Page MenuHomeFreeBSD

No OneTemporary

This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/contrib/ncurses/COPYING b/contrib/ncurses/COPYING
index 87658988b18b..3a2297536813 100644
--- a/contrib/ncurses/COPYING
+++ b/contrib/ncurses/COPYING
@@ -1,29 +1,29 @@
-Copyright 2018-2019,2020 Thomas E. Dickey
+Copyright 2018-2020,2021 Thomas E. Dickey
Copyright 1998-2017,2018 Free Software Foundation, Inc.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, distribute with modifications, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Except as contained in this notice, the name(s) of the above copyright
holders shall not be used in advertising or otherwise to promote the
sale, use or other dealings in this Software without prior written
authorization.
-- vile:txtmode fc=72
--- $Id: COPYING,v 1.9 2020/02/08 13:34:12 tom Exp $
+-- $Id: COPYING,v 1.10 2021/01/01 09:54:30 tom Exp $
diff --git a/contrib/ncurses/INSTALL b/contrib/ncurses/INSTALL
index f3e710d8fa67..95f5a3931683 100644
--- a/contrib/ncurses/INSTALL
+++ b/contrib/ncurses/INSTALL
@@ -1,2335 +1,2391 @@
-------------------------------------------------------------------------------
-- Copyright 2018-2019,2020 Thomas E. Dickey --
-- Copyright 1998-2017,2018 Free Software Foundation, Inc. --
-- --
-- Permission is hereby granted, free of charge, to any person obtaining a --
-- copy of this software and associated documentation files (the --
-- "Software"), to deal in the Software without restriction, including --
-- without limitation the rights to use, copy, modify, merge, publish, --
-- distribute, distribute with modifications, sublicense, and/or sell copies --
-- of the Software, and to permit persons to whom the Software is furnished --
-- to do so, subject to the following conditions: --
-- --
-- The above copyright notice and this permission notice shall be included --
-- in all copies or substantial portions of the Software. --
-- --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN --
-- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE --
-- USE OR OTHER DEALINGS IN THE SOFTWARE. --
-- --
-- Except as contained in this notice, the name(s) of the above copyright --
-- holders shall not be used in advertising or otherwise to promote the --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
-------------------------------------------------------------------------------
--- $Id: INSTALL,v 1.217 2020/02/15 13:39:30 tom Exp $
+-- $Id: INSTALL,v 1.226 2020/09/06 23:41:16 tom Exp $
---------------------------------------------------------------------
How to install Ncurses/Terminfo on your system
---------------------------------------------------------------------
************************************************************
* READ ALL OF THIS FILE BEFORE YOU TRY TO INSTALL NCURSES. *
************************************************************
You should be reading the file INSTALL in a directory called ncurses-d.d, where
d.d is the current version number. There should be several subdirectories,
including `c++', `form', `man', `menu', 'misc', `ncurses', `panel', `progs',
and `test'. See the README file for a roadmap to the package.
If you are a distribution integrator or packager, please read and act on the
-section titled IF YOU ARE A SYSTEM INTEGRATOR below.
+section titled FOR SYSTEM INTEGRATORS below.
If you are converting from BSD curses and do not have root access, be sure
to read the BSD CONVERSION NOTES section below.
If you are trying to build applications using gpm with ncurses,
read the USING NCURSES WITH GPM section below.
-If you are running over the Andrew File System see the note below on
-USING NCURSES WITH AFS.
-
-If you are cross-compiling, see the note below on BUILDING NCURSES WITH A
-CROSS-COMPILER.
+If you are cross-compiling, see the note below on BUILDING WITH A CROSS-COMPILER.
If you want to build the Ada95 binding, go to the Ada95 directory and
follow the instructions there. The Ada95 binding is not covered below.
REQUIREMENTS:
------------
You will need the following to build and install ncurses under UNIX:
* ANSI C compiler (gcc, for instance)
* sh (bash will do)
* awk (mawk or gawk will do)
* sed
* BSD or System V style install (a script is enclosed)
Ncurses has been also built in the OS/2 EMX environment.
INSTALLATION PROCEDURE:
----------------------
1. First, decide whether you want ncurses to replace your existing library (in
which case you'll need super-user privileges) or be installed in parallel
with it.
The --prefix option to configure changes the root directory for installing
ncurses. The default is normally in subdirectories of /usr/local, except
for systems where ncurses is normally installed as a system library (see
"IF YOU ARE A SYSTEM INTEGRATOR"). Use --prefix=/usr to replace your
default curses distribution.
The package gets installed beneath the --prefix directory as follows:
In $(prefix)/bin: tic, infocmp, captoinfo, tset,
reset, clear, tput, toe, tabs
In $(prefix)/lib: libncurses*.* libcurses.a
In $(prefix)/share/terminfo: compiled terminal descriptions
In $(prefix)/include: C header files
Under $(prefix)/man: the manual pages
Note that the configure script attempts to locate previous installation of
ncurses, and will set the default prefix according to where it finds the
ncurses headers.
Do not use commands such as
make install prefix=XXX
to change the prefix after configuration, since the prefix value is used
for some absolute pathnames such as TERMINFO. Instead do this
make install DESTDIR=XXX
See also the discussion of --with-install-prefix.
2. Type `./configure' in the top-level directory of the distribution to
configure ncurses for your operating system and create the Makefiles.
Besides --prefix, various configuration options are available to customize
the installation; use `./configure --help' to list the available options.
If your operating system is not supported, read the PORTABILITY section in
the file ncurses/README for information on how to create a configuration
file for your system.
The `configure' script generates makefile rules for one or more object
models and their associated libraries:
libncurses.a (normal)
libcurses.a (normal, a link to libncurses.a)
This gets left out if you configure with --disable-overwrite.
libncurses.so (shared)
libncurses_g.a (debug)
libncurses_p.a (profile)
libncurses.la (libtool)
If you configure using the --enable-widec option, a "w" is appended to the
library names (e.g., libncursesw.a), and the resulting libraries support
wide-characters, e.g., via a UTF-8 locale. The corresponding header files
are compatible with the non-wide-character configuration; wide-character
features are provided by ifdef's in the header files. The wide-character
library interfaces are not binary-compatible with the non-wide-character
version. Building and running the wide-character code relies on a fairly
recent implementation of libiconv. We have built this configuration on
various systems using libiconv, sometimes requiring libutf8.
If you configure using the --with-pthread option, a "t" is appended to
the library names (e.g., libncursest.a, libncursestw.a).
If you do not specify any models, the normal and debug libraries will be
configured. Typing `configure' with no arguments is equivalent to:
./configure --with-normal --with-debug --enable-overwrite
Typing
./configure --with-shared
makes the shared libraries the default, resulting in
./configure --with-shared --with-normal --with-debug --enable-overwrite
If you want only shared libraries, type
./configure --with-shared --without-normal --without-debug
Rules for generating shared libraries are highly dependent upon the choice
of host system and compiler. We've been testing shared libraries on
several systems, but more work needs to be done to make shared libraries
work on other systems.
If you have libtool installed, you can type
./configure --with-libtool
to generate the appropriate static and/or shared libraries for your
platform using libtool.
You can make curses and terminfo fall back to an existing file of termcap
definitions by configuring with --enable-termcap. If you do this, the
library will search /etc/termcap before the terminfo database, and will
also interpret the contents of the TERM environment variable. See the
section BSD CONVERSION NOTES below.
3. Type `make'. Ignore any warnings, no error messages should be produced.
This should compile the ncurses library, the terminfo compiler tic(1),
captoinfo(1), infocmp(1), toe(1), clear(1) tset(1), reset(1), and tput(1)
programs (see the manual pages for explanation of what they do), some test
programs, and the panels, menus, and forms libraries.
4. Run ncurses and several other test programs in the test directory to
verify that ncurses functions correctly before doing an install that
may overwrite system files. Read the file test/README for details on
the test programs.
NOTE: You must have installed the terminfo database, or set the
environment variable $TERMINFO to point to a SVr4-compatible terminfo
database before running the test programs. Not all vendors' terminfo
databases are SVr4-compatible, but most seem to be.
It is possible to configure ncurses to use other terminfo database formats.
A few are provided as examples in the include-directory (see --with-caps).
If you run the test programs WITHOUT installing terminfo, ncurses may
read the termcap file and cache that in $HOME/.terminfo, which will
thereafter be used instead of the terminfo database. See the comments
on "--enable-getcap-cache", to see why this is a Bad Thing.
The ncurses program is designed specifically to test the ncurses library.
You can use it to verify that the screen highlights work correctly, that
cursor addressing and window scrolling works OK, etc.
5. Once you've tested, you can type `make install' to install libraries,
the programs, the terminfo database and the manual pages. Alternately, you
can type `make install' in each directory you want to install. In the
top-level directory, you can do a partial install using these commands:
'make install.progs' installs tic, infocmp, etc...
'make install.includes' installs the headers.
'make install.libs' installs the libraries (and the headers).
'make install.data' installs the terminfo data. (Note: `tic' must
be installed before the terminfo data can be
compiled).
'make install.man' installs the manual pages.
############################################################################
# CAVEAT EMPTOR: `install.data' run as root will NUKE any existing #
# terminfo database. If you have any custom or unusual entries SAVE them #
# before you install ncurses. #
############################################################################
The terminfo(5) manual page must be preprocessed with tbl(1) before
being formatted by nroff(1). Modern man(1) implementations tend to do
this by default, but you may want to look at your version's manual page
to be sure. You may also install the manual pages after preprocessing
with tbl(1) by specifying the configure option --with-manpage-tbl.
If the system already has a curses library that you need to keep using
you'll need to distinguish between it and ncurses. See the discussion of
--disable-overwrite. If ncurses is installed outside the standard
directories (/usr/include and /usr/lib) then all your users will need to
use the -I option to compile programs and -L to link them.
If you have another curses installed in your system and you accidentally
compile using its curses.h you'll end up with a large number of
undefined symbols at link time.
IF YOU DO NOT HAVE ROOT: Change directory to the `progs' subdirectory
and run the `capconvert' script. This script will deduce various things
about your environment and use them to build you a private terminfo tree,
so you can use ncurses applications.
If more than one user at your site does this, the space for the duplicate
trees is wasted. Try to get your site administrators to install a system-
wide terminfo tree instead.
See the BSD CONVERSION NOTES section below for a few more details.
6. The c++ directory has C++ classes that are built on top of ncurses and
panels. You must have c++ (and its libraries) installed before you can
compile and run the demo.
Use --without-cxx-binding to tell configure to not build the C++ bindings
and demo.
If you do not have C++, you must use the --without-cxx option to tell
the configure script to not attempt to determine the type of 'bool'
which may be supported by C++. IF YOU USE THIS OPTION, BE ADVISED THAT
YOU MAY NOT BE ABLE TO COMPILE (OR RUN) NCURSES APPLICATIONS WITH C++.
-SUMMARY OF CONFIGURE OPTIONS:
-----------------------------
+CONFIGURE OPTIONS:
+-----------------
The configure script provides a short list of its options when you type
./configure --help
The --help and several options are common to all configure scripts that are
generated with autoconf. Those are all listed before the line
--enable and --with options recognized:
The other options are specific to this package. We list them in alphabetic
order.
--disable-assumed-color
With ncurses 5.1, we introduced a new function, assume_default_colors()
which allows applications to specify what the default foreground and
background color are assumed to be. Most color applications use
full-screen color; but a few do not color the background. While the
assumed values can be overridden by invoking assume_default_colors(),
you may find it useful to set the assumed values to the pre-5.1
convention, using this configure option.
--disable-big-core
Assume machine has little memory. The configure script attempts to
determine if your machine has enough memory (about 6Mb) to compile the
terminfo database without writing portions to disk. Some allocators
return deceptive results, so you may have to override the configure
script. Or you may be building tic for a smaller machine.
--disable-big-strings
Disable compile-time optimization of predefined tables which puts
all of their strings into a very long string, to reduce relocation
overhead.
--disable-database
Use only built-in data. The ncurses libraries normally read terminfo
and termcap data from disk. You can configure ncurses to have a
built-in database, aka "fallback" entries. Embedded applications may
have no need for an external database. Some, but not all of the
programs are useful in this configuration, e.g., tset and tput versus
infocmp and tic.
--disable-db-install
Do not install the terminal database. This is used to omit features
for packages, as done with --without-progs.
--disable-echo
Use the option --disable-echo to make the build-log less verbose by
suppressing the display of the compile and link commands. This makes
it easier to see the compiler warnings. (You can always use "make -n"
to see the options that are used).
--disable-ext-funcs
Disable function-extensions. Configure ncurses without the functions
that are not specified by XSI. See ncurses/modules for the exact
list of library modules that would be suppressed.
--disable-gnat-projects
Disable GNAT projects even if usable, for testing old makefile rules.
--disable-hashmap
Compile without hashmap scrolling-optimization code. This algorithm is
the default.
--disable-home-terminfo
The $HOME/.terminfo directory is normally added to ncurses' search
list for reading/writing terminfo entries, since that directory is
more likely writable than the system terminfo database. Use this
option to disable the feature altogether.
--disable-largefile
Disable compiler flags needed to use large-file interfaces.
--disable-leaks
For testing, compile-in code that frees memory that normally would not
be freed, to simplify analysis of memory-leaks.
Any implementation of curses must not free the memory associated with
a screen, since (even after calling endwin()), it must be available
for use in the next call to refresh(). There are also chunks of
memory held for performance reasons. That makes it hard to analyze
curses applications for memory leaks. To work around this, build a
debugging version of the ncurses library which frees those chunks
which it can, and provides the _nc_free_and_exit() function to free
the remainder and then exit. The ncurses utility and test programs
use this feature, e.g., via the ExitProgram() macro.
Because this lies outside of the library's intended usage, it is not
normally considered part of the ABI. If there were some (as yet
unplanned) extension which frees memory in a manner that would let the
library resume and reallocate memory, then that would not use a "_nc_"
prefix.
--disable-lib-suffixes
Suppress the "w", "t" or "tw" suffixes which normally would be added
to the library names for the --enable-widec and --with-pthread options.
--disable-libtool-version
when using --with-libtool, control how the major/minor version numbers
are used for constructing the library name.
The default uses the -version-number feature of libtool, which makes
the library names compatible (though not identical) with the standard
build using --with-shared.
Use --disable-libtool-version to use the libtool -version-info feature.
This corresponds to the setting used before patch 20100515.
Starting with patch 20141115, using this option causes the configure
script to apply the top-level VERSION file to the ABI version used
for libtool.
--disable-lp64
The header files will ignore use of the _LP64 symbol to make chtype
and mmask_t types 32 bits (they may be long on 64-bit hosts, for
compatibility with older releases).
NOTE: this is potentially an ABI change, depending on existing
packages. The default for this option is "disabled" for ncurses
ABI 5, and "enabled" for ABI 6.
--disable-macros
For testing, use functions rather than macros. The program will run
more slowly, but it is simpler to debug. This defines NCURSES_NOMACROS
at build time. See also the --enable-expanded option.
--disable-overwrite
If you are installing ncurses on a system which contains another
development version of curses, or which could be confused by the loader
for another version, we recommend that you leave out the link to
-lcurses. The ncurses library is always available as -lncurses.
Disabling overwrite also causes the ncurses header files to be
installed into a subdirectory, e.g., /usr/local/include/ncurses,
rather than the include directory. This makes it simpler to avoid
compile-time conflicts with other versions of curses.h
Putting the header files into a subdirectory assumes that applications
will follow the (standard) practice of including the headers with
reference to the subdirectory name. For instance, the normal ncurses
header would be included using
#include <ncurses/curses.h>
#include <ncurses/term.h>
while the ncursesw headers would be found this way:
#include <ncursesw/curses.h>
#include <ncursesw/term.h>
In either case (with or without the --disable-overwrite option),
almost all applications are designed to include a related set of
curses header files from the same directory.
Manipulating the --includedir configure option to put header files
directly in a subdirectory of the normal include-directory defeats
this, and breaks builds of portable applications. Likewise, putting
some headers in /usr/include, and others in a subdirectory is a good
way to break builds.
When configured with --disable-overwrite, the installed header files'
embedded #include's are adjusted to use the same style of includes
noted above. In particular, the unctrl.h header is included from
curses.h, which means that a makefile which tells the compiler to
include directly from the subdirectory will fail to compile correctly.
Without some special effort, it will either fail to compile at all,
or the compiler may find a different unctrl.h file.
+ In addition to the curses library, a system may provide its own
+ versions of the add-on libraries (form, menu, panel), which would
+ not be compatible with ncurses. These options allow you to rename
+ ncurses' add-on libraries to avoid conflicts when linking:
+
+ --with-form-libname=XXX
+ --with-menu-libname=XXX
+ --with-panel-libname=XXX
+
+ Rather than renaming them abitrarily, a prefix or suffix is
+ recommended. An "n" prefix provides consistency with ncurses versus
+ curses, i.e.,
+
+ --with-form-libname=nform
+ --with-menu-libname=nmenu
+ --with-panel-libname=npanel
+
+ --disable-pkg-ldflags
+ Omit options in $EXTRA_LDFLAGS from the pkg-config ".pc" and
+ corresponding ncurses*-config script which normally are listed via
+ the "--libs" option. These options are normally used to facilitate
+ linking to ncurses when it was configured to use the rpath feature.
+
+ See also --enable-rpath and --disable-rpath-hack.
+
--disable-relink
If --enable-rpath is given, the generated makefiles normally will
rebuild shared libraries during install. Use this option to simply
copy whatever the linker produced.
Static libraries cannot simply be copied because tools use timestamps
to determine if the library's symbol table is up to date. If your
install program supports the "-p" (preserve timestamp) option, that
is used when --disable-relink is given, to avoid rebuilding the symbol
table.
Finally, some tools ignore the subsecond timestamps supported by some
filesystems. This option adds a 1-second sleep to help those tools
avoid unnecessary relinking during the install process.
--disable-root-environ
Compile with environment restriction, so certain environment variables
are not available when running as root, or via a setuid/setgid
application. These are (for example $TERMINFO) those that allow the
search path for the terminfo or termcap entry to be customized.
--disable-rpath-hack
Normally the configure script helps link libraries found in unusual
places by adding an rpath option to the link command. If you are
building packages, this feature may be redundant. Use this option
to suppress the feature.
--disable-scroll-hints
Compile without scroll-hints code. This option is ignored when
hashmap scrolling is configured, which is the default.
--disable-stripping
Do not strip installed executables.
--disable-tic-depends
When building shared libraries, normally the tic library is linked to
depend upon the ncurses library (or equivalently, on the tinfo-library
if the --with-termlib option was given). The tic- and tinfo-library
ABIs do not depend on the --enable-widec option. Some packagers have
used this to reduce the number of library files which are packaged by
using only one copy of those libraries. To make this work properly,
the tic library must be built without an explicit dependency on the
underlying library (ncurses vs ncursesw, tinfo vs tinfow). Use this
configure option to do that.
For example
configure --with-ticlib --with-shared --disable-tic-depends
--disable-tparm-varargs
Portable programs should call tparm() using the fixed-length parameter
list documented in X/Open. ncurses provides varargs support for this
function. Use --disable-tparm-varargs to disable this support.
--disable-wattr-macros
The 6.0 ABI adds support for extended colors and for extended mouse.
The former is a noticeable problem when developers inadvertently
compile using the ncurses6 header files and link with an ncurses5
library, because the wattr* macros use a new field in the WINDOW
structure. These macros are used in several applications.
Since ncurses provides an actual function for each of these macros,
suppressing them from the curses.h header allows the ncurses5 libraries
to be used in most applications.
NOTE: The extended colors also are used in the cchar_t structure, but
fewer applications use that.
NOTE: This workaround does not help with mismatches in the ncurses
mouse version. The extended mouse feature uses one less fewer bit for
each button, so that only the first button will work as expected with
a mismatch between header and library. Again, most applications will
work, since most use only the first button.
--enable-assertions
For testing, compile-in assertion code. This is used only for a few
places where ncurses cannot easily recover by returning an error code.
--enable-broken_linker
A few platforms have what we consider a broken linker: it cannot link
objects from an archive solely by referring to data objects in those
files, but requires a function reference. This configure option
changes several data references to functions to work around this
problem.
NOTE: With ncurses 5.1, this may not be necessary, since we are
told that some linkers interpret uninitialized global data as a
different type of reference which behaves as described above. We have
explicitly initialized all of the global data to work around the
problem.
--enable-bsdpad
Recognize BSD-style prefix padding. Some ancient BSD programs (such as
nethack) call tputs("50") to implement delays.
--enable-colorfgbg
Compile with experimental $COLORFGBG code. That environment variable
is set by some terminal emulators as a hint to applications, by
advertising the default foreground and background colors. During
initialization, ncurses sets color pair 0 to match this.
--enable-const
The curses interface as documented in XSI is rather old, in fact
including features that precede ANSI C. The prototypes generally do
not make effective use of "const". When using stricter compilers (or
gcc with appropriate warnings), you may see warnings about the mismatch
between const and non-const data. We provide a configure option which
changes the interfaces to use const - quieting these warnings and
reflecting the actual use of the parameters more closely. The ncurses
library uses the symbol NCURSES_CONST for these instances of const,
and if you have asked for compiler warnings, will add gcc's const-qual
warning. There will still be warnings due to subtle inconsistencies
in the interface, but at a lower level.
NOTE: configuring ncurses with this option may detract from the
portability of your applications by encouraging you to use const in
places where the XSI curses interface would not allow them. Similar
issues arise when porting to SVr4 curses, which uses const in even
fewer places.
--enable-expanded
For testing, generate functions for certain macros to make them visible
as such to the debugger. See also the --disable-macros option.
+ --enable-exp-win32
+ When configuring for MinGW, use the experimental Windows 10 driver.
+
--enable-ext-colors
Extend the cchar_t structure to allow more than 16 colors to be
encoded. This applies only to the wide-character (--enable-widec)
configuration.
NOTE: using this option will make libraries which are not binary-
compatible with libncursesw 5.4. None of the interfaces change, but
applications which have an array of cchar_t's must be recompiled.
--enable-ext-mouse
Modify the encoding of mouse state to make room for a 5th mouse button.
That allows one to use ncurses with a wheel mouse with xterm or
similar X terminal emulators.
NOTE: using this option will make libraries which are not binary-
compatible with libncursesw 5.4. None of the interfaces change, but
applications which have mouse mask mmask_t's must be recompiled.
--enable-ext-putwin
Modify the file-format written by putwin() to use printable text rather
than binary files, allowing getwin() to read screen dumps written by
differently-configured ncurses libraries. The extended getwin() can
still read binary screen dumps from the "same" configuration of
ncurses. This does not change the ABI (the binary interface seen by
calling applications).
+ --enable-fvisibility
+ Use the gcc "-fvisibility=hidden" option to make symbols which are not
+ explicitly exported, "hidden". Doing this may reduce the number of
+ symbols exported in the C++ binding; it should have less effect on the
+ C libraries when symbol-versioning is used.
+
--enable-getcap
Use the 4.4BSD getcap code if available, or a bundled version of it to
fetch termcap entries. Entries read in this way cannot use (make
cross-references to) the terminfo tree, but it is faster than reading
/etc/termcap.
If configured for one of the *BSD systems, this automatically uses
the hashed database system produced using cap_mkdb or similar tools.
In that case, there is no advantage in using the --enable-getcap-cache
option.
See also the --with-hashed-db option.
--enable-getcap-cache
Cache translated termcaps under the directory $HOME/.terminfo
NOTE: this sounds good - it makes ncurses run faster the second time.
But look where the data comes from - an /etc/termcap containing lots of
entries that are not up to date. If you configure with this option and
forget to install the terminfo database before running an ncurses
application, you will end up with a hidden terminfo database that
generally does not support color and will miss some function keys.
--enable-hard-tabs
Compile-in cursor-optimization code that uses hard-tabs. We would make
this a standard feature except for the concern that the terminfo entry
may not be accurate, or that your stty settings have disabled the use
of tabs.
--enable-interop
Compile-in experimental interop bindings. These provide generic types
for the form-library.
--enable-mixed-case
Controls whether the filesystem on which the terminfo database resides
supports mixed-case filenames (normal for UNIX, but not on other
systems). If you do not specify this option, the configure script
checks the current filesystem.
--enable-no-padding
Compile-in support for the $NCURSES_NO_PADDING environment variable,
which allows you to suppress the effect of non-mandatory padding in
terminfo entries. This is the default, unless you have disabled the
extended functions.
--enable-opaque-curses
--enable-opaque-form
--enable-opaque-menu
--enable-opaque-panel
Define symbol in curses.h which controls whether some library
structures are treated as "opaque". The --enable-opaque-curses option
is overridden by the --enable-reentrant option.
--enable-pc-files
If pkg-config is found (see --with-pkg-config), generate ".pc" files
for each of the libraries, and install them in pkg-config's library
directory.
--enable-pthreads-eintr
add logic in threaded configuration to ensure that a read(2) system
call can be interrupted for SIGWINCH.
--enable-reentrant
Compile configuration which improves reentrant use of the library by
reducing global and static variables. This option is also set if
--with-pthread is used.
Enabling this option adds a "t" to the library names, except for the
special case when --enable-weak-symbols is also used.
--enable-rpath
Use rpath option when generating shared libraries, and (with some
restrictions) when linking the corresponding programs. This originally
(in 1997) applied mainly to systems using the GNU linker (read the
manpage).
More recently it is useful for systems that require special treatment
shared libraries in "unusual" locations. The "system" libraries reside
in directories which are on the loader's default search-path. While
you may be able to use workarounds such as the $LD_LIBRARY_PATH
environment variable, they do not work with setuid applications since
the LD_LIBRARY_PATH variable would be unset in that situation.
This option does not apply to --with-libtool, since libtool makes
extra assumptions about rpath.
--enable-safe-sprintf
Compile with experimental safe-sprintf code. You may consider using
this if you are building ncurses for a system that has neither
vsnprintf() or vsprintf(). It is slow, however, and is used only on
very old systems which lack vsnprintf().
--enable-signed-char
The term.h header declares a Booleans[] array typed "char". But it
stores signed values there and "char" is not necessarily signed.
Some packagers choose to alter the type of Booleans[] though this
is not strictly compatible. This option allows one to implement this
alteration without patching the source code.
--enable-sigwinch
Compile support for ncurses' SIGWINCH handler. If your application has
its own SIGWINCH handler, ncurses will not use its own. The ncurses
handler causes wgetch() to return KEY_RESIZE when the screen-size
changes. This option is the default, unless you have disabled the
extended functions.
--enable-sp-funcs
Compile-in support for extended functions which accept a SCREEN pointer,
reducing the need for juggling the global SP value with set_term() and
delscreen().
--enable-string-hacks
Controls whether strlcat and strlcpy may be used. The same issue
applies to OpenBSD's warnings about snprintf, noting that this function
is weakly standardized.
Aside from stifling these warnings, there is no functional improvement
in ncurses.
--enable-symlinks
If your system supports symbolic links, make tic use symbolic links
rather than hard links to save diskspace when writing aliases in the
terminfo database.
--enable-tcap-names
Compile-in support for user-definable terminal capabilities. Use the
-x option of tic and infocmp to treat unrecognized terminal
capabilities as user-defined strings. This option is the default,
unless you have disabled the extended functions.
--enable-term-driver
Enable experimental terminal-driver. This is currently used for the
MinGW port, by providing a way to substitute the low-level terminfo
library with different terminal drivers.
--enable-termcap
Compile in support for reading terminal descriptions from termcap if no
match is found in the terminfo database. See also the --enable-getcap
and --enable-getcap-cache options.
Termcap support requires run-time parsing rather than loading
predigested data. If you have specified --with-ticlib, then you
cannot have termcap support since run-time parsing is done in the
tic library, which is intentionally not part of normal linkage
dependencies.
--enable-warnings
Turn on GCC compiler warnings. There should be only a few.
--enable-weak-symbols
If the --with-pthread option is set, check if the compiler supports
weak-symbols. If it does, then name the thread-capable library without
the "t" (libncurses rather than libncursest), and provide for
dynamically loading the pthreads entrypoints at runtime. This allows
one to reduce the number of library files for ncurses.
--enable-wgetch-events
Compile with experimental wgetch-events code. See ncurses/README.IZ
--enable-widec
Compile with wide-character code. This makes a different version of
the libraries (e.g., libncursesw.so), which stores characters as
wide-characters,
NOTE: applications compiled with this configuration are not compatible
with those built for 8-bit characters. You cannot simply make a
symbolic link to equate libncurses.so with libncursesw.so
NOTE: the Ada95 binding may be built against either version of the the
ncurses library, but you must decide which: the binding installs the
same set of files for either version. Currently (2002/6/22) it does
not use the extended features from the wide-character code, so it is
probably better to not install the binding for that configuration.
--enable-xmc-glitch
Compile-in support experimental xmc (magic cookie) code.
--with-abi-version=NUM
Override the ABI version, which is used in shared library filenames.
Normally this is the same as the release version; some ports have
special requirements for compatibility.
This option does not affect linking with libtool, which uses the
release major/minor numbers.
--with-ada-compiler=CMD
Specify the Ada95 compiler command (default "gnatmake")
--with-ada-include=DIR
Tell where to install the Ada includes (default:
PREFIX/lib/ada/adainclude)
--with-ada-libname=NAME
Override the name of the Ada binding (default: "AdaCurses")
--with-ada-objects=DIR
Tell where to install the Ada objects (default: PREFIX/lib/ada/adalib)
--with-ada-sharedlib
Build a shared library for Ada95 binding, if the compiler permits.
NOTE: You must also set the --with-shared option on some platforms
for a successful build. You need not use this option when you set
--with-shared, unless you want to use the Ada shared library.
--with-bool=TYPE
If --without-cxx is specified, override the type used for the "bool"
declared in curses.h (normally the type is automatically chosen to
correspond with that in <stdbool.h>, or defaults to platform-specific
sizes).
--with-build-cc=XXX
If cross-compiling, specify a host C compiler, which is needed to
compile a few utilities which generate source modules for ncurses.
If you do not give this option, the configure script checks if the
$BUILD_CC variable is set, and otherwise defaults to gcc or cc.
--with-build-cflags=XXX
If cross-compiling, specify the host C compiler-flags. You might need
to do this if the target compiler has unusual flags which confuse the
host compiler.
You can also set the environment variable $BUILD_CFLAGS rather than
use this option.
--with-build-cpp=XXX
This option is provided by the same macro used for $BUILD_CC, etc.,
but is not directly used by ncurses.
--with-build-cppflags=XXX
If cross-compiling, specify the host C preprocessor-flags. You might
need to do this if the target compiler has unusual flags which confuse
the host compiler.
You can also set the environment variable $BUILD_CPPFLAGS rather than
use this option.
--with-build-ldflags=XXX
If cross-compiling, specify the host linker-flags. You might need to
do this if the target linker has unusual flags which confuse the host
compiler.
You can also set the environment variable $BUILD_LDFLAGS rather than
use this option.
--with-build-libs=XXX
If cross-compiling, the host libraries. You might need to do this if
the target environment requires unusual libraries.
You can also set the environment variable $BUILD_LIBS rather than
use this option.
--with-caps=XXX
Specify an alternate terminfo capabilities file, which makes the
configure script look for "include/Caps.XXX". A few systems, e.g.,
AIX 4.x use the same overall file-format as ncurses for terminfo
data, but use different alignments within the tables to support
legacy applications. For those systems, you can configure ncurses
to use a terminfo database which is compatible with the native
applications.
--with-ccharw-max=XXX
Override the size of the wide-character array in cchar_t structures.
Changing this will alter the binary interface. This defaults to 5.
--with-chtype=TYPE
Override type of chtype, which stores the video attributes and (if
--enable-widec is not given) a character. Prior to ncurses 5.5, this
was always unsigned long, but with ncurses 5.5, it may be unsigned.
Use this option if you need to preserve compatibility with 64-bit
executables, e.g., by setting "--with-chtype=long" (the configure
script supplies "unsigned").
--with-config-suffix=XXX
Specify a suffix for the ncursesw6-config file, etc., used to work
around conflicts with packages.
+ --with-cxx-libname=NAME
+ Override the basename of the ncurses++ library (default: "ncurses++")
+
--with-cxx-shared
When --with-shared is set, build libncurses++ as a shared library.
This implicitly relies upon building with gcc/g++, since other
compiler suites may have differences in the way shared libraries are
built. libtool by the way has similar limitations.
--with-database=XXX
Specify the terminfo source file to install. Usually you will wish
to install ncurses' default (misc/terminfo.src). Certain systems
have special requirements, e.g, OS/2 EMX has a customized terminfo
source file.
--with-dbmalloc
For testing, compile and link with Conor Cahill's dbmalloc library.
This also sets the --disable-leaks option.
--with-debug
Generate debug-libraries (default). These are named by adding "_g"
to the root, e.g., libncurses_g.a
--with-default-terminfo-dir=XXX
Specify the default terminfo database directory. This is normally
DATADIR/terminfo, e.g., /usr/share/terminfo.
--with-dmalloc
For testing, compile and link with Gray Watson's dmalloc library.
This also sets the --disable-leaks option.
--with-export-syms[=XXX]
Limit exported symbols using libtool. The configure script
automatically chooses an appropriate ".sym" file, which lists the
symbols which are part of the ABI.
--with-extra-suffix[=XXX]
Add the given suffix to header- and library-names to simplify
installing incompatible ncurses libraries, e.g., those using a
different ABI. The renaming affects the name of the
include-subdirectory if --disable-overwrite is given.
--with-fallbacks=XXX
Specify a list of fallback terminal descriptions which will be
compiled into the ncurses library. See CONFIGURING FALLBACK ENTRIES.
See also "--with-tic-path" and "--with-infocmp-path".
+ --with-form-libname=NAME
+ Override the basename of the form library (default: "form")
+
--with-gpm
use Alessandro Rubini's GPM library to provide mouse support on the
Linux console. Prior to ncurses 5.5, this introduced a dependency on
the GPM library.
Currently ncurses uses the dlsym() function to bind to the library at
runtime, so it is only necessary that the library be present when
ncurses is built, to obtain the filename (or soname) used in the
corresponding dlopen() call. If you give a value for this option,
e.g.,
--with-gpm=$HOME/tmp/test-gpm.so
that overrides the configure check for the soname.
See also --without-dlsym
--with-hashed-db[=XXX]
Use a hashed database for storing terminfo data rather than storing
each compiled entry in a separate binary file within a directory
tree.
In particular, this uses the Berkeley database 1.8.5 interface, as
provided by that and its successors db 2, 3, and 4. The actual
interface is slightly different in the successor versions of the
Berkeley database. The database should have been configured using
"--enable-compat185".
If you use this option for configuring ncurses, tic will only be able
to write entries in the hashed database. infocmp can still read
entries from a directory tree as well as reading entries from the
hashed database. To do this, infocmp determines whether the $TERMINFO
variable points to a directory or a file, and reads the directory-tree
or hashed database respectively.
You cannot have a directory containing both hashed-database and
filesystem-based terminfo entries.
Use the parameter value to give the install-prefix used for the
database, e.g.,
--with-hashed-db=/usr/local/BigBase
to find the corresponding include- and lib-directories under the
given directory. Alternatively, you can specify a directory leaf
name, e.g.,
--with-hashed-db=db4
to make the configure script look for files in a subdirectory such as
/usr/include/db4/db.h
/usr/lib/db4/libdb.so
See also the --enable-getcap option.
--with-infocmp-path[=XXX]
Use this option to override the automatic detection of tic in your
$PATH when building fallbacks (see "--with-fallbacks").
--with-install-prefix=XXX
Allows you to specify an alternate location for installing ncurses
after building it. The value you specify is prepended to the "real"
install location. This simplifies making binary packages. The
makefile variable DESTDIR is set by this option. It is also possible
to use
make install DESTDIR=XXX
since the makefiles pass that variable to subordinate makes.
NOTE: a few systems build shared libraries with fixed pathnames; this
option probably will not work for those configurations.
--with-lib-prefix=XXX
OS/2 EMX used a different naming convention from most Unix-like
platforms. It required that the "lib" part of a library name was
omitted. Newer EMX as part of eComStation does not follow that
convention. Use this option to override the configure script's
assumptions about the library-prefix. If this option is omitted, it
uses the original OS/2 EMX convention for that platform. Use
"--with-lib-prefix=lib" for the newer EMX in eComStation. Use
"--without-lib-prefix" to suppress it for other odd platforms.
--with-libtool[=XXX]
Generate libraries with libtool. If this option is selected, then it
overrides all other library model specifications. Note that libtool
must already be installed, uses makefile rules dependent on GNU make,
and does not promise to follow the version numbering convention of
other shared libraries on your system. However, if the --with-shared
option does not succeed, you may get better results with this option.
If a parameter value is given, it must be the full pathname of the
particular version of libtool, e.g.,
/usr/bin/libtool-1.2.3
It is possible to rebuild the configure script to use the automake
macros for libtool, e.g., AC_PROG_LIBTOOL. See the comments in
aclocal.m4 for CF_PROG_LIBTOOL, and ensure that you build configure
using the appropriate patch for autoconf from
https://invisible-island.net/autoconf/
--with-libtool-opts=XXX
Allow user to pass additional libtool options into the library creation
and link steps. The main use for this is to do something like
./configure --with-libtool-opts=-static
to get the same behavior as automake-flavored
./configure --enable-static
--with-manpage-aliases
Tell the configure script you wish to create entries in the
man-directory for aliases to manpages which list them, e.g., the
functions in the panel manpage. This is the default. You can disable
it if your man program does this. You can also disable
--with-manpage-symlinks to install files containing a ".so" command
rather than symbolic links.
--with-manpage-format=XXX
Tell the configure script how you would like to install man-pages. The
option value must be one of these: gzip, compress, BSDI, normal,
formatted. If you do not give this option, the configure script
attempts to determine which is the case.
--with-manpage-renames=XXX
Tell the configure script that you wish to rename the manpages while
installing. Currently the only distribution which does this is Debian.
The option value specifies the name of a file that lists the renamed
files, e.g., $srcdir/man/man_db.renames
--with-manpage-symlinks
Tell the configure script that you wish to make symbolic links in the
man-directory for aliases to the man-pages. This is the default, but
can be disabled for systems that provide this automatically. Doing
this on systems that do not support symbolic links will result in
copying the man-page for each alias.
--with-manpage-tbl
Tell the configure script that you wish to preprocess the manpages
by running them through tbl to generate tables understandable by
nroff.
+ --with-menu-libname=NAME
+ Override the basename of the menu library (default: "menu")
+
--with-mmask-t=TYPE
Override type of mmask_t, which stores the mouse mask. Prior to
ncurses 5.5, this was always unsigned long, but with ncurses 5.5, it
may be unsigned. Use this option if you need to preserve compatibility
with 64-bit executables.
--with-normal
Generate normal (i.e., static) libraries (default).
Note: on Linux, the configure script will attempt to use the GPM
library via the dlsym() function call. Use --without-dlsym to disable
this feature, or --without-gpm, depending on whether you wish to use
GPM.
--with-ospeed=TYPE
Override type of ospeed variable, which is part of the termcap
compatibility interface. In termcap, this is a 'short', which works
for a wide range of baudrates because ospeed is not the actual speed
but the encoded value, e.g., B9600 would be a small number such as 13.
However the encoding scheme originally allowed for values "only" up to
38400bd. A newer set of definitions past 38400bd is not encoded as
compactly, and is not guaranteed to fit into a short (see the function
cfgetospeed(), which returns a speed_t for this reason). In practice,
applications that required knowledge of the ospeed variable, i.e.,
those using termcap, do not use the higher speeds. Your application
(or system, in general) may or may not.
+ --with-panel-libname=NAME
+ Override the basename of the panel library (default: "panel")
+
--with-pc-suffix=SUFFIX
If ".pc" files are installed, optionally add a suffix to the files
and corresponding package names to separate unusual configurations.
If no option value is given (or if it is "none"), no suffix is added.
--with-pcre2
Add PCRE2 (Perl-compatible regular expressions v2) to the build if it
is available and the user requests it. Assume the application will
otherwise use the POSIX interface.
This is useful for MinGW builds because the usual POSIX interface is
not supplied by the development environment, while ncurses' form
library uses a regular expression feature for one of the field types.
--with-pkg-config=[DIR]
Check for pkg-config, optionally specifying its path.
--with-pkg-config-libdir=[DIR]
If pkg-config was found, override the automatic check for its library
path.
--with-profile
Generate profile-libraries These are named by adding "_p" to the root,
e.g., libncurses_p.a
--with-pthread
Link with POSIX threads, set --enable-reentrant. The use_window() and
use_screen() functions will use mutex's, allowing rudimentary support
for multithreaded applications.
--with-rcs-ids
Compile-in RCS identifiers. Most of the C files have an identifier.
--with-rel-version=NUM
Override the release version, which may be used in shared library
filenames. This consists of a major and minor version number separated
by ".". Normally the major version number is the same as the ABI
version; some ports have special requirements for compatibility.
--with-shared
Generate shared-libraries. The names given depend on the system for
which you are building, typically using a ".so" suffix, along with
symbolic links that refer to the release version.
NOTE: Unless you override the configure script by setting the $CFLAGS
environment variable, these will not be built with the -g debugging
option.
NOTE: For some configurations, e.g., installing a new version of
ncurses shared libraries on a machine which already has ncurses
shared libraries, you may encounter problems with the linker.
For example, it may prevent you from running the build tree's
copy of tic (for installing the terminfo database) because it
loads the system's copy of the ncurses shared libraries.
In that case, using the misc/shlib script may be helpful, since it
sets $LD_LIBRARY_PATH to point to the build tree, e.g.,
./misc/shlib make install
Alternatively, for most platforms, the linker accepts a list of
directories which will be searched for libraries at run-time. The
configure script allows you to modify this list using the
RPATH_LIST environment variable. It is a colon-separated list of
directories (default: the "libdir" set via the configure script).
If you set that to put "../lib" first in the list, the linker will
look first at the build-directory, and avoid conflict with libraries
already installed. One drawback to this approach is that libraries
can be accidentally searched in any "../lib" directory.
NOTE: If you use the --with-ada-sharedlib option, you should also
set this option, to ensure that C-language modules needed for the
Ada binding use appropriate compiler options.
--with-shlib-version=XXX
Specify whether to use the release or ABI version for shared libraries.
This is normally chosen automatically based on the type of system
which you are building on. We use it for testing the configure script.
--with-sysmouse
use FreeBSD sysmouse interface provide mouse support on the console.
--with-system-type=XXX
For testing, override the derived host system-type which is used to
decide things such as the linker commands used to build shared
libraries. This is normally chosen automatically based on the type of
system which you are building on. We use it for testing the configure
script.
--with-terminfo-dirs=XXX
Specify a search-list of terminfo directories which will be compiled
into the ncurses library (default: DATADIR/terminfo)
This is a colon-separated list, like the TERMINFO_DIRS environment
variable.
--with-termlib[=XXX]
When building the ncurses library, organize this as two parts: the
curses library (libncurses) and the low-level terminfo library
(libtinfo). This is done to accommodate applications that use only
the latter. The terminfo library is about half the size of the total.
If an option value is given, that overrides the name of the terminfo
library. For instance, if the wide-character version is built, the
terminfo library would be named libtinfow. But the libtinfow interface
is upward compatible from libtinfo, so it would be possible to overlay
libtinfo.so with a "wide" version of libtinfow.so by renaming it with
this option.
--with-termpath=XXX
Specify a search-list of termcap files which will be compiled into the
ncurses library (default: /etc/termcap:/usr/share/misc/termcap)
--with-tic-path[=XXX]
Use this option to override the automatic detection of tic in your
$PATH when building fallbacks (see "--with-fallbacks").
--with-ticlib[=XXX]
When building the ncurses library, build a separate library for
the modules that are used only by the utility programs. Normally
those would be bundled with the termlib or ncurses libraries.
If an option value is given, that overrides the name of the tic
library. As in termlib, there is no ABI difference between the
"wide" libticw.so and libtic.so
NOTE: Overriding the name of the tic library may be useful if you are
also using the --with-termlib option to rename libtinfo. If you are
not doing that, renaming the tic library can result in conflicting
library dependencies for tic and other programs built with the tic
library.
--with-tparm-arg[=XXX]
Override the type used for tparm() arguments, which normally is a
"long". However the function must assume that its arguments can hold a
pointer to char's which is not always workable for 64-bit platforms. A
better choice would be intptr_t, which was not available at the time
tparm's interface was defined.
If the option is not given, this defaults to "long".
--with-trace
Configure the trace() function as part of the all models of the ncurses
library. Normally it is part of the debug (libncurses_g) library only.
--with-valgrind
For testing, compile with debug option.
This also sets the --disable-leaks option.
--with-versioned-syms[=XXX]
The Solaris, GNU and reportedly some other linkers (ld) accept a
"--version-script" option which tells the linker to annotate the
resulting objects with version identifiers.
Use "objdump -T" on a library to see the annotations.
The configure script attempts to automatically apply a suitable ".map"
file to provide this information for Linux. Solaris mapfiles differ:
a) comments are not accepted
b) wildcards are not accepted, except for a special case of "_*".
c) each symbol listed in the map file must exist in the library
The Solaris limitations conflict with the development goal of providing
a small set of ".map" files as examples, which cover the most common
configurations. Because that coverage is done by merging together
several builds, some symbols will be listed in the the ".map" files
that do not happen to be present in one configuration or another.
The sample ".map" (and ".sym") files are generated using a set of
scripts which build several configurations for each release version,
checking to see which of the "_nc_" symbols can be made local. In
addition to the ncurses libraries and programs, the symbols used
by the "tack" program before version 1.08 are made global.
These sample ".map" files will not cover all possible combinations.
In some cases, e.g., when using the --with-weak-symbols option, you
may prefer to use a different ".map" file by setting this option's
value.
--with-wrap-prefix=XXX
When using the --enable-reentrant option, ncurses redefines variables
that would be global in curses, e.g., LINES, as a macro that calls a
"wrapping" function which fetches the data from the current SCREEN
structure. Normally that function is named by prepending "_nc_" to the
variable's name. The function is technically private (since portable
applications would not refer directly to it). But according to one
line of reasoning, it is not the same type of "private" as functions
which applications should not call even via a macro. This configure
option lets you choose the prefix for these wrapped variables.
--with-x11-rgb=FILE
Provide a pathname for the X11 rgb file, used by the picsmap program.
This overrides a configure check which usually works, but is needed
due to the lack of standardization for X11's files.
--with-xterm-kbs=XXX
Configure xterm's terminfo entries to use either BS (^H, i.e., ASCII
backspace) or DEL (^?, or 127). XXX can be BS (or bs, 8) or DEL
(or del, 127).
During installation, the makefile and scripts modifies the "xterm+kbs"
terminfo entry to use this setting.
--without-ada
Suppress the configure script's check for Ada95, do not build the
Ada95 binding and related demo.
--without-curses-h
Don't install the ncurses header with the name "curses.h". Rather,
install as "ncurses.h" and modify the installed headers and manpages
accordingly.
Likewise, do not install an alias "curses" for the ncurses manpage.
--without-cxx
XSI curses declares "bool" as part of the interface. C++ also declares
"bool". Neither specifies the size and type of booleans, but both
insist on the same name. We chose to accommodate this by making the
configure script check for the size and type (e.g., unsigned or signed)
that your C++ compiler uses for booleans. If you do not wish to use
ncurses with C++, use this option to tell the configure script to not
adjust ncurses bool to match C++.
--without-cxx-binding
Suppress the configure script's check for C++, do not build the
C++ binding and related demo.
--without-develop
Disable development options. This does not include those that change
the interface, such as --enable-widec.
--without-dlsym
Do not use dlsym() to load GPM dynamically.
--without-manpages
Tell the configure script to suppress the install of ncurses' manpages.
--without-progs
Tell the configure script to suppress the build of ncurses' application
programs (e.g., tic). The test applications will still be built if you
type "make", though not if you simply do "make install".
--without-tack
Suppress build/install with tack program, if it happens to be
in the same build-tree (tack was moved out of the ncurses source-tree
in 20070203).
--without-tests
Tell the configure script to suppress the build of ncurses' test
programs.
--without-xterm-new
Tell the configure script to use "xterm-old" for the entry used in
the terminfo database. This will work with variations such as
X11R5 and X11R6 xterm.
-COMPATIBILITY WITH OLDER VERSIONS OF NCURSES:
---------------------------------------------
+COMPATIBILITY WITH OLDER RELEASES:
+---------------------------------
Because ncurses implements X/Open Curses, its interface is fairly stable.
That does not mean the interface does not change. Changes are made to the
documented interfaces when we find differences between ncurses and X/Open
or implementations which largely correspond to X/Open (such as Solaris).
We add extensions to those interfaces to solve problems not addressed by
the original curses design, but those must not conflict with the X/Open
documentation.
Here are some of the major interface changes, and related problems which
you may encounter when building a system with different versions of
ncurses:
6.2 (Feb 12, 2020)
Interface changes:
+ the terminal database must be compiled with ncurses 6.2 tic;
older versions of tic/infocmp will not work. Aside from that,
the compiled database will work with older applications.
+ "*.pc" and "ncurses*-config" files give the same information.
+ vwprintw and vwscanw are deprecated.
Added extensions:
+ These make it simpler to substitute a debug-configuration of the
library for non-debug:
curses_trace
exit_curses
exit_terminfo
Added internal functions (other than "_sp" variants):
+ These provide fast-lookup of common user-defined capabilities:
_nc_find_user_entry
_nc_get_userdefs_table
_nc_get_hash_user
+ This is added to work around compiler-warnings:
_nc_fmt_funcptr
Removed internal functions:
+ _nc_import_termtype
Modified internal functions:
+ _nc_reserve_pairs no longer returns a value
6.1 (Jan 27, 2018)
Interface changes:
+ X/Open Curses specifies a "reserved" void* parameter in several
functions, saying that it must be NULL. In this release, if the
parameter is non-NULL, it is interpreted as a point to an integer
containing a color pair. In previous releases, a non-NULL parameter
caused an error return. Portable applications are unaffected. Here
are the functions which have been extended:
attr_get
attr_off
attr_on
attr_set
chgat
color_set
mvchgat
mvwchgat
slk_attr_off
slk_attr_on
slk_attr_set
wattr_get
wattr_on
wattr_off
wattr_set
wchgat
wcolor_set
+ the TERMINAL structure declared in <term.h> has been made opaque,
and its size increased to handle the increased size of color pair
and color value, as well as other numeric capabilities.
A few applications required change, e.g., to use def_prog_mode;
only one application (tack) is known to have a valid reason for
accessing these internal details, and that was addressed by the
release of tack 1.08 in 2017. Internal functions marked as used
by tack will be deprecated in future releases.
Added extensions:
+ Several new functions were added to manipulate extended color pairs
and color values. These include:
alloc_pair
extended_color_content
extended_pair_content
extended_slk_color
find_pair
free_pair
init_extended_color
init_extended_pair
reset_color_pairs
as well as corresponding sp-functions.
+ A new terminfo capability "RGB" tells the ncurses library that the
color values are red/green/blue, to eliminate the need for palettes
in that special case for the color_content function.
Added internal functions (other than "_sp" variants):
_nc_copy_termtype2
_nc_export_termtype2
_nc_fallback2
_nc_find_prescr
_nc_forget_prescr
_nc_free_termtype2
_nc_read_entry2
_nc_write_object
Removed internal functions:
_nc_check_termtype
_nc_resolve_uses
Modified internal functions:
+ symbols are used by tic/infocmp/toe:
_nc_align_termtype - change parameters to TERMTYPE2*
_nc_check_termtype2 - change parameter to TERMTYPE2*
_nc_read_file_entry - change parameter to TERMTYPE2*
_nc_read_termtype - change parameter to TERMTYPE2*
_nc_trim_sgr0 - change parameter to TERMTYPE2*
_nc_write_entry - change parameter to TERMTYPE2*
+ symbols used only within the library:
_nc_fallback - change return type to TERMTYPE2*
_nc_init_termtype - change parameter to TERMTYPE2*
6.0 (Aug 08, 2015)
Interface changes:
+ The 6.0 ABI modifies the defaults for these configure options:
--enable-const
--enable-ext-colors
--enable-ext-mouse
--enable-ext-putwin
--enable-interop
--enable-lp64
--enable-sp-funcs
--with-chtype=uint32_t
--with-mmask_t=uint32_t
--with-tparm-arg=intptr_t
+ ncurses supports symbol versioning. If you use this feature, about
half of the "_nc_" private symbols are changed to local symbols.
+ a few applications may need to explicitly flush the standard output
when switching between printf's and (curses) printw.
Added extensions:
+ use_tioctl is an improvement over use_env
+ added wgetdelay to support the NCURSES_OPAQUE feature.
Added internal functions (other than "_sp" variants):
_nc_init_termtype
_nc_mvcur
_nc_putchar
_nc_setenv_num
_nc_trace_mmask_t
Removed internal functions:
none
Modified internal functions:
_nc_do_color - change parameters from short/bool to int
_nc_keypad - change parameter from bool to int
_nc_setupscreen - change parameter from bool to int
_nc_signal_handler - change parameter from bool to int
5.9 (Apr 04, 2011)
5.8 (Feb 26, 2011)
Interface changes:
+ add an alternate library configuration, i.e., "terminal driver" to
support port to Windows, built with MinGW. There are two drivers
(terminfo and Windows console). The terminfo driver works on other
platforms.
+ add a new set of functions which accept a SCREEN* parameter, in
contrast with the original set which use the global value "sp".
By default, these names end with "_sp", and are otherwise
functionally identical with the originals.
In addition to the "_sp" functions, there are a few new functions
associated with this feature: ceiling_panel, ground_panel,
new_prescr.
If the library is not built with the sp-funcs extension, there
are no related interface changes.
+ add tiparm function based on review of X/Open Curses Issue 7.
+ change internal _nc_has_mouse function to public has_mouse function
Added extensions:
+ add a few more functions to support the NCURSES_OPAQUE feature:
get_escdelay, is_pad, is_subwin
Added internal functions (other than "_sp" variants):
_nc_curscr_of
_nc_format_slks
_nc_get_alias_table
_nc_get_hash_info
_nc_insert_wch
_nc_newscr_of
_nc_outc_wrapper
_nc_retrace_char
_nc_retrace_int_attr_t
_nc_retrace_mmask_t
_nc_setup_tinfo
_nc_stdscr_of
_nc_tinfo_cmdch
Removed internal functions:
_nc_makenew (some configurations replace by _nc_makenew_sp)
Modified internal functions:
_nc_UpdateAttrs
_nc_get_hash_table
_nc_has_mouse
_nc_insert_ch
_nc_wgetch
5.7 (November 2, 2008)
Interface changes:
+ generate linkable stubs for some macros:
getattrs
+ Add new library configuration for tic-library (the non-curses portion
of the ncurses library used for the tic program as well as some
others such as tack. There is no API change, but makefiles would be
changed to use the tic-library built separately.
tack, distributed separately from ncurses, uses some of the internal
_nc_XXX functions, which are declared in the tic.h header file.
The reason for providing this separate library is that none of the
functions in it are suitable for threaded applications.
+ Add new library configuration (ncursest, ncurseswt) which provides
rudimentary support for POSIX threads. This introduces opaque
access functions to the WINDOW structure and adds a parameter to
several internal functions.
+ move most internal variables (except tic-library) into data blocks
_nc_globals and _nc_prescreen to simplify analysis. Those were
globally accessible, but since they were not part of the documented
API, there is no ABI change.
+ changed static tables of strings to be indices into long strings, to
improve startup performance. This changes parameter lists for some
of the internal functions.
Added extensions:
+ add NCURSES_OPAQUE definition in curses.h to control whether internal
details of the WINDOW structure are visible to an application. This
is always defined when the threaded library is built, and is optional
otherwise. New functions for this: is_cleared, is_idcok, is_idlok,
is_immedok, is_keypad, is_leaveok, is_nodelay, is_notimeout,
is_scrollok, is_syncok, wgetparent and wgetscrreg.
+ the threaded library (ncursest) also disallows direct updating of
global curses-level variables, providing functions (via macros) for
obtaining their value. A few of those variables can be modified by
the application, using new functions: set_escdelay, set_tabsize
+ added functions use_window() and use_screen() which wrap a mutex
(if threading is configured) around a call to a user-supplied
function.
Added internal functions:
_nc_get_alias_table
_nc_get_screensize
_nc_keyname
_nc_screen_of
_nc_set_no_padding
_nc_tracechar
_nc_tracemouse
_nc_unctrl
_nc_ungetch
These are used for leak-testing, and are stubs for
ABI compatibility when ncurses is not configured for that
using the --disable-leaks configure script option:
_nc_free_and_exit
_nc_leaks_tinfo
Removed internal functions:
none
Modified internal functions:
_nc_fifo_dump
_nc_find_entry
_nc_handle_sigwinch
_nc_init_keytry
_nc_keypad
_nc_locale_breaks_acs
_nc_timed_wait
_nc_update_screensize
Use new typedef TRIES to replace "struct tries":
_nc_add_to_try
_nc_expand_try
_nc_remove_key
_nc_remove_string
_nc_trace_tries
5.6 (December 17, 2006)
Interface changes:
+ generate linkable stubs for some macros:
getbegx, getbegy, getcurx, getcury, getmaxx, getmaxy, getparx,
getpary, getpary,
and (for libncursesw)
wgetbkgrnd
Added extensions:
nofilter()
use_legacy_coding()
Added internal functions:
_nc_first_db
_nc_get_source
_nc_handle_sigwinch
_nc_is_abs_path
_nc_is_dir_path
_nc_is_file_path
_nc_keep_tic_dir
_nc_keep_tic_dir
_nc_last_db
_nc_next_db
_nc_read_termtype
_nc_tic_dir
Also (if using the hashed database configuration):
_nc_db_close
_nc_db_first
_nc_db_get
_nc_db_have_data
_nc_db_have_index
_nc_db_next
_nc_db_open
_nc_db_put
otherwise
_nc_hashed_db
Removed internal functions:
none
Modified internal functions:
_nc_add_to_try
_nc_do_color
_nc_expand_try
_nc_remove_key
_nc_setupscreen
5.5 (October 10, 2005)
Interface changes:
+ terminfo installs "xterm-new" as "xterm" entry rather than
"xterm-old" (aka xterm-r6).
+ terminfo data is installed using the tic -x option (few systems
still use ncurses 4.2).
+ modify C++ binding to work with newer C++ compilers by providing
initializers and using modern casts. Old-style header names are
still used in this release to allow compiling with not-so-old
compilers.
+ form and menu libraries now work with wide-character data.
Applications which bypassed the form library and manipulated the
FIELD.buf data directly will not work properly with libformw, since
that no longer points to an array of char. The set_field_buffer()
and field_buffer() functions translate to/from the actual field
data.
+ change SP->_current_attr to a pointer, adjust ifdef's to ensure that
libtinfo.so and libtinfow.so have the same ABI. The reason for this
is that the corresponding data which belongs to the upper-level
ncurses library has a different size in each model.
+ winnstr() now returns multibyte character strings for the
wide-character configuration.
+ assume_default_colors() no longer requires that use_default_colors()
be called first.
+ data_ahead() now works with wide-characters.
+ slk_set() and slk_wset() now accept and store multibyte or
multicolumn characters.
+ start_color() now returns OK if colors have already been started.
start_color() also returns ERR if it cannot allocate memory.
+ pair_content() now returns -1 for consistency with init_pair() if it
corresponds to the default-color.
+ unctrl() now returns null if its parameter does not correspond
to an unsigned char.
Added extensions:
Experimental mouse version 2 supports wheel mice with buttons
4 and 5. This requires ABI 6 because it modifies the encoding
of mouse events.
Experimental extended colors allows encoding of 256 foreground
and background colors, e.g., with the xterm-256color or
xterm-88color terminfo entries. This requires ABI 6 because
it changes the size of cchar_t.
Added internal functions:
_nc_check_termtype2
_nc_resolve_uses2
_nc_retrace_cptr
_nc_retrace_cvoid_ptr
_nc_retrace_void_ptr
_nc_setup_term
Removed internal functions:
none
Modified internal functions:
_nc_insert_ch
_nc_save_str
_nc_trans_string
5.4 (February 8, 2004)
Interface changes:
+ add the remaining functions for X/Open curses wide-character support.
These are only available if the library is configured using the
--enable-widec option.
pecho_wchar()
slk_wset()
+ write getyx() and related 2-return macros in terms of getcury(),
getcurx(), etc.
+ simplify ifdef for bool declaration in curses.h
+ modify ifdef's in curses.h that disabled use of __attribute__() for
g++, since recent versions implement the cases which ncurses uses.
+ change some interfaces to use const:
define_key()
mvprintw()
mvwprintw()
printw()
vw_printw()
winsnstr()
wprintw()
Added extensions:
key_defined()
Added internal functions:
_nc_get_locale()
_nc_insert_ch()
_nc_is_charable() wide
_nc_locale_breaks_acs()
_nc_pathlast()
_nc_to_char() wide
_nc_to_widechar() wide
_nc_tparm_analyze()
_nc_trace_bufcat() debug
_nc_unicode_locale()
Removed internal functions:
_nc_outstr()
_nc_sigaction()
Modified internal functions:
_nc_remove_string()
_nc_retrace_chtype()
5.3 (October 12, 2002)
Interface changes:
+ change type for bool used in headers to NCURSES_BOOL, which usually
is the same as the compiler's definition for 'bool'.
+ add all but two functions for X/Open curses wide-character support.
These are only available if the library is configured using the
--enable-widec option. Missing functions are
pecho_wchar()
slk_wset()
+ add environment variable $NCURSES_ASSUMED_COLORS to modify the
assume_default_colors() extension.
Added extensions:
is_term_resized()
resize_term()
Added internal functions:
_nc_altcharset_name() debug
_nc_reset_colors()
_nc_retrace_bool() debug
_nc_retrace_unsigned() debug
_nc_rootname()
_nc_trace_ttymode() debug
_nc_varargs() debug
_nc_visbufn() debug
_nc_wgetch()
Removed internal functions:
_nc_background()
Modified internal functions:
_nc_freeall() debug
5.2 (October 21, 2000)
Interface changes:
+ revert termcap ospeed variable to 'short' (see discussion of the
--with-ospeed configure option).
5.1 (July 8, 2000)
Interface changes:
+ made the extended terminal capabilities
(configure --enable-tcap-names) a standard feature. This should
be transparent to applications that do not require it.
+ removed the trace() function and related trace support from the
production library.
+ modified curses.h.in, undef'ing some symbols to avoid conflict
with C++ STL.
Added extensions: assume_default_colors().
5.0 (October 23, 1999)
Interface changes:
+ implemented the wcolor_set() and slk_color() functions.
+ move macro winch to a function, to hide details of struct ldat
+ corrected prototypes for slk_* functions, using chtype rather than
attr_t.
+ the slk_attr_{set,off,on} functions need an additional void*
parameter according to XSI.
+ modified several prototypes to correspond with 1997 version of X/Open
Curses: [w]attr_get(), [w]attr_set(), border_set() have different
parameters. Some functions were renamed or misspelled:
erase_wchar(), in_wchntr(), mvin_wchntr(). Some developers have used
attr_get().
Added extensions: keybound(), curses_version().
Terminfo database changes:
+ change translation for termcap 'rs' to terminfo 'rs2', which is
the documented equivalent, rather than 'rs1'.
The problems are subtler in recent releases.
a) This release provides users with the ability to define their own
terminal capability extensions, like termcap. To accomplish this,
we redesigned the TERMTYPE struct (in term.h). Very few
applications use this struct. They must be recompiled to work with
the 5.0 library.
a) If you use the extended terminfo names (i.e., you used configure
--enable-tcap-names), the resulting terminfo database can have some
entries which are not readable by older versions of ncurses. This
is a bug in the older versions:
+ the terminfo database stores booleans, numbers and strings in
arrays. The capabilities that are listed in the arrays are
specified by X/Open. ncurses recognizes a number of obsolete and
extended names which are stored past the end of the specified
entries.
+ a change to read_entry.c in 951001 made the library do an lseek()
call incorrectly skipping data which is already read from the
string array. This happens when the number of strings in the
terminfo data file is greater than STRCOUNT, the number of
specified and obsolete or extended strings.
+ as part of alignment with the X/Open final specification, in the
990109 patch we added two new terminfo capabilities:
set_a_attributes and set_pglen_inch). This makes the indices for
the obsolete and extended capabilities shift up by 2.
+ the last two capabilities in the obsolete/extended list are memu
and meml, which are found in most terminfo descriptions for xterm.
When trying to read this terminfo entry, the spurious lseek()
causes the library to attempt to read the final portion of the
terminfo data (the text of the string capabilities) 4 characters
past its starting point, and reads 4 characters too few. The
library rejects the data, and applications are unable to
initialize that terminal type.
FIX: remove memu and meml from the xterm description. They are
obsolete, not used by ncurses. (It appears that the feature was
added to xterm to make it more like hpterm).
This is not a problem if you do not use the -x option of tic to
create a terminfo database with extended names. Note that the
user-defined terminal capabilities are not affected by this bug,
since they are stored in a table after the older terminfo data ends,
and are invisible to the older libraries.
c) Some developers did not wish to use the C++ binding, and used the
configure --without-cxx option. This causes problems if someone
uses the ncurses library from C++ because that configure test
determines the type for C++'s bool and makes ncurses match it, since
both C++ and curses are specified to declare bool. Calling ncurses
functions with the incorrect type for bool will cause execution
errors. In 5.0 we added a configure option "--without-cxx-binding"
which controls whether the binding itself is built and installed.
4.2 (March 2, 1998)
Interface changes:
+ correct prototype for termattrs() as per XPG4 version 2.
+ add placeholder prototypes for color_set(), erasewchar(),
term_attrs(), wcolor_set() as per XPG4 version 2.
+ add macros getcur[xy] getbeg[xy] getpar[xy], which are defined in
SVr4 headers.
New extensions: keyok() and define_key().
Terminfo database changes:
+ corrected definition in curses.h for ACS_LANTERN, which was 'I'
rather than 'i'.
4.1 (May 15, 1997)
We added these extensions: use_default_colors(). Also added
configure option --enable-const, to support the use of const where
X/Open should have, but did not, specify.
The terminfo database content changed the representation of color for
most entries that use ANSI colors. SVr4 curses treats the setaf/setab
and setf/setb capabilities differently, interchanging the red/blue
colors in the latter.
4.0 (December 24, 1996)
We bumped to version 4.0 because the newly released Linux dynamic
loader (ld.so.1.8.5) did not load shared libraries whose ABI and REL
versions were inconsistent. At that point, ncurses ABI was 3.4 and the
REL was 1.9.9g, so we made them consistent.
1.9.9g (December 1, 1996)
This fixed most of the problems with 1.9.9e, and made these interface
changes:
+ remove tparam(), which had been provided for compatibility with
some termcap. tparm() is standard, and does not conflict with
application's fallback for missing tparam().
+ turn off hardware echo in initscr(). This changes the sense of the
echo() function, which was initialized to echoing rather than
nonechoing (the latter is specified). There were several other
corrections to the terminal I/O settings which cause applications to
behave differently.
+ implemented several functions (such as attr_on()) which were
available only as macros.
+ corrected several typos in curses.h.in (i.e., the mvXXXX macros).
+ corrected prototypes for delay_output(),
has_color, immedok() and idcok().
+ corrected misspelled getbkgd(). Some applications used the
misspelled name.
+ added _yoffset to WINDOW. The size of WINDOW does not impact
applications, since they use only pointers to WINDOW structs.
These changes were made to the terminfo database:
+ removed boolean 'getm' which was available as an extended name.
We added these extensions: wresize(), resizeterm(), has_key() and
mcprint().
1.9.9e (March 24, 1996)
not recommended (a last-minute/untested change left the forms and
menus libraries unusable since they do not repaint the screen).
Foreground/background colors are combined incorrectly, working properly
only on a black background. When this was released, the X/Open
specification was available only in draft form.
Some applications (such as lxdialog) were "fixed" to work with the
incorrect color scheme.
-IF YOU ARE A SYSTEM INTEGRATOR:
-------------------------------
+FOR SYSTEM INTEGRATORS:
+----------------------
Configuration and Installation:
On platforms where ncurses is assumed to be installed in /usr/lib,
the configure script uses "/usr" as a default. These include any
that use the Linux kernel, as well as these special cases:
FreeBSD, NetBSD, OpenBSD, Cygwin, MinGW
For other platforms, the default is "/usr/local". See the discussion
of the "--disable-overwrite" option.
The location of the terminfo is set indirectly by the "--datadir"
configure option, e.g., /usr/share/terminfo, given a datadir of
/usr/share. You may want to override this if you are installing
ncurses libraries in nonstandard locations, but wish to share the
terminfo database.
Normally the ncurses library is configured in a pure-terminfo mode;
that is, with the --disable-termcap option. This makes the ncurses
library smaller and faster. The ncurses library includes a termcap
emulation that queries the terminfo database, so even applications that
use raw termcap to query terminal characteristics will win (providing
you recompile and relink them!).
If you must configure with termcap fallback enabled, you may also wish
to use the --enable-getcap option. This speeds up termcap-based
startups, at the expense of not allowing personal termcap entries to
reference the terminfo tree. See comments in
ncurses/tinfo/read_termcap.c for further details.
Note that if you have $TERMCAP set, ncurses will use that value
to locate termcap data. In particular, running from xterm will
set $TERMCAP to the contents of the xterm's termcap entry.
If ncurses sees that, it will not examine /etc/termcap.
Keyboard Mapping:
The terminfo file assumes that Shift-Tab generates \E[Z (the ECMA-48
reverse-tabulation sequence) rather than ^I. Here are the loadkeys -d
mappings that will set this up:
keycode 15 = Tab Tab
alt keycode 15 = Meta_Tab
shift keycode 15 = F26
string F26 ="\033[Z"
Naming the Console Terminal
In various systems there has been a practice of designating the system
console driver type as `console'. Please do not do this! It
complicates peoples' lives, because it can mean that several different
terminfo entries from different operating systems all logically want to
be called `console'.
Please pick a name unique to your console driver and set that up
in the /etc/inittab table or local equivalent. Send the entry to the
terminfo maintainer (listed in the misc/terminfo file) to be included
in the terminfo file, if it's not already there. See the
term(7) manual page included with this distribution for more on
conventions for choosing type names.
Here are some recommended primary console names:
linux -- Linux console driver
freebsd -- FreeBSD
netbsd -- NetBSD
bsdos -- BSD/OS
If you are responsible for integrating ncurses for one of these
distributions, please either use the recommended name or get back
to us explaining why you don't want to, so we can work out nomenclature
that will make users' lives easier rather than harder.
-RECENT XTERM VERSIONS:
+MODERN XTERM VERSIONS:
---------------------
The terminfo database file included with this distribution assumes you
are running a modern xterm based on XFree86 (i.e., xterm-new). The
earlier X11R6 entry (xterm-r6) and X11R5 entry (xterm-r5) is provided
as well. See the --without-xterm-new configure script option if you
are unable to update your system.
CONFIGURING FALLBACK ENTRIES:
----------------------------
In order to support operation of ncurses programs before the terminfo
tree is accessible (that is, in single-user mode or at OS installation
time) the ncurses library can be compiled to include an array of
- pre-fetched fallback entries. This must be done on a machine which
- has ncurses' infocmp and terminfo database installed (as well as
- ncurses' tic and infocmp programs).
+ pre-fetched fallback entries.
+
+ NOTE: This must be done on a machine which has ncurses' infocmp and
+ terminfo database installed (as well as ncurses' tic and infocmp
+ programs). That is because the fallback sources are generated and
+ compiled into the library before the build-tree's copy of infocmp is
+ available.
These entries are checked by setupterm() only when the conventional
fetches from the terminfo tree and the termcap fallback (if configured)
have been tried and failed. Thus, the presence of a fallback will not
shadow modifications to the on-disk entry for the same type, when that
entry is accessible.
By default, there are no entries on the fallback list. After you have
built the ncurses suite for the first time, you can change the list
(the process needs infocmp(1)). To do so, use the script
ncurses/tinfo/MKfallback.sh. The configure script option
--with-fallbacks does this (it accepts a comma-separated list of the
names you wish, and does not require a rebuild).
If you wanted (say) to have linux, vt100, and xterm fallbacks, you
might use the commands
cd ncurses;
tinfo/MKfallback.sh \
$TERMINFO \
../misc/terminfo.src \
`which tic` \
`which infocmp` \
linux vt100 xterm >fallback.c
The first four parameters of the script are normally supplied by
the configured makefiles via the "--with-fallbacks" option. They
are
1) the location of the terminfo database
2) the source for the terminfo entries
3) the location of the tic program, used to create a terminfo
database.
4) the location of the infocmp program, used to print a terminfo
description.
Then just rebuild and reinstall the library as you would normally.
You can restore the default empty fallback list with
tinfo/MKfallback.sh \
$TERMINFO \
../misc/terminfo.src \
`which tic` \
`which infocmp` \
>fallback.c
The overhead for an empty fallback list is one trivial stub function.
Any non-empty fallback list is const'd and therefore lives in shareable
text space. You can look at the comment trailing each initializer in
the generated ncurses/fallback.c file to see the core cost of the
fallbacks. A good rule of thumb for modern vt100-like entries is that
each one will cost about 2.5K of text space.
BSD CONVERSION NOTES:
--------------------
If you need to support really ancient BSD programs, you probably
want to configure with the --enable-bsdpad option. What this does
is enable code in tputs() that recognizes a numeric prefix on a
capability as a request for that much trailing padding in milliseconds.
There are old BSD programs that do things like tputs("50").
(If you are distributing ncurses as a support-library component of
an application you probably want to put the remainder of this section
in the package README file.)
The following note applies only if you have configured ncurses with
--enable-termcap.
------------------------------- CUT HERE --------------------------------
If you are installing this application privately (either because you
have no root access or want to experiment with it before doing a root
installation), there are a couple of details you need to be aware of.
They have to do with the ncurses library, which uses terminfo rather
than termcap for describing terminal characteristics.
Though the ncurses library is terminfo-based, it can interpret your
TERMCAP variable (if present), any local termcap files you reference
through it, and the system termcap file. However, to avoid slowing
down your application startup, it does this only once per terminal type!
The first time you load a given terminal type from your termcap
database, the library initialization code will automatically write it
in terminfo format to a subdirectory under $HOME/.terminfo. After
that, the initialization code will find it there and do a (much
faster) terminfo fetch.
Usually, all this means is that your home directory will silently grow
an invisible .terminfo subdirectory which will get filled in with
terminfo descriptions of terminal types as you invoke them. If anyone
ever installs a global terminfo tree on your system, this will quietly
stop happening and your $HOME/.terminfo will become redundant.
The objective of all this logic is to make converting from BSD termcap
as painless as possible without slowing down your application (termcap
compilation is expensive).
If you don't have a TERMCAP variable or custom personal termcap file,
you can skip the rest of this dissertation.
If you *do* have a TERMCAP variable and/or a custom personal termcap file
that defines a terminal type, that definition will stop being visible
to this application after the first time you run it, because it will
instead see the terminfo entry that it wrote to $HOME/terminfo the
first time around.
Subsequently, editing the TERMCAP variable or personal TERMCAP file
will have no effect unless you explicitly remove the terminfo entry
under $HOME/terminfo. If you do that, the entry will be recompiled
from your termcap resources the next time it is invoked.
To avoid these complications, use infocmp(1) and tic(1) to edit the
terminfo directory directly.
------------------------------- CUT HERE --------------------------------
-USING NCURSES WITH AFS:
- AFS treats each directory as a separate logical filesystem, you
- can't hard-link across them. The --enable-symlinks option copes
- with this by making tic use symbolic links.
-
-USING NCURSES WITH GPM:
+USING GPM:
+---------
Ncurses 4.1 and up can be configured to use GPM (General Purpose Mouse)
which is used with Linux console. Be aware that GPM is commonly
installed as a shared library which contains a wrapper for the curses
wgetch() function (libcurses.o). Some integrators have simplified
linking applications by combining all or part of libcurses.so into the
libgpm.so file, producing symbol conflicts with ncurses (specifically
the wgetch function). This was originally the BSD curses, but
generally whatever curses library exists on the system.
You may be able to work around this problem by linking as follows:
cc -o foo foo.o -lncurses -lgpm -lncurses
but the linker may not cooperate, producing mysterious errors.
See the FAQ, as well as the discussion under the --with-gpm option:
https://invisible-island.net/ncurses/ncurses.faq.html#using_gpm_lib
-BUILDING NCURSES WITH A CROSS-COMPILER
+
+BUILDING WITH A CROSS-COMPILER:
+------------------------------
Ncurses can be built with a cross-compiler. Some parts must be built
with the host's compiler since they are used for building programs
(e.g., ncurses/make_hash and ncurses/make_keys) that generate tables
that are compiled into the ncurses library. The essential thing to do
is set the BUILD_CC environment variable to your host's compiler, and
run the configure script configuring for the cross-compiler.
The configure options --with-build-cc, etc., are provided to make this
simpler. Since make_hash and make_keys use only ANSI C features, it
is normally not necessary to provide the other options such as
--with-build-libs, but they are provided for completeness.
Note that all of the generated source-files which are part of ncurses
will be made if you use
make sources
This would be useful in porting to an environment which has little
support for the tools used to generate the sources, e.g., sed, awk and
Bourne-shell.
When ncurses has been successfully cross-compiled, you may want to use
"make install" (with a suitable target directory) to construct an
install tree. Note that in this case (as with the --with-fallbacks
- option), ncurses uses the development platform's tic to do the
- "make install.data" portion.
+ option), ncurses uses the development platform's tic to do the "make
+ install.data" portion.
The system's tic program is used to install the terminal database,
- even for cross-compiles. For best results, the tic program should
- be from the most current version of ncurses.
-
-BUGS:
+ even for cross-compiles. For best results, the tic program should be
+ from the most current version of ncurses.
+
+ NOTE: the system's tic program may use a different terminfo database
+ format than the target system. For instance, as described in term(5),
+ the conventional terminfo layout uses a directory hierarchy with one
+ letter names, while some platforms use two-letter names to work with
+ case-insensitive filesystems. The configure script searches for a tic
+ program using the AC_CHECK_TOOL macro, which will prefer programs
+ using the canonical host prefix in their name. You can use this fact
+ to provide a cross-compiler support utility tic, otherwise you can
+ override the configure script's choice using --with-tic-path
+
+
+BUG REPORTS:
+-----------
Send any feedback to the ncurses mailing list at
bug-ncurses@gnu.org. To subscribe send mail to
bug-ncurses-request@gnu.org with body that reads:
subscribe ncurses <your-email-address-here>
The Hacker's Guide in the doc directory includes some guidelines
on how to report bugs in ways that will get them fixed most quickly.
-- vile:txtmode
diff --git a/contrib/ncurses/MANIFEST b/contrib/ncurses/MANIFEST
index aa8603a70095..1dbfb96b7a1c 100644
--- a/contrib/ncurses/MANIFEST
+++ b/contrib/ncurses/MANIFEST
@@ -1,1232 +1,1241 @@
./ANNOUNCE
./AUTHORS
./Ada95/Makefile.in
./Ada95/README
./Ada95/TODO
./Ada95/aclocal.m4
./Ada95/configure
./Ada95/configure.in
./Ada95/doc/Makefile.in
./Ada95/gen/Makefile.in
./Ada95/gen/adacurses-config.in
./Ada95/gen/gen.c
./Ada95/gen/html.m4
./Ada95/gen/normal.m4
./Ada95/gen/table.m4
./Ada95/gen/terminal_interface-curses-aux.ads.m4
./Ada95/gen/terminal_interface-curses-forms-field_types.ads.m4
./Ada95/gen/terminal_interface-curses-forms-field_user_data.ads.m4
./Ada95/gen/terminal_interface-curses-forms-form_user_data.ads.m4
./Ada95/gen/terminal_interface-curses-forms.ads.m4
./Ada95/gen/terminal_interface-curses-menus-item_user_data.ads.m4
./Ada95/gen/terminal_interface-curses-menus-menu_user_data.ads.m4
./Ada95/gen/terminal_interface-curses-menus.ads.m4
./Ada95/gen/terminal_interface-curses-mouse.ads.m4
./Ada95/gen/terminal_interface-curses-panels-user_data.ads.m4
./Ada95/gen/terminal_interface-curses-panels.ads.m4
./Ada95/gen/terminal_interface-curses-trace.ads.m4
./Ada95/gen/terminal_interface-curses.adb.m4
./Ada95/gen/terminal_interface-curses.ads.m4
./Ada95/include/MKncurses_def.sh
./Ada95/include/Makefile.in
./Ada95/include/ncurses_cfg.hin
./Ada95/include/ncurses_defs
./Ada95/make-tar.sh
./Ada95/mk-1st.awk
./Ada95/package/AdaCurses-doc.spec
./Ada95/package/AdaCurses.spec
./Ada95/package/debian/compat
./Ada95/package/debian/control
./Ada95/package/debian/copyright
./Ada95/package/debian/docs
./Ada95/package/debian/rules
./Ada95/package/debian/source/format
./Ada95/package/debian/watch
./Ada95/samples/Makefile.in
./Ada95/samples/README
./Ada95/samples/explain.txt
./Ada95/samples/ncurses.adb
./Ada95/samples/ncurses2-acs_and_scroll.adb
./Ada95/samples/ncurses2-acs_and_scroll.ads
./Ada95/samples/ncurses2-acs_display.adb
./Ada95/samples/ncurses2-acs_display.ads
./Ada95/samples/ncurses2-attr_test.adb
./Ada95/samples/ncurses2-attr_test.ads
./Ada95/samples/ncurses2-color_edit.adb
./Ada95/samples/ncurses2-color_edit.ads
./Ada95/samples/ncurses2-color_test.adb
./Ada95/samples/ncurses2-color_test.ads
./Ada95/samples/ncurses2-demo_forms.adb
./Ada95/samples/ncurses2-demo_forms.ads
./Ada95/samples/ncurses2-demo_pad.adb
./Ada95/samples/ncurses2-demo_pad.ads
./Ada95/samples/ncurses2-demo_panels.adb
./Ada95/samples/ncurses2-demo_panels.ads
./Ada95/samples/ncurses2-flushinp_test.adb
./Ada95/samples/ncurses2-flushinp_test.ads
./Ada95/samples/ncurses2-genericputs.adb
./Ada95/samples/ncurses2-genericputs.ads
./Ada95/samples/ncurses2-getch.ads
./Ada95/samples/ncurses2-getch_test.adb
./Ada95/samples/ncurses2-getch_test.ads
./Ada95/samples/ncurses2-getopt.adb
./Ada95/samples/ncurses2-getopt.ads
./Ada95/samples/ncurses2-m.adb
./Ada95/samples/ncurses2-m.ads
./Ada95/samples/ncurses2-menu_test.adb
./Ada95/samples/ncurses2-menu_test.ads
./Ada95/samples/ncurses2-overlap_test.adb
./Ada95/samples/ncurses2-overlap_test.ads
./Ada95/samples/ncurses2-slk_test.adb
./Ada95/samples/ncurses2-slk_test.ads
./Ada95/samples/ncurses2-test_sgr_attributes.adb
./Ada95/samples/ncurses2-test_sgr_attributes.ads
./Ada95/samples/ncurses2-trace_set.adb
./Ada95/samples/ncurses2-trace_set.ads
./Ada95/samples/ncurses2-util.adb
./Ada95/samples/ncurses2-util.ads
./Ada95/samples/ncurses2.ads
./Ada95/samples/rain.adb
./Ada95/samples/rain.ads
./Ada95/samples/sample-curses_demo-attributes.adb
./Ada95/samples/sample-curses_demo-attributes.ads
./Ada95/samples/sample-curses_demo-mouse.adb
./Ada95/samples/sample-curses_demo-mouse.ads
./Ada95/samples/sample-curses_demo.adb
./Ada95/samples/sample-curses_demo.ads
./Ada95/samples/sample-explanation.adb_p
./Ada95/samples/sample-explanation.ads
./Ada95/samples/sample-form_demo-aux.adb
./Ada95/samples/sample-form_demo-aux.ads
./Ada95/samples/sample-form_demo-handler.adb
./Ada95/samples/sample-form_demo-handler.ads
./Ada95/samples/sample-form_demo.adb
./Ada95/samples/sample-form_demo.ads
./Ada95/samples/sample-function_key_setting.adb
./Ada95/samples/sample-function_key_setting.ads
./Ada95/samples/sample-header_handler.adb
./Ada95/samples/sample-header_handler.ads
./Ada95/samples/sample-helpers.adb
./Ada95/samples/sample-helpers.ads
./Ada95/samples/sample-keyboard_handler.adb
./Ada95/samples/sample-keyboard_handler.ads
./Ada95/samples/sample-manifest.ads
./Ada95/samples/sample-menu_demo-aux.adb
./Ada95/samples/sample-menu_demo-aux.ads
./Ada95/samples/sample-menu_demo-handler.adb
./Ada95/samples/sample-menu_demo-handler.ads
./Ada95/samples/sample-menu_demo.adb
./Ada95/samples/sample-menu_demo.ads
./Ada95/samples/sample-my_field_type.adb
./Ada95/samples/sample-my_field_type.ads
./Ada95/samples/sample-text_io_demo.adb
./Ada95/samples/sample-text_io_demo.ads
./Ada95/samples/sample.adb
./Ada95/samples/sample.ads
./Ada95/samples/split-path.awk
./Ada95/samples/status.adb
./Ada95/samples/status.ads
./Ada95/samples/tour.adb
./Ada95/samples/tour.ads
./Ada95/src/Makefile.in
./Ada95/src/c_threaded_variables.c
./Ada95/src/c_threaded_variables.h
./Ada95/src/c_varargs_to_ada.c
./Ada95/src/c_varargs_to_ada.h
./Ada95/src/library-cfg.sh
./Ada95/src/library.gpr.in
./Ada95/src/modules
./Ada95/src/ncurses_compat.c
./Ada95/src/terminal_interface-curses-aux.adb
./Ada95/src/terminal_interface-curses-forms-field_types-alpha.adb
./Ada95/src/terminal_interface-curses-forms-field_types-alpha.ads
./Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.adb
./Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.ads
./Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.adb
./Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.ads
./Ada95/src/terminal_interface-curses-forms-field_types-enumeration.adb
./Ada95/src/terminal_interface-curses-forms-field_types-enumeration.ads
./Ada95/src/terminal_interface-curses-forms-field_types-intfield.adb
./Ada95/src/terminal_interface-curses-forms-field_types-intfield.ads
./Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.adb
./Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.ads
./Ada95/src/terminal_interface-curses-forms-field_types-numeric.adb
./Ada95/src/terminal_interface-curses-forms-field_types-numeric.ads
./Ada95/src/terminal_interface-curses-forms-field_types-regexp.adb
./Ada95/src/terminal_interface-curses-forms-field_types-regexp.ads
./Ada95/src/terminal_interface-curses-forms-field_types-user-choice.adb
./Ada95/src/terminal_interface-curses-forms-field_types-user-choice.ads
./Ada95/src/terminal_interface-curses-forms-field_types-user.adb
./Ada95/src/terminal_interface-curses-forms-field_types-user.ads
./Ada95/src/terminal_interface-curses-forms-field_types.adb
./Ada95/src/terminal_interface-curses-forms-field_user_data.adb
./Ada95/src/terminal_interface-curses-forms-form_user_data.adb
./Ada95/src/terminal_interface-curses-forms.adb
./Ada95/src/terminal_interface-curses-menus-item_user_data.adb
./Ada95/src/terminal_interface-curses-menus-menu_user_data.adb
./Ada95/src/terminal_interface-curses-menus.adb
./Ada95/src/terminal_interface-curses-mouse.adb
./Ada95/src/terminal_interface-curses-panels-user_data.adb
./Ada95/src/terminal_interface-curses-panels.adb
./Ada95/src/terminal_interface-curses-putwin.adb
./Ada95/src/terminal_interface-curses-putwin.ads
./Ada95/src/terminal_interface-curses-termcap.adb
./Ada95/src/terminal_interface-curses-termcap.ads
./Ada95/src/terminal_interface-curses-terminfo.adb
./Ada95/src/terminal_interface-curses-terminfo.ads
./Ada95/src/terminal_interface-curses-text_io-aux.adb
./Ada95/src/terminal_interface-curses-text_io-aux.ads
./Ada95/src/terminal_interface-curses-text_io-complex_io.adb
./Ada95/src/terminal_interface-curses-text_io-complex_io.ads
./Ada95/src/terminal_interface-curses-text_io-decimal_io.adb
./Ada95/src/terminal_interface-curses-text_io-decimal_io.ads
./Ada95/src/terminal_interface-curses-text_io-enumeration_io.adb
./Ada95/src/terminal_interface-curses-text_io-enumeration_io.ads
./Ada95/src/terminal_interface-curses-text_io-fixed_io.adb
./Ada95/src/terminal_interface-curses-text_io-fixed_io.ads
./Ada95/src/terminal_interface-curses-text_io-float_io.adb
./Ada95/src/terminal_interface-curses-text_io-float_io.ads
./Ada95/src/terminal_interface-curses-text_io-integer_io.adb
./Ada95/src/terminal_interface-curses-text_io-integer_io.ads
./Ada95/src/terminal_interface-curses-text_io-modular_io.adb
./Ada95/src/terminal_interface-curses-text_io-modular_io.ads
./Ada95/src/terminal_interface-curses-text_io.adb
./Ada95/src/terminal_interface-curses-text_io.ads
./Ada95/src/terminal_interface-curses-trace.adb_p
./Ada95/src/terminal_interface.ads
./COPYING
./INSTALL
./MANIFEST
./Makefile.in
./Makefile.os2
./NEWS
./README
./README.MinGW
./README.emx
./TO-DO
./VERSION
./aclocal.m4
./announce.html.in
./c++/Makefile.in
./c++/NEWS
./c++/PROBLEMS
./c++/README-first
./c++/cursesapp.cc
./c++/cursesapp.h
./c++/cursesf.cc
./c++/cursesf.h
./c++/cursesm.cc
./c++/cursesm.h
./c++/cursesmain.cc
./c++/cursesp.cc
./c++/cursesp.h
./c++/cursespad.cc
./c++/cursesw.cc
./c++/cursesw.h
./c++/cursslk.cc
./c++/cursslk.h
./c++/demo.cc
./c++/edit_cfg.sh
./c++/etip.h.in
./c++/headers
./c++/internal.h
./c++/modules
./config.guess
./config.sub
./configure
./configure.in
-./convert_configure.pl
./dist.mk
./doc/hackguide.doc
./doc/html/Ada95.html
./doc/html/NCURSES-Programming-HOWTO.html
./doc/html/ada/files.htm
./doc/html/ada/files/T.htm
./doc/html/ada/funcs.htm
./doc/html/ada/funcs/A.htm
./doc/html/ada/funcs/B.htm
./doc/html/ada/funcs/C.htm
./doc/html/ada/funcs/D.htm
./doc/html/ada/funcs/E.htm
./doc/html/ada/funcs/F.htm
./doc/html/ada/funcs/G.htm
./doc/html/ada/funcs/H.htm
./doc/html/ada/funcs/I.htm
./doc/html/ada/funcs/K.htm
./doc/html/ada/funcs/L.htm
./doc/html/ada/funcs/M.htm
./doc/html/ada/funcs/N.htm
./doc/html/ada/funcs/O.htm
./doc/html/ada/funcs/P.htm
./doc/html/ada/funcs/Q.htm
./doc/html/ada/funcs/R.htm
./doc/html/ada/funcs/S.htm
./doc/html/ada/funcs/T.htm
./doc/html/ada/funcs/U.htm
./doc/html/ada/funcs/V.htm
./doc/html/ada/funcs/W.htm
./doc/html/ada/index.htm
./doc/html/ada/main.htm
./doc/html/ada/table.html
./doc/html/ada/terminal_interface-curses-aux__adb.htm
./doc/html/ada/terminal_interface-curses-aux__ads.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-alpha__adb.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-alpha__ads.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-alphanumeric__adb.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-alphanumeric__ads.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-enumeration-ada__adb.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-enumeration-ada__ads.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-enumeration__adb.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-enumeration__ads.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-intfield__adb.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-intfield__ads.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-ipv4_address__adb.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-ipv4_address__ads.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-numeric__adb.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-numeric__ads.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-regexp__adb.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-regexp__ads.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-user-choice__adb.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-user-choice__ads.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-user__adb.htm
./doc/html/ada/terminal_interface-curses-forms-field_types-user__ads.htm
./doc/html/ada/terminal_interface-curses-forms-field_types__adb.htm
./doc/html/ada/terminal_interface-curses-forms-field_types__ads.htm
./doc/html/ada/terminal_interface-curses-forms-field_user_data__adb.htm
./doc/html/ada/terminal_interface-curses-forms-field_user_data__ads.htm
./doc/html/ada/terminal_interface-curses-forms-form_user_data__adb.htm
./doc/html/ada/terminal_interface-curses-forms-form_user_data__ads.htm
./doc/html/ada/terminal_interface-curses-forms__adb.htm
./doc/html/ada/terminal_interface-curses-forms__ads.htm
./doc/html/ada/terminal_interface-curses-menus-item_user_data__adb.htm
./doc/html/ada/terminal_interface-curses-menus-item_user_data__ads.htm
./doc/html/ada/terminal_interface-curses-menus-menu_user_data__adb.htm
./doc/html/ada/terminal_interface-curses-menus-menu_user_data__ads.htm
./doc/html/ada/terminal_interface-curses-menus__adb.htm
./doc/html/ada/terminal_interface-curses-menus__ads.htm
./doc/html/ada/terminal_interface-curses-mouse__adb.htm
./doc/html/ada/terminal_interface-curses-mouse__ads.htm
./doc/html/ada/terminal_interface-curses-panels-user_data__adb.htm
./doc/html/ada/terminal_interface-curses-panels-user_data__ads.htm
./doc/html/ada/terminal_interface-curses-panels__adb.htm
./doc/html/ada/terminal_interface-curses-panels__ads.htm
./doc/html/ada/terminal_interface-curses-putwin__adb.htm
./doc/html/ada/terminal_interface-curses-putwin__ads.htm
./doc/html/ada/terminal_interface-curses-termcap__adb.htm
./doc/html/ada/terminal_interface-curses-termcap__ads.htm
./doc/html/ada/terminal_interface-curses-terminfo__adb.htm
./doc/html/ada/terminal_interface-curses-terminfo__ads.htm
./doc/html/ada/terminal_interface-curses-text_io-aux__adb.htm
./doc/html/ada/terminal_interface-curses-text_io-aux__ads.htm
./doc/html/ada/terminal_interface-curses-text_io-complex_io__adb.htm
./doc/html/ada/terminal_interface-curses-text_io-complex_io__ads.htm
./doc/html/ada/terminal_interface-curses-text_io-decimal_io__adb.htm
./doc/html/ada/terminal_interface-curses-text_io-decimal_io__ads.htm
./doc/html/ada/terminal_interface-curses-text_io-enumeration_io__adb.htm
./doc/html/ada/terminal_interface-curses-text_io-enumeration_io__ads.htm
./doc/html/ada/terminal_interface-curses-text_io-fixed_io__adb.htm
./doc/html/ada/terminal_interface-curses-text_io-fixed_io__ads.htm
./doc/html/ada/terminal_interface-curses-text_io-float_io__adb.htm
./doc/html/ada/terminal_interface-curses-text_io-float_io__ads.htm
./doc/html/ada/terminal_interface-curses-text_io-integer_io__adb.htm
./doc/html/ada/terminal_interface-curses-text_io-integer_io__ads.htm
./doc/html/ada/terminal_interface-curses-text_io-modular_io__adb.htm
./doc/html/ada/terminal_interface-curses-text_io-modular_io__ads.htm
./doc/html/ada/terminal_interface-curses-text_io__adb.htm
./doc/html/ada/terminal_interface-curses-text_io__ads.htm
./doc/html/ada/terminal_interface-curses-trace__adb.htm
./doc/html/ada/terminal_interface-curses-trace__ads.htm
./doc/html/ada/terminal_interface-curses__adb.htm
./doc/html/ada/terminal_interface-curses__ads.htm
./doc/html/ada/terminal_interface-curses_constants__ads.htm
./doc/html/ada/terminal_interface__ads.htm
./doc/html/announce.html
./doc/html/hackguide.html
./doc/html/index.html
./doc/html/man/adacurses6-config.1.html
./doc/html/man/captoinfo.1m.html
./doc/html/man/clear.1.html
./doc/html/man/curs_add_wch.3x.html
./doc/html/man/curs_add_wchstr.3x.html
./doc/html/man/curs_addch.3x.html
./doc/html/man/curs_addchstr.3x.html
./doc/html/man/curs_addstr.3x.html
./doc/html/man/curs_addwstr.3x.html
./doc/html/man/curs_attr.3x.html
./doc/html/man/curs_beep.3x.html
./doc/html/man/curs_bkgd.3x.html
./doc/html/man/curs_bkgrnd.3x.html
./doc/html/man/curs_border.3x.html
./doc/html/man/curs_border_set.3x.html
./doc/html/man/curs_clear.3x.html
./doc/html/man/curs_color.3x.html
./doc/html/man/curs_delch.3x.html
./doc/html/man/curs_deleteln.3x.html
./doc/html/man/curs_extend.3x.html
./doc/html/man/curs_get_wch.3x.html
./doc/html/man/curs_get_wstr.3x.html
./doc/html/man/curs_getcchar.3x.html
./doc/html/man/curs_getch.3x.html
./doc/html/man/curs_getstr.3x.html
./doc/html/man/curs_getyx.3x.html
./doc/html/man/curs_in_wch.3x.html
./doc/html/man/curs_in_wchstr.3x.html
./doc/html/man/curs_inch.3x.html
./doc/html/man/curs_inchstr.3x.html
./doc/html/man/curs_initscr.3x.html
./doc/html/man/curs_inopts.3x.html
./doc/html/man/curs_ins_wch.3x.html
./doc/html/man/curs_ins_wstr.3x.html
./doc/html/man/curs_insch.3x.html
./doc/html/man/curs_insstr.3x.html
./doc/html/man/curs_instr.3x.html
./doc/html/man/curs_inwstr.3x.html
./doc/html/man/curs_kernel.3x.html
./doc/html/man/curs_legacy.3x.html
./doc/html/man/curs_memleaks.3x.html
./doc/html/man/curs_mouse.3x.html
./doc/html/man/curs_move.3x.html
./doc/html/man/curs_opaque.3x.html
./doc/html/man/curs_outopts.3x.html
./doc/html/man/curs_overlay.3x.html
./doc/html/man/curs_pad.3x.html
./doc/html/man/curs_print.3x.html
./doc/html/man/curs_printw.3x.html
./doc/html/man/curs_refresh.3x.html
./doc/html/man/curs_scanw.3x.html
./doc/html/man/curs_scr_dump.3x.html
./doc/html/man/curs_scroll.3x.html
./doc/html/man/curs_slk.3x.html
./doc/html/man/curs_sp_funcs.3x.html
./doc/html/man/curs_termattrs.3x.html
./doc/html/man/curs_termcap.3x.html
./doc/html/man/curs_terminfo.3x.html
./doc/html/man/curs_threads.3x.html
./doc/html/man/curs_touch.3x.html
./doc/html/man/curs_trace.3x.html
./doc/html/man/curs_util.3x.html
./doc/html/man/curs_variables.3x.html
./doc/html/man/curs_window.3x.html
./doc/html/man/default_colors.3x.html
./doc/html/man/define_key.3x.html
./doc/html/man/form.3x.html
./doc/html/man/form_cursor.3x.html
./doc/html/man/form_data.3x.html
./doc/html/man/form_driver.3x.html
./doc/html/man/form_field.3x.html
./doc/html/man/form_field_attributes.3x.html
./doc/html/man/form_field_buffer.3x.html
./doc/html/man/form_field_info.3x.html
./doc/html/man/form_field_just.3x.html
./doc/html/man/form_field_new.3x.html
./doc/html/man/form_field_opts.3x.html
./doc/html/man/form_field_userptr.3x.html
./doc/html/man/form_field_validation.3x.html
./doc/html/man/form_fieldtype.3x.html
./doc/html/man/form_hook.3x.html
./doc/html/man/form_new.3x.html
./doc/html/man/form_new_page.3x.html
./doc/html/man/form_opts.3x.html
./doc/html/man/form_page.3x.html
./doc/html/man/form_post.3x.html
./doc/html/man/form_requestname.3x.html
./doc/html/man/form_userptr.3x.html
./doc/html/man/form_variables.3x.html
./doc/html/man/form_win.3x.html
./doc/html/man/index.html
./doc/html/man/infocmp.1m.html
./doc/html/man/infotocap.1m.html
./doc/html/man/key_defined.3x.html
./doc/html/man/keybound.3x.html
./doc/html/man/keyok.3x.html
./doc/html/man/legacy_coding.3x.html
./doc/html/man/menu.3x.html
./doc/html/man/menu_attributes.3x.html
./doc/html/man/menu_cursor.3x.html
./doc/html/man/menu_driver.3x.html
./doc/html/man/menu_format.3x.html
./doc/html/man/menu_hook.3x.html
./doc/html/man/menu_items.3x.html
./doc/html/man/menu_mark.3x.html
./doc/html/man/menu_new.3x.html
./doc/html/man/menu_opts.3x.html
./doc/html/man/menu_pattern.3x.html
./doc/html/man/menu_post.3x.html
./doc/html/man/menu_requestname.3x.html
./doc/html/man/menu_spacing.3x.html
./doc/html/man/menu_userptr.3x.html
./doc/html/man/menu_win.3x.html
./doc/html/man/mitem_current.3x.html
./doc/html/man/mitem_name.3x.html
./doc/html/man/mitem_new.3x.html
./doc/html/man/mitem_opts.3x.html
./doc/html/man/mitem_userptr.3x.html
./doc/html/man/mitem_value.3x.html
./doc/html/man/mitem_visible.3x.html
./doc/html/man/ncurses.3x.html
./doc/html/man/ncurses6-config.1.html
./doc/html/man/new_pair.3x.html
./doc/html/man/panel.3x.html
./doc/html/man/resizeterm.3x.html
./doc/html/man/scr_dump.5.html
./doc/html/man/tabs.1.html
./doc/html/man/term.5.html
./doc/html/man/term.7.html
./doc/html/man/term_variables.3x.html
./doc/html/man/terminfo.5.html
./doc/html/man/tic.1m.html
./doc/html/man/toe.1m.html
./doc/html/man/tput.1.html
./doc/html/man/tset.1.html
./doc/html/man/user_caps.5.html
./doc/html/man/wresize.3x.html
./doc/html/ncurses-intro.html
./doc/ncurses-intro.doc
./form/Makefile.in
./form/READ.ME
./form/f_trace.c
./form/fld_arg.c
./form/fld_attr.c
./form/fld_current.c
./form/fld_def.c
./form/fld_dup.c
./form/fld_ftchoice.c
./form/fld_ftlink.c
./form/fld_info.c
./form/fld_just.c
./form/fld_link.c
./form/fld_max.c
./form/fld_move.c
./form/fld_newftyp.c
./form/fld_opts.c
./form/fld_pad.c
./form/fld_page.c
./form/fld_stat.c
./form/fld_type.c
./form/fld_user.c
./form/form.h
./form/form.priv.h
./form/frm_cursor.c
./form/frm_data.c
./form/frm_def.c
./form/frm_driver.c
./form/frm_hook.c
./form/frm_opts.c
./form/frm_page.c
./form/frm_post.c
./form/frm_req_name.c
./form/frm_scale.c
./form/frm_sub.c
./form/frm_user.c
./form/frm_win.c
./form/fty_alnum.c
./form/fty_alpha.c
./form/fty_enum.c
./form/fty_generic.c
./form/fty_int.c
./form/fty_ipv4.c
./form/fty_num.c
./form/fty_regex.c
./form/headers
./form/llib-lform
./form/llib-lformt
./form/llib-lformtw
./form/llib-lformw
./form/modules
./include/Caps
./include/Caps-ncurses
./include/Caps.aix4
./include/Caps.hpux11
./include/Caps.keys
./include/Caps.osf1r5
./include/Caps.uwin
./include/MKhashsize.sh
./include/MKkey_defs.sh
./include/MKncurses_def.sh
./include/MKparametrized.sh
./include/MKterm.h.awk.in
./include/Makefile.in
./include/capdefaults.c
+./include/curses.events
./include/curses.h.in
./include/curses.tail
./include/curses.wide
./include/edit_cfg.sh
./include/hashed_db.h
./include/headers
./include/nc_alloc.h
./include/nc_mingw.h
./include/nc_panel.h
./include/nc_string.h
./include/nc_termios.h
./include/nc_tparm.h
+./include/nc_win32.h
./include/ncurses_cfg.hin
./include/ncurses_defs
./include/ncurses_dll.h.in
./include/ncurses_mingw.h
./include/term_entry.h
./include/termcap.h.in
./include/tic.h
./include/unctrl.h.in
+./include/win32_curses.h
./install-sh
./man/MKada_config.in
./man/MKncu_config.in
./man/MKterminfo.sh
./man/Makefile.in
./man/captoinfo.1m
./man/clear.1
./man/curs_add_wch.3x
./man/curs_add_wchstr.3x
./man/curs_addch.3x
./man/curs_addchstr.3x
./man/curs_addstr.3x
./man/curs_addwstr.3x
./man/curs_attr.3x
./man/curs_beep.3x
./man/curs_bkgd.3x
./man/curs_bkgrnd.3x
./man/curs_border.3x
./man/curs_border_set.3x
./man/curs_clear.3x
./man/curs_color.3x
./man/curs_delch.3x
./man/curs_deleteln.3x
./man/curs_extend.3x
./man/curs_get_wch.3x
./man/curs_get_wstr.3x
./man/curs_getcchar.3x
./man/curs_getch.3x
./man/curs_getstr.3x
./man/curs_getyx.3x
./man/curs_in_wch.3x
./man/curs_in_wchstr.3x
./man/curs_inch.3x
./man/curs_inchstr.3x
./man/curs_initscr.3x
./man/curs_inopts.3x
./man/curs_ins_wch.3x
./man/curs_ins_wstr.3x
./man/curs_insch.3x
./man/curs_insstr.3x
./man/curs_instr.3x
./man/curs_inwstr.3x
./man/curs_kernel.3x
./man/curs_legacy.3x
./man/curs_memleaks.3x
./man/curs_mouse.3x
./man/curs_move.3x
./man/curs_opaque.3x
./man/curs_outopts.3x
./man/curs_overlay.3x
./man/curs_pad.3x
./man/curs_print.3x
./man/curs_printw.3x
./man/curs_refresh.3x
./man/curs_scanw.3x
./man/curs_scr_dump.3x
./man/curs_scroll.3x
./man/curs_slk.3x
./man/curs_sp_funcs.3x
./man/curs_termattrs.3x
./man/curs_termcap.3x
./man/curs_terminfo.3x
./man/curs_threads.3x
./man/curs_touch.3x
./man/curs_trace.3x
./man/curs_util.3x
./man/curs_variables.3x
./man/curs_window.3x
./man/default_colors.3x
./man/define_key.3x
./man/form.3x
./man/form_cursor.3x
./man/form_data.3x
./man/form_driver.3x
./man/form_field.3x
./man/form_field_attributes.3x
./man/form_field_buffer.3x
./man/form_field_info.3x
./man/form_field_just.3x
./man/form_field_new.3x
./man/form_field_opts.3x
./man/form_field_userptr.3x
./man/form_field_validation.3x
./man/form_fieldtype.3x
./man/form_hook.3x
./man/form_new.3x
./man/form_new_page.3x
./man/form_opts.3x
./man/form_page.3x
./man/form_post.3x
./man/form_requestname.3x
./man/form_userptr.3x
./man/form_variables.3x
./man/form_win.3x
./man/infocmp.1m
./man/infotocap.1m
./man/key_defined.3x
./man/keybound.3x
./man/keyok.3x
./man/legacy_coding.3x
./man/make_sed.sh
./man/man_db.renames
./man/manhtml.aliases
./man/manhtml.externs
./man/manlinks.sed
./man/menu.3x
./man/menu_attributes.3x
./man/menu_cursor.3x
./man/menu_driver.3x
./man/menu_format.3x
./man/menu_hook.3x
./man/menu_items.3x
./man/menu_mark.3x
./man/menu_new.3x
./man/menu_opts.3x
./man/menu_pattern.3x
./man/menu_post.3x
./man/menu_requestname.3x
./man/menu_spacing.3x
./man/menu_userptr.3x
./man/menu_win.3x
./man/mitem_current.3x
./man/mitem_name.3x
./man/mitem_new.3x
./man/mitem_opts.3x
./man/mitem_userptr.3x
./man/mitem_value.3x
./man/mitem_visible.3x
./man/ncurses.3x
./man/new_pair.3x
./man/panel.3x
./man/resizeterm.3x
./man/scr_dump.5
./man/tabs.1
./man/term.5
./man/term.7
./man/term_variables.3x
./man/terminfo.head
./man/terminfo.tail
./man/tic.1m
./man/toe.1m
./man/tput.1
./man/tset.1
./man/user_caps.5
./man/wresize.3x
./menu/Makefile.in
./menu/READ.ME
./menu/eti.h
./menu/headers
./menu/llib-lmenu
./menu/llib-lmenut
./menu/llib-lmenutw
./menu/llib-lmenuw
./menu/m_attribs.c
./menu/m_cursor.c
./menu/m_driver.c
./menu/m_format.c
./menu/m_global.c
./menu/m_hook.c
./menu/m_item_cur.c
./menu/m_item_nam.c
./menu/m_item_new.c
./menu/m_item_opt.c
./menu/m_item_top.c
./menu/m_item_use.c
./menu/m_item_val.c
./menu/m_item_vis.c
./menu/m_items.c
./menu/m_new.c
./menu/m_opts.c
./menu/m_pad.c
./menu/m_pattern.c
./menu/m_post.c
./menu/m_req_name.c
./menu/m_scale.c
./menu/m_spacing.c
./menu/m_sub.c
./menu/m_trace.c
./menu/m_userptr.c
./menu/m_win.c
./menu/menu.h
./menu/menu.priv.h
./menu/mf_common.h
./menu/modules
./misc/Makefile.in
./misc/chkdef.cmd
./misc/cleantic.cmd
./misc/cmpdef.cmd
./misc/csort
./misc/emx.src
./misc/form.def
./misc/form.ref
./misc/gen-pkgconfig.in
./misc/gen_edit.sh
./misc/magic
./misc/makedef.cmd
./misc/makellib
./misc/menu.def
./misc/menu.ref
./misc/ncurses-config.in
./misc/ncurses.def
./misc/ncurses.ref
./misc/ncurses.supp
./misc/panel.def
./misc/panel.ref
./misc/run_tic.in
./misc/shlib
./misc/tabset/std
./misc/tabset/stdcrt
./misc/tabset/vt100
./misc/tabset/vt300
./misc/tdlint
./misc/terminfo.src
./mk-0th.awk
./mk-1st.awk
./mk-2nd.awk
./mk-hdr.awk
./ncurses/Makefile.in
./ncurses/README
./ncurses/README.IZ
./ncurses/SigAction.h
./ncurses/base/MKkeyname.awk
./ncurses/base/MKlib_gen.sh
./ncurses/base/MKunctrl.awk
./ncurses/base/README
./ncurses/base/define_key.c
./ncurses/base/key_defined.c
./ncurses/base/keybound.c
./ncurses/base/keyok.c
./ncurses/base/legacy_coding.c
./ncurses/base/lib_addch.c
./ncurses/base/lib_addstr.c
./ncurses/base/lib_beep.c
./ncurses/base/lib_bkgd.c
./ncurses/base/lib_box.c
./ncurses/base/lib_chgat.c
./ncurses/base/lib_clear.c
./ncurses/base/lib_clearok.c
./ncurses/base/lib_clrbot.c
./ncurses/base/lib_clreol.c
./ncurses/base/lib_color.c
./ncurses/base/lib_colorset.c
./ncurses/base/lib_delch.c
./ncurses/base/lib_delwin.c
./ncurses/base/lib_dft_fgbg.c
./ncurses/base/lib_driver.c
./ncurses/base/lib_echo.c
./ncurses/base/lib_endwin.c
./ncurses/base/lib_erase.c
./ncurses/base/lib_flash.c
./ncurses/base/lib_freeall.c
./ncurses/base/lib_getch.c
./ncurses/base/lib_getstr.c
./ncurses/base/lib_hline.c
./ncurses/base/lib_immedok.c
./ncurses/base/lib_inchstr.c
./ncurses/base/lib_initscr.c
./ncurses/base/lib_insch.c
./ncurses/base/lib_insdel.c
./ncurses/base/lib_insnstr.c
./ncurses/base/lib_instr.c
./ncurses/base/lib_isendwin.c
./ncurses/base/lib_leaveok.c
./ncurses/base/lib_mouse.c
./ncurses/base/lib_move.c
./ncurses/base/lib_mvwin.c
./ncurses/base/lib_newterm.c
./ncurses/base/lib_newwin.c
./ncurses/base/lib_nl.c
./ncurses/base/lib_overlay.c
./ncurses/base/lib_pad.c
./ncurses/base/lib_printw.c
./ncurses/base/lib_redrawln.c
./ncurses/base/lib_refresh.c
./ncurses/base/lib_restart.c
./ncurses/base/lib_scanw.c
./ncurses/base/lib_screen.c
./ncurses/base/lib_scroll.c
./ncurses/base/lib_scrollok.c
./ncurses/base/lib_scrreg.c
./ncurses/base/lib_set_term.c
./ncurses/base/lib_slk.c
./ncurses/base/lib_slkatr_set.c
./ncurses/base/lib_slkatrof.c
./ncurses/base/lib_slkatron.c
./ncurses/base/lib_slkatrset.c
./ncurses/base/lib_slkattr.c
./ncurses/base/lib_slkclear.c
./ncurses/base/lib_slkcolor.c
./ncurses/base/lib_slkinit.c
./ncurses/base/lib_slklab.c
./ncurses/base/lib_slkrefr.c
./ncurses/base/lib_slkset.c
./ncurses/base/lib_slktouch.c
./ncurses/base/lib_touch.c
./ncurses/base/lib_ungetch.c
./ncurses/base/lib_vline.c
./ncurses/base/lib_wattroff.c
./ncurses/base/lib_wattron.c
./ncurses/base/lib_winch.c
./ncurses/base/lib_window.c
./ncurses/base/nc_panel.c
./ncurses/base/new_pair.c
./ncurses/base/resizeterm.c
./ncurses/base/safe_sprintf.c
./ncurses/base/sigaction.c
./ncurses/base/tries.c
./ncurses/base/use_window.c
./ncurses/base/version.c
./ncurses/base/vsscanf.c
./ncurses/base/wresize.c
./ncurses/build.priv.h
./ncurses/curses.priv.h
./ncurses/fifo_defs.h
./ncurses/llib-lncurses
./ncurses/llib-lncursest
./ncurses/llib-lncursestw
./ncurses/llib-lncursesw
./ncurses/llib-ltic
./ncurses/llib-ltict
./ncurses/llib-ltictw
./ncurses/llib-lticw
./ncurses/llib-ltinfo
./ncurses/llib-ltinfot
./ncurses/llib-ltinfotw
./ncurses/llib-ltinfow
./ncurses/modules
./ncurses/new_pair.h
./ncurses/report_hashing.c
./ncurses/report_offsets.c
./ncurses/tinfo/MKcaptab.awk
./ncurses/tinfo/MKcaptab.sh
./ncurses/tinfo/MKcodes.awk
./ncurses/tinfo/MKfallback.sh
./ncurses/tinfo/MKkeys_list.sh
./ncurses/tinfo/MKnames.awk
./ncurses/tinfo/MKuserdefs.sh
./ncurses/tinfo/README
./ncurses/tinfo/access.c
./ncurses/tinfo/add_tries.c
./ncurses/tinfo/alloc_entry.c
./ncurses/tinfo/alloc_ttype.c
./ncurses/tinfo/captoinfo.c
./ncurses/tinfo/comp_error.c
./ncurses/tinfo/comp_expand.c
./ncurses/tinfo/comp_hash.c
./ncurses/tinfo/comp_parse.c
./ncurses/tinfo/comp_scan.c
./ncurses/tinfo/db_iterator.c
./ncurses/tinfo/doalloc.c
./ncurses/tinfo/entries.c
./ncurses/tinfo/free_ttype.c
./ncurses/tinfo/getenv_num.c
./ncurses/tinfo/hashed_db.c
./ncurses/tinfo/home_terminfo.c
./ncurses/tinfo/init_keytry.c
./ncurses/tinfo/lib_acs.c
./ncurses/tinfo/lib_baudrate.c
./ncurses/tinfo/lib_cur_term.c
./ncurses/tinfo/lib_data.c
./ncurses/tinfo/lib_has_cap.c
./ncurses/tinfo/lib_kernel.c
./ncurses/tinfo/lib_longname.c
./ncurses/tinfo/lib_napms.c
./ncurses/tinfo/lib_options.c
./ncurses/tinfo/lib_print.c
./ncurses/tinfo/lib_raw.c
./ncurses/tinfo/lib_setup.c
./ncurses/tinfo/lib_termcap.c
./ncurses/tinfo/lib_termname.c
./ncurses/tinfo/lib_tgoto.c
./ncurses/tinfo/lib_ti.c
./ncurses/tinfo/lib_tparm.c
./ncurses/tinfo/lib_tputs.c
./ncurses/tinfo/lib_ttyflags.c
+./ncurses/tinfo/lib_win32con.c
+./ncurses/tinfo/lib_win32util.c
./ncurses/tinfo/make_hash.c
./ncurses/tinfo/make_keys.c
./ncurses/tinfo/name_match.c
./ncurses/tinfo/obsolete.c
./ncurses/tinfo/parse_entry.c
./ncurses/tinfo/read_entry.c
./ncurses/tinfo/read_termcap.c
./ncurses/tinfo/strings.c
./ncurses/tinfo/tinfo_driver.c
./ncurses/tinfo/trim_sgr0.c
./ncurses/tinfo/use_screen.c
./ncurses/tinfo/write_entry.c
./ncurses/trace/README
./ncurses/trace/lib_trace.c
./ncurses/trace/lib_traceatr.c
./ncurses/trace/lib_tracebits.c
./ncurses/trace/lib_tracechr.c
./ncurses/trace/lib_tracedmp.c
./ncurses/trace/lib_tracemse.c
./ncurses/trace/trace_buf.c
./ncurses/trace/trace_tries.c
./ncurses/trace/trace_xnames.c
./ncurses/trace/varargs.c
./ncurses/trace/visbuf.c
./ncurses/tty/MKexpanded.sh
./ncurses/tty/hardscroll.c
./ncurses/tty/hashmap.c
./ncurses/tty/lib_mvcur.c
./ncurses/tty/lib_tstp.c
./ncurses/tty/lib_twait.c
./ncurses/tty/lib_vidattr.c
./ncurses/tty/tty_update.c
./ncurses/wcwidth.h
./ncurses/widechar/charable.c
./ncurses/widechar/lib_add_wch.c
./ncurses/widechar/lib_box_set.c
./ncurses/widechar/lib_cchar.c
./ncurses/widechar/lib_erasewchar.c
./ncurses/widechar/lib_get_wch.c
./ncurses/widechar/lib_get_wstr.c
./ncurses/widechar/lib_hline_set.c
./ncurses/widechar/lib_in_wch.c
./ncurses/widechar/lib_in_wchnstr.c
./ncurses/widechar/lib_ins_wch.c
./ncurses/widechar/lib_inwstr.c
./ncurses/widechar/lib_key_name.c
./ncurses/widechar/lib_pecho_wchar.c
./ncurses/widechar/lib_slk_wset.c
./ncurses/widechar/lib_unget_wch.c
./ncurses/widechar/lib_vid_attr.c
./ncurses/widechar/lib_vline_set.c
./ncurses/widechar/lib_wacs.c
./ncurses/widechar/lib_wunctrl.c
./ncurses/widechar/widechars.c
./ncurses/win32con/gettimeofday.c
./ncurses/win32con/wcwidth.c
+./ncurses/win32con/win32_driver.c
./ncurses/win32con/win_driver.c
./package/debian-mingw/changelog
./package/debian-mingw/compat
./package/debian-mingw/control
./package/debian-mingw/copyright
./package/debian-mingw/mingw32-ncurses6.lintian-overrides
./package/debian-mingw/rules
./package/debian-mingw/source/format
./package/debian-mingw/watch
./package/debian-mingw64/changelog
./package/debian-mingw64/compat
./package/debian-mingw64/control
./package/debian-mingw64/copyright
./package/debian-mingw64/mingw64-ncurses6.lintian-overrides
./package/debian-mingw64/rules
./package/debian-mingw64/source/format
./package/debian-mingw64/watch
./package/debian/changelog
./package/debian/compat
./package/debian/control
./package/debian/copyright
./package/debian/ncurses6.lintian-overrides
./package/debian/ncurses6.triggers
./package/debian/ncursest6.lintian-overrides
./package/debian/ncursest6.triggers
./package/debian/rules
./package/debian/source/format
./package/debian/watch
./package/mingw-ncurses.nsi
./package/mingw-ncurses.spec
./package/ncurses.map
./package/ncurses.spec
./package/ncurses.sym
./package/ncursest.map
./package/ncursest.spec
./package/ncursest.sym
./package/ncursestw.map
./package/ncursestw.sym
./package/ncursesw.map
./package/ncursesw.sym
./panel/Makefile.in
./panel/headers
./panel/llib-lpanel
./panel/llib-lpanelt
./panel/llib-lpaneltw
./panel/llib-lpanelw
./panel/modules
./panel/p_above.c
./panel/p_below.c
./panel/p_bottom.c
./panel/p_delete.c
./panel/p_hidden.c
./panel/p_hide.c
./panel/p_move.c
./panel/p_new.c
./panel/p_replace.c
./panel/p_show.c
./panel/p_top.c
./panel/p_update.c
./panel/p_user.c
./panel/p_win.c
./panel/panel.c
./panel/panel.h
./panel/panel.priv.h
./progs/MKtermsort.sh
./progs/Makefile.in
./progs/capconvert
./progs/clear.c
./progs/clear.sh
./progs/clear_cmd.c
./progs/clear_cmd.h
./progs/dump_entry.c
./progs/dump_entry.h
./progs/infocmp.c
./progs/modules
./progs/progs.priv.h
./progs/reset_cmd.c
./progs/reset_cmd.h
./progs/tabs.c
./progs/tic.c
./progs/toe.c
./progs/tparm_type.c
./progs/tparm_type.h
./progs/tput.c
./progs/transform.c
./progs/tset.c
./progs/tty_settings.c
./progs/tty_settings.h
./test/Makefile.in
./test/README
./test/aclocal.m4
+./test/back_ground.c
./test/background.c
./test/blue.c
./test/bs.6
./test/bs.c
./test/bulgarian-utf8-tabs.txt
./test/bulgarian-utf8.txt
./test/cardfile.c
./test/cardfile.dat
./test/chgat.c
./test/clip_printw.c
./test/color_content.c
./test/color_name.h
./test/color_set.c
./test/configure
./test/configure.in
./test/demo_altkeys.c
./test/demo_defkey.c
./test/demo_forms.c
./test/demo_forms.txt
./test/demo_keyok.c
./test/demo_menus.c
./test/demo_new_pair.c
./test/demo_panels.c
./test/demo_tabs.c
./test/demo_termcap.c
./test/demo_terminfo.c
./test/ditto.c
./test/dots.c
./test/dots_curses.c
./test/dots_mvcur.c
./test/dots_termcap.c
./test/dots_xcurses.c
./test/dump_window.c
./test/dump_window.h
+./test/dup_field.c
./test/echochar.c
./test/edit_field.c
./test/edit_field.h
./test/escherknot.xbm
./test/extended_color.c
./test/filter.c
./test/firework.c
./test/firstlast.c
./test/foldkeys.c
./test/form_driver_w.c
./test/gdc.6
./test/gdc.c
./test/hanoi.c
./test/hashtest.c
./test/inch_wide.c
./test/inchs.c
./test/ins_wide.c
./test/insdelln.c
./test/inserts.c
./test/key_names.c
./test/keynames.c
./test/knight.c
./test/linedata.h
./test/linux-color.dat
./test/list_keys.c
./test/listused.sh
./test/lrtest.c
./test/make-tar.sh
./test/mensetmanus.xbm
./test/mini.xterm_48x48.xpm
./test/mk-test.awk
./test/modules
+./test/move_field.c
./test/movewindow.c
./test/ncurses.c
./test/ncurses_tst.hin
./test/newdemo.c
./test/package/debian-mingw/compat
./test/package/debian-mingw/control
./test/package/debian-mingw/copyright
./test/package/debian-mingw/docs
./test/package/debian-mingw/rules
./test/package/debian-mingw/source/format
./test/package/debian-mingw/watch
./test/package/debian-mingw64/compat
./test/package/debian-mingw64/control
./test/package/debian-mingw64/copyright
./test/package/debian-mingw64/docs
./test/package/debian-mingw64/rules
./test/package/debian-mingw64/source/format
./test/package/debian-mingw64/watch
./test/package/debian/compat
./test/package/debian/control
./test/package/debian/copyright
./test/package/debian/docs
./test/package/debian/rules
./test/package/debian/source/format
./test/package/debian/watch
./test/package/mingw-ncurses-examples.spec
./test/package/ncurses-examples.spec
./test/padview.c
./test/pair_content.c
./test/parse_rgb.h
./test/picsmap.c
./test/picsmap.h
./test/popup_msg.c
./test/popup_msg.h
./test/programs
./test/railroad.c
./test/rain.c
./test/redraw.c
./test/savescreen.c
./test/savescreen.sh
./test/sp_tinfo.c
./test/tclock.c
./test/terminal.xbm
./test/test.priv.h
./test/test_add_wchstr.c
./test/test_addchstr.c
./test/test_addstr.c
./test/test_addwstr.c
./test/test_arrays.c
./test/test_get_wstr.c
./test/test_getstr.c
./test/test_instr.c
./test/test_inwstr.c
./test/test_opaque.c
./test/test_setupterm.c
./test/test_sgr.c
./test/test_termattrs.c
+./test/test_tparm.c
./test/test_vid_puts.c
./test/test_vidputs.c
./test/testaddch.c
./test/testcurs.c
./test/testscanw.c
./test/tput-colorcube
./test/tput-initc
./test/tracemunch
./test/view.c
./test/widechars-utf8-tabs.txt
./test/widechars-utf8.txt
./test/widechars.h
./test/worm.c
./test/xmas.c
./test/xterm-16color.dat
./test/xterm-256color.dat
./test/xterm-88color.dat
./test/xterm-color_48x48.xpm
diff --git a/contrib/ncurses/NEWS b/contrib/ncurses/NEWS
index c4f6fe360bb9..4203d188f7f4 100644
--- a/contrib/ncurses/NEWS
+++ b/contrib/ncurses/NEWS
@@ -1,14034 +1,14497 @@
-------------------------------------------------------------------------------
--- Copyright 2018-2019,2020 Thomas E. Dickey --
+-- Copyright 2018-2020,2021 Thomas E. Dickey --
-- Copyright 1998-2017,2018 Free Software Foundation, Inc. --
-- --
-- Permission is hereby granted, free of charge, to any person obtaining a --
-- copy of this software and associated documentation files (the --
-- "Software"), to deal in the Software without restriction, including --
-- without limitation the rights to use, copy, modify, merge, publish, --
-- distribute, distribute with modifications, sublicense, and/or sell copies --
-- of the Software, and to permit persons to whom the Software is furnished --
-- to do so, subject to the following conditions: --
-- --
-- The above copyright notice and this permission notice shall be included --
-- in all copies or substantial portions of the Software. --
-- --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN --
-- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE --
-- USE OR OTHER DEALINGS IN THE SOFTWARE. --
-- --
-- Except as contained in this notice, the name(s) of the above copyright --
-- holders shall not be used in advertising or otherwise to promote the --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
-------------------------------------------------------------------------------
--- $Id: NEWS,v 1.3450 2020/02/15 18:56:00 tom Exp $
+-- $Id: NEWS,v 1.3634 2021/02/21 00:18:55 tom Exp $
-------------------------------------------------------------------------------
This is a log of changes that ncurses has gone through since Zeyd started
working with Pavel Curtis' original work, pcurses, in 1992.
Changes through 1.9.9e are recorded by Zeyd M Ben-Halim.
Changes since 1.9.9e are recorded by Thomas E Dickey.
Contributors include those who have provided patches (even small ones), as well
as those who provide useful information (bug reports, analyses). Changes with
no cited author are the work of Thomas E Dickey (TD).
A few contributors may be cited in this file by their initials.
Each accounts for half of one percent or more of the changes since 1.9.9e.
See the AUTHORS file for the corresponding full names.
Changes through 1.9.9e did not credit all contributions;
it is not possible to add this information.
+20210220
+ + improve tic warning when oc/op do not mention SGR 39/49 for xterm
+ compatible XT flag.
+ + revert change to lib_addch.c in waddch_literal() from 20210130, since
+ the followup fix in PutCharLR() actually corrects the problem while
+ this change causes too-early filling/wrapping (report by Johannes
+ Altmanninger).
+ + add/use vt220+pcedit and vt220+vtedit -TD
+ + add scrt/securecrt and absolute -TD
+ + add nel to xterm-new, though supported since X11R5 -TD
+ + add/use xterm+nofkeys -TD
+ + move use of ecma+italics from xterm-basic to xterm+nofkeys -TD
+
+20210213
+ + add test/back_ground.c, to exercise the wide-character background
+ functions.
+ + add a check in _nc_build_wch() in case the background character is a
+ wide-character, rather than a new part of a multibyte character.
+ + improve tracemunch's coverage of form/menu/panel libraries.
+ + improve tracemunch's checking/reporting the type for the first
+ parameter, e.g., "WINDOW*" rather than "#1".
+
+20210206
+ + provide for wide-characters as background character in wbkgrnd
+ (report/testcase by Anton Vidovic)
+ + add name for Fedora's pcre2 to configure check for "--with-pcre2"
+ option, from xterm #363 -TD
+ + modify adjustment in PutCharLR to restore the cursor position before
+ writing to the lower-right corner, rather than decrementing the
+ cursor column, in case it was a double-width character (cf: 20210130).
+
+20210130
+ + correct an off-by-one in comparison in waddch_literal() which caused
+ scrolling when a double-cell character would not fit at the lower
+ right corner of the screen (report by Benno Schulenberg).
+ + split-out att610+cvis, vt220+cvis, vt220+cvis8 -TD
+ + add vt220-base, for terminal emulators which generally have not
+ supported att610's blinking cursor control -TD
+ + use vt220+cvis in vt220, etc -TD
+ + use att610+cvis, xterm+tmux and ansi+enq in kitty -TD
+ + use vt220+cvis in st, terminology, termite since they ignore
+ blinking-cursor detail in att610+cvis -TD
+
+20210123
+ + modify package/config scripts to provide an explicit -L option for
+ cases when the loader search path has other directories preceding
+ the one in which ncurses is installed (report by Yuri Victorovich).
+ + minor build-fixes in configure script and makefiles to work around
+ quirks of pmake.
+
+20210116
+ + add comment for linux2.6 regarding CONFIG_CONSOLE_TRANSLATIONS
+ (report by Patrick McDermott) -TD
+ + make opts extension for getcchar work as documented for ncurses 6.1,
+ adding "-g" flag to test/demo_new_pair to illustrate.
+
+20210109
+ + fix errata in man/ncurses.3x from recent updates.
+ + improve quoting/escaping in configure script, uses some features of
+ autoconf 2.52.20210105
+
+20210102
+ + update man/curs_memleaks.3x, to include <term.h> which declares
+ exit_terminfo.
+ + clarify man/curs_terminfo.3x, to mention why the macro setterm is
+ defined in <curses.h>, and remove it from the list of prototypes
+ (prompted by patch by Graeme McCutcheon).
+ + amend man/curs_terminfo.3x, to note that <curses.h> is required
+ for certain functions, e.g., those using chtype or attr_t for
+ types, as well as mvcur (cf: 20201031).
+ + use parameter-names in prototypes in curs_sp_funcs.3x, for
+ consistency with other manpages.
+
+20201227
+ + update terminology entry to 1.8.1 -TD
+ + fix some compiler-warnings which gcc8 reports incorrectly.
+
+20201219
+ + suppress hyphenation in generated html for manpages, to address
+ regression in upgrade of groff 1.22.2 to 1.22.3.
+ + fix inconsistent sort-order in see-also sections of manpages (report
+ by Chris Bennett).
+
+20201212
+ + improve manual pages for form field-types.
+
+20201205
+ + amend build-fixes for gnat 10 to work with certain systems lacking
+ gprbuild (cf: 20200627).
+ + eliminate an additional strlen and wsclen.
+ + eliminate an unnecessary strlen in waddnstr() (suggested by Benjamin
+ Abendroth).
+ + modify inopts manpage, separating the items for nodelay and notimeout
+ (patch by Benno Schulenberg).
+ + correct mlterm3 kf1-kf4 (Debian #975322) -TD
+ + add flash to mlterm3 -TD
+
+20201128
+ + add Smulx to alacritty (Christian Duerr).
+ + add rep to PuTTY -TD
+ + add putty+keypad -TD
+ + add another fflush(stdout) in _nc_flush() to handle time-delays in
+ the middle of strings such as flash when the application uses
+ low-level calls rather than curses (cf: 20161217).
+ + modify configure check for c89/c99 aliases of clang to use its
+ -std option instead, because some platforms, in particular macOS,
+ do not provide workable c89/c99 aliases.
+
+20201121
+ + fix some compiler-warnings in experimental Windows-10 driver.
+ + add the definitions needed in recent configure-check for clang
+ (report by Steven Pitman).
+
+20201114
+ + fix some compiler-warnings in experimental Windows-10 driver.
+ + modify a check for parameters in terminfo capabilities to handle the
+ special case where short extended capability strings were not
+ converted from terminfo to termcap format.
+ + modify CF_MIXEDCASE_FILENAMES macro, adding darwin as special case
+ when cross-compiling (report by Eli Rykoff).
+
+20201107
+ + update kitty+common -TD
+ + add putty+screen and putty-screen (suggested by Alexandre Montaron).
+ + explain in ncurses.3x that functions in the tinfo library do not rely
+ upon wide-characters (prompted by discussion with Reuben Thomas).
+
+20201031
+ + modify MKterm.h.in so that it is not necessary to include <curses.h>
+ before <term.h> (prompted by discussion with Reuben Thomas).
+ + review/improve synopsis for curs_sp_funcs.3x (prompted by discussion
+ with Reuben Thomas).
+ + improve format of output in tic's check_infotocap() function, to
+ ensure that the messages contain only printable text.
+ + modify configure-check for clang to verify that -Qunused-arguments
+ is supported. IBM's xlclang does not support it (report by Steven
+ Pitman).
+
+20201024
+ + provide workaround configure-check for bool when cross-compiling.
+ + fix a potential indexing error in _nc_parse_entry(), seen with
+ Herlim's test data using address-sanitizer.
+ + change a null-pointer check in set_curterm to a valid-string check,
+ needed in to tic's use-resolution when pad_char is cancelled
+ (report/testcase by Robert Sebastian Herlim)
+ + improve tic's -c option to validate the number and type of parameters
+ and compare against expected number/type before deciding which set of
+ parameter-lists to use in tparm calls (report/testcase by Robert
+ Sebastian Herlim).
+ + fix a link for tabs.1 manpage in announce.html.in (report by Nick
+ Black), as well as some fixes via linklint.
+
+20201017
+ + improve manpage typography.
+ + improve discussion in curs_addch.3x of the use of unctrl to display
+ nonprintable characters.
+ + add a note in terminfo.5 explaining that no-parameter strings such
+ as sgr0 or cnorm should not be used with tparm.
+
+20201010
+ + correct sgr in aaa+rv (report by Florian Weimer) -TD
+ + fix some sgr inconsistencies in d230c, ibm6153, ibm6154,
+ ncrvt100an -TD
+ + improve tic's check for errors detected in tparm (prompted by
+ discussion with Florian Weimer).
+ + set output-mode to binary in experimental Windows-10 driver (Juergen
+ Pfeifer).
+
+20201003
+ + remove output-related checks for nl/nonl (report by Leon Winter).
+ + change tmux's kbs to ^? (report by Premysl Eric Janouch)
+ + simplify mlterm initialization with DECSTR -TD
+ + fix a typo in man/curs_terminfo.3 (Reuben Thomas).
+ + add tmux-direct (tmux #2370, Debian #895754)
+ + add user-defined capabilities from mintty to Caps-ncurses, for
+ checking consistency with tic.
+
+20200926
+ + correct configure-check for gnurx library.
+ + regenerate llib-* files.
+ + modify tracemunch and the panel library to show readable traces for
+ panel- and user-pointers.
+
+20200919
+ + update mlterm3 for 3.9.0 (report by Premysl Eric Janouch) -TD
+
+20200918
+ + corrected condition for appending curses.events to the generated
+ curses.h (report by Sven Joachim, Debian #970545).
+
+20200912
+ + add configure-check for systre/tre with mingw configuration, to get
+ the library-dependencies as seen in msys2 configuration for mingw64.
+ + build-fixes for the win32-driver configuration.
+ + use more defensive binary mode setting for Win32 (Juergen Pfeifer).
+
+20200907
+ + fix regression in setupterm validating non-empty $TERM (report by
+ Soren Tempel).
+
+20200906
+ + merge/adapt in-progress work by Juergen Pfeifer for new version of
+ win32-driver.
+ + correct description of vt330/vt340 (Ross Combs).
+
+20200831
+ + build-fix for awk-scripts modified for win32-driver (report by Werner
+ Fink).
+
+20200829
+ + remove a redundant NCURSES_EXPORT as a build-fix for "Maarten
+ Anonymous".
+ + merge/adapt in-progress work by Juergen Pfeifer for new version of
+ win32-driver.
+ + modify configure script, moving gcc -Werror options to EXTRA_CFLAGS
+ to avoid breaking configure-checks (adapted from ongoing work on
+ mawk and lynx).
+ > errata for terminfo.src (report by Florian Weimer):
+ + correct icl6404 csr
+ + correct ti916 cup
+ + improve ndr9500
+
+20200822
+ + improve version-number extraction in MKlib_gen.sh
+ + make the test-package for manpages installable by adjusting the
+ man_db.renames file.
+ + correct an off-by-one loop-limit in convert_strings function
+ (report by Yue Tai).
+ + add CF_SHARED_OPTS cases for HPE NonStop systems (Randall S Becker).
+ + modify CF_SHARED_OPTS case for NetBSD to use the same "-shared"
+ option for the non-rpath case as for the rpath case, to allow gcc to
+ provide suitable runtime initialization (report by Rajeev V Pillai).
+
+20200817
+ + reduce build-warnings by excluding ncurses-internals from deprecation
+ warnings.
+ + mark wgetch-events feature as deprecated.
+ + add definition for $(LIBS) to ncurses/Makefile.in, to simplify builds
+ using the string-hacks option.
+ + prevent KEY_EVENT from appearing in curses.h unless the configure
+ option --enable-wgetch-events is used (report by Werner Fink).
+
+20200816
+ + amend tic/infocmp check to allow for the respective tool's absence
+ (report by Steve Wills, cf: 20200808).
+ + improved some of the build-scripts with shellcheck
+ + filter out -MT/-MD/-MTd/-MDd options in script for Visual Studio C++
+ (discussion with "Maarten Anonymous").
+
+20200808
+ + improve discussion of the system's tic utility when used as part
+ of cross-compiling (discussion with Keith Marshall).
+ + modify configuration checks for build-time tic/infocmp to use
+ AC_CHECK_TOOL. That can still be overridden by --with-tic-path and
+ --with-infocmp-path when fallbacks are used, but even if not using
+ fallbacks, the improved check may help with cross-compiling
+ (discussion with Keith Marshall).
+ + other build-fixes for Ada95 with MinGW.
+ + modify Ada95 source-generation utility to write to a file given as
+ parameter rather than to the standard output, allowing builds with
+ MinGW.
+
+20200801
+ + remove remaining parts of checks for ISC Unix (cf: 20121006).
+ + add user32.lib to LDFLAGS for Visual Studio C++ configuration
+ (discussion with "Maarten Anonymous").
+ + modify MKkey_defs.sh to hide ncurses' definition of KEY_EVENTS to
+ reduce Visual Studio C++ redefinition warnings.
+ + improve/update checks for external functions in test/configure
+
+20200725
+ + set LINK_TESTS in CF_SHARED_OPTS for msvc (patch by
+ "Maarten Anonymous")
+ + improved workaround for redefinition-warnings for KEY_EVENT.
+ + improve man/term.5 section on legacy storage format (report by
+ Florian Weimer).
+
+20200718
+ + reduce redefinition-warnings for KEY_EVENT when building with Visual
+ Studio C++.
+ + define NCURSES_STATIC when compiling programs to link with static
+ libraries, to work with MinGW vs Visual Studio C++.
+ > additional changes for building with Visual Studio C++ and msys2
+ (reports/patches by "Maarten Anonymous")
+ + modify c++/Makefile.in to set the current directory while compiling
+ the main program, so the linker can find related objects.
+ + several changes to allow the c++/demo program to compile/link.
+ + change an ifdef in test-directory, to use VC++ wide-character funcs.
+
+20200711
+ + fix pound-sign mapping in acsc of linux2.6 entry (report by Ingo
+ Bruckl).
+ + additional changes for building with Visual Studio C++ and msys2
+ (reports/patches by "Maarten Anonymous")
+ + build-improvements for Windows 10 and MinGW (patch by Juergen
+ Pfeifer).
+ + fix a typo in curs_printw.3x (patch by William Pursell).
+ + fix two errors in infotocap which allowed indexing outside the
+ buffer (report/testcases by Zhang Gan).
+ + update length of strings in infocmp's usage function to restore a
+ trailing null on the longest string (report/testcase by Zhang Gen).
+
+20200704
+ + modify version-check with Ada generics to use the same pattern as in
+ the check for supported gnat versions (report by Pascal Pignard).
+ > additional changes for building with Visual Studio C++ and msys2
+ (patches by "Maarten Anonymous"):
+ + adjust headers/declarations to provide for "dllimport" vs "dllexport"
+ declarations when constructing DLLs, to worko with Visual Studio C++.
+
+20200627
+ + build-fixes for gnat 10.1.1, whose gnatmake drops integration with
+ gprbuild.
+ + correct buffer-length in test/color_name.h
+
+20200613
+ + update list of functions in ncurses.3x
+ + move dlclose() call from lib_mouse.c to delscreen() to avoid a case
+ in the former which could be called from SIGTSTP handler (Debian
+ #961097).
+
+20200606
+ + add xterm+256color2, xterm+88color2, to deprecate nonstandard usage
+ in xterm+256color, xterm+88color -TD
+ + add shifted Linux console keys in linux+sfkeys entry for
+ screen.linux (report by Alexandre Montaron).
+ + use vt100+enq in screen (report by Alexandre Montaron).
+ + add screen.linux-s alias (suggested by Alexandre Montaron).
+
+20200531
+ + correct configure version-check/warnng for g++ to allow for 10.x
+ + re-enable "bel" in konsole-base (report by Nia Huang)
+ + add linux-s entry (patch by Alexandre Montaron).
+ + drop long-obsolete convert_configure.pl
+ + add test/test_parm.c, for checking tparm changes.
+ + improve parameter-checking for tparm, adding function _nc_tiparm() to
+ handle the most-used case, which accepts only numeric parameters
+ (report/testcase by "puppet-meteor").
+ + use a more conservative estimate of the buffer-size in lib_tparm.c's
+ save_text() and save_number(), in case the sprintf() function
+ passes-through unexpected characters from a format specifier
+ (report/testcase by "puppet-meteor").
+ + add a check for end-of-string in cvtchar to handle a malformed
+ string in infotocap (report/testcase by "puppet-meteor").
+
+20200523
+ + update version-check for gnat to allow for gnat 10.x to 99.x
+ + fix an uninitialized variable in lib_mouse.c changes (cf: 20200502)
+ + add a check in EmitRange to guard against repeat_char emitting digits
+ which could be interpreted as BSD-style padding when --enable-bsdpad
+ is configured (report/patch by Hiltjo Posthuma).
+ + add --disable-pkg-ldflags to suppress EXTRA_LDFLAGS from the
+ generated pkg-config and ncurses*-config files, to simplify
+ configuring in the case where rpath is used but the packager wants
+ to hide the feature (report by Michael Stapelberg).
+ > fixes for building with Visual Studio C++ and msys2 (patches by
+ "Maarten Anonymous"):
+ + modify CF_SHARED_OPTS to generate a script which translates linker
+ options into Visual Studio's dialect.
+ + omit parentheses around function-names in generated lib_gen.c to
+ work around a Visual Studio C++ limitation.
+
+20200516
+ + add notes on termcap.h header in curs_termcap.3x
+ + update notes on vscode / xterm.js -TD
+
+20200509
+ + add "-r" option to the dots test-programs, to help with scripting
+ a performance comparison.
+ + build-fix test/move_field.c for NetBSD curses, whose form headers
+ use different names than SVr4 or ncurses.
+
+20200502
+ + add details on the change to Linux SGR 21 in 2018 -TD
+ + add xterm-direct16 and xterm-direct256 -TD
+ + modify lib_mouse.c to check for out-of-range button numbers, convert
+ those to position reports.
+
+20200425
+ + use vt100+fnkeys in putty -TD
+ + fix a typo in tput.1; "columns" should be "cols".
+
+20200418
+ + improve tracemunch logic for "RUN" compaction.
+ + fix a special case in wresize() where copying the old text did not
+ check if the last cell on a row was the beginning of a fullwidth
+ character (adapted from patch by Benno Schulenberg).
+ + use vt52+keypad in xterm-vt52, from xterm #354 -TD
+ + improve see-also section of user_caps.5
+
+20200411
+ + fix find_pair(), overlooked when refactoring for _nc_reserve_pairs()
+ (report/testcase by Brad Town, cf: 20170812).
+ + add a trailing null for magic-string in putwin, flagged by gcc 10
+ + update check for gcc version versus gnat to work with gcc 10.x
+
+20200404
+ + modify -fvisibility check to work with g++
+ > fixes for building with Visual Studio C++ and msys2 (patches by
+ "Maarten Anonymous"):
+ + add configure option and check for gcc -fvisibility=hidden feature
+ + define NCURSES_NOMACROS in lib_gen.c to work around Visual Studio
+ C++ preprocessor limitations.
+ + modify some of the configure-macros, as well as mk-1st.awk to work
+ with Visual Studio C++ default filenaming.
+
+20200328
+ + correct length of buffer copied in dup_field().
+ + remove "$(srcdir)/" from path of library.gpr, needed for out-of-tree
+ builds of Ada95 (patch by Adam Van Ymeren).
+
+20200321
+ + improve configure-checks to reduce warnings about unused variables.
+ + improve description of error-returns in waddch and waddnstr manual
+ pages (prompted by patch by Benno Schulenberg).
+ + add test/move_field.c to demonstrate move_field(), and a stub for
+ a corresponding demo of dup_field().
+
+20200314
+ + add history note to curs_scanw.3x for <stdarg.h> and <varargs.h>
+ + add history note to curs_printw.3x for <stdarg.h> and <varargs.h>
+ + add portability note to ncurses.3x regarding <stdarg.h>
+
+20200308
+ + update copyright notices in test-packages.
+ + modify tracemunch to guard against errors in its known_p1 table.
+ + add several --with-xxx-libname options, to help with pkgsrc (prompted
+ by discussion with Thomas Klausner).
+
+20200301
+ + modify wbkgd() and wbkgrnd() to avoid storing a null in the
+ background character, because it may be used in cases where the
+ corresponding 0x80 is not treated as a null (report by Marc Rechte,
+ cf: 20181208).
+
+20200229
+ + modify CF_NCURSES_CONFIG to work around xcode's c99 "-W" option,
+ which conflicts with conventional use for passing linker options.
+ > fixes for building with Visual Studio C++ and msys2 (patches by
+ "Maarten Anonymous"):
+ + check for pcre2posix.h instead of pcre2-posix.h
+ + add case in CF_SHARED_OPTS for msys2 + msvc
+ + add fallback definition for STDIN_FILENO in progs.priv.h
+ + modify win_driver.c to use _alloca() rather than gcc's variable
+ length array feature.
+ + add NCURSES_IMPEXP to ncurses wrapped-variable declarations
+ + remove NCURSES_IMPEXP from class variables in c++/cursslk.h
+ + remove fallback prototype for exit() from c++/etip.h.in
+ + use configured check for <sys/time.h> in a couple of places
+ + conditionally include winsock.h in ncurses/win32con/gettimeofday.c,
+ because Visual Studio needs this for the timestruct declaration.
+ + adjust syntax in a couple of files using the NCURSES_API symbol.
+
+20200222
+ + expanded note in ncurses.3x regarding automatically-included headers
+ + improve vt50h and vt52 based on DECScope manual -TD
+ + add/use vt52+keypad and vt52-basic -TD
+ + check/workaround for line-too-long in Ada95 generate utility when
+ building out-of-tree.
+ + improve/update HEADER_DEPS in */Makefile.in
+ + add "check" rule to include/Makefile, to demonstrate that the headers
+ include all of the required headers for the types used.
+
20200215
+ improve manual page for panel library, extending the portability
section as well as documenting error-returns.
+ show tic's version when installing terminal database in run_tic.sh
+ correct check for gcc vs other compilers used in ncurses 6.0, from
FreeBSD patch by Kyle Evans (cf: 20150725).
+ add notes for 6.2 to INSTALL.
20200212 6.2 release for upload to ftp.gnu.org
+ update release notes
+ minor build-fixes, mostly to test-package scripts
20200208
+ modify check for sizeof(wchar_t) to ensure it gives useful result
when cross-compiling.
+ drop assumption in configure script that Cygwin's linker is broken.
+ define NCURSES_BROKEN_LINKER if the broken-linker feature is used,
to simplify configure-checks for ncurses-examples.
20200202
+ reassert copyright on ncurses, per discussion in ncurses FAQ:
https://invisible-island.net/ncurses/ncurses.faq.html#relicensed
20200201
+ modify comparison in make_hash.c to correct a special case in
collision handling for Caps-hpux11
+ add testing utility report_hashing to check hash-tables used for
terminfo and termcap names.
+ fix a missing prototype for _nc_free_and_exit().
+ update a few comments about tack 1.07
+ use an awk script to split too-long pathnames used in Ada95 sample
programs for explain.txt
20200118
+ expanded description of XM in user_caps.5
+ improve xm example for xterm+x11mouse, xterm+sm+1006 -TD
+ add history section to curs_slk.3x and curs_terminfo.3x manpages.
+ update alacritty entries for 0.4.0 (prompted by patch by
Christian Durr) -TD
+ correct spelling errors found with codespell.
+ fix for test/configure, from xterm #352.
20200111
+ improve configure macros which check for the X11/Intrinsic.h header,
to accommodate recent MacOS changes.
+ suppress gcc's -Winline warning; it has not been useful for some time
+ update config.guess, config.sub
20200104
+ modify a couple of macros in aclocal.m4 to allow autoconf 2.69 to
"work", to help illustrate discussion in
https://invisible-island.net/autoconf/my-autoconf.html
+ fix some warnings from autoheader-252
20191228
+ in gen-pkgconfig.in, move the RPATH_LIST and PRIVATE_LIBS assignments
past the various prefix/libdir assignments, to allow for using those
symbols, e.g., as done via CF_SHARED_OPTS.
+ improve ncurses*-config and pc-files by filtering out linker-specs.
+ modify test-package to more closely match Fedora's configuration
for PIE/PIC feature and debug-packages.
20191221
+ correct pathname used in Ada95 sample programs for explain.txt, to
work with test-packages.
+ improve tracemunch:
+ keep track of TERMINAL* values
+ if tracing was first turned on after initialization, attempt to
show distinct screen, window and terminal names anyway.
+ ensure that GCC_NORETURN is defined in term.h, because the prototype
for exit_terminfo() uses it (report by Werner Fink).
20191214
+ add exit_curses() and exit_terminfo() to replace internal symbols for
leak-checking.
20191207
+ fix a few warnings for test-package builds
+ add curses_trace(), to replace trace().
20191130
+ add portability section to curs_getcchar manpage (prompted by
discussion with Nick Black).
+ improve portability discussion of ACS characters in curs_addch
manpage.
+ improve typography for double-quotes in manpages.
20191123
+ fix typo for MinGW rpm test-package.
+ workaround in rpm specs for NFS problems in Fedora 31.
20191116
+ modify ncurses/Makefile.in to fix a case where Debian/testing changes
to the ld --as-needed configuration broke ncurses-examples test
packages.
+ drop library-dependency on psapi for MinGW port, since win_driver.c
defines PSAPI_VERSION to 2, making it use GetProcessImageFileName
from kernel32.dll (prompted by patch by Simon Sobish, cf: 20140503).
20191109
+ add warning-check in tic for terminals with parm_dch vs parm_ich.
+ drop ich1 from rxvt-basic, Eterm and mlterm to improve compatibility
with old non-curses programs -TD
+ reviewed st 0.8.2, updated some details -TD
+ use ansi+rep several places -TD
+ corrected tic's check for ich1 (report by Sebastian J. Bronner,
cf: 20020901).
20191102
+ check parameter of set_escdelay, return ERR if negative.
+ check parameter of set_tabsize, return ERR if not greater than zero
(report/patch by Anthony Sottile).
+ revise CF_ADD_LIBS macro to prepend rather than append libraries.
+ add "xterm-mono" to help packagers (report by Sven Joachim) -TD
20191026
+ add a note in man/curs_add_wch.3x about Unicode terminology for the
line-drawing characters (report by Nick Black).
+ improve comment in lib_tgoto.c regarding the use of \200 where a
\0 would be intended by the caller (report by "64 bit", cf: 20000923).
+ modify linux-16color to accommodate Linux console driver change in
early 2018 (report by Dino Petrucci).
20191019
+ modify make_hash to not require --disable-leaks, to simplify building
with address-sanitizer.
+ modify tic to exit if it cannot remove a conflicting name, because
treating that as a partial success can cause an infinite loop in
use-resolution (report/testcase by Hongxu Chen, cf: 20111001).
20191015
+ improve buffer-checks in captoinfo.c, for some cases when the
input string is shorter than expected.
> fix two errata in tic (report/testcases by Hongxu Chen):
+ check for missing character after backslash in write_it
+ check for missing characters after "%>" when converting from termcap
syntax (cf: 980530).
20191012
+ amend recent changes to ncurses*-config and pc-files to filter out
Debian linker-flags (report by Sven Joachim, cf: 20150516).
+ clarify relationship between tic, infocmp and captoinfo in manpage.
+ check for invalid hashcode in _nc_find_type_entry and
_nc_find_name_entry.
> fix several errata in tic (reports/testcases by "zjuchenyuan"):
+ check for invalid hashcode in _nc_find_entry.
+ check for missing character after backslash in fmt_entry
+ check for acsc with odd length in dump_entry in check for one-one
mapping (cf: 20060415);
+ check length when converting from old AIX box_chars_1 capability,
overlooked in changes to eliminate strcpy (cf: 20001007).
20191005
+ modify the ncurse*-config and pc-files to more closely match for the
-I and -l options.
20190928
+ amend the ncurses*-config and pc-files to take into account the rpath
hack which differed between those files.
+ improve -L option filtering in ncurses*-config
+ improve recovery from error when reading command-character in
test/ncurses.c, showing the relevant error message and not exiting on
EINTR (cf: 20180922)
20190921
+ add a note in resizeterm manpage about top-level windows which touch
the screen's borders.
+ modify configure-checks for gnat to identify each of the tools path
and version.
20190914
+ build-fixes for Ada95 configure-script and corresponding test package
20190907
- + add --with-ada-libname option and modify Ada95 configuration to
+ + add --with-ada-libname option and modify Ada95 configuration to
allow renaming the "AdaCurses" library (prompted by proposed changes
by Pascal Pignard).
+ modify configure script to distinguish gcc from icc and clang when
the --enable-warnings option is not used, to avoid unnecessary
warnings about unrecognized inline options (report by Sven Joachim).
20190831
+ build-fixes for configuration using --program-suffix with Ada95,
noticed with MacOS but applicable to other platforms without
libpanelw, etc.
20190824
+ fix some cppcheck warnings, mostly style, in ncurses test-programs.
20190817
+ amend 20181208 changes for wbkgd() and wbkgrnd(), fixing a few
details where it still differed from SVr4.
+ fix some cppcheck warnings, mostly style, in ncurses test-programs.
20190810
+ fix a few more coverity warnings.
20190803
+ improve loop limits in _nc_scroll_window() to handle a case where
the scrolled data is a pad which is taller than the window (patch
by Rob King).
+ amend the change to screen, because tmux relies upon that entry
and does not support that feature (Debian #933572) -TD
+ updated ms-terminal entry & notes -TD
+ updated kitty entry & notes -TD
+ updated alacritty+common entry & notes -TD
+ use xterm+sl-twm for consistency -TD
20190728
+ fix a few more coverity warnings.
+ more documentation updates based on tctest.
20190727
+ fix a few coverity warnings.
+ documentation updates based on tctest.
20190720
+ fix a few warnings for gcc 4.x
+ add some portability/historical details to the tic, toe and infocmp
manual pages.
+ correct fix for broken link from terminfo(5) to tabs(1) manpage
(report by Sven Joachim).
20190713
+ change reset's behavior for margins to simply clear soft-margins if
possible, rather than clearing and then setting them according to the
terminal's width (suggested by Thomas Wolff).
+ correct order of one wbkgd versus start_color call in test/padview.c
20190706
+ add domterm -TD
+ improve comments for recent changes, add alias xterm.js -TD
20190630
+ add --with-tic-path and --with-infocmp-path to work around problems
building fallback source using pre-6.0 tic/infocmp.
+ add a check in tic for paired indn/rin
+ correct a buffer-limit in write_entry.c for systems that use caseless
filenames.
+ add ms-terminal -TD
+ add vscode, vscode-direct -TD
20190623
+ improve the tabs.1 manual page to distinguish the PWB/Unix and 7th
Edition versions of the tabs utility.
+ add configure check for getenv() to work around implementation shown
in Emscripten #6766, use that to optionally suppress START_TRACE
macro, whose call to getenv() may not work properly (report by Ilya
Ig Petrov).
+ modify initialization functions to avoid relying upon persistent
data for the result from getenv().
+ update config.guess, config.sub
20190615
+ expand the portability section of the man/tabs.1 manual page.
+ regenerate HTML manpages.
20190609
+ add mintty, mintty-direct (adapted from patch by Thomas Wolff).
Some of the suggested user-defined capabilities are commented-out,
to allow builds with ncurses 5.9 and 6.0
+ add Smol/Rmol for tmux, vte-2018 (patch by Nicholas Marriott).
+ add rs1 to konsole, mlterm -TD
+ modify _nc_merge_entry() to make a copy of the data which it merges,
to avoid modifying the source-data when aligning extended names.
20190601
+ modify an internal call to vid_puts to pass extended color pairs
e.g., from tty_update.c and lib_mvcur.c (report by Niegodziwy Beru).
+ improve manual page description of init_tabs capability and TABSIZE
variable.
20190525
+ modify reset_cmd.c to allow for tabstops at intervals other than 8
(report by Vincent Huisman).
20190518
+ update xterm-new to xterm patch #345 -TD
+ add/use xterm+keypad in xterm-new (report by Alain D D Williams) -TD
+ update terminator entry -TD
+ remove hard-tabs from ti703 (report by Robert Clausecker)
+ mention meml/memu/box1 in user_caps manual page.
+ mention user_caps.5 in tic and infocmp manual pages.
20190511
+ fix a spurious blank line seen with "infocmp -1fx xterm+x11mouse"
+ add checks in repair_subwindows() to keep the current position and
scroll-margins inside the resized subwindow.
+ add a limit check in newline_forces_scroll() for the case where the
row is inside scroll-margins, but not at the end (report by Toshio
Kuratomi, cf: 20170729).
+ corrected a warning message in tic for extended capabilities versus
number of parameters.
20190504
+ improve workaround for Solaris wcwidth versus line-drawing characters
(report by Pavel Stehule).
+ add special case in tic to validate RGB string-capability extension.
+ corrected string/parameter-field for RGB in Caps-ncurses.
20190427
+ corrected problem in terminfo load/realignment which prevented
infocmp from comparing extended capabilities with the same name
but different types.
20190420
+ improve ifdef's for TABSIZE variable, to help with AIX/HPUX ports.
20190413
+ check for TABSIZE variable in test/configure script.
+ used test/test_arrays.c to improve Caps.aix1 and Caps.hpux11
+ corrected filtering of comments in MKparametrized.sh
+ reduce duplication across Caps* files by moving some parts which do
not depend on order into Caps-ncurses.
20190406
+ modify MKcaptab.sh, MKkey_defs.sh, and MKhashsize.sh to handle
split-up Caps-files.
+ build-fixes if extended-functions are disabled.
20190330
+ add "screen5", to mention italics (report by Stefan Assmann)
+ modify description of xterm+x11hilite to eliminate unused p5 -TD
+ add configure script checks to help with a port to Ultrix 3.1
(report by Dennis Grevenstein).
+ check if "b" binary feature of fopen works
+ check for missing feature of locale.h
+ add fallback for strstr() in test-programs
+ add fallback for STDOUT_FILENO in test-programs
+ update config.guess, config.sub
20190323
+ move macro for is_linetouched() inside NCURSES_NOMACROS ifndef.
+ corrected prototypes in several manpages using script to extract
those in compilable form.
+ use _nc_copy_termtype2() rather than direct assignment in setupterm,
in case it is called repeatedly using fallback terminfo descriptions
(report/patch by Werner Fink).
20190317
+ regenerate llib-* files.
+ modify tic to also use new function for user-defined capability info.
+ modify _nc_parse_entry() to check if a user-defined capability has
an unexpected type; ignore it in that case.
+ fix a special case of link-anchors in generated Ada html files.
+ use newer rel=author tag in generated html rather than rev=made,
which did not become accepted.
20190309
+ in-progress changes to add parameter-checking for common user-defined
capabilities in tic.
+ update MKcodes.awk and MKnames.awk to ignore the new "userdef"
data in Caps-ncurses (cf: 20190302).
20190302
+ corrected some of the undocumented terminfo names in Caps.hpux11
+ add "Caps-ncurses" file to help with checking inconsistencies in some
user-defined capabilities.
+ amend check for repeat_char to handle a case where setlocale() was
called after initscr() (report by "Ampera").
20190223
+ fix typo in adds200 -TD
+ add tic check for consistent alternate character set capabilities.
+ improve check in mvcur() to decide whether to use hard-tabs, using
xt, tbc and hts as clues.
+ replace check in reset command for obsolete "pt" capability using
tbc and hts capabilities as clues (report by Nicolas Marriott).
20190216
+ improve manual page description of TABSIZE.
+ add test/demo_tabs program.
20190209
+ add check in tic to provide warnings for mismatched number of
parameters in the documented user-capability extensions.
20190202
+ modify rpm test-package ".spec" file to work around naming conflict
with Redhat's package for ncurses6.
+ modify no-leaks code in test/picsmap to avoid non-standard tdestroy.
+ amend change to configure script which altered the top-level makefile
to avoid attempting to install the terminfo database when it was not
configured, to allow for installing the ".pc" files which are also
in the misc directory (report by Steve Wills).
20190126
+ change some "%define" statements in test-packages for RPMs to
"%global" to work around changes in rpm 4.14 from recent Redhat.
+ fixes for O_INPUT_FIELD extension (patch by Leon Winter).
+ eliminate fixed buffer-size when reading $TERMCAP variable.
+ correct logic in read_entry.c which prevented $TERMCAP variable from
being interpreted as a fallback to terminfo entry (prompted by
Savannah #54556, cf: 20110924).
20190121
+ add a check in test/configure to work around non-ncurses termcap.h
file in Slackware.
+ corrected flag for "seq" method of db 1.8.5 interface, needed by toe
on some of the BSDs.
+ updated "string-hacks" feature.
+ minor improvements to manpage typography.
+ corrected conditionally-compiled limit on color pairs (report by
"Hudd").
+ add -x option to test/pair_content, test/color_content for testing
init_extended_pair, extended_pair_content, init_extended_color,
extended_color_content
+ add -p option to test/pair_content, test/color_content to show the
return values from the tested functions.
+ improve manual page curs_color.3x discussion of error returns and
extensions.
+ add O_INPUT_FIELD extension to form library (patch by Leon Winter).
+ override/suppress --enable-db-install if --disable-database configure
option was given.
+ change a too-large terminal entry in tic from a fatal error to a
warning (prompted by discussion with Gabriele Balducci).
20190112
+ fix typo in term(5), improve explanation of format (report by Otto
Modinos).
+ add nsterm-direct -TD
+ use SGR 1006 mouse for konsole-base -TD
+ use SGR 1006 mouse for putty -TD
+ add ti703/ti707, ti703-w/ti707-w (Robert Clausecker)
20190105
+ add dummy "check" rule in top-level and test-Makefile to simply
building test-packages for Arch.
+ modify configure script to avoid conflict with a non-POSIX feature
that enables all parts of the system headers by default. Some
packagers have come to rely upon this behavior (FreeBSD #234049).
+ update config.guess, config.sub
20181229
+ improve man/curs_mouse.3x with regard to xterm
+ modify tracemunch to accept filename parameters in addition to use
as a pipe/filter.
+ minor optimization to reduce calls to _nc_reserve_pairs (prompted by
discussion with Bryan Christ).
+ add test/pair_content.c and test/color_content.c
+ modify infocmp to omit filtering of "OTxx" names which are used for
obsolete capabilities, when the output is sorted by long-names.
Doing this helps when making a table of the short/long capability
names.
20181215
+ several fixes for gcc8 strict compiler warnings.
+ fix a typo in comments (Aaron Gyes).
+ add nsterm-build309 to replace nsterm-256color, assigning the latter
as an alias of nsterm, to make mouse work with nsterm-256color -TD
+ base gnome-256color entry on "gnome", not "vte", for consistency -TD
+ updates for configure macros from work on tin and xterm:
+ CF_GNU_SOURCE, allow for Cygwin's newlib when checking for the
_DEFAULT_SOURCE symbol.
+ CF_VA_COPY, add fallback check if neither va_copy/__va_copy is
supported, to try copying the pointers for va_list, or as an array.
Also add another fallback check, for __builtin_va_copy(), which
could be used with AIX xlc in c89 mode.
20181208
+ modify wbkgd() and wbkgrnd() to improve compatibility with SVr4
curses, changing the way the window rendition is updated when the
background character is modified (report by Valery Ushakov).
20181201
+ add midnightbsd to CF_XOPEN_SOURCE macro (patch by Urs Jansen).
+ add "@" command to test/ncurses F-test, to allow rapid jump to
different character pages.
+ update config.guess, config.sub from
http://git.savannah.gnu.org/cgit/config.git
20181125
+ build-fix (reports by Chih-Hsuan Yen, Sven Joachim).
20181124
+ check --with-fallbacks option to ensure there is a value, and add
the fallback information to top-level Makefile summary.
+ add some traces in initialization to show whether a fallback entry is
used.
+ build-fix for test/movewindow with ncurses-examples on Solaris.
+ add "-l" option to test/background, to dump screen contents in a form
that lets different curses implementations be compared.
+ modify the initialization checks for mouse so that the xterm+sm+1006
block will work with terminal descriptions not mentioning xterm
(report by Tomas Janousek).
20181117
+ ignore the hex/b64 $TERMINFO in toe's listing.
+ correct a status-check in _nc_read_tic_entry() so that if reading
a hex/b64 $TERMINFO, and the $TERM does not match, fall-through to
the compiled-in search list.
20181110
+ several workarounds to ensure proper C compiler used in parts of
Ada95 tree.
+ update config.guess, config.sub from
http://git.savannah.gnu.org/cgit/config.git
20181027
+ add OpenGL clients alacritty and kitty -TD
+ add Smulx for tmux, vte-2018 -Nicholas Marriott
20181020
+ ignore $TERMINFO as a default value in configure script if it came
from the infocmp -Q option.
+ allow value for --with-versioned-syms to be a relative pathname
+ add a couple of broken-linker symbols to the list of versioned
symbols to help with link-time optimization versus weak symbols.
+ apply shift/control/alt logic when decoding xterm's 1006 mode to
wheel-mouse events (Redhat #1610681).
20181013
+ amend change from 20180818, which undid a fix for the $INSTALL value
to make it an absolute path.
20181006
+ improve a configure check to work with newer optimizers (report by
Denis Pronin, Gentoo #606142).
+ fix typo in tput.c (Sven Joachim, cf: 20180825).
20180929
+ fix typo in tvi955 -TD
+ corrected acsc for regent60 -TD
+ add alias n7900 -TD
+ corrected acsc for tvi950 -TD
+ remove bogus kf0 from tvi950 -TD
+ added function-key definitions to agree with Televideo 950 manual -TD
+ add bel to tvi950 -TD
+ add shifted function-keys to regent60 -TD
+ renumber regent40 function-keys to match manual -TD
+ add cd (clr_eos) to adds200 -TD
20180923
+ build-fix: remove a _tracef call which was used for debugging (report
by Chris Clayton).
20180922
+ ignore interrupted system-call in test/ncurses's command-line, e.g.,
if the terminal were resized.
+ add shift/control/alt logic for decoding xterm's 1006 mode (Redhat
#1610681, cf: 20141011).
+ modify rpm test-packages to not use --disable-relink with Redhat,
since Fedora 28's tools do not work with that feature.
20180908
+ document --with-pcre2 configure option in INSTALL.
+ improve workaround for special case in PutAttrChar() where a cell is
marked as alternate-character set, to handle a case where the
character in the cell does not correspond to any of the ASCII
fallbacks (report by Leon Winter, cf: 20180505).
+ amend change to form library which attempted to avoid unnecessary
update of cursor position in non-public fields, to simply disable
output in this case (patch by Leon Winter, cf: 20180414).
+ improve check for LINE_MAX runtime limit, to accommodate broken
implementations of sysconf().
20180901
+ improve manual page for wgetnstr, giving background for the length
parameter.
+ define a limit for wgetnstr, wgetn_wstr when length is negative or
"too large".
+ update configure script to autoconf 2.52.20180819 (Debian #887390).
20180825
+ add a section to tput manual page clarifying how it determines the
terminal size (prompted by discussion with Grant Jenks).
+ add "--disable-relink" to rpm test-packages, for consistency with the
deb test-packages.
+ split spec-file into ncurses6.spec and ncursest6.spec to work around
toolset breakage in Fedora 28.
+ drop mention of "--disable-touching", which was not in the final
20180818 updates.
20180818
+ build-fix for PDCurses with ncurses-examples.
+ improved CF_CC_ENV_FLAGS.
+ modify configure scripts to reduce relinking/ranlib during library
install (Debian #903790):
+ use "install -p" when available, to avoid need for ranlib of
static libraries.
+ modify scripts which use "--disable-relink" to add a 1-second
sleep to work around tools which use whole-second timestamps, e.g.,
in utime() rather than the actual file system resolution.
20180804
+ improve logic for clear with E3 extension, in case the terminal
scrolls content onto its saved-lines before actually clearing
the display, by clearing the saved-lines after clearing the
display (report/patch by Nicholas Marriott).
20180728
+ improve documentation regarding feature-test macros in curses.h
+ improve documentation regarding the virtual and physical screens.
+ formatting fixes for manpages, regenerate man-html documentation.
20180721
+ build-fixes for gcc8.
+ corrected acsc for wy50 -TD
+ add wy50 and wy60 shifted function-keys as kF1 to kF16 -TD
+ remove ansi+rep mis-added to interix in 2018-02-23 -TD
20180714
+ add enum, regex examples to test/demo_forms
+ add configure check for pcre-posix library to help with MinGW port.
20180707
+ build-fixes for gcc8.
+ correct order of WINDOW._ttytype versus WINDOW._windowlist in
report_offsets.
+ fix a case where tiparm could return null if the format-string was
empty (Debian #902630).
20180630
+ add acsc string to vi200 (Nibby Nebbulous)
add right/down-arrow to vi200's acsc -TD
+ add "x" to tput's getopt string so that "tput -x clear" works
(Nicholas Marriott).
+ minor fixes prompted by anonymous report on stack overflow:
+ correct order of checks in _nc_get_locale(), for systems lacking
locale support.
+ add "#error" in a few places to flag unsupported configurations
20180623
+ use _WIN32/_WIN64 in preference to __MINGW32__/__MINGW64__ symbols
to simplify building with MSVC, since the former are defined in both
compiler configurations (report by Ali Abdulkadir).
+ further improvements to configure-checks from work on dialog, i.e.,
updated CF_ADD_INCDIR, CF_FIND_LINKAGE, CF_GCC_WARNINGS,
CF_GNU_SOURCE, CF_LARGEFILE, CF_POSIX_C_SOURCE, CF_SIZECHANGE, and
CF_TRY_XOPEN_SOURCE.
+ update config.guess, config.sub from
http://git.savannah.gnu.org/cgit/config.git
20180616
+ build-fix for ncurses-examples related to gcc8-fixes (cf: 20180526).
+ reduce use of _GNU_SOURCE for current glibc where _DEFAULT_SOURCE
combines with _XOPEN_SOURCE (Debian #900987).
+ change target configure level for _XOPEN_SOURCE to 600 to address
use of vsscanf and setenv.
+ improved configure-checks CF_SIZECHANGE and CF_STRUCT_TERMIOS from
work on dialog.
20180609
+ modify generated ncurses*config and ncurses.pc, ncursesw.pc, etc.,
to list helper libraries such as gpm for static linking (Debian
#900839).
+ marked vwprintw and vwscanw as deprecated; recommend using vw_printw
and vw_scanw, respectively.
20180602
+ add RPM test-package "ncursest-examples".
+ modified RPM test-package to work with Mageia6.
20180526
+ add note in curs_util.3x about unctrl.h
+ review/improve header files to ensure that those include necessary
files except for the previously-documented cases (report by Isaac
Pascual Monells).
+ improved test-package scripts, adapted from byacc 1.9 20180525.
+ fix some gcc8 warnings seen in Redhat package build, but
work around bug in gcc8 compiler warnings in comp_parse.c
20180519
+ formatting fixes for manpages, regenerate man-html documentation.
+ trim spurious whitespace from tmux in 2018-02-24 changes;
fix some inconsistencies in/between tmux- and iterm2-entries for SGR
(report by C Anthony Risinger)
+ improve iterm2 using some xterm features which it has adapted -TD
+ add check in pair_content() to handle the case where caller asks
for an uninitialized pair (Debian #898658).
20180512
+ remove trailing ';' from GCC_DEPRECATED definition.
+ repair a change from 20110730 which left an error-check/warning dead.
+ fix several minor Coverity warnings.
20180505
+ add deprecation warnings for internal functions called by older
versions of tack.
+ fix a special case in PutAttrChar() where a cell is marked as
alternate-character set, but the terminal does not actually support
the given graphic character. This would happen in an older terminal
such as vt52, which lacks most line-drawing capability.
+ use configure --with-config-suffix option to work around filename
conflict with Debian packages versus test-packages.
+ update tracemunch to work with perl 5.26.2, which changed the rules
for escaping regular expressions.
20180428
+ document new form-extension O_EDGE_INSERT_STAY (report by Leon
Winter).
+ correct error-returns listed in manual pages for a few form functions
(report by Leon Winter).
+ add a check in form-library for null-pointer dereference:
unfocus_current_field (form);
form_driver (form, REQ_VALIDATION);
(patch by Leon Winter).
20180414
+ modify form library to optionally delay cursor movement on a field
edge/boundary (patch by Leon Winter).
+ modify form library to avoid unnecessary update of cursor position in
non-public fields (patch by Leon Winter).
+ remove unused _nc_import_termtype2() function.
+ also add/improve null-pointer checks in other places
+ add a null-pointer check in _nc_parse_entry to handle an error when
a use-name is invalid syntax (report by Chung-Yi Lin).
20180407
+ clarify in manual pages that vwprintw and vwscanw are obsolete,
not part of X/Open Curses since 2007.
+ use "const" in some prototypes rather than NCURSES_CONST where X/Open
Curses was updated to do this, e.g., wscanw, newterm, the terminfo
interface. Also use "const" for consistency in the termcap
interface, which was withdrawn by X/Open Curses in Issue 5 (2007).
As of Issue 7, X/Open Curses still lacks "const" for certain return
values, e.g., keyname().
20180331
+ improve terminfo write/read by modifying the fourth item of the
extended header to denote the number of valid strings in the extended
string table (prompted by a comment in unibilium's sources).
20180324
+ amend Scaled256() macro in test/picsmap.c to cover the full range
0..1000 (report by Roger Pau Monne).
+ add some checks in tracemunch for undefined variables.
+ trim some redundant capabilities from st-0.7 -TD
+ trim unnecessary setf/setb from interix -TD
20180317
+ fix a check in infotocap which may not have detected a problem when
it should have.
+ add a check in tic for the case where setf/setb are given using
different strings, but provide identical results to setaf/setab.
+ further improve fix for terminfo.5 (patch by Kir Kolyshkin).
+ reorder loop-limit checks in winsnstr() in case the string has no
terminating null and only the number of characters is used (patch
by Gyorgy Jeney).
20180303
+ modify TurnOn/TurnOff macros in lib_vidattr.c and lib_vid_attr.c to
avoid expansion of "CUR" in trace.
+ improve a few lintian warnings in test-packages.
+ modify lib_setup to avoid calling pthread_self() without first
verifying that the address is valid, i.e., for weak symbols
(report/patch by Werner Fink).
+ modify generated terminfo.5 to not use "expand" and related width
on the last column of tables, making layout on wide terminals look
better (adapted from patch by Kir Kolyshkin).
+ add a category to report_offsets, e.g., "w" for wide-character, "t"
for threads to make the report more readable. Reorganized the
structures reported to make the categories more apparent.
+ simplify some ifdef's for extended-colors.
+ add NCURSES_GLOBALS and NCURSES_PRESCREEN to report_offsets, to show
how similar the different tinfo configurations are.
20180224
+ modify _nc_resolve_uses2() to detect incompatible types when merging
a "use=" clause of extended capabilities. The problem was seen in a
defective terminfo integrated from simpleterm sources in 20171111,
compounded by repair in 20180121.
+ correct Ss/Ms interchange in st-0.7 entry (tmux #1264) -TD
+ fix remaining flash capabilities with trailing mandatory delays -TD
+ correct cut/paste in NEWS (report by Sven Joachim).
20180217
+ remove incorrect free() from 20170617 changes (report by David Macek).
+ correct type for "U8" in user_caps.5; it is a number not boolean.
+ add a null-pointer check in safe_sprintf.c (report by Steven Noonan).
+ improve fix for Debian #882620 by reusing limit2 variable (report by
Julien Cristau, Sven Joachim).
20180210
+ modify misc/Makefile.in to install/uninstall explicit list in case
the build-directory happens to have no ".pc" files when an uninstall
is performed (report by Jeffrey Walton).
+ deprecate safe-sprintf, since the vsnprintf function, which does what
was needed, was standardized long ago.
+ add several development/experimental options to development packages.
+ minor reordering of options in configure script to make the threaded
and reentrant options distinct from the other extensions which are
normally enabled.
20180203
+ minor fixes to test/*.h to make them idempotent.
+ add/use test/parse_rgb.h to show how the "RGB" capability works.
+ add a clarification in user_caps.5 regarding "RGB" capability.
+ add extended_slk_color{,_sp} symbols to the appropriate
package/*.{map,sym} files (report by Sven Joachim, cf: 20170401).
20180129
+ update "VERSION" file, used in shared-library naming.
20180127 6.1 release for upload to ftp.gnu.org
20180127
+ updated release notes
+ amend a warning message from tic which should have flagged misuse
of "XT" capability in "screen" terminal description.
> terminfo changes:
+ trim "XT" from screen entry, add comments to explain why it was
not suitable -TD
+ modify iterm to use xterm+sl-twm building block -TD
+ mark konsole-420pc, konsole-vt100, konsole-xf3x obsolete reflecting
konsole's removal in 2008 -TD
+ expanded the history section of konsole to explain its flawed
imitation of xterm's keyboard -TD
+ use xterm+x11mouse in screen.* entries because screen does not yet
support xterm's 1006 mode -TD
+ add nsterm-build400 for macOS 10.13 -TD
+ add ansi+idc1, use that in ansi+idc adding dch for consistency -TD
+ update vte to vte-2017 -TD
+ add ecma+strikeout to vte-2017 -TD
+ add iterm2-direct -TD
+ updated teraterm, added teraterm-256color -TD
+ add mlterm-direct -TD
+ add descriptions for ANSI building-blocks -TD
20180121 pre-release
> terminfo changes:
+ add xterm+noalt, xterm+titlestack, xterm+alt1049, xterm+alt+title
blocks from xterm #331 -TD
+ add xterm+direct, xterm+indirect, xterm-direct entries from xterm
#331 -TD
+ modify xterm+256color and xterm+256setaf to use correct number of
color pairs, for ncurses 6.1 -TD
+ add rs1 capability to xterm-256color -TD
+ modify xterm-r5, xterm-r6 and xterm-xf86-v32 to use xterm+kbs to
match xterm #272, reflecting packager's changes -TD
+ remove "boolean" Se, Ss from st-0.7 -TD
+ add konsole-direct and st-direct -TD
+ remove unsupported "Tc" capability from st-0.7; use st-direct if
direct-colors are wanted -TD
+ add vte-direct -TD
+ add XT, hpa, indn, and vpa to screen, and invis, E3 to tmux (patch by
Pierre Carru)
+ use xterm+sm+1006 in xterm-new, vte-2014 -TD
+ use xterm+x11mouse in iterm, iterm2, mlterm3 because xterm's 1006
mode does not work with those programs. konsole is debatable -TD
+ add "termite" entry (report by Markus Pfeiffer) -TD
> merge branch begun April 2, 2017 which provides these features:
+ support read/write new binary-format for terminfo which stores
numeric capabilities as a signed 32-bit integer. The test programs
such as picsmap, ncurses were created or updated during 2017 to use
this feature.
+ the new format is written by the wide-character configuration of
tic when it finds a numeric capability larger than 32767.
+ other applications such as infocmp built with the wide-character
ncurses library work as expected.
+ applications built with the "narrow" (8-bit) configuration will
read the new format, but will limit those extended values to 32767.
+ in either wide/narrow configuration, the structure defined in
term.h still uses signed 16-bit values.
+ because it is incompatible with the legacy (mid-1980s) binary format,
a new magic value is provided for the "file" program.
+ the term.5 manual page is updated to describe this new format.
+ the limit on file-size for compiled terminfo is increased in the
wide-character configuration to 32768.
20180120
+ build-fix in picsmap.c for stdint.h existence.
+ add --disable-stripping option to configure scripts.
+ modify ncurses-examples to install test-scripts in the data directory.
+ work around tool-breakage in Debian 9 and later by invoking
gprconfig to specify the C compiler to be used by gnatmake,
and conditionally suppressing Library_Options line for static
libraries.
+ bump the compat level for test-packages to 7, i.e., Debian 5.
20180106
+ fixes for writing extended color pairs in putwin.
+ modify test/savescreen.c to add test patterns that exercise 88-,
256-, etc., colors.
+ modify configure option --with-build-cc, adding clang, c89 and c99
as possible default values.
+ modify ncurses-examples configure script to use pkg-config for the
extra form/menu/panel libraries, to be more consistent with the
handling of the curses/ncurses library.
+ modify test-packages for mingw to supply "pc" files.
+ modify gen-pkgconfig.in to list -lpthread as a private library when
configured to access it via weak symbols.
+ simplify gen-pkgconfig.in, adding -ltinfo without the special linker
checks because some versions of the linker simply hard-code the
behavior.
+ update URLs for ncurses website to use https.
+ modify CF_CURSES_LIBS to fill in $cf_nculib_root in case the
ncurses-examples are built with a system ncurses that lacks the
standard "curses" symbolic link, as done by SuSE. The symbol is
needed to make a followup check for the pthread library work, and
would be set properly using the options "--with-screen", etc.
+ generate misc/*.pc with "all" rule, as done for "sources" rule
(report by Jeffrey Walton).
20171230
+ build-fix for ncurses-examples with Fedora27, adding check for
reset_color_pairs() -- not yet in Fedora's package.
+ consistently add $CFLAGS to $MK_SHARED_LIB symbol in configure
script when the latter happens to use the C compiler rather than
directly using the loader (report by Jeffrey Walton).
+ set ABI for upcoming 6.1 release in "*.map" files. While there are
some remaining internals to apply, no ABI-related changes are
anticipated.
+ add configure --with-config-suffix option to work around filename
conflict with Redhat packages versus test-packages.
20171223
+ modify ncurses-examples to quiet const-warnings when building with
PDCurses.
+ modify toe to not exit if unable to read a terminal description,
e.g., if there is a permission problem.
+ minor fix for progs/toe.c, using _nc_free_termtype2.
+ assign 0 to pointer in _nc_tgetent_leak() after freeing it. Also
avoid reusing pointer from previous successful call to tgetent
if the latest call is unsuccessful (patch by Michael Schroeder,
OpenSuSE #1070450).
+ minor fix for test/tracemunch, initialize $awaiting variable.
20171216
+ repair template in test/package/ncurses-examples.spec (cf: 20171111).
+ improve tic's warning about the number of parameters tparm might use
for u1-u9 by making a special case for u6.
+ improve curs_attr.3x discussion of color pairs.
20171209
+ modify misc/ncurses-config.in to make output with --includedir
consistent with --cflags, i.e., when --disable-overwrite option was
configured the output should show the subdirectory where headers
are.
+ modify MKlib_gen.sh to suppress macros when calling an "implemented"
function in link_test.c
+ updated ftp-url used in test-packages, etc.
+ modify order of -pie/-shared options in configure script in case
LDFLAGS uses "-pie", working around a defect or limitation in the GNU
linker (prompted by patch by Yogesh Prasad, forwarded by Jay Shah).
+ add entry in man_db.renames for user_caps.5
20171125
+ modify MKlib_gen.sh to avoid tracing result from getstr/getnstr
before initialized.
+ add "-a" aspect-ratio option to picsmap.
+ add configure check for default path of rgb.txt, used in picsmap.
+ modify _nc_write_entry() to truncate too-long filename (report by
Hosein Askari, Debian #882620).
+ build-fix for ncurses-examples with NetBSD curses:
+ it lacks the use_env() function.
+ it lacks libpanel; a recent change used the wrong ifdef symbol.
+ add a macro for is_linetouched() and adjust the function's return
value to make it possible for most applications to check for an
error-return (report by Midolikawa H).
+ additional manpage cleanup.
+ update config.guess, config.sub from
http://git.savannah.gnu.org/cgit/config.git
20171118
+ add a note to curs_addch.3x on portability.
+ add a note to curs_pad.3x on the origin and portability of pads.
+ improve manpage description of getattrs (report by Midolikawa H).
+ improve manpage macros (prompted by discussion in Debian #880551.
+ reviewed test-programs using KEY_RESIZE, made fixes to test/worm.c
+ add a "-d" option to picsmap for default-colors.
+ modify old terminology entry and a few other terminal emulators to
account for xon -TD
+ correct sgr string for tmux, which used screen's "standout" code
rather than the standard code (patch by Roman Kagan)
+ correct sgr/sgr0 strings in a few other cases reported by tic, making
those correspond to the non-sgr settings where they differ, but
otherwise use ECMA-48 consistently:
jaixterm, aixterm, att5420_2, att4424, att500, decansi, d410-7b,
dm80, hpterm, emu-220, hp2, iTerm2.app, mterm-ansi, ncrvt100an,
st-0.7, vi603, vwmterm -TD
+ build-fix for diagnostics warning in lib_mouse.c for pre-5.0 versions
of gcc which did not recognize the diagnostic "push" pragma (patch by
Vassili Courzakis).
20171111
+ add "op" to xterm+256setaf -TD
+ reviewed terminology 1.0.0 -TD
+ reviewed st 0.7 -TD
+ suppress debug-package for ncurses-examples rpm build.
20171104
+ check for interrupt in color-pair initialization of dots_curses.c,
dots_xcurses.c
+ add z/Z zoom feature to test/ncurses.c C/c screens.
+ add '<' and '>' commands to test/ncurses.c S/s screens, to better
test off-by-ones in the overlap/copywin functions.
20171028
+ improve man/curs_inwstr.3x, correct end-logic for lib_inwstr.c
(report by Midolikawa H).
+ fix typo in a few places for "improvements" (patch by Sven Joachim).
+ clear the other half of a double-width character on which a line
drawing character is drawn.
+ make test/ncurses.c "s" test easier to understand which subtests are
available; add a "S" wide-character overlap test-screen.
+ modify test/ncurses.c C/c tests to allow for extended color pairs.
+ add endwin() call in error-returns from test/ncurses.c omitted in
recent redesign of its menu (cf: 20170923).
+ improve install of hashed-db by removing the ".db" file as done for
directory-tree terminal databases.
+ repair a few overlooked items in include/ncurses_defs from recent
port/refactoring of test-programs (cf: 20170909).
+ add test/padview.c, to compare pads with direct updates in view.c
20171021
+ modify test/view.c to expand tabs using the ncurses library rather
than in the test-program.
+ remove very old SIGWINCH example in test/view.c, just use KEY_RESIZE.
+ add -T, -e, -f -m options to "dots" test-programs.
+ fix a few typos in usage-messages for test-programs.
20171014
+ minor cleanup to test/view.c:
+ eliminate "-n" option by simply reading the whole file.
+ implement page up/down commands.
+ add check in tput for init/reset operands to ensure those use a
terminal.
+ improve manual pages which discuss chtype, cchar_t types and the
attribute values which can be stored in those types.
+ correct array-index when parsing "-T" command-line option in tabs
program.
+ modify demo_new_pair.c to pass extended pairs to setcchar().
+ add test/dots_xcurses.c to illustrate a different approach used for
extended colors which can be contrasted with dots_curses.c.
+ add a check in tic to note when a description uses non-mandatory
delays without xon_xoff. This is not an error, but some descriptions
for a terminal emulator may use the combination incorrectly.
20171007
+ modify "-T" option of clear and tput to call use_tioctl() to obtain
the operating system's notion of the screensize if possible.
+ review/repair some exit-codes for tput, making usage-message exit
with 2 rather than 1, and a failure to open terminal 4+errno.
+ amend check in tput, tabs and clear to allow those to use the
database-only features in cron if a -T option gives a suitable
terminal name (report by Lauri Tirkkonen).
+ correct an ifdef in test/ncurses.c for systems with soft-keys but
not slk_color().
+ regenerate man-html documentation.
20170930
+ fix a symbol conflict that made ncurses.c C/c menu not work with
Solaris xpg4 curses.
+ add refresh() call to dots_mvcur.c, needed to use mvcur() with
Solaris xpg4 curses after calling newterm().
+ minor fixes for configure script from work on ncurses-examples and
tin.
+ improve animation in test/xmas.c by adding a time-delay in blinkit().
+ modify several test programs to reflect that ncurses honors existing
signal handlers in initscr(), while other implementations do not.
+ modify bs.c to make it easier to quit.
+ change ncurses-examples to use attr_t vs chtype to follow X/Open
documentation more closely since Solaris xpg4-curses uses different
values for WA_xxx vs A_xxx that rely on attr_t being an unsigned
short. Tru64 aka OSF1, HPUX, AIX did as ncurses does, equating the
two sets.
20170923
+ modify menu for test/ncurses.c to fit on 24-line screen.
+ build-fix for configure --with-caps=uwin
+ add options to test_arrays.c, for selecting termcap vs terminfo, etc.
20170916
+ minor fix to test/filter.c to avoid clearing the command in one case.
+ modify filter() to discard clr_eos if back_color_erase is set.
20170909
+ improve wide-character implementation of myADDNSTR() in frm_driver.c,
which was inconsistent with the normal implementation.
+ save/restore cursor position in Undo_Justification(), matching
behavior of Buffer_To_Window() (report by Leon Winter).
+ modify test/knight to provide the "slow" solution for small screens
using "R", noting that Warnsdorf's method is easily done with "a".
+ modify several test-programs which call use_default_colors() to
consistently do this only if "-d" option is given.
+ additional changes to test with non-standard variants of curses:
+ modify a loop limit in firework.c to work around absence of limit
checks in some libraries.
+ fill the last row of a window with "?" in firstlast if waddch does
not return ERR on the lower-right corner.
+ add checks in test/configure for some functions not in 4.3BSD curses.
+ fix a regression in test/configure (cf: 20170826).
20170902
+ amend change for endwin-state for better consistency with the older
logic (report/patch by Jeb Rosen, cf: 20170722).
+ modify check in fmt_entry() to handle a cancelled reset string
(Debian #873746). Make similar fixes in other parts of dump_entry.c
and tput.c
20170827
+ fix a bug in repeat_char logic (cf: 20170729, report by Chris Clayton).
20170826
+ fixes for "iterm2" (report by Leonardo Brondani Schenkel) -TD
+ corrected a warning from tic about keys which are the same, to skip
over missing/cancelled values.
+ add check in tic for unnecessary use of "2" to denote a shifted
special key.
+ improve checks in trim_sgr0, comp_parse.c and parse_entry.c, for
cancelled string capabilities.
+ add check in _nc_parse_entry() for invalid entry name, setting the
name to "invalid" to avoid problems storing entries.
+ add/improve checks in tic's parser to address invalid input
+ add a check in comp_scan.c to handle the special case where a
nontext file ending with a NUL rather than newline is given to tic
as input (Redhat #1484274).
+ allow for cancelled capabilities in _nc_save_str (Redhat #1484276).
+ add validity checks for "use=" target in _nc_parse_entry (Redhat
#1484284).
+ check for invalid strings in postprocess_termcap (Redhat #1484285)
+ reset secondary pointers on EOF in next_char() (Redhat #1484287).
+ guard _nc_safe_strcpy() and _nc_safe_strcat() against calls using
cancelled strings (Redhat #1484291).
+ correct typo in curs_memleaks.3x (Sven Joachim).
+ improve test/configure checks for some curses variants not based on
X/Open Curses.
+ add options for test/configure to disable checks for form, menu and
panel libraries.
20170819
+ update "iterm" entry -TD
+ add "iterm2" entry (report by Leonardo Brondani Schenkel) -TD
+ regenerate llib-* files.
+ regenerate HTML manpages.
+ improve picsmap test-program:
+ reduce memory used for tsearch
+ add report in log file showing cumulative color coverage.
+ add -x option to clear/tput to make the E3 extension optional
(cf: 20130622).
+ add options -T and -V to clear command for compatibility with tput.
+ add usage message to clear command (Debian #371855).
+ improve usage messages for tset and tput.
+ minor fixes to "RGB" extension and reset_color_pairs().
20170812
+ improve description of -R option in infocmp manual page (report by
Stephane Chazelas).
+ add reset_color_pairs() function.
+ add user_caps.5 manual page to document the terminfo extensions used
by ncurses.
+ improve build scripts, using SIGQUIT vs SIGTRAP; add other configure
script fixes from work on xterm, lynx and tack.
+ modify install-rule for ncurses-examples to put the data files in
/usr/share/ncurses-examples
+ improve tracemunch, by changing address-parameters of add_wch(),
color_content() and pair_content() to dummy parameters.
+ minor optimization to _nc_change_pair, to return quickly when the
current screen is marked for clearing.
+ in-progress changes to improve performance of test/picsmap.c for
loading image files.
+ modify allocation for SCREEN's color-pair table to start small, grow
on demand up to the existing limit.
+ add "RGB" extension capability for direct-color support, use this to
improve color_content().
+ improve picsmap test-program:
+ if no palette file is needed, attempt to load one based on $TERM,
checking first in the current directory, then by adding ".dat"
suffix, and finally in the data-directory, e.g.,
/usr/share/ncurses-examples
+ add "-l" option for logging
+ add "-d" option for debugging
+ add "-s" option for stepping automatically through list of images,
with time delay.
+ use tsearch to improve time for loading color table for images.
+ update config.guess, config.sub from
http://git.savannah.gnu.org/cgit/config.git
20170729
+ update interix entry using tack and SFU on Windows 7 Ultimate -TD
+ use ^? for kdch1 in interix (reported by Jonathan de Boyne Pollard)
+ add "rep" to xterm-new, available since 1997/01/26 -TD
+ move SGR 24 and 27 from vte-2014 to vte-2012 (request by Alain
Williams) -TD
+ add a check in newline_forces_scroll() in case a program moves the
cursor outside scrolling margins (report by Robert King).
+ improve _nc_tparm_analyze, using that to extend the checks made by
tic for reporting inconsistencies between the expected number of
parameters for a capability and the actual.
+ amend handling of repeat_char capability in EmitRange (adapted from
report/patch by Dick Wesseling):
+ translate the character to the alternate character set when the
alternate character set is enabled.
+ do not use repeat_char for characters past 255.
+ document "_nc_free_tinfo" in manual page, because it could be used in
tack for memory-leak checking.
+ add "--without-tack" configure option to refine "--with-progs"
configure option. Normally tack is no longer built in-tree, but
a few packagers combine it during the build. If term_entry.h is
installed, there is no advantage to in-tree builds.
+ adjust configure-script to define HAVE_CURSES_DATA_BOOLNAMES symbol
needed for tack 1.08 when built in-tree. Rather than relying upon
internal "_nc_" functions, tack now uses the boolean, number and
string capability name-arrays provided by ncurses and SVr4 Unix
curses. It still uses term_entry.h for the definitions of the
extended capability arrays.
+ add an overlooked null-pointer check in mvcur changes from 20170722
20170722
+ improve test-packages for ncurses-examples and AdaCurses for lintian
+ modify logic for endwin-state to be able to detect the case where
the screen was never initialized, using that to trigger a flush of
ncurses' buffer for mvcur, e.g., in test/dots_mvcur.c for the
term-driver configuration.
+ add dependency upon ncurses_cfg.h to a few other internal header
files to allow each to be compiled separately.
+ add dependency upon ncurses_cfg.h to tic's header-files; any program
using tic-library will have to supply this file. Legacy tack
versions supply this file; ongoing tack development has dropped the
dependency upon tic-library and new releases will not be affected.
20170715
+ modify command-line parameters for "convert" used in picsmap to work
with ImageMagick 6.8 and newer.
+ fix build-problem with tack and ABI-5 (Debian #868328).
+ repair termcap-format from tic/infocmp broken in 20170701 fixes
(Debian #868266).
+ reformat terminfo.src with 20170513 updates.
+ improve test-packages to address lintian warnings.
20170708
+ add a note to tic manual page about -W versus -f options.
+ correct a limit-check in fixes from 20170701 (report by Sven Joachim).
20170701
+ modify update_getenv() in db_iterator.c to ensure that environment
variables which are not initially set will be checked later if an
application happens to set them (patch by Guillaume Maudoux).
+ remove initialization-check for calling napms() in the term-driver
configuration; none is needed.
+ add help-screen to test/test_getstr.c and test/test_get_wstr.c
+ improve compatibility between different configurations of new_prescr,
fixing a case with threaded code and term-driver where c++/demo did
not work (cf: 20160213).
+ the fixes for Redhat #1464685 obscured a problem subsequently
reported in Redhat #1464687; the given test-case was no longer
reproducible. Testing without the fixes for the earlier reports
showed a problem with buffer overflow in dump_entry.c, which is
addressed by reducing the use of a fixed-size buffer.
+ add/improve checks in tic's parser to address invalid input
(Redhat #1464684, #1464685, #1464686, #1464691).
+ alloc_entry.c, add a check for a null-pointer.
+ parse_entry.c, add several checks for valid pointers as well as
one check to ensure that a single character on a line is not
treated as the 2-character termcap short-name.
+ fix a memory leak in delscreen() (report by Bai Junq).
+ improve tracemunch, showing thread identifiers as names.
+ fix a use-after-free in NCursesMenu::~NCursesMenu()
+ further amend incorrect calls for memory-leaks from 20170617 changes
(report by Allen Hewes).
20170624
+ modify c++/etip.h.in to accommodate deprecation of throw() and
throws() in c++17 (prompted by patch by Romain Geissler).
+ remove some incorrect calls for memory-leaks from 20170617 changes
(report by Allen Hewes).
+ add test-programs for termattrs and term_attrs.
+ modify _nc_outc_wrapper to use the standard output if the screen was
not initialized, rather than returning an error.
+ improve checks for low-level terminfo functions when the terminal
has not been initialized (Redhat #1345963).
+ modify make_hash to allow building with address-sanitizer,
assuming that --disable-leaks is configured.
+ amend changes for number_format() in 20170506 to avoid undefined
behavior when shifting (patch by Emanuele Giaquinta).
20170617
+ fill in some places where TERMTYPE2 vs TERMTYPE was not used
(report by Allen Hewes).
+ use ExitTerminfo() internally in error-exits for ncurses' setupterm
to help with leak checking.
+ use ExitProgram() in error-exit from initscr() to help with leak
checking.
+ review test-programs, adding checks for cases where the terminal
cannot be initialized.
20170610
+ add option "-xp" to picsmap.c, to use init_extended_pair().
+ make simple performance fixes for picsmap.c
+ improve aspect ratio of images read from "convert" in picsmap.c
20170603
+ add option to picsmap to use color-palette files, e.g., for mapping
to xterm-256color.
+ move the data in SCREEN used for the alloc_pair() function to the
end, to restore compatibility between ncurses/ncursesw libtinfo
(report/patch by Miroslav Lichvar).
+ add build-time utility "report_offsets" to help show when the various
configurations of tinfo library are compatible or not.
20170527
+ improved test/picsmap.c:
+ lookup named colors for xpm files in rgb.txt
+ accept blanks in color-keys for xpm files.
+ if neither xbm/xpm work, try "convert", which may be available.
20170520
+ modify test/picsmap.c to read xpm files.
+ modify package/debian/* to create documentation packages, so the
related files can be checked with lintian.
+ fix some typos in manpages (report/patch by Sven Joachim).
20170513
+ add test/picsmap.c to fill in some testing issues not met by dots.
The initial version reads X bitmap (".xbm") files.
+ repair logic which forces a repaint where a color-pair's content is
changed (cf: 20170311).
+ improve tracemunch, showing screenXX pointers as names.
20170506
+ modify tic/infocmp display of numeric values to use hexadecimal when
they are "close" to a power of two, making the result more readable.
+ improve discussion of portability in curs_mouse.3x
+ change line-length for generated html/manpages to 78 columns from 65.
+ improve discussion of line-drawing characters in curs_add_wch.3x
(prompted by discussion with Lorinczy Zsigmond).
+ cleanup formatting of hackguide.html and ncurses-intro.html
+ add examples for WACS_D_PLUS and WACS_T_PLUS to test/ncurses.c
20170429
+ corrected a case where $with_gpm was set to "maybe" after CF_WITH_GPM,
overlooked in 20160528 fixes (report by Alexandre Bury).
+ improve a couple of test-program's help-messages.
+ corrected loop in rain.c from 20170415 changes.
+ modify winnstr and winchnstr to return error if the output pointer is
null, as well as adding a null pointer check of the window pointer
for better compatibility with other implementations.
+ improve discussion of NetBSD curses in scr_dump.5
+ modify LIMIT_TYPED macro in new_pair.h to avoid changing sign of the
value to be limited (reports by Darby Payne, Rob Boudreau).
+ update config.guess, config.sub from
http://git.savannah.gnu.org/cgit/config.git
20170422
+ build-fix for termcap-configuration (report by Chi-Hsuan Yen).
+ improve terminfo manual page discussion of control- and graphics-
characters.
+ remove tic warning about "^?" in string capabilities, which was
marked as an extension (cf: 20000610, 20110820); however all Unix
implementations support this and X/Open Curses does not address it.
On the other hand, termcap never did support this feature.
+ correct missing comma-separator between string capabilities in
icl6402 and m2-nam -TD
+ restore rmir/smir in ansi+idc to better match original ansiterm+idc,
add alias ansiterm (report by Robert King).
+ amend an old check for ambiguous use of "ma" in terminfo versus
a termcap use, if the capability is cancelled to treat it as number.
+ correct a case in _nc_captoinfo() which read "%%" and emitted "%".
+ modify sscanf calls in _nc_infotocap() for patterns "%{number}%+%c"
and "%'char'%+%c" to check that the final character is really 'c',
avoiding a case in icl6404 which cannot be converted to termcap.
+ in _nc_infotocap(), add a check to ensure that terminfo "^?" is not
written to termcap, because the BSDs did not implement that.
+ in _nc_tic_expand() and _nc_infotocap(), improve string-length check
when deciding whether to use "^X" or "\xxx" format for control
characters, to make the output of tic/infocmp more predictable.
+ limit termcap "%d" width to 2 digits on input, and use "%2" in
preference to "%02" on output.
+ correct terminfo/termcap conversion of "%02" and "%03" into "%2" and
"%3"; the result repeated the last character.
+ add man/scr_dump.5 to document screen-dump format.
20170415
+ modify several test programs to use new popup_msgs, adapted from
help-screen used in test/edit_field.c
+ drop two symbols obsoleted in 2004: _nc_check_termtype, and
_nc_resolve_uses
+ fix some old copyright dates (cf: 20031025).
+ build-fixes for test/savescreen.c to work with AIX and HPUX.
+ minor fix to configure script, adding a backslash/continuation.
+ extend TERMINAL structure for ABI 6 to store numbers internally as
integers rather than short, by adding new data for this purpose.
+ more fixes for minor memory-leaks in test-programs.
20170408
+ change logic in wins_nwstr() to avoid addressing data past the output
of mbstowcs().
+ correct a call to setcchar() in Data_Entry_w() from 20131207 changes.
+ fix minor memory-leaks in test-programs.
+ further improve ifdef in term_entry.h for internal definitions not
used by tack.
20170401
+ minor fixes for vt100+4bsd, e.g., delay in sgr for consistency -TD
+ add smso for env230, to match sgr -TD
+ remove p7/protect from sgr in fbterm -TD
+ drop setf/setb from fbterm; setaf/setab are enough -TD
+ make xterm-pcolor sgr consistent with other capabilities -TD
+ add rmxx/smxx ECMA-48 strikeout extension to tmux and xterm-basic
(discussion with Nicholas Marriott)
+ add test-programs sp_tinfo and extended_color
+ modify no-leaks code for lib_cur_term.c to account for the tgetent()
cache.
+ modify setupterm() to save original tty-modes so that erasechar()
works as expected. Also modify _nc_setupscreen() to avoid redundant
calls to get original tty-modes.
+ modify set_curterm() to update ttytype[] data used by longname().
+ modify wattr_set() and wattr_get() to return ERR if win-parameter is
null, as documented.
+ improve cast used for null-pointer checks in header macros, to
reduce compiler warnings.
+ modify several functions, using the reserved "opts" parameter to pass
color- and pair-values larger than 16-bits:
+ getcchar(), setcchar(), slk_attr_set(), vid_puts(), wattr_get(),
wattr_set(), wchgat(), wcolor_set().
+ Other functions call these with the corresponding altered behavior,
including chgat(), mvchgat(), mvwchgat(), slk_color_on(),
slk_color_off(), vid_attr().
+ add new functions for manipulating color- and pair-values larger
than 16-bits. These are extended_color_content(),
extended_pair_content(), extended_slk_color(), init_extended_color(),
init_extended_pair(), and the corresponding sp-funcs.
20170325
+ fix a memory leak in the window-list when creating multiple screens
(reports by Andres Martinelli, Debian #783486).
+ reviewed calls from link_test.c, added a few more null-pointer
checks.
+ add a null-pointer check in ungetmouse, in case mousemask was not
called (report by "Kau").
+ updated curs_sp_funcs.3x for new functions.
20170318
+ change TERMINAL structure in term.h to make it opaque. Some
applications misuse its members, e.g., directly modifying it
rather than using def_prog_mode().
+ modify utility headers such as tic.h to make it clearer which are
externals that are used by tack.
+ improve curs_slk.3x in particular its discussion of portability.
+ fix cut/paste in legacy_encoding.3x
+ add prototype for find_pair() to new_pair.3x (report by Branden
Robinson).
+ fix a couple of broken links in generated man-html documentation.
+ regenerate man-html documentation.
20170311
+ modify vt100 rs2 string to reset vt52 mode and scrolling regions
(report/analysis by Robert King) -TD
+ add vt100+4bsd building block, use that for older terminals rather
than "vt100" which is now mostly used as a building block for
terminal emulators -TD
+ correct a few spelling errors in terminfo.src comments -TD
+ add fbterm -TD
+ fix a typo in ncurses.c test_attr legend (patch by Petr Vanek).
+ changed internal colorpair_t to a struct, eliminating an internal
8-bit limit on colors
+ add ncurses/new_pair.h
+ add ncurses/base/new_pair.c with alloc_pair(), find_pair() and
free_pair() functions
+ add test/demo_new_pair.c
20170304
+ improve terminfo manual description of terminfo syntax.
+ clarify the use of wint_t vs wchar_t in curs_get_wstr.3x
+ improve description of endwin() in manual.
+ modify setcchar() and getcchar() to treat negative color-pair as an
error.
+ fix a typo in include/hashed_db.h (Andre Sa).
20170225
+ fixes for CF_CC_ENV_FLAGS (report by Ross Burton).
20170218
+ fix several formatting issues with manual pages.
+ correct read of terminfo entry in which all strings are absent or
explicitly cancelled. Before this fix, the result was that all were
treated as only absent.
+ modify infocmp to suppress mixture of absent/cancelled capabilities
that would only show as "NULL, NULL", unless the -q option is used,
e.g., to show "-, @" or "@, -".
20170212
+ build-fixes for PGI compilers (report by Adam J. Stewart)
+ accept whitespace in sed expression for generating expanded.c
+ modify configure check that g++ compiler warnings are not used.
+ add configure check for -fPIC option needed for shared libraries.
+ let configure --disable-ext-funcs override the default for the
--enable-sp-funcs option.
+ mark some structs in form/menu/panel libraries as potentially opaque
without modifying API/ABI.
+ add configure option --enable-opaque-curses for ncurses library and
similar options for the other libraries.
20170204
+ trim newlines, tabs and escaped newlines from terminfo "paths" passed
to db-iterator.
+ ignore zero-length files in db-iterator; these are useful for
instance to suppress "$HOME/.terminfo" when not wanted.
+ amended "b64:" encoder to work with the terminfo reader.
+ modify terminfo reader to accept "b64:" format using RFC-3548 in
as well as RFC-4648 url/filename-safe format.
+ modify terminfo reader to accept "hex:" format as generated by
"infocmp -0qQ1" (cf: 20150905).
+ adjust authors comment to reflect drop below 1% for SV.
20170128
+ minor comment-fixes to help automate links to bug-urls -TD
+ add dvtm, dvtm-256color -TD
+ add settings corresponding to xterm-keys option to tmux entry to
reflect upcoming change to make that option "on" by default
(patch by Nicholas Marriott).
+ uncancel Ms in tmux entry (Harry Gindi, Nicholas Marriott).
+ add dumb-emacs-ansi -TD
20170121
+ improve discussion of early history of tput program.
+ incorporate A_COLOR mask into COLOR_PAIR(), in case user application
provides an out-of-range pair number (report by Elijah Stone).
+ clarify description in tput manual page regarding support for
termcap names (prompted by FreeBSD #214709).
+ remove a restriction in tput's support for termcap names which
omitted capabilities normally not shown in termcap translations
(cf: 990123).
+ modify configure script for clang as used on FreeBSD, to work around
clang's differences in exit codes vs gcc.
20170114
+ improve discussion of early history of tset/reset programs.
+ clarify in manual pages that the optional verbose option level is
available only when ncurses is configured for tracing.
+ amend change from 20161231 to avoid writing traces to the standard
error after initializing the trace feature using the environment
variable.
20170107
+ amend changes for tput to reset tty modes to "sane" if the program
is run as "reset", like tset. Likewise, ensure that tset sends
either reset- or init-strings.
+ improve manual page descriptions of tput init/reset and tset/reset,
to make it easier to see how they are similar and different.
+ move a static result from key_name() to _nc_globals
+ modify _nc_get_screensize to allow for use_env() and use_tioctl()
state to be per-screen when sp-funcs are configured, better matching
the behavior when using the term-driver configuration.
+ improve cross-references in manual pages for often used functions
+ move SCREEN field for use_tioctl() data before the ncursesw fields,
and limit that to the sp-funcs configuration to improve termlib
compatibility (cf: 20120714).
+ correct order of initialization for traces in use_env() and
use_tioctl() versus first trace calls.
20161231
+ fix errata for ncurses-howto (report by Damien Ruscoe).
+ fix a few places in configure/build scripts where DESTDIR and rpath
were combined (report by Thomas Klausner).
+ merge current st description (report by Harry Gindi) -TD
+ modify flash capability for linux and wyse entries to put the delay
between the reverse/normal escapes rather than after -TD
+ modify program tabs to pass the actual tty file descriptor to
setupterm rather than the standard output, making padding work
consistently.
+ explain in clear's manual page that it writes to stdout.
+ add special case for verbose debugging traces of command-line
utilities which write to stderr (cf: 20161126).
+ remove a trace with literal escapes from skip_DECSCNM(), added in
20161203.
+ update config.guess, config.sub from
http://git.savannah.gnu.org/cgit/config.git
20161224
+ correct parameters for copywin call in _nc_Synchronize_Attributes()
(patch by Leon Winter).
+ improve color-handling section in terminfo manual page (prompted by
patch by Mihail Konev).
+ modify programs clear, tput and tset to pass the actual tty file
descriptor to setupterm rather than the standard output, making
padding work.
20161217
+ add tput-colorcube demo script.
+ add -r and -s options to tput-initc demo, to match usage in xterm.
+ flush the standard output in _nc_flush for the case where SP is zero,
e.g., when called via putp. This fixes a scenario where "tput flash"
did not work after changes in 20130112.
20161210
+ add configure script option --disable-wattr-macros for use in cases
where one wants to use the same headers for ncurses5/ncurses6
development, by suppressing the wattr* macros which differ due to
the introduction of extended colors (prompted by comments in
Debian #230990, Redhat #1270534).
+ add test/tput-initc to demonstrate tput used to initialize palette
from a data file.
+ modify test/xterm*.dat to use the newer color4/color12 values.
20161203
+ improve discussion of field validation in form_driver.3x manual page.
+ update curs_trace.3x manual page.
20161126
+ modify linux-16color to not mask dim, standout or reverse with the
ncv capability -TD
+ add 0.1sec mandatory delay to flash capabilities using the VT100
reverse-video control -TD
+ omit selection of ISO-8859-1 for G0 in enacs capability from linux2.6
entry, to avoid conflict with the user-defined mapping. The reset
feature will use ISO-8859-1 in any case (Mikulas Patocka).
+ improve check in tic for delays by also warning about beep/flash
when a delay is not embedded, or if those use the VT100 reverse
video escape without using a delay.
+ minor fix for syntax-check of delays from 20161119 changes.
+ modify trace() to avoid overwriting existing file (report by Maor
Shwartz).
20161119
+ add check in tic for some syntax errors of delays, as well as use of
proportional delays for non-line capabilities.
+ document history of the clear program and the E3 extension, prompted
by various discussions including
http://unix.stackexchange.com/questions/87469/clearing-the-old-scrollback-buffer
20161112
+ improve -W option in tic/infocmp:
+ correct order of size-adjustments in wrapped lines
+ if -f option splits line, do not further split it with -W
+ begin a new line when adding "use=" after a wrapped line
20161105
+ fix typo in man/terminfo.tail (Alain Williams).
+ correct program-name in adacurses6-config.1 manual page.
20161029
+ add new function "unfocus_current_field" (Leon Winter)
20161022
+ modify tset -w (and tput reset) to update the program's copy of the
screensize if it was already set in the system, to improve tabstop
setting which relies upon knowing the actual screensize.
+ add functionality of tset -w to tput, like the "-c" feature this is
not optional in tput.
+ add "clear" as a possible link/alias to tput.
+ improve tput's check for being called as "init" or "reset" to allow
for transformed names.
+ split-out the "clear" function from progs/clear.c, share with
tput to get the same behavior, e.g., the E3 extension.
20161015
+ amend internal use of tputs to consistently use the number of lines
affected, e.g., for insert/delete character operations. While
merging terminfo source early in 1995, several descriptions used the
"*" proportional delay for these operations, prompting a change in
doupdate.
+ regenerate llib-* files.
+ regenerate HTML manpages.
+ fix several formatting issues with manual pages.
20161008
+ adjust size in infocmp/tic to work with strlcpy.
+ fix configure script to record when strlcat is found on OpenBSD.
+ build-fix for "recent" OpenBSD vs baudrate.
20161001
+ add -W option to tic/infocmp to force long strings to wrap. This is
in addition to the -w option which attempts to fit capabilities into
a given line-length.
+ add linux-m1 minitel entries (patch by Alexandre Montaron).
+ correct rs2 string for vt100-nam -TD
20160924
+ modify _nc_tic_expand to escape comma if it immediately follows a
percent sign, to work with minitel change.
+ updated minitel and viewdata descriptions (Alexandre Montaron).
20160917
+ build-fix for gnat6, which unhelpfully attempts to compile C files.
+ fix typo in 20160910 changes (Debian #837892, patch by Sven Joachim).
20160910
+ trim dead code ifdef'd with HIDE_EINTR since 970830 (discussion with
Leon Winter).
+ trim some obsolete/incorrect wording about EINTR from wgetch manual
page (patch by Leon Winter).
+ really correct 20100515 change (patch by Rich Coe).
+ add "--enable-string-hacks" option to test/configure
+ completed string-hacks for "sprintf", etc., including test-programs.
+ make "--enable-string-hacks" work with Debian by checking for the
"bsd" library and its associated "<bsd/string.h>" header.
20160903
+ correct 20100515 change for weak signals versus sigprocmask (report
by Rich Coe).
+ modify misc/Makefile.in to work around OpenBSD "make" which unlike
all other versions of "make" does not recognize continuation lines
of comments.
+ amend the last change to CF_C_ENV_FLAGS to move only the
preprocessor, optimization and warning flags to CPPFLAGS and CFLAGS,
leaving the residue in CC. That happens to work for gcc's various
"model" options, but may require tuning for other compilers (report
by Sven Joachim).
20160827
+ add "v" menu entry to test/ncurses.c to show baudrate and other
values.
+ add "newer" baudrate symbols from Linux and FreeBSD to progs/tset.c,
lib_baudrate.c
+ modify CF_XOPEN_SOURCE macro:
+ add "uclinux" to case for "linux" (patch by Yann E. Morin)
+ modify _GNU_SOURCE for cygwin headers, tested with cygwin 2.3, 2.5
(patch by Corinna Vinschen, from changes to tin).
+ improve CF_CC_ENV_FLAGS macro to allow for compiler wrappers such
as "ccache" (report by Enrico Scholz).
+ update config.guess, config.sub from
http://git.savannah.gnu.org/cgit/config.git
20160820
+ update tput manual page to reflect changes to manipulate terminal
modes by sharing functions with tset.
+ add the terminal-mode parts of "reset" (aka tset) to the "tput reset"
command, making the two almost the same except for window-size.
+ adapt logic used in dialog "--keep-tite" option for test/filter.c as
"-a" option. When set, test/filter attempts to suppress the
alternate screen.
+ correct a typo in interix entry -TD
20160813
+ add a dependency upon generated-sources in Ada95/src/Makefile.in to
handle a case of "configure && make install".
+ trim trailing blanks from include/Caps*, to work around a problem
in sed (Debian #818067).
20160806
+ improve CF_GNU_SOURCE configure macro to optionally define
_DEFAULT_SOURCE work around a nuisance in recent glibc releases.
+ move the terminfo-specific parts of tput's "reset" function into
the shared reset_cmd.c, making the two forms of reset use the same
strings.
+ split-out the terminal initialization functions from tset as
progs/reset_cmd.c, as part of changes to merge the reset-feature
with tput.
20160730
+ change tset's initialization to allow it to get settings from the
standard input as well as /dev/tty, to be more effective when
output or error are redirected.
+ improve discussion of history and portability for tset/reset/tput
manual pages.
20160723
+ improve error message from tset/reset when both stderr/stdout are
redirected to a file or pipe.
+ improve organization of curs_attr.3x, curs_color.3x
20160709
+ work around Debian's antique/unmaintained version of mawk when
building link_test.
+ improve test/list_keys.c, showing ncurses's convention of modifiers
for special keys, based on xterm.
20160702
+ improve test/list_keys.c, using $TERM if no parameters are given.
20160625
+ build-fixes for ncurses "test_progs" rule.
+ amend change to CF_CC_ENV_FLAGS in 20160521 to make multilib build
work (report by Sven Joachim).
20160618
+ build-fixes for ncurses-examples with NetBSD curses.
+ improve test/list_keys.c, fixing column-widths and sorting the list
to make it more readable.
20160611
+ revise fix for Debian #805618 (report by Vlado Potisk, cf: 20151128).
+ modify test/ncurses.c a/A screens to make exiting on an escape
character depend on the start of keypad and timeout modes, to allow
better testing of function-keys.
+ modify rs1 for xterm-16color, xterm-88color and xterm-256color to
reset palette using "oc" string as in linux -TD
+ use ANSI reply for u8 in xterm-new, to reflect vt220-style responses
that could be returned -TD
+ added a few capabilities fixed in recent vte -TD
20160604
+ correct logic for -f option in test/demo_terminfo.c
+ add test/list_keys.c
20160528
+ further workaround for PIE/PIC breakage which causes gpm to not link.
+ fix most cppcheck warnings, mostly style, in ncurses library.
20160521
+ improved manual page description of tset/reset versus window-size.
+ fixes to work with a slightly broken compiler configuration which
cannot compile "Hello World!" without adding compiler options
(report by Ola x Nilsson):
+ pass appropriate compiler options to the CF_PROG_CC_C_O macro.
+ when separating compiler and options in CF_CC_ENV_FLAGS, ensure
that all options are split-off into CFLAGS or CPPFLAGS
+ restore some -I options removed in 20140726 because they appeared
to be redundant. In fact, they are needed for a compiler that
cannot combine -c and -o options.
20160514
+ regenerate HTML manpages.
+ improve manual pages for wgetch and wget_wch to point out that they
might return values without names in curses.h (Debian #822426).
+ make linux3.0 entry the default linux entry (Debian #823658) -TD
+ modify linux2.6 entry to improve line-drawing so that the linux3.0
entry can be used in non-UTF-8 mode -TD
+ document return value of use_extended_names (report by Mike Gran).
20160507
+ amend change to _nc_do_color to restore the early return for the
special case used in _nc_screen_wrap (report by Dick Streefland,
cf: 20151017).
+ modify test/ncurses.c:
+ check return-value of putwin
+ correct ifdef which made the 'g' test's legend not reflect changes
to keypad- and scroll-modes.
+ correct return-value of extended putwin (report by Mike Gran).
20160423
+ modify test/ncurses.c 'd' edit-color menu to optionally read xterm
color palette directly from terminal, as well as handling KEY_RESIZE
and screen-repainting with control/L and control/R.
+ add 'oc' capability to xterm+256color, allowing palette reset for
xterm -TD
20160416
+ add workaround in configure script for inept transition to PIE vs
PIC builds documented in
https://fedoraproject.org/wiki/Changes/Harden_All_Packages
+ add "reset" to list of programs whose names might change in manpages
due to program-transformation configure options.
+ drop long-obsolete "-n" option from tset.
20160409
+ modify test/blue.c to use Unicode values for card-glyphs when
available, as well as improving the check for CP437 and CP850.
20160402
+ regenerate HTML manpages.
+ improve manual pages for utilities with respect to POSIX versus
X/Open Curses.
20160326
+ regenerate HTML manpages.
+ improve test/demo_menus.c, allowing mouse-click on the menu-headers
to switch the active menu. This requires a new extension option
O_MOUSE_MENU to tell the menu driver to put mouse events which do not
apply to the active menu back into the queue so that the application
can handle the event.
20160319
+ improve description of tgoto parameters (report by Steffen Nurpmeso).
+ amend workaround for Solaris line-drawing to restore a special case
that maps Unicode line-drawing characters into the acsc string for
non-Unicode locales (Debian #816888).
20160312
+ modified test/filter.c to illustrate an alternative to getnstr, that
polls for input while updating a clock on the right margin as well
as responding to window size-changes.
20160305
+ omit a redefinition of "inline" when traces are enabled, since this
does not work with gcc 5.3.x MinGW cross-compiling (cf: 20150912).
20160220
+ modify test/configure script to check for pthread dependency of
ncursest or ncursestw library when building ncurses examples, e.g.,
in case weak symbols are used.
+ modify configure macro for shared-library rules to use -Wl,-rpath
rather than -rpath to work around a bug in scons (FreeBSD #178732,
cf: 20061021).
+ double-width multibyte characters were not counted properly in
winsnstr and wins_nwstr (report/example by Eric Pruitt).
+ update config.guess, config.sub from
http://git.savannah.gnu.org/cgit/config.git
20160213
+ amend fix for _nc_ripoffline from 20091031 to make test/ditto.c work
in threaded configuration.
+ move _nc_tracebits, _tracedump and _tracemouse to curses.priv.h,
since they are not part of the suggested ABI6.
20160206
+ define WIN32_LEAN_AND_MEAN for MinGW port, making builds faster.
+ modify test/ditto.c to allow $XTERM_PROG environment variable to
override "xterm" as the name of the program to run in the threaded
configuration.
20160130
+ improve formatting of man/curs_refresh.3x and man/tset.1 manpages
+ regenerate HTML manpages using newer man2html to eliminate some
unwanted blank lines.
20160123
+ ifdef'd header-file definition of mouse_trafo() with NCURSES_NOMACROS
(report by Corey Minyard).
+ fix some strict compiler-warnings in traces.
20160116
+ tidy up comments about hardcoded 256color palette (report by
Leonardo Brondani Schenkel) -TD
+ add putty-noapp entry, and amend putty entry to use application mode
for better consistency with xterm (report by Leonardo Brondani
Schenkel) -TD
+ modify _nc_viscbuf2() and _tracecchar_t2() to trace wide-characters
as a whole rather than their multibyte equivalents.
+ minor fix in wadd_wchnstr() to ensure that each cell has nonzero
width.
+ move PUTC_INIT calls next to wcrtomb calls, to avoid carry-over of
error status when processing Unicode values which are not mapped.
20160102
+ modify ncurses c/C color test-screens to take advantage of wide
screens, reducing the number of lines used for 88- and 256-colors.
+ minor refinement to check versus ncv to ignore two parameters of
SGR 38 and 48 when those come from color-capabilities.
20151226
+ add check in tic for use of bold, etc., video attributes in the
color capabilities, accounting whether the feature is listed in ncv.
+ add check in tic for conflict between ritm, rmso, rmul versus sgr0.
20151219
+ add a paragraph to curs_getch.3x discussing key naming (discussion
with James Crippen).
+ amend workaround for Solaris vs line-drawing to take the configure
check into account.
+ add a configure check for wcwidth() versus the ncurses line-drawing
characters, to use in special-casing systems such as Solaris.
20151212
+ improve CF_XOPEN_CURSES macro used in test/configure, to define as
needed NCURSES_WIDECHAR for platforms where _XOPEN_SOURCE_EXTENDED
does not work. Also modified the test program to ensure that if
building with ncurses, that the cchar_t type is checked, since that
normally is since 20111030 ifdef'd depending on this test.
+ improve 20121222 workaround for broken acs, letting Solaris "work"
in spite of its misconfigured wcwidth which marks all of the line
drawing characters as double-width.
20151205
+ update form_cursor.3x, form_post.3x, menu_attributes.3x to list
function names in NAME section (patch by Jason McIntyre).
+ minor fixes to manpage NAME/SYNOPSIS sections to consistently use
rule that either all functions which are prototyped in SYNOPSIS are
listed in the NAME section, or the manual-page name is the sole item
listed in the NAME section. The latter is used to reduce clutter,
e.g., for the top-level library manual pages as well as for certain
feature-pages such as SP-funcs and threading (prompted by patches by
Jason McIntyre).
20151128
+ add option to preserve leading whitespace in form fields (patch by
Leon Winter).
+ add missing assignment in lib_getch.c to make notimeout() work
(Debian #805618).
+ add 't' toggle for notimeout() function in test/ncurses.c a/A screens
+ add viewdata terminal description (Alexandre Montaron).
+ fix a case in tic/infocmp for formatting capabilities where a
backslash at the end of a string was mishandled.
+ fix some typos in curs_inopts.3x (Benno Schulenberg).
20151121
+ fix some inconsistencies in the pccon* entries -TD
+ add bold to pccon+sgr+acs and pccon-base (Tati Chevron).
+ add keys f12-f124 to pccon+keys (Tati Chevron).
+ add test/test_sgr.c program to exercise all combinations of sgr.
20151107
+ modify tset's assignment to TERM in its output to reflect the name by
which the terminal description is found, rather than the primary
name. That was an unnecessary part from the initial conversion of
tset from termcap to terminfo. The termcap program in 4.3BSD did
this to avoid using the short 2-character name (report by Rich
Burridge).
+ minor fix to configure script to ensure that rules for resulting.map
are only generated when needed (cf: 20151101).
+ modify configure script to handle the case where tic-library is
renamed, but the --with-debug option is used by itself without
normal or shared libraries (prompted by comment in Debian #803482).
20151101
+ amend change for pkg-config which allows build of pc-files when no
valid pkg-config library directory was configured to suppress the
actual install if it is not overridden to a valid directory at
install time (cf: 20150822).
+ modify editing script which generates resulting.map to work with the
clang configuration on recent FreeBSD, which gives an error on an
empty "local" section.
+ fix a spurious "(Part)" message in test/ncurses.c b/B tests due
to incorrect attribute-masking.
20151024
+ modify MKexpanded.sh to update the expansion of a temporary filename
to "expanded.c", for use in trace statements.
+ modify layout of b/B tests in test/ncurses.c to allow for additional
annotation on the right margin; some terminals with partial support
did not display well.
+ fix typo in curs_attr.3x (patch by Sven Joachim).
+ fix typo in INSTALL (patch by Tomas Cech).
+ improve configure check for setting WILDCARD_SYMS variable; on ppc64
the variable is in the Data section rather than Text (patch by Michel
Normand, Novell #946048).
+ using configure option "--without-fallbacks" incorrectly caused
FALLBACK_LIST to be set to "no" (patch by Tomas Cech).
+ updated minitel entries to fix kel problem with emacs, and add
minitel1b-nb (Alexandre Montaron).
+ reviewed/updated nsterm entry Terminal.app in OSX -TD
+ replace some dead URLs in comments with equivalents from the
Internet Archive -TD
+ update config.guess, config.sub from
http://git.savannah.gnu.org/cgit/config.git
20151017
+ modify ncurses/Makefile.in to sort keys.list in POSIX locale
(Debian #801864, patch by Esa Peuha).
+ remove an early-return from _nc_do_color, which can interfere with
data needed by bkgd when ncurses is configured with extended colors
(patch by Denis Tikhomirov).
> fixes for OS/2 (patches by KO Myung-Hun)
+ use button instead of kbuf[0] in EMX-specific part of lib_mouse.c
+ support building with libtool on OS/2
+ use stdc++ on OS/2 kLIBC
+ clear cf_XOPEN_SOURCE on OS/2
20151010
+ add configure check for openpty to test/configure script, for ditto.
+ minor fixes to test/view.c in investigating Debian #790847.
+ update autoconf patch to 2.52.20150926, incorporates a fix for Cdk.
+ add workaround for breakage of POSIX makefiles by recent binutils
change.
+ improve check for working poll() by using posix_openpt() as a
fallback in case there is no valid terminal on the standard input
(prompted by discussion on bug-ncurses mailing list, Debian #676461).
20150926
+ change makefile rule for removing resulting.map to distclean rather
than clean.
+ add /lib/terminfo to terminfo-dirs in ".deb" test-package.
+ add note on portability of resizeterm and wresize to manual pages.
20150919
+ clarify in resizeterm.3x how KEY_RESIZE is pushed onto the input
stream.
+ clarify in curs_getch.3x that the keypad mode affects ability to
read KEY_MOUSE codes, but does not affect KEY_RESIZE.
+ add overlooked build-fix needed with Cygwin for separate Ada95
configure script, cf: 20150606 (report by Nicolas Boulenguez)
20150912
+ fixes for configure/build using clang on OSX (prompted by report by
William Gallafent).
+ do not redefine "inline" in ncurses_cfg.h; this was originally to
solve a problem with gcc/g++, but is aggravated by clang's misuse
of symbols to pretend it is gcc.
+ add braces to configure script to prevent unwanted add of
"-lstdc++" to the CXXLIBS symbol.
+ improve/update test-program used for checking existence of stdc++
library.
+ if $CXXLIBS is set, the linkage test uses that in addition to $LIBS
20150905
+ add note in curs_addch.3x about line-drawing when it depends upon
UTF-8.
+ add tic -q option for consistency with infocmp, use it to suppress
all comments from the "tic -I" output.
+ modify infocmp -q option to suppress the "Reconstructed from"
header.
+ add infocmp/tic -Q option, which allows one to dump the compiled
form of the terminal entry, in hexadecimal or base64.
20150822
+ sort options in usage message for infocmp, to make it simpler to
see unused letters.
+ update usage message for tic, adding "-0" option.
+ documented differences in ESCDELAY versus AIX's implementation.
+ fix some compiler warnings from ports.
+ modify --with-pkg-config-libdir option to make it possible to install
".pc" files even if pkg-config is not found (adapted from patch by
Joshua Root).
20150815
+ disallow "no" as a possible value for "--with-shlib-version" option,
overlooked in cleanup-changes for 20000708 (report by Tommy Alex).
+ update release notes in INSTALL.
+ regenerate llib-* files to help with review for release notes.
20150810
+ workaround for Debian #65617, which was fixed in mawk's upstream
releases in 2009 (report by Sven Joachim). See
https://invisible-island.net/mawk/CHANGES.html#t20090727
20150808 6.0 release for upload to ftp.gnu.org
20150808
+ build-fix for Ada95 on older platforms without stdint.h
+ build-fix for Solaris, whose /bin/sh and /usr/bin/sed are non-POSIX.
+ update release announcement, summarizing more than 800 changes across
more than 200 snapshots.
+ minor fixes to manpages, etc., to simplify linking from announcement
page.
20150725
+ updated llib-* files.
+ build-fixes for ncurses library "test_progs" rule.
+ use alternate workaround for gcc 5.x feature (adapted from patch by
Mikhail Peselnik).
+ add status line to tmux via xterm+sl (patch by Nicholas Marriott).
+ fixes for st 0.5 from testing with tack -TD
+ review/improve several manual pages to break up wall-of-text:
curs_add_wch.3x, curs_attr.3x, curs_bkgd.3x, curs_bkgrnd.3x,
curs_getcchar.3x, curs_getch.3x, curs_kernel.3x, curs_mouse.3x,
curs_outopts.3x, curs_overlay.3x, curs_pad.3x, curs_termattrs.3x
curs_trace.3x, and curs_window.3x
20150719
+ correct an old logic error for %A and %O in tparm (report by "zreed").
+ improve documentation for signal handlers by adding section in the
curs_initscr.3x page.
+ modify logic in make_keys.c to not assume anything about the size
of strnames and strfnames variables, since those may be functions
in the thread- or broken-linker configurations (problem found by
Coverity).
+ modify test/configure script to check for pthreads configuration,
e.g., ncursestw library.
20150711
+ modify scripts to build/use test-packages for the pthreads
configuration of ncurses6.
+ add references to ttytype and termcap symbols in demo_terminfo.c and
demo_termcap.c to ensure that when building ncursest.map, etc., that
the corresponding names such as _nc_ttytype are added to the list of
versioned symbols (report by Werner Fink)
+ fix regression from 20150704 (report/patch by Werner Fink).
20150704
+ fix a few problems reported by Coverity.
+ fix comparison against "/usr/include" in misc/gen-pkgconfig.in
(report by Daiki Ueno, Debian #790548, cf: 20141213).
20150627
+ modify configure script to remove deprecated ABI 5 symbols when
building ABI 6.
+ add symbols _nc_Default_Field, _nc_Default_Form, _nc_has_mouse to
map-files, but marked as deprecated so that they can easily be
suppressed from ABI 6 builds (Debian #788610).
+ comment-out "screen.xterm" entry, and inherit screen.xterm-256color
from xterm-new (report by Richard Birkett) -TD
+ modify read_entry.c to set the error-return to -1 if no terminal
databases were found, as documented for setupterm.
+ add test_setupterm.c to demonstrate normal/error returns from the
setupterm and restartterm functions.
+ amend cleanup change from 20110813 which removed redundant definition
of ret_error, etc., from tinfo_driver.c, to account for the fact that
it should return a bool rather than int (report/analysis by Johannes
Schindelin).
20150613
+ fix overflow warning for OSX with lib_baudrate.c (cf: 20010630).
+ modify script used to generate map/sym files to mark 5.9.20150530 as
the last "5.9" version, and regenerated the files. That makes the
files not use ".current" for the post-5.9 symbols. This also
corrects the label for _nc_sigprocmask used in when weak symbols are
configured for the ncursest/ncursestw libraries (prompted by
discussion with Sven Joachim).
+ fix typo in NEWS (report by Sven Joachim).
20150606 pre-release
+ make ABI 6 the default by updates to dist.mk and VERSION, with the
intention that the existing ABI 5 should build as before using the
"--with-abi-version=5" option.
+ regenerate ada- and man-html documentation.
+ minor fixes to color- and util-manpages.
+ fix a regression in Ada95/gen/Makefile.in, to handle special case of
Cygwin, which uses the broken-linker feature.
+ amend fix for CF_NCURSES_CONFIG used in test/configure to assume that
ncurses package scripts work when present for cross-compiling, as the
lessor of two evils (cf: 20150530).
+ add check in configure script to disallow conflicting options
"--with-termlib" and "--enable-term-driver".
+ move defaults for "--disable-lp64" and "--with-versioned-syms" into
CF_ABI_DEFAULTS macro.
20150530
+ change private type for Event_Mask in Ada95 binding to work when
mmask_t is set to 32-bits.
+ remove spurious "%;" from st entry (report by Daniel Pitts) -TD
+ add vte-2014, update vte to use that -TD
+ modify tic and infocmp to "move" a diagnostic for tparm strings that
have a syntax error to tic's "-c" option (report by Daniel Pitts).
+ fix two problems with configure script macros (Debian #786436,
cf: 20150425, cf: 20100529).
20150523
+ add 'P' menu item to test/ncurses.c, to show pad in color.
+ improve discussion in curs_color.3x about color rendering (prompted
by comment on Stack Overflow forum):
+ remove screen-bce.mlterm, since mlterm does not do "bce" -TD
+ add several screen.XXX entries to support the respective variations
for 256 colors -TD
+ add putty+fnkeys* building-block entries -TD
+ add smkx/rmkx to capabilities analyzed with infocmp "-i" option.
20150516
+ amend change to ".pc" files to only use the extra loader flags which
may have rpath options (report by Sven Joachim, cf: 20150502).
+ change versioning for dpkg's in test-packages for Ada95 and
ncurses-examples for consistency with Debian, to work with package
updates.
+ regenerate html manpages.
+ clarify handling of carriage return in waddch manual page; it was
discussed only in the portability section (prompted by comment on
Stack Overflow forum):
20150509
+ add test-packages for cross-compiling ncurses-examples using the
MinGW test-packages. These are only the Debian packages; RPM later.
+ cleanup format of debian/copyright files
+ add pc-files to the MinGW cross-compiling test-packages.
+ correct a couple of places in gen-pkgconfig.in to handle renaming of
the tinfo library.
20150502
+ modify the configure script to allow different default values
for ABI 5 versus ABI 6.
+ add wgetch-events to test-packages.
+ add a note on how to build ncurses-examples to test/README.
+ fix a memory leak in delscreen (report by Daniel Kahn Gillmor,
Debian #783486) -TD
+ remove unnecessary ';' from E3 capabilities -TD
+ add tmux entry, derived from screen (patch by Nicholas Marriott).
+ split-out recent change to nsterm-bce as nsterm-build326, and add
nsterm-build342 to reflect changes with successive releases of OSX
(discussion with Leonardo B Schenkel)
+ add xon, ich1, il1 to ibm3161 (patch by Stephen Powell, Debian
#783806)
+ add sample "magic" file, to document ext-putwin.
+ modify gen-pkgconfig.in to add explicit -ltinfo, etc., to the
generated ".pc" file when ld option "--as-needed" is used, or when
ncurses and tinfo are installed without using rpath (prompted by
discussion with Sylvain Bertrand).
+ modify test-package for ncurses6 to omit rpath feature when installed
in /usr.
+ add OSX's "*.dSYM" to clean-rules in makefiles.
+ make extra-suffix work for OSX configuration, e.g., for shared
libraries.
+ modify Ada95/configure script to work with pkg-config
+ move test-package for ncurses6 to /usr, since filename-conflicts have
been eliminated.
+ corrected build rules for Ada95/gen/generate; it does not depend on
the ncurses library aside from headers.
+ reviewed man pages, fixed a few other spelling errors.
+ fix a typo in curs_util.3x (Sven Joachim).
+ use extra-suffix in some overlooked shared library dependencies
found by 20150425 changes for test-packages.
+ update config.guess, config.sub from
http://git.savannah.gnu.org/cgit/config.git
20150425
+ expanded description of tgetstr's area pointer in manual page
(report by Todd M Lewis).
+ in-progress changes to modify test-packages to use ncursesw6 rather
than ncursesw, with updated configure scripts.
+ modify CF_NCURSES_CONFIG in Ada95- and test-configure scripts to
check for ".pc" files via pkg-config, but add a linkage check since
frequently pkg-config configurations are broken.
+ modify misc/gen-pkgconfig.in to include EXTRA_LDFLAGS, e.g., for the
rpath option.
+ add 'dim' capability to screen entry (report by Leonardo B Schenkel)
+ add several key definitions to nsterm-bce to match preconfigured
keys, e.g., with OSX 10.9 and 10.10 (report by Leonardo B Schenkel)
+ fix repeated "extra-suffix" in ncurses-config.in (cf: 20150418).
+ improve term_variables manual page, adding section on the terminfo
long-name symbols which are defined in the term.h header.
+ fix bug in lib_tracebits.c introduced in const-fixes (cf: 20150404).
20150418
+ avoid a blank line in output from tabs program by ending it with
a carriage return as done in FreeBSD (patch by James Clarke).
+ build-fix for the "--enable-ext-putwin" feature when not using
wide characters (report by Werner Fink).
+ modify autoconf macros to use scripting improvement from xterm.
+ add -brtl option to compiler options on AIX 5-7, needed to link
with the shared libraries.
+ add --with-extra-suffix option to help with installing nonconflicting
ncurses6 packages, e.g., avoiding header- and library-conflicts.
NOTE: as a side-effect, this renames
adacurses-config to adacurses5-config and
adacursesw-config to adacursesw5-config
+ modify debian/rules test package to suffix programs with "6".
+ clarify in curs_inopts.3x that window-specific settings do not
inherit into new windows.
20150404
+ improve description of start_color() in the manual.
+ modify several files in ncurses- and progs-directories to allow
const data used in internal tables to be put by the linker into the
readonly text segment.
20150329
+ correct cut/paste error for "--enable-ext-putwin" that made it the
same as "--enable-ext-colors" (report by Roumen Petrov)
20150328
+ add "-f" option to test/savescreen.c to help with testing/debugging
the extended putwin/getwin.
+ add logic for writing/reading combining characters in the extended
putwin/getwin.
+ add "--enable-ext-putwin" configure option to turn on the extended
putwin/getwin.
20150321
+ in-progress changes to provide an extended version of putwin and
getwin which will be capable of reading screen-dumps between the
wide/normal ncurses configurations. These are text files, except
for a magic code at the beginning:
0 string \210\210 Screen-dump (ncurses)
20150307
+ document limitations of getwin in manual page (prompted by discussion
with John S Urban).
+ extend test/savescreen.c to demonstrate that color pair values
and graphic characters can be restored using getwin.
20150228
+ modify win_driver.c to eliminate the constructor, to make it more
usable in an application which may/may not need the console window
(report by Grady Martin).
20150221
+ capture define's related to -D_XOPEN_SOURCE from the configure check
and add those to the *-config and *.pc files, to simplify use for
the wide-character libraries.
+ modify ncurses.spec to accommodate Fedora21's location of pkg-config
directory.
+ correct sense of "--disable-lib-suffixes" configure option (report
by Nicolas Boos, cf: 20140426).
20150214
+ regenerate html manpages using improved man2html from work on xterm.
+ regenerated ".map" and ".sym" files using improved script, accounting
for the "--enable-weak-symbols" configure option (report by Werner
Fink).
20150131
+ regenerated ".map" and ".sym" files using improved script, showing
the combinations of configure options used at each stage.
20150124
+ add configure check to determine if "local: _*;" can be used in the
".map" files to selectively omit symbols beginning with "_". On at
least recent FreeBSD, the wildcard applies to all "_" symbols.
+ remove obsolete/conflicting rule for ncurses.map from
ncurses/Makefile.in (cf: 20130706).
20150117
+ improve description in INSTALL of the --with-versioned-syms option.
+ add combination of --with-hashed-db and --with-ticlib to
configurations for ".map" files (report by Werner Fink).
20150110
+ add a step to generating ".map" files, to declare any remaining
symbols beginning with "_" as local, at the last version node.
+ improve configure checks for pkg-config, addressing a variant found
with FreeBSD ports.
+ modify win_driver.c to provide characters for special keys, like
ansi.sys, when keypad mode is off, rather than returning nothing at
all (discussion with Eli Zaretskii).
+ add "broken_linker" and "hashed-db" configure options to combinations
use for generating the ".map" and ".sym" files.
+ avoid using "ld" directly when creating shared library, to simplify
cross-compiles. Also drop "-Bsharable" option from shared-library
rules for FreeBSD and DragonFly (FreeBSD #196592).
+ fix a memory leak in form library Free_RegularExpression_Type()
(report by Pavel Balaev).
20150103
+ modify_nc_flush() to retry if interrupted (patch by Stian Skjelstad).
+ change map files to make _nc_freeall a global, since it may be used
via the Ada95 binding when checking for memory leaks.
+ improve sed script used in 20141220 to account for wide-, threaded-
variations in ABI 6.
20141227
+ regenerate ".map" files, using step overlooked in 20141213 to use
the same patch-dates across each file to match ncurses.map (report by
Sven Joachim).
20141221
+ fix an incorrect variable assignment in 20141220 changes (report by
Sven Joachim).
20141220
+ updated Ada95/configure with macro changes from 20141213
+ tie configure options --with-abi-version and --with-versioned-syms
together, so that ABI 6 libraries have distinct symbol versions from
the ABI 5 libraries.
+ replace obsolete/nonworking link to man2html with current one,
regenerate html-manpages.
20141213
+ modify misc/gen-pkgconfig.in to add -I option for include-directory
when using both --prefix and --disable-overwrite (report by Misty
De Meo).
+ add configure option --with-pc-suffix to allow minor renaming of
".pc" files and the corresponding library. Use this in the test
package for ncurses6.
+ modify configure script so that if pkg-config is not installed, it
is still possible to install ".pc" files (report by Misty De Meo).
+ updated ".sym" files, removing symbols which are marked as "local"
in the corresponding ".map" files.
+ updated ".map" files to reflect move of comp_captab and comp_hash
from tic-library to tinfo-library in 20090711 (report by Sven
Joachim).
20141206
+ updated ".map" files so that each symbol that may be shared across
the different library configurations has the same label. Some
review is needed to ensure these are really compatible.
+ modify MKlib_gen.sh to work around change in development version of
gcc introduced here:
https://gcc.gnu.org/ml/gcc-patches/2014-06/msg02185.html
https://gcc.gnu.org/ml/gcc-patches/2014-07/msg00236.html
(reports by Marcus Shawcroft, Maohui Lei).
+ improved configure macro CF_SUBDIR_PATH, from lynx changes.
20141129
+ improved ".map" files by generating them with a script that builds
ncurses with several related configurations and merges the results.
A further refinement is planned, to make the tic- and tinfo-library
symbols use the same versions across each of the four configurations
which are represented (reports by Sven Joachim, Werner Fink).
20141115
+ improve description of limits for color values and color pairs in
curs_color.3x (prompted by patch by Tim van der Molen).
+ add VERSION file, using first field in that to record the ABI version
used for configure --with-libtool --disable-libtool-version
+ add configure options for applying the ".map" and ".sym" files to
the ncurses, form, menu and panel libraries.
+ add ".map" and ".sym" files to show exported symbols, e.g., for
symbol-versioning.
20141101
+ improve strict compiler-warnings by adding a cast in TRACE_RETURN
and making a new TRACE_RETURN1 macro for cases where the cast does
not apply.
20141025
+ in-progress changes to integrate the win32 console driver with the
msys2 configuration.
20141018
+ reviewed terminology 0.6.1, add function key definitions. None of
the vt100-compatibility issues were improved -TD
+ improve infocmp conversion of extended capabilities to termcap by
correcting the limit check against parametrized[], as well as filling
in a check if the string happens to have parameters, e.g., "xm"
in recent changes.
+ add check for zero/negative dimensions for resizeterm and resize_term
(report by Mike Gran).
20141011
+ add experimental support for xterm's 1005 mouse mode, to use in a
demonstration of its limitations.
+ add experimental support for "%u" format to terminfo.
+ modify test/ncurses.c to also show position reports in 'a' test.
+ minor formatting fixes to _nc_trace_mmask_t, make this function
exported to help with debugging mouse changes.
+ improve behavior of wheel-mice for xterm protocol, noting that there
are only button-presses for buttons "4" and "5", so there is no need
to wait to combine events into double-clicks (report/analysis by
Greg Field).
+ provide examples xterm-1005 and xterm-1006 terminfo entries -TD
+ implement decoder for xterm SGR 1006 mouse mode.
20140927
+ implement curs_set in win_driver.c
+ implement flash in win_driver.c
+ fix an infinite loop in win_driver.c if the command-window loses
focus.
+ improve the non-buffered mode, i.e., NCURSES_CONSOLE2, of
win_driver.c by temporarily changing the buffer-size to match the
window-size to eliminate the scrollback. Also enforce a minimum
screen-size of 24x80 in the non-buffered mode.
+ modify generated misc/Makefile to suppress install.data from the
dependencies if the --disable-db-install option is used, compensating
for the top-level makefile changes used to add ncurses*-config in the
20140920 changes (report by Steven Honeyman).
20140920
+ add ncurses*-config to bin-directory of sample package-scripts.
+ add check to ensure that getopt is available; this is a problem in
some older cross-compiler environments.
+ expanded on the description of --disable-overwrite in INSTALL
(prompted by reports by Joakim Tjernlund, Thomas Klausner).
See Gentoo #522586 and NetBSD #49200 for examples.
which relates to the clarified guidelines.
+ remove special logic from CF_INCLUDE_DIRS which adds the directory
for the --includedir from the build (report by Joakim Tjernlund).
+ add case for Unixware to CF_XOPEN_SOURCE, from lynx changes.
+ update config.sub from
http://git.savannah.gnu.org/cgit/config.git
20140913
+ add a configure check to ignore some of the plethora of non-working
C++ cross-compilers.
+ build-fixes for Ada95 with gnat 4.9
20140906
+ build-fix and other improvements for port of ncurses-examples to
NetBSD.
+ minor compiler-warning fixes.
20140831
+ modify test/demo_termcap.c and test/demo_terminfo.c to make their
options more directly comparable, and add "-i" option to specify
a terminal description filename to parse for names to lookup.
20140823
+ fix special case where double-width character overwrites a single-
width character in the first column (report by Egmont Koblinger,
cf: 20050813).
20140816
+ fix colors in ncurses 'b' test which did not work after changing
it to put the test-strings in subwindows (cf: 20140705).
+ merge redundant SEE-ALSO sections in form and menu manpages.
20140809
+ modify declarations for user-data pointers in C++ binding to use
reinterpret_cast to facilitate converting typed pointers to void*
in user's application (patch by Adam Jiang).
+ regenerated html manpages.
+ add note regarding cause and effect for TERM in ncurses manpage,
having noted clueless verbiage in Terminal.app's "help" file
which reverses cause/effect.
+ remove special fallback definition for NCURSES_ATTR_T, since macros
have resolved type-mismatches using casts (cf: 970412).
+ fixes for win_driver.c:
+ handle repainting on endwin/refresh combination.
+ implement beep().
+ minor cleanup.
20140802
+ minor portability fixes for MinGW:
+ ensure WINVER is defined in makefiles rather than using headers
+ add check for gnatprep "-T" option
+ work around bug introduced by gcc 4.8.1 in MinGW which breaks
"trace" feature:
http://stackoverflow.com/questions/20877689/gcc-4-8-1-minggw-d-option-does-not-work-as-usual
+ fix most compiler warnings for Cygwin ncurses-examples.
+ restore "redundant" -I options in test/Makefile.in, since they are
typically needed when building the derived ncurses-examples package
(cf: 20140726).
20140726
+ eliminate some redundant -I options used for building libraries, and
ensure that ${srcdir} is added to the include-options (prompted by
discussion with Paul Gilmartin).
+ modify configure script to work with Minix3.2
+ add form library extension O_DYNAMIC_JUSTIFY option which can be
used to override the different treatment of justification for static
versus dynamic fields (adapted from patch by Leon Winter).
+ add a null pointer check in test/edit_field.c (report/analysis by
Leon Winter, cf: 20130608).
20140719
+ make workarounds for compiling test-programs with NetBSD curses.
+ improve configure macro CF_ADD_LIBS, to eliminate repeated -l/-L
options, from xterm changes.
20140712
+ correct Charable() macro check for A_ALTCHARSET in wide-characters.
+ build-fix for position-debug code in tty_update.c, to work with or
without sp-funcs.
20140705
+ add w/W toggle to ncurses.c 'B' test, to demonstrate permutation of
video-attributes and colors with double-width character strings.
20140629
+ correct check in win_driver.c for saving screen contents, e.g., when
NCURSES_CONSOLE2 is set (cf: 20140503).
+ reorganize b/B menu items in ncurses.c, putting the test-strings into
subwindows. This is needed for a planned change to use Unicode
fullwidth characters in the test-screens.
+ correct update to form status for _NEWTOP, broken by fixes for
compiler warnings (patch by Leon Winter, cf: 20120616).
20140621
+ change shared-library suffix for AIX 5 and 6 to ".so", avoiding
conflict with the static library (report by Ben Lentz).
+ document RPATH_LIST in INSTALLATION file, as part of workarounds for
upgrading an ncurses library using the "--with-shared" option.
+ modify test/ncurses.c c/C tests to cycle through subsets of the
total number of colors, to better illustrate 8/16/88/256-colors by
providing directly comparable screens.
+ add test/dots_curses.c, for comparison with the low-level examples.
20140614
+ fix dereference before null check found by Coverity in tic.c
(cf: 20140524).
+ fix sign-extension bug in read_entry.c which prevented "toe" from
reading empty "screen+italics" entry.
+ modify sgr for screen.xterm-new to support dim capability -TD
+ add dim capability to nsterm+7 -TD
+ cancel dim capability for iterm -TD
+ add dim, invis capabilities to vte-2012 -TD
+ add sitm/ritm to konsole-base and mlterm3 -TD
20140609
> fix regression in screen terminfo entries (reports by Christian
Ebert, Gabriele Balducci) -TD
+ revert the change to screen; see notes for why this did not work -TD
+ cancel sitm/ritm for entries which extend "screen", to work around
screen's hardcoded behavior for SGR 3 -TD
20140607
+ separate masking for sgr in vidputs from sitm/ritm, which do not
overlap with sgr functionality.
+ remove unneeded -i option from adacurses-config; put -a in the -I
option for consistency (patch by Pascal Pignard).
+ update xterm-new terminfo entry to xterm patch #305 -TD
+ change format of test-scripts for Debian Ada95 and ncurses-examples
packages to quilted to work around Debian #700177 (cf: 20130907).
+ build fix for form_driver_w.c as part of ncurses-examples package for
older ncurses than 20131207.
+ add Hello World example to adacurses-config manpage.
+ remove unused --enable-pc-files option from Ada95/configure.
+ add --disable-gnat-projects option for testing.
+ revert changes to Ada95 project-files configuration (cf: 20140524).
+ corrected usage message in adacurses-config.
20140524
+ fix typo in ncurses manpage for the NCURSES_NO_MAGIC_COOKIE
environment variable.
+ improve discussion of input-echoing in curs_getch.3x
+ clarify discussion in curs_addch.3x of wrapping.
+ modify parametrized.h to make fln non-padded.
+ correct several entries which had termcap-style padding used in
terminfo: adm21, aj510, alto-h19, att605-pc, x820 -TD
+ correct syntax for padding in some entries: dg211, h19 -TD
+ correct ti924-8 which had confused padding versus octal escapes -TD
+ correct padding in sbi entry -TD
+ fix an old bug in the termcap emulation; "%i" was ignored in tparm()
because the parameters to be incremented were already on the internal
stack (report by Corinna Vinschen).
+ modify tic's "-c" option to take into account the "-C" option to
activate additional checks which compare the results from running
tparm() on the terminfo expressions versus the translated termcap
expressions.
+ modify tic to allow it to read from FIFOs (report by Matthieu Fronton,
cf: 20120324).
> patches by Nicolas Boulenguez:
+ explicit dereferences to suppress some style warnings.
+ when c_varargs_to_ada.c includes its header, use double quotes
instead of <>.
+ samples/ncurses2-util.adb: removed unused with clause. The warning
was removed by an obsolete pragma.
+ replaced Unreferenced pragmas with Warnings (Off). The latter,
available with older GNATs, needs no configure test. This also
replaces 3 untested Unreferenced pragmas.
+ simplified To_C usage in trace handling. Using two parameters allows
some basic formatting, and avoids a warning about security with some
compiler flags.
+ for generated Ada sources, replace many snippets with one pure
package.
+ removed C_Chtype and its conversions.
+ removed C_AttrType and its conversions.
+ removed conversions between int, Item_Option_Set, Menu_Option_Set.
+ removed int, Field_Option_Set, Item_Option_Set conversions.
+ removed C_TraceType, Attribute_Option_Set conversions.
+ replaced C.int with direct use of Eti_Error, now enumerated. As it
was used in a case statement, values were tested by the Ada compiler
to be consecutive anyway.
+ src/Makefile.in: remove duplicate stanza
+ only consider using a project for shared libraries.
+ style. Silent gnat-4.9 warning about misplaced "then".
+ generate shared library project to honor ADAFLAGS, LDFLAGS.
20140510
+ cleanup recently introduced compiler warnings for MingW port.
+ workaround for ${MAKEFLAGS} configure check versus GNU make 4.0,
which introduces more than one gratuitous incompatibility.
20140503
+ add vt520ansi terminfo entry (patch by Mike Gran)
+ further improve MinGW support for the scenario where there is an
ANSI-escapes handler such as ansicon running in the console window
(patch by Juergen Pfeifer).
20140426
+ add --disable-lib-suffixes option (adapted from patch by Juergen
Pfeifer).
+ merge some changes from Juergen Pfeifer's work with MSYS2, to
simplify later merging:
+ use NC_ISATTY() macro for isatty() in library
+ add _nc_mingw_isatty() and related functions to windows-driver
+ rename terminal driver entrypoints to simplify grep's
+ remove a check in the sp-funcs flavor of newterm() which allowed only
the first call to newterm() to succeed (report by Thomas Beierlein,
cf: 20090927).
20140419
+ update config.guess, config.sub from
http://git.savannah.gnu.org/cgit/config.git
20140412
+ modify configure script:
+ drop the -no-gcc option from Intel compiler, from lynx changes.
+ extend the --with-hashed-db configure option to simplify building
with different versions of Berkeley database using FreeBSD ports.
+ improve initialization for MinGW port (Juergen Pfeifer):
+ enforce Windows-style path-separator if cross-compiling,
+ add a driver-name method to each of the drivers,
+ allow the Windows driver name to match "unknown", ignoring case,
+ lengthen the built-in name for the Windows console driver to
"#win32console", and
+ move the comparison of driver-names allowing abbreviation, e.g.,
to "#win32con" into the Windows console driver.
20140329
+ add check in tic for mismatch between ccc and initp/initc
+ cancel ccc in putty-256color and konsole-256color for consistency
with the cancelled initc capability (patch by Sven Zuhlsdorf).
+ add xterm+256setaf building block for various terminals which only
get the 256-color feature half-implemented -TD
+ updated "st" entry (leaving the 0.1.1 version as "simpleterm") to
0.4.1 -TD
20140323
+ fix typo in "mlterm" entry (report by Gabriele Balducci) -TD
20140322
+ use types from <stdint.h> in sample build-scripts for chtype, etc.
+ modify configure script and curses.h.in to allow the types specified
using --with-chtype and related options to be defined in <stdint.h>
+ add terminology entry -TD
+ add mlterm3 entry, use that as "mlterm" -TD
+ inherit mlterm-256color from mlterm -TD
20140315
+ modify _nc_New_TopRow_and_CurrentItem() to ensure that the menu's
top-row is adjusted as needed to ensure that the current item is
on the screen (patch by Johann Klammer).
+ add wgetdelay() to retrieve _delay member of WINDOW if it happens to
be opaque, e.g., in the pthread configuration (prompted by patch by
Soren Brinkmann).
20140308
+ modify ifdef in read_entry.c to handle the case where
NCURSES_USE_DATABASE is not defined (patch by Xin Li).
+ add cast in form_driver_w() to fix ARM build (patch by Xin Li).
+ add logic to win_driver.c to save/restore screen contents when not
allocating a console-buffer (cf: 20140215).
20140301
+ clarify error-returns from newwin (report by Ruslan Nabioullin).
20140222
+ fix some compiler warnings in win_driver.c
+ updated notes for wsvt25 based on tack and vttest -TD
+ add teken entry to show actual properties of FreeBSD's "xterm"
console -TD
20140215
+ in-progress changes to win_driver.c to implement output without
allocating a console-buffer. This uses a pre-existing environment
variable NCGDB used by Juergen Pfeifer for debugging (prompted by
discussion with Erwin Waterlander regarding Console2, which hangs
when reading in an allocated console-buffer).
+ add -t option to gdc.c, and modify to accept "S" to step through the
scrolling-stages.
+ regenerate NCURSES-Programming-HOWTO.html to fix some of the broken
html emitted by docbook.
20140209
+ modify CF_XOPEN_SOURCE macro to omit followup check to determine if
_XOPEN_SOURCE can/should be defined. g++ 4.7.2 built on Solaris 10
has some header breakage due to its own predefinition of this symbol
(report by Jean-Pierre Flori, Sage #15796).
20140201
+ add/use symbol NCURSES_PAIRS_T like NCURSES_COLOR_T, to illustrate
which "short" types are for color pairs and which are color values.
+ fix build for s390x, by correcting field bit offsets in generated
representation clauses when int=32 long=64 and endian=big, or at
least on s390x (patch by Nicolas Boulenguez).
+ minor cleanup change to test/form_driver_w.c (patch by Gaute Hope).
20140125
+ remove unnecessary ifdef's in Ada95/gen/gen.c, which reportedly do
not work as is with gcc 4.8 due to fixes using chtype cast made for
new compiler warnings by gcc 4.8 in 20130824 (Debian #735753, patch
by Nicolas Boulenguez).
20140118
+ apply includesubdir variable which was introduced in 20130805 to
gen-pkgconfig.in (Debian #735782).
20131221
+ further improved man2html, used this to fix broken links in html
manpages. See
ftp://ftp.invisible-island.net/ncurses/patches/man2html
20131214
+ modify configure-script/ifdef's to allow OLD_TTY feature to be
suppressed if the type of ospeed is configured using the option
--with-ospeed to not be a short. By default, it is a short for
termcap-compatibility (adapted from suggestion by Christian
Weisgerber).
+ correct a typo in _nc_baudrate() (patch by Christian Weisgerber,
cf: 20061230).
+ fix a few -Wlogical-op warnings.
+ updated llib-l* files.
20131207
+ add form_driver_w() entrypoint to wide-character forms library, as
well as test program form_driver_w (adapted from patch by Gaute
Hope).
20131123
+ minor fix for CF_GCC_WARNINGS to special-case options which are not
recognized by clang.
20131116
+ add special case to configure script to move _XOPEN_SOURCE_EXTENDED
definition from CPPFLAGS to CFLAGS if it happens to be needed for
Solaris, because g++ errors with that definition (report by
Jean-Pierre Flori, Sage #15268).
+ correct logic in infocmp's -i option which was intended to ignore
strings which correspond to function-keys as candidates for piecing
together initialization- or reset-strings. The problem dates to
1.9.7a, but was overlooked until changes in -Wlogical-op warnings for
gcc 4.8 (report by David Binderman).
+ updated CF_GCC_WARNINGS to documented options for gcc 4.9.0, moving
checks for -Wextra and -Wdeclaration-after-statement into the macro,
and adding checks for -Wignored-qualifiers, -Wlogical-op and
-Wvarargs
+ updated CF_CURSES_UNCTRL_H and CF_SHARED_OPTS macros from ongoing
work on cdk.
+ update config.sub from
http://git.savannah.gnu.org/cgit/config.git
20131110
+ minor cleanup of terminfo.tail
20131102
+ use TS extension to describe xterm's title-escapes -TD
+ modify terminator and nsterm-s to use xterm+sl-twm building block -TD
+ update hurd.ti, add xenl to reflect 2011-03-06 change in
http://git.savannah.gnu.org/cgit/hurd/hurd.git/log/console/display.c
(Debian #727119).
+ simplify pfkey expression in ansi.sys -TD
20131027
+ correct/simplify ifdef's for cur_term versus broken-linker and
reentrant options (report by Jean-Pierre Flori, cf: 20090530).
+ modify release/version combinations in test build-scripts to make
them more consistent with other packages.
20131019
+ add nc_mingw.h to installed headers for MinGW port; needed for
compiling ncurses-examples.
+ add rpm-script for testing cross-compile of ncurses-examples.
20131014
+ fix new typo in CF_ADA_INCLUDE_DIRS macro (report by Roumen Petrov).
20131012
+ fix a few compiler warnings in progs and test.
+ minor fix to package/debian-mingw/rules, do not strip dll's.
+ minor fixes to configure script for empty $prefix, e.g., when doing
cross-compiles to MinGW.
+ add script for building test-packages of binaries cross-compiled to
MinGW using NSIS.
20131005
+ minor fixes for ncurses-example package and makefile.
+ add scripts for test-builds of cross-compiler packages for ncurses6
to MinGW.
20130928
+ some build-fixes for ncurses-examples with NetBSD-6.0 curses, though
it lacks some common functions such as use_env() which is not yet
addressed.
+ build-fix and some compiler warning fixes for ncurses-examples with
OpenBSD 5.3
+ fix a possible null-pointer reference in a trace message from newterm.
+ quiet a few warnings from NetBSD 6.0 namespace pollution by
nonstandard popcount() function in standard strings.h header.
+ ignore g++ 4.2.1 warnings for "-Weffc++" in c++/cursesmain.cc
+ fix a few overlooked places for --enable-string-hacks option.
20130921
+ fix typo in curs_attr.3x (patch by Sven Joachim, cf: 20130831).
+ build-fix for --with-shared option for DragonFly and FreeBSD (report
by Rong-En Fan, cf: 20130727).
20130907
+ build-fixes for MSYS for two test-programs (patches by Ray Donnelly,
Alexey Pavlov).
+ revert change to two of the dpkg format files, to work with dpkg
before/after Debian #700177.
+ fix gcc -Wconversion warning in wattr_get() macro.
+ add msys and msysdll to known host/configuration types (patch by
Alexey Pavlov).
+ modify CF_RPATH_HACK configure macro to not rely upon "-u" option
of sort, improving portability.
+ minor improvements for test-programs from reviewing Solaris port.
+ update config.guess, config.sub from
http://git.savannah.gnu.org/cgit/config.git
20130831
+ modify test/ncurses.c b/B tests to display lines only for the
attributes which a given terminal supports, to make room for an
italics test.
+ completed ncv table in terminfo.tail; it did not list the wide
character codes listed in X/Open Curses issue 7.
+ add A_ITALIC extension (prompted by discussion with Egmont Koblinger).
20130824
+ fix some gcc 4.8 -Wconversion warnings.
+ change format of dpkg test-scripts to quilted to work around bug
introduced by Debian #700177.
+ discard cached keyname() values if meta() is changed after a value
was cached using (report by Kurban Mallachiev).
20130816
+ add checks in tic to warn about terminals which lack cursor
addressing, capabilities or having those, are marked as hard_copy or
generic_type.
+ use --without-progs in mingw-ncurses rpm.
+ split out _nc_init_termtype() from alloc_entry.c to use in MinGW
port when tic and other programs are not needed.
20130805
+ minor fixes to the --disable-overwrite logic, to ensure that the
configured $(includedir) is not cancelled by the mingwxx-filesystem
rpm macros.
+ add --disable-db-install configure option, to simplify building
cross-compile support packages.
+ add mingw-ncurses.spec file, for testing cross-compiles.
20130727
+ improve configure macros from ongoing work on cdk, dialog, xterm:
+ CF_ADD_LIB_AFTER - fix a problem with -Wl options
+ CF_RPATH_HACK - add missing result-message
+ CF_SHARED_OPTS - modify to use $rel_builddir in cygwin and mingw
dll symbols (which can be overridden) rather than explicit "../".
+ CF_SHARED_OPTS - modify NetBSD and DragonFly symbols to use ${CC}
rather than ${LD} to improve rpath support.
+ CF_SHARED_OPTS - add a symbol to denote the temporary files that
are created by the macro, to simplify clean-rules.
+ CF_X_ATHENA - trim extra libraries to work with -Wl,--as-needed
+ fix a regression in hashed-database support for NetBSD, which uses
the key-size differently from other implementations (cf: 20121229).
20130720
+ further improvements for setupterm manpage, clarifying the
initialization of cur_term.
20130713
+ improve manpages for initscr and setupterm.
+ minor compiler-warning fixes
20130706
+ add fallback defs for <inttypes.h> and <stdint.h> (cf: 20120225).
+ add check for size of wchar_t, use that to suppress a chunk of
wcwidth.h in MinGW port.
+ quiet linker warnings for MinGW cross-compile with dll's using the
--enable-auto-import flag.
+ add ncurses.map rule to ncurses/Makefile to help diagnose symbol
table issues.
20130622
+ modify the clear program to take into account the E3 extended
capability to clear the terminal's scrollback buffer (patch by
Miroslav Lichvar, Redhat #815790).
+ clarify in resizeterm manpage that LINES and COLS are updated.
+ updated ansi example in terminfo.tail, correct misordered example
of sgr.
+ fix other doclifter warnings for manpages
+ remove unnecessary ".ta" in terminfo.tail, add missing ".fi"
(patch by Eric Raymond).
20130615
+ minor changes to some configure macros to make them more reusable.
+ fixes for tabs program (prompted by report by Nick Andrik).
+ corrected logic in command-line parsing of -a and -c predefined
tab-lists options.
+ allow "-0" and "-8" options to be combined with others, e.g.,"-0d".
+ make warning messages more consistent with the other utilities by
not printing the full pathname of the program.
+ add -V option for consistency with other utilities.
+ fix off-by-one in columns for tabs program when processing an option
such as "-5" (patch by Nick Andrik).
20130608
+ add to test/demo_forms.c examples of using the menu-hooks as well
as showing how the menu item user-data can be used to pass a callback
function pointer.
+ add test/dots_termcap.c
+ remove setupterm call from test/demo_termcap.c
+ build-fix if --disable-ext-funcs configure option is used.
+ modified test/edit_field.c and test/demo_forms.c to move the lengths
into a user-data structure, keeping the original string for later
expansion to free-format input/out demo.
+ modified test/demo_forms.c to load data from file.
+ added note to clarify Terminal.app's non-emulation of the various
terminal types listed in the preferences dialog -TD
+ fix regression in error-reporting in lib_setup.c (Debian #711134,
cf: 20121117).
+ build-fix for a case where --enable-broken_linker and
--enable-reentrant options are combined (report by George R Goffe).
20130525
+ modify mvcur() to distinguish between internal use by the ncurses
library, and external callers, preventing it from reading the content
of the screen which is only nonblank when curses calls have updated
it. This makes test/dots_mvcur.c avoid painting colored cells in
the left margin of the display.
+ minor fix to test/dots_mvcur.c
+ move configured symbols USE_DATABASE and USE_TERMCAP to term.h as
NCURSES_USE_DATABASE and NCURSES_USE_TERMCAP to allow consistent
use of these symbols in term_entry.h
20130518
+ corrected ifdefs in test/testcurs.c to allow comparison of mouse
interface versus pdcurses (cf: 20130316).
+ add pow() to configure-check for math library, needed since
20121208 for test/hanoi (Debian #708056).
+ regenerated html manpages.
+ update doctype used for html documentation.
20130511
+ move nsterm-related entries out of "obsolete" section to more
plausible "ansi consoles" -TD
+ additional cleanup of table-of-contents by reordering -TD
+ revise fix for check for 8-bit value in _nc_insert_ch(); prior fix
prevented inserts when video attributes were attached to the data
(cf: 20121215) (Redhat #959534).
20130504
+ fixes for issues found by Coverity:
+ correct FNKEY() macro in progs/dump_entry.c, allowing kf11-kf63 to
display when infocmp's -R option is used for HP or AIX subsets.
+ fix dead-code issue with test/movewindow.c
+ improve limited-checking in _nc_read_termtype().
20130427
+ fix clang 3.2 warning in progs/dump_entry.c
+ drop AC_TYPE_SIGNAL check; ncurses relies on c89 and later.
20130413
+ add MinGW to cases where ncurses installs by default into /usr
(prompted by discussion with Daniel Silva Ferreira).
+ add -D option to infocmp's usage-message (patch by Miroslav Lichvar).
+ add a missing 'int' type for main function in configure check for
type of bool variable, to work with clang 3.2 (report by Dmitri
Gribenko).
+ improve configure check for static_cast, to work with clang 3.2
(report by Dmitri Gribenko).
+ re-order rule for demo.o and macros defining header dependencies in
c++/Makefile.in to accommodate gmake (report by Dmitri Gribenko).
20130406
+ improve parameter checking in copywin().
+ modify configure script to work around OS X's "libtool" program, to
choose glibtool instead. At the same time, chance the autoconf macro
to look for a "tool" rather than a "prog", to help with potential use
in cross-compiling.
+ separate the rpath usage for c++ library from demo program
(Redhat #911540)
+ update/correct header-dependencies in c++ makefile (report by Werner
Fink).
+ add --with-cxx-shared to dpkg-script, as done for rpm-script.
20130324
+ build-fix for libtool configuration (reports by Daniel Silva Ferreira
and Roumen Petrov).
20130323
+ build-fix for OS X, to handle changes for --with-cxx-shared feature
(report by Christian Ebert).
+ change initialization for vt220, similar entries for consistency
with cursor-key strings (NetBSD #47674) -TD
+ further improvements to linux-16color (Benjamin Sittler)
20130316
+ additional fix for tic.c, to allocate missing buffer space.
+ eliminate configure-script warnings for gen-pkgconfig.in
+ correct typo in sgr string for sun-color,
add bold for consistency with sgr,
change smso for consistency with sgr -TD
+ correct typo in sgr string for terminator -TD
+ add blink to the attributes masked by ncv in linux-16color (report
by Benjamin Sittler)
+ improve warning message from post-load checking for missing "%?"
operator by tic/infocmp by showing the entry name and capability.
+ minor formatting improvement to tic/infocmp -f option to ensure
line split after "%;".
+ amend scripting for --with-cxx-shared option to handle the debug
library "libncurses++_g.a" (report by Sven Joachim).
20130309
+ amend change to toe.c for reading from /dev/zero, to ensure that
there is a buffer for the temporary filename (cf: 20120324).
+ regenerated html manpages.
+ fix typo in terminfo.head (report by Sven Joachim, cf: 20130302).
+ updated some autoconf macros:
+ CF_ACVERSION_CHECK, from byacc 1.9 20130304
+ CF_INTEL_COMPILER, CF_XOPEN_SOURCE from luit 2.0-20130217
+ add configure option --with-cxx-shared to permit building
libncurses++ as a shared library when using g++, e.g., the same
limitations as libtool but better integrated with the usual build
configuration (Redhat #911540).
+ modify MKkey_defs.sh to filter out build-path which was unnecessarily
shown in curses.h (Debian #689131).
20130302
+ add section to terminfo manpage discussing user-defined capabilities.
+ update manpage description of NCURSES_NO_SETBUF, explaining why it
is obsolete.
+ add a check in waddch_nosync() to ensure that tab characters are
treated as control characters; some broken locales claim they are
printable.
+ add some traces to the Windows console driver.
+ initialize a temporary array in _nc_mbtowc, needed for some cases
of raw input in MinGW port.
20130218
+ correct ifdef on change to lib_twait.c (report by Werner Fink).
+ update config.guess, config.sub
20130216
+ modify test/testcurs.c to work with mouse for ncurses as it does for
pdcurses.
+ modify test/knight.c to work with mouse for pdcurses as it does for
ncurses.
+ modify internal recursion in wgetch() which handles cooked mode to
check if the call to wgetnstr() returned an error. This can happen
when both nocbreak() and nodelay() are set, for instance (report by
Nils Christopher Brause) (cf: 960418).
+ fixes for issues found by Coverity:
+ add a check for valid position in ClearToEOS()
+ fix in lib_twait.c when --enable-wgetch-events is used, pointer
use after free.
+ improve a limit-check in make_hash.c
+ fix a memory leak in hashed_db.c
20130209
+ modify test/configure script to make it simpler to override names
of curses-related libraries, to help with linking with pdcurses in
MinGW environment.
+ if the --with-terminfo-dirs configure option is not used, there is
no corresponding compiled-in value for that. Fill in "no default
value" for that part of the manpage substitution.
20130202
+ correct initialization in knight.c which let it occasionally make
an incorrect move (cf: 20001028).
+ improve documentation of the terminfo/termcap search path.
20130126
+ further fixes to mvcur to pass callback function (cf: 20130112),
needed to make test/dots_mvcur work.
+ reduce calls to SetConsoleActiveScreenBuffer in win_driver.c, to
help reduce flicker.
+ modify configure script to omit "+b" from linker options for very
old HP-UX systems (report by Dennis Grevenstein)
+ add HP-UX workaround for missing EILSEQ on old HP-UX systems (patch
by Dennis Grevenstein).
+ restore memmove/strdup support for antique systems (request by
Dennis Grevenstein).
+ change %l behavior in tparm to push the string length onto the stack
rather than saving the formatted length into the output buffer
(report by Roy Marples, cf: 980620).
20130119
+ fixes for issues found by Coverity:
+ fix memory leak in safe_sprintf.c
+ add check for return-value in tty_update.c
+ correct initialization for -s option in test/view.c
+ add check for numeric overflow in lib_instr.c
+ improve error-checking in copywin
+ add advice in infocmp manpage for termcap users (Debian #698469).
+ add "-y" option to test/demo_termcap and test/demo_terminfo to
demonstrate behavior with/without extended capabilities.
+ updated termcap manpage to document legacy termcap behavior for
matching capability names.
+ modify name-comparison for tgetstr, etc., to accommodate legacy
applications as well as to improve compatibility with BSD 4.2
termcap implementations (Debian #698299) (cf: 980725).
20130112
+ correct prototype in manpage for vid_puts.
+ drop ncurses/tty/tty_display.h, ncurses/tty/tty_input.h, since they
are unused in the current driver model.
+ modify mvcur to use stdout except when called within the ncurses
library.
+ modify vidattr and vid_attr to use stdout as documented in manpage.
+ amend changes made to buffering in 20120825 so that the low-level
putp() call uses stdout rather than ncurses' internal buffering.
The putp_sp() call does the same, for consistency (Redhat #892674).
20130105
+ add "-s" option to test/view.c to allow it to start in single-step
mode, reducing size of trace files when it is used for debugging
MinGW changes.
+ revert part of 20121222 change to tinfo_driver.c
+ add experimental logic in win_driver.c to improve optimization of
screen updates. This does not yet work with double-width characters,
so it is ifdef'd out for the moment (prompted by report by Erwin
Waterlander regarding screen flicker).
20121229
+ fix Coverity warnings regarding copying into fixed-size buffers.
+ add throw-declarations in the c++ binding per Coverity warning.
+ minor changes to new-items for consistent reference to bug-report
numbers.
20121222
+ add *.dSYM directories to clean-rule in ncurses directory makefile,
for Mac OS builds.
+ add a configure check for gcc option -no-cpp-precomp, which is not
available in all Mac OS X configurations (report by Andras Salamon,
cf: 20011208).
+ improve 20021221 workaround for broken acs, handling a case where
that ACS_xxx character is not in the acsc string but there is a known
wide-character which can be used.
20121215
+ fix several warnings from clang 3.1 --analyze, includes correcting
a null-pointer check in _nc_mvcur_resume.
+ correct display of double-width characters with MinGW port (report
by Erwin Waterlander).
+ replace MinGW's wcrtomb(), fixing a problem with _nc_viscbuf
> fixes based on Coverity report:
+ correct coloring in test/bs.c
+ correct check for 8-bit value in _nc_insert_ch().
+ remove dead code in progs/tset.c, test/linedata.h
+ add null-pointer checks in lib_tracemse.c, panel.priv.h, and some
test-programs.
20121208
+ modify test/knight.c to show the number of choices possible for
each position in automove option, e.g., to allow user to follow
Warnsdorff's rule to solve the puzzle.
+ modify test/hanoi.c to show the minimum number of moves possible for
the given number of tiles (prompted by patch by Lucas Gioia).
> fixes based on Coverity report:
+ remove a few redundant checks.
+ correct logic in test/bs.c, when randomly placing a specific type of
ship.
+ check return value from remove/unlink in tic.
+ check return value from sscanf in test/ncurses.c
+ fix a null dereference in c++/cursesw.cc
+ fix two instances of uninitialized variables when configuring for the
terminal driver.
+ correct scope of variable used in SetSafeOutcWrapper macro.
+ set umask when calling mkstemp in tic.
+ initialize wbkgrndset() temporary variable when extended-colors are
used.
20121201
+ also replace MinGW's wctomb(), fixing a problem with setcchar().
+ modify test/view.c to load UTF-8 when built with MinGW by using
regular win32 API because the MinGW functions mblen() and mbtowc()
do not work.
20121124
+ correct order of color initialization versus display in some of the
test-programs, e.g., test_addstr.c
> fixes based on Coverity report:
+ delete windows on exit from some of the test-programs.
20121117
> fixes based on Coverity report:
+ add missing braces around FreeAndNull in two places.
+ various fixes in test/ncurses.c
+ improve limit-checks in tinfo/make_hash.c, tinfo/read_entry.c
+ correct malloc size in progs/infocmp.c
+ guard against negative array indices in test/knight.c
+ fix off-by-one limit check in test/color_name.h
+ add null-pointer check in progs/tabs.c, test/bs.c, test/demo_forms.c,
test/inchs.c
+ fix memory-leak in tinfo/lib_setup.c, progs/toe.c,
test/clip_printw.c, test/demo_menus.c
+ delete unused windows in test/chgat.c, test/clip_printw.c,
test/insdelln.c, test/newdemo.c on error-return.
20121110
+ modify configure macro CF_INCLUDE_DIRS to put $CPPFLAGS after the
local -I include options in case someone has set conflicting -I
options in $CPPFLAGS (prompted by patch for ncurses/Makefile.in by
Vassili Courzakis).
+ modify the ncurses*-config scripts to eliminate relative paths from
the RPATH_LIST variable, e.g., "../lib" as used in installing shared
libraries or executables.
20121102
+ realign these related pages:
curs_add_wchstr.3x
curs_addchstr.3x
curs_addstr.3x
curs_addwstr.3x
and fix a long-ago error in curs_addstr.3x which said that a -1
length parameter would only write as much as fit onto one line
(report by Reuben Thomas).
+ remove obsolete fallback _nc_memmove() for memmove()/bcopy().
+ remove obsolete fallback _nc_strdup() for strdup().
+ cancel any debug-rpm in package/ncurses.spec
+ reviewed vte-2012, reverted most of the change since it was incorrect
based on testing with tack -TD
+ un-cancel the initc in vte-256color, since this was implemented
starting with version 0.20 in 2009 -TD
20121026
+ improve malloc/realloc checking (prompted by discussion in Redhat
#866989).
+ add ncurses test-program as "ncurses6" to the rpm- and dpkg-scripts.
+ updated configure macros CF_GCC_VERSION and CF_WITH_PATHLIST. The
first corrects pattern used for Mac OS X's customization of gcc.
20121017
+ fix change to _nc_scroll_optimize(), which incorrectly freed memory
(Redhat #866989).
20121013
+ add vte-2012, gnome-2012, making these the defaults for vte/gnome
(patch by Christian Persch).
20121006
+ improve CF_GCC_VERSION to work around Debian's customization of gcc
--version message.
+ improve configure macros as done in byacc:
+ drop 2.13 compatibility; use 2.52.xxxx version only since EMX port
has used that for a while.
+ add 3rd parameter to AC_DEFINE's to allow autoheader to run, i.e.,
for experimental use.
+ remove unused configure macros.
+ modify configure script and makefiles to quiet new autoconf warning
for LIBS_TO_MAKE variable.
+ modify configure script to show $PATH_SEPARATOR variable.
+ update config.guess, config.sub
20120922
+ modify setupterm to set its copy of TERM to "unknown" if configured
for the terminal driver and TERM was null or empty.
+ modify treatment of TERM variable for MinGW port to allow explicit
use of the windows console driver by checking if $TERM is set to
"#win32con" or an abbreviation of that.
+ undo recent change to fallback definition of vsscanf() to build with
older Solaris compilers (cf: 20120728).
20120908
+ add test-screens to test/ncurses to show 256-characters at a time,
to help with MinGW port.
20120903
+ simplify varargs logic in lib_printw.c; va_copy is no longer needed
there.
+ modifications for MinGW port to make wide-character display usable.
20120902
+ regenerate configure script (report by Sven Joachim, cf: 20120901).
20120901
+ add a null-pointer check in _nc_flush (cf: 20120825).
+ fix a case in _nc_scroll_optimize() where the _oldnums_list array
might not be allocated.
+ improve comparisons in configure.in for unset shell variables.
20120826
+ increase size of ncurses' output-buffer, in case of very small
initial screen-sizes.
+ fix evaluation of TERMINFO and TERMINFO_DIRS default values as needed
after changes to use --datarootdir (reports by Gabriele Balducci,
Roumen Petrov).
20120825
+ change output buffering scheme, using buffer maintained by ncurses
rather than stdio, to avoid problems with SIGTSTP handling (report
by Brian Bloniarz).
20120811
+ update autoconf patch to 2.52.20120811, adding --datarootdir
(prompted by discussion with Erwin Waterlander).
+ improve description of --enable-reentrant option in README and the
INSTALL file.
+ add nsterm-256color, make this the default nsterm -TD
+ remove bw from nsterm-bce, per testing with tack -TD
20120804
+ update test/configure, adding check for tinfo library.
+ improve limit-checks for the getch fifo (report by Werner Fink).
+ fix a remaining mismatch between $with_echo and the symbols updated
for CF_DISABLE_ECHO affecting parameters for mk-2nd.awk (report by
Sven Joachim, cf: 20120317).
+ modify followup check for pkg-config's library directory in the
--enable-pc-files option to validate syntax (report by Sven Joachim,
cf: 20110716).
20120728
+ correct path for ncurses_mingw.h in include/headers, in case build
is done outside source-tree (patch by Roumen Petrov).
+ modify some older xterm entries to align with xterm source -TD
+ separate "xterm-old" alias from "xterm-r6" -TD
+ add E3 extended capability to xterm-basic and putty -TD
+ parenthesize parameters of other macros in curses.h -TD
+ parenthesize parameter of COLOR_PAIR and PAIR_NUMBER in curses.h
in case it happens to be a comma-expression, etc. (patch by Nick
Black).
20120721
+ improved form_request_by_name() and menu_request_by_name().
+ eliminate two fixed-size buffers in toe.c
+ extend use_tioctl() to have expected behavior when use_env(FALSE) and
use_tioctl(TRUE) are called.
+ modify ncurses test-program, adding -E and -T options to demonstrate
use_env() versus use_tioctl().
20120714
+ add use_tioctl() function (adapted from patch by Werner Fink,
Novell #769788):
20120707
+ add ncurses_mingw.h to installed headers (prompted by patch by
Juergen Pfeifer).
+ clarify return-codes from wgetch() in response to SIGWINCH (prompted
by Novell #769788).
+ modify resizeterm() to always push a KEY_RESIZE onto the fifo, even
if screensize is unchanged. Modify _nc_update_screensize() to push a
KEY_RESIZE if there was a SIGWINCH, even if it does not call
resizeterm(). These changes eliminate the case where a SIGWINCH is
received, but ERR returned from wgetch or wgetnstr because the screen
dimensions did not change (Novell #769788).
20120630
+ add --enable-interop to sample package scripts (suggested by Juergen
Pfeifer).
+ update CF_PATH_SYNTAX macro, from mawk changes.
+ modify mk-0th.awk to allow for generating llib-ltic, etc., though
some work is needed on cproto to work with lib_gen.c to update
llib-lncurses.
+ remove redundant getenv() cal in database-iterator leftover from
cleanup in 20120622 changes (report by Sven Joachim).
20120622
+ add -d, -e and -q options to test/demo_terminfo and test/demo_termcap
+ fix caching of environment variables in database-iterator (patch by
Philippe Troin, Redhat #831366).
20120616
+ add configure check to distinguish clang from gcc to eliminate
warnings about unused command-line parameters when compiler warnings
are enabled.
+ improve behavior when updating terminfo entries which are hardlinked
by allowing for the possibility that an alias has been repurposed to
a new primary name.
+ fix some strict compiler warnings based on package scripts.
+ further fixes for configure check for working poll (Debian #676461).
20120608
+ fix an uninitialized variable in -c/-n logic for infocmp changes
(cf: 20120526).
+ corrected fix for building c++ binding with clang 3.0 (report/patch
by Richard Yao, Gentoo #417613, cf: 20110409)
+ correct configure check for working poll, fixing the case where stdin
is redirected, e.g., in rpm/dpkg builds (Debian #676461).
+ add rpm- and dpkg-scripts, to test those build-environments.
The resulting packages are used only for testing.
20120602
+ add kdch1 aka "Remove" to vt220 and vt220-8 entries -TD
+ add kdch1, etc., to qvt108 -TD
+ add dl1/il1 to some entries based on dl/il values -TD
+ add dl to simpleterm -TD
+ add consistency-checks in tic for insert-line vs delete-line
controls, and insert/delete-char keys
+ correct no-leaks logic in infocmp when doing comparisons, fixing
duplicate free of entries given via the command-line, and freeing
entries loaded from the last-but-one of files specified on the
command-line.
+ add kdch1 to wsvt25 entry from NetBSD CVS (reported by David Lord,
analysis by Martin Husemann).
+ add cnorm/civis to wsvt25 entry from NetBSD CVS (report/analysis by
Onno van der Linden).
20120526
+ extend -c and -n options of infocmp to allow comparing more than two
entries.
+ correct check in infocmp for number of terminal names when more than
two are given.
+ correct typo in curs_threads.3x (report by Yanhui Shen on
freebsd-hackers mailing list).
20120512
+ corrected 'op' for bterm (report by Samuel Thibault) -TD
+ modify test/background.c to demonstrate a background character
holding a colored ACS_HLINE. The behavior differs from SVr4 due to
the thick- and double-line extension (cf: 20091003).
+ modify handling of acs characters in PutAttrChar to avoid mapping an
unmapped character to a space with A_ALTCHARSET set.
+ rewrite vt520 entry based on vt420 -TD
20120505
+ remove p6 (bold) from opus3n1+ for consistency -TD
+ remove acs stuff from env230 per clues in Ingres termcap -TD
+ modify env230 sgr/sgr0 to match other capabilities -TD
+ modify smacs/rmacs in bq300-8 to match sgr/sgr0 -TD
+ make sgr for dku7202 agree with other caps -TD
+ make sgr for ibmpc agree with other caps -TD
+ make sgr for tek4107 agree with other caps -TD
+ make sgr for ndr9500 agree with other caps -TD
+ make sgr for sco-ansi agree with other caps -TD
+ make sgr for d410 agree with other caps -TD
+ make sgr for d210 agree with other caps -TD
+ make sgr for d470c, d470c-7b agree with other caps -TD
+ remove redundant AC_DEFINE for NDEBUG versus Makefile definition.
+ fix a back-link in _nc_delink_entry(), which is needed if ncurses is
configured with --enable-termcap and --disable-getcap.
20120428
+ fix some inconsistencies between vt320/vt420, e.g., cnorm/civis -TD
+ add eslok flag to dec+sl -TD
+ dec+sl applies to vt320 and up -TD
+ drop wsl width from xterm+sl -TD
+ reuse xterm+sl in putty and nsca-m -TD
+ add ansi+tabs to vt520 -TD
+ add ansi+enq to vt220-vt520 -TD
+ fix a compiler warning in example in ncurses-intro.doc (Paul Waring).
+ added paragraph in keyname manpage telling how extended capabilities
are interpreted as key definitions.
+ modify tic's check of conflicting key definitions to include extended
capability strings in addition to the existing check on predefined
keys.
20120421
+ improve cleanup of temporary files in tic using atexit().
+ add msgr to vt420, similar DEC vtXXX entries -TD
+ add several missing vt420 capabilities from vt220 -TD
+ factor out ansi+pp from several entries -TD
+ change xterm+sl and xterm+sl-twm to include only the status-line
capabilities and not "use=xterm", making them more generally useful
as building-blocks -TD
+ add dec+sl building block, as example -TD
20120414
+ add XT to some terminfo entries to improve usefulness for other
applications than screen, which would like to pretend that xterm's
title is a status-line. -TD
+ change use-clauses in ansi-mtabs, hp2626, and hp2622 based on review
of ordering and overrides -TD
+ add consistency check in tic for screen's "XT" capability.
+ add section in terminfo.src summarizing the user-defined capabilities
used in that file -TD
20120407
+ fix an inconsistency between tic/infocmp "-x" option; tic omits all
non-standard capabilities, while infocmp was ignoring only the user
definable capabilities.
+ improve special case in tic parsing of description to allow it to be
followed by terminfo capabilities. Previously the description had to
be the last field on an input line to allow tic to distinguish
between termcap and terminfo format while still allowing commas to be
embedded in the description.
+ correct variable name in gen_edit.sh which broke configurability of
the --with-xterm-kbs option.
+ revert 2011-07-16 change to "linux" alias, return to "linux2.2" -TD
+ further amend 20110910 change, providing for configure-script
override of the "linux" terminfo entry to install and changing the
default for that to "linux2.2" (Debian #665959).
20120331
+ update Ada95/configure to use CF_DISABLE_ECHO (cf: 20120317).
+ correct order of use-clauses in st-256color -TD
+ modify configure script to look for gnatgcc if the Ada95 binding
is built, in preference to the default gcc/cc (suggested by
Nicolas Boulenguez).
+ modify configure script to ensure that the same -On option used for
the C compiler in CFLAGS is used for ADAFLAGS rather than simply
using "-O3" (suggested by Nicolas Boulenguez)
20120324
+ amend an old fix so that next_char() exits properly for empty files,
e.g., from reading /dev/null (cf: 20080804).
+ modify tic so that it can read from the standard input, or from
a character device. Because tic uses seek's, this requires writing
the data to a temporary file first (prompted by remark by Sven
Joachim) (cf: 20000923).
20120317
+ correct a check made in lib_napms.c, so that terminfo applications
can again use napms() (cf: 20110604).
+ add a note in tic.h regarding required casts for ABSENT_BOOLEAN
(cf: 20040327).
+ correct scripting for --disable-echo option in test/configure.
+ amend check for missing c++ compiler to work when no error is
reported, and no variables set (cf: 20021206).
+ add/use configure macro CF_DISABLE_ECHO.
20120310
+ fix some strict compiler warnings for abi6 and 64-bits.
+ use begin_va_copy/end_va_copy macros in lib_printw.c (cf: 20120303).
+ improve a limit-check in infocmp.c (Werner Fink):
20120303
+ minor tidying of terminfo.tail, clarify reason for limitation
regarding mapping of \0 to \200
+ minor improvement to _nc_copy_termtype(), using memcpy to replace
loops.
+ fix no-leaks checking in test/demo_termcap.c to account for multiple
calls to setupterm().
+ modified the libgpm change to show previous load as a problem in the
debug-trace.
> merge some patches from OpenSUSE rpm (Werner Fink):
+ ncurses-5.7-printw.dif, fixes for varargs handling in lib_printw.c
+ ncurses-5.7-gpm.dif, do not dlopen libgpm if already loaded by
runtime linker
+ ncurses-5.6-fallback.dif, do not free arrays and strings from static
fallback entries
20120228
+ fix breakage in tic/infocmp from 20120225 (report by Werner Fink).
20120225
+ modify configure script to allow creating dll's for MinGW when
cross-compiling.
+ add --enable-string-hacks option to control whether strlcat and
strlcpy may be used. The same issue applies to OpenBSD's warnings
about snprintf, noting that this function is weakly standardized.
+ add configure checks for strlcat, strlcpy and snprintf, to help
reduce bogus warnings with OpenBSD builds.
+ build-fix for OpenBSD 4.9 to supply consistent intptr_t declaration
(cf:20111231)
+ update config.guess, config.sub
20120218
+ correct CF_ETIP_DEFINES configure macro, making it exit properly on
the first success (patch by Pierre Labastie).
+ improve configure macro CF_MKSTEMP by moving existence-check for
mkstemp out of the AC_TRY_RUN, to help with cross-compiles.
+ improve configure macro CF_FUNC_POLL from luit changes to detect
broken implementations, e.g., with Mac OS X.
+ add configure option --with-tparm-arg
+ build-fix for MinGW cross-compiling, so that make_hash does not
depend on TTY definition (cf: 20111008).
20120211
+ make sgr for xterm-pcolor agree with other caps -TD
+ make sgr for att5425 agree with other caps -TD
+ make sgr for att630 agree with other caps -TD
+ make sgr for linux entries agree with other caps -TD
+ make sgr for tvi9065 agree with other caps -TD
+ make sgr for ncr260vt200an agree with other caps -TD
+ make sgr for ncr160vt100pp agree with other caps -TD
+ make sgr for ncr260vt300an agree with other caps -TD
+ make sgr for aaa-60-dec-rv, aaa+dec agree with other caps -TD
+ make sgr for cygwin, cygwinDBG agree with other caps -TD
+ add configure option --with-xterm-kbs to simplify configuration for
Linux versus most other systems.
20120204
+ improved tic -D option, avoid making target directory and provide
better diagnostics.
20120128
+ add mach-gnu (Debian #614316, patch by Samuel Thibault)
+ add mach-gnu-color, tweaks to mach-gnu terminfo -TD
+ make sgr for sun-color agree with smso -TD
+ make sgr for prism9 agree with other caps -TD
+ make sgr for icl6404 agree with other caps -TD
+ make sgr for ofcons agree with other caps -TD
+ make sgr for att5410v1, att4415, att620 agree with other caps -TD
+ make sgr for aaa-unk, aaa-rv agree with other caps -TD
+ make sgr for avt-ns agree with other caps -TD
+ amend fix intended to separate fixups for acsc to allow "tic -cv" to
give verbose warnings (cf: 20110730).
+ modify misc/gen-edit.sh to make the location of the tabset directory
consistent with misc/Makefile.in, i.e., using ${datadir}/tabset
(Debian #653435, patch by Sven Joachim).
20120121
+ add --with-lib-prefix option to allow configuring for old/new flavors
of OS/2 EMX.
+ modify check for gnat version to allow for year, as used in FreeBSD
port.
+ modify check_existence() in db_iterator.c to simply check if the
path is a directory or file, according to the need. Checking for
directory size also gives no usable result with OS/2 (cf: 20120107).
+ support OS/2 kLIBC (patch by KO Myung-Hun).
20120114
+ several improvements to test/movewindow.c (prompted by discussion on
Linux Mint forum):
+ modify movement commands to make them continuous
+ rewrote the test for mvderwin
+ rewrote the test for recursive mvwin
+ split-out reusable CF_WITH_NCURSES_ETC macro in test/configure.in
+ updated configure macro CF_XOPEN_SOURCE, build-fixes for Mac OS X
and OpenBSD.
+ regenerated html manpages.
20120107
+ various improvements for MinGW (Juergen Pfeifer):
+ modify stat() calls to ignore the st_size member
+ drop mk-dlls.sh script.
+ change recommended regular expression library.
+ modify rain.c to allow for threaded configuration.
+ modify tset.c to allow for case when size-change logic is not used.
20111231
+ modify toe's report when -a and -s options are combined, to add
a column showing which entries belong to a given database.
+ add -s option to toe, to sort its output.
+ modify progs/toe.c, simplifying use of db-iterator results to use
caching improvements from 20111001 and 20111126.
+ correct generation of pc-files when ticlib or termlib options are
given to rename the corresponding tic- or tinfo-libraries (report
by Sven Joachim).
20111224
+ document a portability issue with tput, i.e., that scripts which work
with ncurses may fail in other implementations that do no parameter
analysis.
+ add putty-sco entry -TD
20111217
+ review/fix places in manpages where --program-prefix configure option
was not being used.
+ add -D option to infocmp, to show the database locations that it
could use.
+ fix build for the special case where term-driver, ticlib and termlib
are all enabled. The terminal driver depends on a few features in
the base ncurses library, so tic's dependencies include both ncurses
and termlib.
+ fix build work for term-driver when --enable-wgetch-events option is
enabled.
+ use <stdint.h> types to fix some questionable casts to void*.
20111210
+ modify configure script to check if thread library provides
pthread_mutexattr_settype(), e.g., not provided by Solaris 2.6
+ modify configure script to suppress check to define _XOPEN_SOURCE
for IRIX64, since its header files have a conflict versus
_SGI_SOURCE.
+ modify configure script to add ".pc" files for tic- and
tinfo-libraries, which were omitted in recent change (cf: 20111126).
+ fix inconsistent checks on $PKG_CONFIG variable in configure script.
20111203
+ modify configure-check for etip.h dependencies, supplying a temporary
copy of ncurses_dll.h since it is a generated file (prompted by
Debian #646977).
+ modify CF_CPP_PARAM_INIT "main" function to work with current C++.
20111126
+ correct database iterator's check for duplicate entries
(cf: 20111001).
+ modify database iterator to ignore $TERMCAP when it is not an
absolute pathname.
+ add -D option to tic, to show the database locations that it could
use.
+ improve description of database locations in tic manpage.
+ modify the configure script to generate a list of the ".pc" files to
generate, rather than deriving the list from the libraries which have
been built (patch by Mike Frysinger).
+ use AC_CHECK_TOOLS in preference to AC_PATH_PROGS when searching for
ncurses*-config, e.g., in Ada95/configure and test/configure (adapted
from patch by Mike Frysinger).
20111119
+ remove obsolete/conflicting fallback definition for _POSIX_SOURCE
from curses.priv.h, fixing a regression with IRIX64 and Tru64
(cf: 20110416)
+ modify _nc_tic_dir() to ensure that its return-value is nonnull,
i.e., the database iterator was not initialized. This case is needed
to when tic is translating to termcap, rather than loading the
database (cf: 20111001).
20111112
+ add pccon entries for OpenBSD console (Alexei Malinin).
+ build-fix for OpenBSD 4.9 with gcc 4.2.1, setting _XOPEN_SOURCE to
600 to work around inconsistent ifdef'ing of wcstof between C and
C++ header files.
+ modify capconvert script to accept more than exact match on "xterm",
e.g., the "xterm-*" variants, to exclude from the conversion (patch
by Robert Millan).
+ add -lc_r as alternative for -lpthread, allows build of threaded code
in older FreeBSD machines.
+ build-fix for MirBSD, which fails when either _XOPEN_SOURCE or
_POSIX_SOURCE are defined.
+ fix a typo misc/Makefile.in, used in uninstalling pc-files.
20111030
+ modify make_db_path() to allow creating "terminfo.db" in the same
directory as an existing "terminfo" directory. This fixes a case
where switching between hashed/filesystem databases would cause the
new hashed database to be installed in the next best location -
root's home directory.
+ add variable cf_cv_prog_gnat_correct to those passed to
config.status, fixing a problem with Ada95 builds (cf: 20111022).
+ change feature test from _XPG5 to _XOPEN_SOURCE in two places, to
accommodate broken implementations for _XPG6.
+ eliminate usage of NULL symbol from etip.h, to reduce header
interdependencies.
+ add configure check to decide when to add _XOPEN_SOURCE define to
compiler options, i.e., for Solaris 10 and later (cf: 20100403).
This is a workaround for gcc 4.6, which fails to build the c++
binding if that symbol is defined by the application, due to
incorrectly combining the corresponding feature test macros
(report by Peter Kruse).
20111022
+ correct logic for discarding mouse events, retaining the partial
events used to build up click, double-click, etc, until needed
(cf: 20110917).
+ fix configure script to avoid creating unused Ada95 makefile when
gnat does not work.
+ cleanup width-related gcc 3.4.3 warnings for 64-bit platform, for the
internal functions of libncurses. The external interface of courses
uses bool, which still produces these warnings.
20111015
+ improve description of --disable-tic-depends option to make it
clear that it may be useful whether or not the --with-termlib
option is also given (report by Sven Joachim).
+ amend termcap equivalent for set_pglen_inch to use the X/Open
"YI" rather than the obsolete Solaris 2.5 "sL" (cf: 990109).
+ improve manpage for tgetent differences from termcap library.
20111008
+ moved static data from db_iterator.c to lib_data.c
+ modify db_iterator.c for memory-leak checking, fix one leak.
+ modify misc/gen-pkgconfig.in to use Requires.private for the parts
of ncurses rather than Requires, as well as Libs.private for the
other library dependencies (prompted by Debian #644728).
20111001
+ modify tic "-K" option to only set the strict-flag rather than force
source-output. That allows the same flag to control the parser for
input and output of termcap source.
+ modify _nc_getent() to ignore backslash at the end of a comment line,
making it consistent with ncurses' parser.
+ restore a special-case check for directory needed to make termcap
text files load as if they were databases (cf: 20110924).
+ modify tic's resolution/collision checking to attempt to remove the
conflicting alias from the second entry in the pair, which is
normally following in the source file. Also improved the warning
message to make it simpler to see which alias is the problem.
+ improve performance of the database iterator by caching search-list.
20110925
+ add a missing "else" in changes to _nc_read_tic_entry().
20110924
+ modify _nc_read_tic_entry() so that hashed-database is checked before
filesystem.
+ updated CF_CURSES_LIBS check in test/configure script.
+ modify configure script and makefiles to split TIC_ARGS and
TINFO_ARGS into pieces corresponding to LDFLAGS and LIBS variables,
to help separate searches for tic- and tinfo-libraries (patch by Nick
Alcock aka "Nix").
+ build-fix for lib_mouse.c changes (cf: 20110917).
20110917
+ fix compiler warning for clang 2.9
+ improve merging of mouse events (integrated patch by Damien
Guibouret).
+ correct mask-check used in lib_mouse for wheel mouse buttons 4/5
(patch by Damien Guibouret).
20110910
+ modify misc/gen_edit.sh to select a "linux" entry which works with
the current kernel rather than assuming it is always "linux3.0"
(cf: 20110716).
+ revert a change to getmouse() which had the undesirable side-effect
of suppressing button-release events (report by Damien Guibouret,
cf: 20100102).
+ add xterm+kbs fragment from xterm #272 -TD
+ add configure option --with-pkg-config-libdir to provide control over
the actual directory into which pc-files are installed, do not use
the pkg-config environment variables (discussion with Frederic L W
Meunier).
+ add link to mailing-list archive in announce.html.in, as done in
FAQ (prompted by question by Andrius Bentkus).
+ improve manpage install by adjusting the "#include" examples to
show the ncurses-subdirectory used when --disable-overwrite option
is used.
+ install an alias for "curses" to the ncurses manpage, tied to the
--with-curses-h configure option (suggested by Reuben Thomas).
20110903
+ propagate error-returns from wresize, i.e., the internal
increase_size and decrease_size functions through resize_term (report
by Tim van der Molen, cf: 20020713).
+ fix typo in tset manpage (patch by Sven Joachim).
20110820
+ add a check to ensure that termcap files which might have "^?" do
not use the terminfo interpretation as "\177".
+ minor cleanup of X-terminal emulator section of terminfo.src -TD
+ add terminator entry -TD
+ add simpleterm entry -TD
+ improve wattr_get macros by ensuring that if the window pointer is
null, then the attribute and color values returned will be zero
(cf: 20110528).
20110813
+ add substitution for $RPATH_LIST to misc/ncurses-config.in
+ improve performance of tic with hashed-database by caching the
database connection, using atexit() to cleanup.
+ modify treatment of 2-character aliases at the beginning of termcap
entries so they are not counted in use-resolution, since these are
guaranteed to be unique. Also ignore these aliases when reporting
the primary name of the entry (cf: 20040501)
+ double-check gn (generic) flag in terminal descriptions to
accommodate old/buggy termcap databases which misused that feature.
+ minor fixes to _nc_tgetent(), ensure buffer is initialized even on
error-return.
20110807
+ improve rpath fix from 20110730 by ensuring that the new $RPATH_LIST
variable is defined in the makefiles which use it.
+ build-fix for DragonFlyBSD's pkgsrc in test/configure script.
+ build-fixes for NetBSD 5.1 with termcap support enabled.
+ corrected k9 in dg460-ansi, add other features based on manuals -TD
+ improve trimming of whitespace at the end of terminfo/termcap output
from tic/infocmp.
+ when writing termcap source, ensure that colons in the description
field are translated to a non-delimiter, i.e., "=".
+ add "-0" option to tic/infocmp, to make the termcap/terminfo source
use a single line.
+ add a null-pointer check when handling the $CC variable.
20110730
+ modify configure script and makefiles in c++ and progs to allow the
directory used for rpath option to be overridden, e.g., to work
around updates to the variables used by tic during an install.
+ add -K option to tic/infocmp, to provide stricter BSD-compatibility
for termcap output.
+ add _nc_strict_bsd variable in tic library which controls the
"strict" BSD termcap compatibility from 20110723, plus these
features:
+ allow escapes such as "\8" and "\9" when reading termcap
+ disallow "\a", "\e", "\l", "\s" and "\:" escapes when reading
termcap files, passing through "a", "e", etc.
+ expand "\:" as "\072" on output.
+ modify _nc_get_token() to reset the token's string value in case
there is a string-typed token lacking the "=" marker.
+ fix a few memory leaks in _nc_tgetent.
+ fix a few places where reading from a termcap file could refer to
freed memory.
+ add an overflow check when converting terminfo/termcap numeric
values, since terminfo stores those in a short, and they must be
positive.
+ correct internal variables used for translating to termcap "%>"
feature, and translating from termcap %B to terminfo, needed by
tctest (cf: 19991211).
+ amend a minor fix to acsc when loading a termcap file to separate it
from warnings needed for tic (cf: 20040710)
+ modify logic in _nc_read_entry() and _nc_read_tic_entry() to allow
a termcap file to be handled via TERMINFO_DIRS.
+ modify _nc_infotocap() to include non-mandatory padding when
translating to termcap.
+ modify _nc_read_termcap_entry(), passing a flag in the case where
getcap is used, to reduce interactive warning messages.
20110723
+ add a check in start_color() to limit color-pairs to 256 when
extended colors are not supported (patch by David Benjamin).
+ modify setcchar to omit no-longer-needed OR'ing of color pair in
the SetAttr() macro (patch by David Benjamin).
+ add kich1 to sun terminfo entry (Yuri Pankov)
+ use bold rather than reverse for smso in sun-color terminfo entry
(Yuri Pankov).
+ improve generation of termcap using tic/infocmp -C option, e.g.,
to correspond with 4.2BSD (prompted by discussion with Yuri Pankov
regarding Schilling's test program):
+ translate %02 and %03 to %2 and %3 respectively.
+ suppress string capabilities which use %s, not supported by tgoto
+ use \040 rather than \s
+ expand null characters as \200 rather than \0
+ modify configure script to support shared libraries for DragonFlyBSD.
20110716
+ replace an assert() in _nc_Free_Argument() with a regular null
pointer check (report/analysis by Franjo Ivancic).
+ modify configure --enable-pc-files option to take into account the
PKG_CONFIG_PATH variable (report by Frederic L W Meunier).
+ add/use xterm+tmux chunk from xterm #271 -TD
+ resync xterm-new entry from xterm #271 -TD
+ add E3 extended capability to linux-basic (Miroslav Lichvar)
+ add linux2.2, linux2.6, linux3.0 entries to give context for E3 -TD
+ add SI/SO change to linux2.6 entry (Debian #515609) -TD
+ fix inconsistent tabset path in pcmw (Todd C. Miller).
+ remove a backslash which continued comment, obscuring altos3
definition with OpenBSD toolset (Nicholas Marriott).
20110702
+ add workaround from xterm #271 changes to ensure that compiler flags
are not used in the $CC variable.
+ improve support for shared libraries, tested with AIX 5.3, 6.1 and
7.1 with both gcc 4.2.4 and cc.
+ modify configure checks for AIX to include release 7.x
+ add loader flags/libraries to libtool options so that dynamic loading
works properly, adapted from ncurses-5.7-ldflags-with-libtool.patch
at gentoo prefix repository (patch by Michael Haubenwallner).
20110626
+ move include of nc_termios.h out of term_entry.h, since the latter
is installed, e.g., for tack while the former is not (report by
Sven Joachim).
20110625
+ improve cleanup() function in lib_tstp.c, using _exit() rather than
exit() and checking for SIGTERM rather than SIGQUIT (prompted by
comments forwarded by Nicholas Marriott).
+ reduce name pollution from term.h, moving fallback #define's for
tcgetattr(), etc., to new private header nc_termios.h (report by
Sergio NNX).
+ two minor fixes for tracing (patch by Vassili Courzakis).
+ improve trace initialization by starting it in use_env() and
ripoffline().
+ review old email, add details for some changelog entries.
20110611
+ update minix entry to minix 3.2 (Thomas Cort).
+ fix a strict compiler warning in change to wattr_get (cf: 20110528).
20110604
+ fixes for MirBSD port:
+ set default prefix to /usr.
+ add support for shared libraries in configure script.
+ use S_ISREG and S_ISDIR consistently, with fallback definitions.
+ add a few more checks based on ncurses/link_test.
+ modify MKlib_gen.sh to handle sp-funcs renaming of NCURSES_OUTC type.
20110528
+ add case to CF_SHARED_OPTS for Interix (patch by Markus Duft).
+ used ncurses/link_test to check for behavior when the terminal has
not been initialized and when an application passes null pointers
to the library. Added checks to cover this (prompted by Redhat
#707344).
+ modify MKlib_gen.sh to make its main() function call each function
with zero parameters, to help find inconsistent checking for null
pointers, etc.
20110521
+ fix warnings from clang 2.7 "--analyze"
20110514
+ compiler-warning fixes in panel and progs.
+ modify CF_PKG_CONFIG macro, from changes to tin -TD
+ modify CF_CURSES_FUNCS configure macro, used in test directory
configure script:
+ work around (non-optimizer) bug in gcc 4.2.1 which caused
test-expression to be omitted from executable.
+ force the linker to see a link-time expression of a symbol, to
help work around weak-symbol issues.
20110507
+ update discussion of MKfallback.sh script in INSTALL; normally the
script is used automatically via the configured makefiles. However
there are still occasions when it might be used directly by packagers
(report by Gunter Schaffler).
+ modify misc/ncurses-config.in to omit the "-L" option from the
"--libs" output if the library directory is /usr/lib.
+ change order of tests for curses.h versus ncurses.h headers in the
configure scripts for Ada95 and test-directories, to look for
ncurses.h, from fixes to tin -TD
+ modify ncurses/tinfo/access.c to account for Tandem's root uid
(report by Joachim Schmitz).
20110430
+ modify rules in Ada95/src/Makefile.in to ensure that the PIC option
is not used when building a static library (report by Nicolas
Boulenguez):
+ Ada95 build-fix for big-endian architectures such as sparc. This
undoes one of the fixes from 20110319, which added an "Unused" member
to representation clauses, replacing that with pragmas to suppress
warnings about unused bits (patch by Nicolas Boulenguez).
20110423
+ add check in test/configure for use_window, use_screen.
+ add configure-checks for getopt's variables, which may be declared
as different types on some Unix systems.
+ add check in test/configure for some legacy curses types of the
function pointer passed to tputs().
+ modify init_pair() to accept -1's for color value after
assume_default_colors() has been called (Debian #337095).
+ modify test/background.c, adding commmand-line options to demonstrate
assume_default_colors() and use_default_colors().
20110416
+ modify configure script/source-code to only define _POSIX_SOURCE if
the checks for sigaction and/or termios fail, and if _POSIX_C_SOURCE
and _XOPEN_SOURCE are undefined (report by Valentin Ochs).
+ update config.guess, config.sub
20110409
+ fixes to build c++ binding with clang 3.0 (patch by Alexander
Kolesen).
+ add check for unctrl.h in test/configure, to work around breakage in
some ncurses packages.
+ add "--disable-widec" option to test/configure script.
+ add "--with-curses-colr" and "--with-curses-5lib" options to the
test/configure script to address testing with very old machines.
20110404 5.9 release for upload to ftp.gnu.org
20110402
+ various build-fixes for the rpm/dpkg scripts.
+ add "--enable-rpath-link" option to Ada95/configure, to allow
packages to suppress the rpath feature which is normally used for
the in-tree build of sample programs.
+ corrected definition of libdir variable in Ada95/src/Makefile.in,
needed for rpm script.
+ add "--with-shared" option to Ada95/configure script, to allow
making the C-language parts of the binding use appropriate compiler
options if building a shared library with gnat.
20110329
> portability fixes for Ada95 binding:
+ add configure check to ensure that SIGINT works with gnat. This is
needed for the "rain" sample program. If SIGINT does not work, omit
that sample program.
+ correct typo in check of $PKG_CONFIG variable in Ada95/configure
+ add ncurses_compat.c, to supply functions used in the Ada95 binding
which were added in 5.7 and later.
+ modify sed expression in CF_NCURSES_ADDON to eliminate a dependency
upon GNU sed.
20110326
+ add special check in Ada95/configure script for ncurses6 reentrant
code.
+ regen Ada html documentation.
+ build-fix for Ada shared libraries versus the varargs workaround.
+ add rpm and dpkg scripts for Ada95 and test directories, for test
builds.
+ update test/configure macros CF_CURSES_LIBS, CF_XOPEN_SOURCE and
CF_X_ATHENA_LIBS.
+ add configure check to determine if gnat's project feature supports
libraries, i.e., collections of .ali files.
+ make all dereferences in Ada95 samples explicit.
+ fix typo in comment in lib_add_wch.c (patch by Petr Pavlu).
+ add configure check for, ifdef's for math.h which is in a separate
package on Solaris and potentially not installed (report by Petr
Pavlu).
> fixes for Ada95 binding (Nicolas Boulenguez):
+ improve type-checking in Ada95 by eliminating a few warning-suppress
pragmas.
+ suppress unreferenced warnings.
+ make all dereferences in binding explicit.
20110319
+ regen Ada html documentation.
+ change order of -I options from ncurses*-config script when the
--disable-overwrite option was used, so that the subdirectory include
is listed first.
+ modify the make-tar.sh scripts to add a MANIFEST and NEWS file.
+ modify configure script to provide value for HTML_DIR in
Ada95/gen/Makefile.in, which depends on whether the Ada95 binding is
distributed separately (report by Nicolas Boulenguez).
+ modify configure script to add "-g" and/or "-O3" to ADAFLAGS if the
CFLAGS for the build has these options.
+ amend change from 20070324, to not add 1 to the result of getmaxx
and getmaxy in the Ada binding (report by Nicolas Boulenguez for
thread in comp.lang.ada).
+ build-fix Ada95/samples for gnat 4.5
+ spelling fixes for Ada95/samples/explain.txt
> fixes for Ada95 binding (Nicolas Boulenguez):
+ add item in Trace_Attribute_Set corresponding to TRACE_ATTRS.
+ add workaround for binding to set_field_type(), which uses varargs.
The original binding from 990220 relied on the prevalent
implementation of varargs which did not support or need va_copy().
+ add dependency on gen/Makefile.in needed for *-panels.ads
+ add Library_Options to library.gpr
+ add Languages to library.gpr, for gprbuild
20110307
+ revert changes to limit-checks from 20110122 (Debian #616711).
> minor type-cleanup of Ada95 binding (Nicolas Boulenguez):
+ corrected a minor sign error in a field of Low_Level_Field_Type, to
conform to form.h.
+ replaced C_Int by Curses_Bool as return type for some callbacks, see
fieldtype(3FORM).
+ modify samples/sample-explain.adb to provide explicit message when
explain.txt is not found.
20110305
+ improve makefiles for Ada95 tree (patch by Nicolas Boulenguez).
+ fix an off-by-one error in _nc_slk_initialize() from 20100605 fixes
for compiler warnings (report by Nicolas Boulenguez).
+ modify Ada95/gen/gen.c to declare unused bits in generated layouts,
needed to compile when chtype is 64-bits using gnat 4.4.5
20110226 5.8 release for upload to ftp.gnu.org
20110226
+ update release notes, for 5.8.
+ regenerated html manpages.
+ change open() in _nc_read_file_entry() to fopen() for consistency
with write_file().
+ modify misc/run_tic.in to create parent directory, in case this is
a new install of hashed database.
+ fix typo in Ada95/mk-1st.awk which causes error with original awk.
20110220
+ configure script rpath fixes from xterm #269.
+ workaround for cygwin's non-functional features.h, to force ncurses'
configure script to define _XOPEN_SOURCE_EXTENDED when building
wide-character configuration.
+ build-fix in run_tic.sh for OS/2 EMX install
+ add cons25-debian entry (patch by Brian M Carlson, Debian #607662).
20110212
+ regenerated html manpages.
+ use _tracef() in show_where() function of tic, to work correctly with
special case of trace configuration.
20110205
+ add xterm-utf8 entry as a demo of the U8 feature -TD
+ add U8 feature to denote entries for terminal emulators which do not
support VT100 SI/SO when processing UTF-8 encoding -TD
+ improve the NCURSES_NO_UTF8_ACS feature by adding a check for an
extended terminfo capability U8 (prompted by mailing list
discussion).
20110122
+ start documenting interface changes for upcoming 5.8 release.
+ correct limit-checks in derwin().
+ correct limit-checks in newwin(), to ensure that windows have nonzero
size (report by Garrett Cooper).
+ fix a missing "weak" declaration for pthread_kill (patch by Nicholas
Alcock).
+ improve documentation of KEY_ENTER in curs_getch.3x manpage (prompted
by discussion with Kevin Martin).
20110115
+ modify Ada95/configure script to make the --with-curses-dir option
work without requiring the --with-ncurses option.
+ modify test programs to allow them to be built with NetBSD curses.
+ document thick- and double-line symbols in curs_add_wch.3x manpage.
+ document WACS_xxx constants in curs_add_wch.3x manpage.
+ fix some warnings for clang 2.6 "--analyze"
+ modify Ada95 makefiles to make html-documentation with the project
file configuration if that is used.
+ update config.guess, config.sub
20110108
+ regenerated html manpages.
+ minor fixes to enable lint when trace is not enabled, e.g., with
clang --analyze.
+ fix typo in man/default_colors.3x (patch by Tim van der Molen).
+ update ncurses/llib-lncurses*
20110101
+ fix remaining strict compiler warnings in ncurses library ABI=5,
except those dealing with function pointers, etc.
20101225
+ modify nc_tparm.h, adding guards against repeated inclusion, and
allowing TPARM_ARG to be overridden.
+ fix some strict compiler warnings in ncurses library.
20101211
+ suppress ncv in screen entry, allowing underline (patch by Alejandro
R Sedeno).
+ also suppress ncv in konsole-base -TD
+ fixes in wins_nwstr() and related functions to ensure that special
characters, i.e., control characters are handled properly with the
wide-character configuration.
+ correct a comparison in wins_nwstr() (Redhat #661506).
+ correct help-messages in some of the test-programs, which still
referred to quitting with 'q'.
20101204
+ add special case to _nc_infotocap() to recognize the setaf/setab
strings from xterm+256color and xterm+88color, and provide a reduced
version which works with termcap.
+ remove obsolete emacs "Local Variables" section from documentation
(request by Sven Joachim).
+ update doc/html/index.html to include NCURSES-Programming-HOWTO.html
(report by Sven Joachim).
20101128
+ modify test/configure and test/Makefile.in to handle this special
case of building within a build-tree (Debian #34182):
mkdir -p build && cd build && ../test/configure && make
20101127
+ miscellaneous build-fixes for Ada95 and test-directories when built
out-of-tree.
+ use VPATH in makefiles to simplify out-of-tree builds (Debian #34182).
+ fix typo in rmso for tek4106 entry -Goran Weinholt
20101120
+ improve checks in test/configure for X libraries, from xterm #267
changes.
+ modify test/configure to allow it to use the build-tree's libraries
e.g., when using that to configure the test-programs without the
rpath feature (request by Sven Joachim).
+ repurpose "gnome" terminfo entries as "vte", retaining "gnome" items
for compatibility, but generally deprecating those since the VTE
library is what actually defines the behavior of "gnome", etc.,
since 2003 -TD
20101113
+ compiler warning fixes for test programs.
+ various build-fixes for test-programs with pdcurses.
+ updated configure checks for X packages in test/configure from xterm
#267 changes.
+ add configure check to gnatmake, to accommodate cygwin.
20101106
+ correct list of sub-directories needed in Ada95 tree for building as
a separate package.
+ modify scripts in test-directory to improve builds as a separate
package.
20101023
+ correct parsing of relative tab-stops in tabs program (report by
Philip Ganchev).
+ adjust configure script so that "t" is not added to library suffix
when weak-symbols are used, allowing the pthread configuration to
more closely match the non-thread naming (report by Werner Fink).
+ modify configure check for tic program, used for fallbacks, to a
warning if not found. This makes it simpler to use additional
scripts to bootstrap the fallbacks code using tic from the build
tree (report by Werner Fink).
+ fix several places in configure script using ${variable-value} form.
+ modify configure macro CF_LDFLAGS_STATIC to accommodate some loaders
which do not support selectively linking against static libraries
(report by John P. Hartmann)
+ fix an unescaped dash in man/tset.1 (report by Sven Joachim).
20101009
+ correct comparison used for setting 16-colors in linux-16color
entry (Novell #644831) -TD
+ improve linux-16color entry, using "dim" for color-8 which makes it
gray rather than black like color-0 -TD
+ drop misc/ncu-indent and misc/jpf-indent; they are provided by an
external package "cindent".
20101002
+ improve linkages in html manpages, adding references to the newer
pages, e.g., *_variables, curs_sp_funcs, curs_threads.
+ add checks in tic for inconsistent cursor-movement controls, and for
inconsistent printer-controls.
+ fill in no-parameter forms of cursor-movement where a parameterized
form is available -TD
+ fill in missing cursor controls where the form of the controls is
ANSI -TD
+ fix inconsistent punctuation in form_variables manpage (patch by
Sven Joachim).
+ add parameterized cursor-controls to linux-basic (report by Dae) -TD
> patch by Juergen Pfeifer:
+ document how to build 32-bit libraries in README.MinGW
+ fixes to filename computation in mk-dlls.sh.in
+ use POSIX locale in mk-dlls.sh.in rather than en_US (report by Sven
Joachim).
+ add a check in mk-dlls.sh.in to obtain the size of a pointer to
distinguish between 32-bit and 64-bit hosts. The result is stored
in mingw_arch
20100925
+ add "XT" capability to entries for terminals that support both
xterm-style mouse- and title-controls, for "screen" which
special-cases TERM beginning with "xterm" or "rxvt" -TD
> patch by Juergen Pfeifer:
+ use 64-Bit MinGW toolchain (recommended package from TDM, see
README.MinGW).
+ support pthreads when using the TDM MinGW toolchain
20100918
+ regenerated html manpages.
+ minor fixes for symlinks to curs_legacy.3x and curs_slk.3x manpages.
+ add manpage for sp-funcs.
+ add sp-funcs to test/listused.sh, for documentation aids.
20100911
+ add manpages for summarizing public variables of curses-, terminfo-
and form-libraries.
+ minor fixes to manpages for consistency (patch by Jason McIntyre).
+ modify tic's -I/-C dump to reformat acsc strings into canonical form
(sorted, unique mapping) (cf: 971004).
+ add configure check for pthread_kill(), needed for some old
platforms.
20100904
+ add configure option --without-tests, to suppress building test
programs (request by Frederic L W Meunier).
20100828
+ modify nsterm, xnuppc and tek4115 to make sgr/sgr0 consistent -TD
+ add check in terminfo source-reader to provide more informative
message when someone attempts to run tic on a compiled terminal
description (prompted by Debian #593920).
+ note in infotocap and captoinfo manpages that they read terminal
descriptions from text-files (Debian #593920).
+ improve acsc string for vt52, show arrow keys (patch by Benjamin
Sittler).
20100814
+ document in manpages that "mv" functions first use wmove() to check
the window pointer and whether the position lies within the window
(suggested by Poul-Henning Kamp).
+ fixes to curs_color.3x, curs_kernel.3x and wresize.3x manpages (patch
by Tim van der Molen).
+ modify configure script to transform library names for tic- and
tinfo-libraries so that those build properly with Mac OS X shared
library configuration.
+ modify configure script to ensure that it removes conftest.dSYM
directory leftover on checks with Mac OS X.
+ modify configure script to cleanup after check for symbolic links.
20100807
+ correct a typo in mk-1st.awk (patch by Gabriele Balducci)
(cf: 20100724)
+ improve configure checks for location of tic and infocmp programs
used for installing database and for generating fallback data,
e.g., for cross-compiling.
+ add Markus Kuhn's wcwidth function for compiling MinGW
+ add special case to CF_REGEX for cross-compiling to MinGW target.
20100731
+ modify initialization check for win32con driver to eliminate need for
special case for TERM "unknown", using terminal database if available
(prompted by discussion with Roumen Petrov).
+ for MinGW port, ensure that terminal driver is setup if tgetent()
is called (patch by Roumen Petrov).
+ document tabs "-0" and "-8" options in manpage.
+ fix Debian "lintian" issues with manpages reported in
http://lintian.debian.org/full/csmall@debian.org.html#ncurses
20100724
+ add a check in tic for missing set_tab if clear_all_tabs given.
+ improve use of symbolic links in makefiles by using "-f" option if
it is supported, to eliminate temporary removal of the target
(prompted by http://www.t2-project.org/packages/ncurses.html)
+ minor improvement to test/ncurses.c, reset color pairs in 'd' test
after exit from 'm' main-menu command.
+ improved ncu-indent, from mawk changes, allows more than one of
GCC_NORETURN, GCC_PRINTFLIKE and GCC_SCANFLIKE on a single line.
20100717
+ add hard-reset for rs2 to wsvt25 to help ensure that reset ends
the alternate character set (patch by Nicholas Marriott)
+ remove tar-copy.sh and related configure/Makefile chunks, since the
Ada95 binding is now installed using rules in Ada95/src.
20100703
+ continue integrating changes to use gnatmake project files in Ada95
+ add/use configure check to turn on project rules for Ada95/src.
+ revert the vfork change from 20100130, since it does not work.
20100626
+ continue integrating changes to use gnatmake project files in Ada95
+ old gnatmake (3.15) does not produce libraries using project-file;
work around by adding script to generate alternate makefile.
20100619
+ continue integrating changes to use gnatmake project files in Ada95
+ add configure --with-ada-sharedlib option, for the test_make rule.
+ move Ada95-related logic into aclocal.m4, since additional checks
will be needed to distinguish old/new implementations of gnat.
20100612
+ start integrating changes to use gnatmake project files in Ada95 tree
+ add test_make / test_clean / test_install rules in Ada95/src
+ change install-path for adainclude directory to /usr/share/ada (was
/usr/lib/ada).
+ update Ada95/configure.
+ add mlterm+256color entry, for mlterm 3.0.0 -TD
+ modify test/configure to use macros to ensure consistent order
of updating LIBS variable.
20100605
+ change search order of options for Solaris in CF_SHARED_OPTS, to
work with 64-bit compiles.
+ correct quoting of assignment in CF_SHARED_OPTS case for aix
(cf: 20081227)
20100529
+ regenerated html documentation.
+ modify test/configure to support pkg-config for checking X libraries
used by PDCurses.
+ add/use configure macro CF_ADD_LIB to force consistency of
assignments to $LIBS, etc.
+ fix configure script for combining --with-pthread
and --enable-weak-symbols options.
20100522
+ correct cross-compiling configure check for CF_MKSTEMP macro, by
adding a check cache variable set by AC_CHECK_FUNC (report by
Pierre Labastie).
+ simplify include-dependencies of make_hash and make_keys, to reduce
the need for setting BUILD_CPPFLAGS in cross-compiling when the
build- and target-machines differ.
+ repair broken-linker configuration by restoring a definition of SP
variable to curses.priv.h, and adjusting for cases where sp-funcs
are used.
+ improve configure macro CF_AR_FLAGS, allowing ARFLAGS environment
variable to override (prompted by report by Pablo Cazallas).
20100515
+ add configure option --enable-pthreads-eintr to control whether the
new EINTR feature is enabled.
+ modify logic in pthread configuration to allow EINTR to interrupt
a read operation in wgetch() (Novell #540571, patch by Werner Fink).
+ drop mkdirs.sh, use "mkdir -p".
+ add configure option --disable-libtool-version, to use the
"-version-number" feature which was added in libtool 1.5 (report by
Peter Haering). The default value for the option uses the newer
feature, which makes libraries generated using libtool compatible
with the standard builds of ncurses.
+ updated test/configure to match configure script macros.
+ fixes for configure script from lynx changes:
+ improve CF_FIND_LINKAGE logic for the case where a function is
found in predefined libraries.
+ revert part of change to CF_HEADER (cf: 20100424)
20100501
+ correct limit-check in wredrawln, accounting for begy/begx values
(patch by David Benjamin).
+ fix most compiler warnings from clang.
+ amend build-fix for OpenSolaris, to ensure that a system header is
included in curses.h before testing feature symbols, since they
may be defined by that route.
20100424
+ fix some strict compiler warnings in ncurses library.
+ modify configure macro CF_HEADER_PATH to not look for variations in
the predefined include directories.
+ improve configure macros CF_GCC_VERSION and CF_GCC_WARNINGS to work
with gcc 4.x's c89 alias, which gives warning messages for cases
where older versions would produce an error.
20100417
+ modify _nc_capcmp() to work with cancelled strings.
+ correct translation of "^" in _nc_infotocap(), used to transform
terminfo to termcap strings
+ add configure --disable-rpath-hack, to allow disabling the feature
which adds rpath options for libraries in unusual places.
+ improve CF_RPATH_HACK_2 by checking if the rpath option for a given
directory was already added.
+ improve CF_RPATH_HACK_2 by using ldd to provide a standard list of
directories (which will be ignored).
20100410
+ improve win_driver.c handling of mouse:
+ discard motion events
+ avoid calling _nc_timed_wait when there is a mouse event
+ handle 4th and "rightmost" buttons.
+ quote substitutions in CF_RPATH_HACK_2 configure macro, needed for
cases where there are embedded blanks in the rpath option.
20100403
+ add configure check for exctags vs ctags, to work around pkgsrc.
+ simplify logic in _nc_get_screensize() to make it easier to see how
environment variables may override system- and terminfo-values
(prompted by discussion with Igor Bujna).
+ make debug-traces for COLOR_PAIR and PAIR_NUMBER less verbose.
+ improve handling of color-pairs embedded in attributes for the
extended-colors configuration.
+ modify MKlib_gen.sh to build link_test with sp-funcs.
+ build-fixes for OpenSolaris aka Solaris 11, for wide-character
configuration as well as for rpath feature in *-config scripts.
20100327
+ refactor CF_SHARED_OPTS configure macro, making CF_RPATH_HACK more
reusable.
+ improve configure CF_REGEX, similar fixes.
+ improve configure CF_FIND_LINKAGE, adding add check between system
(default) and explicit paths, where we can find the entrypoint in the
given library.
+ add check if Gpm_Open() returns a -2, e.g., for "xterm". This is
normally suppressed but can be overridden using $NCURSES_GPM_TERMS.
Ensure that Gpm_Close() is called in this case.
20100320
+ rename atari and st52 terminfo entries to atari-old, st52-old, use
newer entries from FreeMiNT by Guido Flohr (from patch/report by Alan
Hourihane).
20100313
+ modify install-rule for manpages so that *-config manpages will
install when building with --srcdir (report by Sven Joachim).
+ modify CF_DISABLE_LEAKS configure macro so that the --enable-leaks
option is not the same as --disable-leaks (GenToo #305889).
+ modify #define's for build-compiler to suppress cchar_t symbol from
compile of make_hash and make_keys, improving cross-compilation of
ncursesw (report by Bernhard Rosenkraenzer).
+ modify CF_MAN_PAGES configure macro to replace all occurrences of
TPUT in tput.1's manpage (Debian #573597, report/analysis by Anders
Kaseorg).
20100306
+ generate manpages for the *-config scripts, adapted from help2man
(suggested by Sven Joachim).
+ use va_copy() in _nc_printf_string() to avoid conflicting use of
va_list value in _nc_printf_length() (report by Wim Lewis).
20100227
+ add Ada95/configure script, to use in tar-file created by
Ada95/make-tar.sh
+ fix typo in wresize.3x (patch by Tim van der Molen).
+ modify screen-bce.XXX entries to exclude ech, since screen's color
model does not clear with color for that feature -TD
20100220
+ add make-tar.sh scripts to Ada95 and test subdirectories to help with
making those separately distributable.
+ build-fix for static libraries without dlsym (Debian #556378).
+ fix a syntax error in man/form_field_opts.3x (patch by Ingo
Schwarze).
20100213
+ add several screen-bce.XXX entries -TD
20100206
+ update mrxvt terminfo entry -TD
+ modify win_driver.c to support mouse single-clicks.
+ correct name for termlib in ncurses*-config, e.g., if it is renamed
to provide a single file for ncurses/ncursesw libraries (patch by
Miroslav Lichvar).
20100130
+ use vfork in test/ditto.c if available (request by Mike Frysinger).
+ miscellaneous cleanup of manpages.
+ fix typo in curs_bkgd.3x (patch by Tim van der Molen).
+ build-fix for --srcdir (patch by Miroslav Lichvar).
20100123
+ for term-driver configuration, ensure that the driver pointer is
initialized in setupterm so that terminfo/termcap programs work.
+ amend fix for Debian #542031 to ensure that wattrset() returns only
OK or ERR, rather than the attribute value (report by Miroslav
Lichvar).
+ reorder WINDOWLIST to put WINDOW data after SCREEN pointer, making
_nc_screen_of() compatible between normal/wide libraries again (patch
by Miroslav Lichvar)
+ review/fix include-dependencies in modules files (report by Miroslav
Lichvar).
20100116
+ modify win_driver.c to initialize acs_map for win32 console, so
that line-drawing works.
+ modify win_driver.c to initialize TERMINAL struct so that programs
such as test/lrtest.c and test/ncurses.c which test string
capabilities can run.
+ modify term-driver modules to eliminate forward-reference
declarations.
20100109
+ modify configure macro CF_XOPEN_SOURCE, etc., to use CF_ADD_CFLAGS
consistently to add new -D's while removing duplicates.
+ modify a few configure macros to consistently put new options
before older in the list.
+ add tiparm(), based on review of X/Open Curses Issue 7.
+ minor documentation cleanup.
+ update config.guess, config.sub from
http://savannah.gnu.org/projects/config
(caveat - its maintainer put 2010 copyright date on files dated 2009)
20100102
+ minor improvement to tic's checking of similar SGR's to allow for the
most common case of SGR 0.
+ modify getmouse() to act as its documentation implied, returning on
each call the preceding event until none are left. When no more
events remain, it will return ERR.
20091227
+ change order of lookup in progs/tput.c, looking for terminfo data
first. This fixes a confusion between termcap "sg" and terminfo
"sgr" or "sgr0", originally from 990123 changes, but exposed by
20091114 fixes for hashing. With this change, only "dl" and "ed" are
ambiguous (Mandriva #56272).
20091226
+ add bterm terminfo entry, based on bogl 0.1.18 -TD
+ minor fix to rxvt+pcfkeys terminfo entry -TD
+ build-fixes for Ada95 tree for gnat 4.4 "style".
20091219
+ remove old check in mvderwin() which prevented moving a derived
window whose origin happened to coincide with its parent's origin
(report by Katarina Machalkova).
+ improve test/ncurses.c to put mouse droppings in the proper window.
+ update minix terminfo entry -TD
+ add bw (auto-left-margin) to nsterm* entries (Benjamin Sittler)
20091212
+ correct transfer of multicolumn characters in multirow
field_buffer(), which stopped at the end of the first row due to
filling of unused entries in a cchar_t array with nulls.
+ updated nsterm* entries (Benjamin Sittler, Emanuele Giaquinta)
+ modify _nc_viscbuf2() and _tracecchar_t2() to show wide-character
nulls.
+ use strdup() in set_menu_mark(), restore .marklen struct member on
failure.
+ eliminate clause 3 from the UCB copyrights in read_termcap.c and
tset.c per
ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
(patch by Nicholas Marriott).
+ replace a malloc in tic.c with strdup, checking for failure (patch by
Nicholas Marriott).
+ update config.guess, config.sub from
http://savannah.gnu.org/projects/config
20091205
+ correct layout of working window used to extract data in
wide-character configured by set_field_buffer (patch by Rafael
Garrido Fernandez)
+ improve some limit-checks related to filename length in reading and
writing terminfo entries.
+ ensure that filename is always filled in when attempting to read
a terminfo entry, so that infocmp can report the filename (patch
by Nicholas Marriott).
20091128
+ modify mk-1st.awk to allow tinfo library to be built when term-driver
is enabled.
+ add error-check to configure script to ensure that sp-funcs is
enabled if term-driver is, since some internal interfaces rely upon
this.
20091121
+ fix case where progs/tput is used while sp-funcs is configure; this
requires save/restore of out-character function from _nc_prescreen
rather than the SCREEN structure (report by Charles Wilson).
+ fix typo in man/curs_trace.3x which caused incorrect symbolic links
+ improved configure macros CF_GCC_ATTRIBUTES, CF_PROG_LINT.
20091114
+ updated man/curs_trace.3x
+ limit hashing for termcap-names to 2-characters (Ubuntu #481740).
+ change a variable name in lib_newwin.c to make it clearer which
value is being freed on error (patch by Nicholas Marriott).
20091107
+ improve test/ncurses.c color-cycling test by reusing attribute-
and color-cycling logic from the video-attributes screen.
+ add ifdef'd with NCURSES_INTEROP_FUNCS experimental bindings in form
library which help make it compatible with interop applications
(patch by Juergen Pfeifer).
+ add configure option --enable-interop, for integrating changes
for generic/interop support to form-library by Juergen Pfeifer
20091031
+ modify use of $CC environment variable which is defined by X/Open
as a curses feature, to ignore it if it is not a single character
(prompted by discussion with Benjamin C W Sittler).
+ add START_TRACE in slk_init
+ fix a regression in _nc_ripoffline which made test/ncurses.c not show
soft-keys, broken in 20090927 merging.
+ change initialization of "hidden" flag for soft-keys from true to
false, broken in 20090704 merging (Ubuntu #464274).
+ update nsterm entries (patch by Benjamin C W Sittler, prompted by
discussion with Fabian Groffen in GenToo #206201).
+ add test/xterm-256color.dat
20091024
+ quiet some pedantic gcc warnings.
+ modify _nc_wgetch() to check for a -1 in the fifo, e.g., after a
SIGWINCH, and discard that value, to avoid confusing application
(patch by Eygene Ryabinkin, FreeBSD #136223).
20091017
+ modify handling of $PKG_CONFIG_LIBDIR to use only the first item in
a possibly colon-separated list (Debian #550716).
20091010
+ supply a null-terminator to buffer in _nc_viswibuf().
+ fix a sign-extension bug in unget_wch() (report by Mike Gran).
+ minor fixes to error-returns in default function for tputs, as well
as in lib_screen.c
20091003
+ add WACS_xxx definitions to wide-character configuration for thick-
and double-lines (discussion with Slava Zanko).
+ remove unnecessary kcan assignment to ^C from putty (Sven Joachim)
+ add ccc and initc capabilities to xterm-16color -TD
> patch by Benjamin C W Sittler:
+ add linux-16color
+ correct initc capability of linux-c-nc end-of-range
+ similar change for dg+ccc and dgunix+ccc
20090927
+ move leak-checking for comp_captab.c into _nc_leaks_tinfo() since
that module since 20090711 is in libtinfo.
+ add configure option --enable-term-driver, to allow compiling with
terminal-driver. That is used in MinGW port, and (being somewhat
more complicated) is an experimental alternative to the conventional
termlib internals. Currently, it requires the sp-funcs feature to
be enabled.
+ completed integrating "sp-funcs" by Juergen Pfeifer in ncurses
library (some work remains for forms library).
20090919
+ document return code from define_key (report by Mike Gran).
+ make some symbolic links in the terminfo directory-tree shorter
(patch by Daniel Jacobowitz, forwarded by Sven Joachim).).
+ fix some groff warnings in terminfo.5, etc., from recent Debian
changes.
+ change ncv and op capabilities in sun-color terminfo entry to match
Sun's entry for this (report by Laszlo Peter).
+ improve interix smso terminfo capability by using reverse rather than
bold (report by Kristof Zelechovski).
20090912
+ add some test programs (and make these use the same special keys
by sharing linedata.h functions):
test/test_addstr.c
test/test_addwstr.c
test/test_addchstr.c
test/test_add_wchstr.c
+ correct internal _nc_insert_ch() to use _nc_insert_wch() when
inserting wide characters, since the wins_wch() function that it used
did not update the cursor position (report by Ciprian Craciun).
20090906
+ fix typo s/is_timeout/is_notimeout/ which made "man is_notimeout" not
work.
+ add null-pointer checks to other opaque-functions.
+ add is_pad() and is_subwin() functions for opaque access to WINDOW
(discussion with Mark Dickinson).
+ correct merge to lib_newterm.c, which broke when sp-funcs was
enabled.
20090905
+ build-fix for building outside source-tree (report by Sven Joachim).
+ fix Debian lintian warning for man/tabs.1 by making section number
agree with file-suffix (report by Sven Joachim).
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
20090829
+ workaround for bug in g++ 4.1-4.4 warnings for wattrset() macro on
amd64 (Debian #542031).
+ fix typo in curs_mouse.3x (Debian #429198).
20090822
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
20090815
+ correct use of terminfo capabilities for initializing soft-keys,
broken in 20090510 merging.
+ modify wgetch() to ensure it checks SIGWINCH when it gets an error
in non-blocking mode (patch by Clemens Ladisch).
+ use PATH_SEPARATOR symbol when substituting into run_tic.sh, to
help with builds on non-Unix platforms such as OS/2 EMX.
+ modify scripting for misc/run_tic.sh to test configure script's
$cross_compiling variable directly rather than comparing host/build
compiler names (prompted by comment in GenToo #249363).
+ fix configure script option --with-database, which was coded as an
enable-type switch.
+ build-fixes for --srcdir (report by Frederic L W Meunier).
20090808
+ separate _nc_find_entry() and _nc_find_type_entry() from
implementation details of hash function.
20090803
+ add tabs.1 to man/man_db.renames
+ modify lib_addch.c to compensate for removal of wide-character test
from unctrl() in 20090704 (Debian #539735).
20090801
+ improve discussion in INSTALL for use of system's tic/infocmp for
cross-compiling and building fallbacks.
+ modify test/demo_termcap.c to correspond better to options in
test/demo_terminfo.c
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
+ fix logic for 'V' in test/ncurses.c tests f/F.
20090728
+ correct logic in tigetnum(), which caused tput program to treat all
string capabilities as numeric (report by Rajeev V Pillai,
cf: 20090711).
20090725
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
20090718
+ fix a null-pointer check in _nc_format_slks() in lib_slk.c, from
20090704 changes.
+ modify _nc_find_type_entry() to use hashing.
+ make CCHARW_MAX value configurable, noting that changing this would
change the size of cchar_t, and would be ABI-incompatible.
+ modify test-programs, e.g,. test/view.c, to address subtle
differences between Tru64/Solaris and HPUX/AIX getcchar() return
values.
+ modify length returned by getcchar() to count the trailing null
which is documented in X/Open (cf: 20020427).
+ fixes for test programs to build/work on HPUX and AIX, etc.
20090711
+ improve performance of tigetstr, etc., by using hashing code from tic.
+ minor fixes for memory-leak checking.
+ add test/demo_terminfo, for comparison with demo_termcap
20090704
+ remove wide-character checks from unctrl() (patch by Clemens Ladisch).
+ revise wadd_wch() and wecho_wchar() to eliminate dependency on
unctrl().
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
20090627
+ update llib-lncurses[wt] to use sp-funcs.
+ various code-fixes to build/work with --disable-macros configure
option.
+ add several new files from Juergen Pfeifer which will be used when
integration of "sp-funcs" is complete. This includes a port to
MinGW.
20090613
+ move definition for NCURSES_WRAPPED_VAR back to ncurses_dll.h, to
make includes of term.h without curses.h work (report by "Nix").
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
20090607
+ fix a regression in lib_tputs.c, from ongoing merges.
20090606
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
20090530
+ fix an infinite recursion when adding a legacy-coding 8-bit value
using insch() (report by Clemens Ladisch).
+ free home-terminfo string in del_curterm() (patch by Dan Weber).
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
20090523
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
20090516
+ work around antique BSD game's manipulation of stdscr, etc., versus
SCREEN's copy of the pointer (Debian #528411).
+ add a cast to wattrset macro to avoid compiler warning when comparing
its result against ERR (adapted from patch by Matt Kraii, Debian
#528374).
20090510
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
20090502
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
+ add vwmterm terminfo entry (patch by Bryan Christ).
20090425
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
20090419
+ build fix for _nc_free_and_exit() change in 20090418 (report by
Christian Ebert).
20090418
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
20090411
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
This change finishes merging for menu and panel libraries, does
part of the form library.
20090404
+ suppress configure check for static/dynamic linker flags for gcc on
Darwin (report by Nelson Beebe).
20090328
+ extend ansi.sys pfkey capability from kf1-kf10 to kf1-kf48, moving
function key definitions from emx-base for consistency -TD
+ correct missing final 'p' in pfkey capability of ansi.sys-old (report
by Kalle Olavi Niemitalo).
+ improve test/ncurses.c 'F' test, show combining characters in color.
+ quiet a false report by cppcheck in c++/cursesw.cc by eliminating
a temporary variable.
+ use _nc_doalloc() rather than realloc() in a few places in ncurses
library to avoid leak in out-of-memory condition (reports by William
Egert and Martin Ettl based on cppcheck tool).
+ add --with-ncurses-wrap-prefix option to test/configure (discussion
with Charles Wilson).
+ use ncurses*-config scripts if available for test/configure.
+ update test/aclocal.m4 and test/configure
> patches by Charles Wilson:
+ modify CF_WITH_LIBTOOL configure check to allow unreleased libtool
version numbers (e.g. which include alphabetic chars, as well as
digits, after the final '.').
+ improve use of -no-undefined option for libtool by setting an
intermediate variable LT_UNDEF in the configure script, and then
using that in the libtool link-commands.
+ fix an missing use of NCURSES_PUBLIC_VAR() in tinfo/MKcodes.awk
from 20090321 changes.
+ improve mk-1st.awk script by writing separate cases for the
LIBTOOL_LINK command, depending on which library (ncurses, ticlib,
termlib) is to be linked.
+ modify configure.in to allow broken-linker configurations, not just
enable-reentrant, to set public wrap prefix.
20090321
+ add TICS_LIST and SHLIB_LIST to allow libtool 2.2.6 on Cygwin to
build with tic and term libraries (patch by Charles Wilson).
+ add -no-undefined option to libtool for Cygwin, MinGW, U/Win and AIX
(report by Charles Wilson).
+ fix definition for c++/Makefile.in's SHLIB_LIST, which did not list
the form, menu or panel libraries (patch by Charles Wilson).
+ add configure option --with-wrap-prefix to allow setting the prefix
for functions used to wrap global variables to something other than
"_nc_" (discussion with Charles Wilson).
20090314
+ modify scripts to generate ncurses*-config and pc-files to add
dependency for tinfo library (patch by Charles Wilson).
+ improve comparison of program-names when checking for linked flavors
such as "reset" by ignoring the executable suffix (reports by Charles
Wilson, Samuel Thibault and Cedric Bretaudeau on Cygwin mailing
list).
+ suppress configure check for static/dynamic linker flags for gcc on
Solaris 10, since gcc is confused by absence of static libc, and
does not switch back to dynamic mode before finishing the libraries
(reports by Joel Bertrand, Alan Pae).
+ minor fixes to Intel compiler warning checks in configure script.
+ modify _nc_leaks_tinfo() so leak-checking in test/railroad.c works.
+ modify set_curterm() to make broken-linker configuration work with
changes from 20090228 (report by Charles Wilson).
20090228
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
+ modify declaration of cur_term when broken-linker is used, but
enable-reentrant is not, to match pre-5.7 (report by Charles Wilson).
20090221
+ continue integrating "sp-funcs" by Juergen Pfeifer (incomplete).
20090214
+ add configure script --enable-sp-funcs to enable the new set of
extended functions.
+ start integrating patches by Juergen Pfeifer:
+ add extended functions which specify the SCREEN pointer for several
curses functions which use the global SP (these are incomplete;
some internals work is needed to complete these).
+ add special cases to configure script for MinGW port.
20090207
+ update several configure macros from lynx changes
+ append (not prepend) to CFLAGS/CPPFLAGS
+ change variable from PATHSEP to PATH_SEPARATOR
+ improve install-rules for pc-files (patch by Miroslav Lichvar).
+ make it work with $DESTDIR
+ create the pkg-config library directory if needed.
20090124
+ modify init_pair() to allow caller to create extra color pairs beyond
the color_pairs limit, which use default colors (request by Emanuele
Giaquinta).
+ add misc/terminfo.tmp and misc/*.pc to "sources" rule.
+ fix typo "==" where "=" is needed in ncurses-config.in and
gen-pkgconfig.in files (Debian #512161).
20090117
+ add -shared option to MK_SHARED_LIB when -Bsharable is used, for
*BSD's, without which "main" might be one of the shared library's
dependencies (report/analysis by Ken Dickey).
+ modify waddch_literal(), updating line-pointer after a multicolumn
character is found to not fit on the current row, and wrapping is
done. Since the line-pointer was not updated, the wrapped
multicolumn character was written to the beginning of the current row
(cf: 20041023, reported by "Nick" regarding problem with ncmpc
http://musicpd.org/mantis/bug_view_page.php?bug_id=1930).
20090110
+ add screen.Eterm terminfo entry (GenToo #124887) -TD
+ modify adacurses-config to look for ".ali" files in the adalib
directory.
+ correct install for Ada95, which omitted libAdaCurses.a used in
adacurses-config
+ change install for adacurses-config to provide additional flavors
such as adacursesw-config, for ncursesw (GenToo #167849).
20090105
+ remove undeveloped feature in ncurses-config.in for setting
prefix variable.
+ recent change to ncurses-config.in did not take into account the
--disable-overwrite option, which sets $includedir to the
subdirectory and using just that for a -I option does not work - fix
(report by Frederic L W Meunier).
20090104
+ modify gen-pkgconfig.in to eliminate a dependency on rpath when
deciding whether to add $LIBS to --libs output; that should be shown
for the ncurses and tinfo libraries without taking rpath into
account.
+ fix an overlooked change from $AR_OPTS to $ARFLAGS in mk-1st.awk,
used in static libraries (report by Marty Jack).
20090103
+ add a configure-time check to pick a suitable value for
CC_SHARED_OPTS for Solaris (report by Dagobert Michelsen).
+ add configure --with-pkg-config and --enable-pc-files options, along
with misc/gen-pkgconfig.in which can be used to generate ".pc" files
for pkg-config (request by Jan Engelhardt).
+ use $includedir symbol in misc/ncurses-config.in, add --includedir
option.
+ change makefiles to use $ARFLAGS rather than $AR_OPTS, provide a
configure check to detect whether a "-" is needed before "ar"
options.
+ update config.guess, config.sub from
http://savannah.gnu.org/projects/config
20081227
+ modify mk-1st.awk to work with extra categories for tinfo library.
+ modify configure script to allow building shared libraries with gcc
on AIX 5 or 6 (adapted from patch by Lital Natan).
20081220
+ modify to omit the opaque-functions from lib_gen.o when
--disable-ext-funcs is used.
+ add test/clip_printw.c to illustrate how to use printw without
wrapping.
+ modify ncurses 'F' test to demo wborder_set() with colored lines.
+ modify ncurses 'f' test to demo wborder() with colored lines.
20081213
+ add check for failure to open hashed-database needed for db4.6
(GenToo #245370).
+ corrected --without-manpages option; previous change only suppressed
the auxiliary rules install.man and uninstall.man
+ add case for FreeMINT to configure macro CF_XOPEN_SOURCE (patch from
GenToo #250454).
+ fixes from NetBSD port at
http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/devel/ncurses/patches
patch-ac (build-fix for DragonFly)
patch-ae (use INSTALL_SCRIPT for installing misc/ncurses*-config).
+ improve configure script macros CF_HEADER_PATH and CF_LIBRARY_PATH
by adding CFLAGS, CPPFLAGS and LDFLAGS, LIBS values to the
search-lists.
+ correct title string for keybound manpage (patch by Frederic Culot,
OpenBSD documentation/6019),
20081206
+ move del_curterm() call from _nc_freeall() to _nc_leaks_tinfo() to
work for progs/clear, progs/tabs, etc.
+ correct buffer-size after internal resizing of wide-character
set_field_buffer(), broken in 20081018 changes (report by Mike Gran).
+ add "-i" option to test/filter.c to tell it to use initscr() rather
than newterm(), to investigate report on comp.unix.programmer that
ncurses would clear the screen in that case (it does not - the issue
was xterm's alternate screen feature).
+ add check in mouse-driver to disable connection if GPM returns a
zero, indicating that the connection is closed (Debian #506717,
adapted from patch by Samuel Thibault).
20081129
+ improve a workaround in adding wide-characters, when a control
character is found. The library (cf: 20040207) uses unctrl() to
obtain a printable version of the control character, but was not
passing color or video attributes.
+ improve test/ncurses.c 'a' test, using unctrl() more consistently to
display meta-characters.
+ turn on _XOPEN_CURSES definition in curses.h
+ add eterm-color entry (report by Vincent Lefevre) -TD
+ correct use of key_name() in test/ncurses.c 'A' test, which only
displays wide-characters, not key-codes since 20070612 (report by
Ricardo Cantu).
20081122
+ change _nc_has_mouse() to has_mouse(), reflect its use in C++ and
Ada95 (patch by Juergen Pfeifer).
+ document in TO-DO an issue with Cygwin's package for GNAT (report
by Mike Dennison).
+ improve error-checking of command-line options in "tabs" program.
20081115
+ change several terminfo entries to make consistent use of ANSI
clear-all-tabs -TD
+ add "tabs" program (prompted by Debian #502260).
+ add configure --without-manpages option (request by Mike Frysinger).
20081102 5.7 release for upload to ftp.gnu.org
20081025
+ add a manpage to discuss memory leaks.
+ add support for shared libraries for QNX (other than libtool, which
does not work well on that platform).
+ build-fix for QNX C++ binding.
20081018
+ build-fixes for OS/2 EMX.
+ modify form library to accept control characters such as newline
in set_field_buffer(), which is compatible with Solaris (report by
Nit Khair).
+ modify configure script to assume --without-hashed-db when
--disable-database is used.
+ add "-e" option in ncurses/Makefile.in when generating source-files
to force earlier exit if the build environment fails unexpectedly
(prompted by patch by Adrian Bunk).
+ change configure script to use CF_UTF8_LIB, improved variant of
CF_LIBUTF8.
20081012
+ add teraterm4.59 terminfo entry, use that as primary teraterm entry, rename
original to teraterm2.3 -TD
+ update "gnome" terminfo to 2.22.3 -TD
+ update "konsole" terminfo to 1.6.6, needs today's fix for tic -TD
+ add "aterm" terminfo -TD
+ add "linux2.6.26" terminfo -TD
+ add logic to tic for cancelling strings in user-defined capabilities,
overlooked til now.
20081011
+ regenerated html documentation.
+ add -m and -s options to test/keynames.c and test/key_names.c to test
the meta() function with keyname() or key_name(), respectively.
+ correct return value of key_name() on error; it is null.
+ document some unresolved issues for rpath and pthreads in TO-DO.
+ fix a missing prototype for ioctl() on OpenBSD in tset.c
+ add configure option --disable-tic-depends to make explicit whether
tic library depends on ncurses/ncursesw library, amends change from
20080823 (prompted by Debian #501421).
20081004
+ some build-fixes for configure --disable-ext-funcs (incomplete, but
works for C/C++ parts).
+ improve configure-check for awks unable to handle large strings, e.g.
AIX 5.1 whose awk silently gives up on large printf's.
20080927
+ fix build for --with-dmalloc by workaround for redefinition of
strndup between string.h and dmalloc.h
+ fix build for --disable-sigwinch
+ add environment variable NCURSES_GPM_TERMS to allow override to use
GPM on terminals other than "linux", etc.
+ disable GPM mouse support when $TERM does not happen to contain
"linux", since Gpm_Open() no longer limits its assertion to terminals
that it might handle, e.g., within "screen" in xterm.
+ reset mouse file-descriptor when unloading GPM library (report by
Miroslav Lichvar).
+ fix build for --disable-leaks --enable-widec --with-termlib
> patch by Juergen Pfeifer:
+ use improved initialization for soft-label keys in Ada95 sample code.
+ discard internal symbol _nc_slk_format (unused since 20080112).
+ move call of slk_paint_info() from _nc_slk_initialize() to
slk_intern_refresh(), improving initialization.
20080925
+ fix bug in mouse code for GPM from 20080920 changes (reported in
Debian #500103, also Miroslav Lichvar).
20080920
+ fix shared-library rules for cygwin with tic- and tinfo-libraries.
+ fix a memory leak when failure to connect to GPM.
+ correct check for notimeout() in wgetch() (report on linux.redhat
newsgroup by FurtiveBertie).
+ add an example warning-suppression file for valgrind,
misc/ncurses.supp (based on example from Reuben Thomas)
20080913
+ change shared-library configuration for OpenBSD, make rpath work.
+ build-fixes for using libutf8, e.g., on OpenBSD 3.7
20080907
+ corrected fix for --enable-weak-symbols (report by Frederic L W
Meunier).
20080906
+ corrected gcc options for building shared libraries on IRIX64.
+ add configure check for awk programs unable to handle big-strings,
use that to improve the default for --enable-big-strings option.
+ makefile-fixes for --enable-weak-symbols (report by Frederic L W
Meunier).
+ update test/configure script.
+ adapt ifdef's from library to make test/view.c build when mbrtowc()
is unavailable, e.g., with HPUX 10.20.
+ add configure check for wcsrtombs, mbsrtowcs, which are used in
test/ncurses.c, and use wcstombs, mbstowcs instead if available,
fixing build of ncursew for HPUX 11.00
20080830
+ fixes to make Ada95 demo_panels() example work.
+ modify Ada95 'rain' test program to accept keyboard commands like the
C-version.
+ modify BeOS-specific ifdef's to build on Haiku (patch by Scott
Mccreary).
+ add configure-check to see if the std namespace is legal for cerr
and endl, to fix a build issue with Tru64.
+ consistently use NCURSES_BOOL in lib_gen.c
+ filter #line's from lib_gen.c
+ change delimiter in MKlib_gen.sh from '%' to '@', to avoid
substitution by IBM xlc to '#' as part of its extensions to digraphs.
+ update config.guess, config.sub from
http://savannah.gnu.org/projects/config
(caveat - its maintainer removed support for older Linux systems).
20080823
+ modify configure check for pthread library to work with OSF/1 5.1,
which uses #define's to associate its header and library.
+ use pthread_mutexattr_init() for initializing pthread_mutexattr_t,
makes threaded code work on HPUX 11.23
+ fix a bug in demo_menus in freeing menus (cf: 20080804).
+ modify configure script for the case where tic library is used (and
possibly renamed) to remove its dependency upon ncurses/ncursew
library (patch by Dr Werner Fink).
+ correct manpage for menu_fore() which gave wrong default for
the attribute used to display a selected entry (report by Mike Gran).
+ add Eterm-256color, Eterm-88color and rxvt-88color (prompted by
Debian #495815) -TD
20080816
+ add configure option --enable-weak-symbols to turn on new feature.
+ add configure-check for availability of weak symbols.
+ modify linkage with pthread library to use weak symbols so that
applications not linked to that library will not use the mutexes,
etc. This relies on gcc, and may be platform-specific (patch by Dr
Werner Fink).
+ add note to INSTALL to document limitation of renaming of tic library
using the --with-ticlib configure option (report by Dr Werner Fink).
+ document (in manpage) why tputs does not detect I/O errors (prompted
by comments by Samuel Thibault).
+ fix remaining warnings from Klocwork report.
20080804
+ modify _nc_panelhook() data to account for a permanent memory leak.
+ fix memory leaks in test/demo_menus
+ fix most warnings from Klocwork tool (report by Larry Zhou).
+ modify configure script CF_XOPEN_SOURCE macro to add case for
"dragonfly" from xterm #236 changes.
+ modify configure script --with-hashed-db to let $LIBS override the
search for the db library (prompted by report by Samson Pierre).
20080726
+ build-fixes for gcc 4.3.1 (changes to gnat "warnings", and C inlining
thresholds).
20080713
+ build-fix (reports by Christian Ebert, Funda Wang).
20080712
+ compiler-warning fixes for Solaris.
20080705
+ use NCURSES_MOUSE_MASK() in definition of BUTTON_RELEASE(), etc., to
make those work properly with the "--enable-ext-mouse" configuration
(cf: 20050205).
+ improve documentation of build-cc options in INSTALL.
+ work-around a bug in gcc 4.2.4 on AIX, which does not pass the
-static/-dynamic flags properly to linker, causing test/bs to
not link.
20080628
+ correct some ifdef's needed for the broken-linker configuration.
+ make debugging library's $BAUDRATE feature work for termcap
interface.
+ make $NCURSES_NO_PADDING feature work for termcap interface (prompted
by comment on FreeBSD mailing list).
+ add screen.mlterm terminfo entry -TD
+ improve mlterm and mlterm+pcfkeys terminfo entries -TD
20080621
+ regenerated html documentation.
+ expand manpage description of parameters for form_driver() and
menu_driver() (prompted by discussion with Adam Spragg).
+ add null-pointer checks for cur_term in baudrate() and
def_shell_mode(), def_prog_mode()
+ fix some memory leaks in delscreen() and wide acs.
20080614
+ modify test/ditto.c to illustrate multi-threaded use_screen().
+ change CC_SHARED_OPTS from -KPIC to -xcode=pic32 for Solaris.
+ add "-shared" option to MK_SHARED_LIB for gcc on Solaris (report
by Poor Yorick).
20080607
+ finish changes to wgetch(), making it switch as needed to the
window's actual screen when calling wrefresh() and wgetnstr(). That
allows wgetch() to get used concurrently in different threads with
some minor restrictions, e.g., the application should not delete a
window which is being used in a wgetch().
+ simplify mutex's, combining the window- and screen-mutex's.
20080531
+ modify wgetch() to use the screen which corresponds to its window
parameter rather than relying on SP; some dependent functions still
use SP internally.
+ factor out most use of SP in lib_mouse.c, using parameter.
+ add internal _nc_keyname(), replacing keyname() to associate with a
particular SCREEN rather than the global SP.
+ add internal _nc_unctrl(), replacing unctrl() to associate with a
particular SCREEN rather than the global SP.
+ add internal _nc_tracemouse(), replacing _tracemouse() to eliminate
its associated global buffer _nc_globals.tracemse_buf now in SCREEN.
+ add internal _nc_tracechar(), replacing _tracechar() to use SCREEN in
preference to the global _nc_globals.tracechr_buf buffer.
20080524
+ modify _nc_keypad() to make it switch temporarily as needed to the
screen which must be updated.
+ wrap cur_term variable to help make _nc_keymap() thread-safe, and
always set the screen's copy of this variable in set_curterm().
+ restore curs_set() state after endwin()/refresh() (report/patch
Miroslav Lichvar)
20080517
+ modify configure script to note that --enable-ext-colors and
--enable-ext-mouse are not experimental, but extensions from
the ncurses ABI 5.
+ corrected manpage description of setcchar() (discussion with
Emanuele Giaquinta).
+ fix for adding a non-spacing character at the beginning of a line
(report/patch by Miroslav Lichvar).
20080503
+ modify screen.* terminfo entries using new screen+fkeys to fix
overridden keys in screen.rxvt (Debian #478094) -TD
+ modify internal interfaces to reduce wgetch()'s dependency on the
global SP.
+ simplify some loops with macros each_screen(), each_window() and
each_ripoff().
20080426
+ continue modifying test/ditto.c toward making it demonstrate
multithreaded use_screen(), using fifos to pass data between screens.
+ fix typo in form.3x (report by Mike Gran).
20080419
+ add screen.rxvt terminfo entry -TD
+ modify tic -f option to format spaces as \s to prevent them from
being lost when that is read back in unformatted strings.
+ improve test/ditto.c, using a "talk"-style layout.
20080412
+ change test/ditto.c to use openpty() and xterm.
+ add locks for copywin(), dupwin(), overlap(), overlay() on their
window parameters.
+ add locks for initscr() and newterm() on updates to the SCREEN
pointer.
+ finish table in curs_thread.3x manpage.
20080405
+ begin table in curs_thread.3x manpage describing the scope of data
used by each function (or symbol) for threading analysis.
+ add null-pointer checks to setsyx() and getsyx() (prompted by
discussion by Martin v. Lowis and Jeroen Ruigrok van der Werven on
python-dev2 mailing list).
20080329
+ add null-pointer checks in set_term() and delscreen().
+ move _nc_windows into _nc_globals, since windows can be pads, which
are not associated with a particular screen.
+ change use_screen() to pass the SCREEN* parameter rather than
stdscr to the callback function.
+ force libtool to use tag for 'CC' in case it does not detect this,
e.g., on aix when using CC=powerpc-ibm-aix5.3.0.0-gcc
(report/patch by Michael Haubenwallner).
+ override OBJEXT to "lo" when building with libtool, to work on
platforms such as AIX where libtool may use a different suffix for
the object files than ".o" (report/patch by Michael Haubenwallner).
+ add configure --with-pthread option, for building with the POSIX
thread library.
20080322
+ fill in extended-color pair two more places in wbkgrndset() and
waddch_nosync() (prompted by Sedeno's patch).
+ fill in extended-color pair in _nc_build_wch() to make colors work
for wide-characters using extended-colors (patch by Alejandro R
Sedeno).
+ add x/X toggles to ncurses.c C color test to test/demo
wide-characters with extended-colors.
+ add a/A toggles to ncurses.c c/C color tests.
+ modify test/ditto.c to use use_screen().
+ finish modifying test/rain.c to demonstrate threads.
20080308
+ start modifying test/rain.c for threading demo.
+ modify test/ncurses.c to make 'f' test accept the f/F/b/F/</> toggles
that the 'F' accepts.
+ modify test/worm.c to show trail in reverse-video when other threads
are working concurrently.
+ fix a deadlock from improper nesting of mutexes for windowlist and
window.
20080301
+ fixes from 20080223 resolved issue with mutexes; change to use
recursive mutexes to fix memory leak in delwin() as called from
_nc_free_and_exit().
20080223
+ fix a size-difference in _nc_globals which caused hanging of mutex
lock/unlock when termlib was built separately.
20080216
+ avoid using nanosleep() in threaded configuration since that often
is implemented to suspend the entire process.
20080209
+ update test programs to build/work with various UNIX curses for
comparisons. This was to reinvestigate statement in X/Open Curses
that insnstr and winsnstr perform wrapping. None of the Unix-branded
implementations do this, as noted in manpage (cf: 20040228).
20080203
+ modify _nc_setupscreen() to set the legacy-coding value the same
for both narrow/wide models. It had been set only for wide model,
but is needed to make unctrl() work with locale in the narrow model.
+ improve waddch() and winsch() handling of EILSEQ from mbrtowc() by
using unctrl() to display illegal bytes rather than trying to append
further bytes to make up a valid sequence (reported by Andrey A
Chernov).
+ modify unctrl() to check codes in 128-255 range versus isprint().
If they are not printable, and locale was set, use a "M-" or "~"
sequence.
20080126
+ improve threading in test/worm.c (wrap refresh calls, and KEY_RESIZE
handling). Now it hangs in napms(), no matter whether nanosleep()
or poll() or select() are used on Linux.
20080119
+ fixes to build with --disable-ext-funcs
+ add manpage for use_window and use_screen.
+ add set_tabsize() and set_escdelay() functions.
20080112
+ remove recursive-mutex definitions, finish threading demo for worm.c
+ remove a redundant adjustment of lines in resizeterm.c's
adjust_window() which caused occasional misadjustment of stdscr when
softkeys were used.
20080105
+ several improvements to terminfo entries based on xterm #230 -TD
+ modify MKlib_gen.sh to handle keyname/key_name prototypes, so the
"link_test" builds properly.
+ fix for toe command-line options -u/-U to ensure filename is given.
+ fix allocation-size for command-line parsing in infocmp from 20070728
(report by Miroslav Lichvar)
+ improve resizeterm() by moving ripped-off lines, and repainting the
soft-keys (report by Katarina Machalkova)
+ add clarification in wclear's manpage noting that the screen will be
cleared even if a subwindow is cleared (prompted by Christer Enfors
question).
+ change test/ncurses.c soft-key tests to work with KEY_RESIZE.
20071222
+ continue implementing support for threading demo by adding mutex
for delwin().
20071215
+ add several functions to C++ binding which wrap C functions that
pass a WINDOW* parameter (request by Chris Lee).
20071201
+ add note about configure options needed for Berkeley database to the
INSTALL file.
+ improve checks for version of Berkeley database libraries.
+ amend fix for rpath to not modify LDFLAGS if the platform has no
applicable transformation (report by Christian Ebert, cf: 20071124).
20071124
+ modify configure option --with-hashed-db to accept a parameter which
is the install-prefix of a given Berkeley Database (prompted by
pierre4d2 comments).
+ rewrite wrapper for wcrtomb(), making it work on Solaris. This is
used in the form library to determine the length of the buffer needed
by field_buffer (report by Alfred Fung).
+ remove unneeded window-parameter from C++ binding for wresize (report
by Chris Lee).
20071117
+ modify the support for filesystems which do not support mixed-case to
generate 2-character (hexadecimal) codes for the lower-level of the
filesystem terminfo database (request by Michail Vidiassov).
+ add configure option --enable-mixed-case, to allow overriding the
configure script's check if the filesystem supports mixed-case
filenames.
+ add wresize() to C++ binding (request by Chris Lee).
+ define NCURSES_EXT_FUNCS and NCURSES_EXT_COLORS in curses.h to make
it simpler to tell if the extended functions and/or colors are
declared.
20071103
+ update memory-leak checks for changes to names.c and codes.c
+ correct acsc strings in h19, z100 (patch by Benjamin C W Sittler).
20071020
+ continue implementing support for threading demo by adding mutex
for use_window().
+ add mrxvt terminfo entry, add/fix xterm building blocks for modified
cursor keys -TD
+ compile with FreeBSD "contemporary" TTY interface (patch by
Rong-En Fan).
20071013
+ modify makefile rules to allow clear, tput and tset to be built
without libtic. The other programs (infocmp, tic and toe) rely on
that library.
+ add/modify null-pointer checks in several functions for SP and/or
the WINDOW* parameter (report by Thorben Krueger).
+ fixes for field_buffer() in formw library (see Redhat #310071,
patches by Miroslav Lichvar).
+ improve performance of NCURSES_CHAR_EQ code (patch by Miroslav
Lichvar).
+ update/improve mlterm and rxvt terminfo entries, e.g., for
the modified cursor- and keypad-keys -TD
20071006
+ add code to curses.priv.h ifdef'd with NCURSES_CHAR_EQ, which
changes the CharEq() macro to an inline function to allow comparing
cchar_t struct's without comparing gaps in a possibly unpacked
memory layout (report by Miroslav Lichvar).
20070929
+ add new functions to lib_trace.c to setup mutex's for the _tracef()
calls within the ncurses library.
+ for the reentrant model, move _nc_tputs_trace and _nc_outchars into
the SCREEN.
+ start modifying test/worm.c to provide threading demo (incomplete).
+ separated ifdef's for some BSD-related symbols in tset.c, to make
it compile on LynxOS (report by Greg Gemmer).
20070915
+ modify Ada95/gen/Makefile to use shlib script, to simplify building
shared-library configuration on platforms lacking rpath support.
+ build-fix for Ada95/src/Makefile to reflect changed dependency for
the terminal-interface-curses-aux.adb file which is now generated.
+ restructuring test/worm.c, for use_window() example.
20070908
+ add use_window() and use_screen() functions, to develop into support
for threaded library (incomplete).
+ fix typos in man/curs_opaque.3x which kept the install script from
creating symbolic links to two aliases created in 20070818 (report by
Rong-En Fan).
20070901
+ remove a spurious newline from output of html.m4, which caused links
for Ada95 html to be incorrect for the files generated using m4.
+ start investigating mutex's for SCREEN manipulation (incomplete).
+ minor cleanup of codes.c/names.c for --enable-const
+ expand/revise "Routine and Argument Names" section of ncurses manpage
to address report by David Givens in newsgroup discussion.
+ fix interaction between --without-progs/--with-termcap configure
options (report by Michail Vidiassov).
+ fix typo in "--disable-relink" option (report by Michail Vidiassov).
20070825
+ fix a sign-extension bug in infocmp's repair_acsc() function
(cf: 971004).
+ fix old configure script bug which prevented "--disable-warnings"
option from working (patch by Mike Frysinger).
20070818
+ add 9term terminal description (request by Juhapekka Tolvanen) -TD
+ modify comp_hash.c's string output to avoid misinterpreting a null
"\0" followed by a digit.
+ modify MKnames.awk and MKcodes.awk to support big-strings.
This only applies to the cases (broken linker, reentrant) where
the corresponding arrays are accessed via wrapper functions.
+ split MKnames.awk into two scripts, eliminating the shell redirection
which complicated the make process and also the bogus timestamp file
which was introduced to fix "make -j".
+ add test/test_opaque.c, test/test_arrays.c
+ add wgetscrreg() and wgetparent() for applications that may need it
when NCURSES_OPAQUE is defined (prompted by Bryan Christ).
20070812
+ amend treatment of infocmp "-r" option to retain the 1023-byte limit
unless "-T" is given (cf: 981017).
+ modify comp_captab.c generation to use big-strings.
+ make _nc_capalias_table and _nc_infoalias_table private accessed via
_nc_get_alias_table() since the tables are used only within the tic
library.
+ modify configure script to skip Intel compiler in CF_C_INLINE.
+ make _nc_info_hash_table and _nc_cap_hash_table private accessed via
_nc_get_hash_table() since the tables are used only within the tic
library.
20070728
+ make _nc_capalias_table and _nc_infoalias_table private, accessed via
_nc_get_alias_table() since they are used only by parse_entry.c
+ make _nc_key_names private since it is used only by lib_keyname.c
+ add --disable-big-strings configure option to control whether
unctrl.c is generated using the big-string optimization - which may
use strings longer than supported by a given compiler.
+ reduce relocation tables for tic, infocmp by changing type of
internal hash tables to short, and make those private symbols.
+ eliminate large fixed arrays from progs/infocmp.c
20070721
+ change winnstr() to stop at the end of the line (cf: 970315).
+ add test/test_get_wstr.c
+ add test/test_getstr.c
+ add test/test_inwstr.c
+ add test/test_instr.c
20070716
+ restore a call to obtain screen-size in _nc_setupterm(), which
is used in tput and other non-screen applications via setupterm()
(Debian #433357, reported by Florent Bayle, Christian Ohm,
cf: 20070310).
20070714
+ add test/savescreen.c test-program
+ add check to trace-file open, if the given name is a directory, add
".log" to the name and try again.
+ add konsole-256color entry -TD
+ add extra gcc warning options from xterm.
+ minor fixes for ncurses/hashmap test-program.
+ modify configure script to quiet c++ build with libtool when the
--disable-echo option is used.
+ modify configure script to disable ada95 if libtool is selected,
writing a warning message (addresses FreeBSD #114493).
+ update config.guess, config.sub
20070707
+ add continuous-move "M" to demo_panels to help test refresh changes.
+ improve fix for refresh of window on top of multi-column characters,
taking into account some split characters on left/right window
boundaries.
20070630
+ add "widec" row to _tracedump() output to help diagnose remaining
problems with multi-column characters.
+ partial fix for refresh of window on top of multi-column characters
which are partly overwritten (report by Sadrul H Chowdhury).
+ ignore A_CHARTEXT bits in vidattr() and vid_attr(), in case
multi-column extension bits are passed there.
+ add setlocale() call to demo_panels.c, needed for wide-characters.
+ add some output flags to _nc_trace_ttymode to help diagnose a bug
report by Larry Virden, i.e., ONLCR, OCRNL, ONOCR and ONLRET,
20070623
+ add test/demo_panels.c
+ implement opaque version of setsyx() and getsyx().
20070612
+ corrected xterm+pcf2 terminfo modifiers for F1-F4, to match xterm
#226 -TD
+ split-out key_name() from MKkeyname.awk since it now depends upon
wunctrl() which is not in libtinfo (report by Rong-En Fan).
20070609
+ add test/key_name.c
+ add stdscr cases to test/inchs.c and test/inch_wide.c
+ update test/configure
+ correct formatting of DEL (0x7f) in _nc_vischar().
+ null-terminate result of wunctrl().
+ add null-pointer check in key_name() (report by Andreas Krennmair,
cf: 20020901).
20070602
+ adapt mouse-handling code from menu library in form-library
(discussion with Clive Nicolson).
+ add a modification of test/dots.c, i.e., test/dots_mvcur.c to
illustrate how to use mvcur().
+ modify wide-character flavor of SetAttr() to preserve the
WidecExt() value stored in the .attr field, e.g., in case it
is overwritten by chgat (report by Aleksi Torhamo).
+ correct buffer-size for _nc_viswbuf2n() (report by Aleksi Torhamo).
+ build-fixes for Solaris 2.6 and 2.7 (patch by Peter O'Gorman).
20070526
+ modify keyname() to use "^X" form only if meta() has been called, or
if keyname() is called without initializing curses, e.g., via
initscr() or newterm() (prompted by LinuxBase #1604).
+ document some portability issues in man/curs_util.3x
+ add a shadow copy of TTY buffer to _nc_prescreen to fix applications
broken by moving that data into SCREEN (cf: 20061230).
20070512
+ add 'O' (wide-character panel test) in ncurses.c to demonstrate a
problem reported by Sadrul H Chowdhury with repainting parts of
a fullwidth cell.
+ modify slk_init() so that if there are preceding calls to
ripoffline(), those affect the available lines for soft-keys (adapted
from patch by Clive Nicolson).
+ document some portability issues in man/curs_getyx.3x
20070505
+ fix a bug in Ada95/samples/ncurses which caused a variable to
become uninitialized in the "b" test.
+ fix Ada95/gen/Makefile.in adahtml rule to account for recent
movement of files, fix a few incorrect manpage references in the
generated html.
+ add Ada95 binding to _nc_freeall() as Curses_Free_All to help with
memory-checking.
+ correct some functions in Ada95 binding which were using return value
from C where none was returned: idcok(), immedok() and wtimeout().
+ amend recent changes for Ada95 binding to make it build with
Cygwin's linker, e.g., with configure options
--enable-broken-linker --with-ticlib
20070428
+ add a configure check for gcc's options for inlining, use that to
quiet a warning message where gcc's default behavior changed from
3.x to 4.x.
+ improve warning message when checking if GPM is linked to curses
library by not warning if its use of "wgetch" is via a weak symbol.
+ add loader options when building with static libraries to ensure that
an installed shared library for ncurses does not conflict. This is
reported as problem with Tru64, but could affect other platforms
(report Martin Mokrejs, analysis by Tim Mooney).
+ fix build on cygwin after recent ticlib/termlib changes, i.e.,
+ adjust TINFO_SUFFIX value to work with cygwin's dll naming
+ revert a change from 20070303 which commented out dependency of
SHLIB_LIST in form/menu/panel/c++ libraries.
+ fix initialization of ripoff stack pointer (cf: 20070421).
20070421
+ move most static variables into structures _nc_globals and
_nc_prescreen, to simplify storage.
+ add/use configure script macro CF_SIG_ATOMIC_T, use the corresponding
type for data manipulated by signal handlers (prompted by comments
in mailing.openbsd.bugs newsgroup).
+ modify CF_WITH_LIBTOOL to allow one to pass options such as -static
to the libtool create- and link-operations.
20070414
+ fix whitespace in curs_opaque.3x which caused a spurious ';' in
the installed aliases (report by Peter Santoro).
+ fix configure script to not try to generate adacurses-config when
Ada95 tree is not built.
20070407
+ add man/curs_legacy.3x, man/curs_opaque.3x
+ fix acs_map binding for Ada95 when --enable-reentrant is used.
+ add adacurses-config to the Ada95 install, based on version from
FreeBSD port, in turn by Juergen Pfeifer in 2000 (prompted by
comment on comp.lang.ada newsgroup).
+ fix includes in c++ binding to build with Intel compiler
(cf: 20061209).
+ update install rule in Ada95 to use mkdirs.sh
> other fixes prompted by inspection for Coverity report:
+ modify ifdef's for c++ binding to use try/catch/throw statements
+ add a null-pointer check in tack/ansi.c request_cfss()
+ fix a memory leak in ncurses/base/wresize.c
+ corrected check for valid memu/meml capabilities in
progs/dump_entry.c when handling V_HPUX case.
> fixes based on Coverity report:
+ remove dead code in test/bs.c
+ remove dead code in test/demo_defkey.c
+ remove an unused assignment in progs/infocmp.c
+ fix a limit check in tack/ansi.c tools_charset()
+ fix tack/ansi.c tools_status() to perform the VT320/VT420
tests in request_cfss(). The function had exited too soon.
+ fix a memory leak in tic.c's make_namelist()
+ fix a couple of places in tack/output.c which did not check for EOF.
+ fix a loop-condition in test/bs.c
+ add index checks in lib_color.c for color palettes
+ add index checks in progs/dump_entry.c for version_filter() handling
of V_BSD case.
+ fix a possible null-pointer dereference in copywin()
+ fix a possible null-pointer dereference in waddchnstr()
+ add a null-pointer check in _nc_expand_try()
+ add a null-pointer check in tic.c's make_namelist()
+ add a null-pointer check in _nc_expand_try()
+ add null-pointer checks in test/cardfile.c
+ fix a double-free in ncurses/tinfo/trim_sgr0.c
+ fix a double-free in ncurses/base/wresize.c
+ add try/catch block to c++/cursesmain.cc
20070331
+ modify Ada95 binding to build with --enable-reentrant by wrapping
global variables (bug: acs_map does not yet work).
+ modify Ada95 binding to use the new access-functions, allowing it
to build/run when NCURSES_OPAQUE is set.
+ add access-functions and macros to return properties of the WINDOW
structure, e.g., when NCURSES_OPAQUE is set.
+ improved install-sh's quoting.
+ use mkdirs.sh rather than mkinstalldirs, e.g., to use fixes from
other programs.
20070324
+ eliminate part of the direct use of WINDOW data from Ada95 interface.
+ fix substitutions for termlib filename to make configure option
--enable-reentrant work with --with-termlib.
+ change a constructor for NCursesWindow to allow compiling with
NCURSES_OPAQUE set, since we cannot pass a reference to
an opaque pointer.
20070317
+ ignore --with-chtype=unsigned since unsigned is always added to
the type in curses.h; do the same for --with-mmask-t.
+ change warning regarding --enable-ext-colors and wide-character
in the configure script to an error.
+ tweak error message in CF_WITH_LIBTOOL to distinguish other programs
such as Darwin's libtool program (report by Michail Vidiassov)
+ modify edit_man.sh to allow for multiple substitutions per line.
+ set locale in misc/ncurses-config.in since it uses a range
+ change permissions libncurses++.a install (report by Michail
Vidiassov).
+ corrected length of temporary buffer in wide-character version
of set_field_buffer() (related to report by Bryan Christ).
20070311
+ fix mk-1st.awk script install_shlib() function, broken in 20070224
changes for cygwin (report by Michail Vidiassov).
20070310
+ increase size of array in _nc_visbuf2n() to make "tic -v" work
properly in its similar_sgr() function (report/analysis by Peter
Santoro).
+ add --enable-reentrant configure option for ongoing changes to
implement a reentrant version of ncurses:
+ libraries are suffixed with "t"
+ wrap several global variables (curscr, newscr, stdscr, ttytype,
COLORS, COLOR_PAIRS, COLS, ESCDELAY, LINES and TABSIZE) as
functions returning values stored in SCREEN or cur_term.
+ move some initialization (LINES, COLS) from lib_setup.c,
i.e., setupterm() to _nc_setupscreen(), i.e., newterm().
20070303
+ regenerated html documentation.
+ add NCURSES_OPAQUE symbol to curses.h, will use to make structs
opaque in selected configurations.
+ move the chunk in lib_acs.c which resets acs capabilities when
running on a terminal whose locale interferes with those into
_nc_setupscreen(), so the libtinfo/libtinfow files can be made
identical (requested by Miroslav Lichvar).
+ do not use configure variable SHLIB_LIBS for building libraries
outside the ncurses directory, since that symbol is customized
only for that directory, and using it introduces an unneeded
dependency on libdl (requested by Miroslav Lichvar).
+ modify mk-1st.awk so the generated makefile rules for linking or
installing shared libraries do not first remove the library, in
case it is in use, e.g., libncurses.so by /bin/sh (report by Jeff
Chua).
+ revised section "Using NCURSES under XTERM" in ncurses-intro.html
(prompted by newsgroup comment by Nick Guenther).
20070224
+ change internal return codes of _nc_wgetch() to check for cases
where KEY_CODE_YES should be returned, e.g., if a KEY_RESIZE was
ungetch'd, and read by wget_wch().
+ fix static-library build broken in 20070217 changes to remove "-ldl"
(report by Miroslav Lichvar).
+ change makefile/scripts for cygwin to allow building termlib.
+ use Form_Hook in manpages to match form.h
+ use Menu_Hook in manpages, as well as a few places in menu.h
+ correct form- and menu-manpages to use specific Field_Options,
Menu_Options and Item_Options types.
+ correct prototype for _tracechar() in manpage (cf: 20011229).
+ correct prototype for wunctrl() in manpage.
20070217
+ fixes for $(TICS_LIST) in ncurses/Makefile (report by Miroslav
Lichvar).
+ modify relinking of shared libraries to apply only when rpath is
enabled, and add --disable-relink option which can be used to
disable the feature altogether (reports by Michail Vidiassov,
Adam J Richter).
+ fix --with-termlib option for wide-character configuration, stripping
the "w" suffix in one place (report by Miroslav Lichvar).
+ remove "-ldl" from some library lists to reduce dependencies in
programs (report by Miroslav Lichvar).
+ correct description of --enable-signed-char in configure --help
(report by Michail Vidiassov).
+ add pattern for GNU/kFreeBSD configuration to CF_XOPEN_SOURCE,
which matches an earlier change to CF_SHARED_OPTS, from xterm #224
fixes.
+ remove "${DESTDIR}" from -install_name option used for linking
shared libraries on Darwin (report by Michail Vidiassov).
20070210
+ add test/inchs.c, test/inch_wide.c, to test win_wchnstr().
+ remove libdl from library list for termlib (report by Miroslav
Lichvar).
+ fix configure.in to allow --without-progs --with-termlib (patch by
Miroslav Lichvar).
+ modify win_wchnstr() to ensure that only a base cell is returned
for each multi-column character (prompted by report by Wei Kong
regarding change in mvwin_wch() cf: 20041023).
20070203
+ modify fix_wchnstr() in form library to strip attributes (and color)
from the cchar_t array (field cells) read from a field's window.
Otherwise, when copying the field cells back to the window, the
associated color overrides the field's background color (report by
Ricardo Cantu).
+ improve tracing for form library, showing created forms, fields, etc.
+ ignore --enable-rpath configure option if --with-shared was omitted.
+ add _nc_leaks_tinfo(), _nc_free_tic(), _nc_free_tinfo() entrypoints
to allow leak-checking when both tic- and tinfo-libraries are built.
+ drop CF_CPP_VSCAN_FUNC macro from configure script, since C++ binding
no longer relies on it.
+ disallow combining configure script options --with-ticlib and
--enable-termcap (report by Rong-En Fan).
+ remove tack from ncurses tree.
20070128
+ fix typo in configure script that broke --with-termlib option
(report by Rong-En Fan).
20070127
+ improve fix for FreeBSD gnu/98975, to allow for null pointer passed
to tgetent() (report by Rong-en Fan).
+ update tack/HISTORY and tack/README to tell how to build it after
it is removed from the ncurses tree.
+ fix configure check for libtool's version to trim blank lines
(report by sci-fi@hush.ai).
+ review/eliminate other original-file artifacts in cursesw.cc, making
its license consistent with ncurses.
+ use ncurses vw_scanw() rather than reading into a fixed buffer in
the c++ binding for scanw() methods (prompted by report by Nuno Dias).
+ eliminate fixed-buffer vsprintf() calls in c++ binding.
20070120
+ add _nc_leaks_tic() to separate leak-checking of tic library from
term/ncurses libraries, and thereby eliminate a library dependency.
+ fix test/mk-test.awk to ignore blank lines.
+ correct paths in include/headers, for --srcdir (patch by Miroslav
Lichvar).
20070113
+ add a break-statement in misc/shlib to ensure that it exits on the
_first_ matched directory (report by Paul Novak).
+ add tack/configure, which can be used to build tack outside the
ncurses build-tree.
+ add --with-ticlib option, to build/install the tic-support functions
in a separate library (suggested by Miroslav Lichvar).
20070106
+ change MKunctrl.awk to reduce relocation table for unctrl.o
+ change MKkeyname.awk to reduce relocation table for keyname.o
(patch by Miroslav Lichvar).
20061230
+ modify configure check for libtool's version to trim blank lines
(report by sci-fi@hush.ai).
+ modify some modules to allow them to be reentrant if _REENTRANT is
defined: lib_baudrate.c, resizeterm.c (local data only)
+ eliminate static data from some modules: add_tries.c, hardscroll.c,
lib_ttyflags.c, lib_twait.c
+ improve manpage install to add aliases for the transformed program
names, e.g., from --program-prefix.
+ used linklint to verify links in the HTML documentation, made fixes
to manpages as needed.
+ fix a typo in curs_mouse.3x (report by William McBrine).
+ fix install-rule for ncurses5-config to make the bin-directory.
20061223
+ modify configure script to omit the tic (terminfo compiler) support
from ncurses library if --without-progs option is given.
+ modify install rule for ncurses5-config to do this via "install.libs"
+ modify shared-library rules to allow FreeBSD 3.x to use rpath.
+ update config.guess, config.sub
20061217 5.6 release for upload to ftp.gnu.org
20061217
+ add ifdef's for <wctype.h> for HPUX, which has the corresponding
definitions in <wchar.h>.
+ revert the va_copy() change from 20061202, since it was neither
correct nor portable.
+ add $(LOCAL_LIBS) definition to progs/Makefile.in, needed for
rpath on Solaris.
+ ignore wide-acs line-drawing characters that wcwidth() claims are
not one-column. This is a workaround for Solaris' broken locale
support.
20061216
+ modify configure --with-gpm option to allow it to accept a parameter,
i.e., the name of the dynamic GPM library to load via dlopen()
(requested by Bryan Henderson).
+ add configure option --with-valgrind, changes from vile.
+ modify configure script AC_TRY_RUN and AC_TRY_LINK checks to use
'return' in preference to 'exit()'.
20061209
+ change default for --with-develop back to "no".
+ add XTABS to tracing of TTY bits.
+ updated autoconf patch to ifdef-out the misfeature which declares
exit() for configure tests. This fixes a redefinition warning on
Solaris.
+ use ${CC} rather than ${LD} in shared library rules for IRIX64,
Solaris to help ensure that initialization sections are provided for
extra linkage requirements, e.g., of C++ applications (prompted by
comment by Casper Dik in newsgroup).
+ rename "$target" in CF_MAN_PAGES to make it easier to distinguish
from the autoconf predefined symbol. There was no conflict,
since "$target" was used only in the generated edit_man.sh file,
but SuSE's rpm package contains a patch.
20061202
+ update man/term.5 to reflect extended terminfo support and hashed
database configuration.
+ updates for test/configure script.
+ adapted from SuSE rpm package:
+ remove long-obsolete workaround for broken-linker which declared
cur_term in tic.c
+ improve error recovery in PUTC() macro when wcrtomb() does not
return usable results for an 8-bit character.
+ patches from rpm package (SuSE):
+ use va_copy() in extra varargs manipulation for tracing version
of printw, etc.
+ use a va_list rather than a null in _nc_freeall()'s call to
_nc_printf_string().
+ add some see-also references in manpages to show related
wide-character functions (suggested by Claus Fischer).
20061125
+ add a check in lib_color.c to ensure caller does not increase COLORS
above max_colors, which is used as an array index (discussion with
Simon Sasburg).
+ add ifdef's allowing ncurses to be built with tparm() using either
varargs (the existing status), or using a fixed-parameter list (to
match X/Open).
20061104
+ fix redrawing of windows other than stdscr using wredrawln() by
touching the corresponding rows in curscr (discussion with Dan
Gookin).
+ add test/redraw.c
+ add test/echochar.c
+ review/cleanup manpage descriptions of error-returns for form- and
menu-libraries (prompted by FreeBSD docs/46196).
20061028
+ add AUTHORS file -TD
+ omit the -D options from output of the new config script --cflags
option (suggested by Ralf S Engelschall).
+ make NCURSES_INLINE unconditionally defined in curses.h
20061021
+ revert change to accommodate bash 3.2, since that breaks other
platforms, e.g., Solaris.
+ minor fixes to NEWS file to simplify scripting to obtain list of
contributors.
+ improve some shared-library configure scripting for Linux, FreeBSD
and NetBSD to make "--with-shlib-version" work.
+ change configure-script rules for FreeBSD shared libraries to allow
for rpath support in versions past 3.
+ use $(DESTDIR) in makefile rules for installing/uninstalling the
package config script (reports/patches by Christian Wiese,
Ralf S Engelschall).
+ fix a warning in the configure script for NetBSD 2.0, working around
spurious blanks embedded in its ${MAKEFLAGS} symbol.
+ change test/Makefile to simplify installing test programs in a
different directory when --enable-rpath is used.
20061014
+ work around bug in bash 3.2 by adding extra quotes (Jim Gifford).
+ add/install a package config script, e.g., "ncurses5-config" or
"ncursesw5-config", according to configuration options.
20061007
+ add several GNU Screen terminfo variations with 16- and 256-colors,
and status line (Alain Bench).
+ change the way shared libraries (other than libtool) are installed.
Rather than copying the build-tree's libraries, link the shared
objects into the install directory. This makes the --with-rpath
option work except with $(DESTDIR) (cf: 20000930).
20060930
+ fix ifdef in c++/internal.h for QNX 6.1
+ test-compiled with (old) egcs-1.1.2, modified configure script to
not unset the $CXX and related variables which would prevent this.
+ fix a few terminfo.src typos exposed by improvements to "-f" option.
+ improve infocmp/tic "-f" option formatting.
20060923
+ make --disable-largefile option work (report by Thomas M Ott).
+ updated html documentation.
+ add ka2, kb1, kb3, kc2 to vt220-keypad as an extension -TD
+ minor improvements to rxvt+pcfkeys -TD
20060916
+ move static data from lib_mouse.c into SCREEN struct.
+ improve ifdef's for _POSIX_VDISABLE in tset to work with Mac OS X
(report by Michail Vidiassov).
+ modify CF_PATH_SYNTAX to ensure it uses the result from --prefix
option (from lynx changes) -TD
+ adapt AC_PROG_EGREP check, noting that this is likely to be another
place aggravated by POSIXLY_CORRECT.
+ modify configure check for awk to ensure that it is found (prompted
by report by Christopher Parker).
+ update config.sub
20060909
+ add kon, kon2 and jfbterm terminfo entry (request by Till Maas) -TD
+ remove invis capability from klone+sgr, mainly used by linux entry,
since it does not really do this -TD
20060903
+ correct logic in wadd_wch() and wecho_wch(), which did not guard
against passing the multi-column attribute into a call on waddch(),
e.g., using data returned by win_wch() (cf: 20041023)
(report by Sadrul H Chowdhury).
20060902
+ fix kterm's acsc string -TD
+ fix for change to tic/infocmp in 20060819 to ensure no blank is
embedded into a termcap description.
+ workaround for 20050806 ifdef's change to allow visbuf.c to compile
when using --with-termlib --with-trace options.
+ improve tgetstr() by making the return value point into the user's
buffer, if provided (patch by Miroslav Lichvar (see Redhat #202480)).
+ correct libraries needed for foldkeys (report by Stanislav Ievlev)
20060826
+ add terminfo entries for xfce terminal (xfce) and multi gnome
terminal (mgt) -TD
+ add test/foldkeys.c
20060819
+ modify tic and infocmp to avoid writing trailing blanks on terminfo
source output (Debian #378783).
+ modify configure script to ensure that if the C compiler is used
rather than the loader in making shared libraries, the $(CFLAGS)
variable is also used (Redhat #199369).
+ port hashed-db code to db2 and db3.
+ fix a bug in tgetent() from 20060625 and 20060715 changes
(patch/analysis by Miroslav Lichvar (see Redhat #202480)).
20060805
+ updated xterm function-keys terminfo to match xterm #216 -TD
+ add configure --with-hashed-db option (tested only with FreeBSD 6.0,
e.g., the db 1.8.5 interface).
20060729
+ modify toe to access termcap data, e.g., via cgetent() functions,
or as a text file if those are not available.
+ use _nc_basename() in tset to improve $SHELL check for csh/sh.
+ modify _nc_read_entry() and _nc_read_termcap_entry() so infocmp,
can access termcap data when the terminfo database is disabled.
20060722
+ widen the test for xterm kmous a little to allow for other strings
than \E[M, e.g., for xterm-sco functionality in xterm.
+ update xterm-related terminfo entries to match xterm patch #216 -TD
+ update config.guess, config.sub
20060715
+ fix for install-rule in Ada95 to add terminal_interface.ads
and terminal_interface.ali (anonymous posting in comp.lang.ada).
+ correction to manpage for getcchar() (report by William McBrine).
+ add test/chgat.c
+ modify wchgat() to mark updated cells as changed so a refresh will
repaint those cells (comments by Sadrul H Chowdhury and William
McBrine).
+ split up dependency of names.c and codes.c in ncurses/Makefile to
work with parallel make (report/analysis by Joseph S Myers).
+ suppress a warning message (which is ignored) for systems without
an ldconfig program (patch by Justin Hibbits).
+ modify configure script --disable-symlinks option to allow one to
disable symlink() in tic even when link() does not work (report by
Nigel Horne).
+ modify MKfallback.sh to use tic -x when constructing fallback tables
to allow extended capabilities to be retrieved from a fallback entry.
+ improve leak-checking logic in tgetent() from 20060625 to ensure that
it does not free the current screen (report by Miroslav Lichvar).
20060708
+ add a check for _POSIX_VDISABLE in tset (NetBSD #33916).
+ correct _nc_free_entries() and related functions used for memory leak
checking of tic.
20060701
+ revert a minor change for magic-cookie support from 20060513, which
caused unexpected reset of attributes, e.g., when resizing test/view
in color mode.
+ note in clear manpage that the program ignores command-line
parameters (prompted by Debian #371855).
+ fixes to make lib_gen.c build properly with changes to the configure
--disable-macros option and NCURSES_NOMACROS (cf: 20060527)
+ update/correct several terminfo entries -TD
+ add some notes regarding copyright to terminfo.src -TD
20060625
+ fixes to build Ada95 binding with gnat-4.1.0
+ modify read_termtype() so the term_names data is always allocated as
part of the str_table, a better fix for a memory leak (cf: 20030809).
+ reduce memory leaks in repeated calls to tgetent() by remembering the
last TERMINAL* value allocated to hold the corresponding data and
freeing that if the tgetent() result buffer is the same as the
previous call (report by "Matt" for FreeBSD gnu/98975).
+ modify tack to test extended capability function-key strings.
+ improved gnome terminfo entry (GenToo #122566).
+ improved xterm-256color terminfo entry (patch by Alain Bench).
20060617
+ fix two small memory leaks related to repeated tgetent() calls
with TERM=screen (report by "Matt" for FreeBSD gnu/98975).
+ add --enable-signed-char to simplify Debian package.
+ reduce name-pollution in term.h by removing #define's for HAVE_xxx
symbols.
+ correct typo in curs_terminfo.3x (Debian #369168).
20060603
+ enable the mouse in test/movewindow.c
+ improve a limit-check in frm_def.c (John Heasley).
+ minor copyright fixes.
+ change configure script to produce test/Makefile from data file.
20060527
+ add a configure option --enable-wgetch-events to enable
NCURSES_WGETCH_EVENTS, and correct the associated loop-logic in
lib_twait.c (report by Bernd Jendrissek).
+ remove include/nomacros.h from build, since the ifdef for
NCURSES_NOMACROS makes that obsolete.
+ add entrypoints for some functions which were only provided as macros
to make NCURSES_NOMACROS ifdef work properly: getcurx(), getcury(),
getbegx(), getbegy(), getmaxx(), getmaxy(), getparx() and getpary(),
wgetbkgrnd().
+ provide ifdef for NCURSES_NOMACROS which suppresses most macro
definitions from curses.h, i.e., where a macro is defined to override
a function to improve performance. Allowing a developer to suppress
these definitions can simplify some application (discussion with
Stanislav Ievlev).
+ improve description of memu/meml in terminfo manpage.
20060520
+ if msgr is false, reset video attributes when doing an automargin
wrap to the next line. This makes the ncurses 'k' test work properly
for hpterm.
+ correct caching of keyname(), which was using only half of its table.
+ minor fixes to memory-leak checking.
+ make SCREEN._acs_map and SCREEN._screen_acs_map pointers rather than
arrays, making ACS_LEN less visible to applications (suggested by
Stanislav Ievlev).
+ move chunk in SCREEN ifdef'd for USE_WIDEC_SUPPORT to the end, so
_screen_acs_map will have the same offset in both ncurses/ncursesw,
making the corresponding tinfo/tinfow libraries binary-compatible
(cf: 20041016, report by Stanislav Ievlev).
20060513
+ improve debug-tracing for EmitRange().
+ change default for --with-develop to "yes". Add NCURSES_NO_HARD_TABS
and NCURSES_NO_MAGIC_COOKIE environment variables to allow runtime
suppression of the related hard-tabs and xmc-glitch features.
+ add ncurses version number to top-level manpages, e.g., ncurses, tic,
infocmp, terminfo as well as form, menu, panel.
+ update config.guess, config.sub
+ modify ncurses.c to work around a bug in NetBSD 3.0 curses
(field_buffer returning null for a valid field). The 'r' test
appears to not work with that configuration since the new_fieldtype()
function is broken in that implementation.
20060506
+ add hpterm-color terminfo entry -TD
+ fixes to compile test-programs with HPUX 11.23
20060422
+ add copyright notices to files other than those that are generated,
data or adapted from pdcurses (reports by William McBrine, David
Taylor).
+ improve rendering on hpterm by not resetting attributes at the end
of doupdate() if the terminal has the magic-cookie feature (report
by Bernd Rieke).
+ add 256color variants of terminfo entries for programs which are
reported to implement this feature -TD
20060416
+ fix typo in change to NewChar() macro from 20060311 changes, which
broke tab-expansion (report by Frederic L W Meunier).
20060415
+ document -U option of tic and infocmp.
+ modify tic/infocmp to suppress smacs/rmacs when acsc is suppressed
due to size limit, e.g., converting to termcap format. Also
suppress them if the output format does not contain acsc and it
was not VT100-like, i.e., a one-one mapping (Novell #163715).
+ add configure check to ensure that SIGWINCH is defined on platforms
such as OS X which exclude that when _XOPEN_SOURCE, etc., are
defined (report by Nicholas Cole)
20060408
+ modify write_object() to not write coincidental extensions of an
entry made due to it being referenced in a use= clause (report by
Alain Bench).
+ another fix for infocmp -i option, which did not ensure that some
escape sequences had comparable prefixes (report by Alain Bench).
20060401
+ improve discussion of init/reset in terminfo and tput manpages
(report by Alain Bench).
+ use is3 string for a fallback of rs3 in the reset program; it was
using is2 (report by Alain Bench).
+ correct logic for infocmp -i option, which did not account for
multiple digits in a parameter (cf: 20040828) (report by Alain
Bench).
+ move _nc_handle_sigwinch() to lib_setup.c to make --with-termlib
option work after 20060114 changes (report by Arkadiusz Miskiewicz).
+ add copyright notices to test-programs as needed (report by William
McBrine).
20060318
+ modify ncurses.c 'F' test to combine the wide-characters with color
and/or video attributes.
+ modify test/ncurses to use CTL/Q or ESC consistently for exiting
a test-screen (some commands used 'x' or 'q').
20060312
+ fix an off-by-one in the scrolling-region change (cf_ 20060311).
20060311
+ add checks in waddchnstr() and wadd_wchnstr() to stop copying when
a null character is found (report by Igor Bogomazov).
+ modify progs/Makefile.in to make "tput init" work properly with
cygwin, i.e., do not pass a ".exe" in the reference string used
in check_aliases (report by Samuel Thibault).
+ add some checks to ensure current position is within scrolling
region before scrolling on a new line (report by Dan Gookin).
+ change some NewChar() usage to static variables to work around
stack garbage introduced when cchar_t is not packed (Redhat #182024).
20060225
+ workarounds to build test/movewindow with PDcurses 2.7.
+ fix for nsterm-16color entry (patch by Alain Bench).
+ correct a typo in infocmp manpage (Debian #354281).
20060218
+ add nsterm-16color entry -TD
+ updated mlterm terminfo entry -TD
+ remove 970913 feature for copying subwindows as they are moved in
mvwin() (discussion with Bryan Christ).
+ modify test/demo_menus.c to demonstrate moving a menu (both the
window and subwindow) using shifted cursor-keys.
+ start implementing recursive mvwin() in movewindow.c (incomplete).
+ add a fallback definition for GCC_PRINTFLIKE() in test.priv.h,
for movewindow.c (report by William McBrine).
+ add help-message to test/movewindow.c
20060211
+ add test/movewindow.c, to test mvderwin().
+ fix ncurses soft-key test so color changes are shown immediately
rather than delayed.
+ modify ncurses soft-key test to hide the keys when exiting the test
screen.
+ fixes to build test programs with PDCurses 2.7, e.g., its headers
rely on autoconf symbols, and it declares stubs for nonfunctional
terminfo and termcap entrypoints.
20060204
+ improved test/configure to build test/ncurses on HPUX 11 using the
vendor curses.
+ documented ALTERNATE CONFIGURATIONS in the ncurses manpage, for the
benefit of developers who do not read INSTALL.
20060128
+ correct form library Window_To_Buffer() change (cf: 20040516), which
should ignore the video attributes (report by Ricardo Cantu).
20060121
+ minor fixes to xmc-glitch experimental code:
+ suppress line-drawing
+ implement max_attributes
tested with xterm.
+ minor fixes for the database iterator.
+ fix some buffer limits in c++ demo (comment by Falk Hueffner in
Debian #348117).
20060114
+ add toe -a option, to show all databases. This uses new private
interfaces in the ncurses library for iterating through the list of
databases.
+ fix toe from 20000909 changes which made it not look at
$HOME/.terminfo
+ make toe's -v option parameter optional as per manpage.
+ improve SIGWINCH handling by postponing its effect during newterm(),
etc., when allocating screens.
20060111
+ modify wgetnstr() to return KEY_RESIZE if a sigwinch occurs. Use
this in test/filter.c
+ fix an error in filter() modification which caused some applications
to fail.
20060107
+ check if filter() was called when getting the screensize. Keep it
at 1 if so (based on Redhat #174498).
+ add extension nofilter().
+ refined the workaround for ACS mapping.
+ make ifdef's consistent in curses.h for the extended colors so the
header file can be used for the normal curses library. The header
file installed for extended colors is a variation of the
wide-character configuration (report by Frederic L W Meunier).
20051231
+ add a workaround to ACS mapping to allow applications such as
test/blue.c to use the "PC ROM" characters by masking them with
A_ALTCHARSET. This worked up til 5.5, but was lost in the revision
of legacy coding (report by Michael Deutschmann).
+ add a null-pointer check in the wide-character version of
calculate_actual_width() (report by Victor Julien).
+ improve test/ncurses 'd' (color-edit) test by allowing the RGB
values to be set independently (patch by William McBrine).
+ modify test/configure script to allow building test programs with
PDCurses/X11.
+ modified test programs to allow some to work with NetBSD curses.
Several do not because NetBSD curses implements a subset of X/Open
curses, and also lacks much of SVr4 additions. But it's enough for
comparison.
+ update config.guess and config.sub
20051224
+ use BSD-specific fix for return-value from cgetent() from CVS where
an unknown terminal type would be reportd as "database not found".
+ make tgetent() return code more readable using new symbols
TGETENT_YES, etc.
+ remove references to non-existent "tctest" program.
+ remove TESTPROGS from progs/Makefile.in (it was referring to code
that was never built in that directory).
+ typos in curs_addchstr.3x, some doc files (noticed in OpenBSD CVS).
20051217
+ add use_legacy_coding() function to support lynx's font-switching
feature.
+ fix formatting in curs_termcap.3x (report by Mike Frysinger).
+ modify MKlib_gen.sh to change preprocessor-expanded _Bool back to
bool.
20051210
+ extend test/ncurses.c 's' (overlay window) test to exercise overlay(),
overwrite() and copywin() with different combinations of colors and
attributes (including background color) to make it easy to see the
effect of the different functions.
+ corrections to menu/m_global.c for wide-characters (report by
Victor Julien).
20051203
+ add configure option --without-dlsym, allowing developers to
configure GPM support without using dlsym() (discussion with Michael
Setzer).
+ fix wins_nwstr(), which did not handle single-column non-8bit codes
(Debian #341661).
20051126
+ move prototypes for wide-character trace functions from curses.tail
to curses.wide to avoid accidental reference to those if
_XOPEN_SOURCE_EXTENDED is defined without ensuring that <wchar.h> is
included.
+ add/use NCURSES_INLINE definition.
+ change some internal functions to use int/unsigned rather than the
short equivalents.
20051119
+ remove a redundant check in lib_color.c (Debian #335655).
+ use ld's -search_paths_first option on Darwin to work around odd
search rules on that platform (report by Christian Gennerat, analysis
by Andrea Govoni).
+ remove special case for Darwin in CF_XOPEN_SOURCE configure macro.
+ ignore EINTR in tcgetattr/tcsetattr calls (Debian #339518).
+ fix several bugs in test/bs.c (patch by Stephen Lindholm).
20051112
+ other minor fixes to cygwin based on tack -TD
+ correct smacs in cygwin (Debian #338234, report by Baurzhan
Ismagulov, who noted that it was fixed in Cygwin).
20051029
+ add shifted up/down arrow codes to xterm-new as kind/kri strings -TD
+ modify wbkgrnd() to avoid clearing the A_CHARTEXT attribute bits
since those record the state of multicolumn characters (Debian
#316663).
+ modify werase to clear multicolumn characters that extend into
a derived window (Debian #316663).
20051022
+ move assignment from environment variable ESCDELAY from initscr()
down to newterm() so the environment variable affects timeouts for
terminals opened with newterm() as well.
+ fix a memory leak in keyname().
+ add test/demo_altkeys.c
+ modify test/demo_defkey.c to exit from loop via 'q' to allow
leak-checking, as well as fix a buffer size in winnstr() call.
20051015
+ correct order of use-clauses in rxvt-basic entry which made codes for
f1-f4 vt100-style rather than vt220-style (report by Gabor Z Papp).
+ suppress configure check for gnatmake if Ada95/Makefile.in is not
found.
+ correct a typo in configure --with-bool option for the case where
--without-cxx is used (report by Daniel Jacobowitz).
+ add a note to INSTALL's discussion of --with-normal, pointing out
that one may wish to use --without-gpm to ensure a completely
static link (prompted by report by Felix von Leitner).
20051010 5.5 release for upload to ftp.gnu.org
20051008
+ document in demo_forms.c some portability issues.
20051001
+ document side-effect of werase() which sets the cursor position.
+ save/restore the current position in form field editing to make
overlay mode work.
20050924
+ correct header dependencies in progs, allowing parallel make (report
by Daniel Jacobowitz).
+ modify CF_BUILD_CC to ensure that pre-setting $BUILD_CC overrides
the configure check for --with-build-cc (report by Daniel Jacobowitz).
+ modify CF_CFG_DEFAULTS to not use /usr as the default prefix for
NetBSD.
+ update config.guess and config.sub from
http://subversions.gnu.org/cgi-bin/viewcvs/config/config/
20050917
+ modify sed expression which computes path for /usr/lib/terminfo
symbolic link in install to ensure that it does not change unexpected
levels of the path (Gentoo #42336).
+ modify default for --disable-lp64 configure option to reduce impact
on existing 64-bit builds. Enabling the _LP64 option may change the
size of chtype and mmask_t. However, for ABI 6, it is enabled by
default (report by Mike Frysinger).
+ add configure script check for --enable-ext-mouse, bump ABI to 6 by
default if it is used.
+ improve configure script logic for bumping ABI to omit this if the
--with-abi-version option was used.
+ update address for Free Software Foundation in tack's source.
+ correct wins_wch(), which was not marking the filler-cells of
multi-column characters (cf: 20041023).
20050910
+ modify mouse initialization to ensure that Gpm_Open() is called only
once. Otherwise GPM gets confused in its initialization of signal
handlers (Debian #326709).
20050903
+ modify logic for backspacing in a multiline form field to ensure that
it works even when the preceding line is full (report by Frank van
Vugt).
+ remove comment about BUGS section of ncurses manpage (Debian #325481)
20050827
+ document some workarounds for shared and libtool library
configurations in INSTALL (see --with-shared and --with-libtool).
+ modify CF_GCC_VERSION and CF_GXX_VERSION macros to accommodate
cross-compilers which emit the platform name in their version
message, e.g.,
arm-sa1100-linux-gnu-g++ (GCC) 4.0.1
(report by Frank van Vugt).
20050820
+ start updating documentation for upcoming 5.5 release.
+ fix to make libtool and libtinfo work together again (cf: 20050122).
+ fixes to allow building traces into libtinfo
+ add debug trace to tic that shows if/how ncurses will write to the
lower corner of a terminal's screen.
+ update llib-l* files.
20050813
+ modify initializers in c++ binding to build with old versions of g++.
+ improve special case for 20050115 repainting fix, ensuring that if
the first changed cell is not a character that the range to be
repainted is adjusted to start at a character's beginning (Debian
#316663).
20050806
+ fixes to build on QNX 6.1
+ improve configure script checks for Intel 9.0 compiler.
+ remove #include's for libc.h (obsolete).
+ adjust ifdef's in curses.priv.h so that when cross-compiling to
produce comp_hash and make_keys, no dependency on wchar.h is needed.
That simplifies the build-cppflags (report by Frank van Vugt).
+ move modules related to key-binding into libtinfo to fix linkage
problem caused by 20050430 changes to MKkeyname.sh (report by
Konstantin Andreev).
20050723
+ updates/fixes for configure script macros from vile -TD
+ make prism9's sgr string agree with the rest of the terminfo -TD
+ make vt220's sgr0 string consistent with sgr string, do this for
several related cases -TD
+ improve translation to termcap by filtering the 'me' (sgr0) strings
as in the runtime call to tgetent() (prompted by a discussion with
Thomas Klausner).
+ improve tic check for sgr0 versus sgr(0), to help ensure that sgr0
resets line-drawing.
20050716
+ fix special cases for trimming sgr0 for hurd and vt220 (Debian
#318621).
+ split-out _nc_trim_sgr0() from modifications made to tgetent(), to
allow it to be used by tic to provide information about the runtime
changes that would be made to sgr0 for termcap applications.
+ modify make_sed.sh to make the group-name in the NAME section of
form/menu library manpage agree with the TITLE string when renaming
is done for Debian (Debian #78866).
20050702
+ modify parameter type in c++ binding for insch() and mvwinsch() to
be consistent with underlying ncurses library (was char, is chtype).
+ modify treatment of Intel compiler to allow _GNU_SOURCE to be defined
on Linux.
+ improve configure check for nanosleep(), checking that it works since
some older systems such as AIX 4.3 have a nonworking version.
20050625
+ update config.guess and config.sub from
http://subversions.gnu.org/cgi-bin/viewcvs/config/config/
+ modify misc/shlib to work in test-directory.
+ suppress $suffix in misc/run_tic.sh when cross-compiling. This
allows cross-compiles to use the host's tic program to handle the
"make install.data" step.
+ improve description of $LINES and $COLUMNS variables in manpages
(prompted by report by Dave Ulrick).
+ improve description of cross-compiling in INSTALL
+ add NCURSES-Programming-HOWTO.html by Pradeep Padala
(see http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/).
+ modify configure script to obtain soname for GPM library (discussion
with Daniel Jacobowitz).
+ modify configure script so that --with-chtype option will still
compute the unsigned literals suffix for constants in curses.h
(report by Daniel Jacobowitz:
+ patches from Daniel Jacobowitz:
+ the man_db.renames entry for tack.1 was backwards.
+ tack.1 had some 1m's that should have been 1M's.
+ the section for curs_inwstr.3 was wrong.
20050619
+ correction to --with-chtype option (report by Daniel Jacobowitz).
20050618
+ move build-time edit_man.sh and edit_man.sed scripts to top directory
to simplify reusing them for renaming tack's manpage (prompted by a
review of Debian package).
+ revert minor optimization from 20041030 (Debian #313609).
+ libtool-specific fixes, tested with libtool 1.4.3, 1.5.0, 1.5.6,
1.5.10 and 1.5.18 (all work except as noted previously for the c++
install using libtool 1.5.0):
+ modify the clean-rule in c++/Makefile.in to work with IRIX64 make
program.
+ use $(LIBTOOL_UNINSTALL) symbol, overlooked in 20030830
+ add configure options --with-chtype and --with-mmask-t, to allow
overriding of the non-LP64 model's use of the corresponding types.
+ revise test for size of chtype (and mmask_t), which always returned
"long" due to an uninitialized variable (report by Daniel Jacobowitz).
20050611
+ change _tracef's that used "%p" format for va_list values to ignore
that, since on some platforms those are not pointers.
+ fixes for long-formats in printf's due to largefile support.
20050604
+ fixes for termcap support:
+ reset pointer to _nc_curr_token.tk_name when the input stream is
closed, which could point to free memory (cf: 20030215).
+ delink TERMTYPE data which is used by the termcap reader, so that
extended names data will be freed consistently.
+ free pointer to TERMTYPE data in _nc_free_termtype() rather than
its callers.
+ add some entrypoints for freeing permanently allocated data via
_nc_freeall() when NO_LEAKS is defined.
+ amend 20041030 change to _nc_do_color to ensure that optimization is
applied only when the terminal supports back_color_erase (bce).
20050528
+ add sun-color terminfo entry -TD
+ correct a missing assignment in c++ binding's method
NCursesPanel::UserPointer() from 20050409 changes.
+ improve configure check for large-files, adding check for dirent64
from vile -TD
+ minor change to configure script to improve linker options for the
Ada95 tree.
20050515
+ document error conditions for ncurses library functions (report by
Stanislav Ievlev).
+ regenerated html documentation for ada binding.
see ftp://ftp.invisible-island.net/ncurses/patches/gnathtml
20050507
+ regenerated html documentation for manpages.
+ add $(BUILD_EXEEXT) suffix to invocation of make_keys in
ncurses/Makefile (Gentoo #89772).
+ modify c++/demo.cc to build with g++ -fno-implicit-templates option
(patch by Mike Frysinger).
+ modify tic to filter out long extended names when translating to
termcap format. Only two characters are permissible for termcap
capability names.
20050430
+ modify terminfo entries xterm-new and rxvt to add strings for
shift-, control-cursor keys.
+ workaround to allow c++ binding to compile with g++ 2.95.3, which
has a broken implementation of static_cast<> (patch by Jeff Chua).
+ modify initialization of key lookup table so that if an extended
capability (tic -x) string is defined, and its name begins with 'k',
it will automatically be treated as a key.
+ modify test/keynames.c to allow for the possibility of extended
key names, e.g., via define_key(), or via "tic -x".
+ add test/demo_termcap.c to show the contents of given entry via the
termcap interface.
20050423
+ minor fixes for vt100/vt52 entries -TD
+ add configure option --enable-largefile
+ corrected libraries used to build Ada95/gen/gen, found in testing
gcc 4.0.0.
20050416
+ update config.guess, config.sub
+ modify configure script check for _XOPEN_SOURCE, disable that on
Darwin whose header files have problems (patch by Chris Zubrzycki).
+ modify form library Is_Printable_String() to use iswprint() rather
than wcwidth() for determining if a character is printable. The
latter caused it to reject menu items containing non-spacing
characters.
+ modify ncurses test program's F-test to handle non-spacing characters
by combining them with a reverse-video blank.
+ review/fix several gcc -Wconversion warnings.
20050409
+ correct an off-by-one error in m_driver() for mouse-clicks used to
position the mouse to a particular item.
+ implement test/demo_menus.c
+ add some checks in lib_mouse to ensure SP is set.
+ modify C++ binding to make 20050403 changes work with the configure
--enable-const option.
20050403
+ modify start_color() to return ERR if it cannot allocate memory.
+ address g++ compiler warnings in C++ binding by adding explicit
member initialization, assignment operators and copy constructors.
Most of the changes simply preserve the existing semantics of the
binding, which can leak memory, etc., but by making these features
visible, it provides a framework for improving the binding.
+ improve C++ binding using static_cast, etc.
+ modify configure script --enable-warnings to add options to g++ to
correspond to the gcc --enable-warnings.
+ modify C++ binding to use some C internal functions to make it
compile properly on Solaris (and other platforms).
20050327
+ amend change from 20050320 to limit it to configurations with a
valid locale.
+ fix a bug introduced in 20050320 which broke the translation of
nonprinting characters to uparrow form (report by Takahashi Tamotsu).
20050326
+ add ifdef's for _LP64 in curses.h to avoid using wasteful 64-bits for
chtype and mmask_t, but add configure option --disable-lp64 in case
anyone used that configuration.
+ update misc/shlib script to account for Mac OS X (report by Michail
Vidiassov).
+ correct comparison for wrapping multibyte characters in
waddch_literal() (report by Takahashi Tamotsu).
20050320
+ add -c and -w options to tset to allow user to suppress ncurses'
resizing of the terminal emulator window in the special case where it
is not able to detect the true size (report by Win Delvaux, Debian
#300419).
+ modify waddch_nosync() to account for locale zn_CH.GBK, which uses
codes 128-159 as part of multibyte characters (report by Wang
WenRui, Debian #300512).
20050319
+ modify ncurses.c 'd' test to make it work with 88-color
configuration, i.e., by implementing scrolling.
+ improve scrolling in ncurses.c 'c' and 'C' tests, e.g., for 88-color
configuration.
20050312
+ change tracemunch to use strict checking.
+ modify ncurses.c 'p' test to test line-drawing within a pad.
+ implement environment variable NCURSES_NO_UTF8_ACS to support
miscellaneous terminal emulators which ignore alternate character
set escape sequences when in UTF-8 mode.
20050305
+ change NCursesWindow::err_handler() to a virtual function (request by
Steve Beal).
+ modify fty_int.c and fty_num.c to handle wide characters (report by
Wolfgang Gutjahr).
+ adapt fix for fty_alpha.c to fty_alnum.c, which also handled normal
and wide characters inconsistently (report by Wolfgang Gutjahr).
+ update llib-* files to reflect internal interface additions/changes.
20050226
+ improve test/configure script, adding tests for _XOPEN_SOURCE, etc.,
from lynx.
+ add aixterm-16color terminfo entry -TD
+ modified xterm-new terminfo entry to work with tgetent() changes -TD
+ extended changes in tgetent() from 20040710 to allow the substring of
sgr0 which matches rmacs to be at the beginning of the sgr0 string
(request by Thomas Wolff). Wolff says the visual effect in
combination with pre-20040710 ncurses is improved.
+ fix off-by-one in winnstr() call which caused form field validation
of multibyte characters to ignore the last character in a field.
+ correct logic in winsch() for inserting multibyte strings; the code
would clear cells after the insertion rather than push them to the
right (cf: 20040228).
+ fix an inconsistency in Check_Alpha_Field() between normal and wide
character logic (report by Wolfgang Gutjahr).
20050219
+ fix a bug in editing wide-characters in form library: deleting a
nonwide character modified the previous wide-character.
+ update manpage to describe NCURSES_MOUSE_VERSION 2.
+ correct manpage description of mouseinterval() (Debian #280687).
+ add a note to default_colors.3x explaining why this extension was
added (Debian #295083).
+ add traces to panel library.
20050212
+ improve editing of wide-characters in form library: left/right
cursor movement, and single-character deletions work properly.
+ disable GPM mouse support when $TERM happens to be prefixed with
"xterm". Gpm_Open() would otherwise assert that it can deal with
mouse events in this case.
+ modify GPM mouse support so it closes the server connection when
the caller disables the mouse (report by Stanislav Ievlev).
20050205
+ add traces for callback functions in form library.
+ add experimental configure option --enable-ext-mouse, which defines
NCURSES_MOUSE_VERSION 2, and modifies the encoding of mouse events to
support wheel mice, which may transmit buttons 4 and 5. This works
with xterm and similar X terminal emulators (prompted by question by
Andreas Henningsson, this is also related to Debian #230990).
+ improve configure macros CF_XOPEN_SOURCE and CF_POSIX_C_SOURCE to
avoid redefinition warnings on cygwin.
20050129
+ merge remaining development changes for extended colors (mostly
complete, does not appear to break other configurations).
+ add xterm-88color.dat (part of extended colors testing).
+ improve _tracedump() handling of color pairs past 96.
+ modify return-value from start_color() to return OK if colors have
already been started.
+ modify curs_color.3x list error conditions for init_pair(),
pair_content() and color_content().
+ modify pair_content() to return -1 for consistency with init_pair()
if it corresponds to the default-color.
+ change internal representation of default-color to allow application
to use color number 255. This does not affect the total number of
color pairs which are allowed.
+ add a top-level tags rule.
20050122
+ add a null-pointer check in wgetch() in case it is called without
first calling initscr().
+ add some null-pointer checks for SP, which is not set by libtinfo.
+ modify misc/shlib to ensure that absolute pathnames are used.
+ modify test/Makefile.in, etc., to link test programs only against the
libraries needed, e.g., omit form/menu/panel library for the ones
that are curses-specific.
+ change SP->_current_attr to a pointer, adjust ifdef's to ensure that
libtinfo.so and libtinfow.so have the same ABI. The reason for this
is that the corresponding data which belongs to the upper-level
ncurses library has a different size in each model (report by
Stanislav Ievlev).
20050115
+ minor fixes to allow test-compiles with g++.
+ correct column value shown in tic's warnings, which did not account
for leading whitespace.
+ add a check in _nc_trans_string() for improperly ended strings, i.e.,
where a following line begins in column 1.
+ modify _nc_save_str() to return a null pointer on buffer overflow.
+ improve repainting while scrolling wide-character data (Eungkyu Song).
20050108
+ merge some development changes to extend color capabilities.
20050101
+ merge some development changes to extend color capabilities.
+ fix manpage typo (FreeBSD report docs/75544).
+ update config.guess, config.sub
> patches for configure script (Albert Chin-A-Young):
+ improved fix to make mbstate_t recognized on HPUX 11i (cf:
20030705), making vsscanf() prototype visible on IRIX64. Tested for
on HP-UX 11i, Solaris 7, 8, 9, AIX 4.3.3, 5.2, Tru64 UNIX 4.0D, 5.1,
IRIX64 6.5, Redhat Linux 7.1, 9, and RHEL 2.1, 3.0.
+ print the result of the --disable-home-terminfo option.
+ use -rpath when compiling with SGI C compiler.
20041225
+ add trace calls to remaining public functions in form and menu
libraries.
+ fix check for numeric digits in test/ncurses.c 'b' and 'B' tests.
+ fix typo in test/ncurses.c 'c' test from 20041218.
20041218
+ revise test/ncurses.c 'c' color test to improve use for xterm-88color
and xterm-256color, added 'C' test using the wide-character color_set
and attr_set functions.
20041211
+ modify configure script to work with Intel compiler.
+ fix an limit-check in wadd_wchnstr() which caused labels in the
forms-demo to be one character short.
+ fix typo in curs_addchstr.3x (Jared Yanovich).
+ add trace calls to most functions in form and menu libraries.
+ update working-position for adding wide-characters when window is
scrolled (prompted by related report by Eungkyu Song).
20041204
+ replace some references on Linux to wcrtomb() which use it to obtain
the length of a multibyte string with _nc_wcrtomb, since wcrtomb() is
broken in glibc (see Debian #284260).
+ corrected length-computation in wide-character support for
field_buffer().
+ some fixes to frm_driver.c to allow it to accept multibyte input.
+ modify configure script to work with Intel 8.0 compiler.
20041127
+ amend change to setupterm() in 20030405 which would reuse the value
of cur_term if the same output was selected. This now reuses it only
when setupterm() is called from tgetent(), which has no notion of
separate SCREENs. Note that tgetent() must be called after initscr()
or newterm() to use this feature (Redhat #140326).
+ add a check in CF_BUILD_CC macro to ensure that developer has given
the --with-build-cc option when cross-compiling (report by Alexandre
Campo).
+ improved configure script checks for _XOPEN_SOURCE and
_POSIX_C_SOURCE (fix for IRIX 5.3 from Georg Schwarz, _POSIX_C_SOURCE
updates from lynx).
+ cosmetic fix to test/gdc.c to recolor the bottom edge of the box
for consistency (comment by Dan Nelson).
20041120
+ update wsvt25 terminfo entry -TD
+ modify test/ins_wide.c to test all flavors of ins_wstr().
+ ignore filler-cells in wadd_wchnstr() when adding a cchar_t array
which consists of multi-column characters, since this function
constructs them (cf: 20041023).
+ modify winnstr() to return multibyte character strings for the
wide-character configuration.
20041106
+ fixes to make slk_set() and slk_wset() accept and store multibyte
or multicolumn characters.
20041030
+ improve color optimization a little by making _nc_do_color() check
if the old/new pairs are equivalent to the default pair 0.
+ modify assume_default_colors() to not require that
use_default_colors() be called first.
20041023
+ modify term_attrs() to use termattrs(), add the extended attributes
such as enter_horizontal_hl_mode for WA_HORIZONTAL to term_attrs().
+ add logic in waddch_literal() to clear orphaned cells when one
multi-column character partly overwrites another.
+ improved logic for clearing cells when a multi-column character
must be wrapped to a new line.
+ revise storage of cells for multi-column characters to correct a
problem with repainting. In the old scheme, it was possible for
doupdate() to decide that only part of a multi-column character
should be repainted since the filler cells stored only an attribute
to denote them as fillers, rather than the character value and the
attribute.
20041016
+ minor fixes for traces.
+ add SP->_screen_acs_map[], used to ensure that mapping of missing
line-drawing characters is handled properly. For example, ACS_DARROW
is absent from xterm-new, and it was coincidentally displayed the
same as ACS_BTEE.
20041009
+ amend 20021221 workaround for broken acs to reset the sgr, rmacs
and smacs strings as well. Also modify the check for screen's
limitations in that area to allow the multi-character shift-in
and shift-out which seem to work.
+ change GPM initialization, using dl library to load it dynamically
at runtime (Debian #110586).
20041002
+ correct logic for color pair in setcchar() and getcchar() (patch by
Marcin 'Qrczak' Kowalczyk).
+ add t/T commands to ncurses b/B tests to allow a different color to
be tested for the attrset part of the test than is used in the
background color.
20040925
+ fix to make setcchar() to work when its wchar_t* parameter is
pointing to a string which contains more data than can be converted.
+ modify wget_wstr() and example in ncurses.c to work if wchar_t and
wint_t are different sizes (report by Marcin 'Qrczak' Kowalczyk).
20040918
+ remove check in wget_wch() added to fix an infinite loop, appears to
have been working around a transitory glibc bug, and interferes
with normal operation (report by Marcin 'Qrczak' Kowalczyk).
+ correct wadd_wch() and wecho_wch(), which did not pass the rendition
information (report by Marcin 'Qrczak' Kowalczyk).
+ fix aclocal.m4 so that the wide-character version of ncurses gets
compiled as libncursesw.5.dylib, instead of libncurses.5w.dylib
(adapted from patch by James J Ramsey).
+ change configure script for --with-caps option to indicate that it
is no longer experimental.
+ change configure script to reflect the fact that --enable-widec has
not been "experimental" since 5.3 (report by Bruno Lustosa).
20040911
+ add 'B' test to ncurses.c, to exercise some wide-character functions.
20040828
+ modify infocmp -i option to match 8-bit controls against its table
entries, e.g., so it can analyze the xterm-8bit entry.
+ add morphos terminfo entry, improve amiga-8bit entry (Pavel Fedin).
+ correct translation of "%%" in terminfo format to termcap, e.g.,
using "tic -C" (Redhat #130921).
+ modified configure script CF_XOPEN_SOURCE macro to ensure that if
it defines _POSIX_C_SOURCE, that it defines it to a specific value
(comp.os.stratus newsgroup comment).
20040821
+ fixes to build with Ada95 binding with gnat 3.4 (all warnings are
fatal, and gnat does not follow the guidelines for pragmas).
However that did find a coding error in Assume_Default_Colors().
+ modify several terminfo entries to ensure xterm mouse and cursor
visibility are reset in rs2 string: hurd, putty, gnome,
konsole-base, mlterm, Eterm, screen (Debian #265784, Debian #55637).
The xterm entries are left alone - old ones for compatibility, and
the new ones do not require this change. -TD
20040814
+ fake a SIGWINCH in newterm() to accommodate buggy terminal emulators
and window managers (Debian #265631).
> terminfo updates -TD
+ remove dch/dch1 from rxvt because they are implemented inconsistently
with the common usage of bce/ech
+ remove khome from vt220 (vt220's have no home key)
+ add rxvt+pcfkeys
20040807
+ modify test/ncurses.c 'b' test, adding v/V toggles to cycle through
combinations of video attributes so that for instance bold and
underline can be tested. This made the legend too crowded, added
a help window as well.
+ modify test/ncurses.c 'b' test to cycle through default colors if
the -d option is set.
+ update putty terminfo entry (Robert de Bath).
20040731
+ modify test/cardfile.c to allow it to read more data than can be
displayed.
+ correct logic in resizeterm.c which kept it from processing all
levels of window hierarchy (reports by Folkert van Heusden,
Chris Share).
20040724
+ modify "tic -cv" to ignore delays when comparing strings. Also
modify it to ignore a canceled sgr string, e.g., for terminals which
cannot properly combine attributes in one control sequence.
+ corrections for gnome and konsole entries (Redhat #122815, patch by
Hans de Goede)
> terminfo updates -TD
+ make ncsa-m rmacs/smacs consistent with sgr
+ add sgr, rc/sc and ech to syscons entries
+ add function-keys to decansi
+ add sgr to mterm-ansi
+ add sgr, civis, cnorm to emu
+ correct/simplify cup in addrinfo
20040717
> terminfo updates -TD
+ add xterm-pc-fkeys
+ review/update gnome and gnome-rh90 entries (prompted by Redhat
#122815).
+ review/update konsole entries
+ add sgr, correct sgr0 for kterm and mlterm
+ correct tsl string in kterm
20040711
+ add configure option --without-xterm-new
20040710
+ add check in wget_wch() for printable bytes that are not part of a
multibyte character.
+ modify wadd_wchnstr() to render text using window's background
attributes.
+ improve tic's check to compare sgr and sgr0.
+ fix c++ directory's .cc.i rule.
+ modify logic in tgetent() which adjusts the termcap "me" string
to work with ISO-2022 string used in xterm-new (cf: 20010908).
+ modify tic's check for conflicting function keys to omit that if
converting termcap to termcap format.
+ add -U option to tic and infocmp.
+ add rmam/smam to linux terminfo entry (Trevor Van Bremen)
> terminfo updates -TD
+ minor fixes for emu
+ add emu-220
+ change wyse acsc strings to use 'i' map rather than 'I'
+ fixes for avatar0
+ fixes for vp3a+
20040703
+ use tic -x to install terminfo database -TD
+ add -x to infocmp's usage message.
+ correct field used for comparing O_ROWMAJOR in set_menu_format()
(report/patch by Tony Li).
+ fix a missing nul check in set_field_buffer() from 20040508 changes.
> terminfo updates -TD
+ make xterm-xf86-v43 derived from xterm-xf86-v40 rather than
xterm-basic -TD
+ align with xterm patch #192's use of xterm-new -TD
+ update xterm-new and xterm-8bit for cvvis/cnorm strings -TD
+ make xterm-new the default "xterm" entry -TD
20040626
+ correct BUILD_CPPFLAGS substitution in ncurses/Makefile.in, to allow
cross-compiling from a separate directory tree (report/patch by
Dan Engel).
+ modify is_term_resized() to ensure that window sizes are nonzero,
as documented in the manpage (report by Ian Collier).
+ modify CF_XOPEN_SOURCE configure macro to make Hurd port build
(Debian #249214, report/patch by Jeff Bailey).
+ configure-script mods from xterm, e.g., updates to CF_ADD_CFLAGS
+ update config.guess, config.sub
> terminfo updates -TD
+ add mlterm
+ add xterm-xf86-v44
+ modify xterm-new aka xterm-xfree86 to accommodate luit, which
relies on G1 being used via an ISO-2022 escape sequence (report by
Juliusz Chroboczek)
+ add 'hurd' entry
20040619
+ reconsidered winsnstr(), decided after comparing other
implementations that wrapping is an X/Open documentation error.
+ modify test/inserts.c to test all flavors of insstr().
20040605
+ add setlocale() calls to a few test programs which may require it:
demo_forms.c, filter.c, ins_wide.c, inserts.c
+ correct a few misspelled function names in ncurses-intro.html (report
by Tony Li).
+ correct internal name of key_defined() manpage, which conflicted with
define_key().
20040529
+ correct size of internal pad used for holding wide-character
field_buffer() results.
+ modify data_ahead() to work with wide-characters.
20040522
+ improve description of terminfo if-then-else expressions (suggested
by Arne Thomassen).
+ improve test/ncurses.c 'd' test, allow it to use external file for
initial palette (added xterm-16color.dat and linux-color.dat), and
reset colors to the initial palette when starting/ending the test.
+ change limit-check in init_color() to allow r/g/b component to
reach 1000 (cf: 20020928).
20040516
+ modify form library to use cchar_t's rather than char's in the
wide-character configuration for storing data for field buffers.
+ correct logic of win_wchnstr(), which did not work for more than
one cell.
20040508
+ replace memset/memcpy usage in form library with for-loops to
simplify changing the datatype of FIELD.buf, part of wide-character
changes.
+ fix some inconsistent use of #if/#ifdef (report by Alain Guibert).
20040501
+ modify menu library to account for actual number of columns used by
multibyte character strings, in the wide-character configuration
(adapted from patch by Philipp Tomsich).
+ add "-x" option to infocmp like tic's "-x", for use in "-F"
comparisons. This modifies infocmp to only report extended
capabilities if the -x option is given, making this more consistent
with tic. Some scripts may break, since infocmp previous gave this
information without an option.
+ modify termcap-parsing to retain 2-character aliases at the beginning
of an entry if the "-x" option is used in tic.
20040424
+ minor compiler-warning and test-program fixes.
20040417
+ modify tic's missing-sgr warning to apply to terminfo only.
+ free some memory leaks in tic.
+ remove check in post_menu() that prevented menus from extending
beyond the screen (request by Max J. Werner).
+ remove check in newwin() that prevents allocating windows
that extend beyond the screen. Solaris curses does this.
+ add ifdef in test/color_set.c to allow it to compile with older
curses.
+ add napms() calls to test/dots.c to make it not be a CPU hog.
20040403
+ modify unctrl() to return null if its parameter does not correspond
to an unsigned char.
+ add some limit-checks to guard isprint(), etc., from being used on
values that do not fit into an unsigned char (report by Sami Farin).
20040328
+ fix a typo in the _nc_get_locale() change.
20040327
+ modify _nc_get_locale() to use setlocale() to query the program's
current locale rather than using getenv(). This fixes a case in tin
which relies on legacy treatment of 8-bit characters when the locale
is not initialized (reported by Urs Jansen).
+ add sgr string to screen's and rxvt's terminfo entries -TD.
+ add a check in tic for terminfo entries having an sgr0 but no sgr
string. This confuses Tru64 and HPUX curses when combined with
color, e.g., making them leave line-drawing characters in odd places.
+ correct casts used in ABSENT_BOOLEAN, CANCELLED_BOOLEAN, matches the
original definitions used in Debian package to fix PowerPC bug before
20030802 (Debian #237629).
20040320
+ modify PutAttrChar() and PUTC() macro to improve use of
A_ALTCHARSET attribute to prevent line-drawing characters from
being lost in situations where the locale would otherwise treat the
raw data as nonprintable (Debian #227879).
20040313
+ fix a redefinition of CTRL() macro in test/view.c for AIX 5.2 (report
by Jim Idle).
+ remove ".PP" after ".SH NAME" in a few manpages; this confuses
some apropos script (Debian #237831).
20040306
+ modify ncurses.c 'r' test so editing commands, like inserted text,
set the field background, and the state of insert/overlay editing
mode is shown in that test.
+ change syntax of dummy targets in Ada95 makefiles to work with pmake.
+ correct logic in test/ncurses.c 'b' for noncolor terminals which
did not recognize a quit-command (cf: 20030419).
20040228
+ modify _nc_insert_ch() to allow for its input to be part of a
multibyte string.
+ split out lib_insnstr.c, to prepare to rewrite it. X/Open states
that this function performs wrapping, unlike all of the other
insert-functions. Currently it does not wrap.
+ check for nl_langinfo(CODESET), use it if available (report by
Stanislav Ievlev).
+ split-out CF_BUILD_CC macro, actually did this for lynx first.
+ fixes for configure script CF_WITH_DBMALLOC and CF_WITH_DMALLOC,
which happened to work with bash, but not with Bourne shell (report
by Marco d'Itri via tin-dev).
20040221
+ some changes to adapt the form library to wide characters, incomplete
(request by Mike Aubury).
+ add symbol to curses.h which can be used to suppress include of
stdbool.h, e.g.,
#define NCURSES_ENABLE_STDBOOL_H 0
#include <curses.h>
(discussion on XFree86 mailing list).
20040214
+ modify configure --with-termlib option to accept a value which sets
the name of the terminfo library. This would allow a packager to
build libtinfow.so renamed to coincide with libtinfo.so (discussion
with Stanislav Ievlev).
+ improve documentation of --with-install-prefix, --prefix and
$(DESTDIR) in INSTALL (prompted by discussion with Paul Lew).
+ add configure check if the compiler can use -c -o options to rename
its output file, use that to omit the 'cd' command which was used to
ensure object files are created in a separate staging directory
(prompted by comments by Johnny Wezel, Martin Mokrejs).
20040208 5.4 release for upload to ftp.gnu.org
+ update TO-DO.
20040207 pre-release
+ minor fixes to _nc_tparm_analyze(), i.e., do not count %i as a param,
and do not count %d if it follows a %p.
+ correct an inconsistency between handling of codes in the 128-255
range, e.g., as illustrated by test/ncurses.c f/F tests. In POSIX
locale, the latter did not show printable results, while the former
did.
+ modify MKlib_gen.sh to compensate for broken C preprocessor on Mac
OS X, which alters "%%" to "% % " (report by Robert Simms, fix
verified by Scott Corscadden).
20040131 pre-release
+ modify SCREEN struct to align it between normal/wide curses flavors
to simplify future changes to build a single version of libtinfo
(patch by Stanislav Ievlev).
+ document handling of carriage return by addch() in manpage.
+ document special features of unctrl() in manpage.
+ documented interface changes in INSTALL.
+ corrected control-char test in lib_addch.c to account for locale
(Debian #230335, cf: 971206).
+ updated test/configure.in to use AC_EXEEXT and AC_OBJEXT.
+ fixes to compile Ada95 binding with Debian gnat 3.15p-4 package.
+ minor configure-script fixes for older ports, e.g., BeOS R4.5.
20040125 pre-release
+ amend change to PutAttrChar() from 20030614 which computed the number
of cells for a possibly multi-cell character. The 20030614 change
forced the cell to a blank if the result from wcwidth() was not
greater than zero. However, wcwidth() called for parameters in the
range 128-255 can give this return value. The logic now simply
ensures that the number of cells is greater than zero without
modifying the displayed value.
20040124 pre-release
+ looked good for 5.4 release for upload to ftp.gnu.org (but see above)
+ modify configure script check for ranlib to use AC_CHECK_TOOL, since
that works better for cross-compiling.
20040117 pre-release
+ modify lib_get_wch.c to prefer mblen/mbtowc over mbrlen/mbrtowc to
work around core dump in Solaris 8's locale support, e.g., for
zh_CN.GB18030 (report by Saravanan Bellan).
+ add includes for <stdarg.h> and <stdio.h> in configure script macro
to make <wchar.h> check work with Tru64 4.0d.
+ add terminfo entry for U/Win -TD
+ add terminfo entries for SFU aka Interix aka OpenNT (Federico
Bianchi).
+ modify tput's error messages to prefix them with the program name
(report by Vincent Lefevre, patch by Daniel Jacobowitz (see Debian
#227586)).
+ correct a place in tack where exit_standout_mode was used instead of
exit_attribute_mode (patch by Jochen Voss (see Debian #224443)).
+ modify c++/cursesf.h to use const in the Enumeration_Field method.
+ remove an ambiguous (actually redundant) method from c++/cursesf.h
+ make $HOME/.terminfo update optional (suggested by Stanislav Ievlev).
+ improve sed script which extracts libtool's version in the
CF_WITH_LIBTOOL macro.
+ add ifdef'd call to AC_PROG_LIBTOOL to CF_WITH_LIBTOOL macro (to
simplify local patch for Albert Chin-A-Young)..
+ add $(CXXFLAGS) to link command in c++/Makefile.in (adapted from
patch by Albert Chin-A-Young)..
+ fix a missing substitution in configure.in for "$target" needed for
HPUX .so/.sl case.
+ resync CF_XOPEN_SOURCE configure macro with lynx; fixes IRIX64 and
NetBSD 1.6 conflicts with _XOPEN_SOURCE.
+ make check for stdbool.h more specific, to ensure that including it
will actually define/declare bool for the configured compiler.
+ rewrite ifdef's in curses.h relating NCURSES_BOOL and bool. The
intention of that is to #define NCURSES_BOOL as bool when the
compiler declares bool, and to #define bool as NCURSES_BOOL when it
does not (reported by Jim Gifford, Sam Varshavchik, cf: 20031213).
20040110 pre-release
+ change minor version to 4, i.e., ncurses 5.4
+ revised/improved terminfo entries for tvi912b, tvi920b (Benjamin C W
Sittler).
+ simplified ncurses/base/version.c by defining the result from the
configure script rather than using sprintf (suggested by Stanislav
Ievlev).
+ remove obsolete casts from c++/cursesw.h (reported by Stanislav
Ievlev).
+ modify configure script so that when configuring for termlib, programs
such as tic are not linked with the upper-level ncurses library
(suggested by Stanislav Ievlev).
+ move version.c from ncurses/base to ncurses/tinfo to allow linking
of tic, etc., using libtinfo (suggested by Stanislav Ievlev).
20040103
+ adjust -D's to build ncursesw on OpenBSD.
+ modify CF_PROG_EXT to make OS/2 build with EXEEXT.
+ add pecho_wchar().
+ remove <wctype.h> include from lib_slk_wset.c which is not needed (or
available) on older platforms.
20031227
+ add -D's to build ncursew on FreeBSD 5.1.
+ modify shared library configuration for FreeBSD 4.x/5.x to add the
soname information (request by Marc Glisse).
+ modify _nc_read_tic_entry() to not use MAX_ALIAS, but PATH_MAX only
for limiting the length of a filename in the terminfo database.
+ modify termname() to return the terminal name used by setupterm()
rather than $TERM, without truncating to 14 characters as documented
by X/Open (report by Stanislav Ievlev, cf: 970719).
+ re-add definition for _BSD_TYPES, lost in merge (cf: 20031206).
20031220
+ add configure option --with-manpage-format=catonly to address
behavior of BSDI, allow install of man+cat files on NetBSD, whose
behavior has diverged by requiring both to be present.
+ remove leading blanks from comment-lines in manlinks.sed script to
work with Tru64 4.0d.
+ add screen.linux terminfo entry (discussion on mutt-users mailing
list).
20031213
+ add a check for tic to flag missing backslashes for termcap
continuation lines. ncurses reads the whole entry, but termcap
applications do not.
+ add configure option "--with-manpage-aliases" extending
"--with-manpage-aliases" to provide the option of generating ".so"
files rather than symbolic links for manpage aliases.
+ add bool definition in include/curses.h.in for configurations with no
usable C++ compiler (cf: 20030607).
+ fix pathname of SigAction.h for building with --srcdir (reported by
Mike Castle).
20031206
+ folded ncurses/base/sigaction.c into includes of ncurses/SigAction.h,
since that header is used only within ncurses/tty/lib_tstp.c, for
non-POSIX systems (discussion with Stanislav Ievlev).
+ remove obsolete _nc_outstr() function (report by Stanislav Ievlev
<inger@altlinux.org>).
+ add test/background.c and test/color_set.c
+ modify color_set() function to work with color pair 0 (report by
George Andreou <gbandreo@tem.uoc.gr>).
+ add configure option --with-trace, since defining TRACE seems too
awkward for some cases.
+ remove a call to _nc_free_termtype() from read_termtype(), since the
corresponding buffer contents were already zeroed by a memset (cf:
20000101).
+ improve configure check for _XOPEN_SOURCE and related definitions,
adding special cases for Solaris' __EXTENSIONS__ and FreeBSD's
__BSD_TYPES (reports by Marc Glisse <marc.glisse@normalesup.org>).
+ small fixes to compile on Solaris and IRIX64 using cc.
+ correct typo in check for pre-POSIX sort options in MKkey_defs.sh
(cf: 20031101).
20031129
+ modify _nc_gettime() to avoid a problem with arithmetic on unsigned
values (Philippe Blain).
+ improve the nanosleep() logic in napms() by checking for EINTR and
restarting (Philippe Blain).
+ correct expression for "%D" in lib_tgoto.c (Juha Jarvi
<mooz@welho.com>).
20031122
+ add linux-vt terminfo entry (Andrey V Lukyanov <land@long.yar.ru>).
+ allow "\|" escape in terminfo; tic should not warn about this.
+ save the full pathname of the trace-file the first time it is opened,
to avoid creating it in different directories if the application
opens and closes it while changing its working directory.
+ modify configure script to provide a non-empty default for
$BROKEN_LINKER
20031108
+ add DJGPP to special case of DOS-style drive letters potentially
appearing in TERMCAP environment variable.
+ fix some spelling in comments (reports by Jason McIntyre, Jonathon
Gray).
+ update config.guess, config.sub
20031101
+ fix a memory leak in error-return from setupterm() (report by
Stanislav Ievlev <inger@altlinux.org>).
+ use EXEEXT and OBJEXT consistently in makefiles.
+ amend fixes for cross-compiling to use separate executable-suffix
BUILD_EXEEXT (cf: 20031018).
+ modify MKkey_defs.sh to check for sort utility that does not
recognize key options, e.g., busybox (report by Peter S Mazinger
<ps.m@gmx.net>).
+ fix potential out-of-bounds indexing in _nc_infotocap() (found by
David Krause using some of the new malloc debugging features
under OpenBSD, patch by Ted Unangst).
+ modify CF_LIB_SUFFIX for Itanium releases of HP-UX, which use a
".so" suffix (patch by Jonathan Ward <Jonathan.Ward@hp.com>).
20031025
+ update terminfo for xterm-xfree86 -TD
+ add check for multiple "tc=" clauses in a termcap to tic.
+ check for missing op/oc in tic.
+ correct _nc_resolve_uses() and _nc_merge_entry() to allow infocmp and
tic to show cancelled capabilities. These functions were ignoring
the state of the target entry, which should be untouched if cancelled.
+ correct comment in tack/output.c (Debian #215806).
+ add some null-pointer checks to lib_options.c (report by Michael
Bienia).
+ regenerated html documentation.
+ correction to tar-copy.sh, remove a trap command that resulted in
leaving temporary files (cf: 20030510).
+ remove contact/maintainer addresses for Juergen Pfeifer (his request).
20031018
+ updated test/configure to reflect changes for libtool (cf: 20030830).
+ fix several places in tack/pad.c which tested and used the parameter-
and parameterless strings inconsistently, i.e., in pad_rin(),
pad_il(), pad_indn() and pad_dl() (Debian #215805).
+ minor fixes for configure script and makefiles to cleanup executables
generated when cross-compiling for DJGPP.
+ modify infocmp to omit check for $TERM for operations that do not
require it, e.g., "infocmp -e" used to build fallback list (report by
Egmont Koblinger).
20031004
+ add terminfo entries for DJGPP.
+ updated note about maintainer in ncurses-intro.html
20030927
+ update terminfo entries for gnome terminal.
+ modify tack to reset colors after each color test, correct a place
where exit_standout_mode was used instead of exit_attribute_mode.
+ improve tack's bce test by making it set colors other than black
on white.
+ plug a potential recursion between napms() and _nc_timed_wait()
(report by Philippe Blain).
20030920
+ add --with-rel-version option to allow workaround to allow making
libtool on Darwin generate the "same" library names as with the
--with-shared option. The Darwin ld program does not work well
with a zero as the minor-version value (request by Chris Zubrzycki).
+ modify CF_MIXEDCASE_FILENAMES macro to work with cross-compiling.
+ modify tack to allow it to run from fallback terminfo data.
> patch by Philippe Blain:
+ improve PutRange() by adjusting call to EmitRange() and corresponding
return-value to not emit unchanged characters on the end of the
range.
+ improve a check for changed-attribute by exiting a loop when the
change is found.
+ improve logic in TransformLine(), eliminating a duplicated comparison
in the clr_bol logic.
20030913
> patch by Philippe Blain:
+ in ncurses/tty/lib_mvcur.c,
move the label 'nonlocal' just before the second gettimeofday() to
be able to compute the diff time when 'goto nonlocal' used.
Rename 'msec' to 'microsec' in the debug-message.
+ in ncurses/tty/lib_mvcur.c,
Use _nc_outch() in carriage return/newline movement instead of
putchar() which goes to stdout. Move test for xold>0 out of loop.
+ in ncurses/tinfo/setbuf.c,
Set the flag SP->_buffered at the end of operations when all has been
successful (typeMalloc can fail).
+ simplify NC_BUFFERED macro by moving check inside _nc_setbuf().
20030906
+ modify configure script to avoid using "head -1", which does not
work if POSIXLY_CORRECT (sic) is set.
+ modify run_tic.in to avoid using wrong shared libraries when
cross-compiling (Dan Kegel).
20030830
+ alter configure script help message to make it clearer that
--with-build-cc does not specify a cross-compiler (suggested by Dan
Kegel <dank@kegel.com>).
+ modify configure script to accommodate libtool 1.5, as well as add an
parameter to the "--with-libtool" option which can specify the
pathname of libtool (report by Chris Zubrzycki). We note that
libtool 1.5 has more than one bug in its C++ support, so it is not
able to install libncurses++, for instance, if $DESTDIR or the option
--with-install-prefix is used.
20030823
> patch by Philippe Blain:
+ move assignments to SP->_cursrow, SP->_curscol into online_mvcur().
+ make baudrate computation in delay_output() consistent with the
assumption in _nc_mvcur_init(), i.e., a byte is 9 bits.
20030816
+ modify logic in waddch_literal() to take into account zh_TW.Big5
whose multibyte sequences may contain "printable" characters, e.g.,
a "g" in the sequence "\247g" (Debian #204889, cf: 20030621).
+ improve storage used by _nc_safe_strcpy() by ensuring that the size
is reset based on the initialization call, in case it were called
after other strcpy/strcat calls (report by Philippe Blain).
> patch by Philippe Blain:
+ remove an unused ifdef for REAL_ATTR & WANT_CHAR
+ correct a place where _cup_cost was used rather than _cuu_cost
20030809
+ fix a small memory leak in _nc_free_termtype().
+ close trace-file if trace() is called with a zero parameter.
+ free memory allocated for soft-key strings, in delscreen().
+ fix an allocation size in safe_sprintf.c for the "*" format code.
+ correct safe_sprintf.c to not return a null pointer if the format
happens to be an empty string. This applies to the "configure
--enable-safe-sprintf" option (Redhat #101486).
20030802
+ modify casts used for ABSENT_BOOLEAN and CANCELLED_BOOLEAN (report by
Daniel Jacobowitz).
> patch by Philippe Blain:
+ change padding for change_scroll_region to not be proportional to
the size of the scroll-region.
+ correct error-return in _nc_safe_strcat().
20030726
+ correct limit-checks in _nc_scroll_window() (report and test-case by
Thomas Graf <graf@dms.at> cf: 20011020).
+ re-order configure checks for _XOPEN_SOURCE to avoid conflict with
_GNU_SOURCE check.
20030719
+ use clr_eol in preference to blanks for bce terminals, so select and
paste will have fewer trailing blanks, e.g., when using xterm
(request by Vincent Lefevre).
+ correct prototype for wunctrl() in manpage.
+ add configure --with-abi-version option (discussion with Charles
Wilson).
> cygwin changes from Charles Wilson:
+ aclocal.m4: on cygwin, use autodetected prefix for import
and static lib, but use "cyg" for DLL.
+ include/ncurses_dll.h: correct the comments to reflect current
status of cygwin/mingw port. Fix compiler warning.
+ misc/run_tic.in: ensure that tic.exe can find the uninstalled
DLL, by adding the lib-directory to the PATH variable.
+ misc/terminfo.src (nxterm|xterm-color): make xterm-color
primary instead of nxterm, to match XFree86's xterm.terminfo
usage and to prevent circular links.
(rxvt): add additional codes from rxvt.org.
(rxvt-color): new alias
(rxvt-xpm): new alias
(rxvt-cygwin): like rxvt, but with special acsc codes.
(rxvt-cygwin-native): ditto. rxvt may be run under XWindows, or
with a "native" MSWin GUI. Each takes different acsc codes,
which are both different from the "normal" rxvt's acsc.
(cygwin): cygwin-in-cmd.exe window. Lots of fixes.
(cygwinDBG): ditto.
+ mk-1st.awk: use "cyg" for the DLL prefix, but "lib" for import
and static libs.
20030712
+ update config.guess, config.sub
+ add triples for configuring shared libraries with the Debian
GNU/FreeBSD packages (patch by Robert Millan <zeratul2@wanadoo.es>).
20030705
+ modify CF_GCC_WARNINGS so it only applies to gcc, not g++. Some
platforms have installed g++ along with the native C compiler, which
would not accept gcc warning options.
+ add -D_XOPEN_SOURCE=500 when configuring with --enable-widec, to
get mbstate_t declaration on HPUX 11.11 (report by David Ellement).
+ add _nc_pathlast() to get rid of casts in _nc_basename() calls.
+ correct a sign-extension in wadd_wch() and wecho_wchar() from
20030628 (report by Tomohiro Kubota).
+ work around omission of btowc() and wctob() from wide-character
support (sic) in NetBSD 1.6 using mbtowc() and wctomb() (report by
Gabor Z Papp).
+ add portability note to curs_get_wstr.3x (Debian #199957).
20030628
+ rewrite wadd_wch() and wecho_wchar() to call waddch() and wechochar()
respectively, to avoid calling waddch_noecho() with wide-character
data, since that function assumes its input is 8-bit data.
Similarly, modify waddnwstr() to call wadd_wch().
+ remove logic from waddnstr() which transformed multibyte character
strings into wide-characters. Rewrite of waddch_literal() from
20030621 assumes its input is raw multibyte data rather than wide
characters (report by Tomohiro Kubota).
20030621
+ write getyx() and related 2-return macros in terms of getcury(),
getcurx(), etc.
+ modify waddch_literal() in case an application passes bytes of a
multibyte character directly to waddch(). In this case, waddch()
must reassemble the bytes into a wide-character (report by Tomohiro
Kubota <kubota@debian.org>).
20030614
+ modify waddch_literal() in case a multibyte value occupies more than
two cells.
+ modify PutAttrChar() to compute the number of character cells that
are used in multibyte values. This fixes a problem displaying
double-width characters (report/test by Mitsuru Chinen
<mchinen@yamato.ibm.com>).
+ add a null-pointer check for result of keyname() in _tracechar()
+ modify _tracechar() to work around glibc sprintf bug.
20030607
+ add a call to setlocale() in cursesmain.cc, making demo display
properly in a UTF-8 locale.
+ add a fallback definition in curses.priv.h for MB_LEN_MAX (prompted
by discussion with Gabor Z Papp).
+ use macros NCURSES_ACS() and NCURSES_WACS() to hide cast needed to
appease -Wchar-subscript with g++ 3.3 (Debian #195732).
+ fix a redefinition of $RANLIB in the configure script when libtool
is used, which broke configure on Mac OS X (report by Chris Zubrzycki
<beren@mac.com>).
+ simplify ifdef for bool declaration in curses.h.in (suggested by
Albert Chin-A-Young).
+ remove configure script check to allow -Wconversion for older
versions of gcc (suggested by Albert Chin-A-Young).
20030531
+ regenerated html manpages.
+ modify ifdef's in curses.h.in that disabled use of __attribute__()
for g++, since recent versions implement the cases which ncurses uses
(Debian #195230).
+ modify _nc_get_token() to handle a case where an entry has no
description, and capabilities begin on the same line as the entry
name.
+ fix a typo in ncurses_dll.h reported by gcc 3.3.
+ add an entry for key_defined.3x to man_db.renames.
20030524
+ modify setcchar() to allow converting control characters to complex
characters (report/test by Mitsuru Chinen <mchinen@yamato.ibm.com>).
+ add tkterm entry -TD
+ modify parse_entry.c to allow a terminfo entry with a leading
2-character name (report by Don Libes).
+ corrected acsc in screen.teraterm, which requires a PC-style mapping.
+ fix trace statements in read_entry.c to use lseek() rather than
tell().
+ fix signed/unsigned warnings from Sun's compiler (gcc should give
these warnings, but it is unpredictable).
+ modify configure script to omit -Winline for gcc 3.3, since that
feature is broken.
+ modify manlinks.sed to add a few functions that were overlooked since
they return function pointers: field_init, field_term, form_init,
form_term, item_init, item_term, menu_init and menu_term.
20030517
+ prevent recursion in wgetch() via wgetnstr() if the connection cannot
be switched between cooked/raw modes because it is not a TTY (report
by Wolfgang Gutjahr <gutw@knapp.com>).
+ change parameter of define_key() and key_defined() to const (prompted
by Debian #192860).
+ add a check in test/configure for ncurses extensions, since there
are some older versions, etc., which would not compile with the
current test programs.
+ corrected demo in test/ncurses.c of wgetn_wstr(), which did not
convert wchar_t string to multibyte form before printing it.
+ corrections to lib_get_wstr.c:
+ null-terminate buffer passed to setcchar(), which occasionally
failed.
+ map special characters such as erase- and kill-characters into
key-codes so those will work as expected even if they are not
mentioned in the terminfo.
+ modify PUTC() and Charable() macros to make wide-character line
drawing work for POSIX locale on Linux console (cf: 20021221).
20030510
+ make typography for program options in manpages consistent (report
by Miloslav Trmac <mitr@volny.cz>).
+ correct dependencies in Ada95/src/Makefile.in, so the builds with
"--srcdir" work (report by Warren L Dodge).
+ correct missing definition of $(CC) in Ada95/gen/Makefile.in
(reported by Warren L Dodge <warrend@mdhost.cse.tek.com>).
+ fix typos and whitespace in manpages (patch by Jason McIntyre
<jmc@prioris.mini.pw.edu.pl>).
20030503
+ fix form_driver() cases for REQ_CLR_EOF, REQ_CLR_EOL, REQ_DEL_CHAR,
REQ_DEL_PREV and REQ_NEW_LINE, which did not ensure the cursor was at
the editing position before making modifications.
+ add test/demo_forms and associated test/edit_field.c demos.
+ modify test/configure.in to use test/modules for the list of objects
to compile rather than using the list of programs.
20030419
+ modify logic of acsc to use the original character if no mapping is
defined, noting that Solaris does this.
+ modify ncurses 'b' test to avoid using the acs_map[] array since
20021231 changes it to no longer contain information from the acsc
string.
+ modify makefile rules in c++, progs, tack and test to ensure that
the compiler flags (e.g., $CFLAGS or $CCFLAGS) are used in the link
command (report by Jose Luis Rico Botella <informatica@serpis.com>).
+ modify soft-key initialization to use A_REVERSE if A_STANDOUT would
not be shown when colors are used, i.e., if ncv#1 is set in the
terminfo as is done in "screen".
20030412
+ add a test for slk_color(), in ncurses.c
+ fix some issues reported by valgrind in the slk_set() and slk_wset()
code, from recent rewrite.
+ modify ncurses 'E' test to use show previous label via slk_label(),
as in 'e' test.
+ modify wide-character versions of NewChar(), NewChar2() macros to
ensure that the whole struct is initialized.
20030405
+ modify setupterm() to check if the terminfo and terminal-modes have
already been read. This ensures that it does not reinvoke
def_prog_mode() when an application calls more than one function,
such as tgetent() and initscr() (report by Olaf Buddenhagen).
20030329
+ add 'E' test to ncurses.c, to exercise slk_wset().
+ correct handling of carriage-return in wgetn_wstr(), used in demo of
slk_wset().
+ first draft of slk_wset() function.
20030322
+ improved warnings in tic when suppressing items to fit in termcap's
1023-byte limit.
+ built a list in test/README showing which externals are being used
by either programs in the test-directory or via internal library
calls.
+ adjust include-options in CF_ETIP_DEFINES to avoid missing
ncurses_dll.h, fixing special definitions that may be needed for
etip.h (reported by Greg Schafer <gschafer@zip.com.au>).
20030315
+ minor fixes for cardfile.c, to make it write the updated fields to
a file when ^W is given.
+ add/use _nc_trace_bufcat() to eliminate some fixed buffer limits in
trace code.
20030308
+ correct a case in _nc_remove_string(), used by define_key(), to avoid
infinite loop if the given string happens to be a substring of other
strings which are assigned to keys (report by John McCutchan).
+ add key_defined() function, to tell which keycode a string is bound
to (discussion with John McCutchan <ttb@tentacle.dhs.org>).
+ correct keybound(), which reported definitions in the wrong table,
i.e., the list of definitions which are disabled by keyok().
+ modify demo_keydef.c to show the details it changes, and to check
for errors.
20030301
+ restructured test/configure script, make it work for libncursesw.
+ add description of link_fieldtype() to manpage (report by
L Dee Holtsclaw <dee@sunbeltsoft.com>).
20030222
+ corrected ifdef's relating to configure check for wchar_t, etc.
+ if the output is a socket or other non-tty device, use 1 millisecond
for the cost in mvcur; previously it was 9 milliseconds because the
baudrate was not known.
+ in _nc_get_tty_mode(), initialize the TTY buffer on error, since
glibc copies uninitialized data in that case, as noted by valgrind.
+ modify tput to use the same parameter analysis as tparm() does, to
provide for user-defined strings, e.g., for xterm title, a
corresponding capability might be
title=\E]2;%p1%s^G,
+ modify MKlib_gen.sh to avoid passing "#" tokens through the C
preprocessor. This works around Mac OS X's preprocessor, which
insists on adding a blank on each side of the token (report/analysis
by Kevin Murphy <murphy@genome.chop.edu>).
20030215
+ add configure check for wchar_t and wint_t types, rather than rely
on preprocessor definitions. Also work around for gcc fixinclude
bug which creates a shadow copy of curses.h if it sees these symbols
apparently typedef'd.
+ if database is disabled, do not generate run_tic.sh
+ minor fixes for memory-leak checking when termcap is read.
20030208
+ add checking in tic for incomplete line-drawing character mapping.
+ updated configure script to reflect fix for AC_PROG_GCC_TRADITIONAL,
which is broken in autoconf 2.5x for Mac OS X 10.2.3 (report by
Gerben Wierda <Sherlock@rna.nl>).
+ make return value from _nc_printf_string() consistent. Before,
depending on whether --enable-safe-sprintf was used, it might not be
cached for reallocating.
20030201
+ minor fixes for memory-leak checking in lib_tparm.c, hardscroll.c
+ correct a potentially-uninitialized value if _read_termtype() does
not read as much data as expected (report by Wolfgang Rohdewald
<wr6@uni.de>).
+ correct several places where the aclocal.m4 macros relied on cache
variable names which were incompatible (as usual) between autoconf
2.13 and 2.5x, causing the test for broken-linker to give incorrect
results (reports by Gerben Wierda <Sherlock@rna.nl> and Thomas Esser
<te@dbs.uni-hannover.de>).
+ do not try to open gpm mouse driver if standard output is not a tty;
the gpm library does not make this check (bug report for dialog
by David Oliveira <davidoliveira@develop.prozone.ws>).
20030125
+ modified emx.src to correspond more closely to terminfo.src, added
emx-base to the latter -TD
+ add configure option for FreeBSD sysmouse, --with-sysmouse, and
implement support for that in lib_mouse.c, lib_getch.c
20030118
+ revert 20030105 change to can_clear_with(), does not work for the
case where the update is made on cells which are blanks with
attributes, e.g., reverse.
+ improve ifdef's to guard against redefinition of wchar_t and wint_t
in curses.h (report by Urs Jansen).
20030111
+ improve mvcur() by checking if it is safe to move when video
attributes are set (msgr), and if not, reset/restore attributes
within that function rather than doing it separately in the GoTo()
function in tty_update.c (suggested by Philippe Blain).
+ add a message in run_tic.in to explain more clearly what does not
work when attempting to create a symbolic link for /usr/lib/terminfo
on OS/2 and other platforms with no symbolic links (report by John
Polterak).
+ change several sed scripts to avoid using "\+" since it is not a BRE
(basic regular expression). One instance caused terminfo.5 to be
misformatted on FreeBSD (report by Kazuo Horikawa
<horikawa@FreeBSD.org> (see FreeBSD docs/46709)).
+ correct misspelled 'wint_t' in curs_get_wch.3x (Michael Elkins).
20030105
+ improve description of terminfo operators, especially static/dynamic
variables (comments by Mark I Manning IV <mark4th@earthlink.net>).
+ demonstrate use of FIELDTYPE by modifying test/ncurses 'r' test to
use the predefined TYPE_ALPHA field-type, and by defining a
specialized type for the middle initial/name.
+ fix MKterminfo.sh, another workaround for POSIXLY_CORRECT misfeature
of sed 4.0
> patch by Philippe Blain:
+ optimize can_clear_with() a little by testing first if the parameter
is indeed a "blank".
+ simplify ClrBottom() a little by allowing it to use clr_eos to clear
sections as small as one line.
+ improve ClrToEOL() by checking if clr_eos is available before trying
to use it.
+ use tputs() rather than putp() in a few cases in tty_update.c since
the corresponding delays are proportional to the number of lines
affected: repeat_char, clr_eos, change_scroll_region.
20021231
+ rewrite of lib_acs.c conflicts with copying of SCREEN acs_map to/from
global acs_map[] array; removed the lines that did the copying.
20021228
+ change some overlooked tputs() calls in scrolling code to use putp()
(report by Philippe Blain).
+ modify lib_getch.c to avoid recursion via wgetnstr() when the input
is not a tty and consequently mode-changes do not work (report by
<R.Chamberlin@querix.com>).
+ rewrote lib_acs.c to allow PutAttrChar() to decide how to render
alternate-characters, i.e., to work with Linux console and UTF-8
locale.
+ correct line/column reference in adjust_window(), needed to make
special windows such as curscr track properly when resizing (report
by Lucas Gonze <lgonze@panix.com>).
> patch by Philippe Blain:
+ correct the value used for blank in ClrBottom() (broken in 20000708).
+ correct an off-by-one in GoTo() parameter in _nc_scrolln().
20021221
+ change several tputs() calls in scrolling code to use putp(), to
enable padding which may be needed for some terminals (patch by
Philippe Blain).
+ use '%' as sed substitute delimiter in run_tic script to avoid
problems with pathname delimiters such as ':' and '@' (report by John
Polterak).
+ implement a workaround so that line-drawing works with screen's
crippled UTF-8 support (tested with 3.9.13). This only works with
the wide-character support (--enable-widec); the normal library will
simply suppress line-drawing when running in a UTF-8 locale in screen.
20021214
+ allow BUILD_CC and related configure script variables to be
overridden from the environment.
+ make build-tools variables in ncurses/Makefile.in consistent with
the configure script variables (report by Maciej W Rozycki).
+ modify ncurses/modules to allow
configure --disable-leaks --disable-ext-funcs
to build (report by Gary Samuelson).
+ fix a few places in configure.in which lacked quotes (report by
Gary Samuelson <gary.samuelson@verizon.com>).
+ correct handling of multibyte characters in waddch_literal() which
force wrapping because they are started too late on the line (report
by Sam Varshavchik).
+ small fix for CF_GNAT_VERSION to ignore the help-message which
gnatmake adds to its version-message.
> Maciej W Rozycki <macro@ds2.pg.gda.pl>:
+ use AC_CHECK_TOOL to get proper values for AR and LD for cross
compiling.
+ use $cross_compiling variable in configure script rather than
comparing $host_alias and $target alias, since "host" is
traditionally misused in autoconf to refer to the target platform.
+ change configure --help message to use "build" rather than "host"
when referring to the --with-build-XXX options.
20021206
+ modify CF_GNAT_VERSION to print gnatmake's version, and to allow for
possible gnat versions such as 3.2 (report by Chris Lingard
<chris@stockwith.co.uk>).
+ modify #define's for CKILL and other default control characters in
tset to use the system's default values if they are defined.
+ correct interchanged defaults for kill and interrupt characters
in tset, which caused it to report unnecessarily (Debian #171583).
+ repair check for missing C++ compiler, which is broken in autoconf
2.5x by hardcoding it to g++ (report by Martin Mokrejs).
+ update config.guess, config.sub (2002-11-30)
+ modify configure script to skip --with-shared, etc., when the
--with-libtool option is given, since they would be ignored anyway.
+ fix to allow "configure --with-libtool --with-termlib" to build.
+ modify configure script to show version number of libtool, to help
with bug reports. libtool still gets confused if the installed
ncurses libraries are old, since it ignores the -L options at some
point (tested with libtool 1.3.3 and 1.4.3).
+ reorder configure script's updating of $CPPFLAGS and $CFLAGS to
prevent -I options in the user's environment from introducing
conflicts with the build -I options (may be related to reports by
Patrick Ash and George Goffe).
+ rename test/define_key.c to test/demo_defkey.c, test/keyok.c to
test/demo_keyok.c to allow building these with libtool.
20021123
+ add example program test/define_key.c for define_key().
+ add example program test/keyok.c for keyok().
+ add example program test/ins_wide.c for wins_wch() and wins_wstr().
+ modify wins_wch() and wins_wstr() to interpret tabs by using the
winsch() internal function.
+ modify setcchar() to allow for wchar_t input strings that have
more than one spacing character.
20021116
+ fix a boundary check in lib_insch.c (patch by Philippe Blain).
+ change type for *printw functions from NCURSES_CONST to const
(prompted by comment by Pedro Palhoto Matos <plpm@mega.ist.utl.pt>,
but really from a note on X/Open's website stating that either is
acceptable, and the latter will be used in a future revision).
+ add xterm-1002, xterm-1003 terminfo entries to demonstrate changes in
lib_mouse.c (20021026) -TD
+ add screen-bce, screen-s entries from screen 3.9.13 (report by
Adam Lazur <zal@debian.org>) -TD
+ add mterm terminfo entries -TD
20021109
+ split-out useful fragments in terminfo for vt100 and vt220 numeric
keypad, i.e., vt100+keypad, vt100+pfkeys, vt100+fnkeys and
vt220+keypad. The last as embedded in various entries had ka3 and
kb2 interchanged (report/discussion with Leonard den Ottolander
<leonardjo@hetnet.nl>).
+ add check in tic for keypads consistent with vt100 layout.
+ improve checks in tic for color capabilities
20021102
+ check for missing/empty/illegal terminfo name in _nc_read_entry()
(report by Martin Mokrejs, where $TERM was set to an empty string).
+ rewrote lib_insch.c, combining it with lib_insstr.c so both handle
tab and other control characters consistently (report by Philippe
Blain).
+ remove an #undef for KEY_EVENT from curses.tail used in the
experimental NCURSES_WGETCH_EVENTS feature. The #undef confuses
dpkg's build script (Debian #165897).
+ fix MKlib_gen.sh, working around the ironically named POSIXLY_CORRECT
feature of GNU sed 4.0 (reported by Ervin Nemeth <airwin@inf.bme.hu>).
20021026
+ implement logic in lib_mouse.c to handle position reports which are
generated when XFree86 xterm is initialized with private modes 1002
or 1003. These are returned to the application as the
REPORT_MOUSE_POSITION mask, which was not implemented. Tested both
with ncurses 'a' menu (prompted by discussion with Larry Riedel
<Larry@Riedel.org>).
+ modify lib_mouse.c to look for "XM" terminfo string, which allows
one to override the escape sequence used to enable/disable mouse
mode. In particular this works for XFree86 xterm private modes
1002 and 1003. If "XM" is missing (note that this is an extended
name), lib_mouse uses the conventional private mode 1000.
+ correct NOT_LOCAL() macro in lib_mvcur.c to refer to screen_columns
where it used screen_lines (report by Philippe Blain).
+ correct makefile rules for the case when both --with-libtool and
--with-gpm are given (report by Mr E_T <troll@logi.net.au>).
+ add note to terminfo manpage regarding the differences between
setaf/setab and setf/setb capabilities (report by Pavel Roskin).
20021019
+ remove redundant initialization of TABSIZE in newterm(), since it is
already done in setupterm() (report by Philippe Blain).
+ add test/inserts.c, to test winnstr() and winsch().
+ replace 'sort' in dist.mk with script that sets locale to POSIX.
+ update URLs in announce.html.in (patch by Frederic L W Meunier).
+ remove glibc add-on files, which are no longer needed (report by
Frederic L W Meunier).
20021012 5.3 release for upload to ftp.gnu.org
+ modify ifdef's in etip.h.in to allow the etip.h header to compile
with gcc 3.2 (patch by Dimitar Zhekov <jimmy@is-vn.bg>).
+ add logic to setupterm() to make it like initscr() and newterm(),
by checking for $NCURSES_TRACE environment variable and enabling
the debug trace in that case.
+ modify setupterm() to ensure that it initializes the baudrate, for
applications such as tput (report by Frank Henigman).
+ modify definition of bits used for command-line and library debug
traces to avoid overlap, using new definition TRACE_SHIFT to relate
the two.
+ document tput's interpretation of parameterized strings according to
whether parameters are given, etc. (discussion with Robert De Bath).
20021005 pre-release
+ correct winnwstr() to account for non-character cells generated when
a double-width character is added (report by Michael Bienia
<michael@vorlon.ping.de>).
+ modify _nc_viswbuf2n() to provide better results using wctomb().
+ correct logic in _nc_varargs() which broke tracing of parameters for
formats such as "%.*s".
+ correct scale factor in linux-c and linux-c-nc terminfo entries
(report Floyd Davidson).
+ change tic -A option to -t, add the same option to infocmp for
consistency.
+ correct "%c" implementation in lib_tparm.c, which did not map a null
character to a 128 (cf: 980620) (patch by Frank Henigman
<fjhenigman@mud.cgl.uwaterloo.ca>).
20020928 pre-release
+ modify MKkey_defs.sh to check for POSIX sort -k option, use that if
it is found, to accommodate newer utility which dropped the
compatibility support for +number options (reported by Andrey A
Chernov).
+ modify linux terminfo entry to use color palette feature from
linux-c-nc entry (comments by Tomasz Wasiak and Floyd Davidson).
+ restore original color definitions in endwin() if init_color() was
used, and resume those colors on the next doupdate() or refresh()
(report by Tomasz Wasiak <tjwasiak@komputom.com.pl>).
+ improve debug-traces by modifying MKlib_gen.sh to generate calls
to returnBool() and returnAttr().
+ add/use _nc_visbufn() and _nc_viswbufn() to limit the debug trace
of waddnstr() and similar functions to match the parameters as used.
+ add/use _nc_retrace_bool() and _nc_retrace_unsigned().
+ correct type used by _nc_retrace_chtype().
+ add debug traces to some functions in lib_mouse.c
+ modify lib_addch.c to handle non-spacing characters.
+ correct parameter of RemAttr() in lib_bkgd.c, which caused the c++
demo's boxes to lose the A_ALTCHARSET flag (broken in 20020629).
+ correct width computed in _tracedump(), which did not account for
the attributes (broken in 20010602).
+ modify test/tracemunch to replace addresses for windows other than
curscr, newscr and stdscr with window0, window1, etc.
20020921 pre-release
+ redid fix for edit_man.sed path.
+ workaround for Cygwin bug which makes subprocess writes to stdout
result in core dump.
+ documented getbegx(), etc.
+ minor fixes to configure script to use '%' consistently as a sed
delimiter rather than '@'.
> patch by Philippe Blain:
+ add check in lib_overlay.c to ensure that the windows to be merged
actually overlap, and in copywin(), limit the area to be touched
to the lines given for the destination window.
20020914 pre-release
+ modified curses.h so that if the wide-character version is installed
overwriting /usr/include/curses.h, and if it relied on libutf8.h,
then applications that use that header for wide-character support
must define HAVE_LIBUTF8_H.
+ modify putwin(), getwin() and dupwin() to allow them to operate on
pads (request by Philippe Blain).
+ correct attribute-merging in wborder(), broken in 20020216 (report
by Tomasz Wasiak <tjwasiak@grubasek.komputom.com.pl>).
> patch by Philippe Blain:
+ corrected pop-counts in tparam_internal() to '!' and '~' cases.
+ use sizeof(NCURSES_CH_T) in one place that used sizeof(chtype).
+ remove some unused variables from mvcur test-driver.
20020907 pre-release
+ change configure script to allow install of widec-character
(ncursesw) headers to overwrite normal (ncurses) headers, since the
latter is a compatible subset of the former.
+ fix path of edit_man.sed in configure script, needed to regenerate
html manpages on Debian.
+ fix mismatched enums in vsscanf.c, which caused warning on Solaris.
+ update README.emx to reflect current patch used for autoconf.
+ change web- and ftp-site to invisible-island.net
> patch by Philippe Blain:
+ change case for 'P' in tparam_internal() to indicate that it pops
a variable from the stack.
+ correct sense of precision and width in parse_format(), to avoid
confusion.
+ modify lib_tparm.c, absorb really_get_space() into get_space().
+ modify getwin() and dupwin() to copy the _notimeout, _idlok and
_idcok window fields.
+ better fix for _nc_set_type(), using typeMalloc().
20020901 pre-release
+ change minor version to 3, i.e., ncurses 5.3
+ update config.guess, config.sub
+ retest build with each configure option; minor ifdef fixes.
+ make keyname() return a null pointer rather than "UNKNOWN STRING" to
match XSI.
+ modify handling of wide line-drawing character functions to use the
normal line-drawing characters when not in UTF-8 locale.
+ add check/fix to comp_parse.c to suppress warning about missing acsc
string. This happens in configurations where raw termcap information
is processed; tic already does this and other checks.
+ modify tic's check for ich/ich1 versus rmir/smir to only warn about
ich1, to match xterm patch #70 notes.
+ moved information for ripped-off lines into SCREEN struct to allow
use in resizeterm().
+ add experimental wgetch_events(), ifdef'd with NCURSES_WGETCH_EVENTS
(adapted from patch by Ilya Zakharevich - see ncurses/README.IZ).
+ amend check in kgetch() from 20020824 to look only for function-keys,
otherwise escape sequences are not resolved properly.
> patch by Philippe Blain:
+ removed redundant assignment to SP->_checkfd from newterm().
+ check return-value of setupterm() in restartterm().
+ use sizeof(NCURSES_CH_T) in a few places that used sizeof(chtype).
+ prevent dupwin() from duplicating a pad.
+ prevent putwin() from writing a pad.
+ use typeRealloc() or typeMalloc() in preference to direct calls on
_nc_doalloc().
20020824
+ add a check in kgetch() for cooked characters in the fifo to avoid
calling fifo_push() when a KEY_RESIZE is available (report/analysis
by Sam Varshavchik <mrsam@courier-mta.com>).
+ fix an overlooked case for Redhat #68199 (Philippe Blain).
+ ensure clearerr() is called before using ferror() e.g., in
lib_screen.c (report by Philippe Blain).
20020817
+ modify lib_screen.c and lib_newwin.c to maintain the SCREEN-specific
pointers for curscr/stdscr/newscr when scr_save() and scr_restore()
modify the global curscr/stdscr/newscr variables. Fixes Redhat
#68199.
+ add checks for null pointer in calls to tparm() and tgoto() based on
FreeBSD bug report. If ncurses were built with termcap support, and
the first call to tgoto() were a zero-length string, the result would
be a null pointer, which was not handled properly.
+ correct a typo in terminfo.head, which gave the octal code for colon
rather than comma.
+ remove the "tic -u" option from 20020810, since it did not account
for nested "tc=" clauses, and when that was addressed, was still
unsatisfactory.
20020810
+ add tic -A option to suppress capabilities which are commented out
when translating to termcap.
+ add tic -u option to provide older behavior of "tc=" clauses.
+ modified tic to expand all but the final "tc=" clause in a termcap
entry, to accommodate termcap libraries which do not handle multiple
tc clauses.
+ correct typo in curs_inopts.3x regarding CS8/CS7 usage (report by
Philippe Blain).
+ remove a couple of redundant uses of A_ATTRIBUTES in expressions
using AttrOf(), which already incorporates that mask (report by
Philippe Blain).
+ document TABSIZE variable.
+ add NCURSES_ASSUMED_COLORS environment variable, to allow users to
override compiled-in default black-on-white assumption used in
assume_default_colors().
+ correct an off-by-one comparison against max_colors in COLORFGBG
logic.
+ correct a use of uninitialized memory found by valgrind (reported by
Olaf Buddenhagen <olafBuddenhagen@web.de>).
+ modified wresize() to ensure that a failed realloc will not corrupt
the window structure, and to make subwindows fit within the resized
window (completes Debian #87678, Debian #101699)
20020803
+ fix an off-by-one in lib_pad.c check for limits of pad (patch by
Philippe Blain).
+ revise logic for BeOS in lib_twait.c altered in 20011013 to restore
logic used by lib_getch.c's support for GPM or EMX mouse (report by
Philippe Blain)
+ remove NCURSES_CONST from several prototypes in curses.wide, to make
the --enable-const --enable-widec configure options to work together
(report by George Goffe <grgoffe@yahoo.com>).
20020727
+ finish no-leak checking in cardfile.c, using this for testing changes
to resizeterm().
+ simplify _nc_freeall() using delscreen().
20020720
+ check error-return from _nc_set_tty_mode() in _nc_initscr() and
reset_prog_mode() (report/patch by Philippe Blain).
+ regenerate configure using patch for autoconf 2.52, to address
problem with identifying C++ bool type.
+ correct/improve logic to produce an exit status for errors in tput,
which did not exit with an error when told to put a string not in the
current terminfo entry (report by David Gomez <david@pleyades.net>).
+ modify configure script AC_OUTPUT() call to work around defect in
autoconf 2.52 which adds an ifdef'd include to the generated
configure definitions.
+ remove fstat() check from scr_init(), which also fixes a missing
include for <sys/stat.h> from 20020713 (reported by David Ellement,
fix suggested by Philippe Blain).
+ update curs_scanw.3x manpage to note that XSI curses differs from
SVr4 curses: return-values are incompatible.
+ correct several prototypes in manpages which used const
inconsistently with the curses.h file, and removed spurious const's
in a few places from curses.h, e.g., for wbkgd() (report by Glenn
Maynard <glenn@zewt.org>).
+ change internal type used by tparm() to long, to work with LP64 model.
+ modify nc_alloc.h to allow building with g++, for testing.
20020713
+ add resize-handling to cardfile.c test program.
+ altered resizeterm() to avoid having it fail when a child window
cannot be resized because it would be larger than its parent. (More
work must be done on this, but it works well enough to integrate).
+ improve a limit-check in lib_refresh.c
+ remove check in lib_screen.c relating dumptime to file's modification
times, since that would not necessarily work for remotely mounted
filesystems.
+ modify lrtest to simplify debugging changes to resizeterm, e.g.,
t/T commands to enable/disable tracing.
+ updated status of multibyte support in TO-DO.
+ update contact info in source-files (patch by Juergen Pfeifer).
20020706
+ add Caps.hpux11, as an example.
+ modify version_filter(), used to implement -R option for tic and
infocmp, to use computed array offsets based on the Caps.* file which
is actually configured, rather than constants which correspond to
the Caps file.
+ reorganized lib_raw.c to avoid updating SP and cur_term state if the
functions fail (reported by Philippe Blain).
+ add -Wundef to gcc warnings, adjust a few ifdef's to accommodate gcc.
20020629
+ correct parameters to setcchar() in ncurses.c (cf: 20020406).
+ set locale in most test programs (view.c and ncurses.c were the
only ones).
+ add configure option --with-build-cppflags (report by Maksim A
Nikulin <M.A.Nikulin@inp.nsk.su>).
+ correct a typo in wide-character logic for lib_bkgnd.c (Philippe
Blain).
+ modify lib_wacs.c to not cancel the acsc, smacs, rmacs strings when
in UTF-8 locale. Wide-character functions use Unicode values, while
narrow-character functions use the terminfo data.
+ fix a couple of places in Ada95/samples which did not compile with
gnat 3.14
+ modify mkinstalldirs so the DOS-pathname case is locale-independent.
+ fix locale problem in MKlib_gen.sh by forcing related variables to
POSIX (C), using same approach as autoconf (set variables only if
they were set before). Update MKterminfo.sh and MKtermsort.sh to
match.
20020622
+ add charset to generated html.
+ add mvterm entry, adapted from a FreeBSD bug-report by Daniel Rudy
<dcrudy@pacbell.net> -TD
+ add rxvt-16color, ibm+16color entries -TD
+ modify check in --disable-overwrite option so that it is used by
default unless the --prefix/$prefix value is not /usr, in attempt to
work around packagers, e.g., for Sun's freeware, who do not read the
INSTALL notes.
20020615
+ modify wgetch() to allow returning ungetch'd KEY_RESIZE as a function
key code in get_wch().
+ extended resize-handling in test/ncurses 'a' menu to the entire
stack of windows created with 'w' commands.
+ improve $COLORFGBG feature by interpreting an out-of-range color
value as an SGR 39 or 49, for foreground/background respectively.
+ correct a typo in configure --enable-colorfgbg option, and move it
to the experimental section (cf: 20011208).
20020601
+ add logic to dump_entry.c to remove function-key definitions that do
not fit into the 1023-byte limit for generated termcaps. This makes
hds200 fit.
+ more improvements to tic's warnings, including logic to ignore
differences between delay values in sgr strings.
+ move definition of KEY_RESIZE into MKkeydefs.sh script, to
accommodate Caps.osf1r5 which introduced a conflicting definition.
20020525
+ add simple resize-handling in test/ncurses.c 'a' menu.
+ fixes in keyname() and _tracechar() to handle negative values.
+ make tic's warnings about mismatches in sgr strings easier to follow.
+ correct tic checks for number of parameters in smgbp and smglp.
+ improve scoansi terminfo entry, and add scoansi-new entry -TD
+ add pcvt25-color terminfo entry -TD
+ add kf13-kf48 strings to cons25w terminfo entry (reported by Stephen
Hurd <deuce@lordlegacy.org> in newsgroup lucky.freebsd.bugs) -TD
+ add entrypoint _nc_trace_ttymode(), use this to distinguish the
Ottyb and Nttyb members of terminal (aka cur_term), for tracing.
20020523
+ correct and simplify logic for lib_pad.c change in 20020518 (reported
by Mike Castle).
20020518
+ fix lib_pad.c for case of drawing a double-width character which
falls off the left margin of the pad (patch by Kriang Lerdsuwanakij
<lerdsuwa@users.sourceforge.net>)
+ modify configure script to work around broken gcc 3.1 "--version"
option, which adds unnecessary trash to the requested information.
+ adjust ifdef's in case SIGWINCH is not defined, e.g., with DJGPP
(reported by Ben Decker <deckerben@freenet.de>).
20020511
+ implement vid_puts(), vid_attr(), term_attrs() based on the narrow-
character versions as well.
+ implement erasewchar(), killwchar() based on erasechar() and
killchar().
+ modify erasechar() and killchar() to return ERR if the value was
VDISABLE.
+ correct a bug in wresize() in handling subwindows (based on patch by
Roger Gammans <rgammans@computer-surgery.co.uk>, report by Scott Beck
<scott@gossamer-threads.com>).
+ improve test/tclock.c by making the second-hand update more often
if gettimeofday() is available.
20020429
+ workaround for Solaris sed with MKlib_gen.sh (reported by Andy
Tsouladze <andyt@mypoints.com>).
20020427
+ correct return-value from getcchar(), making it consistent with
Solaris and Tru64.
+ reorder loops that generate makefile rules for different models vs
subsets so configure --with-termlib works again. This was broken by
logic added to avoid duplicate rules in changes to accommodate cygwin
dll's (reported by George.R.Goffe@seagate.com).
+ update config.guess, config.sub
20020421
+ modify ifdef's in write_entry.c to allow use of symbolic links on
platforms with no hard links, e.g., BeOS.
+ modify a few includes to allow compile with BeOS, which has stdbool.h
with a conflicting definition for 'bool' versus its OS.h definition.
+ amend MKlib_gen.sh to work with gawk, which defines 'func' as an
alias for 'function'.
20020420
+ correct form of prototype for ripoffline().
+ modify MKlib_gen.sh to test that all functions marked as implemented
can be linked.
20020413
+ add manpages: curs_get_wstr.3x, curs_in_wchstr.3x
+ implement wgetn_wstr().
+ implement win_wchnstr().
+ remove redefinition of unget_wch() in lib_gen.c (reported by
Jungshik Shin <jshin@jtan.com>).
20020406
+ modified several of the test programs to allow them to compile with
vendor curses implementations, e.g., Solaris, AIX -TD
20020323
+ modified test/configure to allow configuring against ncursesw.
+ change WACS_xxx definition to use address, to work like Tru64 curses.
20020317
+ add 'e' and 'm' toggles to 'a', 'A' tests in ncurses.c to demonstrate
effect of echo/noecho and meta modes.
+ add 'A' test to ncurses.c to demonstrate wget_wch() and related
functions.
+ add manpage: curs_get_wch.3x
+ implement unget_wch().
+ implement wget_wch().
20020310
+ regenerated html manpages.
+ add manpages: curs_in_wch.3x, curs_ins_wch.3x, curs_ins_wstr.3x
+ implement wins_wch().
+ implement win_wch().
+ implement wins_nwstr(), wins_wstr().
20020309
+ add manpages: curs_addwstr.3x, curs_winwstr.3x
+ implement winnwstr(), winwstr().
20020223
+ add manpages: curs_add_wchstr.3x, curs_bkgrnd.3x
+ document wunctrl, key_name.
+ implement key_name().
+ remove const's in lib_box.c incorrectly leftover after splitting off
lib_box_set.c
+ update llib-lncurses, llib-ncursesw, fix configure script related to
these.
20020218
+ remove quotes on "SYNOPSIS" in man/curs_box_set.3x, which resulted
in spurious symlinks on install.
20020216
+ implement whline_set(), wvline_set(), add manpage curs_border_set.
+ add subtest 'b' to 'F' and 'f' in ncurses.c to demonstrate use of
box() and box_set() functions.
+ add subtest 'u' to 'F' in ncurses.c, to demonstrate use of addstr()
given UTF-8 string equivalents of WACS_xxx symbols.
+ minor fixes to several manpages based on groff -ww output.
+ add descriptions of external variables of termcap interface to
the manpage (report by Bruce Evans <bde@zeta.org.au>).
> patches by Bernhard Rosenkraenzer:
+ correct configure option --with-bool, which was executed as
--with-ospeed.
+ add quotes for parameters of --with-bool and --with-ospeed configure
options.
> patch by Sven Verdoolaege (report by Gerhard Haering
<haering_linux@gmx.de>):
+ correct typos in definitions of several wide-character macros:
waddwstr, wgetbkgrnd, mvaddwstr, mvwadd_wchnstr, mvwadd_wchnstr,
mvwaddwstr.
+ pass $(CPPFLAGS) to MKlib_gen.sh, thereby fixing a missing definition
of _XOPEN_SOURCE_EXTENDED, e.g., on Solaris
20020209
+ implement wide-acs characters for UTF-8 locales. When in UTF-8
locale, ignore narrow version of acs. Add 'F' test to test/ncurses.c
to demonstrate.
+ correct prototype in keybound manpage (noted from a Debian mailing
list item).
20020202
+ add several cases to the wscanw() example in testcurs.c, showing the
format.
+ implement a simple vsscanf() fallback function which uses the %n
conversion to help parse the input data (prompted by discussion with
Albert Chin-A-Young).
+ modify mk-1st.awk and test/Makefile.in to add $(LDFLAGS) when making
shared libraries, and to use $(CFLAGS) when linking test programs
(patch by Albert Chin-A-Young).
+ add a call to _nc_keypad() in keypad() to accommodate applications
such as nvi, which use curses for output but not for input (fixes
Debian #131263, cf: 20011215).
+ add entrypoints to resizeterm.c which provide better control over the
process: is_term_resized() and resize_term(). The latter restores
the original design of resizeterm() before KEY_RESIZE was added in
970906. Do this to accommodate 20010922 changes to view.c, but allow
for programs with their own sigwinch handler, such as lynx (reported
by Russell Ruby <russ@math.orst.edu>).
20020127
+ fix a typo in change to mk-1st.awk, which broke the shared-library
makefile rules (reported by Martin Mokrejs).
20020126
+ update config.guess, config.sub
+ finish changes needed to build dll's on cygwin.
+ fix a typo in mvwchat() macro (reported by Cy <yam@homerow.net).
20020119
+ add case in lib_baudrate.c for B921600 (patch by Andrey A Chernov).
+ correct missing sed-editing stage in manpage installs which is used
to rename manpages, broken in 20010324 fix for Debian #89939 (Debian
#78866).
+ remove -L$(libdir) from linker flags, probably not needed any more
since HPUX is handled properly (reported by Niibe Yutaka
<gniibe@m17n.org>).
+ add configure check for mbstate_t, needed for wide-character
configuration. On some platforms we must include <wchar.h> to
define this (reported by Daniel Jacobowitz).
+ incorporate some of the changes needed to build dll's on cygwin.
20020112a
+ workaround for awk did not work with mawk, adjusted shell script.
20020112
+ add Caps.osf1r5, as an example.
+ modify behavior of can_clear_with() so that if an application is
running in a non-bce terminals with default colors enabled, it
returns true, allowing the user to select/paste text without picking
up extraneous trailing blanks (adapted from patch by Daniel
Jacobowitz <dmj+@andrew.cmu.edu>).
+ modify generated curses.h to ifdef-out prototypes for extensions if
they are disabled, and to define curses_version() as a string in that
case. This is needed to make the programs such as tic build in that
configuration.
+ modified generated headers.sh to remove a gzip'd version of the
target file if it exists, in case non-gzip'd manpages are installed
into a directory where gzip'd ones exist. In that case, the latter
would be found.
+ corrected a redundant initialization of signal handlers from 20010922
changes.
+ clarified bug-reporting address in terminfo.src (report by John H
DuBois III <spcecdt@armory.com>).
> several fixes from Robert Joop:
+ do not use "-v" option of awk in MKkey_defs.sh because it does not
work with SunOS nawk.
+ modify definitions for libutf8 in curses.h to avoid redefinition
warnings for mblen
+ quoted references to compiler in shell command in misc/Makefile, in
case it uses multiple tokens.
20011229
+ restore special case from 20010922 changes to omit SA_RESTART when
setting up SIGWINCH handler, which is needed to allow wgetch() to be
interrupted by that signal.
+ updated configure macro CF_WITH_PATHLIST, to omit some double quotes
not needed with autoconf 2.52
+ revert configure script to autoconf 2.13 patched with
autoconf-2.13-19990117.patch.gz (or later)
from
ftp://invisible-island.net/autoconf/
because autoconf 2.52 macro AC_PROG_AWK does not work on HPUX 11.0
(report by David Ellement <ellement@sdd.hp.com>). This also fixes a
different problem configuring with Mac OS X (reported by Marc Smith
<marc.a.smith@home.com>).
20011222
+ modify include/edit_cfg.h to eliminate BROKEN_LINKER symbol from
term.h
+ move prototype for _nc_vsscanf() into curses.h.in to omit
HAVE_VSSCANF symbol from curses.h, which was dependent upon the
ncurses_cfg.h file which is not installed.
+ use ACS_LEN rather than SIZEOF(acs_map) in trace code of lib_acs.c,
to work with broken linker configuration, e.g., cygwin (report by
Robert Joop <rj@rainbow.in-berlin.de>).
+ make napms() call _nc_timed_wait() rather than poll() or select(),
to work around broken implementations of these on cygwin.
20011218
+ drop configure macro CF_WIDEC_SHIFT, since that was rendered obsolete
by Sven Verdoolaege's rewrite of wide-character support. This makes
libncursesw incompatible again, but makes the header files almost the
same as in the narrow-character configuration.
+ simplify definitions that combine wide/narrow versions of bkgd, etc.,
to eliminate differences between the wide/narrow versions of curses.h
+ correct typo in configure macro CF_FUNC_VSSCANF
+ correct location of call to _nc_keypad() from 20011215 changes which
prevented keypad() from being disabled (reported by Lars Hecking).
20011215
+ rewrote ncurses 'a' test to exercise wgetch() and keypad() functions
better, e.g., by adding a 'w' command to create new windows which
may have different keypad() settings.
+ corrected logic of keypad() by adding internal screen state to track
whether the terminal's keypad-mode has been set. Use this in
wgetch() to update the keypad-mode according to whether the
associated window's keypad-mode has been set with keypad(). This
corrects a related problem restoring terminal state after handling
SIGTSTP (reported by Mike Castle).
+ regenerate configure using patch for autoconf 2.52
autoconf-2.52-patch.gz
at
ftp://invisible-island.net/autoconf/
+ update config.guess, config.sub from
http://subversions.gnu.org/cgi-bin/viewcvs/config/config/
+ minor changes to quoting in configure script to allow it to work
with autoconf 2.52
20011208
+ modify final checks in lib_setup.c for line and col values, making
them independent.
+ modify acs_map[] if configure --broken-linker is specified, to make
it use a function rather than an array (prompted by an incorrect
implementation in cygwin package).
+ correct spelling of configure option --enable-colorfgbg, which
happened to work if --with-develop was set (noted in cygwin package
for ncurses).
+ modify ifdef for genericerror() to compile with SUNWspro Sun WorkShop
6 update 1 C++ 5.2 (patch by Sullivan N Beck <sbeck@cise.ufl.edu>).
+ add configure checks to see if ncurses' fallback vsscanf() will
compile either of the special cases for FILE structs, and if not,
force it to the case which simply returns an error (report by
Sullivan N Beck <sbeck@cise.ufl.edu> indicates that Solaris 8 with
64-bits does not allow access to FILE's fields).
+ modify ifdef's for c++/cursesw.cc to use the fallback vsscanf() in
the ncurses library if no better substitute for this can be found
in the C++ runtime.
+ modify the build to name dynamic libraries according to the
convention used on OS X and Darwin. Rather than something like
libncurses.dylib.5.2, Darwin would name it libncurses. 5.dylib.
There are a few additional minor fixes, such as setting the library
version and compatibility version numbers (patch by Jason Evans
<jevans@apple.com>).
+ use 'sh' to run mkinstalldirs, to work around problems with buggy
versions of 'make' on OS/2 (report by John Polterak <jp@eyup.org>).
+ correct typo in manpage description of curs_set() (Debian #121548).
+ replace the configure script existence-check for mkstemp() by one
that checks if the function works, needed for older glibc and
AmigaOS.
20011201
+ modify script that generates fallbacks.c to compile a temporary
copy of the terminfo source in case the host does not contain all of
the entries requested for fallbacks (request by Greg Roelofs).
+ modify configure script to accommodate systems such as Mac OS X whose
<stdbool.h> header defines a 'bool' type inconsistent with ncurses,
which normally makes 'bool' consistent with C++. Include <stdbool.h>
from curses.h to force consistent usage, define a new type
NCURSES_BOOL and related that to the exported 'bool' as either a
typedef or definition, according to whether <stdbool.h> is present
(based on a bug report for tin 1.5.9 by Aaron Adams <adamsa@mac.com>).
20011124
+ added/updated terminfo entries for M$ telnet and KDE konsole -TD
20011117
+ updated/expanded Apple_Terminal and Darwin PowerPC terminfo entries
(Benjamin C W Sittler).
+ add putty terminfo entry -TD
+ if configuring for wide-curses, define _XOPEN_SOURCE_EXTENDED, since
this may not otherwise be defined to make test/view.c compile.
20011110
+ review/correct several missing/generated items in curses.wide, sorted
the lists to make subsequent diff's easier to track.
20011103
+ add manual pages for add_wch(), echo_wchar(), getcchar(),
mvadd_wch(), mvwadd_wch(), setcchar(), wadd_wch() and wecho_wchar().
+ implement wecho_wchar()
+ modify _tracedump() to handle wide-characters by mapping them to '?'
and control-characters to '.', to make the trace file readable. Also
dynamically allocate the buffer used by _tracedump() for formatting
the results.
+ modify T_CALLED/T_RETURN macros to ease balancing call/return lines
in a trace by using curly braces.
+ implement _nc_viscbuf(), for tracing cchar_t arrays.
+ correct trace-calls in setcchar() and getcchar() functions, which
traced the return values but not the entry to each function.
+ correct usage message in test/view.c, which still mentioned -u flag.
20011027
+ modify configure script to allow building with termcap only, or with
fallbacks only. In this case, we do not build tic and toe.
+ add configure --with-termpath option, to override default TERMPATH
value of /etc/termcap:/usr/share/misc/termcap.
+ cosmetic change to tack: make menu descriptions agree with menu
titles.
20011020
+ rewrote limit-checks in wscrl() and associated _nc_scroll_window(),
to ensure that if the parameter of wscrl() is larger than the size of
the scrolling region, then the scrolling region will be cleared
(report by Ben Kohlen <bckohlen@yahoo.com>).
+ add trace/varargs.c, using this to trace parameters in lib_printw.c
+ implement _tracecchar_t2() and _tracecchar_t().
+ split-out trace/visbuf.c
+ correct typo in lib_printw.c changes from 20010922 (report by Mike
Castle).
20011013
+ modify run_tic.sh to check if the build is a cross-compile. In that
case, do not use the build's tic to install the terminfo database
(report by Rafael Rodriguez Velilla <rrv@tid.es>).
+ modify mouse click resolution so that mouseinterval(-1) will disable
it, e.g., to handle touchscreens via a slow connection (request by
Byron Stanoszek <gandalf@winds.org>).
+ correct mouseinterval() default value shown in curs_mouse.3x
+ remove conflicting definition of mouse_trafo() (reported by Lars
Hecking, using gcc 2.95.3).
20011001
+ simpler fix for signal_name(), to replace the one overlooked in
20010929 (reported by Larry Virden).
20010929
+ add -i option to view.c, to test ncurses' check for non-default
signal handler for SIGINT, etc.
+ add cases for shared-libraries on Darwin/OS X (patch by Rob Braun
<bbraun@synack.net>).
+ modify tset to restore original I/O modes if an error is encountered.
Also modify to use buffered stderr consistently rather than mixing
with write().
+ change signal_name() function to use if-then-else rather than case
statement, since signal-values aren't really integers (reported by
Larry Virden).
+ add limit checks in wredrawln(), fixing a problem where lynx was
repainting a pad which was much larger than the screen.
20010922
+ fix: PutRange() was counting the second part of a wide character as
part of a run, resulting in a cursor position that was one too far
(patch by Sven Verdoolaege).
+ modify resizeterm() to not queue a KEY_RESIZE if there was no
SIGWINCH, thereby separating the two styles of SIGWINCH handling
in test/view.c
+ simplified lib_tstp.c, modify it to use SA_RESTART flag for SIGWINCH.
+ eliminate several static buffers in the terminfo compiler, using
allocated buffers.
+ modify MKkeyname.awk so that keyname() does not store its result into
a static buffer that is overwritten by the next call.
+ reorganize the output of infocmp -E and -e options to compile cleanly
with gcc -Wwrite-strings warnings.
+ remove redefinition of chgat/wchgat/mvwchgat from curses.wide
20010915
+ add label to test/view.c, showing the name of the last key or signal
that made the screen repaint, to make it clearer when a sigwinch
does this.
+ use ExitProgram() consistently in the test-programs to make it
simpler to test leaks with dmalloc, etc.
+ move hashtab static data out of hashmap.c into SCREEN struct.
+ make NO_LEAK code compile with revised WINDOWLIST structs.
20010908
+ modify tgetent() to check if exit_attribute_mode resets the alternate
character set, and if so, attempt to adjust the copy of the termcap
"me" string which it will return to eliminate that part. In
particular, 'screen' would lose track of line-drawing characters
(report by Frederic L W Meunier <0@pervalidus.net>, analysis by
Michael Schroeder).
20010901
+ specify DOCTYPE in html manpages.
+ add missing macros for several "generated" functions: attr_get(),
attr_off(), attr_on(), attr_set(), chgat(), mvchgat(), mvwchgat() and
mouse_trafo().
+ modify view.c to agree with non-experimental status of ncurses'
sigwinch handler:
+ change the sense of the -r option, making it default to ncurses'
sigwinch handler.
+ add a note explaining what functions are unsafe in a signal
handler.
+ add a -c option, to set color display, for testing.
+ unset $data variable in MKterminfo.sh script, to address potential
infinite loop if shell malfunction (report by Samuel Mikes
<smikes@cubane.com>, for bash 2.05.0 on a Linux 2.0.36 system).
+ change kbs in mach terminfo entries to ^? (Marcus Brinkmann
<Marcus.Brinkmann@ruhr-uni-bochum.de>).
+ correct logic for COLORFGBG environment variable: if rxvt is compiled
with xpm support, the variable has three fields, making it slightly
incompatible with itself. In either case, the background color is
the last field.
20010825
+ move calls to def_shell_mode() and def_prog_mode() before loop with
callbacks in lib_set_term.c, since the c++ demo otherwise initialized
the tty modes before saving them (patch by John David Anglin
<dave@hiauly1.hia.nrc.ca>).
+ duplicate logic used to initialize trace in newterm(), in initscr()
to avoid confusing trace of initscr().
+ simplify allocation of WINDOW and WINDOWLIST structs by making the
first a part of the second rather than storing a pointer. This saves
a call to malloc for each window (discussion with Philippe Blain).
+ remove unused variable 'used_ncv' from lib_vidattr.c (Philippe
Blain).
+ modify c++/Makefile.in to accommodate archive programs that are
different for C++ than for C, and add cases for vendor's C++
compilers on Solaris and IRIX (report by Albert Chin-A-Young).
+ correct manpage description of criteria for deciding if the terminal
supports xterm mouse controls.
+ add several configure script options to aid with cross-compiling:
--with-build-cc, --with-build-cflags, --with-build-ldflags, and
--with-build-libs (request by Greg Roelofs).
+ change criteria for deciding if configure is cross-compiling from
host/build mismatch to host/target mismatch (request by Greg Roelofs
<greg.roelofs@philips.com>).
+ correct logic for infocmp -e and -E options which writes the data for
the ext_Names[] array. This is needed if one constructs a fallback
table for a terminfo entry which uses extended termcap names, e.g.,
AX in a color xterm.
+ fix undefined NCURSES_PATHSEP when configure --disable-database
option is given.
20010811
+ fix for VALID_BOOLEAN() macro when char is not signed.
+ modify 'clean' rule for C++ binding to work with Sun compiler, which
caches additional information in a subdirectory of the objects.
+ added llib-ncursesw.
20010804
+ add Caps.keys example for experimental extended function keys
(adapted from a patch by Ilya Zakharevich).
+ correct parameter types of vidputs() and vidattr() to agree with
header files (report by William P Setzer).
+ fix typos in several man-pages (patch by William P Setzer).
+ remove unneeded ifdef for __GNUG__ in CF_CPP_VSCAN_FUNC configure
macro, which made ncurses C++ binding fail to build with other
C++ compilers such as HPUX 11.x (report by Albert Chin-A-Young).
+ workaround for bug in HPUX 11.x C compiler: add a blank after
NCURSES_EXPORT macro in form.h (report by Albert Chin-A-Young)
+ ignore blank lines in Caps* files in MKkey_defs.sh script (report by
Albert Chin-A-Young).
+ correct definition of key_end in Caps.aix4, which left KEY_END
undefined (report by Albert Chin-A-Young).
+ remove a QNX-specific fallback prototype for vsscanf(), which is
obsolete with QNX RTP.
+ review/fix some of the T() and TR() macro calls, having noticed that
there was no data for delwin() in a trace of dialog because there was
no returnVoid call for wtimeout(). Also, traces in lib_twait.c are
now selected under TRACE_IEVENT rather than TRACE_CALLS.
20010728
+ add a _nc_access() check before opening files listed via $TERMPATH.
+ using modified man2html, regenerate some of the html manpages to fix
broken HREF's where the link was hyphenated.
20010721
+ add some limit/pointer checks to -S option of tputs.
+ updated/expanded Apple_Terminal and Darwin PowerPC terminfo entries
(Benjamin C W Sittler).
+ add a note in curs_termcap.3x regarding a defect in the XSI
description of tgetent (based on a discussion with Urs Jansen
regarding the HPUX 11.x implementation, whose termcap interface is
not compatible with existing termcap programs).
+ modify manhtml rule in dist.mk to preserve copyright notice on the
generated files, as well as to address HTML style issues reported by
tidy and weblint. Regenerated/updated corresponding html files.
+ comment out use of Protected_Character and related rarely used
attributes in ncurses Ada95 test/demo to compile with wide-character
configuration.
20010714
+ implement a simple example in C++ demo to test scanw().
+ corrected stdio function used to implement scanw() in cursesw.cc
+ correct definition of RemAttr() macro from 20010602 changes, which
caused C++ SillyDemo to not show line-drawing characters.
+ modify C++ binding, adding getKey() which can be overridden by user
to substitute functions other than getch() for keyboard processing
of forms and menus (patch by Juergen Pfeifer).
20010707
+ fix some of the trace calls which needed modification to work with
new wide-character structures.
+ modify magic-cookie code in tty_update.c to compile with new
wide-character structures (report by <George.R.Goffe@seagate.com>).
+ ensure that _XOPEN_SOURCE_EXTENDED is defined in curses.priv.h if
compiling for wide-character configuration.
+ make addwnstr() handle non-spacing characters (patch by Sven
Verdoolaege).
20010630
+ add configure check to define _GNU_SOURCE, needed to prop up glibc
header files.
+ split-out include/curses.wide to solve spurious redefinitions caused
by defining _GNU_SOURCE, and move includes for <signal.h> before
<curses.h> to work around misdefinition of ERR in glibc 2.1.3 header
file.
+ extended ospeed change to NetBSD and OpenBSD -TD
+ modify logic in lib_baudrate.c for ospeed, for FreeBSD to make it
work properly for termcap applications (patch by Andrey A Chernov).
20010623
+ correct an overlooked CharOf/UChar instance (reports by Eugene Lee
<eugene@anime.net>, Sven Verdoolaege).
+ correct unneeded ifdef for wunctrl() (reported by Sven Verdoolaege)
20010618
+ change overlooked several CharOf/UChar instances.
> several patches from Sven Verdoolaege:
+ correct a typo in wunctrl(), which made it appear that botwc() was
needed (no such function: use btowc()).
+ reimplement wide-character demo in test/view.c, using new functions.
+ implement getcchar(), setcchar(), wadd_wchnstr() and related macros.
+ fix a syntax problem with do/if/while in PUTC macro (curses.priv.h).
20010616
+ add parentheses in macros for malloc in test.priv.h, fixes an
expression in view.c (report by Wolfgang Gutjahr <gutw@knapp.co.at>).
+ add Caps.uwin, as an example.
+ change the way curses.h is generated, making the list of function
key definitions extracted from the Caps file.
+ add #undef's before possible redefinition of ERR and OK in curses.h
+ modify logic in tic, toe, tput and tset which checks for basename of
argv[0] to work properly on systems such as OS/2 which have
case-independent filenames and/or program suffixes, e.g., ".ext".
20010609
+ add a configure check, if --enable-widec is specified, for putwc(),
which may be in libutf8.
+ remove some unnecessary text from curs_extend.3x and
default_colors.3x which caused man-db to make incorrect symbolic
links (Debian #99550).
+ add configure check if cast for _IO_va_list is needed to compile
C++ vscan code (Debian #97945).
> several patches from Sven Verdoolaege:
+ correct code that used non-standard auto-initialization of a struct,
which gcc allows (report by Larry Virden).
+ use putwc() in PUTC() macro.
+ make addstr() work for the special case where the codeset is
non-stateful (eg. UTF-8), as well as stateful codesets.
20010603
+ correct loop expression in NEXT_CHAR macro for lib_addstr.c changes
from 20010602 (report by Mike Castle).
20010602
+ modify mvcur() to avoid emitting newline characters when nonl() mode
is set. Normally this is not a problem since the actual terminal
mode is set to suppress nl/crlf translations, however it is useful to
allow the caller to manipulate the terminal mode to avoid staircasing
effects after spawning a process which writes messages (for lynx
2.8.4) -TD
> several patches from Sven Verdoolaege <skimo@kotnet.org>:
+ remove redundant type-conversion in fifo_push()
+ correct definition of addwstr() macro in curses.h.in
+ remove _nc_utf8_outch()
+ rename most existing uses of CharOf() to UChar(), e.g., where it is
used to prevent sign-extension in ctype macros.
+ change some chtype's to attr_t's where the corresponding variables
are used to manipulate attributes.
+ UpdateAttr() was applied to both attributes (attr_t) and characters
(chtype). Modify macro and calls to it to make these distinct.
+ add CharEq() macro, use in places where wide-character configuration
implementation uses a struct for cchar_t.
+ moved struct ldat into curses.priv.h, to hide implementation details.
+ change CharOf() macro to use it for masking A_CHARTEXT data from
chtype's.
+ add L() macro to curses.priv.h, for long-character literals.
+ replace several assignments from struct ldat entries to chtype or
char values with combinations of CharOf() and AttrOf() macros.
+ add/use intermediate ChAttrOf() and ChCharOf() macros where we know
we are using chtype data.
+ add/use lowlevel attribute manipulation macros AddAttr(), RemAttr()
and SetAttr().
+ add/use SetChar() macro, to change a cchar_t based on a character and
attributes.
+ convert most internal use of chtype to NCURSES_CH_T, to simplify use
of cchar_t for wide-character configuration. Similarly, use ARG_CH_T
where a pointer would be more useful.
+ add stubs for tracing cchar_t values.
+ add/use macro ISBLANK()
+ add/use constructors for cchar_t's: NewChar(), NewChar2().
+ add/use macros CHREF(), CHDEREF(), AttrOfD(), CharOfD() to facilitate
passing cchar_t's by address.
+ add/use PUTC_DATA, PUTC() macros.
+ for wide-character configuration, move the window background data to
the end of the WINDOW struct so that whether _XOPEN_SOURCE_EXTENDED
is defined or not, the offsets in the struct will not change.
+ modify addch() to work with wide-characters.
+ mark several wide-character functions as generated in curses.h.in
+ implement wunctrl(), wadd_wch(), wbkgrndset(), wbkgrnd(),
wborder_set() and waddnwstr().
20010526
+ add experimental --with-caps=XXX option to customize to similar
terminfo database formats such as AIX 4.x
+ add Caps.aix4 as an example.
+ modify Caps to add columns for the the KEY_xxx symbols.
+ modify configure --with-widec to suppress overwrite of libcurses.so
and curses.h
+ add checks to toe.c to avoid being confused by files and directories
where we would expect the reverse, e.g., source-files in the
top-level terminfo levels as is the case for AIX.
20010519
+ add top-level 'depend' rule for the C sources, assuming that the
makedepend program is available. As a side-effect, this makes
the generated sources, as in "make sources" (prompted by a report
by Mike Castle that "make -j" fails because the resulting parallel
processes race to generate ncurses/names.c).
+ modify configure script so that --disable-overwrite option's action
to add a symbolic link for libcurses applies to the static library as
well as the shared library when both are configured (report by Felix
Natter <f.natter@ndh.net>).
+ add ELKS terminfo entries (Federico Bianchi
<bianchi@www.arte.unipi.it>)
+ add u6 (CSR) to Eterm (Michael Jennings).
20010512
+ modify test/ncurses.c to work with xterm-256color, which has fewer
color pairs than colors*colors (report by David Ellement
<ellement@sdd.hp.com>).
20010505
+ corrected screen.xterm-xfree86 entry.
+ update comment in Caps regarding IBM (AIX) function-key definitions.
20010421
+ modify c++/Makefile.in to link with libncurses++w.a when configured
for wide-characters (patch by Sven Verdoolaege).
+ add check in _nc_trace_buf() to refrain from freeing a null pointer.
+ improve CF_PROG_INSTALL macro using CF_DIRNAME.
+ update config.guess, config.sub from autoconf 2.49e (alpha).
20010414
+ add secondary check in tic.c, similar_sgr() to see if the reason
for mismatch was that the individual capabilities used a time-delay
while sgr did not. Used this to cleanup mismatches, e.g., in vt100,
and remove time-delay from Apple_Terminal entries.
+ add Apple_Terminal terminfo entries (Benjamin C W Sittler
<bsittler@iname.com>).
+ correct definitions of shifted editing keys for xterm-xfree86 -TD
+ fix a bug in test/bs.c from 20010407 (patch by Erik Sigra).
+ prevent relative_move() from doing an overwrite if it detects 8-bit
characters when configured for UTF-8 (reported by Sven Verdoolaege
<skimo@kotnet.org>).
20010407
+ add configure checks for strstream.h vscan function, and similar
stdio-based function which may be used in C++ binding for gcc 3.0
(reports by George Goffe, Lars Hecking, Mike Castle).
+ rewrite parts of configure.in which used changequote(). That feature
is broken in the latest autoconf alphas (e.g., 2.49d).
+ add a missing pathname for ncurses_dll.h, needed when building in
a directory outside the source tree (patch by Sven Verdoolaege
<skimo@kotnet.org>).
> fix 2 bugs in test/bs.c Erik Sigra <sigra@home.se>:
+ no ships were ever placed in the last row or in the last column.
This made the game very easy to win, because you never had to waste
any shots there, but the computer did.
+ the squares around a sunken ship that belonged to the player were not
displayed as already hit by the computer, like it does for the
player.
20010331
+ add some examples of customizing screen's terminfo:
screen.xterm-xfree86, screen.xterm-r6, screen.teraterm -TD
+ modify screen's terminfo entry to match the khome/kend in screen
3.09.08 (Debian #92215).
+ correct a memory leak in forms library (report by Stefan Vogtner
<stefan@vogtner.de>) (patch by Juergen Pfeifer).
20010324
+ change symbols used to guard against repeated includes to begin
consistently with "NCURSES_" rather than a leading underscore. There
are other symbols defined in the header files which begin with a
leading underscore, but they are part of the legacy interface.
+ reorder includes in c++ binding so that rcs identifiers can be
compiled-in.
+ add .cc.ii rule to c++ makefile, to get preprocessor output for
debugging.
+ correct configure script handling of @keyword@ substitutions when the
--with-manpage-renames option is given (cf: 20000715, fixes Debian
#89939).
+ report stack underflow/overflow in tparm() when tic -cv option is
given.
+ remove spurious "%|" operator from xterm-xfree86 terminfo entry,
(reported by Adam Costello <amc@cs.berkeley.edu>, Debian #89222).
20010310
+ cleanup of newdemo.c, fixing some ambiguous expressions noted by gcc
2.95.2, and correcting some conflicting color pair initializations.
+ add missing copyright notice for cursesw.h
+ review, make minor fixes for use of '::' for referring to C-language
interface from C++ binding.
+ modify configure check for g++ library slightly to accommodate
nonstandard version number, e.g., <vendor>-2.7 (report by Ronald Ho
<rho@mipos2.intel.com>).
+ add configure check for c++ <sstream> header, replace hardcoded
ifdef.
+ workaround for pre-release of gcc 3.0 libstdc++, which has dropped
vscan from strstreambuf to follow standard, use wrapper for C vscanf
instead (report by George Goffe <grgoffe@excite.com> and Matt Taggart
<taggart@carmen.fc.hp.com>, fixes Debian .
20010303
+ modify interface of _nc_get_token() to pass 'silent' parameter to it,
to make quieter loading of /etc/termcap (patch by Todd C Miller).
+ correct a few typos in curs_slk.3x and curs_outopts.3x manpages
(patch by Todd C Miller).
20010224
+ compiler-warning fixes (reported by Nelson Beebe).
20010210
+ modify screen terminfo entry to use new 3.9.8 feature allowing xterm
mouse controls -TD
20010203
+ broaden patterns used to match OS/2 EMX in configure script to cover
variant used in newer config.guess/config.sub
+ remove changequote() calls from configure script, since this feature
is broken in the autoconf 2.49c alpha, maintainers decline to fix.
+ remove macro callPutChar() from tty_update.c, since this is no longer
needed (reported by Philippe Blain).
+ add a null-pointer check in tic.c to handle the case when the input
file is really empty. Modify the next_char() function in comp_scan.c
to allow arbitrarily long lines, and incidentally supply a newline to
files that do not end in a newline. These changes improve tic's
recovery from attempts to read binary files, e.g., its output from
the terminfo database (reported by Bernhard Rosenkraenzer).
20010127
+ revert change to c++/demo.cc from 20001209, which changed definition
of main() apparently to accommodate cygwin linker, but broke the demo
program.
+ workaround for broken egcs 2.91.66 which calls member functions
(i.e., lines() and colors() of NCursesWindow before calling its
constructor. Add calls to initialize() in a few constructors which
did not do this already.
+ use the GNAT preprocessor to make the necessary switch between TRACE
and NO_TRACE configurations (patch by Juergen Pfeifer).
> patches by Bernhard Rosenkraenzer:
+ modify kterm terminfo entry to use SCS sequence to support alternate
character set (it does not work with SI/SO).
+ --with-ospeed=something didn't work. configure.in checked for a
$enableval where it should check for $withval. Also,
ncurses/llib-lncurses still had a hardcoded short.
20010114
+ correction to my merge of Tom Riddle's patch that broke tic in some
conditions (reported by Enoch Wexler <enoch@wexler.co.il>) -TD
20010113
+ modify view.c to test halfdelay(). Like other tests, this recognizes
the 's' and space commands for stopping/starting polled input, shows
a freerunning clock in the header. If given a parameter to 's', that
makes view.c use halfdelay() with that parameter rather than
nodelay().
+ fix to allow compile with the experimental configure option
--disable-hashmap.
+ modify postprocess_termcap() to avoid overwriting key_backspace,
key_left, key_down when processing a non-base entry (report/patch by
Tom Riddle).
+ modify _nc_wrap_entry(), adding option to reallocate the string
table, needed in _nc_merge_entry() when merging termcap entries.
(adapted from report/patch by Tom Riddle <ftr@oracom.com>).
+ modify a few configure script macros to keep $CFLAGS used only for
compiler options, preprocessor options in $CPPFLAGS.
20001230
+ correct marker positions in lrtest.c after receiving a sigwinch.
+ fix ifdef's in ncurses.c to build against pre-5.2 for testing.
+ fixes to tclock for resizing behavior, redundant computation (report
and patch by A M Kuchling <akuchlin@mems-exchange.org>).
20001216
+ improved scoansi terminfo entry -TD
+ modify configure script and makefile in Ada95/src to compile a stub
for the trace functions when ncurses does not provide those.
20001209
+ add ncurses_dll.h and related definitions to support generating DLL's
with cygwin (adapted from a patch by Charles Wilson
<cwilson@ece.gatech.edu>, changed NCURSES_EXPORT macro to make it
work with 'indent') -TD
20001202
+ correct prototypes for some functions in curs_termcap.3x, matching
termcap.h, which matches X/Open.
> patch by Juergen Pfeifer:
+ a revised version of the Ada enhancements sent in by "H.
Nanosecond", aka Eugene V Melaragno <aldomel@ix.netcom.com>. This
patch includes
- small fixes to the existing ncurses binding
- addition of some more low-level functions to the binding, including
termcap and terminfo functions
- An Ada implementation of the "ncurses" test application originally
written in C.
20001125
+ modify logic in lib_setup.c to allow either lines or columns value
from terminfo to be used if the screen size cannot be determined
dynamically rather than requiring both (patch by Ehud Karni
<ehud@unix.simonwiesel.co.il>).
+ add check in lib_tgoto.c's is_termcap() function to reject null or
empty strings (reported by Valentin Nechayev <netch@netch.kiev.ua> to
freebsd-bugs).
+ add definition from configure script that denotes the path-separator,
which is normally a colon. The path-separator is a semicolon on
OS/2 EMX and similar systems which may use a colon within pathnames.
+ alter logic to set default for --disable-overwrite option to set it
to 'yes' if the --prefix/$prefix value is not /usr/local, thereby
accommodating the most common cause of problems: gcc's nonstandard
search rules. Other locations such as /usr/local/ncurses will
default to overwriting (report by Lars Hecking <lhecking@nmrc.ie>).
20001118
+ modify default for --disable-overwrite configure option to disable
if the --prefix or $prefix value is not /usr.
+ add cygwin to systems for which ncurses is installed by default into
/usr rather than /usr/local.
20001111
+ minor optimization in comp_error.c and lib_termname.c, using
strncat() to replace strncpy() (patch by Solar Designer).
+ add a use_terminfo_vars() check for $HOME/.termcap, and check for
geteuid() to use_terminfo_vars() (patch by Solar Designer
<solar@false.com>).
+ improved cygwin terminfo entry, based on patch by
<ernie_boyd@yahoo.com>.
+ modify _nc_write_entry() to allow for the possibility that linking
aliases on a filesystem that ignores case would not succeed because
the source and destination differ only by case, e.g., NCR260VT300WPP0
on cygwin (report by Neil Zanella).
+ fix a typo in the curs_deleteln.3x man page (patch by Bernhard
Rosenkraenzer <bero@redhat.de>).
20001104
+ add configure option --with-ospeed to assist packagers in transition
to 5.3 change to ospeed type.
+ add/use CharOf() macro to suppress sign-extension of char type on
platforms where this is a problem in ctype macros, e.g., Solaris.
+ change trace output to binary format.
+ correct a missing quote adjustment in CF_PATH_SYNTAX autoconf
macro, for OS/2 EMX configuration.
+ rearrange a few configure macros, moving preprocessor options to
$CPPFLAGS (a now-obsolete version of autoconf did not consistently
use $CPPFLAGS in both the compile and preprocessor checks).
+ add a check in relative_move() to guard against buffer overflow in
the overwrite logic.
20001028
+ add message to configure script showing g++ version.
+ resync config.guess, config.sub
+ modify lib_delwin.c, making it return ERR if the window did not exist
(suggested by Neil Zanella).
+ add cases for FreeBSD 3.1 to tdlint and makellib scripts, used this
to test/review ncurses library. (Would use lclint, but it doesn't
work).
+ reorganized knight.c to avoid forward references. Correct screen
updates when backtracking, especially to the first cell. Add F/B/a
commands.
20001021 5.2 release for upload to ftp.gnu.org
+ update generated html files from manpages.
+ modify dist.mk to use edit_man.sh to substitute autoconf'd variables
in html manpages.
+ fix an uninitialized pointer in read_termcap.c (report by Todd C
Miller, from report/patch by Philip Guenther <guenther@gac.edu>).
+ correct help-message and array limit in knight.c (patch by Brian
Raiter <breadbox@muppetlabs.com>).
> patch by Juergen Pfeifer:
+ fix to avoid warning by GNAT-3.13p about use of inconsistent casing
for some identifiers defined in the standard package.
+ cosmetic change to forms/fty_enum.c
20001014
+ correct an off-by-one position in test/railroad.c which could cause
wrapping at the right margin.
+ test/repair some issues with libtool configuration. Make
--disable-echo force libtool --silent. (Libtool does not work for
OS/2 EMX, works partly for SCO - libtool is still very specific to
gcc).
+ change default of --with-manpage-tbl to "no", since for most of the
platforms which do have tbl installed, the system "man" program
understands how to run tbl automatically.
+ minor improvement to force_bar() in comp_parse.c (Bernhard
Rosenkraenzer <bero@redhat.de>).
+ modify lib_tparm.c to use get_space() before writing terminating
null character, both for consistency as well as to ensure that if
save_char() was called immediately before, that the allocated memory
is enough (patch by Sergei Ivanov).
+ add note about termcap ML capability which is duplicated between two
different capabilities: smgl and smglr (reported by Sergei Ivanov
<svivanov@pdmi.ras.ru>).
+ correct parameter counts in include/Caps for dclk as well as some
printer-specific capabilities: csnm, defc, scs, scsd, smgtp, smglp.
> patch by Johnny C Lam <lamj@stat.cmu.edu>:
+ add support for building with libtool (apparently version 1.3.5,
since old versions do not handle -L../lib), using new configure
option --with-libtool.
+ add configure option --with-manpage-tbl, which causes the manpages to
be preprocessed by tbl(1) prior to installation,
+ add configure option --without-curses-h, which causes the
installation process to install curses.h as ncurses.h and make
appropriate changes to headers and manpages.
20001009
+ correct order of options/parameters in run_tic.in invocation of tic,
which did not work with standard getopt() (reported by Ethan
Butterfield <primus@veris.org>).
+ correct logic for 'reverse' variable in lib_vidattr.c, which was
setting it true without checking if newmode had A_REVERSE set, e.g.,
using $TERM=ansi on OS/2 EMX (see 20000917).
> patch by Todd C Miller:
+ add a few missing use_terminfo_vars() and fixes up _nc_tgetent().
Previously, _nc_cgetset() would still get called on cp so the
simplest thing is to set cp to NULL if !use_terminfo_vars().
+ added checks for an empty $HOME environment variable.
> patches for OS/2 EMX (Ilya Zakharevich):
+ modify convert_configure.pl to support INSTALL. Change compiler
options in that script to use multithreading, needed for the mouse.
+ modify OS/2 mouse support, retrying as a 2-button mouse if code fails
to set up a 3-button mouse.
+ improve code for OS/2 mouse support, using _nc_timed_wait() to
replace select() call.
20001007
+ change type of ospeed variable back to short to match its use in
legacy applications (reported by Andrey A Chernov).
+ add case to configure script for --enable-rpath on IRIX (patch by
Albert Chin-A-Young).
+ minor fix to position_check() function, to ensure it gets the whole
cursor report before decoding.
+ add configure option --disable-assumed-color, to allow pre-5.1
convention of default colors used for color-pair 0 to be configured
(see assume_default_colors()).
+ rename configure option --enable-hashmap --disable-hashmap, and
reorder the configure options, splitting the experimental and
development
+ add configure option --disable-root-environ, which tells ncurses to
disregard $TERMINFO and similar environment variables if the current
user is root, or running setuid/setgid (based on discussion with
several people).
+ modified misc/run_tic.in to use tic -o, to eliminate dependency on
$TERMINFO variable for installs.
+ add table entry for plab_norm to tput, so it passes in strings
for that capability.
+ modify parse_format() in lib_tparm.c to ignore precision if it is
longer than 10000 (report by Jouko Pynnonen).
+ rewrote limit checks in lib_mvcur.c using new functions
_nc_safe_strcat(), etc. Made other related changes to check lengths
used for strcat/strcpy (report by Jouko Pynnonen
<jouko@solutions.fi>).
20000930
+ modify several descriptions, including those for setaf, setab, in
include/Caps to indicate that the entries are parameterized. This
information is used to tell which strings are translated when
converting to termcap. Fixes a problem where the generated termcap
would contain a spurious "%p1" for the terminfo "%p1%d".
+ modify ld -rpath options (e.g., Linux, and Solaris) to use an
absolute pathname for the build tree's lib directory (prompted by
discussion with Albert Chin-A-Young).
+ modify "make install.man" and "make uninstall.man" to include tack's
man-page.
+ various fixes for install scripts used to support configure --srcdir
and --with-install-prefix (reported by Matthew Clarke
<Matthew_Clarke@mindlink.bc.ca>).
+ make configure script checks on variables $GCC and $GXX consistently
compare against 'yes' rather than test if they are nonnull, since
either may be set to the corresponding name of the C or C++ compiler
(report/patch by Albert Chin-A-Young).
20000923
+ modify rs2 capability in xterm-r6 and similar where cursor
save/restore bracketed the sequence for resetting video attributes.
The cursor restore would undo that (report by John Hawkinson
<jhawk@MIT.EDU> (see NetBSD misc/11052)).
+ using parameter check added to tic, corrected 27 typos in
terminfo.src -TD
+ modify tic to verify that its inputs are really files, in case
someone tries to read a directory (or /dev/zero).
+ add a check for empty buffers returned by fgets() in comp_scan.c
next_char() function, in case tic is run on a non-text file (fixes
a core dump reported by Aaron Campbell <aaron@cs.dal.ca>).
+ add to railroad.c some code exercising tgoto(), providing an
alternate form of display if the terminal supports cursor addressing.
+ split-out tgoto() again, this time into new file lib_tgoto.c, and
implement a conventional BSD-style tgoto() which is used if the
capability string does not contain terminfo-style padding or
parameters (requested by Andrey A Chernov).
+ add check to tic which reports capabilities that do not reference
the expected number of parameters.
+ add error checking to infocmp's -v and -m options to ensure that
the option value is indeed a number.
+ some cleanup of logic in _nc_signal_handler() to verify if SIGWINCH
handler is setup. Separated the old/new sigaction data for SIGTSTP
from the other signals.
20000917
+ add S0, E0 extensions to screen's terminfo entry, which is another
way to solve the misconfiguration issue -TD
+ completed special case for tgoto from 20000916
20000916
+ update xterm terminfo entries to match XFree86 xterm patch #146 -TD
+ add Matrix Orbital terminfo entries (from Eric Z Ayers
<eric@ale.org>).
+ add special case to lib_tparm.c to allow 'screen' program to use a
termcap-style parameter "%." to tgoto() for switching character sets.
+ use LN_S substitution in run_tic.in, to work on OS/2 EMX which has
no symbolic links.
+ updated notes in README.emx regarding autoconf patches.
+ replace a lookup table in lib_vidattr.c used to decode no_color_video
with a logic expression (suggested by Philippe Blain).
+ add a/A toggle to ncurses.c 'b' test, which clears/sets alternate
character set attribute from the displayed text.
+ correct inequality in parameter analysis of rewritten lib_tparm.c
which had the effect of ignoring p9 in set_attributes (sgr), breaking
alternate character set (reported by Piotr Majka <charvel@link.pl>).
+ correct ifdef'ing for GCC_PRINTF, GCC_SCANF which would not compile
with Sun WorkShop compilers since these tokens were empty (cf:
20000902, reported by Albert Chin-A-Young).
20000909
+ correct an uninitialized parameter to open_tempfile() in tic.c which
made "tic -I" give an ambiguous error message about tmpnam.
+ add special case in lib_vidattr.c to reset underline and standout for
devices that have no sgr0 defined (patch by Don Lewis
<Don.Lewis@tsc.tdk.com>). Note that this will not work for bold
mode, since there is no exit-bold-mode capability.
+ improved patch for Make_Enum_Type (patch by Juergen Pfeifer).
+ modify tparm to disallow arithmetic on strings, analyze the varargs
list to read strings as strings and numbers as numbers.
+ modify tparm's internal function spop() to treat a null pointer as
an empty string.
+ modify tput program so it can be renamed or invoked via a link as
'reset' or 'init', producing the same effect as 'tput reset' or 'tput
init'.
+ add private entrypoint _nc_basename(), use to consolidate related
code in progs, as well as accommodating OS/2 EMX pathnames.
+ remove NCURSES_CONST line from edit_cfg.sh to compensate for its
removal (except via AC_SUBST) from configure.in, making
--enable-const work again (reported by Juergen Pfeifer).
+ regen'd configure to pick up "hpux*" change from 20000902.
20000902
+ modify tset.c to check for transformed "reset" program name, if any.
+ add a check for null pointer in Make_Enum_Type() (reported by Steven
W Orr <steveo@world.std.com>).
+ change functions _nc_parse_entry() and postprocess_termcap() to avoid
using strtok(), because it is non-reentrant (reported by Andrey A
Chernov <ache@nagual.pp.ru>).
+ remove "hpux10.*" case from CF_SHARED_OPTS configure script macro.
This differed from the "hpux*" case by using reversed symbolic
links, which made the 5.1 version not match the configuration of
5.0 shared libraries (reported by Albert Chin-A-Young).
+ correct a dependency in Ada95/src/Makefile.in which prevented
building with configure --srcdir (patch by H Nanosecond
<aldomel@ix.netcom.com>).
+ modify ifdef's in curses.h.in to avoid warning if GCC_PRINTF or
GCC_SCANF was not previously defined (reported by Pavel Roskin
<proski@gnu.org>).
+ add MKncurses_def.sh to generate fallback definitions for
ncurses_cfg.h, to quiet gcc -Wundef warnings, modified ifdef's in
code to consistently use "#if" rather than "#ifdef".
20000826
+ add QNX qansi entries to terminfo -TD
+ add os2 entry to misc/emx.src (<jmcoopr@webmail.bmi.net>).
+ add configure option --with-database to allow specifying a different
terminfo source-file to install. On OS/2 EMX, this defaults to
misc/emx.src
+ change misc/run_tic.sh to derive it from misc/run_tic.in, to simplify
setting .exe extension on OS/2 EMX.
+ add .exe extension in Ada95/gen/Makefile.in,
Ada95/samples/Makefile.in, for OS/2 EMX (reported by
<jmcoopr@webmail.bmi.net>).
+ add configure check for filesystems (such as OS/2 EMX) which do not
distinguish between upper/lowercase filenames, use this to fix tags
rules in makefiles.
+ initialize fds[] array to 0's in _nc_timed_wait(); apparently poll()
only sets the revents members of that array when there is activity
corresponding to the related file (report by Glenn Cooper
<gcooper@qantas.com.au>, using Purify on Solaris 5.6).
+ change configure script to use AC_CANONICAL_SYSTEM rather than
AC_CANONICAL_HOST, which means that configure --target will set
a default program-prefix.
+ add note on cross-compiling to INSTALL (which does not rely on the
AC_CANONICAL_* macros).
20000819
+ add cases for EMX OS/2 to config.guess, config.sub
+ new version of config.guess, config.sub from lynx 2.8.4dev.7
+ add definitions via transform.h to allow tic and tput to check for
the transformed aliases rather than the original infotocap, etc.
+ simplify transform-expressions in progs/Makefile.in, make the
uninstall rule work for transformed program names.
+ change symbol used by --install-prefix configure option from
INSTALL_PREFIX to DESTDIR (the latter has become common usage
although the name is misleading).
+ modify programs to use curses_version() string to report the version
of ncurses with which they are compiled rather than the
NCURSES_VERSION string. The function returns the patch level in
addition to the major and minor version numbers.
20000812
+ modify CF_MAN_PAGES configure macro to make transformed program names
a parameter to that macro rather than embedding them in the macro.
+ newer config.guess, config.sub (reference version used in lynx
2.8.4dev.7).
+ add configure option --with-default-terminfo-dir=DIR to allow
specifying the default terminfo database directory (request by Albert
Chin-A-Young).
+ minor updates for terminfo.src from FreeBSD termcap change-history.
+ correct notes in README and INSTALL regarding documentation files
that were moved from misc directory to doc (report by Rich Kulawiec
<rsk@gsp.org>).
+ change most remaining unquoted parameters of 'test' in configure
script to use quotes, for instance fixing a problem in the
--disable-database option (reported by Christian Mondrup
<scancm@biobase.dk>).
+ minor adjustments to work around some of the incompatibilities/bugs
in autoconf 2.29a alpha.
+ add -I/usr/local/include when --with-ncurses option is used in
test/configure script.
+ correct logic in adjust_cancels(), which did not check both
alternatives when reclassifying an extended name between boolean,
number and string, causing an infinite loop in tic.
20000730
+ correct a missing backslash in curses.priv.h
20000729
+ change handling of non_dest_scroll_region in tty_update.c to clear
text after it is shifted in rather than before shifting out. Also
correct row computation (reported by Ruediger Kuhlmann
<uck4@rz.uni-karlsruhe.de>).
+ add/use new trace function to display chtype values from winch() and
getbkgd().
+ add trace mask TRACE_ATTRS, alter several existing _tracef calls that
trace attribute changes under TRACE_CALLS to use this.
+ modify MKlib_gen.sh so that functions returning chtype will call
returnChar().
+ add returnChar() trace, for functions returning chtype.
+ change indent.pro to line up parenthesis.
20000722
+ fix a heap problem with the c++ binding (report by
<alexander_liberson@ninewest.com>, patch by Juergen Pfeifer).
+ minor adjustment to ClrToEOL() to handle an out-of-bounds parameter.
+ modify the check for big-core to force a couple of memory accesses,
which may work as needed for older/less-capable machines (if not,
there's still the explicit configure option).
> fixes based on diff's for Amiga and BeOS found at
http://www.mathematik.uni-karlsruhe.de/~kuhlmann/cross/ncurses/
+ alter definition of NCURSES_CONST to make it non-empty.
+ add amiga-vnc terminfo entry.
+ redefine 'TEXT' in menu.h for AMIGA, since it is reported to have
an (unspecified) symbol conflict.
+ replaced case-statement in _nc_tracebits() for CSIZE with a table to
simplify working around implementations that define random
combinations of the related macros to zero.
+ modify configure test for tcgetattr() to allow for old
implementations, e.g., on BeOS, which only defined it as a macro.
> patches by Bruno Haible:
+ when checking LC_ALL/LC_CTYPE/LANG environment variables for UTF-8
locale, ignore those which are set to an empty value, as per SUSV2.
+ encode 0xFFFD in UTF-8 with 3 bytes, not 2.
+ modify _nc_utf8_outch() to avoid sign-extension when checking for
out-of-range value.
20000715
+ correct manlinks.sed script to avoid using ERE "\+", which is not
understood by older versions of sed (patch by Albert Chin-A-Young).
+ implement configure script options that transform installed program
names, e.g., --program-prefix, including the manpage names and cross
references (patch by Albert Chin-A-Young <china@thewrittenword.com>).
+ correct several mismatches between manpage filename and ".TH"
directives, renaming dft_fgbg.3x to default_colors.3x and
menu_attribs.3x to menu_attributes.3x (report by Todd C Miller).
+ correct missing includes for <string.h> in several places, including
the C++ binding. This is not noted by gcc unless we use the
-fno-builtin option (reported by Igor Schein <igor@txc.com>).
+ modified progs/tset.c and tack/sysdep.c to build with sgttyb
interface if neither termio or termios is available. Tested this
with FreeBSD 2.1.5 (which does have termios - but the sgttyb does
work).
20000708 5.1 release for upload to ftp.gnu.org
+ document configure options in INSTALL.
+ add man-page for ncurses trace functions.
+ correct return value shown in curs_touch.3x for is_linetouched() and
is_wintouched(), in curs_initscr.3x for isendwin(), and in
curs_termattr.3x for has_ic() and has_il().
+ add prototypes for touchline() and touchwin(), adding them to the
list of generated functions.
+ modify fifo_push() to put ERR into the fifo just like other values to
return from wgetch(). It was returning without doing that, making
end-of-file condition incorrectly return a 0 (reported by Todd C
Miller).
+ uncomment CC_SHARED_OPTS for progs and tack (see 971115), since they
are needed for SCO OpenServer.
+ move _nc_disable_period from free_ttype.c to comp_scan.c to appease
dynamic loaders on SCO and IRIX64.
+ add "-a" option to test/ncurses.c to invoke assume_default_colors()
for testing.
+ correct assignment in assume_default_colors() which tells ncurses
whether to use default colors, or the assumed ones (reported by Gary
Funck <gary@Intrepid.Com>).
+ review/correct logic in mk-1st.awk for making symbolic links for
shared libraries, in particular for FreeBSD, etc.
+ regenerate misc/*.def files for OS/2 EMX dll's.
+ correct quoting of values for CC_SHARED_OPTS in aclocal.m4 for
cases openbsd2*, openbsd*, freebsd* and netbsd* (patch by Peter
Wemm) (err in 20000610).
+ minor updates to release notes, as well as adding/updating URLs for
examples cited in announce.html
> several fixes from Philippe Blain <philippe.blain2@freesbee.fr>:
+ correct placement of ifdef for NCURSES_XNAMES in function
_nc_free_termtype(), fixes a memory leak.
+ add a call to _nc_synchook() to the end of function whline() like
that in wvline() (difference was in 1.9.4).
+ make ClearScreen() a little faster by moving two instances of
UpdateAttr() out of for-loops.
+ simplify ClrBottom() by eliminating the tstLine data, using for-loops
(cf: 960428).
20000701 pre-release
+ change minor version to 1, i.e., ncurses 5.1
+ add experimental configure option --enable-colorfgbg to check for
$COLORFGBG variable as set by rxvt/aterm/Eterm.
+ add Eterm terminfo entry (Michael Jennings <mej@valinux.com>).
+ modify manlinks.sed to pick aliases from the SYNOPSIS section, and
several manpages so manlinks.sed can find aliases for creating
symbolic links.
+ add explanation to run_tic.sh regarding extended terminal
capabilities.
+ change message format for edit_cfg.sh, since some people interpret
it as a warning.
+ correct unescaped '$' in sysv5uw7*|unix_sv* rule for CF_SHARED_OPTS
configure macro (report by Thanh Ma <Thanh.Ma@casi-rusco.com>).
+ correct logic in lib_twait.c as used by lib_mouse.c for GPM mouse
support when poll() is used rather than select() (prompted by
discussion with David Allen <DAllen24@aol.com>).
20000624 pre-release
+ modify TransformLine() to check for cells with different color pairs
that happen to render the same display colors.
+ apply $NCURSES_NO_PADDING to cost-computation in mvcur().
+ improve cost computation in PutRange() by accounting for the use
of parm_right_cursor in mvcur().
+ correct cost computation in EmitRange(), which was not using the
normalized value for cursor_address.
+ newer config.guess, config.sub (reference version used in TIN 1.5.6).
20000617
+ update config.guess, config.sub (reference version used in PCRE 3.2).
+ resync changes to gnathtml against version 1.22, regenerated html
files under doc/html/ada using this (1.22.1.1).
+ regenerated html files under doc/html/man after correcting top and
bottom margin options for man2html in dist.mk
+ minor fixes to test programs ncurses 'i' and testcurs program to make
the subwindow's background color cover the subwindow.
+ modify configure script so AC_MSG_ERROR is temporarily defined to a
warning in AC_PROG_CXX to make it recover from a missing C++ compiler
without requiring user to add --without-cxx option (adapted from
comment by Akim Demaille <akim@epita.fr> to autoconf mailing list).
+ modify headers.sh to avoid creating temporary files in the build
directory when installing headers (reported by Sergei Pokrovsky
<pok@nbsp.nsk.su>)
20000610
+ regenerated the html files under doc/html/ada/files and
doc/html/ada/funcs with a slightly-improved gnathtml.
+ add kmous capability to linux terminfo entry to allow it to use
xterm-style events provided by gpm patch by Joerg Schoen.
+ make the configure macro CF_SHARED_OPTS a little smarter by testing
if -fPIC is supported by gcc rather than -fpic. The former option
allows larger symbol tables.
+ update config.guess and config.sub (patches by
Kevin Buettner <kev@primenet.com> (for elf64_ia64),
Bernd Kuemmerlen <bkuemmer@mevis.de> (for MacOS X)).
+ add warning for 'tic -cv' about use of '^?' in terminfo source, which
is an extension.
20000527
+ modify echo() behavior of getch() to match Solaris curses for
carriage return and backspace (reported by Neil Zanella).
+ change _nc_flush() to a function.
+ modify delscreen() to check if the output stream has been closed, and
if so, free the buffer allocated for setbuf (this provides an
ncurses-specific way to avoid a memory leak when repeatedly calling
newterm reported by Chipp C <at_1@zdnetonebox.com>).
+ correct typo in curs_getch.3x manpage regarding noecho (reported by
David Malone <dwmalone@maths.tcd.ie>).
+ add a "make libs" rule.
+ make the Ada95 interface build with configure --enable-widec.
+ if the configure --enable-widec option is given, append 'w' to names
of the generated libraries (e.g., libncursesw.so) to avoid conflict
with existing ncurses libraries.
20000520
+ modify view.c to make a rudimentary viewer of UTF-8 text if ncurses
is configured with the experimental wide-character support.
+ add a simple UTF-8 output driver to the experimental wide-character
support. If any of the environment variables LC_ALL, LC_CTYPE or
LANG contain the string "UTF-8", this driver will be used to
translate the output to UTF-8. This works with XFree86 xterm.
+ modify configure script to allow building shared libraries on BeOS
(from a patch by Valeriy E Ushakov).
+ modify lib_addch.c to allow repeated update to the lower-right
corner, rather than displaying only the first character written until
the cursor is moved. Recent versions of SVr4 curses can update the
lower-right corner, and behave this way (reported by Neil Zanella).
+ add a limit-check in _nc_do_color(), to avoid using invalid color
pair value (report by Brendan O'Dea <bod@compusol.com.au>).
20000513
+ the tack program knows how to use smcup and rmcup but the "show caps
that can be tested" feature did not reflect this knowledge. Correct
the display in the menu tack/test/edit/c (patch by Daniel Weaver).
+ xterm-16color does allow bold+colors, removed ncv#32 from that
terminfo entry.
20000506
+ correct assignment to SP->_has_sgr_39_49 in lib_dft_fgbg.c, which
broke check for screen's AX capability (reported by Valeriy E Ushakov
<uwe@ptc.spbu.ru>).
+ change man2html rule in dist.mk to workaround bug in some
man-programs that ignores locale when rendering hyphenation.
+ change web- and ftp-site to dickey.his.com
20000429
+ move _nc_curr_token from parse_entry.c to comp_scan.c, to work around
problem linking tack on MacOS X DP3.
+ include <sys/time.h> in lib_napms.c to compile on MacOS X DP3
(reported by Gerben Wierda <wierda@holmes.nl>).
+ modify lib_vidattr.c to check for ncv fixes when pair-0 is not
default colors.
+ add -d option to ncurses.c, to turn on default-colors for testing.
+ add a check to _nc_makenew() to ensure that newwin() and newpad()
calls do not silently fail by passing too-large limits.
+ add symbol NCURSES_SIZE_T to use rather than explicit 'short' for
internal window and pad sizes. Note that since this is visible in
the WINDOW struct, it would be an ABI change to make this an 'int'
(prompted by a question by Bastian Trompetter
<btrompetter@firemail.de>, who attempted to create a 96000-line pad).
20000422
+ add mgterm terminfo entry from NetBSD, minor adjustments to sun-ss5,
aixterm entries -TD
+ modify tack/ansi.c to make it more tolerant of bad ANSI replies. An
example of an illegal ANSI resonse can be found using Microsoft's
Telnet client. A correct display can be found using a VT-4xx
terminal or XFree86 xterm with:
XTerm*VT100*decTerminalID: 450
(patch by Daniel Weaver).
+ modify gdc.c to recognize 'q' for quit, 's' for single-step and ' '
for resume. Add '-n' option to force gdc's standard input to
/dev/null, to both illustrate the use of newterm() for specifying
alternate inputs as well as for testing signal handling.
+ minor fix for configure option --with-manpage-symlinks, for target
directories that contain a period ('.') (reported by Larry Virden).
20000415
+ minor additions to beterm entry (feedback from Rico Tudor) -TD
+ corrections/updates for some IBM terminfo entries -TD
+ modify _nc_screen_wrap() so that when exiting curses mode with
non-default colors, the last line on the screen will be cleared to
the screen's default colors (request by Alexander V Lukyanov).
+ modify ncurses.c 'r' example to set nonl(), allowing control/M to be
read for demonstrating the REQ_NEW_LINE operation (prompted by a
question by Tony L Keith <tlkeith@keithconsulting.com>).
+ modify ncurses.c 'r' example of field_info() to work on Solaris 2.7,
documented extension of ncurses which allows a zero pointer.
+ modify fmt_complex() to avoid buffer overflow in case of excess
recursion, and to recognize "%e%?" as a synonym for else-if, which
means that it will not recur for that special case.
+ add logic to support $TERMCAP variable in case the USE_GETCAP symbol
is defined (patch by Todd C Miller).
+ modify one of the m4 files used to generate the Ada95 sources,
to avoid using the token "symbols" (patch by Juergen Pfeifer).
20000408
+ add terminfo entries bsdos-pc-m, bsdos-pc-mono (Jeffrey C Honig)
+ correct spelling error in terminfo entry name: bq300-rv was given as
bg300-rv in esr's version.
+ modify redrawwin() macro so its parameter is fully parenthesized
(fixes Debian #61088).
+ correct formatting error in dump_entry() which set incorrect column
value when no newline trimming was needed at the end of an entry,
before appending "use=" clauses (cf: 960406).
20000401
+ add configure option --with-manpage-symlinks
+ change unctrl() to render C1 characters (128-159) as ~@, ~A, etc.
+ change makefiles so trace() function is provided only if TRACE is
defined, e.g., in the debug library. Modify related calls to
_tracechar() to use unctrl() instead.
20000325
+ add screen's AX capability (for ECMA SGR 39 and 49) to applicable
terminfo entries, use presence of this as a check for a small
improvement in setting default colors.
+ improve logic in _nc_do_color() implementing assume_default_colors()
by passing in previous color pair info to eliminate redundant call to
set_original_colors(). (Part of this is from a patch by Alexander
V Lukyanov).
+ modify warning in _nc_trans_string() about a possibly too-long string
to do this once only rather than for each character past the
threshold (600). Change interface of _nc_trans_string() to allow
check for buffer overflow.
+ correct use of memset in _nc_read_entry_source() to initialize ENTRY
struct each time before reading new data into it, rather than once
per loop (cf: 990301). This affects multi-entry in-core operations
such as "infocmp -Fa".
20000319
+ remove a spurious pointer increment in _nc_infotocap() changes from
20000311. Add check for '.' in format of number, since that also
is not permitted in termcap.
+ correct typo in rxvt-basic terminfo from temporary change made while
integrating 20000318.
20000318
+ revert part of the vt220 change (request by Todd C Miller).
+ add ansi-* terminfo entries from ESR's version.
+ add -a option to tic and infocmp, which retains commented-out
capabilities during source translation/comparison, e.g., captoinfo
and infotocap.
+ modify cardfile.c to display an empty card if no input data file is
found, fixes a core dump in that case (reported by Bruno Haible).
+ correct bracketing in CF_MATH_LIB configure macro, which gave wrong
result for OS/2 EMX.
+ supply required parameter for _nc_resolve_uses() call in
read_termcap.c, overlooked in 20000311 (reported by Todd C Miller).
> patches by Bruno Haible <haible@ilog.fr>:
+ fix a compiler warning in fty_enum.c
+ correct LIB_PREFIX expression for DEPS_CURSES in progs, tack
makefiles, which resulted in redundant linking (cf: 20000122).
20000311
+ make ifdef's for BROKEN_LINKER consistent (patch by Todd C Miller).
+ improved tack/README (patch by Daniel Weaver).
+ modify tput.c to ensure that unspecified parameters are passed to
tparm() as 0's.
+ add a few checks in infocmp to guard against buffer overflow when
displaying string capabilities.
+ add check for zero-uses in infocmp's file_comparison() function
before calling _nc_align_termtype(). Otherwise one parameter is
indexed past the end of the uses-array.
+ add an option -q to infocmp to specify the less verbose output,
keeping the existing format as the default, though not retaining the
previous behavior that made the -F option compare each entry to
itself.
+ adapted patch by ESR to make infocmp -F less verbose -TD
(the submitted patch was unusable because it did not compile
properly)
+ modify write_entry.c to ensure that absent or cancelled booleans
are written as FALSE, for consistency with infocmp which now
assumes this. Note that for the small-core configuration, tic
may not produce the same result as before.
+ change some private library interfaces used by infocmp, e.g.,
_nc_resolve_uses().
+ add a check in _nc_infotocap() to ensure that cm-style capabilities
accept only %d codes when converting the format from terminfo to
termcap.
+ modify ENTRY struct to separate the data in 'parent' into the name
and link values (the original idea to merge both into 'parent' was
not good).
+ discard repair_acsc(tterm);
> patch by Juergen Pfeifer:
+ drop support for gnat 3.10
+ move generated documentation and html files under ./doc directory,
adding makefile rules for this to dist.mk
20000304
+ correct conflicting use of tparm() in 20000226 change to tic, which
made it check only one entry at a time.
+ fix errors in ncurses-intro.html and hackguide.html shown by Dave
Raggett's tidy.
+ make the example in ncurses-intro.html do something plausible, and
corrected misleading comment (reported by Neil Zanella).
+ modify pnoutrefresh() to set newscr->_leaveok as wnoutrefresh() does,
to fix a case where the cursor position was not updated as in
Solaris (patch by David Mosberger <davidm@hpl.hp.com>).
+ add a limit-check for wresize() to ensure that a subwindow does not
address out of bounds.
+ correct offsets used for subwindows in wresize() (patch by Michael
Andres <ma@suse.de>).
+ regenerate html'ized manual pages with man2html 3.0.1 (patch by
Juergen Pfeifer). This generated a file with a space in its name,
which I removed.
+ fix a few spelling errors in tack.
+ modify tack/Makefile.in to match linker options of progs/Makefile.in;
otherwise it does not build properly for older HPUX shared library
configurations.
+ add several terminfo entries from esr's "11.0".
20000226
+ make 'tput flash' work properly for xterm by flushing output in
delay_output() when using napms(), and modifying xterm's terminfo to
specify no padding character. Otherwise, xterm's reported baud rate
can mislead ncurses into producing too few padding characters
(Debian #58530).
+ add a check to tic for consistency between sgr and the separate
capabilities such as smso, use this to check/correct several
terminfo entries (Debian #58530).
+ add a check to tic if cvvis is the same as cnorm, adjusted several
terminfo entries to remove the conflict (Debian #58530).
+ correct prototype shown in attr_set()/wattr_set() manpages (fixes
Debian #53962).
+ minor clarification for curs_set() and leaveok() manpages.
+ use mkstemp() for creating temporary file for tic's processing of
$TERMCAP contents (fixes Debian #56465).
+ correct two errors from integrating Alexander's changes: did not
handle the non-bce case properly in can_erase_with() (noted by
Alexander), and left fg/bg uninitialized in the pair-zero case of
_nc_do_color() (reported by Dr Werner Fink <werner@suse.de> and
Ismael Cordeiro <ismael@cordeiro.com>).
20000219
+ store default-color code consistently as C_MASK, even if given as
-1 for convenience (adapted from patches by Alexander V Lukyanov).
> patches by Alexander V Lukyanov:
+ change can_clear_with() macro to accommodate logic for
assume_default_colors(), making most of the FILL_BCE logic
unnecessary. Made can_clear_with() an inline function to make it
simpler to read.
20000212
+ corrected form of recent copyright dates.
+ minor corrections to xterm-xf86-v333 terminfo entry -TD
> patches by Alexander V Lukyanov:
+ reworded dft_fgbg.3x to avoid assuming that the terminal's default
colors are white on black.
+ fix initialization of tstLine so that it is filled with current blank
character in any case. Previously it was possible to have it filled
with old blank. The wrong over-optimization was introduced in 991002
patch. (it is not very critical as the only bad effect is not using
clr_eos for clearing if blank has changed).
20000205
+ minor corrections/updates to several terminfo entries: rxvt-basic,
vt520, vt525, ibm5151, xterm-xf86-v40 -TD
+ modify ifdef's for poll() to allow it to use <sys/poll.h>, thereby
allowing poll() to be used on Linux.
+ add CF_FUNC_POLL macro to check if poll() is able to select from
standard input. If not we will not use it, preferring select()
(adapted from patch by Michael Pakovic <mpakovic@fdn.com>).
+ update CF_SHARED_OPTS macro for SCO Unixware 7.1 to allow building
shared libraries (reported/tested by Thanh <thanhma@mediaone.net>).
+ override $LANGUAGE in build to avoid incorrect ordering of keynames.
+ correct CF_MATH_LIB parameter, must be sin(x), not sqrt(x).
20000122
+ resync CF_CHECK_ERRNO and CF_LIB_PREFIX macros from tin and xterm -TD
+ modify CF_MATH_LIB configure macro to parameterize the test function
used, for reuse in dialog and similar packages.
+ correct tests for file-descriptors in OS/2 EMX mouse support. A
negative value could be used by FD_SET, causing the select() call
to wait indefinitely.
20000115
+ additional fixes for non-bce terminals (handling of delete_character)
to work when assume_default_colors() is not specified.
+ modify warning message from _nc_parse_entry() regarding extended
capability names to print only if tic/infocmp/toe have the -v flag
set, and not at all in ordinary user applications. Otherwise, this
warning would be shown for screen's extended capabilities in programs
that use the termcap interface (reported by Todd C Miller).
+ modify use of _nc_tracing from programs such as tic so their debug
level is not in the same range as values set by trace() function.
+ small panel header cleanup (patch by Juergen Pfeifer).
+ add 'railroad' demo for termcap interface.
+ modify 'tic' to write its usage message to stderr (patch by Todd C
Miller).
20000108
+ add prototype for erase() to curses.h.in, needed to make test
programs build with c++/g++.
+ add .c.i and .c.h suffix rules to generated makefiles, for debugging.
+ correct install rule for tack.1; it assumed that file was in the
current directory (reported by Mike Castle <dalgoda@ix.netcom.com>).
+ modify terminfo/termcap translation to suppress acsc before trying
sgr if the entry would be too large (patch by Todd C Miller).
+ document a special case of incompatibility between ncurses 4.2 and
5.0, add a section for this in INSTALL.
+ add TRACE_DATABASE flag for trace().
20000101
+ update mach, add mach-color terminfo entries based on Debian diffs
for ncurses 5.0 -TD
+ add entries for xterm-hp, xterm-vt220, xterm-vt52 and xterm-noapp
terminfo entries -TD
+ change OTrs capabilities to rs2 in terminfo.src -TD
+ add obsolete and extended capabilities to 'screen' terminfo -TD
+ corrected conversion from terminfo rs2 to termcap rs (cf: 980704)
+ make conversion to termcap ug (underline glitch) more consistently
applied.
+ fix out-of-scope use of 'personal[]' buffer in 'toe' (this error
was in the original pre-1.9.7 version, when $HOME/.terminfo was
introduced).
+ modify 'toe' to ignore terminfo directories to which it has no
permissions.
+ modify read_termtype(), fixing 'toe', which could dump core when it
found an incomplete entry such as "dumb" because it did not
initialize its buffer for _nc_read_file_entry().
+ use -fPIC rather than -fpic for shared libraries on Linux, not
needed for i386 but some ports (from Debian diffs for 5.0) -TD
+ use explicit VALID_NUMERIC() checks in a few places that had been
overlooked, and add a check to ensure that init_tabs is nonzero,
to avoid divide-by-zero (reported by Todd C Miller).
+ minor fix for CF_ANSI_CC_CHECK configure macro, for HPUX 10.x (from
tin) -TD
19991218
+ reorder tests during mouse initialization to allow for gpm to run in
xterm, or for xterm to be used under OS/2 EMX. Also drop test for
$DISPLAY in favor of kmous=\E[M or $TERM containing "xterm" (report
by Christian Weisgerber <naddy@mips.rhein-neckar.de>).
+ modify raw() and noraw() to clear/restore IEXTEN flag which affects
stty lnext on systems such as FreeBSD (report by Bruce Evans
<bde@zeta.org.au>, via Jason Evans <jasone@canonware.com>).
+ fix a potential (but unlikely) buffer overflow in failed() function
of tset.c (reported by Todd C Miller).
+ add manual-page for ncurses extensions, documented curses_version(),
use_extended_names().
19991211
+ treat as untranslatable to termcap those terminfo strings which
contain non-decimal formatting, e.g., hexadecimal or octal.
+ correct commented-out capabilities that cannot be translated to
termcap, which did not check if a colon must be escaped.
+ correct termcap translation for "%>" and "%+", which did not check
if a colon must be escaped, for instance.
+ use save_string/save_char for _nc_captoinfo() to eliminate fixed
buffer (originally for _nc_infotocap() in 960301 -TD).
+ correct expression used for terminfo equivalent of termcap %B,
adjust regent100 entry which uses this.
+ some cleanup and commenting of ad hoc cases in _nc_infotocap().
+ eliminate a fixed-buffer in tic, used for translating comments.
+ add manpage for infotocap
19991204
+ add kvt and gnome terminfo entries -TD
+ correct translation of "%%" by infotocap, which was emitted as "%".
+ add "obsolete" termcap strings to terminfo.src
+ modify infocmp to default to showing obsolete capabilities rather
than terminfo only.
+ modify write_entry.c so that if extended names (i.e., configure
--enable-tcap-names) are active, then tic will also write "obsolete"
capabilities that are present in the terminfo source.
+ modify tic so that when running as captoinfo or infotocap, it
initializes the output format as in -C and -I options, respectively.
+ improve infocmp and tic -f option by splitting long strings that do
not have if-then-else construct, but do have parameters, e.g., the
initc for xterm-88color.
+ refine MKtermsort.sh slightly by using bool for the *_from_termcap
arrays.
19991127
+ additional fixes for non-bce terminals (handling of clear_screen,
clr_eol, clr_eos, scrolling) to work when assume_default_colors() is
not specified.
+ several small changes to xterm terminfo entries -TD.
+ move logic for _nc_windows in lib_freeall.c inside check for nonnull
SP, since it is part of that struct.
+ remove obsolete shlib-versions, which was unintentionally re-added
in 970927.
+ modify infocmp -e, -E options to ensure that generated fallback.c
type for Booleans agrees with term.h (reported by Eric Norum
<eric@cls.usask.ca>).
+ correct configure script's use of $LIB_PREFIX, which did not work
for installing the c++ directory if $libdir did not end with "/lib"
(reported by Huy Le <huyle@ugcs.caltech.edu>).
+ modify infocmp so -L and -f options work together.
+ modify the initialization of SP->_color_table[] in start_color() so
that color_content() will return usable values for COLORS greater
than 8.
+ modify ncurses 'd' test in case COLORS is greater than 16, e.g., for
xterm-88color, to limit the displayed/computed colors to 16.
> patch by Juergen Pfeifer:
+ simplify coding of the panel library according to suggestions by
Philippe Blain.
+ improve macro coding for a few macros in curses.priv.h
19991113
+ modify treatment of color pair 0 so that if ncurses is configured
to support default colors, and they are not active, then ncurses
will set that explicitly, not relying on orig_colors or orig_pair.
+ add new extension, assume_default_colors() to provide better control
over the use of default colors.
+ modify test programs to use more-specific ifdef's for existence of
wresize(), resizeterm() and use_default_colors().
+ modify configure script to add specific ifdef's for some functions
that are included when --enable-ext-funcs is in effect, so their
existence can be ifdef'd in the test programs.
+ reorder some configure options, moving those extensions that have
evolved from experimental status into a new section.
+ change configure --enable-tcap-names to enable this by default.
19991106
+ install tack's manpage (reported by Robert Weiner
<robert@progplus.com>)
+ correct worm.c's handling of KEY_RESIZE (patch by Frank Heckenbach).
+ modify curses.h.in, undef'ing some symbols to avoid conflict with C++
STL (reported by Matt Gerassimoff <mgeras@ticon.net>)
19991030
+ modify linux terminfo entry to indicate that dim does not mix with
color (reported by Klaus Weide <kweide@enteract.com>).
+ correct several typos in terminfo entries related to missing '['
in CSI's -TD
+ fix several compiler warnings in c++ binding (reported by Tim
Mooney for alphaev56-dec-osf4.0f
+ rename parameter of _nc_free_entries() to accommodate lint.
+ correct lint rule for tack, used incorrect list of source files.
+ add case to config.guess, config.sub for Rhapsody.
+ improve configure tests for libg++ and libstdc++ by omitting the
math library (which is missing on Rhapsody), and improved test for
the math library itself (adapted from path by Nelson H. F. Beebe).
+ explicitly initialize to zero several data items which were
implicitly initialized, e.g., cur_term. If not explicitly
initialized, their storage type is C (common), and causes problems
linking on Rhapsody 5.5 using gcc 2.7.2.1 (reported by Nelson H. F.
Beebe).
+ modify Ada95 binding to not include the linker option for Ada
bindings in the Ada headers, but in the Makefiles instead (patch by
Juergen Pfeifer).
19991023 5.0 release for upload to ftp.gnu.org
+ effective with release of 5.0, change NCURSES_VERSION_PATCH to
4-digit year.
+ add function curses_version(), to return ncurses library version
(request by Bob van der Poel).
+ remove rmam, smam from cygwin terminfo entry.
+ modify FreeBSD cons25 terminfo entry to add cnorm and cvvis, as well
as update ncv to indicate that 'dim' conflicts with colors.
+ modify configure script to use symbolic links for FreeBSD shared
libraries by default.
+ correct ranf() function in rain and worm programs to ensure it does
not return 1.0
+ hide the cursor in hanoi.c if it is running automatically.
+ amend lrtest.c to account for optimizations that exploit margin
wrapping.
+ add a simple terminfo demo, dots.c
+ modify SIGINT/SIGQUIT handler to set a flag used in _nc_outch() to
tell it to use write() rather than putc(), since the latter is not
safe in a signal handler according to POSIX.
+ add/use internal macros _nc_flush() and NC_OUTPUT to hide details
of output-file pointer in ncurses library.
+ uncomment CC_SHARED_OPTS (see 971115), since they are needed for SCO
OpenServer.
+ correct CC_SHARED_OPTS for building shared libraries for SCO
OpenServer.
+ remove usleep() from alternatives in napms(), since it may interact
with alarm(), causing a process to be interrupted by SIGALRM (with
advice from Bela Lubkin).
+ modify terminal_interface-curses-forms.ads.m4 to build/work with
GNAT 3.10 (patch by Juergen Pfeifer).
+ remove part of CF_GPP_LIBRARY configure-script macro, which did not
work with gcc 2.7.2.3
+ minor fix to test/tclock.c to avoid beeping more than once per second
+ add 's' and ' ' decoding to test/rain.c
991016 pre-release
+ corrected BeOS code for lib_twait.c, making nodelay() function work.
991009 pre-release
+ correct ncurses' value for cursor-column in PutCharLR(), which was
off-by-one in one case (patch by Ilya Zakharevich).
+ fix some minor errors in position_check() debugging code, found while
using this to validate the PutCharLR() patch.
+ modify firework, lrtest, worm examples to be resizable, and to
recognize 'q' for quit, 's' for single-step and ' ' for resume.
+ restore reverted change to terminal_interface-curses-forms.ads.m4,
add a note on building with gnat 3.10p to Ada95/TODO.
+ add a copy of the standalone configure script for the test-directory
to simplify testing on SCO and Solaris.
991002 pre-release
+ minor fixes for _nc_msec_cost(), color_content(), pair_content(),
_nc_freewin(), ClrBottom() and onscreen_mvcur() (analysis by Philippe
Blain, comments by Alexander V Lukyanov).
+ simplify definition of PANEL and eliminate internal functions
_nc_calculate_obscure(), _nc_free_obscure() and _nc_override(),
(patch by Juergen Pfeifer, analysis by Philippe Blain
<bledp@voila.fr>)).
+ change renaming of dft_fgbg.3x to use_default_colors.3ncurses in
man_db.renames, since Debian is not concerned with 14-character
filename limitation (Debian bug report by Josip Rodin
<joy@cibalia.gkvk.hr>).
+ corrected scoansi terminfo entry by testing with scoterm and console.
+ revert change from 990614 to terminal_interface-curses-forms.ads.m4,
since this does not work for gnat 3.10p
+ modify tclock example to be resizable (if ncurses' sigwinch handler
is used), and in color.
+ use $(CC) rather than 'gcc' in MK_SHARED_LIB symbols, used for Linux
shared library rules.
990925 pre-release
+ add newer NetBSD console terminfo entries
+ add amiga-8bit terminfo entry (from Henning 'Faroul' Peters
<Faroul@beyond.kn-bremen.de>)
+ remove -lcurses -ltermcap from configure script's check for the gpm
library, since they are not really necessary (a properly configured
gpm library has no dependency on any curses library), and if the
curses library is not installed, this would cause the test to fail.
+ modify tic's -C option so that terminfo "use=" clauses are translated
to "tc=" clauses even when running it as captoinfo.
+ modify CF_STDCPP_LIBRARY configure macro to perform its check only
for GNU C++, since that library conflicts with SGI's libC on IRIX-6.2
+ modify CF_SHARED_OPTS configure macro to support build on NetBSD with
ELF libraries (patch by Bernd Ernesti <bernd@arresum.inka.de>).
+ correct a problem in libpanel, where the _nc_top_panel variable was
not set properly when bottom_panel() is called to hide a panel which
is the only one on the stack (report/analysis by Michael Andres
<ma@suse.de>, patch by Juergen Pfeifer).
990918 pre-release
+ add acsc string to HP 70092 terminfo entry (patch by Joerg Wunsch
<j@interface-business.de>).
+ add top-level uninstall.data and uninstall.man makefile rules.
+ correct logic of CF_LINK_FUNCS configure script, from BeOS changes so
that hard-links work on Unix again.
+ change default value of cf_cv_builtin_bool to 1 (suggested by
Jeremy Buhler), making it less likely that a conflicting declaration
of bool will be seen when compiling with C++.
990911 pre-release
+ improved configure checks for builtin.h
+ minor changes to C++ binding (remove static initializations, and make
configure-test for parameter initializations) for features not
allowed by vendor's C++ compilers (reported by Martin Mokrejs, this
applies to SGI, though I found SCO has the same characteristics).
+ corrected quoting of ETIP_xxx definitions which support old versions
of g++, e.g., those using -lg++
+ remove 'L' code from safe_sprintf.c, since 'long double' is not
widely portable. safe_sprintf.c is experimental, however, and
exists mainly as a fallback for systems without snprintf (reported
by Martin Mokrejs <mmokrejs@natur.cuni.cz>, for IRIX 6.2)
+ modify definition of _nc_tinfo_fkeys in broken-linker configuration
so that it is not unnecessarily made extern (Jeffrey C Honig).
990904 pre-release
+ move definition for builtin.h in configure tests to specific check
for libg++, since qt uses the same filename incompatibly.
+ correct logic of lib_termcap.c tgetstr function, which did not copy
the result to the buffer parameter. Testing shows Solaris does
update this, though of course tgetent's buffer is untouched (reported
in Peter Edwards <peter.edwards@ireland.com> in
mpc.lists.freebsd.current newsgroup.
+ corrected beterm terminfo entry, which lists some capabilities which
are not actually provided by the BeOS Terminal.
+ add special logic to replace select() calls on BeOS, whose select()
function works only for sockets.
+ correct missing escape in mkterm.h.awk.in, which caused part
of the copyright noticed to be omitted (reported by Peter
Wemm <peter@netplex.com.au>).
> several small changes to make the c++ binding and demo work on OS/2
EMX (related to a clean reinstall of EMX):
+ correct library-prefix for c++ binding; none is needed.
+ add $x suffix to make_hash and make_keys so 'make distclean' works.
+ correct missing $x suffix for tack, c++ demo executables.
+ split CF_CXX_LIBRARY into CF_GPP_LIBRARY (for -lg++) and
CF_STDCPP_LIBRARY (for -lstdc++)
990828 pre-release
+ add cygwin terminfo entry -TD
+ modify CF_PROG_EXT configure macro to set .exe extension for cygwin.
+ add configure option --without-cxx-binding, modifying the existing
--without-cxx option to check only for the C++ compiler
characteristics. Whether or not the C++ binding is needed, the
configure script checks for the size/type of bool, to make ncurses
match. Otherwise C++ applications cannot use ncurses.
990821 pre-release
+ updated configure macros CF_MAKEFLAGS, CF_CHECK_ERRNO
+ minor corrections to beterm terminfo entry.
+ modify lib_setup.c to reject values of $TERM which have a '/' in
them.
+ add ifdef's to guard against CS5, CS6, CS7, CS8 being zero, as more
than one is on BeOS. That would break a switch statement.
+ add configure macro CF_LINK_FUNCS to detect and work around BeOS's
nonfunctional link().
+ improved configure macros CF_BOOL_DECL and CF_BOOL_SIZE to detect
BeOS's bool, which is declared as an unsigned char.
990814 pre-release
+ add ms-vt100 terminfo entry -TD
+ minor fixes for misc/emx.src, based on testing with tack.
+ minor fix for test/ncurses.c, test 'a', in case ncv is not set.
990731 pre-release
+ minor correction for 'screen' terminfo entry.
+ clarify description of errret values for setupterm in manpage.
+ modify tput to allow it to emit capabilities for hardcopy terminals
(patch by Goran Uddeborg <goeran@uddeborg.pp.se>).
+ modify the 'o' (panel) test in ncurses.c to show the panels in color
or at least in bold, to test Juergen's change to wrefresh().
> patches by Juergen Pfeifer:
+ Fixes a problem using wbkgdset() with panels. It has actually
nothing to with panels but is a problem in the implementation of
wrefresh(). Whenever a window changes its background attribute to
something different than newscr's background attribute, the whole
window is touched to force a copy to newscr. This is an unwanted
side-effect of wrefresh() and it is actually not necessary. A
changed background attribute affects only further outputs of
background it doesn't mean anything to the current content of the
window. So there is no need to force a copy. (reported by Frank
Heckenbach <frank@g-n-u.de>).
+ an upward compatible enhancement of the NCursesPad class in the C++
binding. It allows one to add a "viewport" window to a pad and then
to use panning to view the pad through the viewport window.
990724 pre-release
+ suppress a call to def_prog_mode() in the SIGTSTP handler if the
signal was received while not in curses mode, e.g., endwin() was
called in preparation for spawning a shell command (reported by Frank
Heckenbach <frank@g-n-u.de>)
+ corrected/enhanced xterm-r5, xterm+sl, xterm+sl-twm terminfo entries.
+ change test for xterm mouse capability: it now checks only if the
user's $DISPLAY variable is set in conjunction with the kmous
capability being present in the terminfo. Before, it checked if any
of "xterm", "rxvt" or "kterm" were substrings of the terminal name.
However, some emulators which are incompatible with xterm in other
ways do support the xterm mouse capability.
+ reviewed and made minor changes in ncurses to quiet g++ warnings
about shadowed or uninitialized variables. g++ incorrectly warns
about uninitialized variables because it does not take into account
short-circuit expression evaluation.
+ change ncurses 'b' test to start in color pair 0 and to show in the
right margin those attributes which are suppressed by no_color_video,
i.e., "(NCV)".
+ modify ifdef's in curses.h so that __attribute__ is not redefined
when compiling with g++, but instead disabled the macros derived for
__attribute__ since g++ does not consistently recognize the same
keywords as gcc (reported by Stephan K Zitz <zitz@erf.net>).
+ update dependencies for term.h in ncurses/modules (reported by
Ilya Zakharevich).
990710 pre-release
+ modify the form demo in ncurses.c to illustrate how to manipulate the
field appearance, e.g, for highlighting or translating the field
contents.
+ correct logic in write_entry from split-out of home_terminfo in
980919, which prevented update of $HOME/.terminfo (reported by Philip
Spencer <pspencer@fields.utoronto.ca>).
990703 pre-release
+ modify linux terminfo description to make use of kernel 2.2.x mods
that support cursor style, e.g., to implement cvvis (patch by Frank
Heckenbach <frank@g-n-u.de>)
+ add special-case in setupterm to retain previously-saved terminal
settings in cur_term, which happens when curses and termcap calls are
mixed (from report by Bjorn Helgaas <helgaas@dhc.net>).
+ suppress initialization of key-tries in _nc_keypad() if we are only
disabling keypad mode, e.g., in endwin() called when keypad() was
not.
+ modify the Ada95 makefile to ensure that always the Ada files from
the development tree are used for building and not the eventually
installed ones (patch by Juergen Pfeifer).
990626 pre-release
+ use TTY definition in tack/sysdep.c rather than struct termios
(reported by Philippe De Muyter).
+ add a fallback for strstr, used in lib_mvcur.c and tack/edit.c,
not present on sysV68 (reported by Philippe De Muyter).
+ correct definition in comp_hash.c to build with configure
--with-rcs-ids option.
990619 pre-release
+ modified ifdef's for sigaction and sigvec to ensure we do not try to
handle SIGTSTP if neither is available (from report by Philippe De
Muyter).
> patch by Philippe De Muyter:
+ in tic.c, use `unlink' if `remove' is not available.
+ use only `unsigned' as fallback value for `speed_t'. Some files used
`short' instead.
990616 pre-release
+ fix some compiler warnings in tack.
+ add a check for predefined bool type in CC, based on report that
BeOS predefines a bool type.
+ correct logic for infocmp -e option, i.e., the configure
--with-fallbacks option, which I'd not updated when implementing
extended names (cf: 990301). The new implementation adds a "-E"
option to infocmp -TD
> patch by Juergen Pfeifer:
+ introduce the private type Curses_Bool in the Ada95 binding
implementation. This is to clearly represent the use of "bool" also
in the binding. It should have no effect on the generated code.
+ improve the man page for field_buffer() to tell the people, that the
whole buffer including leading/trailing spaces is returned. This is
a common source of confusion, so it's better to document it clearly.
990614 pre-release
> patch by Juergen Pfeifer:
+ use pragma PreElaborate in several places.
+ change a few System.Address uses to more specific types.
+ change interface version-number to 1.0
+ regenerate Ada95 HTML files.
990612 pre-release
+ modify lib_endwin.c to avoid calling reset_shell_mode(), return ERR
if it appears that curses was never initialized, e.g., by initscr().
For instance, this guards against setting the terminal modes to
strange values if endwin() is called after setupterm(). In the same
context, Solaris curses will dump core.
+ modify logic that avoids a conflict in lib_vidattr.c between sgr0 and
equivalent values in rmso or rmul by ensuring we do not modify the
data which would be returned by the terminfo or termcap interfaces
(reported by Brad Pepers <brad@linuxcanada.com>, cf: 960706).
+ add a null-pointer check for SP in lib_vidattr.c to logic that checks
for magic cookies.
+ improve fallback declaration of 'bool' when the --without-cxx option
is given, by using a 'char' on i386 and related hosts (prompted by
discussion with Alexander V Lukyanov).
990605 pre-release
+ include time.h in lib_napms.c if nanosleep is used (patch by
R Lindsay Todd <toddr@rpi.edu>).
+ add an "#undef bool" to curses.h, in case someone tries to define it,
e.g., perl.
+ add check to tparm to guard against divide by zero (reported by Aaron
Campbell <aaron@ug.cs.dal.ca>).
990516 pre-release
+ minor fix to build tack on CLIX (mismatched const).
> patch by Juergen Pfeifer:
+ change Juergen's old email address with new one in the files where it
is referenced. The Ada95 HTML pages are regenerated.
+ update MANIFEST to list the tack files.
990509 pre-release
+ minor fixes to make 'tack' build/link on NeXT (reported by Francisco
A. Tomei Torres).
990417 pre-release
+ add 'tack' program (which is GPL'd), updating it to work with the
modified TERMTYPE struct and making a fix to support setaf/setab
capabilities. Note that the tack program is not part of the
ncurses libraries, but an application which can be distributed with
ncurses. The configure script will ignore the directory if it is
omitted, however.
+ modify gpm mouse support so that buttons 2 and 3 are used for
select/paste only when shift key is pressed, making them available
for use by an application (patch by Klaus Weide).
+ add complete list of function keys to scoansi terminfo entry - TD
990410 pre-release
+ add a simple test program cardfile.c to illustrate how to read form
fields, and showing forms within panels.
+ change shared-library versioning for the Hurd to be like Linux rather
than *BSD (patch by Mark Kettenis <kettenis@wins.uva.nl>).
+ add linux-lat terminfo entry.
+ back-out _nc_access check in read_termcap.c (both incorrect and
unnecessary, except to guard against a small window where the file's
ownership may change).
990403 pre-release
+ remove conflicting _nc_free_termtype() function from test module
lib_freeall.c
+ use _nc_access check in read_termcap.c for termpaths[] array (noted
by Jeremy Buhler, indicating that Alan Cox made a similar patch).
> patch by Juergen Pfeifer:
+ modify menu creation to not inherit status flag from the default menu
which says that the associated marker string has been allocated and
should be freed (bug reported by Marek Paliwoda"
<paliwoda@kki.net.pl>)
990327 pre-release (alpha.gnu.org:/gnu/ncurses-5.0-beta1.tar.gz)
+ minor fixes to xterm-xfree86 terminfo entry - TD.
+ split up an expression in configure script check for ldconfig to
workaround limitation of BSD/OS sh (reported by Jeff Haas
<jmh@mail.msen.com>).
+ correct a typo in man/form_hook.3x (Todd C Miller).
990318 pre-release
+ parenthesize and undef 'index' symbol in c++ binding and demo, to
accommodate its definition on NeXT (reported by Francisco A. Tomei
Torres).
+ add sigismember() to base/sigaction.c compatibility to link on NeXT
(reported by Francisco A. Tomei Torres).
+ further refinements to inequality in hashmap.c to cover a case with
^U in nvi (patch by Alexander V Lukyanov).
990316 pre-release
+ add fallback definition for getcwd, to link on NeXT.
+ add a copy of cur_term to tic.c to make it link properly on NeXT
(reported by Francisco A. Tomei Torres).
+ change inequality in hashmap.c which checks the distance traveled by
a chunk so that ^D command in nvi (scrolls 1/2 screen) will use
scrolling logic (patch by Alexander V Lukyanov, reported by Jeffrey
C Honig).
990314 pre-release
+ modify lib_color.c to handle a special case where the curscr
attributes have been made obsolete (patch by Alexander V Lukyanov).
+ update BSD/OS console terminfo entries to use klone+sgr and
klone+color (patch by Jeffrey C Honig).
+ update glibc addon configure script for extended capabilities.
+ correct a couple of warnings in the --enable-const configuration.
+ make comp_hash build properly with _nc_strdup(), on NeXT (reported by
Francisco A. Tomei Torres <francisco.tomei@cwix.com>).
990313 pre-release
+ correct typos in linux-c initc string - TD
+ add 'crt' terminfo entry, update xterm-xfree86 entry - TD
+ remove a spurious argument to tparm() in lib_sklrefr.c (patch by
Alexander V Lukyanov).
990307 pre-release
+ back-out change to wgetch because it causes a problem with ^Z
handling in lynx (reported by Kim DeVaughn).
990306 pre-release
+ add -G option to tic and infocmp, to reverse the "-g" option.
+ recode functions in name_match.c to avoid use of strncpy, which
caused a 4-fold slowdown in tic (cf: 980530).
+ correct a few warnings about sign-extension in recent changes.
> patch by Juergen Pfeifer:
+ fixes suggested by Jeff Bradbury <jibradbury@lucent.com>:
+ improved parameter checking in new_fieldtype().
+ fixed a typo in wgetch() timeout handling.
+ allow slk_init() to be called per newterm call. The internal SLK
state is stored in the SCREEN struct after every newterm() and then
reset for the next newterm.
+ fix the problem that a slk_refresh() refreshes stdscr if the
terminal has true SLKs.
+ update HTML documentation for Ada binding.
990301 pre-release
+ remove 'bool' casts from definitions of TRUE/FALSE so that statements
such as "#if TRUE" work. This was originally done to allow for a C++
compiler which would warn of implicit conversions between enum and
int, but is not needed for g++ (reported by Kim DeVaughn).
+ add use_extended_names() function to allow applications to suppress
read of the extended capabilities.
+ add configure option --enable-tcap-names to support logic which
allows ncurses' tic to define new (i.e., extended) terminal
capabilities. This is activated by the tic -x switch. The infocmp
program automatically shows or compares extended capabilities.
Note: This changes the Strings and similar arrays in the TERMTYPE
struct so that applications which manipulate it must be recompiled.
+ use macros typeMalloc, typeCalloc and typeRealloc consistently
throughout ncurses library.
+ add _nc_strdup() to doalloc.c.
+ modify define_key() to allow multiple strings to be bound to the
same keycode.
+ correct logic error in _nc_remove_string, from 990220.
> patch for Ada95 binding (Juergen Pfeifer):
+ regenerate some of the html documentation
+ minor cleanup in terminal_interface-curses.adb
990220 pre-release
+ resolve ambiguity of kend/kll/kslt and khome/kfnd/kich1 strings in
xterm and ncsa terminfo entries by removing the unneeded ones. Note
that some entries will return kend & khome versus kslt and kfnd, for
PC-style keyboards versus strict vt220 compatibility - TD
+ add function keybound(), which returns the definition associated with
a given keycode.
+ modify define_key() to undefine the given string when no keycode is
given.
+ modify keyok() so it works properly if there is more than one string
defined for a keycode.
+ add check to tic to warn about terminfo descriptions that contain
more than one key assigned to the same string. This is shown only if
the verbose (-v) option is given. Moved related logic (tic -v) from
comp_parse.c into the tic program.
+ add/use _nc_trace_tries() to show the function keys that will be
recognized.
+ rename init_acs to _nc_init_acs (request by Alexander V Lukyanov).
> patch for Ada95 binding (Juergen Pfeifer):
+ remove all the *_adabind.c from ncurses, menu and form projects.
Those little helper routines have all been implemented in Ada and are
no longer required.
+ The option handling routines in menu and form have been made more
save. They now make sure that the unused bits in options are always
zero.
+ modify configuration scripts to
+ use gnatmake as default compiler name. This is a safer choice than
gcc, because some GNAT implementations use other names for the
compilerdriver to avoid conflicts.
+ use new default installation locations for the Ada files according
to the proposed GNU Ada filesystem standard (for Linux).
+ simplify the Makefiles for the Ada binding
+ rename ada_include directory to src.
990213
+ enable sigwinch handler by default.
+ disable logic that allows setbuf to be turned off/on, because some
implementations will overrun the buffer after it has been disabled
once.
990206
+ suppress sc/rc capabilities from terminal description if they appear
in smcup/rmcup. This affects only scrolling optimization, to fix a
problem reported by several people with xterm's alternate screen,
though the problem is more general.
> patch for Ada95 binding (Juergen Pfeifer):
+ removed all pragma Preelaborate() stuff, because the just released
gnat-3.11p complains on some constructs.
+ fixed some upper/lower case notations because gnat-3.11p found
inconsistent use.
+ used a new method to generate the HTML documentation of the Ada95
binding. This invalidates nearly the whole ./Ada95/html subtree.
Nearly all current files in this subtree are removed
990130
+ cache last result from _nc_baudrate, for performance (suggested by
Alexander V Lukyanov).
+ modify ClrUpdate() function to workaround a problem in nvi, which
uses redrawwin in SIGTSTP handling. Jeffrey C Honig reported that
ncurses repainted the screen with nulls before resuming normal
operation (patch by Alexander V Lukyanov).
+ generalize is_xterm() function a little by letting xterm/rxvt/kterm
be any substring rather than the prefix.
+ modify lib_data.c to initialize SP. Some linkers, e.g., IBM's, will
not link a module if the only symbols exported from the module are
uninitialized ones (patch by Ilya Zakharevich). Ilya says that he
has seen messages claiming this behavior conforms to the standard.)
+ move call on _nc_signal_handler past _nc_initscr, to avoid a small
window where Nttyb hasn't yet been filled (reported by Klaus Weide).
+ modify lib_tstp.c to block SIGTTOU when handling SIGTSTP, fixes a
problem where ncurses applications which were run via a shell script
would hang when given a ^Z. Also, check if the terminal's process
group is consistent, i.e., a shell has not taken ownership of it,
before deciding to save the current terminal settings in the SIGTSTP
handler (patch by Klaus Weide).
+ correct spelling of ACS_ names in curs_border.3x (reported by Bob van
der Poel <bvdpoel@kootenay.com>).
+ correct a couple of typos in the macros supporting the configure
--with-shlib-version option.
990123
+ modify fty_regex.c to compile on HAVE_REGEXPR_H_FUNCS machine (patch
by Kimio Ishii <ishii@csl.sony.co.jp>).
+ rename BSDI console terminfo entries: bsdos to bsdos-pc-nobold, and
bsdos-bold to bsdos-pc (patch by Jeffrey C Honig).
+ modify tput to accept termcap names as an alternative to terminfo
names (patch by Jeffrey C Honig).
+ correct a typo in term.7 (Todd C Miller).
+ add configure --with-shlib-version option to allow installing shared
libraries named according to release or ABI versions. This
parameterizes some existing logic in the configure script, and is
intended for compatibility upgrades on Digital Unix, which used
versioned libraries in ncurses 4.2, but no longer does (cf: 980425).
+ resync configure script against autoconf 2.13 + patches
+ minor improvements for teraterm terminfo entry based on the program's
source distribution.
990116
+ change default for configure --enable-big-core to assume machines do
have enough memory to resolve terminfo.src in-memory.
+ correct name of ncurses library in TEST_ARGS when configuring with
debug library.
+ minor fixes to compile ncurses library with broken-linker with g++.
+ add --enable-broken-linker configure option, default to environment
variable $BROKEN_LINKER (request by Jeffrey C Honig).
+ change key_names[] array to static since it is not part of the curses
interface (reported by Jeffrey C Honig <jch@bsdi.com>).
990110
+ add Tera Term terminfo entry - TD
990109
+ reviewed/corrected macros in curses.h as per XSI document.
+ provide support for termcap PC variable by copying it from terminfo
data and using it as the padding character in tputs (reported by
Alexander V Lukyanov).
+ corrected iris-ansi and iris-ansi-ap terminfo entries for kent and
kf9-kf12 capabilities, as well as adding kcbt.
+ document the mouse handling mechanism in menu_driver and make a small
change in menu_driver's return codes to provide more consistency
(patch by Juergen Pfeifer).
+ add fallback definition for NCURSES_CONST to termcap.h.in (reported
by Uchiyama Yasushi <uch@nop.or.jp>).
+ move lib_restart.c to ncurses/base, since it uses curses functions
directly, and therefore cannot be used in libtinfo.so
+ rename micro_char_size to micro_col_size, adding #define to retain
old name.
+ add set_a_attributes and set_pglen_inch to terminfo structure, as per
XSI and Solaris 2.5.
+ minor makefile files to build ncurses test_progs
+ update html files in misc directory to reflect changes since 4.2
990102
+ disable scroll hints when hashmap is enabled (patch by Alexander
V Lukyanov).
+ move logic for tic's verify of -e option versus -I and -C so that the
terminfo data is not processed if we cannot handle -e (reported by
Steven Schwartz <steves@unitrends.com>.
+ add test-driver traces to terminfo and termcap functions.
+ provide support for termcap ospeed variable by copying it from the
internal cur_term member, and using ospeed as the baudrate reference
for the delay_output and tputs functions. If an application does not
set ospeed, the library behaves as before, except that _nc_timed_wait
is no longer used, or needed, since ospeed always has a value. But
the application can modify ospeed to adjust the output of padding
characters (prompted by a bug report for screen 3.7.6 and email from
Michael Schroeder <Michael.Schroeder@informatik.uni-erlangen.de>).
+ removed some unused ifdef's as part of Alexander's restructuring.
+ reviewed/updated curses.h, term.h against X/Open Curses Issue 4
Version 2. This includes making some parameters NCURSES_CONST
rather than const, e.g., in termcap.h.
+ change linux terminfo entry to use ncv#2, since underline does not
work with color
981226
+ miscellaneous corrections for curses.h to match XSI.
+ change --enable-no-padding configure option to be normally enabled.
+ add section to ncurses manpage for environment variables.
+ investigated Debian bug report that pertains to screen 3.7.4/3.7.6
changes, found no sign of problems on Linux (or on SunOS, Solaris)
running screen built with ncurses.
+ check if tmp_fp is opened in tic.c before closing it (patch by Pavel
Roskin <pavel_roskin@geocities.com>).
+ correct several font specification typos in man-pages.
981220
+ correct default value for BUILD_CC (reported by Larry Virden).
981219
+ modify _nc_set_writedir() to set a flag in _nc_tic_dir() to prevent
it from changing the terminfo directory after chdir'ing to it.
Otherwise, a relative path in $TERMINFO would confuse tic (prompted
by a Debian bug report).
+ correct/update ncsa terminfo entry (report by Larry Virden).
+ update xterm-xfree86 terminfo to current (patch 90), smcur/rmcur
changes
+ add Mathew Vernon's mach console entries to terminfo.src
+ more changes, moving functions, as part of Alexander's restructuring.
+ modify configure script for GNU/Hurd share-library support, introduce
BUILD_CC variable for cross compiling (patch by Uchiyama Yasushi
<uch@nop.or.jp>)
981212
+ add environment variable NCURSES_NO_SETBUF to allow disabling the
setbuf feature, for testing purposes.
+ correct ifdef's for termcap.h versus term.h that suppress redundant
declarations of prototypes (reported by H.J.Lu).
+ modify Makefile.os2 to add linker flags which allow multiple copies
of an application to coexist (reported by Ilya Zakharevich).
+ update Makefile.glibc and associated configure script so that ncurses
builds as a glibc add-on with the new directory configuration
(reported by H.J.Lu).
981205
+ modify gen_reps() function in gen.c to work properly on SunOS
(sparc), which is a left-to-right architecture.
+ modify relative_move and tputs to avoid an interaction with the
BSD-style padding. The relative_move function could produce a string
to replace on the screen which began with a numeric character, which
was then interpreted by tputs as padding. Now relative_move will not
generate a string with a leading digit in that case (overwrite).
Also, tputs will only interpret padding if the string begins with a
digit; as coded it permitted a string to begin with a decimal point
or asterisk (reported by Larry Virden).
> patches by Juergen Pfeifer:
+ fix a typo in m_driver.c mouse handling and improves the error
handling.
+ fix broken mouse handling in the Ada95 binding
+ make the Ada95 sample application menus work with the new menu mouse
support
+ improve the mouse handling introduced by Ilya; it now handles menus
with spacing.
+ repair a minor bug in the menu_driver code discovered during this
rework.
+ add new function wmouse_trafo() to hide implementation details of
_yoffset member of WINDOW struct needed for mouse coordinate
transformation.
981128
+ modify Ada95/gen/gen.c to avoid using return-value of sprintf, since
some older implementations (e.g., SunOS 4.x) return the buffer
address rather than its length.
> patch by Rick Ohnemus:
+ modify demo.cc to get it to compile with newer versions of egcs.
+ trim a space that appears at the end of the table preprocessor lines
('\" t). This space prevents some versions of man from displaying
the pages - changed to remove all trailing whitespace (TD)
+ finally, 'make clean' does not remove panel objects.
> patches by Ilya Zakharevich:
+ allow remapping of OS/2 mouse buttons using environment variable
MOUSE_BUTTONS_123 with the default value 132.
+ add mouse support to ncurses menus.
981121
+ modify misc/makedef.cmd to report old-style .def file symbols, and to
generate the .def files sorted by increasing names rather than the
reverse.
+ add misc/*.ref which are J.J.G.Ripoll's dll definition files (renamed
from misc/*.old), and updated based on the entrypoint coding he used
for an older version of ncurses.
+ add README.emx, to document how to build on OS/2 EMX.
+ updates for config.guess, config.sub from Lynx
> patches by Ilya Zakharevich:
+ minor fixes for mouse handling mode:
a) Do not initialize mouse if the request is to have no mouse;
b) Allow switching of OS/2 VIO mouse on and off.
+ modify Makefile.os2 to support alternative means of generating
configure script, by translating Unix script with Perl.
> patches by Juergen Pfeifer:
+ Updates MANIFEST to reflect changes in source structure
+ Eliminates a problem introduced with my last patch for the C++
binding in the panels code. It removes the update() call done in the
panel destructor.
+ Changes in the Ada95 binding to better support systems where
sizeof(chtype)!=sizeof(int) (e.g. DEC Alpha).
981114
+ modify install-script for manpages to skip over .orig and .rej files
(request by Larry Virden).
> patches/discussion by Alexander V Lukyanov:
+ move base-library sources into ncurses/base and tty (serial terminal)
sources into ncurses/tty, as part of Alexander V Lukyanov's proposed
changes to ncurses library.
+ copy _tracemouse() into ncurses.c so that lib_tracemse.c need not
be linked into the normal ncurses library.
+ move macro winch to a function, to hide details of struct ldat
> patches by Juergen Pfeifer:
+ fix a potential compile problem in cursesw.cc
+ some Ada95 cosmetics
+ fix a gen.c problem when compiling on 64-Bit machines
+ fix Ada95/gen/Makefile.in "-L" linker switch
+ modify Ada95 makefiles to use the INSTALL_PREFIX setting.
981107
+ ifdef'd out lib_freeall.c when not configured.
+ rename _tracebits() to _nc_tracebits().
+ move terminfo-library sources into ncurses/tinfo, and trace-support
functions into ncurses/trace as part of Alexander V Lukyanov's
proposed changes to ncurses library.
+ modify generated term.h to always specify its own definitions for
HAVE_TERMIOS_H, etc., to guard against inclusion by programs with
broken configure scripts.
981031
+ modify terminfo parsing to accept octal and hexadecimal constants,
like Solaris.
+ remove an autoconf 2.10 artifact from the configure script's check
for "-g" compiler options. (Though harmless, this confused someone
at Debian, who recently issued a patch that results in the opposite
effect).
+ add configure option --with-ada-compiler to accommodate installations
that do not use gcc as the driver for GNAT (patch by Juergen
Pfeifer).
981017
+ ensure ./man exists in configure script, needed when configuring
with --srcdir option.
+ modify infocmp "-r" option to remove limit on formatted termcap
output, which makes it more like Solaris' version.
+ modify captoinfo to treat no-argument case more like Solaris'
version, which uses the contents of $TERMCAP as the entry to format.
+ modify mk-2nd.awk to handle subdirectories, e.g., ncurses/tty
(patch by Alexander V Lukyanov).
981010
+ modify --with-terminfo-dirs option so that the default value is the
${datadir} value, unless $TERMINFO_DIRS is already set. This gets
rid of a hardcoded list of candidate directories in the configure
script.
+ add some error-checking to _nc_read_file_entry() to ensure that
strings are properly terminated (Todd C Miller).
+ rename manpage file curs_scr_dmp.3x to curs_scr_dump.3x, to
correspond with contents (reported by Neil Zanella
<nzanella@cs.mun.ca>).
+ remove redundant configure check for C++ which did not work when $CXX
was specified with a full pathname (reported by Andreas Jaeger).
+ corrected bcopy/memmove check; the macro was not standalone.
981003
+ remove unnecessary portion of OS/2 EMX mouse change from
check_pending() (reported by Alexander V Lukyanov).
980926
+ implement mouse support for OS/2 EMX (adapted from patch against
4.2(?) by Ilya Zakharevich).
+ add configure-check for bcopy/memmove, for 980919 changes to hashmap.
+ merge Data General terminfo from Hasufin <hasufin@vidnet.net> - TD
+ merge AIX 3.2.5 terminfo descriptions for IBM terminals, replaces
some older entries - TD
+ modify tic to compile into %'char' form in preference to %{number},
since that is a little more efficient.
+ minor correction to infocmp to avoid displaying "difference" between
two capabilities that are rendered in equivalent forms.
+ add "-g" option to tic/infocmp to force character constants to be
displayed in quoted form. Otherwise their decimal values are shown.
+ modify setupterm so that cancelled strings are treated the same as
absent strings, cancelled and absent booleans false (does not affect
tic, infocmp).
+ modify tic, infocmp to discard redundant i3, r3 strings when output
to termcap format.
> patch by Alexander V Lukyanov:
+ improve performance of tparm, now it takes 19% instead of 25% when
profiling worm.
+ rename maxlen/minlen to prec/width for better readability.
+ use format string for printing strings.
+ use len argument correctly in save_text, and pass it to save_number.
980919
+ make test_progs compile (but hashmap does not function).
+ correct NC_BUFFERED macro, used in lib_mvcur test-driver, modify
associated logic to avoid freeing the SP->_setbuf data.
+ add modules home_terminfo and getenv_num to libtinfo.
+ move write_entry to libtinfo, to work with termcap caching.
+ minor fixes to blue.c to build with atac.
+ remove softscroll.c module; no longer needed for testing.
> patches by Todd C Miller:
+ use strtol(3) instead of atoi(3) when parsing env variables so we can
detect a bogus (non-numeric) value.
+ check for terminal names > MAX_NAME_SIZE in a few more places when
dealing with env variables again.
+ fix a MAX_NAME_SIZE that should be MAX_NAME_SIZE+1
+ use sizeof instead of strlen(3) on PRIVATE_INFO since it is a fixed
string #define (compile time vs runtime).
+ when setting errno to ENOMEM, set it right before the return, not
before code that could, possibly, set errno to a different value.
> patches by Alexander V Lukyanov:
+ use default background in update_cost_from_blank()
+ disable scroll-hints when hashmap is configured.
+ improve integration of hashmap scrolling code, by adding oldhash and
newhash data to SP struct.
+ invoke del_curterm from delscreen.
+ modify del_curterm to set cur_term to null if it matches the
function's parameter which is deleted.
+ modify lib_doupdate to prefer parm_ich to the enter_insert_mode and
exit_insert_mode combination, adjusting InsCharCost to check
enter_insert_mode, exit_insert_mode and insert_padding. Add
insert_padding in insert mode after each char. This adds new costs
to the SP struct.
980912
+ modify test-driver in lib_mvcur.s to use _nc_setbuffer, for
consistent treatment.
+ modify ncurses to restore output to unbuffered on endwin, and resume
buffering in refresh (see lib_set_term.c and NC_BUFFERED macro).
+ corrected HTML version numbers (according to the W3C validator, they
never were HTML 2.0-compliant, but are acceptable 3.0).
980905
+ modify MKterminfo.sh to generate terminfo.5 with tables sorted by
capability name, as in SVr4.
+ modified term.h, termcap.h headers to avoid redundant declarations.
+ change 'u_int' type in tset.c to unsigned, making this compile on
Sequent PRX 4.1 (reported by Michael Sterrett <msterret@coat.com>).
980829
+ corrections to mailing addresses, and moving the magic line that
causes the man program to invoke tbl to the first line of each
manpage (patch by Rick Ohnemus <rick@ecompcon.com>).
+ add Makefile.os2 and supporting scripts to generate dll's on OS/2 EMX
(from J.J.G.Ripoll, with further integration by TD).
+ correct a typo in icl6404 terminfo entry.
+ add xtermm and xtermc terminfo entries.
> from esr's terminfo version:
+ Added Francesco Potorti's tuned Wyse 99 entries.
+ dtterm enacs (from Alexander V Lukyanov).
+ Add ncsa-ns, ncsa-m-ns and ncsa-m entries from esr version.
980822
+ document AT&T acs characters in terminfo.5 manpage.
+ use EMX _scrsize() function if terminfo and environment do not
declare the screen size (reported by Ilya Zakharevich
<ilya@math.ohio-state.edu>).
+ remove spurious '\' characters from eterm and osborne terminfo
entries (prompted by an old Debian bug report).
+ correct reversed malloc/realloc calls in _nc_doalloc (reported by
Hans-Joachim Widmaier <hjwidmai@foxboro.com>).
+ correct misplaced parenthesis which caused file-descriptor from
opening termcap to be lost, from 980725 changes (reported by Andreas
Jaeger).
980815
+ modify lib_setup.c to eliminate unneeded include of <sys/ioctl.h>
when termios is not used (patch by Todd C Miller).
+ add function _nc_doalloc, to ensure that failed realloc calls do not
leak memory (reported by Todd C Miller).
+ improved ncsa-telnet terminfo entry.
980809
+ correct missing braces around a trace statement in read_entry.c,
from 980808 (reported by Kim DeVaughn <kimdv@best.com> and Liviu
Daia).
980808
+ fix missing include <errno.h> in ditto.c (reported by Bernhard
Rosenkraenzer <bero@k5.sucks.eu.org>)
+ add NCSA telnet terminfo entries from Francesco Potorti
<F.Potorti@cnuce.cnr.it>, from Debian bug reports.
+ make handling of $LINES and $COLUMNS variables more compatible with
Solaris by allowing them to individually override the window size
as obtained via ioctl.
980801
+ modify lib_vidattr.c to allow for terminal types (e.g., xterm-color)
which may reset all attributes in the 'op' capability, so that colors
are set before turning on bold and other attributes, but still after
turning attributes off.
+ add 'ditto.c' to test directory to illustrate use of newterm for
initializing multiple screens.
+ modify _nc_write_entry() to recover from failed attempt to link alias
for a terminfo on a filesystem which does not preserve character case
(reported by Peter L Jordan <PJordan@chla.usc.edu>).
980725
+ updated versions of config.guess and config.sub based on automake 1.3
+ change name-comparisons in lib_termcap to compare no more than 2
characters (gleaned from Debian distribution of 1.9.9g-8.8, verified
with Solaris curses).
+ fix typo in curs_insstr.3x (patch by Todd C Miller)
+ use 'access()' to check if ncurses library should be permitted to
open or modify files with fopen/open/link/unlink/remove calls, in
case the calling application is running in setuid mode (request by
Cristian Gafton <gafton@redhat.com>, responding to Duncan Simpson
<dps@io.stargate.co.uk>).
+ arm100 terminfo entries from Dave Millen <dmill@globalnet.co.uk>).
+ qnxt2 and minitel terminfo entries from esr's version.
980718
+ use -R option with ldconfig on FreeBSD because otherwise it resets
the search path to /usr/lib (reported by Dan Nelson).
+ add -soname option when building shared libraries on OpenBSD 2.x
(request by QingLong).
+ add configure options --with-manpage-format and
--with-manpage-renames (request by QingLong).
+ correct conversion of CANCELLED_NUMERIC in write_object(), which was
omitting the high-order byte, producing a 254 in the compiled
terminfo.
+ modify return-values of tgetflag, tgetnum, tgetstr, tigetflag,
tigetnum and tigetstr to be compatible with Solaris (gleaned from
Debian distribution of 1.9.9g-8.8).
+ modify _nc_syserr_abort to abort only when compiled for debugging,
otherwise simply exit with an error.
980711
+ modify Ada95 'gen' program to use appropriate library suffix (e.g.,
"_g" for a debug build).
+ update Ada95 'make clean' rule to include generics .ali files
+ add a configure test to ensure that if GNAT is found, that it can
compile/link working Ada95 program.
+ flush output in beep and flash functions, fixing a problem with
getstr (patch by Alexander V Lukyanov)
+ fix egcs 1.0.2 warning for etip.h (patch by Chris Johns).
+ correct ifdef/brace nesting in lib_sprintf.c (patch by Bernhard
Rosenkraenzer <bero@Pool.Informatik.RWTH-Aachen.DE>).
+ correct typo in wattr_get macro from 980509 fixes (patch by Dan
Nelson).
980704
+ merge changes from current XFree86 xterm terminfo descriptions.
+ add configure option '--without-ada'.
+ add a smart-default for termcap 'ac' to terminfo 'acs_chars' which
corresponds to vt100.
+ change translation for termcap 'rs' to terminfo 'rs2', which is
the documented equivalent, rather than 'rs1'.
980627
+ slow 'worm' down a little, for very fast machines.
+ corrected firstchar/lastchar computation in lib_hline.c
+ simplify some expressions with CHANGED_CELL, CHANGED_RANGE and
CHANGED_TO_EOL macros.
+ modify init_pair so that if a color-pair is reinitialized, we will
repaint the areas of the screen whose color changes, like SVr4 curses
(reported by Christian Maurer <maurer@inf.fu-berlin.de>).
+ modify getsyx/setsyx macros to comply with SVr4 man-page which
says that leaveok() affects their behavior (report by Darryl Miles,
patch by Alexander V Lukyanov).
980620
+ review terminfo.5 against Solaris 2.6 curses version, corrected
several minor errors/omissions.
+ implement tparm %l format.
+ implement tparm printf-style width and precision for %s, %d, %x, %o
as per XSI.
+ implement tparm dynamic variables (reported by Xiaodan Tang).
980613
+ update man-page for for wattr_set, wattr_get (cf: 980509)
+ correct limits in hashtest, which would cause nonprinting characters
to be written to large screens.
+ correct configure script, when --without-cxx was specified: the
wrong variable was used for cf_cv_type_of_bool. Compilers up to gcc
2.8 tolerated the missing 'int'.
+ remove the hardcoded name "gcc" for the GNU Ada compiler. The
compiler's name might be something like "egcs" (patch by Juergen
Pfeifer).
+ correct curs_addch.3x, which implied that echochar could directly
display control characters (patch by Alexander V Lukyanov).
+ fix typos in ncurses-intro.html (patch by Sidik Isani
<isani@cfht.hawaii.edu>)
980606
+ add configure test for conflicting use of exception in math.h and
other headers.
+ minor optimization to 'hash()' function in hashmap.c, reduces its
time by 10%.
+ correct form of LD_SHARED_OPTS for HP-UX 10.x (patch by Tim Mooney).
+ fix missing quotes for 'print' in MKunctrl.awk script (reported by
Mihai Budiu <mihaib@gs41.sp.cs.cmu.edu>).
> patch by Alexander V Lukyanov:
+ correct problem on Solaris (with poll() function) where getch could
hang indefinitely even if timeout(x) was called. This turned out to
be because milliseconds was not updated before 'goto retry' in
_nc_timed_wait.
+ simplified the function _nc_timed_wait and fixed another bug, which
was the assumption of !GOOD_SELECT && HAVE_GETTIMEOFDAY in *timeleft
assignment.
+ removed the cycle on EINTR, as it seems to be useless.
980530
+ add makefile-rule for test/keynames
+ modify run_tic.sh and shlib to ensure that user's .profile does not
override the $PATH used to run tic (patch by Tim Mooney).
+ restore LD_SHARED_OPTS to $(LD_SHARED_FLAGS) when linking programs,
needed for HP-UX shared-library path (recommended by Tim Mooney).
+ remove special case of HP-UX -L options, use +b options to embed
$(libdir) in the shared libraries (recommended by Tim Mooney).
+ add checks for some possible buffer overflows and unchecked
malloc/realloc/calloc/strdup return values (patch by Todd C Miller
<Todd.Miller@courtesan.com>)
980523
+ correct maxx/maxy expression for num_columns/num_lines in derwin
(patch by Alexander V Lukyanov).
+ add /usr/share/lib/terminfo and /usr/lib/terminfo as compatibility
fallbacks to _nc_read_entry(), along with --with-terminfo-dirs
configure option (suggested by Mike Hopkirk).
+ modify config.guess to recognize Unixware 2.1 and 7 (patch by Mike
Hopkirk <hops@sco.com>).
+ suppress definition of CC_SHARED_OPTS in LDFLAGS_SHARED in c++
Makefile.in, since this conflicts when g++ is used with HP-UX
compiler (reported by Tim Mooney).
+ parenthesize 'strcpy' calls in c++ binding to workaround redefinition
in some C++ implementations (reported by several people running
egcs with glibc 2.0.93, analysis by Andreas Jaeger.
980516
+ modify write_entry.c so that it will not attempt to link aliases
with embedded '/', but give only a warning.
+ put -L$(libdir) first when linking programs, except for HP-UX.
+ modify comp_scan.c to handle SVr4 terminfo description for att477,
which contains a colon in the description field.
+ modify configure script to support SCO osr5.0.5 shared libraries,
from comp.unix.sco.programmer newsgroup item (Mike Hopkirk).
+ eliminate extra GoTo call in lib_doupdate.c (patch by Alexander V.
Lukyanov).
+ minor adjustments of const/NCURSES_CONST from IRIX compile.
+ add updates based on esr's 980509 version of terminfo.src.
980509
+ correct macros for wattr_set, wattr_get, separate wattrset macro from
these to preserve behavior that allows attributes to be combined with
color pair numbers.
+ add configure option --enable-no-padding, to allow environment
variable $NCURSES_NO_PADDING to eliminate non-mandatory padding,
thereby making terminal emulators (e.g., for vt100) a little more
efficient (request by Daniel Eisenbud <eisenbud@cs.swarthmore.edu>).
+ modify configure script to embed ABI in shared libraries for HP-UX
10.x (detailed request by Tim Mooney).
+ add test/example of the 'filter()' function.
+ add nxterm and xterm-color terminfo description (request by Cristian
Gafton <gafton@redhat.com>).
+ modify rxvt terminfo description to clear alternate screen before
switching back to normal screen, for compatibility with applications
which use xterm (reported by Manoj Kasichainula <manojk@io.com>).
+ modify linux terminfo description to reset color palette (reported
by Telford Tendys <telford@eng.uts.edu.au>).
+ correction to doupdate, for case where terminal does not support
insert/delete character. The logic did not check that there was a
difference in alignment of changes to old/new screens before
repainting the whole non-blank portion of the line. Modified to fall
through into logic that reduces by the portion which does not differ
(reported by Daniel Eisenbud <eisenbud@cs.swarthmore.edu>).
+ minor performance improvement to wnoutrefresh by moving some
comparisons out of inner loop.
980425
+ modify configure script to substitute NCURSES_CONST in curses.h
+ updated terminfo entries for xterm-xf86-v40, xterm-16color,
xterm-8bit to correspond to XFree86 3.9Ag.
+ remove restriction that forces ncurses to use setaf/setab if the
number of colors is greater than 8. (see 970524 for xterm-16color).
+ change order of -L options (so that $(libdir) is searched first) when
linking tic and other programs, to workaround HP's linker.
Otherwise, the -L../lib is embedded when linking against shared
libraries and the installed program does not run (reported by Ralf
Hildebrandt).
+ modify configuration of shared libraries on Digital Unix so that
versioning is embedded in the library, rather than implied by
links (patch by Tim Mooney).
980418
+ modify etip.h to avoid conflict with math.h on HP-UX 9.03 with gcc
2.8.1 which redefines 'exception' (reported by Ralf Hildebrandt
<R.Hildebrandt@tu-bs.de>).
+ correct configure tests in CF_SHARED_OPTS which used $CC value to
check for gcc, rather than autoconf's $GCC value. This did not
work properly if the full pathname of the compiler were given
(reported by Michael Yount <yount@csf.Colorado.edu>).
+ revise check for compiler options to force ANSI mode since repeating
an option such as -Aa causes HP's compiler to fail on its own headers
(reported by Clint Olsen <olsenc@ichips.intel.com>).
980411
+ ifdef'd has_key() and mcprint() as extended functions.
+ modified several prototypes to correspond with 1997 version of
X/Open Curses (affects ABI since developers have used attr_get).
+ remove spurious trailing blanks in glibc addon-scripts (patch by
H.J.Lu).
+ insert a few braces at locations where gcc-2.8.x asks to use them to
avoid ambiguous else's, use -fpic rather than -fPIC for Linux (patch
by Juergen Pfeifer).
980404
+ split SHLIB_LIST into SHLIB_DIRS/SHLIB_LIST to keep -L options
before -l to accommodate Solaris' linker (reported by Larry Virden).
980328
+ modify lib_color.c to eliminate dependency on orig_colors and
orig_pair, since SVr4 curses does not require these either, but
uses them when they are available.
+ add detailed usage-message to infocmp.
+ correct a typo in att6386 entry (a "%?" which was "?").
+ add -f option to infocmp and tic, which formats the terminfo
if/then/else/endif so that they are readable (with newlines and
tabs).
+ fixes for glibc addon scripts (patch by H.J.Lu).
980321
+ revise configure macro CF_SPEED_TYPE so that termcap.h has speed_t
declared (from Adam J Richter <adam@yggdrasil.com>)
+ remove spurious curs_set() call from leaveok() (J T Conklin).
+ corrected handling leaveok() in doupdate() (patch by Alexander V.
Lukyanov).
+ improved version of wredrawln (patch by Alexander V. Lukyanov).
+ correct c++/Makefile.in so install target do not have embedded ../lib
to confuse it (patch by Thomas Graf <graf@essi.fr>).
+ add warning to preinstall rule which checks if the installer would
overwrite a curses.h or termcap.h that is not derived from ncurses.
(The recommended configuration for developers who need both is to
use --disable-overwrite).
+ modify preinstall rule in top-level Makefile to avoid implicit
use of 'sh', to accommodate Ultrix 4.4 (reported by Joao Palhoto
Matos <jmatos@math.ist.utl.pt>, patch by Thomas Esser
<te@informatik.uni-hannover.de>)
+ refine ifdef's for TRACE so that libncurses has fewer dependencies
on libtinfo when TRACE is disabled.
+ modify configure script so that if the --with-termlib option is used
to generate a separate terminfo library, we chain it to the ncurses
library with a "-l" option (reported by Darryl Miles and Ian T.
Zimmerman).
980314
+ correct limits and window in wredrawln function (reported/analysis by
Alexander V. Lukyanov).
+ correct sed expression in configure script for --with-fallback
option (patch by Jesse Thilo).
+ correct some places in configure script where $enableval was used
rather than $withval (patch by Darryl Miles <dlm@g7led.demon.co.uk>).
+ modify some man-pages so no '.' or '..' falls between TH and SH
macros, to accommodate man_db program (reported by Ian T. Zimmerman
<itz@rahul.net>).
+ terminfo.src 10.2.1 downloaded from ESR's webpage (ESR).
> several changes by Juergen Pfeifer:
+ add copyright notices (and rcs id's) on remaining man-pages.
+ corrected prototypes for slk_* functions, using chtype rather than
attr_t.
+ implemented the wcolor_set() and slk_color() functions
+ the slk_attr_{set,off,on} functions need an additional void*
parameter according to XSI.
+ fix the C++ and Ada95 binding as well as the man pages to
reflect above enhancements.
980307
+ use 'stat()' rather than 'access()' in toe.c to check for the
existence of $HOME/.terminfo, since it may be a file.
+ suppress configure CF_CXX_LIBRARY check if we are not using g++
2.7.x, since this is not needed with g++ 2.8 or egcs (patch by
Juergen Pfeifer).
+ turn on hashmap scrolling code by default, intend to remedy defects
by 4.3 release.
+ minor corrections to terminfo.src changelog.
980302 4.2 release for upload to prep.ai.mit.edu
+ correct Florian's email address in ncurses-intro.html
+ terminfo.src 10.2.0 (ESR).
980228 pre-release
+ add linux-koi8r replace linux-koi8, which is not KOI8 (patch by
QingLong <qinglong@Bolizm.ihep.su>).
+ minor documentation fixes (patch by Juergen Pfeifer).
+ add setlocale() call to ncurses.c (reported by Claes G. Lindblad
<claesg@algonet.se>).
+ correct sign-extension in lib_insstr.c (reported by Sotiris
Vassilopoulos <svas@leon.nrcps.ariadne-t.gr>)
980221 pre-release
+ regenerated some documentation overlooked in 980214 patch
(ncurses-intro.doc, curs_outopts.3x.html)
+ minor ifdef change to C++ binding to work with gcc 2.8.0 (patch by
Juergen Pfeifer).
+ change maintainer's mailing address to florian@gnu.org, change
tentative mailing list address to bug-ncurses-request@gnu.org (patch
by Florian La Roche).
+ add definition of $(REL_VERSION) to c++/Makefile.in (reported by Gran
Hasse <gh@raditex.se>).
+ restore version numbers to Ada95 binding, accidentally deleted by
copyright patch (patch by Juergen Pfeifer).
980214 pre-release
+ remove ncurses.lsm from MANIFEST so that it won't be used in FSF
distributions, though it is retained in development.
+ correct scaling of milliseconds to nanoseconds in lib_napms.c (patch
by Jeremy Buhler).
+ update mailing-list information (bug-ncurses@gnu.org).
+ update announcement for upcoming 4.2 release.
+ modify -lm test to check for 'sin()' rather than 'floor()'
+ remove spurious commas from terminfo.src descriptions.
+ change copyright notices to Free Software Foundation
980207
+ minor fixes for autoconf macros CF_ERRNO, CF_HELP_MESSAGE and
CF_SIZECHANGE
+ modify Makefile.glibc so that $(objpfx) is defined (H.J.Lu).
+ ifdef-out true-return from _nc_mouse_inline() which depends on
merge of QNX patch (pending 4.2 release).
> patch to split off seldom-used modules in ncurses (J T Conklin):
This reduces size by up to 2.6kb.
+ move functionality of _nc_usleep into napms, add configuration case
for nanosleep().
+ moved wchgat() from lib_addch.c to lib_chgat.c
+ moved clearok(), immedok(), leaveok(), and scrollok() from
lib_options.c to lib_clearok.c, lib_immedok.c, lib_leaveok.c and
lib_scrollok.c.
+ moved napms() from lib_kernel.c to lib_napms.c
+ moved echo() and noecho() from lib_raw.c to lib_echo.c
+ moved nl() and nonl() from lib_raw.c to lib_nl.c
980131
+ corrected conversion in tclock.c (cf: 971018).
+ updates to Makefile.glibc and associated Linux configure script
(patch by H.J.Lu).
+ workaround a quoting problem on SunOS with tar-copy.sh
+ correct init_pair() calls in worm.c to work when use_default_colors()
is not available.
+ include <sys/types.h> in CF_SYS_TIME_SELECT to work with FreeBSD
2.1.5
+ add ncv capability to FreeBSD console (cons25w), making reverse
work with color.
+ correct sense of configure-test for sys/time.h inclusion with
sys/select.h
+ fixes for Ada95/ada_include/Makefile.in to work with --srcdir option.
+ remove unused/obsolete test-program rules from progs/Makefile.in
(the rules in ncurses/Makefile.in work).
+ remove shared-library loader flags from test/Makefile.in, etc.
+ simplify test/configure.in using new version of autoconf to create
test/ncurses_cfg.h
+ suppress suffix rules in test/Makefile.in, provide explicit
dependency to work with --srcdir option and less capable 'make'
programs.
> adapted from patch for QNX by Xiaodan Tang:
+ initialize %P and %g variables set/used in tparm, and also ensure
that empty strings don't return a null result from tparam_internal
+ add QNX-specific prototype for vsscanf()
+ move initialization of SP->_keytry from init_keytry() to newterm() to
avoid resetting it via a keyok() call by mouse_activate().
+ reorganized some functions in lib_mouse() to use case-statements.
+ remove sgr string from qnx terminfo entry since it is reported to
turn off attributes inconsistently.
980124
+ add f/F/b/B commands to ncurses 'b' test to toggle colors, providing
test for no_color_video.
+ adjusted emx.src to use no_color_video, now works with ncurses 'b'
and 'k' tests.
+ implement no_color_video attribute, and as a special case, reverse
colors when the reverse attribute cannot be combined with color.
+ check for empty string in $TERM variable (reported by Brett Michaels
<brett@xylan.com>).
> from reports by Fred Fish:
+ add configure-test for isascii
+ add configure-test for -lm library.
+ modify CF_BOOL_SIZE to check if C++ bool types are unsigned.
> patches by J.J.G.Ripoll
+ add configure/makefile variables to support .exe extension on
OS/2 EMX (requires additional autoconf patches).
+ explicitly initialize variables in lib_data.c to appease OS/2 linker
> patches by Fred Fish <fnf@ninemoons.com>
+ misc/Makefile.in (install.data): Avoid trying to install the CVS
directory.
+ aclocal.m4 (install.includes): Remove files in the include directory
where we are going to install new ones, not the original source
files.
+ misc/terminfo.src: Add entry for "beterm", derived from termcap
distributed with BeOS PR2 using captoinfo.
+ aclocal.m4: Wrap $cf_cv_type_of_bool with quotes (contains space)
+ aclocal.m4: Assume bool types are unsigned.
+ progs/infocmp.c: workaround mwcc 32k function data limit
980117
+ correct initialization of color-pair (cf: 970524) in xmas.c, which
was using only one color-pair for all colors (reported by
J.J.G.Ripoll).
+ add multithread options for objects build on EMX, for compatibility
with XFree86.
+ split up an expression in MKlib_gen.sh to work around a problem on
OS/2 EMX, with 'ash' (patch by J.J.G.Ripoll).
+ change terminfo entries xterm (xterm-xf86-v40), xterm-8bit rs1 to use
hard reset.
+ rename terminfo entry xterm-xf86-v39t to xterm-xf86-v40
+ remove bold/underline from sun console entries since they're not
implemented.
+ correct _tracef calls in _tracedump(), which did not separate format
from parameters.
+ correct getopt string for tic "-o" option, and add it to man-page
synopsis (reported by Darren Hiebert <darren@hmi.com>).
+ correct typo in panel/Makefile.in, reversed if-statement in scrolling
optimization (Alexander V. Lukyanov).
+ test for 'remove()', use 'unlink() if not found (patch by Philippe De
Muyter <phdm@macqel.be>).
> patches by Juergen Pfeifer:
+ Improve a feature of the forms driver. For invisible fields
(O_VISIBLE off) only the contents but not the attributes are cleared.
We now clear both. (Reported by Javier Kohan
<jkohan@adan.fceia.unr.edu.ar>)
+ The man page form_field_opts.3x makes now clear, that invisible
fields are also always inactive.
+ adjust ifdef's to compile the C++ binding with the just released
gcc-2.8.0 c++ and the corresponding new C++ libraries.
980110
+ correct "?" command in ncurses.c; it was performing non-screen writes
while the program was in screen mode. (It "worked" in 1.9.9e because
that version sets OPOST and OCRNL incorrectly).
+ return error from functions in lib_kernel, lib_raw and lib_ti if
cur_term is null, or if underlying I/O fails.
+ amend change to tputs() so that it does not return an error if
cur_term is null, since some applications depend on being able to use
tputs without initializing the terminal (reported by Christian J.
Robinson <infynity@cyberhighway.net>).
980103
+ add a copy of emx.src from J.J.G.Ripoll's OS/2 EMX version of ncurses
1.9.9e, together with fixes/additions for the "ansi" terminal type.
+ add tic check for save/restore cursor if change_scroll_region is
defined (reference: O'Reilly book).
+ modify read_termcap.c to handle EMX-style pathnames (reported by
J.J.G.Ripoll).
+ modify lib_raw.c to use EMX's setmode (patch from J.J.G.Ripoll).
Ripoll says EMX's curses does this.
+ modify _nc_tic_expand() to generate \0 rather than \200.
+ move/revise 'expand()' from dump_entry.c to ncurses library as
_nc_tic_expand(), for use by tack.
+ decode \a as \007 for terminfo, as per XSI.
+ correct translation of terminfo "^@", to \200, like \0.
+ modify next_char() to treat <cr><lf> the same as <newline>, for
cross-platform compatibility.
+ use new version of autoconf (971230) to work around limited
environment on CLIX, due to the way autoconf builds --help message.
> patch by Juergen Pfeifer:
+ check that the Ada95 binding runs against the correct version of
ncurses.
+ insert constants about the library version into the main spec-file of
the Ada95 binding.
971227
+ modify open/fopen calls to use binary mode, needed for EMX.
+ modify configure script to work with autoconf 2.10 mods for OS/2
EMX (from J.J.G.Ripoll).
+ generated ncurses_cfg.h with patch (971222) to autoconf 2.12 which
bypasses limited sed buffer length.
> several changes from Juan Jose Garcia Ripoll <worm@arrakis.es>
(J.J.G.Ripoll) to support OS/2 EMX:
+ add a _scrolling flag to SP, to set when we encounter a terminal
that simply cannot scroll.
+ corrected logic in _nc_add_to_try(), by ensuring that strings with
embedded \200 characters are matched.
+ don't assume the host has 'link()' function, for linking terminfo
entries.
971220
+ if there's no ioctl's to support sigwinch handler, disable it.
+ add configure option --disable-ext-funcs to remove the extended
functions from the build.
+ add configure option --with-termlib to generate the terminfo
functions as a separate library.
+ add 'sources' rule to facilitate cross-compiling.
+ review/fix order of mostlyclean/clean/distclean rules.
+ modify install-rule for headers to first remove old header, in
case there was a symbolic link that confuses the install script.
+ corrected substitution for NCURSES_CONST in term.h (cf: 971108)
+ add null pointer checks in wnoutrefresh(), overlap() (patch by
Xiaodan Tang <xtang@qnx.com>)
+ correct tputs(), which could dereference a null cur_term if invoked
before terminal is initialized (patch by Christopher Seawood
<cls@seawood.org>)
> patch by Juergen Pfeifer:
+ makes better use of "pragma Inline" in the Ada95 binding
+ resynchronizes the generated html manpages
971213
+ additional fixes for man-pages section-references
+ add (for debugging) a check for ich/ich1 conflict with smir/rmir
to tic, etc.
+ remove hpa/vpa from rxvt terminal description because they are not
implemented correctly, added sgr0.
+ change ncurses 's' to use raw mode, so ^Q works (reported by Rudolf
Leitgeb <leitgeb@leland.stanford.edu>)
971206
+ modify protection when installing libraries to (normally) not
executable. HP-UX shared libraries are an exception.
+ add configure check for 'tack'.
+ implement script for renaming section-references in man-page install,
for Debian configuration.
+ add validity-check for SP in trace code in baudrate() (reported by
Daniel Weaver).
> patch by Alexander V. Lukyanov (fixes to match sol25 curses)
+ modify 'overlay()' so that copy applies target window background to
characters.
+ correct 'mvwin()' so that it does not clear the previous locations.
+ correct lib_acs.c so that 8-bit character is not sign expanded in
case of wide characters in chtype.
+ correct control-char test in lib_addch.c for use with wide chars
+ use attribute in the chtype when adding a control character in
lib_addch.c control char was added with current attribute
971129
+ save/restore errno in _tracef() function
+ change treatment of initialize_color to use a range of 0..1000
(recommended by Daniel Weaver).
+ set umask in mkinstalldirs, fixing problems reported by users who
have set root's umask to 077.
+ correct bug in tic that caused capabilities to be reprinted at the
end of output when they had embedded comments.
+ rewrote wredrawln to correspond to XSI, and split-out since it is
not often used (from report by Alexander V. Lukyanov, 970825)
+ rewrote Dan Nelson's change to make it portable, as well as to
correct logic for handling backslashes.
+ add code to _nc_tgetent() to make it work more like a real tgetent().
It removes all empty fields, and removes all but the first in a group
of duplicate caps. The code was pulled from the BSD libtermcap code
in termcap.c (patch by Dan Nelson <dnelson@emsphone.com>
+ don't include --enable-widec in the --with-develop configure option,
since it is not binary-compatible with 4.1 (noted by Alexander V.
Lukyanov)
> patch by Juergen Pfeifer:
+ further improvements of the usage of elaboration pragmas in the Ada95
binding
+ enhanced Ada95 sample to use the user_data mechanism for panels.
+ a fix for the configuration script to make gnat-3.10 the required
version.
+ resync of the html version of the manpages
971122
> fixes/updates for terminfo.src:
+ add vt220-js, pilot, rbcomm, datapoint entries from esr's 27-jun-97
version.
+ add hds200 description (Walter Skorski)
+ add EMX 0.9b descriptions
+ correct rmso/smso capabilities in wy30-mc and wy50-mc (Daniel Weaver)
+ rename xhpterm back to hpterm.
> patch by Juergen Pfeifer:
+ Improves the usage of elaboration pragmas for the Ada95 binding.
+ Adds a translation of the test/rain.c into Ada95 to the samples.
This has been contributed to the project by Laurent Pautet
(pautet@gnat.com)
971115
+ increase MAX_NAME_SIZE to 512 to handle extremely long alias list
in HP-UX terminfo.
+ correction & simplification of delay computation in tputs, based on
comments from Daniel Weaver.
+ replace test for SCO with more precise header tests.
+ add configure test for unsigned literals, use in NCURSES_BITS macro.
+ comment-out the -PIC, etc., flags from c++, progs and test makefiles
since they probably are not needed, and are less efficient (noted by
Juergen Fluk)
+ add -L$(libdir) to loader options, after -L../lib so that loaders
that record this information will tend to do the right thing if
the programs are moved around after installing them (suggested by
Juergen Fluk).
+ add -R option to loader options for programs for Solaris if the
--enable-rpath option is specified for the libraries.
971112
+ correct installed filename for shared libraries on *BSD (reported by
Juergen Fluk).
971108
+ cleanup logic for deciding when tputs() should call delay_output(),
based on comments from Daniel Weaver.
+ modified tputs() to avoid use of float.
+ correct use of trailpad in tputs(), which used the wrong variable
in call to delay_output().
+ correct inverted expression for null-count in delay_output()
(analysis by Daniel Weaver).
+ apply --enable-rpath option to Solaris (requested by Larry Virden).
+ correct substitution of EXTRA_CFLAGS for gcc 2.6.3
+ correct check for error-return by _nc_tgetent(), which returns 0
for success.
+ add configure test for BSD 4.4 cgetent() function, modify
read_termcap.c to use the host's version of that if found, using the
terminal database on FreeBSD (reported by Peter Wemm).
+ add u8, u9 strings to sun-il description for Daniel Weaver.
+ use NCURSES_CONST in panel's user-pointer.
+ modify edit_cfg.sh and MKterm.h.awk.in to substitute NCURSES_CONST
so that will work on NeXT.
+ use _nc_set_screen() rather than assignments to SP to fix port to
NeXT (reported by Francisco A. Tomei Torres).
971101
+ force mandatory padding in bell and flash_screen, as specified in
XSI.
+ don't allow padding_baud_rate to override mandatory delays (reported
by Daniel Weaver).
+ modify delay_output() to use _nc_timed_wait() if no baudrate has been
defined, or if the cur_term pointer is not initialized. XSI treats
this as unspecified. (requested by Daniel Weaver).
+ change getcap-cache ifdef's to eliminate unnecessary chdir/mkdir
when that feature is not configured.
+ remove _nc_err_abort() calls when write_entry.c finds a directory but
cannot write to it, e.g., when translating part/all of /etc/termcap
(reported by Andreas Jaeger <aj@arthur.rhein-neckar.de>).
(this dates back to 951102 in 1.9.7a).
+ minor ifdef fixes to compile with atac and glibc 2.0.5c
+ add check for -lgen when configuring regexpr.h
+ modify Solaris shared-library option "-d y" to "-dy" to workaround
incompatibility of gcc 2.7.2 vs vendor's tools.
971026
+ correct ifdef's for struct winsize vs struct ttysize in lib_setup.c
to compile on SCO.
+ remove dangling backslash in panel/Makefile.in
+ modify MKkeyname.awk to work with SCO's nawk, which dumps core in the
length() function.
+ correct length of allocation in _nc_add_to_try(), to allow for
trailing null.
+ correct logic in _nc_remove_key(), which was discarding too many
nodes (patch by Alexander V. Lukyanov)
971025
+ add definition for $(REL_VERSION) to test/Makefile.in, so *BSD
shared libraries link properly (see 970524).
+ modify Linux shared-library generation to include library
dependencies (e.g., -lncurses and -lgpm) in the forms, menu and
panel libraries (suggested by Juergen Pfeifer).
+ modify configure script to use config.guess and config.sub rather
than uname, which is unreliable on some systems.
+ updated Makefile.glibc, test-built with glibc 2.0.5c
+ modify keyname() to return values consistent with SVr4 curses (patch
by Juergen Fluk).
> changes requested by Daniel Weaver:
+ modify delay_output() so that it uses the same output function as
tputs() if called from that function.
+ move _baudrate from SCREEN to TERMINAL so that low-level use of
tputs works when SP is not set.
> patch by Juergen Pfeifer:
+ factor lib_menu and lib_form into smaller modules
+ clean up the interface between panel and SCREEN
+ minor changes to the Ada95 mouse support implementation
+ minor bugfix in C++ binding to ripoff windows
+ fix a few Ada95 html documentation pages
971018
+ split-out lib_ungetch.c, make runtime link to resizeterm() to
decouple those modules from lib_restart.c
+ add xterm-xf86-v39t description to terminfo.src
+ reset SP->_endwin in lib_tstp.c cleanup() function after calling
endwin() to avoid unnecessary repainting if the application has
established an atexit function, etc. Encountered this problem in
the c++ demo, whose destructors repaint the screen.
+ combine _nc_get_screensize() and resizeterm() calls as new function
_nc_update_screensize().
+ minor fixes to allow compile with g++ (suggested by Nelson H. F.
Beebe).
+ implement install-rules for Ada95 makefiles.
+ use screen_lines or MAXLINES as needed where LINES was coded,
as well as screen_columns for COLS, in the ncurses library.
> patch by Alexander V. Lukyanov:
+ modify logic for ripped-off lines to handle several SCREENs.
> patch by Juergen Pfeifer:
+ factors lib_slk.c into some smaller modules
+ factors panel.c into some smaller modules
+ puts the static information about the current panel stack into the
SCREEN structure to allow different panel stacks on different
screens.
+ preliminary fix for an error adjusting LINES to account for
ripped-off lines.
971011
+ move _nc_max_click_interval and other mouse interface items to SCREEN
struct so that they are associated with a single terminal, and also
save memory when the application does not need a mouse (roughly 3k vs
0.5k on Linux).
+ modify mouseinterval() so that a negative parameter queries the
click-interval without modifying it.
+ modify ncurses 'i' test to work with ncurses' apparent extension from
SVr4, i.e., allows nocbreak+noecho (analysis by Alexander V.
Lukyanov).
+ add configure options --with-ada-includes and --with-ada-objects,
to drive Ada95 binding install (not yet implemented).
+ install C++ binding as -lncurses++ and associated headers with the
other ncurses headers.
+ fix header uninstall if configure --srcdir is used.
> minor interface changes to support 'tack' program -TD
(request by Daniel Weaver <danw@znyx.com>).
+ export functions _nc_trans_string() and _nc_msec_cost().
+ add variable _nc_nulls_sent, to record the number of padding
characters output in delay_output().
+ move tests for generic_type and hard_copy terminals in setupterm()
to the end of that function so that the library will still be
initialized, though not generally useful for curses programs.
> patches by Alexander V. Lukyanov:
+ modify ClrBottom() to avoid using clr_eos if there is only one line
to erase.
+ typo in configure --help.
> patch by J T Conklin (with minor resync against Juergen's changes)
+ split-out lib_flash.c from lib_beep.c
+ split-out lib_hline.c and lib_vline.c from lib_box.c
+ split-out lib_wattron.c, lib_wattroff.c from lib_addch.c
971005
> patch by Juergen Pfeifer:
+ correct source/target of c++/edit_cfg.sh
971004
+ add color, mouse support to kterm terminfo entry.
+ modify lib_mouse.c to recognize rxvt, kterm, color_xterm also as
providing "xterm"-style mouse.
+ updated rxvt's terminfo description to correspond to 2.21b, with
fixes for the acsc (the box1 capability is incorrect, ech1 does not
work).
+ fix logic in parse_entry.c that discarded acsc when 'synthesizing'
an entry from equivalents in XENIX or AIX. This lets ncurses handle
the distribution copy of rxvt's terminfo.
+ modify acsc capability for linux and linux-koi8 terminfo descriptions
(from Pavel Roskin <pavel@absolute.spb.su>).
+ corrected definition in curses.h for ACS_LANTERN, which was 'I'
rather than 'i' (see 970802).
+ updated terminfo.src with reformatted acsc entries, and repaired the
trashed entries with spurious '\' characters that this exposed.
+ add logic to dump_entry.c to reformat acsc entries into canonical
form (sorted, unique mapping).
+ add configure script to generate c++/etip.h
+ add configure --with-develop option, to enable by default most of the
experimental options (requested by Alexander V. Lukyanov).
+ rename 'deinstall' to 'uninstall', following GNU convention
(suggested by Alexander V. Lukyanov).
> patches by Alexander V. Lukyanov:
+ modify tactics 2 and 5 in onscreen_mvcur(), to allow them on the last
line of the screen, since carriage return will not cause a newline.
+ remove clause from PutCharLR() that would try to use
eat_newline_glitch since that apparently does not work on some
terminals (e.g., M$ telnet).
+ correct a limit check in scroll_csr_backward()
> patches by Juergen Pfeifer:
+ adds dummy implementations of methods above() and below() to the
NCursesPanel class.
+ fixes missing returncode in NCursesWindow::ripoffline()
+ fixes missing returncode in TestApplication::run() in demo.cc
+ We should at least give a comment in etip.h why it is currently a
problem to install the C++ binding somewhere
+ makes the WINDOW* argument of wenclose() a const.
+ modifies several of the routines in lib_adabind.c to use a const
WINDOW* argument.
970927
+ add 'deinstall' rules.
+ use explicit assignments in configure --without-progs option to
work around autoconf bug which doesn't always set $withval.
+ check for ldconfig, don't try to run it if not found.
+ implement simple/unoptimized case in lib_doupdate.c to handle
display with magic cookie glitch, tested with ncurses.c program.
+ correct missing _tracef in getmouse(), to balance the returnCode
macro.
+ simplify show_attr() in ncurses.c using termattrs().
> patches by Juergen Pfeifer:
+ provides missing inlines for mvw[hv]line in cursesw.h of the C++
binding
+ fixes a typo in a comment of frm_driver.c
+ Enhances Ada95 Makefiles to fulfill the requirement of GNAT-3.10 that
generics should be compiled. Proper fixes to the configuration
scripts are also provided.
970920
+ several modifications to the configure script (requested by Ward
Horner):
+ add configure options --without-progs, to suppress the build of the
utility programs, e.g., for cross-compiling.
+ add $(HOSTCCFLAGS) and $(HOSTLDFLAGS) symbols to ncurses
Makefile.in, to simplify setup for cross compiling.
+ add logic in configure script to recognize "--target=vxworks", and
generate load/install actions for VxWorks objects.
+ move typedef for sigaction_t into SigAction.h to work around problem
generating lint library.
+ modify fty_regex.c to reflect renaming of ifdef's for regular
expressions.
+ simplify ifdef in lib_setup.c for TIOCGWINSZ since that symbol may
reside in <sys/ioctl.h>.
+ merge testcurs.c with version from PDCurses 2.3, clarifying some of
the more obscure tests, which rely upon color.
+ use macros getbegyx() and getmaxyx() in newdemo.c and testcurs.c
+ modify ncurses.c to use getbegyx() and getmaxyx() macros to cover up
implementation difference wrt SVr4 curses, allow 's' test to work.
+ add missing endwin() to testscanw.c program (reported by Fausto
Saporito <fausap@itb.it>).
+ fixes/updates for Makefile.glibc and related files under sysdeps
(patch by H.J.Lu).
> patches by Juergen Pfeifer:
+ add checks for null pointers, especially WINDOW's throughout the
ncurses library.
+ solve a problem with wrong calculation of panel overlapping (reported
by Ward Horner):
+ make sure that a panel's window isn't a pad.
+ do more error checking in module lib_touch.c
+ missing files for Ada95 binding from the last patch
+ synch. of generated html pages (RCS-Id's were wrong in html files)
+ support for Key_Resize in Ada binding
+ changed documentation style in ./c++/cursesm.h
> patches by Alexander V. Lukyanov:
+ undo attempt to do recursive inlining for PutChar(), noting that it
did not improve timing measurably, but inflated the size of
lib_doupdate.o
970913
+ modify rain.c to use color.
+ correct scroll_csr_backward() to match scroll_csr_forward().
+ minor adjustment to llib-lncurses, to work with Solaris 2.5.1
+ minor fixes to sysdeps/unix/sysv/linux/configure to reflect renaming
of configure cache variables in 970906.
+ correct logic involving changes to O_VISIBLE option in
Synchronize_Options function in frm_driver.c (Tony Hoffmann
<Tony.Hoffmann@hia.nrc.ca>)
+ add $(HOSTCC) symbol to ncurses Makefile.in, to simplify setup for
cross compiling (suggested by Chris Johns).
+ modify ifdef in lib_setup.c to only include <sys/ioctl.h> if we can
use it to support screen-size calculation (reported by Chris Johns).
+ #undef unctrl to avoid symbol conflict in port to RTEMS (reported by
Chris Johns <cjohns@plessey.com.au>)
> patches by Juergen Pfeifer:
+ simplified, made minor corrections to Ada95 binding to form
fieldtype.
+ The C++ binding has been enhanced:
+ Improve NCursesWindow class: added additional methods to cover
more ncurses functionality. Make refresh() and noutrefresh()
virtual members to allow different implementation in the
NCursesPanel class.
+ CAUTION: changed order of parameters in vline() and hline() of
NCursesWindow class.
+ Make refresh() in NCursesPanel non-static, it is now a
reimplementation of refresh() in the base class. Added
noutrefresh() to NCursesPanel.
+ Added NCursesForm and related classes to support libform
functionality.
+ Moved most of configuration related stuff from cursesw.h to etip.h
+ Added NCursesApplication class to support easy configuration of
menu and forms related attributes as well as ripped of title lines
and Soft-Label-Keys for an application.
+ Support of Auto-Cleanup for a menu's fieldlist.
+ Change of return type for current_item() and operator[] for menus.
+ Enhanced demo.
+ Fixed a bug in form/fld_def.c: take into account that copyarg and
freearg for a fieldtype may be NULL, makearg must not be NULL
+ Fixed a bug in form/fld_type.c: in set_fieldtype_arg() makearg must
not be NULL, copyarg and freearg may be NULL.
+ Fixed a bug in form/frm_def.c: Allow Disconnect_Fields() if it is
already disconnected.
+ Enhance form/frm_driver.c: Allow growth of dynamic fields also on
navigation requests.
+ Fixed a bug in form/fty_enum.c: wrong position of postincrement in
case-insensitiva comparison routine.
+ Enhanced form/lib_adabind.c with function _nc_get_field() to get a
forms field by index.
+ Enhanced menu/m_adabind.c with function _nc_get_item() to get a menus
item by index.
+ Fixed in curses.h.in: make chtype argument for pechochar() constant.
Mark wbkgdset() as implemented, remove wbkgdset macro, because it was
broken (didn't handle colors correctly).
+ Enhanced lib_mouse.c: added _nc_has_mouse() function
+ Added _nc_has_mouse() prototype to curses.priv.h
+ Modified lib_bkgd.c: hopefully correct implementation of wbkgdset();
streamlined implementation of wbkgd()
+ Modified lib_mvwin.c: Disable move of a pad. Implement (costly)
move of subwindows. Fixed update behavior of movements of regular
windows.
+ Fixed lib_pad.c: make chtype argument of pechochar() const.
+ Fixed lib_window.c: dupwin() is not(!) in every bit a really clone
of the original. Subwindows become regular windows by doing a
dupwin().
+ Improved manpage form_fieldtype.3x
> patches by Alexander V. Lukyanov:
+ simplify the PutChar() handling of exit_am_mode, because we already
know that auto_right_margin is true.
+ add a check in PutChar() for ability to insert to the case of
shifting character to LR corner.
+ in terminal initialization by _nc_screen_resume(), make sure that
terminal right margin mode is known.
+ move logic that invokes touchline(), or does the equivalent, into
_nc_scroll_window().
+ modify scrolling logic use of insert/delete line capability, assuming
that they affect the screen contents only within the current
scrolling region.
+ modify rain.c to demonstrate SIGWINCH handler.
+ remove logic from getch() that would return an ERR if the application
called getch() when the cursor was at the lower-right corner of the
physical screen, and the terminal does not have insert-character
ability.
+ change view.c so that it breaks out of getch() loop if a KEY_RESIZE
is read, and modify logic in getch() so this fix will yield the
desired behavior, i.e., the screen is repainted automatically when
the terminal window is resized.
970906
+ add configure option --enable-sigwinch
+ modify view.c to test KEY_RESIZE logic, with "-r" option.
+ modify testcurs.c to eliminate misleading display wrt cursor type
by testing if the terminal supports cnorm, civis, cvvis.
+ several fixes for m68k/NeXT 4.0, to bring cur_term, _nc_curr_line and
_nc_curr_col variables into linked programs: move these variables,
making new modules lib_cur_term and trace_buf (reported by Francisco
Alberto Tomei Torres <fatomei@sandburg.unm.edu>).
> patches by Alexander V. Lukyanov:
+ add pseudo-functionkey KEY_RESIZE which is returned by getch() when
the SIGWINCH handler has been called since the last call to
doupdate().
+ modify lib_twait.c to hide EINTR only if HIDE_EINTR is defined.
+ add SIGWINCH handler to ncurses library which is used if there is no
application SIGWINCH handler in effect when the screen is
initialized.
+ make linked list of all SCREEN structures.
+ move curses.h include before definition of SCREEN to use types in
that structure.
+ correction to ensure that wgetstr uses only a newline to force a
scroll (970831).
970831
+ add experimental configure option --enable-safe-sprintf; the normal
mode now allocates a buffer as large as the screen for the
lib_printw.c functions.
+ modify wgetch to refresh screen when reading ungetch'd characters,
since the application may require this - SVr4 does this.
+ refine treatment of newline in wgetstr to echo only when this would
force the screen to scroll.
970830
+ remove override in wgetstr() that forces keypad(), since SVr4 does
not do this.
+ correct y-reference for erasure in wgetstr() when a wrap forces a
scroll.
+ correct x-position in waddch() after a wrap forces a scroll.
+ echo newline in wgetstr(), making testscanw.c scroll properly when
scanw is done.
+ modify vwscanw() to avoid potential buffer overflow.
+ rewrote lib_printw.c to eliminate fixed-buffer limits.
> patches by Alexander V. Lukyanov:
+ correct an error in handling cooked mode in wgetch(); processing
was in the wrong order.
+ simplified logic in wgetch() that handles backspace, etc., by using
wechochar().
+ correct wechochar() so that it interprets the output character as
in waddch().
+ modify pechochar() to use prefresh() rather than doupdate(), since
the latter does not guarantee immediate refresh of the pad.
+ modify pechochar() so that if called with a non-pad WINDOW, will
invoke wechochar() instead.
+ modify fifo indices to allow fifo to be longer than 127 bytes.
970823
+ add xterm-8bit to terminfo.src
+ moved logic for SP->_fifohold inside check_pending() to make it
work properly when we add calls to that function.
+ ensure that bool functions return only TRUE or FALSE, and TRUE/FALSE
are assigned to bool values (patch by H.J.Lu).
> patches by Alexander V. Lukyanov:
+ several fixes to getch:
1. Separate cooked and raw keys in fifo
2. Fix the case of ungetch'ed KEY_MOUSE
3. wrap the code for hiding EINTR with ifdef HIDE_EINTR
4. correctly handle input errors (i.e., EINTR) without loss of raw
keys
5. recognize ESC KEY_LEFT and similar
6. correctly handle the case of reception of KEY_MOUSE from gpm
+ correct off-by-one indexing error in _nc_mouse_parse(), that caused
single mouse events (press/release) to be ignored in favor of
composed events (click). Improves on a fix from integrating gpm
support in 961229.
+ add another call to check_pending, before scrolling, for
line-breakout optimization
+ improve hashmap.c by
1. fixed loop condition in grow_hunks()
2. not marking lines with offset 0
3. fixed condition of 'too far' criteria, thus one-line hunks are
ignored and two lines interchanged won't pass.
+ rewrote/simplified _nc_scroll_optimize() by separating into two
passes, forward/backward, looking for chunks moving only in the given
direction.
+ move logic that emits sgr0 when initializing the screen to
_nc_screen_init(), now invoked from newterm.
+ move cursor-movement cleanup from endwin() into _nc_mvcur_wrap()
function and screen cleanup (i.e., color) into _nc_screen_wrap()
function.
+ add new functions _nc_screen_init(), _nc_screen_resume() and
_nc_screen_wrap().
+ rename _nc_mvcur_scrolln() to _nc_scrolln().
+ add a copy of acs_map[] to the SCREEN structure, where it can be
stored/retrieved via set_term().
+ move variables _nc_idcok, _nc_idlok, _nc_windows into the SCREEN
structure.
970816
+ implement experimental _nc_perform_scroll().
+ modify newterm (actually _nc_setupscreen()) to emit an sgr0 when
initializing the screen, as does SVr4 (reported by Alexander V.
Lukyanov).
+ added test_progs rule to ncurses/Makefile.
+ modify test/configure.in to check if initscr is already in $LIBS
before looking for (n)curses library.
+ correct version-number in configure script for OSF1 shared-library
options (patch by Tim Mooney).
+ add -DNDEBUG to CPPFLAGS for --enable-assertions (as Juergen
originally patched) since the c++ demo files do not necessarily
include ncurses_cfg.h
+ supply default value for --enable-assertions option in configure
script (reported by Kriang Lerdsuwanakij <lerdsuwa@scf-fs.usc.edu>).
> patches by Alexander V. Lukyanov:
+ correct/simplify logic of werase(), wclrtoeol() and wclrbot(). See
example firstlast.c
+ optimize waddch_literal() and waddch_nosync() by factoring out
common subexpressions.
+ correct sense of NDEBUG ifdef for CHECK_POSITION macro.
+ corrections to render_char(), to make handling of colored blanks
match SVr4 curses, as well as to correct a bug that xor'd space
against the background character.
+ replaced hash function with a faster one (timed it)
+ rewrote the hashmap algorithm to be one-pass, this avoids multiple
cost_effective() calls on the same lines.
+ modified cost_effective() so it is now slightly more precise.
> patches for glibc integration (H.J.Lu):
+ add modules define_key, keyok, name_match, tries
+ add makefile rules for some of the unit tests in ncurses (mvcur,
captoinfo, hardscroll, hashmap).
+ update Linux configure-script for wide-character definitions.
970809
+ modify _tracebits() to show the character size (e.g., CS8).
+ modify tparm() to emit '\200' where the generated string would have a
null (reported by From: Ian Dall <Ian.Dall@dsto.defence.gov.au> for
terminal type ncr7900).
+ modify install process so that ldconfig is not invoked if the
package is built with an install-prefix.
+ correct test program for chtype size (reported by Tim Mooney).
+ add configure option --disable-scroll-hints, using this to ifdef the
logic that computes indices for _nc_scroll_optimize().
+ add module ncurses/softscroll.c, to perform single-stage computation
of scroll indices used in _nc_scroll_optimize(). This is faster than
the existing scrolling algorithm, but tends to make too-small hunks.
+ eliminate fixed buffer size in _nc_linedump().
+ minor fixes to lib_doupdate.c to add tradeoff between clr_eol (el)
and clr_bol (el1), refine logic in ClrUpdate() and ClrBottom() (patch
by Alexander V. Lukyanov).
+ add test/testaddch.c, from a pending patch by Alexander V. Lukyanov.
+ correct processing of "configure --enable-assertions" option (patch
by Juergen Pfeifer).
970802
+ add '-s' (single-step) option too test/hashtest.c, correct an error
in loop limit for '-f' (footer option), toggle scrollok() when
writing footer to avoid wrap at lower-right corner.
+ correct behavior of clrtoeol() immediately after wrapping cursor,
which was not clearing the line at the cursor position (reported by
Liviu Daia <daia@stoilow.imar.ro>).
+ corrected mapping for ACS_LANTERN, which was 'I' rather than 'i'
(reported by Klaus Weide <kweide@tezcat.com>).
+ many corrections to make progs/capconvert work, as well as make it
reasonably portable and integrated with ncurses 4.1 (reported by Dave
Furstenau <df@ravine.binary.net>).
970726
+ add flag SP->_fifohold, corresponding logic to modify the behavior of
the line breakout logic so that if the application does not read
input, refreshes will not be stopped, but only slowed.
+ generate slk_attr_off(), slk_attr_on(), slk_attr_set(), vid_attr(),
ifdef'd for wide-character support, since ncurses' WA_xxx attribute
masks are identical with the A_xxx masks.
+ modify MKlib_gen.sh to generate ifdef'd functions to support optional
configuration of wide-characters.
+ modify tset to behave more like SVr4's tset, which does not modify
the settings of intr, quit or erase unless they are given as command
options (reported by Nelson H. F. Beebe <beebe@math.utah.edu>).
+ modify tset to look in /etc/ttys or /etc/ttytype if the configuration
does not have getttynam().
+ extend baudrate table in tset.c to match baudrate() function.
+ add table entries for B230400 and B460800 to baudrate() function.
+ improve breakout logic by allowing it before the first line updated,
which is what SVr4 curses does (patch by Alexander V. Lukyanov).
+ correct initialization of vcost in relative_move(), for cursor-down
case (patch by Alexander V. Lukyanov).
> nits gleaned from Debian distribution of 1.9.9g-3:
+ install symbolic link for intotocap.
+ reference libc directly when making shared libraries.
+ correct renaming of curs_scr_dmp.3x in man_db.renames.
+ guard tgetflag() and other termcap functions against null cur_term
pointer.
970719
+ corrected initial state of software echo (error in 970405, reported
by Alexander V. Lukyanov).
+ reviewed/added messages to configure script, so that all non-test
options should be accompanied by a message.
+ add configure check for long filenames, using this to determine if
it is safe to allow long aliases for terminal descriptions as does
SVr4.
+ add configure options for widec (wide character), hashmap (both
experimental).
> patch by Alexander V. Lukyanov:
+ hashmap.c - improved by heuristic, so that scroll test works much
better when csr is not available.
+ hardscroll.c - patched so that it continues to scroll other chunks
after failure to scroll one.
+ lib_doupdate.c - _nc_mvcur_scrolln extended to handle more cases; csr
is avoided as it is relative costly. Fixed wrong coordinates in one
case and wrong string in TRACE.
> patch by Juergen Pfeifer:
+ modify C++ binding to compile on AIX 4.x with the IBM C-SET++
compiler.
970712
+ remove alternate character set from kterm terminfo entry; it uses the
shift-out control for a purpose incompatible with curses, i.e., font
switching.
+ disentangle 'xterm' terminfo entry from some derived entries that
should be based on xterm-r6 instead.
+ add cbt to xterm-xf86-xv32 terminfo entry; I added the emulation for
XFree86 3.1.2F, but overlooked its use in terminfo then - T.Dickey.
+ correct logic in lib_mvcur.c that uses back_tab.
970706
+ correct change from 970628 to ClrUpdate() in lib_doupdate.c so that
contents of curscr are saved in newscr before clearing the screen.
This is needed to make repainting work with the present logic of
TransformLine().
+ use napms() rather than sleep() in tset.c to avoid interrupting I/O.
970705
+ add limit checks to _nc_read_file_entry() to guard against overflow
of buffer when reading incompatible terminfo format, e.g, from OSF/1.
+ correct some loop-variable errors in xmc support in lib_doupdate.c
+ modify ncurses 'b' test to add gaps, specified by user, to allow
investigation of interaction with xmc (magic cookie) code.
+ correct typo in 970524 mods to xmas.c, had omitted empty parameter
list from has_colors(), which gcc ignores, but SVr4 does not
(reported by Larry Virden).
+ correct rmso capability in wy50-mc description.
+ add configure option "--enable-hard-tabs", renamed TABS_OK ifdef to
USE_HARD_TABS.
> patch by Juergen Pfeifer:
+ Add bindings for keyok() and define_key() to the Ada95 packages.
+ Improve man pages menu_post.3x and menu_format.3x
+ Fix the HTML pages in the Ada95/html directory to reflect the above
changes.
970628
+ modify change from 970101 to ClrUpdate() in lib_doupdate.c so that
pending changes to both curscr and newscr are flushed properly.
This fixes a case where the first scrolling operation in nvi would
cause the screen to be cleared unnecessarily and repainted before
doing the indexing, i.e., by repeatedly pressing 'j' (reported by
Juergen Pfeifer).
+ correct error in trans_string() which added embedded newlines in a
terminfo description to the stored strings.
+ remove spurious newlines from sgr in wyse50 (and several other)
terminfo descriptions.
+ add configure option for experimental xmc (magic cookie) code,
"--enable-xmc-glitch". When disabled (the default), attributes that
would store a magic cookie are suppressed in vidputs(). The magic
cookie code is far from workable at this stage; the configuration
option is a stopgap.
+ move _nc_initscr() from lib_initscr.c to lib_newterm.c
+ correct path for invoking make_keys (a missing "./").
970621
+ correct sign-extension problem with "infocmp -e", which corrupted
acsc values computed for linux fallback data.
+ correct dependency on ncurses/names.c (a missing "./").
+ modify configure script to use '&&' even for cd'ing to existing
directories to work around broken shell interpreters.
+ correct a loop-limit in _nc_hash_map() (patch by Alexander V.
Lukyanov).
970615
+ restore logic in _nc_scroll_optimize() which marks as touched the
lines in curscr that are shifted.
+ add new utility 'make_keys' to compute keys.tries as a table rather
than a series of function calls.
+ correct include-dependency for tic.h used by name_match
+ removed buffer-allocation for name and description from m_item_new.c,
since this might result in incompatibilities with SVr4. Also fixed
the corresponding Ada95 binding module (patch by Juergen Pfeifer,
report by Avery Pennarun <apenwarr@foxnet.net>)
+ removed the mechanism to timestamp the generated Ada95 sources. This
resulted always in generating patches for the HTML doc, even when
nothing really changed (patch by Juergen Pfeifer).
+ improve man page mitem_new.3x (patch by Juergen Pfeifer).
970614
+ remove ech capability from rxvt description because it does not work.
+ add missing case logic for infocmp -I option (reported by Lorenzo M.
Catucci <lorenzo@argon.roma2.infn.it>)
+ correct old bug in pnoutrefresh() unmasked by fix in 970531; this
caused glitches in the ncurses 'p' test since the area outside the
pad was not compared when setting up indices for _nc_scroll_optimize.
+ rewrote tracebits() to workaround misdefinition of TOSTOP on Ultrix
4.4, as well as to eliminate fixed-size buffer (reported by Chris
Tanner <tannerc@aecl.ca>)
+ correct prototype for termattrs() as per XPG4 version 2.
+ add placeholder prototypes for color_set(), erasewchar(),
term_attrs(), wcolor_set() as per XPG4 version 2.
+ correct attribution for progs/progs.priv.h and lib_twait.c
+ improve line-breakout logic by checking based on changed lines rather
than total lines (patch by Alexander V. Lukyanov).
+ correct loop limits for table-lookup of enumerated value in form
(patch by Juergen Pfeifer).
+ improve threshold computation for determining when to call ClrToEOL
(patch by Alexander V. Lukyanov).
970531
+ add configure option --disable-database to force the library to
use only the fallback data.
+ add configure option --with-fallbacks, to specify list of fallback
terminal descriptions.
+ add a symbolic link for ncurses.h during install; too many programs
still assume there's an ncurses.h
+ add new terminfo.src entry for xterm-xf86-v33.
+ restore terminfo.src entry for emu to using setf/setb, since it is
not, after all, generating ANSI sequences. Corrected missing comma
that caused setf/setb entries to merge.
+ modify mousemask() to use keyok() to enable/disable KEY_MOUSE, so
that applications can disable ncurses' mouse and supply their own
handler.
+ add extensions keyok() and define_key(). These are designed to allow
the user's application better control over the use of function keys,
e.g., disabling the ncurses KEY_MOUSE. (The define_key idea was from
a mailing-list thread started by Kenneth Albanowski
<kjahds@kjahds.com> Nov'1995).
+ restore original behavior in ncurses 'g' test, i.e., explicitly
set the keypad mode rather than use the default, since it confuses
people.
+ rewrote the newdemo banner so it's readable (reported by Hugh
Daniel).
+ tidy up exit from hashtest (reported by Hugh Daniel).
+ restore check for ^Q in ncurses 'g' test broken in 970510 (reported
by Hugh Daniel)
+ correct tput program, checking return-value of setupterm (patch by
Florian La Roche).
+ correct logic in pnoutrefresh() and pechochar() functions (reported
by Kriang Lerdsuwanakij <lerdsuwa@scf.usc.edu>). The computation
of 'wide' date to eric's #283 (1.9.9), and the pechochar bug to the
original implementation (1.9.6).
+ correct typo in vt102-w terminfo.src entry (patch by Robert Wuest
<rwuest@sire.vt.com>)
+ move calls of _nc_background() out of various loops, as its return
value will be the same for the whole window being operated on (patch
by J T Conklin).
+ add macros getcur[xy] getbeg[xy] getpar[xy], which are defined in
SVr4 headers (patch by J T Conklin <jtc@NetBSD.ORG>)
+ modify glibc addon-configure scripts (patch by H.J.Lu).
+ correct a bug in hashmap.c: the size used for clearing the hashmap
table was incorrect, causing stack corruption for large values of
LINES, e.g., >MAXLINES/2 (patch by Alexander V. Lukyanov).
+ eric's terminfo 9.13.23 & 9.13.24 changes: replaced minitel-2 entry,
added MGR, ansi-nt (note: the changes described for 9.13.24 have not
been applied).
> several changes by Juergen Pfeifer:
+ correct a missing error-return in form_driver.c when wrapping of a
field is not possible.
+ correct logic in form_driver.c for configurations that do not have
memccpy() (reported by Sidik Isani <isani@cfht.hawaii.edu>)
+ change several c++ binding functions to inline.
+ modify c++ menu binding to inherit from panels, for proper
initialization.
+ correct freeing of menu items in c++ binding.
+ modify c++ binding to reflect removal of const from user data pointer
in forms/menus libraries.
970524
+ add description of xterm-16color.
+ modify name of shared-library on *BSD to end with $(REL_VERSION)
rather than $(ABI_VERSION) to match actual convention on FreeBSD
(cf: 960713).
+ add OpenBSD to shared-library case, same as NetBSD and FreeBSD
(reported by Hugh Daniel <hugh@rat.toad.com>).
+ corrected include-dependency in menu/Makefile so that "make install"
works properly w/o first doing "make".
+ add fallback definition for isascii, used in infocmp.
+ modify xmas to use color, and to exit right away when a key is
pressed.
+ modify gdc so that the scrolled digits function as described (there
was no time delay between the stages, and the digits overwrote the
bounding box without tidying up).
+ modify lib_color.c to use setaf/setab only for the ANSI color codes
0 through 7. Using 16 colors requires setf/setb.
+ modify ncurses 'c' test to work with 16 colors, as well as the normal
8 colors.
+ remove const qualifier from user data pointer in forms and menus
libraries (patch by Juergen Pfeifer).
+ rewrote 'waddchnstr()' to avoid using the _nc_waddch_nosync()
function, thereby not interpreting tabs, etc., as per spec (patch by
Alexander V. Lukyanov).
970517
+ suppress check for pre-existing ncurses header if the --prefix
option is specified.
+ add configure options "--with-system-type" and
"--with-system-release" to assist in checking the generated
makefiles.
+ add configure option "--enable-rpath" to allow installers to specify
that programs linked against shared libraries will have their library
path embedded, allowing installs into nonstandard locations.
+ add flags to OSF1 shared-library options to specify version and
symbol file (patch by Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>)
+ add missing definition for ABI_VERSION to c++/Makefile.in (reported
by Satoshi Adachi <adachi@wisdom.aa.ap.titech.ac.jp>).
+ modify link flags to accommodate HP-UX linker which embeds absolute
pathnames in executables linked against shared libraries (reported by
Jason Evans <jasone@mrc.uidaho.edu>, solved by Alan Shutko
<ats@hubert.wustl.edu>).
+ drop unnecessary check for attribute-change in onscreen_mvcur() since
mvcur() is the only caller within the library, and that check in turn
is exercised only from lib_doupdate.c (patch by Alexander V.
Lukyanov).
+ add 'blank' parameter to _nc_scroll_window() so _nc_mvcur_scrolln()
can use the background of stdscr as a parameter to that function
(patch by Alexander V. Lukyanov).
+ moved _nc_mvcur_scrolln() from lib_mvcur.c to lib_doupdate.c, to use
the latter's internal functions, as well as to eliminate unnecessary
cursor save/restore operations (patch by Alexander V. Lukyanov).
+ omit parameter of ClrUpdate(), since it is called only for newscr,
further optimized/reduced by using ClearScreen() and TransformLine()
to get rid of duplicate code (patch by Alexander V. Lukyanov).
+ modify scrolling algorithm in _nc_scroll_optimize() to reject hunks
that are smaller than the distance to be moved (patch by Alexander V.
Lukyanov).
+ correct a place where the panel library was not ifdef'd in ncurses.c
(Juergen Pfeifer)
+ documentation fixes (Juergen Pfeifer)
970515 4.1 release for upload to prep.ai.mit.edu
+ re-tag changes since 970505 as 4.1 release.
970510
+ modify ncurses 'g' test to allow mouse input
+ modify default xterm description to include mouse.
+ modify configure script to add -Wwrite-strings if gcc warnings are
enabled while configuring --enable-const (and fixed related
warnings).
+ add toggle, status display for keypad mode to ncurses 'g' test to
verify that keypad and scrollok are not inherited from parent window
during a call to newwin.
+ correction to MKexpanded.sh to make it work when configure --srcdir
is used (reported by H.J.Lu).
+ revise test for bool-type, ensuring that it checks if builtin.h is
available before including it, adding test for sizeof(bool) equal
to sizeof(short), and warning user if the size cannot be determined
(reported by Alexander V. Lukyanov).
+ add files to support configuration of ncurses as an add-on library
for GNU libc (patch by H.J.Lu <hjl@lucon.org>)
970506
+ correct buffer overrun in lib_traceatr.c
+ modify change to lib_vidattr.c to avoid redundant orig_pair.
+ turn on 'echo()' in hanoi.c, since it is initially off.
+ rename local 'errno' variable in etip.h to avoid conflict with global
(H.J.Lu).
+ modify configure script to cache LD, AR, AR_OPTS (patch by H.J.Lu
<hjl@lucon.org>)
970505 4.1 pre-release
+ regenerate the misc directory html dumps without the link list, which
is not useful.
+ correct dependency in form directory makefile which caused
unnecessary recompiles.
+ correct substitution for ABI_VERSION in test-makefile
+ modify install rules for shared-library targets to remove the target
before installing, since some install programs do not properly handle
overwrite of symbolic links.
+ change order of top-level targets so that 'include' immediate
precedes the 'ncurses' directory, reducing the time between new
headers and new libraries (requested by Larry Virden).
+ modify lib_vidattr.c so that colors are turned off only before
modifying other attributes, turned on after others. This makes the
hanoi.c program display correctly on FreeBSD console.
+ modify debug code in panel library to print user-data addresses
rather than the strings which they (may) point to.
+ add check to ensure that C++ binding and demo are not built with g++
versions below 2.7, since the binding uses templates.
+ modify c++ binding and demo to build and run with SGI's c++ compiler.
(It also compiles with the Sun SparcWorks compiler, but the demo does
not link, due to a vtbl problem).
+ corrections to demo.cc, to fix out-of-scope variables (Juergen
Pfeifer).
970503
+ correct memory leak in _nc_trace_buf().
+ add configure test for regexpr.h, for Unixware 1.x.
+ correct missing "./" prefixing names of generated files in ncurses
directory.
+ use single-quotes in configure scripts assignments for MK_SHARED_LIB
to workaround shell bug on FreeBSD 2.1.5
+ remove tabs from intermediate #define's for GCC_PRINTF, GCC_SCANF
that caused incorrect result in ncurses_cfg.h
+ correct initialization in lib_trace.c, which omitted version info.
+ remove ech, el1 attributes from cons25w description; they appear to
malfunction in FreeBSD 2.1.5
+ correct color attributes in terminfo.src and lib_color.c to match
SVr4 behavior by interchanging codes 1,4, 3,6 in the setf/setb
capabilities.
+ use curs_set() rather than checks via tigetstr() for test programs
that hide the cursor: firework, rain, worm.
+ ensure that if the terminal lacks change_scroll_region, parm_index
and parm_rindex are used only to scroll the whole screen (patch by
Peter Wemm).
+ correct curs_set() logic, which did not return ERR if the requested
attributes did not exist, nor did it assume an unknown initial state
for the cursor (patch by Alexander V. Lukyanov).
+ combine IDcTransformLine and NoIDcTransformLine to new TransformLine
function in lib_doupdate.c (patch by Alexander V. Lukyanov).
+ correct hashmap.c, which did not update index information (patch by
Alexander V. Lukyanov).
+ fixes for C++ binding and demo (see c++/NEWS) (Juergen Pfeifer).
+ correct index in lib_instr.c (Juergen Pfeifer).
+ correct typo in 970426 patch from Tom's cleanup of lib_overlay.c
(patch by Juergen Pfeifer).
970426
+ corrected cost computation in PutRange(), which was using
milliseconds compared to characters by adding two new members to the
SCREEN struct, _hpa_ch_cost and _cup_ch_cost.
+ drop ncurses/lib_unctrl.c, add ncurses/MKunctrl.awk to generate a
const array of strings (suggested by Alexander V. Lukyanov). The
original suggestion in 970118 used a perl script.
+ rewrote ncurses 'b' test to better exercise magic-cookie (xmc), as
well as noting the attributes that are not supported by a terminal.
+ trace the computation of cost values in lib_mvcur.c
+ modify _nc_visbuf() to use octal rather than hex, corrected sign
extension bug in that function that caused buffer overflow.
+ modify trace in lib_acs.c to use _nc_visbuf().
+ suppress trace within _traceattr2().
+ correct logic of _tracechtype2(), which did not account for repeats
or redefinition within an acsc string.
+ modify debug-library version baudrate() to use environment variable
$BAUDRATE to override speed computation. This is needed for
regression testing.
+ correct problems shown by "weblint -pedantic".
+ update mailing-list information (now ncurses@bsdi.com).
970419
+ Improve form_field_validation.3x manpage to better describe the
precision parameter for TYPE_NUMERIC and TYPE_INTEGER. Provide more
precise information how the range checking can be avoided. (patch by
Juergen Pfeifer, reported by Bryan Henderson)
+ change type of min/max value of form types TYPE_INTEGER to long to
match SVr4 documentation.
+ set the form window to stdscr in set_form_win() so that form_win()
won't return null (patch by Juergen Pfeifer, reported by Bryan
Henderson <bryanh@giraffe.netgate.net>).
970412
+ corrected ifdef'ing of inline (cf: 970321) for TRACE vs C++.
+ corrected toggle_attr_off() macro (patch by Andries Brouwer).
+ modify treatment of empty token in $MANPATH to /usr/man (reported by
<Andries.Brouwer@cwi.nl>)
+ modify traces that record functions-called so that chtype and attr_t
values are expressed symbolically, to simplify reuse of generated
test-scripts on SVr4 regression testing.
+ add new trace functions _traceattr2() and _tracechtype2()
970405
+ add configure option --enable-const, to support the use of 'const'
where XSI should have, but did not, specify. This defines
NCURSES_CONST, which is an empty token otherwise, for strict
compatibility.
+ make processing of configure options more verbose by echoing the
--enable/--with values.
+ add configure option --enable-big-core
+ set initial state of software echo off as per XSI.
+ check for C++ builtin.h header
+ correct computation of absolute-path for $INSTALL that dropped "-c"
parameter from the expression.
+ rename config.h to ncurses_cfg.h to avoid naming-conflict when
ncurses is integrated into larger systems (adapted from diffs by
H.J.Lu for libc).
+ correct inequality in lib_doupdate.c that caused a single-char to not
be updated when the char on the right-margin was not blank, idcok()
was true (patch by Alexander V Lukyanov (in 970124), reported
by Kriang Lerdsuwanakij <lerdsuwa@scf-fs.usc.edu> in 970329).
+ modify 'clean' rule in include/Makefile so that files created by
configure script are removed in 'distclean' rule instead.
970328
+ correct array limit in tparam_internal(), add case to interpret "%x"
(patch by Andreas Schwab)
+ rewrote number-parsing in ncurses.c 'd' test; it did not reset the
value properly when non-numeric characters were given (reported by
Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>)
970321
+ move definition of __INTERNAL_CAPS_VISIBLE before include for
progs.priv.h (patch by David MacKenzie).
+ add configuration summary, reordered check for default include
directory to better accommodate a case where installer is configuring
a second copy of ncurses (reported by Klaus Weide
<kweide@tezcat.com>)
+ moved the #define for 'inline' as an empty token from the
$(CFLAGS_DEBUG) symbol into config.h, to avoid redefinition warning
(reported by Ward Horner).
+ modify test for bool builtin type to use 'unsigned' rather than
'unknown' when cross-compiling (reported by Ward Horner).
970315
+ add header dependencies so that "make install.libs" will succeed
even if "make all" is not done first.
+ moved some macros from lib_doupdate.c to curses.priv.h to use in
expanded functions with ATAC.
+ correct implementation of lib_instr.c; both XSI and SVr4 agree that
the winnstr functions can return more characters than will fit on one
line.
970308
+ modify script that generates lib_gen.c to support traces of called &
return.
+ add new configure option "--disable-macros", for testing calls within
lib_gen.c
+ corrected logic that screens level-checking of called/return traces.
970301
+ use new configure macro NC_SUBST to replace AC_PATH_PROG, better
addressing request by Ward Horner.
+ check for cross-compiling before trying to invoke the autoconf
AC_FUNC_SETVBUF_REVERSED macro (reported by Ward Horner)
+ correct/simplify loop in _nc_visbuf(), 970201 changes omitted
a pointer-increment.
+ eliminate obsolete symbol SHARED_ABI from dist.mk (noted by
Florian La Roche).
970215
+ add configure option --enable-expanded, together with code that
implements an expanded form of certain complex macros, for testing
with ATAC.
+ disable CHECK_POSITION unless --with-assertions is configured
(Alexander V Lukyanov pointed out that this is redundant).
+ use keyname() to show traced chtype values where applicable rather
than _tracechar(), which truncates the value to 8-bits.
+ minor fixes to TRACE_ICALLS, added T_CREATE, TRACE_CCALLS macros.
+ modify makefiles in progs and test directories to avoid using C
preprocessor options on link commands (reported by Ward Horner)
+ correct ifdef/include-order for nc_alloc.h vs lib_freeall.c (reported
by Ward Horner)
+ modify ifdef's to use configure-defined symbols consistently
(reported by Ward Horner)
+ add/use new makefile symbols AR, AR_OPTS and LD to assist in non-UNIX
ports (reported by Ward Horner <whorner@tsi-telsys.com>)
+ rename struct try to struct tries, to avoid name conflict with C++
(reported by Gary Johnson).
+ modify worm.c to hide cursor while running.
+ add -Wcast-qual to gcc warnings, fix accordingly.
+ use PutChar rather than PutAttrChar in ClrToEOL to properly handle
wrapping (Alexander V Lukyanov).
+ correct spurious echoing of input in hanoi.c from eric's #291 & #292
patches (reported by Vernon C. Hoxie <vern@zebra.alphacdc.com>).
+ extend IRIX configuration to IRIX64
+ supply missing install.libs rule needed after restructuring
test/Makefile.in
970208
+ modify "make mostlyclean" to leave automatically-generated source
in the ncurses directory, for use in cross-compiles.
+ autogenerated object-dependencies for test directory
+ add configure option --with-rcs-ids
+ modify configuration scripts to generate major/minor/patch versions
(suggested by Alexander V Lukyanov).
+ supply missing va_end's in lib_scanw.c
+ use stream I/O for trace-output, to eliminate fixed-size buffer
+ add TRACE_ICALLS definition/support to lib_trace.c
+ modify Ada95 binding to work with GNAT 3.09 (Juergen Pfeifer).
970201
+ add/modify traces for called/return values to simplify extraction
for test scripts.
+ changed _nc_visbuf to quote its result, and to dynamically allocate
the returned buffer.
+ invoke ldconfig after installing shared library
+ modify install so that overwrite applies to shared library -lcurses
in preference to static library (reported by Zeyd M Ben-Halim 960928).
+ correct missing ';' in 961221 mod to overwrite optional use of $(LN_S)
symbol.
+ fixes to allow "make install" to work without first doing a "make
all" (suggested by Larry Virden).
970125
+ correct order of #ifdef for TABS_OK.
+ instrumented toe.c to test memory-leaks.
+ correct memory-deallocation in toe.c (patch by Jesse Thilo).
+ include <sys/types.h> in configuration test for regex.h (patch by
Andreas Schwab)
+ make infocmp recognize -I option, for SVr4 compatibility (reported by
Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>)
970118
+ add extension 'use_default_colors()', modified test applications that
use default background (firework, gdc, hanoi, knight, worm) to
demonstrate.
+ correct some limit checks in lib_doupdate.c exposed while running
worm.
+ use typeCalloc macro for readability.
+ add/use definition for CONST to accommodate testing with Solaris
(SVr4) curses, which doesn't use 'const' in its prototypes.
+ modify ifdef's in test/hashtest.c and test/view.c to compile with
Solaris curses.
+ modify _tracedump() to pad colors & attrs lines to match change
in 970101 showing first/last changes.
+ corrected location of terminating null on dynamically allocated forms
fields (patch by Per Foreby).
970111
+ added headers to make view.c compile on SCO with the resizeterm()
code (i.e., struct winsize) - though this compiles, I don't have a
suitable test configuration since SIGWINCH doesn't pass my network to
that machine - T.Dickey.
+ update test/configure.in to supply some default substitutions.
+ modify configure script to add -lncurses after -lgpm to fix problem
linking against static libraries.
+ add a missing noraw() to test/ncurses.c (places noted by Jeremy
Buhler)
+ add a missing wclear() to test/testcurs.c (patch by Jeremy Buhler
<jbuhler@cs.washington.edu>)
+ modify headers to accommodate compilers that don't allow duplicate
"#define" lines for NCURSES_VERSION (reported by Larry W. Virden
<lvirden@cas.org>)
+ fix formatting glitch in curs_getch.3x (patch by Jesse Thilo).
+ modify lib_doupdate to make el, el1 and ed optimization use the
can_clear_with macro, and change EmitRange to allow leaving cursor at
the middle of interval, rather than always at the end (patch by
Alexander V Lukyanov). This was originally 960929, resync 970106.
970104
+ workaround defect in autoconf 2.12 (which terminates configuration
if no C++ compiler is found) by adding an option --without-cxx.
+ modify several man-pages to use tbl, where .nf/.fi was used (reported
by Jesse Thilo).
+ correct font-codes in some man-pages (patch by Jesse Thilo
<Jesse.Thilo@pobox.com>)
+ use configure script's knowledge of existence of g++ library for the
c++ Makefile (reported by Paul Jackson).
+ correct misleading description of --datadir configuration option
(reported by Paul Jackson <pj@sam.engr.sgi.com>)
970101
+ several corrections to _nc_mvcur_scrolln(), prompted by a bug report
from Peter Wemm:
> the logic for non_dest_scroll_region was interchanged between the
forward & reverse scrolling cases.
> multiple returns from the function allowed certain conditions to do
part of an operation before discovering that it couldn't be
completed, returning an error without restoring the cursor.
> some returns were ERR, where the function had completed the
operation, because the insert/delete line logic was improperly
tested (this was probably the case Peter saw).
> contrary to comments, some scrolling cases were tested after the
insert/delete line method.
+ modify _tracedump() to show first/last changes.
+ modify param of ClrUpdate() in lib_doupdate.c to 'newscr', fixes
refresh problem (reported by Peter Wemm) that caused nvi to not show
result of ":r !ls" until a ^L was typed.
961229 (internal alpha)
+ correct some of the writable-strings warnings (reported by Gary
Johnson <gjohnson@season.com>). Note that most of the remaining ones
are part of the XSI specification, and can't be "fixed".
+ improve include-dependencies in form, menu, panel directories.
+ correct logic of delay_output(), which would return early if
there is data on stdin.
+ modify interface & logic of _nc_timed_wait() to support 2 file
descriptors, needed for GPM.
+ integrate patch by Andrew Kuchling <amk@magnet.com> for GPM (mouse)
support, correcting logic in wgetch() and _nc_mouse_parse() which
prevented patch from working properly -TD
+ improve performance of panel algorithm (Juergen Pfeifer 961203).
+ strip RCS id's from generated .html files in Ada95 subtree.
+ resync with generated .html files (Juergen Pfeifer 961223).
+ terminfo.src 10.1.0 (ESR).
961224 4.0 release
+ release as 4.0 to accommodate Linux ld.so.1.8.5
+ correct syntax/spelling, regenerated .doc files from .html using
lynx 2.5
+ refined forms/menus makefiles (Juergen Pfeifer 961223).
961221 - snapshot
+ remove logic in read_entry.c that attempts to refine errno by using
'access()' for the directory (from patch by Florian La Roche).
+ correct configure test/substitution that inhibits generating
include-path to /usr/include if gcc is used (reported by Florian La
Roche).
+ modify setupterm() to allocate new TERMINAL for each call, just as
solaris' curses does (Alexander V Lukyanov 960829).
+ corrected memory leaks in read_entry.c
+ add configure options --with-dbmalloc, --with-dmalloc, and
--disable-leaks, tested by instrumenting infocmp, ncurses programs.
+ move #include's for stdlib.h and string.h to *.priv.h to accommodate
use of dbmalloc.
+ modify use of $(LN_S) to follow recommendation in autoconf 2.12,
i.e., set current directory before linking.
+ split-out panel.priv.h, improve dependencies for forms, menus
(Juergen Pfeifer 961204).
+ modify _nc_freewin() to reset globals curscr/newscr/stdscr when
freeing the corresponding WINDOW (found using Purify).
+ modify delwin() to return ERR if the window to be deleted has
subwindows, needed as a side-effect of resizeterm() (found using
Purify). Tested and found that SVr4 curses behaves this way.
+ implement logic for _nc_freeall(), bringing stub up to date.
961215
+ modify wbkgd() so that it doesn't set nulls in the rendered text,
even if its argument doesn't specify a character (fixes test case by
Juergen Pfeifer for bug-report).
+ set window-attributes in wbkgd(), to simplify comparison against
Solaris curses, which does this.
961214 - snapshot
+ replace most constants in ncurses 'o' test by expressions, making it
work with wider range of screen sizes.
+ add options to ncurses.c to specify 'e' test softkey format, and the
number of header/footer lines to rip-off.
+ add ^R (repaint after resize), ^L (refresh) commands to ncurses 'p'
test.
+ add shell-out (!) command to ncurses 'p' test to allow test of
resize between endwin/refresh.
+ correct line-wrap case in mvcur() by emitting carriage return,
overlooked in 960928, but needed due to SVr4 compatibility changes to
terminal modes in 960907.
+ correct logic in wresize that causes new lines to be allocated,
broken for the special case of increasing rows only in 960907's fix
for subwindows.
+ modify configure script to generate $(LDFLAGS) with -L and -l options
in preference to explicit library filenames. (NOTE: this may
require further amending, since I vaguely recall a dynamic loader
that did not work properly without the full names, but it should be
handled as an exception to the rule, since some linkers do bulk
inclusion of libraries when given the full name - T.Dickey).
+ modify configure script to allow user-supplied $CFLAGS to set the
debug-option in all libraries (requested by lots of people) -TD
+ use return consistently from main(), rather than exit (reported by
Florian La Roche).
+ add --enable-getcap-cache option to configure, normally disabled
(requested by Florian La Roche).
+ make configure test for gettimeofday() and possibly -lbsd more
efficient (requested by Florian La Roche <florian@knorke.saar.de>)
+ minor adjustments to Ada95 binding (patches by Juergen Pfeifer)
+ correct attributes after emitting orig_pair in lib_vidattr.c (patch
by Alexander V Lukyanov).
961208
+ corrected README wrt Ada95 (Juergen Pfeifer)
961207 - snapshot
+ integrate resizeterm() into doupdate(), so that if screen size
changes between endwin/refresh, ncurses will resize windows to fit
(this needs additional testing with pads and softkeys).
+ add, for memory-leak testing, _nc_freeall() entrypoint to free all
data used in ncurses library.
+ initialize _nc_idcok, _nc_idlok statically to resolve discrepancy
between initscr() and newwin() initialization (reported by
Alexander V Lukyanov).
+ test built VERSION=4.0, SHARED_ABI=4 with Linux ld.so.1.8.5
(set beta versions to those values -- NOTE that subsequent pre-4.0
beta may not be interchangeable).
+ modify configure script to work with autoconf 2.12
961130 1.9.9g release
+ add copyright notices to configuration scripts (written by Thomas
Dickey).
961127
> patch, mostly for panel (Juergen Pfeifer):
+ cosmetic improvement for a few routines in the ncurses core library
to avoid warning messages.
+ the panel overlap detection was broken
+ the panel_window() function was not fool-proof.
+ Some inlining...
+ Cosmetic changes (also to avoid warning messages when compiling with
-DTRACE).
961126
> patch by Juergen Pfeifer:
+ eliminates warning messages for the compile of libform.
+ inserts Per Foreby's new field type TYPE_IPV4 into libform.
+ Updates man page and the Ada95 binding to reflect this.
+ Improves inlining in libmenu and libform.
961120
+ improve the use of the "const" qualifier in the
panel library (Juergen Pfeifer)
+ change set_panel_userptr() and panel_userptr() to use void*
(Juergen Pfeifer)
961119
+ change ABI to 3.4
+ package with 961119 version of Ada95 binding (fixes for gnat-3.07).
(Juergen Pfeifer)
+ correct initialization of the stdscr pseudo panel in panel library
(Juergen Pfeifer)
+ use MODULE_ID (rcs keywords) in forms and menus libraries (Juergen
Pfeifer).
> patch #324 (ESR):
+ typo in curs_termcap man page (reported by Hendrik Reichel
<106065.2344@compuserve.com>)
+ change default xterm entry to xterm-r6.
+ add entry for color_xterm
961116 - snapshot
+ lint found several functions that had only #define implementations
(e.g., attr_off), modified curses.h.in to generate them as per XSI
Curses requirement that every macro be available as a function.
+ add check in infocmp.c to guard against string compare of
CANCELLED_STRING values.
+ modify firework.c, rain.c to hide cursor while running.
+ correct missing va_end in lib_tparm.c
+ modify hanoi.c to work on non-color terminals, and to use timing
delays when in autoplay mode.
+ correct 'echochar()' to refresh immediately (reported by Adrian
Garside <94ajg2@eng.cam.ac.uk>)
> patch #322 (ESR):
+ reorganize terminfo.src entries for xterm.
961109 - snapshot
+ corrected error in line-breakout logic (lib_doupdate.c)
+ modified newdemo to use wgetch(win) rather than getch() to eliminate
a spurious clear-screen.
+ corrected ifdef's for 'poll()' configuration.
+ added modules to ncurses, form, menu for Ada95 binding (Juergen
Pfeifer).
+ modify set_field_buffer() to allow assignment of string longer than
the initial buffer length, and to return the complete string rather
than only the initial size (Juergen Pfeifer and Per Foreby
<perf@efd.lth.se>).
961102 - snapshot
+ configure for 'poll()' in preference to 'select()', since older
systems are more likely to have a broken 'select()'.
+ modified render_char() to avoid OR'ing colors.
+ minor fixes to testcurs.c, newdemo.c test programs: ifdef'd out the
resize test, use wbkgd and corrected box() parameters.
+ make flushinp() test work in ncurses.c by using napms() instead of
sleep().
+ undo ESR's changes to xterm-x11r6 (it no longer matched the X11R6.1
distribution, as stated)
+ terminfo 9.13.18 resync (ESR)
+ check for getenv("HOME") returning null (ESR).
+ change buffer used to decode xterm-mouse commands to unsigned to
handle displays wider than 128 chars (Juergen Pfeifer).
+ correct typo curs_outopts.3x (Juergen Pfeifer).
+ correct limit-checking in wenclose() (Juergen Pfeifer).
+ correction to Peter Wemm's newwin change (Thomas Fehr
<fehr@suse.de>).
+ corrections to logic that combines colors and attributes; they must
not be OR'd (Juergen Pfeifer, extending from report/patch by Rick
Marshall).
961026 - snapshot
+ reset flags in 'getwin()' that might cause refresh to attempt to
manipulate the non-existent parent of a window that is read from a
file (lib_screen.c).
+ restructure _nc_timed_wait() to log more information, and to try to
recover from badly-behaved 'select()' calls (still testing this).
+ move define for GOOD_SELECT into configure script.
+ corrected extra '\' character inserted before ',' in comp_scan.c
+ corrected expansion of %-format characters in dump_entry.c; some were
rendered as octal constants.
+ modify dump_entry.c to make terminfo output more readable and like
SVr4, by using "\s" for spaces (leading/trailing only), "\," for
comma, "\^" and "\:" as well.
+ corrected some memory leaks in ncurses.c, and a minor logic error
in the top-level command-parser.
+ correction for label format 4 (PC style with info line), a
slk_clear(), slk_restore() sequence didn't redraw the info line
(Juergen Pfeifer).
+ modified the slk window (if simulated) to inherit the background and
default character attributes from stdscr (Juergen Pfeifer).
+ corrected limit-check in set_top_row (Juergen Pfeifer).
961019 - snapshot
+ correct loop-limit in wnoutrefresh(), bug exposed during pipe-testing
had '.lastchar' entry one beyond '._maxx'.
+ modify ncurses test-program to work with data piped to it.
+ corrected pathname computation in run_tic.sh, removing extra "../"
(reported by Tim Mooney).
+ modified configure script to use previous install's location for
curses.h
+ added NetBSD and FreeBSD to platforms that use --prefix=/usr as
a default.
961013
+ revised xterm terminfo descriptions to reflect the several versions
that are available.
+ corrected a pointer reference in dump_entry.c that didn't test if
the pointer was -1.
961005 - snapshot
+ correct _nc_mvcur_scrolln for terminals w/o scrolling region.
+ add -x option to hashtest to control whether it allows writes to the
lower-right corner.
+ ifdef'd (NCURSES_TEST) the logic for _nc_optimize_enable to make it
simpler to construct tests (for double-check of _nc_hash_map tests).
+ correct ifdef's for c++ in curses.h
+ change default xterm type to xterm-x11r6.
+ correct quoting in configure that made man-pages installed with
$datadir instead of actual terminfo path.
+ correct whitespace in include/Caps, which caused kf11, clr_eol and
clr_end to be omitted from terminfo.5
+ fix memory leaks in delscreen() (adapted from Alexander V Lukyanov).
+ improve appearance of marker in multi-selection menu (Juergen
Pfeifer)
+ fix behavior for forms with all fields inactive (Juergen Pfeifer)
+ document 'field_index()' (Juergen Pfeifer)
> patch #321 (ESR):
+ add some more XENIX keycap translations to include/Caps.
+ modify newwin to set initial state of each line to 'touched'
(from patch by Peter Wemm <peter@spinner.dialix.com>)
+ in SET_TTY, replace TCSANOW with TCSADRAIN (Alexander V Lukyanov).
960928 - snapshot
+ ifdef'd out _nc_hash_map (still slower)
+ add graphic characters to vt52 description.
+ use PutAttrChar in ClrToEOL to ensure proper background, position.
+ simplify/correct logic in 'mvcur()' that does wrapping; it was
updating the position w/o actually moving the cursor, which broke
relative moves.
+ ensure that 'doupdate()' sets the .oldindex values back to a sane
state; this was causing a spurious refresh in ncurses 'r'.
+ add logic to configure (from vile) to guard against builders who
don't remove config.cache & config.status when doing new builds -TD
+ corrected logic for 'repeat_char' in EmitRange (cf: eric #317), which
did not follow the 2-parameter scheme specified in XSI.
+ corrected logic of wrefresh, wnoutrefresh broken in #319, making
clearok work properly (report by Michael Elkins).
+ corrected problem with endwin introduced by #314 (removing the
scrolling-region reset) that broke ncurses.c tests.
+ corrected order of args in AC_CHECK_LIB (from report by Ami Fischman
<fischman@math.ucla.edu>).
+ corrected formatting of terminfo.5 tables (Juergen Ehling)
> patch 320 (ESR):
+ change ABI to 3.3
+ emit a carriage-return in 'endwin()' to workaround a kernel bug in
BSDI. (requested by Mike Karels <karels@redrock.bsdi.com>)
+ reverse the default o configure --enable-termcap (consensus).
> patch 319 (ESR):
+ modified logic for clearok and related functions (from report by
Michael Elkins) - untested
> patch 318 (ESR):
+ correction to #317.
> patch 317 (ESR):
+ re-add _nc_hash_map
+ modify EmitRange to maintain position as per original design
(patch by A. Lukyanov).
+ modify test/ncurses.c and tputs, etc., to allow trace counting
output characters.
+ add hashtest.c program to time the hashmap optimization.
> patch 316 (ESR):
+ add logic to deal with magic-cookie (how was this tested?)
(lib_doupdate.c).
+ add ncurses.c driver for magic-cookie, some fixes to ncurses.c
> patch 315 (ESR):
+ merge changes to lib_doupdate.c to use ech and rep - untested
(patch by Alexander V Lukyanov).
+ modified handling of interrupted system calls - untested
(lib_getch.c, lib_twait.c).
+ new function _nc_mvcur_resume()
+ fix return value for 'overlay()', 'overwrite()'
960914 - snapshot
+ implement subwindow-logic in wresize, minor fixes to ncurses 'g'
test.
+ corrected bracketing of fallback.c (reported/suggested fix by Juergen
Ehling <eh@eclipse.aball.de>).
+ update xterm-color to reflect XFree86 3.1.3G release.
+ correct broken dtterm description from #314 patch (e.g., spurious
newline. The 'pairs' change might work, but no one's tested it
either ;-)
+ clarify the documentation for the builtin form fieldtypes (Juergen
Pfeifer)
> patch 314 (ESR):
+ reset scroll region on startup rather than at wrapup time
(enhancement suggested by Alexander V Lukyanov).
+ make storage of palette tables and their size counts per-screen for
multi-terminal applications (suggested by Alexander V Lukyanov).
+ Improved error reporting for infotocap translation errors.
+ Update terminfo.src to 9.13.14.
960907 - snapshot
+ rewrote wgetstr to make it erase control chars and also fix bogus use
of _nc_outstr which caused the display to not wrap properly (display
problem reported by John M. Flinchbaugh <glynis@netrax.net>)
+ modify ncurses 'f' test to accommodate terminal responses to C1 codes
(and split up this screen to accommodate non-ANSI terminals).
+ test enter_insert_mode and exit_insert_mode in has_ic().
+ removed bogus logic in mvcur that assumes nl/nonl set output modes
(XSI says they are input modes; SVr4 implements this).
+ added macros SET_TTY, GET_TTY to term.h
+ correct getstr() logic that altered terminal modes w/o restoring.
+ disable ICRNL, etc., during initialization to match SVr4, removing
the corresponding logic from raw, cbreak, etc.
+ disable ONLCR during initialization, to match SVr4 (this is needed
for cursor optimization when the cursor-down is a newline).
+ replaced ESR's imitation of wresize with my original (his didn't
work).
960831 - snapshot
+ memory leaks (Alexander V. Lukyanov).
+ modified pnoutrefresh() to be more tolerant of too-large screen
size (reported by Michael Elkins).
+ correct handling of terminfo files with no strings (Philippe De
Muyter)
+ correct "tic -s" to take into account -I, -C options.
+ modify ncurses 'f' test to not print codes 80 through 9F, since they
are considered control codes by ANSI terminals.
960824 - snapshot
+ correct speed variable-type in 'tgetent()' (reported by Peter Wemm)
+ make "--enable-getcap" configuration-option work (reported by
Peter Wemm <peter@spinner.DIALix.COM>)
960820
+ correct err in 960817 that changed return-value of tigetflag()
(reported by Alexander V. Lukyanov).
+ modify infocmp to use library default search-path for terminfo
directory (Alexander V. Lukyanov).
960817 - snapshot
+ corrected an err in mvcur that broke resizing-behavior.
+ correct fall-thru behavior of _nc_read_entry(), which was not finding
descriptions that existed in directories past the first one searched
(reported by Alexander V. Lukyanov)
+ corrected typo in dtterm description.
> patch 313 (ESR):
+ add dtterm description
+ clarify ncurses 'i' test (drop mvwscanw subtest)
960810 - snapshot
+ correct nl()/nonl() to work as per SVr4 & XSI.
+ minor fixes to ncurses.c (use 'noraw()', mvscanw return-code)
+ refine configure-test for "-g" option (Tim Mooney).
+ correct interaction between O_BLANK and NEW_LINE request in form
library (Juergen Pfeifer)
960804
+ revised fix to tparm; previous fix reversed parameter order.
> patch 312 (ESR):
correct terminfo.src corrupted by #310
> patch 311 (ESR):
+ fix idlok() and idcok() and the default of the idlok switch (report
by Ville Sulko).
960803 - snapshot
+ corrected tparm to handle capability strings without explicit pop
(reported by William P Setzer)
+ add fallback def for GCC_NORETURN, GCC_UNUSED for termcap users
(reported by Tim Mooney).
> patch 310 (ESR):
+ documentation and prototyping errors for has_color, immedok and idcok
(reported by William P Setzer <wsetzer@pams.ncsu.edu>)
+ updated qnx terminfo entry (patch by Michael Hunter)
960730
+ eliminate quoted includes in ncurses subdirectory, ensure config.h
is included first.
+ newterm initializes terminal settings the same as initscr (reported
by Tim Mooney).
960727 - snapshot
+ call cbreak() in initscr(), as per XSI & SVr4.
+ turn off hardware echo in initscr() as per XSI & SVr4
> patch 309 (ESR):
+ terminfo changes (9.3.9), from BRL
+ add more checks to terminfo parser.
+ add more symbols to infocmp.
960720 - snapshot
+ save previous-attribute in lib_vidattr.c if SP is null (reported by
Juergen Fluk <louis@dachau.marco.de>)
+ corrected calls on _nc_render so that background character is set
as per XSI.
+ corrected wbkgdset macro (XSI allows background character to be
null), and tests that use it.
+ more corrections to terminfo (xterm & rxvt)
+ undid change to mcprint prototype (cannot use size_t in curses.h
because not all systems declare it in the headers that we can safely
include therein).
+ move the ifdefs for errno into curses.priv.h
> patch 308 (ESR):
+ terminfo changes (9.3.8)
+ modified logic of error-reporting in terminfo parser
+ fix option-processing bug in toe.
960713 - snapshot
+ always check for <sys/bsdtypes.h> since ISC needs it to declare
fd_set (Juergen Pfeifer)
+ install shared-libraries on NetBSD/FreeBSD with ABI-version (reported
by Juergen Pfeifer, Mike Long)
+ add LOCAL_LDFLAGS2 symbol (Juergen Pfeifer)
+ corrected prototype for delay_output() -- bump ABI to 3.2
+ patch 307 (ESR):
+ enable more translations of nonstandard caps, and document them.
+ misc/terminfo.src update to 9.13.8
+ patch 306 (ESR):
+ moved logic that filters out rmul and rmso from setupterm to newterm
where it is less likely to interfere with termcap applications.
+ cosmetic fixes to test/ncurses.c
+ modify open() call in ncurses/read_entry.c to use O_RDONLY symbol
rather than constant (report by mib).
+ misc/terminfo.src sgr0 and acsc changes (report by Philippe De
Muyter).
+ modify ncurses/comp_parse.c so that entries containing a "+" can
have missing rmcup vs smcup.
960707
+ rollback ESR's #305 change to terminfo.src (it breaks existing
applications, e.g., 'less 290').
+ correct path of edit_man.sh, and fix typo that made all man-pages
preformatted.
+ restore man/menu_requestname.3x omitted in Zeyd's resync (oops).
+ auto-configure the GCC_PRINTFLIKE/GCC_SCANFLIKE macros (reported by
Philippe De Muyter).
960706 - snapshot
+ make lib_vidattr.c more readable using macros.
+ filter out rmul, rmso that conflict with sgr0 when reading terminal
descriptions.
+ work around autoconf bug, force $INSTALL to absolute path
(reported by Zeyd).
+ modify man-page install for BSDI to install preformatted .0 files
(reported by David MacKenzie).
+ add/use gcc __attribute__ for printf and scanf in curses.h
+ added SGR attributes test-case to ncurses
+ revised ncurses 't' logic to show trace-disable effect in the menu.
+ use getopt in ncurses program to process -s and -t options.
+ make ncurses 'p' legend toggle with '?'
+ disable scrollok during the ncurses 'p' test; if it is enabled the
stdscr will scroll when putting the box-corners in the lower-right
of the screen.
> patch 305 (ESR):
+ added sanity-checking of various paired string attributes.
+ misc/terminfo.src update to 9.13.7 (report by A. Lukyanov).
+ modify man/Makefile.in to make terminfo.5 during normal build.
> patch 304 (ESR):
+ corrected allocation-length for $HOME/.terminfo path.
960629 - snapshot
+ check return code of _nc_mvcur_scrolln() in _nc_scroll_optimize() for
terminals with no scrolling-support (reported by Nikolay Shadrin
<queen@qh.mirea.ac.ru>)
+ added ^S scrollok-toggle to ncurses 'g' test.
+ added ^T trace-toggle to ncurses tests.
+ modified ncurses test program to use ^Q or ESC consistently for
terminating tests (rather than ^D), and to use control keys rather
than function keys in 'g' test.
+ corrected misplaced wclrtoeol calls in addch to accommodate wrapping
(reported by Philippe De Muyter).
+ modify lib_doupdate.c to use effective costs to tradeoff between
delete-character/insert-character vs normal updating (reported by
David MacKenzie).
+ compute effective costs for screen update operations (e.g., clr_eos,
delete_character).
+ corrected error in knight.c exposed by wrap fixes in 960622; the
msgwin needed scrollok set.
+ corrected last change to IDcTransformLine logic to avoid conflict
between PutRange and InsStr
+ modified run_tic.sh to not use /usr/tmp (reported by David
MacKenzie), and further revised it and aclocal.m4 to use $TMPDIR if
set.
+ corrected off-by-one in RoomFor call in read_entry.c
960622 - snapshot
+ modified logic that wraps cursor in addch to follow the XSI spec,
(implemented in SVr4) which states that the cursor position is
updated when wrapping. Renamed _NEED_WRAP to _WRAPPED to reflect the
actual semantics.
+ added -s option to tic, to provide better diagnostics in run_tic.sh
+ improved error-recovery for tabset install.
+ change ABI to 3.1 (dropped tparam, corrected getbkgd(), added
_yoffset to WINDOW).
+ modified initialization of SP->_ofp so that init_acs() is called with
the "right" file pointer (reported by Rick Marshall <rjm@nlc.net.au>
+ documentation fixes (Juergen Pfeifer).
+ corrected, using new SCREEN and WINDOW members, the behavior of
ncurses if one uses ripoffline() to remove a line from the top of the
screen (Juergen Pfeifer).
+ modified autoconf scripts to prepare for Ada95 (GNAT) binding to
ncurses (Juergen Pfeifer).
+ incorrect buffer-size in _nc_read_entry, reported by ESR.
960617
+ corrected two logic errors in read_entry.c, write_entry.c (called by
tic, the write/read of terminfo entries used inconsistent rules for
locating the entries; the $TERMINFO_DIRS code would find only the
first entry in a list).
+ refined pathname computation in run_tic.sh and shlib.
+ corrected initialization of $IP in misc/run_tic.sh
960615 - snapshot
+ ifdef'd out _nc_hash_map() call because it does not improve speed.
+ display version of gcc if configure script identifies it.
+ modify configure script to use /usr as Linux's default prefix.
+ modify run_tic.sh to use shlib script, fixes some problems installing
with a shared-library configuration.
+ adjusted configure script so that it doesn't run tests with the
warnings turned on, which makes config.log hard to read.
+ added 'lint' rule to top-level Makefile.
+ added configure option '--with-install-prefix' for use by system
builders to install into staging locations (requested by
Charles Levert <charles@comm.polymtl.ca>).
+ corrected autoconfigure for Debian man program; it's not installed
as "man_db".
+ set noecho in 'worm'; it was ifdef'd for debug only
+ updated test/configure.in for timing-display in ncurses 'p' test
+ corrected misspelled 'getbkgd()'.
+ corrected wbkgdset to work like observed syvr4 (sets A_CHARTEXT part
to blank if no character given, copies attributes to window's
attributes).
+ modified lib_doupdate.c to use lower-level SP's current_attr state
instead of curscr's state, since it is redundant.
+ correction to IDcTransformLine logic which controls where InsStr is
invoked (refined by Alexander V Lukyanov).
> patch 303 (ESR):
+ conditionally include Chris Torek's hash function _nc_hash_map().
+ better fix for nvi refresh-bug (Rick Marshall)
+ fix for bug in handling of interrupted keystroke waits,
(Werner Fleck).
+ misc/ncurses-intro.html syntax fix (Kajiyama Tamito).
960601 - snapshot
+ auto-configure man-page compression-format and renames for Debian.
+ corrected several typos in curses.h.in (i.e., the mvXXXX macros).
+ re-order curses.priv.h for lint.
+ added rules for lintlib, lint
+ corrected ifdef for BROKEN_LINKER in MKnames.awk.in
+ corrected missing INSTALL_DATA in misc/Makefile.in
+ flush output when changing cursor-visibility (Rick Marshall)
+ fix a minor bug in the _nc_ripoff() routine and improve error
checking when creating the label window (Juergen Pfeifer).
+ enhancement to the control over the new PC-style soft key format.
allow caller now to select whether or not one wants to have
the index-line; see curs_slk.3x for documentation (Juergen Pfeifer).
+ typos, don't use inline with "-g" (Philippe De Muyter)
+ fixes for menus & wattr-, slk-functions (Juergen Pfeifer)
960526 - snapshot
+ removed --with-ticdir option altogether, maintain compatibility with
existing applications via symbolic link in run_tic.sh
+ patch for termio.h, signal (Philippe De Muyter)
+ auto-configure gcc warning options rather than infer from version.
+ auto-configure __attribute__ for different gcc versions.
+ corrected special use of clearok() in hardscroll.c by resetting flag
in wrefresh().
+ include stdlib.h before defs for EXIT_SUCCESS, for OSF/1.
+ include sys/types.h in case stdlib.h does not declare size_t.
+ fixes for makefile (Tim Mooney)
+ fixes for menus & forms (Juergen Pfeifer)
> patch 302 (ESR):
+ improve hash function (suggested by Alexander V Lukyanov).
+ 9.13.4 update for terminfo.src
960518 - snapshot
+ revised ncurses.c panner test, let pad abut all 4 sides of screen.
+ refined case in lib_doupdate.c for ClrToEOL().
+ corrected prior change for PutRange (Alexander V Lukyanov
<lav@yars.free.net>).
+ autoconf mods (Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>).
+ locale fix for forms (Philippe De Muyter <phdemuyt@ulb.ac.be>)
+ renamed "--with-datadir" option to "--with-ticdir" to avoid
confusion, and made this check for the /usr/lib/terminfo pre-existing
directory.
> patches 299-301 (ESR):
+ html fixes (Phillippe de Muyter).
+ fix typo in ncurses-intro.html (report by Fabrizio Polacco).
+ added hashmap.c
+ mods to tracing, especially for ACS chars.
+ corrected off-by-one in IDCtransform.
+ corrected intermittent mouse bug by using return-value from read().
+ mods to parse_entry.c, for smarter defaults.
960512
+ use getopt in 'tic'; added -L option and modified -e option to allow
list from a file.
960511
+ don't use fixed buffer-size in tparm().
+ modified tic to create terminfo directory if it doesn't exist.
+ added -T options to tic and infocmp (for testing/analysis)
+ refined the length criteria for termcap and terminfo
+ optimize lib_doupdate with memcpy, PutRange
> patches 297, 298 (ESR):
+ implement TERMINFO_DIRS, and -o option of tic
+ added TRACE_IEVENT
+ fix REQ_TOGGLE_ITEM in menu/menu_driver.c; it could select but not
deselect.
+ added lib_print.c (request by Rick Marshall).
+ added has_key() (request by Juergen Pfeifer).
+ do not issue clrtoeol or clrtobot if the relevant portion of the line
is already blank (analysis by Keith Bostic).
+ add parentheses for parameters of COLOR_PAIR and PAIR_NUMBER macros
(analysis by Jurgen Eidt).
+ update screen's notion of cursor position in endwin() (analysis by
Alexander Lukyanov).
+ added 't' to ncurses.c test.
+ moved delay_output() to lib_tputs.c
+ removed tparam() (was added in 1.9.9, but conflicts with emacs and
is not part of X/Open Curses).
+ removed boolean version of 'getm'.
+ misc cursor & optimization fixes.
960504 - snapshot
+ modified ncurses 'p' test to allow full-screen range for panner size.
+ fixes for locale (Philippe De Muyter <phdm@labauto1.ulb.ac.be>)
+ don't use fixed buffer-size in fmt_entry().
+ added usage-message to 'infocmp'.
+ modified install.includes rules to prepend subdirectory-name to
"#include" if needed.
960430
+ protect wrefresh, wnoutrefresh from invocation with pad argument.
+ corrected default CCFLAGS in test/Makefile.
960428 - snapshot
+ implemented logic to support terminals with background color erase
(e.g., rxvt and the newer color xterm).
+ improved screen update logic (off-by-one logic error; use clr_eos if
possible)
960426 - snapshot
+ change ncurses 'a' test to run in raw mode.
+ make TIOCGWINSZ configure test less stringent, in case user
configures via terminal that cannot get screen size.
> patches 295, 296 (ESR):
+ split lib_kernel.c, lib_setup.c and names.c in order to reduce
overhead for programs that use only termcap features.
+ new "-e" and "-h" options of tic (request by Tony Nugent).
+ fix bug in mandatory-delay logic in lib_tputs.c (report by Sven
Verdoolaege).
+ fix for "infocmp -e" to emit correct initializers (reported by Manual
J Novoa III).
+ restore working-directory in read_termcap.c (report by Kayvan
Sylvan).
+ use "-h" option on Solaris when generating shared libraries on
Solaris 2.5 to record the library name in the file, for assisting
the loader (patch by Scott Kramer).
+ undo patch #294 changes to form and menu libraries (request by
Juergen Pfeifer).
960418 - snapshot
+ use autoconf 2.9
+ fix for AIX 3.2.5 (must define _POSIX_SOURCE to get termios struct
definitions via <termios.h>, modified macros in lib_raw.c to avoid
K&R-style substitution)
> patches 293, 294 (ESR):
+ rewrite wsyncup(), wsyncdown(), as well as small fixes to form and
menu libraries to fix echo-breakage introduced by 1.8.9, 1.9.9e
changes (patches by Juergen Pfeifer).
+ fix compile under QNX 4.2 by defining ONLCR in lib_raw.c when
__QNX__ is defined (patch by Michael Hunter).
+ modify setupterm() to match documentation for its return value, fix
newterm to work with this change (report by Emmet Lazich).
+ add checks in getch() for error, return ERR as appropriate (report by
Emmet Lazich).
+ mods to wgetch() in cooked mode (report by Pete Seebach).
+ corrected askuser() logic in tset (patch by Remco Treffkorn).
+ correct interaction of endwin() with mouse processing (report by
Michael Elkins).
+ added trace support for TTY flags
+ update terminfo.src to 9.13.1
+ FreeBSD console entries (patch by Andrew Chernov).
960406
+ fixes for NeXT, ISC and HPUX auto-configure
+ autogenerate development header-dependencies (config.h, *.priv.h)
+ corrected single-column formatting of "use=" (e.g., in tic)
+ modify tic to read full terminfo-names
+ corrected divide-by-zero that caused hang (or worse) when redirecting
output
+ modify tic to generate directories only as-needed (and corrected
instance of use of data from function that had already returned).
### ncurses-1.9.8a -> 1.9.9e
* fixed broken wsyncup()/wysncdown(), as a result wnoutrefresh() now has
copy-changed-lines behavior.
* added and documented wresize() function.
* more fixes to LOWER-RIGHT corner handling.
* changed the line-breakout optimization code to allow some lines to be
emitted before the first check.
* added option for tic to use symbolic instead of hard links (for AFS)
* fix to restore auto-wrap mode.
* trace level can be controlled by environment variable.
* better handling of NULs in terminal descriptions.
* improved compatibility with observed SVR4 behavior.
* the refresh behavior of over-lapping windows is now more efficient and
behaves like SVR4.
* use autoconf 2.7, which results in a working setup for SCO 5.0.
* support for ESCDELAY.
* small fixes for menu/form code.
* the test directory has its own configure.
* fixes to pads when optimizing scrolling.
* fixed several off-by-one bugs.
* fixes for termcap->terminfo translation; less restrictions more correct
behavior.
### ncurses-1.9.7 -> 1.9.8a
* teach infocmp -i to recognize ECMA highlight sequences
* infocmp now dumps all SVr4 termcaps (not just the SVr4 ones) on -C
* support infocmp -RBSD.
* satisfy XSI Curses requirement that every macro be available as a function.
* This represents the last big change to the public interface of ncurses. The
ABI_VERSION has now been set at 3.0 and should stay there barring any great
catastrophies or acts of God.
* The C++ has been cleaned up in reaction to the changes to satisfy XSI's
requirements.
* libncurses now gets linked to libcurses to help seamless emulation
(replacement) of a vendor's curses. --disable-overwrite turns this behavior
off.
### ncurses-1.9.6 -> 1.9.7
* corrected return values of setupterm()
* Fixed some bugs in tput (it does padding now)
* fixed a bug in tic that made it do the wrong thing on entries with more than
one `use' capability.
* corrected the screen-size calculation at startup time to alter the
numeric capabilities as per SVr4, not just LINES and COLS.
* toe(1) introduced; does what infocmp -T used to.
* tic(1) can now translate AIX box1 and font[0123] capabilities.
* tic uses much less core, the dotic.sh kluge can go away now.
* fix read_entry() and write_entry() to pass through cancelled capabilities OK.
* Add $HOME/.terminfo as source/target directory for terminfo entries.
* termcap compilation now automatically dumps an entry to $HOME/.terminfo.
* added -h option to toe(1).
* added -R option to tic(1) and infocmp(1).
* added fallback-entry-list feature.
* added -i option to infocmp(1).
* do a better job at detecting if we're on SCO.
### ncurses-1.9.5 -> 1.9.6
* handling of TERMCAP environment variables now works correctly.
* various changes to shorten termcap translations to less that 1024 chars.
* tset(1) added
* mouse support for xterm.
* most data tables are now const and accordingly live in shareable text space.
* Obey the XPG4/SVr4 practice that echo() is initially off.
* tic is much better at translating XENIX and AIX termcap entries now.
* tic can interpret ko capabilities now.
* integrated Juergen Pfeifer's forms library.
* taught write_entry() how not to write more than it needs to; this change
reduces the size of the terminfo tree by a full 26%!
* infocmp -T option added.
* better warnings about historical tic quirks from tic.
### ncurses 1.9.4 -> 1.9.5
* menus library is now included with documentation.
* lib_mvcur has been carefully profiled and tuned.
* Fixed a ^Z-handling bug that was tanking lynx(1).
* HJ Lu's patches for ELF shared libraries under Linux
* terminfo.src 9.8.2
* tweaks for compiling in separate directories.
* Thomas Dickey's patches to support NeXT's brain-dead linker
* Eric Raymond's patches to fix problems with long termcap entries.
* more support for shared libraries under SunOS and IRIX.
### ncurses 1.9.3 -> 1.9.4
* fixed an undefined-order-of-evaluation bug in lib_acs.c
* systematically gave non-API public functions and data an _nc_ prefix.
* integrated Juergen Pfeifer's menu code into the distribution.
* totally rewrote the knight test game's interface
### ncurses 1.9.2c -> 1.9.3
* fixed the TERMCAP_FILE Support.
* fixed off-by-one errors in scrolling code
* added tracemunch to the test tools
* took steps to cut the running time of make install.data
### ncurses 1.9.2c -> 1.9.2d
* revised 'configure' script to produce libraries for normal, debug,
profile and shared object models.
### ncurses 1.9.1 -> 1.9.2
* use 'autoconf' to implement 'configure' script.
* panels support added
* tic now checks for excessively long termcap entries when doing translation
* first cut at eliminating namespace pollution.
### ncurses 1.8.9 -> 1.9
* cleanup gcc warnings for the following: use size_t where 'int' is not
appropriate, fixed some shadowed variables, change attr_t to compatible with
chtype, use attr_t in some places where it was confused with 'int'.
* use chtype/attr_t casts as appropriate to ensure portability of masking
operations.
* added-back waddchnstr() to lib_addstr.c (it had been deleted).
* supplied missing prototypes in curses.h
* include <termcap.h> in lib_termcap.c to ensure that the prototypes
are consistent (they weren't).
* corrected prototype of tputs in <termcap.h>
* rewrote varargs parsing in lib_tparm.c (to avoid referencing memory
that may be out of bounds on the stack) -- Purify found this.
* ensure that TRACE is defined in lib_trace.c (to solve prototype
warnings from gcc).
* corrected scrolling-region size in 'mvcur_wrap()'
* more spelling fixes
* use 'calloc()' to allocate WINDOW struct in lib_newwin.c (Purify).
* set default value for SP->_ofp in lib_set_term.c (otherwise SunOS dumps
core in init_acs()).
* include <errno.h> in write_entry.c (most "braindead" includes declare errno
in that file).
### ncurses 1.8.8 -> 1.8.9
* compile (mostly) clean with gcc 2.5.8 -Wall -Wstrict-prototypes
-Wmissing-prototypes -Wconversion and using __attribute__ to flush out
non-portable use of "%x" for pointers, or for chtype data (which is declared
as a long).
* modified doupdate to ensure that typahead was turned on before attempting
select-call (otherwise, some implementations hang).
* added trace mask TRACE_FIFO, use this in lib_getch.c to allow finer
resolution of traces.
* improved bounds checking on several critical functions.
* the data directory has been replaced by the new master terminfo file.
* -F file-comparison option added to infocmp.
* compatibility with XSI Curses is now documented in the man bages.
* wsyncup/wsyncdown functions are reliable now; subwindow code in general
is much less flaky.
* capabilities ~msgr, tilde_glitch, insert_padding, generic_type, no_pad_char,
memory_above, memory_below, and hard_copy are now used properly.
* cursor-movement optimization has been completely rewritten.
* vertical-movement optimization now uses hardware scrolling, il, dl.
### ncurses 1.8.7 -> 1.8.8
* untic no longer exists, infocmp replaces it.
* tic can understand termcap now, especially if it is called captoinfo.
* The Linux Standard Console terminfo entry is called linux insead of console.
It also uses the kernel's new method of changing charsets.
* initscr() will EXIT upon error (as the docs say) This will mostly happen if
you try to run on an undefined terminal.
* I can get things running on AIX but tic can't compile terminfo. I have to
compile entries on another machine. Volunteers to hunt this bug are welcome.
* wbkgd() and wbkgdset() can be used to set a windows background to color.
wclear()/werase() DO NOT use the current attribute to clear the screen.
This is the way SVR4 curses works. PDCurses 2.1 is broken in this respect,
though PDCurses 2.2 has been fixed.
* cleaned up the test/ directory.
* test/worm will segfault after quite a while.
* many spelling corrections courtesy of Thomas E. Dickey
### ncurses 1.8.6 -> 1.8.7
* cleaned up programs in test/ directory.
* fixed wbkgdset() macro.
* modified getstr() to stop it from advancing cursor in noecho mode.
* modified linux terminfo entry to work with the latest kernel to get
the correct alternate character set.
* also added a linux-mono entry for those running on monochrome screens.
* changed initscr() so that it behaves like the man page says it does.
this fixes the problem with programs in test/ crashing with SIGSEV if
a terminal is undefined.
* modified addch() to avoid using any term.h #define's
* removed duplicate tgoto() in lib_tparm.c
* modified dump_entry.c so that infocmp deals correctly with ',' in acsc
* modified delwin() to correctly handle deleting subwindows.
* fixed Makefile.dist to stop installing an empty curses.h
* fixed a couple of out-of-date notes in man pages.
### ncurses 1.8.5 -> 1.8.6
* Implemented wbkgd(), bkgd(), bkgdset(), and wbkgdset().
* The handling of attributes has been improved and now does not turn off color
if other attributes are turned off.
* scrolling code is improved. Scrolling in subwindows is still broken.
* Fixes to several bugs that manifest them on platforms other than Linux.
* The default to meta now depends on the status of the terminal when ncurses
is started.
* The interface to the tracing facility has changed. Instead of the pair of
functions traceon() and traceoff(), there is just one function trace() which
takes a trace mask argument. The trace masks, defined in curses.h, are
as follows:
#define TRACE_DISABLE 0x00 /* turn off tracing */
#define TRACE_ORDINARY 0x01 /* ordinary trace mode */
#define TRACE_CHARPUT 0x02 /* also trace all character outputs */
#define TRACE_MAXIMUM 0x0f /* maximum trace level */
More trace masks may be added, or these may be changed, in future releases.
* The pad code has been improved and the pad test code in test/ncurses.c has
been improved.
* The prototype ansi entry has been changed to work with a wider variety
of emulators.
* Fix to the prototype ansi entry that enables it to work with PC emulators
that treat trailing ";m" in a highlight sequence as ";0m"; this doesn't
break operation with any emulators.
* There are now working infocmp, captoinfo, tput, and tclear utilities.
* tic can now compile entries in termcap syntax.
* Core-dump bug in pnoutrefresh fixed.
* We now recognize and compile all the nonstandard capabilities in Ross
Ridge's mytinfo package (rendering it obsolete).
* General cleanup and documentation improvements.
* Fixes and additions to the installation-documentation files.
* Take cursor to normal mode on endwin.
### ncurses 1.8.4 -> 1.8.5
* serious bugs in updating screen which caused erratic non-display,
fixed.
* fixed initialization for getch() related variable which cause
unpredictable results.
* fixed another doupdate bug which only appeared if you have
parm_char.
* implemented redrawln() and redrawwin().
* implemented winsnstr() and related functions.
* cleaned up insertln() and deleteln() and implemented (w)insdeln().
* changed Makefile.dist so that installation of man pages will
take note of the terminfo directory.
* fixed Configure (removed the mysterious 'X').
* Eric S. Raymond fixed the script.* files so that they work with
stock awk.
#### ncurses 1.8.3 -> 1.8.4 #### ####
* fixed bug in refreshing the screen after return from shell_mode.
There are still problems but they don't manifest themselves on
my machine (Linux 0.99.14f).
* added wgetnstr() and modified things accordingly.
* fixed the script.src script.test to work with awk not just gawk.
* Configure can now take an argument of the target system.
* added test/ncurses.c which replaces several other programs and
performs more testing.
[Thanks to Eric S Raymond for the last 4]
* more fixes to lib_overlay.c and added test/over.c to illustrate
how it works.
* fixed ungetch() to take int instead of ch.
* fixes to cure wgetch() if flushinp() is called.
One note I forgot to mention in 1.8.3 is that tracing is off by
default starting in the version. If you want tracing output, put
traceon(); in your code and link with -ldcurses.
#### ncurses 1.8.2 -> ncurses 1.8.3 #### ####
MAJOR CHANGES:
1) The order of capabilities has been changed in order to achieve
binary compatibility with SVR4 terminfo database. This has the
unfortunate effect of breaking application currently linked with
ncurses. To ensure correct behavior, recompile all such programs.
Most programs using color or newer capabilities will break, others
will probably continue to work ok.
2) Pavel Curtis has renounced his copyright to the public domain.
This means that his original sources (posted to comp.sources.unix,
volume 1) are now in the public domain. The current sources are
NOT in the public domain, they are copyrighted by me. I'm
entertaining ideas on what the new terms ncurses is released under.
3) Eric S. Raymond has supplied a complete set of man pages for
ncurses in ?roff format. They will eventually replace most of the
current docs. Both sets are included in this release.
Other changes and notes from 1.8.2 include:
* SIGSEGV during scrolling no longer occurs.
* Other problems with scrolling and use of idl have been corrected.
* lib_getch.c has been re-written and should perform flawlessly.
please use test/getch.c and any other programs to test this.
* ripoffline() is implemented (Thanks to Eric) and slk_ functions
changed accordingly.
* I've added support for terminals that scroll if you write in the
bottom-right corner.
* fixed more bugs in pads code. If anybody has a program that uses
pads I'd love a copy.
* correct handling for terminal with back_color_erase capability
(such as Linux console, and most PC terminals)
* ^Z handling apparently didn't work (I should never trust code
sent me to me without extensive testing). It now seems to be
fixed. Let me know if you have problems.
* I've added support for Apollo and NeXT, but it may still be
incomplete, especially when dealing with the lack of POSIX
features.
* scrolling should be more efficient on terminals with idl
capabilities. Please see src/lib_scroll.c for more notes.
* The line drawing routines were offset by 1 at both ends. This
is now fixed.
* added a few missing prototypes and macros (e.g. setterm())
* fixed code in src/lib_overlay.c which used to crash.
* added a few more programs in test/ The ones from the PDCurses
package are useful, especially if you have SVR4 proper. I'm
interested in the results you get on such a systems (Eric? ;-).
They already exposed certain bugs in ncurses.
* See src/README for porting notes.
* The C++ code should really replace ncurses.h instead of working
around it. It should avoid name-space clashes with nterm.h (use
rows instead of lines, etc.)
* The C++ should compile ok. I've added explicit rules to the
Makefile because no C++ defaults are documented on the suns.
* The docs say that echo() and nocbreak() are mutually exclusive.
At the moment ncurses will switch to cbreak() if the case above
occurs. Should it continue to do so? How about echo() and noraw()?
* PDCurses seem to assume that wclear() will use current attribute
when clearing the screen. According to Eric this is not the case
with SVR4.
* I have discovered, to my chagrin, SunOS 4.x (and probably other systems)
* doesn't have vsscanf and God knows what else! I've will do a vsscanf().
* I've also found out that the src/script.* rely on gawk and will not
work with stock awk or even with nawk. Any changes are welcome.
* Linux is more tolerant of NULL dereferences than most systems. This
fact was exposed by hanoi.
* ncurses still seems inefficient in drawing the screen on a serial
link between Linux and suns. The padding may be the culprit.
* There seems to be one lingering problem with doupdate() after shelling
out. Despite the fact the it is sending out the correct information
to the terminal, nothing takes effect until you press ^L or another
refresh takes place. And yes, output does get flushed.
#### ncurses 1.8.1 -> ncurses 1.8.2 #### Nov 28, 1993 ####
* added support for SVR4 and BSDI's BSD/386.
* major update and fix to scrolling routine.
* MORE fixes to stuff in lib_getch.c.
* cleaned-up configuration options and can now generate
Config.* files through an awk script.
* changed setupterm() so it can be called more than once,
add added set_curterm(), del_curterm().
* a few minor cleanups.
* added more prototypes in curses.h
#### ncurses 1.8 -> ncurses 1.8.1 #### Nov 4, 1993 ####
* added support for NeXTStep 3.0
* added termcap emulation (not well tested).
* more complete C++ interface to ncurses.
* fixed overlay(), overwrite(), and added copywin().
* a couple of bug fixes.
* a few code cleanups.
#### ncurses 0.7.2/0.7.3 -> ncurses 1.8 #### Aug 31, 1993 ####
* The annoying message "can't open file." was due to missing
terminfo entry for the used terminal. It has now been
replaced by a hopefully more helpful message.
* Problems with running on serial lines are now fixed.
* Added configuration files for SunOS, Linux, HP/UX, Ultrix,
386bsd/BSDI (if you have others send'em to me)
* Cleaner Makefile.
* The documentation in manual.doc is now more uptodate.
* update optimization and support for hp terminals, and 386bsd
console driver(s).
* mvcur optimization for terminals without cursor addressing
(doesn't work on Linux)
* if cursor moved since last update, getch() will refresh the
screen before working.
* getch() & alarm() can now live together. in 0.7.3 a signal
interrupted getch() (bug or feature?) now the getch is
restarted.
* scanw() et all were sick, now fixed.
* support for 8-bit input (use meta()).
* added default screen size to all terminfos.
* added c++ Ncursesw class.
* several minor bug fixes.
#### ncurses 0.7.2 -> ncurses 0.7.3 #### May 27, 1993 ####
* Config file to cope with different platforms (386BSD, BSDI, Ultrix, SunOS)
* more fixes to lib_getch.c
* changes related to Config
#### ncurses 0.7 -> ncurses 0.7.2 #### May 22, 1993 ####
* docs updated slightly (color usage is now documented).
* yet another fix for getch(), this one fixes problems with ESC being swallowed
if another character is typed before the 1 second timeout.
* Hopefully, addstr() and addch() are 8-bit clean.
* fixed lib_tparm.c to use stdarg.h (should run on suns now)
* order of capabilities changed to reflect that specified in SYSV
this will allow for binary-compatibility with existing terminfo dbs.
* added halfdelay()
* fixed problems with asc_init()
* added A_PROTECT and A_INVIS
* cleaned up vidputs()
* general cleanup of the code
* more attention to portability to other systems
* added terminfos for hp70092 (won't work until changes to lib_update.c are
made) and 386BSD pcvt drivers.
Thanks to Hellmuth Michaelis for his help.
optimization code is slated for the next major release, stay tuned!
#### ncurses 0.6/0.61 -> ncurses 0.7 #### April 1, 1993
Please note that the next release will be called 1.8. If you want to know about
the rationale drop me a line.
Included are several test programs in test/.
I've split up the panels library, reversi, tetris, sokoban. They are now
available separately from netcom.com:pub/zmbenhal/
* color and ACS support is now fully compatible with SYSV at the terminfo
level.
* Capabilities now includes as many SYSV caps I could find.
* tigetflag,tigetnum,tigetstr functions added.
* boolnames, boolfnames, boolcodes numnames, numfnames, numcodes,
strnames, strfnames, strcodes arrays are now added.
* keyname() is added.
* All function keys can be defined in terminfo entries.
* fixed lin_tparm.c to behave properly.
* terminfo entries for vt* and xterm are included (improvements are welcome)
* more automation in handling caps and keys.
* included fixes from 0.6.1
* added a few more missing functions.
* fixed a couple of minor bugs.
* updated docs JUST a little (still miles behind in documenting the newer
features).
#### ncurses 0.6 -> ncurses 0.61 ####
1) Included the missing data/console.
2) allow attributes when drawing boxes.
3) corrected usage of win->_delay value.
4) fixed a bug in lib_getch.c. if it didn't recognize a sequence it would
simply return the last character in the sequence. The correct
behavior is to return the entire sequence one character at a time.
#### ncurses0.5 -> ncurses0.6 #### March 1, 1993 ####
* removed _numchngd from struct _win_st and made appropriate changes.
* rewritten kgetch() to remove problems with interaction between alarm and
read(). It caused SIGSEGV every now and then.
* fixed a bug that miscounted the numbers of columns when updating.
(in lib_doupdate.c(ClrUpdate() -- iterate to columns not columns-1)
* fixed a bug that cause the lower-right corner to be incorrect.
(in lib_doupdate.c(putChar() -- check against columns not columns-1)
* made resize() and cleanup() static to lib_newterm.c
* added notimeout().
* added timeout() define in curses.h
* added more function prototypes and fixed napms.
* added use_env().
* moved screen size detection to lib_setup.c.
* fixed newterm() to confirm to prototype.
* removed SIGWINCH support as SYSV does not define its semantics.
* cleaned-up lib_touch.c
* added waddnstr() and relatives.
* added slk_* support.
* fixed a bug in wdeleteln().
* added PANEL library.
* modified Makefile for smoother installation.
* terminfo.h is really term.h
#### ncurses 0.4 -> ncurses 0.5 #### Feb 14, 1993 ####
* changed _win_st structure to allow support for missing functionality.
* Addition of terminfo support for all KEY_*.
* Support for nodelay(), timeout(), notimeout().
* fixed a bug with the keypad char reading that did not return ESC until
another key is pressed.
* nl mapping no longer occur on output (as should be)
fixed bug '\n' no causing a LF.
* fixed bug that reset terminal colors regardless of whether we use color
or not.
* Better support for ACS (not quite complete).
* fixed bug in wvline().
* added curs_set().
* changed from signal() to sigaction().
* re-included the contents of important.patch into source.
#### ncurses 0.3 -> ncurses 0.4 #### Feb 3, 1993 ####
* Addition of more KEY_* definitions.
* Addition of function prototypes.
* Addition of several missing functions.
* No more crashes if screen size is undefined (use SIGWINCH handler).
* added a handler to cleanup after SIGSEGV (hopefully never needed).
* changed SRCDIR from /etc/term to /usr/lib/terminfo.
* renamed compile/dump to tic/untic.
* New scrolling code.
* fixed bug that reversed the sense of nl() and nonl().
#### ncurses 0.2 -> ncurses 0.3 #### Jan 20, 1993 ####
* more support for color and graphics see test/ for examples.
* fixed various files to allow correct update after shelling out.
* more fixes for updates.
* no more core dumps if you don't have a terminfo entry.
* support for LINES and COLUMNS environment variables.
* support for SIGWINCH signal.
* added a handler for SIGINT for clean exits.
#### ncurses 0.1 -> ncurses 0.2 #### Aug 14, 1992 ####
* support for color.
* support for PC graphic characters.
* lib_trace.c updated to use stdarg.h and vprintf routines.
* added gdc.c (Great Digital Clock) as an example of using color.
#### ncurses -> ncurses 0.1 #### Jul 31, 1992 ####
* replacing sgtty stuff by termios stuff.
* ANSIfication of some functions.
* Disabling cost analysis 'cause it's incorrect.
* A quick hack for a terminfo entry.
-- vile:txtmode:
diff --git a/contrib/ncurses/README.MinGW b/contrib/ncurses/README.MinGW
index 56a2bca21e34..3add2e7de3e2 100644
--- a/contrib/ncurses/README.MinGW
+++ b/contrib/ncurses/README.MinGW
@@ -1,139 +1,148 @@
-------------------------------------------------------------------------------
-- Copyright 2020 Thomas E. Dickey --
-- Copyright 2008-2011,2012 Free Software Foundation, Inc. --
-- --
-- Permission is hereby granted, free of charge, to any person obtaining a --
-- copy of this software and associated documentation files (the --
-- "Software"), to deal in the Software without restriction, including --
-- without limitation the rights to use, copy, modify, merge, publish, --
-- distribute, distribute with modifications, sublicense, and/or sell copies --
-- of the Software, and to permit persons to whom the Software is furnished --
-- to do so, subject to the following conditions: --
-- --
-- The above copyright notice and this permission notice shall be included --
-- in all copies or substantial portions of the Software. --
-- --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN --
-- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE --
-- USE OR OTHER DEALINGS IN THE SOFTWARE. --
-- --
-- Except as contained in this notice, the name(s) of the above copyright --
-- holders shall not be used in advertising or otherwise to promote the --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
-------------------------------------------------------------------------------
--- $Id: README.MinGW,v 1.10 2020/02/02 23:34:34 tom Exp $
+-- $Id: README.MinGW,v 1.14 2020/09/06 22:22:44 tom Exp $
-- Author: Juergen Pfeifer
-------------------------------------------------------------------------------
-This is work in progress, but it's in an state where one can see it
+This is work in progress, but it is in an state where one can see it
works at least on the Windows Console.
-You should install the MSYS package, so that you've a shell environment that
-allows you to run the scripts, especially configure etc. You can get that
-from http://www.mingw.org
+You should install the MSYS2 package, so that you have a shell environment that
+allows you to run scripts, especially configure, etc. You can get that
+from
+ https://www.msys2.org/
-To build ncurses for native Windows, you need the MinGW toolchain. The
-original MinGW toolchain from the above site is only for 32-Bit Windows. As
-Windows Server - and also regular workstations - are moving to 64-Bit, it
-seems to be reasonable to have a toolchain that supports both architectures.
-I recommend to use the TDM gcc toolchain which you can find at
-http://tdm-gcc.tdragon.net/download. Go to the download section and select
-the bundle installer for tdm64 (MinGW-w64). This installs a multilib version
-of the gcc toolchain that can compile for native 32- and 64-Bit Windows
-versions. It also comes with a working pthread implementation.
+or the individual packages from
-The latest config and build scripts we use for MinGW have only been tested
-for the gcc-4.6.1 compiler toolchain (or better).
+ https://sourceforge.net/projects/msys2/files/
-Using MinGW is a pragmatic decision, it's the easiest way to port this
+You may also use a hosted MinGW cross-compile toolchain, e.g., on Ubuntu or
+ArchLinux to build the libraries and tools.
+
+To build ncurses for native Windows with support for the new Windows 10 Virtual
+Terminal and PseudoConsole support, you should install at least version 8.0 of
+the mingw-w64-x86_64-headers package as it appears to have support for the
+required Windows SDK level. Please note that some of the Linux distributions
+are a bit behind with respect to the required MinGW header versions and you may
+not be able to properly build the libraries for current Windows 10 using these
+toolchains. Although it is a bit slow, MSYS2 on Windows 10 64-Bit is the
+authoritative build environment for the MinGW version of ncurses.
+
+Using MinGW is a pragmatic decision, it is the easiest way to port this
heavily UNIX based sourcebase to native Windows. The goal is of course
to provide the includes, libraries and DLLs to be used with the more
common traditional development environments on Windows, mainly with
Microsoft Visual Studio.
-The TERM environment variable must be set specially to active the Windows
+The TERM environment variable must be set especially to activate the Windows
console-driver. The driver checks if TERM is set to "#win32con" (explicit
use) or if TERM is unset or empty (implicit).
-Please also make sure that MSYS links to the correct directory containing
-your MinGW toolchain. For TDM this is usually C:\MinGW64. In your Windows
-CMD.EXE command shell go to the MSYS root directory (most probably
-C:\MSYS or C:\MSYS\1.0) and verify, that there is a junction point mingw
-that points to the MinGW toolchain directory. If not, delete the mingw
-directory and use the mklink command (or the linkd.exe utility on older
-Windows) to create the junction point.
+Beginning with build 17763 (Fall 2018 update), Windows 10 supports ANSI escape
+sequences (Virtual Terminal support). If ncurses detects this or a later
+Windows 10 version, the interpretation of the implicit TERM setting (which
+means: TERM is not set or empty) changes. In this case, TERM is to be assumed
+to be "ms-terminal" and ncurses acts using the regular terminfo based driver,
+thus acting like a regular Terminal we all know from UNIX like environments.
+
+This code requires WindowsNT 6.0 or better, which means on the client
+Windows Vista or better, on the server Windows Server 2008 or better.
-This code requires WindowsNT 5.1 or better, which means on the client
-Windows XP or better, on the server Windows Server 2003 or better.
+If running on Windows 10 Build 17763 or later is detected, any program
+spawning a subprocess running a ncurses program should use the new
+PseudoConsole support, which provides what we know as pty from the UNIX
+world also for Windows. Using the CreatePseudoConsole API
+(see https://docs.microsoft.com/en-us/windows/console/createpseudoconsole)
+in the calling process, it is guaranteed that the called ncurses program has
+a console that is required by its implementation, even if the calling program
+is NOT a console program, e.g., MSYS2's own mintty Terminal emulator.
-I recommend using libtool to build ncurses on MinGW, because libtool
-knows exactly how to build dll's on Windows for use with MinGW.
+In the current MSYS2/minGW setup, building MinGW shared libraries with
+libtool for ncurses seems to be broken, so I recommend NOT to use libtool.
To build a modern but still small footprint ncurses that provides
hooks for interop, I recommend using these options:
- --with-libtool
- --disable-home-terminfo
- --enable-database
- --disable-termcap
- --enable-sp-funcs
- --enable-term-driver
- --enable-interop
+ --without-libtool
+ --disable-home-terminfo
+ --enable-database
+ --disable-termcap
+ --enable-sp-funcs
+ --enable-term-driver
+ --enable-interop
-This is the configuration commandline as I'm using it at the moment (assuming
-environment variable MINGW_ROOT to hold the root directory name of your MinGW
-build):
+This is the configuration command line which I am using at the moment
+(assuming environment variable MINGW_ROOT holds the root directory name of
+your MinGW build):
./configure \
- --prefix=$MINGW_ROOT \
- --with-cxx \
+ --prefix=/mingw64 \
+ --without-cxx \
--without-ada \
--enable-warnings \
--enable-assertions \
+ --enable-exp-win32 \
+ --enable-ext-funcs \
--disable-home-terminfo \
+ --disable-echo \
+ --disable-getcap \
+ --disable-hard-tabs \
+ --disable-leaks \
+ --disable-macros \
+ --disable-overwrite \
+ --enable-opaque-curses \
+ --enable-opaque-panel \
+ --enable-opaque-menu \
+ --enable-opaque-form \
--enable-database \
--enable-sp-funcs \
--enable-term-driver \
--enable-interop \
--disable-termcap \
+ --enable-database \
--with-progs \
- --with-libtool \
+ --without-libtool \
--enable-pc-files \
- --mandir=$MINGW_ROOT/share/man
+ --with-shared \
+ --with-normal \
+ --without-debug \
+ --with-fallbacks=ms-terminal \
+ --without-manpages
Please note that it is also necessary to set this environment variable:
export PATH_SEPARATOR=";"
in order to parse the terminfo paths correctly. Terminfo paths should
-always be separated by a seeeemicolon,even when running under MSYS.
-
-To support regular expressions properly, ncurses under MinGW should be
-linked against the gnurx regex library, which must be built separately
-under MinGW. See
-
- ftp.gnome.org/pub/GNOME/binaries/win32/dependencies/libgnurx-src-2.5.zip
+always be separated by a semicolon, even when running under MSYS2.
All the options above are - like the whole Windows support -
experimental.
-A lot is still TODO, e.g.:
-
- - Wide Character support (display is workable, but input untested)
- The Win32Con driver should actually only use Unicode in the
- future.
- - Thread support (locking). If using TDM toolchain this is done by
- configuring pthreads.
- - A GUI console driver
- - Support for Terminals attached via a serial port (via terminfo)
- - Support for networked Terminal connections (via terminfo)
- - Workarounds for MinGW's filesystem access are necessary to make infocmp
- work (though tic works).
-
-To support terminfo, we would need to have an ioctl() simulation for the
-serial and networked terminals.
+-- vile:txtmode
diff --git a/contrib/ncurses/VERSION b/contrib/ncurses/VERSION
index 73ac659d490e..f8f03afcea5f 100644
--- a/contrib/ncurses/VERSION
+++ b/contrib/ncurses/VERSION
@@ -1 +1 @@
-5:0:10 6.2 20200215
+5:0:10 6.2 20210220
diff --git a/contrib/ncurses/aclocal.m4 b/contrib/ncurses/aclocal.m4
index c27cc3685dc9..d498939330c1 100644
--- a/contrib/ncurses/aclocal.m4
+++ b/contrib/ncurses/aclocal.m4
@@ -1,9071 +1,9493 @@
dnl***************************************************************************
-dnl Copyright 2018-2019,2020 Thomas E. Dickey *
+dnl Copyright 2018-2020,2021 Thomas E. Dickey *
dnl Copyright 1998-2017,2018 Free Software Foundation, Inc. *
dnl *
dnl Permission is hereby granted, free of charge, to any person obtaining a *
dnl copy of this software and associated documentation files (the *
dnl "Software"), to deal in the Software without restriction, including *
dnl without limitation the rights to use, copy, modify, merge, publish, *
dnl distribute, distribute with modifications, sublicense, and/or sell *
dnl copies of the Software, and to permit persons to whom the Software is *
dnl furnished to do so, subject to the following conditions: *
dnl *
dnl The above copyright notice and this permission notice shall be included *
dnl in all copies or substantial portions of the Software. *
dnl *
dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
dnl *
dnl Except as contained in this notice, the name(s) of the above copyright *
dnl holders shall not be used in advertising or otherwise to promote the *
dnl sale, use or other dealings in this Software without prior written *
dnl authorization. *
dnl***************************************************************************
dnl
dnl Author: Thomas E. Dickey 1995-on
dnl
-dnl $Id: aclocal.m4,v 1.896 2020/02/08 21:01:07 tom Exp $
+dnl $Id: aclocal.m4,v 1.950 2021/01/26 23:45:12 tom Exp $
dnl Macros used in NCURSES auto-configuration script.
dnl
dnl These macros are maintained separately from NCURSES. The copyright on
dnl this file applies to the aggregation of macros and does not affect use of
dnl these macros in other applications.
dnl
dnl See these pages for additional information:
dnl https://invisible-island.net/autoconf/
dnl https://invisible-island.net/autoconf/my-autoconf.html
dnl
dnl ---------------------------------------------------------------------------
dnl ---------------------------------------------------------------------------
-dnl AM_LANGINFO_CODESET version: 4 updated: 2015/04/18 08:56:57
+dnl AM_LANGINFO_CODESET version: 6 updated: 2021/01/01 16:53:59
dnl -------------------
dnl Inserted as requested by gettext 0.10.40
dnl File from /usr/share/aclocal
dnl codeset.m4
dnl ====================
dnl serial AM1
dnl
dnl From Bruno Haible.
AC_DEFUN([AM_LANGINFO_CODESET],
[
AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
[AC_TRY_LINK([#include <langinfo.h>],
- [char* cs = nl_langinfo(CODESET);],
+ [char* cs = nl_langinfo(CODESET); (void)cs],
am_cv_langinfo_codeset=yes,
am_cv_langinfo_codeset=no)
])
- if test $am_cv_langinfo_codeset = yes; then
+ if test "$am_cv_langinfo_codeset" = yes; then
AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
[Define if you have <langinfo.h> and nl_langinfo(CODESET).])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_ABI_DEFAULTS version: 2 updated: 2015/06/06 13:49:58
dnl ---------------
dnl Provide configure-script defaults for different ncurses ABIs.
AC_DEFUN([CF_ABI_DEFAULTS],[
AC_REQUIRE([CF_NCURSES_WITH_ABI_VERSION])
case x$cf_cv_abi_version in
(x[[6789]])
cf_dft_ext_colors=yes
cf_dft_ext_const=yes
cf_dft_ext_mouse=yes
cf_dft_ext_putwin=yes
cf_dft_ext_spfuncs=yes
cf_dft_filter_syms=yes
cf_dft_chtype=uint32_t
cf_dft_mmask_t=uint32_t
cf_dft_interop=yes
cf_dft_tparm_arg=intptr_t
cf_dft_with_lp64=yes
;;
(*)
cf_dft_ext_colors=no
cf_dft_ext_const=no
cf_dft_ext_mouse=no
cf_dft_ext_putwin=no
cf_dft_ext_spfuncs=no
cf_dft_filter_syms=no
cf_dft_chtype=auto
cf_dft_mmask_t=auto
cf_dft_interop=no
cf_dft_tparm_arg=long
cf_dft_with_lp64=no
;;
esac
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_ACVERSION_CHECK version: 5 updated: 2014/06/04 19:11:49
dnl ------------------
dnl Conditionally generate script according to whether we're using a given autoconf.
dnl
dnl $1 = version to compare against
dnl $2 = code to use if AC_ACVERSION is at least as high as $1.
dnl $3 = code to use if AC_ACVERSION is older than $1.
define([CF_ACVERSION_CHECK],
[
ifdef([AC_ACVERSION], ,[ifdef([AC_AUTOCONF_VERSION],[m4_copy([AC_AUTOCONF_VERSION],[AC_ACVERSION])],[m4_copy([m4_PACKAGE_VERSION],[AC_ACVERSION])])])dnl
ifdef([m4_version_compare],
[m4_if(m4_version_compare(m4_defn([AC_ACVERSION]), [$1]), -1, [$3], [$2])],
[CF_ACVERSION_COMPARE(
AC_PREREQ_CANON(AC_PREREQ_SPLIT([$1])),
AC_PREREQ_CANON(AC_PREREQ_SPLIT(AC_ACVERSION)), AC_ACVERSION, [$2], [$3])])])dnl
dnl ---------------------------------------------------------------------------
dnl CF_ACVERSION_COMPARE version: 3 updated: 2012/10/03 18:39:53
dnl --------------------
dnl CF_ACVERSION_COMPARE(MAJOR1, MINOR1, TERNARY1,
dnl MAJOR2, MINOR2, TERNARY2,
dnl PRINTABLE2, not FOUND, FOUND)
define([CF_ACVERSION_COMPARE],
[ifelse(builtin([eval], [$2 < $5]), 1,
[ifelse([$8], , ,[$8])],
[ifelse([$9], , ,[$9])])])dnl
dnl ---------------------------------------------------------------------------
dnl CF_ADA_INCLUDE_DIRS version: 8 updated: 2013/10/14 04:24:07
dnl -------------------
dnl Construct the list of include-options for the C programs in the Ada95
dnl binding.
AC_DEFUN([CF_ADA_INCLUDE_DIRS],
[
ACPPFLAGS="-I. -I../include -I../../include $ACPPFLAGS"
if test "$srcdir" != "."; then
ACPPFLAGS="-I\${srcdir}/../../include $ACPPFLAGS"
fi
if test "$GCC" != yes; then
ACPPFLAGS="$ACPPFLAGS -I\${includedir}"
elif test "$includedir" != "/usr/include"; then
if test "$includedir" = '${prefix}/include' ; then
if test x$prefix != x/usr ; then
ACPPFLAGS="$ACPPFLAGS -I\${includedir}"
fi
else
ACPPFLAGS="$ACPPFLAGS -I\${includedir}"
fi
fi
AC_SUBST(ACPPFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_ADD_ADAFLAGS version: 1 updated: 2010/06/19 15:22:18
dnl ---------------
dnl Add to $ADAFLAGS, which is substituted into makefile and scripts.
AC_DEFUN([CF_ADD_ADAFLAGS],[
ADAFLAGS="$ADAFLAGS $1"
AC_SUBST(ADAFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_ADD_CFLAGS version: 13 updated: 2017/02/25 18:57:40
+dnl CF_ADD_CFLAGS version: 15 updated: 2020/12/31 10:54:15
dnl -------------
dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS
-dnl The second parameter if given makes this macro verbose.
+dnl $1 = flags to add
+dnl $2 = if given makes this macro verbose.
dnl
dnl Put any preprocessor definitions that use quoted strings in $EXTRA_CPPFLAGS,
dnl to simplify use of $CPPFLAGS in compiler checks, etc., that are easily
dnl confused by the quotes (which require backslashes to keep them usable).
AC_DEFUN([CF_ADD_CFLAGS],
[
cf_fix_cppflags=no
cf_new_cflags=
cf_new_cppflags=
cf_new_extra_cppflags=
for cf_add_cflags in $1
do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
(no)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=yes
- if test $cf_fix_cppflags = yes ; then
+ if test "$cf_fix_cppflags" = yes ; then
CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags)
continue
elif test "${cf_tst_cflags}" = "\"'" ; then
CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags)
continue
fi
;;
esac
case "$CPPFLAGS" in
(*$cf_add_cflags)
;;
(*)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,$cf_tst_cppflags)
;;
esac
CF_APPEND_TEXT(cf_new_cppflags,$cf_add_cflags)
;;
esac
;;
(*)
CF_APPEND_TEXT(cf_new_cflags,$cf_add_cflags)
;;
esac
;;
(yes)
CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[[^"]]*"'\''//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[[^"]]*"'\''//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=no
;;
esac
done
if test -n "$cf_new_cflags" ; then
ifelse([$2],,,[CF_VERBOSE(add to \$CFLAGS $cf_new_cflags)])
CF_APPEND_TEXT(CFLAGS,$cf_new_cflags)
fi
if test -n "$cf_new_cppflags" ; then
ifelse([$2],,,[CF_VERBOSE(add to \$CPPFLAGS $cf_new_cppflags)])
CF_APPEND_TEXT(CPPFLAGS,$cf_new_cppflags)
fi
if test -n "$cf_new_extra_cppflags" ; then
ifelse([$2],,,[CF_VERBOSE(add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags)])
CF_APPEND_TEXT(EXTRA_CPPFLAGS,$cf_new_extra_cppflags)
fi
AC_SUBST(EXTRA_CPPFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_ADD_INCDIR version: 15 updated: 2018/06/20 20:23:13
+dnl CF_ADD_CXXFLAGS version: 1 updated: 2020/04/04 16:16:13
+dnl ---------------
+dnl Copy non-preprocessor flags to $CXXFLAGS, preprocessor flags to $CPPFLAGS
+dnl The second parameter if given makes this macro verbose.
+dnl
+dnl Put any preprocessor definitions that use quoted strings in $EXTRA_CPPFLAGS,
+dnl to simplify use of $CPPFLAGS in compiler checks, etc., that are easily
+dnl confused by the quotes (which require backslashes to keep them usable).
+AC_DEFUN([CF_ADD_CXXFLAGS],
+[
+cf_save_CXXFLAGS="$CFLAGS"
+CFLAGS="$CXXFLAGS"
+CF_ADD_CFLAGS($1 ifelse($2,,,[,$2]))
+CXXFLAGS="$CFLAGS"
+CFLAGS="$cf_save_CXXFLAGS"
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_ADD_INCDIR version: 16 updated: 2020/12/31 20:19:42
dnl -------------
dnl Add an include-directory to $CPPFLAGS. Don't add /usr/include, since it's
dnl redundant. We don't normally need to add -I/usr/local/include for gcc,
dnl but old versions (and some misinstalled ones) need that. To make things
dnl worse, gcc 3.x may give error messages if -I/usr/local/include is added to
dnl the include-path).
AC_DEFUN([CF_ADD_INCDIR],
[
if test -n "$1" ; then
for cf_add_incdir in $1
do
- while test $cf_add_incdir != /usr/include
+ while test "$cf_add_incdir" != /usr/include
do
- if test -d $cf_add_incdir
+ if test -d "$cf_add_incdir"
then
cf_have_incdir=no
if test -n "$CFLAGS$CPPFLAGS" ; then
# a loop is needed to ensure we can add subdirs of existing dirs
for cf_test_incdir in $CFLAGS $CPPFLAGS ; do
if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then
cf_have_incdir=yes; break
fi
done
fi
if test "$cf_have_incdir" = no ; then
if test "$cf_add_incdir" = /usr/local/include ; then
if test "$GCC" = yes
then
cf_save_CPPFLAGS=$CPPFLAGS
CF_APPEND_TEXT(CPPFLAGS,-I$cf_add_incdir)
AC_TRY_COMPILE([#include <stdio.h>],
[printf("Hello")],
[],
[cf_have_incdir=yes])
CPPFLAGS=$cf_save_CPPFLAGS
fi
fi
fi
if test "$cf_have_incdir" = no ; then
CF_VERBOSE(adding $cf_add_incdir to include-path)
ifelse([$2],,CPPFLAGS,[$2])="$ifelse([$2],,CPPFLAGS,[$2]) -I$cf_add_incdir"
- cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'`
+ cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'`
test "$cf_top_incdir" = "$cf_add_incdir" && break
cf_add_incdir="$cf_top_incdir"
else
break
fi
else
break
fi
done
done
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_ADD_LIB version: 2 updated: 2010/06/02 05:03:05
dnl ----------
dnl Add a library, used to enforce consistency.
dnl
dnl $1 = library to add, without the "-l"
dnl $2 = variable to update (default $LIBS)
AC_DEFUN([CF_ADD_LIB],[CF_ADD_LIBS(-l$1,ifelse($2,,LIBS,[$2]))])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_ADD_LIBDIR version: 10 updated: 2015/04/18 08:56:57
+dnl CF_ADD_LIBDIR version: 11 updated: 2020/12/31 20:19:42
dnl -------------
dnl Adds to the library-path
dnl
dnl Some machines have trouble with multiple -L options.
dnl
dnl $1 is the (list of) directory(s) to add
dnl $2 is the optional name of the variable to update (default LDFLAGS)
dnl
AC_DEFUN([CF_ADD_LIBDIR],
[
if test -n "$1" ; then
for cf_add_libdir in $1
do
- if test $cf_add_libdir = /usr/lib ; then
+ if test "$cf_add_libdir" = /usr/lib ; then
:
- elif test -d $cf_add_libdir
+ elif test -d "$cf_add_libdir"
then
cf_have_libdir=no
if test -n "$LDFLAGS$LIBS" ; then
# a loop is needed to ensure we can add subdirs of existing dirs
for cf_test_libdir in $LDFLAGS $LIBS ; do
if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then
cf_have_libdir=yes; break
fi
done
fi
if test "$cf_have_libdir" = no ; then
CF_VERBOSE(adding $cf_add_libdir to library-path)
ifelse([$2],,LDFLAGS,[$2])="-L$cf_add_libdir $ifelse([$2],,LDFLAGS,[$2])"
fi
fi
done
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_ADD_LIBS version: 3 updated: 2019/11/02 16:47:33
dnl -----------
dnl Add one or more libraries, used to enforce consistency. Libraries are
dnl prepended to an existing list, since their dependencies are assumed to
dnl already exist in the list.
dnl
dnl $1 = libraries to add, with the "-l", etc.
dnl $2 = variable to update (default $LIBS)
AC_DEFUN([CF_ADD_LIBS],[
cf_add_libs="[$]ifelse($2,,LIBS,[$2])"
# reverse order
cf_add_0lib=
for cf_add_1lib in $1; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
ifelse($2,,LIBS,[$2])="$cf_add_libs"
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_ADD_SUBDIR_PATH version: 4 updated: 2013/10/08 17:47:05
+dnl CF_ADD_SUBDIR_PATH version: 5 updated: 2020/12/31 20:19:42
dnl ------------------
dnl Append to a search-list for a nonstandard header/lib-file
dnl $1 = the variable to return as result
dnl $2 = the package name
dnl $3 = the subdirectory, e.g., bin, include or lib
dnl $4 = the directory under which we will test for subdirectories
dnl $5 = a directory that we do not want $4 to match
AC_DEFUN([CF_ADD_SUBDIR_PATH],
[
test "x$4" != "x$5" && \
test -d "$4" && \
-ifelse([$5],NONE,,[(test -z "$5" || test x$5 = xNONE || test "x$4" != "x$5") &&]) {
+ifelse([$5],NONE,,[{ test -z "$5" || test "x$5" = xNONE || test "x$4" != "x$5"; } &&]) {
test -n "$verbose" && echo " ... testing for $3-directories under $4"
- test -d $4/$3 && $1="[$]$1 $4/$3"
- test -d $4/$3/$2 && $1="[$]$1 $4/$3/$2"
- test -d $4/$3/$2/$3 && $1="[$]$1 $4/$3/$2/$3"
- test -d $4/$2/$3 && $1="[$]$1 $4/$2/$3"
- test -d $4/$2/$3/$2 && $1="[$]$1 $4/$2/$3/$2"
+ test -d "$4/$3" && $1="[$]$1 $4/$3"
+ test -d "$4/$3/$2" && $1="[$]$1 $4/$3/$2"
+ test -d "$4/$3/$2/$3" && $1="[$]$1 $4/$3/$2/$3"
+ test -d "$4/$2/$3" && $1="[$]$1 $4/$2/$3"
+ test -d "$4/$2/$3/$2" && $1="[$]$1 $4/$2/$3/$2"
}
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_APPEND_TEXT version: 1 updated: 2017/02/25 18:58:55
dnl --------------
dnl use this macro for appending text without introducing an extra blank at
dnl the beginning
define([CF_APPEND_TEXT],
[
test -n "[$]$1" && $1="[$]$1 "
$1="[$]{$1}$2"
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_ARG_DISABLE version: 3 updated: 1999/03/30 17:24:31
dnl --------------
dnl Allow user to disable a normally-on option.
AC_DEFUN([CF_ARG_DISABLE],
[CF_ARG_OPTION($1,[$2],[$3],[$4],yes)])dnl
dnl ---------------------------------------------------------------------------
dnl CF_ARG_ENABLE version: 3 updated: 1999/03/30 17:24:31
dnl -------------
dnl Allow user to enable a normally-off option.
AC_DEFUN([CF_ARG_ENABLE],
[CF_ARG_OPTION($1,[$2],[$3],[$4],no)])dnl
dnl ---------------------------------------------------------------------------
dnl CF_ARG_OPTION version: 5 updated: 2015/05/10 19:52:14
dnl -------------
dnl Restricted form of AC_ARG_ENABLE that ensures user doesn't give bogus
dnl values.
dnl
dnl Parameters:
dnl $1 = option name
dnl $2 = help-string
dnl $3 = action to perform if option is not default
dnl $4 = action if perform if option is default
dnl $5 = default option value (either 'yes' or 'no')
AC_DEFUN([CF_ARG_OPTION],
[AC_ARG_ENABLE([$1],[$2],[test "$enableval" != ifelse([$5],no,yes,no) && enableval=ifelse([$5],no,no,yes)
if test "$enableval" != "$5" ; then
ifelse([$3],,[ :]dnl
,[ $3]) ifelse([$4],,,[
else
$4])
fi],[enableval=$5 ifelse([$4],,,[
$4
])dnl
])])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_AR_FLAGS version: 6 updated: 2015/10/10 15:25:05
+dnl CF_AR_FLAGS version: 9 updated: 2021/01/01 13:31:04
dnl -----------
dnl Check for suitable "ar" (archiver) options for updating an archive.
dnl
dnl In particular, handle some obsolete cases where the "-" might be omitted,
dnl as well as a workaround for breakage of make's archive rules by the GNU
dnl binutils "ar" program.
AC_DEFUN([CF_AR_FLAGS],[
AC_REQUIRE([CF_PROG_AR])
AC_CACHE_CHECK(for options to update archives, cf_cv_ar_flags,[
- cf_cv_ar_flags=unknown
- for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv
- do
+ case "$cf_cv_system_name" in
+ (*-msvc*)
+ cf_cv_ar_flags=''
+ cat >mk_static_lib.sh <<-EOF
+ #!$SHELL
+ MSVC_BIN="[$]AR"
+ out="\[$]1"
+ shift
+ exec \[$]MSVC_BIN -out:"\[$]out" \[$]@
+ EOF
+ chmod +x mk_static_lib.sh
+ AR=`pwd`/mk_static_lib.sh
+ ;;
+ (*)
+ cf_cv_ar_flags=unknown
+ for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv
+ do
- # check if $ARFLAGS already contains this choice
- if test "x$ARFLAGS" != "x" ; then
- cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"`
- if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then
- cf_cv_ar_flags=
- break
+ # check if $ARFLAGS already contains this choice
+ if test "x$ARFLAGS" != "x" ; then
+ cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"`
+ if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then
+ cf_cv_ar_flags=
+ break
+ fi
fi
- fi
- rm -f conftest.$ac_cv_objext
- rm -f conftest.a
+ rm -f "conftest.$ac_cv_objext"
+ rm -f conftest.a
- cat >conftest.$ac_ext <<EOF
+ cat >"conftest.$ac_ext" <<EOF
#line __oline__ "configure"
int testdata[[3]] = { 123, 456, 789 };
EOF
- if AC_TRY_EVAL(ac_compile) ; then
- echo "$AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext" >&AC_FD_CC
- $AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext 2>&AC_FD_CC 1>/dev/null
- if test -f conftest.a ; then
- cf_cv_ar_flags=$cf_ar_flags
+ if AC_TRY_EVAL(ac_compile) ; then
+ echo "$AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext" >&AC_FD_CC
+ $AR $ARFLAGS "$cf_ar_flags" conftest.a "conftest.$ac_cv_objext" 2>&AC_FD_CC 1>/dev/null
+ if test -f conftest.a ; then
+ cf_cv_ar_flags="$cf_ar_flags"
+ break
+ fi
+ else
+ CF_VERBOSE(cannot compile test-program)
break
fi
- else
- CF_VERBOSE(cannot compile test-program)
- break
- fi
- done
- rm -f conftest.a conftest.$ac_ext conftest.$ac_cv_objext
+ done
+ rm -f conftest.a "conftest.$ac_ext" "conftest.$ac_cv_objext"
+ ;;
+ esac
])
if test -n "$ARFLAGS" ; then
if test -n "$cf_cv_ar_flags" ; then
ARFLAGS="$ARFLAGS $cf_cv_ar_flags"
fi
else
ARFLAGS=$cf_cv_ar_flags
fi
AC_SUBST(ARFLAGS)
])
dnl ---------------------------------------------------------------------------
dnl CF_AWK_BIG_PRINTF version: 5 updated: 2015/04/17 21:13:04
dnl -----------------
dnl Check if awk can handle big strings using printf. Some older versions of
dnl awk choke on large strings passed via "%s".
dnl
dnl $1 = desired string size
dnl $2 = variable to set with result
AC_DEFUN([CF_AWK_BIG_PRINTF],
[
case x$AWK in
(x)
eval $2=no
;;
(*)
if ( ${AWK} 'BEGIN { xx = "x"; while (length(xx) < $1) { xx = xx "x"; }; printf("%s\n", xx); }' 2>/dev/null \
| $AWK '{ printf "%d\n", length([$]0); }' 2>/dev/null | $AWK 'BEGIN { eqls=0; recs=0; } { recs++; if ([$]0 == 12000) eqls++; } END { if (recs != 1 || eqls != 1) exit 1; }' 2>/dev/null >/dev/null ) ; then
eval $2=yes
else
eval $2=no
fi
;;
esac
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_BOOL_DECL version: 8 updated: 2004/01/30 15:51:18
dnl ------------
dnl Test if 'bool' is a builtin type in the configured C++ compiler. Some
dnl older compilers (e.g., gcc 2.5.8) don't support 'bool' directly; gcc
dnl 2.6.3 does, in anticipation of the ANSI C++ standard.
dnl
dnl Treat the configuration-variable specially here, since we're directly
dnl substituting its value (i.e., 1/0).
dnl
dnl $1 is the shell variable to store the result in, if not $cv_cv_builtin_bool
AC_DEFUN([CF_BOOL_DECL],
[
AC_MSG_CHECKING(if we should include stdbool.h)
AC_CACHE_VAL(cf_cv_header_stdbool_h,[
AC_TRY_COMPILE([],[bool foo = false],
[cf_cv_header_stdbool_h=0],
[AC_TRY_COMPILE([
#ifndef __BEOS__
#include <stdbool.h>
#endif
],[bool foo = false],
[cf_cv_header_stdbool_h=1],
[cf_cv_header_stdbool_h=0])])])
if test "$cf_cv_header_stdbool_h" = 1
then AC_MSG_RESULT(yes)
else AC_MSG_RESULT(no)
fi
AC_MSG_CHECKING([for builtin bool type])
AC_CACHE_VAL(ifelse($1,,cf_cv_builtin_bool,[$1]),[
AC_TRY_COMPILE([
#include <stdio.h>
#include <sys/types.h>
],[bool x = false],
[ifelse($1,,cf_cv_builtin_bool,[$1])=1],
[ifelse($1,,cf_cv_builtin_bool,[$1])=0])
])
if test "$ifelse($1,,cf_cv_builtin_bool,[$1])" = 1
then AC_MSG_RESULT(yes)
else AC_MSG_RESULT(no)
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_BOOL_SIZE version: 15 updated: 2017/01/21 11:06:25
+dnl CF_BOOL_SIZE version: 17 updated: 2020/10/24 19:48:55
dnl ------------
dnl Test for the size of 'bool' in the configured C++ compiler (e.g., a type).
dnl Don't bother looking for bool.h, since it's been deprecated.
dnl
dnl If the current compiler is C rather than C++, we get the bool definition
dnl from <stdbool.h>.
AC_DEFUN([CF_BOOL_SIZE],
[
-AC_MSG_CHECKING([for size of bool])
-AC_CACHE_VAL(cf_cv_type_of_bool,[
+AC_CHECK_SIZEOF(bool,,[
+#include <stdlib.h>
+#include <stdio.h>
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+])
+
+AC_CACHE_CHECK(for type of bool, cf_cv_type_of_bool,[
rm -f cf_test.out
AC_TRY_RUN([
#include <stdlib.h>
#include <stdio.h>
#if defined(__cplusplus)
#ifdef HAVE_GXX_BUILTIN_H
#include <g++/builtin.h>
#elif HAVE_GPP_BUILTIN_H
#include <gpp/builtin.h>
#elif HAVE_BUILTIN_H
#include <builtin.h>
#endif
#else
#if $cf_cv_header_stdbool_h
#include <stdbool.h>
#endif
#endif
int main(void)
{
FILE *fp = fopen("cf_test.out", "w");
if (fp != 0) {
bool x = true;
if ((bool)(-x) >= 0)
fputs("unsigned ", fp);
if (sizeof(x) == sizeof(int)) fputs("int", fp);
else if (sizeof(x) == sizeof(char)) fputs("char", fp);
else if (sizeof(x) == sizeof(short))fputs("short",fp);
else if (sizeof(x) == sizeof(long)) fputs("long", fp);
fclose(fp);
}
${cf_cv_main_return:-return}(0);
}
],
[cf_cv_type_of_bool=`cat cf_test.out`
if test -z "$cf_cv_type_of_bool"; then
cf_cv_type_of_bool=unknown
fi],
[cf_cv_type_of_bool=unknown],
- [cf_cv_type_of_bool=unknown])
- ])
+ [
+ case x$ac_cv_sizeof_bool in
+ (x1) cf_cv_type_of_bool="unsigned char";;
+ (x2) cf_cv_type_of_bool="unsigned short";;
+ (x4) cf_cv_type_of_bool="unsigned int";;
+ (x8) cf_cv_type_of_bool="unsigned long";;
+ (*) cf_cv_type_of_bool=unknown;;
+ esac
+ ])
rm -f cf_test.out
-AC_MSG_RESULT($cf_cv_type_of_bool)
+])
+
if test "$cf_cv_type_of_bool" = unknown ; then
case .$NCURSES_BOOL in
(.auto|.) NCURSES_BOOL=unsigned;;
esac
AC_MSG_WARN(Assuming $NCURSES_BOOL for type of bool)
cf_cv_type_of_bool=$NCURSES_BOOL
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_BUILD_CC version: 8 updated: 2018/01/04 20:31:04
+dnl CF_BUILD_CC version: 9 updated: 2021/01/02 09:31:20
dnl -----------
dnl If we're cross-compiling, allow the user to override the tools and their
dnl options. The configure script is oriented toward identifying the host
dnl compiler, etc., but we need a build compiler to generate parts of the
dnl source.
dnl
dnl $1 = default for $CPPFLAGS
dnl $2 = default for $LIBS
AC_DEFUN([CF_BUILD_CC],[
CF_ACVERSION_CHECK(2.52,,
[AC_REQUIRE([CF_PROG_EXT])])
if test "$cross_compiling" = yes ; then
# defaults that we might want to override
: ${BUILD_CFLAGS:=''}
: ${BUILD_CPPFLAGS:='ifelse([$1],,,[$1])'}
: ${BUILD_LDFLAGS:=''}
: ${BUILD_LIBS:='ifelse([$2],,,[$2])'}
: ${BUILD_EXEEXT:='$x'}
: ${BUILD_OBJEXT:='o'}
AC_ARG_WITH(build-cc,
[ --with-build-cc=XXX the build C compiler ($BUILD_CC)],
[BUILD_CC="$withval"],
[AC_CHECK_PROGS(BUILD_CC, [gcc clang c99 c89 cc cl],none)])
AC_MSG_CHECKING(for native build C compiler)
AC_MSG_RESULT($BUILD_CC)
AC_MSG_CHECKING(for native build C preprocessor)
AC_ARG_WITH(build-cpp,
[ --with-build-cpp=XXX the build C preprocessor ($BUILD_CPP)],
[BUILD_CPP="$withval"],
[BUILD_CPP='${BUILD_CC} -E'])
AC_MSG_RESULT($BUILD_CPP)
AC_MSG_CHECKING(for native build C flags)
AC_ARG_WITH(build-cflags,
[ --with-build-cflags=XXX the build C compiler-flags ($BUILD_CFLAGS)],
[BUILD_CFLAGS="$withval"])
AC_MSG_RESULT($BUILD_CFLAGS)
AC_MSG_CHECKING(for native build C preprocessor-flags)
AC_ARG_WITH(build-cppflags,
[ --with-build-cppflags=XXX the build C preprocessor-flags ($BUILD_CPPFLAGS)],
[BUILD_CPPFLAGS="$withval"])
AC_MSG_RESULT($BUILD_CPPFLAGS)
AC_MSG_CHECKING(for native build linker-flags)
AC_ARG_WITH(build-ldflags,
[ --with-build-ldflags=XXX the build linker-flags ($BUILD_LDFLAGS)],
[BUILD_LDFLAGS="$withval"])
AC_MSG_RESULT($BUILD_LDFLAGS)
AC_MSG_CHECKING(for native build linker-libraries)
AC_ARG_WITH(build-libs,
[ --with-build-libs=XXX the build libraries (${BUILD_LIBS})],
[BUILD_LIBS="$withval"])
AC_MSG_RESULT($BUILD_LIBS)
# this assumes we're on Unix.
BUILD_EXEEXT=
BUILD_OBJEXT=o
: ${BUILD_CC:='${CC}'}
- if ( test "$BUILD_CC" = "$CC" || test "$BUILD_CC" = '${CC}' ) ; then
+ if { test "$BUILD_CC" = "$CC" || test "$BUILD_CC" = '${CC}'; } ; then
AC_MSG_ERROR([Cross-build requires two compilers.
Use --with-build-cc to specify the native compiler.])
fi
else
: ${BUILD_CC:='${CC}'}
: ${BUILD_CPP:='${CPP}'}
: ${BUILD_CFLAGS:='${CFLAGS}'}
: ${BUILD_CPPFLAGS:='${CPPFLAGS}'}
: ${BUILD_LDFLAGS:='${LDFLAGS}'}
: ${BUILD_LIBS:='${LIBS}'}
: ${BUILD_EXEEXT:='$x'}
: ${BUILD_OBJEXT:='o'}
fi
AC_SUBST(BUILD_CC)
AC_SUBST(BUILD_CPP)
AC_SUBST(BUILD_CFLAGS)
AC_SUBST(BUILD_CPPFLAGS)
AC_SUBST(BUILD_LDFLAGS)
AC_SUBST(BUILD_LIBS)
AC_SUBST(BUILD_EXEEXT)
AC_SUBST(BUILD_OBJEXT)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_CC_ENV_FLAGS version: 9 updated: 2018/07/29 18:03:26
+dnl CF_CC_ENV_FLAGS version: 10 updated: 2020/12/31 18:40:20
dnl ---------------
dnl Check for user's environment-breakage by stuffing CFLAGS/CPPFLAGS content
dnl into CC. This will not help with broken scripts that wrap the compiler
dnl with options, but eliminates a more common category of user confusion.
dnl
dnl In particular, it addresses the problem of being able to run the C
dnl preprocessor in a consistent manner.
dnl
dnl Caveat: this also disallows blanks in the pathname for the compiler, but
dnl the nuisance of having inconsistent settings for compiler and preprocessor
dnl outweighs that limitation.
AC_DEFUN([CF_CC_ENV_FLAGS],
[
# This should have been defined by AC_PROG_CC
-: ${CC:=cc}
+: "${CC:=cc}"
AC_MSG_CHECKING(\$CFLAGS variable)
case "x$CFLAGS" in
(*-[[IUD]]*)
AC_MSG_RESULT(broken)
AC_MSG_WARN(your environment uses the CFLAGS variable to hold CPPFLAGS options)
cf_flags="$CFLAGS"
CFLAGS=
for cf_arg in $cf_flags
do
CF_ADD_CFLAGS($cf_arg)
done
;;
(*)
AC_MSG_RESULT(ok)
;;
esac
AC_MSG_CHECKING(\$CC variable)
case "$CC" in
(*[[\ \ ]]-*)
AC_MSG_RESULT(broken)
AC_MSG_WARN(your environment uses the CC variable to hold CFLAGS/CPPFLAGS options)
# humor him...
cf_prog=`echo "$CC" | sed -e 's/ / /g' -e 's/[[ ]]* / /g' -e 's/[[ ]]*[[ ]]-[[^ ]].*//'`
cf_flags=`echo "$CC" | ${AWK:-awk} -v prog="$cf_prog" '{ printf("%s", [substr]([$]0,1+length(prog))); }'`
CC="$cf_prog"
for cf_arg in $cf_flags
do
case "x$cf_arg" in
(x-[[IUDfgOW]]*)
CF_ADD_CFLAGS($cf_arg)
;;
(*)
CC="$CC $cf_arg"
;;
esac
done
CF_VERBOSE(resulting CC: '$CC')
CF_VERBOSE(resulting CFLAGS: '$CFLAGS')
CF_VERBOSE(resulting CPPFLAGS: '$CPPFLAGS')
;;
(*)
AC_MSG_RESULT(ok)
;;
esac
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_CFG_DEFAULTS version: 11 updated: 2015/04/17 21:13:04
+dnl CF_CFG_DEFAULTS version: 16 updated: 2021/01/04 19:33:05
dnl ---------------
dnl Determine the default configuration into which we'll install ncurses. This
dnl can be overridden by the user's command-line options. There's two items to
dnl look for:
dnl 1. the prefix (e.g., /usr)
dnl 2. the header files (e.g., /usr/include/ncurses)
dnl We'll look for a previous installation of ncurses and use the same defaults.
dnl
dnl We don't use AC_PREFIX_DEFAULT, because it gets evaluated too soon, and
dnl we don't use AC_PREFIX_PROGRAM, because we cannot distinguish ncurses's
dnl programs from a vendor's.
AC_DEFUN([CF_CFG_DEFAULTS],
-[
+[AC_REQUIRE([AC_PROG_FGREP])dnl
+
AC_MSG_CHECKING(for prefix)
if test "x$prefix" = "xNONE" ; then
case "$cf_cv_system_name" in
# non-vendor systems don't have a conflict
(openbsd*|freebsd*|mirbsd*|linux*|cygwin*|msys*|k*bsd*-gnu|mingw*)
prefix=/usr
;;
(*) prefix=$ac_default_prefix
;;
esac
fi
AC_MSG_RESULT($prefix)
if test "x$prefix" = "xNONE" ; then
AC_MSG_CHECKING(for default include-directory)
test -n "$verbose" && echo 1>&AC_FD_MSG
for cf_symbol in \
- $includedir \
- $includedir/ncurses \
- $prefix/include \
- $prefix/include/ncurses \
+ "$includedir" \
+ "$includedir/ncurses" \
+ "$prefix/include" \
+ "$prefix/include/ncurses" \
/usr/local/include \
/usr/local/include/ncurses \
/usr/include \
/usr/include/ncurses
do
- cf_dir=`eval echo $cf_symbol`
- if test -f $cf_dir/curses.h ; then
- if ( fgrep NCURSES_VERSION $cf_dir/curses.h 2>&1 >/dev/null ) ; then
+ cf_dir=`eval echo "$cf_symbol"`
+ if test -f "$cf_dir/curses.h" ; then
+ if ( ${FGREP-fgrep} NCURSES_VERSION "$cf_dir/curses.h" >/dev/null 2>&1 ) ; then
includedir="$cf_symbol"
- test -n "$verbose" && echo $ac_n " found " 1>&AC_FD_MSG
+ test -n "$verbose" && echo $ECHO_N " found " 1>&AC_FD_MSG
break
fi
fi
test -n "$verbose" && echo " tested $cf_dir" 1>&AC_FD_MSG
done
AC_MSG_RESULT($includedir)
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_CGETENT version: 6 updated: 2017/01/21 11:06:25
dnl ----------
dnl Check if the terminal-capability database functions are available. If not,
dnl ncurses has a much-reduced version.
AC_DEFUN([CF_CGETENT],[
AC_CACHE_CHECK(for terminal-capability database functions,cf_cv_cgetent,[
AC_TRY_LINK([
#include <stdlib.h>],[
char temp[128];
char *buf = temp;
char *db_array = temp;
cgetent(&buf, &db_array, "vt100");
cgetcap(buf, "tc", '=');
cgetmatch(buf, "tc");
],
[cf_cv_cgetent=yes],
[cf_cv_cgetent=no])
])
if test "$cf_cv_cgetent" = yes
then
AC_DEFINE(HAVE_BSD_CGETENT,1,[Define to 1 if we have BSD cgetent])
AC_CACHE_CHECK(if cgetent uses const parameter,cf_cv_cgetent_const,[
AC_TRY_LINK([
#pragma GCC diagnostic error "-Wincompatible-pointer-types-discards-qualifiers"
#include <stdlib.h>],[
char temp[128];
char *buf = temp;
#ifndef _NETBSD_SOURCE /* given, since April 2004 in stdlib.h */
const char *db_array = temp;
cgetent(&buf, &db_array, "vt100");
#endif
cgetcap(buf, "tc", '=');
cgetmatch(buf, "tc");
],
[cf_cv_cgetent_const=yes],
[cf_cv_cgetent_const=no])
])
if test "$cf_cv_cgetent_const" = yes
then
AC_DEFINE_UNQUOTED(CGETENT_CONST,const,[Define to const if needed for some BSD cgetent variations])
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_CHECK_CACHE version: 12 updated: 2012/10/02 20:55:03
+dnl CF_CHECK_CACHE version: 13 updated: 2020/12/31 10:54:15
dnl --------------
dnl Check if we're accidentally using a cache from a different machine.
dnl Derive the system name, as a check for reusing the autoconf cache.
dnl
dnl If we've packaged config.guess and config.sub, run that (since it does a
dnl better job than uname). Normally we'll use AC_CANONICAL_HOST, but allow
dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM
dnl which is useful in cross-compiles.
dnl
dnl Note: we would use $ac_config_sub, but that is one of the places where
dnl autoconf 2.5x broke compatibility with autoconf 2.13
AC_DEFUN([CF_CHECK_CACHE],
[
-if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then
+if test -f "$srcdir/config.guess" || test -f "$ac_aux_dir/config.guess" ; then
ifelse([$1],,[AC_CANONICAL_HOST],[$1])
system_name="$host_os"
else
system_name="`(uname -s -r) 2>/dev/null`"
if test -z "$system_name" ; then
system_name="`(hostname) 2>/dev/null`"
fi
fi
test -n "$system_name" && AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$system_name",[Define to the system name.])
AC_CACHE_VAL(cf_cv_system_name,[cf_cv_system_name="$system_name"])
test -z "$system_name" && system_name="$cf_cv_system_name"
test -n "$cf_cv_system_name" && AC_MSG_RESULT(Configuring for $cf_cv_system_name)
if test ".$system_name" != ".$cf_cv_system_name" ; then
AC_MSG_RESULT(Cached system name ($system_name) does not agree with actual ($cf_cv_system_name))
AC_MSG_ERROR("Please remove config.cache and try again.")
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_CHECK_ENVIRON version: 3 updated: 2010/05/26 16:44:57
dnl ----------------
dnl Check for data that is usually declared in <unistd.h>, e.g., the 'environ'
dnl variable. Define a DECL_xxx symbol if we must declare it ourselves.
dnl
dnl $1 = the name to check
dnl $2 = the assumed type
AC_DEFUN([CF_CHECK_ENVIRON],
[
AC_CACHE_CHECK(if external $1 is declared, cf_cv_dcl_$1,[
AC_TRY_COMPILE([
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#include <unistd.h> ],
ifelse([$2],,int,[$2]) x = (ifelse([$2],,int,[$2])) $1,
[cf_cv_dcl_$1=yes],
[cf_cv_dcl_$1=no])
])
if test "$cf_cv_dcl_$1" = no ; then
CF_UPPER(cf_result,decl_$1)
AC_DEFINE_UNQUOTED($cf_result)
fi
# It's possible (for near-UNIX clones) that the data doesn't exist
CF_CHECK_EXTERN_DATA($1,ifelse([$2],,int,[$2]))
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_CHECK_ERRNO version: 12 updated: 2015/04/18 08:56:57
+dnl CF_CHECK_ERRNO version: 13 updated: 2020/03/10 18:53:47
dnl --------------
dnl Check for data that is usually declared in <stdio.h> or <errno.h>, e.g.,
dnl the 'errno' variable. Define a DECL_xxx symbol if we must declare it
dnl ourselves.
dnl
dnl $1 = the name to check
dnl $2 = the assumed type
AC_DEFUN([CF_CHECK_ERRNO],
[
AC_CACHE_CHECK(if external $1 is declared, cf_cv_dcl_$1,[
AC_TRY_COMPILE([
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#include <stdio.h>
#include <sys/types.h>
#include <errno.h> ],
- ifelse([$2],,int,[$2]) x = (ifelse([$2],,int,[$2])) $1,
+ ifelse([$2],,int,[$2]) x = (ifelse([$2],,int,[$2])) $1; (void)x,
[cf_cv_dcl_$1=yes],
[cf_cv_dcl_$1=no])
])
if test "$cf_cv_dcl_$1" = no ; then
CF_UPPER(cf_result,decl_$1)
AC_DEFINE_UNQUOTED($cf_result)
fi
# It's possible (for near-UNIX clones) that the data doesn't exist
CF_CHECK_EXTERN_DATA($1,ifelse([$2],,int,[$2]))
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_CHECK_EXTERN_DATA version: 4 updated: 2015/04/18 08:56:57
dnl --------------------
dnl Check for existence of external data in the current set of libraries. If
dnl we can modify it, it's real enough.
dnl $1 = the name to check
dnl $2 = its type
AC_DEFUN([CF_CHECK_EXTERN_DATA],
[
AC_CACHE_CHECK(if external $1 exists, cf_cv_have_$1,[
AC_TRY_LINK([
#undef $1
extern $2 $1;
],
[$1 = 2],
[cf_cv_have_$1=yes],
[cf_cv_have_$1=no])
])
if test "$cf_cv_have_$1" = yes ; then
CF_UPPER(cf_result,have_$1)
AC_DEFINE_UNQUOTED($cf_result)
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_CHECK_GETENV version: 1 updated: 2019/06/23 15:28:15
+dnl CF_CHECK_FVISIBILITY version: 2 updated: 2020/04/04 16:16:13
+dnl --------------------
+dnl Check whether the compiler understands -fvisibility=hidden
+dnl
+dnl $1 = compiler
+dnl $2 = compiler-flags variable name
+dnl $3 = cache variable to set
+AC_DEFUN([CF_CHECK_FVISIBILITY],[
+AC_CACHE_CHECK(if $1 -fvisibility=hidden option works,$3,[
+ cf_save_cflags="[$]$2"
+ $2="[$]$2 -fvisibility=hidden"
+ AC_TRY_LINK([
+__attribute__ ((visibility("default"))) int somefunc() {return 42;}
+ ],[
+ if (somefunc()) return 1;
+],
+ [$3=yes],
+ [$3=no])
+ $2=$cf_save_cflags
+])
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_CHECK_GETENV version: 2 updated: 2021/01/02 17:09:14
dnl ---------------
dnl Check if repeated getenv calls return the same pointer, e.g., it does not
dnl discard the previous pointer when returning a new one.
AC_DEFUN([CF_CHECK_GETENV],
[
AC_REQUIRE([CF_CHECK_ENVIRON])
AC_CHECK_FUNC( getenv, ,, AC_MSG_ERROR(getenv not found) )
AC_CHECK_FUNCS( putenv setenv strdup )
AC_CACHE_CHECK(if getenv returns consistent values,cf_cv_consistent_getenv,[
AC_TRY_RUN([
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#if defined(HAVE_ENVIRON) && defined(DECL_ENVIRON) && !defined(environ)
extern char **environ; /* POSIX, but some systems are not... */
#endif
#if defined(HAVE_STRDUP)
#define str_alloc(s) strdup(s)
#else
#define str_alloc(s) strcpy(malloc(strlen(s) + 1, s))
#endif
static void set_value(const char *name, const char *value)
{
#if defined(HAVE_SETENV)
setenv(name, value, 1);
#elif defined(HAVE_PUTENV)
char buffer[1024];
sprintf(buffer, "%s=%s", name, value);
putenv(str_alloc(buffer));
#else
#error neither putenv/setenv found
#endif
}
int main(void)
{
int pass;
size_t numenv, limit, j;
char **mynames;
char **myvalues;
char **mypointer;
char *equals;
for (numenv = 0; environ[numenv]; ++numenv) ;
limit = numenv + 10;
mynames = (char **) calloc(limit + 1, sizeof(char *));
myvalues = (char **) calloc(limit + 1, sizeof(char *));
mypointer = (char **) calloc(limit + 1, sizeof(char *));
#if defined(HAVE_ENVIRON)
for (j = 0; environ[j]; ++j) {
mynames[j] = str_alloc(environ[j]);
equals = strchr(mynames[j], '=');
if (equals != 0) {
- *equals++ = '\0';
+ *equals++ = '\\0';
myvalues[j] = str_alloc(equals);
} else {
myvalues[j] = str_alloc("");
}
}
#endif
for (j = numenv; j < limit; ++j) {
char name[80];
char value[80];
size_t found;
size_t k = 0;
do {
size_t jk;
found = 0;
sprintf(name, "TERM%lu", (unsigned long) k);
for (jk = 0; jk < j; ++jk) {
if (!strcmp(name, mynames[jk])) {
found = 1;
++k;
break;
}
}
} while (found);
sprintf(value, "%lu:%p", (unsigned long) k, &mynames[j]);
set_value(name, value);
mynames[j] = str_alloc(name);
myvalues[j] = str_alloc(value);
}
for (pass = 0; pass < 3; ++pass) {
for (j = 0; j < limit; ++j) {
char *value = getenv(mynames[j]);
if (pass) {
if (value == 0) {
- fprintf(stderr, "getenv returned null for %s\n", mynames[j]);
+ fprintf(stderr, "getenv returned null for %s\\n", mynames[j]);
${cf_cv_main_return:-return}(1);
} else if (value != mypointer[j]) {
- fprintf(stderr, "getenv returned different pointer for %s\n", mynames[j]);
+ fprintf(stderr, "getenv returned different pointer for %s\\n", mynames[j]);
${cf_cv_main_return:-return}(1);
} else if (strcmp(value, myvalues[j])) {
- fprintf(stderr, "getenv returned different value for %s\n", mynames[j]);
+ fprintf(stderr, "getenv returned different value for %s\\n", mynames[j]);
${cf_cv_main_return:-return}(1);
}
} else {
size_t k;
mypointer[j] = value;
for (k = 0; k < j; ++k) {
if (mypointer[j] == mypointer[k]) {
- fprintf(stderr, "getenv returned same pointer for %s and %s\n", mynames[j], mynames[k]);
+ fprintf(stderr, "getenv returned same pointer for %s and %s\\n", mynames[j], mynames[k]);
${cf_cv_main_return:-return}(1);
}
}
}
}
}
${cf_cv_main_return:-return}(0);
}
],
[cf_cv_consistent_getenv=yes],
[cf_cv_consistent_getenv=no],
[cf_cv_consistent_getenv=unknown])
])
if test "x$cf_cv_consistent_getenv" = xno
then
AC_DEFINE(HAVE_CONSISTENT_GETENV,1,[Define to 1 if getenv repeatably returns the same value for a given name])
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_CHECK_GNAT_VERSION version: 2 updated: 2019/12/31 08:53:54
+dnl CF_CHECK_GNAT_VERSION version: 4 updated: 2021/01/01 13:31:04
dnl ---------------------
AC_DEFUN([CF_CHECK_GNAT_VERSION],
[
AC_REQUIRE([CF_GNAT_VERSION])
-case $cf_cv_gnat_version in
-(3.1[[1-9]]*|3.[[2-9]]*|[[4-9]].*|20[[0-9]][[0-9]])
+case "$cf_cv_gnat_version" in
+(3.1[[1-9]]*|3.[[2-9]]*|[[4-9]].*|[[1-9]][[0-9]].[[0-9]]*|20[[0-9]][[0-9]])
cf_cv_prog_gnat_correct=yes
;;
(*)
AC_MSG_WARN(Unsupported GNAT version $cf_cv_gnat_version. We require 3.11 or better. Disabling Ada95 binding.)
cf_cv_prog_gnat_correct=no
;;
esac
])
dnl ---------------------------------------------------------------------------
-dnl CF_CHECK_GPM_WGETCH version: 3 updated: 2017/01/21 11:06:25
+dnl CF_CHECK_GPM_WGETCH version: 6 updated: 2021/01/04 18:48:01
dnl -------------------
dnl Check if GPM is already linked with curses. If so - and if the linkage
dnl is not "weak" - warn about this because it can create problems linking
dnl applications with ncurses.
AC_DEFUN([CF_CHECK_GPM_WGETCH],[
+AC_REQUIRE([AC_PROG_EGREP])dnl
+
AC_CHECK_LIB(gpm,Gpm_Wgetch,[
AC_CACHE_CHECK(if GPM is weakly bound to curses library, cf_cv_check_gpm_wgetch,[
cf_cv_check_gpm_wgetch=unknown
if test "$cross_compiling" != yes ; then
cat >conftest.$ac_ext <<CF_EOF
#include <gpm.h>
int main(void)
{
Gpm_Wgetch();
${cf_cv_main_return:-return}(0);
}
CF_EOF
cf_save_LIBS="$LIBS"
# This only works if we can look at the symbol table. If a shared
# library is stripped for install, we cannot use that. So we're forced
# to rely on the static library, noting that some packagers may not
# include it.
LIBS="-static -lgpm -dynamic $LIBS"
if AC_TRY_EVAL(ac_compile) ; then
if AC_TRY_EVAL(ac_link) ; then
- cf_cv_check_gpm_wgetch=`nm conftest$ac_exeext | egrep '\<wgetch\>' | egrep '\<[[vVwW]]\>'`
+ cf_cv_check_gpm_wgetch="`nm \"conftest$ac_exeext\" | ${EGREP-egrep} '\<wgetch\>' | ${EGREP-egrep} '\<[[vVwW]]\>'`"
test -n "$cf_cv_check_gpm_wgetch" && cf_cv_check_gpm_wgetch=yes
test -z "$cf_cv_check_gpm_wgetch" && cf_cv_check_gpm_wgetch=no
fi
fi
- rm -rf conftest*
+ rm -rf ./conftest*
LIBS="$cf_save_LIBS"
fi
])
if test "$cf_cv_check_gpm_wgetch" != yes ; then
AC_MSG_WARN(GPM library is already linked with curses - read the FAQ)
fi
])])dnl
dnl ---------------------------------------------------------------------------
dnl CF_CHECK_LIBTOOL_VERSION version: 1 updated: 2013/04/06 18:03:09
dnl ------------------------
dnl Show the version of libtool
dnl
dnl Save the version in a cache variable - this is not entirely a good thing,
dnl but the version string from libtool is very ugly, and for bug reports it
dnl might be useful to have the original string.
AC_DEFUN([CF_CHECK_LIBTOOL_VERSION],[
if test -n "$LIBTOOL" && test "$LIBTOOL" != none
then
AC_MSG_CHECKING(version of $LIBTOOL)
CF_LIBTOOL_VERSION
AC_MSG_RESULT($cf_cv_libtool_version)
if test -z "$cf_cv_libtool_version" ; then
AC_MSG_ERROR(This is not GNU libtool)
fi
else
AC_MSG_ERROR(GNU libtool has not been found)
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_CHECK_WCHAR_H version: 2 updated: 2017/01/21 11:06:25
+dnl CF_CHECK_WCHAR_H version: 3 updated: 2021/01/01 13:31:04
dnl ----------------
dnl Check if wchar.h can be used, i.e., without defining _XOPEN_SOURCE_EXTENDED
AC_DEFUN([CF_CHECK_WCHAR_H],[
AC_CHECK_HEADERS( \
wchar.h \
wctype.h \
)
AC_CACHE_CHECK(if wchar.h can be used as is,cf_cv_wchar_h_okay,[
AC_TRY_COMPILE(
[
#include <stdlib.h>
#ifdef HAVE_WCHAR_H
#include <wchar.h>
#endif
#ifdef HAVE_WCTYPE_H
#include <wctype.h>
#endif
],[
wint_t foo = 0;
int bar = iswpunct(foo)],
[cf_cv_wchar_h_okay=yes],
[cf_cv_wchar_h_okay=no])])
-if test $cf_cv_wchar_h_okay = no
+if test "$cf_cv_wchar_h_okay" = no
then
CF_PREDEFINE(_XOPEN_SOURCE_EXTENDED)
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_CHECK_WCWIDTH_GRAPHICS version: 1 updated: 2015/12/19 17:47:56
+dnl CF_CHECK_WCWIDTH_GRAPHICS version: 2 updated: 2021/01/02 17:09:14
dnl -------------------------
dnl Most "modern" terminal emulators are based to some degree on VT100, and
dnl should support line-drawing. Even with Unicode. There is a problem.
dnl
dnl While most of the VT100 graphics characters were incorporated into Unicode,
dnl all of those were combined into a page of useful graphics characters.
dnl
dnl So far, so good.
dnl
dnl However, while they are useful, there are other considerations. CJK
dnl is (because of poor device resolution) often rendered as double-width
dnl characters. So... for these generally-useful characters, what should
dnl be the width (to make them consistent with adjacent characters)?
dnl
dnl The obvious choice would have been to make this locale-dependent, and use
dnl wcwidth() to tell applications what the actual width is. That was too
dnl obvious. Instead, we have a slew of "ambiguous-width" characters.
dnl See for example
dnl http://www.unicode.org/reports/tr11/tr11-29.html
dnl http://www.cl.cam.ac.uk/~mgk25/ucs/scw-proposal.html
dnl
dnl The EastAsianWidth-6.2.0.txt file from the Unicode organization lists
dnl more than 22,000 characters, with 1281 of those as ambiguous-width. For
dnl instance, it lists half (44/96) of the Latin-1 characters as
dnl ambiguous-width. Also, all of the box-characters at 0x2500 are ambiguous.
dnl
dnl What this means for the implementor is that on some systems wcwidth() can
dnl give bad advice. On Solaris, some of the ambiguous widths are returned as
dnl 1 (the Latin-1 characters), while others are returned as 2 (line-drawing
dnl characters). These do not necessarily match the behavior of the terminal
dnl emulator. xterm, for instance, does an optional startup check to find if
dnl this problem (or similar) exists with the system's locale tables, rejecting
dnl them if they are too unreliable.
AC_DEFUN([CF_CHECK_WCWIDTH_GRAPHICS],[
AC_CACHE_CHECK(if wcwidth agrees graphics are single-width, cf_cv_wcwidth_graphics,[
cat >conftest.in <<CF_EOF
- VT100 symbols
0x250c upper left corner
0x2514 lower left corner
0x2510 upper right corner
0x2518 lower right corner
0x251c tee pointing left
0x2524 tee pointing right
0x2534 tee pointing up
0x252c tee pointing down
0x2500 horizontal line
0x2502 vertical line
0x253c large plus or crossover
0x23ba scan line 1
0x23bd scan line 9
0x25c6 diamond
0x2592 checker board (stipple)
0x00b0 degree symbol
0x00b1 plus/minus
0x00b7 bullet
- Teletype 5410v1 symbols
0x2190 arrow pointing left
0x2192 arrow pointing right
0x2193 arrow pointing down
0x2191 arrow pointing up
0x2592 board of squares
0x2603 lantern symbol
0x25ae solid square block
- these defaults were invented for ncurses
0x23bb scan line 3
0x23bc scan line 7
0x2264 less-than-or-equal-to
0x2265 greater-than-or-equal-to
0x03c0 greek pi
0x2260 not-equal
0x00a3 pound-sterling symbol
- thick-line-drawing
0x250f upper left corner
0x2517 lower left corner
0x2513 upper right corner
0x251b lower right corner
0x2523 tee pointing left
0x252b tee pointing right
0x253b tee pointing up
0x2533 tee pointing down
0x2501 horizontal line
0x2503 vertical line
0x254b large plus or crossover
- double-line-drawing
0x2554 upper left corner
0x255a lower left corner
0x2557 upper right corner
0x255d lower right corner
0x2563 tee pointing left
0x2560 tee pointing right
0x2569 tee pointing up
0x2566 tee pointing down
0x2550 horizontal line
0x2551 vertical line
0x256c large plus or crossover
CF_EOF
AC_TRY_RUN([
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
#define MY_LEN 80
int
main(void)
{
FILE *fp;
int value;
char buffer[MY_LEN + 1];
char notes[MY_LEN + 1];
int totals = 0;
int passed = 0;
if (setlocale(LC_ALL, "en_US.UTF8") ||
setlocale(LC_ALL, "en_US.UTF-8") ||
setlocale(LC_ALL, "en_US.utf8") ||
setlocale(LC_ALL, "en_US.utf-8")) {
if ((fp = fopen("conftest.in", "r")) != 0) {
while (fgets(buffer, MY_LEN, fp) != 0) {
if (*buffer == '-') {
- fprintf(stderr, "\t%s", buffer);
+ fprintf(stderr, "\\t%s", buffer);
} else if (sscanf(buffer, "%x %s", &value, notes) == 2) {
++totals;
if (wcwidth(value) == 1)
++passed;
- fprintf(stderr, "%d\t%s", wcwidth(value), buffer);
+ fprintf(stderr, "%d\\t%s", wcwidth(value), buffer);
} else {
- fprintf(stderr, "?\t%s", buffer);
+ fprintf(stderr, "?\\t%s", buffer);
}
}
}
}
- fprintf(stderr, "%d/%d passed wcwidth/graphics check\n", passed, totals);
+ fprintf(stderr, "%d/%d passed wcwidth/graphics check\\n", passed, totals);
return (totals == passed) ? 0 : 1;
}
],
[cf_cv_wcwidth_graphics=yes],
[cf_cv_wcwidth_graphics=no],
[cf_cv_wcwidth_graphics=unknown])
])
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_CLANG_COMPILER version: 2 updated: 2013/11/19 19:23:35
+dnl CF_CLANG_COMPILER version: 8 updated: 2021/01/01 13:31:04
dnl -----------------
dnl Check if the given compiler is really clang. clang's C driver defines
dnl __GNUC__ (fooling the configure script into setting $GCC to yes) but does
dnl not ignore some gcc options.
dnl
dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to
dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from
dnl the wrappers for gcc and g++ warnings.
dnl
dnl $1 = GCC (default) or GXX
dnl $2 = CLANG_COMPILER (default)
dnl $3 = CFLAGS (default) or CXXFLAGS
AC_DEFUN([CF_CLANG_COMPILER],[
ifelse([$2],,CLANG_COMPILER,[$2])=no
if test "$ifelse([$1],,[$1],GCC)" = yes ; then
AC_MSG_CHECKING(if this is really Clang ifelse([$1],GXX,C++,C) compiler)
cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])"
- ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -Qunused-arguments"
AC_TRY_COMPILE([],[
#ifdef __clang__
#else
make an error
#endif
],[ifelse([$2],,CLANG_COMPILER,[$2])=yes
-cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments"
],[])
ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS"
AC_MSG_RESULT($ifelse([$2],,CLANG_COMPILER,[$2]))
fi
+
+CLANG_VERSION=none
+
+if test "x$ifelse([$2],,CLANG_COMPILER,[$2])" = "xyes" ; then
+ case "$CC" in
+ (c[[1-9]][[0-9]]|*/c[[1-9]][[0-9]])
+ AC_MSG_WARN(replacing broken compiler alias $CC)
+ CFLAGS="$CFLAGS -std=`echo "$CC" | sed -e 's%.*/%%'`"
+ CC=clang
+ ;;
+ esac
+
+ AC_MSG_CHECKING(version of $CC)
+ CLANG_VERSION="`$CC --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(CLANG[[^)]]*) //' -e 's/^.*(Debian[[^)]]*) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`"
+ test -z "$CLANG_VERSION" && CLANG_VERSION=unknown
+ AC_MSG_RESULT($CLANG_VERSION)
+
+ for cf_clang_opt in \
+ -Qunused-arguments \
+ -Wno-error=implicit-function-declaration
+ do
+ AC_MSG_CHECKING(if option $cf_clang_opt works)
+ cf_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $cf_clang_opt"
+ AC_TRY_LINK([
+ #include <stdio.h>],[
+ printf("hello!\\n");],[
+ cf_clang_optok=yes],[
+ cf_clang_optok=no])
+ AC_MSG_RESULT($cf_clang_optok)
+ CFLAGS="$cf_save_CFLAGS"
+ if test "$cf_clang_optok" = yes; then
+ CF_VERBOSE(adding option $cf_clang_opt)
+ CF_APPEND_TEXT(CFLAGS,$cf_clang_opt)
+ fi
+ done
+fi
])
dnl ---------------------------------------------------------------------------
-dnl CF_CONST_X_STRING version: 3 updated: 2020/01/11 18:39:22
+dnl CF_CONST_X_STRING version: 6 updated: 2021/01/01 13:31:04
dnl -----------------
dnl The X11R4-X11R6 Xt specification uses an ambiguous String type for most
dnl character-strings.
dnl
dnl It is ambiguous because the specification accommodated the pre-ANSI
dnl compilers bundled by more than one vendor in lieu of providing a standard C
dnl compiler other than by costly add-ons. Because of this, the specification
dnl did not take into account the use of const for telling the compiler that
dnl string literals would be in readonly memory.
dnl
dnl As a workaround, one could (starting with X11R5) define XTSTRINGDEFINES, to
-dnl let the compiler decide how to represent Xt's strings which were #define'd.
+dnl let the compiler decide how to represent Xt's strings which were #define'd.
dnl That does not solve the problem of using the block of Xt's strings which
dnl are compiled into the library (and is less efficient than one might want).
dnl
dnl Xt specification 7 introduces the _CONST_X_STRING symbol which is used both
dnl when compiling the library and compiling using the library, to tell the
dnl compiler that String is const.
AC_DEFUN([CF_CONST_X_STRING],
[
AC_REQUIRE([AC_PATH_XTRA])
CF_SAVE_XTRA_FLAGS([CF_CONST_X_STRING])
AC_TRY_COMPILE(
[
#include <stdlib.h>
#include <X11/Intrinsic.h>
],
-[String foo = malloc(1)],[
+[String foo = malloc(1); (void)foo],[
AC_CACHE_CHECK(for X11/Xt const-feature,cf_cv_const_x_string,[
AC_TRY_COMPILE(
[
#define _CONST_X_STRING /* X11R7.8 (perhaps) */
#undef XTSTRINGDEFINES /* X11R5 and later */
#include <stdlib.h>
#include <X11/Intrinsic.h>
],[String foo = malloc(1); *foo = 0],[
cf_cv_const_x_string=no
],[
cf_cv_const_x_string=yes
])
])
CF_RESTORE_XTRA_FLAGS([CF_CONST_X_STRING])
-case $cf_cv_const_x_string in
+case "$cf_cv_const_x_string" in
(no)
CF_APPEND_TEXT(CPPFLAGS,-DXTSTRINGDEFINES)
;;
(*)
CF_APPEND_TEXT(CPPFLAGS,-D_CONST_X_STRING)
;;
esac
])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_CPP_PARAM_INIT version: 7 updated: 2017/01/21 11:06:25
dnl -----------------
dnl Check if the C++ compiler accepts duplicate parameter initialization. This
dnl is a late feature for the standard and is not in some recent compilers
dnl (1999/9/11).
AC_DEFUN([CF_CPP_PARAM_INIT],
[
if test -n "$CXX"; then
AC_CACHE_CHECK(if $CXX accepts parameter initialization,cf_cv_cpp_param_init,[
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
AC_TRY_RUN([
class TEST {
private:
int value;
public:
TEST(int x = 1);
~TEST();
};
TEST::TEST(int x = 1) // some compilers do not like second initializer
{
value = x;
}
int main(void) { }
],
[cf_cv_cpp_param_init=yes],
[cf_cv_cpp_param_init=no],
[cf_cv_cpp_param_init=unknown])
AC_LANG_RESTORE
])
fi
test "$cf_cv_cpp_param_init" = yes && AC_DEFINE(CPP_HAS_PARAM_INIT,1,[Define to 1 if C++ has parameter initialization])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_CPP_STATIC_CAST version: 3 updated: 2013/04/13 18:03:21
dnl ------------------
dnl Check if the C++ compiler accepts static_cast in generics. This appears to
dnl not be supported in g++ before 3.0
AC_DEFUN([CF_CPP_STATIC_CAST],
[
if test -n "$CXX"; then
AC_CACHE_CHECK(if $CXX accepts static_cast,cf_cv_cpp_static_cast,[
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
AC_TRY_COMPILE([
class NCursesPanel
{
public:
NCursesPanel(int nlines,
int ncols,
int begin_y = 0,
int begin_x = 0)
{
}
NCursesPanel();
~NCursesPanel();
};
template<class T> class NCursesUserPanel : public NCursesPanel
{
public:
NCursesUserPanel (int nlines,
int ncols,
int begin_y = 0,
int begin_x = 0,
const T* p_UserData = static_cast<T*>(0))
: NCursesPanel (nlines, ncols, begin_y, begin_x)
{
};
NCursesUserPanel(const T* p_UserData = static_cast<T*>(0)) : NCursesPanel()
{
};
virtual ~NCursesUserPanel() {};
};
],[
const char* p_UserData = static_cast<char*>(0)],
[cf_cv_cpp_static_cast=yes],
[cf_cv_cpp_static_cast=no])
AC_LANG_RESTORE
])
fi
test "$cf_cv_cpp_static_cast" = yes && AC_DEFINE(CPP_HAS_STATIC_CAST,1,[Define to 1 if C++ has static_cast])
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_CXX_AR_FLAGS version: 2 updated: 2015/04/17 21:13:04
+dnl CF_CXX_AR_FLAGS version: 3 updated: 2021/01/01 13:31:04
dnl ---------------
dnl Setup special archiver flags for given compilers.
AC_DEFUN([CF_CXX_AR_FLAGS],[
CXX_AR='$(AR)'
CXX_ARFLAGS='$(ARFLAGS)'
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(irix*)
if test "$GXX" != yes ; then
CXX_AR='$(CXX)'
CXX_ARFLAGS='-ar -o'
fi
;;
(sco3.2v5*)
CXXLDFLAGS="-u main"
;;
(solaris2*)
if test "$GXX" != yes ; then
CXX_AR='$(CXX)'
CXX_ARFLAGS='-xar -o'
fi
;;
esac
AC_SUBST(CXXLDFLAGS)
AC_SUBST(CXX_AR)
AC_SUBST(CXX_ARFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_CXX_IOSTREAM_NAMESPACE version: 2 updated: 2012/10/06 17:56:13
dnl -------------------------
dnl For c++, check if iostream uses "std::" namespace.
AC_DEFUN([CF_CXX_IOSTREAM_NAMESPACE],[
AC_CHECK_HEADERS(iostream)
if test x"$ac_cv_header_iostream" = xyes ; then
AC_MSG_CHECKING(if iostream uses std-namespace)
AC_TRY_COMPILE([
#include <iostream>
using std::endl;
using std::cerr;],[
cerr << "testing" << endl;
],[cf_iostream_namespace=yes],[cf_iostream_namespace=no])
AC_MSG_RESULT($cf_iostream_namespace)
if test "$cf_iostream_namespace" = yes ; then
AC_DEFINE(IOSTREAM_NAMESPACE,1,[Define to 1 if C++ has namespace iostream])
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_C_INLINE version: 6 updated: 2019/09/07 13:38:36
dnl -----------
dnl Check if the C compiler supports "inline".
dnl $1 is the name of a shell variable to set if inline is supported
dnl $2 is the threshold for gcc 4.x's option controlling maximum inline size
AC_DEFUN([CF_C_INLINE],[
AC_REQUIRE([CF_GCC_VERSION])
AC_C_INLINE
$1=
if test "$ac_cv_c_inline" != no ; then
$1=inline
if test "$INTEL_COMPILER" = yes
then
:
elif test "$CLANG_COMPILER" = yes
then
:
elif test "$GCC" = yes
then
AC_CACHE_CHECK(if $CC supports options to tune inlining,cf_cv_gcc_inline,[
cf_save_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS --param max-inline-insns-single=$2"
AC_TRY_COMPILE([inline int foo(void) { return 1; }],
[${cf_cv_main_return:-return} foo()],
[cf_cv_gcc_inline=yes],
[cf_cv_gcc_inline=no])
CFLAGS=$cf_save_CFLAGS
])
if test "$cf_cv_gcc_inline" = yes ; then
CF_ADD_CFLAGS([--param max-inline-insns-single=$2])
fi
fi
fi
AC_SUBST($1)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_DIRNAME version: 4 updated: 2002/12/21 19:25:52
+dnl CF_DIRNAME version: 5 updated: 2020/12/31 20:19:42
dnl ----------
dnl "dirname" is not portable, so we fake it with a shell script.
-AC_DEFUN([CF_DIRNAME],[$1=`echo $2 | sed -e 's%/[[^/]]*$%%'`])dnl
+AC_DEFUN([CF_DIRNAME],[$1=`echo "$2" | sed -e 's%/[[^/]]*$%%'`])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_DIRS_TO_MAKE version: 3 updated: 2002/02/23 20:38:31
+dnl CF_DIRS_TO_MAKE version: 4 updated: 2021/01/01 13:31:04
dnl ---------------
AC_DEFUN([CF_DIRS_TO_MAKE],
[
DIRS_TO_MAKE="lib"
for cf_item in $cf_list_models
do
CF_OBJ_SUBDIR($cf_item,cf_subdir)
for cf_item2 in $DIRS_TO_MAKE
do
- test $cf_item2 = $cf_subdir && break
+ test "$cf_item2" = "$cf_subdir" && break
done
test ".$cf_item2" != ".$cf_subdir" && DIRS_TO_MAKE="$DIRS_TO_MAKE $cf_subdir"
done
for cf_dir in $DIRS_TO_MAKE
do
- test ! -d $cf_dir && mkdir $cf_dir
+ test ! -d "$cf_dir" && mkdir "$cf_dir"
done
AC_SUBST(DIRS_TO_MAKE)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_DISABLE_ECHO version: 13 updated: 2015/04/18 08:56:57
dnl ---------------
dnl You can always use "make -n" to see the actual options, but it's hard to
dnl pick out/analyze warning messages when the compile-line is long.
dnl
dnl Sets:
dnl ECHO_LT - symbol to control if libtool is verbose
dnl ECHO_LD - symbol to prefix "cc -o" lines
dnl RULE_CC - symbol to put before implicit "cc -c" lines (e.g., .c.o)
dnl SHOW_CC - symbol to put before explicit "cc -c" lines
dnl ECHO_CC - symbol to put before any "cc" line
dnl
AC_DEFUN([CF_DISABLE_ECHO],[
AC_MSG_CHECKING(if you want to see long compiling messages)
CF_ARG_DISABLE(echo,
[ --disable-echo do not display "compiling" commands],
[
ECHO_LT='--silent'
ECHO_LD='@echo linking [$]@;'
RULE_CC='@echo compiling [$]<'
SHOW_CC='@echo compiling [$]@'
ECHO_CC='@'
],[
ECHO_LT=''
ECHO_LD=''
RULE_CC=''
SHOW_CC=''
ECHO_CC=''
])
AC_MSG_RESULT($enableval)
AC_SUBST(ECHO_LT)
AC_SUBST(ECHO_LD)
AC_SUBST(RULE_CC)
AC_SUBST(SHOW_CC)
AC_SUBST(ECHO_CC)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_DISABLE_GNAT_PROJECTS version: 1 updated: 2014/06/01 11:34:00
dnl ------------------------
AC_DEFUN([CF_DISABLE_GNAT_PROJECTS],[
AC_MSG_CHECKING(if we want to use GNAT projects)
CF_ARG_DISABLE(gnat-projects,
[ --disable-gnat-projects test: disable GNAT projects even if usable],
[enable_gnat_projects=no],
[enable_gnat_projects=yes])
AC_MSG_RESULT($enable_gnat_projects)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_DISABLE_LEAKS version: 7 updated: 2012/10/02 20:55:03
+dnl CF_DISABLE_LEAKS version: 8 updated: 2021/01/05 20:05:09
dnl ----------------
dnl Combine no-leak checks with the libraries or tools that are used for the
dnl checks.
AC_DEFUN([CF_DISABLE_LEAKS],[
AC_REQUIRE([CF_WITH_DMALLOC])
AC_REQUIRE([CF_WITH_DBMALLOC])
AC_REQUIRE([CF_WITH_VALGRIND])
AC_MSG_CHECKING(if you want to perform memory-leak testing)
AC_ARG_ENABLE(leaks,
[ --disable-leaks test: free permanent memory, analyze leaks],
- [if test "x$enableval" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi],
- : ${with_no_leaks:=no})
+ [enable_leaks=no],
+ [enable_leaks=yes])
+dnl TODO - drop with_no_leaks
+if test "x$enable_leaks" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi
AC_MSG_RESULT($with_no_leaks)
-if test "$with_no_leaks" = yes ; then
+if test "$enable_leaks" = no ; then
AC_DEFINE(NO_LEAKS,1,[Define to 1 if you want to perform memory-leak testing.])
AC_DEFINE(YY_NO_LEAKS,1,[Define to 1 if you want to perform memory-leak testing.])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_DISABLE_LIBTOOL_VERSION version: 3 updated: 2015/04/17 21:13:04
dnl --------------------------
dnl Check if we should use the libtool 1.5 feature "-version-number" instead of
dnl the older "-version-info" feature. The newer feature allows us to use
dnl version numbering on shared libraries which make them compatible with
dnl various systems.
AC_DEFUN([CF_DISABLE_LIBTOOL_VERSION],
[
AC_MSG_CHECKING(if libtool -version-number should be used)
CF_ARG_DISABLE(libtool-version,
[ --disable-libtool-version enable to use libtool's incompatible naming scheme],
[cf_libtool_version=no],
[cf_libtool_version=yes])
AC_MSG_RESULT($cf_libtool_version)
if test "$cf_libtool_version" = yes ; then
LIBTOOL_VERSION="-version-number"
else
LIBTOOL_VERSION="-version-info"
case "x$VERSION" in
(x)
AC_MSG_WARN(VERSION was not set)
;;
(x*.*.*)
ABI_VERSION="$VERSION"
CF_VERBOSE(ABI_VERSION: $ABI_VERSION)
;;
(x*:*:*)
ABI_VERSION=`echo "$VERSION" | sed -e 's/:/./g'`
CF_VERBOSE(ABI_VERSION: $ABI_VERSION)
;;
(*)
AC_MSG_WARN(unexpected VERSION value: $VERSION)
;;
esac
fi
AC_SUBST(ABI_VERSION)
AC_SUBST(LIBTOOL_VERSION)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_DISABLE_RPATH_HACK version: 2 updated: 2011/02/13 13:31:33
+dnl CF_DISABLE_RPATH_HACK version: 3 updated: 2021/01/05 20:14:44
dnl ---------------------
dnl The rpath-hack makes it simpler to build programs, particularly with the
dnl *BSD ports which may have essential libraries in unusual places. But it
dnl can interfere with building an executable for the base system. Use this
dnl option in that case.
AC_DEFUN([CF_DISABLE_RPATH_HACK],
[
AC_MSG_CHECKING(if rpath-hack should be disabled)
CF_ARG_DISABLE(rpath-hack,
[ --disable-rpath-hack don't add rpath options for additional libraries],
- [cf_disable_rpath_hack=yes],
- [cf_disable_rpath_hack=no])
+ [enable_rpath_hack=no],
+ [enable_rpath_hack=yes])
+dnl TODO - drop cf_disable_rpath_hack
+if test "x$enable_rpath_hack" = xno; then cf_disable_rpath_hack=yes; else cf_disable_rpath_hack=no; fi
AC_MSG_RESULT($cf_disable_rpath_hack)
-if test "$cf_disable_rpath_hack" = no ; then
+
+if test "$enable_rpath_hack" = yes ; then
CF_RPATH_HACK
fi
])
dnl ---------------------------------------------------------------------------
-dnl CF_ENABLE_BROKEN_LINKER version: 1 updated: 2020/02/08 15:59:30
+dnl CF_ENABLE_BROKEN_LINKER version: 2 updated: 2021/01/02 17:09:14
dnl -----------------------
dnl Some linkers cannot reference a data-only object. Cygwin used to be one.
dnl This usually follows CF_LINK_DATAONLY, but is not required in case we need
dnl an unconditional feature.
AC_DEFUN([CF_ENABLE_BROKEN_LINKER],[
AC_MSG_CHECKING(if you want broken-linker support code)
AC_ARG_ENABLE(broken_linker,
[ --enable-broken_linker compile with broken-linker support code],
[with_broken_linker=$enableval],
[with_broken_linker=no])
AC_MSG_RESULT($with_broken_linker)
-: ${BROKEN_LINKER:=0}
+: "${BROKEN_LINKER:=0}"
if test "x$with_broken_linker" = xyes ; then
AC_DEFINE(BROKEN_LINKER,1,[Define to 1 to work around linkers which cannot link data-only modules])
BROKEN_LINKER=1
fi
AC_SUBST(BROKEN_LINKER)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_ENABLE_PC_FILES version: 13 updated: 2015/11/01 05:27:39
dnl ------------------
dnl This is the "--enable-pc-files" option, which is available if there is a
dnl pkg-config configuration on the local machine.
AC_DEFUN([CF_ENABLE_PC_FILES],[
AC_REQUIRE([CF_PKG_CONFIG])
AC_REQUIRE([CF_WITH_PKG_CONFIG_LIBDIR])
if test "x$PKG_CONFIG" != xnone
then
AC_MSG_CHECKING(if we should install .pc files for $PKG_CONFIG)
else
AC_MSG_CHECKING(if we should install .pc files)
fi
AC_ARG_ENABLE(pc-files,
[ --enable-pc-files generate and install .pc files for pkg-config],
[enable_pc_files=$enableval],
[enable_pc_files=no])
AC_MSG_RESULT($enable_pc_files)
if test "x$enable_pc_files" != xno
then
MAKE_PC_FILES=
case "x$PKG_CONFIG_LIBDIR" in
(xno|xyes)
AC_MSG_WARN(no PKG_CONFIG_LIBDIR was found)
;;
(*)
CF_PATH_SYNTAX(PKG_CONFIG_LIBDIR)
;;
esac
else
MAKE_PC_FILES="#"
fi
AC_SUBST(MAKE_PC_FILES)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_ENABLE_RPATH version: 2 updated: 2010/03/27 18:39:42
dnl ---------------
dnl Check if the rpath option should be used, setting cache variable
dnl cf_cv_enable_rpath if so.
AC_DEFUN([CF_ENABLE_RPATH],
[
AC_MSG_CHECKING(if rpath option should be used)
AC_ARG_ENABLE(rpath,
[ --enable-rpath use rpath option when generating shared libraries],
[cf_cv_enable_rpath=$enableval],
[cf_cv_enable_rpath=no])
AC_MSG_RESULT($cf_cv_enable_rpath)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_ENABLE_STRING_HACKS version: 5 updated: 2016/10/08 17:34:11
+dnl CF_ENABLE_STRING_HACKS version: 6 updated: 2021/01/05 19:23:48
dnl ----------------------
dnl On a few platforms, the compiler and/or loader nags with untruthful
dnl comments stating that "most" uses of strcat/strcpy/sprintf are incorrect,
dnl and implying that most uses of the recommended alternatives are correct.
dnl
dnl Factually speaking, no one has actually counted the number of uses of these
dnl functions versus the total of incorrect uses. Samples of a few thousand
dnl instances are meaningless compared to the hundreds of millions of lines of
dnl existing C code.
dnl
dnl strlcat/strlcpy are (as of 2012) non-standard, and are available on some
dnl platforms, in implementations of varying quality. Likewise, snprintf is
dnl standard - but evolved through phases, and older implementations are likely
dnl to yield surprising results, as documented in manpages on various systems.
AC_DEFUN([CF_ENABLE_STRING_HACKS],
[
AC_MSG_CHECKING(if you want to work around bogus compiler/loader warnings)
AC_ARG_ENABLE(string-hacks,
[ --enable-string-hacks work around bogus compiler/loader warnings],
- [with_string_hacks=$enableval],
- [with_string_hacks=no])
-AC_MSG_RESULT($with_string_hacks)
+ [enable_string_hacks=$enableval],
+ [enable_string_hacks=no])
+AC_MSG_RESULT($enable_string_hacks)
-if test "x$with_string_hacks" = "xyes"; then
+if test "x$enable_string_hacks" = "xyes"; then
AC_DEFINE(USE_STRING_HACKS,1,[Define to 1 to work around bogus compiler/loader warnings])
AC_MSG_WARN(enabling string-hacks to work around bogus compiler/loader warnings)
AC_CHECK_FUNC(strlcat,[
AC_DEFINE(HAVE_STRLCAT,1,[Define to 1 if we have strlcat function])
],[
AC_CHECK_LIB(bsd,strlcat,[
CF_ADD_LIB(bsd)
AC_CHECK_HEADERS(bsd/string.h)
AC_DEFINE(HAVE_STRLCAT,1,[Define to 1 if we have strlcat function])
])
])
AC_CHECK_FUNCS( strlcpy snprintf )
fi
])dnl
dnl ---------------------------------------------------------------------------
+dnl CF_ENABLE_WARNINGS version: 9 updated: 2021/01/05 19:40:50
+dnl ------------------
+dnl Configure-option to enable gcc warnings
+dnl
+dnl $1 = extra options to add, if supported
+dnl $2 = option for checking attributes. By default, this is done when
+dnl warnings are enabled. For other values:
+dnl yes: always do this, e.g., to use in generated library-headers
+dnl no: never do this
+AC_DEFUN([CF_ENABLE_WARNINGS],[
+if test "$GCC" = yes || test "$GXX" = yes
+then
+CF_FIX_WARNINGS(CFLAGS)
+CF_FIX_WARNINGS(CPPFLAGS)
+CF_FIX_WARNINGS(LDFLAGS)
+AC_MSG_CHECKING(if you want to turn on gcc warnings)
+CF_ARG_ENABLE(warnings,
+ [ --enable-warnings test: turn on gcc compiler warnings],
+ [enable_warnings=yes],
+ [enable_warnings=no])
+AC_MSG_RESULT($enable_warnings)
+if test "$enable_warnings" = "yes"
+then
+ ifelse($2,,[CF_GCC_ATTRIBUTES])
+ CF_GCC_WARNINGS($1)
+fi
+ifelse($2,yes,[CF_GCC_ATTRIBUTES])
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
dnl CF_ERRNO version: 5 updated: 1997/11/30 12:44:39
dnl --------
dnl Check if 'errno' is declared in <errno.h>
AC_DEFUN([CF_ERRNO],
[
CF_CHECK_ERRNO(errno)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_ETIP_DEFINES version: 5 updated: 2012/02/18 17:51:07
+dnl CF_ETIP_DEFINES version: 6 updated: 2021/01/02 17:09:14
dnl ---------------
dnl Test for conflicting definitions of exception in gcc 2.8.0, etc., between
dnl math.h and builtin.h, only for ncurses
AC_DEFUN([CF_ETIP_DEFINES],
[
AC_MSG_CHECKING(for special defines needed for etip.h)
cf_save_CXXFLAGS="$CXXFLAGS"
cf_result="none"
# etip.h includes ncurses.h which includes ncurses_dll.h
# But ncurses_dll.h is generated - fix here.
test -d include || mkdir include
-test -f include/ncurses_dll.h || sed -e 's/@NCURSES_WRAP_PREFIX@/'$NCURSES_WRAP_PREFIX'/g' ${srcdir}/include/ncurses_dll.h.in >include/ncurses_dll.h
+test -f include/ncurses_dll.h || sed -e 's/@NCURSES_WRAP_PREFIX@/'$NCURSES_WRAP_PREFIX'/g' "${srcdir}/include/ncurses_dll.h.in" >include/ncurses_dll.h
for cf_math in "" MATH_H
do
for cf_excp in "" MATH_EXCEPTION
do
CXXFLAGS="$cf_save_CXXFLAGS -I${srcdir}/c++ -I${srcdir}/menu -Iinclude -I${srcdir}/include"
test -n "$cf_math" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_math}"
test -n "$cf_excp" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_excp}"
AC_TRY_COMPILE([
#include <etip.h.in>
],[],[
test -n "$cf_math" && AC_DEFINE_UNQUOTED(ETIP_NEEDS_${cf_math})
test -n "$cf_excp" && AC_DEFINE_UNQUOTED(ETIP_NEEDS_${cf_excp})
cf_result="$cf_math $cf_excp"
break 2
],[])
done
done
AC_MSG_RESULT($cf_result)
CXXFLAGS="$cf_save_CXXFLAGS"
])
dnl ---------------------------------------------------------------------------
-dnl CF_FIND_LINKAGE version: 21 updated: 2018/06/20 20:23:13
+dnl CF_FIND_LINKAGE version: 22 updated: 2020/12/31 20:19:42
dnl ---------------
dnl Find a library (specifically the linkage used in the code fragment),
dnl searching for it if it is not already in the library path.
dnl See also CF_ADD_SEARCHPATH.
dnl
dnl Parameters (4-on are optional):
dnl $1 = headers for library entrypoint
dnl $2 = code fragment for library entrypoint
dnl $3 = the library name without the "-l" option or ".so" suffix.
dnl $4 = action to perform if successful (default: update CPPFLAGS, etc)
dnl $5 = action to perform if not successful
dnl $6 = module name, if not the same as the library name
dnl $7 = extra libraries
dnl
dnl Sets these variables:
dnl $cf_cv_find_linkage_$3 - yes/no according to whether linkage is found
dnl $cf_cv_header_path_$3 - include-directory if needed
dnl $cf_cv_library_path_$3 - library-directory if needed
dnl $cf_cv_library_file_$3 - library-file if needed, e.g., -l$3
AC_DEFUN([CF_FIND_LINKAGE],[
# If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these
# will be set on completion of the AC_TRY_LINK below.
cf_cv_header_path_$3=
cf_cv_library_path_$3=
CF_MSG_LOG([Starting [FIND_LINKAGE]($3,$6)])
cf_save_LIBS="$LIBS"
AC_TRY_LINK([$1],[$2],[
cf_cv_find_linkage_$3=yes
cf_cv_header_path_$3=/usr/include
cf_cv_library_path_$3=/usr/lib
],[
LIBS="-l$3 $7 $cf_save_LIBS"
AC_TRY_LINK([$1],[$2],[
cf_cv_find_linkage_$3=yes
cf_cv_header_path_$3=/usr/include
cf_cv_library_path_$3=/usr/lib
cf_cv_library_file_$3="-l$3"
],[
cf_cv_find_linkage_$3=no
LIBS="$cf_save_LIBS"
CF_VERBOSE(find linkage for $3 library)
CF_MSG_LOG([Searching for headers in [FIND_LINKAGE]($3,$6)])
cf_save_CPPFLAGS="$CPPFLAGS"
cf_test_CPPFLAGS="$CPPFLAGS"
CF_HEADER_PATH(cf_search,ifelse([$6],,[$3],[$6]))
for cf_cv_header_path_$3 in $cf_search
do
- if test -d $cf_cv_header_path_$3 ; then
+ if test -d "$cf_cv_header_path_$3" ; then
CF_VERBOSE(... testing $cf_cv_header_path_$3)
CPPFLAGS="$cf_save_CPPFLAGS"
CF_APPEND_TEXT(CPPFLAGS,-I$cf_cv_header_path_$3)
AC_TRY_COMPILE([$1],[$2],[
CF_VERBOSE(... found $3 headers in $cf_cv_header_path_$3)
cf_cv_find_linkage_$3=maybe
cf_test_CPPFLAGS="$CPPFLAGS"
break],[
CPPFLAGS="$cf_save_CPPFLAGS"
])
fi
done
if test "$cf_cv_find_linkage_$3" = maybe ; then
CF_MSG_LOG([Searching for $3 library in [FIND_LINKAGE]($3,$6)])
cf_save_LIBS="$LIBS"
cf_save_LDFLAGS="$LDFLAGS"
ifelse([$6],,,[
CPPFLAGS="$cf_test_CPPFLAGS"
LIBS="-l$3 $7 $cf_save_LIBS"
AC_TRY_LINK([$1],[$2],[
CF_VERBOSE(... found $3 library in system)
cf_cv_find_linkage_$3=yes])
CPPFLAGS="$cf_save_CPPFLAGS"
LIBS="$cf_save_LIBS"
])
if test "$cf_cv_find_linkage_$3" != yes ; then
CF_LIBRARY_PATH(cf_search,$3)
for cf_cv_library_path_$3 in $cf_search
do
- if test -d $cf_cv_library_path_$3 ; then
+ if test -d "$cf_cv_library_path_$3" ; then
CF_VERBOSE(... testing $cf_cv_library_path_$3)
CPPFLAGS="$cf_test_CPPFLAGS"
LIBS="-l$3 $7 $cf_save_LIBS"
LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_$3"
AC_TRY_LINK([$1],[$2],[
CF_VERBOSE(... found $3 library in $cf_cv_library_path_$3)
cf_cv_find_linkage_$3=yes
cf_cv_library_file_$3="-l$3"
break],[
CPPFLAGS="$cf_save_CPPFLAGS"
LIBS="$cf_save_LIBS"
LDFLAGS="$cf_save_LDFLAGS"
])
fi
done
CPPFLAGS="$cf_save_CPPFLAGS"
LDFLAGS="$cf_save_LDFLAGS"
fi
else
cf_cv_find_linkage_$3=no
fi
],$7)
])
LIBS="$cf_save_LIBS"
if test "$cf_cv_find_linkage_$3" = yes ; then
ifelse([$4],,[
CF_ADD_INCDIR($cf_cv_header_path_$3)
CF_ADD_LIBDIR($cf_cv_library_path_$3)
CF_ADD_LIB($3)
],[$4])
else
ifelse([$5],,AC_MSG_WARN(Cannot find $3 library),[$5])
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_FIND_SUB_INCDIR version: 2 updated: 2015/04/17 21:13:04
+dnl CF_FIND_SUB_INCDIR version: 3 updated: 2021/01/01 13:31:04
dnl ------------------
dnl Find an include-directory with the given leaf-name. This is useful for
dnl example with FreeBSD ports, which use this convention to distinguish
dnl different versions of the same port.
AC_DEFUN([CF_FIND_SUB_INCDIR],[
CF_SUBDIR_PATH(cf_search,$1,include)
for cf_item in $cf_search
do
- case $cf_item in
+ case "$cf_item" in
(*/$1)
CF_ADD_INCDIR($cf_item)
;;
esac
done
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_FIND_SUB_LIBDIR version: 2 updated: 2015/04/17 21:13:04
+dnl CF_FIND_SUB_LIBDIR version: 3 updated: 2021/01/01 13:31:04
dnl ------------------
dnl Find a library-directory with the given leaf-name. This is useful for
dnl example with FreeBSD ports, which use this convention to distinguish
dnl different versions of the same port.
AC_DEFUN([CF_FIND_SUB_LIBDIR],[
CF_SUBDIR_PATH(cf_search,$1,lib)
for cf_item in $cf_search
do
- case $cf_item in
+ case "$cf_item" in
(*/$1)
CF_ADD_LIBDIR($cf_item)
;;
esac
done
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_FIXUP_ADAFLAGS version: 2 updated: 2015/04/17 21:13:04
dnl -----------------
dnl make ADAFLAGS consistent with CFLAGS
AC_DEFUN([CF_FIXUP_ADAFLAGS],[
AC_MSG_CHECKING(optimization options for ADAFLAGS)
case "$CFLAGS" in
(*-g*)
CF_ADD_ADAFLAGS(-g)
;;
esac
case "$CFLAGS" in
(*-O*)
cf_O_flag=`echo "$CFLAGS" |sed -e 's/^.*-O/-O/' -e 's/[[ ]].*//'`
CF_ADD_ADAFLAGS($cf_O_flag)
;;
esac
AC_MSG_RESULT($ADAFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
+dnl CF_FIX_WARNINGS version: 3 updated: 2020/12/31 18:40:20
+dnl ---------------
+dnl Warning flags do not belong in CFLAGS, CPPFLAGS, etc. Any of gcc's
+dnl "-Werror" flags can interfere with configure-checks. Those go into
+dnl EXTRA_CFLAGS.
+dnl
+dnl $1 = variable name to repair
+define([CF_FIX_WARNINGS],[
+if test "$GCC" = yes || test "$GXX" = yes
+then
+ case [$]$1 in
+ (*-Werror=*)
+ CF_VERBOSE(repairing $1: [$]$1)
+ cf_temp_flags=
+ for cf_temp_scan in [$]$1
+ do
+ case "x$cf_temp_scan" in
+ (x-Werror=*)
+ CF_APPEND_TEXT(EXTRA_CFLAGS,$cf_temp_scan)
+ ;;
+ (*)
+ CF_APPEND_TEXT(cf_temp_flags,$cf_temp_scan)
+ ;;
+ esac
+ done
+ $1="$cf_temp_flags"
+ CF_VERBOSE(... fixed [$]$1)
+ CF_VERBOSE(... extra $EXTRA_CFLAGS)
+ ;;
+ esac
+fi
+AC_SUBST(EXTRA_CFLAGS)
+])dnl
+dnl ---------------------------------------------------------------------------
dnl CF_FOPEN_BIN_R version: 2 updated: 2019/12/31 08:53:54
dnl --------------
dnl Check if fopen works when the "b" (binary) flag is added to the mode
dnl parameter. POSIX ignores the "b", which c89 specified. Some very old
dnl systems do not accept it.
AC_DEFUN([CF_FOPEN_BIN_R],[
AC_CACHE_CHECK(if fopen accepts explicit binary mode,cf_cv_fopen_bin_r,[
AC_TRY_RUN([
#include <stdio.h>
int main(void) {
FILE *fp = fopen("conftest.tmp", "wb");
int rc = 0;
if (fp != 0) {
int p, q;
for (p = 0; p < 256; ++p) {
fputc(p, fp);
}
fclose(fp);
fp = fopen("conftest.tmp", "rb");
if (fp != 0) {
for (p = 0; p < 256; ++p) {
q = fgetc(fp);
if (q != p) {
rc = 1;
break;
}
}
} else {
rc = 1;
}
} else {
rc = 1;
}
${cf_cv_main_return:-return} (rc);
}
],
[cf_cv_fopen_bin_r=yes],
[cf_cv_fopen_bin_r=no],
[cf_cv_fopen_bin_r=unknown])
])
test "x$cf_cv_fopen_bin_r" != xno && AC_DEFINE(USE_FOPEN_BIN_R,1,[Define to 1 if fopen accepts explicit binary mode])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_FORGET_TOOL version: 1 updated: 2013/04/06 18:03:09
dnl --------------
dnl Forget that we saw the given tool.
AC_DEFUN([CF_FORGET_TOOL],[
unset ac_cv_prog_ac_ct_$1
unset ac_ct_$1
unset $1
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_FUNC_DLSYM version: 4 updated: 2015/09/12 14:46:44
dnl -------------
dnl Test for dlsym() and related functions, as well as libdl.
dnl
dnl Sets
dnl $cf_have_dlsym
dnl $cf_have_libdl
AC_DEFUN([CF_FUNC_DLSYM],[
cf_have_dlsym=no
AC_CHECK_FUNC(dlsym,cf_have_dlsym=yes,[
cf_have_libdl=no
AC_CHECK_LIB(dl,dlsym,[
cf_have_dlsym=yes
cf_have_libdl=yes])])
if test "$cf_have_dlsym" = yes ; then
test "$cf_have_libdl" = yes && { CF_ADD_LIB(dl) }
AC_MSG_CHECKING(whether able to link to dl*() functions)
AC_TRY_LINK([#include <dlfcn.h>],[
void *obj;
if ((obj = dlopen("filename", 0)) != 0) {
if (dlsym(obj, "symbolname") == 0) {
dlclose(obj);
}
}],[
AC_DEFINE(HAVE_LIBDL,1,[Define to 1 if we have dl library])],[
AC_MSG_ERROR(Cannot link test program for libdl)])
AC_MSG_RESULT(ok)
else
AC_MSG_ERROR(Cannot find dlsym function)
fi
])
dnl ---------------------------------------------------------------------------
dnl CF_FUNC_MEMMOVE version: 9 updated: 2017/01/21 11:06:25
dnl ---------------
dnl Check for memmove, or a bcopy that can handle overlapping copy. If neither
dnl is found, add our own version of memmove to the list of objects.
AC_DEFUN([CF_FUNC_MEMMOVE],
[
AC_CHECK_FUNC(memmove,,[
AC_CHECK_FUNC(bcopy,[
AC_CACHE_CHECK(if bcopy does overlapping moves,cf_cv_good_bcopy,[
AC_TRY_RUN([
int main(void) {
static char data[] = "abcdefghijklmnopqrstuwwxyz";
char temp[40];
bcopy(data, temp, sizeof(data));
bcopy(temp+10, temp, 15);
bcopy(temp+5, temp+15, 10);
${cf_cv_main_return:-return} (strcmp(temp, "klmnopqrstuwwxypqrstuwwxyz"));
}
],
[cf_cv_good_bcopy=yes],
[cf_cv_good_bcopy=no],
[cf_cv_good_bcopy=unknown])
])
],[cf_cv_good_bcopy=no])
if test "$cf_cv_good_bcopy" = yes ; then
AC_DEFINE(USE_OK_BCOPY,1,[Define to 1 to use bcopy when memmove is unavailable])
else
AC_DEFINE(USE_MY_MEMMOVE,1,[Define to 1 to use replacement function when memmove is unavailable])
fi
])])dnl
dnl ---------------------------------------------------------------------------
dnl CF_FUNC_NANOSLEEP version: 5 updated: 2017/01/21 11:06:25
dnl -----------------
dnl Check for existence of workable nanosleep() function. Some systems, e.g.,
dnl AIX 4.x, provide a non-working version.
AC_DEFUN([CF_FUNC_NANOSLEEP],[
AC_CACHE_CHECK(if nanosleep really works,cf_cv_func_nanosleep,[
AC_TRY_RUN([
#include <stdio.h>
#include <errno.h>
#include <time.h>
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
int main(void) {
struct timespec ts1, ts2;
int code;
ts1.tv_sec = 0;
ts1.tv_nsec = 750000000;
ts2.tv_sec = 0;
ts2.tv_nsec = 0;
errno = 0;
code = nanosleep(&ts1, &ts2); /* on failure errno is ENOSYS. */
${cf_cv_main_return:-return}(code != 0);
}
],
[cf_cv_func_nanosleep=yes],
[cf_cv_func_nanosleep=no],
[cf_cv_func_nanosleep=unknown])])
test "$cf_cv_func_nanosleep" = "yes" && AC_DEFINE(HAVE_NANOSLEEP,1,[Define to 1 if we have nanosleep()])
])
dnl ---------------------------------------------------------------------------
-dnl CF_FUNC_OPENPTY version: 5 updated: 2015/09/12 14:46:50
+dnl CF_FUNC_OPENPTY version: 6 updated: 2021/01/01 13:31:04
dnl ---------------
dnl Check for openpty() function, along with <pty.h> header. It may need the
dnl "util" library as well.
AC_DEFUN([CF_FUNC_OPENPTY],
[
AC_CHECK_LIB(util,openpty,cf_cv_lib_util=yes,cf_cv_lib_util=no)
AC_CACHE_CHECK(for openpty header,cf_cv_func_openpty,[
cf_save_LIBS="$LIBS"
- test $cf_cv_lib_util = yes && { CF_ADD_LIB(util) }
+ test "$cf_cv_lib_util" = yes && { CF_ADD_LIB(util) }
for cf_header in pty.h libutil.h util.h
do
AC_TRY_LINK([
#include <$cf_header>
],[
int x = openpty((int *)0, (int *)0, (char *)0,
(struct termios *)0, (struct winsize *)0);
],[
cf_cv_func_openpty=$cf_header
break
],[
cf_cv_func_openpty=no
])
done
LIBS="$cf_save_LIBS"
])
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_FUNC_POLL version: 9 updated: 2015/10/10 13:27:32
+dnl CF_FUNC_POLL version: 10 updated: 2021/01/04 19:13:57
dnl ------------
dnl See if the poll function really works. Some platforms have poll(), but
dnl it does not work for terminals or files.
AC_DEFUN([CF_FUNC_POLL],[
-tty 2>&1 >/dev/null || { AC_CHECK_FUNCS(posix_openpt) }
+tty >/dev/null 2>&1 || { AC_CHECK_FUNCS(posix_openpt) }
AC_CACHE_CHECK(if poll really works,cf_cv_working_poll,[
AC_TRY_RUN([
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#ifdef HAVE_POLL_H
#include <poll.h>
#else
#include <sys/poll.h>
#endif
int main(void) {
struct pollfd myfds;
int ret;
/* check for Darwin bug with respect to "devices" */
myfds.fd = open("/dev/null", 1); /* O_WRONLY */
if (myfds.fd < 0)
myfds.fd = 0;
myfds.events = POLLIN;
myfds.revents = 0;
ret = poll(&myfds, 1, 100);
if (ret < 0 || (myfds.revents & POLLNVAL)) {
ret = -1;
} else {
int fd = 0;
if (!isatty(fd)) {
fd = open("/dev/tty", 2); /* O_RDWR */
}
#ifdef HAVE_POSIX_OPENPT
if (fd < 0) {
fd = posix_openpt(O_RDWR);
}
#endif
if (fd >= 0) {
/* also check with standard input */
myfds.fd = fd;
myfds.events = POLLIN;
myfds.revents = 0;
ret = poll(&myfds, 1, 100);
} else {
ret = -1;
}
}
${cf_cv_main_return:-return}(ret < 0);
}],
[cf_cv_working_poll=yes],
[cf_cv_working_poll=no],
[cf_cv_working_poll=unknown])])
test "$cf_cv_working_poll" = "yes" && AC_DEFINE(HAVE_WORKING_POLL,1,[Define to 1 if the poll function seems to work])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_FUNC_TERMIOS version: 3 updated: 2012/10/06 17:56:13
dnl ---------------
dnl Some old/broken variations define tcgetattr() only as a macro in
dnl termio(s).h
AC_DEFUN([CF_FUNC_TERMIOS],[
AC_REQUIRE([CF_STRUCT_TERMIOS])
AC_CACHE_CHECK(for tcgetattr, cf_cv_have_tcgetattr,[
AC_TRY_LINK([
#include <sys/types.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef HAVE_TERMIOS_H
#include <termios.h>
#define TTY struct termios
#else
#ifdef HAVE_TERMIO_H
#include <termio.h>
#define TTY struct termio
#endif
#endif
],[
TTY foo;
tcgetattr(1, &foo);],
[cf_cv_have_tcgetattr=yes],
[cf_cv_have_tcgetattr=no])])
test "$cf_cv_have_tcgetattr" = yes && AC_DEFINE(HAVE_TCGETATTR,1,[Define to 1 if we have tcgetattr])
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_FUNC_VSSCANF version: 6 updated: 2015/04/18 08:56:57
+dnl CF_FUNC_VSSCANF version: 7 updated: 2021/01/01 13:31:04
dnl ---------------
dnl Check for vsscanf() function, which is in c9x but generally not in earlier
dnl versions of C. It is in the GNU C library, and can often be simulated by
dnl other functions.
AC_DEFUN([CF_FUNC_VSSCANF],
[
AC_CACHE_CHECK(for vsscanf function or workaround,cf_cv_func_vsscanf,[
AC_TRY_LINK([
#include <stdarg.h>
#include <stdio.h>],[
va_list ap;
vsscanf("from", "%d", ap)],[cf_cv_func_vsscanf=vsscanf],[
AC_TRY_LINK([
#include <stdarg.h>
#include <stdio.h>],[
FILE strbuf;
char *str = "from";
strbuf._flag = _IOREAD;
strbuf._ptr = strbuf._base = (unsigned char *) str;
strbuf._cnt = strlen(str);
strbuf._file = _NFILE;
return (vfscanf(&strbuf, "%d", ap))],[cf_cv_func_vsscanf=vfscanf],[
AC_TRY_LINK([
#include <stdarg.h>
#include <stdio.h>],[
FILE strbuf;
char *str = "from";
strbuf._flag = _IOREAD;
strbuf._ptr = strbuf._base = (unsigned char *) str;
strbuf._cnt = strlen(str);
strbuf._file = _NFILE;
return (_doscan(&strbuf, "%d", ap))],[cf_cv_func_vsscanf=_doscan],[
cf_cv_func_vsscanf=no])])])])
-case $cf_cv_func_vsscanf in
+case "$cf_cv_func_vsscanf" in
(vsscanf) AC_DEFINE(HAVE_VSSCANF,1,[Define to 1 if we have vsscanf]);;
(vfscanf) AC_DEFINE(HAVE_VFSCANF,1,[Define to 1 if we have vfscanf]);;
(_doscan) AC_DEFINE(HAVE__DOSCAN,1,[Define to 1 if we have _doscan]);;
esac
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_GCC_ATTRIBUTES version: 17 updated: 2015/04/12 15:39:00
+dnl CF_GCC_ATTRIBUTES version: 23 updated: 2021/01/03 18:30:50
dnl -----------------
dnl Test for availability of useful gcc __attribute__ directives to quiet
dnl compiler warnings. Though useful, not all are supported -- and contrary
dnl to documentation, unrecognized directives cause older compilers to barf.
AC_DEFUN([CF_GCC_ATTRIBUTES],
-[
-if test "$GCC" = yes
+[AC_REQUIRE([AC_PROG_FGREP])dnl
+
+if test "$GCC" = yes || test "$GXX" = yes
then
cat > conftest.i <<EOF
#ifndef GCC_PRINTF
#define GCC_PRINTF 0
#endif
#ifndef GCC_SCANF
#define GCC_SCANF 0
#endif
#ifndef GCC_NORETURN
#define GCC_NORETURN /* nothing */
#endif
#ifndef GCC_UNUSED
#define GCC_UNUSED /* nothing */
#endif
EOF
if test "$GCC" = yes
then
AC_CHECKING([for $CC __attribute__ directives])
-cat > conftest.$ac_ext <<EOF
+cat > "conftest.$ac_ext" <<EOF
#line __oline__ "${as_me:-configure}"
#include "confdefs.h"
#include "conftest.h"
#include "conftest.i"
#if GCC_PRINTF
#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
#else
#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
#endif
#if GCC_SCANF
#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
#else
#define GCC_SCANFLIKE(fmt,var) /*nothing*/
#endif
extern void wow(char *,...) GCC_SCANFLIKE(1,2);
extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
extern void foo(void) GCC_NORETURN;
-int main(int argc GCC_UNUSED, char *argv[[]] GCC_UNUSED) { return 0; }
+int main(int argc GCC_UNUSED, char *argv[[]] GCC_UNUSED) { (void)argc; (void)argv; return 0; }
EOF
cf_printf_attribute=no
cf_scanf_attribute=no
for cf_attribute in scanf printf unused noreturn
do
CF_UPPER(cf_ATTRIBUTE,$cf_attribute)
cf_directive="__attribute__(($cf_attribute))"
echo "checking for $CC $cf_directive" 1>&AC_FD_CC
- case $cf_attribute in
+ case "$cf_attribute" in
(printf)
cf_printf_attribute=yes
cat >conftest.h <<EOF
#define GCC_$cf_ATTRIBUTE 1
EOF
;;
(scanf)
cf_scanf_attribute=yes
cat >conftest.h <<EOF
#define GCC_$cf_ATTRIBUTE 1
EOF
;;
(*)
cat >conftest.h <<EOF
#define GCC_$cf_ATTRIBUTE $cf_directive
EOF
;;
esac
if AC_TRY_EVAL(ac_compile); then
test -n "$verbose" && AC_MSG_RESULT(... $cf_attribute)
cat conftest.h >>confdefs.h
- case $cf_attribute in
+ case "$cf_attribute" in
(noreturn)
AC_DEFINE_UNQUOTED(GCC_NORETURN,$cf_directive,[Define to noreturn-attribute for gcc])
;;
(printf)
cf_value='/* nothing */'
if test "$cf_printf_attribute" != no ; then
cf_value='__attribute__((format(printf,fmt,var)))'
AC_DEFINE(GCC_PRINTF,1,[Define to 1 if the compiler supports gcc-like printf attribute.])
fi
AC_DEFINE_UNQUOTED(GCC_PRINTFLIKE(fmt,var),$cf_value,[Define to printf-attribute for gcc])
;;
(scanf)
cf_value='/* nothing */'
if test "$cf_scanf_attribute" != no ; then
cf_value='__attribute__((format(scanf,fmt,var)))'
AC_DEFINE(GCC_SCANF,1,[Define to 1 if the compiler supports gcc-like scanf attribute.])
fi
AC_DEFINE_UNQUOTED(GCC_SCANFLIKE(fmt,var),$cf_value,[Define to sscanf-attribute for gcc])
;;
(unused)
AC_DEFINE_UNQUOTED(GCC_UNUSED,$cf_directive,[Define to unused-attribute for gcc])
;;
esac
fi
done
else
- fgrep define conftest.i >>confdefs.h
+ ${FGREP-fgrep} define conftest.i >>confdefs.h
fi
-rm -rf conftest*
+rm -rf ./conftest*
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_GCC_VERSION version: 8 updated: 2019/09/07 13:38:36
dnl --------------
dnl Find version of gcc, and (because icc/clang pretend to be gcc without being
dnl compatible), attempt to determine if icc/clang is actually used.
AC_DEFUN([CF_GCC_VERSION],[
AC_REQUIRE([AC_PROG_CC])
GCC_VERSION=none
if test "$GCC" = yes ; then
AC_MSG_CHECKING(version of $CC)
GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[[^)]]*) //' -e 's/^.*(Debian[[^)]]*) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`"
test -z "$GCC_VERSION" && GCC_VERSION=unknown
AC_MSG_RESULT($GCC_VERSION)
fi
CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS)
CF_CLANG_COMPILER(GCC,CLANG_COMPILER,CFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_GCC_WARNINGS version: 37 updated: 2020/01/05 20:04:12
+dnl CF_GCC_WARNINGS version: 41 updated: 2021/01/01 16:53:59
dnl ---------------
dnl Check if the compiler supports useful warning options. There's a few that
dnl we don't use, simply because they're too noisy:
dnl
dnl -Wconversion (useful in older versions of gcc, but not in gcc 2.7.x)
dnl -Winline (usually not worthwhile)
dnl -Wredundant-decls (system headers make this too noisy)
dnl -Wtraditional (combines too many unrelated messages, only a few useful)
dnl -Wwrite-strings (too noisy, but should review occasionally). This
dnl is enabled for ncurses using "--enable-const".
dnl -pedantic
dnl
dnl Parameter:
dnl $1 is an optional list of gcc warning flags that a particular
dnl application might want to use, e.g., "no-unused" for
dnl -Wno-unused
dnl Special:
dnl If $with_ext_const is "yes", add a check for -Wwrite-strings
dnl
AC_DEFUN([CF_GCC_WARNINGS],
[
AC_REQUIRE([CF_GCC_VERSION])
if test "x$have_x" = xyes; then CF_CONST_X_STRING fi
-cat > conftest.$ac_ext <<EOF
+cat > "conftest.$ac_ext" <<EOF
#line __oline__ "${as_me:-configure}"
int main(int argc, char *argv[[]]) { return (argv[[argc-1]] == 0) ; }
EOF
if test "$INTEL_COMPILER" = yes
then
# The "-wdXXX" options suppress warnings:
# remark #1419: external declaration in primary source file
# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
# remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
# remark #193: zero used for undefined preprocessing identifier
# remark #593: variable "curs_sb_left_arrow" was set but never used
# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
# remark #869: parameter "tw" was never referenced
# remark #981: operands are evaluated in unspecified order
# warning #279: controlling expression is constant
AC_CHECKING([for $CC warning options])
cf_save_CFLAGS="$CFLAGS"
- EXTRA_CFLAGS="-Wall"
+ EXTRA_CFLAGS="$EXTRA_CFLAGS -Wall"
for cf_opt in \
wd1419 \
wd1683 \
wd1684 \
wd193 \
wd593 \
wd279 \
wd810 \
wd869 \
wd981
do
CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
if AC_TRY_EVAL(ac_compile); then
test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt)
EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
fi
done
CFLAGS="$cf_save_CFLAGS"
elif test "$GCC" = yes && test "$GCC_VERSION" != "unknown"
then
AC_CHECKING([for $CC warning options])
cf_save_CFLAGS="$CFLAGS"
- EXTRA_CFLAGS=
cf_warn_CONST=""
test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings"
cf_gcc_warnings="Wignored-qualifiers Wlogical-op Wvarargs"
test "x$CLANG_COMPILER" = xyes && cf_gcc_warnings=
for cf_opt in W Wall \
Wbad-function-cast \
Wcast-align \
Wcast-qual \
Wdeclaration-after-statement \
Wextra \
Winline \
Wmissing-declarations \
Wmissing-prototypes \
Wnested-externs \
Wpointer-arith \
Wshadow \
Wstrict-prototypes \
Wundef Wno-inline $cf_gcc_warnings $cf_warn_CONST $1
do
CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
if AC_TRY_EVAL(ac_compile); then
test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt)
- case $cf_opt in
+ case "$cf_opt" in
(Winline)
- case $GCC_VERSION in
+ case "$GCC_VERSION" in
([[34]].*)
CF_VERBOSE(feature is broken in gcc $GCC_VERSION)
continue;;
esac
;;
(Wpointer-arith)
- case $GCC_VERSION in
+ case "$GCC_VERSION" in
([[12]].*)
CF_VERBOSE(feature is broken in gcc $GCC_VERSION)
continue;;
esac
;;
esac
EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
fi
done
CFLAGS="$cf_save_CFLAGS"
fi
-rm -rf conftest*
+rm -rf ./conftest*
AC_SUBST(EXTRA_CFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_GETOPT_HEADER version: 6 updated: 2014/07/22 14:45:54
+dnl CF_GETOPT_HEADER version: 7 updated: 2021/01/01 13:31:04
dnl ----------------
dnl Check for getopt's variables which are commonly defined in stdlib.h,
dnl unistd.h or (nonstandard) in getopt.h
AC_DEFUN([CF_GETOPT_HEADER],
[
AC_HAVE_HEADERS(unistd.h getopt.h)
AC_CACHE_CHECK(for header declaring getopt variables,cf_cv_getopt_header,[
cf_cv_getopt_header=none
for cf_header in stdio.h stdlib.h unistd.h getopt.h
do
AC_TRY_COMPILE([
#include <$cf_header>],
[int x = optind; char *y = optarg],
[cf_cv_getopt_header=$cf_header
break])
done
])
-if test $cf_cv_getopt_header != none ; then
+if test "$cf_cv_getopt_header" != none ; then
AC_DEFINE(HAVE_GETOPT_HEADER,1,[Define to 1 if getopt variables are declared in header])
fi
-if test $cf_cv_getopt_header = getopt.h ; then
+if test "$cf_cv_getopt_header" = getopt.h ; then
AC_DEFINE(NEED_GETOPT_H,1,[Define to 1 if we must include getopt.h])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_GNATPREP_OPT_T version: 1 updated: 2014/08/02 18:37:25
dnl -----------------
AC_DEFUN([CF_GNATPREP_OPT_T],[
AC_CACHE_CHECK(if GNATPREP supports -T option,cf_cv_gnatprep_opt_t,[
cf_cv_gnatprep_opt_t=no
gnatprep -T 2>/dev/null >/dev/null && cf_cv_gnatprep_opt_t=yes
])
test "$cf_cv_gnatprep_opt_t" = yes && GNATPREP_OPTS="-T $GNATPREP_OPTS"
AC_SUBST(GNATPREP_OPTS)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_GNAT_GENERICS version: 4 updated: 2019/12/31 08:53:54
+dnl CF_GNAT_GENERICS version: 7 updated: 2021/01/01 13:31:04
dnl ----------------
AC_DEFUN([CF_GNAT_GENERICS],
[
AC_REQUIRE([CF_GNAT_VERSION])
AC_MSG_CHECKING(if GNAT supports generics)
-case $cf_cv_gnat_version in
-(3.[[1-9]]*|[[4-9]].*)
+case "$cf_cv_gnat_version" in
+(3.1[[1-9]]*|3.[[2-9]]*|[[4-9]].*|[[1-9]][[0-9]].[[0-9]]*|20[[0-9]][[0-9]])
cf_gnat_generics=yes
;;
(*)
cf_gnat_generics=no
;;
esac
AC_MSG_RESULT($cf_gnat_generics)
if test "$cf_gnat_generics" = yes
then
cf_compile_generics=generics
cf_generic_objects="\${GENOBJS}"
else
cf_compile_generics=
cf_generic_objects=
fi
AC_SUBST(cf_compile_generics)
AC_SUBST(cf_generic_objects)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_GNAT_PROJECTS version: 10 updated: 2019/12/31 08:53:54
+dnl CF_GNAT_PROJECTS version: 13 updated: 2021/01/02 17:09:14
dnl ----------------
dnl GNAT projects are configured with ".gpr" project files.
dnl GNAT libraries are a further development, using the project feature.
AC_DEFUN([CF_GNAT_PROJECTS],
[
AC_REQUIRE([CF_GNAT_VERSION])
AC_REQUIRE([CF_DISABLE_GNAT_PROJECTS])
cf_gnat_libraries=no
cf_gnat_projects=no
if test "$enable_gnat_projects" != no ; then
AC_MSG_CHECKING(if GNAT supports project files)
-case $cf_cv_gnat_version in
+case "$cf_cv_gnat_version" in
(3.[[0-9]]*)
;;
(*)
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(cygwin*|msys*)
;;
(*)
- rm -rf conftest* *~conftest*
+ rm -rf ./conftest* ./*~conftest*
if mkdir conftest.src conftest.bin conftest.lib
then
cd conftest.src
- rm -rf conftest* *~conftest*
+ rm -rf ./conftest* ./*~conftest*
cat >>library.gpr <<CF_EOF
project Library is
Kind := External ("LIB_KIND");
for Library_Name use "ConfTest";
for Object_Dir use ".";
for Library_ALI_Dir use External("LIBRARY_DIR");
for Library_Version use External ("SONAME");
for Library_Kind use Kind;
for Library_Dir use External("BUILD_DIR");
Source_Dir := External ("SOURCE_DIR");
for Source_Dirs use (Source_Dir);
end Library;
CF_EOF
cat >>confpackage.ads <<CF_EOF
package ConfPackage is
procedure conftest;
end ConfPackage;
CF_EOF
cat >>confpackage.adb <<CF_EOF
with Text_IO;
package body ConfPackage is
procedure conftest is
begin
Text_IO.Put ("Hello World");
Text_IO.New_Line;
end conftest;
end ConfPackage;
CF_EOF
- if ( $cf_ada_make $ADAFLAGS \
+ if ( "$cf_ada_make" $ADAFLAGS \
-Plibrary.gpr \
- -XBUILD_DIR=`cd ../conftest.bin;pwd` \
- -XLIBRARY_DIR=`cd ../conftest.lib;pwd` \
- -XSOURCE_DIR=`pwd` \
+ -XBUILD_DIR="`cd ../conftest.bin;pwd`" \
+ -XLIBRARY_DIR="`cd ../conftest.lib;pwd`" \
+ -XSOURCE_DIR="`pwd`" \
-XSONAME=libConfTest.so.1 \
-XLIB_KIND=static 1>&AC_FD_CC 2>&1 ) ; then
cf_gnat_projects=yes
fi
cd ..
fi
if test -f conftest.lib/confpackage.ali
then
cf_gnat_libraries=yes
fi
- rm -rf conftest* *~conftest*
+ rm -rf ./conftest* ./*~conftest*
;;
esac
;;
esac
AC_MSG_RESULT($cf_gnat_projects)
fi # enable_gnat_projects
-if test $cf_gnat_projects = yes
+if test "$cf_gnat_projects" = yes
then
AC_MSG_CHECKING(if GNAT supports libraries)
AC_MSG_RESULT($cf_gnat_libraries)
fi
+USE_OLD_MAKERULES=""
+USE_GNAT_PROJECTS="#"
+USE_GNAT_MAKE_GPR="#"
+USE_GNAT_GPRBUILD="#"
+
if test "$cf_gnat_projects" = yes
then
USE_OLD_MAKERULES="#"
USE_GNAT_PROJECTS=""
-else
- USE_OLD_MAKERULES=""
- USE_GNAT_PROJECTS="#"
+ if test "$cf_cv_VERSION_GPRBUILD" != no
+ then
+ USE_GNAT_GPRBUILD=""
+ elif test "$cf_cv_VERSION_GNATMAKE" != no
+ then
+ USE_GNAT_MAKE_GPR=""
+ else
+ AC_MSG_WARN(use old makefile rules since tools are missing)
+ fi
fi
if test "$cf_gnat_libraries" = yes
then
USE_GNAT_LIBRARIES=""
else
USE_GNAT_LIBRARIES="#"
fi
AC_SUBST(USE_OLD_MAKERULES)
AC_SUBST(USE_GNAT_PROJECTS)
AC_SUBST(USE_GNAT_LIBRARIES)
+AC_SUBST(USE_GNAT_MAKE_GPR)
+AC_SUBST(USE_GNAT_GPRBUILD)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_GNAT_SIGINT version: 1 updated: 2011/03/27 20:07:59
+dnl CF_GNAT_SIGINT version: 2 updated: 2021/01/01 13:31:04
dnl --------------
dnl Check if gnat supports SIGINT, and presumably tasking. For the latter, it
dnl is noted that gnat may compile a tasking unit even for configurations which
dnl fail at runtime.
AC_DEFUN([CF_GNAT_SIGINT],[
AC_CACHE_CHECK(if GNAT supports SIGINT,cf_cv_gnat_sigint,[
CF_GNAT_TRY_LINK([with Ada.Interrupts.Names;
package ConfTest is
pragma Warnings (Off); -- the next pragma exists since 3.11p
pragma Unreserve_All_Interrupts;
pragma Warnings (On);
protected Process is
procedure Stop;
function Continue return Boolean;
pragma Attach_Handler (Stop, Ada.Interrupts.Names.SIGINT);
private
Done : Boolean := False;
end Process;
end ConfTest;],
[package body ConfTest is
protected body Process is
procedure Stop is
begin
Done := True;
end Stop;
function Continue return Boolean is
begin
return not Done;
end Continue;
end Process;
end ConfTest;],
[cf_cv_gnat_sigint=yes],
[cf_cv_gnat_sigint=no])])
-if test $cf_cv_gnat_sigint = yes ; then
+if test "$cf_cv_gnat_sigint" = yes ; then
USE_GNAT_SIGINT=""
else
USE_GNAT_SIGINT="#"
fi
AC_SUBST(USE_GNAT_SIGINT)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_GNAT_TRY_LINK version: 3 updated: 2011/03/19 14:47:45
+dnl CF_GNAT_TRY_LINK version: 4 updated: 2021/01/01 13:31:04
dnl ----------------
dnl Verify that a test program compiles/links with GNAT.
dnl $cf_ada_make is set to the program that compiles/links
dnl $ADAFLAGS may be set to the GNAT flags.
dnl
dnl $1 is the text of the spec
dnl $2 is the text of the body
dnl $3 is the shell command to execute if successful
dnl $4 is the shell command to execute if not successful
AC_DEFUN([CF_GNAT_TRY_LINK],
[
-rm -rf conftest* *~conftest*
+rm -rf ./conftest* ./*~conftest*
cat >>conftest.ads <<CF_EOF
$1
CF_EOF
cat >>conftest.adb <<CF_EOF
$2
CF_EOF
-if ( $cf_ada_make $ADAFLAGS conftest 1>&AC_FD_CC 2>&1 ) ; then
+if ( "$cf_ada_make" $ADAFLAGS conftest 1>&AC_FD_CC 2>&1 ) ; then
ifelse($3,, :,[ $3])
ifelse($4,,,[else
$4])
fi
-rm -rf conftest* *~conftest*
+rm -rf ./conftest* ./*~conftest*
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_GNAT_TRY_RUN version: 5 updated: 2011/03/19 14:47:45
+dnl CF_GNAT_TRY_RUN version: 6 updated: 2021/01/01 13:31:04
dnl ---------------
dnl Verify that a test program compiles and runs with GNAT
dnl $cf_ada_make is set to the program that compiles/links
dnl $ADAFLAGS may be set to the GNAT flags.
dnl
dnl $1 is the text of the spec
dnl $2 is the text of the body
dnl $3 is the shell command to execute if successful
dnl $4 is the shell command to execute if not successful
AC_DEFUN([CF_GNAT_TRY_RUN],
[
-rm -rf conftest* *~conftest*
+rm -rf ./conftest* ./*~conftest*
cat >>conftest.ads <<CF_EOF
$1
CF_EOF
cat >>conftest.adb <<CF_EOF
$2
CF_EOF
-if ( $cf_ada_make $ADAFLAGS conftest 1>&AC_FD_CC 2>&1 ) ; then
+if ( "$cf_ada_make" $ADAFLAGS conftest 1>&AC_FD_CC 2>&1 ) ; then
if ( ./conftest 1>&AC_FD_CC 2>&1 ) ; then
ifelse($3,, :,[ $3])
ifelse($4,,,[ else
$4])
fi
ifelse($4,,,[else
$4])
fi
-rm -rf conftest* *~conftest*
+rm -rf ./conftest* ./*~conftest*
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_GNAT_VERSION version: 22 updated: 2019/12/31 08:53:54
dnl ---------------
dnl $1 = cache variable to update
dnl $2 = program name
dnl Verify version of GNAT or related tool
AC_DEFUN([CF_GNAT_VERSION],
[
AC_CACHE_CHECK(for ifelse($2,,gnat,$2) version, cf_cv_gnat_version,[
cf_cv_gnat_version=`ifelse($2,,${cf_ada_make:-gnatmake},$2) --version 2>&1 | \
grep '[[0-9]].[[0-9]][[0-9]]*' |\
sed -e '2,$d' -e 's/[[^0-9 \.]]//g' -e 's/^[[ ]]*//' -e 's/ .*//'`
])
test -z "$cf_cv_gnat_version" && cf_cv_gnat_version=no
ifelse($1,,,[eval $1=$cf_cv_gnat_version; unset cf_cv_gnat_version])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_GNU_SOURCE version: 10 updated: 2018/12/10 20:09:41
dnl -------------
dnl Check if we must define _GNU_SOURCE to get a reasonable value for
dnl _XOPEN_SOURCE, upon which many POSIX definitions depend. This is a defect
dnl (or misfeature) of glibc2, which breaks portability of many applications,
dnl since it is interwoven with GNU extensions.
dnl
dnl Well, yes we could work around it...
dnl
dnl Parameters:
dnl $1 is the nominal value for _XOPEN_SOURCE
AC_DEFUN([CF_GNU_SOURCE],
[
cf_gnu_xopen_source=ifelse($1,,500,$1)
AC_CACHE_CHECK(if this is the GNU C library,cf_cv_gnu_library,[
AC_TRY_COMPILE([#include <sys/types.h>],[
#if __GLIBC__ > 0 && __GLIBC_MINOR__ >= 0
return 0;
#elif __NEWLIB__ > 0 && __NEWLIB_MINOR__ >= 0
return 0;
#else
# error not GNU C library
#endif],
[cf_cv_gnu_library=yes],
[cf_cv_gnu_library=no])
])
if test x$cf_cv_gnu_library = xyes; then
# With glibc 2.19 (13 years after this check was begun), _DEFAULT_SOURCE
# was changed to help a little. newlib incorporated the change about 4
# years later.
AC_CACHE_CHECK(if _DEFAULT_SOURCE can be used as a basis,cf_cv_gnu_library_219,[
cf_save="$CPPFLAGS"
CF_APPEND_TEXT(CPPFLAGS,-D_DEFAULT_SOURCE)
AC_TRY_COMPILE([#include <sys/types.h>],[
#if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 19) || (__GLIBC__ > 2)
return 0;
#elif (__NEWLIB__ == 2 && __NEWLIB_MINOR__ >= 4) || (__GLIBC__ > 3)
return 0;
#else
# error GNU C library __GLIBC__.__GLIBC_MINOR__ is too old
#endif],
[cf_cv_gnu_library_219=yes],
[cf_cv_gnu_library_219=no])
CPPFLAGS="$cf_save"
])
if test "x$cf_cv_gnu_library_219" = xyes; then
cf_save="$CPPFLAGS"
AC_CACHE_CHECK(if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE,cf_cv_gnu_dftsrc_219,[
CF_ADD_CFLAGS(-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=$cf_gnu_xopen_source)
AC_TRY_COMPILE([
#include <limits.h>
#include <sys/types.h>
],[
#if (_XOPEN_SOURCE >= $cf_gnu_xopen_source) && (MB_LEN_MAX > 1)
return 0;
#else
# error GNU C library is too old
#endif],
[cf_cv_gnu_dftsrc_219=yes],
[cf_cv_gnu_dftsrc_219=no])
])
test "x$cf_cv_gnu_dftsrc_219" = "xyes" || CPPFLAGS="$cf_save"
else
cf_cv_gnu_dftsrc_219=maybe
fi
if test "x$cf_cv_gnu_dftsrc_219" != xyes; then
AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[
AC_TRY_COMPILE([#include <sys/types.h>],[
#ifndef _XOPEN_SOURCE
#error expected _XOPEN_SOURCE to be defined
#endif],
[cf_cv_gnu_source=no],
[cf_save="$CPPFLAGS"
CF_ADD_CFLAGS(-D_GNU_SOURCE)
AC_TRY_COMPILE([#include <sys/types.h>],[
#ifdef _XOPEN_SOURCE
#error expected _XOPEN_SOURCE to be undefined
#endif],
[cf_cv_gnu_source=no],
[cf_cv_gnu_source=yes])
CPPFLAGS="$cf_save"
])
])
if test "$cf_cv_gnu_source" = yes
then
AC_CACHE_CHECK(if we should also define _DEFAULT_SOURCE,cf_cv_default_source,[
CF_APPEND_TEXT(CPPFLAGS,-D_GNU_SOURCE)
AC_TRY_COMPILE([#include <sys/types.h>],[
#ifdef _DEFAULT_SOURCE
#error expected _DEFAULT_SOURCE to be undefined
#endif],
[cf_cv_default_source=no],
[cf_cv_default_source=yes])
])
if test "$cf_cv_default_source" = yes
then
CF_APPEND_TEXT(CPPFLAGS,-D_DEFAULT_SOURCE)
fi
fi
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_GPP_LIBRARY version: 12 updated: 2015/04/17 21:13:04
+dnl CF_GPP_LIBRARY version: 13 updated: 2021/01/01 13:31:04
dnl --------------
dnl If we're trying to use g++, test if libg++ is installed (a rather common
dnl problem :-). If we have the compiler but no library, we'll be able to
dnl configure, but won't be able to build the c++ demo program.
AC_DEFUN([CF_GPP_LIBRARY],
[
cf_cxx_library=unknown
-case $cf_cv_system_name in
+case "$cf_cv_system_name" in
(os2*)
cf_gpp_libname=gpp
;;
(*)
cf_gpp_libname=g++
;;
esac
if test "$GXX" = yes; then
AC_MSG_CHECKING([for lib$cf_gpp_libname])
cf_save="$LIBS"
CF_ADD_LIB($cf_gpp_libname)
AC_TRY_LINK([
#include <$cf_gpp_libname/builtin.h>
],
[two_arg_error_handler_t foo2 = lib_error_handler],
[cf_cxx_library=yes
CF_ADD_LIB($cf_gpp_libname,CXXLIBS)
if test "$cf_gpp_libname" = cpp ; then
AC_DEFINE(HAVE_GPP_BUILTIN_H,1,[Define to 1 if we have gpp builtin.h])
else
AC_DEFINE(HAVE_GXX_BUILTIN_H,1,[Define to 1 if we have g++ builtin.h])
fi],
[AC_TRY_LINK([
#include <builtin.h>
],
[two_arg_error_handler_t foo2 = lib_error_handler],
[cf_cxx_library=yes
CF_ADD_LIB($cf_gpp_libname,CXXLIBS)
AC_DEFINE(HAVE_BUILTIN_H,1,[Define to 1 if we have builtin.h])],
[cf_cxx_library=no])])
LIBS="$cf_save"
AC_MSG_RESULT($cf_cxx_library)
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_GXX_VERSION version: 8 updated: 2017/02/11 14:48:57
dnl --------------
dnl Check for version of g++
AC_DEFUN([CF_GXX_VERSION],[
AC_REQUIRE([AC_PROG_CPP])
GXX_VERSION=none
if test "$GXX" = yes; then
AC_MSG_CHECKING(version of ${CXX:-g++})
GXX_VERSION="`${CXX:-g++} --version| sed -e '2,$d' -e 's/^.*(GCC) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`"
if test -z "$GXX_VERSION"
then
GXX_VERSION=unknown
GXX=no
fi
AC_MSG_RESULT($GXX_VERSION)
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_GXX_WARNINGS version: 9 updated: 2015/04/17 21:13:04
+dnl CF_GXX_WARNINGS version: 11 updated: 2021/01/08 16:50:55
dnl ---------------
dnl Check if the compiler supports useful warning options.
dnl
dnl Most of gcc's options apply to g++, except:
dnl -Wbad-function-cast
dnl -Wmissing-declarations
dnl -Wnested-externs
dnl
dnl Omit a few (for now):
dnl -Winline
dnl
dnl Parameter:
dnl $1 is an optional list of g++ warning flags that a particular
dnl application might want to use, e.g., "no-unused" for
dnl -Wno-unused
dnl Special:
dnl If $with_ext_const is "yes", add a check for -Wwrite-strings
dnl
AC_DEFUN([CF_GXX_WARNINGS],
[
CF_INTEL_COMPILER(GXX,INTEL_CPLUSPLUS,CXXFLAGS)
CF_CLANG_COMPILER(GXX,CLANG_CPLUSPLUS,CXXFLAGS)
AC_REQUIRE([CF_GXX_VERSION])
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
cat > conftest.$ac_ext <<EOF
#line __oline__ "configure"
int main(int argc, char *argv[[]]) { return (argv[[argc-1]] == 0) ; }
EOF
if test "$INTEL_CPLUSPLUS" = yes
then
# The "-wdXXX" options suppress warnings:
# remark #1419: external declaration in primary source file
# remark #1682: implicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
# remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
# remark #193: zero used for undefined preprocessing identifier
# remark #593: variable "curs_sb_left_arrow" was set but never used
# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
# remark #869: parameter "tw" was never referenced
# remark #981: operands are evaluated in unspecified order
# warning #269: invalid format string conversion
AC_CHECKING([for $CC warning options])
cf_save_CXXFLAGS="$CXXFLAGS"
EXTRA_CXXFLAGS="-Wall"
for cf_opt in \
wd1419 \
wd1682 \
wd1683 \
wd1684 \
wd193 \
wd279 \
wd593 \
wd810 \
wd869 \
wd981
do
CXXFLAGS="$cf_save_CXXFLAGS $EXTRA_CXXFLAGS -$cf_opt"
if AC_TRY_EVAL(ac_compile); then
test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt)
EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -$cf_opt"
fi
done
CXXFLAGS="$cf_save_CXXFLAGS"
elif test "$GXX" = yes
then
AC_CHECKING([for $CXX warning options])
cf_save_CXXFLAGS="$CXXFLAGS"
EXTRA_CXXFLAGS="-W -Wall"
cf_gxx_extra_warnings=""
test "$with_ext_const" = yes && cf_gxx_extra_warnings="Wwrite-strings"
- case "$GCC_VERSION" in
+ case "$GXX_VERSION" in
([[1-2]].*)
;;
(*)
cf_gxx_extra_warnings="$cf_gxx_extra_warnings Weffc++"
;;
esac
for cf_opt in \
Wabi \
fabi-version=0 \
Wextra \
Wignored-qualifiers \
Wlogical-op \
Woverloaded-virtual \
Wsign-promo \
Wsynth \
Wold-style-cast \
Wcast-align \
Wcast-qual \
Wpointer-arith \
Wshadow \
Wundef $cf_gxx_extra_warnings $1
do
CXXFLAGS="$cf_save_CXXFLAGS $EXTRA_CXXFLAGS -Werror -$cf_opt"
if AC_TRY_EVAL(ac_compile); then
test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt)
EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -$cf_opt"
else
test -n "$verbose" && AC_MSG_RESULT(... no -$cf_opt)
fi
done
CXXFLAGS="$cf_save_CXXFLAGS"
fi
-rm -rf conftest*
+rm -rf ./conftest*
AC_LANG_RESTORE
AC_SUBST(EXTRA_CXXFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_HASHED_DB version: 7 updated: 2015/04/18 08:56:57
dnl ------------
dnl Look for an instance of the Berkeley hashed database.
dnl
dnl $1 = optional parameter, to specify install-prefix for the database.
AC_DEFUN([CF_HASHED_DB],
[
ifelse([$1],,,[
case $1 in
(yes|*able*)
;;
(*)
if test -d "$1" ; then
CF_ADD_INCDIR($1/include)
CF_ADD_LIBDIR($1/lib)
else
case "$1" in
(./*|../*|/*)
AC_MSG_WARN(no such directory $1)
;;
(*)
CF_FIND_SUB_INCDIR($1)
CF_FIND_SUB_LIBDIR($1)
;;
esac
fi
esac
])
AC_CHECK_HEADER(db.h,[
CF_HASHED_DB_VERSION
if test "$cf_cv_hashed_db_version" = unknown ; then
AC_MSG_ERROR(Cannot determine version of db)
else
CF_HASHED_DB_LIBS
if test "$cf_cv_hashed_db_libs" = unknown ; then
AC_MSG_ERROR(Cannot determine library for db)
elif test "$cf_cv_hashed_db_libs" != default ; then
CF_ADD_LIB($cf_cv_hashed_db_libs)
fi
fi
],[
AC_MSG_ERROR(Cannot find db.h)
])
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_HASHED_DB_LIBS version: 9 updated: 2010/05/29 16:31:02
+dnl CF_HASHED_DB_LIBS version: 10 updated: 2021/01/02 17:09:14
dnl -----------------
dnl Given that we have the header and version for hashed database, find the
dnl library information.
AC_DEFUN([CF_HASHED_DB_LIBS],
[
AC_CACHE_CHECK(for db libraries, cf_cv_hashed_db_libs,[
cf_cv_hashed_db_libs=unknown
for cf_db_libs in "" db$cf_cv_hashed_db_version db-$cf_cv_hashed_db_version db ''
do
cf_save_libs="$LIBS"
if test -n "$cf_db_libs"; then
CF_ADD_LIB($cf_db_libs)
fi
- CF_MSG_LOG(checking for library "$cf_db_libs")
+ CF_MSG_LOG(checking for library $cf_db_libs)
AC_TRY_LINK([
$ac_includes_default
#include <db.h>
],[
char *path = "/tmp/foo";
#ifdef DB_VERSION_MAJOR
#if DB_VERSION_MAJOR >= 4
DB *result = 0;
db_create(&result, NULL, 0);
result->open(result,
NULL,
path,
path,
DB_HASH,
DB_CREATE,
0644);
#elif DB_VERSION_MAJOR >= 3
DB *result = 0;
db_create(&result, NULL, 0);
result->open(result,
path,
path,
DB_HASH,
DB_CREATE,
0644);
#elif DB_VERSION_MAJOR >= 2
DB *result = 0;
db_open(path,
DB_HASH,
DB_CREATE,
0644,
(DB_ENV *) 0,
(DB_INFO *) 0,
&result);
#endif /* DB_VERSION_MAJOR */
#else
DB *result = dbopen(path,
2,
0644,
DB_HASH,
0);
#endif
${cf_cv_main_return:-return}(result != 0)
],[
if test -n "$cf_db_libs" ; then
cf_cv_hashed_db_libs=$cf_db_libs
else
cf_cv_hashed_db_libs=default
fi
LIBS="$cf_save_libs"
break
])
LIBS="$cf_save_libs"
done
])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_HASHED_DB_VERSION version: 4 updated: 2014/04/12 16:47:01
dnl --------------------
dnl Given that we have the header file for hashed database, find the version
dnl information.
AC_DEFUN([CF_HASHED_DB_VERSION],
[
AC_CACHE_CHECK(for version of db, cf_cv_hashed_db_version,[
cf_cv_hashed_db_version=unknown
for cf_db_version in 1 2 3 4 5 6
do
CF_MSG_LOG(checking for db version $cf_db_version)
AC_TRY_COMPILE([
$ac_includes_default
#include <db.h>
#ifdef DB_VERSION_MAJOR
/* db2 (DB_VERSION_MAJOR=2) has also DB_VERSION_MINOR, tested with 7 */
#if $cf_db_version == DB_VERSION_MAJOR
/* ok */
#else
make an error
#endif
#else
#if $cf_db_version == 1
/* ok: assuming this is DB 1.8.5 */
#else
make an error
#endif
#endif
],[DBT *foo = 0],[
cf_cv_hashed_db_version=$cf_db_version
break
])
done
])
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_HEADER_PATH version: 13 updated: 2015/04/15 19:08:48
+dnl CF_HEADER_PATH version: 15 updated: 2021/01/01 13:31:04
dnl --------------
dnl Construct a search-list of directories for a nonstandard header-file
dnl
dnl Parameters
dnl $1 = the variable to return as result
dnl $2 = the package name
AC_DEFUN([CF_HEADER_PATH],
[
$1=
# collect the current set of include-directories from compiler flags
cf_header_path_list=""
if test -n "${CFLAGS}${CPPFLAGS}" ; then
for cf_header_path in $CPPFLAGS $CFLAGS
do
- case $cf_header_path in
+ case "$cf_header_path" in
(-I*)
cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'`
CF_ADD_SUBDIR_PATH($1,$2,include,$cf_header_path,NONE)
cf_header_path_list="$cf_header_path_list [$]$1"
;;
esac
done
fi
# add the variations for the package we are looking for
CF_SUBDIR_PATH($1,$2,include)
test "$includedir" != NONE && \
test "$includedir" != "/usr/include" && \
test -d "$includedir" && {
- test -d $includedir && $1="[$]$1 $includedir"
- test -d $includedir/$2 && $1="[$]$1 $includedir/$2"
+ test -d "$includedir" && $1="[$]$1 $includedir"
+ test -d "$includedir/$2" && $1="[$]$1 $includedir/$2"
}
test "$oldincludedir" != NONE && \
test "$oldincludedir" != "/usr/include" && \
test -d "$oldincludedir" && {
- test -d $oldincludedir && $1="[$]$1 $oldincludedir"
- test -d $oldincludedir/$2 && $1="[$]$1 $oldincludedir/$2"
+ test -d "$oldincludedir" && $1="[$]$1 $oldincludedir"
+ test -d "$oldincludedir/$2" && $1="[$]$1 $oldincludedir/$2"
}
$1="[$]$1 $cf_header_path_list"
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_HELP_MESSAGE version: 4 updated: 2019/12/31 08:53:54
dnl ---------------
dnl Insert text into the help-message, for readability, from AC_ARG_WITH.
AC_DEFUN([CF_HELP_MESSAGE],
[CF_ACVERSION_CHECK(2.53,[],[
AC_DIVERT_HELP($1)])dnl
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_INCLUDE_DIRS version: 10 updated: 2014/09/19 20:58:42
dnl ---------------
dnl Construct the list of include-options according to whether we're building
dnl in the source directory or using '--srcdir=DIR' option.
AC_DEFUN([CF_INCLUDE_DIRS],
[
if test "$srcdir" != "."; then
CPPFLAGS="-I\${srcdir}/../include $CPPFLAGS"
fi
CPPFLAGS="-I../include $CPPFLAGS"
if test "$srcdir" != "."; then
CPPFLAGS="-I\${srcdir} $CPPFLAGS"
fi
CPPFLAGS="-I. $CPPFLAGS"
AC_SUBST(CPPFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_INSTALL_OPTS version: 2 updated: 2018/08/18 12:19:21
dnl ---------------
dnl prompt for/fill-in useful install-program options
AC_DEFUN([CF_INSTALL_OPTS],
[
CF_INSTALL_OPT_S
CF_INSTALL_OPT_P
CF_INSTALL_OPT_O
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_INSTALL_OPT_O version: 2 updated: 2015/05/15 19:45:35
+dnl CF_INSTALL_OPT_O version: 3 updated: 2020/12/31 20:19:42
dnl ----------------
dnl Almost all "install" programs default to the current user's ownership.
dnl Almost - MINIX is an exception.
AC_DEFUN([CF_INSTALL_OPT_O],
[
AC_MSG_CHECKING(if install needs to be told about ownership)
case `$ac_config_guess` in
(*minix)
with_install_o=yes
;;
(*)
with_install_o=no
;;
esac
AC_MSG_RESULT($with_install_o)
if test "x$with_install_o" = xyes
then
- INSTALL_OPT_O=`id root|sed -e 's/uid=[[0-9]]*(/ -o /' -e 's/gid=[[0-9]]*(/ -g /' -e 's/ [[^=[:space:]]][[^=[:space:]]]*=.*/ /' -e 's/)//g'`
+ INSTALL_OPT_O="`id root|sed -e 's/uid=[[0-9]]*(/ -o /' -e 's/gid=[[0-9]]*(/ -g /' -e 's/ [[^=[:space:]]][[^=[:space:]]]*=.*/ /' -e 's/)//g'`"
else
INSTALL_OPT_O=
fi
AC_SUBST(INSTALL_OPT_O)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_INSTALL_OPT_P version: 1 updated: 2018/08/18 12:19:21
+dnl CF_INSTALL_OPT_P version: 3 updated: 2021/01/01 13:31:04
dnl ----------------
dnl Some install-programs accept a "-p" option to preserve file modification
dnl timestamps. That can be useful as an install option, as well as a way to
dnl avoid the need for ranlib after copying a static archive.
AC_DEFUN([CF_INSTALL_OPT_P],
[
-: ${INSTALL:=install}
+: "${INSTALL:=install}"
AC_CACHE_CHECK(if install accepts -p option, cf_cv_install_p,[
- rm -rf conftest*
+ rm -rf ./conftest*
date >conftest.in
mkdir conftest.out
sleep 3
if $INSTALL -p conftest.in conftest.out 2>/dev/null
then
if test -f conftest.out/conftest.in
then
test conftest.in -nt conftest.out/conftest.in 2>conftest.err && \
test conftest.out/conftest.in -nt conftest.in 2>conftest.err
if test -s conftest.err
then
cf_cv_install_p=no
else
cf_cv_install_p=yes
fi
else
cf_cv_install_p=no
fi
else
cf_cv_install_p=no
fi
- rm -rf conftest*
+ rm -rf ./conftest*
])
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_INSTALL_OPT_S version: 2 updated: 2018/08/18 12:19:21
+dnl CF_INSTALL_OPT_S version: 3 updated: 2021/01/05 19:23:48
dnl ----------------
dnl By default, we should strip executables which are installed, but leave the
dnl ability to suppress that for unit-testing.
AC_DEFUN([CF_INSTALL_OPT_S],
[
AC_MSG_CHECKING(if you want to install stripped executables)
CF_ARG_DISABLE(stripping,
[ --disable-stripping do not strip (debug info) installed executables],
- [with_stripping=no],
- [with_stripping=yes])
-AC_MSG_RESULT($with_stripping)
+ [enable_stripping=no],
+ [enable_stripping=yes])
+AC_MSG_RESULT($enable_stripping)
-if test "$with_stripping" = yes
+if test "$enable_stripping" = yes
then
INSTALL_OPT_S="-s"
else
INSTALL_OPT_S=
fi
AC_SUBST(INSTALL_OPT_S)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_INTEL_COMPILER version: 7 updated: 2015/04/12 15:39:00
+dnl CF_INTEL_COMPILER version: 8 updated: 2021/01/01 16:53:59
dnl -----------------
dnl Check if the given compiler is really the Intel compiler for Linux. It
dnl tries to imitate gcc, but does not return an error when it finds a mismatch
dnl between prototypes, e.g., as exercised by CF_MISSING_CHECK.
dnl
dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to
dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from
dnl the wrappers for gcc and g++ warnings.
dnl
dnl $1 = GCC (default) or GXX
dnl $2 = INTEL_COMPILER (default) or INTEL_CPLUSPLUS
dnl $3 = CFLAGS (default) or CXXFLAGS
AC_DEFUN([CF_INTEL_COMPILER],[
AC_REQUIRE([AC_CANONICAL_HOST])
ifelse([$2],,INTEL_COMPILER,[$2])=no
if test "$ifelse([$1],,[$1],GCC)" = yes ; then
- case $host_os in
+ case "$host_os" in
(linux*|gnu*)
AC_MSG_CHECKING(if this is really Intel ifelse([$1],GXX,C++,C) compiler)
cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])"
ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -no-gcc"
AC_TRY_COMPILE([],[
#ifdef __INTEL_COMPILER
#else
make an error
#endif
],[ifelse([$2],,INTEL_COMPILER,[$2])=yes
cf_save_CFLAGS="$cf_save_CFLAGS -we147"
],[])
ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS"
AC_MSG_RESULT($ifelse([$2],,INTEL_COMPILER,[$2]))
;;
esac
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_ISASCII version: 4 updated: 2012/10/06 17:56:13
dnl ----------
dnl Check if we have either a function or macro for 'isascii()'.
AC_DEFUN([CF_ISASCII],
[
AC_MSG_CHECKING(for isascii)
AC_CACHE_VAL(cf_cv_have_isascii,[
AC_TRY_LINK([#include <ctype.h>],[int x = isascii(' ')],
[cf_cv_have_isascii=yes],
[cf_cv_have_isascii=no])
])dnl
AC_MSG_RESULT($cf_cv_have_isascii)
test "$cf_cv_have_isascii" = yes && AC_DEFINE(HAVE_ISASCII,1,[Define to 1 if we have isascii()])
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_LARGEFILE version: 11 updated: 2018/06/20 20:23:13
+dnl CF_LARGEFILE version: 12 updated: 2020/03/19 20:23:48
dnl ------------
dnl Add checks for large file support.
AC_DEFUN([CF_LARGEFILE],[
ifdef([AC_FUNC_FSEEKO],[
AC_SYS_LARGEFILE
if test "$enable_largefile" != no ; then
AC_FUNC_FSEEKO
# Normally we would collect these definitions in the config.h,
# but (like _XOPEN_SOURCE), some environments rely on having these
# defined before any of the system headers are included. Another
# case comes up with C++, e.g., on AIX the compiler compiles the
# header files by themselves before looking at the body files it is
# told to compile. For ncurses, those header files do not include
# the config.h
if test "$ac_cv_sys_large_files" != no
then
CF_APPEND_TEXT(CPPFLAGS,-D_LARGE_FILES)
fi
if test "$ac_cv_sys_largefile_source" != no
then
CF_APPEND_TEXT(CPPFLAGS,-D_LARGEFILE_SOURCE)
fi
if test "$ac_cv_sys_file_offset_bits" != no
then
CF_APPEND_TEXT(CPPFLAGS,-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits)
fi
AC_CACHE_CHECK(whether to use struct dirent64, cf_cv_struct_dirent64,[
AC_TRY_COMPILE([
#pragma GCC diagnostic error "-Wincompatible-pointer-types"
#include <sys/types.h>
#include <dirent.h>
],[
/* if transitional largefile support is setup, this is true */
extern struct dirent64 * readdir(DIR *);
struct dirent64 *x = readdir((DIR *)0);
struct dirent *y = readdir((DIR *)0);
int z = x - y;
+ (void)z;
],
[cf_cv_struct_dirent64=yes],
[cf_cv_struct_dirent64=no])
])
test "$cf_cv_struct_dirent64" = yes && AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Define to 1 if we have struct dirent64])
fi
])
])
dnl ---------------------------------------------------------------------------
-dnl CF_LDFLAGS_STATIC version: 12 updated: 2015/04/18 08:56:57
+dnl CF_LDFLAGS_STATIC version: 14 updated: 2021/01/02 17:09:14
dnl -----------------
dnl Check for compiler/linker flags used to temporarily force usage of static
dnl libraries. This depends on the compiler and platform. Use this to help
dnl ensure that the linker picks up a given library based on its position in
dnl the list of linker options and libraries.
AC_DEFUN([CF_LDFLAGS_STATIC],[
if test "$GCC" = yes ; then
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(OS/2*|os2*|aix[[4]]*|solaris2.1[[0-9]]|darwin*)
LDFLAGS_STATIC=
LDFLAGS_SHARED=
;;
(*) # normally, except when broken
LDFLAGS_STATIC=-static
LDFLAGS_SHARED=-dynamic
;;
esac
else
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(aix[[4-7]]*) # from ld manpage
LDFLAGS_STATIC=-bstatic
LDFLAGS_SHARED=-bdynamic
;;
(hpux*) # from ld manpage for hpux10.20, hpux11.11
# We could also use just "archive" and "shared".
LDFLAGS_STATIC=-Wl,-a,archive_shared
LDFLAGS_SHARED=-Wl,-a,shared_archive
;;
(irix*) # from ld manpage IRIX64
LDFLAGS_STATIC=-Bstatic
LDFLAGS_SHARED=-Bdynamic
;;
(osf[[45]]*) # from ld manpage osf4.0d, osf5.1
# alternative "-oldstyle_liblookup" (not in cc manpage)
LDFLAGS_STATIC=-noso
LDFLAGS_SHARED=-so_archive
;;
(solaris2*)
LDFLAGS_STATIC=-Bstatic
LDFLAGS_SHARED=-Bdynamic
;;
esac
fi
if test -n "$LDFLAGS_STATIC" && test -n "$LDFLAGS_SHARED"
then
AC_MSG_CHECKING(if linker supports switching between static/dynamic)
rm -f libconftest.a
cat >conftest.$ac_ext <<EOF
#line __oline__ "configure"
#include <stdio.h>
int cf_ldflags_static(FILE *fp) { return fflush(fp); }
EOF
if AC_TRY_EVAL(ac_compile) ; then
( $AR $ARFLAGS libconftest.a conftest.o ) 2>&AC_FD_CC 1>/dev/null
( eval $RANLIB libconftest.a ) 2>&AC_FD_CC >/dev/null
fi
rm -f conftest.*
cf_save_LIBS="$LIBS"
LIBS="$LDFLAGS_STATIC -L`pwd` -lconftest $LDFLAGS_DYNAMIC $LIBS"
AC_TRY_LINK([
#line __oline__ "configure"
#include <stdio.h>
int cf_ldflags_static(FILE *fp);
],[
return cf_ldflags_static(stdin);
],[
# some linkers simply ignore the -dynamic
- case x`file conftest$ac_exeext 2>/dev/null` in
+ case x`file "conftest$ac_exeext" 2>/dev/null` in
(*static*)
cf_ldflags_static=no
;;
(*)
cf_ldflags_static=yes
;;
esac
],[cf_ldflags_static=no])
rm -f libconftest.*
LIBS="$cf_save_LIBS"
AC_MSG_RESULT($cf_ldflags_static)
- if test $cf_ldflags_static != yes
+ if test "$cf_ldflags_static" != yes
then
LDFLAGS_STATIC=
LDFLAGS_SHARED=
fi
else
LDFLAGS_STATIC=
LDFLAGS_SHARED=
fi
AC_SUBST(LDFLAGS_STATIC)
AC_SUBST(LDFLAGS_SHARED)
])
dnl ---------------------------------------------------------------------------
-dnl CF_LD_RPATH_OPT version: 8 updated: 2018/08/18 16:36:35
+dnl CF_LD_RPATH_OPT version: 9 updated: 2021/01/01 13:31:04
dnl ---------------
dnl For the given system and compiler, find the compiler flags to pass to the
dnl loader to use the "rpath" feature.
AC_DEFUN([CF_LD_RPATH_OPT],
[
AC_REQUIRE([CF_CHECK_CACHE])
LD_RPATH_OPT=
if test "x$cf_cv_enable_rpath" != xno
then
AC_MSG_CHECKING(for an rpath option)
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(irix*)
if test "$GCC" = yes; then
LD_RPATH_OPT="-Wl,-rpath,"
else
LD_RPATH_OPT="-rpath "
fi
;;
(linux*|gnu*|k*bsd*-gnu|freebsd*)
LD_RPATH_OPT="-Wl,-rpath,"
;;
(openbsd[[2-9]].*|mirbsd*)
LD_RPATH_OPT="-Wl,-rpath,"
;;
(dragonfly*)
LD_RPATH_OPT="-rpath "
;;
(netbsd*)
LD_RPATH_OPT="-Wl,-rpath,"
;;
(osf*|mls+*)
LD_RPATH_OPT="-rpath "
;;
(solaris2*)
LD_RPATH_OPT="-R"
;;
(*)
;;
esac
AC_MSG_RESULT($LD_RPATH_OPT)
case "x$LD_RPATH_OPT" in
(x-R*)
AC_MSG_CHECKING(if we need a space after rpath option)
cf_save_LIBS="$LIBS"
CF_ADD_LIBS(${LD_RPATH_OPT}$libdir)
AC_TRY_LINK(, , cf_rpath_space=no, cf_rpath_space=yes)
LIBS="$cf_save_LIBS"
AC_MSG_RESULT($cf_rpath_space)
test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT "
;;
esac
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_LD_SEARCHPATH version: 2 updated: 2019/09/26 20:34:14
dnl ----------------
dnl Try to obtain the linker's search-path, for use in scripts.
dnl
dnl Ignore LD_LIBRARY_PATH, etc.
AC_DEFUN([CF_LD_SEARCHPATH],[
AC_CACHE_CHECK(for linker search path,cf_cv_ld_searchpath,[
if test "$cross_compiling" != yes ; then
# GNU binutils' ld does not involve permissions which may stop ldconfig.
cf_pathlist=`ld --verbose 2>/dev/null | grep SEARCH_DIR | sed -e 's,SEARCH_DIR[[("=]][[("=]]*,,g' -e 's/"[[)]];//gp' | sort -u`
# The -NX options tell newer versions of Linux ldconfig to not attempt to
# update the cache, which makes it run faster.
test -z "$cf_pathlist" && \
cf_pathlist=`ldconfig -NX -v 2>/dev/null | sed -e '/^[[ ]]/d' -e 's/:$//' | sort -u`
test -z "$cf_pathlist" &&
cf_pathlist=`ldconfig -v 2>/dev/null | sed -n -e '/^[[ ]]/d' -e 's/:$//p' | sort -u`
# This works with OpenBSD 6.5, which lists only filenames
test -z "$cf_pathlist" &&
cf_pathlist=`ldconfig -v 2>/dev/null | sed -n -e 's,^Adding \(.*\)/.*[$],\1,p' | sort -u`
if test -z "$cf_pathlist"
then
# dyld default path with MacOS
if test -f /usr/bin/otool && test "x`uname -s`" = xDarwin
then
# do this to bypass check
cf_cv_ld_searchpath='$HOME/lib'
cf_pathlist="/usr/local/lib /lib /usr/lib"
fi
fi
if test -z "$cf_pathlist"
then
# Solaris is hardcoded
if test -d /opt/SUNWspro/lib
then
cf_pathlist="/opt/SUNWspro/lib /usr/ccs/lib /usr/lib"
elif test -d /usr/ccs/lib
then
cf_pathlist="/usr/ccs/lib /usr/lib"
fi
fi
fi
# If nothing else, assume it is conventional
test -z "$cf_pathlist" && cf_pathlist="/usr/lib /lib"
# Finally, check that this is only directories
for cf_path in [$]0 $cf_pathlist
do
if test -d "$cf_path"; then
test -n "$cf_cv_ld_searchpath" && cf_cv_ld_searchpath="${cf_cv_ld_searchpath} "
cf_cv_ld_searchpath="${cf_cv_ld_searchpath}${cf_path}"
fi
done
# Ensure that it is nonempty
test -z "$cf_cv_ld_searchpath" && cf_cv_ld_searchpath=/usr/lib
])
LD_SEARCHPATH=`echo "$cf_cv_ld_searchpath"|sed -e 's/ /|/g'`
AC_SUBST(LD_SEARCHPATH)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_LIBRARY_PATH version: 10 updated: 2015/04/15 19:08:48
+dnl CF_LIBRARY_PATH version: 11 updated: 2021/01/01 13:31:04
dnl ---------------
dnl Construct a search-list of directories for a nonstandard library-file
dnl
dnl Parameters
dnl $1 = the variable to return as result
dnl $2 = the package name
AC_DEFUN([CF_LIBRARY_PATH],
[
$1=
cf_library_path_list=""
if test -n "${LDFLAGS}${LIBS}" ; then
for cf_library_path in $LDFLAGS $LIBS
do
- case $cf_library_path in
+ case "$cf_library_path" in
(-L*)
cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'`
CF_ADD_SUBDIR_PATH($1,$2,lib,$cf_library_path,NONE)
cf_library_path_list="$cf_library_path_list [$]$1"
;;
esac
done
fi
CF_SUBDIR_PATH($1,$2,lib)
$1="$cf_library_path_list [$]$1"
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_LIBTOOL_VERSION version: 1 updated: 2013/04/06 18:03:09
dnl ------------------
AC_DEFUN([CF_LIBTOOL_VERSION],[
if test -n "$LIBTOOL" && test "$LIBTOOL" != none
then
cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([[^)]]*)//g' -e 's/^[[^1-9]]*//' -e 's/[[^0-9.]].*//'`
else
cf_cv_libtool_version=
fi
test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_LIB_PREFIX version: 12 updated: 2015/10/17 19:03:33
+dnl CF_LIB_PREFIX version: 14 updated: 2021/01/01 13:31:04
dnl -------------
dnl Compute the library-prefix for the given host system
dnl $1 = variable to set
define([CF_LIB_PREFIX],
[
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(OS/2*|os2*)
if test "$DFT_LWR_MODEL" = libtool; then
LIB_PREFIX='lib'
else
LIB_PREFIX=''
fi
;;
+ (*-msvc*)
+ LIB_PREFIX=''
+ ;;
(*) LIB_PREFIX='lib'
;;
esac
ifelse($1,,,[$1=$LIB_PREFIX])
AC_SUBST(LIB_PREFIX)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_LIB_RULES version: 88 updated: 2018/08/18 12:19:21
+dnl CF_LIB_RULES version: 94 updated: 2021/01/23 15:37:41
dnl ------------
dnl Append definitions and rules for the given models to the subdirectory
dnl Makefiles, and the recursion rule for the top-level Makefile. If the
dnl subdirectory is a library-source directory, modify the Libs_To_Make list in
dnl the corresponding makefile to list the models that we'll generate.
dnl
dnl For shared libraries, make a list of symbolic links to construct when
dnl generating each library. The convention used for Linux is the simplest
dnl one:
dnl lib<name>.so ->
dnl lib<name>.so.<major> ->
dnl lib<name>.so.<maj>.<minor>
dnl
dnl Note: Libs_To_Make is mixed case, since it is not a pure autoconf variable.
AC_DEFUN([CF_LIB_RULES],
-[
+[AC_REQUIRE([AC_PROG_FGREP])dnl
+
cf_prefix=$LIB_PREFIX
AC_REQUIRE([CF_SUBST_NCURSES_VERSION])
-case $cf_cv_shlib_version in
-(cygdll|msysdll|mingw)
+case "$cf_cv_shlib_version" in
+(cygdll|msysdll|mingw|msvcdll)
TINFO_NAME=$TINFO_ARG_SUFFIX
TINFO_SUFFIX=.dll
;;
esac
if test -n "$TINFO_SUFFIX" ; then
- case $TINFO_SUFFIX in
+ case "$TINFO_SUFFIX" in
(tw*)
TINFO_NAME="${TINFO_NAME}tw${EXTRA_SUFFIX}"
- TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^tw'$EXTRA_SUFFIX'//'`
+ TINFO_SUFFIX=`echo "$TINFO_SUFFIX" | sed 's/^tw'$EXTRA_SUFFIX'//'`
;;
(t*)
TINFO_NAME="${TINFO_NAME}t${EXTRA_SUFFIX}"
- TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^t'$EXTRA_SUFFIX'//'`
+ TINFO_SUFFIX=`echo "$TINFO_SUFFIX" | sed 's/^t'$EXTRA_SUFFIX'//'`
;;
(w*)
TINFO_NAME="${TINFO_NAME}w${EXTRA_SUFFIX}"
- TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^w'$EXTRA_SUFFIX'//'`
+ TINFO_SUFFIX=`echo "$TINFO_SUFFIX" | sed 's/^w'$EXTRA_SUFFIX'//'`
;;
esac
fi
for cf_dir in $SRC_SUBDIRS
do
- if test ! -d $srcdir/$cf_dir ; then
+ if test ! -d "$srcdir/$cf_dir" ; then
continue
- elif test -f $srcdir/$cf_dir/modules; then
+ elif test -f "$srcdir/$cf_dir/modules" ; then
SHARED_LIB=
Libs_To_Make=
cf_awk_program=
if test -n "${cf_cv_abi_version}" && test "x${cf_cv_abi_version}" != "x5"
then
cf_awk_program="$cf_awk_program\
/deprecated in ABI${cf_cv_abi_version}/ { next; }\
{ sub(\"NCURSES([[WT]]+)?\", \"&${cf_cv_abi_version}\"); }\
"
fi
if test "x$WILDCARD_SYMS" = xno
then
cf_awk_program="$cf_awk_program\
/[[ ]]_\\*;/ { skip=1; next; }\
"
fi
if test "x$cf_awk_program" != "x"
then
cat >>$cf_dir/Makefile <<CF_EOF
# Generated by CF_LIB_RULES
resulting.map: $UNALTERED_SYMS
$AWK 'BEGIN { skip = 1; last=""; } \
$cf_awk_program \
{ if ( last != "" && ( skip == 0 || \[$]\[$]0 !~ /}/ ) ) { print last; }\
skip = 0; last = \[$]\[$]0; } \
-END { print last; }' < $UNALTERED_SYMS >\[$]@
+END { print last; }' < "$UNALTERED_SYMS" >\[$]@
distclean::
rm -f resulting.map
CF_EOF
fi
for cf_item in $cf_LIST_MODELS
do
CF_LIB_SUFFIX($cf_item,cf_suffix,cf_depsuf)
- cf_libname=$cf_dir
- test "$cf_dir" = c++ && cf_libname=ncurses++
- if test $cf_item = shared ; then
+ if test "$cf_dir" = "c++"
+ then
+ CF_MAP_LIB_BASENAME(cf_libname,cxx)
+ else
+ CF_MAP_LIB_BASENAME(cf_libname,$cf_dir)
+ fi
+ test -z "$cf_libname" && cf_libname="$cf_dir"
+ if test "$cf_item" = shared ; then
if test -n "${LIB_SUFFIX}"
then
cf_shared_suffix=`echo "$cf_suffix" | sed 's/^'"${USE_LIB_SUFFIX}"'//'`
else
cf_shared_suffix="$cf_suffix"
fi
if test "$cf_cv_do_symlinks" = yes ; then
cf_version_name=
case "$cf_cv_shlib_version" in
(rel)
cf_version_name=REL_VERSION
;;
(abi)
cf_version_name=ABI_VERSION
;;
esac
if test -n "$cf_version_name"
then
case "$cf_cv_system_name" in
(darwin*)
# "w", etc?
cf_suffix="${USE_LIB_SUFFIX}"'.${'$cf_version_name'}'"$cf_shared_suffix"
;;
(*)
cf_suffix="$cf_suffix"'.${'$cf_version_name'}'
;;
esac
fi
if test -n "${USE_LIB_SUFFIX}"
then
cf_shared_suffix=`echo "$cf_suffix" | sed 's/^'"${USE_LIB_SUFFIX}"'//'`
else
cf_shared_suffix="$cf_suffix"
fi
fi
# cygwin needs import library, and has unique naming convention
# use autodetected ${cf_prefix} for import lib and static lib, but
# use 'cyg' prefix for shared lib.
- case $cf_cv_shlib_version in
+ case "$cf_cv_shlib_version" in
(cygdll)
cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'`
cf_add_lib="../lib/cyg${cf_libname}${cf_cygsuf}"
;;
(msysdll)
cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'`
cf_add_lib="../lib/msys-${cf_libname}${cf_cygsuf}"
;;
(mingw)
cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'`
cf_add_lib="../lib/lib${cf_libname}${cf_cygsuf}"
;;
+ (msvcdll)
+ cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'`
+ cf_add_lib="../lib/${cf_libname}${cf_cygsuf}"
+ ;;
(*)
cf_add_lib=
;;
esac
if test -n "$cf_add_lib"
then
Libs_To_Make="$Libs_To_Make $cf_add_lib"
continue
fi
fi
cf_add_lib="../lib/${cf_prefix}${cf_libname}${cf_suffix}"
Libs_To_Make="$Libs_To_Make $cf_add_lib"
done
- if test $cf_dir = ncurses ; then
+ if test "$cf_dir" = ncurses ; then
cf_subsets="$LIB_SUBSETS"
cf_r_parts="$cf_subsets"
cf_liblist="$Libs_To_Make"
while test -n "$cf_r_parts"
do
cf_l_parts=`echo "$cf_r_parts" |sed -e 's/ .*$//'`
cf_r_parts=`echo "$cf_r_parts" |sed -e 's/^[[^ ]]* //'`
if test "$cf_l_parts" != "$cf_r_parts" ; then
cf_add_lib=
- case $cf_l_parts in
+ case "$cf_l_parts" in
(*termlib*)
- cf_add_lib=`echo $cf_liblist |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TINFO_LIB_SUFFIX}%g`
+ cf_add_lib=`echo "$cf_liblist" |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TINFO_LIB_SUFFIX}%g`
;;
(*ticlib*)
- cf_add_lib=`echo $cf_liblist |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TICS_LIB_SUFFIX}%g`
+ cf_add_lib=`echo "$cf_liblist" |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TICS_LIB_SUFFIX}%g`
;;
(*)
break
;;
esac
if test -n "$cf_add_lib"; then
Libs_To_Make="$cf_add_lib $Libs_To_Make"
fi
else
break
fi
done
else
cf_subsets=`echo "$LIB_SUBSETS" | sed -e 's/^termlib.* //'`
fi
- if test $cf_dir = c++; then
+ if test "$cf_dir" = c++; then
if test "x$with_shared_cxx" != xyes && test -n "$cf_shared_suffix"; then
cf_list=
for cf_item in $Libs_To_Make
do
- case $cf_item in
+ case "$cf_item" in
(*.a)
;;
(*)
cf_item=`echo "$cf_item" | sed -e "s,"$cf_shared_suffix",.a,"`
;;
esac
for cf_test in $cf_list
do
if test "$cf_test" = "$cf_item"
then
cf_LIST_MODELS=`echo "$cf_LIST_MODELS" | sed -e 's/normal//'`
cf_item=
break
fi
done
test -n "$cf_item" && cf_list="$cf_list $cf_item"
done
Libs_To_Make="$cf_list"
fi
fi
sed -e "s%@Libs_To_Make@%$Libs_To_Make%" \
-e "s%@SHARED_LIB@%$SHARED_LIB%" \
- $cf_dir/Makefile >$cf_dir/Makefile.out
- mv $cf_dir/Makefile.out $cf_dir/Makefile
+ "$cf_dir/Makefile" >$cf_dir/Makefile.out
+ mv "$cf_dir/Makefile.out" "$cf_dir/Makefile"
- $AWK -f $srcdir/mk-0th.awk \
+ $AWK -f "$srcdir/mk-0th.awk" \
libname="${cf_dir}${LIB_SUFFIX}" subsets="$LIB_SUBSETS" ticlib="$TICS_LIB_SUFFIX" termlib="$TINFO_LIB_SUFFIX" \
- $srcdir/$cf_dir/modules >>$cf_dir/Makefile
+ "$srcdir/$cf_dir/modules" >>$cf_dir/Makefile
for cf_subset in $cf_subsets
do
cf_subdirs=
for cf_item in $cf_LIST_MODELS
do
echo "Appending rules for ${cf_item} model (${cf_dir}: ${cf_subset})"
CF_UPPER(cf_ITEM,$cf_item)
CXX_MODEL=$cf_ITEM
if test "$CXX_MODEL" = SHARED; then
- case $cf_cv_shlib_version in
- (cygdll|msysdll|mingw)
+ case "$cf_cv_shlib_version" in
+ (cygdll|msysdll|mingw|msvcdll)
test "x$with_shared_cxx" = xno && CF_VERBOSE(overriding CXX_MODEL to SHARED)
with_shared_cxx=yes
;;
(*)
test "x$with_shared_cxx" = xno && CXX_MODEL=NORMAL
;;
esac
fi
CF_LIB_SUFFIX($cf_item,cf_suffix,cf_depsuf)
CF_OBJ_SUBDIR($cf_item,cf_subdir)
# Test for case where we build libtinfo with a different name.
cf_libname=$cf_dir
- if test $cf_dir = ncurses ; then
- case $cf_subset in
+ if test "$cf_dir" = ncurses ; then
+ case "$cf_subset" in
(*base*)
cf_libname=${cf_libname}$USE_LIB_SUFFIX
;;
(*termlib*)
cf_libname=$TINFO_LIB_SUFFIX
;;
(ticlib*)
cf_libname=$TICS_LIB_SUFFIX
;;
esac
- elif test $cf_dir = c++ ; then
- cf_libname=ncurses++$USE_LIB_SUFFIX
+ elif test "$cf_dir" = c++ ; then
+ CF_MAP_LIB_BASENAME(cf_libname,cxx)
+ cf_libname=${cf_libname}$USE_LIB_SUFFIX
else
+ CF_MAP_LIB_BASENAME(cf_libname,$cf_dir)
cf_libname=${cf_libname}$USE_LIB_SUFFIX
fi
if test -n "${USE_ARG_SUFFIX}" ; then
# undo $USE_LIB_SUFFIX add-on in CF_LIB_SUFFIX
- cf_suffix=`echo $cf_suffix |sed -e "s%^${USE_LIB_SUFFIX}%%"`
+ cf_suffix=`echo "$cf_suffix" |sed -e "s%^${USE_LIB_SUFFIX}%%"`
fi
# These dependencies really are for development, not
# builds, but they are useful in porting, too.
cf_depend="../include/ncurses_cfg.h"
if test "$srcdir" = "."; then
cf_reldir="."
else
cf_reldir="\${srcdir}"
fi
- if test -f $srcdir/$cf_dir/$cf_dir.priv.h; then
+ if test -f "$srcdir/$cf_dir/$cf_dir.priv.h" ; then
cf_depend="$cf_depend $cf_reldir/$cf_dir.priv.h"
- elif test -f $srcdir/$cf_dir/curses.priv.h; then
+ elif test -f "$srcdir/$cf_dir/curses.priv.h" ; then
cf_depend="$cf_depend $cf_reldir/curses.priv.h"
fi
cf_dir_suffix=
old_cf_suffix="$cf_suffix"
if test "$cf_cv_shlib_version_infix" = yes ; then
if test -n "$USE_LIB_SUFFIX" ; then
- case $USE_LIB_SUFFIX in
+ case "$USE_LIB_SUFFIX" in
(tw*)
- cf_libname=`echo $cf_libname | sed 's/tw'$EXTRA_SUFFIX'$//'`
- cf_suffix=`echo $cf_suffix | sed 's/^tw'$EXTRA_SUFFIX'//'`
+ cf_libname=`echo "$cf_libname" | sed 's/tw'$EXTRA_SUFFIX'$//'`
+ cf_suffix=`echo "$cf_suffix" | sed 's/^tw'$EXTRA_SUFFIX'//'`
cf_dir_suffix=tw$EXTRA_SUFFIX
;;
(t*)
- cf_libname=`echo $cf_libname | sed 's/t'$EXTRA_SUFFIX'$//'`
- cf_suffix=`echo $cf_suffix | sed 's/^t'$EXTRA_SUFFIX'//'`
+ cf_libname=`echo "$cf_libname" | sed 's/t'$EXTRA_SUFFIX'$//'`
+ cf_suffix=`echo "$cf_suffix" | sed 's/^t'$EXTRA_SUFFIX'//'`
cf_dir_suffix=t$EXTRA_SUFFIX
;;
(w*)
- cf_libname=`echo $cf_libname | sed 's/w'$EXTRA_SUFFIX'$//'`
- cf_suffix=`echo $cf_suffix | sed 's/^w'$EXTRA_SUFFIX'//'`
+ cf_libname=`echo "$cf_libname" | sed 's/w'$EXTRA_SUFFIX'$//'`
+ cf_suffix=`echo "$cf_suffix" | sed 's/^w'$EXTRA_SUFFIX'//'`
cf_dir_suffix=w$EXTRA_SUFFIX
;;
(*)
- cf_libname=`echo $cf_libname | sed 's/'$EXTRA_SUFFIX'$//'`
- cf_suffix=`echo $cf_suffix | sed 's/^'$EXTRA_SUFFIX'//'`
+ cf_libname=`echo "$cf_libname" | sed 's/'$EXTRA_SUFFIX'$//'`
+ cf_suffix=`echo "$cf_suffix" | sed 's/^'$EXTRA_SUFFIX'//'`
cf_dir_suffix=$EXTRA_SUFFIX
;;
esac
fi
fi
- $AWK -f $srcdir/mk-1st.awk \
+ $AWK -f "$srcdir/mk-1st.awk" \
name=${cf_libname}${cf_dir_suffix} \
traces=$LIB_TRACING \
MODEL=$cf_ITEM \
CXX_MODEL=$CXX_MODEL \
model=$cf_subdir \
prefix=$cf_prefix \
suffix=$cf_suffix \
subset=$cf_subset \
driver=$cf_cv_term_driver \
SymLink="$LN_S" \
TermlibRoot=$TINFO_NAME \
TermlibSuffix=$TINFO_SUFFIX \
ShlibVer=$cf_cv_shlib_version \
ShlibVerInfix=$cf_cv_shlib_version_infix \
ReLink=${cf_cv_do_relink:-no} \
ReRanlib=${cf_cv_do_reranlib:-yes} \
DoLinks=$cf_cv_do_symlinks \
rmSoLocs=$cf_cv_rm_so_locs \
ldconfig="$LDCONFIG" \
overwrite=$WITH_OVERWRITE \
depend="$cf_depend" \
host="$host" \
libtool_version="$LIBTOOL_VERSION" \
- $srcdir/$cf_dir/modules >>$cf_dir/Makefile
+ "$srcdir/$cf_dir/modules" >>$cf_dir/Makefile
cf_suffix="$old_cf_suffix"
for cf_subdir2 in $cf_subdirs lib
do
- test $cf_subdir = $cf_subdir2 && break
+ test "$cf_subdir" = "$cf_subdir2" && break
done
test "${cf_subset}.${cf_subdir2}" != "${cf_subset}.${cf_subdir}" && \
- $AWK -f $srcdir/mk-2nd.awk \
+ $AWK -f "$srcdir/mk-2nd.awk" \
name=$cf_dir \
traces=$LIB_TRACING \
MODEL=$cf_ITEM \
model=$cf_subdir \
subset=$cf_subset \
srcdir=$srcdir \
echo=$WITH_ECHO \
crenames=$cf_cv_prog_CC_c_o \
cxxrenames=$cf_cv_prog_CXX_c_o \
- $srcdir/$cf_dir/modules >>$cf_dir/Makefile
+ "$srcdir/$cf_dir/modules" >>$cf_dir/Makefile
cf_subdirs="$cf_subdirs $cf_subdir"
done
done
fi
- echo ' cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} [$]@' >>Makefile
+ echo ' ( cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} [$]@ )' >>Makefile
done
for cf_dir in $SRC_SUBDIRS
do
- if test ! -d $srcdir/$cf_dir ; then
+ if test ! -d "$srcdir/$cf_dir" ; then
continue
fi
- if test -f $cf_dir/Makefile ; then
+ if test -f "$cf_dir/Makefile" ; then
case "$cf_dir" in
(Ada95)
echo 'libs \' >> Makefile
echo 'install.libs \' >> Makefile
echo 'uninstall.libs ::' >> Makefile
- echo ' cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} [$]@' >> Makefile
+ echo ' ( cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} [$]@ )' >> Makefile
;;
esac
fi
- if test -f $srcdir/$cf_dir/modules; then
+ if test -f "$srcdir/$cf_dir/modules" ; then
echo >> Makefile
- if test -f $srcdir/$cf_dir/headers; then
+ if test -f "$srcdir/$cf_dir/headers" ; then
cat >> Makefile <<CF_EOF
install.includes \\
uninstall.includes \\
CF_EOF
fi
if test "$cf_dir" != "c++" ; then
echo 'lint \' >> Makefile
fi
cat >> Makefile <<CF_EOF
libs \\
lintlib \\
install.libs \\
uninstall.libs \\
install.$cf_dir \\
uninstall.$cf_dir ::
- cd $cf_dir && \${MAKE} \${TOP_MFLAGS} \[$]@
+ ( cd "$cf_dir" && \${MAKE} \${TOP_MFLAGS} \[$]@ )
CF_EOF
- elif test -f $srcdir/$cf_dir/headers; then
+ elif test -f "$srcdir/$cf_dir/headers" ; then
cat >> Makefile <<CF_EOF
libs \\
install.libs \\
uninstall.libs \\
install.includes \\
uninstall.includes ::
- cd $cf_dir && \${MAKE} \${TOP_MFLAGS} \[$]@
+ ( cd "$cf_dir" && \${MAKE} \${TOP_MFLAGS} \[$]@ )
CF_EOF
fi
done
if test "x$cf_with_db_install" = xyes; then
cat >> Makefile <<CF_EOF
install.libs uninstall.libs \\
install.data uninstall.data ::
-$MAKE_TERMINFO cd misc && \${MAKE} \${TOP_MFLAGS} \[$]@
+$MAKE_TERMINFO ( cd misc && \${MAKE} \${TOP_MFLAGS} \[$]@ )
CF_EOF
else
cat >> Makefile <<CF_EOF
install.libs uninstall.libs ::
- cd misc && \${MAKE} \${TOP_MFLAGS} \[$]@
+ ( cd misc && \${MAKE} \${TOP_MFLAGS} \[$]@ )
CF_EOF
fi
if test "x$cf_with_manpages" = xyes; then
cat >> Makefile <<CF_EOF
install.man \\
uninstall.man ::
- cd man && \${MAKE} \${TOP_MFLAGS} \[$]@
+ ( cd man && \${MAKE} \${TOP_MFLAGS} \[$]@ )
CF_EOF
fi
cat >> Makefile <<CF_EOF
distclean ::
rm -f config.cache config.log config.status Makefile include/ncurses_cfg.h
rm -f headers.sh headers.sed mk_shared_lib.sh
rm -f edit_man.* man_alias.*
rm -rf \${DIRS_TO_MAKE}
CF_EOF
# Special case: tack's manpage lives in its own directory.
if test "x$cf_with_manpages" = xyes; then
if test "x$cf_with_tack" = "xyes"; then
cat >> Makefile <<CF_EOF
install.man \\
uninstall.man ::
- cd tack && \${MAKE} \${TOP_MFLAGS} \[$]@
+ ( cd tack && \${MAKE} \${TOP_MFLAGS} \[$]@ )
CF_EOF
fi
fi
dnl If we're installing into a subdirectory of /usr/include, etc., we should
dnl prepend the subdirectory's name to the "#include" paths. It won't hurt
dnl anything, and will make it more standardized. It's awkward to decide this
dnl at configuration because of quoting, so we'll simply make all headers
dnl installed via a script that can do the right thing.
rm -f headers.sed headers.sh
dnl ( generating this script makes the makefiles a little tidier :-)
echo creating headers.sh
cat >headers.sh <<CF_EOF
#! $SHELL
# This shell script is generated by the 'configure' script. It is invoked in a
# subdirectory of the build tree. It generates a sed-script in the parent
# directory that is used to adjust includes for header files that reside in a
# subdirectory of /usr/include, etc.
PRG=""
while test \[$]# != 3
do
PRG="\$PRG \[$]1"; shift
done
DST=\[$]1
REF=\[$]2
SRC=\[$]3
TMPSRC=\${TMPDIR:-/tmp}/\`basename \$SRC\`\$\$
TMPSED=\${TMPDIR:-/tmp}/headers.sed\$\$
echo installing \$SRC in \$DST
CF_EOF
-if test $WITH_CURSES_H = yes; then
+if test "$WITH_CURSES_H" = yes; then
cat >>headers.sh <<CF_EOF
case \$DST in
(/*/include/*)
END=\`basename \$DST\`
- for i in \`cat \$REF/../*/headers |fgrep -v "#"\`
+ for i in \`cat \$REF/../*/headers |${FGREP-fgrep} -v "#"\`
do
NAME=\`basename \$i\`
echo "s/<\$NAME>/<\$END\/\$NAME>/" >> \$TMPSED
done
;;
(*)
echo "" >> \$TMPSED
;;
esac
CF_EOF
else
cat >>headers.sh <<CF_EOF
case \$DST in
(/*/include/*)
END=\`basename \$DST\`
- for i in \`cat \$REF/../*/headers |fgrep -v "#"\`
+ for i in \`cat \$REF/../*/headers |${FGREP-fgrep} -v "#"\`
do
NAME=\`basename \$i\`
if test "\$NAME" = "curses.h"
then
echo "s/<curses.h>/<ncurses.h>/" >> \$TMPSED
NAME=ncurses.h
fi
echo "s/<\$NAME>/<\$END\/\$NAME>/" >> \$TMPSED
done
;;
(*)
echo "s/<curses.h>/<ncurses.h>/" >> \$TMPSED
;;
esac
CF_EOF
fi
cat >>headers.sh <<CF_EOF
rm -f \$TMPSRC
sed -f \$TMPSED \$SRC > \$TMPSRC
NAME=\`basename \$SRC\`
CF_EOF
-if test $WITH_CURSES_H != yes; then
+if test "$WITH_CURSES_H" != yes; then
cat >>headers.sh <<CF_EOF
test "\$NAME" = "curses.h" && NAME=ncurses.h
CF_EOF
fi
cat >>headers.sh <<CF_EOF
# Just in case someone gzip'd manpages, remove the conflicting copy.
test -f \$DST/\$NAME.gz && rm -f \$DST/\$NAME.gz
eval \$PRG \$TMPSRC \$DST/\$NAME
rm -f \$TMPSRC \$TMPSED
CF_EOF
chmod 0755 headers.sh
for cf_dir in $SRC_SUBDIRS
do
- if test ! -d $srcdir/$cf_dir ; then
+ if test ! -d "$srcdir/$cf_dir" ; then
continue
fi
- if test -f $srcdir/$cf_dir/headers; then
- $AWK -f $srcdir/mk-hdr.awk \
+ if test -f "$srcdir/$cf_dir/headers" ; then
+ $AWK -f "$srcdir/mk-hdr.awk" \
subset="$LIB_SUBSETS" \
compat="$WITH_CURSES_H" \
- $srcdir/$cf_dir/headers >>$cf_dir/Makefile
+ "$srcdir/$cf_dir/headers" >>$cf_dir/Makefile
fi
- if test -f $srcdir/$cf_dir/modules; then
+ if test -f "$srcdir/$cf_dir/modules" ; then
if test "$cf_dir" != "c++" ; then
cat >>$cf_dir/Makefile <<"CF_EOF"
depend : ${AUTO_SRC}
makedepend -- ${CPPFLAGS} -- ${C_SRC}
# DO NOT DELETE THIS LINE -- make depend depends on it.
CF_EOF
fi
fi
done
AC_SUBST(Libs_To_Make)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_LIB_SONAME version: 6 updated: 2017/01/21 11:06:25
+dnl CF_LIB_SONAME version: 9 updated: 2021/01/04 18:48:01
dnl -------------
dnl Find the and soname for the given shared library. Set the cache variable
dnl cf_cv_$3_soname to this, unless it is not found. Then set the cache
dnl variable to "unknown".
dnl
dnl $1 = headers
dnl $2 = code
dnl $3 = library name
AC_DEFUN([CF_LIB_SONAME],
-[
+[AC_REQUIRE([AC_PROG_FGREP])dnl
+
AC_CACHE_CHECK(for soname of $3 library,cf_cv_$3_soname,[
cf_cv_$3_soname=unknown
if test "$cross_compiling" != yes ; then
cat >conftest.$ac_ext <<CF_EOF
$1
int main(void)
{
$2
${cf_cv_main_return:-return}(0);
}
CF_EOF
cf_save_LIBS="$LIBS"
CF_ADD_LIB($3)
if AC_TRY_EVAL(ac_compile) ; then
if AC_TRY_EVAL(ac_link) ; then
- cf_cv_$3_soname=`ldd conftest$ac_exeext 2>/dev/null | sed -e 's,^.*/,,' -e 's, .*$,,' | fgrep lib$3.`
+ cf_cv_$3_soname="`ldd \"conftest$ac_exeext\" 2>/dev/null | sed -e 's,^.*/,,' -e 's, .*$,,' | ${FGREP-fgrep} lib$3.`"
test -z "$cf_cv_$3_soname" && cf_cv_$3_soname=unknown
fi
fi
-rm -rf conftest*
+rm -rf ./conftest*
LIBS="$cf_save_LIBS"
fi
])
])
dnl ---------------------------------------------------------------------------
-dnl CF_LIB_SUFFIX version: 25 updated: 2015/04/17 21:13:04
+dnl CF_LIB_SUFFIX version: 28 updated: 2021/01/01 16:53:59
dnl -------------
dnl Compute the library file-suffix from the given model name
dnl $1 = model name
dnl $2 = variable to set (the nominal library suffix)
dnl $3 = dependency variable to set (actual filename)
dnl The variable $LIB_SUFFIX, if set, prepends the variable to set.
AC_DEFUN([CF_LIB_SUFFIX],
[
case X$1 in
(Xlibtool)
$2='.la'
$3=[$]$2
;;
(Xdebug)
- $2='_g.a'
+ case "$cf_cv_system_name" in
+ (*-msvc*)
+ $2='_g.lib'
+ ;;
+ (*)
+ $2='_g.a'
+ ;;
+ esac
$3=[$]$2
;;
(Xprofile)
- $2='_p.a'
+ case "$cf_cv_system_name" in
+ (*-msvc*)
+ $2='_p.lib'
+ ;;
+ (*)
+ $2='_p.a'
+ ;;
+ esac
$3=[$]$2
;;
(Xshared)
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(aix[[5-7]]*)
$2='.so'
$3=[$]$2
;;
+ (*-msvc*)
+ $2='.dll'
+ $3='.dll.lib'
+ ;;
(cygwin*|msys*|mingw*)
$2='.dll'
$3='.dll.a'
;;
(darwin*)
$2='.dylib'
$3=[$]$2
;;
(hpux*)
- case $target in
+ case "$target" in
(ia64*)
$2='.so'
$3=[$]$2
;;
(*)
$2='.sl'
$3=[$]$2
;;
esac
;;
(*)
$2='.so'
$3=[$]$2
;;
esac
;;
(*)
- $2='.a'
+ case "$target" in
+ (*-msvc*)
+ $2='.lib'
+ ;;
+ (*)
+ $2='.a'
+ ;;
+ esac
$3=[$]$2
;;
esac
if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}"
then
$2="${LIB_SUFFIX}${EXTRA_SUFFIX}[$]{$2}"
$3="${LIB_SUFFIX}${EXTRA_SUFFIX}[$]{$3}"
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_LIB_TYPE version: 5 updated: 2015/04/17 21:13:04
dnl -----------
dnl Compute the string to append to -library from the given model name
dnl $1 = model name
dnl $2 = variable to set
dnl The variable $LIB_SUFFIX, if set, prepends the variable to set.
AC_DEFUN([CF_LIB_TYPE],
[
case $1 in
(libtool) $2='' ;;
(normal) $2='' ;;
(debug) $2='_g' ;;
(profile) $2='_p' ;;
(shared) $2='' ;;
esac
test -n "$LIB_SUFFIX" && $2="${LIB_SUFFIX}[$]{$2}"
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_LINK_DATAONLY version: 13 updated: 2020/02/08 15:59:30
dnl ----------------
dnl Some systems have a non-ANSI linker that doesn't pull in modules that have
dnl only data (i.e., no functions), for example NeXT. On those systems we'll
dnl have to provide wrappers for global tables to ensure they're linked
dnl properly.
AC_DEFUN([CF_LINK_DATAONLY],
[
AC_MSG_CHECKING([if data-only library module links])
AC_CACHE_VAL(cf_cv_link_dataonly,[
rm -f conftest.a
cat >conftest.$ac_ext <<EOF
#line __oline__ "configure"
int testdata[[3]] = { 123, 456, 789 };
EOF
if AC_TRY_EVAL(ac_compile) ; then
mv conftest.o data.o && \
( $AR $ARFLAGS conftest.a data.o ) 2>&AC_FD_CC 1>/dev/null
fi
rm -f conftest.$ac_ext data.o
cat >conftest.$ac_ext <<EOF
#line __oline__ "configure"
int testfunc(void)
{
#if defined(NeXT)
${cf_cv_main_return:-return}(1); /* I'm told this linker is broken */
#else
extern int testdata[[3]];
return testdata[[0]] == 123
&& testdata[[1]] == 456
&& testdata[[2]] == 789;
#endif
}
EOF
if AC_TRY_EVAL(ac_compile); then
mv conftest.o func.o && \
( $AR $ARFLAGS conftest.a func.o ) 2>&AC_FD_CC 1>/dev/null
fi
rm -f conftest.$ac_ext func.o
( eval $RANLIB conftest.a ) 2>&AC_FD_CC >/dev/null
cf_saveLIBS="$LIBS"
LIBS="conftest.a $LIBS"
AC_TRY_RUN([
int main(void)
{
extern int testfunc();
${cf_cv_main_return:-return} (!testfunc());
}
],
[cf_cv_link_dataonly=yes],
[cf_cv_link_dataonly=no],
[cf_cv_link_dataonly=unknown])
LIBS="$cf_saveLIBS"
])
AC_MSG_RESULT($cf_cv_link_dataonly)
if test "$cf_cv_link_dataonly" = no ; then
AC_DEFINE(BROKEN_LINKER,1,[if data-only library module does not link])
BROKEN_LINKER=1
fi
AC_SUBST(BROKEN_LINKER)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_LINK_FUNCS version: 9 updated: 2017/01/21 11:11:02
dnl -------------
dnl Most Unix systems have both link and symlink, a few don't have symlink.
dnl A few non-Unix systems implement symlink, but not link.
dnl A few non-systems implement neither (or have nonfunctional versions).
AC_DEFUN([CF_LINK_FUNCS],
[
AC_CHECK_HEADERS( \
unistd.h \
)
AC_CHECK_FUNCS( \
remove \
unlink )
if test "$cross_compiling" = yes ; then
AC_CHECK_FUNCS( \
link \
symlink )
else
AC_CACHE_CHECK(if link/symlink functions work,cf_cv_link_funcs,[
cf_cv_link_funcs=
for cf_func in link symlink ; do
AC_TRY_RUN([
#include <sys/types.h>
#include <sys/stat.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
int main(void)
{
int fail = 0;
char *src = "config.log";
char *dst = "conftest.chk";
struct stat src_sb;
struct stat dst_sb;
stat(src, &src_sb);
fail = ($cf_func("config.log", "conftest.chk") < 0)
|| (stat(dst, &dst_sb) < 0)
|| (dst_sb.st_mtime != src_sb.st_mtime);
#ifdef HAVE_UNLINK
unlink(dst);
#else
remove(dst);
#endif
${cf_cv_main_return:-return} (fail);
}
],[
cf_cv_link_funcs="$cf_cv_link_funcs $cf_func"
eval 'ac_cv_func_'$cf_func'=yes'],[
eval 'ac_cv_func_'$cf_func'=no'],[
eval 'ac_cv_func_'$cf_func'=error'])
done
test -z "$cf_cv_link_funcs" && cf_cv_link_funcs=no
])
test "$ac_cv_func_link" = yes && AC_DEFINE(HAVE_LINK,1,[Define to 1 if we have link() function])
test "$ac_cv_func_symlink" = yes && AC_DEFINE(HAVE_SYMLINK,1,[Define to 1 if we have symlink() function])
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_MAKEFLAGS version: 18 updated: 2018/02/21 21:26:03
+dnl CF_MAKEFLAGS version: 20 updated: 2021/01/03 19:29:49
dnl ------------
dnl Some 'make' programs support ${MAKEFLAGS}, some ${MFLAGS}, to pass 'make'
dnl options to lower-levels. It's very useful for "make -n" -- if we have it.
dnl (GNU 'make' does both, something POSIX 'make', which happens to make the
dnl ${MAKEFLAGS} variable incompatible because it adds the assignments :-)
AC_DEFUN([CF_MAKEFLAGS],
-[
+[AC_REQUIRE([AC_PROG_FGREP])dnl
+
AC_CACHE_CHECK(for makeflags variable, cf_cv_makeflags,[
cf_cv_makeflags=''
for cf_option in '-${MAKEFLAGS}' '${MFLAGS}'
do
cat >cf_makeflags.tmp <<CF_EOF
SHELL = $SHELL
all :
@ echo '.$cf_option'
CF_EOF
- cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp 2>/dev/null | fgrep -v "ing directory" | sed -e 's,[[ ]]*$,,'`
+ cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp 2>/dev/null | ${FGREP-fgrep} -v "ing directory" | sed -e 's,[[ ]]*$,,'`
case "$cf_result" in
(.*k|.*kw)
- cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null`
+ cf_result="`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null`"
case "$cf_result" in
(.*CC=*) cf_cv_makeflags=
;;
(*) cf_cv_makeflags=$cf_option
;;
esac
break
;;
(.-)
;;
(*)
CF_MSG_LOG(given option \"$cf_option\", no match \"$cf_result\")
;;
esac
done
rm -f cf_makeflags.tmp
])
AC_SUBST(cf_cv_makeflags)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_MAKE_TAGS version: 6 updated: 2010/10/23 15:52:32
dnl ------------
dnl Generate tags/TAGS targets for makefiles. Do not generate TAGS if we have
dnl a monocase filesystem.
AC_DEFUN([CF_MAKE_TAGS],[
AC_REQUIRE([CF_MIXEDCASE_FILENAMES])
AC_CHECK_PROGS(CTAGS, exctags ctags)
AC_CHECK_PROGS(ETAGS, exetags etags)
AC_CHECK_PROG(MAKE_LOWER_TAGS, ${CTAGS:-ctags}, yes, no)
if test "$cf_cv_mixedcase" = yes ; then
AC_CHECK_PROG(MAKE_UPPER_TAGS, ${ETAGS:-etags}, yes, no)
else
MAKE_UPPER_TAGS=no
fi
if test "$MAKE_UPPER_TAGS" = yes ; then
MAKE_UPPER_TAGS=
else
MAKE_UPPER_TAGS="#"
fi
if test "$MAKE_LOWER_TAGS" = yes ; then
MAKE_LOWER_TAGS=
else
MAKE_LOWER_TAGS="#"
fi
AC_SUBST(CTAGS)
AC_SUBST(ETAGS)
AC_SUBST(MAKE_UPPER_TAGS)
AC_SUBST(MAKE_LOWER_TAGS)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_MANPAGE_FORMAT version: 11 updated: 2015/04/18 08:56:57
+dnl CF_MANPAGE_FORMAT version: 14 updated: 2021/01/02 17:09:14
dnl -----------------
dnl Option to allow user to override automatic configuration of manpage format.
dnl There are several special cases:
dnl
dnl gzip - man checks for, can display gzip'd files
dnl compress - man checks for, can display compressed files
dnl BSDI - files in the cat-directories are suffixed ".0"
dnl formatted - installer should format (put files in cat-directory)
dnl catonly - installer should only format, e.g., for a turnkey system.
dnl
dnl There are other configurations which this macro does not test, e.g., HPUX's
dnl compressed manpages (but uncompressed manpages are fine, and HPUX's naming
dnl convention would not match our use).
AC_DEFUN([CF_MANPAGE_FORMAT],
[
AC_REQUIRE([CF_PATHSEP])
AC_MSG_CHECKING(format of man-pages)
AC_ARG_WITH(manpage-format,
[ --with-manpage-format specify manpage-format: gzip/compress/BSDI/normal and
optionally formatted/catonly, e.g., gzip,formatted],
[MANPAGE_FORMAT=$withval],
[MANPAGE_FORMAT=unknown])
test -z "$MANPAGE_FORMAT" && MANPAGE_FORMAT=unknown
MANPAGE_FORMAT=`echo "$MANPAGE_FORMAT" | sed -e 's/,/ /g'`
cf_unknown=
-case $MANPAGE_FORMAT in
+case "$MANPAGE_FORMAT" in
(unknown)
if test -z "$MANPATH" ; then
MANPATH="/usr/man:/usr/share/man"
fi
# look for the 'date' man-page (it's most likely to be installed!)
MANPAGE_FORMAT=
- cf_preform=no
- cf_catonly=yes
- cf_example=date
+ cf_preform="no"
+ cf_catonly="yes"
+ cf_example="date"
IFS="${IFS:- }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
for cf_dir in $MANPATH; do
test -z "$cf_dir" && cf_dir=/usr/man
for cf_name in $cf_dir/man*/$cf_example.[[01]]* $cf_dir/cat*/$cf_example.[[01]]* $cf_dir/man*/$cf_example $cf_dir/cat*/$cf_example
do
- cf_test=`echo $cf_name | sed -e 's/*//'`
+ cf_test=`echo "$cf_name" | sed -e 's/*//'`
if test "x$cf_test" = "x$cf_name" ; then
case "$cf_name" in
(*.gz) MANPAGE_FORMAT="$MANPAGE_FORMAT gzip";;
(*.Z) MANPAGE_FORMAT="$MANPAGE_FORMAT compress";;
(*.0) MANPAGE_FORMAT="$MANPAGE_FORMAT BSDI";;
(*) MANPAGE_FORMAT="$MANPAGE_FORMAT normal";;
esac
case "$cf_name" in
($cf_dir/man*)
cf_catonly=no
;;
($cf_dir/cat*)
cf_preform=yes
;;
esac
break
fi
# if we found a match in either man* or cat*, stop looking
if test -n "$MANPAGE_FORMAT" ; then
cf_found=no
test "$cf_preform" = yes && MANPAGE_FORMAT="$MANPAGE_FORMAT formatted"
test "$cf_catonly" = yes && MANPAGE_FORMAT="$MANPAGE_FORMAT catonly"
case "$cf_name" in
($cf_dir/cat*)
cf_found=yes
;;
esac
- test $cf_found=yes && break
+ test "$cf_found" = yes && break
fi
done
# only check the first directory in $MANPATH where we find manpages
if test -n "$MANPAGE_FORMAT" ; then
break
fi
done
# if we did not find the example, just assume it is normal
test -z "$MANPAGE_FORMAT" && MANPAGE_FORMAT=normal
IFS="$ac_save_ifs"
;;
(*)
for cf_option in $MANPAGE_FORMAT; do
- case $cf_option in
+ case "$cf_option" in
(gzip|compress|BSDI|normal|formatted|catonly)
;;
(*)
cf_unknown="$cf_unknown $cf_option"
;;
esac
done
;;
esac
AC_MSG_RESULT($MANPAGE_FORMAT)
if test -n "$cf_unknown" ; then
AC_MSG_WARN(Unexpected manpage-format $cf_unknown)
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_MANPAGE_RENAMES version: 10 updated: 2015/08/05 20:44:28
+dnl CF_MANPAGE_RENAMES version: 12 updated: 2021/01/01 16:53:59
dnl ------------------
dnl The Debian people have their own naming convention for manpages. This
dnl option lets us override the name of the file containing renaming, or
dnl disable it altogether.
AC_DEFUN([CF_MANPAGE_RENAMES],
[
AC_MSG_CHECKING(for manpage renaming)
AC_ARG_WITH(manpage-renames,
[ --with-manpage-renames specify manpage-renaming],
[MANPAGE_RENAMES=$withval],
[MANPAGE_RENAMES=yes])
case ".$MANPAGE_RENAMES" in
(.no)
;;
(.|.yes)
# Debian 'man' program?
if test -f /etc/debian_version ; then
- MANPAGE_RENAMES=`cd $srcdir && pwd`/man/man_db.renames
+ MANPAGE_RENAMES=`cd "$srcdir" && pwd`/man/man_db.renames
else
MANPAGE_RENAMES=no
fi
;;
esac
if test "$MANPAGE_RENAMES" != no ; then
- if test -f $srcdir/man/$MANPAGE_RENAMES ; then
- MANPAGE_RENAMES=`cd $srcdir/man && pwd`/$MANPAGE_RENAMES
- elif test ! -f $MANPAGE_RENAMES ; then
+ if test -f "$srcdir/man/$MANPAGE_RENAMES" ; then
+ MANPAGE_RENAMES=`cd "$srcdir/man" && pwd`/$MANPAGE_RENAMES
+ elif test ! -f "$MANPAGE_RENAMES" ; then
AC_MSG_ERROR(not a filename: $MANPAGE_RENAMES)
fi
test ! -d man && mkdir man
# Construct a sed-script to perform renaming within man-pages
if test -n "$MANPAGE_RENAMES" ; then
test ! -d man && mkdir man
- $SHELL $srcdir/man/make_sed.sh $MANPAGE_RENAMES >./edit_man.sed
+ $SHELL "$srcdir/man/make_sed.sh" "$MANPAGE_RENAMES" >./edit_man.sed
fi
fi
AC_MSG_RESULT($MANPAGE_RENAMES)
AC_SUBST(MANPAGE_RENAMES)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_MANPAGE_SYMLINKS version: 6 updated: 2015/04/17 21:13:04
dnl -------------------
dnl Some people expect each tool to make all aliases for manpages in the
dnl man-directory. This accommodates the older, less-capable implementations
dnl of 'man', and is optional.
AC_DEFUN([CF_MANPAGE_SYMLINKS],
[
AC_MSG_CHECKING(if manpage aliases will be installed)
AC_ARG_WITH(manpage-aliases,
[ --with-manpage-aliases specify manpage-aliases using .so],
[MANPAGE_ALIASES=$withval],
[MANPAGE_ALIASES=yes])
AC_MSG_RESULT($MANPAGE_ALIASES)
case "x$LN_S" in
(xln*)
cf_use_symlinks=yes
;;
(*)
cf_use_symlinks=no
;;
esac
MANPAGE_SYMLINKS=no
if test "$MANPAGE_ALIASES" = yes ; then
AC_MSG_CHECKING(if manpage symlinks should be used)
AC_ARG_WITH(manpage-symlinks,
[ --with-manpage-symlinks specify manpage-aliases using symlinks],
[MANPAGE_SYMLINKS=$withval],
[MANPAGE_SYMLINKS=$cf_use_symlinks])
if test "$$cf_use_symlinks" = no; then
if test "$MANPAGE_SYMLINKS" = yes ; then
AC_MSG_WARN(cannot make symlinks, will use .so files)
MANPAGE_SYMLINKS=no
fi
fi
AC_MSG_RESULT($MANPAGE_SYMLINKS)
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_MANPAGE_TBL version: 3 updated: 2002/01/19 22:51:32
dnl --------------
dnl This option causes manpages to be run through tbl(1) to generate tables
dnl correctly.
AC_DEFUN([CF_MANPAGE_TBL],
[
AC_MSG_CHECKING(for manpage tbl)
AC_ARG_WITH(manpage-tbl,
[ --with-manpage-tbl specify manpage processing with tbl],
[MANPAGE_TBL=$withval],
[MANPAGE_TBL=no])
AC_MSG_RESULT($MANPAGE_TBL)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_MAN_PAGES version: 47 updated: 2017/08/12 07:58:51
+dnl CF_MAN_PAGES version: 51 updated: 2021/01/05 16:29:19
dnl ------------
dnl Try to determine if the man-pages on the system are compressed, and if
dnl so, what format is used. Use this information to construct a script that
dnl will install man-pages.
AC_DEFUN([CF_MAN_PAGES],
[
CF_HELP_MESSAGE(Options to Specify How Manpages are Installed:)
CF_MANPAGE_FORMAT
CF_MANPAGE_RENAMES
CF_MANPAGE_SYMLINKS
CF_MANPAGE_TBL
if test "$prefix" = "NONE" ; then
cf_prefix="$ac_default_prefix"
else
cf_prefix="$prefix"
fi
case "$MANPAGE_FORMAT" in
(*catonly*)
cf_format=yes
cf_inboth=no
;;
(*formatted*)
cf_format=yes
cf_inboth=yes
;;
(*)
cf_format=no
cf_inboth=no
;;
esac
test ! -d man && mkdir man
cf_so_strip=
cf_compress=
case "$MANPAGE_FORMAT" in
(*compress*)
cf_so_strip="Z"
cf_compress=compress
;;
(*gzip*)
cf_so_strip="gz"
cf_compress=gzip
;;
esac
cf_edit_man=./edit_man.sh
cf_man_alias=`pwd`/man_alias.sed
cat >$cf_edit_man <<CF_EOF
#! $SHELL
# this script is generated by the configure-script CF_MAN_PAGES macro.
prefix="$cf_prefix"
datarootdir="$datarootdir"
datadir="$datadir"
NCURSES_MAJOR="$NCURSES_MAJOR"
NCURSES_MINOR="$NCURSES_MINOR"
NCURSES_PATCH="$NCURSES_PATCH"
NCURSES_OSPEED="$NCURSES_OSPEED"
TERMINFO="$TERMINFO"
INSTALL="$INSTALL"
INSTALL_DATA="$INSTALL_DATA"
transform="$program_transform_name"
TMP=\${TMPDIR:=/tmp}/man\$\$
trap "rm -f \$TMP" 0 1 2 3 15
form=\[$]1
shift || exit 1
verb=\[$]1
shift || exit 1
mandir=\[$]1
shift || exit 1
srcdir=\[$]1
top_srcdir=\[$]srcdir/..
shift || exit 1
if test "\$form" = normal ; then
if test "$cf_format" = yes ; then
if test "$cf_inboth" = no ; then
- $SHELL \[$]0 format \$verb \$mandir \$srcdir \[$]*
+ $SHELL "\[$]0" format "\$verb" "\$mandir" "\$srcdir" "\[$]@"
exit $?
fi
fi
cf_subdir=\$mandir/man
cf_tables=$MANPAGE_TBL
else
cf_subdir=\$mandir/cat
cf_tables=yes
fi
# process the list of source-files
-for i in \[$]* ; do
+for i in "\[$]@" ; do
case \$i in
(*.orig|*.rej) ;;
(*.[[0-9]]*)
section=\`expr "\$i" : '.*\\.\\([[0-9]]\\)[[xm]]*'\`;
- if test \$verb = installing ; then
- if test ! -d \$cf_subdir\${section} ; then
- mkdir -p \$cf_subdir\$section
+ if test "\$verb" = installing ; then
+ if test ! -d "\$cf_subdir\${section}" ; then
+ mkdir -p "\$cf_subdir\$section"
fi
fi
# replace variables in man page
- if test ! -f $cf_man_alias ; then
+ if test ! -f "$cf_man_alias" ; then
cat >>$cf_man_alias <<-CF_EOF2
s,@DATADIR@,\$datadir,g
s,@TERMINFO@,\${TERMINFO:="no default value"},g
s,@TERMINFO_DIRS@,\${TERMINFO_DIRS:="no default value"},g
s,@NCURSES_MAJOR@,\${NCURSES_MAJOR:="no default value"},g
s,@NCURSES_MINOR@,\${NCURSES_MINOR:="no default value"},g
s,@NCURSES_PATCH@,\${NCURSES_PATCH:="no default value"},g
s,@NCURSES_OSPEED@,\${NCURSES_OSPEED:="no default value"},g
CF_EOF
ifelse($1,,,[
for cf_name in $1
do
cf_NAME=`echo "$cf_name" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
- cf_name=`echo $cf_name|sed "$program_transform_name"`
+ cf_name=`echo "$cf_name" | sed "$program_transform_name"`
cat >>$cf_edit_man <<-CF_EOF
s,@$cf_NAME@,$cf_name,g
CF_EOF
done
])
cat >>$cf_edit_man <<CF_EOF
CF_EOF2
echo "...made $cf_man_alias"
fi
aliases=
- cf_source=\`basename \$i\`
+ cf_source=\`basename "\$i"\`
inalias=\$cf_source
- test ! -f \$inalias && inalias="\$srcdir/\$inalias"
- if test ! -f \$inalias ; then
- echo .. skipped \$cf_source
+ test ! -f "\$inalias" && inalias="\$srcdir/\$inalias"
+ if test ! -f "\$inalias" ; then
+ echo ".. skipped \$cf_source"
continue
fi
CF_EOF
if test "$MANPAGE_ALIASES" != no ; then
cat >>$cf_edit_man <<CF_EOF
nCurses=ignore.3x
- test $with_curses_h = yes && nCurses=ncurses.3x
- aliases=\`sed -f \$top_srcdir/man/manlinks.sed \$inalias |sed -f $cf_man_alias | sort -u; test \$inalias = \$nCurses && echo curses\`
+ test "$with_curses_h" = yes && nCurses=ncurses.3x
+ aliases=\`sed -f "\$top_srcdir/man/manlinks.sed" "\$inalias" |sed -f "$cf_man_alias" | sort -u; test "\$inalias" = "\$nCurses" && echo curses\`
CF_EOF
fi
if test "$MANPAGE_RENAMES" = no ; then
cat >>$cf_edit_man <<CF_EOF
# perform program transformations for section 1 man pages
if test \$section = 1 ; then
cf_target=\$cf_subdir\${section}/\`echo \$cf_source|sed "\${transform}"\`
else
cf_target=\$cf_subdir\${section}/\$cf_source
fi
CF_EOF
else
cat >>$cf_edit_man <<CF_EOF
cf_target=\`grep "^\$cf_source" $MANPAGE_RENAMES | $AWK '{print \[$]2}'\`
if test -z "\$cf_target" ; then
- echo '? missing rename for '\$cf_source
+ echo "? missing rename for \$cf_source"
cf_target="\$cf_source"
fi
cf_target="\$cf_subdir\${section}/\${cf_target}"
CF_EOF
fi
cat >>$cf_edit_man <<CF_EOF
- sed -f $cf_man_alias \\
+ sed -f "$cf_man_alias" \\
CF_EOF
-if test -f $MANPAGE_RENAMES ; then
+if test -f "$MANPAGE_RENAMES" ; then
cat >>$cf_edit_man <<CF_EOF
- < \$i | sed -f `pwd`/edit_man.sed >\$TMP
+ < "\$i" | sed -f `pwd`/edit_man.sed >\$TMP
CF_EOF
else
cat >>$cf_edit_man <<CF_EOF
- < \$i >\$TMP
+ < "\$i" >\$TMP
CF_EOF
fi
cat >>$cf_edit_man <<CF_EOF
if test \$cf_tables = yes ; then
tbl \$TMP >\$TMP.out
mv \$TMP.out \$TMP
fi
CF_EOF
-if test $with_overwrite != yes ; then
+if test "$with_overwrite" != yes ; then
cat >>$cf_edit_man <<CF_EOF
- sed -e "/\#[ ]*include/s,<curses.h,<ncurses$LIB_SUFFIX/curses.h," < \$TMP >\$TMP.out
+ sed -e "/\\#[ ]*include/s,<curses.h,<ncurses$LIB_SUFFIX/curses.h," < \$TMP >\$TMP.out
mv \$TMP.out \$TMP
CF_EOF
fi
-if test $with_curses_h != yes ; then
+if test "$with_curses_h" != yes ; then
cat >>$cf_edit_man <<CF_EOF
- sed -e "/\#[ ]*include/s,curses.h,ncurses.h," < \$TMP >\$TMP.out
+ sed -e "/\\#[ ]*include/s,curses.h,ncurses.h," < \$TMP >\$TMP.out
mv \$TMP.out \$TMP
CF_EOF
fi
cat >>$cf_edit_man <<CF_EOF
- if test \$form = format ; then
+ if test "\$form" = format ; then
nroff -man \$TMP >\$TMP.out
mv \$TMP.out \$TMP
fi
CF_EOF
if test -n "$cf_compress" ; then
cat >>$cf_edit_man <<CF_EOF
- if test \$verb = installing ; then
- if ( $cf_compress -f \$TMP )
+ if test "\$verb" = installing ; then
+ if ( "$cf_compress" -f \$TMP )
then
mv \$TMP.$cf_so_strip \$TMP
fi
fi
cf_target="\$cf_target.$cf_so_strip"
CF_EOF
fi
case "$MANPAGE_FORMAT" in
(*BSDI*)
cat >>$cf_edit_man <<CF_EOF
- if test \$form = format ; then
+ if test "\$form" = format ; then
# BSDI installs only .0 suffixes in the cat directories
- cf_target="\`echo \$cf_target|sed -e 's/\.[[1-9]]\+[[a-z]]*/.0/'\`"
+ cf_target="\`echo \$cf_target|sed -e 's/\\.[[1-9]]\\+[[a-z]]*/.0/'\`"
fi
CF_EOF
;;
esac
cat >>$cf_edit_man <<CF_EOF
- suffix=\`basename \$cf_target | sed -e 's%^[[^.]]*%%'\`
- if test \$verb = installing ; then
- echo \$verb \$cf_target
- \$INSTALL_DATA \$TMP \$cf_target
- test -d \$cf_subdir\${section} &&
+ suffix=\`basename "\$cf_target" | sed -e 's%^[[^.]]*%%'\`
+ if test "\$verb" = installing ; then
+ echo "\$verb \$cf_target"
+ \$INSTALL_DATA \$TMP "\$cf_target"
+ test -d "\$cf_subdir\${section}" &&
test -n "\$aliases" && (
- cd \$cf_subdir\${section} && (
- cf_source=\`echo \$cf_target |sed -e 's%^.*/\([[^/]][[^/]]*/[[^/]][[^/]]*$\)%\1%'\`
- test -n "$cf_so_strip" && cf_source=\`echo \$cf_source |sed -e 's%\.$cf_so_strip\$%%'\`
- cf_target=\`basename \$cf_target\`
+ cd "\$cf_subdir\${section}" && (
+ cf_source=\`echo "\$cf_target" |sed -e 's%^.*/\\([[^/]][[^/]]*/[[^/]][[^/]]*$\\)%\\1%'\`
+ test -n "$cf_so_strip" && cf_source=\`echo "\$cf_source" |sed -e 's%\\.$cf_so_strip\$%%'\`
+ cf_target=\`basename "\$cf_target"\`
for cf_alias in \$aliases
do
- if test \$section = 1 ; then
- cf_alias=\`echo \$cf_alias|sed "\${transform}"\`
+ if test "\$section" = 1 ; then
+ cf_alias=\`echo "\$cf_alias" |sed "\${transform}"\`
fi
if test "$MANPAGE_SYMLINKS" = yes ; then
- if test -f \$cf_alias\${suffix} ; then
- if ( cmp -s \$cf_target \$cf_alias\${suffix} )
+ if test -f "\$cf_alias\${suffix}" ; then
+ if ( cmp -s "\$cf_target" "\$cf_alias\${suffix}" )
then
continue
fi
fi
- echo .. \$verb alias \$cf_alias\${suffix}
+ echo ".. \$verb alias \$cf_alias\${suffix}"
CF_EOF
case "x$LN_S" in
(*-f)
cat >>$cf_edit_man <<CF_EOF
- $LN_S \$cf_target \$cf_alias\${suffix}
+ $LN_S "\$cf_target" "\$cf_alias\${suffix}"
CF_EOF
;;
(*)
cat >>$cf_edit_man <<CF_EOF
- rm -f \$cf_alias\${suffix}
- $LN_S \$cf_target \$cf_alias\${suffix}
+ rm -f "\$cf_alias\${suffix}"
+ $LN_S "\$cf_target" "\$cf_alias\${suffix}"
CF_EOF
;;
esac
cat >>$cf_edit_man <<CF_EOF
elif test "\$cf_target" != "\$cf_alias\${suffix}" ; then
echo ".so \$cf_source" >\$TMP
CF_EOF
if test -n "$cf_compress" ; then
cat >>$cf_edit_man <<CF_EOF
if test -n "$cf_so_strip" ; then
- $cf_compress -f \$TMP
+ "$cf_compress" -f \$TMP
mv \$TMP.$cf_so_strip \$TMP
fi
CF_EOF
fi
cat >>$cf_edit_man <<CF_EOF
- echo .. \$verb alias \$cf_alias\${suffix}
- rm -f \$cf_alias\${suffix}
- \$INSTALL_DATA \$TMP \$cf_alias\${suffix}
+ echo ".. \$verb alias \$cf_alias\${suffix}"
+ rm -f "\$cf_alias\${suffix}"
+ \$INSTALL_DATA \$TMP "\$cf_alias\${suffix}"
fi
done
)
)
- elif test \$verb = removing ; then
- test -f \$cf_target && (
- echo \$verb \$cf_target
- rm -f \$cf_target
+ elif test "\$verb" = removing ; then
+ test -f "\$cf_target" && (
+ echo "\$verb \$cf_target"
+ rm -f "\$cf_target"
)
- test -d \$cf_subdir\${section} &&
+ test -d "\$cf_subdir\${section}" &&
test -n "\$aliases" && (
- cd \$cf_subdir\${section} && (
+ cd "\$cf_subdir\${section}" && (
for cf_alias in \$aliases
do
- if test \$section = 1 ; then
- cf_alias=\`echo \$cf_alias|sed "\${transform}"\`
+ if test "\$section" = 1 ; then
+ cf_alias=\`echo "\$cf_alias" |sed "\${transform}"\`
fi
- echo .. \$verb alias \$cf_alias\${suffix}
- rm -f \$cf_alias\${suffix}
+ echo ".. \$verb alias \$cf_alias\${suffix}"
+ rm -f "\$cf_alias\${suffix}"
done
)
)
else
# echo ".hy 0"
cat \$TMP
fi
;;
esac
done
-if test $cf_inboth = yes ; then
-if test \$form != format ; then
- $SHELL \[$]0 format \$verb \$mandir \$srcdir \[$]*
+if test "$cf_inboth" = yes ; then
+if test "\$form" != format ; then
+ $SHELL "\[$]0" format "\$verb" "\$mandir" "\$srcdir" "\[$]@"
fi
fi
exit 0
CF_EOF
-chmod 755 $cf_edit_man
+chmod 755 "$cf_edit_man"
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_MATH_LIB version: 9 updated: 2017/01/21 11:06:25
+dnl CF_MAP_LIB_BASENAME version: 2 updated: 2021/01/02 17:09:14
+dnl -------------------
+dnl Convert a default-libname to the actual one used via CF_WITH_LIB_BASENAME.
+dnl
+dnl $1 = variable to set
+dnl $2 = default-libname
+AC_DEFUN([CF_MAP_LIB_BASENAME],[
+CF_UPPER(cf_map_lib_basename,$2)
+eval $1="\$${cf_map_lib_basename}_NAME"
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_MATH_LIB version: 10 updated: 2020/12/31 18:40:20
dnl -----------
dnl Checks for libraries. At least one UNIX system, Apple Macintosh
dnl Rhapsody 5.5, does not have -lm. We cannot use the simpler
dnl AC_CHECK_LIB(m,sin), because that fails for C++.
AC_DEFUN([CF_MATH_LIB],
[
AC_CACHE_CHECK(if -lm needed for math functions,
cf_cv_need_libm,[
AC_TRY_LINK([
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
],
- [double x = rand(); printf("result = %g\n", ]ifelse([$2],,sin(x),$2)[)],
+ [double x = rand(); printf("result = %g\\n", ]ifelse([$2],,sin(x),$2)[)],
[cf_cv_need_libm=no],
[cf_cv_need_libm=yes])])
if test "$cf_cv_need_libm" = yes
then
ifelse($1,,[
CF_ADD_LIB(m)
],[$1=-lm])
fi
])
dnl ---------------------------------------------------------------------------
-dnl CF_MIXEDCASE_FILENAMES version: 7 updated: 2015/04/12 15:39:00
+dnl CF_MIXEDCASE_FILENAMES version: 9 updated: 2021/01/01 16:53:59
dnl ----------------------
dnl Check if the file-system supports mixed-case filenames. If we're able to
dnl create a lowercase name and see it as uppercase, it doesn't support that.
AC_DEFUN([CF_MIXEDCASE_FILENAMES],
[
AC_CACHE_CHECK(if filesystem supports mixed-case filenames,cf_cv_mixedcase,[
if test "$cross_compiling" = yes ; then
- case $target_alias in
- (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*)
+ case "$target_alias" in
+ (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*|darwin*)
cf_cv_mixedcase=no
;;
(*)
cf_cv_mixedcase=yes
;;
esac
else
rm -f conftest CONFTEST
echo test >conftest
if test -f CONFTEST ; then
cf_cv_mixedcase=no
else
cf_cv_mixedcase=yes
fi
rm -f conftest CONFTEST
fi
])
test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES,1,[Define to 1 if filesystem supports mixed-case filenames.])
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_MKSTEMP version: 10 updated: 2017/01/21 11:12:16
+dnl CF_MKSTEMP version: 11 updated: 2021/01/01 13:31:04
dnl ----------
dnl Check for a working mkstemp. This creates two files, checks that they are
dnl successfully created and distinct (AmigaOS apparently fails on the last).
AC_DEFUN([CF_MKSTEMP],[
AC_CHECK_HEADERS( \
unistd.h \
)
AC_CACHE_CHECK(for working mkstemp, cf_cv_func_mkstemp,[
-rm -rf conftest*
+rm -rf ./conftest*
AC_TRY_RUN([
#include <sys/types.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
int main(void)
{
char *tmpl = "conftestXXXXXX";
char name[2][80];
int n;
int result = 0;
int fd;
struct stat sb;
umask(077);
for (n = 0; n < 2; ++n) {
strcpy(name[n], tmpl);
if ((fd = mkstemp(name[n])) >= 0) {
if (!strcmp(name[n], tmpl)
|| stat(name[n], &sb) != 0
|| (sb.st_mode & S_IFMT) != S_IFREG
|| (sb.st_mode & 077) != 0) {
result = 1;
}
close(fd);
}
}
if (result == 0
&& !strcmp(name[0], name[1]))
result = 1;
${cf_cv_main_return:-return}(result);
}
],[cf_cv_func_mkstemp=yes
],[cf_cv_func_mkstemp=no
],[cf_cv_func_mkstemp=maybe])
])
if test "x$cf_cv_func_mkstemp" = xmaybe ; then
AC_CHECK_FUNC(mkstemp)
fi
if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then
AC_DEFINE(HAVE_MKSTEMP,1,[Define to 1 if mkstemp() is available and working.])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_MSG_LOG version: 5 updated: 2010/10/23 15:52:32
dnl ----------
dnl Write a debug message to config.log, along with the line number in the
dnl configure script.
AC_DEFUN([CF_MSG_LOG],[
echo "${as_me:-configure}:__oline__: testing $* ..." 1>&AC_FD_CC
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_NCURSES_ABI_6 version: 3 updated: 2015/06/06 16:10:11
+dnl CF_NCURSES_ABI_6 version: 4 updated: 2021/01/01 13:31:04
dnl ----------------
dnl Set ncurses' ABI to 6 unless overridden by explicit configure option, and
dnl warn about this.
AC_DEFUN([CF_NCURSES_ABI_6],[
if test "${with_abi_version+set}" != set; then
- case $cf_cv_rel_version in
+ case "$cf_cv_rel_version" in
(5.*)
cf_cv_rel_version=6.0
cf_cv_abi_version=6
AC_MSG_WARN(overriding ABI version to $cf_cv_abi_version)
;;
esac
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_NCURSES_WITH_ABI_VERSION version: 2 updated: 2015/12/19 17:51:52
+dnl CF_NCURSES_WITH_ABI_VERSION version: 3 updated: 2021/01/01 13:31:04
dnl ---------------------------
dnl Allow ncurses's ABI to be overridden. Generally this happens when a
dnl packager has incremented the ABI past that used in the original package,
dnl and wishes to keep doing this.
dnl
dnl $1 is the package name, if any, to derive a corresponding {package}_ABI
dnl symbol.
AC_DEFUN([CF_NCURSES_WITH_ABI_VERSION],[
CF_WITH_ABI_VERSION($1)
if test "x$cf_cv_abi_version" != "x$with_abi_version"
then
- case $cf_cv_rel_version in
+ case "$cf_cv_rel_version" in
(5.*)
cf_cv_rel_version=$with_abi_version.0
;;
esac
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_NO_LEAKS_OPTION version: 6 updated: 2015/04/12 15:39:00
+dnl CF_NO_LEAKS_OPTION version: 8 updated: 2021/01/05 20:05:09
dnl ------------------
dnl see CF_WITH_NO_LEAKS
AC_DEFUN([CF_NO_LEAKS_OPTION],[
AC_MSG_CHECKING(if you want to use $1 for testing)
AC_ARG_WITH($1,
[$2],
[AC_DEFINE_UNQUOTED($3,1,"Define to 1 if you want to use $1 for testing.")ifelse([$4],,[
$4
])
- : ${with_cflags:=-g}
- : ${with_no_leaks:=yes}
+ : "${with_cflags:=-g}"
+ : "${enable_leaks:=no}"
with_$1=yes],
[with_$1=])
AC_MSG_RESULT(${with_$1:-no})
-case .$with_cflags in
+case ".$with_cflags" in
(.*-g*)
case .$CFLAGS in
(.*-g*)
;;
(*)
CF_ADD_CFLAGS([-g])
;;
esac
;;
esac
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_NUMBER_SYNTAX version: 2 updated: 2015/04/17 21:13:04
dnl ----------------
dnl Check if the given variable is a number. If not, report an error.
dnl $1 is the variable
dnl $2 is the message
AC_DEFUN([CF_NUMBER_SYNTAX],[
if test -n "$1" ; then
case $1 in
([[0-9]]*)
;;
(*)
AC_MSG_ERROR($2 is not a number: $1)
;;
esac
else
AC_MSG_ERROR($2 value is empty)
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_OBJ_SUBDIR version: 7 updated: 2015/04/17 21:13:04
+dnl CF_OBJ_SUBDIR version: 8 updated: 2021/01/01 13:31:04
dnl -------------
dnl Compute the object-directory name from the given model name
AC_DEFUN([CF_OBJ_SUBDIR],
[
case $1 in
(libtool) $2='obj_lo' ;;
(normal) $2='objects' ;;
(debug) $2='obj_g' ;;
(profile) $2='obj_p' ;;
(shared)
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(cygwin|msys)
$2='objects' ;;
(*)
$2='obj_s' ;;
esac
esac
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_PATHSEP version: 7 updated: 2015/04/12 15:39:00
+dnl CF_PATHSEP version: 8 updated: 2021/01/01 13:31:04
dnl ----------
dnl Provide a value for the $PATH and similar separator (or amend the value
dnl as provided in autoconf 2.5x).
AC_DEFUN([CF_PATHSEP],
[
AC_MSG_CHECKING(for PATH separator)
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(os2*) PATH_SEPARATOR=';' ;;
(*) ${PATH_SEPARATOR:=':'} ;;
esac
ifelse([$1],,,[$1=$PATH_SEPARATOR])
AC_SUBST(PATH_SEPARATOR)
AC_MSG_RESULT($PATH_SEPARATOR)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_PATH_PROG version: 10 updated: 2019/06/30 19:44:43
+dnl CF_PATH_PROG version: 12 updated: 2021/01/02 09:31:20
dnl ------------
dnl Check for a given program, defining corresponding symbol.
dnl $1 = environment variable, which is suffixed by "_PATH" in the #define.
dnl $2 = program name to find.
dnl $3 = optional list of additional program names to test.
dnl $4 = $PATH
dnl
dnl If there is more than one token in the result, #define the remaining tokens
dnl to $1_ARGS. We need this for 'install' in particular.
dnl
dnl FIXME: we should allow this to be overridden by environment variables
dnl
AC_DEFUN([CF_PATH_PROG],[
AC_REQUIRE([CF_PATHSEP])
-test -z "[$]$1" && $1=$2
+test -z "[$]$1" && $1="$2"
AC_PATH_PROGS($1,[$]$1 $2 ifelse($3,,,$3),[$]$1, ifelse($4,,,$4))
cf_path_prog=""
cf_path_args=""
IFS="${IFS:- }"; cf_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR"
for cf_temp in $ac_cv_path_$1
do
if test -z "$cf_path_prog" ; then
if test "$with_full_paths" = yes ; then
CF_PATH_SYNTAX(cf_temp,break)
cf_path_prog="$cf_temp"
else
- cf_path_prog="`basename $cf_temp`"
+ cf_path_prog="`basename "$cf_temp"`"
fi
elif test -z "$cf_path_args" ; then
cf_path_args="$cf_temp"
else
cf_path_args="$cf_path_args $cf_temp"
fi
done
IFS="$cf_save_ifs"
if test -n "$cf_path_prog" ; then
CF_MSG_LOG(defining path for ${cf_path_prog})
AC_DEFINE_UNQUOTED($1_PATH,"$cf_path_prog",Define to pathname $1)
test -n "$cf_path_args" && AC_DEFINE_UNQUOTED($1_ARGS,"$cf_path_args",Define to provide args for $1)
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_PATH_SYNTAX version: 16 updated: 2015/04/18 08:56:57
+dnl CF_PATH_SYNTAX version: 18 updated: 2020/12/31 18:40:20
dnl --------------
dnl Check the argument to see that it looks like a pathname. Rewrite it if it
dnl begins with one of the prefix/exec_prefix variables, and then again if the
dnl result begins with 'NONE'. This is necessary to work around autoconf's
dnl delayed evaluation of those symbols.
AC_DEFUN([CF_PATH_SYNTAX],[
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".[$]$1" in
(.\[$]\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[[a-zA-Z]]:[[\\/]]*) # OS/2 EMX
;;
-(.\[$]{*prefix}*|.\[$]{*dir}*)
+(.\[$]\{*prefix\}*|.\[$]\{*dir\}*)
eval $1="[$]$1"
case ".[$]$1" in
(.NONE/*)
- $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%`
+ $1=`echo "[$]$1" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%`
+ $1=`echo "[$]$1" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
ifelse([$2],,[AC_MSG_ERROR([expected a pathname, not \"[$]$1\"])],$2)
;;
esac
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_PKG_CONFIG version: 10 updated: 2015/04/26 18:06:58
+dnl CF_PKG_CONFIG version: 11 updated: 2021/01/01 13:31:04
dnl -------------
dnl Check for the package-config program, unless disabled by command-line.
AC_DEFUN([CF_PKG_CONFIG],
[
AC_MSG_CHECKING(if you want to use pkg-config)
AC_ARG_WITH(pkg-config,
[ --with-pkg-config{=path} enable/disable use of pkg-config],
[cf_pkg_config=$withval],
[cf_pkg_config=yes])
AC_MSG_RESULT($cf_pkg_config)
-case $cf_pkg_config in
+case "$cf_pkg_config" in
(no)
PKG_CONFIG=none
;;
(yes)
CF_ACVERSION_CHECK(2.52,
[AC_PATH_TOOL(PKG_CONFIG, pkg-config, none)],
[AC_PATH_PROG(PKG_CONFIG, pkg-config, none)])
;;
(*)
PKG_CONFIG=$withval
;;
esac
test -z "$PKG_CONFIG" && PKG_CONFIG=none
if test "$PKG_CONFIG" != none ; then
CF_PATH_SYNTAX(PKG_CONFIG)
elif test "x$cf_pkg_config" != xno ; then
AC_MSG_WARN(pkg-config is not installed)
fi
AC_SUBST(PKG_CONFIG)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_POSIX_C_SOURCE version: 11 updated: 2018/12/31 20:46:17
dnl -----------------
dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed.
dnl
dnl POSIX.1-1990 _POSIX_SOURCE
dnl POSIX.1-1990 and _POSIX_SOURCE and
dnl POSIX.2-1992 C-Language _POSIX_C_SOURCE=2
dnl Bindings Option
dnl POSIX.1b-1993 _POSIX_C_SOURCE=199309L
dnl POSIX.1c-1996 _POSIX_C_SOURCE=199506L
dnl X/Open 2000 _POSIX_C_SOURCE=200112L
dnl
dnl Parameters:
dnl $1 is the nominal value for _POSIX_C_SOURCE
AC_DEFUN([CF_POSIX_C_SOURCE],
[AC_REQUIRE([CF_POSIX_VISIBLE])dnl
if test "$cf_cv_posix_visible" = no; then
cf_POSIX_C_SOURCE=ifelse([$1],,199506L,[$1])
cf_save_CFLAGS="$CFLAGS"
cf_save_CPPFLAGS="$CPPFLAGS"
CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE)
CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE)
AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[
CF_MSG_LOG(if the symbol is already defined go no further)
AC_TRY_COMPILE([#include <sys/types.h>],[
#ifndef _POSIX_C_SOURCE
make an error
#endif],
[cf_cv_posix_c_source=no],
[cf_want_posix_source=no
case .$cf_POSIX_C_SOURCE in
(.[[12]]??*)
cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
;;
(.2)
cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
cf_want_posix_source=yes
;;
(.*)
cf_want_posix_source=yes
;;
esac
if test "$cf_want_posix_source" = yes ; then
AC_TRY_COMPILE([#include <sys/types.h>],[
#ifdef _POSIX_SOURCE
make an error
#endif],[],
cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE")
fi
CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE)
CFLAGS="$cf_trim_CFLAGS"
CPPFLAGS="$cf_trim_CPPFLAGS"
CF_APPEND_TEXT(CPPFLAGS,$cf_cv_posix_c_source)
CF_MSG_LOG(if the second compile does not leave our definition intact error)
AC_TRY_COMPILE([#include <sys/types.h>],[
#ifndef _POSIX_C_SOURCE
make an error
#endif],,
[cf_cv_posix_c_source=no])
CFLAGS="$cf_save_CFLAGS"
CPPFLAGS="$cf_save_CPPFLAGS"
])
])
if test "$cf_cv_posix_c_source" != no ; then
CFLAGS="$cf_trim_CFLAGS"
CPPFLAGS="$cf_trim_CPPFLAGS"
CF_ADD_CFLAGS($cf_cv_posix_c_source)
fi
fi # cf_cv_posix_visible
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_POSIX_VISIBLE version: 1 updated: 2018/12/31 20:46:17
dnl ----------------
dnl POSIX documents test-macros which an application may set before any system
dnl headers are included to make features available.
dnl
dnl Some BSD platforms (originally FreeBSD, but copied by a few others)
dnl diverged from POSIX in 2002 by setting symbols which make all of the most
dnl recent features visible in the system header files unless the application
dnl overrides the corresponding test-macros. Doing that introduces portability
dnl problems.
dnl
dnl This macro makes a special check for the symbols used for this, to avoid a
dnl conflicting definition.
AC_DEFUN([CF_POSIX_VISIBLE],
[
AC_CACHE_CHECK(if the POSIX test-macros are already defined,cf_cv_posix_visible,[
AC_TRY_COMPILE([#include <stdio.h>],[
#if defined(__POSIX_VISIBLE) && ((__POSIX_VISIBLE - 0L) > 0) \
&& defined(__XSI_VISIBLE) && ((__XSI_VISIBLE - 0L) > 0) \
&& defined(__BSD_VISIBLE) && ((__BSD_VISIBLE - 0L) > 0) \
&& defined(__ISO_C_VISIBLE) && ((__ISO_C_VISIBLE - 0L) > 0)
#error conflicting symbols found
#endif
],[cf_cv_posix_visible=no],[cf_cv_posix_visible=yes])
])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PREDEFINE version: 2 updated: 2010/05/26 16:44:57
dnl ------------
dnl Add definitions to CPPFLAGS to ensure they're predefined for all compiles.
dnl
dnl $1 = symbol to test
dnl $2 = value (if any) to use for a predefinition
AC_DEFUN([CF_PREDEFINE],
[
AC_MSG_CHECKING(if we must define $1)
AC_TRY_COMPILE([#include <sys/types.h>
],[
#ifndef $1
make an error
#endif],[cf_result=no],[cf_result=yes])
AC_MSG_RESULT($cf_result)
if test "$cf_result" = yes ; then
CPPFLAGS="$CPPFLAGS ifelse([$2],,-D$1,[-D$1=$2])"
elif test "x$2" != "x" ; then
AC_MSG_CHECKING(checking for compatible value versus $2)
AC_TRY_COMPILE([#include <sys/types.h>
],[
#if $1-$2 < 0
make an error
#endif],[cf_result=yes],[cf_result=no])
AC_MSG_RESULT($cf_result)
if test "$cf_result" = no ; then
# perhaps we can override it - try...
CPPFLAGS="$CPPFLAGS -D$1=$2"
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_PRG_RULES version: 1 updated: 2006/06/03 11:45:08
+dnl CF_PRG_RULES version: 2 updated: 2021/01/01 13:31:04
dnl ------------
dnl Append definitions and rules for the given programs to the subdirectory
dnl Makefiles, and the recursion rule for the top-level Makefile.
dnl
dnl parameters
dnl $1 = script to run
dnl $2 = list of subdirectories
dnl
dnl variables
dnl $AWK
AC_DEFUN([CF_PRG_RULES],
[
for cf_dir in $2
do
- if test ! -d $srcdir/$cf_dir; then
+ if test ! -d "$srcdir/$cf_dir" ; then
continue
- elif test -f $srcdir/$cf_dir/programs; then
- $AWK -f $1 $srcdir/$cf_dir/programs >>$cf_dir/Makefile
+ elif test -f "$srcdir/$cf_dir/programs" ; then
+ $AWK -f $1 "$srcdir/$cf_dir/programs" >>$cf_dir/Makefile
fi
done
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PROG_AR version: 1 updated: 2009/01/01 20:15:22
dnl ----------
dnl Check for archiver "ar".
AC_DEFUN([CF_PROG_AR],[
AC_CHECK_TOOL(AR, ar, ar)
])
dnl ---------------------------------------------------------------------------
dnl CF_PROG_AWK version: 1 updated: 2006/09/16 11:40:59
dnl -----------
dnl Check for awk, ensure that the check found something.
AC_DEFUN([CF_PROG_AWK],
[
AC_PROG_AWK
test -z "$AWK" && AC_MSG_ERROR(No awk program found)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PROG_CC version: 5 updated: 2019/12/31 08:53:54
dnl ----------
dnl standard check for CC, plus followup sanity checks
dnl $1 = optional parameter to pass to AC_PROG_CC to specify compiler name
AC_DEFUN([CF_PROG_CC],[
CF_ACVERSION_CHECK(2.53,
[AC_MSG_WARN(this will incorrectly handle gnatgcc choice)
AC_REQUIRE([AC_PROG_CC])],
[])
ifelse($1,,[AC_PROG_CC],[AC_PROG_CC($1)])
CF_GCC_VERSION
CF_ACVERSION_CHECK(2.52,
[AC_PROG_CC_STDC],
[CF_ANSI_CC_REQD])
CF_CC_ENV_FLAGS
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_PROG_CC_C_O version: 5 updated: 2017/01/21 11:06:25
+dnl CF_PROG_CC_C_O version: 6 updated: 2021/01/01 13:31:04
dnl --------------
dnl Analogous to AC_PROG_CC_C_O, but more useful: tests only $CC, ensures that
dnl the output file can be renamed, and allows for a shell variable that can
dnl be used later. The parameter is either CC or CXX. The result is the
dnl cache variable:
dnl $cf_cv_prog_CC_c_o
dnl $cf_cv_prog_CXX_c_o
dnl
dnl $1 = compiler
dnl $2 = compiler options, if any
AC_DEFUN([CF_PROG_CC_C_O],
[AC_REQUIRE([AC_PROG_CC])dnl
AC_MSG_CHECKING([whether [$]$1 understands -c and -o together])
AC_CACHE_VAL(cf_cv_prog_$1_c_o,
[
cat > conftest.$ac_ext <<CF_EOF
int main(void)
{
${cf_cv_main_return:-return}(0);
}
CF_EOF
# We do the test twice because some compilers refuse to overwrite an
# existing .o file with -o, though they will create one.
ac_try='[$]$1 $2 -c conftest.$ac_ext -o conftest2.$ac_objext >&AC_FD_CC'
if AC_TRY_EVAL(ac_try) &&
test -f conftest2.$ac_objext && AC_TRY_EVAL(ac_try);
then
eval cf_cv_prog_$1_c_o=yes
else
eval cf_cv_prog_$1_c_o=no
fi
-rm -rf conftest*
+rm -rf ./conftest*
])dnl
-if test $cf_cv_prog_$1_c_o = yes; then
+if test "$cf_cv_prog_$1_c_o" = yes; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_PROG_EGREP version: 2 updated: 2015/04/18 08:56:57
-dnl -------------
-dnl AC_PROG_EGREP was introduced in autoconf 2.53.
-dnl This macro adds a check to ensure the script found something.
-AC_DEFUN([CF_PROG_EGREP],
-[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
- [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
- then ac_cv_prog_egrep='grep -E'
- else ac_cv_prog_egrep='egrep'
- fi])
- EGREP=$ac_cv_prog_egrep
- AC_SUBST([EGREP])
- test -z "$EGREP" && AC_MSG_ERROR(No egrep program found)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_PROG_GNAT version: 10 updated: 2019/12/31 08:53:54
+dnl CF_PROG_GNAT version: 12 updated: 2021/01/02 17:09:14
dnl ------------
dnl Check for gnat/gnatmake/etc, ensure that the toolset is complete.
AC_DEFUN([CF_PROG_GNAT],[
for cf_prog_gnat in gnat gnatmake gprconfig gprbuild
do
CF_UPPER(cf_upper_prog_gnat,${cf_prog_gnat})
unset ac_cv_path_cf_TEMP_gnat
unset cf_TEMP_gnat
AC_PATH_PROG(cf_TEMP_gnat,$cf_prog_gnat,no)
- eval cf_cv_PATH_$cf_upper_prog_gnat=[$]ac_cv_path_cf_TEMP_gnat
+ eval "cf_cv_PATH_$cf_upper_prog_gnat=[$]ac_cv_path_cf_TEMP_gnat"
if test "x$cf_TEMP_gnat" != xno; then
unset cf_cv_gnat_version
unset cf_TEMP_gnat
CF_GNAT_VERSION(cf_TEMP_gnat,$cf_prog_gnat)
fi
- eval cf_cv_VERSION_$cf_upper_prog_gnat=[$]cf_TEMP_gnat
+ eval "cf_cv_VERSION_$cf_upper_prog_gnat=[$]cf_TEMP_gnat"
unset cf_TEMP_gnat
unset cf_cv_gnat_version
unset ac_cv_path_cf_TEMP_gnat
done
if test "x$cf_cv_VERSION_GNATMAKE" = "xno"; then
cf_ada_make=
cf_cv_prog_gnat_correct=no
else
cf_ada_make=gnatmake
if test "x$cf_cv_VERSION_GPRCONFIG" = "xno"; then
# gprconfig is newer than gnatmake; we can continue...
cf_ada_config="##"
else
- rm -rf conftest* *~conftest*
+ rm -rf ./conftest* ./*~conftest*
if mkdir conftest.src
then
cf_ada_config=""
cd conftest.src
for cf_gprconfig in Ada C
do
AC_MSG_CHECKING(for gprconfig name for $cf_gprconfig)
- if test $cf_gprconfig = C
+ if test "$cf_gprconfig" = C
then
for cf_gprconfig_param in \
- $cf_gprconfig,,,,GNATGCC \
- $cf_gprconfig,,,,GCC \
- $cf_gprconfig
+ "$cf_gprconfig,,,,GNATGCC" \
+ "$cf_gprconfig,,,,GCC" \
+ "$cf_gprconfig"
do
cf_gprconfig_value=`echo s| gprconfig --config=$cf_gprconfig_param 2>&AC_FD_CC | ${AWK:-awk} '/^\*/{print [$]3;}' | head -n 1`
test -n "$cf_gprconfig_value" && break
done
else
cf_gprconfig_param=$cf_gprconfig
cf_gprconfig_value=`echo s| gprconfig --config=$cf_gprconfig_param 2>&AC_FD_CC | ${AWK:-awk} '/^\*/{print [$]3;}' | head -n 1`
fi
if test -n "$cf_gprconfig_value"
then
- eval cf_ada_config_[$]cf_gprconfig=[$]cf_gprconfig_value
+ eval "cf_ada_config_[$]cf_gprconfig=[$]cf_gprconfig_value"
AC_MSG_RESULT($cf_gprconfig_value)
else
AC_MSG_RESULT(missing)
cf_ada_config="#"
break
fi
done
cd ..
- rm -rf conftest* *~conftest*
+ rm -rf ./conftest* ./*~conftest*
fi
fi
if test "x$cf_ada_config" != "x#"
then
CF_GNAT_VERSION
CF_CHECK_GNAT_VERSION
AC_CHECK_PROG(M4_exists, m4, yes, no)
if test "$ac_cv_prog_M4_exists" = no; then
cf_cv_prog_gnat_correct=no
AC_MSG_WARN(Ada95 binding required program m4 not found. Ada95 binding disabled)
fi
if test "$cf_cv_prog_gnat_correct" = yes; then
AC_MSG_CHECKING(if GNAT works)
CF_GNAT_TRY_RUN([procedure conftest;],
[with Text_IO;
with GNAT.OS_Lib;
procedure conftest is
begin
Text_IO.Put ("Hello World");
Text_IO.New_Line;
GNAT.OS_Lib.OS_Exit (0);
end conftest;],
[cf_cv_prog_gnat_correct=yes],
[cf_cv_prog_gnat_correct=no])
AC_MSG_RESULT($cf_cv_prog_gnat_correct)
fi
else
cf_cv_prog_gnat_correct=no
fi
fi
AC_SUBST(cf_ada_make)
AC_SUBST(cf_ada_config)
AC_SUBST(cf_ada_config_Ada)
AC_SUBST(cf_ada_config_C)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_PROG_INSTALL version: 7 updated: 2015/04/18 08:56:57
+dnl CF_PROG_INSTALL version: 10 updated: 2021/01/04 19:33:05
dnl ---------------
dnl Force $INSTALL to be an absolute-path. Otherwise, edit_man.sh and the
dnl misc/tabset install won't work properly. Usually this happens only when
dnl using the fallback mkinstalldirs script
AC_DEFUN([CF_PROG_INSTALL],
[AC_PROG_INSTALL
case $INSTALL in
(/*)
;;
(*)
CF_DIRNAME(cf_dir,$INSTALL)
test -z "$cf_dir" && cf_dir=.
- INSTALL=`cd $cf_dir && pwd`/`echo $INSTALL | sed -e 's%^.*/%%'`
+ INSTALL="`cd \"$cf_dir\" && pwd`"/"`echo "$INSTALL" | sed -e 's%^.*/%%'`"
;;
esac
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PROG_LDCONFIG version: 5 updated: 2015/04/18 08:56:57
dnl ----------------
dnl Check for ldconfig, needed to fixup shared libraries that would be built
dnl and then used in the install.
AC_DEFUN([CF_PROG_LDCONFIG],[
if test "$cross_compiling" = yes ; then
LDCONFIG=:
else
case "$cf_cv_system_name" in
(dragonfly*|mirbsd*|freebsd*)
test -z "$LDCONFIG" && LDCONFIG="/sbin/ldconfig -R"
;;
(*) LDPATH=$PATH:/sbin:/usr/sbin
AC_PATH_PROG(LDCONFIG,ldconfig,,$LDPATH)
;;
esac
fi
AC_SUBST(LDCONFIG)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PROG_LINT version: 4 updated: 2019/11/20 18:55:37
dnl ------------
AC_DEFUN([CF_PROG_LINT],
[
AC_CHECK_PROGS(LINT, lint cppcheck splint)
case "x$LINT" in
(xcppcheck|x*/cppcheck)
test -z "$LINT_OPTS" && LINT_OPTS="--enable=all"
;;
esac
AC_SUBST(LINT_OPTS)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PROG_LN_S version: 2 updated: 2010/08/14 18:25:37
dnl ------------
dnl Combine checks for "ln -s" and "ln -sf", updating $LN_S to include "-f"
dnl option if it is supported.
AC_DEFUN([CF_PROG_LN_S],[
AC_PROG_LN_S
AC_MSG_CHECKING(if $LN_S -f options work)
rm -f conf$$.src conf$$dst
echo >conf$$.dst
echo first >conf$$.src
if $LN_S -f conf$$.src conf$$.dst 2>/dev/null; then
cf_prog_ln_sf=yes
else
cf_prog_ln_sf=no
fi
rm -f conf$$.dst conf$$src
AC_MSG_RESULT($cf_prog_ln_sf)
test "$cf_prog_ln_sf" = yes && LN_S="$LN_S -f"
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_REGEX version: 12 updated: 2015/04/18 08:56:57
+dnl CF_REGEX version: 18 updated: 2021/01/01 16:53:59
dnl --------
dnl Attempt to determine if we've got one of the flavors of regular-expression
dnl code that we can support.
AC_DEFUN([CF_REGEX],
[
cf_regex_func=no
-
-cf_regex_libs="regex re"
-case $host_os in
+cf_regex_libs=
+case "$host_os" in
(mingw*)
- cf_regex_libs="gnurx $cf_regex_libs"
+ # -lsystre -ltre -lintl -liconv
+ AC_CHECK_LIB(systre,regcomp,[
+ AC_CHECK_LIB(iconv,libiconv_open,[CF_ADD_LIB(iconv)])
+ AC_CHECK_LIB(intl,libintl_gettext,[CF_ADD_LIB(intl)])
+ AC_CHECK_LIB(tre,tre_regcomp,[CF_ADD_LIB(tre)])
+ CF_ADD_LIB(systre)
+ cf_regex_func=regcomp
+ ],[
+ AC_CHECK_LIB(gnurx,regcomp,[
+ CF_ADD_LIB(gnurx)
+ cf_regex_func=regcomp])
+ ])
+ ;;
+(*)
+ cf_regex_libs="regex re"
+ AC_CHECK_FUNC(regcomp,[cf_regex_func=regcomp],[
+ for cf_regex_lib in $cf_regex_libs
+ do
+ AC_CHECK_LIB($cf_regex_lib,regcomp,[
+ CF_ADD_LIB($cf_regex_lib)
+ cf_regex_func=regcomp
+ break])
+ done
+ ])
;;
esac
-AC_CHECK_FUNC(regcomp,[cf_regex_func=regcomp],[
- for cf_regex_lib in $cf_regex_libs
- do
- AC_CHECK_LIB($cf_regex_lib,regcomp,[
- CF_ADD_LIB($cf_regex_lib)
- cf_regex_func=regcomp
- break])
- done
-])
-
if test "$cf_regex_func" = no ; then
AC_CHECK_FUNC(compile,[cf_regex_func=compile],[
AC_CHECK_LIB(gen,compile,[
CF_ADD_LIB(gen)
cf_regex_func=compile])])
fi
if test "$cf_regex_func" = no ; then
AC_MSG_WARN(cannot find regular expression library)
fi
AC_CACHE_CHECK(for regular-expression headers,cf_cv_regex_hdrs,[
cf_cv_regex_hdrs=no
-case $cf_regex_func in
+case "$cf_regex_func" in
(compile)
for cf_regex_hdr in regexp.h regexpr.h
do
AC_TRY_LINK([#include <$cf_regex_hdr>],[
char *p = compile("", "", "", 0);
int x = step("", "");
+ (void)p;
+ (void)x;
],[
cf_cv_regex_hdrs=$cf_regex_hdr
break
])
done
;;
(*)
for cf_regex_hdr in regex.h
do
AC_TRY_LINK([#include <sys/types.h>
#include <$cf_regex_hdr>],[
- regex_t *p;
+ regex_t *p = 0;
int x = regcomp(p, "", 0);
int y = regexec(p, "", 0, 0, 0);
+ (void)x;
+ (void)y;
regfree(p);
],[
cf_cv_regex_hdrs=$cf_regex_hdr
break
])
done
;;
esac
])
-case $cf_cv_regex_hdrs in
+case "$cf_cv_regex_hdrs" in
(no) AC_MSG_WARN(no regular expression header found) ;;
(regex.h) AC_DEFINE(HAVE_REGEX_H_FUNCS,1,[Define to 1 to include regex.h for regular expressions]) ;;
(regexp.h) AC_DEFINE(HAVE_REGEXP_H_FUNCS,1,[Define to 1 to include regexp.h for regular expressions]) ;;
(regexpr.h) AC_DEFINE(HAVE_REGEXPR_H_FUNCS,1,[Define to 1 to include regexpr.h for regular expressions]) ;;
esac
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_REMOVE_DEFINE version: 3 updated: 2010/01/09 11:05:50
dnl ----------------
dnl Remove all -U and -D options that refer to the given symbol from a list
dnl of C compiler options. This works around the problem that not all
dnl compilers process -U and -D options from left-to-right, so a -U option
dnl cannot be used to cancel the effect of a preceding -D option.
dnl
dnl $1 = target (which could be the same as the source variable)
dnl $2 = source (including '$')
dnl $3 = symbol to remove
define([CF_REMOVE_DEFINE],
[
$1=`echo "$2" | \
sed -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[[ ]]/ /g' \
-e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[$]//g'`
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_REMOVE_LIB version: 1 updated: 2007/02/17 14:11:52
dnl -------------
dnl Remove the given library from the symbol
dnl
dnl $1 = target (which could be the same as the source variable)
dnl $2 = source (including '$')
dnl $3 = library to remove
define([CF_REMOVE_LIB],
[
# remove $3 library from $2
$1=`echo "$2" | sed -e 's/-l$3[[ ]]//g' -e 's/-l$3[$]//'`
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_RESTORE_XTRA_FLAGS version: 1 updated: 2020/01/11 16:47:45
dnl ---------------------
dnl Restore flags saved in CF_SAVE_XTRA_FLAGS
dnl $1 = name of current macro
define([CF_RESTORE_XTRA_FLAGS],
[
LIBS="$cf_save_LIBS_$1"
CFLAGS="$cf_save_CFLAGS_$1"
CPPFLAGS="$cf_save_CPPFLAGS_$1"
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_RPATH_HACK version: 11 updated: 2013/09/01 13:02:00
+dnl CF_RPATH_HACK version: 13 updated: 2021/01/03 18:30:50
dnl -------------
AC_DEFUN([CF_RPATH_HACK],
-[
-AC_REQUIRE([CF_LD_RPATH_OPT])
+[AC_REQUIRE([AC_PROG_FGREP])dnl
+AC_REQUIRE([CF_LD_RPATH_OPT])dnl
+
AC_MSG_CHECKING(for updated LDFLAGS)
if test -n "$LD_RPATH_OPT" ; then
AC_MSG_RESULT(maybe)
AC_CHECK_PROGS(cf_ldd_prog,ldd,no)
cf_rpath_list="/usr/lib /lib"
if test "$cf_ldd_prog" != no
then
cf_rpath_oops=
AC_TRY_LINK([#include <stdio.h>],
[printf("Hello");],
- [cf_rpath_oops=`$cf_ldd_prog conftest$ac_exeext | fgrep ' not found' | sed -e 's% =>.*$%%' |sort | uniq`
- cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[[ ]]/%/%' -e 's%/[[^/]][[^/]]*$%%' |sort | uniq`])
+ [cf_rpath_oops=`"$cf_ldd_prog" "conftest$ac_exeext" | ${FGREP-fgrep} ' not found' | sed -e 's% =>.*$%%' |sort | uniq`
+ cf_rpath_list=`"$cf_ldd_prog" "conftest$ac_exeext" | ${FGREP-fgrep} / | sed -e 's%^.*[[ ]]/%/%' -e 's%/[[^/]][[^/]]*$%%' |sort | uniq`])
# If we passed the link-test, but get a "not found" on a given library,
# this could be due to inept reconfiguration of gcc to make it only
# partly honor /usr/local/lib (or whatever). Sometimes this behavior
# is intentional, e.g., installing gcc in /usr/bin and suppressing the
# /usr/local libraries.
if test -n "$cf_rpath_oops"
then
for cf_rpath_src in $cf_rpath_oops
do
for cf_rpath_dir in \
/usr/local \
/usr/pkg \
/opt/sfw
do
- if test -f $cf_rpath_dir/lib/$cf_rpath_src
+ if test -f "$cf_rpath_dir/lib/$cf_rpath_src"
then
CF_VERBOSE(...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src)
LDFLAGS="$LDFLAGS -L$cf_rpath_dir/lib"
break
fi
done
done
fi
fi
CF_VERBOSE(...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS)
CF_RPATH_HACK_2(LDFLAGS)
CF_RPATH_HACK_2(LIBS)
CF_VERBOSE(...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS)
else
AC_MSG_RESULT(no)
fi
AC_SUBST(EXTRA_LDFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_RPATH_HACK_2 version: 7 updated: 2015/04/12 15:39:00
+dnl CF_RPATH_HACK_2 version: 8 updated: 2021/01/01 13:31:04
dnl ---------------
dnl Do one set of substitutions for CF_RPATH_HACK, adding an rpath option to
dnl EXTRA_LDFLAGS for each -L option found.
dnl
dnl $cf_rpath_list contains a list of directories to ignore.
dnl
dnl $1 = variable name to update. The LDFLAGS variable should be the only one,
dnl but LIBS often has misplaced -L options.
AC_DEFUN([CF_RPATH_HACK_2],
[
CF_VERBOSE(...checking $1 [$]$1)
cf_rpath_dst=
for cf_rpath_src in [$]$1
do
- case $cf_rpath_src in
+ case "$cf_rpath_src" in
(-L*)
# check if this refers to a directory which we will ignore
cf_rpath_skip=no
if test -n "$cf_rpath_list"
then
for cf_rpath_item in $cf_rpath_list
do
if test "x$cf_rpath_src" = "x-L$cf_rpath_item"
then
cf_rpath_skip=yes
break
fi
done
fi
if test "$cf_rpath_skip" = no
then
# transform the option
if test "$LD_RPATH_OPT" = "-R " ; then
cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"`
else
cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"`
fi
# if we have not already added this, add it now
cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"`
if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS"
then
CF_VERBOSE(...Filter $cf_rpath_src ->$cf_rpath_tmp)
EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS"
fi
fi
;;
esac
cf_rpath_dst="$cf_rpath_dst $cf_rpath_src"
done
$1=$cf_rpath_dst
CF_VERBOSE(...checked $1 [$]$1)
AC_SUBST(EXTRA_LDFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SAVE_XTRA_FLAGS version: 1 updated: 2020/01/11 16:46:44
dnl ------------------
dnl Use this macro to save CFLAGS/CPPFLAGS/LIBS before checks against X headers
dnl and libraries which do not update those variables.
dnl
dnl $1 = name of current macro
define([CF_SAVE_XTRA_FLAGS],
[
cf_save_LIBS_$1="$LIBS"
cf_save_CFLAGS_$1="$CFLAGS"
cf_save_CPPFLAGS_$1="$CPPFLAGS"
LIBS="$LIBS ${X_PRE_LIBS} ${X_LIBS} ${X_EXTRA_LIBS}"
for cf_X_CFLAGS in $X_CFLAGS
do
case "x$cf_X_CFLAGS" in
x-[[IUD]]*)
CPPFLAGS="$CPPFLAGS $cf_X_CFLAGS"
;;
*)
CFLAGS="$CFLAGS $cf_X_CFLAGS"
;;
esac
done
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_SHARED_OPTS version: 93 updated: 2018/08/18 16:36:35
+dnl CF_SHARED_OPTS version: 105 updated: 2021/01/02 17:09:14
dnl --------------
dnl --------------
dnl Attempt to determine the appropriate CC/LD options for creating a shared
dnl library.
dnl
dnl Notes:
dnl a) ${LOCAL_LDFLAGS} is used to link executables that will run within
dnl the build-tree, i.e., by making use of the libraries that are compiled in
dnl $rel_builddir/lib We avoid compiling-in a $rel_builddir/lib path for the
dnl shared library since that can lead to unexpected results at runtime.
dnl b) ${LOCAL_LDFLAGS2} has the same intention but assumes that the shared
dnl libraries are compiled in ../../lib
dnl
dnl The variable 'cf_cv_do_symlinks' is used to control whether we configure
dnl to install symbolic links to the rel/abi versions of shared libraries.
dnl
dnl The variable 'cf_cv_shlib_version' controls whether we use the rel or abi
dnl version when making symbolic links.
dnl
dnl The variable 'cf_cv_shlib_version_infix' controls whether shared library
dnl version numbers are infix (ex: libncurses.<ver>.dylib) or postfix
dnl (ex: libncurses.so.<ver>).
dnl
dnl Some loaders leave 'so_locations' lying around. It's nice to clean up.
AC_DEFUN([CF_SHARED_OPTS],
[
AC_REQUIRE([CF_LD_RPATH_OPT])
RM_SHARED_OPTS=
LOCAL_LDFLAGS=
LOCAL_LDFLAGS2=
LD_SHARED_OPTS=
INSTALL_LIB="-m 644"
: ${rel_builddir:=.}
shlibdir=$libdir
AC_SUBST(shlibdir)
MAKE_DLLS="#"
AC_SUBST(MAKE_DLLS)
cf_cv_do_symlinks=no
cf_ld_rpath_opt=
test "$cf_cv_enable_rpath" = yes && cf_ld_rpath_opt="$LD_RPATH_OPT"
AC_MSG_CHECKING(if release/abi version should be used for shared libs)
AC_ARG_WITH(shlib-version,
[ --with-shlib-version=X Specify rel or abi version for shared libs],
[test -z "$withval" && withval=auto
- case $withval in
+ case "$withval" in
(yes)
cf_cv_shlib_version=auto
;;
(rel|abi|auto)
cf_cv_shlib_version=$withval
;;
(*)
AC_MSG_RESULT($withval)
AC_MSG_ERROR([option value must be one of: rel, abi, or auto])
;;
esac
],[cf_cv_shlib_version=auto])
AC_MSG_RESULT($cf_cv_shlib_version)
cf_cv_rm_so_locs=no
cf_try_cflags=
# Some less-capable ports of gcc support only -fpic
CC_SHARED_OPTS=
cf_try_fPIC=no
if test "$GCC" = yes
then
cf_try_fPIC=yes
else
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(*linux*) # e.g., PGI compiler
cf_try_fPIC=yes
;;
esac
fi
if test "$cf_try_fPIC" = yes
then
AC_MSG_CHECKING(which $CC option to use)
cf_save_CFLAGS="$CFLAGS"
for CC_SHARED_OPTS in -fPIC -fpic ''
do
CFLAGS="$cf_save_CFLAGS $CC_SHARED_OPTS"
AC_TRY_COMPILE([#include <stdio.h>],[int x = 1],[break],[])
done
AC_MSG_RESULT($CC_SHARED_OPTS)
CFLAGS="$cf_save_CFLAGS"
fi
cf_cv_shlib_version_infix=no
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(aix4.[3-9]*|aix[[5-7]]*)
if test "$GCC" = yes; then
CC_SHARED_OPTS='-Wl,-brtl'
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o [$]@'
else
CC_SHARED_OPTS='-brtl'
# as well as '-qpic=large -G' or perhaps "-bM:SRE -bnoentry -bexpall"
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o [$]@'
fi
;;
(beos*)
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -o $[@] -Xlinker -soname=`basename $[@]` -nostart -e 0'
;;
(cygwin*)
CC_SHARED_OPTS=
MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}'
RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a"
cf_cv_shlib_version=cygdll
cf_cv_shlib_version_infix=cygdll
shlibdir=$bindir
MAKE_DLLS=
cat >mk_shared_lib.sh <<-CF_EOF
#!$SHELL
SHARED_LIB=\[$]1
IMPORT_LIB=\`echo "\[$]1" | sed -e 's/cyg/lib/' -e 's/[[0-9]]*\.dll[$]/.dll.a/'\`
shift
cat <<-EOF
Linking shared library
** SHARED_LIB \[$]SHARED_LIB
** IMPORT_LIB \[$]IMPORT_LIB
EOF
exec \[$]* ${LDFLAGS} -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB}
CF_EOF
chmod +x mk_shared_lib.sh
;;
(msys*)
CC_SHARED_OPTS=
MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}'
RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a"
cf_cv_shlib_version=msysdll
cf_cv_shlib_version_infix=msysdll
shlibdir=$bindir
MAKE_DLLS=
cat >mk_shared_lib.sh <<-CF_EOF
#!$SHELL
SHARED_LIB=\[$]1
IMPORT_LIB=\`echo "\[$]1" | sed -e 's/msys-/lib/' -e 's/[[0-9]]*\.dll[$]/.dll.a/'\`
shift
cat <<-EOF
Linking shared library
** SHARED_LIB \[$]SHARED_LIB
** IMPORT_LIB \[$]IMPORT_LIB
EOF
exec \[$]* ${LDFLAGS} -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB}
CF_EOF
chmod +x mk_shared_lib.sh
;;
(darwin*)
cf_try_cflags="no-cpp-precomp"
CC_SHARED_OPTS="-dynamic"
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $[@]` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $[@]'
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=abi
cf_cv_shlib_version_infix=yes
AC_CACHE_CHECK([if ld -search_paths_first works], cf_cv_ldflags_search_paths_first, [
cf_save_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
AC_TRY_LINK(, [int i;], cf_cv_ldflags_search_paths_first=yes, cf_cv_ldflags_search_paths_first=no)
LDFLAGS=$cf_save_LDFLAGS])
- if test $cf_cv_ldflags_search_paths_first = yes; then
+ if test "$cf_cv_ldflags_search_paths_first" = yes; then
LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
fi
;;
(hpux[[7-8]]*)
# HP-UX 8.07 ld lacks "+b" option used for libdir search-list
if test "$GCC" != yes; then
CC_SHARED_OPTS='+Z'
fi
MK_SHARED_LIB='${LD} ${LDFLAGS} -b -o $[@]'
INSTALL_LIB="-m 555"
;;
(hpux*)
# (tested with gcc 2.7.2 -- I don't have c89)
if test "$GCC" = yes; then
LD_SHARED_OPTS='-Xlinker +b -Xlinker ${libdir}'
else
CC_SHARED_OPTS='+Z'
LD_SHARED_OPTS='-Wl,+b,${libdir}'
fi
MK_SHARED_LIB='${LD} ${LDFLAGS} +b ${libdir} -b -o $[@]'
# HP-UX shared libraries must be executable, and should be
# readonly to exploit a quirk in the memory manager.
INSTALL_LIB="-m 555"
;;
(interix*)
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
if test "$cf_cv_shlib_version" = rel; then
cf_shared_soname='`basename $[@] .${REL_VERSION}`.${ABI_VERSION}'
else
cf_shared_soname='`basename $[@]`'
fi
CC_SHARED_OPTS=
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o $[@]'
;;
(irix*)
if test "$cf_cv_enable_rpath" = yes ; then
EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
fi
# tested with IRIX 5.2 and 'cc'.
if test "$GCC" != yes; then
CC_SHARED_OPTS='-KPIC'
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -rdata_shared -soname `basename $[@]` -o $[@]'
else
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,`basename $[@]` -o $[@]'
fi
cf_cv_rm_so_locs=yes
;;
(linux*|gnu*|k*bsd*-gnu)
if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then
LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
fi
if test "$cf_cv_enable_rpath" = yes ; then
EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
fi
CF_SHARED_SONAME
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]'
;;
+ (mingw*msvc*)
+ cf_cv_shlib_version=msvcdll
+ cf_cv_shlib_version_infix=msvcdll
+ shlibdir=$bindir
+ MAKE_DLLS=
+ if test "$DFT_LWR_MODEL" = "shared" ; then
+ LOCAL_LDFLAGS="-link -dll"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ EXTRA_LDFLAGS="-link -dll $EXTRA_LDFLAGS"
+ fi
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ ${LD} [$]{CFLAGS}'
+ RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.lib"
+ cat >mk_shared_lib.sh <<-CF_EOF
+ #!$SHELL
+ SHARED_LIB=\[$]1
+ IMPORT_LIB=\`echo "\[$]1" | sed -e 's/[[0-9]]*\.dll[$]/.dll.lib/'\`
+ shift
+ my_ld=\[$]1
+ shift
+ cat <<-EOF
+ Linking shared library
+ ** SHARED LIB \$SHARED_LIB
+ ** IMPORT_LIB \$IMPORT_LIB
+EOF
+ args=\$(echo \[$]* | sed -E "s#-l(\w*)#\1.dll.lib#g" | sed -E "s#-L(\w*)#-LIBPATH:\1#g")
+ exec \$my_ld -DLL -IMPLIB:"\${IMPORT_LIB}" -OUT:"\${SHARED_LIB}" ${LDFLAGS} \$args
+ mv "\${IMPORT_LIB}" "\${IMPORT_LIB}"
+CF_EOF
+ chmod +x mk_shared_lib.sh
+ cat >mk_prog.sh <<-CF_EOF
+ #!$SHELL
+ shift
+ # Ignore first argument (compiler) and use LD (link.exe) unconditionally
+ LD="[$]LD"
+ clopts=()
+ ldopts=("/subsystem:console")
+ libs=()
+ isdll=0
+ while test \[$]# -gt 0; do
+ case "\[$]1" in
+ -link)
+ # ignore -link argument
+ ;;
+ -M[[TD]] | -M[[TD]]d)
+ # ignore runtime-library option
+ ;;
+ -dll)
+ isdll=1
+ ;;
+ -W* | -w*)
+ # ignore warnings
+ ;;
+ -D*)
+ clopts+=("\[$]1")
+ ;;
+ -I*)
+ clopts+=("\[$]1")
+ ;;
+ -l*)
+ libs+=("\`echo \"\[$]1\" | sed \"s/^-l//\"\`")
+ ;;
+ -L*)
+ ldopts+=("\`echo \"\[$]1\" | sed \"s/^-L/-LIBPATH:/\"\`")
+ ;;
+ *.obj | *.o)
+ ldopts+=("\[$]1")
+ ;;
+ -Wl,*)
+ for linkarg in \`echo '\[$]1' | sed -e 's/-Wl,//' -e 's/,/ /'\`; do
+ ldopts+=("\[$]{linkarg}")
+ done
+ ;;
+ *.lib)
+ ldopts+=("\[$]1")
+ ;;
+ -o)
+ shift
+ ldopts+=("-out:\[$]1")
+ ;;
+ *)
+ clopts+=("\[$]1")
+ ldopts+=("\[$]1")
+ ;;
+ esac
+ shift
+ done
+ if [[ "\$isdll" -ne 0 ]]; then
+ for lib in \[$]{libs[[*]]}; do
+ ldopts+=("\[$]lib.dll.lib")
+ done
+ else
+ for lib in \[$]{libs[[*]]}; do
+ ldopts+=("\[$]lib.lib")
+ done
+ fi
+ cat <<-EOF
+ Creating program
+ ** ld options: "\[$]{ldopts[[@]]}"
+EOF
+ exec \[$]LD \[$]{ldopts[[@]]}
+CF_EOF
+ chmod +x mk_prog.sh
+ LINK_PROGS="$SHELL ${rel_builddir}/mk_prog.sh"
+ LINK_TESTS="$SHELL ${rel_builddir}/mk_prog.sh"
+ ;;
(mingw*)
cf_cv_shlib_version=mingw
cf_cv_shlib_version_infix=mingw
shlibdir=$bindir
MAKE_DLLS=
if test "$DFT_LWR_MODEL" = "shared" ; then
LOCAL_LDFLAGS="-Wl,--enable-auto-import"
LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
EXTRA_LDFLAGS="-Wl,--enable-auto-import $EXTRA_LDFLAGS"
fi
CC_SHARED_OPTS=
MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}'
RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a"
cat >mk_shared_lib.sh <<-CF_EOF
#!$SHELL
SHARED_LIB=\[$]1
IMPORT_LIB=\`echo "\[$]1" | sed -e 's/[[0-9]]*\.dll[$]/.dll.a/'\`
shift
cat <<-EOF
Linking shared library
** SHARED_LIB \[$]SHARED_LIB
** IMPORT_LIB \[$]IMPORT_LIB
EOF
exec \[$]* ${LDFLAGS} -shared -Wl,--enable-auto-import,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB}
CF_EOF
chmod +x mk_shared_lib.sh
;;
(openbsd[[2-9]].*|mirbsd*)
if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then
LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
fi
if test "$cf_cv_enable_rpath" = yes ; then
EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
fi
CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
CF_SHARED_SONAME
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]'
;;
+ (nskJ*)
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='${LD} -Wshared -Weld=-export_all -o $[@]'
+ ;;
+ (nskL*)
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='${LD} -Wshared -Wxld=-export_all -o $[@]'
+ ;;
(nto-qnx*|openbsd*|freebsd[[12]].*)
CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
MK_SHARED_LIB='${LD} ${LDFLAGS} -Bshareable -o $[@]'
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
;;
(dragonfly*|freebsd*)
CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then
LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)"
LOCAL_LDFLAGS2="${cf_ld_rpath_opt}\${RPATH_LIST} $LOCAL_LDFLAGS"
EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
fi
CF_SHARED_SONAME
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]'
;;
(netbsd*)
CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then
LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)"
LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
if test "$cf_cv_shlib_version" = auto; then
if test -f /usr/libexec/ld.elf_so; then
cf_cv_shlib_version=abi
else
cf_cv_shlib_version=rel
fi
fi
CF_SHARED_SONAME
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $[@]'
else
- MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -Wl,-shared -Wl,-Bshareable -o $[@]'
+ MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -o $[@]'
fi
;;
(osf*|mls+*)
# tested with OSF/1 V3.2 and 'cc'
# tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't
# link with shared libs).
MK_SHARED_LIB='${LD} ${LDFLAGS} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $[@]`'
- case $host_os in
+ case "$host_os" in
(osf4*)
MK_SHARED_LIB="${MK_SHARED_LIB} -msym"
;;
esac
MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $[@]'
if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then
LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
fi
cf_cv_rm_so_locs=yes
;;
(sco3.2v5*) # also uw2* and UW7: hops 13-Apr-98
# tested with osr5.0.5
if test "$GCC" != yes; then
CC_SHARED_OPTS='-belf -KPIC'
fi
MK_SHARED_LIB='${LD} ${LDFLAGS} -dy -G -h `basename $[@] .${REL_VERSION}`.${ABI_VERSION} -o [$]@'
if test "$cf_cv_enable_rpath" = yes ; then
# only way is to set LD_RUN_PATH but no switch for it
RUN_PATH=$libdir
fi
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
LINK_PROGS='LD_RUN_PATH=${libdir}'
LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib'
;;
(sunos4*)
# tested with SunOS 4.1.1 and gcc 2.7.0
if test "$GCC" != yes; then
CC_SHARED_OPTS='-KPIC'
fi
MK_SHARED_LIB='${LD} ${LDFLAGS} -assert pure-text -o $[@]'
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
;;
(solaris2*)
# tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2
# tested with SunOS 5.10 (solaris 10) and gcc 3.4.3
if test "$DFT_LWR_MODEL" = "shared" ; then
LOCAL_LDFLAGS="-R \$(LOCAL_LIBDIR):\${libdir}"
LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
fi
if test "$cf_cv_enable_rpath" = yes ; then
EXTRA_LDFLAGS="-R \${libdir} $EXTRA_LDFLAGS"
fi
CF_SHARED_SONAME
if test "$GCC" != yes; then
cf_save_CFLAGS="$CFLAGS"
for cf_shared_opts in -xcode=pic32 -xcode=pic13 -KPIC -Kpic -O
do
CFLAGS="$cf_shared_opts $cf_save_CFLAGS"
- AC_TRY_COMPILE([#include <stdio.h>],[printf("Hello\n");],[break])
+ AC_TRY_COMPILE([#include <stdio.h>],[printf("Hello\\n");],[break])
done
CFLAGS="$cf_save_CFLAGS"
CC_SHARED_OPTS=$cf_shared_opts
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dy -G -h '$cf_cv_shared_soname' -o $[@]'
else
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -dy -G -h '$cf_cv_shared_soname' -o $[@]'
fi
;;
(sysv5uw7*|unix_sv*)
# tested with UnixWare 7.1.0 (gcc 2.95.2 and cc)
if test "$GCC" != yes; then
CC_SHARED_OPTS='-KPIC'
fi
MK_SHARED_LIB='${LD} ${LDFLAGS} -d y -G -o [$]@'
;;
(*)
CC_SHARED_OPTS='unknown'
MK_SHARED_LIB='echo unknown'
;;
esac
# This works if the last tokens in $MK_SHARED_LIB are the -o target.
case "$cf_cv_shlib_version" in
(rel|abi)
case "$MK_SHARED_LIB" in
(*'-o $[@]')
test "$cf_cv_do_symlinks" = no && cf_cv_do_symlinks=yes
;;
(*)
AC_MSG_WARN(ignored --with-shlib-version)
;;
esac
;;
esac
if test -n "$cf_try_cflags"
then
cat > conftest.$ac_ext <<EOF
#line __oline__ "${as_me:-configure}"
#include <stdio.h>
int main(int argc, char *argv[[]])
{
- printf("hello\n");
+ printf("hello\\n");
return (argv[[argc-1]] == 0) ;
}
EOF
cf_save_CFLAGS="$CFLAGS"
for cf_opt in $cf_try_cflags
do
CFLAGS="$cf_save_CFLAGS -$cf_opt"
AC_MSG_CHECKING(if CFLAGS option -$cf_opt works)
if AC_TRY_EVAL(ac_compile); then
AC_MSG_RESULT(yes)
cf_save_CFLAGS="$CFLAGS"
else
AC_MSG_RESULT(no)
fi
done
CFLAGS="$cf_save_CFLAGS"
fi
# RPATH_LIST is a colon-separated list of directories
test -n "$cf_ld_rpath_opt" && MK_SHARED_LIB="$MK_SHARED_LIB $cf_ld_rpath_opt\${RPATH_LIST}"
test -z "$RPATH_LIST" && RPATH_LIST="\${libdir}"
- test $cf_cv_rm_so_locs = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations"
+ test "$cf_cv_rm_so_locs" = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations"
CF_VERBOSE(CC_SHARED_OPTS: $CC_SHARED_OPTS)
CF_VERBOSE(MK_SHARED_LIB: $MK_SHARED_LIB)
AC_SUBST(CC_SHARED_OPTS)
AC_SUBST(LD_RPATH_OPT)
AC_SUBST(LD_SHARED_OPTS)
AC_SUBST(MK_SHARED_LIB)
AC_SUBST(RM_SHARED_OPTS)
AC_SUBST(LINK_PROGS)
AC_SUBST(LINK_TESTS)
AC_SUBST(EXTRA_LDFLAGS)
AC_SUBST(LOCAL_LDFLAGS)
AC_SUBST(LOCAL_LDFLAGS2)
AC_SUBST(INSTALL_LIB)
AC_SUBST(RPATH_LIST)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SHARED_SONAME version: 3 updated: 2008/09/08 18:34:43
dnl ----------------
dnl utility macro for CF_SHARED_OPTS, constructs "$cf_cv_shared_soname" for
dnl substitution into MK_SHARED_LIB string for the "-soname" (or similar)
dnl option.
dnl
dnl $1 is the default that should be used for "$cf_cv_shlib_version".
dnl If missing, use "rel".
define([CF_SHARED_SONAME],
[
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=ifelse($1,,rel,$1)
if test "$cf_cv_shlib_version" = rel; then
cf_cv_shared_soname='`basename $[@] .${REL_VERSION}`.${ABI_VERSION}'
else
cf_cv_shared_soname='`basename $[@]`'
fi
])
dnl ---------------------------------------------------------------------------
-dnl CF_SIGWINCH version: 2 updated: 2019/03/23 19:54:44
+dnl CF_SIGWINCH version: 6 updated: 2021/01/01 13:31:04
dnl -----------
dnl Use this macro after CF_XOPEN_SOURCE, but do not require it (not all
dnl programs need this test).
dnl
dnl This is really a Mac OS X 10.4.3 workaround. Defining _POSIX_C_SOURCE
dnl forces SIGWINCH to be undefined (breaks xterm, ncurses). Oddly, the struct
dnl winsize declaration is left alone - we may revisit this if Apple choose to
dnl break that part of the interface as well.
AC_DEFUN([CF_SIGWINCH],
[
AC_CACHE_CHECK(if SIGWINCH is defined,cf_cv_define_sigwinch,[
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/signal.h>
-],[int x = SIGWINCH],
+],[int x = SIGWINCH; (void)x],
[cf_cv_define_sigwinch=yes],
[AC_TRY_COMPILE([
#undef _XOPEN_SOURCE
#undef _POSIX_SOURCE
#undef _POSIX_C_SOURCE
#include <sys/types.h>
#include <sys/signal.h>
-],[int x = SIGWINCH],
+],[int x = SIGWINCH; (void)x],
[cf_cv_define_sigwinch=maybe],
[cf_cv_define_sigwinch=no])
])
])
if test "$cf_cv_define_sigwinch" = maybe ; then
AC_CACHE_CHECK(for actual SIGWINCH definition,cf_cv_fixup_sigwinch,[
cf_cv_fixup_sigwinch=unknown
cf_sigwinch=32
-while test $cf_sigwinch != 1
+while test "$cf_sigwinch" != 1
do
AC_TRY_COMPILE([
#undef _XOPEN_SOURCE
#undef _POSIX_SOURCE
#undef _POSIX_C_SOURCE
#include <sys/types.h>
#include <sys/signal.h>
],[
#if SIGWINCH != $cf_sigwinch
make an error
#endif
-int x = SIGWINCH],
+int x = SIGWINCH; (void)x],
[cf_cv_fixup_sigwinch=$cf_sigwinch
break])
-cf_sigwinch=`expr $cf_sigwinch - 1`
+cf_sigwinch="`expr "$cf_sigwinch" - 1`"
done
])
if test "$cf_cv_fixup_sigwinch" != unknown ; then
CPPFLAGS="$CPPFLAGS -DSIGWINCH=$cf_cv_fixup_sigwinch"
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_SIG_ATOMIC_T version: 4 updated: 2020/01/18 12:30:44
+dnl CF_SIG_ATOMIC_T version: 5 updated: 2020/03/10 18:53:47
dnl ---------------
dnl signal handler, but there are some gcc dependencies in that recommendation.
dnl Try anyway.
AC_DEFUN([CF_SIG_ATOMIC_T],
[
AC_MSG_CHECKING(for signal global datatype)
AC_CACHE_VAL(cf_cv_sig_atomic_t,[
for cf_type in \
"volatile sig_atomic_t" \
"sig_atomic_t" \
"int"
do
AC_TRY_COMPILE([
#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
extern $cf_type x;
$cf_type x;
static void handler(int sig)
{
+ (void)sig;
x = 5;
}],
[signal(SIGINT, handler);
x = 1],
[cf_cv_sig_atomic_t=$cf_type],
[cf_cv_sig_atomic_t=no])
test "$cf_cv_sig_atomic_t" != no && break
done
])
AC_MSG_RESULT($cf_cv_sig_atomic_t)
test "$cf_cv_sig_atomic_t" != no && AC_DEFINE_UNQUOTED(SIG_ATOMIC_T, $cf_cv_sig_atomic_t,[Define to signal global datatype])
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_SIZECHANGE version: 14 updated: 2018/06/20 20:23:13
+dnl CF_SIZECHANGE version: 17 updated: 2021/01/01 13:31:04
dnl -------------
dnl Check for definitions & structures needed for window size-changing
dnl
dnl https://stackoverflow.com/questions/18878141/difference-between-structures-ttysize-and-winsize/50769952#50769952
AC_DEFUN([CF_SIZECHANGE],
[
AC_REQUIRE([CF_STRUCT_TERMIOS])
AC_CACHE_CHECK(declaration of size-change, cf_cv_sizechange,[
cf_cv_sizechange=unknown
cf_save_CPPFLAGS="$CPPFLAGS"
for cf_opts in "" "NEED_PTEM_H"
do
CPPFLAGS="$cf_save_CPPFLAGS"
if test -n "$cf_opts"
then
CF_APPEND_TEXT(CPPFLAGS,-D$cf_opts)
fi
AC_TRY_COMPILE([#include <sys/types.h>
#ifdef HAVE_TERMIOS_H
#include <termios.h>
#else
#ifdef HAVE_TERMIO_H
#include <termio.h>
#endif
#endif
#ifdef NEED_PTEM_H
/* This is a workaround for SCO: they neglected to define struct winsize in
* termios.h -- it's only in termio.h and ptem.h
*/
#include <sys/stream.h>
#include <sys/ptem.h>
#endif
#ifdef HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
#endif
],[
#ifdef TIOCGSIZE
struct ttysize win; /* SunOS 3.0... */
- int y = win.ts_lines;
- int x = win.ts_cols;
+ int y = win.ts_lines = 2;
+ int x = win.ts_cols = 1;
+ (void)y;
+ (void)x;
#else
#ifdef TIOCGWINSZ
struct winsize win; /* everything else */
- int y = win.ws_row;
- int x = win.ws_col;
+ int y = win.ws_row = 2;
+ int x = win.ws_col = 1;
+ (void)y;
+ (void)x;
#else
no TIOCGSIZE or TIOCGWINSZ
#endif /* TIOCGWINSZ */
#endif /* TIOCGSIZE */
],
[cf_cv_sizechange=yes],
[cf_cv_sizechange=no])
CPPFLAGS="$cf_save_CPPFLAGS"
if test "$cf_cv_sizechange" = yes ; then
echo "size-change succeeded ($cf_opts)" >&AC_FD_CC
test -n "$cf_opts" && cf_cv_sizechange="$cf_opts"
break
fi
done
])
if test "$cf_cv_sizechange" != no ; then
AC_DEFINE(HAVE_SIZECHANGE,1,[Define to 1 if sizechange declarations are provided])
- case $cf_cv_sizechange in
+ case "$cf_cv_sizechange" in
(NEED*)
AC_DEFINE_UNQUOTED($cf_cv_sizechange )
;;
esac
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_SRC_MODULES version: 31 updated: 2019/09/21 18:08:42
+dnl CF_SRC_MODULES version: 33 updated: 2021/01/01 13:31:04
dnl --------------
dnl For each parameter, test if the source-directory exists, and if it contains
dnl a 'modules' file. If so, add to the list $cf_cv_src_modules which we'll
dnl use in CF_LIB_RULES.
dnl
dnl This uses the configured value to make the lists SRC_SUBDIRS and
dnl SUB_MAKEFILES which are used in the makefile-generation scheme.
AC_DEFUN([CF_SRC_MODULES],
[
AC_REQUIRE([CF_CHECK_GNAT_VERSION])
AC_MSG_CHECKING(for src modules)
# dependencies and linker-arguments for test-programs
TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${LIB_NAME}${DFT_DEP_SUFFIX} $TEST_DEPS"
TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${LIB_NAME}${DFT_DEP_SUFFIX} $TEST_DEP2"
if test "$DFT_LWR_MODEL" = "libtool"; then
TEST_ARGS="${TEST_DEPS}"
TEST_ARG2="${TEST_DEP2}"
else
TEST_ARGS="-l${LIB_NAME}${USE_ARG_SUFFIX} $TEST_ARGS"
TEST_ARG2="-l${LIB_NAME}${USE_ARG_SUFFIX} $TEST_ARG2"
fi
PC_MODULES_TO_MAKE="ncurses${USE_ARG_SUFFIX}"
cf_cv_src_modules=
for cf_dir in $1
do
- if test -f $srcdir/$cf_dir/modules; then
+ if test -f "$srcdir/$cf_dir/modules" ; then
# We may/may not have tack in the distribution, though the
# makefile is.
- if test $cf_dir = tack ; then
+ if test "$cf_dir" = tack ; then
if test "x$cf_with_tack" != "xyes"; then
continue
fi
fi
if test -z "$cf_cv_src_modules"; then
cf_cv_src_modules=$cf_dir
else
cf_cv_src_modules="$cf_cv_src_modules $cf_dir"
fi
# Make the ncurses_cfg.h file record the library interface files as
# well. These are header files that are the same name as their
# directory. Ncurses is the only library that does not follow
# that pattern.
- if test $cf_dir = tack ; then
+ if test "$cf_dir" = tack ; then
continue
- elif test -f $srcdir/${cf_dir}/${cf_dir}.h; then
+ elif test -f "$srcdir/${cf_dir}/${cf_dir}.h" ; then
CF_UPPER(cf_have_include,$cf_dir)
AC_DEFINE_UNQUOTED(HAVE_${cf_have_include}_H)
AC_DEFINE_UNQUOTED(HAVE_LIB${cf_have_include})
- TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${cf_dir}${DFT_DEP_SUFFIX} $TEST_DEPS"
- TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${cf_dir}${DFT_DEP_SUFFIX} $TEST_DEP2"
+ CF_MAP_LIB_BASENAME(TEST_ROOT,$cf_dir)
+ TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${TEST_ROOT}${DFT_DEP_SUFFIX} $TEST_DEPS"
+ TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${TEST_ROOT}${DFT_DEP_SUFFIX} $TEST_DEP2"
if test "$DFT_LWR_MODEL" = "libtool"; then
TEST_ARGS="${TEST_DEPS}"
TEST_ARG2="${TEST_DEP2}"
else
- TEST_ARGS="-l${cf_dir}${USE_ARG_SUFFIX} $TEST_ARGS"
- TEST_ARG2="-l${cf_dir}${USE_ARG_SUFFIX} $TEST_ARG2"
+ TEST_ARGS="-l${TEST_ROOT}${USE_ARG_SUFFIX} $TEST_ARGS"
+ TEST_ARG2="-l${TEST_ROOT}${USE_ARG_SUFFIX} $TEST_ARG2"
fi
PC_MODULES_TO_MAKE="${PC_MODULES_TO_MAKE} ${cf_dir}${USE_ARG_SUFFIX}"
fi
fi
done
AC_MSG_RESULT($cf_cv_src_modules)
TEST_ARGS="-L${LIB_DIR} $TEST_ARGS"
TEST_ARG2="-L${LIB_2ND} $TEST_ARG2"
AC_SUBST(TEST_ARGS)
AC_SUBST(TEST_DEPS)
AC_SUBST(TEST_ARG2)
AC_SUBST(TEST_DEP2)
SRC_SUBDIRS=
if test "x$cf_with_manpages" != xno ; then
SRC_SUBDIRS="$SRC_SUBDIRS man"
fi
SRC_SUBDIRS="$SRC_SUBDIRS include"
for cf_dir in $cf_cv_src_modules
do
SRC_SUBDIRS="$SRC_SUBDIRS $cf_dir"
done
if test "x$cf_with_tests" != "xno" ; then
SRC_SUBDIRS="$SRC_SUBDIRS test"
fi
# always make this, to install the ncurses-config script
SRC_SUBDIRS="$SRC_SUBDIRS misc"
if test "$cf_with_cxx_binding" != no; then
PC_MODULES_TO_MAKE="${PC_MODULES_TO_MAKE} ncurses++${USE_ARG_SUFFIX}"
SRC_SUBDIRS="$SRC_SUBDIRS c++"
fi
test "x$with_termlib" != xno && PC_MODULES_TO_MAKE="$PC_MODULES_TO_MAKE $TINFO_ARG_SUFFIX"
test "x$with_ticlib" != xno && PC_MODULES_TO_MAKE="$PC_MODULES_TO_MAKE $TICS_ARG_SUFFIX"
AC_SUBST(PC_MODULES_TO_MAKE)
ADA_SUBDIRS=
-if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = xyes && test -f $srcdir/Ada95/Makefile.in; then
+if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = xyes && test -f "$srcdir/Ada95/Makefile.in" ; then
SRC_SUBDIRS="$SRC_SUBDIRS Ada95"
ADA_SUBDIRS="gen src"
if test "x$cf_with_tests" != "xno" ; then
ADA_SUBDIRS="$ADA_SUBDIRS samples"
fi
fi
SUB_MAKEFILES=
for cf_dir in $SRC_SUBDIRS
do
SUB_MAKEFILES="$SUB_MAKEFILES $cf_dir/Makefile"
done
if test -n "$ADA_SUBDIRS"; then
for cf_dir in $ADA_SUBDIRS
do
SUB_MAKEFILES="$SUB_MAKEFILES Ada95/$cf_dir/Makefile"
done
AC_SUBST(ADA_SUBDIRS)
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_STDCPP_LIBRARY version: 11 updated: 2015/10/17 19:03:33
+dnl CF_STDCPP_LIBRARY version: 12 updated: 2021/01/01 13:31:04
dnl -----------------
dnl Check for -lstdc++, which is GNU's standard C++ library.
dnl If $CXXLIBS is set, add that to the libraries used for test-linking.
dnl If -lstdc++ was not already added to $LIBS or $CXXLIBS, and is needed,
dnl add it to $CXXLIBS.
AC_DEFUN([CF_STDCPP_LIBRARY],
[
if test -n "$GXX" ; then
cf_save="$LIBS"
LIBS="$LIBS $CXXLIBS"
AC_MSG_CHECKING(if we already have C++ library)
AC_TRY_LINK([
#include <iostream>],[
std::cout << "Hello World!" << std::endl;],
[cf_have_libstdcpp=yes],
[cf_have_libstdcpp=no])
AC_MSG_RESULT($cf_have_libstdcpp)
LIBS="$cf_save"
- if test $cf_have_libstdcpp != yes
+ if test "$cf_have_libstdcpp" != yes
then
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(os2*)
if test -z "`g++ -dM -E - < /dev/null | grep __KLIBC__`"; then
cf_stdcpp_libname=stdcpp
else
cf_stdcpp_libname=stdc++
fi
;;
(*)
cf_stdcpp_libname=stdc++
;;
esac
AC_CACHE_CHECK(for library $cf_stdcpp_libname,cf_cv_libstdcpp,[
cf_save="$LIBS"
LIBS="$LIBS $CXXLIBS"
CF_ADD_LIB($cf_stdcpp_libname)
AC_TRY_LINK([
#include <iostream>],[
std::cout << "Hello World!" << std::endl;],
[cf_cv_libstdcpp=yes],
[cf_cv_libstdcpp=no])
LIBS="$cf_save"
])
test "$cf_cv_libstdcpp" = yes && { CF_ADD_LIB($cf_stdcpp_libname,CXXLIBS) }
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_STRIP_G_OPT version: 3 updated: 2002/12/21 19:25:52
+dnl CF_STRIP_G_OPT version: 4 updated: 2021/01/02 09:31:20
dnl --------------
dnl Remove "-g" option from the compiler options
AC_DEFUN([CF_STRIP_G_OPT],
-[$1=`echo ${$1} | sed -e 's%-g %%' -e 's%-g$%%'`])dnl
+[$1=`echo "${$1}" | CF__SED_TRIMBLANKS(-e 's%-g %%' -e 's%-g$%%')`])dnl
dnl ---------------------------------------------------------------------------
dnl CF_STRUCT_SIGACTION version: 5 updated: 2012/10/06 17:56:13
dnl -------------------
dnl Check if we need _POSIX_SOURCE defined to use struct sigaction. We'll only
dnl do this if we've found the sigaction function.
AC_DEFUN([CF_STRUCT_SIGACTION],[
AC_REQUIRE([CF_XOPEN_SOURCE])
if test "$ac_cv_func_sigaction" = yes; then
AC_MSG_CHECKING(whether sigaction needs _POSIX_SOURCE)
AC_TRY_COMPILE([
#include <sys/types.h>
#include <signal.h>],
[struct sigaction act],
[sigact_bad=no],
[
AC_TRY_COMPILE([
#define _POSIX_SOURCE
#include <sys/types.h>
#include <signal.h>],
[struct sigaction act],
[sigact_bad=yes
AC_DEFINE(_POSIX_SOURCE,1,[Define to 1 if we must define _POSIX_SOURCE])],
[sigact_bad=unknown])])
AC_MSG_RESULT($sigact_bad)
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_STRUCT_TERMIOS version: 9 updated: 2018/06/08 21:57:23
+dnl CF_STRUCT_TERMIOS version: 11 updated: 2020/03/19 20:46:13
dnl -----------------
dnl Some machines require _POSIX_SOURCE to completely define struct termios.
AC_DEFUN([CF_STRUCT_TERMIOS],[
AC_REQUIRE([CF_XOPEN_SOURCE])
AC_CHECK_HEADERS( \
termio.h \
termios.h \
unistd.h \
sys/ioctl.h \
sys/termio.h \
)
if test "$ac_cv_header_termios_h" = yes ; then
case "$CFLAGS $CPPFLAGS" in
(*-D_POSIX_SOURCE*)
termios_bad=dunno ;;
(*) termios_bad=maybe ;;
esac
if test "$termios_bad" = maybe ; then
AC_MSG_CHECKING(whether termios.h needs _POSIX_SOURCE)
AC_TRY_COMPILE([#include <termios.h>],
- [struct termios foo; int x = foo.c_iflag],
+ [struct termios foo; int x = foo.c_iflag = 1; (void)x],
termios_bad=no, [
AC_TRY_COMPILE([
#define _POSIX_SOURCE
#include <termios.h>],
- [struct termios foo; int x = foo.c_iflag],
+ [struct termios foo; int x = foo.c_iflag = 2; (void)x],
termios_bad=unknown,
termios_bad=yes AC_DEFINE(_POSIX_SOURCE,1,[Define to 1 if we must define _POSIX_SOURCE]))
])
AC_MSG_RESULT($termios_bad)
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SUBDIR_PATH version: 7 updated: 2014/12/04 04:33:06
dnl --------------
dnl Construct a search-list for a nonstandard header/lib-file
dnl $1 = the variable to return as result
dnl $2 = the package name
dnl $3 = the subdirectory, e.g., bin, include or lib
AC_DEFUN([CF_SUBDIR_PATH],
[
$1=
CF_ADD_SUBDIR_PATH($1,$2,$3,$prefix,NONE)
for cf_subdir_prefix in \
/usr \
/usr/local \
/usr/pkg \
/opt \
/opt/local \
[$]HOME
do
CF_ADD_SUBDIR_PATH($1,$2,$3,$cf_subdir_prefix,$prefix)
done
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SUBST_IF version: 2 updated: 2006/06/17 12:33:03
dnl -----------
dnl Shorthand macro for substituting things that the user may override
dnl with an environment variable.
dnl
dnl $1 = condition to pass to "test"
dnl $2 = environment variable
dnl $3 = value if the test succeeds
dnl $4 = value if the test fails
AC_DEFUN([CF_SUBST_IF],
[
if test $1 ; then
$2=$3
ifelse($4,,,[else
$2=$4])
fi
AC_SUBST($2)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_SUBST_NCURSES_VERSION version: 8 updated: 2006/09/16 11:40:59
+dnl CF_SUBST_NCURSES_VERSION version: 10 updated: 2021/01/04 18:48:01
dnl ------------------------
dnl Get the version-number for use in shared-library naming, etc.
AC_DEFUN([CF_SUBST_NCURSES_VERSION],
-[
-AC_REQUIRE([CF_PROG_EGREP])
-NCURSES_MAJOR="`$ac_cv_prog_egrep '^NCURSES_MAJOR[[ ]]*=' $srcdir/dist.mk | sed -e 's/^[[^0-9]]*//'`"
-NCURSES_MINOR="`$ac_cv_prog_egrep '^NCURSES_MINOR[[ ]]*=' $srcdir/dist.mk | sed -e 's/^[[^0-9]]*//'`"
-NCURSES_PATCH="`$ac_cv_prog_egrep '^NCURSES_PATCH[[ ]]*=' $srcdir/dist.mk | sed -e 's/^[[^0-9]]*//'`"
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+
+NCURSES_MAJOR="`${EGREP-egrep} '^NCURSES_MAJOR[[ ]]*=' "$srcdir/dist.mk" | sed -e 's/^[[^0-9]]*//'`"
+NCURSES_MINOR="`${EGREP-egrep} '^NCURSES_MINOR[[ ]]*=' "$srcdir/dist.mk" | sed -e 's/^[[^0-9]]*//'`"
+NCURSES_PATCH="`${EGREP-egrep} '^NCURSES_PATCH[[ ]]*=' "$srcdir/dist.mk" | sed -e 's/^[[^0-9]]*//'`"
cf_cv_abi_version=${NCURSES_MAJOR}
cf_cv_rel_version=${NCURSES_MAJOR}.${NCURSES_MINOR}
dnl Show the computed version, for logging
cf_cv_timestamp=`date`
AC_MSG_RESULT(Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version ($cf_cv_timestamp))
dnl We need these values in the generated headers
AC_SUBST(NCURSES_MAJOR)
AC_SUBST(NCURSES_MINOR)
AC_SUBST(NCURSES_PATCH)
dnl We need these values in the generated makefiles
AC_SUBST(cf_cv_rel_version)
AC_SUBST(cf_cv_abi_version)
AC_SUBST(cf_cv_builtin_bool)
AC_SUBST(cf_cv_header_stdbool_h)
AC_SUBST(cf_cv_type_of_bool)dnl
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SYS_TIME_SELECT version: 6 updated: 2015/04/18 08:56:57
dnl ------------------
dnl Check if we can include <sys/time.h> with <sys/select.h>; this breaks on
dnl older SCO configurations.
AC_DEFUN([CF_SYS_TIME_SELECT],
[
AC_MSG_CHECKING(if sys/time.h works with sys/select.h)
AC_CACHE_VAL(cf_cv_sys_time_select,[
AC_TRY_COMPILE([
#include <sys/types.h>
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
],[],[cf_cv_sys_time_select=yes],
[cf_cv_sys_time_select=no])
])
AC_MSG_RESULT($cf_cv_sys_time_select)
test "$cf_cv_sys_time_select" = yes && AC_DEFINE(HAVE_SYS_TIME_SELECT,1,[Define to 1 if we can include <sys/time.h> with <sys/select.h>])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_TOP_BUILDDIR version: 2 updated: 2013/07/27 17:38:32
dnl ---------------
dnl Define a top_builddir symbol, for applications that need an absolute path.
AC_DEFUN([CF_TOP_BUILDDIR],
[
top_builddir=ifelse($1,,`pwd`,$1)
AC_SUBST(top_builddir)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_TRY_PKG_CONFIG version: 5 updated: 2013/07/06 21:27:06
+dnl CF_TRY_PKG_CONFIG version: 6 updated: 2020/12/31 10:54:15
dnl -----------------
dnl This is a simple wrapper to use for pkg-config, for libraries which may be
dnl available in that form.
dnl
-dnl $1 = package name
+dnl $1 = package name, which may be a shell variable
dnl $2 = extra logic to use, if any, after updating CFLAGS and LIBS
dnl $3 = logic to use if pkg-config does not have the package
AC_DEFUN([CF_TRY_PKG_CONFIG],[
AC_REQUIRE([CF_PKG_CONFIG])
-if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists $1; then
+if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "$1"; then
CF_VERBOSE(found package $1)
- cf_pkgconfig_incs="`$PKG_CONFIG --cflags $1 2>/dev/null`"
- cf_pkgconfig_libs="`$PKG_CONFIG --libs $1 2>/dev/null`"
+ cf_pkgconfig_incs="`$PKG_CONFIG --cflags "$1" 2>/dev/null`"
+ cf_pkgconfig_libs="`$PKG_CONFIG --libs "$1" 2>/dev/null`"
CF_VERBOSE(package $1 CFLAGS: $cf_pkgconfig_incs)
CF_VERBOSE(package $1 LIBS: $cf_pkgconfig_libs)
CF_ADD_CFLAGS($cf_pkgconfig_incs)
CF_ADD_LIBS($cf_pkgconfig_libs)
ifelse([$2],,:,[$2])
else
cf_pkgconfig_incs=
cf_pkgconfig_libs=
ifelse([$3],,:,[$3])
fi
])
dnl ---------------------------------------------------------------------------
dnl CF_TRY_XOPEN_SOURCE version: 2 updated: 2018/06/20 20:23:13
dnl -------------------
dnl If _XOPEN_SOURCE is not defined in the compile environment, check if we
dnl can define it successfully.
AC_DEFUN([CF_TRY_XOPEN_SOURCE],[
AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[
AC_TRY_COMPILE([
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
],[
#ifndef _XOPEN_SOURCE
make an error
#endif],
[cf_cv_xopen_source=no],
[cf_save="$CPPFLAGS"
CF_APPEND_TEXT(CPPFLAGS,-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE)
AC_TRY_COMPILE([
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
],[
#ifdef _XOPEN_SOURCE
make an error
#endif],
[cf_cv_xopen_source=no],
[cf_cv_xopen_source=$cf_XOPEN_SOURCE])
CPPFLAGS="$cf_save"
])
])
if test "$cf_cv_xopen_source" != no ; then
CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE)
CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE)
cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source"
CF_ADD_CFLAGS($cf_temp_xopen_source)
fi
])
dnl ---------------------------------------------------------------------------
dnl CF_TYPEOF_CHTYPE version: 10 updated: 2017/01/21 11:06:25
dnl ----------------
dnl Determine the type we should use for chtype (and attr_t, which is treated
dnl as the same thing). We want around 32 bits, so on most machines want a
dnl long, but on newer 64-bit machines, probably want an int. If we're using
dnl wide characters, we have to have a type compatible with that, as well.
AC_DEFUN([CF_TYPEOF_CHTYPE],
[
AC_MSG_CHECKING([for type of chtype])
AC_CACHE_VAL(cf_cv_typeof_chtype,[
AC_TRY_RUN([
#define WANT_BITS 31
#include <stdio.h>
int main(void)
{
FILE *fp = fopen("cf_test.out", "w");
if (fp != 0) {
char *result = "long";
if (sizeof(unsigned long) > sizeof(unsigned int)) {
int n;
unsigned int x, y;
for (n = 0; n < WANT_BITS; n++) {
x = (1 << n);
y = (x >> n);
if (y != 1 || x == 0) {
x = 0;
break;
}
}
/*
* If x is nonzero, an int is big enough for the bits
* that we want.
*/
result = (x != 0) ? "int" : "long";
}
fputs(result, fp);
fclose(fp);
}
${cf_cv_main_return:-return}(0);
}
],
[cf_cv_typeof_chtype=`cat cf_test.out`],
[cf_cv_typeof_chtype=long],
[cf_cv_typeof_chtype=long])
rm -f cf_test.out
])
AC_MSG_RESULT($cf_cv_typeof_chtype)
AC_SUBST(cf_cv_typeof_chtype)
AC_DEFINE_UNQUOTED(TYPEOF_CHTYPE,$cf_cv_typeof_chtype,[Define to actual type if needed for chtype])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_TYPE_SIGACTION version: 4 updated: 2012/10/06 17:56:13
dnl -----------------
dnl
AC_DEFUN([CF_TYPE_SIGACTION],
[
AC_MSG_CHECKING([for type sigaction_t])
AC_CACHE_VAL(cf_cv_type_sigaction,[
AC_TRY_COMPILE([
#include <signal.h>],
[sigaction_t x],
[cf_cv_type_sigaction=yes],
[cf_cv_type_sigaction=no])])
AC_MSG_RESULT($cf_cv_type_sigaction)
test "$cf_cv_type_sigaction" = yes && AC_DEFINE(HAVE_TYPE_SIGACTION,1,[Define to 1 if we have the sigaction_t type])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_UNSIGNED_LITERALS version: 2 updated: 1998/02/07 22:10:16
dnl --------------------
dnl Test if the compiler supports 'U' and 'L' suffixes. Only old compilers
dnl won't, but they're still there.
AC_DEFUN([CF_UNSIGNED_LITERALS],
[
AC_MSG_CHECKING([if unsigned literals are legal])
AC_CACHE_VAL(cf_cv_unsigned_literals,[
AC_TRY_COMPILE([],[long x = 1L + 1UL + 1U + 1],
[cf_cv_unsigned_literals=yes],
[cf_cv_unsigned_literals=no])
])
AC_MSG_RESULT($cf_cv_unsigned_literals)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59
dnl --------
dnl Make an uppercase version of a variable
dnl $1=uppercase($2)
AC_DEFUN([CF_UPPER],
[
$1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_UTF8_LIB version: 8 updated: 2012/10/06 08:57:51
dnl -----------
dnl Check for multibyte support, and if not found, utf8 compatibility library
AC_DEFUN([CF_UTF8_LIB],
[
AC_CACHE_CHECK(for multibyte character support,cf_cv_utf8_lib,[
cf_save_LIBS="$LIBS"
AC_TRY_LINK([
#include <stdlib.h>],[putwc(0,0);],
[cf_cv_utf8_lib=yes],
[CF_FIND_LINKAGE([
#include <libutf8.h>],[putwc(0,0);],utf8,
[cf_cv_utf8_lib=add-on],
[cf_cv_utf8_lib=no])
])])
# HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between
# ncurses/ncursesw:
if test "$cf_cv_utf8_lib" = "add-on" ; then
AC_DEFINE(HAVE_LIBUTF8_H,1,[Define to 1 if we should include libutf8.h])
CF_ADD_INCDIR($cf_cv_header_path_utf8)
CF_ADD_LIBDIR($cf_cv_library_path_utf8)
CF_ADD_LIBS($cf_cv_library_file_utf8)
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_VA_COPY version: 6 updated: 2018/12/04 18:14:25
dnl ----------
dnl check for va_copy, part of stdarg.h starting with ISO C 1999.
dnl Also, workaround for glibc's __va_copy, by checking for both.
dnl Finally, try to accommodate pre-ISO C 1999 headers.
AC_DEFUN([CF_VA_COPY],[
AC_CACHE_CHECK(for va_copy, cf_cv_have_va_copy,[
AC_TRY_LINK([
#include <stdarg.h>
],[
static va_list dst;
static va_list src;
va_copy(dst, src)],
cf_cv_have_va_copy=yes,
cf_cv_have_va_copy=no)])
if test "$cf_cv_have_va_copy" = yes;
then
AC_DEFINE(HAVE_VA_COPY,1,[Define to 1 if we have va_copy])
else # !cf_cv_have_va_copy
AC_CACHE_CHECK(for __va_copy, cf_cv_have___va_copy,[
AC_TRY_LINK([
#include <stdarg.h>
],[
static va_list dst;
static va_list src;
__va_copy(dst, src)],
cf_cv_have___va_copy=yes,
cf_cv_have___va_copy=no)])
if test "$cf_cv_have___va_copy" = yes
then
AC_DEFINE(HAVE___VA_COPY,1,[Define to 1 if we have __va_copy])
else # !cf_cv_have___va_copy
AC_CACHE_CHECK(for __builtin_va_copy, cf_cv_have___builtin_va_copy,[
AC_TRY_LINK([
#include <stdarg.h>
],[
static va_list dst;
static va_list src;
__builtin_va_copy(dst, src)],
cf_cv_have___builtin_va_copy=yes,
cf_cv_have___builtin_va_copy=no)])
test "$cf_cv_have___builtin_va_copy" = yes &&
AC_DEFINE(HAVE___BUILTIN_VA_COPY,1,[Define to 1 if we have __builtin_va_copy])
fi # cf_cv_have___va_copy
fi # cf_cv_have_va_copy
case "${cf_cv_have_va_copy}${cf_cv_have___va_copy}${cf_cv_have___builtin_va_copy}" in
(*yes*)
;;
(*)
AC_CACHE_CHECK(if we can simply copy va_list, cf_cv_pointer_va_list,[
AC_TRY_LINK([
#include <stdarg.h>
],[
va_list dst;
va_list src;
dst = src],
cf_cv_pointer_va_list=yes,
cf_cv_pointer_va_list=no)])
if test "$cf_cv_pointer_va_list" = no
then
AC_CACHE_CHECK(if we can copy va_list indirectly, cf_cv_array_va_list,[
AC_TRY_LINK([
#include <stdarg.h>
],[
va_list dst;
va_list src;
*dst = *src],
cf_cv_array_va_list=yes,
cf_cv_array_va_list=no)])
test "$cf_cv_array_va_list" = yes && AC_DEFINE(ARRAY_VA_LIST,1,[Define to 1 if we can copy va_list indirectly])
fi
;;
esac
])
dnl ---------------------------------------------------------------------------
dnl CF_VERBOSE version: 3 updated: 2007/07/29 09:55:12
dnl ----------
dnl Use AC_VERBOSE w/o the warnings
AC_DEFUN([CF_VERBOSE],
[test -n "$verbose" && echo " $1" 1>&AC_FD_MSG
CF_MSG_LOG([$1])
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_VERSION_INFO version: 7 updated: 2015/04/17 21:13:04
+dnl CF_VERSION_INFO version: 8 updated: 2021/01/01 13:31:04
dnl ---------------
dnl Define several useful symbols derived from the VERSION file. A separate
dnl file is preferred to embedding the version numbers in various scripts.
dnl (automake is a textbook-example of why the latter is a bad idea, but there
dnl are others).
dnl
dnl The file contents are:
dnl libtool-version release-version patch-version
dnl or
dnl release-version
dnl where
dnl libtool-version (see ?) consists of 3 integers separated by '.'
dnl release-version consists of a major version and minor version
dnl separated by '.', optionally followed by a patch-version
dnl separated by '-'. The minor version need not be an
dnl integer (but it is preferred).
dnl patch-version is an integer in the form yyyymmdd, so ifdef's and
dnl scripts can easily compare versions.
dnl
dnl If libtool is used, the first form is required, since CF_WITH_LIBTOOL
dnl simply extracts the first field using 'cut -f1'.
dnl
dnl Optional parameters:
dnl $1 = internal name for package
dnl $2 = external name for package
AC_DEFUN([CF_VERSION_INFO],
[
-if test -f $srcdir/VERSION ; then
+if test -f "$srcdir/VERSION" ; then
AC_MSG_CHECKING(for package version)
# if there are not enough fields, cut returns the last one...
- cf_field1=`sed -e '2,$d' $srcdir/VERSION|cut -f1`
- cf_field2=`sed -e '2,$d' $srcdir/VERSION|cut -f2`
- cf_field3=`sed -e '2,$d' $srcdir/VERSION|cut -f3`
+ cf_field1=`sed -e '2,$d' "$srcdir/VERSION" |cut -f1`
+ cf_field2=`sed -e '2,$d' "$srcdir/VERSION" |cut -f2`
+ cf_field3=`sed -e '2,$d' "$srcdir/VERSION" |cut -f3`
# this is how CF_BUNDLED_INTL uses $VERSION:
VERSION="$cf_field1"
VERSION_MAJOR=`echo "$cf_field2" | sed -e 's/\..*//'`
test -z "$VERSION_MAJOR" && AC_MSG_ERROR(missing major-version)
VERSION_MINOR=`echo "$cf_field2" | sed -e 's/^[[^.]]*\.//' -e 's/-.*//'`
test -z "$VERSION_MINOR" && AC_MSG_ERROR(missing minor-version)
AC_MSG_RESULT(${VERSION_MAJOR}.${VERSION_MINOR})
AC_MSG_CHECKING(for package patch date)
VERSION_PATCH=`echo "$cf_field3" | sed -e 's/^[[^-]]*-//'`
case .$VERSION_PATCH in
(.)
AC_MSG_ERROR(missing patch-date $VERSION_PATCH)
;;
(.[[0-9]][[0-9]][[0-9]][[0-9]][[0-9]][[0-9]][[0-9]][[0-9]])
;;
(*)
AC_MSG_ERROR(illegal patch-date $VERSION_PATCH)
;;
esac
AC_MSG_RESULT($VERSION_PATCH)
else
AC_MSG_ERROR(did not find $srcdir/VERSION)
fi
# show the actual data that we have for versions:
CF_VERBOSE(ABI VERSION $VERSION)
CF_VERBOSE(VERSION_MAJOR $VERSION_MAJOR)
CF_VERBOSE(VERSION_MINOR $VERSION_MINOR)
CF_VERBOSE(VERSION_PATCH $VERSION_PATCH)
AC_SUBST(VERSION)
AC_SUBST(VERSION_MAJOR)
AC_SUBST(VERSION_MINOR)
AC_SUBST(VERSION_PATCH)
dnl if a package name is given, define its corresponding version info. We
dnl need the package name to ensure that the defined symbols are unique.
ifelse($1,,,[
cf_PACKAGE=$1
PACKAGE=ifelse($2,,$1,$2)
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE",[Define to the package-name])
AC_SUBST(PACKAGE)
CF_UPPER(cf_PACKAGE,$cf_PACKAGE)
AC_DEFINE_UNQUOTED(${cf_PACKAGE}_VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}")
AC_DEFINE_UNQUOTED(${cf_PACKAGE}_PATCHDATE,${VERSION_PATCH})
])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WCHAR_TYPE version: 4 updated: 2012/10/06 16:39:58
dnl -------------
dnl Check if type wide-character type $1 is declared, and if so, which header
dnl file is needed. The second parameter is used to set a shell variable when
dnl the type is not found. The first parameter sets a shell variable for the
dnl opposite sense.
AC_DEFUN([CF_WCHAR_TYPE],
[
# This is needed on Tru64 5.0 to declare $1
AC_CACHE_CHECK(if we must include wchar.h to declare $1,cf_cv_$1,[
AC_TRY_COMPILE([
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#ifdef HAVE_LIBUTF8_H
#include <libutf8.h>
#endif],
[$1 state],
[cf_cv_$1=no],
[AC_TRY_COMPILE([
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include <wchar.h>
#ifdef HAVE_LIBUTF8_H
#include <libutf8.h>
#endif],
[$1 value],
[cf_cv_$1=yes],
[cf_cv_$1=unknown])])])
if test "$cf_cv_$1" = yes ; then
AC_DEFINE(NEED_WCHAR_H,1,[Define to 1 if we must include wchar.h])
NEED_WCHAR_H=1
fi
ifelse([$2],,,[
# if we do not find $1 in either place, use substitution to provide a fallback.
if test "$cf_cv_$1" = unknown ; then
$2=1
fi
])
ifelse($3,,,[
# if we find $1 in either place, use substitution to provide a fallback.
if test "$cf_cv_$1" != unknown ; then
$3=1
fi
])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WEAK_SYMBOLS version: 1 updated: 2008/08/16 19:18:06
dnl ---------------
dnl Check for compiler-support for weak symbols.
dnl This works with "recent" gcc.
AC_DEFUN([CF_WEAK_SYMBOLS],[
AC_CACHE_CHECK(if $CC supports weak symbols,cf_cv_weak_symbols,[
AC_TRY_COMPILE([
#include <stdio.h>],
[
#if defined(__GNUC__)
# if defined __USE_ISOC99
# define _cat_pragma(exp) _Pragma(#exp)
# define _weak_pragma(exp) _cat_pragma(weak name)
# else
# define _weak_pragma(exp)
# endif
# define _declare(name) __extension__ extern __typeof__(name) name
# define weak_symbol(name) _weak_pragma(name) _declare(name) __attribute__((weak))
#endif
weak_symbol(fopen);
],[cf_cv_weak_symbols=yes],[cf_cv_weak_symbols=no])
])
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_WITH_ABI_VERSION version: 3 updated: 2015/06/06 16:10:11
+dnl CF_WITH_ABI_VERSION version: 4 updated: 2021/01/01 13:31:04
dnl -------------------
dnl Allow library's ABI to be overridden. Generally this happens when a
dnl packager has incremented the ABI past that used in the original package,
dnl and wishes to keep doing this.
dnl
dnl $1 is the package name, if any, to derive a corresponding {package}_ABI
dnl symbol.
AC_DEFUN([CF_WITH_ABI_VERSION],[
test -z "$cf_cv_abi_version" && cf_cv_abi_version=0
AC_ARG_WITH(abi-version,
[ --with-abi-version=XXX override derived ABI version],[
if test "x$cf_cv_abi_version" != "x$withval"
then
AC_MSG_WARN(overriding ABI version $cf_cv_abi_version to $withval)
- case $cf_cv_rel_version in
+ case "$cf_cv_rel_version" in
(5.*)
cf_cv_rel_version=$withval.0
;;
(6.*)
cf_cv_rel_version=$withval.9 # FIXME: should be 10 as of 6.0 release
;;
esac
fi
cf_cv_abi_version=$withval])
CF_NUMBER_SYNTAX($cf_cv_abi_version,ABI version)
ifelse($1,,,[
$1_ABI=$cf_cv_abi_version
])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_ADA_COMPILER version: 2 updated: 2010/06/26 17:35:58
dnl --------------------
dnl Command-line option to specify the Ada95 compiler.
AC_DEFUN([CF_WITH_ADA_COMPILER],[
AC_MSG_CHECKING(for ada-compiler)
AC_ARG_WITH(ada-compiler,
[ --with-ada-compiler=CMD specify Ada95 compiler command (default gnatmake)],
[cf_ada_compiler=$withval],
[cf_ada_compiler=gnatmake])
AC_SUBST(cf_ada_compiler)
AC_MSG_RESULT($cf_ada_compiler)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_ADA_INCLUDE version: 2 updated: 2010/06/26 17:35:58
dnl -------------------
dnl Command-line option to specify where Ada includes will install.
AC_DEFUN([CF_WITH_ADA_INCLUDE],[
AC_MSG_CHECKING(for ada-include)
CF_WITH_PATH(ada-include,
[ --with-ada-include=DIR Ada includes are in DIR],
ADA_INCLUDE,
PREFIX/share/ada/adainclude,
[$]prefix/share/ada/adainclude)
AC_SUBST(ADA_INCLUDE)
AC_MSG_RESULT($ADA_INCLUDE)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_ADA_LIBNAME version: 1 updated: 2019/09/07 18:59:41
dnl -------------------
dnl CF_WITH_ADA_LIBNAME
dnl -------------------
dnl Command-line option to specify how to name the resulting Ada library.
dnl $1 = default value
AC_DEFUN([CF_WITH_ADA_LIBNAME],[
AC_MSG_CHECKING(for ada-libname)
AC_ARG_WITH(ada-libname,
[ --with-ada-libname=XXX override default Ada library-name],
ADA_LIBNAME=[$]withval,
ADA_LIBNAME=$1)
case "x$ADA_LIBNAME" in
(x|xyes|xno)
ADA_LIBNAME=$1
;;
esac
AC_SUBST(ADA_LIBNAME)
AC_MSG_RESULT($ADA_LIBNAME)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_ADA_OBJECTS version: 2 updated: 2010/06/26 17:35:58
dnl -------------------
dnl Command-line option to specify where Ada objects will install.
AC_DEFUN([CF_WITH_ADA_OBJECTS],[
AC_MSG_CHECKING(for ada-objects)
CF_WITH_PATH(ada-objects,
[ --with-ada-objects=DIR Ada objects are in DIR],
ADA_OBJECTS,
PREFIX/lib/ada/adalib,
[$]prefix/lib/ada/adalib)
AC_SUBST(ADA_OBJECTS)
AC_MSG_RESULT($ADA_OBJECTS)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_ADA_SHAREDLIB version: 5 updated: 2018/07/21 19:10:35
dnl ---------------------
dnl Command-line option to specify if an Ada95 shared-library should be built,
dnl and optionally what its soname should be.
AC_DEFUN([CF_WITH_ADA_SHAREDLIB],[
AC_REQUIRE([CF_GNAT_PROJECTS])
AC_MSG_CHECKING(if an Ada95 shared-library should be built)
AC_ARG_WITH(ada-sharedlib,
[ --with-ada-sharedlib=soname build shared-library (requires GNAT projects)],
[with_ada_sharedlib=$withval],
[with_ada_sharedlib=no])
AC_MSG_RESULT($with_ada_sharedlib)
if test "x$with_ada_sharedlib" != xno
then
if test "x$cf_gnat_projects" != xyes
then
AC_MSG_WARN(disabling shared-library since GNAT projects are not supported)
with_ada_sharedlib=no
fi
fi
ADA_SHAREDLIB='lib$(LIB_NAME).so.1'
MAKE_ADA_SHAREDLIB="#"
if test "x$with_ada_sharedlib" != xno
then
MAKE_ADA_SHAREDLIB=
if test "x$with_ada_sharedlib" != xyes
then
ADA_SHAREDLIB="$with_ada_sharedlib"
fi
fi
AC_SUBST(ADA_SHAREDLIB)
AC_SUBST(MAKE_ADA_SHAREDLIB)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_DBMALLOC version: 7 updated: 2010/06/21 17:26:47
dnl ----------------
dnl Configure-option for dbmalloc. The optional parameter is used to override
dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
AC_DEFUN([CF_WITH_DBMALLOC],[
CF_NO_LEAKS_OPTION(dbmalloc,
[ --with-dbmalloc test: use Conor Cahill's dbmalloc library],
[USE_DBMALLOC])
if test "$with_dbmalloc" = yes ; then
AC_CHECK_HEADER(dbmalloc.h,
[AC_CHECK_LIB(dbmalloc,[debug_malloc]ifelse([$1],,[],[,$1]))])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_DMALLOC version: 7 updated: 2010/06/21 17:26:47
dnl ---------------
dnl Configure-option for dmalloc. The optional parameter is used to override
dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
AC_DEFUN([CF_WITH_DMALLOC],[
CF_NO_LEAKS_OPTION(dmalloc,
[ --with-dmalloc test: use Gray Watson's dmalloc library],
[USE_DMALLOC])
if test "$with_dmalloc" = yes ; then
AC_CHECK_HEADER(dmalloc.h,
[AC_CHECK_LIB(dmalloc,[dmalloc_debug]ifelse([$1],,[],[,$1]))])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_EXPORT_SYMS version: 3 updated: 2014/12/20 19:16:08
dnl -------------------
dnl Use this with libtool to specify the list of symbols that may be exported.
dnl The input file contains one symbol per line; comments work with "#".
dnl
dnl $1 = basename of the ".sym" file (default $PACKAGE)
AC_DEFUN([CF_WITH_EXPORT_SYMS],
[
AC_MSG_CHECKING(if exported-symbols file should be used)
AC_ARG_WITH(export-syms,
[ --with-export-syms=XXX limit exported symbols using libtool],
[with_export_syms=$withval],
[with_export_syms=no])
if test "x$with_export_syms" = xyes
then
with_export_syms='${top_srcdir}/package/ifelse($1,,${PACKAGE},[$1]).sym'
AC_SUBST(PACKAGE)
fi
AC_MSG_RESULT($with_export_syms)
if test "x$with_export_syms" != xno
then
EXPORT_SYMS="-export-symbols $with_export_syms"
AC_SUBST(EXPORT_SYMS)
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_GPM version: 10 updated: 2017/04/29 18:32:18
dnl -----------
dnl
dnl The option parameter (if neither yes/no) is assumed to be the name of
dnl the gpm library, e.g., for dynamic loading.
AC_DEFUN([CF_WITH_GPM],
[
AC_MSG_CHECKING(if you want to link with the GPM mouse library)
AC_ARG_WITH(gpm,
[ --with-gpm use Alessandro Rubini's GPM library],
[with_gpm=$withval],
[with_gpm=maybe])
AC_MSG_RESULT($with_gpm)
if test "$with_gpm" != no ; then
AC_CHECK_HEADER(gpm.h,[
AC_DEFINE(HAVE_GPM_H,1,[Define to 1 if we have gpm.h header])
if test "$with_gpm" != yes && test "$with_gpm" != maybe ; then
CF_VERBOSE(assuming we really have GPM library)
AC_DEFINE(HAVE_LIBGPM,1,[Define to 1 if we have the gpm library])
with_gpm=yes
else
AC_CHECK_LIB(gpm,Gpm_Open,[with_gpm=yes],[
if test "$with_gpm" = maybe; then
AC_MSG_WARN(Cannot link with GPM library)
with_gpm=no
else
AC_MSG_ERROR(Cannot link with GPM library)
fi
])
fi
],[
test "$with_gpm" != maybe && AC_MSG_WARN(Cannot find GPM header)
with_gpm=no
])
fi
])
dnl ---------------------------------------------------------------------------
-dnl CF_WITH_LIBTOOL version: 35 updated: 2017/08/12 07:58:51
+dnl CF_WITH_LIBTOOL version: 36 updated: 2021/01/01 13:31:04
dnl ---------------
dnl Provide a configure option to incorporate libtool. Define several useful
dnl symbols for the makefile rules.
dnl
dnl The reference to AC_PROG_LIBTOOL does not normally work, since it uses
dnl macros from libtool.m4 which is in the aclocal directory of automake.
dnl Following is a simple script which turns on the AC_PROG_LIBTOOL macro.
dnl But that still does not work properly since the macro is expanded outside
dnl the CF_WITH_LIBTOOL macro:
dnl
dnl #!/bin/sh
dnl ACLOCAL=`aclocal --print-ac-dir`
dnl if test -z "$ACLOCAL" ; then
dnl echo cannot find aclocal directory
dnl exit 1
dnl elif test ! -f $ACLOCAL/libtool.m4 ; then
dnl echo cannot find libtool.m4 file
dnl exit 1
dnl fi
dnl
dnl LOCAL=aclocal.m4
dnl ORIG=aclocal.m4.orig
dnl
dnl trap "mv $ORIG $LOCAL" 0 1 2 3 15
dnl rm -f $ORIG
dnl mv $LOCAL $ORIG
dnl
dnl # sed the LIBTOOL= assignment to omit the current directory?
dnl sed -e 's/^LIBTOOL=.*/LIBTOOL=${LIBTOOL:-libtool}/' $ACLOCAL/libtool.m4 >>$LOCAL
dnl cat $ORIG >>$LOCAL
dnl
dnl autoconf-257 $*
dnl
AC_DEFUN([CF_WITH_LIBTOOL],
[
AC_REQUIRE([CF_DISABLE_LIBTOOL_VERSION])
ifdef([AC_PROG_LIBTOOL],,[
LIBTOOL=
])
# common library maintenance symbols that are convenient for libtool scripts:
LIB_CREATE='${AR} -cr'
LIB_OBJECT='${OBJECTS}'
LIB_SUFFIX=.a
LIB_PREP="$RANLIB"
# symbols used to prop libtool up to enable it to determine what it should be
# doing:
LIB_CLEAN=
LIB_COMPILE=
LIB_LINK='${CC}'
LIB_INSTALL=
LIB_UNINSTALL=
AC_MSG_CHECKING(if you want to build libraries with libtool)
AC_ARG_WITH(libtool,
[ --with-libtool generate libraries with libtool],
[with_libtool=$withval],
[with_libtool=no])
AC_MSG_RESULT($with_libtool)
if test "$with_libtool" != "no"; then
ifdef([AC_PROG_LIBTOOL],[
# missing_content_AC_PROG_LIBTOOL{{
AC_PROG_LIBTOOL
# missing_content_AC_PROG_LIBTOOL}}
],[
if test "$with_libtool" != "yes" ; then
CF_PATH_SYNTAX(with_libtool)
LIBTOOL=$with_libtool
else
AC_CHECK_TOOLS(LIBTOOL,[libtool glibtool],none)
CF_LIBTOOL_VERSION
if test -z "$cf_cv_libtool_version" && test "$LIBTOOL" = libtool
then
CF_FORGET_TOOL(LIBTOOL)
AC_CHECK_TOOLS(LIBTOOL,[glibtool],none)
CF_LIBTOOL_VERSION
fi
fi
if test -z "$LIBTOOL" ; then
AC_MSG_ERROR(Cannot find libtool)
fi
])dnl
LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${libdir} ${LIBTOOL_VERSION} `cut -f1 ${top_srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} $(LIBS) -o'
LIB_OBJECT='${OBJECTS:.o=.lo}'
LIB_SUFFIX=.la
LIB_CLEAN='${LIBTOOL} --mode=clean'
LIB_COMPILE='${LIBTOOL} --mode=compile'
LIB_LINK='${LIBTOOL} --mode=link ${CC} ${LIBTOOL_OPTS}'
LIB_INSTALL='${LIBTOOL} --mode=install'
LIB_UNINSTALL='${LIBTOOL} --mode=uninstall'
LIB_PREP=:
CF_CHECK_LIBTOOL_VERSION
# special hack to add -no-undefined (which libtool should do for itself)
LT_UNDEF=
case "$cf_cv_system_name" in
(cygwin*|msys*|mingw32*|os2*|uwin*|aix[[4-7]])
LT_UNDEF=-no-undefined
;;
esac
AC_SUBST([LT_UNDEF])
# special hack to add --tag option for C++ compiler
- case $cf_cv_libtool_version in
+ case "$cf_cv_libtool_version" in
(1.[[5-9]]*|[[2-9]].[[0-9.a-z]]*)
LIBTOOL_CXX="$LIBTOOL --tag=CXX"
LIBTOOL="$LIBTOOL --tag=CC"
;;
(*)
LIBTOOL_CXX="$LIBTOOL"
;;
esac
else
LIBTOOL=""
LIBTOOL_CXX=""
fi
test -z "$LIBTOOL" && ECHO_LT=
AC_SUBST(LIBTOOL)
AC_SUBST(LIBTOOL_CXX)
AC_SUBST(LIBTOOL_OPTS)
AC_SUBST(LIB_CREATE)
AC_SUBST(LIB_OBJECT)
AC_SUBST(LIB_SUFFIX)
AC_SUBST(LIB_PREP)
AC_SUBST(LIB_CLEAN)
AC_SUBST(LIB_COMPILE)
AC_SUBST(LIB_LINK)
AC_SUBST(LIB_INSTALL)
AC_SUBST(LIB_UNINSTALL)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_LIBTOOL_OPTS version: 4 updated: 2015/04/17 21:13:04
dnl --------------------
dnl Allow user to pass additional libtool options into the library creation
dnl and link steps. The main use for this is to do something like
dnl ./configure --with-libtool-opts=-static
dnl to get the same behavior as automake-flavored
dnl ./configure --enable-static
AC_DEFUN([CF_WITH_LIBTOOL_OPTS],[
AC_MSG_CHECKING(for additional libtool options)
AC_ARG_WITH(libtool-opts,
[ --with-libtool-opts=XXX specify additional libtool options],
[with_libtool_opts=$withval],
[with_libtool_opts=no])
AC_MSG_RESULT($with_libtool_opts)
case .$with_libtool_opts in
(.yes|.no|.)
;;
(*)
LIBTOOL_OPTS="$LIBTOOL_OPTS $with_libtool_opts"
;;
esac
AC_SUBST(LIBTOOL_OPTS)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_WITH_LIB_PREFIX version: 1 updated: 2012/01/21 19:28:10
+dnl CF_WITH_LIB_BASENAME version: 1 updated: 2020/03/07 20:05:14
+dnl --------------------
+dnl Allow for overriding the basename of a library, i.e., the part to which
+dnl prefixes/suffixes are attached.
+dnl
+dnl $1 = variable to set
+dnl $2 = option name
+dnl $3 = default basename for library, if omitted use $2
+AC_DEFUN([CF_WITH_LIB_BASENAME],
+[
+AC_MSG_CHECKING(for desired basename for $2 library)
+AC_ARG_WITH($2-libname,
+ [ --with-$2-libname=XXX override ifelse($3,,$2,$3) basename of library],
+ [with_lib_basename=$withval],
+ [with_lib_basename=ifelse($3,,$2,$3)])
+$1="$with_lib_basename"
+
+case "x[$]$1" in
+(x|xno|xnone|xyes)
+ $1=ifelse($3,,$2,$3)
+ ;;
+(*)
+ ;;
+esac
+
+AC_MSG_RESULT([$]$1)
+AC_SUBST($1)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_WITH_LIB_PREFIX version: 2 updated: 2021/01/01 16:53:59
dnl ------------------
dnl Allow the library-prefix to be overridden. OS/2 EMX originally had no
dnl "lib" prefix, e.g., because it used the dll naming convention.
dnl
dnl $1 = variable to set
AC_DEFUN([CF_WITH_LIB_PREFIX],
[
AC_MSG_CHECKING(if you want to have a library-prefix)
AC_ARG_WITH(lib-prefix,
[ --with-lib-prefix override library-prefix],
[with_lib_prefix=$withval],
[with_lib_prefix=auto])
AC_MSG_RESULT($with_lib_prefix)
-if test $with_lib_prefix = auto
+if test "$with_lib_prefix" = auto
then
CF_LIB_PREFIX($1)
-elif test $with_lib_prefix = no
+elif test "$with_lib_prefix" = no
then
LIB_PREFIX=
else
LIB_PREFIX=$with_lib_prefix
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_PATH version: 11 updated: 2012/09/29 15:04:19
dnl ------------
dnl Wrapper for AC_ARG_WITH to ensure that user supplies a pathname, not just
dnl defaulting to yes/no.
dnl
dnl $1 = option name
dnl $2 = help-text
dnl $3 = environment variable to set
dnl $4 = default value, shown in the help-message, must be a constant
dnl $5 = default value, if it's an expression & cannot be in the help-message
dnl
AC_DEFUN([CF_WITH_PATH],
[AC_ARG_WITH($1,[$2 ](default: ifelse([$4],,empty,[$4])),,
ifelse([$4],,[withval="${$3}"],[withval="${$3:-ifelse([$5],,[$4],[$5])}"]))dnl
if ifelse([$5],,true,[test -n "$5"]) ; then
CF_PATH_SYNTAX(withval)
fi
eval $3="$withval"
AC_SUBST($3)dnl
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_WITH_PATHLIST version: 10 updated: 2015/04/17 21:13:04
+dnl CF_WITH_PATHLIST version: 12 updated: 2021/01/01 13:31:04
dnl ----------------
dnl Process an option specifying a list of colon-separated paths.
dnl
dnl $1 = option name
dnl $2 = help-text
dnl $3 = environment variable to set
dnl $4 = default value, shown in the help-message, must be a constant
dnl $5 = default value, if it's an expression & cannot be in the help-message
dnl $6 = flag to tell if we want to define or substitute
dnl
AC_DEFUN([CF_WITH_PATHLIST],[
AC_REQUIRE([CF_PATHSEP])
AC_ARG_WITH($1,[$2 ](default: ifelse($4,,empty,$4)),,
ifelse($4,,[withval=${$3}],[withval=${$3:-ifelse($5,,$4,$5)}]))dnl
IFS="${IFS:- }"; ac_save_ifs="$IFS"; IFS="${PATH_SEPARATOR}"
cf_dst_path=
for cf_src_path in $withval
do
CF_PATH_SYNTAX(cf_src_path)
test -n "$cf_dst_path" && cf_dst_path="${cf_dst_path}$PATH_SEPARATOR"
cf_dst_path="${cf_dst_path}${cf_src_path}"
done
IFS="$ac_save_ifs"
ifelse($6,define,[
# Strip single quotes from the value, e.g., when it was supplied as a literal
# for $4 or $5.
-case $cf_dst_path in
+case "$cf_dst_path" in
(\'*)
- cf_dst_path=`echo $cf_dst_path |sed -e s/\'// -e s/\'\$//`
+ cf_dst_path="`echo "$cf_dst_path" |sed -e s/\'// -e s/\'\$//`"
;;
esac
cf_dst_path=`echo "$cf_dst_path" | sed -e 's/\\\\/\\\\\\\\/g'`
])
# This may use the prefix/exec_prefix symbols which will only yield "NONE"
# so we have to check/work around. We do prefer the result of "eval"...
eval cf_dst_eval="$cf_dst_path"
case "x$cf_dst_eval" in
(xNONE*)
$3=$cf_dst_path
;;
(*)
$3="$cf_dst_eval"
;;
esac
AC_SUBST($3)dnl
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_PATH_PROG version: 1 updated: 2019/06/30 19:44:43
dnl -----------------
dnl Check for a given program, like CF_PATH_PROG, but allow override using a
dnl "--with-xxx" option.
dnl
dnl Parameters:
dnl $1 = environment variable to set/update
dnl $2 = program name
dnl $3 = help-text
dnl $4 = $PATH
AC_DEFUN([CF_WITH_PATH_PROG],[
AC_ARG_WITH($2-path,
[ --with-$2-path=XXX specify path of $2 ifelse($3,,,$3)],
[AC_MSG_CHECKING(for $2 program ifelse($3,,,$3))
$1=$withval
AC_MSG_RESULT([$]$1)
CF_PATH_SYNTAX($1)
],
[CF_PATH_PROG($1,$2,,ifelse($4,,,$4))
if test -z "[$]$1"
then
AC_MSG_WARN(no $2 program found ifelse($3,,,$3))
fi
])
])
dnl ---------------------------------------------------------------------------
-dnl CF_WITH_PCRE2 version: 2 updated: 2018/07/14 16:47:56
+dnl CF_WITH_PCRE2 version: 5 updated: 2021/01/26 18:45:12
dnl -------------
dnl Add PCRE2 (Perl-compatible regular expressions v2) to the build if it is
dnl available and the user requests it. Assume the application will otherwise
dnl use the POSIX interface.
dnl
dnl TODO allow $withval to specify package location
AC_DEFUN([CF_WITH_PCRE2],
[
AC_REQUIRE([CF_PKG_CONFIG])
AC_MSG_CHECKING(if you want to use PCRE2 for regular-expressions)
AC_ARG_WITH(pcre2,
[ --with-pcre2 use PCRE2 for regular-expressions])
test -z "$with_pcre2" && with_pcre2=no
AC_MSG_RESULT($with_pcre2)
if test "x$with_pcre2" != xno ; then
- CF_TRY_PKG_CONFIG(libpcre2,,[
- CF_TRY_PKG_CONFIG(libpcre,,[
- AC_MSG_ERROR(Cannot find PCRE2 library)])])
+ cf_with_pcre2_ok=no
+ for cf_with_pcre2 in libpcre2 libpcre2-posix libpcre
+ do
+ CF_TRY_PKG_CONFIG($cf_with_pcre2,[cf_with_pcre2_ok=yes; break])
+ done
+ cf_with_pcre2_ok=yes || AC_MSG_ERROR(Cannot find PCRE2 library)
AC_DEFINE(HAVE_LIB_PCRE2,1,[Define to 1 if we can/should compile with the PCRE2 library])
# if pkgconfig gave no results, look for the libraries directly
- case $LIBS in
+ case "$LIBS" in
(*pcre2-posix*|*pcreposix*)
;;
(*)
AC_CHECK_LIB(pcre2-posix,regcomp,[
CF_ADD_LIB(pcre2-posix)],
[AC_CHECK_LIB(pcreposix,regcomp,[
CF_ADD_LIB(pcreposix)
],[AC_MSG_ERROR(Cannot find PCRE2 POSIX library)])])
;;
esac
# either way, check for the library header files
- AC_CHECK_HEADERS(pcre2-posix.h pcreposix.h)
+ AC_CHECK_HEADERS(pcre2posix.h pcreposix.h)
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_WITH_PKG_CONFIG_LIBDIR version: 10 updated: 2015/08/22 17:10:56
+dnl CF_WITH_PKG_CONFIG_LIBDIR version: 11 updated: 2021/01/01 16:16:30
dnl -------------------------
dnl Allow the choice of the pkg-config library directory to be overridden.
AC_DEFUN([CF_WITH_PKG_CONFIG_LIBDIR],[
-case $PKG_CONFIG in
+case "$PKG_CONFIG" in
(no|none|yes)
AC_MSG_CHECKING(for pkg-config library directory)
;;
(*)
AC_MSG_CHECKING(for $PKG_CONFIG library directory)
;;
esac
PKG_CONFIG_LIBDIR=no
AC_ARG_WITH(pkg-config-libdir,
[ --with-pkg-config-libdir=XXX use given directory for installing pc-files],
[PKG_CONFIG_LIBDIR=$withval],
[test "x$PKG_CONFIG" != xnone && PKG_CONFIG_LIBDIR=yes])
case x$PKG_CONFIG_LIBDIR in
(x/*)
;;
(xyes)
# Look for the library directory using the same prefix as the executable
if test "x$PKG_CONFIG" = xnone
then
cf_path=$prefix
else
cf_path=`echo "$PKG_CONFIG" | sed -e 's,/[[^/]]*/[[^/]]*$,,'`
fi
# If you don't like using the default architecture, you have to specify the
# intended library directory and corresponding compiler/linker options.
#
# This case allows for Debian's 2014-flavor of multiarch, along with the
# most common variations before that point. Some other variants spell the
# directory differently, e.g., "pkg-config", and put it in unusual places.
# pkg-config has always been poorly standardized, which is ironic...
case x`(arch) 2>/dev/null` in
(*64)
cf_search_path="\
$cf_path/lib/*64-linux-gnu \
$cf_path/share \
$cf_path/lib64 \
$cf_path/lib32 \
$cf_path/lib"
;;
(*)
cf_search_path="\
$cf_path/lib/*-linux-gnu \
$cf_path/share \
$cf_path/lib32 \
$cf_path/lib \
$cf_path/libdata"
;;
esac
CF_VERBOSE(list...)
for cf_config in $cf_search_path
do
CF_VERBOSE(checking $cf_config/pkgconfig)
- if test -d $cf_config/pkgconfig
+ if test -d "$cf_config/pkgconfig"
then
PKG_CONFIG_LIBDIR=$cf_config/pkgconfig
AC_MSG_CHECKING(done)
break
fi
done
;;
(*)
;;
esac
if test "x$PKG_CONFIG_LIBDIR" != xno ; then
AC_MSG_RESULT($PKG_CONFIG_LIBDIR)
fi
AC_SUBST(PKG_CONFIG_LIBDIR)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_PTHREAD version: 7 updated: 2015/04/18 08:56:57
dnl ---------------
dnl Check for POSIX thread library.
AC_DEFUN([CF_WITH_PTHREAD],
[
AC_MSG_CHECKING(if you want to link with the pthread library)
AC_ARG_WITH(pthread,
[ --with-pthread use POSIX thread library],
[with_pthread=$withval],
[with_pthread=no])
AC_MSG_RESULT($with_pthread)
if test "$with_pthread" != no ; then
AC_CHECK_HEADER(pthread.h,[
AC_DEFINE(HAVE_PTHREADS_H,1,[Define to 1 if we have pthreads.h header])
for cf_lib_pthread in pthread c_r
do
AC_MSG_CHECKING(if we can link with the $cf_lib_pthread library)
cf_save_LIBS="$LIBS"
CF_ADD_LIB($cf_lib_pthread)
AC_TRY_LINK([
#include <pthread.h>
],[
int rc = pthread_create(0,0,0,0);
int r2 = pthread_mutexattr_settype(0, 0);
],[with_pthread=yes],[with_pthread=no])
LIBS="$cf_save_LIBS"
AC_MSG_RESULT($with_pthread)
test "$with_pthread" = yes && break
done
if test "$with_pthread" = yes ; then
CF_ADD_LIB($cf_lib_pthread)
AC_DEFINE(HAVE_LIBPTHREADS,1,[Define to 1 if we have pthreads library])
else
AC_MSG_ERROR(Cannot link with pthread library)
fi
])
fi
])
dnl ---------------------------------------------------------------------------
dnl CF_WITH_REL_VERSION version: 1 updated: 2003/09/20 18:12:49
dnl -------------------
dnl Allow library's release-version to be overridden. Generally this happens when a
dnl packager has incremented the release-version past that used in the original package,
dnl and wishes to keep doing this.
dnl
dnl $1 is the package name, if any, to derive corresponding {package}_MAJOR
dnl and {package}_MINOR symbols
dnl symbol.
AC_DEFUN([CF_WITH_REL_VERSION],[
test -z "$cf_cv_rel_version" && cf_cv_rel_version=0.0
AC_ARG_WITH(rel-version,
[ --with-rel-version=XXX override derived release version],
[AC_MSG_WARN(overriding release version $cf_cv_rel_version to $withval)
cf_cv_rel_version=$withval])
ifelse($1,,[
CF_NUMBER_SYNTAX($cf_cv_rel_version,Release version)
],[
$1_MAJOR=`echo "$cf_cv_rel_version" | sed -e 's/\..*//'`
$1_MINOR=`echo "$cf_cv_rel_version" | sed -e 's/^[[^.]]*//' -e 's/^\.//' -e 's/\..*//'`
CF_NUMBER_SYNTAX([$]$1_MAJOR,Release major-version)
CF_NUMBER_SYNTAX([$]$1_MINOR,Release minor-version)
])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_SYSMOUSE version: 3 updated: 2012/10/06 17:56:13
dnl ----------------
dnl If we can compile with sysmouse, make it available unless it is not wanted.
AC_DEFUN([CF_WITH_SYSMOUSE],[
# not everyone has "test -c"
if test -c /dev/sysmouse 2>/dev/null ; then
AC_MSG_CHECKING(if you want to use sysmouse)
AC_ARG_WITH(sysmouse,
[ --with-sysmouse use sysmouse (FreeBSD console)],
[cf_with_sysmouse=$withval],
[cf_with_sysmouse=maybe])
if test "$cf_with_sysmouse" != no ; then
AC_TRY_COMPILE([
#include <osreldate.h>
#if (__FreeBSD_version >= 400017)
#include <sys/consio.h>
#include <sys/fbio.h>
#else
#include <machine/console.h>
#endif
],[
struct mouse_info the_mouse;
ioctl(0, CONS_MOUSECTL, &the_mouse);
],[cf_with_sysmouse=yes],[cf_with_sysmouse=no])
fi
AC_MSG_RESULT($cf_with_sysmouse)
test "$cf_with_sysmouse" = yes && AC_DEFINE(USE_SYSMOUSE,1,[Define to 1 if we can/should use the sysmouse interface])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_SYSTYPE version: 1 updated: 2013/01/26 16:26:12
dnl ---------------
dnl For testing, override the derived host system-type which is used to decide
dnl things such as the linker commands used to build shared libraries. This is
dnl normally chosen automatically based on the type of system which you are
dnl building on. We use it for testing the configure script.
dnl
dnl This is different from the --host option: it is used only for testing parts
dnl of the configure script which would not be reachable with --host since that
dnl relies on the build environment being real, rather than mocked up.
AC_DEFUN([CF_WITH_SYSTYPE],[
CF_CHECK_CACHE([AC_CANONICAL_SYSTEM])
AC_ARG_WITH(system-type,
[ --with-system-type=XXX test: override derived host system-type],
[AC_MSG_WARN(overriding system type to $withval)
cf_cv_system_name=$withval
host_os=$withval
])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_VALGRIND version: 1 updated: 2006/12/14 18:00:21
dnl ----------------
AC_DEFUN([CF_WITH_VALGRIND],[
CF_NO_LEAKS_OPTION(valgrind,
[ --with-valgrind test: use valgrind],
[USE_VALGRIND])
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_WITH_VERSIONED_SYMS version: 8 updated: 2018/10/20 20:24:34
+dnl CF_WITH_VERSIONED_SYMS version: 10 updated: 2021/01/04 18:48:01
dnl ----------------------
dnl Use this when building shared library with ELF, to markup symbols with the
dnl version identifier from the given input file. Generally that identifier is
dnl the same as the SONAME at which the symbol was first introduced.
dnl
dnl $1 = basename of the ".map" file (default $PACKAGE)
AC_DEFUN([CF_WITH_VERSIONED_SYMS],
-[
+[AC_REQUIRE([AC_PROG_FGREP])dnl
+AC_REQUIRE([AC_PROG_EGREP])dnl
+
AC_MSG_CHECKING(if versioned-symbols file should be used)
AC_ARG_WITH(versioned-syms,
[ --with-versioned-syms=X markup versioned symbols using ld],
[with_versioned_syms=$withval],
[with_versioned_syms=no])
case "x$with_versioned_syms" in
(xyes)
with_versioned_syms='${top_srcdir}/package/ifelse($1,,${PACKAGE},[$1]).map'
AC_SUBST(PACKAGE)
;;
(xno)
;;
(x/*)
test -f "$with_versioned_syms" || AC_MSG_ERROR(expected a filename: $with_versioned_syms)
;;
(*)
test -f "$with_versioned_syms" || AC_MSG_ERROR(expected a filename: $with_versioned_syms)
with_versioned_syms=`pwd`/"$with_versioned_syms"
;;
esac
AC_MSG_RESULT($with_versioned_syms)
RESULTING_SYMS=
VERSIONED_SYMS=
WILDCARD_SYMS=
if test "x$with_versioned_syms" != xno
then
RESULTING_SYMS=$with_versioned_syms
case "x$MK_SHARED_LIB" in
(*-Wl,*)
VERSIONED_SYMS="-Wl,--version-script,\${RESULTING_SYMS}"
MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-Wl,%\\[$]{VERSIONED_SYMS} -Wl,%"`
CF_VERBOSE(MK_SHARED_LIB: $MK_SHARED_LIB)
;;
(*-dy\ *)
VERSIONED_SYMS="-Wl,-M,\${RESULTING_SYMS}"
MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-dy%\\[$]{VERSIONED_SYMS} -dy%"`
CF_VERBOSE(MK_SHARED_LIB: $MK_SHARED_LIB)
;;
(*)
AC_MSG_WARN(this system does not support versioned-symbols)
;;
esac
# Linux ld can selectively override scope, e.g., of symbols beginning with
# "_" by first declaring some as global, and then using a wildcard to
# declare the others as local. Some other loaders cannot do this. Check
# by constructing a (very) simple shared library and inspecting its
# symbols.
if test "x$VERSIONED_SYMS" != "x"
then
AC_MSG_CHECKING(if wildcards can be used to selectively omit symbols)
WILDCARD_SYMS=no
# make sources
rm -f conftest.*
cat >conftest.ver <<EOF
module_1.0 {
global:
globalf1;
local:
localf1;
};
module_2.0 {
global:
globalf2;
local:
localf2;
_*;
} module_1.0;
submodule_1.0 {
global:
subglobalf1;
_ismissing;
local:
sublocalf1;
};
submodule_2.0 {
global:
subglobalf2;
local:
sublocalf2;
_*;
} submodule_1.0;
EOF
cat >conftest.$ac_ext <<EOF
#line __oline__ "configure"
int _ismissing(void) { return 1; }
int _localf1(void) { return 1; }
int _localf2(void) { return 2; }
int globalf1(void) { return 1; }
int globalf2(void) { return 2; }
int _sublocalf1(void) { return 1; }
int _sublocalf2(void) { return 2; }
int subglobalf1(void) { return 1; }
int subglobalf2(void) { return 2; }
EOF
cat >conftest.mk <<EOF
CC=${CC}
CFLAGS=${CFLAGS}
CPPFLAGS=${CPPFLAGS}
LDFLAGS=${LDFLAGS}
LIBS=${LIBS}
VERSIONED_SYMS=${VERSIONED_SYMS}
RESULTING_SYMS=conftest.ver
MK_SHARED_LIB=${MK_SHARED_LIB}
conftest.so: conftest.$ac_cv_objext
\$(MK_SHARED_LIB) conftest.$ac_cv_objext
EOF
# compile source, make library
if make -f conftest.mk 2>&AC_FD_CC >/dev/null
then
# test for missing symbol in either Data or Text section
- cf_missing=`nm -P conftest.so 2>&AC_FD_CC |fgrep _ismissing | egrep '[[ ]][[DT]][[ ]]'`
+ cf_missing="`nm -P conftest.so 2>&AC_FD_CC |${FGREP-fgrep} _ismissing | ${EGREP-egrep} '[[ ]][[DT]][[ ]]'`"
test -n "$cf_missing" && WILDCARD_SYMS=yes
fi
AC_MSG_RESULT($WILDCARD_SYMS)
rm -f conftest.*
fi
fi
AC_SUBST(RESULTING_SYMS)
AC_SUBST(VERSIONED_SYMS)
AC_SUBST(WILDCARD_SYMS)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_X11_RGB version: 2 updated: 2019/12/31 08:53:54
dnl ---------------
dnl Handle configure option "--with-x11-rgb", setting these shell
dnl variables:
dnl
dnl $RGB_PATH is the option value, used for finding the X11 rgb file.
dnl $no_x11_rgb is a "#" (comment) if "--without-x11-rgb" is given.
dnl
dnl Most Linux's use this:
dnl /usr/share/X11/rgb.txt
dnl Debian uses this:
dnl /etc/X11/rgb.txt
dnl DragonFlyBSD ports uses this:
dnl /usr/pkg/lib/X11/rgb.txt
dnl FreeBSD ports use these:
dnl /usr/local/lib/X11/rgb.txt
dnl /usr/local/share/X11/rgb.txt
dnl Mandriva has these:
dnl /usr/lib/X11/rgb.txt
dnl /usr/lib64/X11/rgb.txt
dnl NetBSD has these
dnl /usr/X11R7/lib/X11/rgb.txt
dnl OpenSolaris uses
dnl 32-bit:
dnl /usr/X11/etc/X11/rgb.txt
dnl /usr/X11/share/X11/rgb.txt
dnl /usr/X11/lib/X11/rgb.txt
dnl OSX uses
dnl /opt/local/share/X11/rgb.txt (MacPorts)
dnl /opt/X11/share/X11/rgb.txt (non-ports)
dnl 64-bit:
dnl /usr/X11/etc/X11/rgb.txt
dnl /usr/X11/share/X11/rgb.txt (perhaps)
dnl /usr/X11/lib/amd64/X11/rgb.txt
dnl Solaris10 uses (in this order):
dnl /usr/openwin/lib/X11/rgb.txt
dnl /usr/X11/lib/X11/rgb.txt
AC_DEFUN([CF_WITH_X11_RGB],[
AC_MSG_CHECKING(for X11 rgb file)
AC_ARG_WITH(x11-rgb,
[ --with-x11-rgb=FILE file containing X11 rgb information (EPREFIX/lib/X11/rgb.txt)],
[RGB_PATH=$withval],
[RGB_PATH=auto])
if test "x[$]RGB_PATH" = xauto
then
RGB_PATH='${exec_prefix}/lib/X11/rgb.txt'
for cf_path in \
/opt/local/share/X11/rgb.txt \
/opt/X11/share/X11/rgb.txt \
/usr/share/X11/rgb.txt \
/usr/X11/share/X11/rgb.txt \
/usr/X11/lib/X11/rgb.txt \
/usr/lib/X11/rgb.txt \
/etc/X11/rgb.txt \
/usr/pkg/lib/X11/rgb.txt \
/usr/X11R7/lib/X11/rgb.txt \
/usr/X11R6/lib/X11/rgb.txt \
/usr/X11R5/lib/X11/rgb.txt \
/usr/X11R4/lib/X11/rgb.txt \
/usr/local/lib/X11/rgb.txt \
/usr/local/share/X11/rgb.txt \
/usr/lib64/X11/rgb.txt
do
if test -f "$cf_path" ; then
RGB_PATH="$cf_path"
break
fi
done
else
cf_path=$RGB_PATH
CF_PATH_SYNTAX(cf_path)
fi
AC_MSG_RESULT($RGB_PATH)
AC_SUBST(RGB_PATH)
AC_DEFINE_UNQUOTED(RGB_PATH,"$cf_path",[Define to the full pathname of rgb.txt])
no_x11_rgb=
if test "$RGB_PATH" = no
then
no_x11_rgb="#"
fi
AC_SUBST(no_x11_rgb)
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_XOPEN_SOURCE version: 55 updated: 2018/12/31 20:46:17
+dnl CF_XOPEN_SOURCE version: 57 updated: 2021/01/01 16:53:59
dnl ---------------
dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions,
dnl or adapt to the vendor's definitions to get equivalent functionality,
dnl without losing the common non-POSIX features.
dnl
dnl Parameters:
dnl $1 is the nominal value for _XOPEN_SOURCE
dnl $2 is the nominal value for _POSIX_C_SOURCE
AC_DEFUN([CF_XOPEN_SOURCE],[
AC_REQUIRE([AC_CANONICAL_HOST])
AC_REQUIRE([CF_POSIX_VISIBLE])
if test "$cf_cv_posix_visible" = no; then
cf_XOPEN_SOURCE=ifelse([$1],,500,[$1])
cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2])
cf_xopen_source=
-case $host_os in
+case "$host_os" in
(aix[[4-7]]*)
cf_xopen_source="-D_ALL_SOURCE"
;;
(msys)
cf_XOPEN_SOURCE=600
;;
(darwin[[0-8]].*)
cf_xopen_source="-D_APPLE_C_SOURCE"
;;
(darwin*)
cf_xopen_source="-D_DARWIN_C_SOURCE"
cf_XOPEN_SOURCE=
;;
(freebsd*|dragonfly*|midnightbsd*)
# 5.x headers associate
# _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
# _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
cf_POSIX_C_SOURCE=200112L
cf_XOPEN_SOURCE=600
cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
;;
(hpux11*)
cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500"
;;
(hpux*)
cf_xopen_source="-D_HPUX_SOURCE"
;;
(irix[[56]].*)
cf_xopen_source="-D_SGI_SOURCE"
cf_XOPEN_SOURCE=
;;
(linux*|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin)
CF_GNU_SOURCE($cf_XOPEN_SOURCE)
;;
(minix*)
cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this...
;;
(mirbsd*)
# setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <sys/select.h> and other headers which use u_int / u_short types
cf_XOPEN_SOURCE=
CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
;;
(netbsd*)
cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
;;
(openbsd[[4-9]]*)
# setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw
cf_xopen_source="-D_BSD_SOURCE"
cf_XOPEN_SOURCE=600
;;
(openbsd*)
# setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
;;
(osf[[45]]*)
cf_xopen_source="-D_OSF_SOURCE"
;;
(nto-qnx*)
cf_xopen_source="-D_QNX_SOURCE"
;;
(sco*)
# setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
;;
(solaris2.*)
cf_xopen_source="-D__EXTENSIONS__"
cf_cv_xopen_source=broken
;;
(sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2)
cf_XOPEN_SOURCE=
cf_POSIX_C_SOURCE=
;;
(*)
CF_TRY_XOPEN_SOURCE
CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
;;
esac
if test -n "$cf_xopen_source" ; then
CF_ADD_CFLAGS($cf_xopen_source,true)
fi
dnl In anything but the default case, we may have system-specific setting
dnl which is still not guaranteed to provide all of the entrypoints that
dnl _XOPEN_SOURCE would yield.
if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then
AC_MSG_CHECKING(if _XOPEN_SOURCE really is set)
AC_TRY_COMPILE([#include <stdlib.h>],[
#ifndef _XOPEN_SOURCE
make an error
#endif],
[cf_XOPEN_SOURCE_set=yes],
[cf_XOPEN_SOURCE_set=no])
AC_MSG_RESULT($cf_XOPEN_SOURCE_set)
- if test $cf_XOPEN_SOURCE_set = yes
+ if test "$cf_XOPEN_SOURCE_set" = yes
then
AC_TRY_COMPILE([#include <stdlib.h>],[
#if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
make an error
#endif],
[cf_XOPEN_SOURCE_set_ok=yes],
[cf_XOPEN_SOURCE_set_ok=no])
- if test $cf_XOPEN_SOURCE_set_ok = no
+ if test "$cf_XOPEN_SOURCE_set_ok" = no
then
AC_MSG_WARN(_XOPEN_SOURCE is lower than requested)
fi
else
CF_TRY_XOPEN_SOURCE
fi
fi
fi # cf_cv_posix_visible
])
+dnl ---------------------------------------------------------------------------
+dnl CF__SED_TRIMBLANKS version: 1 updated: 2021/01/02 09:31:20
+dnl ------------------
+dnl Trim something using sed, then trim extra whitespace
+dnl $1 = extra parameters, e.g., in CF_STRIP_G_OPT
+define([CF__SED_TRIMBLANKS],[sed ifelse($1,,,[$1] )-e 's%[[ ]]% %g' -e 's% [[ ]]*% %g' -e 's%^ %%' -e 's% [$]%%'])dnl
diff --git a/contrib/ncurses/announce.html.in b/contrib/ncurses/announce.html.in
index 2ac7d7d73363..84b9d4297de5 100644
--- a/contrib/ncurses/announce.html.in
+++ b/contrib/ncurses/announce.html.in
@@ -1,2179 +1,2179 @@
<!--
- $Id: announce.html.in,v 1.96 2020/02/09 21:50:48 tom Exp $
+ $Id: announce.html.in,v 1.99 2020/10/19 08:18:12 tom Exp $
****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for HTML5 for Linux version 5.2.0">
<title>Announcing ncurses @VERSION@</title>
<link rel="author" href="mailto:bug-ncurses@gnu.org">
<meta http-equiv="Content-Type" content=
"text/html; charset=us-ascii">
<style type="text/css">
p,li { max-width:700px; }
dd { max-width:630px; }
*.main-name {
font-style: italic;
font-variant: small-caps;
}
*.part-name {
font-family: "Andale Mono", "Monotype.com", monospace;
font-size: 12pt;
font-weight: bold;
}
*.demo-name {
font-family: "Andale Mono", "Monotype.com", monospace;
font-size: 10pt;
}
</style>
</head>
<body>
<h1 class="no-header">Announcing ncurses @VERSION@</h1>
<h2><a name="h2-overview" id="h2-overview">Overview</a></h2>
<p>The <span class="main-name">ncurses</span> (new curses)
library is a free software emulation of curses in System V
Release 4.0 (SVr4), and more. It uses terminfo format, supports
pads and color and multiple highlights and forms characters and
function-key mapping, and has all the other SVr4-curses
enhancements over BSD curses. SVr4 curses became the basis of
X/Open Curses.</p>
<p>In mid-June 1995, the maintainer of 4.4BSD curses declared
that he considered 4.4BSD curses obsolete, and encouraged the
keepers of <span class="main-name">unix</span> releases such as
BSD/OS, FreeBSD and NetBSD to switch over to <span class=
"main-name">ncurses</span>.</p>
<p>Since 1995, <span class="main-name">ncurses</span> has been
ported to many systems:</p>
<ul>
<li>It is used in almost every system based on the Linux kernel
(aside from some embedded applications).</li>
<li>It is used as the system curses library on OpenBSD, FreeBSD
and MacOS.</li>
<li>It is used in environments such as Cygwin and MinGW. The
first of these was EMX on OS/2 Warp.</li>
<li>It is used (though usually not as the <em>system</em>
curses) on all of the vendor <span class=
"main-name">unix</span> systems, e.g., AIX, HP-UX, IRIX64, SCO,
Solaris, Tru64.</li>
<li>It should work readily on any ANSI/POSIX-conforming
<span class="main-name">unix</span>.</li>
</ul>
<p>The distribution includes the library and support utilities,
including</p>
<ul>
<li><a href="@HOMEPAGE@/man/captoinfo.1m.html"><span class=
"part-name">captoinfo</span></a>, a termcap conversion
tool</li>
<li><a href="@HOMEPAGE@/man/clear.1.html"><span class=
"part-name">clear</span></a>, utility for clearing the
screen</li>
<li><a href="@HOMEPAGE@/man/infocmp.1m.html"><span class=
"part-name">infocmp</span></a>, the terminfo decompiler</li>
<li><a href="@HOMEPAGE@/man/tabs.1.html"><span class=
"part-name">tabs</span></a>, set tabs on a terminal</li>
<li><a href="@HOMEPAGE@/man/tic.1m.html"><span class=
"part-name">tic</span></a>, the terminfo compiler</li>
<li><a href="@HOMEPAGE@/man/toe.1m.html"><span class=
"part-name">toe</span></a>, list (table of) terminfo
entries</li>
<li><a href="@HOMEPAGE@/man/tput.1.html"><span class=
"part-name">tput</span></a>, utility for retrieving terminal
capabilities in shell scripts</li>
<li><a href="@HOMEPAGE@/man/tset.1.html"><span class=
"part-name">tset</span></a>, to initialize the terminal</li>
</ul>
<p>Full manual pages are provided for the library and tools.</p>
<p>The <span class="main-name">ncurses</span> distribution is
available at <span class="main-name">ncurses</span>' <a href=
"@HOMEPAGE@/">homepage</a>:</p>
<blockquote>
<p><a href=
"ftp://ftp.invisible-island.net/ncurses/">ftp://ftp.invisible-island.net/ncurses/</a>
or<br>
<a href=
"https://invisible-mirror.net/archives/ncurses/">https://invisible-mirror.net/archives/ncurses/</a>&nbsp;.</p>
</blockquote>
<p>It is also available via anonymous FTP at the GNU distribution
site</p>
<blockquote>
<p><a href=
"ftp://ftp.gnu.org/gnu/ncurses/">ftp://ftp.gnu.org/gnu/ncurses/</a>&nbsp;.</p>
</blockquote>
<h2><a name="h2-release-notes" id="h2-release-notes">Release
Notes</a></h2>
<p>These notes are for <span class="main-name">ncurses</span>
@VERSION@, released <strong>February 12, 2020</strong>.</p>
<p>This release is designed to be source-compatible with
<span class="main-name">ncurses</span> 5.0 through 6.1; providing
extensions to the application binary interface (ABI). Although
the source can still be configured to support the <span class=
"main-name">ncurses</span> 5 ABI, the reason for the release is
to reflect improvements to the <span class=
"main-name">ncurses</span> 6 ABI and the supporting utility
programs.</p>
<p>There are, of course, numerous other improvements, listed in
this announcement.</p>
<p>The most <a href="#h3-bug-fixes">important
bug-fixes/improvements</a> dealt with user-defined capabilities
in terminal descriptions. The release notes also mention some
other bug-fixes, but are focused on new features and improvements
to existing features since <span class="main-name">ncurses</span>
6.1 release.</p>
<h3><a name="h3-library" id="h3-library">Library improvements</a></h3>
<h4><a name="h4-new-library" id="h4-new-library">New features</a></h4>
<p>There are several new features:</p>
<ul>
<li>
<p><a href=
"@HOMEPAGE@/man/form_field_opts.3x.html">O_EDGE_INSERT_STAY</a>
tells the form library to optionally delay cursor movement on
a field edge/boundary</p>
</li>
<li>
<p><a href=
"@HOMEPAGE@/man/form_field_opts.3x.html">O_INPUT_FIELD</a>
extension to form library allows a dynamic field to shrink if
the new limit is smaller than the current field size.</p>
</li>
<li>
<p>added <a href=
"@HOMEPAGE@/man/curs_memleaks.3x.html">exit_curses</a> and
<a href=
"@HOMEPAGE@/man/curs_memleaks.3x.html">exit_terminfo</a> to
replace internal symbols for leak-checking.</p>
</li>
<li>
<p>added <a href=
"@HOMEPAGE@/man/curs_trace.3x.html#h3-Functions">curses_trace</a>,
to replace trace().</p>
</li>
</ul>
<p>Additionally, to improve performance other changes (and
extensions) are provided in this release:</p>
<ul>
<li>
<p>mouse decoding now handles shift/control/alt logic when
decoding xterm's 1006 mode</p>
</li>
<li>
<p>ncurses now defines a limit for <a href=
"@HOMEPAGE@/man/curs_getstr.3x.html">wgetnstr</a>, <a href=
"@HOMEPAGE@/man/curs_get_wstr.3x.html">wgetn_wstr</a> when
length is negative or &ldquo;too large&rdquo;.</p>
</li>
<li>reordered loop-limit checks in <a href=
"@HOMEPAGE@/man/curs_insstr.3x.html">winsnstr</a> in case the
string has no terminating null and only the number of
characters is used.</li>
<li>
<p>there is now no buffer-size limit when reading the
<a href="@HOMEPAGE@/man/ncurses.3x.html#h3-TERMCAP"><tt>$TERMCAP</tt></a>
variable.</p>
</li>
<li>
<p>the <a href=
"@HOMEPAGE@/man/ncurses.3x.html#h3-TERMCAP"><tt>$TERMCAP</tt></a>
variable may be interpreted as a fallback to a terminfo
entry</p>
</li>
<li>
<p><a href=
"@HOMEPAGE@/man/curs_terminfo.3x.html#h3-Output-Functions"><tt>
mvcur</tt></a> now decides whether to use hard-tabs, using
<strong><tt>xt</tt></strong>, <strong><tt>tbc</tt></strong>
and <strong><tt>hts</tt></strong> as clues.</p>
</li>
<li>
<p>extended colors are improved by modifying an internal call
to <a href=
"@HOMEPAGE@/man/curs_terminfo.3x.html#h3-Output-Functions"><tt>
vid_puts</tt></a> to pass extended color pairs e.g., from
<tt>tty_update.c</tt> and <tt>lib_mvcur.c</tt></p>
</li>
<li>
<p id="getenv-fixes">the initialization functions now avoid
relying upon persistent data for the result from <a href=
"#getenv-check"><tt>getenv</tt></a></p>
</li>
<li>
<p>scrolling is improved:</p>
<ul>
<li>a limit check in <tt>newline_forces_scroll</tt> handles
the case where the row is inside scroll-margins, but not at
the end.</li>
<li>
<p>improved loop limits in <tt>_nc_scroll_window</tt>
handle a case where the scrolled data is a pad which is
taller than the window.</p>
</li>
</ul>
</li>
</ul>
<h4><a name="h4-fixes-library" id="h4-fixes-library">Other
improvements</a></h4>
<p>These are revised features:</p>
<ul>
<li>
<p>used &ldquo;<tt>const</tt>&rdquo; in some prototypes
rather than <tt>NCURSES_CONST</tt> where X/Open Curses was
updated to do this, e.g., <tt>wscanw</tt>, <tt>newterm</tt>,
the terminfo interface. Also use &ldquo;<tt>const</tt>&rdquo;
for consistency in the termcap interface, which was withdrawn
by X/Open Curses in Issue 5 (2007). As of Issue 7, X/Open
Curses still lacks &ldquo;<tt>const</tt>&rdquo; for certain
return values, e.g., <a href=
"@HOMEPAGE@/man/curs_util.3x.html#h3-keyname_key_name">keyname</a>.</p>
</li>
<li>
<p>modified <a href=
"@HOMEPAGE@/man/curs_bkgd.3x.html#h3-bkgd"><tt>wbkgd</tt></a>
and <a href=
"@HOMEPAGE@/man/curs_bkgrnd.3x.html#h3-bkgrnd"><tt>wbkgrnd</tt></a>
to improve compatibility with SVr4 curses, changing the way
the window rendition is updated when the background character
is modified</p>
</li>
<li>
<p>improved terminfo write/read by modifying the fourth item
of the extended header to denote the number of valid strings
in the extended string table (see <a href=
"@HOMEPAGE@/man/term.5.html#h3-EXTENDED-STORAGE-FORMAT">term(5)</a>).</p>
</li>
<li>
<p>modified the initialization checks for mouse so that the
<a href=
"/ncurses/terminfo.src.html#tic-xterm_sm_1006"><tt>xterm+sm+1006</tt></a>
block will work with terminal descriptions not mentioning
<em>xterm</em>.</p>
</li>
</ul>
<p>These were done to limit or ultimately deprecate features:</p>
<ul>
<li>
<p>deprecated <a href=
"@HOMEPAGE@/NEWS.html#t970831">safe-sprintf</a>, since the
<tt>vsnprintf</tt> function, which does what was needed, was
standardized long ago.</p>
</li>
<li>
<p>marked <a href=
- "@HOMEPAGE@/man/curs_printw.3x.html#h3-PORTABILITY"><tt>vwprintw</tt></a>
+ "@HOMEPAGE@/man/curs_printw.3x.html#h2-PORTABILITY"><tt>vwprintw</tt></a>
and <tt>vwscanw</tt> as deprecated; recommend using <a href=
"@HOMEPAGE@/man/curs_printw.3x.html"><tt>vw_printw</tt></a>
and <tt>vw_scanw</tt>, respectively.</p>
</li>
<li>
<p>added deprecation warnings for internal functions called
by older versions of <a href=
"@HOMEPAGE@/tack.html">tack</a>.</p>
</li>
<li>
<p>removed unused <tt>_nc_import_termtype2</tt> function.</p>
</li>
</ul>
<p>These are improvements to existing features:</p>
<ul>
<li>
<p>check parameter of <a href=
"@HOMEPAGE@/man/curs_threads.3x.html">set_escdelay</a>,
return ERR if negative.</p>
</li>
<li>
<p>check parameter of <a href=
"@HOMEPAGE@/man/curs_threads.3x.html">set_tabsize</a>, return
ERR if not greater than zero</p>
</li>
<li>
<p>correct a status-check in _nc_read_tic_entry() so that if
reading a hex/b64 <a href=
"@HOMEPAGE@/man/ncurses.3x.html#h3-TERMINFO"><tt>$TERMINFO</tt></a>,
and the <a href=
"@HOMEPAGE@/man/ncurses.3x.html#h3-TERM"><tt>$TERM</tt></a>
does not match, fall-through to the compiled-in search
list.</p>
</li>
<li>
<p>amend check for <a href=
"@HOMEPAGE@/man/terminfo.5.html#h3-Predefined-Capabilities"><tt>
repeat_char</tt></a> to handle a case where setlocale() was
called after <a href=
"@HOMEPAGE@/man/curs_initscr.3x.html"><tt>initscr</tt></a></p>
</li>
<li>
<p>move macro for <a href=
"@HOMEPAGE@/man/curs_touch.3x.html"><tt>is_linetouched</tt></a>
inside <strong><tt>NCURSES_NOMACROS</tt></strong>
<em><tt>ifndef</tt></em>.</p>
</li>
<li>
<p>use <tt>_nc_copy_termtype2</tt> rather than direct
assignment in <a href=
"@HOMEPAGE@/man/curs_terminfo.3x.html#h3-Initialization">setupterm</a>,
in case it is called repeatedly using fallback terminfo
descriptions</p>
</li>
<li>
<p>improve workaround for Solaris wcwidth versus line-drawing
characters</p>
</li>
<li>
<p>add checks in <a href=
"@HOMEPAGE@/man/resizeterm.3x.html"><tt>repair_subwindows</tt></a>
to keep the current position and scroll-margins inside the
resized subwindow.</p>
</li>
<li>
<p>correct a buffer-limit in <tt>write_entry.c</tt> for
systems that use caseless filenames.</p>
</li>
<li>
<p>improved build-time utility <em>report_offsets</em>:</p>
<ul>
<li>
<p>add categories, e.g., "w" for wide-character, "t" for
threads to make the report more readable. Reorganized the
structures reported to make the categories more
apparent.</p>
</li>
<li>
<p>add <tt>NCURSES_GLOBALS</tt> and
<tt>NCURSES_PRESCREEN</tt> to report to show how similar
the different <em>libtinfo</em> configurations are.</p>
</li>
</ul>
</li>
<li>
<p>modified some header files to ensure that those include
necessary files except for the previously-documented
cases</p>
</li>
<li>
<p>added some traces in initialization to show whether a
fallback entry is used.</p>
</li>
<li>
<p>made minor optimization to reduce calls to
_nc_reserve_pairs</p>
</li>
</ul>
<p>These are corrections to existing features:</p>
<ul>
<li>
<p>fix a special case in <tt>PutAttrChar</tt> where a cell is
marked as alternate-character set, but the terminal does not
actually support the given graphic character. This would
happen in an older terminal such as <em>vt52</em>, which
lacks most line-drawing capability.</p>
</li>
<li>
<p>corrected flag for "seq" method of db 1.8.5 interface,
needed by toe on some of the BSDs.</p>
</li>
<li>
<p>modify comparison in make_hash.c to correct a special case
in collision handling for Caps-hpux11</p>
</li>
<li>
<p>add extended_slk_color{,_sp} symbols to the appropriate
package/*.{map,sym} files</p>
</li>
<li>
<p>modify lib_setup to avoid calling pthread_self() without
first verifying that the address is valid, i.e., for weak
symbols</p>
</li>
<li>
<p>add a couple of broken-linker symbols to the list of
versioned symbols to help with link-time optimization versus
weak symbols.</p>
</li>
</ul>
<h3><a name="h3-programs" id="h3-programs">Program
improvements</a></h3>
- <p>Several improvements were made to the utility programs:</p>
+ <p id="h4-utilities">Several improvements were made to the utility programs:</p>
<dl>
<dt><span class="part-name">clear</span>
</dt>
<dd>
<ul>
<li>improved logic for clearing with the <em>E3</em>
extension, in case the terminal scrolls content onto its
saved-lines before actually clearing the display, by
clearing the saved-lines after clearing the display</li>
</ul>
</dd>
<dt><span class="part-name">infocmp</span>
</dt>
<dd>
<ul>
<li>omit filtering of &ldquo;<tt>OTxx</tt>&rdquo; names
which are used for obsolete capabilities, when the output
is sorted by long-names. This change helps when making a
table of the short/long capability names.</li>
</ul>
</dd>
<dt><span class="part-name">tic</span>
</dt>
<dd>
<ul>
<li>added check for consistent alternate character set
capabilities.</li>
<li>added check for paired <tt>indn</tt>/<tt>rin</tt>.</li>
<li>added check for terminals with <tt>parm_dch</tt> vs
<tt>parm_ich</tt>.</li>
<li>added check for the case where
<tt>setf</tt>/<tt>setb</tt> are given using different
strings, but provide identical results to
<tt>setaf</tt>/<tt>setab</tt>.</li>
<li>corrected check for <tt>ich1</tt>.</li>
<li>changed a too-large terminal entry from a fatal error
to a warning.</li>
</ul>
</dd>
<dt><span class="part-name">toe</span>
</dt>
<dd>
<ul>
<li>ignores any hex/b64 <tt>$TERMINFO</tt> value in the
list of terminfo databases.</li>
</ul>
</dd>
<dt><span class="part-name">tset</span>
</dt>
<dd>
<ul>
<li>replace check in <span class="part-name">reset</span>
command for obsolete &ldquo;<tt>pt</tt>&rdquo; capability
using <tt>tbc</tt> and <tt>hts</tt> capabilities as
clues</li>
<li>modify <span class="part-name">reset</span> to allow
for tabstops at intervals other than 8.</li>
<li>change <span class="part-name">reset</span>'s behavior
for margins to simply clear soft-margins if possible,
rather than clearing and then setting them according to the
terminal's width.</li>
</ul>
</dd>
<dt><span class="part-name">tput</span>
</dt>
<dd>
<ul>
<li>add &ldquo;<tt>x</tt>&rdquo; to <tt>getopt</tt> string
so that &ldquo;<tt>tput&nbsp;-x&nbsp;clear</tt>&rdquo;
works.</li>
</ul>
</dd>
</dl>
<p>Several changes were made to the generated ncurses*config
scripts and the analogous &ldquo;<tt>.pc</tt>&rdquo; files to
reduce differences between the configurations they report:</p>
<ul>
<li>
<p>modified the ncurse*-config and pc-files to more closely
match for the <tt>-I</tt> and <tt>-l</tt> options.</p>
</li>
<li>
<p>filtered out linker-specs from the <tt>--libs</tt>
report.</p>
</li>
<li>
<p>amended the ncurses*-config and pc-files to take into
account the rpath hack which differed between those
files.</p>
</li>
<li>
<p>modified generated ncurses*config and ncurses.pc,
ncursesw.pc, etc., to list helper libraries such as gpm for
static linking.</p>
</li>
</ul>
<h4><a name="h4-examples" id="h4-examples">Examples</a></h4>
<p>Along with the library and utilities, improvements were made
to the <a href=
"@HOMEPAGE@/ncurses-examples.html">ncurses-examples</a>. Most of
this activity aimed at improving the test-packages. A few changes
are more generally useful, e.g., for the main ncurses
test-program, and for analyzing traces using the
<em>tracemunch</em> script:</p>
<ul>
<li>
<p>improve recovery from error when reading command-character
in <tt>test/ncurses.c</tt>, showing the relevant error
message and not exiting on EINTR.</p>
</li>
<li>
<p>improve <em>tracemunch</em>, by keeping track of
<tt>TERMINAL*</tt> values, and if tracing was first turned on
after initialization, attempt to show distinct screen, window
and terminal names anyway.</p>
</li>
<li>
<p>modify <em>tracemunch</em> to accept filename parameters
in addition to use as a pipe/filter.</p>
</li>
<li>
<p>update <em>tracemunch</em> to work with <em>perl
5.26.2</em>, which changed the rules for escaping regular
expressions.</p>
</li>
<li>
<p>add some checks in <em>tracemunch</em> for undefined
variables.</p>
</li>
<li>
<p>modify <tt>TurnOn</tt>/<tt>TurnOff</tt> macros (in
lib_vidattr.c and lib_vid_attr.c) to avoid expansion of
&ldquo;<tt>CUR</tt>&rdquo; in trace.</p>
</li>
</ul>
<p>There are other new demo/test programs and reusable
examples:</p>
<dl>
<dt><span class="part-name">color_content</span>
</dt>
<dd>Demonstrate the <tt>color_content</tt> and
<tt>extended_color_content</tt> functions.</dd>
<dt><span class="part-name">demo_tabs</span>
</dt>
<dd>A simple demo of tabs in curses.</dd>
<dt><span class="part-name">dump_window</span>
</dt>
<dd>A portable curses screen-dump, used to compare ncurses
screen contents with Solaris.</dd>
<dt><span class="part-name">pair_content</span>
</dt>
<dd>Demonstrate the <tt>pair_content</tt> and
<tt>extended_pair_content</tt> functions.</dd>
<dt><span class="part-name">report_hashing</span>
</dt>
<dd>Check hash-tables used for terminfo and termcap names.</dd>
<dt><span class="part-name">parse_rgb</span>
</dt>
<dd>Sample implementation of the ncurses RGB extension from
<a href="@HOMEPAGE@/man/user_caps.5.html">user_caps.5</a>, used
in <em>picsmap</em> and <em>savescreen</em> programs.</dd>
</dl>
<p>A variety of improvements were made to existing programs, both
new features as well as options added to make the set of programs
more consistent.</p>
<ul>
<li>
<p>add &ldquo;<tt>-l</tt>&rdquo; option to test/background,
to dump screen contents in a form that lets different curses
implementations be compared.</p>
</li>
<li>
<p>add &ldquo;<tt>@</tt>&rdquo; command to test/ncurses
F-test, to allow rapid jump to different character pages.</p>
</li>
<li>
<p>added enum, regex examples to test/demo_forms</p>
</li>
<li>
<p>amend Scaled256() macro in test/picsmap.c to cover the
full range 0..1000</p>
</li>
<li>
<p>corrected pathname used in Ada95 sample programs for
<tt>explain.txt</tt>, to work with test-packages, and used an
awk script to split the resulting pathname when it would be
too long for a single line.</p>
</li>
<li>
<p>ignore interrupted system-call in test/ncurses's
command-line, e.g., if the terminal were resized.</p>
</li>
<li>
<p>improved ifdef's for <tt>TABSIZE</tt> variable, to help
with AIX/HPUX ports.</p>
</li>
</ul>
<h3><a name="h3-database" id="h3-database">Terminal database</a></h3>
<p>There are several new terminal descriptions:</p>
<blockquote style="word-break:keep-all">
<p><tt>alacritty</tt>, <tt>domterm</tt>, <tt>kitty</tt>,
<tt>mintty</tt>, <tt>mintty-direct</tt>, <tt>ms-terminal</tt>,
<tt>n7900</tt>, <tt>nsterm-build309</tt>,
<tt>nsterm-direct</tt>, <tt>screen5</tt>, <tt>ti703</tt>,
<tt>ti707</tt>, <tt>ti703-w</tt>, <tt>ti707-w</tt>
<tt>vscode</tt>, <tt>vscode-direct</tt>, <tt>xterm-mono</tt>,
<tt>xterm.js</tt></p>
</blockquote>
<p>There are many changes to existing terminal descriptions. Some
were updates to several descriptions:</p>
<ul>
<li>use <a href=
"/ncurses/terminfo.src.html#tic-ansi_rep"><tt>ansi+rep</tt></a>
in a dozen places</li>
<li>add rs1 to konsole, mlterm</li>
<li>improve several flash capabilities with trailing mandatory
delays</li>
<li>drop <tt>ich1</tt> from <tt>rxvt-basic</tt>, <tt>Eterm</tt>
and <tt>mlterm</tt> to improve compatibility with old
non-curses programs</li>
<li>add/use <a href=
"/ncurses/terminfo.src.html#tic-xterm_keypad"><tt>xterm+keypad</tt></a>
in <tt>xterm-new</tt></li>
<li>use <a href=
"/ncurses/terminfo.src.html#tic-xterm_sl-twm"><tt>xterm+sl-twm</tt></a>
for consistency, nine places</li>
<li>improve <em>xm</em> example in <a href=
"/ncurses/terminfo.src.html#tic-xterm_x11mouse">xterm+x11mouse</a>
and <a href=
"/ncurses/terminfo.src.html#tic-xterm_sm_1006">xterm+sm_1006</a>.</li>
</ul>
<p>while others affected specific descriptions. These were
retested, to take into account changes by their developers:</p>
<blockquote>
<p><tt>terminator</tt>, <tt>st</tt></p>
</blockquote>
<p>while these are specific fixes based on reviewing
documentation, user reports, or warnings from <span class=
"part-name">tic</span>:</p>
<dl>
<dt><a href=
"/ncurses/terminfo.src.html#tic-adds200">adds200</a>:</dt>
<dd>
<ul>
<li>fix typo</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-gnome-256color">gnome-256color</a>
</dt>
<dd>
<ul>
<li>base entry on "gnome", not "vte", for consistency</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-interix">interix</a>
</dt>
<dd>
<ul>
<li>trim unnecessary setf/setb</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-linux-16color">linux-16color</a>
</dt>
<dd>
<ul>
<li>accommodate <a href=
"https://lists.gnu.org/archive/html/bug-ncurses/2019-10/msg00061.html">
Linux console driver</a> incompatibility introduced in
early 2018</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-nsterm-256color">nsterm-256color</a>:</dt>
<dd>
<ul>
<li>add nsterm-build309 to replace nsterm-256color,
assigning the latter as an alias of nsterm, to make mouse
work with nsterm-256color</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-regent40">regent40</a>:</dt>
<dd>
<ul>
<li>renumber function-keys to match manual</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-regent60">regent60</a>:</dt>
<dd>
<ul>
<li>add cd (clr_eos)</li>
<li>corrected acsc</li>
<li>add shifted function-keys</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-tvi950">tvi950</a>:</dt>
<dd>
<ul>
<li>added function-key definitions to agree with Televideo
950 manual</li>
<li>corrected acsc</li>
<li>remove bogus kf0</li>
<li>add bel</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-tvi955">tvi955</a>:</dt>
<dd>
<ul>
<li>fix typo</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-vi200">vi200</a>:</dt>
<dd>
<ul>
<li>add acsc string, including right/down-arrow</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-wy50">wy50</a>:</dt>
<dd>
<ul>
<li>corrected acsc</li>
</ul>
</dd>
<dt><a href="/ncurses/terminfo.src.html#tic-wy50">wy50</a> and
<a href="/ncurses/terminfo.src.html#tic-wy60">wy60</a>:</dt>
<dd>
<ul>
<li>add shifted function-keys as kF1 to kF16</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-xterm_x11hilite">xterm+x11hilite</a>:</dt>
<dd>
<ul>
<li>eliminate unused <em>p5</em> parameter.</li>
</ul>
</dd>
</dl>
<p>A few entries use extensions (user-defined terminal
capabilities):</p>
<ul>
<li>use <a href=
"/ncurses/terminfo.src.html#tic-xterm_sm_1006"><tt>xterm+sm+1006</tt></a>
(aka &ldquo;SGR 1006 mouse&rdquo;) for konsole-base and
putty</li>
<li>add <em><tt>Smol/Rmol</tt></em> user-defined capability to
<tt>tmux</tt> and <tt>vte-2018</tt></li>
<li>add <em><tt>Smulx</tt></em> user-defined capability to
<tt>tmux</tt>, <tt>vte-2018</tt></li>
</ul>
<h3><a name="h3-documentation" id=
"h3-documentation">Documentation</a></h3>
<p>As usual, this release</p>
<ul>
<li>
<p>improves documentation by describing new features,</p>
</li>
<li>
<p>attempts to improve the description of features which
users have found confusing</p>
</li>
<li>
<p>fills in overlooked descriptions of features which were
described in the <a href="@HOMEPAGE@/NEWS.html">NEWS</a> file
but treated sketchily in manual pages.</p>
</li>
</ul>
<p>In addition to providing background information to explain
these features and show how they evolved, there are corrections,
clarifications, etc.:</p>
<ul>
<li>
<p>Corrections:</p>
<ul>
<li>correct error-returns listed in manual pages for a few
form functions</li>
<li>corrected prototypes in several manpages using script
to extract those in compilable form.</li>
<li>fix typo in <a href=
"@HOMEPAGE@/man/term.5.html#h3-EXTENDED-NUMBER-FORMAT">term.5</a>,
improve explanation of format</li>
</ul>
</li>
<li>
<p>Clarify in manual pages that <a href=
"@HOMEPAGE@/man/curs_printw.3x.html#h2-PORTABILITY">vwprintw</a>
and <a href=
"@HOMEPAGE@/man/curs_scanw.3x.html#h2-PORTABILITY">vwscanw</a>
are obsolete.<br>
They have not been part of X/Open Curses since 2007.</p>
</li>
<li>
<p>New/improved history and portability sections:</p>
<ul>
<li><a href=
"@HOMEPAGE@/man/curs_addch.3x.html#h3-ACS-Symbols">curs_addch.3x</a>
gives some background for ACS symbols.</li>
<li><a href=
"@HOMEPAGE@/man/curs_getcchar.3x.html#h2-PORTABILITY">curs_getcchar.3x</a>
explains a difference between ncurses and X/Open
Curses.</li>
<li><a href=
"@HOMEPAGE@/man/curs_getstr.3x.html#h2-PORTABILITY">curs_getstr.3x</a>
gives historical/portability background for the length
parameter of <tt>wgetnstr</tt>.</li>
<li><a href=
"@HOMEPAGE@/man/curs_slk.3x.html">curs_slk.3x</a> lists a
few differences between SVr4 curses and X/Open Curses for
soft-keys.</li>
<li><a href=
"@HOMEPAGE@/man/curs_terminfo.3x.html">curs_terminfo.3x</a>
explains that the initial implementation of terminfo in
SVr2 was mostly replaced by other developers in SVr3.</li>
<li><a href="@HOMEPAGE@/man/infocmp.1m.html">infocmp.1</a>
explains that the initial version of terminfo had no tool
for decompiling descriptions. That came later, with SVr3,
with a different developer.</li>
- <li><a href="@HOMEPAGE@/man/tabs.1">tabs.1</a> tells more
+ <li><a href="@HOMEPAGE@/man/tabs.1.html">tabs.1</a> tells more
than you wanted to know about the tool.</li>
<li><a href="@HOMEPAGE@/man/tic.1m.html">tic.1</a> explains
that the initial version of terminfo had a rudimentary tool
(based on termcap) for compiling entries. The tool used
with Unix was developed by others for SVr3.</li>
<li><a href="@HOMEPAGE@/man/toe.1m.html">toe.1</a> explains
the origin of this tool.</li>
</ul>
</li>
<li>
<p>Improvements for <a href=
"@HOMEPAGE@/man/user_caps.5.html">user_caps.5</a>:</p>
<ul>
<li>mention <tt>meml</tt>, <tt>memu</tt> and
<tt>box1</tt></li>
<li>expanded description of <tt>XM</tt></li>
<li>add a clarification regarding the <tt>RGB</tt>
capability.</li>
<li>mention user_caps.5 in the tic and infocmp manual
pages.</li>
</ul>
</li>
<li>
<p>Other improvements:</p>
<ul>
<li><a href=
"@HOMEPAGE@/man/curs_add_wch.3x.html#h3-Line-Graphics">curs_add_wch.3x</a>
adds note about Unicode terminology for the line-drawing
characters.</li>
<li><a href=
- "@HOMEPAGE@/man/curs_color.3x.html#h3-RETURN-VALUE">curs_color.3x</a>
+ "@HOMEPAGE@/man/curs_color.3x.html#h2-RETURN-VALUE">curs_color.3x</a>
improves discussion of error returns and extensions.</li>
<li><a href=
"@HOMEPAGE@/man/curs_mouse.3x.html">curs_mouse.3x</a>
explains how the <tt>kmous</tt> and <tt>XM</tt>
capabilities are used for xterm-mouse input.</li>
<li><a href=
"@HOMEPAGE@/man/curs_refresh.3x.html#h3-wnoutrefresh_doupdate">
curs_refresh.3x</a> improves documentation regarding the
virtual and physical screens.</li>
<li><a href=
"@HOMEPAGE@/man/curs_util.3x.html">curs_util.3x</a>
mentions a difference between SVr4 and X/Open Curses for
<tt>unctrl.h</tt></li>
<li><a href=
"@HOMEPAGE@/man/curs_variables.3x.html#h2-PORTABILITY">curs_variables.3x</a>
improves description of the <em>init_tabs</em> capability
and <tt>TABSIZE</tt> variable.</li>
<li><a href=
"@HOMEPAGE@/man/ncurses.3x.html#h2-ALTERNATE-CONFIGURATIONS">
ncurses.3x</a> improves documentation regarding
feature-test macros in curses.h</li>
<li><a href=
"@HOMEPAGE@/man/resizeterm.3x.html#h3-resize_term">resizeterm.3x</a>
about top-level windows which touch the screen's
borders.</li>
<li><a href=
"@HOMEPAGE@/man/tput.1.html#h3-Terminal-Size">tput.1</a>
clarifies how <em>tput</em> determines the terminal
size.</li>
</ul>
</li>
</ul>
<p>There are no new manual pages (all of the manual page updates
are to existing pages).</p>
<p>Some of the improvements are more subtle, relating to the way
the information is presented. For instance, the generated
terminfo.5 file uses a different table layout, allowing it to use
space on wide terminals more effectively.</p>
<h3><a name="h3-bug-fixes" id="h3-bug-fixes">Interesting
bug-fixes</a></h3>
<p>While there were many bugs fixed during development of ncurses
6.2, only a few (the reason for this release) were both important
and interesting. Most of the bug-fixes were for local issues
which did not affect compatibility across releases. Since those
are detailed in the NEWS file no elaboration is needed here.</p>
<p>The interesting bugs were in tic/infocmp's handling of
user-defined capabilities. These were not recent bugs. Initially
it was a simple problem:</p>
<ul>
<li>The user-defined capabilities can be any type (boolean,
number or string), but once given a type all uses of the name
must conform to that type&mdash;unless some special support for
a particular multi-typed name is built into ncurses.</li>
<li>
<p>One of simpleterm's contributors copied some definitions
for using <em>tmux</em>'s user-defined capabilities in
<a href=
"https://git.suckless.org/st/commit/06f8cf8ca87a81db15816658c40b2afcd1ad5332.html">
late in 2016</a>.</p>
<blockquote>
<pre class="demo-name">
diff --git a/st.info b/st.info
@@ -185,7 +185,10 @@ st| simpleterm,
tsl=\E]0;,
xenl,
vpa=\E[%i%p1%dd,
-
+# Tmux unofficial extensions, see TERMINFO EXTENSIONS in tmux(1)
+ Se,
+ Ss,
+ Tc,
st-256color| simpleterm with 256 colors,
use=st,
</pre>
</blockquote>
</li>
<li>
<p>Later, in (referring to a version from <a href=
"https://git.suckless.org/st/commit/c0882f2ed1d7a2dd0fa2efa52157e6fc6fde3652.html">
mid-2017</a>), a user asked to have it updated in
ncurses.</p>
</li>
<li>
<p>However, it had an error from the change in late 2016. The
terminal description made what <em>tmux</em> expected to be
<strong>string</strong> actually a
<strong>boolean</strong>.</p>
<p>Over the years, there were problems with each of
simpleterm's terminal descriptions. I repaired those, and
usually dealt with the problem.</p>
</li>
<li>
<p>The difference in this case was that when compiling the
terminal database, <em>tic</em> may have in memory the
definitions for more than one terminal description (so that
it can resolve &ldquo;<tt>use=</tt>&rdquo; clauses). Seeing
two different types for the same name, in certain situations
it would incorrectly merge the symbol tables for the two
terminal descriptions.</p>
</li>
<li>
<p>On simpleterm's side, their bug was finally fixed in
<a href=
"https://git.suckless.org/st/commit/83866428de031300eab03fbb116bcf7d2b1d4f60.html">
late 2019</a>, three years after the bug was created.</p>
</li>
</ul>
<p>For ncurses, the elapsed time to fix this bug was less than
three years. Someone reported a problem with the terminal
description a few weeks after releasing ncurses 6.1 (in <a href=
"https://github.com/tmux/tmux/issues/1264">tmux #1264</a>), and
the terminal description was updated that week (ncurses patch
<a href="@HOMEPAGE@/NEWS.html#t20180224">20180224</a>):</p>
<blockquote>
<pre class="demo-name">
20180224
+ modify _nc_resolve_uses2() to detect incompatible types when merging
a "use=" clause of extended capabilities. The problem was seen in a
defective terminfo integrated from simpleterm sources in 20171111,
compounded by repair in 20180121.
+ correct Ss/Ms interchange in st-0.7 entry (tmux #1264) -TD
</pre>
</blockquote>
<p>The larger part of that change added a check to prevent a
simple merge of terminal descriptions where the same user-defined
name was used with different types. But it raised some
questions:</p>
<ul>
<li>
<p>Was there a reliable way to manage terminal descriptions
which used the same extended name in different ways?</p>
</li>
<li>
<p>Should ncurses provide a registry of well-known extended
names, with their types?</p>
</li>
</ul>
<p>Since the correction to <a href=
"@HOMEPAGE@/ncurses.html#download_database"><tt>terminfo.src</tt></a>
could have been readily adopted by packagers, there was nothing
more to be done from ncurses' standpoint on that part. But
improving ncurses to prevent issues like that is the reason for
making a release.</p>
<p>Nothing more (constructive) was mentioned with regard to
simpleterm. But a few problems were found in the handling of
user-defined capabilities:</p>
<ul>
<li>
<p>Forward-references to user-defined capabilities in a
&ldquo;<tt>use=</tt>&rdquo; clause did not allocate new data
for each use. In <em>tic</em>, successive compilation of
terminal entries could add user-defined capabilities to the
wrong terminal entry.</p>
<p>This was not noticed before, since xterm's terminal
descriptions were the main users of the feature, and almost
all of the uses of the building-blocks which contained
user-defined capabilities were backward-references.</p>
</li>
<li>
<p>There is one (documented) case where ncurses 6.1 supports
a user-defined capability that could be any type (i.e.,
&ldquo;RGB&rdquo;). The check added in February 2018 to guard
against mismatches did not handle all of the combinations
needed.</p>
</li>
</ul>
<p>Both of these issues dated from the original implementation of
user-defined capabilities. Fixing them does not change the
terminal database, but a older <em>tic</em> without the fixes
will not be able to handle terminfo sources which rely upon those
fixes. Starting in June 2019, the download link for the terminfo
source file was capped at that date. The development sources have
an up-to-date copy of the file, for people with a legitimate need
for it.</p>
<p>The &ldquo;<tt>-c</tt>&rdquo; (check) option of <em>tic</em>
is not very useful if it cannot offer advice on parameters needed
for user-defined capabilities. The various <em>Caps</em> files
were reorganized to reduce redundancy, and in the common portion
(<a href=
"https://github.com/ThomasDickey/ncurses-snapshots/blob/master/include/Caps-ncurses">Caps-ncurses</a>),
a registry of user-defined capabilities is provided for use by
<em>tic</em>. While users can still define their own custom
capabilities, <em>tic</em> will not offer any advice when their
parameters do not match.</p>
<p>In ncurses 6.2, <em>tic</em> makes a special check to allow
any type for <em>RGB</em>, but its being able to do this relies
upon fixes made in the ncurses library in mid-2019.</p>
<h3><a name="h3-config-config" id=
"h3-config-config">Configuration changes</a></h3>
<h4><a name="h4-config-major" id="h4-config-major">Major
changes</a></h4>
<p>There are no major changes. Several new options were added to
ease integration of packages with systems using different
versions of <em>GNAT</em> and <em>ncurses</em>. Also,
improvements were made to configure checks.</p>
<h4><a name="h4-config-options" id=
"h4-config-options">Configuration options</a></h4>
<p>There are a few new/modified configure options:</p>
<dl>
<dt><tt>--with-config-suffix</tt>
</dt>
<dd>
<p>helps work around a filename conflict with Debian packages
versus test-packages.</p>
</dd>
<dt><tt>--with-ada-libname</tt>
</dt>
<dd>
<p>allows one to rename the &ldquo;AdaCurses&rdquo; library
(at least one packager prefers a lowercase name).</p>
</dd>
<dt><tt>--with-fallbacks</tt>
</dt>
<dd>
<p>now ensures there is a value, and adds the fallback
information to top-level Makefile summary.</p>
</dd>
<dt><tt>--with-pcre2</tt>
</dt>
<dd>
<p>check for pcre-posix library to help with MinGW port.</p>
</dd>
<dt><tt>--with-tic-path</tt> and<br></dt>
<dt><tt>--with-infocmp-path</tt>
</dt>
<dd>
<p>help work around problems building fallback source using
pre-6.0 tic/infocmp.</p>
</dd>
<dt><tt>--with-versioned-syms</tt>
</dt>
<dd>
<p>option value can now be a relative pathname.</p>
</dd>
</dl>
<h3><a name="h3-portability" id="h3-portability">Portability</a></h3>
<p>Many of the portability changes are implemented via the
configure script:</p>
<ul>
<li>
<p>ignore <a href=
"/ncurses/man/ncurses.3x.html#h3-TERMINFO"><tt>$TERMINFO</tt></a>
as a default value in configure script if it came from the
<tt>infocmp</tt> <strong><tt>-Q</tt></strong> option.</p>
</li>
<li>
<p>distinguish gcc from icc and clang when the
<tt>--enable-warnings</tt> option is not used, to avoid
unnecessary warnings about unrecognized inline options</p>
</li>
<li>
<p>consistently prepend new libraries as they are found
during configuration, rather than relying upon the linker to
resolve order dependencies of libraries.</p>
</li>
<li>
<p>modified configure scripts to reduce relinking/ranlib
during library install :</p>
<ul>
<li>use &ldquo;<tt>install -p</tt>&rdquo; when available,
to avoid need for ranlib of static libraries.</li>
<li>scripts which use
&ldquo;<tt>--disable-relink</tt>;&rdquo; add a 1-second
sleep to work around tools which use whole-second
timestamps, e.g., in <tt>utime</tt> rather than the actual
file system resolution.</li>
</ul>
</li>
<li>
<p id="getenv-check">add configure check for <a href=
"#getenv-fixes"><tt>getenv</tt></a> to work around
implementation shown in Emscripten which overwrites the
previous return value on each call.</p>
<p>Use that to optionally suppress <tt>START_TRACE</tt>
macro, whose call to <tt>getenv</tt> may not work
properly</p>
</li>
<li>
<p>change target configure level for <tt>_XOPEN_SOURCE</tt>
to 600 to address use of <tt>vsscanf</tt> and
<tt>setenv</tt>.</p>
</li>
<li>
<p>reduce use of <tt>_GNU_SOURCE</tt> for current glibc where
<tt>_DEFAULT_SOURCE</tt> combines with
<tt>_XOPEN_SOURCE</tt></p>
<p>Allow for Cygwin's newlib when checking for the
_DEFAULT_SOURCE symbol.</p>
<p>MidnightBSD is now checked for the
<tt>_XOPEN_SOURCE</tt>-related definitions.</p>
</li>
<li>
<p>If the check for <tt>va_copy</tt> or <tt>__va_copy</tt>
fails,</p>
<ul>
<li>configure now tries copying the pointers for
<tt>va_list</tt>, or as an array.</li>
<li>alternatively, it checks for
<tt>__builtin_va_copy</tt>(), which could be used with AIX
<tt>xlc</tt> in <em>c89</em> mode.</li>
</ul>
</li>
<li>
<p>several changes to support a port to Ultrix 3.1:</p>
<ul>
<li>check if "b" binary feature of fopen works</li>
<li>check for missing feature of locale.h</li>
<li>add fallback for strstr() in test-programs</li>
<li>add fallback for STDOUT_FILENO in test-programs</li>
</ul>
</li>
<li>
<p>The <em>test/configure</em> script (used for <a href=
"/ncurses/ncurses-examples.html"><em>ncurses-examples</em></a>)
is improved:</p>
<ul>
<li>work around non-ncurses termcap.h file, e.g., in
Slackware.</li>
<li>check for <a href=
"/ncurses/man/curs_variables.3x.html#h3-TABSIZE"><tt>TABSIZE</tt></a>
variable.</li>
<li>checks for the X11/Intrinsic.h header, accommodate
recent MacOS changes which largely emptied
<tt>/usr/include</tt>.</li>
</ul>
</li>
</ul>
<p>Here are some of the other portability fixes:</p>
<ul>
<li>
<p>added dummy "check" rule in top-level and test-Makefile to
simplify building test-packages for ArchLinux.</p>
</li>
<li>
<p>dropped library-dependency on psapi for MinGW port, since
win_driver.c defines <tt>PSAPI_VERSION</tt> to 2, making it
use <tt>GetProcessImageFileName</tt> from kernel32.dll</p>
</li>
<li>
<p>made build-fixes for configuration using --program-suffix
with Ada95, noticed with MacOS but applicable to other
platforms without libpanelw, etc.</p>
</li>
<li>
<p>modified ncurses/Makefile.in to fix a case where
Debian/testing changes to the ld --as-needed configuration
broke ncurses-examples test packages.</p>
</li>
<li>
<p>used <tt>_WIN32</tt>/<tt>_WIN64</tt> in preference to
<tt>__MINGW32__</tt>/<tt>__MINGW64__</tt> symbols to simplify
building with Microsoft Visual C++, since the former are
defined in both compiler configurations.</p>
</li>
</ul>
<hr>
<h2><a name="h2-features" id="h2-features">Features of
<span class="main-name">ncurses</span></a></h2>
<p>The <span class="main-name">ncurses</span> package is fully
upward-compatible with SVr4 (System V Release 4) curses:</p>
<ul>
<li>
<p>All of the SVr4 calls have been implemented (and are
documented).</p>
</li>
<li>
<p><span class="main-name">ncurses</span> supports all of the
for SVr4 curses features including keyboard mapping, color,
forms-drawing with ACS characters, and automatic recognition
of keypad and function keys.</p>
</li>
<li>
<p><span class="main-name">ncurses</span> provides these SVr4
add-on libraries (not part of X/Open Curses):</p>
<ul>
<li>
<p>the panels library, supporting a stack of windows with
backing store.</p>
</li>
<li>
<p>the menus library, supporting a uniform but flexible
interface for menu programming.</p>
</li>
<li>
<p>the form library, supporting data collection through
on-screen forms.</p>
</li>
</ul>
</li>
<li>
<p><span class="main-name">ncurses</span>'s terminal database
is fully compatible with that used by SVr4 curses.</p>
<ul>
<li>
<p><span class="main-name">ncurses</span> supports
user-defined capabilities which it can see, but which are
hidden from SVr4 curses applications using the
<em>same</em> terminal database.</p>
</li>
<li>
<p>It can be optionally configured to match the format
used in related systems such as AIX and Tru64.</p>
</li>
<li>
<p>Alternatively, <span class="main-name">ncurses</span>
can be configured to use hashed databases rather than the
directory of files used by SVr4 curses.</p>
</li>
</ul>
</li>
<li>
<p>The <span class="main-name">ncurses</span> utilities have
options to allow you to filter terminfo entries for use with
less capable <em>curses</em>/<em>terminfo</em> versions such
as the HP/UX and AIX ports.</p>
</li>
</ul>
<p>The <span class="main-name">ncurses</span> package also has
many useful extensions over SVr4:</p>
<ul>
<li>
<p>The API is 8-bit clean and base-level conformant with the
X/OPEN curses specification, XSI curses (that is, it
implements all BASE level features, and most EXTENDED
features). It includes many function calls not supported
under SVr4 curses (but portability of all calls is documented
so you can use the SVr4 subset only).</p>
</li>
<li>
<p>Unlike SVr3 curses, <span class="main-name">ncurses</span>
can write to the rightmost-bottommost corner of the screen if
your terminal has an insert-character capability.</p>
</li>
<li>
<p>Ada95 and C++ bindings.</p>
</li>
<li>
<p>Support for mouse event reporting with X Window xterm and
FreeBSD and OS/2 console windows.</p>
</li>
<li>
<p>Extended mouse support via Alessandro Rubini's gpm
package.</p>
</li>
<li>
<p>The function <code>wresize</code> allows you to resize
windows, preserving their data.</p>
</li>
<li>
<p>The function <code>use_default_colors</code> allows you to
use the terminal's default colors for the default color pair,
achieving the effect of transparent colors.</p>
</li>
<li>
<p>The functions <code>keyok</code> and
<code>define_key</code> allow you to better control the use
of function keys, e.g., disabling the <span class=
"main-name">ncurses</span> KEY_MOUSE, or by defining more
than one control sequence to map to a given key code.</p>
</li>
<li>
<p>Support for 256-color terminals, such as modern xterm.</p>
</li>
<li>
<p>Support for 16-color terminals, such as <em>aixterm</em>
and <em>modern xterm</em>.</p>
</li>
<li>
<p>Better cursor-movement optimization. The package now
features a cursor-local-movement computation more efficient
than either BSD's or System V's.</p>
</li>
<li>
<p>Super hardware scrolling support. The screen-update code
incorporates a novel, simple, and cheap algorithm that
enables it to make optimal use of hardware scrolling,
line-insertion, and line-deletion for screen-line movements.
This algorithm is more powerful than the 4.4BSD curses
<code>quickch</code> routine.</p>
</li>
<li>
<p>Real support for terminals with the magic-cookie glitch.
The screen-update code will refrain from drawing a highlight
if the magic- cookie unattributed spaces required just before
the beginning and after the end would step on a non-space
character. It will automatically shift highlight boundaries
when doing so would make it possible to draw the highlight
without changing the visual appearance of the screen.</p>
</li>
<li>
<p>It is possible to generate the library with a list of
pre-loaded fallback entries linked to it so that it can serve
those terminal types even when no terminfo tree or termcap
file is accessible (this may be useful for support of
screen-oriented programs that must run in single-user
mode).</p>
</li>
<li>
<p>The <a href="@HOMEPAGE@/man/tic.1m.html"><span class=
"part-name">tic</span></a>/<a href=
"@HOMEPAGE@/man/captoinfo.1m.html">captoinfo</a> utility
provided with <span class="main-name">ncurses</span> has the
ability to translate many termcaps from the XENIX, IBM and
AT&amp;T extension sets.</p>
</li>
<li>
<p>A BSD-like <a href=
"@HOMEPAGE@/man/tset.1.html"><span class=
"part-name">tset</span></a> utility is provided.</p>
</li>
<li>
<p>The <span class="main-name">ncurses</span> library and
utilities will automatically read terminfo entries from
$HOME/.terminfo if it exists, and compile to that directory
if it exists and the user has no write access to the system
directory. This feature makes it easier for users to have
personal terminfo entries without giving up access to the
system terminfo directory.</p>
</li>
<li>
<p>You may specify a path of directories to search for
compiled descriptions with the environment variable
TERMINFO_DIRS (this generalizes the feature provided by
TERMINFO under stock System V.)</p>
</li>
<li>
<p>In terminfo source files, use capabilities may refer not
just to other entries in the same source file (as in System
V) but also to compiled entries in either the system terminfo
directory or the user's $HOME/.terminfo directory.</p>
</li>
<li>
<p>The table-of-entries utility <a href=
"@HOMEPAGE@/man/toe.1m.html"><span class=
"part-name">toe</span></a> makes it easy for users to see
exactly what terminal types are available on the system.</p>
</li>
<li>
<p>The library meets the XSI requirement that every macro
entry point have a corresponding function which may be linked
(and will be prototype-checked) if the macro definition is
disabled with <code>#undef</code>.</p>
</li>
<li>
<p>Extensive documentation is provided (see the <em><a href=
"@HOMEPAGE@/ncurses.faq.html#additional_reading">Additional
Reading</a></em> section of the <em><a href=
"@HOMEPAGE@/ncurses.faq.html"><span class=
"main-name">ncurses</span> FAQ</a></em> for online
documentation).</p>
</li>
</ul>
<h2><a name="h2-who-uses" id="h2-who-uses">Applications using
<span class="main-name">ncurses</span></a></h2>
<p>The <span class="main-name">ncurses</span> distribution
includes a selection of test programs (including a few games).
These are available separately as <a href=
"@HOMEPAGE@/ncurses-examples.html">ncurses-examples</a></p>
<p>The ncurses library has been tested with a wide variety of
applications including:</p>
<blockquote>
<dl>
<dt><span class="part-name">aptitude</span>
</dt>
<dd>
<p>FrontEnd to Apt, the debian package manager</p>
<p><a href=
"https://wiki.debian.org/Aptitude">https://wiki.debian.org/Aptitude</a></p>
</dd>
<dt><span class="part-name">cdk</span>
</dt>
<dd>
<p>Curses Development Kit</p>
<p><a href="@WEBSITE@/cdk/">@WEBSITE@/cdk/</a><br>
</p>
</dd>
<dt><span class="part-name">ded</span>
</dt>
<dd>
<p>directory-editor</p>
<p><a href="@WEBSITE@/ded/">@WEBSITE@/ded/</a></p>
</dd>
<dt><span class="part-name">dialog</span>
</dt>
<dd>
<p>the underlying application used in Slackware's setup,
and the basis for similar install/configure applications on
many systems.</p>
<p><a href="@WEBSITE@/dialog/">@WEBSITE@/dialog/</a></p>
</dd>
<dt><span class="part-name">lynx</span>
</dt>
<dd>
<p>the text WWW browser</p>
<p><a href=
"https://lynx.invisible-island.net/">https://lynx.invisible-island.net/</a></p>
</dd>
<dt><span class="part-name">mutt</span>
</dt>
<dd>
<p>mail utility</p>
<p><a href="http://www.mutt.org/">http://www.mutt.org/</a></p>
</dd>
<dt><span class="part-name">ncftp</span>
</dt>
<dd>
<p>file-transfer utility</p>
<p><a href=
"https://www.ncftp.com/">https://www.ncftp.com/</a></p>
</dd>
<dt><span class="part-name">nvi</span>
</dt>
<dd>
<p>New vi uses ncurses.</p>
<p><a href=
"https://sites.google.com/a/bostic.com/keithbostic/vi">https://sites.google.com/a/bostic.com/keithbostic/vi</a><br>
</p>
</dd>
<dt><span class="part-name">ranger</span>
</dt>
<dd>
<p>A console file manager with VI key bindings in
<em>Python</em>.</p>
<p><a href=
"https://ranger.github.io/">https://ranger.github.io/</a></p>
</dd>
<dt><span class="part-name">tin</span>
</dt>
<dd>
<p>newsreader, supporting color, MIME</p>
<p><a href="http://www.tin.org/">http://www.tin.org/</a></p>
</dd>
<dt><span class="part-name">vifm</span>
</dt>
<dd>
<p>File manager with vi like keybindings</p>
<p><a href="https://vifm.info/">https://vifm.info/</a></p>
</dd>
</dl>
</blockquote>
<p>as well as some that use <span class=
"main-name">ncurses</span> for the terminfo support alone:</p>
<blockquote>
<dl>
<dt><span class="part-name">minicom</span>
</dt>
<dd>
<p>terminal emulator for serial modem connections</p>
<p><a href=
"https://alioth.debian.org/projects/minicom/">https://alioth.debian.org/projects/minicom/</a></p>
</dd>
<dt><span class="part-name">mosh</span>
</dt>
<dd>
<p>a replacement for <code>ssh</code>.</p>
<p><a href=
"https://mosh.mit.edu/">https://mosh.mit.edu/</a></p>
</dd>
<dt><span class="part-name">tack</span>
</dt>
<dd>
<p>terminfo action checker</p>
<p><a href="@HOMEPAGE@/tack.html">@HOMEPAGE@/tack.html</a></p>
</dd>
<dt><span class="part-name">tmux</span>
</dt>
<dd>
<p>terminal multiplexor</p>
<p><a href=
"https://github.com/tmux/tmux/wiki">https://github.com/tmux/tmux/wiki</a></p>
</dd>
<dt><span class="part-name">vile</span>
</dt>
<dd>
<p><em>vi-like-emacs</em> may be built to use the terminfo,
termcap or curses interfaces.</p>
<p><a href="@WEBSITE@/vile/">@WEBSITE@/vile/</a></p>
</dd>
</dl>
</blockquote>
<p>and finally, those which use only the termcap interface:</p>
<blockquote>
<dl>
<dt><span class="part-name">emacs</span>
</dt>
<dd>
<p>text editor</p>
<p><a href=
"https://www.gnu.org/software/emacs/">https://www.gnu.org/software/emacs/</a></p>
</dd>
<dt><span class="part-name">less</span>
</dt>
<dd>
<p>The most commonly used <em>pager</em> (a program that
displays text files).</p>
<p><a href=
"http://www.greenwoodsoftware.com/less/">http://www.greenwoodsoftware.com/less/</a></p>
</dd>
<dt><span class="part-name">screen</span>
</dt>
<dd>
<p>terminal multiplexor</p>
<p><a href=
"https://www.gnu.org/software/screen/">https://www.gnu.org/software/screen/</a></p>
</dd>
<dt><span class="part-name">vim</span>
</dt>
<dd>
<p>text editor</p>
<p><a href="https://www.vim.org/">https://www.vim.org/</a></p>
</dd>
</dl>
</blockquote>
<h2><a name="h2-development" id="h2-development">Development
activities</a></h2>
<p>Zeyd Ben-Halim started <span class="main-name">ncurses</span>
from a previous package pcurses, written by Pavel Curtis. Eric S.
Raymond continued development. J&uuml;rgen Pfeifer wrote most of
the form and menu libraries.</p>
<p>Ongoing development work is done by <a href=
"mailto:dickey@invisible-island.net">Thomas E. Dickey</a>. Thomas
E. Dickey has acted as the maintainer for the Free Software
Foundation, which holds a <a href=
"@HOMEPAGE@/ncurses-license.html">copyright on ncurses</a> for
releases 4.2 through 6.1. Following the release of ncurses 6.1,
effective as of release 6.2, copyright for ncurses reverted to
Thomas E. Dickey (see the <a href=
"@HOMEPAGE@/ncurses.faq.html#relicensed">ncurses FAQ</a> for
additional information).</p>
<p>Contact the current maintainers at</p>
<blockquote>
<a href="mailto:bug-ncurses@gnu.org">bug-ncurses@gnu.org</a>
</blockquote>
<p>To join the ncurses mailing list, please write email to</p>
<blockquote>
<a href=
"mailto:bug-ncurses-request@gnu.org">bug-ncurses-request@gnu.org</a>
</blockquote>
containing the line:
<blockquote>
<p><code>subscribe</code>
<em>&lt;name&gt;@&lt;host.domain&gt;</em></p>
</blockquote>
<p>This list is open to anyone interested in helping with the
development and testing of this package.</p>
<p>Beta versions of <span class="main-name">ncurses</span> are
made available at</p>
<blockquote>
<p><a href=
"ftp://ftp.invisible-island.net/ncurses/current/">ftp://ftp.invisible-island.net/ncurses/current/</a>
and<br>
<a href=
"https://invisible-mirror.net/archives/ncurses/current/">https://invisible-mirror.net/archives/ncurses/current/</a>&nbsp;.</p>
</blockquote>
<p>Patches to the current release are made available at</p>
<blockquote>
<p><a href=
"ftp://ftp.invisible-island.net/ncurses/6.1/">ftp://ftp.invisible-island.net/ncurses/6.1/</a>
and<br>
<a href=
"https://invisible-mirror.net/archives/ncurses/6.1/">https://invisible-mirror.net/archives/ncurses/6.1/</a>&nbsp;.</p>
</blockquote>
<p>There is an archive of the mailing list here:</p>
<blockquote>
<p><a href=
"http://lists.gnu.org/archive/html/bug-ncurses">http://lists.gnu.org/archive/html/bug-ncurses</a>
(also <a href=
"https://lists.gnu.org/archive/html/bug-ncurses">https</a>)</p>
</blockquote>
<h2><a name="h2-this-stuff" id="h2-this-stuff">Related
resources</a></h2>
<p>The release notes make scattered references to these pages,
which may be interesting by themselves:</p>
<ul>
<li><a href="@HOMEPAGE@/ncurses-license.html"><span class=
"main-name">ncurses</span> licensing</a></li>
<li><a href="@HOMEPAGE@/ncurses-mapsyms.html">Symbol versioning
in <span class="main-name">ncurses</span></a></li>
<li><a href="@HOMEPAGE@/ncurses-slang.html">Comments on
<span class="main-name">ncurses</span> versus <span class=
"main-name">slang</span> (S-Lang)</a></li>
<li><a href="@HOMEPAGE@/tack.html">tack &ndash; terminfo action
checker</a></li>
<li><a href="@HOMEPAGE@/tctest.html">tctest &ndash; termcap
library checker</a></li>
<li><a href=
"@HOMEPAGE@/ncurses.html#download_database">Terminal
Database</a></li>
</ul>
<h2><a name="h2-other-stuff" id="h2-other-stuff">Other
resources</a></h2>
<p>The distribution provides a newer version of the
terminfo-format terminal description file once maintained by
<a href="http://www.catb.org/~esr/terminfo/">Eric
Raymond</a>&nbsp;. Unlike the older version, the termcap and
terminfo data are provided in the same file, which also provides
several user-definable extensions beyond the X/Open
specification.</p>
<p>You can find lots of information on terminal-related topics
not covered in the terminfo file at <a href=
"http://web.archive.org/web/*/http://www.cs.utk.edu/~shuford/terminal">
Richard Shuford's archive</a>&nbsp;. The collection of computer
manuals at <a href=
"http://www.bitsavers.org/pdf/">bitsavers.org</a> has also been
useful.</p>
<div class="nav">
<ul>
<li><a href="#h2-overview">Overview</a></li>
<li>
<a href="#h2-release-notes">Release Notes</a>
<ul>
<li>
<a href="#h3-library">Library improvements</a>
<ul>
<li><a href="#h4-new-library">New features</a></li>
<li><a href="#h4-fixes-library">Other
improvements</a></li>
</ul>
</li>
<li>
<a href="#h3-programs">Program improvements</a>
<ul>
<li><a href="#h4-utilities">Utilities</a></li>
<li><a href="#h4-examples">Examples</a></li>
</ul>
</li>
<li><a href="#h3-database">Terminal database</a></li>
<li><a href="#h3-documentation">Documentation</a></li>
<li><a href="#h3-bug-fixes">Interesting bug-fixes</a></li>
<li>
<a href="#h3-config-config">Configuration changes</a>
<ul>
<li><a href="#h4-config-major">Major changes</a></li>
<li><a href="#h4-config-options">Configuration
options</a></li>
</ul>
</li>
<li><a href="#h3-portability">Portability</a></li>
</ul>
</li>
<li><a href="#h2-features">Features of <span class=
"main-name">ncurses</span></a></li>
<li><a href="#h2-who-uses">Applications using <span class=
"main-name">ncurses</span></a></li>
<li><a href="#h2-development">Development activities</a></li>
<li><a href="#h2-this-stuff">Related resources</a></li>
<li><a href="#h2-other-stuff">Other resources</a></li>
</ul>
</div>
</body>
</html>
diff --git a/contrib/ncurses/configure b/contrib/ncurses/configure
index 06f344f3e69a..af702ddda06e 100755
--- a/contrib/ncurses/configure
+++ b/contrib/ncurses/configure
@@ -1,28033 +1,30192 @@
#! /bin/sh
-# From configure.in Revision: 1.697 .
+# From configure.in Revision: 1.729 .
# Guess values for system-dependent variables and create Makefiles.
-# Generated by Autoconf 2.52.20200111.
+# Generated by Autoconf 2.52.20210105.
#
+# Copyright 2003-2020,2021 Thomas E. Dickey
# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
# Avoid depending upon Character Ranges.
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
# Sed expression to map a string onto a valid variable name.
as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
set -o posix
fi
# Name of the executable.
as_me=`echo "$0" |sed 's,.*[\\/],,'`
if expr a : '\(a\)' >/dev/null 2>&1; then
as_expr=expr
else
as_expr=false
fi
rm -f conf$$ conf$$.exe conf$$.file
echo >conf$$.file
if ln -s conf$$.file conf$$ 2>/dev/null; then
# We could just check for DJGPP; but this test a) works b) is more generic
# and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
if test -f conf$$.exe; then
# Don't use ln at all; we don't have any links
as_ln_s='cp -p'
else
as_ln_s='ln -s'
fi
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -p'
fi
rm -f conf$$ conf$$.exe conf$$.file
as_executable_p="test -f"
# Support unset when possible.
if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
- as_unset=unset
+ as_unset="unset"
else
- as_unset=false
+ as_unset="false"
fi
# NLS nuisances.
$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
# IFS
# We need space, tab and new line, in precisely that order.
as_nl='
'
IFS=" $as_nl"
# CDPATH.
$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
# Name of the host.
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
# so uname gets run too.
ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
exec 6>&1
#
# Initializations.
#
ac_default_prefix=/usr/local
cross_compiling=no
subdirs=
-MFLAGS= MAKEFLAGS=
+MFLAGS=
+MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}
# Maximum number of lines to put in a shell here document.
# This variable seems obsolete. It should probably be removed, and
# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
+: "${ac_max_here_lines=38}"
ac_unique_file="ncurses/base/lib_initscr.c"
# Factoring default headers for most tests.
ac_includes_default="\
#include <stdio.h>
#if HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#if HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
#if STDC_HEADERS
# include <stdlib.h>
# include <stddef.h>
#else
# if HAVE_STDLIB_H
# include <stdlib.h>
# endif
#endif
#if HAVE_STRING_H
# if !STDC_HEADERS && HAVE_MEMORY_H
# include <memory.h>
# endif
# include <string.h>
#endif
#if HAVE_STRINGS_H
# include <strings.h>
#endif
#if HAVE_INTTYPES_H
# include <inttypes.h>
#else
# if HAVE_STDINT_H
# include <stdint.h>
# endif
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif"
# Initialize some variables set by options.
ac_init_help=
ac_init_version=false
# The variables have the same names as the options, with
# dashes changed to underlines.
cache_file=/dev/null
exec_prefix=NONE
no_create=
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
verbose=
x_includes=NONE
x_libraries=NONE
# Installation directory options.
# These are left unexpanded so users can "make install exec_prefix=/foo"
# and all the variables that are supposed to be based on exec_prefix
# by default will actually change.
# Use braces instead of parens because sh, perl, etc. also accept them.
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datarootdir='${prefix}/share'
datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
runstatedir='${localstatedir}/run'
libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
infodir='${datarootdir}/info'
mandir='${datarootdir}/man'
# Identity of this package.
PACKAGE_NAME=
PACKAGE_TARNAME=
PACKAGE_VERSION=
PACKAGE_STRING=
PACKAGE_BUGREPORT=
ac_prev=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval "$ac_prev=\$ac_option"
ac_prev=
continue
fi
ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
# Accept the important Cygnus configure options, so we can diagnose typos.
- case $ac_option in
+ case "$ac_option" in
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
bindir=$ac_optarg ;;
-build | --build | --buil | --bui | --bu)
ac_prev=build_alias ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
build_alias=$ac_optarg ;;
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
cache_file=$ac_optarg ;;
--config-cache | -C)
cache_file=config.cache ;;
-datadir | --datadir | --datadi | --datad | --data | --dat | --da)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
| --da=*)
datadir=$ac_optarg ;;
-datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
| --dataroo | --dataro | --datar)
ac_prev=datarootdir ;;
-datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
| --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
datarootdir=$ac_optarg ;;
-disable-* | --disable-*)
ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid feature name: $ac_feature" >&2
{ (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ ac_feature=`echo "$ac_feature" | sed 's/-/_/g'`
eval "enable_$ac_feature=no" ;;
-enable-* | --enable-*)
ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid feature name: $ac_feature" >&2
{ (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- case $ac_option in
+ ac_feature=`echo "$ac_feature" | sed 's/-/_/g'`
+ case "$ac_option" in
*=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
*) ac_optarg=yes ;;
esac
eval "enable_$ac_feature='$ac_optarg'" ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
| --exec | --exe | --ex)
ac_prev=exec_prefix ;;
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
exec_prefix=$ac_optarg ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
-help | --help | --hel | --he | -h)
ac_init_help=long ;;
-help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
ac_init_help=recursive ;;
-help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
ac_init_help=short ;;
-host | --host | --hos | --ho)
ac_prev=host_alias ;;
-host=* | --host=* | --hos=* | --ho=*)
host_alias=$ac_optarg ;;
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
| --includ=* | --inclu=* | --incl=* | --inc=*)
includedir=$ac_optarg ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
infodir=$ac_optarg ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
libdir=$ac_optarg ;;
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
| --libexe | --libex | --libe)
ac_prev=libexecdir ;;
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
| --libexe=* | --libex=* | --libe=*)
libexecdir=$ac_optarg ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst \
| --locals | --local | --loca | --loc | --lo)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
localstatedir=$ac_optarg ;;
-runstatedir | --runstatedir | --runstatedi | --runstated \
| --runstate | --runstat | --runsta | --runst \
| --runs | --run | --ru)
ac_prev=runstatedir ;;
-runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
| --runstate=* | --runstat=* | --runsta=* | --runst=* \
| --runs=* | --run=* | --ru=*)
runstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
mandir=$ac_optarg ;;
-nfp | --nfp | --nf)
# Obsolete; use --without-fp.
with_fp=no ;;
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
no_recursion=yes ;;
-oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
| --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
| --oldin | --oldi | --old | --ol | --o)
ac_prev=oldincludedir ;;
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
oldincludedir=$ac_optarg ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
prefix=$ac_optarg ;;
-program-prefix | --program-prefix | --program-prefi | --program-pref \
| --program-pre | --program-pr | --program-p)
ac_prev=program_prefix ;;
-program-prefix=* | --program-prefix=* | --program-prefi=* \
| --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
program_prefix=$ac_optarg ;;
-program-suffix | --program-suffix | --program-suffi | --program-suff \
| --program-suf | --program-su | --program-s)
ac_prev=program_suffix ;;
-program-suffix=* | --program-suffix=* | --program-suffi=* \
| --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
program_suffix=$ac_optarg ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
| --program-transform-n | --program-transform- \
| --program-transform | --program-transfor \
| --program-transfo | --program-transf \
| --program-trans | --program-tran \
| --progr-tra | --program-tr | --program-t)
ac_prev=program_transform_name ;;
-program-transform-name=* | --program-transform-name=* \
| --program-transform-nam=* | --program-transform-na=* \
| --program-transform-n=* | --program-transform-=* \
| --program-transform=* | --program-transfor=* \
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name=$ac_optarg ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
sbindir=$ac_optarg ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
| --sharedst | --shareds | --shared | --share | --shar \
| --sha | --sh)
ac_prev=sharedstatedir ;;
-sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
sharedstatedir=$ac_optarg ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
site=$ac_optarg ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
srcdir=$ac_optarg ;;
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
| --syscon | --sysco | --sysc | --sys | --sy)
ac_prev=sysconfdir ;;
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
sysconfdir=$ac_optarg ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
ac_prev=target_alias ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
target_alias=$ac_optarg ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
-version | --version | --versio | --versi | --vers | -V)
ac_init_version=: ;;
-with-* | --with-*)
ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid package name: $ac_package" >&2
{ (exit 1); exit 1; }; }
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- case $ac_option in
+ ac_package=`echo "$ac_package" | sed 's/-/_/g'`
+ case "$ac_option" in
*=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
*) ac_optarg=yes ;;
esac
eval "with_$ac_package='$ac_optarg'" ;;
-without-* | --without-*)
ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid package name: $ac_package" >&2
{ (exit 1); exit 1; }; }
- ac_package=`echo $ac_package | sed 's/-/_/g'`
+ ac_package=`echo "$ac_package" | sed 's/-/_/g'`
eval "with_$ac_package=no" ;;
--x)
# Obsolete; use --with-x.
with_x=yes ;;
-x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
| --x-incl | --x-inc | --x-in | --x-i)
ac_prev=x_includes ;;
-x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
| --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
x_includes=$ac_optarg ;;
-x-libraries | --x-libraries | --x-librarie | --x-librari \
| --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
ac_prev=x_libraries ;;
-x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries=$ac_optarg ;;
-*) { echo "$as_me: error: unrecognized option: $ac_option
Try \`$0 --help' for more information." >&2
{ (exit 1); exit 1; }; }
;;
*=*)
ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
# Reject names that are not valid shell variable names.
expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid variable name: $ac_envvar" >&2
{ (exit 1); exit 1; }; }
ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
eval "$ac_envvar='$ac_optarg'"
- export $ac_envvar ;;
+ export "$ac_envvar" ;;
*)
# FIXME: should be removed in autoconf 3.0.
echo "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ : "${build_alias=$ac_option}" "${host_alias=$ac_option}" "${target_alias=$ac_option}"
;;
esac
done
if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ ac_option=--`echo "$ac_prev" | sed 's/_/-/g'`
{ echo "$as_me: error: missing argument to $ac_option" >&2
{ (exit 1); exit 1; }; }
fi
# Be sure to have absolute paths.
for ac_var in exec_prefix prefix
do
- eval ac_val=$`echo $ac_var`
- case $ac_val in
+ eval ac_val=$`echo "$ac_var"`
+ case "$ac_val" in
[\\/$]* | ?:[\\/]* | NONE | '' ) ;;
*) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
{ (exit 1); exit 1; }; };;
esac
done
# Be sure to have absolute paths.
for ac_var in bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir \
localstatedir libdir includedir oldincludedir infodir mandir
do
- eval ac_val=$`echo $ac_var`
- case $ac_val in
+ eval ac_val=$`echo "$ac_var"`
+ case "$ac_val" in
[\\/$]* | ?:[\\/]* ) ;;
*) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
{ (exit 1); exit 1; }; };;
esac
done
# There might be people who depend on the old broken behavior: `$host'
# used to hold the argument of --host etc.
build=$build_alias
host=$host_alias
target=$target_alias
# FIXME: should be removed in autoconf 3.0.
if test "x$host_alias" != x; then
if test "x$build_alias" = x; then
cross_compiling=maybe
echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
If a cross compiler is detected then cross compile mode will be used." >&2
elif test "x$build_alias" != "x$host_alias"; then
cross_compiling=yes
fi
fi
ac_tool_prefix=
test -n "$host_alias" && ac_tool_prefix=$host_alias-
test "$silent" = yes && exec 6>/dev/null
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then its parent.
ac_prog=$0
ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
srcdir=$ac_confdir
- if test ! -r $srcdir/$ac_unique_file; then
+ if test ! -r "$srcdir/$ac_unique_file"; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
-if test ! -r $srcdir/$ac_unique_file; then
+if test ! -r "$srcdir/$ac_unique_file"; then
if test "$ac_srcdir_defaulted" = yes; then
{ echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2
{ (exit 1); exit 1; }; }
else
{ echo "$as_me: error: cannot find sources in $srcdir" >&2
{ (exit 1); exit 1; }; }
fi
fi
srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
ac_env_build_alias_set=${build_alias+set}
ac_env_build_alias_value=$build_alias
ac_cv_env_build_alias_set=${build_alias+set}
ac_cv_env_build_alias_value=$build_alias
ac_env_host_alias_set=${host_alias+set}
ac_env_host_alias_value=$host_alias
ac_cv_env_host_alias_set=${host_alias+set}
ac_cv_env_host_alias_value=$host_alias
ac_env_target_alias_set=${target_alias+set}
ac_env_target_alias_value=$target_alias
ac_cv_env_target_alias_set=${target_alias+set}
ac_cv_env_target_alias_value=$target_alias
ac_env_CC_set=${CC+set}
ac_env_CC_value=$CC
ac_cv_env_CC_set=${CC+set}
ac_cv_env_CC_value=$CC
ac_env_CFLAGS_set=${CFLAGS+set}
ac_env_CFLAGS_value=$CFLAGS
ac_cv_env_CFLAGS_set=${CFLAGS+set}
ac_cv_env_CFLAGS_value=$CFLAGS
ac_env_LDFLAGS_set=${LDFLAGS+set}
ac_env_LDFLAGS_value=$LDFLAGS
ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
ac_cv_env_LDFLAGS_value=$LDFLAGS
ac_env_CPPFLAGS_set=${CPPFLAGS+set}
ac_env_CPPFLAGS_value=$CPPFLAGS
ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
ac_cv_env_CPPFLAGS_value=$CPPFLAGS
ac_env_CPP_set=${CPP+set}
ac_env_CPP_value=$CPP
ac_cv_env_CPP_set=${CPP+set}
ac_cv_env_CPP_value=$CPP
ac_env_CXX_set=${CXX+set}
ac_env_CXX_value=$CXX
ac_cv_env_CXX_set=${CXX+set}
ac_cv_env_CXX_value=$CXX
ac_env_CXXFLAGS_set=${CXXFLAGS+set}
ac_env_CXXFLAGS_value=$CXXFLAGS
ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
ac_cv_env_CXXFLAGS_value=$CXXFLAGS
ac_env_CXXCPP_set=${CXXCPP+set}
ac_env_CXXCPP_value=$CXXCPP
ac_cv_env_CXXCPP_set=${CXXCPP+set}
ac_cv_env_CXXCPP_value=$CXXCPP
#
# Report the --help message.
#
if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<EOF
\`configure' configures this package to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print \`checking...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for \`--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or \`..']
EOF
cat <<EOF
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
By default, \`make install' will install all the files in
\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
an installation prefix other than \`$ac_default_prefix' using \`--prefix',
for instance \`--prefix=\$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--datarootdir=DIR read-only architecture-independent data [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--runstatedir=DIR extra definition of runtime data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--infodir=DIR info documentation [DATAROOTDIR/info]
--mandir=DIR man documentation [DATAROOTDIR/man]
EOF
cat <<\EOF
Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST build programs to run on HOST [BUILD]
--target=TARGET configure for building compilers for TARGET [HOST]
EOF
fi
if test -n "$ac_init_help"; then
cat <<\EOF
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--with-rel-version=XXX override derived release version
--with-abi-version=XXX override derived ABI version
--with-system-type=XXX test: override derived host system-type
--without-ada suppress check for Ada compiler, don't build demo
--without-cxx do not adjust ncurses bool to match C++
--without-cxx-binding do not build C++ binding and demo
--disable-db-install suppress install of terminal database
--without-manpages suppress install of manpages
--without-progs suppress build/install with programs (e.g., tic)
--without-tack suppress build/install with tack program
--without-tests suppress build/install with test-programs
--without-curses-h install curses.h as ncurses.h only
--with-config-suffix=X suffixes ncursesXX-config file
--with-pkg-config{=path} enable/disable use of pkg-config
--with-pkg-config-libdir=XXX use given directory for installing pc-files
--enable-pc-files generate and install .pc files for pkg-config
--with-pc-suffix suffixes pc-files
--enable-mixed-case tic should assume mixed-case filenames
--with-install-prefix prefixes actual install-location ($DESTDIR)
Build-Tools Needed to Compile Temporary Applications for Cross-compiling:
--with-build-cc=XXX the build C compiler ($BUILD_CC)
--with-build-cpp=XXX the build C preprocessor ($BUILD_CPP)
--with-build-cflags=XXX the build C compiler-flags ($BUILD_CFLAGS)
--with-build-cppflags=XXX the build C preprocessor-flags ($BUILD_CPPFLAGS)
--with-build-ldflags=XXX the build linker-flags ($BUILD_LDFLAGS)
--with-build-libs=XXX the build libraries (${BUILD_LIBS})
Options to Specify the Libraries Built/Used:
--disable-libtool-version enable to use libtool's incompatible naming scheme
--with-libtool generate libraries with libtool
--with-shared generate shared-libraries
--with-normal generate normal-libraries (default)
--with-debug generate debug-libraries (default)
--with-profile generate profile-libraries
--with-cxx-shared generate C++ shared-libraries
--with-lib-prefix override library-prefix
--with-termlib generate separate terminfo library
--with-ticlib generate separate tic library
--enable-rpath use rpath option when generating shared libraries
--disable-relink relink shared libraries during install
--with-shlib-version=X Specify rel or abi version for shared libs
--with-libtool-opts=XXX specify additional libtool options
--with-export-syms=XXX limit exported symbols using libtool
--with-versioned-syms=X markup versioned symbols using ld
--with-gpm use Alessandro Rubini's GPM library
--without-dlsym do not use dlsym() to load GPM dynamically
--with-pcre2 use PCRE2 for regular-expressions
--with-sysmouse use sysmouse (FreeBSD console)
--disable-lib-suffixes disable library suffixes
--disable-rpath-hack don't add rpath options for additional libraries
+ --disable-pkg-ldflags disable extra LDFLAGS for package-scripts
Fine-Tuning Your Configuration:
--with-extra-suffix=X append extra suffix to header/library paths
--disable-overwrite put headers in subdir, omit link to -lcurses
--disable-database do not use terminfo, only fallbacks/termcap
--with-database=XXX specify terminfo source to install
--with-hashed-db specify hashed-database library
--with-fallbacks=XXX specify list of fallback terminal descriptions
--with-tic-path=XXX specify path of tic for fallbacks
--with-infocmp-path=XXX specify path of infocmp for fallbacks
--without-xterm-new specify if xterm terminfo should be old version
--with-xterm-kbs=XXX specify if xterm backspace sends BS or DEL
--with-terminfo-dirs=XXX specify list of terminfo directories (default: DATADIR/terminfo)
--with-default-terminfo-dir=DIR default terminfo directory (default: DATADIR/terminfo)
--disable-big-core assume machine has little memory
--disable-big-strings assume compiler has only standard-size strings
--enable-termcap compile in termcap fallback support
--with-termpath=XXX specify list of termcap files (default: /etc/termcap:/usr/share/misc/termcap)
--enable-getcap fast termcap load, no xrefs to terminfo
--enable-getcap-cache cache translated termcaps in ~/.terminfo
--disable-home-terminfo drop ~/.terminfo from terminfo search-path
--disable-root-environ restrict environment when running as root
--enable-symlinks make tic use symbolic links not hard links
--enable-broken_linker compile with broken-linker support code
--enable-bsdpad recognize BSD-style prefix padding
--enable-widec compile with wide-char/UTF-8 code
--disable-lp64 allow chtype to be long (ignore _LP64)
--disable-largefile omit support for large files
--disable-tparm-varargs compile tparm() without varargs interface
--disable-tic-depends link tic library without explicit dependency on ncurses library
--disable-wattr-macros suppress wattr* macros to help with ncurses5/ncurses6 transition
--with-x11-rgb=FILE file containing X11 rgb information (EPREFIX/lib/X11/rgb.txt)
--with-bool=TYPE override fallback type of bool variable
--with-caps=alt compile with alternate Caps file
--with-chtype=TYPE override type of chtype
--with-ospeed=TYPE override type of ospeed variable
--with-mmask-t=TYPE override type of mmask_t
--with-ccharw-max=XXX override size CCHARW_MAX
--enable-signed-char compile using signed Boolean's in term.h
--with-tparm-arg=TYPE override parameter type of tparm
--with-rcs-ids compile-in RCS identifiers
Options to Specify How Manpages are Installed:
--with-manpage-format specify manpage-format: gzip/compress/BSDI/normal and
optionally formatted/catonly, e.g., gzip,formatted
--with-manpage-renames specify manpage-renaming
--with-manpage-aliases specify manpage-aliases using .so
--with-manpage-symlinks specify manpage-aliases using symlinks
--with-manpage-tbl specify manpage processing with tbl
Extensions:
--disable-ext-funcs disable function-extensions
--enable-sp-funcs enable SCREEN-extensions
--enable-term-driver enable terminal-driver
--enable-const compile with extra/non-standard const
--enable-ext-colors compile for 256-color support
--enable-ext-mouse compile for extended mouse-encoding
--enable-ext-putwin compile with extended putwin/screendump
--enable-no-padding compile with $NCURSES_NO_PADDING code
--enable-sigwinch compile with SIGWINCH handler
--enable-tcap-names compile with user-definable terminal capabilities
Reentrant Code:
--with-pthread use POSIX thread library
--enable-pthreads-eintr enable EINTR in wgetch with pthreads
--enable-weak-symbols enable weak-symbols for pthreads
--enable-reentrant compile with reentrant code
--enable-opaque-curses make curses WINDOW, etc., "opaque"
--enable-opaque-form make form-library structures "opaque"
--enable-opaque-menu make menu-library structures "opaque"
--enable-opaque-panel make panel-library structures "opaque"
--with-wrap-prefix=XXX override prefix used for public variables
Development Code:
--without-develop disable development options
--enable-hard-tabs compile with hard-tabs code
--enable-xmc-glitch compile with support for xmc (magic-cookie)
Experimental Code:
--disable-assumed-color do not assume anything about default-colors
--disable-hashmap compile without hashmap scrolling-optimization
--enable-colorfgbg compile-in experimental $COLORFGBG code
+ --enable-fvisibility compile with -fvisibility=hidden
--enable-interop compile-in interop bindings
--enable-safe-sprintf compile with experimental safe-sprintf code
--disable-scroll-hints compile without scroll-hints code
--enable-wgetch-events compile with wgetch-events code
+ --enable-exp-win32 compile with experimental-Windows driver
Testing/development Options:
--disable-echo do not display "compiling" commands
--disable-stripping do not strip (debug info) installed executables
- --enable-warnings build: turn on GCC compiler warnings
+ --enable-warnings test: turn on gcc compiler warnings
--enable-string-hacks work around bogus compiler/loader warnings
--enable-assertions test: turn on generation of assertion code
--with-dmalloc test: use Gray Watson's dmalloc library
--with-dbmalloc test: use Conor Cahill's dbmalloc library
--with-valgrind test: use valgrind
--disable-leaks test: free permanent memory, analyze leaks
--enable-expanded test: generate functions for certain macros
--disable-macros test: use functions rather than macros
--with-trace test: add trace() function to all models of ncurses
--disable-gnat-projects test: disable GNAT projects even if usable
Ada Binding Options:
--with-ada-compiler=CMD specify Ada95 compiler command (default gnatmake)
--with-ada-include=DIR Ada includes are in DIR (default: PREFIX/share/ada/adainclude)
--with-ada-objects=DIR Ada objects are in DIR (default: PREFIX/lib/ada/adalib)
--with-ada-sharedlib=soname build shared-library (requires GNAT projects)
--with-ada-libname=XXX override default Ada library-name
+ --with-form-libname=XXX override form basename of library
+ --with-menu-libname=XXX override menu basename of library
+ --with-panel-libname=XXX override panel basename of library
+ --with-cxx-libname=XXX override ncurses++ basename of library
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
headers in a nonstandard directory <include dir>
CPP C preprocessor
CXX C++ compiler command
CXXFLAGS C++ compiler flags
CXXCPP C++ preprocessor
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
EOF
fi
if test "$ac_init_help" = "recursive"; then
# If there are subdirs, report their specific --help.
ac_popdir=`pwd`
for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
- cd $ac_subdir
+ cd "$ac_subdir"
# A "../" for each directory in /$ac_subdir.
- ac_dots=`echo $ac_subdir |
+ ac_dots=`echo "$ac_subdir" |
sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
- case $srcdir in
+ case "$srcdir" in
.) # No --srcdir option. We are building in place.
- ac_sub_srcdir=$srcdir ;;
+ ac_sub_srcdir="$srcdir" ;;
[\\/]* | ?:[\\/]* ) # Absolute path.
- ac_sub_srcdir=$srcdir/$ac_subdir ;;
+ ac_sub_srcdir="$srcdir/$ac_subdir" ;;
*) # Relative path.
- ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
+ ac_sub_srcdir="$ac_dots$srcdir/$ac_subdir" ;;
esac
# Check for guested configure; otherwise get Cygnus style configure.
- if test -f $ac_sub_srcdir/configure.gnu; then
+ if test -f "$ac_sub_srcdir/configure.gnu"; then
echo
- $SHELL $ac_sub_srcdir/configure.gnu --help=recursive
- elif test -f $ac_sub_srcdir/configure; then
+ $SHELL "$ac_sub_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_sub_srcdir/configure"; then
echo
- $SHELL $ac_sub_srcdir/configure --help=recursive
- elif test -f $ac_sub_srcdir/configure.ac ||
- test -f $ac_sub_srcdir/configure.in; then
+ $SHELL "$ac_sub_srcdir/configure" --help=recursive
+ elif test -f "$ac_sub_srcdir/configure.ac" ||
+ test -f "$ac_sub_srcdir/configure.in"; then
echo
- $ac_configure --help
+ "$ac_configure" --help
else
echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
fi
- cd $ac_popdir
+ cd "$ac_popdir"
done
fi
test -n "$ac_init_help" && exit 0
-if $ac_init_version; then
+if "$ac_init_version"; then
cat <<\EOF
+Copyright 2003-2020,2021 Thomas E. Dickey
Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
EOF
exit 0
fi
exec 5>config.log
cat >&5 <<EOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.52.20200111. Invocation command line was
+generated by GNU Autoconf 2.52.20210105. Invocation command line was
$ $0 $@
EOF
{
cat <<_ASUNAME
## ---------- ##
## Platform. ##
## ---------- ##
hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
uname -m = `(uname -m) 2>/dev/null || echo unknown`
uname -r = `(uname -r) 2>/dev/null || echo unknown`
uname -s = `(uname -s) 2>/dev/null || echo unknown`
uname -v = `(uname -v) 2>/dev/null || echo unknown`
/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
PATH = $PATH
_ASUNAME
} >&5
cat >&5 <<EOF
## ------------ ##
## Core tests. ##
## ------------ ##
EOF
# Keep a trace of the command line.
# Strip out --no-create and --no-recursion so they do not pile up.
# Also quote any args containing shell meta-characters.
ac_configure_args=
ac_sep=
for ac_arg
do
- case $ac_arg in
+ case "$ac_arg" in
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c) ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
*" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
ac_sep=" " ;;
*) ac_configure_args="$ac_configure_args$ac_sep$ac_arg"
ac_sep=" " ;;
esac
# Get rid of the leading space.
done
# When interrupted or exit'd, cleanup temporary files, and complete
# config.log. We remove comments because anyway the quotes in there
# would cause problems or look ugly.
trap 'exit_status=$?
# Save into config.log some information that might help in debugging.
echo >&5
echo "## ----------------- ##" >&5
echo "## Cache variables. ##" >&5
echo "## ----------------- ##" >&5
echo >&5
# The following way of writing the cache mishandles newlines in values,
{
(set) 2>&1 |
case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
*ac_space=\ *)
sed -n \
"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
;;
*)
sed -n \
"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
;;
esac;
} >&5
sed "/^$/d" confdefs.h >conftest.log
if test -s conftest.log; then
echo >&5
echo "## ------------ ##" >&5
echo "## confdefs.h. ##" >&5
echo "## ------------ ##" >&5
echo >&5
cat conftest.log >&5
fi
(echo; echo) >&5
test "$ac_signal" != 0 &&
echo "$as_me: caught signal $ac_signal" >&5
echo "$as_me: exit $exit_status" >&5
rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files &&
exit $exit_status
' 0
for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' "$ac_signal"
done
ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -rf conftest* confdefs.h
# AIX cpp loses on an empty file, so make sure it contains at least a newline.
echo >confdefs.h
# Let the site file select an alternate cache file if it wants to.
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
else
CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
- { echo "$as_me:1059: loading site script $ac_site_file" >&5
+ { echo "$as_me:1069: loading site script $ac_site_file" >&5
echo "$as_me: loading site script $ac_site_file" >&6;}
cat "$ac_site_file" >&5
. "$ac_site_file"
fi
done
if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special
# files actually), so we avoid doing that.
if test -f "$cache_file"; then
- { echo "$as_me:1070: loading cache $cache_file" >&5
+ { echo "$as_me:1080: loading cache $cache_file" >&5
echo "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . $cache_file;;
*) . ./$cache_file;;
esac
fi
else
- { echo "$as_me:1078: creating cache $cache_file" >&5
+ { echo "$as_me:1088: creating cache $cache_file" >&5
echo "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
for ac_var in `(set) 2>&1 |
sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
eval ac_old_set=\$ac_cv_env_${ac_var}_set
eval ac_new_set=\$ac_env_${ac_var}_set
eval ac_old_val="\$ac_cv_env_${ac_var}_value"
eval ac_new_val="\$ac_env_${ac_var}_value"
- case $ac_old_set,$ac_new_set in
+ case "$ac_old_set,$ac_new_set" in
set,)
- { echo "$as_me:1094: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+ { echo "$as_me:1104: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { echo "$as_me:1098: error: \`$ac_var' was not set in the previous run" >&5
+ { echo "$as_me:1108: error: \`$ac_var' was not set in the previous run" >&5
echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
if test "x$ac_old_val" != "x$ac_new_val"; then
- { echo "$as_me:1104: error: \`$ac_var' has changed since the previous run:" >&5
+ { echo "$as_me:1114: error: \`$ac_var' has changed since the previous run:" >&5
echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- { echo "$as_me:1106: former value: $ac_old_val" >&5
+ { echo "$as_me:1116: former value: $ac_old_val" >&5
echo "$as_me: former value: $ac_old_val" >&2;}
- { echo "$as_me:1108: current value: $ac_new_val" >&5
+ { echo "$as_me:1118: current value: $ac_new_val" >&5
echo "$as_me: current value: $ac_new_val" >&2;}
ac_cache_corrupted=:
fi;;
esac
# Pass precious variables to config.status. It doesn't matter if
# we pass some twice (in addition to the command line arguments).
if test "$ac_new_set" = set; then
- case $ac_new_val in
+ case "$ac_new_val" in
*" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"`
ac_configure_args="$ac_configure_args '$ac_arg'"
;;
*) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val"
;;
esac
fi
done
-if $ac_cache_corrupted; then
- { echo "$as_me:1127: error: changes in the environment can compromise the build" >&5
+if "$ac_cache_corrupted"; then
+ { echo "$as_me:1137: error: changes in the environment can compromise the build" >&5
echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { echo "$as_me:1129: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+ { { echo "$as_me:1139: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
{ (exit 1); exit 1; }; }
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
case `echo "testing\c" 2>/dev/null; echo 1,2,3`,`echo -n testing 2>/dev/null; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C= # newlines do not sed ;-) only broken shells would use this case anyway
- ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+ *c*,-n*) ECHO_N=
+ ECHO_C= # newlines do not sed ;-) only broken shells would use this case anyway
+ ECHO_T=' '
+ ;;
+ *c*,* ) ECHO_N=-n
+ ECHO_C=
+ ECHO_T=
+ ;;
+ *) ECHO_N=
+ ECHO_C='\c'
+ ECHO_T=
+ ;;
esac
echo "#! $SHELL" >conftest.sh
echo "exit 0" >>conftest.sh
chmod +x conftest.sh
-if { (echo "$as_me:1150: PATH=\".;.\"; conftest.sh") >&5
+if { (echo "$as_me:1168: PATH=\".;.\"; conftest.sh") >&5
(PATH=".;."; conftest.sh) 2>&5
ac_status=$?
- echo "$as_me:1153: \$? = $ac_status" >&5
- (exit $ac_status); }; then
+ echo "$as_me:1171: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; then
ac_path_separator=';'
else
ac_path_separator=:
fi
PATH_SEPARATOR="$ac_path_separator"
rm -f conftest.sh
ac_config_headers="$ac_config_headers include/ncurses_cfg.h:include/ncurses_cfg.hin"
top_builddir=`pwd`
-echo "$as_me:1166: checking for egrep" >&5
+for ac_prog in ggrep grep
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1188: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_GREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$GREP"; then
+ ac_cv_prog_GREP="$GREP" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_GREP="$ac_prog"
+echo "$as_me:1203: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+GREP=$ac_cv_prog_GREP
+if test -n "$GREP"; then
+ echo "$as_me:1211: result: $GREP" >&5
+echo "${ECHO_T}$GREP" >&6
+else
+ echo "$as_me:1214: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$GREP" && break
+done
+test -n "$GREP" || GREP=": "
+
+echo "$as_me:1222: checking for egrep" >&5
echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
+if test "${ac_cv_path_EGREP+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if echo a | (grep -E '(a|b)') >/dev/null 2>&1
- then ac_cv_prog_egrep='grep -E'
- else ac_cv_prog_egrep='egrep'
- fi
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ for ac_prog in gegrep egrep
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1234: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_EGREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $EGREP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_EGREP="$EGREP" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ if $as_executable_p "$ac_dir/$ac_word"; then
+ ac_cv_path_EGREP="$ac_dir/$ac_word"
+ echo "$as_me:1251: found $ac_dir/$ac_word" >&5
+ break
+fi
+done
+
+ ;;
+esac
+fi
+EGREP=$ac_cv_path_EGREP
+
+if test -n "$EGREP"; then
+ echo "$as_me:1262: result: $EGREP" >&5
+echo "${ECHO_T}$EGREP" >&6
+else
+ echo "$as_me:1265: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-echo "$as_me:1176: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
- test -z "$EGREP" && { { echo "$as_me:1180: error: No egrep program found" >&5
-echo "$as_me: error: No egrep program found" >&2;}
+ test -n "$EGREP" && break
+done
+test -n "$EGREP" || EGREP=": "
+
+ test "x$ac_cv_path_EGREP" = "x:" && { { echo "$as_me:1273: error: cannot find workable egrep" >&5
+echo "$as_me: error: cannot find workable egrep" >&2;}
{ (exit 1); exit 1; }; }
+ fi
+fi
+echo "$as_me:1278: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6
+ EGREP="$ac_cv_path_EGREP"
-NCURSES_MAJOR="`$ac_cv_prog_egrep '^NCURSES_MAJOR[ ]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`"
-NCURSES_MINOR="`$ac_cv_prog_egrep '^NCURSES_MINOR[ ]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`"
-NCURSES_PATCH="`$ac_cv_prog_egrep '^NCURSES_PATCH[ ]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`"
+NCURSES_MAJOR="`${EGREP-egrep} '^NCURSES_MAJOR[ ]*=' "$srcdir/dist.mk" | sed -e 's/^[^0-9]*//'`"
+NCURSES_MINOR="`${EGREP-egrep} '^NCURSES_MINOR[ ]*=' "$srcdir/dist.mk" | sed -e 's/^[^0-9]*//'`"
+NCURSES_PATCH="`${EGREP-egrep} '^NCURSES_PATCH[ ]*=' "$srcdir/dist.mk" | sed -e 's/^[^0-9]*//'`"
cf_cv_abi_version=${NCURSES_MAJOR}
cf_cv_rel_version=${NCURSES_MAJOR}.${NCURSES_MINOR}
cf_cv_timestamp=`date`
-echo "$as_me:1190: result: Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version ($cf_cv_timestamp)" >&5
+echo "$as_me:1288: result: Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version ($cf_cv_timestamp)" >&5
echo "${ECHO_T}Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version ($cf_cv_timestamp)" >&6
-if test -f $srcdir/VERSION ; then
- echo "$as_me:1194: checking for package version" >&5
+if test -f "$srcdir/VERSION" ; then
+ echo "$as_me:1292: checking for package version" >&5
echo $ECHO_N "checking for package version... $ECHO_C" >&6
# if there are not enough fields, cut returns the last one...
- cf_field1=`sed -e '2,$d' $srcdir/VERSION|cut -f1`
- cf_field2=`sed -e '2,$d' $srcdir/VERSION|cut -f2`
- cf_field3=`sed -e '2,$d' $srcdir/VERSION|cut -f3`
+ cf_field1=`sed -e '2,$d' "$srcdir/VERSION" |cut -f1`
+ cf_field2=`sed -e '2,$d' "$srcdir/VERSION" |cut -f2`
+ cf_field3=`sed -e '2,$d' "$srcdir/VERSION" |cut -f3`
# this is how CF_BUNDLED_INTL uses $VERSION:
VERSION="$cf_field1"
VERSION_MAJOR=`echo "$cf_field2" | sed -e 's/\..*//'`
- test -z "$VERSION_MAJOR" && { { echo "$as_me:1206: error: missing major-version" >&5
+ test -z "$VERSION_MAJOR" && { { echo "$as_me:1304: error: missing major-version" >&5
echo "$as_me: error: missing major-version" >&2;}
{ (exit 1); exit 1; }; }
VERSION_MINOR=`echo "$cf_field2" | sed -e 's/^[^.]*\.//' -e 's/-.*//'`
- test -z "$VERSION_MINOR" && { { echo "$as_me:1211: error: missing minor-version" >&5
+ test -z "$VERSION_MINOR" && { { echo "$as_me:1309: error: missing minor-version" >&5
echo "$as_me: error: missing minor-version" >&2;}
{ (exit 1); exit 1; }; }
- echo "$as_me:1215: result: ${VERSION_MAJOR}.${VERSION_MINOR}" >&5
+ echo "$as_me:1313: result: ${VERSION_MAJOR}.${VERSION_MINOR}" >&5
echo "${ECHO_T}${VERSION_MAJOR}.${VERSION_MINOR}" >&6
- echo "$as_me:1218: checking for package patch date" >&5
+ echo "$as_me:1316: checking for package patch date" >&5
echo $ECHO_N "checking for package patch date... $ECHO_C" >&6
VERSION_PATCH=`echo "$cf_field3" | sed -e 's/^[^-]*-//'`
case .$VERSION_PATCH in
(.)
- { { echo "$as_me:1223: error: missing patch-date $VERSION_PATCH" >&5
+ { { echo "$as_me:1321: error: missing patch-date $VERSION_PATCH" >&5
echo "$as_me: error: missing patch-date $VERSION_PATCH" >&2;}
{ (exit 1); exit 1; }; }
;;
(.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])
;;
(*)
- { { echo "$as_me:1230: error: illegal patch-date $VERSION_PATCH" >&5
+ { { echo "$as_me:1328: error: illegal patch-date $VERSION_PATCH" >&5
echo "$as_me: error: illegal patch-date $VERSION_PATCH" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
- echo "$as_me:1235: result: $VERSION_PATCH" >&5
+ echo "$as_me:1333: result: $VERSION_PATCH" >&5
echo "${ECHO_T}$VERSION_PATCH" >&6
else
- { { echo "$as_me:1238: error: did not find $srcdir/VERSION" >&5
+ { { echo "$as_me:1336: error: did not find $srcdir/VERSION" >&5
echo "$as_me: error: did not find $srcdir/VERSION" >&2;}
{ (exit 1); exit 1; }; }
fi
# show the actual data that we have for versions:
test -n "$verbose" && echo " ABI VERSION $VERSION" 1>&6
-echo "${as_me:-configure}:1246: testing ABI VERSION $VERSION ..." 1>&5
+echo "${as_me:-configure}:1344: testing ABI VERSION $VERSION ..." 1>&5
test -n "$verbose" && echo " VERSION_MAJOR $VERSION_MAJOR" 1>&6
-echo "${as_me:-configure}:1250: testing VERSION_MAJOR $VERSION_MAJOR ..." 1>&5
+echo "${as_me:-configure}:1348: testing VERSION_MAJOR $VERSION_MAJOR ..." 1>&5
test -n "$verbose" && echo " VERSION_MINOR $VERSION_MINOR" 1>&6
-echo "${as_me:-configure}:1254: testing VERSION_MINOR $VERSION_MINOR ..." 1>&5
+echo "${as_me:-configure}:1352: testing VERSION_MINOR $VERSION_MINOR ..." 1>&5
test -n "$verbose" && echo " VERSION_PATCH $VERSION_PATCH" 1>&6
-echo "${as_me:-configure}:1258: testing VERSION_PATCH $VERSION_PATCH ..." 1>&5
+echo "${as_me:-configure}:1356: testing VERSION_PATCH $VERSION_PATCH ..." 1>&5
cf_PACKAGE=NCURSES
PACKAGE=ncurses
cat >>confdefs.h <<EOF
#define PACKAGE "$PACKAGE"
EOF
cf_PACKAGE=`echo "$cf_PACKAGE" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >>confdefs.h <<EOF
#define ${cf_PACKAGE}_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}"
EOF
cat >>confdefs.h <<EOF
#define ${cf_PACKAGE}_PATCHDATE ${VERSION_PATCH}
EOF
test -z "$cf_cv_rel_version" && cf_cv_rel_version=0.0
# Check whether --with-rel-version or --without-rel-version was given.
if test "${with_rel_version+set}" = set; then
withval="$with_rel_version"
- { echo "$as_me:1282: WARNING: overriding release version $cf_cv_rel_version to $withval" >&5
+ { echo "$as_me:1380: WARNING: overriding release version $cf_cv_rel_version to $withval" >&5
echo "$as_me: WARNING: overriding release version $cf_cv_rel_version to $withval" >&2;}
cf_cv_rel_version=$withval
fi;
NCURSES_MAJOR=`echo "$cf_cv_rel_version" | sed -e 's/\..*//'`
NCURSES_MINOR=`echo "$cf_cv_rel_version" | sed -e 's/^[^.]*//' -e 's/^\.//' -e 's/\..*//'`
if test -n "$NCURSES_MAJOR" ; then
case $NCURSES_MAJOR in
([0-9]*)
;;
(*)
- { { echo "$as_me:1295: error: Release major-version is not a number: $NCURSES_MAJOR" >&5
+ { { echo "$as_me:1393: error: Release major-version is not a number: $NCURSES_MAJOR" >&5
echo "$as_me: error: Release major-version is not a number: $NCURSES_MAJOR" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
else
- { { echo "$as_me:1301: error: Release major-version value is empty" >&5
+ { { echo "$as_me:1399: error: Release major-version value is empty" >&5
echo "$as_me: error: Release major-version value is empty" >&2;}
{ (exit 1); exit 1; }; }
fi
if test -n "$NCURSES_MINOR" ; then
case $NCURSES_MINOR in
([0-9]*)
;;
(*)
- { { echo "$as_me:1311: error: Release minor-version is not a number: $NCURSES_MINOR" >&5
+ { { echo "$as_me:1409: error: Release minor-version is not a number: $NCURSES_MINOR" >&5
echo "$as_me: error: Release minor-version is not a number: $NCURSES_MINOR" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
else
- { { echo "$as_me:1317: error: Release minor-version value is empty" >&5
+ { { echo "$as_me:1415: error: Release minor-version value is empty" >&5
echo "$as_me: error: Release minor-version value is empty" >&2;}
{ (exit 1); exit 1; }; }
fi
test -z "$cf_cv_abi_version" && cf_cv_abi_version=0
# Check whether --with-abi-version or --without-abi-version was given.
if test "${with_abi_version+set}" = set; then
withval="$with_abi_version"
if test "x$cf_cv_abi_version" != "x$withval"
then
- { echo "$as_me:1330: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&5
+ { echo "$as_me:1428: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&5
echo "$as_me: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&2;}
- case $cf_cv_rel_version in
+ case "$cf_cv_rel_version" in
(5.*)
cf_cv_rel_version=$withval.0
;;
(6.*)
cf_cv_rel_version=$withval.9 # FIXME: should be 10 as of 6.0 release
;;
esac
fi
cf_cv_abi_version=$withval
fi;
if test -n "$cf_cv_abi_version" ; then
case $cf_cv_abi_version in
([0-9]*)
;;
(*)
- { { echo "$as_me:1349: error: ABI version is not a number: $cf_cv_abi_version" >&5
+ { { echo "$as_me:1447: error: ABI version is not a number: $cf_cv_abi_version" >&5
echo "$as_me: error: ABI version is not a number: $cf_cv_abi_version" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
else
- { { echo "$as_me:1355: error: ABI version value is empty" >&5
+ { { echo "$as_me:1453: error: ABI version value is empty" >&5
echo "$as_me: error: ABI version value is empty" >&2;}
{ (exit 1); exit 1; }; }
fi
if test "x$cf_cv_abi_version" != "x$with_abi_version"
then
- case $cf_cv_rel_version in
+ case "$cf_cv_rel_version" in
(5.*)
cf_cv_rel_version=$with_abi_version.0
;;
esac
fi
ac_aux_dir=
for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
- if test -f $ac_dir/install-sh; then
+ if test -f "$ac_dir/install-sh"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install-sh -c"
break
- elif test -f $ac_dir/install.sh; then
+ elif test -f "$ac_dir/install.sh"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install.sh -c"
break
- elif test -f $ac_dir/shtool; then
+ elif test -f "$ac_dir/shtool"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/shtool install -c"
break
fi
done
if test -z "$ac_aux_dir"; then
- { { echo "$as_me:1386: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+ { { echo "$as_me:1484: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
{ (exit 1); exit 1; }; }
fi
ac_config_guess="$SHELL $ac_aux_dir/config.guess"
ac_config_sub="$SHELL $ac_aux_dir/config.sub"
ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
# Make sure we can run config.sub.
$ac_config_sub sun4 >/dev/null 2>&1 ||
- { { echo "$as_me:1396: error: cannot run $ac_config_sub" >&5
+ { { echo "$as_me:1494: error: cannot run $ac_config_sub" >&5
echo "$as_me: error: cannot run $ac_config_sub" >&2;}
{ (exit 1); exit 1; }; }
-echo "$as_me:1400: checking build system type" >&5
+echo "$as_me:1498: checking build system type" >&5
echo $ECHO_N "checking build system type... $ECHO_C" >&6
if test "${ac_cv_build+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_build_alias=$build_alias
test -z "$ac_cv_build_alias" &&
ac_cv_build_alias=`$ac_config_guess`
test -z "$ac_cv_build_alias" &&
- { { echo "$as_me:1409: error: cannot guess build type; you must specify one" >&5
+ { { echo "$as_me:1507: error: cannot guess build type; you must specify one" >&5
echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
{ (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
- { { echo "$as_me:1413: error: $ac_config_sub $ac_cv_build_alias failed." >&5
+ac_cv_build=`$ac_config_sub "$ac_cv_build_alias"` ||
+ { { echo "$as_me:1511: error: $ac_config_sub $ac_cv_build_alias failed." >&5
echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;}
{ (exit 1); exit 1; }; }
fi
-echo "$as_me:1418: result: $ac_cv_build" >&5
+echo "$as_me:1516: result: $ac_cv_build" >&5
echo "${ECHO_T}$ac_cv_build" >&6
build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+build_cpu=`echo "$ac_cv_build" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo "$ac_cv_build" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo "$ac_cv_build" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$as_me:1425: checking host system type" >&5
+echo "$as_me:1523: checking host system type" >&5
echo $ECHO_N "checking host system type... $ECHO_C" >&6
if test "${ac_cv_host+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_host_alias=$host_alias
test -z "$ac_cv_host_alias" &&
ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
- { { echo "$as_me:1434: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+ac_cv_host=`$ac_config_sub "$ac_cv_host_alias"` ||
+ { { echo "$as_me:1532: error: $ac_config_sub $ac_cv_host_alias failed" >&5
echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
{ (exit 1); exit 1; }; }
fi
-echo "$as_me:1439: result: $ac_cv_host" >&5
+echo "$as_me:1537: result: $ac_cv_host" >&5
echo "${ECHO_T}$ac_cv_host" >&6
host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+host_cpu=`echo "$ac_cv_host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$ac_cv_host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$ac_cv_host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then
- echo "$as_me:1447: checking target system type" >&5
+if test -f "$srcdir/config.guess" || test -f "$ac_aux_dir/config.guess" ; then
+ echo "$as_me:1545: checking target system type" >&5
echo $ECHO_N "checking target system type... $ECHO_C" >&6
if test "${ac_cv_target+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_target_alias=$target_alias
test "x$ac_cv_target_alias" = "x" &&
ac_cv_target_alias=$ac_cv_host_alias
-ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
- { { echo "$as_me:1456: error: $ac_config_sub $ac_cv_target_alias failed" >&5
+ac_cv_target=`$ac_config_sub "$ac_cv_target_alias"` ||
+ { { echo "$as_me:1554: error: $ac_config_sub $ac_cv_target_alias failed" >&5
echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
{ (exit 1); exit 1; }; }
fi
-echo "$as_me:1461: result: $ac_cv_target" >&5
+echo "$as_me:1559: result: $ac_cv_target" >&5
echo "${ECHO_T}$ac_cv_target" >&6
target=$ac_cv_target
-target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+target_cpu=`echo "$ac_cv_target" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+target_vendor=`echo "$ac_cv_target" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+target_os=`echo "$ac_cv_target" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
# The aliases save the names the user supplied, while $host etc.
# will get canonicalized.
test -n "$target_alias" &&
test "$program_prefix$program_suffix$program_transform_name" = \
NONENONEs,x,x, &&
program_prefix=${target_alias}-
system_name="$host_os"
else
system_name="`(uname -s -r) 2>/dev/null`"
if test -z "$system_name" ; then
system_name="`(hostname) 2>/dev/null`"
fi
fi
test -n "$system_name" &&
cat >>confdefs.h <<EOF
#define SYSTEM_NAME "$system_name"
EOF
if test "${cf_cv_system_name+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cf_cv_system_name="$system_name"
fi
test -z "$system_name" && system_name="$cf_cv_system_name"
-test -n "$cf_cv_system_name" && echo "$as_me:1493: result: Configuring for $cf_cv_system_name" >&5
+test -n "$cf_cv_system_name" && echo "$as_me:1591: result: Configuring for $cf_cv_system_name" >&5
echo "${ECHO_T}Configuring for $cf_cv_system_name" >&6
if test ".$system_name" != ".$cf_cv_system_name" ; then
- echo "$as_me:1497: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5
+ echo "$as_me:1595: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5
echo "${ECHO_T}Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&6
- { { echo "$as_me:1499: error: \"Please remove config.cache and try again.\"" >&5
+ { { echo "$as_me:1597: error: \"Please remove config.cache and try again.\"" >&5
echo "$as_me: error: \"Please remove config.cache and try again.\"" >&2;}
{ (exit 1); exit 1; }; }
fi
# Check whether --with-system-type or --without-system-type was given.
if test "${with_system_type+set}" = set; then
withval="$with_system_type"
- { echo "$as_me:1507: WARNING: overriding system type to $withval" >&5
+ { echo "$as_me:1605: WARNING: overriding system type to $withval" >&5
echo "$as_me: WARNING: overriding system type to $withval" >&2;}
cf_cv_system_name=$withval
host_os=$withval
fi;
### Save the given $CFLAGS to allow user-override.
cf_user_CFLAGS="$CFLAGS"
### Default install-location
+echo "$as_me:1616: checking for fgrep" >&5
+echo $ECHO_N "checking for fgrep... $ECHO_C" >&6
+if test "${ac_cv_path_FGREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ for ac_prog in gfgrep fgrep
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1628: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_FGREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $FGREP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_FGREP="$FGREP" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ if $as_executable_p "$ac_dir/$ac_word"; then
+ ac_cv_path_FGREP="$ac_dir/$ac_word"
+ echo "$as_me:1645: found $ac_dir/$ac_word" >&5
+ break
+fi
+done
+
+ ;;
+esac
+fi
+FGREP=$ac_cv_path_FGREP
-echo "$as_me:1519: checking for prefix" >&5
+if test -n "$FGREP"; then
+ echo "$as_me:1656: result: $FGREP" >&5
+echo "${ECHO_T}$FGREP" >&6
+else
+ echo "$as_me:1659: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$FGREP" && break
+done
+test -n "$FGREP" || FGREP=": "
+
+ test "x$ac_cv_path_FGREP" = "x:" && { { echo "$as_me:1667: error: cannot find workable fgrep" >&5
+echo "$as_me: error: cannot find workable fgrep" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+fi
+echo "$as_me:1672: result: $ac_cv_path_FGREP" >&5
+echo "${ECHO_T}$ac_cv_path_FGREP" >&6
+ FGREP="$ac_cv_path_FGREP"
+
+echo "$as_me:1676: checking for prefix" >&5
echo $ECHO_N "checking for prefix... $ECHO_C" >&6
if test "x$prefix" = "xNONE" ; then
case "$cf_cv_system_name" in
# non-vendor systems don't have a conflict
(openbsd*|freebsd*|mirbsd*|linux*|cygwin*|msys*|k*bsd*-gnu|mingw*)
prefix=/usr
;;
(*) prefix=$ac_default_prefix
;;
esac
fi
-echo "$as_me:1531: result: $prefix" >&5
+echo "$as_me:1688: result: $prefix" >&5
echo "${ECHO_T}$prefix" >&6
if test "x$prefix" = "xNONE" ; then
-echo "$as_me:1535: checking for default include-directory" >&5
+echo "$as_me:1692: checking for default include-directory" >&5
echo $ECHO_N "checking for default include-directory... $ECHO_C" >&6
test -n "$verbose" && echo 1>&6
for cf_symbol in \
- $includedir \
- $includedir/ncurses \
- $prefix/include \
- $prefix/include/ncurses \
+ "$includedir" \
+ "$includedir/ncurses" \
+ "$prefix/include" \
+ "$prefix/include/ncurses" \
/usr/local/include \
/usr/local/include/ncurses \
/usr/include \
/usr/include/ncurses
do
- cf_dir=`eval echo $cf_symbol`
- if test -f $cf_dir/curses.h ; then
- if ( fgrep NCURSES_VERSION $cf_dir/curses.h 2>&1 >/dev/null ) ; then
+ cf_dir=`eval echo "$cf_symbol"`
+ if test -f "$cf_dir/curses.h" ; then
+ if ( ${FGREP-fgrep} NCURSES_VERSION "$cf_dir/curses.h" >/dev/null 2>&1 ) ; then
includedir="$cf_symbol"
- test -n "$verbose" && echo $ac_n " found " 1>&6
+ test -n "$verbose" && echo $ECHO_N " found " 1>&6
break
fi
fi
test -n "$verbose" && echo " tested $cf_dir" 1>&6
done
-echo "$as_me:1558: result: $includedir" >&5
+echo "$as_me:1715: result: $includedir" >&5
echo "${ECHO_T}$includedir" >&6
fi
### Defaults for ncurses ABI
case x$cf_cv_abi_version in
(x[6789])
cf_dft_ext_colors=yes
cf_dft_ext_const=yes
cf_dft_ext_mouse=yes
cf_dft_ext_putwin=yes
cf_dft_ext_spfuncs=yes
cf_dft_filter_syms=yes
cf_dft_chtype=uint32_t
cf_dft_mmask_t=uint32_t
cf_dft_interop=yes
cf_dft_tparm_arg=intptr_t
cf_dft_with_lp64=yes
;;
(*)
cf_dft_ext_colors=no
cf_dft_ext_const=no
cf_dft_ext_mouse=no
cf_dft_ext_putwin=no
cf_dft_ext_spfuncs=no
cf_dft_filter_syms=no
cf_dft_chtype=auto
cf_dft_mmask_t=auto
cf_dft_interop=no
cf_dft_tparm_arg=long
cf_dft_with_lp64=no
;;
esac
### Checks for programs.
# Check whether --with-ada or --without-ada was given.
if test "${with_ada+set}" = set; then
withval="$with_ada"
cf_with_ada=$withval
else
cf_with_ada=yes
fi;
if test "x$cf_with_ada" = xyes
then
cf_prog_cc="gnatgcc gcc cc"
else
cf_prog_cc="gcc cc"
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
if test -n "$ac_tool_prefix"; then
for ac_prog in $cf_prog_cc
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:1621: checking for $ac_word" >&5
+echo "$as_me:1778: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-echo "$as_me:1636: found $ac_dir/$ac_word" >&5
+echo "$as_me:1793: found $ac_dir/$ac_word" >&5
break
done
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:1644: result: $CC" >&5
+ echo "$as_me:1801: result: $CC" >&5
echo "${ECHO_T}$CC" >&6
else
- echo "$as_me:1647: result: no" >&5
+ echo "$as_me:1804: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$CC" && break
done
fi
if test -z "$CC"; then
ac_ct_CC=$CC
for ac_prog in $cf_prog_cc
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:1660: checking for $ac_word" >&5
+echo "$as_me:1817: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_ac_ct_CC="$ac_prog"
-echo "$as_me:1675: found $ac_dir/$ac_word" >&5
+echo "$as_me:1832: found $ac_dir/$ac_word" >&5
break
done
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- echo "$as_me:1683: result: $ac_ct_CC" >&5
+ echo "$as_me:1840: result: $ac_ct_CC" >&5
echo "${ECHO_T}$ac_ct_CC" >&6
else
- echo "$as_me:1686: result: no" >&5
+ echo "$as_me:1843: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$ac_ct_CC" && break
done
CC=$ac_ct_CC
fi
-test -z "$CC" && { { echo "$as_me:1696: error: no acceptable cc found in \$PATH" >&5
+test -z "$CC" && { { echo "$as_me:1853: error: no acceptable cc found in \$PATH" >&5
echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
{ (exit 1); exit 1; }; }
# Provide some information about the compiler.
-echo "$as_me:1701:" \
+echo "$as_me:1858:" \
"checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:1704: \"$ac_compiler --version </dev/null >&5\"") >&5
+ac_compiler=`set X $ac_compile; echo "$2"`
+{ (eval echo "$as_me:1861: \"$ac_compiler --version </dev/null >&5\"") >&5
(eval $ac_compiler --version </dev/null >&5) 2>&5
ac_status=$?
- echo "$as_me:1707: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:1709: \"$ac_compiler -v </dev/null >&5\"") >&5
+ echo "$as_me:1864: \$? = $ac_status" >&5
+ (exit "$ac_status"); }
+{ (eval echo "$as_me:1866: \"$ac_compiler -v </dev/null >&5\"") >&5
(eval $ac_compiler -v </dev/null >&5) 2>&5
ac_status=$?
- echo "$as_me:1712: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:1714: \"$ac_compiler -V </dev/null >&5\"") >&5
+ echo "$as_me:1869: \$? = $ac_status" >&5
+ (exit "$ac_status"); }
+{ (eval echo "$as_me:1871: \"$ac_compiler -V </dev/null >&5\"") >&5
(eval $ac_compiler -V </dev/null >&5) 2>&5
ac_status=$?
- echo "$as_me:1717: \$? = $ac_status" >&5
- (exit $ac_status); }
+ echo "$as_me:1874: \$? = $ac_status" >&5
+ (exit "$ac_status"); }
-cat >conftest.$ac_ext <<_ACEOF
-#line 1721 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 1878 "configure"
#include "confdefs.h"
int
main (void)
{
;
return 0;
}
_ACEOF
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files a.out a.exe"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-echo "$as_me:1737: checking for C compiler default output" >&5
+echo "$as_me:1894: checking for C compiler default output" >&5
echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:1740: \"$ac_link_default\"") >&5
+ac_link_default=`echo "$ac_link" | sed 's/ -o *"conftest[^"]*"//'`
+if { (eval echo "$as_me:1897: \"$ac_link_default\"") >&5
(eval $ac_link_default) 2>&5
ac_status=$?
- echo "$as_me:1743: \$? = $ac_status" >&5
- (exit $ac_status); }; then
+ echo "$as_me:1900: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; then
# Find the output, starting from the most likely. This scheme is
# not robust to junk in `.', hence go to wildcards (a.*) only as a last
# resort.
for ac_file in `ls a.exe conftest.exe 2>/dev/null;
ls a.out conftest 2>/dev/null;
ls a.* conftest.* 2>/dev/null`; do
case $ac_file in
*.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
a.out ) # We found the default executable, but exeext='' is most
# certainly right.
break;;
*.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
# FIXME: I believe we export ac_cv_exeext for Libtool --akim.
export ac_cv_exeext
break;;
* ) break;;
esac
done
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-{ { echo "$as_me:1766: error: C compiler cannot create executables" >&5
+cat "conftest.$ac_ext" >&5
+{ { echo "$as_me:1923: error: C compiler cannot create executables" >&5
echo "$as_me: error: C compiler cannot create executables" >&2;}
{ (exit 77); exit 77; }; }
fi
ac_exeext=$ac_cv_exeext
-echo "$as_me:1772: result: $ac_file" >&5
+echo "$as_me:1929: result: $ac_file" >&5
echo "${ECHO_T}$ac_file" >&6
# Check the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-echo "$as_me:1777: checking whether the C compiler works" >&5
+echo "$as_me:1934: checking whether the C compiler works" >&5
echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
# If not cross compiling, check that we can run a simple program.
if test "$cross_compiling" != yes; then
if { ac_try='./$ac_file'
- { (eval echo "$as_me:1783: \"$ac_try\"") >&5
+ { (eval echo "$as_me:1940: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1786: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:1943: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { echo "$as_me:1793: error: cannot run C compiled programs.
+ { { echo "$as_me:1950: error: cannot run C compiled programs.
If you meant to cross compile, use \`--host'." >&5
echo "$as_me: error: cannot run C compiled programs.
If you meant to cross compile, use \`--host'." >&2;}
{ (exit 1); exit 1; }; }
fi
fi
fi
-echo "$as_me:1801: result: yes" >&5
+echo "$as_me:1958: result: yes" >&5
echo "${ECHO_T}yes" >&6
-rm -f a.out a.exe conftest$ac_cv_exeext
+rm -f a.out a.exe "conftest$ac_cv_exeext"
ac_clean_files=$ac_clean_files_save
# Check the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-echo "$as_me:1808: checking whether we are cross compiling" >&5
+echo "$as_me:1965: checking whether we are cross compiling" >&5
echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:1810: result: $cross_compiling" >&5
+echo "$as_me:1967: result: $cross_compiling" >&5
echo "${ECHO_T}$cross_compiling" >&6
-echo "$as_me:1813: checking for executable suffix" >&5
+echo "$as_me:1970: checking for executable suffix" >&5
echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
-if { (eval echo "$as_me:1815: \"$ac_link\"") >&5
+if { (eval echo "$as_me:1972: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:1818: \$? = $ac_status" >&5
- (exit $ac_status); }; then
+ echo "$as_me:1975: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; then
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
# work properly (i.e., refer to `conftest.exe'), while it won't with
# `rm'.
for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
case $ac_file in
*.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
*.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
export ac_cv_exeext
break;;
* ) break;;
esac
done
else
- { { echo "$as_me:1834: error: cannot compute EXEEXT: cannot compile and link" >&5
+ { { echo "$as_me:1991: error: cannot compute EXEEXT: cannot compile and link" >&5
echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
{ (exit 1); exit 1; }; }
fi
-rm -f conftest$ac_cv_exeext
-echo "$as_me:1840: result: $ac_cv_exeext" >&5
+rm -f "conftest$ac_cv_exeext"
+echo "$as_me:1997: result: $ac_cv_exeext" >&5
echo "${ECHO_T}$ac_cv_exeext" >&6
-rm -f conftest.$ac_ext
+rm -f "conftest.$ac_ext"
EXEEXT=$ac_cv_exeext
ac_exeext=$EXEEXT
-echo "$as_me:1846: checking for object suffix" >&5
+echo "$as_me:2003: checking for object suffix" >&5
echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
if test "${ac_cv_objext+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 1852 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 2009 "configure"
#include "confdefs.h"
int
main (void)
{
;
return 0;
}
_ACEOF
rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:1864: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:2021: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:1867: \$? = $ac_status" >&5
- (exit $ac_status); }; then
+ echo "$as_me:2024: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; then
for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
case $ac_file in
*.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.map | *.inf ) ;;
*) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
break;;
esac
done
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-{ { echo "$as_me:1879: error: cannot compute OBJEXT: cannot compile" >&5
+cat "conftest.$ac_ext" >&5
+{ { echo "$as_me:2036: error: cannot compute OBJEXT: cannot compile" >&5
echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
{ (exit 1); exit 1; }; }
fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
+rm -f "conftest.$ac_cv_objext" "conftest.$ac_ext"
fi
-echo "$as_me:1886: result: $ac_cv_objext" >&5
+echo "$as_me:2043: result: $ac_cv_objext" >&5
echo "${ECHO_T}$ac_cv_objext" >&6
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-echo "$as_me:1890: checking whether we are using the GNU C compiler" >&5
+echo "$as_me:2047: checking whether we are using the GNU C compiler" >&5
echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
if test "${ac_cv_c_compiler_gnu+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 1896 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 2053 "configure"
#include "confdefs.h"
int
main (void)
{
#ifndef __GNUC__
choke me
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1911: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2068: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:1914: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1917: \"$ac_try\"") >&5
+ echo "$as_me:2071: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:2074: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1920: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:2077: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_compiler_gnu=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_compiler_gnu=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-echo "$as_me:1932: result: $ac_cv_c_compiler_gnu" >&5
+echo "$as_me:2089: result: $ac_cv_c_compiler_gnu" >&5
echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
GCC=`test $ac_compiler_gnu = yes && echo yes`
ac_test_CFLAGS=${CFLAGS+set}
ac_save_CFLAGS=$CFLAGS
CFLAGS="-g"
-echo "$as_me:1938: checking whether $CC accepts -g" >&5
+echo "$as_me:2095: checking whether $CC accepts -g" >&5
echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
if test "${ac_cv_prog_cc_g+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 1944 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 2101 "configure"
#include "confdefs.h"
int
main (void)
{
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1956: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2113: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:1959: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1962: \"$ac_try\"") >&5
+ echo "$as_me:2116: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:2119: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1965: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:2122: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_prog_cc_g=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_cv_prog_cc_g=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:1975: result: $ac_cv_prog_cc_g" >&5
+echo "$as_me:2132: result: $ac_cv_prog_cc_g" >&5
echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
if test "$ac_test_CFLAGS" = set; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
CFLAGS="-g -O2"
else
CFLAGS="-g"
fi
else
if test "$GCC" = yes; then
CFLAGS="-O2"
else
CFLAGS=
fi
fi
# Some people use a C++ compiler to compile C. Since we use `exit',
# in C++ we need to declare it. In case someone uses the same compiler
# for both compiling C and C++ we need to have the C++ compiler decide
# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
+cat >"conftest.$ac_ext" <<_ACEOF
#ifndef __cplusplus
choke me
#endif
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2002: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2159: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:2005: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2008: \"$ac_try\"") >&5
+ echo "$as_me:2162: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:2165: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:2011: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:2168: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
for ac_declaration in \
''\
'#include <stdlib.h>' \
'extern "C" void std::exit (int) throw (); using std::exit;' \
'extern "C" void std::exit (int); using std::exit;' \
'extern "C" void exit (int) throw ();' \
'extern "C" void exit (int);' \
'void exit (int);'
do
- cat >conftest.$ac_ext <<_ACEOF
-#line 2023 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 2180 "configure"
#include "confdefs.h"
#include <stdlib.h>
$ac_declaration
int
main (void)
{
exit (42);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2036: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2193: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:2039: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2042: \"$ac_try\"") >&5
+ echo "$as_me:2196: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:2199: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:2045: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:2202: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
:
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
continue
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-#line 2055 "configure"
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 2212 "configure"
#include "confdefs.h"
$ac_declaration
int
main (void)
{
exit (42);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2067: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2224: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:2070: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2073: \"$ac_try\"") >&5
+ echo "$as_me:2227: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:2230: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:2076: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:2233: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
done
rm -rf conftest*
if test -n "$ac_declaration"; then
echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
+ echo "$ac_declaration" >>confdefs.h
echo '#endif' >>confdefs.h
fi
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
GCC_VERSION=none
if test "$GCC" = yes ; then
- echo "$as_me:2106: checking version of $CC" >&5
+ echo "$as_me:2263: checking version of $CC" >&5
echo $ECHO_N "checking version of $CC... $ECHO_C" >&6
GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[^)]*) //' -e 's/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
test -z "$GCC_VERSION" && GCC_VERSION=unknown
- echo "$as_me:2110: result: $GCC_VERSION" >&5
+ echo "$as_me:2267: result: $GCC_VERSION" >&5
echo "${ECHO_T}$GCC_VERSION" >&6
fi
INTEL_COMPILER=no
if test "$GCC" = yes ; then
- case $host_os in
+ case "$host_os" in
(linux*|gnu*)
- echo "$as_me:2119: checking if this is really Intel C compiler" >&5
+ echo "$as_me:2276: checking if this is really Intel C compiler" >&5
echo $ECHO_N "checking if this is really Intel C compiler... $ECHO_C" >&6
cf_save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -no-gcc"
- cat >conftest.$ac_ext <<_ACEOF
-#line 2124 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 2281 "configure"
#include "confdefs.h"
int
main (void)
{
#ifdef __INTEL_COMPILER
#else
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2141: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2298: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:2144: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2147: \"$ac_try\"") >&5
+ echo "$as_me:2301: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:2304: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:2150: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:2307: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
INTEL_COMPILER=yes
cf_save_CFLAGS="$cf_save_CFLAGS -we147"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
CFLAGS="$cf_save_CFLAGS"
- echo "$as_me:2161: result: $INTEL_COMPILER" >&5
+ echo "$as_me:2318: result: $INTEL_COMPILER" >&5
echo "${ECHO_T}$INTEL_COMPILER" >&6
;;
esac
fi
CLANG_COMPILER=no
if test "$GCC" = yes ; then
- echo "$as_me:2170: checking if this is really Clang C compiler" >&5
+ echo "$as_me:2327: checking if this is really Clang C compiler" >&5
echo $ECHO_N "checking if this is really Clang C compiler... $ECHO_C" >&6
cf_save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -Qunused-arguments"
- cat >conftest.$ac_ext <<_ACEOF
-#line 2175 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 2331 "configure"
#include "confdefs.h"
int
main (void)
{
#ifdef __clang__
#else
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2192: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2348: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:2195: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2198: \"$ac_try\"") >&5
+ echo "$as_me:2351: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:2354: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:2201: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:2357: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
CLANG_COMPILER=yes
-cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
CFLAGS="$cf_save_CFLAGS"
- echo "$as_me:2212: result: $CLANG_COMPILER" >&5
+ echo "$as_me:2367: result: $CLANG_COMPILER" >&5
echo "${ECHO_T}$CLANG_COMPILER" >&6
fi
-echo "$as_me:2216: checking for $CC option to accept ANSI C" >&5
+CLANG_VERSION=none
+
+if test "x$CLANG_COMPILER" = "xyes" ; then
+ case "$CC" in
+ (c[1-9][0-9]|*/c[1-9][0-9])
+ { echo "$as_me:2376: WARNING: replacing broken compiler alias $CC" >&5
+echo "$as_me: WARNING: replacing broken compiler alias $CC" >&2;}
+ CFLAGS="$CFLAGS -std=`echo "$CC" | sed -e 's%.*/%%'`"
+ CC=clang
+ ;;
+ esac
+
+ echo "$as_me:2383: checking version of $CC" >&5
+echo $ECHO_N "checking version of $CC... $ECHO_C" >&6
+ CLANG_VERSION="`$CC --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(CLANG[^)]*) //' -e 's/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
+ test -z "$CLANG_VERSION" && CLANG_VERSION=unknown
+ echo "$as_me:2387: result: $CLANG_VERSION" >&5
+echo "${ECHO_T}$CLANG_VERSION" >&6
+
+ for cf_clang_opt in \
+ -Qunused-arguments \
+ -Wno-error=implicit-function-declaration
+ do
+ echo "$as_me:2394: checking if option $cf_clang_opt works" >&5
+echo $ECHO_N "checking if option $cf_clang_opt works... $ECHO_C" >&6
+ cf_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $cf_clang_opt"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 2399 "configure"
+#include "confdefs.h"
+
+ #include <stdio.h>
+int
+main (void)
+{
+
+ printf("hello!\\n");
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:2413: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:2416: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:2419: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2422: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+
+ cf_clang_optok=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+
+ cf_clang_optok=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+ echo "$as_me:2433: result: $cf_clang_optok" >&5
+echo "${ECHO_T}$cf_clang_optok" >&6
+ CFLAGS="$cf_save_CFLAGS"
+ if test "$cf_clang_optok" = yes; then
+ test -n "$verbose" && echo " adding option $cf_clang_opt" 1>&6
+
+echo "${as_me:-configure}:2439: testing adding option $cf_clang_opt ..." 1>&5
+
+ test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+ CFLAGS="${CFLAGS}$cf_clang_opt"
+
+ fi
+ done
+fi
+
+echo "$as_me:2448: checking for $CC option to accept ANSI C" >&5
echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
if test "${ac_cv_prog_cc_stdc+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_prog_cc_stdc=no
ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-#line 2224 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 2456 "configure"
#include "confdefs.h"
#include <stdarg.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
struct buf { int x; };
FILE * (*rcsopen) (struct buf *, struct stat *, int);
static char *e (p, i)
char **p;
int i;
{
return p[i];
}
static char *f (char * (*g) (char **, int), char **p, ...)
{
char *s;
va_list v;
va_start (v,p);
s = g (p, va_arg (v,int));
va_end (v);
return s;
}
int test (int i, double x);
struct s1 {int (*f) (int a);};
struct s2 {int (*f) (double a);};
int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
int argc;
char **argv;
int
main (void)
{
return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
;
return 0;
}
_ACEOF
# Don't try gcc -ansi; that turns off useful extensions and
# breaks some systems' header files.
# AIX -qlanglvl=ansi
# Ultrix and OSF/1 -std1
# HP-UX 10.20 and later -Ae
# HP-UX older versions -Aa -D_HPUX_SOURCE
# SVR4 -Xc -D__EXTENSIONS__
for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2273: \"$ac_compile\"") >&5
+ rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2505: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:2276: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2279: \"$ac_try\"") >&5
+ echo "$as_me:2508: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:2511: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:2282: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:2514: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_prog_cc_stdc=$ac_arg
break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext
+rm -f "conftest.$ac_objext"
done
-rm -f conftest.$ac_ext conftest.$ac_objext
+rm -f "conftest.$ac_ext" "conftest.$ac_objext"
CC=$ac_save_CC
fi
case "x$ac_cv_prog_cc_stdc" in
x|xno)
- echo "$as_me:2299: result: none needed" >&5
+ echo "$as_me:2531: result: none needed" >&5
echo "${ECHO_T}none needed" >&6 ;;
*)
- echo "$as_me:2302: result: $ac_cv_prog_cc_stdc" >&5
+ echo "$as_me:2534: result: $ac_cv_prog_cc_stdc" >&5
echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
CC="$CC $ac_cv_prog_cc_stdc" ;;
esac
# This should have been defined by AC_PROG_CC
-: ${CC:=cc}
+: "${CC:=cc}"
-echo "$as_me:2310: checking \$CFLAGS variable" >&5
+echo "$as_me:2542: checking \$CFLAGS variable" >&5
echo $ECHO_N "checking \$CFLAGS variable... $ECHO_C" >&6
case "x$CFLAGS" in
(*-[IUD]*)
- echo "$as_me:2314: result: broken" >&5
+ echo "$as_me:2546: result: broken" >&5
echo "${ECHO_T}broken" >&6
- { echo "$as_me:2316: WARNING: your environment uses the CFLAGS variable to hold CPPFLAGS options" >&5
+ { echo "$as_me:2548: WARNING: your environment uses the CFLAGS variable to hold CPPFLAGS options" >&5
echo "$as_me: WARNING: your environment uses the CFLAGS variable to hold CPPFLAGS options" >&2;}
cf_flags="$CFLAGS"
CFLAGS=
for cf_arg in $cf_flags
do
cf_fix_cppflags=no
cf_new_cflags=
cf_new_cppflags=
cf_new_extra_cppflags=
for cf_add_cflags in $cf_arg
do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
(no)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=yes
- if test $cf_fix_cppflags = yes ; then
+ if test "$cf_fix_cppflags" = yes ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
elif test "${cf_tst_cflags}" = "\"'" ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
fi
;;
esac
case "$CPPFLAGS" in
(*$cf_add_cflags)
;;
(*)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
CPPFLAGS=`echo "$CPPFLAGS" | \
sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
;;
esac
test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
;;
esac
;;
(*)
test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
;;
esac
;;
(yes)
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=no
;;
esac
done
if test -n "$cf_new_cflags" ; then
test -n "$CFLAGS" && CFLAGS="$CFLAGS "
CFLAGS="${CFLAGS}$cf_new_cflags"
fi
if test -n "$cf_new_cppflags" ; then
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
fi
if test -n "$cf_new_extra_cppflags" ; then
test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
fi
done
;;
(*)
- echo "$as_me:2424: result: ok" >&5
+ echo "$as_me:2656: result: ok" >&5
echo "${ECHO_T}ok" >&6
;;
esac
-echo "$as_me:2429: checking \$CC variable" >&5
+echo "$as_me:2661: checking \$CC variable" >&5
echo $ECHO_N "checking \$CC variable... $ECHO_C" >&6
case "$CC" in
(*[\ \ ]-*)
- echo "$as_me:2433: result: broken" >&5
+ echo "$as_me:2665: result: broken" >&5
echo "${ECHO_T}broken" >&6
- { echo "$as_me:2435: WARNING: your environment uses the CC variable to hold CFLAGS/CPPFLAGS options" >&5
+ { echo "$as_me:2667: WARNING: your environment uses the CC variable to hold CFLAGS/CPPFLAGS options" >&5
echo "$as_me: WARNING: your environment uses the CC variable to hold CFLAGS/CPPFLAGS options" >&2;}
# humor him...
cf_prog=`echo "$CC" | sed -e 's/ / /g' -e 's/[ ]* / /g' -e 's/[ ]*[ ]-[^ ].*//'`
cf_flags=`echo "$CC" | ${AWK:-awk} -v prog="$cf_prog" '{ printf("%s", substr($0,1+length(prog))); }'`
CC="$cf_prog"
for cf_arg in $cf_flags
do
case "x$cf_arg" in
(x-[IUDfgOW]*)
cf_fix_cppflags=no
cf_new_cflags=
cf_new_cppflags=
cf_new_extra_cppflags=
for cf_add_cflags in $cf_arg
do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
(no)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=yes
- if test $cf_fix_cppflags = yes ; then
+ if test "$cf_fix_cppflags" = yes ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
elif test "${cf_tst_cflags}" = "\"'" ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
fi
;;
esac
case "$CPPFLAGS" in
(*$cf_add_cflags)
;;
(*)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
CPPFLAGS=`echo "$CPPFLAGS" | \
sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
;;
esac
test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
;;
esac
;;
(*)
test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
;;
esac
;;
(yes)
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=no
;;
esac
done
if test -n "$cf_new_cflags" ; then
test -n "$CFLAGS" && CFLAGS="$CFLAGS "
CFLAGS="${CFLAGS}$cf_new_cflags"
fi
if test -n "$cf_new_cppflags" ; then
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
fi
if test -n "$cf_new_extra_cppflags" ; then
test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
fi
;;
(*)
CC="$CC $cf_arg"
;;
esac
done
test -n "$verbose" && echo " resulting CC: '$CC'" 1>&6
-echo "${as_me:-configure}:2552: testing resulting CC: '$CC' ..." 1>&5
+echo "${as_me:-configure}:2784: testing resulting CC: '$CC' ..." 1>&5
test -n "$verbose" && echo " resulting CFLAGS: '$CFLAGS'" 1>&6
-echo "${as_me:-configure}:2556: testing resulting CFLAGS: '$CFLAGS' ..." 1>&5
+echo "${as_me:-configure}:2788: testing resulting CFLAGS: '$CFLAGS' ..." 1>&5
test -n "$verbose" && echo " resulting CPPFLAGS: '$CPPFLAGS'" 1>&6
-echo "${as_me:-configure}:2560: testing resulting CPPFLAGS: '$CPPFLAGS' ..." 1>&5
+echo "${as_me:-configure}:2792: testing resulting CPPFLAGS: '$CPPFLAGS' ..." 1>&5
;;
(*)
- echo "$as_me:2564: result: ok" >&5
+ echo "$as_me:2796: result: ok" >&5
echo "${ECHO_T}ok" >&6
;;
esac
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
-echo "$as_me:2575: checking how to run the C preprocessor" >&5
+ac_main_return="return"
+echo "$as_me:2807: checking how to run the C preprocessor" >&5
echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
if test -z "$CPP"; then
if test "${ac_cv_prog_CPP+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
# Double quotes because CPP needs to be expanded
for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
do
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
do
# Use a header file that comes with gcc, so configuring glibc
# with a fresh cross-compiler works.
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-#line 2596 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 2828 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax error
_ACEOF
-if { (eval echo "$as_me:2601: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:2833: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:2607: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
+ echo "$as_me:2839: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
else
ac_cpp_err=
fi
else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
:
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ cat "conftest.$ac_ext" >&5
# Broken: fails on valid input.
continue
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
# OK, works on sane cases. Now check whether non-existent headers
# can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-#line 2630 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 2862 "configure"
#include "confdefs.h"
#include <ac_nonexistent.h>
_ACEOF
-if { (eval echo "$as_me:2634: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:2866: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:2640: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
+ echo "$as_me:2872: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
else
ac_cpp_err=
fi
else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
# Broken: success on invalid input.
continue
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ cat "conftest.$ac_ext" >&5
# Passes both tests.
ac_preproc_ok=:
break
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
if $ac_preproc_ok; then
break
fi
done
ac_cv_prog_CPP=$CPP
fi
CPP=$ac_cv_prog_CPP
else
ac_cv_prog_CPP=$CPP
fi
-echo "$as_me:2677: result: $CPP" >&5
+echo "$as_me:2909: result: $CPP" >&5
echo "${ECHO_T}$CPP" >&6
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
do
# Use a header file that comes with gcc, so configuring glibc
# with a fresh cross-compiler works.
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-#line 2687 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 2919 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax error
_ACEOF
-if { (eval echo "$as_me:2692: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:2924: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:2698: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
+ echo "$as_me:2930: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
else
ac_cpp_err=
fi
else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
:
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ cat "conftest.$ac_ext" >&5
# Broken: fails on valid input.
continue
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
# OK, works on sane cases. Now check whether non-existent headers
# can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-#line 2721 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 2953 "configure"
#include "confdefs.h"
#include <ac_nonexistent.h>
_ACEOF
-if { (eval echo "$as_me:2725: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:2957: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:2731: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
+ echo "$as_me:2963: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
else
ac_cpp_err=
fi
else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
# Broken: success on invalid input.
continue
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ cat "conftest.$ac_ext" >&5
# Passes both tests.
ac_preproc_ok=:
break
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
if $ac_preproc_ok; then
:
else
- { { echo "$as_me:2759: error: C preprocessor \"$CPP\" fails sanity check" >&5
+ { { echo "$as_me:2991: error: C preprocessor \"$CPP\" fails sanity check" >&5
echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
{ (exit 1); exit 1; }; }
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
if test $ac_cv_c_compiler_gnu = yes; then
- echo "$as_me:2772: checking whether $CC needs -traditional" >&5
+ echo "$as_me:3004: checking whether $CC needs -traditional" >&5
echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6
if test "${ac_cv_prog_gcc_traditional+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_pattern="Autoconf.*'x'"
- cat >conftest.$ac_ext <<_ACEOF
-#line 2779 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 3011 "configure"
#include "confdefs.h"
#include <sgtty.h>
int Autoconf = TIOCGETP;
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "$ac_pattern" >/dev/null 2>&1; then
+ $EGREP "$ac_pattern" >/dev/null 2>&1; then
ac_cv_prog_gcc_traditional=yes
else
ac_cv_prog_gcc_traditional=no
fi
rm -rf conftest*
if test $ac_cv_prog_gcc_traditional = no; then
- cat >conftest.$ac_ext <<_ACEOF
-#line 2794 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 3026 "configure"
#include "confdefs.h"
#include <termio.h>
int Autoconf = TCGETA;
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "$ac_pattern" >/dev/null 2>&1; then
+ $EGREP "$ac_pattern" >/dev/null 2>&1; then
ac_cv_prog_gcc_traditional=yes
fi
rm -rf conftest*
fi
fi
-echo "$as_me:2807: result: $ac_cv_prog_gcc_traditional" >&5
+echo "$as_me:3039: result: $ac_cv_prog_gcc_traditional" >&5
echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6
if test $ac_cv_prog_gcc_traditional = yes; then
CC="$CC -traditional"
fi
fi
-echo "$as_me:2814: checking whether $CC understands -c and -o together" >&5
+echo "$as_me:3046: checking whether $CC understands -c and -o together" >&5
echo $ECHO_N "checking whether $CC understands -c and -o together... $ECHO_C" >&6
if test "${cf_cv_prog_CC_c_o+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat > conftest.$ac_ext <<CF_EOF
int main(void)
{
${cf_cv_main_return:-return}(0);
}
CF_EOF
# We do the test twice because some compilers refuse to overwrite an
# existing .o file with -o, though they will create one.
ac_try='$CC $CFLAGS $CPPFLAGS -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-if { (eval echo "$as_me:2829: \"$ac_try\"") >&5
+if { (eval echo "$as_me:3061: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:2832: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- test -f conftest2.$ac_objext && { (eval echo "$as_me:2834: \"$ac_try\"") >&5
+ echo "$as_me:3064: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ test -f conftest2.$ac_objext && { (eval echo "$as_me:3066: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:2837: \$? = $ac_status" >&5
- (exit $ac_status); };
+ echo "$as_me:3069: \$? = $ac_status" >&5
+ (exit "$ac_status"); };
then
eval cf_cv_prog_CC_c_o=yes
else
eval cf_cv_prog_CC_c_o=no
fi
-rm -rf conftest*
+rm -rf ./conftest*
fi
-if test $cf_cv_prog_CC_c_o = yes; then
- echo "$as_me:2848: result: yes" >&5
+if test "$cf_cv_prog_CC_c_o" = yes; then
+ echo "$as_me:3080: result: yes" >&5
echo "${ECHO_T}yes" >&6
else
- echo "$as_me:2851: result: no" >&5
+ echo "$as_me:3083: result: no" >&5
echo "${ECHO_T}no" >&6
fi
if test "$cross_compiling" = yes ; then
LDCONFIG=:
else
case "$cf_cv_system_name" in
(dragonfly*|mirbsd*|freebsd*)
test -z "$LDCONFIG" && LDCONFIG="/sbin/ldconfig -R"
;;
(*) LDPATH=$PATH:/sbin:/usr/sbin
# Extract the first word of "ldconfig", so it can be a program name with args.
set dummy ldconfig; ac_word=$2
-echo "$as_me:2865: checking for $ac_word" >&5
+echo "$as_me:3097: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_path_LDCONFIG+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
case $LDCONFIG in
[\\/]* | ?:[\\/]*)
ac_cv_path_LDCONFIG="$LDCONFIG" # Let the user override the test with a path.
;;
*)
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$LDPATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
if $as_executable_p "$ac_dir/$ac_word"; then
ac_cv_path_LDCONFIG="$ac_dir/$ac_word"
- echo "$as_me:2882: found $ac_dir/$ac_word" >&5
+ echo "$as_me:3114: found $ac_dir/$ac_word" >&5
break
fi
done
;;
esac
fi
LDCONFIG=$ac_cv_path_LDCONFIG
if test -n "$LDCONFIG"; then
- echo "$as_me:2893: result: $LDCONFIG" >&5
+ echo "$as_me:3125: result: $LDCONFIG" >&5
echo "${ECHO_T}$LDCONFIG" >&6
else
- echo "$as_me:2896: result: no" >&5
+ echo "$as_me:3128: result: no" >&5
echo "${ECHO_T}no" >&6
fi
;;
esac
fi
-echo "$as_me:2904: checking if you want to ensure bool is consistent with C++" >&5
+echo "$as_me:3136: checking if you want to ensure bool is consistent with C++" >&5
echo $ECHO_N "checking if you want to ensure bool is consistent with C++... $ECHO_C" >&6
# Check whether --with-cxx or --without-cxx was given.
if test "${with_cxx+set}" = set; then
withval="$with_cxx"
cf_with_cxx=$withval
else
cf_with_cxx=yes
fi;
-echo "$as_me:2914: result: $cf_with_cxx" >&5
+echo "$as_me:3146: result: $cf_with_cxx" >&5
echo "${ECHO_T}$cf_with_cxx" >&6
if test "X$cf_with_cxx" = Xno ; then
CXX=""
GXX=""
else
# with autoconf 2.13, we can change the error to a warning:
ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
if test -n "$ac_tool_prefix"; then
for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:2932: checking for $ac_word" >&5
+echo "$as_me:3164: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_CXX+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CXX"; then
ac_cv_prog_CXX="$CXX" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-echo "$as_me:2947: found $ac_dir/$ac_word" >&5
+echo "$as_me:3179: found $ac_dir/$ac_word" >&5
break
done
fi
fi
CXX=$ac_cv_prog_CXX
if test -n "$CXX"; then
- echo "$as_me:2955: result: $CXX" >&5
+ echo "$as_me:3187: result: $CXX" >&5
echo "${ECHO_T}$CXX" >&6
else
- echo "$as_me:2958: result: no" >&5
+ echo "$as_me:3190: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$CXX" && break
done
fi
if test -z "$CXX"; then
ac_ct_CXX=$CXX
for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:2971: checking for $ac_word" >&5
+echo "$as_me:3203: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_CXX"; then
ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_ac_ct_CXX="$ac_prog"
-echo "$as_me:2986: found $ac_dir/$ac_word" >&5
+echo "$as_me:3218: found $ac_dir/$ac_word" >&5
break
done
fi
fi
ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
if test -n "$ac_ct_CXX"; then
- echo "$as_me:2994: result: $ac_ct_CXX" >&5
+ echo "$as_me:3226: result: $ac_ct_CXX" >&5
echo "${ECHO_T}$ac_ct_CXX" >&6
else
- echo "$as_me:2997: result: no" >&5
+ echo "$as_me:3229: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$ac_ct_CXX" && break
done
test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
CXX=$ac_ct_CXX
fi
# Provide some information about the compiler.
-echo "$as_me:3009:" \
+echo "$as_me:3241:" \
"checking for C++ compiler version" >&5
ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:3012: \"$ac_compiler --version </dev/null >&5\"") >&5
+{ (eval echo "$as_me:3244: \"$ac_compiler --version </dev/null >&5\"") >&5
(eval $ac_compiler --version </dev/null >&5) 2>&5
ac_status=$?
- echo "$as_me:3015: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:3017: \"$ac_compiler -v </dev/null >&5\"") >&5
+ echo "$as_me:3247: \$? = $ac_status" >&5
+ (exit "$ac_status"); }
+{ (eval echo "$as_me:3249: \"$ac_compiler -v </dev/null >&5\"") >&5
(eval $ac_compiler -v </dev/null >&5) 2>&5
ac_status=$?
- echo "$as_me:3020: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:3022: \"$ac_compiler -V </dev/null >&5\"") >&5
+ echo "$as_me:3252: \$? = $ac_status" >&5
+ (exit "$ac_status"); }
+{ (eval echo "$as_me:3254: \"$ac_compiler -V </dev/null >&5\"") >&5
(eval $ac_compiler -V </dev/null >&5) 2>&5
ac_status=$?
- echo "$as_me:3025: \$? = $ac_status" >&5
- (exit $ac_status); }
+ echo "$as_me:3257: \$? = $ac_status" >&5
+ (exit "$ac_status"); }
-echo "$as_me:3028: checking whether we are using the GNU C++ compiler" >&5
+echo "$as_me:3260: checking whether we are using the GNU C++ compiler" >&5
echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3034 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 3266 "configure"
#include "confdefs.h"
int
main (void)
{
#ifndef __GNUC__
choke me
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3049: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:3281: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3052: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3055: \"$ac_try\"") >&5
+ echo "$as_me:3284: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:3287: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3058: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:3290: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_compiler_gnu=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_compiler_gnu=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
fi
-echo "$as_me:3070: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "$as_me:3302: result: $ac_cv_cxx_compiler_gnu" >&5
echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
GXX=`test $ac_compiler_gnu = yes && echo yes`
ac_test_CXXFLAGS=${CXXFLAGS+set}
ac_save_CXXFLAGS=$CXXFLAGS
CXXFLAGS="-g"
-echo "$as_me:3076: checking whether $CXX accepts -g" >&5
+echo "$as_me:3308: checking whether $CXX accepts -g" >&5
echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
if test "${ac_cv_prog_cxx_g+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3082 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 3314 "configure"
#include "confdefs.h"
int
main (void)
{
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3094: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:3326: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3097: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3100: \"$ac_try\"") >&5
+ echo "$as_me:3329: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:3332: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3103: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:3335: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_prog_cxx_g=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_cv_prog_cxx_g=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:3113: result: $ac_cv_prog_cxx_g" >&5
+echo "$as_me:3345: result: $ac_cv_prog_cxx_g" >&5
echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
if test "$ac_test_CXXFLAGS" = set; then
CXXFLAGS=$ac_save_CXXFLAGS
elif test $ac_cv_prog_cxx_g = yes; then
if test "$GXX" = yes; then
CXXFLAGS="-g -O2"
else
CXXFLAGS="-g"
fi
else
if test "$GXX" = yes; then
CXXFLAGS="-O2"
else
CXXFLAGS=
fi
fi
for ac_declaration in \
''\
'#include <stdlib.h>' \
'extern "C" void std::exit (int) throw (); using std::exit;' \
'extern "C" void std::exit (int); using std::exit;' \
'extern "C" void exit (int) throw ();' \
'extern "C" void exit (int);' \
'void exit (int);'
do
- cat >conftest.$ac_ext <<_ACEOF
-#line 3140 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 3372 "configure"
#include "confdefs.h"
#include <stdlib.h>
$ac_declaration
int
main (void)
{
exit (42);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3153: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:3385: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3156: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3159: \"$ac_try\"") >&5
+ echo "$as_me:3388: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:3391: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3162: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:3394: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
:
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
continue
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-#line 3172 "configure"
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 3404 "configure"
#include "confdefs.h"
$ac_declaration
int
main (void)
{
exit (42);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3184: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:3416: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3187: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3190: \"$ac_try\"") >&5
+ echo "$as_me:3419: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:3422: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3193: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:3425: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
done
rm -rf conftest*
if test -n "$ac_declaration"; then
echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
+ echo "$ac_declaration" >>confdefs.h
echo '#endif' >>confdefs.h
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
if test "x$cf_with_cxx" != xno
then
# Several of the C++ configurations do not work, particularly when
# cross-compiling (20140913 -TD)
- echo "$as_me:3227: checking if $CXX works" >&5
+ echo "$as_me:3459: checking if $CXX works" >&5
echo $ECHO_N "checking if $CXX works... $ECHO_C" >&6
save_CPPFLAGS="$CPPFLAGS"
eval cf_includedir=${includedir}
CPPFLAGS="$CPPFLAGS -I${cf_includedir}"
-cat >conftest.$ac_ext <<_ACEOF
-#line 3235 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 3467 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdio.h>
int
main (void)
{
printf("Hello world!\n")
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3252: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:3484: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3255: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3258: \"$ac_try\"") >&5
+ echo "$as_me:3487: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:3490: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3261: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:3493: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cxx_works=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cxx_works=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
CPPFLAGS="$save_CPPFLAGS"
- echo "$as_me:3272: result: $cf_cxx_works" >&5
+ echo "$as_me:3504: result: $cf_cxx_works" >&5
echo "${ECHO_T}$cf_cxx_works" >&6
if test "x$cf_cxx_works" = xno
then
- { echo "$as_me:3276: WARNING: Ignore $CXX, since it cannot compile hello-world." >&5
+ { echo "$as_me:3508: WARNING: Ignore $CXX, since it cannot compile hello-world." >&5
echo "$as_me: WARNING: Ignore $CXX, since it cannot compile hello-world." >&2;}
cf_with_cxx=no; CXX=""; GXX="";
fi
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
# autoconf 2.5x removed the error (hardcoding it to g++, or just blank)
if test "$CXX" = "g++" ; then
# Extract the first word of "g++", so it can be a program name with args.
set dummy g++; ac_word=$2
-echo "$as_me:3292: checking for $ac_word" >&5
+echo "$as_me:3524: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_path_CXX+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
case $CXX in
[\\/]* | ?:[\\/]*)
ac_cv_path_CXX="$CXX" # Let the user override the test with a path.
;;
*)
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
if $as_executable_p "$ac_dir/$ac_word"; then
ac_cv_path_CXX="$ac_dir/$ac_word"
- echo "$as_me:3309: found $ac_dir/$ac_word" >&5
+ echo "$as_me:3541: found $ac_dir/$ac_word" >&5
break
fi
done
;;
esac
fi
CXX=$ac_cv_path_CXX
if test -n "$CXX"; then
- echo "$as_me:3320: result: $CXX" >&5
+ echo "$as_me:3552: result: $CXX" >&5
echo "${ECHO_T}$CXX" >&6
else
- echo "$as_me:3323: result: no" >&5
+ echo "$as_me:3555: result: no" >&5
echo "${ECHO_T}no" >&6
fi
fi
case "x$CXX" in
(x|xg++)
- { echo "$as_me:3330: WARNING: You don't have any C++ compiler, too bad" >&5
+ { echo "$as_me:3562: WARNING: You don't have any C++ compiler, too bad" >&5
echo "$as_me: WARNING: You don't have any C++ compiler, too bad" >&2;}
cf_with_cxx=no; CXX=""; GXX="";
;;
esac
fi
GXX_VERSION=none
if test "$GXX" = yes; then
- echo "$as_me:3339: checking version of ${CXX:-g++}" >&5
+ echo "$as_me:3571: checking version of ${CXX:-g++}" >&5
echo $ECHO_N "checking version of ${CXX:-g++}... $ECHO_C" >&6
GXX_VERSION="`${CXX:-g++} --version| sed -e '2,$d' -e 's/^.*(GCC) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
if test -z "$GXX_VERSION"
then
GXX_VERSION=unknown
GXX=no
fi
- echo "$as_me:3347: result: $GXX_VERSION" >&5
+ echo "$as_me:3579: result: $GXX_VERSION" >&5
echo "${ECHO_T}$GXX_VERSION" >&6
fi
-case $GXX_VERSION in
-(1*|2.[0-6]*)
- # GXX=""; CXX=""; ac_cv_prog_gxx=no
- # cf_cxx_library=no
- { echo "$as_me:3355: WARNING: templates do not work" >&5
+case "$GXX_VERSION" in
+([1-9][0-9].*)
+ ;;
+(1.*|2.[0-6]*)
+ { echo "$as_me:3587: WARNING: templates do not work" >&5
echo "$as_me: WARNING: templates do not work" >&2;}
;;
esac
-echo "$as_me:3360: checking if you want to build C++ binding and demo" >&5
+echo "$as_me:3592: checking if you want to build C++ binding and demo" >&5
echo $ECHO_N "checking if you want to build C++ binding and demo... $ECHO_C" >&6
# Check whether --with-cxx-binding or --without-cxx-binding was given.
if test "${with_cxx_binding+set}" = set; then
withval="$with_cxx_binding"
cf_with_cxx_binding=$withval
else
cf_with_cxx_binding=$cf_with_cxx
fi;
-echo "$as_me:3370: result: $cf_with_cxx_binding" >&5
+echo "$as_me:3602: result: $cf_with_cxx_binding" >&5
echo "${ECHO_T}$cf_with_cxx_binding" >&6
-echo "$as_me:3373: checking if you want to build with Ada" >&5
+echo "$as_me:3605: checking if you want to build with Ada" >&5
echo $ECHO_N "checking if you want to build with Ada... $ECHO_C" >&6
-echo "$as_me:3375: result: $cf_with_ada" >&5
+echo "$as_me:3607: result: $cf_with_ada" >&5
echo "${ECHO_T}$cf_with_ada" >&6
-echo "$as_me:3378: checking if you want to install terminal database" >&5
+echo "$as_me:3610: checking if you want to install terminal database" >&5
echo $ECHO_N "checking if you want to install terminal database... $ECHO_C" >&6
# Check whether --enable-db-install or --disable-db-install was given.
if test "${enable_db_install+set}" = set; then
enableval="$enable_db_install"
cf_with_db_install=$enableval
else
cf_with_db_install=yes
fi;
-echo "$as_me:3388: result: $cf_with_db_install" >&5
+echo "$as_me:3620: result: $cf_with_db_install" >&5
echo "${ECHO_T}$cf_with_db_install" >&6
-echo "$as_me:3391: checking if you want to install manpages" >&5
+echo "$as_me:3623: checking if you want to install manpages" >&5
echo $ECHO_N "checking if you want to install manpages... $ECHO_C" >&6
# Check whether --with-manpages or --without-manpages was given.
if test "${with_manpages+set}" = set; then
withval="$with_manpages"
cf_with_manpages=$withval
else
cf_with_manpages=yes
fi;
-echo "$as_me:3401: result: $cf_with_manpages" >&5
+echo "$as_me:3633: result: $cf_with_manpages" >&5
echo "${ECHO_T}$cf_with_manpages" >&6
-echo "$as_me:3404: checking if you want to build programs such as tic" >&5
+echo "$as_me:3636: checking if you want to build programs such as tic" >&5
echo $ECHO_N "checking if you want to build programs such as tic... $ECHO_C" >&6
# Check whether --with-progs or --without-progs was given.
if test "${with_progs+set}" = set; then
withval="$with_progs"
cf_with_progs=$withval
else
cf_with_progs=yes
fi;
-echo "$as_me:3414: result: $cf_with_progs" >&5
+echo "$as_me:3646: result: $cf_with_progs" >&5
echo "${ECHO_T}$cf_with_progs" >&6
-if test -f $srcdir/tack/tack.h; then
+if test -f "$srcdir/tack/tack.h" ; then
if test "x$cross_compiling" = xyes ; then
test -n "$verbose" && echo " ignoring tack because we are cross-compiling" 1>&6
-echo "${as_me:-configure}:3421: testing ignoring tack because we are cross-compiling ..." 1>&5
+echo "${as_me:-configure}:3653: testing ignoring tack because we are cross-compiling ..." 1>&5
cf_with_tack=no
else
- echo "$as_me:3425: checking if you want to build the tack program" >&5
+ echo "$as_me:3657: checking if you want to build the tack program" >&5
echo $ECHO_N "checking if you want to build the tack program... $ECHO_C" >&6
# Check whether --with-tack or --without-tack was given.
if test "${with_tack+set}" = set; then
withval="$with_tack"
cf_with_tack=$withval
else
cf_with_tack=$cf_with_progs
fi;
- echo "$as_me:3435: result: $cf_with_tack" >&5
+ echo "$as_me:3667: result: $cf_with_tack" >&5
echo "${ECHO_T}$cf_with_tack" >&6
fi
else
cf_with_tack=no
fi
-echo "$as_me:3442: checking if you want to build test-programs" >&5
+echo "$as_me:3674: checking if you want to build test-programs" >&5
echo $ECHO_N "checking if you want to build test-programs... $ECHO_C" >&6
# Check whether --with-tests or --without-tests was given.
if test "${with_tests+set}" = set; then
withval="$with_tests"
cf_with_tests=$withval
else
cf_with_tests=yes
fi;
-echo "$as_me:3452: result: $cf_with_tests" >&5
+echo "$as_me:3684: result: $cf_with_tests" >&5
echo "${ECHO_T}$cf_with_tests" >&6
-echo "$as_me:3455: checking if you wish to install curses.h" >&5
+echo "$as_me:3687: checking if you wish to install curses.h" >&5
echo $ECHO_N "checking if you wish to install curses.h... $ECHO_C" >&6
# Check whether --with-curses-h or --without-curses-h was given.
if test "${with_curses_h+set}" = set; then
withval="$with_curses_h"
with_curses_h=$withval
else
with_curses_h=yes
fi;
-echo "$as_me:3465: result: $with_curses_h" >&5
+echo "$as_me:3697: result: $with_curses_h" >&5
echo "${ECHO_T}$with_curses_h" >&6
modules_to_build="ncurses"
test "X$cf_with_progs" != Xno && modules_to_build="$modules_to_build progs"
test "X$cf_with_tack" != Xno && modules_to_build="$modules_to_build tack"
modules_to_build="$modules_to_build panel menu form"
test "$program_prefix" != NONE &&
program_transform_name="s,^,$program_prefix,;$program_transform_name"
# Use a double $ so make ignores it.
test "$program_suffix" != NONE &&
program_transform_name="s,\$,$program_suffix,;$program_transform_name"
# Double any \ or $. echo might interpret backslashes.
# By default was `s,x,x', remove it if useless.
cat <<\_ACEOF >conftest.sed
s/[\\$]/&&/g;s/;s,x,x,$//
_ACEOF
program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
rm conftest.sed
for ac_prog in mawk gawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:3490: checking for $ac_word" >&5
+echo "$as_me:3722: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_AWK+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$AWK"; then
ac_cv_prog_AWK="$AWK" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_AWK="$ac_prog"
-echo "$as_me:3505: found $ac_dir/$ac_word" >&5
+echo "$as_me:3737: found $ac_dir/$ac_word" >&5
break
done
fi
fi
AWK=$ac_cv_prog_AWK
if test -n "$AWK"; then
- echo "$as_me:3513: result: $AWK" >&5
+ echo "$as_me:3745: result: $AWK" >&5
echo "${ECHO_T}$AWK" >&6
else
- echo "$as_me:3516: result: no" >&5
+ echo "$as_me:3748: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$AWK" && break
done
-test -z "$AWK" && { { echo "$as_me:3523: error: No awk program found" >&5
+test -z "$AWK" && { { echo "$as_me:3755: error: No awk program found" >&5
echo "$as_me: error: No awk program found" >&2;}
{ (exit 1); exit 1; }; }
-echo "$as_me:3527: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if echo a | (grep -E '(a|b)') >/dev/null 2>&1
- then ac_cv_prog_egrep='grep -E'
- else ac_cv_prog_egrep='egrep'
- fi
-fi
-echo "$as_me:3537: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
-
- test -z "$EGREP" && { { echo "$as_me:3541: error: No egrep program found" >&5
-echo "$as_me: error: No egrep program found" >&2;}
- { (exit 1); exit 1; }; }
-
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
# SysV /etc/install, /usr/sbin/install
# SunOS /usr/etc/install
# IRIX /sbin/install
# AIX /bin/install
# AmigaOS /C/install, which installs bootblocks on floppy discs
# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:3557: checking for a BSD compatible install" >&5
+echo "$as_me:3771: checking for a BSD compatible install" >&5
echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6
if test -z "$INSTALL"; then
if test "${ac_cv_path_install+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
for ac_dir in $PATH; do
IFS=$ac_save_IFS
# Account for people who put trailing slashes in PATH elements.
case $ac_dir/ in
/ | ./ | .// | /cC/* \
| /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \
| /usr/ucb/* ) ;;
*)
# OSF1 and SCO ODT 3.0 have their own names for install.
# Don't use installbsd from OSF since it installs stuff as root
# by default.
for ac_prog in ginstall scoinst install; do
if $as_executable_p "$ac_dir/$ac_prog"; then
if test $ac_prog = install &&
grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
:
elif test $ac_prog = install &&
grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then
# program-specific install script used by HP pwplus--don't use.
:
else
ac_cv_path_install="$ac_dir/$ac_prog -c"
break 2
fi
fi
done
;;
esac
done
fi
if test "${ac_cv_path_install+set}" = set; then
INSTALL=$ac_cv_path_install
else
# As a last resort, use the slow shell script. We don't cache a
# path for INSTALL within a source directory, because that will
# break other packages using the cache if that directory is
# removed, or if the path is relative.
INSTALL=$ac_install_sh
fi
fi
-echo "$as_me:3606: result: $INSTALL" >&5
+echo "$as_me:3820: result: $INSTALL" >&5
echo "${ECHO_T}$INSTALL" >&6
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
case $INSTALL in
(/*)
;;
(*)
- cf_dir=`echo $INSTALL | sed -e 's%/[^/]*$%%'`
+ cf_dir=`echo "$INSTALL" | sed -e 's%/[^/]*$%%'`
test -z "$cf_dir" && cf_dir=.
- INSTALL=`cd $cf_dir && pwd`/`echo $INSTALL | sed -e 's%^.*/%%'`
+ INSTALL="`cd \"$cf_dir\" && pwd`"/"`echo "$INSTALL" | sed -e 's%^.*/%%'`"
;;
esac
for ac_prog in lint cppcheck splint
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:3631: checking for $ac_word" >&5
+echo "$as_me:3845: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_LINT+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$LINT"; then
ac_cv_prog_LINT="$LINT" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_LINT="$ac_prog"
-echo "$as_me:3646: found $ac_dir/$ac_word" >&5
+echo "$as_me:3860: found $ac_dir/$ac_word" >&5
break
done
fi
fi
LINT=$ac_cv_prog_LINT
if test -n "$LINT"; then
- echo "$as_me:3654: result: $LINT" >&5
+ echo "$as_me:3868: result: $LINT" >&5
echo "${ECHO_T}$LINT" >&6
else
- echo "$as_me:3657: result: no" >&5
+ echo "$as_me:3871: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$LINT" && break
done
case "x$LINT" in
(xcppcheck|x*/cppcheck)
test -z "$LINT_OPTS" && LINT_OPTS="--enable=all"
;;
esac
-echo "$as_me:3670: checking whether ln -s works" >&5
+echo "$as_me:3884: checking whether ln -s works" >&5
echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
LN_S=$as_ln_s
if test "$LN_S" = "ln -s"; then
- echo "$as_me:3674: result: yes" >&5
+ echo "$as_me:3888: result: yes" >&5
echo "${ECHO_T}yes" >&6
else
- echo "$as_me:3677: result: no, using $LN_S" >&5
+ echo "$as_me:3891: result: no, using $LN_S" >&5
echo "${ECHO_T}no, using $LN_S" >&6
fi
-echo "$as_me:3681: checking if $LN_S -f options work" >&5
+echo "$as_me:3895: checking if $LN_S -f options work" >&5
echo $ECHO_N "checking if $LN_S -f options work... $ECHO_C" >&6
rm -f conf$$.src conf$$dst
echo >conf$$.dst
echo first >conf$$.src
if $LN_S -f conf$$.src conf$$.dst 2>/dev/null; then
cf_prog_ln_sf=yes
else
cf_prog_ln_sf=no
fi
rm -f conf$$.dst conf$$src
-echo "$as_me:3693: result: $cf_prog_ln_sf" >&5
+echo "$as_me:3907: result: $cf_prog_ln_sf" >&5
echo "${ECHO_T}$cf_prog_ln_sf" >&6
test "$cf_prog_ln_sf" = yes && LN_S="$LN_S -f"
-echo "$as_me:3698: checking for long file names" >&5
+echo "$as_me:3912: checking for long file names" >&5
echo $ECHO_N "checking for long file names... $ECHO_C" >&6
if test "${ac_cv_sys_long_file_names+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_sys_long_file_names=yes
# Test for long file names in all the places we know might matter:
# . the current directory, where building will happen
# $prefix/lib where we will be installing things
# $exec_prefix/lib likewise
# eval it to expand exec_prefix.
# $TMPDIR if set, where it might want to write temporary files
# if $TMPDIR is not set:
# /tmp where it might want to write temporary files
# /var/tmp likewise
# /usr/tmp likewise
if test -n "$TMPDIR" && test -d "$TMPDIR" && test -w "$TMPDIR"; then
ac_tmpdirs=$TMPDIR
else
ac_tmpdirs='/tmp /var/tmp /usr/tmp'
fi
-for ac_dir in . $ac_tmpdirs `eval echo $prefix/lib $exec_prefix/lib` ; do
- test -d $ac_dir || continue
- test -w $ac_dir || continue # It is less confusing to not echo anything here.
+for ac_dir in . $ac_tmpdirs `eval echo "$prefix/lib" "$exec_prefix/lib"` ; do
+ test -d "$ac_dir" || continue
+ test -w "$ac_dir" || continue # It is less confusing to not echo anything here.
ac_xdir=$ac_dir/cf$$
- (umask 077 && mkdir $ac_xdir 2>/dev/null) || continue
+ (umask 077 && mkdir "$ac_xdir" 2>/dev/null) || continue
ac_tf1=$ac_xdir/conftest9012345
ac_tf2=$ac_xdir/conftest9012346
- (echo 1 >$ac_tf1) 2>/dev/null
- (echo 2 >$ac_tf2) 2>/dev/null
- ac_val=`cat $ac_tf1 2>/dev/null`
- if test ! -f $ac_tf1 || test "$ac_val" != 1; then
+ (echo 1 >"$ac_tf1") 2>/dev/null
+ (echo 2 >"$ac_tf2") 2>/dev/null
+ ac_val=`cat "$ac_tf1" 2>/dev/null`
+ if test ! -f "$ac_tf1" || test "$ac_val" != 1; then
ac_cv_sys_long_file_names=no
- rm -rf $ac_xdir 2>/dev/null
+ rm -rf "$ac_xdir" 2>/dev/null
break
fi
- rm -rf $ac_xdir 2>/dev/null
+ rm -rf "$ac_xdir" 2>/dev/null
done
fi
-echo "$as_me:3737: result: $ac_cv_sys_long_file_names" >&5
+echo "$as_me:3951: result: $ac_cv_sys_long_file_names" >&5
echo "${ECHO_T}$ac_cv_sys_long_file_names" >&6
-if test $ac_cv_sys_long_file_names = yes; then
+if test "$ac_cv_sys_long_file_names" = yes; then
cat >>confdefs.h <<\EOF
#define HAVE_LONG_FILE_NAMES 1
EOF
fi
# Provide for renaming "ncurses5-config" to "ncurses5X-config", etc., in case
# of package conflict.
cf_config_suffix=
# Check whether --with-config-suffix or --without-config-suffix was given.
if test "${with_config_suffix+set}" = set; then
withval="$with_config_suffix"
case "x$withval" in
(xyes|xno)
- { echo "$as_me:3756: WARNING: expected a value for config-suffix option" >&5
+ { echo "$as_me:3970: WARNING: expected a value for config-suffix option" >&5
echo "$as_me: WARNING: expected a value for config-suffix option" >&2;}
;;
(*) cf_config_suffix="$withval"
;;
esac
fi;
# If we find pkg-config, check if we should install the ".pc" files.
-echo "$as_me:3766: checking if you want to use pkg-config" >&5
+echo "$as_me:3980: checking if you want to use pkg-config" >&5
echo $ECHO_N "checking if you want to use pkg-config... $ECHO_C" >&6
# Check whether --with-pkg-config or --without-pkg-config was given.
if test "${with_pkg_config+set}" = set; then
withval="$with_pkg_config"
cf_pkg_config=$withval
else
cf_pkg_config=yes
fi;
-echo "$as_me:3776: result: $cf_pkg_config" >&5
+echo "$as_me:3990: result: $cf_pkg_config" >&5
echo "${ECHO_T}$cf_pkg_config" >&6
-case $cf_pkg_config in
+case "$cf_pkg_config" in
(no)
PKG_CONFIG=none
;;
(yes)
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-echo "$as_me:3788: checking for $ac_word" >&5
+echo "$as_me:4002: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
case $PKG_CONFIG in
[\\/]* | ?:[\\/]*)
ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
;;
*)
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
if $as_executable_p "$ac_dir/$ac_word"; then
ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word"
- echo "$as_me:3805: found $ac_dir/$ac_word" >&5
+ echo "$as_me:4019: found $ac_dir/$ac_word" >&5
break
fi
done
;;
esac
fi
PKG_CONFIG=$ac_cv_path_PKG_CONFIG
if test -n "$PKG_CONFIG"; then
- echo "$as_me:3816: result: $PKG_CONFIG" >&5
+ echo "$as_me:4030: result: $PKG_CONFIG" >&5
echo "${ECHO_T}$PKG_CONFIG" >&6
else
- echo "$as_me:3819: result: no" >&5
+ echo "$as_me:4033: result: no" >&5
echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_path_PKG_CONFIG"; then
ac_pt_PKG_CONFIG=$PKG_CONFIG
# Extract the first word of "pkg-config", so it can be a program name with args.
set dummy pkg-config; ac_word=$2
-echo "$as_me:3828: checking for $ac_word" >&5
+echo "$as_me:4042: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
case $ac_pt_PKG_CONFIG in
[\\/]* | ?:[\\/]*)
ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
;;
*)
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
if $as_executable_p "$ac_dir/$ac_word"; then
ac_cv_path_ac_pt_PKG_CONFIG="$ac_dir/$ac_word"
- echo "$as_me:3845: found $ac_dir/$ac_word" >&5
+ echo "$as_me:4059: found $ac_dir/$ac_word" >&5
break
fi
done
test -z "$ac_cv_path_ac_pt_PKG_CONFIG" && ac_cv_path_ac_pt_PKG_CONFIG="none"
;;
esac
fi
ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
if test -n "$ac_pt_PKG_CONFIG"; then
- echo "$as_me:3857: result: $ac_pt_PKG_CONFIG" >&5
+ echo "$as_me:4071: result: $ac_pt_PKG_CONFIG" >&5
echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6
else
- echo "$as_me:3860: result: no" >&5
+ echo "$as_me:4074: result: no" >&5
echo "${ECHO_T}no" >&6
fi
PKG_CONFIG=$ac_pt_PKG_CONFIG
else
PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
fi
;;
(*)
PKG_CONFIG=$withval
;;
esac
test -z "$PKG_CONFIG" && PKG_CONFIG=none
if test "$PKG_CONFIG" != none ; then
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".$PKG_CONFIG" in
(.\$\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[a-zA-Z]:[\\/]*) # OS/2 EMX
;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
eval PKG_CONFIG="$PKG_CONFIG"
case ".$PKG_CONFIG" in
(.NONE/*)
- PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%`
+ PKG_CONFIG=`echo "$PKG_CONFIG" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%`
+ PKG_CONFIG=`echo "$PKG_CONFIG" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
- { { echo "$as_me:3903: error: expected a pathname, not \"$PKG_CONFIG\"" >&5
+ { { echo "$as_me:4117: error: expected a pathname, not \"$PKG_CONFIG\"" >&5
echo "$as_me: error: expected a pathname, not \"$PKG_CONFIG\"" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
elif test "x$cf_pkg_config" != xno ; then
- { echo "$as_me:3910: WARNING: pkg-config is not installed" >&5
+ { echo "$as_me:4124: WARNING: pkg-config is not installed" >&5
echo "$as_me: WARNING: pkg-config is not installed" >&2;}
fi
-case $PKG_CONFIG in
+case "$PKG_CONFIG" in
(no|none|yes)
- echo "$as_me:3916: checking for pkg-config library directory" >&5
+ echo "$as_me:4130: checking for pkg-config library directory" >&5
echo $ECHO_N "checking for pkg-config library directory... $ECHO_C" >&6
;;
(*)
- echo "$as_me:3920: checking for $PKG_CONFIG library directory" >&5
+ echo "$as_me:4134: checking for $PKG_CONFIG library directory" >&5
echo $ECHO_N "checking for $PKG_CONFIG library directory... $ECHO_C" >&6
;;
esac
PKG_CONFIG_LIBDIR=no
# Check whether --with-pkg-config-libdir or --without-pkg-config-libdir was given.
if test "${with_pkg_config_libdir+set}" = set; then
withval="$with_pkg_config_libdir"
PKG_CONFIG_LIBDIR=$withval
else
test "x$PKG_CONFIG" != xnone && PKG_CONFIG_LIBDIR=yes
fi;
case x$PKG_CONFIG_LIBDIR in
(x/*)
;;
(xyes)
# Look for the library directory using the same prefix as the executable
if test "x$PKG_CONFIG" = xnone
then
cf_path=$prefix
else
cf_path=`echo "$PKG_CONFIG" | sed -e 's,/[^/]*/[^/]*$,,'`
fi
# If you don't like using the default architecture, you have to specify the
# intended library directory and corresponding compiler/linker options.
#
# This case allows for Debian's 2014-flavor of multiarch, along with the
# most common variations before that point. Some other variants spell the
# directory differently, e.g., "pkg-config", and put it in unusual places.
# pkg-config has always been poorly standardized, which is ironic...
case x`(arch) 2>/dev/null` in
(*64)
cf_search_path="\
$cf_path/lib/*64-linux-gnu \
$cf_path/share \
$cf_path/lib64 \
$cf_path/lib32 \
$cf_path/lib"
;;
(*)
cf_search_path="\
$cf_path/lib/*-linux-gnu \
$cf_path/share \
$cf_path/lib32 \
$cf_path/lib \
$cf_path/libdata"
;;
esac
test -n "$verbose" && echo " list..." 1>&6
-echo "${as_me:-configure}:3975: testing list... ..." 1>&5
+echo "${as_me:-configure}:4189: testing list... ..." 1>&5
for cf_config in $cf_search_path
do
test -n "$verbose" && echo " checking $cf_config/pkgconfig" 1>&6
-echo "${as_me:-configure}:3981: testing checking $cf_config/pkgconfig ..." 1>&5
+echo "${as_me:-configure}:4195: testing checking $cf_config/pkgconfig ..." 1>&5
- if test -d $cf_config/pkgconfig
+ if test -d "$cf_config/pkgconfig"
then
PKG_CONFIG_LIBDIR=$cf_config/pkgconfig
- echo "$as_me:3986: checking done" >&5
+ echo "$as_me:4200: checking done" >&5
echo $ECHO_N "checking done... $ECHO_C" >&6
break
fi
done
;;
(*)
;;
esac
if test "x$PKG_CONFIG_LIBDIR" != xno ; then
- echo "$as_me:3997: result: $PKG_CONFIG_LIBDIR" >&5
+ echo "$as_me:4211: result: $PKG_CONFIG_LIBDIR" >&5
echo "${ECHO_T}$PKG_CONFIG_LIBDIR" >&6
fi
if test "x$PKG_CONFIG" != xnone
then
- echo "$as_me:4003: checking if we should install .pc files for $PKG_CONFIG" >&5
+ echo "$as_me:4217: checking if we should install .pc files for $PKG_CONFIG" >&5
echo $ECHO_N "checking if we should install .pc files for $PKG_CONFIG... $ECHO_C" >&6
else
- echo "$as_me:4006: checking if we should install .pc files" >&5
+ echo "$as_me:4220: checking if we should install .pc files" >&5
echo $ECHO_N "checking if we should install .pc files... $ECHO_C" >&6
fi
# Check whether --enable-pc-files or --disable-pc-files was given.
if test "${enable_pc_files+set}" = set; then
enableval="$enable_pc_files"
enable_pc_files=$enableval
else
enable_pc_files=no
fi;
-echo "$as_me:4017: result: $enable_pc_files" >&5
+echo "$as_me:4231: result: $enable_pc_files" >&5
echo "${ECHO_T}$enable_pc_files" >&6
if test "x$enable_pc_files" != xno
then
MAKE_PC_FILES=
case "x$PKG_CONFIG_LIBDIR" in
(xno|xyes)
- { echo "$as_me:4025: WARNING: no PKG_CONFIG_LIBDIR was found" >&5
+ { echo "$as_me:4239: WARNING: no PKG_CONFIG_LIBDIR was found" >&5
echo "$as_me: WARNING: no PKG_CONFIG_LIBDIR was found" >&2;}
;;
(*)
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".$PKG_CONFIG_LIBDIR" in
(.\$\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[a-zA-Z]:[\\/]*) # OS/2 EMX
;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
eval PKG_CONFIG_LIBDIR="$PKG_CONFIG_LIBDIR"
case ".$PKG_CONFIG_LIBDIR" in
(.NONE/*)
- PKG_CONFIG_LIBDIR=`echo $PKG_CONFIG_LIBDIR | sed -e s%NONE%$cf_path_syntax%`
+ PKG_CONFIG_LIBDIR=`echo "$PKG_CONFIG_LIBDIR" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- PKG_CONFIG_LIBDIR=`echo $PKG_CONFIG_LIBDIR | sed -e s%NONE%$cf_path_syntax%`
+ PKG_CONFIG_LIBDIR=`echo "$PKG_CONFIG_LIBDIR" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
- { { echo "$as_me:4055: error: expected a pathname, not \"$PKG_CONFIG_LIBDIR\"" >&5
+ { { echo "$as_me:4269: error: expected a pathname, not \"$PKG_CONFIG_LIBDIR\"" >&5
echo "$as_me: error: expected a pathname, not \"$PKG_CONFIG_LIBDIR\"" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
;;
esac
else
MAKE_PC_FILES="#"
fi
if test -z "$MAKE_PC_FILES"
then
- echo "$as_me:4069: checking for suffix to add to pc-files" >&5
+ echo "$as_me:4283: checking for suffix to add to pc-files" >&5
echo $ECHO_N "checking for suffix to add to pc-files... $ECHO_C" >&6
# Check whether --with-pc-suffix or --without-pc-suffix was given.
if test "${with_pc_suffix+set}" = set; then
withval="$with_pc_suffix"
case "x$withval" in
(xyes|xno)
PC_MODULE_SUFFIX=
;;
(*) PC_MODULE_SUFFIX="$withval"
;;
esac
fi;
test -z "$PC_MODULE_SUFFIX" && PC_MODULE_SUFFIX=none
- echo "$as_me:4084: result: $PC_MODULE_SUFFIX" >&5
+ echo "$as_me:4298: result: $PC_MODULE_SUFFIX" >&5
echo "${ECHO_T}$PC_MODULE_SUFFIX" >&6
test "$PC_MODULE_SUFFIX" = none && PC_MODULE_SUFFIX=
fi
-echo "$as_me:4090: checking if we should assume mixed-case filenames" >&5
+echo "$as_me:4304: checking if we should assume mixed-case filenames" >&5
echo $ECHO_N "checking if we should assume mixed-case filenames... $ECHO_C" >&6
# Check whether --enable-mixed-case or --disable-mixed-case was given.
if test "${enable_mixed_case+set}" = set; then
enableval="$enable_mixed_case"
enable_mixedcase=$enableval
else
enable_mixedcase=auto
fi;
-echo "$as_me:4100: result: $enable_mixedcase" >&5
+echo "$as_me:4314: result: $enable_mixedcase" >&5
echo "${ECHO_T}$enable_mixedcase" >&6
if test "$enable_mixedcase" = "auto" ; then
-echo "$as_me:4104: checking if filesystem supports mixed-case filenames" >&5
+echo "$as_me:4318: checking if filesystem supports mixed-case filenames" >&5
echo $ECHO_N "checking if filesystem supports mixed-case filenames... $ECHO_C" >&6
if test "${cf_cv_mixedcase+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$cross_compiling" = yes ; then
- case $target_alias in
- (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*)
+ case "$target_alias" in
+ (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*|darwin*)
cf_cv_mixedcase=no
;;
(*)
cf_cv_mixedcase=yes
;;
esac
else
rm -f conftest CONFTEST
echo test >conftest
if test -f CONFTEST ; then
cf_cv_mixedcase=no
else
cf_cv_mixedcase=yes
fi
rm -f conftest CONFTEST
fi
fi
-echo "$as_me:4131: result: $cf_cv_mixedcase" >&5
+echo "$as_me:4345: result: $cf_cv_mixedcase" >&5
echo "${ECHO_T}$cf_cv_mixedcase" >&6
test "$cf_cv_mixedcase" = yes &&
cat >>confdefs.h <<\EOF
#define MIXEDCASE_FILENAMES 1
EOF
else
cf_cv_mixedcase=$enable_mixedcase
if test "x$enable_mixedcase" = "xyes" ; then
cat >>confdefs.h <<\EOF
#define MIXEDCASE_FILENAMES 1
EOF
fi
fi
# do this after mixed-case option (tags/TAGS is not as important as tic).
-echo "$as_me:4150: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "$as_me:4364: checking whether ${MAKE-make} sets \${MAKE}" >&5
echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.make <<\EOF
all:
@echo 'ac_maketemp="${MAKE}"'
EOF
# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
if test -n "$ac_maketemp"; then
eval ac_cv_prog_make_${ac_make}_set=yes
else
eval ac_cv_prog_make_${ac_make}_set=no
fi
rm -f conftest.make
fi
if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$as_me:4170: result: yes" >&5
+ echo "$as_me:4384: result: yes" >&5
echo "${ECHO_T}yes" >&6
SET_MAKE=
else
- echo "$as_me:4174: result: no" >&5
+ echo "$as_me:4388: result: no" >&5
echo "${ECHO_T}no" >&6
SET_MAKE="MAKE=${MAKE-make}"
fi
for ac_prog in exctags ctags
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:4183: checking for $ac_word" >&5
+echo "$as_me:4397: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_CTAGS+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CTAGS"; then
ac_cv_prog_CTAGS="$CTAGS" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_CTAGS="$ac_prog"
-echo "$as_me:4198: found $ac_dir/$ac_word" >&5
+echo "$as_me:4412: found $ac_dir/$ac_word" >&5
break
done
fi
fi
CTAGS=$ac_cv_prog_CTAGS
if test -n "$CTAGS"; then
- echo "$as_me:4206: result: $CTAGS" >&5
+ echo "$as_me:4420: result: $CTAGS" >&5
echo "${ECHO_T}$CTAGS" >&6
else
- echo "$as_me:4209: result: no" >&5
+ echo "$as_me:4423: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$CTAGS" && break
done
for ac_prog in exetags etags
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:4220: checking for $ac_word" >&5
+echo "$as_me:4434: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ETAGS+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ETAGS"; then
ac_cv_prog_ETAGS="$ETAGS" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_ETAGS="$ac_prog"
-echo "$as_me:4235: found $ac_dir/$ac_word" >&5
+echo "$as_me:4449: found $ac_dir/$ac_word" >&5
break
done
fi
fi
ETAGS=$ac_cv_prog_ETAGS
if test -n "$ETAGS"; then
- echo "$as_me:4243: result: $ETAGS" >&5
+ echo "$as_me:4457: result: $ETAGS" >&5
echo "${ECHO_T}$ETAGS" >&6
else
- echo "$as_me:4246: result: no" >&5
+ echo "$as_me:4460: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$ETAGS" && break
done
# Extract the first word of "${CTAGS:-ctags}", so it can be a program name with args.
set dummy ${CTAGS:-ctags}; ac_word=$2
-echo "$as_me:4255: checking for $ac_word" >&5
+echo "$as_me:4469: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_MAKE_LOWER_TAGS+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$MAKE_LOWER_TAGS"; then
ac_cv_prog_MAKE_LOWER_TAGS="$MAKE_LOWER_TAGS" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_MAKE_LOWER_TAGS="yes"
-echo "$as_me:4270: found $ac_dir/$ac_word" >&5
+echo "$as_me:4484: found $ac_dir/$ac_word" >&5
break
done
test -z "$ac_cv_prog_MAKE_LOWER_TAGS" && ac_cv_prog_MAKE_LOWER_TAGS="no"
fi
fi
MAKE_LOWER_TAGS=$ac_cv_prog_MAKE_LOWER_TAGS
if test -n "$MAKE_LOWER_TAGS"; then
- echo "$as_me:4279: result: $MAKE_LOWER_TAGS" >&5
+ echo "$as_me:4493: result: $MAKE_LOWER_TAGS" >&5
echo "${ECHO_T}$MAKE_LOWER_TAGS" >&6
else
- echo "$as_me:4282: result: no" >&5
+ echo "$as_me:4496: result: no" >&5
echo "${ECHO_T}no" >&6
fi
if test "$cf_cv_mixedcase" = yes ; then
# Extract the first word of "${ETAGS:-etags}", so it can be a program name with args.
set dummy ${ETAGS:-etags}; ac_word=$2
-echo "$as_me:4289: checking for $ac_word" >&5
+echo "$as_me:4503: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_MAKE_UPPER_TAGS+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$MAKE_UPPER_TAGS"; then
ac_cv_prog_MAKE_UPPER_TAGS="$MAKE_UPPER_TAGS" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_MAKE_UPPER_TAGS="yes"
-echo "$as_me:4304: found $ac_dir/$ac_word" >&5
+echo "$as_me:4518: found $ac_dir/$ac_word" >&5
break
done
test -z "$ac_cv_prog_MAKE_UPPER_TAGS" && ac_cv_prog_MAKE_UPPER_TAGS="no"
fi
fi
MAKE_UPPER_TAGS=$ac_cv_prog_MAKE_UPPER_TAGS
if test -n "$MAKE_UPPER_TAGS"; then
- echo "$as_me:4313: result: $MAKE_UPPER_TAGS" >&5
+ echo "$as_me:4527: result: $MAKE_UPPER_TAGS" >&5
echo "${ECHO_T}$MAKE_UPPER_TAGS" >&6
else
- echo "$as_me:4316: result: no" >&5
+ echo "$as_me:4530: result: no" >&5
echo "${ECHO_T}no" >&6
fi
else
MAKE_UPPER_TAGS=no
fi
if test "$MAKE_UPPER_TAGS" = yes ; then
MAKE_UPPER_TAGS=
else
MAKE_UPPER_TAGS="#"
fi
if test "$MAKE_LOWER_TAGS" = yes ; then
MAKE_LOWER_TAGS=
else
MAKE_LOWER_TAGS="#"
fi
-echo "$as_me:4336: checking for makeflags variable" >&5
+echo "$as_me:4550: checking for makeflags variable" >&5
echo $ECHO_N "checking for makeflags variable... $ECHO_C" >&6
if test "${cf_cv_makeflags+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cf_cv_makeflags=''
for cf_option in '-${MAKEFLAGS}' '${MFLAGS}'
do
cat >cf_makeflags.tmp <<CF_EOF
SHELL = $SHELL
all :
@ echo '.$cf_option'
CF_EOF
- cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp 2>/dev/null | fgrep -v "ing directory" | sed -e 's,[ ]*$,,'`
+ cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp 2>/dev/null | ${FGREP-fgrep} -v "ing directory" | sed -e 's,[ ]*$,,'`
case "$cf_result" in
(.*k|.*kw)
- cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null`
+ cf_result="`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null`"
case "$cf_result" in
(.*CC=*) cf_cv_makeflags=
;;
(*) cf_cv_makeflags=$cf_option
;;
esac
break
;;
(.-)
;;
(*)
-echo "${as_me:-configure}:4366: testing given option \"$cf_option\",no match \"$cf_result\" ..." 1>&5
+echo "${as_me:-configure}:4580: testing given option \"$cf_option\",no match \"$cf_result\" ..." 1>&5
;;
esac
done
rm -f cf_makeflags.tmp
fi
-echo "$as_me:4374: result: $cf_cv_makeflags" >&5
+echo "$as_me:4588: result: $cf_cv_makeflags" >&5
echo "${ECHO_T}$cf_cv_makeflags" >&6
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-echo "$as_me:4380: checking for $ac_word" >&5
+echo "$as_me:4594: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_RANLIB+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-echo "$as_me:4395: found $ac_dir/$ac_word" >&5
+echo "$as_me:4609: found $ac_dir/$ac_word" >&5
break
done
fi
fi
RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- echo "$as_me:4403: result: $RANLIB" >&5
+ echo "$as_me:4617: result: $RANLIB" >&5
echo "${ECHO_T}$RANLIB" >&6
else
- echo "$as_me:4406: result: no" >&5
+ echo "$as_me:4620: result: no" >&5
echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_RANLIB"; then
ac_ct_RANLIB=$RANLIB
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
-echo "$as_me:4415: checking for $ac_word" >&5
+echo "$as_me:4629: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_RANLIB"; then
ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_ac_ct_RANLIB="ranlib"
-echo "$as_me:4430: found $ac_dir/$ac_word" >&5
+echo "$as_me:4644: found $ac_dir/$ac_word" >&5
break
done
test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB="':'"
fi
fi
ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
if test -n "$ac_ct_RANLIB"; then
- echo "$as_me:4439: result: $ac_ct_RANLIB" >&5
+ echo "$as_me:4653: result: $ac_ct_RANLIB" >&5
echo "${ECHO_T}$ac_ct_RANLIB" >&6
else
- echo "$as_me:4442: result: no" >&5
+ echo "$as_me:4656: result: no" >&5
echo "${ECHO_T}no" >&6
fi
RANLIB=$ac_ct_RANLIB
else
RANLIB="$ac_cv_prog_RANLIB"
fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
set dummy ${ac_tool_prefix}ld; ac_word=$2
-echo "$as_me:4454: checking for $ac_word" >&5
+echo "$as_me:4668: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_LD+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$LD"; then
ac_cv_prog_LD="$LD" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_LD="${ac_tool_prefix}ld"
-echo "$as_me:4469: found $ac_dir/$ac_word" >&5
+echo "$as_me:4683: found $ac_dir/$ac_word" >&5
break
done
fi
fi
LD=$ac_cv_prog_LD
if test -n "$LD"; then
- echo "$as_me:4477: result: $LD" >&5
+ echo "$as_me:4691: result: $LD" >&5
echo "${ECHO_T}$LD" >&6
else
- echo "$as_me:4480: result: no" >&5
+ echo "$as_me:4694: result: no" >&5
echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_LD"; then
ac_ct_LD=$LD
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
-echo "$as_me:4489: checking for $ac_word" >&5
+echo "$as_me:4703: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_LD+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_LD"; then
ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_ac_ct_LD="ld"
-echo "$as_me:4504: found $ac_dir/$ac_word" >&5
+echo "$as_me:4718: found $ac_dir/$ac_word" >&5
break
done
test -z "$ac_cv_prog_ac_ct_LD" && ac_cv_prog_ac_ct_LD="ld"
fi
fi
ac_ct_LD=$ac_cv_prog_ac_ct_LD
if test -n "$ac_ct_LD"; then
- echo "$as_me:4513: result: $ac_ct_LD" >&5
+ echo "$as_me:4727: result: $ac_ct_LD" >&5
echo "${ECHO_T}$ac_ct_LD" >&6
else
- echo "$as_me:4516: result: no" >&5
+ echo "$as_me:4730: result: no" >&5
echo "${ECHO_T}no" >&6
fi
LD=$ac_ct_LD
else
LD="$ac_cv_prog_LD"
fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
set dummy ${ac_tool_prefix}ar; ac_word=$2
-echo "$as_me:4528: checking for $ac_word" >&5
+echo "$as_me:4742: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_AR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_AR="${ac_tool_prefix}ar"
-echo "$as_me:4543: found $ac_dir/$ac_word" >&5
+echo "$as_me:4757: found $ac_dir/$ac_word" >&5
break
done
fi
fi
AR=$ac_cv_prog_AR
if test -n "$AR"; then
- echo "$as_me:4551: result: $AR" >&5
+ echo "$as_me:4765: result: $AR" >&5
echo "${ECHO_T}$AR" >&6
else
- echo "$as_me:4554: result: no" >&5
+ echo "$as_me:4768: result: no" >&5
echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_AR"; then
ac_ct_AR=$AR
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
-echo "$as_me:4563: checking for $ac_word" >&5
+echo "$as_me:4777: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_AR"; then
ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_ac_ct_AR="ar"
-echo "$as_me:4578: found $ac_dir/$ac_word" >&5
+echo "$as_me:4792: found $ac_dir/$ac_word" >&5
break
done
test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="ar"
fi
fi
ac_ct_AR=$ac_cv_prog_ac_ct_AR
if test -n "$ac_ct_AR"; then
- echo "$as_me:4587: result: $ac_ct_AR" >&5
+ echo "$as_me:4801: result: $ac_ct_AR" >&5
echo "${ECHO_T}$ac_ct_AR" >&6
else
- echo "$as_me:4590: result: no" >&5
+ echo "$as_me:4804: result: no" >&5
echo "${ECHO_T}no" >&6
fi
AR=$ac_ct_AR
else
AR="$ac_cv_prog_AR"
fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args.
set dummy ${ac_tool_prefix}nm; ac_word=$2
-echo "$as_me:4602: checking for $ac_word" >&5
+echo "$as_me:4816: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_NM+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$NM"; then
ac_cv_prog_NM="$NM" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_NM="${ac_tool_prefix}nm"
-echo "$as_me:4617: found $ac_dir/$ac_word" >&5
+echo "$as_me:4831: found $ac_dir/$ac_word" >&5
break
done
fi
fi
NM=$ac_cv_prog_NM
if test -n "$NM"; then
- echo "$as_me:4625: result: $NM" >&5
+ echo "$as_me:4839: result: $NM" >&5
echo "${ECHO_T}$NM" >&6
else
- echo "$as_me:4628: result: no" >&5
+ echo "$as_me:4842: result: no" >&5
echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_NM"; then
ac_ct_NM=$NM
# Extract the first word of "nm", so it can be a program name with args.
set dummy nm; ac_word=$2
-echo "$as_me:4637: checking for $ac_word" >&5
+echo "$as_me:4851: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_NM+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_NM"; then
ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_ac_ct_NM="nm"
-echo "$as_me:4652: found $ac_dir/$ac_word" >&5
+echo "$as_me:4866: found $ac_dir/$ac_word" >&5
break
done
test -z "$ac_cv_prog_ac_ct_NM" && ac_cv_prog_ac_ct_NM="nm"
fi
fi
ac_ct_NM=$ac_cv_prog_ac_ct_NM
if test -n "$ac_ct_NM"; then
- echo "$as_me:4661: result: $ac_ct_NM" >&5
+ echo "$as_me:4875: result: $ac_ct_NM" >&5
echo "${ECHO_T}$ac_ct_NM" >&6
else
- echo "$as_me:4664: result: no" >&5
+ echo "$as_me:4878: result: no" >&5
echo "${ECHO_T}no" >&6
fi
NM=$ac_ct_NM
else
NM="$ac_cv_prog_NM"
fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
set dummy ${ac_tool_prefix}ar; ac_word=$2
-echo "$as_me:4676: checking for $ac_word" >&5
+echo "$as_me:4890: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_AR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_AR="${ac_tool_prefix}ar"
-echo "$as_me:4691: found $ac_dir/$ac_word" >&5
+echo "$as_me:4905: found $ac_dir/$ac_word" >&5
break
done
fi
fi
AR=$ac_cv_prog_AR
if test -n "$AR"; then
- echo "$as_me:4699: result: $AR" >&5
+ echo "$as_me:4913: result: $AR" >&5
echo "${ECHO_T}$AR" >&6
else
- echo "$as_me:4702: result: no" >&5
+ echo "$as_me:4916: result: no" >&5
echo "${ECHO_T}no" >&6
fi
fi
if test -z "$ac_cv_prog_AR"; then
ac_ct_AR=$AR
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
-echo "$as_me:4711: checking for $ac_word" >&5
+echo "$as_me:4925: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_AR"; then
ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_ac_ct_AR="ar"
-echo "$as_me:4726: found $ac_dir/$ac_word" >&5
+echo "$as_me:4940: found $ac_dir/$ac_word" >&5
break
done
test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="ar"
fi
fi
ac_ct_AR=$ac_cv_prog_ac_ct_AR
if test -n "$ac_ct_AR"; then
- echo "$as_me:4735: result: $ac_ct_AR" >&5
+ echo "$as_me:4949: result: $ac_ct_AR" >&5
echo "${ECHO_T}$ac_ct_AR" >&6
else
- echo "$as_me:4738: result: no" >&5
+ echo "$as_me:4952: result: no" >&5
echo "${ECHO_T}no" >&6
fi
AR=$ac_ct_AR
else
AR="$ac_cv_prog_AR"
fi
-echo "$as_me:4747: checking for options to update archives" >&5
+echo "$as_me:4961: checking for options to update archives" >&5
echo $ECHO_N "checking for options to update archives... $ECHO_C" >&6
if test "${cf_cv_ar_flags+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cf_cv_ar_flags=unknown
- for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv
- do
+ case "$cf_cv_system_name" in
+ (*-msvc*)
+ cf_cv_ar_flags=''
+ cat >mk_static_lib.sh <<-EOF
+ #!$SHELL
+ MSVC_BIN="$AR"
+ out="\$1"
+ shift
+ exec \$MSVC_BIN -out:"\$out" \$@
+ EOF
+ chmod +x mk_static_lib.sh
+ AR=`pwd`/mk_static_lib.sh
+ ;;
+ (*)
+ cf_cv_ar_flags=unknown
+ for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv
+ do
- # check if $ARFLAGS already contains this choice
- if test "x$ARFLAGS" != "x" ; then
- cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"`
- if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then
- cf_cv_ar_flags=
- break
+ # check if $ARFLAGS already contains this choice
+ if test "x$ARFLAGS" != "x" ; then
+ cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"`
+ if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then
+ cf_cv_ar_flags=
+ break
+ fi
fi
- fi
- rm -f conftest.$ac_cv_objext
- rm -f conftest.a
+ rm -f "conftest.$ac_cv_objext"
+ rm -f conftest.a
- cat >conftest.$ac_ext <<EOF
-#line 4770 "configure"
+ cat >"conftest.$ac_ext" <<EOF
+#line 4998 "configure"
int testdata[3] = { 123, 456, 789 };
EOF
- if { (eval echo "$as_me:4773: \"$ac_compile\"") >&5
+ if { (eval echo "$as_me:5001: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:4776: \$? = $ac_status" >&5
- (exit $ac_status); } ; then
- echo "$AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext" >&5
- $AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext 2>&5 1>/dev/null
- if test -f conftest.a ; then
- cf_cv_ar_flags=$cf_ar_flags
- break
- fi
- else
- test -n "$verbose" && echo " cannot compile test-program" 1>&6
+ echo "$as_me:5004: \$? = $ac_status" >&5
+ (exit "$ac_status"); } ; then
+ echo "$AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext" >&5
+ $AR $ARFLAGS "$cf_ar_flags" conftest.a "conftest.$ac_cv_objext" 2>&5 1>/dev/null
+ if test -f conftest.a ; then
+ cf_cv_ar_flags="$cf_ar_flags"
+ break
+ fi
+ else
+ test -n "$verbose" && echo " cannot compile test-program" 1>&6
-echo "${as_me:-configure}:4787: testing cannot compile test-program ..." 1>&5
+echo "${as_me:-configure}:5015: testing cannot compile test-program ..." 1>&5
- break
- fi
- done
- rm -f conftest.a conftest.$ac_ext conftest.$ac_cv_objext
+ break
+ fi
+ done
+ rm -f conftest.a "conftest.$ac_ext" "conftest.$ac_cv_objext"
+ ;;
+ esac
fi
-echo "$as_me:4795: result: $cf_cv_ar_flags" >&5
+echo "$as_me:5025: result: $cf_cv_ar_flags" >&5
echo "${ECHO_T}$cf_cv_ar_flags" >&6
if test -n "$ARFLAGS" ; then
if test -n "$cf_cv_ar_flags" ; then
ARFLAGS="$ARFLAGS $cf_cv_ar_flags"
fi
else
ARFLAGS=$cf_cv_ar_flags
fi
-echo "$as_me:4806: checking if you have specified an install-prefix" >&5
+echo "$as_me:5036: checking if you have specified an install-prefix" >&5
echo $ECHO_N "checking if you have specified an install-prefix... $ECHO_C" >&6
# Check whether --with-install-prefix or --without-install-prefix was given.
if test "${with_install_prefix+set}" = set; then
withval="$with_install_prefix"
case "x$withval" in
(xyes|xno)
;;
(*) DESTDIR="$withval"
;;
esac
fi;
-echo "$as_me:4819: result: $DESTDIR" >&5
+echo "$as_me:5049: result: $DESTDIR" >&5
echo "${ECHO_T}$DESTDIR" >&6
###############################################################################
# If we're cross-compiling, allow the user to override the tools and their
# options. The configure script is oriented toward identifying the host
# compiler, etc., but we need a build compiler to generate parts of the source.
+case "$cf_cv_system_name" in
+(*-msvc*)
+ LDFLAGS="$LDFLAGS user32.lib"
+ export LDFLAGS
+ ;;
+esac
+
if test "$cross_compiling" = yes ; then
# defaults that we might want to override
: ${BUILD_CFLAGS:=''}
: ${BUILD_CPPFLAGS:=''}
: ${BUILD_LDFLAGS:=''}
: ${BUILD_LIBS:=''}
: ${BUILD_EXEEXT:='$x'}
: ${BUILD_OBJEXT:='o'}
# Check whether --with-build-cc or --without-build-cc was given.
if test "${with_build_cc+set}" = set; then
withval="$with_build_cc"
BUILD_CC="$withval"
else
for ac_prog in gcc clang c99 c89 cc cl
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:4847: checking for $ac_word" >&5
+echo "$as_me:5084: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_BUILD_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$BUILD_CC"; then
ac_cv_prog_BUILD_CC="$BUILD_CC" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_BUILD_CC="$ac_prog"
-echo "$as_me:4862: found $ac_dir/$ac_word" >&5
+echo "$as_me:5099: found $ac_dir/$ac_word" >&5
break
done
fi
fi
BUILD_CC=$ac_cv_prog_BUILD_CC
if test -n "$BUILD_CC"; then
- echo "$as_me:4870: result: $BUILD_CC" >&5
+ echo "$as_me:5107: result: $BUILD_CC" >&5
echo "${ECHO_T}$BUILD_CC" >&6
else
- echo "$as_me:4873: result: no" >&5
+ echo "$as_me:5110: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$BUILD_CC" && break
done
test -n "$BUILD_CC" || BUILD_CC="none"
fi;
- echo "$as_me:4882: checking for native build C compiler" >&5
+ echo "$as_me:5119: checking for native build C compiler" >&5
echo $ECHO_N "checking for native build C compiler... $ECHO_C" >&6
- echo "$as_me:4884: result: $BUILD_CC" >&5
+ echo "$as_me:5121: result: $BUILD_CC" >&5
echo "${ECHO_T}$BUILD_CC" >&6
- echo "$as_me:4887: checking for native build C preprocessor" >&5
+ echo "$as_me:5124: checking for native build C preprocessor" >&5
echo $ECHO_N "checking for native build C preprocessor... $ECHO_C" >&6
# Check whether --with-build-cpp or --without-build-cpp was given.
if test "${with_build_cpp+set}" = set; then
withval="$with_build_cpp"
BUILD_CPP="$withval"
else
BUILD_CPP='${BUILD_CC} -E'
fi;
- echo "$as_me:4897: result: $BUILD_CPP" >&5
+ echo "$as_me:5134: result: $BUILD_CPP" >&5
echo "${ECHO_T}$BUILD_CPP" >&6
- echo "$as_me:4900: checking for native build C flags" >&5
+ echo "$as_me:5137: checking for native build C flags" >&5
echo $ECHO_N "checking for native build C flags... $ECHO_C" >&6
# Check whether --with-build-cflags or --without-build-cflags was given.
if test "${with_build_cflags+set}" = set; then
withval="$with_build_cflags"
BUILD_CFLAGS="$withval"
fi;
- echo "$as_me:4908: result: $BUILD_CFLAGS" >&5
+ echo "$as_me:5145: result: $BUILD_CFLAGS" >&5
echo "${ECHO_T}$BUILD_CFLAGS" >&6
- echo "$as_me:4911: checking for native build C preprocessor-flags" >&5
+ echo "$as_me:5148: checking for native build C preprocessor-flags" >&5
echo $ECHO_N "checking for native build C preprocessor-flags... $ECHO_C" >&6
# Check whether --with-build-cppflags or --without-build-cppflags was given.
if test "${with_build_cppflags+set}" = set; then
withval="$with_build_cppflags"
BUILD_CPPFLAGS="$withval"
fi;
- echo "$as_me:4919: result: $BUILD_CPPFLAGS" >&5
+ echo "$as_me:5156: result: $BUILD_CPPFLAGS" >&5
echo "${ECHO_T}$BUILD_CPPFLAGS" >&6
- echo "$as_me:4922: checking for native build linker-flags" >&5
+ echo "$as_me:5159: checking for native build linker-flags" >&5
echo $ECHO_N "checking for native build linker-flags... $ECHO_C" >&6
# Check whether --with-build-ldflags or --without-build-ldflags was given.
if test "${with_build_ldflags+set}" = set; then
withval="$with_build_ldflags"
BUILD_LDFLAGS="$withval"
fi;
- echo "$as_me:4930: result: $BUILD_LDFLAGS" >&5
+ echo "$as_me:5167: result: $BUILD_LDFLAGS" >&5
echo "${ECHO_T}$BUILD_LDFLAGS" >&6
- echo "$as_me:4933: checking for native build linker-libraries" >&5
+ echo "$as_me:5170: checking for native build linker-libraries" >&5
echo $ECHO_N "checking for native build linker-libraries... $ECHO_C" >&6
# Check whether --with-build-libs or --without-build-libs was given.
if test "${with_build_libs+set}" = set; then
withval="$with_build_libs"
BUILD_LIBS="$withval"
fi;
- echo "$as_me:4941: result: $BUILD_LIBS" >&5
+ echo "$as_me:5178: result: $BUILD_LIBS" >&5
echo "${ECHO_T}$BUILD_LIBS" >&6
# this assumes we're on Unix.
BUILD_EXEEXT=
BUILD_OBJEXT=o
: ${BUILD_CC:='${CC}'}
- if ( test "$BUILD_CC" = "$CC" || test "$BUILD_CC" = '${CC}' ) ; then
- { { echo "$as_me:4951: error: Cross-build requires two compilers.
+ if { test "$BUILD_CC" = "$CC" || test "$BUILD_CC" = '${CC}'; } ; then
+ { { echo "$as_me:5188: error: Cross-build requires two compilers.
Use --with-build-cc to specify the native compiler." >&5
echo "$as_me: error: Cross-build requires two compilers.
Use --with-build-cc to specify the native compiler." >&2;}
{ (exit 1); exit 1; }; }
fi
else
: ${BUILD_CC:='${CC}'}
: ${BUILD_CPP:='${CPP}'}
: ${BUILD_CFLAGS:='${CFLAGS}'}
: ${BUILD_CPPFLAGS:='${CPPFLAGS}'}
: ${BUILD_LDFLAGS:='${LDFLAGS}'}
: ${BUILD_LIBS:='${LIBS}'}
: ${BUILD_EXEEXT:='$x'}
: ${BUILD_OBJEXT:='o'}
fi
###############################################################################
### Options to allow the user to specify the set of libraries which are used.
### Use "--without-normal --with-shared" to allow the default model to be
### shared, for example.
cf_list_models=""
-echo "$as_me:4976: checking if libtool -version-number should be used" >&5
+echo "$as_me:5213: checking if libtool -version-number should be used" >&5
echo $ECHO_N "checking if libtool -version-number should be used... $ECHO_C" >&6
# Check whether --enable-libtool-version or --disable-libtool-version was given.
if test "${enable_libtool_version+set}" = set; then
enableval="$enable_libtool_version"
test "$enableval" != no && enableval=yes
if test "$enableval" != "yes" ; then
cf_libtool_version=no
else
cf_libtool_version=yes
fi
else
enableval=yes
cf_libtool_version=yes
fi;
-echo "$as_me:4993: result: $cf_libtool_version" >&5
+echo "$as_me:5230: result: $cf_libtool_version" >&5
echo "${ECHO_T}$cf_libtool_version" >&6
if test "$cf_libtool_version" = yes ; then
LIBTOOL_VERSION="-version-number"
else
LIBTOOL_VERSION="-version-info"
case "x$VERSION" in
(x)
- { echo "$as_me:5002: WARNING: VERSION was not set" >&5
+ { echo "$as_me:5239: WARNING: VERSION was not set" >&5
echo "$as_me: WARNING: VERSION was not set" >&2;}
;;
(x*.*.*)
ABI_VERSION="$VERSION"
test -n "$verbose" && echo " ABI_VERSION: $ABI_VERSION" 1>&6
-echo "${as_me:-configure}:5009: testing ABI_VERSION: $ABI_VERSION ..." 1>&5
+echo "${as_me:-configure}:5246: testing ABI_VERSION: $ABI_VERSION ..." 1>&5
;;
(x*:*:*)
ABI_VERSION=`echo "$VERSION" | sed -e 's/:/./g'`
test -n "$verbose" && echo " ABI_VERSION: $ABI_VERSION" 1>&6
-echo "${as_me:-configure}:5016: testing ABI_VERSION: $ABI_VERSION ..." 1>&5
+echo "${as_me:-configure}:5253: testing ABI_VERSION: $ABI_VERSION ..." 1>&5
;;
(*)
- { echo "$as_me:5020: WARNING: unexpected VERSION value: $VERSION" >&5
+ { echo "$as_me:5257: WARNING: unexpected VERSION value: $VERSION" >&5
echo "$as_me: WARNING: unexpected VERSION value: $VERSION" >&2;}
;;
esac
fi
LIBTOOL=
# common library maintenance symbols that are convenient for libtool scripts:
LIB_CREATE='${AR} -cr'
LIB_OBJECT='${OBJECTS}'
LIB_SUFFIX=.a
LIB_PREP="$RANLIB"
# symbols used to prop libtool up to enable it to determine what it should be
# doing:
LIB_CLEAN=
LIB_COMPILE=
LIB_LINK='${CC}'
LIB_INSTALL=
LIB_UNINSTALL=
-echo "$as_me:5042: checking if you want to build libraries with libtool" >&5
+echo "$as_me:5279: checking if you want to build libraries with libtool" >&5
echo $ECHO_N "checking if you want to build libraries with libtool... $ECHO_C" >&6
# Check whether --with-libtool or --without-libtool was given.
if test "${with_libtool+set}" = set; then
withval="$with_libtool"
with_libtool=$withval
else
with_libtool=no
fi;
-echo "$as_me:5052: result: $with_libtool" >&5
+echo "$as_me:5289: result: $with_libtool" >&5
echo "${ECHO_T}$with_libtool" >&6
if test "$with_libtool" != "no"; then
if test "$with_libtool" != "yes" ; then
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".$with_libtool" in
(.\$\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[a-zA-Z]:[\\/]*) # OS/2 EMX
;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
eval with_libtool="$with_libtool"
case ".$with_libtool" in
(.NONE/*)
- with_libtool=`echo $with_libtool | sed -e s%NONE%$cf_path_syntax%`
+ with_libtool=`echo "$with_libtool" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- with_libtool=`echo $with_libtool | sed -e s%NONE%$cf_path_syntax%`
+ with_libtool=`echo "$with_libtool" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
- { { echo "$as_me:5083: error: expected a pathname, not \"$with_libtool\"" >&5
+ { { echo "$as_me:5320: error: expected a pathname, not \"$with_libtool\"" >&5
echo "$as_me: error: expected a pathname, not \"$with_libtool\"" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
LIBTOOL=$with_libtool
else
if test -n "$ac_tool_prefix"; then
for ac_prog in libtool glibtool
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:5096: checking for $ac_word" >&5
+echo "$as_me:5333: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_LIBTOOL+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$LIBTOOL"; then
ac_cv_prog_LIBTOOL="$LIBTOOL" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_LIBTOOL="$ac_tool_prefix$ac_prog"
-echo "$as_me:5111: found $ac_dir/$ac_word" >&5
+echo "$as_me:5348: found $ac_dir/$ac_word" >&5
break
done
fi
fi
LIBTOOL=$ac_cv_prog_LIBTOOL
if test -n "$LIBTOOL"; then
- echo "$as_me:5119: result: $LIBTOOL" >&5
+ echo "$as_me:5356: result: $LIBTOOL" >&5
echo "${ECHO_T}$LIBTOOL" >&6
else
- echo "$as_me:5122: result: no" >&5
+ echo "$as_me:5359: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$LIBTOOL" && break
done
fi
if test -z "$LIBTOOL"; then
ac_ct_LIBTOOL=$LIBTOOL
for ac_prog in libtool glibtool
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:5135: checking for $ac_word" >&5
+echo "$as_me:5372: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_LIBTOOL+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_LIBTOOL"; then
ac_cv_prog_ac_ct_LIBTOOL="$ac_ct_LIBTOOL" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_ac_ct_LIBTOOL="$ac_prog"
-echo "$as_me:5150: found $ac_dir/$ac_word" >&5
+echo "$as_me:5387: found $ac_dir/$ac_word" >&5
break
done
fi
fi
ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL
if test -n "$ac_ct_LIBTOOL"; then
- echo "$as_me:5158: result: $ac_ct_LIBTOOL" >&5
+ echo "$as_me:5395: result: $ac_ct_LIBTOOL" >&5
echo "${ECHO_T}$ac_ct_LIBTOOL" >&6
else
- echo "$as_me:5161: result: no" >&5
+ echo "$as_me:5398: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$ac_ct_LIBTOOL" && break
done
test -n "$ac_ct_LIBTOOL" || ac_ct_LIBTOOL="none"
LIBTOOL=$ac_ct_LIBTOOL
fi
if test -n "$LIBTOOL" && test "$LIBTOOL" != none
then
cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([^)]*)//g' -e 's/^[^1-9]*//' -e 's/[^0-9.].*//'`
else
cf_cv_libtool_version=
fi
test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version
if test -z "$cf_cv_libtool_version" && test "$LIBTOOL" = libtool
then
unset ac_cv_prog_ac_ct_LIBTOOL
unset ac_ct_LIBTOOL
unset LIBTOOL
if test -n "$ac_tool_prefix"; then
for ac_prog in glibtool
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:5192: checking for $ac_word" >&5
+echo "$as_me:5429: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_LIBTOOL+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$LIBTOOL"; then
ac_cv_prog_LIBTOOL="$LIBTOOL" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_LIBTOOL="$ac_tool_prefix$ac_prog"
-echo "$as_me:5207: found $ac_dir/$ac_word" >&5
+echo "$as_me:5444: found $ac_dir/$ac_word" >&5
break
done
fi
fi
LIBTOOL=$ac_cv_prog_LIBTOOL
if test -n "$LIBTOOL"; then
- echo "$as_me:5215: result: $LIBTOOL" >&5
+ echo "$as_me:5452: result: $LIBTOOL" >&5
echo "${ECHO_T}$LIBTOOL" >&6
else
- echo "$as_me:5218: result: no" >&5
+ echo "$as_me:5455: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$LIBTOOL" && break
done
fi
if test -z "$LIBTOOL"; then
ac_ct_LIBTOOL=$LIBTOOL
for ac_prog in glibtool
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:5231: checking for $ac_word" >&5
+echo "$as_me:5468: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_LIBTOOL+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$ac_ct_LIBTOOL"; then
ac_cv_prog_ac_ct_LIBTOOL="$ac_ct_LIBTOOL" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_ac_ct_LIBTOOL="$ac_prog"
-echo "$as_me:5246: found $ac_dir/$ac_word" >&5
+echo "$as_me:5483: found $ac_dir/$ac_word" >&5
break
done
fi
fi
ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL
if test -n "$ac_ct_LIBTOOL"; then
- echo "$as_me:5254: result: $ac_ct_LIBTOOL" >&5
+ echo "$as_me:5491: result: $ac_ct_LIBTOOL" >&5
echo "${ECHO_T}$ac_ct_LIBTOOL" >&6
else
- echo "$as_me:5257: result: no" >&5
+ echo "$as_me:5494: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$ac_ct_LIBTOOL" && break
done
test -n "$ac_ct_LIBTOOL" || ac_ct_LIBTOOL="none"
LIBTOOL=$ac_ct_LIBTOOL
fi
if test -n "$LIBTOOL" && test "$LIBTOOL" != none
then
cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([^)]*)//g' -e 's/^[^1-9]*//' -e 's/[^0-9.].*//'`
else
cf_cv_libtool_version=
fi
test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version
fi
fi
if test -z "$LIBTOOL" ; then
- { { echo "$as_me:5279: error: Cannot find libtool" >&5
+ { { echo "$as_me:5516: error: Cannot find libtool" >&5
echo "$as_me: error: Cannot find libtool" >&2;}
{ (exit 1); exit 1; }; }
fi
LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${libdir} ${LIBTOOL_VERSION} `cut -f1 ${top_srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} $(LIBS) -o'
LIB_OBJECT='${OBJECTS:.o=.lo}'
LIB_SUFFIX=.la
LIB_CLEAN='${LIBTOOL} --mode=clean'
LIB_COMPILE='${LIBTOOL} --mode=compile'
LIB_LINK='${LIBTOOL} --mode=link ${CC} ${LIBTOOL_OPTS}'
LIB_INSTALL='${LIBTOOL} --mode=install'
LIB_UNINSTALL='${LIBTOOL} --mode=uninstall'
LIB_PREP=:
if test -n "$LIBTOOL" && test "$LIBTOOL" != none
then
- echo "$as_me:5295: checking version of $LIBTOOL" >&5
+ echo "$as_me:5532: checking version of $LIBTOOL" >&5
echo $ECHO_N "checking version of $LIBTOOL... $ECHO_C" >&6
if test -n "$LIBTOOL" && test "$LIBTOOL" != none
then
cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([^)]*)//g' -e 's/^[^1-9]*//' -e 's/[^0-9.].*//'`
else
cf_cv_libtool_version=
fi
test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version
- echo "$as_me:5306: result: $cf_cv_libtool_version" >&5
+ echo "$as_me:5543: result: $cf_cv_libtool_version" >&5
echo "${ECHO_T}$cf_cv_libtool_version" >&6
if test -z "$cf_cv_libtool_version" ; then
- { { echo "$as_me:5309: error: This is not GNU libtool" >&5
+ { { echo "$as_me:5546: error: This is not GNU libtool" >&5
echo "$as_me: error: This is not GNU libtool" >&2;}
{ (exit 1); exit 1; }; }
fi
else
- { { echo "$as_me:5314: error: GNU libtool has not been found" >&5
+ { { echo "$as_me:5551: error: GNU libtool has not been found" >&5
echo "$as_me: error: GNU libtool has not been found" >&2;}
{ (exit 1); exit 1; }; }
fi
# special hack to add -no-undefined (which libtool should do for itself)
LT_UNDEF=
case "$cf_cv_system_name" in
(cygwin*|msys*|mingw32*|os2*|uwin*|aix[4-7])
LT_UNDEF=-no-undefined
;;
esac
# special hack to add --tag option for C++ compiler
- case $cf_cv_libtool_version in
+ case "$cf_cv_libtool_version" in
(1.[5-9]*|[2-9].[0-9.a-z]*)
LIBTOOL_CXX="$LIBTOOL --tag=CXX"
LIBTOOL="$LIBTOOL --tag=CC"
;;
(*)
LIBTOOL_CXX="$LIBTOOL"
;;
esac
else
LIBTOOL=""
LIBTOOL_CXX=""
fi
test -z "$LIBTOOL" && ECHO_LT=
if test "$with_libtool" != "no" ; then
cf_list_models="$cf_list_models libtool"
else
-echo "$as_me:5350: checking if you want to build shared libraries" >&5
+echo "$as_me:5587: checking if you want to build shared libraries" >&5
echo $ECHO_N "checking if you want to build shared libraries... $ECHO_C" >&6
# Check whether --with-shared or --without-shared was given.
if test "${with_shared+set}" = set; then
withval="$with_shared"
with_shared=$withval
else
with_shared=no
fi;
-echo "$as_me:5360: result: $with_shared" >&5
+echo "$as_me:5597: result: $with_shared" >&5
echo "${ECHO_T}$with_shared" >&6
test "x$with_shared" = "xyes" && cf_list_models="$cf_list_models shared"
-echo "$as_me:5364: checking if you want to build static libraries" >&5
+echo "$as_me:5601: checking if you want to build static libraries" >&5
echo $ECHO_N "checking if you want to build static libraries... $ECHO_C" >&6
# Check whether --with-normal or --without-normal was given.
if test "${with_normal+set}" = set; then
withval="$with_normal"
with_normal=$withval
else
with_normal=yes
fi;
-echo "$as_me:5374: result: $with_normal" >&5
+echo "$as_me:5611: result: $with_normal" >&5
echo "${ECHO_T}$with_normal" >&6
test "x$with_normal" = "xyes" && cf_list_models="$cf_list_models normal"
-echo "$as_me:5378: checking if you want to build debug libraries" >&5
+echo "$as_me:5615: checking if you want to build debug libraries" >&5
echo $ECHO_N "checking if you want to build debug libraries... $ECHO_C" >&6
# Check whether --with-debug or --without-debug was given.
if test "${with_debug+set}" = set; then
withval="$with_debug"
with_debug=$withval
else
with_debug=yes
fi;
-echo "$as_me:5388: result: $with_debug" >&5
+echo "$as_me:5625: result: $with_debug" >&5
echo "${ECHO_T}$with_debug" >&6
test "x$with_debug" = "xyes" && cf_list_models="$cf_list_models debug"
-echo "$as_me:5392: checking if you want to build profiling libraries" >&5
+echo "$as_me:5629: checking if you want to build profiling libraries" >&5
echo $ECHO_N "checking if you want to build profiling libraries... $ECHO_C" >&6
# Check whether --with-profile or --without-profile was given.
if test "${with_profile+set}" = set; then
withval="$with_profile"
with_profile=$withval
else
with_profile=no
fi;
-echo "$as_me:5402: result: $with_profile" >&5
+echo "$as_me:5639: result: $with_profile" >&5
echo "${ECHO_T}$with_profile" >&6
test "x$with_profile" = "xyes" && cf_list_models="$cf_list_models profile"
fi
if test "X$cf_with_cxx_binding" != Xno; then
if test "x$with_shared" = "xyes"; then
-echo "$as_me:5410: checking if you want to build C++ shared libraries" >&5
+echo "$as_me:5647: checking if you want to build C++ shared libraries" >&5
echo $ECHO_N "checking if you want to build C++ shared libraries... $ECHO_C" >&6
# Check whether --with-cxx-shared or --without-cxx-shared was given.
if test "${with_cxx_shared+set}" = set; then
withval="$with_cxx_shared"
with_shared_cxx=$withval
else
with_shared_cxx=no
fi;
-echo "$as_me:5420: result: $with_shared_cxx" >&5
+echo "$as_me:5657: result: $with_shared_cxx" >&5
echo "${ECHO_T}$with_shared_cxx" >&6
fi
fi
###############################################################################
-echo "$as_me:5427: checking for specified models" >&5
+echo "$as_me:5664: checking for specified models" >&5
echo $ECHO_N "checking for specified models... $ECHO_C" >&6
test -z "$cf_list_models" && cf_list_models=normal
test "$with_libtool" != "no" && cf_list_models=libtool
-echo "$as_me:5431: result: $cf_list_models" >&5
+echo "$as_me:5668: result: $cf_list_models" >&5
echo "${ECHO_T}$cf_list_models" >&6
### Use the first model as the default, and save its suffix for use in building
### up test-applications.
-echo "$as_me:5436: checking for default model" >&5
+echo "$as_me:5673: checking for default model" >&5
echo $ECHO_N "checking for default model... $ECHO_C" >&6
DFT_LWR_MODEL=`echo "$cf_list_models" | $AWK '{print $1}'`
-echo "$as_me:5439: result: $DFT_LWR_MODEL" >&5
+echo "$as_me:5676: result: $DFT_LWR_MODEL" >&5
echo "${ECHO_T}$DFT_LWR_MODEL" >&6
DFT_UPR_MODEL=`echo "$DFT_LWR_MODEL" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
TICS_NAME=tic
TINFO_NAME=tinfo
LIB_NAME=ncurses
LIB_DIR=../lib
LIB_2ND=../../lib
-echo "$as_me:5453: checking if you want to have a library-prefix" >&5
+echo "$as_me:5690: checking if you want to have a library-prefix" >&5
echo $ECHO_N "checking if you want to have a library-prefix... $ECHO_C" >&6
# Check whether --with-lib-prefix or --without-lib-prefix was given.
if test "${with_lib_prefix+set}" = set; then
withval="$with_lib_prefix"
with_lib_prefix=$withval
else
with_lib_prefix=auto
fi;
-echo "$as_me:5463: result: $with_lib_prefix" >&5
+echo "$as_me:5700: result: $with_lib_prefix" >&5
echo "${ECHO_T}$with_lib_prefix" >&6
-if test $with_lib_prefix = auto
+if test "$with_lib_prefix" = auto
then
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(OS/2*|os2*)
if test "$DFT_LWR_MODEL" = libtool; then
LIB_PREFIX='lib'
else
LIB_PREFIX=''
fi
;;
+ (*-msvc*)
+ LIB_PREFIX=''
+ ;;
(*) LIB_PREFIX='lib'
;;
esac
cf_prefix=$LIB_PREFIX
-elif test $with_lib_prefix = no
+elif test "$with_lib_prefix" = no
then
LIB_PREFIX=
else
LIB_PREFIX=$with_lib_prefix
fi
LIB_SUFFIX=
- echo "$as_me:5491: checking for PATH separator" >&5
+ echo "$as_me:5731: checking for PATH separator" >&5
echo $ECHO_N "checking for PATH separator... $ECHO_C" >&6
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(os2*) PATH_SEPARATOR=';' ;;
(*) ${PATH_SEPARATOR:=':'} ;;
esac
- echo "$as_me:5498: result: $PATH_SEPARATOR" >&5
+ echo "$as_me:5738: result: $PATH_SEPARATOR" >&5
echo "${ECHO_T}$PATH_SEPARATOR" >&6
###############################################################################
-echo "$as_me:5503: checking if you want to build a separate terminfo library" >&5
+echo "$as_me:5743: checking if you want to build a separate terminfo library" >&5
echo $ECHO_N "checking if you want to build a separate terminfo library... $ECHO_C" >&6
# Check whether --with-termlib or --without-termlib was given.
if test "${with_termlib+set}" = set; then
withval="$with_termlib"
with_termlib=$withval
else
with_termlib=no
fi;
-echo "$as_me:5513: result: $with_termlib" >&5
+echo "$as_me:5753: result: $with_termlib" >&5
echo "${ECHO_T}$with_termlib" >&6
-echo "$as_me:5516: checking if you want to build a separate tic library" >&5
+echo "$as_me:5756: checking if you want to build a separate tic library" >&5
echo $ECHO_N "checking if you want to build a separate tic library... $ECHO_C" >&6
# Check whether --with-ticlib or --without-ticlib was given.
if test "${with_ticlib+set}" = set; then
withval="$with_ticlib"
with_ticlib=$withval
else
with_ticlib=no
fi;
-echo "$as_me:5526: result: $with_ticlib" >&5
+echo "$as_me:5766: result: $with_ticlib" >&5
echo "${ECHO_T}$with_ticlib" >&6
if test X"$CC_G_OPT" = X"" ; then
CC_G_OPT='-g'
test -n "$GCC" && test "x${ac_cv_prog_cc_g}" != xyes && CC_G_OPT=''
fi
if test X"$CXX_G_OPT" = X"" ; then
CXX_G_OPT='-g'
test -n "$GXX" && test "x${ac_cv_prog_cxx_g}" != xyes && CXX_G_OPT=''
fi
-echo "$as_me:5539: checking for default loader flags" >&5
+echo "$as_me:5779: checking for default loader flags" >&5
echo $ECHO_N "checking for default loader flags... $ECHO_C" >&6
-case $DFT_LWR_MODEL in
+case "$DFT_LWR_MODEL" in
(libtool) LD_MODEL='' ;;
(normal) LD_MODEL='' ;;
(debug) LD_MODEL=$CC_G_OPT ;;
(profile) LD_MODEL='-pg';;
(shared) LD_MODEL='' ;;
esac
-echo "$as_me:5548: result: $LD_MODEL" >&5
+echo "$as_me:5788: result: $LD_MODEL" >&5
echo "${ECHO_T}$LD_MODEL" >&6
-case $DFT_LWR_MODEL in
+case "$DFT_LWR_MODEL" in
(shared)
-echo "$as_me:5554: checking if rpath option should be used" >&5
+echo "$as_me:5794: checking if rpath option should be used" >&5
echo $ECHO_N "checking if rpath option should be used... $ECHO_C" >&6
# Check whether --enable-rpath or --disable-rpath was given.
if test "${enable_rpath+set}" = set; then
enableval="$enable_rpath"
cf_cv_enable_rpath=$enableval
else
cf_cv_enable_rpath=no
fi;
-echo "$as_me:5564: result: $cf_cv_enable_rpath" >&5
+echo "$as_me:5804: result: $cf_cv_enable_rpath" >&5
echo "${ECHO_T}$cf_cv_enable_rpath" >&6
-echo "$as_me:5567: checking if shared libraries should be relinked during install" >&5
+echo "$as_me:5807: checking if shared libraries should be relinked during install" >&5
echo $ECHO_N "checking if shared libraries should be relinked during install... $ECHO_C" >&6
# Check whether --enable-relink or --disable-relink was given.
if test "${enable_relink+set}" = set; then
enableval="$enable_relink"
cf_cv_do_relink=$enableval
else
cf_cv_do_relink=yes
fi;
-echo "$as_me:5577: result: $cf_cv_do_relink" >&5
+echo "$as_me:5817: result: $cf_cv_do_relink" >&5
echo "${ECHO_T}$cf_cv_do_relink" >&6
;;
esac
# we will build libraries one-level down.
rel_builddir=..
LD_RPATH_OPT=
if test "x$cf_cv_enable_rpath" != xno
then
- echo "$as_me:5588: checking for an rpath option" >&5
+ echo "$as_me:5828: checking for an rpath option" >&5
echo $ECHO_N "checking for an rpath option... $ECHO_C" >&6
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(irix*)
if test "$GCC" = yes; then
LD_RPATH_OPT="-Wl,-rpath,"
else
LD_RPATH_OPT="-rpath "
fi
;;
(linux*|gnu*|k*bsd*-gnu|freebsd*)
LD_RPATH_OPT="-Wl,-rpath,"
;;
(openbsd[2-9].*|mirbsd*)
LD_RPATH_OPT="-Wl,-rpath,"
;;
(dragonfly*)
LD_RPATH_OPT="-rpath "
;;
(netbsd*)
LD_RPATH_OPT="-Wl,-rpath,"
;;
(osf*|mls+*)
LD_RPATH_OPT="-rpath "
;;
(solaris2*)
LD_RPATH_OPT="-R"
;;
(*)
;;
esac
- echo "$as_me:5619: result: $LD_RPATH_OPT" >&5
+ echo "$as_me:5859: result: $LD_RPATH_OPT" >&5
echo "${ECHO_T}$LD_RPATH_OPT" >&6
case "x$LD_RPATH_OPT" in
(x-R*)
- echo "$as_me:5624: checking if we need a space after rpath option" >&5
+ echo "$as_me:5864: checking if we need a space after rpath option" >&5
echo $ECHO_N "checking if we need a space after rpath option... $ECHO_C" >&6
cf_save_LIBS="$LIBS"
cf_add_libs="$LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in ${LD_RPATH_OPT}$libdir; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
LIBS="$cf_add_libs"
- cat >conftest.$ac_ext <<_ACEOF
-#line 5645 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 5885 "configure"
#include "confdefs.h"
int
main (void)
{
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:5657: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:5897: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:5660: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:5663: \"$ac_try\"") >&5
+ echo "$as_me:5900: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:5903: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:5666: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:5906: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_rpath_space=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_rpath_space=yes
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
LIBS="$cf_save_LIBS"
- echo "$as_me:5676: result: $cf_rpath_space" >&5
+ echo "$as_me:5916: result: $cf_rpath_space" >&5
echo "${ECHO_T}$cf_rpath_space" >&6
test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT "
;;
esac
fi
RM_SHARED_OPTS=
LOCAL_LDFLAGS=
LOCAL_LDFLAGS2=
LD_SHARED_OPTS=
INSTALL_LIB="-m 644"
: ${rel_builddir:=.}
shlibdir=$libdir
MAKE_DLLS="#"
cf_cv_do_symlinks=no
cf_ld_rpath_opt=
test "$cf_cv_enable_rpath" = yes && cf_ld_rpath_opt="$LD_RPATH_OPT"
- echo "$as_me:5698: checking if release/abi version should be used for shared libs" >&5
+ echo "$as_me:5938: checking if release/abi version should be used for shared libs" >&5
echo $ECHO_N "checking if release/abi version should be used for shared libs... $ECHO_C" >&6
# Check whether --with-shlib-version or --without-shlib-version was given.
if test "${with_shlib_version+set}" = set; then
withval="$with_shlib_version"
test -z "$withval" && withval=auto
- case $withval in
+ case "$withval" in
(yes)
cf_cv_shlib_version=auto
;;
(rel|abi|auto)
cf_cv_shlib_version=$withval
;;
(*)
- echo "$as_me:5713: result: $withval" >&5
+ echo "$as_me:5953: result: $withval" >&5
echo "${ECHO_T}$withval" >&6
- { { echo "$as_me:5715: error: option value must be one of: rel, abi, or auto" >&5
+ { { echo "$as_me:5955: error: option value must be one of: rel, abi, or auto" >&5
echo "$as_me: error: option value must be one of: rel, abi, or auto" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
else
cf_cv_shlib_version=auto
fi;
- echo "$as_me:5724: result: $cf_cv_shlib_version" >&5
+ echo "$as_me:5964: result: $cf_cv_shlib_version" >&5
echo "${ECHO_T}$cf_cv_shlib_version" >&6
cf_cv_rm_so_locs=no
cf_try_cflags=
# Some less-capable ports of gcc support only -fpic
CC_SHARED_OPTS=
cf_try_fPIC=no
if test "$GCC" = yes
then
cf_try_fPIC=yes
else
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(*linux*) # e.g., PGI compiler
cf_try_fPIC=yes
;;
esac
fi
if test "$cf_try_fPIC" = yes
then
- echo "$as_me:5747: checking which $CC option to use" >&5
+ echo "$as_me:5987: checking which $CC option to use" >&5
echo $ECHO_N "checking which $CC option to use... $ECHO_C" >&6
cf_save_CFLAGS="$CFLAGS"
for CC_SHARED_OPTS in -fPIC -fpic ''
do
CFLAGS="$cf_save_CFLAGS $CC_SHARED_OPTS"
- cat >conftest.$ac_ext <<_ACEOF
-#line 5754 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 5994 "configure"
#include "confdefs.h"
#include <stdio.h>
int
main (void)
{
int x = 1
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:5766: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:6006: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:5769: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:5772: \"$ac_try\"") >&5
+ echo "$as_me:6009: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:6012: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:5775: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:6015: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
done
- echo "$as_me:5784: result: $CC_SHARED_OPTS" >&5
+ echo "$as_me:6024: result: $CC_SHARED_OPTS" >&5
echo "${ECHO_T}$CC_SHARED_OPTS" >&6
CFLAGS="$cf_save_CFLAGS"
fi
cf_cv_shlib_version_infix=no
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(aix4.3-9*|aix[5-7]*)
if test "$GCC" = yes; then
CC_SHARED_OPTS='-Wl,-brtl'
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@'
else
CC_SHARED_OPTS='-brtl'
# as well as '-qpic=large -G' or perhaps "-bM:SRE -bnoentry -bexpall"
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@'
fi
;;
(beos*)
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -o $@ -Xlinker -soname=`basename $@` -nostart -e 0'
;;
(cygwin*)
CC_SHARED_OPTS=
MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}'
RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a"
cf_cv_shlib_version=cygdll
cf_cv_shlib_version_infix=cygdll
shlibdir=$bindir
MAKE_DLLS=
cat >mk_shared_lib.sh <<-CF_EOF
#!$SHELL
SHARED_LIB=\$1
IMPORT_LIB=\`echo "\$1" | sed -e 's/cyg/lib/' -e 's/[0-9]*\.dll$/.dll.a/'\`
shift
cat <<-EOF
Linking shared library
** SHARED_LIB \$SHARED_LIB
** IMPORT_LIB \$IMPORT_LIB
EOF
exec \$* ${LDFLAGS} -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB}
CF_EOF
chmod +x mk_shared_lib.sh
;;
(msys*)
CC_SHARED_OPTS=
MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}'
RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a"
cf_cv_shlib_version=msysdll
cf_cv_shlib_version_infix=msysdll
shlibdir=$bindir
MAKE_DLLS=
cat >mk_shared_lib.sh <<-CF_EOF
#!$SHELL
SHARED_LIB=\$1
IMPORT_LIB=\`echo "\$1" | sed -e 's/msys-/lib/' -e 's/[0-9]*\.dll$/.dll.a/'\`
shift
cat <<-EOF
Linking shared library
** SHARED_LIB \$SHARED_LIB
** IMPORT_LIB \$IMPORT_LIB
EOF
exec \$* ${LDFLAGS} -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB}
CF_EOF
chmod +x mk_shared_lib.sh
;;
(darwin*)
cf_try_cflags="no-cpp-precomp"
CC_SHARED_OPTS="-dynamic"
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $@` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $@'
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=abi
cf_cv_shlib_version_infix=yes
- echo "$as_me:5855: checking if ld -search_paths_first works" >&5
+ echo "$as_me:6095: checking if ld -search_paths_first works" >&5
echo $ECHO_N "checking if ld -search_paths_first works... $ECHO_C" >&6
if test "${cf_cv_ldflags_search_paths_first+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cf_save_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
- cat >conftest.$ac_ext <<_ACEOF
-#line 5864 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 6104 "configure"
#include "confdefs.h"
int
main (void)
{
int i;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:5876: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:6116: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:5879: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:5882: \"$ac_try\"") >&5
+ echo "$as_me:6119: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:6122: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:5885: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:6125: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_ldflags_search_paths_first=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_ldflags_search_paths_first=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
LDFLAGS=$cf_save_LDFLAGS
fi
-echo "$as_me:5896: result: $cf_cv_ldflags_search_paths_first" >&5
+echo "$as_me:6136: result: $cf_cv_ldflags_search_paths_first" >&5
echo "${ECHO_T}$cf_cv_ldflags_search_paths_first" >&6
- if test $cf_cv_ldflags_search_paths_first = yes; then
+ if test "$cf_cv_ldflags_search_paths_first" = yes; then
LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
fi
;;
(hpux[7-8]*)
# HP-UX 8.07 ld lacks "+b" option used for libdir search-list
if test "$GCC" != yes; then
CC_SHARED_OPTS='+Z'
fi
MK_SHARED_LIB='${LD} ${LDFLAGS} -b -o $@'
INSTALL_LIB="-m 555"
;;
(hpux*)
# (tested with gcc 2.7.2 -- I don't have c89)
if test "$GCC" = yes; then
LD_SHARED_OPTS='-Xlinker +b -Xlinker ${libdir}'
else
CC_SHARED_OPTS='+Z'
LD_SHARED_OPTS='-Wl,+b,${libdir}'
fi
MK_SHARED_LIB='${LD} ${LDFLAGS} +b ${libdir} -b -o $@'
# HP-UX shared libraries must be executable, and should be
# readonly to exploit a quirk in the memory manager.
INSTALL_LIB="-m 555"
;;
(interix*)
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
if test "$cf_cv_shlib_version" = rel; then
cf_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
else
cf_shared_soname='`basename $@`'
fi
CC_SHARED_OPTS=
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o $@'
;;
(irix*)
if test "$cf_cv_enable_rpath" = yes ; then
EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
fi
# tested with IRIX 5.2 and 'cc'.
if test "$GCC" != yes; then
CC_SHARED_OPTS='-KPIC'
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -rdata_shared -soname `basename $@` -o $@'
else
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,`basename $@` -o $@'
fi
cf_cv_rm_so_locs=yes
;;
(linux*|gnu*|k*bsd*-gnu)
if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then
LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
fi
if test "$cf_cv_enable_rpath" = yes ; then
EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
fi
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
if test "$cf_cv_shlib_version" = rel; then
cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
else
cf_cv_shared_soname='`basename $@`'
fi
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@'
;;
+ (mingw*msvc*)
+ cf_cv_shlib_version=msvcdll
+ cf_cv_shlib_version_infix=msvcdll
+ shlibdir=$bindir
+ MAKE_DLLS=
+ if test "$DFT_LWR_MODEL" = "shared" ; then
+ LOCAL_LDFLAGS="-link -dll"
+ LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+ EXTRA_LDFLAGS="-link -dll $EXTRA_LDFLAGS"
+ fi
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${LD} ${CFLAGS}'
+ RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.lib"
+ cat >mk_shared_lib.sh <<-CF_EOF
+ #!$SHELL
+ SHARED_LIB=\$1
+ IMPORT_LIB=\`echo "\$1" | sed -e 's/[0-9]*\.dll$/.dll.lib/'\`
+ shift
+ my_ld=\$1
+ shift
+ cat <<-EOF
+ Linking shared library
+ ** SHARED LIB \$SHARED_LIB
+ ** IMPORT_LIB \$IMPORT_LIB
+EOF
+ args=\$(echo \$* | sed -E "s#-l(\w*)#\1.dll.lib#g" | sed -E "s#-L(\w*)#-LIBPATH:\1#g")
+ exec \$my_ld -DLL -IMPLIB:"\${IMPORT_LIB}" -OUT:"\${SHARED_LIB}" ${LDFLAGS} \$args
+ mv "\${IMPORT_LIB}" "\${IMPORT_LIB}"
+CF_EOF
+ chmod +x mk_shared_lib.sh
+ cat >mk_prog.sh <<-CF_EOF
+ #!$SHELL
+ shift
+ # Ignore first argument (compiler) and use LD (link.exe) unconditionally
+ LD="$LD"
+ clopts=()
+ ldopts=("/subsystem:console")
+ libs=()
+ isdll=0
+ while test \$# -gt 0; do
+ case "\$1" in
+ -link)
+ # ignore -link argument
+ ;;
+ -M[TD] | -M[TD]d)
+ # ignore runtime-library option
+ ;;
+ -dll)
+ isdll=1
+ ;;
+ -W* | -w*)
+ # ignore warnings
+ ;;
+ -D*)
+ clopts+=("\$1")
+ ;;
+ -I*)
+ clopts+=("\$1")
+ ;;
+ -l*)
+ libs+=("\`echo \"\$1\" | sed \"s/^-l//\"\`")
+ ;;
+ -L*)
+ ldopts+=("\`echo \"\$1\" | sed \"s/^-L/-LIBPATH:/\"\`")
+ ;;
+ *.obj | *.o)
+ ldopts+=("\$1")
+ ;;
+ -Wl,*)
+ for linkarg in \`echo '\$1' | sed -e 's/-Wl,//' -e 's/,/ /'\`; do
+ ldopts+=("\${linkarg}")
+ done
+ ;;
+ *.lib)
+ ldopts+=("\$1")
+ ;;
+ -o)
+ shift
+ ldopts+=("-out:\$1")
+ ;;
+ *)
+ clopts+=("\$1")
+ ldopts+=("\$1")
+ ;;
+ esac
+ shift
+ done
+ if [ "\$isdll" -ne 0 ]; then
+ for lib in \${libs[*]}; do
+ ldopts+=("\$lib.dll.lib")
+ done
+ else
+ for lib in \${libs[*]}; do
+ ldopts+=("\$lib.lib")
+ done
+ fi
+ cat <<-EOF
+ Creating program
+ ** ld options: "\${ldopts[@]}"
+EOF
+ exec \$LD \${ldopts[@]}
+CF_EOF
+ chmod +x mk_prog.sh
+ LINK_PROGS="$SHELL ${rel_builddir}/mk_prog.sh"
+ LINK_TESTS="$SHELL ${rel_builddir}/mk_prog.sh"
+ ;;
(mingw*)
cf_cv_shlib_version=mingw
cf_cv_shlib_version_infix=mingw
shlibdir=$bindir
MAKE_DLLS=
if test "$DFT_LWR_MODEL" = "shared" ; then
LOCAL_LDFLAGS="-Wl,--enable-auto-import"
LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
EXTRA_LDFLAGS="-Wl,--enable-auto-import $EXTRA_LDFLAGS"
fi
CC_SHARED_OPTS=
MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}'
RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a"
cat >mk_shared_lib.sh <<-CF_EOF
#!$SHELL
SHARED_LIB=\$1
IMPORT_LIB=\`echo "\$1" | sed -e 's/[0-9]*\.dll$/.dll.a/'\`
shift
cat <<-EOF
Linking shared library
** SHARED_LIB \$SHARED_LIB
** IMPORT_LIB \$IMPORT_LIB
EOF
exec \$* ${LDFLAGS} -shared -Wl,--enable-auto-import,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB}
CF_EOF
chmod +x mk_shared_lib.sh
;;
(openbsd[2-9].*|mirbsd*)
if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then
LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
fi
if test "$cf_cv_enable_rpath" = yes ; then
EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
fi
CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
if test "$cf_cv_shlib_version" = rel; then
cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
else
cf_cv_shared_soname='`basename $@`'
fi
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@'
;;
+ (nskJ*)
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='${LD} -Wshared -Weld=-export_all -o $@'
+ ;;
+ (nskL*)
+ CC_SHARED_OPTS=
+ MK_SHARED_LIB='${LD} -Wshared -Wxld=-export_all -o $@'
+ ;;
(nto-qnx*|openbsd*|freebsd[12].*)
CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
MK_SHARED_LIB='${LD} ${LDFLAGS} -Bshareable -o $@'
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
;;
(dragonfly*|freebsd*)
CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then
LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)"
LOCAL_LDFLAGS2="${cf_ld_rpath_opt}\${RPATH_LIST} $LOCAL_LDFLAGS"
EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
fi
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
if test "$cf_cv_shlib_version" = rel; then
cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
else
cf_cv_shared_soname='`basename $@`'
fi
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@'
;;
(netbsd*)
CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then
LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)"
LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS"
if test "$cf_cv_shlib_version" = auto; then
if test -f /usr/libexec/ld.elf_so; then
cf_cv_shlib_version=abi
else
cf_cv_shlib_version=rel
fi
fi
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
if test "$cf_cv_shlib_version" = rel; then
cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
else
cf_cv_shared_soname='`basename $@`'
fi
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $@'
else
- MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -Wl,-shared -Wl,-Bshareable -o $@'
+ MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -o $@'
fi
;;
(osf*|mls+*)
# tested with OSF/1 V3.2 and 'cc'
# tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't
# link with shared libs).
MK_SHARED_LIB='${LD} ${LDFLAGS} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $@`'
- case $host_os in
+ case "$host_os" in
(osf4*)
MK_SHARED_LIB="${MK_SHARED_LIB} -msym"
;;
esac
MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $@'
if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then
LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
fi
cf_cv_rm_so_locs=yes
;;
(sco3.2v5*) # also uw2* and UW7: hops 13-Apr-98
# tested with osr5.0.5
if test "$GCC" != yes; then
CC_SHARED_OPTS='-belf -KPIC'
fi
MK_SHARED_LIB='${LD} ${LDFLAGS} -dy -G -h `basename $@ .${REL_VERSION}`.${ABI_VERSION} -o $@'
if test "$cf_cv_enable_rpath" = yes ; then
# only way is to set LD_RUN_PATH but no switch for it
RUN_PATH=$libdir
fi
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
LINK_PROGS='LD_RUN_PATH=${libdir}'
LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib'
;;
(sunos4*)
# tested with SunOS 4.1.1 and gcc 2.7.0
if test "$GCC" != yes; then
CC_SHARED_OPTS='-KPIC'
fi
MK_SHARED_LIB='${LD} ${LDFLAGS} -assert pure-text -o $@'
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
;;
(solaris2*)
# tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2
# tested with SunOS 5.10 (solaris 10) and gcc 3.4.3
if test "$DFT_LWR_MODEL" = "shared" ; then
LOCAL_LDFLAGS="-R \$(LOCAL_LIBDIR):\${libdir}"
LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
fi
if test "$cf_cv_enable_rpath" = yes ; then
EXTRA_LDFLAGS="-R \${libdir} $EXTRA_LDFLAGS"
fi
test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
if test "$cf_cv_shlib_version" = rel; then
cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
else
cf_cv_shared_soname='`basename $@`'
fi
if test "$GCC" != yes; then
cf_save_CFLAGS="$CFLAGS"
for cf_shared_opts in -xcode=pic32 -xcode=pic13 -KPIC -Kpic -O
do
CFLAGS="$cf_shared_opts $cf_save_CFLAGS"
- cat >conftest.$ac_ext <<_ACEOF
-#line 6121 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 6475 "configure"
#include "confdefs.h"
#include <stdio.h>
int
main (void)
{
-printf("Hello\n");
+printf("Hello\\n");
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:6133: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:6487: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:6136: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:6139: \"$ac_try\"") >&5
+ echo "$as_me:6490: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:6493: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:6142: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:6496: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
done
CFLAGS="$cf_save_CFLAGS"
CC_SHARED_OPTS=$cf_shared_opts
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dy -G -h '$cf_cv_shared_soname' -o $@'
else
MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -dy -G -h '$cf_cv_shared_soname' -o $@'
fi
;;
(sysv5uw7*|unix_sv*)
# tested with UnixWare 7.1.0 (gcc 2.95.2 and cc)
if test "$GCC" != yes; then
CC_SHARED_OPTS='-KPIC'
fi
MK_SHARED_LIB='${LD} ${LDFLAGS} -d y -G -o $@'
;;
(*)
CC_SHARED_OPTS='unknown'
MK_SHARED_LIB='echo unknown'
;;
esac
# This works if the last tokens in $MK_SHARED_LIB are the -o target.
case "$cf_cv_shlib_version" in
(rel|abi)
case "$MK_SHARED_LIB" in
(*'-o $@')
test "$cf_cv_do_symlinks" = no && cf_cv_do_symlinks=yes
;;
(*)
- { echo "$as_me:6179: WARNING: ignored --with-shlib-version" >&5
+ { echo "$as_me:6533: WARNING: ignored --with-shlib-version" >&5
echo "$as_me: WARNING: ignored --with-shlib-version" >&2;}
;;
esac
;;
esac
if test -n "$cf_try_cflags"
then
cat > conftest.$ac_ext <<EOF
-#line 6189 "${as_me:-configure}"
+#line 6543 "${as_me:-configure}"
#include <stdio.h>
int main(int argc, char *argv[])
{
- printf("hello\n");
+ printf("hello\\n");
return (argv[argc-1] == 0) ;
}
EOF
cf_save_CFLAGS="$CFLAGS"
for cf_opt in $cf_try_cflags
do
CFLAGS="$cf_save_CFLAGS -$cf_opt"
- echo "$as_me:6201: checking if CFLAGS option -$cf_opt works" >&5
+ echo "$as_me:6555: checking if CFLAGS option -$cf_opt works" >&5
echo $ECHO_N "checking if CFLAGS option -$cf_opt works... $ECHO_C" >&6
- if { (eval echo "$as_me:6203: \"$ac_compile\"") >&5
+ if { (eval echo "$as_me:6557: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:6206: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- echo "$as_me:6208: result: yes" >&5
+ echo "$as_me:6560: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; then
+ echo "$as_me:6562: result: yes" >&5
echo "${ECHO_T}yes" >&6
cf_save_CFLAGS="$CFLAGS"
else
- echo "$as_me:6212: result: no" >&5
+ echo "$as_me:6566: result: no" >&5
echo "${ECHO_T}no" >&6
fi
done
CFLAGS="$cf_save_CFLAGS"
fi
# RPATH_LIST is a colon-separated list of directories
test -n "$cf_ld_rpath_opt" && MK_SHARED_LIB="$MK_SHARED_LIB $cf_ld_rpath_opt\${RPATH_LIST}"
test -z "$RPATH_LIST" && RPATH_LIST="\${libdir}"
- test $cf_cv_rm_so_locs = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations"
+ test "$cf_cv_rm_so_locs" = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations"
test -n "$verbose" && echo " CC_SHARED_OPTS: $CC_SHARED_OPTS" 1>&6
-echo "${as_me:-configure}:6227: testing CC_SHARED_OPTS: $CC_SHARED_OPTS ..." 1>&5
+echo "${as_me:-configure}:6581: testing CC_SHARED_OPTS: $CC_SHARED_OPTS ..." 1>&5
test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6
-echo "${as_me:-configure}:6231: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5
+echo "${as_me:-configure}:6585: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5
-for model in $cf_list_models; do
- case $model in
+for model in $cf_list_models ; do
+ case "$model" in
(libtool)
-echo "$as_me:6237: checking for additional libtool options" >&5
+echo "$as_me:6591: checking for additional libtool options" >&5
echo $ECHO_N "checking for additional libtool options... $ECHO_C" >&6
# Check whether --with-libtool-opts or --without-libtool-opts was given.
if test "${with_libtool_opts+set}" = set; then
withval="$with_libtool_opts"
with_libtool_opts=$withval
else
with_libtool_opts=no
fi;
-echo "$as_me:6247: result: $with_libtool_opts" >&5
+echo "$as_me:6601: result: $with_libtool_opts" >&5
echo "${ECHO_T}$with_libtool_opts" >&6
case .$with_libtool_opts in
(.yes|.no|.)
;;
(*)
LIBTOOL_OPTS="$LIBTOOL_OPTS $with_libtool_opts"
;;
esac
-echo "$as_me:6258: checking if exported-symbols file should be used" >&5
+echo "$as_me:6612: checking if exported-symbols file should be used" >&5
echo $ECHO_N "checking if exported-symbols file should be used... $ECHO_C" >&6
# Check whether --with-export-syms or --without-export-syms was given.
if test "${with_export_syms+set}" = set; then
withval="$with_export_syms"
with_export_syms=$withval
else
with_export_syms=no
fi;
if test "x$with_export_syms" = xyes
then
with_export_syms='${top_srcdir}/package/${PACKAGE}.sym'
fi
-echo "$as_me:6273: result: $with_export_syms" >&5
+echo "$as_me:6627: result: $with_export_syms" >&5
echo "${ECHO_T}$with_export_syms" >&6
if test "x$with_export_syms" != xno
then
EXPORT_SYMS="-export-symbols $with_export_syms"
fi
;;
(shared)
if test "$CC_SHARED_OPTS" = "unknown"; then
- { { echo "$as_me:6284: error: Shared libraries are not supported in this version" >&5
+ { { echo "$as_me:6638: error: Shared libraries are not supported in this version" >&5
echo "$as_me: error: Shared libraries are not supported in this version" >&2;}
{ (exit 1); exit 1; }; }
fi
# workaround for inept transition to PIE vs PIC...
- echo "$as_me:6289: checking if current CFLAGS link properly" >&5
+ echo "$as_me:6643: checking if current CFLAGS link properly" >&5
echo $ECHO_N "checking if current CFLAGS link properly... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-#line 6292 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 6646 "configure"
#include "confdefs.h"
#include <stdio.h>
int
main (void)
{
-printf("Hello work\n");
+printf("Hello work\\n");
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6304: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:6658: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:6307: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6310: \"$ac_try\"") >&5
+ echo "$as_me:6661: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:6664: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:6313: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:6667: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cflags_work=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cflags_work=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- echo "$as_me:6322: result: $cf_cflags_work" >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+ echo "$as_me:6676: result: $cf_cflags_work" >&5
echo "${ECHO_T}$cf_cflags_work" >&6
if test "$cf_cflags_work" = no
then
test -n "$verbose" && echo " try to work around by appending shared-options" 1>&6
-echo "${as_me:-configure}:6328: testing try to work around by appending shared-options ..." 1>&5
+echo "${as_me:-configure}:6682: testing try to work around by appending shared-options ..." 1>&5
CFLAGS="$CFLAGS $CC_SHARED_OPTS"
fi
-echo "$as_me:6333: checking if versioned-symbols file should be used" >&5
+echo "$as_me:6687: checking if versioned-symbols file should be used" >&5
echo $ECHO_N "checking if versioned-symbols file should be used... $ECHO_C" >&6
# Check whether --with-versioned-syms or --without-versioned-syms was given.
if test "${with_versioned_syms+set}" = set; then
withval="$with_versioned_syms"
with_versioned_syms=$withval
else
with_versioned_syms=no
fi;
case "x$with_versioned_syms" in
(xyes)
with_versioned_syms='${top_srcdir}/package/${PACKAGE}.map'
;;
(xno)
;;
(x/*)
- test -f "$with_versioned_syms" || { { echo "$as_me:6351: error: expected a filename: $with_versioned_syms" >&5
+ test -f "$with_versioned_syms" || { { echo "$as_me:6705: error: expected a filename: $with_versioned_syms" >&5
echo "$as_me: error: expected a filename: $with_versioned_syms" >&2;}
{ (exit 1); exit 1; }; }
;;
(*)
- test -f "$with_versioned_syms" || { { echo "$as_me:6356: error: expected a filename: $with_versioned_syms" >&5
+ test -f "$with_versioned_syms" || { { echo "$as_me:6710: error: expected a filename: $with_versioned_syms" >&5
echo "$as_me: error: expected a filename: $with_versioned_syms" >&2;}
{ (exit 1); exit 1; }; }
with_versioned_syms=`pwd`/"$with_versioned_syms"
;;
esac
-echo "$as_me:6362: result: $with_versioned_syms" >&5
+echo "$as_me:6716: result: $with_versioned_syms" >&5
echo "${ECHO_T}$with_versioned_syms" >&6
RESULTING_SYMS=
VERSIONED_SYMS=
WILDCARD_SYMS=
if test "x$with_versioned_syms" != xno
then
RESULTING_SYMS=$with_versioned_syms
case "x$MK_SHARED_LIB" in
(*-Wl,*)
VERSIONED_SYMS="-Wl,--version-script,\${RESULTING_SYMS}"
MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-Wl,%\\${VERSIONED_SYMS} -Wl,%"`
test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6
-echo "${as_me:-configure}:6378: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5
+echo "${as_me:-configure}:6732: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5
;;
(*-dy\ *)
VERSIONED_SYMS="-Wl,-M,\${RESULTING_SYMS}"
MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-dy%\\${VERSIONED_SYMS} -dy%"`
test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6
-echo "${as_me:-configure}:6386: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5
+echo "${as_me:-configure}:6740: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5
;;
(*)
- { echo "$as_me:6390: WARNING: this system does not support versioned-symbols" >&5
+ { echo "$as_me:6744: WARNING: this system does not support versioned-symbols" >&5
echo "$as_me: WARNING: this system does not support versioned-symbols" >&2;}
;;
esac
# Linux ld can selectively override scope, e.g., of symbols beginning with
# "_" by first declaring some as global, and then using a wildcard to
# declare the others as local. Some other loaders cannot do this. Check
# by constructing a (very) simple shared library and inspecting its
# symbols.
if test "x$VERSIONED_SYMS" != "x"
then
- echo "$as_me:6402: checking if wildcards can be used to selectively omit symbols" >&5
+ echo "$as_me:6756: checking if wildcards can be used to selectively omit symbols" >&5
echo $ECHO_N "checking if wildcards can be used to selectively omit symbols... $ECHO_C" >&6
WILDCARD_SYMS=no
# make sources
rm -f conftest.*
cat >conftest.ver <<EOF
module_1.0 {
global:
globalf1;
local:
localf1;
};
module_2.0 {
global:
globalf2;
local:
localf2;
_*;
} module_1.0;
submodule_1.0 {
global:
subglobalf1;
_ismissing;
local:
sublocalf1;
};
submodule_2.0 {
global:
subglobalf2;
local:
sublocalf2;
_*;
} submodule_1.0;
EOF
cat >conftest.$ac_ext <<EOF
-#line 6439 "configure"
+#line 6793 "configure"
int _ismissing(void) { return 1; }
int _localf1(void) { return 1; }
int _localf2(void) { return 2; }
int globalf1(void) { return 1; }
int globalf2(void) { return 2; }
int _sublocalf1(void) { return 1; }
int _sublocalf2(void) { return 2; }
int subglobalf1(void) { return 1; }
int subglobalf2(void) { return 2; }
EOF
cat >conftest.mk <<EOF
CC=${CC}
CFLAGS=${CFLAGS}
CPPFLAGS=${CPPFLAGS}
LDFLAGS=${LDFLAGS}
LIBS=${LIBS}
VERSIONED_SYMS=${VERSIONED_SYMS}
RESULTING_SYMS=conftest.ver
MK_SHARED_LIB=${MK_SHARED_LIB}
conftest.so: conftest.$ac_cv_objext
\$(MK_SHARED_LIB) conftest.$ac_cv_objext
EOF
# compile source, make library
if make -f conftest.mk 2>&5 >/dev/null
then
# test for missing symbol in either Data or Text section
- cf_missing=`nm -P conftest.so 2>&5 |fgrep _ismissing | egrep '[ ][DT][ ]'`
+ cf_missing="`nm -P conftest.so 2>&5 |${FGREP-fgrep} _ismissing | ${EGREP-egrep} '[ ][DT][ ]'`"
test -n "$cf_missing" && WILDCARD_SYMS=yes
fi
- echo "$as_me:6470: result: $WILDCARD_SYMS" >&5
+ echo "$as_me:6824: result: $WILDCARD_SYMS" >&5
echo "${ECHO_T}$WILDCARD_SYMS" >&6
rm -f conftest.*
fi
fi
;;
esac
done
### Checks for special libraries, must be done up-front.
SHLIB_LIST=""
-echo "$as_me:6483: checking if you want to link with the GPM mouse library" >&5
+echo "$as_me:6837: checking if you want to link with the GPM mouse library" >&5
echo $ECHO_N "checking if you want to link with the GPM mouse library... $ECHO_C" >&6
# Check whether --with-gpm or --without-gpm was given.
if test "${with_gpm+set}" = set; then
withval="$with_gpm"
with_gpm=$withval
else
with_gpm=maybe
fi;
-echo "$as_me:6493: result: $with_gpm" >&5
+echo "$as_me:6847: result: $with_gpm" >&5
echo "${ECHO_T}$with_gpm" >&6
if test "$with_gpm" != no ; then
- echo "$as_me:6497: checking for gpm.h" >&5
+ echo "$as_me:6851: checking for gpm.h" >&5
echo $ECHO_N "checking for gpm.h... $ECHO_C" >&6
if test "${ac_cv_header_gpm_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 6503 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 6857 "configure"
#include "confdefs.h"
#include <gpm.h>
_ACEOF
-if { (eval echo "$as_me:6507: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:6861: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:6513: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
+ echo "$as_me:6867: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
else
ac_cpp_err=
fi
else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
ac_cv_header_gpm_h=yes
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ cat "conftest.$ac_ext" >&5
ac_cv_header_gpm_h=no
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
fi
-echo "$as_me:6532: result: $ac_cv_header_gpm_h" >&5
+echo "$as_me:6886: result: $ac_cv_header_gpm_h" >&5
echo "${ECHO_T}$ac_cv_header_gpm_h" >&6
-if test $ac_cv_header_gpm_h = yes; then
+if test "$ac_cv_header_gpm_h" = yes; then
cat >>confdefs.h <<\EOF
#define HAVE_GPM_H 1
EOF
if test "$with_gpm" != yes && test "$with_gpm" != maybe ; then
test -n "$verbose" && echo " assuming we really have GPM library" 1>&6
-echo "${as_me:-configure}:6543: testing assuming we really have GPM library ..." 1>&5
+echo "${as_me:-configure}:6897: testing assuming we really have GPM library ..." 1>&5
cat >>confdefs.h <<\EOF
#define HAVE_LIBGPM 1
EOF
with_gpm=yes
else
- echo "$as_me:6551: checking for Gpm_Open in -lgpm" >&5
+ echo "$as_me:6905: checking for Gpm_Open in -lgpm" >&5
echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6
if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lgpm $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 6559 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 6913 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char Gpm_Open ();
int
main (void)
{
Gpm_Open ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6578: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:6932: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:6581: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6584: \"$ac_try\"") >&5
+ echo "$as_me:6935: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:6938: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:6587: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:6941: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_lib_gpm_Gpm_Open=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_cv_lib_gpm_Gpm_Open=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:6598: result: $ac_cv_lib_gpm_Gpm_Open" >&5
+echo "$as_me:6952: result: $ac_cv_lib_gpm_Gpm_Open" >&5
echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6
-if test $ac_cv_lib_gpm_Gpm_Open = yes; then
+if test "$ac_cv_lib_gpm_Gpm_Open" = yes; then
with_gpm=yes
else
if test "$with_gpm" = maybe; then
- { echo "$as_me:6605: WARNING: Cannot link with GPM library" >&5
+ { echo "$as_me:6959: WARNING: Cannot link with GPM library" >&5
echo "$as_me: WARNING: Cannot link with GPM library" >&2;}
with_gpm=no
else
- { { echo "$as_me:6609: error: Cannot link with GPM library" >&5
+ { { echo "$as_me:6963: error: Cannot link with GPM library" >&5
echo "$as_me: error: Cannot link with GPM library" >&2;}
{ (exit 1); exit 1; }; }
fi
fi
fi
else
- test "$with_gpm" != maybe && { echo "$as_me:6620: WARNING: Cannot find GPM header" >&5
+ test "$with_gpm" != maybe && { echo "$as_me:6974: WARNING: Cannot find GPM header" >&5
echo "$as_me: WARNING: Cannot find GPM header" >&2;}
with_gpm=no
fi
fi
if test "$with_gpm" != no ; then
- echo "$as_me:6629: checking if you want to load GPM dynamically" >&5
+ echo "$as_me:6983: checking if you want to load GPM dynamically" >&5
echo $ECHO_N "checking if you want to load GPM dynamically... $ECHO_C" >&6
# Check whether --with-dlsym or --without-dlsym was given.
if test "${with_dlsym+set}" = set; then
withval="$with_dlsym"
with_dlsym=$withval
else
with_dlsym=yes
fi;
- echo "$as_me:6639: result: $with_dlsym" >&5
+ echo "$as_me:6993: result: $with_dlsym" >&5
echo "${ECHO_T}$with_dlsym" >&6
if test "x$with_dlsym" = xyes ; then
cf_have_dlsym=no
-echo "$as_me:6644: checking for dlsym" >&5
+echo "$as_me:6998: checking for dlsym" >&5
echo $ECHO_N "checking for dlsym... $ECHO_C" >&6
if test "${ac_cv_func_dlsym+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 6650 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 7004 "configure"
#include "confdefs.h"
#define dlsym autoconf_temporary
#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
#undef dlsym
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char dlsym (void);
int
main (void)
{
/* The GNU C library defines stubs for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_dlsym) || defined (__stub___dlsym)
#error found stub for dlsym
#endif
return dlsym ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6681: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:7035: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:6684: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6687: \"$ac_try\"") >&5
+ echo "$as_me:7038: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:7041: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:6690: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:7044: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_func_dlsym=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_cv_func_dlsym=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:6700: result: $ac_cv_func_dlsym" >&5
+echo "$as_me:7054: result: $ac_cv_func_dlsym" >&5
echo "${ECHO_T}$ac_cv_func_dlsym" >&6
-if test $ac_cv_func_dlsym = yes; then
+if test "$ac_cv_func_dlsym" = yes; then
cf_have_dlsym=yes
else
cf_have_libdl=no
-echo "$as_me:6707: checking for dlsym in -ldl" >&5
+echo "$as_me:7061: checking for dlsym in -ldl" >&5
echo $ECHO_N "checking for dlsym in -ldl... $ECHO_C" >&6
if test "${ac_cv_lib_dl_dlsym+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 6715 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 7069 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char dlsym ();
int
main (void)
{
dlsym ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6734: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:7088: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:6737: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6740: \"$ac_try\"") >&5
+ echo "$as_me:7091: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:7094: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:6743: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:7097: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_lib_dl_dlsym=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_cv_lib_dl_dlsym=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:6754: result: $ac_cv_lib_dl_dlsym" >&5
+echo "$as_me:7108: result: $ac_cv_lib_dl_dlsym" >&5
echo "${ECHO_T}$ac_cv_lib_dl_dlsym" >&6
-if test $ac_cv_lib_dl_dlsym = yes; then
+if test "$ac_cv_lib_dl_dlsym" = yes; then
cf_have_dlsym=yes
cf_have_libdl=yes
fi
fi
if test "$cf_have_dlsym" = yes ; then
test "$cf_have_libdl" = yes && {
cf_add_libs="$LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in -ldl; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
LIBS="$cf_add_libs"
}
- echo "$as_me:6783: checking whether able to link to dl*() functions" >&5
+ echo "$as_me:7137: checking whether able to link to dl*() functions" >&5
echo $ECHO_N "checking whether able to link to dl*() functions... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-#line 6786 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 7140 "configure"
#include "confdefs.h"
#include <dlfcn.h>
int
main (void)
{
void *obj;
if ((obj = dlopen("filename", 0)) != 0) {
if (dlsym(obj, "symbolname") == 0) {
dlclose(obj);
}
}
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6804: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:7158: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:6807: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6810: \"$ac_try\"") >&5
+ echo "$as_me:7161: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:7164: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:6813: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:7167: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cat >>confdefs.h <<\EOF
#define HAVE_LIBDL 1
EOF
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
- { { echo "$as_me:6824: error: Cannot link test program for libdl" >&5
+ { { echo "$as_me:7178: error: Cannot link test program for libdl" >&5
echo "$as_me: error: Cannot link test program for libdl" >&2;}
{ (exit 1); exit 1; }; }
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- echo "$as_me:6829: result: ok" >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+ echo "$as_me:7183: result: ok" >&5
echo "${ECHO_T}ok" >&6
else
- { { echo "$as_me:6832: error: Cannot find dlsym function" >&5
+ { { echo "$as_me:7186: error: Cannot find dlsym function" >&5
echo "$as_me: error: Cannot find dlsym function" >&2;}
{ (exit 1); exit 1; }; }
fi
if test "x$with_gpm" != xyes ; then
test -n "$verbose" && echo " assuming soname for gpm is $with_gpm" 1>&6
-echo "${as_me:-configure}:6840: testing assuming soname for gpm is $with_gpm ..." 1>&5
+echo "${as_me:-configure}:7194: testing assuming soname for gpm is $with_gpm ..." 1>&5
cf_cv_gpm_soname="$with_gpm"
else
-echo "$as_me:6845: checking for soname of gpm library" >&5
+echo "$as_me:7199: checking for soname of gpm library" >&5
echo $ECHO_N "checking for soname of gpm library... $ECHO_C" >&6
if test "${cf_cv_gpm_soname+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cf_cv_gpm_soname=unknown
if test "$cross_compiling" != yes ; then
cat >conftest.$ac_ext <<CF_EOF
#include <gpm.h>
int main(void)
{
if (Gpm_Open(0,0)) Gpm_Close();
${cf_cv_main_return:-return}(0);
}
CF_EOF
cf_save_LIBS="$LIBS"
cf_add_libs="$LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in -lgpm; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
LIBS="$cf_add_libs"
- if { (eval echo "$as_me:6879: \"$ac_compile\"") >&5
+ if { (eval echo "$as_me:7233: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:6882: \$? = $ac_status" >&5
- (exit $ac_status); } ; then
- if { (eval echo "$as_me:6884: \"$ac_link\"") >&5
+ echo "$as_me:7236: \$? = $ac_status" >&5
+ (exit "$ac_status"); } ; then
+ if { (eval echo "$as_me:7238: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:6887: \$? = $ac_status" >&5
- (exit $ac_status); } ; then
- cf_cv_gpm_soname=`ldd conftest$ac_exeext 2>/dev/null | sed -e 's,^.*/,,' -e 's, .*$,,' | fgrep libgpm.`
+ echo "$as_me:7241: \$? = $ac_status" >&5
+ (exit "$ac_status"); } ; then
+ cf_cv_gpm_soname="`ldd \"conftest$ac_exeext\" 2>/dev/null | sed -e 's,^.*/,,' -e 's, .*$,,' | ${FGREP-fgrep} libgpm.`"
test -z "$cf_cv_gpm_soname" && cf_cv_gpm_soname=unknown
fi
fi
-rm -rf conftest*
+rm -rf ./conftest*
LIBS="$cf_save_LIBS"
fi
fi
-echo "$as_me:6898: result: $cf_cv_gpm_soname" >&5
+echo "$as_me:7252: result: $cf_cv_gpm_soname" >&5
echo "${ECHO_T}$cf_cv_gpm_soname" >&6
fi
test "$cf_cv_gpm_soname" != "unknown" &&
cat >>confdefs.h <<EOF
#define LIBGPM_SONAME "$cf_cv_gpm_soname"
EOF
SHLIB_LIST="-ldl $SHLIB_LIST"
cf_add_libs="$PRIVATE_LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in -ldl; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
PRIVATE_LIBS="$cf_add_libs"
else
SHLIB_LIST="-lgpm $SHLIB_LIST"
cf_add_libs="$TEST_LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in -lgpm; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
TEST_LIBS="$cf_add_libs"
cf_add_libs="$PRIVATE_LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in -lgpm; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
PRIVATE_LIBS="$cf_add_libs"
fi
cat >>confdefs.h <<\EOF
#define HAVE_LIBGPM 1
EOF
-echo "$as_me:6966: checking for Gpm_Wgetch in -lgpm" >&5
+echo "$as_me:7320: checking for Gpm_Wgetch in -lgpm" >&5
echo $ECHO_N "checking for Gpm_Wgetch in -lgpm... $ECHO_C" >&6
if test "${ac_cv_lib_gpm_Gpm_Wgetch+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lgpm $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 6974 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 7328 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char Gpm_Wgetch ();
int
main (void)
{
Gpm_Wgetch ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6993: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:7347: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:6996: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6999: \"$ac_try\"") >&5
+ echo "$as_me:7350: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:7353: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:7002: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:7356: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_lib_gpm_Gpm_Wgetch=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_cv_lib_gpm_Gpm_Wgetch=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:7013: result: $ac_cv_lib_gpm_Gpm_Wgetch" >&5
+echo "$as_me:7367: result: $ac_cv_lib_gpm_Gpm_Wgetch" >&5
echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Wgetch" >&6
-if test $ac_cv_lib_gpm_Gpm_Wgetch = yes; then
+if test "$ac_cv_lib_gpm_Gpm_Wgetch" = yes; then
-echo "$as_me:7017: checking if GPM is weakly bound to curses library" >&5
+echo "$as_me:7371: checking if GPM is weakly bound to curses library" >&5
echo $ECHO_N "checking if GPM is weakly bound to curses library... $ECHO_C" >&6
if test "${cf_cv_check_gpm_wgetch+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cf_cv_check_gpm_wgetch=unknown
if test "$cross_compiling" != yes ; then
cat >conftest.$ac_ext <<CF_EOF
#include <gpm.h>
int main(void)
{
Gpm_Wgetch();
${cf_cv_main_return:-return}(0);
}
CF_EOF
cf_save_LIBS="$LIBS"
# This only works if we can look at the symbol table. If a shared
# library is stripped for install, we cannot use that. So we're forced
# to rely on the static library, noting that some packagers may not
# include it.
LIBS="-static -lgpm -dynamic $LIBS"
- if { (eval echo "$as_me:7041: \"$ac_compile\"") >&5
+ if { (eval echo "$as_me:7395: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:7044: \$? = $ac_status" >&5
- (exit $ac_status); } ; then
- if { (eval echo "$as_me:7046: \"$ac_link\"") >&5
+ echo "$as_me:7398: \$? = $ac_status" >&5
+ (exit "$ac_status"); } ; then
+ if { (eval echo "$as_me:7400: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:7049: \$? = $ac_status" >&5
- (exit $ac_status); } ; then
- cf_cv_check_gpm_wgetch=`nm conftest$ac_exeext | egrep '\<wgetch\>' | egrep '\<[vVwW]\>'`
+ echo "$as_me:7403: \$? = $ac_status" >&5
+ (exit "$ac_status"); } ; then
+ cf_cv_check_gpm_wgetch="`nm \"conftest$ac_exeext\" | ${EGREP-egrep} '\<wgetch\>' | ${EGREP-egrep} '\<[vVwW]\>'`"
test -n "$cf_cv_check_gpm_wgetch" && cf_cv_check_gpm_wgetch=yes
test -z "$cf_cv_check_gpm_wgetch" && cf_cv_check_gpm_wgetch=no
fi
fi
- rm -rf conftest*
+ rm -rf ./conftest*
LIBS="$cf_save_LIBS"
fi
fi
-echo "$as_me:7061: result: $cf_cv_check_gpm_wgetch" >&5
+echo "$as_me:7415: result: $cf_cv_check_gpm_wgetch" >&5
echo "${ECHO_T}$cf_cv_check_gpm_wgetch" >&6
if test "$cf_cv_check_gpm_wgetch" != yes ; then
- { echo "$as_me:7065: WARNING: GPM library is already linked with curses - read the FAQ" >&5
+ { echo "$as_me:7419: WARNING: GPM library is already linked with curses - read the FAQ" >&5
echo "$as_me: WARNING: GPM library is already linked with curses - read the FAQ" >&2;}
fi
fi
fi
-echo "$as_me:7073: checking if you want to use PCRE2 for regular-expressions" >&5
+echo "$as_me:7427: checking if you want to use PCRE2 for regular-expressions" >&5
echo $ECHO_N "checking if you want to use PCRE2 for regular-expressions... $ECHO_C" >&6
# Check whether --with-pcre2 or --without-pcre2 was given.
if test "${with_pcre2+set}" = set; then
withval="$with_pcre2"
fi;
test -z "$with_pcre2" && with_pcre2=no
-echo "$as_me:7082: result: $with_pcre2" >&5
+echo "$as_me:7436: result: $with_pcre2" >&5
echo "${ECHO_T}$with_pcre2" >&6
if test "x$with_pcre2" != xno ; then
+ cf_with_pcre2_ok=no
+ for cf_with_pcre2 in libpcre2 libpcre2-posix libpcre
+ do
-if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists libpcre2; then
- test -n "$verbose" && echo " found package libpcre2" 1>&6
+if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "$cf_with_pcre2"; then
+ test -n "$verbose" && echo " found package $cf_with_pcre2" 1>&6
-echo "${as_me:-configure}:7090: testing found package libpcre2 ..." 1>&5
+echo "${as_me:-configure}:7447: testing found package $cf_with_pcre2 ..." 1>&5
- cf_pkgconfig_incs="`$PKG_CONFIG --cflags libpcre2 2>/dev/null`"
- cf_pkgconfig_libs="`$PKG_CONFIG --libs libpcre2 2>/dev/null`"
- test -n "$verbose" && echo " package libpcre2 CFLAGS: $cf_pkgconfig_incs" 1>&6
+ cf_pkgconfig_incs="`$PKG_CONFIG --cflags "$cf_with_pcre2" 2>/dev/null`"
+ cf_pkgconfig_libs="`$PKG_CONFIG --libs "$cf_with_pcre2" 2>/dev/null`"
+ test -n "$verbose" && echo " package $cf_with_pcre2 CFLAGS: $cf_pkgconfig_incs" 1>&6
-echo "${as_me:-configure}:7096: testing package libpcre2 CFLAGS: $cf_pkgconfig_incs ..." 1>&5
+echo "${as_me:-configure}:7453: testing package $cf_with_pcre2 CFLAGS: $cf_pkgconfig_incs ..." 1>&5
- test -n "$verbose" && echo " package libpcre2 LIBS: $cf_pkgconfig_libs" 1>&6
+ test -n "$verbose" && echo " package $cf_with_pcre2 LIBS: $cf_pkgconfig_libs" 1>&6
-echo "${as_me:-configure}:7100: testing package libpcre2 LIBS: $cf_pkgconfig_libs ..." 1>&5
+echo "${as_me:-configure}:7457: testing package $cf_with_pcre2 LIBS: $cf_pkgconfig_libs ..." 1>&5
cf_fix_cppflags=no
cf_new_cflags=
cf_new_cppflags=
cf_new_extra_cppflags=
for cf_add_cflags in $cf_pkgconfig_incs
do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
(no)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=yes
- if test $cf_fix_cppflags = yes ; then
+ if test "$cf_fix_cppflags" = yes ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
elif test "${cf_tst_cflags}" = "\"'" ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
fi
;;
esac
case "$CPPFLAGS" in
(*$cf_add_cflags)
;;
(*)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
CPPFLAGS=`echo "$CPPFLAGS" | \
sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
;;
esac
test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
;;
esac
;;
(*)
test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
;;
esac
;;
(yes)
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=no
;;
esac
done
if test -n "$cf_new_cflags" ; then
test -n "$CFLAGS" && CFLAGS="$CFLAGS "
CFLAGS="${CFLAGS}$cf_new_cflags"
fi
if test -n "$cf_new_cppflags" ; then
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
fi
if test -n "$cf_new_extra_cppflags" ; then
test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
fi
cf_add_libs="$LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
LIBS="$cf_add_libs"
- :
+ cf_with_pcre2_ok=yes; break
else
cf_pkgconfig_incs=
cf_pkgconfig_libs=
+ :
+fi
-if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists libpcre; then
- test -n "$verbose" && echo " found package libpcre" 1>&6
-
-echo "${as_me:-configure}:7224: testing found package libpcre ..." 1>&5
-
- cf_pkgconfig_incs="`$PKG_CONFIG --cflags libpcre 2>/dev/null`"
- cf_pkgconfig_libs="`$PKG_CONFIG --libs libpcre 2>/dev/null`"
- test -n "$verbose" && echo " package libpcre CFLAGS: $cf_pkgconfig_incs" 1>&6
-
-echo "${as_me:-configure}:7230: testing package libpcre CFLAGS: $cf_pkgconfig_incs ..." 1>&5
-
- test -n "$verbose" && echo " package libpcre LIBS: $cf_pkgconfig_libs" 1>&6
-
-echo "${as_me:-configure}:7234: testing package libpcre LIBS: $cf_pkgconfig_libs ..." 1>&5
+ done
+ cf_with_pcre2_ok=yes || { { echo "$as_me:7581: error: Cannot find PCRE2 library" >&5
+echo "$as_me: error: Cannot find PCRE2 library" >&2;}
+ { (exit 1); exit 1; }; }
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
+cat >>confdefs.h <<\EOF
+#define HAVE_LIB_PCRE2 1
+EOF
-for cf_add_cflags in $cf_pkgconfig_incs
-do
-case $cf_fix_cppflags in
-(no)
- case $cf_add_cflags in
- (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
-
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
-
- if test $cf_fix_cppflags = yes ; then
-
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
-
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-
- continue
- fi
- ;;
- esac
- case "$CPPFLAGS" in
- (*$cf_add_cflags)
- ;;
- (*)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
-
-CPPFLAGS=`echo "$CPPFLAGS" | \
- sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
- -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
-
- ;;
- esac
-
- test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
- cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
-
- ;;
- esac
- ;;
- (*)
-
- test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
- cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
-
- ;;
- esac
- ;;
-(yes)
-
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
-
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
- ;;
-esac
-done
-
-if test -n "$cf_new_cflags" ; then
-
- test -n "$CFLAGS" && CFLAGS="$CFLAGS "
- CFLAGS="${CFLAGS}$cf_new_cflags"
-
-fi
-
-if test -n "$cf_new_cppflags" ; then
-
- test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
- CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
-
-fi
-
-if test -n "$cf_new_extra_cppflags" ; then
-
- test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
- EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
-
-fi
-
-cf_add_libs="$LIBS"
-# reverse order
-cf_add_0lib=
-for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
-# filter duplicates
-for cf_add_1lib in $cf_add_0lib; do
- for cf_add_2lib in $cf_add_libs; do
- if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
- cf_add_1lib=
- break
- fi
- done
- test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
-done
-LIBS="$cf_add_libs"
-
- :
-else
- cf_pkgconfig_incs=
- cf_pkgconfig_libs=
-
- { { echo "$as_me:7355: error: Cannot find PCRE2 library" >&5
-echo "$as_me: error: Cannot find PCRE2 library" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-fi
-
-cat >>confdefs.h <<\EOF
-#define HAVE_LIB_PCRE2 1
-EOF
-
- # if pkgconfig gave no results, look for the libraries directly
- case $LIBS in
- (*pcre2-posix*|*pcreposix*)
- ;;
- (*)
- echo "$as_me:7371: checking for regcomp in -lpcre2-posix" >&5
-echo $ECHO_N "checking for regcomp in -lpcre2-posix... $ECHO_C" >&6
-if test "${ac_cv_lib_pcre2_posix_regcomp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpcre2-posix $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 7379 "configure"
-#include "confdefs.h"
+ # if pkgconfig gave no results, look for the libraries directly
+ case "$LIBS" in
+ (*pcre2-posix*|*pcreposix*)
+ ;;
+ (*)
+ echo "$as_me:7594: checking for regcomp in -lpcre2-posix" >&5
+echo $ECHO_N "checking for regcomp in -lpcre2-posix... $ECHO_C" >&6
+if test "${ac_cv_lib_pcre2_posix_regcomp+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpcre2-posix $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 7602 "configure"
+#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char regcomp ();
int
main (void)
{
regcomp ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7398: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:7621: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:7401: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7404: \"$ac_try\"") >&5
+ echo "$as_me:7624: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:7627: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:7407: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:7630: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_lib_pcre2_posix_regcomp=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_cv_lib_pcre2_posix_regcomp=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:7418: result: $ac_cv_lib_pcre2_posix_regcomp" >&5
+echo "$as_me:7641: result: $ac_cv_lib_pcre2_posix_regcomp" >&5
echo "${ECHO_T}$ac_cv_lib_pcre2_posix_regcomp" >&6
-if test $ac_cv_lib_pcre2_posix_regcomp = yes; then
+if test "$ac_cv_lib_pcre2_posix_regcomp" = yes; then
cf_add_libs="$LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in -lpcre2-posix; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
LIBS="$cf_add_libs"
else
- echo "$as_me:7439: checking for regcomp in -lpcreposix" >&5
+ echo "$as_me:7662: checking for regcomp in -lpcreposix" >&5
echo $ECHO_N "checking for regcomp in -lpcreposix... $ECHO_C" >&6
if test "${ac_cv_lib_pcreposix_regcomp+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lpcreposix $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 7447 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 7670 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char regcomp ();
int
main (void)
{
regcomp ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7466: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:7689: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:7469: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7472: \"$ac_try\"") >&5
+ echo "$as_me:7692: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:7695: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:7475: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:7698: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_lib_pcreposix_regcomp=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_cv_lib_pcreposix_regcomp=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:7486: result: $ac_cv_lib_pcreposix_regcomp" >&5
+echo "$as_me:7709: result: $ac_cv_lib_pcreposix_regcomp" >&5
echo "${ECHO_T}$ac_cv_lib_pcreposix_regcomp" >&6
-if test $ac_cv_lib_pcreposix_regcomp = yes; then
+if test "$ac_cv_lib_pcreposix_regcomp" = yes; then
cf_add_libs="$LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in -lpcreposix; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
LIBS="$cf_add_libs"
else
- { { echo "$as_me:7507: error: Cannot find PCRE2 POSIX library" >&5
+ { { echo "$as_me:7730: error: Cannot find PCRE2 POSIX library" >&5
echo "$as_me: error: Cannot find PCRE2 POSIX library" >&2;}
{ (exit 1); exit 1; }; }
fi
fi
;;
esac
# either way, check for the library header files
-for ac_header in pcre2-posix.h pcreposix.h
+for ac_header in pcre2posix.h pcreposix.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:7522: checking for $ac_header" >&5
+echo "$as_me:7745: checking for $ac_header" >&5
echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
if eval "test \"\${$as_ac_Header+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 7528 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 7751 "configure"
#include "confdefs.h"
#include <$ac_header>
_ACEOF
-if { (eval echo "$as_me:7532: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:7755: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:7538: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
+ echo "$as_me:7761: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
else
ac_cpp_err=
fi
else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
eval "$as_ac_Header=yes"
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ cat "conftest.$ac_ext" >&5
eval "$as_ac_Header=no"
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
fi
-echo "$as_me:7557: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+echo "$as_me:7780: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
cat >>confdefs.h <<EOF
#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
EOF
fi
done
fi
# not everyone has "test -c"
if test -c /dev/sysmouse 2>/dev/null ; then
-echo "$as_me:7571: checking if you want to use sysmouse" >&5
+echo "$as_me:7794: checking if you want to use sysmouse" >&5
echo $ECHO_N "checking if you want to use sysmouse... $ECHO_C" >&6
# Check whether --with-sysmouse or --without-sysmouse was given.
if test "${with_sysmouse+set}" = set; then
withval="$with_sysmouse"
cf_with_sysmouse=$withval
else
cf_with_sysmouse=maybe
fi;
if test "$cf_with_sysmouse" != no ; then
- cat >conftest.$ac_ext <<_ACEOF
-#line 7583 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 7806 "configure"
#include "confdefs.h"
#include <osreldate.h>
#if (__FreeBSD_version >= 400017)
#include <sys/consio.h>
#include <sys/fbio.h>
#else
#include <machine/console.h>
#endif
int
main (void)
{
struct mouse_info the_mouse;
ioctl(0, CONS_MOUSECTL, &the_mouse);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:7606: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:7829: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:7609: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:7612: \"$ac_try\"") >&5
+ echo "$as_me:7832: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:7835: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:7615: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:7838: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_with_sysmouse=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_with_sysmouse=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:7625: result: $cf_with_sysmouse" >&5
+echo "$as_me:7848: result: $cf_with_sysmouse" >&5
echo "${ECHO_T}$cf_with_sysmouse" >&6
test "$cf_with_sysmouse" = yes &&
cat >>confdefs.h <<\EOF
#define USE_SYSMOUSE 1
EOF
fi
# pretend that ncurses==ncursesw==ncursest
-echo "$as_me:7635: checking if you want to disable library suffixes" >&5
+echo "$as_me:7858: checking if you want to disable library suffixes" >&5
echo $ECHO_N "checking if you want to disable library suffixes... $ECHO_C" >&6
# Check whether --enable-lib-suffixes or --disable-lib-suffixes was given.
if test "${enable_lib_suffixes+set}" = set; then
enableval="$enable_lib_suffixes"
test "$enableval" != no && enableval=yes
if test "$enableval" != "yes" ; then
disable_lib_suffixes=yes
else
disable_lib_suffixes=no
fi
else
enableval=yes
disable_lib_suffixes=no
fi;
-echo "$as_me:7652: result: $disable_lib_suffixes" >&5
+echo "$as_me:7875: result: $disable_lib_suffixes" >&5
echo "${ECHO_T}$disable_lib_suffixes" >&6
### If we're building with rpath, try to link non-standard libs that way too.
if test "$DFT_LWR_MODEL" = "shared" && test "x$cf_cv_enable_rpath" != xno; then
-echo "$as_me:7658: checking if rpath-hack should be disabled" >&5
+echo "$as_me:7881: checking if rpath-hack should be disabled" >&5
echo $ECHO_N "checking if rpath-hack should be disabled... $ECHO_C" >&6
# Check whether --enable-rpath-hack or --disable-rpath-hack was given.
if test "${enable_rpath_hack+set}" = set; then
enableval="$enable_rpath_hack"
test "$enableval" != no && enableval=yes
if test "$enableval" != "yes" ; then
- cf_disable_rpath_hack=yes
+ enable_rpath_hack=no
else
- cf_disable_rpath_hack=no
+ enable_rpath_hack=yes
fi
else
enableval=yes
- cf_disable_rpath_hack=no
+ enable_rpath_hack=yes
fi;
-echo "$as_me:7675: result: $cf_disable_rpath_hack" >&5
+if test "x$enable_rpath_hack" = xno; then cf_disable_rpath_hack=yes; else cf_disable_rpath_hack=no; fi
+echo "$as_me:7899: result: $cf_disable_rpath_hack" >&5
echo "${ECHO_T}$cf_disable_rpath_hack" >&6
-if test "$cf_disable_rpath_hack" = no ; then
-echo "$as_me:7679: checking for updated LDFLAGS" >&5
+if test "$enable_rpath_hack" = yes ; then
+
+echo "$as_me:7904: checking for updated LDFLAGS" >&5
echo $ECHO_N "checking for updated LDFLAGS... $ECHO_C" >&6
if test -n "$LD_RPATH_OPT" ; then
- echo "$as_me:7682: result: maybe" >&5
+ echo "$as_me:7907: result: maybe" >&5
echo "${ECHO_T}maybe" >&6
for ac_prog in ldd
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:7689: checking for $ac_word" >&5
+echo "$as_me:7914: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_cf_ldd_prog+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$cf_ldd_prog"; then
ac_cv_prog_cf_ldd_prog="$cf_ldd_prog" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_cf_ldd_prog="$ac_prog"
-echo "$as_me:7704: found $ac_dir/$ac_word" >&5
+echo "$as_me:7929: found $ac_dir/$ac_word" >&5
break
done
fi
fi
cf_ldd_prog=$ac_cv_prog_cf_ldd_prog
if test -n "$cf_ldd_prog"; then
- echo "$as_me:7712: result: $cf_ldd_prog" >&5
+ echo "$as_me:7937: result: $cf_ldd_prog" >&5
echo "${ECHO_T}$cf_ldd_prog" >&6
else
- echo "$as_me:7715: result: no" >&5
+ echo "$as_me:7940: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$cf_ldd_prog" && break
done
test -n "$cf_ldd_prog" || cf_ldd_prog="no"
cf_rpath_list="/usr/lib /lib"
if test "$cf_ldd_prog" != no
then
cf_rpath_oops=
-cat >conftest.$ac_ext <<_ACEOF
-#line 7729 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 7954 "configure"
#include "confdefs.h"
#include <stdio.h>
int
main (void)
{
printf("Hello");
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7741: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:7966: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:7744: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7747: \"$ac_try\"") >&5
+ echo "$as_me:7969: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:7972: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:7750: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_rpath_oops=`$cf_ldd_prog conftest$ac_exeext | fgrep ' not found' | sed -e 's% =>.*$%%' |sort | uniq`
- cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[ ]/%/%' -e 's%/[^/][^/]*$%%' |sort | uniq`
+ echo "$as_me:7975: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_rpath_oops=`"$cf_ldd_prog" "conftest$ac_exeext" | ${FGREP-fgrep} ' not found' | sed -e 's% =>.*$%%' |sort | uniq`
+ cf_rpath_list=`"$cf_ldd_prog" "conftest$ac_exeext" | ${FGREP-fgrep} / | sed -e 's%^.*[ ]/%/%' -e 's%/[^/][^/]*$%%' |sort | uniq`
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
# If we passed the link-test, but get a "not found" on a given library,
# this could be due to inept reconfiguration of gcc to make it only
# partly honor /usr/local/lib (or whatever). Sometimes this behavior
# is intentional, e.g., installing gcc in /usr/bin and suppressing the
# /usr/local libraries.
if test -n "$cf_rpath_oops"
then
for cf_rpath_src in $cf_rpath_oops
do
for cf_rpath_dir in \
/usr/local \
/usr/pkg \
/opt/sfw
do
- if test -f $cf_rpath_dir/lib/$cf_rpath_src
+ if test -f "$cf_rpath_dir/lib/$cf_rpath_src"
then
test -n "$verbose" && echo " ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src" 1>&6
-echo "${as_me:-configure}:7778: testing ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src ..." 1>&5
+echo "${as_me:-configure}:8003: testing ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src ..." 1>&5
LDFLAGS="$LDFLAGS -L$cf_rpath_dir/lib"
break
fi
done
done
fi
fi
test -n "$verbose" && echo " ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6
-echo "${as_me:-configure}:7790: testing ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5
+echo "${as_me:-configure}:8015: testing ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5
test -n "$verbose" && echo " ...checking LDFLAGS $LDFLAGS" 1>&6
-echo "${as_me:-configure}:7794: testing ...checking LDFLAGS $LDFLAGS ..." 1>&5
+echo "${as_me:-configure}:8019: testing ...checking LDFLAGS $LDFLAGS ..." 1>&5
cf_rpath_dst=
for cf_rpath_src in $LDFLAGS
do
- case $cf_rpath_src in
+ case "$cf_rpath_src" in
(-L*)
# check if this refers to a directory which we will ignore
cf_rpath_skip=no
if test -n "$cf_rpath_list"
then
for cf_rpath_item in $cf_rpath_list
do
if test "x$cf_rpath_src" = "x-L$cf_rpath_item"
then
cf_rpath_skip=yes
break
fi
done
fi
if test "$cf_rpath_skip" = no
then
# transform the option
if test "$LD_RPATH_OPT" = "-R " ; then
cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"`
else
cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"`
fi
# if we have not already added this, add it now
cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"`
if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS"
then
test -n "$verbose" && echo " ...Filter $cf_rpath_src ->$cf_rpath_tmp" 1>&6
-echo "${as_me:-configure}:7831: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5
+echo "${as_me:-configure}:8056: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5
EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS"
fi
fi
;;
esac
cf_rpath_dst="$cf_rpath_dst $cf_rpath_src"
done
LDFLAGS=$cf_rpath_dst
test -n "$verbose" && echo " ...checked LDFLAGS $LDFLAGS" 1>&6
-echo "${as_me:-configure}:7844: testing ...checked LDFLAGS $LDFLAGS ..." 1>&5
+echo "${as_me:-configure}:8069: testing ...checked LDFLAGS $LDFLAGS ..." 1>&5
test -n "$verbose" && echo " ...checking LIBS $LIBS" 1>&6
-echo "${as_me:-configure}:7848: testing ...checking LIBS $LIBS ..." 1>&5
+echo "${as_me:-configure}:8073: testing ...checking LIBS $LIBS ..." 1>&5
cf_rpath_dst=
for cf_rpath_src in $LIBS
do
- case $cf_rpath_src in
+ case "$cf_rpath_src" in
(-L*)
# check if this refers to a directory which we will ignore
cf_rpath_skip=no
if test -n "$cf_rpath_list"
then
for cf_rpath_item in $cf_rpath_list
do
if test "x$cf_rpath_src" = "x-L$cf_rpath_item"
then
cf_rpath_skip=yes
break
fi
done
fi
if test "$cf_rpath_skip" = no
then
# transform the option
if test "$LD_RPATH_OPT" = "-R " ; then
cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"`
else
cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"`
fi
# if we have not already added this, add it now
cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"`
if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS"
then
test -n "$verbose" && echo " ...Filter $cf_rpath_src ->$cf_rpath_tmp" 1>&6
-echo "${as_me:-configure}:7885: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5
+echo "${as_me:-configure}:8110: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5
EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS"
fi
fi
;;
esac
cf_rpath_dst="$cf_rpath_dst $cf_rpath_src"
done
LIBS=$cf_rpath_dst
test -n "$verbose" && echo " ...checked LIBS $LIBS" 1>&6
-echo "${as_me:-configure}:7898: testing ...checked LIBS $LIBS ..." 1>&5
+echo "${as_me:-configure}:8123: testing ...checked LIBS $LIBS ..." 1>&5
test -n "$verbose" && echo " ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6
-echo "${as_me:-configure}:7902: testing ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5
+echo "${as_me:-configure}:8127: testing ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5
else
- echo "$as_me:7905: result: no" >&5
+ echo "$as_me:8130: result: no" >&5
echo "${ECHO_T}no" >&6
fi
fi
fi
+### Depending on the system, someone may use rpath to build ncurses but not
+# want users of the package to rely upon that feature. Give those people an
+# option to suppress that detail from EXTRA_LDFLAGS.
+EXTRA_PKG_LDFLAGS="$EXTRA_LDFLAGS"
+if test -n "$EXTRA_PKG_LDFLAGS"
+then
+ echo "$as_me:8144: checking if you want to disable extra LDFLAGS for package-scripts" >&5
+echo $ECHO_N "checking if you want to disable extra LDFLAGS for package-scripts... $ECHO_C" >&6
+
+# Check whether --enable-pkg-ldflags or --disable-pkg-ldflags was given.
+if test "${enable_pkg_ldflags+set}" = set; then
+ enableval="$enable_pkg_ldflags"
+ test "$enableval" != no && enableval=yes
+ if test "$enableval" != "yes" ; then
+ disable_pkg_ldflags=yes
+ else
+ disable_pkg_ldflags=no
+ fi
+else
+ enableval=yes
+ disable_pkg_ldflags=no
+
+fi;
+ echo "$as_me:8161: result: $disable_pkg_ldflags" >&5
+echo "${ECHO_T}$disable_pkg_ldflags" >&6
+ test "$disable_pkg_ldflags" = yes && EXTRA_PKG_LDFLAGS=
+fi
+
###############################################################################
### use option --with-extra-suffix to append suffix to headers and libraries
-echo "$as_me:7916: checking if you wish to append extra suffix to header/library paths" >&5
+echo "$as_me:8169: checking if you wish to append extra suffix to header/library paths" >&5
echo $ECHO_N "checking if you wish to append extra suffix to header/library paths... $ECHO_C" >&6
EXTRA_SUFFIX=
# Check whether --with-extra-suffix or --without-extra-suffix was given.
if test "${with_extra_suffix+set}" = set; then
withval="$with_extra_suffix"
case x$withval in
- (no)
+ (xno)
;;
(xyes|x)
EXTRA_SUFFIX=$cf_cv_abi_version
;;
(*)
EXTRA_SUFFIX=$withval
;;
esac
fi;
-echo "$as_me:7935: result: $EXTRA_SUFFIX" >&5
+echo "$as_me:8188: result: $EXTRA_SUFFIX" >&5
echo "${ECHO_T}$EXTRA_SUFFIX" >&6
### use option --disable-overwrite to leave out the link to -lcurses
-echo "$as_me:7939: checking if you wish to install ncurses overwriting curses" >&5
+echo "$as_me:8192: checking if you wish to install ncurses overwriting curses" >&5
echo $ECHO_N "checking if you wish to install ncurses overwriting curses... $ECHO_C" >&6
# Check whether --enable-overwrite or --disable-overwrite was given.
if test "${enable_overwrite+set}" = set; then
enableval="$enable_overwrite"
with_overwrite=$enableval
else
if test "$prefix" = "/usr" ; then with_overwrite=yes; else with_overwrite=no; fi
fi;
-echo "$as_me:7949: result: $with_overwrite" >&5
+echo "$as_me:8202: result: $with_overwrite" >&5
echo "${ECHO_T}$with_overwrite" >&6
-echo "$as_me:7952: checking if external terminfo-database is used" >&5
+echo "$as_me:8205: checking if external terminfo-database is used" >&5
echo $ECHO_N "checking if external terminfo-database is used... $ECHO_C" >&6
# Check whether --enable-database or --disable-database was given.
if test "${enable_database+set}" = set; then
enableval="$enable_database"
use_database=$enableval
else
use_database=yes
fi;
-echo "$as_me:7962: result: $use_database" >&5
+echo "$as_me:8215: result: $use_database" >&5
echo "${ECHO_T}$use_database" >&6
-case $host_os in
+case "$host_os" in
(os2*)
TERMINFO_SRC='${top_srcdir}/misc/emx.src'
;;
(*)
TERMINFO_SRC='${top_srcdir}/misc/terminfo.src'
;;
esac
NCURSES_USE_DATABASE=0
if test "$use_database" != no ; then
NCURSES_USE_DATABASE=1
- echo "$as_me:7978: checking which terminfo source-file will be installed" >&5
+ echo "$as_me:8231: checking which terminfo source-file will be installed" >&5
echo $ECHO_N "checking which terminfo source-file will be installed... $ECHO_C" >&6
# Check whether --with-database or --without-database was given.
if test "${with_database+set}" = set; then
withval="$with_database"
TERMINFO_SRC=$withval
fi;
- echo "$as_me:7986: result: $TERMINFO_SRC" >&5
+ echo "$as_me:8239: result: $TERMINFO_SRC" >&5
echo "${ECHO_T}$TERMINFO_SRC" >&6
- echo "$as_me:7989: checking whether to use hashed database instead of directory/tree" >&5
+ echo "$as_me:8242: checking whether to use hashed database instead of directory/tree" >&5
echo $ECHO_N "checking whether to use hashed database instead of directory/tree... $ECHO_C" >&6
# Check whether --with-hashed-db or --without-hashed-db was given.
if test "${with_hashed_db+set}" = set; then
withval="$with_hashed_db"
else
with_hashed_db=no
fi;
- echo "$as_me:7999: result: $with_hashed_db" >&5
+ echo "$as_me:8252: result: $with_hashed_db" >&5
echo "${ECHO_T}$with_hashed_db" >&6
else
with_hashed_db=no
fi
-echo "$as_me:8005: checking for list of fallback descriptions" >&5
+echo "$as_me:8258: checking for list of fallback descriptions" >&5
echo $ECHO_N "checking for list of fallback descriptions... $ECHO_C" >&6
# Check whether --with-fallbacks or --without-fallbacks was given.
if test "${with_fallbacks+set}" = set; then
withval="$with_fallbacks"
with_fallback=$withval
else
with_fallback=
fi;
-echo "$as_me:8015: result: $with_fallback" >&5
+echo "$as_me:8268: result: $with_fallback" >&5
echo "${ECHO_T}$with_fallback" >&6
case ".$with_fallback" in
(.|.no)
FALLBACK_LIST=
;;
(.yes)
- { echo "$as_me:8023: WARNING: expected a list of terminal descriptions" >&5
+ { echo "$as_me:8276: WARNING: expected a list of terminal descriptions" >&5
echo "$as_me: WARNING: expected a list of terminal descriptions" >&2;}
;;
(*)
FALLBACK_LIST=`echo "$with_fallback" | sed -e 's/,/ /g'`
;;
esac
-USE_FALLBACKS=
-test -z "$FALLBACK_LIST" && USE_FALLBACKS="#"
-
# The fallback feature in ncurses relies upon tic/infocmp outside the build
# tree for generating the terminal descriptions that will be compiled into the
# library. If your toolchain is old, it may not handle current terminal
# databases. Use configure-options to point to the tools which will be used,
# rather than the first ones found on the $PATH.
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}tic", so it can be a program name with args.
+set dummy ${ac_tool_prefix}tic; ac_word=$2
+echo "$as_me:8292: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_TIC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$TIC"; then
+ ac_cv_prog_TIC="$TIC" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_TIC="${ac_tool_prefix}tic"
+echo "$as_me:8307: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+TIC=$ac_cv_prog_TIC
+if test -n "$TIC"; then
+ echo "$as_me:8315: result: $TIC" >&5
+echo "${ECHO_T}$TIC" >&6
+else
+ echo "$as_me:8318: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_TIC"; then
+ ac_ct_TIC=$TIC
+ # Extract the first word of "tic", so it can be a program name with args.
+set dummy tic; ac_word=$2
+echo "$as_me:8327: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_TIC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_TIC"; then
+ ac_cv_prog_ac_ct_TIC="$ac_ct_TIC" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_TIC="tic"
+echo "$as_me:8342: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_TIC=$ac_cv_prog_ac_ct_TIC
+if test -n "$ac_ct_TIC"; then
+ echo "$as_me:8350: result: $ac_ct_TIC" >&5
+echo "${ECHO_T}$ac_ct_TIC" >&6
+else
+ echo "$as_me:8353: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ TIC=$ac_ct_TIC
+else
+ TIC="$ac_cv_prog_TIC"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}infocmp", so it can be a program name with args.
+set dummy ${ac_tool_prefix}infocmp; ac_word=$2
+echo "$as_me:8365: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_INFOCMP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$INFOCMP"; then
+ ac_cv_prog_INFOCMP="$INFOCMP" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_INFOCMP="${ac_tool_prefix}infocmp"
+echo "$as_me:8380: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+INFOCMP=$ac_cv_prog_INFOCMP
+if test -n "$INFOCMP"; then
+ echo "$as_me:8388: result: $INFOCMP" >&5
+echo "${ECHO_T}$INFOCMP" >&6
+else
+ echo "$as_me:8391: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_INFOCMP"; then
+ ac_ct_INFOCMP=$INFOCMP
+ # Extract the first word of "infocmp", so it can be a program name with args.
+set dummy infocmp; ac_word=$2
+echo "$as_me:8400: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_INFOCMP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_INFOCMP"; then
+ ac_cv_prog_ac_ct_INFOCMP="$ac_ct_INFOCMP" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_INFOCMP="infocmp"
+echo "$as_me:8415: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_INFOCMP=$ac_cv_prog_ac_ct_INFOCMP
+if test -n "$ac_ct_INFOCMP"; then
+ echo "$as_me:8423: result: $ac_ct_INFOCMP" >&5
+echo "${ECHO_T}$ac_ct_INFOCMP" >&6
+else
+ echo "$as_me:8426: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ INFOCMP=$ac_ct_INFOCMP
+else
+ INFOCMP="$ac_cv_prog_INFOCMP"
+fi
+
if test -n "$FALLBACK_LIST"
then
# Check whether --with-tic-path or --without-tic-path was given.
if test "${with_tic_path+set}" = set; then
withval="$with_tic_path"
- echo "$as_me:8045: checking for tic program for fallbacks" >&5
+ echo "$as_me:8441: checking for tic program for fallbacks" >&5
echo $ECHO_N "checking for tic program for fallbacks... $ECHO_C" >&6
TIC=$withval
- echo "$as_me:8048: result: $TIC" >&5
+ echo "$as_me:8444: result: $TIC" >&5
echo "${ECHO_T}$TIC" >&6
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".$TIC" in
(.\$\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[a-zA-Z]:[\\/]*) # OS/2 EMX
;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
eval TIC="$TIC"
case ".$TIC" in
(.NONE/*)
- TIC=`echo $TIC | sed -e s%NONE%$cf_path_syntax%`
+ TIC=`echo "$TIC" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- TIC=`echo $TIC | sed -e s%NONE%$cf_path_syntax%`
+ TIC=`echo "$TIC" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
- { { echo "$as_me:8076: error: expected a pathname, not \"$TIC\"" >&5
+ { { echo "$as_me:8472: error: expected a pathname, not \"$TIC\"" >&5
echo "$as_me: error: expected a pathname, not \"$TIC\"" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
else
-test -z "$TIC" && TIC=tic
+test -z "$TIC" && TIC="tic"
for ac_prog in $TIC tic
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:8089: checking for $ac_word" >&5
+echo "$as_me:8485: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_path_TIC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
case $TIC in
[\\/]* | ?:[\\/]*)
ac_cv_path_TIC="$TIC" # Let the user override the test with a path.
;;
*)
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH:/usr/local/ncurses/bin"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
if $as_executable_p "$ac_dir/$ac_word"; then
ac_cv_path_TIC="$ac_dir/$ac_word"
- echo "$as_me:8106: found $ac_dir/$ac_word" >&5
+ echo "$as_me:8502: found $ac_dir/$ac_word" >&5
break
fi
done
;;
esac
fi
TIC=$ac_cv_path_TIC
if test -n "$TIC"; then
- echo "$as_me:8117: result: $TIC" >&5
+ echo "$as_me:8513: result: $TIC" >&5
echo "${ECHO_T}$TIC" >&6
else
- echo "$as_me:8120: result: no" >&5
+ echo "$as_me:8516: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$TIC" && break
done
test -n "$TIC" || TIC="$TIC"
cf_path_prog=""
cf_path_args=""
IFS="${IFS:- }"; cf_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR"
for cf_temp in $ac_cv_path_TIC
do
if test -z "$cf_path_prog" ; then
if test "$with_full_paths" = yes ; then
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".$cf_temp" in
(.\$\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[a-zA-Z]:[\\/]*) # OS/2 EMX
;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
eval cf_temp="$cf_temp"
case ".$cf_temp" in
(.NONE/*)
- cf_temp=`echo $cf_temp | sed -e s%NONE%$cf_path_syntax%`
+ cf_temp=`echo "$cf_temp" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- cf_temp=`echo $cf_temp | sed -e s%NONE%$cf_path_syntax%`
+ cf_temp=`echo "$cf_temp" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
break
;;
esac
cf_path_prog="$cf_temp"
else
- cf_path_prog="`basename $cf_temp`"
+ cf_path_prog="`basename "$cf_temp"`"
fi
elif test -z "$cf_path_args" ; then
cf_path_args="$cf_temp"
else
cf_path_args="$cf_path_args $cf_temp"
fi
done
IFS="$cf_save_ifs"
if test -n "$cf_path_prog" ; then
-echo "${as_me:-configure}:8179: testing defining path for ${cf_path_prog} ..." 1>&5
+echo "${as_me:-configure}:8575: testing defining path for ${cf_path_prog} ..." 1>&5
cat >>confdefs.h <<EOF
#define TIC_PATH "$cf_path_prog"
EOF
test -n "$cf_path_args" &&
cat >>confdefs.h <<EOF
#define TIC_ARGS "$cf_path_args"
EOF
fi
if test -z "$TIC"
then
- { echo "$as_me:8194: WARNING: no tic program found for fallbacks" >&5
+ { echo "$as_me:8590: WARNING: no tic program found for fallbacks" >&5
echo "$as_me: WARNING: no tic program found for fallbacks" >&2;}
fi
fi;
# Check whether --with-infocmp-path or --without-infocmp-path was given.
if test "${with_infocmp_path+set}" = set; then
withval="$with_infocmp_path"
- echo "$as_me:8203: checking for infocmp program for fallbacks" >&5
+ echo "$as_me:8599: checking for infocmp program for fallbacks" >&5
echo $ECHO_N "checking for infocmp program for fallbacks... $ECHO_C" >&6
INFOCMP=$withval
- echo "$as_me:8206: result: $INFOCMP" >&5
+ echo "$as_me:8602: result: $INFOCMP" >&5
echo "${ECHO_T}$INFOCMP" >&6
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".$INFOCMP" in
(.\$\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[a-zA-Z]:[\\/]*) # OS/2 EMX
;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
eval INFOCMP="$INFOCMP"
case ".$INFOCMP" in
(.NONE/*)
- INFOCMP=`echo $INFOCMP | sed -e s%NONE%$cf_path_syntax%`
+ INFOCMP=`echo "$INFOCMP" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- INFOCMP=`echo $INFOCMP | sed -e s%NONE%$cf_path_syntax%`
+ INFOCMP=`echo "$INFOCMP" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
- { { echo "$as_me:8234: error: expected a pathname, not \"$INFOCMP\"" >&5
+ { { echo "$as_me:8630: error: expected a pathname, not \"$INFOCMP\"" >&5
echo "$as_me: error: expected a pathname, not \"$INFOCMP\"" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
else
-test -z "$INFOCMP" && INFOCMP=infocmp
+test -z "$INFOCMP" && INFOCMP="infocmp"
for ac_prog in $INFOCMP infocmp
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:8247: checking for $ac_word" >&5
+echo "$as_me:8643: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_path_INFOCMP+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
case $INFOCMP in
[\\/]* | ?:[\\/]*)
ac_cv_path_INFOCMP="$INFOCMP" # Let the user override the test with a path.
;;
*)
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH:/usr/local/ncurses/bin"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
if $as_executable_p "$ac_dir/$ac_word"; then
ac_cv_path_INFOCMP="$ac_dir/$ac_word"
- echo "$as_me:8264: found $ac_dir/$ac_word" >&5
+ echo "$as_me:8660: found $ac_dir/$ac_word" >&5
break
fi
done
;;
esac
fi
INFOCMP=$ac_cv_path_INFOCMP
if test -n "$INFOCMP"; then
- echo "$as_me:8275: result: $INFOCMP" >&5
+ echo "$as_me:8671: result: $INFOCMP" >&5
echo "${ECHO_T}$INFOCMP" >&6
else
- echo "$as_me:8278: result: no" >&5
+ echo "$as_me:8674: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$INFOCMP" && break
done
test -n "$INFOCMP" || INFOCMP="$INFOCMP"
cf_path_prog=""
cf_path_args=""
IFS="${IFS:- }"; cf_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR"
for cf_temp in $ac_cv_path_INFOCMP
do
if test -z "$cf_path_prog" ; then
if test "$with_full_paths" = yes ; then
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".$cf_temp" in
(.\$\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[a-zA-Z]:[\\/]*) # OS/2 EMX
;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
eval cf_temp="$cf_temp"
case ".$cf_temp" in
(.NONE/*)
- cf_temp=`echo $cf_temp | sed -e s%NONE%$cf_path_syntax%`
+ cf_temp=`echo "$cf_temp" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- cf_temp=`echo $cf_temp | sed -e s%NONE%$cf_path_syntax%`
+ cf_temp=`echo "$cf_temp" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
break
;;
esac
cf_path_prog="$cf_temp"
else
- cf_path_prog="`basename $cf_temp`"
+ cf_path_prog="`basename "$cf_temp"`"
fi
elif test -z "$cf_path_args" ; then
cf_path_args="$cf_temp"
else
cf_path_args="$cf_path_args $cf_temp"
fi
done
IFS="$cf_save_ifs"
if test -n "$cf_path_prog" ; then
-echo "${as_me:-configure}:8337: testing defining path for ${cf_path_prog} ..." 1>&5
+echo "${as_me:-configure}:8733: testing defining path for ${cf_path_prog} ..." 1>&5
cat >>confdefs.h <<EOF
#define INFOCMP_PATH "$cf_path_prog"
EOF
test -n "$cf_path_args" &&
cat >>confdefs.h <<EOF
#define INFOCMP_ARGS "$cf_path_args"
EOF
fi
if test -z "$INFOCMP"
then
- { echo "$as_me:8352: WARNING: no infocmp program found for fallbacks" >&5
+ { echo "$as_me:8748: WARNING: no infocmp program found for fallbacks" >&5
echo "$as_me: WARNING: no infocmp program found for fallbacks" >&2;}
fi
fi;
-else
- : ${TIC:=tic}
- : ${INFOCMP:=infocmp}
+ test -z "$TIC" && FALLBACK_LIST=
+ test -z "$INFOCMP" && FALLBACK_LIST=
+ if test -z "$FALLBACK_LIST"
+ then
+ { echo "$as_me:8758: WARNING: ignoring fallback option because tic/infocmp are not available" >&5
+echo "$as_me: WARNING: ignoring fallback option because tic/infocmp are not available" >&2;}
+ fi
fi
-echo "$as_me:8363: checking if you want modern xterm or antique" >&5
+USE_FALLBACKS=
+test -z "$FALLBACK_LIST" && USE_FALLBACKS="#"
+
+echo "$as_me:8766: checking if you want modern xterm or antique" >&5
echo $ECHO_N "checking if you want modern xterm or antique... $ECHO_C" >&6
# Check whether --with-xterm-new or --without-xterm-new was given.
if test "${with_xterm_new+set}" = set; then
withval="$with_xterm_new"
with_xterm_new=$withval
else
with_xterm_new=yes
fi;
-case $with_xterm_new in
+case "$with_xterm_new" in
(no) with_xterm_new=xterm-old;;
(*) with_xterm_new=xterm-new;;
esac
-echo "$as_me:8377: result: $with_xterm_new" >&5
+echo "$as_me:8780: result: $with_xterm_new" >&5
echo "${ECHO_T}$with_xterm_new" >&6
WHICH_XTERM=$with_xterm_new
-echo "$as_me:8381: checking if xterm backspace sends BS or DEL" >&5
+echo "$as_me:8784: checking if xterm backspace sends BS or DEL" >&5
echo $ECHO_N "checking if xterm backspace sends BS or DEL... $ECHO_C" >&6
# Check whether --with-xterm-kbs or --without-xterm-kbs was given.
if test "${with_xterm_kbs+set}" = set; then
withval="$with_xterm_kbs"
with_xterm_kbs=$withval
else
with_xterm_kbs=BS
fi;
case x$with_xterm_kbs in
(xyes|xno|xBS|xbs|x8)
with_xterm_kbs=BS
;;
(xDEL|xdel|x127)
with_xterm_kbs=DEL
;;
(*)
with_xterm_kbs=$withval
;;
esac
-echo "$as_me:8402: result: $with_xterm_kbs" >&5
+echo "$as_me:8805: result: $with_xterm_kbs" >&5
echo "${ECHO_T}$with_xterm_kbs" >&6
XTERM_KBS=$with_xterm_kbs
MAKE_TERMINFO=
if test "$use_database" = no ; then
TERMINFO="${datadir}/terminfo"
MAKE_TERMINFO="#"
else
-echo "$as_me:8412: checking for list of terminfo directories" >&5
+echo "$as_me:8815: checking for list of terminfo directories" >&5
echo $ECHO_N "checking for list of terminfo directories... $ECHO_C" >&6
# Check whether --with-terminfo-dirs or --without-terminfo-dirs was given.
if test "${with_terminfo_dirs+set}" = set; then
withval="$with_terminfo_dirs"
else
withval=${TERMINFO_DIRS:-${datadir}/terminfo}
fi;
IFS="${IFS:- }"; ac_save_ifs="$IFS"; IFS="${PATH_SEPARATOR}"
cf_dst_path=
for cf_src_path in $withval
do
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".$cf_src_path" in
(.\$\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[a-zA-Z]:[\\/]*) # OS/2 EMX
;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
eval cf_src_path="$cf_src_path"
case ".$cf_src_path" in
(.NONE/*)
- cf_src_path=`echo $cf_src_path | sed -e s%NONE%$cf_path_syntax%`
+ cf_src_path=`echo "$cf_src_path" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- cf_src_path=`echo $cf_src_path | sed -e s%NONE%$cf_path_syntax%`
+ cf_src_path=`echo "$cf_src_path" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
- { { echo "$as_me:8452: error: expected a pathname, not \"$cf_src_path\"" >&5
+ { { echo "$as_me:8855: error: expected a pathname, not \"$cf_src_path\"" >&5
echo "$as_me: error: expected a pathname, not \"$cf_src_path\"" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
test -n "$cf_dst_path" && cf_dst_path="${cf_dst_path}$PATH_SEPARATOR"
cf_dst_path="${cf_dst_path}${cf_src_path}"
done
IFS="$ac_save_ifs"
# This may use the prefix/exec_prefix symbols which will only yield "NONE"
# so we have to check/work around. We do prefer the result of "eval"...
eval cf_dst_eval="$cf_dst_path"
case "x$cf_dst_eval" in
(xNONE*)
TERMINFO_DIRS=$cf_dst_path
;;
(*)
TERMINFO_DIRS="$cf_dst_eval"
;;
esac
-echo "$as_me:8475: result: $TERMINFO_DIRS" >&5
+echo "$as_me:8878: result: $TERMINFO_DIRS" >&5
echo "${ECHO_T}$TERMINFO_DIRS" >&6
test -n "$TERMINFO_DIRS" &&
cat >>confdefs.h <<EOF
#define TERMINFO_DIRS "$TERMINFO_DIRS"
EOF
case "x$TERMINFO" in
x???:*)
- { echo "$as_me:8484: WARNING: ignoring non-directory/file TERMINFO value" >&5
+ { echo "$as_me:8887: WARNING: ignoring non-directory/file TERMINFO value" >&5
echo "$as_me: WARNING: ignoring non-directory/file TERMINFO value" >&2;}
unset TERMINFO
;;
esac
-echo "$as_me:8490: checking for default terminfo directory" >&5
+echo "$as_me:8893: checking for default terminfo directory" >&5
echo $ECHO_N "checking for default terminfo directory... $ECHO_C" >&6
# Check whether --with-default-terminfo-dir or --without-default-terminfo-dir was given.
if test "${with_default_terminfo_dir+set}" = set; then
withval="$with_default_terminfo_dir"
else
withval="${TERMINFO:-${datadir}/terminfo}"
fi; if test -n "${datadir}/terminfo" ; then
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".$withval" in
(.\$\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[a-zA-Z]:[\\/]*) # OS/2 EMX
;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
eval withval="$withval"
case ".$withval" in
(.NONE/*)
- withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%`
+ withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%`
+ withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
- { { echo "$as_me:8526: error: expected a pathname, not \"$withval\"" >&5
+ { { echo "$as_me:8929: error: expected a pathname, not \"$withval\"" >&5
echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
fi
eval TERMINFO="$withval"
-echo "$as_me:8535: result: $TERMINFO" >&5
+echo "$as_me:8938: result: $TERMINFO" >&5
echo "${ECHO_T}$TERMINFO" >&6
cat >>confdefs.h <<EOF
#define TERMINFO "$TERMINFO"
EOF
fi
### use option --disable-big-core to make tic run on small machines
### We need 4Mb, check if we can allocate 50% more than that.
-echo "$as_me:8546: checking if big-core option selected" >&5
+echo "$as_me:8949: checking if big-core option selected" >&5
echo $ECHO_N "checking if big-core option selected... $ECHO_C" >&6
# Check whether --enable-big-core or --disable-big-core was given.
if test "${enable_big_core+set}" = set; then
enableval="$enable_big_core"
with_big_core=$enableval
else
if test "$cross_compiling" = yes; then
with_big_core=no
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 8558 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 8961 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <string.h>
int main() {
unsigned long n = 6000000L;
char *s = malloc(n);
if (s != 0)
s[0] = s[n-1] = 0;
${cf_cv_main_return:-return}(s == 0);
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:8572: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:8975: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:8575: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:8577: \"$ac_try\"") >&5
+ echo "$as_me:8978: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:8980: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:8580: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:8983: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
with_big_core=yes
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
with_big_core=no
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
fi;
-echo "$as_me:8592: result: $with_big_core" >&5
+echo "$as_me:8995: result: $with_big_core" >&5
echo "${ECHO_T}$with_big_core" >&6
test "x$with_big_core" = "xyes" &&
cat >>confdefs.h <<\EOF
#define HAVE_BIG_CORE 1
EOF
### ISO C only guarantees 512-char strings, we have tables which load faster
### when constructed using "big" strings. More than the C compiler, the awk
### program is a limit on most vendor UNIX systems. Check that we can build.
-echo "$as_me:8602: checking if big-strings option selected" >&5
+echo "$as_me:9005: checking if big-strings option selected" >&5
echo $ECHO_N "checking if big-strings option selected... $ECHO_C" >&6
# Check whether --enable-big-strings or --disable-big-strings was given.
if test "${enable_big_strings+set}" = set; then
enableval="$enable_big_strings"
with_big_strings=$enableval
else
case x$AWK in
(x)
eval with_big_strings=no
;;
(*)
if ( ${AWK} 'BEGIN { xx = "x"; while (length(xx) < 12000) { xx = xx "x"; }; printf("%s\n", xx); }' 2>/dev/null \
| $AWK '{ printf "%d\n", length($0); }' 2>/dev/null | $AWK 'BEGIN { eqls=0; recs=0; } { recs++; if ($0 == 12000) eqls++; } END { if (recs != 1 || eqls != 1) exit 1; }' 2>/dev/null >/dev/null ) ; then
eval with_big_strings=yes
else
eval with_big_strings=no
fi
;;
esac
fi;
-echo "$as_me:8626: result: $with_big_strings" >&5
+echo "$as_me:9029: result: $with_big_strings" >&5
echo "${ECHO_T}$with_big_strings" >&6
USE_BIG_STRINGS=0
test "x$with_big_strings" = "xyes" && USE_BIG_STRINGS=1
### use option --enable-termcap to compile in the termcap fallback support
-echo "$as_me:8633: checking if you want termcap-fallback support" >&5
+echo "$as_me:9036: checking if you want termcap-fallback support" >&5
echo $ECHO_N "checking if you want termcap-fallback support... $ECHO_C" >&6
# Check whether --enable-termcap or --disable-termcap was given.
if test "${enable_termcap+set}" = set; then
enableval="$enable_termcap"
with_termcap=$enableval
else
with_termcap=no
fi;
-echo "$as_me:8643: result: $with_termcap" >&5
+echo "$as_me:9046: result: $with_termcap" >&5
echo "${ECHO_T}$with_termcap" >&6
NCURSES_USE_TERMCAP=0
if test "x$with_termcap" != "xyes" ; then
if test "$use_database" = no ; then
if test -z "$with_fallback" ; then
- { { echo "$as_me:8650: error: You have disabled the database w/o specifying fallbacks" >&5
+ { { echo "$as_me:9053: error: You have disabled the database w/o specifying fallbacks" >&5
echo "$as_me: error: You have disabled the database w/o specifying fallbacks" >&2;}
{ (exit 1); exit 1; }; }
fi
fi
cat >>confdefs.h <<\EOF
#define PURE_TERMINFO 1
EOF
else
if test "$with_ticlib" != no ; then
- { { echo "$as_me:8663: error: Options --with-ticlib and --enable-termcap cannot be combined" >&5
+ { { echo "$as_me:9066: error: Options --with-ticlib and --enable-termcap cannot be combined" >&5
echo "$as_me: error: Options --with-ticlib and --enable-termcap cannot be combined" >&2;}
{ (exit 1); exit 1; }; }
fi
NCURSES_USE_TERMCAP=1
- echo "$as_me:8669: checking for list of termcap files" >&5
+ echo "$as_me:9072: checking for list of termcap files" >&5
echo $ECHO_N "checking for list of termcap files... $ECHO_C" >&6
# Check whether --with-termpath or --without-termpath was given.
if test "${with_termpath+set}" = set; then
withval="$with_termpath"
else
withval=${TERMPATH:-/etc/termcap:/usr/share/misc/termcap}
fi;
IFS="${IFS:- }"; ac_save_ifs="$IFS"; IFS="${PATH_SEPARATOR}"
cf_dst_path=
for cf_src_path in $withval
do
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".$cf_src_path" in
(.\$\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[a-zA-Z]:[\\/]*) # OS/2 EMX
;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
eval cf_src_path="$cf_src_path"
case ".$cf_src_path" in
(.NONE/*)
- cf_src_path=`echo $cf_src_path | sed -e s%NONE%$cf_path_syntax%`
+ cf_src_path=`echo "$cf_src_path" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- cf_src_path=`echo $cf_src_path | sed -e s%NONE%$cf_path_syntax%`
+ cf_src_path=`echo "$cf_src_path" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
- { { echo "$as_me:8709: error: expected a pathname, not \"$cf_src_path\"" >&5
+ { { echo "$as_me:9112: error: expected a pathname, not \"$cf_src_path\"" >&5
echo "$as_me: error: expected a pathname, not \"$cf_src_path\"" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
test -n "$cf_dst_path" && cf_dst_path="${cf_dst_path}$PATH_SEPARATOR"
cf_dst_path="${cf_dst_path}${cf_src_path}"
done
IFS="$ac_save_ifs"
# This may use the prefix/exec_prefix symbols which will only yield "NONE"
# so we have to check/work around. We do prefer the result of "eval"...
eval cf_dst_eval="$cf_dst_path"
case "x$cf_dst_eval" in
(xNONE*)
TERMPATH=$cf_dst_path
;;
(*)
TERMPATH="$cf_dst_eval"
;;
esac
- echo "$as_me:8732: result: $TERMPATH" >&5
+ echo "$as_me:9135: result: $TERMPATH" >&5
echo "${ECHO_T}$TERMPATH" >&6
test -n "$TERMPATH" &&
cat >>confdefs.h <<EOF
#define TERMPATH "$TERMPATH"
EOF
### use option --enable-getcap to use a hacked getcap for reading termcaps
- echo "$as_me:8740: checking if fast termcap-loader is needed" >&5
+ echo "$as_me:9143: checking if fast termcap-loader is needed" >&5
echo $ECHO_N "checking if fast termcap-loader is needed... $ECHO_C" >&6
# Check whether --enable-getcap or --disable-getcap was given.
if test "${enable_getcap+set}" = set; then
enableval="$enable_getcap"
with_getcap=$enableval
else
with_getcap=no
fi;
- echo "$as_me:8750: result: $with_getcap" >&5
+ echo "$as_me:9153: result: $with_getcap" >&5
echo "${ECHO_T}$with_getcap" >&6
test "x$with_getcap" = "xyes" &&
cat >>confdefs.h <<\EOF
#define USE_GETCAP 1
EOF
- echo "$as_me:8757: checking if translated termcaps will be cached in ~/.terminfo" >&5
+ echo "$as_me:9160: checking if translated termcaps will be cached in ~/.terminfo" >&5
echo $ECHO_N "checking if translated termcaps will be cached in ~/.terminfo... $ECHO_C" >&6
# Check whether --enable-getcap-cache or --disable-getcap-cache was given.
if test "${enable_getcap_cache+set}" = set; then
enableval="$enable_getcap_cache"
with_getcap_cache=$enableval
else
with_getcap_cache=no
fi;
- echo "$as_me:8767: result: $with_getcap_cache" >&5
+ echo "$as_me:9170: result: $with_getcap_cache" >&5
echo "${ECHO_T}$with_getcap_cache" >&6
test "x$with_getcap_cache" = "xyes" &&
cat >>confdefs.h <<\EOF
#define USE_GETCAP_CACHE 1
EOF
fi
### Use option --disable-home-terminfo to completely remove ~/.terminfo
-echo "$as_me:8777: checking if ~/.terminfo is wanted" >&5
+echo "$as_me:9180: checking if ~/.terminfo is wanted" >&5
echo $ECHO_N "checking if ~/.terminfo is wanted... $ECHO_C" >&6
# Check whether --enable-home-terminfo or --disable-home-terminfo was given.
if test "${enable_home_terminfo+set}" = set; then
enableval="$enable_home_terminfo"
with_home_terminfo=$enableval
else
with_home_terminfo=yes
fi;
-echo "$as_me:8787: result: $with_home_terminfo" >&5
+echo "$as_me:9190: result: $with_home_terminfo" >&5
echo "${ECHO_T}$with_home_terminfo" >&6
test "x$with_home_terminfo" = "xyes" &&
cat >>confdefs.h <<\EOF
#define USE_HOME_TERMINFO 1
EOF
-echo "$as_me:8794: checking if you want to use restricted environment when running as root" >&5
+echo "$as_me:9197: checking if you want to use restricted environment when running as root" >&5
echo $ECHO_N "checking if you want to use restricted environment when running as root... $ECHO_C" >&6
# Check whether --enable-root-environ or --disable-root-environ was given.
if test "${enable_root_environ+set}" = set; then
enableval="$enable_root_environ"
with_root_environ=$enableval
else
with_root_environ=yes
fi;
-echo "$as_me:8804: result: $with_root_environ" >&5
+echo "$as_me:9207: result: $with_root_environ" >&5
echo "${ECHO_T}$with_root_environ" >&6
test "x$with_root_environ" = xyes &&
cat >>confdefs.h <<\EOF
#define USE_ROOT_ENVIRON 1
EOF
### Use option --enable-symlinks to make tic use symlinks, not hard links
### to reduce storage requirements for the terminfo database.
for ac_header in \
unistd.h \
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:8819: checking for $ac_header" >&5
+echo "$as_me:9222: checking for $ac_header" >&5
echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
if eval "test \"\${$as_ac_Header+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 8825 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 9228 "configure"
#include "confdefs.h"
#include <$ac_header>
_ACEOF
-if { (eval echo "$as_me:8829: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:9232: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:8835: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
+ echo "$as_me:9238: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
else
ac_cpp_err=
fi
else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
eval "$as_ac_Header=yes"
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ cat "conftest.$ac_ext" >&5
eval "$as_ac_Header=no"
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
fi
-echo "$as_me:8854: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+echo "$as_me:9257: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
cat >>confdefs.h <<EOF
#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
EOF
fi
done
for ac_func in \
remove \
unlink
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:8869: checking for $ac_func" >&5
+echo "$as_me:9272: checking for $ac_func" >&5
echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 8875 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 9278 "configure"
#include "confdefs.h"
#define $ac_func autoconf_temporary
#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
#undef $ac_func
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func (void);
int
main (void)
{
/* The GNU C library defines stubs for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
#error found stub for $ac_func
#endif
return $ac_func ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:8906: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:9309: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:8909: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:8912: \"$ac_try\"") >&5
+ echo "$as_me:9312: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:9315: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:8915: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:9318: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
eval "$as_ac_var=no"
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:8925: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+echo "$as_me:9328: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
cat >>confdefs.h <<EOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
EOF
fi
done
if test "$cross_compiling" = yes ; then
for ac_func in \
link \
symlink
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:8942: checking for $ac_func" >&5
+echo "$as_me:9345: checking for $ac_func" >&5
echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 8948 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 9351 "configure"
#include "confdefs.h"
#define $ac_func autoconf_temporary
#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
#undef $ac_func
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func (void);
int
main (void)
{
/* The GNU C library defines stubs for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
#error found stub for $ac_func
#endif
return $ac_func ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:8979: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:9382: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:8982: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:8985: \"$ac_try\"") >&5
+ echo "$as_me:9385: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:9388: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:8988: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:9391: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
eval "$as_ac_var=no"
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:8998: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+echo "$as_me:9401: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
cat >>confdefs.h <<EOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
EOF
fi
done
else
- echo "$as_me:9009: checking if link/symlink functions work" >&5
+ echo "$as_me:9412: checking if link/symlink functions work" >&5
echo $ECHO_N "checking if link/symlink functions work... $ECHO_C" >&6
if test "${cf_cv_link_funcs+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cf_cv_link_funcs=
for cf_func in link symlink ; do
if test "$cross_compiling" = yes; then
eval 'ac_cv_func_'$cf_func'=error'
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 9022 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 9425 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/stat.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
int main(void)
{
int fail = 0;
char *src = "config.log";
char *dst = "conftest.chk";
struct stat src_sb;
struct stat dst_sb;
stat(src, &src_sb);
fail = ($cf_func("config.log", "conftest.chk") < 0)
|| (stat(dst, &dst_sb) < 0)
|| (dst_sb.st_mtime != src_sb.st_mtime);
#ifdef HAVE_UNLINK
unlink(dst);
#else
remove(dst);
#endif
${cf_cv_main_return:-return} (fail);
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:9052: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:9455: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:9055: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:9057: \"$ac_try\"") >&5
+ echo "$as_me:9458: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:9460: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:9060: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:9463: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_link_funcs="$cf_cv_link_funcs $cf_func"
eval 'ac_cv_func_'$cf_func'=yes'
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
eval 'ac_cv_func_'$cf_func'=no'
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
done
test -z "$cf_cv_link_funcs" && cf_cv_link_funcs=no
fi
-echo "$as_me:9078: result: $cf_cv_link_funcs" >&5
+echo "$as_me:9481: result: $cf_cv_link_funcs" >&5
echo "${ECHO_T}$cf_cv_link_funcs" >&6
test "$ac_cv_func_link" = yes &&
cat >>confdefs.h <<\EOF
#define HAVE_LINK 1
EOF
test "$ac_cv_func_symlink" = yes &&
cat >>confdefs.h <<\EOF
#define HAVE_SYMLINK 1
EOF
fi
with_links=no
with_symlinks=no
# soft links (symbolic links) are useful for some systems where hard links do
# not work, or to make it simpler to copy terminfo trees around.
if test "x$ac_cv_func_symlink" = xyes ; then
- echo "$as_me:9098: checking if tic should use symbolic links" >&5
+ echo "$as_me:9501: checking if tic should use symbolic links" >&5
echo $ECHO_N "checking if tic should use symbolic links... $ECHO_C" >&6
# Check whether --enable-symlinks or --disable-symlinks was given.
if test "${enable_symlinks+set}" = set; then
enableval="$enable_symlinks"
with_symlinks=$enableval
else
with_symlinks=no
fi;
- echo "$as_me:9108: result: $with_symlinks" >&5
+ echo "$as_me:9511: result: $with_symlinks" >&5
echo "${ECHO_T}$with_symlinks" >&6
fi
# If we have hard links and did not choose to use soft links instead, there is
# no reason to make this choice optional - use the hard links.
if test "$with_symlinks" = no ; then
- echo "$as_me:9115: checking if tic should use hard links" >&5
+ echo "$as_me:9518: checking if tic should use hard links" >&5
echo $ECHO_N "checking if tic should use hard links... $ECHO_C" >&6
if test "x$ac_cv_func_link" = xyes ; then
with_links=yes
else
with_links=no
fi
- echo "$as_me:9122: result: $with_links" >&5
+ echo "$as_me:9525: result: $with_links" >&5
echo "${ECHO_T}$with_links" >&6
fi
test "x$with_links" = xyes &&
cat >>confdefs.h <<\EOF
#define USE_LINKS 1
EOF
test "x$with_symlinks" = xyes &&
cat >>confdefs.h <<\EOF
#define USE_SYMLINKS 1
EOF
### use option --enable-broken-linker to force on use of broken-linker support
-echo "$as_me:9138: checking if you want broken-linker support code" >&5
+echo "$as_me:9541: checking if you want broken-linker support code" >&5
echo $ECHO_N "checking if you want broken-linker support code... $ECHO_C" >&6
# Check whether --enable-broken_linker or --disable-broken_linker was given.
if test "${enable_broken_linker+set}" = set; then
enableval="$enable_broken_linker"
with_broken_linker=$enableval
else
with_broken_linker=no
fi;
-echo "$as_me:9148: result: $with_broken_linker" >&5
+echo "$as_me:9551: result: $with_broken_linker" >&5
echo "${ECHO_T}$with_broken_linker" >&6
-: ${BROKEN_LINKER:=0}
+: "${BROKEN_LINKER:=0}"
if test "x$with_broken_linker" = xyes ; then
cat >>confdefs.h <<\EOF
#define BROKEN_LINKER 1
EOF
BROKEN_LINKER=1
fi
### use option --enable-bsdpad to have tputs process BSD-style prefix padding
-echo "$as_me:9162: checking if tputs should process BSD-style prefix padding" >&5
+echo "$as_me:9565: checking if tputs should process BSD-style prefix padding" >&5
echo $ECHO_N "checking if tputs should process BSD-style prefix padding... $ECHO_C" >&6
# Check whether --enable-bsdpad or --disable-bsdpad was given.
if test "${enable_bsdpad+set}" = set; then
enableval="$enable_bsdpad"
with_bsdpad=$enableval
else
with_bsdpad=no
fi;
-echo "$as_me:9172: result: $with_bsdpad" >&5
+echo "$as_me:9575: result: $with_bsdpad" >&5
echo "${ECHO_T}$with_bsdpad" >&6
test "x$with_bsdpad" = xyes &&
cat >>confdefs.h <<\EOF
#define BSD_TPUTS 1
EOF
### use option --enable-widec to turn on use of wide-character support
NCURSES_CH_T=chtype
NCURSES_LIBUTF8=0
NEED_WCHAR_H=0
NCURSES_MBSTATE_T=0
NCURSES_WCHAR_T=0
NCURSES_WINT_T=0
# Check to define _XOPEN_SOURCE "automatically"
CPPFLAGS_before_XOPEN="$CPPFLAGS"
-echo "$as_me:9191: checking if the POSIX test-macros are already defined" >&5
+echo "$as_me:9594: checking if the POSIX test-macros are already defined" >&5
echo $ECHO_N "checking if the POSIX test-macros are already defined... $ECHO_C" >&6
if test "${cf_cv_posix_visible+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-cat >conftest.$ac_ext <<_ACEOF
-#line 9198 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 9601 "configure"
#include "confdefs.h"
#include <stdio.h>
int
main (void)
{
#if defined(__POSIX_VISIBLE) && ((__POSIX_VISIBLE - 0L) > 0) \
&& defined(__XSI_VISIBLE) && ((__XSI_VISIBLE - 0L) > 0) \
&& defined(__BSD_VISIBLE) && ((__BSD_VISIBLE - 0L) > 0) \
&& defined(__ISO_C_VISIBLE) && ((__ISO_C_VISIBLE - 0L) > 0)
#error conflicting symbols found
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9217: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:9620: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:9220: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:9223: \"$ac_try\"") >&5
+ echo "$as_me:9623: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:9626: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:9226: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:9629: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_posix_visible=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_posix_visible=yes
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:9237: result: $cf_cv_posix_visible" >&5
+echo "$as_me:9640: result: $cf_cv_posix_visible" >&5
echo "${ECHO_T}$cf_cv_posix_visible" >&6
if test "$cf_cv_posix_visible" = no; then
cf_XOPEN_SOURCE=600
cf_POSIX_C_SOURCE=199506L
cf_xopen_source=
-case $host_os in
+case "$host_os" in
(aix[4-7]*)
cf_xopen_source="-D_ALL_SOURCE"
;;
(msys)
cf_XOPEN_SOURCE=600
;;
(darwin[0-8].*)
cf_xopen_source="-D_APPLE_C_SOURCE"
;;
(darwin*)
cf_xopen_source="-D_DARWIN_C_SOURCE"
cf_XOPEN_SOURCE=
;;
(freebsd*|dragonfly*|midnightbsd*)
# 5.x headers associate
# _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
# _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
cf_POSIX_C_SOURCE=200112L
cf_XOPEN_SOURCE=600
cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
;;
(hpux11*)
cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500"
;;
(hpux*)
cf_xopen_source="-D_HPUX_SOURCE"
;;
(irix[56].*)
cf_xopen_source="-D_SGI_SOURCE"
cf_XOPEN_SOURCE=
;;
(linux*|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin)
cf_gnu_xopen_source=$cf_XOPEN_SOURCE
-echo "$as_me:9282: checking if this is the GNU C library" >&5
+echo "$as_me:9685: checking if this is the GNU C library" >&5
echo $ECHO_N "checking if this is the GNU C library... $ECHO_C" >&6
if test "${cf_cv_gnu_library+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-cat >conftest.$ac_ext <<_ACEOF
-#line 9289 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 9692 "configure"
#include "confdefs.h"
#include <sys/types.h>
int
main (void)
{
#if __GLIBC__ > 0 && __GLIBC_MINOR__ >= 0
return 0;
#elif __NEWLIB__ > 0 && __NEWLIB_MINOR__ >= 0
return 0;
#else
# error not GNU C library
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9308: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:9711: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:9311: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:9314: \"$ac_try\"") >&5
+ echo "$as_me:9714: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:9717: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:9317: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:9720: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_gnu_library=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_gnu_library=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:9328: result: $cf_cv_gnu_library" >&5
+echo "$as_me:9731: result: $cf_cv_gnu_library" >&5
echo "${ECHO_T}$cf_cv_gnu_library" >&6
if test x$cf_cv_gnu_library = xyes; then
# With glibc 2.19 (13 years after this check was begun), _DEFAULT_SOURCE
# was changed to help a little. newlib incorporated the change about 4
# years later.
- echo "$as_me:9336: checking if _DEFAULT_SOURCE can be used as a basis" >&5
+ echo "$as_me:9739: checking if _DEFAULT_SOURCE can be used as a basis" >&5
echo $ECHO_N "checking if _DEFAULT_SOURCE can be used as a basis... $ECHO_C" >&6
if test "${cf_cv_gnu_library_219+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cf_save="$CPPFLAGS"
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}-D_DEFAULT_SOURCE"
- cat >conftest.$ac_ext <<_ACEOF
-#line 9348 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 9751 "configure"
#include "confdefs.h"
#include <sys/types.h>
int
main (void)
{
#if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 19) || (__GLIBC__ > 2)
return 0;
#elif (__NEWLIB__ == 2 && __NEWLIB_MINOR__ >= 4) || (__GLIBC__ > 3)
return 0;
#else
# error GNU C library __GLIBC__.__GLIBC_MINOR__ is too old
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9367: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:9770: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:9370: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:9373: \"$ac_try\"") >&5
+ echo "$as_me:9773: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:9776: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:9376: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:9779: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_gnu_library_219=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_gnu_library_219=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
CPPFLAGS="$cf_save"
fi
-echo "$as_me:9388: result: $cf_cv_gnu_library_219" >&5
+echo "$as_me:9791: result: $cf_cv_gnu_library_219" >&5
echo "${ECHO_T}$cf_cv_gnu_library_219" >&6
if test "x$cf_cv_gnu_library_219" = xyes; then
cf_save="$CPPFLAGS"
- echo "$as_me:9393: checking if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE" >&5
+ echo "$as_me:9796: checking if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE" >&5
echo $ECHO_N "checking if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE... $ECHO_C" >&6
if test "${cf_cv_gnu_dftsrc_219+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cf_fix_cppflags=no
cf_new_cflags=
cf_new_cppflags=
cf_new_extra_cppflags=
for cf_add_cflags in -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=$cf_gnu_xopen_source
do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
(no)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=yes
- if test $cf_fix_cppflags = yes ; then
+ if test "$cf_fix_cppflags" = yes ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
elif test "${cf_tst_cflags}" = "\"'" ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
fi
;;
esac
case "$CPPFLAGS" in
(*$cf_add_cflags)
;;
(*)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
CPPFLAGS=`echo "$CPPFLAGS" | \
sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
;;
esac
test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
;;
esac
;;
(*)
test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
;;
esac
;;
(yes)
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=no
;;
esac
done
if test -n "$cf_new_cflags" ; then
test -n "$CFLAGS" && CFLAGS="$CFLAGS "
CFLAGS="${CFLAGS}$cf_new_cflags"
fi
if test -n "$cf_new_cppflags" ; then
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
fi
if test -n "$cf_new_extra_cppflags" ; then
test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
fi
- cat >conftest.$ac_ext <<_ACEOF
-#line 9498 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 9901 "configure"
#include "confdefs.h"
#include <limits.h>
#include <sys/types.h>
int
main (void)
{
#if (_XOPEN_SOURCE >= $cf_gnu_xopen_source) && (MB_LEN_MAX > 1)
return 0;
#else
# error GNU C library is too old
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9518: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:9921: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:9521: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:9524: \"$ac_try\"") >&5
+ echo "$as_me:9924: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:9927: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:9527: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:9930: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_gnu_dftsrc_219=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_gnu_dftsrc_219=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:9538: result: $cf_cv_gnu_dftsrc_219" >&5
+echo "$as_me:9941: result: $cf_cv_gnu_dftsrc_219" >&5
echo "${ECHO_T}$cf_cv_gnu_dftsrc_219" >&6
test "x$cf_cv_gnu_dftsrc_219" = "xyes" || CPPFLAGS="$cf_save"
else
cf_cv_gnu_dftsrc_219=maybe
fi
if test "x$cf_cv_gnu_dftsrc_219" != xyes; then
- echo "$as_me:9547: checking if we must define _GNU_SOURCE" >&5
+ echo "$as_me:9950: checking if we must define _GNU_SOURCE" >&5
echo $ECHO_N "checking if we must define _GNU_SOURCE... $ECHO_C" >&6
if test "${cf_cv_gnu_source+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 9554 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 9957 "configure"
#include "confdefs.h"
#include <sys/types.h>
int
main (void)
{
#ifndef _XOPEN_SOURCE
#error expected _XOPEN_SOURCE to be defined
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9569: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:9972: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:9572: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:9575: \"$ac_try\"") >&5
+ echo "$as_me:9975: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:9978: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:9578: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:9981: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_gnu_source=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_save="$CPPFLAGS"
cf_fix_cppflags=no
cf_new_cflags=
cf_new_cppflags=
cf_new_extra_cppflags=
for cf_add_cflags in -D_GNU_SOURCE
do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
(no)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=yes
- if test $cf_fix_cppflags = yes ; then
+ if test "$cf_fix_cppflags" = yes ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
elif test "${cf_tst_cflags}" = "\"'" ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
fi
;;
esac
case "$CPPFLAGS" in
(*$cf_add_cflags)
;;
(*)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
CPPFLAGS=`echo "$CPPFLAGS" | \
sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
;;
esac
test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
;;
esac
;;
(*)
test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
;;
esac
;;
(yes)
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=no
;;
esac
done
if test -n "$cf_new_cflags" ; then
test -n "$CFLAGS" && CFLAGS="$CFLAGS "
CFLAGS="${CFLAGS}$cf_new_cflags"
fi
if test -n "$cf_new_cppflags" ; then
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
fi
if test -n "$cf_new_extra_cppflags" ; then
test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
fi
- cat >conftest.$ac_ext <<_ACEOF
-#line 9685 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 10088 "configure"
#include "confdefs.h"
#include <sys/types.h>
int
main (void)
{
#ifdef _XOPEN_SOURCE
#error expected _XOPEN_SOURCE to be undefined
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9700: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10103: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:9703: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:9706: \"$ac_try\"") >&5
+ echo "$as_me:10106: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:10109: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:9709: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:10112: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_gnu_source=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_gnu_source=yes
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
CPPFLAGS="$cf_save"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:9724: result: $cf_cv_gnu_source" >&5
+echo "$as_me:10127: result: $cf_cv_gnu_source" >&5
echo "${ECHO_T}$cf_cv_gnu_source" >&6
if test "$cf_cv_gnu_source" = yes
then
- echo "$as_me:9729: checking if we should also define _DEFAULT_SOURCE" >&5
+ echo "$as_me:10132: checking if we should also define _DEFAULT_SOURCE" >&5
echo $ECHO_N "checking if we should also define _DEFAULT_SOURCE... $ECHO_C" >&6
if test "${cf_cv_default_source+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}-D_GNU_SOURCE"
- cat >conftest.$ac_ext <<_ACEOF
-#line 9739 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 10142 "configure"
#include "confdefs.h"
#include <sys/types.h>
int
main (void)
{
#ifdef _DEFAULT_SOURCE
#error expected _DEFAULT_SOURCE to be undefined
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9754: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10157: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:9757: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:9760: \"$ac_try\"") >&5
+ echo "$as_me:10160: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:10163: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:9763: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:10166: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_default_source=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_default_source=yes
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:9774: result: $cf_cv_default_source" >&5
+echo "$as_me:10177: result: $cf_cv_default_source" >&5
echo "${ECHO_T}$cf_cv_default_source" >&6
if test "$cf_cv_default_source" = yes
then
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}-D_DEFAULT_SOURCE"
fi
fi
fi
fi
;;
(minix*)
cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this...
;;
(mirbsd*)
# setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <sys/select.h> and other headers which use u_int / u_short types
cf_XOPEN_SOURCE=
if test "$cf_cv_posix_visible" = no; then
cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE
cf_save_CFLAGS="$CFLAGS"
cf_save_CPPFLAGS="$CPPFLAGS"
cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \
sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'`
cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \
sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'`
-echo "$as_me:9811: checking if we should define _POSIX_C_SOURCE" >&5
+echo "$as_me:10214: checking if we should define _POSIX_C_SOURCE" >&5
echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6
if test "${cf_cv_posix_c_source+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-echo "${as_me:-configure}:9817: testing if the symbol is already defined go no further ..." 1>&5
+echo "${as_me:-configure}:10220: testing if the symbol is already defined go no further ..." 1>&5
- cat >conftest.$ac_ext <<_ACEOF
-#line 9820 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 10223 "configure"
#include "confdefs.h"
#include <sys/types.h>
int
main (void)
{
#ifndef _POSIX_C_SOURCE
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9835: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10238: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:9838: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:9841: \"$ac_try\"") >&5
+ echo "$as_me:10241: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:10244: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:9844: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:10247: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_posix_c_source=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_want_posix_source=no
case .$cf_POSIX_C_SOURCE in
(.[12]??*)
cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
;;
(.2)
cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
cf_want_posix_source=yes
;;
(.*)
cf_want_posix_source=yes
;;
esac
if test "$cf_want_posix_source" = yes ; then
- cat >conftest.$ac_ext <<_ACEOF
-#line 9865 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 10268 "configure"
#include "confdefs.h"
#include <sys/types.h>
int
main (void)
{
#ifdef _POSIX_SOURCE
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9880: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10283: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:9883: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:9886: \"$ac_try\"") >&5
+ echo "$as_me:10286: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:10289: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:9889: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:10292: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
:
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "${as_me:-configure}:9900: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5
+echo "${as_me:-configure}:10303: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5
CFLAGS="$cf_trim_CFLAGS"
CPPFLAGS="$cf_trim_CPPFLAGS"
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}$cf_cv_posix_c_source"
-echo "${as_me:-configure}:9908: testing if the second compile does not leave our definition intact error ..." 1>&5
+echo "${as_me:-configure}:10311: testing if the second compile does not leave our definition intact error ..." 1>&5
- cat >conftest.$ac_ext <<_ACEOF
-#line 9911 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 10314 "configure"
#include "confdefs.h"
#include <sys/types.h>
int
main (void)
{
#ifndef _POSIX_C_SOURCE
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9926: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10329: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:9929: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:9932: \"$ac_try\"") >&5
+ echo "$as_me:10332: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:10335: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:9935: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:10338: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
:
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_posix_c_source=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
CFLAGS="$cf_save_CFLAGS"
CPPFLAGS="$cf_save_CPPFLAGS"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:9951: result: $cf_cv_posix_c_source" >&5
+echo "$as_me:10354: result: $cf_cv_posix_c_source" >&5
echo "${ECHO_T}$cf_cv_posix_c_source" >&6
if test "$cf_cv_posix_c_source" != no ; then
CFLAGS="$cf_trim_CFLAGS"
CPPFLAGS="$cf_trim_CPPFLAGS"
cf_fix_cppflags=no
cf_new_cflags=
cf_new_cppflags=
cf_new_extra_cppflags=
for cf_add_cflags in $cf_cv_posix_c_source
do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
(no)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=yes
- if test $cf_fix_cppflags = yes ; then
+ if test "$cf_fix_cppflags" = yes ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
elif test "${cf_tst_cflags}" = "\"'" ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
fi
;;
esac
case "$CPPFLAGS" in
(*$cf_add_cflags)
;;
(*)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
CPPFLAGS=`echo "$CPPFLAGS" | \
sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
;;
esac
test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
;;
esac
;;
(*)
test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
;;
esac
;;
(yes)
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=no
;;
esac
done
if test -n "$cf_new_cflags" ; then
test -n "$CFLAGS" && CFLAGS="$CFLAGS "
CFLAGS="${CFLAGS}$cf_new_cflags"
fi
if test -n "$cf_new_cppflags" ; then
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
fi
if test -n "$cf_new_extra_cppflags" ; then
test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
fi
fi
fi # cf_cv_posix_visible
;;
(netbsd*)
cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
;;
(openbsd[4-9]*)
# setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw
cf_xopen_source="-D_BSD_SOURCE"
cf_XOPEN_SOURCE=600
;;
(openbsd*)
# setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
;;
(osf[45]*)
cf_xopen_source="-D_OSF_SOURCE"
;;
(nto-qnx*)
cf_xopen_source="-D_QNX_SOURCE"
;;
(sco*)
# setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
;;
(solaris2.*)
cf_xopen_source="-D__EXTENSIONS__"
cf_cv_xopen_source=broken
;;
(sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2)
cf_XOPEN_SOURCE=
cf_POSIX_C_SOURCE=
;;
(*)
-echo "$as_me:10091: checking if we should define _XOPEN_SOURCE" >&5
+echo "$as_me:10494: checking if we should define _XOPEN_SOURCE" >&5
echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6
if test "${cf_cv_xopen_source+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 10098 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 10501 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
int
main (void)
{
#ifndef _XOPEN_SOURCE
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10117: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10520: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:10120: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:10123: \"$ac_try\"") >&5
+ echo "$as_me:10523: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:10526: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:10126: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:10529: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_xopen_source=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_save="$CPPFLAGS"
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
- cat >conftest.$ac_ext <<_ACEOF
-#line 10138 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 10541 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
int
main (void)
{
#ifdef _XOPEN_SOURCE
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10157: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10560: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:10160: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:10163: \"$ac_try\"") >&5
+ echo "$as_me:10563: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:10566: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:10166: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:10569: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_xopen_source=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_xopen_source=$cf_XOPEN_SOURCE
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
CPPFLAGS="$cf_save"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:10181: result: $cf_cv_xopen_source" >&5
+echo "$as_me:10584: result: $cf_cv_xopen_source" >&5
echo "${ECHO_T}$cf_cv_xopen_source" >&6
if test "$cf_cv_xopen_source" != no ; then
CFLAGS=`echo "$CFLAGS" | \
sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'`
CPPFLAGS=`echo "$CPPFLAGS" | \
sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'`
cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source"
cf_fix_cppflags=no
cf_new_cflags=
cf_new_cppflags=
cf_new_extra_cppflags=
for cf_add_cflags in $cf_temp_xopen_source
do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
(no)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=yes
- if test $cf_fix_cppflags = yes ; then
+ if test "$cf_fix_cppflags" = yes ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
elif test "${cf_tst_cflags}" = "\"'" ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
fi
;;
esac
case "$CPPFLAGS" in
(*$cf_add_cflags)
;;
(*)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
CPPFLAGS=`echo "$CPPFLAGS" | \
sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
;;
esac
test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
;;
esac
;;
(*)
test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
;;
esac
;;
(yes)
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=no
;;
esac
done
if test -n "$cf_new_cflags" ; then
test -n "$CFLAGS" && CFLAGS="$CFLAGS "
CFLAGS="${CFLAGS}$cf_new_cflags"
fi
if test -n "$cf_new_cppflags" ; then
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
fi
if test -n "$cf_new_extra_cppflags" ; then
test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
fi
fi
if test "$cf_cv_posix_visible" = no; then
cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE
cf_save_CFLAGS="$CFLAGS"
cf_save_CPPFLAGS="$CPPFLAGS"
cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \
sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'`
cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \
sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'`
-echo "$as_me:10311: checking if we should define _POSIX_C_SOURCE" >&5
+echo "$as_me:10714: checking if we should define _POSIX_C_SOURCE" >&5
echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6
if test "${cf_cv_posix_c_source+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-echo "${as_me:-configure}:10317: testing if the symbol is already defined go no further ..." 1>&5
+echo "${as_me:-configure}:10720: testing if the symbol is already defined go no further ..." 1>&5
- cat >conftest.$ac_ext <<_ACEOF
-#line 10320 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 10723 "configure"
#include "confdefs.h"
#include <sys/types.h>
int
main (void)
{
#ifndef _POSIX_C_SOURCE
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10335: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10738: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:10338: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:10341: \"$ac_try\"") >&5
+ echo "$as_me:10741: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:10744: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:10344: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:10747: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_posix_c_source=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_want_posix_source=no
case .$cf_POSIX_C_SOURCE in
(.[12]??*)
cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
;;
(.2)
cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
cf_want_posix_source=yes
;;
(.*)
cf_want_posix_source=yes
;;
esac
if test "$cf_want_posix_source" = yes ; then
- cat >conftest.$ac_ext <<_ACEOF
-#line 10365 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 10768 "configure"
#include "confdefs.h"
#include <sys/types.h>
int
main (void)
{
#ifdef _POSIX_SOURCE
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10380: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10783: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:10383: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:10386: \"$ac_try\"") >&5
+ echo "$as_me:10786: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:10789: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:10389: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:10792: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
:
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "${as_me:-configure}:10400: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5
+echo "${as_me:-configure}:10803: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5
CFLAGS="$cf_trim_CFLAGS"
CPPFLAGS="$cf_trim_CPPFLAGS"
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}$cf_cv_posix_c_source"
-echo "${as_me:-configure}:10408: testing if the second compile does not leave our definition intact error ..." 1>&5
+echo "${as_me:-configure}:10811: testing if the second compile does not leave our definition intact error ..." 1>&5
- cat >conftest.$ac_ext <<_ACEOF
-#line 10411 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 10814 "configure"
#include "confdefs.h"
#include <sys/types.h>
int
main (void)
{
#ifndef _POSIX_C_SOURCE
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10426: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10829: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:10429: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:10432: \"$ac_try\"") >&5
+ echo "$as_me:10832: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:10835: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:10435: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:10838: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
:
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_posix_c_source=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
CFLAGS="$cf_save_CFLAGS"
CPPFLAGS="$cf_save_CPPFLAGS"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:10451: result: $cf_cv_posix_c_source" >&5
+echo "$as_me:10854: result: $cf_cv_posix_c_source" >&5
echo "${ECHO_T}$cf_cv_posix_c_source" >&6
if test "$cf_cv_posix_c_source" != no ; then
CFLAGS="$cf_trim_CFLAGS"
CPPFLAGS="$cf_trim_CPPFLAGS"
cf_fix_cppflags=no
cf_new_cflags=
cf_new_cppflags=
cf_new_extra_cppflags=
for cf_add_cflags in $cf_cv_posix_c_source
do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
(no)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=yes
- if test $cf_fix_cppflags = yes ; then
+ if test "$cf_fix_cppflags" = yes ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
elif test "${cf_tst_cflags}" = "\"'" ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
fi
;;
esac
case "$CPPFLAGS" in
(*$cf_add_cflags)
;;
(*)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
CPPFLAGS=`echo "$CPPFLAGS" | \
sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
;;
esac
test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
;;
esac
;;
(*)
test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
;;
esac
;;
(yes)
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=no
;;
esac
done
if test -n "$cf_new_cflags" ; then
test -n "$CFLAGS" && CFLAGS="$CFLAGS "
CFLAGS="${CFLAGS}$cf_new_cflags"
fi
if test -n "$cf_new_cppflags" ; then
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
fi
if test -n "$cf_new_extra_cppflags" ; then
test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
fi
fi
fi # cf_cv_posix_visible
;;
esac
if test -n "$cf_xopen_source" ; then
cf_fix_cppflags=no
cf_new_cflags=
cf_new_cppflags=
cf_new_extra_cppflags=
for cf_add_cflags in $cf_xopen_source
do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
(no)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=yes
- if test $cf_fix_cppflags = yes ; then
+ if test "$cf_fix_cppflags" = yes ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
elif test "${cf_tst_cflags}" = "\"'" ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
fi
;;
esac
case "$CPPFLAGS" in
(*$cf_add_cflags)
;;
(*)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
CPPFLAGS=`echo "$CPPFLAGS" | \
sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
;;
esac
test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
;;
esac
;;
(*)
test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
;;
esac
;;
(yes)
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=no
;;
esac
done
if test -n "$cf_new_cflags" ; then
test -n "$verbose" && echo " add to \$CFLAGS $cf_new_cflags" 1>&6
-echo "${as_me:-configure}:10645: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5
+echo "${as_me:-configure}:11048: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5
test -n "$CFLAGS" && CFLAGS="$CFLAGS "
CFLAGS="${CFLAGS}$cf_new_cflags"
fi
if test -n "$cf_new_cppflags" ; then
test -n "$verbose" && echo " add to \$CPPFLAGS $cf_new_cppflags" 1>&6
-echo "${as_me:-configure}:10655: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5
+echo "${as_me:-configure}:11058: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
fi
if test -n "$cf_new_extra_cppflags" ; then
test -n "$verbose" && echo " add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6
-echo "${as_me:-configure}:10665: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5
+echo "${as_me:-configure}:11068: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5
test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
fi
fi
if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then
- echo "$as_me:10675: checking if _XOPEN_SOURCE really is set" >&5
+ echo "$as_me:11078: checking if _XOPEN_SOURCE really is set" >&5
echo $ECHO_N "checking if _XOPEN_SOURCE really is set... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-#line 10678 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 11081 "configure"
#include "confdefs.h"
#include <stdlib.h>
int
main (void)
{
#ifndef _XOPEN_SOURCE
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10693: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11096: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:10696: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:10699: \"$ac_try\"") >&5
+ echo "$as_me:11099: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:11102: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:10702: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:11105: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_XOPEN_SOURCE_set=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_XOPEN_SOURCE_set=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- echo "$as_me:10711: result: $cf_XOPEN_SOURCE_set" >&5
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ echo "$as_me:11114: result: $cf_XOPEN_SOURCE_set" >&5
echo "${ECHO_T}$cf_XOPEN_SOURCE_set" >&6
- if test $cf_XOPEN_SOURCE_set = yes
+ if test "$cf_XOPEN_SOURCE_set" = yes
then
- cat >conftest.$ac_ext <<_ACEOF
-#line 10716 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 11119 "configure"
#include "confdefs.h"
#include <stdlib.h>
int
main (void)
{
#if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10731: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11134: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:10734: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:10737: \"$ac_try\"") >&5
+ echo "$as_me:11137: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:11140: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:10740: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:11143: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_XOPEN_SOURCE_set_ok=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_XOPEN_SOURCE_set_ok=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- if test $cf_XOPEN_SOURCE_set_ok = no
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ if test "$cf_XOPEN_SOURCE_set_ok" = no
then
- { echo "$as_me:10751: WARNING: _XOPEN_SOURCE is lower than requested" >&5
+ { echo "$as_me:11154: WARNING: _XOPEN_SOURCE is lower than requested" >&5
echo "$as_me: WARNING: _XOPEN_SOURCE is lower than requested" >&2;}
fi
else
-echo "$as_me:10756: checking if we should define _XOPEN_SOURCE" >&5
+echo "$as_me:11159: checking if we should define _XOPEN_SOURCE" >&5
echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6
if test "${cf_cv_xopen_source+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 10763 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 11166 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
int
main (void)
{
#ifndef _XOPEN_SOURCE
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10782: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11185: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:10785: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:10788: \"$ac_try\"") >&5
+ echo "$as_me:11188: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:11191: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:10791: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:11194: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_xopen_source=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_save="$CPPFLAGS"
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
- cat >conftest.$ac_ext <<_ACEOF
-#line 10803 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 11206 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
int
main (void)
{
#ifdef _XOPEN_SOURCE
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10822: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11225: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:10825: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:10828: \"$ac_try\"") >&5
+ echo "$as_me:11228: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:11231: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:10831: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:11234: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_xopen_source=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_xopen_source=$cf_XOPEN_SOURCE
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
CPPFLAGS="$cf_save"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:10846: result: $cf_cv_xopen_source" >&5
+echo "$as_me:11249: result: $cf_cv_xopen_source" >&5
echo "${ECHO_T}$cf_cv_xopen_source" >&6
if test "$cf_cv_xopen_source" != no ; then
CFLAGS=`echo "$CFLAGS" | \
sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'`
CPPFLAGS=`echo "$CPPFLAGS" | \
sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'`
cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source"
cf_fix_cppflags=no
cf_new_cflags=
cf_new_cppflags=
cf_new_extra_cppflags=
for cf_add_cflags in $cf_temp_xopen_source
do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
(no)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=yes
- if test $cf_fix_cppflags = yes ; then
+ if test "$cf_fix_cppflags" = yes ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
elif test "${cf_tst_cflags}" = "\"'" ; then
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
continue
fi
;;
esac
case "$CPPFLAGS" in
(*$cf_add_cflags)
;;
(*)
- case $cf_add_cflags in
+ case "$cf_add_cflags" in
(-D*)
cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
CPPFLAGS=`echo "$CPPFLAGS" | \
sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
;;
esac
test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
;;
esac
;;
(*)
test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
;;
esac
;;
(yes)
test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
&& test -z "${cf_tst_cflags}" \
&& cf_fix_cppflags=no
;;
esac
done
if test -n "$cf_new_cflags" ; then
test -n "$CFLAGS" && CFLAGS="$CFLAGS "
CFLAGS="${CFLAGS}$cf_new_cflags"
fi
if test -n "$cf_new_cppflags" ; then
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
fi
if test -n "$cf_new_extra_cppflags" ; then
test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
fi
fi
fi
fi
fi # cf_cv_posix_visible
CPPFLAGS_after_XOPEN="$CPPFLAGS"
# Work around breakage on OS X
-echo "$as_me:10969: checking if SIGWINCH is defined" >&5
+echo "$as_me:11372: checking if SIGWINCH is defined" >&5
echo $ECHO_N "checking if SIGWINCH is defined... $ECHO_C" >&6
if test "${cf_cv_define_sigwinch+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 10976 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 11379 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/signal.h>
int
main (void)
{
-int x = SIGWINCH
+int x = SIGWINCH; (void)x
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10991: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11394: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:10994: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:10997: \"$ac_try\"") >&5
+ echo "$as_me:11397: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:11400: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11000: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:11403: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_define_sigwinch=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 11007 "configure"
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 11410 "configure"
#include "confdefs.h"
#undef _XOPEN_SOURCE
#undef _POSIX_SOURCE
#undef _POSIX_C_SOURCE
#include <sys/types.h>
#include <sys/signal.h>
int
main (void)
{
-int x = SIGWINCH
+int x = SIGWINCH; (void)x
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:11025: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11428: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:11028: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:11031: \"$ac_try\"") >&5
+ echo "$as_me:11431: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:11434: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11034: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:11437: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_define_sigwinch=maybe
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_define_sigwinch=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:11048: result: $cf_cv_define_sigwinch" >&5
+echo "$as_me:11451: result: $cf_cv_define_sigwinch" >&5
echo "${ECHO_T}$cf_cv_define_sigwinch" >&6
if test "$cf_cv_define_sigwinch" = maybe ; then
-echo "$as_me:11052: checking for actual SIGWINCH definition" >&5
+echo "$as_me:11455: checking for actual SIGWINCH definition" >&5
echo $ECHO_N "checking for actual SIGWINCH definition... $ECHO_C" >&6
if test "${cf_cv_fixup_sigwinch+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cf_cv_fixup_sigwinch=unknown
cf_sigwinch=32
-while test $cf_sigwinch != 1
+while test "$cf_sigwinch" != 1
do
- cat >conftest.$ac_ext <<_ACEOF
-#line 11063 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 11466 "configure"
#include "confdefs.h"
#undef _XOPEN_SOURCE
#undef _POSIX_SOURCE
#undef _POSIX_C_SOURCE
#include <sys/types.h>
#include <sys/signal.h>
int
main (void)
{
#if SIGWINCH != $cf_sigwinch
make an error
#endif
-int x = SIGWINCH
+int x = SIGWINCH; (void)x
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:11085: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11488: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:11088: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:11091: \"$ac_try\"") >&5
+ echo "$as_me:11491: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:11494: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11094: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:11497: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_fixup_sigwinch=$cf_sigwinch
break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
-cf_sigwinch=`expr $cf_sigwinch - 1`
+cf_sigwinch="`expr "$cf_sigwinch" - 1`"
done
fi
-echo "$as_me:11108: result: $cf_cv_fixup_sigwinch" >&5
+echo "$as_me:11511: result: $cf_cv_fixup_sigwinch" >&5
echo "${ECHO_T}$cf_cv_fixup_sigwinch" >&6
if test "$cf_cv_fixup_sigwinch" != unknown ; then
CPPFLAGS="$CPPFLAGS -DSIGWINCH=$cf_cv_fixup_sigwinch"
fi
fi
# Checks for CODESET support.
-echo "$as_me:11118: checking for nl_langinfo and CODESET" >&5
+echo "$as_me:11521: checking for nl_langinfo and CODESET" >&5
echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6
if test "${am_cv_langinfo_codeset+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 11124 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 11527 "configure"
#include "confdefs.h"
#include <langinfo.h>
int
main (void)
{
-char* cs = nl_langinfo(CODESET);
+char* cs = nl_langinfo(CODESET); (void)cs
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11136: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:11539: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:11139: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:11142: \"$ac_try\"") >&5
+ echo "$as_me:11542: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:11545: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11145: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:11548: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
am_cv_langinfo_codeset=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
am_cv_langinfo_codeset=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:11156: result: $am_cv_langinfo_codeset" >&5
+echo "$as_me:11559: result: $am_cv_langinfo_codeset" >&5
echo "${ECHO_T}$am_cv_langinfo_codeset" >&6
- if test $am_cv_langinfo_codeset = yes; then
+ if test "$am_cv_langinfo_codeset" = yes; then
cat >>confdefs.h <<\EOF
#define HAVE_LANGINFO_CODESET 1
EOF
fi
# use these variables to work around a defect in gcc's fixincludes.
NCURSES_OK_WCHAR_T=
NCURSES_OK_WINT_T=
-echo "$as_me:11170: checking if you want wide-character code" >&5
+echo "$as_me:11573: checking if you want wide-character code" >&5
echo $ECHO_N "checking if you want wide-character code... $ECHO_C" >&6
# Check whether --enable-widec or --disable-widec was given.
if test "${enable_widec+set}" = set; then
enableval="$enable_widec"
with_widec=$enableval
else
with_widec=no
fi;
-echo "$as_me:11180: result: $with_widec" >&5
+echo "$as_me:11583: result: $with_widec" >&5
echo "${ECHO_T}$with_widec" >&6
NCURSES_WCWIDTH_GRAPHICS=1
if test "x$with_widec" = xyes ; then
if test "x$disable_lib_suffixes" = xno ; then
LIB_SUFFIX="w${LIB_SUFFIX}"
fi
cat >>confdefs.h <<\EOF
#define USE_WIDEC_SUPPORT 1
EOF
cat >>confdefs.h <<\EOF
#define NCURSES_WIDECHAR 1
EOF
for ac_header in \
wchar.h \
wctype.h \
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:11204: checking for $ac_header" >&5
+echo "$as_me:11607: checking for $ac_header" >&5
echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
if eval "test \"\${$as_ac_Header+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 11210 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 11613 "configure"
#include "confdefs.h"
#include <$ac_header>
_ACEOF
-if { (eval echo "$as_me:11214: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:11617: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:11220: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
+ echo "$as_me:11623: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
else
ac_cpp_err=
fi
else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
eval "$as_ac_Header=yes"
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ cat "conftest.$ac_ext" >&5
eval "$as_ac_Header=no"
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
fi
-echo "$as_me:11239: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+echo "$as_me:11642: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
cat >>confdefs.h <<EOF
#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
EOF
fi
done
-echo "$as_me:11249: checking if wchar.h can be used as is" >&5
+echo "$as_me:11652: checking if wchar.h can be used as is" >&5
echo $ECHO_N "checking if wchar.h can be used as is... $ECHO_C" >&6
if test "${cf_cv_wchar_h_okay+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-cat >conftest.$ac_ext <<_ACEOF
-#line 11256 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 11659 "configure"
#include "confdefs.h"
#include <stdlib.h>
#ifdef HAVE_WCHAR_H
#include <wchar.h>
#endif
#ifdef HAVE_WCTYPE_H
#include <wctype.h>
#endif
int
main (void)
{
wint_t foo = 0;
int bar = iswpunct(foo)
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:11278: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11681: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:11281: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:11284: \"$ac_try\"") >&5
+ echo "$as_me:11684: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:11687: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11287: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:11690: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_wchar_h_okay=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_wchar_h_okay=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:11297: result: $cf_cv_wchar_h_okay" >&5
+echo "$as_me:11700: result: $cf_cv_wchar_h_okay" >&5
echo "${ECHO_T}$cf_cv_wchar_h_okay" >&6
-if test $cf_cv_wchar_h_okay = no
+if test "$cf_cv_wchar_h_okay" = no
then
-echo "$as_me:11303: checking if we must define _XOPEN_SOURCE_EXTENDED" >&5
+echo "$as_me:11706: checking if we must define _XOPEN_SOURCE_EXTENDED" >&5
echo $ECHO_N "checking if we must define _XOPEN_SOURCE_EXTENDED... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line 11306 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 11709 "configure"
#include "confdefs.h"
#include <sys/types.h>
int
main (void)
{
#ifndef _XOPEN_SOURCE_EXTENDED
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:11322: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11725: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:11325: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:11328: \"$ac_try\"") >&5
+ echo "$as_me:11728: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:11731: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11331: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:11734: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_result=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_result=yes
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:11340: result: $cf_result" >&5
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+echo "$as_me:11743: result: $cf_result" >&5
echo "${ECHO_T}$cf_result" >&6
if test "$cf_result" = yes ; then
CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
elif test "x" != "x" ; then
- echo "$as_me:11346: checking checking for compatible value versus " >&5
+ echo "$as_me:11749: checking checking for compatible value versus " >&5
echo $ECHO_N "checking checking for compatible value versus ... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-#line 11349 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 11752 "configure"
#include "confdefs.h"
#include <sys/types.h>
int
main (void)
{
#if _XOPEN_SOURCE_EXTENDED- < 0
make an error
#endif
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:11365: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11768: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:11368: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:11371: \"$ac_try\"") >&5
+ echo "$as_me:11771: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:11774: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11374: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:11777: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_result=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_result=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- echo "$as_me:11383: result: $cf_result" >&5
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ echo "$as_me:11786: result: $cf_result" >&5
echo "${ECHO_T}$cf_result" >&6
if test "$cf_result" = no ; then
# perhaps we can override it - try...
CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED="
fi
fi
fi
-echo "$as_me:11393: checking if wcwidth agrees graphics are single-width" >&5
+echo "$as_me:11796: checking if wcwidth agrees graphics are single-width" >&5
echo $ECHO_N "checking if wcwidth agrees graphics are single-width... $ECHO_C" >&6
if test "${cf_cv_wcwidth_graphics+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.in <<CF_EOF
- VT100 symbols
0x250c upper left corner
0x2514 lower left corner
0x2510 upper right corner
0x2518 lower right corner
0x251c tee pointing left
0x2524 tee pointing right
0x2534 tee pointing up
0x252c tee pointing down
0x2500 horizontal line
0x2502 vertical line
0x253c large plus or crossover
0x23ba scan line 1
0x23bd scan line 9
0x25c6 diamond
0x2592 checker board (stipple)
0x00b0 degree symbol
0x00b1 plus/minus
0x00b7 bullet
- Teletype 5410v1 symbols
0x2190 arrow pointing left
0x2192 arrow pointing right
0x2193 arrow pointing down
0x2191 arrow pointing up
0x2592 board of squares
0x2603 lantern symbol
0x25ae solid square block
- these defaults were invented for ncurses
0x23bb scan line 3
0x23bc scan line 7
0x2264 less-than-or-equal-to
0x2265 greater-than-or-equal-to
0x03c0 greek pi
0x2260 not-equal
0x00a3 pound-sterling symbol
- thick-line-drawing
0x250f upper left corner
0x2517 lower left corner
0x2513 upper right corner
0x251b lower right corner
0x2523 tee pointing left
0x252b tee pointing right
0x253b tee pointing up
0x2533 tee pointing down
0x2501 horizontal line
0x2503 vertical line
0x254b large plus or crossover
- double-line-drawing
0x2554 upper left corner
0x255a lower left corner
0x2557 upper right corner
0x255d lower right corner
0x2563 tee pointing left
0x2560 tee pointing right
0x2569 tee pointing up
0x2566 tee pointing down
0x2550 horizontal line
0x2551 vertical line
0x256c large plus or crossover
CF_EOF
if test "$cross_compiling" = yes; then
cf_cv_wcwidth_graphics=unknown
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 11464 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 11867 "configure"
#include "confdefs.h"
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
#define MY_LEN 80
int
main(void)
{
FILE *fp;
int value;
char buffer[MY_LEN + 1];
char notes[MY_LEN + 1];
int totals = 0;
int passed = 0;
if (setlocale(LC_ALL, "en_US.UTF8") ||
setlocale(LC_ALL, "en_US.UTF-8") ||
setlocale(LC_ALL, "en_US.utf8") ||
setlocale(LC_ALL, "en_US.utf-8")) {
if ((fp = fopen("conftest.in", "r")) != 0) {
while (fgets(buffer, MY_LEN, fp) != 0) {
if (*buffer == '-') {
- fprintf(stderr, "\t%s", buffer);
+ fprintf(stderr, "\\t%s", buffer);
} else if (sscanf(buffer, "%x %s", &value, notes) == 2) {
++totals;
if (wcwidth(value) == 1)
++passed;
- fprintf(stderr, "%d\t%s", wcwidth(value), buffer);
+ fprintf(stderr, "%d\\t%s", wcwidth(value), buffer);
} else {
- fprintf(stderr, "?\t%s", buffer);
+ fprintf(stderr, "?\\t%s", buffer);
}
}
}
}
- fprintf(stderr, "%d/%d passed wcwidth/graphics check\n", passed, totals);
+ fprintf(stderr, "%d/%d passed wcwidth/graphics check\\n", passed, totals);
return (totals == passed) ? 0 : 1;
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:11508: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:11911: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:11511: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:11513: \"$ac_try\"") >&5
+ echo "$as_me:11914: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:11916: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11516: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:11919: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_wcwidth_graphics=yes
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_wcwidth_graphics=no
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
fi
-echo "$as_me:11529: result: $cf_cv_wcwidth_graphics" >&5
+echo "$as_me:11932: result: $cf_cv_wcwidth_graphics" >&5
echo "${ECHO_T}$cf_cv_wcwidth_graphics" >&6
test "$cf_cv_wcwidth_graphics" = no && NCURSES_WCWIDTH_GRAPHICS=0
# with_overwrite=no
NCURSES_CH_T=cchar_t
for ac_func in putwc btowc wctob mbtowc wctomb mblen mbrlen mbrtowc wcsrtombs mbsrtowcs wcstombs mbstowcs
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:11540: checking for $ac_func" >&5
+echo "$as_me:11943: checking for $ac_func" >&5
echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 11546 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 11949 "configure"
#include "confdefs.h"
#define $ac_func autoconf_temporary
#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
#undef $ac_func
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func (void);
int
main (void)
{
/* The GNU C library defines stubs for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
#error found stub for $ac_func
#endif
return $ac_func ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11577: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:11980: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:11580: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:11583: \"$ac_try\"") >&5
+ echo "$as_me:11983: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:11986: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11586: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:11989: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
eval "$as_ac_var=no"
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:11596: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+echo "$as_me:11999: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
cat >>confdefs.h <<EOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
EOF
fi
done
if test "x$ac_cv_func_putwc" != xyes ; then
-echo "$as_me:11608: checking for multibyte character support" >&5
+echo "$as_me:12011: checking for multibyte character support" >&5
echo $ECHO_N "checking for multibyte character support... $ECHO_C" >&6
if test "${cf_cv_utf8_lib+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cf_save_LIBS="$LIBS"
- cat >conftest.$ac_ext <<_ACEOF
-#line 11616 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 12019 "configure"
#include "confdefs.h"
#include <stdlib.h>
int
main (void)
{
putwc(0,0);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11629: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:12032: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:11632: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:11635: \"$ac_try\"") >&5
+ echo "$as_me:12035: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:12038: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11638: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12041: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_utf8_lib=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
# If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these
# will be set on completion of the AC_TRY_LINK below.
cf_cv_header_path_utf8=
cf_cv_library_path_utf8=
-echo "${as_me:-configure}:11650: testing Starting FIND_LINKAGE(utf8,) ..." 1>&5
+echo "${as_me:-configure}:12053: testing Starting FIND_LINKAGE(utf8,) ..." 1>&5
cf_save_LIBS="$LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 11655 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 12058 "configure"
#include "confdefs.h"
#include <libutf8.h>
int
main (void)
{
putwc(0,0);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11668: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:12071: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:11671: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:11674: \"$ac_try\"") >&5
+ echo "$as_me:12074: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:12077: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11677: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12080: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_find_linkage_utf8=yes
cf_cv_header_path_utf8=/usr/include
cf_cv_library_path_utf8=/usr/lib
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
LIBS="-lutf8 $cf_save_LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 11691 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 12094 "configure"
#include "confdefs.h"
#include <libutf8.h>
int
main (void)
{
putwc(0,0);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11704: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:12107: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:11707: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:11710: \"$ac_try\"") >&5
+ echo "$as_me:12110: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:12113: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11713: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12116: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_find_linkage_utf8=yes
cf_cv_header_path_utf8=/usr/include
cf_cv_library_path_utf8=/usr/lib
cf_cv_library_file_utf8="-lutf8"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_find_linkage_utf8=no
LIBS="$cf_save_LIBS"
test -n "$verbose" && echo " find linkage for utf8 library" 1>&6
-echo "${as_me:-configure}:11730: testing find linkage for utf8 library ..." 1>&5
+echo "${as_me:-configure}:12133: testing find linkage for utf8 library ..." 1>&5
-echo "${as_me:-configure}:11732: testing Searching for headers in FIND_LINKAGE(utf8,) ..." 1>&5
+echo "${as_me:-configure}:12135: testing Searching for headers in FIND_LINKAGE(utf8,) ..." 1>&5
cf_save_CPPFLAGS="$CPPFLAGS"
cf_test_CPPFLAGS="$CPPFLAGS"
cf_search=
# collect the current set of include-directories from compiler flags
cf_header_path_list=""
if test -n "${CFLAGS}${CPPFLAGS}" ; then
for cf_header_path in $CPPFLAGS $CFLAGS
do
- case $cf_header_path in
+ case "$cf_header_path" in
(-I*)
cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'`
test "x$cf_header_path" != "xNONE" && \
test -d "$cf_header_path" && \
{
test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path"
- test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include"
- test -d $cf_header_path/include/utf8 && cf_search="$cf_search $cf_header_path/include/utf8"
- test -d $cf_header_path/include/utf8/include && cf_search="$cf_search $cf_header_path/include/utf8/include"
- test -d $cf_header_path/utf8/include && cf_search="$cf_search $cf_header_path/utf8/include"
- test -d $cf_header_path/utf8/include/utf8 && cf_search="$cf_search $cf_header_path/utf8/include/utf8"
+ test -d "$cf_header_path/include" && cf_search="$cf_search $cf_header_path/include"
+ test -d "$cf_header_path/include/utf8" && cf_search="$cf_search $cf_header_path/include/utf8"
+ test -d "$cf_header_path/include/utf8/include" && cf_search="$cf_search $cf_header_path/include/utf8/include"
+ test -d "$cf_header_path/utf8/include" && cf_search="$cf_search $cf_header_path/utf8/include"
+ test -d "$cf_header_path/utf8/include/utf8" && cf_search="$cf_search $cf_header_path/utf8/include/utf8"
}
cf_header_path_list="$cf_header_path_list $cf_search"
;;
esac
done
fi
# add the variations for the package we are looking for
cf_search=
test "x$prefix" != "xNONE" && \
test -d "$prefix" && \
{
test -n "$verbose" && echo " ... testing for include-directories under $prefix"
- test -d $prefix/include && cf_search="$cf_search $prefix/include"
- test -d $prefix/include/utf8 && cf_search="$cf_search $prefix/include/utf8"
- test -d $prefix/include/utf8/include && cf_search="$cf_search $prefix/include/utf8/include"
- test -d $prefix/utf8/include && cf_search="$cf_search $prefix/utf8/include"
- test -d $prefix/utf8/include/utf8 && cf_search="$cf_search $prefix/utf8/include/utf8"
+ test -d "$prefix/include" && cf_search="$cf_search $prefix/include"
+ test -d "$prefix/include/utf8" && cf_search="$cf_search $prefix/include/utf8"
+ test -d "$prefix/include/utf8/include" && cf_search="$cf_search $prefix/include/utf8/include"
+ test -d "$prefix/utf8/include" && cf_search="$cf_search $prefix/utf8/include"
+ test -d "$prefix/utf8/include/utf8" && cf_search="$cf_search $prefix/utf8/include/utf8"
}
for cf_subdir_prefix in \
/usr \
/usr/local \
/usr/pkg \
/opt \
/opt/local \
$HOME
do
test "x$cf_subdir_prefix" != "x$prefix" && \
test -d "$cf_subdir_prefix" && \
-(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && {
+{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && {
test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix"
- test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include"
- test -d $cf_subdir_prefix/include/utf8 && cf_search="$cf_search $cf_subdir_prefix/include/utf8"
- test -d $cf_subdir_prefix/include/utf8/include && cf_search="$cf_search $cf_subdir_prefix/include/utf8/include"
- test -d $cf_subdir_prefix/utf8/include && cf_search="$cf_search $cf_subdir_prefix/utf8/include"
- test -d $cf_subdir_prefix/utf8/include/utf8 && cf_search="$cf_search $cf_subdir_prefix/utf8/include/utf8"
+ test -d "$cf_subdir_prefix/include" && cf_search="$cf_search $cf_subdir_prefix/include"
+ test -d "$cf_subdir_prefix/include/utf8" && cf_search="$cf_search $cf_subdir_prefix/include/utf8"
+ test -d "$cf_subdir_prefix/include/utf8/include" && cf_search="$cf_search $cf_subdir_prefix/include/utf8/include"
+ test -d "$cf_subdir_prefix/utf8/include" && cf_search="$cf_search $cf_subdir_prefix/utf8/include"
+ test -d "$cf_subdir_prefix/utf8/include/utf8" && cf_search="$cf_search $cf_subdir_prefix/utf8/include/utf8"
}
done
test "$includedir" != NONE && \
test "$includedir" != "/usr/include" && \
test -d "$includedir" && {
- test -d $includedir && cf_search="$cf_search $includedir"
- test -d $includedir/utf8 && cf_search="$cf_search $includedir/utf8"
+ test -d "$includedir" && cf_search="$cf_search $includedir"
+ test -d "$includedir/utf8" && cf_search="$cf_search $includedir/utf8"
}
test "$oldincludedir" != NONE && \
test "$oldincludedir" != "/usr/include" && \
test -d "$oldincludedir" && {
- test -d $oldincludedir && cf_search="$cf_search $oldincludedir"
- test -d $oldincludedir/utf8 && cf_search="$cf_search $oldincludedir/utf8"
+ test -d "$oldincludedir" && cf_search="$cf_search $oldincludedir"
+ test -d "$oldincludedir/utf8" && cf_search="$cf_search $oldincludedir/utf8"
}
cf_search="$cf_search $cf_header_path_list"
for cf_cv_header_path_utf8 in $cf_search
do
- if test -d $cf_cv_header_path_utf8 ; then
+ if test -d "$cf_cv_header_path_utf8" ; then
test -n "$verbose" && echo " ... testing $cf_cv_header_path_utf8" 1>&6
-echo "${as_me:-configure}:11823: testing ... testing $cf_cv_header_path_utf8 ..." 1>&5
+echo "${as_me:-configure}:12226: testing ... testing $cf_cv_header_path_utf8 ..." 1>&5
CPPFLAGS="$cf_save_CPPFLAGS"
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}-I$cf_cv_header_path_utf8"
- cat >conftest.$ac_ext <<_ACEOF
-#line 11831 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 12234 "configure"
#include "confdefs.h"
#include <libutf8.h>
int
main (void)
{
putwc(0,0);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:11844: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12247: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:11847: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:11850: \"$ac_try\"") >&5
+ echo "$as_me:12250: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:12253: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11853: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12256: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
test -n "$verbose" && echo " ... found utf8 headers in $cf_cv_header_path_utf8" 1>&6
-echo "${as_me:-configure}:11858: testing ... found utf8 headers in $cf_cv_header_path_utf8 ..." 1>&5
+echo "${as_me:-configure}:12261: testing ... found utf8 headers in $cf_cv_header_path_utf8 ..." 1>&5
cf_cv_find_linkage_utf8=maybe
cf_test_CPPFLAGS="$CPPFLAGS"
break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
CPPFLAGS="$cf_save_CPPFLAGS"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
done
if test "$cf_cv_find_linkage_utf8" = maybe ; then
-echo "${as_me:-configure}:11876: testing Searching for utf8 library in FIND_LINKAGE(utf8,) ..." 1>&5
+echo "${as_me:-configure}:12279: testing Searching for utf8 library in FIND_LINKAGE(utf8,) ..." 1>&5
cf_save_LIBS="$LIBS"
cf_save_LDFLAGS="$LDFLAGS"
if test "$cf_cv_find_linkage_utf8" != yes ; then
cf_search=
cf_library_path_list=""
if test -n "${LDFLAGS}${LIBS}" ; then
for cf_library_path in $LDFLAGS $LIBS
do
- case $cf_library_path in
+ case "$cf_library_path" in
(-L*)
cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'`
test "x$cf_library_path" != "xNONE" && \
test -d "$cf_library_path" && \
{
test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path"
- test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib"
- test -d $cf_library_path/lib/utf8 && cf_search="$cf_search $cf_library_path/lib/utf8"
- test -d $cf_library_path/lib/utf8/lib && cf_search="$cf_search $cf_library_path/lib/utf8/lib"
- test -d $cf_library_path/utf8/lib && cf_search="$cf_search $cf_library_path/utf8/lib"
- test -d $cf_library_path/utf8/lib/utf8 && cf_search="$cf_search $cf_library_path/utf8/lib/utf8"
+ test -d "$cf_library_path/lib" && cf_search="$cf_search $cf_library_path/lib"
+ test -d "$cf_library_path/lib/utf8" && cf_search="$cf_search $cf_library_path/lib/utf8"
+ test -d "$cf_library_path/lib/utf8/lib" && cf_search="$cf_search $cf_library_path/lib/utf8/lib"
+ test -d "$cf_library_path/utf8/lib" && cf_search="$cf_search $cf_library_path/utf8/lib"
+ test -d "$cf_library_path/utf8/lib/utf8" && cf_search="$cf_search $cf_library_path/utf8/lib/utf8"
}
cf_library_path_list="$cf_library_path_list $cf_search"
;;
esac
done
fi
cf_search=
test "x$prefix" != "xNONE" && \
test -d "$prefix" && \
{
test -n "$verbose" && echo " ... testing for lib-directories under $prefix"
- test -d $prefix/lib && cf_search="$cf_search $prefix/lib"
- test -d $prefix/lib/utf8 && cf_search="$cf_search $prefix/lib/utf8"
- test -d $prefix/lib/utf8/lib && cf_search="$cf_search $prefix/lib/utf8/lib"
- test -d $prefix/utf8/lib && cf_search="$cf_search $prefix/utf8/lib"
- test -d $prefix/utf8/lib/utf8 && cf_search="$cf_search $prefix/utf8/lib/utf8"
+ test -d "$prefix/lib" && cf_search="$cf_search $prefix/lib"
+ test -d "$prefix/lib/utf8" && cf_search="$cf_search $prefix/lib/utf8"
+ test -d "$prefix/lib/utf8/lib" && cf_search="$cf_search $prefix/lib/utf8/lib"
+ test -d "$prefix/utf8/lib" && cf_search="$cf_search $prefix/utf8/lib"
+ test -d "$prefix/utf8/lib/utf8" && cf_search="$cf_search $prefix/utf8/lib/utf8"
}
for cf_subdir_prefix in \
/usr \
/usr/local \
/usr/pkg \
/opt \
/opt/local \
$HOME
do
test "x$cf_subdir_prefix" != "x$prefix" && \
test -d "$cf_subdir_prefix" && \
-(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && {
+{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && {
test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix"
- test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib"
- test -d $cf_subdir_prefix/lib/utf8 && cf_search="$cf_search $cf_subdir_prefix/lib/utf8"
- test -d $cf_subdir_prefix/lib/utf8/lib && cf_search="$cf_search $cf_subdir_prefix/lib/utf8/lib"
- test -d $cf_subdir_prefix/utf8/lib && cf_search="$cf_search $cf_subdir_prefix/utf8/lib"
- test -d $cf_subdir_prefix/utf8/lib/utf8 && cf_search="$cf_search $cf_subdir_prefix/utf8/lib/utf8"
+ test -d "$cf_subdir_prefix/lib" && cf_search="$cf_search $cf_subdir_prefix/lib"
+ test -d "$cf_subdir_prefix/lib/utf8" && cf_search="$cf_search $cf_subdir_prefix/lib/utf8"
+ test -d "$cf_subdir_prefix/lib/utf8/lib" && cf_search="$cf_search $cf_subdir_prefix/lib/utf8/lib"
+ test -d "$cf_subdir_prefix/utf8/lib" && cf_search="$cf_search $cf_subdir_prefix/utf8/lib"
+ test -d "$cf_subdir_prefix/utf8/lib/utf8" && cf_search="$cf_search $cf_subdir_prefix/utf8/lib/utf8"
}
done
cf_search="$cf_library_path_list $cf_search"
for cf_cv_library_path_utf8 in $cf_search
do
- if test -d $cf_cv_library_path_utf8 ; then
+ if test -d "$cf_cv_library_path_utf8" ; then
test -n "$verbose" && echo " ... testing $cf_cv_library_path_utf8" 1>&6
-echo "${as_me:-configure}:11951: testing ... testing $cf_cv_library_path_utf8 ..." 1>&5
+echo "${as_me:-configure}:12354: testing ... testing $cf_cv_library_path_utf8 ..." 1>&5
CPPFLAGS="$cf_test_CPPFLAGS"
LIBS="-lutf8 $cf_save_LIBS"
LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_utf8"
- cat >conftest.$ac_ext <<_ACEOF
-#line 11957 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 12360 "configure"
#include "confdefs.h"
#include <libutf8.h>
int
main (void)
{
putwc(0,0);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11970: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:12373: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:11973: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:11976: \"$ac_try\"") >&5
+ echo "$as_me:12376: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:12379: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:11979: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12382: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
test -n "$verbose" && echo " ... found utf8 library in $cf_cv_library_path_utf8" 1>&6
-echo "${as_me:-configure}:11984: testing ... found utf8 library in $cf_cv_library_path_utf8 ..." 1>&5
+echo "${as_me:-configure}:12387: testing ... found utf8 library in $cf_cv_library_path_utf8 ..." 1>&5
cf_cv_find_linkage_utf8=yes
cf_cv_library_file_utf8="-lutf8"
break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
CPPFLAGS="$cf_save_CPPFLAGS"
LIBS="$cf_save_LIBS"
LDFLAGS="$cf_save_LDFLAGS"
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
done
CPPFLAGS="$cf_save_CPPFLAGS"
LDFLAGS="$cf_save_LDFLAGS"
fi
else
cf_cv_find_linkage_utf8=no
fi
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
LIBS="$cf_save_LIBS"
if test "$cf_cv_find_linkage_utf8" = yes ; then
cf_cv_utf8_lib=add-on
else
cf_cv_utf8_lib=no
fi
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:12026: result: $cf_cv_utf8_lib" >&5
+echo "$as_me:12429: result: $cf_cv_utf8_lib" >&5
echo "${ECHO_T}$cf_cv_utf8_lib" >&6
# HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between
# ncurses/ncursesw:
if test "$cf_cv_utf8_lib" = "add-on" ; then
cat >>confdefs.h <<\EOF
#define HAVE_LIBUTF8_H 1
EOF
if test -n "$cf_cv_header_path_utf8" ; then
for cf_add_incdir in $cf_cv_header_path_utf8
do
- while test $cf_add_incdir != /usr/include
+ while test "$cf_add_incdir" != /usr/include
do
- if test -d $cf_add_incdir
+ if test -d "$cf_add_incdir"
then
cf_have_incdir=no
if test -n "$CFLAGS$CPPFLAGS" ; then
# a loop is needed to ensure we can add subdirs of existing dirs
for cf_test_incdir in $CFLAGS $CPPFLAGS ; do
if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then
cf_have_incdir=yes; break
fi
done
fi
if test "$cf_have_incdir" = no ; then
if test "$cf_add_incdir" = /usr/local/include ; then
if test "$GCC" = yes
then
cf_save_CPPFLAGS=$CPPFLAGS
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir"
- cat >conftest.$ac_ext <<_ACEOF
-#line 12064 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 12467 "configure"
#include "confdefs.h"
#include <stdio.h>
int
main (void)
{
printf("Hello")
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12076: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12479: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12079: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12082: \"$ac_try\"") >&5
+ echo "$as_me:12482: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:12485: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12085: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12488: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
:
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_have_incdir=yes
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
CPPFLAGS=$cf_save_CPPFLAGS
fi
fi
fi
if test "$cf_have_incdir" = no ; then
test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6
-echo "${as_me:-configure}:12102: testing adding $cf_add_incdir to include-path ..." 1>&5
+echo "${as_me:-configure}:12505: testing adding $cf_add_incdir to include-path ..." 1>&5
CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
- cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'`
+ cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'`
test "$cf_top_incdir" = "$cf_add_incdir" && break
cf_add_incdir="$cf_top_incdir"
else
break
fi
else
break
fi
done
done
fi
if test -n "$cf_cv_library_path_utf8" ; then
for cf_add_libdir in $cf_cv_library_path_utf8
do
- if test $cf_add_libdir = /usr/lib ; then
+ if test "$cf_add_libdir" = /usr/lib ; then
:
- elif test -d $cf_add_libdir
+ elif test -d "$cf_add_libdir"
then
cf_have_libdir=no
if test -n "$LDFLAGS$LIBS" ; then
# a loop is needed to ensure we can add subdirs of existing dirs
for cf_test_libdir in $LDFLAGS $LIBS ; do
if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then
cf_have_libdir=yes; break
fi
done
fi
if test "$cf_have_libdir" = no ; then
test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6
-echo "${as_me:-configure}:12138: testing adding $cf_add_libdir to library-path ..." 1>&5
+echo "${as_me:-configure}:12541: testing adding $cf_add_libdir to library-path ..." 1>&5
LDFLAGS="-L$cf_add_libdir $LDFLAGS"
fi
fi
done
fi
cf_add_libs="$LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in $cf_cv_library_file_utf8; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
LIBS="$cf_add_libs"
fi
if test "$cf_cv_utf8_lib" != no ; then
NCURSES_LIBUTF8=1
fi
fi
# This is needed on Tru64 5.0 to declare mbstate_t
-echo "$as_me:12170: checking if we must include wchar.h to declare mbstate_t" >&5
+echo "$as_me:12573: checking if we must include wchar.h to declare mbstate_t" >&5
echo $ECHO_N "checking if we must include wchar.h to declare mbstate_t... $ECHO_C" >&6
if test "${cf_cv_mbstate_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-cat >conftest.$ac_ext <<_ACEOF
-#line 12177 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 12580 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#ifdef HAVE_LIBUTF8_H
#include <libutf8.h>
#endif
int
main (void)
{
mbstate_t state
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12195: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12598: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12198: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12201: \"$ac_try\"") >&5
+ echo "$as_me:12601: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:12604: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12204: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12607: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_mbstate_t=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 12211 "configure"
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 12614 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include <wchar.h>
#ifdef HAVE_LIBUTF8_H
#include <libutf8.h>
#endif
int
main (void)
{
mbstate_t value
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12230: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12633: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12233: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12236: \"$ac_try\"") >&5
+ echo "$as_me:12636: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:12639: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12239: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12642: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_mbstate_t=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_mbstate_t=unknown
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:12251: result: $cf_cv_mbstate_t" >&5
+echo "$as_me:12654: result: $cf_cv_mbstate_t" >&5
echo "${ECHO_T}$cf_cv_mbstate_t" >&6
if test "$cf_cv_mbstate_t" = yes ; then
cat >>confdefs.h <<\EOF
#define NEED_WCHAR_H 1
EOF
NEED_WCHAR_H=1
fi
# if we do not find mbstate_t in either place, use substitution to provide a fallback.
if test "$cf_cv_mbstate_t" = unknown ; then
NCURSES_MBSTATE_T=1
fi
# This is needed on Tru64 5.0 to declare wchar_t
-echo "$as_me:12269: checking if we must include wchar.h to declare wchar_t" >&5
+echo "$as_me:12672: checking if we must include wchar.h to declare wchar_t" >&5
echo $ECHO_N "checking if we must include wchar.h to declare wchar_t... $ECHO_C" >&6
if test "${cf_cv_wchar_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-cat >conftest.$ac_ext <<_ACEOF
-#line 12276 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 12679 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#ifdef HAVE_LIBUTF8_H
#include <libutf8.h>
#endif
int
main (void)
{
wchar_t state
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12294: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12697: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12297: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12300: \"$ac_try\"") >&5
+ echo "$as_me:12700: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:12703: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12303: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12706: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_wchar_t=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 12310 "configure"
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 12713 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include <wchar.h>
#ifdef HAVE_LIBUTF8_H
#include <libutf8.h>
#endif
int
main (void)
{
wchar_t value
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12329: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12732: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12332: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12335: \"$ac_try\"") >&5
+ echo "$as_me:12735: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:12738: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12338: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12741: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_wchar_t=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_wchar_t=unknown
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:12350: result: $cf_cv_wchar_t" >&5
+echo "$as_me:12753: result: $cf_cv_wchar_t" >&5
echo "${ECHO_T}$cf_cv_wchar_t" >&6
if test "$cf_cv_wchar_t" = yes ; then
cat >>confdefs.h <<\EOF
#define NEED_WCHAR_H 1
EOF
NEED_WCHAR_H=1
fi
# if we do not find wchar_t in either place, use substitution to provide a fallback.
if test "$cf_cv_wchar_t" = unknown ; then
NCURSES_WCHAR_T=1
fi
# if we find wchar_t in either place, use substitution to provide a fallback.
if test "$cf_cv_wchar_t" != unknown ; then
NCURSES_OK_WCHAR_T=1
fi
# This is needed on Tru64 5.0 to declare wint_t
-echo "$as_me:12373: checking if we must include wchar.h to declare wint_t" >&5
+echo "$as_me:12776: checking if we must include wchar.h to declare wint_t" >&5
echo $ECHO_N "checking if we must include wchar.h to declare wint_t... $ECHO_C" >&6
if test "${cf_cv_wint_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-cat >conftest.$ac_ext <<_ACEOF
-#line 12380 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 12783 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#ifdef HAVE_LIBUTF8_H
#include <libutf8.h>
#endif
int
main (void)
{
wint_t state
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12398: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12801: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12401: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12404: \"$ac_try\"") >&5
+ echo "$as_me:12804: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:12807: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12407: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12810: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_wint_t=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 12414 "configure"
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 12817 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include <wchar.h>
#ifdef HAVE_LIBUTF8_H
#include <libutf8.h>
#endif
int
main (void)
{
wint_t value
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12433: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12836: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12436: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12439: \"$ac_try\"") >&5
+ echo "$as_me:12839: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:12842: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12442: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12845: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_wint_t=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_wint_t=unknown
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:12454: result: $cf_cv_wint_t" >&5
+echo "$as_me:12857: result: $cf_cv_wint_t" >&5
echo "${ECHO_T}$cf_cv_wint_t" >&6
if test "$cf_cv_wint_t" = yes ; then
cat >>confdefs.h <<\EOF
#define NEED_WCHAR_H 1
EOF
NEED_WCHAR_H=1
fi
# if we do not find wint_t in either place, use substitution to provide a fallback.
if test "$cf_cv_wint_t" = unknown ; then
NCURSES_WINT_T=1
fi
# if we find wint_t in either place, use substitution to provide a fallback.
if test "$cf_cv_wint_t" != unknown ; then
NCURSES_OK_WINT_T=1
fi
if test "$NCURSES_MBSTATE_T" != 0; then
cat >>confdefs.h <<\EOF
#define NEED_MBSTATE_T_DEF 1
EOF
fi
fi
### use option --disable-lp64 to allow long chtype
-echo "$as_me:12486: checking whether to enable _LP64 definition in curses.h" >&5
+echo "$as_me:12889: checking whether to enable _LP64 definition in curses.h" >&5
echo $ECHO_N "checking whether to enable _LP64 definition in curses.h... $ECHO_C" >&6
# Check whether --enable-lp64 or --disable-lp64 was given.
if test "${enable_lp64+set}" = set; then
enableval="$enable_lp64"
with_lp64=$enableval
else
with_lp64=$cf_dft_with_lp64
fi;
-echo "$as_me:12496: result: $with_lp64" >&5
+echo "$as_me:12899: result: $with_lp64" >&5
echo "${ECHO_T}$with_lp64" >&6
if test "x$with_lp64" = xyes ; then
cf_cv_enable_lp64=1
else
cf_cv_enable_lp64=0
fi
# Check whether --enable-largefile or --disable-largefile was given.
if test "${enable_largefile+set}" = set; then
enableval="$enable_largefile"
fi;
if test "$enable_largefile" != no; then
- echo "$as_me:12512: checking for special C compiler options needed for large files" >&5
+ echo "$as_me:12915: checking for special C compiler options needed for large files" >&5
echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6
if test "${ac_cv_sys_largefile_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_sys_largefile_CC=no
if test "$GCC" != yes; then
ac_save_CC=$CC
while :; do
# IRIX 6.2 and later do not support large files by default,
# so use the C compiler's -n32 option if that helps.
- cat >conftest.$ac_ext <<_ACEOF
-#line 12524 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 12927 "configure"
#include "confdefs.h"
#include <sys/types.h>
/* Check that off_t can represent 2**63 - 1 correctly.
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
int
main (void)
{
;
return 0;
}
_ACEOF
- rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12544: \"$ac_compile\"") >&5
+ rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12947: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12547: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12550: \"$ac_try\"") >&5
+ echo "$as_me:12950: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:12953: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12553: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12956: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext
+rm -f "conftest.$ac_objext"
CC="$CC -n32"
- rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12563: \"$ac_compile\"") >&5
+ rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12966: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12566: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12569: \"$ac_try\"") >&5
+ echo "$as_me:12969: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:12972: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12572: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:12975: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_sys_largefile_CC=' -n32'; break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext
+rm -f "conftest.$ac_objext"
break
done
CC=$ac_save_CC
- rm -f conftest.$ac_ext
+ rm -f "conftest.$ac_ext"
fi
fi
-echo "$as_me:12586: result: $ac_cv_sys_largefile_CC" >&5
+echo "$as_me:12989: result: $ac_cv_sys_largefile_CC" >&5
echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6
if test "$ac_cv_sys_largefile_CC" != no; then
CC=$CC$ac_cv_sys_largefile_CC
fi
- echo "$as_me:12592: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+ echo "$as_me:12995: checking for _FILE_OFFSET_BITS value needed for large files" >&5
echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6
if test "${ac_cv_sys_file_offset_bits+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
while :; do
ac_cv_sys_file_offset_bits=no
- cat >conftest.$ac_ext <<_ACEOF
-#line 12600 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13003 "configure"
#include "confdefs.h"
#include <sys/types.h>
/* Check that off_t can represent 2**63 - 1 correctly.
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
int
main (void)
{
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12620: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13023: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12623: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12626: \"$ac_try\"") >&5
+ echo "$as_me:13026: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:13029: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12629: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13032: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-#line 12638 "configure"
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13041 "configure"
#include "confdefs.h"
#define _FILE_OFFSET_BITS 64
#include <sys/types.h>
/* Check that off_t can represent 2**63 - 1 correctly.
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
int
main (void)
{
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12659: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13062: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12662: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12665: \"$ac_try\"") >&5
+ echo "$as_me:13065: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:13068: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12668: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13071: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_sys_file_offset_bits=64; break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
break
done
fi
-echo "$as_me:12679: result: $ac_cv_sys_file_offset_bits" >&5
+echo "$as_me:13082: result: $ac_cv_sys_file_offset_bits" >&5
echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6
if test "$ac_cv_sys_file_offset_bits" != no; then
cat >>confdefs.h <<EOF
#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
EOF
fi
rm -rf conftest*
- echo "$as_me:12689: checking for _LARGE_FILES value needed for large files" >&5
+ echo "$as_me:13092: checking for _LARGE_FILES value needed for large files" >&5
echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6
if test "${ac_cv_sys_large_files+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
while :; do
ac_cv_sys_large_files=no
- cat >conftest.$ac_ext <<_ACEOF
-#line 12697 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13100 "configure"
#include "confdefs.h"
#include <sys/types.h>
/* Check that off_t can represent 2**63 - 1 correctly.
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
int
main (void)
{
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12717: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13120: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12720: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12723: \"$ac_try\"") >&5
+ echo "$as_me:13123: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:13126: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12726: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13129: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-#line 12735 "configure"
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13138 "configure"
#include "confdefs.h"
#define _LARGE_FILES 1
#include <sys/types.h>
/* Check that off_t can represent 2**63 - 1 correctly.
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
int
main (void)
{
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12756: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13159: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12759: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12762: \"$ac_try\"") >&5
+ echo "$as_me:13162: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:13165: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12765: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13168: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_sys_large_files=1; break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
break
done
fi
-echo "$as_me:12776: result: $ac_cv_sys_large_files" >&5
+echo "$as_me:13179: result: $ac_cv_sys_large_files" >&5
echo "${ECHO_T}$ac_cv_sys_large_files" >&6
if test "$ac_cv_sys_large_files" != no; then
cat >>confdefs.h <<EOF
#define _LARGE_FILES $ac_cv_sys_large_files
EOF
fi
rm -rf conftest*
fi
if test "$enable_largefile" != no ; then
- echo "$as_me:12789: checking for _LARGEFILE_SOURCE value needed for large files" >&5
+ echo "$as_me:13192: checking for _LARGEFILE_SOURCE value needed for large files" >&5
echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6
if test "${ac_cv_sys_largefile_source+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
while :; do
ac_cv_sys_largefile_source=no
- cat >conftest.$ac_ext <<_ACEOF
-#line 12797 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13200 "configure"
#include "confdefs.h"
#include <stdio.h>
int
main (void)
{
return !fseeko;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12809: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13212: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12812: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12815: \"$ac_try\"") >&5
+ echo "$as_me:13215: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:13218: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12818: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13221: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-#line 12827 "configure"
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13230 "configure"
#include "confdefs.h"
#define _LARGEFILE_SOURCE 1
#include <stdio.h>
int
main (void)
{
return !fseeko;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12840: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13243: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12843: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12846: \"$ac_try\"") >&5
+ echo "$as_me:13246: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:13249: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12849: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13252: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_sys_largefile_source=1; break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
break
done
fi
-echo "$as_me:12860: result: $ac_cv_sys_largefile_source" >&5
+echo "$as_me:13263: result: $ac_cv_sys_largefile_source" >&5
echo "${ECHO_T}$ac_cv_sys_largefile_source" >&6
if test "$ac_cv_sys_largefile_source" != no; then
cat >>confdefs.h <<EOF
#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source
EOF
fi
rm -rf conftest*
# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
# in glibc 2.1.3, but that breaks too many other things.
# If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
-echo "$as_me:12874: checking for fseeko" >&5
+echo "$as_me:13277: checking for fseeko" >&5
echo $ECHO_N "checking for fseeko... $ECHO_C" >&6
if test "${ac_cv_func_fseeko+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 12880 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13283 "configure"
#include "confdefs.h"
#include <stdio.h>
int
main (void)
{
return fseeko && fseeko (stdin, 0, 0);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:12892: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:13295: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:12895: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:12898: \"$ac_try\"") >&5
+ echo "$as_me:13298: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:13301: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12901: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13304: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_func_fseeko=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_cv_func_fseeko=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:12911: result: $ac_cv_func_fseeko" >&5
+echo "$as_me:13314: result: $ac_cv_func_fseeko" >&5
echo "${ECHO_T}$ac_cv_func_fseeko" >&6
if test $ac_cv_func_fseeko = yes; then
cat >>confdefs.h <<\EOF
#define HAVE_FSEEKO 1
EOF
fi
# Normally we would collect these definitions in the config.h,
# but (like _XOPEN_SOURCE), some environments rely on having these
# defined before any of the system headers are included. Another
# case comes up with C++, e.g., on AIX the compiler compiles the
# header files by themselves before looking at the body files it is
# told to compile. For ncurses, those header files do not include
# the config.h
if test "$ac_cv_sys_large_files" != no
then
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}-D_LARGE_FILES"
fi
if test "$ac_cv_sys_largefile_source" != no
then
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}-D_LARGEFILE_SOURCE"
fi
if test "$ac_cv_sys_file_offset_bits" != no
then
test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
CPPFLAGS="${CPPFLAGS}-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
fi
- echo "$as_me:12950: checking whether to use struct dirent64" >&5
+ echo "$as_me:13353: checking whether to use struct dirent64" >&5
echo $ECHO_N "checking whether to use struct dirent64... $ECHO_C" >&6
if test "${cf_cv_struct_dirent64+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 12957 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13360 "configure"
#include "confdefs.h"
#pragma GCC diagnostic error "-Wincompatible-pointer-types"
#include <sys/types.h>
#include <dirent.h>
int
main (void)
{
/* if transitional largefile support is setup, this is true */
extern struct dirent64 * readdir(DIR *);
struct dirent64 *x = readdir((DIR *)0);
struct dirent *y = readdir((DIR *)0);
int z = x - y;
+ (void)z;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12979: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13383: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:12982: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:12985: \"$ac_try\"") >&5
+ echo "$as_me:13386: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:13389: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:12988: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13392: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_struct_dirent64=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_struct_dirent64=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:12999: result: $cf_cv_struct_dirent64" >&5
+echo "$as_me:13403: result: $cf_cv_struct_dirent64" >&5
echo "${ECHO_T}$cf_cv_struct_dirent64" >&6
test "$cf_cv_struct_dirent64" = yes &&
cat >>confdefs.h <<\EOF
#define HAVE_STRUCT_DIRENT64 1
EOF
fi
### use option --disable-tparm-varargs to make tparm() conform to X/Open
-echo "$as_me:13009: checking if you want tparm not to use X/Open fixed-parameter list" >&5
+echo "$as_me:13413: checking if you want tparm not to use X/Open fixed-parameter list" >&5
echo $ECHO_N "checking if you want tparm not to use X/Open fixed-parameter list... $ECHO_C" >&6
# Check whether --enable-tparm-varargs or --disable-tparm-varargs was given.
if test "${enable_tparm_varargs+set}" = set; then
enableval="$enable_tparm_varargs"
with_tparm_varargs=$enableval
else
with_tparm_varargs=yes
fi;
-echo "$as_me:13019: result: $with_tparm_varargs" >&5
+echo "$as_me:13423: result: $with_tparm_varargs" >&5
echo "${ECHO_T}$with_tparm_varargs" >&6
NCURSES_TPARM_VARARGS=0
test "x$with_tparm_varargs" = xyes && NCURSES_TPARM_VARARGS=1
### use option --disable-tic-depends to make libtic not explicitly depend on ncurses/ncursesw
if test "$with_ticlib" != no ; then
-echo "$as_me:13026: checking if you want tic library to use explicit dependency on ncurses$LIB_SUFFIX library" >&5
+echo "$as_me:13430: checking if you want tic library to use explicit dependency on ncurses$LIB_SUFFIX library" >&5
echo $ECHO_N "checking if you want tic library to use explicit dependency on ncurses$LIB_SUFFIX library... $ECHO_C" >&6
# Check whether --enable-tic-depends or --disable-tic-depends was given.
if test "${enable_tic_depends+set}" = set; then
enableval="$enable_tic_depends"
with_tic_depends=$enableval
else
with_tic_depends=yes
fi;
-echo "$as_me:13036: result: $with_tic_depends" >&5
+echo "$as_me:13440: result: $with_tic_depends" >&5
echo "${ECHO_T}$with_tic_depends" >&6
else
with_tic_depends=no
fi
### use option --disable-wattr-macros to suppress wattr* macros from curses.h
-echo "$as_me:13043: checking if you want to suppress wattr* macros to help with ncurses5/ncurses6 transition" >&5
+echo "$as_me:13447: checking if you want to suppress wattr* macros to help with ncurses5/ncurses6 transition" >&5
echo $ECHO_N "checking if you want to suppress wattr* macros to help with ncurses5/ncurses6 transition... $ECHO_C" >&6
# Check whether --enable-wattr-macros or --disable-wattr-macros was given.
if test "${enable_wattr_macros+set}" = set; then
enableval="$enable_wattr_macros"
with_wattr_macros=$enableval
else
with_wattr_macros=yes
fi;
if [ "x$with_wattr_macros" != xyes ]; then
NCURSES_WATTR_MACROS=0
- echo "$as_me:13055: result: yes" >&5
+ echo "$as_me:13459: result: yes" >&5
echo "${ECHO_T}yes" >&6
else
NCURSES_WATTR_MACROS=1
- echo "$as_me:13059: result: no" >&5
+ echo "$as_me:13463: result: no" >&5
echo "${ECHO_T}no" >&6
fi
-echo "$as_me:13063: checking for X11 rgb file" >&5
+echo "$as_me:13467: checking for X11 rgb file" >&5
echo $ECHO_N "checking for X11 rgb file... $ECHO_C" >&6
# Check whether --with-x11-rgb or --without-x11-rgb was given.
if test "${with_x11_rgb+set}" = set; then
withval="$with_x11_rgb"
RGB_PATH=$withval
else
RGB_PATH=auto
fi;
if test "x$RGB_PATH" = xauto
then
RGB_PATH='${exec_prefix}/lib/X11/rgb.txt'
for cf_path in \
/opt/local/share/X11/rgb.txt \
/opt/X11/share/X11/rgb.txt \
/usr/share/X11/rgb.txt \
/usr/X11/share/X11/rgb.txt \
/usr/X11/lib/X11/rgb.txt \
/usr/lib/X11/rgb.txt \
/etc/X11/rgb.txt \
/usr/pkg/lib/X11/rgb.txt \
/usr/X11R7/lib/X11/rgb.txt \
/usr/X11R6/lib/X11/rgb.txt \
/usr/X11R5/lib/X11/rgb.txt \
/usr/X11R4/lib/X11/rgb.txt \
/usr/local/lib/X11/rgb.txt \
/usr/local/share/X11/rgb.txt \
/usr/lib64/X11/rgb.txt
do
if test -f "$cf_path" ; then
RGB_PATH="$cf_path"
break
fi
done
else
cf_path=$RGB_PATH
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".$cf_path" in
(.\$\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[a-zA-Z]:[\\/]*) # OS/2 EMX
;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
eval cf_path="$cf_path"
case ".$cf_path" in
(.NONE/*)
- cf_path=`echo $cf_path | sed -e s%NONE%$cf_path_syntax%`
+ cf_path=`echo "$cf_path" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- cf_path=`echo $cf_path | sed -e s%NONE%$cf_path_syntax%`
+ cf_path=`echo "$cf_path" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
- { { echo "$as_me:13127: error: expected a pathname, not \"$cf_path\"" >&5
+ { { echo "$as_me:13531: error: expected a pathname, not \"$cf_path\"" >&5
echo "$as_me: error: expected a pathname, not \"$cf_path\"" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
fi
-echo "$as_me:13135: result: $RGB_PATH" >&5
+echo "$as_me:13539: result: $RGB_PATH" >&5
echo "${ECHO_T}$RGB_PATH" >&6
cat >>confdefs.h <<EOF
#define RGB_PATH "$cf_path"
EOF
no_x11_rgb=
if test "$RGB_PATH" = no
then
no_x11_rgb="#"
fi
### use option --with-bool to override bool's type
-echo "$as_me:13149: checking for type of bool" >&5
+echo "$as_me:13553: checking for type of bool" >&5
echo $ECHO_N "checking for type of bool... $ECHO_C" >&6
# Check whether --with-bool or --without-bool was given.
if test "${with_bool+set}" = set; then
withval="$with_bool"
NCURSES_BOOL="$withval"
else
NCURSES_BOOL=auto
fi;
-echo "$as_me:13159: result: $NCURSES_BOOL" >&5
+echo "$as_me:13563: result: $NCURSES_BOOL" >&5
echo "${ECHO_T}$NCURSES_BOOL" >&6
-echo "$as_me:13162: checking for alternate terminal capabilities file" >&5
+echo "$as_me:13566: checking for alternate terminal capabilities file" >&5
echo $ECHO_N "checking for alternate terminal capabilities file... $ECHO_C" >&6
# Check whether --with-caps or --without-caps was given.
if test "${with_caps+set}" = set; then
withval="$with_caps"
TERMINFO_CAPS=Caps.$withval
else
TERMINFO_CAPS=Caps
fi;
test -f "${srcdir}/include/${TERMINFO_CAPS}" || TERMINFO_CAPS=Caps
-echo "$as_me:13173: result: $TERMINFO_CAPS" >&5
+echo "$as_me:13577: result: $TERMINFO_CAPS" >&5
echo "${ECHO_T}$TERMINFO_CAPS" >&6
### use option --with-chtype to override chtype's type
-echo "$as_me:13177: checking for type of chtype" >&5
+echo "$as_me:13581: checking for type of chtype" >&5
echo $ECHO_N "checking for type of chtype... $ECHO_C" >&6
# Check whether --with-chtype or --without-chtype was given.
if test "${with_chtype+set}" = set; then
withval="$with_chtype"
NCURSES_CHTYPE="$withval"
else
NCURSES_CHTYPE=$cf_dft_chtype
fi;
-echo "$as_me:13187: result: $NCURSES_CHTYPE" >&5
+echo "$as_me:13591: result: $NCURSES_CHTYPE" >&5
echo "${ECHO_T}$NCURSES_CHTYPE" >&6
### use option --with-ospeed to override ospeed's type
-echo "$as_me:13191: checking for type of ospeed" >&5
+echo "$as_me:13595: checking for type of ospeed" >&5
echo $ECHO_N "checking for type of ospeed... $ECHO_C" >&6
# Check whether --with-ospeed or --without-ospeed was given.
if test "${with_ospeed+set}" = set; then
withval="$with_ospeed"
NCURSES_OSPEED="$withval"
else
NCURSES_OSPEED=short
fi;
-echo "$as_me:13201: result: $NCURSES_OSPEED" >&5
+echo "$as_me:13605: result: $NCURSES_OSPEED" >&5
echo "${ECHO_T}$NCURSES_OSPEED" >&6
### use option --with-mmask-t to override mmask_t's type
-echo "$as_me:13205: checking for type of mmask_t" >&5
+echo "$as_me:13609: checking for type of mmask_t" >&5
echo $ECHO_N "checking for type of mmask_t... $ECHO_C" >&6
# Check whether --with-mmask-t or --without-mmask-t was given.
if test "${with_mmask_t+set}" = set; then
withval="$with_mmask_t"
NCURSES_MMASK_T="$withval"
else
NCURSES_MMASK_T=$cf_dft_mmask_t
fi;
-echo "$as_me:13215: result: $NCURSES_MMASK_T" >&5
+echo "$as_me:13619: result: $NCURSES_MMASK_T" >&5
echo "${ECHO_T}$NCURSES_MMASK_T" >&6
### use option --with-ccharw-max to override CCHARW_MAX size
-echo "$as_me:13219: checking for size CCHARW_MAX" >&5
+echo "$as_me:13623: checking for size CCHARW_MAX" >&5
echo $ECHO_N "checking for size CCHARW_MAX... $ECHO_C" >&6
# Check whether --with-ccharw-max or --without-ccharw-max was given.
if test "${with_ccharw_max+set}" = set; then
withval="$with_ccharw_max"
NCURSES_CCHARW_MAX="$withval"
else
NCURSES_CCHARW_MAX=5
fi;
-echo "$as_me:13229: result: $NCURSES_CCHARW_MAX" >&5
+echo "$as_me:13633: result: $NCURSES_CCHARW_MAX" >&5
echo "${ECHO_T}$NCURSES_CCHARW_MAX" >&6
-echo "$as_me:13232: checking for ANSI C header files" >&5
+echo "$as_me:13636: checking for ANSI C header files" >&5
echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
if test "${ac_cv_header_stdc+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 13238 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13642 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <float.h>
_ACEOF
-if { (eval echo "$as_me:13246: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:13650: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:13252: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
+ echo "$as_me:13656: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
else
ac_cpp_err=
fi
else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
ac_cv_header_stdc=yes
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ cat "conftest.$ac_ext" >&5
ac_cv_header_stdc=no
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-#line 13274 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13678 "configure"
#include "confdefs.h"
#include <string.h>
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "memchr" >/dev/null 2>&1; then
+ $EGREP "memchr" >/dev/null 2>&1; then
:
else
ac_cv_header_stdc=no
fi
rm -rf conftest*
fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-#line 13292 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13696 "configure"
#include "confdefs.h"
#include <stdlib.h>
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "free" >/dev/null 2>&1; then
+ $EGREP "free" >/dev/null 2>&1; then
:
else
ac_cv_header_stdc=no
fi
rm -rf conftest*
fi
if test $ac_cv_header_stdc = yes; then
# /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
if test "$cross_compiling" = yes; then
:
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 13313 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13717 "configure"
#include "confdefs.h"
#include <ctype.h>
#if ((' ' & 0x0FF) == 0x020)
# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
#else
# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
|| ('j' <= (c) && (c) <= 'r') \
|| ('s' <= (c) && (c) <= 'z'))
# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
#endif
#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
int
main (void)
{
int i;
for (i = 0; i < 256; i++)
if (XOR (islower (i), ISLOWER (i))
|| toupper (i) != TOUPPER (i))
$ac_main_return(2);
$ac_main_return (0);
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:13339: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:13743: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:13342: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:13344: \"$ac_try\"") >&5
+ echo "$as_me:13746: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:13748: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:13347: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13751: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
:
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_cv_header_stdc=no
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
fi
fi
-echo "$as_me:13360: result: $ac_cv_header_stdc" >&5
+echo "$as_me:13764: result: $ac_cv_header_stdc" >&5
echo "${ECHO_T}$ac_cv_header_stdc" >&6
if test $ac_cv_header_stdc = yes; then
cat >>confdefs.h <<\EOF
#define STDC_HEADERS 1
EOF
fi
# On IRIX 5.3, sys/types and inttypes.h are conflicting.
for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
inttypes.h stdint.h unistd.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:13376: checking for $ac_header" >&5
+echo "$as_me:13780: checking for $ac_header" >&5
echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
if eval "test \"\${$as_ac_Header+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 13382 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13786 "configure"
#include "confdefs.h"
$ac_includes_default
#include <$ac_header>
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:13388: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13792: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:13391: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:13394: \"$ac_try\"") >&5
+ echo "$as_me:13795: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:13798: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:13397: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13801: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
eval "$as_ac_Header=yes"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
eval "$as_ac_Header=no"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:13407: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+echo "$as_me:13811: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
cat >>confdefs.h <<EOF
#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
EOF
fi
done
-echo "$as_me:13417: checking for signed char" >&5
+echo "$as_me:13821: checking for signed char" >&5
echo $ECHO_N "checking for signed char... $ECHO_C" >&6
if test "${ac_cv_type_signed_char+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 13423 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13827 "configure"
#include "confdefs.h"
$ac_includes_default
int
main (void)
{
if ((signed char *) 0)
return 0;
if (sizeof (signed char))
return 0;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:13438: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13842: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:13441: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:13444: \"$ac_try\"") >&5
+ echo "$as_me:13845: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:13848: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:13447: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13851: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_type_signed_char=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_cv_type_signed_char=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:13457: result: $ac_cv_type_signed_char" >&5
+echo "$as_me:13861: result: $ac_cv_type_signed_char" >&5
echo "${ECHO_T}$ac_cv_type_signed_char" >&6
-echo "$as_me:13460: checking size of signed char" >&5
+echo "$as_me:13864: checking size of signed char" >&5
echo $ECHO_N "checking size of signed char... $ECHO_C" >&6
if test "${ac_cv_sizeof_signed_char+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$ac_cv_type_signed_char" = yes; then
if test "$cross_compiling" = yes; then
# Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-#line 13469 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 13873 "configure"
#include "confdefs.h"
$ac_includes_default
int
main (void)
{
int _array_ [1 - 2 * !((sizeof (signed char)) >= 0)]
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:13481: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13885: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:13484: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:13487: \"$ac_try\"") >&5
+ echo "$as_me:13888: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:13891: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:13490: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13894: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_lo=0 ac_mid=0
while :; do
- cat >conftest.$ac_ext <<_ACEOF
-#line 13495 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13899 "configure"
#include "confdefs.h"
$ac_includes_default
int
main (void)
{
int _array_ [1 - 2 * !((sizeof (signed char)) <= $ac_mid)]
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:13507: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13911: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:13510: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:13513: \"$ac_try\"") >&5
+ echo "$as_me:13914: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:13917: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:13516: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13920: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_hi=$ac_mid; break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1`
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`; ac_mid=`expr 2 '*' "$ac_mid" + 1`
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
done
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_hi=-1 ac_mid=-1
while :; do
- cat >conftest.$ac_ext <<_ACEOF
-#line 13532 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13936 "configure"
#include "confdefs.h"
$ac_includes_default
int
main (void)
{
int _array_ [1 - 2 * !((sizeof (signed char)) >= $ac_mid)]
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:13544: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13948: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:13547: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:13550: \"$ac_try\"") >&5
+ echo "$as_me:13951: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:13954: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:13553: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13957: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_lo=$ac_mid; break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid`
+cat "conftest.$ac_ext" >&5
+ac_hi=`expr "$ac_mid" - 1`; ac_mid=`expr 2 '*' "$ac_mid"`
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
done
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-#line 13569 "configure"
+ ac_mid=`expr '(' "$ac_hi" - "$ac_lo" ')' / 2 + "$ac_lo"`
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 13973 "configure"
#include "confdefs.h"
$ac_includes_default
int
main (void)
{
int _array_ [1 - 2 * !((sizeof (signed char)) <= $ac_mid)]
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:13581: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13985: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:13584: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:13587: \"$ac_try\"") >&5
+ echo "$as_me:13988: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:13991: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:13590: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:13994: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_hi=$ac_mid
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_lo=`expr $ac_mid + 1`
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
done
ac_cv_sizeof_signed_char=$ac_lo
else
if test "$cross_compiling" = yes; then
- { { echo "$as_me:13603: error: cannot run test program while cross compiling" >&5
+ { { echo "$as_me:14007: error: cannot run test program while cross compiling" >&5
echo "$as_me: error: cannot run test program while cross compiling" >&2;}
{ (exit 1); exit 1; }; }
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 13608 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 14012 "configure"
#include "confdefs.h"
$ac_includes_default
int
main (void)
{
FILE *f = fopen ("conftest.val", "w");
if (!f)
$ac_main_return (1);
fprintf (f, "%d", (sizeof (signed char)));
fclose (f);
;
return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:13624: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:14028: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:13627: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:13629: \"$ac_try\"") >&5
+ echo "$as_me:14031: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:14033: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:13632: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:14036: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_sizeof_signed_char=`cat conftest.val`
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
fi
rm -f conftest.val
else
ac_cv_sizeof_signed_char=0
fi
fi
-echo "$as_me:13648: result: $ac_cv_sizeof_signed_char" >&5
+echo "$as_me:14052: result: $ac_cv_sizeof_signed_char" >&5
echo "${ECHO_T}$ac_cv_sizeof_signed_char" >&6
cat >>confdefs.h <<EOF
#define SIZEOF_SIGNED_CHAR $ac_cv_sizeof_signed_char
EOF
if test "$ac_cv_sizeof_signed_char" = 1 ; then
NCURSES_SBOOL="signed char"
else
NCURSES_SBOOL="char"
fi
-echo "$as_me:13659: checking if you want to use signed Boolean array in term.h" >&5
+echo "$as_me:14063: checking if you want to use signed Boolean array in term.h" >&5
echo $ECHO_N "checking if you want to use signed Boolean array in term.h... $ECHO_C" >&6
# Check whether --enable-signed-char or --disable-signed-char was given.
if test "${enable_signed_char+set}" = set; then
enableval="$enable_signed_char"
with_signed_char=$enableval
else
with_signed_char=no
fi;
-echo "$as_me:13669: result: $with_signed_char" >&5
+echo "$as_me:14073: result: $with_signed_char" >&5
echo "${ECHO_T}$with_signed_char" >&6
test "x$with_signed_char" != xyes && NCURSES_SBOOL="char"
### use option --with-tparm-arg to override tparm's argument type
-echo "$as_me:13674: checking for type of tparm args" >&5
+echo "$as_me:14078: checking for type of tparm args" >&5
echo $ECHO_N "checking for type of tparm args... $ECHO_C" >&6
# Check whether --with-tparm-arg or --without-tparm-arg was given.
if test "${with_tparm_arg+set}" = set; then
withval="$with_tparm_arg"
NCURSES_TPARM_ARG="$withval"
else
NCURSES_TPARM_ARG=$cf_dft_tparm_arg
fi;
-echo "$as_me:13684: result: $NCURSES_TPARM_ARG" >&5
+echo "$as_me:14088: result: $NCURSES_TPARM_ARG" >&5
echo "${ECHO_T}$NCURSES_TPARM_ARG" >&6
### Enable compiling-in rcs id's
-echo "$as_me:13688: checking if RCS identifiers should be compiled-in" >&5
+echo "$as_me:14092: checking if RCS identifiers should be compiled-in" >&5
echo $ECHO_N "checking if RCS identifiers should be compiled-in... $ECHO_C" >&6
# Check whether --with-rcs-ids or --without-rcs-ids was given.
if test "${with_rcs_ids+set}" = set; then
withval="$with_rcs_ids"
with_rcs_ids=$withval
else
with_rcs_ids=no
fi;
-echo "$as_me:13698: result: $with_rcs_ids" >&5
+echo "$as_me:14102: result: $with_rcs_ids" >&5
echo "${ECHO_T}$with_rcs_ids" >&6
test "x$with_rcs_ids" = xyes &&
cat >>confdefs.h <<\EOF
#define USE_RCS_IDS 1
EOF
###############################################################################
-echo "$as_me:13707: checking format of man-pages" >&5
+echo "$as_me:14111: checking format of man-pages" >&5
echo $ECHO_N "checking format of man-pages... $ECHO_C" >&6
# Check whether --with-manpage-format or --without-manpage-format was given.
if test "${with_manpage_format+set}" = set; then
withval="$with_manpage_format"
MANPAGE_FORMAT=$withval
else
MANPAGE_FORMAT=unknown
fi;
test -z "$MANPAGE_FORMAT" && MANPAGE_FORMAT=unknown
MANPAGE_FORMAT=`echo "$MANPAGE_FORMAT" | sed -e 's/,/ /g'`
cf_unknown=
-case $MANPAGE_FORMAT in
+case "$MANPAGE_FORMAT" in
(unknown)
if test -z "$MANPATH" ; then
MANPATH="/usr/man:/usr/share/man"
fi
# look for the 'date' man-page (it's most likely to be installed!)
MANPAGE_FORMAT=
- cf_preform=no
- cf_catonly=yes
- cf_example=date
+ cf_preform="no"
+ cf_catonly="yes"
+ cf_example="date"
IFS="${IFS:- }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
for cf_dir in $MANPATH; do
test -z "$cf_dir" && cf_dir=/usr/man
for cf_name in $cf_dir/man*/$cf_example.[01]* $cf_dir/cat*/$cf_example.[01]* $cf_dir/man*/$cf_example $cf_dir/cat*/$cf_example
do
- cf_test=`echo $cf_name | sed -e 's/*//'`
+ cf_test=`echo "$cf_name" | sed -e 's/*//'`
if test "x$cf_test" = "x$cf_name" ; then
case "$cf_name" in
(*.gz) MANPAGE_FORMAT="$MANPAGE_FORMAT gzip";;
(*.Z) MANPAGE_FORMAT="$MANPAGE_FORMAT compress";;
(*.0) MANPAGE_FORMAT="$MANPAGE_FORMAT BSDI";;
(*) MANPAGE_FORMAT="$MANPAGE_FORMAT normal";;
esac
case "$cf_name" in
($cf_dir/man*)
cf_catonly=no
;;
($cf_dir/cat*)
cf_preform=yes
;;
esac
break
fi
# if we found a match in either man* or cat*, stop looking
if test -n "$MANPAGE_FORMAT" ; then
cf_found=no
test "$cf_preform" = yes && MANPAGE_FORMAT="$MANPAGE_FORMAT formatted"
test "$cf_catonly" = yes && MANPAGE_FORMAT="$MANPAGE_FORMAT catonly"
case "$cf_name" in
($cf_dir/cat*)
cf_found=yes
;;
esac
- test $cf_found=yes && break
+ test "$cf_found" = yes && break
fi
done
# only check the first directory in $MANPATH where we find manpages
if test -n "$MANPAGE_FORMAT" ; then
break
fi
done
# if we did not find the example, just assume it is normal
test -z "$MANPAGE_FORMAT" && MANPAGE_FORMAT=normal
IFS="$ac_save_ifs"
;;
(*)
for cf_option in $MANPAGE_FORMAT; do
- case $cf_option in
+ case "$cf_option" in
(gzip|compress|BSDI|normal|formatted|catonly)
;;
(*)
cf_unknown="$cf_unknown $cf_option"
;;
esac
done
;;
esac
-echo "$as_me:13796: result: $MANPAGE_FORMAT" >&5
+echo "$as_me:14200: result: $MANPAGE_FORMAT" >&5
echo "${ECHO_T}$MANPAGE_FORMAT" >&6
if test -n "$cf_unknown" ; then
- { echo "$as_me:13799: WARNING: Unexpected manpage-format $cf_unknown" >&5
+ { echo "$as_me:14203: WARNING: Unexpected manpage-format $cf_unknown" >&5
echo "$as_me: WARNING: Unexpected manpage-format $cf_unknown" >&2;}
fi
-echo "$as_me:13803: checking for manpage renaming" >&5
+echo "$as_me:14207: checking for manpage renaming" >&5
echo $ECHO_N "checking for manpage renaming... $ECHO_C" >&6
# Check whether --with-manpage-renames or --without-manpage-renames was given.
if test "${with_manpage_renames+set}" = set; then
withval="$with_manpage_renames"
MANPAGE_RENAMES=$withval
else
MANPAGE_RENAMES=yes
fi;
case ".$MANPAGE_RENAMES" in
(.no)
;;
(.|.yes)
# Debian 'man' program?
if test -f /etc/debian_version ; then
- MANPAGE_RENAMES=`cd $srcdir && pwd`/man/man_db.renames
+ MANPAGE_RENAMES=`cd "$srcdir" && pwd`/man/man_db.renames
else
MANPAGE_RENAMES=no
fi
;;
esac
if test "$MANPAGE_RENAMES" != no ; then
- if test -f $srcdir/man/$MANPAGE_RENAMES ; then
- MANPAGE_RENAMES=`cd $srcdir/man && pwd`/$MANPAGE_RENAMES
- elif test ! -f $MANPAGE_RENAMES ; then
- { { echo "$as_me:13831: error: not a filename: $MANPAGE_RENAMES" >&5
+ if test -f "$srcdir/man/$MANPAGE_RENAMES" ; then
+ MANPAGE_RENAMES=`cd "$srcdir/man" && pwd`/$MANPAGE_RENAMES
+ elif test ! -f "$MANPAGE_RENAMES" ; then
+ { { echo "$as_me:14235: error: not a filename: $MANPAGE_RENAMES" >&5
echo "$as_me: error: not a filename: $MANPAGE_RENAMES" >&2;}
{ (exit 1); exit 1; }; }
fi
test ! -d man && mkdir man
# Construct a sed-script to perform renaming within man-pages
if test -n "$MANPAGE_RENAMES" ; then
test ! -d man && mkdir man
- $SHELL $srcdir/man/make_sed.sh $MANPAGE_RENAMES >./edit_man.sed
+ $SHELL "$srcdir/man/make_sed.sh" "$MANPAGE_RENAMES" >./edit_man.sed
fi
fi
-echo "$as_me:13845: result: $MANPAGE_RENAMES" >&5
+echo "$as_me:14249: result: $MANPAGE_RENAMES" >&5
echo "${ECHO_T}$MANPAGE_RENAMES" >&6
-echo "$as_me:13848: checking if manpage aliases will be installed" >&5
+echo "$as_me:14252: checking if manpage aliases will be installed" >&5
echo $ECHO_N "checking if manpage aliases will be installed... $ECHO_C" >&6
# Check whether --with-manpage-aliases or --without-manpage-aliases was given.
if test "${with_manpage_aliases+set}" = set; then
withval="$with_manpage_aliases"
MANPAGE_ALIASES=$withval
else
MANPAGE_ALIASES=yes
fi;
-echo "$as_me:13859: result: $MANPAGE_ALIASES" >&5
+echo "$as_me:14263: result: $MANPAGE_ALIASES" >&5
echo "${ECHO_T}$MANPAGE_ALIASES" >&6
case "x$LN_S" in
(xln*)
cf_use_symlinks=yes
;;
(*)
cf_use_symlinks=no
;;
esac
MANPAGE_SYMLINKS=no
if test "$MANPAGE_ALIASES" = yes ; then
-echo "$as_me:13873: checking if manpage symlinks should be used" >&5
+echo "$as_me:14277: checking if manpage symlinks should be used" >&5
echo $ECHO_N "checking if manpage symlinks should be used... $ECHO_C" >&6
# Check whether --with-manpage-symlinks or --without-manpage-symlinks was given.
if test "${with_manpage_symlinks+set}" = set; then
withval="$with_manpage_symlinks"
MANPAGE_SYMLINKS=$withval
else
MANPAGE_SYMLINKS=$cf_use_symlinks
fi;
if test "$$cf_use_symlinks" = no; then
if test "$MANPAGE_SYMLINKS" = yes ; then
- { echo "$as_me:13886: WARNING: cannot make symlinks" >&5
+ { echo "$as_me:14290: WARNING: cannot make symlinks" >&5
echo "$as_me: WARNING: cannot make symlinks" >&2;}
MANPAGE_SYMLINKS=no
fi
fi
-echo "$as_me:13892: result: $MANPAGE_SYMLINKS" >&5
+echo "$as_me:14296: result: $MANPAGE_SYMLINKS" >&5
echo "${ECHO_T}$MANPAGE_SYMLINKS" >&6
fi
-echo "$as_me:13896: checking for manpage tbl" >&5
+echo "$as_me:14300: checking for manpage tbl" >&5
echo $ECHO_N "checking for manpage tbl... $ECHO_C" >&6
# Check whether --with-manpage-tbl or --without-manpage-tbl was given.
if test "${with_manpage_tbl+set}" = set; then
withval="$with_manpage_tbl"
MANPAGE_TBL=$withval
else
MANPAGE_TBL=no
fi;
-echo "$as_me:13907: result: $MANPAGE_TBL" >&5
+echo "$as_me:14311: result: $MANPAGE_TBL" >&5
echo "${ECHO_T}$MANPAGE_TBL" >&6
if test "$prefix" = "NONE" ; then
cf_prefix="$ac_default_prefix"
else
cf_prefix="$prefix"
fi
case "$MANPAGE_FORMAT" in
(*catonly*)
cf_format=yes
cf_inboth=no
;;
(*formatted*)
cf_format=yes
cf_inboth=yes
;;
(*)
cf_format=no
cf_inboth=no
;;
esac
test ! -d man && mkdir man
cf_so_strip=
cf_compress=
case "$MANPAGE_FORMAT" in
(*compress*)
cf_so_strip="Z"
cf_compress=compress
;;
(*gzip*)
cf_so_strip="gz"
cf_compress=gzip
;;
esac
cf_edit_man=./edit_man.sh
cf_man_alias=`pwd`/man_alias.sed
cat >$cf_edit_man <<CF_EOF
#! $SHELL
# this script is generated by the configure-script CF_MAN_PAGES macro.
prefix="$cf_prefix"
datarootdir="$datarootdir"
datadir="$datadir"
NCURSES_MAJOR="$NCURSES_MAJOR"
NCURSES_MINOR="$NCURSES_MINOR"
NCURSES_PATCH="$NCURSES_PATCH"
NCURSES_OSPEED="$NCURSES_OSPEED"
TERMINFO="$TERMINFO"
INSTALL="$INSTALL"
INSTALL_DATA="$INSTALL_DATA"
transform="$program_transform_name"
TMP=\${TMPDIR:=/tmp}/man\$\$
trap "rm -f \$TMP" 0 1 2 3 15
form=\$1
shift || exit 1
verb=\$1
shift || exit 1
mandir=\$1
shift || exit 1
srcdir=\$1
top_srcdir=\$srcdir/..
shift || exit 1
if test "\$form" = normal ; then
if test "$cf_format" = yes ; then
if test "$cf_inboth" = no ; then
- $SHELL \$0 format \$verb \$mandir \$srcdir \$*
+ $SHELL "\$0" format "\$verb" "\$mandir" "\$srcdir" "\$@"
exit $?
fi
fi
cf_subdir=\$mandir/man
cf_tables=$MANPAGE_TBL
else
cf_subdir=\$mandir/cat
cf_tables=yes
fi
# process the list of source-files
-for i in \$* ; do
+for i in "\$@" ; do
case \$i in
(*.orig|*.rej) ;;
(*.[0-9]*)
section=\`expr "\$i" : '.*\\.\\([0-9]\\)[xm]*'\`;
- if test \$verb = installing ; then
- if test ! -d \$cf_subdir\${section} ; then
- mkdir -p \$cf_subdir\$section
+ if test "\$verb" = installing ; then
+ if test ! -d "\$cf_subdir\${section}" ; then
+ mkdir -p "\$cf_subdir\$section"
fi
fi
# replace variables in man page
- if test ! -f $cf_man_alias ; then
+ if test ! -f "$cf_man_alias" ; then
cat >>$cf_man_alias <<-CF_EOF2
s,@DATADIR@,\$datadir,g
s,@TERMINFO@,\${TERMINFO:="no default value"},g
s,@TERMINFO_DIRS@,\${TERMINFO_DIRS:="no default value"},g
s,@NCURSES_MAJOR@,\${NCURSES_MAJOR:="no default value"},g
s,@NCURSES_MINOR@,\${NCURSES_MINOR:="no default value"},g
s,@NCURSES_PATCH@,\${NCURSES_PATCH:="no default value"},g
s,@NCURSES_OSPEED@,\${NCURSES_OSPEED:="no default value"},g
CF_EOF
for cf_name in captoinfo clear infocmp infotocap reset tabs tic toe tput tset
do
cf_NAME=`echo "$cf_name" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
- cf_name=`echo $cf_name|sed "$program_transform_name"`
+ cf_name=`echo "$cf_name" | sed "$program_transform_name"`
cat >>$cf_edit_man <<-CF_EOF
s,@$cf_NAME@,$cf_name,g
CF_EOF
done
cat >>$cf_edit_man <<CF_EOF
CF_EOF2
echo "...made $cf_man_alias"
fi
aliases=
- cf_source=\`basename \$i\`
+ cf_source=\`basename "\$i"\`
inalias=\$cf_source
- test ! -f \$inalias && inalias="\$srcdir/\$inalias"
- if test ! -f \$inalias ; then
- echo .. skipped \$cf_source
+ test ! -f "\$inalias" && inalias="\$srcdir/\$inalias"
+ if test ! -f "\$inalias" ; then
+ echo ".. skipped \$cf_source"
continue
fi
CF_EOF
if test "$MANPAGE_ALIASES" != no ; then
cat >>$cf_edit_man <<CF_EOF
nCurses=ignore.3x
- test $with_curses_h = yes && nCurses=ncurses.3x
- aliases=\`sed -f \$top_srcdir/man/manlinks.sed \$inalias |sed -f $cf_man_alias | sort -u; test \$inalias = \$nCurses && echo curses\`
+ test "$with_curses_h" = yes && nCurses=ncurses.3x
+ aliases=\`sed -f "\$top_srcdir/man/manlinks.sed" "\$inalias" |sed -f "$cf_man_alias" | sort -u; test "\$inalias" = "\$nCurses" && echo curses\`
CF_EOF
fi
if test "$MANPAGE_RENAMES" = no ; then
cat >>$cf_edit_man <<CF_EOF
# perform program transformations for section 1 man pages
if test \$section = 1 ; then
cf_target=\$cf_subdir\${section}/\`echo \$cf_source|sed "\${transform}"\`
else
cf_target=\$cf_subdir\${section}/\$cf_source
fi
CF_EOF
else
cat >>$cf_edit_man <<CF_EOF
cf_target=\`grep "^\$cf_source" $MANPAGE_RENAMES | $AWK '{print \$2}'\`
if test -z "\$cf_target" ; then
- echo '? missing rename for '\$cf_source
+ echo "? missing rename for \$cf_source"
cf_target="\$cf_source"
fi
cf_target="\$cf_subdir\${section}/\${cf_target}"
CF_EOF
fi
cat >>$cf_edit_man <<CF_EOF
- sed -f $cf_man_alias \\
+ sed -f "$cf_man_alias" \\
CF_EOF
-if test -f $MANPAGE_RENAMES ; then
+if test -f "$MANPAGE_RENAMES" ; then
cat >>$cf_edit_man <<CF_EOF
- < \$i | sed -f `pwd`/edit_man.sed >\$TMP
+ < "\$i" | sed -f `pwd`/edit_man.sed >\$TMP
CF_EOF
else
cat >>$cf_edit_man <<CF_EOF
- < \$i >\$TMP
+ < "\$i" >\$TMP
CF_EOF
fi
cat >>$cf_edit_man <<CF_EOF
if test \$cf_tables = yes ; then
tbl \$TMP >\$TMP.out
mv \$TMP.out \$TMP
fi
CF_EOF
-if test $with_overwrite != yes ; then
+if test "$with_overwrite" != yes ; then
cat >>$cf_edit_man <<CF_EOF
- sed -e "/\#[ ]*include/s,<curses.h,<ncurses$LIB_SUFFIX/curses.h," < \$TMP >\$TMP.out
+ sed -e "/\\#[ ]*include/s,<curses.h,<ncurses$LIB_SUFFIX/curses.h," < \$TMP >\$TMP.out
mv \$TMP.out \$TMP
CF_EOF
fi
-if test $with_curses_h != yes ; then
+if test "$with_curses_h" != yes ; then
cat >>$cf_edit_man <<CF_EOF
- sed -e "/\#[ ]*include/s,curses.h,ncurses.h," < \$TMP >\$TMP.out
+ sed -e "/\\#[ ]*include/s,curses.h,ncurses.h," < \$TMP >\$TMP.out
mv \$TMP.out \$TMP
CF_EOF
fi
cat >>$cf_edit_man <<CF_EOF
- if test \$form = format ; then
+ if test "\$form" = format ; then
nroff -man \$TMP >\$TMP.out
mv \$TMP.out \$TMP
fi
CF_EOF
if test -n "$cf_compress" ; then
cat >>$cf_edit_man <<CF_EOF
- if test \$verb = installing ; then
- if ( $cf_compress -f \$TMP )
+ if test "\$verb" = installing ; then
+ if ( "$cf_compress" -f \$TMP )
then
mv \$TMP.$cf_so_strip \$TMP
fi
fi
cf_target="\$cf_target.$cf_so_strip"
CF_EOF
fi
case "$MANPAGE_FORMAT" in
(*BSDI*)
cat >>$cf_edit_man <<CF_EOF
- if test \$form = format ; then
+ if test "\$form" = format ; then
# BSDI installs only .0 suffixes in the cat directories
- cf_target="\`echo \$cf_target|sed -e 's/\.[1-9]\+[a-z]*/.0/'\`"
+ cf_target="\`echo \$cf_target|sed -e 's/\\.[1-9]\\+[a-z]*/.0/'\`"
fi
CF_EOF
;;
esac
cat >>$cf_edit_man <<CF_EOF
- suffix=\`basename \$cf_target | sed -e 's%^[^.]*%%'\`
- if test \$verb = installing ; then
- echo \$verb \$cf_target
- \$INSTALL_DATA \$TMP \$cf_target
- test -d \$cf_subdir\${section} &&
+ suffix=\`basename "\$cf_target" | sed -e 's%^[^.]*%%'\`
+ if test "\$verb" = installing ; then
+ echo "\$verb \$cf_target"
+ \$INSTALL_DATA \$TMP "\$cf_target"
+ test -d "\$cf_subdir\${section}" &&
test -n "\$aliases" && (
- cd \$cf_subdir\${section} && (
- cf_source=\`echo \$cf_target |sed -e 's%^.*/\([^/][^/]*/[^/][^/]*$\)%\1%'\`
- test -n "$cf_so_strip" && cf_source=\`echo \$cf_source |sed -e 's%\.$cf_so_strip\$%%'\`
- cf_target=\`basename \$cf_target\`
+ cd "\$cf_subdir\${section}" && (
+ cf_source=\`echo "\$cf_target" |sed -e 's%^.*/\\([^/][^/]*/[^/][^/]*$\\)%\\1%'\`
+ test -n "$cf_so_strip" && cf_source=\`echo "\$cf_source" |sed -e 's%\\.$cf_so_strip\$%%'\`
+ cf_target=\`basename "\$cf_target"\`
for cf_alias in \$aliases
do
- if test \$section = 1 ; then
- cf_alias=\`echo \$cf_alias|sed "\${transform}"\`
+ if test "\$section" = 1 ; then
+ cf_alias=\`echo "\$cf_alias" |sed "\${transform}"\`
fi
if test "$MANPAGE_SYMLINKS" = yes ; then
- if test -f \$cf_alias\${suffix} ; then
- if ( cmp -s \$cf_target \$cf_alias\${suffix} )
+ if test -f "\$cf_alias\${suffix}" ; then
+ if ( cmp -s "\$cf_target" "\$cf_alias\${suffix}" )
then
continue
fi
fi
- echo .. \$verb alias \$cf_alias\${suffix}
+ echo ".. \$verb alias \$cf_alias\${suffix}"
CF_EOF
case "x$LN_S" in
(*-f)
cat >>$cf_edit_man <<CF_EOF
- $LN_S \$cf_target \$cf_alias\${suffix}
+ $LN_S "\$cf_target" "\$cf_alias\${suffix}"
CF_EOF
;;
(*)
cat >>$cf_edit_man <<CF_EOF
- rm -f \$cf_alias\${suffix}
- $LN_S \$cf_target \$cf_alias\${suffix}
+ rm -f "\$cf_alias\${suffix}"
+ $LN_S "\$cf_target" "\$cf_alias\${suffix}"
CF_EOF
;;
esac
cat >>$cf_edit_man <<CF_EOF
elif test "\$cf_target" != "\$cf_alias\${suffix}" ; then
echo ".so \$cf_source" >\$TMP
CF_EOF
if test -n "$cf_compress" ; then
cat >>$cf_edit_man <<CF_EOF
if test -n "$cf_so_strip" ; then
- $cf_compress -f \$TMP
+ "$cf_compress" -f \$TMP
mv \$TMP.$cf_so_strip \$TMP
fi
CF_EOF
fi
cat >>$cf_edit_man <<CF_EOF
- echo .. \$verb alias \$cf_alias\${suffix}
- rm -f \$cf_alias\${suffix}
- \$INSTALL_DATA \$TMP \$cf_alias\${suffix}
+ echo ".. \$verb alias \$cf_alias\${suffix}"
+ rm -f "\$cf_alias\${suffix}"
+ \$INSTALL_DATA \$TMP "\$cf_alias\${suffix}"
fi
done
)
)
- elif test \$verb = removing ; then
- test -f \$cf_target && (
- echo \$verb \$cf_target
- rm -f \$cf_target
+ elif test "\$verb" = removing ; then
+ test -f "\$cf_target" && (
+ echo "\$verb \$cf_target"
+ rm -f "\$cf_target"
)
- test -d \$cf_subdir\${section} &&
+ test -d "\$cf_subdir\${section}" &&
test -n "\$aliases" && (
- cd \$cf_subdir\${section} && (
+ cd "\$cf_subdir\${section}" && (
for cf_alias in \$aliases
do
- if test \$section = 1 ; then
- cf_alias=\`echo \$cf_alias|sed "\${transform}"\`
+ if test "\$section" = 1 ; then
+ cf_alias=\`echo "\$cf_alias" |sed "\${transform}"\`
fi
- echo .. \$verb alias \$cf_alias\${suffix}
- rm -f \$cf_alias\${suffix}
+ echo ".. \$verb alias \$cf_alias\${suffix}"
+ rm -f "\$cf_alias\${suffix}"
done
)
)
else
# echo ".hy 0"
cat \$TMP
fi
;;
esac
done
-if test $cf_inboth = yes ; then
-if test \$form != format ; then
- $SHELL \$0 format \$verb \$mandir \$srcdir \$*
+if test "$cf_inboth" = yes ; then
+if test "\$form" != format ; then
+ $SHELL "\$0" format "\$verb" "\$mandir" "\$srcdir" "\$@"
fi
fi
exit 0
CF_EOF
-chmod 755 $cf_edit_man
+chmod 755 "$cf_edit_man"
###############################################################################
### Note that some functions (such as const) are normally disabled anyway.
-echo "$as_me:14240: checking if you want to build with function extensions" >&5
+echo "$as_me:14644: checking if you want to build with function extensions" >&5
echo $ECHO_N "checking if you want to build with function extensions... $ECHO_C" >&6
# Check whether --enable-ext-funcs or --disable-ext-funcs was given.
if test "${enable_ext_funcs+set}" = set; then
enableval="$enable_ext_funcs"
with_ext_funcs=$enableval
else
with_ext_funcs=yes
fi;
-echo "$as_me:14250: result: $with_ext_funcs" >&5
+echo "$as_me:14654: result: $with_ext_funcs" >&5
echo "${ECHO_T}$with_ext_funcs" >&6
if test "x$with_ext_funcs" = xyes ; then
NCURSES_EXT_FUNCS=1
cat >>confdefs.h <<\EOF
#define NCURSES_EXT_FUNCS 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_ASSUME_DEFAULT_COLORS 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_CURSES_VERSION 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_HAS_KEY 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_RESIZETERM 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_RESIZE_TERM 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_TERM_ENTRY_H 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_USE_DEFAULT_COLORS 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_USE_EXTENDED_NAMES 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_USE_SCREEN 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_USE_WINDOW 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_WRESIZE 1
EOF
GENERATED_EXT_FUNCS=generated
test "x$with_ext_funcs" = xyes || cf_dft_ext_spfuncs=no
else
NCURSES_EXT_FUNCS=0
GENERATED_EXT_FUNCS=
fi
-echo "$as_me:14310: checking if you want to build with SCREEN extensions" >&5
+echo "$as_me:14714: checking if you want to build with SCREEN extensions" >&5
echo $ECHO_N "checking if you want to build with SCREEN extensions... $ECHO_C" >&6
# Check whether --enable-sp-funcs or --disable-sp-funcs was given.
if test "${enable_sp_funcs+set}" = set; then
enableval="$enable_sp_funcs"
with_sp_funcs=$enableval
else
with_sp_funcs=$cf_dft_ext_spfuncs
fi;
-echo "$as_me:14320: result: $with_sp_funcs" >&5
+echo "$as_me:14724: result: $with_sp_funcs" >&5
echo "${ECHO_T}$with_sp_funcs" >&6
if test "x$with_sp_funcs" = xyes ; then
NCURSES_SP_FUNCS=1
cat >>confdefs.h <<\EOF
#define NCURSES_SP_FUNCS 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_TPUTS_SP 1
EOF
GENERATED_SP_FUNCS=generated
else
NCURSES_SP_FUNCS=0
GENERATED_SP_FUNCS=
fi
-echo "$as_me:14339: checking if you want to build with terminal-driver" >&5
+echo "$as_me:14743: checking if you want to build with terminal-driver" >&5
echo $ECHO_N "checking if you want to build with terminal-driver... $ECHO_C" >&6
# Check whether --enable-term-driver or --disable-term-driver was given.
if test "${enable_term_driver+set}" = set; then
enableval="$enable_term_driver"
with_term_driver=$enableval
else
with_term_driver=no
fi;
-echo "$as_me:14349: result: $with_term_driver" >&5
+echo "$as_me:14753: result: $with_term_driver" >&5
echo "${ECHO_T}$with_term_driver" >&6
if test "x$with_term_driver" = xyes ; then
cat >>confdefs.h <<\EOF
#define USE_TERM_DRIVER 1
EOF
if test "x$with_termlib" != xno ; then
- { { echo "$as_me:14358: error: The term-driver option conflicts with the termlib option" >&5
+ { { echo "$as_me:14762: error: The term-driver option conflicts with the termlib option" >&5
echo "$as_me: error: The term-driver option conflicts with the termlib option" >&2;}
{ (exit 1); exit 1; }; }
fi
if test "x$with_sp_funcs" != xyes ; then
- { { echo "$as_me:14363: error: The term-driver option relies upon sp-funcs" >&5
+ { { echo "$as_me:14767: error: The term-driver option relies upon sp-funcs" >&5
echo "$as_me: error: The term-driver option relies upon sp-funcs" >&2;}
{ (exit 1); exit 1; }; }
fi
fi
### use option --enable-const to turn on use of const beyond that in XSI.
-echo "$as_me:14370: checking for extended use of const keyword" >&5
+echo "$as_me:14774: checking for extended use of const keyword" >&5
echo $ECHO_N "checking for extended use of const keyword... $ECHO_C" >&6
# Check whether --enable-const or --disable-const was given.
if test "${enable_const+set}" = set; then
enableval="$enable_const"
with_ext_const=$enableval
else
with_ext_const=$cf_dft_ext_const
fi;
-echo "$as_me:14380: result: $with_ext_const" >&5
+echo "$as_me:14784: result: $with_ext_const" >&5
echo "${ECHO_T}$with_ext_const" >&6
NCURSES_CONST='/*nothing*/'
if test "x$with_ext_const" = xyes ; then
NCURSES_CONST=const
fi
### use option --enable-ext-colors to turn on use of colors beyond 16.
-echo "$as_me:14388: checking if you want to use extended colors" >&5
+echo "$as_me:14792: checking if you want to use extended colors" >&5
echo $ECHO_N "checking if you want to use extended colors... $ECHO_C" >&6
# Check whether --enable-ext-colors or --disable-ext-colors was given.
if test "${enable_ext_colors+set}" = set; then
enableval="$enable_ext_colors"
with_ext_colors=$enableval
else
with_ext_colors=$cf_dft_ext_colors
fi;
-echo "$as_me:14398: result: $with_ext_colors" >&5
+echo "$as_me:14802: result: $with_ext_colors" >&5
echo "${ECHO_T}$with_ext_colors" >&6
NCURSES_EXT_COLORS=0
if test "x$with_ext_colors" = xyes ; then
if test "x$with_widec" != xyes ; then
- { echo "$as_me:14403: WARNING: This option applies only to wide-character library" >&5
+ { echo "$as_me:14807: WARNING: This option applies only to wide-character library" >&5
echo "$as_me: WARNING: This option applies only to wide-character library" >&2;}
else
# cannot be ABI 5 since it changes sizeof(cchar_t)
if test "${with_abi_version+set}" != set; then
- case $cf_cv_rel_version in
+ case "$cf_cv_rel_version" in
(5.*)
cf_cv_rel_version=6.0
cf_cv_abi_version=6
- { echo "$as_me:14413: WARNING: overriding ABI version to $cf_cv_abi_version" >&5
+ { echo "$as_me:14817: WARNING: overriding ABI version to $cf_cv_abi_version" >&5
echo "$as_me: WARNING: overriding ABI version to $cf_cv_abi_version" >&2;}
;;
esac
fi
NCURSES_EXT_COLORS=1
cat >>confdefs.h <<\EOF
#define NCURSES_EXT_COLORS 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_ALLOC_PAIR 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_INIT_EXTENDED_COLOR 1
EOF
cat >>confdefs.h <<\EOF
#define HAVE_RESET_COLOR_PAIRS 1
EOF
fi
fi
### use option --enable-ext-mouse to modify coding to support 5-button mice
-echo "$as_me:14441: checking if you want to use extended mouse encoding" >&5
+echo "$as_me:14845: checking if you want to use extended mouse encoding" >&5
echo $ECHO_N "checking if you want to use extended mouse encoding... $ECHO_C" >&6
# Check whether --enable-ext-mouse or --disable-ext-mouse was given.
if test "${enable_ext_mouse+set}" = set; then
enableval="$enable_ext_mouse"
with_ext_mouse=$enableval
else
with_ext_mouse=$cf_dft_ext_mouse
fi;
-echo "$as_me:14451: result: $with_ext_mouse" >&5
+echo "$as_me:14855: result: $with_ext_mouse" >&5
echo "${ECHO_T}$with_ext_mouse" >&6
NCURSES_MOUSE_VERSION=1
if test "x$with_ext_mouse" = xyes ; then
NCURSES_MOUSE_VERSION=2
if test "${with_abi_version+set}" != set; then
- case $cf_cv_rel_version in
+ case "$cf_cv_rel_version" in
(5.*)
cf_cv_rel_version=6.0
cf_cv_abi_version=6
- { echo "$as_me:14462: WARNING: overriding ABI version to $cf_cv_abi_version" >&5
+ { echo "$as_me:14866: WARNING: overriding ABI version to $cf_cv_abi_version" >&5
echo "$as_me: WARNING: overriding ABI version to $cf_cv_abi_version" >&2;}
;;
esac
fi
fi
### use option --enable-ext-putwin to turn on extended screendumps
-echo "$as_me:14471: checking if you want to use extended putwin/screendump" >&5
+echo "$as_me:14875: checking if you want to use extended putwin/screendump" >&5
echo $ECHO_N "checking if you want to use extended putwin/screendump... $ECHO_C" >&6
# Check whether --enable-ext-putwin or --disable-ext-putwin was given.
if test "${enable_ext_putwin+set}" = set; then
enableval="$enable_ext_putwin"
with_ext_putwin=$enableval
else
with_ext_putwin=$cf_dft_ext_putwin
fi;
-echo "$as_me:14481: result: $with_ext_putwin" >&5
+echo "$as_me:14885: result: $with_ext_putwin" >&5
echo "${ECHO_T}$with_ext_putwin" >&6
if test "x$with_ext_putwin" = xyes ; then
cat >>confdefs.h <<\EOF
#define NCURSES_EXT_PUTWIN 1
EOF
fi
-echo "$as_me:14491: checking if you want \$NCURSES_NO_PADDING code" >&5
+echo "$as_me:14895: checking if you want \$NCURSES_NO_PADDING code" >&5
echo $ECHO_N "checking if you want \$NCURSES_NO_PADDING code... $ECHO_C" >&6
# Check whether --enable-no-padding or --disable-no-padding was given.
if test "${enable_no_padding+set}" = set; then
enableval="$enable_no_padding"
with_no_padding=$enableval
else
with_no_padding=$with_ext_funcs
fi;
-echo "$as_me:14501: result: $with_no_padding" >&5
+echo "$as_me:14905: result: $with_no_padding" >&5
echo "${ECHO_T}$with_no_padding" >&6
test "x$with_no_padding" = xyes &&
cat >>confdefs.h <<\EOF
#define NCURSES_NO_PADDING 1
EOF
### use option --enable-sigwinch to turn on use of SIGWINCH logic
-echo "$as_me:14509: checking if you want SIGWINCH handler" >&5
+echo "$as_me:14913: checking if you want SIGWINCH handler" >&5
echo $ECHO_N "checking if you want SIGWINCH handler... $ECHO_C" >&6
# Check whether --enable-sigwinch or --disable-sigwinch was given.
if test "${enable_sigwinch+set}" = set; then
enableval="$enable_sigwinch"
with_sigwinch=$enableval
else
with_sigwinch=$with_ext_funcs
fi;
-echo "$as_me:14519: result: $with_sigwinch" >&5
+echo "$as_me:14923: result: $with_sigwinch" >&5
echo "${ECHO_T}$with_sigwinch" >&6
test "x$with_sigwinch" = xyes &&
cat >>confdefs.h <<\EOF
#define USE_SIGWINCH 1
EOF
### use option --enable-tcap-names to allow user to define new capabilities
-echo "$as_me:14527: checking if you want user-definable terminal capabilities like termcap" >&5
+echo "$as_me:14931: checking if you want user-definable terminal capabilities like termcap" >&5
echo $ECHO_N "checking if you want user-definable terminal capabilities like termcap... $ECHO_C" >&6
# Check whether --enable-tcap-names or --disable-tcap-names was given.
if test "${enable_tcap_names+set}" = set; then
enableval="$enable_tcap_names"
with_tcap_names=$enableval
else
with_tcap_names=$with_ext_funcs
fi;
-echo "$as_me:14537: result: $with_tcap_names" >&5
+echo "$as_me:14941: result: $with_tcap_names" >&5
echo "${ECHO_T}$with_tcap_names" >&6
NCURSES_XNAMES=0
test "x$with_tcap_names" = xyes && NCURSES_XNAMES=1
##############################################################################
-echo "$as_me:14544: checking if you want to link with the pthread library" >&5
+echo "$as_me:14948: checking if you want to link with the pthread library" >&5
echo $ECHO_N "checking if you want to link with the pthread library... $ECHO_C" >&6
# Check whether --with-pthread or --without-pthread was given.
if test "${with_pthread+set}" = set; then
withval="$with_pthread"
with_pthread=$withval
else
with_pthread=no
fi;
-echo "$as_me:14554: result: $with_pthread" >&5
+echo "$as_me:14958: result: $with_pthread" >&5
echo "${ECHO_T}$with_pthread" >&6
if test "$with_pthread" != no ; then
- echo "$as_me:14558: checking for pthread.h" >&5
+ echo "$as_me:14962: checking for pthread.h" >&5
echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6
if test "${ac_cv_header_pthread_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 14564 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 14968 "configure"
#include "confdefs.h"
#include <pthread.h>
_ACEOF
-if { (eval echo "$as_me:14568: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:14972: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:14574: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
+ echo "$as_me:14978: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
else
ac_cpp_err=
fi
else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
ac_cv_header_pthread_h=yes
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ cat "conftest.$ac_ext" >&5
ac_cv_header_pthread_h=no
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
fi
-echo "$as_me:14593: result: $ac_cv_header_pthread_h" >&5
+echo "$as_me:14997: result: $ac_cv_header_pthread_h" >&5
echo "${ECHO_T}$ac_cv_header_pthread_h" >&6
-if test $ac_cv_header_pthread_h = yes; then
+if test "$ac_cv_header_pthread_h" = yes; then
cat >>confdefs.h <<\EOF
#define HAVE_PTHREADS_H 1
EOF
for cf_lib_pthread in pthread c_r
do
- echo "$as_me:14603: checking if we can link with the $cf_lib_pthread library" >&5
+ echo "$as_me:15007: checking if we can link with the $cf_lib_pthread library" >&5
echo $ECHO_N "checking if we can link with the $cf_lib_pthread library... $ECHO_C" >&6
cf_save_LIBS="$LIBS"
cf_add_libs="$LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in -l$cf_lib_pthread; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
LIBS="$cf_add_libs"
- cat >conftest.$ac_ext <<_ACEOF
-#line 14624 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 15028 "configure"
#include "confdefs.h"
#include <pthread.h>
int
main (void)
{
int rc = pthread_create(0,0,0,0);
int r2 = pthread_mutexattr_settype(0, 0);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:14641: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:15045: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:14644: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:14647: \"$ac_try\"") >&5
+ echo "$as_me:15048: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:15051: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:14650: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:15054: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
with_pthread=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
with_pthread=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
LIBS="$cf_save_LIBS"
- echo "$as_me:14660: result: $with_pthread" >&5
+ echo "$as_me:15064: result: $with_pthread" >&5
echo "${ECHO_T}$with_pthread" >&6
test "$with_pthread" = yes && break
done
if test "$with_pthread" = yes ; then
cf_add_libs="$LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in -l$cf_lib_pthread; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
LIBS="$cf_add_libs"
cat >>confdefs.h <<\EOF
#define HAVE_LIBPTHREADS 1
EOF
else
- { { echo "$as_me:14688: error: Cannot link with pthread library" >&5
+ { { echo "$as_me:15092: error: Cannot link with pthread library" >&5
echo "$as_me: error: Cannot link with pthread library" >&2;}
{ (exit 1); exit 1; }; }
fi
fi
fi
if test "x$with_pthread" != xno; then
- echo "$as_me:14698: checking for pthread_kill" >&5
+ echo "$as_me:15102: checking for pthread_kill" >&5
echo $ECHO_N "checking for pthread_kill... $ECHO_C" >&6
if test "${ac_cv_func_pthread_kill+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 14704 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 15108 "configure"
#include "confdefs.h"
#define pthread_kill autoconf_temporary
#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
#undef pthread_kill
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char pthread_kill (void);
int
main (void)
{
/* The GNU C library defines stubs for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_pthread_kill) || defined (__stub___pthread_kill)
#error found stub for pthread_kill
#endif
return pthread_kill ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:14735: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:15139: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:14738: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:14741: \"$ac_try\"") >&5
+ echo "$as_me:15142: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:15145: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:14744: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:15148: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_func_pthread_kill=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_cv_func_pthread_kill=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:14754: result: $ac_cv_func_pthread_kill" >&5
+echo "$as_me:15158: result: $ac_cv_func_pthread_kill" >&5
echo "${ECHO_T}$ac_cv_func_pthread_kill" >&6
-if test $ac_cv_func_pthread_kill = yes; then
+if test "$ac_cv_func_pthread_kill" = yes; then
- echo "$as_me:14758: checking if you want to allow EINTR in wgetch with pthreads" >&5
+ echo "$as_me:15162: checking if you want to allow EINTR in wgetch with pthreads" >&5
echo $ECHO_N "checking if you want to allow EINTR in wgetch with pthreads... $ECHO_C" >&6
# Check whether --enable-pthreads-eintr or --disable-pthreads-eintr was given.
if test "${enable_pthreads_eintr+set}" = set; then
enableval="$enable_pthreads_eintr"
use_pthreads_eintr=$enableval
else
use_pthreads_eintr=no
fi;
- echo "$as_me:14768: result: $use_pthreads_eintr" >&5
+ echo "$as_me:15172: result: $use_pthreads_eintr" >&5
echo "${ECHO_T}$use_pthreads_eintr" >&6
if test "x$use_pthreads_eintr" = xyes ; then
cat >>confdefs.h <<\EOF
#define USE_PTHREADS_EINTR 1
EOF
fi
fi
- echo "$as_me:14779: checking if you want to use weak-symbols for pthreads" >&5
+ echo "$as_me:15183: checking if you want to use weak-symbols for pthreads" >&5
echo $ECHO_N "checking if you want to use weak-symbols for pthreads... $ECHO_C" >&6
# Check whether --enable-weak-symbols or --disable-weak-symbols was given.
if test "${enable_weak_symbols+set}" = set; then
enableval="$enable_weak_symbols"
use_weak_symbols=$enableval
else
use_weak_symbols=no
fi;
- echo "$as_me:14789: result: $use_weak_symbols" >&5
+ echo "$as_me:15193: result: $use_weak_symbols" >&5
echo "${ECHO_T}$use_weak_symbols" >&6
if test "x$use_weak_symbols" = xyes ; then
-echo "$as_me:14793: checking if $CC supports weak symbols" >&5
+echo "$as_me:15197: checking if $CC supports weak symbols" >&5
echo $ECHO_N "checking if $CC supports weak symbols... $ECHO_C" >&6
if test "${cf_cv_weak_symbols+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-cat >conftest.$ac_ext <<_ACEOF
-#line 14800 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 15204 "configure"
#include "confdefs.h"
#include <stdio.h>
int
main (void)
{
#if defined(__GNUC__)
# if defined __USE_ISOC99
# define _cat_pragma(exp) _Pragma(#exp)
# define _weak_pragma(exp) _cat_pragma(weak name)
# else
# define _weak_pragma(exp)
# endif
# define _declare(name) __extension__ extern __typeof__(name) name
# define weak_symbol(name) _weak_pragma(name) _declare(name) __attribute__((weak))
#endif
weak_symbol(fopen);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:14826: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:15230: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:14829: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:14832: \"$ac_try\"") >&5
+ echo "$as_me:15233: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:15236: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:14835: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:15239: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_weak_symbols=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_weak_symbols=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:14846: result: $cf_cv_weak_symbols" >&5
+echo "$as_me:15250: result: $cf_cv_weak_symbols" >&5
echo "${ECHO_T}$cf_cv_weak_symbols" >&6
else
cf_cv_weak_symbols=no
fi
if test "x$cf_cv_weak_symbols" = xyes ; then
cat >>confdefs.h <<\EOF
#define USE_WEAK_SYMBOLS 1
EOF
fi
fi
PTHREAD=
if test "x$with_pthread" = "xyes" ; then
cat >>confdefs.h <<\EOF
#define USE_PTHREADS 1
EOF
enable_reentrant=yes
if test "x$cf_cv_weak_symbols" = xyes ; then
PTHREAD=-lpthread
cf_add_libs="$PRIVATE_LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in -lpthread; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
PRIVATE_LIBS="$cf_add_libs"
fi
fi
# Reentrant code has to be opaque; there's little advantage to making ncurses
# opaque outside of that, so there is no --enable-opaque option. We can use
# this option without --with-pthreads, but this will be always set for
# pthreads.
-echo "$as_me:14896: checking if you want reentrant code" >&5
+echo "$as_me:15300: checking if you want reentrant code" >&5
echo $ECHO_N "checking if you want reentrant code... $ECHO_C" >&6
# Check whether --enable-reentrant or --disable-reentrant was given.
if test "${enable_reentrant+set}" = set; then
enableval="$enable_reentrant"
with_reentrant=$enableval
else
with_reentrant=no
fi;
-echo "$as_me:14906: result: $with_reentrant" >&5
+echo "$as_me:15310: result: $with_reentrant" >&5
echo "${ECHO_T}$with_reentrant" >&6
if test "x$with_reentrant" = xyes ; then
cf_cv_enable_reentrant=1
cf_cv_enable_opaque="NCURSES_INTERNALS"
NCURSES_SIZE_T=int
if test "x$cf_cv_weak_symbols" = xyes ; then
# remove pthread library from $LIBS
LIBS=`echo "$LIBS" | sed -e 's/-lpthread[ ]//g' -e 's/-lpthread$//'`
cf_add_libs="$TEST_LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in -lpthread; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
TEST_LIBS="$cf_add_libs"
cf_add_libs="$TEST_LIBS2"
# reverse order
cf_add_0lib=
for cf_add_1lib in -lpthread; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
TEST_LIBS2="$cf_add_libs"
cf_add_libs="$PRIVATE_LIBS"
# reverse order
cf_add_0lib=
for cf_add_1lib in -lpthread; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
PRIVATE_LIBS="$cf_add_libs"
else
# when not using weak symbols but with_reentrant,
# add 't' to the library suffix on all platforms
# except cygwin, where we only do that if ALSO
# compiling with full thread support.
case "$host" in
(*cygwin* | *msys*)
if test "$with_pthread" = "yes" ; then
if test "x$disable_lib_suffixes" = "xno" ; then
LIB_SUFFIX="t${LIB_SUFFIX}"
fi
fi ;;
(*)
if test "x$disable_lib_suffixes" = "xno" ; then
LIB_SUFFIX="t${LIB_SUFFIX}"
fi
;;
esac
fi
cat >>confdefs.h <<\EOF
#define USE_REENTRANT 1
EOF
if test "${with_abi_version+set}" != set; then
- case $cf_cv_rel_version in
+ case "$cf_cv_rel_version" in
(5.*)
cf_cv_rel_version=6.0
cf_cv_abi_version=6
- { echo "$as_me:14994: WARNING: overriding ABI version to $cf_cv_abi_version" >&5
+ { echo "$as_me:15398: WARNING: overriding ABI version to $cf_cv_abi_version" >&5
echo "$as_me: WARNING: overriding ABI version to $cf_cv_abi_version" >&2;}
;;
esac
fi
else
cf_cv_enable_reentrant=0
cf_cv_enable_opaque="NCURSES_OPAQUE"
NCURSES_SIZE_T=short
fi
-echo "$as_me:15006: checking if you want opaque curses-library structures" >&5
+echo "$as_me:15410: checking if you want opaque curses-library structures" >&5
echo $ECHO_N "checking if you want opaque curses-library structures... $ECHO_C" >&6
# Check whether --enable-opaque-curses or --disable-opaque-curses was given.
if test "${enable_opaque_curses+set}" = set; then
enableval="$enable_opaque_curses"
test "$enableval" != yes && enableval=no
if test "$enableval" != "no" ; then
enable_opaque_curses=yes
else
test "$cf_cv_enable_reentrant" = 1 && enable_opaque_curses=yes
test "$cf_cv_enable_reentrant" = 1 || enable_opaque_curses=no
fi
else
enableval=no
test "$cf_cv_enable_reentrant" = 1 && enable_opaque_curses=yes
test "$cf_cv_enable_reentrant" = 1 || enable_opaque_curses=no
fi;
-echo "$as_me:15028: result: $enable_opaque_curses" >&5
+echo "$as_me:15432: result: $enable_opaque_curses" >&5
echo "${ECHO_T}$enable_opaque_curses" >&6
test "$cf_cv_enable_reentrant" = 1 && \
test "$enable_opaque_curses" = no && \
-{ { echo "$as_me:15033: error: reentrant configuration requires opaque library" >&5
+{ { echo "$as_me:15437: error: reentrant configuration requires opaque library" >&5
echo "$as_me: error: reentrant configuration requires opaque library" >&2;}
{ (exit 1); exit 1; }; }
-echo "$as_me:15037: checking if you want opaque form-library structures" >&5
+echo "$as_me:15441: checking if you want opaque form-library structures" >&5
echo $ECHO_N "checking if you want opaque form-library structures... $ECHO_C" >&6
# Check whether --enable-opaque-form or --disable-opaque-form was given.
if test "${enable_opaque_form+set}" = set; then
enableval="$enable_opaque_form"
enable_opaque_form=yes
else
enable_opaque_form=no
fi;
-echo "$as_me:15047: result: $enable_opaque_form" >&5
+echo "$as_me:15451: result: $enable_opaque_form" >&5
echo "${ECHO_T}$enable_opaque_form" >&6
-echo "$as_me:15050: checking if you want opaque menu-library structures" >&5
+echo "$as_me:15454: checking if you want opaque menu-library structures" >&5
echo $ECHO_N "checking if you want opaque menu-library structures... $ECHO_C" >&6
# Check whether --enable-opaque-menu or --disable-opaque-menu was given.
if test "${enable_opaque_menu+set}" = set; then
enableval="$enable_opaque_menu"
enable_opaque_menu=yes
else
enable_opaque_menu=no
fi;
-echo "$as_me:15060: result: $enable_opaque_menu" >&5
+echo "$as_me:15464: result: $enable_opaque_menu" >&5
echo "${ECHO_T}$enable_opaque_menu" >&6
-echo "$as_me:15063: checking if you want opaque panel-library structures" >&5
+echo "$as_me:15467: checking if you want opaque panel-library structures" >&5
echo $ECHO_N "checking if you want opaque panel-library structures... $ECHO_C" >&6
# Check whether --enable-opaque-panel or --disable-opaque-panel was given.
if test "${enable_opaque_panel+set}" = set; then
enableval="$enable_opaque_panel"
enable_opaque_panel=yes
else
enable_opaque_panel=no
fi;
-echo "$as_me:15073: result: $enable_opaque_panel" >&5
+echo "$as_me:15477: result: $enable_opaque_panel" >&5
echo "${ECHO_T}$enable_opaque_panel" >&6
NCURSES_OPAQUE=0; test "$enable_opaque_curses" = yes && NCURSES_OPAQUE=1
NCURSES_OPAQUE_FORM=0; test "$enable_opaque_form" = yes && NCURSES_OPAQUE_FORM=1
NCURSES_OPAQUE_MENU=0; test "$enable_opaque_menu" = yes && NCURSES_OPAQUE_MENU=1
NCURSES_OPAQUE_PANEL=0; test "$enable_opaque_panel" = yes && NCURSES_OPAQUE_PANEL=1
### Allow using a different wrap-prefix
if test "$cf_cv_enable_reentrant" != 0 || test "$BROKEN_LINKER" = 1 ; then
- echo "$as_me:15083: checking for prefix used to wrap public variables" >&5
+ echo "$as_me:15487: checking for prefix used to wrap public variables" >&5
echo $ECHO_N "checking for prefix used to wrap public variables... $ECHO_C" >&6
# Check whether --with-wrap-prefix or --without-wrap-prefix was given.
if test "${with_wrap_prefix+set}" = set; then
withval="$with_wrap_prefix"
NCURSES_WRAP_PREFIX=$withval
else
NCURSES_WRAP_PREFIX=_nc_
fi;
- echo "$as_me:15093: result: $NCURSES_WRAP_PREFIX" >&5
+ echo "$as_me:15497: result: $NCURSES_WRAP_PREFIX" >&5
echo "${ECHO_T}$NCURSES_WRAP_PREFIX" >&6
else
NCURSES_WRAP_PREFIX=_nc_
fi
cat >>confdefs.h <<EOF
#define NCURSES_WRAP_PREFIX "$NCURSES_WRAP_PREFIX"
EOF
###############################################################################
# These options are relatively safe to experiment with.
-echo "$as_me:15106: checking if you want all development code" >&5
+echo "$as_me:15510: checking if you want all development code" >&5
echo $ECHO_N "checking if you want all development code... $ECHO_C" >&6
# Check whether --with-develop or --without-develop was given.
if test "${with_develop+set}" = set; then
withval="$with_develop"
with_develop=$withval
else
with_develop=no
fi;
-echo "$as_me:15116: result: $with_develop" >&5
+echo "$as_me:15520: result: $with_develop" >&5
echo "${ECHO_T}$with_develop" >&6
### use option --enable-hard-tabs to turn on use of hard-tabs optimize
-echo "$as_me:15120: checking if you want hard-tabs code" >&5
+echo "$as_me:15524: checking if you want hard-tabs code" >&5
echo $ECHO_N "checking if you want hard-tabs code... $ECHO_C" >&6
# Check whether --enable-hard-tabs or --disable-hard-tabs was given.
if test "${enable_hard_tabs+set}" = set; then
enableval="$enable_hard_tabs"
else
enable_hard_tabs=$with_develop
fi;
-echo "$as_me:15130: result: $enable_hard_tabs" >&5
+echo "$as_me:15534: result: $enable_hard_tabs" >&5
echo "${ECHO_T}$enable_hard_tabs" >&6
test "x$enable_hard_tabs" = xyes &&
cat >>confdefs.h <<\EOF
#define USE_HARD_TABS 1
EOF
### use option --enable-xmc-glitch to turn on use of magic-cookie optimize
-echo "$as_me:15138: checking if you want limited support for xmc" >&5
+echo "$as_me:15542: checking if you want limited support for xmc" >&5
echo $ECHO_N "checking if you want limited support for xmc... $ECHO_C" >&6
# Check whether --enable-xmc-glitch or --disable-xmc-glitch was given.
if test "${enable_xmc_glitch+set}" = set; then
enableval="$enable_xmc_glitch"
else
enable_xmc_glitch=$with_develop
fi;
-echo "$as_me:15148: result: $enable_xmc_glitch" >&5
+echo "$as_me:15552: result: $enable_xmc_glitch" >&5
echo "${ECHO_T}$enable_xmc_glitch" >&6
test "x$enable_xmc_glitch" = xyes &&
cat >>confdefs.h <<\EOF
#define USE_XMC_SUPPORT 1
EOF
###############################################################################
# These are just experimental, probably should not be in a package:
-echo "$as_me:15158: checking if you do not want to assume colors are white-on-black" >&5
+echo "$as_me:15562: checking if you do not want to assume colors are white-on-black" >&5
echo $ECHO_N "checking if you do not want to assume colors are white-on-black... $ECHO_C" >&6
# Check whether --enable-assumed-color or --disable-assumed-color was given.
if test "${enable_assumed_color+set}" = set; then
enableval="$enable_assumed_color"
with_assumed_color=$enableval
else
with_assumed_color=yes
fi;
-echo "$as_me:15168: result: $with_assumed_color" >&5
+echo "$as_me:15572: result: $with_assumed_color" >&5
echo "${ECHO_T}$with_assumed_color" >&6
test "x$with_assumed_color" = xyes &&
cat >>confdefs.h <<\EOF
#define USE_ASSUMED_COLOR 1
EOF
### use option --enable-hashmap to turn on use of hashmap scrolling logic
-echo "$as_me:15176: checking if you want hashmap scrolling-optimization code" >&5
+echo "$as_me:15580: checking if you want hashmap scrolling-optimization code" >&5
echo $ECHO_N "checking if you want hashmap scrolling-optimization code... $ECHO_C" >&6
# Check whether --enable-hashmap or --disable-hashmap was given.
if test "${enable_hashmap+set}" = set; then
enableval="$enable_hashmap"
with_hashmap=$enableval
else
with_hashmap=yes
fi;
-echo "$as_me:15186: result: $with_hashmap" >&5
+echo "$as_me:15590: result: $with_hashmap" >&5
echo "${ECHO_T}$with_hashmap" >&6
test "x$with_hashmap" = xyes &&
cat >>confdefs.h <<\EOF
#define USE_HASHMAP 1
EOF
### use option --enable-colorfgbg to turn on use of $COLORFGBG environment
-echo "$as_me:15194: checking if you want colorfgbg code" >&5
+echo "$as_me:15598: checking if you want colorfgbg code" >&5
echo $ECHO_N "checking if you want colorfgbg code... $ECHO_C" >&6
# Check whether --enable-colorfgbg or --disable-colorfgbg was given.
if test "${enable_colorfgbg+set}" = set; then
enableval="$enable_colorfgbg"
with_colorfgbg=$enableval
else
with_colorfgbg=no
fi;
-echo "$as_me:15204: result: $with_colorfgbg" >&5
+echo "$as_me:15608: result: $with_colorfgbg" >&5
echo "${ECHO_T}$with_colorfgbg" >&6
test "x$with_colorfgbg" = xyes &&
cat >>confdefs.h <<\EOF
#define USE_COLORFGBG 1
EOF
-### use option --enable-interop to turn on use of bindings used for interop
-echo "$as_me:15212: checking if you want interop bindings" >&5
-echo $ECHO_N "checking if you want interop bindings... $ECHO_C" >&6
+### use option --enable-fvisibility to turn on use of gcc-specific feature
+echo "$as_me:15616: checking if you want to use gcc -fvisibility option" >&5
+echo $ECHO_N "checking if you want to use gcc -fvisibility option... $ECHO_C" >&6
-# Check whether --enable-interop or --disable-interop was given.
-if test "${enable_interop+set}" = set; then
- enableval="$enable_interop"
- with_exp_interop=$enableval
+# Check whether --enable-fvisibility or --disable-fvisibility was given.
+if test "${enable_fvisibility+set}" = set; then
+ enableval="$enable_fvisibility"
+ cf_with_fvisibility=$enableval
else
- with_exp_interop=$cf_dft_interop
+ cf_with_fvisibility=no
fi;
-echo "$as_me:15222: result: $with_exp_interop" >&5
-echo "${ECHO_T}$with_exp_interop" >&6
+echo "$as_me:15626: result: $cf_with_fvisibility" >&5
+echo "${ECHO_T}$cf_with_fvisibility" >&6
-NCURSES_INTEROP_FUNCS=0
-test "x$with_exp_interop" = xyes && NCURSES_INTEROP_FUNCS=1
-
-echo "$as_me:15228: checking if you want experimental safe-sprintf code" >&5
-echo $ECHO_N "checking if you want experimental safe-sprintf code... $ECHO_C" >&6
+NCURSES_IMPEXP=
+NCURSES_CXX_IMPEXP=
+if test "x$cf_with_fvisibility" = xyes; then
-# Check whether --enable-safe-sprintf or --disable-safe-sprintf was given.
-if test "${enable_safe_sprintf+set}" = set; then
- enableval="$enable_safe_sprintf"
- with_safe_sprintf=$enableval
+echo "$as_me:15633: checking if $CC -fvisibility=hidden option works" >&5
+echo $ECHO_N "checking if $CC -fvisibility=hidden option works... $ECHO_C" >&6
+if test "${cf_cv_fvisibility_hidden+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- with_safe_sprintf=no
-fi;
-echo "$as_me:15238: result: $with_safe_sprintf" >&5
-echo "${ECHO_T}$with_safe_sprintf" >&6
-### use option --disable-scroll-hints to turn off use of scroll-hints scrolling logic
-# when hashmap is used scroll hints are useless
-if test "$with_hashmap" = no ; then
-echo "$as_me:15244: checking if you want to experiment without scrolling-hints code" >&5
-echo $ECHO_N "checking if you want to experiment without scrolling-hints code... $ECHO_C" >&6
+ cf_save_cflags="$CFLAGS"
+ CFLAGS="$CFLAGS -fvisibility=hidden"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 15642 "configure"
+#include "confdefs.h"
-# Check whether --enable-scroll-hints or --disable-scroll-hints was given.
-if test "${enable_scroll_hints+set}" = set; then
- enableval="$enable_scroll_hints"
- with_scroll_hints=$enableval
-else
- with_scroll_hints=yes
-fi;
-echo "$as_me:15254: result: $with_scroll_hints" >&5
-echo "${ECHO_T}$with_scroll_hints" >&6
-test "x$with_scroll_hints" = xyes &&
-cat >>confdefs.h <<\EOF
-#define USE_SCROLL_HINTS 1
-EOF
+__attribute__ ((visibility("default"))) int somefunc() {return 42;}
-fi
+int
+main (void)
+{
-echo "$as_me:15263: checking if you want wgetch-events code" >&5
-echo $ECHO_N "checking if you want wgetch-events code... $ECHO_C" >&6
+ if (somefunc()) return 1;
-# Check whether --enable-wgetch-events or --disable-wgetch-events was given.
-if test "${enable_wgetch_events+set}" = set; then
- enableval="$enable_wgetch_events"
- with_wgetch_events=$enableval
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:15658: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:15661: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:15664: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:15667: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_fvisibility_hidden=yes
else
- with_wgetch_events=no
-fi;
-echo "$as_me:15273: result: $with_wgetch_events" >&5
-echo "${ECHO_T}$with_wgetch_events" >&6
-test "x$with_wgetch_events" = xyes &&
-cat >>confdefs.h <<\EOF
-#define NCURSES_WGETCH_EVENTS 1
-EOF
-
-###############################################################################
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_fvisibility_hidden=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+ CFLAGS=$cf_save_cflags
-### use option --disable-echo to suppress full display compiling commands
+fi
+echo "$as_me:15679: result: $cf_cv_fvisibility_hidden" >&5
+echo "${ECHO_T}$cf_cv_fvisibility_hidden" >&6
-echo "$as_me:15284: checking if you want to see long compiling messages" >&5
-echo $ECHO_N "checking if you want to see long compiling messages... $ECHO_C" >&6
+ if test "x$cf_cv_fvisibility_hidden" = xyes
+ then
-# Check whether --enable-echo or --disable-echo was given.
-if test "${enable_echo+set}" = set; then
- enableval="$enable_echo"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
- ECHO_LT='--silent'
- ECHO_LD='@echo linking $@;'
- RULE_CC='@echo compiling $<'
- SHOW_CC='@echo compiling $@'
- ECHO_CC='@'
+for cf_add_cflags in -fvisibility=hidden
+do
+case "$cf_fix_cppflags" in
+(no)
+ case "$cf_add_cflags" in
+ (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
- else
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
- ECHO_LT=''
- ECHO_LD=''
- RULE_CC=''
- SHOW_CC=''
- ECHO_CC=''
+ if test "$cf_fix_cppflags" = yes ; then
- fi
-else
- enableval=yes
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
- ECHO_LT=''
- ECHO_LD=''
- RULE_CC=''
- SHOW_CC=''
- ECHO_CC=''
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
-fi;
-echo "$as_me:15318: result: $enableval" >&5
-echo "${ECHO_T}$enableval" >&6
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-if test "x$enable_echo" = xyes; then
- ECHO_LINK=
-else
- ECHO_LINK='@ echo linking $@ ... ;'
- test -n "$LIBTOOL" && LIBTOOL="$LIBTOOL --silent"
- test -n "$LIBTOOL_CXX" && LIBTOOL_CXX="$LIBTOOL_CXX --silent"
-fi
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ (*$cf_add_cflags)
+ ;;
+ (*)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
-# --disable-stripping is used for debugging
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
-echo "$as_me:15331: checking if you want to install stripped executables" >&5
-echo $ECHO_N "checking if you want to install stripped executables... $ECHO_C" >&6
+ ;;
+ esac
-# Check whether --enable-stripping or --disable-stripping was given.
-if test "${enable_stripping+set}" = set; then
- enableval="$enable_stripping"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- with_stripping=no
- else
- with_stripping=yes
- fi
-else
- enableval=yes
- with_stripping=yes
+ test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+ cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
-fi;
-echo "$as_me:15348: result: $with_stripping" >&5
-echo "${ECHO_T}$with_stripping" >&6
+ ;;
+ esac
+ ;;
+ (*)
-if test "$with_stripping" = yes
-then
- INSTALL_OPT_S="-s"
-else
- INSTALL_OPT_S=
-fi
+ test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+ cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
-: ${INSTALL:=install}
-echo "$as_me:15359: checking if install accepts -p option" >&5
-echo $ECHO_N "checking if install accepts -p option... $ECHO_C" >&6
-if test "${cf_cv_install_p+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
+ ;;
+ esac
+ ;;
+(yes)
- rm -rf conftest*
- date >conftest.in
- mkdir conftest.out
- sleep 3
- if $INSTALL -p conftest.in conftest.out 2>/dev/null
- then
- if test -f conftest.out/conftest.in
- then
- test conftest.in -nt conftest.out/conftest.in 2>conftest.err && \
- test conftest.out/conftest.in -nt conftest.in 2>conftest.err
- if test -s conftest.err
- then
- cf_cv_install_p=no
- else
- cf_cv_install_p=yes
- fi
- else
- cf_cv_install_p=no
- fi
- else
- cf_cv_install_p=no
- fi
- rm -rf conftest*
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-fi
-echo "$as_me:15390: result: $cf_cv_install_p" >&5
-echo "${ECHO_T}$cf_cv_install_p" >&6
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
-echo "$as_me:15393: checking if install needs to be told about ownership" >&5
-echo $ECHO_N "checking if install needs to be told about ownership... $ECHO_C" >&6
-case `$ac_config_guess` in
-(*minix)
- with_install_o=yes
- ;;
-(*)
- with_install_o=no
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
;;
esac
+done
-echo "$as_me:15404: result: $with_install_o" >&5
-echo "${ECHO_T}$with_install_o" >&6
-if test "x$with_install_o" = xyes
-then
- INSTALL_OPT_O=`id root|sed -e 's/uid=[0-9]*(/ -o /' -e 's/gid=[0-9]*(/ -g /' -e 's/ [^=[:space:]][^=[:space:]]*=.*/ /' -e 's/)//g'`
-else
- INSTALL_OPT_O=
-fi
+if test -n "$cf_new_cflags" ; then
+
+ test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+ CFLAGS="${CFLAGS}$cf_new_cflags"
-# If we're avoiding relinking of shared libraries during install, that is to
-# avoid modifying the build-tree. For the same reason, avoid doing ranlib if
-# the install program has "-p" (for preserving timestamps).
-cf_cv_do_reranlib=yes
-if test "x$cf_cv_install_p" = xyes
-then
- if test "x$cf_cv_do_relink" != xyes
- then
- cf_cv_do_reranlib=no
- INSTALL_OPT_P="-p"
- INSTALL_LIB="$INSTALL_LIB $INSTALL_OPT_P"
- fi
fi
-### use option --enable-warnings to turn on all gcc warnings
-echo "$as_me:15428: checking if you want to see compiler warnings" >&5
-echo $ECHO_N "checking if you want to see compiler warnings... $ECHO_C" >&6
+if test -n "$cf_new_cppflags" ; then
-# Check whether --enable-warnings or --disable-warnings was given.
-if test "${enable_warnings+set}" = set; then
- enableval="$enable_warnings"
- with_warnings=$enableval
-fi;
-echo "$as_me:15436: result: $with_warnings" >&5
-echo "${ECHO_T}$with_warnings" >&6
+ test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+ CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
+fi
-if test "x$with_warnings" = "xyes"; then
+if test -n "$cf_new_extra_cppflags" ; then
- ADAFLAGS="$ADAFLAGS -gnatg"
+ test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+ EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
-if test "x$have_x" = xyes; then
+fi
-cf_save_LIBS_CF_CONST_X_STRING="$LIBS"
-cf_save_CFLAGS_CF_CONST_X_STRING="$CFLAGS"
-cf_save_CPPFLAGS_CF_CONST_X_STRING="$CPPFLAGS"
-LIBS="$LIBS ${X_PRE_LIBS} ${X_LIBS} ${X_EXTRA_LIBS}"
-for cf_X_CFLAGS in $X_CFLAGS
-do
- case "x$cf_X_CFLAGS" in
- x-[IUD]*)
- CPPFLAGS="$CPPFLAGS $cf_X_CFLAGS"
- ;;
- *)
- CFLAGS="$CFLAGS $cf_X_CFLAGS"
- ;;
- esac
-done
+ NCURSES_IMPEXP="__attribute__ ((visibility(\"default\")))"
+ fi
+ if test -n "$CXX"
+ then
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_main_return="return"
+
+echo "$as_me:15794: checking if $CXX -fvisibility=hidden option works" >&5
+echo $ECHO_N "checking if $CXX -fvisibility=hidden option works... $ECHO_C" >&6
+if test "${cf_cv_fvisibility_hidden2+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
-cat >conftest.$ac_ext <<_ACEOF
-#line 15462 "configure"
+ cf_save_cflags="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 15803 "configure"
#include "confdefs.h"
-#include <stdlib.h>
-#include <X11/Intrinsic.h>
+__attribute__ ((visibility("default"))) int somefunc() {return 42;}
int
main (void)
{
-String foo = malloc(1)
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:15477: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:15480: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:15483: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:15486: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-echo "$as_me:15489: checking for X11/Xt const-feature" >&5
-echo $ECHO_N "checking for X11/Xt const-feature... $ECHO_C" >&6
-if test "${cf_cv_const_x_string+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 15496 "configure"
-#include "confdefs.h"
-
-#define _CONST_X_STRING /* X11R7.8 (perhaps) */
-#undef XTSTRINGDEFINES /* X11R5 and later */
-#include <stdlib.h>
-#include <X11/Intrinsic.h>
+ if (somefunc()) return 1;
-int
-main (void)
-{
-String foo = malloc(1); *foo = 0
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:15513: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:15819: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:15516: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:15519: \"$ac_try\"") >&5
+ echo "$as_me:15822: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:15825: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:15522: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- cf_cv_const_x_string=no
-
+ echo "$as_me:15828: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_fvisibility_hidden2=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-
- cf_cv_const_x_string=yes
-
+cat "conftest.$ac_ext" >&5
+cf_cv_fvisibility_hidden2=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+ CXXFLAGS=$cf_save_cflags
fi
-echo "$as_me:15537: result: $cf_cv_const_x_string" >&5
-echo "${ECHO_T}$cf_cv_const_x_string" >&6
+echo "$as_me:15840: result: $cf_cv_fvisibility_hidden2" >&5
+echo "${ECHO_T}$cf_cv_fvisibility_hidden2" >&6
-LIBS="$cf_save_LIBS_CF_CONST_X_STRING"
-CFLAGS="$cf_save_CFLAGS_CF_CONST_X_STRING"
-CPPFLAGS="$cf_save_CPPFLAGS_CF_CONST_X_STRING"
+ if test "x$cf_cv_fvisibility_hidden2" = xyes
+ then
-case $cf_cv_const_x_string in
-(no)
+cf_save_CXXFLAGS="$CFLAGS"
+CFLAGS="$CXXFLAGS"
- test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
- CPPFLAGS="${CPPFLAGS}-DXTSTRINGDEFINES"
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
- ;;
-(*)
+for cf_add_cflags in -fvisibility=hidden
+do
+case "$cf_fix_cppflags" in
+(no)
+ case "$cf_add_cflags" in
+ (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
- test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
- CPPFLAGS="${CPPFLAGS}-D_CONST_X_STRING"
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
- ;;
-esac
+ if test "$cf_fix_cppflags" = yes ; then
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- fi
-cat > conftest.$ac_ext <<EOF
-#line 15566 "${as_me:-configure}"
-int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
-EOF
-if test "$INTEL_COMPILER" = yes
-then
-# The "-wdXXX" options suppress warnings:
-# remark #1419: external declaration in primary source file
-# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
-# remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
-# remark #193: zero used for undefined preprocessing identifier
-# remark #593: variable "curs_sb_left_arrow" was set but never used
-# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
-# remark #869: parameter "tw" was never referenced
-# remark #981: operands are evaluated in unspecified order
-# warning #279: controlling expression is constant
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
- { echo "$as_me:15582: checking for $CC warning options..." >&5
-echo "$as_me: checking for $CC warning options..." >&6;}
- cf_save_CFLAGS="$CFLAGS"
- EXTRA_CFLAGS="-Wall"
- for cf_opt in \
- wd1419 \
- wd1683 \
- wd1684 \
- wd193 \
- wd593 \
- wd279 \
- wd810 \
- wd869 \
- wd981
- do
- CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
- if { (eval echo "$as_me:15598: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:15601: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- test -n "$verbose" && echo "$as_me:15603: result: ... -$cf_opt" >&5
-echo "${ECHO_T}... -$cf_opt" >&6
- EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
- fi
- done
- CFLAGS="$cf_save_CFLAGS"
-elif test "$GCC" = yes && test "$GCC_VERSION" != "unknown"
-then
- { echo "$as_me:15611: checking for $CC warning options..." >&5
-echo "$as_me: checking for $CC warning options..." >&6;}
- cf_save_CFLAGS="$CFLAGS"
- EXTRA_CFLAGS=
- cf_warn_CONST=""
- test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings"
- cf_gcc_warnings="Wignored-qualifiers Wlogical-op Wvarargs"
- test "x$CLANG_COMPILER" = xyes && cf_gcc_warnings=
- for cf_opt in W Wall \
- Wbad-function-cast \
- Wcast-align \
- Wcast-qual \
- Wdeclaration-after-statement \
- Wextra \
- Winline \
- Wmissing-declarations \
- Wmissing-prototypes \
- Wnested-externs \
- Wpointer-arith \
- Wshadow \
- Wstrict-prototypes \
- Wundef Wno-inline $cf_gcc_warnings $cf_warn_CONST Wno-unknown-pragmas Wswitch-enum
- do
- CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
- if { (eval echo "$as_me:15635: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:15638: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- test -n "$verbose" && echo "$as_me:15640: result: ... -$cf_opt" >&5
-echo "${ECHO_T}... -$cf_opt" >&6
- case $cf_opt in
- (Winline)
- case $GCC_VERSION in
- ([34].*)
- test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
-echo "${as_me:-configure}:15648: testing feature is broken in gcc $GCC_VERSION ..." 1>&5
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
- continue;;
- esac
- ;;
- (Wpointer-arith)
- case $GCC_VERSION in
- ([12].*)
- test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ (*$cf_add_cflags)
+ ;;
+ (*)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
-echo "${as_me:-configure}:15658: testing feature is broken in gcc $GCC_VERSION ..." 1>&5
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
- continue;;
- esac
;;
esac
- EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
- fi
- done
- CFLAGS="$cf_save_CFLAGS"
-fi
-rm -rf conftest*
-
- if test "x$cf_with_cxx" = xyes ; then
-
-INTEL_CPLUSPLUS=no
-
-if test "$GCC" = yes ; then
- case $host_os in
- (linux*|gnu*)
- echo "$as_me:15678: checking if this is really Intel C++ compiler" >&5
-echo $ECHO_N "checking if this is really Intel C++ compiler... $ECHO_C" >&6
- cf_save_CFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -no-gcc"
- cat >conftest.$ac_ext <<_ACEOF
-#line 15683 "configure"
-#include "confdefs.h"
-int
-main (void)
-{
+ test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+ cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
-#ifdef __INTEL_COMPILER
-#else
-make an error
-#endif
+ ;;
+ esac
+ ;;
+ (*)
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:15700: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:15703: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:15706: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:15709: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- INTEL_CPLUSPLUS=yes
-cf_save_CFLAGS="$cf_save_CFLAGS -we147"
+ test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+ cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- CXXFLAGS="$cf_save_CFLAGS"
- echo "$as_me:15720: result: $INTEL_CPLUSPLUS" >&5
-echo "${ECHO_T}$INTEL_CPLUSPLUS" >&6
;;
esac
-fi
+ ;;
+(yes)
-CLANG_CPLUSPLUS=no
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-if test "$GCC" = yes ; then
- echo "$as_me:15729: checking if this is really Clang C++ compiler" >&5
-echo $ECHO_N "checking if this is really Clang C++ compiler... $ECHO_C" >&6
- cf_save_CFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -Qunused-arguments"
- cat >conftest.$ac_ext <<_ACEOF
-#line 15734 "configure"
-#include "confdefs.h"
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
-int
-main (void)
-{
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
-#ifdef __clang__
-#else
-make an error
-#endif
+if test -n "$cf_new_cflags" ; then
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:15751: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:15754: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:15757: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:15760: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- CLANG_CPLUSPLUS=yes
-cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments"
+ test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+ CFLAGS="${CFLAGS}$cf_new_cflags"
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- CXXFLAGS="$cf_save_CFLAGS"
- echo "$as_me:15771: result: $CLANG_CPLUSPLUS" >&5
-echo "${ECHO_T}$CLANG_CPLUSPLUS" >&6
+
+if test -n "$cf_new_cppflags" ; then
+
+ test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+ CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
fi
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+if test -n "$cf_new_extra_cppflags" ; then
-cat > conftest.$ac_ext <<EOF
-#line 15783 "configure"
-int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
-EOF
+ test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+ EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
-if test "$INTEL_CPLUSPLUS" = yes
-then
-# The "-wdXXX" options suppress warnings:
-# remark #1419: external declaration in primary source file
-# remark #1682: implicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
-# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
-# remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
-# remark #193: zero used for undefined preprocessing identifier
-# remark #593: variable "curs_sb_left_arrow" was set but never used
-# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
-# remark #869: parameter "tw" was never referenced
-# remark #981: operands are evaluated in unspecified order
-# warning #269: invalid format string conversion
+fi
- { echo "$as_me:15801: checking for $CC warning options..." >&5
-echo "$as_me: checking for $CC warning options..." >&6;}
- cf_save_CXXFLAGS="$CXXFLAGS"
- EXTRA_CXXFLAGS="-Wall"
- for cf_opt in \
- wd1419 \
- wd1682 \
- wd1683 \
- wd1684 \
- wd193 \
- wd279 \
- wd593 \
- wd810 \
- wd869 \
- wd981
- do
- CXXFLAGS="$cf_save_CXXFLAGS $EXTRA_CXXFLAGS -$cf_opt"
- if { (eval echo "$as_me:15818: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:15821: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- test -n "$verbose" && echo "$as_me:15823: result: ... -$cf_opt" >&5
-echo "${ECHO_T}... -$cf_opt" >&6
- EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -$cf_opt"
- fi
- done
- CXXFLAGS="$cf_save_CXXFLAGS"
+CXXFLAGS="$CFLAGS"
+CFLAGS="$cf_save_CXXFLAGS"
-elif test "$GXX" = yes
-then
- { echo "$as_me:15832: checking for $CXX warning options..." >&5
-echo "$as_me: checking for $CXX warning options..." >&6;}
- cf_save_CXXFLAGS="$CXXFLAGS"
- EXTRA_CXXFLAGS="-W -Wall"
- cf_gxx_extra_warnings=""
- test "$with_ext_const" = yes && cf_gxx_extra_warnings="Wwrite-strings"
- case "$GCC_VERSION" in
- ([1-2].*)
- ;;
- (*)
- cf_gxx_extra_warnings="$cf_gxx_extra_warnings Weffc++"
- ;;
- esac
- for cf_opt in \
- Wabi \
- fabi-version=0 \
- Wextra \
- Wignored-qualifiers \
- Wlogical-op \
- Woverloaded-virtual \
- Wsign-promo \
- Wsynth \
- Wold-style-cast \
- Wcast-align \
- Wcast-qual \
- Wpointer-arith \
- Wshadow \
- Wundef $cf_gxx_extra_warnings Wno-unused
- do
- CXXFLAGS="$cf_save_CXXFLAGS $EXTRA_CXXFLAGS -Werror -$cf_opt"
- if { (eval echo "$as_me:15862: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:15865: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- test -n "$verbose" && echo "$as_me:15867: result: ... -$cf_opt" >&5
-echo "${ECHO_T}... -$cf_opt" >&6
- EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -$cf_opt"
- else
- test -n "$verbose" && echo "$as_me:15871: result: ... no -$cf_opt" >&5
-echo "${ECHO_T}... no -$cf_opt" >&6
+ NCURSES_CXX_IMPEXP="__attribute__ ((visibility(\"default\")))"
fi
- done
- CXXFLAGS="$cf_save_CXXFLAGS"
-fi
-
-rm -rf conftest*
-ac_ext=c
+ ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
fi
fi
-if test "$GCC" = yes
-then
-cat > conftest.i <<EOF
-#ifndef GCC_PRINTF
-#define GCC_PRINTF 0
-#endif
-#ifndef GCC_SCANF
-#define GCC_SCANF 0
-#endif
-#ifndef GCC_NORETURN
-#define GCC_NORETURN /* nothing */
-#endif
-#ifndef GCC_UNUSED
-#define GCC_UNUSED /* nothing */
-#endif
-EOF
-if test "$GCC" = yes
-then
- { echo "$as_me:15907: checking for $CC __attribute__ directives..." >&5
-echo "$as_me: checking for $CC __attribute__ directives..." >&6;}
-cat > conftest.$ac_ext <<EOF
-#line 15910 "${as_me:-configure}"
-#include "confdefs.h"
-#include "conftest.h"
-#include "conftest.i"
-#if GCC_PRINTF
-#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
-#else
-#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
-#endif
-#if GCC_SCANF
-#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
-#else
-#define GCC_SCANFLIKE(fmt,var) /*nothing*/
-#endif
-extern void wow(char *,...) GCC_SCANFLIKE(1,2);
-extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
-extern void foo(void) GCC_NORETURN;
-int main(int argc GCC_UNUSED, char *argv[] GCC_UNUSED) { return 0; }
-EOF
- cf_printf_attribute=no
- cf_scanf_attribute=no
- for cf_attribute in scanf printf unused noreturn
- do
-
-cf_ATTRIBUTE=`echo "$cf_attribute" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+### use option --enable-interop to turn on use of bindings used for interop
+echo "$as_me:15963: checking if you want interop bindings" >&5
+echo $ECHO_N "checking if you want interop bindings... $ECHO_C" >&6
- cf_directive="__attribute__(($cf_attribute))"
- echo "checking for $CC $cf_directive" 1>&5
+# Check whether --enable-interop or --disable-interop was given.
+if test "${enable_interop+set}" = set; then
+ enableval="$enable_interop"
+ with_exp_interop=$enableval
+else
+ with_exp_interop=$cf_dft_interop
+fi;
+echo "$as_me:15973: result: $with_exp_interop" >&5
+echo "${ECHO_T}$with_exp_interop" >&6
- case $cf_attribute in
- (printf)
- cf_printf_attribute=yes
- cat >conftest.h <<EOF
-#define GCC_$cf_ATTRIBUTE 1
-EOF
- ;;
- (scanf)
- cf_scanf_attribute=yes
- cat >conftest.h <<EOF
-#define GCC_$cf_ATTRIBUTE 1
-EOF
- ;;
- (*)
- cat >conftest.h <<EOF
-#define GCC_$cf_ATTRIBUTE $cf_directive
-EOF
- ;;
- esac
+NCURSES_INTEROP_FUNCS=0
+test "x$with_exp_interop" = xyes && NCURSES_INTEROP_FUNCS=1
- if { (eval echo "$as_me:15959: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:15962: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- test -n "$verbose" && echo "$as_me:15964: result: ... $cf_attribute" >&5
-echo "${ECHO_T}... $cf_attribute" >&6
- cat conftest.h >>confdefs.h
- case $cf_attribute in
- (noreturn)
+echo "$as_me:15979: checking if you want experimental safe-sprintf code" >&5
+echo $ECHO_N "checking if you want experimental safe-sprintf code... $ECHO_C" >&6
-cat >>confdefs.h <<EOF
-#define GCC_NORETURN $cf_directive
-EOF
+# Check whether --enable-safe-sprintf or --disable-safe-sprintf was given.
+if test "${enable_safe_sprintf+set}" = set; then
+ enableval="$enable_safe_sprintf"
+ with_safe_sprintf=$enableval
+else
+ with_safe_sprintf=no
+fi;
+echo "$as_me:15989: result: $with_safe_sprintf" >&5
+echo "${ECHO_T}$with_safe_sprintf" >&6
- ;;
- (printf)
- cf_value='/* nothing */'
- if test "$cf_printf_attribute" != no ; then
- cf_value='__attribute__((format(printf,fmt,var)))'
+### use option --disable-scroll-hints to turn off use of scroll-hints scrolling logic
+# when hashmap is used scroll hints are useless
+if test "$with_hashmap" = no ; then
+echo "$as_me:15995: checking if you want to experiment without scrolling-hints code" >&5
+echo $ECHO_N "checking if you want to experiment without scrolling-hints code... $ECHO_C" >&6
+# Check whether --enable-scroll-hints or --disable-scroll-hints was given.
+if test "${enable_scroll_hints+set}" = set; then
+ enableval="$enable_scroll_hints"
+ with_scroll_hints=$enableval
+else
+ with_scroll_hints=yes
+fi;
+echo "$as_me:16005: result: $with_scroll_hints" >&5
+echo "${ECHO_T}$with_scroll_hints" >&6
+test "x$with_scroll_hints" = xyes &&
cat >>confdefs.h <<\EOF
-#define GCC_PRINTF 1
+#define USE_SCROLL_HINTS 1
EOF
- fi
+fi
-cat >>confdefs.h <<EOF
-#define GCC_PRINTFLIKE(fmt,var) $cf_value
-EOF
+echo "$as_me:16014: checking if you want wgetch-events code" >&5
+echo $ECHO_N "checking if you want wgetch-events code... $ECHO_C" >&6
- ;;
- (scanf)
- cf_value='/* nothing */'
- if test "$cf_scanf_attribute" != no ; then
- cf_value='__attribute__((format(scanf,fmt,var)))'
+# Check whether --enable-wgetch-events or --disable-wgetch-events was given.
+if test "${enable_wgetch_events+set}" = set; then
+ enableval="$enable_wgetch_events"
+ with_wgetch_events=$enableval
+else
+ with_wgetch_events=no
+fi;
+echo "$as_me:16024: result: $with_wgetch_events" >&5
+echo "${ECHO_T}$with_wgetch_events" >&6
+if test "x$with_wgetch_events" = xyes ; then
cat >>confdefs.h <<\EOF
-#define GCC_SCANF 1
-EOF
-
- fi
-
-cat >>confdefs.h <<EOF
-#define GCC_SCANFLIKE(fmt,var) $cf_value
-EOF
-
- ;;
- (unused)
-
-cat >>confdefs.h <<EOF
-#define GCC_UNUSED $cf_directive
+#define NCURSES_WGETCH_EVENTS 1
EOF
- ;;
- esac
- fi
- done
+ NCURSES_WGETCH_EVENTS=1
else
- fgrep define conftest.i >>confdefs.h
-fi
-rm -rf conftest*
+ NCURSES_WGETCH_EVENTS=0
fi
-echo "$as_me:16023: checking if you want to work around bogus compiler/loader warnings" >&5
-echo $ECHO_N "checking if you want to work around bogus compiler/loader warnings... $ECHO_C" >&6
+case "$cf_cv_system_name" in
+(*mingw32*|*mingw64*|*-msvc*)
+ echo "$as_me:16039: checking if you want experimental-Windows driver" >&5
+echo $ECHO_N "checking if you want experimental-Windows driver... $ECHO_C" >&6
-# Check whether --enable-string-hacks or --disable-string-hacks was given.
-if test "${enable_string_hacks+set}" = set; then
- enableval="$enable_string_hacks"
- with_string_hacks=$enableval
+# Check whether --enable-exp-win32 or --disable-exp-win32 was given.
+if test "${enable_exp_win32+set}" = set; then
+ enableval="$enable_exp_win32"
+ with_exp_win32=$enableval
else
- with_string_hacks=no
+ with_exp_win32=no
fi;
-echo "$as_me:16033: result: $with_string_hacks" >&5
-echo "${ECHO_T}$with_string_hacks" >&6
-
-if test "x$with_string_hacks" = "xyes"; then
+ echo "$as_me:16049: result: $with_exp_win32" >&5
+echo "${ECHO_T}$with_exp_win32" >&6
+ if test "x$with_exp_win32" = xyes
+ then
cat >>confdefs.h <<\EOF
-#define USE_STRING_HACKS 1
+#define EXP_WIN32_DRIVER 1
EOF
- { echo "$as_me:16042: WARNING: enabling string-hacks to work around bogus compiler/loader warnings" >&5
-echo "$as_me: WARNING: enabling string-hacks to work around bogus compiler/loader warnings" >&2;}
- echo "$as_me:16044: checking for strlcat" >&5
-echo $ECHO_N "checking for strlcat... $ECHO_C" >&6
-if test "${ac_cv_func_strlcat+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 16050 "configure"
-#include "confdefs.h"
-#define strlcat autoconf_temporary
-#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
-#undef strlcat
+ EXP_WIN32_DRIVER=1
+ INTERNALS_HDR='$(INCDIR)/nc_win32.h'
+ else
+ INTERNALS_HDR='$(INCDIR)/nc_mingw.h'
+ EXP_WIN32_DRIVER=0
+ fi
+ ;;
+(*)
+ EXP_WIN32_DRIVER=0
+ INTERNALS_HDR=
+ ;;
+esac
-#ifdef __cplusplus
-extern "C"
-#endif
+###############################################################################
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char strlcat (void);
+### use option --disable-echo to suppress full display compiling commands
-int
-main (void)
-{
+echo "$as_me:16075: checking if you want to see long compiling messages" >&5
+echo $ECHO_N "checking if you want to see long compiling messages... $ECHO_C" >&6
-/* The GNU C library defines stubs for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_strlcat) || defined (__stub___strlcat)
-#error found stub for strlcat
-#endif
+# Check whether --enable-echo or --disable-echo was given.
+if test "${enable_echo+set}" = set; then
+ enableval="$enable_echo"
+ test "$enableval" != no && enableval=yes
+ if test "$enableval" != "yes" ; then
- return strlcat ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:16081: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:16084: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:16087: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:16090: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_strlcat=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_strlcat=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:16100: result: $ac_cv_func_strlcat" >&5
-echo "${ECHO_T}$ac_cv_func_strlcat" >&6
-if test $ac_cv_func_strlcat = yes; then
+ ECHO_LT='--silent'
+ ECHO_LD='@echo linking $@;'
+ RULE_CC='@echo compiling $<'
+ SHOW_CC='@echo compiling $@'
+ ECHO_CC='@'
-cat >>confdefs.h <<\EOF
-#define HAVE_STRLCAT 1
-EOF
+ else
-else
+ ECHO_LT=''
+ ECHO_LD=''
+ RULE_CC=''
+ SHOW_CC=''
+ ECHO_CC=''
- echo "$as_me:16110: checking for strlcat in -lbsd" >&5
-echo $ECHO_N "checking for strlcat in -lbsd... $ECHO_C" >&6
-if test "${ac_cv_lib_bsd_strlcat+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ fi
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbsd $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 16118 "configure"
-#include "confdefs.h"
+ enableval=yes
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char strlcat ();
-int
-main (void)
-{
-strlcat ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:16137: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:16140: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:16143: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:16146: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_bsd_strlcat=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_bsd_strlcat=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:16157: result: $ac_cv_lib_bsd_strlcat" >&5
-echo "${ECHO_T}$ac_cv_lib_bsd_strlcat" >&6
-if test $ac_cv_lib_bsd_strlcat = yes; then
+ ECHO_LT=''
+ ECHO_LD=''
+ RULE_CC=''
+ SHOW_CC=''
+ ECHO_CC=''
-cf_add_libs="$LIBS"
-# reverse order
-cf_add_0lib=
-for cf_add_1lib in -lbsd; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
-# filter duplicates
-for cf_add_1lib in $cf_add_0lib; do
- for cf_add_2lib in $cf_add_libs; do
- if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
- cf_add_1lib=
- break
- fi
- done
- test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
-done
-LIBS="$cf_add_libs"
+fi;
+echo "$as_me:16109: result: $enableval" >&5
+echo "${ECHO_T}$enableval" >&6
-for ac_header in bsd/string.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:16180: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 16186 "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:16190: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:16196: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- eval "$as_ac_Header=yes"
+if test "x$enable_echo" = xyes; then
+ ECHO_LINK=
else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_ext
+ ECHO_LINK='@ echo linking $@ ... ;'
+ test -n "$LIBTOOL" && LIBTOOL="$LIBTOOL --silent"
+ test -n "$LIBTOOL_CXX" && LIBTOOL_CXX="$LIBTOOL_CXX --silent"
fi
-echo "$as_me:16215: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
-fi
-done
+# --disable-stripping is used for debugging
-cat >>confdefs.h <<\EOF
-#define HAVE_STRLCAT 1
-EOF
+echo "$as_me:16122: checking if you want to install stripped executables" >&5
+echo $ECHO_N "checking if you want to install stripped executables... $ECHO_C" >&6
-fi
+# Check whether --enable-stripping or --disable-stripping was given.
+if test "${enable_stripping+set}" = set; then
+ enableval="$enable_stripping"
+ test "$enableval" != no && enableval=yes
+ if test "$enableval" != "yes" ; then
+ enable_stripping=no
+ else
+ enable_stripping=yes
+ fi
+else
+ enableval=yes
+ enable_stripping=yes
+
+fi;
+echo "$as_me:16139: result: $enable_stripping" >&5
+echo "${ECHO_T}$enable_stripping" >&6
+if test "$enable_stripping" = yes
+then
+ INSTALL_OPT_S="-s"
+else
+ INSTALL_OPT_S=
fi
-for ac_func in strlcpy snprintf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:16236: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
+: "${INSTALL:=install}"
+echo "$as_me:16150: checking if install accepts -p option" >&5
+echo $ECHO_N "checking if install accepts -p option... $ECHO_C" >&6
+if test "${cf_cv_install_p+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 16242 "configure"
-#include "confdefs.h"
-#define $ac_func autoconf_temporary
-#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
-#undef $ac_func
-
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func (void);
+ rm -rf ./conftest*
+ date >conftest.in
+ mkdir conftest.out
+ sleep 3
+ if $INSTALL -p conftest.in conftest.out 2>/dev/null
+ then
+ if test -f conftest.out/conftest.in
+ then
+ test conftest.in -nt conftest.out/conftest.in 2>conftest.err && \
+ test conftest.out/conftest.in -nt conftest.in 2>conftest.err
+ if test -s conftest.err
+ then
+ cf_cv_install_p=no
+ else
+ cf_cv_install_p=yes
+ fi
+ else
+ cf_cv_install_p=no
+ fi
+ else
+ cf_cv_install_p=no
+ fi
+ rm -rf ./conftest*
-int
-main (void)
-{
+fi
+echo "$as_me:16181: result: $cf_cv_install_p" >&5
+echo "${ECHO_T}$cf_cv_install_p" >&6
-/* The GNU C library defines stubs for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-#error found stub for $ac_func
-#endif
+echo "$as_me:16184: checking if install needs to be told about ownership" >&5
+echo $ECHO_N "checking if install needs to be told about ownership... $ECHO_C" >&6
+case `$ac_config_guess` in
+(*minix)
+ with_install_o=yes
+ ;;
+(*)
+ with_install_o=no
+ ;;
+esac
- return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:16273: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:16276: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:16279: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:16282: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+echo "$as_me:16195: result: $with_install_o" >&5
+echo "${ECHO_T}$with_install_o" >&6
+if test "x$with_install_o" = xyes
+then
+ INSTALL_OPT_O="`id root|sed -e 's/uid=[0-9]*(/ -o /' -e 's/gid=[0-9]*(/ -g /' -e 's/ [^=[:space:]][^=[:space:]]*=.*/ /' -e 's/)//g'`"
else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_var=no"
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ INSTALL_OPT_O=
fi
-echo "$as_me:16292: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-EOF
+# If we're avoiding relinking of shared libraries during install, that is to
+# avoid modifying the build-tree. For the same reason, avoid doing ranlib if
+# the install program has "-p" (for preserving timestamps).
+cf_cv_do_reranlib=yes
+if test "x$cf_cv_install_p" = xyes
+then
+ if test "x$cf_cv_do_relink" != xyes
+ then
+ cf_cv_do_reranlib=no
+ INSTALL_OPT_P="-p"
+ INSTALL_LIB="$INSTALL_LIB $INSTALL_OPT_P"
+ fi
fi
-done
-fi
-
-### use option --enable-assertions to turn on generation of assertion code
-echo "$as_me:16305: checking if you want to enable runtime assertions" >&5
-echo $ECHO_N "checking if you want to enable runtime assertions... $ECHO_C" >&6
+### use option --enable-warnings to turn on all gcc warnings
-# Check whether --enable-assertions or --disable-assertions was given.
-if test "${enable_assertions+set}" = set; then
- enableval="$enable_assertions"
- with_assertions=$enableval
-else
- with_assertions=no
-fi;
-echo "$as_me:16315: result: $with_assertions" >&5
-echo "${ECHO_T}$with_assertions" >&6
-if test -n "$GCC"
+if test "$GCC" = yes || test "$GXX" = yes
then
- if test "$with_assertions" = no
- then
- CPPFLAGS="$CPPFLAGS -DNDEBUG"
- else
- ADAFLAGS="$ADAFLAGS -gnata"
+if test "$GCC" = yes || test "$GXX" = yes
+then
+ case $CFLAGS in
+ (*-Werror=*)
+ test -n "$verbose" && echo " repairing CFLAGS: $CFLAGS" 1>&6
- fi
-fi
+echo "${as_me:-configure}:16229: testing repairing CFLAGS: $CFLAGS ..." 1>&5
-### use option --disable-leaks to suppress "permanent" leaks, for testing
+ cf_temp_flags=
+ for cf_temp_scan in $CFLAGS
+ do
+ case "x$cf_temp_scan" in
+ (x-Werror=*)
-echo "$as_me:16331: checking if you want to use dmalloc for testing" >&5
-echo $ECHO_N "checking if you want to use dmalloc for testing... $ECHO_C" >&6
+ test -n "$EXTRA_CFLAGS" && EXTRA_CFLAGS="$EXTRA_CFLAGS "
+ EXTRA_CFLAGS="${EXTRA_CFLAGS}$cf_temp_scan"
-# Check whether --with-dmalloc or --without-dmalloc was given.
-if test "${with_dmalloc+set}" = set; then
- withval="$with_dmalloc"
+ ;;
+ (*)
-cat >>confdefs.h <<EOF
-#define USE_DMALLOC 1
-EOF
+ test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags "
+ cf_temp_flags="${cf_temp_flags}$cf_temp_scan"
- : ${with_cflags:=-g}
- : ${with_no_leaks:=yes}
- with_dmalloc=yes
-else
- with_dmalloc=
-fi;
-echo "$as_me:16348: result: ${with_dmalloc:-no}" >&5
-echo "${ECHO_T}${with_dmalloc:-no}" >&6
+ ;;
+ esac
+ done
+ CFLAGS="$cf_temp_flags"
+ test -n "$verbose" && echo " ... fixed $CFLAGS" 1>&6
-case .$with_cflags in
-(.*-g*)
- case .$CFLAGS in
- (.*-g*)
- ;;
- (*)
+echo "${as_me:-configure}:16252: testing ... fixed $CFLAGS ..." 1>&5
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
+ test -n "$verbose" && echo " ... extra $EXTRA_CFLAGS" 1>&6
-for cf_add_cflags in -g
-do
-case $cf_fix_cppflags in
-(no)
- case $cf_add_cflags in
- (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+echo "${as_me:-configure}:16256: testing ... extra $EXTRA_CFLAGS ..." 1>&5
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
+ ;;
+ esac
+fi
- if test $cf_fix_cppflags = yes ; then
+if test "$GCC" = yes || test "$GXX" = yes
+then
+ case $CPPFLAGS in
+ (*-Werror=*)
+ test -n "$verbose" && echo " repairing CPPFLAGS: $CPPFLAGS" 1>&6
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+echo "${as_me:-configure}:16268: testing repairing CPPFLAGS: $CPPFLAGS ..." 1>&5
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
+ cf_temp_flags=
+ for cf_temp_scan in $CPPFLAGS
+ do
+ case "x$cf_temp_scan" in
+ (x-Werror=*)
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+ test -n "$EXTRA_CFLAGS" && EXTRA_CFLAGS="$EXTRA_CFLAGS "
+ EXTRA_CFLAGS="${EXTRA_CFLAGS}$cf_temp_scan"
- continue
- fi
- ;;
- esac
- case "$CPPFLAGS" in
- (*$cf_add_cflags)
- ;;
- (*)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+ ;;
+ (*)
-CPPFLAGS=`echo "$CPPFLAGS" | \
- sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
- -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+ test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags "
+ cf_temp_flags="${cf_temp_flags}$cf_temp_scan"
;;
esac
+ done
+ CPPFLAGS="$cf_temp_flags"
+ test -n "$verbose" && echo " ... fixed $CPPFLAGS" 1>&6
- test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
- cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+echo "${as_me:-configure}:16291: testing ... fixed $CPPFLAGS ..." 1>&5
- ;;
- esac
- ;;
- (*)
+ test -n "$verbose" && echo " ... extra $EXTRA_CFLAGS" 1>&6
- test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
- cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+echo "${as_me:-configure}:16295: testing ... extra $EXTRA_CFLAGS ..." 1>&5
;;
esac
- ;;
-(yes)
+fi
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+if test "$GCC" = yes || test "$GXX" = yes
+then
+ case $LDFLAGS in
+ (*-Werror=*)
+ test -n "$verbose" && echo " repairing LDFLAGS: $LDFLAGS" 1>&6
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+echo "${as_me:-configure}:16307: testing repairing LDFLAGS: $LDFLAGS ..." 1>&5
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
- ;;
-esac
-done
+ cf_temp_flags=
+ for cf_temp_scan in $LDFLAGS
+ do
+ case "x$cf_temp_scan" in
+ (x-Werror=*)
-if test -n "$cf_new_cflags" ; then
+ test -n "$EXTRA_CFLAGS" && EXTRA_CFLAGS="$EXTRA_CFLAGS "
+ EXTRA_CFLAGS="${EXTRA_CFLAGS}$cf_temp_scan"
- test -n "$CFLAGS" && CFLAGS="$CFLAGS "
- CFLAGS="${CFLAGS}$cf_new_cflags"
+ ;;
+ (*)
-fi
+ test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags "
+ cf_temp_flags="${cf_temp_flags}$cf_temp_scan"
-if test -n "$cf_new_cppflags" ; then
+ ;;
+ esac
+ done
+ LDFLAGS="$cf_temp_flags"
+ test -n "$verbose" && echo " ... fixed $LDFLAGS" 1>&6
- test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
- CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+echo "${as_me:-configure}:16330: testing ... fixed $LDFLAGS ..." 1>&5
+
+ test -n "$verbose" && echo " ... extra $EXTRA_CFLAGS" 1>&6
+echo "${as_me:-configure}:16334: testing ... extra $EXTRA_CFLAGS ..." 1>&5
+
+ ;;
+ esac
fi
-if test -n "$cf_new_extra_cppflags" ; then
+echo "$as_me:16340: checking if you want to turn on gcc warnings" >&5
+echo $ECHO_N "checking if you want to turn on gcc warnings... $ECHO_C" >&6
- test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
- EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+# Check whether --enable-warnings or --disable-warnings was given.
+if test "${enable_warnings+set}" = set; then
+ enableval="$enable_warnings"
+ test "$enableval" != yes && enableval=no
+ if test "$enableval" != "no" ; then
+ enable_warnings=yes
+ else
+ enable_warnings=no
+ fi
+else
+ enableval=no
+ enable_warnings=no
-fi
+fi;
+echo "$as_me:16357: result: $enable_warnings" >&5
+echo "${ECHO_T}$enable_warnings" >&6
+if test "$enable_warnings" = "yes"
+then
+if test "x$have_x" = xyes; then
+
+cf_save_LIBS_CF_CONST_X_STRING="$LIBS"
+cf_save_CFLAGS_CF_CONST_X_STRING="$CFLAGS"
+cf_save_CPPFLAGS_CF_CONST_X_STRING="$CPPFLAGS"
+LIBS="$LIBS ${X_PRE_LIBS} ${X_LIBS} ${X_EXTRA_LIBS}"
+for cf_X_CFLAGS in $X_CFLAGS
+do
+ case "x$cf_X_CFLAGS" in
+ x-[IUD]*)
+ CPPFLAGS="$CPPFLAGS $cf_X_CFLAGS"
+ ;;
+ *)
+ CFLAGS="$CFLAGS $cf_X_CFLAGS"
;;
esac
- ;;
-esac
+done
-if test "$with_dmalloc" = yes ; then
- echo "$as_me:16462: checking for dmalloc.h" >&5
-echo $ECHO_N "checking for dmalloc.h... $ECHO_C" >&6
-if test "${ac_cv_header_dmalloc_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 16468 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 16381 "configure"
#include "confdefs.h"
-#include <dmalloc.h>
+
+#include <stdlib.h>
+#include <X11/Intrinsic.h>
+
+int
+main (void)
+{
+String foo = malloc(1); (void)foo
+ ;
+ return 0;
+}
_ACEOF
-if { (eval echo "$as_me:16472: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:16396: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:16478: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- ac_cv_header_dmalloc_h=yes
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_header_dmalloc_h=no
-fi
-rm -f conftest.err conftest.$ac_ext
-fi
-echo "$as_me:16497: result: $ac_cv_header_dmalloc_h" >&5
-echo "${ECHO_T}$ac_cv_header_dmalloc_h" >&6
-if test $ac_cv_header_dmalloc_h = yes; then
+ echo "$as_me:16399: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:16402: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:16405: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
-echo "$as_me:16501: checking for dmalloc_debug in -ldmalloc" >&5
-echo $ECHO_N "checking for dmalloc_debug in -ldmalloc... $ECHO_C" >&6
-if test "${ac_cv_lib_dmalloc_dmalloc_debug+set}" = set; then
+echo "$as_me:16408: checking for X11/Xt const-feature" >&5
+echo $ECHO_N "checking for X11/Xt const-feature... $ECHO_C" >&6
+if test "${cf_cv_const_x_string+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldmalloc $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 16509 "configure"
+
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 16415 "configure"
#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dmalloc_debug ();
+#define _CONST_X_STRING /* X11R7.8 (perhaps) */
+#undef XTSTRINGDEFINES /* X11R5 and later */
+#include <stdlib.h>
+#include <X11/Intrinsic.h>
+
int
main (void)
{
-dmalloc_debug ();
+String foo = malloc(1); *foo = 0
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:16528: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:16432: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:16531: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:16534: \"$ac_try\"") >&5
+ echo "$as_me:16435: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:16438: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:16537: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dmalloc_dmalloc_debug=yes
+ echo "$as_me:16441: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+
+ cf_cv_const_x_string=no
+
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_dmalloc_dmalloc_debug=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:16548: result: $ac_cv_lib_dmalloc_dmalloc_debug" >&5
-echo "${ECHO_T}$ac_cv_lib_dmalloc_dmalloc_debug" >&6
-if test $ac_cv_lib_dmalloc_dmalloc_debug = yes; then
- cat >>confdefs.h <<EOF
-#define HAVE_LIBDMALLOC 1
-EOF
+cat "conftest.$ac_ext" >&5
- LIBS="-ldmalloc $LIBS"
+ cf_cv_const_x_string=yes
fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
+echo "$as_me:16456: result: $cf_cv_const_x_string" >&5
+echo "${ECHO_T}$cf_cv_const_x_string" >&6
-fi
+LIBS="$cf_save_LIBS_CF_CONST_X_STRING"
+CFLAGS="$cf_save_CFLAGS_CF_CONST_X_STRING"
+CPPFLAGS="$cf_save_CPPFLAGS_CF_CONST_X_STRING"
-echo "$as_me:16563: checking if you want to use dbmalloc for testing" >&5
-echo $ECHO_N "checking if you want to use dbmalloc for testing... $ECHO_C" >&6
+case "$cf_cv_const_x_string" in
+(no)
-# Check whether --with-dbmalloc or --without-dbmalloc was given.
-if test "${with_dbmalloc+set}" = set; then
- withval="$with_dbmalloc"
+ test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+ CPPFLAGS="${CPPFLAGS}-DXTSTRINGDEFINES"
-cat >>confdefs.h <<EOF
-#define USE_DBMALLOC 1
-EOF
+ ;;
+(*)
- : ${with_cflags:=-g}
- : ${with_no_leaks:=yes}
- with_dbmalloc=yes
-else
- with_dbmalloc=
-fi;
-echo "$as_me:16580: result: ${with_dbmalloc:-no}" >&5
-echo "${ECHO_T}${with_dbmalloc:-no}" >&6
+ test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+ CPPFLAGS="${CPPFLAGS}-D_CONST_X_STRING"
-case .$with_cflags in
-(.*-g*)
- case .$CFLAGS in
- (.*-g*)
- ;;
- (*)
+ ;;
+esac
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ fi
+cat > "conftest.$ac_ext" <<EOF
+#line 16485 "${as_me:-configure}"
+int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
+EOF
+if test "$INTEL_COMPILER" = yes
+then
+# The "-wdXXX" options suppress warnings:
+# remark #1419: external declaration in primary source file
+# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
+# remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
+# remark #193: zero used for undefined preprocessing identifier
+# remark #593: variable "curs_sb_left_arrow" was set but never used
+# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
+# remark #869: parameter "tw" was never referenced
+# remark #981: operands are evaluated in unspecified order
+# warning #279: controlling expression is constant
-for cf_add_cflags in -g
-do
-case $cf_fix_cppflags in
-(no)
- case $cf_add_cflags in
- (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+ { echo "$as_me:16501: checking for $CC warning options..." >&5
+echo "$as_me: checking for $CC warning options..." >&6;}
+ cf_save_CFLAGS="$CFLAGS"
+ EXTRA_CFLAGS="$EXTRA_CFLAGS -Wall"
+ for cf_opt in \
+ wd1419 \
+ wd1683 \
+ wd1684 \
+ wd193 \
+ wd593 \
+ wd279 \
+ wd810 \
+ wd869 \
+ wd981
+ do
+ CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
+ if { (eval echo "$as_me:16517: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:16520: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; then
+ test -n "$verbose" && echo "$as_me:16522: result: ... -$cf_opt" >&5
+echo "${ECHO_T}... -$cf_opt" >&6
+ EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
+ fi
+ done
+ CFLAGS="$cf_save_CFLAGS"
+elif test "$GCC" = yes && test "$GCC_VERSION" != "unknown"
+then
+ { echo "$as_me:16530: checking for $CC warning options..." >&5
+echo "$as_me: checking for $CC warning options..." >&6;}
+ cf_save_CFLAGS="$CFLAGS"
+ cf_warn_CONST=""
+ test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings"
+ cf_gcc_warnings="Wignored-qualifiers Wlogical-op Wvarargs"
+ test "x$CLANG_COMPILER" = xyes && cf_gcc_warnings=
+ for cf_opt in W Wall \
+ Wbad-function-cast \
+ Wcast-align \
+ Wcast-qual \
+ Wdeclaration-after-statement \
+ Wextra \
+ Winline \
+ Wmissing-declarations \
+ Wmissing-prototypes \
+ Wnested-externs \
+ Wpointer-arith \
+ Wshadow \
+ Wstrict-prototypes \
+ Wundef Wno-inline $cf_gcc_warnings $cf_warn_CONST Wno-unknown-pragmas Wswitch-enum
+ do
+ CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
+ if { (eval echo "$as_me:16553: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:16556: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; then
+ test -n "$verbose" && echo "$as_me:16558: result: ... -$cf_opt" >&5
+echo "${ECHO_T}... -$cf_opt" >&6
+ case "$cf_opt" in
+ (Winline)
+ case "$GCC_VERSION" in
+ ([34].*)
+ test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
+echo "${as_me:-configure}:16566: testing feature is broken in gcc $GCC_VERSION ..." 1>&5
- if test $cf_fix_cppflags = yes ; then
+ continue;;
+ esac
+ ;;
+ (Wpointer-arith)
+ case "$GCC_VERSION" in
+ ([12].*)
+ test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+echo "${as_me:-configure}:16576: testing feature is broken in gcc $GCC_VERSION ..." 1>&5
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
+ continue;;
+ esac
+ ;;
+ esac
+ EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
+ fi
+ done
+ CFLAGS="$cf_save_CFLAGS"
+fi
+rm -rf ./conftest*
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+fi
- continue
- fi
+if test "$GCC" = yes || test "$GXX" = yes
+then
+cat > conftest.i <<EOF
+#ifndef GCC_PRINTF
+#define GCC_PRINTF 0
+#endif
+#ifndef GCC_SCANF
+#define GCC_SCANF 0
+#endif
+#ifndef GCC_NORETURN
+#define GCC_NORETURN /* nothing */
+#endif
+#ifndef GCC_UNUSED
+#define GCC_UNUSED /* nothing */
+#endif
+EOF
+if test "$GCC" = yes
+then
+ { echo "$as_me:16609: checking for $CC __attribute__ directives..." >&5
+echo "$as_me: checking for $CC __attribute__ directives..." >&6;}
+cat > "conftest.$ac_ext" <<EOF
+#line 16612 "${as_me:-configure}"
+#include "confdefs.h"
+#include "conftest.h"
+#include "conftest.i"
+#if GCC_PRINTF
+#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
+#else
+#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
+#endif
+#if GCC_SCANF
+#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
+#else
+#define GCC_SCANFLIKE(fmt,var) /*nothing*/
+#endif
+extern void wow(char *,...) GCC_SCANFLIKE(1,2);
+extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
+extern void foo(void) GCC_NORETURN;
+int main(int argc GCC_UNUSED, char *argv[] GCC_UNUSED) { (void)argc; (void)argv; return 0; }
+EOF
+ cf_printf_attribute=no
+ cf_scanf_attribute=no
+ for cf_attribute in scanf printf unused noreturn
+ do
+
+cf_ATTRIBUTE=`echo "$cf_attribute" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+ cf_directive="__attribute__(($cf_attribute))"
+ echo "checking for $CC $cf_directive" 1>&5
+
+ case "$cf_attribute" in
+ (printf)
+ cf_printf_attribute=yes
+ cat >conftest.h <<EOF
+#define GCC_$cf_ATTRIBUTE 1
+EOF
;;
- esac
- case "$CPPFLAGS" in
- (*$cf_add_cflags)
+ (scanf)
+ cf_scanf_attribute=yes
+ cat >conftest.h <<EOF
+#define GCC_$cf_ATTRIBUTE 1
+EOF
;;
(*)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+ cat >conftest.h <<EOF
+#define GCC_$cf_ATTRIBUTE $cf_directive
+EOF
+ ;;
+ esac
-CPPFLAGS=`echo "$CPPFLAGS" | \
- sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
- -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+ if { (eval echo "$as_me:16661: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:16664: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; then
+ test -n "$verbose" && echo "$as_me:16666: result: ... $cf_attribute" >&5
+echo "${ECHO_T}... $cf_attribute" >&6
+ cat conftest.h >>confdefs.h
+ case "$cf_attribute" in
+ (noreturn)
+
+cat >>confdefs.h <<EOF
+#define GCC_NORETURN $cf_directive
+EOF
;;
- esac
+ (printf)
+ cf_value='/* nothing */'
+ if test "$cf_printf_attribute" != no ; then
+ cf_value='__attribute__((format(printf,fmt,var)))'
- test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
- cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+cat >>confdefs.h <<\EOF
+#define GCC_PRINTF 1
+EOF
- ;;
- esac
- ;;
- (*)
+ fi
- test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
- cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+cat >>confdefs.h <<EOF
+#define GCC_PRINTFLIKE(fmt,var) $cf_value
+EOF
- ;;
- esac
- ;;
-(yes)
+ ;;
+ (scanf)
+ cf_value='/* nothing */'
+ if test "$cf_scanf_attribute" != no ; then
+ cf_value='__attribute__((format(scanf,fmt,var)))'
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+cat >>confdefs.h <<\EOF
+#define GCC_SCANF 1
+EOF
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+ fi
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
- ;;
-esac
-done
+cat >>confdefs.h <<EOF
+#define GCC_SCANFLIKE(fmt,var) $cf_value
+EOF
-if test -n "$cf_new_cflags" ; then
+ ;;
+ (unused)
- test -n "$CFLAGS" && CFLAGS="$CFLAGS "
- CFLAGS="${CFLAGS}$cf_new_cflags"
+cat >>confdefs.h <<EOF
+#define GCC_UNUSED $cf_directive
+EOF
+ ;;
+ esac
+ fi
+ done
+else
+ ${FGREP-fgrep} define conftest.i >>confdefs.h
+fi
+rm -rf ./conftest*
fi
-
-if test -n "$cf_new_cppflags" ; then
-
- test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
- CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
fi
-if test -n "$cf_new_extra_cppflags" ; then
+if test "x$enable_warnings" = "xyes"; then
- test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
- EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+ ADAFLAGS="$ADAFLAGS -gnatg"
-fi
+ if test "x$cf_with_cxx" = xyes ; then
- ;;
- esac
- ;;
-esac
-
-if test "$with_dbmalloc" = yes ; then
- echo "$as_me:16694: checking for dbmalloc.h" >&5
-echo $ECHO_N "checking for dbmalloc.h... $ECHO_C" >&6
-if test "${ac_cv_header_dbmalloc_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 16700 "configure"
-#include "confdefs.h"
-#include <dbmalloc.h>
-_ACEOF
-if { (eval echo "$as_me:16704: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:16710: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- ac_cv_header_dbmalloc_h=yes
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_header_dbmalloc_h=no
-fi
-rm -f conftest.err conftest.$ac_ext
-fi
-echo "$as_me:16729: result: $ac_cv_header_dbmalloc_h" >&5
-echo "${ECHO_T}$ac_cv_header_dbmalloc_h" >&6
-if test $ac_cv_header_dbmalloc_h = yes; then
+INTEL_CPLUSPLUS=no
-echo "$as_me:16733: checking for debug_malloc in -ldbmalloc" >&5
-echo $ECHO_N "checking for debug_malloc in -ldbmalloc... $ECHO_C" >&6
-if test "${ac_cv_lib_dbmalloc_debug_malloc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldbmalloc $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 16741 "configure"
+if test "$GCC" = yes ; then
+ case "$host_os" in
+ (linux*|gnu*)
+ echo "$as_me:16738: checking if this is really Intel C++ compiler" >&5
+echo $ECHO_N "checking if this is really Intel C++ compiler... $ECHO_C" >&6
+ cf_save_CFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -no-gcc"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 16743 "configure"
#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char debug_malloc ();
int
main (void)
{
-debug_malloc ();
+
+#ifdef __INTEL_COMPILER
+#else
+make an error
+#endif
+
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:16760: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:16760: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
echo "$as_me:16763: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
{ (eval echo "$as_me:16766: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:16769: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dbmalloc_debug_malloc=yes
+ (exit "$ac_status"); }; }; then
+ INTEL_CPLUSPLUS=yes
+cf_save_CFLAGS="$cf_save_CFLAGS -we147"
+
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_dbmalloc_debug_malloc=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+cat "conftest.$ac_ext" >&5
fi
-echo "$as_me:16780: result: $ac_cv_lib_dbmalloc_debug_malloc" >&5
-echo "${ECHO_T}$ac_cv_lib_dbmalloc_debug_malloc" >&6
-if test $ac_cv_lib_dbmalloc_debug_malloc = yes; then
- cat >>confdefs.h <<EOF
-#define HAVE_LIBDBMALLOC 1
-EOF
-
- LIBS="-ldbmalloc $LIBS"
-
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ CXXFLAGS="$cf_save_CFLAGS"
+ echo "$as_me:16780: result: $INTEL_CPLUSPLUS" >&5
+echo "${ECHO_T}$INTEL_CPLUSPLUS" >&6
+ ;;
+ esac
fi
-fi
+CLANG_CPLUSPLUS=no
-fi
+if test "$GCC" = yes ; then
+ echo "$as_me:16789: checking if this is really Clang C++ compiler" >&5
+echo $ECHO_N "checking if this is really Clang C++ compiler... $ECHO_C" >&6
+ cf_save_CFLAGS="$CXXFLAGS"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 16793 "configure"
+#include "confdefs.h"
-echo "$as_me:16795: checking if you want to use valgrind for testing" >&5
-echo $ECHO_N "checking if you want to use valgrind for testing... $ECHO_C" >&6
+int
+main (void)
+{
-# Check whether --with-valgrind or --without-valgrind was given.
-if test "${with_valgrind+set}" = set; then
- withval="$with_valgrind"
+#ifdef __clang__
+#else
+make an error
+#endif
-cat >>confdefs.h <<EOF
-#define USE_VALGRIND 1
-EOF
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:16810: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:16813: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:16816: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:16819: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ CLANG_CPLUSPLUS=yes
- : ${with_cflags:=-g}
- : ${with_no_leaks:=yes}
- with_valgrind=yes
else
- with_valgrind=
-fi;
-echo "$as_me:16812: result: ${with_valgrind:-no}" >&5
-echo "${ECHO_T}${with_valgrind:-no}" >&6
-
-case .$with_cflags in
-(.*-g*)
- case .$CFLAGS in
- (.*-g*)
- ;;
- (*)
-
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
-
-for cf_add_cflags in -g
-do
-case $cf_fix_cppflags in
-(no)
- case $cf_add_cflags in
- (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
-
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
-
- if test $cf_fix_cppflags = yes ; then
-
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
-
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-
- continue
- fi
- ;;
- esac
- case "$CPPFLAGS" in
- (*$cf_add_cflags)
- ;;
- (*)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
-
-CPPFLAGS=`echo "$CPPFLAGS" | \
- sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
- -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
-
- ;;
- esac
-
- test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
- cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
-
- ;;
- esac
- ;;
- (*)
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ CXXFLAGS="$cf_save_CFLAGS"
+ echo "$as_me:16829: result: $CLANG_CPLUSPLUS" >&5
+echo "${ECHO_T}$CLANG_CPLUSPLUS" >&6
+fi
- test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
- cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+CLANG_VERSION=none
+if test "x$CLANG_CPLUSPLUS" = "xyes" ; then
+ case "$CC" in
+ (c[1-9][0-9]|*/c[1-9][0-9])
+ { echo "$as_me:16838: WARNING: replacing broken compiler alias $CC" >&5
+echo "$as_me: WARNING: replacing broken compiler alias $CC" >&2;}
+ CFLAGS="$CFLAGS -std=`echo "$CC" | sed -e 's%.*/%%'`"
+ CC=clang
;;
esac
- ;;
-(yes)
-
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
-
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
- ;;
-esac
-done
-
-if test -n "$cf_new_cflags" ; then
- test -n "$CFLAGS" && CFLAGS="$CFLAGS "
- CFLAGS="${CFLAGS}$cf_new_cflags"
+ echo "$as_me:16845: checking version of $CC" >&5
+echo $ECHO_N "checking version of $CC... $ECHO_C" >&6
+ CLANG_VERSION="`$CC --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(CLANG[^)]*) //' -e 's/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
+ test -z "$CLANG_VERSION" && CLANG_VERSION=unknown
+ echo "$as_me:16849: result: $CLANG_VERSION" >&5
+echo "${ECHO_T}$CLANG_VERSION" >&6
+
+ for cf_clang_opt in \
+ -Qunused-arguments \
+ -Wno-error=implicit-function-declaration
+ do
+ echo "$as_me:16856: checking if option $cf_clang_opt works" >&5
+echo $ECHO_N "checking if option $cf_clang_opt works... $ECHO_C" >&6
+ cf_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $cf_clang_opt"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 16861 "configure"
+#include "confdefs.h"
-fi
+ #include <stdio.h>
+int
+main (void)
+{
-if test -n "$cf_new_cppflags" ; then
+ printf("hello!\\n");
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:16875: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:16878: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:16881: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:16884: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
- test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
- CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+ cf_clang_optok=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ cf_clang_optok=no
fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+ echo "$as_me:16895: result: $cf_clang_optok" >&5
+echo "${ECHO_T}$cf_clang_optok" >&6
+ CFLAGS="$cf_save_CFLAGS"
+ if test "$cf_clang_optok" = yes; then
+ test -n "$verbose" && echo " adding option $cf_clang_opt" 1>&6
-if test -n "$cf_new_extra_cppflags" ; then
+echo "${as_me:-configure}:16901: testing adding option $cf_clang_opt ..." 1>&5
- test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
- EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+ test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+ CFLAGS="${CFLAGS}$cf_clang_opt"
+ fi
+ done
fi
- ;;
- esac
- ;;
-esac
-
-echo "$as_me:16925: checking if you want to perform memory-leak testing" >&5
-echo $ECHO_N "checking if you want to perform memory-leak testing... $ECHO_C" >&6
-
-# Check whether --enable-leaks or --disable-leaks was given.
-if test "${enable_leaks+set}" = set; then
- enableval="$enable_leaks"
- if test "x$enableval" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi
-else
- : ${with_no_leaks:=no}
-fi;
-echo "$as_me:16935: result: $with_no_leaks" >&5
-echo "${ECHO_T}$with_no_leaks" >&6
-
-if test "$with_no_leaks" = yes ; then
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_main_return="return"
-cat >>confdefs.h <<\EOF
-#define NO_LEAKS 1
+cat > conftest.$ac_ext <<EOF
+#line 16918 "configure"
+int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
EOF
-cat >>confdefs.h <<\EOF
-#define YY_NO_LEAKS 1
-EOF
+if test "$INTEL_CPLUSPLUS" = yes
+then
+# The "-wdXXX" options suppress warnings:
+# remark #1419: external declaration in primary source file
+# remark #1682: implicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
+# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
+# remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
+# remark #193: zero used for undefined preprocessing identifier
+# remark #593: variable "curs_sb_left_arrow" was set but never used
+# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
+# remark #869: parameter "tw" was never referenced
+# remark #981: operands are evaluated in unspecified order
+# warning #269: invalid format string conversion
-fi
+ { echo "$as_me:16936: checking for $CC warning options..." >&5
+echo "$as_me: checking for $CC warning options..." >&6;}
+ cf_save_CXXFLAGS="$CXXFLAGS"
+ EXTRA_CXXFLAGS="-Wall"
+ for cf_opt in \
+ wd1419 \
+ wd1682 \
+ wd1683 \
+ wd1684 \
+ wd193 \
+ wd279 \
+ wd593 \
+ wd810 \
+ wd869 \
+ wd981
+ do
+ CXXFLAGS="$cf_save_CXXFLAGS $EXTRA_CXXFLAGS -$cf_opt"
+ if { (eval echo "$as_me:16953: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:16956: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; then
+ test -n "$verbose" && echo "$as_me:16958: result: ... -$cf_opt" >&5
+echo "${ECHO_T}... -$cf_opt" >&6
+ EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -$cf_opt"
+ fi
+ done
+ CXXFLAGS="$cf_save_CXXFLAGS"
+
+elif test "$GXX" = yes
+then
+ { echo "$as_me:16967: checking for $CXX warning options..." >&5
+echo "$as_me: checking for $CXX warning options..." >&6;}
+ cf_save_CXXFLAGS="$CXXFLAGS"
+ EXTRA_CXXFLAGS="-W -Wall"
+ cf_gxx_extra_warnings=""
+ test "$with_ext_const" = yes && cf_gxx_extra_warnings="Wwrite-strings"
+ case "$GXX_VERSION" in
+ ([1-2].*)
+ ;;
+ (*)
+ cf_gxx_extra_warnings="$cf_gxx_extra_warnings Weffc++"
+ ;;
+ esac
+ for cf_opt in \
+ Wabi \
+ fabi-version=0 \
+ Wextra \
+ Wignored-qualifiers \
+ Wlogical-op \
+ Woverloaded-virtual \
+ Wsign-promo \
+ Wsynth \
+ Wold-style-cast \
+ Wcast-align \
+ Wcast-qual \
+ Wpointer-arith \
+ Wshadow \
+ Wundef $cf_gxx_extra_warnings Wno-unused
+ do
+ CXXFLAGS="$cf_save_CXXFLAGS $EXTRA_CXXFLAGS -Werror -$cf_opt"
+ if { (eval echo "$as_me:16997: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:17000: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; then
+ test -n "$verbose" && echo "$as_me:17002: result: ... -$cf_opt" >&5
+echo "${ECHO_T}... -$cf_opt" >&6
+ EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -$cf_opt"
+ else
+ test -n "$verbose" && echo "$as_me:17006: result: ... no -$cf_opt" >&5
+echo "${ECHO_T}... no -$cf_opt" >&6
+ fi
+ done
+ CXXFLAGS="$cf_save_CXXFLAGS"
+fi
+
+rm -rf ./conftest*
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ac_main_return="return"
+
+ fi
+fi
+
+echo "$as_me:17024: checking if you want to work around bogus compiler/loader warnings" >&5
+echo $ECHO_N "checking if you want to work around bogus compiler/loader warnings... $ECHO_C" >&6
+
+# Check whether --enable-string-hacks or --disable-string-hacks was given.
+if test "${enable_string_hacks+set}" = set; then
+ enableval="$enable_string_hacks"
+ enable_string_hacks=$enableval
+else
+ enable_string_hacks=no
+fi;
+echo "$as_me:17034: result: $enable_string_hacks" >&5
+echo "${ECHO_T}$enable_string_hacks" >&6
+
+if test "x$enable_string_hacks" = "xyes"; then
cat >>confdefs.h <<\EOF
-#define HAVE_NC_ALLOC_H 1
+#define USE_STRING_HACKS 1
EOF
-### use option --enable-expanded to generate certain macros as functions
+ { echo "$as_me:17043: WARNING: enabling string-hacks to work around bogus compiler/loader warnings" >&5
+echo "$as_me: WARNING: enabling string-hacks to work around bogus compiler/loader warnings" >&2;}
+ echo "$as_me:17045: checking for strlcat" >&5
+echo $ECHO_N "checking for strlcat... $ECHO_C" >&6
+if test "${ac_cv_func_strlcat+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 17051 "configure"
+#include "confdefs.h"
+#define strlcat autoconf_temporary
+#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
+#undef strlcat
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char strlcat (void);
+
+int
+main (void)
+{
+
+/* The GNU C library defines stubs for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_strlcat) || defined (__stub___strlcat)
+#error found stub for strlcat
+#endif
+
+ return strlcat ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:17082: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:17085: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:17088: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:17091: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_func_strlcat=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_func_strlcat=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:17101: result: $ac_cv_func_strlcat" >&5
+echo "${ECHO_T}$ac_cv_func_strlcat" >&6
+if test "$ac_cv_func_strlcat" = yes; then
-# Check whether --enable-expanded or --disable-expanded was given.
-if test "${enable_expanded+set}" = set; then
- enableval="$enable_expanded"
- test "x$enableval" = xyes &&
cat >>confdefs.h <<\EOF
-#define NCURSES_EXPANDED 1
+#define HAVE_STRLCAT 1
EOF
-fi;
+else
-### use option --disable-macros to suppress macros in favor of functions
+ echo "$as_me:17111: checking for strlcat in -lbsd" >&5
+echo $ECHO_N "checking for strlcat in -lbsd... $ECHO_C" >&6
+if test "${ac_cv_lib_bsd_strlcat+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 17119 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char strlcat ();
+int
+main (void)
+{
+strlcat ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:17138: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:17141: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:17144: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:17147: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_lib_bsd_strlcat=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_bsd_strlcat=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:17158: result: $ac_cv_lib_bsd_strlcat" >&5
+echo "${ECHO_T}$ac_cv_lib_bsd_strlcat" >&6
+if test "$ac_cv_lib_bsd_strlcat" = yes; then
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lbsd; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
+ fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+for ac_header in bsd/string.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:17181: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 17187 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:17191: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:17197: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+ cat "conftest.$ac_ext" >&5
+ eval "$as_ac_Header=no"
+fi
+rm -f conftest.err "conftest.$ac_ext"
+fi
+echo "$as_me:17216: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
-# Check whether --enable-macros or --disable-macros was given.
-if test "${enable_macros+set}" = set; then
- enableval="$enable_macros"
- test "$enableval" = no &&
cat >>confdefs.h <<\EOF
-#define NCURSES_NOMACROS 1
+#define HAVE_STRLCAT 1
EOF
-fi;
+fi
-# Normally we only add trace() to the debug-library. Allow this to be
-# extended to all models of the ncurses library:
-cf_all_traces=no
-case "$CFLAGS $CPPFLAGS" in
-(*-DTRACE*)
- cf_all_traces=yes
- ;;
-esac
+fi
+
+for ac_func in strlcpy snprintf
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:17237: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 17243 "configure"
+#include "confdefs.h"
+#define $ac_func autoconf_temporary
+#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
+#undef $ac_func
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func (void);
+
+int
+main (void)
+{
+
+/* The GNU C library defines stubs for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#error found stub for $ac_func
+#endif
+
+ return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:17274: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:17277: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:17280: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:17283: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+eval "$as_ac_var=no"
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:17293: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+fi
+
+### use option --enable-assertions to turn on generation of assertion code
+echo "$as_me:17306: checking if you want to enable runtime assertions" >&5
+echo $ECHO_N "checking if you want to enable runtime assertions... $ECHO_C" >&6
+
+# Check whether --enable-assertions or --disable-assertions was given.
+if test "${enable_assertions+set}" = set; then
+ enableval="$enable_assertions"
+ with_assertions=$enableval
+else
+ with_assertions=no
+fi;
+echo "$as_me:17316: result: $with_assertions" >&5
+echo "${ECHO_T}$with_assertions" >&6
+if test -n "$GCC"
+then
+ if test "$with_assertions" = no
+ then
+ CPPFLAGS="$CPPFLAGS -DNDEBUG"
+ else
+
+ ADAFLAGS="$ADAFLAGS -gnata"
+
+ fi
+fi
+
+### use option --disable-leaks to suppress "permanent" leaks, for testing
+
+echo "$as_me:17332: checking if you want to use dmalloc for testing" >&5
+echo $ECHO_N "checking if you want to use dmalloc for testing... $ECHO_C" >&6
+
+# Check whether --with-dmalloc or --without-dmalloc was given.
+if test "${with_dmalloc+set}" = set; then
+ withval="$with_dmalloc"
+
+cat >>confdefs.h <<EOF
+#define USE_DMALLOC 1
+EOF
+
+ : "${with_cflags:=-g}"
+ : "${enable_leaks:=no}"
+ with_dmalloc=yes
+else
+ with_dmalloc=
+fi;
+echo "$as_me:17349: result: ${with_dmalloc:-no}" >&5
+echo "${ECHO_T}${with_dmalloc:-no}" >&6
+
+case ".$with_cflags" in
+(.*-g*)
+ case .$CFLAGS in
+ (.*-g*)
+ ;;
+ (*)
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in -g
+do
+case "$cf_fix_cppflags" in
+(no)
+ case "$cf_add_cflags" in
+ (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test "$cf_fix_cppflags" = yes ; then
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ (*$cf_add_cflags)
+ ;;
+ (*)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+
+ test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+ cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
+ ;;
+ esac
+ ;;
+ (*)
+
+ test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+ cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
+ ;;
+ esac
+ ;;
+(yes)
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
+
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+ CFLAGS="${CFLAGS}$cf_new_cflags"
+
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+ CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+ EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
+fi
+
+ ;;
+ esac
+ ;;
+esac
+
+if test "$with_dmalloc" = yes ; then
+ echo "$as_me:17463: checking for dmalloc.h" >&5
+echo $ECHO_N "checking for dmalloc.h... $ECHO_C" >&6
+if test "${ac_cv_header_dmalloc_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 17469 "configure"
+#include "confdefs.h"
+#include <dmalloc.h>
+_ACEOF
+if { (eval echo "$as_me:17473: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:17479: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_cv_header_dmalloc_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+ cat "conftest.$ac_ext" >&5
+ ac_cv_header_dmalloc_h=no
+fi
+rm -f conftest.err "conftest.$ac_ext"
+fi
+echo "$as_me:17498: result: $ac_cv_header_dmalloc_h" >&5
+echo "${ECHO_T}$ac_cv_header_dmalloc_h" >&6
+if test "$ac_cv_header_dmalloc_h" = yes; then
+
+echo "$as_me:17502: checking for dmalloc_debug in -ldmalloc" >&5
+echo $ECHO_N "checking for dmalloc_debug in -ldmalloc... $ECHO_C" >&6
+if test "${ac_cv_lib_dmalloc_dmalloc_debug+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldmalloc $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 17510 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dmalloc_debug ();
+int
+main (void)
+{
+dmalloc_debug ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:17529: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:17532: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:17535: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:17538: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_lib_dmalloc_dmalloc_debug=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_dmalloc_dmalloc_debug=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:17549: result: $ac_cv_lib_dmalloc_dmalloc_debug" >&5
+echo "${ECHO_T}$ac_cv_lib_dmalloc_dmalloc_debug" >&6
+if test "$ac_cv_lib_dmalloc_dmalloc_debug" = yes; then
+ cat >>confdefs.h <<EOF
+#define HAVE_LIBDMALLOC 1
+EOF
+
+ LIBS="-ldmalloc $LIBS"
+
+fi
+
+fi
+
+fi
+
+echo "$as_me:17564: checking if you want to use dbmalloc for testing" >&5
+echo $ECHO_N "checking if you want to use dbmalloc for testing... $ECHO_C" >&6
+
+# Check whether --with-dbmalloc or --without-dbmalloc was given.
+if test "${with_dbmalloc+set}" = set; then
+ withval="$with_dbmalloc"
+
+cat >>confdefs.h <<EOF
+#define USE_DBMALLOC 1
+EOF
+
+ : "${with_cflags:=-g}"
+ : "${enable_leaks:=no}"
+ with_dbmalloc=yes
+else
+ with_dbmalloc=
+fi;
+echo "$as_me:17581: result: ${with_dbmalloc:-no}" >&5
+echo "${ECHO_T}${with_dbmalloc:-no}" >&6
+
+case ".$with_cflags" in
+(.*-g*)
+ case .$CFLAGS in
+ (.*-g*)
+ ;;
+ (*)
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in -g
+do
+case "$cf_fix_cppflags" in
+(no)
+ case "$cf_add_cflags" in
+ (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test "$cf_fix_cppflags" = yes ; then
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ (*$cf_add_cflags)
+ ;;
+ (*)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+
+ test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+ cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
+ ;;
+ esac
+ ;;
+ (*)
+
+ test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+ cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
+ ;;
+ esac
+ ;;
+(yes)
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
+
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+ CFLAGS="${CFLAGS}$cf_new_cflags"
+
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+ CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+ EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
+fi
+
+ ;;
+ esac
+ ;;
+esac
+
+if test "$with_dbmalloc" = yes ; then
+ echo "$as_me:17695: checking for dbmalloc.h" >&5
+echo $ECHO_N "checking for dbmalloc.h... $ECHO_C" >&6
+if test "${ac_cv_header_dbmalloc_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 17701 "configure"
+#include "confdefs.h"
+#include <dbmalloc.h>
+_ACEOF
+if { (eval echo "$as_me:17705: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:17711: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_cv_header_dbmalloc_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+ cat "conftest.$ac_ext" >&5
+ ac_cv_header_dbmalloc_h=no
+fi
+rm -f conftest.err "conftest.$ac_ext"
+fi
+echo "$as_me:17730: result: $ac_cv_header_dbmalloc_h" >&5
+echo "${ECHO_T}$ac_cv_header_dbmalloc_h" >&6
+if test "$ac_cv_header_dbmalloc_h" = yes; then
+
+echo "$as_me:17734: checking for debug_malloc in -ldbmalloc" >&5
+echo $ECHO_N "checking for debug_malloc in -ldbmalloc... $ECHO_C" >&6
+if test "${ac_cv_lib_dbmalloc_debug_malloc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldbmalloc $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 17742 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char debug_malloc ();
+int
+main (void)
+{
+debug_malloc ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:17761: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:17764: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:17767: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:17770: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_lib_dbmalloc_debug_malloc=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_dbmalloc_debug_malloc=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:17781: result: $ac_cv_lib_dbmalloc_debug_malloc" >&5
+echo "${ECHO_T}$ac_cv_lib_dbmalloc_debug_malloc" >&6
+if test "$ac_cv_lib_dbmalloc_debug_malloc" = yes; then
+ cat >>confdefs.h <<EOF
+#define HAVE_LIBDBMALLOC 1
+EOF
+
+ LIBS="-ldbmalloc $LIBS"
+
+fi
+
+fi
+
+fi
+
+echo "$as_me:17796: checking if you want to use valgrind for testing" >&5
+echo $ECHO_N "checking if you want to use valgrind for testing... $ECHO_C" >&6
+
+# Check whether --with-valgrind or --without-valgrind was given.
+if test "${with_valgrind+set}" = set; then
+ withval="$with_valgrind"
+
+cat >>confdefs.h <<EOF
+#define USE_VALGRIND 1
+EOF
+
+ : "${with_cflags:=-g}"
+ : "${enable_leaks:=no}"
+ with_valgrind=yes
+else
+ with_valgrind=
+fi;
+echo "$as_me:17813: result: ${with_valgrind:-no}" >&5
+echo "${ECHO_T}${with_valgrind:-no}" >&6
+
+case ".$with_cflags" in
+(.*-g*)
+ case .$CFLAGS in
+ (.*-g*)
+ ;;
+ (*)
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in -g
+do
+case "$cf_fix_cppflags" in
+(no)
+ case "$cf_add_cflags" in
+ (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test "$cf_fix_cppflags" = yes ; then
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ (*$cf_add_cflags)
+ ;;
+ (*)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+
+ test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+ cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
+ ;;
+ esac
+ ;;
+ (*)
+
+ test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+ cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
+ ;;
+ esac
+ ;;
+(yes)
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
+
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+ CFLAGS="${CFLAGS}$cf_new_cflags"
+
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+ CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+ EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
+fi
+
+ ;;
+ esac
+ ;;
+esac
+
+echo "$as_me:17926: checking if you want to perform memory-leak testing" >&5
+echo $ECHO_N "checking if you want to perform memory-leak testing... $ECHO_C" >&6
+
+# Check whether --enable-leaks or --disable-leaks was given.
+if test "${enable_leaks+set}" = set; then
+ enableval="$enable_leaks"
+ enable_leaks=no
+else
+ enable_leaks=yes
+fi;
+if test "x$enable_leaks" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi
+echo "$as_me:17937: result: $with_no_leaks" >&5
+echo "${ECHO_T}$with_no_leaks" >&6
+
+if test "$enable_leaks" = no ; then
+
+cat >>confdefs.h <<\EOF
+#define NO_LEAKS 1
+EOF
+
+cat >>confdefs.h <<\EOF
+#define YY_NO_LEAKS 1
+EOF
+
+fi
+
+cat >>confdefs.h <<\EOF
+#define HAVE_NC_ALLOC_H 1
+EOF
+
+### use option --enable-expanded to generate certain macros as functions
+
+# Check whether --enable-expanded or --disable-expanded was given.
+if test "${enable_expanded+set}" = set; then
+ enableval="$enable_expanded"
+ test "x$enableval" = xyes &&
+cat >>confdefs.h <<\EOF
+#define NCURSES_EXPANDED 1
+EOF
+
+fi;
+
+### use option --disable-macros to suppress macros in favor of functions
+
+# Check whether --enable-macros or --disable-macros was given.
+if test "${enable_macros+set}" = set; then
+ enableval="$enable_macros"
+ test "$enableval" = no &&
+cat >>confdefs.h <<\EOF
+#define NCURSES_NOMACROS 1
+EOF
+
+fi;
+
+# Normally we only add trace() to the debug-library. Allow this to be
+# extended to all models of the ncurses library:
+cf_all_traces=no
+case "$CFLAGS $CPPFLAGS" in
+(*-DTRACE*)
+ cf_all_traces=yes
+ ;;
+esac
+
+echo "$as_me:17989: checking whether to add trace feature to all models" >&5
+echo $ECHO_N "checking whether to add trace feature to all models... $ECHO_C" >&6
+
+# Check whether --with-trace or --without-trace was given.
+if test "${with_trace+set}" = set; then
+ withval="$with_trace"
+ cf_with_trace=$withval
+else
+ cf_with_trace=$cf_all_traces
+fi;
+echo "$as_me:17999: result: $cf_with_trace" >&5
+echo "${ECHO_T}$cf_with_trace" >&6
+
+if test "x$cf_with_trace" = xyes ; then
+ LIB_TRACING=all
+ ADA_TRACE=TRUE
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in -DTRACE
+do
+case "$cf_fix_cppflags" in
+(no)
+ case "$cf_add_cflags" in
+ (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test "$cf_fix_cppflags" = yes ; then
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ (*$cf_add_cflags)
+ ;;
+ (*)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+
+ test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+ cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
+ ;;
+ esac
+ ;;
+ (*)
+
+ test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+ cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
+ ;;
+ esac
+ ;;
+(yes)
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
+
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+ CFLAGS="${CFLAGS}$cf_new_cflags"
+
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+ CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+ EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
+fi
+
+cat >>confdefs.h <<\EOF
+#define HAVE__TRACEF 1
+EOF
+
+else
+ LIB_TRACING=DEBUG
+ ADA_TRACE=FALSE
+fi
+
+echo "$as_me:18113: checking if we want to use GNAT projects" >&5
+echo $ECHO_N "checking if we want to use GNAT projects... $ECHO_C" >&6
+
+# Check whether --enable-gnat-projects or --disable-gnat-projects was given.
+if test "${enable_gnat_projects+set}" = set; then
+ enableval="$enable_gnat_projects"
+ test "$enableval" != no && enableval=yes
+ if test "$enableval" != "yes" ; then
+ enable_gnat_projects=no
+ else
+ enable_gnat_projects=yes
+ fi
+else
+ enableval=yes
+ enable_gnat_projects=yes
+
+fi;
+echo "$as_me:18130: result: $enable_gnat_projects" >&5
+echo "${ECHO_T}$enable_gnat_projects" >&6
+
+### Checks for libraries.
+case "$cf_cv_system_name" in
+(*mingw32*|*mingw64*)
+ if test "x$with_exp_win32" = xyes ; then
+ CPPFLAGS="$CPPFLAGS -DWINVER=0x0600 -DWIN32_LEAN_AND_MEAN"
+ else
+ CPPFLAGS="$CPPFLAGS -DWINVER=0x0501 -DWIN32_LEAN_AND_MEAN"
+ fi
+ # Note: WINVER may be a problem with Windows 10
+ ;;
+(*)
+echo "$as_me:18144: checking for gettimeofday" >&5
+echo $ECHO_N "checking for gettimeofday... $ECHO_C" >&6
+if test "${ac_cv_func_gettimeofday+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 18150 "configure"
+#include "confdefs.h"
+#define gettimeofday autoconf_temporary
+#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
+#undef gettimeofday
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gettimeofday (void);
+
+int
+main (void)
+{
+
+/* The GNU C library defines stubs for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_gettimeofday) || defined (__stub___gettimeofday)
+#error found stub for gettimeofday
+#endif
+
+ return gettimeofday ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18181: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:18184: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:18187: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:18190: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_func_gettimeofday=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_func_gettimeofday=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:18200: result: $ac_cv_func_gettimeofday" >&5
+echo "${ECHO_T}$ac_cv_func_gettimeofday" >&6
+if test "$ac_cv_func_gettimeofday" = yes; then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_GETTIMEOFDAY 1
+EOF
+
+else
+
+echo "$as_me:18210: checking for gettimeofday in -lbsd" >&5
+echo $ECHO_N "checking for gettimeofday in -lbsd... $ECHO_C" >&6
+if test "${ac_cv_lib_bsd_gettimeofday+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 18218 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gettimeofday ();
+int
+main (void)
+{
+gettimeofday ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18237: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:18240: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:18243: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:18246: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_lib_bsd_gettimeofday=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_bsd_gettimeofday=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:18257: result: $ac_cv_lib_bsd_gettimeofday" >&5
+echo "${ECHO_T}$ac_cv_lib_bsd_gettimeofday" >&6
+if test "$ac_cv_lib_bsd_gettimeofday" = yes; then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_GETTIMEOFDAY 1
+EOF
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lbsd; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
+ fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+fi
+
+fi
+ ;;
+esac
+
+echo "$as_me:18287: checking if -lm needed for math functions" >&5
+echo $ECHO_N "checking if -lm needed for math functions... $ECHO_C" >&6
+if test "${cf_cv_need_libm+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 18294 "configure"
+#include "confdefs.h"
+
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <math.h>
+
+int
+main (void)
+{
+double x = rand(); printf("result = %g\\n", pow(sin(x),x))
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18310: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:18313: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:18316: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:18319: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_need_libm=no
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_need_libm=yes
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:18329: result: $cf_cv_need_libm" >&5
+echo "${ECHO_T}$cf_cv_need_libm" >&6
+if test "$cf_cv_need_libm" = yes
+then
+MATH_LIB=-lm
+fi
+
+### Checks for header files.
+echo "$as_me:18337: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 18343 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+_ACEOF
+if { (eval echo "$as_me:18351: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:18357: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+ cat "conftest.$ac_ext" >&5
+ ac_cv_header_stdc=no
+fi
+rm -f conftest.err "conftest.$ac_ext"
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 18379 "configure"
+#include "confdefs.h"
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -rf conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 18397 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -rf conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 18418 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main (void)
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ $ac_main_return(2);
+ $ac_main_return (0);
+}
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:18444: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:18447: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:18449: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:18452: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_header_stdc=no
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+fi
+fi
+echo "$as_me:18465: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+ as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+echo "$as_me:18478: checking for $ac_hdr that defines DIR" >&5
+echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 18484 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main (void)
+{
+if ((DIR *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:18499: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:18502: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:18505: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:18508: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+eval "$as_ac_Header=no"
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+echo "$as_me:18518: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+EOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+ echo "$as_me:18531: checking for opendir in -ldir" >&5
+echo $ECHO_N "checking for opendir in -ldir... $ECHO_C" >&6
+if test "${ac_cv_lib_dir_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldir $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 18539 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main (void)
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18558: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:18561: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:18564: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:18567: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_lib_dir_opendir=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_dir_opendir=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:18578: result: $ac_cv_lib_dir_opendir" >&5
+echo "${ECHO_T}$ac_cv_lib_dir_opendir" >&6
+if test "$ac_cv_lib_dir_opendir" = yes; then
+ LIBS="$LIBS -ldir"
+fi
+
+else
+ echo "$as_me:18585: checking for opendir in -lx" >&5
+echo $ECHO_N "checking for opendir in -lx... $ECHO_C" >&6
+if test "${ac_cv_lib_x_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lx $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 18593 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main (void)
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18612: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:18615: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:18618: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:18621: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_lib_x_opendir=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_x_opendir=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:18632: result: $ac_cv_lib_x_opendir" >&5
+echo "${ECHO_T}$ac_cv_lib_x_opendir" >&6
+if test "$ac_cv_lib_x_opendir" = yes; then
+ LIBS="$LIBS -lx"
+fi
+
+fi
+
+echo "$as_me:18640: checking whether time.h and sys/time.h may both be included" >&5
+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
+if test "${ac_cv_header_time+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 18646 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main (void)
+{
+if ((struct tm *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:18662: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:18665: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:18668: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:18671: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_header_time=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_header_time=no
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+echo "$as_me:18681: result: $ac_cv_header_time" >&5
+echo "${ECHO_T}$ac_cv_header_time" >&6
+if test $ac_cv_header_time = yes; then
+
+cat >>confdefs.h <<\EOF
+#define TIME_WITH_SYS_TIME 1
+EOF
+
+fi
+
+cf_regex_func=no
+cf_regex_libs=
+case "$host_os" in
+(mingw*)
+ # -lsystre -ltre -lintl -liconv
+ echo "$as_me:18696: checking for regcomp in -lsystre" >&5
+echo $ECHO_N "checking for regcomp in -lsystre... $ECHO_C" >&6
+if test "${ac_cv_lib_systre_regcomp+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsystre $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 18704 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char regcomp ();
+int
+main (void)
+{
+regcomp ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18723: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:18726: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:18729: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:18732: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_lib_systre_regcomp=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_systre_regcomp=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:18743: result: $ac_cv_lib_systre_regcomp" >&5
+echo "${ECHO_T}$ac_cv_lib_systre_regcomp" >&6
+if test "$ac_cv_lib_systre_regcomp" = yes; then
+
+ echo "$as_me:18747: checking for libiconv_open in -liconv" >&5
+echo $ECHO_N "checking for libiconv_open in -liconv... $ECHO_C" >&6
+if test "${ac_cv_lib_iconv_libiconv_open+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-liconv $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 18755 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char libiconv_open ();
+int
+main (void)
+{
+libiconv_open ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18774: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:18777: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:18780: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:18783: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_lib_iconv_libiconv_open=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_iconv_libiconv_open=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:18794: result: $ac_cv_lib_iconv_libiconv_open" >&5
+echo "${ECHO_T}$ac_cv_lib_iconv_libiconv_open" >&6
+if test "$ac_cv_lib_iconv_libiconv_open" = yes; then
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -liconv; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
+ fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
-echo "$as_me:16987: checking whether to add trace feature to all models" >&5
-echo $ECHO_N "checking whether to add trace feature to all models... $ECHO_C" >&6
+fi
-# Check whether --with-trace or --without-trace was given.
-if test "${with_trace+set}" = set; then
- withval="$with_trace"
- cf_with_trace=$withval
+ echo "$as_me:18816: checking for libintl_gettext in -lintl" >&5
+echo $ECHO_N "checking for libintl_gettext in -lintl... $ECHO_C" >&6
+if test "${ac_cv_lib_intl_libintl_gettext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cf_with_trace=$cf_all_traces
-fi;
-echo "$as_me:16997: result: $cf_with_trace" >&5
-echo "${ECHO_T}$cf_with_trace" >&6
-
-if test "x$cf_with_trace" = xyes ; then
- LIB_TRACING=all
- ADA_TRACE=TRUE
-
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 18824 "configure"
+#include "confdefs.h"
-for cf_add_cflags in -DTRACE
-do
-case $cf_fix_cppflags in
-(no)
- case $cf_add_cflags in
- (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char libintl_gettext ();
+int
+main (void)
+{
+libintl_gettext ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18843: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:18846: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:18849: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:18852: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_lib_intl_libintl_gettext=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_intl_libintl_gettext=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:18863: result: $ac_cv_lib_intl_libintl_gettext" >&5
+echo "${ECHO_T}$ac_cv_lib_intl_libintl_gettext" >&6
+if test "$ac_cv_lib_intl_libintl_gettext" = yes; then
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lintl; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
+ fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
- if test $cf_fix_cppflags = yes ; then
+fi
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+ echo "$as_me:18885: checking for tre_regcomp in -ltre" >&5
+echo $ECHO_N "checking for tre_regcomp in -ltre... $ECHO_C" >&6
+if test "${ac_cv_lib_tre_tre_regcomp+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ltre $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 18893 "configure"
+#include "confdefs.h"
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char tre_regcomp ();
+int
+main (void)
+{
+tre_regcomp ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18912: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:18915: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:18918: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:18921: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_lib_tre_tre_regcomp=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_tre_tre_regcomp=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:18932: result: $ac_cv_lib_tre_tre_regcomp" >&5
+echo "${ECHO_T}$ac_cv_lib_tre_tre_regcomp" >&6
+if test "$ac_cv_lib_tre_tre_regcomp" = yes; then
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -ltre; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
+ fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
- continue
- fi
- ;;
- esac
- case "$CPPFLAGS" in
- (*$cf_add_cflags)
- ;;
- (*)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+fi
-CPPFLAGS=`echo "$CPPFLAGS" | \
- sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
- -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lsystre; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
+ fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
- ;;
- esac
+ cf_regex_func=regcomp
- test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
- cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+else
- ;;
- esac
- ;;
- (*)
+ echo "$as_me:18974: checking for regcomp in -lgnurx" >&5
+echo $ECHO_N "checking for regcomp in -lgnurx... $ECHO_C" >&6
+if test "${ac_cv_lib_gnurx_regcomp+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgnurx $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 18982 "configure"
+#include "confdefs.h"
- test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
- cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char regcomp ();
+int
+main (void)
+{
+regcomp ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19001: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:19004: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:19007: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:19010: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_lib_gnurx_regcomp=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_gnurx_regcomp=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:19021: result: $ac_cv_lib_gnurx_regcomp" >&5
+echo "${ECHO_T}$ac_cv_lib_gnurx_regcomp" >&6
+if test "$ac_cv_lib_gnurx_regcomp" = yes; then
- ;;
- esac
- ;;
-(yes)
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lgnurx; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
+ fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+ cf_regex_func=regcomp
+fi
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+fi
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
;;
-esac
-done
-
-if test -n "$cf_new_cflags" ; then
+(*)
+ cf_regex_libs="regex re"
+ echo "$as_me:19049: checking for regcomp" >&5
+echo $ECHO_N "checking for regcomp... $ECHO_C" >&6
+if test "${ac_cv_func_regcomp+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 19055 "configure"
+#include "confdefs.h"
+#define regcomp autoconf_temporary
+#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
+#undef regcomp
- test -n "$CFLAGS" && CFLAGS="$CFLAGS "
- CFLAGS="${CFLAGS}$cf_new_cflags"
+#ifdef __cplusplus
+extern "C"
+#endif
-fi
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char regcomp (void);
-if test -n "$cf_new_cppflags" ; then
+int
+main (void)
+{
- test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
- CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+/* The GNU C library defines stubs for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_regcomp) || defined (__stub___regcomp)
+#error found stub for regcomp
+#endif
+ return regcomp ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19086: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:19089: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:19092: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:19095: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_func_regcomp=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_func_regcomp=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
+echo "$as_me:19105: result: $ac_cv_func_regcomp" >&5
+echo "${ECHO_T}$ac_cv_func_regcomp" >&6
+if test "$ac_cv_func_regcomp" = yes; then
+ cf_regex_func=regcomp
+else
-if test -n "$cf_new_extra_cppflags" ; then
-
- test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
- EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+ for cf_regex_lib in $cf_regex_libs
+ do
+ as_ac_Lib=`echo "ac_cv_lib_$cf_regex_lib''_regcomp" | $as_tr_sh`
+echo "$as_me:19114: checking for regcomp in -l$cf_regex_lib" >&5
+echo $ECHO_N "checking for regcomp in -l$cf_regex_lib... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Lib+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-l$cf_regex_lib $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 19122 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char regcomp ();
+int
+main (void)
+{
+regcomp ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19141: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:19144: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:19147: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:19150: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ eval "$as_ac_Lib=yes"
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+eval "$as_ac_Lib=no"
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
fi
+echo "$as_me:19161: result: `eval echo '${'"$as_ac_Lib"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Lib"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Lib"'}'`" = yes; then
-cat >>confdefs.h <<\EOF
-#define HAVE__TRACEF 1
-EOF
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_regex_lib; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
+ fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
-else
- LIB_TRACING=DEBUG
- ADA_TRACE=FALSE
+ cf_regex_func=regcomp
+ break
fi
-echo "$as_me:17111: checking if we want to use GNAT projects" >&5
-echo $ECHO_N "checking if we want to use GNAT projects... $ECHO_C" >&6
-
-# Check whether --enable-gnat-projects or --disable-gnat-projects was given.
-if test "${enable_gnat_projects+set}" = set; then
- enableval="$enable_gnat_projects"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_gnat_projects=no
- else
- enable_gnat_projects=yes
- fi
-else
- enableval=yes
- enable_gnat_projects=yes
+ done
-fi;
-echo "$as_me:17128: result: $enable_gnat_projects" >&5
-echo "${ECHO_T}$enable_gnat_projects" >&6
+fi
-### Checks for libraries.
-case $cf_cv_system_name in
-(*mingw32*|*mingw64*)
- CPPFLAGS="$CPPFLAGS -DWINVER=0x0501 -DWIN32_LEAN_AND_MEAN"
- # Note: WINVER may be a problem with Windows 10
;;
-(*)
-echo "$as_me:17138: checking for gettimeofday" >&5
-echo $ECHO_N "checking for gettimeofday... $ECHO_C" >&6
-if test "${ac_cv_func_gettimeofday+set}" = set; then
+esac
+
+if test "$cf_regex_func" = no ; then
+ echo "$as_me:19193: checking for compile" >&5
+echo $ECHO_N "checking for compile... $ECHO_C" >&6
+if test "${ac_cv_func_compile+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 17144 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 19199 "configure"
#include "confdefs.h"
-#define gettimeofday autoconf_temporary
+#define compile autoconf_temporary
#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
-#undef gettimeofday
+#undef compile
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
-char gettimeofday (void);
+char compile (void);
int
main (void)
{
/* The GNU C library defines stubs for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_gettimeofday) || defined (__stub___gettimeofday)
-#error found stub for gettimeofday
+#if defined (__stub_compile) || defined (__stub___compile)
+#error found stub for compile
#endif
- return gettimeofday ();
+ return compile ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17175: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19230: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:17178: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:17181: \"$ac_try\"") >&5
+ echo "$as_me:19233: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:19236: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:17184: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_gettimeofday=yes
+ echo "$as_me:19239: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_func_compile=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_gettimeofday=no
+cat "conftest.$ac_ext" >&5
+ac_cv_func_compile=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:17194: result: $ac_cv_func_gettimeofday" >&5
-echo "${ECHO_T}$ac_cv_func_gettimeofday" >&6
-if test $ac_cv_func_gettimeofday = yes; then
-
-cat >>confdefs.h <<\EOF
-#define HAVE_GETTIMEOFDAY 1
-EOF
-
+echo "$as_me:19249: result: $ac_cv_func_compile" >&5
+echo "${ECHO_T}$ac_cv_func_compile" >&6
+if test "$ac_cv_func_compile" = yes; then
+ cf_regex_func=compile
else
-echo "$as_me:17204: checking for gettimeofday in -lbsd" >&5
-echo $ECHO_N "checking for gettimeofday in -lbsd... $ECHO_C" >&6
-if test "${ac_cv_lib_bsd_gettimeofday+set}" = set; then
+ echo "$as_me:19255: checking for compile in -lgen" >&5
+echo $ECHO_N "checking for compile in -lgen... $ECHO_C" >&6
+if test "${ac_cv_lib_gen_compile+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbsd $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 17212 "configure"
+LIBS="-lgen $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 19263 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
-char gettimeofday ();
+char compile ();
int
main (void)
{
-gettimeofday ();
+compile ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17231: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19282: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:17234: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:17237: \"$ac_try\"") >&5
+ echo "$as_me:19285: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:19288: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:17240: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_bsd_gettimeofday=yes
+ echo "$as_me:19291: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_lib_gen_compile=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_bsd_gettimeofday=no
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_gen_compile=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:17251: result: $ac_cv_lib_bsd_gettimeofday" >&5
-echo "${ECHO_T}$ac_cv_lib_bsd_gettimeofday" >&6
-if test $ac_cv_lib_bsd_gettimeofday = yes; then
-
-cat >>confdefs.h <<\EOF
-#define HAVE_GETTIMEOFDAY 1
-EOF
+echo "$as_me:19302: result: $ac_cv_lib_gen_compile" >&5
+echo "${ECHO_T}$ac_cv_lib_gen_compile" >&6
+if test "$ac_cv_lib_gen_compile" = yes; then
cf_add_libs="$LIBS"
# reverse order
cf_add_0lib=
-for cf_add_1lib in -lbsd; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+for cf_add_1lib in -lgen; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
LIBS="$cf_add_libs"
+ cf_regex_func=compile
+fi
+
+fi
+
+fi
+
+if test "$cf_regex_func" = no ; then
+ { echo "$as_me:19330: WARNING: cannot find regular expression library" >&5
+echo "$as_me: WARNING: cannot find regular expression library" >&2;}
+fi
+
+echo "$as_me:19334: checking for regular-expression headers" >&5
+echo $ECHO_N "checking for regular-expression headers... $ECHO_C" >&6
+if test "${cf_cv_regex_hdrs+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cf_cv_regex_hdrs=no
+case "$cf_regex_func" in
+(compile)
+ for cf_regex_hdr in regexp.h regexpr.h
+ do
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 19346 "configure"
+#include "confdefs.h"
+#include <$cf_regex_hdr>
+int
+main (void)
+{
+
+ char *p = compile("", "", "", 0);
+ int x = step("", "");
+ (void)p;
+ (void)x;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19363: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:19366: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:19369: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:19372: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+
+ cf_cv_regex_hdrs=$cf_regex_hdr
+ break
+
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+ done
+ ;;
+(*)
+ for cf_regex_hdr in regex.h
+ do
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 19389 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <$cf_regex_hdr>
+int
+main (void)
+{
+ regex_t *p = 0;
+ int x = regcomp(p, "", 0);
+ int y = regexec(p, "", 0, 0, 0);
+ (void)x;
+ (void)y;
+ regfree(p);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19409: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:19412: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:19415: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:19418: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+
+ cf_cv_regex_hdrs=$cf_regex_hdr
+ break
+
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+ done
;;
esac
-echo "$as_me:17281: checking if -lm needed for math functions" >&5
-echo $ECHO_N "checking if -lm needed for math functions... $ECHO_C" >&6
-if test "${cf_cv_need_libm+set}" = set; then
+fi
+echo "$as_me:19434: result: $cf_cv_regex_hdrs" >&5
+echo "${ECHO_T}$cf_cv_regex_hdrs" >&6
+
+case "$cf_cv_regex_hdrs" in
+ (no) { echo "$as_me:19438: WARNING: no regular expression header found" >&5
+echo "$as_me: WARNING: no regular expression header found" >&2;} ;;
+ (regex.h)
+cat >>confdefs.h <<\EOF
+#define HAVE_REGEX_H_FUNCS 1
+EOF
+ ;;
+ (regexp.h)
+cat >>confdefs.h <<\EOF
+#define HAVE_REGEXP_H_FUNCS 1
+EOF
+ ;;
+ (regexpr.h)
+cat >>confdefs.h <<\EOF
+#define HAVE_REGEXPR_H_FUNCS 1
+EOF
+ ;;
+esac
+
+for ac_header in \
+fcntl.h \
+getopt.h \
+limits.h \
+locale.h \
+math.h \
+poll.h \
+sys/ioctl.h \
+sys/param.h \
+sys/poll.h \
+sys/select.h \
+sys/time.h \
+sys/times.h \
+ttyent.h \
+unistd.h \
+wctype.h \
+
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:19476: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 17288 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 19482 "configure"
#include "confdefs.h"
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
-
-int
-main (void)
-{
-double x = rand(); printf("result = %g\n", pow(sin(x),x))
- ;
- return 0;
-}
+#include <$ac_header>
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17304: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:17307: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:17310: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+if { (eval echo "$as_me:19486: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- echo "$as_me:17313: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_need_libm=no
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:19492: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ eval "$as_ac_Header=yes"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_need_libm=yes
+ cat "conftest.$ac_ext" >&5
+ eval "$as_ac_Header=no"
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
fi
-echo "$as_me:17323: result: $cf_cv_need_libm" >&5
-echo "${ECHO_T}$cf_cv_need_libm" >&6
-if test "$cf_cv_need_libm" = yes
-then
-MATH_LIB=-lm
+echo "$as_me:19511: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
fi
+done
-### Checks for header files.
-echo "$as_me:17331: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
+for ac_header in unistd.h getopt.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:19524: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 17337 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 19530 "configure"
#include "confdefs.h"
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
+#include <$ac_header>
_ACEOF
-if { (eval echo "$as_me:17345: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:19534: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:17351: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
+ echo "$as_me:19540: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
else
ac_cpp_err=
fi
else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
- ac_cv_header_stdc=yes
+ eval "$as_ac_Header=yes"
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_header_stdc=no
+ cat "conftest.$ac_ext" >&5
+ eval "$as_ac_Header=no"
+fi
+rm -f conftest.err "conftest.$ac_ext"
fi
-rm -f conftest.err conftest.$ac_ext
+echo "$as_me:19559: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-#line 17373 "configure"
+fi
+done
+
+echo "$as_me:19569: checking for header declaring getopt variables" >&5
+echo $ECHO_N "checking for header declaring getopt variables... $ECHO_C" >&6
+if test "${cf_cv_getopt_header+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cf_cv_getopt_header=none
+for cf_header in stdio.h stdlib.h unistd.h getopt.h
+do
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 19579 "configure"
#include "confdefs.h"
-#include <string.h>
+#include <$cf_header>
+int
+main (void)
+{
+int x = optind; char *y = optarg
+ ;
+ return 0;
+}
_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "memchr" >/dev/null 2>&1; then
- :
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:19592: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:19595: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:19598: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:19601: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_getopt_header=$cf_header
+ break
else
- ac_cv_header_stdc=no
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -rf conftest*
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+done
fi
+echo "$as_me:19613: result: $cf_cv_getopt_header" >&5
+echo "${ECHO_T}$cf_cv_getopt_header" >&6
+if test "$cf_cv_getopt_header" != none ; then
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-#line 17391 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
+cat >>confdefs.h <<\EOF
+#define HAVE_GETOPT_HEADER 1
+EOF
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "free" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
fi
-rm -rf conftest*
+if test "$cf_cv_getopt_header" = getopt.h ; then
+
+cat >>confdefs.h <<\EOF
+#define NEED_GETOPT_H 1
+EOF
fi
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then
- :
+echo "$as_me:19630: checking if external environ is declared" >&5
+echo $ECHO_N "checking if external environ is declared... $ECHO_C" >&6
+if test "${cf_cv_dcl_environ+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 17412 "configure"
+
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 19637 "configure"
#include "confdefs.h"
-#include <ctype.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <unistd.h>
int
main (void)
{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- $ac_main_return(2);
- $ac_main_return (0);
+int x = (int) environ
+ ;
+ return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:17438: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:19653: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:17441: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:17443: \"$ac_try\"") >&5
+ echo "$as_me:19656: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:19659: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:17446: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
+ echo "$as_me:19662: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_dcl_environ=yes
else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_header_stdc=no
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_dcl_environ=no
fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+
fi
-echo "$as_me:17459: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
+echo "$as_me:19673: result: $cf_cv_dcl_environ" >&5
+echo "${ECHO_T}$cf_cv_dcl_environ" >&6
-cat >>confdefs.h <<\EOF
-#define STDC_HEADERS 1
+if test "$cf_cv_dcl_environ" = no ; then
+
+cf_result=`echo "decl_environ" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+ cat >>confdefs.h <<EOF
+#define $cf_result 1
EOF
fi
-ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
- as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-echo "$as_me:17472: checking for $ac_hdr that defines DIR" >&5
-echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+# It's possible (for near-UNIX clones) that the data doesn't exist
+
+echo "$as_me:19688: checking if external environ exists" >&5
+echo $ECHO_N "checking if external environ exists... $ECHO_C" >&6
+if test "${cf_cv_have_environ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 17478 "configure"
+
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 19695 "configure"
#include "confdefs.h"
-#include <sys/types.h>
-#include <$ac_hdr>
+
+#undef environ
+extern int environ;
int
main (void)
{
-if ((DIR *) 0)
-return 0;
+environ = 2
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:17493: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19710: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:17496: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:17499: \"$ac_try\"") >&5
+ echo "$as_me:19713: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:19716: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:17502: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_Header=yes"
+ echo "$as_me:19719: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_have_environ=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_Header=no"
+cat "conftest.$ac_ext" >&5
+cf_cv_have_environ=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+
fi
-echo "$as_me:17512: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+echo "$as_me:19730: result: $cf_cv_have_environ" >&5
+echo "${ECHO_T}$cf_cv_have_environ" >&6
+
+if test "$cf_cv_have_environ" = yes ; then
+
+cf_result=`echo "have_environ" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+ cat >>confdefs.h <<EOF
+#define $cf_result 1
EOF
-ac_header_dirent=$ac_hdr; break
fi
-done
-# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
-if test $ac_header_dirent = dirent.h; then
- echo "$as_me:17525: checking for opendir in -ldir" >&5
-echo $ECHO_N "checking for opendir in -ldir... $ECHO_C" >&6
-if test "${ac_cv_lib_dir_opendir+set}" = set; then
+echo "$as_me:19743: checking for getenv" >&5
+echo $ECHO_N "checking for getenv... $ECHO_C" >&6
+if test "${ac_cv_func_getenv+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldir $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 17533 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 19749 "configure"
#include "confdefs.h"
+#define getenv autoconf_temporary
+#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
+#undef getenv
-/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
+
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
-char opendir ();
+char getenv (void);
+
int
main (void)
{
-opendir ();
+
+/* The GNU C library defines stubs for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_getenv) || defined (__stub___getenv)
+#error found stub for getenv
+#endif
+
+ return getenv ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17552: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19780: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:17555: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:17558: \"$ac_try\"") >&5
+ echo "$as_me:19783: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:19786: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:17561: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dir_opendir=yes
+ echo "$as_me:19789: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_func_getenv=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_dir_opendir=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+cat "conftest.$ac_ext" >&5
+ac_cv_func_getenv=no
fi
-echo "$as_me:17572: result: $ac_cv_lib_dir_opendir" >&5
-echo "${ECHO_T}$ac_cv_lib_dir_opendir" >&6
-if test $ac_cv_lib_dir_opendir = yes; then
- LIBS="$LIBS -ldir"
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
+echo "$as_me:19799: result: $ac_cv_func_getenv" >&5
+echo "${ECHO_T}$ac_cv_func_getenv" >&6
-else
- echo "$as_me:17579: checking for opendir in -lx" >&5
-echo $ECHO_N "checking for opendir in -lx... $ECHO_C" >&6
-if test "${ac_cv_lib_x_opendir+set}" = set; then
+for ac_func in putenv setenv strdup
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:19805: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lx $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 17587 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 19811 "configure"
#include "confdefs.h"
+#define $ac_func autoconf_temporary
+#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
+#undef $ac_func
-/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
+
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
-char opendir ();
+char $ac_func (void);
+
int
main (void)
{
-opendir ();
+
+/* The GNU C library defines stubs for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#error found stub for $ac_func
+#endif
+
+ return $ac_func ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17606: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19842: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:17609: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:17612: \"$ac_try\"") >&5
+ echo "$as_me:19845: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:19848: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:17615: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_x_opendir=yes
+ echo "$as_me:19851: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_x_opendir=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+cat "conftest.$ac_ext" >&5
+eval "$as_ac_var=no"
fi
-echo "$as_me:17626: result: $ac_cv_lib_x_opendir" >&5
-echo "${ECHO_T}$ac_cv_lib_x_opendir" >&6
-if test $ac_cv_lib_x_opendir = yes; then
- LIBS="$LIBS -lx"
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
+echo "$as_me:19861: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+EOF
fi
+done
-echo "$as_me:17634: checking whether time.h and sys/time.h may both be included" >&5
-echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
-if test "${ac_cv_header_time+set}" = set; then
+echo "$as_me:19871: checking if getenv returns consistent values" >&5
+echo $ECHO_N "checking if getenv returns consistent values... $ECHO_C" >&6
+if test "${cf_cv_consistent_getenv+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 17640 "configure"
+
+if test "$cross_compiling" = yes; then
+ cf_cv_consistent_getenv=unknown
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 19881 "configure"
#include "confdefs.h"
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-int
-main (void)
+#if defined(HAVE_ENVIRON) && defined(DECL_ENVIRON) && !defined(environ)
+extern char **environ; /* POSIX, but some systems are not... */
+#endif
+
+#if defined(HAVE_STRDUP)
+#define str_alloc(s) strdup(s)
+#else
+#define str_alloc(s) strcpy(malloc(strlen(s) + 1, s))
+#endif
+
+static void set_value(const char *name, const char *value)
{
-if ((struct tm *) 0)
-return 0;
- ;
- return 0;
+#if defined(HAVE_SETENV)
+ setenv(name, value, 1);
+#elif defined(HAVE_PUTENV)
+ char buffer[1024];
+ sprintf(buffer, "%s=%s", name, value);
+ putenv(str_alloc(buffer));
+#else
+#error neither putenv/setenv found
+#endif
+}
+int main(void)
+{
+ int pass;
+ size_t numenv, limit, j;
+ char **mynames;
+ char **myvalues;
+ char **mypointer;
+ char *equals;
+ for (numenv = 0; environ[numenv]; ++numenv) ;
+ limit = numenv + 10;
+ mynames = (char **) calloc(limit + 1, sizeof(char *));
+ myvalues = (char **) calloc(limit + 1, sizeof(char *));
+ mypointer = (char **) calloc(limit + 1, sizeof(char *));
+#if defined(HAVE_ENVIRON)
+ for (j = 0; environ[j]; ++j) {
+ mynames[j] = str_alloc(environ[j]);
+ equals = strchr(mynames[j], '=');
+ if (equals != 0) {
+ *equals++ = '\\0';
+ myvalues[j] = str_alloc(equals);
+ } else {
+ myvalues[j] = str_alloc("");
+ }
+ }
+#endif
+ for (j = numenv; j < limit; ++j) {
+ char name[80];
+ char value[80];
+ size_t found;
+ size_t k = 0;
+ do {
+ size_t jk;
+ found = 0;
+ sprintf(name, "TERM%lu", (unsigned long) k);
+ for (jk = 0; jk < j; ++jk) {
+ if (!strcmp(name, mynames[jk])) {
+ found = 1;
+ ++k;
+ break;
+ }
+ }
+ } while (found);
+ sprintf(value, "%lu:%p", (unsigned long) k, &mynames[j]);
+ set_value(name, value);
+ mynames[j] = str_alloc(name);
+ myvalues[j] = str_alloc(value);
+ }
+ for (pass = 0; pass < 3; ++pass) {
+ for (j = 0; j < limit; ++j) {
+ char *value = getenv(mynames[j]);
+ if (pass) {
+ if (value == 0) {
+ fprintf(stderr, "getenv returned null for %s\\n", mynames[j]);
+ ${cf_cv_main_return:-return}(1);
+ } else if (value != mypointer[j]) {
+ fprintf(stderr, "getenv returned different pointer for %s\\n", mynames[j]);
+ ${cf_cv_main_return:-return}(1);
+ } else if (strcmp(value, myvalues[j])) {
+ fprintf(stderr, "getenv returned different value for %s\\n", mynames[j]);
+ ${cf_cv_main_return:-return}(1);
+ }
+ } else {
+ size_t k;
+ mypointer[j] = value;
+ for (k = 0; k < j; ++k) {
+ if (mypointer[j] == mypointer[k]) {
+ fprintf(stderr, "getenv returned same pointer for %s and %s\\n", mynames[j], mynames[k]);
+ ${cf_cv_main_return:-return}(1);
+ }
+ }
+ }
+ }
+ }
+ ${cf_cv_main_return:-return}(0);
}
+
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:17656: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:19990: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:17659: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:17662: \"$ac_try\"") >&5
+ echo "$as_me:19993: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:19995: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:17665: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_header_time=yes
+ echo "$as_me:19998: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_consistent_getenv=yes
else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_header_time=no
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_consistent_getenv=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:17675: result: $ac_cv_header_time" >&5
-echo "${ECHO_T}$ac_cv_header_time" >&6
-if test $ac_cv_header_time = yes; then
+
+fi
+echo "$as_me:20011: result: $cf_cv_consistent_getenv" >&5
+echo "${ECHO_T}$cf_cv_consistent_getenv" >&6
+
+if test "x$cf_cv_consistent_getenv" = xno
+then
cat >>confdefs.h <<\EOF
-#define TIME_WITH_SYS_TIME 1
+#define HAVE_CONSISTENT_GETENV 1
EOF
fi
-cf_regex_func=no
-
-cf_regex_libs="regex re"
-case $host_os in
-(mingw*)
- cf_regex_libs="gnurx $cf_regex_libs"
- ;;
-esac
+if test "x$cf_cv_consistent_getenv" = xno && \
+ test "x$cf_with_trace" = xyes
+then
+ { echo "$as_me:20026: WARNING: The NCURSES_TRACE environment variable is not supported with this configuration" >&5
+echo "$as_me: WARNING: The NCURSES_TRACE environment variable is not supported with this configuration" >&2;}
+fi
-echo "$as_me:17694: checking for regcomp" >&5
-echo $ECHO_N "checking for regcomp... $ECHO_C" >&6
-if test "${ac_cv_func_regcomp+set}" = set; then
+echo "$as_me:20030: checking if sys/time.h works with sys/select.h" >&5
+echo $ECHO_N "checking if sys/time.h works with sys/select.h... $ECHO_C" >&6
+if test "${cf_cv_sys_time_select+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 17700 "configure"
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 20037 "configure"
#include "confdefs.h"
-#define regcomp autoconf_temporary
-#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
-#undef regcomp
-#ifdef __cplusplus
-extern "C"
+#include <sys/types.h>
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
#endif
-
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char regcomp (void);
int
main (void)
{
-/* The GNU C library defines stubs for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_regcomp) || defined (__stub___regcomp)
-#error found stub for regcomp
-#endif
-
- return regcomp ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17731: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:20057: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:17734: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:17737: \"$ac_try\"") >&5
+ echo "$as_me:20060: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:20063: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:17740: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_regcomp=yes
+ echo "$as_me:20066: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_sys_time_select=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_regcomp=no
+cat "conftest.$ac_ext" >&5
+cf_cv_sys_time_select=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+
fi
-echo "$as_me:17750: result: $ac_cv_func_regcomp" >&5
-echo "${ECHO_T}$ac_cv_func_regcomp" >&6
-if test $ac_cv_func_regcomp = yes; then
- cf_regex_func=regcomp
-else
- for cf_regex_lib in $cf_regex_libs
- do
- as_ac_Lib=`echo "ac_cv_lib_$cf_regex_lib''_regcomp" | $as_tr_sh`
-echo "$as_me:17759: checking for regcomp in -l$cf_regex_lib" >&5
-echo $ECHO_N "checking for regcomp in -l$cf_regex_lib... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Lib+set}\" = set"; then
+echo "$as_me:20078: result: $cf_cv_sys_time_select" >&5
+echo "${ECHO_T}$cf_cv_sys_time_select" >&6
+test "$cf_cv_sys_time_select" = yes &&
+cat >>confdefs.h <<\EOF
+#define HAVE_SYS_TIME_SELECT 1
+EOF
+
+### checks for compiler characteristics
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ac_main_return="return"
+
+echo "$as_me:20093: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-l$cf_regex_lib $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 17767 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 20099 "configure"
#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
+int
+main (void)
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this. */
+ typedef int charset[2];
+ const charset x;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *ccp;
+ char **p;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ ccp = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++ccp;
+ p = (char**) ccp;
+ ccp = (char const *const *) p;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ }
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char regcomp ();
-int
-main (void)
-{
-regcomp ();
+
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17786: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:20157: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:17789: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:17792: \"$ac_try\"") >&5
+ echo "$as_me:20160: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:20163: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:17795: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_Lib=yes"
+ echo "$as_me:20166: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_c_const=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_Lib=no"
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+cat "conftest.$ac_ext" >&5
+ac_cv_c_const=no
fi
-echo "$as_me:17806: result: `eval echo '${'$as_ac_Lib'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6
-if test `eval echo '${'$as_ac_Lib'}'` = yes; then
-
-cf_add_libs="$LIBS"
-# reverse order
-cf_add_0lib=
-for cf_add_1lib in -l$cf_regex_lib; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
-# filter duplicates
-for cf_add_1lib in $cf_add_0lib; do
- for cf_add_2lib in $cf_add_libs; do
- if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
- cf_add_1lib=
- break
- fi
- done
- test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
-done
-LIBS="$cf_add_libs"
-
- cf_regex_func=regcomp
- break
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
+echo "$as_me:20176: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
- done
+cat >>confdefs.h <<\EOF
+#define const
+EOF
fi
-if test "$cf_regex_func" = no ; then
- echo "$as_me:17835: checking for compile" >&5
-echo $ECHO_N "checking for compile... $ECHO_C" >&6
-if test "${ac_cv_func_compile+set}" = set; then
+echo "$as_me:20186: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6
+if test "${ac_cv_c_inline+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 17841 "configure"
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 20194 "configure"
#include "confdefs.h"
-#define compile autoconf_temporary
-#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
-#undef compile
-
-#ifdef __cplusplus
-extern "C"
-#endif
-
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char compile (void);
-
-int
-main (void)
-{
-
-/* The GNU C library defines stubs for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_compile) || defined (__stub___compile)
-#error found stub for compile
+#ifndef __cplusplus
+static $ac_kw int static_foo () {return 0; }
+$ac_kw int foo () {return 0; }
#endif
- return compile ();
- ;
- return 0;
-}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17872: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:20203: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:17875: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:17878: \"$ac_try\"") >&5
+ echo "$as_me:20206: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:20209: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:17881: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_compile=yes
+ echo "$as_me:20212: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_c_inline=$ac_kw; break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_compile=no
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+done
+
fi
-echo "$as_me:17891: result: $ac_cv_func_compile" >&5
-echo "${ECHO_T}$ac_cv_func_compile" >&6
-if test $ac_cv_func_compile = yes; then
- cf_regex_func=compile
-else
+echo "$as_me:20223: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6
+case $ac_cv_c_inline in
+ inline | yes) ;;
+ no)
+cat >>confdefs.h <<\EOF
+#define inline
+EOF
+ ;;
+ *) cat >>confdefs.h <<EOF
+#define inline $ac_cv_c_inline
+EOF
+ ;;
+esac
- echo "$as_me:17897: checking for compile in -lgen" >&5
-echo $ECHO_N "checking for compile in -lgen... $ECHO_C" >&6
-if test "${ac_cv_lib_gen_compile+set}" = set; then
+NCURSES_INLINE=
+if test "$ac_cv_c_inline" != no ; then
+ NCURSES_INLINE=inline
+ if test "$INTEL_COMPILER" = yes
+ then
+ :
+ elif test "$CLANG_COMPILER" = yes
+ then
+ :
+ elif test "$GCC" = yes
+ then
+ echo "$as_me:20249: checking if $CC supports options to tune inlining" >&5
+echo $ECHO_N "checking if $CC supports options to tune inlining... $ECHO_C" >&6
+if test "${cf_cv_gcc_inline+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgen $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 17905 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char compile ();
+ cf_save_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS --param max-inline-insns-single=1200"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 20258 "configure"
+#include "confdefs.h"
+inline int foo(void) { return 1; }
int
main (void)
{
-compile ();
+${cf_cv_main_return:-return} foo()
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17924: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:20270: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:17927: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:17930: \"$ac_try\"") >&5
+ echo "$as_me:20273: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:20276: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:17933: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_gen_compile=yes
+ echo "$as_me:20279: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_gcc_inline=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_gen_compile=no
+cat "conftest.$ac_ext" >&5
+cf_cv_gcc_inline=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ CFLAGS=$cf_save_CFLAGS
+
fi
-echo "$as_me:17944: result: $ac_cv_lib_gen_compile" >&5
-echo "${ECHO_T}$ac_cv_lib_gen_compile" >&6
-if test $ac_cv_lib_gen_compile = yes; then
+echo "$as_me:20291: result: $cf_cv_gcc_inline" >&5
+echo "${ECHO_T}$cf_cv_gcc_inline" >&6
+ if test "$cf_cv_gcc_inline" = yes ; then
-cf_add_libs="$LIBS"
-# reverse order
-cf_add_0lib=
-for cf_add_1lib in -lgen; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
-# filter duplicates
-for cf_add_1lib in $cf_add_0lib; do
- for cf_add_2lib in $cf_add_libs; do
- if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
- cf_add_1lib=
- break
- fi
- done
- test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in --param max-inline-insns-single=1200
+do
+case "$cf_fix_cppflags" in
+(no)
+ case "$cf_add_cflags" in
+ (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test "$cf_fix_cppflags" = yes ; then
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ (*$cf_add_cflags)
+ ;;
+ (*)
+ case "$cf_add_cflags" in
+ (-D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+
+ test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+ cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
+ ;;
+ esac
+ ;;
+ (*)
+
+ test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+ cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
+ ;;
+ esac
+ ;;
+(yes)
+
+ test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+ cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+ cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
+
+ test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
done
-LIBS="$cf_add_libs"
- cf_regex_func=compile
+if test -n "$cf_new_cflags" ; then
+
+ test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+ CFLAGS="${CFLAGS}$cf_new_cflags"
+
fi
+if test -n "$cf_new_cppflags" ; then
+
+ test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+ CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
fi
+if test -n "$cf_new_extra_cppflags" ; then
+
+ test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+ EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
fi
-if test "$cf_regex_func" = no ; then
- { echo "$as_me:17972: WARNING: cannot find regular expression library" >&5
-echo "$as_me: WARNING: cannot find regular expression library" >&2;}
+ fi
+ fi
fi
-echo "$as_me:17976: checking for regular-expression headers" >&5
-echo $ECHO_N "checking for regular-expression headers... $ECHO_C" >&6
-if test "${cf_cv_regex_hdrs+set}" = set; then
+echo "$as_me:20397: checking for signal global datatype" >&5
+echo $ECHO_N "checking for signal global datatype... $ECHO_C" >&6
+if test "${cf_cv_sig_atomic_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-cf_cv_regex_hdrs=no
-case $cf_regex_func in
-(compile)
- for cf_regex_hdr in regexp.h regexpr.h
+ for cf_type in \
+ "volatile sig_atomic_t" \
+ "sig_atomic_t" \
+ "int"
do
- cat >conftest.$ac_ext <<_ACEOF
-#line 17988 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 20409 "configure"
#include "confdefs.h"
-#include <$cf_regex_hdr>
-int
-main (void)
-{
- char *p = compile("", "", "", 0);
- int x = step("", "");
+#include <sys/types.h>
+#include <signal.h>
+#include <stdio.h>
- ;
- return 0;
+extern $cf_type x;
+$cf_type x;
+static void handler(int sig)
+{
+ (void)sig;
+ x = 5;
}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:18003: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:18006: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:18009: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:18012: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- cf_cv_regex_hdrs=$cf_regex_hdr
- break
-
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- done
- ;;
-(*)
- for cf_regex_hdr in regex.h
- do
- cat >conftest.$ac_ext <<_ACEOF
-#line 18029 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <$cf_regex_hdr>
int
main (void)
{
-
- regex_t *p;
- int x = regcomp(p, "", 0);
- int y = regexec(p, "", 0, 0, 0);
- regfree(p);
-
+signal(SIGINT, handler);
+ x = 1
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:18047: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:20433: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:18050: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:18053: \"$ac_try\"") >&5
+ echo "$as_me:20436: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:20439: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:18056: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- cf_cv_regex_hdrs=$cf_regex_hdr
- break
-
+ echo "$as_me:20442: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_sig_atomic_t=$cf_type
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_sig_atomic_t=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ test "$cf_cv_sig_atomic_t" != no && break
done
- ;;
-esac
fi
-echo "$as_me:18072: result: $cf_cv_regex_hdrs" >&5
-echo "${ECHO_T}$cf_cv_regex_hdrs" >&6
-
-case $cf_cv_regex_hdrs in
- (no) { echo "$as_me:18076: WARNING: no regular expression header found" >&5
-echo "$as_me: WARNING: no regular expression header found" >&2;} ;;
- (regex.h)
-cat >>confdefs.h <<\EOF
-#define HAVE_REGEX_H_FUNCS 1
-EOF
- ;;
- (regexp.h)
-cat >>confdefs.h <<\EOF
-#define HAVE_REGEXP_H_FUNCS 1
-EOF
- ;;
- (regexpr.h)
-cat >>confdefs.h <<\EOF
-#define HAVE_REGEXPR_H_FUNCS 1
-EOF
- ;;
-esac
-
-for ac_header in \
-fcntl.h \
-getopt.h \
-limits.h \
-locale.h \
-math.h \
-poll.h \
-sys/bsdtypes.h \
-sys/ioctl.h \
-sys/param.h \
-sys/poll.h \
-sys/select.h \
-sys/time.h \
-sys/times.h \
-ttyent.h \
-unistd.h \
-wctype.h \
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:18115: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 18121 "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:18125: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:18131: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_ext
-fi
-echo "$as_me:18150: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+echo "$as_me:20456: result: $cf_cv_sig_atomic_t" >&5
+echo "${ECHO_T}$cf_cv_sig_atomic_t" >&6
+test "$cf_cv_sig_atomic_t" != no &&
+cat >>confdefs.h <<EOF
+#define SIG_ATOMIC_T $cf_cv_sig_atomic_t
EOF
-fi
-done
+if test "$NCURSES_CHTYPE" = auto ; then
-for ac_header in unistd.h getopt.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:18163: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+echo "$as_me:20465: checking for type of chtype" >&5
+echo $ECHO_N "checking for type of chtype... $ECHO_C" >&6
+if test "${cf_cv_typeof_chtype+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 18169 "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:18173: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:18179: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_ext
-fi
-echo "$as_me:18198: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
-fi
-done
-
-echo "$as_me:18208: checking for header declaring getopt variables" >&5
-echo $ECHO_N "checking for header declaring getopt variables... $ECHO_C" >&6
-if test "${cf_cv_getopt_header+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ if test "$cross_compiling" = yes; then
+ cf_cv_typeof_chtype=long
else
-
-cf_cv_getopt_header=none
-for cf_header in stdio.h stdlib.h unistd.h getopt.h
-do
-cat >conftest.$ac_ext <<_ACEOF
-#line 18218 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 20475 "configure"
#include "confdefs.h"
-#include <$cf_header>
-int
-main (void)
+#define WANT_BITS 31
+#include <stdio.h>
+int main(void)
{
-int x = optind; char *y = optarg
- ;
- return 0;
+ FILE *fp = fopen("cf_test.out", "w");
+ if (fp != 0) {
+ char *result = "long";
+ if (sizeof(unsigned long) > sizeof(unsigned int)) {
+ int n;
+ unsigned int x, y;
+ for (n = 0; n < WANT_BITS; n++) {
+ x = (1 << n);
+ y = (x >> n);
+ if (y != 1 || x == 0) {
+ x = 0;
+ break;
+ }
+ }
+ /*
+ * If x is nonzero, an int is big enough for the bits
+ * that we want.
+ */
+ result = (x != 0) ? "int" : "long";
+ }
+ fputs(result, fp);
+ fclose(fp);
+ }
+ ${cf_cv_main_return:-return}(0);
}
+
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:18231: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:20510: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:18234: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:18237: \"$ac_try\"") >&5
+ echo "$as_me:20513: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:20515: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:18240: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_getopt_header=$cf_header
- break
+ echo "$as_me:20518: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_typeof_chtype=`cat cf_test.out`
else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_typeof_chtype=long
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-done
-
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:18252: result: $cf_cv_getopt_header" >&5
-echo "${ECHO_T}$cf_cv_getopt_header" >&6
-if test $cf_cv_getopt_header != none ; then
-
-cat >>confdefs.h <<\EOF
-#define HAVE_GETOPT_HEADER 1
-EOF
+ rm -f cf_test.out
fi
-if test $cf_cv_getopt_header = getopt.h ; then
-cat >>confdefs.h <<\EOF
-#define NEED_GETOPT_H 1
+echo "$as_me:20533: result: $cf_cv_typeof_chtype" >&5
+echo "${ECHO_T}$cf_cv_typeof_chtype" >&6
+
+cat >>confdefs.h <<EOF
+#define TYPEOF_CHTYPE $cf_cv_typeof_chtype
EOF
+else
+ cf_cv_typeof_chtype=$NCURSES_CHTYPE
fi
+test "$cf_cv_typeof_chtype" = unsigned && cf_cv_typeof_chtype=""
-echo "$as_me:18269: checking if external environ is declared" >&5
-echo $ECHO_N "checking if external environ is declared... $ECHO_C" >&6
-if test "${cf_cv_dcl_environ+set}" = set; then
+echo "$as_me:20545: checking if unsigned literals are legal" >&5
+echo $ECHO_N "checking if unsigned literals are legal... $ECHO_C" >&6
+if test "${cf_cv_unsigned_literals+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 18276 "configure"
-#include "confdefs.h"
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <unistd.h>
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 20552 "configure"
+#include "confdefs.h"
+
int
main (void)
{
-int x = (int) environ
+long x = 1L + 1UL + 1U + 1
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:18292: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:20564: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:18295: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:18298: \"$ac_try\"") >&5
+ echo "$as_me:20567: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:20570: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:18301: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_dcl_environ=yes
+ echo "$as_me:20573: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_unsigned_literals=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_dcl_environ=no
+cat "conftest.$ac_ext" >&5
+cf_cv_unsigned_literals=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:18312: result: $cf_cv_dcl_environ" >&5
-echo "${ECHO_T}$cf_cv_dcl_environ" >&6
-
-if test "$cf_cv_dcl_environ" = no ; then
-cf_result=`echo "decl_environ" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+echo "$as_me:20585: result: $cf_cv_unsigned_literals" >&5
+echo "${ECHO_T}$cf_cv_unsigned_literals" >&6
- cat >>confdefs.h <<EOF
-#define $cf_result 1
-EOF
+cf_cv_1UL="1"
+test ".$cf_cv_unsigned_literals" = .yes && cf_cv_1UL="${cf_cv_1UL}U"
+test ".$cf_cv_typeof_chtype" = .long && cf_cv_1UL="${cf_cv_1UL}L"
+if test "$NCURSES_MMASK_T" = auto ; then
+ cf_cv_typeof_mmask_t=long
+else
+ cf_cv_typeof_mmask_t=$NCURSES_MMASK_T
fi
+test "$cf_cv_typeof_mmask_t" = unsigned && cf_cv_typeof_mmask_t=""
-# It's possible (for near-UNIX clones) that the data doesn't exist
+### Checks for external-data
-echo "$as_me:18327: checking if external environ exists" >&5
-echo $ECHO_N "checking if external environ exists... $ECHO_C" >&6
-if test "${cf_cv_have_environ+set}" = set; then
+echo "$as_me:20601: checking if external errno is declared" >&5
+echo $ECHO_N "checking if external errno is declared... $ECHO_C" >&6
+if test "${cf_cv_dcl_errno+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 18334 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 20608 "configure"
#include "confdefs.h"
-#undef environ
-extern int environ;
-
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+#include <sys/types.h>
+#include <errno.h>
int
main (void)
{
-environ = 2
+int x = (int) errno; (void)x
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:18349: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:20626: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:18352: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:18355: \"$ac_try\"") >&5
+ echo "$as_me:20629: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:20632: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:18358: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_environ=yes
+ echo "$as_me:20635: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_dcl_errno=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have_environ=no
+cat "conftest.$ac_ext" >&5
+cf_cv_dcl_errno=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:18369: result: $cf_cv_have_environ" >&5
-echo "${ECHO_T}$cf_cv_have_environ" >&6
+echo "$as_me:20646: result: $cf_cv_dcl_errno" >&5
+echo "${ECHO_T}$cf_cv_dcl_errno" >&6
-if test "$cf_cv_have_environ" = yes ; then
+if test "$cf_cv_dcl_errno" = no ; then
-cf_result=`echo "have_environ" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+cf_result=`echo "decl_errno" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >>confdefs.h <<EOF
#define $cf_result 1
EOF
fi
-echo "$as_me:18382: checking for getenv" >&5
-echo $ECHO_N "checking for getenv... $ECHO_C" >&6
-if test "${ac_cv_func_getenv+set}" = set; then
+# It's possible (for near-UNIX clones) that the data doesn't exist
+
+echo "$as_me:20661: checking if external errno exists" >&5
+echo $ECHO_N "checking if external errno exists... $ECHO_C" >&6
+if test "${cf_cv_have_errno+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 18388 "configure"
-#include "confdefs.h"
-#define getenv autoconf_temporary
-#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
-#undef getenv
-#ifdef __cplusplus
-extern "C"
-#endif
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 20668 "configure"
+#include "confdefs.h"
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char getenv (void);
+#undef errno
+extern int errno;
int
main (void)
{
-
-/* The GNU C library defines stubs for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_getenv) || defined (__stub___getenv)
-#error found stub for getenv
-#endif
-
- return getenv ();
+errno = 2
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:18419: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:20683: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:18422: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:18425: \"$ac_try\"") >&5
+ echo "$as_me:20686: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:20689: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:18428: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_getenv=yes
+ echo "$as_me:20692: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_have_errno=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_getenv=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+cat "conftest.$ac_ext" >&5
+cf_cv_have_errno=no
fi
-echo "$as_me:18438: result: $ac_cv_func_getenv" >&5
-echo "${ECHO_T}$ac_cv_func_getenv" >&6
-
-for ac_func in putenv setenv strdup
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:18444: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 18450 "configure"
-#include "confdefs.h"
-#define $ac_func autoconf_temporary
-#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
-#undef $ac_func
-
-#ifdef __cplusplus
-extern "C"
-#endif
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func (void);
+fi
+echo "$as_me:20703: result: $cf_cv_have_errno" >&5
+echo "${ECHO_T}$cf_cv_have_errno" >&6
-int
-main (void)
-{
+if test "$cf_cv_have_errno" = yes ; then
-/* The GNU C library defines stubs for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-#error found stub for $ac_func
-#endif
+cf_result=`echo "have_errno" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
- return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:18481: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:18484: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:18487: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:18490: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_var=no"
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:18500: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+ cat >>confdefs.h <<EOF
+#define $cf_result 1
EOF
fi
-done
-echo "$as_me:18510: checking if getenv returns consistent values" >&5
-echo $ECHO_N "checking if getenv returns consistent values... $ECHO_C" >&6
-if test "${cf_cv_consistent_getenv+set}" = set; then
+echo "$as_me:20716: checking if data-only library module links" >&5
+echo $ECHO_N "checking if data-only library module links... $ECHO_C" >&6
+if test "${cf_cv_link_dataonly+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-if test "$cross_compiling" = yes; then
- cf_cv_consistent_getenv=unknown
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 18520 "configure"
-#include "confdefs.h"
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-
-#if defined(HAVE_ENVIRON) && defined(DECL_ENVIRON) && !defined(environ)
-extern char **environ; /* POSIX, but some systems are not... */
-#endif
-
-#if defined(HAVE_STRDUP)
-#define str_alloc(s) strdup(s)
-#else
-#define str_alloc(s) strcpy(malloc(strlen(s) + 1, s))
-#endif
-
-static void set_value(const char *name, const char *value)
-{
-#if defined(HAVE_SETENV)
- setenv(name, value, 1);
-#elif defined(HAVE_PUTENV)
- char buffer[1024];
- sprintf(buffer, "%s=%s", name, value);
- putenv(str_alloc(buffer));
-#else
-#error neither putenv/setenv found
-#endif
-}
-int main(void)
-{
- int pass;
- size_t numenv, limit, j;
- char **mynames;
- char **myvalues;
- char **mypointer;
- char *equals;
- for (numenv = 0; environ[numenv]; ++numenv) ;
- limit = numenv + 10;
- mynames = (char **) calloc(limit + 1, sizeof(char *));
- myvalues = (char **) calloc(limit + 1, sizeof(char *));
- mypointer = (char **) calloc(limit + 1, sizeof(char *));
-#if defined(HAVE_ENVIRON)
- for (j = 0; environ[j]; ++j) {
- mynames[j] = str_alloc(environ[j]);
- equals = strchr(mynames[j], '=');
- if (equals != 0) {
- *equals++ = '\0';
- myvalues[j] = str_alloc(equals);
- } else {
- myvalues[j] = str_alloc("");
- }
- }
-#endif
- for (j = numenv; j < limit; ++j) {
- char name[80];
- char value[80];
- size_t found;
- size_t k = 0;
- do {
- size_t jk;
- found = 0;
- sprintf(name, "TERM%lu", (unsigned long) k);
- for (jk = 0; jk < j; ++jk) {
- if (!strcmp(name, mynames[jk])) {
- found = 1;
- ++k;
- break;
- }
- }
- } while (found);
- sprintf(value, "%lu:%p", (unsigned long) k, &mynames[j]);
- set_value(name, value);
- mynames[j] = str_alloc(name);
- myvalues[j] = str_alloc(value);
- }
- for (pass = 0; pass < 3; ++pass) {
- for (j = 0; j < limit; ++j) {
- char *value = getenv(mynames[j]);
- if (pass) {
- if (value == 0) {
- fprintf(stderr, "getenv returned null for %s\n", mynames[j]);
- ${cf_cv_main_return:-return}(1);
- } else if (value != mypointer[j]) {
- fprintf(stderr, "getenv returned different pointer for %s\n", mynames[j]);
- ${cf_cv_main_return:-return}(1);
- } else if (strcmp(value, myvalues[j])) {
- fprintf(stderr, "getenv returned different value for %s\n", mynames[j]);
- ${cf_cv_main_return:-return}(1);
- }
- } else {
- size_t k;
- mypointer[j] = value;
- for (k = 0; k < j; ++k) {
- if (mypointer[j] == mypointer[k]) {
- fprintf(stderr, "getenv returned same pointer for %s and %s\n", mynames[j], mynames[k]);
- ${cf_cv_main_return:-return}(1);
- }
- }
- }
- }
- }
- ${cf_cv_main_return:-return}(0);
+ rm -f conftest.a
+ cat >conftest.$ac_ext <<EOF
+#line 20724 "configure"
+int testdata[3] = { 123, 456, 789 };
+EOF
+ if { (eval echo "$as_me:20727: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:20730: \$? = $ac_status" >&5
+ (exit "$ac_status"); } ; then
+ mv conftest.o data.o && \
+ ( $AR $ARFLAGS conftest.a data.o ) 2>&5 1>/dev/null
+ fi
+ rm -f conftest.$ac_ext data.o
+ cat >conftest.$ac_ext <<EOF
+#line 20737 "configure"
+int testfunc(void)
+{
+#if defined(NeXT)
+ ${cf_cv_main_return:-return}(1); /* I'm told this linker is broken */
+#else
+ extern int testdata[3];
+ return testdata[0] == 123
+ && testdata[1] == 456
+ && testdata[2] == 789;
+#endif
}
+EOF
+ if { (eval echo "$as_me:20750: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:20753: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; then
+ mv conftest.o func.o && \
+ ( $AR $ARFLAGS conftest.a func.o ) 2>&5 1>/dev/null
+ fi
+ rm -f conftest.$ac_ext func.o
+ ( eval $RANLIB conftest.a ) 2>&5 >/dev/null
+ cf_saveLIBS="$LIBS"
+ LIBS="conftest.a $LIBS"
+ if test "$cross_compiling" = yes; then
+ cf_cv_link_dataonly=unknown
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 20766 "configure"
+#include "confdefs.h"
+
+ int main(void)
+ {
+ extern int testfunc();
+ ${cf_cv_main_return:-return} (!testfunc());
+ }
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:18629: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:20777: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:18632: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:18634: \"$ac_try\"") >&5
+ echo "$as_me:20780: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:20782: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:18637: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_consistent_getenv=yes
+ echo "$as_me:20785: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_link_dataonly=yes
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_consistent_getenv=no
+cat "conftest.$ac_ext" >&5
+cf_cv_link_dataonly=no
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
+ LIBS="$cf_saveLIBS"
fi
-echo "$as_me:18650: result: $cf_cv_consistent_getenv" >&5
-echo "${ECHO_T}$cf_cv_consistent_getenv" >&6
-if test "x$cf_cv_consistent_getenv" = xno
-then
+echo "$as_me:20800: result: $cf_cv_link_dataonly" >&5
+echo "${ECHO_T}$cf_cv_link_dataonly" >&6
+
+if test "$cf_cv_link_dataonly" = no ; then
cat >>confdefs.h <<\EOF
-#define HAVE_CONSISTENT_GETENV 1
+#define BROKEN_LINKER 1
EOF
+ BROKEN_LINKER=1
fi
-if test "x$cf_cv_consistent_getenv" = xno && \
- test "x$cf_with_trace" = xyes
-then
- { echo "$as_me:18665: WARNING: The NCURSES_TRACE environment variable is not supported with this configuration" >&5
-echo "$as_me: WARNING: The NCURSES_TRACE environment variable is not supported with this configuration" >&2;}
-fi
-
-# check for ISC (this may also define _POSIX_SOURCE)
-# Note: even non-Posix ISC needs <sys/bsdtypes.h> to declare fd_set
-if test "x$ISC" = xyes ; then
-
-echo "$as_me:18673: checking for main in -lcposix" >&5
-echo $ECHO_N "checking for main in -lcposix... $ECHO_C" >&6
-if test "${ac_cv_lib_cposix_main+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcposix $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 18681 "configure"
-#include "confdefs.h"
-
-int
-main (void)
-{
-main ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:18693: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:18696: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:18699: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:18702: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_cposix_main=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_cposix_main=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:18713: result: $ac_cv_lib_cposix_main" >&5
-echo "${ECHO_T}$ac_cv_lib_cposix_main" >&6
-if test $ac_cv_lib_cposix_main = yes; then
- cat >>confdefs.h <<EOF
-#define HAVE_LIBCPOSIX 1
-EOF
-
- LIBS="-lcposix $LIBS"
+### Checks for library functions.
-fi
+for ac_func in \
+getcwd \
+getegid \
+geteuid \
+getopt \
+getttynam \
+issetugid \
+localeconv \
+poll \
+putenv \
+remove \
+select \
+setbuf \
+setbuffer \
+setenv \
+setvbuf \
+sigaction \
+sigvec \
+snprintf \
+strdup \
+strstr \
+sysconf \
+tcgetpgrp \
+times \
+tsearch \
+vsnprintf \
- echo "$as_me:18724: checking for bzero in -linet" >&5
-echo $ECHO_N "checking for bzero in -linet... $ECHO_C" >&6
-if test "${ac_cv_lib_inet_bzero+set}" = set; then
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:20843: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-linet $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 18732 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 20849 "configure"
#include "confdefs.h"
+#define $ac_func autoconf_temporary
+#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
+#undef $ac_func
-/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
+
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
-char bzero ();
+char $ac_func (void);
+
int
main (void)
{
-bzero ();
+
+/* The GNU C library defines stubs for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#error found stub for $ac_func
+#endif
+
+ return $ac_func ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:18751: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:20880: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:18754: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:18757: \"$ac_try\"") >&5
+ echo "$as_me:20883: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:20886: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:18760: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_inet_bzero=yes
+ echo "$as_me:20889: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_inet_bzero=no
+cat "conftest.$ac_ext" >&5
+eval "$as_ac_var=no"
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:18771: result: $ac_cv_lib_inet_bzero" >&5
-echo "${ECHO_T}$ac_cv_lib_inet_bzero" >&6
-if test $ac_cv_lib_inet_bzero = yes; then
+echo "$as_me:20899: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+EOF
-cf_add_libs="$LIBS"
-# reverse order
-cf_add_0lib=
-for cf_add_1lib in -linet; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
-# filter duplicates
-for cf_add_1lib in $cf_add_0lib; do
- for cf_add_2lib in $cf_add_libs; do
- if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
- cf_add_1lib=
- break
- fi
- done
- test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+fi
done
-LIBS="$cf_add_libs"
+if test "x$ac_cv_func_getopt" = xno && \
+ test "x$cf_with_progs$cf_with_tests" != xnono; then
+ { { echo "$as_me:20911: error: getopt is required for building programs" >&5
+echo "$as_me: error: getopt is required for building programs" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+if test "x$with_safe_sprintf" = xyes
+then
+ if test "x$ac_cv_func_vsnprintf" = xyes
+ then
+ { echo "$as_me:20920: WARNING: will use vsnprintf instead of safe-sprintf option" >&5
+echo "$as_me: WARNING: will use vsnprintf instead of safe-sprintf option" >&2;}
+ else
+
+cat >>confdefs.h <<\EOF
+#define USE_SAFE_SPRINTF 1
+EOF
+
+ fi
fi
-echo "$as_me:18794: checking if sys/time.h works with sys/select.h" >&5
-echo $ECHO_N "checking if sys/time.h works with sys/select.h... $ECHO_C" >&6
-if test "${cf_cv_sys_time_select+set}" = set; then
+if test "x$with_getcap" = "xyes" ; then
+
+echo "$as_me:20933: checking for terminal-capability database functions" >&5
+echo $ECHO_N "checking for terminal-capability database functions... $ECHO_C" >&6
+if test "${cf_cv_cgetent+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-cat >conftest.$ac_ext <<_ACEOF
-#line 18801 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 20940 "configure"
#include "confdefs.h"
-#include <sys/types.h>
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-
+#include <stdlib.h>
int
main (void)
{
+ char temp[128];
+ char *buf = temp;
+ char *db_array = temp;
+ cgetent(&buf, &db_array, "vt100");
+ cgetcap(buf, "tc", '=');
+ cgetmatch(buf, "tc");
+
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:18821: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:20960: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:18824: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:18827: \"$ac_try\"") >&5
+ echo "$as_me:20963: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:20966: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:18830: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_sys_time_select=yes
+ echo "$as_me:20969: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_cgetent=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_sys_time_select=no
+cat "conftest.$ac_ext" >&5
+cf_cv_cgetent=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
+echo "$as_me:20980: result: $cf_cv_cgetent" >&5
+echo "${ECHO_T}$cf_cv_cgetent" >&6
-echo "$as_me:18842: result: $cf_cv_sys_time_select" >&5
-echo "${ECHO_T}$cf_cv_sys_time_select" >&6
-test "$cf_cv_sys_time_select" = yes &&
-cat >>confdefs.h <<\EOF
-#define HAVE_SYS_TIME_SELECT 1
-EOF
-
-### checks for compiler characteristics
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
-
-echo "$as_me:18857: checking for an ANSI C-conforming const" >&5
-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
-if test "${ac_cv_c_const+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 18863 "configure"
-#include "confdefs.h"
-
-int
-main (void)
-{
-/* FIXME: Include the comments suggested by Paul. */
-#ifndef __cplusplus
- /* Ultrix mips cc rejects this. */
- typedef int charset[2];
- const charset x;
- /* SunOS 4.1.1 cc rejects this. */
- char const *const *ccp;
- char **p;
- /* NEC SVR4.0.2 mips cc rejects this. */
- struct point {int x, y;};
- static struct point const zero = {0,0};
- /* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in
- an arm of an if-expression whose if-part is not a constant
- expression */
- const char *g = "string";
- ccp = &g + (g ? g-g : 0);
- /* HPUX 7.0 cc rejects these. */
- ++ccp;
- p = (char**) ccp;
- ccp = (char const *const *) p;
- { /* SCO 3.2v4 cc rejects this. */
- char *t;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
+if test "$cf_cv_cgetent" = yes
+then
- *t++ = 0;
- }
- { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
- }
- { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
- }
- { /* AIX XL C 1.02.0.0 rejects this saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; };
- struct s *b; b->j = 5;
- }
- { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
- }
+cat >>confdefs.h <<\EOF
+#define HAVE_BSD_CGETENT 1
+EOF
+
+echo "$as_me:20990: checking if cgetent uses const parameter" >&5
+echo $ECHO_N "checking if cgetent uses const parameter... $ECHO_C" >&6
+if test "${cf_cv_cgetent_const+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 20997 "configure"
+#include "confdefs.h"
+
+#pragma GCC diagnostic error "-Wincompatible-pointer-types-discards-qualifiers"
+#include <stdlib.h>
+int
+main (void)
+{
+
+ char temp[128];
+ char *buf = temp;
+#ifndef _NETBSD_SOURCE /* given, since April 2004 in stdlib.h */
+ const char *db_array = temp;
+ cgetent(&buf, &db_array, "vt100");
#endif
+ cgetcap(buf, "tc", '=');
+ cgetmatch(buf, "tc");
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:18921: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:21020: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:18924: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:18927: \"$ac_try\"") >&5
+ echo "$as_me:21023: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:21026: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:18930: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_c_const=yes
+ echo "$as_me:21029: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_cgetent_const=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_c_const=no
+cat "conftest.$ac_ext" >&5
+cf_cv_cgetent_const=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+
fi
-echo "$as_me:18940: result: $ac_cv_c_const" >&5
-echo "${ECHO_T}$ac_cv_c_const" >&6
-if test $ac_cv_c_const = no; then
+echo "$as_me:21040: result: $cf_cv_cgetent_const" >&5
+echo "${ECHO_T}$cf_cv_cgetent_const" >&6
+ if test "$cf_cv_cgetent_const" = yes
+ then
-cat >>confdefs.h <<\EOF
-#define const
+cat >>confdefs.h <<EOF
+#define CGETENT_CONST const
EOF
+ fi
fi
-echo "$as_me:18950: checking for inline" >&5
-echo $ECHO_N "checking for inline... $ECHO_C" >&6
-if test "${ac_cv_c_inline+set}" = set; then
+fi
+
+echo "$as_me:21054: checking for isascii" >&5
+echo $ECHO_N "checking for isascii... $ECHO_C" >&6
+if test "${cf_cv_have_isascii+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cv_c_inline=no
-for ac_kw in inline __inline__ __inline; do
- cat >conftest.$ac_ext <<_ACEOF
-#line 18958 "configure"
-#include "confdefs.h"
-#ifndef __cplusplus
-static $ac_kw int static_foo () {return 0; }
-$ac_kw int foo () {return 0; }
-#endif
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 21061 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+int
+main (void)
+{
+int x = isascii(' ')
+ ;
+ return 0;
+}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:18967: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:21073: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:18970: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:18973: \"$ac_try\"") >&5
+ echo "$as_me:21076: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:21079: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:18976: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_c_inline=$ac_kw; break
+ echo "$as_me:21082: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_have_isascii=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_have_isascii=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-done
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:18987: result: $ac_cv_c_inline" >&5
-echo "${ECHO_T}$ac_cv_c_inline" >&6
-case $ac_cv_c_inline in
- inline | yes) ;;
- no)
+echo "$as_me:21093: result: $cf_cv_have_isascii" >&5
+echo "${ECHO_T}$cf_cv_have_isascii" >&6
+test "$cf_cv_have_isascii" = yes &&
cat >>confdefs.h <<\EOF
-#define inline
-EOF
- ;;
- *) cat >>confdefs.h <<EOF
-#define inline $ac_cv_c_inline
+#define HAVE_ISASCII 1
EOF
- ;;
-esac
-
-NCURSES_INLINE=
-if test "$ac_cv_c_inline" != no ; then
- NCURSES_INLINE=inline
- if test "$INTEL_COMPILER" = yes
- then
- :
- elif test "$CLANG_COMPILER" = yes
- then
- :
- elif test "$GCC" = yes
- then
- echo "$as_me:19013: checking if $CC supports options to tune inlining" >&5
-echo $ECHO_N "checking if $CC supports options to tune inlining... $ECHO_C" >&6
-if test "${cf_cv_gcc_inline+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cf_save_CFLAGS=$CFLAGS
- CFLAGS="$CFLAGS --param max-inline-insns-single=1200"
- cat >conftest.$ac_ext <<_ACEOF
-#line 19022 "configure"
+if test "$ac_cv_func_sigaction" = yes; then
+echo "$as_me:21101: checking whether sigaction needs _POSIX_SOURCE" >&5
+echo $ECHO_N "checking whether sigaction needs _POSIX_SOURCE... $ECHO_C" >&6
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 21104 "configure"
#include "confdefs.h"
-inline int foo(void) { return 1; }
+
+#include <sys/types.h>
+#include <signal.h>
int
main (void)
{
-${cf_cv_main_return:-return} foo()
+struct sigaction act
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:19034: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:21118: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:19037: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:19040: \"$ac_try\"") >&5
+ echo "$as_me:21121: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:21124: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:19043: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_gcc_inline=yes
+ echo "$as_me:21127: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ sigact_bad=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_gcc_inline=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- CFLAGS=$cf_save_CFLAGS
-
-fi
-echo "$as_me:19055: result: $cf_cv_gcc_inline" >&5
-echo "${ECHO_T}$cf_cv_gcc_inline" >&6
- if test "$cf_cv_gcc_inline" = yes ; then
-
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
-
-for cf_add_cflags in --param max-inline-insns-single=1200
-do
-case $cf_fix_cppflags in
-(no)
- case $cf_add_cflags in
- (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
-
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
-
- if test $cf_fix_cppflags = yes ; then
-
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
-
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-
- continue
- fi
- ;;
- esac
- case "$CPPFLAGS" in
- (*$cf_add_cflags)
- ;;
- (*)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
-
-CPPFLAGS=`echo "$CPPFLAGS" | \
- sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
- -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
-
- ;;
- esac
-
- test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
- cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
-
- ;;
- esac
- ;;
- (*)
-
- test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
- cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
-
- ;;
- esac
- ;;
-(yes)
-
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
-
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
- ;;
-esac
-done
-
-if test -n "$cf_new_cflags" ; then
-
- test -n "$CFLAGS" && CFLAGS="$CFLAGS "
- CFLAGS="${CFLAGS}$cf_new_cflags"
-
-fi
-
-if test -n "$cf_new_cppflags" ; then
-
- test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
- CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
-
-fi
-
-if test -n "$cf_new_extra_cppflags" ; then
-
- test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
- EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
-
-fi
-
- fi
- fi
-fi
-
-echo "$as_me:19161: checking for signal global datatype" >&5
-echo $ECHO_N "checking for signal global datatype... $ECHO_C" >&6
-if test "${cf_cv_sig_atomic_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
+cat "conftest.$ac_ext" >&5
- for cf_type in \
- "volatile sig_atomic_t" \
- "sig_atomic_t" \
- "int"
- do
- cat >conftest.$ac_ext <<_ACEOF
-#line 19173 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 21135 "configure"
#include "confdefs.h"
+#define _POSIX_SOURCE
#include <sys/types.h>
#include <signal.h>
-#include <stdio.h>
-
-extern $cf_type x;
-$cf_type x;
-static void handler(int sig)
-{
- x = 5;
-}
int
main (void)
{
-signal(SIGINT, handler);
- x = 1
+struct sigaction act
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:19196: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:21150: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:19199: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:19202: \"$ac_try\"") >&5
+ echo "$as_me:21153: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:21156: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:19205: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_sig_atomic_t=$cf_type
+ echo "$as_me:21159: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ sigact_bad=yes
+
+cat >>confdefs.h <<\EOF
+#define _POSIX_SOURCE 1
+EOF
+
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_sig_atomic_t=no
+cat "conftest.$ac_ext" >&5
+sigact_bad=unknown
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- test "$cf_cv_sig_atomic_t" != no && break
- done
-
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+echo "$as_me:21175: result: $sigact_bad" >&5
+echo "${ECHO_T}$sigact_bad" >&6
fi
-echo "$as_me:19219: result: $cf_cv_sig_atomic_t" >&5
-echo "${ECHO_T}$cf_cv_sig_atomic_t" >&6
-test "$cf_cv_sig_atomic_t" != no &&
-cat >>confdefs.h <<EOF
-#define SIG_ATOMIC_T $cf_cv_sig_atomic_t
-EOF
-
-if test $NCURSES_CHTYPE = auto ; then
-
-echo "$as_me:19228: checking for type of chtype" >&5
-echo $ECHO_N "checking for type of chtype... $ECHO_C" >&6
-if test "${cf_cv_typeof_chtype+set}" = set; then
+echo "$as_me:21179: checking if nanosleep really works" >&5
+echo $ECHO_N "checking if nanosleep really works... $ECHO_C" >&6
+if test "${cf_cv_func_nanosleep+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test "$cross_compiling" = yes; then
- cf_cv_typeof_chtype=long
+if test "$cross_compiling" = yes; then
+ cf_cv_func_nanosleep=unknown
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 19238 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 21189 "configure"
#include "confdefs.h"
-#define WANT_BITS 31
#include <stdio.h>
-int main(void)
-{
- FILE *fp = fopen("cf_test.out", "w");
- if (fp != 0) {
- char *result = "long";
- if (sizeof(unsigned long) > sizeof(unsigned int)) {
- int n;
- unsigned int x, y;
- for (n = 0; n < WANT_BITS; n++) {
- x = (1 << n);
- y = (x >> n);
- if (y != 1 || x == 0) {
- x = 0;
- break;
- }
- }
- /*
- * If x is nonzero, an int is big enough for the bits
- * that we want.
- */
- result = (x != 0) ? "int" : "long";
- }
- fputs(result, fp);
- fclose(fp);
- }
- ${cf_cv_main_return:-return}(0);
+#include <errno.h>
+#include <time.h>
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+int main(void) {
+ struct timespec ts1, ts2;
+ int code;
+ ts1.tv_sec = 0;
+ ts1.tv_nsec = 750000000;
+ ts2.tv_sec = 0;
+ ts2.tv_nsec = 0;
+ errno = 0;
+ code = nanosleep(&ts1, &ts2); /* on failure errno is ENOSYS. */
+ ${cf_cv_main_return:-return}(code != 0);
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:19273: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:21214: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:19276: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:19278: \"$ac_try\"") >&5
+ echo "$as_me:21217: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:21219: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:19281: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_typeof_chtype=`cat cf_test.out`
+ echo "$as_me:21222: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_func_nanosleep=yes
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_typeof_chtype=long
+cat "conftest.$ac_ext" >&5
+cf_cv_func_nanosleep=no
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
- rm -f cf_test.out
-
fi
+echo "$as_me:21234: result: $cf_cv_func_nanosleep" >&5
+echo "${ECHO_T}$cf_cv_func_nanosleep" >&6
-echo "$as_me:19296: result: $cf_cv_typeof_chtype" >&5
-echo "${ECHO_T}$cf_cv_typeof_chtype" >&6
-
-cat >>confdefs.h <<EOF
-#define TYPEOF_CHTYPE $cf_cv_typeof_chtype
+test "$cf_cv_func_nanosleep" = "yes" &&
+cat >>confdefs.h <<\EOF
+#define HAVE_NANOSLEEP 1
EOF
-else
- cf_cv_typeof_chtype=$NCURSES_CHTYPE
-fi
-test "$cf_cv_typeof_chtype" = unsigned && cf_cv_typeof_chtype=""
+for ac_header in \
+termio.h \
+termios.h \
+unistd.h \
+sys/ioctl.h \
+sys/termio.h \
-echo "$as_me:19308: checking if unsigned literals are legal" >&5
-echo $ECHO_N "checking if unsigned literals are legal... $ECHO_C" >&6
-if test "${cf_cv_unsigned_literals+set}" = set; then
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:21251: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 19315 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 21257 "configure"
#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:21261: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:21267: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+ cat "conftest.$ac_ext" >&5
+ eval "$as_ac_Header=no"
+fi
+rm -f conftest.err "conftest.$ac_ext"
+fi
+echo "$as_me:21286: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+if test "$ac_cv_header_termios_h" = yes ; then
+ case "$CFLAGS $CPPFLAGS" in
+ (*-D_POSIX_SOURCE*)
+ termios_bad=dunno ;;
+ (*) termios_bad=maybe ;;
+ esac
+ if test "$termios_bad" = maybe ; then
+ echo "$as_me:21303: checking whether termios.h needs _POSIX_SOURCE" >&5
+echo $ECHO_N "checking whether termios.h needs _POSIX_SOURCE... $ECHO_C" >&6
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 21306 "configure"
+#include "confdefs.h"
+#include <termios.h>
int
main (void)
{
-long x = 1L + 1UL + 1U + 1
+struct termios foo; int x = foo.c_iflag = 1; (void)x
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:19327: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:21318: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:19330: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:19333: \"$ac_try\"") >&5
+ echo "$as_me:21321: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:21324: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:19336: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_unsigned_literals=yes
+ echo "$as_me:21327: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ termios_bad=no
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_unsigned_literals=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-
-echo "$as_me:19348: result: $cf_cv_unsigned_literals" >&5
-echo "${ECHO_T}$cf_cv_unsigned_literals" >&6
+cat "conftest.$ac_ext" >&5
-cf_cv_1UL="1"
-test ".$cf_cv_unsigned_literals" = .yes && cf_cv_1UL="${cf_cv_1UL}U"
-test ".$cf_cv_typeof_chtype" = .long && cf_cv_1UL="${cf_cv_1UL}L"
-
-if test $NCURSES_MMASK_T = auto ; then
- cf_cv_typeof_mmask_t=long
-else
- cf_cv_typeof_mmask_t=$NCURSES_MMASK_T
-fi
-test "$cf_cv_typeof_mmask_t" = unsigned && cf_cv_typeof_mmask_t=""
-
-### Checks for external-data
-
-echo "$as_me:19364: checking if external errno is declared" >&5
-echo $ECHO_N "checking if external errno is declared... $ECHO_C" >&6
-if test "${cf_cv_dcl_errno+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 19371 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 21335 "configure"
#include "confdefs.h"
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-#include <sys/types.h>
-#include <errno.h>
+#define _POSIX_SOURCE
+#include <termios.h>
int
main (void)
{
-int x = (int) errno
+struct termios foo; int x = foo.c_iflag = 2; (void)x
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:19389: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:21349: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:19392: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:19395: \"$ac_try\"") >&5
+ echo "$as_me:21352: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:21355: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:19398: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_dcl_errno=yes
+ echo "$as_me:21358: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ termios_bad=unknown
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_dcl_errno=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:19409: result: $cf_cv_dcl_errno" >&5
-echo "${ECHO_T}$cf_cv_dcl_errno" >&6
-
-if test "$cf_cv_dcl_errno" = no ; then
-
-cf_result=`echo "decl_errno" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
-
- cat >>confdefs.h <<EOF
-#define $cf_result 1
+cat "conftest.$ac_ext" >&5
+termios_bad=yes
+cat >>confdefs.h <<\EOF
+#define _POSIX_SOURCE 1
EOF
fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
-# It's possible (for near-UNIX clones) that the data doesn't exist
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ echo "$as_me:21374: result: $termios_bad" >&5
+echo "${ECHO_T}$termios_bad" >&6
+ fi
+fi
-echo "$as_me:19424: checking if external errno exists" >&5
-echo $ECHO_N "checking if external errno exists... $ECHO_C" >&6
-if test "${cf_cv_have_errno+set}" = set; then
+echo "$as_me:21379: checking for tcgetattr" >&5
+echo $ECHO_N "checking for tcgetattr... $ECHO_C" >&6
+if test "${cf_cv_have_tcgetattr+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 19431 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 21386 "configure"
#include "confdefs.h"
-#undef errno
-extern int errno;
+#include <sys/types.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_TERMIOS_H
+#include <termios.h>
+#define TTY struct termios
+#else
+#ifdef HAVE_TERMIO_H
+#include <termio.h>
+#define TTY struct termio
+#endif
+#endif
int
main (void)
{
-errno = 2
+
+TTY foo;
+tcgetattr(1, &foo);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:19446: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:21414: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:19449: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:19452: \"$ac_try\"") >&5
+ echo "$as_me:21417: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:21420: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:19455: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_errno=yes
+ echo "$as_me:21423: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_have_tcgetattr=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have_errno=no
+cat "conftest.$ac_ext" >&5
+cf_cv_have_tcgetattr=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:19466: result: $cf_cv_have_errno" >&5
-echo "${ECHO_T}$cf_cv_have_errno" >&6
-
-if test "$cf_cv_have_errno" = yes ; then
-
-cf_result=`echo "have_errno" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
-
- cat >>confdefs.h <<EOF
-#define $cf_result 1
+echo "$as_me:21433: result: $cf_cv_have_tcgetattr" >&5
+echo "${ECHO_T}$cf_cv_have_tcgetattr" >&6
+test "$cf_cv_have_tcgetattr" = yes &&
+cat >>confdefs.h <<\EOF
+#define HAVE_TCGETATTR 1
EOF
-fi
-
-echo "$as_me:19479: checking if data-only library module links" >&5
-echo $ECHO_N "checking if data-only library module links... $ECHO_C" >&6
-if test "${cf_cv_link_dataonly+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- rm -f conftest.a
- cat >conftest.$ac_ext <<EOF
-#line 19487 "configure"
-int testdata[3] = { 123, 456, 789 };
-EOF
- if { (eval echo "$as_me:19490: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:19493: \$? = $ac_status" >&5
- (exit $ac_status); } ; then
- mv conftest.o data.o && \
- ( $AR $ARFLAGS conftest.a data.o ) 2>&5 1>/dev/null
- fi
- rm -f conftest.$ac_ext data.o
- cat >conftest.$ac_ext <<EOF
-#line 19500 "configure"
-int testfunc(void)
-{
-#if defined(NeXT)
- ${cf_cv_main_return:-return}(1); /* I'm told this linker is broken */
-#else
- extern int testdata[3];
- return testdata[0] == 123
- && testdata[1] == 456
- && testdata[2] == 789;
-#endif
-}
-EOF
- if { (eval echo "$as_me:19513: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:19516: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- mv conftest.o func.o && \
- ( $AR $ARFLAGS conftest.a func.o ) 2>&5 1>/dev/null
- fi
- rm -f conftest.$ac_ext func.o
- ( eval $RANLIB conftest.a ) 2>&5 >/dev/null
- cf_saveLIBS="$LIBS"
- LIBS="conftest.a $LIBS"
- if test "$cross_compiling" = yes; then
- cf_cv_link_dataonly=unknown
+echo "$as_me:21440: checking for vsscanf function or workaround" >&5
+echo $ECHO_N "checking for vsscanf function or workaround... $ECHO_C" >&6
+if test "${cf_cv_func_vsscanf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 19529 "configure"
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 21447 "configure"
#include "confdefs.h"
- int main(void)
- {
- extern int testfunc();
- ${cf_cv_main_return:-return} (!testfunc());
- }
+#include <stdarg.h>
+#include <stdio.h>
+int
+main (void)
+{
+ va_list ap;
+ vsscanf("from", "%d", ap)
+ ;
+ return 0;
+}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:19540: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:21463: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:19543: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:19545: \"$ac_try\"") >&5
+ echo "$as_me:21466: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:21469: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:19548: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_link_dataonly=yes
+ echo "$as_me:21472: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_func_vsscanf=vsscanf
else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_link_dataonly=no
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
- LIBS="$cf_saveLIBS"
-
-fi
-
-echo "$as_me:19563: result: $cf_cv_link_dataonly" >&5
-echo "${ECHO_T}$cf_cv_link_dataonly" >&6
-
-if test "$cf_cv_link_dataonly" = no ; then
-
-cat >>confdefs.h <<\EOF
-#define BROKEN_LINKER 1
-EOF
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
- BROKEN_LINKER=1
-fi
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 21480 "configure"
+#include "confdefs.h"
-### Checks for library functions.
+#include <stdarg.h>
+#include <stdio.h>
+int
+main (void)
+{
-for ac_func in \
-getcwd \
-getegid \
-geteuid \
-getopt \
-getttynam \
-issetugid \
-localeconv \
-poll \
-putenv \
-remove \
-select \
-setbuf \
-setbuffer \
-setenv \
-setvbuf \
-sigaction \
-sigvec \
-strdup \
-strstr \
-sysconf \
-tcgetpgrp \
-times \
-tsearch \
-vsnprintf \
+ FILE strbuf;
+ char *str = "from";
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:19605: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ strbuf._flag = _IOREAD;
+ strbuf._ptr = strbuf._base = (unsigned char *) str;
+ strbuf._cnt = strlen(str);
+ strbuf._file = _NFILE;
+ return (vfscanf(&strbuf, "%d", ap))
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:21502: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:21505: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:21508: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:21511: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_func_vsscanf=vfscanf
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 19611 "configure"
-#include "confdefs.h"
-#define $ac_func autoconf_temporary
-#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
-#undef $ac_func
-
-#ifdef __cplusplus
-extern "C"
-#endif
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func (void);
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 21519 "configure"
+#include "confdefs.h"
+#include <stdarg.h>
+#include <stdio.h>
int
main (void)
{
-/* The GNU C library defines stubs for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-#error found stub for $ac_func
-#endif
+ FILE strbuf;
+ char *str = "from";
- return $ac_func ();
+ strbuf._flag = _IOREAD;
+ strbuf._ptr = strbuf._base = (unsigned char *) str;
+ strbuf._cnt = strlen(str);
+ strbuf._file = _NFILE;
+ return (_doscan(&strbuf, "%d", ap))
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:19642: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:21541: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:19645: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:19648: \"$ac_try\"") >&5
+ echo "$as_me:21544: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:21547: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:19651: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ echo "$as_me:21550: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_func_vsscanf=_doscan
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+cat "conftest.$ac_ext" >&5
+
+cf_cv_func_vsscanf=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:19661: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-EOF
-
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-done
-
-if test "x$ac_cv_func_getopt" = xno && \
- test "x$cf_with_progs$cf_with_tests" != xnono; then
- { { echo "$as_me:19673: error: getopt is required for building programs" >&5
-echo "$as_me: error: getopt is required for building programs" >&2;}
- { (exit 1); exit 1; }; }
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
+echo "$as_me:21565: result: $cf_cv_func_vsscanf" >&5
+echo "${ECHO_T}$cf_cv_func_vsscanf" >&6
-if test "x$with_safe_sprintf" = xyes
-then
- if test "x$ac_cv_func_vsnprintf" = xyes
- then
- { echo "$as_me:19682: WARNING: will use vsnprintf instead of safe-sprintf option" >&5
-echo "$as_me: WARNING: will use vsnprintf instead of safe-sprintf option" >&2;}
- else
-
+case "$cf_cv_func_vsscanf" in
+(vsscanf)
cat >>confdefs.h <<\EOF
-#define USE_SAFE_SPRINTF 1
+#define HAVE_VSSCANF 1
+EOF
+;;
+(vfscanf)
+cat >>confdefs.h <<\EOF
+#define HAVE_VFSCANF 1
+EOF
+;;
+(_doscan)
+cat >>confdefs.h <<\EOF
+#define HAVE__DOSCAN 1
EOF
+;;
+esac
- fi
+for ac_header in \
+unistd.h \
+
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:21591: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 21597 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:21601: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:21607: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+ cat "conftest.$ac_ext" >&5
+ eval "$as_ac_Header=no"
+fi
+rm -f conftest.err "conftest.$ac_ext"
fi
+echo "$as_me:21626: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
-if test "x$with_getcap" = "xyes" ; then
+fi
+done
-echo "$as_me:19695: checking for terminal-capability database functions" >&5
-echo $ECHO_N "checking for terminal-capability database functions... $ECHO_C" >&6
-if test "${cf_cv_cgetent+set}" = set; then
+echo "$as_me:21636: checking for working mkstemp" >&5
+echo $ECHO_N "checking for working mkstemp... $ECHO_C" >&6
+if test "${cf_cv_func_mkstemp+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-cat >conftest.$ac_ext <<_ACEOF
-#line 19702 "configure"
+rm -rf ./conftest*
+if test "$cross_compiling" = yes; then
+ cf_cv_func_mkstemp=maybe
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 21647 "configure"
#include "confdefs.h"
+#include <sys/types.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
#include <stdlib.h>
-int
-main (void)
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+int main(void)
{
+ char *tmpl = "conftestXXXXXX";
+ char name[2][80];
+ int n;
+ int result = 0;
+ int fd;
+ struct stat sb;
- char temp[128];
- char *buf = temp;
- char *db_array = temp;
- cgetent(&buf, &db_array, "vt100");
- cgetcap(buf, "tc", '=');
- cgetmatch(buf, "tc");
-
- ;
- return 0;
+ umask(077);
+ for (n = 0; n < 2; ++n) {
+ strcpy(name[n], tmpl);
+ if ((fd = mkstemp(name[n])) >= 0) {
+ if (!strcmp(name[n], tmpl)
+ || stat(name[n], &sb) != 0
+ || (sb.st_mode & S_IFMT) != S_IFREG
+ || (sb.st_mode & 077) != 0) {
+ result = 1;
+ }
+ close(fd);
+ }
+ }
+ if (result == 0
+ && !strcmp(name[0], name[1]))
+ result = 1;
+ ${cf_cv_main_return:-return}(result);
}
+
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:19722: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:21688: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:19725: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:19728: \"$ac_try\"") >&5
+ echo "$as_me:21691: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:21693: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:19731: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_cgetent=yes
+ echo "$as_me:21696: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_func_mkstemp=yes
+
else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_cgetent=no
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_func_mkstemp=no
+
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
-echo "$as_me:19742: result: $cf_cv_cgetent" >&5
-echo "${ECHO_T}$cf_cv_cgetent" >&6
-
-if test "$cf_cv_cgetent" = yes
-then
-
-cat >>confdefs.h <<\EOF
-#define HAVE_BSD_CGETENT 1
-EOF
-
-echo "$as_me:19752: checking if cgetent uses const parameter" >&5
-echo $ECHO_N "checking if cgetent uses const parameter... $ECHO_C" >&6
-if test "${cf_cv_cgetent_const+set}" = set; then
+echo "$as_me:21711: result: $cf_cv_func_mkstemp" >&5
+echo "${ECHO_T}$cf_cv_func_mkstemp" >&6
+if test "x$cf_cv_func_mkstemp" = xmaybe ; then
+ echo "$as_me:21714: checking for mkstemp" >&5
+echo $ECHO_N "checking for mkstemp... $ECHO_C" >&6
+if test "${ac_cv_func_mkstemp+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 19759 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 21720 "configure"
#include "confdefs.h"
+#define mkstemp autoconf_temporary
+#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
+#undef mkstemp
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char mkstemp (void);
-#pragma GCC diagnostic error "-Wincompatible-pointer-types-discards-qualifiers"
-#include <stdlib.h>
int
main (void)
{
- char temp[128];
- char *buf = temp;
-#ifndef _NETBSD_SOURCE /* given, since April 2004 in stdlib.h */
- const char *db_array = temp;
- cgetent(&buf, &db_array, "vt100");
+/* The GNU C library defines stubs for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_mkstemp) || defined (__stub___mkstemp)
+#error found stub for mkstemp
#endif
- cgetcap(buf, "tc", '=');
- cgetmatch(buf, "tc");
+ return mkstemp ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:19782: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:21751: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:19785: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:19788: \"$ac_try\"") >&5
+ echo "$as_me:21754: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:21757: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:19791: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_cgetent_const=yes
+ echo "$as_me:21760: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_func_mkstemp=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_cgetent_const=no
+cat "conftest.$ac_ext" >&5
+ac_cv_func_mkstemp=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:21770: result: $ac_cv_func_mkstemp" >&5
+echo "${ECHO_T}$ac_cv_func_mkstemp" >&6
fi
-echo "$as_me:19802: result: $cf_cv_cgetent_const" >&5
-echo "${ECHO_T}$cf_cv_cgetent_const" >&6
- if test "$cf_cv_cgetent_const" = yes
- then
+if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then
-cat >>confdefs.h <<EOF
-#define CGETENT_CONST const
+cat >>confdefs.h <<\EOF
+#define HAVE_MKSTEMP 1
EOF
- fi
fi
+# setup for prototype of fallback for vsscanf()
+
+if test "$cf_cv_func_vsscanf" = vsscanf ; then
+ HAVE_VSSCANF=1
+else
+ HAVE_VSSCANF=0
fi
-echo "$as_me:19816: checking for isascii" >&5
-echo $ECHO_N "checking for isascii... $ECHO_C" >&6
-if test "${cf_cv_have_isascii+set}" = set; then
+if test "x$cross_compiling" = xyes ; then
+ { echo "$as_me:21791: WARNING: cross compiling: assume setvbuf params not reversed" >&5
+echo "$as_me: WARNING: cross compiling: assume setvbuf params not reversed" >&2;}
+else
+ echo "$as_me:21794: checking whether setvbuf arguments are reversed" >&5
+echo $ECHO_N "checking whether setvbuf arguments are reversed... $ECHO_C" >&6
+if test "${ac_cv_func_setvbuf_reversed+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 19823 "configure"
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:21800: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 21805 "configure"
#include "confdefs.h"
-#include <ctype.h>
+#include <stdio.h>
+/* If setvbuf has the reversed format, exit 0. */
int
main (void)
{
-int x = isascii(' ')
- ;
- return 0;
+ /* This call has the arguments reversed.
+ A reversed system may check and see that the address of main
+ is not _IOLBF, _IONBF, or _IOFBF, and return nonzero. */
+ if (setvbuf(stdout, _IOLBF, (char *) main, BUFSIZ) != 0)
+ $ac_main_return(1);
+ putc('\r', stdout);
+ $ac_main_return(0); /* Non-reversed systems segv here. */
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:19835: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:21822: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:19838: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:19841: \"$ac_try\"") >&5
+ echo "$as_me:21825: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:21827: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:19844: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_isascii=yes
+ echo "$as_me:21830: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_func_setvbuf_reversed=yes
else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have_isascii=no
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_func_setvbuf_reversed=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:19855: result: $cf_cv_have_isascii" >&5
-echo "${ECHO_T}$cf_cv_have_isascii" >&6
-test "$cf_cv_have_isascii" = yes &&
+rm -f core ./core.* ./*.core
+fi
+echo "$as_me:21843: result: $ac_cv_func_setvbuf_reversed" >&5
+echo "${ECHO_T}$ac_cv_func_setvbuf_reversed" >&6
+if test $ac_cv_func_setvbuf_reversed = yes; then
+
cat >>confdefs.h <<\EOF
-#define HAVE_ISASCII 1
+#define SETVBUF_REVERSED 1
EOF
-if test "$ac_cv_func_sigaction" = yes; then
-echo "$as_me:19863: checking whether sigaction needs _POSIX_SOURCE" >&5
-echo $ECHO_N "checking whether sigaction needs _POSIX_SOURCE... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line 19866 "configure"
-#include "confdefs.h"
+fi
-#include <sys/types.h>
-#include <signal.h>
-int
-main (void)
-{
-struct sigaction act
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:19880: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:19883: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:19886: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:19889: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- sigact_bad=no
+fi
+echo "$as_me:21854: checking for intptr_t" >&5
+echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6
+if test "${ac_cv_type_intptr_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 19897 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 21860 "configure"
#include "confdefs.h"
-
-#define _POSIX_SOURCE
-#include <sys/types.h>
-#include <signal.h>
+$ac_includes_default
int
main (void)
{
-struct sigaction act
+if ((intptr_t *) 0)
+ return 0;
+if (sizeof (intptr_t))
+ return 0;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:19912: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:21875: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:19915: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:19918: \"$ac_try\"") >&5
+ echo "$as_me:21878: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:21881: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:19921: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- sigact_bad=yes
-
-cat >>confdefs.h <<\EOF
-#define _POSIX_SOURCE 1
-EOF
-
+ echo "$as_me:21884: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_type_intptr_t=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-sigact_bad=unknown
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+cat "conftest.$ac_ext" >&5
+ac_cv_type_intptr_t=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:19937: result: $sigact_bad" >&5
-echo "${ECHO_T}$sigact_bad" >&6
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-
-echo "$as_me:19941: checking if nanosleep really works" >&5
-echo $ECHO_N "checking if nanosleep really works... $ECHO_C" >&6
-if test "${cf_cv_func_nanosleep+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-if test "$cross_compiling" = yes; then
- cf_cv_func_nanosleep=unknown
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 19951 "configure"
-#include "confdefs.h"
-
-#include <stdio.h>
-#include <errno.h>
-#include <time.h>
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-int main(void) {
- struct timespec ts1, ts2;
- int code;
- ts1.tv_sec = 0;
- ts1.tv_nsec = 750000000;
- ts2.tv_sec = 0;
- ts2.tv_nsec = 0;
- errno = 0;
- code = nanosleep(&ts1, &ts2); /* on failure errno is ENOSYS. */
- ${cf_cv_main_return:-return}(code != 0);
-}
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:19976: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:19979: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:19981: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:19984: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_func_nanosleep=yes
+echo "$as_me:21894: result: $ac_cv_type_intptr_t" >&5
+echo "${ECHO_T}$ac_cv_type_intptr_t" >&6
+if test "$ac_cv_type_intptr_t" = yes; then
+ :
else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_func_nanosleep=no
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:19996: result: $cf_cv_func_nanosleep" >&5
-echo "${ECHO_T}$cf_cv_func_nanosleep" >&6
-test "$cf_cv_func_nanosleep" = "yes" &&
-cat >>confdefs.h <<\EOF
-#define HAVE_NANOSLEEP 1
+cat >>confdefs.h <<EOF
+#define intptr_t long
EOF
-for ac_header in \
-termio.h \
-termios.h \
-unistd.h \
-sys/ioctl.h \
-sys/termio.h \
+fi
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:20013: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+echo "$as_me:21906: checking for ssize_t" >&5
+echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6
+if test "${ac_cv_type_ssize_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 20019 "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:20023: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:20029: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_ext
-fi
-echo "$as_me:20048: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
-
-fi
-done
-
-if test "$ac_cv_header_termios_h" = yes ; then
- case "$CFLAGS $CPPFLAGS" in
- (*-D_POSIX_SOURCE*)
- termios_bad=dunno ;;
- (*) termios_bad=maybe ;;
- esac
- if test "$termios_bad" = maybe ; then
- echo "$as_me:20065: checking whether termios.h needs _POSIX_SOURCE" >&5
-echo $ECHO_N "checking whether termios.h needs _POSIX_SOURCE... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-#line 20068 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 21912 "configure"
#include "confdefs.h"
-#include <termios.h>
+$ac_includes_default
int
main (void)
{
-struct termios foo; int x = foo.c_iflag
+if ((ssize_t *) 0)
+ return 0;
+if (sizeof (ssize_t))
+ return 0;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:20080: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:21927: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:20083: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:20086: \"$ac_try\"") >&5
+ echo "$as_me:21930: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:21933: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:20089: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- termios_bad=no
+ echo "$as_me:21936: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_type_ssize_t=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_type_ssize_t=no
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+echo "$as_me:21946: result: $ac_cv_type_ssize_t" >&5
+echo "${ECHO_T}$ac_cv_type_ssize_t" >&6
+if test "$ac_cv_type_ssize_t" = yes; then
+ :
+else
+
+cat >>confdefs.h <<EOF
+#define ssize_t int
+EOF
+
+fi
+
+echo "$as_me:21958: checking for type sigaction_t" >&5
+echo $ECHO_N "checking for type sigaction_t... $ECHO_C" >&6
+if test "${cf_cv_type_sigaction+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
- cat >conftest.$ac_ext <<_ACEOF
-#line 20097 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 21965 "configure"
#include "confdefs.h"
-#define _POSIX_SOURCE
-#include <termios.h>
+#include <signal.h>
int
main (void)
{
-struct termios foo; int x = foo.c_iflag
+sigaction_t x
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:20111: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:21978: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:20114: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:20117: \"$ac_try\"") >&5
+ echo "$as_me:21981: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:21984: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:20120: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- termios_bad=unknown
+ echo "$as_me:21987: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_type_sigaction=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-termios_bad=yes
-cat >>confdefs.h <<\EOF
-#define _POSIX_SOURCE 1
-EOF
-
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
+cat "conftest.$ac_ext" >&5
+cf_cv_type_sigaction=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- echo "$as_me:20136: result: $termios_bad" >&5
-echo "${ECHO_T}$termios_bad" >&6
- fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:20141: checking for tcgetattr" >&5
-echo $ECHO_N "checking for tcgetattr... $ECHO_C" >&6
-if test "${cf_cv_have_tcgetattr+set}" = set; then
+echo "$as_me:21998: result: $cf_cv_type_sigaction" >&5
+echo "${ECHO_T}$cf_cv_type_sigaction" >&6
+test "$cf_cv_type_sigaction" = yes &&
+cat >>confdefs.h <<\EOF
+#define HAVE_TYPE_SIGACTION 1
+EOF
+
+echo "$as_me:22005: checking declaration of size-change" >&5
+echo $ECHO_N "checking declaration of size-change... $ECHO_C" >&6
+if test "${cf_cv_sizechange+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-cat >conftest.$ac_ext <<_ACEOF
-#line 20148 "configure"
-#include "confdefs.h"
+ cf_cv_sizechange=unknown
+ cf_save_CPPFLAGS="$CPPFLAGS"
+for cf_opts in "" "NEED_PTEM_H"
+do
+
+ CPPFLAGS="$cf_save_CPPFLAGS"
+ if test -n "$cf_opts"
+ then
+
+ test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+ CPPFLAGS="${CPPFLAGS}-D$cf_opts"
+
+ fi
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 22026 "configure"
+#include "confdefs.h"
#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
#ifdef HAVE_TERMIOS_H
#include <termios.h>
-#define TTY struct termios
#else
#ifdef HAVE_TERMIO_H
#include <termio.h>
-#define TTY struct termio
#endif
#endif
+#ifdef NEED_PTEM_H
+/* This is a workaround for SCO: they neglected to define struct winsize in
+ * termios.h -- it's only in termio.h and ptem.h
+ */
+#include <sys/stream.h>
+#include <sys/ptem.h>
+#endif
+
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+
int
main (void)
{
-TTY foo;
-tcgetattr(1, &foo);
+#ifdef TIOCGSIZE
+ struct ttysize win; /* SunOS 3.0... */
+ int y = win.ts_lines = 2;
+ int x = win.ts_cols = 1;
+ (void)y;
+ (void)x;
+#else
+#ifdef TIOCGWINSZ
+ struct winsize win; /* everything else */
+ int y = win.ws_row = 2;
+ int x = win.ws_col = 1;
+ (void)y;
+ (void)x;
+#else
+ no TIOCGSIZE or TIOCGWINSZ
+#endif /* TIOCGWINSZ */
+#endif /* TIOCGSIZE */
+
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:20176: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:22076: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:20179: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:20182: \"$ac_try\"") >&5
+ echo "$as_me:22079: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:22082: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:20185: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_tcgetattr=yes
+ echo "$as_me:22085: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_sizechange=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have_tcgetattr=no
+cat "conftest.$ac_ext" >&5
+cf_cv_sizechange=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+
+ CPPFLAGS="$cf_save_CPPFLAGS"
+ if test "$cf_cv_sizechange" = yes ; then
+ echo "size-change succeeded ($cf_opts)" >&5
+ test -n "$cf_opts" && cf_cv_sizechange="$cf_opts"
+ break
+ fi
+done
+
fi
-echo "$as_me:20195: result: $cf_cv_have_tcgetattr" >&5
-echo "${ECHO_T}$cf_cv_have_tcgetattr" >&6
-test "$cf_cv_have_tcgetattr" = yes &&
+echo "$as_me:22104: result: $cf_cv_sizechange" >&5
+echo "${ECHO_T}$cf_cv_sizechange" >&6
+if test "$cf_cv_sizechange" != no ; then
+
cat >>confdefs.h <<\EOF
-#define HAVE_TCGETATTR 1
+#define HAVE_SIZECHANGE 1
EOF
-echo "$as_me:20202: checking for vsscanf function or workaround" >&5
-echo $ECHO_N "checking for vsscanf function or workaround... $ECHO_C" >&6
-if test "${cf_cv_func_vsscanf+set}" = set; then
+ case "$cf_cv_sizechange" in
+ (NEED*)
+ cat >>confdefs.h <<EOF
+#define $cf_cv_sizechange 1
+EOF
+
+ ;;
+ esac
+fi
+
+echo "$as_me:22122: checking for memmove" >&5
+echo $ECHO_N "checking for memmove... $ECHO_C" >&6
+if test "${ac_cv_func_memmove+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 20209 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 22128 "configure"
#include "confdefs.h"
+#define memmove autoconf_temporary
+#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
+#undef memmove
-#include <stdarg.h>
-#include <stdio.h>
-int
-main (void)
-{
-
- va_list ap;
- vsscanf("from", "%d", ap)
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:20225: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:20228: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:20231: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:20234: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_func_vsscanf=vsscanf
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+#ifdef __cplusplus
+extern "C"
+#endif
-cat >conftest.$ac_ext <<_ACEOF
-#line 20242 "configure"
-#include "confdefs.h"
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char memmove (void);
-#include <stdarg.h>
-#include <stdio.h>
int
main (void)
{
- FILE strbuf;
- char *str = "from";
+/* The GNU C library defines stubs for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_memmove) || defined (__stub___memmove)
+#error found stub for memmove
+#endif
- strbuf._flag = _IOREAD;
- strbuf._ptr = strbuf._base = (unsigned char *) str;
- strbuf._cnt = strlen(str);
- strbuf._file = _NFILE;
- return (vfscanf(&strbuf, "%d", ap))
+ return memmove ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:20264: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22159: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:20267: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:20270: \"$ac_try\"") >&5
+ echo "$as_me:22162: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:22165: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:20273: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_func_vsscanf=vfscanf
+ echo "$as_me:22168: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_func_memmove=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_func_memmove=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:22178: result: $ac_cv_func_memmove" >&5
+echo "${ECHO_T}$ac_cv_func_memmove" >&6
+if test "$ac_cv_func_memmove" = yes; then
+ :
+else
-cat >conftest.$ac_ext <<_ACEOF
-#line 20281 "configure"
+echo "$as_me:22184: checking for bcopy" >&5
+echo $ECHO_N "checking for bcopy... $ECHO_C" >&6
+if test "${ac_cv_func_bcopy+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 22190 "configure"
#include "confdefs.h"
+#define bcopy autoconf_temporary
+#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
+#undef bcopy
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char bcopy (void);
-#include <stdarg.h>
-#include <stdio.h>
int
main (void)
{
- FILE strbuf;
- char *str = "from";
+/* The GNU C library defines stubs for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_bcopy) || defined (__stub___bcopy)
+#error found stub for bcopy
+#endif
- strbuf._flag = _IOREAD;
- strbuf._ptr = strbuf._base = (unsigned char *) str;
- strbuf._cnt = strlen(str);
- strbuf._file = _NFILE;
- return (_doscan(&strbuf, "%d", ap))
+ return bcopy ();
;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:20303: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:20306: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:20309: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:20312: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_func_vsscanf=_doscan
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-
-cf_cv_func_vsscanf=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:20327: result: $cf_cv_func_vsscanf" >&5
-echo "${ECHO_T}$cf_cv_func_vsscanf" >&6
-
-case $cf_cv_func_vsscanf in
-(vsscanf)
-cat >>confdefs.h <<\EOF
-#define HAVE_VSSCANF 1
-EOF
-;;
-(vfscanf)
-cat >>confdefs.h <<\EOF
-#define HAVE_VFSCANF 1
-EOF
-;;
-(_doscan)
-cat >>confdefs.h <<\EOF
-#define HAVE__DOSCAN 1
-EOF
-;;
-esac
-
-for ac_header in \
-unistd.h \
-
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:20353: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 20359 "configure"
-#include "confdefs.h"
-#include <$ac_header>
+ return 0;
+}
_ACEOF
-if { (eval echo "$as_me:20363: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22221: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:20369: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- eval "$as_ac_Header=yes"
+ echo "$as_me:22224: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:22227: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:22230: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_func_bcopy=yes
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_ext
+cat "conftest.$ac_ext" >&5
+ac_cv_func_bcopy=no
fi
-echo "$as_me:20388: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
-
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-done
+echo "$as_me:22240: result: $ac_cv_func_bcopy" >&5
+echo "${ECHO_T}$ac_cv_func_bcopy" >&6
+if test "$ac_cv_func_bcopy" = yes; then
-echo "$as_me:20398: checking for working mkstemp" >&5
-echo $ECHO_N "checking for working mkstemp... $ECHO_C" >&6
-if test "${cf_cv_func_mkstemp+set}" = set; then
+ echo "$as_me:22244: checking if bcopy does overlapping moves" >&5
+echo $ECHO_N "checking if bcopy does overlapping moves... $ECHO_C" >&6
+if test "${cf_cv_good_bcopy+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-rm -rf conftest*
-if test "$cross_compiling" = yes; then
- cf_cv_func_mkstemp=maybe
+ if test "$cross_compiling" = yes; then
+ cf_cv_good_bcopy=unknown
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 20409 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 22254 "configure"
#include "confdefs.h"
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/stat.h>
-int main(void)
-{
- char *tmpl = "conftestXXXXXX";
- char name[2][80];
- int n;
- int result = 0;
- int fd;
- struct stat sb;
-
- umask(077);
- for (n = 0; n < 2; ++n) {
- strcpy(name[n], tmpl);
- if ((fd = mkstemp(name[n])) >= 0) {
- if (!strcmp(name[n], tmpl)
- || stat(name[n], &sb) != 0
- || (sb.st_mode & S_IFMT) != S_IFREG
- || (sb.st_mode & 077) != 0) {
- result = 1;
- }
- close(fd);
- }
- }
- if (result == 0
- && !strcmp(name[0], name[1]))
- result = 1;
- ${cf_cv_main_return:-return}(result);
+int main(void) {
+ static char data[] = "abcdefghijklmnopqrstuwwxyz";
+ char temp[40];
+ bcopy(data, temp, sizeof(data));
+ bcopy(temp+10, temp, 15);
+ bcopy(temp+5, temp+15, 10);
+ ${cf_cv_main_return:-return} (strcmp(temp, "klmnopqrstuwwxypqrstuwwxyz"));
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:20450: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:22268: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:20453: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:20455: \"$ac_try\"") >&5
+ echo "$as_me:22271: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:22273: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:20458: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_func_mkstemp=yes
-
+ echo "$as_me:22276: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_good_bcopy=yes
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_func_mkstemp=no
+cat "conftest.$ac_ext" >&5
+cf_cv_good_bcopy=no
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:22289: result: $cf_cv_good_bcopy" >&5
+echo "${ECHO_T}$cf_cv_good_bcopy" >&6
+
+else
+ cf_cv_good_bcopy=no
fi
+ if test "$cf_cv_good_bcopy" = yes ; then
+
+cat >>confdefs.h <<\EOF
+#define USE_OK_BCOPY 1
+EOF
+
+ else
+
+cat >>confdefs.h <<\EOF
+#define USE_MY_MEMMOVE 1
+EOF
+
+ fi
+
fi
-echo "$as_me:20473: result: $cf_cv_func_mkstemp" >&5
-echo "${ECHO_T}$cf_cv_func_mkstemp" >&6
-if test "x$cf_cv_func_mkstemp" = xmaybe ; then
- echo "$as_me:20476: checking for mkstemp" >&5
-echo $ECHO_N "checking for mkstemp... $ECHO_C" >&6
-if test "${ac_cv_func_mkstemp+set}" = set; then
+
+tty >/dev/null 2>&1 || {
+for ac_func in posix_openpt
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:22316: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 20482 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 22322 "configure"
#include "confdefs.h"
-#define mkstemp autoconf_temporary
+#define $ac_func autoconf_temporary
#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
-#undef mkstemp
+#undef $ac_func
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
-char mkstemp (void);
+char $ac_func (void);
int
main (void)
{
/* The GNU C library defines stubs for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_mkstemp) || defined (__stub___mkstemp)
-#error found stub for mkstemp
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#error found stub for $ac_func
#endif
- return mkstemp ();
+ return $ac_func ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:20513: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22353: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:20516: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:20519: \"$ac_try\"") >&5
+ echo "$as_me:22356: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:22359: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:20522: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_mkstemp=yes
+ echo "$as_me:22362: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_mkstemp=no
+cat "conftest.$ac_ext" >&5
+eval "$as_ac_var=no"
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:20532: result: $ac_cv_func_mkstemp" >&5
-echo "${ECHO_T}$ac_cv_func_mkstemp" >&6
+echo "$as_me:22372: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+EOF
fi
-if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then
+done
+ }
+echo "$as_me:22382: checking if poll really works" >&5
+echo $ECHO_N "checking if poll really works... $ECHO_C" >&6
+if test "${cf_cv_working_poll+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
-cat >>confdefs.h <<\EOF
-#define HAVE_MKSTEMP 1
-EOF
+if test "$cross_compiling" = yes; then
+ cf_cv_working_poll=unknown
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 22392 "configure"
+#include "confdefs.h"
-fi
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#ifdef HAVE_POLL_H
+#include <poll.h>
+#else
+#include <sys/poll.h>
+#endif
+int main(void) {
+ struct pollfd myfds;
+ int ret;
-# setup for prototype of fallback for vsscanf()
+ /* check for Darwin bug with respect to "devices" */
+ myfds.fd = open("/dev/null", 1); /* O_WRONLY */
+ if (myfds.fd < 0)
+ myfds.fd = 0;
+ myfds.events = POLLIN;
+ myfds.revents = 0;
-if test "$cf_cv_func_vsscanf" = vsscanf ; then
- HAVE_VSSCANF=1
+ ret = poll(&myfds, 1, 100);
+
+ if (ret < 0 || (myfds.revents & POLLNVAL)) {
+ ret = -1;
+ } else {
+ int fd = 0;
+ if (!isatty(fd)) {
+ fd = open("/dev/tty", 2); /* O_RDWR */
+ }
+#ifdef HAVE_POSIX_OPENPT
+ if (fd < 0) {
+ fd = posix_openpt(O_RDWR);
+ }
+#endif
+
+ if (fd >= 0) {
+ /* also check with standard input */
+ myfds.fd = fd;
+ myfds.events = POLLIN;
+ myfds.revents = 0;
+ ret = poll(&myfds, 1, 100);
+ } else {
+ ret = -1;
+ }
+ }
+ ${cf_cv_main_return:-return}(ret < 0);
+}
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:22444: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:22447: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:22449: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:22452: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_working_poll=yes
else
- HAVE_VSSCANF=0
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_working_poll=no
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
fi
+echo "$as_me:22464: result: $cf_cv_working_poll" >&5
+echo "${ECHO_T}$cf_cv_working_poll" >&6
+test "$cf_cv_working_poll" = "yes" &&
+cat >>confdefs.h <<\EOF
+#define HAVE_WORKING_POLL 1
+EOF
-if test "x$cross_compiling" = xyes ; then
- { echo "$as_me:20553: WARNING: cross compiling: assume setvbuf params not reversed" >&5
-echo "$as_me: WARNING: cross compiling: assume setvbuf params not reversed" >&2;}
-else
- echo "$as_me:20556: checking whether setvbuf arguments are reversed" >&5
-echo $ECHO_N "checking whether setvbuf arguments are reversed... $ECHO_C" >&6
-if test "${ac_cv_func_setvbuf_reversed+set}" = set; then
+echo "$as_me:22471: checking for va_copy" >&5
+echo $ECHO_N "checking for va_copy... $ECHO_C" >&6
+if test "${cf_cv_have_va_copy+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test "$cross_compiling" = yes; then
- { { echo "$as_me:20562: error: cannot run test program while cross compiling" >&5
-echo "$as_me: error: cannot run test program while cross compiling" >&2;}
- { (exit 1); exit 1; }; }
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 20567 "configure"
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 22478 "configure"
#include "confdefs.h"
-#include <stdio.h>
-/* If setvbuf has the reversed format, exit 0. */
+
+#include <stdarg.h>
+
int
main (void)
{
- /* This call has the arguments reversed.
- A reversed system may check and see that the address of main
- is not _IOLBF, _IONBF, or _IOFBF, and return nonzero. */
- if (setvbuf(stdout, _IOLBF, (char *) main, BUFSIZ) != 0)
- $ac_main_return(1);
- putc('\r', stdout);
- $ac_main_return(0); /* Non-reversed systems segv here. */
+
+ static va_list dst;
+ static va_list src;
+ va_copy(dst, src)
+ ;
+ return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:20584: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22495: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:20587: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:20589: \"$ac_try\"") >&5
+ echo "$as_me:22498: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:22501: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:20592: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_setvbuf_reversed=yes
+ echo "$as_me:22504: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_have_va_copy=yes
else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_setvbuf_reversed=no
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_have_va_copy=no
fi
-rm -f core core.* *.core
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:20605: result: $ac_cv_func_setvbuf_reversed" >&5
-echo "${ECHO_T}$ac_cv_func_setvbuf_reversed" >&6
-if test $ac_cv_func_setvbuf_reversed = yes; then
+echo "$as_me:22514: result: $cf_cv_have_va_copy" >&5
+echo "${ECHO_T}$cf_cv_have_va_copy" >&6
+
+if test "$cf_cv_have_va_copy" = yes;
+then
cat >>confdefs.h <<\EOF
-#define SETVBUF_REVERSED 1
+#define HAVE_VA_COPY 1
EOF
-fi
+else # !cf_cv_have_va_copy
-fi
-echo "$as_me:20616: checking for intptr_t" >&5
-echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6
-if test "${ac_cv_type_intptr_t+set}" = set; then
+echo "$as_me:22526: checking for __va_copy" >&5
+echo $ECHO_N "checking for __va_copy... $ECHO_C" >&6
+if test "${cf_cv_have___va_copy+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 20622 "configure"
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 22533 "configure"
#include "confdefs.h"
-$ac_includes_default
+
+#include <stdarg.h>
+
int
main (void)
{
-if ((intptr_t *) 0)
- return 0;
-if (sizeof (intptr_t))
- return 0;
+
+ static va_list dst;
+ static va_list src;
+ __va_copy(dst, src)
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:20637: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22550: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:20640: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:20643: \"$ac_try\"") >&5
+ echo "$as_me:22553: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:22556: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:20646: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_type_intptr_t=yes
+ echo "$as_me:22559: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_have___va_copy=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_type_intptr_t=no
+cat "conftest.$ac_ext" >&5
+cf_cv_have___va_copy=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:20656: result: $ac_cv_type_intptr_t" >&5
-echo "${ECHO_T}$ac_cv_type_intptr_t" >&6
-if test $ac_cv_type_intptr_t = yes; then
- :
-else
+echo "$as_me:22569: result: $cf_cv_have___va_copy" >&5
+echo "${ECHO_T}$cf_cv_have___va_copy" >&6
-cat >>confdefs.h <<EOF
-#define intptr_t long
+if test "$cf_cv_have___va_copy" = yes
+then
+
+cat >>confdefs.h <<\EOF
+#define HAVE___VA_COPY 1
EOF
-fi
+else # !cf_cv_have___va_copy
-echo "$as_me:20668: checking for ssize_t" >&5
-echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6
-if test "${ac_cv_type_ssize_t+set}" = set; then
+echo "$as_me:22581: checking for __builtin_va_copy" >&5
+echo $ECHO_N "checking for __builtin_va_copy... $ECHO_C" >&6
+if test "${cf_cv_have___builtin_va_copy+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 20674 "configure"
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 22588 "configure"
#include "confdefs.h"
-$ac_includes_default
+
+#include <stdarg.h>
+
int
main (void)
{
-if ((ssize_t *) 0)
- return 0;
-if (sizeof (ssize_t))
- return 0;
+
+ static va_list dst;
+ static va_list src;
+ __builtin_va_copy(dst, src)
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:20689: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22605: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:20692: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:20695: \"$ac_try\"") >&5
+ echo "$as_me:22608: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:22611: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:20698: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_type_ssize_t=yes
+ echo "$as_me:22614: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_have___builtin_va_copy=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_type_ssize_t=no
+cat "conftest.$ac_ext" >&5
+cf_cv_have___builtin_va_copy=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:20708: result: $ac_cv_type_ssize_t" >&5
-echo "${ECHO_T}$ac_cv_type_ssize_t" >&6
-if test $ac_cv_type_ssize_t = yes; then
- :
-else
+echo "$as_me:22624: result: $cf_cv_have___builtin_va_copy" >&5
+echo "${ECHO_T}$cf_cv_have___builtin_va_copy" >&6
-cat >>confdefs.h <<EOF
-#define ssize_t int
+test "$cf_cv_have___builtin_va_copy" = yes &&
+
+cat >>confdefs.h <<\EOF
+#define HAVE___BUILTIN_VA_COPY 1
EOF
-fi
+fi # cf_cv_have___va_copy
-echo "$as_me:20720: checking for type sigaction_t" >&5
-echo $ECHO_N "checking for type sigaction_t... $ECHO_C" >&6
-if test "${cf_cv_type_sigaction+set}" = set; then
+fi # cf_cv_have_va_copy
+
+case "${cf_cv_have_va_copy}${cf_cv_have___va_copy}${cf_cv_have___builtin_va_copy}" in
+(*yes*)
+ ;;
+
+(*)
+ echo "$as_me:22642: checking if we can simply copy va_list" >&5
+echo $ECHO_N "checking if we can simply copy va_list... $ECHO_C" >&6
+if test "${cf_cv_pointer_va_list+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 20727 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 22649 "configure"
#include "confdefs.h"
-#include <signal.h>
+#include <stdarg.h>
+
int
main (void)
{
-sigaction_t x
+
+ va_list dst;
+ va_list src;
+ dst = src
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:20740: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22666: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:20743: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:20746: \"$ac_try\"") >&5
+ echo "$as_me:22669: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:22672: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:20749: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_type_sigaction=yes
+ echo "$as_me:22675: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_pointer_va_list=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_type_sigaction=no
+cat "conftest.$ac_ext" >&5
+cf_cv_pointer_va_list=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
+echo "$as_me:22685: result: $cf_cv_pointer_va_list" >&5
+echo "${ECHO_T}$cf_cv_pointer_va_list" >&6
-echo "$as_me:20760: result: $cf_cv_type_sigaction" >&5
-echo "${ECHO_T}$cf_cv_type_sigaction" >&6
-test "$cf_cv_type_sigaction" = yes &&
-cat >>confdefs.h <<\EOF
-#define HAVE_TYPE_SIGACTION 1
-EOF
-
-echo "$as_me:20767: checking declaration of size-change" >&5
-echo $ECHO_N "checking declaration of size-change... $ECHO_C" >&6
-if test "${cf_cv_sizechange+set}" = set; then
+ if test "$cf_cv_pointer_va_list" = no
+ then
+ echo "$as_me:22690: checking if we can copy va_list indirectly" >&5
+echo $ECHO_N "checking if we can copy va_list indirectly... $ECHO_C" >&6
+if test "${cf_cv_array_va_list+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cf_cv_sizechange=unknown
- cf_save_CPPFLAGS="$CPPFLAGS"
-
-for cf_opts in "" "NEED_PTEM_H"
-do
-
- CPPFLAGS="$cf_save_CPPFLAGS"
- if test -n "$cf_opts"
- then
-
- test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
- CPPFLAGS="${CPPFLAGS}-D$cf_opts"
-
- fi
- cat >conftest.$ac_ext <<_ACEOF
-#line 20788 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 22697 "configure"
#include "confdefs.h"
-#include <sys/types.h>
-#ifdef HAVE_TERMIOS_H
-#include <termios.h>
-#else
-#ifdef HAVE_TERMIO_H
-#include <termio.h>
-#endif
-#endif
-
-#ifdef NEED_PTEM_H
-/* This is a workaround for SCO: they neglected to define struct winsize in
- * termios.h -- it's only in termio.h and ptem.h
- */
-#include <sys/stream.h>
-#include <sys/ptem.h>
-#endif
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
+#include <stdarg.h>
int
main (void)
{
-#ifdef TIOCGSIZE
- struct ttysize win; /* SunOS 3.0... */
- int y = win.ts_lines;
- int x = win.ts_cols;
-#else
-#ifdef TIOCGWINSZ
- struct winsize win; /* everything else */
- int y = win.ws_row;
- int x = win.ws_col;
-#else
- no TIOCGSIZE or TIOCGWINSZ
-#endif /* TIOCGWINSZ */
-#endif /* TIOCGSIZE */
-
+ va_list dst;
+ va_list src;
+ *dst = *src
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:20834: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22714: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:20837: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:20840: \"$ac_try\"") >&5
+ echo "$as_me:22717: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:22720: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:20843: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_sizechange=yes
+ echo "$as_me:22723: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_array_va_list=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_sizechange=no
+cat "conftest.$ac_ext" >&5
+cf_cv_array_va_list=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
- CPPFLAGS="$cf_save_CPPFLAGS"
- if test "$cf_cv_sizechange" = yes ; then
- echo "size-change succeeded ($cf_opts)" >&5
- test -n "$cf_opts" && cf_cv_sizechange="$cf_opts"
- break
- fi
-done
-
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:20862: result: $cf_cv_sizechange" >&5
-echo "${ECHO_T}$cf_cv_sizechange" >&6
-if test "$cf_cv_sizechange" != no ; then
-
+echo "$as_me:22733: result: $cf_cv_array_va_list" >&5
+echo "${ECHO_T}$cf_cv_array_va_list" >&6
+ test "$cf_cv_array_va_list" = yes &&
cat >>confdefs.h <<\EOF
-#define HAVE_SIZECHANGE 1
-EOF
-
- case $cf_cv_sizechange in
- (NEED*)
- cat >>confdefs.h <<EOF
-#define $cf_cv_sizechange 1
+#define ARRAY_VA_LIST 1
EOF
- ;;
- esac
-fi
+ fi
+ ;;
+esac
-echo "$as_me:20880: checking for memmove" >&5
-echo $ECHO_N "checking for memmove... $ECHO_C" >&6
-if test "${ac_cv_func_memmove+set}" = set; then
+echo "$as_me:22744: checking for pid_t" >&5
+echo $ECHO_N "checking for pid_t... $ECHO_C" >&6
+if test "${ac_cv_type_pid_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 20886 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 22750 "configure"
#include "confdefs.h"
-#define memmove autoconf_temporary
-#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
-#undef memmove
-
-#ifdef __cplusplus
-extern "C"
-#endif
-
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char memmove (void);
-
+$ac_includes_default
int
main (void)
{
-
-/* The GNU C library defines stubs for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_memmove) || defined (__stub___memmove)
-#error found stub for memmove
-#endif
-
- return memmove ();
+if ((pid_t *) 0)
+ return 0;
+if (sizeof (pid_t))
+ return 0;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:20917: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:22765: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:20920: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:20923: \"$ac_try\"") >&5
+ echo "$as_me:22768: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:22771: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:20926: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_memmove=yes
+ echo "$as_me:22774: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_type_pid_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_type_pid_t=no
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+echo "$as_me:22784: result: $ac_cv_type_pid_t" >&5
+echo "${ECHO_T}$ac_cv_type_pid_t" >&6
+if test "$ac_cv_type_pid_t" = yes; then
+ :
+else
+
+cat >>confdefs.h <<EOF
+#define pid_t int
+EOF
+
+fi
+
+for ac_header in unistd.h vfork.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:22799: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 22805 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:22809: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:22815: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ eval "$as_ac_Header=yes"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_memmove=no
+ cat "conftest.$ac_ext" >&5
+ eval "$as_ac_Header=no"
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
fi
-echo "$as_me:20936: result: $ac_cv_func_memmove" >&5
-echo "${ECHO_T}$ac_cv_func_memmove" >&6
-if test $ac_cv_func_memmove = yes; then
- :
-else
+echo "$as_me:22834: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
-echo "$as_me:20942: checking for bcopy" >&5
-echo $ECHO_N "checking for bcopy... $ECHO_C" >&6
-if test "${ac_cv_func_bcopy+set}" = set; then
+fi
+done
+
+for ac_func in fork vfork
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:22847: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 20948 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 22853 "configure"
#include "confdefs.h"
-#define bcopy autoconf_temporary
+#define $ac_func autoconf_temporary
#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
-#undef bcopy
+#undef $ac_func
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
-char bcopy (void);
+char $ac_func (void);
int
main (void)
{
/* The GNU C library defines stubs for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_bcopy) || defined (__stub___bcopy)
-#error found stub for bcopy
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#error found stub for $ac_func
#endif
- return bcopy ();
+ return $ac_func ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:20979: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22884: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:20982: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:20985: \"$ac_try\"") >&5
+ echo "$as_me:22887: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:22890: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:20988: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_bcopy=yes
+ echo "$as_me:22893: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_bcopy=no
+cat "conftest.$ac_ext" >&5
+eval "$as_ac_var=no"
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
fi
-echo "$as_me:20998: result: $ac_cv_func_bcopy" >&5
-echo "${ECHO_T}$ac_cv_func_bcopy" >&6
-if test $ac_cv_func_bcopy = yes; then
+echo "$as_me:22903: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+EOF
- echo "$as_me:21002: checking if bcopy does overlapping moves" >&5
-echo $ECHO_N "checking if bcopy does overlapping moves... $ECHO_C" >&6
-if test "${cf_cv_good_bcopy+set}" = set; then
+fi
+done
+
+ac_cv_func_fork_works=$ac_cv_func_fork
+if test "x$ac_cv_func_fork" = xyes; then
+ echo "$as_me:22915: checking for working fork" >&5
+echo $ECHO_N "checking for working fork... $ECHO_C" >&6
+if test "${ac_cv_func_fork_works+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-
- if test "$cross_compiling" = yes; then
- cf_cv_good_bcopy=unknown
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_fork_works=cross
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 21012 "configure"
-#include "confdefs.h"
-
-int main(void) {
- static char data[] = "abcdefghijklmnopqrstuwwxyz";
- char temp[40];
- bcopy(data, temp, sizeof(data));
- bcopy(temp+10, temp, 15);
- bcopy(temp+5, temp+15, 10);
- ${cf_cv_main_return:-return} (strcmp(temp, "klmnopqrstuwwxypqrstuwwxyz"));
-}
-
+ cat >"conftest.$ac_ext" <<_ACEOF
+/* By Rüdiger Kuhlmann. */
+ #include <sys/types.h>
+ #if HAVE_UNISTD_H
+ # include <unistd.h>
+ #endif
+ /* Some systems only have a dummy stub for fork() */
+ int main (void)
+ {
+ if (fork() < 0)
+ $ac_main_return (1);
+ $ac_main_return (0);
+ }
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:21026: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:22938: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:21029: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:21031: \"$ac_try\"") >&5
+ echo "$as_me:22941: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:22943: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:21034: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_good_bcopy=yes
+ echo "$as_me:22946: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_func_fork_works=yes
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_good_bcopy=no
+cat "conftest.$ac_ext" >&5
+ac_cv_func_fork_works=no
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
-
fi
-echo "$as_me:21047: result: $cf_cv_good_bcopy" >&5
-echo "${ECHO_T}$cf_cv_good_bcopy" >&6
+echo "$as_me:22958: result: $ac_cv_func_fork_works" >&5
+echo "${ECHO_T}$ac_cv_func_fork_works" >&6
-else
- cf_cv_good_bcopy=no
fi
-
- if test "$cf_cv_good_bcopy" = yes ; then
-
-cat >>confdefs.h <<\EOF
-#define USE_OK_BCOPY 1
-EOF
-
- else
-
-cat >>confdefs.h <<\EOF
-#define USE_MY_MEMMOVE 1
-EOF
-
- fi
-
+if test "x$ac_cv_func_fork_works" = xcross; then
+ case $host in
+ *-*-amigaos* | *-*-msdosdjgpp*)
+ # Override, as these systems have only a dummy fork() stub
+ ac_cv_func_fork_works=no
+ ;;
+ *)
+ ac_cv_func_fork_works=yes
+ ;;
+ esac
+ { echo "$as_me:22972: WARNING: CROSS: Result $ac_cv_func_fork_works guessed due to cross-compiling." >&5
+echo "$as_me: WARNING: CROSS: Result $ac_cv_func_fork_works guessed due to cross-compiling." >&2;}
fi
-
-tty 2>&1 >/dev/null || {
-for ac_func in posix_openpt
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:21074: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
+ac_cv_func_vfork_works=$ac_cv_func_vfork
+if test "x$ac_cv_func_vfork" = xyes; then
+ echo "$as_me:22977: checking for working vfork" >&5
+echo $ECHO_N "checking for working vfork... $ECHO_C" >&6
+if test "${ac_cv_func_vfork_works+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 21080 "configure"
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_vfork_works=cross
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 22986 "configure"
#include "confdefs.h"
-#define $ac_func autoconf_temporary
-#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
-#undef $ac_func
-
+/* Thanks to Paul Eggert for this test. */
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#if HAVE_VFORK_H
+# include <vfork.h>
+#endif
+/* On some sparc systems, changes by the child to local and incoming
+ argument registers are propagated back to the parent. The compiler
+ is told about this with #include <vfork.h>, but some compilers
+ (e.g. gcc -O) don't grok <vfork.h>. Test for this by using a
+ static variable whose address is put into a register that is
+ clobbered by the vfork. */
+static
#ifdef __cplusplus
-extern "C"
+sparc_address_test (int arg)
+# else
+sparc_address_test (arg) int arg;
#endif
-
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func (void);
+{
+ static pid_t child;
+ if (!child) {
+ child = vfork ();
+ if (child < 0) {
+ perror ("vfork");
+ _exit(2);
+ }
+ if (!child) {
+ arg = getpid();
+ write(-1, "", 0);
+ _exit (arg);
+ }
+ }
+}
int
main (void)
{
+ pid_t parent = getpid ();
+ pid_t child;
-/* The GNU C library defines stubs for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-#error found stub for $ac_func
-#endif
+ sparc_address_test ();
+
+ child = vfork ();
+
+ if (child == 0) {
+ /* Here is another test for sparc vfork register problems. This
+ test uses lots of local variables, at least as many local
+ variables as main has allocated so far including compiler
+ temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris
+ 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should
+ reuse the register of parent for one of the local variables,
+ since it will think that parent can't possibly be used any more
+ in this routine. Assigning to the local variable will thus
+ munge parent in the parent process. */
+ pid_t
+ p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
+ p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
+ /* Convince the compiler that p..p7 are live; otherwise, it might
+ use the same hardware register for all 8 local variables. */
+ if (p != p1 || p != p2 || p != p3 || p != p4
+ || p != p5 || p != p6 || p != p7)
+ _exit(1);
+
+ /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
+ from child file descriptors. If the child closes a descriptor
+ before it execs or exits, this munges the parent's descriptor
+ as well. Test for this by closing stdout in the child. */
+ _exit(close(fileno(stdout)) != 0);
+ } else {
+ int status;
+ struct stat st;
+
+ while (wait(&status) != child)
+ ;
+ $ac_main_return(
+ /* Was there some problem with vforking? */
+ child < 0
+
+ /* Did the child fail? (This shouldn't happen.) */
+ || status
+
+ /* Did the vfork/compiler bug occur? */
+ || parent != getpid()
+
+ /* Did the file descriptor bug occur? */
+ || fstat(fileno(stdout), &st) != 0
+ );
+ }
+}
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:23083: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:23086: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:23088: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:23091: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_func_vfork_works=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_func_vfork_works=no
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+fi
+echo "$as_me:23103: result: $ac_cv_func_vfork_works" >&5
+echo "${ECHO_T}$ac_cv_func_vfork_works" >&6
+
+fi;
+if test "x$ac_cv_func_fork_works" = xcross; then
+ ac_cv_func_vfork_works=ac_cv_func_vfork
+ { echo "$as_me:23109: WARNING: CROSS: Result $ac_cv_func_vfork_works guessed due to cross-compiling." >&5
+echo "$as_me: WARNING: CROSS: Result $ac_cv_func_vfork_works guessed due to cross-compiling." >&2;}
+fi
+
+if test "x$ac_cv_func_vfork_works" = xyes; then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_WORKING_VFORK 1
+EOF
- return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:21111: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:21114: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:21117: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:21120: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_var=no"
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+
+cat >>confdefs.h <<\EOF
+#define vfork fork
+EOF
+
fi
-echo "$as_me:21130: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+if test "x$ac_cv_func_fork_works" = xyes; then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_WORKING_FORK 1
EOF
fi
-done
- }
-echo "$as_me:21140: checking if poll really works" >&5
-echo $ECHO_N "checking if poll really works... $ECHO_C" >&6
-if test "${cf_cv_working_poll+set}" = set; then
+
+echo "$as_me:23134: checking if fopen accepts explicit binary mode" >&5
+echo $ECHO_N "checking if fopen accepts explicit binary mode... $ECHO_C" >&6
+if test "${cf_cv_fopen_bin_r+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-if test "$cross_compiling" = yes; then
- cf_cv_working_poll=unknown
+ if test "$cross_compiling" = yes; then
+ cf_cv_fopen_bin_r=unknown
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 21150 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 23144 "configure"
#include "confdefs.h"
-#include <stdlib.h>
#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#ifdef HAVE_POLL_H
-#include <poll.h>
-#else
-#include <sys/poll.h>
-#endif
int main(void) {
- struct pollfd myfds;
- int ret;
-
- /* check for Darwin bug with respect to "devices" */
- myfds.fd = open("/dev/null", 1); /* O_WRONLY */
- if (myfds.fd < 0)
- myfds.fd = 0;
- myfds.events = POLLIN;
- myfds.revents = 0;
-
- ret = poll(&myfds, 1, 100);
-
- if (ret < 0 || (myfds.revents & POLLNVAL)) {
- ret = -1;
- } else {
- int fd = 0;
- if (!isatty(fd)) {
- fd = open("/dev/tty", 2); /* O_RDWR */
- }
-#ifdef HAVE_POSIX_OPENPT
- if (fd < 0) {
- fd = posix_openpt(O_RDWR);
+ FILE *fp = fopen("conftest.tmp", "wb");
+ int rc = 0;
+ if (fp != 0) {
+ int p, q;
+ for (p = 0; p < 256; ++p) {
+ fputc(p, fp);
}
-#endif
-
- if (fd >= 0) {
- /* also check with standard input */
- myfds.fd = fd;
- myfds.events = POLLIN;
- myfds.revents = 0;
- ret = poll(&myfds, 1, 100);
+ fclose(fp);
+ fp = fopen("conftest.tmp", "rb");
+ if (fp != 0) {
+ for (p = 0; p < 256; ++p) {
+ q = fgetc(fp);
+ if (q != p) {
+ rc = 1;
+ break;
+ }
+ }
} else {
- ret = -1;
+ rc = 1;
}
+ } else {
+ rc = 1;
}
- ${cf_cv_main_return:-return}(ret < 0);
+ ${cf_cv_main_return:-return} (rc);
}
+
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:21202: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:23177: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:21205: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:21207: \"$ac_try\"") >&5
+ echo "$as_me:23180: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:23182: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:21210: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_working_poll=yes
+ echo "$as_me:23185: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_fopen_bin_r=yes
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_working_poll=no
+cat "conftest.$ac_ext" >&5
+cf_cv_fopen_bin_r=no
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
+
fi
-echo "$as_me:21222: result: $cf_cv_working_poll" >&5
-echo "${ECHO_T}$cf_cv_working_poll" >&6
-test "$cf_cv_working_poll" = "yes" &&
+echo "$as_me:23198: result: $cf_cv_fopen_bin_r" >&5
+echo "${ECHO_T}$cf_cv_fopen_bin_r" >&6
+test "x$cf_cv_fopen_bin_r" != xno &&
cat >>confdefs.h <<\EOF
-#define HAVE_WORKING_POLL 1
+#define USE_FOPEN_BIN_R 1
EOF
-echo "$as_me:21229: checking for va_copy" >&5
-echo $ECHO_N "checking for va_copy... $ECHO_C" >&6
-if test "${cf_cv_have_va_copy+set}" = set; then
+# special check for test/ditto.c
+
+echo "$as_me:23207: checking for openpty in -lutil" >&5
+echo $ECHO_N "checking for openpty in -lutil... $ECHO_C" >&6
+if test "${ac_cv_lib_util_openpty+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 21236 "configure"
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lutil $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 23215 "configure"
#include "confdefs.h"
-#include <stdarg.h>
-
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char openpty ();
int
main (void)
{
-
- static va_list dst;
- static va_list src;
- va_copy(dst, src)
+openpty ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:21253: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:23234: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:21256: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:21259: \"$ac_try\"") >&5
+ echo "$as_me:23237: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:23240: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:21262: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_va_copy=yes
+ echo "$as_me:23243: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_lib_util_openpty=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have_va_copy=no
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_util_openpty=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:23254: result: $ac_cv_lib_util_openpty" >&5
+echo "${ECHO_T}$ac_cv_lib_util_openpty" >&6
+if test "$ac_cv_lib_util_openpty" = yes; then
+ cf_cv_lib_util=yes
+else
+ cf_cv_lib_util=no
fi
-echo "$as_me:21272: result: $cf_cv_have_va_copy" >&5
-echo "${ECHO_T}$cf_cv_have_va_copy" >&6
-
-if test "$cf_cv_have_va_copy" = yes;
-then
-
-cat >>confdefs.h <<\EOF
-#define HAVE_VA_COPY 1
-EOF
-
-else # !cf_cv_have_va_copy
-echo "$as_me:21284: checking for __va_copy" >&5
-echo $ECHO_N "checking for __va_copy... $ECHO_C" >&6
-if test "${cf_cv_have___va_copy+set}" = set; then
+echo "$as_me:23262: checking for openpty header" >&5
+echo $ECHO_N "checking for openpty header... $ECHO_C" >&6
+if test "${cf_cv_func_openpty+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-cat >conftest.$ac_ext <<_ACEOF
-#line 21291 "configure"
+ cf_save_LIBS="$LIBS"
+ test "$cf_cv_lib_util" = yes && {
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lutil; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
+ fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+ }
+ for cf_header in pty.h libutil.h util.h
+ do
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 23289 "configure"
#include "confdefs.h"
-#include <stdarg.h>
+#include <$cf_header>
int
main (void)
{
- static va_list dst;
- static va_list src;
- __va_copy(dst, src)
+ int x = openpty((int *)0, (int *)0, (char *)0,
+ (struct termios *)0, (struct winsize *)0);
+
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:21308: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:23306: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:21311: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:21314: \"$ac_try\"") >&5
+ echo "$as_me:23309: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:23312: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:21317: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have___va_copy=yes
+ echo "$as_me:23315: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+
+ cf_cv_func_openpty=$cf_header
+ break
+
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have___va_copy=no
+cat "conftest.$ac_ext" >&5
+
+ cf_cv_func_openpty=no
+
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+ done
+ LIBS="$cf_save_LIBS"
+
fi
-echo "$as_me:21327: result: $cf_cv_have___va_copy" >&5
-echo "${ECHO_T}$cf_cv_have___va_copy" >&6
+echo "$as_me:23333: result: $cf_cv_func_openpty" >&5
+echo "${ECHO_T}$cf_cv_func_openpty" >&6
-if test "$cf_cv_have___va_copy" = yes
-then
+if test "$cf_cv_func_openpty" != no ; then
+
+cat >>confdefs.h <<EOF
+#define USE_OPENPTY_HEADER <$cf_cv_func_openpty>
+EOF
cat >>confdefs.h <<\EOF
-#define HAVE___VA_COPY 1
+#define USE_XTERM_PTY 1
+EOF
+
+ if test "x$cf_cv_lib_util" = xyes ; then
+
+cf_add_libs="$TEST_LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lutil; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
+ fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+TEST_LIBS="$cf_add_libs"
+
+ fi
+fi
+
+if test "$with_hashed_db" != no ; then
+
+cat >>confdefs.h <<\EOF
+#define USE_HASHED_DB 1
EOF
-else # !cf_cv_have___va_copy
+case $with_hashed_db in
+(yes|*able*)
+ ;;
+(*)
+ if test -d "$with_hashed_db" ; then
+
+if test -n "$with_hashed_db/include" ; then
+ for cf_add_incdir in $with_hashed_db/include
+ do
+ while test "$cf_add_incdir" != /usr/include
+ do
+ if test -d "$cf_add_incdir"
+ then
+ cf_have_incdir=no
+ if test -n "$CFLAGS$CPPFLAGS" ; then
+ # a loop is needed to ensure we can add subdirs of existing dirs
+ for cf_test_incdir in $CFLAGS $CPPFLAGS ; do
+ if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then
+ cf_have_incdir=yes; break
+ fi
+ done
+ fi
+
+ if test "$cf_have_incdir" = no ; then
+ if test "$cf_add_incdir" = /usr/local/include ; then
+ if test "$GCC" = yes
+ then
+ cf_save_CPPFLAGS=$CPPFLAGS
-echo "$as_me:21339: checking for __builtin_va_copy" >&5
-echo $ECHO_N "checking for __builtin_va_copy... $ECHO_C" >&6
-if test "${cf_cv_have___builtin_va_copy+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
+ test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+ CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir"
-cat >conftest.$ac_ext <<_ACEOF
-#line 21346 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 23406 "configure"
#include "confdefs.h"
-
-#include <stdarg.h>
-
+#include <stdio.h>
int
main (void)
{
-
- static va_list dst;
- static va_list src;
- __builtin_va_copy(dst, src)
+printf("Hello")
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:21363: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:23418: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:21366: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:21369: \"$ac_try\"") >&5
+ echo "$as_me:23421: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:23424: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:21372: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have___builtin_va_copy=yes
+ echo "$as_me:23427: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ :
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have___builtin_va_copy=no
+cat "conftest.$ac_ext" >&5
+cf_have_incdir=yes
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ CPPFLAGS=$cf_save_CPPFLAGS
+ fi
+ fi
+ fi
+
+ if test "$cf_have_incdir" = no ; then
+ test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6
+
+echo "${as_me:-configure}:23444: testing adding $cf_add_incdir to include-path ..." 1>&5
+
+ CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
+
+ cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'`
+ test "$cf_top_incdir" = "$cf_add_incdir" && break
+ cf_add_incdir="$cf_top_incdir"
+ else
+ break
+ fi
+ else
+ break
+ fi
+ done
+ done
fi
-echo "$as_me:21382: result: $cf_cv_have___builtin_va_copy" >&5
-echo "${ECHO_T}$cf_cv_have___builtin_va_copy" >&6
-test "$cf_cv_have___builtin_va_copy" = yes &&
+if test -n "$with_hashed_db/lib" ; then
+ for cf_add_libdir in $with_hashed_db/lib
+ do
+ if test "$cf_add_libdir" = /usr/lib ; then
+ :
+ elif test -d "$cf_add_libdir"
+ then
+ cf_have_libdir=no
+ if test -n "$LDFLAGS$LIBS" ; then
+ # a loop is needed to ensure we can add subdirs of existing dirs
+ for cf_test_libdir in $LDFLAGS $LIBS ; do
+ if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then
+ cf_have_libdir=yes; break
+ fi
+ done
+ fi
+ if test "$cf_have_libdir" = no ; then
+ test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6
-cat >>confdefs.h <<\EOF
-#define HAVE___BUILTIN_VA_COPY 1
-EOF
+echo "${as_me:-configure}:23480: testing adding $cf_add_libdir to library-path ..." 1>&5
-fi # cf_cv_have___va_copy
+ LDFLAGS="-L$cf_add_libdir $LDFLAGS"
+ fi
+ fi
+ done
+fi
-fi # cf_cv_have_va_copy
+ else
+ case "$with_hashed_db" in
+ (./*|../*|/*)
+ { echo "$as_me:23491: WARNING: no such directory $with_hashed_db" >&5
+echo "$as_me: WARNING: no such directory $with_hashed_db" >&2;}
+ ;;
+ (*)
-case "${cf_cv_have_va_copy}${cf_cv_have___va_copy}${cf_cv_have___builtin_va_copy}" in
-(*yes*)
- ;;
+cf_search=
-(*)
- echo "$as_me:21400: checking if we can simply copy va_list" >&5
-echo $ECHO_N "checking if we can simply copy va_list... $ECHO_C" >&6
-if test "${cf_cv_pointer_va_list+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
+test "x$prefix" != "xNONE" && \
+test -d "$prefix" && \
+ {
+ test -n "$verbose" && echo " ... testing for include-directories under $prefix"
+ test -d "$prefix/include" && cf_search="$cf_search $prefix/include"
+ test -d "$prefix/include/$with_hashed_db" && cf_search="$cf_search $prefix/include/$with_hashed_db"
+ test -d "$prefix/include/$with_hashed_db/include" && cf_search="$cf_search $prefix/include/$with_hashed_db/include"
+ test -d "$prefix/$with_hashed_db/include" && cf_search="$cf_search $prefix/$with_hashed_db/include"
+ test -d "$prefix/$with_hashed_db/include/$with_hashed_db" && cf_search="$cf_search $prefix/$with_hashed_db/include/$with_hashed_db"
+}
-cat >conftest.$ac_ext <<_ACEOF
-#line 21407 "configure"
-#include "confdefs.h"
+for cf_subdir_prefix in \
+ /usr \
+ /usr/local \
+ /usr/pkg \
+ /opt \
+ /opt/local \
+ $HOME
+do
-#include <stdarg.h>
+test "x$cf_subdir_prefix" != "x$prefix" && \
+test -d "$cf_subdir_prefix" && \
+{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && {
+ test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix"
+ test -d "$cf_subdir_prefix/include" && cf_search="$cf_search $cf_subdir_prefix/include"
+ test -d "$cf_subdir_prefix/include/$with_hashed_db" && cf_search="$cf_search $cf_subdir_prefix/include/$with_hashed_db"
+ test -d "$cf_subdir_prefix/include/$with_hashed_db/include" && cf_search="$cf_search $cf_subdir_prefix/include/$with_hashed_db/include"
+ test -d "$cf_subdir_prefix/$with_hashed_db/include" && cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/include"
+ test -d "$cf_subdir_prefix/$with_hashed_db/include/$with_hashed_db" && cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/include/$with_hashed_db"
+}
+
+done
+
+ for cf_item in $cf_search
+ do
+ case "$cf_item" in
+ (*/$with_hashed_db)
+
+if test -n "$cf_item" ; then
+ for cf_add_incdir in $cf_item
+ do
+ while test "$cf_add_incdir" != /usr/include
+ do
+ if test -d "$cf_add_incdir"
+ then
+ cf_have_incdir=no
+ if test -n "$CFLAGS$CPPFLAGS" ; then
+ # a loop is needed to ensure we can add subdirs of existing dirs
+ for cf_test_incdir in $CFLAGS $CPPFLAGS ; do
+ if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then
+ cf_have_incdir=yes; break
+ fi
+ done
+ fi
+
+ if test "$cf_have_incdir" = no ; then
+ if test "$cf_add_incdir" = /usr/local/include ; then
+ if test "$GCC" = yes
+ then
+ cf_save_CPPFLAGS=$CPPFLAGS
+ test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+ CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir"
+
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 23563 "configure"
+#include "confdefs.h"
+#include <stdio.h>
int
main (void)
{
-
- va_list dst;
- va_list src;
- dst = src
+printf("Hello")
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:21424: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:23575: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:21427: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:21430: \"$ac_try\"") >&5
+ echo "$as_me:23578: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:23581: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:21433: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_pointer_va_list=yes
+ echo "$as_me:23584: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ :
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_pointer_va_list=no
+cat "conftest.$ac_ext" >&5
+cf_have_incdir=yes
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ CPPFLAGS=$cf_save_CPPFLAGS
+ fi
+ fi
+ fi
+
+ if test "$cf_have_incdir" = no ; then
+ test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6
+
+echo "${as_me:-configure}:23601: testing adding $cf_add_incdir to include-path ..." 1>&5
+
+ CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
+
+ cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'`
+ test "$cf_top_incdir" = "$cf_add_incdir" && break
+ cf_add_incdir="$cf_top_incdir"
+ else
+ break
+ fi
+ else
+ break
+ fi
+ done
+ done
fi
-echo "$as_me:21443: result: $cf_cv_pointer_va_list" >&5
-echo "${ECHO_T}$cf_cv_pointer_va_list" >&6
- if test "$cf_cv_pointer_va_list" = no
- then
- echo "$as_me:21448: checking if we can copy va_list indirectly" >&5
-echo $ECHO_N "checking if we can copy va_list indirectly... $ECHO_C" >&6
-if test "${cf_cv_array_va_list+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
+ ;;
+ esac
+ done
-cat >conftest.$ac_ext <<_ACEOF
-#line 21455 "configure"
-#include "confdefs.h"
+cf_search=
-#include <stdarg.h>
+test "x$prefix" != "xNONE" && \
+test -d "$prefix" && \
+ {
+ test -n "$verbose" && echo " ... testing for lib-directories under $prefix"
+ test -d "$prefix/lib" && cf_search="$cf_search $prefix/lib"
+ test -d "$prefix/lib/$with_hashed_db" && cf_search="$cf_search $prefix/lib/$with_hashed_db"
+ test -d "$prefix/lib/$with_hashed_db/lib" && cf_search="$cf_search $prefix/lib/$with_hashed_db/lib"
+ test -d "$prefix/$with_hashed_db/lib" && cf_search="$cf_search $prefix/$with_hashed_db/lib"
+ test -d "$prefix/$with_hashed_db/lib/$with_hashed_db" && cf_search="$cf_search $prefix/$with_hashed_db/lib/$with_hashed_db"
+}
-int
-main (void)
-{
+for cf_subdir_prefix in \
+ /usr \
+ /usr/local \
+ /usr/pkg \
+ /opt \
+ /opt/local \
+ $HOME
+do
- va_list dst;
- va_list src;
- *dst = *src
- ;
- return 0;
+test "x$cf_subdir_prefix" != "x$prefix" && \
+test -d "$cf_subdir_prefix" && \
+{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && {
+ test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix"
+ test -d "$cf_subdir_prefix/lib" && cf_search="$cf_search $cf_subdir_prefix/lib"
+ test -d "$cf_subdir_prefix/lib/$with_hashed_db" && cf_search="$cf_search $cf_subdir_prefix/lib/$with_hashed_db"
+ test -d "$cf_subdir_prefix/lib/$with_hashed_db/lib" && cf_search="$cf_search $cf_subdir_prefix/lib/$with_hashed_db/lib"
+ test -d "$cf_subdir_prefix/$with_hashed_db/lib" && cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/lib"
+ test -d "$cf_subdir_prefix/$with_hashed_db/lib/$with_hashed_db" && cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/lib/$with_hashed_db"
}
+
+done
+
+ for cf_item in $cf_search
+ do
+ case "$cf_item" in
+ (*/$with_hashed_db)
+
+if test -n "$cf_item" ; then
+ for cf_add_libdir in $cf_item
+ do
+ if test "$cf_add_libdir" = /usr/lib ; then
+ :
+ elif test -d "$cf_add_libdir"
+ then
+ cf_have_libdir=no
+ if test -n "$LDFLAGS$LIBS" ; then
+ # a loop is needed to ensure we can add subdirs of existing dirs
+ for cf_test_libdir in $LDFLAGS $LIBS ; do
+ if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then
+ cf_have_libdir=yes; break
+ fi
+ done
+ fi
+ if test "$cf_have_libdir" = no ; then
+ test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6
+
+echo "${as_me:-configure}:23681: testing adding $cf_add_libdir to library-path ..." 1>&5
+
+ LDFLAGS="-L$cf_add_libdir $LDFLAGS"
+ fi
+ fi
+ done
+fi
+
+ ;;
+ esac
+ done
+
+ ;;
+ esac
+ fi
+esac
+
+echo "$as_me:23698: checking for db.h" >&5
+echo $ECHO_N "checking for db.h... $ECHO_C" >&6
+if test "${ac_cv_header_db_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 23704 "configure"
+#include "confdefs.h"
+#include <db.h>
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:21472: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:21475: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:21478: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+if { (eval echo "$as_me:23708: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- echo "$as_me:21481: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_array_va_list=yes
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:23714: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_cv_header_db_h=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_array_va_list=no
+ cat "conftest.$ac_ext" >&5
+ ac_cv_header_db_h=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
fi
-echo "$as_me:21491: result: $cf_cv_array_va_list" >&5
-echo "${ECHO_T}$cf_cv_array_va_list" >&6
- test "$cf_cv_array_va_list" = yes &&
-cat >>confdefs.h <<\EOF
-#define ARRAY_VA_LIST 1
-EOF
-
- fi
- ;;
-esac
+echo "$as_me:23733: result: $ac_cv_header_db_h" >&5
+echo "${ECHO_T}$ac_cv_header_db_h" >&6
+if test "$ac_cv_header_db_h" = yes; then
-echo "$as_me:21502: checking for pid_t" >&5
-echo $ECHO_N "checking for pid_t... $ECHO_C" >&6
-if test "${ac_cv_type_pid_t+set}" = set; then
+echo "$as_me:23737: checking for version of db" >&5
+echo $ECHO_N "checking for version of db... $ECHO_C" >&6
+if test "${cf_cv_hashed_db_version+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 21508 "configure"
+
+cf_cv_hashed_db_version=unknown
+
+for cf_db_version in 1 2 3 4 5 6
+do
+
+echo "${as_me:-configure}:23748: testing checking for db version $cf_db_version ..." 1>&5
+
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 23751 "configure"
#include "confdefs.h"
+
$ac_includes_default
+#include <db.h>
+
+#ifdef DB_VERSION_MAJOR
+ /* db2 (DB_VERSION_MAJOR=2) has also DB_VERSION_MINOR, tested with 7 */
+#if $cf_db_version == DB_VERSION_MAJOR
+ /* ok */
+#else
+ make an error
+#endif
+#else
+#if $cf_db_version == 1
+ /* ok: assuming this is DB 1.8.5 */
+#else
+ make an error
+#endif
+#endif
+
int
main (void)
{
-if ((pid_t *) 0)
- return 0;
-if (sizeof (pid_t))
- return 0;
+DBT *foo = 0
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:21523: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:23781: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:21526: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:21529: \"$ac_try\"") >&5
+ echo "$as_me:23784: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:23787: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:21532: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_type_pid_t=yes
+ echo "$as_me:23790: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+
+ cf_cv_hashed_db_version=$cf_db_version
+ break
+
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_type_pid_t=no
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:21542: result: $ac_cv_type_pid_t" >&5
-echo "${ECHO_T}$ac_cv_type_pid_t" >&6
-if test $ac_cv_type_pid_t = yes; then
- :
-else
-
-cat >>confdefs.h <<EOF
-#define pid_t int
-EOF
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+done
fi
+echo "$as_me:23804: result: $cf_cv_hashed_db_version" >&5
+echo "${ECHO_T}$cf_cv_hashed_db_version" >&6
-for ac_header in unistd.h vfork.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:21557: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 21563 "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:21567: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:21573: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
+if test "$cf_cv_hashed_db_version" = unknown ; then
+ { { echo "$as_me:23808: error: Cannot determine version of db" >&5
+echo "$as_me: error: Cannot determine version of db" >&2;}
+ { (exit 1); exit 1; }; }
else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- eval "$as_ac_Header=yes"
+
+echo "$as_me:23813: checking for db libraries" >&5
+echo $ECHO_N "checking for db libraries... $ECHO_C" >&6
+if test "${cf_cv_hashed_db_libs+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_ext
-fi
-echo "$as_me:21592: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
-fi
+cf_cv_hashed_db_libs=unknown
+for cf_db_libs in "" db$cf_cv_hashed_db_version db-$cf_cv_hashed_db_version db ''
+do
+ cf_save_libs="$LIBS"
+ if test -n "$cf_db_libs"; then
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_db_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
+ fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
+LIBS="$cf_add_libs"
-for ac_func in fork vfork
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:21605: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 21611 "configure"
-#include "confdefs.h"
-#define $ac_func autoconf_temporary
-#include <limits.h> /* least-intrusive standard header which defines gcc2 __stub macros */
-#undef $ac_func
+ fi
-#ifdef __cplusplus
-extern "C"
-#endif
+echo "${as_me:-configure}:23843: testing checking for library $cf_db_libs ..." 1>&5
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func (void);
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 23846 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+#include <db.h>
int
main (void)
{
-/* The GNU C library defines stubs for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-#error found stub for $ac_func
+ char *path = "/tmp/foo";
+#ifdef DB_VERSION_MAJOR
+#if DB_VERSION_MAJOR >= 4
+ DB *result = 0;
+ db_create(&result, NULL, 0);
+ result->open(result,
+ NULL,
+ path,
+ path,
+ DB_HASH,
+ DB_CREATE,
+ 0644);
+#elif DB_VERSION_MAJOR >= 3
+ DB *result = 0;
+ db_create(&result, NULL, 0);
+ result->open(result,
+ path,
+ path,
+ DB_HASH,
+ DB_CREATE,
+ 0644);
+#elif DB_VERSION_MAJOR >= 2
+ DB *result = 0;
+ db_open(path,
+ DB_HASH,
+ DB_CREATE,
+ 0644,
+ (DB_ENV *) 0,
+ (DB_INFO *) 0,
+ &result);
+#endif /* DB_VERSION_MAJOR */
+#else
+ DB *result = dbopen(path,
+ 2,
+ 0644,
+ DB_HASH,
+ 0);
#endif
+ ${cf_cv_main_return:-return}(result != 0)
- return $ac_func ();
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:21642: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:23901: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:21645: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:21648: \"$ac_try\"") >&5
+ echo "$as_me:23904: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:23907: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:21651: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
+ echo "$as_me:23910: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+
+ if test -n "$cf_db_libs" ; then
+ cf_cv_hashed_db_libs=$cf_db_libs
+ else
+ cf_cv_hashed_db_libs=default
+ fi
+ LIBS="$cf_save_libs"
+ break
+
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+cat "conftest.$ac_ext" >&5
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+ LIBS="$cf_save_libs"
+done
+
+fi
+echo "$as_me:23930: result: $cf_cv_hashed_db_libs" >&5
+echo "${ECHO_T}$cf_cv_hashed_db_libs" >&6
+
+ if test "$cf_cv_hashed_db_libs" = unknown ; then
+ { { echo "$as_me:23934: error: Cannot determine library for db" >&5
+echo "$as_me: error: Cannot determine library for db" >&2;}
+ { (exit 1); exit 1; }; }
+ elif test "$cf_cv_hashed_db_libs" != default ; then
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_cv_hashed_db_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
+ fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+ fi
+fi
+
+else
+
+ { { echo "$as_me:23960: error: Cannot find db.h" >&5
+echo "$as_me: error: Cannot find db.h" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+
fi
-echo "$as_me:21661: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-EOF
+if test -z "$cf_user_CFLAGS" && test "$enable_leaks" = yes ; then
+ CFLAGS=`echo "${CFLAGS}" | sed -e 's%-g %%' -e 's%-g$%%' -e 's%[ ]% %g' -e 's% [ ]*% %g' -e 's%^ %%' -e 's% $%%'`
+ CXXFLAGS=`echo "${CXXFLAGS}" | sed -e 's%-g %%' -e 's%-g$%%' -e 's%[ ]% %g' -e 's% [ ]*% %g' -e 's%^ %%' -e 's% $%%'`
fi
-done
-ac_cv_func_fork_works=$ac_cv_func_fork
-if test "x$ac_cv_func_fork" = xyes; then
- echo "$as_me:21673: checking for working fork" >&5
-echo $ECHO_N "checking for working fork... $ECHO_C" >&6
-if test "${ac_cv_func_fork_works+set}" = set; then
+# Just in case, check if the C compiler has a bool type.
+
+echo "$as_me:23975: checking if we should include stdbool.h" >&5
+echo $ECHO_N "checking if we should include stdbool.h... $ECHO_C" >&6
+
+if test "${cf_cv_header_stdbool_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test "$cross_compiling" = yes; then
- ac_cv_func_fork_works=cross
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* By Rüdiger Kuhlmann. */
- #include <sys/types.h>
- #if HAVE_UNISTD_H
- # include <unistd.h>
- #endif
- /* Some systems only have a dummy stub for fork() */
- int main (void)
- {
- if (fork() < 0)
- $ac_main_return (1);
- $ac_main_return (0);
- }
+
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 23983 "configure"
+#include "confdefs.h"
+
+int
+main (void)
+{
+bool foo = false
+ ;
+ return 0;
+}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:21696: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:23995: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:21699: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:21701: \"$ac_try\"") >&5
+ echo "$as_me:23998: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:24001: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:21704: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_fork_works=yes
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_fork_works=no
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:21716: result: $ac_cv_func_fork_works" >&5
-echo "${ECHO_T}$ac_cv_func_fork_works" >&6
-
-fi
-if test "x$ac_cv_func_fork_works" = xcross; then
- case $host in
- *-*-amigaos* | *-*-msdosdjgpp*)
- # Override, as these systems have only a dummy fork() stub
- ac_cv_func_fork_works=no
- ;;
- *)
- ac_cv_func_fork_works=yes
- ;;
- esac
- { echo "$as_me:21730: WARNING: CROSS: Result $ac_cv_func_fork_works guessed due to cross-compiling." >&5
-echo "$as_me: WARNING: CROSS: Result $ac_cv_func_fork_works guessed due to cross-compiling." >&2;}
-fi
-ac_cv_func_vfork_works=$ac_cv_func_vfork
-if test "x$ac_cv_func_vfork" = xyes; then
- echo "$as_me:21735: checking for working vfork" >&5
-echo $ECHO_N "checking for working vfork... $ECHO_C" >&6
-if test "${ac_cv_func_vfork_works+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- ac_cv_func_vfork_works=cross
+ echo "$as_me:24004: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_header_stdbool_h=0
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 21744 "configure"
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 24011 "configure"
#include "confdefs.h"
-/* Thanks to Paul Eggert for this test. */
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#if HAVE_VFORK_H
-# include <vfork.h>
-#endif
-/* On some sparc systems, changes by the child to local and incoming
- argument registers are propagated back to the parent. The compiler
- is told about this with #include <vfork.h>, but some compilers
- (e.g. gcc -O) don't grok <vfork.h>. Test for this by using a
- static variable whose address is put into a register that is
- clobbered by the vfork. */
-static
-#ifdef __cplusplus
-sparc_address_test (int arg)
-# else
-sparc_address_test (arg) int arg;
+
+#ifndef __BEOS__
+#include <stdbool.h>
#endif
-{
- static pid_t child;
- if (!child) {
- child = vfork ();
- if (child < 0) {
- perror ("vfork");
- _exit(2);
- }
- if (!child) {
- arg = getpid();
- write(-1, "", 0);
- _exit (arg);
- }
- }
-}
int
main (void)
{
- pid_t parent = getpid ();
- pid_t child;
-
- sparc_address_test ();
-
- child = vfork ();
-
- if (child == 0) {
- /* Here is another test for sparc vfork register problems. This
- test uses lots of local variables, at least as many local
- variables as main has allocated so far including compiler
- temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris
- 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should
- reuse the register of parent for one of the local variables,
- since it will think that parent can't possibly be used any more
- in this routine. Assigning to the local variable will thus
- munge parent in the parent process. */
- pid_t
- p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
- p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
- /* Convince the compiler that p..p7 are live; otherwise, it might
- use the same hardware register for all 8 local variables. */
- if (p != p1 || p != p2 || p != p3 || p != p4
- || p != p5 || p != p6 || p != p7)
- _exit(1);
-
- /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
- from child file descriptors. If the child closes a descriptor
- before it execs or exits, this munges the parent's descriptor
- as well. Test for this by closing stdout in the child. */
- _exit(close(fileno(stdout)) != 0);
- } else {
- int status;
- struct stat st;
-
- while (wait(&status) != child)
- ;
- $ac_main_return(
- /* Was there some problem with vforking? */
- child < 0
-
- /* Did the child fail? (This shouldn't happen.) */
- || status
-
- /* Did the vfork/compiler bug occur? */
- || parent != getpid()
-
- /* Did the file descriptor bug occur? */
- || fstat(fileno(stdout), &st) != 0
- );
- }
+bool foo = false
+ ;
+ return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:21841: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:24027: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:21844: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:21846: \"$ac_try\"") >&5
+ echo "$as_me:24030: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:24033: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:21849: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_vfork_works=yes
+ echo "$as_me:24036: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_header_stdbool_h=1
else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_vfork_works=no
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_header_stdbool_h=0
fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:21861: result: $ac_cv_func_vfork_works" >&5
-echo "${ECHO_T}$ac_cv_func_vfork_works" >&6
-
-fi;
-if test "x$ac_cv_func_fork_works" = xcross; then
- ac_cv_func_vfork_works=ac_cv_func_vfork
- { echo "$as_me:21867: WARNING: CROSS: Result $ac_cv_func_vfork_works guessed due to cross-compiling." >&5
-echo "$as_me: WARNING: CROSS: Result $ac_cv_func_vfork_works guessed due to cross-compiling." >&2;}
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-if test "x$ac_cv_func_vfork_works" = xyes; then
-
-cat >>confdefs.h <<\EOF
-#define HAVE_WORKING_VFORK 1
-EOF
-
-else
-
-cat >>confdefs.h <<\EOF
-#define vfork fork
-EOF
-
+if test "$cf_cv_header_stdbool_h" = 1
+then echo "$as_me:24050: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else echo "$as_me:24052: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-if test "x$ac_cv_func_fork_works" = xyes; then
-
-cat >>confdefs.h <<\EOF
-#define HAVE_WORKING_FORK 1
-EOF
-fi
+echo "$as_me:24056: checking for builtin bool type" >&5
+echo $ECHO_N "checking for builtin bool type... $ECHO_C" >&6
-echo "$as_me:21892: checking if fopen accepts explicit binary mode" >&5
-echo $ECHO_N "checking if fopen accepts explicit binary mode... $ECHO_C" >&6
-if test "${cf_cv_fopen_bin_r+set}" = set; then
+if test "${cf_cv_cc_bool_type+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test "$cross_compiling" = yes; then
- cf_cv_fopen_bin_r=unknown
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 21902 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24064 "configure"
#include "confdefs.h"
#include <stdio.h>
-int main(void) {
- FILE *fp = fopen("conftest.tmp", "wb");
- int rc = 0;
- if (fp != 0) {
- int p, q;
- for (p = 0; p < 256; ++p) {
- fputc(p, fp);
- }
- fclose(fp);
- fp = fopen("conftest.tmp", "rb");
- if (fp != 0) {
- for (p = 0; p < 256; ++p) {
- q = fgetc(fp);
- if (q != p) {
- rc = 1;
- break;
- }
- }
- } else {
- rc = 1;
- }
- } else {
- rc = 1;
- }
- ${cf_cv_main_return:-return} (rc);
-}
+#include <sys/types.h>
+int
+main (void)
+{
+bool x = false
+ ;
+ return 0;
+}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:21935: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:24079: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:21938: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:21940: \"$ac_try\"") >&5
+ echo "$as_me:24082: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:24085: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:21943: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_fopen_bin_r=yes
+ echo "$as_me:24088: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_cc_bool_type=1
else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_fopen_bin_r=no
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_cc_bool_type=0
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+
+if test "$cf_cv_cc_bool_type" = 1
+then echo "$as_me:24101: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else echo "$as_me:24103: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-fi
-echo "$as_me:21956: result: $cf_cv_fopen_bin_r" >&5
-echo "${ECHO_T}$cf_cv_fopen_bin_r" >&6
-test "x$cf_cv_fopen_bin_r" != xno &&
-cat >>confdefs.h <<\EOF
-#define USE_FOPEN_BIN_R 1
-EOF
+# Check for C++ compiler characteristics (and ensure that it's there!)
+if test -n "$CXX" ; then
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_main_return="return"
-# special check for test/ditto.c
+if test -n "$GXX" ; then
-echo "$as_me:21965: checking for openpty in -lutil" >&5
-echo $ECHO_N "checking for openpty in -lutil... $ECHO_C" >&6
-if test "${ac_cv_lib_util_openpty+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lutil $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 21973 "configure"
+ cf_save="$LIBS"
+ LIBS="$LIBS $CXXLIBS"
+ echo "$as_me:24120: checking if we already have C++ library" >&5
+echo $ECHO_N "checking if we already have C++ library... $ECHO_C" >&6
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24123 "configure"
#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char openpty ();
+ #include <iostream>
int
main (void)
{
-openpty ();
+
+ std::cout << "Hello World!" << std::endl;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:21992: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:24137: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:21995: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:21998: \"$ac_try\"") >&5
+ echo "$as_me:24140: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:24143: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:22001: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_util_openpty=yes
+ echo "$as_me:24146: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_have_libstdcpp=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_util_openpty=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:22012: result: $ac_cv_lib_util_openpty" >&5
-echo "${ECHO_T}$ac_cv_lib_util_openpty" >&6
-if test $ac_cv_lib_util_openpty = yes; then
- cf_cv_lib_util=yes
-else
- cf_cv_lib_util=no
+cat "conftest.$ac_ext" >&5
+cf_have_libstdcpp=no
fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+ echo "$as_me:24155: result: $cf_have_libstdcpp" >&5
+echo "${ECHO_T}$cf_have_libstdcpp" >&6
+ LIBS="$cf_save"
-echo "$as_me:22020: checking for openpty header" >&5
-echo $ECHO_N "checking for openpty header... $ECHO_C" >&6
-if test "${cf_cv_func_openpty+set}" = set; then
+ if test "$cf_have_libstdcpp" != yes
+ then
+ case "$cf_cv_system_name" in
+ (os2*)
+ if test -z "`g++ -dM -E - < /dev/null | grep __KLIBC__`"; then
+ cf_stdcpp_libname=stdcpp
+ else
+ cf_stdcpp_libname=stdc++
+ fi
+ ;;
+ (*)
+ cf_stdcpp_libname=stdc++
+ ;;
+ esac
+
+ echo "$as_me:24174: checking for library $cf_stdcpp_libname" >&5
+echo $ECHO_N "checking for library $cf_stdcpp_libname... $ECHO_C" >&6
+if test "${cf_cv_libstdcpp+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cf_save_LIBS="$LIBS"
- test $cf_cv_lib_util = yes && {
+ cf_save="$LIBS"
+ LIBS="$LIBS $CXXLIBS"
+
cf_add_libs="$LIBS"
# reverse order
cf_add_0lib=
-for cf_add_1lib in -lutil; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+for cf_add_1lib in -l$cf_stdcpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
LIBS="$cf_add_libs"
- }
- for cf_header in pty.h libutil.h util.h
- do
- cat >conftest.$ac_ext <<_ACEOF
-#line 22047 "configure"
-#include "confdefs.h"
-#include <$cf_header>
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24200 "configure"
+#include "confdefs.h"
+ #include <iostream>
int
main (void)
{
- int x = openpty((int *)0, (int *)0, (char *)0,
- (struct termios *)0, (struct winsize *)0);
-
+ std::cout << "Hello World!" << std::endl;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:22064: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:24214: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:22067: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:22070: \"$ac_try\"") >&5
+ echo "$as_me:24217: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:24220: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:22073: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- cf_cv_func_openpty=$cf_header
- break
-
+ echo "$as_me:24223: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_libstdcpp=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-
- cf_cv_func_openpty=no
-
+cat "conftest.$ac_ext" >&5
+cf_cv_libstdcpp=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- done
- LIBS="$cf_save_LIBS"
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+ LIBS="$cf_save"
fi
-echo "$as_me:22091: result: $cf_cv_func_openpty" >&5
-echo "${ECHO_T}$cf_cv_func_openpty" >&6
-
-if test "$cf_cv_func_openpty" != no ; then
-
-cat >>confdefs.h <<EOF
-#define USE_OPENPTY_HEADER <$cf_cv_func_openpty>
-EOF
-
-cat >>confdefs.h <<\EOF
-#define USE_XTERM_PTY 1
-EOF
-
- if test "x$cf_cv_lib_util" = xyes ; then
-
-cf_add_libs="$TEST_LIBS"
+echo "$as_me:24235: result: $cf_cv_libstdcpp" >&5
+echo "${ECHO_T}$cf_cv_libstdcpp" >&6
+ test "$cf_cv_libstdcpp" = yes && {
+cf_add_libs="$CXXLIBS"
# reverse order
cf_add_0lib=
-for cf_add_1lib in -lutil; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+for cf_add_1lib in -l$cf_stdcpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
# filter duplicates
for cf_add_1lib in $cf_add_0lib; do
for cf_add_2lib in $cf_add_libs; do
if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
cf_add_1lib=
break
fi
done
test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
-TEST_LIBS="$cf_add_libs"
-
+CXXLIBS="$cf_add_libs"
+ }
fi
fi
-if test "$with_hashed_db" != no ; then
-
-cat >>confdefs.h <<\EOF
-#define USE_HASHED_DB 1
-EOF
-
-case $with_hashed_db in
-(yes|*able*)
- ;;
-(*)
- if test -d "$with_hashed_db" ; then
-
-if test -n "$with_hashed_db/include" ; then
- for cf_add_incdir in $with_hashed_db/include
- do
- while test $cf_add_incdir != /usr/include
- do
- if test -d $cf_add_incdir
- then
- cf_have_incdir=no
- if test -n "$CFLAGS$CPPFLAGS" ; then
- # a loop is needed to ensure we can add subdirs of existing dirs
- for cf_test_incdir in $CFLAGS $CPPFLAGS ; do
- if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then
- cf_have_incdir=yes; break
- fi
- done
- fi
-
- if test "$cf_have_incdir" = no ; then
- if test "$cf_add_incdir" = /usr/local/include ; then
- if test "$GCC" = yes
- then
- cf_save_CPPFLAGS=$CPPFLAGS
-
- test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
- CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir"
+ echo "$as_me:24257: checking whether $CXX understands -c and -o together" >&5
+echo $ECHO_N "checking whether $CXX understands -c and -o together... $ECHO_C" >&6
+if test "${cf_cv_prog_CXX_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
- cat >conftest.$ac_ext <<_ACEOF
-#line 22164 "configure"
-#include "confdefs.h"
-#include <stdio.h>
-int
-main (void)
+cat > conftest.$ac_ext <<CF_EOF
+int main(void)
{
-printf("Hello")
- ;
- return 0;
+ ${cf_cv_main_return:-return}(0);
}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:22176: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+CF_EOF
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CXX $CXXFLAGS $CPPFLAGS -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+if { (eval echo "$as_me:24272: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:22179: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:22182: \"$ac_try\"") >&5
+ echo "$as_me:24275: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ test -f conftest2.$ac_objext && { (eval echo "$as_me:24277: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:22185: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
+ echo "$as_me:24280: \$? = $ac_status" >&5
+ (exit "$ac_status"); };
+then
+ eval cf_cv_prog_CXX_c_o=yes
else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_have_incdir=yes
+ eval cf_cv_prog_CXX_c_o=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- CPPFLAGS=$cf_save_CPPFLAGS
- fi
- fi
- fi
-
- if test "$cf_have_incdir" = no ; then
- test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6
-
-echo "${as_me:-configure}:22202: testing adding $cf_add_incdir to include-path ..." 1>&5
-
- CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
+rm -rf ./conftest*
- cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'`
- test "$cf_top_incdir" = "$cf_add_incdir" && break
- cf_add_incdir="$cf_top_incdir"
- else
- break
- fi
- else
- break
- fi
- done
- done
fi
-
-if test -n "$with_hashed_db/lib" ; then
- for cf_add_libdir in $with_hashed_db/lib
- do
- if test $cf_add_libdir = /usr/lib ; then
- :
- elif test -d $cf_add_libdir
- then
- cf_have_libdir=no
- if test -n "$LDFLAGS$LIBS" ; then
- # a loop is needed to ensure we can add subdirs of existing dirs
- for cf_test_libdir in $LDFLAGS $LIBS ; do
- if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then
- cf_have_libdir=yes; break
- fi
- done
- fi
- if test "$cf_have_libdir" = no ; then
- test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6
-
-echo "${as_me:-configure}:22238: testing adding $cf_add_libdir to library-path ..." 1>&5
-
- LDFLAGS="-L$cf_add_libdir $LDFLAGS"
- fi
- fi
- done
+if test "$cf_cv_prog_CXX_c_o" = yes; then
+ echo "$as_me:24291: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ echo "$as_me:24294: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
- else
- case "$with_hashed_db" in
- (./*|../*|/*)
- { echo "$as_me:22249: WARNING: no such directory $with_hashed_db" >&5
-echo "$as_me: WARNING: no such directory $with_hashed_db" >&2;}
- ;;
- (*)
-
-cf_search=
-
-test "x$prefix" != "xNONE" && \
-test -d "$prefix" && \
- {
- test -n "$verbose" && echo " ... testing for include-directories under $prefix"
- test -d $prefix/include && cf_search="$cf_search $prefix/include"
- test -d $prefix/include/$with_hashed_db && cf_search="$cf_search $prefix/include/$with_hashed_db"
- test -d $prefix/include/$with_hashed_db/include && cf_search="$cf_search $prefix/include/$with_hashed_db/include"
- test -d $prefix/$with_hashed_db/include && cf_search="$cf_search $prefix/$with_hashed_db/include"
- test -d $prefix/$with_hashed_db/include/$with_hashed_db && cf_search="$cf_search $prefix/$with_hashed_db/include/$with_hashed_db"
-}
-
-for cf_subdir_prefix in \
- /usr \
- /usr/local \
- /usr/pkg \
- /opt \
- /opt/local \
- $HOME
-do
-
-test "x$cf_subdir_prefix" != "x$prefix" && \
-test -d "$cf_subdir_prefix" && \
-(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && {
- test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix"
- test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include"
- test -d $cf_subdir_prefix/include/$with_hashed_db && cf_search="$cf_search $cf_subdir_prefix/include/$with_hashed_db"
- test -d $cf_subdir_prefix/include/$with_hashed_db/include && cf_search="$cf_search $cf_subdir_prefix/include/$with_hashed_db/include"
- test -d $cf_subdir_prefix/$with_hashed_db/include && cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/include"
- test -d $cf_subdir_prefix/$with_hashed_db/include/$with_hashed_db && cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/include/$with_hashed_db"
-}
-
-done
+ case "$GXX_VERSION" in
+ (1.*|2.[0-6]*|[1-9][0-9].*)
+ cf_cxx_library=yes
+ ;;
+ (*-2.7*|2.7*)
- for cf_item in $cf_search
- do
- case $cf_item in
- (*/$with_hashed_db)
+cf_cxx_library=unknown
+case "$cf_cv_system_name" in
+(os2*)
+ cf_gpp_libname=gpp
+ ;;
+(*)
+ cf_gpp_libname=g++
+ ;;
+esac
+if test "$GXX" = yes; then
+ echo "$as_me:24314: checking for lib$cf_gpp_libname" >&5
+echo $ECHO_N "checking for lib$cf_gpp_libname... $ECHO_C" >&6
+ cf_save="$LIBS"
-if test -n "$cf_item" ; then
- for cf_add_incdir in $cf_item
- do
- while test $cf_add_incdir != /usr/include
- do
- if test -d $cf_add_incdir
- then
- cf_have_incdir=no
- if test -n "$CFLAGS$CPPFLAGS" ; then
- # a loop is needed to ensure we can add subdirs of existing dirs
- for cf_test_incdir in $CFLAGS $CPPFLAGS ; do
- if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then
- cf_have_incdir=yes; break
- fi
- done
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_gpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
- if test "$cf_have_incdir" = no ; then
- if test "$cf_add_incdir" = /usr/local/include ; then
- if test "$GCC" = yes
- then
- cf_save_CPPFLAGS=$CPPFLAGS
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24335 "configure"
+#include "confdefs.h"
- test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
- CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir"
+#include <$cf_gpp_libname/builtin.h>
- cat >conftest.$ac_ext <<_ACEOF
-#line 22321 "configure"
-#include "confdefs.h"
-#include <stdio.h>
int
main (void)
{
-printf("Hello")
+two_arg_error_handler_t foo2 = lib_error_handler
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:22333: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:24349: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:22336: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:22339: \"$ac_try\"") >&5
+ echo "$as_me:24352: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:24355: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:22342: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_have_incdir=yes
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- CPPFLAGS=$cf_save_CPPFLAGS
- fi
- fi
- fi
-
- if test "$cf_have_incdir" = no ; then
- test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6
-
-echo "${as_me:-configure}:22359: testing adding $cf_add_incdir to include-path ..." 1>&5
-
- CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
+ echo "$as_me:24358: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cxx_library=yes
- cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'`
- test "$cf_top_incdir" = "$cf_add_incdir" && break
- cf_add_incdir="$cf_top_incdir"
- else
- break
+cf_add_libs="$CXXLIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_gpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
fi
- else
- break
- fi
done
- done
-fi
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+CXXLIBS="$cf_add_libs"
- ;;
- esac
- done
+ if test "$cf_gpp_libname" = cpp ; then
-cf_search=
+cat >>confdefs.h <<\EOF
+#define HAVE_GPP_BUILTIN_H 1
+EOF
-test "x$prefix" != "xNONE" && \
-test -d "$prefix" && \
- {
- test -n "$verbose" && echo " ... testing for lib-directories under $prefix"
- test -d $prefix/lib && cf_search="$cf_search $prefix/lib"
- test -d $prefix/lib/$with_hashed_db && cf_search="$cf_search $prefix/lib/$with_hashed_db"
- test -d $prefix/lib/$with_hashed_db/lib && cf_search="$cf_search $prefix/lib/$with_hashed_db/lib"
- test -d $prefix/$with_hashed_db/lib && cf_search="$cf_search $prefix/$with_hashed_db/lib"
- test -d $prefix/$with_hashed_db/lib/$with_hashed_db && cf_search="$cf_search $prefix/$with_hashed_db/lib/$with_hashed_db"
-}
+ else
-for cf_subdir_prefix in \
- /usr \
- /usr/local \
- /usr/pkg \
- /opt \
- /opt/local \
- $HOME
-do
+cat >>confdefs.h <<\EOF
+#define HAVE_GXX_BUILTIN_H 1
+EOF
-test "x$cf_subdir_prefix" != "x$prefix" && \
-test -d "$cf_subdir_prefix" && \
-(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && {
- test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix"
- test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib"
- test -d $cf_subdir_prefix/lib/$with_hashed_db && cf_search="$cf_search $cf_subdir_prefix/lib/$with_hashed_db"
- test -d $cf_subdir_prefix/lib/$with_hashed_db/lib && cf_search="$cf_search $cf_subdir_prefix/lib/$with_hashed_db/lib"
- test -d $cf_subdir_prefix/$with_hashed_db/lib && cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/lib"
- test -d $cf_subdir_prefix/$with_hashed_db/lib/$with_hashed_db && cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/lib/$with_hashed_db"
+ fi
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 24395 "configure"
+#include "confdefs.h"
+
+#include <builtin.h>
+
+int
+main (void)
+{
+two_arg_error_handler_t foo2 = lib_error_handler
+ ;
+ return 0;
}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:24409: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:24412: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:24415: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:24418: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cxx_library=yes
+cf_add_libs="$CXXLIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_gpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+ for cf_add_2lib in $cf_add_libs; do
+ if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+ cf_add_1lib=
+ break
+ fi
+ done
+ test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
done
+CXXLIBS="$cf_add_libs"
- for cf_item in $cf_search
- do
- case $cf_item in
- (*/$with_hashed_db)
+cat >>confdefs.h <<\EOF
+#define HAVE_BUILTIN_H 1
+EOF
-if test -n "$cf_item" ; then
- for cf_add_libdir in $cf_item
- do
- if test $cf_add_libdir = /usr/lib ; then
- :
- elif test -d $cf_add_libdir
- then
- cf_have_libdir=no
- if test -n "$LDFLAGS$LIBS" ; then
- # a loop is needed to ensure we can add subdirs of existing dirs
- for cf_test_libdir in $LDFLAGS $LIBS ; do
- if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then
- cf_have_libdir=yes; break
- fi
- done
- fi
- if test "$cf_have_libdir" = no ; then
- test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cxx_library=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+ LIBS="$cf_save"
+ echo "$as_me:24451: result: $cf_cxx_library" >&5
+echo "${ECHO_T}$cf_cxx_library" >&6
+fi
-echo "${as_me:-configure}:22439: testing adding $cf_add_libdir to library-path ..." 1>&5
+ ;;
+ (*)
+ cf_cxx_library=no
+ ;;
+ esac
- LDFLAGS="-L$cf_add_libdir $LDFLAGS"
- fi
- fi
- done
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_main_return="return"
+echo "$as_me:24467: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+if test -z "$CXXCPP"; then
+ if test "${ac_cv_prog_CXXCPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24484 "configure"
+#include "confdefs.h"
+#include <assert.h>
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:24489: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:24495: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+ cat "conftest.$ac_ext" >&5
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err "conftest.$ac_ext"
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24518 "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:24522: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:24528: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+ cat "conftest.$ac_ext" >&5
+ # Passes both tests.
+ac_preproc_ok=:
+break
fi
+rm -f conftest.err "conftest.$ac_ext"
- ;;
- esac
- done
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err "conftest.$ac_ext"
+if $ac_preproc_ok; then
+ break
+fi
- ;;
- esac
- fi
-esac
+ done
+ ac_cv_prog_CXXCPP=$CXXCPP
-echo "$as_me:22456: checking for db.h" >&5
-echo $ECHO_N "checking for db.h... $ECHO_C" >&6
-if test "${ac_cv_header_db_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ CXXCPP=$ac_cv_prog_CXXCPP
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 22462 "configure"
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+echo "$as_me:24565: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24575 "configure"
#include "confdefs.h"
-#include <db.h>
+#include <assert.h>
+ Syntax error
_ACEOF
-if { (eval echo "$as_me:22466: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:24580: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:22472: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
+ echo "$as_me:24586: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
else
ac_cpp_err=
fi
else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
- ac_cv_header_db_h=yes
+ :
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_header_db_h=no
+ cat "conftest.$ac_ext" >&5
+ # Broken: fails on valid input.
+continue
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24609 "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:24613: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:24619: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
fi
-echo "$as_me:22491: result: $ac_cv_header_db_h" >&5
-echo "${ECHO_T}$ac_cv_header_db_h" >&6
-if test $ac_cv_header_db_h = yes; then
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+ cat "conftest.$ac_ext" >&5
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err "conftest.$ac_ext"
-echo "$as_me:22495: checking for version of db" >&5
-echo $ECHO_N "checking for version of db... $ECHO_C" >&6
-if test "${cf_cv_hashed_db_version+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err "conftest.$ac_ext"
+if $ac_preproc_ok; then
+ :
else
+ { { echo "$as_me:24647: error: C++ preprocessor \"$CXXCPP\" fails sanity check" >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check" >&2;}
+ { (exit 1); exit 1; }; }
+fi
-cf_cv_hashed_db_version=unknown
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_main_return="return"
-for cf_db_version in 1 2 3 4 5 6
+for ac_header in typeinfo
do
-
-echo "${as_me:-configure}:22506: testing checking for db version $cf_db_version ..." 1>&5
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 22509 "configure"
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:24662: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24668 "configure"
#include "confdefs.h"
-
-$ac_includes_default
-#include <db.h>
-
-#ifdef DB_VERSION_MAJOR
- /* db2 (DB_VERSION_MAJOR=2) has also DB_VERSION_MINOR, tested with 7 */
-#if $cf_db_version == DB_VERSION_MAJOR
- /* ok */
-#else
- make an error
-#endif
-#else
-#if $cf_db_version == 1
- /* ok: assuming this is DB 1.8.5 */
-#else
- make an error
-#endif
-#endif
-
-int
-main (void)
-{
-DBT *foo = 0
- ;
- return 0;
-}
+#include <$ac_header>
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:22539: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+if { (eval echo "$as_me:24672: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
ac_status=$?
- echo "$as_me:22542: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:22545: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:22548: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- cf_cv_hashed_db_version=$cf_db_version
- break
-
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:24678: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ eval "$as_ac_Header=yes"
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+ cat "conftest.$ac_ext" >&5
+ eval "$as_ac_Header=no"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-done
-
+rm -f conftest.err "conftest.$ac_ext"
fi
-echo "$as_me:22562: result: $cf_cv_hashed_db_version" >&5
-echo "${ECHO_T}$cf_cv_hashed_db_version" >&6
+echo "$as_me:24697: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
-if test "$cf_cv_hashed_db_version" = unknown ; then
- { { echo "$as_me:22566: error: Cannot determine version of db" >&5
-echo "$as_me: error: Cannot determine version of db" >&2;}
- { (exit 1); exit 1; }; }
-else
+fi
+done
-echo "$as_me:22571: checking for db libraries" >&5
-echo $ECHO_N "checking for db libraries... $ECHO_C" >&6
-if test "${cf_cv_hashed_db_libs+set}" = set; then
+for ac_header in iostream
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:24710: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24716 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:24720: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+ (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ $EGREP -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:24726: \$? = $ac_status" >&5
+ (exit "$ac_status"); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+ cat "conftest.$ac_ext" >&5
+ eval "$as_ac_Header=no"
+fi
+rm -f conftest.err "conftest.$ac_ext"
+fi
+echo "$as_me:24745: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
-cf_cv_hashed_db_libs=unknown
-for cf_db_libs in "" db$cf_cv_hashed_db_version db-$cf_cv_hashed_db_version db ''
-do
- cf_save_libs="$LIBS"
- if test -n "$cf_db_libs"; then
-
-cf_add_libs="$LIBS"
-# reverse order
-cf_add_0lib=
-for cf_add_1lib in -l$cf_db_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
-# filter duplicates
-for cf_add_1lib in $cf_add_0lib; do
- for cf_add_2lib in $cf_add_libs; do
- if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
- cf_add_1lib=
- break
- fi
- done
- test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+fi
done
-LIBS="$cf_add_libs"
-
- fi
-
-echo "${as_me:-configure}:22601: testing checking for library "$cf_db_libs" ..." 1>&5
- cat >conftest.$ac_ext <<_ACEOF
-#line 22604 "configure"
+if test x"$ac_cv_header_iostream" = xyes ; then
+ echo "$as_me:24756: checking if iostream uses std-namespace" >&5
+echo $ECHO_N "checking if iostream uses std-namespace... $ECHO_C" >&6
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24759 "configure"
#include "confdefs.h"
-$ac_includes_default
-#include <db.h>
-
-int
-main (void)
-{
-
- char *path = "/tmp/foo";
-#ifdef DB_VERSION_MAJOR
-#if DB_VERSION_MAJOR >= 4
- DB *result = 0;
- db_create(&result, NULL, 0);
- result->open(result,
- NULL,
- path,
- path,
- DB_HASH,
- DB_CREATE,
- 0644);
-#elif DB_VERSION_MAJOR >= 3
- DB *result = 0;
- db_create(&result, NULL, 0);
- result->open(result,
- path,
- path,
- DB_HASH,
- DB_CREATE,
- 0644);
-#elif DB_VERSION_MAJOR >= 2
- DB *result = 0;
- db_open(path,
- DB_HASH,
- DB_CREATE,
- 0644,
- (DB_ENV *) 0,
- (DB_INFO *) 0,
- &result);
-#endif /* DB_VERSION_MAJOR */
-#else
- DB *result = dbopen(path,
- 2,
- 0644,
- DB_HASH,
- 0);
-#endif
- ${cf_cv_main_return:-return}(result != 0)
+#include <iostream>
+using std::endl;
+using std::cerr;
+int
+main (void)
+{
+
+cerr << "testing" << endl;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:22659: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:24776: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:22662: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:22665: \"$ac_try\"") >&5
+ echo "$as_me:24779: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:24782: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:22668: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- if test -n "$cf_db_libs" ; then
- cf_cv_hashed_db_libs=$cf_db_libs
- else
- cf_cv_hashed_db_libs=default
- fi
- LIBS="$cf_save_libs"
- break
-
+ echo "$as_me:24785: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_iostream_namespace=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- LIBS="$cf_save_libs"
-done
-
+cat "conftest.$ac_ext" >&5
+cf_iostream_namespace=no
fi
-echo "$as_me:22688: result: $cf_cv_hashed_db_libs" >&5
-echo "${ECHO_T}$cf_cv_hashed_db_libs" >&6
-
- if test "$cf_cv_hashed_db_libs" = unknown ; then
- { { echo "$as_me:22692: error: Cannot determine library for db" >&5
-echo "$as_me: error: Cannot determine library for db" >&2;}
- { (exit 1); exit 1; }; }
- elif test "$cf_cv_hashed_db_libs" != default ; then
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ echo "$as_me:24794: result: $cf_iostream_namespace" >&5
+echo "${ECHO_T}$cf_iostream_namespace" >&6
+ if test "$cf_iostream_namespace" = yes ; then
-cf_add_libs="$LIBS"
-# reverse order
-cf_add_0lib=
-for cf_add_1lib in -l$cf_cv_hashed_db_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
-# filter duplicates
-for cf_add_1lib in $cf_add_0lib; do
- for cf_add_2lib in $cf_add_libs; do
- if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
- cf_add_1lib=
- break
- fi
- done
- test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
-done
-LIBS="$cf_add_libs"
+cat >>confdefs.h <<\EOF
+#define IOSTREAM_NAMESPACE 1
+EOF
fi
fi
-else
-
- { { echo "$as_me:22718: error: Cannot find db.h" >&5
-echo "$as_me: error: Cannot find db.h" >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-
-fi
-
-if test -z "$cf_user_CFLAGS" && test "$with_no_leaks" = no ; then
- CFLAGS=`echo ${CFLAGS} | sed -e 's%-g %%' -e 's%-g$%%'`
- CXXFLAGS=`echo ${CXXFLAGS} | sed -e 's%-g %%' -e 's%-g$%%'`
-fi
-
-# Just in case, check if the C compiler has a bool type.
-
-echo "$as_me:22733: checking if we should include stdbool.h" >&5
+echo "$as_me:24805: checking if we should include stdbool.h" >&5
echo $ECHO_N "checking if we should include stdbool.h... $ECHO_C" >&6
if test "${cf_cv_header_stdbool_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 22741 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24813 "configure"
#include "confdefs.h"
int
main (void)
{
bool foo = false
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:22753: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:24825: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:22756: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:22759: \"$ac_try\"") >&5
+ echo "$as_me:24828: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:24831: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:22762: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:24834: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_header_stdbool_h=0
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 22769 "configure"
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 24841 "configure"
#include "confdefs.h"
#ifndef __BEOS__
#include <stdbool.h>
#endif
int
main (void)
{
bool foo = false
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:22785: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:24857: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:22788: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:22791: \"$ac_try\"") >&5
+ echo "$as_me:24860: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:24863: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:22794: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:24866: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_header_stdbool_h=1
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_header_stdbool_h=0
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
if test "$cf_cv_header_stdbool_h" = 1
-then echo "$as_me:22808: result: yes" >&5
+then echo "$as_me:24880: result: yes" >&5
echo "${ECHO_T}yes" >&6
-else echo "$as_me:22810: result: no" >&5
+else echo "$as_me:24882: result: no" >&5
echo "${ECHO_T}no" >&6
fi
-echo "$as_me:22814: checking for builtin bool type" >&5
+echo "$as_me:24886: checking for builtin bool type" >&5
echo $ECHO_N "checking for builtin bool type... $ECHO_C" >&6
-if test "${cf_cv_cc_bool_type+set}" = set; then
+if test "${cf_cv_builtin_bool+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 22822 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24894 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <sys/types.h>
int
main (void)
{
bool x = false
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:22837: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:24909: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:22840: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:22843: \"$ac_try\"") >&5
+ echo "$as_me:24912: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:24915: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:22846: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_cc_bool_type=1
+ echo "$as_me:24918: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_builtin_bool=1
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_cc_bool_type=0
+cat "conftest.$ac_ext" >&5
+cf_cv_builtin_bool=0
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-if test "$cf_cv_cc_bool_type" = 1
-then echo "$as_me:22859: result: yes" >&5
+if test "$cf_cv_builtin_bool" = 1
+then echo "$as_me:24931: result: yes" >&5
echo "${ECHO_T}yes" >&6
-else echo "$as_me:22861: result: no" >&5
+else echo "$as_me:24933: result: no" >&5
echo "${ECHO_T}no" >&6
fi
-# Check for C++ compiler characteristics (and ensure that it's there!)
-if test -n "$CXX" ; then
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+echo "$as_me:24937: checking for bool" >&5
+echo $ECHO_N "checking for bool... $ECHO_C" >&6
+if test "${ac_cv_type_bool+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 24943 "configure"
+#include "confdefs.h"
-if test -n "$GXX" ; then
+#include <stdlib.h>
+#include <stdio.h>
- cf_save="$LIBS"
- LIBS="$LIBS $CXXLIBS"
- echo "$as_me:22878: checking if we already have C++ library" >&5
-echo $ECHO_N "checking if we already have C++ library... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-#line 22881 "configure"
-#include "confdefs.h"
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
- #include <iostream>
int
main (void)
{
-
- std::cout << "Hello World!" << std::endl;
+if ((bool *) 0)
+ return 0;
+if (sizeof (bool))
+ return 0;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:22895: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:24979: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:22898: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:22901: \"$ac_try\"") >&5
+ echo "$as_me:24982: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:24985: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:22904: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_have_libstdcpp=yes
+ echo "$as_me:24988: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_type_bool=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_have_libstdcpp=no
+cat "conftest.$ac_ext" >&5
+ac_cv_type_bool=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- echo "$as_me:22913: result: $cf_have_libstdcpp" >&5
-echo "${ECHO_T}$cf_have_libstdcpp" >&6
- LIBS="$cf_save"
-
- if test $cf_have_libstdcpp != yes
- then
- case $cf_cv_system_name in
- (os2*)
- if test -z "`g++ -dM -E - < /dev/null | grep __KLIBC__`"; then
- cf_stdcpp_libname=stdcpp
- else
- cf_stdcpp_libname=stdc++
- fi
- ;;
- (*)
- cf_stdcpp_libname=stdc++
- ;;
- esac
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+echo "$as_me:24998: result: $ac_cv_type_bool" >&5
+echo "${ECHO_T}$ac_cv_type_bool" >&6
- echo "$as_me:22932: checking for library $cf_stdcpp_libname" >&5
-echo $ECHO_N "checking for library $cf_stdcpp_libname... $ECHO_C" >&6
-if test "${cf_cv_libstdcpp+set}" = set; then
+echo "$as_me:25001: checking size of bool" >&5
+echo $ECHO_N "checking size of bool... $ECHO_C" >&6
+if test "${ac_cv_sizeof_bool+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
+ if test "$ac_cv_type_bool" = yes; then
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 25010 "configure"
+#include "confdefs.h"
- cf_save="$LIBS"
- LIBS="$LIBS $CXXLIBS"
+#include <stdlib.h>
+#include <stdio.h>
-cf_add_libs="$LIBS"
-# reverse order
-cf_add_0lib=
-for cf_add_1lib in -l$cf_stdcpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
-# filter duplicates
-for cf_add_1lib in $cf_add_0lib; do
- for cf_add_2lib in $cf_add_libs; do
- if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
- cf_add_1lib=
- break
- fi
- done
- test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
-done
-LIBS="$cf_add_libs"
+#if defined(__cplusplus)
- cat >conftest.$ac_ext <<_ACEOF
-#line 22958 "configure"
-#include "confdefs.h"
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
- #include <iostream>
int
main (void)
{
-
- std::cout << "Hello World!" << std::endl;
+int _array_ [1 - 2 * !((sizeof (bool)) >= 0)]
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:22972: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:22975: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:22978: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:22981: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_libstdcpp=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_libstdcpp=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- LIBS="$cf_save"
-
-fi
-echo "$as_me:22993: result: $cf_cv_libstdcpp" >&5
-echo "${ECHO_T}$cf_cv_libstdcpp" >&6
- test "$cf_cv_libstdcpp" = yes && {
-cf_add_libs="$CXXLIBS"
-# reverse order
-cf_add_0lib=
-for cf_add_1lib in -l$cf_stdcpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
-# filter duplicates
-for cf_add_1lib in $cf_add_0lib; do
- for cf_add_2lib in $cf_add_libs; do
- if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
- cf_add_1lib=
- break
- fi
- done
- test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
-done
-CXXLIBS="$cf_add_libs"
- }
- fi
-fi
-
- echo "$as_me:23015: checking whether $CXX understands -c and -o together" >&5
-echo $ECHO_N "checking whether $CXX understands -c and -o together... $ECHO_C" >&6
-if test "${cf_cv_prog_CXX_c_o+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat > conftest.$ac_ext <<CF_EOF
-int main(void)
-{
- ${cf_cv_main_return:-return}(0);
-}
-CF_EOF
-# We do the test twice because some compilers refuse to overwrite an
-# existing .o file with -o, though they will create one.
-ac_try='$CXX $CXXFLAGS $CPPFLAGS -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-if { (eval echo "$as_me:23030: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25043: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:23033: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- test -f conftest2.$ac_objext && { (eval echo "$as_me:23035: \"$ac_try\"") >&5
+ echo "$as_me:25046: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:25049: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:23038: \$? = $ac_status" >&5
- (exit $ac_status); };
-then
- eval cf_cv_prog_CXX_c_o=yes
-else
- eval cf_cv_prog_CXX_c_o=no
-fi
-rm -rf conftest*
+ echo "$as_me:25052: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 25057 "configure"
+#include "confdefs.h"
-fi
-if test $cf_cv_prog_CXX_c_o = yes; then
- echo "$as_me:23049: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me:23052: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
+#include <stdlib.h>
+#include <stdio.h>
- case $GXX_VERSION in
- (1*|2.0-6*)
- cf_cxx_library=yes
- ;;
- (*-2.7*|2.7*)
+#if defined(__cplusplus)
-cf_cxx_library=unknown
-case $cf_cv_system_name in
-(os2*)
- cf_gpp_libname=gpp
- ;;
-(*)
- cf_gpp_libname=g++
- ;;
-esac
-if test "$GXX" = yes; then
- echo "$as_me:23072: checking for lib$cf_gpp_libname" >&5
-echo $ECHO_N "checking for lib$cf_gpp_libname... $ECHO_C" >&6
- cf_save="$LIBS"
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
-cf_add_libs="$LIBS"
-# reverse order
-cf_add_0lib=
-for cf_add_1lib in -l$cf_gpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
-# filter duplicates
-for cf_add_1lib in $cf_add_0lib; do
- for cf_add_2lib in $cf_add_libs; do
- if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
- cf_add_1lib=
- break
- fi
- done
- test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
-done
-LIBS="$cf_add_libs"
+#else
- cat >conftest.$ac_ext <<_ACEOF
-#line 23093 "configure"
-#include "confdefs.h"
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
-#include <$cf_gpp_libname/builtin.h>
+#endif
int
main (void)
{
-two_arg_error_handler_t foo2 = lib_error_handler
+int _array_ [1 - 2 * !((sizeof (bool)) <= $ac_mid)]
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:23107: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25090: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:23110: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:23113: \"$ac_try\"") >&5
+ echo "$as_me:25093: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:25096: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:23116: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cxx_library=yes
-
-cf_add_libs="$CXXLIBS"
-# reverse order
-cf_add_0lib=
-for cf_add_1lib in -l$cf_gpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
-# filter duplicates
-for cf_add_1lib in $cf_add_0lib; do
- for cf_add_2lib in $cf_add_libs; do
- if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
- cf_add_1lib=
- break
- fi
- done
- test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
-done
-CXXLIBS="$cf_add_libs"
+ echo "$as_me:25099: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`; ac_mid=`expr 2 '*' "$ac_mid" + 1`
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ done
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 25115 "configure"
+#include "confdefs.h"
- if test "$cf_gpp_libname" = cpp ; then
+#include <stdlib.h>
+#include <stdio.h>
-cat >>confdefs.h <<\EOF
-#define HAVE_GPP_BUILTIN_H 1
-EOF
+#if defined(__cplusplus)
- else
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
-cat >>confdefs.h <<\EOF
-#define HAVE_GXX_BUILTIN_H 1
-EOF
+#else
- fi
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 23153 "configure"
-#include "confdefs.h"
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
-#include <builtin.h>
+#endif
int
main (void)
{
-two_arg_error_handler_t foo2 = lib_error_handler
+int _array_ [1 - 2 * !((sizeof (bool)) >= $ac_mid)]
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:23167: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25148: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:23170: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:23173: \"$ac_try\"") >&5
+ echo "$as_me:25151: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:25154: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:23176: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cxx_library=yes
-
-cf_add_libs="$CXXLIBS"
-# reverse order
-cf_add_0lib=
-for cf_add_1lib in -l$cf_gpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
-# filter duplicates
-for cf_add_1lib in $cf_add_0lib; do
- for cf_add_2lib in $cf_add_libs; do
- if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
- cf_add_1lib=
- break
- fi
- done
- test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
-done
-CXXLIBS="$cf_add_libs"
-
-cat >>confdefs.h <<\EOF
-#define HAVE_BUILTIN_H 1
-EOF
-
+ echo "$as_me:25157: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_lo=$ac_mid; break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cxx_library=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+cat "conftest.$ac_ext" >&5
+ac_hi=`expr "$ac_mid" - 1`; ac_mid=`expr 2 '*' "$ac_mid"`
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- LIBS="$cf_save"
- echo "$as_me:23209: result: $cf_cxx_library" >&5
-echo "${ECHO_T}$cf_cxx_library" >&6
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ done
fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' "$ac_hi" - "$ac_lo" ')' / 2 + "$ac_lo"`
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 25173 "configure"
+#include "confdefs.h"
- ;;
- (*)
- cf_cxx_library=no
- ;;
- esac
+#include <stdlib.h>
+#include <stdio.h>
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
-echo "$as_me:23225: checking how to run the C++ preprocessor" >&5
-echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
-if test -z "$CXXCPP"; then
- if test "${ac_cv_prog_CXXCPP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Double quotes because CXXCPP needs to be expanded
- for CXXCPP in "$CXX -E" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-#line 23242 "configure"
-#include "confdefs.h"
-#include <assert.h>
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:23247: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:23253: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
+#if defined(__cplusplus)
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-#line 23276 "configure"
-#include "confdefs.h"
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:23280: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:23286: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- break
-fi
+#else
- done
- ac_cv_prog_CXXCPP=$CXXCPP
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
-fi
- CXXCPP=$ac_cv_prog_CXXCPP
-else
- ac_cv_prog_CXXCPP=$CXXCPP
-fi
-echo "$as_me:23323: result: $CXXCPP" >&5
-echo "${ECHO_T}$CXXCPP" >&6
-ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-#line 23333 "configure"
-#include "confdefs.h"
-#include <assert.h>
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:23338: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:23344: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
+#endif
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-#line 23367 "configure"
-#include "confdefs.h"
-#include <ac_nonexistent.h>
+int
+main (void)
+{
+int _array_ [1 - 2 * !((sizeof (bool)) <= $ac_mid)]
+ ;
+ return 0;
+}
_ACEOF
-if { (eval echo "$as_me:23371: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25206: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:25209: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:25212: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:23377: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
+ echo "$as_me:25215: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_hi=$ac_mid
else
echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- # Passes both tests.
-ac_preproc_ok=:
-break
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`
fi
-rm -f conftest.err conftest.$ac_ext
-
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- :
+ac_cv_sizeof_bool=$ac_lo
else
- { { echo "$as_me:23405: error: C++ preprocessor \"$CXXCPP\" fails sanity check" >&5
-echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check" >&2;}
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:25228: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
{ (exit 1); exit 1; }; }
-fi
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
-
-for ac_header in typeinfo
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:23420: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 23426 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 25233 "configure"
#include "confdefs.h"
-#include <$ac_header>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int
+main (void)
+{
+FILE *f = fopen ("conftest.val", "w");
+if (!f)
+ $ac_main_return (1);
+fprintf (f, "%d", (sizeof (bool)));
+fclose (f);
+ ;
+ return 0;
+}
_ACEOF
-if { (eval echo "$as_me:23430: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:25270: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:23436: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- else
- ac_cpp_err=
- fi
+ echo "$as_me:25273: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:25275: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:25278: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_sizeof_bool=`cat conftest.val`
else
- ac_cpp_err=yes
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
fi
-if test -z "$ac_cpp_err"; then
- eval "$as_ac_Header=yes"
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+fi
+rm -f conftest.val
else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
+ ac_cv_sizeof_bool=0
fi
-rm -f conftest.err conftest.$ac_ext
fi
-echo "$as_me:23455: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+echo "$as_me:25294: result: $ac_cv_sizeof_bool" >&5
+echo "${ECHO_T}$ac_cv_sizeof_bool" >&6
+cat >>confdefs.h <<EOF
+#define SIZEOF_BOOL $ac_cv_sizeof_bool
EOF
-fi
-done
-
-for ac_header in iostream
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:23468: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+echo "$as_me:25300: checking for type of bool" >&5
+echo $ECHO_N "checking for type of bool... $ECHO_C" >&6
+if test "${cf_cv_type_of_bool+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 23474 "configure"
+
+ rm -f cf_test.out
+ if test "$cross_compiling" = yes; then
+
+ case x$ac_cv_sizeof_bool in
+ (x1) cf_cv_type_of_bool="unsigned char";;
+ (x2) cf_cv_type_of_bool="unsigned short";;
+ (x4) cf_cv_type_of_bool="unsigned int";;
+ (x8) cf_cv_type_of_bool="unsigned long";;
+ (*) cf_cv_type_of_bool=unknown;;
+ esac
+
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 25319 "configure"
#include "confdefs.h"
-#include <$ac_header>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int main(void)
+{
+ FILE *fp = fopen("cf_test.out", "w");
+ if (fp != 0) {
+ bool x = true;
+ if ((bool)(-x) >= 0)
+ fputs("unsigned ", fp);
+ if (sizeof(x) == sizeof(int)) fputs("int", fp);
+ else if (sizeof(x) == sizeof(char)) fputs("char", fp);
+ else if (sizeof(x) == sizeof(short))fputs("short",fp);
+ else if (sizeof(x) == sizeof(long)) fputs("long", fp);
+ fclose(fp);
+ }
+ ${cf_cv_main_return:-return}(0);
+}
+
_ACEOF
-if { (eval echo "$as_me:23478: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:25361: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:23484: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- else
- ac_cpp_err=
- fi
+ echo "$as_me:25364: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:25366: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:25369: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_type_of_bool=`cat cf_test.out`
+ if test -z "$cf_cv_type_of_bool"; then
+ cf_cv_type_of_bool=unknown
+ fi
else
- ac_cpp_err=yes
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_type_of_bool=unknown
fi
-if test -z "$ac_cpp_err"; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
-rm -f conftest.err conftest.$ac_ext
+ rm -f cf_test.out
+
fi
-echo "$as_me:23503: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
+echo "$as_me:25386: result: $cf_cv_type_of_bool" >&5
+echo "${ECHO_T}$cf_cv_type_of_bool" >&6
+if test "$cf_cv_type_of_bool" = unknown ; then
+ case .$NCURSES_BOOL in
+ (.auto|.) NCURSES_BOOL=unsigned;;
+ esac
+ { echo "$as_me:25393: WARNING: Assuming $NCURSES_BOOL for type of bool" >&5
+echo "$as_me: WARNING: Assuming $NCURSES_BOOL for type of bool" >&2;}
+ cf_cv_type_of_bool=$NCURSES_BOOL
fi
-done
-if test x"$ac_cv_header_iostream" = xyes ; then
- echo "$as_me:23514: checking if iostream uses std-namespace" >&5
-echo $ECHO_N "checking if iostream uses std-namespace... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-#line 23517 "configure"
+echo "$as_me:25398: checking for special defines needed for etip.h" >&5
+echo $ECHO_N "checking for special defines needed for etip.h... $ECHO_C" >&6
+cf_save_CXXFLAGS="$CXXFLAGS"
+cf_result="none"
+
+# etip.h includes ncurses.h which includes ncurses_dll.h
+# But ncurses_dll.h is generated - fix here.
+test -d include || mkdir include
+test -f include/ncurses_dll.h || sed -e 's/@NCURSES_WRAP_PREFIX@/'$NCURSES_WRAP_PREFIX'/g' "${srcdir}/include/ncurses_dll.h.in" >include/ncurses_dll.h
+
+for cf_math in "" MATH_H
+do
+for cf_excp in "" MATH_EXCEPTION
+do
+ CXXFLAGS="$cf_save_CXXFLAGS -I${srcdir}/c++ -I${srcdir}/menu -Iinclude -I${srcdir}/include"
+ test -n "$cf_math" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_math}"
+ test -n "$cf_excp" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_excp}"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 25416 "configure"
#include "confdefs.h"
-#include <iostream>
-using std::endl;
-using std::cerr;
+#include <etip.h.in>
+
int
main (void)
{
-cerr << "testing" << endl;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25430: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:25433: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:25436: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:25439: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+
+ test -n "$cf_math" && cat >>confdefs.h <<EOF
+#define ETIP_NEEDS_${cf_math} 1
+EOF
+
+ test -n "$cf_excp" && cat >>confdefs.h <<EOF
+#define ETIP_NEEDS_${cf_excp} 1
+EOF
+
+ cf_result="$cf_math $cf_excp"
+ break 2
+
+else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+done
+done
+echo "$as_me:25460: result: $cf_result" >&5
+echo "${ECHO_T}$cf_result" >&6
+CXXFLAGS="$cf_save_CXXFLAGS"
+
+if test -n "$CXX"; then
+echo "$as_me:25465: checking if $CXX accepts parameter initialization" >&5
+echo $ECHO_N "checking if $CXX accepts parameter initialization... $ECHO_C" >&6
+if test "${cf_cv_cpp_param_init+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_main_return="return"
+
+ if test "$cross_compiling" = yes; then
+ cf_cv_cpp_param_init=unknown
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 25482 "configure"
+#include "confdefs.h"
+
+class TEST {
+private:
+ int value;
+public:
+ TEST(int x = 1);
+ ~TEST();
+};
- ;
- return 0;
+TEST::TEST(int x = 1) // some compilers do not like second initializer
+{
+ value = x;
}
+int main(void) { }
+
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:23534: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:25501: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:23537: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:23540: \"$ac_try\"") >&5
+ echo "$as_me:25504: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:25506: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:23543: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_iostream_namespace=yes
+ echo "$as_me:25509: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_cpp_param_init=yes
else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_iostream_namespace=no
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_cpp_param_init=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- echo "$as_me:23552: result: $cf_iostream_namespace" >&5
-echo "${ECHO_T}$cf_iostream_namespace" >&6
- if test "$cf_iostream_namespace" = yes ; then
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_main_return="return"
+fi
+echo "$as_me:25528: result: $cf_cv_cpp_param_init" >&5
+echo "${ECHO_T}$cf_cv_cpp_param_init" >&6
+fi
+test "$cf_cv_cpp_param_init" = yes &&
cat >>confdefs.h <<\EOF
-#define IOSTREAM_NAMESPACE 1
+#define CPP_HAS_PARAM_INIT 1
EOF
- fi
-fi
-
-echo "$as_me:23563: checking if we should include stdbool.h" >&5
-echo $ECHO_N "checking if we should include stdbool.h... $ECHO_C" >&6
+if test -n "$CXX"; then
-if test "${cf_cv_header_stdbool_h+set}" = set; then
+echo "$as_me:25538: checking if $CXX accepts static_cast" >&5
+echo $ECHO_N "checking if $CXX accepts static_cast... $ECHO_C" >&6
+if test "${cf_cv_cpp_static_cast+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 23571 "configure"
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_main_return="return"
+
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 25552 "configure"
#include "confdefs.h"
-int
-main (void)
+class NCursesPanel
{
-bool foo = false
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:23583: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:23586: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:23589: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:23592: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_header_stdbool_h=0
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 23599 "configure"
-#include "confdefs.h"
+public:
+ NCursesPanel(int nlines,
+ int ncols,
+ int begin_y = 0,
+ int begin_x = 0)
+ {
+ }
+ NCursesPanel();
+ ~NCursesPanel();
+};
-#ifndef __BEOS__
-#include <stdbool.h>
-#endif
+template<class T> class NCursesUserPanel : public NCursesPanel
+{
+public:
+ NCursesUserPanel (int nlines,
+ int ncols,
+ int begin_y = 0,
+ int begin_x = 0,
+ const T* p_UserData = static_cast<T*>(0))
+ : NCursesPanel (nlines, ncols, begin_y, begin_x)
+ {
+ };
+ NCursesUserPanel(const T* p_UserData = static_cast<T*>(0)) : NCursesPanel()
+ {
+ };
+
+ virtual ~NCursesUserPanel() {};
+};
int
main (void)
{
-bool foo = false
+
+ const char* p_UserData = static_cast<char*>(0)
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:23615: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25596: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:23618: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:23621: \"$ac_try\"") >&5
+ echo "$as_me:25599: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:25602: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:23624: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_header_stdbool_h=1
+ echo "$as_me:25605: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ cf_cv_cpp_static_cast=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_header_stdbool_h=0
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+cat "conftest.$ac_ext" >&5
+cf_cv_cpp_static_cast=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_main_return="return"
+
fi
+echo "$as_me:25623: result: $cf_cv_cpp_static_cast" >&5
+echo "${ECHO_T}$cf_cv_cpp_static_cast" >&6
-if test "$cf_cv_header_stdbool_h" = 1
-then echo "$as_me:23638: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else echo "$as_me:23640: result: no" >&5
-echo "${ECHO_T}no" >&6
fi
-echo "$as_me:23644: checking for builtin bool type" >&5
-echo $ECHO_N "checking for builtin bool type... $ECHO_C" >&6
+test "$cf_cv_cpp_static_cast" = yes &&
+cat >>confdefs.h <<\EOF
+#define CPP_HAS_STATIC_CAST 1
+EOF
+
+ CXX_AR='$(AR)'
+ CXX_ARFLAGS='$(ARFLAGS)'
+ case "$cf_cv_system_name" in
+ (irix*)
+ if test "$GXX" != yes ; then
+ CXX_AR='$(CXX)'
+ CXX_ARFLAGS='-ar -o'
+ fi
+ ;;
+ (sco3.2v5*)
+ CXXLDFLAGS="-u main"
+ ;;
+ (solaris2*)
+ if test "$GXX" != yes ; then
+ CXX_AR='$(CXX)'
+ CXX_ARFLAGS='-xar -o'
+ fi
+ ;;
+ esac
-if test "${cf_cv_builtin_bool+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
else
+ cf_cxx_library=no
+ cf_cv_builtin_bool=1
+
+ # Just because we are not configuring against C++ right now does not
+ # mean that a user will not want to use C++. Some distributors disable
+ # the C++ portion of this configuration as a shortcut (or just to avoid
+ # compiling the demo in the c++ directory). So we need a reasonable
+ # default for the 'bool' type.
+ #
+ # Caveat: since the storage of the bool type is not standardized, it
+ # may change.
+
+ if test "$NCURSES_BOOL" != auto ; then
+ cf_cv_type_of_bool=$NCURSES_BOOL
+ cf_cv_header_stdbool_h=0
+ else
+ if test "$cf_cv_header_stdbool_h" = 1 ; then
- cat >conftest.$ac_ext <<_ACEOF
-#line 23652 "configure"
+echo "$as_me:25672: checking for bool" >&5
+echo $ECHO_N "checking for bool... $ECHO_C" >&6
+if test "${ac_cv_type_bool+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 25678 "configure"
#include "confdefs.h"
+#include <stdlib.h>
#include <stdio.h>
-#include <sys/types.h>
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
int
main (void)
{
-bool x = false
+if ((bool *) 0)
+ return 0;
+if (sizeof (bool))
+ return 0;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:23667: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25714: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:23670: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:23673: \"$ac_try\"") >&5
+ echo "$as_me:25717: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:25720: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:23676: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_builtin_bool=1
+ echo "$as_me:25723: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_type_bool=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_builtin_bool=0
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
+cat "conftest.$ac_ext" >&5
+ac_cv_type_bool=no
fi
-
-if test "$cf_cv_builtin_bool" = 1
-then echo "$as_me:23689: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else echo "$as_me:23691: result: no" >&5
-echo "${ECHO_T}no" >&6
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
+echo "$as_me:25733: result: $ac_cv_type_bool" >&5
+echo "${ECHO_T}$ac_cv_type_bool" >&6
-echo "$as_me:23695: checking for size of bool" >&5
-echo $ECHO_N "checking for size of bool... $ECHO_C" >&6
-if test "${cf_cv_type_of_bool+set}" = set; then
+echo "$as_me:25736: checking size of bool" >&5
+echo $ECHO_N "checking size of bool... $ECHO_C" >&6
+if test "${ac_cv_sizeof_bool+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-
- rm -f cf_test.out
- if test "$cross_compiling" = yes; then
- cf_cv_type_of_bool=unknown
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 23706 "configure"
+ if test "$ac_cv_type_bool" = yes; then
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 25745 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdio.h>
#if defined(__cplusplus)
#ifdef HAVE_GXX_BUILTIN_H
#include <g++/builtin.h>
#elif HAVE_GPP_BUILTIN_H
#include <gpp/builtin.h>
#elif HAVE_BUILTIN_H
#include <builtin.h>
#endif
#else
#if $cf_cv_header_stdbool_h
#include <stdbool.h>
#endif
#endif
-int main(void)
+int
+main (void)
{
- FILE *fp = fopen("cf_test.out", "w");
- if (fp != 0) {
- bool x = true;
- if ((bool)(-x) >= 0)
- fputs("unsigned ", fp);
- if (sizeof(x) == sizeof(int)) fputs("int", fp);
- else if (sizeof(x) == sizeof(char)) fputs("char", fp);
- else if (sizeof(x) == sizeof(short))fputs("short",fp);
- else if (sizeof(x) == sizeof(long)) fputs("long", fp);
- fclose(fp);
- }
- ${cf_cv_main_return:-return}(0);
+int _array_ [1 - 2 * !((sizeof (bool)) >= 0)]
+ ;
+ return 0;
}
-
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:23748: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25778: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:23751: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:23753: \"$ac_try\"") >&5
+ echo "$as_me:25781: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:25784: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:23756: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_type_of_bool=`cat cf_test.out`
- if test -z "$cf_cv_type_of_bool"; then
- cf_cv_type_of_bool=unknown
- fi
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_type_of_bool=unknown
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
+ echo "$as_me:25787: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 25792 "configure"
+#include "confdefs.h"
-fi
+#include <stdlib.h>
+#include <stdio.h>
- rm -f cf_test.out
-echo "$as_me:23774: result: $cf_cv_type_of_bool" >&5
-echo "${ECHO_T}$cf_cv_type_of_bool" >&6
-if test "$cf_cv_type_of_bool" = unknown ; then
- case .$NCURSES_BOOL in
- (.auto|.) NCURSES_BOOL=unsigned;;
- esac
- { echo "$as_me:23780: WARNING: Assuming $NCURSES_BOOL for type of bool" >&5
-echo "$as_me: WARNING: Assuming $NCURSES_BOOL for type of bool" >&2;}
- cf_cv_type_of_bool=$NCURSES_BOOL
-fi
+#if defined(__cplusplus)
-echo "$as_me:23785: checking for special defines needed for etip.h" >&5
-echo $ECHO_N "checking for special defines needed for etip.h... $ECHO_C" >&6
-cf_save_CXXFLAGS="$CXXFLAGS"
-cf_result="none"
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
-# etip.h includes ncurses.h which includes ncurses_dll.h
-# But ncurses_dll.h is generated - fix here.
-test -d include || mkdir include
-test -f include/ncurses_dll.h || sed -e 's/@NCURSES_WRAP_PREFIX@/'$NCURSES_WRAP_PREFIX'/g' ${srcdir}/include/ncurses_dll.h.in >include/ncurses_dll.h
+#else
-for cf_math in "" MATH_H
-do
-for cf_excp in "" MATH_EXCEPTION
-do
- CXXFLAGS="$cf_save_CXXFLAGS -I${srcdir}/c++ -I${srcdir}/menu -Iinclude -I${srcdir}/include"
- test -n "$cf_math" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_math}"
- test -n "$cf_excp" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_excp}"
-cat >conftest.$ac_ext <<_ACEOF
-#line 23803 "configure"
-#include "confdefs.h"
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
-#include <etip.h.in>
+#endif
int
main (void)
{
-
+int _array_ [1 - 2 * !((sizeof (bool)) <= $ac_mid)]
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:23817: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25825: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:23820: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:23823: \"$ac_try\"") >&5
+ echo "$as_me:25828: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:25831: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:23826: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- test -n "$cf_math" && cat >>confdefs.h <<EOF
-#define ETIP_NEEDS_${cf_math} 1
-EOF
-
- test -n "$cf_excp" && cat >>confdefs.h <<EOF
-#define ETIP_NEEDS_${cf_excp} 1
-EOF
-
- cf_result="$cf_math $cf_excp"
- break 2
-
+ echo "$as_me:25834: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_hi=$ac_mid; break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`; ac_mid=`expr 2 '*' "$ac_mid" + 1`
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-done
-done
-echo "$as_me:23847: result: $cf_result" >&5
-echo "${ECHO_T}$cf_result" >&6
-CXXFLAGS="$cf_save_CXXFLAGS"
-
-if test -n "$CXX"; then
-echo "$as_me:23852: checking if $CXX accepts parameter initialization" >&5
-echo $ECHO_N "checking if $CXX accepts parameter initialization... $ECHO_C" >&6
-if test "${cf_cv_cpp_param_init+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ done
else
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 25850 "configure"
+#include "confdefs.h"
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+#include <stdlib.h>
+#include <stdio.h>
- if test "$cross_compiling" = yes; then
- cf_cv_cpp_param_init=unknown
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 23869 "configure"
-#include "confdefs.h"
+#if defined(__cplusplus)
-class TEST {
-private:
- int value;
-public:
- TEST(int x = 1);
- ~TEST();
-};
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
-TEST::TEST(int x = 1) // some compilers do not like second initializer
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int
+main (void)
{
- value = x;
+int _array_ [1 - 2 * !((sizeof (bool)) >= $ac_mid)]
+ ;
+ return 0;
}
-int main(void) { }
-
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:23888: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25883: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:23891: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:23893: \"$ac_try\"") >&5
+ echo "$as_me:25886: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:25889: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:23896: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_cpp_param_init=yes
+ echo "$as_me:25892: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_lo=$ac_mid; break
else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_cpp_param_init=no
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
-
+ echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_hi=`expr "$ac_mid" - 1`; ac_mid=`expr 2 '*' "$ac_mid"`
fi
-echo "$as_me:23915: result: $cf_cv_cpp_param_init" >&5
-echo "${ECHO_T}$cf_cv_cpp_param_init" >&6
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ done
fi
-test "$cf_cv_cpp_param_init" = yes &&
-cat >>confdefs.h <<\EOF
-#define CPP_HAS_PARAM_INIT 1
-EOF
-
-if test -n "$CXX"; then
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' "$ac_hi" - "$ac_lo" ')' / 2 + "$ac_lo"`
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 25908 "configure"
+#include "confdefs.h"
-echo "$as_me:23925: checking if $CXX accepts static_cast" >&5
-echo $ECHO_N "checking if $CXX accepts static_cast... $ECHO_C" >&6
-if test "${cf_cv_cpp_static_cast+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
+#include <stdlib.h>
+#include <stdio.h>
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+#if defined(__cplusplus)
- cat >conftest.$ac_ext <<_ACEOF
-#line 23939 "configure"
-#include "confdefs.h"
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
-class NCursesPanel
-{
-public:
- NCursesPanel(int nlines,
- int ncols,
- int begin_y = 0,
- int begin_x = 0)
- {
- }
- NCursesPanel();
- ~NCursesPanel();
-};
+#else
-template<class T> class NCursesUserPanel : public NCursesPanel
-{
-public:
- NCursesUserPanel (int nlines,
- int ncols,
- int begin_y = 0,
- int begin_x = 0,
- const T* p_UserData = static_cast<T*>(0))
- : NCursesPanel (nlines, ncols, begin_y, begin_x)
- {
- };
- NCursesUserPanel(const T* p_UserData = static_cast<T*>(0)) : NCursesPanel()
- {
- };
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
- virtual ~NCursesUserPanel() {};
-};
+#endif
int
main (void)
{
-
- const char* p_UserData = static_cast<char*>(0)
+int _array_ [1 - 2 * !((sizeof (bool)) <= $ac_mid)]
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:23983: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25941: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:23986: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:23989: \"$ac_try\"") >&5
+ echo "$as_me:25944: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:25947: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:23992: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_cpp_static_cast=yes
+ echo "$as_me:25950: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_hi=$ac_mid
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_cpp_static_cast=no
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+done
+ac_cv_sizeof_bool=$ac_lo
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:25963: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 25968 "configure"
+#include "confdefs.h"
-fi
-echo "$as_me:24010: result: $cf_cv_cpp_static_cast" >&5
-echo "${ECHO_T}$cf_cv_cpp_static_cast" >&6
+#include <stdlib.h>
+#include <stdio.h>
-fi
+#if defined(__cplusplus)
-test "$cf_cv_cpp_static_cast" = yes &&
-cat >>confdefs.h <<\EOF
-#define CPP_HAS_STATIC_CAST 1
-EOF
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
- CXX_AR='$(AR)'
- CXX_ARFLAGS='$(ARFLAGS)'
- case $cf_cv_system_name in
- (irix*)
- if test "$GXX" != yes ; then
- CXX_AR='$(CXX)'
- CXX_ARFLAGS='-ar -o'
- fi
- ;;
- (sco3.2v5*)
- CXXLDFLAGS="-u main"
- ;;
- (solaris2*)
- if test "$GXX" != yes ; then
- CXX_AR='$(CXX)'
- CXX_ARFLAGS='-xar -o'
- fi
- ;;
- esac
+#else
-else
- cf_cxx_library=no
- cf_cv_builtin_bool=1
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
- # Just because we are not configuring against C++ right now does not
- # mean that a user will not want to use C++. Some distributors disable
- # the C++ portion of this configuration as a shortcut (or just to avoid
- # compiling the demo in the c++ directory). So we need a reasonable
- # default for the 'bool' type.
- #
- # Caveat: since the storage of the bool type is not standardized, it
- # may change.
+#endif
- if test "$NCURSES_BOOL" != auto ; then
- cf_cv_type_of_bool=$NCURSES_BOOL
- cf_cv_header_stdbool_h=0
- else
- if test "$cf_cv_header_stdbool_h" = 1 ; then
+int
+main (void)
+{
+FILE *f = fopen ("conftest.val", "w");
+if (!f)
+ $ac_main_return (1);
+fprintf (f, "%d", (sizeof (bool)));
+fclose (f);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:26005: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:26008: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:26010: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:26013: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
+ ac_cv_sizeof_bool=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_bool=0
+fi
+fi
+echo "$as_me:26029: result: $ac_cv_sizeof_bool" >&5
+echo "${ECHO_T}$ac_cv_sizeof_bool" >&6
+cat >>confdefs.h <<EOF
+#define SIZEOF_BOOL $ac_cv_sizeof_bool
+EOF
-echo "$as_me:24059: checking for size of bool" >&5
-echo $ECHO_N "checking for size of bool... $ECHO_C" >&6
+echo "$as_me:26035: checking for type of bool" >&5
+echo $ECHO_N "checking for type of bool... $ECHO_C" >&6
if test "${cf_cv_type_of_bool+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
rm -f cf_test.out
if test "$cross_compiling" = yes; then
- cf_cv_type_of_bool=unknown
+
+ case x$ac_cv_sizeof_bool in
+ (x1) cf_cv_type_of_bool="unsigned char";;
+ (x2) cf_cv_type_of_bool="unsigned short";;
+ (x4) cf_cv_type_of_bool="unsigned int";;
+ (x8) cf_cv_type_of_bool="unsigned long";;
+ (*) cf_cv_type_of_bool=unknown;;
+ esac
+
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 24070 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 26054 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdio.h>
#if defined(__cplusplus)
#ifdef HAVE_GXX_BUILTIN_H
#include <g++/builtin.h>
#elif HAVE_GPP_BUILTIN_H
#include <gpp/builtin.h>
#elif HAVE_BUILTIN_H
#include <builtin.h>
#endif
#else
#if $cf_cv_header_stdbool_h
#include <stdbool.h>
#endif
#endif
int main(void)
{
FILE *fp = fopen("cf_test.out", "w");
if (fp != 0) {
bool x = true;
if ((bool)(-x) >= 0)
fputs("unsigned ", fp);
if (sizeof(x) == sizeof(int)) fputs("int", fp);
else if (sizeof(x) == sizeof(char)) fputs("char", fp);
else if (sizeof(x) == sizeof(short))fputs("short",fp);
else if (sizeof(x) == sizeof(long)) fputs("long", fp);
fclose(fp);
}
${cf_cv_main_return:-return}(0);
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:24112: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:26096: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:24115: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:24117: \"$ac_try\"") >&5
+ echo "$as_me:26099: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:26101: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:24120: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:26104: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
cf_cv_type_of_bool=`cat cf_test.out`
if test -z "$cf_cv_type_of_bool"; then
cf_cv_type_of_bool=unknown
fi
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_cv_type_of_bool=unknown
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
-
-fi
-
rm -f cf_test.out
-echo "$as_me:24138: result: $cf_cv_type_of_bool" >&5
+
+fi
+echo "$as_me:26121: result: $cf_cv_type_of_bool" >&5
echo "${ECHO_T}$cf_cv_type_of_bool" >&6
+
if test "$cf_cv_type_of_bool" = unknown ; then
case .$NCURSES_BOOL in
(.auto|.) NCURSES_BOOL=unsigned;;
esac
- { echo "$as_me:24144: WARNING: Assuming $NCURSES_BOOL for type of bool" >&5
+ { echo "$as_me:26128: WARNING: Assuming $NCURSES_BOOL for type of bool" >&5
echo "$as_me: WARNING: Assuming $NCURSES_BOOL for type of bool" >&2;}
cf_cv_type_of_bool=$NCURSES_BOOL
fi
else
- echo "$as_me:24150: checking for fallback type of bool" >&5
+ echo "$as_me:26134: checking for fallback type of bool" >&5
echo $ECHO_N "checking for fallback type of bool... $ECHO_C" >&6
case "$host_cpu" in
(i?86) cf_cv_type_of_bool=char ;;
(*) cf_cv_type_of_bool=int ;;
esac
- echo "$as_me:24156: result: $cf_cv_type_of_bool" >&5
+ echo "$as_me:26140: result: $cf_cv_type_of_bool" >&5
echo "${ECHO_T}$cf_cv_type_of_bool" >&6
fi
fi
fi
# If the C compiler did not declare bool, and we did not determine that the C++
# compiler does not declare bool, turn on an ifdef in curses.h that makes the
# ncurses library use the same type as C++ bool. Note that this allows one to
# specify the type of bool in a configure-script option and postpone
# integration with the C++ compiler provided that the types are compatible.
USE_CXX_BOOL=1
-if test $cf_cv_cc_bool_type = 1
+if test "$cf_cv_cc_bool_type" = 1
then
# oops: C has a bool. Unlikely, but C++ could differ.
USE_CXX_BOOL=0
-elif test $cf_cv_builtin_bool = 0
+elif test "$cf_cv_builtin_bool" = 0
then
# C++ has no bool
USE_CXX_BOOL=0
else
# this is the normal case
USE_CXX_BOOL='defined(__cplusplus)'
fi
if test -f "${srcdir}/Ada95/Makefile.in" ; then
if test "$cf_with_ada" != "no" ; then
if test "$with_libtool" != "no"; then
- { echo "$as_me:24185: WARNING: libtool does not support Ada - disabling feature" >&5
+ { echo "$as_me:26169: WARNING: libtool does not support Ada - disabling feature" >&5
echo "$as_me: WARNING: libtool does not support Ada - disabling feature" >&2;}
cf_with_ada=no
fi
fi
if test "$cf_with_ada" != "no" ; then
for cf_prog_gnat in gnat gnatmake gprconfig gprbuild
do
cf_upper_prog_gnat=`echo "${cf_prog_gnat}" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
unset ac_cv_path_cf_TEMP_gnat
unset cf_TEMP_gnat
# Extract the first word of "$cf_prog_gnat", so it can be a program name with args.
set dummy $cf_prog_gnat; ac_word=$2
-echo "$as_me:24202: checking for $ac_word" >&5
+echo "$as_me:26186: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_path_cf_TEMP_gnat+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
case $cf_TEMP_gnat in
[\\/]* | ?:[\\/]*)
ac_cv_path_cf_TEMP_gnat="$cf_TEMP_gnat" # Let the user override the test with a path.
;;
*)
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
if $as_executable_p "$ac_dir/$ac_word"; then
ac_cv_path_cf_TEMP_gnat="$ac_dir/$ac_word"
- echo "$as_me:24219: found $ac_dir/$ac_word" >&5
+ echo "$as_me:26203: found $ac_dir/$ac_word" >&5
break
fi
done
test -z "$ac_cv_path_cf_TEMP_gnat" && ac_cv_path_cf_TEMP_gnat="no"
;;
esac
fi
cf_TEMP_gnat=$ac_cv_path_cf_TEMP_gnat
if test -n "$cf_TEMP_gnat"; then
- echo "$as_me:24231: result: $cf_TEMP_gnat" >&5
+ echo "$as_me:26215: result: $cf_TEMP_gnat" >&5
echo "${ECHO_T}$cf_TEMP_gnat" >&6
else
- echo "$as_me:24234: result: no" >&5
+ echo "$as_me:26218: result: no" >&5
echo "${ECHO_T}no" >&6
fi
- eval cf_cv_PATH_$cf_upper_prog_gnat=$ac_cv_path_cf_TEMP_gnat
+ eval "cf_cv_PATH_$cf_upper_prog_gnat=$ac_cv_path_cf_TEMP_gnat"
if test "x$cf_TEMP_gnat" != xno; then
unset cf_cv_gnat_version
unset cf_TEMP_gnat
-echo "$as_me:24244: checking for $cf_prog_gnat version" >&5
+echo "$as_me:26228: checking for $cf_prog_gnat version" >&5
echo $ECHO_N "checking for $cf_prog_gnat version... $ECHO_C" >&6
if test "${cf_cv_gnat_version+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cf_cv_gnat_version=`$cf_prog_gnat --version 2>&1 | \
grep '[0-9].[0-9][0-9]*' |\
sed -e '2,$d' -e 's/[^0-9 \.]//g' -e 's/^[ ]*//' -e 's/ .*//'`
fi
-echo "$as_me:24255: result: $cf_cv_gnat_version" >&5
+echo "$as_me:26239: result: $cf_cv_gnat_version" >&5
echo "${ECHO_T}$cf_cv_gnat_version" >&6
test -z "$cf_cv_gnat_version" && cf_cv_gnat_version=no
eval cf_TEMP_gnat=$cf_cv_gnat_version; unset cf_cv_gnat_version
fi
- eval cf_cv_VERSION_$cf_upper_prog_gnat=$cf_TEMP_gnat
+ eval "cf_cv_VERSION_$cf_upper_prog_gnat=$cf_TEMP_gnat"
unset cf_TEMP_gnat
unset cf_cv_gnat_version
unset ac_cv_path_cf_TEMP_gnat
done
if test "x$cf_cv_VERSION_GNATMAKE" = "xno"; then
cf_ada_make=
cf_cv_prog_gnat_correct=no
else
cf_ada_make=gnatmake
if test "x$cf_cv_VERSION_GPRCONFIG" = "xno"; then
# gprconfig is newer than gnatmake; we can continue...
cf_ada_config="##"
else
- rm -rf conftest* *~conftest*
+ rm -rf ./conftest* ./*~conftest*
if mkdir conftest.src
then
cf_ada_config=""
cd conftest.src
for cf_gprconfig in Ada C
do
- echo "$as_me:24284: checking for gprconfig name for $cf_gprconfig" >&5
+ echo "$as_me:26268: checking for gprconfig name for $cf_gprconfig" >&5
echo $ECHO_N "checking for gprconfig name for $cf_gprconfig... $ECHO_C" >&6
- if test $cf_gprconfig = C
+ if test "$cf_gprconfig" = C
then
for cf_gprconfig_param in \
- $cf_gprconfig,,,,GNATGCC \
- $cf_gprconfig,,,,GCC \
- $cf_gprconfig
+ "$cf_gprconfig,,,,GNATGCC" \
+ "$cf_gprconfig,,,,GCC" \
+ "$cf_gprconfig"
do
cf_gprconfig_value=`echo s| gprconfig --config=$cf_gprconfig_param 2>&5 | ${AWK:-awk} '/^\*/{print $3;}' | head -n 1`
test -n "$cf_gprconfig_value" && break
done
else
cf_gprconfig_param=$cf_gprconfig
cf_gprconfig_value=`echo s| gprconfig --config=$cf_gprconfig_param 2>&5 | ${AWK:-awk} '/^\*/{print $3;}' | head -n 1`
fi
if test -n "$cf_gprconfig_value"
then
- eval cf_ada_config_$cf_gprconfig=$cf_gprconfig_value
- echo "$as_me:24303: result: $cf_gprconfig_value" >&5
+ eval "cf_ada_config_$cf_gprconfig=$cf_gprconfig_value"
+ echo "$as_me:26287: result: $cf_gprconfig_value" >&5
echo "${ECHO_T}$cf_gprconfig_value" >&6
else
- echo "$as_me:24306: result: missing" >&5
+ echo "$as_me:26290: result: missing" >&5
echo "${ECHO_T}missing" >&6
cf_ada_config="#"
break
fi
done
cd ..
- rm -rf conftest* *~conftest*
+ rm -rf ./conftest* ./*~conftest*
fi
fi
if test "x$cf_ada_config" != "x#"
then
-echo "$as_me:24319: checking for gnat version" >&5
+echo "$as_me:26303: checking for gnat version" >&5
echo $ECHO_N "checking for gnat version... $ECHO_C" >&6
if test "${cf_cv_gnat_version+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cf_cv_gnat_version=`${cf_ada_make:-gnatmake} --version 2>&1 | \
grep '[0-9].[0-9][0-9]*' |\
sed -e '2,$d' -e 's/[^0-9 \.]//g' -e 's/^[ ]*//' -e 's/ .*//'`
fi
-echo "$as_me:24330: result: $cf_cv_gnat_version" >&5
+echo "$as_me:26314: result: $cf_cv_gnat_version" >&5
echo "${ECHO_T}$cf_cv_gnat_version" >&6
test -z "$cf_cv_gnat_version" && cf_cv_gnat_version=no
-case $cf_cv_gnat_version in
-(3.1[1-9]*|3.[2-9]*|[4-9].*|20[0-9][0-9])
+case "$cf_cv_gnat_version" in
+(3.1[1-9]*|3.[2-9]*|[4-9].*|[1-9][0-9].[0-9]*|20[0-9][0-9])
cf_cv_prog_gnat_correct=yes
;;
(*)
- { echo "$as_me:24339: WARNING: Unsupported GNAT version $cf_cv_gnat_version. We require 3.11 or better. Disabling Ada95 binding." >&5
+ { echo "$as_me:26323: WARNING: Unsupported GNAT version $cf_cv_gnat_version. We require 3.11 or better. Disabling Ada95 binding." >&5
echo "$as_me: WARNING: Unsupported GNAT version $cf_cv_gnat_version. We require 3.11 or better. Disabling Ada95 binding." >&2;}
cf_cv_prog_gnat_correct=no
;;
esac
# Extract the first word of "m4", so it can be a program name with args.
set dummy m4; ac_word=$2
-echo "$as_me:24347: checking for $ac_word" >&5
+echo "$as_me:26331: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_M4_exists+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$M4_exists"; then
ac_cv_prog_M4_exists="$M4_exists" # Let the user override the test.
else
ac_save_IFS=$IFS; IFS=$ac_path_separator
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
IFS=$ac_save_IFS
test -z "$ac_dir" && ac_dir=.
$as_executable_p "$ac_dir/$ac_word" || continue
ac_cv_prog_M4_exists="yes"
-echo "$as_me:24362: found $ac_dir/$ac_word" >&5
+echo "$as_me:26346: found $ac_dir/$ac_word" >&5
break
done
test -z "$ac_cv_prog_M4_exists" && ac_cv_prog_M4_exists="no"
fi
fi
M4_exists=$ac_cv_prog_M4_exists
if test -n "$M4_exists"; then
- echo "$as_me:24371: result: $M4_exists" >&5
+ echo "$as_me:26355: result: $M4_exists" >&5
echo "${ECHO_T}$M4_exists" >&6
else
- echo "$as_me:24374: result: no" >&5
+ echo "$as_me:26358: result: no" >&5
echo "${ECHO_T}no" >&6
fi
if test "$ac_cv_prog_M4_exists" = no; then
cf_cv_prog_gnat_correct=no
- { echo "$as_me:24380: WARNING: Ada95 binding required program m4 not found. Ada95 binding disabled" >&5
+ { echo "$as_me:26364: WARNING: Ada95 binding required program m4 not found. Ada95 binding disabled" >&5
echo "$as_me: WARNING: Ada95 binding required program m4 not found. Ada95 binding disabled" >&2;}
fi
if test "$cf_cv_prog_gnat_correct" = yes; then
- echo "$as_me:24384: checking if GNAT works" >&5
+ echo "$as_me:26368: checking if GNAT works" >&5
echo $ECHO_N "checking if GNAT works... $ECHO_C" >&6
-rm -rf conftest* *~conftest*
+rm -rf ./conftest* ./*~conftest*
cat >>conftest.ads <<CF_EOF
procedure conftest;
CF_EOF
cat >>conftest.adb <<CF_EOF
with Text_IO;
with GNAT.OS_Lib;
procedure conftest is
begin
Text_IO.Put ("Hello World");
Text_IO.New_Line;
GNAT.OS_Lib.OS_Exit (0);
end conftest;
CF_EOF
-if ( $cf_ada_make $ADAFLAGS conftest 1>&5 2>&1 ) ; then
+if ( "$cf_ada_make" $ADAFLAGS conftest 1>&5 2>&1 ) ; then
if ( ./conftest 1>&5 2>&1 ) ; then
cf_cv_prog_gnat_correct=yes
else
cf_cv_prog_gnat_correct=no
fi
else
cf_cv_prog_gnat_correct=no
fi
-rm -rf conftest* *~conftest*
+rm -rf ./conftest* ./*~conftest*
- echo "$as_me:24412: result: $cf_cv_prog_gnat_correct" >&5
+ echo "$as_me:26396: result: $cf_cv_prog_gnat_correct" >&5
echo "${ECHO_T}$cf_cv_prog_gnat_correct" >&6
fi
else
cf_cv_prog_gnat_correct=no
fi
fi
if test "x$cf_cv_prog_gnat_correct" = xyes; then
ADAFLAGS="$ADAFLAGS -gnatpn"
- echo "$as_me:24424: checking optimization options for ADAFLAGS" >&5
+ echo "$as_me:26408: checking optimization options for ADAFLAGS" >&5
echo $ECHO_N "checking optimization options for ADAFLAGS... $ECHO_C" >&6
case "$CFLAGS" in
(*-g*)
ADAFLAGS="$ADAFLAGS -g"
;;
esac
case "$CFLAGS" in
(*-O*)
cf_O_flag=`echo "$CFLAGS" |sed -e 's/^.*-O/-O/' -e 's/[ ].*//'`
ADAFLAGS="$ADAFLAGS $cf_O_flag"
;;
esac
- echo "$as_me:24441: result: $ADAFLAGS" >&5
+ echo "$as_me:26425: result: $ADAFLAGS" >&5
echo "${ECHO_T}$ADAFLAGS" >&6
-echo "$as_me:24444: checking if GNATPREP supports -T option" >&5
+echo "$as_me:26428: checking if GNATPREP supports -T option" >&5
echo $ECHO_N "checking if GNATPREP supports -T option... $ECHO_C" >&6
if test "${cf_cv_gnatprep_opt_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cf_cv_gnatprep_opt_t=no
gnatprep -T 2>/dev/null >/dev/null && cf_cv_gnatprep_opt_t=yes
fi
-echo "$as_me:24454: result: $cf_cv_gnatprep_opt_t" >&5
+echo "$as_me:26438: result: $cf_cv_gnatprep_opt_t" >&5
echo "${ECHO_T}$cf_cv_gnatprep_opt_t" >&6
test "$cf_cv_gnatprep_opt_t" = yes && GNATPREP_OPTS="-T $GNATPREP_OPTS"
-echo "$as_me:24458: checking if GNAT supports generics" >&5
+echo "$as_me:26442: checking if GNAT supports generics" >&5
echo $ECHO_N "checking if GNAT supports generics... $ECHO_C" >&6
-case $cf_cv_gnat_version in
-(3.[1-9]*|[4-9].*)
+case "$cf_cv_gnat_version" in
+(3.1[1-9]*|3.[2-9]*|[4-9].*|[1-9][0-9].[0-9]*|20[0-9][0-9])
cf_gnat_generics=yes
;;
(*)
cf_gnat_generics=no
;;
esac
-echo "$as_me:24468: result: $cf_gnat_generics" >&5
+echo "$as_me:26452: result: $cf_gnat_generics" >&5
echo "${ECHO_T}$cf_gnat_generics" >&6
if test "$cf_gnat_generics" = yes
then
cf_compile_generics=generics
cf_generic_objects="\${GENOBJS}"
else
cf_compile_generics=
cf_generic_objects=
fi
-echo "$as_me:24480: checking if GNAT supports SIGINT" >&5
+echo "$as_me:26464: checking if GNAT supports SIGINT" >&5
echo $ECHO_N "checking if GNAT supports SIGINT... $ECHO_C" >&6
if test "${cf_cv_gnat_sigint+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-rm -rf conftest* *~conftest*
+rm -rf ./conftest* ./*~conftest*
cat >>conftest.ads <<CF_EOF
with Ada.Interrupts.Names;
package ConfTest is
pragma Warnings (Off); -- the next pragma exists since 3.11p
pragma Unreserve_All_Interrupts;
pragma Warnings (On);
protected Process is
procedure Stop;
function Continue return Boolean;
pragma Attach_Handler (Stop, Ada.Interrupts.Names.SIGINT);
private
Done : Boolean := False;
end Process;
end ConfTest;
CF_EOF
cat >>conftest.adb <<CF_EOF
package body ConfTest is
protected body Process is
procedure Stop is
begin
Done := True;
end Stop;
function Continue return Boolean is
begin
return not Done;
end Continue;
end Process;
end ConfTest;
CF_EOF
-if ( $cf_ada_make $ADAFLAGS conftest 1>&5 2>&1 ) ; then
+if ( "$cf_ada_make" $ADAFLAGS conftest 1>&5 2>&1 ) ; then
cf_cv_gnat_sigint=yes
else
cf_cv_gnat_sigint=no
fi
-rm -rf conftest* *~conftest*
+rm -rf ./conftest* ./*~conftest*
fi
-echo "$as_me:24528: result: $cf_cv_gnat_sigint" >&5
+echo "$as_me:26512: result: $cf_cv_gnat_sigint" >&5
echo "${ECHO_T}$cf_cv_gnat_sigint" >&6
-if test $cf_cv_gnat_sigint = yes ; then
+if test "$cf_cv_gnat_sigint" = yes ; then
USE_GNAT_SIGINT=""
else
USE_GNAT_SIGINT="#"
fi
cf_gnat_libraries=no
cf_gnat_projects=no
if test "$enable_gnat_projects" != no ; then
-echo "$as_me:24541: checking if GNAT supports project files" >&5
+echo "$as_me:26525: checking if GNAT supports project files" >&5
echo $ECHO_N "checking if GNAT supports project files... $ECHO_C" >&6
-case $cf_cv_gnat_version in
+case "$cf_cv_gnat_version" in
(3.[0-9]*)
;;
(*)
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(cygwin*|msys*)
;;
(*)
- rm -rf conftest* *~conftest*
+ rm -rf ./conftest* ./*~conftest*
if mkdir conftest.src conftest.bin conftest.lib
then
cd conftest.src
- rm -rf conftest* *~conftest*
+ rm -rf ./conftest* ./*~conftest*
cat >>library.gpr <<CF_EOF
project Library is
Kind := External ("LIB_KIND");
for Library_Name use "ConfTest";
for Object_Dir use ".";
for Library_ALI_Dir use External("LIBRARY_DIR");
for Library_Version use External ("SONAME");
for Library_Kind use Kind;
for Library_Dir use External("BUILD_DIR");
Source_Dir := External ("SOURCE_DIR");
for Source_Dirs use (Source_Dir);
end Library;
CF_EOF
cat >>confpackage.ads <<CF_EOF
package ConfPackage is
procedure conftest;
end ConfPackage;
CF_EOF
cat >>confpackage.adb <<CF_EOF
with Text_IO;
package body ConfPackage is
procedure conftest is
begin
Text_IO.Put ("Hello World");
Text_IO.New_Line;
end conftest;
end ConfPackage;
CF_EOF
- if ( $cf_ada_make $ADAFLAGS \
+ if ( "$cf_ada_make" $ADAFLAGS \
-Plibrary.gpr \
- -XBUILD_DIR=`cd ../conftest.bin;pwd` \
- -XLIBRARY_DIR=`cd ../conftest.lib;pwd` \
- -XSOURCE_DIR=`pwd` \
+ -XBUILD_DIR="`cd ../conftest.bin;pwd`" \
+ -XLIBRARY_DIR="`cd ../conftest.lib;pwd`" \
+ -XSOURCE_DIR="`pwd`" \
-XSONAME=libConfTest.so.1 \
-XLIB_KIND=static 1>&5 2>&1 ) ; then
cf_gnat_projects=yes
fi
cd ..
fi
if test -f conftest.lib/confpackage.ali
then
cf_gnat_libraries=yes
fi
- rm -rf conftest* *~conftest*
+ rm -rf ./conftest* ./*~conftest*
;;
esac
;;
esac
-echo "$as_me:24604: result: $cf_gnat_projects" >&5
+echo "$as_me:26588: result: $cf_gnat_projects" >&5
echo "${ECHO_T}$cf_gnat_projects" >&6
fi # enable_gnat_projects
-if test $cf_gnat_projects = yes
+if test "$cf_gnat_projects" = yes
then
- echo "$as_me:24610: checking if GNAT supports libraries" >&5
+ echo "$as_me:26594: checking if GNAT supports libraries" >&5
echo $ECHO_N "checking if GNAT supports libraries... $ECHO_C" >&6
- echo "$as_me:24612: result: $cf_gnat_libraries" >&5
+ echo "$as_me:26596: result: $cf_gnat_libraries" >&5
echo "${ECHO_T}$cf_gnat_libraries" >&6
fi
+USE_OLD_MAKERULES=""
+USE_GNAT_PROJECTS="#"
+USE_GNAT_MAKE_GPR="#"
+USE_GNAT_GPRBUILD="#"
+
if test "$cf_gnat_projects" = yes
then
USE_OLD_MAKERULES="#"
USE_GNAT_PROJECTS=""
-else
- USE_OLD_MAKERULES=""
- USE_GNAT_PROJECTS="#"
+ if test "$cf_cv_VERSION_GPRBUILD" != no
+ then
+ USE_GNAT_GPRBUILD=""
+ elif test "$cf_cv_VERSION_GNATMAKE" != no
+ then
+ USE_GNAT_MAKE_GPR=""
+ else
+ { echo "$as_me:26616: WARNING: use old makefile rules since tools are missing" >&5
+echo "$as_me: WARNING: use old makefile rules since tools are missing" >&2;}
+ fi
fi
if test "$cf_gnat_libraries" = yes
then
USE_GNAT_LIBRARIES=""
else
USE_GNAT_LIBRARIES="#"
fi
-echo "$as_me:24632: checking for ada-compiler" >&5
+echo "$as_me:26628: checking for ada-compiler" >&5
echo $ECHO_N "checking for ada-compiler... $ECHO_C" >&6
# Check whether --with-ada-compiler or --without-ada-compiler was given.
if test "${with_ada_compiler+set}" = set; then
withval="$with_ada_compiler"
cf_ada_compiler=$withval
else
cf_ada_compiler=gnatmake
fi;
-echo "$as_me:24643: result: $cf_ada_compiler" >&5
+echo "$as_me:26639: result: $cf_ada_compiler" >&5
echo "${ECHO_T}$cf_ada_compiler" >&6
cf_ada_package=terminal_interface
-echo "$as_me:24648: checking for ada-include" >&5
+echo "$as_me:26644: checking for ada-include" >&5
echo $ECHO_N "checking for ada-include... $ECHO_C" >&6
# Check whether --with-ada-include or --without-ada-include was given.
if test "${with_ada_include+set}" = set; then
withval="$with_ada_include"
else
withval="${ADA_INCLUDE:-$prefix/share/ada/adainclude}"
fi; if test -n "$prefix/share/ada/adainclude" ; then
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".$withval" in
(.\$\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[a-zA-Z]:[\\/]*) # OS/2 EMX
;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
eval withval="$withval"
case ".$withval" in
(.NONE/*)
- withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%`
+ withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%`
+ withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
- { { echo "$as_me:24684: error: expected a pathname, not \"$withval\"" >&5
+ { { echo "$as_me:26680: error: expected a pathname, not \"$withval\"" >&5
echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
fi
eval ADA_INCLUDE="$withval"
-echo "$as_me:24693: result: $ADA_INCLUDE" >&5
+echo "$as_me:26689: result: $ADA_INCLUDE" >&5
echo "${ECHO_T}$ADA_INCLUDE" >&6
-echo "$as_me:24696: checking for ada-objects" >&5
+echo "$as_me:26692: checking for ada-objects" >&5
echo $ECHO_N "checking for ada-objects... $ECHO_C" >&6
# Check whether --with-ada-objects or --without-ada-objects was given.
if test "${with_ada_objects+set}" = set; then
withval="$with_ada_objects"
else
withval="${ADA_OBJECTS:-$prefix/lib/ada/adalib}"
fi; if test -n "$prefix/lib/ada/adalib" ; then
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".$withval" in
(.\$\(*\)*|.\'*\'*)
;;
(..|./*|.\\*)
;;
(.[a-zA-Z]:[\\/]*) # OS/2 EMX
;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
eval withval="$withval"
case ".$withval" in
(.NONE/*)
- withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%`
+ withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;;
(.no|.NONE/*)
- withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%`
+ withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%`
;;
(*)
- { { echo "$as_me:24732: error: expected a pathname, not \"$withval\"" >&5
+ { { echo "$as_me:26728: error: expected a pathname, not \"$withval\"" >&5
echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
fi
eval ADA_OBJECTS="$withval"
-echo "$as_me:24741: result: $ADA_OBJECTS" >&5
+echo "$as_me:26737: result: $ADA_OBJECTS" >&5
echo "${ECHO_T}$ADA_OBJECTS" >&6
-echo "$as_me:24744: checking if an Ada95 shared-library should be built" >&5
+echo "$as_me:26740: checking if an Ada95 shared-library should be built" >&5
echo $ECHO_N "checking if an Ada95 shared-library should be built... $ECHO_C" >&6
# Check whether --with-ada-sharedlib or --without-ada-sharedlib was given.
if test "${with_ada_sharedlib+set}" = set; then
withval="$with_ada_sharedlib"
with_ada_sharedlib=$withval
else
with_ada_sharedlib=no
fi;
-echo "$as_me:24754: result: $with_ada_sharedlib" >&5
+echo "$as_me:26750: result: $with_ada_sharedlib" >&5
echo "${ECHO_T}$with_ada_sharedlib" >&6
if test "x$with_ada_sharedlib" != xno
then
if test "x$cf_gnat_projects" != xyes
then
- { echo "$as_me:24761: WARNING: disabling shared-library since GNAT projects are not supported" >&5
+ { echo "$as_me:26757: WARNING: disabling shared-library since GNAT projects are not supported" >&5
echo "$as_me: WARNING: disabling shared-library since GNAT projects are not supported" >&2;}
with_ada_sharedlib=no
fi
fi
ADA_SHAREDLIB='lib$(LIB_NAME).so.1'
MAKE_ADA_SHAREDLIB="#"
if test "x$with_ada_sharedlib" != xno
then
MAKE_ADA_SHAREDLIB=
if test "x$with_ada_sharedlib" != xyes
then
ADA_SHAREDLIB="$with_ada_sharedlib"
fi
fi
# allow the Ada binding to be renamed
-echo "$as_me:24781: checking for ada-libname" >&5
+echo "$as_me:26777: checking for ada-libname" >&5
echo $ECHO_N "checking for ada-libname... $ECHO_C" >&6
# Check whether --with-ada-libname or --without-ada-libname was given.
if test "${with_ada_libname+set}" = set; then
withval="$with_ada_libname"
ADA_LIBNAME=$withval
else
ADA_LIBNAME=AdaCurses
fi;
case "x$ADA_LIBNAME" in
(x|xyes|xno)
ADA_LIBNAME=AdaCurses
;;
esac
-echo "$as_me:24797: result: $ADA_LIBNAME" >&5
+echo "$as_me:26793: result: $ADA_LIBNAME" >&5
echo "${ECHO_T}$ADA_LIBNAME" >&6
fi
fi
else
cf_with_ada=no
fi
# do this "late" to avoid conflict with header-checks
if test "x$with_widec" = xyes ; then
- echo "$as_me:24808: checking for wchar_t" >&5
+ echo "$as_me:26804: checking for wchar_t" >&5
echo $ECHO_N "checking for wchar_t... $ECHO_C" >&6
if test "${ac_cv_type_wchar_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 24814 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 26810 "configure"
#include "confdefs.h"
$ac_includes_default
int
main (void)
{
if ((wchar_t *) 0)
return 0;
if (sizeof (wchar_t))
return 0;
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:24829: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26825: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:24832: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:24835: \"$ac_try\"") >&5
+ echo "$as_me:26828: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:26831: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:24838: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:26834: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_type_wchar_t=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_cv_type_wchar_t=no
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
fi
-echo "$as_me:24848: result: $ac_cv_type_wchar_t" >&5
+echo "$as_me:26844: result: $ac_cv_type_wchar_t" >&5
echo "${ECHO_T}$ac_cv_type_wchar_t" >&6
-echo "$as_me:24851: checking size of wchar_t" >&5
+echo "$as_me:26847: checking size of wchar_t" >&5
echo $ECHO_N "checking size of wchar_t... $ECHO_C" >&6
if test "${ac_cv_sizeof_wchar_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$ac_cv_type_wchar_t" = yes; then
if test "$cross_compiling" = yes; then
# Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-#line 24860 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 26856 "configure"
#include "confdefs.h"
$ac_includes_default
int
main (void)
{
int _array_ [1 - 2 * !((sizeof (wchar_t)) >= 0)]
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:24872: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26868: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:24875: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:24878: \"$ac_try\"") >&5
+ echo "$as_me:26871: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:26874: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:24881: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:26877: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_lo=0 ac_mid=0
while :; do
- cat >conftest.$ac_ext <<_ACEOF
-#line 24886 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 26882 "configure"
#include "confdefs.h"
$ac_includes_default
int
main (void)
{
int _array_ [1 - 2 * !((sizeof (wchar_t)) <= $ac_mid)]
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:24898: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26894: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:24901: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:24904: \"$ac_try\"") >&5
+ echo "$as_me:26897: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:26900: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:24907: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:26903: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_hi=$ac_mid; break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1`
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`; ac_mid=`expr 2 '*' "$ac_mid" + 1`
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
done
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
ac_hi=-1 ac_mid=-1
while :; do
- cat >conftest.$ac_ext <<_ACEOF
-#line 24923 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 26919 "configure"
#include "confdefs.h"
$ac_includes_default
int
main (void)
{
int _array_ [1 - 2 * !((sizeof (wchar_t)) >= $ac_mid)]
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:24935: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26931: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:24938: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:24941: \"$ac_try\"") >&5
+ echo "$as_me:26934: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:26937: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:24944: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:26940: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_lo=$ac_mid; break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid`
+cat "conftest.$ac_ext" >&5
+ac_hi=`expr "$ac_mid" - 1`; ac_mid=`expr 2 '*' "$ac_mid"`
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
done
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-#line 24960 "configure"
+ ac_mid=`expr '(' "$ac_hi" - "$ac_lo" ')' / 2 + "$ac_lo"`
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 26956 "configure"
#include "confdefs.h"
$ac_includes_default
int
main (void)
{
int _array_ [1 - 2 * !((sizeof (wchar_t)) <= $ac_mid)]
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:24972: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26968: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:24975: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:24978: \"$ac_try\"") >&5
+ echo "$as_me:26971: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest.$ac_objext"'
+ { (eval echo "$as_me:26974: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:24981: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:26977: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_hi=$ac_mid
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_lo=`expr $ac_mid + 1`
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`
fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
done
ac_cv_sizeof_wchar_t=$ac_lo
else
if test "$cross_compiling" = yes; then
- { { echo "$as_me:24994: error: cannot run test program while cross compiling" >&5
+ { { echo "$as_me:26990: error: cannot run test program while cross compiling" >&5
echo "$as_me: error: cannot run test program while cross compiling" >&2;}
{ (exit 1); exit 1; }; }
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 24999 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 26995 "configure"
#include "confdefs.h"
$ac_includes_default
int
main (void)
{
FILE *f = fopen ("conftest.val", "w");
if (!f)
$ac_main_return (1);
fprintf (f, "%d", (sizeof (wchar_t)));
fclose (f);
;
return 0;
}
_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:25015: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:27011: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:25018: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:25020: \"$ac_try\"") >&5
+ echo "$as_me:27014: \$? = $ac_status" >&5
+ (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+ { (eval echo "$as_me:27016: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:25023: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:27019: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
ac_cv_sizeof_wchar_t=`cat conftest.val`
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
fi
fi
rm -f conftest.val
else
ac_cv_sizeof_wchar_t=0
fi
fi
-echo "$as_me:25039: result: $ac_cv_sizeof_wchar_t" >&5
+echo "$as_me:27035: result: $ac_cv_sizeof_wchar_t" >&5
echo "${ECHO_T}$ac_cv_sizeof_wchar_t" >&6
cat >>confdefs.h <<EOF
#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t
EOF
# cross-compiling to mingw can run into the problem that attempting to
# link with the regex library fails, causing the test to not set this to
# a number. "recent" autoconf does not address this problem either -TD
if test -z "$ac_cv_sizeof_wchar_t"
then
test -n "$verbose" && echo " test failed (assume 2)" 1>&6
-echo "${as_me:-configure}:25052: testing test failed (assume 2) ..." 1>&5
+echo "${as_me:-configure}:27048: testing test failed (assume 2) ..." 1>&5
sed /SIZEOF_WCHAR_T/d confdefs.h >confdefs.tmp
mv confdefs.tmp confdefs.h
echo "#define SIZEOF_WCHAR_T 2" >>confdefs.h
fi
fi
### Construct the ncurses library-subsets, if any, from this set of keywords:
### none, base, ext_funcs, ext_tinfo, ticlib, termlib, widechar
###
### ticlib modules may be a separate library, otherwise contained in termlib.
### termlib modules may be a separate library, otherwise contained in ncurses.
###
### The of "+" or " " between the tokens controls the way the script
### chooses to split module lists into libraries.
###
### (see CF_LIB_RULES).
-echo "$as_me:25070: checking for library subsets" >&5
+echo "$as_me:27066: checking for library subsets" >&5
echo $ECHO_N "checking for library subsets... $ECHO_C" >&6
LIB_SUBSETS=
if test "x$cf_with_progs" = xyes || test "$with_ticlib" != no || test "$with_termcap" != no; then
LIB_SUBSETS="${LIB_SUBSETS}ticlib"
if test "$with_ticlib" != no ; then
LIB_SUBSETS="${LIB_SUBSETS} "
else
LIB_SUBSETS="${LIB_SUBSETS}+"
fi
fi
LIB_SUBSETS="${LIB_SUBSETS}termlib"
test "x$with_ext_funcs" = xyes && LIB_SUBSETS="${LIB_SUBSETS}+ext_tinfo"
if test "$with_termlib" != no ; then
LIB_SUBSETS="${LIB_SUBSETS} "
else
LIB_SUBSETS="${LIB_SUBSETS}+"
fi
LIB_SUBSETS="${LIB_SUBSETS}base"
# Most term-driver calls are to tinfo, but some like init_pair are to the
# base library (so it resides in base).
if test "$with_term_driver" != no ; then
LIB_SUBSETS="${LIB_SUBSETS}+port_drivers"
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(*mingw32*|*mingw64*)
- LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo+port_win32con"
+ if test "x$with_exp_win32" = xyes ; then
+ LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo+port_win32"
+ else
+ LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo+port_win32con"
+ fi
CPPFLAGS="$CPPFLAGS -DUSE_WIN32CON_DRIVER"
;;
(*)
LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo"
;;
esac
+elif test "x$with_exp_win32" = xyes ; then
+ case "$cf_cv_system_name" in
+ (*mingw32*|*mingw64*)
+ LIB_SUBSETS="${LIB_SUBSETS}+port_win32"
+ ;;
+ (*)
+ ;;
+ esac
fi
test "x$with_widec" = xyes && LIB_SUBSETS="${LIB_SUBSETS}+widechar"
test "x$with_ext_funcs" = xyes && LIB_SUBSETS="${LIB_SUBSETS}+ext_funcs"
-echo "$as_me:25112: result: $LIB_SUBSETS" >&5
+echo "$as_me:27120: result: $LIB_SUBSETS" >&5
echo "${ECHO_T}$LIB_SUBSETS" >&6
### Construct the list of include-directories to be generated
if test "$srcdir" != "."; then
CPPFLAGS="-I\${srcdir}/../include $CPPFLAGS"
fi
CPPFLAGS="-I../include $CPPFLAGS"
if test "$srcdir" != "."; then
CPPFLAGS="-I\${srcdir} $CPPFLAGS"
fi
CPPFLAGS="-I. $CPPFLAGS"
ACPPFLAGS="-I. -I../include -I../../include $ACPPFLAGS"
if test "$srcdir" != "."; then
ACPPFLAGS="-I\${srcdir}/../../include $ACPPFLAGS"
fi
if test "$GCC" != yes; then
ACPPFLAGS="$ACPPFLAGS -I\${includedir}"
elif test "$includedir" != "/usr/include"; then
if test "$includedir" = '${prefix}/include' ; then
if test x$prefix != x/usr ; then
ACPPFLAGS="$ACPPFLAGS -I\${includedir}"
fi
else
ACPPFLAGS="$ACPPFLAGS -I\${includedir}"
fi
fi
### Build up pieces for makefile rules
-echo "$as_me:25143: checking default library suffix" >&5
+echo "$as_me:27151: checking default library suffix" >&5
echo $ECHO_N "checking default library suffix... $ECHO_C" >&6
case $DFT_LWR_MODEL in
(libtool) DFT_ARG_SUFFIX='' ;;
(normal) DFT_ARG_SUFFIX='' ;;
(debug) DFT_ARG_SUFFIX='_g' ;;
(profile) DFT_ARG_SUFFIX='_p' ;;
(shared) DFT_ARG_SUFFIX='' ;;
esac
test -n "$LIB_SUFFIX" && DFT_ARG_SUFFIX="${LIB_SUFFIX}${DFT_ARG_SUFFIX}"
-echo "$as_me:25154: result: $DFT_ARG_SUFFIX" >&5
+echo "$as_me:27162: result: $DFT_ARG_SUFFIX" >&5
echo "${ECHO_T}$DFT_ARG_SUFFIX" >&6
-echo "$as_me:25157: checking default library-dependency suffix" >&5
+echo "$as_me:27165: checking default library-dependency suffix" >&5
echo $ECHO_N "checking default library-dependency suffix... $ECHO_C" >&6
case X$DFT_LWR_MODEL in
(Xlibtool)
DFT_LIB_SUFFIX='.la'
DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
;;
(Xdebug)
- DFT_LIB_SUFFIX='_g.a'
+ case "$cf_cv_system_name" in
+ (*-msvc*)
+ DFT_LIB_SUFFIX='_g.lib'
+ ;;
+ (*)
+ DFT_LIB_SUFFIX='_g.a'
+ ;;
+ esac
DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
;;
(Xprofile)
- DFT_LIB_SUFFIX='_p.a'
+ case "$cf_cv_system_name" in
+ (*-msvc*)
+ DFT_LIB_SUFFIX='_p.lib'
+ ;;
+ (*)
+ DFT_LIB_SUFFIX='_p.a'
+ ;;
+ esac
DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
;;
(Xshared)
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(aix[5-7]*)
DFT_LIB_SUFFIX='.so'
DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
;;
+ (*-msvc*)
+ DFT_LIB_SUFFIX='.dll'
+ DFT_DEP_SUFFIX='.dll.lib'
+ ;;
(cygwin*|msys*|mingw*)
DFT_LIB_SUFFIX='.dll'
DFT_DEP_SUFFIX='.dll.a'
;;
(darwin*)
DFT_LIB_SUFFIX='.dylib'
DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
;;
(hpux*)
- case $target in
+ case "$target" in
(ia64*)
DFT_LIB_SUFFIX='.so'
DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
;;
(*)
DFT_LIB_SUFFIX='.sl'
DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
;;
esac
;;
(*)
DFT_LIB_SUFFIX='.so'
DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
;;
esac
;;
(*)
- DFT_LIB_SUFFIX='.a'
+ case "$target" in
+ (*-msvc*)
+ DFT_LIB_SUFFIX='.lib'
+ ;;
+ (*)
+ DFT_LIB_SUFFIX='.a'
+ ;;
+ esac
DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
;;
esac
if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}"
then
DFT_LIB_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${DFT_LIB_SUFFIX}"
DFT_DEP_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${DFT_DEP_SUFFIX}"
fi
-echo "$as_me:25215: result: $DFT_DEP_SUFFIX" >&5
+echo "$as_me:27248: result: $DFT_DEP_SUFFIX" >&5
echo "${ECHO_T}$DFT_DEP_SUFFIX" >&6
-echo "$as_me:25218: checking default object directory" >&5
+echo "$as_me:27251: checking default object directory" >&5
echo $ECHO_N "checking default object directory... $ECHO_C" >&6
case $DFT_LWR_MODEL in
(libtool) DFT_OBJ_SUBDIR='obj_lo' ;;
(normal) DFT_OBJ_SUBDIR='objects' ;;
(debug) DFT_OBJ_SUBDIR='obj_g' ;;
(profile) DFT_OBJ_SUBDIR='obj_p' ;;
(shared)
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(cygwin|msys)
DFT_OBJ_SUBDIR='objects' ;;
(*)
DFT_OBJ_SUBDIR='obj_s' ;;
esac
esac
-echo "$as_me:25234: result: $DFT_OBJ_SUBDIR" >&5
+echo "$as_me:27267: result: $DFT_OBJ_SUBDIR" >&5
echo "${ECHO_T}$DFT_OBJ_SUBDIR" >&6
if test "x$cf_with_cxx" = xyes ; then
-echo "$as_me:25238: checking c++ library-dependency suffix" >&5
+echo "$as_me:27271: checking c++ library-dependency suffix" >&5
echo $ECHO_N "checking c++ library-dependency suffix... $ECHO_C" >&6
if test "$with_libtool" != "no"; then
# libtool thinks it can make c++ shared libraries (perhaps only g++)
CXX_LIB_SUFFIX=$DFT_DEP_SUFFIX
elif test "$with_shared_cxx" != "no"; then
# also for g++ users...
CXX_LIB_SUFFIX=$DFT_DEP_SUFFIX
else
# we normally make a static library because C/C++ library rules differ
case Xnormal in
(Xlibtool)
CXX_LIB_SUFFIX='.la'
CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
;;
(Xdebug)
- CXX_LIB_SUFFIX='_g.a'
+ case "$cf_cv_system_name" in
+ (*-msvc*)
+ CXX_LIB_SUFFIX='_g.lib'
+ ;;
+ (*)
+ CXX_LIB_SUFFIX='_g.a'
+ ;;
+ esac
CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
;;
(Xprofile)
- CXX_LIB_SUFFIX='_p.a'
+ case "$cf_cv_system_name" in
+ (*-msvc*)
+ CXX_LIB_SUFFIX='_p.lib'
+ ;;
+ (*)
+ CXX_LIB_SUFFIX='_p.a'
+ ;;
+ esac
CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
;;
(Xshared)
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(aix[5-7]*)
CXX_LIB_SUFFIX='.so'
CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
;;
+ (*-msvc*)
+ CXX_LIB_SUFFIX='.dll'
+ CXX_DEP_SUFFIX='.dll.lib'
+ ;;
(cygwin*|msys*|mingw*)
CXX_LIB_SUFFIX='.dll'
CXX_DEP_SUFFIX='.dll.a'
;;
(darwin*)
CXX_LIB_SUFFIX='.dylib'
CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
;;
(hpux*)
- case $target in
+ case "$target" in
(ia64*)
CXX_LIB_SUFFIX='.so'
CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
;;
(*)
CXX_LIB_SUFFIX='.sl'
CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
;;
esac
;;
(*)
CXX_LIB_SUFFIX='.so'
CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
;;
esac
;;
(*)
- CXX_LIB_SUFFIX='.a'
+ case "$target" in
+ (*-msvc*)
+ CXX_LIB_SUFFIX='.lib'
+ ;;
+ (*)
+ CXX_LIB_SUFFIX='.a'
+ ;;
+ esac
CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
;;
esac
if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}"
then
CXX_LIB_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${CXX_LIB_SUFFIX}"
CXX_DEP_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${CXX_DEP_SUFFIX}"
fi
fi
-echo "$as_me:25306: result: $CXX_LIB_SUFFIX" >&5
+echo "$as_me:27364: result: $CXX_LIB_SUFFIX" >&5
echo "${ECHO_T}$CXX_LIB_SUFFIX" >&6
fi
# do not want -ldl in build except as needed for -lncurses dependency
if test "x$with_dlsym" = xyes ; then
-if test $DFT_LWR_MODEL = shared || \
- test $DFT_LWR_MODEL = libtool ; then
+if test "$DFT_LWR_MODEL" = shared || \
+ test "$DFT_LWR_MODEL" = libtool ; then
# remove dl library from $LIBS
LIBS=`echo "$LIBS" | sed -e 's/-ldl[ ]//g' -e 's/-ldl$//'`
fi
fi
### Set up low-level terminfo dependencies for makefiles.
# TICS_LIST and TINFO_LIST are needed to build libtic.so and libterm.so, but
# do not need libdl
TICS_LIST=
if test "x$with_dlsym" = xyes ; then
# remove dl library from $SHLIB_LIST
TINFO_LIST=`echo "$SHLIB_LIST" | sed -e 's/-ldl[ ]//g' -e 's/-ldl$//'`
fi
USE_ARG_SUFFIX="${DFT_ARG_SUFFIX}${EXTRA_SUFFIX}"
USE_LIB_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}"
USE_CFG_SUFFIX=${DFT_ARG_SUFFIX}${cf_cv_abi_version}
if test -n "$EXTRA_SUFFIX" && test "x$EXTRA_SUFFIX" != "x${cf_cv_abi_version}"
then
USE_CFG_SUFFIX="${USE_CFG_SUFFIX}${EXTRA_SUFFIX}"
fi
if test "$with_ticlib" != no ; then
if test "x$with_ticlib" != xyes ; then
TICS_NAME=$with_ticlib
- TICS_SUFFIX="`echo ${DFT_LIB_SUFFIX}|sed -e "s/^${USE_LIB_SUFFIX}//"`"
- TICS_ARG_SUFFIX="${with_ticlib}`echo ${USE_ARG_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`"
- TICS_DEP_SUFFIX="${with_ticlib}`echo ${DFT_DEP_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`"
+ TICS_SUFFIX="`echo "${DFT_LIB_SUFFIX}" |sed -e "s/^${USE_LIB_SUFFIX}//"`"
+ TICS_ARG_SUFFIX="${with_ticlib}`echo "${USE_ARG_SUFFIX}" |sed -e "s/^${LIB_SUFFIX}//"`"
+ TICS_DEP_SUFFIX="${with_ticlib}`echo "${DFT_DEP_SUFFIX}" |sed -e "s/^${LIB_SUFFIX}//"`"
TICS_LIB_SUFFIX="${with_ticlib}"
else
TICS_SUFFIX=${DFT_LIB_SUFFIX}
TICS_ARG_SUFFIX="${TICS_NAME}${USE_ARG_SUFFIX}"
TICS_DEP_SUFFIX="${TICS_NAME}${DFT_DEP_SUFFIX}"
TICS_LIB_SUFFIX="${TICS_NAME}${USE_LIB_SUFFIX}"
fi
TICS_LDFLAGS="-L${LIB_DIR}"
TICS_LIBS="-l${TICS_ARG_SUFFIX}"
else
TICS_SUFFIX=${DFT_LIB_SUFFIX}
TICS_LDFLAGS="-L${LIB_DIR}"
TICS_LIBS="-l${LIB_NAME}${USE_ARG_SUFFIX}"
fi
if test "$with_termlib" != no ; then
if test "x$with_termlib" != xyes ; then
TINFO_NAME=$with_termlib
- TINFO_SUFFIX="`echo ${DFT_LIB_SUFFIX}|sed -e "s/^${USE_LIB_SUFFIX}//"`"
- TINFO_ARG_SUFFIX="${with_termlib}`echo ${USE_ARG_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`"
- TINFO_DEP_SUFFIX="${with_termlib}`echo ${DFT_DEP_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`"
+ TINFO_SUFFIX="`echo "${DFT_LIB_SUFFIX}" |sed -e "s/^${USE_LIB_SUFFIX}//"`"
+ TINFO_ARG_SUFFIX="${with_termlib}`echo "${USE_ARG_SUFFIX}" |sed -e "s/^${LIB_SUFFIX}//"`"
+ TINFO_DEP_SUFFIX="${with_termlib}`echo "${DFT_DEP_SUFFIX}" |sed -e "s/^${LIB_SUFFIX}//"`"
TINFO_LIB_SUFFIX="${with_termlib}"
else
TINFO_SUFFIX=${DFT_LIB_SUFFIX}
TINFO_ARG_SUFFIX="${TINFO_NAME}${USE_ARG_SUFFIX}"
TINFO_DEP_SUFFIX="${TINFO_NAME}${DFT_DEP_SUFFIX}"
TINFO_LIB_SUFFIX="${TINFO_NAME}${USE_LIB_SUFFIX}"
fi
TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${TINFO_DEP_SUFFIX}"
TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${TINFO_DEP_SUFFIX}"
if test "$DFT_LWR_MODEL" = "libtool"; then
TEST_ARGS="${TEST_DEPS}"
TEST_ARG2="${TEST_DEP2}"
TINFO_LDFLAGS="-L${LIB_DIR}"
TINFO_LIBS="$TEST_ARGS"
TICS_LIST="$SHLIB_LIST $TEST_ARGS"
SHLIB_LIST="${SHLIB_LIST} $TEST_ARGS"
else
TEST_ARGS="-l${TINFO_ARG_SUFFIX}"
TEST_ARG2="-l${TINFO_ARG_SUFFIX}"
if test "x$with_term_driver" != xno ; then
TICS_LIST="$SHLIB_LIST -l${LIB_NAME}${USE_ARG_SUFFIX}"
TICS_LIBS="$TICS_LIBS -l${LIB_NAME}${USE_ARG_SUFFIX}"
TINFO_LIBS="-l${LIB_NAME}${USE_ARG_SUFFIX} $TEST_ARGS"
else
TICS_LIST="$SHLIB_LIST -l${TINFO_LIB_SUFFIX}"
TINFO_LIBS="$TEST_ARGS"
fi
TINFO_LDFLAGS="-L${LIB_DIR}"
SHLIB_LIST="$SHLIB_LIST -l${TINFO_LIB_SUFFIX}"
fi
else
# the next lines are needed for linking libtic over libncurses
TINFO_NAME=${LIB_NAME}
TINFO_SUFFIX=${DFT_LIB_SUFFIX}
TINFO_ARG_SUFFIX=${LIB_NAME}${USE_ARG_SUFFIX}
if test "x$with_tic_depends" = xyes ; then
TICS_LIST="$SHLIB_LIST -l${LIB_NAME}${USE_ARG_SUFFIX}"
else
TICS_LIST="$SHLIB_LIST"
fi
TINFO_LDFLAGS="-L${LIB_DIR}"
TINFO_LIBS="-l${LIB_NAME}${USE_ARG_SUFFIX}"
fi
if test "$DFT_LWR_MODEL" = shared ; then
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(cygwin*|msys*)
# "lib" files have ".dll.a" suffix, "cyg"or "msys-" files have ".dll"
TINFO_SUFFIX=.dll
;;
esac
fi
if test "x$with_dlsym" = xyes ; then
# remove dl library from $TICS_LIST
TICS_LIST=`echo "$TICS_LIST" | sed -e 's/-ldl[ ]//g' -e 's/-ldl$//'`
fi
if test "$DFT_LWR_MODEL" = "libtool"; then
OBJEXT=lo
fi
# needed for Ada95
TINFO_LDFLAGS2=`echo "$TINFO_LDFLAGS" | sed -e 's,-L\.\./,-L../../,'`
-case $DFT_LWR_MODEL in
+case "$DFT_LWR_MODEL" in
(normal|debug|profile)
if test "$GCC" = yes ; then
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(OS/2*|os2*|aix[4]*|solaris2.1[0-9]|darwin*)
LDFLAGS_STATIC=
LDFLAGS_SHARED=
;;
(*) # normally, except when broken
LDFLAGS_STATIC=-static
LDFLAGS_SHARED=-dynamic
;;
esac
else
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(aix[4-7]*) # from ld manpage
LDFLAGS_STATIC=-bstatic
LDFLAGS_SHARED=-bdynamic
;;
(hpux*) # from ld manpage for hpux10.20, hpux11.11
# We could also use just "archive" and "shared".
LDFLAGS_STATIC=-Wl,-a,archive_shared
LDFLAGS_SHARED=-Wl,-a,shared_archive
;;
(irix*) # from ld manpage IRIX64
LDFLAGS_STATIC=-Bstatic
LDFLAGS_SHARED=-Bdynamic
;;
(osf[45]*) # from ld manpage osf4.0d, osf5.1
# alternative "-oldstyle_liblookup" (not in cc manpage)
LDFLAGS_STATIC=-noso
LDFLAGS_SHARED=-so_archive
;;
(solaris2*)
LDFLAGS_STATIC=-Bstatic
LDFLAGS_SHARED=-Bdynamic
;;
esac
fi
if test -n "$LDFLAGS_STATIC" && test -n "$LDFLAGS_SHARED"
then
- echo "$as_me:25482: checking if linker supports switching between static/dynamic" >&5
+ echo "$as_me:27540: checking if linker supports switching between static/dynamic" >&5
echo $ECHO_N "checking if linker supports switching between static/dynamic... $ECHO_C" >&6
rm -f libconftest.a
cat >conftest.$ac_ext <<EOF
-#line 25487 "configure"
+#line 27545 "configure"
#include <stdio.h>
int cf_ldflags_static(FILE *fp) { return fflush(fp); }
EOF
- if { (eval echo "$as_me:25491: \"$ac_compile\"") >&5
+ if { (eval echo "$as_me:27549: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:25494: \$? = $ac_status" >&5
- (exit $ac_status); } ; then
+ echo "$as_me:27552: \$? = $ac_status" >&5
+ (exit "$ac_status"); } ; then
( $AR $ARFLAGS libconftest.a conftest.o ) 2>&5 1>/dev/null
( eval $RANLIB libconftest.a ) 2>&5 >/dev/null
fi
rm -f conftest.*
cf_save_LIBS="$LIBS"
LIBS="$LDFLAGS_STATIC -L`pwd` -lconftest $LDFLAGS_DYNAMIC $LIBS"
- cat >conftest.$ac_ext <<_ACEOF
-#line 25505 "configure"
+ cat >"conftest.$ac_ext" <<_ACEOF
+#line 27563 "configure"
#include "confdefs.h"
-#line 25508 "configure"
+#line 27566 "configure"
#include <stdio.h>
int cf_ldflags_static(FILE *fp);
int
main (void)
{
return cf_ldflags_static(stdin);
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:25523: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:27581: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:25526: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:25529: \"$ac_try\"") >&5
+ echo "$as_me:27584: \$? = $ac_status" >&5
+ (exit "$ac_status"); } &&
+ { ac_try='test -s "conftest$ac_exeext"'
+ { (eval echo "$as_me:27587: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:25532: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ echo "$as_me:27590: \$? = $ac_status" >&5
+ (exit "$ac_status"); }; }; then
# some linkers simply ignore the -dynamic
- case x`file conftest$ac_exeext 2>/dev/null` in
+ case x`file "conftest$ac_exeext" 2>/dev/null` in
(*static*)
cf_ldflags_static=no
;;
(*)
cf_ldflags_static=yes
;;
esac
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
cf_ldflags_static=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
rm -f libconftest.*
LIBS="$cf_save_LIBS"
- echo "$as_me:25555: result: $cf_ldflags_static" >&5
+ echo "$as_me:27613: result: $cf_ldflags_static" >&5
echo "${ECHO_T}$cf_ldflags_static" >&6
- if test $cf_ldflags_static != yes
+ if test "$cf_ldflags_static" != yes
then
LDFLAGS_STATIC=
LDFLAGS_SHARED=
fi
else
LDFLAGS_STATIC=
LDFLAGS_SHARED=
fi
;;
esac
-echo "$as_me:25571: checking where we will install curses.h" >&5
+echo "$as_me:27629: checking where we will install curses.h" >&5
echo $ECHO_N "checking where we will install curses.h... $ECHO_C" >&6
includesubdir=
if test "$with_overwrite" = no && \
- ( test "x$includedir" = 'x${prefix}/include' || \
- test "x$includedir" = "x${prefix}/include" )
+ { test "x$includedir" = 'x${prefix}/include' || \
+ test "x$includedir" = "x${prefix}/include"; }
then
includesubdir="/ncurses${USE_LIB_SUFFIX}"
fi
-echo "$as_me:25581: result: ${includedir}${includesubdir}" >&5
+echo "$as_me:27639: result: ${includedir}${includesubdir}" >&5
echo "${ECHO_T}${includedir}${includesubdir}" >&6
### Resolve a conflict between normal and wide-curses by forcing applications
### that will need libutf8 to add it to their configure script.
if test "$with_overwrite" != no ; then
if test "$NCURSES_LIBUTF8" = 1 ; then
NCURSES_LIBUTF8='defined(HAVE_LIBUTF8_H)'
- { echo "$as_me:25589: WARNING: Wide-character applications must define HAVE_LIBUTF8_H to include curses.h" >&5
+ { echo "$as_me:27647: WARNING: Wide-character applications must define HAVE_LIBUTF8_H to include curses.h" >&5
echo "$as_me: WARNING: Wide-character applications must define HAVE_LIBUTF8_H to include curses.h" >&2;}
fi
fi
WITH_OVERWRITE=$with_overwrite
+### At least on MinGW a shared library build without libtool
+### requires adding the additional libs to the link list.
+case "$cf_cv_system_name" in
+(*mingw32*|*mingw64*)
+ if test "$DFT_LWR_MODEL" != "libtool"; then
+ SHLIB_LIST="$SHLIB_LIST ${LIBS}"
+ fi
+ ;;
+*) ;;
+esac
+
# used to separate tack out of the tree
NCURSES_TREE=
### predefined stuff for the test programs
cat >>confdefs.h <<\EOF
#define HAVE_SLK_COLOR 1
EOF
+# pkgsrc uses these
+
+echo "$as_me:27675: checking for desired basename for form library" >&5
+echo $ECHO_N "checking for desired basename for form library... $ECHO_C" >&6
+
+# Check whether --with-form-libname or --without-form-libname was given.
+if test "${with_form_libname+set}" = set; then
+ withval="$with_form_libname"
+ with_lib_basename=$withval
+else
+ with_lib_basename=form
+fi;
+FORM_NAME="$with_lib_basename"
+
+case "x$FORM_NAME" in
+(x|xno|xnone|xyes)
+ FORM_NAME=form
+ ;;
+(*)
+ ;;
+esac
+
+echo "$as_me:27695: result: $FORM_NAME" >&5
+echo "${ECHO_T}$FORM_NAME" >&6
+
+echo "$as_me:27698: checking for desired basename for menu library" >&5
+echo $ECHO_N "checking for desired basename for menu library... $ECHO_C" >&6
+
+# Check whether --with-menu-libname or --without-menu-libname was given.
+if test "${with_menu_libname+set}" = set; then
+ withval="$with_menu_libname"
+ with_lib_basename=$withval
+else
+ with_lib_basename=menu
+fi;
+MENU_NAME="$with_lib_basename"
+
+case "x$MENU_NAME" in
+(x|xno|xnone|xyes)
+ MENU_NAME=menu
+ ;;
+(*)
+ ;;
+esac
+
+echo "$as_me:27718: result: $MENU_NAME" >&5
+echo "${ECHO_T}$MENU_NAME" >&6
+
+echo "$as_me:27721: checking for desired basename for panel library" >&5
+echo $ECHO_N "checking for desired basename for panel library... $ECHO_C" >&6
+
+# Check whether --with-panel-libname or --without-panel-libname was given.
+if test "${with_panel_libname+set}" = set; then
+ withval="$with_panel_libname"
+ with_lib_basename=$withval
+else
+ with_lib_basename=panel
+fi;
+PANEL_NAME="$with_lib_basename"
+
+case "x$PANEL_NAME" in
+(x|xno|xnone|xyes)
+ PANEL_NAME=panel
+ ;;
+(*)
+ ;;
+esac
+
+echo "$as_me:27741: result: $PANEL_NAME" >&5
+echo "${ECHO_T}$PANEL_NAME" >&6
+
+echo "$as_me:27744: checking for desired basename for cxx library" >&5
+echo $ECHO_N "checking for desired basename for cxx library... $ECHO_C" >&6
+
+# Check whether --with-cxx-libname or --without-cxx-libname was given.
+if test "${with_cxx_libname+set}" = set; then
+ withval="$with_cxx_libname"
+ with_lib_basename=$withval
+else
+ with_lib_basename=ncurses++
+fi;
+CXX_NAME="$with_lib_basename"
+
+case "x$CXX_NAME" in
+(x|xno|xnone|xyes)
+ CXX_NAME=ncurses++
+ ;;
+(*)
+ ;;
+esac
+
+echo "$as_me:27764: result: $CXX_NAME" >&5
+echo "${ECHO_T}$CXX_NAME" >&6
+
### Construct the list of subdirectories for which we'll customize makefiles
### with the appropriate compile-rules.
-echo "$as_me:25607: checking for src modules" >&5
+echo "$as_me:27770: checking for src modules" >&5
echo $ECHO_N "checking for src modules... $ECHO_C" >&6
# dependencies and linker-arguments for test-programs
TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${LIB_NAME}${DFT_DEP_SUFFIX} $TEST_DEPS"
TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${LIB_NAME}${DFT_DEP_SUFFIX} $TEST_DEP2"
if test "$DFT_LWR_MODEL" = "libtool"; then
TEST_ARGS="${TEST_DEPS}"
TEST_ARG2="${TEST_DEP2}"
else
TEST_ARGS="-l${LIB_NAME}${USE_ARG_SUFFIX} $TEST_ARGS"
TEST_ARG2="-l${LIB_NAME}${USE_ARG_SUFFIX} $TEST_ARG2"
fi
PC_MODULES_TO_MAKE="ncurses${USE_ARG_SUFFIX}"
cf_cv_src_modules=
for cf_dir in $modules_to_build
do
- if test -f $srcdir/$cf_dir/modules; then
+ if test -f "$srcdir/$cf_dir/modules" ; then
# We may/may not have tack in the distribution, though the
# makefile is.
- if test $cf_dir = tack ; then
+ if test "$cf_dir" = tack ; then
if test "x$cf_with_tack" != "xyes"; then
continue
fi
fi
if test -z "$cf_cv_src_modules"; then
cf_cv_src_modules=$cf_dir
else
cf_cv_src_modules="$cf_cv_src_modules $cf_dir"
fi
# Make the ncurses_cfg.h file record the library interface files as
# well. These are header files that are the same name as their
# directory. Ncurses is the only library that does not follow
# that pattern.
- if test $cf_dir = tack ; then
+ if test "$cf_dir" = tack ; then
continue
- elif test -f $srcdir/${cf_dir}/${cf_dir}.h; then
+ elif test -f "$srcdir/${cf_dir}/${cf_dir}.h" ; then
cf_have_include=`echo "$cf_dir" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >>confdefs.h <<EOF
#define HAVE_${cf_have_include}_H 1
EOF
cat >>confdefs.h <<EOF
#define HAVE_LIB${cf_have_include} 1
EOF
- TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${cf_dir}${DFT_DEP_SUFFIX} $TEST_DEPS"
- TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${cf_dir}${DFT_DEP_SUFFIX} $TEST_DEP2"
+cf_map_lib_basename=`echo "$cf_dir" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+eval TEST_ROOT="\$${cf_map_lib_basename}_NAME"
+
+ TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${TEST_ROOT}${DFT_DEP_SUFFIX} $TEST_DEPS"
+ TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${TEST_ROOT}${DFT_DEP_SUFFIX} $TEST_DEP2"
if test "$DFT_LWR_MODEL" = "libtool"; then
TEST_ARGS="${TEST_DEPS}"
TEST_ARG2="${TEST_DEP2}"
else
- TEST_ARGS="-l${cf_dir}${USE_ARG_SUFFIX} $TEST_ARGS"
- TEST_ARG2="-l${cf_dir}${USE_ARG_SUFFIX} $TEST_ARG2"
+ TEST_ARGS="-l${TEST_ROOT}${USE_ARG_SUFFIX} $TEST_ARGS"
+ TEST_ARG2="-l${TEST_ROOT}${USE_ARG_SUFFIX} $TEST_ARG2"
fi
PC_MODULES_TO_MAKE="${PC_MODULES_TO_MAKE} ${cf_dir}${USE_ARG_SUFFIX}"
fi
fi
done
-echo "$as_me:25672: result: $cf_cv_src_modules" >&5
+echo "$as_me:27839: result: $cf_cv_src_modules" >&5
echo "${ECHO_T}$cf_cv_src_modules" >&6
TEST_ARGS="-L${LIB_DIR} $TEST_ARGS"
TEST_ARG2="-L${LIB_2ND} $TEST_ARG2"
SRC_SUBDIRS=
if test "x$cf_with_manpages" != xno ; then
SRC_SUBDIRS="$SRC_SUBDIRS man"
fi
SRC_SUBDIRS="$SRC_SUBDIRS include"
for cf_dir in $cf_cv_src_modules
do
SRC_SUBDIRS="$SRC_SUBDIRS $cf_dir"
done
if test "x$cf_with_tests" != "xno" ; then
SRC_SUBDIRS="$SRC_SUBDIRS test"
fi
# always make this, to install the ncurses-config script
SRC_SUBDIRS="$SRC_SUBDIRS misc"
if test "$cf_with_cxx_binding" != no; then
PC_MODULES_TO_MAKE="${PC_MODULES_TO_MAKE} ncurses++${USE_ARG_SUFFIX}"
SRC_SUBDIRS="$SRC_SUBDIRS c++"
fi
test "x$with_termlib" != xno && PC_MODULES_TO_MAKE="$PC_MODULES_TO_MAKE $TINFO_ARG_SUFFIX"
test "x$with_ticlib" != xno && PC_MODULES_TO_MAKE="$PC_MODULES_TO_MAKE $TICS_ARG_SUFFIX"
ADA_SUBDIRS=
-if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = xyes && test -f $srcdir/Ada95/Makefile.in; then
+if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = xyes && test -f "$srcdir/Ada95/Makefile.in" ; then
SRC_SUBDIRS="$SRC_SUBDIRS Ada95"
ADA_SUBDIRS="gen src"
if test "x$cf_with_tests" != "xno" ; then
ADA_SUBDIRS="$ADA_SUBDIRS samples"
fi
fi
SUB_MAKEFILES=
for cf_dir in $SRC_SUBDIRS
do
SUB_MAKEFILES="$SUB_MAKEFILES $cf_dir/Makefile"
done
if test -n "$ADA_SUBDIRS"; then
for cf_dir in $ADA_SUBDIRS
do
SUB_MAKEFILES="$SUB_MAKEFILES Ada95/$cf_dir/Makefile"
done
fi
if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = "xyes"; then
SUB_MAKEFILES="$SUB_MAKEFILES Ada95/src/library.gpr:Ada95/src/library.gpr.in"
SUB_MAKEFILES="$SUB_MAKEFILES Ada95/gen/adacurses${USE_CFG_SUFFIX}-config:Ada95/gen/adacurses-config.in"
SUB_MAKEFILES="$SUB_MAKEFILES man/adacurses${USE_CFG_SUFFIX}-config.1:man/MKada_config.in"
fi
DIRS_TO_MAKE="lib"
for cf_item in $cf_list_models
do
case $cf_item in
(libtool) cf_subdir='obj_lo' ;;
(normal) cf_subdir='objects' ;;
(debug) cf_subdir='obj_g' ;;
(profile) cf_subdir='obj_p' ;;
(shared)
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(cygwin|msys)
cf_subdir='objects' ;;
(*)
cf_subdir='obj_s' ;;
esac
esac
for cf_item2 in $DIRS_TO_MAKE
do
- test $cf_item2 = $cf_subdir && break
+ test "$cf_item2" = "$cf_subdir" && break
done
test ".$cf_item2" != ".$cf_subdir" && DIRS_TO_MAKE="$DIRS_TO_MAKE $cf_subdir"
done
for cf_dir in $DIRS_TO_MAKE
do
- test ! -d $cf_dir && mkdir $cf_dir
+ test ! -d "$cf_dir" && mkdir "$cf_dir"
done
# symbols that differ when compiling Ada95 by itself.
NCURSES_SHLIB2=$SHELL' $(top_srcdir)/misc/shlib'
# values to use as strings
cat >>confdefs.h <<EOF
#define NCURSES_PATHSEP '$PATH_SEPARATOR'
EOF
cat >>confdefs.h <<EOF
#define NCURSES_VERSION_STRING "${NCURSES_MAJOR}.${NCURSES_MINOR}.${NCURSES_PATCH}"
EOF
-### Now that we're done running tests, add the compiler-warnings, if any
-
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
-
-for cf_add_cflags in $EXTRA_CFLAGS
-do
-case $cf_fix_cppflags in
-(no)
- case $cf_add_cflags in
- (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
-
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
-
- if test $cf_fix_cppflags = yes ; then
-
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
-
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-
- continue
- fi
- ;;
- esac
- case "$CPPFLAGS" in
- (*$cf_add_cflags)
- ;;
- (*)
- case $cf_add_cflags in
- (-D*)
- cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
-
-CPPFLAGS=`echo "$CPPFLAGS" | \
- sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
- -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
-
- ;;
- esac
-
- test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
- cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
-
- ;;
- esac
- ;;
- (*)
-
- test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
- cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
-
- ;;
- esac
- ;;
-(yes)
-
- test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
- cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
-
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
-
- test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
- ;;
-esac
-done
-
-if test -n "$cf_new_cflags" ; then
-
- test -n "$CFLAGS" && CFLAGS="$CFLAGS "
- CFLAGS="${CFLAGS}$cf_new_cflags"
-
-fi
-
-if test -n "$cf_new_cppflags" ; then
-
- test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
- CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
-
-fi
-
-if test -n "$cf_new_extra_cppflags" ; then
-
- test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
- EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
-
-fi
-
### Define substitutions for header files to avoid name-pollution
if test "x$cf_cv_have_tcgetattr" = xyes ; then
HAVE_TCGETATTR=1
else
HAVE_TCGETATTR=0
fi
if test "x$ac_cv_header_stdint_h" = xyes ; then
HAVE_STDINT_H=1
else
HAVE_STDINT_H=0
fi
if test "x$ac_cv_header_termio_h" = xyes ; then
HAVE_TERMIO_H=1
else
HAVE_TERMIO_H=0
fi
if test "x$ac_cv_header_termios_h" = xyes ; then
HAVE_TERMIOS_H=1
else
HAVE_TERMIOS_H=0
fi
################################################################################
test "x$use_database" = xyes && \
SUB_MAKEFILES="$SUB_MAKEFILES misc/run_tic.sh:misc/run_tic.in"
SUB_MAKEFILES="$SUB_MAKEFILES misc/ncurses-config:misc/ncurses-config.in"
SUB_MAKEFILES="$SUB_MAKEFILES man/ncurses${USE_CFG_SUFFIX}-config.1:man/MKncu_config.in"
if test "x$enable_pc_files" = xyes && test -z "$MAKE_PC_FILES" ; then
SUB_MAKEFILES="$SUB_MAKEFILES misc/gen-pkgconfig:misc/gen-pkgconfig.in"
fi
if test "x$cf_with_tests" != xno ; then
MAKE_TESTS=
else
MAKE_TESTS="#"
fi
ADAHTML_DIR=../../doc/html/ada
-# these could be configurable, but are not currently
-PANEL_NAME=panel
-MENU_NAME=menu
-FORM_NAME=form
-CXX_NAME=ncurses++
-
# workaround for OS/2 (20151017)
-case $cf_cv_system_name in
+case "$cf_cv_system_name" in
(os2*)
LIBTOOL_OPTS_CXX="-os2dllname ncurs++"
;;
(*)
LIBTOOL_OPTS_CXX=
;;
esac
# workaround for g++ versus Solaris (20131116)
-case $cf_cv_system_name in
+case "$cf_cv_system_name" in
(solaris2*)
case "x$CPPFLAGS" in
(*-D_XOPEN_SOURCE_EXTENDED*)
test -n "$verbose" && echo " moving _XOPEN_SOURCE_EXTENDED to work around g++ problem" 1>&6
-echo "${as_me:-configure}:25939: testing moving _XOPEN_SOURCE_EXTENDED to work around g++ problem ..." 1>&5
+echo "${as_me:-configure}:28000: testing moving _XOPEN_SOURCE_EXTENDED to work around g++ problem ..." 1>&5
CFLAGS="$CFLAGS -D_XOPEN_SOURCE_EXTENDED"
CPPFLAGS=`echo "x$CPPFLAGS" | sed -e 's/^.//' -e 's/-D_XOPEN_SOURCE_EXTENDED//'`
;;
esac
;;
esac
# Help to automatically enable the extended curses features when using either
# the *-config or the ".pc" files by adding defines.
-echo "$as_me:25950: checking for defines to add to ncurses${USE_CFG_SUFFIX}-config script" >&5
+echo "$as_me:28011: checking for defines to add to ncurses${USE_CFG_SUFFIX}-config script" >&5
echo $ECHO_N "checking for defines to add to ncurses${USE_CFG_SUFFIX}-config script... $ECHO_C" >&6
PKG_CFLAGS=
for cf_loop1 in $CPPFLAGS_after_XOPEN
do
cf_found=no
for cf_loop2 in $CPPFLAGS_before_XOPEN
do
if test "x$cf_loop1" = "x$cf_loop2"
then
cf_found=yes
break
fi
done
test "$cf_found" = no && PKG_CFLAGS="$PKG_CFLAGS $cf_loop1"
done
-echo "$as_me:25966: result: $PKG_CFLAGS" >&5
+echo "$as_me:28027: result: $PKG_CFLAGS" >&5
echo "${ECHO_T}$PKG_CFLAGS" >&6
# AC_CHECK_SIZEOF demands a literal parameter, no variables. So we do this.
case "x$NCURSES_OSPEED" in
(*short*)
cf_compatible=1
;;
(*)
cf_compatible=0
;;
esac
cat >>confdefs.h <<EOF
#define NCURSES_OSPEED_COMPAT $cf_compatible
EOF
case "x$cf_cv_typeof_chtype" in
(xshort|xint|xlong)
cf_cv_typeof_chtype="unsigned $cf_cv_typeof_chtype"
;;
esac
case "x$cf_cv_typeof_mmask_t" in
(xshort|xint|xlong)
cf_cv_typeof_mmask_t="unsigned $cf_cv_typeof_mmask_t"
;;
esac
# substitute into misc/Makefile to suppress
# (un)install.data from the
# (un)install rules.
if test "x$cf_with_db_install" = "xno"; then
MISC_INSTALL_DATA=
MISC_UNINSTALL_DATA=
else
MISC_INSTALL_DATA=install.data
MISC_UNINSTALL_DATA=uninstall.data
fi
if test "x$cf_with_db_install" = "xno" || test "x$TERMINFO_SRC" = "xno"; then
MAKE_DATABASE="#"
else
MAKE_DATABASE="$MAKE_TERMINFO"
fi
if test -n "$PACKAGE"
then
PACKAGE="${PACKAGE}${DFT_ARG_SUFFIX}"
export PACKAGE
echo "package: $PACKAGE"
fi
UNALTERED_SYMS=
cf_filter_syms=no
if test -n "$RESULTING_SYMS"
then
cf_filter_syms=$cf_dft_filter_syms
test -n "$verbose" && echo " will map symbols to ABI=$cf_cv_abi_version" 1>&6
-echo "${as_me:-configure}:26027: testing will map symbols to ABI=$cf_cv_abi_version ..." 1>&5
+echo "${as_me:-configure}:28088: testing will map symbols to ABI=$cf_cv_abi_version ..." 1>&5
fi
if test "x$WILDCARD_SYMS" = xno
then
cf_filter_syms=yes
fi
test "x$cf_with_trace" = xyes && NCURSES_INLINE=
UNALTERED_SYMS=`echo "$RESULTING_SYMS" | sed -e 's/\\$/\\\\$/g'`
-if test $cf_filter_syms = yes
+if test "$cf_filter_syms" = yes
then
RESULTING_SYMS=resulting.map
fi
if test "x$cross_compiling" = xyes ; then
ADAGEN_LDFLAGS='$(CROSS_LDFLAGS)'
CHECK_BUILD="#"
else
ADAGEN_LDFLAGS='$(NATIVE_LDFLAGS)'
CHECK_BUILD=
fi
# This is used for the *-config script and *.pc data files.
-echo "$as_me:26054: checking for linker search path" >&5
+echo "$as_me:28115: checking for linker search path" >&5
echo $ECHO_N "checking for linker search path... $ECHO_C" >&6
if test "${cf_cv_ld_searchpath+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$cross_compiling" != yes ; then
# GNU binutils' ld does not involve permissions which may stop ldconfig.
cf_pathlist=`ld --verbose 2>/dev/null | grep SEARCH_DIR | sed -e 's,SEARCH_DIR[("=][("=]*,,g' -e 's/"[)];//gp' | sort -u`
# The -NX options tell newer versions of Linux ldconfig to not attempt to
# update the cache, which makes it run faster.
test -z "$cf_pathlist" && \
cf_pathlist=`ldconfig -NX -v 2>/dev/null | sed -e '/^[ ]/d' -e 's/:$//' | sort -u`
test -z "$cf_pathlist" &&
cf_pathlist=`ldconfig -v 2>/dev/null | sed -n -e '/^[ ]/d' -e 's/:$//p' | sort -u`
# This works with OpenBSD 6.5, which lists only filenames
test -z "$cf_pathlist" &&
cf_pathlist=`ldconfig -v 2>/dev/null | sed -n -e 's,^Adding \(.*\)/.*$,\1,p' | sort -u`
if test -z "$cf_pathlist"
then
# dyld default path with MacOS
if test -f /usr/bin/otool && test "x`uname -s`" = xDarwin
then
# do this to bypass check
cf_cv_ld_searchpath='$HOME/lib'
cf_pathlist="/usr/local/lib /lib /usr/lib"
fi
fi
if test -z "$cf_pathlist"
then
# Solaris is hardcoded
if test -d /opt/SUNWspro/lib
then
cf_pathlist="/opt/SUNWspro/lib /usr/ccs/lib /usr/lib"
elif test -d /usr/ccs/lib
then
cf_pathlist="/usr/ccs/lib /usr/lib"
fi
fi
fi
# If nothing else, assume it is conventional
test -z "$cf_pathlist" && cf_pathlist="/usr/lib /lib"
# Finally, check that this is only directories
for cf_path in $0 $cf_pathlist
do
if test -d "$cf_path"; then
test -n "$cf_cv_ld_searchpath" && cf_cv_ld_searchpath="${cf_cv_ld_searchpath} "
cf_cv_ld_searchpath="${cf_cv_ld_searchpath}${cf_path}"
fi
done
# Ensure that it is nonempty
test -z "$cf_cv_ld_searchpath" && cf_cv_ld_searchpath=/usr/lib
fi
-echo "$as_me:26118: result: $cf_cv_ld_searchpath" >&5
+echo "$as_me:28179: result: $cf_cv_ld_searchpath" >&5
echo "${ECHO_T}$cf_cv_ld_searchpath" >&6
LD_SEARCHPATH=`echo "$cf_cv_ld_searchpath"|sed -e 's/ /|/g'`
cat >>confdefs.h <<\EOF
#define HAVE_CURSES_DATA_BOOLNAMES 1
EOF
ac_config_files="$ac_config_files include/MKterm.h.awk include/curses.head:include/curses.h.in include/ncurses_dll.h include/termcap.h include/unctrl.h $SUB_MAKEFILES Makefile"
ac_config_commands="$ac_config_commands default"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs, see configure's option --config-cache.
# It is not useful on other systems. If it contains results you don't
# want to keep, you may remove or edit it.
#
# config.status only pays attention to the cache file if you give it
# the --recheck option to rerun configure.
#
# `ac_cv_env_foo' variables (set or unset) will be overriden when
# loading this file, other *unset* `ac_cv_foo' will be assigned the
# following values.
_ACEOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, don't put newlines in cache variables' values.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
{
(set) 2>&1 |
case `(ac_space=' '; set | grep ac_space) 2>&1` in
*ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote
# substitution turns \\\\ into \\, and sed turns \\ into \).
sed -n \
"s/'/'\\\\''/g;
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
;;
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
sed -n \
"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
;;
esac;
} |
sed '
t clear
: clear
s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
t end
/^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
: end' >>confcache
if cmp -s $cache_file confcache; then :; else
if test -w $cache_file; then
test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
cat confcache >$cache_file
else
echo "not updating unwritable cache $cache_file"
fi
fi
rm -f confcache
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
# VPATH may cause trouble with some makes, so we remove $(srcdir),
# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
# trailing colons and then remove the whole line if VPATH becomes empty
# (actually we leave an empty line to preserve line numbers).
if test "x$srcdir" = x.; then
ac_vpsub='/^[ ]*VPATH[ ]*=/{
s/:*\$(srcdir):*/:/;
s/:*\${srcdir}:*/:/;
s/:*@srcdir@:*/:/;
s/^\([^=]*=[ ]*\):*/\1/;
s/:*$//;
s/^[^=]*=[ ]*$//;
}'
fi
DEFS=-DHAVE_CONFIG_H
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:26208: creating $CONFIG_STATUS" >&5
+{ echo "$as_me:28269: creating $CONFIG_STATUS" >&5
echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
+cat >"$CONFIG_STATUS" <<_ACEOF
#! $SHELL
# Generated automatically by configure.
# Run this file to recreate the current configuration.
# Compiler output produced by configure, useful for debugging
# configure, is in config.log if it exists.
debug=false
SHELL=\${CONFIG_SHELL-$SHELL}
ac_cs_invocation="\$0 \$@"
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>"$CONFIG_STATUS" <<\_ACEOF
# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
set -o posix
fi
# Name of the executable.
as_me=`echo "$0" |sed 's,.*[\\/],,'`
if expr a : '\(a\)' >/dev/null 2>&1; then
as_expr=expr
else
as_expr=false
fi
rm -f conf$$ conf$$.exe conf$$.file
echo >conf$$.file
if ln -s conf$$.file conf$$ 2>/dev/null; then
# We could just check for DJGPP; but this test a) works b) is more generic
# and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
if test -f conf$$.exe; then
# Don't use ln at all; we don't have any links
as_ln_s='cp -p'
else
as_ln_s='ln -s'
fi
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -p'
fi
rm -f conf$$ conf$$.exe conf$$.file
as_executable_p="test -f"
# Support unset when possible.
if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
- as_unset=unset
+ as_unset="unset"
else
- as_unset=false
+ as_unset="false"
fi
# NLS nuisances.
$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
# IFS
# We need space, tab and new line, in precisely that order.
as_nl='
'
IFS=" $as_nl"
# CDPATH.
$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
exec 6>&1
_ACEOF
# Files that config.status was made for.
if test -n "$ac_config_files"; then
- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+ echo "config_files=\"$ac_config_files\"" >>"$CONFIG_STATUS"
fi
if test -n "$ac_config_headers"; then
- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+ echo "config_headers=\"$ac_config_headers\"" >>"$CONFIG_STATUS"
fi
if test -n "$ac_config_links"; then
- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+ echo "config_links=\"$ac_config_links\"" >>"$CONFIG_STATUS"
fi
if test -n "$ac_config_commands"; then
- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+ echo "config_commands=\"$ac_config_commands\"" >>"$CONFIG_STATUS"
fi
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
ac_cs_usage="\
\`$as_me' instantiates files from templates according to the
current configuration.
Usage: $0 [OPTIONS] [FILE]...
-h, --help print this help, then exit
-V, --version print version number, then exit
-d, --debug don't remove temporary files
--recheck update $as_me by reconfiguring in the same conditions
--file=FILE[:TEMPLATE]
instantiate the configuration file FILE
--header=FILE[:TEMPLATE]
instantiate the configuration header FILE
Configuration files:
$config_files
Configuration headers:
$config_headers
Configuration commands:
$config_commands
Report bugs to <dickey@invisible-island.net>."
EOF
-cat >>$CONFIG_STATUS <<EOF
+cat >>"$CONFIG_STATUS" <<EOF
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.52.20200111,
+configured by $0, generated by GNU Autoconf 2.52.20210105,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+Copyright 2003-2020,2021 Thomas E. Dickey
Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
+srcdir="$srcdir"
INSTALL="$INSTALL"
EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
# If no file are specified by the user, then we need to provide default
# value. By we need to know if files were specified by the user.
ac_need_defaults=:
while test $# != 0
do
case $1 in
--*=*)
ac_option=`expr "x$1" : 'x\([^=]*\)='`
ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
shift
set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
shift
;;
-*);;
*) # This is not an option, so the user has probably given explicit
# arguments.
ac_need_defaults=false;;
esac
case $1 in
# Handling of the options.
EOF
-cat >>$CONFIG_STATUS <<EOF
+cat >>"$CONFIG_STATUS" <<EOF
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
--version | --vers* | -V )
echo "$ac_cs_version"; exit 0 ;;
--he | --h)
# Conflict between --help and --header
- { { echo "$as_me:26384: error: ambiguous option: $1
+ { { echo "$as_me:28448: error: ambiguous option: $1
Try \`$0 --help' for more information." >&5
echo "$as_me: error: ambiguous option: $1
Try \`$0 --help' for more information." >&2;}
{ (exit 1); exit 1; }; };;
--help | --hel | -h )
echo "$ac_cs_usage"; exit 0 ;;
--debug | --d* | -d )
debug=: ;;
--file | --fil | --fi | --f )
shift
CONFIG_FILES="$CONFIG_FILES $1"
ac_need_defaults=false;;
--header | --heade | --head | --hea )
shift
CONFIG_HEADERS="$CONFIG_HEADERS $1"
ac_need_defaults=false;;
# This is an error.
- -*) { { echo "$as_me:26403: error: unrecognized option: $1
+ -*) { { echo "$as_me:28467: error: unrecognized option: $1
Try \`$0 --help' for more information." >&5
echo "$as_me: error: unrecognized option: $1
Try \`$0 --help' for more information." >&2;}
{ (exit 1); exit 1; }; } ;;
*) ac_config_targets="$ac_config_targets $1" ;;
esac
shift
done
exec 5>>config.log
cat >&5 << _ACEOF
## ----------------------- ##
## Running config.status. ##
## ----------------------- ##
-This file was extended by $as_me 2.52.20200111, executed with
+This file was extended by $as_me 2.52.20210105, executed with
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
CONFIG_LINKS = $CONFIG_LINKS
CONFIG_COMMANDS = $CONFIG_COMMANDS
- > $ac_cs_invocation
+ > "$ac_cs_invocation"
on `(hostname || uname -n) 2>/dev/null | sed 1q`
_ACEOF
EOF
-cat >>$CONFIG_STATUS <<EOF
+cat >>"$CONFIG_STATUS" <<EOF
#
# INIT-COMMANDS section.
#
### Special initialization commands, used to pass information from the
### configuration-run into config.status
-AWK="$AWK"
ALTERNATE_SYMS="$ALTERNATE_SYMS"
+AWK="$AWK"
+CXX_NAME="$CXX_NAME"
DFT_ARG_SUFFIX="$DFT_ARG_SUFFIX"
DFT_LWR_MODEL="$DFT_LWR_MODEL"
ECHO_LD="$ECHO_LD"
EXTRA_SUFFIX="$EXTRA_SUFFIX"
+FORM_NAME="$FORM_NAME"
LDCONFIG="$LDCONFIG"
LIBTOOL_VERSION="$LIBTOOL_VERSION"
LIB_NAME="$LIB_NAME"
LIB_PREFIX="$LIB_PREFIX"
LIB_SUBSETS="$LIB_SUBSETS"
LIB_SUFFIX="$LIB_SUFFIX"
LIB_TRACING="$LIB_TRACING"
LN_S="$LN_S"
MAKE_TERMINFO="$MAKE_TERMINFO"
+MENU_NAME="$MENU_NAME"
NCURSES_MAJOR="$NCURSES_MAJOR"
NCURSES_MINOR="$NCURSES_MINOR"
NCURSES_OSPEED="$NCURSES_OSPEED"
NCURSES_PATCH="$NCURSES_PATCH"
+PANEL_NAME="$PANEL_NAME"
SRC_SUBDIRS="$SRC_SUBDIRS"
TERMINFO="$TERMINFO"
TICS_ARG_SUFFIX="$TICS_ARG_SUFFIX"
TICS_LIB_SUFFIX="$TICS_LIB_SUFFIX"
TICS_NAME="$TICS_NAME"
TICS_SUFFIX="$TICS_SUFFIX"
TIC_PATH="$TIC_PATH"
TINFO_ARG_SUFFIX="$TINFO_ARG_SUFFIX"
TINFO_LIB_SUFFIX="$TINFO_LIB_SUFFIX"
TINFO_NAME="$TINFO_NAME"
TINFO_SUFFIX="$TINFO_SUFFIX"
UNALTERED_SYMS="$UNALTERED_SYMS"
USE_ARG_SUFFIX="$USE_ARG_SUFFIX"
USE_CFG_SUFFIX="$USE_CFG_SUFFIX"
USE_LIB_SUFFIX="$USE_LIB_SUFFIX"
USE_OLD_MAKERULES="$USE_OLD_MAKERULES"
WILDCARD_SYMS="$WILDCARD_SYMS"
WITH_CURSES_H="$with_curses_h"
WITH_ECHO="${enable_echo:=yes}"
WITH_OVERWRITE="$with_overwrite"
cf_LIST_MODELS="$cf_list_models"
+cf_cv_VERSION_GNATMAKE=$cf_cv_VERSION_GNATMAKE
+cf_cv_VERSION_GPRBUILD=$cf_cv_VERSION_GPRBUILD
cf_cv_abi_version="$cf_cv_abi_version"
cf_cv_do_relink="$cf_cv_do_relink"
cf_cv_do_reranlib="$cf_cv_do_reranlib"
cf_cv_do_symlinks="$cf_cv_do_symlinks"
cf_cv_enable_lp64="$cf_cv_enable_lp64"
cf_cv_enable_opaque="$cf_cv_enable_opaque"
cf_cv_prog_CC_c_o=$cf_cv_prog_CC_c_o
cf_cv_prog_CXX_c_o=$cf_cv_prog_CXX_c_o
cf_cv_prog_gnat_correct=$cf_cv_prog_gnat_correct
cf_cv_rel_version="$cf_cv_rel_version"
cf_cv_rm_so_locs="$cf_cv_rm_so_locs"
cf_cv_shared_soname='$cf_cv_shared_soname'
cf_cv_shlib_version="$cf_cv_shlib_version"
cf_cv_shlib_version_infix="$cf_cv_shlib_version_infix"
cf_cv_system_name="$cf_cv_system_name"
cf_cv_term_driver="$with_term_driver"
cf_with_ada="$cf_with_ada"
cf_with_cxx_binding="$cf_with_cxx_binding"
cf_with_db_install="$cf_with_db_install"
cf_with_manpages="$cf_with_manpages"
cf_with_tests="$cf_with_tests"
host="$host"
target="$target"
with_shared_cxx="$with_shared_cxx"
EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
for ac_config_target in $ac_config_targets
do
case "$ac_config_target" in
# Handling of arguments.
"include/MKterm.h.awk" ) CONFIG_FILES="$CONFIG_FILES include/MKterm.h.awk" ;;
"include/curses.head" ) CONFIG_FILES="$CONFIG_FILES include/curses.head:include/curses.h.in" ;;
"include/ncurses_dll.h" ) CONFIG_FILES="$CONFIG_FILES include/ncurses_dll.h" ;;
"include/termcap.h" ) CONFIG_FILES="$CONFIG_FILES include/termcap.h" ;;
"include/unctrl.h" ) CONFIG_FILES="$CONFIG_FILES include/unctrl.h" ;;
"$SUB_MAKEFILES" ) CONFIG_FILES="$CONFIG_FILES $SUB_MAKEFILES" ;;
"Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
"include/ncurses_cfg.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/ncurses_cfg.h:include/ncurses_cfg.hin" ;;
- *) { { echo "$as_me:26522: error: invalid argument: $ac_config_target" >&5
+ *) { { echo "$as_me:28592: error: invalid argument: $ac_config_target" >&5
echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
{ (exit 1); exit 1; }; };;
esac
done
# If the user did not use the arguments to specify the items to instantiate,
# then the envvar interface is used. Set only those that are not.
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
+if "$ac_need_defaults"; then
test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
fi
# Create a temporary directory, and hook for its removal unless debugging.
$debug ||
{
trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
trap '{ (exit 1); exit 1; }' 1 2 13 15
}
# Create a (secure) tmp directory for tmp files.
: ${TMPDIR=/tmp}
{
tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
test -n "$tmp" && test -d "$tmp"
} ||
{
tmp=$TMPDIR/cs$$-$RANDOM
(umask 077 && mkdir $tmp)
} ||
{
echo "$me: cannot create a temporary directory in $TMPDIR" >&2
{ (exit 1); exit 1; }
}
EOF
-cat >>$CONFIG_STATUS <<EOF
+cat >>"$CONFIG_STATUS" <<EOF
#
# CONFIG_FILES section.
#
# No need to generate the scripts if there are no CONFIG_FILES.
# This happens for instance when ./config.status config.h
if test -n "\$CONFIG_FILES"; then
# Protect against being on the right side of a sed subst in config.status.
sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
s,@SHELL@,$SHELL,;t t
s,@exec_prefix@,$exec_prefix,;t t
s,@prefix@,$prefix,;t t
s,@program_transform_name@,$program_transform_name,;t t
s,@bindir@,$bindir,;t t
s,@sbindir@,$sbindir,;t t
s,@libexecdir@,$libexecdir,;t t
s,@datarootdir@,$datarootdir,;t t
s,@datadir@,$datadir,;t t
s,@sysconfdir@,$sysconfdir,;t t
s,@sharedstatedir@,$sharedstatedir,;t t
s,@localstatedir@,$localstatedir,;t t
s,@runstatedir@,$runstatedir,;t t
s,@libdir@,$libdir,;t t
s,@includedir@,$includedir,;t t
s,@oldincludedir@,$oldincludedir,;t t
s,@infodir@,$infodir,;t t
s,@mandir@,$mandir,;t t
s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
s,@build_alias@,$build_alias,;t t
s,@host_alias@,$host_alias,;t t
s,@target_alias@,$target_alias,;t t
s,@ECHO_C@,$ECHO_C,;t t
s,@ECHO_N@,$ECHO_N,;t t
s,@ECHO_T@,$ECHO_T,;t t
s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
s,@DEFS@,$DEFS,;t t
s,@LIBS@,$LIBS,;t t
s,@top_builddir@,$top_builddir,;t t
+s,@GREP@,$GREP,;t t
s,@EGREP@,$EGREP,;t t
s,@NCURSES_MAJOR@,$NCURSES_MAJOR,;t t
s,@NCURSES_MINOR@,$NCURSES_MINOR,;t t
s,@NCURSES_PATCH@,$NCURSES_PATCH,;t t
s,@cf_cv_rel_version@,$cf_cv_rel_version,;t t
s,@cf_cv_abi_version@,$cf_cv_abi_version,;t t
s,@cf_cv_builtin_bool@,$cf_cv_builtin_bool,;t t
s,@cf_cv_header_stdbool_h@,$cf_cv_header_stdbool_h,;t t
s,@cf_cv_type_of_bool@,$cf_cv_type_of_bool,;t t
s,@VERSION@,$VERSION,;t t
s,@VERSION_MAJOR@,$VERSION_MAJOR,;t t
s,@VERSION_MINOR@,$VERSION_MINOR,;t t
s,@VERSION_PATCH@,$VERSION_PATCH,;t t
s,@PACKAGE@,$PACKAGE,;t t
s,@build@,$build,;t t
s,@build_cpu@,$build_cpu,;t t
s,@build_vendor@,$build_vendor,;t t
s,@build_os@,$build_os,;t t
s,@host@,$host,;t t
s,@host_cpu@,$host_cpu,;t t
s,@host_vendor@,$host_vendor,;t t
s,@host_os@,$host_os,;t t
s,@target@,$target,;t t
s,@target_cpu@,$target_cpu,;t t
s,@target_vendor@,$target_vendor,;t t
s,@target_os@,$target_os,;t t
+s,@FGREP@,$FGREP,;t t
s,@CC@,$CC,;t t
s,@CFLAGS@,$CFLAGS,;t t
s,@LDFLAGS@,$LDFLAGS,;t t
s,@CPPFLAGS@,$CPPFLAGS,;t t
s,@ac_ct_CC@,$ac_ct_CC,;t t
s,@EXEEXT@,$EXEEXT,;t t
s,@OBJEXT@,$OBJEXT,;t t
s,@EXTRA_CPPFLAGS@,$EXTRA_CPPFLAGS,;t t
s,@CPP@,$CPP,;t t
s,@LDCONFIG@,$LDCONFIG,;t t
s,@CXX@,$CXX,;t t
s,@CXXFLAGS@,$CXXFLAGS,;t t
s,@ac_ct_CXX@,$ac_ct_CXX,;t t
s,@AWK@,$AWK,;t t
s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
s,@INSTALL_DATA@,$INSTALL_DATA,;t t
s,@LINT@,$LINT,;t t
s,@LINT_OPTS@,$LINT_OPTS,;t t
s,@LN_S@,$LN_S,;t t
s,@cf_config_suffix@,$cf_config_suffix,;t t
s,@PKG_CONFIG@,$PKG_CONFIG,;t t
s,@ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;t t
s,@PKG_CONFIG_LIBDIR@,$PKG_CONFIG_LIBDIR,;t t
s,@MAKE_PC_FILES@,$MAKE_PC_FILES,;t t
s,@PC_MODULE_SUFFIX@,$PC_MODULE_SUFFIX,;t t
s,@SET_MAKE@,$SET_MAKE,;t t
s,@CTAGS@,$CTAGS,;t t
s,@ETAGS@,$ETAGS,;t t
s,@MAKE_LOWER_TAGS@,$MAKE_LOWER_TAGS,;t t
s,@MAKE_UPPER_TAGS@,$MAKE_UPPER_TAGS,;t t
s,@cf_cv_makeflags@,$cf_cv_makeflags,;t t
s,@RANLIB@,$RANLIB,;t t
s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
s,@LD@,$LD,;t t
s,@ac_ct_LD@,$ac_ct_LD,;t t
s,@AR@,$AR,;t t
s,@ac_ct_AR@,$ac_ct_AR,;t t
s,@NM@,$NM,;t t
s,@ac_ct_NM@,$ac_ct_NM,;t t
s,@ARFLAGS@,$ARFLAGS,;t t
s,@DESTDIR@,$DESTDIR,;t t
s,@BUILD_CC@,$BUILD_CC,;t t
s,@BUILD_CPP@,$BUILD_CPP,;t t
s,@BUILD_CFLAGS@,$BUILD_CFLAGS,;t t
s,@BUILD_CPPFLAGS@,$BUILD_CPPFLAGS,;t t
s,@BUILD_LDFLAGS@,$BUILD_LDFLAGS,;t t
s,@BUILD_LIBS@,$BUILD_LIBS,;t t
s,@BUILD_EXEEXT@,$BUILD_EXEEXT,;t t
s,@BUILD_OBJEXT@,$BUILD_OBJEXT,;t t
s,@cf_list_models@,$cf_list_models,;t t
s,@ABI_VERSION@,$ABI_VERSION,;t t
s,@LIBTOOL_VERSION@,$LIBTOOL_VERSION,;t t
s,@LIBTOOL@,$LIBTOOL,;t t
s,@ac_ct_LIBTOOL@,$ac_ct_LIBTOOL,;t t
s,@LT_UNDEF@,$LT_UNDEF,;t t
s,@LIBTOOL_CXX@,$LIBTOOL_CXX,;t t
s,@LIBTOOL_OPTS@,$LIBTOOL_OPTS,;t t
s,@LIB_CREATE@,$LIB_CREATE,;t t
s,@LIB_OBJECT@,$LIB_OBJECT,;t t
s,@LIB_SUFFIX@,$LIB_SUFFIX,;t t
s,@LIB_PREP@,$LIB_PREP,;t t
s,@LIB_CLEAN@,$LIB_CLEAN,;t t
s,@LIB_COMPILE@,$LIB_COMPILE,;t t
s,@LIB_LINK@,$LIB_LINK,;t t
s,@LIB_INSTALL@,$LIB_INSTALL,;t t
s,@LIB_UNINSTALL@,$LIB_UNINSTALL,;t t
s,@DFT_LWR_MODEL@,$DFT_LWR_MODEL,;t t
s,@DFT_UPR_MODEL@,$DFT_UPR_MODEL,;t t
s,@TICS_NAME@,$TICS_NAME,;t t
s,@TINFO_NAME@,$TINFO_NAME,;t t
s,@LIB_NAME@,$LIB_NAME,;t t
s,@LIB_PREFIX@,$LIB_PREFIX,;t t
s,@CC_G_OPT@,$CC_G_OPT,;t t
s,@CXX_G_OPT@,$CXX_G_OPT,;t t
s,@LD_MODEL@,$LD_MODEL,;t t
s,@shlibdir@,$shlibdir,;t t
s,@MAKE_DLLS@,$MAKE_DLLS,;t t
s,@CC_SHARED_OPTS@,$CC_SHARED_OPTS,;t t
s,@LD_RPATH_OPT@,$LD_RPATH_OPT,;t t
s,@LD_SHARED_OPTS@,$LD_SHARED_OPTS,;t t
s,@MK_SHARED_LIB@,$MK_SHARED_LIB,;t t
s,@RM_SHARED_OPTS@,$RM_SHARED_OPTS,;t t
s,@LINK_PROGS@,$LINK_PROGS,;t t
s,@LINK_TESTS@,$LINK_TESTS,;t t
s,@EXTRA_LDFLAGS@,$EXTRA_LDFLAGS,;t t
s,@LOCAL_LDFLAGS@,$LOCAL_LDFLAGS,;t t
s,@LOCAL_LDFLAGS2@,$LOCAL_LDFLAGS2,;t t
s,@INSTALL_LIB@,$INSTALL_LIB,;t t
s,@RPATH_LIST@,$RPATH_LIST,;t t
s,@EXPORT_SYMS@,$EXPORT_SYMS,;t t
s,@RESULTING_SYMS@,$RESULTING_SYMS,;t t
s,@VERSIONED_SYMS@,$VERSIONED_SYMS,;t t
s,@WILDCARD_SYMS@,$WILDCARD_SYMS,;t t
s,@cf_ldd_prog@,$cf_ldd_prog,;t t
+s,@EXTRA_PKG_LDFLAGS@,$EXTRA_PKG_LDFLAGS,;t t
s,@EXTRA_SUFFIX@,$EXTRA_SUFFIX,;t t
s,@TERMINFO_SRC@,$TERMINFO_SRC,;t t
s,@NCURSES_USE_DATABASE@,$NCURSES_USE_DATABASE,;t t
-s,@FALLBACK_LIST@,$FALLBACK_LIST,;t t
-s,@USE_FALLBACKS@,$USE_FALLBACKS,;t t
s,@TIC@,$TIC,;t t
+s,@ac_ct_TIC@,$ac_ct_TIC,;t t
s,@INFOCMP@,$INFOCMP,;t t
+s,@ac_ct_INFOCMP@,$ac_ct_INFOCMP,;t t
+s,@FALLBACK_LIST@,$FALLBACK_LIST,;t t
+s,@USE_FALLBACKS@,$USE_FALLBACKS,;t t
s,@WHICH_XTERM@,$WHICH_XTERM,;t t
s,@XTERM_KBS@,$XTERM_KBS,;t t
s,@TERMINFO_DIRS@,$TERMINFO_DIRS,;t t
s,@TERMINFO@,$TERMINFO,;t t
s,@MAKE_TERMINFO@,$MAKE_TERMINFO,;t t
s,@USE_BIG_STRINGS@,$USE_BIG_STRINGS,;t t
s,@TERMPATH@,$TERMPATH,;t t
s,@NCURSES_USE_TERMCAP@,$NCURSES_USE_TERMCAP,;t t
s,@BROKEN_LINKER@,$BROKEN_LINKER,;t t
s,@NCURSES_WCWIDTH_GRAPHICS@,$NCURSES_WCWIDTH_GRAPHICS,;t t
s,@NCURSES_CH_T@,$NCURSES_CH_T,;t t
s,@NCURSES_LIBUTF8@,$NCURSES_LIBUTF8,;t t
s,@NEED_WCHAR_H@,$NEED_WCHAR_H,;t t
s,@NCURSES_MBSTATE_T@,$NCURSES_MBSTATE_T,;t t
s,@NCURSES_WCHAR_T@,$NCURSES_WCHAR_T,;t t
s,@NCURSES_WINT_T@,$NCURSES_WINT_T,;t t
s,@NCURSES_OK_WCHAR_T@,$NCURSES_OK_WCHAR_T,;t t
s,@NCURSES_OK_WINT_T@,$NCURSES_OK_WINT_T,;t t
s,@cf_cv_enable_lp64@,$cf_cv_enable_lp64,;t t
s,@NCURSES_TPARM_VARARGS@,$NCURSES_TPARM_VARARGS,;t t
s,@NCURSES_WATTR_MACROS@,$NCURSES_WATTR_MACROS,;t t
s,@RGB_PATH@,$RGB_PATH,;t t
s,@no_x11_rgb@,$no_x11_rgb,;t t
s,@NCURSES_BOOL@,$NCURSES_BOOL,;t t
s,@TERMINFO_CAPS@,$TERMINFO_CAPS,;t t
s,@NCURSES_OSPEED@,$NCURSES_OSPEED,;t t
s,@NCURSES_CCHARW_MAX@,$NCURSES_CCHARW_MAX,;t t
s,@NCURSES_SBOOL@,$NCURSES_SBOOL,;t t
s,@NCURSES_TPARM_ARG@,$NCURSES_TPARM_ARG,;t t
s,@MANPAGE_RENAMES@,$MANPAGE_RENAMES,;t t
s,@NCURSES_EXT_FUNCS@,$NCURSES_EXT_FUNCS,;t t
s,@GENERATED_EXT_FUNCS@,$GENERATED_EXT_FUNCS,;t t
s,@NCURSES_SP_FUNCS@,$NCURSES_SP_FUNCS,;t t
s,@GENERATED_SP_FUNCS@,$GENERATED_SP_FUNCS,;t t
s,@NCURSES_CONST@,$NCURSES_CONST,;t t
s,@NCURSES_EXT_COLORS@,$NCURSES_EXT_COLORS,;t t
s,@NCURSES_MOUSE_VERSION@,$NCURSES_MOUSE_VERSION,;t t
s,@NCURSES_XNAMES@,$NCURSES_XNAMES,;t t
s,@PTHREAD@,$PTHREAD,;t t
s,@cf_cv_enable_reentrant@,$cf_cv_enable_reentrant,;t t
s,@cf_cv_enable_opaque@,$cf_cv_enable_opaque,;t t
s,@NCURSES_SIZE_T@,$NCURSES_SIZE_T,;t t
s,@NCURSES_OPAQUE@,$NCURSES_OPAQUE,;t t
s,@NCURSES_OPAQUE_FORM@,$NCURSES_OPAQUE_FORM,;t t
s,@NCURSES_OPAQUE_MENU@,$NCURSES_OPAQUE_MENU,;t t
s,@NCURSES_OPAQUE_PANEL@,$NCURSES_OPAQUE_PANEL,;t t
s,@NCURSES_WRAP_PREFIX@,$NCURSES_WRAP_PREFIX,;t t
+s,@NCURSES_IMPEXP@,$NCURSES_IMPEXP,;t t
+s,@NCURSES_CXX_IMPEXP@,$NCURSES_CXX_IMPEXP,;t t
s,@NCURSES_INTEROP_FUNCS@,$NCURSES_INTEROP_FUNCS,;t t
+s,@NCURSES_WGETCH_EVENTS@,$NCURSES_WGETCH_EVENTS,;t t
+s,@EXP_WIN32_DRIVER@,$EXP_WIN32_DRIVER,;t t
+s,@INTERNALS_HDR@,$INTERNALS_HDR,;t t
s,@ECHO_LT@,$ECHO_LT,;t t
s,@ECHO_LD@,$ECHO_LD,;t t
s,@RULE_CC@,$RULE_CC,;t t
s,@SHOW_CC@,$SHOW_CC,;t t
s,@ECHO_CC@,$ECHO_CC,;t t
s,@ECHO_LINK@,$ECHO_LINK,;t t
s,@INSTALL_OPT_S@,$INSTALL_OPT_S,;t t
s,@INSTALL_OPT_O@,$INSTALL_OPT_O,;t t
s,@INSTALL_OPT_P@,$INSTALL_OPT_P,;t t
-s,@ADAFLAGS@,$ADAFLAGS,;t t
s,@EXTRA_CFLAGS@,$EXTRA_CFLAGS,;t t
+s,@ADAFLAGS@,$ADAFLAGS,;t t
s,@EXTRA_CXXFLAGS@,$EXTRA_CXXFLAGS,;t t
s,@ADA_TRACE@,$ADA_TRACE,;t t
s,@MATH_LIB@,$MATH_LIB,;t t
s,@NCURSES_INLINE@,$NCURSES_INLINE,;t t
s,@cf_cv_typeof_chtype@,$cf_cv_typeof_chtype,;t t
s,@cf_cv_1UL@,$cf_cv_1UL,;t t
s,@cf_cv_typeof_mmask_t@,$cf_cv_typeof_mmask_t,;t t
s,@HAVE_VSSCANF@,$HAVE_VSSCANF,;t t
s,@TEST_LIBS@,$TEST_LIBS,;t t
s,@TEST_LIBS2@,$TEST_LIBS2,;t t
s,@CXXCPP@,$CXXCPP,;t t
s,@CXXLDFLAGS@,$CXXLDFLAGS,;t t
s,@CXX_AR@,$CXX_AR,;t t
s,@CXX_ARFLAGS@,$CXX_ARFLAGS,;t t
s,@CXXLIBS@,$CXXLIBS,;t t
s,@USE_CXX_BOOL@,$USE_CXX_BOOL,;t t
s,@cf_TEMP_gnat@,$cf_TEMP_gnat,;t t
s,@M4_exists@,$M4_exists,;t t
s,@cf_ada_make@,$cf_ada_make,;t t
s,@cf_ada_config@,$cf_ada_config,;t t
s,@cf_ada_config_Ada@,$cf_ada_config_Ada,;t t
s,@cf_ada_config_C@,$cf_ada_config_C,;t t
s,@GNATPREP_OPTS@,$GNATPREP_OPTS,;t t
s,@cf_compile_generics@,$cf_compile_generics,;t t
s,@cf_generic_objects@,$cf_generic_objects,;t t
s,@USE_GNAT_SIGINT@,$USE_GNAT_SIGINT,;t t
s,@USE_OLD_MAKERULES@,$USE_OLD_MAKERULES,;t t
s,@USE_GNAT_PROJECTS@,$USE_GNAT_PROJECTS,;t t
s,@USE_GNAT_LIBRARIES@,$USE_GNAT_LIBRARIES,;t t
+s,@USE_GNAT_MAKE_GPR@,$USE_GNAT_MAKE_GPR,;t t
+s,@USE_GNAT_GPRBUILD@,$USE_GNAT_GPRBUILD,;t t
s,@cf_ada_compiler@,$cf_ada_compiler,;t t
s,@cf_ada_package@,$cf_ada_package,;t t
s,@ADA_INCLUDE@,$ADA_INCLUDE,;t t
s,@ADA_OBJECTS@,$ADA_OBJECTS,;t t
s,@ADA_SHAREDLIB@,$ADA_SHAREDLIB,;t t
s,@MAKE_ADA_SHAREDLIB@,$MAKE_ADA_SHAREDLIB,;t t
s,@ADA_LIBNAME@,$ADA_LIBNAME,;t t
s,@ACPPFLAGS@,$ACPPFLAGS,;t t
s,@DFT_ARG_SUFFIX@,$DFT_ARG_SUFFIX,;t t
s,@DFT_DEP_SUFFIX@,$DFT_DEP_SUFFIX,;t t
s,@DFT_OBJ_SUBDIR@,$DFT_OBJ_SUBDIR,;t t
s,@CXX_LIB_SUFFIX@,$CXX_LIB_SUFFIX,;t t
s,@USE_ARG_SUFFIX@,$USE_ARG_SUFFIX,;t t
s,@USE_CFG_SUFFIX@,$USE_CFG_SUFFIX,;t t
s,@USE_LIB_SUFFIX@,$USE_LIB_SUFFIX,;t t
s,@TICS_ARG_SUFFIX@,$TICS_ARG_SUFFIX,;t t
s,@TICS_DEP_SUFFIX@,$TICS_DEP_SUFFIX,;t t
s,@TICS_LIB_SUFFIX@,$TICS_LIB_SUFFIX,;t t
s,@TICS_LDFLAGS@,$TICS_LDFLAGS,;t t
s,@TICS_LIBS@,$TICS_LIBS,;t t
s,@TINFO_ARG_SUFFIX@,$TINFO_ARG_SUFFIX,;t t
s,@TINFO_DEP_SUFFIX@,$TINFO_DEP_SUFFIX,;t t
s,@TINFO_LIB_SUFFIX@,$TINFO_LIB_SUFFIX,;t t
s,@TINFO_LDFLAGS@,$TINFO_LDFLAGS,;t t
s,@TINFO_LIBS@,$TINFO_LIBS,;t t
s,@TINFO_LDFLAGS2@,$TINFO_LDFLAGS2,;t t
s,@LDFLAGS_STATIC@,$LDFLAGS_STATIC,;t t
s,@LDFLAGS_SHARED@,$LDFLAGS_SHARED,;t t
s,@includesubdir@,$includesubdir,;t t
s,@WITH_OVERWRITE@,$WITH_OVERWRITE,;t t
s,@TICS_LIST@,$TICS_LIST,;t t
s,@TINFO_LIST@,$TINFO_LIST,;t t
s,@SHLIB_LIST@,$SHLIB_LIST,;t t
s,@NCURSES_TREE@,$NCURSES_TREE,;t t
+s,@FORM_NAME@,$FORM_NAME,;t t
+s,@MENU_NAME@,$MENU_NAME,;t t
+s,@PANEL_NAME@,$PANEL_NAME,;t t
+s,@CXX_NAME@,$CXX_NAME,;t t
s,@TEST_ARGS@,$TEST_ARGS,;t t
s,@TEST_DEPS@,$TEST_DEPS,;t t
s,@TEST_ARG2@,$TEST_ARG2,;t t
s,@TEST_DEP2@,$TEST_DEP2,;t t
s,@PC_MODULES_TO_MAKE@,$PC_MODULES_TO_MAKE,;t t
s,@ADA_SUBDIRS@,$ADA_SUBDIRS,;t t
s,@DIRS_TO_MAKE@,$DIRS_TO_MAKE,;t t
s,@NCURSES_SHLIB2@,$NCURSES_SHLIB2,;t t
s,@HAVE_TCGETATTR@,$HAVE_TCGETATTR,;t t
s,@HAVE_STDINT_H@,$HAVE_STDINT_H,;t t
s,@HAVE_TERMIO_H@,$HAVE_TERMIO_H,;t t
s,@HAVE_TERMIOS_H@,$HAVE_TERMIOS_H,;t t
s,@cross_compiling@,$cross_compiling,;t t
s,@MAKE_TESTS@,$MAKE_TESTS,;t t
s,@ADAHTML_DIR@,$ADAHTML_DIR,;t t
-s,@PANEL_NAME@,$PANEL_NAME,;t t
-s,@MENU_NAME@,$MENU_NAME,;t t
-s,@FORM_NAME@,$FORM_NAME,;t t
-s,@CXX_NAME@,$CXX_NAME,;t t
s,@LIBTOOL_OPTS_CXX@,$LIBTOOL_OPTS_CXX,;t t
s,@PKG_CFLAGS@,$PKG_CFLAGS,;t t
s,@MISC_INSTALL_DATA@,$MISC_INSTALL_DATA,;t t
s,@MISC_UNINSTALL_DATA@,$MISC_UNINSTALL_DATA,;t t
s,@MAKE_DATABASE@,$MAKE_DATABASE,;t t
s,@UNALTERED_SYMS@,$UNALTERED_SYMS,;t t
s,@ADAGEN_LDFLAGS@,$ADAGEN_LDFLAGS,;t t
s,@CHECK_BUILD@,$CHECK_BUILD,;t t
s,@PRIVATE_LIBS@,$PRIVATE_LIBS,;t t
s,@LD_SEARCHPATH@,$LD_SEARCHPATH,;t t
CEOF
EOF
- cat >>$CONFIG_STATUS <<\EOF
+ cat >>"$CONFIG_STATUS" <<\EOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
ac_max_sed_lines=48
ac_sed_frag=1 # Number of current file.
ac_beg=1 # First line for current file.
ac_end=$ac_max_sed_lines # Line after last line for current file.
ac_more_lines=:
ac_sed_cmds=
- while $ac_more_lines; do
- if test $ac_beg -gt 1; then
+ while "$ac_more_lines"; do
+ if test "$ac_beg" -gt 1; then
sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
else
sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
fi
if test ! -s $tmp/subs.frag; then
ac_more_lines=false
else
# The purpose of the label and of the branching condition is to
# speed up the sed processing (if there are no `@' at all, there
# is no need to browse any of the substitutions).
# These are the two extra sed commands mentioned above.
(echo ':t
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
# It is possible to make a multiline substitution using escaped newlines.
# Ensure that we do not split the substitution between script fragments.
ac_BEG=$ac_end
- ac_END=`expr $ac_end + $ac_max_sed_lines`
+ ac_END=`expr "$ac_end" + "$ac_max_sed_lines"`
sed "1,${ac_BEG}d; ${ac_END}p; q" $tmp/subs.sed >$tmp/subs.next
if test -s $tmp/subs.next; then
grep '^s,@[^@,][^@,]*@,.*\\$' $tmp/subs.next >$tmp/subs.edit
if test ! -s $tmp/subs.edit; then
grep "^s,@[^@,][^@,]*@,.*,;t t$" $tmp/subs.next >$tmp/subs.edit
if test ! -s $tmp/subs.edit; then
- if test $ac_beg -gt 1; then
- ac_end=`expr $ac_end - 1`
+ if test "$ac_beg" -gt 1; then
+ ac_end=`expr "$ac_end" - 1`
continue
fi
fi
fi
fi
if test -z "$ac_sed_cmds"; then
ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
else
ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
fi
- ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_sed_frag=`expr "$ac_sed_frag" + 1`
ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_lines`
+ ac_end=`expr "$ac_end" + "$ac_max_sed_lines"`
fi
done
if test -z "$ac_sed_cmds"; then
ac_sed_cmds=cat
fi
fi # test -n "$CONFIG_FILES"
EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case $ac_file in
+ case "$ac_file" in
- | *:- | *:-:* ) # input from stdin
cat >$tmp/stdin
ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
*:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
* ) ac_file_in=$ac_file.in ;;
esac
# Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| \
. : '\(.\)' 2>/dev/null ||
echo X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
/^X\(\/\/\)[^/].*/{ s//\1/; q; }
/^X\(\/\/\)$/{ s//\1/; q; }
/^X\(\/\).*/{ s//\1/; q; }
s/.*/./; q'`
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
{ case "$ac_dir" in
[\\/]* | ?:[\\/]* ) as_incr_dir=;;
*) as_incr_dir=.;;
esac
as_dummy="$ac_dir"
for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
case $as_mkdir_dir in
# Skip DOS drivespec
?:) as_incr_dir=$as_mkdir_dir ;;
*)
as_incr_dir=$as_incr_dir/$as_mkdir_dir
test -d "$as_incr_dir" || mkdir "$as_incr_dir"
;;
esac
done; }
ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
# A "../" for each directory in $ac_dir_suffix.
ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
else
ac_dir_suffix= ac_dots=
fi
- case $srcdir in
+ case "$srcdir" in
.) ac_srcdir=.
if test -z "$ac_dots"; then
ac_top_srcdir=.
else
- ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
+ ac_top_srcdir=`echo "$ac_dots" | sed 's,/$,,'`
fi ;;
[\\/]* | ?:[\\/]* )
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
+ ac_srcdir="$srcdir$ac_dir_suffix";
+ ac_top_srcdir="$srcdir" ;;
*) # Relative path.
- ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_dots$srcdir ;;
+ ac_srcdir="$ac_dots$srcdir$ac_dir_suffix"
+ ac_top_srcdir="$ac_dots$srcdir" ;;
esac
case $INSTALL in
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
*) ac_INSTALL=$ac_dots$INSTALL ;;
esac
if test x"$ac_file" != x-; then
- { echo "$as_me:27018: creating $ac_file" >&5
+ { echo "$as_me:29100: creating $ac_file" >&5
echo "$as_me: creating $ac_file" >&6;}
rm -f "$ac_file"
fi
# Let's still pretend it is `configure' which instantiates (i.e., don't
# use $as_me), people would be surprised to read:
# /* config.h. Generated automatically by config.status. */
configure_input="Generated automatically from `echo $ac_file_in |
sed 's,.*/,,'` by configure."
# First look for the input files in the build tree, otherwise in the
# src tree.
ac_file_inputs=`IFS=:
for f in $ac_file_in; do
case $f in
-) echo $tmp/stdin ;;
[\\/$]*)
# Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:27036: error: cannot find input file: $f" >&5
+ test -f "$f" || { { echo "$as_me:29118: error: cannot find input file: $f" >&5
echo "$as_me: error: cannot find input file: $f" >&2;}
{ (exit 1); exit 1; }; }
echo $f;;
*) # Relative
if test -f "$f"; then
# Build tree
echo $f
elif test -f "$srcdir/$f"; then
# Source tree
- echo $srcdir/$f
+ echo "$srcdir/$f"
else
# /dev/null tree
- { { echo "$as_me:27049: error: cannot find input file: $f" >&5
+ { { echo "$as_me:29131: error: cannot find input file: $f" >&5
echo "$as_me: error: cannot find input file: $f" >&2;}
{ (exit 1); exit 1; }; }
fi;;
esac
done` || { (exit 1); exit 1; }
EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
ac_warn_datarootdir=no
if test x"$ac_file" != x-; then
for ac_item in $ac_file_inputs
do
- ac_seen=`grep '@\(datadir\|mandir\|infodir\)@' $ac_item`
+ ac_seen=`grep '@\(datadir\|mandir\|infodir\)@' "$ac_item"`
if test -n "$ac_seen"; then
- ac_used=`grep '@datarootdir@' $ac_item`
+ ac_used=`grep '@datarootdir@' "$ac_item"`
if test -z "$ac_used"; then
- { echo "$as_me:27065: WARNING: datarootdir was used implicitly but not set:
+ { echo "$as_me:29147: WARNING: datarootdir was used implicitly but not set:
$ac_seen" >&5
echo "$as_me: WARNING: datarootdir was used implicitly but not set:
$ac_seen" >&2;}
ac_warn_datarootdir=yes
fi
fi
- ac_seen=`grep '${datarootdir}' $ac_item`
+ ac_seen=`grep '${datarootdir}' "$ac_item"`
if test -n "$ac_seen"; then
- { echo "$as_me:27074: WARNING: datarootdir was used explicitly but not set:
+ { echo "$as_me:29156: WARNING: datarootdir was used explicitly but not set:
$ac_seen" >&5
echo "$as_me: WARNING: datarootdir was used explicitly but not set:
$ac_seen" >&2;}
ac_warn_datarootdir=yes
fi
done
fi
if test "x$ac_warn_datarootdir" = xyes; then
ac_sed_cmds="$ac_sed_cmds | sed -e 's,@datarootdir@,\${prefix}/share,g' -e 's,\${datarootdir},\${prefix}/share,g'"
fi
EOF
-cat >>$CONFIG_STATUS <<EOF
+cat >>"$CONFIG_STATUS" <<EOF
sed "$ac_vpsub
$extrasub
EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
:t
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
s,@configure_input@,$configure_input,;t t
s,@srcdir@,$ac_srcdir,;t t
s,@top_srcdir@,$ac_top_srcdir,;t t
s,@INSTALL@,$ac_INSTALL,;t t
" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
rm -f $tmp/stdin
if test x"$ac_file" != x-; then
- cp $tmp/out $ac_file
+ cp "$tmp/out" "$ac_file"
for ac_name in prefix exec_prefix datarootdir
do
- ac_seen=`fgrep -n '${'$ac_name'[:=].*}' $ac_file`
+ ac_seen=`${FGREP-fgrep} -n '${'$ac_name'[:=].*}' "$ac_file"`
if test -n "$ac_seen"; then
- ac_init=`egrep '[ ]*'$ac_name'[ ]*=' $ac_file`
+ ac_init=`${EGREP-egrep} '[ ]*'$ac_name'[ ]*=' "$ac_file"`
if test -z "$ac_init"; then
ac_seen=`echo "$ac_seen" |sed -e 's,^,'$ac_file':,'`
- { echo "$as_me:27111: WARNING: Variable $ac_name is used but was not set:
+ { echo "$as_me:29193: WARNING: Variable $ac_name is used but was not set:
$ac_seen" >&5
echo "$as_me: WARNING: Variable $ac_name is used but was not set:
$ac_seen" >&2;}
fi
fi
done
- egrep -n '@[a-z_][a-z_0-9]+@' $ac_file >$tmp/out
- egrep -n '@[A-Z_][A-Z_0-9]+@' $ac_file >>$tmp/out
+ ${EGREP-egrep} -n '@[a-z_][a-z_0-9]+@' "$ac_file" >$tmp/out
+ ${EGREP-egrep} -n '@[A-Z_][A-Z_0-9]+@' "$ac_file" >>$tmp/out
if test -s $tmp/out; then
ac_seen=`sed -e 's,^,'$ac_file':,' < $tmp/out`
- { echo "$as_me:27122: WARNING: Some variables may not be substituted:
+ { echo "$as_me:29204: WARNING: Some variables may not be substituted:
$ac_seen" >&5
echo "$as_me: WARNING: Some variables may not be substituted:
$ac_seen" >&2;}
fi
else
cat $tmp/out
fi
rm -f $tmp/out
done
EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
#
# CONFIG_HEADER section.
#
# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
# NAME is the cpp macro being defined and VALUE is the value it is being given.
#
# ac_d sets the value in "#define NAME VALUE" lines.
ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
ac_dB='[ ].*$,\1#\2'
ac_dC=' '
ac_dD=',;t'
# ac_i turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
ac_iA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
ac_iB='\([ ]\),\1#\2define\3'
ac_iC=' '
ac_iD='\4,;t'
# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
ac_uB='$,\1#\2define\3'
ac_uC=' '
ac_uD=',;t'
for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case $ac_file in
+ case "$ac_file" in
- | *:- | *:-:* ) # input from stdin
cat >$tmp/stdin
ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
*:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
* ) ac_file_in=$ac_file.in ;;
esac
- test x"$ac_file" != x- && { echo "$as_me:27171: creating $ac_file" >&5
+ test x"$ac_file" != x- && { echo "$as_me:29253: creating $ac_file" >&5
echo "$as_me: creating $ac_file" >&6;}
# First look for the input files in the build tree, otherwise in the
# src tree.
ac_file_inputs=`IFS=:
for f in $ac_file_in; do
case $f in
-) echo $tmp/stdin ;;
[\\/$]*)
# Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:27182: error: cannot find input file: $f" >&5
+ test -f "$f" || { { echo "$as_me:29264: error: cannot find input file: $f" >&5
echo "$as_me: error: cannot find input file: $f" >&2;}
{ (exit 1); exit 1; }; }
echo $f;;
*) # Relative
if test -f "$f"; then
# Build tree
echo $f
elif test -f "$srcdir/$f"; then
# Source tree
- echo $srcdir/$f
+ echo "$srcdir/$f"
else
# /dev/null tree
- { { echo "$as_me:27195: error: cannot find input file: $f" >&5
+ { { echo "$as_me:29277: error: cannot find input file: $f" >&5
echo "$as_me: error: cannot find input file: $f" >&2;}
{ (exit 1); exit 1; }; }
fi;;
esac
done` || { (exit 1); exit 1; }
# Remove the trailing spaces.
sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
EOF
# Transform confdefs.h into a list of #define's. We won't use it as a sed
# script, but as data to insert where we see @DEFS@. We expect AC_SAVE_DEFS to
# be either 'cat' or 'sort'.
cat confdefs.h | uniq >conftest.vals
# Break up conftest.vals because some shells have a limit on
# the size of here documents, and old seds have small limits too.
rm -f conftest.tail
-echo ' rm -f conftest.frag' >> $CONFIG_STATUS
+echo ' rm -f conftest.frag' >> "$CONFIG_STATUS"
while grep . conftest.vals >/dev/null
do
# Write chunks of a limited-size here document to conftest.frag.
- echo ' cat >> conftest.frag <<CEOF' >> $CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.vals | sed -e 's/#ifdef.*/#if 0/' >> $CONFIG_STATUS
- echo 'CEOF' >> $CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+ echo ' cat >> conftest.frag <<CEOF' >> "$CONFIG_STATUS"
+ sed "${ac_max_here_lines}q" conftest.vals | sed -e 's/#ifdef.*/#if 0/' >> "$CONFIG_STATUS"
+ echo 'CEOF' >> "$CONFIG_STATUS"
+ sed "1,${ac_max_here_lines}d" conftest.vals > conftest.tail
rm -f conftest.vals
mv conftest.tail conftest.vals
done
rm -f conftest.vals
# Run sed to substitute the contents of conftest.frag into $tmp/in at the
# marker @DEFS@.
echo ' cat >> conftest.edit <<CEOF
/@DEFS@/r conftest.frag
/@DEFS@/d
CEOF
sed -f conftest.edit $tmp/in > $tmp/out
rm -f $tmp/in
mv $tmp/out $tmp/in
rm -f conftest.edit conftest.frag
-' >> $CONFIG_STATUS
+' >> "$CONFIG_STATUS"
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
# Let's still pretend it is `configure' which instantiates (i.e., don't
# use $as_me), people would be surprised to read:
# /* config.h. Generated automatically by config.status. */
if test x"$ac_file" = x-; then
echo "/* Generated automatically by configure. */" >$tmp/config.h
else
echo "/* $ac_file. Generated automatically by configure. */" >$tmp/config.h
fi
cat $tmp/in >>$tmp/config.h
rm -f $tmp/in
if test x"$ac_file" != x-; then
- if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
- { echo "$as_me:27253: $ac_file is unchanged" >&5
+ if cmp -s "$ac_file" "$tmp/config.h" 2>/dev/null; then
+ { echo "$as_me:29335: $ac_file is unchanged" >&5
echo "$as_me: $ac_file is unchanged" >&6;}
else
ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| \
. : '\(.\)' 2>/dev/null ||
echo X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
/^X\(\/\/\)[^/].*/{ s//\1/; q; }
/^X\(\/\/\)$/{ s//\1/; q; }
/^X\(\/\).*/{ s//\1/; q; }
s/.*/./; q'`
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
{ case "$ac_dir" in
[\\/]* | ?:[\\/]* ) as_incr_dir=;;
*) as_incr_dir=.;;
esac
as_dummy="$ac_dir"
for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
case $as_mkdir_dir in
# Skip DOS drivespec
?:) as_incr_dir=$as_mkdir_dir ;;
*)
as_incr_dir=$as_incr_dir/$as_mkdir_dir
test -d "$as_incr_dir" || mkdir "$as_incr_dir"
;;
esac
done; }
fi
- rm -f $ac_file
- mv $tmp/config.h $ac_file
+ rm -f "$ac_file"
+ mv "$tmp/config.h" "$ac_file"
fi
else
cat $tmp/config.h
rm -f $tmp/config.h
fi
done
EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
#
# CONFIG_COMMANDS section.
#
for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
- case $ac_dest in
+ case "$ac_dest" in
default )
if test "x$cf_with_tests" != xno ; then
for cf_dir in test
do
- if test ! -d $srcdir/$cf_dir; then
+ if test ! -d "$srcdir/$cf_dir" ; then
continue
- elif test -f $srcdir/$cf_dir/programs; then
- $AWK -f $srcdir/test/mk-test.awk INSTALL=no ECHO_LINK="$ECHO_LD" $srcdir/$cf_dir/programs >>$cf_dir/Makefile
+ elif test -f "$srcdir/$cf_dir/programs" ; then
+ $AWK -f "$srcdir/test/mk-test.awk" INSTALL=no ECHO_LINK="$ECHO_LD" "$srcdir/$cf_dir/programs" >>$cf_dir/Makefile
fi
done
fi
cf_prefix=$LIB_PREFIX
-case $cf_cv_shlib_version in
-(cygdll|msysdll|mingw)
+case "$cf_cv_shlib_version" in
+(cygdll|msysdll|mingw|msvcdll)
TINFO_NAME=$TINFO_ARG_SUFFIX
TINFO_SUFFIX=.dll
;;
esac
if test -n "$TINFO_SUFFIX" ; then
- case $TINFO_SUFFIX in
+ case "$TINFO_SUFFIX" in
(tw*)
TINFO_NAME="${TINFO_NAME}tw${EXTRA_SUFFIX}"
- TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^tw'$EXTRA_SUFFIX'//'`
+ TINFO_SUFFIX=`echo "$TINFO_SUFFIX" | sed 's/^tw'$EXTRA_SUFFIX'//'`
;;
(t*)
TINFO_NAME="${TINFO_NAME}t${EXTRA_SUFFIX}"
- TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^t'$EXTRA_SUFFIX'//'`
+ TINFO_SUFFIX=`echo "$TINFO_SUFFIX" | sed 's/^t'$EXTRA_SUFFIX'//'`
;;
(w*)
TINFO_NAME="${TINFO_NAME}w${EXTRA_SUFFIX}"
- TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^w'$EXTRA_SUFFIX'//'`
+ TINFO_SUFFIX=`echo "$TINFO_SUFFIX" | sed 's/^w'$EXTRA_SUFFIX'//'`
;;
esac
fi
for cf_dir in $SRC_SUBDIRS
do
- if test ! -d $srcdir/$cf_dir ; then
+ if test ! -d "$srcdir/$cf_dir" ; then
continue
- elif test -f $srcdir/$cf_dir/modules; then
+ elif test -f "$srcdir/$cf_dir/modules" ; then
SHARED_LIB=
Libs_To_Make=
cf_awk_program=
if test -n "${cf_cv_abi_version}" && test "x${cf_cv_abi_version}" != "x5"
then
cf_awk_program="$cf_awk_program\
/deprecated in ABI${cf_cv_abi_version}/ { next; }\
{ sub(\"NCURSES([WT]+)?\", \"&${cf_cv_abi_version}\"); }\
"
fi
if test "x$WILDCARD_SYMS" = xno
then
cf_awk_program="$cf_awk_program\
/[ ]_\\*;/ { skip=1; next; }\
"
fi
if test "x$cf_awk_program" != "x"
then
cat >>$cf_dir/Makefile <<CF_EOF
# Generated by CF_LIB_RULES
resulting.map: $UNALTERED_SYMS
$AWK 'BEGIN { skip = 1; last=""; } \
$cf_awk_program \
{ if ( last != "" && ( skip == 0 || \$\$0 !~ /}/ ) ) { print last; }\
skip = 0; last = \$\$0; } \
-END { print last; }' < $UNALTERED_SYMS >\$@
+END { print last; }' < "$UNALTERED_SYMS" >\$@
distclean::
rm -f resulting.map
CF_EOF
fi
for cf_item in $cf_LIST_MODELS
do
case X$cf_item in
(Xlibtool)
cf_suffix='.la'
cf_depsuf=$cf_suffix
;;
(Xdebug)
- cf_suffix='_g.a'
+ case "$cf_cv_system_name" in
+ (*-msvc*)
+ cf_suffix='_g.lib'
+ ;;
+ (*)
+ cf_suffix='_g.a'
+ ;;
+ esac
cf_depsuf=$cf_suffix
;;
(Xprofile)
- cf_suffix='_p.a'
+ case "$cf_cv_system_name" in
+ (*-msvc*)
+ cf_suffix='_p.lib'
+ ;;
+ (*)
+ cf_suffix='_p.a'
+ ;;
+ esac
cf_depsuf=$cf_suffix
;;
(Xshared)
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(aix[5-7]*)
cf_suffix='.so'
cf_depsuf=$cf_suffix
;;
+ (*-msvc*)
+ cf_suffix='.dll'
+ cf_depsuf='.dll.lib'
+ ;;
(cygwin*|msys*|mingw*)
cf_suffix='.dll'
cf_depsuf='.dll.a'
;;
(darwin*)
cf_suffix='.dylib'
cf_depsuf=$cf_suffix
;;
(hpux*)
- case $target in
+ case "$target" in
(ia64*)
cf_suffix='.so'
cf_depsuf=$cf_suffix
;;
(*)
cf_suffix='.sl'
cf_depsuf=$cf_suffix
;;
esac
;;
(*)
cf_suffix='.so'
cf_depsuf=$cf_suffix
;;
esac
;;
(*)
- cf_suffix='.a'
+ case "$target" in
+ (*-msvc*)
+ cf_suffix='.lib'
+ ;;
+ (*)
+ cf_suffix='.a'
+ ;;
+ esac
cf_depsuf=$cf_suffix
;;
esac
if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}"
then
cf_suffix="${LIB_SUFFIX}${EXTRA_SUFFIX}${cf_suffix}"
cf_depsuf="${LIB_SUFFIX}${EXTRA_SUFFIX}${cf_depsuf}"
fi
- cf_libname=$cf_dir
- test "$cf_dir" = c++ && cf_libname=ncurses++
- if test $cf_item = shared ; then
+ if test "$cf_dir" = "c++"
+ then
+
+cf_map_lib_basename=`echo "cxx" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+eval cf_libname="\$${cf_map_lib_basename}_NAME"
+
+ else
+
+cf_map_lib_basename=`echo "$cf_dir" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+eval cf_libname="\$${cf_map_lib_basename}_NAME"
+
+ fi
+ test -z "$cf_libname" && cf_libname="$cf_dir"
+ if test "$cf_item" = shared ; then
if test -n "${LIB_SUFFIX}"
then
cf_shared_suffix=`echo "$cf_suffix" | sed 's/^'"${USE_LIB_SUFFIX}"'//'`
else
cf_shared_suffix="$cf_suffix"
fi
if test "$cf_cv_do_symlinks" = yes ; then
cf_version_name=
case "$cf_cv_shlib_version" in
(rel)
cf_version_name=REL_VERSION
;;
(abi)
cf_version_name=ABI_VERSION
;;
esac
if test -n "$cf_version_name"
then
case "$cf_cv_system_name" in
(darwin*)
# "w", etc?
cf_suffix="${USE_LIB_SUFFIX}"'.${'$cf_version_name'}'"$cf_shared_suffix"
;;
(*)
cf_suffix="$cf_suffix"'.${'$cf_version_name'}'
;;
esac
fi
if test -n "${USE_LIB_SUFFIX}"
then
cf_shared_suffix=`echo "$cf_suffix" | sed 's/^'"${USE_LIB_SUFFIX}"'//'`
else
cf_shared_suffix="$cf_suffix"
fi
fi
# cygwin needs import library, and has unique naming convention
# use autodetected ${cf_prefix} for import lib and static lib, but
# use 'cyg' prefix for shared lib.
- case $cf_cv_shlib_version in
+ case "$cf_cv_shlib_version" in
(cygdll)
cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'`
cf_add_lib="../lib/cyg${cf_libname}${cf_cygsuf}"
;;
(msysdll)
cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'`
cf_add_lib="../lib/msys-${cf_libname}${cf_cygsuf}"
;;
(mingw)
cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'`
cf_add_lib="../lib/lib${cf_libname}${cf_cygsuf}"
;;
+ (msvcdll)
+ cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'`
+ cf_add_lib="../lib/${cf_libname}${cf_cygsuf}"
+ ;;
(*)
cf_add_lib=
;;
esac
if test -n "$cf_add_lib"
then
Libs_To_Make="$Libs_To_Make $cf_add_lib"
continue
fi
fi
cf_add_lib="../lib/${cf_prefix}${cf_libname}${cf_suffix}"
Libs_To_Make="$Libs_To_Make $cf_add_lib"
done
- if test $cf_dir = ncurses ; then
+ if test "$cf_dir" = ncurses ; then
cf_subsets="$LIB_SUBSETS"
cf_r_parts="$cf_subsets"
cf_liblist="$Libs_To_Make"
while test -n "$cf_r_parts"
do
cf_l_parts=`echo "$cf_r_parts" |sed -e 's/ .*$//'`
cf_r_parts=`echo "$cf_r_parts" |sed -e 's/^[^ ]* //'`
if test "$cf_l_parts" != "$cf_r_parts" ; then
cf_add_lib=
- case $cf_l_parts in
+ case "$cf_l_parts" in
(*termlib*)
- cf_add_lib=`echo $cf_liblist |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TINFO_LIB_SUFFIX}%g`
+ cf_add_lib=`echo "$cf_liblist" |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TINFO_LIB_SUFFIX}%g`
;;
(*ticlib*)
- cf_add_lib=`echo $cf_liblist |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TICS_LIB_SUFFIX}%g`
+ cf_add_lib=`echo "$cf_liblist" |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TICS_LIB_SUFFIX}%g`
;;
(*)
break
;;
esac
if test -n "$cf_add_lib"; then
Libs_To_Make="$cf_add_lib $Libs_To_Make"
fi
else
break
fi
done
else
cf_subsets=`echo "$LIB_SUBSETS" | sed -e 's/^termlib.* //'`
fi
- if test $cf_dir = c++; then
+ if test "$cf_dir" = c++; then
if test "x$with_shared_cxx" != xyes && test -n "$cf_shared_suffix"; then
cf_list=
for cf_item in $Libs_To_Make
do
- case $cf_item in
+ case "$cf_item" in
(*.a)
;;
(*)
cf_item=`echo "$cf_item" | sed -e "s,"$cf_shared_suffix",.a,"`
;;
esac
for cf_test in $cf_list
do
if test "$cf_test" = "$cf_item"
then
cf_LIST_MODELS=`echo "$cf_LIST_MODELS" | sed -e 's/normal//'`
cf_item=
break
fi
done
test -n "$cf_item" && cf_list="$cf_list $cf_item"
done
Libs_To_Make="$cf_list"
fi
fi
sed -e "s%@Libs_To_Make@%$Libs_To_Make%" \
-e "s%@SHARED_LIB@%$SHARED_LIB%" \
- $cf_dir/Makefile >$cf_dir/Makefile.out
- mv $cf_dir/Makefile.out $cf_dir/Makefile
+ "$cf_dir/Makefile" >$cf_dir/Makefile.out
+ mv "$cf_dir/Makefile.out" "$cf_dir/Makefile"
- $AWK -f $srcdir/mk-0th.awk \
+ $AWK -f "$srcdir/mk-0th.awk" \
libname="${cf_dir}${LIB_SUFFIX}" subsets="$LIB_SUBSETS" ticlib="$TICS_LIB_SUFFIX" termlib="$TINFO_LIB_SUFFIX" \
- $srcdir/$cf_dir/modules >>$cf_dir/Makefile
+ "$srcdir/$cf_dir/modules" >>$cf_dir/Makefile
for cf_subset in $cf_subsets
do
cf_subdirs=
for cf_item in $cf_LIST_MODELS
do
echo "Appending rules for ${cf_item} model (${cf_dir}: ${cf_subset})"
cf_ITEM=`echo "$cf_item" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
CXX_MODEL=$cf_ITEM
if test "$CXX_MODEL" = SHARED; then
- case $cf_cv_shlib_version in
- (cygdll|msysdll|mingw)
+ case "$cf_cv_shlib_version" in
+ (cygdll|msysdll|mingw|msvcdll)
test "x$with_shared_cxx" = xno && test -n "$verbose" && echo " overriding CXX_MODEL to SHARED" 1>&6
-echo "${as_me:-configure}:27598: testing overriding CXX_MODEL to SHARED ..." 1>&5
+echo "${as_me:-configure}:29722: testing overriding CXX_MODEL to SHARED ..." 1>&5
with_shared_cxx=yes
;;
(*)
test "x$with_shared_cxx" = xno && CXX_MODEL=NORMAL
;;
esac
fi
case X$cf_item in
(Xlibtool)
cf_suffix='.la'
cf_depsuf=$cf_suffix
;;
(Xdebug)
- cf_suffix='_g.a'
+ case "$cf_cv_system_name" in
+ (*-msvc*)
+ cf_suffix='_g.lib'
+ ;;
+ (*)
+ cf_suffix='_g.a'
+ ;;
+ esac
cf_depsuf=$cf_suffix
;;
(Xprofile)
- cf_suffix='_p.a'
+ case "$cf_cv_system_name" in
+ (*-msvc*)
+ cf_suffix='_p.lib'
+ ;;
+ (*)
+ cf_suffix='_p.a'
+ ;;
+ esac
cf_depsuf=$cf_suffix
;;
(Xshared)
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(aix[5-7]*)
cf_suffix='.so'
cf_depsuf=$cf_suffix
;;
+ (*-msvc*)
+ cf_suffix='.dll'
+ cf_depsuf='.dll.lib'
+ ;;
(cygwin*|msys*|mingw*)
cf_suffix='.dll'
cf_depsuf='.dll.a'
;;
(darwin*)
cf_suffix='.dylib'
cf_depsuf=$cf_suffix
;;
(hpux*)
- case $target in
+ case "$target" in
(ia64*)
cf_suffix='.so'
cf_depsuf=$cf_suffix
;;
(*)
cf_suffix='.sl'
cf_depsuf=$cf_suffix
;;
esac
;;
(*)
cf_suffix='.so'
cf_depsuf=$cf_suffix
;;
esac
;;
(*)
- cf_suffix='.a'
+ case "$target" in
+ (*-msvc*)
+ cf_suffix='.lib'
+ ;;
+ (*)
+ cf_suffix='.a'
+ ;;
+ esac
cf_depsuf=$cf_suffix
;;
esac
if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}"
then
cf_suffix="${LIB_SUFFIX}${EXTRA_SUFFIX}${cf_suffix}"
cf_depsuf="${LIB_SUFFIX}${EXTRA_SUFFIX}${cf_depsuf}"
fi
case $cf_item in
(libtool) cf_subdir='obj_lo' ;;
(normal) cf_subdir='objects' ;;
(debug) cf_subdir='obj_g' ;;
(profile) cf_subdir='obj_p' ;;
(shared)
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(cygwin|msys)
cf_subdir='objects' ;;
(*)
cf_subdir='obj_s' ;;
esac
esac
# Test for case where we build libtinfo with a different name.
cf_libname=$cf_dir
- if test $cf_dir = ncurses ; then
- case $cf_subset in
+ if test "$cf_dir" = ncurses ; then
+ case "$cf_subset" in
(*base*)
cf_libname=${cf_libname}$USE_LIB_SUFFIX
;;
(*termlib*)
cf_libname=$TINFO_LIB_SUFFIX
;;
(ticlib*)
cf_libname=$TICS_LIB_SUFFIX
;;
esac
- elif test $cf_dir = c++ ; then
- cf_libname=ncurses++$USE_LIB_SUFFIX
+ elif test "$cf_dir" = c++ ; then
+
+cf_map_lib_basename=`echo "cxx" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+eval cf_libname="\$${cf_map_lib_basename}_NAME"
+
+ cf_libname=${cf_libname}$USE_LIB_SUFFIX
else
+
+cf_map_lib_basename=`echo "$cf_dir" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+eval cf_libname="\$${cf_map_lib_basename}_NAME"
+
cf_libname=${cf_libname}$USE_LIB_SUFFIX
fi
if test -n "${USE_ARG_SUFFIX}" ; then
# undo $USE_LIB_SUFFIX add-on in CF_LIB_SUFFIX
- cf_suffix=`echo $cf_suffix |sed -e "s%^${USE_LIB_SUFFIX}%%"`
+ cf_suffix=`echo "$cf_suffix" |sed -e "s%^${USE_LIB_SUFFIX}%%"`
fi
# These dependencies really are for development, not
# builds, but they are useful in porting, too.
cf_depend="../include/ncurses_cfg.h"
if test "$srcdir" = "."; then
cf_reldir="."
else
cf_reldir="\${srcdir}"
fi
- if test -f $srcdir/$cf_dir/$cf_dir.priv.h; then
+ if test -f "$srcdir/$cf_dir/$cf_dir.priv.h" ; then
cf_depend="$cf_depend $cf_reldir/$cf_dir.priv.h"
- elif test -f $srcdir/$cf_dir/curses.priv.h; then
+ elif test -f "$srcdir/$cf_dir/curses.priv.h" ; then
cf_depend="$cf_depend $cf_reldir/curses.priv.h"
fi
cf_dir_suffix=
old_cf_suffix="$cf_suffix"
if test "$cf_cv_shlib_version_infix" = yes ; then
if test -n "$USE_LIB_SUFFIX" ; then
- case $USE_LIB_SUFFIX in
+ case "$USE_LIB_SUFFIX" in
(tw*)
- cf_libname=`echo $cf_libname | sed 's/tw'$EXTRA_SUFFIX'$//'`
- cf_suffix=`echo $cf_suffix | sed 's/^tw'$EXTRA_SUFFIX'//'`
+ cf_libname=`echo "$cf_libname" | sed 's/tw'$EXTRA_SUFFIX'$//'`
+ cf_suffix=`echo "$cf_suffix" | sed 's/^tw'$EXTRA_SUFFIX'//'`
cf_dir_suffix=tw$EXTRA_SUFFIX
;;
(t*)
- cf_libname=`echo $cf_libname | sed 's/t'$EXTRA_SUFFIX'$//'`
- cf_suffix=`echo $cf_suffix | sed 's/^t'$EXTRA_SUFFIX'//'`
+ cf_libname=`echo "$cf_libname" | sed 's/t'$EXTRA_SUFFIX'$//'`
+ cf_suffix=`echo "$cf_suffix" | sed 's/^t'$EXTRA_SUFFIX'//'`
cf_dir_suffix=t$EXTRA_SUFFIX
;;
(w*)
- cf_libname=`echo $cf_libname | sed 's/w'$EXTRA_SUFFIX'$//'`
- cf_suffix=`echo $cf_suffix | sed 's/^w'$EXTRA_SUFFIX'//'`
+ cf_libname=`echo "$cf_libname" | sed 's/w'$EXTRA_SUFFIX'$//'`
+ cf_suffix=`echo "$cf_suffix" | sed 's/^w'$EXTRA_SUFFIX'//'`
cf_dir_suffix=w$EXTRA_SUFFIX
;;
(*)
- cf_libname=`echo $cf_libname | sed 's/'$EXTRA_SUFFIX'$//'`
- cf_suffix=`echo $cf_suffix | sed 's/^'$EXTRA_SUFFIX'//'`
+ cf_libname=`echo "$cf_libname" | sed 's/'$EXTRA_SUFFIX'$//'`
+ cf_suffix=`echo "$cf_suffix" | sed 's/^'$EXTRA_SUFFIX'//'`
cf_dir_suffix=$EXTRA_SUFFIX
;;
esac
fi
fi
- $AWK -f $srcdir/mk-1st.awk \
+ $AWK -f "$srcdir/mk-1st.awk" \
name=${cf_libname}${cf_dir_suffix} \
traces=$LIB_TRACING \
MODEL=$cf_ITEM \
CXX_MODEL=$CXX_MODEL \
model=$cf_subdir \
prefix=$cf_prefix \
suffix=$cf_suffix \
subset=$cf_subset \
driver=$cf_cv_term_driver \
SymLink="$LN_S" \
TermlibRoot=$TINFO_NAME \
TermlibSuffix=$TINFO_SUFFIX \
ShlibVer=$cf_cv_shlib_version \
ShlibVerInfix=$cf_cv_shlib_version_infix \
ReLink=${cf_cv_do_relink:-no} \
ReRanlib=${cf_cv_do_reranlib:-yes} \
DoLinks=$cf_cv_do_symlinks \
rmSoLocs=$cf_cv_rm_so_locs \
ldconfig="$LDCONFIG" \
overwrite=$WITH_OVERWRITE \
depend="$cf_depend" \
host="$host" \
libtool_version="$LIBTOOL_VERSION" \
- $srcdir/$cf_dir/modules >>$cf_dir/Makefile
+ "$srcdir/$cf_dir/modules" >>$cf_dir/Makefile
cf_suffix="$old_cf_suffix"
for cf_subdir2 in $cf_subdirs lib
do
- test $cf_subdir = $cf_subdir2 && break
+ test "$cf_subdir" = "$cf_subdir2" && break
done
test "${cf_subset}.${cf_subdir2}" != "${cf_subset}.${cf_subdir}" && \
- $AWK -f $srcdir/mk-2nd.awk \
+ $AWK -f "$srcdir/mk-2nd.awk" \
name=$cf_dir \
traces=$LIB_TRACING \
MODEL=$cf_ITEM \
model=$cf_subdir \
subset=$cf_subset \
srcdir=$srcdir \
echo=$WITH_ECHO \
crenames=$cf_cv_prog_CC_c_o \
cxxrenames=$cf_cv_prog_CXX_c_o \
- $srcdir/$cf_dir/modules >>$cf_dir/Makefile
+ "$srcdir/$cf_dir/modules" >>$cf_dir/Makefile
cf_subdirs="$cf_subdirs $cf_subdir"
done
done
fi
- echo ' cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} $@' >>Makefile
+ echo ' ( cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} $@ )' >>Makefile
done
for cf_dir in $SRC_SUBDIRS
do
- if test ! -d $srcdir/$cf_dir ; then
+ if test ! -d "$srcdir/$cf_dir" ; then
continue
fi
- if test -f $cf_dir/Makefile ; then
+ if test -f "$cf_dir/Makefile" ; then
case "$cf_dir" in
(Ada95)
echo 'libs \' >> Makefile
echo 'install.libs \' >> Makefile
echo 'uninstall.libs ::' >> Makefile
- echo ' cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} $@' >> Makefile
+ echo ' ( cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} $@ )' >> Makefile
;;
esac
fi
- if test -f $srcdir/$cf_dir/modules; then
+ if test -f "$srcdir/$cf_dir/modules" ; then
echo >> Makefile
- if test -f $srcdir/$cf_dir/headers; then
+ if test -f "$srcdir/$cf_dir/headers" ; then
cat >> Makefile <<CF_EOF
install.includes \\
uninstall.includes \\
CF_EOF
fi
if test "$cf_dir" != "c++" ; then
echo 'lint \' >> Makefile
fi
cat >> Makefile <<CF_EOF
libs \\
lintlib \\
install.libs \\
uninstall.libs \\
install.$cf_dir \\
uninstall.$cf_dir ::
- cd $cf_dir && \${MAKE} \${TOP_MFLAGS} \$@
+ ( cd "$cf_dir" && \${MAKE} \${TOP_MFLAGS} \$@ )
CF_EOF
- elif test -f $srcdir/$cf_dir/headers; then
+ elif test -f "$srcdir/$cf_dir/headers" ; then
cat >> Makefile <<CF_EOF
libs \\
install.libs \\
uninstall.libs \\
install.includes \\
uninstall.includes ::
- cd $cf_dir && \${MAKE} \${TOP_MFLAGS} \$@
+ ( cd "$cf_dir" && \${MAKE} \${TOP_MFLAGS} \$@ )
CF_EOF
fi
done
if test "x$cf_with_db_install" = xyes; then
cat >> Makefile <<CF_EOF
install.libs uninstall.libs \\
install.data uninstall.data ::
-$MAKE_TERMINFO cd misc && \${MAKE} \${TOP_MFLAGS} \$@
+$MAKE_TERMINFO ( cd misc && \${MAKE} \${TOP_MFLAGS} \$@ )
CF_EOF
else
cat >> Makefile <<CF_EOF
install.libs uninstall.libs ::
- cd misc && \${MAKE} \${TOP_MFLAGS} \$@
+ ( cd misc && \${MAKE} \${TOP_MFLAGS} \$@ )
CF_EOF
fi
if test "x$cf_with_manpages" = xyes; then
cat >> Makefile <<CF_EOF
install.man \\
uninstall.man ::
- cd man && \${MAKE} \${TOP_MFLAGS} \$@
+ ( cd man && \${MAKE} \${TOP_MFLAGS} \$@ )
CF_EOF
fi
cat >> Makefile <<CF_EOF
distclean ::
rm -f config.cache config.log config.status Makefile include/ncurses_cfg.h
rm -f headers.sh headers.sed mk_shared_lib.sh
rm -f edit_man.* man_alias.*
rm -rf \${DIRS_TO_MAKE}
CF_EOF
# Special case: tack's manpage lives in its own directory.
if test "x$cf_with_manpages" = xyes; then
if test "x$cf_with_tack" = "xyes"; then
cat >> Makefile <<CF_EOF
install.man \\
uninstall.man ::
- cd tack && \${MAKE} \${TOP_MFLAGS} \$@
+ ( cd tack && \${MAKE} \${TOP_MFLAGS} \$@ )
CF_EOF
fi
fi
rm -f headers.sed headers.sh
echo creating headers.sh
cat >headers.sh <<CF_EOF
#! $SHELL
# This shell script is generated by the 'configure' script. It is invoked in a
# subdirectory of the build tree. It generates a sed-script in the parent
# directory that is used to adjust includes for header files that reside in a
# subdirectory of /usr/include, etc.
PRG=""
while test \$# != 3
do
PRG="\$PRG \$1"; shift
done
DST=\$1
REF=\$2
SRC=\$3
TMPSRC=\${TMPDIR:-/tmp}/\`basename \$SRC\`\$\$
TMPSED=\${TMPDIR:-/tmp}/headers.sed\$\$
echo installing \$SRC in \$DST
CF_EOF
-if test $WITH_CURSES_H = yes; then
+if test "$WITH_CURSES_H" = yes; then
cat >>headers.sh <<CF_EOF
case \$DST in
(/*/include/*)
END=\`basename \$DST\`
- for i in \`cat \$REF/../*/headers |fgrep -v "#"\`
+ for i in \`cat \$REF/../*/headers |${FGREP-fgrep} -v "#"\`
do
NAME=\`basename \$i\`
echo "s/<\$NAME>/<\$END\/\$NAME>/" >> \$TMPSED
done
;;
(*)
echo "" >> \$TMPSED
;;
esac
CF_EOF
else
cat >>headers.sh <<CF_EOF
case \$DST in
(/*/include/*)
END=\`basename \$DST\`
- for i in \`cat \$REF/../*/headers |fgrep -v "#"\`
+ for i in \`cat \$REF/../*/headers |${FGREP-fgrep} -v "#"\`
do
NAME=\`basename \$i\`
if test "\$NAME" = "curses.h"
then
echo "s/<curses.h>/<ncurses.h>/" >> \$TMPSED
NAME=ncurses.h
fi
echo "s/<\$NAME>/<\$END\/\$NAME>/" >> \$TMPSED
done
;;
(*)
echo "s/<curses.h>/<ncurses.h>/" >> \$TMPSED
;;
esac
CF_EOF
fi
cat >>headers.sh <<CF_EOF
rm -f \$TMPSRC
sed -f \$TMPSED \$SRC > \$TMPSRC
NAME=\`basename \$SRC\`
CF_EOF
-if test $WITH_CURSES_H != yes; then
+if test "$WITH_CURSES_H" != yes; then
cat >>headers.sh <<CF_EOF
test "\$NAME" = "curses.h" && NAME=ncurses.h
CF_EOF
fi
cat >>headers.sh <<CF_EOF
# Just in case someone gzip'd manpages, remove the conflicting copy.
test -f \$DST/\$NAME.gz && rm -f \$DST/\$NAME.gz
eval \$PRG \$TMPSRC \$DST/\$NAME
rm -f \$TMPSRC \$TMPSED
CF_EOF
chmod 0755 headers.sh
for cf_dir in $SRC_SUBDIRS
do
- if test ! -d $srcdir/$cf_dir ; then
+ if test ! -d "$srcdir/$cf_dir" ; then
continue
fi
- if test -f $srcdir/$cf_dir/headers; then
- $AWK -f $srcdir/mk-hdr.awk \
+ if test -f "$srcdir/$cf_dir/headers" ; then
+ $AWK -f "$srcdir/mk-hdr.awk" \
subset="$LIB_SUBSETS" \
compat="$WITH_CURSES_H" \
- $srcdir/$cf_dir/headers >>$cf_dir/Makefile
+ "$srcdir/$cf_dir/headers" >>$cf_dir/Makefile
fi
- if test -f $srcdir/$cf_dir/modules; then
+ if test -f "$srcdir/$cf_dir/modules" ; then
if test "$cf_dir" != "c++" ; then
cat >>$cf_dir/Makefile <<"CF_EOF"
depend : ${AUTO_SRC}
makedepend -- ${CPPFLAGS} -- ${C_SRC}
# DO NOT DELETE THIS LINE -- make depend depends on it.
CF_EOF
fi
fi
done
if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = "xyes"; then
if test -z "$USE_OLD_MAKERULES" ; then
- $AWK -f $srcdir/Ada95/mk-1st.awk <$srcdir/Ada95/src/modules >>Ada95/src/Makefile
+ $AWK -f "$srcdir/Ada95/mk-1st.awk" <"$srcdir/Ada95/src/modules" >>Ada95/src/Makefile
fi
fi
;;
esac
done
EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
{ (exit 0); exit 0; }
EOF
-chmod +x $CONFIG_STATUS
+chmod +x "$CONFIG_STATUS"
ac_clean_files=$ac_clean_files_save
# configure is writing to config.log, and then calls config.status.
# config.status does its own redirection, appending to config.log.
# Unfortunately, on DOS this fails, as config.log is still kept open
# by configure, so config.status won't be able to write to it; its
# output is simply discarded. So we exec the FD to /dev/null,
# effectively closing config.log, so it can be properly (re)opened and
# appended to by config.status. When coming back to configure, we
# need to make the FD available again.
if test "$no_create" != yes; then
ac_cs_success=:
exec 5>/dev/null
- $SHELL $CONFIG_STATUS || ac_cs_success=false
+ $SHELL "$CONFIG_STATUS" || ac_cs_success=false
exec 5>>config.log
# Use ||, not &&, to avoid exiting from the if with $? = 1, which
# would make configure fail if this is the last instruction.
- $ac_cs_success || { (exit 1); exit 1; }
+ "$ac_cs_success" || { (exit 1); exit 1; }
fi
${MAKE:-make} preinstall
diff --git a/contrib/ncurses/configure.in b/contrib/ncurses/configure.in
index 2183a9781483..f2013a9fbbe9 100644
--- a/contrib/ncurses/configure.in
+++ b/contrib/ncurses/configure.in
@@ -1,2482 +1,2587 @@
dnl***************************************************************************
-dnl Copyright 2018-2019,2020 Thomas E. Dickey *
+dnl Copyright 2018-2020,2021 Thomas E. Dickey *
dnl Copyright 1998-2017,2018 Free Software Foundation, Inc. *
dnl *
dnl Permission is hereby granted, free of charge, to any person obtaining a *
dnl copy of this software and associated documentation files (the *
dnl "Software"), to deal in the Software without restriction, including *
dnl without limitation the rights to use, copy, modify, merge, publish, *
dnl distribute, distribute with modifications, sublicense, and/or sell *
dnl copies of the Software, and to permit persons to whom the Software is *
dnl furnished to do so, subject to the following conditions: *
dnl *
dnl The above copyright notice and this permission notice shall be included *
dnl in all copies or substantial portions of the Software. *
dnl *
dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
dnl *
dnl Except as contained in this notice, the name(s) of the above copyright *
dnl holders shall not be used in advertising or otherwise to promote the *
dnl sale, use or other dealings in this Software without prior written *
dnl authorization. *
dnl***************************************************************************
dnl
dnl Author: Thomas E. Dickey 1995-on
dnl
-dnl $Id: configure.in,v 1.697 2020/02/08 20:56:13 tom Exp $
+dnl $Id: configure.in,v 1.729 2021/01/09 11:20:52 tom Exp $
dnl Process this file with autoconf to produce a configure script.
dnl
dnl For additional information, see
dnl https://invisible-island.net/autoconf/
dnl https://invisible-island.net/autoconf/my-autoconf.html
dnl
dnl ---------------------------------------------------------------------------
-AC_PREREQ(2.52.20200111)
-AC_REVISION($Revision: 1.697 $)
+AC_PREREQ(2.52.20210101)
+AC_REVISION($Revision: 1.729 $)
AC_INIT(ncurses/base/lib_initscr.c)
AC_CONFIG_HEADER(include/ncurses_cfg.h:include/ncurses_cfg.hin)
AC_DEFUN([AC_PATH_XTRA],[])dnl ignore dependencies on this
CF_TOP_BUILDDIR
CF_SUBST_NCURSES_VERSION
CF_VERSION_INFO(NCURSES,ncurses)
CF_WITH_REL_VERSION(NCURSES)
CF_NCURSES_WITH_ABI_VERSION
CF_WITH_SYSTYPE
### Save the given $CFLAGS to allow user-override.
cf_user_CFLAGS="$CFLAGS"
### Default install-location
CF_CFG_DEFAULTS
### Defaults for ncurses ABI
CF_ABI_DEFAULTS
### Checks for programs.
AC_ARG_WITH(ada,
[ --without-ada suppress check for Ada compiler, don't build demo],
[cf_with_ada=$withval],
[cf_with_ada=yes])
if test "x$cf_with_ada" = xyes
then
cf_prog_cc="gnatgcc gcc cc"
else
cf_prog_cc="gcc cc"
fi
CF_PROG_CC($cf_prog_cc)
AC_PROG_CPP
AC_PROG_GCC_TRADITIONAL
CF_PROG_CC_C_O(CC,[$CFLAGS $CPPFLAGS])
CF_PROG_LDCONFIG
dnl DEFECT in autoconf 2.12: an attempt to set policy, this breaks the
dnl configure script by not letting us test if C++
dnl is present, making this option necessary.
AC_MSG_CHECKING(if you want to ensure bool is consistent with C++)
AC_ARG_WITH(cxx,
[ --without-cxx do not adjust ncurses bool to match C++],
[cf_with_cxx=$withval],
[cf_with_cxx=yes])
AC_MSG_RESULT($cf_with_cxx)
if test "X$cf_with_cxx" = Xno ; then
CXX=""
GXX=""
else
# with autoconf 2.13, we can change the error to a warning:
pushdef([AC_MSG_ERROR],
[AC_MSG_RESULT(no)
AC_MSG_WARN([You don't have any C++ compiler, too bad])
cf_with_cxx=no; CXX=""; GXX="";])dnl
AC_PROG_CXX
popdef([AC_MSG_ERROR])dnl
AC_LANG_PUSH(C++)
if test "x$cf_with_cxx" != xno
then
# Several of the C++ configurations do not work, particularly when
# cross-compiling (20140913 -TD)
AC_MSG_CHECKING(if $CXX works)
save_CPPFLAGS="$CPPFLAGS"
eval cf_includedir=${includedir}
CPPFLAGS="$CPPFLAGS -I${cf_includedir}"
AC_TRY_COMPILE([
#include <stdlib.h>
#include <stdio.h>
],
[
printf("Hello world!\n")
],
[cf_cxx_works=yes],
[cf_cxx_works=no])
CPPFLAGS="$save_CPPFLAGS"
AC_MSG_RESULT($cf_cxx_works)
if test "x$cf_cxx_works" = xno
then
AC_MSG_WARN([Ignore $CXX, since it cannot compile hello-world.])
cf_with_cxx=no; CXX=""; GXX="";
fi
fi
AC_LANG_POP
# autoconf 2.5x removed the error (hardcoding it to g++, or just blank)
if test "$CXX" = "g++" ; then
AC_PATH_PROG(CXX,g++)
fi
case "x$CXX" in
(x|xg++)
AC_MSG_WARN([You don't have any C++ compiler, too bad])
cf_with_cxx=no; CXX=""; GXX="";
;;
esac
fi
CF_GXX_VERSION
-case $GXX_VERSION in
-(1*|2.[[0-6]]*)
- # GXX=""; CXX=""; ac_cv_prog_gxx=no
- # cf_cxx_library=no
+case "$GXX_VERSION" in
+([[1-9]][[0-9]].*)
+ ;;
+(1.*|2.[[0-6]]*)
AC_MSG_WARN(templates do not work)
;;
esac
AC_MSG_CHECKING(if you want to build C++ binding and demo)
AC_ARG_WITH(cxx-binding,
[ --without-cxx-binding do not build C++ binding and demo],
[cf_with_cxx_binding=$withval],
[cf_with_cxx_binding=$cf_with_cxx])
AC_MSG_RESULT($cf_with_cxx_binding)
AC_MSG_CHECKING(if you want to build with Ada)
AC_MSG_RESULT($cf_with_ada)
AC_MSG_CHECKING(if you want to install terminal database)
AC_ARG_ENABLE(db-install,
[ --disable-db-install suppress install of terminal database],
[cf_with_db_install=$enableval],
[cf_with_db_install=yes])
AC_MSG_RESULT($cf_with_db_install)
AC_MSG_CHECKING(if you want to install manpages)
AC_ARG_WITH(manpages,
[ --without-manpages suppress install of manpages],
[cf_with_manpages=$withval],
[cf_with_manpages=yes])
AC_MSG_RESULT($cf_with_manpages)
AC_MSG_CHECKING(if you want to build programs such as tic)
AC_ARG_WITH(progs,
[ --without-progs suppress build/install with programs (e.g., tic)],
[cf_with_progs=$withval],
[cf_with_progs=yes])
AC_MSG_RESULT($cf_with_progs)
-if test -f $srcdir/tack/tack.h; then
+if test -f "$srcdir/tack/tack.h" ; then
if test "x$cross_compiling" = xyes ; then
CF_VERBOSE(ignoring tack because we are cross-compiling)
cf_with_tack=no
else
AC_MSG_CHECKING(if you want to build the tack program)
AC_ARG_WITH(tack,
[ --without-tack suppress build/install with tack program],
[cf_with_tack=$withval],
[cf_with_tack=$cf_with_progs])
AC_MSG_RESULT($cf_with_tack)
fi
else
cf_with_tack=no
fi
AC_MSG_CHECKING(if you want to build test-programs)
AC_ARG_WITH(tests,
[ --without-tests suppress build/install with test-programs],
[cf_with_tests=$withval],
[cf_with_tests=yes])
AC_MSG_RESULT($cf_with_tests)
AC_MSG_CHECKING(if you wish to install curses.h)
AC_ARG_WITH(curses-h,
[ --without-curses-h install curses.h as ncurses.h only],
[with_curses_h=$withval],
[with_curses_h=yes])
AC_MSG_RESULT($with_curses_h)
modules_to_build="ncurses"
test "X$cf_with_progs" != Xno && modules_to_build="$modules_to_build progs"
test "X$cf_with_tack" != Xno && modules_to_build="$modules_to_build tack"
modules_to_build="$modules_to_build panel menu form"
AC_ARG_PROGRAM
CF_PROG_AWK
-CF_PROG_EGREP
CF_PROG_INSTALL
CF_PROG_LINT
CF_PROG_LN_S
AC_SYS_LONG_FILE_NAMES
# Provide for renaming "ncurses5-config" to "ncurses5X-config", etc., in case
# of package conflict.
cf_config_suffix=
AC_ARG_WITH(config-suffix,
[ --with-config-suffix=X suffixes ncursesXX-config file],
[case "x$withval" in
(xyes|xno)
AC_MSG_WARN(expected a value for config-suffix option)
;;
(*) cf_config_suffix="$withval"
;;
esac])
AC_SUBST(cf_config_suffix)
# If we find pkg-config, check if we should install the ".pc" files.
CF_PKG_CONFIG
CF_WITH_PKG_CONFIG_LIBDIR
CF_ENABLE_PC_FILES
if test -z "$MAKE_PC_FILES"
then
AC_MSG_CHECKING(for suffix to add to pc-files)
AC_ARG_WITH(pc-suffix,
[ --with-pc-suffix suffixes pc-files],
[case "x$withval" in
(xyes|xno)
PC_MODULE_SUFFIX=
;;
(*) PC_MODULE_SUFFIX="$withval"
;;
esac])
test -z "$PC_MODULE_SUFFIX" && PC_MODULE_SUFFIX=none
AC_MSG_RESULT($PC_MODULE_SUFFIX)
test "$PC_MODULE_SUFFIX" = none && PC_MODULE_SUFFIX=
AC_SUBST(PC_MODULE_SUFFIX)
fi
AC_MSG_CHECKING(if we should assume mixed-case filenames)
AC_ARG_ENABLE(mixed-case,
[ --enable-mixed-case tic should assume mixed-case filenames],
[enable_mixedcase=$enableval],
[enable_mixedcase=auto])
AC_MSG_RESULT($enable_mixedcase)
if test "$enable_mixedcase" = "auto" ; then
CF_MIXEDCASE_FILENAMES
else
cf_cv_mixedcase=$enable_mixedcase
if test "x$enable_mixedcase" = "xyes" ; then
AC_DEFINE(MIXEDCASE_FILENAMES,1,[Define to 1 if tic should assume mixed-case filenames])
fi
fi
# do this after mixed-case option (tags/TAGS is not as important as tic).
AC_PROG_MAKE_SET
CF_MAKE_TAGS
CF_MAKEFLAGS
dnl These are standard among *NIX systems, but not when cross-compiling
AC_CHECK_TOOL(RANLIB, ranlib, ':')
AC_CHECK_TOOL(LD, ld, ld)
AC_CHECK_TOOL(AR, ar, ar)
AC_CHECK_TOOL(NM, nm, nm)
CF_AR_FLAGS
dnl Special option for use by system-builders: the install-prefix is used to
dnl adjust the location into which the actual install is done, so that an
dnl archive can be built without modifying the host system's configuration.
AC_MSG_CHECKING(if you have specified an install-prefix)
AC_ARG_WITH(install-prefix,
[ --with-install-prefix prefixes actual install-location ($DESTDIR)],
[case "x$withval" in
(xyes|xno)
;;
(*) DESTDIR="$withval"
;;
esac])
AC_MSG_RESULT($DESTDIR)
AC_SUBST(DESTDIR)
###############################################################################
CF_HELP_MESSAGE(Build-Tools Needed to Compile Temporary Applications for Cross-compiling:)
# If we're cross-compiling, allow the user to override the tools and their
# options. The configure script is oriented toward identifying the host
# compiler, etc., but we need a build compiler to generate parts of the source.
+
+case "$cf_cv_system_name" in
+(*-msvc*)
+ LDFLAGS="$LDFLAGS user32.lib"
+ export LDFLAGS
+ ;;
+esac
+
CF_BUILD_CC
###############################################################################
CF_HELP_MESSAGE(Options to Specify the Libraries Built/Used:)
### Options to allow the user to specify the set of libraries which are used.
### Use "--without-normal --with-shared" to allow the default model to be
### shared, for example.
cf_list_models=""
AC_SUBST(cf_list_models)dnl the complete list of models ("normal debug")
CF_WITH_LIBTOOL
if test "$with_libtool" != "no" ; then
cf_list_models="$cf_list_models libtool"
else
AC_MSG_CHECKING(if you want to build shared libraries)
AC_ARG_WITH(shared,
[ --with-shared generate shared-libraries],
[with_shared=$withval],
[with_shared=no])
AC_MSG_RESULT($with_shared)
test "x$with_shared" = "xyes" && cf_list_models="$cf_list_models shared"
AC_MSG_CHECKING(if you want to build static libraries)
AC_ARG_WITH(normal,
[ --with-normal generate normal-libraries (default)],
[with_normal=$withval],
[with_normal=yes])
AC_MSG_RESULT($with_normal)
test "x$with_normal" = "xyes" && cf_list_models="$cf_list_models normal"
AC_MSG_CHECKING(if you want to build debug libraries)
AC_ARG_WITH(debug,
[ --with-debug generate debug-libraries (default)],
[with_debug=$withval],
[with_debug=yes])
AC_MSG_RESULT($with_debug)
test "x$with_debug" = "xyes" && cf_list_models="$cf_list_models debug"
AC_MSG_CHECKING(if you want to build profiling libraries)
AC_ARG_WITH(profile,
[ --with-profile generate profile-libraries],
[with_profile=$withval],
[with_profile=no])
AC_MSG_RESULT($with_profile)
test "x$with_profile" = "xyes" && cf_list_models="$cf_list_models profile"
fi
if test "X$cf_with_cxx_binding" != Xno; then
if test "x$with_shared" = "xyes"; then
AC_MSG_CHECKING(if you want to build C++ shared libraries)
AC_ARG_WITH(cxx-shared,
[ --with-cxx-shared generate C++ shared-libraries],
[with_shared_cxx=$withval],
[with_shared_cxx=no])
AC_MSG_RESULT($with_shared_cxx)
fi
fi
###############################################################################
AC_MSG_CHECKING(for specified models)
test -z "$cf_list_models" && cf_list_models=normal
dnl If we use libtool to generate libraries, then it must be the only
dnl specified model.
test "$with_libtool" != "no" && cf_list_models=libtool
AC_MSG_RESULT($cf_list_models)
### Use the first model as the default, and save its suffix for use in building
### up test-applications.
AC_MSG_CHECKING(for default model)
DFT_LWR_MODEL=`echo "$cf_list_models" | $AWK '{print $1}'`
AC_MSG_RESULT($DFT_LWR_MODEL)
CF_UPPER(DFT_UPR_MODEL,$DFT_LWR_MODEL)dnl
AC_SUBST(DFT_LWR_MODEL)dnl the default model ("normal")
AC_SUBST(DFT_UPR_MODEL)dnl the default model ("NORMAL")
TICS_NAME=tic
AC_SUBST(TICS_NAME)
TINFO_NAME=tinfo
AC_SUBST(TINFO_NAME)
LIB_NAME=ncurses
AC_SUBST(LIB_NAME)
LIB_DIR=../lib
LIB_2ND=../../lib
CF_WITH_LIB_PREFIX(cf_prefix)
LIB_SUFFIX=
AC_SUBST(LIB_SUFFIX)
CF_PATHSEP
###############################################################################
AC_MSG_CHECKING(if you want to build a separate terminfo library)
AC_ARG_WITH(termlib,
[ --with-termlib generate separate terminfo library],
[with_termlib=$withval],
[with_termlib=no])
AC_MSG_RESULT($with_termlib)
AC_MSG_CHECKING(if you want to build a separate tic library)
AC_ARG_WITH(ticlib,
[ --with-ticlib generate separate tic library],
[with_ticlib=$withval],
[with_ticlib=no])
AC_MSG_RESULT($with_ticlib)
dnl Not all ports of gcc support the -g option
if test X"$CC_G_OPT" = X"" ; then
CC_G_OPT='-g'
test -n "$GCC" && test "x${ac_cv_prog_cc_g}" != xyes && CC_G_OPT=''
fi
AC_SUBST(CC_G_OPT)
if test X"$CXX_G_OPT" = X"" ; then
CXX_G_OPT='-g'
test -n "$GXX" && test "x${ac_cv_prog_cxx_g}" != xyes && CXX_G_OPT=''
fi
AC_SUBST(CXX_G_OPT)
AC_MSG_CHECKING(for default loader flags)
-case $DFT_LWR_MODEL in
+case "$DFT_LWR_MODEL" in
(libtool) LD_MODEL='' ;;
(normal) LD_MODEL='' ;;
(debug) LD_MODEL=$CC_G_OPT ;;
(profile) LD_MODEL='-pg';;
(shared) LD_MODEL='' ;;
esac
AC_SUBST(LD_MODEL)dnl the type of link (e.g., -g or -pg)
AC_MSG_RESULT($LD_MODEL)
-case $DFT_LWR_MODEL in
+case "$DFT_LWR_MODEL" in
(shared)
CF_ENABLE_RPATH
AC_MSG_CHECKING(if shared libraries should be relinked during install)
AC_ARG_ENABLE(relink,
[ --disable-relink relink shared libraries during install],
[cf_cv_do_relink=$enableval],
[cf_cv_do_relink=yes])
AC_MSG_RESULT($cf_cv_do_relink)
;;
esac
# we will build libraries one-level down.
rel_builddir=..
CF_SHARED_OPTS
-for model in $cf_list_models; do
- case $model in
+for model in $cf_list_models ; do
+ case "$model" in
(libtool)
CF_WITH_LIBTOOL_OPTS
CF_WITH_EXPORT_SYMS
;;
(shared)
if test "$CC_SHARED_OPTS" = "unknown"; then
AC_ERROR(Shared libraries are not supported in this version)
fi
# workaround for inept transition to PIE vs PIC...
AC_MSG_CHECKING(if current CFLAGS link properly)
AC_TRY_LINK(
[#include <stdio.h>],
- [printf("Hello work\n");],
+ [printf("Hello work\\n");],
[cf_cflags_work=yes],
[cf_cflags_work=no])
AC_MSG_RESULT($cf_cflags_work)
if test "$cf_cflags_work" = no
then
CF_VERBOSE(try to work around by appending shared-options)
CFLAGS="$CFLAGS $CC_SHARED_OPTS"
fi
CF_WITH_VERSIONED_SYMS
;;
esac
done
### Checks for special libraries, must be done up-front.
SHLIB_LIST=""
CF_WITH_GPM
if test "$with_gpm" != no ; then
AC_MSG_CHECKING(if you want to load GPM dynamically)
AC_ARG_WITH(dlsym,
[ --without-dlsym do not use dlsym() to load GPM dynamically],
[with_dlsym=$withval],
[with_dlsym=yes])
AC_MSG_RESULT($with_dlsym)
if test "x$with_dlsym" = xyes ; then
CF_FUNC_DLSYM
if test "x$with_gpm" != xyes ; then
CF_VERBOSE(assuming soname for gpm is $with_gpm)
cf_cv_gpm_soname="$with_gpm"
else
CF_LIB_SONAME([#include <gpm.h>],[if (Gpm_Open(0,0)) Gpm_Close();],gpm)
fi
test "$cf_cv_gpm_soname" != "unknown" && AC_DEFINE_UNQUOTED(LIBGPM_SONAME,"$cf_cv_gpm_soname",[Define as needed to set the gpm share library soname])
SHLIB_LIST="-ldl $SHLIB_LIST"
CF_ADD_LIB(dl,PRIVATE_LIBS)
else
SHLIB_LIST="-lgpm $SHLIB_LIST"
CF_ADD_LIB(gpm,TEST_LIBS)
CF_ADD_LIB(gpm,PRIVATE_LIBS)
fi
AC_DEFINE(HAVE_LIBGPM,1,[Define to 1 if we have the gpm library])
CF_CHECK_GPM_WGETCH
fi
CF_WITH_PCRE2
CF_WITH_SYSMOUSE
# pretend that ncurses==ncursesw==ncursest
AC_MSG_CHECKING(if you want to disable library suffixes)
CF_ARG_DISABLE(lib-suffixes,
[ --disable-lib-suffixes disable library suffixes],
[disable_lib_suffixes=yes],
[disable_lib_suffixes=no],
no)
AC_MSG_RESULT($disable_lib_suffixes)
### If we're building with rpath, try to link non-standard libs that way too.
if test "$DFT_LWR_MODEL" = "shared" && test "x$cf_cv_enable_rpath" != xno; then
CF_DISABLE_RPATH_HACK
fi
+### Depending on the system, someone may use rpath to build ncurses but not
+# want users of the package to rely upon that feature. Give those people an
+# option to suppress that detail from EXTRA_LDFLAGS.
+EXTRA_PKG_LDFLAGS="$EXTRA_LDFLAGS"
+if test -n "$EXTRA_PKG_LDFLAGS"
+then
+ AC_MSG_CHECKING(if you want to disable extra LDFLAGS for package-scripts)
+ CF_ARG_DISABLE(pkg-ldflags,
+ [ --disable-pkg-ldflags disable extra LDFLAGS for package-scripts],
+ [disable_pkg_ldflags=yes],
+ [disable_pkg_ldflags=no],
+ no)
+ AC_MSG_RESULT($disable_pkg_ldflags)
+ test "$disable_pkg_ldflags" = yes && EXTRA_PKG_LDFLAGS=
+fi
+AC_SUBST(EXTRA_PKG_LDFLAGS)
+
###############################################################################
CF_HELP_MESSAGE(Fine-Tuning Your Configuration:)
### use option --with-extra-suffix to append suffix to headers and libraries
AC_MSG_CHECKING(if you wish to append extra suffix to header/library paths)
EXTRA_SUFFIX=
AC_ARG_WITH(extra-suffix,
[ --with-extra-suffix=X append extra suffix to header/library paths],
[case x$withval in
- (no)
+ (xno)
;;
(xyes|x)
EXTRA_SUFFIX=$cf_cv_abi_version
;;
(*)
EXTRA_SUFFIX=$withval
;;
esac
])
AC_MSG_RESULT($EXTRA_SUFFIX)
AC_SUBST(EXTRA_SUFFIX)
### use option --disable-overwrite to leave out the link to -lcurses
AC_MSG_CHECKING(if you wish to install ncurses overwriting curses)
AC_ARG_ENABLE(overwrite,
[ --disable-overwrite put headers in subdir, omit link to -lcurses],
[with_overwrite=$enableval],
[if test "$prefix" = "/usr" ; then with_overwrite=yes; else with_overwrite=no; fi])
AC_MSG_RESULT($with_overwrite)
AC_MSG_CHECKING(if external terminfo-database is used)
AC_ARG_ENABLE(database,
[ --disable-database do not use terminfo, only fallbacks/termcap],
[use_database=$enableval],
[use_database=yes])
AC_MSG_RESULT($use_database)
-case $host_os in
+case "$host_os" in
(os2*)
TERMINFO_SRC='${top_srcdir}/misc/emx.src'
;;
(*)
TERMINFO_SRC='${top_srcdir}/misc/terminfo.src'
;;
esac
AC_SUBST(TERMINFO_SRC)
NCURSES_USE_DATABASE=0
if test "$use_database" != no ; then
NCURSES_USE_DATABASE=1
AC_MSG_CHECKING(which terminfo source-file will be installed)
AC_ARG_WITH(database,
[ --with-database=XXX specify terminfo source to install],
[TERMINFO_SRC=$withval])
AC_MSG_RESULT($TERMINFO_SRC)
AC_MSG_CHECKING(whether to use hashed database instead of directory/tree)
AC_ARG_WITH(hashed-db,
[ --with-hashed-db specify hashed-database library],,
[with_hashed_db=no])
AC_MSG_RESULT($with_hashed_db)
else
with_hashed_db=no
fi
AC_SUBST(NCURSES_USE_DATABASE)
AC_MSG_CHECKING(for list of fallback descriptions)
AC_ARG_WITH(fallbacks,
[ --with-fallbacks=XXX specify list of fallback terminal descriptions],
[with_fallback=$withval],
[with_fallback=])
AC_MSG_RESULT($with_fallback)
case ".$with_fallback" in
(.|.no)
FALLBACK_LIST=
;;
(.yes)
AC_MSG_WARN(expected a list of terminal descriptions)
;;
(*)
FALLBACK_LIST=`echo "$with_fallback" | sed -e 's/,/ /g'`
;;
esac
-USE_FALLBACKS=
-test -z "$FALLBACK_LIST" && USE_FALLBACKS="#"
-AC_SUBST(FALLBACK_LIST)
-AC_SUBST(USE_FALLBACKS)
-
# The fallback feature in ncurses relies upon tic/infocmp outside the build
# tree for generating the terminal descriptions that will be compiled into the
# library. If your toolchain is old, it may not handle current terminal
# databases. Use configure-options to point to the tools which will be used,
# rather than the first ones found on the $PATH.
+AC_CHECK_TOOL(TIC, tic)
+AC_CHECK_TOOL(INFOCMP, infocmp)
if test -n "$FALLBACK_LIST"
then
CF_WITH_PATH_PROG(TIC, tic, [for fallbacks], $PATH:/usr/local/ncurses/bin)
CF_WITH_PATH_PROG(INFOCMP, infocmp, [for fallbacks], $PATH:/usr/local/ncurses/bin)
-else
- : ${TIC:=tic}
- : ${INFOCMP:=infocmp}
+ test -z "$TIC" && FALLBACK_LIST=
+ test -z "$INFOCMP" && FALLBACK_LIST=
+ if test -z "$FALLBACK_LIST"
+ then
+ AC_MSG_WARN(ignoring fallback option because tic/infocmp are not available)
+ fi
fi
AC_SUBST(TIC)
AC_SUBST(INFOCMP)
+USE_FALLBACKS=
+test -z "$FALLBACK_LIST" && USE_FALLBACKS="#"
+AC_SUBST(FALLBACK_LIST)
+AC_SUBST(USE_FALLBACKS)
+
AC_MSG_CHECKING(if you want modern xterm or antique)
AC_ARG_WITH(xterm-new,
[ --without-xterm-new specify if xterm terminfo should be old version],
[with_xterm_new=$withval],
[with_xterm_new=yes])
-case $with_xterm_new in
+case "$with_xterm_new" in
(no) with_xterm_new=xterm-old;;
(*) with_xterm_new=xterm-new;;
esac
AC_MSG_RESULT($with_xterm_new)
WHICH_XTERM=$with_xterm_new
AC_SUBST(WHICH_XTERM)
AC_MSG_CHECKING(if xterm backspace sends BS or DEL)
AC_ARG_WITH(xterm-kbs,
[ --with-xterm-kbs=XXX specify if xterm backspace sends BS or DEL],
[with_xterm_kbs=$withval],
[with_xterm_kbs=BS])
case x$with_xterm_kbs in
(xyes|xno|xBS|xbs|x8)
with_xterm_kbs=BS
;;
(xDEL|xdel|x127)
with_xterm_kbs=DEL
;;
(*)
with_xterm_kbs=$withval
;;
esac
AC_MSG_RESULT($with_xterm_kbs)
XTERM_KBS=$with_xterm_kbs
AC_SUBST(XTERM_KBS)
MAKE_TERMINFO=
if test "$use_database" = no ; then
TERMINFO="${datadir}/terminfo"
MAKE_TERMINFO="#"
else
AC_MSG_CHECKING(for list of terminfo directories)
CF_WITH_PATHLIST(terminfo-dirs,
[ --with-terminfo-dirs=XXX specify list of terminfo directories],
TERMINFO_DIRS,
DATADIR/terminfo,
${datadir}/terminfo)
AC_MSG_RESULT($TERMINFO_DIRS)
test -n "$TERMINFO_DIRS" && AC_DEFINE_UNQUOTED(TERMINFO_DIRS,"$TERMINFO_DIRS",[Define as needed to predefine the TERMINFO_DIR searchlist])
case "x$TERMINFO" in
x???:*)
AC_MSG_WARN(ignoring non-directory/file TERMINFO value)
unset TERMINFO
;;
esac
AC_MSG_CHECKING(for default terminfo directory)
CF_WITH_PATH(default-terminfo-dir,
[ --with-default-terminfo-dir=DIR default terminfo directory],
TERMINFO,
DATADIR/terminfo,
${datadir}/terminfo)
AC_MSG_RESULT($TERMINFO)
AC_DEFINE_UNQUOTED(TERMINFO,"$TERMINFO",[Define to set the default terminal database path])
fi
AC_SUBST(TERMINFO)
AC_SUBST(MAKE_TERMINFO)
### use option --disable-big-core to make tic run on small machines
### We need 4Mb, check if we can allocate 50% more than that.
AC_MSG_CHECKING(if big-core option selected)
AC_ARG_ENABLE(big-core,
[ --disable-big-core assume machine has little memory],
[with_big_core=$enableval],
[AC_TRY_RUN([
#include <stdlib.h>
#include <string.h>
int main() {
unsigned long n = 6000000L;
char *s = malloc(n);
if (s != 0)
s[0] = s[n-1] = 0;
${cf_cv_main_return:-return}(s == 0);
}],
[with_big_core=yes],
[with_big_core=no],
[with_big_core=no])])
AC_MSG_RESULT($with_big_core)
test "x$with_big_core" = "xyes" && AC_DEFINE(HAVE_BIG_CORE,1,[Define to 1 if machine has ample memory for tic])
### ISO C only guarantees 512-char strings, we have tables which load faster
### when constructed using "big" strings. More than the C compiler, the awk
### program is a limit on most vendor UNIX systems. Check that we can build.
AC_MSG_CHECKING(if big-strings option selected)
AC_ARG_ENABLE(big-strings,
[ --disable-big-strings assume compiler has only standard-size strings],
[with_big_strings=$enableval],
[CF_AWK_BIG_PRINTF(12000,with_big_strings)])
AC_MSG_RESULT($with_big_strings)
USE_BIG_STRINGS=0
test "x$with_big_strings" = "xyes" && USE_BIG_STRINGS=1
AC_SUBST(USE_BIG_STRINGS)
### use option --enable-termcap to compile in the termcap fallback support
AC_MSG_CHECKING(if you want termcap-fallback support)
AC_ARG_ENABLE(termcap,
[ --enable-termcap compile in termcap fallback support],
[with_termcap=$enableval],
[with_termcap=no])
AC_MSG_RESULT($with_termcap)
NCURSES_USE_TERMCAP=0
if test "x$with_termcap" != "xyes" ; then
if test "$use_database" = no ; then
if test -z "$with_fallback" ; then
AC_ERROR(You have disabled the database w/o specifying fallbacks)
fi
fi
AC_DEFINE(PURE_TERMINFO,1,[Define to 1 if we should support only terminfo])
else
if test "$with_ticlib" != no ; then
AC_ERROR(Options --with-ticlib and --enable-termcap cannot be combined)
fi
NCURSES_USE_TERMCAP=1
AC_MSG_CHECKING(for list of termcap files)
CF_WITH_PATHLIST(termpath,
[ --with-termpath=XXX specify list of termcap files],
TERMPATH,
/etc/termcap:/usr/share/misc/termcap)
AC_MSG_RESULT($TERMPATH)
test -n "$TERMPATH" && AC_DEFINE_UNQUOTED(TERMPATH,"$TERMPATH",[Define to set the termcap searchlist])
### use option --enable-getcap to use a hacked getcap for reading termcaps
AC_MSG_CHECKING(if fast termcap-loader is needed)
AC_ARG_ENABLE(getcap,
[ --enable-getcap fast termcap load, no xrefs to terminfo],
[with_getcap=$enableval],
[with_getcap=no])
AC_MSG_RESULT($with_getcap)
test "x$with_getcap" = "xyes" && AC_DEFINE(USE_GETCAP,1,[Define to 1 to use fast termcap-loader])
AC_MSG_CHECKING(if translated termcaps will be cached in ~/.terminfo)
AC_ARG_ENABLE(getcap-cache,
[ --enable-getcap-cache cache translated termcaps in ~/.terminfo],
[with_getcap_cache=$enableval],
[with_getcap_cache=no])
AC_MSG_RESULT($with_getcap_cache)
test "x$with_getcap_cache" = "xyes" && AC_DEFINE(USE_GETCAP_CACHE,1,[Define to 1 if translated termcap should be stored in $HOME/.terminfo])
fi
AC_SUBST(NCURSES_USE_TERMCAP)
### Use option --disable-home-terminfo to completely remove ~/.terminfo
AC_MSG_CHECKING(if ~/.terminfo is wanted)
AC_ARG_ENABLE(home-terminfo,
[ --disable-home-terminfo drop ~/.terminfo from terminfo search-path],
[with_home_terminfo=$enableval],
[with_home_terminfo=yes])
AC_MSG_RESULT($with_home_terminfo)
test "x$with_home_terminfo" = "xyes" && AC_DEFINE(USE_HOME_TERMINFO,1,[Define to 1 if $HOME/.terminfo feature is wanted])
AC_MSG_CHECKING(if you want to use restricted environment when running as root)
AC_ARG_ENABLE(root-environ,
[ --disable-root-environ restrict environment when running as root],
[with_root_environ=$enableval],
[with_root_environ=yes])
AC_MSG_RESULT($with_root_environ)
test "x$with_root_environ" = xyes && AC_DEFINE(USE_ROOT_ENVIRON,1,[Define to 1 if environment should be restricted for root user])
### Use option --enable-symlinks to make tic use symlinks, not hard links
### to reduce storage requirements for the terminfo database.
CF_LINK_FUNCS
with_links=no
with_symlinks=no
# soft links (symbolic links) are useful for some systems where hard links do
# not work, or to make it simpler to copy terminfo trees around.
if test "x$ac_cv_func_symlink" = xyes ; then
AC_MSG_CHECKING(if tic should use symbolic links)
AC_ARG_ENABLE(symlinks,
[ --enable-symlinks make tic use symbolic links not hard links],
[with_symlinks=$enableval],
[with_symlinks=no])
AC_MSG_RESULT($with_symlinks)
fi
# If we have hard links and did not choose to use soft links instead, there is
# no reason to make this choice optional - use the hard links.
if test "$with_symlinks" = no ; then
AC_MSG_CHECKING(if tic should use hard links)
if test "x$ac_cv_func_link" = xyes ; then
with_links=yes
else
with_links=no
fi
AC_MSG_RESULT($with_links)
fi
test "x$with_links" = xyes && AC_DEFINE(USE_LINKS,1,[Define to 1 if hardlinks should be used in terminfo database])
test "x$with_symlinks" = xyes && AC_DEFINE(USE_SYMLINKS,1,[Define to 1 if symbolic links should be used in terminfo database])
### use option --enable-broken-linker to force on use of broken-linker support
CF_ENABLE_BROKEN_LINKER
### use option --enable-bsdpad to have tputs process BSD-style prefix padding
AC_MSG_CHECKING(if tputs should process BSD-style prefix padding)
AC_ARG_ENABLE(bsdpad,
[ --enable-bsdpad recognize BSD-style prefix padding],
[with_bsdpad=$enableval],
[with_bsdpad=no])
AC_MSG_RESULT($with_bsdpad)
test "x$with_bsdpad" = xyes && AC_DEFINE(BSD_TPUTS,1,[Define to 1 to recognize BSD-style prefix padding])
### use option --enable-widec to turn on use of wide-character support
NCURSES_CH_T=chtype
NCURSES_LIBUTF8=0
NEED_WCHAR_H=0
NCURSES_MBSTATE_T=0
NCURSES_WCHAR_T=0
NCURSES_WINT_T=0
# Check to define _XOPEN_SOURCE "automatically"
CPPFLAGS_before_XOPEN="$CPPFLAGS"
CF_XOPEN_SOURCE(600)
CPPFLAGS_after_XOPEN="$CPPFLAGS"
# Work around breakage on OS X
CF_SIGWINCH
# Checks for CODESET support.
AM_LANGINFO_CODESET
# use these variables to work around a defect in gcc's fixincludes.
NCURSES_OK_WCHAR_T=
NCURSES_OK_WINT_T=
AC_MSG_CHECKING(if you want wide-character code)
AC_ARG_ENABLE(widec,
[ --enable-widec compile with wide-char/UTF-8 code],
[with_widec=$enableval],
[with_widec=no])
AC_MSG_RESULT($with_widec)
NCURSES_WCWIDTH_GRAPHICS=1
AC_SUBST(NCURSES_WCWIDTH_GRAPHICS)
if test "x$with_widec" = xyes ; then
if test "x$disable_lib_suffixes" = xno ; then
LIB_SUFFIX="w${LIB_SUFFIX}"
fi
AC_DEFINE(USE_WIDEC_SUPPORT,1,[Define to 1 to compile with wide-char/UTF-8 code])
AC_DEFINE(NCURSES_WIDECHAR,1,[Define to 1 to compile with wide-char/UTF-8 code])
CF_CHECK_WCHAR_H
CF_CHECK_WCWIDTH_GRAPHICS
test "$cf_cv_wcwidth_graphics" = no && NCURSES_WCWIDTH_GRAPHICS=0
# with_overwrite=no
NCURSES_CH_T=cchar_t
AC_CHECK_FUNCS(putwc btowc wctob mbtowc wctomb mblen mbrlen mbrtowc wcsrtombs mbsrtowcs wcstombs mbstowcs)
if test "x$ac_cv_func_putwc" != xyes ; then
CF_UTF8_LIB
if test "$cf_cv_utf8_lib" != no ; then
NCURSES_LIBUTF8=1
fi
fi
CF_WCHAR_TYPE(mbstate_t, NCURSES_MBSTATE_T)
CF_WCHAR_TYPE(wchar_t, NCURSES_WCHAR_T, NCURSES_OK_WCHAR_T)
CF_WCHAR_TYPE(wint_t, NCURSES_WINT_T, NCURSES_OK_WINT_T)
if test "$NCURSES_MBSTATE_T" != 0; then
AC_DEFINE(NEED_MBSTATE_T_DEF,1,[Define to 1 if we must declare mbstate_t])
fi
fi
AC_SUBST(NCURSES_CH_T)
AC_SUBST(NCURSES_LIBUTF8)
AC_SUBST(NEED_WCHAR_H)
AC_SUBST(NCURSES_MBSTATE_T)
AC_SUBST(NCURSES_WCHAR_T)
AC_SUBST(NCURSES_WINT_T)
AC_SUBST(NCURSES_OK_WCHAR_T)
AC_SUBST(NCURSES_OK_WINT_T)
### use option --disable-lp64 to allow long chtype
AC_MSG_CHECKING(whether to enable _LP64 definition in curses.h)
AC_ARG_ENABLE(lp64,
[ --disable-lp64 allow chtype to be long (ignore _LP64)],
[with_lp64=$enableval],
[with_lp64=$cf_dft_with_lp64])
AC_MSG_RESULT($with_lp64)
if test "x$with_lp64" = xyes ; then
cf_cv_enable_lp64=1
else
cf_cv_enable_lp64=0
fi
AC_SUBST(cf_cv_enable_lp64)
CF_LARGEFILE
### use option --disable-tparm-varargs to make tparm() conform to X/Open
AC_MSG_CHECKING(if you want tparm not to use X/Open fixed-parameter list)
AC_ARG_ENABLE(tparm-varargs,
[ --disable-tparm-varargs compile tparm() without varargs interface],
[with_tparm_varargs=$enableval],
[with_tparm_varargs=yes])
AC_MSG_RESULT($with_tparm_varargs)
NCURSES_TPARM_VARARGS=0
test "x$with_tparm_varargs" = xyes && NCURSES_TPARM_VARARGS=1
AC_SUBST(NCURSES_TPARM_VARARGS)
### use option --disable-tic-depends to make libtic not explicitly depend on ncurses/ncursesw
if test "$with_ticlib" != no ; then
AC_MSG_CHECKING(if you want tic library to use explicit dependency on ncurses$LIB_SUFFIX library)
AC_ARG_ENABLE(tic-depends,
[ --disable-tic-depends link tic library without explicit dependency on ncurses library],
[with_tic_depends=$enableval],
[with_tic_depends=yes])
AC_MSG_RESULT($with_tic_depends)
else
with_tic_depends=no
fi
### use option --disable-wattr-macros to suppress wattr* macros from curses.h
AC_MSG_CHECKING(if you want to suppress wattr* macros to help with ncurses5/ncurses6 transition)
AC_ARG_ENABLE(wattr-macros,
[ --disable-wattr-macros suppress wattr* macros to help with ncurses5/ncurses6 transition],
[with_wattr_macros=$enableval],
[with_wattr_macros=yes])
if [[ "x$with_wattr_macros" != xyes ]]; then
NCURSES_WATTR_MACROS=0
AC_MSG_RESULT(yes)
else
NCURSES_WATTR_MACROS=1
AC_MSG_RESULT(no)
fi
AC_SUBST(NCURSES_WATTR_MACROS)
CF_WITH_X11_RGB
### use option --with-bool to override bool's type
AC_MSG_CHECKING(for type of bool)
AC_ARG_WITH(bool,
[ --with-bool=TYPE override fallback type of bool variable],
[NCURSES_BOOL="$withval"],
[NCURSES_BOOL=auto])
AC_MSG_RESULT($NCURSES_BOOL)
AC_SUBST(NCURSES_BOOL)
AC_MSG_CHECKING(for alternate terminal capabilities file)
AC_ARG_WITH(caps,
[ --with-caps=alt compile with alternate Caps file],
[TERMINFO_CAPS=Caps.$withval],
[TERMINFO_CAPS=Caps])
test -f "${srcdir}/include/${TERMINFO_CAPS}" || TERMINFO_CAPS=Caps
AC_MSG_RESULT($TERMINFO_CAPS)
AC_SUBST(TERMINFO_CAPS)
### use option --with-chtype to override chtype's type
AC_MSG_CHECKING(for type of chtype)
AC_ARG_WITH(chtype,
[ --with-chtype=TYPE override type of chtype],
[NCURSES_CHTYPE="$withval"],
[NCURSES_CHTYPE=$cf_dft_chtype])
AC_MSG_RESULT($NCURSES_CHTYPE)
### use option --with-ospeed to override ospeed's type
AC_MSG_CHECKING(for type of ospeed)
AC_ARG_WITH(ospeed,
[ --with-ospeed=TYPE override type of ospeed variable],
[NCURSES_OSPEED="$withval"],
[NCURSES_OSPEED=short])
AC_MSG_RESULT($NCURSES_OSPEED)
AC_SUBST(NCURSES_OSPEED)
### use option --with-mmask-t to override mmask_t's type
AC_MSG_CHECKING(for type of mmask_t)
AC_ARG_WITH(mmask-t,
[ --with-mmask-t=TYPE override type of mmask_t],
[NCURSES_MMASK_T="$withval"],
[NCURSES_MMASK_T=$cf_dft_mmask_t])
AC_MSG_RESULT($NCURSES_MMASK_T)
### use option --with-ccharw-max to override CCHARW_MAX size
AC_MSG_CHECKING(for size CCHARW_MAX)
AC_ARG_WITH(ccharw-max,
[ --with-ccharw-max=XXX override size CCHARW_MAX],
[NCURSES_CCHARW_MAX="$withval"],
[NCURSES_CCHARW_MAX=5])
AC_MSG_RESULT($NCURSES_CCHARW_MAX)
AC_SUBST(NCURSES_CCHARW_MAX)
AC_CHECK_SIZEOF([signed char])
if test "$ac_cv_sizeof_signed_char" = 1 ; then
NCURSES_SBOOL="signed char"
else
NCURSES_SBOOL="char"
fi
AC_MSG_CHECKING(if you want to use signed Boolean array in term.h)
AC_ARG_ENABLE(signed-char,
[ --enable-signed-char compile using signed Boolean's in term.h],
[with_signed_char=$enableval],
[with_signed_char=no])
AC_MSG_RESULT($with_signed_char)
test "x$with_signed_char" != xyes && NCURSES_SBOOL="char"
AC_SUBST(NCURSES_SBOOL)
### use option --with-tparm-arg to override tparm's argument type
AC_MSG_CHECKING(for type of tparm args)
AC_ARG_WITH(tparm-arg,
[ --with-tparm-arg=TYPE override parameter type of tparm],
[NCURSES_TPARM_ARG="$withval"],
[NCURSES_TPARM_ARG=$cf_dft_tparm_arg])
AC_MSG_RESULT($NCURSES_TPARM_ARG)
AC_SUBST(NCURSES_TPARM_ARG)
### Enable compiling-in rcs id's
AC_MSG_CHECKING(if RCS identifiers should be compiled-in)
AC_ARG_WITH(rcs-ids,
[ --with-rcs-ids compile-in RCS identifiers],
[with_rcs_ids=$withval],
[with_rcs_ids=no])
AC_MSG_RESULT($with_rcs_ids)
test "x$with_rcs_ids" = xyes && AC_DEFINE(USE_RCS_IDS,1,[Define to 1 to compile-in RCS identifiers])
###############################################################################
CF_MAN_PAGES([ captoinfo clear infocmp infotocap reset tabs tic toe tput tset ])
###############################################################################
CF_HELP_MESSAGE(Extensions:)
### Note that some functions (such as const) are normally disabled anyway.
AC_MSG_CHECKING(if you want to build with function extensions)
AC_ARG_ENABLE(ext-funcs,
[ --disable-ext-funcs disable function-extensions],
[with_ext_funcs=$enableval],
[with_ext_funcs=yes])
AC_MSG_RESULT($with_ext_funcs)
if test "x$with_ext_funcs" = xyes ; then
NCURSES_EXT_FUNCS=1
AC_DEFINE(NCURSES_EXT_FUNCS,1,[Define to 1 to enable ncurses extended functions])
AC_DEFINE(HAVE_ASSUME_DEFAULT_COLORS,1,[Define to 1 to enable assume_default_colors() function in test-programs])
AC_DEFINE(HAVE_CURSES_VERSION,1,[Define to 1 to enable curses_version() function in test-programs])
AC_DEFINE(HAVE_HAS_KEY,1,[Define to 1 to enable has_key() function in test-programs])
AC_DEFINE(HAVE_RESIZETERM,1,[Define to 1 to enable resizeterm() function in test-programs])
AC_DEFINE(HAVE_RESIZE_TERM,1,[Define to 1 to enable resize_term() function in test-programs])
AC_DEFINE(HAVE_TERM_ENTRY_H,1,[Define to 1 to enable term_entry() function in test-programs])
AC_DEFINE(HAVE_USE_DEFAULT_COLORS,1,[Define to 1 to enable use_default_colors() function in test-programs])
AC_DEFINE(HAVE_USE_EXTENDED_NAMES,1,[Define to 1 to enable use_extended_names() function in test-programs])
AC_DEFINE(HAVE_USE_SCREEN,1,[Define to 1 to enable use_screen() function in test-programs])
AC_DEFINE(HAVE_USE_WINDOW,1,[Define to 1 to enable use_window() function in test-programs])
AC_DEFINE(HAVE_WRESIZE,1,[Define to 1 to enable wresize() function in test-programs])
GENERATED_EXT_FUNCS=generated
test "x$with_ext_funcs" = xyes || cf_dft_ext_spfuncs=no
else
NCURSES_EXT_FUNCS=0
GENERATED_EXT_FUNCS=
fi
AC_SUBST(NCURSES_EXT_FUNCS)
AC_SUBST(GENERATED_EXT_FUNCS)
AC_MSG_CHECKING(if you want to build with SCREEN extensions)
AC_ARG_ENABLE(sp-funcs,
[ --enable-sp-funcs enable SCREEN-extensions],
[with_sp_funcs=$enableval],
[with_sp_funcs=$cf_dft_ext_spfuncs])
AC_MSG_RESULT($with_sp_funcs)
if test "x$with_sp_funcs" = xyes ; then
NCURSES_SP_FUNCS=1
AC_DEFINE(NCURSES_SP_FUNCS,1,[Define to 1 to enable SCREEN-extensions])
AC_DEFINE(HAVE_TPUTS_SP,1,[Define to 1 to enable tputs_sp() function in test-programs])
GENERATED_SP_FUNCS=generated
else
NCURSES_SP_FUNCS=0
GENERATED_SP_FUNCS=
fi
AC_SUBST(NCURSES_SP_FUNCS)
AC_SUBST(GENERATED_SP_FUNCS)
AC_MSG_CHECKING(if you want to build with terminal-driver)
AC_ARG_ENABLE(term-driver,
[ --enable-term-driver enable terminal-driver],
[with_term_driver=$enableval],
[with_term_driver=no])
AC_MSG_RESULT($with_term_driver)
if test "x$with_term_driver" = xyes ; then
AC_DEFINE(USE_TERM_DRIVER,1,[Define to 1 to enable terminal-driver])
if test "x$with_termlib" != xno ; then
AC_MSG_ERROR(The term-driver option conflicts with the termlib option)
fi
if test "x$with_sp_funcs" != xyes ; then
AC_MSG_ERROR(The term-driver option relies upon sp-funcs)
fi
fi
### use option --enable-const to turn on use of const beyond that in XSI.
AC_MSG_CHECKING(for extended use of const keyword)
AC_ARG_ENABLE(const,
[ --enable-const compile with extra/non-standard const],
[with_ext_const=$enableval],
[with_ext_const=$cf_dft_ext_const])
AC_MSG_RESULT($with_ext_const)
NCURSES_CONST='/*nothing*/'
if test "x$with_ext_const" = xyes ; then
NCURSES_CONST=const
fi
AC_SUBST(NCURSES_CONST)
### use option --enable-ext-colors to turn on use of colors beyond 16.
AC_MSG_CHECKING(if you want to use extended colors)
AC_ARG_ENABLE(ext-colors,
[ --enable-ext-colors compile for 256-color support],
[with_ext_colors=$enableval],
[with_ext_colors=$cf_dft_ext_colors])
AC_MSG_RESULT($with_ext_colors)
NCURSES_EXT_COLORS=0
if test "x$with_ext_colors" = xyes ; then
if test "x$with_widec" != xyes ; then
AC_MSG_WARN(This option applies only to wide-character library)
else
# cannot be ABI 5 since it changes sizeof(cchar_t)
CF_NCURSES_ABI_6
NCURSES_EXT_COLORS=1
AC_DEFINE(NCURSES_EXT_COLORS,1,[Define to 1 to compile for 256-color support])
AC_DEFINE(HAVE_ALLOC_PAIR,1,[Define to 1 to enable alloc_pair() function])
AC_DEFINE(HAVE_INIT_EXTENDED_COLOR,1,[Define to 1 to enable init_extended_color() function in test-programs])
AC_DEFINE(HAVE_RESET_COLOR_PAIRS,1,[Define to 1 to enable reset_color_pairs() function in test-programs])
fi
fi
AC_SUBST(NCURSES_EXT_COLORS)
### use option --enable-ext-mouse to modify coding to support 5-button mice
AC_MSG_CHECKING(if you want to use extended mouse encoding)
AC_ARG_ENABLE(ext-mouse,
[ --enable-ext-mouse compile for extended mouse-encoding],
[with_ext_mouse=$enableval],
[with_ext_mouse=$cf_dft_ext_mouse])
AC_MSG_RESULT($with_ext_mouse)
NCURSES_MOUSE_VERSION=1
if test "x$with_ext_mouse" = xyes ; then
NCURSES_MOUSE_VERSION=2
CF_NCURSES_ABI_6
fi
AC_SUBST(NCURSES_MOUSE_VERSION)
### use option --enable-ext-putwin to turn on extended screendumps
AC_MSG_CHECKING(if you want to use extended putwin/screendump)
AC_ARG_ENABLE(ext-putwin,
[ --enable-ext-putwin compile with extended putwin/screendump],
[with_ext_putwin=$enableval],
[with_ext_putwin=$cf_dft_ext_putwin])
AC_MSG_RESULT($with_ext_putwin)
if test "x$with_ext_putwin" = xyes ; then
AC_DEFINE(NCURSES_EXT_PUTWIN,1,[Define to 1 to compile with extended putwin/screendump])
fi
AC_MSG_CHECKING(if you want \$NCURSES_NO_PADDING code)
AC_ARG_ENABLE(no-padding,
[ --enable-no-padding compile with $NCURSES_NO_PADDING code],
[with_no_padding=$enableval],
[with_no_padding=$with_ext_funcs])
AC_MSG_RESULT($with_no_padding)
test "x$with_no_padding" = xyes && AC_DEFINE(NCURSES_NO_PADDING,1,[Define to 1 to compile with $NCURSES_NO_PADDING code])
### use option --enable-sigwinch to turn on use of SIGWINCH logic
AC_MSG_CHECKING(if you want SIGWINCH handler)
AC_ARG_ENABLE(sigwinch,
[ --enable-sigwinch compile with SIGWINCH handler],
[with_sigwinch=$enableval],
[with_sigwinch=$with_ext_funcs])
AC_MSG_RESULT($with_sigwinch)
test "x$with_sigwinch" = xyes && AC_DEFINE(USE_SIGWINCH,1,[Define to 1 to compile with SIGWINCH handler])
### use option --enable-tcap-names to allow user to define new capabilities
AC_MSG_CHECKING(if you want user-definable terminal capabilities like termcap)
AC_ARG_ENABLE(tcap-names,
[ --enable-tcap-names compile with user-definable terminal capabilities],
[with_tcap_names=$enableval],
[with_tcap_names=$with_ext_funcs])
AC_MSG_RESULT($with_tcap_names)
NCURSES_XNAMES=0
test "x$with_tcap_names" = xyes && NCURSES_XNAMES=1
AC_SUBST(NCURSES_XNAMES)
##############################################################################
CF_HELP_MESSAGE(Reentrant Code:)
CF_WITH_PTHREAD
if test "x$with_pthread" != xno; then
AC_CHECK_FUNC(pthread_kill,[
AC_MSG_CHECKING(if you want to allow EINTR in wgetch with pthreads)
AC_ARG_ENABLE(pthreads-eintr,
[ --enable-pthreads-eintr enable EINTR in wgetch with pthreads],
[use_pthreads_eintr=$enableval],
[use_pthreads_eintr=no])
AC_MSG_RESULT($use_pthreads_eintr)
if test "x$use_pthreads_eintr" = xyes ; then
AC_DEFINE(USE_PTHREADS_EINTR,1,[Define to 1 to enable EINTR in wgetch with pthreads])
fi])
AC_MSG_CHECKING(if you want to use weak-symbols for pthreads)
AC_ARG_ENABLE(weak-symbols,
[ --enable-weak-symbols enable weak-symbols for pthreads],
[use_weak_symbols=$enableval],
[use_weak_symbols=no])
AC_MSG_RESULT($use_weak_symbols)
if test "x$use_weak_symbols" = xyes ; then
CF_WEAK_SYMBOLS
else
cf_cv_weak_symbols=no
fi
if test "x$cf_cv_weak_symbols" = xyes ; then
AC_DEFINE(USE_WEAK_SYMBOLS,1,[Define to 1 to enable weak-symbols for pthreads])
fi
fi
PTHREAD=
if test "x$with_pthread" = "xyes" ; then
AC_DEFINE(USE_PTHREADS,1,[Define to 1 to use pthreads feature])
enable_reentrant=yes
if test "x$cf_cv_weak_symbols" = xyes ; then
PTHREAD=-lpthread
CF_ADD_LIB(pthread,PRIVATE_LIBS)
fi
fi
AC_SUBST(PTHREAD)
# Reentrant code has to be opaque; there's little advantage to making ncurses
# opaque outside of that, so there is no --enable-opaque option. We can use
# this option without --with-pthreads, but this will be always set for
# pthreads.
AC_MSG_CHECKING(if you want reentrant code)
AC_ARG_ENABLE(reentrant,
[ --enable-reentrant compile with reentrant code],
[with_reentrant=$enableval],
[with_reentrant=no])
AC_MSG_RESULT($with_reentrant)
if test "x$with_reentrant" = xyes ; then
cf_cv_enable_reentrant=1
cf_cv_enable_opaque="NCURSES_INTERNALS"
NCURSES_SIZE_T=int
if test "x$cf_cv_weak_symbols" = xyes ; then
CF_REMOVE_LIB(LIBS,$LIBS,pthread)
CF_ADD_LIB(pthread,TEST_LIBS)
CF_ADD_LIB(pthread,TEST_LIBS2)
CF_ADD_LIB(pthread,PRIVATE_LIBS)
else
# when not using weak symbols but with_reentrant,
# add 't' to the library suffix on all platforms
# except cygwin, where we only do that if ALSO
# compiling with full thread support.
case "$host" in
(*cygwin* | *msys*)
if test "$with_pthread" = "yes" ; then
if test "x$disable_lib_suffixes" = "xno" ; then
LIB_SUFFIX="t${LIB_SUFFIX}"
fi
fi ;;
(*)
if test "x$disable_lib_suffixes" = "xno" ; then
LIB_SUFFIX="t${LIB_SUFFIX}"
fi
;;
esac
fi
AC_DEFINE(USE_REENTRANT,1,[Define to 1 to use reentrant feature])
CF_NCURSES_ABI_6
else
cf_cv_enable_reentrant=0
cf_cv_enable_opaque="NCURSES_OPAQUE"
NCURSES_SIZE_T=short
fi
AC_SUBST(cf_cv_enable_reentrant)
AC_SUBST(cf_cv_enable_opaque)
AC_SUBST(NCURSES_SIZE_T)
AC_MSG_CHECKING(if you want opaque curses-library structures)
CF_ARG_ENABLE(opaque-curses,
[ --enable-opaque-curses make curses WINDOW, etc., "opaque"],
[enable_opaque_curses=yes],[
test "$cf_cv_enable_reentrant" = 1 && enable_opaque_curses=yes
test "$cf_cv_enable_reentrant" = 1 || enable_opaque_curses=no
])
AC_MSG_RESULT($enable_opaque_curses)
test "$cf_cv_enable_reentrant" = 1 && \
test "$enable_opaque_curses" = no && \
AC_MSG_ERROR(reentrant configuration requires opaque library)
AC_MSG_CHECKING(if you want opaque form-library structures)
AC_ARG_ENABLE(opaque-form,
[ --enable-opaque-form make form-library structures "opaque"],
[enable_opaque_form=yes],[enable_opaque_form=no])
AC_MSG_RESULT($enable_opaque_form)
AC_MSG_CHECKING(if you want opaque menu-library structures)
AC_ARG_ENABLE(opaque-menu,
[ --enable-opaque-menu make menu-library structures "opaque"],
[enable_opaque_menu=yes],[enable_opaque_menu=no])
AC_MSG_RESULT($enable_opaque_menu)
AC_MSG_CHECKING(if you want opaque panel-library structures)
AC_ARG_ENABLE(opaque-panel,
[ --enable-opaque-panel make panel-library structures "opaque"],
[enable_opaque_panel=yes],[enable_opaque_panel=no])
AC_MSG_RESULT($enable_opaque_panel)
NCURSES_OPAQUE=0; test "$enable_opaque_curses" = yes && NCURSES_OPAQUE=1
NCURSES_OPAQUE_FORM=0; test "$enable_opaque_form" = yes && NCURSES_OPAQUE_FORM=1
NCURSES_OPAQUE_MENU=0; test "$enable_opaque_menu" = yes && NCURSES_OPAQUE_MENU=1
NCURSES_OPAQUE_PANEL=0; test "$enable_opaque_panel" = yes && NCURSES_OPAQUE_PANEL=1
AC_SUBST(NCURSES_OPAQUE)
AC_SUBST(NCURSES_OPAQUE_FORM)
AC_SUBST(NCURSES_OPAQUE_MENU)
AC_SUBST(NCURSES_OPAQUE_PANEL)
### Allow using a different wrap-prefix
if test "$cf_cv_enable_reentrant" != 0 || test "$BROKEN_LINKER" = 1 ; then
AC_MSG_CHECKING(for prefix used to wrap public variables)
AC_ARG_WITH(wrap-prefix,
[ --with-wrap-prefix=XXX override prefix used for public variables],
[NCURSES_WRAP_PREFIX=$withval],
[NCURSES_WRAP_PREFIX=_nc_])
AC_MSG_RESULT($NCURSES_WRAP_PREFIX)
else
NCURSES_WRAP_PREFIX=_nc_
fi
AC_SUBST(NCURSES_WRAP_PREFIX)
AC_DEFINE_UNQUOTED(NCURSES_WRAP_PREFIX,"$NCURSES_WRAP_PREFIX",[Define to override _nc_ prefix])
###############################################################################
# These options are relatively safe to experiment with.
CF_HELP_MESSAGE(Development Code:)
AC_MSG_CHECKING(if you want all development code)
AC_ARG_WITH(develop,
[ --without-develop disable development options],
[with_develop=$withval],
[with_develop=no])
AC_MSG_RESULT($with_develop)
### use option --enable-hard-tabs to turn on use of hard-tabs optimize
AC_MSG_CHECKING(if you want hard-tabs code)
AC_ARG_ENABLE(hard-tabs,
[ --enable-hard-tabs compile with hard-tabs code],,
[enable_hard_tabs=$with_develop])
AC_MSG_RESULT($enable_hard_tabs)
test "x$enable_hard_tabs" = xyes && AC_DEFINE(USE_HARD_TABS,1,[Define to 1 to compile with hard-tabs code])
### use option --enable-xmc-glitch to turn on use of magic-cookie optimize
AC_MSG_CHECKING(if you want limited support for xmc)
AC_ARG_ENABLE(xmc-glitch,
[ --enable-xmc-glitch compile with support for xmc (magic-cookie)],,
[enable_xmc_glitch=$with_develop])
AC_MSG_RESULT($enable_xmc_glitch)
test "x$enable_xmc_glitch" = xyes && AC_DEFINE(USE_XMC_SUPPORT,1,[Define to 1 to compile with support for xmc (magic-cookie)])
###############################################################################
# These are just experimental, probably should not be in a package:
CF_HELP_MESSAGE(Experimental Code:)
AC_MSG_CHECKING(if you do not want to assume colors are white-on-black)
AC_ARG_ENABLE(assumed-color,
[ --disable-assumed-color do not assume anything about default-colors],
[with_assumed_color=$enableval],
[with_assumed_color=yes])
AC_MSG_RESULT($with_assumed_color)
test "x$with_assumed_color" = xyes && AC_DEFINE(USE_ASSUMED_COLOR,1,[Define to 1 to assume things about default-colors])
### use option --enable-hashmap to turn on use of hashmap scrolling logic
AC_MSG_CHECKING(if you want hashmap scrolling-optimization code)
AC_ARG_ENABLE(hashmap,
[ --disable-hashmap compile without hashmap scrolling-optimization],
[with_hashmap=$enableval],
[with_hashmap=yes])
AC_MSG_RESULT($with_hashmap)
test "x$with_hashmap" = xyes && AC_DEFINE(USE_HASHMAP,1,[Define to 1 to compile with hashmap scrolling-optimization])
### use option --enable-colorfgbg to turn on use of $COLORFGBG environment
AC_MSG_CHECKING(if you want colorfgbg code)
AC_ARG_ENABLE(colorfgbg,
[ --enable-colorfgbg compile-in experimental $COLORFGBG code],
[with_colorfgbg=$enableval],
[with_colorfgbg=no])
AC_MSG_RESULT($with_colorfgbg)
test "x$with_colorfgbg" = xyes && AC_DEFINE(USE_COLORFGBG,1,[Define to 1 to compile-in experimental $COLORFGBG code])
+### use option --enable-fvisibility to turn on use of gcc-specific feature
+AC_MSG_CHECKING(if you want to use gcc -fvisibility option)
+AC_ARG_ENABLE(fvisibility,
+ [ --enable-fvisibility compile with -fvisibility=hidden],
+ [cf_with_fvisibility=$enableval],
+ [cf_with_fvisibility=no])
+AC_MSG_RESULT($cf_with_fvisibility)
+
+NCURSES_IMPEXP=
+NCURSES_CXX_IMPEXP=
+if test "x$cf_with_fvisibility" = xyes; then
+ CF_CHECK_FVISIBILITY($CC,CFLAGS,cf_cv_fvisibility_hidden)
+ if test "x$cf_cv_fvisibility_hidden" = xyes
+ then
+ CF_ADD_CFLAGS([-fvisibility=hidden])
+ NCURSES_IMPEXP="__attribute__ ((visibility(\"default\")))"
+ fi
+ if test -n "$CXX"
+ then
+ AC_LANG_PUSH(C++)
+ CF_CHECK_FVISIBILITY($CXX,CXXFLAGS,cf_cv_fvisibility_hidden2)
+ if test "x$cf_cv_fvisibility_hidden2" = xyes
+ then
+ CF_ADD_CXXFLAGS([-fvisibility=hidden])
+ NCURSES_CXX_IMPEXP="__attribute__ ((visibility(\"default\")))"
+ fi
+ AC_LANG_POP
+ fi
+fi
+AC_SUBST(NCURSES_IMPEXP)
+AC_SUBST(NCURSES_CXX_IMPEXP)
+
### use option --enable-interop to turn on use of bindings used for interop
AC_MSG_CHECKING(if you want interop bindings)
AC_ARG_ENABLE(interop,
[ --enable-interop compile-in interop bindings],
[with_exp_interop=$enableval],
[with_exp_interop=$cf_dft_interop])
AC_MSG_RESULT($with_exp_interop)
NCURSES_INTEROP_FUNCS=0
test "x$with_exp_interop" = xyes && NCURSES_INTEROP_FUNCS=1
AC_SUBST(NCURSES_INTEROP_FUNCS)
AC_MSG_CHECKING(if you want experimental safe-sprintf code)
AC_ARG_ENABLE(safe-sprintf,
[ --enable-safe-sprintf compile with experimental safe-sprintf code],
[with_safe_sprintf=$enableval],
[with_safe_sprintf=no])
AC_MSG_RESULT($with_safe_sprintf)
### use option --disable-scroll-hints to turn off use of scroll-hints scrolling logic
# when hashmap is used scroll hints are useless
if test "$with_hashmap" = no ; then
AC_MSG_CHECKING(if you want to experiment without scrolling-hints code)
AC_ARG_ENABLE(scroll-hints,
[ --disable-scroll-hints compile without scroll-hints code],
[with_scroll_hints=$enableval],
[with_scroll_hints=yes])
AC_MSG_RESULT($with_scroll_hints)
test "x$with_scroll_hints" = xyes && AC_DEFINE(USE_SCROLL_HINTS,1,[Define to 1 to compile without scroll-hints code])
fi
AC_MSG_CHECKING(if you want wgetch-events code)
AC_ARG_ENABLE(wgetch-events,
[ --enable-wgetch-events compile with wgetch-events code],
[with_wgetch_events=$enableval],
[with_wgetch_events=no])
AC_MSG_RESULT($with_wgetch_events)
-test "x$with_wgetch_events" = xyes && AC_DEFINE(NCURSES_WGETCH_EVENTS,1,[Define to 1 to compile with wgetch-events code])
+if test "x$with_wgetch_events" = xyes ; then
+ AC_DEFINE(NCURSES_WGETCH_EVENTS,1,[Define to 1 to compile with wgetch-events code])
+ NCURSES_WGETCH_EVENTS=1
+else
+ NCURSES_WGETCH_EVENTS=0
+fi
+AC_SUBST(NCURSES_WGETCH_EVENTS)
+
+case "$cf_cv_system_name" in
+(*mingw32*|*mingw64*|*-msvc*)
+ AC_MSG_CHECKING(if you want experimental-Windows driver)
+ AC_ARG_ENABLE(exp-win32,
+ [ --enable-exp-win32 compile with experimental-Windows driver],
+ [with_exp_win32=$enableval],
+ [with_exp_win32=no])
+ AC_MSG_RESULT($with_exp_win32)
+ if test "x$with_exp_win32" = xyes
+ then
+ AC_DEFINE(EXP_WIN32_DRIVER,1,[Define to 1 to compile with experimental win32 driver])
+ EXP_WIN32_DRIVER=1
+ INTERNALS_HDR='[$](INCDIR)/nc_win32.h'
+ else
+ INTERNALS_HDR='[$](INCDIR)/nc_mingw.h'
+ EXP_WIN32_DRIVER=0
+ fi
+ ;;
+(*)
+ EXP_WIN32_DRIVER=0
+ INTERNALS_HDR=
+ ;;
+esac
+AC_SUBST(EXP_WIN32_DRIVER)
+AC_SUBST(INTERNALS_HDR)
###############################################################################
CF_HELP_MESSAGE(Testing/development Options:)
### use option --disable-echo to suppress full display compiling commands
CF_DISABLE_ECHO
if test "x$enable_echo" = xyes; then
ECHO_LINK=
else
ECHO_LINK='@ echo linking $@ ... ;'
test -n "$LIBTOOL" && LIBTOOL="$LIBTOOL --silent"
test -n "$LIBTOOL_CXX" && LIBTOOL_CXX="$LIBTOOL_CXX --silent"
fi
AC_SUBST(ECHO_LINK)
# --disable-stripping is used for debugging
CF_INSTALL_OPTS
# If we're avoiding relinking of shared libraries during install, that is to
# avoid modifying the build-tree. For the same reason, avoid doing ranlib if
# the install program has "-p" (for preserving timestamps).
cf_cv_do_reranlib=yes
if test "x$cf_cv_install_p" = xyes
then
if test "x$cf_cv_do_relink" != xyes
then
cf_cv_do_reranlib=no
INSTALL_OPT_P="-p"
INSTALL_LIB="$INSTALL_LIB $INSTALL_OPT_P"
fi
fi
AC_SUBST(INSTALL_OPT_P)
### use option --enable-warnings to turn on all gcc warnings
-AC_MSG_CHECKING(if you want to see compiler warnings)
-AC_ARG_ENABLE(warnings,
- [ --enable-warnings build: turn on GCC compiler warnings],
- [with_warnings=$enableval])
-AC_MSG_RESULT($with_warnings)
+CF_ENABLE_WARNINGS(Wno-unknown-pragmas Wswitch-enum,yes)
-if test "x$with_warnings" = "xyes"; then
+if test "x$enable_warnings" = "xyes"; then
CF_ADD_ADAFLAGS(-gnatg)
- CF_GCC_WARNINGS(Wno-unknown-pragmas Wswitch-enum)
if test "x$cf_with_cxx" = xyes ; then
CF_GXX_WARNINGS(Wno-unused)
fi
fi
-CF_GCC_ATTRIBUTES
CF_ENABLE_STRING_HACKS
### use option --enable-assertions to turn on generation of assertion code
AC_MSG_CHECKING(if you want to enable runtime assertions)
AC_ARG_ENABLE(assertions,
[ --enable-assertions test: turn on generation of assertion code],
[with_assertions=$enableval],
[with_assertions=no])
AC_MSG_RESULT($with_assertions)
if test -n "$GCC"
then
if test "$with_assertions" = no
then
CPPFLAGS="$CPPFLAGS -DNDEBUG"
else
CF_ADD_ADAFLAGS(-gnata)
fi
fi
### use option --disable-leaks to suppress "permanent" leaks, for testing
CF_DISABLE_LEAKS
AC_DEFINE(HAVE_NC_ALLOC_H,1,[Define to 1 if we have nc_alloc.h header])
### use option --enable-expanded to generate certain macros as functions
AC_ARG_ENABLE(expanded,
[ --enable-expanded test: generate functions for certain macros],
[test "x$enableval" = xyes && AC_DEFINE(NCURSES_EXPANDED,1,[Define to 1 to generate functions for certain macros])])
### use option --disable-macros to suppress macros in favor of functions
AC_ARG_ENABLE(macros,
[ --disable-macros test: use functions rather than macros],
[test "$enableval" = no && AC_DEFINE(NCURSES_NOMACROS,1,[Define to 1 to use functions rather than macros])])
# Normally we only add trace() to the debug-library. Allow this to be
# extended to all models of the ncurses library:
cf_all_traces=no
case "$CFLAGS $CPPFLAGS" in
(*-DTRACE*)
cf_all_traces=yes
;;
esac
AC_MSG_CHECKING(whether to add trace feature to all models)
AC_ARG_WITH(trace,
[ --with-trace test: add trace() function to all models of ncurses],
[cf_with_trace=$withval],
[cf_with_trace=$cf_all_traces])
AC_MSG_RESULT($cf_with_trace)
if test "x$cf_with_trace" = xyes ; then
LIB_TRACING=all
ADA_TRACE=TRUE
CF_ADD_CFLAGS(-DTRACE)
AC_DEFINE(HAVE__TRACEF,1,[Define to 1 if we have _tracef function])
else
LIB_TRACING=DEBUG
ADA_TRACE=FALSE
fi
AC_SUBST(ADA_TRACE)
CF_DISABLE_GNAT_PROJECTS
### Checks for libraries.
-case $cf_cv_system_name in
+case "$cf_cv_system_name" in
(*mingw32*|*mingw64*)
+ if test "x$with_exp_win32" = xyes ; then
+ CPPFLAGS="$CPPFLAGS -DWINVER=0x0600 -DWIN32_LEAN_AND_MEAN"
+ else
CPPFLAGS="$CPPFLAGS -DWINVER=0x0501 -DWIN32_LEAN_AND_MEAN"
+ fi
# Note: WINVER may be a problem with Windows 10
;;
(*)
AC_CHECK_FUNC(gettimeofday,
AC_DEFINE(HAVE_GETTIMEOFDAY,1,[Define to 1 if we have gettimeofday function]),[
AC_CHECK_LIB(bsd, gettimeofday,
AC_DEFINE(HAVE_GETTIMEOFDAY,1,[Define to 1 if we have gettimeofday function])
CF_ADD_LIB(bsd))])dnl CLIX: bzero, select, gettimeofday
;;
esac
CF_MATH_LIB(MATH_LIB,pow(sin(x),x))
AC_SUBST(MATH_LIB)
### Checks for header files.
AC_STDC_HEADERS
AC_HEADER_DIRENT
AC_HEADER_TIME
CF_REGEX
dnl These are some other potentially nonportable headers.
AC_CHECK_HEADERS( \
fcntl.h \
getopt.h \
limits.h \
locale.h \
math.h \
poll.h \
-sys/bsdtypes.h \
sys/ioctl.h \
sys/param.h \
sys/poll.h \
sys/select.h \
sys/time.h \
sys/times.h \
ttyent.h \
unistd.h \
wctype.h \
)
CF_GETOPT_HEADER
CF_CHECK_ENVIRON(environ)
CF_CHECK_GETENV
if test "x$cf_cv_consistent_getenv" = xno && \
test "x$cf_with_trace" = xyes
then
AC_MSG_WARN(The NCURSES_TRACE environment variable is not supported with this configuration)
fi
-# check for ISC (this may also define _POSIX_SOURCE)
-# Note: even non-Posix ISC needs <sys/bsdtypes.h> to declare fd_set
-if test "x$ISC" = xyes ; then
- AC_CHECK_LIB(cposix,main)
- AC_CHECK_LIB(inet,bzero,CF_ADD_LIB(inet))dnl also 'select()'
-fi
-
CF_SYS_TIME_SELECT
### checks for compiler characteristics
AC_LANG_C
AC_C_CONST
CF_C_INLINE(NCURSES_INLINE,1200)
CF_SIG_ATOMIC_T
-if test $NCURSES_CHTYPE = auto ; then
+if test "$NCURSES_CHTYPE" = auto ; then
CF_TYPEOF_CHTYPE
else
cf_cv_typeof_chtype=$NCURSES_CHTYPE
fi
test "$cf_cv_typeof_chtype" = unsigned && cf_cv_typeof_chtype=""
AC_SUBST(cf_cv_typeof_chtype)
CF_UNSIGNED_LITERALS
cf_cv_1UL="1"
test ".$cf_cv_unsigned_literals" = .yes && cf_cv_1UL="${cf_cv_1UL}U"
test ".$cf_cv_typeof_chtype" = .long && cf_cv_1UL="${cf_cv_1UL}L"
AC_SUBST(cf_cv_1UL)
-if test $NCURSES_MMASK_T = auto ; then
+if test "$NCURSES_MMASK_T" = auto ; then
cf_cv_typeof_mmask_t=long
else
cf_cv_typeof_mmask_t=$NCURSES_MMASK_T
fi
test "$cf_cv_typeof_mmask_t" = unsigned && cf_cv_typeof_mmask_t=""
AC_SUBST(cf_cv_typeof_mmask_t)
### Checks for external-data
CF_ERRNO
CF_LINK_DATAONLY
### Checks for library functions.
AC_CHECK_FUNCS( \
getcwd \
getegid \
geteuid \
getopt \
getttynam \
issetugid \
localeconv \
poll \
putenv \
remove \
select \
setbuf \
setbuffer \
setenv \
setvbuf \
sigaction \
sigvec \
+snprintf \
strdup \
strstr \
sysconf \
tcgetpgrp \
times \
tsearch \
vsnprintf \
)
if test "x$ac_cv_func_getopt" = xno && \
test "x$cf_with_progs$cf_with_tests" != xnono; then
AC_MSG_ERROR(getopt is required for building programs)
fi
if test "x$with_safe_sprintf" = xyes
then
if test "x$ac_cv_func_vsnprintf" = xyes
then
AC_MSG_WARN(will use vsnprintf instead of safe-sprintf option)
else
AC_DEFINE(USE_SAFE_SPRINTF,1,[Define to 1 to compile with experimental safe-sprintf code])
fi
fi
if test "x$with_getcap" = "xyes" ; then
CF_CGETENT
fi
CF_ISASCII
CF_STRUCT_SIGACTION
CF_FUNC_NANOSLEEP
CF_FUNC_TERMIOS
CF_FUNC_VSSCANF
CF_MKSTEMP
# setup for prototype of fallback for vsscanf()
CF_SUBST_IF(["$cf_cv_func_vsscanf" = vsscanf], HAVE_VSSCANF, 1, 0)
dnl FIXME (may need this) AC_SYS_RESTARTABLE_SYSCALLS
if test "x$cross_compiling" = xyes ; then
AC_MSG_WARN(cross compiling: assume setvbuf params not reversed)
else
AC_FUNC_SETVBUF_REVERSED
fi
AC_CHECK_TYPE(intptr_t, long)
AC_CHECK_TYPE(ssize_t, int)
CF_TYPE_SIGACTION
CF_SIZECHANGE
CF_FUNC_MEMMOVE
CF_FUNC_POLL
CF_VA_COPY
AC_FUNC_VFORK
CF_FOPEN_BIN_R
# special check for test/ditto.c
CF_FUNC_OPENPTY
if test "$cf_cv_func_openpty" != no ; then
AC_DEFINE_UNQUOTED(USE_OPENPTY_HEADER,<$cf_cv_func_openpty>,[Define to actual header for openpty function])
AC_DEFINE(USE_XTERM_PTY,1,[Define to 1 if we should assume xterm pseudoterminal interface])
if test "x$cf_cv_lib_util" = xyes ; then
CF_ADD_LIB(util,TEST_LIBS)
fi
fi
AC_SUBST(TEST_LIBS)
AC_SUBST(TEST_LIBS2)
if test "$with_hashed_db" != no ; then
AC_DEFINE(USE_HASHED_DB,1,[Define to 1 if we should build terminfo in hashed database])
CF_HASHED_DB($with_hashed_db)
fi
dnl We'll do our own -g libraries, unless the user's overridden via $CFLAGS
-if test -z "$cf_user_CFLAGS" && test "$with_no_leaks" = no ; then
+if test -z "$cf_user_CFLAGS" && test "$enable_leaks" = yes ; then
CF_STRIP_G_OPT(CFLAGS)
CF_STRIP_G_OPT(CXXFLAGS)
fi
# Just in case, check if the C compiler has a bool type.
CF_BOOL_DECL(cf_cv_cc_bool_type)
# Check for C++ compiler characteristics (and ensure that it's there!)
if test -n "$CXX" ; then
AC_LANG_CPLUSPLUS
CF_STDCPP_LIBRARY
CF_PROG_CC_C_O(CXX,[$CXXFLAGS $CPPFLAGS])
- case $GXX_VERSION in
- (1*|2.[0-6]*)
+ case "$GXX_VERSION" in
+ (1.*|2.[[0-6]]*|[[1-9]][[0-9]].*)
cf_cxx_library=yes
;;
(*-2.7*|2.7*)
CF_GPP_LIBRARY
;;
(*)
cf_cxx_library=no
;;
esac
AC_CHECK_HEADERS(typeinfo)
CF_CXX_IOSTREAM_NAMESPACE
CF_BOOL_DECL
CF_BOOL_SIZE
CF_ETIP_DEFINES
CF_CPP_PARAM_INIT
CF_CPP_STATIC_CAST
CF_CXX_AR_FLAGS
else
cf_cxx_library=no
cf_cv_builtin_bool=1
# Just because we are not configuring against C++ right now does not
# mean that a user will not want to use C++. Some distributors disable
# the C++ portion of this configuration as a shortcut (or just to avoid
# compiling the demo in the c++ directory). So we need a reasonable
# default for the 'bool' type.
#
# Caveat: since the storage of the bool type is not standardized, it
# may change.
if test "$NCURSES_BOOL" != auto ; then
cf_cv_type_of_bool=$NCURSES_BOOL
cf_cv_header_stdbool_h=0
else
if test "$cf_cv_header_stdbool_h" = 1 ; then
CF_BOOL_SIZE
else
AC_MSG_CHECKING(for fallback type of bool)
case "$host_cpu" in
(i?86) cf_cv_type_of_bool=char ;;
(*) cf_cv_type_of_bool=int ;;
esac
AC_MSG_RESULT($cf_cv_type_of_bool)
fi
fi
fi
AC_SUBST(CXXLIBS)
# If the C compiler did not declare bool, and we did not determine that the C++
# compiler does not declare bool, turn on an ifdef in curses.h that makes the
# ncurses library use the same type as C++ bool. Note that this allows one to
# specify the type of bool in a configure-script option and postpone
# integration with the C++ compiler provided that the types are compatible.
USE_CXX_BOOL=1
-if test $cf_cv_cc_bool_type = 1
+if test "$cf_cv_cc_bool_type" = 1
then
# oops: C has a bool. Unlikely, but C++ could differ.
USE_CXX_BOOL=0
-elif test $cf_cv_builtin_bool = 0
+elif test "$cf_cv_builtin_bool" = 0
then
# C++ has no bool
USE_CXX_BOOL=0
else
# this is the normal case
USE_CXX_BOOL='defined(__cplusplus)'
fi
AC_SUBST(USE_CXX_BOOL)
CF_HELP_MESSAGE(Ada Binding Options:)
dnl If the Ada95 source-tree is present, add that to the build unless it will
dnl not work, or was not requested.
if test -f "${srcdir}/Ada95/Makefile.in" ; then
dnl libtool does not know anything about GNAT, though a change made in 1998
dnl provided for it "someday". Disable the ada subtree if we are using
dnl libtool -TD 20070714
if test "$cf_with_ada" != "no" ; then
if test "$with_libtool" != "no"; then
AC_MSG_WARN(libtool does not support Ada - disabling feature)
cf_with_ada=no
fi
fi
dnl Check for availability of GNU Ada Translator (GNAT).
dnl At the moment we support no other Ada compiler.
if test "$cf_with_ada" != "no" ; then
CF_PROG_GNAT
if test "x$cf_cv_prog_gnat_correct" = xyes; then
CF_ADD_ADAFLAGS(-gnatpn)
CF_FIXUP_ADAFLAGS
CF_GNATPREP_OPT_T
CF_GNAT_GENERICS
CF_GNAT_SIGINT
CF_GNAT_PROJECTS
CF_WITH_ADA_COMPILER
cf_ada_package=terminal_interface
AC_SUBST(cf_ada_package)
CF_WITH_ADA_INCLUDE
CF_WITH_ADA_OBJECTS
CF_WITH_ADA_SHAREDLIB
# allow the Ada binding to be renamed
CF_WITH_ADA_LIBNAME(AdaCurses)
fi
fi
else
cf_with_ada=no
fi
# do this "late" to avoid conflict with header-checks
if test "x$with_widec" = xyes ; then
AC_CHECK_SIZEOF(wchar_t)
# cross-compiling to mingw can run into the problem that attempting to
# link with the regex library fails, causing the test to not set this to
# a number. "recent" autoconf does not address this problem either -TD
if test -z "$ac_cv_sizeof_wchar_t"
then
CF_VERBOSE(test failed (assume 2))
sed /SIZEOF_WCHAR_T/d confdefs.h >confdefs.tmp
mv confdefs.tmp confdefs.h
echo "#define SIZEOF_WCHAR_T 2" >>confdefs.h
fi
fi
### Construct the ncurses library-subsets, if any, from this set of keywords:
### none, base, ext_funcs, ext_tinfo, ticlib, termlib, widechar
###
### ticlib modules may be a separate library, otherwise contained in termlib.
### termlib modules may be a separate library, otherwise contained in ncurses.
###
### The of "+" or " " between the tokens controls the way the script
### chooses to split module lists into libraries.
###
### (see CF_LIB_RULES).
AC_MSG_CHECKING(for library subsets)
LIB_SUBSETS=
if test "x$cf_with_progs" = xyes || test "$with_ticlib" != no || test "$with_termcap" != no; then
LIB_SUBSETS="${LIB_SUBSETS}ticlib"
if test "$with_ticlib" != no ; then
LIB_SUBSETS="${LIB_SUBSETS} "
else
LIB_SUBSETS="${LIB_SUBSETS}+"
fi
fi
LIB_SUBSETS="${LIB_SUBSETS}termlib"
test "x$with_ext_funcs" = xyes && LIB_SUBSETS="${LIB_SUBSETS}+ext_tinfo"
if test "$with_termlib" != no ; then
LIB_SUBSETS="${LIB_SUBSETS} "
else
LIB_SUBSETS="${LIB_SUBSETS}+"
fi
LIB_SUBSETS="${LIB_SUBSETS}base"
# Most term-driver calls are to tinfo, but some like init_pair are to the
# base library (so it resides in base).
if test "$with_term_driver" != no ; then
LIB_SUBSETS="${LIB_SUBSETS}+port_drivers"
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(*mingw32*|*mingw64*)
- LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo+port_win32con"
+ if test "x$with_exp_win32" = xyes ; then
+ LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo+port_win32"
+ else
+ LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo+port_win32con"
+ fi
CPPFLAGS="$CPPFLAGS -DUSE_WIN32CON_DRIVER"
;;
(*)
LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo"
;;
esac
+elif test "x$with_exp_win32" = xyes ; then
+ case "$cf_cv_system_name" in
+ (*mingw32*|*mingw64*)
+ LIB_SUBSETS="${LIB_SUBSETS}+port_win32"
+ ;;
+ (*)
+ ;;
+ esac
fi
test "x$with_widec" = xyes && LIB_SUBSETS="${LIB_SUBSETS}+widechar"
test "x$with_ext_funcs" = xyes && LIB_SUBSETS="${LIB_SUBSETS}+ext_funcs"
AC_MSG_RESULT($LIB_SUBSETS)
### Construct the list of include-directories to be generated
CF_INCLUDE_DIRS
CF_ADA_INCLUDE_DIRS
### Build up pieces for makefile rules
AC_MSG_CHECKING(default library suffix)
CF_LIB_TYPE($DFT_LWR_MODEL,DFT_ARG_SUFFIX)dnl
AC_SUBST(DFT_ARG_SUFFIX)dnl the string to append to "-lncurses" ("")
AC_MSG_RESULT($DFT_ARG_SUFFIX)
AC_MSG_CHECKING(default library-dependency suffix)
CF_LIB_SUFFIX($DFT_LWR_MODEL,DFT_LIB_SUFFIX,DFT_DEP_SUFFIX)dnl
AC_SUBST(DFT_DEP_SUFFIX)dnl the corresponding library-suffix (".a")
AC_MSG_RESULT($DFT_DEP_SUFFIX)
AC_MSG_CHECKING(default object directory)
CF_OBJ_SUBDIR($DFT_LWR_MODEL,DFT_OBJ_SUBDIR)dnl
AC_SUBST(DFT_OBJ_SUBDIR)dnl the default object-directory ("obj")
AC_MSG_RESULT($DFT_OBJ_SUBDIR)
if test "x$cf_with_cxx" = xyes ; then
AC_MSG_CHECKING(c++ library-dependency suffix)
if test "$with_libtool" != "no"; then
# libtool thinks it can make c++ shared libraries (perhaps only g++)
CXX_LIB_SUFFIX=$DFT_DEP_SUFFIX
elif test "$with_shared_cxx" != "no"; then
# also for g++ users...
CXX_LIB_SUFFIX=$DFT_DEP_SUFFIX
else
# we normally make a static library because C/C++ library rules differ
CF_LIB_SUFFIX(normal,CXX_LIB_SUFFIX,CXX_DEP_SUFFIX)
fi
AC_MSG_RESULT($CXX_LIB_SUFFIX)
AC_SUBST(CXX_LIB_SUFFIX)
fi
# do not want -ldl in build except as needed for -lncurses dependency
if test "x$with_dlsym" = xyes ; then
-if test $DFT_LWR_MODEL = shared || \
- test $DFT_LWR_MODEL = libtool ; then
+if test "$DFT_LWR_MODEL" = shared || \
+ test "$DFT_LWR_MODEL" = libtool ; then
CF_REMOVE_LIB(LIBS,$LIBS,dl)
fi
fi
### Set up low-level terminfo dependencies for makefiles.
# TICS_LIST and TINFO_LIST are needed to build libtic.so and libterm.so, but
# do not need libdl
TICS_LIST=
if test "x$with_dlsym" = xyes ; then
CF_REMOVE_LIB(TINFO_LIST,$SHLIB_LIST,dl)
fi
USE_ARG_SUFFIX="${DFT_ARG_SUFFIX}${EXTRA_SUFFIX}"
USE_LIB_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}"
USE_CFG_SUFFIX=${DFT_ARG_SUFFIX}${cf_cv_abi_version}
if test -n "$EXTRA_SUFFIX" && test "x$EXTRA_SUFFIX" != "x${cf_cv_abi_version}"
then
USE_CFG_SUFFIX="${USE_CFG_SUFFIX}${EXTRA_SUFFIX}"
fi
AC_SUBST(USE_ARG_SUFFIX)
AC_SUBST(USE_CFG_SUFFIX)
AC_SUBST(USE_LIB_SUFFIX)
if test "$with_ticlib" != no ; then
if test "x$with_ticlib" != xyes ; then
TICS_NAME=$with_ticlib
- TICS_SUFFIX="`echo ${DFT_LIB_SUFFIX}|sed -e "s/^${USE_LIB_SUFFIX}//"`"
- TICS_ARG_SUFFIX="${with_ticlib}`echo ${USE_ARG_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`"
- TICS_DEP_SUFFIX="${with_ticlib}`echo ${DFT_DEP_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`"
+ TICS_SUFFIX="`echo "${DFT_LIB_SUFFIX}" |sed -e "s/^${USE_LIB_SUFFIX}//"`"
+ TICS_ARG_SUFFIX="${with_ticlib}`echo "${USE_ARG_SUFFIX}" |sed -e "s/^${LIB_SUFFIX}//"`"
+ TICS_DEP_SUFFIX="${with_ticlib}`echo "${DFT_DEP_SUFFIX}" |sed -e "s/^${LIB_SUFFIX}//"`"
TICS_LIB_SUFFIX="${with_ticlib}"
else
TICS_SUFFIX=${DFT_LIB_SUFFIX}
TICS_ARG_SUFFIX="${TICS_NAME}${USE_ARG_SUFFIX}"
TICS_DEP_SUFFIX="${TICS_NAME}${DFT_DEP_SUFFIX}"
TICS_LIB_SUFFIX="${TICS_NAME}${USE_LIB_SUFFIX}"
fi
TICS_LDFLAGS="-L${LIB_DIR}"
TICS_LIBS="-l${TICS_ARG_SUFFIX}"
else
TICS_SUFFIX=${DFT_LIB_SUFFIX}
TICS_LDFLAGS="-L${LIB_DIR}"
TICS_LIBS="-l${LIB_NAME}${USE_ARG_SUFFIX}"
fi
AC_SUBST(TICS_ARG_SUFFIX)
AC_SUBST(TICS_DEP_SUFFIX)
AC_SUBST(TICS_LIB_SUFFIX)
AC_SUBST(TICS_LDFLAGS)
AC_SUBST(TICS_LIBS)
if test "$with_termlib" != no ; then
if test "x$with_termlib" != xyes ; then
TINFO_NAME=$with_termlib
- TINFO_SUFFIX="`echo ${DFT_LIB_SUFFIX}|sed -e "s/^${USE_LIB_SUFFIX}//"`"
- TINFO_ARG_SUFFIX="${with_termlib}`echo ${USE_ARG_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`"
- TINFO_DEP_SUFFIX="${with_termlib}`echo ${DFT_DEP_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`"
+ TINFO_SUFFIX="`echo "${DFT_LIB_SUFFIX}" |sed -e "s/^${USE_LIB_SUFFIX}//"`"
+ TINFO_ARG_SUFFIX="${with_termlib}`echo "${USE_ARG_SUFFIX}" |sed -e "s/^${LIB_SUFFIX}//"`"
+ TINFO_DEP_SUFFIX="${with_termlib}`echo "${DFT_DEP_SUFFIX}" |sed -e "s/^${LIB_SUFFIX}//"`"
TINFO_LIB_SUFFIX="${with_termlib}"
else
TINFO_SUFFIX=${DFT_LIB_SUFFIX}
TINFO_ARG_SUFFIX="${TINFO_NAME}${USE_ARG_SUFFIX}"
TINFO_DEP_SUFFIX="${TINFO_NAME}${DFT_DEP_SUFFIX}"
TINFO_LIB_SUFFIX="${TINFO_NAME}${USE_LIB_SUFFIX}"
fi
TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${TINFO_DEP_SUFFIX}"
TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${TINFO_DEP_SUFFIX}"
if test "$DFT_LWR_MODEL" = "libtool"; then
TEST_ARGS="${TEST_DEPS}"
TEST_ARG2="${TEST_DEP2}"
TINFO_LDFLAGS="-L${LIB_DIR}"
TINFO_LIBS="$TEST_ARGS"
TICS_LIST="$SHLIB_LIST $TEST_ARGS"
SHLIB_LIST="${SHLIB_LIST} $TEST_ARGS"
else
TEST_ARGS="-l${TINFO_ARG_SUFFIX}"
TEST_ARG2="-l${TINFO_ARG_SUFFIX}"
if test "x$with_term_driver" != xno ; then
TICS_LIST="$SHLIB_LIST -l${LIB_NAME}${USE_ARG_SUFFIX}"
TICS_LIBS="$TICS_LIBS -l${LIB_NAME}${USE_ARG_SUFFIX}"
TINFO_LIBS="-l${LIB_NAME}${USE_ARG_SUFFIX} $TEST_ARGS"
else
TICS_LIST="$SHLIB_LIST -l${TINFO_LIB_SUFFIX}"
TINFO_LIBS="$TEST_ARGS"
fi
TINFO_LDFLAGS="-L${LIB_DIR}"
SHLIB_LIST="$SHLIB_LIST -l${TINFO_LIB_SUFFIX}"
fi
else
# the next lines are needed for linking libtic over libncurses
TINFO_NAME=${LIB_NAME}
TINFO_SUFFIX=${DFT_LIB_SUFFIX}
TINFO_ARG_SUFFIX=${LIB_NAME}${USE_ARG_SUFFIX}
if test "x$with_tic_depends" = xyes ; then
TICS_LIST="$SHLIB_LIST -l${LIB_NAME}${USE_ARG_SUFFIX}"
else
TICS_LIST="$SHLIB_LIST"
fi
TINFO_LDFLAGS="-L${LIB_DIR}"
TINFO_LIBS="-l${LIB_NAME}${USE_ARG_SUFFIX}"
fi
if test "$DFT_LWR_MODEL" = shared ; then
- case $cf_cv_system_name in
+ case "$cf_cv_system_name" in
(cygwin*|msys*)
# "lib" files have ".dll.a" suffix, "cyg"or "msys-" files have ".dll"
TINFO_SUFFIX=.dll
;;
esac
fi
AC_SUBST(TINFO_ARG_SUFFIX)
AC_SUBST(TINFO_DEP_SUFFIX)
AC_SUBST(TINFO_LIB_SUFFIX)
AC_SUBST(TINFO_LDFLAGS)
AC_SUBST(TINFO_LIBS)
if test "x$with_dlsym" = xyes ; then
CF_REMOVE_LIB(TICS_LIST,$TICS_LIST,dl)
fi
if test "$DFT_LWR_MODEL" = "libtool"; then
OBJEXT=lo
fi
# needed for Ada95
TINFO_LDFLAGS2=`echo "$TINFO_LDFLAGS" | sed -e 's,-L\.\./,-L../../,'`
AC_SUBST(TINFO_LDFLAGS2)
-case $DFT_LWR_MODEL in
+case "$DFT_LWR_MODEL" in
(normal|debug|profile)
CF_LDFLAGS_STATIC
;;
esac
AC_MSG_CHECKING(where we will install curses.h)
AC_SUBST(includesubdir)
includesubdir=
if test "$with_overwrite" = no && \
- ( test "x$includedir" = 'x${prefix}/include' || \
- test "x$includedir" = "x${prefix}/include" )
+ { test "x$includedir" = 'x${prefix}/include' || \
+ test "x$includedir" = "x${prefix}/include"; }
then
includesubdir="/ncurses${USE_LIB_SUFFIX}"
fi
AC_MSG_RESULT(${includedir}${includesubdir})
### Resolve a conflict between normal and wide-curses by forcing applications
### that will need libutf8 to add it to their configure script.
if test "$with_overwrite" != no ; then
if test "$NCURSES_LIBUTF8" = 1 ; then
NCURSES_LIBUTF8='defined(HAVE_LIBUTF8_H)'
AC_MSG_WARN(Wide-character applications must define HAVE_LIBUTF8_H to include curses.h)
fi
fi
WITH_OVERWRITE=$with_overwrite
+### At least on MinGW a shared library build without libtool
+### requires adding the additional libs to the link list.
+case "$cf_cv_system_name" in
+(*mingw32*|*mingw64*)
+ if test "$DFT_LWR_MODEL" != "libtool"; then
+ SHLIB_LIST="$SHLIB_LIST ${LIBS}"
+ fi
+ ;;
+*) ;;
+esac
+
AC_SUBST(WITH_OVERWRITE)
AC_SUBST(TICS_LIST)
AC_SUBST(TINFO_LIST)
AC_SUBST(SHLIB_LIST)
# used to separate tack out of the tree
NCURSES_TREE=
AC_SUBST(NCURSES_TREE)
### predefined stuff for the test programs
AC_DEFINE(HAVE_SLK_COLOR,1,[Define to 1 if we have slk_color for test-programs])
+# pkgsrc uses these
+CF_WITH_LIB_BASENAME(FORM_NAME,form)
+CF_WITH_LIB_BASENAME(MENU_NAME,menu)
+CF_WITH_LIB_BASENAME(PANEL_NAME,panel)
+CF_WITH_LIB_BASENAME(CXX_NAME,cxx,ncurses++)
+
### Construct the list of subdirectories for which we'll customize makefiles
### with the appropriate compile-rules.
CF_SRC_MODULES($modules_to_build)
if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = "xyes"; then
SUB_MAKEFILES="$SUB_MAKEFILES Ada95/src/library.gpr:Ada95/src/library.gpr.in"
SUB_MAKEFILES="$SUB_MAKEFILES Ada95/gen/adacurses${USE_CFG_SUFFIX}-config:Ada95/gen/adacurses-config.in"
SUB_MAKEFILES="$SUB_MAKEFILES man/adacurses${USE_CFG_SUFFIX}-config.1:man/MKada_config.in"
fi
CF_DIRS_TO_MAKE
# symbols that differ when compiling Ada95 by itself.
NCURSES_SHLIB2=$SHELL' $(top_srcdir)/misc/shlib'
AC_SUBST(NCURSES_SHLIB2)
# values to use as strings
AC_DEFINE_UNQUOTED(NCURSES_PATHSEP,'$PATH_SEPARATOR',[Define to override ':' as library path-separator])
AC_DEFINE_UNQUOTED(NCURSES_VERSION_STRING, "${NCURSES_MAJOR}.${NCURSES_MINOR}.${NCURSES_PATCH}",[Define to 1 if machine has ample memory for tic])
-### Now that we're done running tests, add the compiler-warnings, if any
-CF_ADD_CFLAGS($EXTRA_CFLAGS)
-
### Define substitutions for header files to avoid name-pollution
CF_SUBST_IF(["x$cf_cv_have_tcgetattr" = xyes], HAVE_TCGETATTR, 1, 0)
CF_SUBST_IF(["x$ac_cv_header_stdint_h" = xyes], HAVE_STDINT_H, 1, 0)
CF_SUBST_IF(["x$ac_cv_header_termio_h" = xyes], HAVE_TERMIO_H, 1, 0)
CF_SUBST_IF(["x$ac_cv_header_termios_h" = xyes], HAVE_TERMIOS_H, 1, 0)
################################################################################
test "x$use_database" = xyes && \
SUB_MAKEFILES="$SUB_MAKEFILES misc/run_tic.sh:misc/run_tic.in"
SUB_MAKEFILES="$SUB_MAKEFILES misc/ncurses-config:misc/ncurses-config.in"
SUB_MAKEFILES="$SUB_MAKEFILES man/ncurses${USE_CFG_SUFFIX}-config.1:man/MKncu_config.in"
if test "x$enable_pc_files" = xyes && test -z "$MAKE_PC_FILES" ; then
SUB_MAKEFILES="$SUB_MAKEFILES misc/gen-pkgconfig:misc/gen-pkgconfig.in"
fi
AC_SUBST(cross_compiling)
if test "x$cf_with_tests" != xno ; then
MAKE_TESTS=
else
MAKE_TESTS="#"
fi
AC_SUBST(MAKE_TESTS)
ADAHTML_DIR=../../doc/html/ada
AC_SUBST(ADAHTML_DIR)
-# these could be configurable, but are not currently
-PANEL_NAME=panel
-MENU_NAME=menu
-FORM_NAME=form
-CXX_NAME=ncurses++
-
-AC_SUBST(PANEL_NAME)
-AC_SUBST(MENU_NAME)
-AC_SUBST(FORM_NAME)
-AC_SUBST(CXX_NAME)
-
# workaround for OS/2 (20151017)
-case $cf_cv_system_name in
+case "$cf_cv_system_name" in
(os2*)
LIBTOOL_OPTS_CXX="-os2dllname ncurs++"
;;
(*)
LIBTOOL_OPTS_CXX=
;;
esac
AC_SUBST(LIBTOOL_OPTS_CXX)
# workaround for g++ versus Solaris (20131116)
-case $cf_cv_system_name in
+case "$cf_cv_system_name" in
(solaris2*)
case "x$CPPFLAGS" in
(*-D_XOPEN_SOURCE_EXTENDED*)
CF_VERBOSE(moving _XOPEN_SOURCE_EXTENDED to work around g++ problem)
CFLAGS="$CFLAGS -D_XOPEN_SOURCE_EXTENDED"
CPPFLAGS=`echo "x$CPPFLAGS" | sed -e 's/^.//' -e 's/-D_XOPEN_SOURCE_EXTENDED//'`
;;
esac
;;
esac
# Help to automatically enable the extended curses features when using either
# the *-config or the ".pc" files by adding defines.
AC_MSG_CHECKING(for defines to add to ncurses${USE_CFG_SUFFIX}-config script)
PKG_CFLAGS=
for cf_loop1 in $CPPFLAGS_after_XOPEN
do
cf_found=no
for cf_loop2 in $CPPFLAGS_before_XOPEN
do
if test "x$cf_loop1" = "x$cf_loop2"
then
cf_found=yes
break
fi
done
test "$cf_found" = no && PKG_CFLAGS="$PKG_CFLAGS $cf_loop1"
done
AC_MSG_RESULT($PKG_CFLAGS)
AC_SUBST(PKG_CFLAGS)
# AC_CHECK_SIZEOF demands a literal parameter, no variables. So we do this.
case "x$NCURSES_OSPEED" in
(*short*)
cf_compatible=1
;;
(*)
cf_compatible=0
;;
esac
AC_DEFINE_UNQUOTED(NCURSES_OSPEED_COMPAT,$cf_compatible,[Define to 1 if termcap variable ospeed is short])
case "x$cf_cv_typeof_chtype" in
(xshort|xint|xlong)
cf_cv_typeof_chtype="unsigned $cf_cv_typeof_chtype"
;;
esac
case "x$cf_cv_typeof_mmask_t" in
(xshort|xint|xlong)
cf_cv_typeof_mmask_t="unsigned $cf_cv_typeof_mmask_t"
;;
esac
# substitute into misc/Makefile to suppress
# (un)install.data from the
# (un)install rules.
if test "x$cf_with_db_install" = "xno"; then
MISC_INSTALL_DATA=
MISC_UNINSTALL_DATA=
else
MISC_INSTALL_DATA=install.data
MISC_UNINSTALL_DATA=uninstall.data
fi
AC_SUBST(MISC_INSTALL_DATA)
AC_SUBST(MISC_UNINSTALL_DATA)
if test "x$cf_with_db_install" = "xno" || test "x$TERMINFO_SRC" = "xno"; then
MAKE_DATABASE="#"
else
MAKE_DATABASE="$MAKE_TERMINFO"
fi
AC_SUBST(MAKE_DATABASE)
dnl Override the package used for exported symbols
if test -n "$PACKAGE"
then
PACKAGE="${PACKAGE}${DFT_ARG_SUFFIX}"
export PACKAGE
echo "package: $PACKAGE"
fi
UNALTERED_SYMS=
cf_filter_syms=no
if test -n "$RESULTING_SYMS"
then
cf_filter_syms=$cf_dft_filter_syms
CF_VERBOSE(will map symbols to ABI=$cf_cv_abi_version)
fi
if test "x$WILDCARD_SYMS" = xno
then
cf_filter_syms=yes
fi
test "x$cf_with_trace" = xyes && NCURSES_INLINE=
UNALTERED_SYMS=`echo "$RESULTING_SYMS" | sed -e 's/\\$/\\\\$/g'`
-if test $cf_filter_syms = yes
+if test "$cf_filter_syms" = yes
then
RESULTING_SYMS=resulting.map
fi
AC_SUBST(UNALTERED_SYMS)
if test "x$cross_compiling" = xyes ; then
ADAGEN_LDFLAGS='$(CROSS_LDFLAGS)'
CHECK_BUILD="#"
else
ADAGEN_LDFLAGS='$(NATIVE_LDFLAGS)'
CHECK_BUILD=
fi
AC_SUBST(ADAGEN_LDFLAGS)
AC_SUBST(CHECK_BUILD)
AC_SUBST(PRIVATE_LIBS)
# This is used for the *-config script and *.pc data files.
CF_LD_SEARCHPATH
AC_DEFINE(HAVE_CURSES_DATA_BOOLNAMES,1,[definition needed for in-tree build of tack])
AC_OUTPUT( \
include/MKterm.h.awk \
include/curses.head:include/curses.h.in \
include/ncurses_dll.h \
include/termcap.h \
include/unctrl.h \
$SUB_MAKEFILES \
Makefile,[
if test "x$cf_with_tests" != xno ; then
- CF_PRG_RULES([$srcdir/test/mk-test.awk INSTALL=no ECHO_LINK="$ECHO_LD"], test)
+ CF_PRG_RULES(["$srcdir/test/mk-test.awk" INSTALL=no ECHO_LINK="$ECHO_LD"], test)
fi
CF_LIB_RULES($SRC_SUBDIRS)
if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = "xyes"; then
if test -z "$USE_OLD_MAKERULES" ; then
- $AWK -f $srcdir/Ada95/mk-1st.awk <$srcdir/Ada95/src/modules >>Ada95/src/Makefile
+ $AWK -f "$srcdir/Ada95/mk-1st.awk" <"$srcdir/Ada95/src/modules" >>Ada95/src/Makefile
fi
fi
],[
### Special initialization commands, used to pass information from the
### configuration-run into config.status
-AWK="$AWK"
ALTERNATE_SYMS="$ALTERNATE_SYMS"
+AWK="$AWK"
+CXX_NAME="$CXX_NAME"
DFT_ARG_SUFFIX="$DFT_ARG_SUFFIX"
DFT_LWR_MODEL="$DFT_LWR_MODEL"
ECHO_LD="$ECHO_LD"
EXTRA_SUFFIX="$EXTRA_SUFFIX"
+FORM_NAME="$FORM_NAME"
LDCONFIG="$LDCONFIG"
LIBTOOL_VERSION="$LIBTOOL_VERSION"
LIB_NAME="$LIB_NAME"
LIB_PREFIX="$LIB_PREFIX"
LIB_SUBSETS="$LIB_SUBSETS"
LIB_SUFFIX="$LIB_SUFFIX"
LIB_TRACING="$LIB_TRACING"
LN_S="$LN_S"
MAKE_TERMINFO="$MAKE_TERMINFO"
+MENU_NAME="$MENU_NAME"
NCURSES_MAJOR="$NCURSES_MAJOR"
NCURSES_MINOR="$NCURSES_MINOR"
NCURSES_OSPEED="$NCURSES_OSPEED"
NCURSES_PATCH="$NCURSES_PATCH"
+PANEL_NAME="$PANEL_NAME"
SRC_SUBDIRS="$SRC_SUBDIRS"
TERMINFO="$TERMINFO"
TICS_ARG_SUFFIX="$TICS_ARG_SUFFIX"
TICS_LIB_SUFFIX="$TICS_LIB_SUFFIX"
TICS_NAME="$TICS_NAME"
TICS_SUFFIX="$TICS_SUFFIX"
TIC_PATH="$TIC_PATH"
TINFO_ARG_SUFFIX="$TINFO_ARG_SUFFIX"
TINFO_LIB_SUFFIX="$TINFO_LIB_SUFFIX"
TINFO_NAME="$TINFO_NAME"
TINFO_SUFFIX="$TINFO_SUFFIX"
UNALTERED_SYMS="$UNALTERED_SYMS"
USE_ARG_SUFFIX="$USE_ARG_SUFFIX"
USE_CFG_SUFFIX="$USE_CFG_SUFFIX"
USE_LIB_SUFFIX="$USE_LIB_SUFFIX"
USE_OLD_MAKERULES="$USE_OLD_MAKERULES"
WILDCARD_SYMS="$WILDCARD_SYMS"
WITH_CURSES_H="$with_curses_h"
WITH_ECHO="${enable_echo:=yes}"
WITH_OVERWRITE="$with_overwrite"
cf_LIST_MODELS="$cf_list_models"
+cf_cv_VERSION_GNATMAKE=$cf_cv_VERSION_GNATMAKE
+cf_cv_VERSION_GPRBUILD=$cf_cv_VERSION_GPRBUILD
cf_cv_abi_version="$cf_cv_abi_version"
cf_cv_do_relink="$cf_cv_do_relink"
cf_cv_do_reranlib="$cf_cv_do_reranlib"
cf_cv_do_symlinks="$cf_cv_do_symlinks"
cf_cv_enable_lp64="$cf_cv_enable_lp64"
cf_cv_enable_opaque="$cf_cv_enable_opaque"
cf_cv_prog_CC_c_o=$cf_cv_prog_CC_c_o
cf_cv_prog_CXX_c_o=$cf_cv_prog_CXX_c_o
cf_cv_prog_gnat_correct=$cf_cv_prog_gnat_correct
cf_cv_rel_version="$cf_cv_rel_version"
cf_cv_rm_so_locs="$cf_cv_rm_so_locs"
cf_cv_shared_soname='$cf_cv_shared_soname'
cf_cv_shlib_version="$cf_cv_shlib_version"
cf_cv_shlib_version_infix="$cf_cv_shlib_version_infix"
cf_cv_system_name="$cf_cv_system_name"
cf_cv_term_driver="$with_term_driver"
cf_with_ada="$cf_with_ada"
cf_with_cxx_binding="$cf_with_cxx_binding"
cf_with_db_install="$cf_with_db_install"
cf_with_manpages="$cf_with_manpages"
cf_with_tests="$cf_with_tests"
host="$host"
target="$target"
with_shared_cxx="$with_shared_cxx"
],cat)dnl
${MAKE:-make} preinstall
diff --git a/contrib/ncurses/convert_configure.pl b/contrib/ncurses/convert_configure.pl
deleted file mode 100644
index f35d154ff6f3..000000000000
--- a/contrib/ncurses/convert_configure.pl
+++ /dev/null
@@ -1,120 +0,0 @@
-extproc perl -S -w
-
-# $Id: convert_configure.pl,v 1.4 2020/02/02 23:34:34 tom Exp $
-##############################################################################
-# Copyright 2020 Thomas E. Dickey #
-# Copyright 1998-2000,2006 Free Software Foundation, Inc. #
-# #
-# Permission is hereby granted, free of charge, to any person obtaining a #
-# copy of this software and associated documentation files (the "Software"), #
-# to deal in the Software without restriction, including without limitation #
-# the rights to use, copy, modify, merge, publish, distribute, distribute #
-# with modifications, sublicense, and/or sell copies of the Software, and to #
-# permit persons to whom the Software is furnished to do so, subject to the #
-# following conditions: #
-# #
-# The above copyright notice and this permission notice shall be included in #
-# all copies or substantial portions of the Software. #
-# #
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
-# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
-# DEALINGS IN THE SOFTWARE. #
-# #
-# Except as contained in this notice, the name(s) of the above copyright #
-# holders shall not be used in advertising or otherwise to promote the sale, #
-# use or other dealings in this Software without prior written #
-# authorization. #
-##############################################################################
-
-# The converted script is written to stdout, so run this script as
-# convert_configure configure > configure.cmd
-#
-# When the converted script runs, it expects that /tmp dir is
-# available (so we create it).
-#
-# run the result like this:
-# .\configure
-
-# Some frequent manual intervention:
-# a) Some makefiles hardwire SHELL = /bin/sh ==> change to: sh
-# b) Some makefiles recognize that exe files terminate on .exe
-# You need to give this script -no-zexe option...
-
-shift, $no_zexe = 1 if @ARGV and $ARGV[0] eq '-no-zexe';
-
-mkdir '/tmp', 0777 unless -d '/tmp';
-
-print <<EOF;
-extproc sh
-
-EOF
-
-print <<EOF unless $no_zexe;
-# Make sensible defaults:
-CC="gcc -Zexe -Zmt"
-export CC
-CXX="gcc -Zexe -Zmt"
-export CXX
-#GCCOPT="$GCCOPT -Zexe"
-#export GCCOPT
-EOF
-
-print <<EOF;
-CONFIG_SHELL=sh
-export CONFIG_SHELL
-
-# Optimization (GNU make 3.74 cannot be loaded :-():
-emxload -m 30 sh.exe ls.exe tr.exe id.exe sed.exe # make.exe
-emxload -m 30 grep.exe egrep.exe fgrep.exe cat.exe rm.exe mv.exe cp.exe
-emxload -m 30 uniq.exe basename.exe sort.exe awk.exe echo.exe
-
-
-EOF
-
-$checking_path = 0;
-
-while (<>) {
- if (/for\s+(\w+)\s+in\s*\$(PATH|ac_dummy)\s*;/) {
- $checking_path = 1;
- $varname = $1;
- $subst= <<EOS
-$varname="`echo -E \\"\$$varname\\" | tr \\\\\\\\\\\\\\\\ / `"
-EOS
- }
- if (/if\s+test\s+-z\s+\"\$INSTALL\"/) {
- $checking_install = 1;
- }
- $checking_install = $checking_path = 0 if /^\s*done\s*$/;
- # We want to create an extra line like this one:
-# ac_dir="`echo -E \"$ac_dir\" | tr \\\\\\\\ / `"
- s{^((\s*)if\s+test)\s*-f\s*(\$$varname/\S+)\s*;}
- {$2$subst$1 -f $3 -o -f $3.exe ;}
- if $checking_path; # Checking for executables
- # change |/usr/sbin/*| to |/usr/sbin/*|?:[\\/]os2[\\/]install[\\/]*|
- # in the list of things to skip (with both cases)
- s{\Q|/usr/sbin/*|}
- {|/usr/sbin/*|?:[\\\\/]os2[\\\\/]install[\\\\/]*|?:[\\\\/]OS2[\\\\/]INSTALL[\\\\/]*|}
- if $checking_install; # Do not accept d:/os2/install/install.exe
- s/^(host|build)=NONE$/$1=x86-emx-os2/; # Make default host/build
- s/"\$\{IFS}:"$/"\${IFS};"/; # Fix IFS line
- s/\bIFS=\":\"$/IFS=";"/; # Fix another IFS line
- s/\btest\s+-s\s+conftest\b/test -f conftest/g; # Fix exe test
- # This one is needed for curses:
- s/^\s*host=`.*\$ac_config_sub \$host_alias`/$&\nif test -z "\$host"; then host=\$host_alias; fi/;
- s,/bin/sh(?![/\w]),sh,g;
- s,^(\s*/usr/sbin/sendmail\s*)\\$,$1 "`whence sendmail | tr '\\\\\\\\' / `" \\,;
- print;
-}
-
-__END__
-
-Changes: 98/11 : support check for executables in ncurses.
- 99/2 : support INSTALL,
- new IFS=':' style
- 99/11 : find sendmail
- 00/01 : export CONFIG_SHELL
- 00/10 : new syntax for host=`...` line
diff --git a/contrib/ncurses/dist.mk b/contrib/ncurses/dist.mk
index 3d2d2f23edec..ceead1705338 100644
--- a/contrib/ncurses/dist.mk
+++ b/contrib/ncurses/dist.mk
@@ -1,177 +1,177 @@
##############################################################################
-# Copyright 2018-2019,2020 Thomas E. Dickey #
+# Copyright 2018-2020,2021 Thomas E. Dickey #
# Copyright 1998-2017,2018 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
-# $Id: dist.mk,v 1.1335 2020/02/15 09:30:48 tom Exp $
+# $Id: dist.mk,v 1.1401 2021/02/20 12:06:34 tom Exp $
# Makefile for creating ncurses distributions.
#
# This only needs to be used directly as a makefile by developers, but
# configure mines the current version number out of here. To move
# to a new version number, just edit this file and run configure.
#
SHELL = /bin/sh
# These define the major/minor/patch versions of ncurses.
NCURSES_MAJOR = 6
NCURSES_MINOR = 2
-NCURSES_PATCH = 20200215
+NCURSES_PATCH = 20210220
# We don't append the patch to the version, since this only applies to releases
VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
WEBSITE = https://invisible-island.net
HOMEPAGE = $(WEBSITE)/ncurses
# The most recent html files were generated with lynx 2.8.6 (or later), using
# ncurses configured with
# --without-manpage-renames
# on Debian/testing. The -scrollbar and -width options are used to make lynx
# use 79 columns as it did in 2.8.5 and before.
DUMP = lynx -dump -scrollbar=0 -width=79 -display_charset=US-ASCII
DUMP2 = $(DUMP) -nolist
# gcc's file is "gnathtml.pl"
GNATHTML= gnathtml
# man2html is a Perl script which assumes that pages are fixed size.
# Not all man programs agree with this assumption; some use half-spacing, which
# has the effect of lengthening the text portion of the page -- so man2html
# would remove some text. The man program on Redhat 6.1 appears to work with
# man2html if we set the top/bottom margins to 6 (the default is 7). Newer
# versions of 'man' leave no margin (and make it harder to sync with pages).
MAN2HTML= man2html -botm=0 -topm=0 -cgiurl '$$title.$$section$$subsection.html' -index
ALL = ANNOUNCE doc/html/announce.html doc/ncurses-intro.doc doc/hackguide.doc manhtml adahtml
all : $(ALL)
dist: $(ALL)
(cd ..; tar cvf ncurses-$(VERSION).tar `sed <ncurses-$(VERSION)/MANIFEST 's/^./ncurses-$(VERSION)/'`; gzip ncurses-$(VERSION).tar)
distclean:
rm -f $(ALL) subst.tmp subst.sed
# Don't mess with announce.html.in unless you have lynx available!
doc/html/announce.html: announce.html.in
sed \
-e 's,@VERSION@,$(VERSION),g' \
-e 's,@WEBSITE@,$(WEBSITE),g' \
-e 's,@HOMEPAGE@,$(HOMEPAGE),g' <announce.html.in > $@
ANNOUNCE : doc/html/announce.html
$(DUMP2) doc/html/announce.html > $@
doc/ncurses-intro.doc: doc/html/ncurses-intro.html
$(DUMP2) doc/html/ncurses-intro.html > $@
doc/hackguide.doc: doc/html/hackguide.html
$(DUMP2) doc/html/hackguide.html > $@
# The distributed html files are formatted using
# configure --without-manpage-renames
#
# The edit_man.sed script is built as a side-effect of installing the manpages.
# If that conflicts with the --without-manpage-renames, you can install those
# in a different location using the --with-install-prefix option of the
# configure script.
-MANPROG = tbl | nroff -mandoc -rLL=78n -rLT=78n -Tascii
+MANPROG = tbl | nroff -mandoc -rHY=0 -rLL=78n -rLT=78n -Tascii
manhtml:
@for f in doc/html/man/*.html; do \
test -f $$f || continue; \
case $$f in \
*/index.html) ;; \
*) rm -f $$f ;; \
esac; \
done
@mkdir -p doc/html/man
@rm -f subst.tmp ;
@for f in man/*.[0-9]*; do \
m=`basename $$f` ;\
x=`echo $$m | awk -F. '{print $$2;}'` ;\
xu=`echo $$x | dd conv=ucase 2>/dev/null` ;\
if [ "$${x}" != "$${xu}" ]; then \
echo "s/$${xu}/$${x}/g" >> subst.tmp ;\
fi ;\
done
# change some things to make weblint happy:
@cat man_alias.sed >> subst.tmp
@echo 's/<B>/<STRONG>/g' >> subst.tmp
@echo 's/<\/B>/<\/STRONG>/g' >> subst.tmp
@echo 's/<I>/<EM>/g' >> subst.tmp
@echo 's/<\/I>/<\/EM>/g' >> subst.tmp
@misc/csort < subst.tmp | uniq > subst.sed
@echo '/<\/TITLE>/a\' >> subst.sed
@echo '<link rel="author" href="mailto:bug-ncurses@gnu.org">\' >> subst.sed
@echo '<meta http-equiv="Content-Type" content="text\/html; charset=iso-8859-1">' >> subst.sed
@rm -f subst.tmp
@for f in man/*.[0-9]* ; do \
m=`basename $$f` ;\
T=`egrep '^.TH' $$f|sed -e 's/^.TH //' -e s'/"//g' -e 's/[ ]\+$$//'` ; \
g=$${m}.html ;\
if [ -f doc/html/$$g ]; then chmod +w doc/html/$$g; fi;\
echo "Converting $$m to HTML" ;\
echo '<!-- ' > doc/html/man/$$g ;\
egrep '^.\\"[^#]' $$f | \
sed -e 's/\$$/@/g' \
-e 's/^.../ */' \
-e 's/</\&lt;/g' \
-e 's/>/\&gt;/g' \
>> doc/html/man/$$g ;\
echo '-->' >> doc/html/man/$$g ;\
./edit_man.sh normal editing /usr/man man $$f | \
$(MANPROG) | \
tr '\255' '-' | \
$(MAN2HTML) \
-title "$$T" \
-aliases man/manhtml.aliases \
-externs man/manhtml.externs | \
sed -f subst.sed |\
sed -e 's/"curses.3x.html"/"ncurses.3x.html"/g' \
>> doc/html/man/$$g ;\
done
@rm -f subst.sed
#
# Please note that this target can only be properly built if the build of the
# Ada95 subdir has been done. The reason is, that the gnathtml tool uses the
# .ali files generated by the Ada95 compiler during the build process. These
# .ali files contain cross referencing information required by gnathtml.
adahtml:
if [ ! -z "$(GNATHTML)" ]; then \
(cd ./Ada95/gen ; make html GNATHTML=$(GNATHTML) ) ;\
fi
# This only works on a clean source tree, of course.
MANIFEST:
-rm -f $@
touch $@
find . -type f -print |misc/csort | fgrep -v .lsm |fgrep -v .spec >$@
TAGS:
etags */*.[ch]
# Makefile ends here
diff --git a/contrib/ncurses/doc/html/announce.html b/contrib/ncurses/doc/html/announce.html
index 070f504146a5..699372019b83 100644
--- a/contrib/ncurses/doc/html/announce.html
+++ b/contrib/ncurses/doc/html/announce.html
@@ -1,2219 +1,2220 @@
<!--
- $Id: announce.html,v 1.61 2020/02/09 21:26:51 tom Exp $
+ $Id: announce.html,v 1.64 2020/10/19 08:18:48 tom Exp $
****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for HTML5 for Linux version 5.2.0">
<title>Announcing ncurses 6.2</title>
<link rel="author" href="mailto:bug-ncurses@gnu.org">
<meta http-equiv="Content-Type" content=
"text/html; charset=us-ascii">
<style type="text/css">
p,li { max-width:700px; }
dd { max-width:630px; }
*.main-name {
font-style: italic;
font-variant: small-caps;
}
*.part-name {
font-family: "Andale Mono", "Monotype.com", monospace;
font-size: 12pt;
font-weight: bold;
}
*.demo-name {
font-family: "Andale Mono", "Monotype.com", monospace;
font-size: 10pt;
}
</style>
</head>
<body>
<h1 class="no-header">Announcing ncurses 6.2</h1>
<h2><a name="h2-overview" id="h2-overview">Overview</a></h2>
<p>The <span class="main-name">ncurses</span> (new curses)
library is a free software emulation of curses in System V
Release 4.0 (SVr4), and more. It uses terminfo format, supports
pads and color and multiple highlights and forms characters and
function-key mapping, and has all the other SVr4-curses
enhancements over BSD curses. SVr4 curses became the basis of
X/Open Curses.</p>
<p>In mid-June 1995, the maintainer of 4.4BSD curses declared
that he considered 4.4BSD curses obsolete, and encouraged the
keepers of <span class="main-name">unix</span> releases such as
BSD/OS, FreeBSD and NetBSD to switch over to <span class=
"main-name">ncurses</span>.</p>
<p>Since 1995, <span class="main-name">ncurses</span> has been
ported to many systems:</p>
<ul>
<li>It is used in almost every system based on the Linux kernel
(aside from some embedded applications).</li>
<li>It is used as the system curses library on OpenBSD, FreeBSD
and MacOS.</li>
<li>It is used in environments such as Cygwin and MinGW. The
first of these was EMX on OS/2 Warp.</li>
<li>It is used (though usually not as the <em>system</em>
curses) on all of the vendor <span class=
"main-name">unix</span> systems, e.g., AIX, HP-UX, IRIX64, SCO,
Solaris, Tru64.</li>
<li>It should work readily on any ANSI/POSIX-conforming
<span class="main-name">unix</span>.</li>
</ul>
<p>The distribution includes the library and support utilities,
including</p>
<ul>
<li><a href=
"https://invisible-island.net/ncurses/man/captoinfo.1m.html"><span class="part-name">
captoinfo</span></a>, a termcap conversion tool</li>
<li><a href=
"https://invisible-island.net/ncurses/man/clear.1.html"><span class="part-name">
clear</span></a>, utility for clearing the screen</li>
<li><a href=
"https://invisible-island.net/ncurses/man/infocmp.1m.html"><span class="part-name">
infocmp</span></a>, the terminfo decompiler</li>
<li><a href=
"https://invisible-island.net/ncurses/man/tabs.1.html"><span class="part-name">
tabs</span></a>, set tabs on a terminal</li>
<li><a href=
"https://invisible-island.net/ncurses/man/tic.1m.html"><span class="part-name">
tic</span></a>, the terminfo compiler</li>
<li><a href=
"https://invisible-island.net/ncurses/man/toe.1m.html"><span class="part-name">
toe</span></a>, list (table of) terminfo entries</li>
<li><a href=
"https://invisible-island.net/ncurses/man/tput.1.html"><span class="part-name">
tput</span></a>, utility for retrieving terminal capabilities
in shell scripts</li>
<li><a href=
"https://invisible-island.net/ncurses/man/tset.1.html"><span class="part-name">
tset</span></a>, to initialize the terminal</li>
</ul>
<p>Full manual pages are provided for the library and tools.</p>
<p>The <span class="main-name">ncurses</span> distribution is
available at <span class="main-name">ncurses</span>' <a href=
"https://invisible-island.net/ncurses/">homepage</a>:</p>
<blockquote>
<p><a href=
"ftp://ftp.invisible-island.net/ncurses/">ftp://ftp.invisible-island.net/ncurses/</a>
or<br>
<a href=
"https://invisible-mirror.net/archives/ncurses/">https://invisible-mirror.net/archives/ncurses/</a>&nbsp;.</p>
</blockquote>
<p>It is also available via anonymous FTP at the GNU distribution
site</p>
<blockquote>
<p><a href=
"ftp://ftp.gnu.org/gnu/ncurses/">ftp://ftp.gnu.org/gnu/ncurses/</a>&nbsp;.</p>
</blockquote>
<h2><a name="h2-release-notes" id="h2-release-notes">Release
Notes</a></h2>
<p>These notes are for <span class="main-name">ncurses</span>
6.2, released <strong>February 12, 2020</strong>.</p>
<p>This release is designed to be source-compatible with
<span class="main-name">ncurses</span> 5.0 through 6.1; providing
extensions to the application binary interface (ABI). Although
the source can still be configured to support the <span class=
"main-name">ncurses</span> 5 ABI, the reason for the release is
to reflect improvements to the <span class=
"main-name">ncurses</span> 6 ABI and the supporting utility
programs.</p>
<p>There are, of course, numerous other improvements, listed in
this announcement.</p>
<p>The most <a href="#h3-bug-fixes">important
bug-fixes/improvements</a> dealt with user-defined capabilities
in terminal descriptions. The release notes also mention some
other bug-fixes, but are focused on new features and improvements
to existing features since <span class="main-name">ncurses</span>
6.1 release.</p>
<h3><a name="h3-library" id="h3-library">Library improvements</a></h3>
<h4><a name="h4-new-library" id="h4-new-library">New features</a></h4>
<p>There are several new features:</p>
<ul>
<li>
<p><a href=
"https://invisible-island.net/ncurses/man/form_field_opts.3x.html">
O_EDGE_INSERT_STAY</a> tells the form library to optionally
delay cursor movement on a field edge/boundary</p>
</li>
<li>
<p><a href=
"https://invisible-island.net/ncurses/man/form_field_opts.3x.html">
O_INPUT_FIELD</a> extension to form library allows a dynamic
field to shrink if the new limit is smaller than the current
field size.</p>
</li>
<li>
<p>added <a href=
"https://invisible-island.net/ncurses/man/curs_memleaks.3x.html">
exit_curses</a> and <a href=
"https://invisible-island.net/ncurses/man/curs_memleaks.3x.html">
exit_terminfo</a> to replace internal symbols for
leak-checking.</p>
</li>
<li>
<p>added <a href=
"https://invisible-island.net/ncurses/man/curs_trace.3x.html#h3-Functions">
curses_trace</a>, to replace trace().</p>
</li>
</ul>
<p>Additionally, to improve performance other changes (and
extensions) are provided in this release:</p>
<ul>
<li>
<p>mouse decoding now handles shift/control/alt logic when
decoding xterm's 1006 mode</p>
</li>
<li>
<p>ncurses now defines a limit for <a href=
"https://invisible-island.net/ncurses/man/curs_getstr.3x.html">
wgetnstr</a>, <a href=
"https://invisible-island.net/ncurses/man/curs_get_wstr.3x.html">
wgetn_wstr</a> when length is negative or &ldquo;too
large&rdquo;.</p>
</li>
<li>reordered loop-limit checks in <a href=
"https://invisible-island.net/ncurses/man/curs_insstr.3x.html">winsnstr</a>
in case the string has no terminating null and only the number
of characters is used.</li>
<li>
<p>there is now no buffer-size limit when reading the
<a href="https://invisible-island.net/ncurses/man/ncurses.3x.html#h3-TERMCAP">
<tt>$TERMCAP</tt></a> variable.</p>
</li>
<li>
<p>the <a href=
"https://invisible-island.net/ncurses/man/ncurses.3x.html#h3-TERMCAP">
<tt>$TERMCAP</tt></a> variable may be interpreted as a
fallback to a terminfo entry</p>
</li>
<li>
<p><a href=
"https://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Output-Functions">
<tt>mvcur</tt></a> now decides whether to use hard-tabs,
using <strong><tt>xt</tt></strong>,
<strong><tt>tbc</tt></strong> and
<strong><tt>hts</tt></strong> as clues.</p>
</li>
<li>
<p>extended colors are improved by modifying an internal call
to <a href=
"https://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Output-Functions">
<tt>vid_puts</tt></a> to pass extended color pairs e.g., from
<tt>tty_update.c</tt> and <tt>lib_mvcur.c</tt></p>
</li>
<li>
<p id="getenv-fixes">the initialization functions now avoid
relying upon persistent data for the result from <a href=
"#getenv-check"><tt>getenv</tt></a></p>
</li>
<li>
<p>scrolling is improved:</p>
<ul>
<li>a limit check in <tt>newline_forces_scroll</tt> handles
the case where the row is inside scroll-margins, but not at
the end.</li>
<li>
<p>improved loop limits in <tt>_nc_scroll_window</tt>
handle a case where the scrolled data is a pad which is
taller than the window.</p>
</li>
</ul>
</li>
</ul>
<h4><a name="h4-fixes-library" id="h4-fixes-library">Other
improvements</a></h4>
<p>These are revised features:</p>
<ul>
<li>
<p>used &ldquo;<tt>const</tt>&rdquo; in some prototypes
rather than <tt>NCURSES_CONST</tt> where X/Open Curses was
updated to do this, e.g., <tt>wscanw</tt>, <tt>newterm</tt>,
the terminfo interface. Also use &ldquo;<tt>const</tt>&rdquo;
for consistency in the termcap interface, which was withdrawn
by X/Open Curses in Issue 5 (2007). As of Issue 7, X/Open
Curses still lacks &ldquo;<tt>const</tt>&rdquo; for certain
return values, e.g., <a href=
"https://invisible-island.net/ncurses/man/curs_util.3x.html#h3-keyname_key_name">
keyname</a>.</p>
</li>
<li>
<p>modified <a href=
"https://invisible-island.net/ncurses/man/curs_bkgd.3x.html#h3-bkgd">
<tt>wbkgd</tt></a> and <a href=
"https://invisible-island.net/ncurses/man/curs_bkgrnd.3x.html#h3-bkgrnd">
<tt>wbkgrnd</tt></a> to improve compatibility with SVr4
curses, changing the way the window rendition is updated when
the background character is modified</p>
</li>
<li>
<p>improved terminfo write/read by modifying the fourth item
of the extended header to denote the number of valid strings
in the extended string table (see <a href=
"https://invisible-island.net/ncurses/man/term.5.html#h3-EXTENDED-STORAGE-FORMAT">
term(5)</a>).</p>
</li>
<li>
<p>modified the initialization checks for mouse so that the
<a href=
"/ncurses/terminfo.src.html#tic-xterm_sm_1006"><tt>xterm+sm+1006</tt></a>
block will work with terminal descriptions not mentioning
<em>xterm</em>.</p>
</li>
</ul>
<p>These were done to limit or ultimately deprecate features:</p>
<ul>
<li>
<p>deprecated <a href=
"https://invisible-island.net/ncurses/NEWS.html#t970831">safe-sprintf</a>,
since the <tt>vsnprintf</tt> function, which does what was
needed, was standardized long ago.</p>
</li>
<li>
<p>marked <a href=
- "https://invisible-island.net/ncurses/man/curs_printw.3x.html#h3-PORTABILITY">
+ "https://invisible-island.net/ncurses/man/curs_printw.3x.html#h2-PORTABILITY">
<tt>vwprintw</tt></a> and <tt>vwscanw</tt> as deprecated;
recommend using <a href=
"https://invisible-island.net/ncurses/man/curs_printw.3x.html">
<tt>vw_printw</tt></a> and <tt>vw_scanw</tt>,
respectively.</p>
</li>
<li>
<p>added deprecation warnings for internal functions called
by older versions of <a href=
"https://invisible-island.net/ncurses/tack.html">tack</a>.</p>
</li>
<li>
<p>removed unused <tt>_nc_import_termtype2</tt> function.</p>
</li>
</ul>
<p>These are improvements to existing features:</p>
<ul>
<li>
<p>check parameter of <a href=
"https://invisible-island.net/ncurses/man/curs_threads.3x.html">
set_escdelay</a>, return ERR if negative.</p>
</li>
<li>
<p>check parameter of <a href=
"https://invisible-island.net/ncurses/man/curs_threads.3x.html">
set_tabsize</a>, return ERR if not greater than zero</p>
</li>
<li>
<p>correct a status-check in _nc_read_tic_entry() so that if
reading a hex/b64 <a href=
"https://invisible-island.net/ncurses/man/ncurses.3x.html#h3-TERMINFO">
<tt>$TERMINFO</tt></a>, and the <a href=
"https://invisible-island.net/ncurses/man/ncurses.3x.html#h3-TERM">
<tt>$TERM</tt></a> does not match, fall-through to the
compiled-in search list.</p>
</li>
<li>
<p>amend check for <a href=
"https://invisible-island.net/ncurses/man/terminfo.5.html#h3-Predefined-Capabilities">
<tt>repeat_char</tt></a> to handle a case where setlocale()
was called after <a href=
"https://invisible-island.net/ncurses/man/curs_initscr.3x.html">
<tt>initscr</tt></a></p>
</li>
<li>
<p>move macro for <a href=
"https://invisible-island.net/ncurses/man/curs_touch.3x.html">
<tt>is_linetouched</tt></a> inside
<strong><tt>NCURSES_NOMACROS</tt></strong>
<em><tt>ifndef</tt></em>.</p>
</li>
<li>
<p>use <tt>_nc_copy_termtype2</tt> rather than direct
assignment in <a href=
"https://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Initialization">
setupterm</a>, in case it is called repeatedly using fallback
terminfo descriptions</p>
</li>
<li>
<p>improve workaround for Solaris wcwidth versus line-drawing
characters</p>
</li>
<li>
<p>add checks in <a href=
"https://invisible-island.net/ncurses/man/resizeterm.3x.html">
<tt>repair_subwindows</tt></a> to keep the current position
and scroll-margins inside the resized subwindow.</p>
</li>
<li>
<p>correct a buffer-limit in <tt>write_entry.c</tt> for
systems that use caseless filenames.</p>
</li>
<li>
<p>improved build-time utility <em>report_offsets</em>:</p>
<ul>
<li>
<p>add categories, e.g., "w" for wide-character, "t" for
threads to make the report more readable. Reorganized the
structures reported to make the categories more
apparent.</p>
</li>
<li>
<p>add <tt>NCURSES_GLOBALS</tt> and
<tt>NCURSES_PRESCREEN</tt> to report to show how similar
the different <em>libtinfo</em> configurations are.</p>
</li>
</ul>
</li>
<li>
<p>modified some header files to ensure that those include
necessary files except for the previously-documented
cases</p>
</li>
<li>
<p>added some traces in initialization to show whether a
fallback entry is used.</p>
</li>
<li>
<p>made minor optimization to reduce calls to
_nc_reserve_pairs</p>
</li>
</ul>
<p>These are corrections to existing features:</p>
<ul>
<li>
<p>fix a special case in <tt>PutAttrChar</tt> where a cell is
marked as alternate-character set, but the terminal does not
actually support the given graphic character. This would
happen in an older terminal such as <em>vt52</em>, which
lacks most line-drawing capability.</p>
</li>
<li>
<p>corrected flag for "seq" method of db 1.8.5 interface,
needed by toe on some of the BSDs.</p>
</li>
<li>
<p>modify comparison in make_hash.c to correct a special case
in collision handling for Caps-hpux11</p>
</li>
<li>
<p>add extended_slk_color{,_sp} symbols to the appropriate
package/*.{map,sym} files</p>
</li>
<li>
<p>modify lib_setup to avoid calling pthread_self() without
first verifying that the address is valid, i.e., for weak
symbols</p>
</li>
<li>
<p>add a couple of broken-linker symbols to the list of
versioned symbols to help with link-time optimization versus
weak symbols.</p>
</li>
</ul>
<h3><a name="h3-programs" id="h3-programs">Program
improvements</a></h3>
- <p>Several improvements were made to the utility programs:</p>
+ <p id="h4-utilities">Several improvements were made to the
+ utility programs:</p>
<dl>
<dt><span class="part-name">clear</span>
</dt>
<dd>
<ul>
<li>improved logic for clearing with the <em>E3</em>
extension, in case the terminal scrolls content onto its
saved-lines before actually clearing the display, by
clearing the saved-lines after clearing the display</li>
</ul>
</dd>
<dt><span class="part-name">infocmp</span>
</dt>
<dd>
<ul>
<li>omit filtering of &ldquo;<tt>OTxx</tt>&rdquo; names
which are used for obsolete capabilities, when the output
is sorted by long-names. This change helps when making a
table of the short/long capability names.</li>
</ul>
</dd>
<dt><span class="part-name">tic</span>
</dt>
<dd>
<ul>
<li>added check for consistent alternate character set
capabilities.</li>
<li>added check for paired <tt>indn</tt>/<tt>rin</tt>.</li>
<li>added check for terminals with <tt>parm_dch</tt> vs
<tt>parm_ich</tt>.</li>
<li>added check for the case where
<tt>setf</tt>/<tt>setb</tt> are given using different
strings, but provide identical results to
<tt>setaf</tt>/<tt>setab</tt>.</li>
<li>corrected check for <tt>ich1</tt>.</li>
<li>changed a too-large terminal entry from a fatal error
to a warning.</li>
</ul>
</dd>
<dt><span class="part-name">toe</span>
</dt>
<dd>
<ul>
<li>ignores any hex/b64 <tt>$TERMINFO</tt> value in the
list of terminfo databases.</li>
</ul>
</dd>
<dt><span class="part-name">tset</span>
</dt>
<dd>
<ul>
<li>replace check in <span class="part-name">reset</span>
command for obsolete &ldquo;<tt>pt</tt>&rdquo; capability
using <tt>tbc</tt> and <tt>hts</tt> capabilities as
clues</li>
<li>modify <span class="part-name">reset</span> to allow
for tabstops at intervals other than 8.</li>
<li>change <span class="part-name">reset</span>'s behavior
for margins to simply clear soft-margins if possible,
rather than clearing and then setting them according to the
terminal's width.</li>
</ul>
</dd>
<dt><span class="part-name">tput</span>
</dt>
<dd>
<ul>
<li>add &ldquo;<tt>x</tt>&rdquo; to <tt>getopt</tt> string
so that &ldquo;<tt>tput&nbsp;-x&nbsp;clear</tt>&rdquo;
works.</li>
</ul>
</dd>
</dl>
<p>Several changes were made to the generated ncurses*config
scripts and the analogous &ldquo;<tt>.pc</tt>&rdquo; files to
reduce differences between the configurations they report:</p>
<ul>
<li>
<p>modified the ncurse*-config and pc-files to more closely
match for the <tt>-I</tt> and <tt>-l</tt> options.</p>
</li>
<li>
<p>filtered out linker-specs from the <tt>--libs</tt>
report.</p>
</li>
<li>
<p>amended the ncurses*-config and pc-files to take into
account the rpath hack which differed between those
files.</p>
</li>
<li>
<p>modified generated ncurses*config and ncurses.pc,
ncursesw.pc, etc., to list helper libraries such as gpm for
static linking.</p>
</li>
</ul>
<h4><a name="h4-examples" id="h4-examples">Examples</a></h4>
<p>Along with the library and utilities, improvements were made
to the <a href=
"https://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a>.
Most of this activity aimed at improving the test-packages. A few
changes are more generally useful, e.g., for the main ncurses
test-program, and for analyzing traces using the
<em>tracemunch</em> script:</p>
<ul>
<li>
<p>improve recovery from error when reading command-character
in <tt>test/ncurses.c</tt>, showing the relevant error
message and not exiting on EINTR.</p>
</li>
<li>
<p>improve <em>tracemunch</em>, by keeping track of
<tt>TERMINAL*</tt> values, and if tracing was first turned on
after initialization, attempt to show distinct screen, window
and terminal names anyway.</p>
</li>
<li>
<p>modify <em>tracemunch</em> to accept filename parameters
in addition to use as a pipe/filter.</p>
</li>
<li>
<p>update <em>tracemunch</em> to work with <em>perl
5.26.2</em>, which changed the rules for escaping regular
expressions.</p>
</li>
<li>
<p>add some checks in <em>tracemunch</em> for undefined
variables.</p>
</li>
<li>
<p>modify <tt>TurnOn</tt>/<tt>TurnOff</tt> macros (in
lib_vidattr.c and lib_vid_attr.c) to avoid expansion of
&ldquo;<tt>CUR</tt>&rdquo; in trace.</p>
</li>
</ul>
<p>There are other new demo/test programs and reusable
examples:</p>
<dl>
<dt><span class="part-name">color_content</span>
</dt>
<dd>Demonstrate the <tt>color_content</tt> and
<tt>extended_color_content</tt> functions.</dd>
<dt><span class="part-name">demo_tabs</span>
</dt>
<dd>A simple demo of tabs in curses.</dd>
<dt><span class="part-name">dump_window</span>
</dt>
<dd>A portable curses screen-dump, used to compare ncurses
screen contents with Solaris.</dd>
<dt><span class="part-name">pair_content</span>
</dt>
<dd>Demonstrate the <tt>pair_content</tt> and
<tt>extended_pair_content</tt> functions.</dd>
<dt><span class="part-name">report_hashing</span>
</dt>
<dd>Check hash-tables used for terminfo and termcap names.</dd>
<dt><span class="part-name">parse_rgb</span>
</dt>
<dd>Sample implementation of the ncurses RGB extension from
<a href=
"https://invisible-island.net/ncurses/man/user_caps.5.html">user_caps.5</a>,
used in <em>picsmap</em> and <em>savescreen</em> programs.</dd>
</dl>
<p>A variety of improvements were made to existing programs, both
new features as well as options added to make the set of programs
more consistent.</p>
<ul>
<li>
<p>add &ldquo;<tt>-l</tt>&rdquo; option to test/background,
to dump screen contents in a form that lets different curses
implementations be compared.</p>
</li>
<li>
<p>add &ldquo;<tt>@</tt>&rdquo; command to test/ncurses
F-test, to allow rapid jump to different character pages.</p>
</li>
<li>
<p>added enum, regex examples to test/demo_forms</p>
</li>
<li>
<p>amend Scaled256() macro in test/picsmap.c to cover the
full range 0..1000</p>
</li>
<li>
<p>corrected pathname used in Ada95 sample programs for
<tt>explain.txt</tt>, to work with test-packages, and used an
awk script to split the resulting pathname when it would be
too long for a single line.</p>
</li>
<li>
<p>ignore interrupted system-call in test/ncurses's
command-line, e.g., if the terminal were resized.</p>
</li>
<li>
<p>improved ifdef's for <tt>TABSIZE</tt> variable, to help
with AIX/HPUX ports.</p>
</li>
</ul>
<h3><a name="h3-database" id="h3-database">Terminal database</a></h3>
<p>There are several new terminal descriptions:</p>
<blockquote style="word-break:keep-all">
<p><tt>alacritty</tt>, <tt>domterm</tt>, <tt>kitty</tt>,
<tt>mintty</tt>, <tt>mintty-direct</tt>, <tt>ms-terminal</tt>,
<tt>n7900</tt>, <tt>nsterm-build309</tt>,
<tt>nsterm-direct</tt>, <tt>screen5</tt>, <tt>ti703</tt>,
<tt>ti707</tt>, <tt>ti703-w</tt>, <tt>ti707-w</tt>
<tt>vscode</tt>, <tt>vscode-direct</tt>, <tt>xterm-mono</tt>,
<tt>xterm.js</tt></p>
</blockquote>
<p>There are many changes to existing terminal descriptions. Some
were updates to several descriptions:</p>
<ul>
<li>use <a href=
"/ncurses/terminfo.src.html#tic-ansi_rep"><tt>ansi+rep</tt></a>
in a dozen places</li>
<li>add rs1 to konsole, mlterm</li>
<li>improve several flash capabilities with trailing mandatory
delays</li>
<li>drop <tt>ich1</tt> from <tt>rxvt-basic</tt>, <tt>Eterm</tt>
and <tt>mlterm</tt> to improve compatibility with old
non-curses programs</li>
<li>add/use <a href=
"/ncurses/terminfo.src.html#tic-xterm_keypad"><tt>xterm+keypad</tt></a>
in <tt>xterm-new</tt></li>
<li>use <a href=
"/ncurses/terminfo.src.html#tic-xterm_sl-twm"><tt>xterm+sl-twm</tt></a>
for consistency, nine places</li>
<li>improve <em>xm</em> example in <a href=
"/ncurses/terminfo.src.html#tic-xterm_x11mouse">xterm+x11mouse</a>
and <a href=
"/ncurses/terminfo.src.html#tic-xterm_sm_1006">xterm+sm_1006</a>.</li>
</ul>
<p>while others affected specific descriptions. These were
retested, to take into account changes by their developers:</p>
<blockquote>
<p><tt>terminator</tt>, <tt>st</tt></p>
</blockquote>
<p>while these are specific fixes based on reviewing
documentation, user reports, or warnings from <span class=
"part-name">tic</span>:</p>
<dl>
<dt><a href=
"/ncurses/terminfo.src.html#tic-adds200">adds200</a>:</dt>
<dd>
<ul>
<li>fix typo</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-gnome-256color">gnome-256color</a>
</dt>
<dd>
<ul>
<li>base entry on "gnome", not "vte", for consistency</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-interix">interix</a>
</dt>
<dd>
<ul>
<li>trim unnecessary setf/setb</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-linux-16color">linux-16color</a>
</dt>
<dd>
<ul>
<li>accommodate <a href=
"https://lists.gnu.org/archive/html/bug-ncurses/2019-10/msg00061.html">
Linux console driver</a> incompatibility introduced in
early 2018</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-nsterm-256color">nsterm-256color</a>:</dt>
<dd>
<ul>
<li>add nsterm-build309 to replace nsterm-256color,
assigning the latter as an alias of nsterm, to make mouse
work with nsterm-256color</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-regent40">regent40</a>:</dt>
<dd>
<ul>
<li>renumber function-keys to match manual</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-regent60">regent60</a>:</dt>
<dd>
<ul>
<li>add cd (clr_eos)</li>
<li>corrected acsc</li>
<li>add shifted function-keys</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-tvi950">tvi950</a>:</dt>
<dd>
<ul>
<li>added function-key definitions to agree with Televideo
950 manual</li>
<li>corrected acsc</li>
<li>remove bogus kf0</li>
<li>add bel</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-tvi955">tvi955</a>:</dt>
<dd>
<ul>
<li>fix typo</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-vi200">vi200</a>:</dt>
<dd>
<ul>
<li>add acsc string, including right/down-arrow</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-wy50">wy50</a>:</dt>
<dd>
<ul>
<li>corrected acsc</li>
</ul>
</dd>
<dt><a href="/ncurses/terminfo.src.html#tic-wy50">wy50</a> and
<a href="/ncurses/terminfo.src.html#tic-wy60">wy60</a>:</dt>
<dd>
<ul>
<li>add shifted function-keys as kF1 to kF16</li>
</ul>
</dd>
<dt><a href=
"/ncurses/terminfo.src.html#tic-xterm_x11hilite">xterm+x11hilite</a>:</dt>
<dd>
<ul>
<li>eliminate unused <em>p5</em> parameter.</li>
</ul>
</dd>
</dl>
<p>A few entries use extensions (user-defined terminal
capabilities):</p>
<ul>
<li>use <a href=
"/ncurses/terminfo.src.html#tic-xterm_sm_1006"><tt>xterm+sm+1006</tt></a>
(aka &ldquo;SGR 1006 mouse&rdquo;) for konsole-base and
putty</li>
<li>add <em><tt>Smol/Rmol</tt></em> user-defined capability to
<tt>tmux</tt> and <tt>vte-2018</tt></li>
<li>add <em><tt>Smulx</tt></em> user-defined capability to
<tt>tmux</tt>, <tt>vte-2018</tt></li>
</ul>
<h3><a name="h3-documentation" id=
"h3-documentation">Documentation</a></h3>
<p>As usual, this release</p>
<ul>
<li>
<p>improves documentation by describing new features,</p>
</li>
<li>
<p>attempts to improve the description of features which
users have found confusing</p>
</li>
<li>
<p>fills in overlooked descriptions of features which were
described in the <a href=
"https://invisible-island.net/ncurses/NEWS.html">NEWS</a>
file but treated sketchily in manual pages.</p>
</li>
</ul>
<p>In addition to providing background information to explain
these features and show how they evolved, there are corrections,
clarifications, etc.:</p>
<ul>
<li>
<p>Corrections:</p>
<ul>
<li>correct error-returns listed in manual pages for a few
form functions</li>
<li>corrected prototypes in several manpages using script
to extract those in compilable form.</li>
<li>fix typo in <a href=
"https://invisible-island.net/ncurses/man/term.5.html#h3-EXTENDED-NUMBER-FORMAT">
term.5</a>, improve explanation of format</li>
</ul>
</li>
<li>
<p>Clarify in manual pages that <a href=
"https://invisible-island.net/ncurses/man/curs_printw.3x.html#h2-PORTABILITY">
vwprintw</a> and <a href=
"https://invisible-island.net/ncurses/man/curs_scanw.3x.html#h2-PORTABILITY">
vwscanw</a> are obsolete.<br>
They have not been part of X/Open Curses since 2007.</p>
</li>
<li>
<p>New/improved history and portability sections:</p>
<ul>
<li><a href=
"https://invisible-island.net/ncurses/man/curs_addch.3x.html#h3-ACS-Symbols">
curs_addch.3x</a> gives some background for ACS
symbols.</li>
<li><a href=
"https://invisible-island.net/ncurses/man/curs_getcchar.3x.html#h2-PORTABILITY">
curs_getcchar.3x</a> explains a difference between ncurses
and X/Open Curses.</li>
<li><a href=
"https://invisible-island.net/ncurses/man/curs_getstr.3x.html#h2-PORTABILITY">
curs_getstr.3x</a> gives historical/portability background
for the length parameter of <tt>wgetnstr</tt>.</li>
<li><a href=
"https://invisible-island.net/ncurses/man/curs_slk.3x.html">
curs_slk.3x</a> lists a few differences between SVr4 curses
and X/Open Curses for soft-keys.</li>
<li><a href=
"https://invisible-island.net/ncurses/man/curs_terminfo.3x.html">
curs_terminfo.3x</a> explains that the initial
implementation of terminfo in SVr2 was mostly replaced by
other developers in SVr3.</li>
<li><a href=
"https://invisible-island.net/ncurses/man/infocmp.1m.html">infocmp.1</a>
explains that the initial version of terminfo had no tool
for decompiling descriptions. That came later, with SVr3,
with a different developer.</li>
<li><a href=
- "https://invisible-island.net/ncurses/man/tabs.1">tabs.1</a>
+ "https://invisible-island.net/ncurses/man/tabs.1.html">tabs.1</a>
tells more than you wanted to know about the tool.</li>
<li><a href=
"https://invisible-island.net/ncurses/man/tic.1m.html">tic.1</a>
explains that the initial version of terminfo had a
rudimentary tool (based on termcap) for compiling entries.
The tool used with Unix was developed by others for
SVr3.</li>
<li><a href=
"https://invisible-island.net/ncurses/man/toe.1m.html">toe.1</a>
explains the origin of this tool.</li>
</ul>
</li>
<li>
<p>Improvements for <a href=
"https://invisible-island.net/ncurses/man/user_caps.5.html">user_caps.5</a>:</p>
<ul>
<li>mention <tt>meml</tt>, <tt>memu</tt> and
<tt>box1</tt></li>
<li>expanded description of <tt>XM</tt></li>
<li>add a clarification regarding the <tt>RGB</tt>
capability.</li>
<li>mention user_caps.5 in the tic and infocmp manual
pages.</li>
</ul>
</li>
<li>
<p>Other improvements:</p>
<ul>
<li><a href=
"https://invisible-island.net/ncurses/man/curs_add_wch.3x.html#h3-Line-Graphics">
curs_add_wch.3x</a> adds note about Unicode terminology for
the line-drawing characters.</li>
<li><a href=
- "https://invisible-island.net/ncurses/man/curs_color.3x.html#h3-RETURN-VALUE">
+ "https://invisible-island.net/ncurses/man/curs_color.3x.html#h2-RETURN-VALUE">
curs_color.3x</a> improves discussion of error returns and
extensions.</li>
<li><a href=
"https://invisible-island.net/ncurses/man/curs_mouse.3x.html">
curs_mouse.3x</a> explains how the <tt>kmous</tt> and
<tt>XM</tt> capabilities are used for xterm-mouse
input.</li>
<li><a href=
"https://invisible-island.net/ncurses/man/curs_refresh.3x.html#h3-wnoutrefresh_doupdate">
curs_refresh.3x</a> improves documentation regarding the
virtual and physical screens.</li>
<li><a href=
"https://invisible-island.net/ncurses/man/curs_util.3x.html">
curs_util.3x</a> mentions a difference between SVr4 and
X/Open Curses for <tt>unctrl.h</tt></li>
<li><a href=
"https://invisible-island.net/ncurses/man/curs_variables.3x.html#h2-PORTABILITY">
curs_variables.3x</a> improves description of the
<em>init_tabs</em> capability and <tt>TABSIZE</tt>
variable.</li>
<li><a href=
"https://invisible-island.net/ncurses/man/ncurses.3x.html#h2-ALTERNATE-CONFIGURATIONS">
ncurses.3x</a> improves documentation regarding
feature-test macros in curses.h</li>
<li><a href=
"https://invisible-island.net/ncurses/man/resizeterm.3x.html#h3-resize_term">
resizeterm.3x</a> about top-level windows which touch the
screen's borders.</li>
<li><a href=
"https://invisible-island.net/ncurses/man/tput.1.html#h3-Terminal-Size">
tput.1</a> clarifies how <em>tput</em> determines the
terminal size.</li>
</ul>
</li>
</ul>
<p>There are no new manual pages (all of the manual page updates
are to existing pages).</p>
<p>Some of the improvements are more subtle, relating to the way
the information is presented. For instance, the generated
terminfo.5 file uses a different table layout, allowing it to use
space on wide terminals more effectively.</p>
<h3><a name="h3-bug-fixes" id="h3-bug-fixes">Interesting
bug-fixes</a></h3>
<p>While there were many bugs fixed during development of ncurses
6.2, only a few (the reason for this release) were both important
and interesting. Most of the bug-fixes were for local issues
which did not affect compatibility across releases. Since those
are detailed in the NEWS file no elaboration is needed here.</p>
<p>The interesting bugs were in tic/infocmp's handling of
user-defined capabilities. These were not recent bugs. Initially
it was a simple problem:</p>
<ul>
<li>The user-defined capabilities can be any type (boolean,
number or string), but once given a type all uses of the name
must conform to that type&mdash;unless some special support for
a particular multi-typed name is built into ncurses.</li>
<li>
<p>One of simpleterm's contributors copied some definitions
for using <em>tmux</em>'s user-defined capabilities in
<a href=
"https://git.suckless.org/st/commit/06f8cf8ca87a81db15816658c40b2afcd1ad5332.html">
late in 2016</a>.</p>
<blockquote>
<pre class="demo-name">
diff --git a/st.info b/st.info
@@ -185,7 +185,10 @@ st| simpleterm,
tsl=\E]0;,
xenl,
vpa=\E[%i%p1%dd,
-
+# Tmux unofficial extensions, see TERMINFO EXTENSIONS in tmux(1)
+ Se,
+ Ss,
+ Tc,
st-256color| simpleterm with 256 colors,
use=st,
</pre>
</blockquote>
</li>
<li>
<p>Later, in (referring to a version from <a href=
"https://git.suckless.org/st/commit/c0882f2ed1d7a2dd0fa2efa52157e6fc6fde3652.html">
mid-2017</a>), a user asked to have it updated in
ncurses.</p>
</li>
<li>
<p>However, it had an error from the change in late 2016. The
terminal description made what <em>tmux</em> expected to be
<strong>string</strong> actually a
<strong>boolean</strong>.</p>
<p>Over the years, there were problems with each of
simpleterm's terminal descriptions. I repaired those, and
usually dealt with the problem.</p>
</li>
<li>
<p>The difference in this case was that when compiling the
terminal database, <em>tic</em> may have in memory the
definitions for more than one terminal description (so that
it can resolve &ldquo;<tt>use=</tt>&rdquo; clauses). Seeing
two different types for the same name, in certain situations
it would incorrectly merge the symbol tables for the two
terminal descriptions.</p>
</li>
<li>
<p>On simpleterm's side, their bug was finally fixed in
<a href=
"https://git.suckless.org/st/commit/83866428de031300eab03fbb116bcf7d2b1d4f60.html">
late 2019</a>, three years after the bug was created.</p>
</li>
</ul>
<p>For ncurses, the elapsed time to fix this bug was less than
three years. Someone reported a problem with the terminal
description a few weeks after releasing ncurses 6.1 (in <a href=
"https://github.com/tmux/tmux/issues/1264">tmux #1264</a>), and
the terminal description was updated that week (ncurses patch
<a href=
"https://invisible-island.net/ncurses/NEWS.html#t20180224">20180224</a>):</p>
<blockquote>
<pre class="demo-name">
20180224
+ modify _nc_resolve_uses2() to detect incompatible types when merging
a "use=" clause of extended capabilities. The problem was seen in a
defective terminfo integrated from simpleterm sources in 20171111,
compounded by repair in 20180121.
+ correct Ss/Ms interchange in st-0.7 entry (tmux #1264) -TD
</pre>
</blockquote>
<p>The larger part of that change added a check to prevent a
simple merge of terminal descriptions where the same user-defined
name was used with different types. But it raised some
questions:</p>
<ul>
<li>
<p>Was there a reliable way to manage terminal descriptions
which used the same extended name in different ways?</p>
</li>
<li>
<p>Should ncurses provide a registry of well-known extended
names, with their types?</p>
</li>
</ul>
<p>Since the correction to <a href=
"https://invisible-island.net/ncurses/ncurses.html#download_database">
<tt>terminfo.src</tt></a> could have been readily adopted by
packagers, there was nothing more to be done from ncurses'
standpoint on that part. But improving ncurses to prevent issues
like that is the reason for making a release.</p>
<p>Nothing more (constructive) was mentioned with regard to
simpleterm. But a few problems were found in the handling of
user-defined capabilities:</p>
<ul>
<li>
<p>Forward-references to user-defined capabilities in a
&ldquo;<tt>use=</tt>&rdquo; clause did not allocate new data
for each use. In <em>tic</em>, successive compilation of
terminal entries could add user-defined capabilities to the
wrong terminal entry.</p>
<p>This was not noticed before, since xterm's terminal
descriptions were the main users of the feature, and almost
all of the uses of the building-blocks which contained
user-defined capabilities were backward-references.</p>
</li>
<li>
<p>There is one (documented) case where ncurses 6.1 supports
a user-defined capability that could be any type (i.e.,
&ldquo;RGB&rdquo;). The check added in February 2018 to guard
against mismatches did not handle all of the combinations
needed.</p>
</li>
</ul>
<p>Both of these issues dated from the original implementation of
user-defined capabilities. Fixing them does not change the
terminal database, but a older <em>tic</em> without the fixes
will not be able to handle terminfo sources which rely upon those
fixes. Starting in June 2019, the download link for the terminfo
source file was capped at that date. The development sources have
an up-to-date copy of the file, for people with a legitimate need
for it.</p>
<p>The &ldquo;<tt>-c</tt>&rdquo; (check) option of <em>tic</em>
is not very useful if it cannot offer advice on parameters needed
for user-defined capabilities. The various <em>Caps</em> files
were reorganized to reduce redundancy, and in the common portion
(<a href=
"https://github.com/ThomasDickey/ncurses-snapshots/blob/master/include/Caps-ncurses">Caps-ncurses</a>),
a registry of user-defined capabilities is provided for use by
<em>tic</em>. While users can still define their own custom
capabilities, <em>tic</em> will not offer any advice when their
parameters do not match.</p>
<p>In ncurses 6.2, <em>tic</em> makes a special check to allow
any type for <em>RGB</em>, but its being able to do this relies
upon fixes made in the ncurses library in mid-2019.</p>
<h3><a name="h3-config-config" id=
"h3-config-config">Configuration changes</a></h3>
<h4><a name="h4-config-major" id="h4-config-major">Major
changes</a></h4>
<p>There are no major changes. Several new options were added to
ease integration of packages with systems using different
versions of <em>GNAT</em> and <em>ncurses</em>. Also,
improvements were made to configure checks.</p>
<h4><a name="h4-config-options" id=
"h4-config-options">Configuration options</a></h4>
<p>There are a few new/modified configure options:</p>
<dl>
<dt><tt>--with-config-suffix</tt>
</dt>
<dd>
<p>helps work around a filename conflict with Debian packages
versus test-packages.</p>
</dd>
<dt><tt>--with-ada-libname</tt>
</dt>
<dd>
<p>allows one to rename the &ldquo;AdaCurses&rdquo; library
(at least one packager prefers a lowercase name).</p>
</dd>
<dt><tt>--with-fallbacks</tt>
</dt>
<dd>
<p>now ensures there is a value, and adds the fallback
information to top-level Makefile summary.</p>
</dd>
<dt><tt>--with-pcre2</tt>
</dt>
<dd>
<p>check for pcre-posix library to help with MinGW port.</p>
</dd>
<dt><tt>--with-tic-path</tt> and<br></dt>
<dt><tt>--with-infocmp-path</tt>
</dt>
<dd>
<p>help work around problems building fallback source using
pre-6.0 tic/infocmp.</p>
</dd>
<dt><tt>--with-versioned-syms</tt>
</dt>
<dd>
<p>option value can now be a relative pathname.</p>
</dd>
</dl>
<h3><a name="h3-portability" id="h3-portability">Portability</a></h3>
<p>Many of the portability changes are implemented via the
configure script:</p>
<ul>
<li>
<p>ignore <a href=
"/ncurses/man/ncurses.3x.html#h3-TERMINFO"><tt>$TERMINFO</tt></a>
as a default value in configure script if it came from the
<tt>infocmp</tt> <strong><tt>-Q</tt></strong> option.</p>
</li>
<li>
<p>distinguish gcc from icc and clang when the
<tt>--enable-warnings</tt> option is not used, to avoid
unnecessary warnings about unrecognized inline options</p>
</li>
<li>
<p>consistently prepend new libraries as they are found
during configuration, rather than relying upon the linker to
resolve order dependencies of libraries.</p>
</li>
<li>
<p>modified configure scripts to reduce relinking/ranlib
during library install :</p>
<ul>
<li>use &ldquo;<tt>install -p</tt>&rdquo; when available,
to avoid need for ranlib of static libraries.</li>
<li>scripts which use
&ldquo;<tt>--disable-relink</tt>;&rdquo; add a 1-second
sleep to work around tools which use whole-second
timestamps, e.g., in <tt>utime</tt> rather than the actual
file system resolution.</li>
</ul>
</li>
<li>
<p id="getenv-check">add configure check for <a href=
"#getenv-fixes"><tt>getenv</tt></a> to work around
implementation shown in Emscripten which overwrites the
previous return value on each call.</p>
<p>Use that to optionally suppress <tt>START_TRACE</tt>
macro, whose call to <tt>getenv</tt> may not work
properly</p>
</li>
<li>
<p>change target configure level for <tt>_XOPEN_SOURCE</tt>
to 600 to address use of <tt>vsscanf</tt> and
<tt>setenv</tt>.</p>
</li>
<li>
<p>reduce use of <tt>_GNU_SOURCE</tt> for current glibc where
<tt>_DEFAULT_SOURCE</tt> combines with
<tt>_XOPEN_SOURCE</tt></p>
<p>Allow for Cygwin's newlib when checking for the
_DEFAULT_SOURCE symbol.</p>
<p>MidnightBSD is now checked for the
<tt>_XOPEN_SOURCE</tt>-related definitions.</p>
</li>
<li>
<p>If the check for <tt>va_copy</tt> or <tt>__va_copy</tt>
fails,</p>
<ul>
<li>configure now tries copying the pointers for
<tt>va_list</tt>, or as an array.</li>
<li>alternatively, it checks for
<tt>__builtin_va_copy</tt>(), which could be used with AIX
<tt>xlc</tt> in <em>c89</em> mode.</li>
</ul>
</li>
<li>
<p>several changes to support a port to Ultrix 3.1:</p>
<ul>
<li>check if "b" binary feature of fopen works</li>
<li>check for missing feature of locale.h</li>
<li>add fallback for strstr() in test-programs</li>
<li>add fallback for STDOUT_FILENO in test-programs</li>
</ul>
</li>
<li>
<p>The <em>test/configure</em> script (used for <a href=
"/ncurses/ncurses-examples.html"><em>ncurses-examples</em></a>)
is improved:</p>
<ul>
<li>work around non-ncurses termcap.h file, e.g., in
Slackware.</li>
<li>check for <a href=
"/ncurses/man/curs_variables.3x.html#h3-TABSIZE"><tt>TABSIZE</tt></a>
variable.</li>
<li>checks for the X11/Intrinsic.h header, accommodate
recent MacOS changes which largely emptied
<tt>/usr/include</tt>.</li>
</ul>
</li>
</ul>
<p>Here are some of the other portability fixes:</p>
<ul>
<li>
<p>added dummy "check" rule in top-level and test-Makefile to
simplify building test-packages for ArchLinux.</p>
</li>
<li>
<p>dropped library-dependency on psapi for MinGW port, since
win_driver.c defines <tt>PSAPI_VERSION</tt> to 2, making it
use <tt>GetProcessImageFileName</tt> from kernel32.dll</p>
</li>
<li>
<p>made build-fixes for configuration using --program-suffix
with Ada95, noticed with MacOS but applicable to other
platforms without libpanelw, etc.</p>
</li>
<li>
<p>modified ncurses/Makefile.in to fix a case where
Debian/testing changes to the ld --as-needed configuration
broke ncurses-examples test packages.</p>
</li>
<li>
<p>used <tt>_WIN32</tt>/<tt>_WIN64</tt> in preference to
<tt>__MINGW32__</tt>/<tt>__MINGW64__</tt> symbols to simplify
building with Microsoft Visual C++, since the former are
defined in both compiler configurations.</p>
</li>
</ul>
<hr>
<h2><a name="h2-features" id="h2-features">Features of
<span class="main-name">ncurses</span></a></h2>
<p>The <span class="main-name">ncurses</span> package is fully
upward-compatible with SVr4 (System V Release 4) curses:</p>
<ul>
<li>
<p>All of the SVr4 calls have been implemented (and are
documented).</p>
</li>
<li>
<p><span class="main-name">ncurses</span> supports all of the
for SVr4 curses features including keyboard mapping, color,
forms-drawing with ACS characters, and automatic recognition
of keypad and function keys.</p>
</li>
<li>
<p><span class="main-name">ncurses</span> provides these SVr4
add-on libraries (not part of X/Open Curses):</p>
<ul>
<li>
<p>the panels library, supporting a stack of windows with
backing store.</p>
</li>
<li>
<p>the menus library, supporting a uniform but flexible
interface for menu programming.</p>
</li>
<li>
<p>the form library, supporting data collection through
on-screen forms.</p>
</li>
</ul>
</li>
<li>
<p><span class="main-name">ncurses</span>'s terminal database
is fully compatible with that used by SVr4 curses.</p>
<ul>
<li>
<p><span class="main-name">ncurses</span> supports
user-defined capabilities which it can see, but which are
hidden from SVr4 curses applications using the
<em>same</em> terminal database.</p>
</li>
<li>
<p>It can be optionally configured to match the format
used in related systems such as AIX and Tru64.</p>
</li>
<li>
<p>Alternatively, <span class="main-name">ncurses</span>
can be configured to use hashed databases rather than the
directory of files used by SVr4 curses.</p>
</li>
</ul>
</li>
<li>
<p>The <span class="main-name">ncurses</span> utilities have
options to allow you to filter terminfo entries for use with
less capable <em>curses</em>/<em>terminfo</em> versions such
as the HP/UX and AIX ports.</p>
</li>
</ul>
<p>The <span class="main-name">ncurses</span> package also has
many useful extensions over SVr4:</p>
<ul>
<li>
<p>The API is 8-bit clean and base-level conformant with the
X/OPEN curses specification, XSI curses (that is, it
implements all BASE level features, and most EXTENDED
features). It includes many function calls not supported
under SVr4 curses (but portability of all calls is documented
so you can use the SVr4 subset only).</p>
</li>
<li>
<p>Unlike SVr3 curses, <span class="main-name">ncurses</span>
can write to the rightmost-bottommost corner of the screen if
your terminal has an insert-character capability.</p>
</li>
<li>
<p>Ada95 and C++ bindings.</p>
</li>
<li>
<p>Support for mouse event reporting with X Window xterm and
FreeBSD and OS/2 console windows.</p>
</li>
<li>
<p>Extended mouse support via Alessandro Rubini's gpm
package.</p>
</li>
<li>
<p>The function <code>wresize</code> allows you to resize
windows, preserving their data.</p>
</li>
<li>
<p>The function <code>use_default_colors</code> allows you to
use the terminal's default colors for the default color pair,
achieving the effect of transparent colors.</p>
</li>
<li>
<p>The functions <code>keyok</code> and
<code>define_key</code> allow you to better control the use
of function keys, e.g., disabling the <span class=
"main-name">ncurses</span> KEY_MOUSE, or by defining more
than one control sequence to map to a given key code.</p>
</li>
<li>
<p>Support for 256-color terminals, such as modern xterm.</p>
</li>
<li>
<p>Support for 16-color terminals, such as <em>aixterm</em>
and <em>modern xterm</em>.</p>
</li>
<li>
<p>Better cursor-movement optimization. The package now
features a cursor-local-movement computation more efficient
than either BSD's or System V's.</p>
</li>
<li>
<p>Super hardware scrolling support. The screen-update code
incorporates a novel, simple, and cheap algorithm that
enables it to make optimal use of hardware scrolling,
line-insertion, and line-deletion for screen-line movements.
This algorithm is more powerful than the 4.4BSD curses
<code>quickch</code> routine.</p>
</li>
<li>
<p>Real support for terminals with the magic-cookie glitch.
The screen-update code will refrain from drawing a highlight
if the magic- cookie unattributed spaces required just before
the beginning and after the end would step on a non-space
character. It will automatically shift highlight boundaries
when doing so would make it possible to draw the highlight
without changing the visual appearance of the screen.</p>
</li>
<li>
<p>It is possible to generate the library with a list of
pre-loaded fallback entries linked to it so that it can serve
those terminal types even when no terminfo tree or termcap
file is accessible (this may be useful for support of
screen-oriented programs that must run in single-user
mode).</p>
</li>
<li>
<p>The <a href=
"https://invisible-island.net/ncurses/man/tic.1m.html"><span class="part-name">
tic</span></a>/<a href=
"https://invisible-island.net/ncurses/man/captoinfo.1m.html">captoinfo</a>
utility provided with <span class="main-name">ncurses</span>
has the ability to translate many termcaps from the XENIX,
IBM and AT&amp;T extension sets.</p>
</li>
<li>
<p>A BSD-like <a href=
"https://invisible-island.net/ncurses/man/tset.1.html"><span class="part-name">
tset</span></a> utility is provided.</p>
</li>
<li>
<p>The <span class="main-name">ncurses</span> library and
utilities will automatically read terminfo entries from
$HOME/.terminfo if it exists, and compile to that directory
if it exists and the user has no write access to the system
directory. This feature makes it easier for users to have
personal terminfo entries without giving up access to the
system terminfo directory.</p>
</li>
<li>
<p>You may specify a path of directories to search for
compiled descriptions with the environment variable
TERMINFO_DIRS (this generalizes the feature provided by
TERMINFO under stock System V.)</p>
</li>
<li>
<p>In terminfo source files, use capabilities may refer not
just to other entries in the same source file (as in System
V) but also to compiled entries in either the system terminfo
directory or the user's $HOME/.terminfo directory.</p>
</li>
<li>
<p>The table-of-entries utility <a href=
"https://invisible-island.net/ncurses/man/toe.1m.html"><span class="part-name">
toe</span></a> makes it easy for users to see exactly what
terminal types are available on the system.</p>
</li>
<li>
<p>The library meets the XSI requirement that every macro
entry point have a corresponding function which may be linked
(and will be prototype-checked) if the macro definition is
disabled with <code>#undef</code>.</p>
</li>
<li>
<p>Extensive documentation is provided (see the <em><a href=
"https://invisible-island.net/ncurses/ncurses.faq.html#additional_reading">
Additional Reading</a></em> section of the <em><a href=
"https://invisible-island.net/ncurses/ncurses.faq.html"><span class="main-name">
ncurses</span> FAQ</a></em> for online documentation).</p>
</li>
</ul>
<h2><a name="h2-who-uses" id="h2-who-uses">Applications using
<span class="main-name">ncurses</span></a></h2>
<p>The <span class="main-name">ncurses</span> distribution
includes a selection of test programs (including a few games).
These are available separately as <a href=
"https://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a></p>
<p>The ncurses library has been tested with a wide variety of
applications including:</p>
<blockquote>
<dl>
<dt><span class="part-name">aptitude</span>
</dt>
<dd>
<p>FrontEnd to Apt, the debian package manager</p>
<p><a href=
"https://wiki.debian.org/Aptitude">https://wiki.debian.org/Aptitude</a></p>
</dd>
<dt><span class="part-name">cdk</span>
</dt>
<dd>
<p>Curses Development Kit</p>
<p><a href=
"https://invisible-island.net/cdk/">https://invisible-island.net/cdk/</a><br>
</p>
</dd>
<dt><span class="part-name">ded</span>
</dt>
<dd>
<p>directory-editor</p>
<p><a href=
"https://invisible-island.net/ded/">https://invisible-island.net/ded/</a></p>
</dd>
<dt><span class="part-name">dialog</span>
</dt>
<dd>
<p>the underlying application used in Slackware's setup,
and the basis for similar install/configure applications on
many systems.</p>
<p><a href=
"https://invisible-island.net/dialog/">https://invisible-island.net/dialog/</a></p>
</dd>
<dt><span class="part-name">lynx</span>
</dt>
<dd>
<p>the text WWW browser</p>
<p><a href=
"https://lynx.invisible-island.net/">https://lynx.invisible-island.net/</a></p>
</dd>
<dt><span class="part-name">mutt</span>
</dt>
<dd>
<p>mail utility</p>
<p><a href="http://www.mutt.org/">http://www.mutt.org/</a></p>
</dd>
<dt><span class="part-name">ncftp</span>
</dt>
<dd>
<p>file-transfer utility</p>
<p><a href=
"https://www.ncftp.com/">https://www.ncftp.com/</a></p>
</dd>
<dt><span class="part-name">nvi</span>
</dt>
<dd>
<p>New vi uses ncurses.</p>
<p><a href=
"https://sites.google.com/a/bostic.com/keithbostic/vi">https://sites.google.com/a/bostic.com/keithbostic/vi</a><br>
</p>
</dd>
<dt><span class="part-name">ranger</span>
</dt>
<dd>
<p>A console file manager with VI key bindings in
<em>Python</em>.</p>
<p><a href=
"https://ranger.github.io/">https://ranger.github.io/</a></p>
</dd>
<dt><span class="part-name">tin</span>
</dt>
<dd>
<p>newsreader, supporting color, MIME</p>
<p><a href="http://www.tin.org/">http://www.tin.org/</a></p>
</dd>
<dt><span class="part-name">vifm</span>
</dt>
<dd>
<p>File manager with vi like keybindings</p>
<p><a href="https://vifm.info/">https://vifm.info/</a></p>
</dd>
</dl>
</blockquote>
<p>as well as some that use <span class=
"main-name">ncurses</span> for the terminfo support alone:</p>
<blockquote>
<dl>
<dt><span class="part-name">minicom</span>
</dt>
<dd>
<p>terminal emulator for serial modem connections</p>
<p><a href=
"https://alioth.debian.org/projects/minicom/">https://alioth.debian.org/projects/minicom/</a></p>
</dd>
<dt><span class="part-name">mosh</span>
</dt>
<dd>
<p>a replacement for <code>ssh</code>.</p>
<p><a href=
"https://mosh.mit.edu/">https://mosh.mit.edu/</a></p>
</dd>
<dt><span class="part-name">tack</span>
</dt>
<dd>
<p>terminfo action checker</p>
<p><a href=
"https://invisible-island.net/ncurses/tack.html">https://invisible-island.net/ncurses/tack.html</a></p>
</dd>
<dt><span class="part-name">tmux</span>
</dt>
<dd>
<p>terminal multiplexor</p>
<p><a href=
"https://github.com/tmux/tmux/wiki">https://github.com/tmux/tmux/wiki</a></p>
</dd>
<dt><span class="part-name">vile</span>
</dt>
<dd>
<p><em>vi-like-emacs</em> may be built to use the terminfo,
termcap or curses interfaces.</p>
<p><a href=
"https://invisible-island.net/vile/">https://invisible-island.net/vile/</a></p>
</dd>
</dl>
</blockquote>
<p>and finally, those which use only the termcap interface:</p>
<blockquote>
<dl>
<dt><span class="part-name">emacs</span>
</dt>
<dd>
<p>text editor</p>
<p><a href=
"https://www.gnu.org/software/emacs/">https://www.gnu.org/software/emacs/</a></p>
</dd>
<dt><span class="part-name">less</span>
</dt>
<dd>
<p>The most commonly used <em>pager</em> (a program that
displays text files).</p>
<p><a href=
"http://www.greenwoodsoftware.com/less/">http://www.greenwoodsoftware.com/less/</a></p>
</dd>
<dt><span class="part-name">screen</span>
</dt>
<dd>
<p>terminal multiplexor</p>
<p><a href=
"https://www.gnu.org/software/screen/">https://www.gnu.org/software/screen/</a></p>
</dd>
<dt><span class="part-name">vim</span>
</dt>
<dd>
<p>text editor</p>
<p><a href="https://www.vim.org/">https://www.vim.org/</a></p>
</dd>
</dl>
</blockquote>
<h2><a name="h2-development" id="h2-development">Development
activities</a></h2>
<p>Zeyd Ben-Halim started <span class="main-name">ncurses</span>
from a previous package pcurses, written by Pavel Curtis. Eric S.
Raymond continued development. J&uuml;rgen Pfeifer wrote most of
the form and menu libraries.</p>
<p>Ongoing development work is done by <a href=
"mailto:dickey@invisible-island.net">Thomas E. Dickey</a>. Thomas
E. Dickey has acted as the maintainer for the Free Software
Foundation, which holds a <a href=
"https://invisible-island.net/ncurses/ncurses-license.html">copyright
on ncurses</a> for releases 4.2 through 6.1. Following the
release of ncurses 6.1, effective as of release 6.2, copyright
for ncurses reverted to Thomas E. Dickey (see the <a href=
"https://invisible-island.net/ncurses/ncurses.faq.html#relicensed">
ncurses FAQ</a> for additional information).</p>
<p>Contact the current maintainers at</p>
<blockquote>
<a href="mailto:bug-ncurses@gnu.org">bug-ncurses@gnu.org</a>
</blockquote>
<p>To join the ncurses mailing list, please write email to</p>
<blockquote>
<a href=
"mailto:bug-ncurses-request@gnu.org">bug-ncurses-request@gnu.org</a>
</blockquote>
containing the line:
<blockquote>
<p><code>subscribe</code>
<em>&lt;name&gt;@&lt;host.domain&gt;</em></p>
</blockquote>
<p>This list is open to anyone interested in helping with the
development and testing of this package.</p>
<p>Beta versions of <span class="main-name">ncurses</span> are
made available at</p>
<blockquote>
<p><a href=
"ftp://ftp.invisible-island.net/ncurses/current/">ftp://ftp.invisible-island.net/ncurses/current/</a>
and<br>
<a href=
"https://invisible-mirror.net/archives/ncurses/current/">https://invisible-mirror.net/archives/ncurses/current/</a>&nbsp;.</p>
</blockquote>
<p>Patches to the current release are made available at</p>
<blockquote>
<p><a href=
"ftp://ftp.invisible-island.net/ncurses/6.1/">ftp://ftp.invisible-island.net/ncurses/6.1/</a>
and<br>
<a href=
"https://invisible-mirror.net/archives/ncurses/6.1/">https://invisible-mirror.net/archives/ncurses/6.1/</a>&nbsp;.</p>
</blockquote>
<p>There is an archive of the mailing list here:</p>
<blockquote>
<p><a href=
"http://lists.gnu.org/archive/html/bug-ncurses">http://lists.gnu.org/archive/html/bug-ncurses</a>
(also <a href=
"https://lists.gnu.org/archive/html/bug-ncurses">https</a>)</p>
</blockquote>
<h2><a name="h2-this-stuff" id="h2-this-stuff">Related
resources</a></h2>
<p>The release notes make scattered references to these pages,
which may be interesting by themselves:</p>
<ul>
<li><a href=
"https://invisible-island.net/ncurses/ncurses-license.html"><span class="main-name">
ncurses</span> licensing</a></li>
<li><a href=
"https://invisible-island.net/ncurses/ncurses-mapsyms.html">Symbol
versioning in <span class="main-name">ncurses</span></a></li>
<li><a href=
"https://invisible-island.net/ncurses/ncurses-slang.html">Comments
on <span class="main-name">ncurses</span> versus <span class=
"main-name">slang</span> (S-Lang)</a></li>
<li><a href=
"https://invisible-island.net/ncurses/tack.html">tack &ndash;
terminfo action checker</a></li>
<li><a href=
"https://invisible-island.net/ncurses/tctest.html">tctest
&ndash; termcap library checker</a></li>
<li><a href=
"https://invisible-island.net/ncurses/ncurses.html#download_database">
Terminal Database</a></li>
</ul>
<h2><a name="h2-other-stuff" id="h2-other-stuff">Other
resources</a></h2>
<p>The distribution provides a newer version of the
terminfo-format terminal description file once maintained by
<a href="http://www.catb.org/~esr/terminfo/">Eric
Raymond</a>&nbsp;. Unlike the older version, the termcap and
terminfo data are provided in the same file, which also provides
several user-definable extensions beyond the X/Open
specification.</p>
<p>You can find lots of information on terminal-related topics
not covered in the terminfo file at <a href=
"http://web.archive.org/web/*/http://www.cs.utk.edu/~shuford/terminal">
Richard Shuford's archive</a>&nbsp;. The collection of computer
manuals at <a href=
"http://www.bitsavers.org/pdf/">bitsavers.org</a> has also been
useful.</p>
<div class="nav">
<ul>
<li><a href="#h2-overview">Overview</a></li>
<li>
<a href="#h2-release-notes">Release Notes</a>
<ul>
<li>
<a href="#h3-library">Library improvements</a>
<ul>
<li><a href="#h4-new-library">New features</a></li>
<li><a href="#h4-fixes-library">Other
improvements</a></li>
</ul>
</li>
<li>
<a href="#h3-programs">Program improvements</a>
<ul>
<li><a href="#h4-utilities">Utilities</a></li>
<li><a href="#h4-examples">Examples</a></li>
</ul>
</li>
<li><a href="#h3-database">Terminal database</a></li>
<li><a href="#h3-documentation">Documentation</a></li>
<li><a href="#h3-bug-fixes">Interesting bug-fixes</a></li>
<li>
<a href="#h3-config-config">Configuration changes</a>
<ul>
<li><a href="#h4-config-major">Major changes</a></li>
<li><a href="#h4-config-options">Configuration
options</a></li>
</ul>
</li>
<li><a href="#h3-portability">Portability</a></li>
</ul>
</li>
<li><a href="#h2-features">Features of <span class=
"main-name">ncurses</span></a></li>
<li><a href="#h2-who-uses">Applications using <span class=
"main-name">ncurses</span></a></li>
<li><a href="#h2-development">Development activities</a></li>
<li><a href="#h2-this-stuff">Related resources</a></li>
<li><a href="#h2-other-stuff">Other resources</a></li>
</ul>
</div>
</body>
</html>
diff --git a/contrib/ncurses/form/Makefile.in b/contrib/ncurses/form/Makefile.in
index 3e5be8daadfe..3d713469fe0c 100644
--- a/contrib/ncurses/form/Makefile.in
+++ b/contrib/ncurses/form/Makefile.in
@@ -1,182 +1,197 @@
-# $Id: Makefile.in,v 1.65 2020/02/02 23:34:34 tom Exp $
+# $Id: Makefile.in,v 1.71 2021/01/23 20:42:08 tom Exp $
##############################################################################
-# Copyright 2020 Thomas E. Dickey #
+# Copyright 2020,2021 Thomas E. Dickey #
# Copyright 1998-2015,2018 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey 1996-on
#
# Makefile for form source code.
#
# This makes the following:
# libraries (normal/debug/profile/shared)
#
# The variable 'srcdir' refers to the source-distribution, and can be set with
# the configure script by "--srcdir=DIR".
#
# The rules are organized to produce the libraries for the configured models,
# turn off _all_ suffix rules; we'll generate our own
.SUFFIXES:
SHELL = @SHELL@
VPATH = @srcdir@
THIS = Makefile
x = @EXEEXT@
o = .@OBJEXT@
MODEL = @DFT_LWR_MODEL@
DESTDIR = @DESTDIR@
top_srcdir = @top_srcdir@
srcdir = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
includedir = @includedir@
includesubdir = @includesubdir@
INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir)
PACKAGE = @PACKAGE@
LIBTOOL = @LIBTOOL@
LIBTOOL_OPTS = @LIBTOOL_OPTS@ @EXPORT_SYMS@
LIBTOOL_CLEAN = @LIB_CLEAN@
LIBTOOL_COMPILE = @LIB_COMPILE@
LIBTOOL_LINK = @LIB_LINK@
LIBTOOL_INSTALL = @LIB_INSTALL@
LIBTOOL_UNINSTALL = @LIB_UNINSTALL@
LT_UNDEF = @LT_UNDEF@
INSTALL = @INSTALL@
INSTALL_LIB = @INSTALL@ @INSTALL_LIB@
INSTALL_PROG = @INSTALL_PROGRAM@ @INSTALL_OPT_S@
INSTALL_DATA = @INSTALL_DATA@
AR = @AR@
ARFLAGS = @ARFLAGS@
AWK = @AWK@
LD = @LD@
LN_S = @LN_S@
CTAGS = @CTAGS@
ETAGS = @ETAGS@
CC = @CC@
CPP = @CPP@
-CFLAGS = @CFLAGS@
+CFLAGS = @CFLAGS@ @EXTRA_CFLAGS@
-CPPFLAGS = -I${top_srcdir}/ncurses -DHAVE_CONFIG_H @CPPFLAGS@
+INCDIR = $(top_srcdir)/include
+BASE_DIR = $(top_srcdir)/ncurses
+CPPFLAGS = -I$(BASE_DIR) -DHAVE_CONFIG_H -DBUILDING_FORM @CPPFLAGS@
CCFLAGS = $(CPPFLAGS) $(CFLAGS)
CFLAGS_LIBTOOL = $(CCFLAGS)
-CFLAGS_NORMAL = $(CCFLAGS)
-CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE
-CFLAGS_PROFILE = $(CCFLAGS) -pg
+CFLAGS_NORMAL = $(CCFLAGS) -DNCURSES_STATIC
+CFLAGS_DEBUG = $(CCFLAGS) -DNCURSES_STATIC @CC_G_OPT@ -DTRACE
+CFLAGS_PROFILE = $(CCFLAGS) -DNCURSES_STATIC -pg
CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@
CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@)
LINK = $(LIBTOOL_LINK)
LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@
SHLIB_DIRS = -L../lib
SHLIB_LIST = $(SHLIB_DIRS) -lncurses@USE_LIB_SUFFIX@ @SHLIB_LIST@
RPATH_LIST = @RPATH_LIST@
RESULTING_SYMS = @RESULTING_SYMS@
VERSIONED_SYMS = @VERSIONED_SYMS@
MK_SHARED_LIB = @MK_SHARED_LIB@
NCURSES_MAJOR = @NCURSES_MAJOR@
NCURSES_MINOR = @NCURSES_MINOR@
REL_VERSION = @cf_cv_rel_version@
ABI_VERSION = @cf_cv_abi_version@
RANLIB = @LIB_PREP@
LIBRARIES = @Libs_To_Make@
LINT = @LINT@
LINT_OPTS = @LINT_OPTS@
LINT_LIBS = -lform -lncurses @LIBS@
AUTO_SRC = \
../include/form.h
################################################################################
all \
libs \
install :: $(AUTO_SRC) $(LIBRARIES)
sources : $(AUTO_SRC)
$(DESTDIR)$(bindir) \
$(DESTDIR)$(libdir) :
mkdir -p $@
# make copies to simplify include-paths while still keeping form's include
# file in this directory.
../include/form.h : $(srcdir)/form.h
-rm -f $@
cp $(srcdir)/form.h $@
HEADER_DEPS = \
- $(srcdir)/form.priv.h \
- $(srcdir)/form.h \
- ../include/mf_common.h \
../include/curses.h \
- ../include/eti.h
+ ../include/eti.h \
+ ../include/mf_common.h \
+ ../include/ncurses_cfg.h \
+ ../include/ncurses_def.h \
+ ../include/ncurses_dll.h \
+ ../include/term.h \
+ ../include/unctrl.h \
+ $(BASE_DIR)/curses.priv.h \
+ $(BASE_DIR)/new_pair.h \
+ $(INCDIR)/nc_alloc.h \
+ $(INCDIR)/nc_panel.h \
+ $(INCDIR)/nc_string.h \
+ $(INCDIR)/nc_termios.h \
+ $(INCDIR)/nc_tparm.h \
+ $(INCDIR)/term_entry.h \
+ $(srcdir)/form.h \
+ $(srcdir)/form.priv.h
tags:
$(CTAGS) *.[ch]
@MAKE_UPPER_TAGS@TAGS:
@MAKE_UPPER_TAGS@ $(ETAGS) *.[ch]
mostlyclean ::
-rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace
clean :: mostlyclean
-rm -f $(AUTO_SRC)
distclean :: clean
-rm -f Makefile
-rm -rf .libs *.dSYM
realclean :: distclean
../include/mf_common.h \
../include/eti.h :
- cd ../menu && $(MAKE) $@
+ ( cd ../menu && $(MAKE) $@ )
###############################################################################
# The remainder of this file is automatically generated during configuration
###############################################################################
diff --git a/contrib/ncurses/form/f_trace.c b/contrib/ncurses/form/f_trace.c
index d24708ceb34f..c8df81a56ba3 100644
--- a/contrib/ncurses/form/f_trace.c
+++ b/contrib/ncurses/form/f_trace.c
@@ -1,72 +1,72 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 2004-2010,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: f_trace.c,v 1.5 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: f_trace.c,v 1.6 2020/05/24 01:40:20 anonymous.maarten Exp $")
-NCURSES_EXPORT(FIELD **)
+FORM_EXPORT(FIELD **)
_nc_retrace_field_ptr(FIELD **code)
{
T((T_RETURN("%p"), (void *)code));
return code;
}
-NCURSES_EXPORT(FIELD *)
+FORM_EXPORT(FIELD *)
_nc_retrace_field(FIELD *code)
{
T((T_RETURN("%p"), (void *)code));
return code;
}
-NCURSES_EXPORT(FIELDTYPE *)
+FORM_EXPORT(FIELDTYPE *)
_nc_retrace_field_type(FIELDTYPE *code)
{
T((T_RETURN("%p"), (void *)code));
return code;
}
-NCURSES_EXPORT(FORM *)
+FORM_EXPORT(FORM *)
_nc_retrace_form(FORM *code)
{
T((T_RETURN("%p"), (void *)code));
return code;
}
-NCURSES_EXPORT(Form_Hook)
+FORM_EXPORT(Form_Hook)
_nc_retrace_form_hook(Form_Hook code)
{
TR_FUNC_BFR(1);
T((T_RETURN("%s"), TR_FUNC_ARG(0, code)));
return code;
}
diff --git a/contrib/ncurses/form/fld_arg.c b/contrib/ncurses/form/fld_arg.c
index e7555f65a7c6..2f6c47715ccd 100644
--- a/contrib/ncurses/form/fld_arg.c
+++ b/contrib/ncurses/form/fld_arg.c
@@ -1,104 +1,104 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 1998-2012,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_arg.c,v 1.16 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_arg.c,v 1.18 2020/12/11 22:05:24 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_fieldtype_arg(
| FIELDTYPE *typ,
| void * (* const make_arg)(va_list *),
| void * (* const copy_arg)(const void *),
| void (* const free_arg)(void *) )
|
| Description : Connects to the type additional arguments necessary
| for a set_field_type call. The various function pointer
| arguments are:
| make_arg : allocates a structure for the field
| specific parameters.
| copy_arg : duplicate the structure created by
| make_arg
| free_arg : Release the memory allocated by make_arg
| or copy_arg
|
| At least make_arg must be non-NULL.
| You may pass NULL for copy_arg and free_arg if your
| make_arg function doesn't allocate memory and your
| arg fits into the storage for a (void*).
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid argument
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_fieldtype_arg(FIELDTYPE *typ,
void *(*const make_arg)(va_list *),
void *(*const copy_arg)(const void *),
void (*const free_arg) (void *))
{
TR_FUNC_BFR(3);
T((T_CALLED("set_fieldtype_arg(%p,%s,%s,%s)"),
(void *)typ,
TR_FUNC_ARG(0, make_arg),
TR_FUNC_ARG(1, copy_arg),
TR_FUNC_ARG(2, free_arg)));
if (typ != 0 && make_arg != (void *)0)
{
SetStatus(typ, _HAS_ARGS);
typ->makearg = make_arg;
typ->copyarg = copy_arg;
typ->freearg = free_arg;
RETURN(E_OK);
}
RETURN(E_BAD_ARGUMENT);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : void *field_arg(const FIELD *field)
|
-| Description : Retrieve pointer to the fields argument structure.
+| Description : Retrieve pointer to the field's argument structure.
|
| Return Values : Pointer to structure or NULL if none is defined.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void *)
+FORM_EXPORT(void *)
field_arg(const FIELD *field)
{
T((T_CALLED("field_arg(%p)"), (const void *)field));
returnVoidPtr(Normalize_Field(field)->arg);
}
/* fld_arg.c ends here */
diff --git a/contrib/ncurses/form/fld_attr.c b/contrib/ncurses/form/fld_attr.c
index 50e2c73d6af9..4ce6b1c52d60 100644
--- a/contrib/ncurses/form/fld_attr.c
+++ b/contrib/ncurses/form/fld_attr.c
@@ -1,120 +1,120 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_attr.c,v 1.13 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_attr.c,v 1.15 2020/12/11 22:05:24 tom Exp $")
/*----------------------------------------------------------------------------
Field-Attribute manipulation routines
--------------------------------------------------------------------------*/
-/* "Template" macro to generate a function to set a fields attribute */
+/* "Template" macro to generate a function to set a field's attribute */
#define GEN_FIELD_ATTR_SET_FCT( name ) \
-NCURSES_IMPEXP int NCURSES_API set_field_ ## name (FIELD * field, chtype attr)\
+FORM_IMPEXP int NCURSES_API set_field_ ## name (FIELD * field, chtype attr)\
{\
int res = E_BAD_ARGUMENT;\
T((T_CALLED("set_field_" #name "(%p,%s)"), (void *)field, _traceattr(attr)));\
if ( attr==A_NORMAL || ((attr & A_ATTRIBUTES)==attr) )\
{\
Normalize_Field( field );\
if (field != 0) \
{ \
if ((field -> name) != attr)\
{\
field -> name = attr;\
res = _nc_Synchronize_Attributes( field );\
}\
else\
{\
res = E_OK;\
}\
}\
}\
RETURN(res);\
}
-/* "Template" macro to generate a function to get a fields attribute */
+/* "Template" macro to generate a function to get a field's attribute */
#define GEN_FIELD_ATTR_GET_FCT( name ) \
-NCURSES_IMPEXP chtype NCURSES_API field_ ## name (const FIELD * field)\
+FORM_IMPEXP chtype NCURSES_API field_ ## name (const FIELD * field)\
{\
T((T_CALLED("field_" #name "(%p)"), (const void *) field));\
returnAttr( A_ATTRIBUTES & (Normalize_Field( field ) -> name) );\
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_field_fore(FIELD *field, chtype attr)
|
| Description : Sets the foreground of the field used to display the
| field contents.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid attributes
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
GEN_FIELD_ATTR_SET_FCT(fore)
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : chtype field_fore(const FIELD *)
|
-| Description : Retrieve fields foreground attribute
+| Description : Retrieve field's foreground attribute
|
| Return Values : The foreground attribute
+--------------------------------------------------------------------------*/
GEN_FIELD_ATTR_GET_FCT(fore)
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_field_back(FIELD *field, chtype attr)
|
| Description : Sets the background of the field used to display the
-| fields extend.
+| field's extend.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid attributes
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
GEN_FIELD_ATTR_SET_FCT(back)
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : chtype field_back(const
|
-| Description : Retrieve fields background attribute
+| Description : Retrieve field's background attribute
|
| Return Values : The background attribute
+--------------------------------------------------------------------------*/
GEN_FIELD_ATTR_GET_FCT(back)
/* fld_attr.c ends here */
diff --git a/contrib/ncurses/form/fld_current.c b/contrib/ncurses/form/fld_current.c
index 75e68edd1c55..264007ef59f3 100644
--- a/contrib/ncurses/form/fld_current.c
+++ b/contrib/ncurses/form/fld_current.c
@@ -1,164 +1,164 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_current.c,v 1.15 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_current.c,v 1.16 2020/05/24 01:40:20 anonymous.maarten Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_current_field(FORM * form,FIELD * field)
|
| Description : Set the current field of the form to the specified one.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid form or field pointer
| E_REQUEST_DENIED - field not selectable
| E_BAD_STATE - called from a hook routine
| E_INVALID_FIELD - current field can't be left
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_current_field(FORM *form, FIELD *field)
{
int err = E_OK;
T((T_CALLED("set_current_field(%p,%p)"), (void *)form, (void *)field));
if (form == 0 || field == 0)
{
RETURN(E_BAD_ARGUMENT);
}
else if ((form != field->form) || Field_Is_Not_Selectable(field))
{
RETURN(E_REQUEST_DENIED);
}
else if ((form->status & _POSTED) == 0)
{
form->current = field;
form->curpage = field->page;
}
else
{
if ((form->status & _IN_DRIVER) != 0)
{
err = E_BAD_STATE;
}
else
{
if (form->current != field)
{
if (form->current && !_nc_Internal_Validation(form))
{
err = E_INVALID_FIELD;
}
else
{
Call_Hook(form, fieldterm);
if (field->page != form->curpage)
{
Call_Hook(form, formterm);
err = _nc_Set_Form_Page(form, (int)field->page, field);
Call_Hook(form, forminit);
}
else
{
err = _nc_Set_Current_Field(form, field);
}
Call_Hook(form, fieldinit);
(void)_nc_Refresh_Current_Field(form);
}
}
}
}
RETURN(err);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int unfocus_current_field(FORM * form)
|
| Description : Removes focus from the current field.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid form pointer
| E_REQUEST_DENIED - there is no current field to unfocus
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
unfocus_current_field(FORM *const form)
{
T((T_CALLED("unfocus_current_field(%p)"), (const void *)form));
if (form == 0)
{
RETURN(E_BAD_ARGUMENT);
}
else if (form->current == 0)
{
RETURN(E_REQUEST_DENIED);
}
_nc_Unset_Current_Field(form);
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : FIELD *current_field(const FORM * form)
|
| Description : Return the current field.
|
| Return Values : Pointer to the current field.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELD *)
+FORM_EXPORT(FIELD *)
current_field(const FORM *form)
{
T((T_CALLED("current_field(%p)"), (const void *)form));
returnField(Normalize_Form(form)->current);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int field_index(const FIELD * field)
|
| Description : Return the index of the field in the field-array of
| the form.
|
| Return Values : >= 0 : field index
| -1 : fieldpointer invalid or field not connected
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
field_index(const FIELD *field)
{
T((T_CALLED("field_index(%p)"), (const void *)field));
returnCode((field != 0 && field->form != 0) ? (int)field->index : -1);
}
/* fld_current.c ends here */
diff --git a/contrib/ncurses/form/fld_def.c b/contrib/ncurses/form/fld_def.c
index e529b3c0c1ae..de664eb5f803 100644
--- a/contrib/ncurses/form/fld_def.c
+++ b/contrib/ncurses/form/fld_def.c
@@ -1,401 +1,401 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2012,2014 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_def.c,v 1.42 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_def.c,v 1.43 2020/05/24 01:40:20 anonymous.maarten Exp $")
/* this can't be readonly */
static FIELD default_field =
{
0, /* status */
0, /* rows */
0, /* cols */
0, /* frow */
0, /* fcol */
0, /* drows */
0, /* dcols */
0, /* maxgrow */
0, /* nrow */
0, /* nbuf */
NO_JUSTIFICATION, /* just */
0, /* page */
0, /* index */
(int)' ', /* pad */
A_NORMAL, /* fore */
A_NORMAL, /* back */
STD_FIELD_OPTS, /* opts */
(FIELD *)0, /* snext */
(FIELD *)0, /* sprev */
(FIELD *)0, /* link */
(FORM *)0, /* form */
(FIELDTYPE *)0, /* type */
(char *)0, /* arg */
(FIELD_CELL *)0, /* buf */
(char *)0 /* usrptr */
NCURSES_FIELD_EXTENSION
};
-NCURSES_EXPORT_VAR(FIELD *) _nc_Default_Field = &default_field;
+FORM_EXPORT_VAR(FIELD *) _nc_Default_Field = &default_field;
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : TypeArgument *_nc_Make_Argument(
| const FIELDTYPE *typ,
| va_list *ap,
| int *err )
|
| Description : Create an argument structure for the specified type.
| Use the type-dependent argument list to construct
| it.
|
| Return Values : Pointer to argument structure. Maybe NULL.
| In case of an error in *err an error counter is increased.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(TypeArgument *)
+FORM_EXPORT(TypeArgument *)
_nc_Make_Argument(const FIELDTYPE *typ, va_list *ap, int *err)
{
TypeArgument *res = (TypeArgument *)0;
TypeArgument *p;
if (typ != 0 && (typ->status & _HAS_ARGS) != 0)
{
assert(err != 0 && ap != (va_list *)0);
if ((typ->status & _LINKED_TYPE) != 0)
{
p = typeMalloc(TypeArgument, 1);
if (p != 0)
{
p->left = _nc_Make_Argument(typ->left, ap, err);
p->right = _nc_Make_Argument(typ->right, ap, err);
return p;
}
else
{
*err += 1;
}
}
else
{
assert(typ->makearg != (void *)0);
if (!(res = (TypeArgument *)typ->makearg(ap)))
{
*err += 1;
}
}
}
return res;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : TypeArgument *_nc_Copy_Argument(const FIELDTYPE *typ,
| const TypeArgument *argp,
| int *err )
|
| Description : Create a copy of an argument structure for the specified
| type.
|
| Return Values : Pointer to argument structure. Maybe NULL.
| In case of an error in *err an error counter is increased.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(TypeArgument *)
+FORM_EXPORT(TypeArgument *)
_nc_Copy_Argument(const FIELDTYPE *typ, const TypeArgument *argp, int *err)
{
TypeArgument *res = (TypeArgument *)0;
TypeArgument *p;
if (typ != 0 && (typ->status & _HAS_ARGS) != 0)
{
assert(err != 0 && argp != 0);
if ((typ->status & _LINKED_TYPE) != 0)
{
p = typeMalloc(TypeArgument, 1);
if (p != 0)
{
p->left = _nc_Copy_Argument(typ, argp->left, err);
p->right = _nc_Copy_Argument(typ, argp->right, err);
return p;
}
*err += 1;
}
else
{
if (typ->copyarg != (void *)0)
{
if (!(res = (TypeArgument *)(typ->copyarg((const void *)argp))))
{
*err += 1;
}
}
else
{
res = (TypeArgument *)argp;
}
}
}
return res;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : void _nc_Free_Argument(const FIELDTYPE *typ,
| TypeArgument * argp )
|
| Description : Release memory associated with the argument structure
| for the given fieldtype.
|
| Return Values : -
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+FORM_EXPORT(void)
_nc_Free_Argument(const FIELDTYPE *typ, TypeArgument *argp)
{
if (typ != 0 && (typ->status & _HAS_ARGS) != 0)
{
if ((typ->status & _LINKED_TYPE) != 0)
{
if (argp != 0)
{
_nc_Free_Argument(typ->left, argp->left);
_nc_Free_Argument(typ->right, argp->right);
free(argp);
}
}
else
{
if (typ->freearg != (void *)0)
{
typ->freearg((void *)argp);
}
}
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : bool _nc_Copy_Type( FIELD *dst, FIELD const *src )
|
| Description : Copy argument structure of field src to field dst
|
| Return Values : TRUE - copy worked
| FALSE - error occurred
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+FORM_EXPORT(bool)
_nc_Copy_Type(FIELD *dst, FIELD const *src)
{
int err = 0;
assert(dst != 0 && src != 0);
dst->type = src->type;
dst->arg = (void *)_nc_Copy_Argument(src->type, (TypeArgument *)(src->arg), &err);
if (err != 0)
{
_nc_Free_Argument(dst->type, (TypeArgument *)(dst->arg));
dst->type = (FIELDTYPE *)0;
dst->arg = (void *)0;
return FALSE;
}
else
{
if (dst->type != 0)
{
dst->type->ref++;
}
return TRUE;
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : void _nc_Free_Type( FIELD *field )
|
| Description : Release Argument structure for this field
|
| Return Values : -
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+FORM_EXPORT(void)
_nc_Free_Type(FIELD *field)
{
assert(field != 0);
if (field->type != 0)
{
field->type->ref--;
_nc_Free_Argument(field->type, (TypeArgument *)(field->arg));
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : FIELD *new_field( int rows, int cols,
| int frow, int fcol,
| int nrow, int nbuf )
|
| Description : Create a new field with this many 'rows' and 'cols',
| starting at 'frow/fcol' in the subwindow of the form.
| Allocate 'nrow' off-screen rows and 'nbuf' additional
| buffers. If an error occurs, errno is set to
|
| E_BAD_ARGUMENT - invalid argument
| E_SYSTEM_ERROR - system error
|
| Return Values : Pointer to the new field or NULL if failure.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELD *)
+FORM_EXPORT(FIELD *)
new_field(int rows, int cols, int frow, int fcol, int nrow, int nbuf)
{
static const FIELD_CELL blank = BLANK;
static const FIELD_CELL zeros = ZEROS;
FIELD *New_Field = (FIELD *)0;
int err = E_BAD_ARGUMENT;
T((T_CALLED("new_field(%d,%d,%d,%d,%d,%d)"), rows, cols, frow, fcol, nrow, nbuf));
if (rows > 0 &&
cols > 0 &&
frow >= 0 &&
fcol >= 0 &&
nrow >= 0 &&
nbuf >= 0 &&
((err = E_SYSTEM_ERROR) != 0) && /* trick: this resets the default error */
(New_Field = typeMalloc(FIELD, 1)) != 0)
{
T((T_CREATE("field %p"), (void *)New_Field));
*New_Field = default_field;
New_Field->rows = (short)rows;
New_Field->cols = (short)cols;
New_Field->drows = rows + nrow;
New_Field->dcols = cols;
New_Field->frow = (short)frow;
New_Field->fcol = (short)fcol;
New_Field->nrow = nrow;
New_Field->nbuf = (short)nbuf;
New_Field->link = New_Field;
#if USE_WIDEC_SUPPORT
New_Field->working = newpad(1, Buffer_Length(New_Field) + 1);
New_Field->expanded = typeCalloc(char *, 1 + (unsigned)nbuf);
#endif
if (_nc_Copy_Type(New_Field, &default_field))
{
size_t len;
len = Total_Buffer_Size(New_Field);
if ((New_Field->buf = (FIELD_CELL *)malloc(len)))
{
/* Prefill buffers with blanks and insert terminating zeroes
between buffers */
int i, j;
int cells = Buffer_Length(New_Field);
for (i = 0; i <= New_Field->nbuf; i++)
{
FIELD_CELL *buffer = &(New_Field->buf[(cells + 1) * i]);
for (j = 0; j < cells; ++j)
{
buffer[j] = blank;
}
buffer[j] = zeros;
}
returnField(New_Field);
}
}
}
if (New_Field)
free_field(New_Field);
SET_ERROR(err);
returnField((FIELD *)0);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int free_field( FIELD *field )
|
| Description : Frees the storage allocated for the field.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid field pointer
| E_CONNECTED - field is connected
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
free_field(FIELD *field)
{
T((T_CALLED("free_field(%p)"), (void *)field));
if (!field)
{
RETURN(E_BAD_ARGUMENT);
}
else if (field->form != 0)
{
RETURN(E_CONNECTED);
}
else if (field == field->link)
{
if (field->buf != 0)
free(field->buf);
}
else
{
FIELD *f;
for (f = field; f->link != field; f = f->link)
{
}
f->link = field->link;
}
_nc_Free_Type(field);
#if USE_WIDEC_SUPPORT
if (field->expanded != 0)
{
int n;
for (n = 0; n <= field->nbuf; ++n)
{
FreeIfNeeded(field->expanded[n]);
}
free(field->expanded);
(void)delwin(field->working);
}
#endif
free(field);
RETURN(E_OK);
}
/* fld_def.c ends here */
diff --git a/contrib/ncurses/form/fld_dup.c b/contrib/ncurses/form/fld_dup.c
index 9859a09f4e93..e195df958877 100644
--- a/contrib/ncurses/form/fld_dup.c
+++ b/contrib/ncurses/form/fld_dup.c
@@ -1,102 +1,101 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_dup.c,v 1.15 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_dup.c,v 1.18 2020/05/24 01:40:20 anonymous.maarten Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : FIELD *dup_field(FIELD *field, int frow, int fcol)
|
| Description : Duplicates the field at the specified position. All
| field attributes and the buffers are copied.
| If an error occurs, errno is set to
|
| E_BAD_ARGUMENT - invalid argument
| E_SYSTEM_ERROR - system error
|
| Return Values : Pointer to the new field or NULL if failure
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELD *)
+FORM_EXPORT(FIELD *)
dup_field(FIELD *field, int frow, int fcol)
{
FIELD *New_Field = (FIELD *)0;
int err = E_BAD_ARGUMENT;
T((T_CALLED("dup_field(%p,%d,%d)"), (void *)field, frow, fcol));
if (field && (frow >= 0) && (fcol >= 0) &&
((err = E_SYSTEM_ERROR) != 0) && /* trick : this resets the default error */
(New_Field = typeMalloc(FIELD, 1)))
{
T((T_CREATE("field %p"), (void *)New_Field));
*New_Field = *_nc_Default_Field;
- New_Field->frow = (short) frow;
- New_Field->fcol = (short) fcol;
+ New_Field->frow = (short)frow;
+ New_Field->fcol = (short)fcol;
New_Field->link = New_Field;
New_Field->rows = field->rows;
New_Field->cols = field->cols;
New_Field->nrow = field->nrow;
New_Field->drows = field->drows;
New_Field->dcols = field->dcols;
New_Field->maxgrow = field->maxgrow;
New_Field->nbuf = field->nbuf;
New_Field->just = field->just;
New_Field->fore = field->fore;
New_Field->back = field->back;
New_Field->pad = field->pad;
New_Field->opts = field->opts;
New_Field->usrptr = field->usrptr;
if (_nc_Copy_Type(New_Field, field))
{
- size_t i, len;
+ size_t len;
len = Total_Buffer_Size(New_Field);
- if ((New_Field->buf = (FIELD_CELL *)malloc(len)))
+ if ((New_Field->buf = (FIELD_CELL *)malloc(len * 20)))
{
- for (i = 0; i < len; ++i)
- New_Field->buf[i] = field->buf[i];
+ memcpy(New_Field->buf, field->buf, len);
returnField(New_Field);
}
}
}
if (New_Field)
free_field(New_Field);
SET_ERROR(err);
returnField((FIELD *)0);
}
/* fld_dup.c ends here */
diff --git a/contrib/ncurses/form/fld_ftchoice.c b/contrib/ncurses/form/fld_ftchoice.c
index 5dc5f4a91224..265f94f869c3 100644
--- a/contrib/ncurses/form/fld_ftchoice.c
+++ b/contrib/ncurses/form/fld_ftchoice.c
@@ -1,76 +1,76 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 1998-2012,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_ftchoice.c,v 1.16 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_ftchoice.c,v 1.17 2020/05/24 01:40:20 anonymous.maarten Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_fieldtype_choice(
| FIELDTYPE *typ,
| bool (* const next_choice)(FIELD *,const void *),
| bool (* const prev_choice)(FIELD *,const void *))
|
| Description : Define implementation of enumeration requests.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid arguments
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_fieldtype_choice(FIELDTYPE *typ,
bool (*const next_choice) (FIELD *, const void *),
bool (*const prev_choice) (FIELD *, const void *))
{
TR_FUNC_BFR(2);
T((T_CALLED("set_fieldtype_choice(%p,%s,%s)"),
(void *)typ,
TR_FUNC_ARG(0, next_choice),
TR_FUNC_ARG(1, prev_choice)));
if (!typ || !next_choice || !prev_choice)
RETURN(E_BAD_ARGUMENT);
SetStatus(typ, _HAS_CHOICE);
#if NCURSES_INTEROP_FUNCS
typ->enum_next.onext = next_choice;
typ->enum_prev.oprev = prev_choice;
#else
typ->next = next_choice;
typ->prev = prev_choice;
#endif
RETURN(E_OK);
}
/* fld_ftchoice.c ends here */
diff --git a/contrib/ncurses/form/fld_ftlink.c b/contrib/ncurses/form/fld_ftlink.c
index afa488b3f5cb..3d8af84de999 100644
--- a/contrib/ncurses/form/fld_ftlink.c
+++ b/contrib/ncurses/form/fld_ftlink.c
@@ -1,88 +1,88 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_ftlink.c,v 1.16 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_ftlink.c,v 1.17 2020/05/24 01:40:20 anonymous.maarten Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : FIELDTYPE *link_fieldtype(
| FIELDTYPE *type1,
| FIELDTYPE *type2)
|
| Description : Create a new fieldtype built from the two given types.
| They are connected by an logical 'OR'.
| If an error occurs, errno is set to
| E_BAD_ARGUMENT - invalid arguments
| E_SYSTEM_ERROR - system error (no memory)
|
| Return Values : Fieldtype pointer or NULL if error occurred.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELDTYPE *)
+FORM_EXPORT(FIELDTYPE *)
link_fieldtype(FIELDTYPE *type1, FIELDTYPE *type2)
{
FIELDTYPE *nftyp = (FIELDTYPE *)0;
T((T_CALLED("link_fieldtype(%p,%p)"), (void *)type1, (void *)type2));
if (type1 && type2)
{
nftyp = typeMalloc(FIELDTYPE, 1);
if (nftyp)
{
T((T_CREATE("fieldtype %p"), (void *)nftyp));
*nftyp = *_nc_Default_FieldType;
SetStatus(nftyp, _LINKED_TYPE);
if ((type1->status & _HAS_ARGS) || (type2->status & _HAS_ARGS))
SetStatus(nftyp, _HAS_ARGS);
if ((type1->status & _HAS_CHOICE) || (type2->status & _HAS_CHOICE))
SetStatus(nftyp, _HAS_CHOICE);
nftyp->left = type1;
nftyp->right = type2;
type1->ref++;
type2->ref++;
}
else
{
SET_ERROR(E_SYSTEM_ERROR);
}
}
else
{
SET_ERROR(E_BAD_ARGUMENT);
}
returnFieldType(nftyp);
}
/* fld_ftlink.c ends here */
diff --git a/contrib/ncurses/form/fld_info.c b/contrib/ncurses/form/fld_info.c
index 9963b5b3a476..188a31563ef2 100644
--- a/contrib/ncurses/form/fld_info.c
+++ b/contrib/ncurses/form/fld_info.c
@@ -1,114 +1,114 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_info.c,v 1.12 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_info.c,v 1.15 2020/12/12 01:05:42 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int field_info(const FIELD *field,
| int *rows, int *cols,
| int *frow, int *fcol,
| int *nrow, int *nbuf)
|
-| Description : Retrieve infos about the fields creation parameters.
+| Description : Retrieve information about the field's creation parameters.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid field pointer
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
field_info(const FIELD *field,
int *rows, int *cols,
int *frow, int *fcol,
int *nrow, int *nbuf)
{
T((T_CALLED("field_info(%p,%p,%p,%p,%p,%p,%p)"),
(const void *)field,
(void *)rows, (void *)cols,
(void *)frow, (void *)fcol,
(void *)nrow, (void *)nbuf));
if (!field)
RETURN(E_BAD_ARGUMENT);
if (rows)
*rows = field->rows;
if (cols)
*cols = field->cols;
if (frow)
*frow = field->frow;
if (fcol)
*fcol = field->fcol;
if (nrow)
*nrow = field->nrow;
if (nbuf)
*nbuf = field->nbuf;
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int dynamic_field_info(const FIELD *field,
| int *drows, int *dcols,
| int *maxgrow)
|
-| Description : Retrieve informations about a dynamic fields current
+| Description : Retrieve information about a dynamic field's current
| dynamic parameters.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid argument
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
dynamic_field_info(const FIELD *field, int *drows, int *dcols, int *maxgrow)
{
T((T_CALLED("dynamic_field_info(%p,%p,%p,%p)"),
(const void *)field,
(void *)drows,
(void *)dcols,
(void *)maxgrow));
if (!field)
RETURN(E_BAD_ARGUMENT);
if (drows)
*drows = field->drows;
if (dcols)
*dcols = field->dcols;
if (maxgrow)
*maxgrow = field->maxgrow;
RETURN(E_OK);
}
/* fld_info.c ends here */
diff --git a/contrib/ncurses/form/fld_just.c b/contrib/ncurses/form/fld_just.c
index 8097019d6e24..050e66f5d311 100644
--- a/contrib/ncurses/form/fld_just.c
+++ b/contrib/ncurses/form/fld_just.c
@@ -1,87 +1,87 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_just.c,v 1.14 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_just.c,v 1.16 2020/12/11 23:16:37 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_field_just(FIELD *field, int just)
|
-| Description : Set the fields type of justification.
+| Description : Set the field's type of justification.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - one of the arguments was incorrect
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_field_just(FIELD *field, int just)
{
int res = E_BAD_ARGUMENT;
T((T_CALLED("set_field_just(%p,%d)"), (void *)field, just));
if ((just == NO_JUSTIFICATION) ||
(just == JUSTIFY_LEFT) ||
(just == JUSTIFY_CENTER) ||
(just == JUSTIFY_RIGHT))
{
Normalize_Field(field);
if (field->just != just)
{
- field->just = (short) just;
+ field->just = (short)just;
res = _nc_Synchronize_Attributes(field);
}
else
res = E_OK;
}
RETURN(res);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int field_just( const FIELD *field )
|
-| Description : Retrieve the fields type of justification
+| Description : Retrieve the field's type of justification
|
| Return Values : The justification type.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
field_just(const FIELD *field)
{
T((T_CALLED("field_just(%p)"), (const void *)field));
returnCode(Normalize_Field(field)->just);
}
/* fld_just.c ends here */
diff --git a/contrib/ncurses/form/fld_link.c b/contrib/ncurses/form/fld_link.c
index cb67ac079b60..dda6c97ee6d1 100644
--- a/contrib/ncurses/form/fld_link.c
+++ b/contrib/ncurses/form/fld_link.c
@@ -1,97 +1,97 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_link.c,v 1.14 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_link.c,v 1.16 2020/12/11 23:20:32 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : FIELD *link_field(FIELD *field, int frow, int fcol)
|
| Description : Duplicates the field at the specified position. The
| new field shares its buffers with the original one,
| the attributes are independent.
| If an error occurs, errno is set to
|
| E_BAD_ARGUMENT - invalid argument
| E_SYSTEM_ERROR - system error
|
| Return Values : Pointer to the new field or NULL if failure
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELD *)
+FORM_EXPORT(FIELD *)
link_field(FIELD *field, int frow, int fcol)
{
FIELD *New_Field = (FIELD *)0;
int err = E_BAD_ARGUMENT;
T((T_CALLED("link_field(%p,%d,%d)"), (void *)field, frow, fcol));
if (field && (frow >= 0) && (fcol >= 0) &&
((err = E_SYSTEM_ERROR) != 0) && /* trick: this resets the default error */
(New_Field = typeMalloc(FIELD, 1)))
{
T((T_CREATE("field %p"), (void *)New_Field));
*New_Field = *_nc_Default_Field;
- New_Field->frow = (short) frow;
- New_Field->fcol = (short) fcol;
+ New_Field->frow = (short)frow;
+ New_Field->fcol = (short)fcol;
New_Field->link = field->link;
field->link = New_Field;
New_Field->buf = field->buf;
New_Field->rows = field->rows;
New_Field->cols = field->cols;
New_Field->nrow = field->nrow;
New_Field->nbuf = field->nbuf;
New_Field->drows = field->drows;
New_Field->dcols = field->dcols;
New_Field->maxgrow = field->maxgrow;
New_Field->just = field->just;
New_Field->fore = field->fore;
New_Field->back = field->back;
New_Field->pad = field->pad;
New_Field->opts = field->opts;
New_Field->usrptr = field->usrptr;
if (_nc_Copy_Type(New_Field, field))
returnField(New_Field);
}
if (New_Field)
free_field(New_Field);
SET_ERROR(err);
returnField((FIELD *)0);
}
/* fld_link.c ends here */
diff --git a/contrib/ncurses/form/fld_max.c b/contrib/ncurses/form/fld_max.c
index 7d0e146d9191..bfeadf9b7fa8 100644
--- a/contrib/ncurses/form/fld_max.c
+++ b/contrib/ncurses/form/fld_max.c
@@ -1,83 +1,83 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 1998-2012,2013 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_max.c,v 1.16 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_max.c,v 1.17 2020/05/24 01:40:20 anonymous.maarten Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_max_field(FIELD *field, int maxgrow)
|
| Description : Set the maximum growth for a dynamic field. If maxgrow=0
| the field may grow to any possible size.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid argument
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_max_field(FIELD *field, int maxgrow)
{
T((T_CALLED("set_max_field(%p,%d)"), (void *)field, maxgrow));
if (!field || (maxgrow < 0))
RETURN(E_BAD_ARGUMENT);
else
{
bool single_line_field = Single_Line_Field(field);
if (maxgrow > 0)
{
if (((single_line_field && (maxgrow < field->dcols)) ||
(!single_line_field && (maxgrow < field->drows))) &&
!Field_Has_Option(field, O_INPUT_LIMIT))
RETURN(E_BAD_ARGUMENT);
}
field->maxgrow = maxgrow;
/* shrink */
if (maxgrow > 0 && Field_Has_Option(field, O_INPUT_LIMIT) &&
field->dcols > maxgrow)
field->dcols = maxgrow;
ClrStatus(field, _MAY_GROW);
if (!((unsigned)field->opts & O_STATIC))
{
if ((maxgrow == 0) ||
(single_line_field && (field->dcols < maxgrow)) ||
(!single_line_field && (field->drows < maxgrow)))
SetStatus(field, _MAY_GROW);
}
}
RETURN(E_OK);
}
/* fld_max.c ends here */
diff --git a/contrib/ncurses/form/fld_move.c b/contrib/ncurses/form/fld_move.c
index 0d6692f3ebf0..c4b8313639d5 100644
--- a/contrib/ncurses/form/fld_move.c
+++ b/contrib/ncurses/form/fld_move.c
@@ -1,65 +1,65 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_move.c,v 1.12 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_move.c,v 1.15 2020/12/11 23:48:05 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int move_field(FIELD *field,int frow, int fcol)
|
| Description : Moves the disconnected field to the new location in
-| the forms subwindow.
+| the form's subwindow.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid argument passed
| E_CONNECTED - field is connected
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
move_field(FIELD *field, int frow, int fcol)
{
T((T_CALLED("move_field(%p,%d,%d)"), (void *)field, frow, fcol));
if (!field || (frow < 0) || (fcol < 0))
RETURN(E_BAD_ARGUMENT);
if (field->form)
RETURN(E_CONNECTED);
- field->frow = (short) frow;
- field->fcol = (short) fcol;
+ field->frow = (short)frow;
+ field->fcol = (short)fcol;
RETURN(E_OK);
}
/* fld_move.c ends here */
diff --git a/contrib/ncurses/form/fld_newftyp.c b/contrib/ncurses/form/fld_newftyp.c
index 18a7c0739cdc..c5848d5fbd66 100644
--- a/contrib/ncurses/form/fld_newftyp.c
+++ b/contrib/ncurses/form/fld_newftyp.c
@@ -1,149 +1,149 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 1998-2010,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_newftyp.c,v 1.22 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_newftyp.c,v 1.23 2020/05/24 01:40:20 anonymous.maarten Exp $")
static FIELDTYPE default_fieldtype =
{
0, /* status */
0L, /* reference count */
(FIELDTYPE *)0, /* pointer to left operand */
(FIELDTYPE *)0, /* pointer to right operand */
NULL, /* makearg function */
NULL, /* copyarg function */
NULL, /* freearg function */
INIT_FT_FUNC(NULL), /* field validation function */
INIT_FT_FUNC(NULL), /* Character check function */
INIT_FT_FUNC(NULL), /* enumerate next function */
INIT_FT_FUNC(NULL), /* enumerate previous function */
#if NCURSES_INTEROP_FUNCS
NULL /* generic callback alternative to makearg */
#endif
};
-NCURSES_EXPORT_VAR(FIELDTYPE *)
+FORM_EXPORT_VAR(FIELDTYPE *)
_nc_Default_FieldType = &default_fieldtype;
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : FIELDTYPE *new_fieldtype(
| bool (* const field_check)(FIELD *,const void *),
| bool (* const char_check) (int, const void *) )
|
| Description : Create a new fieldtype. The application programmer must
| write a field_check and a char_check function and give
| them as input to this call.
| If an error occurs, errno is set to
| E_BAD_ARGUMENT - invalid arguments
| E_SYSTEM_ERROR - system error (no memory)
|
| Return Values : Fieldtype pointer or NULL if error occurred
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELDTYPE *)
+FORM_EXPORT(FIELDTYPE *)
new_fieldtype(bool (*const field_check) (FIELD *, const void *),
bool (*const char_check) (int, const void *))
{
FIELDTYPE *nftyp = (FIELDTYPE *)0;
TR_FUNC_BFR(2);
T((T_CALLED("new_fieldtype(%s,%s)"),
TR_FUNC_ARG(0, field_check),
TR_FUNC_ARG(1, char_check)));
if ((field_check) || (char_check))
{
nftyp = typeMalloc(FIELDTYPE, 1);
if (nftyp)
{
T((T_CREATE("fieldtype %p"), (void *)nftyp));
*nftyp = default_fieldtype;
#if NCURSES_INTEROP_FUNCS
nftyp->fieldcheck.ofcheck = field_check;
nftyp->charcheck.occheck = char_check;
#else
nftyp->fcheck = field_check;
nftyp->ccheck = char_check;
#endif
}
else
{
SET_ERROR(E_SYSTEM_ERROR);
}
}
else
{
SET_ERROR(E_BAD_ARGUMENT);
}
returnFieldType(nftyp);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int free_fieldtype(FIELDTYPE *typ)
|
| Description : Release the memory associated with this fieldtype.
|
| Return Values : E_OK - success
| E_CONNECTED - there are fields referencing the type
| E_BAD_ARGUMENT - invalid fieldtype pointer
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
free_fieldtype(FIELDTYPE *typ)
{
T((T_CALLED("free_fieldtype(%p)"), (void *)typ));
if (!typ)
RETURN(E_BAD_ARGUMENT);
if (typ->ref != 0)
RETURN(E_CONNECTED);
if (typ->status & _RESIDENT)
RETURN(E_CONNECTED);
if (typ->status & _LINKED_TYPE)
{
if (typ->left)
typ->left->ref--;
if (typ->right)
typ->right->ref--;
}
free(typ);
RETURN(E_OK);
}
/* fld_newftyp.c ends here */
diff --git a/contrib/ncurses/form/fld_opts.c b/contrib/ncurses/form/fld_opts.c
index fee5804a8132..a0bbbf41cc5d 100644
--- a/contrib/ncurses/form/fld_opts.c
+++ b/contrib/ncurses/form/fld_opts.c
@@ -1,139 +1,139 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_opts.c,v 1.13 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_opts.c,v 1.15 2020/12/11 22:05:24 tom Exp $")
/*----------------------------------------------------------------------------
Field-Options manipulation routines
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_field_opts(FIELD *field, Field_Options opts)
|
| Description : Turns on the named options for this field and turns
| off all the remaining options.
|
| Return Values : E_OK - success
| E_CURRENT - the field is the current field
| E_BAD_ARGUMENT - invalid options
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_field_opts(FIELD *field, Field_Options opts)
{
int res = E_BAD_ARGUMENT;
T((T_CALLED("set_field_opts(%p,%d)"), (void *)field, opts));
opts &= ALL_FIELD_OPTS;
if (!(opts & ~ALL_FIELD_OPTS))
res = _nc_Synchronize_Options(Normalize_Field(field), opts);
RETURN(res);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : Field_Options field_opts(const FIELD *field)
|
-| Description : Retrieve the fields options.
+| Description : Retrieve the field's options.
|
| Return Values : The options.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(Field_Options)
+FORM_EXPORT(Field_Options)
field_opts(const FIELD *field)
{
T((T_CALLED("field_opts(%p)"), (const void *)field));
returnCode(ALL_FIELD_OPTS & Normalize_Field(field)->opts);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int field_opts_on(FIELD *field, Field_Options opts)
|
| Description : Turns on the named options for this field and all the
| remaining options are unchanged.
|
| Return Values : E_OK - success
| E_CURRENT - the field is the current field
| E_BAD_ARGUMENT - invalid options
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
field_opts_on(FIELD *field, Field_Options opts)
{
int res = E_BAD_ARGUMENT;
T((T_CALLED("field_opts_on(%p,%d)"), (void *)field, opts));
opts &= ALL_FIELD_OPTS;
if (!(opts & ~ALL_FIELD_OPTS))
{
Normalize_Field(field);
res = _nc_Synchronize_Options(field, field->opts | opts);
}
RETURN(res);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int field_opts_off(FIELD *field, Field_Options opts)
|
| Description : Turns off the named options for this field and all the
| remaining options are unchanged.
|
| Return Values : E_OK - success
| E_CURRENT - the field is the current field
| E_BAD_ARGUMENT - invalid options
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
field_opts_off(FIELD *field, Field_Options opts)
{
int res = E_BAD_ARGUMENT;
T((T_CALLED("field_opts_off(%p,%d)"), (void *)field, opts));
opts &= ALL_FIELD_OPTS;
if (!(opts & ~ALL_FIELD_OPTS))
{
Normalize_Field(field);
res = _nc_Synchronize_Options(field, field->opts & ~opts);
}
RETURN(res);
}
/* fld_opts.c ends here */
diff --git a/contrib/ncurses/form/fld_pad.c b/contrib/ncurses/form/fld_pad.c
index b6d59e2c1cdc..962958f501b6 100644
--- a/contrib/ncurses/form/fld_pad.c
+++ b/contrib/ncurses/form/fld_pad.c
@@ -1,86 +1,86 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_pad.c,v 1.11 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_pad.c,v 1.13 2020/12/11 22:05:24 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_field_pad(FIELD *field, int ch)
|
| Description : Set the pad character used to fill the field. This must
| be a printable character.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid field pointer or pad character
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_field_pad(FIELD *field, int ch)
{
int res = E_BAD_ARGUMENT;
T((T_CALLED("set_field_pad(%p,%d)"), (void *)field, ch));
Normalize_Field(field);
if (isprint(UChar(ch)))
{
if (field->pad != ch)
{
field->pad = ch;
res = _nc_Synchronize_Attributes(field);
}
else
res = E_OK;
}
RETURN(res);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int field_pad(const FIELD *field)
|
-| Description : Retrieve the fields pad character.
+| Description : Retrieve the field's pad character.
|
| Return Values : The pad character.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
field_pad(const FIELD *field)
{
T((T_CALLED("field_pad(%p)"), (const void *)field));
returnCode(Normalize_Field(field)->pad);
}
/* fld_pad.c ends here */
diff --git a/contrib/ncurses/form/fld_page.c b/contrib/ncurses/form/fld_page.c
index c6fb37c84000..9029768ce2ba 100644
--- a/contrib/ncurses/form/fld_page.c
+++ b/contrib/ncurses/form/fld_page.c
@@ -1,83 +1,83 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_page.c,v 1.13 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_page.c,v 1.15 2020/12/11 23:15:26 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_new_page(FIELD *field, bool new_page_flag)
|
| Description : Marks the field as the beginning of a new page of
| the form.
|
| Return Values : E_OK - success
| E_CONNECTED - field is connected
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_new_page(FIELD *field, bool new_page_flag)
{
T((T_CALLED("set_new_page(%p,%d)"), (void *)field, new_page_flag));
Normalize_Field(field);
if (field->form)
RETURN(E_CONNECTED);
if (new_page_flag)
SetStatus(field, _NEWPAGE);
else
ClrStatus(field, _NEWPAGE);
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : bool new_page(const FIELD *field)
|
-| Description : Retrieve the info whether or not the field starts a
-| new page on the form.
+| Description : Retrieve the information whether or not the field starts
+| a new page on the form.
|
| Return Values : TRUE - field starts a new page
| FALSE - field doesn't start a new page
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+FORM_EXPORT(bool)
new_page(const FIELD *field)
{
T((T_CALLED("new_page(%p)"), (const void *)field));
returnBool((Normalize_Field(field)->status & _NEWPAGE) ? TRUE : FALSE);
}
/* fld_page.c ends here */
diff --git a/contrib/ncurses/form/fld_stat.c b/contrib/ncurses/form/fld_stat.c
index 487a21dc9642..7b504bf449fe 100644
--- a/contrib/ncurses/form/fld_stat.c
+++ b/contrib/ncurses/form/fld_stat.c
@@ -1,80 +1,80 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_stat.c,v 1.15 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_stat.c,v 1.17 2020/12/11 22:05:24 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_field_status(FIELD *field, bool status)
|
| Description : Set or clear the 'changed' indication flag for that
-| fields primary buffer.
+| field's primary buffer.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_field_status(FIELD *field, bool status)
{
T((T_CALLED("set_field_status(%p,%d)"), (void *)field, status));
Normalize_Field(field);
if (status)
SetStatus(field, _CHANGED);
else
ClrStatus(field, _CHANGED);
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : bool field_status(const FIELD *field)
|
| Description : Retrieve the value of the 'changed' indication flag
-| for that fields primary buffer.
+| for that field's primary buffer.
|
| Return Values : TRUE - buffer has been changed
| FALSE - buffer has not been changed
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+FORM_EXPORT(bool)
field_status(const FIELD *field)
{
T((T_CALLED("field_status(%p)"), (const void *)field));
returnBool((Normalize_Field(field)->status & _CHANGED) ? TRUE : FALSE);
}
/* fld_stat.c ends here */
diff --git a/contrib/ncurses/form/fld_type.c b/contrib/ncurses/form/fld_type.c
index a445fa4de734..12c92cf6e268 100644
--- a/contrib/ncurses/form/fld_type.c
+++ b/contrib/ncurses/form/fld_type.c
@@ -1,98 +1,98 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_type.c,v 1.17 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_type.c,v 1.19 2020/12/11 23:20:37 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_field_type(FIELD *field, FIELDTYPE *type,...)
|
| Description : Associate the specified fieldtype with the field.
| Certain field types take additional arguments. Look
| at the spec of the field types !
|
| Return Values : E_OK - success
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_field_type(FIELD *field, FIELDTYPE *type,...)
+FORM_EXPORT(int)
+set_field_type(FIELD *field, FIELDTYPE *type, ...)
{
va_list ap;
int res = E_SYSTEM_ERROR;
int err = 0;
T((T_CALLED("set_field_type(%p,%p)"), (void *)field, (void *)type));
va_start(ap, type);
Normalize_Field(field);
_nc_Free_Type(field);
field->type = type;
field->arg = (void *)_nc_Make_Argument(field->type, &ap, &err);
if (err)
{
_nc_Free_Argument(field->type, (TypeArgument *)(field->arg));
field->type = (FIELDTYPE *)0;
field->arg = (void *)0;
}
else
{
res = E_OK;
if (field->type)
field->type->ref++;
}
va_end(ap);
RETURN(res);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : FIELDTYPE *field_type(const FIELD *field)
|
| Description : Retrieve the associated fieldtype for this field.
|
| Return Values : Pointer to fieldtype of NULL if none is defined.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELDTYPE *)
+FORM_EXPORT(FIELDTYPE *)
field_type(const FIELD *field)
{
T((T_CALLED("field_type(%p)"), (const void *)field));
returnFieldType(Normalize_Field(field)->type);
}
/* fld_type.c ends here */
diff --git a/contrib/ncurses/form/fld_user.c b/contrib/ncurses/form/fld_user.c
index 5cd165c8341a..2f51fa67e3dc 100644
--- a/contrib/ncurses/form/fld_user.c
+++ b/contrib/ncurses/form/fld_user.c
@@ -1,73 +1,73 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_user.c,v 1.17 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fld_user.c,v 1.19 2020/12/12 01:05:34 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_field_userptr(FIELD *field, void *usrptr)
|
| Description : Set the pointer that is reserved in any field to store
-| application relevant informations
+| application relevant information.
|
| Return Values : E_OK - on success
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_field_userptr(FIELD *field, void *usrptr)
{
T((T_CALLED("set_field_userptr(%p,%p)"), (void *)field, (void *)usrptr));
Normalize_Field(field)->usrptr = usrptr;
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : void *field_userptr(const FIELD *field)
|
| Description : Return the pointer that is reserved in any field to
-| store application relevant informations.
+| store application relevant information.
|
| Return Values : Value of pointer. If no such pointer has been set,
| NULL is returned
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void *)
+FORM_EXPORT(void *)
field_userptr(const FIELD *field)
{
T((T_CALLED("field_userptr(%p)"), (const void *)field));
returnVoidPtr(Normalize_Field(field)->usrptr);
}
/* fld_user.c ends here */
diff --git a/contrib/ncurses/form/form.h b/contrib/ncurses/form/form.h
index dabe67642ec4..59a97a3d0691 100644
--- a/contrib/ncurses/form/form.h
+++ b/contrib/ncurses/form/form.h
@@ -1,449 +1,460 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
-/* $Id: form.h,v 0.30 2020/02/02 23:34:34 tom Exp $ */
+/* $Id: form.h,v 0.31 2020/07/04 20:38:43 tom Exp $ */
#ifndef FORM_H
#define FORM_H
/* *INDENT-OFF*/
#include <curses.h>
#include <eti.h>
#ifdef __cplusplus
extern "C" {
#endif
+#if defined(BUILDING_FORM)
+# define FORM_IMPEXP NCURSES_EXPORT_GENERAL_EXPORT
+#else
+# define FORM_IMPEXP NCURSES_EXPORT_GENERAL_IMPORT
+#endif
+
+#define FORM_WRAPPED_VAR(type,name) extern FORM_IMPEXP type NCURSES_PUBLIC_VAR(name)(void)
+
+#define FORM_EXPORT(type) FORM_IMPEXP type NCURSES_API
+#define FORM_EXPORT_VAR(type) FORM_IMPEXP type
+
#ifndef FORM_PRIV_H
typedef void *FIELD_CELL;
#endif
#ifndef NCURSES_FIELD_INTERNALS
#define NCURSES_FIELD_INTERNALS /* nothing */
#endif
typedef int Form_Options;
typedef int Field_Options;
/**********
* _PAGE *
**********/
typedef struct pagenode
#if !NCURSES_OPAQUE_FORM
{
short pmin; /* index of first field on page */
short pmax; /* index of last field on page */
short smin; /* index of top leftmost field on page */
short smax; /* index of bottom rightmost field on page */
}
#endif /* !NCURSES_OPAQUE_FORM */
_PAGE;
/**********
* FIELD *
**********/
typedef struct fieldnode
#if 1 /* not yet: !NCURSES_OPAQUE_FORM */
{
unsigned short status; /* flags */
short rows; /* size in rows */
short cols; /* size in cols */
short frow; /* first row */
short fcol; /* first col */
int drows; /* dynamic rows */
int dcols; /* dynamic cols */
int maxgrow; /* maximum field growth */
int nrow; /* off-screen rows */
short nbuf; /* additional buffers */
short just; /* justification */
short page; /* page on form */
short index; /* into form -> field */
int pad; /* pad character */
chtype fore; /* foreground attribute */
chtype back; /* background attribute */
Field_Options opts; /* options */
struct fieldnode * snext; /* sorted order pointer */
struct fieldnode * sprev; /* sorted order pointer */
struct fieldnode * link; /* linked field chain */
struct formnode * form; /* containing form */
struct typenode * type; /* field type */
void * arg; /* argument for type */
FIELD_CELL * buf; /* field buffers */
void * usrptr; /* user pointer */
/*
* The wide-character configuration requires extra information. Because
* there are existing applications that manipulate the members of FIELD
* directly, we cannot make the struct opaque, except by changing the ABI.
* Offsets of members up to this point are the same in the narrow- and
* wide-character configuration. But note that the type of buf depends on
* the configuration, and is made opaque for that reason.
*/
NCURSES_FIELD_INTERNALS
}
#endif /* NCURSES_OPAQUE_FORM */
FIELD;
/*********
* FORM *
*********/
typedef struct formnode
#if 1 /* not yet: !NCURSES_OPAQUE_FORM */
{
unsigned short status; /* flags */
short rows; /* size in rows */
short cols; /* size in cols */
int currow; /* current row in field window */
int curcol; /* current col in field window */
int toprow; /* in scrollable field window */
int begincol; /* in horiz. scrollable field */
short maxfield; /* number of fields */
short maxpage; /* number of pages */
short curpage; /* index into page */
Form_Options opts; /* options */
WINDOW * win; /* window */
WINDOW * sub; /* subwindow */
WINDOW * w; /* window for current field */
FIELD ** field; /* field [maxfield] */
FIELD * current; /* current field */
_PAGE * page; /* page [maxpage] */
void * usrptr; /* user pointer */
void (*forminit)(struct formnode *);
void (*formterm)(struct formnode *);
void (*fieldinit)(struct formnode *);
void (*fieldterm)(struct formnode *);
}
#endif /* !NCURSES_OPAQUE_FORM */
FORM;
/**************
* FIELDTYPE *
**************/
typedef struct typenode
#if !NCURSES_OPAQUE_FORM
{
unsigned short status; /* flags */
long ref; /* reference count */
struct typenode * left; /* ptr to operand for | */
struct typenode * right; /* ptr to operand for | */
void* (*makearg)(va_list *); /* make fieldtype arg */
void* (*copyarg)(const void *); /* copy fieldtype arg */
void (*freearg)(void *); /* free fieldtype arg */
#if NCURSES_INTEROP_FUNCS
union {
bool (*ofcheck)(FIELD *,const void *); /* field validation */
bool (*gfcheck)(FORM*,FIELD *,const void*); /* generic field validation */
} fieldcheck;
union {
bool (*occheck)(int,const void *); /* character validation */
bool (*gccheck)(int,FORM*,
FIELD*,const void*); /* generic char validation */
} charcheck;
union {
bool (*onext)(FIELD *,const void *); /* enumerate next value */
bool (*gnext)(FORM*,FIELD*,const void*); /* generic enumerate next */
} enum_next;
union {
bool (*oprev)(FIELD *,const void *); /* enumerate prev value */
bool (*gprev)(FORM*,FIELD*,const void*); /* generic enumerate prev */
} enum_prev;
void* (*genericarg)(void*); /* Alternate Arg method */
#else
bool (*fcheck)(FIELD *,const void *); /* field validation */
bool (*ccheck)(int,const void *); /* character validation */
bool (*next)(FIELD *,const void *); /* enumerate next value */
bool (*prev)(FIELD *,const void *); /* enumerate prev value */
#endif
}
#endif /* !NCURSES_OPAQUE_FORM */
FIELDTYPE;
typedef void (*Form_Hook)(FORM *);
/***************************
* miscellaneous #defines *
***************************/
/* field justification */
#define NO_JUSTIFICATION (0)
#define JUSTIFY_LEFT (1)
#define JUSTIFY_CENTER (2)
#define JUSTIFY_RIGHT (3)
/* field options */
#define O_VISIBLE (0x0001U)
#define O_ACTIVE (0x0002U)
#define O_PUBLIC (0x0004U)
#define O_EDIT (0x0008U)
#define O_WRAP (0x0010U)
#define O_BLANK (0x0020U)
#define O_AUTOSKIP (0x0040U)
#define O_NULLOK (0x0080U)
#define O_PASSOK (0x0100U)
#define O_STATIC (0x0200U)
#define O_DYNAMIC_JUSTIFY (0x0400U) /* ncurses extension */
#define O_NO_LEFT_STRIP (0x0800U) /* ncurses extension */
#define O_EDGE_INSERT_STAY (0x1000U) /* ncurses extension */
#define O_INPUT_LIMIT (0x2000U) /* ncurses extension */
/* form options */
#define O_NL_OVERLOAD (0x0001U)
#define O_BS_OVERLOAD (0x0002U)
/* form driver commands */
#define REQ_NEXT_PAGE (KEY_MAX + 1) /* move to next page */
#define REQ_PREV_PAGE (KEY_MAX + 2) /* move to previous page */
#define REQ_FIRST_PAGE (KEY_MAX + 3) /* move to first page */
#define REQ_LAST_PAGE (KEY_MAX + 4) /* move to last page */
#define REQ_NEXT_FIELD (KEY_MAX + 5) /* move to next field */
#define REQ_PREV_FIELD (KEY_MAX + 6) /* move to previous field */
#define REQ_FIRST_FIELD (KEY_MAX + 7) /* move to first field */
#define REQ_LAST_FIELD (KEY_MAX + 8) /* move to last field */
#define REQ_SNEXT_FIELD (KEY_MAX + 9) /* move to sorted next field */
#define REQ_SPREV_FIELD (KEY_MAX + 10) /* move to sorted prev field */
#define REQ_SFIRST_FIELD (KEY_MAX + 11) /* move to sorted first field */
#define REQ_SLAST_FIELD (KEY_MAX + 12) /* move to sorted last field */
#define REQ_LEFT_FIELD (KEY_MAX + 13) /* move to left to field */
#define REQ_RIGHT_FIELD (KEY_MAX + 14) /* move to right to field */
#define REQ_UP_FIELD (KEY_MAX + 15) /* move to up to field */
#define REQ_DOWN_FIELD (KEY_MAX + 16) /* move to down to field */
#define REQ_NEXT_CHAR (KEY_MAX + 17) /* move to next char in field */
#define REQ_PREV_CHAR (KEY_MAX + 18) /* move to prev char in field */
#define REQ_NEXT_LINE (KEY_MAX + 19) /* move to next line in field */
#define REQ_PREV_LINE (KEY_MAX + 20) /* move to prev line in field */
#define REQ_NEXT_WORD (KEY_MAX + 21) /* move to next word in field */
#define REQ_PREV_WORD (KEY_MAX + 22) /* move to prev word in field */
#define REQ_BEG_FIELD (KEY_MAX + 23) /* move to first char in field */
#define REQ_END_FIELD (KEY_MAX + 24) /* move after last char in fld */
#define REQ_BEG_LINE (KEY_MAX + 25) /* move to beginning of line */
#define REQ_END_LINE (KEY_MAX + 26) /* move after last char in line */
#define REQ_LEFT_CHAR (KEY_MAX + 27) /* move left in field */
#define REQ_RIGHT_CHAR (KEY_MAX + 28) /* move right in field */
#define REQ_UP_CHAR (KEY_MAX + 29) /* move up in field */
#define REQ_DOWN_CHAR (KEY_MAX + 30) /* move down in field */
#define REQ_NEW_LINE (KEY_MAX + 31) /* insert/overlay new line */
#define REQ_INS_CHAR (KEY_MAX + 32) /* insert blank char at cursor */
#define REQ_INS_LINE (KEY_MAX + 33) /* insert blank line at cursor */
#define REQ_DEL_CHAR (KEY_MAX + 34) /* delete char at cursor */
#define REQ_DEL_PREV (KEY_MAX + 35) /* delete char before cursor */
#define REQ_DEL_LINE (KEY_MAX + 36) /* delete line at cursor */
#define REQ_DEL_WORD (KEY_MAX + 37) /* delete word at cursor */
#define REQ_CLR_EOL (KEY_MAX + 38) /* clear to end of line */
#define REQ_CLR_EOF (KEY_MAX + 39) /* clear to end of field */
#define REQ_CLR_FIELD (KEY_MAX + 40) /* clear entire field */
#define REQ_OVL_MODE (KEY_MAX + 41) /* begin overlay mode */
#define REQ_INS_MODE (KEY_MAX + 42) /* begin insert mode */
#define REQ_SCR_FLINE (KEY_MAX + 43) /* scroll field forward a line */
#define REQ_SCR_BLINE (KEY_MAX + 44) /* scroll field backward a line */
#define REQ_SCR_FPAGE (KEY_MAX + 45) /* scroll field forward a page */
#define REQ_SCR_BPAGE (KEY_MAX + 46) /* scroll field backward a page */
#define REQ_SCR_FHPAGE (KEY_MAX + 47) /* scroll field forward half page */
#define REQ_SCR_BHPAGE (KEY_MAX + 48) /* scroll field backward half page */
#define REQ_SCR_FCHAR (KEY_MAX + 49) /* horizontal scroll char */
#define REQ_SCR_BCHAR (KEY_MAX + 50) /* horizontal scroll char */
#define REQ_SCR_HFLINE (KEY_MAX + 51) /* horizontal scroll line */
#define REQ_SCR_HBLINE (KEY_MAX + 52) /* horizontal scroll line */
#define REQ_SCR_HFHALF (KEY_MAX + 53) /* horizontal scroll half line */
#define REQ_SCR_HBHALF (KEY_MAX + 54) /* horizontal scroll half line */
#define REQ_VALIDATION (KEY_MAX + 55) /* validate field */
#define REQ_NEXT_CHOICE (KEY_MAX + 56) /* display next field choice */
#define REQ_PREV_CHOICE (KEY_MAX + 57) /* display prev field choice */
#define MIN_FORM_COMMAND (KEY_MAX + 1) /* used by form_driver */
#define MAX_FORM_COMMAND (KEY_MAX + 57) /* used by form_driver */
#if defined(MAX_COMMAND)
# if (MAX_FORM_COMMAND > MAX_COMMAND)
# error Something is wrong -- MAX_FORM_COMMAND is greater than MAX_COMMAND
# elif (MAX_COMMAND != (KEY_MAX + 128))
# error Something is wrong -- MAX_COMMAND is already inconsistently defined.
# endif
#else
# define MAX_COMMAND (KEY_MAX + 128)
#endif
/*************************
* standard field types *
*************************/
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ALPHA;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ALNUM;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ENUM;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_INTEGER;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_NUMERIC;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_REGEXP;
+extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_ALPHA;
+extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_ALNUM;
+extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_ENUM;
+extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_INTEGER;
+extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_NUMERIC;
+extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_REGEXP;
/************************************
* built-in additional field types *
* They are not defined in SVr4 *
************************************/
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_IPV4; /* Internet IP Version 4 address */
+extern FORM_EXPORT_VAR(FIELDTYPE *) TYPE_IPV4; /* Internet IP Version 4 address */
/***********************
* FIELDTYPE routines *
***********************/
-extern NCURSES_EXPORT(FIELDTYPE *) new_fieldtype (
+extern FORM_EXPORT(FIELDTYPE *) new_fieldtype (
bool (* const field_check)(FIELD *,const void *),
bool (* const char_check)(int,const void *));
-extern NCURSES_EXPORT(FIELDTYPE *) link_fieldtype(
+extern FORM_EXPORT(FIELDTYPE *) link_fieldtype(
FIELDTYPE *, FIELDTYPE *);
-extern NCURSES_EXPORT(int) free_fieldtype (FIELDTYPE *);
-extern NCURSES_EXPORT(int) set_fieldtype_arg (FIELDTYPE *,
+extern FORM_EXPORT(int) free_fieldtype (FIELDTYPE *);
+extern FORM_EXPORT(int) set_fieldtype_arg (FIELDTYPE *,
void * (* const make_arg)(va_list *),
void * (* const copy_arg)(const void *),
void (* const free_arg)(void *));
-extern NCURSES_EXPORT(int) set_fieldtype_choice (FIELDTYPE *,
+extern FORM_EXPORT(int) set_fieldtype_choice (FIELDTYPE *,
bool (* const next_choice)(FIELD *,const void *),
bool (* const prev_choice)(FIELD *,const void *));
/*******************
* FIELD routines *
*******************/
-extern NCURSES_EXPORT(FIELD *) new_field (int,int,int,int,int,int);
-extern NCURSES_EXPORT(FIELD *) dup_field (FIELD *,int,int);
-extern NCURSES_EXPORT(FIELD *) link_field (FIELD *,int,int);
-
-extern NCURSES_EXPORT(int) free_field (FIELD *);
-extern NCURSES_EXPORT(int) field_info (const FIELD *,int *,int *,int *,int *,int *,int *);
-extern NCURSES_EXPORT(int) dynamic_field_info (const FIELD *,int *,int *,int *);
-extern NCURSES_EXPORT(int) set_max_field ( FIELD *,int);
-extern NCURSES_EXPORT(int) move_field (FIELD *,int,int);
-extern NCURSES_EXPORT(int) set_field_type (FIELD *,FIELDTYPE *,...);
-extern NCURSES_EXPORT(int) set_new_page (FIELD *,bool);
-extern NCURSES_EXPORT(int) set_field_just (FIELD *,int);
-extern NCURSES_EXPORT(int) field_just (const FIELD *);
-extern NCURSES_EXPORT(int) set_field_fore (FIELD *,chtype);
-extern NCURSES_EXPORT(int) set_field_back (FIELD *,chtype);
-extern NCURSES_EXPORT(int) set_field_pad (FIELD *,int);
-extern NCURSES_EXPORT(int) field_pad (const FIELD *);
-extern NCURSES_EXPORT(int) set_field_buffer (FIELD *,int,const char *);
-extern NCURSES_EXPORT(int) set_field_status (FIELD *,bool);
-extern NCURSES_EXPORT(int) set_field_userptr (FIELD *, void *);
-extern NCURSES_EXPORT(int) set_field_opts (FIELD *,Field_Options);
-extern NCURSES_EXPORT(int) field_opts_on (FIELD *,Field_Options);
-extern NCURSES_EXPORT(int) field_opts_off (FIELD *,Field_Options);
-
-extern NCURSES_EXPORT(chtype) field_fore (const FIELD *);
-extern NCURSES_EXPORT(chtype) field_back (const FIELD *);
-
-extern NCURSES_EXPORT(bool) new_page (const FIELD *);
-extern NCURSES_EXPORT(bool) field_status (const FIELD *);
-
-extern NCURSES_EXPORT(void *) field_arg (const FIELD *);
-
-extern NCURSES_EXPORT(void *) field_userptr (const FIELD *);
-
-extern NCURSES_EXPORT(FIELDTYPE *) field_type (const FIELD *);
-
-extern NCURSES_EXPORT(char *) field_buffer (const FIELD *,int);
-
-extern NCURSES_EXPORT(Field_Options) field_opts (const FIELD *);
+extern FORM_EXPORT(FIELD *) new_field (int,int,int,int,int,int);
+extern FORM_EXPORT(FIELD *) dup_field (FIELD *,int,int);
+extern FORM_EXPORT(FIELD *) link_field (FIELD *,int,int);
+
+extern FORM_EXPORT(int) free_field (FIELD *);
+extern FORM_EXPORT(int) field_info (const FIELD *,int *,int *,int *,int *,int *,int *);
+extern FORM_EXPORT(int) dynamic_field_info (const FIELD *,int *,int *,int *);
+extern FORM_EXPORT(int) set_max_field ( FIELD *,int);
+extern FORM_EXPORT(int) move_field (FIELD *,int,int);
+extern FORM_EXPORT(int) set_field_type (FIELD *,FIELDTYPE *,...);
+extern FORM_EXPORT(int) set_new_page (FIELD *,bool);
+extern FORM_EXPORT(int) set_field_just (FIELD *,int);
+extern FORM_EXPORT(int) field_just (const FIELD *);
+extern FORM_EXPORT(int) set_field_fore (FIELD *,chtype);
+extern FORM_EXPORT(int) set_field_back (FIELD *,chtype);
+extern FORM_EXPORT(int) set_field_pad (FIELD *,int);
+extern FORM_EXPORT(int) field_pad (const FIELD *);
+extern FORM_EXPORT(int) set_field_buffer (FIELD *,int,const char *);
+extern FORM_EXPORT(int) set_field_status (FIELD *,bool);
+extern FORM_EXPORT(int) set_field_userptr (FIELD *, void *);
+extern FORM_EXPORT(int) set_field_opts (FIELD *,Field_Options);
+extern FORM_EXPORT(int) field_opts_on (FIELD *,Field_Options);
+extern FORM_EXPORT(int) field_opts_off (FIELD *,Field_Options);
+
+extern FORM_EXPORT(chtype) field_fore (const FIELD *);
+extern FORM_EXPORT(chtype) field_back (const FIELD *);
+
+extern FORM_EXPORT(bool) new_page (const FIELD *);
+extern FORM_EXPORT(bool) field_status (const FIELD *);
+
+extern FORM_EXPORT(void *) field_arg (const FIELD *);
+
+extern FORM_EXPORT(void *) field_userptr (const FIELD *);
+
+extern FORM_EXPORT(FIELDTYPE *) field_type (const FIELD *);
+
+extern FORM_EXPORT(char *) field_buffer (const FIELD *,int);
+
+extern FORM_EXPORT(Field_Options) field_opts (const FIELD *);
/******************
* FORM routines *
******************/
-extern NCURSES_EXPORT(FORM *) new_form (FIELD **);
-
-extern NCURSES_EXPORT(FIELD **) form_fields (const FORM *);
-extern NCURSES_EXPORT(FIELD *) current_field (const FORM *);
-
-extern NCURSES_EXPORT(WINDOW *) form_win (const FORM *);
-extern NCURSES_EXPORT(WINDOW *) form_sub (const FORM *);
-
-extern NCURSES_EXPORT(Form_Hook) form_init (const FORM *);
-extern NCURSES_EXPORT(Form_Hook) form_term (const FORM *);
-extern NCURSES_EXPORT(Form_Hook) field_init (const FORM *);
-extern NCURSES_EXPORT(Form_Hook) field_term (const FORM *);
-
-extern NCURSES_EXPORT(int) free_form (FORM *);
-extern NCURSES_EXPORT(int) set_form_fields (FORM *,FIELD **);
-extern NCURSES_EXPORT(int) field_count (const FORM *);
-extern NCURSES_EXPORT(int) set_form_win (FORM *,WINDOW *);
-extern NCURSES_EXPORT(int) set_form_sub (FORM *,WINDOW *);
-extern NCURSES_EXPORT(int) set_current_field (FORM *,FIELD *);
-extern NCURSES_EXPORT(int) unfocus_current_field (FORM *);
-extern NCURSES_EXPORT(int) field_index (const FIELD *);
-extern NCURSES_EXPORT(int) set_form_page (FORM *,int);
-extern NCURSES_EXPORT(int) form_page (const FORM *);
-extern NCURSES_EXPORT(int) scale_form (const FORM *,int *,int *);
-extern NCURSES_EXPORT(int) set_form_init (FORM *,Form_Hook);
-extern NCURSES_EXPORT(int) set_form_term (FORM *,Form_Hook);
-extern NCURSES_EXPORT(int) set_field_init (FORM *,Form_Hook);
-extern NCURSES_EXPORT(int) set_field_term (FORM *,Form_Hook);
-extern NCURSES_EXPORT(int) post_form (FORM *);
-extern NCURSES_EXPORT(int) unpost_form (FORM *);
-extern NCURSES_EXPORT(int) pos_form_cursor (FORM *);
-extern NCURSES_EXPORT(int) form_driver (FORM *,int);
+extern FORM_EXPORT(FORM *) new_form (FIELD **);
+
+extern FORM_EXPORT(FIELD **) form_fields (const FORM *);
+extern FORM_EXPORT(FIELD *) current_field (const FORM *);
+
+extern FORM_EXPORT(WINDOW *) form_win (const FORM *);
+extern FORM_EXPORT(WINDOW *) form_sub (const FORM *);
+
+extern FORM_EXPORT(Form_Hook) form_init (const FORM *);
+extern FORM_EXPORT(Form_Hook) form_term (const FORM *);
+extern FORM_EXPORT(Form_Hook) field_init (const FORM *);
+extern FORM_EXPORT(Form_Hook) field_term (const FORM *);
+
+extern FORM_EXPORT(int) free_form (FORM *);
+extern FORM_EXPORT(int) set_form_fields (FORM *,FIELD **);
+extern FORM_EXPORT(int) field_count (const FORM *);
+extern FORM_EXPORT(int) set_form_win (FORM *,WINDOW *);
+extern FORM_EXPORT(int) set_form_sub (FORM *,WINDOW *);
+extern FORM_EXPORT(int) set_current_field (FORM *,FIELD *);
+extern FORM_EXPORT(int) unfocus_current_field (FORM *);
+extern FORM_EXPORT(int) field_index (const FIELD *);
+extern FORM_EXPORT(int) set_form_page (FORM *,int);
+extern FORM_EXPORT(int) form_page (const FORM *);
+extern FORM_EXPORT(int) scale_form (const FORM *,int *,int *);
+extern FORM_EXPORT(int) set_form_init (FORM *,Form_Hook);
+extern FORM_EXPORT(int) set_form_term (FORM *,Form_Hook);
+extern FORM_EXPORT(int) set_field_init (FORM *,Form_Hook);
+extern FORM_EXPORT(int) set_field_term (FORM *,Form_Hook);
+extern FORM_EXPORT(int) post_form (FORM *);
+extern FORM_EXPORT(int) unpost_form (FORM *);
+extern FORM_EXPORT(int) pos_form_cursor (FORM *);
+extern FORM_EXPORT(int) form_driver (FORM *,int);
# if NCURSES_WIDECHAR
-extern NCURSES_EXPORT(int) form_driver_w (FORM *,int,wchar_t);
+extern FORM_EXPORT(int) form_driver_w (FORM *,int,wchar_t);
# endif
-extern NCURSES_EXPORT(int) set_form_userptr (FORM *,void *);
-extern NCURSES_EXPORT(int) set_form_opts (FORM *,Form_Options);
-extern NCURSES_EXPORT(int) form_opts_on (FORM *,Form_Options);
-extern NCURSES_EXPORT(int) form_opts_off (FORM *,Form_Options);
-extern NCURSES_EXPORT(int) form_request_by_name (const char *);
+extern FORM_EXPORT(int) set_form_userptr (FORM *,void *);
+extern FORM_EXPORT(int) set_form_opts (FORM *,Form_Options);
+extern FORM_EXPORT(int) form_opts_on (FORM *,Form_Options);
+extern FORM_EXPORT(int) form_opts_off (FORM *,Form_Options);
+extern FORM_EXPORT(int) form_request_by_name (const char *);
-extern NCURSES_EXPORT(const char *) form_request_name (int);
+extern FORM_EXPORT(const char *) form_request_name (int);
-extern NCURSES_EXPORT(void *) form_userptr (const FORM *);
+extern FORM_EXPORT(void *) form_userptr (const FORM *);
-extern NCURSES_EXPORT(Form_Options) form_opts (const FORM *);
+extern FORM_EXPORT(Form_Options) form_opts (const FORM *);
-extern NCURSES_EXPORT(bool) data_ahead (const FORM *);
-extern NCURSES_EXPORT(bool) data_behind (const FORM *);
+extern FORM_EXPORT(bool) data_ahead (const FORM *);
+extern FORM_EXPORT(bool) data_behind (const FORM *);
#if NCURSES_SP_FUNCS
-extern NCURSES_EXPORT(FORM *) NCURSES_SP_NAME(new_form) (SCREEN*, FIELD **);
+extern FORM_EXPORT(FORM *) NCURSES_SP_NAME(new_form) (SCREEN*, FIELD **);
#endif
#ifdef __cplusplus
}
#endif
/* *INDENT-ON*/
#endif /* FORM_H */
diff --git a/contrib/ncurses/form/form.priv.h b/contrib/ncurses/form/form.priv.h
index 53c717c637c1..048d9f84592e 100644
--- a/contrib/ncurses/form/form.priv.h
+++ b/contrib/ncurses/form/form.priv.h
@@ -1,312 +1,312 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
-/* $Id: form.priv.h,v 0.45 2020/02/02 23:34:34 tom Exp $ */
+/* $Id: form.priv.h,v 0.47 2020/12/11 23:20:11 tom Exp $ */
#ifndef FORM_PRIV_H
#define FORM_PRIV_H 1
/* *INDENT-OFF*/
#include "curses.priv.h"
#define NCURSES_OPAQUE_FORM 0
#include "mf_common.h"
#if USE_WIDEC_SUPPORT
#if HAVE_WCTYPE_H
#include <wctype.h>
#endif
#ifndef MB_LEN_MAX
#define MB_LEN_MAX 8 /* should be >= MB_CUR_MAX, but that may be a function */
#endif
#define FIELD_CELL NCURSES_CH_T
#define NCURSES_FIELD_INTERNALS char** expanded; WINDOW *working;
#define NCURSES_FIELD_EXTENSION , (char **)0, (WINDOW *)0
#else
#define FIELD_CELL char
#define NCURSES_FIELD_EXTENSION /* nothing */
#endif
#include "form.h"
/***********************
* Default objects *
***********************/
-extern NCURSES_EXPORT_VAR(FORM *) _nc_Default_Form;
-extern NCURSES_EXPORT_VAR(FIELD *) _nc_Default_Field;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) _nc_Default_FieldType;
+extern FORM_EXPORT_VAR(FORM *) _nc_Default_Form;
+extern FORM_EXPORT_VAR(FIELD *) _nc_Default_Field;
+extern FORM_EXPORT_VAR(FIELDTYPE *) _nc_Default_FieldType;
/* form status values */
#define _OVLMODE (0x04U) /* Form is in overlay mode */
#define _WINDOW_MODIFIED (0x10U) /* Current field window has been modified */
#define _FCHECK_REQUIRED (0x20U) /* Current field needs validation */
/* field status values */
#define _CHANGED (0x01U) /* Field has been changed */
#define _NEWTOP (0x02U) /* Vertical scrolling occurred */
#define _NEWPAGE (0x04U) /* field begins new page of form */
#define _MAY_GROW (0x08U) /* dynamic field may still grow */
/* fieldtype status values */
#define _LINKED_TYPE (0x01U) /* Type is a linked type */
#define _HAS_ARGS (0x02U) /* Type has arguments */
#define _HAS_CHOICE (0x04U) /* Type has choice methods */
#define _RESIDENT (0x08U) /* Type is built-in */
#define _GENERIC (0x10U) /* A generic field type */
/* This are the field options required to be a selectable field in field
navigation requests */
#define O_SELECTABLE (O_ACTIVE | O_VISIBLE)
/* If form is NULL replace form argument by default-form */
#define Normalize_Form(form) \
((form) = (form != 0) ? (form) : _nc_Default_Form)
/* If field is NULL replace field argument by default-field */
#define Normalize_Field(field) \
((field) = (field != 0) ? (field) : _nc_Default_Field)
#if NCURSES_SP_FUNCS
#define Get_Form_Screen(form) \
((form)->win ? _nc_screen_of((form->win)):CURRENT_SCREEN)
#else
#define Get_Form_Screen(form) CURRENT_SCREEN
#endif
-/* Retrieve forms window */
+/* Retrieve form's window */
#define Get_Form_Window(form) \
((form)->sub \
? (form)->sub \
: ((form)->win \
? (form)->win \
: StdScreen(Get_Form_Screen(form))))
/* Calculate the size for a single buffer for this field */
#define Buffer_Length(field) ((field)->drows * (field)->dcols)
/* Calculate the total size of all buffers for this field */
#define Total_Buffer_Size(field) \
( (size_t)(Buffer_Length(field) + 1) * (size_t)(1+(field)->nbuf) * sizeof(FIELD_CELL) )
/* Logic to determine whether or not a field is single lined */
#define Single_Line_Field(field) \
(((field)->rows + (field)->nrow) == 1)
#define Field_Has_Option(f,o) ((((unsigned)(f)->opts) & o) != 0)
/* Logic to determine whether or not a field is selectable */
#define Field_Is_Selectable(f) (((unsigned)((f)->opts) & O_SELECTABLE)==O_SELECTABLE)
#define Field_Is_Not_Selectable(f) (((unsigned)((f)->opts) & O_SELECTABLE)!=O_SELECTABLE)
typedef struct typearg
{
struct typearg *left;
struct typearg *right;
}
TypeArgument;
/* This is a dummy request code (normally invalid) to be used internally
with the form_driver() routine to position to the first active field
on the form
*/
#define FIRST_ACTIVE_MAGIC (-291056)
#define ALL_FORM_OPTS ( \
O_NL_OVERLOAD |\
O_BS_OVERLOAD )
#define STD_FIELD_OPTS (Field_Options)( \
O_VISIBLE |\
O_ACTIVE |\
O_PUBLIC |\
O_EDIT |\
O_WRAP |\
O_BLANK |\
O_AUTOSKIP|\
O_NULLOK |\
O_PASSOK |\
O_STATIC)
#define ALL_FIELD_OPTS (Field_Options)( \
STD_FIELD_OPTS |\
O_DYNAMIC_JUSTIFY |\
O_NO_LEFT_STRIP |\
O_EDGE_INSERT_STAY |\
O_INPUT_LIMIT)
#define C_BLANK ' '
#define is_blank(c) ((c)==C_BLANK)
#define C_ZEROS '\0'
-extern NCURSES_EXPORT(TypeArgument *) _nc_Make_Argument (const FIELDTYPE*, va_list*, int*);
-extern NCURSES_EXPORT(TypeArgument *) _nc_Copy_Argument (const FIELDTYPE*, const TypeArgument*, int*);
-extern NCURSES_EXPORT(void) _nc_Free_Argument (const FIELDTYPE*, TypeArgument*);
-extern NCURSES_EXPORT(bool) _nc_Copy_Type (FIELD*, FIELD const *);
-extern NCURSES_EXPORT(void) _nc_Free_Type (FIELD *);
-
-extern NCURSES_EXPORT(int) _nc_Synchronize_Attributes (FIELD*);
-extern NCURSES_EXPORT(int) _nc_Synchronize_Options (FIELD*, Field_Options);
-extern NCURSES_EXPORT(int) _nc_Set_Form_Page (FORM*, int, FIELD*);
-extern NCURSES_EXPORT(int) _nc_Refresh_Current_Field (FORM*);
-extern NCURSES_EXPORT(FIELD *) _nc_First_Active_Field (FORM*);
-extern NCURSES_EXPORT(bool) _nc_Internal_Validation (FORM*);
-extern NCURSES_EXPORT(int) _nc_Set_Current_Field (FORM*, FIELD*);
-extern NCURSES_EXPORT(int) _nc_Position_Form_Cursor (FORM*);
-extern NCURSES_EXPORT(void) _nc_Unset_Current_Field(FORM *form);
+extern FORM_EXPORT(TypeArgument *) _nc_Make_Argument (const FIELDTYPE*, va_list*, int*);
+extern FORM_EXPORT(TypeArgument *) _nc_Copy_Argument (const FIELDTYPE*, const TypeArgument*, int*);
+extern FORM_EXPORT(void) _nc_Free_Argument (const FIELDTYPE*, TypeArgument*);
+extern FORM_EXPORT(bool) _nc_Copy_Type (FIELD*, FIELD const *);
+extern FORM_EXPORT(void) _nc_Free_Type (FIELD *);
+
+extern FORM_EXPORT(int) _nc_Synchronize_Attributes (FIELD*);
+extern FORM_EXPORT(int) _nc_Synchronize_Options (FIELD*, Field_Options);
+extern FORM_EXPORT(int) _nc_Set_Form_Page (FORM*, int, FIELD*);
+extern FORM_EXPORT(int) _nc_Refresh_Current_Field (FORM*);
+extern FORM_EXPORT(FIELD *) _nc_First_Active_Field (FORM*);
+extern FORM_EXPORT(bool) _nc_Internal_Validation (FORM*);
+extern FORM_EXPORT(int) _nc_Set_Current_Field (FORM*, FIELD*);
+extern FORM_EXPORT(int) _nc_Position_Form_Cursor (FORM*);
+extern FORM_EXPORT(void) _nc_Unset_Current_Field(FORM *form);
#if NCURSES_INTEROP_FUNCS
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_INTEGER(void);
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_ALNUM(void);
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_ALPHA(void);
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_ENUM(void);
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_NUMERIC(void);
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_REGEXP(void);
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_IPV4(void);
-
-extern NCURSES_EXPORT(FIELDTYPE *)
+extern FORM_EXPORT(FIELDTYPE *) _nc_TYPE_INTEGER(void);
+extern FORM_EXPORT(FIELDTYPE *) _nc_TYPE_ALNUM(void);
+extern FORM_EXPORT(FIELDTYPE *) _nc_TYPE_ALPHA(void);
+extern FORM_EXPORT(FIELDTYPE *) _nc_TYPE_ENUM(void);
+extern FORM_EXPORT(FIELDTYPE *) _nc_TYPE_NUMERIC(void);
+extern FORM_EXPORT(FIELDTYPE *) _nc_TYPE_REGEXP(void);
+extern FORM_EXPORT(FIELDTYPE *) _nc_TYPE_IPV4(void);
+
+extern FORM_EXPORT(FIELDTYPE *)
_nc_generic_fieldtype(bool (*const field_check) (FORM*,
FIELD *,
const void *),
bool (*const char_check) (int,
FORM*,
FIELD*,
const void *),
bool (*const next)(FORM*,FIELD*,const void*),
bool (*const prev)(FORM*,FIELD*,const void*),
void (*freecallback)(void*));
-extern NCURSES_EXPORT(int) _nc_set_generic_fieldtype(FIELD*, FIELDTYPE*, int (*)(void**));
-extern NCURSES_EXPORT(WINDOW*) _nc_form_cursor(const FORM* , int* , int* );
+extern FORM_EXPORT(int) _nc_set_generic_fieldtype(FIELD*, FIELDTYPE*, int (*)(void**));
+extern FORM_EXPORT(WINDOW*) _nc_form_cursor(const FORM* , int* , int* );
#define INIT_FT_FUNC(func) {func}
#else
#define INIT_FT_FUNC(func) func
#endif
-extern NCURSES_EXPORT(void) _nc_get_fieldbuffer(FORM*, FIELD*, FIELD_CELL*);
+extern FORM_EXPORT(void) _nc_get_fieldbuffer(FORM*, FIELD*, FIELD_CELL*);
#if USE_WIDEC_SUPPORT
-extern NCURSES_EXPORT(wchar_t *) _nc_Widen_String(char *, int *);
+extern FORM_EXPORT(wchar_t *) _nc_Widen_String(char *, int *);
#endif
#ifdef TRACE
#define returnField(code) TRACE_RETURN1(code,field)
#define returnFieldPtr(code) TRACE_RETURN1(code,field_ptr)
#define returnForm(code) TRACE_RETURN1(code,form)
#define returnFieldType(code) TRACE_RETURN1(code,field_type)
#define returnFormHook(code) TRACE_RETURN1(code,form_hook)
-extern NCURSES_EXPORT(FIELD **) _nc_retrace_field_ptr (FIELD **);
-extern NCURSES_EXPORT(FIELD *) _nc_retrace_field (FIELD *);
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_retrace_field_type (FIELDTYPE *);
-extern NCURSES_EXPORT(FORM *) _nc_retrace_form (FORM *);
-extern NCURSES_EXPORT(Form_Hook) _nc_retrace_form_hook (Form_Hook);
+extern FORM_EXPORT(FIELD **) _nc_retrace_field_ptr (FIELD **);
+extern FORM_EXPORT(FIELD *) _nc_retrace_field (FIELD *);
+extern FORM_EXPORT(FIELDTYPE *) _nc_retrace_field_type (FIELDTYPE *);
+extern FORM_EXPORT(FORM *) _nc_retrace_form (FORM *);
+extern FORM_EXPORT(Form_Hook) _nc_retrace_form_hook (Form_Hook);
#else /* !TRACE */
#define returnFieldPtr(code) return code
#define returnFieldType(code) return code
#define returnField(code) return code
#define returnForm(code) return code
#define returnFormHook(code) return code
#endif /* TRACE/!TRACE */
/*
* Use Check_CTYPE_Field() to simplify FIELDTYPE's that use only the ccheck()
* function.
*/
#if USE_WIDEC_SUPPORT
#define Check_CTYPE_Field(result, buffer, width, ccheck) \
while (*buffer && *buffer == ' ') \
buffer++; \
if (*buffer) \
{ \
bool blank = FALSE; \
int len; \
int n; \
wchar_t *list = _nc_Widen_String((char *)buffer, &len); \
if (list != 0) \
{ \
result = TRUE; \
for (n = 0; n < len; ++n) \
{ \
if (blank) \
{ \
if (list[n] != ' ') \
{ \
result = FALSE; \
break; \
} \
} \
else if (list[n] == ' ') \
{ \
blank = TRUE; \
result = (n + 1 >= width); \
} \
else if (!ccheck(list[n], NULL)) \
{ \
result = FALSE; \
break; \
} \
} \
free(list); \
} \
}
#else
#define Check_CTYPE_Field(result, buffer, width, ccheck) \
while (*buffer && *buffer == ' ') \
buffer++; \
if (*buffer) \
{ \
unsigned char *s = buffer; \
int l = -1; \
while (*buffer && ccheck(*buffer, NULL)) \
buffer++; \
l = (int)(buffer - s); \
while (*buffer && *buffer == ' ') \
buffer++; \
result = ((*buffer || (l < width)) ? FALSE : TRUE); \
}
#endif
/* *INDENT-ON*/
#endif /* FORM_PRIV_H */
diff --git a/contrib/ncurses/form/frm_cursor.c b/contrib/ncurses/form/frm_cursor.c
index 8ff42bf85b7e..daa6c5b7775a 100644
--- a/contrib/ncurses/form/frm_cursor.c
+++ b/contrib/ncurses/form/frm_cursor.c
@@ -1,71 +1,71 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_cursor.c,v 1.11 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: frm_cursor.c,v 1.12 2020/05/24 01:40:20 anonymous.maarten Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int pos_form_cursor(FORM * form)
|
| Description : Moves the form window cursor to the location required
| by the form driver to resume form processing. This may
| be needed after the application calls a curses library
| I/O routine that modifies the cursor position.
|
| Return Values : E_OK - Success
| E_SYSTEM_ERROR - System error.
| E_BAD_ARGUMENT - Invalid form pointer
| E_NOT_POSTED - Form is not posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
pos_form_cursor(FORM *form)
{
int res;
T((T_CALLED("pos_form_cursor(%p)"), (void *)form));
if (!form)
res = E_BAD_ARGUMENT;
else
{
if (!(form->status & _POSTED))
res = E_NOT_POSTED;
else
res = _nc_Position_Form_Cursor(form);
}
RETURN(res);
}
/* frm_cursor.c ends here */
diff --git a/contrib/ncurses/form/frm_data.c b/contrib/ncurses/form/frm_data.c
index 5c3b2a04f1ec..0856afb845e2 100644
--- a/contrib/ncurses/form/frm_data.c
+++ b/contrib/ncurses/form/frm_data.c
@@ -1,194 +1,194 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2013 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_data.c,v 1.17 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: frm_data.c,v 1.19 2020/12/11 23:20:37 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : bool data_behind(const FORM *form)
|
| Description : Check for off-screen data behind. This is nearly trivial
| because the beginning of a field is fixed.
|
| Return Values : TRUE - there are off-screen data behind
| FALSE - there are no off-screen data behind
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+FORM_EXPORT(bool)
data_behind(const FORM *form)
{
bool result = FALSE;
T((T_CALLED("data_behind(%p)"), (const void *)form));
if (form && (form->status & _POSTED) && form->current)
{
FIELD *field;
field = form->current;
if (!Single_Line_Field(field))
{
result = (form->toprow == 0) ? FALSE : TRUE;
}
else
{
result = (form->begincol == 0) ? FALSE : TRUE;
}
}
returnBool(result);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static char * Only_Padding(
| WINDOW *w,
| int len,
| int pad)
|
| Description : Test if 'length' cells starting at the current position
| contain a padding character.
|
| Return Values : true if only padding cells are found
+--------------------------------------------------------------------------*/
NCURSES_INLINE static bool
Only_Padding(WINDOW *w, int len, int pad)
{
bool result = TRUE;
int y, x, j;
FIELD_CELL cell;
getyx(w, y, x);
for (j = 0; j < len; ++j)
{
if (wmove(w, y, x + j) != ERR)
{
#if USE_WIDEC_SUPPORT
if (win_wch(w, &cell) != ERR)
{
if ((chtype)CharOf(cell) != ChCharOf(pad)
|| cell.chars[1] != 0)
{
result = FALSE;
break;
}
}
#else
- cell = (FIELD_CELL) winch(w);
+ cell = (FIELD_CELL)winch(w);
if (ChCharOf(cell) != ChCharOf(pad))
{
result = FALSE;
break;
}
#endif
}
else
{
/* if an error, return true: no non-padding text found */
break;
}
}
/* no need to reset the cursor position; caller does this */
return result;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : bool data_ahead(const FORM *form)
|
| Description : Check for off-screen data ahead. This is more difficult
| because a dynamic field has a variable end.
|
| Return Values : TRUE - there are off-screen data ahead
| FALSE - there are no off-screen data ahead
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+FORM_EXPORT(bool)
data_ahead(const FORM *form)
{
bool result = FALSE;
T((T_CALLED("data_ahead(%p)"), (const void *)form));
if (form && (form->status & _POSTED) && form->current)
{
FIELD *field;
bool cursor_moved = FALSE;
int pos;
field = form->current;
assert(form->w);
if (Single_Line_Field(field))
{
int check_len;
pos = form->begincol + field->cols;
while (pos < field->dcols)
{
check_len = field->dcols - pos;
if (check_len >= field->cols)
check_len = field->cols;
cursor_moved = TRUE;
wmove(form->w, 0, pos);
if (Only_Padding(form->w, check_len, field->pad))
pos += field->cols;
else
{
result = TRUE;
break;
}
}
}
else
{
pos = form->toprow + field->rows;
while (pos < field->drows)
{
cursor_moved = TRUE;
wmove(form->w, pos, 0);
pos++;
if (!Only_Padding(form->w, field->cols, field->pad))
{
result = TRUE;
break;
}
}
}
if (cursor_moved)
wmove(form->w, form->currow, form->curcol);
}
returnBool(result);
}
/* frm_data.c ends here */
diff --git a/contrib/ncurses/form/frm_def.c b/contrib/ncurses/form/frm_def.c
index 0722d517ef27..89ae4ec39c54 100644
--- a/contrib/ncurses/form/frm_def.c
+++ b/contrib/ncurses/form/frm_def.c
@@ -1,449 +1,449 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_def.c,v 1.27 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: frm_def.c,v 1.29 2020/12/11 23:47:16 tom Exp $")
/* this can't be readonly */
static FORM default_form =
{
0, /* status */
0, /* rows */
0, /* cols */
0, /* currow */
0, /* curcol */
0, /* toprow */
0, /* begincol */
-1, /* maxfield */
-1, /* maxpage */
-1, /* curpage */
ALL_FORM_OPTS, /* opts */
(WINDOW *)0, /* win */
(WINDOW *)0, /* sub */
(WINDOW *)0, /* w */
(FIELD **)0, /* field */
(FIELD *)0, /* current */
(_PAGE *) 0, /* page */
(char *)0, /* usrptr */
NULL, /* forminit */
NULL, /* formterm */
NULL, /* fieldinit */
NULL /* fieldterm */
};
-NCURSES_EXPORT_VAR(FORM *) _nc_Default_Form = &default_form;
-
+FORM_EXPORT_VAR(FORM *) _nc_Default_Form = &default_form;
+
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : static FIELD *Insert_Field_By_Position(
-| FIELD *new_field,
+| FIELD *new_field,
| FIELD *head )
-|
+|
| Description : Insert new_field into sorted fieldlist with head "head"
| and return new head of sorted fieldlist. Sorting
| criteria is (row,column). This is a circular list.
|
| Return Values : New head of sorted fieldlist
+--------------------------------------------------------------------------*/
static FIELD *
Insert_Field_By_Position(FIELD *newfield, FIELD *head)
{
FIELD *current, *newhead;
assert(newfield);
if (!head)
{ /* empty list is trivial */
newhead = newfield->snext = newfield->sprev = newfield;
}
else
{
newhead = current = head;
while ((current->frow < newfield->frow) ||
((current->frow == newfield->frow) &&
(current->fcol < newfield->fcol)))
{
current = current->snext;
if (current == head)
{ /* We cycled through. Reset head to indicate that */
head = (FIELD *)0;
break;
}
}
/* we leave the loop with current pointing to the field after newfield */
newfield->snext = current;
newfield->sprev = current->sprev;
newfield->snext->sprev = newfield;
newfield->sprev->snext = newfield;
if (current == head)
newhead = newfield;
}
return (newhead);
}
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : static void Disconnect_Fields(FORM *form)
-|
+|
| Description : Break association between form and array of fields.
|
| Return Values : -
+--------------------------------------------------------------------------*/
static void
Disconnect_Fields(FORM *form)
{
if (form->field)
{
FIELD **fields;
for (fields = form->field; *fields; fields++)
{
if (form == (*fields)->form)
(*fields)->form = (FORM *)0;
}
form->rows = form->cols = 0;
form->maxfield = form->maxpage = -1;
form->field = (FIELD **)0;
if (form->page)
free(form->page);
form->page = (_PAGE *) 0;
}
}
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : static int Connect_Fields(FORM *form, FIELD **fields)
-|
+|
| Description : Set association between form and array of fields.
|
| Return Values : E_OK - no error
| E_CONNECTED - a field is already connected
| E_BAD_ARGUMENT - Invalid form pointer or field array
| E_SYSTEM_ERROR - not enough memory
+--------------------------------------------------------------------------*/
static int
Connect_Fields(FORM *form, FIELD **fields)
{
int field_cnt, j;
int page_nr;
int maximum_row_in_field, maximum_col_in_field;
_PAGE *pg;
T((T_CALLED("Connect_Fields(%p,%p)"), (void *)form, (void *)fields));
assert(form);
form->field = fields;
form->maxfield = 0;
form->maxpage = 0;
if (!fields)
RETURN(E_OK);
page_nr = 0;
/* store formpointer in fields and count pages */
for (field_cnt = 0; fields[field_cnt]; field_cnt++)
{
if (fields[field_cnt]->form)
RETURN(E_CONNECTED);
if (field_cnt == 0 ||
(fields[field_cnt]->status & _NEWPAGE))
page_nr++;
fields[field_cnt]->form = form;
}
if (field_cnt == 0 || (short)field_cnt < 0)
RETURN(E_BAD_ARGUMENT);
/* allocate page structures */
if ((pg = typeMalloc(_PAGE, page_nr)) != (_PAGE *) 0)
{
T((T_CREATE("_PAGE %p"), (void *)pg));
form->page = pg;
}
else
RETURN(E_SYSTEM_ERROR);
/* Cycle through fields and calculate page boundaries as well as
size of the form */
for (j = 0; j < field_cnt; j++)
{
if (j == 0)
- pg->pmin = (short) j;
+ pg->pmin = (short)j;
else
{
if (fields[j]->status & _NEWPAGE)
{
- pg->pmax = (short) (j - 1);
+ pg->pmax = (short)(j - 1);
pg++;
- pg->pmin = (short) j;
+ pg->pmin = (short)j;
}
}
maximum_row_in_field = fields[j]->frow + fields[j]->rows;
maximum_col_in_field = fields[j]->fcol + fields[j]->cols;
if (form->rows < maximum_row_in_field)
- form->rows = (short) maximum_row_in_field;
+ form->rows = (short)maximum_row_in_field;
if (form->cols < maximum_col_in_field)
- form->cols = (short) maximum_col_in_field;
+ form->cols = (short)maximum_col_in_field;
}
- pg->pmax = (short) (field_cnt - 1);
- form->maxfield = (short) field_cnt;
- form->maxpage = (short) page_nr;
+ pg->pmax = (short)(field_cnt - 1);
+ form->maxfield = (short)field_cnt;
+ form->maxpage = (short)page_nr;
/* Sort fields on form pages */
for (page_nr = 0; page_nr < form->maxpage; page_nr++)
{
FIELD *fld = (FIELD *)0;
for (j = form->page[page_nr].pmin; j <= form->page[page_nr].pmax; j++)
{
- fields[j]->index = (short) j;
- fields[j]->page = (short) page_nr;
+ fields[j]->index = (short)j;
+ fields[j]->page = (short)page_nr;
fld = Insert_Field_By_Position(fields[j], fld);
}
if (fld)
{
form->page[page_nr].smin = fld->index;
form->page[page_nr].smax = fld->sprev->index;
}
else
{
form->page[page_nr].smin = 0;
form->page[page_nr].smax = 0;
}
}
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : static int Associate_Fields(FORM *form, FIELD **fields)
-|
-| Description : Set association between form and array of fields.
+|
+| Description : Set association between form and array of fields.
| If there are fields, position to first active field.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - Invalid form pointer or field array
| E_CONNECTED - a field is already connected
| E_SYSTEM_ERROR - not enough memory
+--------------------------------------------------------------------------*/
NCURSES_INLINE static int
Associate_Fields(FORM *form, FIELD **fields)
{
int res = Connect_Fields(form, fields);
if (res == E_OK)
{
if (form->maxpage > 0)
{
form->curpage = 0;
form_driver(form, FIRST_ACTIVE_MAGIC);
}
else
{
form->curpage = -1;
form->current = (FIELD *)0;
}
}
return (res);
}
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : FORM *new_form_sp(SCREEN* sp, FIELD** fields )
-|
+|
| Description : Create new form with given array of fields.
|
| Return Values : Pointer to form. NULL if error occurred.
! Set errno:
| E_OK - success
| E_BAD_ARGUMENT - Invalid form pointer or field array
| E_CONNECTED - a field is already connected
| E_SYSTEM_ERROR - not enough memory
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FORM *)
+FORM_EXPORT(FORM *)
NCURSES_SP_NAME(new_form) (NCURSES_SP_DCLx FIELD **fields)
{
int err = E_SYSTEM_ERROR;
FORM *form = (FORM *)0;
T((T_CALLED("new_form(%p,%p)"), (void *)SP_PARM, (void *)fields));
if (IsValidScreen(SP_PARM))
{
form = typeMalloc(FORM, 1);
if (form)
{
T((T_CREATE("form %p"), (void *)form));
*form = *_nc_Default_Form;
/* This ensures win and sub are always non-null,
so we can derive always the SCREEN that this form is
running on. */
form->win = StdScreen(SP_PARM);
form->sub = StdScreen(SP_PARM);
if ((err = Associate_Fields(form, fields)) != E_OK)
{
free_form(form);
form = (FORM *)0;
}
}
}
if (!form)
SET_ERROR(err);
returnForm(form);
}
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : FORM* new_form(FIELD** fields )
-|
+|
| Description : Create new form with given array of fields.
|
| Return Values : Pointer to form. NULL if error occurred.
! Set errno:
| E_OK - success
| E_BAD_ARGUMENT - Invalid form pointer or field array
| E_CONNECTED - a field is already connected
| E_SYSTEM_ERROR - not enough memory
+--------------------------------------------------------------------------*/
#if NCURSES_SP_FUNCS
-NCURSES_EXPORT(FORM *)
+FORM_EXPORT(FORM *)
new_form(FIELD **fields)
{
return NCURSES_SP_NAME(new_form) (CURRENT_SCREEN, fields);
}
#endif
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : int free_form( FORM *form )
-|
+|
| Description : Release internal memory associated with form.
|
| Return Values : E_OK - no error
| E_BAD_ARGUMENT - invalid form pointer
| E_POSTED - form is posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
free_form(FORM *form)
{
T((T_CALLED("free_form(%p)"), (void *)form));
if (!form)
RETURN(E_BAD_ARGUMENT);
if (form->status & _POSTED)
RETURN(E_POSTED);
Disconnect_Fields(form);
if (form->page)
free(form->page);
free(form);
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : int set_form_fields( FORM *form, FIELD **fields )
-|
+|
| Description : Set a new association of an array of fields to a form
|
| Return Values : E_OK - no error
| E_BAD_ARGUMENT - Invalid form pointer or field array
| E_CONNECTED - a field is already connected
| E_POSTED - form is posted
| E_SYSTEM_ERROR - not enough memory
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_form_fields(FORM *form, FIELD **fields)
{
FIELD **old;
int res;
T((T_CALLED("set_form_fields(%p,%p)"), (void *)form, (void *)fields));
if (!form)
RETURN(E_BAD_ARGUMENT);
if (form->status & _POSTED)
RETURN(E_POSTED);
old = form->field;
Disconnect_Fields(form);
if ((res = Associate_Fields(form, fields)) != E_OK)
Connect_Fields(form, old);
RETURN(res);
}
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : FIELD **form_fields( const FORM *form )
-|
+|
| Description : Retrieve array of fields
|
| Return Values : Pointer to field array
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELD **)
+FORM_EXPORT(FIELD **)
form_fields(const FORM *form)
{
T((T_CALLED("form_field(%p)"), (const void *)form));
returnFieldPtr(Normalize_Form(form)->field);
}
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : int field_count( const FORM *form )
-|
+|
| Description : Retrieve number of fields
|
| Return Values : Number of fields, -1 if none are defined
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
field_count(const FORM *form)
{
T((T_CALLED("field_count(%p)"), (const void *)form));
returnCode(Normalize_Form(form)->maxfield);
}
/* frm_def.c ends here */
diff --git a/contrib/ncurses/form/frm_driver.c b/contrib/ncurses/form/frm_driver.c
index b9f91e12f26d..ad82643ed2f7 100644
--- a/contrib/ncurses/form/frm_driver.c
+++ b/contrib/ncurses/form/frm_driver.c
@@ -1,5005 +1,5005 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_driver.c,v 1.129 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: frm_driver.c,v 1.133 2020/12/12 00:36:42 tom Exp $")
/*----------------------------------------------------------------------------
This is the core module of the form library. It contains the majority
of the driver routines as well as the form_driver function.
Essentially this module is nearly the whole library. This is because
all the functions in this module depends on some others in the module,
so it makes no sense to split them into separate files because they
will always be linked together. The only acceptable concern is turnaround
time for this module, but now we have all Pentiums or RISCs, so what!
The driver routines are grouped into nine generic categories:
a) Page Navigation ( all functions prefixed by PN_ )
The current page of the form is left and some new page is
entered.
b) Inter-Field Navigation ( all functions prefixed by FN_ )
The current field of the form is left and some new field is
entered.
c) Intra-Field Navigation ( all functions prefixed by IFN_ )
The current position in the current field is changed.
d) Vertical Scrolling ( all functions prefixed by VSC_ )
Essentially this is a specialization of Intra-Field navigation.
It has to check for a multi-line field.
e) Horizontal Scrolling ( all functions prefixed by HSC_ )
Essentially this is a specialization of Intra-Field navigation.
It has to check for a single-line field.
f) Field Editing ( all functions prefixed by FE_ )
The content of the current field is changed
g) Edit Mode requests ( all functions prefixed by EM_ )
Switching between insert and overlay mode
h) Field-Validation requests ( all functions prefixed by FV_ )
Perform verifications of the field.
i) Choice requests ( all functions prefixed by CR_ )
Requests to enumerate possible field values
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Some remarks on the placements of assert() macros :
I use them only on "strategic" places, i.e. top level entries where
I want to make sure that things are set correctly. Throughout subordinate
routines I omit them mostly.
--------------------------------------------------------------------------*/
/*
Some options that may effect compatibility in behavior to SVr4 forms,
but they are here to allow a more intuitive and user friendly behavior of
our form implementation. This doesn't affect the API, so we feel it is
uncritical.
The initial implementation tries to stay very close with the behavior
of the original SVr4 implementation, although in some areas it is quite
clear that this isn't the most appropriate way. As far as possible this
sources will allow you to build a forms lib that behaves quite similar
to SVr4, but now and in the future we will give you better options.
Perhaps at some time we will make this configurable at runtime.
*/
/* Implement a more user-friendly previous/next word behavior */
#define FRIENDLY_PREV_NEXT_WORD (1)
/* Fix the wrong behavior for forms with all fields inactive */
#define FIX_FORM_INACTIVE_BUG (1)
/* Allow dynamic field growth also when navigating past the end */
#define GROW_IF_NAVIGATE (1)
#if USE_WIDEC_SUPPORT
#define myADDNSTR(w, s, n) wide_waddnstr(w, s, n)
#define myINSNSTR(w, s, n) wide_winsnstr(w, s, n)
#define myINNSTR(w, s, n) wide_winnstr(w, s, n)
#define myWCWIDTH(w, y, x) cell_width(w, y, x)
#else
#define myADDNSTR(w, s, n) waddnstr(w, s, n)
#define myINSNSTR(w, s, n) winsnstr(w, s, n)
#define myINNSTR(w, s, n) winnstr(w, s, n)
#define myWCWIDTH(w, y, x) 1
#endif
/*----------------------------------------------------------------------------
Forward references to some internally used static functions
--------------------------------------------------------------------------*/
static int Inter_Field_Navigation(int (*const fct) (FORM *), FORM *form);
static int FN_Next_Field(FORM *form);
static int FN_Previous_Field(FORM *form);
static int FE_New_Line(FORM *);
static int FE_Delete_Previous(FORM *);
/*----------------------------------------------------------------------------
Macro Definitions.
Some Remarks on that: I use the convention to use UPPERCASE for constants
defined by Macros. If I provide a macro as a kind of inline routine to
provide some logic, I use my Upper_Lower case style.
--------------------------------------------------------------------------*/
/* Calculate the position of a single row in a field buffer */
#define Position_Of_Row_In_Buffer(field,row) ((row)*(field)->dcols)
-/* Calculate start address for the fields buffer# N */
+/* Calculate start address for the field's buffer# N */
#define Address_Of_Nth_Buffer(field,N) \
((field)->buf + (N)*(1+Buffer_Length(field)))
-/* Calculate the start address of the row in the fields specified buffer# N */
+/* Calculate the start address of the row in the field's specified buffer# N */
#define Address_Of_Row_In_Nth_Buffer(field,N,row) \
(Address_Of_Nth_Buffer(field,N) + Position_Of_Row_In_Buffer(field,row))
-/* Calculate the start address of the row in the fields primary buffer */
+/* Calculate the start address of the row in the field's primary buffer */
#define Address_Of_Row_In_Buffer(field,row) \
Address_Of_Row_In_Nth_Buffer(field,0,row)
-/* Calculate the start address of the row in the forms current field
+/* Calculate the start address of the row in the form's current field
buffer# N */
#define Address_Of_Current_Row_In_Nth_Buffer(form,N) \
Address_Of_Row_In_Nth_Buffer((form)->current,N,(form)->currow)
-/* Calculate the start address of the row in the forms current field
+/* Calculate the start address of the row in the form's current field
primary buffer */
#define Address_Of_Current_Row_In_Buffer(form) \
Address_Of_Current_Row_In_Nth_Buffer(form,0)
-/* Calculate the address of the cursor in the forms current field
+/* Calculate the address of the cursor in the form's current field
primary buffer */
#define Address_Of_Current_Position_In_Nth_Buffer(form,N) \
(Address_Of_Current_Row_In_Nth_Buffer(form,N) + (form)->curcol)
-/* Calculate the address of the cursor in the forms current field
+/* Calculate the address of the cursor in the form's current field
buffer# N */
#define Address_Of_Current_Position_In_Buffer(form) \
Address_Of_Current_Position_In_Nth_Buffer(form,0)
/* Logic to decide whether or not a field is actually a field with
vertical or horizontal scrolling */
#define Is_Scroll_Field(field) \
(((field)->drows > (field)->rows) || \
((field)->dcols > (field)->cols))
/* Logic to decide whether or not a field needs to have an individual window
instead of a derived window because it contains invisible parts.
This is true for non-public fields and for scrollable fields. */
#define Has_Invisible_Parts(field) \
(!(Field_Has_Option(field, O_PUBLIC)) || \
Is_Scroll_Field(field))
/* Logic to decide whether or not a field needs justification */
#define Justification_Allowed(field) \
(((field)->just != NO_JUSTIFICATION) && \
(Single_Line_Field(field)) && \
((Field_Has_Option(field, O_STATIC) && \
((field)->dcols == (field)->cols)) || \
Field_Has_Option(field, O_DYNAMIC_JUSTIFY)))
/* Logic to determine whether or not a dynamic field may still grow */
#define Growable(field) ((field)->status & _MAY_GROW)
-/* Macro to set the attributes for a fields window */
+/* Macro to set the attributes for a field's window */
#define Set_Field_Window_Attributes(field,win) \
( wbkgdset((win),(chtype)((chtype)((field)->pad) | (field)->back)), \
(void) wattrset((win), (int)(field)->fore) )
/* Logic to decide whether or not a field really appears on the form */
#define Field_Really_Appears(field) \
((field->form) &&\
(field->form->status & _POSTED) &&\
(Field_Has_Option(field, O_VISIBLE)) &&\
(field->page == field->form->curpage))
/* Logic to determine whether or not we are on the first position in the
current field */
#define First_Position_In_Current_Field(form) \
(((form)->currow==0) && ((form)->curcol==0))
#define Minimum(a,b) (((a)<=(b)) ? (a) : (b))
#define Maximum(a,b) (((a)>=(b)) ? (a) : (b))
/*----------------------------------------------------------------------------
Useful constants
--------------------------------------------------------------------------*/
static FIELD_CELL myBLANK = BLANK;
static FIELD_CELL myZEROS;
#ifdef TRACE
static void
check_pos(FORM *form, int lineno)
{
int y, x;
if (form && form->w)
{
getyx(form->w, y, x);
if (y != form->currow || x != form->curcol)
{
T(("CHECKPOS %s@%d have position %d,%d vs want %d,%d",
__FILE__, lineno,
y, x,
form->currow, form->curcol));
}
}
}
#define CHECKPOS(form) check_pos(form, __LINE__)
#else
#define CHECKPOS(form) /* nothing */
#endif
/*----------------------------------------------------------------------------
Wide-character special functions
--------------------------------------------------------------------------*/
#if USE_WIDEC_SUPPORT
/* add like waddnstr, but using cchar_t* rather than char*
*/
static int
wide_waddnstr(WINDOW *w, const cchar_t *s, int n)
{
int rc = OK;
while (n-- > 0)
{
if ((rc = wadd_wch(w, s)) != OK)
break;
++s;
}
return rc;
}
/* insert like winsnstr, but using cchar_t* rather than char*
*
* X/Open Curses has no close equivalent; inserts are done only with wchar_t
* strings.
*/
static int
wide_winsnstr(WINDOW *w, const cchar_t *s, int n)
{
int code = ERR;
int y, x;
while (n-- > 0)
{
getyx(w, y, x);
if ((code = wins_wch(w, s++)) != OK)
break;
if ((code = wmove(w, y, x + 1)) != OK)
break;
}
return code;
}
/* retrieve like winnstr, but using cchar_t*, rather than char*.
*
* X/Open Curses' closest equivalent, win_wchnstr(), is inconsistent with
* winnstr(), since it returns OK rather than the number of items transferred.
*/
static int
wide_winnstr(WINDOW *w, cchar_t *s, int n)
{
int x;
win_wchnstr(w, s, n);
/*
* This function is used to extract the text only from the window.
* Strip attributes and color from the string so they will not be added
* back when copying the string to the window.
*/
for (x = 0; x < n; ++x)
{
RemAttr(s[x], A_ATTRIBUTES);
SetPair(s[x], 0);
}
return n;
}
/*
* Returns the column of the base of the given cell.
*/
static int
cell_base(WINDOW *win, int y, int x)
{
int result = x;
while (LEGALYX(win, y, x))
{
cchar_t *data = &(win->_line[y].text[x]);
if (isWidecBase(CHDEREF(data)) || !isWidecExt(CHDEREF(data)))
{
result = x;
break;
}
--x;
}
return result;
}
/*
* Returns the number of columns needed for the given cell in a window.
*/
static int
cell_width(WINDOW *win, int y, int x)
{
int result = 1;
if (LEGALYX(win, y, x))
{
cchar_t *data = &(win->_line[y].text[x]);
if (isWidecExt(CHDEREF(data)))
{
/* recur, providing the number of columns to the next character */
result = cell_width(win, y, x - 1);
}
else
{
result = wcwidth(CharOf(CHDEREF(data)));
}
}
return result;
}
/*
* There is no wide-character function such as wdel_wch(), so we must find
* all of the cells that comprise a multi-column character and delete them
* one-by-one.
*/
static void
delete_char(FORM *form)
{
int cells = cell_width(form->w, form->currow, form->curcol);
form->curcol = cell_base(form->w, form->currow, form->curcol);
wmove(form->w, form->currow, form->curcol);
while (cells-- > 0)
{
wdelch(form->w);
}
}
#define DeleteChar(form) delete_char(form)
#else
#define DeleteChar(form) \
wmove((form)->w, (form)->currow, (form)->curcol), \
wdelch((form)->w)
#endif
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static char *Get_Start_Of_Data(char * buf, int blen)
|
| Description : Return pointer to first non-blank position in buffer.
| If buffer is empty return pointer to buffer itself.
|
| Return Values : Pointer to first non-blank position in buffer
+--------------------------------------------------------------------------*/
NCURSES_INLINE static FIELD_CELL *
Get_Start_Of_Data(FIELD_CELL *buf, int blen)
{
FIELD_CELL *p = buf;
FIELD_CELL *end = &buf[blen];
assert(buf && blen >= 0);
while ((p < end) && ISBLANK(*p))
p++;
return ((p == end) ? buf : p);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static char *After_End_Of_Data(char * buf, int blen)
|
| Description : Return pointer after last non-blank position in buffer.
| If buffer is empty, return pointer to buffer itself.
|
| Return Values : Pointer to position after last non-blank position in
| buffer.
+--------------------------------------------------------------------------*/
NCURSES_INLINE static FIELD_CELL *
After_End_Of_Data(FIELD_CELL *buf, int blen)
{
FIELD_CELL *p = &buf[blen];
assert(buf && blen >= 0);
while ((p > buf) && ISBLANK(p[-1]))
p--;
return (p);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static char *Get_First_Whitespace_Character(
| char * buf, int blen)
|
| Description : Position to the first whitespace character.
|
| Return Values : Pointer to first whitespace character in buffer.
+--------------------------------------------------------------------------*/
NCURSES_INLINE static FIELD_CELL *
Get_First_Whitespace_Character(FIELD_CELL *buf, int blen)
{
FIELD_CELL *p = buf;
FIELD_CELL *end = &p[blen];
assert(buf && blen >= 0);
while ((p < end) && !ISBLANK(*p))
p++;
return ((p == end) ? buf : p);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static char *After_Last_Whitespace_Character(
| char * buf, int blen)
|
| Description : Get the position after the last whitespace character.
|
| Return Values : Pointer to position after last whitespace character in
| buffer.
+--------------------------------------------------------------------------*/
NCURSES_INLINE static FIELD_CELL *
After_Last_Whitespace_Character(FIELD_CELL *buf, int blen)
{
FIELD_CELL *p = &buf[blen];
assert(buf && blen >= 0);
while ((p > buf) && !ISBLANK(p[-1]))
p--;
return (p);
}
/* Set this to 1 to use the div_t version. This is a good idea if your
compiler has an intrinsic div() support. Unfortunately GNU-C has it
not yet.
N.B.: This only works if form->curcol follows immediately form->currow
and both are of type int.
*/
#define USE_DIV_T (0)
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void Adjust_Cursor_Position(
| FORM * form, const char * pos)
|
| Description : Set current row and column of the form to values
| corresponding to the buffer position.
|
| Return Values : -
+--------------------------------------------------------------------------*/
NCURSES_INLINE static void
Adjust_Cursor_Position(FORM *form, const FIELD_CELL *pos)
{
FIELD *field;
int idx;
field = form->current;
assert(pos >= field->buf && field->dcols > 0);
idx = (int)(pos - field->buf);
#if USE_DIV_T
*((div_t *) & (form->currow)) = div(idx, field->dcols);
#else
form->currow = idx / field->dcols;
form->curcol = idx - field->cols * form->currow;
#endif
if (field->drows < form->currow)
form->currow = 0;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void Buffer_To_Window(
| const FIELD * field,
| WINDOW * win)
|
| Description : Copy the buffer to the window. If it is a multi-line
| field, the buffer is split to the lines of the
| window without any editing.
|
| Return Values : -
+--------------------------------------------------------------------------*/
static void
Buffer_To_Window(const FIELD *field, WINDOW *win)
{
int width, height;
int y, x;
int len;
int row;
FIELD_CELL *pBuffer;
assert(win && field);
getyx(win, y, x);
width = getmaxx(win);
height = getmaxy(win);
for (row = 0, pBuffer = field->buf;
row < height;
row++, pBuffer += width)
{
if ((len = (int)(After_End_Of_Data(pBuffer, width) - pBuffer)) > 0)
{
wmove(win, row, 0);
myADDNSTR(win, pBuffer, len);
}
}
wmove(win, y, x);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : void _nc_get_fieldbuffer(
| WINDOW * win,
| FIELD * field,
| FIELD_CELL * buf)
|
| Description : Copy the content of the window into the buffer.
| The multiple lines of a window are simply
| concatenated into the buffer. Pad characters in
| the window will be replaced by blanks in the buffer.
|
| Return Values : -
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+FORM_EXPORT(void)
_nc_get_fieldbuffer(FORM *form, FIELD *field, FIELD_CELL *buf)
{
int pad;
int len = 0;
FIELD_CELL *p;
int row, height;
WINDOW *win;
assert(form && field && buf);
win = form->w;
assert(win);
pad = field->pad;
p = buf;
height = getmaxy(win);
for (row = 0; (row < height) && (row < field->drows); row++)
{
wmove(win, row, 0);
len += myINNSTR(win, p + len, field->dcols);
}
p[len] = myZEROS;
/* replace visual padding character by blanks in buffer */
if (pad != C_BLANK)
{
int i;
for (i = 0; i < len; i++, p++)
{
if ((unsigned long)CharOf(*p) == ChCharOf(pad)
#if USE_WIDEC_SUPPORT
&& p->chars[1] == 0
#endif
)
*p = myBLANK;
}
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void Window_To_Buffer(
| FORM * form,
| FIELD * field)
|
| Description : Copy the content of the window into the buffer.
| The multiple lines of a window are simply
| concatenated into the buffer. Pad characters in
| the window will be replaced by blanks in the buffer.
|
| Return Values : -
+--------------------------------------------------------------------------*/
static void
Window_To_Buffer(FORM *form, FIELD *field)
{
_nc_get_fieldbuffer(form, field, field->buf);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void Synchronize_Buffer(FORM * form)
|
| Description : If there was a change, copy the content of the
| window into the buffer, so the buffer is synchronized
| with the windows content. We have to indicate that the
| buffer needs validation due to the change.
|
| Return Values : -
+--------------------------------------------------------------------------*/
NCURSES_INLINE static void
Synchronize_Buffer(FORM *form)
{
if (form->status & _WINDOW_MODIFIED)
{
ClrStatus(form, _WINDOW_MODIFIED);
SetStatus(form, _FCHECK_REQUIRED);
Window_To_Buffer(form, form->current);
wmove(form->w, form->currow, form->curcol);
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Field_Grown( FIELD *field, int amount)
|
| Description : This function is called for growable dynamic fields
| only. It has to increase the buffers and to allocate
| a new window for this field.
| This function has the side effect to set a new
| field-buffer pointer, the dcols and drows values
| as well as a new current Window for the field.
|
| Return Values : TRUE - field successfully increased
| FALSE - there was some error
+--------------------------------------------------------------------------*/
static bool
Field_Grown(FIELD *field, int amount)
{
bool result = FALSE;
if (field && Growable(field))
{
bool single_line_field = Single_Line_Field(field);
int old_buflen = Buffer_Length(field);
int new_buflen;
int old_dcols = field->dcols;
int old_drows = field->drows;
FIELD_CELL *oldbuf = field->buf;
FIELD_CELL *newbuf;
int growth;
FORM *form = field->form;
bool need_visual_update = ((form != (FORM *)0) &&
(form->status & _POSTED) &&
(form->current == field));
if (need_visual_update)
Synchronize_Buffer(form);
if (single_line_field)
{
growth = field->cols * amount;
if (field->maxgrow)
growth = Minimum(field->maxgrow - field->dcols, growth);
field->dcols += growth;
if (field->dcols == field->maxgrow)
ClrStatus(field, _MAY_GROW);
}
else
{
growth = (field->rows + field->nrow) * amount;
if (field->maxgrow)
growth = Minimum(field->maxgrow - field->drows, growth);
field->drows += growth;
if (field->drows == field->maxgrow)
ClrStatus(field, _MAY_GROW);
}
/* drows, dcols changed, so we get really the new buffer length */
new_buflen = Buffer_Length(field);
newbuf = (FIELD_CELL *)malloc(Total_Buffer_Size(field));
if (!newbuf)
{
/* restore to previous state */
field->dcols = old_dcols;
field->drows = old_drows;
if ((single_line_field && (field->dcols != field->maxgrow)) ||
(!single_line_field && (field->drows != field->maxgrow)))
SetStatus(field, _MAY_GROW);
}
else
{
/* Copy all the buffers. This is the reason why we can't just use
* realloc().
*/
int i, j;
FIELD_CELL *old_bp;
FIELD_CELL *new_bp;
result = TRUE; /* allow sharing of recovery on failure */
T((T_CREATE("fieldcell %p"), (void *)newbuf));
field->buf = newbuf;
for (i = 0; i <= field->nbuf; i++)
{
new_bp = Address_Of_Nth_Buffer(field, i);
old_bp = oldbuf + i * (1 + old_buflen);
for (j = 0; j < old_buflen; ++j)
new_bp[j] = old_bp[j];
while (j < new_buflen)
new_bp[j++] = myBLANK;
new_bp[new_buflen] = myZEROS;
}
#if USE_WIDEC_SUPPORT && NCURSES_EXT_FUNCS
if (wresize(field->working, 1, Buffer_Length(field) + 1) == ERR)
result = FALSE;
#endif
if (need_visual_update && result)
{
WINDOW *new_window = newpad(field->drows, field->dcols);
if (new_window != 0)
{
assert(form != (FORM *)0);
if (form->w)
delwin(form->w);
form->w = new_window;
Set_Field_Window_Attributes(field, form->w);
werase(form->w);
Buffer_To_Window(field, form->w);
untouchwin(form->w);
wmove(form->w, form->currow, form->curcol);
}
else
result = FALSE;
}
if (result)
{
free(oldbuf);
/* reflect changes in linked fields */
if (field != field->link)
{
FIELD *linked_field;
for (linked_field = field->link;
linked_field != field;
linked_field = linked_field->link)
{
linked_field->buf = field->buf;
linked_field->drows = field->drows;
linked_field->dcols = field->dcols;
}
}
}
else
{
/* restore old state */
field->dcols = old_dcols;
field->drows = old_drows;
field->buf = oldbuf;
if ((single_line_field &&
(field->dcols != field->maxgrow)) ||
(!single_line_field &&
(field->drows != field->maxgrow)))
SetStatus(field, _MAY_GROW);
free(newbuf);
}
}
}
return (result);
}
#ifdef NCURSES_MOUSE_VERSION
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int Field_encloses(FIELD *field, int ry, int rx)
|
| Description : Check if the given coordinates lie within the given field.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid form pointer
| E_SYSTEM_ERROR - form has no current field or
| field-window
+--------------------------------------------------------------------------*/
static int
Field_encloses(FIELD *field, int ry, int rx)
{
T((T_CALLED("Field_encloses(%p)"), (void *)field));
if (field != 0
&& field->frow <= ry
&& (field->frow + field->rows) > ry
&& field->fcol <= rx
&& (field->fcol + field->cols) > rx)
{
RETURN(E_OK);
}
RETURN(E_INVALID_FIELD);
}
#endif
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int _nc_Position_Form_Cursor(FORM * form)
|
| Description : Position the cursor in the window for the current
| field to be in sync. with the currow and curcol
| values.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid form pointer
| E_SYSTEM_ERROR - form has no current field or
| field-window
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
_nc_Position_Form_Cursor(FORM *form)
{
FIELD *field;
WINDOW *formwin;
if (!form)
return (E_BAD_ARGUMENT);
if (!form->w || !form->current)
return (E_SYSTEM_ERROR);
field = form->current;
formwin = Get_Form_Window(form);
wmove(form->w, form->currow, form->curcol);
if (Has_Invisible_Parts(field))
{
/* in this case fieldwin isn't derived from formwin, so we have
to move the cursor in formwin by hand... */
wmove(formwin,
field->frow + form->currow - form->toprow,
field->fcol + form->curcol - form->begincol);
wcursyncup(formwin);
}
else
wcursyncup(form->w);
return (E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int _nc_Refresh_Current_Field(FORM * form)
|
-| Description : Propagate the changes in the fields window to the
+| Description : Propagate the changes in the field's window to the
| window of the form.
|
| Return Values : E_OK - on success
| E_BAD_ARGUMENT - invalid form pointer
| E_SYSTEM_ERROR - general error
+--------------------------------------------------------------------------*/
static bool move_after_insert = TRUE;
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
_nc_Refresh_Current_Field(FORM *form)
{
WINDOW *formwin;
FIELD *field;
bool is_public;
T((T_CALLED("_nc_Refresh_Current_Field(%p)"), (void *)form));
if (!form)
RETURN(E_BAD_ARGUMENT);
if (!form->w || !form->current)
RETURN(E_SYSTEM_ERROR);
field = form->current;
formwin = Get_Form_Window(form);
is_public = Field_Has_Option(field, O_PUBLIC);
if (Is_Scroll_Field(field))
{
/* Again, in this case the fieldwin isn't derived from formwin,
so we have to perform a copy operation. */
if (Single_Line_Field(field))
{
/* horizontal scrolling */
if (form->curcol < form->begincol)
form->begincol = form->curcol;
else
{
if (form->curcol >= (form->begincol + field->cols))
form->begincol = form->curcol - field->cols
+ (move_after_insert ? 1 : 0);
}
if (is_public)
copywin(form->w,
formwin,
0,
form->begincol,
field->frow,
field->fcol,
field->frow,
field->cols + field->fcol - 1,
0);
}
else
{
/* A multi-line, i.e. vertical scrolling field */
int row_after_bottom, first_modified_row, first_unmodified_row;
if (field->drows > field->rows)
{
row_after_bottom = form->toprow + field->rows;
if (form->currow < form->toprow)
{
form->toprow = form->currow;
SetStatus(field, _NEWTOP);
}
if (form->currow >= row_after_bottom)
{
form->toprow = form->currow - field->rows + 1;
SetStatus(field, _NEWTOP);
}
if (field->status & _NEWTOP)
{
/* means we have to copy whole range */
first_modified_row = form->toprow;
first_unmodified_row = first_modified_row + field->rows;
ClrStatus(field, _NEWTOP);
}
else
{
/* we try to optimize : finding the range of touched
lines */
first_modified_row = form->toprow;
while (first_modified_row < row_after_bottom)
{
if (is_linetouched(form->w, first_modified_row))
break;
first_modified_row++;
}
first_unmodified_row = first_modified_row;
while (first_unmodified_row < row_after_bottom)
{
if (!is_linetouched(form->w, first_unmodified_row))
break;
first_unmodified_row++;
}
}
}
else
{
first_modified_row = form->toprow;
first_unmodified_row = first_modified_row + field->rows;
}
if (first_unmodified_row != first_modified_row && is_public)
copywin(form->w,
formwin,
first_modified_row,
0,
field->frow + first_modified_row - form->toprow,
field->fcol,
field->frow + first_unmodified_row - form->toprow - 1,
field->cols + field->fcol - 1,
0);
}
if (is_public)
wsyncup(formwin);
}
else
{
/* if the field-window is simply a derived window, i.e. contains no
* invisible parts, the whole thing is trivial
*/
if (is_public)
wsyncup(form->w);
}
untouchwin(form->w);
returnCode(_nc_Position_Form_Cursor(form));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void Perform_Justification(
| FIELD * field,
| WINDOW * win)
|
| Description : Output field with requested justification
|
| Return Values : -
+--------------------------------------------------------------------------*/
static void
Perform_Justification(FIELD *field, WINDOW *win)
{
FIELD_CELL *bp;
int len;
int col = 0;
bp = (Field_Has_Option(field, O_NO_LEFT_STRIP)
? field->buf
: Get_Start_Of_Data(field->buf, Buffer_Length(field)));
len = (int)(After_End_Of_Data(field->buf, Buffer_Length(field)) - bp);
if (len > 0)
{
assert(win && (field->drows == 1));
if (field->cols - len >= 0)
switch (field->just)
{
case JUSTIFY_LEFT:
break;
case JUSTIFY_CENTER:
col = (field->cols - len) / 2;
break;
case JUSTIFY_RIGHT:
col = field->cols - len;
break;
default:
break;
}
wmove(win, 0, col);
myADDNSTR(win, bp, len);
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void Undo_Justification(
| FIELD * field,
| WINDOW * win)
|
| Description : Display field without any justification, i.e.
| left justified
|
| Return Values : -
+--------------------------------------------------------------------------*/
static void
Undo_Justification(FIELD *field, WINDOW *win)
{
FIELD_CELL *bp;
int y, x;
int len;
getyx(win, y, x);
bp = (Field_Has_Option(field, O_NO_LEFT_STRIP)
? field->buf
: Get_Start_Of_Data(field->buf, Buffer_Length(field)));
len = (int)(After_End_Of_Data(field->buf, Buffer_Length(field)) - bp);
if (len > 0)
{
assert(win);
wmove(win, 0, 0);
myADDNSTR(win, bp, len);
}
wmove(win, y, x);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_Char(FORM *form,
| FIELD *field,
| FIELDTYPE * typ,
| int ch,
| TypeArgument *argp)
|
| Description : Perform a single character check for character ch
| according to the fieldtype instance.
|
| Return Values : TRUE - Character is valid
| FALSE - Character is invalid
+--------------------------------------------------------------------------*/
static bool
Check_Char(FORM *form,
FIELD *field,
FIELDTYPE *typ,
int ch,
TypeArgument *argp)
{
if (typ)
{
if (typ->status & _LINKED_TYPE)
{
assert(argp);
return (
Check_Char(form, field, typ->left, ch, argp->left) ||
Check_Char(form, field, typ->right, ch, argp->right));
}
else
{
#if NCURSES_INTEROP_FUNCS
if (typ->charcheck.occheck)
{
if (typ->status & _GENERIC)
return typ->charcheck.gccheck(ch, form, field, (void *)argp);
else
return typ->charcheck.occheck(ch, (void *)argp);
}
#else
if (typ->ccheck)
return typ->ccheck(ch, (void *)argp);
#endif
}
}
return (!iscntrl(UChar(ch)) ? TRUE : FALSE);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Display_Or_Erase_Field(
| FIELD * field,
| bool bEraseFlag)
|
| Description : Create a subwindow for the field and display the
| buffer contents (apply justification if required)
| or simply erase the field.
|
| Return Values : E_OK - on success
| E_SYSTEM_ERROR - some error (typical no memory)
+--------------------------------------------------------------------------*/
static int
Display_Or_Erase_Field(FIELD *field, bool bEraseFlag)
{
WINDOW *win;
WINDOW *fwin;
if (!field)
return E_SYSTEM_ERROR;
fwin = Get_Form_Window(field->form);
win = derwin(fwin,
field->rows, field->cols, field->frow, field->fcol);
if (!win)
return E_SYSTEM_ERROR;
else
{
if (Field_Has_Option(field, O_VISIBLE))
{
Set_Field_Window_Attributes(field, win);
}
else
{
(void)wattrset(win, (int)WINDOW_ATTRS(fwin));
}
werase(win);
}
if (!bEraseFlag)
{
if (Field_Has_Option(field, O_PUBLIC))
{
if (Justification_Allowed(field))
Perform_Justification(field, win);
else
Buffer_To_Window(field, win);
}
ClrStatus(field, _NEWTOP);
}
wsyncup(win);
delwin(win);
return E_OK;
}
/* Macros to preset the bEraseFlag */
#define Display_Field(field) Display_Or_Erase_Field(field,FALSE)
#define Erase_Field(field) Display_Or_Erase_Field(field,TRUE)
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Synchronize_Field(FIELD * field)
|
| Description : Synchronize the windows content with the value in
| the buffer.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid field pointer
| E_SYSTEM_ERROR - some severe basic error
+--------------------------------------------------------------------------*/
static int
Synchronize_Field(FIELD *field)
{
FORM *form;
int res = E_OK;
if (!field)
return (E_BAD_ARGUMENT);
if (((form = field->form) != (FORM *)0)
&& Field_Really_Appears(field))
{
if (field == form->current)
{
form->currow = form->curcol = form->toprow = form->begincol = 0;
werase(form->w);
if ((Field_Has_Option(field, O_PUBLIC)) && Justification_Allowed(field))
Undo_Justification(field, form->w);
else
Buffer_To_Window(field, form->w);
SetStatus(field, _NEWTOP);
res = _nc_Refresh_Current_Field(form);
}
else
res = Display_Field(field);
}
SetStatus(field, _CHANGED);
return (res);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Synchronize_Linked_Fields(FIELD * field)
|
| Description : Propagate the Synchronize_Field function to all linked
| fields. The first error that occurs in the sequence
| of updates is the return value.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid field pointer
| E_SYSTEM_ERROR - some severe basic error
+--------------------------------------------------------------------------*/
static int
Synchronize_Linked_Fields(FIELD *field)
{
FIELD *linked_field;
int res = E_OK;
int syncres;
if (!field)
return (E_BAD_ARGUMENT);
if (!field->link)
return (E_SYSTEM_ERROR);
for (linked_field = field->link;
(linked_field != field) && (linked_field != 0);
linked_field = linked_field->link)
{
if (((syncres = Synchronize_Field(linked_field)) != E_OK) &&
(res == E_OK))
res = syncres;
}
return (res);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int _nc_Synchronize_Attributes(FIELD * field)
|
-| Description : If a fields visual attributes have changed, this
+| Description : If a field's visual attributes have changed, this
| routine is called to propagate those changes to the
| screen.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid field pointer
| E_SYSTEM_ERROR - some severe basic error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
_nc_Synchronize_Attributes(FIELD *field)
{
FORM *form;
int res = E_OK;
WINDOW *formwin;
T((T_CALLED("_nc_Synchronize_Attributes(%p)"), (void *)field));
if (!field)
returnCode(E_BAD_ARGUMENT);
CHECKPOS(field->form);
if (((form = field->form) != (FORM *)0)
&& Field_Really_Appears(field))
{
if (form->current == field)
{
Synchronize_Buffer(form);
Set_Field_Window_Attributes(field, form->w);
werase(form->w);
wmove(form->w, form->currow, form->curcol);
if (Field_Has_Option(field, O_PUBLIC))
{
if (Justification_Allowed(field))
Undo_Justification(field, form->w);
else
Buffer_To_Window(field, form->w);
}
else
{
formwin = Get_Form_Window(form);
copywin(form->w, formwin,
0, 0,
field->frow, field->fcol,
field->frow + field->rows - 1,
field->fcol + field->cols - 1, 0);
wsyncup(formwin);
Buffer_To_Window(field, form->w);
SetStatus(field, _NEWTOP); /* fake refresh to paint all */
_nc_Refresh_Current_Field(form);
}
}
else
{
res = Display_Field(field);
}
}
CHECKPOS(form);
returnCode(res);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int _nc_Synchronize_Options(FIELD * field,
| Field_Options newopts)
|
-| Description : If a fields options have changed, this routine is
+| Description : If a field's options have changed, this routine is
| called to propagate these changes to the screen and
| to really change the behavior of the field.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid field pointer
| E_CURRENT - field is the current one
| E_SYSTEM_ERROR - some severe basic error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
_nc_Synchronize_Options(FIELD *field, Field_Options newopts)
{
Field_Options oldopts;
Field_Options changed_opts;
FORM *form;
int res = E_OK;
T((T_CALLED("_nc_Synchronize_Options(%p,%#x)"), (void *)field, newopts));
if (!field)
returnCode(E_BAD_ARGUMENT);
oldopts = field->opts;
changed_opts = oldopts ^ newopts;
field->opts = newopts;
form = field->form;
if (form)
{
if (form->status & _POSTED)
{
if (form->current == field)
{
field->opts = oldopts;
returnCode(E_CURRENT);
}
if (form->curpage == field->page)
{
if ((unsigned)changed_opts & O_VISIBLE)
{
if ((unsigned)newopts & O_VISIBLE)
res = Display_Field(field);
else
res = Erase_Field(field);
}
else
{
if (((unsigned)changed_opts & O_PUBLIC) &&
((unsigned)newopts & O_VISIBLE))
res = Display_Field(field);
}
}
}
}
if ((unsigned)changed_opts & O_STATIC)
{
bool single_line_field = Single_Line_Field(field);
int res2 = E_OK;
if ((unsigned)newopts & O_STATIC)
{
/* the field becomes now static */
ClrStatus(field, _MAY_GROW);
/* if actually we have no hidden columns, justification may
occur again */
if (single_line_field &&
(field->cols == field->dcols) &&
(field->just != NO_JUSTIFICATION) &&
Field_Really_Appears(field))
{
res2 = Display_Field(field);
}
}
else
{
/* field is no longer static */
if ((field->maxgrow == 0) ||
(single_line_field && (field->dcols < field->maxgrow)) ||
(!single_line_field && (field->drows < field->maxgrow)))
{
SetStatus(field, _MAY_GROW);
/* a field with justification now changes its behavior,
so we must redisplay it */
if (single_line_field &&
(field->just != NO_JUSTIFICATION) &&
Field_Really_Appears(field))
{
res2 = Display_Field(field);
}
}
}
if (res2 != E_OK)
res = res2;
}
returnCode(res);
}
/*
* Removes the focus from the current field of the form.
*/
void
_nc_Unset_Current_Field(FORM *form)
{
FIELD *field = form->current;
_nc_Refresh_Current_Field(form);
if (Field_Has_Option(field, O_PUBLIC))
{
if (field->drows > field->rows)
{
if (form->toprow == 0)
ClrStatus(field, _NEWTOP);
else
SetStatus(field, _NEWTOP);
}
else
{
if (Justification_Allowed(field))
{
Window_To_Buffer(form, field);
werase(form->w);
Perform_Justification(field, form->w);
if (Field_Has_Option(field, O_DYNAMIC_JUSTIFY) &&
(form->w->_parent == 0))
{
copywin(form->w,
Get_Form_Window(form),
0,
0,
field->frow,
field->fcol,
field->frow,
field->cols + field->fcol - 1,
0);
wsyncup(Get_Form_Window(form));
}
else
{
wsyncup(form->w);
}
}
}
}
delwin(form->w);
form->w = (WINDOW *)0;
form->current = 0;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int _nc_Set_Current_Field(FORM * form,
| FIELD * newfield)
|
| Description : Make the newfield the new current field.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid form or field pointer
| E_SYSTEM_ERROR - some severe basic error
| E_NOT_CONNECTED - no fields are connected to the form
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
_nc_Set_Current_Field(FORM *form, FIELD *newfield)
{
FIELD *field;
WINDOW *new_window;
T((T_CALLED("_nc_Set_Current_Field(%p,%p)"), (void *)form, (void *)newfield));
if (!form || !newfield || (newfield->form != form))
returnCode(E_BAD_ARGUMENT);
if ((form->status & _IN_DRIVER))
returnCode(E_BAD_STATE);
if (!(form->field))
returnCode(E_NOT_CONNECTED);
field = form->current;
if ((field != newfield) ||
!(form->status & _POSTED))
{
if (field && (form->w) &&
(Field_Has_Option(field, O_VISIBLE)) &&
(field->form->curpage == field->page))
_nc_Unset_Current_Field(form);
field = newfield;
if (Has_Invisible_Parts(field))
new_window = newpad(field->drows, field->dcols);
else
new_window = derwin(Get_Form_Window(form),
field->rows, field->cols, field->frow, field->fcol);
if (!new_window)
returnCode(E_SYSTEM_ERROR);
form->current = field;
if (form->w)
delwin(form->w);
form->w = new_window;
ClrStatus(form, _WINDOW_MODIFIED);
Set_Field_Window_Attributes(field, form->w);
if (Has_Invisible_Parts(field))
{
werase(form->w);
Buffer_To_Window(field, form->w);
}
else
{
if (Justification_Allowed(field))
{
werase(form->w);
Undo_Justification(field, form->w);
wsyncup(form->w);
}
}
untouchwin(form->w);
}
form->currow = form->curcol = form->toprow = form->begincol = 0;
returnCode(E_OK);
}
/*----------------------------------------------------------------------------
Intra-Field Navigation routines
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_Next_Character(FORM * form)
|
| Description : Move to the next character in the field. In a multi-line
| field this wraps at the end of the line.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - at the rightmost position
+--------------------------------------------------------------------------*/
static int
IFN_Next_Character(FORM *form)
{
FIELD *field = form->current;
int step = myWCWIDTH(form->w, form->currow, form->curcol);
T((T_CALLED("IFN_Next_Character(%p)"), (void *)form));
if ((form->curcol += step) == field->dcols)
{
if ((++(form->currow)) == field->drows)
{
#if GROW_IF_NAVIGATE
if (!Single_Line_Field(field) && Field_Grown(field, 1))
{
form->curcol = 0;
returnCode(E_OK);
}
#endif
form->currow--;
#if GROW_IF_NAVIGATE
if (Single_Line_Field(field) && Field_Grown(field, 1))
returnCode(E_OK);
#endif
form->curcol -= step;
returnCode(E_REQUEST_DENIED);
}
form->curcol = 0;
}
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_Previous_Character(FORM * form)
|
| Description : Move to the previous character in the field. In a
| multi-line field this wraps and the beginning of the
| line.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - at the leftmost position
+--------------------------------------------------------------------------*/
static int
IFN_Previous_Character(FORM *form)
{
int amount = myWCWIDTH(form->w, form->currow, form->curcol - 1);
int oldcol = form->curcol;
T((T_CALLED("IFN_Previous_Character(%p)"), (void *)form));
if ((form->curcol -= amount) < 0)
{
if ((--(form->currow)) < 0)
{
form->currow++;
form->curcol = oldcol;
returnCode(E_REQUEST_DENIED);
}
form->curcol = form->current->dcols - 1;
}
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_Next_Line(FORM * form)
|
| Description : Move to the beginning of the next line in the field
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - at the last line
+--------------------------------------------------------------------------*/
static int
IFN_Next_Line(FORM *form)
{
FIELD *field = form->current;
T((T_CALLED("IFN_Next_Line(%p)"), (void *)form));
if ((++(form->currow)) == field->drows)
{
#if GROW_IF_NAVIGATE
if (!Single_Line_Field(field) && Field_Grown(field, 1))
returnCode(E_OK);
#endif
form->currow--;
returnCode(E_REQUEST_DENIED);
}
form->curcol = 0;
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_Previous_Line(FORM * form)
|
| Description : Move to the beginning of the previous line in the field
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - at the first line
+--------------------------------------------------------------------------*/
static int
IFN_Previous_Line(FORM *form)
{
T((T_CALLED("IFN_Previous_Line(%p)"), (void *)form));
if ((--(form->currow)) < 0)
{
form->currow++;
returnCode(E_REQUEST_DENIED);
}
form->curcol = 0;
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_Next_Word(FORM * form)
|
| Description : Move to the beginning of the next word in the field.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - there is no next word
+--------------------------------------------------------------------------*/
static int
IFN_Next_Word(FORM *form)
{
FIELD *field = form->current;
FIELD_CELL *bp = Address_Of_Current_Position_In_Buffer(form);
FIELD_CELL *s;
FIELD_CELL *t;
T((T_CALLED("IFN_Next_Word(%p)"), (void *)form));
/* We really need access to the data, so we have to synchronize */
Synchronize_Buffer(form);
/* Go to the first whitespace after the current position (including
current position). This is then the starting point to look for the
next non-blank data */
s = Get_First_Whitespace_Character(bp, Buffer_Length(field) -
(int)(bp - field->buf));
/* Find the start of the next word */
t = Get_Start_Of_Data(s, Buffer_Length(field) -
(int)(s - field->buf));
#if !FRIENDLY_PREV_NEXT_WORD
if (s == t)
returnCode(E_REQUEST_DENIED);
else
#endif
{
Adjust_Cursor_Position(form, t);
returnCode(E_OK);
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_Previous_Word(FORM * form)
|
| Description : Move to the beginning of the previous word in the field.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - there is no previous word
+--------------------------------------------------------------------------*/
static int
IFN_Previous_Word(FORM *form)
{
FIELD *field = form->current;
FIELD_CELL *bp = Address_Of_Current_Position_In_Buffer(form);
FIELD_CELL *s;
FIELD_CELL *t;
bool again = FALSE;
T((T_CALLED("IFN_Previous_Word(%p)"), (void *)form));
/* We really need access to the data, so we have to synchronize */
Synchronize_Buffer(form);
s = After_End_Of_Data(field->buf, (int)(bp - field->buf));
/* s points now right after the last non-blank in the buffer before bp.
If bp was in a word, s equals bp. In this case we must find the last
whitespace in the buffer before bp and repeat the game to really find
the previous word! */
if (s == bp)
again = TRUE;
/* And next call now goes backward to look for the last whitespace
before that, pointing right after this, so it points to the begin
of the previous word.
*/
t = After_Last_Whitespace_Character(field->buf, (int)(s - field->buf));
#if !FRIENDLY_PREV_NEXT_WORD
if (s == t)
returnCode(E_REQUEST_DENIED);
#endif
if (again)
{
/* and do it again, replacing bp by t */
s = After_End_Of_Data(field->buf, (int)(t - field->buf));
t = After_Last_Whitespace_Character(field->buf, (int)(s - field->buf));
#if !FRIENDLY_PREV_NEXT_WORD
if (s == t)
returnCode(E_REQUEST_DENIED);
#endif
}
Adjust_Cursor_Position(form, t);
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_Beginning_Of_Field(FORM * form)
|
| Description : Place the cursor at the first non-pad character in
| the field.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
static int
IFN_Beginning_Of_Field(FORM *form)
{
FIELD *field = form->current;
T((T_CALLED("IFN_Beginning_Of_Field(%p)"), (void *)form));
Synchronize_Buffer(form);
Adjust_Cursor_Position(form,
Get_Start_Of_Data(field->buf, Buffer_Length(field)));
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_End_Of_Field(FORM * form)
|
| Description : Place the cursor after the last non-pad character in
| the field. If the field occupies the last position in
| the buffer, the cursor is positioned on the last
| character.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
static int
IFN_End_Of_Field(FORM *form)
{
FIELD *field = form->current;
FIELD_CELL *pos;
T((T_CALLED("IFN_End_Of_Field(%p)"), (void *)form));
Synchronize_Buffer(form);
pos = After_End_Of_Data(field->buf, Buffer_Length(field));
if (pos == (field->buf + Buffer_Length(field)))
pos--;
Adjust_Cursor_Position(form, pos);
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_Beginning_Of_Line(FORM * form)
|
| Description : Place the cursor on the first non-pad character in
| the current line of the field.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
static int
IFN_Beginning_Of_Line(FORM *form)
{
FIELD *field = form->current;
T((T_CALLED("IFN_Beginning_Of_Line(%p)"), (void *)form));
Synchronize_Buffer(form);
Adjust_Cursor_Position(form,
Get_Start_Of_Data(Address_Of_Current_Row_In_Buffer(form),
field->dcols));
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_End_Of_Line(FORM * form)
|
| Description : Place the cursor after the last non-pad character in the
| current line of the field. If the field occupies the
| last column in the line, the cursor is positioned on the
| last character of the line.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
static int
IFN_End_Of_Line(FORM *form)
{
FIELD *field = form->current;
FIELD_CELL *pos;
FIELD_CELL *bp;
T((T_CALLED("IFN_End_Of_Line(%p)"), (void *)form));
Synchronize_Buffer(form);
bp = Address_Of_Current_Row_In_Buffer(form);
pos = After_End_Of_Data(bp, field->dcols);
if (pos == (bp + field->dcols))
pos--;
Adjust_Cursor_Position(form, pos);
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_Left_Character(FORM * form)
|
| Description : Move one character to the left in the current line.
| This doesn't cycle.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - already in first column
+--------------------------------------------------------------------------*/
static int
IFN_Left_Character(FORM *form)
{
int amount = myWCWIDTH(form->w, form->currow, form->curcol - 1);
int oldcol = form->curcol;
T((T_CALLED("IFN_Left_Character(%p)"), (void *)form));
if ((form->curcol -= amount) < 0)
{
form->curcol = oldcol;
returnCode(E_REQUEST_DENIED);
}
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_Right_Character(FORM * form)
|
| Description : Move one character to the right in the current line.
| This doesn't cycle.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - already in last column
+--------------------------------------------------------------------------*/
static int
IFN_Right_Character(FORM *form)
{
int amount = myWCWIDTH(form->w, form->currow, form->curcol);
int oldcol = form->curcol;
T((T_CALLED("IFN_Right_Character(%p)"), (void *)form));
if ((form->curcol += amount) >= form->current->dcols)
{
#if GROW_IF_NAVIGATE
FIELD *field = form->current;
if (Single_Line_Field(field) && Field_Grown(field, 1))
returnCode(E_OK);
#endif
form->curcol = oldcol;
returnCode(E_REQUEST_DENIED);
}
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_Up_Character(FORM * form)
|
| Description : Move one line up. This doesn't cycle through the lines
| of the field.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - already in last column
+--------------------------------------------------------------------------*/
static int
IFN_Up_Character(FORM *form)
{
T((T_CALLED("IFN_Up_Character(%p)"), (void *)form));
if ((--(form->currow)) < 0)
{
form->currow++;
returnCode(E_REQUEST_DENIED);
}
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int IFN_Down_Character(FORM * form)
|
| Description : Move one line down. This doesn't cycle through the
| lines of the field.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - already in last column
+--------------------------------------------------------------------------*/
static int
IFN_Down_Character(FORM *form)
{
FIELD *field = form->current;
T((T_CALLED("IFN_Down_Character(%p)"), (void *)form));
if ((++(form->currow)) == field->drows)
{
#if GROW_IF_NAVIGATE
if (!Single_Line_Field(field) && Field_Grown(field, 1))
returnCode(E_OK);
#endif
--(form->currow);
returnCode(E_REQUEST_DENIED);
}
returnCode(E_OK);
}
/*----------------------------------------------------------------------------
END of Intra-Field Navigation routines
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Vertical scrolling helper routines
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int VSC_Generic(FORM *form, int nlines)
|
| Description : Scroll multi-line field forward (nlines>0) or
| backward (nlines<0) this many lines.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - can't scroll
+--------------------------------------------------------------------------*/
static int
VSC_Generic(FORM *form, int nlines)
{
FIELD *field = form->current;
int res = E_REQUEST_DENIED;
int rows_to_go = (nlines > 0 ? nlines : -nlines);
if (nlines > 0)
{
if ((rows_to_go + form->toprow) > (field->drows - field->rows))
rows_to_go = (field->drows - field->rows - form->toprow);
if (rows_to_go > 0)
{
form->currow += rows_to_go;
form->toprow += rows_to_go;
res = E_OK;
}
}
else
{
if (rows_to_go > form->toprow)
rows_to_go = form->toprow;
if (rows_to_go > 0)
{
form->currow -= rows_to_go;
form->toprow -= rows_to_go;
res = E_OK;
}
}
return (res);
}
/*----------------------------------------------------------------------------
End of Vertical scrolling helper routines
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Vertical scrolling routines
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Vertical_Scrolling(
| int (* const fct) (FORM *),
| FORM * form)
|
| Description : Performs the generic vertical scrolling routines.
| This has to check for a multi-line field and to set
| the _NEWTOP flag if scrolling really occurred.
|
| Return Values : Propagated error code from low-level driver calls
+--------------------------------------------------------------------------*/
static int
Vertical_Scrolling(int (*const fct) (FORM *), FORM *form)
{
int res = E_REQUEST_DENIED;
if (!Single_Line_Field(form->current))
{
res = fct(form);
if (res == E_OK)
SetStatus(form->current, _NEWTOP);
}
return (res);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int VSC_Scroll_Line_Forward(FORM * form)
|
| Description : Scroll multi-line field forward a line
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - no data ahead
+--------------------------------------------------------------------------*/
static int
VSC_Scroll_Line_Forward(FORM *form)
{
T((T_CALLED("VSC_Scroll_Line_Forward(%p)"), (void *)form));
returnCode(VSC_Generic(form, 1));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int VSC_Scroll_Line_Backward(FORM * form)
|
| Description : Scroll multi-line field backward a line
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - no data behind
+--------------------------------------------------------------------------*/
static int
VSC_Scroll_Line_Backward(FORM *form)
{
T((T_CALLED("VSC_Scroll_Line_Backward(%p)"), (void *)form));
returnCode(VSC_Generic(form, -1));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int VSC_Scroll_Page_Forward(FORM * form)
|
| Description : Scroll a multi-line field forward a page
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - no data ahead
+--------------------------------------------------------------------------*/
static int
VSC_Scroll_Page_Forward(FORM *form)
{
T((T_CALLED("VSC_Scroll_Page_Forward(%p)"), (void *)form));
returnCode(VSC_Generic(form, form->current->rows));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int VSC_Scroll_Half_Page_Forward(FORM * form)
|
| Description : Scroll a multi-line field forward half a page
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - no data ahead
+--------------------------------------------------------------------------*/
static int
VSC_Scroll_Half_Page_Forward(FORM *form)
{
T((T_CALLED("VSC_Scroll_Half_Page_Forward(%p)"), (void *)form));
returnCode(VSC_Generic(form, (form->current->rows + 1) / 2));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int VSC_Scroll_Page_Backward(FORM * form)
|
| Description : Scroll a multi-line field backward a page
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - no data behind
+--------------------------------------------------------------------------*/
static int
VSC_Scroll_Page_Backward(FORM *form)
{
T((T_CALLED("VSC_Scroll_Page_Backward(%p)"), (void *)form));
returnCode(VSC_Generic(form, -(form->current->rows)));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int VSC_Scroll_Half_Page_Backward(FORM * form)
|
| Description : Scroll a multi-line field backward half a page
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - no data behind
+--------------------------------------------------------------------------*/
static int
VSC_Scroll_Half_Page_Backward(FORM *form)
{
T((T_CALLED("VSC_Scroll_Half_Page_Backward(%p)"), (void *)form));
returnCode(VSC_Generic(form, -((form->current->rows + 1) / 2)));
}
/*----------------------------------------------------------------------------
End of Vertical scrolling routines
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Horizontal scrolling helper routines
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int HSC_Generic(FORM *form, int ncolumns)
|
| Description : Scroll single-line field forward (ncolumns>0) or
| backward (ncolumns<0) this many columns.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - can't scroll
+--------------------------------------------------------------------------*/
static int
HSC_Generic(FORM *form, int ncolumns)
{
FIELD *field = form->current;
int res = E_REQUEST_DENIED;
int cols_to_go = (ncolumns > 0 ? ncolumns : -ncolumns);
if (ncolumns > 0)
{
if ((cols_to_go + form->begincol) > (field->dcols - field->cols))
cols_to_go = field->dcols - field->cols - form->begincol;
if (cols_to_go > 0)
{
form->curcol += cols_to_go;
form->begincol += cols_to_go;
res = E_OK;
}
}
else
{
if (cols_to_go > form->begincol)
cols_to_go = form->begincol;
if (cols_to_go > 0)
{
form->curcol -= cols_to_go;
form->begincol -= cols_to_go;
res = E_OK;
}
}
return (res);
}
/*----------------------------------------------------------------------------
End of Horizontal scrolling helper routines
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Horizontal scrolling routines
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Horizontal_Scrolling(
| int (* const fct) (FORM *),
| FORM * form)
|
| Description : Performs the generic horizontal scrolling routines.
| This has to check for a single-line field.
|
| Return Values : Propagated error code from low-level driver calls
+--------------------------------------------------------------------------*/
static int
Horizontal_Scrolling(int (*const fct) (FORM *), FORM *form)
{
if (Single_Line_Field(form->current))
return fct(form);
else
return (E_REQUEST_DENIED);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int HSC_Scroll_Char_Forward(FORM * form)
|
| Description : Scroll single-line field forward a character
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - no data ahead
+--------------------------------------------------------------------------*/
static int
HSC_Scroll_Char_Forward(FORM *form)
{
T((T_CALLED("HSC_Scroll_Char_Forward(%p)"), (void *)form));
returnCode(HSC_Generic(form, 1));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int HSC_Scroll_Char_Backward(FORM * form)
|
| Description : Scroll single-line field backward a character
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - no data behind
+--------------------------------------------------------------------------*/
static int
HSC_Scroll_Char_Backward(FORM *form)
{
T((T_CALLED("HSC_Scroll_Char_Backward(%p)"), (void *)form));
returnCode(HSC_Generic(form, -1));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int HSC_Horizontal_Line_Forward(FORM* form)
|
| Description : Scroll single-line field forward a line
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - no data ahead
+--------------------------------------------------------------------------*/
static int
HSC_Horizontal_Line_Forward(FORM *form)
{
T((T_CALLED("HSC_Horizontal_Line_Forward(%p)"), (void *)form));
returnCode(HSC_Generic(form, form->current->cols));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int HSC_Horizontal_Half_Line_Forward(FORM* form)
|
| Description : Scroll single-line field forward half a line
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - no data ahead
+--------------------------------------------------------------------------*/
static int
HSC_Horizontal_Half_Line_Forward(FORM *form)
{
T((T_CALLED("HSC_Horizontal_Half_Line_Forward(%p)"), (void *)form));
returnCode(HSC_Generic(form, (form->current->cols + 1) / 2));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int HSC_Horizontal_Line_Backward(FORM* form)
|
| Description : Scroll single-line field backward a line
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - no data behind
+--------------------------------------------------------------------------*/
static int
HSC_Horizontal_Line_Backward(FORM *form)
{
T((T_CALLED("HSC_Horizontal_Line_Backward(%p)"), (void *)form));
returnCode(HSC_Generic(form, -(form->current->cols)));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int HSC_Horizontal_Half_Line_Backward(FORM* form)
|
| Description : Scroll single-line field backward half a line
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - no data behind
+--------------------------------------------------------------------------*/
static int
HSC_Horizontal_Half_Line_Backward(FORM *form)
{
T((T_CALLED("HSC_Horizontal_Half_Line_Backward(%p)"), (void *)form));
returnCode(HSC_Generic(form, -((form->current->cols + 1) / 2)));
}
/*----------------------------------------------------------------------------
End of Horizontal scrolling routines
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Helper routines for Field Editing
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Is_There_Room_For_A_Line(FORM * form)
|
| Description : Check whether or not there is enough room in the
| buffer to enter a whole line.
|
| Return Values : TRUE - there is enough space
| FALSE - there is not enough space
+--------------------------------------------------------------------------*/
NCURSES_INLINE static bool
Is_There_Room_For_A_Line(FORM *form)
{
FIELD *field = form->current;
FIELD_CELL *begin_of_last_line, *s;
Synchronize_Buffer(form);
begin_of_last_line = Address_Of_Row_In_Buffer(field, (field->drows - 1));
s = After_End_Of_Data(begin_of_last_line, field->dcols);
return ((s == begin_of_last_line) ? TRUE : FALSE);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Is_There_Room_For_A_Char_In_Line(FORM * form)
|
| Description : Checks whether or not there is room for a new character
| in the current line.
|
| Return Values : TRUE - there is room
| FALSE - there is not enough room (line full)
+--------------------------------------------------------------------------*/
NCURSES_INLINE static bool
Is_There_Room_For_A_Char_In_Line(FORM *form)
{
int last_char_in_line;
wmove(form->w, form->currow, form->current->dcols - 1);
last_char_in_line = (int)(winch(form->w) & A_CHARTEXT);
wmove(form->w, form->currow, form->curcol);
return (((last_char_in_line == form->current->pad) ||
is_blank(last_char_in_line)) ? TRUE : FALSE);
}
#define There_Is_No_Room_For_A_Char_In_Line(f) \
!Is_There_Room_For_A_Char_In_Line(f)
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Insert_String(
| FORM * form,
| int row,
| char *txt,
| int len )
|
| Description : Insert the 'len' characters beginning at pointer 'txt'
| into the 'row' of the 'form'. The insertion occurs
| on the beginning of the row, all other characters are
| moved to the right. After the text a pad character will
| be inserted to separate the text from the rest. If
| necessary the insertion moves characters on the next
| line to make place for the requested insertion string.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED -
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
static int
Insert_String(FORM *form, int row, FIELD_CELL *txt, int len)
{
FIELD *field = form->current;
FIELD_CELL *bp = Address_Of_Row_In_Buffer(field, row);
int datalen = (int)(After_End_Of_Data(bp, field->dcols) - bp);
int freelen = field->dcols - datalen;
int requiredlen = len + 1;
FIELD_CELL *split;
int result = E_REQUEST_DENIED;
if (freelen >= requiredlen)
{
wmove(form->w, row, 0);
myINSNSTR(form->w, txt, len);
wmove(form->w, row, len);
myINSNSTR(form->w, &myBLANK, 1);
return E_OK;
}
else
{
/* we have to move characters on the next line. If we are on the
last line this may work, if the field is growable */
if ((row == (field->drows - 1)) && Growable(field))
{
if (!Field_Grown(field, 1))
return (E_SYSTEM_ERROR);
/* !!!Side-Effect : might be changed due to growth!!! */
bp = Address_Of_Row_In_Buffer(field, row);
}
if (row < (field->drows - 1))
{
split =
After_Last_Whitespace_Character(bp,
(int)(Get_Start_Of_Data(bp
+ field->dcols
- requiredlen,
requiredlen)
- bp));
/* split points now to the first character of the portion of the
line that must be moved to the next line */
datalen = (int)(split - bp); /* + freelen has to stay on this line */
freelen = field->dcols - (datalen + freelen); /* for the next line */
if ((result = Insert_String(form, row + 1, split, freelen)) == E_OK)
{
wmove(form->w, row, datalen);
wclrtoeol(form->w);
wmove(form->w, row, 0);
myINSNSTR(form->w, txt, len);
wmove(form->w, row, len);
myINSNSTR(form->w, &myBLANK, 1);
return E_OK;
}
}
return (result);
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Wrapping_Not_Necessary_Or_Wrapping_Ok(
| FORM * form)
|
| Description : If a character has been entered into a field, it may
| be that wrapping has to occur. This routine checks
| whether or not wrapping is required and if so, performs
| the wrapping.
|
| Return Values : E_OK - no wrapping required or wrapping
| was successful
| E_REQUEST_DENIED -
| E_SYSTEM_ERROR - some system error
+--------------------------------------------------------------------------*/
static int
Wrapping_Not_Necessary_Or_Wrapping_Ok(FORM *form)
{
FIELD *field = form->current;
int result = E_REQUEST_DENIED;
bool Last_Row = ((field->drows - 1) == form->currow);
if ((Field_Has_Option(field, O_WRAP)) && /* wrapping wanted */
(!Single_Line_Field(field)) && /* must be multi-line */
(There_Is_No_Room_For_A_Char_In_Line(form)) && /* line is full */
(!Last_Row || Growable(field))) /* there are more lines */
{
FIELD_CELL *bp;
FIELD_CELL *split;
int chars_to_be_wrapped;
int chars_to_remain_on_line;
if (Last_Row)
{
/* the above logic already ensures, that in this case the field
is growable */
if (!Field_Grown(field, 1))
return E_SYSTEM_ERROR;
}
bp = Address_Of_Current_Row_In_Buffer(form);
Window_To_Buffer(form, field);
split = After_Last_Whitespace_Character(bp, field->dcols);
/* split points to the first character of the sequence to be brought
on the next line */
chars_to_remain_on_line = (int)(split - bp);
chars_to_be_wrapped = field->dcols - chars_to_remain_on_line;
if (chars_to_remain_on_line > 0)
{
if ((result = Insert_String(form, form->currow + 1, split,
chars_to_be_wrapped)) == E_OK)
{
wmove(form->w, form->currow, chars_to_remain_on_line);
wclrtoeol(form->w);
if (form->curcol >= chars_to_remain_on_line)
{
form->currow++;
form->curcol -= chars_to_remain_on_line;
}
return E_OK;
}
}
else
return E_OK;
if (result != E_OK)
{
DeleteChar(form);
Window_To_Buffer(form, field);
result = E_REQUEST_DENIED;
}
}
else
result = E_OK; /* wrapping was not necessary */
return (result);
}
/*----------------------------------------------------------------------------
Field Editing routines
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Field_Editing(
| int (* const fct) (FORM *),
| FORM * form)
|
| Description : Generic routine for field editing requests. The driver
| routines are only called for editable fields, the
| _WINDOW_MODIFIED flag is set if editing occurred.
| This is somewhat special due to the overload semantics
| of the NEW_LINE and DEL_PREV requests.
|
| Return Values : Error code from low level drivers.
+--------------------------------------------------------------------------*/
static int
Field_Editing(int (*const fct) (FORM *), FORM *form)
{
int res = E_REQUEST_DENIED;
/* We have to deal here with the specific case of the overloaded
behavior of New_Line and Delete_Previous requests.
They may end up in navigational requests if we are on the first
character in a field. But navigation is also allowed on non-
editable fields.
*/
if ((fct == FE_Delete_Previous) &&
((unsigned)form->opts & O_BS_OVERLOAD) &&
First_Position_In_Current_Field(form))
{
res = Inter_Field_Navigation(FN_Previous_Field, form);
}
else
{
if (fct == FE_New_Line)
{
if (((unsigned)form->opts & O_NL_OVERLOAD) &&
First_Position_In_Current_Field(form))
{
res = Inter_Field_Navigation(FN_Next_Field, form);
}
else
/* FE_New_Line deals itself with the _WINDOW_MODIFIED flag */
res = fct(form);
}
else
{
/* From now on, everything must be editable */
if ((unsigned)form->current->opts & O_EDIT)
{
res = fct(form);
if (res == E_OK)
SetStatus(form, _WINDOW_MODIFIED);
}
}
}
return res;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FE_New_Line(FORM * form)
|
| Description : Perform a new line request. This is rather complex
| compared to other routines in this code due to the
| rather difficult to understand description in the
| manuals.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - new line not allowed
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
static int
FE_New_Line(FORM *form)
{
FIELD *field = form->current;
FIELD_CELL *bp, *t;
bool Last_Row = ((field->drows - 1) == form->currow);
T((T_CALLED("FE_New_Line(%p)"), (void *)form));
if (form->status & _OVLMODE)
{
if (Last_Row &&
(!(Growable(field) && !Single_Line_Field(field))))
{
if (!((unsigned)form->opts & O_NL_OVERLOAD))
returnCode(E_REQUEST_DENIED);
wmove(form->w, form->currow, form->curcol);
wclrtoeol(form->w);
/* we have to set this here, although it is also
handled in the generic routine. The reason is,
that FN_Next_Field may fail, but the form is
definitively changed */
SetStatus(form, _WINDOW_MODIFIED);
returnCode(Inter_Field_Navigation(FN_Next_Field, form));
}
else
{
if (Last_Row && !Field_Grown(field, 1))
{
/* N.B.: due to the logic in the 'if', LastRow==TRUE
means here that the field is growable and not
a single-line field */
returnCode(E_SYSTEM_ERROR);
}
wmove(form->w, form->currow, form->curcol);
wclrtoeol(form->w);
form->currow++;
form->curcol = 0;
SetStatus(form, _WINDOW_MODIFIED);
returnCode(E_OK);
}
}
else
{
/* Insert Mode */
if (Last_Row &&
!(Growable(field) && !Single_Line_Field(field)))
{
if (!((unsigned)form->opts & O_NL_OVERLOAD))
returnCode(E_REQUEST_DENIED);
returnCode(Inter_Field_Navigation(FN_Next_Field, form));
}
else
{
bool May_Do_It = !Last_Row && Is_There_Room_For_A_Line(form);
if (!(May_Do_It || Growable(field)))
returnCode(E_REQUEST_DENIED);
if (!May_Do_It && !Field_Grown(field, 1))
returnCode(E_SYSTEM_ERROR);
bp = Address_Of_Current_Position_In_Buffer(form);
t = After_End_Of_Data(bp, field->dcols - form->curcol);
wmove(form->w, form->currow, form->curcol);
wclrtoeol(form->w);
form->currow++;
form->curcol = 0;
wmove(form->w, form->currow, form->curcol);
winsertln(form->w);
myADDNSTR(form->w, bp, (int)(t - bp));
SetStatus(form, _WINDOW_MODIFIED);
returnCode(E_OK);
}
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FE_Insert_Character(FORM * form)
|
| Description : Insert blank character at the cursor position
|
| Return Values : E_OK
| E_REQUEST_DENIED
+--------------------------------------------------------------------------*/
static int
FE_Insert_Character(FORM *form)
{
FIELD *field = form->current;
int result = E_REQUEST_DENIED;
T((T_CALLED("FE_Insert_Character(%p)"), (void *)form));
if (Check_Char(form, field, field->type, (int)C_BLANK,
(TypeArgument *)(field->arg)))
{
bool There_Is_Room = Is_There_Room_For_A_Char_In_Line(form);
if (There_Is_Room ||
((Single_Line_Field(field) && Growable(field))))
{
if (!There_Is_Room && !Field_Grown(field, 1))
result = E_SYSTEM_ERROR;
else
{
winsch(form->w, (chtype)C_BLANK);
result = Wrapping_Not_Necessary_Or_Wrapping_Ok(form);
}
}
}
returnCode(result);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FE_Insert_Line(FORM * form)
|
| Description : Insert a blank line at the cursor position
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - line can not be inserted
+--------------------------------------------------------------------------*/
static int
FE_Insert_Line(FORM *form)
{
FIELD *field = form->current;
int result = E_REQUEST_DENIED;
T((T_CALLED("FE_Insert_Line(%p)"), (void *)form));
if (Check_Char(form, field,
field->type, (int)C_BLANK, (TypeArgument *)(field->arg)))
{
bool Maybe_Done = (form->currow != (field->drows - 1)) &&
Is_There_Room_For_A_Line(form);
if (!Single_Line_Field(field) &&
(Maybe_Done || Growable(field)))
{
if (!Maybe_Done && !Field_Grown(field, 1))
result = E_SYSTEM_ERROR;
else
{
form->curcol = 0;
winsertln(form->w);
result = E_OK;
}
}
}
returnCode(result);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FE_Delete_Character(FORM * form)
|
| Description : Delete character at the cursor position
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
static int
FE_Delete_Character(FORM *form)
{
T((T_CALLED("FE_Delete_Character(%p)"), (void *)form));
DeleteChar(form);
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FE_Delete_Previous(FORM * form)
|
| Description : Delete character before cursor. Again this is a rather
| difficult piece compared to others due to the overloading
| semantics of backspace.
| N.B.: The case of overloaded BS on first field position
| is already handled in the generic routine.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - Character can't be deleted
+--------------------------------------------------------------------------*/
static int
FE_Delete_Previous(FORM *form)
{
FIELD *field = form->current;
T((T_CALLED("FE_Delete_Previous(%p)"), (void *)form));
if (First_Position_In_Current_Field(form))
returnCode(E_REQUEST_DENIED);
if ((--(form->curcol)) < 0)
{
FIELD_CELL *this_line, *prev_line, *prev_end, *this_end;
int this_row = form->currow;
form->curcol++;
if (form->status & _OVLMODE)
returnCode(E_REQUEST_DENIED);
prev_line = Address_Of_Row_In_Buffer(field, (form->currow - 1));
this_line = Address_Of_Row_In_Buffer(field, (form->currow));
Synchronize_Buffer(form);
prev_end = After_End_Of_Data(prev_line, field->dcols);
this_end = After_End_Of_Data(this_line, field->dcols);
if ((int)(this_end - this_line) >
(field->cols - (int)(prev_end - prev_line)))
returnCode(E_REQUEST_DENIED);
wmove(form->w, form->currow, form->curcol);
wdeleteln(form->w);
Adjust_Cursor_Position(form, prev_end);
/*
* If we did not really move to the previous line, help the user a
* little. It is however a little inconsistent. Normally, when
* backspacing around the point where text wraps to a new line in a
* multi-line form, we absorb one keystroke for the wrapping point. That
* is consistent with SVr4 forms. However, SVr4 does not allow typing
* into the last column of the field, and requires the user to enter a
* newline to move to the next line. Therefore it can consistently eat
* that keystroke. Since ncurses allows the last column, it wraps
* automatically (given the proper options). But we cannot eat the
* keystroke to back over the wrapping point, since that would put the
* cursor past the end of the form field. In this case, just delete the
* character at the end of the field.
*/
if (form->currow == this_row && this_row > 0)
{
form->currow -= 1;
form->curcol = field->dcols - 1;
DeleteChar(form);
}
else
{
wmove(form->w, form->currow, form->curcol);
myADDNSTR(form->w, this_line, (int)(this_end - this_line));
}
}
else
{
DeleteChar(form);
}
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FE_Delete_Line(FORM * form)
|
| Description : Delete line at cursor position.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
static int
FE_Delete_Line(FORM *form)
{
T((T_CALLED("FE_Delete_Line(%p)"), (void *)form));
form->curcol = 0;
wdeleteln(form->w);
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FE_Delete_Word(FORM * form)
|
| Description : Delete word at cursor position
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - failure
+--------------------------------------------------------------------------*/
static int
FE_Delete_Word(FORM *form)
{
FIELD *field = form->current;
FIELD_CELL *bp = Address_Of_Current_Row_In_Buffer(form);
FIELD_CELL *ep = bp + field->dcols;
FIELD_CELL *cp = bp + form->curcol;
FIELD_CELL *s;
T((T_CALLED("FE_Delete_Word(%p)"), (void *)form));
Synchronize_Buffer(form);
if (ISBLANK(*cp))
returnCode(E_REQUEST_DENIED); /* not in word */
/* move cursor to begin of word and erase to end of screen-line */
Adjust_Cursor_Position(form,
After_Last_Whitespace_Character(bp, form->curcol));
wmove(form->w, form->currow, form->curcol);
wclrtoeol(form->w);
/* skip over word in buffer */
s = Get_First_Whitespace_Character(cp, (int)(ep - cp));
/* to begin of next word */
s = Get_Start_Of_Data(s, (int)(ep - s));
if ((s != cp) && !ISBLANK(*s))
{
/* copy remaining line to window */
myADDNSTR(form->w, s, (int)(s - After_End_Of_Data(s, (int)(ep - s))));
}
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FE_Clear_To_End_Of_Line(FORM * form)
|
| Description : Clear to end of current line.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
static int
FE_Clear_To_End_Of_Line(FORM *form)
{
T((T_CALLED("FE_Clear_To_End_Of_Line(%p)"), (void *)form));
wmove(form->w, form->currow, form->curcol);
wclrtoeol(form->w);
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FE_Clear_To_End_Of_Field(FORM * form)
|
| Description : Clear to end of field.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
static int
FE_Clear_To_End_Of_Field(FORM *form)
{
T((T_CALLED("FE_Clear_To_End_Of_Field(%p)"), (void *)form));
wmove(form->w, form->currow, form->curcol);
wclrtobot(form->w);
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FE_Clear_Field(FORM * form)
|
| Description : Clear entire field.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
static int
FE_Clear_Field(FORM *form)
{
T((T_CALLED("FE_Clear_Field(%p)"), (void *)form));
form->currow = form->curcol = 0;
werase(form->w);
returnCode(E_OK);
}
/*----------------------------------------------------------------------------
END of Field Editing routines
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Edit Mode routines
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int EM_Overlay_Mode(FORM * form)
|
| Description : Switch to overlay mode.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
static int
EM_Overlay_Mode(FORM *form)
{
T((T_CALLED("EM_Overlay_Mode(%p)"), (void *)form));
SetStatus(form, _OVLMODE);
returnCode(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int EM_Insert_Mode(FORM * form)
|
| Description : Switch to insert mode
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
static int
EM_Insert_Mode(FORM *form)
{
T((T_CALLED("EM_Insert_Mode(%p)"), (void *)form));
ClrStatus(form, _OVLMODE);
returnCode(E_OK);
}
/*----------------------------------------------------------------------------
END of Edit Mode routines
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Helper routines for Choice Requests
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Next_Choice(FORM * form,
| FIELDTYPE * typ,
| FIELD * field,
| TypeArgument *argp)
|
| Description : Get the next field choice. For linked types this is
| done recursively.
|
| Return Values : TRUE - next choice successfully retrieved
| FALSE - couldn't retrieve next choice
+--------------------------------------------------------------------------*/
static bool
Next_Choice(FORM *form, FIELDTYPE *typ, FIELD *field, TypeArgument *argp)
{
if (!typ || !(typ->status & _HAS_CHOICE))
return FALSE;
if (typ->status & _LINKED_TYPE)
{
assert(argp);
return (
Next_Choice(form, typ->left, field, argp->left) ||
Next_Choice(form, typ->right, field, argp->right));
}
else
{
#if NCURSES_INTEROP_FUNCS
assert(typ->enum_next.onext);
if (typ->status & _GENERIC)
return typ->enum_next.gnext(form, field, (void *)argp);
else
return typ->enum_next.onext(field, (void *)argp);
#else
assert(typ->next);
return typ->next(field, (void *)argp);
#endif
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Previous_Choice(FORM * form,
| FIELDTYPE * typ,
| FIELD * field,
| TypeArgument *argp)
|
| Description : Get the previous field choice. For linked types this
| is done recursively.
|
| Return Values : TRUE - previous choice successfully retrieved
| FALSE - couldn't retrieve previous choice
+--------------------------------------------------------------------------*/
static bool
Previous_Choice(FORM *form, FIELDTYPE *typ, FIELD *field, TypeArgument *argp)
{
if (!typ || !(typ->status & _HAS_CHOICE))
return FALSE;
if (typ->status & _LINKED_TYPE)
{
assert(argp);
return (
Previous_Choice(form, typ->left, field, argp->left) ||
Previous_Choice(form, typ->right, field, argp->right));
}
else
{
#if NCURSES_INTEROP_FUNCS
assert(typ->enum_prev.oprev);
if (typ->status & _GENERIC)
return typ->enum_prev.gprev(form, field, (void *)argp);
else
return typ->enum_prev.oprev(field, (void *)argp);
#else
assert(typ->prev);
return typ->prev(field, (void *)argp);
#endif
}
}
/*----------------------------------------------------------------------------
End of Helper routines for Choice Requests
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Routines for Choice Requests
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int CR_Next_Choice(FORM * form)
|
| Description : Get the next field choice.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - next choice couldn't be retrieved
+--------------------------------------------------------------------------*/
static int
CR_Next_Choice(FORM *form)
{
FIELD *field = form->current;
T((T_CALLED("CR_Next_Choice(%p)"), (void *)form));
Synchronize_Buffer(form);
returnCode((Next_Choice(form, field->type, field, (TypeArgument *)(field->arg)))
? E_OK
: E_REQUEST_DENIED);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int CR_Previous_Choice(FORM * form)
|
| Description : Get the previous field choice.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - prev. choice couldn't be retrieved
+--------------------------------------------------------------------------*/
static int
CR_Previous_Choice(FORM *form)
{
FIELD *field = form->current;
T((T_CALLED("CR_Previous_Choice(%p)"), (void *)form));
Synchronize_Buffer(form);
returnCode((Previous_Choice(form, field->type, field, (TypeArgument *)(field->arg)))
? E_OK
: E_REQUEST_DENIED);
}
/*----------------------------------------------------------------------------
End of Routines for Choice Requests
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Helper routines for Field Validations.
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_Field(FORM* form,
| FIELDTYPE * typ,
| FIELD * field,
| TypeArgument * argp)
|
| Description : Check the field according to its fieldtype and its
| actual arguments. For linked fieldtypes this is done
| recursively.
|
| Return Values : TRUE - field is valid
| FALSE - field is invalid.
+--------------------------------------------------------------------------*/
static bool
Check_Field(FORM *form, FIELDTYPE *typ, FIELD *field, TypeArgument *argp)
{
if (typ)
{
if (Field_Has_Option(field, O_NULLOK))
{
FIELD_CELL *bp = field->buf;
assert(bp);
while (ISBLANK(*bp))
{
bp++;
}
if (CharOf(*bp) == 0)
return TRUE;
}
if (typ->status & _LINKED_TYPE)
{
assert(argp);
return (
Check_Field(form, typ->left, field, argp->left) ||
Check_Field(form, typ->right, field, argp->right));
}
else
{
#if NCURSES_INTEROP_FUNCS
if (typ->fieldcheck.ofcheck)
{
if (typ->status & _GENERIC)
return typ->fieldcheck.gfcheck(form, field, (void *)argp);
else
return typ->fieldcheck.ofcheck(field, (void *)argp);
}
#else
if (typ->fcheck)
return typ->fcheck(field, (void *)argp);
#endif
}
}
return TRUE;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : bool _nc_Internal_Validation(FORM * form )
|
| Description : Validate the current field of the form.
|
| Return Values : TRUE - field is valid
| FALSE - field is invalid
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+FORM_EXPORT(bool)
_nc_Internal_Validation(FORM *form)
{
FIELD *field;
field = form->current;
Synchronize_Buffer(form);
if ((form->status & _FCHECK_REQUIRED) ||
(!(Field_Has_Option(field, O_PASSOK))))
{
if (!Check_Field(form, field->type, field, (TypeArgument *)(field->arg)))
return FALSE;
ClrStatus(form, _FCHECK_REQUIRED);
SetStatus(field, _CHANGED);
Synchronize_Linked_Fields(field);
}
return TRUE;
}
/*----------------------------------------------------------------------------
End of Helper routines for Field Validations.
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Routines for Field Validation.
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FV_Validation(FORM * form)
|
| Description : Validate the current field of the form.
|
| Return Values : E_OK - field valid
| E_INVALID_FIELD - field not valid
+--------------------------------------------------------------------------*/
static int
FV_Validation(FORM *form)
{
T((T_CALLED("FV_Validation(%p)"), (void *)form));
if (_nc_Internal_Validation(form))
returnCode(E_OK);
else
returnCode(E_INVALID_FIELD);
}
/*----------------------------------------------------------------------------
End of routines for Field Validation.
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Helper routines for Inter-Field Navigation
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static FIELD *Next_Field_On_Page(FIELD * field)
|
| Description : Get the next field after the given field on the current
| page. The order of fields is the one defined by the
-| fields array. Only visible and active fields are
+| field's array. Only visible and active fields are
| counted.
|
| Return Values : Pointer to the next field.
+--------------------------------------------------------------------------*/
NCURSES_INLINE static FIELD *
Next_Field_On_Page(FIELD *field)
{
FORM *form = field->form;
FIELD **field_on_page = &form->field[field->index];
FIELD **first_on_page = &form->field[form->page[form->curpage].pmin];
FIELD **last_on_page = &form->field[form->page[form->curpage].pmax];
do
{
field_on_page =
(field_on_page == last_on_page) ? first_on_page : field_on_page + 1;
if (Field_Is_Selectable(*field_on_page))
break;
}
while (field != (*field_on_page));
return (*field_on_page);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : FIELD* _nc_First_Active_Field(FORM * form)
|
| Description : Get the first active field on the current page,
| if there are such. If there are none, get the first
| visible field on the page. If there are also none,
| we return the first field on page and hope the best.
|
| Return Values : Pointer to calculated field.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELD *)
+FORM_EXPORT(FIELD *)
_nc_First_Active_Field(FORM *form)
{
FIELD **last_on_page = &form->field[form->page[form->curpage].pmax];
FIELD *proposed = Next_Field_On_Page(*last_on_page);
if (proposed == *last_on_page)
{
/* there might be the special situation, where there is no
active and visible field on the current page. We then select
the first visible field on this readonly page
*/
if (Field_Is_Not_Selectable(proposed))
{
FIELD **field = &form->field[proposed->index];
FIELD **first = &form->field[form->page[form->curpage].pmin];
do
{
field = (field == last_on_page) ? first : field + 1;
if (Field_Has_Option(*field, O_VISIBLE))
break;
}
while (proposed != (*field));
proposed = *field;
if ((proposed == *last_on_page) &&
!((unsigned)proposed->opts & O_VISIBLE))
{
/* This means, there is also no visible field on the page.
So we propose the first one and hope the very best...
Some very clever user has designed a readonly and invisible
page on this form.
*/
proposed = *first;
}
}
}
return (proposed);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static FIELD *Previous_Field_On_Page(FIELD * field)
|
| Description : Get the previous field before the given field on the
| current page. The order of fields is the one defined by
-| the fields array. Only visible and active fields are
+| the field's array. Only visible and active fields are
| counted.
|
| Return Values : Pointer to the previous field.
+--------------------------------------------------------------------------*/
NCURSES_INLINE static FIELD *
Previous_Field_On_Page(FIELD *field)
{
FORM *form = field->form;
FIELD **field_on_page = &form->field[field->index];
FIELD **first_on_page = &form->field[form->page[form->curpage].pmin];
FIELD **last_on_page = &form->field[form->page[form->curpage].pmax];
do
{
field_on_page =
(field_on_page == first_on_page) ? last_on_page : field_on_page - 1;
if (Field_Is_Selectable(*field_on_page))
break;
}
while (field != (*field_on_page));
return (*field_on_page);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static FIELD *Sorted_Next_Field(FIELD * field)
|
| Description : Get the next field after the given field on the current
| page. The order of fields is the one defined by the
| (row,column) geometry, rows are major.
|
| Return Values : Pointer to the next field.
+--------------------------------------------------------------------------*/
NCURSES_INLINE static FIELD *
Sorted_Next_Field(FIELD *field)
{
FIELD *field_on_page = field;
do
{
field_on_page = field_on_page->snext;
if (Field_Is_Selectable(field_on_page))
break;
}
while (field_on_page != field);
return (field_on_page);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static FIELD *Sorted_Previous_Field(FIELD * field)
|
| Description : Get the previous field before the given field on the
| current page. The order of fields is the one defined
| by the (row,column) geometry, rows are major.
|
| Return Values : Pointer to the previous field.
+--------------------------------------------------------------------------*/
NCURSES_INLINE static FIELD *
Sorted_Previous_Field(FIELD *field)
{
FIELD *field_on_page = field;
do
{
field_on_page = field_on_page->sprev;
if (Field_Is_Selectable(field_on_page))
break;
}
while (field_on_page != field);
return (field_on_page);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static FIELD *Left_Neighbor_Field(FIELD * field)
|
| Description : Get the left neighbor of the field on the same line
| and the same page. Cycles through the line.
|
| Return Values : Pointer to left neighbor field.
+--------------------------------------------------------------------------*/
NCURSES_INLINE static FIELD *
Left_Neighbor_Field(FIELD *field)
{
FIELD *field_on_page = field;
/* For a field that has really a left neighbor, the while clause
immediately fails and the loop is left, positioned at the right
neighbor. Otherwise we cycle backwards through the sorted field list
until we enter the same line (from the right end).
*/
do
{
field_on_page = Sorted_Previous_Field(field_on_page);
}
while (field_on_page->frow != field->frow);
return (field_on_page);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static FIELD *Right_Neighbor_Field(FIELD * field)
|
| Description : Get the right neighbor of the field on the same line
| and the same page.
|
| Return Values : Pointer to right neighbor field.
+--------------------------------------------------------------------------*/
NCURSES_INLINE static FIELD *
Right_Neighbor_Field(FIELD *field)
{
FIELD *field_on_page = field;
/* See the comments on Left_Neighbor_Field to understand how it works */
do
{
field_on_page = Sorted_Next_Field(field_on_page);
}
while (field_on_page->frow != field->frow);
return (field_on_page);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static FIELD *Upper_Neighbor_Field(FIELD * field)
|
| Description : Because of the row-major nature of sorting the fields,
-| it is more difficult to define whats the upper neighbor
+| it is more difficult to define what the upper neighbor
| field really means. We define that it must be on a
| 'previous' line (cyclic order!) and is the rightmost
-| field laying on the left side of the given field. If
+| field lying on the left side of the given field. If
| this set is empty, we take the first field on the line.
|
| Return Values : Pointer to the upper neighbor field.
+--------------------------------------------------------------------------*/
static FIELD *
Upper_Neighbor_Field(FIELD *field)
{
FIELD *field_on_page = field;
int frow = field->frow;
int fcol = field->fcol;
/* Walk back to the 'previous' line. The second term in the while clause
just guarantees that we stop if we cycled through the line because
there might be no 'previous' line if the page has just one line.
*/
do
{
field_on_page = Sorted_Previous_Field(field_on_page);
}
while (field_on_page->frow == frow && field_on_page->fcol != fcol);
if (field_on_page->frow != frow)
{
/* We really found a 'previous' line. We are positioned at the
rightmost field on this line */
frow = field_on_page->frow;
/* We walk to the left as long as we are really right of the
field. */
while (field_on_page->frow == frow && field_on_page->fcol > fcol)
field_on_page = Sorted_Previous_Field(field_on_page);
/* If we wrapped, just go to the right which is the first field on
the row */
if (field_on_page->frow != frow)
field_on_page = Sorted_Next_Field(field_on_page);
}
return (field_on_page);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static FIELD *Down_Neighbor_Field(FIELD * field)
|
| Description : Because of the row-major nature of sorting the fields,
-| its more difficult to define whats the down neighbor
+| it's more difficult to define what the down neighbor
| field really means. We define that it must be on a
| 'next' line (cyclic order!) and is the leftmost
| field laying on the right side of the given field. If
| this set is empty, we take the last field on the line.
|
| Return Values : Pointer to the upper neighbor field.
+--------------------------------------------------------------------------*/
static FIELD *
Down_Neighbor_Field(FIELD *field)
{
FIELD *field_on_page = field;
int frow = field->frow;
int fcol = field->fcol;
/* Walk forward to the 'next' line. The second term in the while clause
just guarantees that we stop if we cycled through the line because
there might be no 'next' line if the page has just one line.
*/
do
{
field_on_page = Sorted_Next_Field(field_on_page);
}
while (field_on_page->frow == frow && field_on_page->fcol != fcol);
if (field_on_page->frow != frow)
{
/* We really found a 'next' line. We are positioned at the rightmost
field on this line */
frow = field_on_page->frow;
/* We walk to the right as long as we are really left of the
field. */
while (field_on_page->frow == frow && field_on_page->fcol < fcol)
field_on_page = Sorted_Next_Field(field_on_page);
/* If we wrapped, just go to the left which is the last field on
the row */
if (field_on_page->frow != frow)
field_on_page = Sorted_Previous_Field(field_on_page);
}
return (field_on_page);
}
/*----------------------------------------------------------------------------
Inter-Field Navigation routines
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Inter_Field_Navigation(
| int (* const fct) (FORM *),
| FORM * form)
|
| Description : Generic behavior for changing the current field, the
| field is left and a new field is entered. So the field
| must be validated and the field init/term hooks must
| be called.
|
| Return Values : E_OK - success
| E_INVALID_FIELD - field is invalid
| some other - error from subordinate call
+--------------------------------------------------------------------------*/
static int
Inter_Field_Navigation(int (*const fct) (FORM *), FORM *form)
{
int res;
if (!_nc_Internal_Validation(form))
res = E_INVALID_FIELD;
else
{
Call_Hook(form, fieldterm);
res = fct(form);
Call_Hook(form, fieldinit);
}
return res;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FN_Next_Field(FORM * form)
|
| Description : Move to the next field on the current page of the form
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
FN_Next_Field(FORM *form)
{
T((T_CALLED("FN_Next_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Next_Field_On_Page(form->current)));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FN_Previous_Field(FORM * form)
|
| Description : Move to the previous field on the current page of the
| form
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
FN_Previous_Field(FORM *form)
{
T((T_CALLED("FN_Previous_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Previous_Field_On_Page(form->current)));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FN_First_Field(FORM * form)
|
| Description : Move to the first field on the current page of the form
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
FN_First_Field(FORM *form)
{
T((T_CALLED("FN_First_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Next_Field_On_Page(form->field[form->page[form->curpage].pmax])));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FN_Last_Field(FORM * form)
|
| Description : Move to the last field on the current page of the form
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
FN_Last_Field(FORM *form)
{
T((T_CALLED("FN_Last_Field(%p)"), (void *)form));
returnCode(
_nc_Set_Current_Field(form,
Previous_Field_On_Page(form->field[form->page[form->curpage].pmin])));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FN_Sorted_Next_Field(FORM * form)
|
| Description : Move to the sorted next field on the current page
| of the form.
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
FN_Sorted_Next_Field(FORM *form)
{
T((T_CALLED("FN_Sorted_Next_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Sorted_Next_Field(form->current)));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FN_Sorted_Previous_Field(FORM * form)
|
| Description : Move to the sorted previous field on the current page
| of the form.
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
FN_Sorted_Previous_Field(FORM *form)
{
T((T_CALLED("FN_Sorted_Previous_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Sorted_Previous_Field(form->current)));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FN_Sorted_First_Field(FORM * form)
|
| Description : Move to the sorted first field on the current page
| of the form.
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
FN_Sorted_First_Field(FORM *form)
{
T((T_CALLED("FN_Sorted_First_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Sorted_Next_Field(form->field[form->page[form->curpage].smax])));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FN_Sorted_Last_Field(FORM * form)
|
| Description : Move to the sorted last field on the current page
| of the form.
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
FN_Sorted_Last_Field(FORM *form)
{
T((T_CALLED("FN_Sorted_Last_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Sorted_Previous_Field(form->field[form->page[form->curpage].smin])));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FN_Left_Field(FORM * form)
|
| Description : Get the field on the left of the current field on the
| same line and the same page. Cycles through the line.
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
FN_Left_Field(FORM *form)
{
T((T_CALLED("FN_Left_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Left_Neighbor_Field(form->current)));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FN_Right_Field(FORM * form)
|
| Description : Get the field on the right of the current field on the
| same line and the same page. Cycles through the line.
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
FN_Right_Field(FORM *form)
{
T((T_CALLED("FN_Right_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Right_Neighbor_Field(form->current)));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FN_Up_Field(FORM * form)
|
| Description : Get the upper neighbor of the current field. This
| cycles through the page. See the comments of the
| Upper_Neighbor_Field function to understand how
| 'upper' is defined.
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
FN_Up_Field(FORM *form)
{
T((T_CALLED("FN_Up_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Upper_Neighbor_Field(form->current)));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int FN_Down_Field(FORM * form)
|
| Description : Get the down neighbor of the current field. This
| cycles through the page. See the comments of the
| Down_Neighbor_Field function to understand how
| 'down' is defined.
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
FN_Down_Field(FORM *form)
{
T((T_CALLED("FN_Down_Field(%p)"), (void *)form));
returnCode(_nc_Set_Current_Field(form,
Down_Neighbor_Field(form->current)));
}
/*----------------------------------------------------------------------------
END of Field Navigation routines
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Helper routines for Page Navigation
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int _nc_Set_Form_Page(FORM * form,
| int page,
| FIELD * field)
|
| Description : Make the given page number the current page and make
| the given field the current field on the page. If
| for the field NULL is given, make the first field on
| the page the current field. The routine acts only
| if the requested page is not the current page.
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
| E_BAD_ARGUMENT - invalid field pointer
| E_SYSTEM_ERROR - some severe basic error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
_nc_Set_Form_Page(FORM *form, int page, FIELD *field)
{
int res = E_OK;
if ((form->curpage != page))
{
FIELD *last_field, *field_on_page;
werase(Get_Form_Window(form));
form->curpage = (short)page;
last_field = field_on_page = form->field[form->page[page].smin];
do
{
if ((unsigned)field_on_page->opts & O_VISIBLE)
if ((res = Display_Field(field_on_page)) != E_OK)
return (res);
field_on_page = field_on_page->snext;
}
while (field_on_page != last_field);
if (field)
res = _nc_Set_Current_Field(form, field);
else
/* N.B.: we don't encapsulate this by Inter_Field_Navigation(),
because this is already executed in a page navigation
context that contains field navigation
*/
res = FN_First_Field(form);
}
return (res);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Next_Page_Number(const FORM * form)
|
| Description : Calculate the page number following the current page
| number. This cycles if the highest page number is
| reached.
|
| Return Values : The next page number
+--------------------------------------------------------------------------*/
NCURSES_INLINE static int
Next_Page_Number(const FORM *form)
{
return (form->curpage + 1) % form->maxpage;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Previous_Page_Number(const FORM * form)
|
| Description : Calculate the page number before the current page
| number. This cycles if the first page number is
| reached.
|
| Return Values : The previous page number
+--------------------------------------------------------------------------*/
NCURSES_INLINE static int
Previous_Page_Number(const FORM *form)
{
return (form->curpage != 0 ? form->curpage - 1 : form->maxpage - 1);
}
/*----------------------------------------------------------------------------
Page Navigation routines
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Page_Navigation(
| int (* const fct) (FORM *),
| FORM * form)
|
| Description : Generic behavior for changing a page. This means
| that the field is left and a new field is entered.
| So the field must be validated and the field init/term
| hooks must be called. Because also the page is changed,
-| the forms init/term hooks must be called also.
+| the form's init/term hooks must be called also.
|
| Return Values : E_OK - success
| E_INVALID_FIELD - field is invalid
| some other - error from subordinate call
+--------------------------------------------------------------------------*/
static int
Page_Navigation(int (*const fct) (FORM *), FORM *form)
{
int res;
if (!_nc_Internal_Validation(form))
res = E_INVALID_FIELD;
else
{
Call_Hook(form, fieldterm);
Call_Hook(form, formterm);
res = fct(form);
Call_Hook(form, forminit);
Call_Hook(form, fieldinit);
}
return res;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int PN_Next_Page(FORM * form)
|
| Description : Move to the next page of the form
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
PN_Next_Page(FORM *form)
{
T((T_CALLED("PN_Next_Page(%p)"), (void *)form));
returnCode(_nc_Set_Form_Page(form, Next_Page_Number(form), (FIELD *)0));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int PN_Previous_Page(FORM * form)
|
| Description : Move to the previous page of the form
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
PN_Previous_Page(FORM *form)
{
T((T_CALLED("PN_Previous_Page(%p)"), (void *)form));
returnCode(_nc_Set_Form_Page(form, Previous_Page_Number(form), (FIELD *)0));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int PN_First_Page(FORM * form)
|
| Description : Move to the first page of the form
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
PN_First_Page(FORM *form)
{
T((T_CALLED("PN_First_Page(%p)"), (void *)form));
returnCode(_nc_Set_Form_Page(form, 0, (FIELD *)0));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int PN_Last_Page(FORM * form)
|
| Description : Move to the last page of the form
|
| Return Values : E_OK - success
| != E_OK - error from subordinate call
+--------------------------------------------------------------------------*/
static int
PN_Last_Page(FORM *form)
{
T((T_CALLED("PN_Last_Page(%p)"), (void *)form));
returnCode(_nc_Set_Form_Page(form, form->maxpage - 1, (FIELD *)0));
}
/*----------------------------------------------------------------------------
END of Field Navigation routines
--------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
Helper routines for the core form driver.
--------------------------------------------------------------------------*/
# if USE_WIDEC_SUPPORT
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Data_Entry_w(FORM * form, wchar_t c)
|
| Description : Enter the wide character c into at the current
| position of the current field of the form.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - driver could not process the request
| E_SYSTEM_ERROR -
+--------------------------------------------------------------------------*/
static int
Data_Entry_w(FORM *form, wchar_t c)
{
FIELD *field = form->current;
int result = E_REQUEST_DENIED;
T((T_CALLED("Data_Entry(%p,%s)"), (void *)form, _tracechtype((chtype)c)));
if ((Field_Has_Option(field, O_EDIT))
#if FIX_FORM_INACTIVE_BUG
&& (Field_Has_Option(field, O_ACTIVE))
#endif
)
{
wchar_t given[2];
cchar_t temp_ch;
given[0] = c;
given[1] = 0;
setcchar(&temp_ch, given, 0, 0, (void *)0);
if ((Field_Has_Option(field, O_BLANK)) &&
First_Position_In_Current_Field(form) &&
!(form->status & _FCHECK_REQUIRED) &&
!(form->status & _WINDOW_MODIFIED))
werase(form->w);
if (form->status & _OVLMODE)
{
wadd_wch(form->w, &temp_ch);
}
else
/* no _OVLMODE */
{
bool There_Is_Room = Is_There_Room_For_A_Char_In_Line(form);
if (!(There_Is_Room ||
((Single_Line_Field(field) && Growable(field)))))
RETURN(E_REQUEST_DENIED);
if (!There_Is_Room && !Field_Grown(field, 1))
RETURN(E_SYSTEM_ERROR);
wins_wch(form->w, &temp_ch);
}
if ((result = Wrapping_Not_Necessary_Or_Wrapping_Ok(form)) == E_OK)
{
bool End_Of_Field = (((field->drows - 1) == form->currow) &&
((field->dcols - 1) == form->curcol));
form->status |= _WINDOW_MODIFIED;
if (End_Of_Field && !Growable(field) && (Field_Has_Option(field, O_AUTOSKIP)))
result = Inter_Field_Navigation(FN_Next_Field, form);
else
{
if (End_Of_Field && Growable(field) && !Field_Grown(field, 1))
result = E_SYSTEM_ERROR;
else
{
/*
* We have just added a byte to the form field. It may have
* been part of a multibyte character. If it was, the
* addch_used field is nonzero and we should not try to move
* to a new column.
*/
if (WINDOW_EXT(form->w, addch_used) == 0)
IFN_Next_Character(form);
result = E_OK;
}
}
}
}
RETURN(result);
}
# endif
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Data_Entry(FORM * form,int c)
|
| Description : Enter character c into at the current position of the
| current field of the form.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - driver could not process the request
| E_SYSTEM_ERROR -
+--------------------------------------------------------------------------*/
static int
Data_Entry(FORM *form, int c)
{
FIELD *field = form->current;
int result = E_REQUEST_DENIED;
T((T_CALLED("Data_Entry(%p,%s)"), (void *)form, _tracechtype((chtype)c)));
if ((Field_Has_Option(field, O_EDIT))
#if FIX_FORM_INACTIVE_BUG
&& (Field_Has_Option(field, O_ACTIVE))
#endif
)
{
if ((Field_Has_Option(field, O_BLANK)) &&
First_Position_In_Current_Field(form) &&
!(form->status & _FCHECK_REQUIRED) &&
!(form->status & _WINDOW_MODIFIED))
werase(form->w);
if (form->status & _OVLMODE)
{
waddch(form->w, (chtype)c);
}
else
/* no _OVLMODE */
{
bool There_Is_Room = Is_There_Room_For_A_Char_In_Line(form);
if (!(There_Is_Room ||
((Single_Line_Field(field) && Growable(field)))))
RETURN(E_REQUEST_DENIED);
if (!There_Is_Room && !Field_Grown(field, 1))
RETURN(E_SYSTEM_ERROR);
winsch(form->w, (chtype)c);
}
if ((result = Wrapping_Not_Necessary_Or_Wrapping_Ok(form)) == E_OK)
{
bool End_Of_Field = (((field->drows - 1) == form->currow) &&
((field->dcols - 1) == form->curcol));
if (Field_Has_Option(field, O_EDGE_INSERT_STAY))
move_after_insert = !!(form->curcol
- form->begincol
- field->cols
+ 1);
SetStatus(form, _WINDOW_MODIFIED);
if (End_Of_Field && !Growable(field) && (Field_Has_Option(field, O_AUTOSKIP)))
result = Inter_Field_Navigation(FN_Next_Field, form);
else
{
if (End_Of_Field && Growable(field) && !Field_Grown(field, 1))
result = E_SYSTEM_ERROR;
else
{
#if USE_WIDEC_SUPPORT
/*
* We have just added a byte to the form field. It may have
* been part of a multibyte character. If it was, the
* addch_used field is nonzero and we should not try to move
* to a new column.
*/
if (WINDOW_EXT(form->w, addch_used) == 0)
IFN_Next_Character(form);
#else
IFN_Next_Character(form);
#endif
result = E_OK;
}
}
}
}
RETURN(result);
}
/* Structure to describe the binding of a request code to a function.
The member keycode codes the request value as well as the generic
routine to use for the request. The code for the generic routine
is coded in the upper 16 Bits while the request code is coded in
the lower 16 bits.
In terms of C++ you might think of a request as a class with a
virtual method "perform". The different types of request are
derived from this base class and overload (or not) the base class
implementation of perform.
*/
typedef struct
{
int keycode; /* must be at least 32 bit: hi:mode, lo: key */
int (*cmd) (FORM *); /* low level driver routine for this key */
}
Binding_Info;
/* You may see this is the class-id of the request type class */
#define ID_PN (0x00000000) /* Page navigation */
#define ID_FN (0x00010000) /* Inter-Field navigation */
#define ID_IFN (0x00020000) /* Intra-Field navigation */
#define ID_VSC (0x00030000) /* Vertical Scrolling */
#define ID_HSC (0x00040000) /* Horizontal Scrolling */
#define ID_FE (0x00050000) /* Field Editing */
#define ID_EM (0x00060000) /* Edit Mode */
#define ID_FV (0x00070000) /* Field Validation */
#define ID_CH (0x00080000) /* Choice */
#define ID_Mask (0xffff0000)
#define Key_Mask (0x0000ffff)
#define ID_Shft (16)
/* This array holds all the Binding Infos */
/* *INDENT-OFF* */
static const Binding_Info bindings[MAX_FORM_COMMAND - MIN_FORM_COMMAND + 1] =
{
{ REQ_NEXT_PAGE |ID_PN ,PN_Next_Page},
{ REQ_PREV_PAGE |ID_PN ,PN_Previous_Page},
{ REQ_FIRST_PAGE |ID_PN ,PN_First_Page},
{ REQ_LAST_PAGE |ID_PN ,PN_Last_Page},
{ REQ_NEXT_FIELD |ID_FN ,FN_Next_Field},
{ REQ_PREV_FIELD |ID_FN ,FN_Previous_Field},
{ REQ_FIRST_FIELD |ID_FN ,FN_First_Field},
{ REQ_LAST_FIELD |ID_FN ,FN_Last_Field},
{ REQ_SNEXT_FIELD |ID_FN ,FN_Sorted_Next_Field},
{ REQ_SPREV_FIELD |ID_FN ,FN_Sorted_Previous_Field},
{ REQ_SFIRST_FIELD |ID_FN ,FN_Sorted_First_Field},
{ REQ_SLAST_FIELD |ID_FN ,FN_Sorted_Last_Field},
{ REQ_LEFT_FIELD |ID_FN ,FN_Left_Field},
{ REQ_RIGHT_FIELD |ID_FN ,FN_Right_Field},
{ REQ_UP_FIELD |ID_FN ,FN_Up_Field},
{ REQ_DOWN_FIELD |ID_FN ,FN_Down_Field},
{ REQ_NEXT_CHAR |ID_IFN ,IFN_Next_Character},
{ REQ_PREV_CHAR |ID_IFN ,IFN_Previous_Character},
{ REQ_NEXT_LINE |ID_IFN ,IFN_Next_Line},
{ REQ_PREV_LINE |ID_IFN ,IFN_Previous_Line},
{ REQ_NEXT_WORD |ID_IFN ,IFN_Next_Word},
{ REQ_PREV_WORD |ID_IFN ,IFN_Previous_Word},
{ REQ_BEG_FIELD |ID_IFN ,IFN_Beginning_Of_Field},
{ REQ_END_FIELD |ID_IFN ,IFN_End_Of_Field},
{ REQ_BEG_LINE |ID_IFN ,IFN_Beginning_Of_Line},
{ REQ_END_LINE |ID_IFN ,IFN_End_Of_Line},
{ REQ_LEFT_CHAR |ID_IFN ,IFN_Left_Character},
{ REQ_RIGHT_CHAR |ID_IFN ,IFN_Right_Character},
{ REQ_UP_CHAR |ID_IFN ,IFN_Up_Character},
{ REQ_DOWN_CHAR |ID_IFN ,IFN_Down_Character},
{ REQ_NEW_LINE |ID_FE ,FE_New_Line},
{ REQ_INS_CHAR |ID_FE ,FE_Insert_Character},
{ REQ_INS_LINE |ID_FE ,FE_Insert_Line},
{ REQ_DEL_CHAR |ID_FE ,FE_Delete_Character},
{ REQ_DEL_PREV |ID_FE ,FE_Delete_Previous},
{ REQ_DEL_LINE |ID_FE ,FE_Delete_Line},
{ REQ_DEL_WORD |ID_FE ,FE_Delete_Word},
{ REQ_CLR_EOL |ID_FE ,FE_Clear_To_End_Of_Line},
{ REQ_CLR_EOF |ID_FE ,FE_Clear_To_End_Of_Field},
{ REQ_CLR_FIELD |ID_FE ,FE_Clear_Field},
{ REQ_OVL_MODE |ID_EM ,EM_Overlay_Mode},
{ REQ_INS_MODE |ID_EM ,EM_Insert_Mode},
{ REQ_SCR_FLINE |ID_VSC ,VSC_Scroll_Line_Forward},
{ REQ_SCR_BLINE |ID_VSC ,VSC_Scroll_Line_Backward},
{ REQ_SCR_FPAGE |ID_VSC ,VSC_Scroll_Page_Forward},
{ REQ_SCR_BPAGE |ID_VSC ,VSC_Scroll_Page_Backward},
{ REQ_SCR_FHPAGE |ID_VSC ,VSC_Scroll_Half_Page_Forward},
{ REQ_SCR_BHPAGE |ID_VSC ,VSC_Scroll_Half_Page_Backward},
{ REQ_SCR_FCHAR |ID_HSC ,HSC_Scroll_Char_Forward},
{ REQ_SCR_BCHAR |ID_HSC ,HSC_Scroll_Char_Backward},
{ REQ_SCR_HFLINE |ID_HSC ,HSC_Horizontal_Line_Forward},
{ REQ_SCR_HBLINE |ID_HSC ,HSC_Horizontal_Line_Backward},
{ REQ_SCR_HFHALF |ID_HSC ,HSC_Horizontal_Half_Line_Forward},
{ REQ_SCR_HBHALF |ID_HSC ,HSC_Horizontal_Half_Line_Backward},
{ REQ_VALIDATION |ID_FV ,FV_Validation},
{ REQ_NEXT_CHOICE |ID_CH ,CR_Next_Choice},
{ REQ_PREV_CHOICE |ID_CH ,CR_Previous_Choice}
};
/* *INDENT-ON* */
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int form_driver(FORM * form,int c)
|
| Description : This is the workhorse of the forms system. It checks
| to determine whether the character c is a request or
| data. If it is a request, the form driver executes
| the request and returns the result. If it is data
| (printable character), it enters the data into the
| current position in the current field. If it is not
| recognized, the form driver assumes it is an application
| defined command and returns E_UNKNOWN_COMMAND.
| Application defined command should be defined relative
| to MAX_FORM_COMMAND, the maximum value of a request.
|
| Return Values : E_OK - success
| E_SYSTEM_ERROR - system error
| E_BAD_ARGUMENT - an argument is incorrect
| E_NOT_POSTED - form is not posted
| E_INVALID_FIELD - field contents are invalid
| E_BAD_STATE - called from inside a hook routine
| E_REQUEST_DENIED - request failed
| E_NOT_CONNECTED - no fields are connected to the form
| E_UNKNOWN_COMMAND - command not known
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
form_driver(FORM *form, int c)
{
- const Binding_Info *BI = (Binding_Info *) 0;
+ const Binding_Info *BI = (Binding_Info *)0;
int res = E_UNKNOWN_COMMAND;
move_after_insert = TRUE;
T((T_CALLED("form_driver(%p,%d)"), (void *)form, c));
if (!form)
RETURN(E_BAD_ARGUMENT);
if (!(form->field) || !(form->current))
RETURN(E_NOT_CONNECTED);
assert(form->page);
if (c == FIRST_ACTIVE_MAGIC)
{
form->current = _nc_First_Active_Field(form);
RETURN(E_OK);
}
assert(form->current &&
form->current->buf &&
(form->current->form == form)
);
if (form->status & _IN_DRIVER)
RETURN(E_BAD_STATE);
if (!(form->status & _POSTED))
RETURN(E_NOT_POSTED);
if ((c >= MIN_FORM_COMMAND && c <= MAX_FORM_COMMAND) &&
((bindings[c - MIN_FORM_COMMAND].keycode & Key_Mask) == c))
{
TR(TRACE_CALLS, ("form_request %s", form_request_name(c)));
BI = &(bindings[c - MIN_FORM_COMMAND]);
}
if (BI)
{
typedef int (*Generic_Method) (int (*const) (FORM *), FORM *);
static const Generic_Method Generic_Methods[] =
{
Page_Navigation, /* overloaded to call field&form hooks */
Inter_Field_Navigation, /* overloaded to call field hooks */
NULL, /* Intra-Field is generic */
Vertical_Scrolling, /* Overloaded to check multi-line */
Horizontal_Scrolling, /* Overloaded to check single-line */
Field_Editing, /* Overloaded to mark modification */
NULL, /* Edit Mode is generic */
NULL, /* Field Validation is generic */
NULL /* Choice Request is generic */
};
size_t nMethods = (sizeof(Generic_Methods) / sizeof(Generic_Methods[0]));
- size_t method = (size_t) ((BI->keycode >> ID_Shft) & 0xffff); /* see ID_Mask */
+ size_t method = (size_t)((BI->keycode >> ID_Shft) & 0xffff); /* see ID_Mask */
if ((method >= nMethods) || !(BI->cmd))
res = E_SYSTEM_ERROR;
else
{
Generic_Method fct = Generic_Methods[method];
if (fct)
{
res = fct(BI->cmd, form);
}
else
{
res = (BI->cmd) (form);
}
}
}
#ifdef NCURSES_MOUSE_VERSION
else if (KEY_MOUSE == c)
{
MEVENT event;
WINDOW *win = form->win ? form->win : StdScreen(Get_Form_Screen(form));
WINDOW *sub = form->sub ? form->sub : win;
getmouse(&event);
if ((event.bstate & (BUTTON1_CLICKED |
BUTTON1_DOUBLE_CLICKED |
BUTTON1_TRIPLE_CLICKED))
&& wenclose(win, event.y, event.x))
{ /* we react only if the click was in the userwin, that means
* inside the form display area or at the decoration window.
*/
int ry = event.y, rx = event.x; /* screen coordinates */
res = E_REQUEST_DENIED;
if (mouse_trafo(&ry, &rx, FALSE))
{ /* rx, ry are now "curses" coordinates */
if (ry < sub->_begy)
{ /* we clicked above the display region; this is
* interpreted as "scroll up" request
*/
if (event.bstate & BUTTON1_CLICKED)
res = form_driver(form, REQ_PREV_FIELD);
else if (event.bstate & BUTTON1_DOUBLE_CLICKED)
res = form_driver(form, REQ_PREV_PAGE);
else if (event.bstate & BUTTON1_TRIPLE_CLICKED)
res = form_driver(form, REQ_FIRST_FIELD);
}
else if (ry > sub->_begy + sub->_maxy)
{ /* we clicked below the display region; this is
* interpreted as "scroll down" request
*/
if (event.bstate & BUTTON1_CLICKED)
res = form_driver(form, REQ_NEXT_FIELD);
else if (event.bstate & BUTTON1_DOUBLE_CLICKED)
res = form_driver(form, REQ_NEXT_PAGE);
else if (event.bstate & BUTTON1_TRIPLE_CLICKED)
res = form_driver(form, REQ_LAST_FIELD);
}
else if (wenclose(sub, event.y, event.x))
{ /* Inside the area we try to find the hit item */
int i;
ry = event.y;
rx = event.x;
if (wmouse_trafo(sub, &ry, &rx, FALSE))
{
int min_field = form->page[form->curpage].pmin;
int max_field = form->page[form->curpage].pmax;
for (i = min_field; i <= max_field; ++i)
{
FIELD *field = form->field[i];
if (Field_Is_Selectable(field)
&& Field_encloses(field, ry, rx) == E_OK)
{
res = _nc_Set_Current_Field(form, field);
if (res == E_OK)
res = _nc_Position_Form_Cursor(form);
if (res == E_OK
&& (event.bstate & BUTTON1_DOUBLE_CLICKED))
res = E_UNKNOWN_COMMAND;
break;
}
}
}
}
}
}
else
res = E_REQUEST_DENIED;
}
#endif /* NCURSES_MOUSE_VERSION */
else if (!(c & (~(int)MAX_REGULAR_CHARACTER)))
{
/*
* If we're using 8-bit characters, iscntrl+isprint cover the whole set.
* But with multibyte characters, there is a third possibility, i.e.,
* parts of characters that build up into printable characters which are
* not considered printable.
*
* FIXME: the wide-character branch should also use Check_Char().
*/
#if USE_WIDEC_SUPPORT
if (!iscntrl(UChar(c)))
#else
if (isprint(UChar(c)) &&
Check_Char(form, form->current, form->current->type, c,
(TypeArgument *)(form->current->arg)))
#endif
res = Data_Entry(form, c);
}
_nc_Refresh_Current_Field(form);
RETURN(res);
}
# if USE_WIDEC_SUPPORT
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int form_driver_w(FORM * form,int type,wchar_t c)
|
| Description : This is the workhorse of the forms system.
|
| Input is either a key code (request) or a wide char
| returned by e.g. get_wch (). The type must be passed
| as well,so that we are able to determine whether the char
| is a multibyte char or a request.
| If it is a request, the form driver executes
| the request and returns the result. If it is data
| (printable character), it enters the data into the
| current position in the current field. If it is not
| recognized, the form driver assumes it is an application
| defined command and returns E_UNKNOWN_COMMAND.
| Application defined command should be defined relative
| to MAX_FORM_COMMAND, the maximum value of a request.
|
| Return Values : E_OK - success
| E_SYSTEM_ERROR - system error
| E_BAD_ARGUMENT - an argument is incorrect
| E_NOT_POSTED - form is not posted
| E_INVALID_FIELD - field contents are invalid
| E_BAD_STATE - called from inside a hook routine
| E_REQUEST_DENIED - request failed
| E_NOT_CONNECTED - no fields are connected to the form
| E_UNKNOWN_COMMAND - command not known
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
form_driver_w(FORM *form, int type, wchar_t c)
{
- const Binding_Info *BI = (Binding_Info *) 0;
+ const Binding_Info *BI = (Binding_Info *)0;
int res = E_UNKNOWN_COMMAND;
T((T_CALLED("form_driver(%p,%d)"), (void *)form, (int)c));
if (!form)
RETURN(E_BAD_ARGUMENT);
if (!(form->field))
RETURN(E_NOT_CONNECTED);
assert(form->page);
if (c == (wchar_t)FIRST_ACTIVE_MAGIC)
{
form->current = _nc_First_Active_Field(form);
RETURN(E_OK);
}
assert(form->current &&
form->current->buf &&
(form->current->form == form)
);
if (form->status & _IN_DRIVER)
RETURN(E_BAD_STATE);
if (!(form->status & _POSTED))
RETURN(E_NOT_POSTED);
/* check if this is a keycode or a (wide) char */
if (type == KEY_CODE_YES)
{
if ((c >= MIN_FORM_COMMAND && c <= MAX_FORM_COMMAND) &&
((bindings[c - MIN_FORM_COMMAND].keycode & Key_Mask) == c))
BI = &(bindings[c - MIN_FORM_COMMAND]);
}
if (BI)
{
typedef int (*Generic_Method) (int (*const) (FORM *), FORM *);
static const Generic_Method Generic_Methods[] =
{
Page_Navigation, /* overloaded to call field&form hooks */
Inter_Field_Navigation, /* overloaded to call field hooks */
NULL, /* Intra-Field is generic */
Vertical_Scrolling, /* Overloaded to check multi-line */
Horizontal_Scrolling, /* Overloaded to check single-line */
Field_Editing, /* Overloaded to mark modification */
NULL, /* Edit Mode is generic */
NULL, /* Field Validation is generic */
NULL /* Choice Request is generic */
};
size_t nMethods = (sizeof(Generic_Methods) / sizeof(Generic_Methods[0]));
- size_t method = (size_t) (BI->keycode >> ID_Shft) & 0xffff; /* see ID_Mask */
+ size_t method = (size_t)(BI->keycode >> ID_Shft) & 0xffff; /* see ID_Mask */
if ((method >= nMethods) || !(BI->cmd))
res = E_SYSTEM_ERROR;
else
{
Generic_Method fct = Generic_Methods[method];
if (fct)
res = fct(BI->cmd, form);
else
res = (BI->cmd) (form);
}
}
#ifdef NCURSES_MOUSE_VERSION
else if (KEY_MOUSE == c)
{
MEVENT event;
WINDOW *win = form->win ? form->win : StdScreen(Get_Form_Screen(form));
WINDOW *sub = form->sub ? form->sub : win;
getmouse(&event);
if ((event.bstate & (BUTTON1_CLICKED |
BUTTON1_DOUBLE_CLICKED |
BUTTON1_TRIPLE_CLICKED))
&& wenclose(win, event.y, event.x))
{ /* we react only if the click was in the userwin, that means
* inside the form display area or at the decoration window.
*/
int ry = event.y, rx = event.x; /* screen coordinates */
res = E_REQUEST_DENIED;
if (mouse_trafo(&ry, &rx, FALSE))
{ /* rx, ry are now "curses" coordinates */
if (ry < sub->_begy)
{ /* we clicked above the display region; this is
* interpreted as "scroll up" request
*/
if (event.bstate & BUTTON1_CLICKED)
res = form_driver(form, REQ_PREV_FIELD);
else if (event.bstate & BUTTON1_DOUBLE_CLICKED)
res = form_driver(form, REQ_PREV_PAGE);
else if (event.bstate & BUTTON1_TRIPLE_CLICKED)
res = form_driver(form, REQ_FIRST_FIELD);
}
else if (ry > sub->_begy + sub->_maxy)
{ /* we clicked below the display region; this is
* interpreted as "scroll down" request
*/
if (event.bstate & BUTTON1_CLICKED)
res = form_driver(form, REQ_NEXT_FIELD);
else if (event.bstate & BUTTON1_DOUBLE_CLICKED)
res = form_driver(form, REQ_NEXT_PAGE);
else if (event.bstate & BUTTON1_TRIPLE_CLICKED)
res = form_driver(form, REQ_LAST_FIELD);
}
else if (wenclose(sub, event.y, event.x))
{ /* Inside the area we try to find the hit item */
int i;
ry = event.y;
rx = event.x;
if (wmouse_trafo(sub, &ry, &rx, FALSE))
{
int min_field = form->page[form->curpage].pmin;
int max_field = form->page[form->curpage].pmax;
for (i = min_field; i <= max_field; ++i)
{
FIELD *field = form->field[i];
if (Field_Is_Selectable(field)
&& Field_encloses(field, ry, rx) == E_OK)
{
res = _nc_Set_Current_Field(form, field);
if (res == E_OK)
res = _nc_Position_Form_Cursor(form);
if (res == E_OK
&& (event.bstate & BUTTON1_DOUBLE_CLICKED))
res = E_UNKNOWN_COMMAND;
break;
}
}
}
}
}
}
else
res = E_REQUEST_DENIED;
}
#endif /* NCURSES_MOUSE_VERSION */
else if (type == OK)
{
res = Data_Entry_w(form, c);
}
_nc_Refresh_Current_Field(form);
RETURN(res);
}
# endif /* USE_WIDEC_SUPPORT */
/*----------------------------------------------------------------------------
Field-Buffer manipulation routines.
The effects of setting a buffer are tightly coupled to the core of the form
driver logic. This is especially true in the case of growable fields.
So I don't separate this into a separate module.
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_field_buffer(FIELD *field,
| int buffer, char *value)
|
| Description : Set the given buffer of the field to the given value.
| Buffer 0 stores the displayed content of the field.
| For dynamic fields this may grow the fieldbuffers if
| the length of the value exceeds the current buffer
| length. For buffer 0 only printable values are allowed.
-| For static fields, the value needs not to be zero ter-
-| minated. It is copied up to the length of the buffer.
+| For static fields, the value must not be zero terminated.
+| It is copied up to the length of the buffer.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid argument
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_field_buffer(FIELD *field, int buffer, const char *value)
{
FIELD_CELL *p;
int res = E_OK;
int i;
int len;
#if USE_WIDEC_SUPPORT
FIELD_CELL *widevalue = 0;
#endif
T((T_CALLED("set_field_buffer(%p,%d,%s)"), (void *)field, buffer, _nc_visbuf(value)));
if (!field || !value || ((buffer < 0) || (buffer > field->nbuf)))
RETURN(E_BAD_ARGUMENT);
len = Buffer_Length(field);
if (Growable(field))
{
/* for a growable field we must assume zero terminated strings, because
somehow we have to detect the length of what should be copied.
*/
int vlen = (int)strlen(value);
if (vlen > len)
{
if (!Field_Grown(field,
(int)(1 + (vlen - len) / ((field->rows + field->nrow)
* field->cols))))
RETURN(E_SYSTEM_ERROR);
#if !USE_WIDEC_SUPPORT
len = vlen;
#endif
}
}
p = Address_Of_Nth_Buffer(field, buffer);
#if USE_WIDEC_SUPPORT
/*
* Use addstr's logic for converting a string to an array of cchar_t's.
* There should be a better way, but this handles nonspacing characters
* and other special cases that we really do not want to handle here.
*/
#if NCURSES_EXT_FUNCS
if (wresize(field->working, 1, Buffer_Length(field) + 1) == ERR)
#endif
{
delwin(field->working);
field->working = newpad(1, Buffer_Length(field) + 1);
}
len = Buffer_Length(field);
wclear(field->working);
(void)mvwaddstr(field->working, 0, 0, value);
if ((widevalue = typeCalloc(FIELD_CELL, len + 1)) == 0)
{
RETURN(E_SYSTEM_ERROR);
}
else
{
for (i = 0; i < field->drows; ++i)
{
(void)mvwin_wchnstr(field->working, 0, (int)i * field->dcols,
widevalue + ((int)i * field->dcols),
field->dcols);
}
for (i = 0; i < len; ++i)
{
if (CharEq(myZEROS, widevalue[i]))
{
while (i < len)
p[i++] = myBLANK;
break;
}
p[i] = widevalue[i];
}
free(widevalue);
}
#else
for (i = 0; i < len; ++i)
{
if (value[i] == '\0')
{
while (i < len)
p[i++] = myBLANK;
break;
}
p[i] = value[i];
}
#endif
if (buffer == 0)
{
int syncres;
if (((syncres = Synchronize_Field(field)) != E_OK) &&
(res == E_OK))
res = syncres;
if (((syncres = Synchronize_Linked_Fields(field)) != E_OK) &&
(res == E_OK))
res = syncres;
}
RETURN(res);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : char *field_buffer(const FIELD *field,int buffer)
|
| Description : Return the address of the buffer for the field.
|
| Return Values : Pointer to buffer or NULL if arguments were invalid.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(char *)
+FORM_EXPORT(char *)
field_buffer(const FIELD *field, int buffer)
{
char *result = 0;
T((T_CALLED("field_buffer(%p,%d)"), (const void *)field, buffer));
if (field && (buffer >= 0) && (buffer <= field->nbuf))
{
#if USE_WIDEC_SUPPORT
FIELD_CELL *data = Address_Of_Nth_Buffer(field, buffer);
size_t need = 0;
int size = Buffer_Length(field);
int n;
/* determine the number of bytes needed to store the expanded string */
for (n = 0; n < size; ++n)
{
if (!isWidecExt(data[n]) && data[n].chars[0] != L'\0')
{
mbstate_t state;
size_t next;
init_mb(state);
next = _nc_wcrtomb(0, data[n].chars[0], &state);
if (next > 0)
need += next;
}
}
/* allocate a place to store the expanded string */
if (field->expanded[buffer] != 0)
free(field->expanded[buffer]);
field->expanded[buffer] = typeMalloc(char, need + 1);
/*
* Expand the multibyte data.
*
* It may also be multi-column data. In that case, the data for a row
* may be null-padded to align to the dcols/drows layout (or it may
* contain embedded wide-character extensions). Change the null-padding
* to blanks as needed.
*/
if ((result = field->expanded[buffer]) != 0)
{
wclear(field->working);
wmove(field->working, 0, 0);
for (n = 0; n < size; ++n)
{
if (!isWidecExt(data[n]) && data[n].chars[0] != L'\0')
wadd_wch(field->working, &data[n]);
}
wmove(field->working, 0, 0);
winnstr(field->working, result, (int)need);
}
#else
result = Address_Of_Nth_Buffer(field, buffer);
#endif
}
returnPtr(result);
}
#if USE_WIDEC_SUPPORT
/*---------------------------------------------------------------------------
| Convert a multibyte string to a wide-character string. The result must be
| freed by the caller.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(wchar_t *)
+FORM_EXPORT(wchar_t *)
_nc_Widen_String(char *source, int *lengthp)
{
wchar_t *result = 0;
wchar_t wch;
size_t given = strlen(source);
size_t tries;
int pass;
int status;
#ifndef state_unused
mbstate_t state;
#endif
for (pass = 0; pass < 2; ++pass)
{
unsigned need = 0;
size_t passed = 0;
while (passed < given)
{
bool found = FALSE;
for (tries = 1, status = 0; tries <= (given - passed); ++tries)
{
int save = source[passed + tries];
source[passed + tries] = 0;
reset_mbytes(state);
status = check_mbytes(wch, source + passed, tries, state);
source[passed + tries] = (char)save;
if (status > 0)
{
found = TRUE;
break;
}
}
if (found)
{
if (pass)
{
result[need] = wch;
}
- passed += (size_t) status;
+ passed += (size_t)status;
++need;
}
else
{
if (pass)
{
result[need] = (wchar_t)source[passed];
}
++need;
++passed;
}
}
if (!pass)
{
if (!need)
break;
result = typeCalloc(wchar_t, need);
*lengthp = (int)need;
if (result == 0)
break;
}
}
return result;
}
#endif
/* frm_driver.c ends here */
diff --git a/contrib/ncurses/form/frm_hook.c b/contrib/ncurses/form/frm_hook.c
index 3051cddc9415..39d4d22f6cd7 100644
--- a/contrib/ncurses/form/frm_hook.c
+++ b/contrib/ncurses/form/frm_hook.c
@@ -1,144 +1,144 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 1998-2012,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_hook.c,v 1.19 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: frm_hook.c,v 1.20 2020/05/24 01:40:20 anonymous.maarten Exp $")
/* "Template" macro to generate function to set application specific hook */
#define GEN_HOOK_SET_FUNCTION( typ, name ) \
-NCURSES_IMPEXP int NCURSES_API set_ ## typ ## _ ## name (FORM *form, Form_Hook func)\
+FORM_IMPEXP int NCURSES_API set_ ## typ ## _ ## name (FORM *form, Form_Hook func)\
{\
TR_FUNC_BFR(1); \
T((T_CALLED("set_" #typ"_"#name"(%p,%s)"), (void *) form, TR_FUNC_ARG(0, func)));\
(Normalize_Form( form ) -> typ ## name) = func ;\
RETURN(E_OK);\
}
/* "Template" macro to generate function to get application specific hook */
#define GEN_HOOK_GET_FUNCTION( typ, name ) \
-NCURSES_IMPEXP Form_Hook NCURSES_API typ ## _ ## name ( const FORM *form )\
+FORM_IMPEXP Form_Hook NCURSES_API typ ## _ ## name ( const FORM *form )\
{\
T((T_CALLED(#typ "_" #name "(%p)"), (const void *) form));\
returnFormHook( Normalize_Form( form ) -> typ ## name );\
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_field_init(FORM *form, Form_Hook f)
|
| Description : Assigns an application defined initialization function
| to be called when the form is posted and just after
| the current field changes.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
GEN_HOOK_SET_FUNCTION(field, init)
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : Form_Hook field_init(const FORM *form)
|
| Description : Retrieve field initialization routine address.
|
| Return Values : The address or NULL if no hook defined.
+--------------------------------------------------------------------------*/
GEN_HOOK_GET_FUNCTION(field, init)
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_field_term(FORM *form, Form_Hook f)
|
| Description : Assigns an application defined finalization function
| to be called when the form is unposted and just before
| the current field changes.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
GEN_HOOK_SET_FUNCTION(field, term)
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : Form_Hook field_term(const FORM *form)
|
| Description : Retrieve field finalization routine address.
|
| Return Values : The address or NULL if no hook defined.
+--------------------------------------------------------------------------*/
GEN_HOOK_GET_FUNCTION(field, term)
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_form_init(FORM *form, Form_Hook f)
|
| Description : Assigns an application defined initialization function
| to be called when the form is posted and just after
| a page change.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
GEN_HOOK_SET_FUNCTION(form, init)
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : Form_Hook form_init(const FORM *form)
|
| Description : Retrieve form initialization routine address.
|
| Return Values : The address or NULL if no hook defined.
+--------------------------------------------------------------------------*/
GEN_HOOK_GET_FUNCTION(form, init)
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_form_term(FORM *form, Form_Hook f)
|
| Description : Assigns an application defined finalization function
| to be called when the form is unposted and just before
| a page change.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
GEN_HOOK_SET_FUNCTION(form, term)
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : Form_Hook form_term(const FORM *form)
|
| Description : Retrieve form finalization routine address.
|
| Return Values : The address or NULL if no hook defined.
+--------------------------------------------------------------------------*/
GEN_HOOK_GET_FUNCTION(form, term)
/* frm_hook.c ends here */
diff --git a/contrib/ncurses/form/frm_opts.c b/contrib/ncurses/form/frm_opts.c
index 18ab2938dcb4..cab044598042 100644
--- a/contrib/ncurses/form/frm_opts.c
+++ b/contrib/ncurses/form/frm_opts.c
@@ -1,128 +1,128 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2012,2013 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_opts.c,v 1.18 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: frm_opts.c,v 1.20 2020/12/12 00:37:00 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_form_opts(FORM *form, Form_Options opts)
|
| Description : Turns on the named options and turns off all the
| remaining options for that form.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid options
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_form_opts(FORM *form, Form_Options opts)
{
T((T_CALLED("set_form_opts(%p,%d)"), (void *)form, opts));
- opts &= (Form_Options) ALL_FORM_OPTS;
+ opts &= (Form_Options)ALL_FORM_OPTS;
if ((unsigned)opts & ~ALL_FORM_OPTS)
RETURN(E_BAD_ARGUMENT);
else
{
Normalize_Form(form)->opts = opts;
RETURN(E_OK);
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : Form_Options form_opts(const FORM *)
|
| Description : Retrieves the current form options.
|
| Return Values : The option flags.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(Form_Options)
+FORM_EXPORT(Form_Options)
form_opts(const FORM *form)
{
T((T_CALLED("form_opts(%p)"), (const void *)form));
- returnCode((Form_Options) ((unsigned)Normalize_Form(form)->opts & ALL_FORM_OPTS));
+ returnCode((Form_Options)((unsigned)Normalize_Form(form)->opts & ALL_FORM_OPTS));
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int form_opts_on(FORM *form, Form_Options opts)
|
| Description : Turns on the named options; no other options are
| changed.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid options
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
form_opts_on(FORM *form, Form_Options opts)
{
T((T_CALLED("form_opts_on(%p,%d)"), (void *)form, opts));
- opts &= (Form_Options) ALL_FORM_OPTS;
+ opts &= (Form_Options)ALL_FORM_OPTS;
if ((unsigned)opts & ~ALL_FORM_OPTS)
RETURN(E_BAD_ARGUMENT);
else
{
Normalize_Form(form)->opts |= opts;
RETURN(E_OK);
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int form_opts_off(FORM *form, Form_Options opts)
|
| Description : Turns off the named options; no other options are
| changed.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid options
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
form_opts_off(FORM *form, Form_Options opts)
{
T((T_CALLED("form_opts_off(%p,%d)"), (void *)form, opts));
- opts &= (Form_Options) ALL_FORM_OPTS;
+ opts &= (Form_Options)ALL_FORM_OPTS;
if ((unsigned)opts & ~ALL_FORM_OPTS)
RETURN(E_BAD_ARGUMENT);
else
{
Normalize_Form(form)->opts &= ~opts;
RETURN(E_OK);
}
}
/* frm_opts.c ends here */
diff --git a/contrib/ncurses/form/frm_page.c b/contrib/ncurses/form/frm_page.c
index c8569eef804b..a4030a2b5f62 100644
--- a/contrib/ncurses/form/frm_page.c
+++ b/contrib/ncurses/form/frm_page.c
@@ -1,107 +1,107 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_page.c,v 1.13 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: frm_page.c,v 1.14 2020/05/24 01:40:20 anonymous.maarten Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_form_page(FORM * form,int page)
|
| Description : Set the page number of the form.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid form pointer or page number
| E_BAD_STATE - called from a hook routine
| E_INVALID_FIELD - current field can't be left
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_form_page(FORM *form, int page)
{
int err = E_OK;
T((T_CALLED("set_form_page(%p,%d)"), (void *)form, page));
if (!form || (page < 0) || (page >= form->maxpage))
RETURN(E_BAD_ARGUMENT);
if (!(form->status & _POSTED))
{
form->curpage = (short)page;
form->current = _nc_First_Active_Field(form);
}
else
{
if (form->status & _IN_DRIVER)
err = E_BAD_STATE;
else
{
if (form->curpage != page)
{
if (!_nc_Internal_Validation(form))
err = E_INVALID_FIELD;
else
{
Call_Hook(form, fieldterm);
Call_Hook(form, formterm);
err = _nc_Set_Form_Page(form, page, (FIELD *)0);
Call_Hook(form, forminit);
Call_Hook(form, fieldinit);
_nc_Refresh_Current_Field(form);
}
}
}
}
RETURN(err);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int form_page(const FORM * form)
|
| Description : Return the current page of the form.
|
| Return Values : >= 0 : current page number
| -1 : invalid form pointer
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
form_page(const FORM *form)
{
T((T_CALLED("form_page(%p)"), (const void *)form));
returnCode(Normalize_Form(form)->curpage);
}
/* frm_page.c ends here */
diff --git a/contrib/ncurses/form/frm_post.c b/contrib/ncurses/form/frm_post.c
index 2f1ad8139268..ab880894d925 100644
--- a/contrib/ncurses/form/frm_post.c
+++ b/contrib/ncurses/form/frm_post.c
@@ -1,125 +1,125 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_post.c,v 1.13 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: frm_post.c,v 1.14 2020/05/24 01:40:20 anonymous.maarten Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int post_form(FORM * form)
|
| Description : Writes the form into its associated subwindow.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid form pointer
| E_POSTED - form already posted
| E_NOT_CONNECTED - no fields connected to form
| E_NO_ROOM - form doesn't fit into subwindow
| E_SYSTEM_ERROR - system error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
post_form(FORM *form)
{
WINDOW *formwin;
int err;
int page;
T((T_CALLED("post_form(%p)"), (void *)form));
if (!form)
RETURN(E_BAD_ARGUMENT);
if (form->status & _POSTED)
RETURN(E_POSTED);
if (!(form->field))
RETURN(E_NOT_CONNECTED);
formwin = Get_Form_Window(form);
if ((form->cols > getmaxx(formwin)) || (form->rows > getmaxy(formwin)))
RETURN(E_NO_ROOM);
/* reset form->curpage to an invalid value. This forces Set_Form_Page
to do the page initialization which is required by post_form.
*/
page = form->curpage;
form->curpage = -1;
if ((err = _nc_Set_Form_Page(form, page, form->current)) != E_OK)
RETURN(err);
SetStatus(form, _POSTED);
Call_Hook(form, forminit);
Call_Hook(form, fieldinit);
_nc_Refresh_Current_Field(form);
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int unpost_form(FORM * form)
|
| Description : Erase form from its associated subwindow.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid form pointer
| E_NOT_POSTED - form isn't posted
| E_BAD_STATE - called from a hook routine
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
unpost_form(FORM *form)
{
T((T_CALLED("unpost_form(%p)"), (void *)form));
if (!form)
RETURN(E_BAD_ARGUMENT);
if (!(form->status & _POSTED))
RETURN(E_NOT_POSTED);
if (form->status & _IN_DRIVER)
RETURN(E_BAD_STATE);
Call_Hook(form, fieldterm);
Call_Hook(form, formterm);
werase(Get_Form_Window(form));
delwin(form->w);
form->w = (WINDOW *)0;
ClrStatus(form, _POSTED);
RETURN(E_OK);
}
/* frm_post.c ends here */
diff --git a/contrib/ncurses/form/frm_req_name.c b/contrib/ncurses/form/frm_req_name.c
index 1e56c3dc18b2..27d4696619f4 100644
--- a/contrib/ncurses/form/frm_req_name.c
+++ b/contrib/ncurses/form/frm_req_name.c
@@ -1,178 +1,178 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2012,2015 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module form_request_name *
* Routines to handle external names of menu requests *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_req_name.c,v 1.20 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: frm_req_name.c,v 1.21 2020/05/24 01:40:20 anonymous.maarten Exp $")
#define DATA(s) { s }
static const char request_names[MAX_FORM_COMMAND - MIN_FORM_COMMAND + 1][13] =
{
DATA("NEXT_PAGE"),
DATA("PREV_PAGE"),
DATA("FIRST_PAGE"),
DATA("LAST_PAGE"),
DATA("NEXT_FIELD"),
DATA("PREV_FIELD"),
DATA("FIRST_FIELD"),
DATA("LAST_FIELD"),
DATA("SNEXT_FIELD"),
DATA("SPREV_FIELD"),
DATA("SFIRST_FIELD"),
DATA("SLAST_FIELD"),
DATA("LEFT_FIELD"),
DATA("RIGHT_FIELD"),
DATA("UP_FIELD"),
DATA("DOWN_FIELD"),
DATA("NEXT_CHAR"),
DATA("PREV_CHAR"),
DATA("NEXT_LINE"),
DATA("PREV_LINE"),
DATA("NEXT_WORD"),
DATA("PREV_WORD"),
DATA("BEG_FIELD"),
DATA("END_FIELD"),
DATA("BEG_LINE"),
DATA("END_LINE"),
DATA("LEFT_CHAR"),
DATA("RIGHT_CHAR"),
DATA("UP_CHAR"),
DATA("DOWN_CHAR"),
DATA("NEW_LINE"),
DATA("INS_CHAR"),
DATA("INS_LINE"),
DATA("DEL_CHAR"),
DATA("DEL_PREV"),
DATA("DEL_LINE"),
DATA("DEL_WORD"),
DATA("CLR_EOL"),
DATA("CLR_EOF"),
DATA("CLR_FIELD"),
DATA("OVL_MODE"),
DATA("INS_MODE"),
DATA("SCR_FLINE"),
DATA("SCR_BLINE"),
DATA("SCR_FPAGE"),
DATA("SCR_BPAGE"),
DATA("SCR_FHPAGE"),
DATA("SCR_BHPAGE"),
DATA("SCR_FCHAR"),
DATA("SCR_BCHAR"),
DATA("SCR_HFLINE"),
DATA("SCR_HBLINE"),
DATA("SCR_HFHALF"),
DATA("SCR_HBHALF"),
DATA("VALIDATION"),
DATA("NEXT_CHOICE"),
DATA("PREV_CHOICE")
};
#undef DATA
#define A_SIZE (sizeof(request_names)/sizeof(request_names[0]))
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : const char * form_request_name (int request);
|
| Description : Get the external name of a form request.
|
| Return Values : Pointer to name - on success
| NULL - on invalid request code
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(const char *)
+FORM_EXPORT(const char *)
form_request_name(int request)
{
T((T_CALLED("form_request_name(%d)"), request));
if ((request < MIN_FORM_COMMAND) || (request > MAX_FORM_COMMAND))
{
SET_ERROR(E_BAD_ARGUMENT);
returnCPtr((const char *)0);
}
else
returnCPtr(request_names[request - MIN_FORM_COMMAND]);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int form_request_by_name (const char *str);
|
| Description : Search for a request with this name.
|
| Return Values : Request Id - on success
| E_NO_MATCH - request not found
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
form_request_by_name(const char *str)
{
/* because the table is so small, it doesn't really hurt
to run sequentially through it.
*/
size_t i = 0;
char buf[16]; /* longest name is 10 chars */
T((T_CALLED("form_request_by_name(%s)"), _nc_visbuf(str)));
if (str != 0 && (i = strlen(str)) != 0)
{
if (i > sizeof(buf) - 2)
i = sizeof(buf) - 2;
memcpy(buf, str, i);
buf[i] = '\0';
for (i = 0; buf[i] != '\0'; ++i)
{
buf[i] = (char)toupper(UChar(buf[i]));
}
for (i = 0; i < A_SIZE; i++)
{
if (strcmp(request_names[i], buf) == 0)
returnCode(MIN_FORM_COMMAND + (int)i);
}
}
RETURN(E_NO_MATCH);
}
/* frm_req_name.c ends here */
diff --git a/contrib/ncurses/form/frm_scale.c b/contrib/ncurses/form/frm_scale.c
index 34c3611deeb3..833f74eb97e8 100644
--- a/contrib/ncurses/form/frm_scale.c
+++ b/contrib/ncurses/form/frm_scale.c
@@ -1,70 +1,70 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_scale.c,v 1.11 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: frm_scale.c,v 1.12 2020/05/24 01:40:20 anonymous.maarten Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int scale_form( const FORM *form, int *rows, int *cols )
|
| Description : Retrieve size of form
|
| Return Values : E_OK - no error
| E_BAD_ARGUMENT - invalid form pointer
| E_NOT_CONNECTED - no fields connected to form
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
scale_form(const FORM *form, int *rows, int *cols)
{
T((T_CALLED("scale_form(%p,%p,%p)"),
(const void *)form,
(void *)rows,
(void *)cols));
if (!form)
RETURN(E_BAD_ARGUMENT);
if (!(form->field))
RETURN(E_NOT_CONNECTED);
if (rows)
*rows = form->rows;
if (cols)
*cols = form->cols;
RETURN(E_OK);
}
/* frm_scale.c ends here */
diff --git a/contrib/ncurses/form/frm_sub.c b/contrib/ncurses/form/frm_sub.c
index 9621e302a571..f718ea4679a6 100644
--- a/contrib/ncurses/form/frm_sub.c
+++ b/contrib/ncurses/form/frm_sub.c
@@ -1,87 +1,87 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995-1997,2009 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_sub.c,v 1.13 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: frm_sub.c,v 1.14 2020/05/24 01:40:20 anonymous.maarten Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_form_sub(FORM *form, WINDOW *win)
|
| Description : Set the subwindow of the form to win.
|
| Return Values : E_OK - success
| E_POSTED - form is posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_form_sub(FORM *form, WINDOW *win)
{
T((T_CALLED("set_form_sub(%p,%p)"), (void *)form, (void *)win));
if (form && (form->status & _POSTED))
RETURN(E_POSTED);
else
{
#if NCURSES_SP_FUNCS
FORM *f = Normalize_Form(form);
f->sub = win ? win : StdScreen(Get_Form_Screen(f));
RETURN(E_OK);
#else
Normalize_Form(form)->sub = win;
RETURN(E_OK);
#endif
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : WINDOW *form_sub(const FORM *)
|
| Description : Retrieve the window of the form.
|
| Return Values : The pointer to the Subwindow.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(WINDOW *)
+FORM_EXPORT(WINDOW *)
form_sub(const FORM *form)
{
const FORM *f;
T((T_CALLED("form_sub(%p)"), (const void *)form));
f = Normalize_Form(form);
returnWin(Get_Form_Window(f));
}
/* frm_sub.c ends here */
diff --git a/contrib/ncurses/form/frm_user.c b/contrib/ncurses/form/frm_user.c
index e1210f2d4970..e4f86bb6ead0 100644
--- a/contrib/ncurses/form/frm_user.c
+++ b/contrib/ncurses/form/frm_user.c
@@ -1,73 +1,73 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_user.c,v 1.16 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: frm_user.c,v 1.18 2020/12/12 01:05:20 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_form_userptr(FORM *form, void *usrptr)
|
| Description : Set the pointer that is reserved in any form to store
-| application relevant informations
+| application relevant information.
|
| Return Values : E_OK - on success
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_form_userptr(FORM *form, void *usrptr)
{
T((T_CALLED("set_form_userptr(%p,%p)"), (void *)form, (void *)usrptr));
Normalize_Form(form)->usrptr = usrptr;
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : void *form_userptr(const FORM *form)
|
| Description : Return the pointer that is reserved in any form to
-| store application relevant informations.
+| store application relevant information.
|
| Return Values : Value of pointer. If no such pointer has been set,
| NULL is returned
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void *)
+FORM_EXPORT(void *)
form_userptr(const FORM *form)
{
T((T_CALLED("form_userptr(%p)"), (const void *)form));
returnVoidPtr(Normalize_Form(form)->usrptr);
}
/* frm_user.c ends here */
diff --git a/contrib/ncurses/form/frm_win.c b/contrib/ncurses/form/frm_win.c
index b7d1272daf85..5f3bc3c658f7 100644
--- a/contrib/ncurses/form/frm_win.c
+++ b/contrib/ncurses/form/frm_win.c
@@ -1,93 +1,93 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_win.c,v 1.17 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: frm_win.c,v 1.18 2020/05/24 01:40:20 anonymous.maarten Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int set_form_win(FORM *form,WINDOW *win)
|
| Description : Set the window of the form to win.
|
| Return Values : E_OK - success
| E_POSTED - form is posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
set_form_win(FORM *form, WINDOW *win)
{
T((T_CALLED("set_form_win(%p,%p)"), (void *)form, (void *)win));
if (form && (form->status & _POSTED))
RETURN(E_POSTED);
else
{
#if NCURSES_SP_FUNCS
FORM *f = Normalize_Form(form);
f->win = win ? win : StdScreen(Get_Form_Screen(f));
RETURN(E_OK);
#else
Normalize_Form(form)->win = win;
RETURN(E_OK);
#endif
}
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : WINDOW *form_win(const FORM *)
|
| Description : Retrieve the window of the form.
|
| Return Values : The pointer to the Window or stdscr if there is none.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(WINDOW *)
+FORM_EXPORT(WINDOW *)
form_win(const FORM *form)
{
WINDOW *result;
const FORM *f;
T((T_CALLED("form_win(%p)"), (const void *)form));
f = Normalize_Form(form);
#if NCURSES_SP_FUNCS
result = (f->win ? f->win : StdScreen(Get_Form_Screen(f)));
#else
result = (f->win ? f->win : stdscr);
#endif
returnWin(result);
}
/* frm_win.c ends here */
diff --git a/contrib/ncurses/form/fty_alnum.c b/contrib/ncurses/form/fty_alnum.c
index a2ca3514d8ed..854dc33eb59b 100644
--- a/contrib/ncurses/form/fty_alnum.c
+++ b/contrib/ncurses/form/fty_alnum.c
@@ -1,203 +1,203 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/***************************************************************************
* *
* Author : Juergen Pfeifer *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_alnum.c,v 1.25 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fty_alnum.c,v 1.29 2020/12/12 01:15:37 tom Exp $")
#define thisARG alnumARG
typedef struct
{
int width;
}
thisARG;
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Generic_This_Type(void *arg)
|
| Description : Allocate structure for alphanumeric type argument.
|
| Return Values : Pointer to argument structure or NULL on error
+--------------------------------------------------------------------------*/
static void *
Generic_This_Type(void *arg)
{
- thisARG *argp = (thisARG *) 0;
+ thisARG *argp = (thisARG *)0;
if (arg)
{
argp = typeMalloc(thisARG, 1);
if (argp)
{
T((T_CREATE("thisARG %p"), (void *)argp));
argp->width = *((int *)arg);
}
}
return ((void *)argp);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Make_This_Type(va_list *ap)
|
| Description : Allocate structure for alphanumeric type argument.
|
| Return Values : Pointer to argument structure or NULL on error
+--------------------------------------------------------------------------*/
static void *
Make_This_Type(va_list *ap)
{
int w = va_arg(*ap, int);
return Generic_This_Type((void *)&w);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Copy_ThisType(const void *argp)
|
| Description : Copy structure for alphanumeric type argument.
|
| Return Values : Pointer to argument structure or NULL on error.
+--------------------------------------------------------------------------*/
static void *
Copy_This_Type(const void *argp)
{
const thisARG *ap = (const thisARG *)argp;
thisARG *result = typeMalloc(thisARG, 1);
if (result)
{
T((T_CREATE("thisARG %p"), (void *)result));
*result = *ap;
}
return ((void *)result);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void Free_This_Type(void *argp)
|
| Description : Free structure for alphanumeric type argument.
|
| Return Values : -
+--------------------------------------------------------------------------*/
static void
Free_This_Type(void *argp)
{
if (argp)
free(argp);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_This_Character(
| int c,
| const void *argp)
|
| Description : Check a character for the alphanumeric type.
|
| Return Values : TRUE - character is valid
| FALSE - character is invalid
+--------------------------------------------------------------------------*/
static bool
Check_This_Character(int c, const void *argp GCC_UNUSED)
{
#if USE_WIDEC_SUPPORT
- if (iswalnum((wint_t) c))
+ if (iswalnum((wint_t)c))
return TRUE;
#endif
return (isalnum(UChar(c)) ? TRUE : FALSE);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_This_Field(
| FIELD *field,
| const void *argp)
|
| Description : Validate buffer content to be a valid alphanumeric value
|
| Return Values : TRUE - field is valid
| FALSE - field is invalid
+--------------------------------------------------------------------------*/
static bool
Check_This_Field(FIELD *field, const void *argp)
{
int width = ((const thisARG *)argp)->width;
unsigned char *bp = (unsigned char *)field_buffer(field, 0);
bool result = (width < 0);
Check_CTYPE_Field(result, bp, width, Check_This_Character);
return (result);
}
static FIELDTYPE typeTHIS =
{
_HAS_ARGS | _RESIDENT,
1, /* this is mutable, so we can't be const */
(FIELDTYPE *)0,
(FIELDTYPE *)0,
Make_This_Type,
Copy_This_Type,
Free_This_Type,
INIT_FT_FUNC(Check_This_Field),
INIT_FT_FUNC(Check_This_Character),
INIT_FT_FUNC(NULL),
INIT_FT_FUNC(NULL),
#if NCURSES_INTEROP_FUNCS
Generic_This_Type
#endif
};
-NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_ALNUM = &typeTHIS;
+FORM_EXPORT_VAR(FIELDTYPE *) TYPE_ALNUM = &typeTHIS;
#if NCURSES_INTEROP_FUNCS
/* The next routines are to simplify the use of ncurses from
- programming languages with restictions on interop with C level
+ programming languages with restrictions on interop with C level
constructs (e.g. variable access or va_list + ellipsis constructs)
*/
-NCURSES_EXPORT(FIELDTYPE *)
+FORM_EXPORT(FIELDTYPE *)
_nc_TYPE_ALNUM(void)
{
return TYPE_ALNUM;
}
#endif
/* fty_alnum.c ends here */
diff --git a/contrib/ncurses/form/fty_alpha.c b/contrib/ncurses/form/fty_alpha.c
index 7dec23f526ad..a37459a643a5 100644
--- a/contrib/ncurses/form/fty_alpha.c
+++ b/contrib/ncurses/form/fty_alpha.c
@@ -1,203 +1,203 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/***************************************************************************
* *
* Author : Juergen Pfeifer *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_alpha.c,v 1.27 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fty_alpha.c,v 1.31 2020/12/12 01:15:37 tom Exp $")
#define thisARG alphaARG
typedef struct
{
int width;
}
thisARG;
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Generic_This_Type(va_list *ap)
|
| Description : Allocate structure for alpha type argument.
|
| Return Values : Pointer to argument structure or NULL on error
+--------------------------------------------------------------------------*/
static void *
Generic_This_Type(void *arg)
{
- thisARG *argp = (thisARG *) 0;
+ thisARG *argp = (thisARG *)0;
if (arg)
{
argp = typeMalloc(thisARG, 1);
if (argp)
{
T((T_CREATE("thisARG %p"), (void *)argp));
argp->width = *((int *)arg);
}
}
return ((void *)argp);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Make_This_Type(va_list *ap)
|
| Description : Allocate structure for alpha type argument.
|
| Return Values : Pointer to argument structure or NULL on error
+--------------------------------------------------------------------------*/
static void *
Make_This_Type(va_list *ap)
{
int w = va_arg(*ap, int);
return Generic_This_Type((void *)&w);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Copy_This_Type(const void * argp)
|
| Description : Copy structure for alpha type argument.
|
| Return Values : Pointer to argument structure or NULL on error.
+--------------------------------------------------------------------------*/
static void *
Copy_This_Type(const void *argp)
{
const thisARG *ap = (const thisARG *)argp;
thisARG *result = typeMalloc(thisARG, 1);
if (result)
{
T((T_CREATE("thisARG %p"), (void *)result));
*result = *ap;
}
return ((void *)result);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void Free_This_Type(void *argp)
|
| Description : Free structure for alpha type argument.
|
| Return Values : -
+--------------------------------------------------------------------------*/
static void
Free_This_Type(void *argp)
{
if (argp)
free(argp);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_This_Character(
| int c,
| const void *argp)
|
| Description : Check a character for the alpha type.
|
| Return Values : TRUE - character is valid
| FALSE - character is invalid
+--------------------------------------------------------------------------*/
static bool
Check_This_Character(int c, const void *argp GCC_UNUSED)
{
#if USE_WIDEC_SUPPORT
- if (iswalpha((wint_t) c))
+ if (iswalpha((wint_t)c))
return TRUE;
#endif
return (isalpha(UChar(c)) ? TRUE : FALSE);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_This_Field(
| FIELD *field,
| const void *argp)
|
| Description : Validate buffer content to be a valid alpha value
|
| Return Values : TRUE - field is valid
| FALSE - field is invalid
+--------------------------------------------------------------------------*/
static bool
Check_This_Field(FIELD *field, const void *argp)
{
int width = ((const thisARG *)argp)->width;
unsigned char *bp = (unsigned char *)field_buffer(field, 0);
bool result = (width < 0);
Check_CTYPE_Field(result, bp, width, Check_This_Character);
return (result);
}
static FIELDTYPE typeTHIS =
{
_HAS_ARGS | _RESIDENT,
1, /* this is mutable, so we can't be const */
(FIELDTYPE *)0,
(FIELDTYPE *)0,
Make_This_Type,
Copy_This_Type,
Free_This_Type,
INIT_FT_FUNC(Check_This_Field),
INIT_FT_FUNC(Check_This_Character),
INIT_FT_FUNC(NULL),
INIT_FT_FUNC(NULL),
#if NCURSES_INTEROP_FUNCS
Generic_This_Type
#endif
};
-NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_ALPHA = &typeTHIS;
+FORM_EXPORT_VAR(FIELDTYPE *) TYPE_ALPHA = &typeTHIS;
#if NCURSES_INTEROP_FUNCS
/* The next routines are to simplify the use of ncurses from
- programming languages with restictions on interop with C level
+ programming languages with restrictions on interop with C level
constructs (e.g. variable access or va_list + ellipsis constructs)
*/
-NCURSES_EXPORT(FIELDTYPE *)
+FORM_EXPORT(FIELDTYPE *)
_nc_TYPE_ALPHA(void)
{
return TYPE_ALPHA;
}
#endif
/* fty_alpha.c ends here */
diff --git a/contrib/ncurses/form/fty_enum.c b/contrib/ncurses/form/fty_enum.c
index 71978e3aeebd..62242b56b42f 100644
--- a/contrib/ncurses/form/fty_enum.c
+++ b/contrib/ncurses/form/fty_enum.c
@@ -1,443 +1,442 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/***************************************************************************
* *
* Author : Juergen Pfeifer *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_enum.c,v 1.27 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fty_enum.c,v 1.31 2020/12/12 01:15:37 tom Exp $")
typedef struct
{
char **kwds;
int count;
bool checkcase;
bool checkunique;
}
enumARG;
typedef struct
{
char **kwds;
int ccase;
int cunique;
}
enumParams;
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Generic_Enum_Type(void * arg)
|
| Description : Allocate structure for enumeration type argument.
|
| Return Values : Pointer to argument structure or NULL on error
+--------------------------------------------------------------------------*/
static void *
Generic_Enum_Type(void *arg)
{
enumARG *argp = (enumARG *)0;
- enumParams *params = (enumParams *) arg;
+ enumParams *params = (enumParams *)arg;
if (params)
{
argp = typeMalloc(enumARG, 1);
if (argp)
{
int cnt = 0;
char **kp = (char **)0;
char **kwds = (char **)0;
char **kptarget;
int ccase, cunique;
T((T_CREATE("enumARG %p"), (void *)argp));
kwds = params->kwds;
ccase = params->ccase;
cunique = params->cunique;
argp->checkcase = ccase ? TRUE : FALSE;
argp->checkunique = cunique ? TRUE : FALSE;
argp->kwds = (char **)0;
kp = kwds;
while (kp && (*kp++))
cnt++;
argp->count = cnt;
if (cnt > 0)
{
/* We copy the keywords, because we can't rely on the fact
that the caller doesn't relocate or free the memory used
for the keywords (maybe he has GC)
*/
argp->kwds = typeMalloc(char *, cnt + 1);
kp = kwds;
if ((kptarget = argp->kwds) != 0)
{
while (kp && (*kp))
{
(*kptarget++) = strdup(*kp++);
}
*kptarget = (char *)0;
}
}
}
}
return (void *)argp;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Make_Enum_Type( va_list * ap )
|
| Description : Allocate structure for enumeration type argument.
|
| Return Values : Pointer to argument structure or NULL on error
+--------------------------------------------------------------------------*/
static void *
Make_Enum_Type(va_list *ap)
{
enumParams params;
params.kwds = va_arg(*ap, char **);
params.ccase = va_arg(*ap, int);
params.cunique = va_arg(*ap, int);
return Generic_Enum_Type((void *)&params);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Copy_Enum_Type( const void * argp )
|
| Description : Copy structure for enumeration type argument.
|
| Return Values : Pointer to argument structure or NULL on error.
+--------------------------------------------------------------------------*/
static void *
Copy_Enum_Type(const void *argp)
{
enumARG *result = (enumARG *)0;
if (argp)
{
const enumARG *ap = (const enumARG *)argp;
result = typeMalloc(enumARG, 1);
if (result)
{
T((T_CREATE("enumARG %p"), (void *)result));
*result = *ap;
if (ap->count > 0)
{
char **kptarget;
char **kp = ap->kwds;
result->kwds = typeMalloc(char *, 1 + ap->count);
if ((kptarget = result->kwds) != 0)
{
while (kp && (*kp))
{
(*kptarget++) = strdup(*kp++);
}
*kptarget = (char *)0;
}
}
}
}
return (void *)result;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void Free_Enum_Type( void * argp )
|
| Description : Free structure for enumeration type argument.
|
| Return Values : -
+--------------------------------------------------------------------------*/
static void
Free_Enum_Type(void *argp)
{
if (argp)
{
const enumARG *ap = (const enumARG *)argp;
if (ap->kwds && ap->count > 0)
{
char **kp = ap->kwds;
int cnt = 0;
while (kp && (*kp))
{
free(*kp++);
cnt++;
}
assert(cnt == ap->count);
free(ap->kwds);
}
free(argp);
}
}
#define SKIP_SPACE(x) while(((*(x))!='\0') && (is_blank(*(x)))) (x)++
#define NOMATCH 0
#define PARTIAL 1
#define EXACT 2
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static int Compare(const unsigned char * s,
| const unsigned char * buf,
| bool ccase )
|
| Description : Check whether or not the text in 'buf' matches the
| text in 's', at least partial.
|
| Return Values : NOMATCH - buffer doesn't match
| PARTIAL - buffer matches partially
| EXACT - buffer matches exactly
+--------------------------------------------------------------------------*/
static int
Compare(const unsigned char *s, const unsigned char *buf,
bool ccase)
{
SKIP_SPACE(buf); /* Skip leading spaces in both texts */
SKIP_SPACE(s);
if (*buf == '\0')
{
return (((*s) != '\0') ? NOMATCH : EXACT);
}
else
{
if (ccase)
{
while (*s++ == *buf)
{
if (*buf++ == '\0')
return EXACT;
}
}
else
{
while (toupper(*s++) == toupper(*buf))
{
if (*buf++ == '\0')
return EXACT;
}
}
}
/* At this location buf points to the first character where it no longer
matches with s. So if only blanks are following, we have a partial
match otherwise there is no match */
SKIP_SPACE(buf);
if (*buf)
return NOMATCH;
/* If it happens that the reference buffer is at its end, the partial
match is actually an exact match. */
return ((s[-1] != '\0') ? PARTIAL : EXACT);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_Enum_Field(
| FIELD * field,
| const void * argp)
|
| Description : Validate buffer content to be a valid enumeration value
|
| Return Values : TRUE - field is valid
| FALSE - field is invalid
+--------------------------------------------------------------------------*/
static bool
Check_Enum_Field(FIELD *field, const void *argp)
{
char **kwds = ((const enumARG *)argp)->kwds;
bool ccase = ((const enumARG *)argp)->checkcase;
bool unique = ((const enumARG *)argp)->checkunique;
unsigned char *bp = (unsigned char *)field_buffer(field, 0);
char *s, *t, *p;
int res;
while (kwds && (s = (*kwds++)))
{
if ((res = Compare((unsigned char *)s, bp, ccase)) != NOMATCH)
{
p = t = s; /* t is at least a partial match */
if ((unique && res != EXACT))
{
while (kwds && (p = *kwds++))
{
if ((res = Compare((unsigned char *)p, bp, ccase)) != NOMATCH)
{
if (res == EXACT)
{
t = p;
break;
}
else
t = (char *)0;
}
}
}
if (t)
{
set_field_buffer(field, 0, t);
return TRUE;
}
if (!p)
break;
}
}
return FALSE;
}
static const char *dummy[] =
{(char *)0};
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Next_Enum(FIELD * field,
| const void * argp)
|
| Description : Check for the next enumeration value
|
| Return Values : TRUE - next value found and loaded
| FALSE - no next value loaded
+--------------------------------------------------------------------------*/
static bool
Next_Enum(FIELD *field, const void *argp)
{
const enumARG *args = (const enumARG *)argp;
char **kwds = args->kwds;
bool ccase = args->checkcase;
int cnt = args->count;
unsigned char *bp = (unsigned char *)field_buffer(field, 0);
if (kwds)
{
while (cnt--)
{
if (Compare((unsigned char *)(*kwds++), bp, ccase) == EXACT)
break;
}
if (cnt <= 0)
kwds = args->kwds;
if ((cnt >= 0) || (Compare((const unsigned char *)dummy, bp, ccase) == EXACT))
{
set_field_buffer(field, 0, *kwds);
return TRUE;
}
}
return FALSE;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Previous_Enum(
| FIELD * field,
| const void * argp)
|
| Description : Check for the previous enumeration value
|
| Return Values : TRUE - previous value found and loaded
| FALSE - no previous value loaded
+--------------------------------------------------------------------------*/
static bool
Previous_Enum(FIELD *field, const void *argp)
{
const enumARG *args = (const enumARG *)argp;
int cnt = args->count;
char **kwds = &args->kwds[cnt - 1];
bool ccase = args->checkcase;
unsigned char *bp = (unsigned char *)field_buffer(field, 0);
if (kwds)
{
while (cnt--)
{
if (Compare((unsigned char *)(*kwds--), bp, ccase) == EXACT)
break;
}
if (cnt <= 0)
kwds = &args->kwds[args->count - 1];
if ((cnt >= 0) || (Compare((const unsigned char *)dummy, bp, ccase) == EXACT))
{
set_field_buffer(field, 0, *kwds);
return TRUE;
}
}
return FALSE;
}
static FIELDTYPE typeENUM =
{
_HAS_ARGS | _HAS_CHOICE | _RESIDENT,
1, /* this is mutable, so we can't be const */
(FIELDTYPE *)0,
(FIELDTYPE *)0,
Make_Enum_Type,
Copy_Enum_Type,
Free_Enum_Type,
INIT_FT_FUNC(Check_Enum_Field),
INIT_FT_FUNC(NULL),
INIT_FT_FUNC(Next_Enum),
INIT_FT_FUNC(Previous_Enum),
#if NCURSES_INTEROP_FUNCS
Generic_Enum_Type
#endif
};
-NCURSES_EXPORT_VAR(FIELDTYPE *)
-TYPE_ENUM = &typeENUM;
+FORM_EXPORT_VAR(FIELDTYPE *) TYPE_ENUM = &typeENUM;
#if NCURSES_INTEROP_FUNCS
/* The next routines are to simplify the use of ncurses from
- programming languages with restictions on interop with C level
+ programming languages with restrictions on interop with C level
constructs (e.g. variable access or va_list + ellipsis constructs)
*/
-NCURSES_EXPORT(FIELDTYPE *)
+FORM_EXPORT(FIELDTYPE *)
_nc_TYPE_ENUM(void)
{
return TYPE_ENUM;
}
#endif
/* fty_enum.c ends here */
diff --git a/contrib/ncurses/form/fty_generic.c b/contrib/ncurses/form/fty_generic.c
index 159d30596dbb..3672d658cb31 100644
--- a/contrib/ncurses/form/fty_generic.c
+++ b/contrib/ncurses/form/fty_generic.c
@@ -1,304 +1,305 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 2008-2012,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/***************************************************************************
* *
* Author : Juergen Pfeifer *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_generic.c,v 1.10 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fty_generic.c,v 1.14 2020/12/12 17:27:44 tom Exp $")
/*
* This is not a full implementation of a field type, but adds some
* support for higher level languages with some restrictions to interop
- * with C language. Especially the collection of arguments for the
+ * with C language. In particular, the collection of arguments for the
* various fieldtypes is not based on the vararg C mechanism, but on a
- * iterator based callback mechanism that allowes the high level language
+ * iterator based callback mechanism that allows the high level language
* to provide the arguments as a structure. Most languages have mechanisms
* to layout structures so that they can be passed to C.
+ *
* The languages can register a new generic fieldtype dynamically and store
* a handle (key) to the calling object as an argument. Together with that
* it can register a freearg callback, so that the high level language
* remains in control of the memory management of the arguments they pass.
* The design idea is, that the high-level language - typically a OO
- * language like C# or Java, uses it's own dispatching mechanisms
+ * language like C# or Java, uses its own dispatching mechanisms
* (polymorphism) to call the proper check routines responsible for the
* argument type. So these language implement typically only one generic
* fieldtype they register with the forms library using this call.
*
- * For that purpose we have extended the fieldtype struc by a new element
+ * For that purpose we have extended the fieldtype structure by a new element
* that gets the arguments from a single struct passed by the caller.
*
*/
#if NCURSES_INTEROP_FUNCS
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Generic_This_Type( void * arg )
|
| Description : We interpret the passed arg just as a handle the
| calling language uses to keep track of its allocated
| argument structures. We can simply copy it back.
|
| Return Values : Pointer to argument structure
+--------------------------------------------------------------------------*/
static void *
Generic_This_Type(void *arg)
{
return (arg);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : FIELDTYPE *_nc_generic_fieldtype(
| bool (* const field_check)(FIELD *,const void *),
| bool (* const char_check) (int, const void *),
| bool (*const next)(FORM*,FIELD*,const void*),
| bool (*const prev)(FORM*,FIELD*,const void*),
| void (*freecallback)(void*))
|
| Description : Create a new fieldtype. The application programmer must
| write a field_check and a char_check function and give
| them as input to this call. A callback to allow the
| release of the allocated memory must also be provided.
| For generic field types, we provide some more
| information about the field as parameters.
|
| If an error occurs, errno is set to
| E_BAD_ARGUMENT - invalid arguments
| E_SYSTEM_ERROR - system error (no memory)
|
| Return Values : Fieldtype pointer or NULL if error occurred
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELDTYPE *)
+FORM_EXPORT(FIELDTYPE *)
_nc_generic_fieldtype(bool (*const field_check) (FORM *, FIELD *, const void *),
bool (*const char_check) (int, FORM *, FIELD *, const
void *),
bool (*const next) (FORM *, FIELD *, const void *),
bool (*const prev) (FORM *, FIELD *, const void *),
void (*freecallback) (void *))
{
int code = E_SYSTEM_ERROR;
FIELDTYPE *res = (FIELDTYPE *)0;
TR_FUNC_BFR(5);
T((T_CALLED("_nc_generic_fieldtype(%s,%s,%s,%s,%s)"),
TR_FUNC_ARG(0, field_check),
TR_FUNC_ARG(1, char_check),
TR_FUNC_ARG(2, next),
TR_FUNC_ARG(3, prev),
TR_FUNC_ARG(4, freecallback)));
if (field_check || char_check)
{
res = typeMalloc(FIELDTYPE, 1);
if (res)
{
*res = *_nc_Default_FieldType;
SetStatus(res, (_HAS_ARGS | _GENERIC));
res->fieldcheck.gfcheck = field_check;
res->charcheck.gccheck = char_check;
res->genericarg = Generic_This_Type;
res->freearg = freecallback;
res->enum_next.gnext = next;
res->enum_prev.gprev = prev;
code = E_OK;
}
}
else
code = E_BAD_ARGUMENT;
if (E_OK != code)
SET_ERROR(code);
returnFieldType(res);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static TypeArgument *GenericArgument(
| const FIELDTYPE* typ,
| int (*argiterator)(void**),
| int* err)
|
| Description : The iterator callback must browse through all fieldtype
| parameters that have an argument associated with the
| type. The iterator returns 1 if the operation to get
| the next element was successful, 0 otherwise. If the
| iterator could move to the next argument, it fills
| the void* pointer representing the argument into the
| location provided as argument to the iterator.
| The err reference is used to keep track of errors.
|
| Return Values : Pointer to argument structure
+--------------------------------------------------------------------------*/
static TypeArgument *
GenericArgument(const FIELDTYPE *typ,
int (*argiterator) (void **), int *err)
{
TypeArgument *res = (TypeArgument *)0;
if (typ != 0 && (typ->status & _HAS_ARGS) != 0 && err != 0 && argiterator != 0)
{
if (typ->status & _LINKED_TYPE)
{
/* Composite fieldtypes keep track internally of their own memory */
TypeArgument *p = typeMalloc(TypeArgument, 1);
if (p)
{
p->left = GenericArgument(typ->left, argiterator, err);
p->right = GenericArgument(typ->right, argiterator, err);
return p;
}
else
*err += 1;
}
else
{
assert(typ->genericarg != (void *)0);
if (typ->genericarg == 0)
*err += 1;
else
{
void *argp;
int valid = argiterator(&argp);
if (valid == 0 || argp == 0 ||
!(res = (TypeArgument *)typ->genericarg(argp)))
{
*err += 1;
}
}
}
}
return res;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : int _nc_set_generic_fieldtype(
| FIELD* field,
| FIELDTYPE* ftyp,
| int (*argiterator)(void**))
|
| Description : Assign the fieldtype to the field and use the iterator
| mechanism to get the arguments when a check is
| performed.
|
| Return Values : E_OK if all went well
| E_SYSTEM_ERROR if an error occurred
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+FORM_EXPORT(int)
_nc_set_generic_fieldtype(FIELD *field,
FIELDTYPE *ftyp,
int (*argiterator) (void **))
{
int code = E_SYSTEM_ERROR;
int err = 0;
if (field)
{
if (field && field->type)
_nc_Free_Type(field);
field->type = ftyp;
if (ftyp)
{
if (argiterator)
{
/* The precondition is that the iterator is reset */
field->arg = (void *)GenericArgument(field->type, argiterator, &err);
if (err)
{
_nc_Free_Argument(field->type, (TypeArgument *)(field->arg));
field->type = (FIELDTYPE *)0;
field->arg = (void *)0;
}
else
{
code = E_OK;
if (field->type)
field->type->ref++;
}
}
}
else
{
field->arg = (void *)0;
code = E_OK;
}
}
return code;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : WINDOW* _nc_form_cursor(
| FORM* form,
| int *pRow, int *pCol)
|
| Description : Get the current position of the form cursor position
| We also return the field window
|
-| Return Values : The fields Window or NULL on error
+| Return Values : The field's Window or NULL on error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(WINDOW *)
+FORM_EXPORT(WINDOW *)
_nc_form_cursor(const FORM *form, int *pRow, int *pCol)
{
int code = E_SYSTEM_ERROR;
WINDOW *res = (WINDOW *)0;
if (!(form == 0 || pRow == 0 || pCol == 0))
{
*pRow = form->currow;
*pCol = form->curcol;
res = form->w;
code = E_OK;
}
if (code != E_OK)
SET_ERROR(code);
return res;
}
#else
extern void _nc_fty_generic(void);
void
_nc_fty_generic(void)
{
}
#endif
/* fty_generic.c ends here */
diff --git a/contrib/ncurses/form/fty_int.c b/contrib/ncurses/form/fty_int.c
index 71056404f0e7..d06ab8b6f389 100644
--- a/contrib/ncurses/form/fty_int.c
+++ b/contrib/ncurses/form/fty_int.c
@@ -1,295 +1,296 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/***************************************************************************
* *
* Author : Juergen Pfeifer *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_int.c,v 1.27 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fty_int.c,v 1.31 2020/12/12 01:15:37 tom Exp $")
#if USE_WIDEC_SUPPORT
#define isDigit(c) (iswdigit((wint_t)(c)) || isdigit(UChar(c)))
#else
#define isDigit(c) isdigit(UChar(c))
#endif
#define thisARG integerARG
typedef struct
{
int precision;
long low;
long high;
}
thisARG;
typedef struct
{
int precision;
long low;
long high;
}
integerPARM;
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Generic_This_Type( void * arg )
|
| Description : Allocate structure for integer type argument.
|
| Return Values : Pointer to argument structure or NULL on error
+--------------------------------------------------------------------------*/
static void *
Generic_This_Type(void *arg)
{
- thisARG *argp = (thisARG *) 0;
- thisARG *param = (thisARG *) arg;
+ thisARG *argp = (thisARG *)0;
+ thisARG *param = (thisARG *)arg;
if (param)
{
argp = typeMalloc(thisARG, 1);
if (argp)
{
T((T_CREATE("thisARG %p"), (void *)argp));
*argp = *param;
}
}
return (void *)argp;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Make_This_Type( va_list * ap )
|
| Description : Allocate structure for integer type argument.
|
| Return Values : Pointer to argument structure or NULL on error
+--------------------------------------------------------------------------*/
static void *
Make_This_Type(va_list *ap)
{
thisARG arg;
arg.precision = va_arg(*ap, int);
arg.low = va_arg(*ap, long);
arg.high = va_arg(*ap, long);
return Generic_This_Type((void *)&arg);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Copy_This_Type(const void * argp)
|
| Description : Copy structure for integer type argument.
|
| Return Values : Pointer to argument structure or NULL on error.
+--------------------------------------------------------------------------*/
static void *
Copy_This_Type(const void *argp)
{
const thisARG *ap = (const thisARG *)argp;
- thisARG *result = (thisARG *) 0;
+ thisARG *result = (thisARG *)0;
if (argp)
{
result = typeMalloc(thisARG, 1);
+
if (result)
{
T((T_CREATE("thisARG %p"), (void *)result));
*result = *ap;
}
}
return (void *)result;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void Free_This_Type(void * argp)
|
| Description : Free structure for integer type argument.
|
| Return Values : -
+--------------------------------------------------------------------------*/
static void
Free_This_Type(void *argp)
{
if (argp)
free(argp);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_This_Field(
| FIELD * field,
| const void * argp)
|
| Description : Validate buffer content to be a valid integer value
|
| Return Values : TRUE - field is valid
| FALSE - field is invalid
+--------------------------------------------------------------------------*/
static bool
Check_This_Field(FIELD *field, const void *argp)
{
const thisARG *argi = (const thisARG *)argp;
long low = argi->low;
long high = argi->high;
int prec = argi->precision;
unsigned char *bp = (unsigned char *)field_buffer(field, 0);
char *s = (char *)bp;
long val;
char buf[100];
bool result = FALSE;
while (*bp && *bp == ' ')
bp++;
if (*bp)
{
if (*bp == '-')
bp++;
#if USE_WIDEC_SUPPORT
if (*bp)
{
bool blank = FALSE;
int len;
int n;
wchar_t *list = _nc_Widen_String((char *)bp, &len);
if (list != 0)
{
result = TRUE;
for (n = 0; n < len; ++n)
{
if (blank)
{
if (list[n] != ' ')
{
result = FALSE;
break;
}
}
else if (list[n] == ' ')
{
blank = TRUE;
}
else if (!isDigit(list[n]))
{
result = FALSE;
break;
}
}
free(list);
}
}
#else
while (*bp)
{
if (!isdigit(UChar(*bp)))
break;
bp++;
}
while (*bp && *bp == ' ')
bp++;
result = (*bp == '\0');
#endif
if (result)
{
val = atol(s);
if (low < high)
{
if (val < low || val > high)
result = FALSE;
}
if (result)
{
_nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf))
"%.*ld", (prec > 0 ? prec : 0), val);
set_field_buffer(field, 0, buf);
}
}
}
return (result);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_This_Character(
| int c,
| const void * argp)
|
| Description : Check a character for the integer type.
|
| Return Values : TRUE - character is valid
| FALSE - character is invalid
+--------------------------------------------------------------------------*/
static bool
Check_This_Character(int c, const void *argp GCC_UNUSED)
{
return ((isDigit(UChar(c)) || (c == '-')) ? TRUE : FALSE);
}
static FIELDTYPE typeTHIS =
{
_HAS_ARGS | _RESIDENT,
1, /* this is mutable, so we can't be const */
(FIELDTYPE *)0,
(FIELDTYPE *)0,
Make_This_Type,
Copy_This_Type,
Free_This_Type,
INIT_FT_FUNC(Check_This_Field),
INIT_FT_FUNC(Check_This_Character),
INIT_FT_FUNC(NULL),
INIT_FT_FUNC(NULL),
#if NCURSES_INTEROP_FUNCS
Generic_This_Type
#endif
};
-NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_INTEGER = &typeTHIS;
+FORM_EXPORT_VAR(FIELDTYPE *) TYPE_INTEGER = &typeTHIS;
#if NCURSES_INTEROP_FUNCS
/* The next routines are to simplify the use of ncurses from
- programming languages with restictions on interop with C level
+ programming languages with restrictions on interop with C level
constructs (e.g. variable access or va_list + ellipsis constructs)
*/
-NCURSES_EXPORT(FIELDTYPE *)
+FORM_EXPORT(FIELDTYPE *)
_nc_TYPE_INTEGER(void)
{
return TYPE_INTEGER;
}
#endif
/* fty_int.c ends here */
diff --git a/contrib/ncurses/form/fty_ipv4.c b/contrib/ncurses/form/fty_ipv4.c
index 37133770c392..d79683de68d3 100644
--- a/contrib/ncurses/form/fty_ipv4.c
+++ b/contrib/ncurses/form/fty_ipv4.c
@@ -1,121 +1,121 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2006,2009 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/***************************************************************************
* *
* Author : Per Foreby, perf@efd.lth.se *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_ipv4.c,v 1.11 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fty_ipv4.c,v 1.14 2020/12/12 01:15:37 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_IPV4_Field(
| FIELD * field,
| const void * argp)
|
| Description : Validate buffer content to be a valid IP number (Ver. 4)
|
| Return Values : TRUE - field is valid
| FALSE - field is invalid
+--------------------------------------------------------------------------*/
static bool
Check_IPV4_Field(FIELD *field, const void *argp GCC_UNUSED)
{
char *bp = field_buffer(field, 0);
int num = 0, len;
unsigned int d1, d2, d3, d4;
if (isdigit(UChar(*bp))) /* Must start with digit */
{
num = sscanf(bp, "%u.%u.%u.%u%n", &d1, &d2, &d3, &d4, &len);
if (num == 4)
{
bp += len; /* Make bp point to what sscanf() left */
while (isspace(UChar(*bp)))
bp++; /* Allow trailing whitespace */
}
}
return ((num != 4 || *bp || d1 > 255 || d2 > 255
|| d3 > 255 || d4 > 255) ? FALSE : TRUE);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_IPV4_Character(
| int c,
| const void *argp )
|
| Description : Check a character for unsigned type or period.
|
| Return Values : TRUE - character is valid
| FALSE - character is invalid
+--------------------------------------------------------------------------*/
static bool
Check_IPV4_Character(int c, const void *argp GCC_UNUSED)
{
return ((isdigit(UChar(c)) || (c == '.')) ? TRUE : FALSE);
}
static FIELDTYPE typeIPV4 =
{
_RESIDENT,
1, /* this is mutable, so we can't be const */
(FIELDTYPE *)0,
(FIELDTYPE *)0,
NULL,
NULL,
NULL,
INIT_FT_FUNC(Check_IPV4_Field),
INIT_FT_FUNC(Check_IPV4_Character),
INIT_FT_FUNC(NULL),
INIT_FT_FUNC(NULL),
#if NCURSES_INTEROP_FUNCS
NULL
#endif
};
-NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_IPV4 = &typeIPV4;
+FORM_EXPORT_VAR(FIELDTYPE *) TYPE_IPV4 = &typeIPV4;
#if NCURSES_INTEROP_FUNCS
/* The next routines are to simplify the use of ncurses from
- programming languages with restictions on interop with C level
+ programming languages with restrictions on interop with C level
constructs (e.g. variable access or va_list + ellipsis constructs)
*/
-NCURSES_EXPORT(FIELDTYPE *)
+FORM_EXPORT(FIELDTYPE *)
_nc_TYPE_IPV4(void)
{
return TYPE_IPV4;
}
#endif
/* fty_ipv4.c ends here */
diff --git a/contrib/ncurses/form/fty_num.c b/contrib/ncurses/form/fty_num.c
index b4dfeb978ca3..9eafaecb726c 100644
--- a/contrib/ncurses/form/fty_num.c
+++ b/contrib/ncurses/form/fty_num.c
@@ -1,341 +1,342 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/***************************************************************************
* *
* Author : Juergen Pfeifer *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_num.c,v 1.32 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fty_num.c,v 1.36 2020/12/12 01:15:37 tom Exp $")
#if HAVE_LOCALE_H
#include <locale.h>
#endif
#if HAVE_LOCALE_H && HAVE_LOCALECONV
#define isDecimalPoint(c) ((c) == ((L && L->decimal_point) ? *(L->decimal_point) : '.'))
#else
#define isDecimalPoint(c) ((c) == '.')
#endif
#if USE_WIDEC_SUPPORT
#define isDigit(c) (iswdigit((wint_t)(c)) || isdigit(UChar(c)))
#else
#define isDigit(c) isdigit(UChar(c))
#endif
#define thisARG numericARG
typedef struct
{
int precision;
double low;
double high;
struct lconv *L;
}
thisARG;
typedef struct
{
int precision;
double low;
double high;
}
thisPARM;
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Generic_This_Type(void * arg)
|
| Description : Allocate structure for numeric type argument.
|
| Return Values : Pointer to argument structure or NULL on error
+--------------------------------------------------------------------------*/
static void *
Generic_This_Type(void *arg)
{
- thisARG *argn = (thisARG *) 0;
- thisPARM *args = (thisPARM *) arg;
+ thisARG *argn = (thisARG *)0;
+ thisPARM *args = (thisPARM *)arg;
if (args)
{
argn = typeMalloc(thisARG, 1);
if (argn)
{
T((T_CREATE("thisARG %p"), (void *)argn));
argn->precision = args->precision;
argn->low = args->low;
argn->high = args->high;
#if HAVE_LOCALE_H && HAVE_LOCALECONV
argn->L = localeconv();
#else
argn->L = NULL;
#endif
}
}
return (void *)argn;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Make_This_Type(va_list * ap)
|
| Description : Allocate structure for numeric type argument.
|
| Return Values : Pointer to argument structure or NULL on error
+--------------------------------------------------------------------------*/
static void *
Make_This_Type(va_list *ap)
{
thisPARM arg;
arg.precision = va_arg(*ap, int);
arg.low = va_arg(*ap, double);
arg.high = va_arg(*ap, double);
return Generic_This_Type((void *)&arg);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Copy_This_Type(const void * argp)
|
| Description : Copy structure for numeric type argument.
|
| Return Values : Pointer to argument structure or NULL on error.
+--------------------------------------------------------------------------*/
static void *
Copy_This_Type(const void *argp)
{
const thisARG *ap = (const thisARG *)argp;
- thisARG *result = (thisARG *) 0;
+ thisARG *result = (thisARG *)0;
if (argp)
{
result = typeMalloc(thisARG, 1);
+
if (result)
{
T((T_CREATE("thisARG %p"), (void *)result));
*result = *ap;
}
}
return (void *)result;
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void Free_This_Type(void * argp)
|
| Description : Free structure for numeric type argument.
|
| Return Values : -
+--------------------------------------------------------------------------*/
static void
Free_This_Type(void *argp)
{
if (argp)
free(argp);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_This_Field(FIELD * field,
| const void * argp)
|
| Description : Validate buffer content to be a valid numeric value
|
| Return Values : TRUE - field is valid
| FALSE - field is invalid
+--------------------------------------------------------------------------*/
static bool
Check_This_Field(FIELD *field, const void *argp)
{
const thisARG *argn = (const thisARG *)argp;
double low = argn->low;
double high = argn->high;
int prec = argn->precision;
unsigned char *bp = (unsigned char *)field_buffer(field, 0);
char *s = (char *)bp;
double val = 0.0;
struct lconv *L = argn->L;
char buf[64];
bool result = FALSE;
while (*bp && *bp == ' ')
bp++;
if (*bp)
{
if (*bp == '-' || *bp == '+')
bp++;
#if USE_WIDEC_SUPPORT
if (*bp)
{
bool blank = FALSE;
int state = 0;
int len;
int n;
wchar_t *list = _nc_Widen_String((char *)bp, &len);
if (list != 0)
{
result = TRUE;
for (n = 0; n < len; ++n)
{
if (blank)
{
if (list[n] != ' ')
{
result = FALSE;
break;
}
}
else if (list[n] == ' ')
{
blank = TRUE;
}
else if (isDecimalPoint(list[n]))
{
if (++state > 1)
{
result = FALSE;
break;
}
}
else if (!isDigit(list[n]))
{
result = FALSE;
break;
}
}
free(list);
}
}
#else
while (*bp)
{
if (!isdigit(UChar(*bp)))
break;
bp++;
}
if (isDecimalPoint(*bp))
{
bp++;
while (*bp)
{
if (!isdigit(UChar(*bp)))
break;
bp++;
}
}
while (*bp && *bp == ' ')
bp++;
result = (*bp == '\0');
#endif
if (result)
{
val = atof(s);
if (low < high)
{
if (val < low || val > high)
result = FALSE;
}
if (result)
{
_nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf))
"%.*f", (prec > 0 ? prec : 0), val);
set_field_buffer(field, 0, buf);
}
}
}
return (result);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_This_Character(
| int c,
| const void * argp)
|
| Description : Check a character for the numeric type.
|
| Return Values : TRUE - character is valid
| FALSE - character is invalid
+--------------------------------------------------------------------------*/
static bool
Check_This_Character(int c, const void *argp)
{
const thisARG *argn = (const thisARG *)argp;
struct lconv *L = argn->L;
return ((isDigit(c) ||
c == '+' ||
c == '-' ||
isDecimalPoint(c))
? TRUE
: FALSE);
}
static FIELDTYPE typeTHIS =
{
_HAS_ARGS | _RESIDENT,
1, /* this is mutable, so we can't be const */
(FIELDTYPE *)0,
(FIELDTYPE *)0,
Make_This_Type,
Copy_This_Type,
Free_This_Type,
INIT_FT_FUNC(Check_This_Field),
INIT_FT_FUNC(Check_This_Character),
INIT_FT_FUNC(NULL),
INIT_FT_FUNC(NULL),
#if NCURSES_INTEROP_FUNCS
Generic_This_Type
#endif
};
-NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_NUMERIC = &typeTHIS;
+FORM_EXPORT_VAR(FIELDTYPE *) TYPE_NUMERIC = &typeTHIS;
#if NCURSES_INTEROP_FUNCS
/* The next routines are to simplify the use of ncurses from
- programming languages with restictions on interop with C level
+ programming languages with restrictions on interop with C level
constructs (e.g. variable access or va_list + ellipsis constructs)
*/
-NCURSES_EXPORT(FIELDTYPE *)
+FORM_EXPORT(FIELDTYPE *)
_nc_TYPE_NUMERIC(void)
{
return TYPE_NUMERIC;
}
#endif
/* fty_num.c ends here */
diff --git a/contrib/ncurses/form/fty_regex.c b/contrib/ncurses/form/fty_regex.c
index da0ef08c29b3..616b383ad49e 100644
--- a/contrib/ncurses/form/fty_regex.c
+++ b/contrib/ncurses/form/fty_regex.c
@@ -1,357 +1,357 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 1998-2012,2015 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/***************************************************************************
* *
* Author : Juergen Pfeifer *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_regex.c,v 1.28 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: fty_regex.c,v 1.32 2020/12/12 01:15:37 tom Exp $")
#if HAVE_REGEX_H_FUNCS || HAVE_LIB_PCRE2 /* We prefer POSIX regex */
-#if HAVE_PCRE2_POSIX_H
-#include <pcre2-posix.h>
+#if HAVE_PCRE2POSIX_H
+#include <pcre2posix.h>
#elif HAVE_PCREPOSIX_H
#include <pcreposix.h>
#else
#include <regex.h>
#endif
typedef struct
{
regex_t *pRegExp;
unsigned long *refCount;
}
RegExp_Arg;
#elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS
#undef RETURN
static int reg_errno;
static char *
RegEx_Init(char *instring)
{
reg_errno = 0;
return instring;
}
static char *
RegEx_Error(int code)
{
reg_errno = code;
return 0;
}
#define INIT register char *sp = RegEx_Init(instring);
#define GETC() (*sp++)
#define PEEKC() (*sp)
#define UNGETC(c) (--sp)
#define RETURN(c) return(c)
#define ERROR(c) return RegEx_Error(c)
#if HAVE_REGEXP_H_FUNCS
#include <regexp.h>
#else
#include <regexpr.h>
#endif
typedef struct
{
char *compiled_expression;
unsigned long *refCount;
}
RegExp_Arg;
/* Maximum Length we allow for a compiled regular expression */
#define MAX_RX_LEN (2048)
#define RX_INCREMENT (256)
#endif
#if HAVE_REGEX_H_FUNCS | HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS
# define MAYBE_UNUSED
#else
# define MAYBE_UNUSED GCC_UNUSED
#endif
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Generic_RegularExpression_Type(void * arg)
|
| Description : Allocate structure for regex type argument.
|
| Return Values : Pointer to argument structure or NULL on error
+--------------------------------------------------------------------------*/
static void *
Generic_RegularExpression_Type(void *arg MAYBE_UNUSED)
{
#if HAVE_REGEX_H_FUNCS
char *rx = (char *)arg;
RegExp_Arg *preg = (RegExp_Arg *)0;
if (rx)
{
preg = typeCalloc(RegExp_Arg, 1);
if (preg)
{
T((T_CREATE("RegExp_Arg %p"), (void *)preg));
if (((preg->pRegExp = typeMalloc(regex_t, 1)) != 0)
&& !regcomp(preg->pRegExp, rx,
(REG_EXTENDED | REG_NOSUB | REG_NEWLINE)))
{
T((T_CREATE("regex_t %p"), (void *)preg->pRegExp));
if ((preg->refCount = typeMalloc(unsigned long, 1)) != 0)
*(preg->refCount) = 1;
}
else
{
if (preg->pRegExp)
free(preg->pRegExp);
free(preg);
preg = (RegExp_Arg *)0;
}
}
}
return ((void *)preg);
#elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS
char *rx = (char *)arg;
RegExp_Arg *pArg = (RegExp_Arg *)0;
if (rx)
{
pArg = typeMalloc(RegExp_Arg, 1);
if (pArg)
{
int blen = RX_INCREMENT;
T((T_CREATE("RegExp_Arg %p"), pArg));
pArg->compiled_expression = NULL;
if ((pArg->refCount = typeMalloc(unsigned long, 1)) != 0)
*(pArg->refCount) = 1;
do
{
char *buf = typeMalloc(char, blen);
if (buf)
{
#if HAVE_REGEXP_H_FUNCS
char *last_pos = compile(rx, buf, &buf[blen], '\0');
#else /* HAVE_REGEXPR_H_FUNCS */
char *last_pos = compile(rx, buf, &buf[blen]);
#endif
if (reg_errno)
{
free(buf);
if (reg_errno == 50)
blen += RX_INCREMENT;
else
{
free(pArg);
pArg = NULL;
break;
}
}
else
{
pArg->compiled_expression = buf;
break;
}
}
}
while (blen <= MAX_RX_LEN);
}
if (pArg && !pArg->compiled_expression)
{
free(pArg);
pArg = NULL;
}
}
return (void *)pArg;
#else
return 0;
#endif
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Make_RegularExpression_Type(va_list * ap)
|
| Description : Allocate structure for regex type argument.
|
| Return Values : Pointer to argument structure or NULL on error
+--------------------------------------------------------------------------*/
static void *
Make_RegularExpression_Type(va_list *ap)
{
char *rx = va_arg(*ap, char *);
return Generic_RegularExpression_Type((void *)rx);
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void *Copy_RegularExpression_Type(
| const void * argp)
|
| Description : Copy structure for regex type argument.
|
| Return Values : Pointer to argument structure or NULL on error.
+--------------------------------------------------------------------------*/
static void *
Copy_RegularExpression_Type(const void *argp MAYBE_UNUSED)
{
#if (HAVE_REGEX_H_FUNCS | HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS)
const RegExp_Arg *ap = (const RegExp_Arg *)argp;
const RegExp_Arg *result = (const RegExp_Arg *)0;
if (ap)
{
*(ap->refCount) += 1;
result = ap;
}
return (void *)result;
#else
return 0;
#endif
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static void Free_RegularExpression_Type(void * argp)
|
| Description : Free structure for regex type argument.
|
| Return Values : -
+--------------------------------------------------------------------------*/
static void
Free_RegularExpression_Type(void *argp MAYBE_UNUSED)
{
#if HAVE_REGEX_H_FUNCS | HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS
RegExp_Arg *ap = (RegExp_Arg *)argp;
if (ap)
{
if (--(*(ap->refCount)) == 0)
{
#if HAVE_REGEX_H_FUNCS
if (ap->pRegExp)
{
free(ap->refCount);
regfree(ap->pRegExp);
free(ap->pRegExp);
}
#elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS
if (ap->compiled_expression)
{
free(ap->refCount);
free(ap->compiled_expression);
}
#endif
free(ap);
}
}
#endif
}
/*---------------------------------------------------------------------------
| Facility : libnform
| Function : static bool Check_RegularExpression_Field(
| FIELD * field,
| const void * argp)
|
| Description : Validate buffer content to be a valid regular expression
|
| Return Values : TRUE - field is valid
| FALSE - field is invalid
+--------------------------------------------------------------------------*/
static bool
Check_RegularExpression_Field(FIELD *field MAYBE_UNUSED,
const void *argp MAYBE_UNUSED)
{
bool match = FALSE;
#if HAVE_REGEX_H_FUNCS
const RegExp_Arg *ap = (const RegExp_Arg *)argp;
if (ap && ap->pRegExp)
match = (regexec(ap->pRegExp, field_buffer(field, 0), 0, NULL, 0)
? FALSE
: TRUE);
#elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS
RegExp_Arg *ap = (RegExp_Arg *)argp;
if (ap && ap->compiled_expression)
match = (step(field_buffer(field, 0), ap->compiled_expression)
? TRUE
: FALSE);
#endif
return match;
}
static FIELDTYPE typeREGEXP =
{
_HAS_ARGS | _RESIDENT,
1, /* this is mutable, so we can't be const */
(FIELDTYPE *)0,
(FIELDTYPE *)0,
Make_RegularExpression_Type,
Copy_RegularExpression_Type,
Free_RegularExpression_Type,
INIT_FT_FUNC(Check_RegularExpression_Field),
INIT_FT_FUNC(NULL),
INIT_FT_FUNC(NULL),
INIT_FT_FUNC(NULL),
#if NCURSES_INTEROP_FUNCS
Generic_RegularExpression_Type
#endif
};
-NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_REGEXP = &typeREGEXP;
+FORM_EXPORT_VAR(FIELDTYPE *) TYPE_REGEXP = &typeREGEXP;
#if NCURSES_INTEROP_FUNCS
/* The next routines are to simplify the use of ncurses from
- programming languages with restictions on interop with C level
+ programming languages with restrictions on interop with C level
constructs (e.g. variable access or va_list + ellipsis constructs)
*/
-NCURSES_EXPORT(FIELDTYPE *)
+FORM_EXPORT(FIELDTYPE *)
_nc_TYPE_REGEXP(void)
{
return TYPE_REGEXP;
}
#endif
/* fty_regex.c ends here */
diff --git a/contrib/ncurses/include/Caps b/contrib/ncurses/include/Caps
index af0ec4513a57..4528cffb80ed 100644
--- a/contrib/ncurses/include/Caps
+++ b/contrib/ncurses/include/Caps
@@ -1,967 +1,971 @@
##############################################################################
# Copyright 2019,2020 Thomas E. Dickey #
# Copyright 1998-2015,2016 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995
# and: Eric S. Raymond <esr@snark.thyrsus.com>
#
-# $Id: Caps,v 1.45 2020/02/02 23:34:34 tom Exp $
+# $Id: Caps,v 1.46 2020/10/17 21:30:19 tom Exp $
#
# This is the master termcap/terminfo capability table.
#
# This table is used to generate initializers for tables that drive tic,
# infocmp, and the library compilation code used to support the termcap
# compatibility hack. It is also used to generate the tabular portion of the
# terminfo(5) man page; lines beginning with `#%' are passed through to become
# the terminfo table.
#
# This file has three major sections; a standard-capabilities table, two
# extension-capability tables, and a section of aliases declarations.
# The first two have the same format, as follows:
#
# FILE FORMAT
#
# Column 1: terminfo variable name
# Column 2: terminfo capability name
# Column 3: capability type (boolean, numeric, or string)
# Column 4: termcap capability name
# Column 5: KEY_xxx name, if any, `-' otherwise
# Column 6: value for KEY_xxx name, if any, `-' otherwise
# Column 7: Lead with `Y' if capability should be emitted in termcap
# translations, `-' otherwise
# Column 8: capability description
#
# The codes following [Y-] in column 7 describe the versions of termcap which
# use the given capability. This information is not used by the curses library
# proper; rather, it's there to help the terminfo maintainer avoid emitting
# termcap entry translations that are more than 1023 bytes long (and tank a
# lot of old termcap-using programs). The codes read as follows:
# B = mentioned in the BSD man page for 4.4BSD curses
# C = used by the 4.4BSD curses library
# G = mentioned in the documentation for GNU termcap
# E = used by GNU Emacs
# K = remove this terminfo capability when translating to standard format
# The important codes are C and E. A cap with C or E should be preserved in
# translation if possible. The problem is that preserving all such caps may
# lead to some termcap translations being too long. The termcap maintainer
# has a bit of a juggling act to do...potential problem cases are marked with
# an asterisk (*).
#
# The aliases section has the following format:
#
# Column 1: either `capalias' or `infoalias'
# Column 2: name to be aliased
# Column 3: what name it should translate to. The name IGNORE means it
# should be discarded with a warning message.
# Column 4: name of the extension set (used for compiler warning messages)
# Column 5: capability description (usually an associated terminfo variable)
#
# HANDLING TERMCAP AND TERMINFO EXTENSIONS
#
# There are basically five different ways to handle termcap and terminfo
# extensions:
#
# 1. Don't list the capname here, or list it but comment it out (the latter
# is preferable; someone might want to handle it in the future). If you do
# this, the capability will be treated as unknown and raise a warning from
# the compiler.
#
# 2. Alias it. This is appropriate if the capability has the same meaning
# as an already-supported one. The compiler will handle aliasing, emitting
# an appropriate informational message whenever an alias fires.
#
# 3. List it in the standard table. You almost certainly do *not* want
# to do this -- the capabilities in that one, and their order, have been
# carefully chosen to be SVr4-binary-compatible when they're written out
# as a terminfo object, and breaking this would be bad. It's up to the ncurses
# library what to do with the terminfo data after it's read in.
#
# 4. List it in the aliases table with an IGNORE target field. If you
# do this, the capability will be ignored on input (though the user will
# get a warning message about it).
#
# 5. List it in the extensions table. If you do this, the compiler will
# silently accept the capability, but the curses library proper will never
# see it (because it won't be written out as part of the terminfo object
# format). It's up to you what you have the compiler do with it.
#
# There are two opposite reasons to choose option 5. One is when you want
# to eat the capability silently and discard it when doing translations
# to terminfo with tic -I. Some very old obsolete BSD caps like :kn: are
# in this class. Nothing will ever use them again.
#
# More usually, you want the compiler to try to deduce something from the
# capability value that it can use to translate it into your output format.
# You'll need to write custom code, probably in postprocess_termcap() or
# postprocess_terminfo(), to handle the translation.
#
# CONTROLLING ENTRY LENGTH
#
# Notes on specific elisions made to fit translations within 1023 bytes:
#
# Machines with IBM PC-like keyboards want to be able to define the following
# keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap-
# only environments for End or Home-Down), key_dc, and key_ic. This is also
# the set of keys the `joe' editor will be upset if it can't see. So don't
# trim those out of the set to be translated to termcap, or various users of
# the termcap file will become irate.
#
# It might look tempting to leave those long init strings out of translations.
# We can't do it (yet); 4.4BSD tput and tset use them.
#
# We retain the sgr capability in translation in spite of the fact that neither
# 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are
# hard to understand without it, and (b) the entries in which it is long tend
# to be older types that don't use up a lot of string space on function keys.
# The tic(1) translation code will complain and elide it if it makes a critical
# difference (there is special code in tic to recognize this situation).
#
# Yes, BSD tset(1) uses hpa. We elide hpa/vpa anyway because the motion
# optimizer in BSD curses didn't use them. This omission seems to be the
# single most effective one, it shortened the resolved length of all thirteen
# problem entries in the 9.9.0 version of the terminfo master below critical.
#
# It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap
# translations go back over critical if we do this. As 4.4BSD curses fades
# into history and GNU termcap's application base shrinks towards being GNU
# Emacs only, we'll probably elide out some BSD-only capabilities in order
# to buy space for non-essentials Emacs is still using. Capabilities high
# on that hit list: rc, sc, uc.
#
#############################################################################
#
# STANDARD CAPABILITIES
#
#%The following is a complete table of the capabilities included in a
#%terminfo description block and available to terminfo-using code. In each
#%line of the table,
#%
#%The \fBvariable\fR is the name by which the programmer (at the terminfo level)
#%accesses the capability.
#%
#%The \fBcapname\fR is the short name used in the text of the database,
#%and is used by a person updating the database.
#%Whenever possible, capnames are chosen to be the same as or similar to
#%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses
#%identical or very similar names). Semantics are also intended to match
#%those of the specification.
#%
#%The termcap code is the old
#%.B termcap
#%capability name (some capabilities are new, and have names which termcap
#%did not originate).
#%.P
#%Capability names have no hard length limit, but an informal limit of 5
#%characters has been adopted to keep them short and to allow the tabs in
#%the source file
#%.B Caps
#%to line up nicely.
#%
#%Finally, the description field attempts to convey the semantics of the
#%capability. You may find some codes in the description field:
#%.TP
#%(P)
#%indicates that padding may be specified
#%.TP
#%#[1-9]
-#%in the description field indicates that the string is passed through tparm with
-#%parms as given (#\fIi\fP).
+#%in the description field indicates that the string is passed
+#%through \fBtparm\fP(3X) with parameters as given (#\fIi\fP).
+#%.IP
+#%If no parameters are listed in the description,
+#%passing the string through \fBtparm\fP(3X) may give unexpected results,
+#%e.g., if it contains percent (%%) signs.
#%.TP
#%(P*)
#%indicates that padding may vary in proportion to the number of
#%lines affected
#%.TP
#%(#\d\fIi\fP\u)
#%indicates the \fIi\fP\uth\d parameter.
#%
#%.PP
#% These are the boolean capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBBooleans name Code\fR
auto_left_margin bw bool bw - - YB-G- cub1 wraps from column 0 to last column
auto_right_margin am bool am - - YBCGE terminal has automatic margins
no_esc_ctlc xsb bool xb - - YBCG- beehive (f1=escape, f2=ctrl C)
ceol_standout_glitch xhp bool xs - - YBCGE standout not erased by overwriting (hp)
eat_newline_glitch xenl bool xn - - YBCGE newline ignored after 80 cols (concept)
erase_overstrike eo bool eo - - YBCG- can erase overstrikes with a blank
generic_type gn bool gn - - YB-G- generic line type
hard_copy hc bool hc - - YBCG- hardcopy terminal
has_meta_key km bool km - - YB-GE Has a meta key (i.e., sets 8th-bit)
has_status_line hs bool hs - - YB-G- has extra status line
insert_null_glitch in bool in - - YBCGE insert mode distinguishes nulls
memory_above da bool da - - YBCG- display may be retained above the screen
memory_below db bool db - - YB-GE display may be retained below the screen
move_insert_mode mir bool mi - - YBCGE safe to move while in insert mode
move_standout_mode msgr bool ms - - YBCGE safe to move while in standout mode
over_strike os bool os - - YBCG- terminal can overstrike
status_line_esc_ok eslok bool es - - YB-G- escape can be used on the status line
dest_tabs_magic_smso xt bool xt - - YBCGE tabs destructive, magic so char (t1061)
tilde_glitch hz bool hz - - YB-GE cannot print ~'s (Hazeltine)
transparent_underline ul bool ul - - YBCGE underline character overstrikes
xon_xoff xon bool xo - - YB--- terminal uses xon/xoff handshaking
needs_xon_xoff nxon bool nx - - ----- padding will not work, xon/xoff required
prtr_silent mc5i bool 5i - - ----- printer will not echo on screen
hard_cursor chts bool HC - - ----- cursor is hard to see
non_rev_rmcup nrrmc bool NR - - ----- smcup does not reverse rmcup
no_pad_char npc bool NP - - ----- pad character does not exist
non_dest_scroll_region ndscr bool ND - - ----- scrolling region is non-destructive
can_change ccc bool cc - - ----- terminal can re-define existing colors
back_color_erase bce bool ut - - ----- screen erased with background color
hue_lightness_saturation hls bool hl - - ----- terminal uses only HLS color notation (Tektronix)
col_addr_glitch xhpa bool YA - - ----- only positive motion for hpa/mhpa caps
cr_cancels_micro_mode crxm bool YB - - ----- using cr turns off micro mode
has_print_wheel daisy bool YC - - ----- printer needs operator to change character set
row_addr_glitch xvpa bool YD - - ----- only positive motion for vpa/mvpa caps
semi_auto_right_margin sam bool YE - - ----- printing in last column causes cr
cpi_changes_res cpix bool YF - - ----- changing character pitch changes resolution
lpi_changes_res lpix bool YG - - ----- changing line pitch changes resolution
#%.TE
#%.ad
#%
#%These are the numeric capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBNumeric name Code\fR
columns cols num co - - YBCGE number of columns in a line
init_tabs it num it - - YB-G- tabs initially every # spaces
lines lines num li - - YBCGE number of lines on screen or page
lines_of_memory lm num lm - - YB-G- lines of memory if > line. 0 means varies
magic_cookie_glitch xmc num sg - - YBCGE number of blank characters left by smso or rmso
padding_baud_rate pb num pb - - YB-GE lowest baud rate where padding needed
virtual_terminal vt num vt - - YB--- virtual terminal number (CB/unix)
width_status_line wsl num ws - - YB-G- number of columns in status line
num_labels nlab num Nl - - ----- number of labels on screen
label_height lh num lh - - ----- rows in each label
label_width lw num lw - - ----- columns in each label
max_attributes ma num ma - - YBC-- maximum combined attributes terminal can handle
maximum_windows wnum num MW - - ----- maximum number of definable windows
# These came in with SVr4's color support
max_colors colors num Co - - ----- maximum number of colors on screen
max_pairs pairs num pa - - ----- maximum number of color-pairs on the screen
no_color_video ncv num NC - - ----- video attributes that cannot be used with colors
#%.TE
#%.ad
#%
#%The following numeric capabilities are present in the SVr4.0 term structure,
#%but are not yet documented in the man page. They came in with SVr4's
#%printer support.
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBNumeric name Code\fR
buffer_capacity bufsz num Ya - - ----- numbers of bytes buffered before printing
dot_vert_spacing spinv num Yb - - ----- spacing of pins vertically in pins per inch
dot_horz_spacing spinh num Yc - - ----- spacing of dots horizontally in dots per inch
max_micro_address maddr num Yd - - ----- maximum value in micro_..._address
max_micro_jump mjump num Ye - - ----- maximum value in parm_..._micro
micro_col_size mcs num Yf - - ----- character step size when in micro mode
micro_line_size mls num Yg - - ----- line step size when in micro mode
number_of_pins npins num Yh - - ----- numbers of pins in print-head
output_res_char orc num Yi - - ----- horizontal resolution in units per line
output_res_line orl num Yj - - ----- vertical resolution in units per line
output_res_horz_inch orhi num Yk - - ----- horizontal resolution in units per inch
output_res_vert_inch orvi num Yl - - ----- vertical resolution in units per inch
print_rate cps num Ym - - ----- print rate in characters per second
wide_char_size widcs num Yn - - ----- character step size when in double wide mode
buttons btns num BT - - ----- number of buttons on mouse
bit_image_entwining bitwin num Yo - - ----- number of passes for each bit-image row
bit_image_type bitype num Yp - - ----- type of bit-image device
#%.TE
#%.ad
#%
#%These are the string capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
back_tab cbt str bt - - YBCGE back tab (P)
bell bel str bl - - YB-GE audible signal (bell) (P)
carriage_return cr str cr - - YBCGE carriage return (P*) (P*)
change_scroll_region csr str cs - - YBCGE change region to line #1 to line #2 (P)
clear_all_tabs tbc str ct - - YB-G- clear all tab stops (P)
clear_screen clear str cl - - YBCGE clear screen and home cursor (P*)
clr_eol el str ce - - YBCGE clear to end of line (P)
clr_eos ed str cd - - YBCGE clear to end of screen (P*)
column_address hpa str ch - - -B-GE* horizontal position #1, absolute (P)
command_character cmdch str CC - - YB-G- terminal settable cmd character in prototype !?
cursor_address cup str cm - - YBCGE move to row #1 columns #2
cursor_down cud1 str do - - YBCGE down one line
cursor_home home str ho - - YBCGE home cursor (if no cup)
cursor_invisible civis str vi - - YB-G- make cursor invisible
cursor_left cub1 str le - - YBCGE move left one space
cursor_mem_address mrcup str CM - - YB-G- memory relative cursor addressing, move to row #1 columns #2
cursor_normal cnorm str ve - - YBCGE make cursor appear normal (undo civis/cvvis)
cursor_right cuf1 str nd - - YBCGE non-destructive space (move right one space)
cursor_to_ll ll str ll - - YBCGE last line, first column (if no cup)
cursor_up cuu1 str up - - YBCGE up one line
cursor_visible cvvis str vs - - YBCGE make cursor very visible
delete_character dch1 str dc - - YBCGE delete character (P*)
delete_line dl1 str dl - - YBCGE delete line (P*)
dis_status_line dsl str ds - - YB-G- disable status line
down_half_line hd str hd - - YB-G- half a line down
enter_alt_charset_mode smacs str as - - YB-G- start alternate character set (P)
enter_blink_mode blink str mb - - YB-G- turn on blinking
enter_bold_mode bold str md - - YB-G- turn on bold (extra bright) mode
enter_ca_mode smcup str ti - - YBCGE string to start programs using cup
enter_delete_mode smdc str dm - - YBCGE enter delete mode
enter_dim_mode dim str mh - - YB-G- turn on half-bright mode
enter_insert_mode smir str im - - YBCGE enter insert mode
enter_secure_mode invis str mk - - -B-G-* turn on blank mode (characters invisible)
enter_protected_mode prot str mp - - -B-G-* turn on protected mode
enter_reverse_mode rev str mr - - YB-G- turn on reverse video mode
enter_standout_mode smso str so - - YBCGE begin standout mode
enter_underline_mode smul str us - - YBCGE begin underline mode
erase_chars ech str ec - - YB-G- erase #1 characters (P)
exit_alt_charset_mode rmacs str ae - - YB-G- end alternate character set (P)
exit_attribute_mode sgr0 str me - - YB-GE turn off all attributes
exit_ca_mode rmcup str te - - YBCGE strings to end programs using cup
exit_delete_mode rmdc str ed - - YBCGE end delete mode
exit_insert_mode rmir str ei - - YBCGE exit insert mode
exit_standout_mode rmso str se - - YBCGE exit standout mode
exit_underline_mode rmul str ue - - YBCGE exit underline mode
flash_screen flash str vb - - YBCGE visible bell (may not move cursor)
form_feed ff str ff - - YB-G- hardcopy terminal page eject (P*)
from_status_line fsl str fs - - YB-G- return from status line
init_1string is1 str i1 - - YB-G- initialization string
init_2string is2 str is - - YB-G- initialization string
init_3string is3 str i3 - - YB-G- initialization string
init_file if str if - - YB-G- name of initialization file
insert_character ich1 str ic - - YBCGE insert character (P)
insert_line il1 str al - - YBCGE insert line (P*)
insert_padding ip str ip - - YBCGE insert padding after inserted character
key_backspace kbs str kb KEY_BACKSPACE 0407 YB-G- backspace key
key_catab ktbc str ka KEY_CATAB 0526 -B-G-* clear-all-tabs key
key_clear kclr str kC KEY_CLEAR 0515 -B-G-* clear-screen or erase key
key_ctab kctab str kt KEY_CTAB 0525 -B-G-* clear-tab key
key_dc kdch1 str kD KEY_DC 0512 YB-G- delete-character key
key_dl kdl1 str kL KEY_DL 0510 -B-G-* delete-line key
key_down kcud1 str kd KEY_DOWN 0402 YBCGE down-arrow key
key_eic krmir str kM KEY_EIC 0514 -B-G-* sent by rmir or smir in insert mode
key_eol kel str kE KEY_EOL 0517 -B-G-* clear-to-end-of-line key
key_eos ked str kS KEY_EOS 0516 -B-G-* clear-to-end-of-screen key
key_f0 kf0 str k0 KEY_F(0) 0410 YBCGE F0 function key
key_f1 kf1 str k1 KEY_F(1) - YBCGE F1 function key
key_f10 kf10 str k; KEY_F(10) - ----E F10 function key
key_f2 kf2 str k2 KEY_F(2) - YBCGE F2 function key
key_f3 kf3 str k3 KEY_F(3) - YBCGE F3 function key
key_f4 kf4 str k4 KEY_F(4) - YBCGE F4 function key
key_f5 kf5 str k5 KEY_F(5) - YBCGE F5 function key
key_f6 kf6 str k6 KEY_F(6) - YBCGE F6 function key
key_f7 kf7 str k7 KEY_F(7) - YBCGE F7 function key
key_f8 kf8 str k8 KEY_F(8) - YBCGE F8 function key
key_f9 kf9 str k9 KEY_F(9) - YBCGE F9 function key
key_home khome str kh KEY_HOME 0406 YBCGE home key
key_ic kich1 str kI KEY_IC 0513 YB-GE insert-character key
key_il kil1 str kA KEY_IL 0511 -B-G-* insert-line key
key_left kcub1 str kl KEY_LEFT 0404 YBCGE left-arrow key
key_ll kll str kH KEY_LL 0533 YB-G- lower-left key (home down)
key_npage knp str kN KEY_NPAGE 0522 YB-GE next-page key
key_ppage kpp str kP KEY_PPAGE 0523 YB-GE previous-page key
key_right kcuf1 str kr KEY_RIGHT 0405 YBCGE right-arrow key
key_sf kind str kF KEY_SF 0520 -B-G-* scroll-forward key
key_sr kri str kR KEY_SR 0521 -B-G-* scroll-backward key
key_stab khts str kT KEY_STAB 0524 -B-G-* set-tab key
key_up kcuu1 str ku KEY_UP 0403 YBCGE up-arrow key
keypad_local rmkx str ke - - YBCGE leave 'keyboard_transmit' mode
keypad_xmit smkx str ks - - YBCGE enter 'keyboard_transmit' mode
lab_f0 lf0 str l0 - - -B-G-* label on function key f0 if not f0
lab_f1 lf1 str l1 - - -B-G-* label on function key f1 if not f1
lab_f10 lf10 str la - - ----- label on function key f10 if not f10
lab_f2 lf2 str l2 - - -B-G-* label on function key f2 if not f2
lab_f3 lf3 str l3 - - -B-G-* label on function key f3 if not f3
lab_f4 lf4 str l4 - - -B-G-* label on function key f4 if not f4
lab_f5 lf5 str l5 - - -B-G-* label on function key f5 if not f5
lab_f6 lf6 str l6 - - -B-G-* label on function key f6 if not f6
lab_f7 lf7 str l7 - - -B-G-* label on function key f7 if not f7
lab_f8 lf8 str l8 - - -B-G-* label on function key f8 if not f8
lab_f9 lf9 str l9 - - -B-G-* label on function key f9 if not f9
meta_off rmm str mo - - YB-G-* turn off meta mode
meta_on smm str mm - - YB-G-* turn on meta mode (8th-bit on)
newline nel str nw - - YB-G-* newline (behave like cr followed by lf)
pad_char pad str pc - - YBCGE padding char (instead of null)
parm_dch dch str DC - - YB-GE delete #1 characters (P*)
parm_delete_line dl str DL - - YBCGE delete #1 lines (P*)
parm_down_cursor cud str DO - - YBCGE down #1 lines (P*)
parm_ich ich str IC - - YB-GE insert #1 characters (P*)
parm_index indn str SF - - YBCG- scroll forward #1 lines (P)
parm_insert_line il str AL - - YBCGE insert #1 lines (P*)
parm_left_cursor cub str LE - - YBCGE move #1 characters to the left (P)
parm_right_cursor cuf str RI - - YBCGE move #1 characters to the right (P*)
parm_rindex rin str SR - - YBCG- scroll back #1 lines (P)
parm_up_cursor cuu str UP - - YBCGE up #1 lines (P*)
pkey_key pfkey str pk - - -B--- program function key #1 to type string #2
pkey_local pfloc str pl - - -B--- program function key #1 to execute string #2
pkey_xmit pfx str px - - -B--- program function key #1 to transmit string #2
print_screen mc0 str ps - - -B-G-* print contents of screen
prtr_off mc4 str pf - - -B-G-* turn off printer
prtr_on mc5 str po - - -B-G-* turn on printer
repeat_char rep str rp - - YB-GE repeat char #1 #2 times (P*)
reset_1string rs1 str r1 - - -B--- reset string
reset_2string rs2 str r2 - - -B--- reset string
reset_3string rs3 str r3 - - -B--- reset string
reset_file rf str rf - - -B--- name of reset file
restore_cursor rc str rc - - YBCG- restore cursor to position of last save_cursor
row_address vpa str cv - - -B-GE* vertical position #1 absolute (P)
save_cursor sc str sc - - YBCG- save current cursor position (P)
scroll_forward ind str sf - - YBCGE scroll text up (P)
scroll_reverse ri str sr - - YBCGE scroll text down (P)
set_attributes sgr str sa - - YB-G- define video attributes #1-#9 (PG9)
set_tab hts str st - - YB-G- set a tab in every row, current columns
set_window wind str wi - - -B-GE current window is lines #1-#2 cols #3-#4
tab ht str ta - - YBCGE tab to next 8-space hardware tab stop
to_status_line tsl str ts - - YB-G- move to status line, column #1
underline_char uc str uc - - YBCG- underline char and move past it
up_half_line hu str hu - - YB-G- half a line up
init_prog iprog str iP - - -B--- path name of program for initialization
key_a1 ka1 str K1 KEY_A1 0534 YB-GE upper left of keypad
key_a3 ka3 str K3 KEY_A3 0535 YB-GE upper right of keypad
key_b2 kb2 str K2 KEY_B2 0536 YB-GE center of keypad
key_c1 kc1 str K4 KEY_C1 0537 YB-GE lower left of keypad
key_c3 kc3 str K5 KEY_C3 0540 YB-GE lower right of keypad
prtr_non mc5p str pO - - -B-G-* turn on printer for #1 bytes
#
# SVr1 capabilities stop here. IBM's version of terminfo is the same as
# SVr4 up to this point, but has a different set afterwards.
#
char_padding rmp str rP - - ----- like ip but when in insert mode
acs_chars acsc str ac - - ----- graphics charset pairs, based on vt100
plab_norm pln str pn - - ----- program label #1 to show string #2
key_btab kcbt str kB KEY_BTAB 0541 ----- back-tab key
enter_xon_mode smxon str SX - - ----- turn on xon/xoff handshaking
exit_xon_mode rmxon str RX - - ----- turn off xon/xoff handshaking
enter_am_mode smam str SA - - ----- turn on automatic margins
exit_am_mode rmam str RA - - ----- turn off automatic margins
xon_character xonc str XN - - ----- XON character
xoff_character xoffc str XF - - ----- XOFF character
ena_acs enacs str eA - - ----- enable alternate char set
label_on smln str LO - - ----- turn on soft labels
label_off rmln str LF - - ----- turn off soft labels
key_beg kbeg str @1 KEY_BEG 0542 ----- begin key
key_cancel kcan str @2 KEY_CANCEL 0543 ----- cancel key
key_close kclo str @3 KEY_CLOSE 0544 ----- close key
key_command kcmd str @4 KEY_COMMAND 0545 ----- command key
key_copy kcpy str @5 KEY_COPY 0546 ----- copy key
key_create kcrt str @6 KEY_CREATE 0547 ----- create key
key_end kend str @7 KEY_END 0550 ----- end key
key_enter kent str @8 KEY_ENTER 0527 ----- enter/send key
key_exit kext str @9 KEY_EXIT 0551 ----- exit key
key_find kfnd str @0 KEY_FIND 0552 ----- find key
key_help khlp str %1 KEY_HELP 0553 ----- help key
key_mark kmrk str %2 KEY_MARK 0554 ----- mark key
key_message kmsg str %3 KEY_MESSAGE 0555 ----- message key
key_move kmov str %4 KEY_MOVE 0556 ----- move key
key_next knxt str %5 KEY_NEXT 0557 ----- next key
key_open kopn str %6 KEY_OPEN 0560 ----- open key
key_options kopt str %7 KEY_OPTIONS 0561 ----- options key
key_previous kprv str %8 KEY_PREVIOUS 0562 ----- previous key
key_print kprt str %9 KEY_PRINT 0532 ----- print key
key_redo krdo str %0 KEY_REDO 0563 ----- redo key
key_reference kref str &1 KEY_REFERENCE 0564 ----- reference key
key_refresh krfr str &2 KEY_REFRESH 0565 ----- refresh key
key_replace krpl str &3 KEY_REPLACE 0566 ----- replace key
key_restart krst str &4 KEY_RESTART 0567 ----- restart key
key_resume kres str &5 KEY_RESUME 0570 ----- resume key
key_save ksav str &6 KEY_SAVE 0571 ----- save key
key_suspend kspd str &7 KEY_SUSPEND 0627 ----- suspend key
key_undo kund str &8 KEY_UNDO 0630 ----- undo key
key_sbeg kBEG str &9 KEY_SBEG 0572 ----- shifted begin key
key_scancel kCAN str &0 KEY_SCANCEL 0573 ----- shifted cancel key
key_scommand kCMD str *1 KEY_SCOMMAND 0574 ----- shifted command key
key_scopy kCPY str *2 KEY_SCOPY 0575 ----- shifted copy key
key_screate kCRT str *3 KEY_SCREATE 0576 ----- shifted create key
key_sdc kDC str *4 KEY_SDC 0577 ----- shifted delete-character key
key_sdl kDL str *5 KEY_SDL 0600 ----- shifted delete-line key
key_select kslt str *6 KEY_SELECT 0601 ----- select key
key_send kEND str *7 KEY_SEND 0602 ----- shifted end key
key_seol kEOL str *8 KEY_SEOL 0603 ----- shifted clear-to-end-of-line key
key_sexit kEXT str *9 KEY_SEXIT 0604 ----- shifted exit key
key_sfind kFND str *0 KEY_SFIND 0605 ----- shifted find key
key_shelp kHLP str #1 KEY_SHELP 0606 ----- shifted help key
key_shome kHOM str #2 KEY_SHOME 0607 ----- shifted home key
key_sic kIC str #3 KEY_SIC 0610 ----- shifted insert-character key
key_sleft kLFT str #4 KEY_SLEFT 0611 ----- shifted left-arrow key
key_smessage kMSG str %a KEY_SMESSAGE 0612 ----- shifted message key
key_smove kMOV str %b KEY_SMOVE 0613 ----- shifted move key
key_snext kNXT str %c KEY_SNEXT 0614 ----- shifted next key
key_soptions kOPT str %d KEY_SOPTIONS 0615 ----- shifted options key
key_sprevious kPRV str %e KEY_SPREVIOUS 0616 ----- shifted previous key
key_sprint kPRT str %f KEY_SPRINT 0617 ----- shifted print key
key_sredo kRDO str %g KEY_SREDO 0620 ----- shifted redo key
key_sreplace kRPL str %h KEY_SREPLACE 0621 ----- shifted replace key
key_sright kRIT str %i KEY_SRIGHT 0622 ----- shifted right-arrow key
key_srsume kRES str %j KEY_SRSUME 0623 ----- shifted resume key
key_ssave kSAV str !1 KEY_SSAVE 0624 ----- shifted save key
key_ssuspend kSPD str !2 KEY_SSUSPEND 0625 ----- shifted suspend key
key_sundo kUND str !3 KEY_SUNDO 0626 ----- shifted undo key
req_for_input rfi str RF - - ----- send next input char (for ptys)
key_f11 kf11 str F1 KEY_F(11) - ----E F11 function key
key_f12 kf12 str F2 KEY_F(12) - ----E F12 function key
key_f13 kf13 str F3 KEY_F(13) - ----E F13 function key
key_f14 kf14 str F4 KEY_F(14) - ----E F14 function key
key_f15 kf15 str F5 KEY_F(15) - ----E F15 function key
key_f16 kf16 str F6 KEY_F(16) - ----E F16 function key
key_f17 kf17 str F7 KEY_F(17) - ----E F17 function key
key_f18 kf18 str F8 KEY_F(18) - ----E F18 function key
key_f19 kf19 str F9 KEY_F(19) - ----E F19 function key
key_f20 kf20 str FA KEY_F(20) - ----E F20 function key
key_f21 kf21 str FB KEY_F(21) - ----E F21 function key
key_f22 kf22 str FC KEY_F(22) - ----E F22 function key
key_f23 kf23 str FD KEY_F(23) - ----E F23 function key
key_f24 kf24 str FE KEY_F(24) - ----E F24 function key
key_f25 kf25 str FF KEY_F(25) - ----E F25 function key
key_f26 kf26 str FG KEY_F(26) - ----E F26 function key
key_f27 kf27 str FH KEY_F(27) - ----E F27 function key
key_f28 kf28 str FI KEY_F(28) - ----E F28 function key
key_f29 kf29 str FJ KEY_F(29) - ----E F29 function key
key_f30 kf30 str FK KEY_F(30) - ----E F30 function key
key_f31 kf31 str FL KEY_F(31) - ----E F31 function key
key_f32 kf32 str FM KEY_F(32) - ----E F32 function key
key_f33 kf33 str FN KEY_F(33) - ----E F33 function key
key_f34 kf34 str FO KEY_F(34) - ----E F34 function key
key_f35 kf35 str FP KEY_F(35) - ----E F35 function key
key_f36 kf36 str FQ KEY_F(36) - ----E F36 function key
key_f37 kf37 str FR KEY_F(37) - ----E F37 function key
key_f38 kf38 str FS KEY_F(38) - ----E F38 function key
key_f39 kf39 str FT KEY_F(39) - ----E F39 function key
key_f40 kf40 str FU KEY_F(40) - ----E F40 function key
key_f41 kf41 str FV KEY_F(41) - ----E F41 function key
key_f42 kf42 str FW KEY_F(42) - ----E F42 function key
key_f43 kf43 str FX KEY_F(43) - ----E F43 function key
key_f44 kf44 str FY KEY_F(44) - ----E F44 function key
key_f45 kf45 str FZ KEY_F(45) - ----E F45 function key
key_f46 kf46 str Fa KEY_F(46) - ----E F46 function key
key_f47 kf47 str Fb KEY_F(47) - ----E F47 function key
key_f48 kf48 str Fc KEY_F(48) - ----E F48 function key
key_f49 kf49 str Fd KEY_F(49) - ----E F49 function key
key_f50 kf50 str Fe KEY_F(50) - ----E F50 function key
key_f51 kf51 str Ff KEY_F(51) - ----E F51 function key
key_f52 kf52 str Fg KEY_F(52) - ----E F52 function key
key_f53 kf53 str Fh KEY_F(53) - ----E F53 function key
key_f54 kf54 str Fi KEY_F(54) - ----E F54 function key
key_f55 kf55 str Fj KEY_F(55) - ----E F55 function key
key_f56 kf56 str Fk KEY_F(56) - ----E F56 function key
key_f57 kf57 str Fl KEY_F(57) - ----E F57 function key
key_f58 kf58 str Fm KEY_F(58) - ----E F58 function key
key_f59 kf59 str Fn KEY_F(59) - ----E F59 function key
key_f60 kf60 str Fo KEY_F(60) - ----E F60 function key
key_f61 kf61 str Fp KEY_F(61) - ----E F61 function key
key_f62 kf62 str Fq KEY_F(62) - ----E F62 function key
key_f63 kf63 str Fr KEY_F(63) - ----E F63 function key
clr_bol el1 str cb - - ----- Clear to beginning of line
clear_margins mgc str MC - - ----- clear right and left soft margins
set_left_margin smgl str ML - - ----- set left soft margin at current column. See smgl. (ML is not in BSD termcap).
set_right_margin smgr str MR - - ----- set right soft margin at current column
label_format fln str Lf - - ----- label format
set_clock sclk str SC - - ----- set clock, #1 hrs #2 mins #3 secs
display_clock dclk str DK - - ----- display clock
remove_clock rmclk str RC - - ----- remove clock
create_window cwin str CW - - ----- define a window #1 from #2,#3 to #4,#5
goto_window wingo str WG - - ----- go to window #1
hangup hup str HU - - ----- hang-up phone
dial_phone dial str DI - - ----- dial number #1
quick_dial qdial str QD - - ----- dial number #1 without checking
tone tone str TO - - ----- select touch tone dialing
pulse pulse str PU - - ----- select pulse dialing
flash_hook hook str fh - - ----- flash switch hook
fixed_pause pause str PA - - ----- pause for 2-3 seconds
wait_tone wait str WA - - ----- wait for dial-tone
user0 u0 str u0 - - ----- User string #0
user1 u1 str u1 - - ----- User string #1
user2 u2 str u2 - - ----- User string #2
user3 u3 str u3 - - ----- User string #3
user4 u4 str u4 - - ----- User string #4
user5 u5 str u5 - - ----- User string #5
user6 u6 str u6 - - ----- User string #6
user7 u7 str u7 - - ----- User string #7
user8 u8 str u8 - - ----- User string #8
user9 u9 str u9 - - ----- User string #9
#
# SVr4 added these capabilities to support color
#
orig_pair op str op - - ----- Set default pair to its original value
orig_colors oc str oc - - ----- Set all color pairs to the original ones
initialize_color initc str Ic - - ----- initialize color #1 to (#2,#3,#4)
initialize_pair initp str Ip - - ----- Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)
set_color_pair scp str sp - - ----- Set current color pair to #1
set_foreground setf str Sf - - ----- Set foreground color #1
set_background setb str Sb - - ----- Set background color #1
#
# SVr4 added these capabilities to support printers
#
change_char_pitch cpi str ZA - - ----- Change number of characters per inch to #1
change_line_pitch lpi str ZB - - ----- Change number of lines per inch to #1
change_res_horz chr str ZC - - ----- Change horizontal resolution to #1
change_res_vert cvr str ZD - - ----- Change vertical resolution to #1
define_char defc str ZE - - ----- Define a character #1, #2 dots wide, descender #3
enter_doublewide_mode swidm str ZF - - ----- Enter double-wide mode
enter_draft_quality sdrfq str ZG - - ----- Enter draft-quality mode
enter_italics_mode sitm str ZH - - ----- Enter italic mode
enter_leftward_mode slm str ZI - - ----- Start leftward carriage motion
enter_micro_mode smicm str ZJ - - ----- Start micro-motion mode
enter_near_letter_quality snlq str ZK - - ----- Enter NLQ mode
enter_normal_quality snrmq str ZL - - ----- Enter normal-quality mode
enter_shadow_mode sshm str ZM - - ----- Enter shadow-print mode
enter_subscript_mode ssubm str ZN - - ----- Enter subscript mode
enter_superscript_mode ssupm str ZO - - ----- Enter superscript mode
enter_upward_mode sum str ZP - - ----- Start upward carriage motion
exit_doublewide_mode rwidm str ZQ - - ----- End double-wide mode
exit_italics_mode ritm str ZR - - ----- End italic mode
exit_leftward_mode rlm str ZS - - ----- End left-motion mode
exit_micro_mode rmicm str ZT - - ----- End micro-motion mode
exit_shadow_mode rshm str ZU - - ----- End shadow-print mode
exit_subscript_mode rsubm str ZV - - ----- End subscript mode
exit_superscript_mode rsupm str ZW - - ----- End superscript mode
exit_upward_mode rum str ZX - - ----- End reverse character motion
micro_column_address mhpa str ZY - - ----- Like column_address in micro mode
micro_down mcud1 str ZZ - - ----- Like cursor_down in micro mode
micro_left mcub1 str Za - - ----- Like cursor_left in micro mode
micro_right mcuf1 str Zb - - ----- Like cursor_right in micro mode
micro_row_address mvpa str Zc - - ----- Like row_address #1 in micro mode
micro_up mcuu1 str Zd - - ----- Like cursor_up in micro mode
order_of_pins porder str Ze - - ----- Match software bits to print-head pins
parm_down_micro mcud str Zf - - ----- Like parm_down_cursor in micro mode
parm_left_micro mcub str Zg - - ----- Like parm_left_cursor in micro mode
parm_right_micro mcuf str Zh - - ----- Like parm_right_cursor in micro mode
parm_up_micro mcuu str Zi - - ----- Like parm_up_cursor in micro mode
select_char_set scs str Zj - - ----- Select character set, #1
set_bottom_margin smgb str Zk - - ----- Set bottom margin at current line
set_bottom_margin_parm smgbp str Zl - - ----- Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom
set_left_margin_parm smglp str Zm - - ----- Set left (right) margin at column #1
set_right_margin_parm smgrp str Zn - - ----- Set right margin at column #1
set_top_margin smgt str Zo - - ----- Set top margin at current line
set_top_margin_parm smgtp str Zp - - ----- Set top (bottom) margin at row #1
start_bit_image sbim str Zq - - ----- Start printing bit image graphics
start_char_set_def scsd str Zr - - ----- Start character set definition #1, with #2 characters in the set
stop_bit_image rbim str Zs - - ----- Stop printing bit image graphics
stop_char_set_def rcsd str Zt - - ----- End definition of character set #1
subscript_characters subcs str Zu - - ----- List of subscriptable characters
superscript_characters supcs str Zv - - ----- List of superscriptable characters
these_cause_cr docr str Zw - - ----- Printing any of these characters causes CR
zero_motion zerom str Zx - - ----- No motion for subsequent character
#%.TE
#%.ad
#%
#%The following string capabilities are present in the SVr4.0 term structure,
#%but were originally not documented in the man page.
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw18.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
char_set_names csnm str Zy - - ----- Produce #1'th item from list of character set names
key_mouse kmous str Km KEY_MOUSE 0631 ----- Mouse event has occurred
mouse_info minfo str Mi - - ----- Mouse status information
req_mouse_pos reqmp str RQ - - ----- Request mouse position
get_mouse getm str Gm - - ----- Curses should get button events, parameter #1 not documented.
set_a_foreground setaf str AF - - ----- Set foreground color to #1, using ANSI escape
set_a_background setab str AB - - ----- Set background color to #1, using ANSI escape
pkey_plab pfxl str xl - - ----- Program function key #1 to type string #2 and show string #3
device_type devt str dv - - ----- Indicate language/codeset support
code_set_init csin str ci - - ----- Init sequence for multiple codesets
set0_des_seq s0ds str s0 - - ----- Shift to codeset 0 (EUC set 0, ASCII)
set1_des_seq s1ds str s1 - - ----- Shift to codeset 1
set2_des_seq s2ds str s2 - - ----- Shift to codeset 2
set3_des_seq s3ds str s3 - - ----- Shift to codeset 3
set_lr_margin smglr str ML - - ----- Set both left and right margins to #1, #2. (ML is not in BSD termcap).
set_tb_margin smgtb str MT - - ----- Sets both top and bottom margins to #1, #2
bit_image_repeat birep str Xy - - ----- Repeat bit image cell #1 #2 times
bit_image_newline binel str Zz - - ----- Move to next row of the bit image
bit_image_carriage_return bicr str Yv - - ----- Move to beginning of same row
color_names colornm str Yw - - ----- Give name for color #1
define_bit_image_region defbi str Yx - - ----- Define rectangular bit image region
end_bit_image_region endbi str Yy - - ----- End a bit-image region
set_color_band setcolor str Yz - - ----- Change to ribbon color #1
set_page_length slines str YZ - - ----- Set page length to #1 lines
#
# SVr4 added these capabilities for direct PC-clone support
#
display_pc_char dispc str S1 - - ----- Display PC character #1
enter_pc_charset_mode smpch str S2 - - ----- Enter PC character display mode
exit_pc_charset_mode rmpch str S3 - - ----- Exit PC character display mode
enter_scancode_mode smsc str S4 - - ----- Enter PC scancode mode
exit_scancode_mode rmsc str S5 - - ----- Exit PC scancode mode
pc_term_options pctrm str S6 - - ----- PC terminal options
scancode_escape scesc str S7 - - ----- Escape for scancode emulation
alt_scancode_esc scesa str S8 - - ----- Alternate escape for scancode emulation
#%.TE
#%.ad
#%
#%.in .8i
#%The XSI Curses standard added these hardcopy capabilities.
#%They were used in some post-4.1 versions of System V curses,
#%e.g., Solaris 2.5 and IRIX 6.x.
#%Except for \fBYI\fP, the \fBncurses\fR termcap names for them are invented.
#%According to the XSI Curses standard, they have no termcap names.
#%If your compiled terminfo entries use these,
#%they may not be binary-compatible with System V terminfo
#%entries after SVr4.1; beware!
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
enter_horizontal_hl_mode ehhlm str Xh - - ----- Enter horizontal highlight mode
enter_left_hl_mode elhlm str Xl - - ----- Enter left highlight mode
enter_low_hl_mode elohlm str Xo - - ----- Enter low highlight mode
enter_right_hl_mode erhlm str Xr - - ----- Enter right highlight mode
enter_top_hl_mode ethlm str Xt - - ----- Enter top highlight mode
enter_vertical_hl_mode evhlm str Xv - - ----- Enter vertical highlight mode
set_a_attributes sgr1 str sA - - ----- Define second set of video attributes #1-#6
set_pglen_inch slength str YI - - ----- Set page length to #1 hundredth of an inch (some implementations use sL for termcap).
#%.TE
#%.ad
#
# The magic token below tells the tic compiler-generator code that all the caps
# past it should be ignored (not written out) when dumping terminfo objects. It
# also tells the man page table generator not to pass through following lines
# This means we can have obsolete capabilities and pseudo-capabilities that are
# recognized for termcap or terminfo compilation, but not output.
#
# %%-STOP-HERE-%%
#
# Don't move this casually! In fact, don't move it at all unless you're
# either doing it to add System V or XPG4 extensions, or have decided you
# don't care about SVr4 binary compatibility.
#
#############################################################################
#
# TERMCAP EXTENSION CAPABILITIES
#
# The capabilities below are either obsolete or extensions on certain systems.
# They are not used by SVR4 terminfo. Some are used by captoinfo to translate
# termcap sources; the rest are listed for completeness, and in case somebody
# cares about them enough to hack in code that will translate them into
# terminfo capabilities.
#
# The first part of the list is from Ross Ridge's `mytinfo' package
# (comp.sources.unix, volume 26); the variable names and terminfo names (as
# well as the termcap codes) match his list.
#
# This group of codes is not marked obsolete in 4.4BSD, but have no direct
# terminfo equivalents. The rs capability is specially translated to terminfo
# r2, and vice versa, if an entry does not already have an r2. Similarly,
# i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2).
# The ug capability is thrown away, but assumed to be whatever sg is if the
# latter is nonzero and we're dumping in termcap format.
#
termcap_init2 OTi2 str i2 - - YB--- secondary initialization string
termcap_reset OTrs str rs - - YB-G- terminal reset string
magic_cookie_glitch_ul OTug num ug - - YBCGE number of blanks left by ul
#
# Obsolete termcap capabilities. Some are used for termcap translation. The
# code uses the 'OT' prefix we put on obsolete capabilities to suppress
# printing them in terminfo source dumps of compiled entries.
#
backspaces_with_bs OTbs bool bs - - YBCGE uses ^H to move left
crt_no_scrolling OTns bool ns - - YBCG- crt cannot scroll
no_correctly_working_cr OTnc bool nc - - YBCG- no way to go to start of line
carriage_return_delay OTdC num dC - - YB-G- pad needed for CR
new_line_delay OTdN num dN - - YB-G- pad needed for LF
linefeed_if_not_lf OTnl str nl - - YBCGE use to move down
backspace_if_not_bs OTbc str bc - - YBCGE move left, if not ^H
#
# GNU termcap library extensions. The GNU termcap file distributed with
# Emacs no longer uses these, but MT showed up in pre-9.0 versions of the
# BSD termcap file. The name clash with terminfo MT is resolved by type
# info; MT is converted to km.
#
gnu_has_meta_key OTMT bool MT - - ----E has meta key
# gnu_tab_width OTtw num tw - - ----E tab width in spaces
#
# GNU termcap *does* include the following extended capability, Only the
# now-obsolete Ann Arbor terminals used it.
#
# gnu_change_scroll_region OTcS str cS - - ---GE alternate set scrolling region
#
# The following comments describe capnames so ancient that I believe no
# software uses them any longer. Some of these have to go because they
# clash with terminfo names in ways that cannot be resolved by type
# information.
#
# These mytinfo codes are not used in the 4.4BSD curses code. They are
# marked obsolete in the 4.4BSD manual pages.
#
# There is one conflict with terminfo; ma is in both. This conflict is
# resolved by type information.
#
# The `ko' capability is translated by special code. It should contain a
# comma-separated list of capabilities for which there are corresponding keys.
# The `kn' code is accepted but ignored.
#
# The `ma' capability was a 4.0BSD feature used by vi version 2.
# It consists of pairs of characters corresponding to kl, kr, ku, kd, and kh.
# Besides being obsolete, that interpretation conflicts with max_attributes.
#
# Here is a description of memory_lock_above and memory_unlock:
# "You can 'freeze' data on the screen by turning on Memory Lock in a line of
# text. All lines above the cursor's current line become locked in place on
# the screen. Then enter data normally. When the screen fills up, any
# further data entered forces the first line of unfrozen line text to scroll
# under the frozen data. Lines scrolled off the screen are inserted into
# memory immediately preceding the first frozen line." (from the HP 700/96
# User's manual). VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l.
#
# Applications that use terminfo are supposed to behave as though xr is
# always true.
#
linefeed_is_newline OTNL bool NL - - YB--- move down with \n
# even_parity OTEP bool EP - - -B--- terminal requires even parity
# odd_parity OTOP bool OP - - -B--- terminal requires odd parity
# half_duplex OTHD bool HD - - -B--- terminal is half-duplex
# lower_case_only OTLC bool LC - - -B--- terminal has only lower case
# upper_case_only OTUC bool UC - - -B--- terminal has only upper case
backspace_delay OTdB num dB - - YB-G- padding required for ^H
# form_feed_delay OTdF num dF - - -B-G- padding required for ^L
horizontal_tab_delay OTdT num dT - - YB-G- padding required for ^I
# vertical_tab_delay OTdV num dV - - -B--- padding required for ^V
number_of_function_keys OTkn num kn - - -B-G- count of function keys
other_non_function_keys OTko str ko - - -B-G- list of self-mapped keycaps
arrow_key_map OTma str ma - - YBC-- map motion-keys for vi version 2
# memory_lock_above OTml str ml - - -B--- lock visible screen memory above the current line
# memory_unlock OTmu str mu - - -B--- unlock visible screen memory above the current line
has_hardware_tabs OTpt bool pt - - YB--- has 8-char tabs invoked with ^I
return_does_clr_eol OTxr bool xr - - YB--- return clears the line
# tek_4025_insert_line OTxx bool xx - - -BC-- Tektronix 4025 insert-line glitch
#
# mytinfo described this as a termcap capability, but it's not listed in the
# 4.4BSD man pages, and not found in the 4.4BSD termcap file. The ncurses
# package, like System V, behaves as though it is always true.
#
# rind_only_at_top OTxq bool xq - - ----- reverse index only works from top line
#
# University of Waterloo termcap extensions (as described in mytinfo).
# The `xl' termcap file clashes with a terminfo name; this ambiguity cannot
# be resolved by a type check. The descriptions are guesses from what was
# in the mytinfo tables.
#
# key_interrupt_char OTki str ki - - ----- string set by interrupt key (?)
# key_kill_char OTkk str kk - - ----- string set by kill key (?)
# key_suspend_char OTkz str kz - - ----- string set by suspend key (?)
# initialization_messy OTxc bool xc - - ----- initialization leaves garbage on the screen (?)
# ind_at_bottom_does_cr OTxl bool xl - - ----- index does a carriage return
#
# Nonstandard capabilities unique to Ross Ridge's `mytinfo' package.
# SR clashes with a terminfo name; this ambiguity cannot be resolved by a type
# check.
#
# scroll_left OTsl1 str Sl - - ----- scroll screen leftward
# scroll_right OTsr1 str Sr - - ----- scroll screen rightward
# parm_scroll_left OTsl str SL - - ----- scroll screen leftward #1 characters
# parm_scroll_right OTsr str SR - - ----- scroll screen rightward #1 characters
#
# The mytinfo capabilities end here.
#
# XENIX extensions:
#
# Xenix defined its own set of forms-drawing capabilities:
#
# cap IBM ASCII description ACS ASCII
# --- ----------- -------------------- ------------- ------
# G1 191 \277 M-? single upper right ACS_URCORNER
# G2 218 \332 M-Z single upper left ACS_ULCORNER
# G3 192 \300 M-@ single lower left ACS_LLCORNER
# G4 217 \331 M-Y single lower right ACS_LRCORNER
# G5 187 \273 M-; double upper right
# G6 201 \311 M-I double upper left
# G7 200 \310 M-H double lower left
# G8 188 \274 M-< double lower right
# GC 197 \305 M-E single intersection ACS_PLUS _ _
# GD 194 \302 M-B single down-tick ACS_TTEE |
# GH 196 \304 M-D single horizontal line ACS_HLINE
# GL 180 \264 M-4 single left tick ACS_RTEE -|
# GR 195 \303 M-C single right tick ACS_LTEE |-
# GU 193 \301 M-A single up tick ACS_BTEE _|_
# GV 179 \263 M-3 single vertical line ACS_VLINE
# Gc 206 \316 M-N double intersection
# Gd 203 \313 M-K double down tick
# Gh 205 \315 M-M double horizontal line
# Gl 204 \204 M-L double left tick
# Gr 185 \271 M-9 double right tick
# Gu 202 \312 M-J double up tick
# Gv 186 \272 M-: double vertical line
#
# The compiler will translate the single-line caps and discard the others
# (via IGNORE aliases further down). We don't want to do normal pad
# translation on these, they're often single-character printable ASCII
# strings that happen to be numerics. There's awk code in parametrized.sh
# that detects the acs_ prefix and uses it to suppress pad translation.
# These terminfo names are invented.
#
acs_ulcorner OTG2 str G2 - - ----- single upper left
acs_llcorner OTG3 str G3 - - ----- single lower left
acs_urcorner OTG1 str G1 - - ----- single upper right
acs_lrcorner OTG4 str G4 - - ----- single lower right
acs_ltee OTGR str GR - - ----- tee pointing right
acs_rtee OTGL str GL - - ----- tee pointing left
acs_btee OTGU str GU - - ----- tee pointing up
acs_ttee OTGD str GD - - ----- tee pointing down
acs_hline OTGH str GH - - ----- single horizontal line
acs_vline OTGV str GV - - ----- single vertical line
acs_plus OTGC str GC - - ----- single intersection
#
#############################################################################
#
# TERMINFO EXTENSION CAPABILITIES
#
# (see Caps-ncurses for the complete set of comments)
#
memory_lock meml str ml - - ----K lock memory above cursor
memory_unlock memu str mu - - ----K unlock memory
box_chars_1 box1 str bx - - ----K box characters primary set
#############################################################################
diff --git a/contrib/ncurses/include/Caps-ncurses b/contrib/ncurses/include/Caps-ncurses
index a1aef0d51e57..d8c8baca1fb3 100644
--- a/contrib/ncurses/include/Caps-ncurses
+++ b/contrib/ncurses/include/Caps-ncurses
@@ -1,451 +1,461 @@
##############################################################################
# Copyright 2019,2020 Thomas E. Dickey #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey
#
-# $Id: Caps-ncurses,v 1.8 2020/02/02 23:34:34 tom Exp $
+# $Id: Caps-ncurses,v 1.10 2020/09/29 19:05:19 tom Exp $
#
#############################################################################
#
# TERMINFO EXTENSION CAPABILITIES
#
# This section is all comments (selected lines are copied/uncommented into
# specific "Caps" files). The section describes what capabilities need to be
# squeezed out to get down to the XSI Curses standard set. They are flagged
# with K.
#
# HP extensions
#
# These extensions follow ptr_non (replacing everything after it) in HP
# terminfo files. Except for memory_lock and memory_unlock, they are
# functionally identical to SVr4 extensions, but they make the binary format
# different. Grrr....
#
#memory_lock meml str ml - - ----K lock memory above cursor
#memory_unlock memu str mu - - ----K unlock memory
#plab_norm pln str pn - - ----- program label #1 to show string #2
#label_on smln str LO - - ----- turn on soft labels
#label_off rmln str LF - - ----- turn off soft labels
#key_f11 kf11 str F1 - - ----- F11 function key
#key_f12 kf12 str F2 - - ----- F12 function key
#key_f13 kf13 str F3 - - ----- F13 function key
#key_f14 kf14 str F4 - - ----- F14 function key
#key_f15 kf15 str F5 - - ----- F15 function key
#key_f16 kf16 str F6 - - ----- F16 function key
#key_f17 kf17 str F7 - - ----- F17 function key
#key_f18 kf18 str F8 - - ----- F18 function key
#key_f19 kf19 str F9 - - ----- F19 function key
#key_f20 kf20 str FA - - ----- F20 function key
#key_f21 kf21 str FB - - ----- F21 function key
#key_f22 kf22 str FC - - ----- F22 function key
#key_f23 kf23 str FD - - ----- F23 function key
#key_f24 kf24 str FE - - ----- F24 function key
#key_f25 kf25 str FF - - ----- F25 function key
#key_f26 kf26 str FG - - ----- F26 function key
#key_f27 kf27 str FH - - ----- F27 function key
#key_f28 kf28 str FI - - ----- F28 function key
#key_f29 kf29 str FJ - - ----- F29 function key
#key_f30 kf30 str FK - - ----- F30 function key
#key_f31 kf31 str FL - - ----- F31 function key
#key_f32 kf32 str FM - - ----- F32 function key
#key_f33 kf33 str FN - - ----- F33 function key
#key_f34 kf34 str FO - - ----- F34 function key
#key_f35 kf35 str FP - - ----- F35 function key
#key_f36 kf36 str FQ - - ----- F36 function key
#key_f37 kf37 str FR - - ----- F37 function key
#key_f38 kf38 str FS - - ----- F38 function key
#key_f39 kf39 str FT - - ----- F39 function key
#key_f40 kf40 str FU - - ----- F40 function key
#key_f41 kf41 str FV - - ----- F41 function key
#key_f42 kf42 str FW - - ----- F42 function key
#key_f43 kf43 str FX - - ----- F43 function key
#key_f44 kf44 str FY - - ----- F44 function key
#key_f45 kf45 str FZ - - ----- F45 function key
#key_f46 kf46 str Fa - - ----- F46 function key
#key_f47 kf47 str Fb - - ----- F47 function key
#key_f48 kf48 str Fc - - ----- F48 function key
#key_f49 kf49 str Fd - - ----- F49 function key
#key_f50 kf50 str Fe - - ----- F50 function key
#key_f51 kf51 str Ff - - ----- F51 function key
#key_f52 kf52 str Fg - - ----- F52 function key
#key_f53 kf53 str Fh - - ----- F53 function key
#key_f54 kf54 str Fi - - ----- F54 function key
#key_f55 kf55 str Fj - - ----- F55 function key
#key_f56 kf56 str Fk - - ----- F56 function key
#key_f57 kf57 str Fl - - ----- F57 function key
#key_f58 kf58 str Fm - - ----- F58 function key
#key_f59 kf59 str Fn - - ----- F59 function key
#key_f60 kf60 str Fo - - ----- F60 function key
#key_f61 kf61 str Fp - - ----- F61 function key
#key_f62 kf62 str Fq - - ----- F62 function key
#key_f63 kf63 str Fr - - ----- F63 function key
#
# IBM extensions
#
# These extensions follow ptr_non (replacing everything after it) in IBM
# terminfo files.
#
# The places in the box[12] capabilities correspond to acsc characters, here is
# the mapping:
#
# box1[0] = ACS_ULCORNER
# box1[1] = ACS_HLINE
# box1[2] = ACS_URCORNER
# box1[3] = ACS_VLINE
# box1[4] = ACS_LRCORNER
# box1[5] = ACS_LLCORNER
# box1[6] = ACS_TTEE
# box1[7] = ACS_RTEE
# box1[8] = ACS_BTEE
# box1[9] = ACS_LTEE
# box1[10] = ACS_PLUS
#
# The box2 characters are the double-line versions of these forms graphics.
#
#box_chars_1 box1 str bx - - ----K box characters primary set
#box_chars_2 box2 str by - - ----K box characters secondary set
#box_attr_1 batt1 str Bx - - ----K attributes for box1
#box_attr_2 batt2 str By - - ----K attributes for box2
#color_bg_0 colb0 str d0 - - ----K background color 0
#color_bg_1 colb1 str d1 - - ----K background color 1
#color_bg_2 colb2 str d2 - - ----K background color 2
#color_bg_3 colb3 str d3 - - ----K background color 3
#color_bg_4 colb4 str d4 - - ----K background color 4
#color_bg_5 colb5 str d5 - - ----K background color 5
#color_bg_6 colb6 str d6 - - ----K background color 6
#color_bg_7 colb7 str d7 - - ----K background color 7
#color_fg_0 colf0 str c0 - - ----K foreground color 0
#color_fg_1 colf1 str c1 - - ----K foreground color 1
#color_fg_2 colf2 str c2 - - ----K foreground color 2
#color_fg_3 colf3 str c3 - - ----K foreground color 3
#color_fg_4 colf4 str c4 - - ----K foreground color 4
#color_fg_5 colf5 str c5 - - ----K foreground color 5
#color_fg_6 colf6 str c6 - - ----K foreground color 6
#color_fg_7 colf7 str c7 - - ----K foreground color 7
#font_0 font0 str f0 - - ----- select font 0
#font_1 font1 str f1 - - ----- select font 1
#font_2 font2 str f2 - - ----- select font 2
#font_3 font3 str f3 - - ----- select font 3
#font_4 font4 str f4 - - ----K select font 4
#font_5 font5 str f5 - - ----K select font 5
#font_6 font6 str f6 - - ----K select font 6
#font_7 font7 str f7 - - ----K select font 7
#key_back_tab kbtab str k0 - - ----- backtab key
#key_do kdo str ki - - ----K do request key
#key_command kcmd str kd - - ----K command-request key
#key_command_pane kcpn str kW - - ----K command-pane key
#key_end kend str kw - - ----- end key
#key_help khlp str kq - - ----- help key
#key_newline knl str nl - - ----K newline key
#key_next_pane knpn str kv - - ----K next-pane key
#key_prev_cmd kppn str kp - - ----K previous-command key
#key_prev_pane kppn str kV - - ----K previous-pane key
#key_quit kquit str kQ - - ----K quit key
#key_select ksel str kU - - ----- select key
#key_scroll_left kscl str kz - - ----K scroll left
#key_scroll_right kscr str kZ - - ----K scroll right
#key_tab ktab str ko - - ----K tab key
#key_smap_in1 kmpf1 str Kv - - ----K special mapped key 1 input
#key_smap_out1 kmpt1 str KV - - ----K special mapped key 1 output
#key_smap_in2 kmpf2 str Kw - - ----K special mapped key 2 input
#key_smap_out2 kmpt2 str KW - - ----K special mapped key 2 output
#key_smap_in3 kmpf3 str Kx - - ----K special mapped key 3 input
#key_smap_out3 kmpt3 str KX - - ----K special mapped key 3 output
#key_smap_in4 kmpf4 str Ky - - ----K special mapped key 4 input
#key_smap_out4 kmpt4 str KY - - ----K special mapped key 4 output
#key_smap_in5 kmpf5 str Kz - - ----K special mapped key 5 input
#key_smap_out5 kmpt5 str KZ - - ----K special mapped key 5 output
#appl_defined_str apstr str za - - ----K application-defined string
# The key_smap_in[6789] and key_smap_out[6789] capabilities aren't described in
# the IBM manual pages, so the cap name strings are guesses. The terminfo
# names are almost certainly right, the termcap ones almost certainly wrong.
#key_smap_in6 kmpf6 str k! - - ----K special mapped key 6 input
#key_smap_out6 kmpt6 str K@ - - ----K special mapped key 6 output
#key_smap_in7 kmpf7 str k# - - ----K special mapped key 7 input
#key_smap_out7 kmpt7 str K$ - - ----K special mapped key 7 output
#key_smap_in8 kmpf8 str k% - - ----K special mapped key 8 input
#key_smap_out8 kmpt8 str K^ - - ----K special mapped key 8 output
#key_smap_in9 kmpf9 str k& - - ----K special mapped key 9 input
#key_smap_out9 kmpt9 str K* - - ----K special mapped key 9 output
# Undocumented capabilities end here
#key_sf1 ksf1 str S1 - - ----K special function key 1
#key_sf2 ksf2 str S2 - - ----K special function key 2
#key_sf3 ksf3 str S3 - - ----K special function key 3
#key_sf4 ksf4 str S4 - - ----K special function key 4
#key_sf5 ksf5 str S5 - - ----K special function key 5
#key_sf6 ksf6 str S6 - - ----K special function key 6
#key_sf7 ksf7 str S7 - - ----K special function key 7
#key_sf8 ksf8 str S8 - - ----K special function key 8
#key_sf9 ksf9 str S9 - - ----K special function key 9
#key_sf10 ksf10 str SA - - ----K special function key 10
# AIX version 3 documents different codes for F11, F12 and does not mention
# F13-F64. AIX version 4 uses the same naming for F0-F63 as above.
#key_f11 kf11 str k< - - ----- function key 11
#key_f12 kf12 str k> - - ----- function key 12
# Undocumented capabilities end here.
#key_action kact str kJ - - ----K sent by action key
# The IBM docs say these capabilities are for table-drawing, and are
# valid only for aixterm descriptions.
#enter_topline_mode topl str tp - - ----K start top-line mode
#enter_bottom_mode btml str bm - - ----K start bottom-line mode
#enter_rvert_mode rvert str rv - - ----K start right-vertical mode
#enter_lvert_mode lvert str lv - - ----K start left-vertical mode
#
#############################################################################
#
# ALIAS DECLARATIONS
#
# Here we set up aliases for translating extensions into standard terminfo.
#
#---------------------------------- Termcap aliases -------------------------
#
# BSD aliases:
#
# This is a common error in many termcap files. We'll get notified during
# translation when this (or any other alias) fires.
#
capalias sb sr BSD scroll text down
#
# AT&T extensions:
#
# The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of
# nonstandard capabilities. Its signature is the KM capability, used to name
# some sort of keymap file. EE, BO, CI, CV, XS, DS, FL and FE are in this
# set. Comments in the original, and a little cross-checking with other AT&T
# documentation, seem to establish the following mappings:
#
capalias BO mr AT&T enter_reverse_mode
capalias CI vi AT&T cursor_invisible
capalias CV ve AT&T cursor_normal
capalias DS mh AT&T enter_dim_mode
#capalias EE me AT&T exit_attribute_mode
capalias FE LF AT&T label_on
capalias FL LO AT&T label_off
capalias XS mk AT&T enter_secure_mode
#
# We comment out EE because the conflicting XENIX EE is more common in
# old entries.
#
# XENIX extensions:
#
# These are the ones we know how to translate directly:
#
capalias EE mh XENIX exit_attribute_mode
capalias GE ae XENIX exit_alt_charset_mode
capalias GS as XENIX enter_alt_charset_mode
capalias CF vi XENIX cursor_invis
capalias CO ve XENIX cursor_normal
capalias EN @7 XENIX key_end
capalias HM kh XENIX key_home
capalias LD kL XENIX key_dl
capalias PD kN XENIX key_npage
capalias PN po XENIX prtr_off
capalias PS pf XENIX prtr_on
capalias PU kP XENIX key_ppage
capalias RT @8 XENIX kent
capalias UP ku XENIX kcuu1
capalias G6 IGNORE XENIX double-ACS_ULCORNER
capalias G7 IGNORE XENIX double-ACS_LLCORNER
capalias G5 IGNORE XENIX double-ACS_URCORNER
capalias G8 IGNORE XENIX double-ACS_LRCORNER
capalias Gr IGNORE XENIX double-ACS_LTEE
capalias Gr IGNORE XENIX double-ACS_RTEE
capalias Gu IGNORE XENIX double-ACS_BTEE
capalias Gd IGNORE XENIX double ACS_TTEE
capalias Gh IGNORE XENIX double-ACS_HLINE
capalias Gv IGNORE XENIX double-ACS_VLINE
capalias Gc IGNORE XENIX double-ACS_PLUS
capalias GG IGNORE XENIX acs-glitch
#
# IBM extensions:
#
capalias kq %1 IBM key_help
#
# Iris extensions:
#
capalias HS mh IRIS enter_dim_mode
#
# Tektronix extensions:
#
capalias KA k; Tek key_f10
capalias KB F1 Tek key_f11
capalias KC F2 Tek key_f12
capalias KD F3 Tek key_f13
capalias KE F4 Tek key_f14
capalias KF F5 Tek key_f15
capalias BC Sb Tek set_background
capalias FC Sf Tek set_foreground
#
# There are also the following:
#
# XENIX XENIX variable name name clash with terminfo?
# ----- ------------------- -------------------------
# CL key_char_left
# CR key_char_right
# CW key_change_window
# HP ??
# LF key_linefeed label_off
# NU key_next_unlocked_cell
# PL ??
# PR ??
# RC key_recalc remove_clock
# RF key_toggle_ref req_for_input
# WL key_word_left
# WR key_word_right
#
# If you know what any of the question-marked ones mean, please tell us.
#
#--------------------------------- Terminfo aliases ------------------------
#
# IBM extensions:
#
infoalias font0 s0ds IBM set0_des_seq
infoalias font1 s1ds IBM set1_des_seq
infoalias font2 s2ds IBM set2_des_seq
infoalias font3 s3ds IBM set3_des_seq
infoalias kbtab kcbt IBM key_backtab
infoalias ksel kslt IBM key_select
#
# Some others are identical to SVr4/XPG4 capabilities, in particular:
# kcmd, kend, khlp, and kf11...kf63.
#
#############################################################################
# This is a table of ncurses user-definable capabilities which applications
# developers may have used. ncurses may use the table to check consistency of
# types/parameters. Applications may have defined others (such as screen's
# LP and NF), but where a standard capability is available, those alternatives
# are not listed here.
#
used_by ncurses
+userdef CO num n number of indexed colors overlaying RGB space
userdef E3 str - clears the terminal's scrollback buffer.
userdef RGB bool - use direct colors with 1/3 of color-pair bits per color.
userdef RGB num n use direct colors with given number of bits per color.
userdef RGB str - use direct colors with given bit-layout.
userdef TS str - like "tsl", but uses no parameter.
userdef U8 num n terminal does/does not support VT100 SI/SO when processing UTF-8 encoding.
userdef XM str n initialize alternate xterm mouse mode
userdef grbom str - disable real bold (not intensity bright) mode.
userdef gsbom str - enable real bold (not intensity bright) mode.
userdef xm str - mouse response, no parameters
userdef xm str n mouse response, p1 = y-ordinate
userdef xm str nn mouse response, p2 = x-ordinate
userdef xm str nnn mouse response, p3 = button
userdef xm str nnns mouse response, p4 = state, e.g., pressed or released
userdef xm str nnnsn mouse response, p5 = y-ordinate starting region
userdef xm str nnnsnn mouse response, p6 = x-ordinate starting region
userdef xm str nnnsnnn mouse response, p7 = y-ordinate ending region
userdef xm str nnnsnnnn mouse response, p8 = x-ordinate ending region
#
+used_by mintty
+userdef Rmol str - remove overline-mode
+userdef Smol str - set overline-mode
+userdef blink2 str - turn on rapid blinking
+userdef norm str - turn off bold and half-bright mode
+userdef opaq str - turn off blank mode
+userdef setal str n set underline-color
+userdef smul2 str - begin double underline mode
+#
used_by screen
userdef AN bool - turn on autonuke.
userdef AX bool - understands ANSI set default fg/bg color (\E[39m / \E[49m).
userdef C0 str - use the string as a conversion table for font '0', like acsc.
userdef C8 bool - terminal shows bold as high-intensity colors.
userdef CE str - switch cursor-keys back to normal mode.
userdef CS str - switch cursor-keys to application mode.
userdef E0 str - switch charset 'G0' back to standard charset. Default is '\E(B'.
userdef G0 bool - terminal can deal with ISO 2022 font selection sequences.
userdef KJ str s set the encoding of the terminal.
userdef OL num n set the screen program's output buffer limit.
userdef S0 str s switch charset 'G0' to the specified charset. Default is '\E(%.'.
userdef TF bool - add missing capabilities to screen's termcap/info entry. (Set by default).
userdef WS str nn resize display. This capability has the desired width and height as arguments. SunView(tm) example: '\E[8;%d;%dt'.
userdef XC str s describe a translation of characters to strings depending on the current font.
userdef XT bool - terminal understands special xterm sequences (OSC, mouse tracking).
userdef Z0 str - change width to 132 columns.
userdef Z1 str - change width to 80 columns.
#
used_by tmux
userdef Cr str - restore the default cursor color.
userdef Cs str s set the cursor color.
userdef Csr str n change the cursor style, overriding Ss.
userdef Ms str ss store the current buffer in the host terminal's selection (clipboard).
userdef Se str - reset the cursor style to the terminal initial state.
userdef Smulx str n modify the appearance of underlines in VTE.
userdef Ss str n change the cursor style.
userdef rmxx str - reset ECMA-48 strikeout/crossed-out attributes.
userdef smxx str - set ECMA-48 strikeout/crossed-out attributes.
#
used_by xterm
userdef kDC3 str - alt delete-character
userdef kDC4 str - shift+alt delete-character
userdef kDC5 str - control delete-character
userdef kDC6 str - shift+control delete-character
userdef kDC7 str - alt+control delete-character
userdef kDN str - shift down-cursor
userdef kDN3 str - alt down-cursor
userdef kDN4 str - shift+alt down-cursor
userdef kDN5 str - control down-cursor
userdef kDN6 str - shift+control down-cursor
userdef kDN7 str - alt+control down-cursor
userdef kEND3 str - alt end
userdef kEND4 str - shift+alt end
userdef kEND5 str - control end
userdef kEND6 str - shift+control end
userdef kEND7 str - alt+control end
userdef kHOM3 str - alt home
userdef kHOM4 str - shift+alt home
userdef kHOM5 str - control home
userdef kHOM6 str - shift+control home
userdef kHOM7 str - alt+control home
userdef kIC3 str - alt insert-character
userdef kIC4 str - shift+alt insert-character
userdef kIC5 str - control insert-character
userdef kIC6 str - shift+control insert-character
userdef kIC7 str - alt+control insert-character
userdef kLFT3 str - alt left-cursor
userdef kLFT4 str - shift+alt left-cursor
userdef kLFT5 str - control left-cursor
userdef kLFT6 str - shift+control left-cursor
userdef kLFT7 str - alt+control left-cursor
userdef kNXT3 str - alt next
userdef kNXT4 str - shift+alt next
userdef kNXT5 str - control next
userdef kNXT6 str - shift+control next
userdef kNXT7 str - alt+control next
userdef kPRV3 str - alt previous
userdef kPRV4 str - shift+alt previous
userdef kPRV5 str - control previous
userdef kPRV6 str - shift+control previous
userdef kPRV7 str - alt+control previous
userdef kRIT3 str - alt right-cursor
userdef kRIT4 str - shift+alt right-cursor
userdef kRIT5 str - control right-cursor
userdef kRIT6 str - shift+control right-cursor
userdef kRIT7 str - alt+control right-cursor
userdef kUP str - shift up-cursor
userdef kUP3 str - alt up-cursor
userdef kUP4 str - shift+alt up-cursor
userdef kUP5 str - control up-cursor
userdef kUP6 str - shift+control up-cursor
userdef kUP7 str - alt+control up-cursor
userdef ka2 str - vt220-keypad extensions
userdef kb1 str - vt220-keypad extensions
userdef kb3 str - vt220-keypad extensions
userdef kc2 str - vt220-keypad extensions
#############################################################################
diff --git a/contrib/ncurses/include/Caps.aix4 b/contrib/ncurses/include/Caps.aix4
index 100489c592d8..a27f2699582b 100644
--- a/contrib/ncurses/include/Caps.aix4
+++ b/contrib/ncurses/include/Caps.aix4
@@ -1,1069 +1,1073 @@
##############################################################################
# Copyright 2019,2020 Thomas E. Dickey #
# Copyright 2001-2015,2016 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas Dickey
#
-# $Id: Caps.aix4,v 1.17 2020/02/02 23:34:34 tom Exp $
+# $Id: Caps.aix4,v 1.18 2020/10/17 21:30:19 tom Exp $
#
# This is an adaptation of ncurses' termcap/terminfo capability table, which
# is designed to align with AIX 4.x's terminfo.
#
# This table is used to generate initializers for tables that drive tic,
# infocmp, and the library compilation code used to support the termcap
# compatibility hack. It is also used to generate the tabular portion of the
# terminfo(5) man page; lines beginning with `#%' are passed through to become
# the terminfo table.
#
# This file has three major sections; a standard-capabilities table, two
# extension-capability tables, and a section of aliases declarations.
# The first two have the same format, as follows:
#
# FILE FORMAT
#
# Column 1: terminfo variable name
# Column 2: terminfo capability name
# Column 3: capability type (boolean, numeric, or string)
# Column 4: termcap capability name
# Column 5: KEY_xxx name, if any, `-' otherwise
# Column 6: value for KEY_xxx name, if any, `-' otherwise
# Column 7: Lead with `Y' if capability should be emitted in termcap
# translations, `-' otherwise
# Column 8: capability description
#
# The codes following [Y-] in column 7 describe the versions of termcap which
# use the given capability. This information is not used by the curses library
# proper; rather, it's there to help the terminfo maintainer avoid emitting
# termcap entry translations that are more than 1023 bytes long (and tank a
# lot of old termcap-using programs). The codes read as follows:
# B = mentioned in the BSD man page for 4.4BSD curses
# C = used by the 4.4BSD curses library
# G = mentioned in the documentation for GNU termcap
# E = used by GNU Emacs
# K = remove this terminfo capability when translating to standard format
# The important codes are C and E. A cap with C or E should be preserved in
# translation if possible. The problem is that preserving all such caps may
# lead to some termcap translations being too long. The termcap maintainer
# has a bit of a juggling act to do...potential problem cases are marked with
# an asterisk (*).
#
# The aliases section has the following format:
#
# Column 1: either `capalias' or `infoalias'
# Column 2: name to be aliased
# Column 3: what name it should translate to. The name IGNORE means it
# should be discarded with a warning message.
# Column 4: name of the extension set (used for compiler warning messages)
# Column 5: capability description (usually an associated terminfo variable)
#
# HANDLING TERMCAP AND TERMINFO EXTENSIONS
#
# There are basically five different ways to handle termcap and terminfo
# extensions:
#
# 1. Don't list the capname here, or list it but comment it out (the latter
# is preferable; someone might want to handle it in the future). If you do
# this, the capability will be treated as unknown and raise a warning from
# the compiler.
#
# 2. Alias it. This is appropriate if the capability has the same meaning
# as an already-supported one. The compiler will handle aliasing, emitting
# an appropriate informational message whenever an alias fires.
#
# 3. List it in the standard table. You almost certainly do *not* want
# to do this -- the capabilities in that one, and their order, have been
# carefully chosen to be SVr4-binary-compatible when they're written out
# as a terminfo object, and breaking this would be bad. It's up to the ncurses
# library what to do with the terminfo data after it's read in.
#
# 4. List it in the aliases table with an IGNORE target field. If you
# do this, the capability will be ignored on input (though the user will
# get a warning message about it).
#
# 5. List it in the extensions table. If you do this, the compiler will
# silently accept the capability, but the curses library proper will never
# see it (because it won't be written out as part of the terminfo object
# format). It's up to you what you have the compiler do with it.
#
# There are two opposite reasons to choose option 5. One is when you want
# to eat the capability silently and discard it when doing translations
# to terminfo with tic -I. Some very old obsolete BSD caps like :kn: are
# in this class. Nothing will ever use them again.
#
# More usually, you want the compiler to try to deduce something from the
# capability value that it can use to translate it into your output format.
# You'll need to write custom code, probably in postprocess_termcap() or
# postprocess_terminfo(), to handle the translation.
#
# CONTROLLING ENTRY LENGTH
#
# Notes on specific elisions made to fit translations within 1023 bytes:
#
# Machines with IBM PC-like keyboards want to be able to define the following
# keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap-
# only environments for End or Home-Down), key_dc, and key_ic. This is also
# the set of keys the `joe' editor will be upset if it can't see. So don't
# trim those out of the set to be translated to termcap, or various users of
# the termcap file will become irate.
#
# It might look tempting to leave those long init strings out of translations.
# We can't do it (yet); 4.4BSD tput and tset use them.
#
# We retain the sgr capability in translation in spite of the fact that neither
# 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are
# hard to understand without it, and (b) the entries in which it is long tend
# to be older types that don't use up a lot of string space on function keys.
# The tic(1) translation code will complain and elide it if it makes a critical
# difference (there is special code in tic to recognize this situation).
#
# Yes, BSD tset(1) uses hpa. We elide hpa/vpa anyway because the motion
# optimizer in BSD curses didn't use them. This omission seems to be the
# single most effective one, it shortened the resolved length of all thirteen
# problem entries in the 9.9.0 version of the terminfo master below critical.
#
# It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap
# translations go back over critical if we do this. As 4.4BSD curses fades
# into history and GNU termcap's application base shrinks towards being GNU
# Emacs only, we'll probably elide out some BSD-only capabilities in order
# to buy space for non-essentials Emacs is still using. Capabilities high
# on that hit list: rc, sc, uc.
#
#############################################################################
#
# STANDARD CAPABILITIES
#
#%The following is a complete table of the capabilities included in a
#%terminfo description block and available to terminfo-using code. In each
#%line of the table,
#%
#%The \fBvariable\fR is the name by which the programmer (at the terminfo level)
#%accesses the capability.
#%
#%The \fBcapname\fR is the short name used in the text of the database,
#%and is used by a person updating the database.
#%Whenever possible, capnames are chosen to be the same as or similar to
#%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses
#%identical or very similar names). Semantics are also intended to match
#%those of the specification.
#%
#%The termcap code is the old
#%.B termcap
#%capability name (some capabilities are new, and have names which termcap
#%did not originate).
#%.P
#%Capability names have no hard length limit, but an informal limit of 5
#%characters has been adopted to keep them short and to allow the tabs in
#%the source file
#%.B Caps
#%to line up nicely.
#%
#%Finally, the description field attempts to convey the semantics of the
#%capability. You may find some codes in the description field:
#%.TP
#%(P)
#%indicates that padding may be specified
#%.TP
#%#[1-9]
-#%in the description field indicates that the string is passed through tparm with
-#%parms as given (#\fIi\fP).
+#%in the description field indicates that the string is passed
+#%through \fBtparm\fP(3X) with parameters as given (#\fIi\fP).
+#%.IP
+#%If no parameters are listed in the description,
+#%passing the string through \fBtparm\fP(3X) may give unexpected results,
+#%e.g., if it contains percent (%%) signs.
#%.TP
#%(P*)
#%indicates that padding may vary in proportion to the number of
#%lines affected
#%.TP
#%(#\d\fIi\fP\u)
#%indicates the \fIi\fP\uth\d parameter.
#%
#%.PP
#% These are the boolean capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBBooleans name Code\fR
auto_left_margin bw bool bw - - YB-G- cub1 wraps from column 0 to last column
auto_right_margin am bool am - - YBCGE terminal has automatic margins
no_esc_ctlc xsb bool xb - - YBCG- beehive (f1=escape, f2=ctrl C)
ceol_standout_glitch xhp bool xs - - YBCGE standout not erased by overwriting (hp)
eat_newline_glitch xenl bool xn - - YBCGE newline ignored after 80 cols (concept)
erase_overstrike eo bool eo - - YBCG- can erase overstrikes with a blank
generic_type gn bool gn - - YB-G- generic line type
hard_copy hc bool hc - - YBCG- hardcopy terminal
has_meta_key km bool km - - YB-GE Has a meta key (i.e., sets 8th-bit)
has_status_line hs bool hs - - YB-G- has extra status line
insert_null_glitch in bool in - - YBCGE insert mode distinguishes nulls
memory_above da bool da - - YBCG- display may be retained above the screen
memory_below db bool db - - YB-GE display may be retained below the screen
move_insert_mode mir bool mi - - YBCGE safe to move while in insert mode
move_standout_mode msgr bool ms - - YBCGE safe to move while in standout mode
over_strike os bool os - - YBCG- terminal can overstrike
status_line_esc_ok eslok bool es - - YB-G- escape can be used on the status line
dest_tabs_magic_smso xt bool xt - - YBCGE tabs destructive, magic so char (t1061)
tilde_glitch hz bool hz - - YB-GE cannot print ~'s (Hazeltine)
transparent_underline ul bool ul - - YBCGE underline character overstrikes
xon_xoff xon bool xo - - YB--- terminal uses xon/xoff handshaking
needs_xon_xoff nxon bool nx - - ----- padding will not work, xon/xoff required
prtr_silent mc5i bool 5i - - ----- printer will not echo on screen
hard_cursor chts bool HC - - ----- cursor is hard to see
non_rev_rmcup nrrmc bool NR - - ----- smcup does not reverse rmcup
no_pad_char npc bool NP - - ----- pad character does not exist
non_dest_scroll_region ndscr bool ND - - ----- scrolling region is non-destructive
can_change ccc bool cc - - ----- terminal can re-define existing colors
back_color_erase bce bool ut - - ----- screen erased with background color
hue_lightness_saturation hls bool hl - - ----- terminal uses only HLS color notation (Tektronix)
col_addr_glitch xhpa bool YA - - ----- only positive motion for hpa/mhpa caps
cr_cancels_micro_mode crxm bool YB - - ----- using cr turns off micro mode
has_print_wheel daisy bool YC - - ----- printer needs operator to change character set
row_addr_glitch xvpa bool YD - - ----- only positive motion for vpa/mvpa caps
semi_auto_right_margin sam bool YE - - ----- printing in last column causes cr
cpi_changes_res cpix bool YF - - ----- changing character pitch changes resolution
lpi_changes_res lpix bool YG - - ----- changing line pitch changes resolution
#%.TE
#%.ad
#%
#%These are the numeric capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBNumeric name Code\fR
columns cols num co - - YBCGE number of columns in a line
init_tabs it num it - - YB-G- tabs initially every # spaces
lines lines num li - - YBCGE number of lines on screen or page
lines_of_memory lm num lm - - YB-G- lines of memory if > line. 0 means varies
magic_cookie_glitch xmc num sg - - YBCGE number of blank characters left by smso or rmso
padding_baud_rate pb num pb - - YB-GE lowest baud rate where padding needed
virtual_terminal vt num vt - - YB--- virtual terminal number (CB/unix)
width_status_line wsl num ws - - YB-G- number of columns in status line
num_labels nlab num Nl - - ----- number of labels on screen
label_height lh num lh - - ----- rows in each label
label_width lw num lw - - ----- columns in each label
max_attributes ma num ma - - YBC-- maximum combined attributes terminal can handle
maximum_windows wnum num MW - - ----- maximum number of definable windows
# These came in with SVr4's color support
max_colors colors num Co - - ----- maximum number of colors on screen
max_pairs pairs num pa - - ----- maximum number of color-pairs on the screen
no_color_video ncv num NC - - ----- video attributes that cannot be used with colors
#%.TE
#%.ad
#%
#%The following numeric capabilities are present in the SVr4.0 term structure,
#%but are not yet documented in the man page. They came in with SVr4's
#%printer support.
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBNumeric name Code\fR
buffer_capacity bufsz num Ya - - ----- numbers of bytes buffered before printing
dot_vert_spacing spinv num Yb - - ----- spacing of pins vertically in pins per inch
dot_horz_spacing spinh num Yc - - ----- spacing of dots horizontally in dots per inch
max_micro_address maddr num Yd - - ----- maximum value in micro_..._address
max_micro_jump mjump num Ye - - ----- maximum value in parm_..._micro
micro_col_size mcs num Yf - - ----- character step size when in micro mode
micro_line_size mls num Yg - - ----- line step size when in micro mode
number_of_pins npins num Yh - - ----- numbers of pins in print-head
output_res_char orc num Yi - - ----- horizontal resolution in units per line
output_res_line orl num Yj - - ----- vertical resolution in units per line
output_res_horz_inch orhi num Yk - - ----- horizontal resolution in units per inch
output_res_vert_inch orvi num Yl - - ----- vertical resolution in units per inch
print_rate cps num Ym - - ----- print rate in characters per second
wide_char_size widcs num Yn - - ----- character step size when in double wide mode
buttons btns num BT - - ----- number of buttons on mouse
bit_image_entwining bitwin num Yo - - ----- number of passes for each bit-image row
bit_image_type bitype num Yp - - ----- type of bit-image device
#%.TE
#%.ad
#%
#%These are the string capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
back_tab cbt str bt - - YBCGE back tab (P)
bell bel str bl - - YB-GE audible signal (bell) (P)
carriage_return cr str cr - - YBCGE carriage return (P*) (P*)
change_scroll_region csr str cs - - YBCGE change region to line #1 to line #2 (P)
clear_all_tabs tbc str ct - - YB-G- clear all tab stops (P)
clear_screen clear str cl - - YBCGE clear screen and home cursor (P*)
clr_eol el str ce - - YBCGE clear to end of line (P)
clr_eos ed str cd - - YBCGE clear to end of screen (P*)
column_address hpa str ch - - -B-GE* horizontal position #1, absolute (P)
command_character cmdch str CC - - YB-G- terminal settable cmd character in prototype !?
cursor_address cup str cm - - YBCGE move to row #1 columns #2
cursor_down cud1 str do - - YBCGE down one line
cursor_home home str ho - - YBCGE home cursor (if no cup)
cursor_invisible civis str vi - - YB-G- make cursor invisible
cursor_left cub1 str le - - YBCGE move left one space
cursor_mem_address mrcup str CM - - YB-G- memory relative cursor addressing, move to row #1 columns #2
cursor_normal cnorm str ve - - YBCGE make cursor appear normal (undo civis/cvvis)
cursor_right cuf1 str nd - - YBCGE non-destructive space (move right one space)
cursor_to_ll ll str ll - - YBCGE last line, first column (if no cup)
cursor_up cuu1 str up - - YBCGE up one line
cursor_visible cvvis str vs - - YBCGE make cursor very visible
delete_character dch1 str dc - - YBCGE delete character (P*)
delete_line dl1 str dl - - YBCGE delete line (P*)
dis_status_line dsl str ds - - YB-G- disable status line
down_half_line hd str hd - - YB-G- half a line down
enter_alt_charset_mode smacs str as - - YB-G- start alternate character set (P)
enter_blink_mode blink str mb - - YB-G- turn on blinking
enter_bold_mode bold str md - - YB-G- turn on bold (extra bright) mode
enter_ca_mode smcup str ti - - YBCGE string to start programs using cup
enter_delete_mode smdc str dm - - YBCGE enter delete mode
enter_dim_mode dim str mh - - YB-G- turn on half-bright mode
enter_insert_mode smir str im - - YBCGE enter insert mode
enter_secure_mode invis str mk - - -B-G-* turn on blank mode (characters invisible)
enter_protected_mode prot str mp - - -B-G-* turn on protected mode
enter_reverse_mode rev str mr - - YB-G- turn on reverse video mode
enter_standout_mode smso str so - - YBCGE begin standout mode
enter_underline_mode smul str us - - YBCGE begin underline mode
erase_chars ech str ec - - YB-G- erase #1 characters (P)
exit_alt_charset_mode rmacs str ae - - YB-G- end alternate character set (P)
exit_attribute_mode sgr0 str me - - YB-GE turn off all attributes
exit_ca_mode rmcup str te - - YBCGE strings to end programs using cup
exit_delete_mode rmdc str ed - - YBCGE end delete mode
exit_insert_mode rmir str ei - - YBCGE exit insert mode
exit_standout_mode rmso str se - - YBCGE exit standout mode
exit_underline_mode rmul str ue - - YBCGE exit underline mode
flash_screen flash str vb - - YBCGE visible bell (may not move cursor)
form_feed ff str ff - - YB-G- hardcopy terminal page eject (P*)
from_status_line fsl str fs - - YB-G- return from status line
init_1string is1 str i1 - - YB-G- initialization string
init_2string is2 str is - - YB-G- initialization string
init_3string is3 str i3 - - YB-G- initialization string
init_file if str if - - YB-G- name of initialization file
insert_character ich1 str ic - - YBCGE insert character (P)
insert_line il1 str al - - YBCGE insert line (P*)
insert_padding ip str ip - - YBCGE insert padding after inserted character
key_backspace kbs str kb KEY_BACKSPACE 0407 YB-G- backspace key
key_catab ktbc str ka KEY_CATAB 0526 -B-G-* clear-all-tabs key
key_clear kclr str kC KEY_CLEAR 0515 -B-G-* clear-screen or erase key
key_ctab kctab str kt KEY_CTAB 0525 -B-G-* clear-tab key
key_dc kdch1 str kD KEY_DC 0512 YB-G- delete-character key
key_dl kdl1 str kL KEY_DL 0510 -B-G-* delete-line key
key_down kcud1 str kd KEY_DOWN 0402 YBCGE down-arrow key
key_eic krmir str kM KEY_EIC 0514 -B-G-* sent by rmir or smir in insert mode
key_eol kel str kE KEY_EOL 0517 -B-G-* clear-to-end-of-line key
key_eos ked str kS KEY_EOS 0516 -B-G-* clear-to-end-of-screen key
key_f0 kf0 str k0 KEY_F(0) 0410 YBCGE F0 function key
key_f1 kf1 str k1 KEY_F(1) - YBCGE F1 function key
key_f10 kf10 str k; KEY_F(10) - ----E F10 function key
key_f2 kf2 str k2 KEY_F(2) - YBCGE F2 function key
key_f3 kf3 str k3 KEY_F(3) - YBCGE F3 function key
key_f4 kf4 str k4 KEY_F(4) - YBCGE F4 function key
key_f5 kf5 str k5 KEY_F(5) - YBCGE F5 function key
key_f6 kf6 str k6 KEY_F(6) - YBCGE F6 function key
key_f7 kf7 str k7 KEY_F(7) - YBCGE F7 function key
key_f8 kf8 str k8 KEY_F(8) - YBCGE F8 function key
key_f9 kf9 str k9 KEY_F(9) - YBCGE F9 function key
key_home khome str kh KEY_HOME 0406 YBCGE home key
key_ic kich1 str kI KEY_IC 0513 YB-GE insert-character key
key_il kil1 str kA KEY_IL 0511 -B-G-* insert-line key
key_left kcub1 str kl KEY_LEFT 0404 YBCGE left-arrow key
key_ll kll str kH KEY_LL 0533 YB-G- lower-left key (home down)
key_npage knp str kN KEY_NPAGE 0522 YB-GE next-page key
key_ppage kpp str kP KEY_PPAGE 0523 YB-GE previous-page key
key_right kcuf1 str kr KEY_RIGHT 0405 YBCGE right-arrow key
key_sf kind str kF KEY_SF 0520 -B-G-* scroll-forward key
key_sr kri str kR KEY_SR 0521 -B-G-* scroll-backward key
key_stab khts str kT KEY_STAB 0524 -B-G-* set-tab key
key_up kcuu1 str ku KEY_UP 0403 YBCGE up-arrow key
keypad_local rmkx str ke - - YBCGE leave 'keyboard_transmit' mode
keypad_xmit smkx str ks - - YBCGE enter 'keyboard_transmit' mode
lab_f0 lf0 str l0 - - -B-G-* label on function key f0 if not f0
lab_f1 lf1 str l1 - - -B-G-* label on function key f1 if not f1
lab_f10 lf10 str la - - ----- label on function key f10 if not f10
lab_f2 lf2 str l2 - - -B-G-* label on function key f2 if not f2
lab_f3 lf3 str l3 - - -B-G-* label on function key f3 if not f3
lab_f4 lf4 str l4 - - -B-G-* label on function key f4 if not f4
lab_f5 lf5 str l5 - - -B-G-* label on function key f5 if not f5
lab_f6 lf6 str l6 - - -B-G-* label on function key f6 if not f6
lab_f7 lf7 str l7 - - -B-G-* label on function key f7 if not f7
lab_f8 lf8 str l8 - - -B-G-* label on function key f8 if not f8
lab_f9 lf9 str l9 - - -B-G-* label on function key f9 if not f9
meta_off rmm str mo - - YB-G-* turn off meta mode
meta_on smm str mm - - YB-G-* turn on meta mode (8th-bit on)
newline nel str nw - - YB-G-* newline (behave like cr followed by lf)
pad_char pad str pc - - YBCGE padding char (instead of null)
parm_dch dch str DC - - YB-GE delete #1 characters (P*)
parm_delete_line dl str DL - - YBCGE delete #1 lines (P*)
parm_down_cursor cud str DO - - YBCGE down #1 lines (P*)
parm_ich ich str IC - - YB-GE insert #1 characters (P*)
parm_index indn str SF - - YBCG- scroll forward #1 lines (P)
parm_insert_line il str AL - - YBCGE insert #1 lines (P*)
parm_left_cursor cub str LE - - YBCGE move #1 characters to the left (P)
parm_right_cursor cuf str RI - - YBCGE move #1 characters to the right (P*)
parm_rindex rin str SR - - YBCG- scroll back #1 lines (P)
parm_up_cursor cuu str UP - - YBCGE up #1 lines (P*)
pkey_key pfkey str pk - - -B--- program function key #1 to type string #2
pkey_local pfloc str pl - - -B--- program function key #1 to execute string #2
pkey_xmit pfx str px - - -B--- program function key #1 to transmit string #2
print_screen mc0 str ps - - -B-G-* print contents of screen
prtr_off mc4 str pf - - -B-G-* turn off printer
prtr_on mc5 str po - - -B-G-* turn on printer
repeat_char rep str rp - - YB-GE repeat char #1 #2 times (P*)
reset_1string rs1 str r1 - - -B--- reset string
reset_2string rs2 str r2 - - -B--- reset string
reset_3string rs3 str r3 - - -B--- reset string
reset_file rf str rf - - -B--- name of reset file
restore_cursor rc str rc - - YBCG- restore cursor to position of last save_cursor
row_address vpa str cv - - -B-GE* vertical position #1 absolute (P)
save_cursor sc str sc - - YBCG- save current cursor position (P)
scroll_forward ind str sf - - YBCGE scroll text up (P)
scroll_reverse ri str sr - - YBCGE scroll text down (P)
set_attributes sgr str sa - - YB-G- define video attributes #1-#9 (PG9)
set_tab hts str st - - YB-G- set a tab in every row, current columns
set_window wind str wi - - -B-GE current window is lines #1-#2 cols #3-#4
tab ht str ta - - YBCGE tab to next 8-space hardware tab stop
to_status_line tsl str ts - - YB-G- move to status line, column #1
underline_char uc str uc - - YBCG- underline char and move past it
up_half_line hu str hu - - YB-G- half a line up
init_prog iprog str iP - - -B--- path name of program for initialization
key_a1 ka1 str K1 KEY_A1 0534 YB-GE upper left of keypad
key_a3 ka3 str K3 KEY_A3 0535 YB-GE upper right of keypad
key_b2 kb2 str K2 KEY_B2 0536 YB-GE center of keypad
key_c1 kc1 str K4 KEY_C1 0537 YB-GE lower left of keypad
key_c3 kc3 str K5 KEY_C3 0540 YB-GE lower right of keypad
prtr_non mc5p str pO - - -B-G-* turn on printer for #1 bytes
#
# IBM extensions
#
# These extensions follow ptr_non (replacing everything after it) in IBM
# terminfo files.
#
# The places in the box[12] capabilities correspond to acsc characters, here is
# the mapping:
#
# box1[0] = ACS_ULCORNER
# box1[1] = ACS_HLINE
# box1[2] = ACS_URCORNER
# box1[3] = ACS_VLINE
# box1[4] = ACS_LRCORNER
# box1[5] = ACS_LLCORNER
# box1[6] = ACS_TTEE
# box1[7] = ACS_RTEE
# box1[8] = ACS_BTEE
# box1[9] = ACS_LTEE
# box1[10] = ACS_PLUS
#
# The box2 characters are the double-line versions of these forms graphics.
#
box_chars_1 box1 str bx - - ----K box characters primary set
box_chars_2 box2 str by - - ----K box characters secondary set
box_attr_1 batt1 str Bx - - ----K attributes for box1
box_attr_2 batt2 str By - - ----K attributes for box2
color_bg_0 colb0 str d0 - - ----K background color 0
color_bg_1 colb1 str d1 - - ----K background color 1
color_bg_2 colb2 str d2 - - ----K background color 2
color_bg_3 colb3 str d3 - - ----K background color 3
color_bg_4 colb4 str d4 - - ----K background color 4
color_bg_5 colb5 str d5 - - ----K background color 5
color_bg_6 colb6 str d6 - - ----K background color 6
color_bg_7 colb7 str d7 - - ----K background color 7
color_fg_0 colf0 str c0 - - ----K foreground color 0
color_fg_1 colf1 str c1 - - ----K foreground color 1
color_fg_2 colf2 str c2 - - ----K foreground color 2
color_fg_3 colf3 str c3 - - ----K foreground color 3
color_fg_4 colf4 str c4 - - ----K foreground color 4
color_fg_5 colf5 str c5 - - ----K foreground color 5
color_fg_6 colf6 str c6 - - ----K foreground color 6
color_fg_7 colf7 str c7 - - ----K foreground color 7
font_0 font0 str f0 - - ----K select font 0
font_1 font1 str f1 - - ----K select font 1
font_2 font2 str f2 - - ----K select font 2
font_3 font3 str f3 - - ----K select font 3
font_4 font4 str f4 - - ----K select font 4
font_5 font5 str f5 - - ----K select font 5
font_6 font6 str f6 - - ----K select font 6
font_7 font7 str f7 - - ----K select font 7
key_back_tab kbtab str kO - - ----K backtab key
key_do kdo str ki - - ----K do request key
key_command kcmd str @4 - - ----K command-request key
key_command_pane kcpn str kW - - ----K command-pane key
key_end kend str @7 KEY_END 0550 ----- end key
key_help khlp str %1 - - ----- help key
key_newline knl str kn - - ----K newline key
key_next_pane knpn str kv - - ----K next-pane key
key_prev_cmd kpcmd str kp - - ----K previous-command key
key_prev_pane kppn str kV - - ----K previous-pane key
key_quit kquit str kQ - - ----K quit key
key_select_aix ksel str kU - - ----- select key
key_scroll_left kscl str kz - - ----K scroll left
key_scroll_right kscr str kZ - - ----K scroll right
key_tab ktab str ko - - ----K tab key
key_smap_in1 kmpf1 str Kv - - ----K special mapped key 1 input
key_smap_out1 kmpt1 str KV - - ----K special mapped key 1 output
key_smap_in2 kmpf2 str Kw - - ----K special mapped key 2 input
key_smap_out2 kmpt2 str KW - - ----K special mapped key 2 output
key_smap_in3 kmpf3 str Kx - - ----K special mapped key 3 input
key_smap_out3 kmpt3 str KX - - ----K special mapped key 3 output
key_smap_in4 kmpf4 str Ky - - ----K special mapped key 4 input
key_smap_out4 kmpt4 str KY - - ----K special mapped key 4 output
key_smap_in5 kmpf5 str Kz - - ----K special mapped key 5 input
key_smap_out5 kmpt5 str KZ - - ----K special mapped key 5 output
appl_defined_str apstr str za - - ----K application-defined string
key_smap_in6 kmpf6 str Kr - - ----K special mapped key 6 input
key_smap_out6 kmpt6 str KR - - ----K special mapped key 6 output
key_smap_in7 kmpf7 str Ks - - ----K special mapped key 7 input
key_smap_out7 kmpt7 str KS - - ----K special mapped key 7 output
key_smap_in8 kmpf8 str Kt - - ----K special mapped key 8 input
key_smap_out8 kmpt8 str KT - - ----K special mapped key 8 output
key_smap_in9 kmpf9 str Ku - - ----K special mapped key 9 input
key_smap_out9 kmpt9 str KU - - ----K special mapped key 9 output
key_sf1 ksf1 str S1 - - ----K special function key 1
key_sf2 ksf2 str S2 - - ----K special function key 2
key_sf3 ksf3 str S3 - - ----K special function key 3
key_sf4 ksf4 str S4 - - ----K special function key 4
key_sf5 ksf5 str S5 - - ----K special function key 5
key_sf6 ksf6 str S6 - - ----K special function key 6
key_sf7 ksf7 str S7 - - ----K special function key 7
key_sf8 ksf8 str S8 - - ----K special function key 8
key_sf9 ksf9 str S9 - - ----K special function key 9
key_sf10 ksf10 str S0 - - ----K special function key 10
key_f11 kf11 str F1 KEY_F(11) - ----E F11 function key
key_f12 kf12 str F2 KEY_F(12) - ----E F12 function key
key_f13 kf13 str F3 KEY_F(13) - ----E F13 function key
key_f14 kf14 str F4 KEY_F(14) - ----E F14 function key
key_f15 kf15 str F5 KEY_F(15) - ----E F15 function key
key_f16 kf16 str F6 KEY_F(16) - ----E F16 function key
key_f17 kf17 str F7 KEY_F(17) - ----E F17 function key
key_f18 kf18 str F8 KEY_F(18) - ----E F18 function key
key_f19 kf19 str F9 KEY_F(19) - ----E F19 function key
key_f20 kf20 str FA KEY_F(20) - ----E F20 function key
key_f21 kf21 str FB KEY_F(21) - ----E F21 function key
key_f22 kf22 str FC KEY_F(22) - ----E F22 function key
key_f23 kf23 str FD KEY_F(23) - ----E F23 function key
key_f24 kf24 str FE KEY_F(24) - ----E F24 function key
key_f25 kf25 str FF KEY_F(25) - ----E F25 function key
key_f26 kf26 str FG KEY_F(26) - ----E F26 function key
key_f27 kf27 str FH KEY_F(27) - ----E F27 function key
key_f28 kf28 str FI KEY_F(28) - ----E F28 function key
key_f29 kf29 str FJ KEY_F(29) - ----E F29 function key
key_f30 kf30 str FK KEY_F(30) - ----E F30 function key
key_f31 kf31 str FL KEY_F(31) - ----E F31 function key
key_f32 kf32 str FM KEY_F(32) - ----E F32 function key
key_f33 kf33 str FN KEY_F(33) - ----E F33 function key
key_f34 kf34 str FO KEY_F(34) - ----E F34 function key
key_f35 kf35 str FP KEY_F(35) - ----E F35 function key
key_f36 kf36 str FQ KEY_F(36) - ----E F36 function key
key_f37 kf37 str FR KEY_F(37) - ----E F37 function key
key_f38 kf38 str FS KEY_F(38) - ----E F38 function key
key_f39 kf39 str FT KEY_F(39) - ----E F39 function key
key_f40 kf40 str FU KEY_F(40) - ----E F40 function key
key_f41 kf41 str FV KEY_F(41) - ----E F41 function key
key_f42 kf42 str FW KEY_F(42) - ----E F42 function key
key_f43 kf43 str FX KEY_F(43) - ----E F43 function key
key_f44 kf44 str FY KEY_F(44) - ----E F44 function key
key_f45 kf45 str FZ KEY_F(45) - ----E F45 function key
key_f46 kf46 str Fa KEY_F(46) - ----E F46 function key
key_f47 kf47 str Fb KEY_F(47) - ----E F47 function key
key_f48 kf48 str Fc KEY_F(48) - ----E F48 function key
key_f49 kf49 str Fd KEY_F(49) - ----E F49 function key
key_f50 kf50 str Fe KEY_F(50) - ----E F50 function key
key_f51 kf51 str Ff KEY_F(51) - ----E F51 function key
key_f52 kf52 str Fg KEY_F(52) - ----E F52 function key
key_f53 kf53 str Fh KEY_F(53) - ----E F53 function key
key_f54 kf54 str Fi KEY_F(54) - ----E F54 function key
key_f55 kf55 str Fj KEY_F(55) - ----E F55 function key
key_f56 kf56 str Fk KEY_F(56) - ----E F56 function key
key_f57 kf57 str Fl KEY_F(57) - ----E F57 function key
key_f58 kf58 str Fm KEY_F(58) - ----E F58 function key
key_f59 kf59 str Fn KEY_F(59) - ----E F59 function key
key_f60 kf60 str Fo KEY_F(60) - ----E F60 function key
key_f61 kf61 str Fp KEY_F(61) - ----E F61 function key
key_f62 kf62 str Fq KEY_F(62) - ----E F62 function key
key_f63 kf63 str Fr KEY_F(63) - ----E F63 function key
key_action kact str kJ - - ----K sent by action key
# The IBM docs say these capabilities are for table-drawing, and are
# valid only for aixterm descriptions.
enter_topline_mode topl str tp - - ----K start top-line mode
enter_bottom_mode btml str bm - - ----K start bottom-line mode
enter_rvert_mode rvert str rv - - ----K start right-vertical mode
enter_lvert_mode lvert str lv - - ----K start left-vertical mode
#
# SVr4 capabilities resume here. Note that key_end is in the IBM-extensions.
#
char_padding rmp str rP - - ----- like ip but when in insert mode
acs_chars acsc str ac - - ----- graphics charset pairs, based on vt100
plab_norm pln str pn - - ----- program label #1 to show string #2
key_btab kcbt str kB KEY_BTAB 0541 ----- back-tab key
enter_xon_mode smxon str SX - - ----- turn on xon/xoff handshaking
exit_xon_mode rmxon str RX - - ----- turn off xon/xoff handshaking
enter_am_mode smam str SA - - ----- turn on automatic margins
exit_am_mode rmam str RA - - ----- turn off automatic margins
xon_character xonc str XN - - ----- XON character
xoff_character xoffc str XF - - ----- XOFF character
ena_acs enacs str eA - - ----- enable alternate char set
label_on smln str LO - - ----- turn on soft labels
label_off rmln str LF - - ----- turn off soft labels
key_beg kbeg str @1 KEY_BEG 0542 ----- begin key
key_cancel kcan str @2 KEY_CANCEL 0543 ----- cancel key
key_close kclo str @3 KEY_CLOSE 0544 ----- close key
#key_command kcmd str @4 KEY_COMMAND 0545 ----- command key
key_copy kcpy str @5 KEY_COPY 0546 ----- copy key
key_create kcrt str @6 KEY_CREATE 0547 ----- create key
#key_end kend str @7 KEY_END 0550 ----- end key
key_enter kent str @8 KEY_ENTER 0527 ----- enter/send key
key_exit kext str @9 KEY_EXIT 0551 ----- exit key
key_find kfnd str @0 KEY_FIND 0552 ----- find key
#key_help khlp str %1 KEY_HELP 0553 ----- help key
key_mark kmrk str %2 KEY_MARK 0554 ----- mark key
key_message kmsg str %3 KEY_MESSAGE 0555 ----- message key
key_move kmov str %4 KEY_MOVE 0556 ----- move key
key_next knxt str %5 KEY_NEXT 0557 ----- next key
key_open kopn str %6 KEY_OPEN 0560 ----- open key
key_options kopt str %7 KEY_OPTIONS 0561 ----- options key
key_previous kprv str %8 KEY_PREVIOUS 0562 ----- previous key
key_print kprt str %9 KEY_PRINT 0532 ----- print key
key_redo krdo str %0 KEY_REDO 0563 ----- redo key
key_reference kref str &1 KEY_REFERENCE 0564 ----- reference key
key_refresh krfr str &2 KEY_REFRESH 0565 ----- refresh key
key_replace krpl str &3 KEY_REPLACE 0566 ----- replace key
key_restart krst str &4 KEY_RESTART 0567 ----- restart key
key_resume kres str &5 KEY_RESUME 0570 ----- resume key
key_save ksav str &6 KEY_SAVE 0571 ----- save key
key_suspend kspd str &7 KEY_SUSPEND 0627 ----- suspend key
key_undo kund str &8 KEY_UNDO 0630 ----- undo key
key_sbeg kBEG str &9 KEY_SBEG 0572 ----- shifted begin key
key_scancel kCAN str &0 KEY_SCANCEL 0573 ----- shifted cancel key
key_scommand kCMD str *1 KEY_SCOMMAND 0574 ----- shifted command key
key_scopy kCPY str *2 KEY_SCOPY 0575 ----- shifted copy key
key_screate kCRT str *3 KEY_SCREATE 0576 ----- shifted create key
key_sdc kDC str *4 KEY_SDC 0577 ----- shifted delete-character key
key_sdl kDL str *5 KEY_SDL 0600 ----- shifted delete-line key
key_select kslt str *6 KEY_SELECT 0601 ----- select key
key_send kEND str *7 KEY_SEND 0602 ----- shifted end key
key_seol kEOL str *8 KEY_SEOL 0603 ----- shifted clear-to-end-of-line key
key_sexit kEXT str *9 KEY_SEXIT 0604 ----- shifted exit key
key_sfind kFND str *0 KEY_SFIND 0605 ----- shifted find key
key_shelp kHLP str #1 KEY_SHELP 0606 ----- shifted help key
key_shome kHOM str #2 KEY_SHOME 0607 ----- shifted home key
key_sic kIC str #3 KEY_SIC 0610 ----- shifted insert-character key
key_sleft kLFT str #4 KEY_SLEFT 0611 ----- shifted left-arrow key
key_smessage kMSG str %a KEY_SMESSAGE 0612 ----- shifted message key
key_smove kMOV str %b KEY_SMOVE 0613 ----- shifted move key
key_snext kNXT str %c KEY_SNEXT 0614 ----- shifted next key
key_soptions kOPT str %d KEY_SOPTIONS 0615 ----- shifted options key
key_sprevious kPRV str %e KEY_SPREVIOUS 0616 ----- shifted previous key
key_sprint kPRT str %f KEY_SPRINT 0617 ----- shifted print key
key_sredo kRDO str %g KEY_SREDO 0620 ----- shifted redo key
key_sreplace kRPL str %h KEY_SREPLACE 0621 ----- shifted replace key
key_sright kRIT str %i KEY_SRIGHT 0622 ----- shifted right-arrow key
key_srsume kRES str %j KEY_SRSUME 0623 ----- shifted resume key
key_ssave kSAV str !1 KEY_SSAVE 0624 ----- shifted save key
key_ssuspend kSPD str !2 KEY_SSUSPEND 0625 ----- shifted suspend key
key_sundo kUND str !3 KEY_SUNDO 0626 ----- shifted undo key
req_for_input rfi str RF - - ----- send next input char (for ptys)
clr_bol el1 str cb - - ----- Clear to beginning of line
clear_margins mgc str MC - - ----- clear right and left soft margins
set_left_margin smgl str ML - - ----- set left soft margin at current column. See smgl. (ML is not in BSD termcap).
set_right_margin smgr str MR - - ----- set right soft margin at current column
label_format fln str Lf - - ----- label format
set_clock sclk str SC - - ----- set clock, #1 hrs #2 mins #3 secs
display_clock dclk str DK - - ----- display clock
remove_clock rmclk str RC - - ----- remove clock
create_window cwin str CW - - ----- define a window #1 from #2,#3 to #4,#5
goto_window wingo str WG - - ----- go to window #1
hangup hup str HU - - ----- hang-up phone
dial_phone dial str DI - - ----- dial number #1
quick_dial qdial str QD - - ----- dial number #1 without checking
tone tone str TO - - ----- select touch tone dialing
pulse pulse str PU - - ----- select pulse dialing
flash_hook hook str fh - - ----- flash switch hook
fixed_pause pause str PA - - ----- pause for 2-3 seconds
wait_tone wait str WA - - ----- wait for dial-tone
user0 u0 str u0 - - ----- User string #0
user1 u1 str u1 - - ----- User string #1
user2 u2 str u2 - - ----- User string #2
user3 u3 str u3 - - ----- User string #3
user4 u4 str u4 - - ----- User string #4
user5 u5 str u5 - - ----- User string #5
user6 u6 str u6 - - ----- User string #6
user7 u7 str u7 - - ----- User string #7
user8 u8 str u8 - - ----- User string #8
user9 u9 str u9 - - ----- User string #9
#
# SVr4 added these capabilities to support color
#
orig_pair op str op - - ----- Set default pair to its original value
orig_colors oc str oc - - ----- Set all color pairs to the original ones
initialize_color initc str Ic - - ----- initialize color #1 to (#2,#3,#4)
initialize_pair initp str Ip - - ----- Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)
set_color_pair scp str sp - - ----- Set current color pair to #1
set_foreground setf str Sf - - ----- Set foreground color #1
set_background setb str Sb - - ----- Set background color #1
#
# SVr4 added these capabilities to support printers
#
change_char_pitch cpi str ZA - - ----- Change number of characters per inch to #1
change_line_pitch lpi str ZB - - ----- Change number of lines per inch to #1
change_res_horz chr str ZC - - ----- Change horizontal resolution to #1
change_res_vert cvr str ZD - - ----- Change vertical resolution to #1
define_char defc str ZE - - ----- Define a character #1, #2 dots wide, descender #3
enter_doublewide_mode swidm str ZF - - ----- Enter double-wide mode
enter_draft_quality sdrfq str ZG - - ----- Enter draft-quality mode
enter_italics_mode sitm str ZH - - ----- Enter italic mode
enter_leftward_mode slm str ZI - - ----- Start leftward carriage motion
enter_micro_mode smicm str ZJ - - ----- Start micro-motion mode
enter_near_letter_quality snlq str ZK - - ----- Enter NLQ mode
enter_normal_quality snrmq str ZL - - ----- Enter normal-quality mode
enter_shadow_mode sshm str ZM - - ----- Enter shadow-print mode
enter_subscript_mode ssubm str ZN - - ----- Enter subscript mode
enter_superscript_mode ssupm str ZO - - ----- Enter superscript mode
enter_upward_mode sum str ZP - - ----- Start upward carriage motion
exit_doublewide_mode rwidm str ZQ - - ----- End double-wide mode
exit_italics_mode ritm str ZR - - ----- End italic mode
exit_leftward_mode rlm str ZS - - ----- End left-motion mode
exit_micro_mode rmicm str ZT - - ----- End micro-motion mode
exit_shadow_mode rshm str ZU - - ----- End shadow-print mode
exit_subscript_mode rsubm str ZV - - ----- End subscript mode
exit_superscript_mode rsupm str ZW - - ----- End superscript mode
exit_upward_mode rum str ZX - - ----- End reverse character motion
micro_column_address mhpa str ZY - - ----- Like column_address in micro mode
micro_down mcud1 str ZZ - - ----- Like cursor_down in micro mode
micro_left mcub1 str Za - - ----- Like cursor_left in micro mode
micro_right mcuf1 str Zb - - ----- Like cursor_right in micro mode
micro_row_address mvpa str Zc - - ----- Like row_address #1 in micro mode
micro_up mcuu1 str Zd - - ----- Like cursor_up in micro mode
order_of_pins porder str Ze - - ----- Match software bits to print-head pins
parm_down_micro mcud str Zf - - ----- Like parm_down_cursor in micro mode
parm_left_micro mcub str Zg - - ----- Like parm_left_cursor in micro mode
parm_right_micro mcuf str Zh - - ----- Like parm_right_cursor in micro mode
parm_up_micro mcuu str Zi - - ----- Like parm_up_cursor in micro mode
select_char_set scs str Zj - - ----- Select character set, #1
set_bottom_margin smgb str Zk - - ----- Set bottom margin at current line
set_bottom_margin_parm smgbp str Zl - - ----- Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom
set_left_margin_parm smglp str Zm - - ----- Set left (right) margin at column #1
set_right_margin_parm smgrp str Zn - - ----- Set right margin at column #1
set_top_margin smgt str Zo - - ----- Set top margin at current line
set_top_margin_parm smgtp str Zp - - ----- Set top (bottom) margin at row #1
start_bit_image sbim str Zq - - ----- Start printing bit image graphics
start_char_set_def scsd str Zr - - ----- Start character set definition #1, with #2 characters in the set
stop_bit_image rbim str Zs - - ----- Stop printing bit image graphics
stop_char_set_def rcsd str Zt - - ----- End definition of character set #1
subscript_characters subcs str Zu - - ----- List of subscriptable characters
superscript_characters supcs str Zv - - ----- List of superscriptable characters
these_cause_cr docr str Zw - - ----- Printing any of these characters causes CR
zero_motion zerom str Zx - - ----- No motion for subsequent character
#%.TE
#%.ad
#%
#%The following string capabilities are present in the SVr4.0 term structure,
#%but were originally not documented in the man page.
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw18.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
char_set_names csnm str Zy - - ----- Produce #1'th item from list of character set names
key_mouse kmous str Km KEY_MOUSE 0631 ----- Mouse event has occurred
mouse_info minfo str Mi - - ----- Mouse status information
req_mouse_pos reqmp str RQ - - ----- Request mouse position
get_mouse getm str Gm - - ----- Curses should get button events, parameter #1 not documented.
set_a_foreground setaf str AF - - ----- Set foreground color to #1, using ANSI escape
set_a_background setab str AB - - ----- Set background color to #1, using ANSI escape
pkey_plab pfxl str xl - - ----- Program function key #1 to type string #2 and show string #3
device_type devt str dv - - ----- Indicate language/codeset support
code_set_init csin str ci - - ----- Init sequence for multiple codesets
set0_des_seq s0ds str s0 - - ----- Shift to codeset 0 (EUC set 0, ASCII)
set1_des_seq s1ds str s1 - - ----- Shift to codeset 1
set2_des_seq s2ds str s2 - - ----- Shift to codeset 2
set3_des_seq s3ds str s3 - - ----- Shift to codeset 3
set_lr_margin smglr str ML - - ----- Set both left and right margins to #1, #2. (ML is not in BSD termcap).
set_tb_margin smgtb str MT - - ----- Sets both top and bottom margins to #1, #2
bit_image_repeat birep str Xy - - ----- Repeat bit image cell #1 #2 times
bit_image_newline binel str Zz - - ----- Move to next row of the bit image
bit_image_carriage_return bicr str Yv - - ----- Move to beginning of same row
color_names colornm str Yw - - ----- Give name for color #1
define_bit_image_region defbi str Yx - - ----- Define rectangular bit image region
end_bit_image_region endbi str Yy - - ----- End a bit-image region
set_color_band setcolor str Yz - - ----- Change to ribbon color #1
set_page_length slines str YZ - - ----- Set page length to #1 lines
#
# SVr4 added these capabilities for direct PC-clone support
#
display_pc_char dispc str S1 - - ----- Display PC character #1
enter_pc_charset_mode smpch str S2 - - ----- Enter PC character display mode
exit_pc_charset_mode rmpch str S3 - - ----- Exit PC character display mode
enter_scancode_mode smsc str S4 - - ----- Enter PC scancode mode
exit_scancode_mode rmsc str S5 - - ----- Exit PC scancode mode
pc_term_options pctrm str S6 - - ----- PC terminal options
scancode_escape scesc str S7 - - ----- Escape for scancode emulation
alt_scancode_esc scesa str S8 - - ----- Alternate escape for scancode emulation
#%.TE
#%.ad
#%
#%.in .8i
#%The XSI Curses standard added these hardcopy capabilities.
#%They were used in some post-4.1 versions of System V curses,
#%e.g., Solaris 2.5 and IRIX 6.x.
#%Except for \fBYI\fP, the \fBncurses\fR termcap names for them are invented.
#%According to the XSI Curses standard, they have no termcap names.
#%If your compiled terminfo entries use these,
#%they may not be binary-compatible with System V terminfo
#%entries after SVr4.1; beware!
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
#enter_horizontal_hl_mode ehhlm str Xh - - ----- Enter horizontal highlight mode
#enter_left_hl_mode elhlm str Xl - - ----- Enter left highlight mode
#enter_low_hl_mode elohlm str Xo - - ----- Enter low highlight mode
#enter_right_hl_mode erhlm str Xr - - ----- Enter right highlight mode
#enter_top_hl_mode ethlm str Xt - - ----- Enter top highlight mode
#enter_vertical_hl_mode evhlm str Xv - - ----- Enter vertical highlight mode
#set_a_attributes sgr1 str sA - - ----- Define second set of video attributes #1-#6
set_pglen_inch slength str YI - - ----- Set page length to #1 hundredth of an inch (some implementations use sL for termcap).
#%.TE
#%.ad
#
# The magic token below tells the tic compiler-generator code that all the caps
# past it should be ignored (not written out) when dumping terminfo objects. It
# also tells the man page table generator not to pass through following lines
# This means we can have obsolete capabilities and pseudo-capabilities that are
# recognized for termcap or terminfo compilation, but not output.
#
# %%-STOP-HERE-%%
#
# Don't move this casually! In fact, don't move it at all unless you're
# either doing it to add System V or XPG4 extensions, or have decided you
# don't care about SVr4 binary compatibility.
#
#############################################################################
#
# TERMCAP EXTENSION CAPABILITIES
#
# The capabilities below are either obsolete or extensions on certain systems.
# They are not used by SVR4 terminfo. Some are used by captoinfo to translate
# termcap sources; the rest are listed for completeness, and in case somebody
# cares about them enough to hack in code that will translate them into
# terminfo capabilities.
#
# The first part of the list is from Ross Ridge's `mytinfo' package
# (comp.sources.unix, volume 26); the variable names and terminfo names (as
# well as the termcap codes) match his list.
#
# This group of codes is not marked obsolete in 4.4BSD, but have no direct
# terminfo equivalents. The rs capability is specially translated to terminfo
# r2, and vice versa, if an entry does not already have an r2. Similarly,
# i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2).
# The ug capability is thrown away, but assumed to be whatever sg is if the
# latter is nonzero and we're dumping in termcap format.
#
termcap_init2 OTi2 str i2 - - YB--- secondary initialization string
termcap_reset OTrs str rs - - YB-G- terminal reset string
magic_cookie_glitch_ul OTug num ug - - YBCGE number of blanks left by ul
#
# Obsolete termcap capabilities. Some are used for termcap translation. The
# code uses the 'OT' prefix we put on obsolete capabilities to suppress
# printing them in terminfo source dumps of compiled entries.
#
backspaces_with_bs OTbs bool bs - - YBCGE uses ^H to move left
crt_no_scrolling OTns bool ns - - YBCG- crt cannot scroll
no_correctly_working_cr OTnc bool nc - - YBCG- no way to go to start of line
carriage_return_delay OTdC num dC - - YB-G- pad needed for CR
new_line_delay OTdN num dN - - YB-G- pad needed for LF
linefeed_if_not_lf OTnl str nl - - YBCGE use to move down
backspace_if_not_bs OTbc str bc - - YBCGE move left, if not ^H
#
# GNU termcap library extensions. The GNU termcap file distributed with
# Emacs no longer uses these, but MT showed up in pre-9.0 versions of the
# BSD termcap file. The name clash with terminfo MT is resolved by type
# info; MT is converted to km.
#
gnu_has_meta_key OTMT bool MT - - ----E has meta key
# gnu_tab_width OTtw num tw - - ----E tab width in spaces
#
# GNU termcap *does* include the following extended capability, Only the
# now-obsolete Ann Arbor terminals used it.
#
# gnu_change_scroll_region OTcS str cS - - ---GE alternate set scrolling region
#
# The following comments describe capnames so ancient that I believe no
# software uses them any longer. Some of these have to go because they
# clash with terminfo names in ways that cannot be resolved by type
# information.
#
# These mytinfo codes are not used in the 4.4BSD curses code. They are
# marked obsolete in the 4.4BSD manual pages.
#
# There is one conflict with terminfo; ma is in both. This conflict is
# resolved by type information.
#
# The `ko' capability is translated by special code. It should contain a
# comma-separated list of capabilities for which there are corresponding keys.
# The `kn' code is accepted but ignored.
#
# The `ma' capability was a 4.0BSD feature used by vi version 2.
# It consists of pairs of characters corresponding to kl, kr, ku, kd, and kh.
# Besides being obsolete, that interpretation conflicts with max_attributes.
#
# Here is a description of memory_lock_above and memory_unlock:
# "You can 'freeze' data on the screen by turning on Memory Lock in a line of
# text. All lines above the cursor's current line become locked in place on
# the screen. Then enter data normally. When the screen fills up, any
# further data entered forces the first line of unfrozen line text to scroll
# under the frozen data. Lines scrolled off the screen are inserted into
# memory immediately preceding the first frozen line." (from the HP 700/96
# User's manual). VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l.
#
# Applications that use terminfo are supposed to behave as though xr is
# always true.
#
linefeed_is_newline OTNL bool NL - - YB--- move down with \n
# even_parity OTEP bool EP - - -B--- terminal requires even parity
# odd_parity OTOP bool OP - - -B--- terminal requires odd parity
# half_duplex OTHD bool HD - - -B--- terminal is half-duplex
# lower_case_only OTLC bool LC - - -B--- terminal has only lower case
# upper_case_only OTUC bool UC - - -B--- terminal has only upper case
backspace_delay OTdB num dB - - YB-G- padding required for ^H
# form_feed_delay OTdF num dF - - -B-G- padding required for ^L
horizontal_tab_delay OTdT num dT - - YB-G- padding required for ^I
# vertical_tab_delay OTdV num dV - - -B--- padding required for ^V
number_of_function_keys OTkn num kn - - -B-G- count of function keys
other_non_function_keys OTko str ko - - -B-G- list of self-mapped keycaps
arrow_key_map OTma str ma - - YBC-- map motion-keys for vi version 2
# memory_lock_above OTml str ml - - -B--- lock visible screen memory above the current line
# memory_unlock OTmu str mu - - -B--- unlock visible screen memory above the current line
has_hardware_tabs OTpt bool pt - - YB--- has 8-char tabs invoked with ^I
return_does_clr_eol OTxr bool xr - - YB--- return clears the line
# tek_4025_insert_line OTxx bool xx - - -BC-- Tektronix 4025 insert-line glitch
#
# mytinfo described this as a termcap capability, but it's not listed in the
# 4.4BSD man pages, and not found in the 4.4BSD termcap file. The ncurses
# package, like System V, behaves as though it is always true.
#
# rind_only_at_top OTxq bool xq - - ----- reverse index only works from top line
#
# University of Waterloo termcap extensions (as described in mytinfo).
# The `xl' termcap file clashes with a terminfo name; this ambiguity cannot
# be resolved by a type check. The descriptions are guesses from what was
# in the mytinfo tables.
#
# key_interrupt_char OTki str ki - - ----- string set by interrupt key (?)
# key_kill_char OTkk str kk - - ----- string set by kill key (?)
# key_suspend_char OTkz str kz - - ----- string set by suspend key (?)
# initialization_messy OTxc bool xc - - ----- initialization leaves garbage on the screen (?)
# ind_at_bottom_does_cr OTxl bool xl - - ----- index does a carriage return
#
# Nonstandard capabilities unique to Ross Ridge's `mytinfo' package.
# SR clashes with a terminfo name; this ambiguity cannot be resolved by a type
# check.
#
# scroll_left OTsl1 str Sl - - ----- scroll screen leftward
# scroll_right OTsr1 str Sr - - ----- scroll screen rightward
# parm_scroll_left OTsl str SL - - ----- scroll screen leftward #1 characters
# parm_scroll_right OTsr str SR - - ----- scroll screen rightward #1 characters
#
# The mytinfo capabilities end here.
#
# XENIX extensions:
#
# Xenix defined its own set of forms-drawing capabilities:
#
# cap IBM ASCII description ACS ASCII
# --- ----------- -------------------- ------------- ------
# G1 191 \277 M-? single upper right ACS_URCORNER
# G2 218 \332 M-Z single upper left ACS_ULCORNER
# G3 192 \300 M-@ single lower left ACS_LLCORNER
# G4 217 \331 M-Y single lower right ACS_LRCORNER
# G5 187 \273 M-; double upper right
# G6 201 \311 M-I double upper left
# G7 200 \310 M-H double lower left
# G8 188 \274 M-< double lower right
# GC 197 \305 M-E single intersection ACS_PLUS _ _
# GD 194 \302 M-B single down-tick ACS_TTEE |
# GH 196 \304 M-D single horizontal line ACS_HLINE
# GL 180 \264 M-4 single left tick ACS_RTEE -|
# GR 195 \303 M-C single right tick ACS_LTEE |-
# GU 193 \301 M-A single up tick ACS_BTEE _|_
# GV 179 \263 M-3 single vertical line ACS_VLINE
# Gc 206 \316 M-N double intersection
# Gd 203 \313 M-K double down tick
# Gh 205 \315 M-M double horizontal line
# Gl 204 \204 M-L double left tick
# Gr 185 \271 M-9 double right tick
# Gu 202 \312 M-J double up tick
# Gv 186 \272 M-: double vertical line
#
# The compiler will translate the single-line caps and discard the others
# (via IGNORE aliases further down). We don't want to do normal pad
# translation on these, they're often single-character printable ASCII
# strings that happen to be numerics. There's awk code in parametrized.sh
# that detects the acs_ prefix and uses it to suppress pad translation.
# These terminfo names are invented.
#
acs_ulcorner OTG2 str G2 - - ----- single upper left
acs_llcorner OTG3 str G3 - - ----- single lower left
acs_urcorner OTG1 str G1 - - ----- single upper right
acs_lrcorner OTG4 str G4 - - ----- single lower right
acs_ltee OTGR str GR - - ----- tee pointing right
acs_rtee OTGL str GL - - ----- tee pointing left
acs_btee OTGU str GU - - ----- tee pointing up
acs_ttee OTGD str GD - - ----- tee pointing down
acs_hline OTGH str GH - - ----- single horizontal line
acs_vline OTGV str GV - - ----- single vertical line
acs_plus OTGC str GC - - ----- single intersection
#
#############################################################################
#
# TERMINFO EXTENSION CAPABILITIES
#
# (see Caps-ncurses for the complete set of comments)
#
memory_lock meml str ml - - ----K lock memory above cursor
memory_unlock memu str mu - - ----K unlock memory
#
#############################################################################
diff --git a/contrib/ncurses/include/Caps.hpux11 b/contrib/ncurses/include/Caps.hpux11
index e028224c3834..712a74297f6a 100644
--- a/contrib/ncurses/include/Caps.hpux11
+++ b/contrib/ncurses/include/Caps.hpux11
@@ -1,982 +1,986 @@
##############################################################################
# Copyright 2019,2020 Thomas E. Dickey #
# Copyright 2002-2015,2016 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas Dickey
#
-# $Id: Caps.hpux11,v 1.15 2020/02/02 23:34:34 tom Exp $
+# $Id: Caps.hpux11,v 1.16 2020/10/17 21:30:19 tom Exp $
#
# This is an adaptation of ncurses' termcap/terminfo capability table, which
# is designed to align with HPUX 11.x's terminfo.
#
# This table is used to generate initializers for tables that drive tic,
# infocmp, and the library compilation code used to support the termcap
# compatibility hack. It is also used to generate the tabular portion of the
# terminfo(5) man page; lines beginning with `#%' are passed through to become
# the terminfo table.
#
# This file has three major sections; a standard-capabilities table, two
# extension-capability tables, and a section of aliases declarations.
# The first two have the same format, as follows:
#
# FILE FORMAT
#
# Column 1: terminfo variable name
# Column 2: terminfo capability name
# Column 3: capability type (boolean, numeric, or string)
# Column 4: termcap capability name
# Column 5: KEY_xxx name, if any, `-' otherwise
# Column 6: value for KEY_xxx name, if any, `-' otherwise
# Column 7: Lead with `Y' if capability should be emitted in termcap
# translations, `-' otherwise
# Column 8: capability description
#
# The codes following [Y-] in column 7 describe the versions of termcap which
# use the given capability. This information is not used by the curses library
# proper; rather, it's there to help the terminfo maintainer avoid emitting
# termcap entry translations that are more than 1023 bytes long (and tank a
# lot of old termcap-using programs). The codes read as follows:
# B = mentioned in the BSD man page for 4.4BSD curses
# C = used by the 4.4BSD curses library
# G = mentioned in the documentation for GNU termcap
# E = used by GNU Emacs
# K = remove this terminfo capability when translating to standard format
# The important codes are C and E. A cap with C or E should be preserved in
# translation if possible. The problem is that preserving all such caps may
# lead to some termcap translations being too long. The termcap maintainer
# has a bit of a juggling act to do...potential problem cases are marked with
# an asterisk (*).
#
# The aliases section has the following format:
#
# Column 1: either `capalias' or `infoalias'
# Column 2: name to be aliased
# Column 3: what name it should translate to. The name IGNORE means it
# should be discarded with a warning message.
# Column 4: name of the extension set (used for compiler warning messages)
# Column 5: capability description (usually an associated terminfo variable)
#
# HANDLING TERMCAP AND TERMINFO EXTENSIONS
#
# There are basically five different ways to handle termcap and terminfo
# extensions:
#
# 1. Don't list the capname here, or list it but comment it out (the latter
# is preferable; someone might want to handle it in the future). If you do
# this, the capability will be treated as unknown and raise a warning from
# the compiler.
#
# 2. Alias it. This is appropriate if the capability has the same meaning
# as an already-supported one. The compiler will handle aliasing, emitting
# an appropriate informational message whenever an alias fires.
#
# 3. List it in the standard table. You almost certainly do *not* want
# to do this -- the capabilities in that one, and their order, have been
# carefully chosen to be SVr4-binary-compatible when they're written out
# as a terminfo object, and breaking this would be bad. It's up to the ncurses
# library what to do with the terminfo data after it's read in.
#
# 4. List it in the aliases table with an IGNORE target field. If you
# do this, the capability will be ignored on input (though the user will
# get a warning message about it).
#
# 5. List it in the extensions table. If you do this, the compiler will
# silently accept the capability, but the curses library proper will never
# see it (because it won't be written out as part of the terminfo object
# format). It's up to you what you have the compiler do with it.
#
# There are two opposite reasons to choose option 5. One is when you want
# to eat the capability silently and discard it when doing translations
# to terminfo with tic -I. Some very old obsolete BSD caps like :kn: are
# in this class. Nothing will ever use them again.
#
# More usually, you want the compiler to try to deduce something from the
# capability value that it can use to translate it into your output format.
# You'll need to write custom code, probably in postprocess_termcap() or
# postprocess_terminfo(), to handle the translation.
#
# CONTROLLING ENTRY LENGTH
#
# Notes on specific elisions made to fit translations within 1023 bytes:
#
# Machines with IBM PC-like keyboards want to be able to define the following
# keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap-
# only environments for End or Home-Down), key_dc, and key_ic. This is also
# the set of keys the `joe' editor will be upset if it can't see. So don't
# trim those out of the set to be translated to termcap, or various users of
# the termcap file will become irate.
#
# It might look tempting to leave those long init strings out of translations.
# We can't do it (yet); 4.4BSD tput and tset use them.
#
# We retain the sgr capability in translation in spite of the fact that neither
# 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are
# hard to understand without it, and (b) the entries in which it is long tend
# to be older types that don't use up a lot of string space on function keys.
# The tic(1) translation code will complain and elide it if it makes a critical
# difference (there is special code in tic to recognize this situation).
#
# Yes, BSD tset(1) uses hpa. We elide hpa/vpa anyway because the motion
# optimizer in BSD curses didn't use them. This omission seems to be the
# single most effective one, it shortened the resolved length of all thirteen
# problem entries in the 9.9.0 version of the terminfo master below critical.
#
# It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap
# translations go back over critical if we do this. As 4.4BSD curses fades
# into history and GNU termcap's application base shrinks towards being GNU
# Emacs only, we'll probably elide out some BSD-only capabilities in order
# to buy space for non-essentials Emacs is still using. Capabilities high
# on that hit list: rc, sc, uc.
#
#############################################################################
#
# STANDARD CAPABILITIES
#
#%The following is a complete table of the capabilities included in a
#%terminfo description block and available to terminfo-using code. In each
#%line of the table,
#%
#%The \fBvariable\fR is the name by which the programmer (at the terminfo level)
#%accesses the capability.
#%
#%The \fBcapname\fR is the short name used in the text of the database,
#%and is used by a person updating the database.
#%Whenever possible, capnames are chosen to be the same as or similar to
#%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses
#%identical or very similar names). Semantics are also intended to match
#%those of the specification.
#%
#%The termcap code is the old
#%.B termcap
#%capability name (some capabilities are new, and have names which termcap
#%did not originate).
#%.P
#%Capability names have no hard length limit, but an informal limit of 5
#%characters has been adopted to keep them short and to allow the tabs in
#%the source file
#%.B Caps
#%to line up nicely.
#%
#%Finally, the description field attempts to convey the semantics of the
#%capability. You may find some codes in the description field:
#%.TP
#%(P)
#%indicates that padding may be specified
#%.TP
#%#[1-9]
-#%in the description field indicates that the string is passed through tparm with
-#%parms as given (#\fIi\fP).
+#%in the description field indicates that the string is passed
+#%through \fBtparm\fP(3X) with parameters as given (#\fIi\fP).
+#%.IP
+#%If no parameters are listed in the description,
+#%passing the string through \fBtparm\fP(3X) may give unexpected results,
+#%e.g., if it contains percent (%%) signs.
#%.TP
#%(P*)
#%indicates that padding may vary in proportion to the number of
#%lines affected
#%.TP
#%(#\d\fIi\fP\u)
#%indicates the \fIi\fP\uth\d parameter.
#%
#%.PP
#% These are the boolean capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBBooleans name Code\fR
auto_left_margin bw bool bw - - YB-G- cub1 wraps from column 0 to last column
auto_right_margin am bool am - - YBCGE terminal has automatic margins
no_esc_ctlc xsb bool xb - - YBCG- beehive (f1=escape, f2=ctrl C)
ceol_standout_glitch xhp bool xs - - YBCGE standout not erased by overwriting (hp)
eat_newline_glitch xenl bool xn - - YBCGE newline ignored after 80 cols (concept)
erase_overstrike eo bool eo - - YBCG- can erase overstrikes with a blank
generic_type gn bool gn - - YB-G- generic line type
hard_copy hc bool hc - - YBCG- hardcopy terminal
has_meta_key km bool km - - YB-GE Has a meta key (i.e., sets 8th-bit)
has_status_line hs bool hs - - YB-G- has extra status line
insert_null_glitch in bool in - - YBCGE insert mode distinguishes nulls
memory_above da bool da - - YBCG- display may be retained above the screen
memory_below db bool db - - YB-GE display may be retained below the screen
move_insert_mode mir bool mi - - YBCGE safe to move while in insert mode
move_standout_mode msgr bool ms - - YBCGE safe to move while in standout mode
over_strike os bool os - - YBCG- terminal can overstrike
status_line_esc_ok eslok bool es - - YB-G- escape can be used on the status line
dest_tabs_magic_smso xt bool xt - - YBCGE tabs destructive, magic so char (t1061)
tilde_glitch hz bool hz - - YB-GE cannot print ~'s (Hazeltine)
transparent_underline ul bool ul - - YBCGE underline character overstrikes
xon_xoff xon bool xo - - YB--- terminal uses xon/xoff handshaking
# end booleans for HPUX 9, 10 (non-color curses)
needs_xon_xoff nxon bool nx - - ----- padding will not work, xon/xoff required
prtr_silent mc5i bool 5i - - ----- printer will not echo on screen
hard_cursor chts bool HC - - ----- cursor is hard to see
non_rev_rmcup nrrmc bool NR - - ----- smcup does not reverse rmcup
no_pad_char npc bool NP - - ----- pad character does not exist
non_dest_scroll_region ndscr bool ND - - ----- scrolling region is non-destructive
can_change ccc bool cc - - ----- terminal can re-define existing colors
back_color_erase bce bool ut - - ----- screen erased with background color
hue_lightness_saturation hls bool hl - - ----- terminal uses only HLS color notation (Tektronix)
col_addr_glitch xhpa bool YA - - ----- only positive motion for hpa/mhpa caps
cr_cancels_micro_mode crxm bool YB - - ----- using cr turns off micro mode
has_print_wheel daisy bool YC - - ----- printer needs operator to change character set
row_addr_glitch xvpa bool YD - - ----- only positive motion for vpa/mvpa caps
semi_auto_right_margin sam bool YE - - ----- printing in last column causes cr
cpi_changes_res cpix bool YF - - ----- changing character pitch changes resolution
lpi_changes_res lpix bool YG - - ----- changing line pitch changes resolution
#%.TE
#%.ad
#%
#%These are the numeric capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBNumeric name Code\fR
columns cols num co - - YBCGE number of columns in a line
init_tabs it num it - - YB-G- tabs initially every # spaces
lines lines num li - - YBCGE number of lines on screen or page
lines_of_memory lm num lm - - YB-G- lines of memory if > line. 0 means varies
magic_cookie_glitch xmc num sg - - YBCGE number of blank characters left by smso or rmso
padding_baud_rate pb num pb - - YB-GE lowest baud rate where padding needed
virtual_terminal vt num vt - - YB--- virtual terminal number (CB/unix)
width_status_line wsl num ws - - YB-G- number of columns in status line
# end numbers for HPUX 9, 10 (non-color curses)
num_labels nlab num Nl - - ----- number of labels on screen
label_height lh num lh - - ----- rows in each label
label_width lw num lw - - ----- columns in each label
max_attributes ma num ma - - YBC-- maximum combined attributes terminal can handle
maximum_windows wnum num MW - - ----- maximum number of definable windows
# These came in with SVr4's color support
max_colors colors num Co - - ----- maximum number of colors on screen
max_pairs pairs num pa - - ----- maximum number of color-pairs on the screen
no_color_video ncv num NC - - ----- video attributes that cannot be used with colors
#%.TE
#%.ad
#%
#%The following numeric capabilities are present in the SVr4.0 term structure,
#%but are not yet documented in the man page. They came in with SVr4's
#%printer support.
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBNumeric name Code\fR
buffer_capacity bufsz num Ya - - ----- numbers of bytes buffered before printing
dot_vert_spacing spinv num Yb - - ----- spacing of pins vertically in pins per inch
dot_horz_spacing spinh num Yc - - ----- spacing of dots horizontally in dots per inch
max_micro_address maddr num Yd - - ----- maximum value in micro_..._address
max_micro_jump mjump num Ye - - ----- maximum value in parm_..._micro
micro_char_size mcs num Yf - - ----- character step size when in micro mode
micro_line_size mls num Yg - - ----- line step size when in micro mode
number_of_pins npins num Yh - - ----- numbers of pins in print-head
output_res_char orc num Yi - - ----- horizontal resolution in units per line
output_res_line orl num Yj - - ----- vertical resolution in units per line
output_res_horz_inch orhi num Yk - - ----- horizontal resolution in units per inch
output_res_vert_inch orvi num Yl - - ----- vertical resolution in units per inch
print_rate cps num Ym - - ----- print rate in characters per second
wide_char_size widcs num Yn - - ----- character step size when in double wide mode
buttons btns num BT - - ----- number of buttons on mouse
bit_image_entwining bitwin num Yo - - ----- number of passes for each bit-image row
bit_image_type bitype num Yp - - ----- type of bit-image device
#%.TE
#%.ad
#%
#%These are the string capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
back_tab cbt str bt - - YBCGE back tab (P)
bell bel str bl - - YB-GE audible signal (bell) (P)
carriage_return cr str cr - - YBCGE carriage return (P*) (P*)
change_scroll_region csr str cs - - YBCGE change region to line #1 to line #2 (P)
clear_all_tabs tbc str ct - - YB-G- clear all tab stops (P)
clear_screen clear str cl - - YBCGE clear screen and home cursor (P*)
clr_eol el str ce - - YBCGE clear to end of line (P)
clr_eos ed str cd - - YBCGE clear to end of screen (P*)
column_address hpa str ch - - -B-GE* horizontal position #1, absolute (P)
command_character cmdch str CC - - YB-G- terminal settable cmd character in prototype !?
cursor_address cup str cm - - YBCGE move to row #1 columns #2
cursor_down cud1 str do - - YBCGE down one line
cursor_home home str ho - - YBCGE home cursor (if no cup)
cursor_invisible civis str vi - - YB-G- make cursor invisible
cursor_left cub1 str le - - YBCGE move left one space
cursor_mem_address mrcup str CM - - YB-G- memory relative cursor addressing, move to row #1 columns #2
cursor_normal cnorm str ve - - YBCGE make cursor appear normal (undo civis/cvvis)
cursor_right cuf1 str nd - - YBCGE non-destructive space (move right one space)
cursor_to_ll ll str ll - - YBCGE last line, first column (if no cup)
cursor_up cuu1 str up - - YBCGE up one line
cursor_visible cvvis str vs - - YBCGE make cursor very visible
delete_character dch1 str dc - - YBCGE delete character (P*)
delete_line dl1 str dl - - YBCGE delete line (P*)
dis_status_line dsl str ds - - YB-G- disable status line
down_half_line hd str hd - - YB-G- half a line down
enter_alt_charset_mode smacs str as - - YB-G- start alternate character set (P)
enter_blink_mode blink str mb - - YB-G- turn on blinking
enter_bold_mode bold str md - - YB-G- turn on bold (extra bright) mode
enter_ca_mode smcup str ti - - YBCGE string to start programs using cup
enter_delete_mode smdc str dm - - YBCGE enter delete mode
enter_dim_mode dim str mh - - YB-G- turn on half-bright mode
enter_insert_mode smir str im - - YBCGE enter insert mode
enter_secure_mode invis str mk - - -B-G-* turn on blank mode (characters invisible)
enter_protected_mode prot str mp - - -B-G-* turn on protected mode
enter_reverse_mode rev str mr - - YB-G- turn on reverse video mode
enter_standout_mode smso str so - - YBCGE begin standout mode
enter_underline_mode smul str us - - YBCGE begin underline mode
erase_chars ech str ec - - YB-G- erase #1 characters (P)
exit_alt_charset_mode rmacs str ae - - YB-G- end alternate character set (P)
exit_attribute_mode sgr0 str me - - YB-GE turn off all attributes
exit_ca_mode rmcup str te - - YBCGE strings to end programs using cup
exit_delete_mode rmdc str ed - - YBCGE end delete mode
exit_insert_mode rmir str ei - - YBCGE exit insert mode
exit_standout_mode rmso str se - - YBCGE exit standout mode
exit_underline_mode rmul str ue - - YBCGE exit underline mode
flash_screen flash str vb - - YBCGE visible bell (may not move cursor)
form_feed ff str ff - - YB-G- hardcopy terminal page eject (P*)
from_status_line fsl str fs - - YB-G- return from status line
init_1string is1 str i1 - - YB-G- initialization string
init_2string is2 str is - - YB-G- initialization string
init_3string is3 str i3 - - YB-G- initialization string
init_file if str if - - YB-G- name of initialization file
insert_character ich1 str ic - - YBCGE insert character (P)
insert_line il1 str al - - YBCGE insert line (P*)
insert_padding ip str ip - - YBCGE insert padding after inserted character
key_backspace kbs str kb KEY_BACKSPACE 0407 YB-G- backspace key
key_catab ktbc str ka KEY_CATAB 0526 -B-G-* clear-all-tabs key
key_clear kclr str kC KEY_CLEAR 0515 -B-G-* clear-screen or erase key
key_ctab kctab str kt KEY_CTAB 0525 -B-G-* clear-tab key
key_dc kdch1 str kD KEY_DC 0512 YB-G- delete-character key
key_dl kdl1 str kL KEY_DL 0510 -B-G-* delete-line key
key_down kcud1 str kd KEY_DOWN 0402 YBCGE down-arrow key
key_eic krmir str kM KEY_EIC 0514 -B-G-* sent by rmir or smir in insert mode
key_eol kel str kE KEY_EOL 0517 -B-G-* clear-to-end-of-line key
key_eos ked str kS KEY_EOS 0516 -B-G-* clear-to-end-of-screen key
key_f0 kf0 str k0 KEY_F(0) 0410 YBCGE F0 function key
key_f1 kf1 str k1 KEY_F(1) - YBCGE F1 function key
key_f10 kf10 str k; KEY_F(10) - ----E F10 function key
key_f2 kf2 str k2 KEY_F(2) - YBCGE F2 function key
key_f3 kf3 str k3 KEY_F(3) - YBCGE F3 function key
key_f4 kf4 str k4 KEY_F(4) - YBCGE F4 function key
key_f5 kf5 str k5 KEY_F(5) - YBCGE F5 function key
key_f6 kf6 str k6 KEY_F(6) - YBCGE F6 function key
key_f7 kf7 str k7 KEY_F(7) - YBCGE F7 function key
key_f8 kf8 str k8 KEY_F(8) - YBCGE F8 function key
key_f9 kf9 str k9 KEY_F(9) - YBCGE F9 function key
key_home khome str kh KEY_HOME 0406 YBCGE home key
key_ic kich1 str kI KEY_IC 0513 YB-GE insert-character key
key_il kil1 str kA KEY_IL 0511 -B-G-* insert-line key
key_left kcub1 str kl KEY_LEFT 0404 YBCGE left-arrow key
key_ll kll str kH KEY_LL 0533 YB-G- lower-left key (home down)
key_npage knp str kN KEY_NPAGE 0522 YB-GE next-page key
key_ppage kpp str kP KEY_PPAGE 0523 YB-GE previous-page key
key_right kcuf1 str kr KEY_RIGHT 0405 YBCGE right-arrow key
key_sf kind str kF KEY_SF 0520 -B-G-* scroll-forward key
key_sr kri str kR KEY_SR 0521 -B-G-* scroll-backward key
key_stab khts str kT KEY_STAB 0524 -B-G-* set-tab key
key_up kcuu1 str ku KEY_UP 0403 YBCGE up-arrow key
keypad_local rmkx str ke - - YBCGE leave 'keyboard_transmit' mode
keypad_xmit smkx str ks - - YBCGE enter 'keyboard_transmit' mode
lab_f0 lf0 str l0 - - -B-G-* label on function key f0 if not f0
lab_f1 lf1 str l1 - - -B-G-* label on function key f1 if not f1
lab_f10 lf10 str la - - ----- label on function key f10 if not f10
lab_f2 lf2 str l2 - - -B-G-* label on function key f2 if not f2
lab_f3 lf3 str l3 - - -B-G-* label on function key f3 if not f3
lab_f4 lf4 str l4 - - -B-G-* label on function key f4 if not f4
lab_f5 lf5 str l5 - - -B-G-* label on function key f5 if not f5
lab_f6 lf6 str l6 - - -B-G-* label on function key f6 if not f6
lab_f7 lf7 str l7 - - -B-G-* label on function key f7 if not f7
lab_f8 lf8 str l8 - - -B-G-* label on function key f8 if not f8
lab_f9 lf9 str l9 - - -B-G-* label on function key f9 if not f9
meta_off rmm str mo - - YB-G-* turn off meta mode
meta_on smm str mm - - YB-G-* turn on meta mode (8th-bit on)
newline nel str nw - - YB-G-* newline (behave like cr followed by lf)
pad_char pad str pc - - YBCGE padding char (instead of null)
parm_dch dch str DC - - YB-GE delete #1 characters (P*)
parm_delete_line dl str DL - - YBCGE delete #1 lines (P*)
parm_down_cursor cud str DO - - YBCGE down #1 lines (P*)
parm_ich ich str IC - - YB-GE insert #1 characters (P*)
parm_index indn str SF - - YBCG- scroll forward #1 lines (P)
parm_insert_line il str AL - - YBCGE insert #1 lines (P*)
parm_left_cursor cub str LE - - YBCGE move #1 characters to the left (P)
parm_right_cursor cuf str RI - - YBCGE move #1 characters to the right (P*)
parm_rindex rin str SR - - YBCG- scroll back #1 lines (P)
parm_up_cursor cuu str UP - - YBCGE up #1 lines (P*)
pkey_key pfkey str pk - - -B--- program function key #1 to type string #2
pkey_local pfloc str pl - - -B--- program function key #1 to execute string #2
pkey_xmit pfx str px - - -B--- program function key #1 to transmit string #2
print_screen mc0 str ps - - -B-G-* print contents of screen
prtr_off mc4 str pf - - -B-G-* turn off printer
prtr_on mc5 str po - - -B-G-* turn on printer
repeat_char rep str rp - - YB-GE repeat char #1 #2 times (P*)
reset_1string rs1 str r1 - - -B--- reset string
reset_2string rs2 str r2 - - -B--- reset string
reset_3string rs3 str r3 - - -B--- reset string
reset_file rf str rf - - -B--- name of reset file
restore_cursor rc str rc - - YBCG- restore cursor to position of last save_cursor
row_address vpa str cv - - -B-GE* vertical position #1 absolute (P)
save_cursor sc str sc - - YBCG- save current cursor position (P)
scroll_forward ind str sf - - YBCGE scroll text up (P)
scroll_reverse ri str sr - - YBCGE scroll text down (P)
set_attributes sgr str sa - - YB-G- define video attributes #1-#9 (PG9)
set_tab hts str st - - YB-G- set a tab in every row, current columns
set_window wind str wi - - -B-GE current window is lines #1-#2 cols #3-#4
tab ht str ta - - YBCGE tab to next 8-space hardware tab stop
to_status_line tsl str ts - - YB-G- move to status line, column #1
underline_char uc str uc - - YBCG- underline char and move past it
up_half_line hu str hu - - YB-G- half a line up
init_prog iprog str iP - - -B--- path name of program for initialization
key_a1 ka1 str K1 KEY_A1 0534 YB-GE upper left of keypad
key_a3 ka3 str K3 KEY_A3 0535 YB-GE upper right of keypad
key_b2 kb2 str K2 KEY_B2 0536 YB-GE center of keypad
key_c1 kc1 str K4 KEY_C1 0537 YB-GE lower left of keypad
key_c3 kc3 str K5 KEY_C3 0540 YB-GE lower right of keypad
prtr_non mc5p str pO - - -B-G-* turn on printer for #1 bytes
#
# SVr1 capabilities stop here. IBM's version of terminfo is the same as
# SVr4 up to this point, but has a different set afterwards.
#
# HPUX defines these if __HP_CURSES_COMPAT is defined:
memory_lock meml str ml - - ----K lock memory above cursor
memory_unlock memu str mu - - ----K unlock memory
#
#
plab_norm pln str pn - - ----- program label #1 to show string #2
label_on smln str LO - - ----- turn on soft labels
label_off rmln str LF - - ----- turn off soft labels
key_f11 kf11 str F1 KEY_F(11) - ----E F11 function key
key_f12 kf12 str F2 KEY_F(12) - ----E F12 function key
key_f13 kf13 str F3 KEY_F(13) - ----E F13 function key
key_f14 kf14 str F4 KEY_F(14) - ----E F14 function key
key_f15 kf15 str F5 KEY_F(15) - ----E F15 function key
key_f16 kf16 str F6 KEY_F(16) - ----E F16 function key
key_f17 kf17 str F7 KEY_F(17) - ----E F17 function key
key_f18 kf18 str F8 KEY_F(18) - ----E F18 function key
key_f19 kf19 str F9 KEY_F(19) - ----E F19 function key
key_f20 kf20 str FA KEY_F(20) - ----E F20 function key
key_f21 kf21 str FB KEY_F(21) - ----E F21 function key
key_f22 kf22 str FC KEY_F(22) - ----E F22 function key
key_f23 kf23 str FD KEY_F(23) - ----E F23 function key
key_f24 kf24 str FE KEY_F(24) - ----E F24 function key
key_f25 kf25 str FF KEY_F(25) - ----E F25 function key
key_f26 kf26 str FG KEY_F(26) - ----E F26 function key
key_f27 kf27 str FH KEY_F(27) - ----E F27 function key
key_f28 kf28 str FI KEY_F(28) - ----E F28 function key
key_f29 kf29 str FJ KEY_F(29) - ----E F29 function key
key_f30 kf30 str FK KEY_F(30) - ----E F30 function key
key_f31 kf31 str FL KEY_F(31) - ----E F31 function key
key_f32 kf32 str FM KEY_F(32) - ----E F32 function key
key_f33 kf33 str FN KEY_F(33) - ----E F33 function key
key_f34 kf34 str FO KEY_F(34) - ----E F34 function key
key_f35 kf35 str FP KEY_F(35) - ----E F35 function key
key_f36 kf36 str FQ KEY_F(36) - ----E F36 function key
key_f37 kf37 str FR KEY_F(37) - ----E F37 function key
key_f38 kf38 str FS KEY_F(38) - ----E F38 function key
key_f39 kf39 str FT KEY_F(39) - ----E F39 function key
key_f40 kf40 str FU KEY_F(40) - ----E F40 function key
key_f41 kf41 str FV KEY_F(41) - ----E F41 function key
key_f42 kf42 str FW KEY_F(42) - ----E F42 function key
key_f43 kf43 str FX KEY_F(43) - ----E F43 function key
key_f44 kf44 str FY KEY_F(44) - ----E F44 function key
key_f45 kf45 str FZ KEY_F(45) - ----E F45 function key
key_f46 kf46 str Fa KEY_F(46) - ----E F46 function key
key_f47 kf47 str Fb KEY_F(47) - ----E F47 function key
key_f48 kf48 str Fc KEY_F(48) - ----E F48 function key
key_f49 kf49 str Fd KEY_F(49) - ----E F49 function key
key_f50 kf50 str Fe KEY_F(50) - ----E F50 function key
key_f51 kf51 str Ff KEY_F(51) - ----E F51 function key
key_f52 kf52 str Fg KEY_F(52) - ----E F52 function key
key_f53 kf53 str Fh KEY_F(53) - ----E F53 function key
key_f54 kf54 str Fi KEY_F(54) - ----E F54 function key
key_f55 kf55 str Fj KEY_F(55) - ----E F55 function key
key_f56 kf56 str Fk KEY_F(56) - ----E F56 function key
key_f57 kf57 str Fl KEY_F(57) - ----E F57 function key
key_f58 kf58 str Fm KEY_F(58) - ----E F58 function key
key_f59 kf59 str Fn KEY_F(59) - ----E F59 function key
key_f60 kf60 str Fo KEY_F(60) - ----E F60 function key
key_f61 kf61 str Fp KEY_F(61) - ----E F61 function key
key_f62 kf62 str Fq KEY_F(62) - ----E F62 function key
key_f63 kf63 str Fr KEY_F(63) - ----E F63 function key
# end of strings in HPUX 9
char_padding rmp str rP - - ----- like ip but when in insert mode
acs_chars acsc str ac - - ----- graphics charset pairs, based on vt100
key_btab kcbt str kB KEY_BTAB 0541 ----- back-tab key
enter_xon_mode smxon str SX - - ----- turn on xon/xoff handshaking
exit_xon_mode rmxon str RX - - ----- turn off xon/xoff handshaking
enter_am_mode smam str SA - - ----- turn on automatic margins
exit_am_mode rmam str RA - - ----- turn off automatic margins
xon_character xonc str XN - - ----- XON character
xoff_character xoffc str XF - - ----- XOFF character
ena_acs enacs str eA - - ----- enable alternate char set
key_beg kbeg str @1 KEY_BEG 0542 ----- begin key
key_cancel kcan str @2 KEY_CANCEL 0543 ----- cancel key
key_close kclo str @3 KEY_CLOSE 0544 ----- close key
key_command kcmd str @4 KEY_COMMAND 0545 ----- command key
key_copy kcpy str @5 KEY_COPY 0546 ----- copy key
key_create kcrt str @6 KEY_CREATE 0547 ----- create key
key_end kend str @7 KEY_END 0550 ----- end key
key_enter kent str @8 KEY_ENTER 0527 ----- enter/send key
key_exit kext str @9 KEY_EXIT 0551 ----- exit key
key_find kfnd str @0 KEY_FIND 0552 ----- find key
key_help khlp str %1 KEY_HELP 0553 ----- help key
key_mark kmrk str %2 KEY_MARK 0554 ----- mark key
key_message kmsg str %3 KEY_MESSAGE 0555 ----- message key
key_move kmov str %4 KEY_MOVE 0556 ----- move key
key_next knxt str %5 KEY_NEXT 0557 ----- next key
key_open kopn str %6 KEY_OPEN 0560 ----- open key
key_options kopt str %7 KEY_OPTIONS 0561 ----- options key
key_previous kprv str %8 KEY_PREVIOUS 0562 ----- previous key
key_print kprt str %9 KEY_PRINT 0532 ----- print key
key_redo krdo str %0 KEY_REDO 0563 ----- redo key
key_reference kref str &1 KEY_REFERENCE 0564 ----- reference key
key_refresh krfr str &2 KEY_REFRESH 0565 ----- refresh key
key_replace krpl str &3 KEY_REPLACE 0566 ----- replace key
key_restart krst str &4 KEY_RESTART 0567 ----- restart key
key_resume kres str &5 KEY_RESUME 0570 ----- resume key
key_save ksav str &6 KEY_SAVE 0571 ----- save key
key_suspend kspd str &7 KEY_SUSPEND 0627 ----- suspend key
key_undo kund str &8 KEY_UNDO 0630 ----- undo key
key_sbeg kBEG str &9 KEY_SBEG 0572 ----- shifted begin key
key_scancel kCAN str &0 KEY_SCANCEL 0573 ----- shifted cancel key
key_scommand kCMD str *1 KEY_SCOMMAND 0574 ----- shifted command key
key_scopy kCPY str *2 KEY_SCOPY 0575 ----- shifted copy key
key_screate kCRT str *3 KEY_SCREATE 0576 ----- shifted create key
key_sdc kDC str *4 KEY_SDC 0577 ----- shifted delete-character key
key_sdl kDL str *5 KEY_SDL 0600 ----- shifted delete-line key
key_select kslt str *6 KEY_SELECT 0601 ----- select key
key_send kEND str *7 KEY_SEND 0602 ----- shifted end key
key_seol kEOL str *8 KEY_SEOL 0603 ----- shifted clear-to-end-of-line key
key_sexit kEXT str *9 KEY_SEXIT 0604 ----- shifted exit key
key_sfind kFND str *0 KEY_SFIND 0605 ----- shifted find key
key_shelp kHLP str #1 KEY_SHELP 0606 ----- shifted help key
key_shome kHOM str #2 KEY_SHOME 0607 ----- shifted home key
key_sic kIC str #3 KEY_SIC 0610 ----- shifted insert-character key
key_sleft kLFT str #4 KEY_SLEFT 0611 ----- shifted left-arrow key
key_smessage kMSG str %a KEY_SMESSAGE 0612 ----- shifted message key
key_smove kMOV str %b KEY_SMOVE 0613 ----- shifted move key
key_snext kNXT str %c KEY_SNEXT 0614 ----- shifted next key
key_soptions kOPT str %d KEY_SOPTIONS 0615 ----- shifted options key
key_sprevious kPRV str %e KEY_SPREVIOUS 0616 ----- shifted previous key
key_sprint kPRT str %f KEY_SPRINT 0617 ----- shifted print key
key_sredo kRDO str %g KEY_SREDO 0620 ----- shifted redo key
key_sreplace kRPL str %h KEY_SREPLACE 0621 ----- shifted replace key
key_sright kRIT str %i KEY_SRIGHT 0622 ----- shifted right-arrow key
key_srsume kRES str %j KEY_SRSUME 0623 ----- shifted resume key
key_ssave kSAV str !1 KEY_SSAVE 0624 ----- shifted save key
key_ssuspend kSPD str !2 KEY_SSUSPEND 0625 ----- shifted suspend key
key_sundo kUND str !3 KEY_SUNDO 0626 ----- shifted undo key
req_for_input rfi str RF - - ----- send next input char (for ptys)
clr_bol el1 str cb - - ----- Clear to beginning of line
clear_margins mgc str MC - - ----- clear right and left soft margins
set_left_margin smgl str ML - - ----- set left soft margin at current column. See smgl. (ML is not in BSD termcap).
set_right_margin smgr str MR - - ----- set right soft margin at current column
label_format fln str Lf - - ----- label format
set_clock sclk str SC - - ----- set clock, #1 hrs #2 mins #3 secs
display_clock dclk str DK - - ----- display clock
remove_clock rmclk str RC - - ----- remove clock
create_window cwin str CW - - ----- define a window #1 from #2,#3 to #4,#5
goto_window wingo str WG - - ----- go to window #1
hangup hup str HU - - ----- hang-up phone
dial_phone dial str DI - - ----- dial number #1
quick_dial qdial str QD - - ----- dial number #1 without checking
tone tone str TO - - ----- select touch tone dialing
pulse pulse str PU - - ----- select pulse dialing
flash_hook hook str fh - - ----- flash switch hook
fixed_pause pause str PA - - ----- pause for 2-3 seconds
wait_tone wait str WA - - ----- wait for dial-tone
user0 u0 str u0 - - ----- User string #0
user1 u1 str u1 - - ----- User string #1
user2 u2 str u2 - - ----- User string #2
user3 u3 str u3 - - ----- User string #3
user4 u4 str u4 - - ----- User string #4
user5 u5 str u5 - - ----- User string #5
user6 u6 str u6 - - ----- User string #6
user7 u7 str u7 - - ----- User string #7
user8 u8 str u8 - - ----- User string #8
user9 u9 str u9 - - ----- User string #9
#
# SVr4 added these capabilities to support color
#
orig_pair op str op - - ----- Set default pair to its original value
orig_colors oc str oc - - ----- Set all color pairs to the original ones
initialize_color initc str Ic - - ----- initialize color #1 to (#2,#3,#4)
initialize_pair initp str Ip - - ----- Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)
set_color_pair scp str sp - - ----- Set current color pair to #1
set_foreground setf str Sf - - ----- Set foreground color #1
set_background setb str Sb - - ----- Set background color #1
#
# SVr4 added these capabilities to support printers
#
change_char_pitch cpi str ZA - - ----- Change number of characters per inch to #1
change_line_pitch lpi str ZB - - ----- Change number of lines per inch to #1
change_res_horz chr str ZC - - ----- Change horizontal resolution to #1
change_res_vert cvr str ZD - - ----- Change vertical resolution to #1
define_char defc str ZE - - ----- Define a character #1, #2 dots wide, descender #3
enter_doublewide_mode swidm str ZF - - ----- Enter double-wide mode
enter_draft_quality sdrfq str ZG - - ----- Enter draft-quality mode
enter_italics_mode sitm str ZH - - ----- Enter italic mode
enter_leftward_mode slm str ZI - - ----- Start leftward carriage motion
enter_micro_mode smicm str ZJ - - ----- Start micro-motion mode
enter_near_letter_quality snlq str ZK - - ----- Enter NLQ mode
enter_normal_quality snrmq str ZL - - ----- Enter normal-quality mode
enter_shadow_mode sshm str ZM - - ----- Enter shadow-print mode
enter_subscript_mode ssubm str ZN - - ----- Enter subscript mode
enter_superscript_mode ssupm str ZO - - ----- Enter superscript mode
enter_upward_mode sum str ZP - - ----- Start upward carriage motion
exit_doublewide_mode rwidm str ZQ - - ----- End double-wide mode
exit_italics_mode ritm str ZR - - ----- End italic mode
exit_leftward_mode rlm str ZS - - ----- End left-motion mode
exit_micro_mode rmicm str ZT - - ----- End micro-motion mode
exit_shadow_mode rshm str ZU - - ----- End shadow-print mode
exit_subscript_mode rsubm str ZV - - ----- End subscript mode
exit_superscript_mode rsupm str ZW - - ----- End superscript mode
exit_upward_mode rum str ZX - - ----- End reverse character motion
micro_column_address mhpa str ZY - - ----- Like column_address in micro mode
micro_down mcud1 str ZZ - - ----- Like cursor_down in micro mode
micro_left mcub1 str Za - - ----- Like cursor_left in micro mode
micro_right mcuf1 str Zb - - ----- Like cursor_right in micro mode
micro_row_address mvpa str Zc - - ----- Like row_address #1 in micro mode
micro_up mcuu1 str Zd - - ----- Like cursor_up in micro mode
order_of_pins porder str Ze - - ----- Match software bits to print-head pins
parm_down_micro mcud str Zf - - ----- Like parm_down_cursor in micro mode
parm_left_micro mcub str Zg - - ----- Like parm_left_cursor in micro mode
parm_right_micro mcuf str Zh - - ----- Like parm_right_cursor in micro mode
parm_up_micro mcuu str Zi - - ----- Like parm_up_cursor in micro mode
select_char_set scs str Zj - - ----- Select character set, #1
set_bottom_margin smgb str Zk - - ----- Set bottom margin at current line
set_bottom_margin_parm smgbp str Zl - - ----- Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom
set_left_margin_parm smglp str Zm - - ----- Set left (right) margin at column #1
set_right_margin_parm smgrp str Zn - - ----- Set right margin at column #1
set_top_margin smgt str Zo - - ----- Set top margin at current line
set_top_margin_parm smgtp str Zp - - ----- Set top (bottom) margin at row #1
start_bit_image sbim str Zq - - ----- Start printing bit image graphics
start_char_set_def scsd str Zr - - ----- Start character set definition #1, with #2 characters in the set
stop_bit_image rbim str Zs - - ----- Stop printing bit image graphics
stop_char_set_def rcsd str Zt - - ----- End definition of character set #1
subscript_characters subcs str Zu - - ----- List of subscriptable characters
superscript_characters supcs str Zv - - ----- List of superscriptable characters
these_cause_cr docr str Zw - - ----- Printing any of these characters causes CR
zero_motion zerom str Zx - - ----- No motion for subsequent character
#%.TE
#%.ad
#%
#%The following string capabilities are present in the SVr4.0 term structure,
#%but were originally not documented in the man page.
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw18.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
char_set_names csnm str Zy - - ----- Produce #1'th item from list of character set names
key_mouse kmous str Km KEY_MOUSE 0631 ----- Mouse event has occurred
mouse_info minfo str Mi - - ----- Mouse status information
req_mouse_pos reqmp str RQ - - ----- Request mouse position
get_mouse getm str Gm - - ----- Curses should get button events, parameter #1 not documented.
set_a_foreground setaf str AF - - ----- Set foreground color to #1, using ANSI escape
set_a_background setab str AB - - ----- Set background color to #1, using ANSI escape
pkey_plab pfxl str xl - - ----- Program function key #1 to type string #2 and show string #3
device_type devt str dv - - ----- Indicate language/codeset support
code_set_init csin str ci - - ----- Init sequence for multiple codesets
set0_des_seq s0ds str s0 - - ----- Shift to codeset 0 (EUC set 0, ASCII)
set1_des_seq s1ds str s1 - - ----- Shift to codeset 1
set2_des_seq s2ds str s2 - - ----- Shift to codeset 2
set3_des_seq s3ds str s3 - - ----- Shift to codeset 3
set_lr_margin smglr str ML - - ----- Set both left and right margins to #1, #2. (ML is not in BSD termcap).
set_tb_margin smgtb str MT - - ----- Sets both top and bottom margins to #1, #2
bit_image_repeat birep str Xy - - ----- Repeat bit image cell #1 #2 times
bit_image_newline binel str Zz - - ----- Move to next row of the bit image
bit_image_carriage_return bicr str Yv - - ----- Move to beginning of same row
color_names colornm str Yw - - ----- Give name for color #1
define_bit_image_region defbi str Yx - - ----- Define rectangular bit image region
end_bit_image_region endbi str Yy - - ----- End a bit-image region
set_color_band setcolor str Yz - - ----- Change to ribbon color #1
set_page_length slines str YZ - - ----- Set page length to #1 lines
#
# SVr4 added these capabilities for direct PC-clone support
#
display_pc_char dispc str S1 - - ----- Display PC character #1
enter_pc_charset_mode smpch str S2 - - ----- Enter PC character display mode
exit_pc_charset_mode rmpch str S3 - - ----- Exit PC character display mode
enter_scancode_mode smsc str S4 - - ----- Enter PC scancode mode
exit_scancode_mode rmsc str S5 - - ----- Exit PC scancode mode
pc_term_options pctrm str S6 - - ----- PC terminal options
scancode_escape scesc str S7 - - ----- Escape for scancode emulation
alt_scancode_esc scesa str S8 - - ----- Alternate escape for scancode emulation
#%.TE
#%.ad
#%
#%.in .8i
#%The XSI Curses standard added these hardcopy capabilities.
#%They were used in some post-4.1 versions of System V curses,
#%e.g., Solaris 2.5 and IRIX 6.x.
#%Except for \fBYI\fP, the \fBncurses\fR termcap names for them are invented.
#%According to the XSI Curses standard, they have no termcap names.
#%If your compiled terminfo entries use these,
#%they may not be binary-compatible with System V terminfo
#%entries after SVr4.1; beware!
#%
#%AIX and Solaris do not provide termcap names for these; HPUX does.
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
set_pglen_inch slength str YI - - ----- Set page length to #1 hundredth of an inch (some implementations use sL for termcap).
enter_horizontal_hl_mode ehhlm str Q1 - - ----- Enter horizontal highlight mode
enter_left_hl_mode elhlm str Q2 - - ----- Enter left highlight mode
enter_low_hl_mode elohlm str Q3 - - ----- Enter low highlight mode
enter_right_hl_mode erhlm str Q4 - - ----- Enter right highlight mode
enter_top_hl_mode ethlm str Q5 - - ----- Enter top highlight mode
enter_vertical_hl_mode evhlm str Q6 - - ----- Enter vertical highlight mode
set_a_attributes sgr1 str Q7 - - ----- Define second set of video attributes #1-#6
exit_horizontal_hl_mode rmhhlm str Q8 - - ----K Exit horizontal highlight mode
exit_left_hl_mode rmlhlm str Q9 - - ----K Exit left highlight mode
exit_low_hl_mode rmlohlm str Qa - - ----K Exit low highlight mode
exit_right_hl_mode rmrhlm str Qb - - ----K Exit right highlight mode
exit_top_hl_mode rmthlm str Qc - - ----K Exit top highlight mode
exit_vertical_hl_mode rmvhlm str Qd - - ----K Exit vertical highlight mode
#%.TE
#%.ad
#
# The magic token below tells the tic compiler-generator code that all the caps
# past it should be ignored (not written out) when dumping terminfo objects. It
# also tells the man page table generator not to pass through following lines
# This means we can have obsolete capabilities and pseudo-capabilities that are
# recognized for termcap or terminfo compilation, but not output.
#
# %%-STOP-HERE-%%
#
# Don't move this casually! In fact, don't move it at all unless you're
# either doing it to add System V or XPG4 extensions, or have decided you
# don't care about SVr4 binary compatibility.
#
#############################################################################
#
# TERMCAP EXTENSION CAPABILITIES
#
# The capabilities below are either obsolete or extensions on certain systems.
# They are not used by SVR4 terminfo. Some are used by captoinfo to translate
# termcap sources; the rest are listed for completeness, and in case somebody
# cares about them enough to hack in code that will translate them into
# terminfo capabilities.
#
# The first part of the list is from Ross Ridge's `mytinfo' package
# (comp.sources.unix, volume 26); the variable names and terminfo names (as
# well as the termcap codes) match his list.
#
# This group of codes is not marked obsolete in 4.4BSD, but have no direct
# terminfo equivalents. The rs capability is specially translated to terminfo
# r2, and vice versa, if an entry does not already have an r2. Similarly,
# i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2).
# The ug capability is thrown away, but assumed to be whatever sg is if the
# latter is nonzero and we're dumping in termcap format.
#
termcap_init2 OTi2 str i2 - - YB--- secondary initialization string
termcap_reset OTrs str rs - - YB-G- terminal reset string
magic_cookie_glitch_ul OTug num ug - - YBCGE number of blanks left by ul
#
# Obsolete termcap capabilities. Some are used for termcap translation. The
# code uses the 'OT' prefix we put on obsolete capabilities to suppress
# printing them in terminfo source dumps of compiled entries.
#
backspaces_with_bs OTbs bool bs - - YBCGE uses ^H to move left
crt_no_scrolling OTns bool ns - - YBCG- crt cannot scroll
no_correctly_working_cr OTnc bool nc - - YBCG- no way to go to start of line
carriage_return_delay OTdC num dC - - YB-G- pad needed for CR
new_line_delay OTdN num dN - - YB-G- pad needed for LF
linefeed_if_not_lf OTnl str nl - - YBCGE use to move down
backspace_if_not_bs OTbc str bc - - YBCGE move left, if not ^H
#
# GNU termcap library extensions. The GNU termcap file distributed with
# Emacs no longer uses these, but MT showed up in pre-9.0 versions of the
# BSD termcap file. The name clash with terminfo MT is resolved by type
# info; MT is converted to km.
#
gnu_has_meta_key OTMT bool MT - - ----E has meta key
# gnu_tab_width OTtw num tw - - ----E tab width in spaces
#
# GNU termcap *does* include the following extended capability, Only the
# now-obsolete Ann Arbor terminals used it.
#
# gnu_change_scroll_region OTcS str cS - - ---GE alternate set scrolling region
#
# The following comments describe capnames so ancient that I believe no
# software uses them any longer. Some of these have to go because they
# clash with terminfo names in ways that cannot be resolved by type
# information.
#
# These mytinfo codes are not used in the 4.4BSD curses code. They are
# marked obsolete in the 4.4BSD manual pages.
#
# There is one conflict with terminfo; ma is in both. This conflict is
# resolved by type information.
#
# The `ko' capability is translated by special code. It should contain a
# comma-separated list of capabilities for which there are corresponding keys.
# The `kn' code is accepted but ignored.
#
# The `ma' capability was a 4.0BSD feature used by vi version 2.
# It consists of pairs of characters corresponding to kl, kr, ku, kd, and kh.
# Besides being obsolete, that interpretation conflicts with max_attributes.
#
# Here is a description of memory_lock_above and memory_unlock:
# "You can 'freeze' data on the screen by turning on Memory Lock in a line of
# text. All lines above the cursor's current line become locked in place on
# the screen. Then enter data normally. When the screen fills up, any
# further data entered forces the first line of unfrozen line text to scroll
# under the frozen data. Lines scrolled off the screen are inserted into
# memory immediately preceding the first frozen line." (from the HP 700/96
# User's manual). VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l.
#
# Applications that use terminfo are supposed to behave as though xr is
# always true.
#
linefeed_is_newline OTNL bool NL - - YB--- move down with \n
# even_parity OTEP bool EP - - -B--- terminal requires even parity
# odd_parity OTOP bool OP - - -B--- terminal requires odd parity
# half_duplex OTHD bool HD - - -B--- terminal is half-duplex
# lower_case_only OTLC bool LC - - -B--- terminal has only lower case
# upper_case_only OTUC bool UC - - -B--- terminal has only upper case
backspace_delay OTdB num dB - - YB-G- padding required for ^H
# form_feed_delay OTdF num dF - - -B-G- padding required for ^L
horizontal_tab_delay OTdT num dT - - YB-G- padding required for ^I
# vertical_tab_delay OTdV num dV - - -B--- padding required for ^V
number_of_function_keys OTkn num kn - - -B-G- count of function keys
other_non_function_keys OTko str ko - - -B-G- list of self-mapped keycaps
arrow_key_map OTma str ma - - YBC-- map motion-keys for vi version 2
# memory_lock_above OTml str ml - - -B--- lock visible screen memory above the current line
# memory_unlock OTmu str mu - - -B--- unlock visible screen memory above the current line
has_hardware_tabs OTpt bool pt - - YB--- has 8-char tabs invoked with ^I
return_does_clr_eol OTxr bool xr - - YB--- return clears the line
# tek_4025_insert_line OTxx bool xx - - -BC-- Tektronix 4025 insert-line glitch
#
# mytinfo described this as a termcap capability, but it's not listed in the
# 4.4BSD man pages, and not found in the 4.4BSD termcap file. The ncurses
# package, like System V, behaves as though it is always true.
#
# rind_only_at_top OTxq bool xq - - ----- reverse index only works from top line
#
# University of Waterloo termcap extensions (as described in mytinfo).
# The `xl' termcap file clashes with a terminfo name; this ambiguity cannot
# be resolved by a type check. The descriptions are guesses from what was
# in the mytinfo tables.
#
# key_interrupt_char OTki str ki - - ----- string set by interrupt key (?)
# key_kill_char OTkk str kk - - ----- string set by kill key (?)
# key_suspend_char OTkz str kz - - ----- string set by suspend key (?)
# initialization_messy OTxc bool xc - - ----- initialization leaves garbage on the screen (?)
# ind_at_bottom_does_cr OTxl bool xl - - ----- index does a carriage return
#
# Nonstandard capabilities unique to Ross Ridge's `mytinfo' package.
# SR clashes with a terminfo name; this ambiguity cannot be resolved by a type
# check.
#
# scroll_left OTsl1 str Sl - - ----- scroll screen leftward
# scroll_right OTsr1 str Sr - - ----- scroll screen rightward
# parm_scroll_left OTsl str SL - - ----- scroll screen leftward #1 characters
# parm_scroll_right OTsr str SR - - ----- scroll screen rightward #1 characters
#
# The mytinfo capabilities end here.
#
# XENIX extensions:
#
# Xenix defined its own set of forms-drawing capabilities:
#
# cap IBM ASCII description ACS ASCII
# --- ----------- -------------------- ------------- ------
# G1 191 \277 M-? single upper right ACS_URCORNER
# G2 218 \332 M-Z single upper left ACS_ULCORNER
# G3 192 \300 M-@ single lower left ACS_LLCORNER
# G4 217 \331 M-Y single lower right ACS_LRCORNER
# G5 187 \273 M-; double upper right
# G6 201 \311 M-I double upper left
# G7 200 \310 M-H double lower left
# G8 188 \274 M-< double lower right
# GC 197 \305 M-E single intersection ACS_PLUS _ _
# GD 194 \302 M-B single down-tick ACS_TTEE |
# GH 196 \304 M-D single horizontal line ACS_HLINE
# GL 180 \264 M-4 single left tick ACS_RTEE -|
# GR 195 \303 M-C single right tick ACS_LTEE |-
# GU 193 \301 M-A single up tick ACS_BTEE _|_
# GV 179 \263 M-3 single vertical line ACS_VLINE
# Gc 206 \316 M-N double intersection
# Gd 203 \313 M-K double down tick
# Gh 205 \315 M-M double horizontal line
# Gl 204 \204 M-L double left tick
# Gr 185 \271 M-9 double right tick
# Gu 202 \312 M-J double up tick
# Gv 186 \272 M-: double vertical line
#
# The compiler will translate the single-line caps and discard the others
# (via IGNORE aliases further down). We don't want to do normal pad
# translation on these, they're often single-character printable ASCII
# strings that happen to be numerics. There's awk code in parametrized.sh
# that detects the acs_ prefix and uses it to suppress pad translation.
# These terminfo names are invented.
#
acs_ulcorner OTG2 str G2 - - ----- single upper left
acs_llcorner OTG3 str G3 - - ----- single lower left
acs_urcorner OTG1 str G1 - - ----- single upper right
acs_lrcorner OTG4 str G4 - - ----- single lower right
acs_ltee OTGR str GR - - ----- tee pointing right
acs_rtee OTGL str GL - - ----- tee pointing left
acs_btee OTGU str GU - - ----- tee pointing up
acs_ttee OTGD str GD - - ----- tee pointing down
acs_hline OTGH str GH - - ----- single horizontal line
acs_vline OTGV str GV - - ----- single vertical line
acs_plus OTGC str GC - - ----- single intersection
#
#############################################################################
#
# TERMINFO EXTENSION CAPABILITIES
#
# (see Caps-ncurses for the complete set of comments)
#
box_chars_1 box1 str bx - - ----K box characters primary set
#
#############################################################################
diff --git a/contrib/ncurses/include/Caps.keys b/contrib/ncurses/include/Caps.keys
index 6b03964fd67d..018f68474fda 100644
--- a/contrib/ncurses/include/Caps.keys
+++ b/contrib/ncurses/include/Caps.keys
@@ -1,1058 +1,1062 @@
##############################################################################
# Copyright 2019,2020 Thomas E. Dickey #
# Copyright 2001-2015,2016 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas Dickey
# and: Ilya Zakharevich
#
-# $Id: Caps.keys,v 1.14 2020/02/02 23:34:34 tom Exp $
+# $Id: Caps.keys,v 1.15 2020/10/17 21:30:19 tom Exp $
#
# This is an adaptation of ncurses' termcap/terminfo capability table, which
# is illustrates an experimental extension to describe alt-, shift- and
# control-modifiers applied to function and normal keys, as done on IBM pc's.
#
# This table is used to generate initializers for tables that drive tic,
# infocmp, and the library compilation code used to support the termcap
# compatibility hack. It is also used to generate the tabular portion of the
# terminfo(5) man page; lines beginning with `#%' are passed through to become
# the terminfo table.
#
# This file has three major sections; a standard-capabilities table, two
# extension-capability tables, and a section of aliases declarations.
# The first two have the same format, as follows:
#
# FILE FORMAT
#
# Column 1: terminfo variable name
# Column 2: terminfo capability name
# Column 3: capability type (boolean, numeric, or string)
# Column 4: termcap capability name
# Column 5: KEY_xxx name, if any, `-' otherwise
# Column 6: value for KEY_xxx name, if any, `-' otherwise
# Column 7: Lead with `Y' if capability should be emitted in termcap
# translations, `-' otherwise
# Column 8: capability description
#
# The codes following [Y-] in column 7 describe the versions of termcap which
# use the given capability. This information is not used by the curses library
# proper; rather, it's there to help the terminfo maintainer avoid emitting
# termcap entry translations that are more than 1023 bytes long (and tank a
# lot of old termcap-using programs). The codes read as follows:
# B = mentioned in the BSD man page for 4.4BSD curses
# C = used by the 4.4BSD curses library
# G = mentioned in the documentation for GNU termcap
# E = used by GNU Emacs
# K = remove this terminfo capability when translating to standard format
# The important codes are C and E. A cap with C or E should be preserved in
# translation if possible. The problem is that preserving all such caps may
# lead to some termcap translations being too long. The termcap maintainer
# has a bit of a juggling act to do...potential problem cases are marked with
# an asterisk (*).
#
# The aliases section has the following format:
#
# Column 1: either `capalias' or `infoalias'
# Column 2: name to be aliased
# Column 3: what name it should translate to. The name IGNORE means it
# should be discarded with a warning message.
# Column 4: name of the extension set (used for compiler warning messages)
# Column 5: capability description (usually an associated terminfo variable)
#
# HANDLING TERMCAP AND TERMINFO EXTENSIONS
#
# There are basically five different ways to handle termcap and terminfo
# extensions:
#
# 1. Don't list the capname here, or list it but comment it out (the latter
# is preferable; someone might want to handle it in the future). If you do
# this, the capability will be treated as unknown and raise a warning from
# the compiler.
#
# 2. Alias it. This is appropriate if the capability has the same meaning
# as an already-supported one. The compiler will handle aliasing, emitting
# an appropriate informational message whenever an alias fires.
#
# 3. List it in the standard table. You almost certainly do *not* want
# to do this -- the capabilities in that one, and their order, have been
# carefully chosen to be SVr4-binary-compatible when they're written out
# as a terminfo object, and breaking this would be bad. It's up to the ncurses
# library what to do with the terminfo data after it's read in.
#
# 4. List it in the aliases table with an IGNORE target field. If you
# do this, the capability will be ignored on input (though the user will
# get a warning message about it).
#
# 5. List it in the extensions table. If you do this, the compiler will
# silently accept the capability, but the curses library proper will never
# see it (because it won't be written out as part of the terminfo object
# format). It's up to you what you have the compiler do with it.
#
# There are two opposite reasons to choose option 5. One is when you want
# to eat the capability silently and discard it when doing translations
# to terminfo with tic -I. Some very old obsolete BSD caps like :kn: are
# in this class. Nothing will ever use them again.
#
# More usually, you want the compiler to try to deduce something from the
# capability value that it can use to translate it into your output format.
# You'll need to write custom code, probably in postprocess_termcap() or
# postprocess_terminfo(), to handle the translation.
#
# CONTROLLING ENTRY LENGTH
#
# Notes on specific elisions made to fit translations within 1023 bytes:
#
# Machines with IBM PC-like keyboards want to be able to define the following
# keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap-
# only environments for End or Home-Down), key_dc, and key_ic. This is also
# the set of keys the `joe' editor will be upset if it can't see. So don't
# trim those out of the set to be translated to termcap, or various users of
# the termcap file will become irate.
#
# It might look tempting to leave those long init strings out of translations.
# We can't do it (yet); 4.4BSD tput and tset use them.
#
# We retain the sgr capability in translation in spite of the fact that neither
# 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are
# hard to understand without it, and (b) the entries in which it is long tend
# to be older types that don't use up a lot of string space on function keys.
# The tic(1) translation code will complain and elide it if it makes a critical
# difference (there is special code in tic to recognize this situation).
#
# Yes, BSD tset(1) uses hpa. We elide hpa/vpa anyway because the motion
# optimizer in BSD curses didn't use them. This omission seems to be the
# single most effective one, it shortened the resolved length of all thirteen
# problem entries in the 9.9.0 version of the terminfo master below critical.
#
# It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap
# translations go back over critical if we do this. As 4.4BSD curses fades
# into history and GNU termcap's application base shrinks towards being GNU
# Emacs only, we'll probably elide out some BSD-only capabilities in order
# to buy space for non-essentials Emacs is still using. Capabilities high
# on that hit list: rc, sc, uc.
#
#############################################################################
#
# STANDARD CAPABILITIES
#
#%The following is a complete table of the capabilities included in a
#%terminfo description block and available to terminfo-using code. In each
#%line of the table,
#%
#%The \fBvariable\fR is the name by which the programmer (at the terminfo level)
#%accesses the capability.
#%
#%The \fBcapname\fR is the short name used in the text of the database,
#%and is used by a person updating the database.
#%Whenever possible, capnames are chosen to be the same as or similar to
#%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses
#%identical or very similar names). Semantics are also intended to match
#%those of the specification.
#%
#%The termcap code is the old
#%.B termcap
#%capability name (some capabilities are new, and have names which termcap
#%did not originate).
#%.P
#%Capability names have no hard length limit, but an informal limit of 5
#%characters has been adopted to keep them short and to allow the tabs in
#%the source file
#%.B Caps
#%to line up nicely.
#%
#%Finally, the description field attempts to convey the semantics of the
#%capability. You may find some codes in the description field:
#%.TP
#%(P)
#%indicates that padding may be specified
#%.TP
#%#[1-9]
-#%in the description field indicates that the string is passed through tparm with
-#%parms as given (#\fIi\fP).
+#%in the description field indicates that the string is passed
+#%through \fBtparm\fP(3X) with parameters as given (#\fIi\fP).
+#%.IP
+#%If no parameters are listed in the description,
+#%passing the string through \fBtparm\fP(3X) may give unexpected results,
+#%e.g., if it contains percent (%%) signs.
#%.TP
#%(P*)
#%indicates that padding may vary in proportion to the number of
#%lines affected
#%.TP
#%(#\d\fIi\fP\u)
#%indicates the \fIi\fP\uth\d parameter.
#%
#%.PP
#% These are the boolean capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBBooleans name Code\fR
auto_left_margin bw bool bw - - YB-G- cub1 wraps from column 0 to last column
auto_right_margin am bool am - - YBCGE terminal has automatic margins
no_esc_ctlc xsb bool xb - - YBCG- beehive (f1=escape, f2=ctrl C)
ceol_standout_glitch xhp bool xs - - YBCGE standout not erased by overwriting (hp)
eat_newline_glitch xenl bool xn - - YBCGE newline ignored after 80 cols (concept)
erase_overstrike eo bool eo - - YBCG- can erase overstrikes with a blank
generic_type gn bool gn - - YB-G- generic line type
hard_copy hc bool hc - - YBCG- hardcopy terminal
has_meta_key km bool km - - YB-GE Has a meta key (i.e., sets 8th-bit)
has_status_line hs bool hs - - YB-G- has extra status line
insert_null_glitch in bool in - - YBCGE insert mode distinguishes nulls
memory_above da bool da - - YBCG- display may be retained above the screen
memory_below db bool db - - YB-GE display may be retained below the screen
move_insert_mode mir bool mi - - YBCGE safe to move while in insert mode
move_standout_mode msgr bool ms - - YBCGE safe to move while in standout mode
over_strike os bool os - - YBCG- terminal can overstrike
status_line_esc_ok eslok bool es - - YB-G- escape can be used on the status line
dest_tabs_magic_smso xt bool xt - - YBCGE tabs destructive, magic so char (t1061)
tilde_glitch hz bool hz - - YB-GE cannot print ~'s (Hazeltine)
transparent_underline ul bool ul - - YBCGE underline character overstrikes
xon_xoff xon bool xo - - YB--- terminal uses xon/xoff handshaking
needs_xon_xoff nxon bool nx - - ----- padding will not work, xon/xoff required
prtr_silent mc5i bool 5i - - ----- printer will not echo on screen
hard_cursor chts bool HC - - ----- cursor is hard to see
non_rev_rmcup nrrmc bool NR - - ----- smcup does not reverse rmcup
no_pad_char npc bool NP - - ----- pad character does not exist
non_dest_scroll_region ndscr bool ND - - ----- scrolling region is non-destructive
can_change ccc bool cc - - ----- terminal can re-define existing colors
back_color_erase bce bool ut - - ----- screen erased with background color
hue_lightness_saturation hls bool hl - - ----- terminal uses only HLS color notation (Tektronix)
col_addr_glitch xhpa bool YA - - ----- only positive motion for hpa/mhpa caps
cr_cancels_micro_mode crxm bool YB - - ----- using cr turns off micro mode
has_print_wheel daisy bool YC - - ----- printer needs operator to change character set
row_addr_glitch xvpa bool YD - - ----- only positive motion for vpa/mvpa caps
semi_auto_right_margin sam bool YE - - ----- printing in last column causes cr
cpi_changes_res cpix bool YF - - ----- changing character pitch changes resolution
lpi_changes_res lpix bool YG - - ----- changing line pitch changes resolution
#%.TE
#%.ad
#%
#%These are the numeric capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBNumeric name Code\fR
columns cols num co - - YBCGE number of columns in a line
init_tabs it num it - - YB-G- tabs initially every # spaces
lines lines num li - - YBCGE number of lines on screen or page
lines_of_memory lm num lm - - YB-G- lines of memory if > line. 0 means varies
magic_cookie_glitch xmc num sg - - YBCGE number of blank characters left by smso or rmso
padding_baud_rate pb num pb - - YB-GE lowest baud rate where padding needed
virtual_terminal vt num vt - - YB--- virtual terminal number (CB/unix)
width_status_line wsl num ws - - YB-G- number of columns in status line
num_labels nlab num Nl - - ----- number of labels on screen
label_height lh num lh - - ----- rows in each label
label_width lw num lw - - ----- columns in each label
max_attributes ma num ma - - YBC-- maximum combined attributes terminal can handle
maximum_windows wnum num MW - - ----- maximum number of definable windows
# These came in with SVr4's color support
max_colors colors num Co - - ----- maximum number of colors on screen
max_pairs pairs num pa - - ----- maximum number of color-pairs on the screen
no_color_video ncv num NC - - ----- video attributes that cannot be used with colors
#%.TE
#%.ad
#%
#%The following numeric capabilities are present in the SVr4.0 term structure,
#%but are not yet documented in the man page. They came in with SVr4's
#%printer support.
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBNumeric name Code\fR
buffer_capacity bufsz num Ya - - ----- numbers of bytes buffered before printing
dot_vert_spacing spinv num Yb - - ----- spacing of pins vertically in pins per inch
dot_horz_spacing spinh num Yc - - ----- spacing of dots horizontally in dots per inch
max_micro_address maddr num Yd - - ----- maximum value in micro_..._address
max_micro_jump mjump num Ye - - ----- maximum value in parm_..._micro
micro_col_size mcs num Yf - - ----- character step size when in micro mode
micro_line_size mls num Yg - - ----- line step size when in micro mode
number_of_pins npins num Yh - - ----- numbers of pins in print-head
output_res_char orc num Yi - - ----- horizontal resolution in units per line
output_res_line orl num Yj - - ----- vertical resolution in units per line
output_res_horz_inch orhi num Yk - - ----- horizontal resolution in units per inch
output_res_vert_inch orvi num Yl - - ----- vertical resolution in units per inch
print_rate cps num Ym - - ----- print rate in characters per second
wide_char_size widcs num Yn - - ----- character step size when in double wide mode
buttons btns num BT - - ----- number of buttons on mouse
bit_image_entwining bitwin num Yo - - ----- number of passes for each bit-image row
bit_image_type bitype num Yp - - ----- type of bit-image device
#%.TE
#%.ad
#%
#%These are the string capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
back_tab cbt str bt - - YBCGE back tab (P)
bell bel str bl - - YB-GE audible signal (bell) (P)
carriage_return cr str cr - - YBCGE carriage return (P*) (P*)
change_scroll_region csr str cs - - YBCGE change region to line #1 to line #2 (P)
clear_all_tabs tbc str ct - - YB-G- clear all tab stops (P)
clear_screen clear str cl - - YBCGE clear screen and home cursor (P*)
clr_eol el str ce - - YBCGE clear to end of line (P)
clr_eos ed str cd - - YBCGE clear to end of screen (P*)
column_address hpa str ch - - -B-GE* horizontal position #1, absolute (P)
command_character cmdch str CC - - YB-G- terminal settable cmd character in prototype !?
cursor_address cup str cm - - YBCGE move to row #1 columns #2
cursor_down cud1 str do - - YBCGE down one line
cursor_home home str ho - - YBCGE home cursor (if no cup)
cursor_invisible civis str vi - - YB-G- make cursor invisible
cursor_left cub1 str le - - YBCGE move left one space
cursor_mem_address mrcup str CM - - YB-G- memory relative cursor addressing, move to row #1 columns #2
cursor_normal cnorm str ve - - YBCGE make cursor appear normal (undo civis/cvvis)
cursor_right cuf1 str nd - - YBCGE non-destructive space (move right one space)
cursor_to_ll ll str ll - - YBCGE last line, first column (if no cup)
cursor_up cuu1 str up - - YBCGE up one line
cursor_visible cvvis str vs - - YBCGE make cursor very visible
delete_character dch1 str dc - - YBCGE delete character (P*)
delete_line dl1 str dl - - YBCGE delete line (P*)
dis_status_line dsl str ds - - YB-G- disable status line
down_half_line hd str hd - - YB-G- half a line down
enter_alt_charset_mode smacs str as - - YB-G- start alternate character set (P)
enter_blink_mode blink str mb - - YB-G- turn on blinking
enter_bold_mode bold str md - - YB-G- turn on bold (extra bright) mode
enter_ca_mode smcup str ti - - YBCGE string to start programs using cup
enter_delete_mode smdc str dm - - YBCGE enter delete mode
enter_dim_mode dim str mh - - YB-G- turn on half-bright mode
enter_insert_mode smir str im - - YBCGE enter insert mode
enter_secure_mode invis str mk - - -B-G-* turn on blank mode (characters invisible)
enter_protected_mode prot str mp - - -B-G-* turn on protected mode
enter_reverse_mode rev str mr - - YB-G- turn on reverse video mode
enter_standout_mode smso str so - - YBCGE begin standout mode
enter_underline_mode smul str us - - YBCGE begin underline mode
erase_chars ech str ec - - YB-G- erase #1 characters (P)
exit_alt_charset_mode rmacs str ae - - YB-G- end alternate character set (P)
exit_attribute_mode sgr0 str me - - YB-GE turn off all attributes
exit_ca_mode rmcup str te - - YBCGE strings to end programs using cup
exit_delete_mode rmdc str ed - - YBCGE end delete mode
exit_insert_mode rmir str ei - - YBCGE exit insert mode
exit_standout_mode rmso str se - - YBCGE exit standout mode
exit_underline_mode rmul str ue - - YBCGE exit underline mode
flash_screen flash str vb - - YBCGE visible bell (may not move cursor)
form_feed ff str ff - - YB-G- hardcopy terminal page eject (P*)
from_status_line fsl str fs - - YB-G- return from status line
init_1string is1 str i1 - - YB-G- initialization string
init_2string is2 str is - - YB-G- initialization string
init_3string is3 str i3 - - YB-G- initialization string
init_file if str if - - YB-G- name of initialization file
insert_character ich1 str ic - - YBCGE insert character (P)
insert_line il1 str al - - YBCGE insert line (P*)
insert_padding ip str ip - - YBCGE insert padding after inserted character
key_backspace kbs str kb KEY_BACKSPACE 0407 YB-G- backspace key
key_catab ktbc str ka KEY_CATAB 0526 -B-G-* clear-all-tabs key
key_clear kclr str kC KEY_CLEAR 0515 -B-G-* clear-screen or erase key
key_ctab kctab str kt KEY_CTAB 0525 -B-G-* clear-tab key
key_dc kdch1 str kD KEY_DC 0512 YB-G- delete-character key
key_dl kdl1 str kL KEY_DL 0510 -B-G-* delete-line key
key_down kcud1 str kd KEY_DOWN 0402 YBCGE down-arrow key
key_eic krmir str kM KEY_EIC 0514 -B-G-* sent by rmir or smir in insert mode
key_eol kel str kE KEY_EOL 0517 -B-G-* clear-to-end-of-line key
key_eos ked str kS KEY_EOS 0516 -B-G-* clear-to-end-of-screen key
key_f0 kf0 str k0 KEY_F(0) 0410 YBCGE F0 function key
key_f1 kf1 str k1 KEY_F(1) - YBCGE F1 function key
key_f10 kf10 str k; KEY_F(10) - ----E F10 function key
key_f2 kf2 str k2 KEY_F(2) - YBCGE F2 function key
key_f3 kf3 str k3 KEY_F(3) - YBCGE F3 function key
key_f4 kf4 str k4 KEY_F(4) - YBCGE F4 function key
key_f5 kf5 str k5 KEY_F(5) - YBCGE F5 function key
key_f6 kf6 str k6 KEY_F(6) - YBCGE F6 function key
key_f7 kf7 str k7 KEY_F(7) - YBCGE F7 function key
key_f8 kf8 str k8 KEY_F(8) - YBCGE F8 function key
key_f9 kf9 str k9 KEY_F(9) - YBCGE F9 function key
key_home khome str kh KEY_HOME 0406 YBCGE home key
key_ic kich1 str kI KEY_IC 0513 YB-GE insert-character key
key_il kil1 str kA KEY_IL 0511 -B-G-* insert-line key
key_left kcub1 str kl KEY_LEFT 0404 YBCGE left-arrow key
key_ll kll str kH KEY_LL 0533 YB-G- lower-left key (home down)
key_npage knp str kN KEY_NPAGE 0522 YB-GE next-page key
key_ppage kpp str kP KEY_PPAGE 0523 YB-GE previous-page key
key_right kcuf1 str kr KEY_RIGHT 0405 YBCGE right-arrow key
key_sf kind str kF KEY_SF 0520 -B-G-* scroll-forward key
key_sr kri str kR KEY_SR 0521 -B-G-* scroll-backward key
key_stab khts str kT KEY_STAB 0524 -B-G-* set-tab key
key_up kcuu1 str ku KEY_UP 0403 YBCGE up-arrow key
keypad_local rmkx str ke - - YBCGE leave 'keyboard_transmit' mode
keypad_xmit smkx str ks - - YBCGE enter 'keyboard_transmit' mode
lab_f0 lf0 str l0 - - -B-G-* label on function key f0 if not f0
lab_f1 lf1 str l1 - - -B-G-* label on function key f1 if not f1
lab_f10 lf10 str la - - ----- label on function key f10 if not f10
lab_f2 lf2 str l2 - - -B-G-* label on function key f2 if not f2
lab_f3 lf3 str l3 - - -B-G-* label on function key f3 if not f3
lab_f4 lf4 str l4 - - -B-G-* label on function key f4 if not f4
lab_f5 lf5 str l5 - - -B-G-* label on function key f5 if not f5
lab_f6 lf6 str l6 - - -B-G-* label on function key f6 if not f6
lab_f7 lf7 str l7 - - -B-G-* label on function key f7 if not f7
lab_f8 lf8 str l8 - - -B-G-* label on function key f8 if not f8
lab_f9 lf9 str l9 - - -B-G-* label on function key f9 if not f9
meta_off rmm str mo - - YB-G-* turn off meta mode
meta_on smm str mm - - YB-G-* turn on meta mode (8th-bit on)
newline nel str nw - - YB-G-* newline (behave like cr followed by lf)
pad_char pad str pc - - YBCGE padding char (instead of null)
parm_dch dch str DC - - YB-GE delete #1 characters (P*)
parm_delete_line dl str DL - - YBCGE delete #1 lines (P*)
parm_down_cursor cud str DO - - YBCGE down #1 lines (P*)
parm_ich ich str IC - - YB-GE insert #1 characters (P*)
parm_index indn str SF - - YBCG- scroll forward #1 lines (P)
parm_insert_line il str AL - - YBCGE insert #1 lines (P*)
parm_left_cursor cub str LE - - YBCGE move #1 characters to the left (P)
parm_right_cursor cuf str RI - - YBCGE move #1 characters to the right (P*)
parm_rindex rin str SR - - YBCG- scroll back #1 lines (P)
parm_up_cursor cuu str UP - - YBCGE up #1 lines (P*)
pkey_key pfkey str pk - - -B--- program function key #1 to type string #2
pkey_local pfloc str pl - - -B--- program function key #1 to execute string #2
pkey_xmit pfx str px - - -B--- program function key #1 to transmit string #2
print_screen mc0 str ps - - -B-G-* print contents of screen
prtr_off mc4 str pf - - -B-G-* turn off printer
prtr_on mc5 str po - - -B-G-* turn on printer
repeat_char rep str rp - - YB-GE repeat char #1 #2 times (P*)
reset_1string rs1 str r1 - - -B--- reset string
reset_2string rs2 str r2 - - -B--- reset string
reset_3string rs3 str r3 - - -B--- reset string
reset_file rf str rf - - -B--- name of reset file
restore_cursor rc str rc - - YBCG- restore cursor to position of last save_cursor
row_address vpa str cv - - -B-GE* vertical position #1 absolute (P)
save_cursor sc str sc - - YBCG- save current cursor position (P)
scroll_forward ind str sf - - YBCGE scroll text up (P)
scroll_reverse ri str sr - - YBCGE scroll text down (P)
set_attributes sgr str sa - - YB-G- define video attributes #1-#9 (PG9)
set_tab hts str st - - YB-G- set a tab in every row, current columns
set_window wind str wi - - -B-GE current window is lines #1-#2 cols #3-#4
tab ht str ta - - YBCGE tab to next 8-space hardware tab stop
to_status_line tsl str ts - - YB-G- move to status line, column #1
underline_char uc str uc - - YBCG- underline char and move past it
up_half_line hu str hu - - YB-G- half a line up
init_prog iprog str iP - - -B--- path name of program for initialization
key_a1 ka1 str K1 KEY_A1 0534 YB-GE upper left of keypad
key_a3 ka3 str K3 KEY_A3 0535 YB-GE upper right of keypad
key_b2 kb2 str K2 KEY_B2 0536 YB-GE center of keypad
key_c1 kc1 str K4 KEY_C1 0537 YB-GE lower left of keypad
key_c3 kc3 str K5 KEY_C3 0540 YB-GE lower right of keypad
prtr_non mc5p str pO - - -B-G-* turn on printer for #1 bytes
#
# SVr1 capabilities stop here. IBM's version of terminfo is the same as
# SVr4 up to this point, but has a different set afterwards.
#
char_padding rmp str rP - - ----- like ip but when in insert mode
acs_chars acsc str ac - - ----- graphics charset pairs, based on vt100
plab_norm pln str pn - - ----- program label #1 to show string #2
key_btab kcbt str kB KEY_BTAB 0541 ----- back-tab key
enter_xon_mode smxon str SX - - ----- turn on xon/xoff handshaking
exit_xon_mode rmxon str RX - - ----- turn off xon/xoff handshaking
enter_am_mode smam str SA - - ----- turn on automatic margins
exit_am_mode rmam str RA - - ----- turn off automatic margins
xon_character xonc str XN - - ----- XON character
xoff_character xoffc str XF - - ----- XOFF character
ena_acs enacs str eA - - ----- enable alternate char set
label_on smln str LO - - ----- turn on soft labels
label_off rmln str LF - - ----- turn off soft labels
key_beg kbeg str @1 KEY_BEG 0542 ----- begin key
key_cancel kcan str @2 KEY_CANCEL 0543 ----- cancel key
key_close kclo str @3 KEY_CLOSE 0544 ----- close key
key_command kcmd str @4 KEY_COMMAND 0545 ----- command key
key_copy kcpy str @5 KEY_COPY 0546 ----- copy key
key_create kcrt str @6 KEY_CREATE 0547 ----- create key
key_end kend str @7 KEY_END 0550 ----- end key
key_enter kent str @8 KEY_ENTER 0527 ----- enter/send key
key_exit kext str @9 KEY_EXIT 0551 ----- exit key
key_find kfnd str @0 KEY_FIND 0552 ----- find key
key_help khlp str %1 KEY_HELP 0553 ----- help key
key_mark kmrk str %2 KEY_MARK 0554 ----- mark key
key_message kmsg str %3 KEY_MESSAGE 0555 ----- message key
key_move kmov str %4 KEY_MOVE 0556 ----- move key
key_next knxt str %5 KEY_NEXT 0557 ----- next key
key_open kopn str %6 KEY_OPEN 0560 ----- open key
key_options kopt str %7 KEY_OPTIONS 0561 ----- options key
key_previous kprv str %8 KEY_PREVIOUS 0562 ----- previous key
key_print kprt str %9 KEY_PRINT 0532 ----- print key
key_redo krdo str %0 KEY_REDO 0563 ----- redo key
key_reference kref str &1 KEY_REFERENCE 0564 ----- reference key
key_refresh krfr str &2 KEY_REFRESH 0565 ----- refresh key
key_replace krpl str &3 KEY_REPLACE 0566 ----- replace key
key_restart krst str &4 KEY_RESTART 0567 ----- restart key
key_resume kres str &5 KEY_RESUME 0570 ----- resume key
key_save ksav str &6 KEY_SAVE 0571 ----- save key
key_suspend kspd str &7 KEY_SUSPEND 0627 ----- suspend key
key_undo kund str &8 KEY_UNDO 0630 ----- undo key
key_sbeg kBEG str &9 KEY_SBEG 0572 ----- shifted begin key
key_scancel kCAN str &0 KEY_SCANCEL 0573 ----- shifted cancel key
key_scommand kCMD str *1 KEY_SCOMMAND 0574 ----- shifted command key
key_scopy kCPY str *2 KEY_SCOPY 0575 ----- shifted copy key
key_screate kCRT str *3 KEY_SCREATE 0576 ----- shifted create key
key_sdc kDC str *4 KEY_SDC 0577 ----- shifted delete-character key
key_sdl kDL str *5 KEY_SDL 0600 ----- shifted delete-line key
key_select kslt str *6 KEY_SELECT 0601 ----- select key
key_send kEND str *7 KEY_SEND 0602 ----- shifted end key
key_seol kEOL str *8 KEY_SEOL 0603 ----- shifted clear-to-end-of-line key
key_sexit kEXT str *9 KEY_SEXIT 0604 ----- shifted exit key
key_sfind kFND str *0 KEY_SFIND 0605 ----- shifted find key
key_shelp kHLP str #1 KEY_SHELP 0606 ----- shifted help key
key_shome kHOM str #2 KEY_SHOME 0607 ----- shifted home key
key_sic kIC str #3 KEY_SIC 0610 ----- shifted insert-character key
key_sleft kLFT str #4 KEY_SLEFT 0611 ----- shifted left-arrow key
key_smessage kMSG str %a KEY_SMESSAGE 0612 ----- shifted message key
key_smove kMOV str %b KEY_SMOVE 0613 ----- shifted move key
key_snext kNXT str %c KEY_SNEXT 0614 ----- shifted next key
key_soptions kOPT str %d KEY_SOPTIONS 0615 ----- shifted options key
key_sprevious kPRV str %e KEY_SPREVIOUS 0616 ----- shifted previous key
key_sprint kPRT str %f KEY_SPRINT 0617 ----- shifted print key
key_sredo kRDO str %g KEY_SREDO 0620 ----- shifted redo key
key_sreplace kRPL str %h KEY_SREPLACE 0621 ----- shifted replace key
key_sright kRIT str %i KEY_SRIGHT 0622 ----- shifted right-arrow key
key_srsume kRES str %j KEY_SRSUME 0623 ----- shifted resume key
key_ssave kSAV str !1 KEY_SSAVE 0624 ----- shifted save key
key_ssuspend kSPD str !2 KEY_SSUSPEND 0625 ----- shifted suspend key
key_sundo kUND str !3 KEY_SUNDO 0626 ----- shifted undo key
req_for_input rfi str RF - - ----- send next input char (for ptys)
key_f11 kf11 str F1 KEY_F(11) - ----E F11 function key
key_f12 kf12 str F2 KEY_F(12) - ----E F12 function key
key_f13 kf13 str F3 KEY_F(13) - ----E F13 function key
key_f14 kf14 str F4 KEY_F(14) - ----E F14 function key
key_f15 kf15 str F5 KEY_F(15) - ----E F15 function key
key_f16 kf16 str F6 KEY_F(16) - ----E F16 function key
key_f17 kf17 str F7 KEY_F(17) - ----E F17 function key
key_f18 kf18 str F8 KEY_F(18) - ----E F18 function key
key_f19 kf19 str F9 KEY_F(19) - ----E F19 function key
key_f20 kf20 str FA KEY_F(20) - ----E F20 function key
key_f21 kf21 str FB KEY_F(21) - ----E F21 function key
key_f22 kf22 str FC KEY_F(22) - ----E F22 function key
key_f23 kf23 str FD KEY_F(23) - ----E F23 function key
key_f24 kf24 str FE KEY_F(24) - ----E F24 function key
key_f25 kf25 str FF KEY_F(25) - ----E F25 function key
key_f26 kf26 str FG KEY_F(26) - ----E F26 function key
key_f27 kf27 str FH KEY_F(27) - ----E F27 function key
key_f28 kf28 str FI KEY_F(28) - ----E F28 function key
key_f29 kf29 str FJ KEY_F(29) - ----E F29 function key
key_f30 kf30 str FK KEY_F(30) - ----E F30 function key
key_f31 kf31 str FL KEY_F(31) - ----E F31 function key
key_f32 kf32 str FM KEY_F(32) - ----E F32 function key
key_f33 kf33 str FN KEY_F(33) - ----E F33 function key
key_f34 kf34 str FO KEY_F(34) - ----E F34 function key
key_f35 kf35 str FP KEY_F(35) - ----E F35 function key
key_f36 kf36 str FQ KEY_F(36) - ----E F36 function key
key_f37 kf37 str FR KEY_F(37) - ----E F37 function key
key_f38 kf38 str FS KEY_F(38) - ----E F38 function key
key_f39 kf39 str FT KEY_F(39) - ----E F39 function key
key_f40 kf40 str FU KEY_F(40) - ----E F40 function key
key_f41 kf41 str FV KEY_F(41) - ----E F41 function key
key_f42 kf42 str FW KEY_F(42) - ----E F42 function key
key_f43 kf43 str FX KEY_F(43) - ----E F43 function key
key_f44 kf44 str FY KEY_F(44) - ----E F44 function key
key_f45 kf45 str FZ KEY_F(45) - ----E F45 function key
key_f46 kf46 str Fa KEY_F(46) - ----E F46 function key
key_f47 kf47 str Fb KEY_F(47) - ----E F47 function key
key_f48 kf48 str Fc KEY_F(48) - ----E F48 function key
key_f49 kf49 str Fd KEY_F(49) - ----E F49 function key
key_f50 kf50 str Fe KEY_F(50) - ----E F50 function key
key_f51 kf51 str Ff KEY_F(51) - ----E F51 function key
key_f52 kf52 str Fg KEY_F(52) - ----E F52 function key
key_f53 kf53 str Fh KEY_F(53) - ----E F53 function key
key_f54 kf54 str Fi KEY_F(54) - ----E F54 function key
key_f55 kf55 str Fj KEY_F(55) - ----E F55 function key
key_f56 kf56 str Fk KEY_F(56) - ----E F56 function key
key_f57 kf57 str Fl KEY_F(57) - ----E F57 function key
key_f58 kf58 str Fm KEY_F(58) - ----E F58 function key
key_f59 kf59 str Fn KEY_F(59) - ----E F59 function key
key_f60 kf60 str Fo KEY_F(60) - ----E F60 function key
key_f61 kf61 str Fp KEY_F(61) - ----E F61 function key
key_f62 kf62 str Fq KEY_F(62) - ----E F62 function key
key_f63 kf63 str Fr KEY_F(63) - ----E F63 function key
clr_bol el1 str cb - - ----- Clear to beginning of line
clear_margins mgc str MC - - ----- clear right and left soft margins
set_left_margin smgl str ML - - ----- set left soft margin at current column. See smgl. (ML is not in BSD termcap).
set_right_margin smgr str MR - - ----- set right soft margin at current column
label_format fln str Lf - - ----- label format
set_clock sclk str SC - - ----- set clock, #1 hrs #2 mins #3 secs
display_clock dclk str DK - - ----- display clock
remove_clock rmclk str RC - - ----- remove clock
create_window cwin str CW - - ----- define a window #1 from #2,#3 to #4,#5
goto_window wingo str WG - - ----- go to window #1
hangup hup str HU - - ----- hang-up phone
dial_phone dial str DI - - ----- dial number #1
quick_dial qdial str QD - - ----- dial number #1 without checking
tone tone str TO - - ----- select touch tone dialing
pulse pulse str PU - - ----- select pulse dialing
flash_hook hook str fh - - ----- flash switch hook
fixed_pause pause str PA - - ----- pause for 2-3 seconds
wait_tone wait str WA - - ----- wait for dial-tone
user0 u0 str u0 - - ----- User string #0
user1 u1 str u1 - - ----- User string #1
user2 u2 str u2 - - ----- User string #2
user3 u3 str u3 - - ----- User string #3
user4 u4 str u4 - - ----- User string #4
user5 u5 str u5 - - ----- User string #5
user6 u6 str u6 - - ----- User string #6
user7 u7 str u7 - - ----- User string #7
user8 u8 str u8 - - ----- User string #8
user9 u9 str u9 - - ----- User string #9
#
# NCurses extensions for keys accessible on most PC consoles
#
key_sup kUP str !5 KEY_SUP + ----- shifted up-arrow key
key_sdown kDOWN str !6 KEY_SDOWN + ----- shifted down-arrow key
key_sbackspace kBS str !7 KEY_SBACKSPACE + ----- shifted backspace key
key_c_delete kcdelete str !8 KEY_C_DELETE + ----- control- delete-character key
key_c_end kcend str !9 KEY_C_END + ----- control- end key
key_c_home kchom str !0 KEY_C_HOME + ----- control- home key
key_c_insert kcinsert str !_ KEY_C_INSERT + ----- control- insert-character key
key_c_left kclft str %k KEY_C_LEFT + ----- control- left-arrow key
key_c_next kcnxt str %l KEY_C_NEXT + ----- control- next key
key_c_previous kcprv str %m KEY_C_PREVIOUS + ----- control- previous key
key_c_print kcprt str %n KEY_C_PRINT + ----- control- print key
key_c_right kcrit str %o KEY_C_RIGHT + ----- control- right-arrow key
key_c_backspace kcbs str %p KEY_C_BACKSPACE + ----- control- backspace key
key_c_up kcup str %q KEY_C_UP + ----- control- up-arrow key
key_c_down kcdown str %r KEY_C_DOWN + ----- control- down-arrow key
key_a_delete kadelete str %s KEY_A_DELETE + ----- alt- delete-character key
key_a_end kaend str %t KEY_A_END + ----- alt- end key
key_a_home kahom str %u KEY_A_HOME + ----- alt- home key
key_a_insert kainsert str %v KEY_A_INSERT + ----- alt- insert-character key
key_a_left kalft str %w KEY_A_LEFT + ----- alt- left-arrow key
key_a_next kanxt str %x KEY_A_NEXT + ----- alt- next key
key_a_previous kaprv str %y KEY_A_PREVIOUS + ----- alt- previous key
key_a_print kaprt str %z KEY_A_PRINT + ----- alt- print key
key_a_right karit str %! KEY_A_RIGHT + ----- alt- right-arrow key
key_a_backspace kabs str %@ KEY_A_BACKSPACE + ----- alt- backspace key
key_a_up kaup str %# KEY_A_UP + ----- alt- up-arrow key
key_a_down kadown str %$ KEY_A_DOWN + ----- alt- down-arrow key
key_a_a kaa str $a KEY_A_A + ----- alt- a key
key_a_b kab str $b KEY_A_B + ----- alt- b key
key_a_c kac str $c KEY_A_C + ----- alt- c key
key_a_d kad str $d KEY_A_D + ----- alt- d key
key_a_e kae str $e KEY_A_E + ----- alt- e key
key_a_f kaf str $f KEY_A_F + ----- alt- f key
key_a_g kag str $g KEY_A_G + ----- alt- g key
key_a_h kah str $h KEY_A_H + ----- alt- h key
key_a_i kai str $i KEY_A_I + ----- alt- i key
key_a_j kaj str $j KEY_A_J + ----- alt- j key
key_a_k kak str $k KEY_A_K + ----- alt- k key
key_a_l kal str $l KEY_A_L + ----- alt- l key
key_a_m kam str $m KEY_A_M + ----- alt- m key
key_a_n kan str $n KEY_A_N + ----- alt- n key
key_a_o kao str $o KEY_A_O + ----- alt- o key
key_a_p kap str $p KEY_A_P + ----- alt- p key
key_a_q kaq str $q KEY_A_Q + ----- alt- q key
key_a_r kar str $r KEY_A_R + ----- alt- r key
key_a_s kas str $s KEY_A_S + ----- alt- s key
key_a_t kat str $t KEY_A_T + ----- alt- t key
key_a_u kau str $u KEY_A_U + ----- alt- u key
key_a_v kav str $v KEY_A_V + ----- alt- v key
key_a_w kaw str $w KEY_A_W + ----- alt- w key
key_a_x kax str $x KEY_A_X + ----- alt- x key
key_a_y kay str $y KEY_A_Y + ----- alt- y key
key_a_z kaz str $z KEY_A_Z + ----- alt- z key
key_a_0 ka_0 str $0 KEY_A_0 + ----- alt- 0 key
key_a_1 ka_1 str $1 KEY_A_1 + ----- alt- 1 key
key_a_2 ka_2 str $2 KEY_A_2 + ----- alt- 2 key
key_a_3 ka_3 str $3 KEY_A_3 + ----- alt- 3 key
key_a_4 ka_4 str $4 KEY_A_4 + ----- alt- 4 key
key_a_5 ka_5 str $5 KEY_A_5 + ----- alt- 5 key
key_a_6 ka_6 str $6 KEY_A_6 + ----- alt- 6 key
key_a_7 ka_7 str $7 KEY_A_7 + ----- alt- 7 key
key_a_8 ka_8 str $8 KEY_A_8 + ----- alt- 8 key
key_a_9 ka_9 str $9 KEY_A_9 + ----- alt- 9 key
key_a_backtick ka_bt str $` KEY_A_BACKTICK + ----- alt- ` key
key_a_under ka_und str $_ KEY_A_UNDER + ----- alt- _ key
key_a_equals ka_eq str $= KEY_A_EQUALS + ----- alt- = key
key_a_bar ka_bsl str $| KEY_A_BAR + ----- alt- | key
key_a_lbracker ka_lbr str $[ KEY_A_LBRACKER + ----- alt- [ key
key_a_rbracker ka_rbr str $] KEY_A_RBRACKER + ----- alt- ] key
key_a_semi ka_semi str $; KEY_A_SEMI + ----- alt- ; key
key_a_tick ka_tick str $' KEY_A_TICK + ----- alt- ' key
key_a_comma ka_com str $, KEY_A_COMMA + ----- alt- , key
key_a_dot ka_dot str $. KEY_A_DOT + ----- alt- . key
key_a_question ka_sla str $? KEY_A_QUESTION + ----- alt- ? key
key_a_divide ka_div str $/ KEY_A_DIVIDE + ----- alt- keypad / key
key_a_multiply ka_mul str $* KEY_A_MULTIPLY + ----- alt- keypad * key
key_a_add ka_add str $+ KEY_A_ADD + ----- alt- keypad + key
key_a_subtract ka_sub str $- KEY_A_SUBTRACT + ----- alt- keypad - key
key_a_kenter ka_kent str $< KEY_A_KENTER + ----- alt- keypad enter key
key_a_enter ka_ent str $> KEY_A_ENTER + ----- alt- enter key
key_c_at kcat str %% KEY_C_AT + ----- control- @ key
key_c_divide kcdiv str %/ KEY_C_DIVIDE + ----- control- keypad / key
key_c_multiply kcmul str %* KEY_C_MULTIPLY + ----- control- keypad * key
key_c_add kcadd str %+ KEY_C_ADD + ----- control- keypad + key
key_c_subtract kcsub str %- KEY_C_SUBTRACT + ----- control- keypad - key
#
# SVr4 added these capabilities to support color
#
orig_pair op str op - - ----- Set default pair to its original value
orig_colors oc str oc - - ----- Set all color pairs to the original ones
initialize_color initc str Ic - - ----- initialize color #1 to (#2,#3,#4)
initialize_pair initp str Ip - - ----- Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)
set_color_pair scp str sp - - ----- Set current color pair to #1
set_foreground setf str Sf - - ----- Set foreground color #1
set_background setb str Sb - - ----- Set background color #1
#
# SVr4 added these capabilities to support printers
#
change_char_pitch cpi str ZA - - ----- Change number of characters per inch to #1
change_line_pitch lpi str ZB - - ----- Change number of lines per inch to #1
change_res_horz chr str ZC - - ----- Change horizontal resolution to #1
change_res_vert cvr str ZD - - ----- Change vertical resolution to #1
define_char defc str ZE - - ----- Define a character #1, #2 dots wide, descender #3
enter_doublewide_mode swidm str ZF - - ----- Enter double-wide mode
enter_draft_quality sdrfq str ZG - - ----- Enter draft-quality mode
enter_italics_mode sitm str ZH - - ----- Enter italic mode
enter_leftward_mode slm str ZI - - ----- Start leftward carriage motion
enter_micro_mode smicm str ZJ - - ----- Start micro-motion mode
enter_near_letter_quality snlq str ZK - - ----- Enter NLQ mode
enter_normal_quality snrmq str ZL - - ----- Enter normal-quality mode
enter_shadow_mode sshm str ZM - - ----- Enter shadow-print mode
enter_subscript_mode ssubm str ZN - - ----- Enter subscript mode
enter_superscript_mode ssupm str ZO - - ----- Enter superscript mode
enter_upward_mode sum str ZP - - ----- Start upward carriage motion
exit_doublewide_mode rwidm str ZQ - - ----- End double-wide mode
exit_italics_mode ritm str ZR - - ----- End italic mode
exit_leftward_mode rlm str ZS - - ----- End left-motion mode
exit_micro_mode rmicm str ZT - - ----- End micro-motion mode
exit_shadow_mode rshm str ZU - - ----- End shadow-print mode
exit_subscript_mode rsubm str ZV - - ----- End subscript mode
exit_superscript_mode rsupm str ZW - - ----- End superscript mode
exit_upward_mode rum str ZX - - ----- End reverse character motion
micro_column_address mhpa str ZY - - ----- Like column_address in micro mode
micro_down mcud1 str ZZ - - ----- Like cursor_down in micro mode
micro_left mcub1 str Za - - ----- Like cursor_left in micro mode
micro_right mcuf1 str Zb - - ----- Like cursor_right in micro mode
micro_row_address mvpa str Zc - - ----- Like row_address #1 in micro mode
micro_up mcuu1 str Zd - - ----- Like cursor_up in micro mode
order_of_pins porder str Ze - - ----- Match software bits to print-head pins
parm_down_micro mcud str Zf - - ----- Like parm_down_cursor in micro mode
parm_left_micro mcub str Zg - - ----- Like parm_left_cursor in micro mode
parm_right_micro mcuf str Zh - - ----- Like parm_right_cursor in micro mode
parm_up_micro mcuu str Zi - - ----- Like parm_up_cursor in micro mode
select_char_set scs str Zj - - ----- Select character set, #1
set_bottom_margin smgb str Zk - - ----- Set bottom margin at current line
set_bottom_margin_parm smgbp str Zl - - ----- Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom
set_left_margin_parm smglp str Zm - - ----- Set left (right) margin at column #1
set_right_margin_parm smgrp str Zn - - ----- Set right margin at column #1
set_top_margin smgt str Zo - - ----- Set top margin at current line
set_top_margin_parm smgtp str Zp - - ----- Set top (bottom) margin at row #1
start_bit_image sbim str Zq - - ----- Start printing bit image graphics
start_char_set_def scsd str Zr - - ----- Start character set definition #1, with #2 characters in the set
stop_bit_image rbim str Zs - - ----- Stop printing bit image graphics
stop_char_set_def rcsd str Zt - - ----- End definition of character set #1
subscript_characters subcs str Zu - - ----- List of subscriptable characters
superscript_characters supcs str Zv - - ----- List of superscriptable characters
these_cause_cr docr str Zw - - ----- Printing any of these characters causes CR
zero_motion zerom str Zx - - ----- No motion for subsequent character
#%.TE
#%.ad
#%
#%The following string capabilities are present in the SVr4.0 term structure,
#%but were originally not documented in the man page.
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw18.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
char_set_names csnm str Zy - - ----- Produce #1'th item from list of character set names
key_mouse kmous str Km KEY_MOUSE 0631 ----- Mouse event has occurred
mouse_info minfo str Mi - - ----- Mouse status information
req_mouse_pos reqmp str RQ - - ----- Request mouse position
get_mouse getm str Gm - - ----- Curses should get button events, parameter #1 not documented.
set_a_foreground setaf str AF - - ----- Set foreground color to #1, using ANSI escape
set_a_background setab str AB - - ----- Set background color to #1, using ANSI escape
pkey_plab pfxl str xl - - ----- Program function key #1 to type string #2 and show string #3
device_type devt str dv - - ----- Indicate language/codeset support
code_set_init csin str ci - - ----- Init sequence for multiple codesets
set0_des_seq s0ds str s0 - - ----- Shift to codeset 0 (EUC set 0, ASCII)
set1_des_seq s1ds str s1 - - ----- Shift to codeset 1
set2_des_seq s2ds str s2 - - ----- Shift to codeset 2
set3_des_seq s3ds str s3 - - ----- Shift to codeset 3
set_lr_margin smglr str ML - - ----- Set both left and right margins to #1, #2. (ML is not in BSD termcap).
set_tb_margin smgtb str MT - - ----- Sets both top and bottom margins to #1, #2
bit_image_repeat birep str Xy - - ----- Repeat bit image cell #1 #2 times
bit_image_newline binel str Zz - - ----- Move to next row of the bit image
bit_image_carriage_return bicr str Yv - - ----- Move to beginning of same row
color_names colornm str Yw - - ----- Give name for color #1
define_bit_image_region defbi str Yx - - ----- Define rectangular bit image region
end_bit_image_region endbi str Yy - - ----- End a bit-image region
set_color_band setcolor str Yz - - ----- Change to ribbon color #1
set_page_length slines str YZ - - ----- Set page length to #1 lines
#
# SVr4 added these capabilities for direct PC-clone support
#
display_pc_char dispc str S1 - - ----- Display PC character #1
enter_pc_charset_mode smpch str S2 - - ----- Enter PC character display mode
exit_pc_charset_mode rmpch str S3 - - ----- Exit PC character display mode
enter_scancode_mode smsc str S4 - - ----- Enter PC scancode mode
exit_scancode_mode rmsc str S5 - - ----- Exit PC scancode mode
pc_term_options pctrm str S6 - - ----- PC terminal options
scancode_escape scesc str S7 - - ----- Escape for scancode emulation
alt_scancode_esc scesa str S8 - - ----- Alternate escape for scancode emulation
#%.TE
#%.ad
#%
#%.in .8i
#%The XSI Curses standard added these hardcopy capabilities.
#%They were used in some post-4.1 versions of System V curses,
#%e.g., Solaris 2.5 and IRIX 6.x.
#%Except for \fBYI\fP, the \fBncurses\fR termcap names for them are invented.
#%According to the XSI Curses standard, they have no termcap names.
#%If your compiled terminfo entries use these,
#%they may not be binary-compatible with System V terminfo
#%entries after SVr4.1; beware!
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
enter_horizontal_hl_mode ehhlm str Xh - - ----- Enter horizontal highlight mode
enter_left_hl_mode elhlm str Xl - - ----- Enter left highlight mode
enter_low_hl_mode elohlm str Xo - - ----- Enter low highlight mode
enter_right_hl_mode erhlm str Xr - - ----- Enter right highlight mode
enter_top_hl_mode ethlm str Xt - - ----- Enter top highlight mode
enter_vertical_hl_mode evhlm str Xv - - ----- Enter vertical highlight mode
set_a_attributes sgr1 str sA - - ----- Define second set of video attributes #1-#6
set_pglen_inch slength str YI - - ----- Set page length to #1 hundredth of an inch (some implementations use sL for termcap).
#%.TE
#%.ad
#
# The magic token below tells the tic compiler-generator code that all the caps
# past it should be ignored (not written out) when dumping terminfo objects. It
# also tells the man page table generator not to pass through following lines
# This means we can have obsolete capabilities and pseudo-capabilities that are
# recognized for termcap or terminfo compilation, but not output.
#
# %%-STOP-HERE-%%
#
# Don't move this casually! In fact, don't move it at all unless you're
# either doing it to add System V or XPG4 extensions, or have decided you
# don't care about SVr4 binary compatibility.
#
#############################################################################
#
# TERMCAP EXTENSION CAPABILITIES
#
# The capabilities below are either obsolete or extensions on certain systems.
# They are not used by SVR4 terminfo. Some are used by captoinfo to translate
# termcap sources; the rest are listed for completeness, and in case somebody
# cares about them enough to hack in code that will translate them into
# terminfo capabilities.
#
# The first part of the list is from Ross Ridge's `mytinfo' package
# (comp.sources.unix, volume 26); the variable names and terminfo names (as
# well as the termcap codes) match his list.
#
# This group of codes is not marked obsolete in 4.4BSD, but have no direct
# terminfo equivalents. The rs capability is specially translated to terminfo
# r2, and vice versa, if an entry does not already have an r2. Similarly,
# i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2).
# The ug capability is thrown away, but assumed to be whatever sg is if the
# latter is nonzero and we're dumping in termcap format.
#
termcap_init2 OTi2 str i2 - - YB--- secondary initialization string
termcap_reset OTrs str rs - - YB-G- terminal reset string
magic_cookie_glitch_ul OTug num ug - - YBCGE number of blanks left by ul
#
# Obsolete termcap capabilities. Some are used for termcap translation. The
# code uses the 'OT' prefix we put on obsolete capabilities to suppress
# printing them in terminfo source dumps of compiled entries.
#
backspaces_with_bs OTbs bool bs - - YBCGE uses ^H to move left
crt_no_scrolling OTns bool ns - - YBCG- crt cannot scroll
no_correctly_working_cr OTnc bool nc - - YBCG- no way to go to start of line
carriage_return_delay OTdC num dC - - YB-G- pad needed for CR
new_line_delay OTdN num dN - - YB-G- pad needed for LF
linefeed_if_not_lf OTnl str nl - - YBCGE use to move down
backspace_if_not_bs OTbc str bc - - YBCGE move left, if not ^H
#
# GNU termcap library extensions. The GNU termcap file distributed with
# Emacs no longer uses these, but MT showed up in pre-9.0 versions of the
# BSD termcap file. The name clash with terminfo MT is resolved by type
# info; MT is converted to km.
#
gnu_has_meta_key OTMT bool MT - - ----E has meta key
# gnu_tab_width OTtw num tw - - ----E tab width in spaces
#
# GNU termcap *does* include the following extended capability, Only the
# now-obsolete Ann Arbor terminals used it.
#
# gnu_change_scroll_region OTcS str cS - - ---GE alternate set scrolling region
#
# The following comments describe capnames so ancient that I believe no
# software uses them any longer. Some of these have to go because they
# clash with terminfo names in ways that cannot be resolved by type
# information.
#
# These mytinfo codes are not used in the 4.4BSD curses code. They are
# marked obsolete in the 4.4BSD manual pages.
#
# There is one conflict with terminfo; ma is in both. This conflict is
# resolved by type information.
#
# The `ko' capability is translated by special code. It should contain a
# comma-separated list of capabilities for which there are corresponding keys.
# The `kn' code is accepted but ignored.
#
# The `ma' capability was a 4.0BSD feature used by vi version 2.
# It consists of pairs of characters corresponding to kl, kr, ku, kd, and kh.
# Besides being obsolete, that interpretation conflicts with max_attributes.
#
# Here is a description of memory_lock_above and memory_unlock:
# "You can 'freeze' data on the screen by turning on Memory Lock in a line of
# text. All lines above the cursor's current line become locked in place on
# the screen. Then enter data normally. When the screen fills up, any
# further data entered forces the first line of unfrozen line text to scroll
# under the frozen data. Lines scrolled off the screen are inserted into
# memory immediately preceding the first frozen line." (from the HP 700/96
# User's manual). VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l.
#
# Applications that use terminfo are supposed to behave as though xr is
# always true.
#
linefeed_is_newline OTNL bool NL - - YB--- move down with \n
# even_parity OTEP bool EP - - -B--- terminal requires even parity
# odd_parity OTOP bool OP - - -B--- terminal requires odd parity
# half_duplex OTHD bool HD - - -B--- terminal is half-duplex
# lower_case_only OTLC bool LC - - -B--- terminal has only lower case
# upper_case_only OTUC bool UC - - -B--- terminal has only upper case
backspace_delay OTdB num dB - - YB-G- padding required for ^H
# form_feed_delay OTdF num dF - - -B-G- padding required for ^L
horizontal_tab_delay OTdT num dT - - YB-G- padding required for ^I
# vertical_tab_delay OTdV num dV - - -B--- padding required for ^V
number_of_function_keys OTkn num kn - - -B-G- count of function keys
other_non_function_keys OTko str ko - - -B-G- list of self-mapped keycaps
arrow_key_map OTma str ma - - YBC-- map motion-keys for vi version 2
# memory_lock_above OTml str ml - - -B--- lock visible screen memory above the current line
# memory_unlock OTmu str mu - - -B--- unlock visible screen memory above the current line
has_hardware_tabs OTpt bool pt - - YB--- has 8-char tabs invoked with ^I
return_does_clr_eol OTxr bool xr - - YB--- return clears the line
# tek_4025_insert_line OTxx bool xx - - -BC-- Tektronix 4025 insert-line glitch
#
# mytinfo described this as a termcap capability, but it's not listed in the
# 4.4BSD man pages, and not found in the 4.4BSD termcap file. The ncurses
# package, like System V, behaves as though it is always true.
#
# rind_only_at_top OTxq bool xq - - ----- reverse index only works from top line
#
# University of Waterloo termcap extensions (as described in mytinfo).
# The `xl' termcap file clashes with a terminfo name; this ambiguity cannot
# be resolved by a type check. The descriptions are guesses from what was
# in the mytinfo tables.
#
# key_interrupt_char OTki str ki - - ----- string set by interrupt key (?)
# key_kill_char OTkk str kk - - ----- string set by kill key (?)
# key_suspend_char OTkz str kz - - ----- string set by suspend key (?)
# initialization_messy OTxc bool xc - - ----- initialization leaves garbage on the screen (?)
# ind_at_bottom_does_cr OTxl bool xl - - ----- index does a carriage return
#
# Nonstandard capabilities unique to Ross Ridge's `mytinfo' package.
# SR clashes with a terminfo name; this ambiguity cannot be resolved by a type
# check.
#
# scroll_left OTsl1 str Sl - - ----- scroll screen leftward
# scroll_right OTsr1 str Sr - - ----- scroll screen rightward
# parm_scroll_left OTsl str SL - - ----- scroll screen leftward #1 characters
# parm_scroll_right OTsr str SR - - ----- scroll screen rightward #1 characters
#
# The mytinfo capabilities end here.
#
# XENIX extensions:
#
# Xenix defined its own set of forms-drawing capabilities:
#
# cap IBM ASCII description ACS ASCII
# --- ----------- -------------------- ------------- ------
# G1 191 \277 M-? single upper right ACS_URCORNER
# G2 218 \332 M-Z single upper left ACS_ULCORNER
# G3 192 \300 M-@ single lower left ACS_LLCORNER
# G4 217 \331 M-Y single lower right ACS_LRCORNER
# G5 187 \273 M-; double upper right
# G6 201 \311 M-I double upper left
# G7 200 \310 M-H double lower left
# G8 188 \274 M-< double lower right
# GC 197 \305 M-E single intersection ACS_PLUS _ _
# GD 194 \302 M-B single down-tick ACS_TTEE |
# GH 196 \304 M-D single horizontal line ACS_HLINE
# GL 180 \264 M-4 single left tick ACS_RTEE -|
# GR 195 \303 M-C single right tick ACS_LTEE |-
# GU 193 \301 M-A single up tick ACS_BTEE _|_
# GV 179 \263 M-3 single vertical line ACS_VLINE
# Gc 206 \316 M-N double intersection
# Gd 203 \313 M-K double down tick
# Gh 205 \315 M-M double horizontal line
# Gl 204 \204 M-L double left tick
# Gr 185 \271 M-9 double right tick
# Gu 202 \312 M-J double up tick
# Gv 186 \272 M-: double vertical line
#
# The compiler will translate the single-line caps and discard the others
# (via IGNORE aliases further down). We don't want to do normal pad
# translation on these, they're often single-character printable ASCII
# strings that happen to be numerics. There's awk code in parametrized.sh
# that detects the acs_ prefix and uses it to suppress pad translation.
# These terminfo names are invented.
#
acs_ulcorner OTG2 str G2 - - ----- single upper left
acs_llcorner OTG3 str G3 - - ----- single lower left
acs_urcorner OTG1 str G1 - - ----- single upper right
acs_lrcorner OTG4 str G4 - - ----- single lower right
acs_ltee OTGR str GR - - ----- tee pointing right
acs_rtee OTGL str GL - - ----- tee pointing left
acs_btee OTGU str GU - - ----- tee pointing up
acs_ttee OTGD str GD - - ----- tee pointing down
acs_hline OTGH str GH - - ----- single horizontal line
acs_vline OTGV str GV - - ----- single vertical line
acs_plus OTGC str GC - - ----- single intersection
#
#############################################################################
#
# TERMINFO EXTENSION CAPABILITIES
#
# (see Caps-ncurses for the complete set of comments)
#
memory_lock meml str ml - - ----K lock memory above cursor
memory_unlock memu str mu - - ----K unlock memory
box_chars_1 box1 str bx - - ----K box characters primary set
#
#############################################################################
diff --git a/contrib/ncurses/include/Caps.osf1r5 b/contrib/ncurses/include/Caps.osf1r5
index 94991837a968..8a2955486ee9 100644
--- a/contrib/ncurses/include/Caps.osf1r5
+++ b/contrib/ncurses/include/Caps.osf1r5
@@ -1,975 +1,979 @@
##############################################################################
# Copyright 2019,2020 Thomas E. Dickey #
# Copyright 2002-2015,2016 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas Dickey
#
-# $Id: Caps.osf1r5,v 1.13 2020/02/02 23:34:34 tom Exp $
+# $Id: Caps.osf1r5,v 1.14 2020/10/17 21:30:19 tom Exp $
#
# This is an adaptation of ncurses' termcap/terminfo capability table, which
# is designed to align with OSF/1 version 5 (Tru64) terminfo.
#
# This table is used to generate initializers for tables that drive tic,
# infocmp, and the library compilation code used to support the termcap
# compatibility hack. It is also used to generate the tabular portion of the
# terminfo(5) man page; lines beginning with `#%' are passed through to become
# the terminfo table.
#
# This file has three major sections; a standard-capabilities table, two
# extension-capability tables, and a section of aliases declarations.
# The first two have the same format, as follows:
#
# FILE FORMAT
#
# Column 1: terminfo variable name
# Column 2: terminfo capability name
# Column 3: capability type (boolean, numeric, or string)
# Column 4: termcap capability name
# Column 5: KEY_xxx name, if any, `-' otherwise
# Column 6: value for KEY_xxx name, if any, `-' otherwise
# Column 7: Lead with `Y' if capability should be emitted in termcap
# translations, `-' otherwise
# Column 8: capability description
#
# The codes following [Y-] in column 7 describe the versions of termcap which
# use the given capability. This information is not used by the curses library
# proper; rather, it's there to help the terminfo maintainer avoid emitting
# termcap entry translations that are more than 1023 bytes long (and tank a
# lot of old termcap-using programs). The codes read as follows:
# B = mentioned in the BSD man page for 4.4BSD curses
# C = used by the 4.4BSD curses library
# G = mentioned in the documentation for GNU termcap
# E = used by GNU Emacs
# K = remove this terminfo capability when translating to standard format
# The important codes are C and E. A cap with C or E should be preserved in
# translation if possible. The problem is that preserving all such caps may
# lead to some termcap translations being too long. The termcap maintainer
# has a bit of a juggling act to do...potential problem cases are marked with
# an asterisk (*).
#
# The aliases section has the following format:
#
# Column 1: either `capalias' or `infoalias'
# Column 2: name to be aliased
# Column 3: what name it should translate to. The name IGNORE means it
# should be discarded with a warning message.
# Column 4: name of the extension set (used for compiler warning messages)
# Column 5: capability description (usually an associated terminfo variable)
#
# HANDLING TERMCAP AND TERMINFO EXTENSIONS
#
# There are basically five different ways to handle termcap and terminfo
# extensions:
#
# 1. Don't list the capname here, or list it but comment it out (the latter
# is preferable; someone might want to handle it in the future). If you do
# this, the capability will be treated as unknown and raise a warning from
# the compiler.
#
# 2. Alias it. This is appropriate if the capability has the same meaning
# as an already-supported one. The compiler will handle aliasing, emitting
# an appropriate informational message whenever an alias fires.
#
# 3. List it in the standard table. You almost certainly do *not* want
# to do this -- the capabilities in that one, and their order, have been
# carefully chosen to be SVr4-binary-compatible when they're written out
# as a terminfo object, and breaking this would be bad. It's up to the ncurses
# library what to do with the terminfo data after it's read in.
#
# 4. List it in the aliases table with an IGNORE target field. If you
# do this, the capability will be ignored on input (though the user will
# get a warning message about it).
#
# 5. List it in the extensions table. If you do this, the compiler will
# silently accept the capability, but the curses library proper will never
# see it (because it won't be written out as part of the terminfo object
# format). It's up to you what you have the compiler do with it.
#
# There are two opposite reasons to choose option 5. One is when you want
# to eat the capability silently and discard it when doing translations
# to terminfo with tic -I. Some very old obsolete BSD caps like :kn: are
# in this class. Nothing will ever use them again.
#
# More usually, you want the compiler to try to deduce something from the
# capability value that it can use to translate it into your output format.
# You'll need to write custom code, probably in postprocess_termcap() or
# postprocess_terminfo(), to handle the translation.
#
# CONTROLLING ENTRY LENGTH
#
# Notes on specific elisions made to fit translations within 1023 bytes:
#
# Machines with IBM PC-like keyboards want to be able to define the following
# keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap-
# only environments for End or Home-Down), key_dc, and key_ic. This is also
# the set of keys the `joe' editor will be upset if it can't see. So don't
# trim those out of the set to be translated to termcap, or various users of
# the termcap file will become irate.
#
# It might look tempting to leave those long init strings out of translations.
# We can't do it (yet); 4.4BSD tput and tset use them.
#
# We retain the sgr capability in translation in spite of the fact that neither
# 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are
# hard to understand without it, and (b) the entries in which it is long tend
# to be older types that don't use up a lot of string space on function keys.
# The tic(1) translation code will complain and elide it if it makes a critical
# difference (there is special code in tic to recognize this situation).
#
# Yes, BSD tset(1) uses hpa. We elide hpa/vpa anyway because the motion
# optimizer in BSD curses didn't use them. This omission seems to be the
# single most effective one, it shortened the resolved length of all thirteen
# problem entries in the 9.9.0 version of the terminfo master below critical.
#
# It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap
# translations go back over critical if we do this. As 4.4BSD curses fades
# into history and GNU termcap's application base shrinks towards being GNU
# Emacs only, we'll probably elide out some BSD-only capabilities in order
# to buy space for non-essentials Emacs is still using. Capabilities high
# on that hit list: rc, sc, uc.
#
#############################################################################
#
# STANDARD CAPABILITIES
#
#%The following is a complete table of the capabilities included in a
#%terminfo description block and available to terminfo-using code. In each
#%line of the table,
#%
#%The \fBvariable\fR is the name by which the programmer (at the terminfo level)
#%accesses the capability.
#%
#%The \fBcapname\fR is the short name used in the text of the database,
#%and is used by a person updating the database.
#%Whenever possible, capnames are chosen to be the same as or similar to
#%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses
#%identical or very similar names). Semantics are also intended to match
#%those of the specification.
#%
#%The termcap code is the old
#%.B termcap
#%capability name (some capabilities are new, and have names which termcap
#%did not originate).
#%.P
#%Capability names have no hard length limit, but an informal limit of 5
#%characters has been adopted to keep them short and to allow the tabs in
#%the source file
#%.B Caps
#%to line up nicely.
#%
#%Finally, the description field attempts to convey the semantics of the
#%capability. You may find some codes in the description field:
#%.TP
#%(P)
#%indicates that padding may be specified
#%.TP
#%#[1-9]
-#%in the description field indicates that the string is passed through tparm with
-#%parms as given (#\fIi\fP).
+#%in the description field indicates that the string is passed
+#%through \fBtparm\fP(3X) with parameters as given (#\fIi\fP).
+#%.IP
+#%If no parameters are listed in the description,
+#%passing the string through \fBtparm\fP(3X) may give unexpected results,
+#%e.g., if it contains percent (%%) signs.
#%.TP
#%(P*)
#%indicates that padding may vary in proportion to the number of
#%lines affected
#%.TP
#%(#\d\fIi\fP\u)
#%indicates the \fIi\fP\uth\d parameter.
#%
#%.PP
#% These are the boolean capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBBooleans name Code\fR
auto_left_margin bw bool bw - - YB-G- cub1 wraps from column 0 to last column
auto_right_margin am bool am - - YBCGE terminal has automatic margins
no_esc_ctlc xsb bool xb - - YBCG- beehive (f1=escape, f2=ctrl C)
ceol_standout_glitch xhp bool xs - - YBCGE standout not erased by overwriting (hp)
eat_newline_glitch xenl bool xn - - YBCGE newline ignored after 80 cols (concept)
erase_overstrike eo bool eo - - YBCG- can erase overstrikes with a blank
generic_type gn bool gn - - YB-G- generic line type
hard_copy hc bool hc - - YBCG- hardcopy terminal
has_meta_key km bool km - - YB-GE Has a meta key (i.e., sets 8th-bit)
has_status_line hs bool hs - - YB-G- has extra status line
insert_null_glitch in bool in - - YBCGE insert mode distinguishes nulls
memory_above da bool da - - YBCG- display may be retained above the screen
memory_below db bool db - - YB-GE display may be retained below the screen
move_insert_mode mir bool mi - - YBCGE safe to move while in insert mode
move_standout_mode msgr bool ms - - YBCGE safe to move while in standout mode
over_strike os bool os - - YBCG- terminal can overstrike
status_line_esc_ok eslok bool es - - YB-G- escape can be used on the status line
dest_tabs_magic_smso xt bool xt - - YBCGE tabs destructive, magic so char (t1061)
tilde_glitch hz bool hz - - YB-GE cannot print ~'s (Hazeltine)
transparent_underline ul bool ul - - YBCGE underline character overstrikes
xon_xoff xon bool xo - - YB--- terminal uses xon/xoff handshaking
back_color_erase bce bool ut - - ----- screen erased with background color
can_change ccc bool cc - - ----- terminal can re-define existing colors
col_addr_glitch xhpa bool YA - - ----- only positive motion for hpa/mhpa caps
cpi_changes_res cpix bool YF - - ----- changing character pitch changes resolution
cr_cancels_micro_mode crxm bool YB - - ----- using cr turns off micro mode
hard_cursor chts bool HC - - ----- cursor is hard to see
has_print_wheel daisy bool YC - - ----- printer needs operator to change character set
hue_lightness_saturation hls bool hl - - ----- terminal uses only HLS color notation (Tektronix)
lpi_changes_res lpix bool YG - - ----- changing line pitch changes resolution
needs_xon_xoff nxon bool nx - - ----- padding will not work, xon/xoff required
non_dest_scroll_region ndscr bool ND - - ----- scrolling region is non-destructive
non_rev_rmcup nrrmc bool NR - - ----- smcup does not reverse rmcup
no_pad_char npc bool NP - - ----- pad character does not exist
prtr_silent mc5i bool 5i - - ----- printer will not echo on screen
row_addr_glitch xvpa bool YD - - ----- only positive motion for vpa/mvpa caps
semi_auto_right_margin sam bool YE - - ----- printing in last column causes cr
#%.TE
#%.ad
#%
#%These are the numeric capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBNumeric name Code\fR
columns cols num co - - YBCGE number of columns in a line
init_tabs it num it - - YB-G- tabs initially every # spaces
lines lines num li - - YBCGE number of lines on screen or page
lines_of_memory lm num lm - - YB-G- lines of memory if > line. 0 means varies
magic_cookie_glitch xmc num sg - - YBCGE number of blank characters left by smso or rmso
padding_baud_rate pb num pb - - YB-GE lowest baud rate where padding needed
virtual_terminal vt num vt - - YB--- virtual terminal number (CB/unix)
width_status_line wsl num ws - - YB-G- number of columns in status line
bit_image_entwining bitwin num Yo - - ----- number of passes for each bit-image row
bit_image_type bitype num Yp - - ----- type of bit-image device
buffer_capacity bufsz num Ya - - ----- numbers of bytes buffered before printing
buttons btns num BT - - ----- number of buttons on mouse
dot_vert_spacing spinv num Yb - - ----- spacing of pins vertically in pins per inch
dot_horz_spacing spinh num Yc - - ----- spacing of dots horizontally in dots per inch
label_height lh num lh - - ----- rows in each label
label_width lw num lw - - ----- columns in each label
max_attributes ma num ma - - YBC-- maximum combined attributes terminal can handle
max_colors colors num Co - - ----- maximum number of colors on screen
max_micro_address maddr num Yd - - ----- maximum value in micro_..._address
max_micro_jump mjump num Ye - - ----- maximum value in parm_..._micro
max_pairs pairs num pa - - ----- maximum number of color-pairs on the screen
maximum_windows wnum num MW - - ----- maximum number of definable windows
micro_col_size mcs num Yf - - ----- character step size when in micro mode
micro_line_size mls num Yg - - ----- line step size when in micro mode
no_color_video ncv num NC - - ----- video attributes that can not be used with colors
number_of_pins npins num Yh - - ----- numbers of pins in print-head
num_labels nlab num Nl - - ----- number of labels on screen
output_res_char orc num Yi - - ----- horizontal resolution in units per line
output_res_line orl num Yj - - ----- vertical resolution in units per line
output_res_horz_inch orhi num Yk - - ----- horizontal resolution in units per inch
output_res_vert_inch orvi num Yl - - ----- vertical resolution in units per inch
print_rate cps num Ym - - ----- print rate in characters per second
wide_char_size widcs num Yn - - ----- character step size when in double wide mode
#%.TE
#%.ad
#%
#%These are the string capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
back_tab cbt str bt - - YBCGE back tab (P)
bell bel str bl - - YB-GE audible signal (bell) (P)
carriage_return cr str cr - - YBCGE carriage return (P*) (P*)
change_scroll_region csr str cs - - YBCGE change region to line #1 to line #2 (P)
clear_all_tabs tbc str ct - - YB-G- clear all tab stops (P)
clear_screen clear str cl - - YBCGE clear screen and home cursor (P*)
clr_eol el str ce - - YBCGE clear to end of line (P)
clr_eos ed str cd - - YBCGE clear to end of screen (P*)
column_address hpa str ch - - -B-GE* horizontal position #1, absolute (P)
command_character cmdch str CC - - YB-G- terminal settable cmd character in prototype !?
cursor_address cup str cm - - YBCGE move to row #1 columns #2
cursor_down cud1 str do - - YBCGE down one line
cursor_home home str ho - - YBCGE home cursor (if no cup)
cursor_invisible civis str vi - - YB-G- make cursor invisible
cursor_left cub1 str le - - YBCGE move left one space
cursor_mem_address mrcup str CM - - YB-G- memory relative cursor addressing, move to row #1 columns #2
cursor_normal cnorm str ve - - YBCGE make cursor appear normal (undo civis/cvvis)
cursor_right cuf1 str nd - - YBCGE non-destructive space (move right one space)
cursor_to_ll ll str ll - - YBCGE last line, first column (if no cup)
cursor_up cuu1 str up - - YBCGE up one line
cursor_visible cvvis str vs - - YBCGE make cursor very visible
delete_character dch1 str dc - - YBCGE delete character (P*)
delete_line dl1 str dl - - YBCGE delete line (P*)
dis_status_line dsl str ds - - YB-G- disable status line
down_half_line hd str hd - - YB-G- half a line down
enter_alt_charset_mode smacs str as - - YB-G- start alternate character set (P)
enter_blink_mode blink str mb - - YB-G- turn on blinking
enter_bold_mode bold str md - - YB-G- turn on bold (extra bright) mode
enter_ca_mode smcup str ti - - YBCGE string to start programs using cup
enter_delete_mode smdc str dm - - YBCGE enter delete mode
enter_dim_mode dim str mh - - YB-G- turn on half-bright mode
enter_insert_mode smir str im - - YBCGE enter insert mode
enter_secure_mode invis str mk - - -B-G-* turn on blank mode (characters invisible)
enter_protected_mode prot str mp - - -B-G-* turn on protected mode
enter_reverse_mode rev str mr - - YB-G- turn on reverse video mode
enter_standout_mode smso str so - - YBCGE begin standout mode
enter_underline_mode smul str us - - YBCGE begin underline mode
erase_chars ech str ec - - YB-G- erase #1 characters (P)
exit_alt_charset_mode rmacs str ae - - YB-G- end alternate character set (P)
exit_attribute_mode sgr0 str me - - YB-GE turn off all attributes
exit_ca_mode rmcup str te - - YBCGE strings to end programs using cup
exit_delete_mode rmdc str ed - - YBCGE end delete mode
exit_insert_mode rmir str ei - - YBCGE exit insert mode
exit_standout_mode rmso str se - - YBCGE exit standout mode
exit_underline_mode rmul str ue - - YBCGE exit underline mode
flash_screen flash str vb - - YBCGE visible bell (may not move cursor)
form_feed ff str ff - - YB-G- hardcopy terminal page eject (P*)
from_status_line fsl str fs - - YB-G- return from status line
init_1string is1 str i1 - - YB-G- initialization string
init_2string is2 str is - - YB-G- initialization string
init_3string is3 str i3 - - YB-G- initialization string
init_file if str if - - YB-G- name of initialization file
insert_character ich1 str ic - - YBCGE insert character (P)
insert_line il1 str al - - YBCGE insert line (P*)
insert_padding ip str ip - - YBCGE insert padding after inserted character
key_backspace kbs str kb KEY_BACKSPACE 0407 YB-G- backspace key
key_catab ktbc str ka KEY_CATAB 0526 -B-G-* clear-all-tabs key
key_clear kclr str kC KEY_CLEAR 0515 -B-G-* clear-screen or erase key
key_ctab kctab str kt KEY_CTAB 0525 -B-G-* clear-tab key
key_dc kdch1 str kD KEY_DC 0512 YB-G- delete-character key
key_dl kdl1 str kL KEY_DL 0510 -B-G-* delete-line key
key_down kcud1 str kd KEY_DOWN 0402 YBCGE down-arrow key
key_eic krmir str kM KEY_EIC 0514 -B-G-* sent by rmir or smir in insert mode
key_eol kel str kE KEY_EOL 0517 -B-G-* clear-to-end-of-line key
key_eos ked str kS KEY_EOS 0516 -B-G-* clear-to-end-of-screen key
key_f0 kf0 str k0 KEY_F(0) 0410 YBCGE F0 function key
key_f1 kf1 str k1 KEY_F(1) - YBCGE F1 function key
key_f10 kf10 str k; KEY_F(10) - ----E F10 function key
key_f2 kf2 str k2 KEY_F(2) - YBCGE F2 function key
key_f3 kf3 str k3 KEY_F(3) - YBCGE F3 function key
key_f4 kf4 str k4 KEY_F(4) - YBCGE F4 function key
key_f5 kf5 str k5 KEY_F(5) - YBCGE F5 function key
key_f6 kf6 str k6 KEY_F(6) - YBCGE F6 function key
key_f7 kf7 str k7 KEY_F(7) - YBCGE F7 function key
key_f8 kf8 str k8 KEY_F(8) - YBCGE F8 function key
key_f9 kf9 str k9 KEY_F(9) - YBCGE F9 function key
key_home khome str kh KEY_HOME 0406 YBCGE home key
key_ic kich1 str kI KEY_IC 0513 YB-GE insert-character key
key_il kil1 str kA KEY_IL 0511 -B-G-* insert-line key
key_left kcub1 str kl KEY_LEFT 0404 YBCGE left-arrow key
key_ll kll str kH KEY_LL 0533 YB-G- lower-left key (home down)
key_npage knp str kN KEY_NPAGE 0522 YB-GE next-page key
key_ppage kpp str kP KEY_PPAGE 0523 YB-GE previous-page key
key_right kcuf1 str kr KEY_RIGHT 0405 YBCGE right-arrow key
key_sf kind str kF KEY_SF 0520 -B-G-* scroll-forward key
key_sr kri str kR KEY_SR 0521 -B-G-* scroll-backward key
key_stab khts str kT KEY_STAB 0524 -B-G-* set-tab key
key_up kcuu1 str ku KEY_UP 0403 YBCGE up-arrow key
keypad_local rmkx str ke - - YBCGE leave 'keyboard_transmit' mode
keypad_xmit smkx str ks - - YBCGE enter 'keyboard_transmit' mode
lab_f0 lf0 str l0 - - -B-G-* label on function key f0 if not f0
lab_f1 lf1 str l1 - - -B-G-* label on function key f1 if not f1
lab_f10 lf10 str la - - ----- label on function key f10 if not f10
lab_f2 lf2 str l2 - - -B-G-* label on function key f2 if not f2
lab_f3 lf3 str l3 - - -B-G-* label on function key f3 if not f3
lab_f4 lf4 str l4 - - -B-G-* label on function key f4 if not f4
lab_f5 lf5 str l5 - - -B-G-* label on function key f5 if not f5
lab_f6 lf6 str l6 - - -B-G-* label on function key f6 if not f6
lab_f7 lf7 str l7 - - -B-G-* label on function key f7 if not f7
lab_f8 lf8 str l8 - - -B-G-* label on function key f8 if not f8
lab_f9 lf9 str l9 - - -B-G-* label on function key f9 if not f9
meta_off rmm str mo - - YB-G-* turn off meta mode
meta_on smm str mm - - YB-G-* turn on meta mode (8th-bit on)
newline nel str nw - - YB-G-* newline (behave like cr followed by lf)
pad_char pad str pc - - YBCGE padding char (instead of null)
parm_dch dch str DC - - YB-GE delete #1 characters (P*)
parm_delete_line dl str DL - - YBCGE delete #1 lines (P*)
parm_down_cursor cud str DO - - YBCGE down #1 lines (P*)
parm_ich ich str IC - - YB-GE insert #1 characters (P*)
parm_index indn str SF - - YBCG- scroll forward #1 lines (P)
parm_insert_line il str AL - - YBCGE insert #1 lines (P*)
parm_left_cursor cub str LE - - YBCGE move #1 characters to the left (P)
parm_right_cursor cuf str RI - - YBCGE move #1 characters to the right (P*)
parm_rindex rin str SR - - YBCG- scroll back #1 lines (P)
parm_up_cursor cuu str UP - - YBCGE up #1 lines (P*)
pkey_key pfkey str pk - - -B--- program function key #1 to type string #2
pkey_local pfloc str pl - - -B--- program function key #1 to execute string #2
pkey_xmit pfx str px - - -B--- program function key #1 to transmit string #2
print_screen mc0 str ps - - -B-G-* print contents of screen
prtr_off mc4 str pf - - -B-G-* turn off printer
prtr_on mc5 str po - - -B-G-* turn on printer
repeat_char rep str rp - - YB-GE repeat char #1 #2 times (P*)
reset_1string rs1 str r1 - - -B--- reset string
reset_2string rs2 str r2 - - -B--- reset string
reset_3string rs3 str r3 - - -B--- reset string
reset_file rf str rf - - -B--- name of reset file
restore_cursor rc str rc - - YBCG- restore cursor to position of last save_cursor
row_address vpa str cv - - -B-GE* vertical position #1 absolute (P)
save_cursor sc str sc - - YBCG- save current cursor position (P)
scroll_forward ind str sf - - YBCGE scroll text up (P)
scroll_reverse ri str sr - - YBCGE scroll text down (P)
set_attributes sgr str sa - - YB-G- define video attributes #1-#9 (PG9)
set_tab hts str st - - YB-G- set a tab in every row, current columns
set_window wind str wi - - -B-GE current window is lines #1-#2 cols #3-#4
tab ht str ta - - YBCGE tab to next 8-space hardware tab stop
to_status_line tsl str ts - - YB-G- move to status line, column #1
underline_char uc str uc - - YBCG- underline char and move past it
up_half_line hu str hu - - YB-G- half a line up
init_prog iprog str iP - - -B--- path name of program for initialization
key_a1 ka1 str K1 KEY_A1 0534 YB-GE upper left of keypad
key_a3 ka3 str K3 KEY_A3 0535 YB-GE upper right of keypad
key_b2 kb2 str K2 KEY_B2 0536 YB-GE center of keypad
key_c1 kc1 str K4 KEY_C1 0537 YB-GE lower left of keypad
key_c3 kc3 str K5 KEY_C3 0540 YB-GE lower right of keypad
prtr_non mc5p str pO - - -B-G-* turn on printer for #1 bytes
#
# SVr1 capabilities stop here. IBM's version of terminfo is the same as
# SVr4 up to this point, but has a different set afterwards.
#
# OSF1 differences start here, based on IBM version:
#
box_chars_1 box1 str bx - - ----K box characters primary set
box_chars_2 box2 str by - - ----K box characters secondary set
box_attr_1 batt1 str Bx - - ----K attributes for box1
box_attr_2 batt2 str By - - ----K attributes for box2
color_bg_0 colb0 str d0 - - ----K background color 0
color_bg_1 colb1 str d1 - - ----K background color 1
color_bg_2 colb2 str d2 - - ----K background color 2
color_bg_3 colb3 str d3 - - ----K background color 3
color_bg_4 colb4 str d4 - - ----K background color 4
color_bg_5 colb5 str d5 - - ----K background color 5
color_bg_6 colb6 str d6 - - ----K background color 6
color_bg_7 colb7 str d7 - - ----K background color 7
color_fg_0 colf0 str c0 - - ----K foreground color 0
color_fg_1 colf1 str c1 - - ----K foreground color 1
color_fg_2 colf2 str c2 - - ----K foreground color 2
color_fg_3 colf3 str c3 - - ----K foreground color 3
color_fg_4 colf4 str c4 - - ----K foreground color 4
color_fg_5 colf5 str c5 - - ----K foreground color 5
color_fg_6 colf6 str c6 - - ----K foreground color 6
color_fg_7 colf7 str c7 - - ----K foreground color 7
font_0 font0 str f0 - - ----- select font 0
font_1 font1 str f1 - - ----- select font 1
font_2 font2 str f2 - - ----- select font 2
font_3 font3 str f3 - - ----- select font 3
font_4 font4 str f4 - - ----K select font 4
font_5 font5 str f5 - - ----K select font 5
font_6 font6 str f6 - - ----K select font 6
font_7 font7 str f7 - - ----K select font 7
key_back_tab kbtab str k0 - - ----- backtab key
key_do kdo str ki - - ----K do request key
key_command kcmd str kc KEY_COMMAND 0545 ----- command key
key_command_pane kcpn str kW - - ----K command-pane key
key_end kend str @7 KEY_END 0550 ----- end key
key_help khlp str %1 KEY_HELP 0553 ----- help key
key_newline knl str nl - - ----K newline key
key_next_pane knpn str kv - - ----K next-pane key
key_prev_cmd kppn str kp - - ----K previous-command key
key_prev_pane kppn str kV - - ----K previous-pane key
key_quit kquit str kQ - - ----K quit key
key_select kslt str *6 KEY_SELECT 0601 ----- select key
key_scroll_left kscl str kz - - ----K scroll left
key_scroll_right kscr str kZ - - ----K scroll right
key_tab ktab str ko - - ----K tab key
key_smap_in1 kmpf1 str Kv - - ----K special mapped key 1 input
key_smap_out1 kmpt1 str KV - - ----K special mapped key 1 output
key_smap_in2 kmpf2 str Kw - - ----K special mapped key 2 input
key_smap_out2 kmpt2 str KW - - ----K special mapped key 2 output
key_smap_in3 kmpf3 str Kx - - ----K special mapped key 3 input
key_smap_out3 kmpt3 str KX - - ----K special mapped key 3 output
key_smap_in4 kmpf4 str Ky - - ----K special mapped key 4 input
key_smap_out4 kmpt4 str KY - - ----K special mapped key 4 output
key_smap_in5 kmpf5 str Kz - - ----K special mapped key 5 input
key_smap_out5 kmpt5 str KZ - - ----K special mapped key 5 output
appl_defined_str apstr str za - - ----K application-defined string
# The key_smap_in[6789] and key_smap_out[6789] capabilities are described in
# the Tru64 manual pages.
key_smap_in6 kmpf6 str Kr - - ----K special mapped key 6 input
key_smap_out6 kmpt6 str KR - - ----K special mapped key 6 output
key_smap_in7 kmpf7 str Ks - - ----K special mapped key 7 input
key_smap_out7 kmpt7 str KS - - ----K special mapped key 7 output
key_smap_in8 kmpf8 str Kt - - ----K special mapped key 8 input
key_smap_out8 kmpt8 str KT - - ----K special mapped key 8 output
key_smap_in9 kmpf9 str Ku - - ----K special mapped key 9 input
key_smap_out9 kmpt9 str KU - - ----K special mapped key 9 output
key_sf1 ksf1 str S1 - - ----K special function key 1
key_sf2 ksf2 str S2 - - ----K special function key 2
key_sf3 ksf3 str S3 - - ----K special function key 3
key_sf4 ksf4 str S4 - - ----K special function key 4
key_sf5 ksf5 str S5 - - ----K special function key 5
key_sf6 ksf6 str S6 - - ----K special function key 6
key_sf7 ksf7 str S7 - - ----K special function key 7
key_sf8 ksf8 str S8 - - ----K special function key 8
key_sf9 ksf9 str S9 - - ----K special function key 9
key_sf10 ksf10 str SA - - ----K special function key 10
#
key_f11 kf11 str F1 KEY_F(11) - ----E F11 function key
key_f12 kf12 str F2 KEY_F(12) - ----E F12 function key
key_f13 kf13 str F3 KEY_F(13) - ----E F13 function key
key_f14 kf14 str F4 KEY_F(14) - ----E F14 function key
key_f15 kf15 str F5 KEY_F(15) - ----E F15 function key
key_f16 kf16 str F6 KEY_F(16) - ----E F16 function key
key_f17 kf17 str F7 KEY_F(17) - ----E F17 function key
key_f18 kf18 str F8 KEY_F(18) - ----E F18 function key
key_f19 kf19 str F9 KEY_F(19) - ----E F19 function key
key_f20 kf20 str FA KEY_F(20) - ----E F20 function key
key_f21 kf21 str FB KEY_F(21) - ----E F21 function key
key_f22 kf22 str FC KEY_F(22) - ----E F22 function key
key_f23 kf23 str FD KEY_F(23) - ----E F23 function key
key_f24 kf24 str FE KEY_F(24) - ----E F24 function key
key_f25 kf25 str FF KEY_F(25) - ----E F25 function key
key_f26 kf26 str FG KEY_F(26) - ----E F26 function key
key_f27 kf27 str FH KEY_F(27) - ----E F27 function key
key_f28 kf28 str FI KEY_F(28) - ----E F28 function key
key_f29 kf29 str FJ KEY_F(29) - ----E F29 function key
key_f30 kf30 str FK KEY_F(30) - ----E F30 function key
key_f31 kf31 str FL KEY_F(31) - ----E F31 function key
key_f32 kf32 str FM KEY_F(32) - ----E F32 function key
key_f33 kf33 str FN KEY_F(33) - ----E F33 function key
key_f34 kf34 str FO KEY_F(34) - ----E F34 function key
key_f35 kf35 str FP KEY_F(35) - ----E F35 function key
key_f36 kf36 str FQ KEY_F(36) - ----E F36 function key
key_action kact str kJ KEY_ACTION 0541 ----K sent by action key
acs_chars acsc str ac - - ----- graphics charset pairs, based on vt100
alt_scancode_esc scesa str S8 - - ----- Alternate escape for scancode emulation
bit_image_repeat birep str Xy - - ----- Repeat bit image cell #1 #2 times
bit_image_newline binel str Zz - - ----- Move to next row of the bit image
bit_image_carriage_return bicr str Yv - - ----- Move to beginning of same row
change_char_pitch cpi str ZA - - ----- Change number of characters per inch to #1
change_line_pitch lpi str ZB - - ----- Change number of lines per inch to #1
change_res_horz chr str ZC - - ----- Change horizontal resolution to #1
change_res_vert cvr str ZD - - ----- Change vertical resolution to #1
char_padding rmp str rP - - ----- like ip but when in insert mode
char_set_names csnm str Zy - - ----- Produce #1'th item from list of character set names
clear_margins mgc str MC - - ----- clear right and left soft margins
clr_bol el1 str cb - - ----- Clear to beginning of line
code_set_init csin str ci - - ----- Init sequence for multiple codesets
color_names colornm str Yw - - ----- Give name for color #1
create_window cwin str CW - - ----- define a window #1 from #2,#3 to #4,#5
define_bit_image_region defbi str Yx - - ----- Define rectangular bit image region
define_char defc str ZE - - ----- Define a character #1, #2 dots wide, descender #3
device_type devt str dv - - ----- Indicate language/codeset support
dial_phone dial str DI - - ----- dial number #1
display_clock dclk str DK - - ----- display clock
display_pc_char dispc str S1 - - ----- Display PC character #1
ena_acs enacs str eA - - ----- enable alternate char set
end_bit_image_region endbi str Yy - - ----- End a bit-image region
enter_am_mode smam str SA - - ----- turn on automatic margins
enter_doublewide_mode swidm str ZF - - ----- Enter double-wide mode
enter_draft_quality sdrfq str ZG - - ----- Enter draft-quality mode
enter_italics_mode sitm str ZH - - ----- Enter italic mode
enter_leftward_mode slm str ZI - - ----- Start leftward carriage motion
enter_micro_mode smicm str ZJ - - ----- Start micro-motion mode
enter_near_letter_quality snlq str ZK - - ----- Enter NLQ mode
enter_normal_quality snrmq str ZL - - ----- Enter normal-quality mode
enter_pc_charset_mode smpch str S2 - - ----- Enter PC character display mode
enter_scancode_mode smsc str S4 - - ----- Enter PC scancode mode
enter_shadow_mode sshm str ZM - - ----- Enter shadow-print mode
enter_subscript_mode ssubm str ZN - - ----- Enter subscript mode
enter_superscript_mode ssupm str ZO - - ----- Enter superscript mode
enter_upward_mode sum str ZP - - ----- Start upward carriage motion
enter_xon_mode smxon str SX - - ----- turn on xon/xoff handshaking
exit_am_mode rmam str RA - - ----- turn off automatic margins
exit_doublewide_mode rwidm str ZQ - - ----- End double-wide mode
exit_italics_mode ritm str ZR - - ----- End italic mode
exit_leftward_mode rlm str ZS - - ----- End left-motion mode
exit_micro_mode rmicm str ZT - - ----- End micro-motion mode
exit_pc_charset_mode rmpch str S3 - - ----- Exit PC character display mode
exit_scancode_mode rmsc str S5 - - ----- Exit PC scancode mode
exit_shadow_mode rshm str ZU - - ----- End shadow-print mode
exit_subscript_mode rsubm str ZV - - ----- End subscript mode
exit_superscript_mode rsupm str ZW - - ----- End superscript mode
exit_upward_mode rum str ZX - - ----- End reverse character motion
exit_xon_mode rmxon str RX - - ----- turn off xon/xoff handshaking
fixed_pause pause str PA - - ----- pause for 2-3 seconds
flash_hook hook str fh - - ----- flash switch hook
get_mouse getm str Gm - - ----- Curses should get button events, parameter #1 not documented.
goto_window wingo str WG - - ----- go to window #1
hangup hup str HU - - ----- hang-up phone
initialize_color initc str Ic - - ----- initialize color #1 to (#2,#3,#4)
initialize_pair initp str Ip - - ----- Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)
key_beg kbeg str @1 KEY_BEG 0542 ----- begin key
key_btab kcbt str kB KEY_BTAB 0632 ----- back-tab key
key_cancel kcan str @2 KEY_CANCEL 0543 ----- cancel key
key_close kclo str @3 KEY_CLOSE 0544 ----- close key
key_copy kcpy str @5 KEY_COPY 0546 ----- copy key
key_create kcrt str @6 KEY_CREATE 0547 ----- create key
key_enter kent str @8 KEY_ENTER 0527 ----- enter/send key
key_exit kext str @9 KEY_EXIT 0551 ----- exit key
key_f37 kf37 str FR KEY_F(37) - ----E F37 function key
key_f38 kf38 str FS KEY_F(38) - ----E F38 function key
key_f39 kf39 str FT KEY_F(39) - ----E F39 function key
key_f40 kf40 str FU KEY_F(40) - ----E F40 function key
key_f41 kf41 str FV KEY_F(41) - ----E F41 function key
key_f42 kf42 str FW KEY_F(42) - ----E F42 function key
key_f43 kf43 str FX KEY_F(43) - ----E F43 function key
key_f44 kf44 str FY KEY_F(44) - ----E F44 function key
key_f45 kf45 str FZ KEY_F(45) - ----E F45 function key
key_f46 kf46 str Fa KEY_F(46) - ----E F46 function key
key_f47 kf47 str Fb KEY_F(47) - ----E F47 function key
key_f48 kf48 str Fc KEY_F(48) - ----E F48 function key
key_f49 kf49 str Fd KEY_F(49) - ----E F49 function key
key_f50 kf50 str Fe KEY_F(50) - ----E F50 function key
key_f51 kf51 str Ff KEY_F(51) - ----E F51 function key
key_f52 kf52 str Fg KEY_F(52) - ----E F52 function key
key_f53 kf53 str Fh KEY_F(53) - ----E F53 function key
key_f54 kf54 str Fi KEY_F(54) - ----E F54 function key
key_f55 kf55 str Fj KEY_F(55) - ----E F55 function key
key_f56 kf56 str Fk KEY_F(56) - ----E F56 function key
key_f57 kf57 str Fl KEY_F(57) - ----E F57 function key
key_f58 kf58 str Fm KEY_F(58) - ----E F58 function key
key_f59 kf59 str Fn KEY_F(59) - ----E F59 function key
key_f60 kf60 str Fo KEY_F(60) - ----E F60 function key
key_f61 kf61 str Fp KEY_F(61) - ----E F61 function key
key_f62 kf62 str Fq KEY_F(62) - ----E F62 function key
key_f63 kf63 str Fr KEY_F(63) - ----E F63 function key
key_find kfnd str @0 KEY_FIND 0552 ----- find key
key_mark kmrk str %2 KEY_MARK 0554 ----- mark key
key_message kmsg str %3 KEY_MESSAGE 0555 ----- message key
key_mouse kmous str Km KEY_MOUSE 0631 ----- Mouse event has occurred
key_move kmov str %4 KEY_MOVE 0556 ----- move key
key_next knxt str %5 KEY_NEXT 0557 ----- next key
key_open kopn str %6 KEY_OPEN 0560 ----- open key
key_options kopt str %7 KEY_OPTIONS 0561 ----- options key
key_previous kprv str %8 KEY_PREVIOUS 0562 ----- previous key
key_print kprt str %9 KEY_PRINT 0532 ----- print key
key_redo krdo str %0 KEY_REDO 0563 ----- redo key
key_reference kref str &1 KEY_REFERENCE 0564 ----- reference key
key_refresh krfr str &2 KEY_REFRESH 0565 ----- refresh key
key_replace krpl str &3 KEY_REPLACE 0566 ----- replace key
key_restart krst str &4 KEY_RESTART 0567 ----- restart key
key_resume kres str &5 KEY_RESUME 0570 ----- resume key
key_save ksav str &6 KEY_SAVE 0571 ----- save key
key_sbeg kBEG str &9 KEY_SBEG 0572 ----- shifted begin key
key_scancel kCAN str &0 KEY_SCANCEL 0573 ----- shifted cancel key
key_scommand kCMD str *1 KEY_SCOMMAND 0574 ----- shifted command key
key_scopy kCPY str *2 KEY_SCOPY 0575 ----- shifted copy key
key_screate kCRT str *3 KEY_SCREATE 0576 ----- shifted create key
key_sdc kDC str *4 KEY_SDC 0577 ----- shifted delete-character key
key_sdl kDL str *5 KEY_SDL 0600 ----- shifted delete-line key
key_send kEND str *7 KEY_SEND 0602 ----- shifted end key
key_seol kEOL str *8 KEY_SEOL 0603 ----- shifted clear-to-end-of-line key
key_sexit kEXT str *9 KEY_SEXIT 0604 ----- shifted exit key
key_sfind kFND str *0 KEY_SFIND 0605 ----- shifted find key
key_shelp kHLP str #1 KEY_SHELP 0606 ----- shifted help key
key_shome kHOM str #2 KEY_SHOME 0607 ----- shifted home key
key_sic kIC str #3 KEY_SIC 0610 ----- shifted insert-character key
key_sleft kLFT str #4 KEY_SLEFT 0611 ----- shifted left-arrow key
key_smessage kMSG str %a KEY_SMESSAGE 0612 ----- shifted message key
key_smove kMOV str %b KEY_SMOVE 0613 ----- shifted move key
key_snext kNXT str %c KEY_SNEXT 0614 ----- shifted next key
key_soptions kOPT str %d KEY_SOPTIONS 0615 ----- shifted options key
key_sprevious kPRV str %e KEY_SPREVIOUS 0616 ----- shifted previous key
key_sprint kPRT str %f KEY_SPRINT 0617 ----- shifted print key
key_sredo kRDO str %g KEY_SREDO 0620 ----- shifted redo key
key_sreplace kRPL str %h KEY_SREPLACE 0621 ----- shifted replace key
key_sright kRIT str %i KEY_SRIGHT 0622 ----- shifted right-arrow key
key_srsume kRES str %j KEY_SRSUME 0623 ----- shifted resume key
key_ssave kSAV str !1 KEY_SSAVE 0624 ----- shifted save key
key_ssuspend kSPD str !2 KEY_SSUSPEND 0625 ----- shifted suspend key
key_sundo kUND str !3 KEY_SUNDO 0626 ----- shifted undo key
key_suspend kspd str &7 KEY_SUSPEND 0627 ----- suspend key
key_undo kund str &8 KEY_UNDO 0630 ----- undo key
label_format fln str Lf - - ----- label format
label_off rmln str LF - - ----- turn off soft labels
label_on smln str LO - - ----- turn on soft labels
micro_column_address mhpa str ZY - - ----- Like column_address in micro mode
micro_down mcud1 str ZZ - - ----- Like cursor_down in micro mode
micro_left mcub1 str Za - - ----- Like cursor_left in micro mode
micro_right mcuf1 str Zb - - ----- Like cursor_right in micro mode
micro_row_address mvpa str Zc - - ----- Like row_address #1 in micro mode
micro_up mcuu1 str Zd - - ----- Like cursor_up in micro mode
mouse_info minfo str Mi - - ----- Mouse status information
order_of_pins porder str Ze - - ----- Match software bits to print-head pins
orig_colors oc str oc - - ----- Set all color pairs to the original ones
orig_pair op str op - - ----- Set default pair to its original value
parm_down_micro mcud str Zf - - ----- Like parm_down_cursor in micro mode
parm_left_micro mcub str Zg - - ----- Like parm_left_cursor in micro mode
parm_right_micro mcuf str Zh - - ----- Like parm_right_cursor in micro mode
parm_up_micro mcuu str Zi - - ----- Like parm_up_cursor in micro mode
pc_term_options pctrm str S6 - - ----- PC terminal options
pkey_plab pfxl str xl - - ----- Program function key #1 to type string #2 and show string #3
plab_norm pln str pn - - ----- program label #1 to show string #2
pulse pulse str PU - - ----- select pulse dialing
quick_dial qdial str QD - - ----- dial number #1 without checking
req_for_input rfi str RF - - ----- send next input char (for ptys)
req_mouse_pos reqmp str RQ - - ----- Request mouse position
remove_clock rmclk str RC - - ----- remove clock
scancode_escape scesc str S7 - - ----- Escape for scancode emulation
select_char_set scs str Zj - - ----- Select character set, #1
set0_des_seq s0ds str s0 - - ----- Shift to codeset 0 (EUC set 0, ASCII)
set1_des_seq s1ds str s1 - - ----- Shift to codeset 1
set2_des_seq s2ds str s2 - - ----- Shift to codeset 2
set3_des_seq s3ds str s3 - - ----- Shift to codeset 3
set_a_background setab str AB - - ----- Set background color to #1, using ANSI escape
set_a_foreground setaf str AF - - ----- Set foreground color to #1, using ANSI escape
set_background setb str Sb - - ----- Set background color #1
set_bottom_margin smgb str Zk - - ----- Set bottom margin at current line
set_bottom_margin_parm smgbp str Zl - - ----- Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom
set_clock sclk str SC - - ----- set clock, #1 hrs #2 mins #3 secs
set_color_band setcolor str Yz - - ----- Change to ribbon color #1
set_color_pair scp str sp - - ----- Set current color pair to #1
set_foreground setf str Sf - - ----- Set foreground color #1
set_left_margin smgl str ML - - ----- set left soft margin at current column. See smgl. (ML is not in BSD termcap).
set_left_margin_parm smglp str Zm - - ----- Set left (right) margin at column #1
set_lr_margin smglr str ML - - ----- Set both left and right margins to #1, #2. (ML is not in BSD termcap).
set_page_length slines str YZ - - ----- Set page length to #1 lines
set_right_margin smgr str MR - - ----- set right soft margin at current column
set_right_margin_parm smgrp str Zn - - ----- Set right margin at column #1
set_tb_margin smgtb str MT - - ----- Sets both top and bottom margins to #1, #2
set_top_margin smgt str Zo - - ----- Set top margin at current line
set_top_margin_parm smgtp str Zp - - ----- Set top (bottom) margin at row #1
start_bit_image sbim str Zq - - ----- Start printing bit image graphics
start_char_set_def scsd str Zr - - ----- Start character set definition #1, with #2 characters in the set
stop_bit_image rbim str Zs - - ----- Stop printing bit image graphics
stop_char_set_def rcsd str Zt - - ----- End definition of character set #1
subscript_characters subcs str Zu - - ----- List of subscriptable characters
superscript_characters supcs str Zv - - ----- List of superscriptable characters
these_cause_cr docr str Zw - - ----- Printing any of these characters causes CR
tone tone str TO - - ----- select touch tone dialing
user0 u0 str u0 - - ----- User string #0
user1 u1 str u1 - - ----- User string #1
user2 u2 str u2 - - ----- User string #2
user3 u3 str u3 - - ----- User string #3
user4 u4 str u4 - - ----- User string #4
user5 u5 str u5 - - ----- User string #5
user6 u6 str u6 - - ----- User string #6
user7 u7 str u7 - - ----- User string #7
user8 u8 str u8 - - ----- User string #8
user9 u9 str u9 - - ----- User string #9
wait_tone wait str WA - - ----- wait for dial-tone
xoff_character xoffc str XF - - ----- XOFF character
xon_character xonc str XN - - ----- XON character
zero_motion zerom str Zx - - ----- No motion for subsequent character
set_pglen_inch slength str YI - - ----- Set page length to #1 hundredth of an inch (some implementations use sL for termcap).
enter_horizontal_hl_mode ehhlm str Xh - - ----- Enter horizontal highlight mode
enter_left_hl_mode elhlm str Xl - - ----- Enter left highlight mode
enter_low_hl_mode elohlm str Xo - - ----- Enter low highlight mode
enter_right_hl_mode erhlm str Xr - - ----- Enter right highlight mode
enter_top_hl_mode ethlm str Xt - - ----- Enter top highlight mode
enter_vertical_hl_mode evhlm str Xv - - ----- Enter vertical highlight mode
set_a_attributes sgr1 str sA - - ----- Define second set of video attributes #1-#6
#
#
#
# %%-STOP-HERE-%%
#
# Don't move this casually! In fact, don't move it at all unless you're
# either doing it to add System V or XPG4 extensions, or have decided you
# don't care about SVr4 binary compatibility.
#
#############################################################################
#
# TERMCAP EXTENSION CAPABILITIES
#
# The capabilities below are either obsolete or extensions on certain systems.
# They are not used by SVR4 terminfo. Some are used by captoinfo to translate
# termcap sources; the rest are listed for completeness, and in case somebody
# cares about them enough to hack in code that will translate them into
# terminfo capabilities.
#
# The first part of the list is from Ross Ridge's `mytinfo' package
# (comp.sources.unix, volume 26); the variable names and terminfo names (as
# well as the termcap codes) match his list.
#
# This group of codes is not marked obsolete in 4.4BSD, but have no direct
# terminfo equivalents. The rs capability is specially translated to terminfo
# r2, and vice versa, if an entry does not already have an r2. Similarly,
# i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2).
# The ug capability is thrown away, but assumed to be whatever sg is if the
# latter is nonzero and we're dumping in termcap format.
#
termcap_init2 OTi2 str i2 - - YB--- secondary initialization string
termcap_reset OTrs str rs - - YB-G- terminal reset string
magic_cookie_glitch_ul OTug num ug - - YBCGE number of blanks left by ul
#
# Obsolete termcap capabilities. Some are used for termcap translation. The
# code uses the 'OT' prefix we put on obsolete capabilities to suppress
# printing them in terminfo source dumps of compiled entries.
#
backspaces_with_bs OTbs bool bs - - YBCGE uses ^H to move left
crt_no_scrolling OTns bool ns - - YBCG- crt cannot scroll
no_correctly_working_cr OTnc bool nc - - YBCG- no way to go to start of line
carriage_return_delay OTdC num dC - - YB-G- pad needed for CR
new_line_delay OTdN num dN - - YB-G- pad needed for LF
linefeed_if_not_lf OTnl str nl - - YBCGE use to move down
backspace_if_not_bs OTbc str bc - - YBCGE move left, if not ^H
#
# GNU termcap library extensions. The GNU termcap file distributed with
# Emacs no longer uses these, but MT showed up in pre-9.0 versions of the
# BSD termcap file. The name clash with terminfo MT is resolved by type
# info; MT is converted to km.
#
gnu_has_meta_key OTMT bool MT - - ----E has meta key
# gnu_tab_width OTtw num tw - - ----E tab width in spaces
#
# GNU termcap *does* include the following extended capability, Only the
# now-obsolete Ann Arbor terminals used it.
#
# gnu_change_scroll_region OTcS str cS - - ---GE alternate set scrolling region
#
# The following comments describe capnames so ancient that I believe no
# software uses them any longer. Some of these have to go because they
# clash with terminfo names in ways that cannot be resolved by type
# information.
#
# These mytinfo codes are not used in the 4.4BSD curses code. They are
# marked obsolete in the 4.4BSD manual pages.
#
# There is one conflict with terminfo; ma is in both. This conflict is
# resolved by type information.
#
# The `ko' capability is translated by special code. It should contain a
# comma-separated list of capabilities for which there are corresponding keys.
# The `kn' code is accepted but ignored.
#
# The `ma' capability was a 4.0BSD feature used by vi version 2.
# It consists of pairs of characters corresponding to kl, kr, ku, kd, and kh.
# Besides being obsolete, that interpretation conflicts with max_attributes.
#
# Here is a description of memory_lock_above and memory_unlock:
# "You can 'freeze' data on the screen by turning on Memory Lock in a line of
# text. All lines above the cursor's current line become locked in place on
# the screen. Then enter data normally. When the screen fills up, any
# further data entered forces the first line of unfrozen line text to scroll
# under the frozen data. Lines scrolled off the screen are inserted into
# memory immediately preceding the first frozen line." (from the HP 700/96
# User's manual). VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l.
#
# Applications that use terminfo are supposed to behave as though xr is
# always true.
#
linefeed_is_newline OTNL bool NL - - YB--- move down with \n
# even_parity OTEP bool EP - - -B--- terminal requires even parity
# odd_parity OTOP bool OP - - -B--- terminal requires odd parity
# half_duplex OTHD bool HD - - -B--- terminal is half-duplex
# lower_case_only OTLC bool LC - - -B--- terminal has only lower case
# upper_case_only OTUC bool UC - - -B--- terminal has only upper case
backspace_delay OTdB num dB - - YB-G- padding required for ^H
# form_feed_delay OTdF num dF - - -B-G- padding required for ^L
horizontal_tab_delay OTdT num dT - - YB-G- padding required for ^I
# vertical_tab_delay OTdV num dV - - -B--- padding required for ^V
number_of_function_keys OTkn num kn - - -B-G- count of function keys
other_non_function_keys OTko str ko - - -B-G- list of self-mapped keycaps
arrow_key_map OTma str ma - - YBC-- map motion-keys for vi version 2
# memory_lock_above OTml str ml - - -B--- lock visible screen memory above the current line
# memory_unlock OTmu str mu - - -B--- unlock visible screen memory above the current line
has_hardware_tabs OTpt bool pt - - YB--- has 8-char tabs invoked with ^I
return_does_clr_eol OTxr bool xr - - YB--- return clears the line
# tek_4025_insert_line OTxx bool xx - - -BC-- Tektronix 4025 insert-line glitch
#
# mytinfo described this as a termcap capability, but it's not listed in the
# 4.4BSD man pages, and not found in the 4.4BSD termcap file. The ncurses
# package, like System V, behaves as though it is always true.
#
# rind_only_at_top OTxq bool xq - - ----- reverse index only works from top line
#
# University of Waterloo termcap extensions (as described in mytinfo).
# The `xl' termcap file clashes with a terminfo name; this ambiguity cannot
# be resolved by a type check. The descriptions are guesses from what was
# in the mytinfo tables.
#
# key_interrupt_char OTki str ki - - ----- string set by interrupt key (?)
# key_kill_char OTkk str kk - - ----- string set by kill key (?)
# key_suspend_char OTkz str kz - - ----- string set by suspend key (?)
# initialization_messy OTxc bool xc - - ----- initialization leaves garbage on the screen (?)
# ind_at_bottom_does_cr OTxl bool xl - - ----- index does a carriage return
#
# Nonstandard capabilities unique to Ross Ridge's `mytinfo' package.
# SR clashes with a terminfo name; this ambiguity cannot be resolved by a type
# check.
#
# scroll_left OTsl1 str Sl - - ----- scroll screen leftward
# scroll_right OTsr1 str Sr - - ----- scroll screen rightward
# parm_scroll_left OTsl str SL - - ----- scroll screen leftward #1 characters
# parm_scroll_right OTsr str SR - - ----- scroll screen rightward #1 characters
#
# The mytinfo capabilities end here.
#
# XENIX extensions:
#
# Xenix defined its own set of forms-drawing capabilities:
#
# cap IBM ASCII description ACS ASCII
# --- ----------- -------------------- ------------- ------
# G1 191 \277 M-? single upper right ACS_URCORNER
# G2 218 \332 M-Z single upper left ACS_ULCORNER
# G3 192 \300 M-@ single lower left ACS_LLCORNER
# G4 217 \331 M-Y single lower right ACS_LRCORNER
# G5 187 \273 M-; double upper right
# G6 201 \311 M-I double upper left
# G7 200 \310 M-H double lower left
# G8 188 \274 M-< double lower right
# GC 197 \305 M-E single intersection ACS_PLUS _ _
# GD 194 \302 M-B single down-tick ACS_TTEE |
# GH 196 \304 M-D single horizontal line ACS_HLINE
# GL 180 \264 M-4 single left tick ACS_RTEE -|
# GR 195 \303 M-C single right tick ACS_LTEE |-
# GU 193 \301 M-A single up tick ACS_BTEE _|_
# GV 179 \263 M-3 single vertical line ACS_VLINE
# Gc 206 \316 M-N double intersection
# Gd 203 \313 M-K double down tick
# Gh 205 \315 M-M double horizontal line
# Gl 204 \204 M-L double left tick
# Gr 185 \271 M-9 double right tick
# Gu 202 \312 M-J double up tick
# Gv 186 \272 M-: double vertical line
#
# The compiler will translate the single-line caps and discard the others
# (via IGNORE aliases further down). We don't want to do normal pad
# translation on these, they're often single-character printable ASCII
# strings that happen to be numerics. There's awk code in parametrized.sh
# that detects the acs_ prefix and uses it to suppress pad translation.
# These terminfo names are invented.
#
acs_ulcorner OTG2 str G2 - - ----- single upper left
acs_llcorner OTG3 str G3 - - ----- single lower left
acs_urcorner OTG1 str G1 - - ----- single upper right
acs_lrcorner OTG4 str G4 - - ----- single lower right
acs_ltee OTGR str GR - - ----- tee pointing right
acs_rtee OTGL str GL - - ----- tee pointing left
acs_btee OTGU str GU - - ----- tee pointing up
acs_ttee OTGD str GD - - ----- tee pointing down
acs_hline OTGH str GH - - ----- single horizontal line
acs_vline OTGV str GV - - ----- single vertical line
acs_plus OTGC str GC - - ----- single intersection
#
#############################################################################
#
# TERMINFO EXTENSION CAPABILITIES
#
# (see Caps-ncurses for the complete set of comments)
#
memory_lock meml str ml - - ----K lock memory above cursor
memory_unlock memu str mu - - ----K unlock memory
#
#############################################################################
diff --git a/contrib/ncurses/include/Caps.uwin b/contrib/ncurses/include/Caps.uwin
index 7628bd47b6e8..de0d5b77cae9 100644
--- a/contrib/ncurses/include/Caps.uwin
+++ b/contrib/ncurses/include/Caps.uwin
@@ -1,792 +1,796 @@
##############################################################################
# Copyright 2019,2020 Thomas E. Dickey #
# Copyright 2001-2015,2016 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas Dickey
#
-# $Id: Caps.uwin,v 1.12 2020/02/02 23:34:34 tom Exp $
+# $Id: Caps.uwin,v 1.13 2020/10/17 21:30:19 tom Exp $
#
# This is an adaptation of ncurses' termcap/terminfo capability table, which
# is designed to align with U/Win's terminfo.
#
# This table is used to generate initializers for tables that drive tic,
# infocmp, and the library compilation code used to support the termcap
# compatibility hack. It is also used to generate the tabular portion of the
# terminfo(5) man page; lines beginning with `#%' are passed through to become
# the terminfo table.
#
# This file has three major sections; a standard-capabilities table, two
# extension-capability tables, and a section of aliases declarations.
# The first two have the same format, as follows:
#
# FILE FORMAT
#
# Column 1: terminfo variable name
# Column 2: terminfo capability name
# Column 3: capability type (boolean, numeric, or string)
# Column 4: termcap capability name
# Column 5: KEY_xxx name, if any, `-' otherwise
# Column 6: value for KEY_xxx name, if any, `-' otherwise
# Column 7: Lead with `Y' if capability should be emitted in termcap
# translations, `-' otherwise
# Column 8: capability description
#
# The codes following [Y-] in column 7 describe the versions of termcap which
# use the given capability. This information is not used by the curses library
# proper; rather, it's there to help the terminfo maintainer avoid emitting
# termcap entry translations that are more than 1023 bytes long (and tank a
# lot of old termcap-using programs). The codes read as follows:
# B = mentioned in the BSD man page for 4.4BSD curses
# C = used by the 4.4BSD curses library
# G = mentioned in the documentation for GNU termcap
# E = used by GNU Emacs
# K = remove this terminfo capability when translating to standard format
# The important codes are C and E. A cap with C or E should be preserved in
# translation if possible. The problem is that preserving all such caps may
# lead to some termcap translations being too long. The termcap maintainer
# has a bit of a juggling act to do...potential problem cases are marked with
# an asterisk (*).
#
# The aliases section has the following format:
#
# Column 1: either `capalias' or `infoalias'
# Column 2: name to be aliased
# Column 3: what name it should translate to. The name IGNORE means it
# should be discarded with a warning message.
# Column 4: name of the extension set (used for compiler warning messages)
# Column 5: capability description (usually an associated terminfo variable)
#
# HANDLING TERMCAP AND TERMINFO EXTENSIONS
#
# There are basically five different ways to handle termcap and terminfo
# extensions:
#
# 1. Don't list the capname here, or list it but comment it out (the latter
# is preferable; someone might want to handle it in the future). If you do
# this, the capability will be treated as unknown and raise a warning from
# the compiler.
#
# 2. Alias it. This is appropriate if the capability has the same meaning
# as an already-supported one. The compiler will handle aliasing, emitting
# an appropriate informational message whenever an alias fires.
#
# 3. List it in the standard table. You almost certainly do *not* want
# to do this -- the capabilities in that one, and their order, have been
# carefully chosen to be SVr4-binary-compatible when they're written out
# as a terminfo object, and breaking this would be bad. It's up to the ncurses
# library what to do with the terminfo data after it's read in.
#
# 4. List it in the aliases table with an IGNORE target field. If you
# do this, the capability will be ignored on input (though the user will
# get a warning message about it).
#
# 5. List it in the extensions table. If you do this, the compiler will
# silently accept the capability, but the curses library proper will never
# see it (because it won't be written out as part of the terminfo object
# format). It's up to you what you have the compiler do with it.
#
# There are two opposite reasons to choose option 5. One is when you want
# to eat the capability silently and discard it when doing translations
# to terminfo with tic -I. Some very old obsolete BSD caps like :kn: are
# in this class. Nothing will ever use them again.
#
# More usually, you want the compiler to try to deduce something from the
# capability value that it can use to translate it into your output format.
# You'll need to write custom code, probably in postprocess_termcap() or
# postprocess_terminfo(), to handle the translation.
#
# CONTROLLING ENTRY LENGTH
#
# Notes on specific elisions made to fit translations within 1023 bytes:
#
# Machines with IBM PC-like keyboards want to be able to define the following
# keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap-
# only environments for End or Home-Down), key_dc, and key_ic. This is also
# the set of keys the `joe' editor will be upset if it can't see. So don't
# trim those out of the set to be translated to termcap, or various users of
# the termcap file will become irate.
#
# It might look tempting to leave those long init strings out of translations.
# We can't do it (yet); 4.4BSD tput and tset use them.
#
# We retain the sgr capability in translation in spite of the fact that neither
# 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are
# hard to understand without it, and (b) the entries in which it is long tend
# to be older types that don't use up a lot of string space on function keys.
# The tic(1) translation code will complain and elide it if it makes a critical
# difference (there is special code in tic to recognize this situation).
#
# Yes, BSD tset(1) uses hpa. We elide hpa/vpa anyway because the motion
# optimizer in BSD curses didn't use them. This omission seems to be the
# single most effective one, it shortened the resolved length of all thirteen
# problem entries in the 9.9.0 version of the terminfo master below critical.
#
# It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap
# translations go back over critical if we do this. As 4.4BSD curses fades
# into history and GNU termcap's application base shrinks towards being GNU
# Emacs only, we'll probably elide out some BSD-only capabilities in order
# to buy space for non-essentials Emacs is still using. Capabilities high
# on that hit list: rc, sc, uc.
#
#############################################################################
#
# STANDARD CAPABILITIES
#
#%The following is a complete table of the capabilities included in a
#%terminfo description block and available to terminfo-using code. In each
#%line of the table,
#%
#%The \fBvariable\fR is the name by which the programmer (at the terminfo level)
#%accesses the capability.
#%
#%The \fBcapname\fR is the short name used in the text of the database,
#%and is used by a person updating the database.
#%Whenever possible, capnames are chosen to be the same as or similar to
#%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses
#%identical or very similar names). Semantics are also intended to match
#%those of the specification.
#%
#%The termcap code is the old
#%.B termcap
#%capability name (some capabilities are new, and have names which termcap
#%did not originate).
#%.P
#%Capability names have no hard length limit, but an informal limit of 5
#%characters has been adopted to keep them short and to allow the tabs in
#%the source file
#%.B Caps
#%to line up nicely.
#%
#%Finally, the description field attempts to convey the semantics of the
#%capability. You may find some codes in the description field:
#%.TP
#%(P)
#%indicates that padding may be specified
#%.TP
#%#[1-9]
-#%in the description field indicates that the string is passed through tparm with
-#%parms as given (#\fIi\fP).
+#%in the description field indicates that the string is passed
+#%through \fBtparm\fP(3X) with parameters as given (#\fIi\fP).
+#%.IP
+#%If no parameters are listed in the description,
+#%passing the string through \fBtparm\fP(3X) may give unexpected results,
+#%e.g., if it contains percent (%%) signs.
#%.TP
#%(P*)
#%indicates that padding may vary in proportion to the number of
#%lines affected
#%.TP
#%(#\d\fIi\fP\u)
#%indicates the \fIi\fP\uth\d parameter.
#%
#%.PP
#% These are the boolean capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBBooleans name Code\fR
auto_left_margin bw bool bw - - YB-G- cub1 wraps from column 0 to last column
auto_right_margin am bool am - - YBCGE terminal has automatic margins
no_esc_ctlc xsb bool xb - - YBCG- beehive (f1=escape, f2=ctrl C)
ceol_standout_glitch xhp bool xs - - YBCGE standout not erased by overwriting (hp)
eat_newline_glitch xenl bool xn - - YBCGE newline ignored after 80 cols (concept)
erase_overstrike eo bool eo - - YBCG- can erase overstrikes with a blank
generic_type gn bool gn - - YB-G- generic line type
hard_copy hc bool hc - - YBCG- hardcopy terminal
has_meta_key km bool km - - YB-GE Has a meta key (i.e., sets 8th-bit)
has_status_line hs bool hs - - YB-G- has extra status line
insert_null_glitch in bool in - - YBCGE insert mode distinguishes nulls
memory_above da bool da - - YBCG- display may be retained above the screen
memory_below db bool db - - YB-GE display may be retained below the screen
move_insert_mode mir bool mi - - YBCGE safe to move while in insert mode
move_standout_mode msgr bool ms - - YBCGE safe to move while in standout mode
over_strike os bool os - - YBCG- terminal can overstrike
status_line_esc_ok eslok bool es - - YB-G- escape can be used on the status line
dest_tabs_magic_smso xt bool xt - - YBCGE tabs destructive, magic so char (t1061)
tilde_glitch hz bool hz - - YB-GE cannot print ~'s (Hazeltine)
transparent_underline ul bool ul - - YBCGE underline character overstrikes
xon_xoff xon bool xo - - YB--- terminal uses xon/xoff handshaking
needs_xon_xoff nxon bool nx - - ----- padding will not work, xon/xoff required
prtr_silent mc5i bool 5i - - ----- printer will not echo on screen
hard_cursor chts bool HC - - ----- cursor is hard to see
non_rev_rmcup nrrmc bool NR - - ----- smcup does not reverse rmcup
no_pad_char npc bool NP - - ----- pad character does not exist
non_dest_scroll_region ndscr bool ND - - ----- scrolling region is non-destructive
back_color_erase bce bool ut - - ----- screen erased with background color
can_change ccc bool cc - - ----- terminal can re-define existing colors
hue_lightness_saturation hls bool hl - - ----- terminal uses only HLS color notation (Tektronix)
#%.TE
#%.ad
#%
#%These are the numeric capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBNumeric name Code\fR
columns cols num co - - YBCGE number of columns in a line
init_tabs it num it - - YB-G- tabs initially every # spaces
lines lines num li - - YBCGE number of lines on screen or page
lines_of_memory lm num lm - - YB-G- lines of memory if > line. 0 means varies
magic_cookie_glitch xmc num sg - - YBCGE number of blank characters left by smso or rmso
padding_baud_rate pb num pb - - YB-GE lowest baud rate where padding needed
virtual_terminal vt num vt - - YB--- virtual terminal number (CB/unix)
width_status_line wsl num ws - - YB-G- number of columns in status line
num_labels nlab num Nl - - ----- number of labels on screen
label_height lh num lh - - ----- rows in each label
label_width lw num lw - - ----- columns in each label
buttons btns num BT - - ----- number of buttons on mouse
#max_attributes ma num ma - - YBC-- maximum combined attributes terminal can handle
#maximum_windows wnum num MW - - ----- maximum number of defineable windows
# These came in with SVr4's color support
max_colors colors num Co - - ----- maximum number of colors on screen
max_pairs pairs num pa - - ----- maximum number of color-pairs on the screen
no_color_video ncv num NC - - ----- video attributes that cannot be used with colors
#%.TE
#%.ad
#%
#%The following numeric capabilities are present in the SVr4.0 term structure,
#%but are not yet documented in the man page. They came in with SVr4's
#%printer support.
#%
#%.na
#%
#%These are the string capabilities:
#%
#%.na
#%.TS H
#%center expand;
#%c l l c
#%c l l c
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBString name Code\fR
back_tab cbt str bt - - YBCGE back tab (P)
bell bel str bl - - YB-GE audible signal (bell) (P)
carriage_return cr str cr - - YBCGE carriage return (P*) (P*)
change_scroll_region csr str cs - - YBCGE change region to line #1 to line #2 (P)
clear_all_tabs tbc str ct - - YB-G- clear all tab stops (P)
clear_screen clear str cl - - YBCGE clear screen and home cursor (P*)
clr_eol el str ce - - YBCGE clear to end of line (P)
clr_eos ed str cd - - YBCGE clear to end of screen (P*)
column_address hpa str ch - - -B-GE* horizontal position #1, absolute (P)
command_character cmdch str CC - - YB-G- terminal settable cmd character in prototype !?
cursor_address cup str cm - - YBCGE move to row #1 columns #2
cursor_down cud1 str do - - YBCGE down one line
cursor_home home str ho - - YBCGE home cursor (if no cup)
cursor_invisible civis str vi - - YB-G- make cursor invisible
cursor_left cub1 str le - - YBCGE move left one space
cursor_mem_address mrcup str CM - - YB-G- memory relative cursor addressing, move to row #1 columns #2
cursor_normal cnorm str ve - - YBCGE make cursor appear normal (undo civis/cvvis)
cursor_right cuf1 str nd - - YBCGE non-destructive space (move right one space)
cursor_to_ll ll str ll - - YBCGE last line, first column (if no cup)
cursor_up cuu1 str up - - YBCGE up one line
cursor_visible cvvis str vs - - YBCGE make cursor very visible
delete_character dch1 str dc - - YBCGE delete character (P*)
delete_line dl1 str dl - - YBCGE delete line (P*)
dis_status_line dsl str ds - - YB-G- disable status line
down_half_line hd str hd - - YB-G- half a line down
enter_alt_charset_mode smacs str as - - YB-G- start alternate character set (P)
enter_blink_mode blink str mb - - YB-G- turn on blinking
enter_bold_mode bold str md - - YB-G- turn on bold (extra bright) mode
enter_ca_mode smcup str ti - - YBCGE string to start programs using cup
enter_delete_mode smdc str dm - - YBCGE enter delete mode
enter_dim_mode dim str mh - - YB-G- turn on half-bright mode
enter_insert_mode smir str im - - YBCGE enter insert mode
enter_secure_mode invis str mk - - -B-G-* turn on blank mode (characters invisible)
enter_protected_mode prot str mp - - -B-G-* turn on protected mode
enter_reverse_mode rev str mr - - YB-G- turn on reverse video mode
enter_standout_mode smso str so - - YBCGE begin standout mode
enter_underline_mode smul str us - - YBCGE begin underline mode
erase_chars ech str ec - - YB-G- erase #1 characters (P)
exit_alt_charset_mode rmacs str ae - - YB-G- end alternate character set (P)
exit_attribute_mode sgr0 str me - - YB-GE turn off all attributes
exit_ca_mode rmcup str te - - YBCGE strings to end programs using cup
exit_delete_mode rmdc str ed - - YBCGE end delete mode
exit_insert_mode rmir str ei - - YBCGE exit insert mode
exit_standout_mode rmso str se - - YBCGE exit standout mode
exit_underline_mode rmul str ue - - YBCGE exit underline mode
flash_screen flash str vb - - YBCGE visible bell (may not move cursor)
form_feed ff str ff - - YB-G- hardcopy terminal page eject (P*)
from_status_line fsl str fs - - YB-G- return from status line
init_1string is1 str i1 - - YB-G- initialization string
init_2string is2 str is - - YB-G- initialization string
init_3string is3 str i3 - - YB-G- initialization string
init_file if str if - - YB-G- name of initialization file
insert_character ich1 str ic - - YBCGE insert character (P)
insert_line il1 str al - - YBCGE insert line (P*)
insert_padding ip str ip - - YBCGE insert padding after inserted character
key_backspace kbs str kb KEY_BACKSPACE 0407 YB-G- backspace key
key_catab ktbc str ka KEY_CATAB 0526 -B-G-* clear-all-tabs key
key_clear kclr str kC KEY_CLEAR 0515 -B-G-* clear-screen or erase key
key_ctab kctab str kt KEY_CTAB 0525 -B-G-* clear-tab key
key_dc kdch1 str kD KEY_DC 0512 YB-G- delete-character key
key_dl kdl1 str kL KEY_DL 0510 -B-G-* delete-line key
key_down kcud1 str kd KEY_DOWN 0402 YBCGE down-arrow key
key_eic krmir str kM KEY_EIC 0514 -B-G-* sent by rmir or smir in insert mode
key_eol kel str kE KEY_EOL 0517 -B-G-* clear-to-end-of-line key
key_eos ked str kS KEY_EOS 0516 -B-G-* clear-to-end-of-screen key
key_f0 kf0 str k0 KEY_F(0) 0410 YBCGE F0 function key
key_f1 kf1 str k1 KEY_F(1) - YBCGE F1 function key
key_f10 kf10 str k; KEY_F(10) - ----E F10 function key
key_f2 kf2 str k2 KEY_F(2) - YBCGE F2 function key
key_f3 kf3 str k3 KEY_F(3) - YBCGE F3 function key
key_f4 kf4 str k4 KEY_F(4) - YBCGE F4 function key
key_f5 kf5 str k5 KEY_F(5) - YBCGE F5 function key
key_f6 kf6 str k6 KEY_F(6) - YBCGE F6 function key
key_f7 kf7 str k7 KEY_F(7) - YBCGE F7 function key
key_f8 kf8 str k8 KEY_F(8) - YBCGE F8 function key
key_f9 kf9 str k9 KEY_F(9) - YBCGE F9 function key
key_home khome str kh KEY_HOME 0406 YBCGE home key
key_ic kich1 str kI KEY_IC 0513 YB-GE insert-character key
key_il kil1 str kA KEY_IL 0511 -B-G-* insert-line key
key_left kcub1 str kl KEY_LEFT 0404 YBCGE left-arrow key
key_ll kll str kH KEY_LL 0533 YB-G- lower-left key (home down)
key_npage knp str kN KEY_NPAGE 0522 YB-GE next-page key
key_ppage kpp str kP KEY_PPAGE 0523 YB-GE previous-page key
key_right kcuf1 str kr KEY_RIGHT 0405 YBCGE right-arrow key
key_sf kind str kF KEY_SF 0520 -B-G-* scroll-forward key
key_sr kri str kR KEY_SR 0521 -B-G-* scroll-backward key
key_stab khts str kT KEY_STAB 0524 -B-G-* set-tab key
key_up kcuu1 str ku KEY_UP 0403 YBCGE up-arrow key
keypad_local rmkx str ke - - YBCGE leave 'keyboard_transmit' mode
keypad_xmit smkx str ks - - YBCGE enter 'keyboard_transmit' mode
lab_f0 lf0 str l0 - - -B-G-* label on function key f0 if not f0
lab_f1 lf1 str l1 - - -B-G-* label on function key f1 if not f1
lab_f10 lf10 str la - - ----- label on function key f10 if not f10
lab_f2 lf2 str l2 - - -B-G-* label on function key f2 if not f2
lab_f3 lf3 str l3 - - -B-G-* label on function key f3 if not f3
lab_f4 lf4 str l4 - - -B-G-* label on function key f4 if not f4
lab_f5 lf5 str l5 - - -B-G-* label on function key f5 if not f5
lab_f6 lf6 str l6 - - -B-G-* label on function key f6 if not f6
lab_f7 lf7 str l7 - - -B-G-* label on function key f7 if not f7
lab_f8 lf8 str l8 - - -B-G-* label on function key f8 if not f8
lab_f9 lf9 str l9 - - -B-G-* label on function key f9 if not f9
meta_off rmm str mo - - YB-G-* turn off meta mode
meta_on smm str mm - - YB-G-* turn on meta mode (8th-bit on)
newline nel str nw - - YB-G-* newline (behave like cr followed by lf)
pad_char pad str pc - - YBCGE padding char (instead of null)
parm_dch dch str DC - - YB-GE delete #1 characters (P*)
parm_delete_line dl str DL - - YBCGE delete #1 lines (P*)
parm_down_cursor cud str DO - - YBCGE down #1 lines (P*)
parm_ich ich str IC - - YB-GE insert #1 characters (P*)
parm_index indn str SF - - YBCG- scroll forward #1 lines (P)
parm_insert_line il str AL - - YBCGE insert #1 lines (P*)
parm_left_cursor cub str LE - - YBCGE move #1 characters to the left (P)
parm_right_cursor cuf str RI - - YBCGE move #1 characters to the right (P*)
parm_rindex rin str SR - - YBCG- scroll back #1 lines (P)
parm_up_cursor cuu str UP - - YBCGE up #1 lines (P*)
pkey_key pfkey str pk - - -B--- program function key #1 to type string #2
pkey_local pfloc str pl - - -B--- program function key #1 to execute string #2
pkey_xmit pfx str px - - -B--- program function key #1 to transmit string #2
print_screen mc0 str ps - - -B-G-* print contents of screen
prtr_off mc4 str pf - - -B-G-* turn off printer
prtr_on mc5 str po - - -B-G-* turn on printer
repeat_char rep str rp - - YB-GE repeat char #1 #2 times (P*)
reset_1string rs1 str r1 - - -B--- reset string
reset_2string rs2 str r2 - - -B--- reset string
reset_3string rs3 str r3 - - -B--- reset string
reset_file rf str rf - - -B--- name of reset file
restore_cursor rc str rc - - YBCG- restore cursor to position of last save_cursor
row_address vpa str cv - - -B-GE* vertical position #1 absolute (P)
save_cursor sc str sc - - YBCG- save current cursor position (P)
scroll_forward ind str sf - - YBCGE scroll text up (P)
scroll_reverse ri str sr - - YBCGE scroll text down (P)
set_attributes sgr str sa - - YB-G- define video attributes #1-#9 (PG9)
set_tab hts str st - - YB-G- set a tab in every row, current columns
set_window wind str wi - - -B-GE current window is lines #1-#2 cols #3-#4
tab ht str ta - - YBCGE tab to next 8-space hardware tab stop
to_status_line tsl str ts - - YB-G- move to status line, column #1
underline_char uc str uc - - YBCG- underline char and move past it
up_half_line hu str hu - - YB-G- half a line up
init_prog iprog str iP - - -B--- path name of program for initialization
key_a1 ka1 str K1 KEY_A1 0534 YB-GE upper left of keypad
key_a3 ka3 str K3 KEY_A3 0535 YB-GE upper right of keypad
key_b2 kb2 str K2 KEY_B2 0536 YB-GE center of keypad
key_c1 kc1 str K4 KEY_C1 0537 YB-GE lower left of keypad
key_c3 kc3 str K5 KEY_C3 0540 YB-GE lower right of keypad
prtr_non mc5p str pO - - -B-G-* turn on printer for #1 bytes
#
# SVr1 capabilities stop here. IBM's version of terminfo is the same as
# SVr4 up to this point, but has a different set afterwards.
#
char_padding rmp str rP - - ----- like ip but when in insert mode
acs_chars acsc str ac - - ----- graphics charset pairs, based on vt100
plab_norm pln str pn - - ----- program label #1 to show string #2
key_btab kcbt str kB KEY_BTAB 0541 ----- back-tab key
enter_xon_mode smxon str SX - - ----- turn on xon/xoff handshaking
exit_xon_mode rmxon str RX - - ----- turn off xon/xoff handshaking
enter_am_mode smam str SA - - ----- turn on automatic margins
exit_am_mode rmam str RA - - ----- turn off automatic margins
xon_character xonc str XN - - ----- XON character
xoff_character xoffc str XF - - ----- XOFF character
ena_acs enacs str eA - - ----- enable alternate char set
label_on smln str LO - - ----- turn on soft labels
label_off rmln str LF - - ----- turn off soft labels
key_beg kbeg str @1 KEY_BEG 0542 ----- begin key
key_cancel kcan str @2 KEY_CANCEL 0543 ----- cancel key
key_close kclo str @3 KEY_CLOSE 0544 ----- close key
key_command kcmd str @4 KEY_COMMAND 0545 ----- command key
key_copy kcpy str @5 KEY_COPY 0546 ----- copy key
key_create kcrt str @6 KEY_CREATE 0547 ----- create key
key_end kend str @7 KEY_END 0550 ----- end key
key_enter kent str @8 KEY_ENTER 0527 ----- enter/send key
key_exit kext str @9 KEY_EXIT 0551 ----- exit key
key_find kfnd str @0 KEY_FIND 0552 ----- find key
key_help khlp str %1 KEY_HELP 0553 ----- help key
key_mark kmrk str %2 KEY_MARK 0554 ----- mark key
key_message kmsg str %3 KEY_MESSAGE 0555 ----- message key
key_move kmov str %4 KEY_MOVE 0556 ----- move key
key_next knxt str %5 KEY_NEXT 0557 ----- next key
key_open kopn str %6 KEY_OPEN 0560 ----- open key
key_options kopt str %7 KEY_OPTIONS 0561 ----- options key
key_previous kprv str %8 KEY_PREVIOUS 0562 ----- previous key
key_print kprt str %9 KEY_PRINT 0532 ----- print key
key_redo krdo str %0 KEY_REDO 0563 ----- redo key
key_reference kref str &1 KEY_REFERENCE 0564 ----- reference key
key_refresh krfr str &2 KEY_REFRESH 0565 ----- refresh key
key_replace krpl str &3 KEY_REPLACE 0566 ----- replace key
key_restart krst str &4 KEY_RESTART 0567 ----- restart key
key_resume kres str &5 KEY_RESUME 0570 ----- resume key
key_save ksav str &6 KEY_SAVE 0571 ----- save key
key_suspend kspd str &7 KEY_SUSPEND 0627 ----- suspend key
key_undo kund str &8 KEY_UNDO 0630 ----- undo key
key_sbeg kBEG str &9 KEY_SBEG 0572 ----- shifted begin key
key_scancel kCAN str &0 KEY_SCANCEL 0573 ----- shifted cancel key
key_scommand kCMD str *1 KEY_SCOMMAND 0574 ----- shifted command key
key_scopy kCPY str *2 KEY_SCOPY 0575 ----- shifted copy key
key_screate kCRT str *3 KEY_SCREATE 0576 ----- shifted create key
key_sdc kDC str *4 KEY_SDC 0577 ----- shifted delete-character key
key_sdl kDL str *5 KEY_SDL 0600 ----- shifted delete-line key
key_select kslt str *6 KEY_SELECT 0601 ----- select key
key_send kEND str *7 KEY_SEND 0602 ----- shifted end key
key_seol kEOL str *8 KEY_SEOL 0603 ----- shifted clear-to-end-of-line key
key_sexit kEXT str *9 KEY_SEXIT 0604 ----- shifted exit key
key_sfind kFND str *0 KEY_SFIND 0605 ----- shifted find key
key_shelp kHLP str #1 KEY_SHELP 0606 ----- shifted help key
key_shome kHOM str #2 KEY_SHOME 0607 ----- shifted home key
key_sic kIC str #3 KEY_SIC 0610 ----- shifted insert-character key
key_sleft kLFT str #4 KEY_SLEFT 0611 ----- shifted left-arrow key
key_smessage kMSG str %a KEY_SMESSAGE 0612 ----- shifted message key
key_smove kMOV str %b KEY_SMOVE 0613 ----- shifted move key
key_snext kNXT str %c KEY_SNEXT 0614 ----- shifted next key
key_soptions kOPT str %d KEY_SOPTIONS 0615 ----- shifted options key
key_sprevious kPRV str %e KEY_SPREVIOUS 0616 ----- shifted previous key
key_sprint kPRT str %f KEY_SPRINT 0617 ----- shifted print key
key_sredo kRDO str %g KEY_SREDO 0620 ----- shifted redo key
key_sreplace kRPL str %h KEY_SREPLACE 0621 ----- shifted replace key
key_sright kRIT str %i KEY_SRIGHT 0622 ----- shifted right-arrow key
key_srsume kRES str %j KEY_SRSUME 0623 ----- shifted resume key
key_ssave kSAV str !1 KEY_SSAVE 0624 ----- shifted save key
key_ssuspend kSPD str !2 KEY_SSUSPEND 0625 ----- shifted suspend key
key_sundo kUND str !3 KEY_SUNDO 0626 ----- shifted undo key
req_for_input rfi str RF - - ----- send next input char (for ptys)
key_f11 kf11 str F1 KEY_F(11) - ----E F11 function key
key_f12 kf12 str F2 KEY_F(12) - ----E F12 function key
key_f13 kf13 str F3 KEY_F(13) - ----E F13 function key
key_f14 kf14 str F4 KEY_F(14) - ----E F14 function key
key_f15 kf15 str F5 KEY_F(15) - ----E F15 function key
key_f16 kf16 str F6 KEY_F(16) - ----E F16 function key
key_f17 kf17 str F7 KEY_F(17) - ----E F17 function key
key_f18 kf18 str F8 KEY_F(18) - ----E F18 function key
key_f19 kf19 str F9 KEY_F(19) - ----E F19 function key
key_f20 kf20 str FA KEY_F(20) - ----E F20 function key
key_f21 kf21 str FB KEY_F(21) - ----E F21 function key
key_f22 kf22 str FC KEY_F(22) - ----E F22 function key
key_f23 kf23 str FD KEY_F(23) - ----E F23 function key
key_f24 kf24 str FE KEY_F(24) - ----E F24 function key
key_f25 kf25 str FF KEY_F(25) - ----E F25 function key
key_f26 kf26 str FG KEY_F(26) - ----E F26 function key
key_f27 kf27 str FH KEY_F(27) - ----E F27 function key
key_f28 kf28 str FI KEY_F(28) - ----E F28 function key
key_f29 kf29 str FJ KEY_F(29) - ----E F29 function key
key_f30 kf30 str FK KEY_F(30) - ----E F30 function key
key_f31 kf31 str FL KEY_F(31) - ----E F31 function key
key_f32 kf32 str FM KEY_F(32) - ----E F32 function key
key_f33 kf33 str FN KEY_F(33) - ----E F33 function key
key_f34 kf34 str FO KEY_F(34) - ----E F34 function key
key_f35 kf35 str FP KEY_F(35) - ----E F35 function key
key_f36 kf36 str FQ KEY_F(36) - ----E F36 function key
key_f37 kf37 str FR KEY_F(37) - ----E F37 function key
key_f38 kf38 str FS KEY_F(38) - ----E F38 function key
key_f39 kf39 str FT KEY_F(39) - ----E F39 function key
key_f40 kf40 str FU KEY_F(40) - ----E F40 function key
key_f41 kf41 str FV KEY_F(41) - ----E F41 function key
key_f42 kf42 str FW KEY_F(42) - ----E F42 function key
key_f43 kf43 str FX KEY_F(43) - ----E F43 function key
key_f44 kf44 str FY KEY_F(44) - ----E F44 function key
key_f45 kf45 str FZ KEY_F(45) - ----E F45 function key
key_f46 kf46 str Fa KEY_F(46) - ----E F46 function key
key_f47 kf47 str Fb KEY_F(47) - ----E F47 function key
key_f48 kf48 str Fc KEY_F(48) - ----E F48 function key
key_f49 kf49 str Fd KEY_F(49) - ----E F49 function key
key_f50 kf50 str Fe KEY_F(50) - ----E F50 function key
key_f51 kf51 str Ff KEY_F(51) - ----E F51 function key
key_f52 kf52 str Fg KEY_F(52) - ----E F52 function key
key_f53 kf53 str Fh KEY_F(53) - ----E F53 function key
key_f54 kf54 str Fi KEY_F(54) - ----E F54 function key
key_f55 kf55 str Fj KEY_F(55) - ----E F55 function key
key_f56 kf56 str Fk KEY_F(56) - ----E F56 function key
key_f57 kf57 str Fl KEY_F(57) - ----E F57 function key
key_f58 kf58 str Fm KEY_F(58) - ----E F58 function key
key_f59 kf59 str Fn KEY_F(59) - ----E F59 function key
key_f60 kf60 str Fo KEY_F(60) - ----E F60 function key
key_f61 kf61 str Fp KEY_F(61) - ----E F61 function key
key_f62 kf62 str Fq KEY_F(62) - ----E F62 function key
key_f63 kf63 str Fr KEY_F(63) - ----E F63 function key
clr_bol el1 str cb - - ----- Clear to beginning of line
clear_margins mgc str MC - - ----- clear right and left soft margins
set_left_margin smgl str ML - - ----- set left soft margin at current column. See smgl. (ML is not in BSD termcap).
set_right_margin smgr str MR - - ----- set right soft margin at current column
device_type devt str dv - - ----- Indicate language/codeset support
code_set_init csin str ci - - ----- Init sequence for multiple codesets
set0_des_seq s0ds str s0 - - ----- Shift to codeset 0 (EUC set 0, ASCII)
set1_des_seq s1ds str s1 - - ----- Shift to codeset 1
set2_des_seq s2ds str s2 - - ----- Shift to codeset 2
set3_des_seq s3ds str s3 - - ----- Shift to codeset 3
key_mouse kmous str Km KEY_MOUSE 0631 ----- Mouse event has occurred
mouse_info minfo str Mi - - ----- Mouse status information
req_mouse_pos reqmp str RQ - - ----- Request mouse position
get_mouse getm str Gm - - ----- Curses should get button events, parameter #1 not documented.
release_mouse relm str Rm - - ----- Curses should release the mouse */
color_names colornm str Yw - - ----- Give name for color #1
initialize_color initc str Ic - - ----- initialize color #1 to (#2,#3,#4)
initialize_pair initp str Ip - - ----- Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)
orig_colors oc str oc - - ----- Set all color pairs to the original ones
orig_pair op str op - - ----- Set default pair to its original value
set_a_background setab str AB - - ----- Set background color to #1, using ANSI escape
set_a_foreground setaf str AF - - ----- Set foreground color to #1, using ANSI escape
set_background setb str Sb - - ----- Set background color #1
set_color_pair scp str sp - - ----- Set current color pair to #1
set_foreground setf str Sf - - ----- Set foreground color #1
#%.TE
#%.ad
#%
# The magic token below tells the tic compiler-generator code that all the caps
# past it should be ignored (not written out) when dumping terminfo objects. It
# also tells the man page table generator not to pass through following lines
# This means we can have obsolete capabilities and pseudo-capabilities that are
# recognized for termcap or terminfo compilation, but not output.
#
# %%-STOP-HERE-%%
#
# Don't move this casually! In fact, don't move it at all unless you're
# either doing it to add System V or XPG4 extensions, or have decided you
# don't care about SVr4 binary compatibility.
#
#############################################################################
#
# TERMCAP EXTENSION CAPABILITIES
#
# The capabilities below are either obsolete or extensions on certain systems.
# They are not used by SVR4 terminfo. Some are used by captoinfo to translate
# termcap sources; the rest are listed for completeness, and in case somebody
# cares about them enough to hack in code that will translate them into
# terminfo capabilities.
#
# The first part of the list is from Ross Ridge's `mytinfo' package
# (comp.sources.unix, volume 26); the variable names and terminfo names (as
# well as the termcap codes) match his list.
#
# This group of codes is not marked obsolete in 4.4BSD, but have no direct
# terminfo equivalents. The rs capability is specially translated to terminfo
# r2, and vice versa, if an entry does not already have an r2. Similarly,
# i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2).
# The ug capability is thrown away, but assumed to be whatever sg is if the
# latter is nonzero and we're dumping in termcap format.
#
termcap_init2 OTi2 str i2 - - YB--- secondary initialization string
termcap_reset OTrs str rs - - YB-G- terminal reset string
magic_cookie_glitch_ul OTug num ug - - YBCGE number of blanks left by ul
#
# Obsolete termcap capabilities. Some are used for termcap translation. The
# code uses the 'OT' prefix we put on obsolete capabilities to suppress
# printing them in terminfo source dumps of compiled entries.
#
backspaces_with_bs OTbs bool bs - - YBCGE uses ^H to move left
crt_no_scrolling OTns bool ns - - YBCG- crt cannot scroll
no_correctly_working_cr OTnc bool nc - - YBCG- no way to go to start of line
carriage_return_delay OTdC num dC - - YB-G- pad needed for CR
new_line_delay OTdN num dN - - YB-G- pad needed for LF
linefeed_if_not_lf OTnl str nl - - YBCGE use to move down
backspace_if_not_bs OTbc str bc - - YBCGE move left, if not ^H
#
# GNU termcap library extensions. The GNU termcap file distributed with
# Emacs no longer uses these, but MT showed up in pre-9.0 versions of the
# BSD termcap file. The name clash with terminfo MT is resolved by type
# info; MT is converted to km.
#
gnu_has_meta_key OTMT bool MT - - ----E has meta key
# gnu_tab_width OTtw num tw - - ----E tab width in spaces
#
# GNU termcap *does* include the following extended capability, Only the
# now-obsolete Ann Arbor terminals used it.
#
# gnu_change_scroll_region OTcS str cS - - ---GE alternate set scrolling region
#
# The following comments describe capnames so ancient that I believe no
# software uses them any longer. Some of these have to go because they
# clash with terminfo names in ways that cannot be resolved by type
# information.
#
# These mytinfo codes are not used in the 4.4BSD curses code. They are
# marked obsolete in the 4.4BSD manual pages.
#
# There is one conflict with terminfo; ma is in both. This conflict is
# resolved by type information.
#
# The `ko' capability is translated by special code. It should contain a
# comma-separated list of capabilities for which there are corresponding keys.
# The `kn' code is accepted but ignored.
#
# The `ma' capability was a 4.0BSD feature used by vi version 2.
# It consists of pairs of characters corresponding to kl, kr, ku, kd, and kh.
# Besides being obsolete, that interpretation conflicts with max_attributes.
#
# Here is a description of memory_lock_above and memory_unlock:
# "You can 'freeze' data on the screen by turning on Memory Lock in a line of
# text. All lines above the cursor's current line become locked in place on
# the screen. Then enter data normally. When the screen fills up, any
# further data entered forces the first line of unfrozen line text to scroll
# under the frozen data. Lines scrolled off the screen are inserted into
# memory immediately preceding the first frozen line." (from the HP 700/96
# User's manual). VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l.
#
# Applications that use terminfo are supposed to behave as though xr is
# always true.
#
linefeed_is_newline OTNL bool NL - - YB--- move down with \n
# even_parity OTEP bool EP - - -B--- terminal requires even parity
# odd_parity OTOP bool OP - - -B--- terminal requires odd parity
# half_duplex OTHD bool HD - - -B--- terminal is half-duplex
# lower_case_only OTLC bool LC - - -B--- terminal has only lower case
# upper_case_only OTUC bool UC - - -B--- terminal has only upper case
backspace_delay OTdB num dB - - YB-G- padding required for ^H
# form_feed_delay OTdF num dF - - -B-G- padding required for ^L
horizontal_tab_delay OTdT num dT - - YB-G- padding required for ^I
# vertical_tab_delay OTdV num dV - - -B--- padding required for ^V
number_of_function_keys OTkn num kn - - -B-G- count of function keys
other_non_function_keys OTko str ko - - -B-G- list of self-mapped keycaps
arrow_key_map OTma str ma - - YBC-- map motion-keys for vi version 2
# memory_lock_above OTml str ml - - -B--- lock visible screen memory above the current line
# memory_unlock OTmu str mu - - -B--- unlock visible screen memory above the current line
has_hardware_tabs OTpt bool pt - - YB--- has 8-char tabs invoked with ^I
return_does_clr_eol OTxr bool xr - - YB--- return clears the line
# tek_4025_insert_line OTxx bool xx - - -BC-- Tektronix 4025 insert-line glitch
#
# mytinfo described this as a termcap capability, but it's not listed in the
# 4.4BSD man pages, and not found in the 4.4BSD termcap file. The ncurses
# package, like System V, behaves as though it is always true.
#
# rind_only_at_top OTxq bool xq - - ----- reverse index only works from top line
#
# University of Waterloo termcap extensions (as described in mytinfo).
# The `xl' termcap file clashes with a terminfo name; this ambiguity cannot
# be resolved by a type check. The descriptions are guesses from what was
# in the mytinfo tables.
#
# key_interrupt_char OTki str ki - - ----- string set by interrupt key (?)
# key_kill_char OTkk str kk - - ----- string set by kill key (?)
# key_suspend_char OTkz str kz - - ----- string set by suspend key (?)
# initialization_messy OTxc bool xc - - ----- initialization leaves garbage on the screen (?)
# ind_at_bottom_does_cr OTxl bool xl - - ----- index does a carriage return
#
# Nonstandard capabilities unique to Ross Ridge's `mytinfo' package.
# SR clashes with a terminfo name; this ambiguity cannot be resolved by a type
# check.
#
# scroll_left OTsl1 str Sl - - ----- scroll screen leftward
# scroll_right OTsr1 str Sr - - ----- scroll screen rightward
# parm_scroll_left OTsl str SL - - ----- scroll screen leftward #1 characters
# parm_scroll_right OTsr str SR - - ----- scroll screen rightward #1 characters
#
# The mytinfo capabilities end here.
#
# XENIX extensions:
#
# Xenix defined its own set of forms-drawing capabilities:
#
# cap IBM ASCII description ACS ASCII
# --- ----------- -------------------- ------------- ------
# G1 191 \277 M-? single upper right ACS_URCORNER
# G2 218 \332 M-Z single upper left ACS_ULCORNER
# G3 192 \300 M-@ single lower left ACS_LLCORNER
# G4 217 \331 M-Y single lower right ACS_LRCORNER
# G5 187 \273 M-; double upper right
# G6 201 \311 M-I double upper left
# G7 200 \310 M-H double lower left
# G8 188 \274 M-< double lower right
# GC 197 \305 M-E single intersection ACS_PLUS _ _
# GD 194 \302 M-B single down-tick ACS_TTEE |
# GH 196 \304 M-D single horizontal line ACS_HLINE
# GL 180 \264 M-4 single left tick ACS_RTEE -|
# GR 195 \303 M-C single right tick ACS_LTEE |-
# GU 193 \301 M-A single up tick ACS_BTEE _|_
# GV 179 \263 M-3 single vertical line ACS_VLINE
# Gc 206 \316 M-N double intersection
# Gd 203 \313 M-K double down tick
# Gh 205 \315 M-M double horizontal line
# Gl 204 \204 M-L double left tick
# Gr 185 \271 M-9 double right tick
# Gu 202 \312 M-J double up tick
# Gv 186 \272 M-: double vertical line
#
# The compiler will translate the single-line caps and discard the others
# (via IGNORE aliases further down). We don't want to do normal pad
# translation on these, they're often single-character printable ASCII
# strings that happen to be numerics. There's awk code in parametrized.sh
# that detects the acs_ prefix and uses it to suppress pad translation.
# These terminfo names are invented.
#
acs_ulcorner OTG2 str G2 - - ----- single upper left
acs_llcorner OTG3 str G3 - - ----- single lower left
acs_urcorner OTG1 str G1 - - ----- single upper right
acs_lrcorner OTG4 str G4 - - ----- single lower right
acs_ltee OTGR str GR - - ----- tee pointing right
acs_rtee OTGL str GL - - ----- tee pointing left
acs_btee OTGU str GU - - ----- tee pointing up
acs_ttee OTGD str GD - - ----- tee pointing down
acs_hline OTGH str GH - - ----- single horizontal line
acs_vline OTGV str GV - - ----- single vertical line
acs_plus OTGC str GC - - ----- single intersection
#
#############################################################################
#
# TERMINFO EXTENSION CAPABILITIES
#
# (see Caps-ncurses for the complete set of comments)
#
memory_lock meml str ml - - ----K lock memory above cursor
memory_unlock memu str mu - - ----K unlock memory
box_chars_1 box1 str bx - - ----K box characters primary set
#
#############################################################################
diff --git a/contrib/ncurses/include/MKkey_defs.sh b/contrib/ncurses/include/MKkey_defs.sh
index 865a7b9c8b87..86d6891c3693 100755
--- a/contrib/ncurses/include/MKkey_defs.sh
+++ b/contrib/ncurses/include/MKkey_defs.sh
@@ -1,188 +1,196 @@
#! /bin/sh
-# $Id: MKkey_defs.sh,v 1.19 2020/02/02 23:34:34 tom Exp $
+# $Id: MKkey_defs.sh,v 1.21 2020/08/17 10:45:33 tom Exp $
##############################################################################
# Copyright 2019,2020 Thomas E. Dickey #
# Copyright 2001-2013,2017 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# MKkey_defs.sh -- generate function-key definitions for curses.h
#
# Author: Thomas E. Dickey 2001
#
# Extract function-key definitions from the Caps file
#
: ${AWK-awk}
test $# = 0 && set Caps
data=data$$
pass1=pass1_$$
pass2=pass2_$$
pass3=pass3_$$
pass4=pass4_$$
trap 'rm -f $data pass[1234]_$$' EXIT INT QUIT TERM HUP
# change repeated tabs (used for readability) to single tabs (needed to make
# awk see the right field alignment of the corresponding columns):
if sort -k 6 "$@" >$data 2>/dev/null
then
# POSIX
sed -e 's/[ ][ ]*/ /g' "$@" |sort -n -k 6 >$data
elif sort -n +5 "$@" >$data 2>/dev/null
then
# SunOS (and SVr4, marked as obsolete but still recognized)
sed -e 's/[ ][ ]*/ /g' "$@" |sort -n +5 >$data
else
echo "Your sort utility is broken. Please install one that works." >&2
exit 1
fi
# add keys that we generate automatically:
cat >>$data <<EOF
-key_resize kr1 str R1 KEY_RESIZE + ----- Terminal resize event
-key_event kv1 str V1 KEY_EVENT + ----- We were interrupted by an event
+key_resize kr1 str R1 KEY_RESIZE + NCURSES_EXT_FUNCS Terminal resize event
EOF
THIS=./`basename $0`
cat <<EOF
/*
* These definitions were generated by $THIS $*
*/
EOF
# KEY_RESET
maxkey=345
for pass in 1 2 3 4
do
output=pass${pass}_$$
${AWK-awk} >$output <$data '
function print_cols(text,cols) {
printf "%s", text
len = length(text);
while (len < cols) {
printf " "
len += 8;
}
}
function decode(keycode) {
result = 0;
if (substr(keycode, 1, 2) == "0x") {
digits="0123456789abcdef";
} else if (substr(keycode, 1, 1) == "0") {
digits="01234567";
} else {
digits="0123456789";
}
while (length(keycode) != 0) {
digit=substr(keycode, 1, 1);
keycode=substr(keycode, 2);
result = result * length(digits) + index(digits, digit) - 1;
}
return result;
}
BEGIN {
maxkey='$maxkey';
pass='$pass';
key_max=1;
bits=1;
while (key_max < maxkey) {
bits = bits + 1;
key_max = (key_max * 2) + 1;
}
octal_fmt = sprintf ("%%0%do", (bits + 2) / 3 + 1);
}
/^$/ {next;}
/^#/ {next;}
/^capalias/ {next;}
/^infoalias/ {next;}
/^used_by/ {next;}
/^userdef/ {next;}
$5 != "-" && $6 != "-" {
if ($6 == "+") {
if (pass == 1 || pass == 2)
next;
thiskey=maxkey + 1;
} else {
if (pass == 3)
next;
thiskey=decode($6);
}
if (thiskey > maxkey)
maxkey = thiskey;
if (pass == 2 || pass == 3) {
showkey=sprintf(octal_fmt, thiskey);
+ ifdef = 0;
+ if (index($7,"NCURSES_") == 1) {
+ ifdef = 1;
+ printf "\n";
+ printf "#ifdef %s\n", $7;
+ }
if ($5 == "KEY_F(0)" ) {
printf "#define "
print_cols("KEY_F0", 16);
print_cols(showkey, 16);
print "/* Function keys. Space for 64 */";
printf "#define "
print_cols("KEY_F(n)", 16);
print_cols("(KEY_F0+(n))", 16);
print "/* Value of function key n */"
} else {
printf "#define "
print_cols($5, 16);
print_cols(showkey, 16);
printf "/*"
for (i = 8; i <= NF; i++)
printf " %s", $i
print " */"
}
+ if (ifdef != 0) {
+ printf "#endif\n";
+ }
}
}
END {
if (pass == 1) {
print maxkey;
} else if (pass == 4) {
print "";
printf "#define ";
print_cols("KEY_MAX", 16);
result = sprintf (octal_fmt, key_max);
print_cols(result, 16);
printf "/* Maximum key value is ";
printf octal_fmt, maxkey;
print " */";
}
}
'
if test $pass = 1 ; then
maxkey=`cat $pass1`
fi
done
cat $pass2
cat $pass3
cat $pass4
diff --git a/contrib/ncurses/include/MKterm.h.awk.in b/contrib/ncurses/include/MKterm.h.awk.in
index ee4e2b48dc1f..c93cdeac6971 100644
--- a/contrib/ncurses/include/MKterm.h.awk.in
+++ b/contrib/ncurses/include/MKterm.h.awk.in
@@ -1,391 +1,416 @@
# vile:awkmode
function declare_termtype(number,suffix) {
printf "typedef struct termtype%s { /* in-core form of terminfo data */\n", suffix;
print " char *term_names; /* str_table offset of term names */"
print " char *str_table; /* pointer to string table */"
print " NCURSES_SBOOL *Booleans; /* array of boolean values */"
printf " %-5s *Numbers; /* array of integer values */\n", number;
print " char **Strings; /* array of string offsets */"
print ""
print "#if NCURSES_XNAMES"
print " char *ext_str_table; /* pointer to extended string table */"
print " char **ext_Names; /* corresponding names */"
print ""
print " unsigned short num_Booleans;/* count total Booleans */";
print " unsigned short num_Numbers; /* count total Numbers */";
print " unsigned short num_Strings; /* count total Strings */";
print ""
print " unsigned short ext_Booleans;/* count extensions to Booleans */";
print " unsigned short ext_Numbers; /* count extensions to Numbers */";
print " unsigned short ext_Strings; /* count extensions to Strings */";
print "#endif /* NCURSES_XNAMES */"
print ""
printf "} TERMTYPE%s;\n", suffix;
}
BEGIN {
lcurl = "{";
rcurl = "}";
print "/****************************************************************************"
print " * Copyright 2018-2019,2020 Thomas E. Dickey *"
print " * Copyright 1998-2013,2017 Free Software Foundation, Inc. *"
print " * *"
print " * Permission is hereby granted, free of charge, to any person obtaining a *"
print " * copy of this software and associated documentation files (the *"
print " * \"Software\"), to deal in the Software without restriction, including *"
print " * without limitation the rights to use, copy, modify, merge, publish, *"
print " * distribute, distribute with modifications, sublicense, and/or sell *"
print " * copies of the Software, and to permit persons to whom the Software is *"
print " * furnished to do so, subject to the following conditions: *"
print " * *"
print " * The above copyright notice and this permission notice shall be included *"
print " * in all copies or substantial portions of the Software. *"
print " * *"
print " * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS *"
print " * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *"
print " * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *"
print " * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *"
print " * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *"
print " * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *"
print " * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *"
print " * *"
print " * Except as contained in this notice, the name(s) of the above copyright *"
print " * holders shall not be used in advertising or otherwise to promote the *"
print " * sale, use or other dealings in this Software without prior written *"
print " * authorization. *"
print " ****************************************************************************/"
print ""
print "/****************************************************************************/"
print "/* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 */"
print "/* and: Eric S. Raymond <esr@snark.thyrsus.com> */"
print "/* and: Thomas E. Dickey 1995-on */"
print "/****************************************************************************/"
print ""
- print "/* $Id: MKterm.h.awk.in,v 1.74 2020/02/02 23:34:34 tom Exp $ */"
+ print "/* $Id: MKterm.h.awk.in,v 1.78 2020/10/31 23:14:24 tom Exp $ */"
print ""
print "/*"
print "** term.h -- Definition of struct term"
print "*/"
print ""
print "#ifndef NCURSES_TERM_H_incl"
print "#define NCURSES_TERM_H_incl 1"
print ""
print "#undef NCURSES_VERSION"
print "#define NCURSES_VERSION \"@NCURSES_MAJOR@.@NCURSES_MINOR@\""
print ""
print "#include <ncurses_dll.h>"
print ""
print "#ifdef __cplusplus"
printf "extern \"C\" %s\n", lcurl;
print "#endif"
print ""
print "/* Make this file self-contained by providing defaults for the HAVE_TERMIO[S]_H"
print " * definition (based on the system for which this was configured)."
print " */"
print ""
+ print "#ifndef __NCURSES_H"
+ print ""
+ print "typedef struct screen SCREEN;"
+ print ""
+ print "#if @NCURSES_SP_FUNCS@"
+ print "#undef NCURSES_SP_FUNCS"
+ print "#define NCURSES_SP_FUNCS @NCURSES_PATCH@"
+ print "#undef NCURSES_SP_NAME"
+ print "#define NCURSES_SP_NAME(name) name##_sp"
+ print ""
+ print "/* Define the sp-funcs helper function */"
+ print "#undef NCURSES_SP_OUTC"
+ print "#define NCURSES_SP_OUTC NCURSES_SP_NAME(NCURSES_OUTC)"
+ print "typedef int (*NCURSES_SP_OUTC)(SCREEN*, int);"
+ print "#endif"
+ print ""
+ print "#endif /* __NCURSES_H */"
+ print ""
print "#undef NCURSES_CONST"
print "#define NCURSES_CONST @NCURSES_CONST@"
print ""
print "#undef NCURSES_SBOOL"
print "#define NCURSES_SBOOL @NCURSES_SBOOL@"
print ""
print "#undef NCURSES_USE_DATABASE"
print "#define NCURSES_USE_DATABASE @NCURSES_USE_DATABASE@"
print ""
print "#undef NCURSES_USE_TERMCAP"
print "#define NCURSES_USE_TERMCAP @NCURSES_USE_TERMCAP@"
print ""
print "#undef NCURSES_XNAMES"
print "#define NCURSES_XNAMES @NCURSES_XNAMES@"
print ""
print "/* We will use these symbols to hide differences between"
print " * termios/termio/sgttyb interfaces."
print " */"
print "#undef TTY"
print "#undef SET_TTY"
print "#undef GET_TTY"
print ""
print "/* Assume POSIX termio if we have the header and function */"
print "/* #if HAVE_TERMIOS_H && HAVE_TCGETATTR */"
print "#if @HAVE_TERMIOS_H@ && @HAVE_TCGETATTR@"
print ""
print "#undef TERMIOS"
print "#define TERMIOS 1"
print ""
print "#include <termios.h>"
print "#define TTY struct termios"
print ""
print "#else /* !HAVE_TERMIOS_H */"
print ""
print "/* #if HAVE_TERMIO_H */"
print "#if @HAVE_TERMIO_H@"
print ""
print "#undef TERMIOS"
print "#define TERMIOS 1"
print ""
print "#include <termio.h>"
print "#define TTY struct termio"
print ""
print "#else /* !HAVE_TERMIO_H */"
print ""
- print "#if _WIN32"
- print "# include <ncurses_mingw.h>"
- print "# define TTY struct termios"
+ print "#if (defined(_WIN32) || defined(_WIN64))"
+ print "#if @EXP_WIN32_DRIVER@"
+ print "#include <win32_curses.h>"
+ print "#define TTY struct winconmode"
+ print "#else"
+ print "#include <ncurses_mingw.h>"
+ print "#define TTY struct termios"
+ print "#endif"
print "#else"
print "#undef TERMIOS"
print "#include <sgtty.h>"
print "#include <sys/ioctl.h>"
print "#define TTY struct sgttyb"
print "#endif /* MINGW32 */"
print "#endif /* HAVE_TERMIO_H */"
print ""
print "#endif /* HAVE_TERMIOS_H */"
print ""
print "#ifdef TERMIOS"
print "#define GET_TTY(fd, buf) tcgetattr(fd, buf)"
print "#define SET_TTY(fd, buf) tcsetattr(fd, TCSADRAIN, buf)"
+ print "#elif @EXP_WIN32_DRIVER@ && (defined(_WIN32) || defined(_WIN64))"
+ print "#define GET_TTY(fd, buf) _nc_console_getmode(_nc_console_fd2handle(fd),buf)"
+ print "#define SET_TTY(fd, buf) _nc_console_setmode(_nc_console_fd2handle(fd),buf)"
print "#else"
print "#define GET_TTY(fd, buf) gtty(fd, buf)"
print "#define SET_TTY(fd, buf) stty(fd, buf)"
print "#endif"
print ""
print "#ifndef GCC_NORETURN"
print "#define GCC_NORETURN /* nothing */"
print "#endif"
print ""
print "#define NAMESIZE 256"
print ""
print "/* The cast works because TERMTYPE is the first data in TERMINAL */"
print "#define CUR ((TERMTYPE *)(cur_term))->"
print ""
}
$2 == "%%-STOP-HERE-%%" {
print ""
printf "#define BOOLWRITE %d\n", BoolCount
printf "#define NUMWRITE %d\n", NumberCount
printf "#define STRWRITE %d\n", StringCount
print ""
print "/* older synonyms for some capabilities */"
print "#define beehive_glitch no_esc_ctlc"
print "#define teleray_glitch dest_tabs_magic_smso"
print ""
print "/* HPUX-11 uses this name rather than the standard one */"
print "#ifndef micro_char_size"
print "#define micro_char_size micro_col_size"
print "#endif"
print ""
print "#ifdef __INTERNAL_CAPS_VISIBLE"
}
/^#/ { next; }
/^used_by/ { next ; }
/^userdef/ { next ; }
$1 == "acs_chars" {
acsindex = StringCount;
}
$3 == "bool" {
printf "#define %-30s CUR Booleans[%d]\n", $1, BoolCount++
}
$3 == "num" {
printf "#define %-30s CUR Numbers[%d]\n", $1, NumberCount++
}
$3 == "str" {
printf "#define %-30s CUR Strings[%d]\n", $1, StringCount++
}
END {
print "#endif /* __INTERNAL_CAPS_VISIBLE */"
print ""
print ""
print "/*"
print " * Predefined terminfo array sizes"
print " */"
printf "#define BOOLCOUNT %d\n", BoolCount
printf "#define NUMCOUNT %d\n", NumberCount
printf "#define STRCOUNT %d\n", StringCount
print ""
print "/* used by code for comparing entries */"
print "#define acs_chars_index ", acsindex
print ""
declare_termtype("short","");
print ""
print "/*"
print " * The only reason these structures are visible is for read-only use."
print " * Programs which modify the data are not, never were, portable across"
print " * curses implementations."
print " */"
print "#ifdef NCURSES_INTERNALS"
print ""
if (@NCURSES_EXT_COLORS@) {
declare_termtype("int","2");
} else {
print "typedef TERMTYPE TERMTYPE2;"
}
print ""
print "typedef struct term { /* describe an actual terminal */"
print " TERMTYPE type; /* terminal type description */"
print " short Filedes; /* file description being written to */"
print " TTY Ottyb; /* original state of the terminal */"
print " TTY Nttyb; /* current state of the terminal */"
print " int _baudrate; /* used to compute padding */"
print " char * _termname; /* used for termname() */"
if (@NCURSES_EXT_COLORS@) {
print " TERMTYPE2 type2; /* extended terminal type description */"
}
print "} TERMINAL;"
print "#else"
print "typedef struct term TERMINAL;"
print "#endif /* NCURSES_INTERNALS */"
print ""
print ""
print "#if @BROKEN_LINKER@ && !@cf_cv_enable_reentrant@"
print "extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term;"
print "#elif @cf_cv_enable_reentrant@"
print "NCURSES_WRAPPED_VAR(TERMINAL *, cur_term);"
print "#define cur_term NCURSES_PUBLIC_VAR(cur_term())"
print "#else"
print "extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term;"
print "#endif"
print ""
print "#if @BROKEN_LINKER@ || @cf_cv_enable_reentrant@"
print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolnames);"
print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolcodes);"
print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolfnames);"
print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numnames);"
print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numcodes);"
print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numfnames);"
print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strnames);"
print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strcodes);"
print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strfnames);"
print ""
print "#define boolnames NCURSES_PUBLIC_VAR(boolnames())"
print "#define boolcodes NCURSES_PUBLIC_VAR(boolcodes())"
print "#define boolfnames NCURSES_PUBLIC_VAR(boolfnames())"
print "#define numnames NCURSES_PUBLIC_VAR(numnames())"
print "#define numcodes NCURSES_PUBLIC_VAR(numcodes())"
print "#define numfnames NCURSES_PUBLIC_VAR(numfnames())"
print "#define strnames NCURSES_PUBLIC_VAR(strnames())"
print "#define strcodes NCURSES_PUBLIC_VAR(strcodes())"
print "#define strfnames NCURSES_PUBLIC_VAR(strfnames())"
print ""
print "#else"
print ""
print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolnames[];"
print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolcodes[];"
print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolfnames[];"
print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numnames[];"
print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numcodes[];"
print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numfnames[];"
print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strnames[];"
print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strcodes[];"
print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strfnames[];"
print ""
print "#endif"
print ""
print "/*"
print " * These entrypoints are used only by the ncurses utilities such as tic."
print " */"
print "#ifdef NCURSES_INTERNALS"
print ""
print "extern NCURSES_EXPORT(int) _nc_set_tty_mode (TTY *buf);"
print "extern NCURSES_EXPORT(int) _nc_read_entry2 (const char * const, char * const, TERMTYPE2 *const);"
print "extern NCURSES_EXPORT(int) _nc_read_file_entry (const char *const, TERMTYPE2 *);"
print "extern NCURSES_EXPORT(int) _nc_read_termtype (TERMTYPE2 *, char *, int);"
print "extern NCURSES_EXPORT(char *) _nc_first_name (const char *const);"
print "extern NCURSES_EXPORT(int) _nc_name_match (const char *const, const char *const, const char *const);"
+ print "extern NCURSES_EXPORT(char *) _nc_tiparm(int, const char *, ...);"
print ""
print "#endif /* NCURSES_INTERNALS */"
print ""
print ""
print "/*"
print " * These entrypoints are used by tack 1.07."
print " */"
print "extern NCURSES_EXPORT(const TERMTYPE *) _nc_fallback (const char *);"
print "extern NCURSES_EXPORT(int) _nc_read_entry (const char * const, char * const, TERMTYPE *const);"
print ""
print "/*"
print " * Normal entry points"
print " */"
print "extern NCURSES_EXPORT(TERMINAL *) set_curterm (TERMINAL *);"
print "extern NCURSES_EXPORT(int) del_curterm (TERMINAL *);"
print ""
print "/* miscellaneous entry points */"
print "extern NCURSES_EXPORT(int) restartterm (NCURSES_CONST char *, int, int *);"
print "extern NCURSES_EXPORT(int) setupterm (const char *,int,int *);"
print ""
print "/* terminfo entry points, also declared in curses.h */"
print "#if !defined(__NCURSES_H)"
print "extern NCURSES_EXPORT(char *) tigetstr (const char *);"
print "extern NCURSES_EXPORT_VAR(char) ttytype[];"
print "extern NCURSES_EXPORT(int) putp (const char *);"
print "extern NCURSES_EXPORT(int) tigetflag (const char *);"
print "extern NCURSES_EXPORT(int) tigetnum (const char *);"
print ""
print "#if @NCURSES_TPARM_VARARGS@ /* NCURSES_TPARM_VARARGS */"
print "extern NCURSES_EXPORT(char *) tparm (const char *, ...); /* special */"
print "#else"
print "extern NCURSES_EXPORT(char *) tparm (const char *, long,long,long,long,long,long,long,long,long); /* special */"
- print "extern NCURSES_EXPORT(char *) tparm_varargs (const char *, ...); /* special */"
print "#endif"
print ""
print "extern NCURSES_EXPORT(char *) tiparm (const char *, ...); /* special */"
print ""
print "#endif /* __NCURSES_H */"
print ""
print "/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */"
print "#if !defined(NCURSES_TERMCAP_H_incl)"
print "extern NCURSES_EXPORT(char *) tgetstr (const char *, char **);"
print "extern NCURSES_EXPORT(char *) tgoto (const char *, int, int);"
print "extern NCURSES_EXPORT(int) tgetent (char *, const char *);"
print "extern NCURSES_EXPORT(int) tgetflag (const char *);"
print "extern NCURSES_EXPORT(int) tgetnum (const char *);"
print "extern NCURSES_EXPORT(int) tputs (const char *, int, int (*)(int));"
print "#endif /* NCURSES_TERMCAP_H_incl */"
print ""
print "/*"
print " * Include curses.h before term.h to enable these extensions."
print " */"
print "#if defined(NCURSES_SP_FUNCS) && (NCURSES_SP_FUNCS != 0)"
print ""
print "extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tigetstr) (SCREEN*, const char *);"
print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(putp) (SCREEN*, const char *);"
print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tigetflag) (SCREEN*, const char *);"
print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tigetnum) (SCREEN*, const char *);"
print ""
print "#if @NCURSES_TPARM_VARARGS@ /* NCURSES_TPARM_VARARGS */"
print "extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tparm) (SCREEN*, const char *, ...); /* special */"
print "#else"
print "extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tparm) (SCREEN*, const char *, long,long,long,long,long,long,long,long,long); /* special */"
- print "extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tparm_varargs) (SCREEN*, const char *, ...); /* special */"
print "#endif"
print ""
print "/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */"
print "extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tgetstr) (SCREEN*, const char *, char **);"
print "extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tgoto) (SCREEN*, const char *, int, int);"
print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tgetent) (SCREEN*, char *, const char *);"
print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tgetflag) (SCREEN*, const char *);"
print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tgetnum) (SCREEN*, const char *);"
print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tputs) (SCREEN*, const char *, int, NCURSES_SP_OUTC);"
print ""
print "extern NCURSES_EXPORT(TERMINAL *) NCURSES_SP_NAME(set_curterm) (SCREEN*, TERMINAL *);"
print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(del_curterm) (SCREEN*, TERMINAL *);"
print ""
print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(restartterm) (SCREEN*, NCURSES_CONST char *, int, int *);"
print "#endif /* NCURSES_SP_FUNCS */"
print ""
print "/*"
print " * Debugging features."
print " */"
print "extern NCURSES_EXPORT(void) exit_terminfo(int) GCC_NORETURN;"
print ""
print "#ifdef __cplusplus"
printf "%s\n", rcurl;
print "#endif"
print ""
print "#endif /* NCURSES_TERM_H_incl */"
}
diff --git a/contrib/ncurses/include/Makefile.in b/contrib/ncurses/include/Makefile.in
index d23c472b1c18..b911f8eadce1 100644
--- a/contrib/ncurses/include/Makefile.in
+++ b/contrib/ncurses/include/Makefile.in
@@ -1,146 +1,162 @@
-# $Id: Makefile.in,v 1.46 2020/02/02 23:34:34 tom Exp $
+# $Id: Makefile.in,v 1.51 2020/09/18 22:55:10 tom Exp $
##############################################################################
# Copyright 2019,2020 Thomas E. Dickey #
# Copyright 1998-2013,2015 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
-# Author: Thomas E. Dickey 1996-2001
+# Author: Thomas E. Dickey 1996-on
#
# Makefile for ncurses source code.
#
# This makes/installs ncurses include-files
#
# The variable 'srcdir' refers to the source-distribution, and can be set with
# the configure script by "--srcdir=DIR".
# turn off _all_ suffix rules; we'll generate our own
.SUFFIXES:
SHELL = @SHELL@
VPATH = @srcdir@
THIS = Makefile
DESTDIR = @DESTDIR@
srcdir = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
includedir = @includedir@
includesubdir = @includesubdir@
INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir)
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
AWK = @AWK@
LN_S = @LN_S@
+CC = @CC@
+CFLAGS = @CFLAGS@ @EXTRA_CFLAGS@
+CPPFLAGS = -DHAVE_CONFIG_H -I. @CPPFLAGS@
+
CTAGS = @CTAGS@
ETAGS = @ETAGS@
VERSION = @cf_cv_rel_version@
# The "Caps" file specifies the terminfo database format, as well as the list
# of function keys.
TERMINFO_CAPS = $(srcdir)/@TERMINFO_CAPS@
CAPLIST = $(TERMINFO_CAPS) \
$(srcdir)/Caps-ncurses
# These files are generated by the configure script
CONFIG_SRC = \
MKterm.h.awk \
curses.head \
ncurses_dll.h \
termcap.h \
unctrl.h
# These files are generated by this makefile
AUTO_SRC = \
curses.h \
hashsize.h \
ncurses_def.h \
parametrized.h \
config.h \
term.h
################################################################################
all \
libs \
depend \
sources \
install :: $(AUTO_SRC)
curses.h : $(CAPLIST) \
curses.head \
$(srcdir)/curses.tail \
$(srcdir)/MKkey_defs.sh
cat curses.head >$@
AWK=$(AWK) $(SHELL) $(srcdir)/MKkey_defs.sh $(CAPLIST) >>$@
+ $(SHELL) -c 'if test "@NCURSES_WGETCH_EVENTS@" = "1" ; then cat $(srcdir)/curses.events >>$@ ; fi'
$(SHELL) -c 'if test "@NCURSES_CH_T@" = "cchar_t" ; then cat $(srcdir)/curses.wide >>$@ ; fi'
cat $(srcdir)/curses.tail >>$@
term.h: $(CAPLIST) \
MKterm.h.awk
$(AWK) -f MKterm.h.awk $(CAPLIST) > $@
$(SHELL) $(srcdir)/edit_cfg.sh ../include/ncurses_cfg.h $@
hashsize.h: $(CAPLIST) \
$(srcdir)/MKhashsize.sh
$(SHELL) $(srcdir)/MKhashsize.sh $(CAPLIST) >$@
ncurses_def.h: $(srcdir)/ncurses_defs $(srcdir)/MKncurses_def.sh
AWK=$(AWK) $(SHELL) $(srcdir)/MKncurses_def.sh $(srcdir)/ncurses_defs >$@
parametrized.h: $(CAPLIST) \
$(srcdir)/MKparametrized.sh
AWK=$(AWK) $(SHELL) $(srcdir)/MKparametrized.sh $(CAPLIST) >$@
# This is required by pthread.h on MinGW
config.h:
touch $@
tags:
$(CTAGS) *.[ch]
@MAKE_UPPER_TAGS@TAGS:
@MAKE_UPPER_TAGS@ $(ETAGS) *.[ch]
mostlyclean ::
-rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace
clean :: mostlyclean
-rm -f $(AUTO_SRC)
-rm -rf *.dSYM
distclean :: clean
-rm -f Makefile $(CONFIG_SRC) config.h
realclean :: distclean
+# Verify that each header-file can be compiled without including another.
+check:
+ @$(SHELL) -c "for header in *.h;\
+ do \
+ echo \"** testing \$${header}\" ; \
+ echo \"#include <\$${header}>\" >headers.c; \
+ echo \"int main(void) { return 0; }\" >>headers.c; \
+ $(CC) -c $(CFLAGS) $(CPPFLAGS) headers.c; \
+ done"
+ -@rm -f headers.*
+
###############################################################################
# The remainder of this file is automatically generated during configuration
###############################################################################
diff --git a/contrib/ncurses/include/curses.events b/contrib/ncurses/include/curses.events
new file mode 100644
index 000000000000..25a2583fc9b5
--- /dev/null
+++ b/contrib/ncurses/include/curses.events
@@ -0,0 +1,55 @@
+/* $Id*/
+/*
+ * vile:cmode:
+ * This file is part of ncurses, designed to be appended after curses.h.in
+ * (see that file for the relevant copyright).
+ */
+
+/*
+ * This is an extension to support events...
+ */
+#ifdef NCURSES_WGETCH_EVENTS
+#if !defined(__BEOS__) || defined(__HAIKU__)
+ /* Fix _nc_timed_wait() on BEOS... */
+# define NCURSES_EVENT_VERSION 1
+#endif /* !defined(__BEOS__) */
+
+/*
+ * Bits to set in _nc_event.data.flags
+ */
+# define _NC_EVENT_TIMEOUT_MSEC 1
+# define _NC_EVENT_FILE 2
+# define _NC_EVENT_FILE_READABLE 2
+# if 0 /* Not supported yet... */
+# define _NC_EVENT_FILE_WRITABLE 4
+# define _NC_EVENT_FILE_EXCEPTION 8
+# endif
+
+typedef struct
+{
+ int type;
+ union
+ {
+ long timeout_msec; /* _NC_EVENT_TIMEOUT_MSEC */
+ struct
+ {
+ unsigned int flags;
+ int fd;
+ unsigned int result;
+ } fev; /* _NC_EVENT_FILE */
+ } data;
+} _nc_event;
+
+typedef struct
+{
+ int count;
+ int result_flags; /* _NC_EVENT_TIMEOUT_MSEC or _NC_EVENT_FILE_READABLE */
+ _nc_event *events[1];
+} _nc_eventlist;
+
+extern NCURSES_EXPORT(int) wgetch_events (WINDOW *, _nc_eventlist *) GCC_DEPRECATED(experimental option); /* experimental */
+extern NCURSES_EXPORT(int) wgetnstr_events (WINDOW *,char *,int,_nc_eventlist *) GCC_DEPRECATED(experimental option); /* experimental */
+
+#define KEY_EVENT 0633 /* We were interrupted by an event */
+
+#endif /* NCURSES_WGETCH_EVENTS */
diff --git a/contrib/ncurses/include/curses.h.in b/contrib/ncurses/include/curses.h.in
index 2cb3224b3ecc..c516b22c1fe4 100644
--- a/contrib/ncurses/include/curses.h.in
+++ b/contrib/ncurses/include/curses.h.in
@@ -1,1509 +1,1459 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
-/* $Id: curses.h.in,v 1.266 2020/02/08 10:51:53 tom Exp $ */
+/* $Id: curses.h.in,v 1.269 2020/08/17 14:14:12 tom Exp $ */
#ifndef __NCURSES_H
#define __NCURSES_H
#define CURSES 1
#define CURSES_H 1
/* These are defined only in curses.h, and are used for conditional compiles */
#define NCURSES_VERSION_MAJOR @NCURSES_MAJOR@
#define NCURSES_VERSION_MINOR @NCURSES_MINOR@
#define NCURSES_VERSION_PATCH @NCURSES_PATCH@
/* This is defined in more than one ncurses header, for identification */
#undef NCURSES_VERSION
#define NCURSES_VERSION "@NCURSES_MAJOR@.@NCURSES_MINOR@"
/*
* Identify the mouse encoding version.
*/
#define NCURSES_MOUSE_VERSION @NCURSES_MOUSE_VERSION@
/*
* Definitions to facilitate DLL's.
*/
#include <ncurses_dll.h>
#if @HAVE_STDINT_H@
#include <stdint.h>
#endif
/*
* User-definable tweak to disable the include of <stdbool.h>.
*/
#ifndef NCURSES_ENABLE_STDBOOL_H
#define NCURSES_ENABLE_STDBOOL_H @cf_cv_header_stdbool_h@
#endif
/*
* NCURSES_ATTR_T is used to quiet compiler warnings when building ncurses
* configured using --disable-macros.
*/
#ifndef NCURSES_ATTR_T
#define NCURSES_ATTR_T int
#endif
/*
* Expands to 'const' if ncurses is configured using --enable-const. Note that
* doing so makes it incompatible with other implementations of X/Open Curses.
*/
#undef NCURSES_CONST
#define NCURSES_CONST @NCURSES_CONST@
#undef NCURSES_INLINE
#define NCURSES_INLINE @NCURSES_INLINE@
/*
* The standard type used for color values, and for color-pairs. The latter
* allows the curses library to enumerate the combinations of foreground and
* background colors used by an application, and is normally the product of the
* total foreground and background colors.
*
* X/Open uses "short" for both of these types, ultimately because they are
* numbers from the SVr4 terminal database, which uses 16-bit signed values.
*/
#undef NCURSES_COLOR_T
#define NCURSES_COLOR_T short
#undef NCURSES_PAIRS_T
#define NCURSES_PAIRS_T short
/*
* Definitions used to make WINDOW and similar structs opaque.
*/
#ifndef NCURSES_INTERNALS
#define NCURSES_OPAQUE @NCURSES_OPAQUE@
#define NCURSES_OPAQUE_FORM @NCURSES_OPAQUE_FORM@
#define NCURSES_OPAQUE_MENU @NCURSES_OPAQUE_MENU@
#define NCURSES_OPAQUE_PANEL @NCURSES_OPAQUE_PANEL@
#endif
/*
* Definition used to optionally suppress wattr* macros to help with the
* transition from ncurses5 to ncurses6 by allowing the header files to
* be shared across development packages for ncursesw in both ABIs.
*/
#ifndef NCURSES_WATTR_MACROS
#define NCURSES_WATTR_MACROS @NCURSES_WATTR_MACROS@
#endif
/*
* The reentrant code relies on the opaque setting, but adds features.
*/
#ifndef NCURSES_REENTRANT
#define NCURSES_REENTRANT @cf_cv_enable_reentrant@
#endif
/*
* In certain environments, we must work around linker problems for data
*/
#undef NCURSES_BROKEN_LINKER
#if @BROKEN_LINKER@
#define NCURSES_BROKEN_LINKER 1
#endif
/*
* Control whether bindings for interop support are added.
*/
#undef NCURSES_INTEROP_FUNCS
#define NCURSES_INTEROP_FUNCS @NCURSES_INTEROP_FUNCS@
/*
* The internal type used for window dimensions.
*/
#undef NCURSES_SIZE_T
#define NCURSES_SIZE_T @NCURSES_SIZE_T@
/*
* Control whether tparm() supports varargs or fixed-parameter list.
*/
#undef NCURSES_TPARM_VARARGS
#define NCURSES_TPARM_VARARGS @NCURSES_TPARM_VARARGS@
/*
* Control type used for tparm's arguments. While X/Open equates long and
* char* values, this is not always workable for 64-bit platforms.
*/
#undef NCURSES_TPARM_ARG
#define NCURSES_TPARM_ARG @NCURSES_TPARM_ARG@
/*
* Control whether ncurses uses wcwidth() for checking width of line-drawing
* characters.
*/
#undef NCURSES_WCWIDTH_GRAPHICS
#define NCURSES_WCWIDTH_GRAPHICS @NCURSES_WCWIDTH_GRAPHICS@
/*
* NCURSES_CH_T is used in building the library, but not used otherwise in
* this header file, since that would make the normal/wide-character versions
* of the header incompatible.
*/
#undef NCURSES_CH_T
#define NCURSES_CH_T @NCURSES_CH_T@
#if @cf_cv_enable_lp64@ && defined(_LP64)
typedef unsigned chtype;
typedef unsigned mmask_t;
#else
typedef @cf_cv_typeof_chtype@ chtype;
typedef @cf_cv_typeof_mmask_t@ mmask_t;
#endif
/*
* We need FILE, etc. Include this before checking any feature symbols.
*/
#include <stdio.h>
/*
* With XPG4, you must define _XOPEN_SOURCE_EXTENDED, it is redundant (or
* conflicting) when _XOPEN_SOURCE is 500 or greater. If NCURSES_WIDECHAR is
* not already defined, e.g., if the platform relies upon nonstandard feature
* test macros, define it at this point if the standard feature test macros
* indicate that it should be defined.
*/
#ifndef NCURSES_WIDECHAR
#if defined(_XOPEN_SOURCE_EXTENDED) || (defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0 >= 500))
#define NCURSES_WIDECHAR 1
#else
#define NCURSES_WIDECHAR 0
#endif
#endif /* NCURSES_WIDECHAR */
#include <stdarg.h> /* we need va_list */
#if NCURSES_WIDECHAR
#include <stddef.h> /* we want wchar_t */
#endif
/* X/Open and SVr4 specify that curses implements 'bool'. However, C++ may also
* implement it. If so, we must use the C++ compiler's type to avoid conflict
* with other interfaces.
*
* A further complication is that <stdbool.h> may declare 'bool' to be a
* different type, such as an enum which is not necessarily compatible with
* C++. If we have <stdbool.h>, make 'bool' a macro, so users may #undef it.
* Otherwise, let it remain a typedef to avoid conflicts with other #define's.
* In either case, make a typedef for NCURSES_BOOL which can be used if needed
* from either C or C++.
*/
#undef TRUE
#define TRUE 1
#undef FALSE
#define FALSE 0
typedef @cf_cv_type_of_bool@ NCURSES_BOOL;
#if @USE_CXX_BOOL@ /* __cplusplus, etc. */
/* use the C++ compiler's bool type */
#define NCURSES_BOOL bool
#else /* c89, c99, etc. */
#if NCURSES_ENABLE_STDBOOL_H
#include <stdbool.h>
/* use whatever the C compiler decides bool really is */
#define NCURSES_BOOL bool
#else
/* there is no predefined bool - use our own */
#undef bool
#define bool NCURSES_BOOL
#endif
#endif /* !__cplusplus, etc. */
#ifdef __cplusplus
extern "C" {
#define NCURSES_CAST(type,value) static_cast<type>(value)
#else
#define NCURSES_CAST(type,value) (type)(value)
#endif
#define NCURSES_OK_ADDR(p) (0 != NCURSES_CAST(const void *, (p)))
/*
* X/Open attributes. In the ncurses implementation, they are identical to the
* A_ attributes.
*/
#define WA_ATTRIBUTES A_ATTRIBUTES
#define WA_NORMAL A_NORMAL
#define WA_STANDOUT A_STANDOUT
#define WA_UNDERLINE A_UNDERLINE
#define WA_REVERSE A_REVERSE
#define WA_BLINK A_BLINK
#define WA_DIM A_DIM
#define WA_BOLD A_BOLD
#define WA_ALTCHARSET A_ALTCHARSET
#define WA_INVIS A_INVIS
#define WA_PROTECT A_PROTECT
#define WA_HORIZONTAL A_HORIZONTAL
#define WA_LEFT A_LEFT
#define WA_LOW A_LOW
#define WA_RIGHT A_RIGHT
#define WA_TOP A_TOP
#define WA_VERTICAL A_VERTICAL
#if @NCURSES_EXT_FUNCS@
#define WA_ITALIC A_ITALIC /* ncurses extension */
#endif
/* colors */
#define COLOR_BLACK 0
#define COLOR_RED 1
#define COLOR_GREEN 2
#define COLOR_YELLOW 3
#define COLOR_BLUE 4
#define COLOR_MAGENTA 5
#define COLOR_CYAN 6
#define COLOR_WHITE 7
/* line graphics */
#if @BROKEN_LINKER@ || NCURSES_REENTRANT
NCURSES_WRAPPED_VAR(chtype*, acs_map);
#define acs_map NCURSES_PUBLIC_VAR(acs_map())
#else
extern NCURSES_EXPORT_VAR(chtype) acs_map[];
#endif
#define NCURSES_ACS(c) (acs_map[NCURSES_CAST(unsigned char,(c))])
/* VT100 symbols begin here */
#define ACS_ULCORNER NCURSES_ACS('l') /* upper left corner */
#define ACS_LLCORNER NCURSES_ACS('m') /* lower left corner */
#define ACS_URCORNER NCURSES_ACS('k') /* upper right corner */
#define ACS_LRCORNER NCURSES_ACS('j') /* lower right corner */
#define ACS_LTEE NCURSES_ACS('t') /* tee pointing right */
#define ACS_RTEE NCURSES_ACS('u') /* tee pointing left */
#define ACS_BTEE NCURSES_ACS('v') /* tee pointing up */
#define ACS_TTEE NCURSES_ACS('w') /* tee pointing down */
#define ACS_HLINE NCURSES_ACS('q') /* horizontal line */
#define ACS_VLINE NCURSES_ACS('x') /* vertical line */
#define ACS_PLUS NCURSES_ACS('n') /* large plus or crossover */
#define ACS_S1 NCURSES_ACS('o') /* scan line 1 */
#define ACS_S9 NCURSES_ACS('s') /* scan line 9 */
#define ACS_DIAMOND NCURSES_ACS('`') /* diamond */
#define ACS_CKBOARD NCURSES_ACS('a') /* checker board (stipple) */
#define ACS_DEGREE NCURSES_ACS('f') /* degree symbol */
#define ACS_PLMINUS NCURSES_ACS('g') /* plus/minus */
#define ACS_BULLET NCURSES_ACS('~') /* bullet */
/* Teletype 5410v1 symbols begin here */
#define ACS_LARROW NCURSES_ACS(',') /* arrow pointing left */
#define ACS_RARROW NCURSES_ACS('+') /* arrow pointing right */
#define ACS_DARROW NCURSES_ACS('.') /* arrow pointing down */
#define ACS_UARROW NCURSES_ACS('-') /* arrow pointing up */
#define ACS_BOARD NCURSES_ACS('h') /* board of squares */
#define ACS_LANTERN NCURSES_ACS('i') /* lantern symbol */
#define ACS_BLOCK NCURSES_ACS('0') /* solid square block */
/*
* These aren't documented, but a lot of System Vs have them anyway
* (you can spot pprryyzz{{||}} in a lot of AT&T terminfo strings).
* The ACS_names may not match AT&T's, our source didn't know them.
*/
#define ACS_S3 NCURSES_ACS('p') /* scan line 3 */
#define ACS_S7 NCURSES_ACS('r') /* scan line 7 */
#define ACS_LEQUAL NCURSES_ACS('y') /* less/equal */
#define ACS_GEQUAL NCURSES_ACS('z') /* greater/equal */
#define ACS_PI NCURSES_ACS('{') /* Pi */
#define ACS_NEQUAL NCURSES_ACS('|') /* not equal */
#define ACS_STERLING NCURSES_ACS('}') /* UK pound sign */
/*
* Line drawing ACS names are of the form ACS_trbl, where t is the top, r
* is the right, b is the bottom, and l is the left. t, r, b, and l might
* be B (blank), S (single), D (double), or T (thick). The subset defined
* here only uses B and S.
*/
#define ACS_BSSB ACS_ULCORNER
#define ACS_SSBB ACS_LLCORNER
#define ACS_BBSS ACS_URCORNER
#define ACS_SBBS ACS_LRCORNER
#define ACS_SBSS ACS_RTEE
#define ACS_SSSB ACS_LTEE
#define ACS_SSBS ACS_BTEE
#define ACS_BSSS ACS_TTEE
#define ACS_BSBS ACS_HLINE
#define ACS_SBSB ACS_VLINE
#define ACS_SSSS ACS_PLUS
#undef ERR
#define ERR (-1)
#undef OK
#define OK (0)
/* values for the _flags member */
#define _SUBWIN 0x01 /* is this a sub-window? */
#define _ENDLINE 0x02 /* is the window flush right? */
#define _FULLWIN 0x04 /* is the window full-screen? */
#define _SCROLLWIN 0x08 /* bottom edge is at screen bottom? */
#define _ISPAD 0x10 /* is this window a pad? */
#define _HASMOVED 0x20 /* has cursor moved since last refresh? */
#define _WRAPPED 0x40 /* cursor was just wrappped */
/*
* this value is used in the firstchar and lastchar fields to mark
* unchanged lines
*/
#define _NOCHANGE -1
/*
* this value is used in the oldindex field to mark lines created by insertions
* and scrolls.
*/
#define _NEWINDEX -1
typedef struct screen SCREEN;
typedef struct _win_st WINDOW;
typedef chtype attr_t; /* ...must be at least as wide as chtype */
#if NCURSES_WIDECHAR
#if @NCURSES_LIBUTF8@
#ifdef mblen /* libutf8.h defines it w/o undefining first */
#undef mblen
#endif
#include <libutf8.h>
#endif
#if @NEED_WCHAR_H@
#include <wchar.h> /* ...to get mbstate_t, etc. */
#endif
#if @NCURSES_WCHAR_T@
typedef unsigned short wchar_t@NCURSES_OK_WCHAR_T@;
#endif
#if @NCURSES_WINT_T@
typedef unsigned int wint_t@NCURSES_OK_WCHAR_T@;
#endif
/*
* cchar_t stores an array of CCHARW_MAX wide characters. The first is
* normally a spacing character. The others are non-spacing. If those
* (spacing and nonspacing) do not fill the array, a null L'\0' follows.
* Otherwise, a null is assumed to follow when extracting via getcchar().
*/
#define CCHARW_MAX @NCURSES_CCHARW_MAX@
typedef struct
{
attr_t attr;
wchar_t chars[CCHARW_MAX];
#if @NCURSES_EXT_COLORS@
#undef NCURSES_EXT_COLORS
#define NCURSES_EXT_COLORS @NCURSES_PATCH@
int ext_color; /* color pair, must be more than 16-bits */
#endif
}
cchar_t;
#endif /* NCURSES_WIDECHAR */
#if !NCURSES_OPAQUE
struct ldat;
struct _win_st
{
NCURSES_SIZE_T _cury, _curx; /* current cursor position */
/* window location and size */
NCURSES_SIZE_T _maxy, _maxx; /* maximums of x and y, NOT window size */
NCURSES_SIZE_T _begy, _begx; /* screen coords of upper-left-hand corner */
short _flags; /* window state flags */
/* attribute tracking */
attr_t _attrs; /* current attribute for non-space character */
chtype _bkgd; /* current background char/attribute pair */
/* option values set by user */
bool _notimeout; /* no time out on function-key entry? */
bool _clear; /* consider all data in the window invalid? */
bool _leaveok; /* OK to not reset cursor on exit? */
bool _scroll; /* OK to scroll this window? */
bool _idlok; /* OK to use insert/delete line? */
bool _idcok; /* OK to use insert/delete char? */
bool _immed; /* window in immed mode? (not yet used) */
bool _sync; /* window in sync mode? */
bool _use_keypad; /* process function keys into KEY_ symbols? */
int _delay; /* 0 = nodelay, <0 = blocking, >0 = delay */
struct ldat *_line; /* the actual line data */
/* global screen state */
NCURSES_SIZE_T _regtop; /* top line of scrolling region */
NCURSES_SIZE_T _regbottom; /* bottom line of scrolling region */
/* these are used only if this is a sub-window */
int _parx; /* x coordinate of this window in parent */
int _pary; /* y coordinate of this window in parent */
WINDOW *_parent; /* pointer to parent if a sub-window */
/* these are used only if this is a pad */
struct pdat
{
NCURSES_SIZE_T _pad_y, _pad_x;
NCURSES_SIZE_T _pad_top, _pad_left;
NCURSES_SIZE_T _pad_bottom, _pad_right;
} _pad;
NCURSES_SIZE_T _yoffset; /* real begy is _begy + _yoffset */
#if NCURSES_WIDECHAR
cchar_t _bkgrnd; /* current background char/attribute pair */
#if @NCURSES_EXT_COLORS@
int _color; /* current color-pair for non-space character */
#endif
#endif
};
#endif /* NCURSES_OPAQUE */
-/*
- * This is an extension to support events...
- */
-#if @NCURSES_EXT_FUNCS@
-#ifdef NCURSES_WGETCH_EVENTS
-#if !defined(__BEOS__) || defined(__HAIKU__)
- /* Fix _nc_timed_wait() on BEOS... */
-# define NCURSES_EVENT_VERSION 1
-#endif /* !defined(__BEOS__) */
-
-/*
- * Bits to set in _nc_event.data.flags
- */
-# define _NC_EVENT_TIMEOUT_MSEC 1
-# define _NC_EVENT_FILE 2
-# define _NC_EVENT_FILE_READABLE 2
-# if 0 /* Not supported yet... */
-# define _NC_EVENT_FILE_WRITABLE 4
-# define _NC_EVENT_FILE_EXCEPTION 8
-# endif
-
-typedef struct
-{
- int type;
- union
- {
- long timeout_msec; /* _NC_EVENT_TIMEOUT_MSEC */
- struct
- {
- unsigned int flags;
- int fd;
- unsigned int result;
- } fev; /* _NC_EVENT_FILE */
- } data;
-} _nc_event;
-
-typedef struct
-{
- int count;
- int result_flags; /* _NC_EVENT_TIMEOUT_MSEC or _NC_EVENT_FILE_READABLE */
- _nc_event *events[1];
-} _nc_eventlist;
-
-extern NCURSES_EXPORT(int) wgetch_events (WINDOW *, _nc_eventlist *); /* experimental */
-extern NCURSES_EXPORT(int) wgetnstr_events (WINDOW *,char *,int,_nc_eventlist *);/* experimental */
-
-#endif /* NCURSES_WGETCH_EVENTS */
-#endif /* NCURSES_EXT_FUNCS */
-
/*
* GCC (and some other compilers) define '__attribute__'; we're using this
* macro to alert the compiler to flag inconsistencies in printf/scanf-like
* function calls. Just in case '__attribute__' isn't defined, make a dummy.
* Old versions of G++ do not accept it anyway, at least not consistently with
* GCC.
*/
#if !(defined(__GNUC__) || defined(__GNUG__) || defined(__attribute__))
#define __attribute__(p) /* nothing */
#endif
/*
* We cannot define these in ncurses_cfg.h, since they require parameters to be
* passed (that is non-portable). If you happen to be using gcc with warnings
* enabled, define
* GCC_PRINTF
* GCC_SCANF
* to improve checking of calls to printw(), etc.
*/
#ifndef GCC_PRINTFLIKE
#if defined(GCC_PRINTF) && !defined(printf)
#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
#else
#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
#endif
#endif
#ifndef GCC_SCANFLIKE
#if defined(GCC_SCANF) && !defined(scanf)
#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
#else
#define GCC_SCANFLIKE(fmt,var) /*nothing*/
#endif
#endif
#ifndef GCC_NORETURN
#define GCC_NORETURN /* nothing */
#endif
#ifndef GCC_UNUSED
#define GCC_UNUSED /* nothing */
#endif
#undef GCC_DEPRECATED
-#if (__GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 >= 2))
+#if (__GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 >= 2)) && !defined(NCURSES_INTERNALS)
#define GCC_DEPRECATED(msg) __attribute__((deprecated))
#else
#define GCC_DEPRECATED(msg) /* nothing */
#endif
/*
* Curses uses a helper function. Define our type for this to simplify
* extending it for the sp-funcs feature.
*/
typedef int (*NCURSES_OUTC)(int);
/*
* Function prototypes. This is the complete X/Open Curses list of required
* functions. Those marked `generated' will have sources generated from the
* macro definitions later in this file, in order to satisfy XPG4.2
* requirements.
*/
extern NCURSES_EXPORT(int) addch (const chtype); /* generated */
extern NCURSES_EXPORT(int) addchnstr (const chtype *, int); /* generated */
extern NCURSES_EXPORT(int) addchstr (const chtype *); /* generated */
extern NCURSES_EXPORT(int) addnstr (const char *, int); /* generated */
extern NCURSES_EXPORT(int) addstr (const char *); /* generated */
extern NCURSES_EXPORT(int) attroff (NCURSES_ATTR_T); /* generated */
extern NCURSES_EXPORT(int) attron (NCURSES_ATTR_T); /* generated */
extern NCURSES_EXPORT(int) attrset (NCURSES_ATTR_T); /* generated */
extern NCURSES_EXPORT(int) attr_get (attr_t *, NCURSES_PAIRS_T *, void *); /* generated */
extern NCURSES_EXPORT(int) attr_off (attr_t, void *); /* generated */
extern NCURSES_EXPORT(int) attr_on (attr_t, void *); /* generated */
extern NCURSES_EXPORT(int) attr_set (attr_t, NCURSES_PAIRS_T, void *); /* generated */
extern NCURSES_EXPORT(int) baudrate (void); /* implemented */
extern NCURSES_EXPORT(int) beep (void); /* implemented */
extern NCURSES_EXPORT(int) bkgd (chtype); /* generated */
extern NCURSES_EXPORT(void) bkgdset (chtype); /* generated */
extern NCURSES_EXPORT(int) border (chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype); /* generated */
extern NCURSES_EXPORT(int) box (WINDOW *, chtype, chtype); /* generated */
extern NCURSES_EXPORT(bool) can_change_color (void); /* implemented */
extern NCURSES_EXPORT(int) cbreak (void); /* implemented */
extern NCURSES_EXPORT(int) chgat (int, attr_t, NCURSES_PAIRS_T, const void *); /* generated */
extern NCURSES_EXPORT(int) clear (void); /* generated */
extern NCURSES_EXPORT(int) clearok (WINDOW *,bool); /* implemented */
extern NCURSES_EXPORT(int) clrtobot (void); /* generated */
extern NCURSES_EXPORT(int) clrtoeol (void); /* generated */
extern NCURSES_EXPORT(int) color_content (NCURSES_COLOR_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*,NCURSES_COLOR_T*); /* implemented */
extern NCURSES_EXPORT(int) color_set (NCURSES_PAIRS_T,void*); /* generated */
extern NCURSES_EXPORT(int) COLOR_PAIR (int); /* generated */
extern NCURSES_EXPORT(int) copywin (const WINDOW*,WINDOW*,int,int,int,int,int,int,int); /* implemented */
extern NCURSES_EXPORT(int) curs_set (int); /* implemented */
extern NCURSES_EXPORT(int) def_prog_mode (void); /* implemented */
extern NCURSES_EXPORT(int) def_shell_mode (void); /* implemented */
extern NCURSES_EXPORT(int) delay_output (int); /* implemented */
extern NCURSES_EXPORT(int) delch (void); /* generated */
extern NCURSES_EXPORT(void) delscreen (SCREEN *); /* implemented */
extern NCURSES_EXPORT(int) delwin (WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) deleteln (void); /* generated */
extern NCURSES_EXPORT(WINDOW *) derwin (WINDOW *,int,int,int,int); /* implemented */
extern NCURSES_EXPORT(int) doupdate (void); /* implemented */
extern NCURSES_EXPORT(WINDOW *) dupwin (WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) echo (void); /* implemented */
extern NCURSES_EXPORT(int) echochar (const chtype); /* generated */
extern NCURSES_EXPORT(int) erase (void); /* generated */
extern NCURSES_EXPORT(int) endwin (void); /* implemented */
extern NCURSES_EXPORT(char) erasechar (void); /* implemented */
extern NCURSES_EXPORT(void) filter (void); /* implemented */
extern NCURSES_EXPORT(int) flash (void); /* implemented */
extern NCURSES_EXPORT(int) flushinp (void); /* implemented */
extern NCURSES_EXPORT(chtype) getbkgd (WINDOW *); /* generated */
extern NCURSES_EXPORT(int) getch (void); /* generated */
extern NCURSES_EXPORT(int) getnstr (char *, int); /* generated */
extern NCURSES_EXPORT(int) getstr (char *); /* generated */
extern NCURSES_EXPORT(WINDOW *) getwin (FILE *); /* implemented */
extern NCURSES_EXPORT(int) halfdelay (int); /* implemented */
extern NCURSES_EXPORT(bool) has_colors (void); /* implemented */
extern NCURSES_EXPORT(bool) has_ic (void); /* implemented */
extern NCURSES_EXPORT(bool) has_il (void); /* implemented */
extern NCURSES_EXPORT(int) hline (chtype, int); /* generated */
extern NCURSES_EXPORT(void) idcok (WINDOW *, bool); /* implemented */
extern NCURSES_EXPORT(int) idlok (WINDOW *, bool); /* implemented */
extern NCURSES_EXPORT(void) immedok (WINDOW *, bool); /* implemented */
extern NCURSES_EXPORT(chtype) inch (void); /* generated */
extern NCURSES_EXPORT(int) inchnstr (chtype *, int); /* generated */
extern NCURSES_EXPORT(int) inchstr (chtype *); /* generated */
extern NCURSES_EXPORT(WINDOW *) initscr (void); /* implemented */
extern NCURSES_EXPORT(int) init_color (NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T); /* implemented */
extern NCURSES_EXPORT(int) init_pair (NCURSES_PAIRS_T,NCURSES_COLOR_T,NCURSES_COLOR_T); /* implemented */
extern NCURSES_EXPORT(int) innstr (char *, int); /* generated */
extern NCURSES_EXPORT(int) insch (chtype); /* generated */
extern NCURSES_EXPORT(int) insdelln (int); /* generated */
extern NCURSES_EXPORT(int) insertln (void); /* generated */
extern NCURSES_EXPORT(int) insnstr (const char *, int); /* generated */
extern NCURSES_EXPORT(int) insstr (const char *); /* generated */
extern NCURSES_EXPORT(int) instr (char *); /* generated */
extern NCURSES_EXPORT(int) intrflush (WINDOW *,bool); /* implemented */
extern NCURSES_EXPORT(bool) isendwin (void); /* implemented */
extern NCURSES_EXPORT(bool) is_linetouched (WINDOW *,int); /* implemented */
extern NCURSES_EXPORT(bool) is_wintouched (WINDOW *); /* implemented */
extern NCURSES_EXPORT(NCURSES_CONST char *) keyname (int); /* implemented */
extern NCURSES_EXPORT(int) keypad (WINDOW *,bool); /* implemented */
extern NCURSES_EXPORT(char) killchar (void); /* implemented */
extern NCURSES_EXPORT(int) leaveok (WINDOW *,bool); /* implemented */
extern NCURSES_EXPORT(char *) longname (void); /* implemented */
extern NCURSES_EXPORT(int) meta (WINDOW *,bool); /* implemented */
extern NCURSES_EXPORT(int) move (int, int); /* generated */
extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype); /* generated */
extern NCURSES_EXPORT(int) mvaddchnstr (int, int, const chtype *, int); /* generated */
extern NCURSES_EXPORT(int) mvaddchstr (int, int, const chtype *); /* generated */
extern NCURSES_EXPORT(int) mvaddnstr (int, int, const char *, int); /* generated */
extern NCURSES_EXPORT(int) mvaddstr (int, int, const char *); /* generated */
extern NCURSES_EXPORT(int) mvchgat (int, int, int, attr_t, NCURSES_PAIRS_T, const void *); /* generated */
extern NCURSES_EXPORT(int) mvcur (int,int,int,int); /* implemented */
extern NCURSES_EXPORT(int) mvdelch (int, int); /* generated */
extern NCURSES_EXPORT(int) mvderwin (WINDOW *, int, int); /* implemented */
extern NCURSES_EXPORT(int) mvgetch (int, int); /* generated */
extern NCURSES_EXPORT(int) mvgetnstr (int, int, char *, int); /* generated */
extern NCURSES_EXPORT(int) mvgetstr (int, int, char *); /* generated */
extern NCURSES_EXPORT(int) mvhline (int, int, chtype, int); /* generated */
extern NCURSES_EXPORT(chtype) mvinch (int, int); /* generated */
extern NCURSES_EXPORT(int) mvinchnstr (int, int, chtype *, int); /* generated */
extern NCURSES_EXPORT(int) mvinchstr (int, int, chtype *); /* generated */
extern NCURSES_EXPORT(int) mvinnstr (int, int, char *, int); /* generated */
extern NCURSES_EXPORT(int) mvinsch (int, int, chtype); /* generated */
extern NCURSES_EXPORT(int) mvinsnstr (int, int, const char *, int); /* generated */
extern NCURSES_EXPORT(int) mvinsstr (int, int, const char *); /* generated */
extern NCURSES_EXPORT(int) mvinstr (int, int, char *); /* generated */
extern NCURSES_EXPORT(int) mvprintw (int,int, const char *,...) /* implemented */
GCC_PRINTFLIKE(3,4);
extern NCURSES_EXPORT(int) mvscanw (int,int, const char *,...) /* implemented */
GCC_SCANFLIKE(3,4);
extern NCURSES_EXPORT(int) mvvline (int, int, chtype, int); /* generated */
extern NCURSES_EXPORT(int) mvwaddch (WINDOW *, int, int, const chtype); /* generated */
extern NCURSES_EXPORT(int) mvwaddchnstr (WINDOW *, int, int, const chtype *, int);/* generated */
extern NCURSES_EXPORT(int) mvwaddchstr (WINDOW *, int, int, const chtype *); /* generated */
extern NCURSES_EXPORT(int) mvwaddnstr (WINDOW *, int, int, const char *, int); /* generated */
extern NCURSES_EXPORT(int) mvwaddstr (WINDOW *, int, int, const char *); /* generated */
extern NCURSES_EXPORT(int) mvwchgat (WINDOW *, int, int, int, attr_t, NCURSES_PAIRS_T, const void *);/* generated */
extern NCURSES_EXPORT(int) mvwdelch (WINDOW *, int, int); /* generated */
extern NCURSES_EXPORT(int) mvwgetch (WINDOW *, int, int); /* generated */
extern NCURSES_EXPORT(int) mvwgetnstr (WINDOW *, int, int, char *, int); /* generated */
extern NCURSES_EXPORT(int) mvwgetstr (WINDOW *, int, int, char *); /* generated */
extern NCURSES_EXPORT(int) mvwhline (WINDOW *, int, int, chtype, int); /* generated */
extern NCURSES_EXPORT(int) mvwin (WINDOW *,int,int); /* implemented */
extern NCURSES_EXPORT(chtype) mvwinch (WINDOW *, int, int); /* generated */
extern NCURSES_EXPORT(int) mvwinchnstr (WINDOW *, int, int, chtype *, int); /* generated */
extern NCURSES_EXPORT(int) mvwinchstr (WINDOW *, int, int, chtype *); /* generated */
extern NCURSES_EXPORT(int) mvwinnstr (WINDOW *, int, int, char *, int); /* generated */
extern NCURSES_EXPORT(int) mvwinsch (WINDOW *, int, int, chtype); /* generated */
extern NCURSES_EXPORT(int) mvwinsnstr (WINDOW *, int, int, const char *, int); /* generated */
extern NCURSES_EXPORT(int) mvwinsstr (WINDOW *, int, int, const char *); /* generated */
extern NCURSES_EXPORT(int) mvwinstr (WINDOW *, int, int, char *); /* generated */
extern NCURSES_EXPORT(int) mvwprintw (WINDOW*,int,int, const char *,...) /* implemented */
GCC_PRINTFLIKE(4,5);
extern NCURSES_EXPORT(int) mvwscanw (WINDOW *,int,int, const char *,...) /* implemented */
GCC_SCANFLIKE(4,5);
extern NCURSES_EXPORT(int) mvwvline (WINDOW *,int, int, chtype, int); /* generated */
extern NCURSES_EXPORT(int) napms (int); /* implemented */
extern NCURSES_EXPORT(WINDOW *) newpad (int,int); /* implemented */
extern NCURSES_EXPORT(SCREEN *) newterm (const char *,FILE *,FILE *); /* implemented */
extern NCURSES_EXPORT(WINDOW *) newwin (int,int,int,int); /* implemented */
extern NCURSES_EXPORT(int) nl (void); /* implemented */
extern NCURSES_EXPORT(int) nocbreak (void); /* implemented */
extern NCURSES_EXPORT(int) nodelay (WINDOW *,bool); /* implemented */
extern NCURSES_EXPORT(int) noecho (void); /* implemented */
extern NCURSES_EXPORT(int) nonl (void); /* implemented */
extern NCURSES_EXPORT(void) noqiflush (void); /* implemented */
extern NCURSES_EXPORT(int) noraw (void); /* implemented */
extern NCURSES_EXPORT(int) notimeout (WINDOW *,bool); /* implemented */
extern NCURSES_EXPORT(int) overlay (const WINDOW*,WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) overwrite (const WINDOW*,WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) pair_content (NCURSES_PAIRS_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*); /* implemented */
extern NCURSES_EXPORT(int) PAIR_NUMBER (int); /* generated */
extern NCURSES_EXPORT(int) pechochar (WINDOW *, const chtype); /* implemented */
extern NCURSES_EXPORT(int) pnoutrefresh (WINDOW*,int,int,int,int,int,int);/* implemented */
extern NCURSES_EXPORT(int) prefresh (WINDOW *,int,int,int,int,int,int); /* implemented */
extern NCURSES_EXPORT(int) printw (const char *,...) /* implemented */
GCC_PRINTFLIKE(1,2);
extern NCURSES_EXPORT(int) putwin (WINDOW *, FILE *); /* implemented */
extern NCURSES_EXPORT(void) qiflush (void); /* implemented */
extern NCURSES_EXPORT(int) raw (void); /* implemented */
extern NCURSES_EXPORT(int) redrawwin (WINDOW *); /* generated */
extern NCURSES_EXPORT(int) refresh (void); /* generated */
extern NCURSES_EXPORT(int) resetty (void); /* implemented */
extern NCURSES_EXPORT(int) reset_prog_mode (void); /* implemented */
extern NCURSES_EXPORT(int) reset_shell_mode (void); /* implemented */
extern NCURSES_EXPORT(int) ripoffline (int, int (*)(WINDOW *, int)); /* implemented */
extern NCURSES_EXPORT(int) savetty (void); /* implemented */
extern NCURSES_EXPORT(int) scanw (const char *,...) /* implemented */
GCC_SCANFLIKE(1,2);
extern NCURSES_EXPORT(int) scr_dump (const char *); /* implemented */
extern NCURSES_EXPORT(int) scr_init (const char *); /* implemented */
extern NCURSES_EXPORT(int) scrl (int); /* generated */
extern NCURSES_EXPORT(int) scroll (WINDOW *); /* generated */
extern NCURSES_EXPORT(int) scrollok (WINDOW *,bool); /* implemented */
extern NCURSES_EXPORT(int) scr_restore (const char *); /* implemented */
extern NCURSES_EXPORT(int) scr_set (const char *); /* implemented */
extern NCURSES_EXPORT(int) setscrreg (int,int); /* generated */
extern NCURSES_EXPORT(SCREEN *) set_term (SCREEN *); /* implemented */
extern NCURSES_EXPORT(int) slk_attroff (const chtype); /* implemented */
extern NCURSES_EXPORT(int) slk_attr_off (const attr_t, void *); /* generated:WIDEC */
extern NCURSES_EXPORT(int) slk_attron (const chtype); /* implemented */
extern NCURSES_EXPORT(int) slk_attr_on (attr_t,void*); /* generated:WIDEC */
extern NCURSES_EXPORT(int) slk_attrset (const chtype); /* implemented */
extern NCURSES_EXPORT(attr_t) slk_attr (void); /* implemented */
extern NCURSES_EXPORT(int) slk_attr_set (const attr_t,NCURSES_PAIRS_T,void*); /* implemented */
extern NCURSES_EXPORT(int) slk_clear (void); /* implemented */
extern NCURSES_EXPORT(int) slk_color (NCURSES_PAIRS_T); /* implemented */
extern NCURSES_EXPORT(int) slk_init (int); /* implemented */
extern NCURSES_EXPORT(char *) slk_label (int); /* implemented */
extern NCURSES_EXPORT(int) slk_noutrefresh (void); /* implemented */
extern NCURSES_EXPORT(int) slk_refresh (void); /* implemented */
extern NCURSES_EXPORT(int) slk_restore (void); /* implemented */
extern NCURSES_EXPORT(int) slk_set (int,const char *,int); /* implemented */
extern NCURSES_EXPORT(int) slk_touch (void); /* implemented */
extern NCURSES_EXPORT(int) standout (void); /* generated */
extern NCURSES_EXPORT(int) standend (void); /* generated */
extern NCURSES_EXPORT(int) start_color (void); /* implemented */
extern NCURSES_EXPORT(WINDOW *) subpad (WINDOW *, int, int, int, int); /* implemented */
extern NCURSES_EXPORT(WINDOW *) subwin (WINDOW *, int, int, int, int); /* implemented */
extern NCURSES_EXPORT(int) syncok (WINDOW *, bool); /* implemented */
extern NCURSES_EXPORT(chtype) termattrs (void); /* implemented */
extern NCURSES_EXPORT(char *) termname (void); /* implemented */
extern NCURSES_EXPORT(void) timeout (int); /* generated */
extern NCURSES_EXPORT(int) touchline (WINDOW *, int, int); /* generated */
extern NCURSES_EXPORT(int) touchwin (WINDOW *); /* generated */
extern NCURSES_EXPORT(int) typeahead (int); /* implemented */
extern NCURSES_EXPORT(int) ungetch (int); /* implemented */
extern NCURSES_EXPORT(int) untouchwin (WINDOW *); /* generated */
extern NCURSES_EXPORT(void) use_env (bool); /* implemented */
extern NCURSES_EXPORT(void) use_tioctl (bool); /* implemented */
extern NCURSES_EXPORT(int) vidattr (chtype); /* implemented */
extern NCURSES_EXPORT(int) vidputs (chtype, NCURSES_OUTC); /* implemented */
extern NCURSES_EXPORT(int) vline (chtype, int); /* generated */
extern NCURSES_EXPORT(int) vwprintw (WINDOW *, const char *,va_list) GCC_DEPRECATED(use vw_printw); /* implemented */
extern NCURSES_EXPORT(int) vw_printw (WINDOW *, const char *,va_list); /* implemented */
extern NCURSES_EXPORT(int) vwscanw (WINDOW *, const char *,va_list) GCC_DEPRECATED(use vw_scanw); /* implemented */
extern NCURSES_EXPORT(int) vw_scanw (WINDOW *, const char *,va_list); /* implemented */
extern NCURSES_EXPORT(int) waddch (WINDOW *, const chtype); /* implemented */
extern NCURSES_EXPORT(int) waddchnstr (WINDOW *,const chtype *,int); /* implemented */
extern NCURSES_EXPORT(int) waddchstr (WINDOW *,const chtype *); /* generated */
extern NCURSES_EXPORT(int) waddnstr (WINDOW *,const char *,int); /* implemented */
extern NCURSES_EXPORT(int) waddstr (WINDOW *,const char *); /* generated */
extern NCURSES_EXPORT(int) wattron (WINDOW *, int); /* generated */
extern NCURSES_EXPORT(int) wattroff (WINDOW *, int); /* generated */
extern NCURSES_EXPORT(int) wattrset (WINDOW *, int); /* generated */
extern NCURSES_EXPORT(int) wattr_get (WINDOW *, attr_t *, NCURSES_PAIRS_T *, void *); /* generated */
extern NCURSES_EXPORT(int) wattr_on (WINDOW *, attr_t, void *); /* implemented */
extern NCURSES_EXPORT(int) wattr_off (WINDOW *, attr_t, void *); /* implemented */
extern NCURSES_EXPORT(int) wattr_set (WINDOW *, attr_t, NCURSES_PAIRS_T, void *); /* generated */
extern NCURSES_EXPORT(int) wbkgd (WINDOW *, chtype); /* implemented */
extern NCURSES_EXPORT(void) wbkgdset (WINDOW *,chtype); /* implemented */
extern NCURSES_EXPORT(int) wborder (WINDOW *,chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype); /* implemented */
extern NCURSES_EXPORT(int) wchgat (WINDOW *, int, attr_t, NCURSES_PAIRS_T, const void *);/* implemented */
extern NCURSES_EXPORT(int) wclear (WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) wclrtobot (WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) wclrtoeol (WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) wcolor_set (WINDOW*,NCURSES_PAIRS_T,void*); /* implemented */
extern NCURSES_EXPORT(void) wcursyncup (WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) wdelch (WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) wdeleteln (WINDOW *); /* generated */
extern NCURSES_EXPORT(int) wechochar (WINDOW *, const chtype); /* implemented */
extern NCURSES_EXPORT(int) werase (WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) wgetch (WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) wgetnstr (WINDOW *,char *,int); /* implemented */
extern NCURSES_EXPORT(int) wgetstr (WINDOW *, char *); /* generated */
extern NCURSES_EXPORT(int) whline (WINDOW *, chtype, int); /* implemented */
extern NCURSES_EXPORT(chtype) winch (WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) winchnstr (WINDOW *, chtype *, int); /* implemented */
extern NCURSES_EXPORT(int) winchstr (WINDOW *, chtype *); /* generated */
extern NCURSES_EXPORT(int) winnstr (WINDOW *, char *, int); /* implemented */
extern NCURSES_EXPORT(int) winsch (WINDOW *, chtype); /* implemented */
extern NCURSES_EXPORT(int) winsdelln (WINDOW *,int); /* implemented */
extern NCURSES_EXPORT(int) winsertln (WINDOW *); /* generated */
extern NCURSES_EXPORT(int) winsnstr (WINDOW *, const char *,int); /* implemented */
extern NCURSES_EXPORT(int) winsstr (WINDOW *, const char *); /* generated */
extern NCURSES_EXPORT(int) winstr (WINDOW *, char *); /* generated */
extern NCURSES_EXPORT(int) wmove (WINDOW *,int,int); /* implemented */
extern NCURSES_EXPORT(int) wnoutrefresh (WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) wprintw (WINDOW *, const char *,...) /* implemented */
GCC_PRINTFLIKE(2,3);
extern NCURSES_EXPORT(int) wredrawln (WINDOW *,int,int); /* implemented */
extern NCURSES_EXPORT(int) wrefresh (WINDOW *); /* implemented */
extern NCURSES_EXPORT(int) wscanw (WINDOW *, const char *,...) /* implemented */
GCC_SCANFLIKE(2,3);
extern NCURSES_EXPORT(int) wscrl (WINDOW *,int); /* implemented */
extern NCURSES_EXPORT(int) wsetscrreg (WINDOW *,int,int); /* implemented */
extern NCURSES_EXPORT(int) wstandout (WINDOW *); /* generated */
extern NCURSES_EXPORT(int) wstandend (WINDOW *); /* generated */
extern NCURSES_EXPORT(void) wsyncdown (WINDOW *); /* implemented */
extern NCURSES_EXPORT(void) wsyncup (WINDOW *); /* implemented */
extern NCURSES_EXPORT(void) wtimeout (WINDOW *,int); /* implemented */
extern NCURSES_EXPORT(int) wtouchln (WINDOW *,int,int,int); /* implemented */
extern NCURSES_EXPORT(int) wvline (WINDOW *,chtype,int); /* implemented */
/*
* These are also declared in <term.h>:
*/
extern NCURSES_EXPORT(int) tigetflag (const char *); /* implemented */
extern NCURSES_EXPORT(int) tigetnum (const char *); /* implemented */
extern NCURSES_EXPORT(char *) tigetstr (const char *); /* implemented */
extern NCURSES_EXPORT(int) putp (const char *); /* implemented */
#if NCURSES_TPARM_VARARGS
extern NCURSES_EXPORT(char *) tparm (const char *, ...); /* special */
#else
extern NCURSES_EXPORT(char *) tparm (const char *, NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG); /* special */
-extern NCURSES_EXPORT(char *) tparm_varargs (const char *, ...); /* special */
#endif
extern NCURSES_EXPORT(char *) tiparm (const char *, ...); /* special */
/*
* These functions are not in X/Open, but we use them in macro definitions:
*/
extern NCURSES_EXPORT(int) getattrs (const WINDOW *); /* generated */
extern NCURSES_EXPORT(int) getcurx (const WINDOW *); /* generated */
extern NCURSES_EXPORT(int) getcury (const WINDOW *); /* generated */
extern NCURSES_EXPORT(int) getbegx (const WINDOW *); /* generated */
extern NCURSES_EXPORT(int) getbegy (const WINDOW *); /* generated */
extern NCURSES_EXPORT(int) getmaxx (const WINDOW *); /* generated */
extern NCURSES_EXPORT(int) getmaxy (const WINDOW *); /* generated */
extern NCURSES_EXPORT(int) getparx (const WINDOW *); /* generated */
extern NCURSES_EXPORT(int) getpary (const WINDOW *); /* generated */
/*
* vid_attr() was implemented originally based on a draft of X/Open curses.
*/
#if !NCURSES_WIDECHAR
#define vid_attr(a,pair,opts) vidattr(a)
#endif
/*
* These functions are extensions - not in X/Open Curses.
*/
#if @NCURSES_EXT_FUNCS@
#undef NCURSES_EXT_FUNCS
#define NCURSES_EXT_FUNCS @NCURSES_PATCH@
typedef int (*NCURSES_WINDOW_CB)(WINDOW *, void *);
typedef int (*NCURSES_SCREEN_CB)(SCREEN *, void *);
extern NCURSES_EXPORT(bool) is_term_resized (int, int);
extern NCURSES_EXPORT(char *) keybound (int, int);
extern NCURSES_EXPORT(const char *) curses_version (void);
extern NCURSES_EXPORT(int) alloc_pair (int, int);
extern NCURSES_EXPORT(int) assume_default_colors (int, int);
extern NCURSES_EXPORT(int) define_key (const char *, int);
extern NCURSES_EXPORT(int) extended_color_content(int, int *, int *, int *);
extern NCURSES_EXPORT(int) extended_pair_content(int, int *, int *);
extern NCURSES_EXPORT(int) extended_slk_color(int);
extern NCURSES_EXPORT(int) find_pair (int, int);
extern NCURSES_EXPORT(int) free_pair (int);
extern NCURSES_EXPORT(int) get_escdelay (void);
extern NCURSES_EXPORT(int) init_extended_color(int, int, int, int);
extern NCURSES_EXPORT(int) init_extended_pair(int, int, int);
extern NCURSES_EXPORT(int) key_defined (const char *);
extern NCURSES_EXPORT(int) keyok (int, bool);
extern NCURSES_EXPORT(void) reset_color_pairs (void);
extern NCURSES_EXPORT(int) resize_term (int, int);
extern NCURSES_EXPORT(int) resizeterm (int, int);
extern NCURSES_EXPORT(int) set_escdelay (int);
extern NCURSES_EXPORT(int) set_tabsize (int);
extern NCURSES_EXPORT(int) use_default_colors (void);
extern NCURSES_EXPORT(int) use_extended_names (bool);
extern NCURSES_EXPORT(int) use_legacy_coding (int);
extern NCURSES_EXPORT(int) use_screen (SCREEN *, NCURSES_SCREEN_CB, void *);
extern NCURSES_EXPORT(int) use_window (WINDOW *, NCURSES_WINDOW_CB, void *);
extern NCURSES_EXPORT(int) wresize (WINDOW *, int, int);
extern NCURSES_EXPORT(void) nofilter(void);
/*
* These extensions provide access to information stored in the WINDOW even
* when NCURSES_OPAQUE is set:
*/
extern NCURSES_EXPORT(WINDOW *) wgetparent (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(bool) is_cleared (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(bool) is_idcok (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(bool) is_idlok (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(bool) is_immedok (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(bool) is_keypad (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(bool) is_leaveok (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(bool) is_nodelay (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(bool) is_notimeout (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(bool) is_pad (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(bool) is_scrollok (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(bool) is_subwin (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(bool) is_syncok (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(int) wgetdelay (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */
extern NCURSES_EXPORT(int) wgetscrreg (const WINDOW *, int *, int *); /* @GENERATED_EXT_FUNCS@ */
#else
#define curses_version() NCURSES_VERSION
#endif
/*
* Extra extension-functions, which pass a SCREEN pointer rather than using
* a global variable SP.
*/
#if @NCURSES_SP_FUNCS@
#undef NCURSES_SP_FUNCS
#define NCURSES_SP_FUNCS @NCURSES_PATCH@
#define NCURSES_SP_NAME(name) name##_sp
/* Define the sp-funcs helper function */
#define NCURSES_SP_OUTC NCURSES_SP_NAME(NCURSES_OUTC)
typedef int (*NCURSES_SP_OUTC)(SCREEN*, int);
extern NCURSES_EXPORT(SCREEN *) new_prescr (void); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(baudrate) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(beep) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(can_change_color) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(cbreak) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(curs_set) (SCREEN*, int); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(color_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(delay_output) (SCREEN*, int); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(doupdate) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(echo) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(endwin) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(char) NCURSES_SP_NAME(erasechar) (SCREEN*);/* implemented:SP_FUNC */
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(filter) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flash) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flushinp) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(getwin) (SCREEN*, FILE *); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(halfdelay) (SCREEN*, int); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_colors) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_ic) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_il) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_color) (SCREEN*, NCURSES_COLOR_T, NCURSES_COLOR_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_pair) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(intrflush) (SCREEN*, WINDOW*, bool); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(isendwin) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(NCURSES_CONST char *) NCURSES_SP_NAME(keyname) (SCREEN*, int); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(char) NCURSES_SP_NAME(killchar) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(longname) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mvcur) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(napms) (SCREEN*, int); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newpad) (SCREEN*, int, int); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(SCREEN *) NCURSES_SP_NAME(newterm) (SCREEN*, const char *, FILE *, FILE *); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newwin) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nl) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nocbreak) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noecho) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nonl) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(noqiflush) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noraw) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(pair_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(qiflush) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(raw) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resetty) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ripoffline) (SCREEN*, int, int (*)(WINDOW *, int)); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(savetty) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_init) (SCREEN*, const char *); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_restore) (SCREEN*, const char *); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_set) (SCREEN*, const char *); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attroff) (SCREEN*, const chtype); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attron) (SCREEN*, const chtype); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attrset) (SCREEN*, const chtype); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(slk_attr) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attr_set) (SCREEN*, const attr_t, NCURSES_PAIRS_T, void*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_clear) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_color) (SCREEN*, NCURSES_PAIRS_T); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_init) (SCREEN*, int); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(slk_label) (SCREEN*, int); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_noutrefresh) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_refresh) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_restore) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_set) (SCREEN*, int, const char *, int); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_touch) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(start_color) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(chtype) NCURSES_SP_NAME(termattrs) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(termname) (SCREEN*); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(typeahead) (SCREEN*, int); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ungetch) (SCREEN*, int); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_env) (SCREEN*, bool); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_tioctl) (SCREEN*, bool); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidattr) (SCREEN*, chtype); /* implemented:SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidputs) (SCREEN*, chtype, NCURSES_SP_OUTC); /* implemented:SP_FUNC */
#if @NCURSES_EXT_FUNCS@
extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(keybound) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(alloc_pair) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(assume_default_colors) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(define_key) (SCREEN*, const char *, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_color_content) (SCREEN*, int, int *, int *, int *); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_pair_content) (SCREEN*, int, int *, int *); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_slk_color) (SCREEN*, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(get_escdelay) (SCREEN*); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(find_pair) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(free_pair) (SCREEN*, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_extended_color) (SCREEN*, int, int, int, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_extended_pair) (SCREEN*, int, int, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(is_term_resized) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(key_defined) (SCREEN*, const char *); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(keyok) (SCREEN*, int, bool); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(nofilter) (SCREEN*); /* implemented */ /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(reset_color_pairs) (SCREEN*); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resize_term) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resizeterm) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_escdelay) (SCREEN*, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_tabsize) (SCREEN*, int); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_default_colors) (SCREEN*); /* implemented:EXT_SP_FUNC */
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (SCREEN*, int); /* implemented:EXT_SP_FUNC */
#endif
#else
#undef NCURSES_SP_FUNCS
#define NCURSES_SP_FUNCS 0
#define NCURSES_SP_NAME(name) name
#define NCURSES_SP_OUTC NCURSES_OUTC
#endif
/* attributes */
#define NCURSES_ATTR_SHIFT 8
#define NCURSES_BITS(mask,shift) (NCURSES_CAST(chtype,(mask)) << ((shift) + NCURSES_ATTR_SHIFT))
#define A_NORMAL (@cf_cv_1UL@ - @cf_cv_1UL@)
#define A_ATTRIBUTES NCURSES_BITS(~(@cf_cv_1UL@ - @cf_cv_1UL@),0)
#define A_CHARTEXT (NCURSES_BITS(@cf_cv_1UL@,0) - @cf_cv_1UL@)
#define A_COLOR NCURSES_BITS(((@cf_cv_1UL@) << 8) - @cf_cv_1UL@,0)
#define A_STANDOUT NCURSES_BITS(@cf_cv_1UL@,8)
#define A_UNDERLINE NCURSES_BITS(@cf_cv_1UL@,9)
#define A_REVERSE NCURSES_BITS(@cf_cv_1UL@,10)
#define A_BLINK NCURSES_BITS(@cf_cv_1UL@,11)
#define A_DIM NCURSES_BITS(@cf_cv_1UL@,12)
#define A_BOLD NCURSES_BITS(@cf_cv_1UL@,13)
#define A_ALTCHARSET NCURSES_BITS(@cf_cv_1UL@,14)
#define A_INVIS NCURSES_BITS(@cf_cv_1UL@,15)
#define A_PROTECT NCURSES_BITS(@cf_cv_1UL@,16)
#define A_HORIZONTAL NCURSES_BITS(@cf_cv_1UL@,17)
#define A_LEFT NCURSES_BITS(@cf_cv_1UL@,18)
#define A_LOW NCURSES_BITS(@cf_cv_1UL@,19)
#define A_RIGHT NCURSES_BITS(@cf_cv_1UL@,20)
#define A_TOP NCURSES_BITS(@cf_cv_1UL@,21)
#define A_VERTICAL NCURSES_BITS(@cf_cv_1UL@,22)
#if @NCURSES_EXT_FUNCS@
#define A_ITALIC NCURSES_BITS(@cf_cv_1UL@,23) /* ncurses extension */
#endif
/*
* Most of the pseudo functions are macros that either provide compatibility
* with older versions of curses, or provide inline functionality to improve
* performance.
*/
/*
* These pseudo functions are always implemented as macros:
*/
#define getyx(win,y,x) (y = getcury(win), x = getcurx(win))
#define getbegyx(win,y,x) (y = getbegy(win), x = getbegx(win))
#define getmaxyx(win,y,x) (y = getmaxy(win), x = getmaxx(win))
#define getparyx(win,y,x) (y = getpary(win), x = getparx(win))
#define getsyx(y,x) do { if (newscr) { \
if (is_leaveok(newscr)) \
(y) = (x) = -1; \
else \
getyx(newscr,(y), (x)); \
} \
} while(0)
#define setsyx(y,x) do { if (newscr) { \
if ((y) == -1 && (x) == -1) \
leaveok(newscr, TRUE); \
else { \
leaveok(newscr, FALSE); \
wmove(newscr, (y), (x)); \
} \
} \
} while(0)
#ifndef NCURSES_NOMACROS
/*
* These miscellaneous pseudo functions are provided for compatibility:
*/
#define wgetstr(w, s) wgetnstr(w, s, -1)
#define getnstr(s, n) wgetnstr(stdscr, s, (n))
#define setterm(term) setupterm(term, 1, (int *)0)
#define fixterm() reset_prog_mode()
#define resetterm() reset_shell_mode()
#define saveterm() def_prog_mode()
#define crmode() cbreak()
#define nocrmode() nocbreak()
#define gettmode()
/* It seems older SYSV curses versions define these */
#if !NCURSES_OPAQUE
#define getattrs(win) NCURSES_CAST(int, NCURSES_OK_ADDR(win) ? (win)->_attrs : A_NORMAL)
#define getcurx(win) (NCURSES_OK_ADDR(win) ? (win)->_curx : ERR)
#define getcury(win) (NCURSES_OK_ADDR(win) ? (win)->_cury : ERR)
#define getbegx(win) (NCURSES_OK_ADDR(win) ? (win)->_begx : ERR)
#define getbegy(win) (NCURSES_OK_ADDR(win) ? (win)->_begy : ERR)
#define getmaxx(win) (NCURSES_OK_ADDR(win) ? ((win)->_maxx + 1) : ERR)
#define getmaxy(win) (NCURSES_OK_ADDR(win) ? ((win)->_maxy + 1) : ERR)
#define getparx(win) (NCURSES_OK_ADDR(win) ? (win)->_parx : ERR)
#define getpary(win) (NCURSES_OK_ADDR(win) ? (win)->_pary : ERR)
#endif /* NCURSES_OPAQUE */
#define wstandout(win) (wattrset(win,A_STANDOUT))
#define wstandend(win) (wattrset(win,A_NORMAL))
#define wattron(win,at) wattr_on(win, NCURSES_CAST(attr_t, at), NULL)
#define wattroff(win,at) wattr_off(win, NCURSES_CAST(attr_t, at), NULL)
#if !NCURSES_OPAQUE
#if NCURSES_WATTR_MACROS
#if NCURSES_WIDECHAR && @NCURSES_EXT_COLORS@
#define wattrset(win,at) \
(NCURSES_OK_ADDR(win) \
? ((win)->_color = NCURSES_CAST(int, PAIR_NUMBER(at)), \
(win)->_attrs = NCURSES_CAST(attr_t, at), \
OK) \
: ERR)
#else
#define wattrset(win,at) \
(NCURSES_OK_ADDR(win) \
? ((win)->_attrs = NCURSES_CAST(attr_t, at), \
OK) \
: ERR)
#endif
#endif /* NCURSES_WATTR_MACROS */
#endif /* NCURSES_OPAQUE */
#define scroll(win) wscrl(win,1)
#define touchwin(win) wtouchln((win), 0, getmaxy(win), 1)
#define touchline(win, s, c) wtouchln((win), s, c, 1)
#define untouchwin(win) wtouchln((win), 0, getmaxy(win), 0)
#define box(win, v, h) wborder(win, v, v, h, h, 0, 0, 0, 0)
#define border(ls, rs, ts, bs, tl, tr, bl, br) wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br)
#define hline(ch, n) whline(stdscr, ch, (n))
#define vline(ch, n) wvline(stdscr, ch, (n))
#define winstr(w, s) winnstr(w, s, -1)
#define winchstr(w, s) winchnstr(w, s, -1)
#define winsstr(w, s) winsnstr(w, s, -1)
#if !NCURSES_OPAQUE
#define redrawwin(win) wredrawln(win, 0, (NCURSES_OK_ADDR(win) ? (win)->_maxy+1 : -1))
#endif /* NCURSES_OPAQUE */
#define waddstr(win,str) waddnstr(win,str,-1)
#define waddchstr(win,str) waddchnstr(win,str,-1)
/*
* These apply to the first 256 color pairs.
*/
#define COLOR_PAIR(n) (NCURSES_BITS((n), 0) & A_COLOR)
#define PAIR_NUMBER(a) (NCURSES_CAST(int,((NCURSES_CAST(unsigned long,(a)) & A_COLOR) >> NCURSES_ATTR_SHIFT)))
/*
* pseudo functions for standard screen
*/
#define addch(ch) waddch(stdscr,(ch))
#define addchnstr(str,n) waddchnstr(stdscr,(str),(n))
#define addchstr(str) waddchstr(stdscr,(str))
#define addnstr(str,n) waddnstr(stdscr,(str),(n))
#define addstr(str) waddnstr(stdscr,(str),-1)
#define attr_get(ap,cp,o) wattr_get(stdscr,(ap),(cp),(o))
#define attr_off(a,o) wattr_off(stdscr,(a),(o))
#define attr_on(a,o) wattr_on(stdscr,(a),(o))
#define attr_set(a,c,o) wattr_set(stdscr,(a),(c),(o))
#define attroff(at) wattroff(stdscr,(at))
#define attron(at) wattron(stdscr,(at))
#define attrset(at) wattrset(stdscr,(at))
#define bkgd(ch) wbkgd(stdscr,(ch))
#define bkgdset(ch) wbkgdset(stdscr,(ch))
#define chgat(n,a,c,o) wchgat(stdscr,(n),(a),(c),(o))
#define clear() wclear(stdscr)
#define clrtobot() wclrtobot(stdscr)
#define clrtoeol() wclrtoeol(stdscr)
#define color_set(c,o) wcolor_set(stdscr,(c),(o))
#define delch() wdelch(stdscr)
#define deleteln() winsdelln(stdscr,-1)
#define echochar(c) wechochar(stdscr,(c))
#define erase() werase(stdscr)
#define getch() wgetch(stdscr)
#define getstr(str) wgetstr(stdscr,(str))
#define inch() winch(stdscr)
#define inchnstr(s,n) winchnstr(stdscr,(s),(n))
#define inchstr(s) winchstr(stdscr,(s))
#define innstr(s,n) winnstr(stdscr,(s),(n))
#define insch(c) winsch(stdscr,(c))
#define insdelln(n) winsdelln(stdscr,(n))
#define insertln() winsdelln(stdscr,1)
#define insnstr(s,n) winsnstr(stdscr,(s),(n))
#define insstr(s) winsstr(stdscr,(s))
#define instr(s) winstr(stdscr,(s))
#define move(y,x) wmove(stdscr,(y),(x))
#define refresh() wrefresh(stdscr)
#define scrl(n) wscrl(stdscr,(n))
#define setscrreg(t,b) wsetscrreg(stdscr,(t),(b))
#define standend() wstandend(stdscr)
#define standout() wstandout(stdscr)
#define timeout(delay) wtimeout(stdscr,(delay))
#define wdeleteln(win) winsdelln(win,-1)
#define winsertln(win) winsdelln(win,1)
/*
* mv functions
*/
#define mvwaddch(win,y,x,ch) (wmove((win),(y),(x)) == ERR ? ERR : waddch((win),(ch)))
#define mvwaddchnstr(win,y,x,str,n) (wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),(n)))
#define mvwaddchstr(win,y,x,str) (wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),-1))
#define mvwaddnstr(win,y,x,str,n) (wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),(n)))
#define mvwaddstr(win,y,x,str) (wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),-1))
#define mvwchgat(win,y,x,n,a,c,o) (wmove((win),(y),(x)) == ERR ? ERR : wchgat((win),(n),(a),(c),(o)))
#define mvwdelch(win,y,x) (wmove((win),(y),(x)) == ERR ? ERR : wdelch(win))
#define mvwgetch(win,y,x) (wmove((win),(y),(x)) == ERR ? ERR : wgetch(win))
#define mvwgetnstr(win,y,x,str,n) (wmove((win),(y),(x)) == ERR ? ERR : wgetnstr((win),(str),(n)))
#define mvwgetstr(win,y,x,str) (wmove((win),(y),(x)) == ERR ? ERR : wgetstr((win),(str)))
#define mvwhline(win,y,x,c,n) (wmove((win),(y),(x)) == ERR ? ERR : whline((win),(c),(n)))
#define mvwinch(win,y,x) (wmove((win),(y),(x)) == ERR ? NCURSES_CAST(chtype, ERR) : winch(win))
#define mvwinchnstr(win,y,x,s,n) (wmove((win),(y),(x)) == ERR ? ERR : winchnstr((win),(s),(n)))
#define mvwinchstr(win,y,x,s) (wmove((win),(y),(x)) == ERR ? ERR : winchstr((win),(s)))
#define mvwinnstr(win,y,x,s,n) (wmove((win),(y),(x)) == ERR ? ERR : winnstr((win),(s),(n)))
#define mvwinsch(win,y,x,c) (wmove((win),(y),(x)) == ERR ? ERR : winsch((win),(c)))
#define mvwinsnstr(win,y,x,s,n) (wmove((win),(y),(x)) == ERR ? ERR : winsnstr((win),(s),(n)))
#define mvwinsstr(win,y,x,s) (wmove((win),(y),(x)) == ERR ? ERR : winsstr((win),(s)))
#define mvwinstr(win,y,x,s) (wmove((win),(y),(x)) == ERR ? ERR : winstr((win),(s)))
#define mvwvline(win,y,x,c,n) (wmove((win),(y),(x)) == ERR ? ERR : wvline((win),(c),(n)))
#define mvaddch(y,x,ch) mvwaddch(stdscr,(y),(x),(ch))
#define mvaddchnstr(y,x,str,n) mvwaddchnstr(stdscr,(y),(x),(str),(n))
#define mvaddchstr(y,x,str) mvwaddchstr(stdscr,(y),(x),(str))
#define mvaddnstr(y,x,str,n) mvwaddnstr(stdscr,(y),(x),(str),(n))
#define mvaddstr(y,x,str) mvwaddstr(stdscr,(y),(x),(str))
#define mvchgat(y,x,n,a,c,o) mvwchgat(stdscr,(y),(x),(n),(a),(c),(o))
#define mvdelch(y,x) mvwdelch(stdscr,(y),(x))
#define mvgetch(y,x) mvwgetch(stdscr,(y),(x))
#define mvgetnstr(y,x,str,n) mvwgetnstr(stdscr,(y),(x),(str),(n))
#define mvgetstr(y,x,str) mvwgetstr(stdscr,(y),(x),(str))
#define mvhline(y,x,c,n) mvwhline(stdscr,(y),(x),(c),(n))
#define mvinch(y,x) mvwinch(stdscr,(y),(x))
#define mvinchnstr(y,x,s,n) mvwinchnstr(stdscr,(y),(x),(s),(n))
#define mvinchstr(y,x,s) mvwinchstr(stdscr,(y),(x),(s))
#define mvinnstr(y,x,s,n) mvwinnstr(stdscr,(y),(x),(s),(n))
#define mvinsch(y,x,c) mvwinsch(stdscr,(y),(x),(c))
#define mvinsnstr(y,x,s,n) mvwinsnstr(stdscr,(y),(x),(s),(n))
#define mvinsstr(y,x,s) mvwinsstr(stdscr,(y),(x),(s))
#define mvinstr(y,x,s) mvwinstr(stdscr,(y),(x),(s))
#define mvvline(y,x,c,n) mvwvline(stdscr,(y),(x),(c),(n))
/*
* Some wide-character functions can be implemented without the extensions.
*/
#if !NCURSES_OPAQUE
#define getbkgd(win) (NCURSES_OK_ADDR(win) ? ((win)->_bkgd) : 0)
#endif /* NCURSES_OPAQUE */
#define slk_attr_off(a,v) ((v) ? ERR : slk_attroff(a))
#define slk_attr_on(a,v) ((v) ? ERR : slk_attron(a))
#if !NCURSES_OPAQUE
#if NCURSES_WATTR_MACROS
#if NCURSES_WIDECHAR && @NCURSES_EXT_COLORS@
#define wattr_set(win,a,p,opts) \
(NCURSES_OK_ADDR(win) \
? ((void)((win)->_attrs = ((a) & ~A_COLOR), \
(win)->_color = (opts) ? *(int *)(opts) : (p)), \
OK) \
: ERR)
#define wattr_get(win,a,p,opts) \
(NCURSES_OK_ADDR(win) \
? ((void)(NCURSES_OK_ADDR(a) \
? (*(a) = (win)->_attrs) \
: OK), \
(void)(NCURSES_OK_ADDR(p) \
? (*(p) = (NCURSES_PAIRS_T) (win)->_color) \
: OK), \
(void)(NCURSES_OK_ADDR(opts) \
? (*(int *)(opts) = (win)->_color) \
: OK), \
OK) \
: ERR)
#else /* !(NCURSES_WIDECHAR && NCURSES_EXE_COLORS) */
#define wattr_set(win,a,p,opts) \
(NCURSES_OK_ADDR(win) \
? ((void)((win)->_attrs = (((a) & ~A_COLOR) | \
(attr_t)COLOR_PAIR(p))), \
OK) \
: ERR)
#define wattr_get(win,a,p,opts) \
(NCURSES_OK_ADDR(win) \
? ((void)(NCURSES_OK_ADDR(a) \
? (*(a) = (win)->_attrs) \
: OK), \
(void)(NCURSES_OK_ADDR(p) \
? (*(p) = (NCURSES_PAIRS_T) PAIR_NUMBER((win)->_attrs)) \
: OK), \
OK) \
: ERR)
#endif /* (NCURSES_WIDECHAR && NCURSES_EXE_COLORS) */
#endif /* NCURSES_WATTR_MACROS */
#endif /* NCURSES_OPAQUE */
/*
* X/Open curses deprecates SVr4 vwprintw/vwscanw, which are supposed to use
* varargs.h. It adds new calls vw_printw/vw_scanw, which are supposed to
* use POSIX stdarg.h. The ncurses versions of vwprintw/vwscanw already
* use stdarg.h, so...
*/
/* define vw_printw vwprintw */
/* define vw_scanw vwscanw */
/*
* Export fallback function for use in C++ binding.
*/
#if !@HAVE_VSSCANF@
#define vsscanf(a,b,c) _nc_vsscanf(a,b,c)
NCURSES_EXPORT(int) vsscanf(const char *, const char *, va_list);
#endif
/*
* These macros are extensions - not in X/Open Curses.
*/
#if @NCURSES_EXT_FUNCS@
#if !NCURSES_OPAQUE
#define is_cleared(win) (NCURSES_OK_ADDR(win) ? (win)->_clear : FALSE)
#define is_idcok(win) (NCURSES_OK_ADDR(win) ? (win)->_idcok : FALSE)
#define is_idlok(win) (NCURSES_OK_ADDR(win) ? (win)->_idlok : FALSE)
#define is_immedok(win) (NCURSES_OK_ADDR(win) ? (win)->_immed : FALSE)
#define is_keypad(win) (NCURSES_OK_ADDR(win) ? (win)->_use_keypad : FALSE)
#define is_leaveok(win) (NCURSES_OK_ADDR(win) ? (win)->_leaveok : FALSE)
#define is_nodelay(win) (NCURSES_OK_ADDR(win) ? ((win)->_delay == 0) : FALSE)
#define is_notimeout(win) (NCURSES_OK_ADDR(win) ? (win)->_notimeout : FALSE)
#define is_pad(win) (NCURSES_OK_ADDR(win) ? ((win)->_flags & _ISPAD) != 0 : FALSE)
#define is_scrollok(win) (NCURSES_OK_ADDR(win) ? (win)->_scroll : FALSE)
#define is_subwin(win) (NCURSES_OK_ADDR(win) ? ((win)->_flags & _SUBWIN) != 0 : FALSE)
#define is_syncok(win) (NCURSES_OK_ADDR(win) ? (win)->_sync : FALSE)
#define wgetdelay(win) (NCURSES_OK_ADDR(win) ? (win)->_delay : 0)
#define wgetparent(win) (NCURSES_OK_ADDR(win) ? (win)->_parent : 0)
#define wgetscrreg(win,t,b) (NCURSES_OK_ADDR(win) ? (*(t) = (win)->_regtop, *(b) = (win)->_regbottom, OK) : ERR)
#endif
#endif
/*
* X/Open says this returns a bool; SVr4 also checked for out-of-range line.
* The macro provides compatibility:
*/
#define is_linetouched(w,l) ((!(w) || ((l) > getmaxy(w)) || ((l) < 0)) ? ERR : (is_linetouched)((w),(l)))
#endif /* NCURSES_NOMACROS */
/*
* Public variables.
*
* Notes:
* a. ESCDELAY was an undocumented feature under AIX curses.
* It gives the ESC expire time in milliseconds.
* b. ttytype is needed for backward compatibility
*/
#if NCURSES_REENTRANT
NCURSES_WRAPPED_VAR(WINDOW *, curscr);
NCURSES_WRAPPED_VAR(WINDOW *, newscr);
NCURSES_WRAPPED_VAR(WINDOW *, stdscr);
NCURSES_WRAPPED_VAR(char *, ttytype);
NCURSES_WRAPPED_VAR(int, COLORS);
NCURSES_WRAPPED_VAR(int, COLOR_PAIRS);
NCURSES_WRAPPED_VAR(int, COLS);
NCURSES_WRAPPED_VAR(int, ESCDELAY);
NCURSES_WRAPPED_VAR(int, LINES);
NCURSES_WRAPPED_VAR(int, TABSIZE);
#define curscr NCURSES_PUBLIC_VAR(curscr())
#define newscr NCURSES_PUBLIC_VAR(newscr())
#define stdscr NCURSES_PUBLIC_VAR(stdscr())
#define ttytype NCURSES_PUBLIC_VAR(ttytype())
#define COLORS NCURSES_PUBLIC_VAR(COLORS())
#define COLOR_PAIRS NCURSES_PUBLIC_VAR(COLOR_PAIRS())
#define COLS NCURSES_PUBLIC_VAR(COLS())
#define ESCDELAY NCURSES_PUBLIC_VAR(ESCDELAY())
#define LINES NCURSES_PUBLIC_VAR(LINES())
#define TABSIZE NCURSES_PUBLIC_VAR(TABSIZE())
#else
extern NCURSES_EXPORT_VAR(WINDOW *) curscr;
extern NCURSES_EXPORT_VAR(WINDOW *) newscr;
extern NCURSES_EXPORT_VAR(WINDOW *) stdscr;
extern NCURSES_EXPORT_VAR(char) ttytype[];
extern NCURSES_EXPORT_VAR(int) COLORS;
extern NCURSES_EXPORT_VAR(int) COLOR_PAIRS;
extern NCURSES_EXPORT_VAR(int) COLS;
extern NCURSES_EXPORT_VAR(int) ESCDELAY;
extern NCURSES_EXPORT_VAR(int) LINES;
extern NCURSES_EXPORT_VAR(int) TABSIZE;
#endif
/*
* Pseudo-character tokens outside ASCII range. The curses wgetch() function
* will return any given one of these only if the corresponding k- capability
* is defined in your terminal's terminfo entry.
*
* Some keys (KEY_A1, etc) are arranged like this:
* a1 up a3
* left b2 right
* c1 down c3
*
* A few key codes do not depend upon the terminfo entry.
*/
#define KEY_CODE_YES 0400 /* A wchar_t contains a key code */
#define KEY_MIN 0401 /* Minimum curses key */
#define KEY_BREAK 0401 /* Break key (unreliable) */
#define KEY_SRESET 0530 /* Soft (partial) reset (unreliable) */
#define KEY_RESET 0531 /* Reset or hard reset (unreliable) */
diff --git a/contrib/ncurses/include/headers b/contrib/ncurses/include/headers
index dbb134d13f90..32e33fdbc734 100644
--- a/contrib/ncurses/include/headers
+++ b/contrib/ncurses/include/headers
@@ -1,53 +1,55 @@
-# $Id: headers,v 1.14 2020/02/02 23:34:34 tom Exp $
+# $Id: headers,v 1.15 2020/08/29 18:51:13 tom Exp $
##############################################################################
# Copyright 2020 Thomas E. Dickey #
# Copyright 1998-2012,2013 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey 1996-on
#
curses.h
unctrl.h
ncurses_dll.h
# Support for termcap (and tic, etc.), which can be a separate library
@ termlib
term.h
termcap.h
# Headers used only for tic, other programs using internal interfaces
@ ticlib
$(srcdir)/tic.h
$(srcdir)/term_entry.h
$(srcdir)/nc_tparm.h
# Porting
@ port_win32con
$(srcdir)/ncurses_mingw.h
$(srcdir)/nc_mingw.h
+@ port_win32
+$(srcdir)/win32_curses.h
# vile:makemode
diff --git a/contrib/ncurses/include/nc_alloc.h b/contrib/ncurses/include/nc_alloc.h
index ca63e78cd922..8d19f98e0f67 100644
--- a/contrib/ncurses/include/nc_alloc.h
+++ b/contrib/ncurses/include/nc_alloc.h
@@ -1,128 +1,128 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 1998-2013,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 1996-on *
****************************************************************************/
-/* $Id: nc_alloc.h,v 1.26 2020/02/02 23:34:34 tom Exp $ */
+/* $Id: nc_alloc.h,v 1.27 2020/07/04 20:01:13 tom Exp $ */
#ifndef NC_ALLOC_included
#define NC_ALLOC_included 1
/* *INDENT-OFF* */
#include <ncurses_cfg.h>
#include <curses.h>
#ifdef __cplusplus
extern "C" {
#endif
#if defined(HAVE_LIBDMALLOC) && HAVE_LIBDMALLOC
#include <string.h>
#undef strndup /* workaround for #define in GLIBC 2.7 */
#include <dmalloc.h> /* Gray Watson's library */
#else
#undef HAVE_LIBDMALLOC
#define HAVE_LIBDMALLOC 0
#endif
#if defined(HAVE_LIBDBMALLOC) && HAVE_LIBDBMALLOC
#include <dbmalloc.h> /* Conor Cahill's library */
#else
#undef HAVE_LIBDBMALLOC
#define HAVE_LIBDBMALLOC 0
#endif
#if defined(HAVE_LIBMPATROL) && HAVE_LIBMPATROL
#include <mpatrol.h> /* Memory-Patrol library */
#else
#undef HAVE_LIBMPATROL
#define HAVE_LIBMPATROL 0
#endif
#ifndef NO_LEAKS
#define NO_LEAKS 0
#endif
#if HAVE_LIBDBMALLOC || HAVE_LIBDMALLOC || NO_LEAKS
#define HAVE_NC_FREEALL 1
struct termtype;
extern NCURSES_EXPORT(void) _nc_free_tinfo(int) GCC_NORETURN GCC_DEPRECATED("use exit_terminfo");
#ifdef NCURSES_INTERNALS
extern NCURSES_EXPORT(void) _nc_free_tic(int) GCC_NORETURN;
extern NCURSES_EXPORT(void) _nc_free_tparm(void);
-extern NCURSES_EXPORT(void) _nc_leaks_dump_entry(void);
+extern void _nc_leaks_dump_entry(void);
extern NCURSES_EXPORT(void) _nc_leaks_tic(void);
#if NCURSES_SP_FUNCS
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_free_and_exit)(SCREEN*, int) GCC_NORETURN;
#endif
extern NCURSES_EXPORT(void) _nc_free_and_exit(int) GCC_NORETURN;
#else /* !NCURSES_INTERNALS */
extern NCURSES_EXPORT(void) _nc_free_and_exit(int) GCC_NORETURN GCC_DEPRECATED("use exit_curses");
#endif
#define ExitProgram(code) exit_curses(code)
#else
extern NCURSES_EXPORT(void) _nc_free_and_exit(int) GCC_NORETURN GCC_DEPRECATED("use exit_curses");
#endif /* NO_LEAKS, etc */
#ifndef HAVE_NC_FREEALL
#define HAVE_NC_FREEALL 0
#endif
#ifndef ExitProgram
#define ExitProgram(code) exit(code)
#endif
/* doalloc.c */
extern NCURSES_EXPORT(void *) _nc_doalloc(void *, size_t);
#if !HAVE_STRDUP
#undef strdup
#define strdup _nc_strdup
extern NCURSES_EXPORT(char *) _nc_strdup(const char *);
#endif
/* entries.c */
extern NCURSES_EXPORT(void) _nc_leaks_tinfo(void);
#define typeMalloc(type,elts) (type *)malloc((size_t)(elts)*sizeof(type))
#define typeCalloc(type,elts) (type *)calloc((size_t)(elts),sizeof(type))
#define typeRealloc(type,elts,ptr) (type *)_nc_doalloc(ptr, (size_t)(elts)*sizeof(type))
#ifdef __cplusplus
}
#endif
/* *INDENT-ON* */
#endif /* NC_ALLOC_included */
diff --git a/contrib/ncurses/include/nc_mingw.h b/contrib/ncurses/include/nc_mingw.h
index 68a418494560..6729b29d3d09 100644
--- a/contrib/ncurses/include/nc_mingw.h
+++ b/contrib/ncurses/include/nc_mingw.h
@@ -1,72 +1,89 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 2008-2010,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas Dickey, 2008-on *
****************************************************************************/
-/* $Id: nc_mingw.h,v 1.7 2020/02/02 23:34:34 tom Exp $ */
+/* $Id: nc_mingw.h,v 1.9 2020/07/11 22:13:19 tom Exp $ */
#ifndef NC_MINGW_H
#define NC_MINGW_H 1
#ifdef _WIN32
+
#ifdef WINVER
# if WINVER < 0x0501
# error WINVER must at least be 0x0501
# endif
#else
# define WINVER 0x0501
#endif
#include <windows.h>
#undef sleep
#define sleep(n) Sleep((n) * 1000)
#undef gettimeofday
#define gettimeofday(tv,tz) _nc_gettimeofday(tv,tz)
+#if HAVE_SYS_TIME_H
#include <sys/time.h> /* for struct timeval */
+#endif
-extern int _nc_gettimeofday(struct timeval *, void *);
+#ifdef _MSC_VER
+#include <winsock2.h> /* for struct timeval */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ncurses_dll.h>
+
+NCURSES_EXPORT(int) _nc_gettimeofday(struct timeval *, void *);
#undef HAVE_GETTIMEOFDAY
#define HAVE_GETTIMEOFDAY 1
#define SIGHUP 1
#define SIGKILL 9
#define getlogin() "username"
#undef wcwidth
#define wcwidth(ucs) _nc_wcwidth((wchar_t)(ucs))
-extern int _nc_wcwidth(wchar_t);
+NCURSES_EXPORT(int) _nc_wcwidth(wchar_t);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* _WIN32 */
#endif /* NC_MINGW_H */
diff --git a/contrib/ncurses/include/nc_termios.h b/contrib/ncurses/include/nc_termios.h
index 87fa46efb48d..13cc0af7ab53 100644
--- a/contrib/ncurses/include/nc_termios.h
+++ b/contrib/ncurses/include/nc_termios.h
@@ -1,164 +1,168 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 2011-2014,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 2011 *
****************************************************************************/
-/* $Id: nc_termios.h,v 1.7 2020/02/02 23:34:34 tom Exp $ */
+/* $Id: nc_termios.h,v 1.8 2020/08/29 20:53:19 tom Exp $ */
#ifndef NC_TERMIOS_included
#define NC_TERMIOS_included 1
#include <ncurses_cfg.h>
#if HAVE_TERMIOS_H && HAVE_TCGETATTR
#else /* !HAVE_TERMIOS_H */
#if HAVE_TERMIO_H
/* Add definitions to make termio look like termios.
* But ifdef it, since there are some implementations
* that try to do this for us in a fake <termio.h>.
*/
#ifndef TCSADRAIN
#define TCSADRAIN TCSETAW
#endif
#ifndef TCSAFLUSH
#define TCSAFLUSH TCSETAF
#endif
#ifndef tcsetattr
#define tcsetattr(fd, cmd, arg) ioctl(fd, cmd, arg)
#endif
#ifndef tcgetattr
#define tcgetattr(fd, arg) ioctl(fd, TCGETA, arg)
#endif
#ifndef cfgetospeed
#define cfgetospeed(t) ((t)->c_cflag & CBAUD)
#endif
#ifndef TCIFLUSH
#define TCIFLUSH 0
#endif
#ifndef tcflush
#define tcflush(fd, arg) ioctl(fd, TCFLSH, arg)
#endif
+#if defined(EXP_WIN32_DRIVER)
+#undef TERMIOS
+#endif
+
#else /* !HAVE_TERMIO_H */
-#if _WIN32
+#if defined(_WIN32) && !defined(EXP_WIN32_DRIVER)
/* lflag bits */
#define ISIG 0x0001
#define ICANON 0x0002
#define ECHO 0x0004
#define ECHOE 0x0008
#define ECHOK 0x0010
#define ECHONL 0x0020
#define NOFLSH 0x0040
#define IEXTEN 0x0100
#define VEOF 4
#define VERASE 5
#define VINTR 6
#define VKILL 7
#define VMIN 9
#define VQUIT 10
#define VTIME 16
/* iflag bits */
#define IGNBRK 0x00001
#define BRKINT 0x00002
#define IGNPAR 0x00004
#define INPCK 0x00010
#define ISTRIP 0x00020
#define INLCR 0x00040
#define IGNCR 0x00080
#define ICRNL 0x00100
#define IXON 0x00400
#define IXOFF 0x01000
#define PARMRK 0x10000
/* oflag bits */
#define OPOST 0x00001
/* cflag bits */
#define CBAUD 0x0100f
#define B0 0x00000
#define B50 0x00001
#define B75 0x00002
#define B110 0x00003
#define B134 0x00004
#define B150 0x00005
#define B200 0x00006
#define B300 0x00007
#define B600 0x00008
#define B1200 0x00009
#define B1800 0x0000a
#define B2400 0x0000b
#define B4800 0x0000c
#define B9600 0x0000d
#define CSIZE 0x00030
#define CS8 0x00030
#define CSTOPB 0x00040
#define CREAD 0x00080
#define PARENB 0x00100
#define PARODD 0x00200
#define HUPCL 0x00400
#define CLOCAL 0x00800
#define TCIFLUSH 0
#define TCSADRAIN 3
#ifndef cfgetospeed
#define cfgetospeed(t) ((t)->c_cflag & CBAUD)
#endif
#ifndef tcsetattr
#define tcsetattr(fd, opt, arg) _nc_mingw_tcsetattr(fd, opt, arg)
#endif
#ifndef tcgetattr
#define tcgetattr(fd, arg) _nc_mingw_tcgetattr(fd, arg)
#endif
#ifndef tcflush
#define tcflush(fd, queue) _nc_mingw_tcflush(fd, queue)
#endif
#undef ttyname
#define ttyname(fd) NULL
#endif /* _WIN32 */
#endif /* HAVE_TERMIO_H */
#endif /* HAVE_TERMIOS_H */
#endif /* NC_TERMIOS_included */
diff --git a/contrib/ncurses/include/nc_tparm.h b/contrib/ncurses/include/nc_tparm.h
index 61570959c08c..943d9476055d 100644
--- a/contrib/ncurses/include/nc_tparm.h
+++ b/contrib/ncurses/include/nc_tparm.h
@@ -1,80 +1,92 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 2006-2012,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 2006 *
****************************************************************************/
-/* $Id: nc_tparm.h,v 1.10 2020/02/02 23:34:34 tom Exp $ */
+/* $Id: nc_tparm.h,v 1.11 2020/05/27 23:33:31 tom Exp $ */
#ifndef NC_TPARM_included
#define NC_TPARM_included 1
#include <ncurses_cfg.h>
#include <curses.h>
/*
* Cast parameters past the formatting-string for tparm() to match the
* assumption of the varargs code.
*/
#ifndef TPARM_ARG
#ifdef NCURSES_TPARM_ARG
#define TPARM_ARG NCURSES_TPARM_ARG
#else
#define TPARM_ARG long
#endif
#endif /* TPARAM_ARG */
#define TPARM_N(n) (TPARM_ARG)(n)
#define TPARM_9(a,b,c,d,e,f,g,h,i,j) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f),TPARM_N(g),TPARM_N(h),TPARM_N(i),TPARM_N(j))
#if NCURSES_TPARM_VARARGS
#define TPARM_8(a,b,c,d,e,f,g,h,i) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f),TPARM_N(g),TPARM_N(h),TPARM_N(i))
#define TPARM_7(a,b,c,d,e,f,g,h) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f),TPARM_N(g),TPARM_N(h))
#define TPARM_6(a,b,c,d,e,f,g) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f),TPARM_N(g))
#define TPARM_5(a,b,c,d,e,f) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f))
#define TPARM_4(a,b,c,d,e) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e))
#define TPARM_3(a,b,c,d) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d))
#define TPARM_2(a,b,c) tparm(a,TPARM_N(b),TPARM_N(c))
#define TPARM_1(a,b) tparm(a,TPARM_N(b))
#define TPARM_0(a) tparm(a)
#else
#define TPARM_8(a,b,c,d,e,f,g,h,i) TPARM_9(a,b,c,d,e,f,g,h,i,0)
#define TPARM_7(a,b,c,d,e,f,g,h) TPARM_8(a,b,c,d,e,f,g,h,0)
#define TPARM_6(a,b,c,d,e,f,g) TPARM_7(a,b,c,d,e,f,g,0)
#define TPARM_5(a,b,c,d,e,f) TPARM_6(a,b,c,d,e,f,0)
#define TPARM_4(a,b,c,d,e) TPARM_5(a,b,c,d,e,0)
#define TPARM_3(a,b,c,d) TPARM_4(a,b,c,d,0)
#define TPARM_2(a,b,c) TPARM_3(a,b,c,0)
#define TPARM_1(a,b) TPARM_2(a,b,0)
#define TPARM_0(a) TPARM_1(a,0)
#endif
+#ifdef NCURSES_INTERNALS
+#define TIPARM_1(s,a) _nc_tiparm(1,s,a)
+#define TIPARM_2(s,a,b) _nc_tiparm(2,s,a,b)
+#define TIPARM_3(s,a,b,c) _nc_tiparm(3,s,a,b,c)
+#define TIPARM_4(s,a,b,c,d) _nc_tiparm(4,s,a,b,c,d)
+#define TIPARM_5(s,a,b,c,d,e) _nc_tiparm(5,s,a,b,c,d,e)
+#define TIPARM_6(s,a,b,c,d,e,f) _nc_tiparm(6,s,a,b,c,d,e,f)
+#define TIPARM_7(s,a,b,c,d,e,f,g) _nc_tiparm(7,s,a,b,c,d,e,f,g)
+#define TIPARM_8(s,a,b,c,d,e,f,g,h) _nc_tiparm(8,s,a,b,c,d,e,f,g,h)
+#define TIPARM_9(s,a,b,c,d,e,f,g,h,i) _nc_tiparm(9,s,a,b,c,d,e,f,g,h,i)
+#endif
+
#endif /* NC_TPARM_included */
diff --git a/contrib/ncurses/include/nc_win32.h b/contrib/ncurses/include/nc_win32.h
new file mode 100644
index 000000000000..790e8dfe9388
--- /dev/null
+++ b/contrib/ncurses/include/nc_win32.h
@@ -0,0 +1,183 @@
+/****************************************************************************
+ * Copyright 2018-2019,2020 Thomas E. Dickey *
+ * Copyright 2008-2010,2017 Free Software Foundation, Inc. *
+ * *
+ * Permission is hereby granted, free of charge, to any person obtaining a *
+ * copy of this software and associated documentation files (the *
+ * "Software"), to deal in the Software without restriction, including *
+ * without limitation the rights to use, copy, modify, merge, publish, *
+ * distribute, distribute with modifications, sublicense, and/or sell *
+ * copies of the Software, and to permit persons to whom the Software is *
+ * furnished to do so, subject to the following conditions: *
+ * *
+ * The above copyright notice and this permission notice shall be included *
+ * in all copies or substantial portions of the Software. *
+ * *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
+ * *
+ * Except as contained in this notice, the name(s) of the above copyright *
+ * holders shall not be used in advertising or otherwise to promote the *
+ * sale, use or other dealings in this Software without prior written *
+ * authorization. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas Dickey, 2008-on *
+ ****************************************************************************/
+
+/* $Id: nc_win32.h,v 1.9 2020/09/13 00:17:30 tom Exp $ */
+
+#ifndef NC_WIN32_H
+#define NC_WIN32_H 1
+
+#if defined(_WIN32) || defined(_WIN64)
+
+#ifndef _NC_WINDOWS
+#define _NC_WINDOWS
+#endif
+
+#ifdef TERMIOS
+#error TERMIOS must not be defined on Windows
+#endif
+
+/* We no longer support WindowsXP.
+ Minimum requirement is Windows Vista or Server2008,
+ aka Windows NT 6.0
+*/
+#ifdef WINVER
+# if WINVER < 0x0600
+# error WINVER must at least be 0x0600
+# endif
+#else
+# define WINVER 0x0600
+#endif
+
+#undef _NC_CHECK_MINTTY
+#if WINVER >= 0x0600
+#define _NC_CHECK_MINTTY
+#endif
+
+#include <windows.h>
+
+#if HAVE_SYS_TIME_H
+#include <sys/time.h> /* for struct timeval */
+#endif
+
+#ifdef _NC_MSC
+#include <winsock2.h> /* for struct timeval */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ncurses_dll.h>
+
+#undef HAVE_GETTIMEOFDAY
+#define HAVE_GETTIMEOFDAY 1
+extern NCURSES_EXPORT(int) _nc_gettimeofday(struct timeval *, void *);
+
+#undef wcwidth
+#define wcwidth(ucs) _nc_wcwidth((wchar_t)(ucs))
+extern NCURSES_EXPORT(int) _nc_wcwidth(wchar_t);
+
+#ifdef EVENTLIST_2nd /* test.priv.h just needs the preceding */
+
+extern NCURSES_EXPORT(void) _nc_console_size(int* Lines, int* Cols);
+extern NCURSES_EXPORT(HANDLE) _nc_console_handle(int fd);
+extern NCURSES_EXPORT(int) _nc_console_isatty(int fd);
+extern NCURSES_EXPORT(int) _nc_console_test(int fd);
+extern NCURSES_EXPORT(int) _nc_console_read(SCREEN *sp,HANDLE hdl,int *buf);
+extern NCURSES_EXPORT(int) _nc_console_twait(SCREEN *, HANDLE,int,int,int * EVENTLIST_2nd(_nc_eventlist * evl));
+extern NCURSES_EXPORT(WORD) _nc_console_MapColor(bool fore, int color);
+extern NCURSES_EXPORT(void) _nc_console_selectActiveHandle(void);
+extern NCURSES_EXPORT(bool) _nc_console_get_SBI(void);
+extern NCURSES_EXPORT(void) _nc_console_set_scrollback(bool normal, CONSOLE_SCREEN_BUFFER_INFO * info);
+extern NCURSES_EXPORT(int) _nc_console_testmouse(SCREEN *,HANDLE,int EVENTLIST_2nd(_nc_eventlist*));
+extern NCURSES_EXPORT(int) _nc_console_keyok(int keycode,int flag);
+extern NCURSES_EXPORT(bool) _nc_console_keyExist(int keycode);
+extern NCURSES_EXPORT(bool) _nc_console_checkinit(bool initFlag, bool assumeTermInfo);
+extern NCURSES_EXPORT(int) _nc_console_vt_supported(void);
+
+#ifdef _NC_CHECK_MINTTY
+extern NCURSES_EXPORT(int) _nc_console_checkmintty(int fd, LPHANDLE pMinTTY);
+#endif
+
+#undef VALID_TERM_ENV
+#define MS_TERMINAL "ms-terminal"
+#define VALID_TERM_ENV(term_env, no_terminal) \
+ (term_env = (NonEmpty(term_env) \
+ ? term_env \
+ : (_nc_console_vt_supported() \
+ ? MS_TERMINAL \
+ : no_terminal)), \
+ NonEmpty(term_env))
+
+ /*
+ * Various Console mode definitions
+ */
+
+ /* Flags to enable virtual Terminal processing */
+#define VT_FLAG_OUT ENABLE_VIRTUAL_TERMINAL_PROCESSING
+#define VT_FLAG_IN ENABLE_VIRTUAL_TERMINAL_INPUT
+
+ /* Default flags for input/output modes */
+#define CONMODE_IN_DEFAULT (ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT)
+#define CONMODE_OUT_DEFAULT (ENABLE_PROCESSED_OUTPUT | DISABLE_NEWLINE_AUTO_RETURN | ENABLE_LVB_GRID_WORLDWIDE)
+
+ /* Flags to reset from RAW/CBREAK */
+#define CONMODE_NORAW (ENABLE_PROCESSED_INPUT|ENABLE_LINE_INPUT)
+#define CONMODE_NOCBREAK (ENABLE_LINE_INPUT)
+
+
+#if defined(USE_TERM_DRIVER) && defined(USE_WIN32CON_DRIVER)
+extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_WIN_DRIVER;
+#endif
+
+#define CON_NUMPAIRS 64
+typedef struct {
+ BOOL initialized;
+ BOOL buffered;
+ BOOL window_only;
+ BOOL progMode;
+ BOOL isMinTTY;
+ BOOL isTermInfoConsole;
+ HANDLE out;
+ HANDLE inp;
+ HANDLE hdl;
+ HANDLE lastOut;
+ int numButtons;
+ LPDWORD ansi_map;
+ LPDWORD map;
+ LPDWORD rmap;
+ WORD pairs[CON_NUMPAIRS];
+ COORD origin;
+ CHAR_INFO *save_screen;
+ COORD save_size;
+ SMALL_RECT save_region;
+ CONSOLE_SCREEN_BUFFER_INFO SBI;
+ CONSOLE_SCREEN_BUFFER_INFO save_SBI;
+ CONSOLE_CURSOR_INFO save_CI;
+ TTY originalMode;
+} ConsoleInfo;
+
+extern NCURSES_EXPORT_VAR(ConsoleInfo) _nc_CONSOLE;
+#define WINCONSOLE _nc_CONSOLE
+
+#define TypeAlloca(type,count)(type*) _alloca(sizeof(type)*(size_t)(count))
+
+#endif /* EVENTLIST_2nd */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WIN32 || _WIN64 */
+
+#endif /* NC_WIN32_H */
diff --git a/contrib/ncurses/include/ncurses_cfg.hin b/contrib/ncurses/include/ncurses_cfg.hin
index bf9b2c5fc293..8d9ed81a8406 100644
--- a/contrib/ncurses/include/ncurses_cfg.hin
+++ b/contrib/ncurses/include/ncurses_cfg.hin
@@ -1,74 +1,74 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 1997-on *
****************************************************************************/
/*
- * $Id: ncurses_cfg.hin,v 1.12 2020/02/02 23:34:34 tom Exp $
+ * $Id: ncurses_cfg.hin,v 1.13 2020/03/08 12:37:59 tom Exp $
*
* Both ncurses_cfg.h and ncurses_def.h are internal header-files used when
* building ncurses.
*
* This is a template-file used to generate the "ncurses_cfg.h" file.
*
* Rather than list every definition, the configuration script substitutes the
* definitions that it finds using 'sed'. You need a patch (original date
* 971222) to autoconf 2.12 or 2.13 to do this.
*
* See:
- * http://invisible-island.net/autoconf/
+ * https://invisible-island.net/autoconf/
* ftp://ftp.invisible-island.net/autoconf/
*/
#ifndef NC_CONFIG_H
#define NC_CONFIG_H
@DEFS@
#include <ncurses_def.h>
/* The C compiler may not treat these properly but C++ has to */
#ifdef __cplusplus
#undef const
#undef inline
#endif
/* On HP-UX, the C compiler doesn't grok mbstate_t without
-D_XOPEN_SOURCE=500. However, this causes problems on
IRIX. So, we #define mbstate_t to int in configure.in
only for the C compiler if needed. */
#ifndef __cplusplus
#ifdef NEED_MBSTATE_T_DEF
#define mbstate_t int
#endif
#endif
/*
* vile:cmode
*/
#endif /* NC_CONFIG_H */
diff --git a/contrib/ncurses/include/ncurses_defs b/contrib/ncurses/include/ncurses_defs
index e37fc901eaaf..b805c8414182 100644
--- a/contrib/ncurses/include/ncurses_defs
+++ b/contrib/ncurses/include/ncurses_defs
@@ -1,261 +1,263 @@
-# $Id: ncurses_defs,v 1.92 2020/02/02 23:34:34 tom Exp $
+# $Id: ncurses_defs,v 1.95 2020/08/01 19:48:21 tom Exp $
##############################################################################
# Copyright 2018-2019,2020 Thomas E. Dickey #
# Copyright 2000-2016,2017 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# See "MKncurses_def.sh" for an explanation.
#
# (hint: don't try to define NDEBUG ;-)
BROKEN_LINKER
BSD_TPUTS
CGETENT_CONST /* nothing */
CPP_HAS_PARAM_INIT
CURSES_ACS_ARRAY acs_map
CURSES_WACS_ARRAY _nc_wacs
DECL_ERRNO
ETIP_NEEDS_MATH_H
GCC_NORETURN /* nothing */
GCC_UNUSED /* nothing */
HAVE_ALLOC_PAIR
HAVE_ASSUME_DEFAULT_COLORS
HAVE_BIG_CORE
HAVE_BSD_CGETENT
HAVE_BSD_SIGNAL_H
HAVE_BSD_STRING_H
HAVE_BTOWC
HAVE_BUILTIN_H
HAVE_CHGAT 1
HAVE_COLOR_CONTENT 1
HAVE_COLOR_SET 1
HAVE_CONSISTENT_GETENV
HAVE_COPYWIN 1
HAVE_CURSCR 1
HAVE_CURSES_DATA_TABSIZE 1
HAVE_CURSES_DATA_TTYTYPE 1
HAVE_DELSCREEN 1
HAVE_DERWIN 1
HAVE_DIRENT_H
HAVE_DUPWIN 1
HAVE_ERRNO
+HAVE_EXIT_CURSES 1
+HAVE_EXIT_TERMINFO 1
HAVE_FCNTL_H
HAVE_FILTER 1
HAVE_FORM_H
HAVE_GETBEGX 1
HAVE_GETCURX 1
HAVE_GETCWD
HAVE_GETEGID
HAVE_GETEUID
HAVE_GETMAXX 1
HAVE_GETNSTR
HAVE_GETOPT_H
HAVE_GETPARX 1
HAVE_GETTIMEOFDAY
HAVE_GETTTYNAM
HAVE_GETWIN 1
HAVE_GPM_H
HAVE_GPP_BUILTIN_H
HAVE_GXX_BUILTIN_H
HAVE_HALFDELAY 1
HAVE_HAS_KEY
HAVE_INIT_EXTENDED_COLOR
HAVE_INTTYPES_H
HAVE_IOSTREAM
HAVE_ISASCII
HAVE_ISSETUGID
HAVE_LANGINFO_CODESET
HAVE_LIBC_H
HAVE_LIBDBMALLOC
HAVE_LIBDMALLOC
HAVE_LIBFORM
HAVE_LIBGPM
HAVE_LIBMENU
HAVE_LIBMPATROL
HAVE_LIBPANEL
HAVE_LIB_PCRE2
HAVE_LIMITS_H
HAVE_LINK
HAVE_LOCALECONV
HAVE_LOCALE_H
HAVE_LONG_FILE_NAMES
HAVE_MATH_H
HAVE_MBLEN
HAVE_MBRLEN
HAVE_MBRTOWC
HAVE_MBSRTOWCS
HAVE_MBSTOWCS
HAVE_MBTOWC
HAVE_MENU_H
HAVE_MKSTEMP
HAVE_MVDERWIN 1
HAVE_MVVLINE 1
HAVE_MVWIN 1
HAVE_MVWVLINE 1
HAVE_NANOSLEEP
HAVE_NC_ALLOC_H
HAVE_NEWPAD 1
HAVE_PANEL_H
-HAVE_PCRE2_POSIX_H
+HAVE_PCRE2POSIX_H
HAVE_PCREPOSIX_H
HAVE_POLL
HAVE_POLL_H
HAVE_PURIFY
HAVE_PUTENV
HAVE_PUTWC
HAVE_PUTWIN 1
HAVE_REGEXPR_H_FUNCS
HAVE_REGEXP_H_FUNCS
HAVE_REGEX_H_FUNCS
HAVE_REMOVE
HAVE_RESET_COLOR_PAIRS
HAVE_RESIZETERM
HAVE_RESIZE_TERM
HAVE_RESTARTTERM 1
HAVE_RIPOFFLINE 1
HAVE_SCR_DUMP 1
HAVE_SELECT
HAVE_SETBUF
HAVE_SETBUFFER
HAVE_SETENV
HAVE_SETUPTERM 1
HAVE_SETVBUF
HAVE_SGTTY_H
HAVE_SIGACTION
HAVE_SIGVEC
HAVE_SIZECHANGE
HAVE_SLK_COLOR
HAVE_SLK_INIT 1
HAVE_SNPRINTF
HAVE_STDINT_H
HAVE_STRDUP
HAVE_STRLCAT
HAVE_STRLCPY
HAVE_STRSTR
HAVE_SYMLINK
HAVE_SYSCONF
HAVE_SYS_BSDTYPES_H
HAVE_SYS_IOCTL_H
HAVE_SYS_PARAM_H
HAVE_SYS_POLL_H
HAVE_SYS_SELECT_H
HAVE_SYS_TERMIO_H
HAVE_SYS_TIMES_H
HAVE_SYS_TIME_H
HAVE_SYS_TIME_SELECT
HAVE_TCGETATTR
HAVE_TCGETPGRP
HAVE_TELL
HAVE_TERMATTRS 1
HAVE_TERMCAP_H 1
HAVE_TERMIOS_H
HAVE_TERMIO_H
HAVE_TERMNAME 1
HAVE_TERM_ENTRY_H 1
HAVE_TERM_H 1
HAVE_TGETENT 1
HAVE_TIGETNUM 1
HAVE_TIGETSTR 1
HAVE_TIMES
HAVE_TPUTS_SP
HAVE_TSEARCH
HAVE_TTYENT_H
HAVE_TYPEAHEAD 1
HAVE_TYPEINFO
HAVE_TYPE_ATTR_T
HAVE_TYPE_SIGACTION
HAVE_UNCTRL_H 1
HAVE_UNISTD_H
HAVE_UNLINK
HAVE_USE_DEFAULT_COLORS
HAVE_USE_ENV 1
HAVE_USE_EXTENDED_NAMES
HAVE_USE_SCREEN
HAVE_USE_WINDOW
HAVE_VFSCANF
HAVE_VIDPUTS 1
HAVE_VID_PUTS 1
HAVE_VSNPRINTF
HAVE_VSSCANF
HAVE_VW_PRINTW 1
HAVE_WCHGAT 1
HAVE_WCSRTOMBS
HAVE_WCSTOMBS
HAVE_WCTOB
HAVE_WCTOMB
HAVE_WCTYPE_H
HAVE_WINSDELLN 1
HAVE_WINSSTR 1
HAVE_WORKING_POLL
HAVE_WRESIZE
HAVE_WSYNCDOWN 1
HAVE__DOSCAN
HAVE__TRACEF
MIXEDCASE_FILENAMES
NCURSES_CHAR_EQ
NCURSES_EXPANDED
NCURSES_EXT_COLORS
NCURSES_EXT_FUNCS
NCURSES_EXT_PUTWIN
NCURSES_NO_PADDING
NCURSES_OSPEED_COMPAT
NCURSES_PATHSEP ':'
NCURSES_WIDECHAR
NEED_PTEM_H
NO_LEAKS
PURE_TERMINFO
STDC_HEADERS
SVR4_ACTION
SVR4_TERMIO
SYSTEM_NAME "unknown"
TERMINFO "none"
TERMPATH "none"
TIME_WITH_SYS_TIME
TYPEOF_CHTYPE
USE_COLORFGBG
USE_FOPEN_BIN_R
USE_GETCAP
USE_GETCAP_CACHE
USE_HARD_TABS
USE_HASHED_DB
USE_HASHMAP
USE_HOME_TERMINFO
USE_LINKS
USE_MY_MEMMOVE
USE_OK_BCOPY
USE_PTHREADS_EINTR
USE_RCS_IDS
USE_REENTRANT
USE_SAFE_SPRINTF
USE_SCROLL_HINTS
USE_SIGWINCH
USE_STRING_HACKS
USE_SYMLINKS
USE_SYSMOUSE
USE_WEAK_SYMBOLS
USE_WIDEC_SUPPORT
USE_XMC_SUPPORT
diff --git a/contrib/ncurses/include/ncurses_dll.h.in b/contrib/ncurses/include/ncurses_dll.h.in
index f439d48013ca..437c54de0271 100644
--- a/contrib/ncurses/include/ncurses_dll.h.in
+++ b/contrib/ncurses/include/ncurses_dll.h.in
@@ -1,117 +1,99 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 2009,2014 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
-/* $Id: ncurses_dll.h.in,v 1.12 2020/02/02 23:34:34 tom Exp $ */
+/* $Id: ncurses_dll.h.in,v 1.17 2020/09/05 17:58:47 juergen Exp $ */
#ifndef NCURSES_DLL_H_incl
#define NCURSES_DLL_H_incl 1
/*
* MinGW gcc (unlike MSYS2 and Cygwin) should define _WIN32 and possibly _WIN64.
*/
#if defined(__MINGW64__)
#ifndef _WIN64
#define _WIN64 1
#endif
#elif defined(__MINGW32__)
#ifndef _WIN32
#define _WIN32 1
#endif
/* 2014-08-02 workaround for broken MinGW compiler.
* Oddly, only TRACE is mapped to trace - the other -D's are okay.
* suggest TDM as an alternative.
*/
#if (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
#ifdef trace
#undef trace
#define TRACE
#endif
#endif /* broken compiler */
#endif /* MingW */
/*
* For reentrant code, we map the various global variables into SCREEN by
* using functions to access them.
*/
#define NCURSES_PUBLIC_VAR(name) @NCURSES_WRAP_PREFIX@##name
-#define NCURSES_WRAPPED_VAR(type,name) extern type NCURSES_PUBLIC_VAR(name)(void)
-/* no longer needed on cygwin or mingw, thanks to auto-import */
-/* but this structure may be useful at some point for an MSVC build */
-/* so, for now unconditionally define the important flags */
-/* "the right way" for proper static and dll+auto-import behavior */
-#undef NCURSES_DLL
-#define NCURSES_STATIC
-
-#if defined(__CYGWIN__) || defined(_WIN32)
-# if defined(NCURSES_DLL)
-# if defined(NCURSES_STATIC)
-# undef NCURSES_STATIC
-# endif
-# endif
-# undef NCURSES_IMPEXP
-# undef NCURSES_API
-# undef NCURSES_EXPORT
-# undef NCURSES_EXPORT_VAR
-# if defined(NCURSES_DLL)
-/* building a DLL */
-# define NCURSES_IMPEXP __declspec(dllexport)
-# elif defined(NCURSES_STATIC)
-/* building or linking to a static library */
-# define NCURSES_IMPEXP /* nothing */
-# else
-/* linking to the DLL */
-# define NCURSES_IMPEXP __declspec(dllimport)
-# endif
-# define NCURSES_API __cdecl
-# define NCURSES_EXPORT(type) NCURSES_IMPEXP type NCURSES_API
-# define NCURSES_EXPORT_VAR(type) NCURSES_IMPEXP type
+#if defined(BUILDING_NCURSES)
+# define NCURSES_IMPEXP NCURSES_EXPORT_GENERAL_EXPORT
+#else
+# define NCURSES_IMPEXP NCURSES_EXPORT_GENERAL_IMPORT
#endif
-/* Take care of non-cygwin platforms */
-#if !defined(NCURSES_IMPEXP)
-# define NCURSES_IMPEXP /* nothing */
-#endif
-#if !defined(NCURSES_API)
-# define NCURSES_API /* nothing */
-#endif
-#if !defined(NCURSES_EXPORT)
-# define NCURSES_EXPORT(type) NCURSES_IMPEXP type NCURSES_API
-#endif
-#if !defined(NCURSES_EXPORT_VAR)
-# define NCURSES_EXPORT_VAR(type) NCURSES_IMPEXP type
+#define NCURSES_WRAPPED_VAR(type,name) extern NCURSES_IMPEXP type NCURSES_PUBLIC_VAR(name)(void)
+
+#define NCURSES_EXPORT(type) NCURSES_IMPEXP type NCURSES_API
+#define NCURSES_EXPORT_VAR(type) NCURSES_IMPEXP type
+
+/*
+ * These symbols hide dllimport/dllexport, for compilers which care about it.
+ */
+#if defined(__CYGWIN__) || (defined(_WIN32) || defined(_WIN64))
+# if defined(NCURSES_STATIC) /* "static" here only implies "not-a-DLL" */
+# define NCURSES_EXPORT_GENERAL_IMPORT
+# define NCURSES_EXPORT_GENERAL_EXPORT
+# else
+# define NCURSES_EXPORT_GENERAL_IMPORT __declspec(dllimport)
+# define NCURSES_EXPORT_GENERAL_EXPORT __declspec(dllexport)
+# endif
+# define NCURSES_API __cdecl
+#else
+# define NCURSES_EXPORT_GENERAL_IMPORT
+# define NCURSES_EXPORT_GENERAL_EXPORT
+# define NCURSES_API /* FIXME: __attribute__ ((cdecl)) is only available on x86 */
#endif
#endif /* NCURSES_DLL_H_incl */
diff --git a/contrib/ncurses/include/term_entry.h b/contrib/ncurses/include/term_entry.h
index df13f53f49ee..18e4b87aab77 100644
--- a/contrib/ncurses/include/term_entry.h
+++ b/contrib/ncurses/include/term_entry.h
@@ -1,237 +1,237 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2015,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1998-on *
****************************************************************************/
-/* $Id: term_entry.h,v 1.59 2020/02/02 23:34:34 tom Exp $ */
+/* $Id: term_entry.h,v 1.60 2020/02/29 15:46:00 anonymous.maarten Exp $ */
/*
* term_entry.h -- interface to entry-manipulation code
*/
#ifndef NCURSES_TERM_ENTRY_H_incl
#define NCURSES_TERM_ENTRY_H_incl 1
/* *INDENT-OFF* */
#ifdef __cplusplus
extern "C" {
#endif
#include <curses.h>
#include <term.h>
/*
* These macros may be used by programs that know about TERMTYPE:
*/
#if NCURSES_XNAMES
#define NUM_BOOLEANS(tp) (tp)->num_Booleans
#define NUM_NUMBERS(tp) (tp)->num_Numbers
#define NUM_STRINGS(tp) (tp)->num_Strings
#define EXT_NAMES(tp,i,limit,index,table) (i >= limit) ? tp->ext_Names[index] : table[i]
#else
#define NUM_BOOLEANS(tp) BOOLCOUNT
#define NUM_NUMBERS(tp) NUMCOUNT
#define NUM_STRINGS(tp) STRCOUNT
#define EXT_NAMES(tp,i,limit,index,table) table[i]
#endif
#define NUM_EXT_NAMES(tp) (unsigned) ((tp)->ext_Booleans + (tp)->ext_Numbers + (tp)->ext_Strings)
#define for_each_boolean(n,tp) for(n = 0; n < NUM_BOOLEANS(tp); n++)
#define for_each_number(n,tp) for(n = 0; n < NUM_NUMBERS(tp); n++)
#define for_each_string(n,tp) for(n = 0; n < NUM_STRINGS(tp); n++)
#if NCURSES_XNAMES
#define for_each_ext_boolean(n,tp) for(n = BOOLCOUNT; (int) n < (int) NUM_BOOLEANS(tp); n++)
#define for_each_ext_number(n,tp) for(n = NUMCOUNT; (int) n < (int) NUM_NUMBERS(tp); n++)
#define for_each_ext_string(n,tp) for(n = STRCOUNT; (int) n < (int) NUM_STRINGS(tp); n++)
#endif
#define ExtBoolname(tp,i,names) EXT_NAMES(tp, i, BOOLCOUNT, (i - (tp->num_Booleans - tp->ext_Booleans)), names)
#define ExtNumname(tp,i,names) EXT_NAMES(tp, i, NUMCOUNT, (i - (tp->num_Numbers - tp->ext_Numbers)) + tp->ext_Booleans, names)
#define ExtStrname(tp,i,names) EXT_NAMES(tp, i, STRCOUNT, (i - (tp->num_Strings - tp->ext_Strings)) + (tp->ext_Numbers + tp->ext_Booleans), names)
/*
* The remaining type-definitions and macros are used only internally by the
* ncurses utilities.
*/
#ifdef NCURSES_INTERNALS
/*
* see db_iterator.c - this enumeration lists the places searched for a
* terminal description and defines the order in which they are searched.
*/
typedef enum {
dbdTIC = 0, /* special, used by tic when writing entry */
#if NCURSES_USE_DATABASE
dbdEnvOnce, /* the $TERMINFO environment variable */
dbdHome, /* $HOME/.terminfo */
dbdEnvList, /* the $TERMINFO_DIRS environment variable */
dbdCfgList, /* the compiled-in TERMINFO_DIRS value */
dbdCfgOnce, /* the compiled-in TERMINFO value */
#endif
#if NCURSES_USE_TERMCAP
dbdEnvOnce2, /* the $TERMCAP environment variable */
dbdEnvList2, /* the $TERMPATH environment variable */
dbdCfgList2, /* the compiled-in TERMPATH */
#endif
dbdLAST
} DBDIRS;
#define MAX_USES 32
#define MAX_CROSSLINKS 16
typedef struct entry ENTRY;
typedef struct {
char *name;
ENTRY *link;
long line;
} ENTRY_USES;
struct entry {
TERMTYPE2 tterm;
unsigned nuses;
ENTRY_USES uses[MAX_USES];
int ncrosslinks;
ENTRY *crosslinks[MAX_CROSSLINKS];
long cstart;
long cend;
long startline;
ENTRY *next;
ENTRY *last;
};
extern NCURSES_EXPORT_VAR(ENTRY *) _nc_head;
extern NCURSES_EXPORT_VAR(ENTRY *) _nc_tail;
#define for_entry_list(qp) for (qp = _nc_head; qp; qp = qp->next)
#define MAX_LINE 132
#define NULLHOOK (bool(*)(ENTRY *))0
/*
* Note that WANTED and PRESENT are not simple inverses! If a capability
* has been explicitly cancelled, it's not considered WANTED.
*/
#define WANTED(s) ((s) == ABSENT_STRING)
#define PRESENT(s) (((s) != ABSENT_STRING) && ((s) != CANCELLED_STRING))
#define ANDMISSING(p,q) \
{ \
if (PRESENT(p) && !PRESENT(q)) \
_nc_warning(#p " but no " #q); \
}
#define PAIRED(p,q) \
{ \
if (PRESENT(q) && !PRESENT(p)) \
_nc_warning(#q " but no " #p); \
if (PRESENT(p) && !PRESENT(q)) \
_nc_warning(#p " but no " #q); \
}
/*
* These entrypoints are used only by the ncurses utilities such as tic.
*/
/* alloc_entry.c: elementary allocation code */
extern NCURSES_EXPORT(ENTRY *) _nc_copy_entry (ENTRY *oldp);
extern NCURSES_EXPORT(char *) _nc_save_str (const char *const);
extern NCURSES_EXPORT(void) _nc_init_entry (ENTRY *const);
extern NCURSES_EXPORT(void) _nc_merge_entry (ENTRY *const, ENTRY *const);
extern NCURSES_EXPORT(void) _nc_wrap_entry (ENTRY *const, bool);
/* alloc_ttype.c: elementary allocation code */
extern NCURSES_EXPORT(void) _nc_align_termtype (TERMTYPE2 *, TERMTYPE2 *);
/* free_ttype.c: elementary allocation code */
extern NCURSES_EXPORT(void) _nc_free_termtype2 (TERMTYPE2 *);
/* lib_termcap.c: trim sgr0 string for termcap users */
extern NCURSES_EXPORT(char *) _nc_trim_sgr0 (TERMTYPE2 *);
/* parse_entry.c: entry-parsing code */
#if NCURSES_XNAMES
extern NCURSES_EXPORT_VAR(bool) _nc_user_definable;
extern NCURSES_EXPORT_VAR(bool) _nc_disable_period;
#endif
extern NCURSES_EXPORT(int) _nc_parse_entry (ENTRY *, int, bool);
extern NCURSES_EXPORT(int) _nc_capcmp (const char *, const char *);
/* write_entry.c: writing an entry to the file system */
extern NCURSES_EXPORT(void) _nc_set_writedir (const char *);
extern NCURSES_EXPORT(void) _nc_write_entry (TERMTYPE2 *const);
extern NCURSES_EXPORT(int) _nc_write_object (TERMTYPE2 *, char *, unsigned *, unsigned);
/* comp_parse.c: entry list handling */
extern NCURSES_EXPORT(void) _nc_read_entry_source (FILE*, char*, int, bool, bool (*)(ENTRY*));
extern NCURSES_EXPORT(bool) _nc_entry_match (char *, char *);
extern NCURSES_EXPORT(int) _nc_resolve_uses (bool); /* obs 20040705 */
extern NCURSES_EXPORT(int) _nc_resolve_uses2 (bool, bool);
extern NCURSES_EXPORT(void) _nc_free_entries (ENTRY *);
-extern NCURSES_IMPEXP void NCURSES_API (*_nc_check_termtype)(TERMTYPE *); /* obs 20040705 */
-extern NCURSES_IMPEXP void NCURSES_API (*_nc_check_termtype2)(TERMTYPE2 *, bool);
+extern NCURSES_IMPEXP void (NCURSES_API *_nc_check_termtype)(TERMTYPE *); /* obs 20040705 */
+extern NCURSES_IMPEXP void (NCURSES_API *_nc_check_termtype2)(TERMTYPE2 *, bool);
/* trace_xnames.c */
extern NCURSES_EXPORT(void) _nc_trace_xnames (TERMTYPE *);
#endif /* NCURSES_INTERNALS */
/*
* These entrypoints were used by tack before 1.08.
*/
#undef NCURSES_TACK_1_08
#ifdef NCURSES_INTERNALS
#define NCURSES_TACK_1_08 /* nothing */
#else
#define NCURSES_TACK_1_08 GCC_DEPRECATED("upgrade to tack 1.08")
#endif
/* alloc_ttype.c: elementary allocation code */
extern NCURSES_EXPORT(void) _nc_copy_termtype (TERMTYPE *, const TERMTYPE *) NCURSES_TACK_1_08;
/* lib_acs.c */
extern NCURSES_EXPORT(void) _nc_init_acs (void) NCURSES_TACK_1_08; /* corresponds to traditional 'init_acs()' */
/* free_ttype.c: elementary allocation code */
extern NCURSES_EXPORT(void) _nc_free_termtype (TERMTYPE *) NCURSES_TACK_1_08;
#ifdef __cplusplus
}
#endif
/* *INDENT-ON* */
#endif /* NCURSES_TERM_ENTRY_H_incl */
diff --git a/contrib/ncurses/include/nc_mingw.h b/contrib/ncurses/include/win32_curses.h
similarity index 68%
copy from contrib/ncurses/include/nc_mingw.h
copy to contrib/ncurses/include/win32_curses.h
index 68a418494560..5babf47d214a 100644
--- a/contrib/ncurses/include/nc_mingw.h
+++ b/contrib/ncurses/include/win32_curses.h
@@ -1,72 +1,75 @@
/****************************************************************************
- * Copyright 2018-2019,2020 Thomas E. Dickey *
- * Copyright 2008-2010,2017 Free Software Foundation, Inc. *
+ * Copyright 2018,2020 Thomas E. Dickey *
+ * Copyright 2008-2014,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
- * Author: Thomas Dickey, 2008-on *
+ * Author: Juergen Pfeifer, 2008-on *
****************************************************************************/
-/* $Id: nc_mingw.h,v 1.7 2020/02/02 23:34:34 tom Exp $ */
+/* $Id: win32_curses.h,v 1.2 2020/11/14 23:52:46 tom Exp $ */
-#ifndef NC_MINGW_H
-#define NC_MINGW_H 1
+/*
+ * This is the interface we use on Windows to mimic the control of the settings
+ * of what acts like the classic TTY - the Windows Console.
+ */
-#ifdef _WIN32
-#ifdef WINVER
-# if WINVER < 0x0501
-# error WINVER must at least be 0x0501
-# endif
-#else
-# define WINVER 0x0501
-#endif
-#include <windows.h>
+#if (defined(_WIN32) || defined(_WIN64))
+#ifndef _NC_WIN32_CURSES_H
+#define _NC_WIN32_CURSES_H 1
-#undef sleep
-#define sleep(n) Sleep((n) * 1000)
-
-#undef gettimeofday
-#define gettimeofday(tv,tz) _nc_gettimeofday(tv,tz)
-
-#include <sys/time.h> /* for struct timeval */
-
-extern int _nc_gettimeofday(struct timeval *, void *);
+struct winconmode
+{
+ unsigned long dwFlagIn;
+ unsigned long dwFlagOut;
+};
-#undef HAVE_GETTIMEOFDAY
-#define HAVE_GETTIMEOFDAY 1
+extern NCURSES_EXPORT(void*) _nc_console_fd2handle(int fd);
+extern NCURSES_EXPORT(int) _nc_console_setmode(void* handle, const struct winconmode* arg);
+extern NCURSES_EXPORT(int) _nc_console_getmode(void* handle, struct winconmode* arg);
+extern NCURSES_EXPORT(int) _nc_console_flush(void* handle);
+/*
+ A few definitions of Unix functions we need to emulate
+*/
#define SIGHUP 1
#define SIGKILL 9
-#define getlogin() "username"
-#undef wcwidth
-#define wcwidth(ucs) _nc_wcwidth((wchar_t)(ucs))
-extern int _nc_wcwidth(wchar_t);
+#undef getlogin
+#define getlogin() getenv("USERNAME")
-#endif /* _WIN32 */
+#undef ttyname
+#define ttyname(fd) NULL
+
+#undef sleep
+#define sleep(n) Sleep((n) * 1000)
+
+#undef gettimeofday
+#define gettimeofday(tv,tz) _nc_gettimeofday(tv,tz)
-#endif /* NC_MINGW_H */
+#endif /* _NC_WIN32_CURSES_H */
+#endif /* _WIN32||_WIN64 */
diff --git a/contrib/ncurses/man/curs_add_wch.3x b/contrib/ncurses/man/curs_add_wch.3x
index a208c1aa895d..446020839cd1 100644
--- a/contrib/ncurses/man/curs_add_wch.3x
+++ b/contrib/ncurses/man/curs_add_wch.3x
@@ -1,315 +1,334 @@
.\"***************************************************************************
.\" Copyright 2019,2020 Thomas E. Dickey *
.\" Copyright 2001-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_add_wch.3x,v 1.26 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_add_wch.3x,v 1.28 2020/10/17 23:10:38 tom Exp $
.TH curs_add_wch 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fBadd_wch\fP,
\fBwadd_wch\fP,
\fBmvadd_wch\fP,
\fBmvwadd_wch\fP,
\fBecho_wchar\fP,
\fBwecho_wchar\fP \- add a complex character and rendition to a \fBcurses\fR window, then advance the cursor
.SH SYNOPSIS
.PP
\fB#include <curses.h>\fP
.sp
.B "int add_wch( const cchar_t *\fIwch\fB );"
.br
.B "int wadd_wch( WINDOW *\fIwin\fP, const cchar_t *\fIwch\fB );"
.br
.B "int mvadd_wch( int \fIy\fP, int \fIx\fP, const cchar_t *\fIwch\fB );"
.br
.B "int mvwadd_wch( WINDOW *\fIwin\fP, int \fIy\fP, int \fIx\fP, const cchar_t *\fIwch\fB );"
-.br
+.sp
.B "int echo_wchar( const cchar_t *\fIwch\fB );"
.br
.B "int wecho_wchar( WINDOW *\fIwin\fP, const cchar_t *\fIwch\fB );"
.br
.SH DESCRIPTION
.SS add_wch
.PP
The
\fBadd_wch\fP,
\fBwadd_wch\fP,
\fBmvadd_wch\fP, and
\fBmvwadd_wch\fP
functions put the complex character \fIwch\fP into the given
window at its current position,
which is then advanced.
These functions perform
wrapping and special-character processing as follows:
.bP
If \fIwch\fP refers to a spacing character,
then any previous character at that location is removed.
A new character specified by \fIwch\fP is
placed at that location with rendition specified by \fIwch\fP.
The cursor then advances to
the next spacing character on the screen.
.bP
If \fIwch\fP refers to a non-spacing character,
all previous characters at that location are preserved.
The non-spacing characters of \fIwch\fP
are added to the spacing complex character,
and the rendition specified by \fIwch\fP is ignored.
.bP
If the character part of \fIwch\fP is
a tab, newline, backspace or other control character,
the window is updated and the cursor moves as if \fBaddch\fR were called.
.SS echo_wchar
.PP
The \fBecho_wchar\fP
function is functionally equivalent to a call to
\fBadd_wch\fP
followed by a call to
\fBrefresh\fP(3X).
Similarly, the
\fBwecho_wchar\fP
is functionally equivalent to a call to
\fBwadd_wch\fP
followed by a call to
\fBwrefresh\fP.
The knowledge
that only a single character is being output is taken into consideration and,
for non-control characters, a considerable performance gain might be seen
by using the *\fBecho\fP* functions instead of their equivalents.
.SS Line Graphics
Like \fBaddch\fP(3X),
\fBaddch_wch\fP accepts symbols which make it simple to draw lines and other
frequently used special characters.
These symbols correspond to the same VT100 line-drawing set as
\fBaddch\fP(3X).
.PP
.TS
l l l l l
l l l l l
_ _ _ _ _
lw(1.5i) lw5 lw5 lw5 lw20.
\fBACS\fR \fBUnicode\fP \fBASCII\fR \fBacsc\fP \fBGlyph\fR
\fBName\fR \fBDefault\fP \fBDefault\fR \fBchar\fP \fBName\fR
WACS_BLOCK 0x25ae # 0 solid square block
WACS_BOARD 0x2592 # h board of squares
WACS_BTEE 0x2534 + v bottom tee
WACS_BULLET 0x00b7 o ~ bullet
WACS_CKBOARD 0x2592 : a checker board (stipple)
WACS_DARROW 0x2193 v . arrow pointing down
WACS_DEGREE 0x00b0 ' f degree symbol
WACS_DIAMOND 0x25c6 + ` diamond
WACS_GEQUAL 0x2265 > > greater-than-or-equal-to
WACS_HLINE 0x2500 \- q horizontal line
WACS_LANTERN 0x2603 # i lantern symbol
WACS_LARROW 0x2190 < , arrow pointing left
WACS_LEQUAL 0x2264 < y less-than-or-equal-to
WACS_LLCORNER 0x2514 + m lower left-hand corner
WACS_LRCORNER 0x2518 + j lower right-hand corner
WACS_LTEE 0x2524 + t left tee
WACS_NEQUAL 0x2260 ! | not-equal
WACS_PI 0x03c0 * { greek pi
WACS_PLMINUS 0x00b1 # g plus/minus
WACS_PLUS 0x253c + n plus
WACS_RARROW 0x2192 > + arrow pointing right
WACS_RTEE 0x251c + u right tee
WACS_S1 0x23ba \- o scan line 1
WACS_S3 0x23bb \- p scan line 3
WACS_S7 0x23bc \- r scan line 7
WACS_S9 0x23bd \&_ s scan line 9
WACS_STERLING 0x00a3 f } pound-sterling symbol
WACS_TTEE 0x252c + w top tee
WACS_UARROW 0x2191 ^ \- arrow pointing up
WACS_ULCORNER 0x250c + l upper left-hand corner
WACS_URCORNER 0x2510 + k upper right-hand corner
WACS_VLINE 0x2502 | x vertical line
.TE
.PP
The wide-character configuration of ncurses also defines symbols
for thick lines (\fBacsc\fP \*(``J\*('' to \*(``V\*(''):
.TS
l l l l l
l l l l l
_ _ _ _ _
lw(1.5i) lw5 lw5 lw5 lw20.
\fBACS\fR \fBUnicode\fP \fBASCII\fR \fBacsc\fP \fBGlyph\fR
\fBName\fR \fBDefault\fP \fBDefault\fR \fBchar\fP \fBName\fR
WACS_T_BTEE 0x253b + V thick tee pointing up
WACS_T_HLINE 0x2501 - Q thick horizontal line
WACS_T_LLCORNER 0x2517 + M thick lower left corner
WACS_T_LRCORNER 0x251b + J thick lower right corner
WACS_T_LTEE 0x252b + T thick tee pointing right
WACS_T_PLUS 0x254b + N thick large plus
WACS_T_RTEE 0x2523 + U thick tee pointing left
WACS_T_TTEE 0x2533 + W thick tee pointing down
WACS_T_ULCORNER 0x250f + L thick upper left corner
WACS_T_URCORNER 0x2513 + K thick upper right corner
WACS_T_VLINE 0x2503 | X thick vertical line
.TE
.PP
and for double-lines (\fBacsc\fP \*(``A\*('' to \*(``I\*(''):
.PP
.TS
l l l l l
l l l l l
_ _ _ _ _
lw(1.5i) lw5 lw5 lw5 lw20.
\fBACS\fR \fBUnicode\fP \fBASCII\fR \fBacsc\fP \fBGlyph\fR
\fBName\fR \fBDefault\fP \fBDefault\fR \fBchar\fP \fBName\fR
WACS_D_BTEE 0x2569 + H double tee pointing up
WACS_D_HLINE 0x2550 - R double horizontal line
WACS_D_LLCORNER 0x255a + D double lower left corner
WACS_D_LRCORNER 0x255d + A double lower right corner
WACS_D_LTEE 0x2560 + F double tee pointing right
WACS_D_PLUS 0x256c + E double large plus
WACS_D_RTEE 0x2563 + G double tee pointing left
WACS_D_TTEE 0x2566 + I double tee pointing down
WACS_D_ULCORNER 0x2554 + C double upper left corner
WACS_D_URCORNER 0x2557 + B double upper right corner
WACS_D_VLINE 0x2551 | Y double vertical line
.TE
.PP
Unicode's descriptions for these characters differs slightly from ncurses,
by introducing the term \*(``light\*('' (along with less important details).
Here are its descriptions for the normal, thick, and double horizontal lines:
.bP
U+2500 BOX DRAWINGS LIGHT HORIZONTAL
.bP
U+2501 BOX DRAWINGS HEAVY HORIZONTAL
.bP
U+2550 BOX DRAWINGS DOUBLE HORIZONTAL
.SH RETURN VALUE
.PP
All routines return the integer \fBERR\fR upon failure and \fBOK\fR on success.
.PP
+X/Open does not define any error conditions.
+This implementation returns an error
+.bP
+if the window pointer is null or
+.bP
+if it is not possible to add a complete character in the window.
+.PP
+The latter may be due to different causes:
+.bP
+If \fBscrollok\fR is not enabled,
+writing a character at the lower right margin succeeds.
+However, an error is returned because
+it is not possible to wrap to a new line
+.bP
+If an error is detected when converting a multibyte character to a sequence
+of bytes,
+or if it is not possible to add all of the resulting bytes in the window,
+an error is returned.
+.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH NOTES
.PP
Note that
\fBadd_wch\fP,
\fBmvadd_wch\fP,
\fBmvwadd_wch\fP, and
\fBecho_wchar\fP
may be macros.
.SH PORTABILITY
.PP
All of these functions are described in the XSI Curses standard, Issue 4.
The defaults specified for line-drawing characters apply in the POSIX locale.
.PP
X/Open Curses makes it clear that the WACS_ symbols should be defined as
a pointer to \fBcchar_t\fP data, e.g., in the discussion of \fBborder_set\fR.
A few implementations are problematic:
.bP
NetBSD curses defines the symbols as a \fBwchar_t\fP within a \fBcchar_t\fP.
.bP
HPUX curses equates some of the \fIACS_\fP symbols
to the analogous \fIWACS_\fP symbols as if the \fIACS_\fP symbols were
wide characters.
The misdefined symbols are the arrows
and other symbols which are not used for line-drawing.
.PP
X/Open Curses does not define symbols for thick- or double-lines.
SVr4 curses implementations defined their line-drawing symbols in
terms of intermediate symbols.
This implementation extends those symbols, providing new definitions
which are not in the SVr4 implementations.
.PP
Not all Unicode-capable terminals provide support for VT100-style
alternate character sets (i.e., the \fBacsc\fP capability),
with their corresponding line-drawing characters.
X/Open Curses did not address the aspect of integrating Unicode with
line-drawing characters.
Existing implementations of Unix curses (AIX, HPUX, Solaris)
use only the \fBacsc\fP character-mapping to provide this feature.
As a result, those implementations can only use single-byte line-drawing
characters.
Ncurses 5.3 (2002) provided a table of Unicode values to solve these problems.
NetBSD curses incorporated that table in 2010.
.PP
In this implementation, the Unicode values are used instead of the
terminal description's \fBacsc\fP mapping as discussed in ncurses(3X)
for the environment variable \fBNCURSES_NO_UTF8_ACS\fP.
In contrast, for the same cases, the line-drawing characters
described in \fBcurs_addch\fP(3X) will use only the ASCII default values.
.PP
Having Unicode available does not solve all of the problems with
line-drawing for curses:
.bP
The closest Unicode equivalents to the
VT100 graphics \fIS1\fP, \fIS3\fP, \fIS7\fP and \fIS9\fP
frequently are not displayed at
the regular intervals which the terminal used.
.bP
The \fIlantern\fP is a special case.
It originated with the AT&T 4410 terminal in the early 1980s.
There is no accessible documentation depicting the lantern symbol
on the AT&T terminal.
.IP
Lacking documentation, most readers assume that a \fIstorm lantern\fP
was intended.
But there are several possibilities, all with problems.
.IP
Unicode 6.0 (2010) does provide two lantern symbols: U+1F383 and U+1F3EE.
Those were not available in 2002, and are irrelevant since
they lie outside the BMP and as a result are not generally available
in terminals.
They are not storm lanterns, in any case.
.IP
Most \fIstorm lanterns\fP have a tapering glass chimney
(to guard against tipping);
some have a wire grid protecting the chimney.
.IP
For the tapering appearance, \[u2603] U+2603 was adequate.
In use on a terminal, no one can tell what the image represents.
Unicode calls it a snowman.
.IP
Others have suggested these alternatives:
\[sc] U+00A7 (section mark),
\[u0398] U+0398 (theta),
\[u03A6] U+03A6 (phi),
\[u03B4] U+03B4 (delta),
\[u2327] U+2327 (x in a rectangle),
\[u256C] U+256C (forms double vertical and horizontal), and
\[u2612] U+2612 (ballot box with x).
.SH SEE ALSO
.na
.PP
\fBcurses\fR(3X),
\fBcurs_addch\fR(3X),
\fBcurs_attr\fR(3X),
\fBcurs_clear\fR(3X),
\fBcurs_outopts\fR(3X),
\fBcurs_refresh\fR(3X),
\fBputwc\fR(3)
diff --git a/contrib/ncurses/man/curs_add_wchstr.3x b/contrib/ncurses/man/curs_add_wchstr.3x
index 5ce6d04cf3d3..c037be632ebe 100644
--- a/contrib/ncurses/man/curs_add_wchstr.3x
+++ b/contrib/ncurses/man/curs_add_wchstr.3x
@@ -1,123 +1,123 @@
.\"***************************************************************************
.\" Copyright 2019,2020 Thomas E. Dickey *
.\" Copyright 2002-2012,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_add_wchstr.3x,v 1.13 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_add_wchstr.3x,v 1.15 2020/12/19 21:39:06 tom Exp $
.TH curs_add_wchstr 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.SH NAME
\fBadd_wchstr\fR,
\fBadd_wchnstr\fR,
\fBwadd_wchstr\fR,
\fBwadd_wchnstr\fR,
\fBmvadd_wchstr\fR,
\fBmvadd_wchnstr\fR,
\fBmvwadd_wchstr\fR,
\fBmvwadd_wchnstr\fR \- add an array of complex characters (and attributes) to a curses window
.ad
.hy
.SH SYNOPSIS
.nf
\fB#include <curses.h>\fR
.PP
\fBint add_wchstr(const cchar_t *\fR\fIwchstr\fR\fB);\fR
.br
\fBint add_wchnstr(const cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint wadd_wchstr(WINDOW *\fR \fIwin\fR\fB, const cchar_t *\fR\fIwchstr\fR\fB);\fR
.br
\fBint wadd_wchnstr(WINDOW *\fR \fIwin\fR\fB, const cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR
-.br
+.sp
\fBint mvadd_wchstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const cchar_t *\fR\fIwchstr\fR\fB);\fR
.br
\fBint mvadd_wchnstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint mvwadd_wchstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const cchar_t *\fR\fIwchstr\fR\fB);\fR
.br
\fBint mvwadd_wchnstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR
.fi
.SH DESCRIPTION
These functions copy the (null-terminated)
array of complex characters \fIwchstr\fR
into the window image structure
starting at the current cursor position.
The four functions with \fIn\fR as the last
argument copy at most \fIn\fR elements,
but no more than will fit on the line.
If \fBn\fR=\fB\-1\fR then the whole array is copied,
to the maximum number of characters that will fit on the line.
.PP
The window cursor is \fInot\fR advanced.
These functions work faster than \fBwaddnstr\fR.
On the other hand:
.bP
they do not perform checking
(such as for the newline, backspace, or carriage return characters),
.bP
they do not advance the current cursor position,
.bP
they do not expand other control characters to ^-escapes, and
.bP
they truncate the string if it crosses the right margin,
rather than wrapping it around to the new line.
.PP
These functions end successfully
on encountering a null \fIcchar_t\fR, or
when they have filled the current line.
If a complex character cannot completely fit at the end of the current line,
the remaining columns are filled with the background character and rendition.
.SH RETURN VALUE
All functions return the integer \fBERR\fR upon failure and \fBOK\fR on success.
.PP
X/Open does not define any error conditions.
This implementation returns an error
if the window pointer is null.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH NOTES
All functions except \fBwadd_wchnstr\fR may be macros.
.SH PORTABILITY
These entry points are described in the XSI Curses standard, Issue 4.
.SH SEE ALSO
-\fBcurs_addwstr\fR(3X),
-\fBcurses\fR(3X).
+\fBcurses\fR(3X),
+\fBcurs_addwstr\fR(3X).
.PP
Comparable functions in the narrow-character (ncurses) library are
described in
\fBcurs_addchstr\fR(3X).
diff --git a/contrib/ncurses/man/curs_addch.3x b/contrib/ncurses/man/curs_addch.3x
index c92d12b7109d..338a6e27855f 100644
--- a/contrib/ncurses/man/curs_addch.3x
+++ b/contrib/ncurses/man/curs_addch.3x
@@ -1,300 +1,314 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_addch.3x,v 1.51 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_addch.3x,v 1.55 2020/10/24 09:12:31 tom Exp $
.TH curs_addch 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fBaddch\fR,
\fBwaddch\fR,
\fBmvaddch\fR,
\fBmvwaddch\fR,
\fBechochar\fR,
\fBwechochar\fR \- add a character (with attributes) to a \fBcurses\fR window, then advance the cursor
.SH SYNOPSIS
\fB#include <curses.h>\fR
.PP
-\fBint addch(const chtype ch);\fR
+\fBint addch(const chtype \fP\fIch\fP\fB);\fR
.br
-\fBint waddch(WINDOW *win, const chtype ch);\fR
+\fBint waddch(WINDOW *\fP\fIwin\fP\fB, const chtype \fP\fIch\fP\fB);\fR
.br
-\fBint mvaddch(int y, int x, const chtype ch);\fR
+\fBint mvaddch(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const chtype \fP\fIch\fP\fB);\fR
.br
-\fBint mvwaddch(WINDOW *win, int y, int x, const chtype ch);\fR
+\fBint mvwaddch(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const chtype \fP\fIch\fP\fB);\fR
+.sp
+\fBint echochar(const chtype \fP\fIch\fP\fB);\fR
.br
-\fBint echochar(const chtype ch);\fR
-.br
-\fBint wechochar(WINDOW *win, const chtype ch);\fR
+\fBint wechochar(WINDOW *\fP\fIwin\fP\fB, const chtype \fP\fIch\fP\fB);\fR
.br
.SH DESCRIPTION
.SS Adding characters
The \fBaddch\fR, \fBwaddch\fR, \fBmvaddch\fR and \fBmvwaddch\fR routines put
the character \fIch\fR into the given window at its current window position,
which is then advanced.
They are analogous to \fBputchar\fR(3) in \fBstdio\fR(3).
If the advance is at the right margin:
.bP
The cursor automatically wraps to the beginning of the next line.
.bP
At the bottom of the current scrolling region,
and if \fBscrollok\fR is enabled,
the scrolling region is scrolled up one line.
.bP
If \fBscrollok\fR is not enabled,
writing a character at the lower right margin succeeds.
However, an error is returned because
it is not possible to wrap to a new line
.PP
If \fIch\fR is a tab, newline, carriage return or backspace,
the cursor is moved appropriately within the window:
.bP
Backspace moves the cursor one character left; at the left
edge of a window it does nothing.
.bP
Carriage return moves the cursor to the window left margin on the current line.
.bP
Newline does a \fBclrtoeol\fR,
then moves the cursor to the window left margin on the next line,
scrolling the window if on the last line.
.bP
Tabs are considered to be at every eighth column.
The tab interval may be altered by setting the \fBTABSIZE\fR variable.
.PP
-If \fIch\fR is any other control character, it
-is drawn in \fB^\fR\fIX\fR notation.
+If \fIch\fR is any other nonprintable character,
+it is drawn in printable form,
+i.e., the \fB^\fR\fIX\fR notation used by \fBunctrl\fR(3X).
Calling \fBwinch\fR after adding a
-control character does not return the character itself, but instead returns
-the ^-representation of the control character.
+nonprintable character does not return the character itself,
+but instead returns the printable representation of the character.
.PP
Video attributes can be combined with a character argument passed to
\fBaddch\fR or related functions by logical-ORing them into the character.
(Thus, text, including attributes, can be copied from one place to another
using \fBinch\fR(3X) and \fBaddch\fR.) See the \fBcurs_attr\fR(3X) page for
values of predefined video attribute constants that can be usefully OR'ed
into characters.
.SS Echoing characters
.PP
The \fBechochar\fR and \fBwechochar\fR routines are equivalent to a call to
\fBaddch\fR followed by a call to \fBrefresh\fR(3X), or a call to \fBwaddch\fR
followed by a call to \fBwrefresh\fR.
The knowledge that only a single
character is being output is used and, for non-control characters, a
considerable performance gain may be seen by using these routines instead of
their equivalents.
.SS Line Graphics
The following variables may be used to add line drawing characters to the
screen with routines of the \fBaddch\fR family.
The default character listed
below is used if the \fBacsc\fR capability does not define a terminal-specific
replacement for it,
or if the terminal and locale configuration requires Unicode but the
library is unable to use Unicode.
.PP
The names are taken from VT100 nomenclature.
.PP
.TS
l l l l
l l l l
_ _ _ _
l l l l.
\fBACS\fR \fBACS\fR \fBacsc\fP \fBGlyph\fR
\fBName\fR \fBDefault\fR \fBchar\fP \fBName\fR
ACS_BLOCK # 0 solid square block
ACS_BOARD # h board of squares
ACS_BTEE + v bottom tee
ACS_BULLET o ~ bullet
ACS_CKBOARD : a checker board (stipple)
ACS_DARROW v . arrow pointing down
ACS_DEGREE ' f degree symbol
ACS_DIAMOND + ` diamond
ACS_GEQUAL > > greater-than-or-equal-to
ACS_HLINE \- q horizontal line
ACS_LANTERN # i lantern symbol
ACS_LARROW < , arrow pointing left
ACS_LEQUAL < y less-than-or-equal-to
ACS_LLCORNER + m lower left-hand corner
ACS_LRCORNER + j lower right-hand corner
ACS_LTEE + t left tee
ACS_NEQUAL ! | not-equal
ACS_PI * { greek pi
ACS_PLMINUS # g plus/minus
ACS_PLUS + n plus
ACS_RARROW > + arrow pointing right
ACS_RTEE + u right tee
ACS_S1 \- o scan line 1
ACS_S3 \- p scan line 3
ACS_S7 \- r scan line 7
ACS_S9 \&_ s scan line 9
ACS_STERLING f } pound-sterling symbol
ACS_TTEE + w top tee
ACS_UARROW ^ \- arrow pointing up
ACS_ULCORNER + l upper left-hand corner
ACS_URCORNER + k upper right-hand corner
ACS_VLINE | x vertical line
.TE
.SH RETURN VALUE
All routines return the integer \fBERR\fR upon failure and \fBOK\fR on success
(the SVr4 manuals specify only
\*(``an integer value other than \fBERR\fR\*('') upon successful completion,
unless otherwise noted in the preceding routine descriptions.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
+.PP
+If it is not possible to add a complete character,
+an error is returned:
+.bP
+If \fBscrollok\fR is not enabled,
+writing a character at the lower right margin succeeds.
+However, an error is returned because
+it is not possible to wrap to a new line
+.bP
+If an error is detected when converting a multibyte character to a sequence
+of bytes,
+or if it is not possible to add all of the resulting bytes in the window,
+an error is returned.
.SH NOTES
Note that \fBaddch\fR, \fBmvaddch\fR, \fBmvwaddch\fR, and
\fBechochar\fR may be macros.
.SH PORTABILITY
All these functions are described in the XSI Curses standard, Issue 4.
The defaults specified for forms-drawing characters apply in the POSIX locale.
.SS ACS Symbols
.LP
X/Open Curses states that the \fIACS_\fP definitions are \fBchar\fP constants.
For the wide-character implementation (see \fBcurs_add_wch\fP),
there are analogous \fIWACS_\fP definitions which are \fBcchar_t\fP constants.
Some implementations are problematic:
.bP
Some implementations define the ACS symbols to a constant
(such as Solaris), while others define those to entries in an array.
.IP
This implementation uses an array \fBacs_map\fP, as done in SVr4 curses.
NetBSD also uses an array, actually named \fB_acs_char\fP, with a \fB#define\fP
for compatibility.
.bP
HPUX curses equates some of the \fIACS_\fP symbols
to the analogous \fIWACS_\fP symbols as if the \fIACS_\fP symbols were
wide characters.
The misdefined symbols are the arrows
and other symbols which are not used for line-drawing.
.bP
X/Open Curses (issues 2 through 7) has a typographical error
for the ACS_LANTERN symbol, equating its \*(``VT100+ Character\*(''
to \fBI\fP (capital I), while the header files for SVr4 curses
and the various implementations use \fBi\fP (lowercase).
.IP
None of the terminal descriptions on Unix platforms use uppercase-I,
except for Solaris (i.e., \fIscreen\fP's terminal description,
apparently based on the X/Open documentation around 1995).
On the other hand, the terminal description \fIgs6300\fP
(AT&T PC6300 with EMOTS Terminal Emulator) uses lowercase-i.
.LP
Some ACS symbols
(ACS_S3,
ACS_S7,
ACS_LEQUAL,
ACS_GEQUAL,
ACS_PI,
ACS_NEQUAL,
ACS_STERLING)
were not documented in
any publicly released System V.
However, many publicly available terminfos
include \fBacsc\fR strings in which their key characters (pryz{|}) are
embedded, and a second-hand list of their character descriptions has come
to light.
The ACS-prefixed names for them were invented for \fBncurses\fR(3X).
.LP
The \fIdisplayed\fP values for the \fIACS_\fP and \fIWACS_\fP constants
depend on
.bP
the library configuration, i.e., \fBncurses\fP versus \fBncursesw\fP,
where the latter is capable of displaying Unicode while the former is not, and
.bP
whether the \fIlocale\fP uses UTF-8 encoding.
.LP
In certain cases, the terminal is unable to display line-drawing characters
except by using UTF-8 (see the discussion of \fBNCURSES_NO_UTF8_ACS\fP in
ncurses(3X)).
.SS Character Set
X/Open Curses assumes that the parameter passed to \fBwaddch\fP contains
a single character.
As discussed in \fBcurs_attr\fP(3X), that character may have been
more than eight bits in an SVr3 or SVr4 implementation,
but in the X/Open Curses model, the details are not given.
The important distinction between SVr4 curses and X/Open Curses is
that the non-character information (attributes and color) was
separated from the character information which is packed in a \fBchtype\fP
to pass to \fBwaddch\fP.
.PP
In this implementation, \fBchtype\fP holds an eight-bit character.
But ncurses allows multibyte characters to be passed in a succession
of calls to \fBwaddch\fP.
The other implementations do not do this;
a call to \fBwaddch\fP passes exactly one character
which may be rendered as one or more cells on the screen
depending on whether it is printable.
.PP
Depending on the locale settings,
ncurses will inspect the byte passed in each call to \fBwaddch\fP,
and check if the latest call will continue a multibyte sequence.
When a character is \fIcomplete\fP,
ncurses displays the character and moves to the next position in the screen.
.PP
If the calling application interrupts the succession of bytes in
a multibyte character by moving the current location (e.g., using \fBwmove\fP),
ncurses discards the partially built character,
starting over again.
.PP
For portability to other implementations,
do not rely upon this behavior:
.bP
check if a character can be represented as a single byte in the current locale
before attempting call \fBwaddch\fP, and
.bP
call \fBwadd_wch\fP for characters which cannot be handled by \fBwaddch\fP.
.SS TABSIZE
.LP
The \fBTABSIZE\fR variable is implemented in SVr4 and other versions of curses,
but is not part of X/Open curses
(see \fBcurs_variables\fR(3X) for more details).
.LP
If \fIch\fR is a carriage return,
the cursor is moved to the beginning of the current row of the window.
This is true of other implementations, but is not documented.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_attr\fR(3X),
\fBcurs_clear\fR(3X),
\fBcurs_inch\fR(3X),
\fBcurs_outopts\fR(3X),
\fBcurs_refresh\fR(3X),
\fBcurs_variables\fR(3X),
\fBputc\fR(3).
.PP
Comparable functions in the wide-character (ncursesw) library are
described in
\fBcurs_add_wch\fR(3X).
diff --git a/contrib/ncurses/man/curs_addchstr.3x b/contrib/ncurses/man/curs_addchstr.3x
index 37e6aeec822b..09d70d6e8e1f 100644
--- a/contrib/ncurses/man/curs_addchstr.3x
+++ b/contrib/ncurses/man/curs_addchstr.3x
@@ -1,117 +1,117 @@
.\"***************************************************************************
.\" Copyright 2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2012,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_addchstr.3x,v 1.19 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_addchstr.3x,v 1.22 2020/12/19 21:39:20 tom Exp $
.TH curs_addchstr 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.SH NAME
\fBaddchstr\fR,
\fBaddchnstr\fR,
\fBwaddchstr\fR,
\fBwaddchnstr\fR,
\fBmvaddchstr\fR,
\fBmvaddchnstr\fR,
\fBmvwaddchstr\fR,
\fBmvwaddchnstr\fR \- add a string of characters (and attributes) to a \fBcurses\fR window
.ad
.hy
.SH SYNOPSIS
.nf
\fB#include <curses.h>\fR
.PP
-\fBint addchstr(const chtype *chstr);\fR
+\fBint addchstr(const chtype *\fP\fIchstr\fP\fB);\fR
.br
-\fBint addchnstr(const chtype *chstr, int n);\fR
+\fBint addchnstr(const chtype *\fP\fIchstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint waddchstr(WINDOW *win, const chtype *chstr);\fR
+\fBint waddchstr(WINDOW *\fP\fIwin\fP\fB, const chtype *\fP\fIchstr\fP\fB);\fR
.br
-\fBint waddchnstr(WINDOW *win, const chtype *chstr, int n);\fR
+\fBint waddchnstr(WINDOW *\fP\fIwin\fP\fB, const chtype *\fP\fIchstr\fP\fB, int \fP\fIn\fP\fB);\fR
+.sp
+\fBint mvaddchstr(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const chtype *\fP\fIchstr\fP\fB);\fR
.br
-\fBint mvaddchstr(int y, int x, const chtype *chstr);\fR
+\fBint mvaddchnstr(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const chtype *\fP\fIchstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint mvaddchnstr(int y, int x, const chtype *chstr, int n);\fR
+\fBint mvwaddchstr(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const chtype *\fP\fIchstr\fP\fB);\fR
.br
-\fBint mvwaddchstr(WINDOW *win, int y, int x, const chtype *chstr);\fR
-.br
-\fBint mvwaddchnstr(WINDOW *win, int y, int x, const chtype *chstr, int n);\fR
+\fBint mvwaddchnstr(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const chtype *\fP\fIchstr\fP\fB, int \fP\fIn\fP\fB);\fR
.fi
.SH DESCRIPTION
These functions copy the (null-terminated)
\fIchstr\fR array
into the window image structure
starting at the current cursor position.
The four functions with \fIn\fR as the last
argument copy at most \fIn\fR elements,
but no more than will fit on the line.
If \fBn\fR=\fB\-1\fR then the whole array is copied,
to the maximum number of characters that will fit on the line.
.PP
The window cursor is \fInot\fR advanced.
These functions work faster than \fBwaddnstr\fR.
On the other hand:
.bP
they do not perform checking
(such as for the newline, backspace, or carriage return characters),
.bP
they do not advance the current cursor position,
.bP
they do not expand other control characters to ^-escapes, and
.bP
they truncate the string if it crosses the right margin,
rather than wrapping it around to the new line.
.SH RETURN VALUE
All functions return the integer \fBERR\fR upon failure and \fBOK\fR on success.
.PP
X/Open does not define any error conditions.
This implementation returns an error
if the window pointer is null.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH NOTES
All functions except \fBwaddchnstr\fR may be macros.
.SH PORTABILITY
These entry points are described in the XSI Curses standard, Issue 4.
.SH SEE ALSO
-\fBcurs_addstr\fR(3X),
-\fBcurses\fR(3X).
+\fBcurses\fR(3X),
+\fBcurs_addstr\fR(3X).
.PP
Comparable functions in the wide-character (ncursesw) library are
described in
\fBcurs_add_wchstr\fR(3X).
diff --git a/contrib/ncurses/man/curs_addstr.3x b/contrib/ncurses/man/curs_addstr.3x
index 6d54ebbe4e78..6f280e64ee1b 100644
--- a/contrib/ncurses/man/curs_addstr.3x
+++ b/contrib/ncurses/man/curs_addstr.3x
@@ -1,107 +1,119 @@
.\"***************************************************************************
.\" Copyright 2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2012,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_addstr.3x,v 1.20 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_addstr.3x,v 1.23 2020/10/17 23:11:02 tom Exp $
.TH curs_addstr 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.SH NAME
\fBaddstr\fR,
\fBaddnstr\fR,
\fBwaddstr\fR,
\fBwaddnstr\fR,
\fBmvaddstr\fR,
\fBmvaddnstr\fR,
\fBmvwaddstr\fR,
\fBmvwaddnstr\fR \- add a string of characters to a \fBcurses\fR window and advance cursor
.ad
.hy
.SH SYNOPSIS
.nf
\fB#include <curses.h>\fR
.PP
\fBint addstr(const char *\fR\fIstr\fR\fB);\fR
.br
\fBint addnstr(const char *\fR\fIstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint waddstr(WINDOW *\fR\fIwin\fR\fB, const char *\fR\fIstr\fR\fB);\fR
.br
\fBint waddnstr(WINDOW *\fR\fIwin\fR\fB, const char *\fR\fIstr\fR\fB, int \fR\fIn\fR\fB);\fR
-.br
+.sp
\fBint mvaddstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const char *\fR\fIstr\fR\fB);\fR
.br
\fBint mvaddnstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const char *\fR\fIstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint mvwaddstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const char *\fR\fIstr\fR\fB);\fR
.br
\fBint mvwaddnstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const char *\fR\fIstr, int \fR\fIn\fR\fB);\fR
.fi
.SH DESCRIPTION
These functions write the (null-terminated) character string
\fIstr\fR on the given window.
-It is similar to calling \fBwaddch\fR once for each character in the string.
+It is similar to calling \fBwaddch\fR once for each byte in the string.
.PP
The \fImv\fR functions perform cursor movement once, before writing any
characters.
Thereafter, the cursor is advanced as a side-effect of writing to the window.
.PP
The four functions with \fIn\fR as the last argument
-write at most \fIn\fR characters,
+write at most \fIn\fR bytes,
or until a terminating null is reached.
If \fIn\fR is \-1, then the entire string will be added.
.SH RETURN VALUE
All functions return the integer \fBERR\fR upon failure and \fBOK\fR on success.
.PP
X/Open does not define any error conditions.
This implementation returns an error
.bP
if the window pointer is null or
.bP
if the string pointer is null or
.bP
if the corresponding calls to \fBwaddch\fP return an error.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
+If an error is returned by the \fBwmove\fP,
+no characters are added to the window.
+.PP
+If an error is returned by \fBwaddch\fP
+(e.g.,
+because the window is not large enough,
+or an illegal byte sequence was detected)
+only part of the string may be added.
+Aside from that,
+there is a special case in \fBwaddch\fP where an error may be
+returned after successfully writing a character to the lower-right corner
+of a window when \fBscrollok\fP is disabled.
.SH NOTES
All of these functions except \fBwaddnstr\fR may be macros.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_addch\fR(3X).
diff --git a/contrib/ncurses/man/curs_addwstr.3x b/contrib/ncurses/man/curs_addwstr.3x
index f1d738f18a85..6f7c3dbe17f7 100644
--- a/contrib/ncurses/man/curs_addwstr.3x
+++ b/contrib/ncurses/man/curs_addwstr.3x
@@ -1,109 +1,109 @@
.\"***************************************************************************
.\" Copyright 2019,2020 Thomas E. Dickey *
.\" Copyright 2002-2012,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_addwstr.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_addwstr.3x,v 1.15 2020/10/17 23:12:22 tom Exp $
.TH curs_addwstr 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.SH NAME
\fBaddwstr\fR,
\fBaddnwstr\fR,
\fBwaddwstr\fR,
\fBwaddnwstr\fR,
\fBmvaddwstr\fR,
\fBmvaddnwstr\fR,
\fBmvwaddwstr\fR,
\fBmvwaddnwstr\fR \- add a string of wide characters to a \fBcurses\fR window and advance cursor
.ad
.hy
.SH SYNOPSIS
.nf
\fB#include <curses.h>\fR
.PP
\fBint addwstr(const wchar_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint addnwstr(const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint waddwstr(WINDOW *\fR\fIwin\fR\fB, const wchar_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint waddnwstr(WINDOW *\fR\fIwin\fR\fB, const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
-.br
+.sp
\fBint mvaddwstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint mvaddnwstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint mvwaddwstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint mvwaddnwstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.fi
.SH DESCRIPTION
These functions write the characters of the
(null-terminated) \fBwchar_t\fR character string
\fIwstr\fR on the given window.
It is similar to constructing a \fBcchar_t\fR for each wchar_t in the string,
then calling \fBwadd_wch\fR for the resulting \fBcchar_t\fR.
.PP
The \fImv\fR functions perform cursor movement once, before writing any
characters.
Thereafter, the cursor is advanced as a side-effect of writing to the window.
.PP
The four functions with \fIn\fR as the last argument
write at most \fIn\fR \fBwchar_t\fR characters,
or until a terminating null is reached.
If \fIn\fR is \-1, then the entire string will be added.
.SH RETURN VALUE
All functions return the integer \fBERR\fR upon failure and \fBOK\fR on success.
.PP
X/Open does not define any error conditions.
This implementation returns an error
.bP
if the window pointer is null or
.bP
if the string pointer is null or
.bP
if the corresponding calls to \fBwadd_wch\fP return an error.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH NOTES
All of these functions except \fBwaddnwstr\fR may be macros.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_add_wch\fR(3X)
diff --git a/contrib/ncurses/man/curs_bkgd.3x b/contrib/ncurses/man/curs_bkgd.3x
index 6b6638824298..051d5fda0683 100644
--- a/contrib/ncurses/man/curs_bkgd.3x
+++ b/contrib/ncurses/man/curs_bkgd.3x
@@ -1,161 +1,161 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_bkgd.3x,v 1.30 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_bkgd.3x,v 1.31 2020/10/17 23:12:52 tom Exp $
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.TH curs_bkgd 3X ""
.SH NAME
\fBbkgdset\fR, \fBwbkgdset\fR,
\fBbkgd\fR, \fBwbkgd\fR,
\fBgetbkgd\fR \- \fBcurses\fR window background manipulation routines
.SH SYNOPSIS
\fB#include <curses.h>\fR
.PP
\fBvoid bkgdset(chtype \fP\fIch\fP\fB);\fR
.br
\fBvoid wbkgdset(WINDOW *\fP\fIwin, chtype \fP\fIch\fP\fB);\fR
-.br
+.sp
\fBint bkgd(chtype \fP\fIch\fP\fB);\fR
.br
\fBint wbkgd(WINDOW *\fP\fIwin\fP\fB, chtype \fP\fIch\fP\fB);\fR
-.br
+.sp
\fBchtype getbkgd(WINDOW *\fP\fIwin\fP\fB);\fR
.br
.SH DESCRIPTION
.SS bkgdset
The \fBbkgdset\fR and \fBwbkgdset\fR routines manipulate the
background of the named window.
The window background is a \fBchtype\fR consisting of
any combination of attributes (i.e., rendition) and a character.
The attribute part of the background is combined (OR'ed) with all non-blank
characters that are written into the window with \fBwaddch\fR.
Both the character and attribute parts of the background are combined with
the blank characters.
The background becomes a property of the
character and moves with the character through any scrolling and
insert/delete line/character operations.
.PP
To the extent possible on a particular terminal,
the attribute part of the background is displayed
as the graphic rendition of the character put on the screen.
.SS bkgd
.PP
The \fBbkgd\fR and \fBwbkgd\fR functions
set the background property of the current or specified window
and then apply this setting to every character position in that window.
According to X/Open Curses, it should do this:
.PP
.bP
The rendition of every character on the screen is changed to
the new background rendition.
.bP
Wherever the former background character
appears, it is changed to the new background character.
.PP
Neither X/Open Curses nor the SVr4 manual pages give details about
the way the rendition of characters on the screen is updated when
\fBbkgd\fP or \fBwbkgd\fP is used to change the background character.
.PP
This implementation, like SVr4 curses, does not store the background
and window attribute contributions to each cell separately.
It updates the rendition by comparing the character, non-color attributes and
colors contained in the background.
For each cell in the window, whether or not it is blank:
.bP
The library first compares the \fIcharacter\fP,
and if it matches the current character part of the background,
it replaces that with the new background character.
.bP
The library then checks if the cell uses color,
i.e., its color pair value is nonzero.
If not, it simply replaces the attributes and color pair in the
cell with those from the new background character.
.bP
If the cell uses color,
and that matches the color in the current background,
the library removes attributes
which may have come from the current background
and adds attributes from the new background.
It finishes by setting the cell
to use the color from the new background.
.bP
If the cell uses color,
and that does not match the color in the current background,
the library updates only the non-color attributes,
first removing those which may have come from the current background,
and then adding attributes from the new background.
.PP
If the background's character value is zero, a space is assumed.
.PP
If the terminal does not support color,
or if color has not been started with \fBstart_color\fP,
the new background character's color attribute will be ignored.
.SS getbkgd
.PP
The \fBgetbkgd\fR function returns the given window's current background
character/attribute pair.
.SH RETURN VALUE
.PP
These functions are described in the XSI Curses standard, Issue 4.
It specifies that \fBbkgd\fR and \fBwbkgd\fR return \fBERR\fR on failure,
but gives no failure conditions.
.PP
The routines \fBbkgd\fR and \fBwbkgd\fR return the integer \fBOK\fR,
unless the library has not been initialized.
.PP
In contrast,
the SVr4.0 manual says \fBbkgd\fR and \fBwbkgd\fR may return \fBOK\fP
"or a non-negative integer if \fBimmedok\fR is set",
which refers to the return value from \fBwrefresh\fP
(used to implement the immediate repainting).
The SVr4 curses \fBwrefresh\fP returns the number of characters
written to the screen during the refresh.
This implementation does not do that.
.SH NOTES
.PP
Note that \fBbkgdset\fR and \fBbkgd\fR may be macros.
.PP
X/Open Curses mentions that the character part of the background must
be a single-byte value.
This implementation, like SVr4, checks to ensure that,
and will reuse the old background character if the check fails.
.SH PORTABILITY
.PP
These functions are described in the XSI Curses standard, Issue 4
(X/Open Curses).
.SH SEE ALSO
.na
.PP
\fBcurses\fR(3X),
\fBcurs_addch\fR(3X),
\fBcurs_attr\fR(3X),
\fBcurs_outopts\fR(3X)
diff --git a/contrib/ncurses/man/curs_bkgrnd.3x b/contrib/ncurses/man/curs_bkgrnd.3x
index 8e3e83680169..84a2984bc0ec 100644
--- a/contrib/ncurses/man/curs_bkgrnd.3x
+++ b/contrib/ncurses/man/curs_bkgrnd.3x
@@ -1,121 +1,121 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 2002-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_bkgrnd.3x,v 1.11 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_bkgrnd.3x,v 1.12 2020/10/17 23:13:15 tom Exp $
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.TH curs_bkgrnd 3X ""
.SH NAME
\fBbkgrnd\fR,
\fBwbkgrnd\fR,
\fBbkgrndset\fR,
\fBwbkgrndset\fR,
\fBgetbkgrnd\fR,
\fBwgetbkgrnd\fR \- \fBcurses\fR window complex background manipulation routines
.SH SYNOPSIS
.PP
.B #include <curses.h>
.sp
\fBint bkgrnd(\fR\fB const cchar_t *\fR\fIwch\fR\fB);\fR
.br
\fBint wbkgrnd(\fR\fB WINDOW *\fR\fIwin\fR\fB, const cchar_t *\fR\fIwch\fR\fB);\fR
-.br
+.sp
\fBvoid bkgrndset(const cchar_t *\fR\fIwch\fR \fB);\fR
.br
\fBvoid wbkgrndset(WINDOW *\fR\fIwin\fR\fB, const cchar_t *\fR\fIwch\fR\fB);\fR
-.br
+.sp
\fBint getbkgrnd(cchar_t *\fR\fIwch\fR\fB);\fR
.br
\fBint wgetbkgrnd(WINDOW *\fR\fIwin\fR\fB, cchar_t *\fR\fIwch\fR\fB);\fR
.br
.SH DESCRIPTION
.SS bkgrndset
.PP
The \fBbkgrndset\fR and \fBwbkgrndset\fR routines manipulate the
background of the named window.
The window background is a \fBcchar_t\fR consisting of
any combination of attributes (i.e., rendition) and a complex character.
The attribute part of the background is combined (OR'ed) with all non-blank
characters that are written into the window with \fBwaddch\fR.
Both
the character and attribute parts of the background are combined with
the blank characters.
The background becomes a property of the
character and moves with the character through any scrolling and
insert/delete line/character operations.
.PP
To the extent possible on a
particular terminal, the attribute part of the background is displayed
as the graphic rendition of the character put on the screen.
.SS bkgrnd
.PP
The \fBbkgrnd\fR and \fBwbkgrnd\fR functions
set the background property of the current or specified window
and then apply this setting to every character position in that window:
.bP
The rendition of every character on the screen is changed to
the new background rendition.
.bP
Wherever the former background character
appears, it is changed to the new background character.
.SS getbkgrnd
.PP
The \fBgetbkgrnd\fR function returns the given window's current background
character/attribute pair via the \fBwch\fR pointer.
If the given window pointer is null,
the character is not updated (but no error returned).
.SH NOTES
Note that
\fBbkgrnd\fR,
\fBbkgrndset\fR, and
\fBgetbkgrnd\fR
may be macros.
.PP
X/Open Curses does not provide details on how the rendition is changed.
This implementation follows the approach used in SVr4 curses,
which is explained in the manual page for \fBwbkgd\fP.
.SH RETURN VALUE
.PP
The \fBbkgrndset\fR and \fBwbkgrndset\fR routines do not return a value.
.PP
Upon successful completion, the other functions return \fBOK\fR.
Otherwise, they return \fBERR\fR:
.bP
A null window pointer is treated as an error.
.bP
A null character pointer is treated as an error.
.SH PORTABILITY
.PP
These functions are described in the XSI Curses standard, Issue 4
(X/Open Curses).
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_bkgd\fR(3X)
diff --git a/contrib/ncurses/man/curs_border.3x b/contrib/ncurses/man/curs_border.3x
index eaf6954878ea..7b41da530445 100644
--- a/contrib/ncurses/man/curs_border.3x
+++ b/contrib/ncurses/man/curs_border.3x
@@ -1,163 +1,163 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2007,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_border.3x,v 1.25 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_border.3x,v 1.27 2020/10/18 00:33:06 tom Exp $
.TH curs_border 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.na
.hy 0
.SH NAME
\fBborder\fR,
\fBwborder\fR,
\fBbox\fR,
\fBhline\fR,
\fBwhline\fR,
\fBvline\fR,
\fBwvline\fR,
\fBmvhline\fR,
\fBmvwhline\fR,
\fBmvvline\fR,
\fBmvwvline\fR \- create \fBcurses\fR borders, horizontal and vertical lines
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
+.sp
+\fBint border(chtype \fP\fIls\fP\fB, chtype \fP\fIrs\fP\fB, chtype \fP\fIts\fP\fB, chtype \fP\fIbs\fP\fB,\fR
+ \fBchtype \fP\fItl\fP\fB, chtype \fP\fItr\fP\fB, chtype \fP\fIbl\fP\fB, chtype \fP\fIbr\fP\fB);\fR
.br
-\fBint border(chtype ls, chtype rs, chtype ts, chtype bs,\fR
- \fBchtype tl, chtype tr, chtype bl, chtype br);\fR
-.br
-\fBint wborder(WINDOW *win, chtype ls, chtype rs,\fR
- \fBchtype ts, chtype bs, chtype tl, chtype tr,\fR
- \fBchtype bl, chtype br);\fR
-.br
-\fBint box(WINDOW *win, chtype verch, chtype horch);\fR
-.br
-\fBint hline(chtype ch, int n);\fR
-.br
-\fBint whline(WINDOW *win, chtype ch, int n);\fR
+\fBint wborder(WINDOW *\fP\fIwin\fP\fB, chtype \fP\fIls\fP\fB, chtype \fP\fIrs\fP\fB,\fR
+ \fBchtype \fP\fIts\fP\fB, chtype \fP\fIbs\fP\fB, chtype \fP\fItl\fP\fB, chtype \fP\fItr\fP\fB,\fR
+ \fBchtype \fP\fIbl\fP\fB, chtype \fP\fIbr\fP\fB);\fR
+.sp
+\fBint box(WINDOW *\fP\fIwin\fP\fB, chtype \fP\fIverch\fP\fB, chtype \fP\fIhorch\fP\fB);\fR
+.sp
+\fBint hline(chtype \fP\fIch\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint vline(chtype ch, int n);\fR
+\fBint whline(WINDOW *\fP\fIwin\fP\fB, chtype \fP\fIch\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint wvline(WINDOW *win, chtype ch, int n);\fR
+\fBint vline(chtype \fP\fIch\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint mvhline(int y, int x, chtype ch, int n);\fR
+\fBint wvline(WINDOW *\fP\fIwin\fP\fB, chtype \fP\fIch\fP\fB, int \fP\fIn\fP\fB);\fR
+.sp
+\fBint mvhline(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, chtype \fP\fIch\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint mvwhline(WINDOW *, int y, int x, chtype ch, int n);\fR
+\fBint mvwhline(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, chtype \fP\fIch\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint mvvline(int y, int x, chtype ch, int n);\fR
+\fBint mvvline(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, chtype \fP\fIch\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint mvwvline(WINDOW *, int y, int x, chtype ch, int n);\fR
+\fBint mvwvline(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, chtype \fP\fIch\fP\fB, int \fP\fIn\fP\fB);\fR
.br
.SH DESCRIPTION
The \fBborder\fR, \fBwborder\fR and \fBbox\fR routines
draw a box around the edges of a window.
Other than the window, each argument is a character with attributes:
.sp
.RS
\fIls\fR \- left side,
.br
\fIrs\fR \- right side,
.br
\fIts\fR \- top side,
.br
\fIbs\fR \- bottom side,
.br
\fItl\fR \- top left-hand corner,
.br
\fItr\fR \- top right-hand corner,
.br
\fIbl\fR \- bottom left-hand corner, and
.br
\fIbr\fR \- bottom right-hand corner.
.RE
.PP
If any of these arguments is zero, then the corresponding
default values (defined in \fBcurses.h\fR) are used instead:
.sp
.RS
\fBACS_VLINE\fR,
.br
\fBACS_VLINE\fR,
.br
\fBACS_HLINE\fR,
.br
\fBACS_HLINE\fR,
.br
\fBACS_ULCORNER\fR,
.br
\fBACS_URCORNER\fR,
.br
\fBACS_LLCORNER\fR,
.br
\fBACS_LRCORNER\fR.
.RE
.PP
\fBbox(\fR\fIwin\fR\fB, \fR\fIverch\fR\fB, \fR\fIhorch\fR\fB)\fR is a shorthand
for the following call: \fBwborder(\fR\fIwin\fR\fB,\fR \fIverch\fR\fB,\fR
\fIverch\fR\fB,\fR \fIhorch\fR\fB,\fR \fIhorch\fR\fB, 0, 0, 0, 0)\fR.
.PP
The \fBhline\fR and \fBwhline\fR functions draw a horizontal (left to right)
line using \fIch\fR starting at the current cursor position in the window.
The
current cursor position is not changed.
The line is at most \fIn\fR characters
long, or as many as fit into the window.
.PP
The \fBvline\fR and \fBwvline\fR functions draw a vertical (top to bottom) line
using \fIch\fR starting at the current cursor position in the window.
The
current cursor position is not changed.
The line is at most \fIn\fR characters
long, or as many as fit into the window.
.SH RETURN VALUE
All routines return the integer \fBOK\fR.
The SVr4.0 manual says "or a
non-negative integer if \fBimmedok\fR is set", but this appears to be an error.
.PP
X/Open does not define any error conditions.
This implementation returns an error
if the window pointer is null.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH NOTES
The borders generated by these functions are \fIinside\fR borders (this
is also true of SVr4 curses, though the fact is not documented).
.PP
Note that \fBborder\fR and \fBbox\fR may be macros.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
The standard specifies that they return \fBERR\fR on failure,
but specifies no error conditions.
.SH SEE ALSO
\fBcurses\fR(3X), \fBcurs_outopts\fR(3X).
diff --git a/contrib/ncurses/man/curs_clear.3x b/contrib/ncurses/man/curs_clear.3x
index 2cce06ea489a..d86acbde6b00 100644
--- a/contrib/ncurses/man/curs_clear.3x
+++ b/contrib/ncurses/man/curs_clear.3x
@@ -1,122 +1,134 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2016 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_clear.3x,v 1.17 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_clear.3x,v 1.20 2020/10/24 09:19:37 tom Exp $
.TH curs_clear 3X ""
.na
.hy 0
+.de bP
+.ie n .IP \(bu 4
+.el .IP \(bu 2
+..
.SH NAME
\fBerase\fR,
\fBwerase\fR,
\fBclear\fR,
\fBwclear\fR,
\fBclrtobot\fR,
\fBwclrtobot\fR,
\fBclrtoeol\fR,
\fBwclrtoeol\fR \- clear all or part of a \fBcurses\fR window
.ad
.hy
.SH SYNOPSIS
-\fB# include <curses.h>\fR
+\fB#include <curses.h>\fR
.sp
\fBint erase(void);\fR
.br
-\fBint werase(WINDOW *win);\fR
-.br
+\fBint werase(WINDOW *\fP\fIwin\fP\fB);\fR
+.sp
\fBint clear(void);\fR
.br
-\fBint wclear(WINDOW *win);\fR
-.br
+\fBint wclear(WINDOW *\fP\fIwin\fP\fB);\fR
+.sp
\fBint clrtobot(void);\fR
.br
-\fBint wclrtobot(WINDOW *win);\fR
-.br
+\fBint wclrtobot(WINDOW *\fP\fIwin\fP\fB);\fR
+.sp
\fBint clrtoeol(void);\fR
.br
-\fBint wclrtoeol(WINDOW *win);\fR
+\fBint wclrtoeol(WINDOW *\fP\fIwin\fP\fB);\fR
.br
.SH DESCRIPTION
The \fBerase\fR and \fBwerase\fR routines copy blanks to every
position in the window, clearing the screen.
.PP
The \fBclear\fR and \fBwclear\fR routines are like \fBerase\fR and
\fBwerase\fR, but they also call \fBclearok\fR, so that the screen is
cleared completely on the next call to \fBwrefresh\fR for that window
and repainted from scratch.
.PP
The \fBclrtobot\fR and \fBwclrtobot\fR routines erase from the cursor to the
end of screen.
That is, they erase all lines below the cursor in the window.
Also, the current line to the right of the cursor, inclusive, is erased.
.PP
The \fBclrtoeol\fR and \fBwclrtoeol\fR routines erase the current line
to the right of the cursor, inclusive, to the end of the current line.
.PP
Blanks created by erasure have the current background rendition (as set
by \fBwbkgdset\fR) merged into them.
.SH RETURN VALUE
All routines return the integer \fBOK\fR on success and \fBERR\fP on failure.
-The SVr4.0 manual says "or a
-non-negative integer if \fBimmedok\fR is set", but this appears to be an error.
.PP
X/Open defines no error conditions.
In this implementation,
-functions using a window pointer parameter return an error if it is null.
+.bP
+functions using a window pointer parameter return an error if it is null
+.bP
+\fBwclrtoeol\fP returns an error
+if the cursor position is about to wrap.
.SH NOTES
Note that \fBerase\fR, \fBwerase\fR, \fBclear\fR, \fBwclear\fR,
\fBclrtobot\fR, and \fBclrtoeol\fR may be macros.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
The
standard specifies that they return \fBERR\fR on failure, but specifies no
error conditions.
.PP
+The SVr4.0 manual says that these functions could
+return "a non-negative integer if \fBimmedok\fR is set",
+referring to the return-value of \fBwrefresh\fP.
+In that implementation, \fBwrefresh\fP would return a count of
+the number of characters written to the terminal.
+.PP
Some historic curses implementations had, as an undocumented feature, the
ability to do the equivalent of \fBclearok(..., 1)\fR by saying
\fBtouchwin(stdscr)\fR or \fBclear(stdscr)\fR.
This will not work under
ncurses.
.PP
This implementation, and others such as Solaris,
sets the current position to 0,0 after erasing
via \fBwerase\fP and \fBwclear\fP.
That fact is not documented in other implementations,
and may not be true of implementations
which were not derived from SVr4 source.
.PP
Not obvious from the description,
most implementations clear the screen after \fBwclear\fP
even for a subwindow or derived window.
If you do not want to clear the screen during the next \fBwrefresh\fP,
use \fBwerase\fP instead.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_outopts\fR(3X),
\fBcurs_refresh\fR(3X),
\fBcurs_variables\fR(3X)
diff --git a/contrib/ncurses/man/curs_color.3x b/contrib/ncurses/man/curs_color.3x
index b3521cb1b425..02defb6a793c 100644
--- a/contrib/ncurses/man/curs_color.3x
+++ b/contrib/ncurses/man/curs_color.3x
@@ -1,502 +1,502 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_color.3x,v 1.62 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_color.3x,v 1.63 2020/10/24 09:35:23 tom Exp $
.TH curs_color 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.ds n 5
.na
.hy 0
.SH NAME
\fBstart_color\fR,
\fBhas_colors\fR,
\fBcan_change_color\fR,
\fBinit_pair\fR,
\fBinit_color\fR,
\fBinit_extended_pair\fR,
\fBinit_extended_color\fR,
\fBcolor_content\fR,
\fBpair_content\fR,
\fBextended_color_content\fR,
\fBextended_pair_content\fR,
\fBreset_color_pairs\fR,
\fBCOLOR_PAIR\fR,
\fBPAIR_NUMBER\fR \- \fBcurses\fR color manipulation routines
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBint start_color(void);\fR
.sp
\fBbool has_colors(void);\fR
.br
\fBbool can_change_color(void);\fR
.sp
-\fBint init_pair(short pair, short f, short b);\fR
+\fBint init_pair(short \fP\fIpair\fP\fB, short \fP\fIf\fP\fB, short \fP\fIb\fP\fB);\fR
.br
-\fBint init_color(short color, short r, short g, short b);\fR
+\fBint init_color(short \fP\fIcolor\fP\fB, short \fP\fIr\fP\fB, short \fP\fIg\fP\fB, short \fP\fIb\fP\fB);\fR
.br
/* extensions */
.br
-\fBint init_extended_pair(int pair, int f, int b);\fR
+\fBint init_extended_pair(int \fP\fIpair\fP\fB, int \fP\fIf\fP\fB, int \fP\fIb\fP\fB);\fR
.br
-\fBint init_extended_color(int color, int r, int g, int b);\fR
+\fBint init_extended_color(int \fP\fIcolor\fP\fB, int \fP\fIr\fP\fB, int \fP\fIg\fP\fB, int \fP\fIb\fP\fB);\fR
.sp
-\fBint color_content(short color, short *r, short *g, short *b);\fR
+\fBint color_content(short \fP\fIcolor\fP\fB, short *\fP\fIr\fP\fB, short *\fP\fIg\fP\fB, short *\fP\fIb\fP\fB);\fR
.br
-\fBint pair_content(short pair, short *f, short *b);\fR
+\fBint pair_content(short \fP\fIpair\fP\fB, short *\fP\fIf\fP\fB, short *\fP\fIb\fP\fB);\fR
.br
/* extensions */
.br
-\fBint extended_color_content(int color, int *r, int *g, int *b);\fR
+\fBint extended_color_content(int \fP\fIcolor\fP\fB, int *\fP\fIr\fP\fB, int *\fP\fIg\fP\fB, int *\fP\fIb\fP\fB);\fR
.br
-\fBint extended_pair_content(int pair, int *f, int *b);\fR
+\fBint extended_pair_content(int \fP\fIpair\fP\fB, int *\fP\fIf\fP\fB, int *\fP\fIb\fP\fB);\fR
.sp
/* extensions */
.br
\fBvoid reset_color_pairs(void);\fR
.sp
-\fBint COLOR_PAIR(int n);\fR
+\fBint COLOR_PAIR(int \fP\fIn\fP\fB);\fR
.br
\fBPAIR_NUMBER(\fR\fIattrs\fR\fB);\fP
.br
.SH DESCRIPTION
.SS Overview
\fBcurses\fR supports color attributes on terminals with that capability.
To use these routines \fBstart_color\fR must be called, usually right after
\fBinitscr\fR.
Colors are always used in pairs (referred to as color-pairs).
A color-pair consists of a foreground color (for characters) and a background
color (for the blank field on which the characters are displayed).
A programmer initializes a color-pair with the routine \fBinit_pair\fR.
After it has been initialized, \fBCOLOR_PAIR\fR(\fIn\fR)
can be used to convert the pair to a video attribute.
.PP
If a terminal is capable of redefining colors, the programmer can use the
routine \fBinit_color\fR to change the definition of a color.
The routines \fBhas_colors\fR and \fBcan_change_color\fR
return \fBTRUE\fR or \fBFALSE\fR,
depending on whether the terminal has color capabilities and whether the
programmer can change the colors.
The routine \fBcolor_content\fR allows a
programmer to extract the amounts of red, green, and blue components in an
initialized color.
The routine \fBpair_content\fR allows a programmer to find
out how a given color-pair is currently defined.
.SS Color Rendering
The \fBcurses\fP library combines these inputs to produce the
actual foreground and background colors shown on the screen:
.bP
per-character video attributes (e.g., via \fBwaddch\fP),
.bP
the window attribute (e.g., by \fBwattrset\fP), and
.bP
the background character (e.g., \fBwbkgdset\fP).
.PP
Per-character and window attributes are usually set by a parameter containing
video attributes including a color pair value.
Some functions such as \fBwattr_set\fP use a separate parameter which
is the color pair number.
.PP
The background character is a special case: it includes a character value,
just as if it were passed to \fBwaddch\fP.
.PP
The \fBcurses\fP library does the actual work of combining these color
pairs in an internal function called from \fBwaddch\fP:
.bP
If the parameter passed to \fBwaddch\fP is \fIblank\fP,
and it uses the special color pair 0,
.RS
.bP
\fBcurses\fP next checks the window attribute.
.bP
If the window attribute does not use color pair 0,
\fBcurses\fP uses the color pair from the window attribute.
.bP
Otherwise, \fBcurses\fP uses the background character.
.RE
.bP
If the parameter passed to \fBwaddch\fP is \fInot blank\fP,
or it does not use the special color pair 0,
\fBcurses\fP prefers the color pair from the parameter,
if it is nonzero.
Otherwise, it tries the window attribute next, and finally the
background character.
.PP
Some \fBcurses\fP functions such as \fBwprintw\fP call \fBwaddch\fP.
Those do not combine its parameter with a color pair.
Consequently those calls use only the window attribute or
the background character.
.SH CONSTANTS
.PP
In \fB<curses.h>\fR the following macros are defined.
These are the standard colors (ISO-6429).
\fBcurses\fR also assumes that \fBCOLOR_BLACK\fR is the default
background color for all terminals.
.PP
.nf
\fBCOLOR_BLACK\fR
\fBCOLOR_RED\fR
\fBCOLOR_GREEN\fR
\fBCOLOR_YELLOW\fR
\fBCOLOR_BLUE\fR
\fBCOLOR_MAGENTA\fR
\fBCOLOR_CYAN\fR
\fBCOLOR_WHITE\fR
.fi
.PP
Some terminals support more than the eight (8) \*(``ANSI\*('' colors.
There are no standard names for those additional colors.
.SH VARIABLES
.SS COLORS
is initialized by \fBstart_color\fP to the maximum number of colors
the terminal can support.
.SS COLOR_PAIRS
is initialized by \fBstart_color\fP to the maximum number of color pairs
the terminal can support.
.SH FUNCTIONS
.SS start_color
The \fBstart_color\fR routine requires no arguments.
It must be called if the programmer wants to use colors, and before any other
color manipulation routine is called.
It is good practice to call this routine right after \fBinitscr\fR.
\fBstart_color\fR does this:
.bP
It initializes two global variables, \fBCOLORS\fR and
\fBCOLOR_PAIRS\fR (respectively defining the maximum number of colors
and color-pairs the terminal can support).
.bP
It initializes the special color pair \fB0\fP to the default foreground
and background colors.
No other color pairs are initialized.
.bP
It restores the colors on the terminal to the values
they had when the terminal was just turned on.
.bP
If the terminal supports the \fBinitc\fP (\fBinitialize_color\fP) capability,
\fBstart_color\fP
initializes its internal table representing the
red, green, and blue components of the color palette.
.IP
The components depend on whether the terminal uses
CGA (aka \*(``ANSI\*('') or
HLS (i.e., the \fBhls\fP (\fBhue_lightness_saturation\fP) capability is set).
The table is initialized first for eight basic colors
(black, red, green, yellow, blue, magenta, cyan, and white),
using weights that depend upon the CGA/HLS choice.
For \*(``ANSI\*('' colors the weights are \fB680\fP or \fB0\fP
depending on whether the corresponding
red, green, or blue component is used or not.
That permits using \fB1000\fP to represent bold/bright colors.
After the initial eight colors
(if the terminal supports more than eight colors)
the components are initialized using the same pattern,
but with weights of \fB1000\fP.
SVr4 uses a similar scheme, but uses \fB1000\fP
for the components of the initial eight colors.
.IP
\fBstart_color\fP does not attempt to set the terminal's color palette
to match its built-in table.
An application may use \fBinit_color\fP to alter the internal table
along with the terminal's color.
.PP
These limits apply to color values and color pairs.
Values outside these limits are not legal, and may result in a runtime error:
.bP
\fBCOLORS\fP corresponds to the terminal database's \fBmax_colors\fR capability,
(see \fBterminfo\fR(\*n)).
.bP
color values are expected to be in the range \fB0\fP to \fBCOLORS\-1\fP,
inclusive (including \fB0\fP and \fBCOLORS\-1\fP).
.bP
a special color value \fB\-1\fP is used in certain extended functions
to denote the \fIdefault color\fP (see \fBuse_default_colors\fP(3X)).
.bP
\fBCOLOR_PAIRS\fP corresponds to
the terminal database's \fBmax_pairs\fP capability,
(see \fBterminfo\fR(\*n)).
.bP
legal color pair values are in the range \fB1\fP to \fBCOLOR_PAIRS\-1\fP,
inclusive.
.bP
color pair \fB0\fP is special; it denotes \*(``no color\*(''.
.IP
Color pair \fB0\fP is assumed to be white on black,
but is actually whatever the terminal implements before color is initialized.
It cannot be modified by the application.
.SS has_colors
.PP
The \fBhas_colors\fR routine requires no arguments.
It returns \fBTRUE\fR if
the terminal can manipulate colors; otherwise, it returns \fBFALSE\fR.
This routine facilitates writing terminal-independent programs.
For example, a programmer can use it to decide
whether to use color or some other video attribute.
.SS can_change_color
.PP
The \fBcan_change_color\fR routine requires no arguments.
It returns \fBTRUE\fR if the terminal supports colors
and can change their definitions;
other, it returns \fBFALSE\fR.
This routine facilitates writing terminal-independent programs.
.SS init_pair
.PP
The \fBinit_pair\fR routine changes the definition of a color-pair.
It takes three arguments:
the number of the color-pair to be changed, the foreground
color number, and the background color number.
For portable applications:
.bP
The first argument must be a legal color pair value.
If default colors are used (see \fBuse_default_colors\fP(3X))
the upper limit is adjusted to allow for extra pairs which use
a default color in foreground and/or background.
.bP
The second and third arguments must be legal color values.
.PP
If the color-pair was previously initialized,
the screen is refreshed and all occurrences of that color-pair
are changed to the new definition.
.PP
As an extension, ncurses allows you to set color pair \fB0\fP via
the \fBassume_default_colors\fR(3X) routine, or to specify the use of
default colors (color number \fB\-1\fR) if you first invoke the
\fBuse_default_colors\fR(3X) routine.
.SS init_extended_pair
.PP
Because \fBinit_pair\fP uses signed \fBshort\fPs for its parameters,
that limits color-pairs and color-values
to 32767 on modern hardware.
The extension \fBinit_extended_pair\fP uses \fBint\fPs
for the color-pair and color-value,
allowing a larger number of colors to be supported.
.SS init_color
.PP
The \fBinit_color\fR routine changes the definition of a color.
It takes four arguments:
the number of the color to be changed followed by three RGB values
(for the amounts of red, green, and blue components).
.bP
The first argument must be a legal color value;
default colors are not allowed here.
(See the section \fBColors\fR for the default color index.)
.bP
Each of the last three arguments
must be a value in the range \fB0\fP through \fB1000\fP.
.PP
When \fBinit_color\fR is used, all
occurrences of that color on the screen immediately change to the new
definition.
.SS init_extended_color
.PP
Because \fBinit_color\fP uses signed \fBshort\fPs for its parameters,
that limits color-values and their red, green, and blue components
to 32767 on modern hardware.
The extension \fBinit_extended_color\fP uses \fBint\fPs
for the color value and
for setting the red, green, and blue components,
allowing a larger number of colors to be supported.
.SS color_content
.PP
The \fBcolor_content\fR routine gives programmers a way to find the intensity
of the red, green, and blue (RGB) components in a color.
It requires four arguments: the color number, and three addresses
of \fBshort\fRs for storing
the information about the amounts of red, green, and blue components in the
given color.
.bP
The first argument must be a legal color value, i.e.,
\fB0\fP through \fBCOLORS\-1\fP, inclusive.
.bP
The values that are stored at the addresses pointed to by the
last three arguments are in the range
\fB0\fP (no component) through \fB1000\fP
(maximum amount of component), inclusive.
.SS extended_color_content
.PP
Because \fBcolor_content\fP uses signed \fBshort\fPs for its parameters,
that limits color-values and their red, green, and blue components
to 32767 on modern hardware.
The extension \fBextended_color_content\fP uses \fBint\fPs
for the color value and
for returning the red, green, and blue components,
allowing a larger number of colors to be supported.
.SS pair_content
.PP
The \fBpair_content\fR routine allows programmers to find out what colors a
given color-pair consists of.
It requires three arguments: the color-pair
number, and two addresses of \fBshort\fRs for storing the foreground and the
background color numbers.
.bP
The first argument must be a legal color value,
i.e., in the range \fB1\fP through \fBCOLOR_PAIRS\-1\fR, inclusive.
.bP
The values that are stored at the addresses pointed
to by the second and third arguments are in the
range \fB0\fP through \fBCOLORS\fR, inclusive.
.SS extended_pair_content
.PP
Because \fBpair_content\fP uses signed \fBshort\fPs for its parameters,
that limits color-pair and color-values to 32767 on modern hardware.
The extension \fBextended_pair_content\fP uses \fBint\fPs
for the color pair and
for returning the foreground and background colors,
allowing a larger number of colors to be supported.
.SS reset_color_pairs
.PP
The extension \fBreset_color_pairs\fP tells ncurses to discard all
of the color-pair information which was set with \fBinit_pair\fP.
It also touches the current- and standard-screens, allowing an application to
switch color palettes rapidly.
.SS PAIR_NUMBER
.PP
\fBPAIR_NUMBER(\fR\fIattrs\fR) extracts the color
value from its \fIattrs\fP parameter and returns it as a color pair number.
.SS COLOR_PAIR
Its inverse \fBCOLOR_PAIR(\fR\fIn\fR\fB)\fR converts a color pair number
to an attribute.
Attributes can hold color pairs in the range 0 to 255.
If you need a color pair larger than that, you must use functions
such as \fBattr_set\fP (which pass the color pair as a separate parameter)
rather than the legacy functions such as \fBattrset\fP.
.SH RETURN VALUE
The routines \fBcan_change_color\fR and \fBhas_colors\fR return \fBTRUE\fR
or \fBFALSE\fR.
.PP
All other routines return the integer \fBERR\fR upon failure and an \fBOK\fR
(SVr4 specifies only \*(``an integer value
other than \fBERR\fR\*('') upon successful completion.
.PP
X/Open defines no error conditions.
SVr4 does document some error conditions which apply in general:
.bP
This implementation will return \fBERR\fR on attempts to
use color values outside the range \fB0\fP to \fBCOLORS\fP\-1
(except for the default colors extension),
or use color pairs outside the range \fB0\fP to \fBCOLOR_PAIRS\-1\fP.
.IP
Color values used in \fBinit_color\fP must be
in the range \fB0\fP to \fB1000\fP.
.IP
An error is returned from all functions
if the terminal has not been initialized.
.IP
An error is returned from secondary functions such as \fBinit_pair\fP
if \fBstart_color\fP was not called.
.bP
SVr4 does much the same, except that
it returns \fBERR\fP from \fBpair_content\fP if the pair was not initialized
using \fBinit_pairs\fP
and
it returns \fBERR\fP from \fBcolor_content\fP
if the terminal does not support changing colors.
.IP
This implementation does not return \fBERR\fP for either case.
.PP
Specific functions make additional checks:
.RS 3
.TP 5
\fBinit_color\fP
returns an error if the terminal does not support
this feature, e.g., if the \fBinitialize_color\fP capability is absent
from the terminal description.
.TP 5
\fBstart_color\fP
returns an error if the color table cannot be allocated.
.RE
.SH NOTES
In the \fBncurses\fR implementation, there is a separate color activation flag,
color palette, color pairs table,
and associated \fBCOLORS\fP and \fBCOLOR_PAIRS\fP counts
for each screen; the \fBstart_color\fR function only affects the current
screen.
The SVr4/XSI interface is not really designed with this in mind, and
historical implementations may use a single shared color palette.
.PP
Setting an implicit background color via a color pair affects only
character cells that a character write operation explicitly touches.
To change
the background color used when parts of a window are blanked by erasing or
scrolling operations, see \fBcurs_bkgd\fR(3X).
.PP
Several caveats apply on older x86 machines
(e.g., i386, i486) with VGA-compatible graphics:
.bP
COLOR_YELLOW is actually brown.
To get yellow, use COLOR_YELLOW combined with the \fBA_BOLD\fR attribute.
.bP
The A_BLINK attribute should in theory cause the background to go bright.
This often fails to work, and even some cards for which it mostly works
(such as the
Paradise and compatibles) do the wrong thing when you try to set a bright
\*(``yellow\*('' background (you get a blinking yellow foreground instead).
.bP
Color RGB values are not settable.
.SH PORTABILITY
This implementation satisfies XSI Curses's minimum maximums
for \fBCOLORS\fR and \fBCOLOR_PAIRS\fR.
.PP
The \fBinit_pair\fP routine accepts negative values of foreground
and background color to support the \fBuse_default_colors\fR(3X) extension,
but only if that routine has been first invoked.
.PP
The assumption that \fBCOLOR_BLACK\fR is the default
background color for all terminals can be modified using the
\fBassume_default_colors\fR(3X) extension.
.PP
This implementation checks the pointers,
e.g., for the values returned by
\fBcolor_content\fP and \fBpair_content\fP,
and will treat those as optional parameters when null.
.PP
X/Open Curses does not specify a limit for the number of colors and
color pairs which a terminal can support.
However, in its use of \fBshort\fP for the parameters,
it carries over SVr4's implementation detail for the compiled
terminfo database, which uses signed 16-bit numbers.
This implementation provides extended versions of those functions
which use \fBshort\fP parameters,
allowing applications to use larger color- and pair-numbers.
.PP
The \fBreset_color_pairs\fP function is an extension of ncurses.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_initscr\fR(3X),
\fBcurs_attr\fR(3X),
\fBcurs_variables\fR(3X),
\fBdefault_colors\fR(3X)
diff --git a/contrib/ncurses/man/curs_delch.3x b/contrib/ncurses/man/curs_delch.3x
index ecfde6080c6c..86f0984cdbe8 100644
--- a/contrib/ncurses/man/curs_delch.3x
+++ b/contrib/ncurses/man/curs_delch.3x
@@ -1,76 +1,76 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2006,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_delch.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_delch.3x,v 1.15 2020/10/24 09:36:43 tom Exp $
.TH curs_delch 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.SH NAME
\fBdelch\fR,
\fBwdelch\fR,
\fBmvdelch\fR,
\fBmvwdelch\fR \- delete character under the cursor in a \fBcurses\fR window
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBint delch(void);\fR
.br
-\fBint wdelch(WINDOW *win);\fR
+\fBint wdelch(WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBint mvdelch(int y, int x);\fR
+\fBint mvdelch(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
.br
-\fBint mvwdelch(WINDOW *win, int y, int x);\fR
+\fBint mvwdelch(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
.br
.SH DESCRIPTION
These routines delete the character under the cursor; all characters to the
right of the cursor on the same line are moved to the left one position and the
last character on the line is filled with a blank.
The cursor position does
not change (after moving to \fIy\fR, \fIx\fR, if specified).
(This does not
imply use of the hardware delete character feature.)
.SH RETURN VALUE
All routines return the integer \fBERR\fR upon failure and an \fBOK\fR (SVr4
specifies only "an integer value other than \fBERR\fR") upon successful
completion.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH NOTES
Note that \fBdelch\fR, \fBmvdelch\fR, and \fBmvwdelch\fR may be macros.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
The
standard specifies that they return \fBERR\fR on failure, but specifies no
error conditions.
.SH SEE ALSO
\fBcurses\fR(3X)
diff --git a/contrib/ncurses/man/curs_deleteln.3x b/contrib/ncurses/man/curs_deleteln.3x
index 2e667c813b4a..391c80094192 100644
--- a/contrib/ncurses/man/curs_deleteln.3x
+++ b/contrib/ncurses/man/curs_deleteln.3x
@@ -1,93 +1,93 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2007,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_deleteln.3x,v 1.15 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_deleteln.3x,v 1.17 2020/10/18 00:28:51 tom Exp $
.TH curs_deleteln 3X ""
.SH NAME
\fBdeleteln\fR,
\fBwdeleteln\fR,
\fBinsdelln\fR,
\fBwinsdelln\fR,
\fBinsertln\fR,
\fBwinsertln\fR \- delete and insert lines in a \fBcurses\fR window
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBint deleteln(void);\fR
.br
-\fBint wdeleteln(WINDOW *win);\fR
-.br
-\fBint insdelln(int n);\fR
-.br
-\fBint winsdelln(WINDOW *win, int n);\fR
+\fBint wdeleteln(WINDOW *\fP\fIwin\fP\fB);\fR
+.sp
+\fBint insdelln(int \fP\fIn\fP\fB);\fR
.br
+\fBint winsdelln(WINDOW *\fP\fIwin\fP\fB, int \fP\fIn\fP\fB);\fR
+.sp
\fBint insertln(void);\fR
.br
-\fBint winsertln(WINDOW *win);\fR
+\fBint winsertln(WINDOW *\fP\fIwin\fP\fB);\fR
.br
.SH DESCRIPTION
The \fBdeleteln\fR and \fBwdeleteln\fR routines delete the line under the
cursor in the window; all lines below the current line are moved up one line.
The bottom line of the window is cleared.
The cursor position does not change.
.PP
The \fBinsdelln\fR and \fBwinsdelln\fR routines, for positive \fIn\fR, insert
\fIn\fR lines into the specified window above the current line.
The \fIn\fR
bottom lines are lost.
For negative \fIn\fR, delete \fIn\fR lines (starting
with the one under the cursor), and move the remaining lines up.
The bottom
\fIn\fR lines are cleared.
The current cursor position remains the same.
.PP
The \fBinsertln\fR and \fBwinsertln\fR routines insert a blank line above the
current line and the bottom line is lost.
.SH RETURN VALUE
All routines return the integer \fBERR\fR upon failure and an \fBOK\fR (SVr4
specifies only "an integer value other than \fBERR\fR") upon successful
completion.
.PP
X/Open defines no error conditions.
In this implementation,
if the window parameter is null, an error is returned.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
The
standard specifies that they return \fBERR\fR on failure, but specifies no
error conditions.
.SH NOTES
Note that all but \fBwinsdelln\fR may be macros.
.PP
These routines do not require a hardware line delete or insert feature in the
terminal.
In fact, they will not use hardware line delete/insert unless
\fBidlok(..., TRUE)\fR has been set on the current window.
.SH SEE ALSO
\fBcurses\fR(3X)
diff --git a/contrib/ncurses/man/curs_extend.3x b/contrib/ncurses/man/curs_extend.3x
index 307c8a14b4ef..52ba27d07fb3 100644
--- a/contrib/ncurses/man/curs_extend.3x
+++ b/contrib/ncurses/man/curs_extend.3x
@@ -1,89 +1,89 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1999-2010,2016 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
.\" Author: Thomas E. Dickey 1999-on
.\"
-.\" $Id: curs_extend.3x,v 1.23 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_extend.3x,v 1.24 2020/10/24 09:37:07 tom Exp $
.TH curs_extend 3X ""
.SH NAME
\fBcurses_version\fP,
\fBuse_extended_names\fP \- miscellaneous curses extensions
.
.SH SYNOPSIS
\fB#include <curses.h>\fP
.sp
\fBconst char * curses_version(void);\fP
.br
-\fBint use_extended_names(bool enable);\fP
+\fBint use_extended_names(bool \fP\fIenable\fP\fB);\fP
.SH DESCRIPTION
These functions are extensions to the curses library
which do not fit easily into other categories.
.SS curses_version
.PP
Use \fBcurses_version\fP
to get the version number, including patch level of the library, e.g.,
.B 5.0.19991023
.SS use_extended_names
.PP
The \fBuse_extended_names\fP
function controls whether the calling application
is able to use user-defined or nonstandard names
which may be compiled into the terminfo
description, i.e., via the terminfo or termcap interfaces.
Normally these names are available for use, since the essential decision
is made by using the \fB\-x\fP option of \fB@TIC@\fP to compile
extended terminal definitions.
However you can disable this feature
to ensure compatibility with other implementations of curses.
.SH RETURN VALUE
.PP
\fBcurses_version\fP returns a pointer to static memory; you should not free
this in your application.
.PP
\fBuse_extended_names\fP returns the previous state, allowing you to
save this and restore it.
.SH PORTABILITY
These routines are specific to ncurses.
They were not supported on
Version 7, BSD or System V implementations.
It is recommended that
any code depending on them be conditioned using NCURSES_VERSION.
.SH SEE ALSO
\fBcurs_getch\fR(3X),
\fBcurs_mouse\fR(3X),
\fBcurs_print\fR(3X),
\fBcurs_util\fR(3X),
\fBdefault_colors\fR(3X),
\fBdefine_key\fR(3X),
\fBkeybound\fR(3X),
\fBkeyok\fR(3X),
\fBresizeterm\fR(3X),
\fBwresize\fR(3X).
.SH AUTHOR
Thomas Dickey.
diff --git a/contrib/ncurses/man/curs_get_wch.3x b/contrib/ncurses/man/curs_get_wch.3x
index 4a30cf1670c9..dfa5c7e914de 100644
--- a/contrib/ncurses/man/curs_get_wch.3x
+++ b/contrib/ncurses/man/curs_get_wch.3x
@@ -1,185 +1,185 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 2002-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_get_wch.3x,v 1.13 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_get_wch.3x,v 1.14 2020/10/17 23:17:05 tom Exp $
.TH curs_get_wch 3X ""
.na
.hy 0
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fBget_wch\fR,
\fBwget_wch\fR,
\fBmvget_wch\fR,
\fBmvwget_wch\fR,
\fBunget_wch\fR \- get (or push back) a wide character from curses terminal keyboard
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBint get_wch(wint_t *\fR\fIwch\fR\fB);\fR
.br
\fBint wget_wch(WINDOW *\fR\fIwin\fR\fB, wint_t *\fR\fIwch\fR\fB);\fR
.br
\fBint mvget_wch(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwch\fR\fB);\fR
.br
\fBint mvwget_wch(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwch\fR\fB);\fR
-.br
+.sp
\fBint unget_wch(const wchar_t \fR\fIwch\fR\fB);\fR
.SH DESCRIPTION
The
\fBget_wch\fR,
\fBwget_wch\fR,
\fBmvget_wch\fR, and
\fBmvwget_wch\fR
functions read a character
from the terminal associated with the current or specified window.
In no-delay mode,
if no input is waiting, the value \fBERR\fR is returned.
In delay mode,
the program waits until the system passes text through to the program.
Depending on the setting of \fBcbreak\fR,
this is after one character (cbreak mode),
or after the first newline (nocbreak mode).
In half-delay mode,
the program waits until the user types a character or the specified
timeout interval has elapsed.
.PP
Unless \fBnoecho\fR has been set,
these routines echo the character into the designated window.
.PP
If the window is not a pad and has been moved or modified since the
last call to \fBwrefresh\fR,
\fBwrefresh\fR will be called before another character is read.
.PP
If \fBkeypad\fR is enabled,
these functions respond to
the pressing of a function key by setting the object pointed to by
\fIwch\fR
to the keycode assigned to the function key,
and returning \fBKEY_CODE_YES\fR.
If a character (such as escape) that could be the
beginning of a function key is received, curses sets a timer.
If the remainder
of the sequence does arrive within the designated time, curses passes through
the character; otherwise, curses returns the function key value.
For this
reason, many terminals experience a delay between the time a user presses
the escape key and the time the escape is returned to the program.
.PP
The keycodes returned by these functions are the same as those
returned by \fBwgetch\fP:
.bP
The predefined function
keys are listed in \fB<curses.h>\fR as macros with values outside the range
of 8-bit characters.
Their names begin with \fBKEY_\fR.
.bP
Other (user-defined) function keys
which may be defined using \fBdefine_key\fP(3X) have no names,
but also are expected to have values outside the range of 8-bit characters.
.PP
The
\fBunget_wch\fR
function pushes the wide character
\fIwch\fR
back onto the head of the input queue, so the wide character
is returned by the next call to
\fBget_wch\fR.
The pushback of
one character is guaranteed.
If the program calls
\fBunget_wch\fR
too many times without an intervening call to
\fBget_wch\fR,
the operation may fail.
.SH NOTES
The header file
\fB<curses.h>\fR
automatically
includes the header file
\fB<stdio.h>\fR.
.PP
Applications should not define the escape key by itself as a single-character
function.
.PP
When using
\fBget_wch\fR,
\fBwget_wch\fR,
\fBmvget_wch\fR, or
\fBmvwget_wch\fR, applications should
not use
\fBnocbreak\fR
mode and
\fBecho\fR
mode
at the same time.
Depending on the state of the tty driver when each character
is typed, the program may produce undesirable results.
.PP
All functions except \fBwget_wch\fR and \fBunget_wch\fR
may be macros.
.SH RETURN VALUE
When
\fBget_wch\fR,
\fBwget_wch\fR,
\fBmvget_wch\fR, and
\fBmvwget_wch\fR
functions successfully
report the pressing of a function key, they return
\fBKEY_CODE_YES\fR.
When they successfully report a wide character, they return
\fBOK\fR.
Otherwise, they return
\fBERR\fR.
.PP
Upon successful completion,
\fBunget_wch\fR
returns
\fBOK\fR.
Otherwise, the function returns
\fBERR\fR.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_getch\fR(3X),
\fBcurs_ins_wch\fR(3X),
\fBcurs_inopts\fR(3X),
\fBcurs_move\fR(3X),
\fBcurs_refresh\fR(3X)
diff --git a/contrib/ncurses/man/curs_get_wstr.3x b/contrib/ncurses/man/curs_get_wstr.3x
index ce8572e6bb5f..112208ae918e 100644
--- a/contrib/ncurses/man/curs_get_wstr.3x
+++ b/contrib/ncurses/man/curs_get_wstr.3x
@@ -1,219 +1,219 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 2002-2012,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_get_wstr.3x,v 1.20 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_get_wstr.3x,v 1.21 2020/10/17 23:17:24 tom Exp $
.TH curs_get_wstr 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.SH NAME
\fBget_wstr\fR,
\fBgetn_wstr\fR,
\fBwget_wstr\fR,
\fBwgetn_wstr\fR,
\fBmvget_wstr\fR,
\fBmvgetn_wstr\fR,
\fBmvwget_wstr\fR,
\fBmvwgetn_wstr\fR \- get an array of wide characters from a curses terminal keyboard
.ad
.hy
.SH SYNOPSIS
.nf
\fB#include <curses.h>\fR
.sp
\fBint get_wstr(wint_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint getn_wstr(wint_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint wget_wstr(WINDOW *\fR\fIwin\fR\fB, wint_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint wgetn_wstr(WINDOW *\fR\fIwin\fR\fB, wint_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
-.br
+.sp
\fBint mvget_wstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint mvgetn_wstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint mvwget_wstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint mvwgetn_wstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.fi
.SH DESCRIPTION
The effect of
\fBget_wstr\fR
is as though a series of calls
to
\fBget_wch\fR(3X)
were made, until a newline, other end-of-line,
or end-of-file condition is processed.
An end-of-file condition is represented by \fBWEOF\fR,
as defined in \fB<wchar.h>\fR.
The newline and end-of-line conditions are represented
by the \fB\\n\fR \fBwchar_t\fR value.
In all instances, the end of the string is terminated by a null \fBwchar_t\fR.
The routine places resulting values in the area pointed to by \fIwstr\fR.
.PP
The user's erase and kill characters are interpreted.
If keypad
mode is on for the window, \fBKEY_LEFT\fR and \fBKEY_BACKSPACE\fR
are both considered equivalent to the user's kill character.
.PP
Characters input are echoed only if \fBecho\fR is currently on.
In that case,
backspace is echoed as deletion of the previous character (typically a left
motion).
.PP
The effect of
\fBwget_wstr\fR
is as though a series of
calls to
\fBwget_wch\fR
were made.
.PP
The effect of
\fBmvget_wstr\fR
is as though a call to
\fBmove\fR
and then a series of calls to
\fBget_wch\fR
were
made.
.PP
The effect of
\fBmvwget_wstr\fR
is as though a call to
\fBwmove\fR
and then a series of calls to
\fBwget_wch\fR
were made.
.PP
The
\fBgetn_wstr\fR,
\fBmvgetn_wstr\fR,
\fBmvwgetn_wstr\fR, and
\fBwgetn_wstr\fR
functions are identical
to the
\fBget_wstr\fR,
\fBmvget_wstr\fR,
\fBmvwget_wstr\fR, and
\fBwget_wstr\fR
functions, respectively,
except that the
\fB*n_*\fR
versions read at most
\fIn\fR
characters, letting the application prevent overflow of the
input buffer.
.SH NOTES
Using
\fBget_wstr\fR,
\fBmvget_wstr\fR,
\fBmvwget_wstr\fR, or
\fBwget_wstr\fR
to read a line that
overflows the array pointed to by
\fBwstr\fR
causes undefined
results.
The use of
\fBgetn_wstr\fR,
\fBmvgetn_wstr\fR,
\fBmvwgetn_wstr\fR, or
\fBwgetn_wstr\fR, respectively, is recommended.
.PP
These functions cannot return \fBKEY_\fR values because there
is no way to distinguish a \fBKEY_\fR value from a valid \fBwchar_t\fR value.
.PP
All of these routines except \fBwgetn_wstr\fR may be macros.
.SH RETURN VALUE
All of these functions return \fBOK\fR upon successful completion.
Otherwise, they return \fBERR\fR.
.PP
Functions using a window parameter return an error if it is null.
.RS
.TP 5
\fBwgetn_wstr\fP
returns an error if the associated call to \fBwget_wch\fP failed.
.RE
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH PORTABILITY
These functions are described in The Single Unix Specification, Version 2.
No error conditions are defined.
This implementation returns \fBERR\fP if the window pointer is null,
or if the lower-level \fBwget_wch\fR call returns an \fBERR\fP.
In the latter case,
an \fBERR\fP return without other data is treated as an end-of-file condition,
and the returned array contains a \fBWEOF\fR followed by a null \fBwchar_t\fR.
.PP
X/Open curses documented these functions to pass an array of \fBwchar_t\fR
in 1997, but that was an error because of this part of the description:
.RS
.PP
The effect of \fIget_wstr()\fP is as though a series of calls to
\fIget_wch()\fP were made, until a newline character, end-of-line character, or
end-of-file character is processed.
.RE
.PP
The latter function \fIget_wch()\fP can return a negative value,
while \fBwchar_t\fP is a unsigned type.
All of the vendors implement this using \fBwint_t\fR, following the standard.
.PP
X/Open Curses, Issue 7 (2009) is unclear regarding whether
the terminating \fInull \fP\fBwchar_t\fP
value is counted in the length parameter \fIn\fP.
X/Open Curses, Issue 7 revised the corresponding description
of \fBwgetnstr\fP to address this issue.
The unrevised description of \fBwget_nwstr\fP can be interpreted either way.
This implementation counts the terminator in the length.
.PP
X/Open Curses does not specify what happens if the length \fIn\fP is negative.
.bP
For analogy with \fBwgetnstr\fP,
ncurses 6.2 uses a limit (based on \fBLINE_MAX\fP).
.bP
Some other implementations (such as Solaris xcurses) do the same,
while others (PDCurses) do not allow this.
.bP
NetBSD 7 curses imitates ncurses 6.1 in this regard,
treating a \fB\-1\fP as an indefinite number of characters.
.SH SEE ALSO
Functions:
\fBcurses\fR(3X),
\fBcurs_get_wch\fR(3X),
\fBcurs_getstr\fR(3X).
diff --git a/contrib/ncurses/man/curs_getch.3x b/contrib/ncurses/man/curs_getch.3x
index c171f1d5ca13..a8c4bc1f080b 100644
--- a/contrib/ncurses/man/curs_getch.3x
+++ b/contrib/ncurses/man/curs_getch.3x
@@ -1,416 +1,418 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_getch.3x,v 1.55 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_getch.3x,v 1.57 2020/12/19 21:38:20 tom Exp $
.TH curs_getch 3X ""
.na
.hy 0
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fBgetch\fR,
\fBwgetch\fR,
\fBmvgetch\fR,
\fBmvwgetch\fR,
\fBungetch\fR,
\fBhas_key\fR \- get (or push back) characters from \fBcurses\fR terminal keyboard
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.PP
\fBint getch(void);\fR
.br
\fBint wgetch(WINDOW *\fP\fIwin);\fR
-.br
+.sp
\fBint mvgetch(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
.br
\fBint mvwgetch(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
-.br
+.sp
\fBint ungetch(int \fP\fIch\fP\fB);\fR
+.sp
+/* extension */
.br
\fBint has_key(int \fP\fIch\fP\fB);\fR
.br
.SH DESCRIPTION
.SS Reading characters
The \fBgetch\fR, \fBwgetch\fR, \fBmvgetch\fR and \fBmvwgetch\fR, routines read
a character from the window.
In no-delay mode, if no input is waiting, the value \fBERR\fR is returned.
In delay mode, the program waits until the system
passes text through to the program.
Depending on the setting of \fBcbreak\fR,
this is after one character (cbreak mode),
or after the first newline (nocbreak mode).
In half-delay mode,
the program waits until a character is typed or the
specified timeout has been reached.
.PP
If \fBecho\fR is enabled, and the window is not a pad,
then the character will also be echoed into the
designated window according to the following rules:
.bP
If the character is the current erase character, left arrow, or backspace,
the cursor is moved one space to the left and that screen position is erased
as if \fBdelch\fR had been called.
.bP
If the character value is any other \fBKEY_\fR define, the user is alerted
with a \fBbeep\fR call.
.bP
If the character is a carriage-return,
and if \fBnl\fP is enabled,
it is translated to a line-feed after echoing.
.bP
Otherwise the character is simply output to the screen.
.PP
If the window is not a pad, and it has been moved or modified since the last
call to \fBwrefresh\fR, \fBwrefresh\fR will be called before another character
is read.
.SS Keypad mode
.PP
If \fBkeypad\fR is \fBTRUE\fR, and a function key is pressed, the token for
that function key is returned instead of the raw characters:
.bP
The predefined function
keys are listed in \fB<curses.h>\fR as macros with values outside the range
of 8-bit characters.
Their names begin with \fBKEY_\fR.
.bP
Other (user-defined) function keys which may be defined
using \fBdefine_key\fP(3X)
have no names, but also are expected to have values outside the range of
8-bit characters.
.PP
Thus, a variable
intended to hold the return value of a function key must be of short size or
larger.
.PP
When a character that could be the beginning of a function key is received
(which, on modern terminals, means an escape character),
\fBcurses\fR sets a timer.
If the remainder of the sequence does not come in within the designated
time, the character is passed through;
otherwise, the function key value is returned.
For this reason, many terminals experience a delay between the time
a user presses the escape key and the escape is returned to the program.
.PP
In \fBncurses\fP, the timer normally expires after
the value in \fBESCDELAY\fP (see \fBcurs_variables\fP(3X)).
If \fBnotimeout\fP is \fBTRUE\fP, the timer does not expire;
it is an infinite (or very large) value.
Because function keys usually begin with an escape character,
the terminal may appear to hang in notimeout mode after pressing the escape key
until another key is pressed.
.SS Ungetting characters
.PP
The \fBungetch\fR routine places \fIch\fR back onto the input queue to be
returned by the next call to \fBwgetch\fR.
There is just one input queue for all windows.
.PP
.SS Predefined key-codes
The following special keys are defined in \fB<curses.h>\fR.
.bP
Except for the special case \fBKEY_RESIZE\fP,
it is necessary to enable \fBkeypad\fR for \fBgetch\fP to return these codes.
.bP
Not all of these are necessarily supported on any particular terminal.
.bP
The naming convention may seem obscure, with some apparent
misspellings (such as \*(``RSUME\*('' for \*(``resume\*('').
The names correspond to the long terminfo capability names for the keys,
and were defined long ago, in the 1980s.
.PP
.TS
center tab(/) ;
l l .
\fIName\fR/\fIKey\fR \fIname\fR
_
KEY_BREAK/Break key
KEY_DOWN/The four arrow keys ...
KEY_UP
KEY_LEFT
KEY_RIGHT
KEY_HOME/Home key (upward+left arrow)
KEY_BACKSPACE/Backspace
KEY_F0/T{
Function keys; space for 64 keys is reserved.
T}
KEY_F(\fIn\fR)/T{
For 0 \(<= \fIn\fR \(<= 63
T}
KEY_DL/Delete line
KEY_IL/Insert line
KEY_DC/Delete character
KEY_IC/Insert char or enter insert mode
KEY_EIC/Exit insert char mode
KEY_CLEAR/Clear screen
KEY_EOS/Clear to end of screen
KEY_EOL/Clear to end of line
KEY_SF/Scroll 1 line forward
KEY_SR/Scroll 1 line backward (reverse)
KEY_NPAGE/Next page
KEY_PPAGE/Previous page
KEY_STAB/Set tab
KEY_CTAB/Clear tab
KEY_CATAB/Clear all tabs
KEY_ENTER/Enter or send
KEY_SRESET/Soft (partial) reset
KEY_RESET/Reset or hard reset
KEY_PRINT/Print or copy
KEY_LL/Home down or bottom (lower left)
KEY_A1/Upper left of keypad
KEY_A3/Upper right of keypad
KEY_B2/Center of keypad
KEY_C1/Lower left of keypad
KEY_C3/Lower right of keypad
KEY_BTAB/Back tab key
KEY_BEG/Beg(inning) key
KEY_CANCEL/Cancel key
KEY_CLOSE/Close key
KEY_COMMAND/Cmd (command) key
KEY_COPY/Copy key
KEY_CREATE/Create key
KEY_END/End key
KEY_EXIT/Exit key
KEY_FIND/Find key
KEY_HELP/Help key
KEY_MARK/Mark key
KEY_MESSAGE/Message key
KEY_MOUSE/Mouse event read
KEY_MOVE/Move key
KEY_NEXT/Next object key
KEY_OPEN/Open key
KEY_OPTIONS/Options key
KEY_PREVIOUS/Previous object key
KEY_REDO/Redo key
KEY_REFERENCE/Ref(erence) key
KEY_REFRESH/Refresh key
KEY_REPLACE/Replace key
KEY_RESIZE/Screen resized
KEY_RESTART/Restart key
KEY_RESUME/Resume key
KEY_SAVE/Save key
KEY_SBEG/Shifted beginning key
KEY_SCANCEL/Shifted cancel key
KEY_SCOMMAND/Shifted command key
KEY_SCOPY/Shifted copy key
KEY_SCREATE/Shifted create key
KEY_SDC/Shifted delete char key
KEY_SDL/Shifted delete line key
KEY_SELECT/Select key
KEY_SEND/Shifted end key
KEY_SEOL/Shifted clear line key
KEY_SEXIT/Shifted exit key
KEY_SFIND/Shifted find key
KEY_SHELP/Shifted help key
KEY_SHOME/Shifted home key
KEY_SIC/Shifted input key
KEY_SLEFT/Shifted left arrow key
KEY_SMESSAGE/Shifted message key
KEY_SMOVE/Shifted move key
KEY_SNEXT/Shifted next key
KEY_SOPTIONS/Shifted options key
KEY_SPREVIOUS/Shifted prev key
KEY_SPRINT/Shifted print key
KEY_SREDO/Shifted redo key
KEY_SREPLACE/Shifted replace key
KEY_SRIGHT/Shifted right arrow
KEY_SRSUME/Shifted resume key
KEY_SSAVE/Shifted save key
KEY_SSUSPEND/Shifted suspend key
KEY_SUNDO/Shifted undo key
KEY_SUSPEND/Suspend key
KEY_UNDO/Undo key
.TE
.PP
Keypad is arranged like this:
.br
.TS
center allbox tab(/) ;
c c c .
\fBA1\fR/\fBup\fR/\fBA3\fR
\fBleft\fR/\fBB2\fR/\fBright\fR
\fBC1\fR/\fBdown\fR/\fBC3\fR
.TE
.sp
A few of these predefined values do \fInot\fP correspond to a real key:
.bP
.B KEY_RESIZE
is returned when the \fBSIGWINCH\fP signal has been detected
(see \fBinitscr\fP(3X) and \fBresizeterm\fR(3X)).
This code is returned whether or not \fBkeypad\fP has been enabled.
.bP
.B KEY_MOUSE
is returned for mouse-events (see \fBcurs_mouse\fR(3X)).
This code relies upon whether or not \fBkeypad\fP(3X) has been enabled,
because (e.g., with \fIxterm\fP mouse prototocol) ncurses must
read escape sequences,
just like a function key.
.SS Testing key-codes
.PP
The \fBhas_key\fR routine takes a key-code value from the above list, and
returns \fBTRUE\fP or \fBFALSE\fP according to whether
the current terminal type recognizes a key with that value.
.PP
The library also supports these extensions:
.RS 3
.TP 5
.B define_key
defines a key-code for a given string (see \fBdefine_key\fP(3X)).
.TP 5
.B key_defined
checks if there is a key-code defined for a given
string (see \fBkey_defined\fP(3X)).
.RE
.PP
.SH RETURN VALUE
All routines return the integer \fBERR\fR upon failure and an integer value
other than \fBERR\fR (\fBOK\fR in the case of \fBungetch\fP) upon successful
completion.
.RS 3
.TP 5
\fBungetch\fP
returns \fBERR\fP
if there is no more room in the FIFO.
.TP
\fBwgetch\fP
returns \fBERR\fP
if the window pointer is null, or
if its timeout expires without having any data, or
if the execution was interrupted by a signal (\fBerrno\fR will be set to
\fBEINTR\fR).
.RE
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH NOTES
Use of the escape key by a programmer for a single character function is
discouraged, as it will cause a delay of up to one second while the
keypad code looks for a following function-key sequence.
.PP
Some keys may be the same as commonly used control
keys, e.g.,
\fBKEY_ENTER\fP versus control/M,
\fBKEY_BACKSPACE\fP versus control/H.
Some curses implementations may differ according to whether they
treat these control keys specially (and ignore the terminfo), or
use the terminfo definitions.
\fBNcurses\fR uses the terminfo definition.
If it says that \fBKEY_ENTER\fP is control/M,
\fBgetch\fR will return \fBKEY_ENTER\fP
when you press control/M.
.PP
Generally, \fBKEY_ENTER\fP denotes the character(s) sent by the \fIEnter\fP
key on the numeric keypad:
.bP
the terminal description lists the most useful keys,
.bP
the \fIEnter\fP key on the regular keyboard is already handled by
the standard ASCII characters for carriage-return and line-feed,
.bP
depending on whether \fBnl\fP or \fBnonl\fP was called,
pressing \*(``Enter\*('' on the regular keyboard
may return either a carriage-return or line-feed, and finally
.bP
\*(``Enter or send\*('' is the standard description for this key.
.PP
When using \fBgetch\fR, \fBwgetch\fR, \fBmvgetch\fR, or
\fBmvwgetch\fR, nocbreak mode (\fBnocbreak\fR) and echo mode
(\fBecho\fR) should not be used at the same time.
Depending on the
state of the tty driver when each character is typed, the program may
produce undesirable results.
.PP
Note that \fBgetch\fR, \fBmvgetch\fR, and \fBmvwgetch\fR may be macros.
.PP
Historically, the set of keypad macros was largely defined by the extremely
function-key-rich keyboard of the AT&T 7300, aka 3B1, aka Safari 4.
Modern
personal computers usually have only a small subset of these.
IBM PC-style
consoles typically support little more than \fBKEY_UP\fR, \fBKEY_DOWN\fR,
\fBKEY_LEFT\fR, \fBKEY_RIGHT\fR, \fBKEY_HOME\fR, \fBKEY_END\fR,
\fBKEY_NPAGE\fR, \fBKEY_PPAGE\fR, and function keys 1 through 12.
The Ins key
is usually mapped to \fBKEY_IC\fR.
.SH PORTABILITY
The *get* functions are described in the XSI Curses standard, Issue 4.
They
read single-byte characters only.
The standard specifies that they return
\fBERR\fR on failure, but specifies no error conditions.
.PP
The echo behavior of these functions on input of \fBKEY_\fR or backspace
characters was not specified in the SVr4 documentation.
This description is
adopted from the XSI Curses standard.
.PP
The behavior of \fBgetch\fR and friends in the presence of handled signals is
unspecified in the SVr4 and XSI Curses documentation.
Under historical curses
implementations, it varied depending on whether the operating system's
implementation of handled signal receipt interrupts a \fBread\fR(2) call in
progress or not, and also (in some implementations) depending on whether an
input timeout or non-blocking mode has been set.
.PP
\fBKEY_MOUSE\fP is mentioned in XSI Curses, along with a few related
terminfo capabilities, but no higher-level functions use the feature.
The implementation in ncurses is an extension.
.PP
\fBKEY_RESIZE\fP is an extension first implemented for ncurses.
NetBSD curses later added this extension.
.PP
Programmers concerned about portability should be prepared for either of two
cases: (a) signal receipt does not interrupt \fBgetch\fR; (b) signal receipt
interrupts \fBgetch\fR and causes it to return \fBERR\fP with \fBerrno\fR set to
\fBEINTR\fR.
.PP
The \fBhas_key\fR function is unique to \fBncurses\fR.
We recommend that
any code using it be conditionalized on the \fBNCURSES_VERSION\fR feature macro.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_inopts\fR(3X),
-\fBcurs_outopts\fR(3X),
\fBcurs_mouse\fR(3X),
\fBcurs_move\fR(3X),
+\fBcurs_outopts\fR(3X),
\fBcurs_refresh\fR(3X),
\fBcurs_variables\fR(3X),
\fBresizeterm\fR(3X).
.PP
Comparable functions in the wide-character (ncursesw) library are
described in
\fBcurs_get_wch\fR(3X).
diff --git a/contrib/ncurses/man/curs_getstr.3x b/contrib/ncurses/man/curs_getstr.3x
index d9bed5958976..baf56967263e 100644
--- a/contrib/ncurses/man/curs_getstr.3x
+++ b/contrib/ncurses/man/curs_getstr.3x
@@ -1,193 +1,193 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_getstr.3x,v 1.29 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_getstr.3x,v 1.31 2020/10/18 00:27:44 tom Exp $
.TH curs_getstr 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.SH NAME
\fBgetstr\fR,
\fBgetnstr\fR,
\fBwgetstr\fR,
\fBwgetnstr\fR,
\fBmvgetstr\fR,
\fBmvgetnstr\fR,
\fBmvwgetstr\fR,
\fBmvwgetnstr\fR \- accept character strings from \fBcurses\fR terminal keyboard
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBint getstr(char *str);\fR
+\fBint getstr(char *\fP\fIstr\fP\fB);\fR
.br
-\fBint getnstr(char *str, int n);\fR
+\fBint getnstr(char *\fP\fIstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint wgetstr(WINDOW *win, char *str);\fR
+\fBint wgetstr(WINDOW *\fP\fIwin\fP\fB, char *\fP\fIstr\fP\fB);\fR
.br
-\fBint wgetnstr(WINDOW *win, char *str, int n);\fR
-.br
-\fBint mvgetstr(int y, int x, char *str);\fR
+\fBint wgetnstr(WINDOW *\fP\fIwin\fP\fB, char *\fP\fIstr\fP\fB, int \fP\fIn\fP\fB);\fR
+.sp
+\fBint mvgetstr(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, char *\fP\fIstr\fP\fB);\fR
.br
-\fBint mvwgetstr(WINDOW *win, int y, int x, char *str);\fR
+\fBint mvwgetstr(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, char *\fP\fIstr\fP\fB);\fR
.br
-\fBint mvgetnstr(int y, int x, char *str, int n);\fR
+\fBint mvgetnstr(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, char *\fP\fIstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint mvwgetnstr(WINDOW *, int y, int x, char *str, int n);\fR
+\fBint mvwgetnstr(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, char *\fP\fIstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
.SH DESCRIPTION
The function \fBgetstr\fR is equivalent to a series of calls to \fBgetch\fR,
until a newline or carriage return is received (the terminating character is
not included in the returned string).
.\" X/Open says also until EOf
.\" X/Open says then an EOS is added to the result
.\" X/Open doesn't mention n<0
The resulting value is placed in the
area pointed to by the character pointer \fIstr\fR,
followed by a NUL.
.PP
\fBwgetnstr\fR reads at most \fIn\fR characters, thus preventing a possible
overflow of the input buffer.
Any attempt to enter more characters (other
than the terminating newline or carriage return) causes a beep.
Function
keys also cause a beep and are ignored.
The \fBgetnstr\fR function reads
from the \fIstdscr\fR default window.
.PP
The user's erase and kill characters are interpreted.
If keypad
mode is on for the window, \fBKEY_LEFT\fR and \fBKEY_BACKSPACE\fR
are both considered equivalent to the user's kill character.
.PP
Characters input are echoed only if \fBecho\fR is currently on.
In that case,
backspace is echoed as deletion of the previous character (typically a left
motion).
.SH RETURN VALUE
All routines return the integer \fBERR\fR upon failure and an \fBOK\fR (SVr4
specifies only \*(``an integer value other than \fBERR\fR\*('') upon successful
completion.
.PP
X/Open defines no error conditions.
.PP
In this implementation,
these functions return an error
if the window pointer is null, or
if its timeout expires without having any data.
.PP
This implementation provides an extension as well.
If a \fBSIGWINCH\fP interrupts the function, it will return \fBKEY_RESIZE\fP
rather than \fBOK\fP or \fBERR\fP.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH NOTES
Note that \fBgetstr\fR, \fBmvgetstr\fR, and \fBmvwgetstr\fR may be macros.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
They read single-byte characters only.
The standard does not define any error conditions.
This implementation returns \fBERR\fP if the window pointer is null,
or if the lower-level \fBwgetch\fR(3X) call returns an \fBERR\fP.
.PP
SVr3 and early SVr4 curses implementations did not reject function keys;
the SVr4.0 documentation claimed that \*(``special keys\*(''
(such as function keys,
\*(``home\*('' key,
\*(``clear\*('' key,
\fIetc\fR.) are \*(``interpreted\*('',
without giving details.
It lied.
In fact, the \*(``character\*('' value appended to the
string by those implementations was predictable but not useful
(being, in fact, the low-order eight bits of the key's KEY_ value).
.PP
The functions \fBgetnstr\fR, \fBmvgetnstr\fR, and \fBmvwgetnstr\fR were
present but not documented in SVr4.
.PP
X/Open Curses, Issue 5 (2007) stated that these functions
\*(``read at most \fIn\fP bytes\*(''
but did not state whether the terminating NUL is counted in that limit.
X/Open Curses, Issue 7 (2009) changed that to say they
\*(``read at most \fIn\fP\-1 bytes\*(''
to allow for the terminating NUL.
As of 2018, some implementations do, some do not count it:
.bP
ncurses 6.1 and PDCurses do not count the NUL in the given limit, while
.bP
Solaris SVr4 and NetBSD curses count the NUL as part of the limit.
.bP
Solaris xcurses provides both:
its wide-character \fBwget_nstr\fP reserves a NUL,
but its \fBwgetnstr\fP does not count the NUL consistently.
.PP
In SVr4 curses,
a negative value of \fIn\fP tells \fBwgetnstr\fP to assume that the
caller's buffer is large enough to hold the result,
i.e., to act like \fBwgetstr\fP.
X/Open Curses does not mention this
(or anything related to negative or zero values of \fIn\fP),
however most implementations
use the feature, with different limits:
.bP
Solaris SVr4 curses and PDCurses limit the result to 255 bytes.
Other Unix systems than Solaris are likely to use the same limit.
.bP
Solaris xcurses limits the result to \fBLINE_MAX\fP bytes.
.bP
NetBSD 7 assumes no particular limit for the result from \fBwgetstr\fP.
However, it limits the \fBwgetnstr\fP parameter \fIn\fP to ensure
that it is greater than zero.
.IP
A comment in NetBSD's source code states that this is specified in SUSv2.
.bP
ncurses (before 6.2) assumes no particular limit for the result
from \fBwgetstr\fP, and treats the \fIn\fP parameter of \fBwgetnstr\fP
like SVr4 curses.
.bP
ncurses 6.2 uses \fBLINE_MAX\fP,
or a larger (system-dependent) value
which the \fBsysconf\fP function may provide.
If neither \fBLINE_MAX\fP or \fBsysconf\fP is available,
ncurses uses the POSIX value for \fBLINE_MAX\fP (a 2048 byte limit).
In either case, it reserves a byte for the terminating NUL.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_getch\fR(3X),
\fBcurs_variables\fR(3X).
diff --git a/contrib/ncurses/man/curs_getyx.3x b/contrib/ncurses/man/curs_getyx.3x
index d12c06419bbb..e6ff67014864 100644
--- a/contrib/ncurses/man/curs_getyx.3x
+++ b/contrib/ncurses/man/curs_getyx.3x
@@ -1,101 +1,101 @@
.\"***************************************************************************
.\" Copyright 2020 Thomas E. Dickey *
.\" Copyright 1998-2007,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_getyx.3x,v 1.19 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_getyx.3x,v 1.20 2020/10/24 09:38:43 tom Exp $
.TH curs_getyx 3X ""
.SH NAME
\fBgetyx\fR,
\fBgetparyx\fR,
\fBgetbegyx\fR,
\fBgetmaxyx\fR \- get \fBcurses\fR cursor and window coordinates
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBvoid getyx(WINDOW *win, int y, int x);\fR
+\fBvoid getyx(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
.br
-\fBvoid getparyx(WINDOW *win, int y, int x);\fR
+\fBvoid getparyx(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
.br
-\fBvoid getbegyx(WINDOW *win, int y, int x);\fR
+\fBvoid getbegyx(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
.br
-\fBvoid getmaxyx(WINDOW *win, int y, int x);\fR
+\fBvoid getmaxyx(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
.br
.SH DESCRIPTION
The \fBgetyx\fR macro places the current cursor position of the given window in
the two integer variables \fIy\fR and \fIx\fR.
.PP
If \fIwin\fR is a subwindow, the \fBgetparyx\fR macro places the beginning
coordinates of the subwindow relative to the parent window into two integer
variables \fIy\fR and \fIx\fR.
Otherwise, \fB\-1\fR is placed into \fIy\fR and \fIx\fR.
.PP
Like \fBgetyx\fR, the \fBgetbegyx\fR and \fBgetmaxyx\fR macros store
the current beginning coordinates and size of the specified window.
.SH RETURN VALUE
The return values of these macros are undefined (i.e.,
they should not be used as the right-hand side of assignment statements).
.SH NOTES
All of these interfaces are macros.
A "\fB&\fR" is not necessary before the variables \fIy\fR and \fIx\fR.
.SH PORTABILITY
The
\fBgetyx\fR,
\fBgetparyx\fR,
\fBgetbegyx\fR and
\fBgetmaxyx\fR
macros are described in the XSI Curses standard, Issue 4.
.PP
This implementation also provides functions
\fBgetbegx\fR,
\fBgetbegy\fR,
\fBgetcurx\fR,
\fBgetcury\fR,
\fBgetmaxx\fR,
\fBgetmaxy\fR,
\fBgetparx\fR and
\fBgetpary\fR
for compatibility with older versions of curses.
.PP
Although X/Open Curses does not address this,
many implementations provide members of the WINDOW structure
containing values corresponding to these macros.
For best portability, do not rely on using the data in WINDOW,
since some implementations make WINDOW opaque (do not allow
direct use of its members).
.PP
Besides the problem of opaque structures,
the data stored in like-named members may not have like-values in
different implementations.
For example, the WINDOW._maxx and WINDOW._maxy values in ncurses
have (at least since release 1.8.1) differed by one from some
other implementations.
The difference is hidden by means of the macro \fBgetmaxyx\fP.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_legacy\fR(3X),
\fBcurs_opaque\fR(3X)
diff --git a/contrib/ncurses/man/curs_in_wch.3x b/contrib/ncurses/man/curs_in_wch.3x
index a17135ec2d04..e2678997b4c6 100644
--- a/contrib/ncurses/man/curs_in_wch.3x
+++ b/contrib/ncurses/man/curs_in_wch.3x
@@ -1,71 +1,71 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 2002-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_in_wch.3x,v 1.9 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_in_wch.3x,v 1.10 2020/10/17 23:19:29 tom Exp $
.TH curs_in_wch 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.SH NAME
\fBin_wch\fR,
\fBmvin_wch\fR,
\fBmvwin_wch\fR,
\fBwin_wch\fR \- extract a complex character and rendition from a window
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBint in_wch(cchar_t *\fR\fIwcval\fR\fB);\fR
.br
+\fBint win_wch(WINDOW *\fR\fIwin\fR\fB, cchar_t *\fR\fIwcval\fR\fB);\fR
+.sp
\fBint mvin_wch(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, cchar_t *\fR\fIwcval\fR\fB);\fR
.br
\fBint mvwin_wch(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, cchar_t *\fR\fIwcval\fR\fB);\fR
-.br
-\fBint win_wch(WINDOW *\fR\fIwin\fR\fB, cchar_t *\fR\fIwcval\fR\fB);\fR
.SH DESCRIPTION
These functions extract the complex character and rendition from
the current position in the named window into the \fBcchar_t\fR object
referenced by wcval.
.SH RETURN VALUE
No errors are defined in the XSI Curses standard.
This implementation checks for null pointers, returns \fBERR\fP in that case.
Also, the \fImv\fR routines check for error moving the cursor,
returning \fBERR\fP in that case.
Otherwise they return \fBOK\fP.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH NOTES
Note that all of these routines may be macros.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_inch\fR(3X).
diff --git a/contrib/ncurses/man/curs_in_wchstr.3x b/contrib/ncurses/man/curs_in_wchstr.3x
index 53491a8fc515..4feae48098ca 100644
--- a/contrib/ncurses/man/curs_in_wchstr.3x
+++ b/contrib/ncurses/man/curs_in_wchstr.3x
@@ -1,126 +1,126 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 2002-2012,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_in_wchstr.3x,v 1.13 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_in_wchstr.3x,v 1.14 2020/10/17 23:19:44 tom Exp $
.TH curs_in_wchstr 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.na
.hy 0
.SH NAME
\fBin_wchstr\fR,
\fBin_wchnstr\fR,
\fBwin_wchstr\fR,
\fBwin_wchnstr\fR,
\fBmvin_wchstr\fR,
\fBmvin_wchnstr\fR,
\fBmvwin_wchstr\fR,
\fBmvwin_wchnstr\fR \- get an array of complex characters and renditions from a curses window
.ad
.hy
.SH SYNOPSIS
.nf
\fB#include <curses.h>\fR
.sp
\fBint in_wchstr(cchar_t *\fR\fIwchstr\fR\fB);\fR
.br
\fBint in_wchnstr(cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint win_wchstr(WINDOW *\fR\fIwin\fR\fB, cchar_t *\fR\fIwchstr\fR\fB);\fR
.br
\fBint win_wchnstr(WINDOW *\fR\fIwin\fR\fB, cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR
-.br
+.sp
\fBint mvin_wchstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, cchar_t *\fR\fIwchstr\fR\fB);\fR
.br
\fBint mvin_wchnstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint mvwin_wchstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, cchar_t *\fR\fIwchstr\fR\fB);\fR
.br
\fBint mvwin_wchnstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, cchar_t *\fR\fIwchstr\fR, int \fIn\fR\fB);\fR
.fi
.SH DESCRIPTION
These functions return an array of complex characters in \fIwchstr\fR,
starting at the current cursor position in the named window.
Attributes (rendition) are stored with the characters.
.PP
The
\fBin_wchnstr\fR,
\fBmvin_wchnstr\fR,
\fBmvwin_wchnstr\fR
and
\fBwin_wchnstr\fR
fill the array
with at most
\fIn\fR
\fBcchar_t\fR
elements.
.br
.SH NOTES
Note that all routines except
\fBwin_wchnstr\fR
may be
macros.
.PP
Reading a line that overflows the array pointed to by
\fIwchstr\fR
with
\fBin_wchstr\fR,
\fBmvin_wchstr\fR,
\fBmvwin_wchstr\fR
or
\fBwin_wchstr\fR
causes undefined results.
Therefore, the use of
\fBin_wchnstr\fR,
\fBmvin_wchnstr\fR,
\fBmvwin_wchnstr\fR, or
\fBwin_wchnstr\fR
is recommended.
.SH RETURN VALUE
Upon successful completion, these functions return
\fBOK\fR.
Otherwise, they return
\fBERR\fR.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH PORTABILITY
The XSI Curses defines no error conditions.
This implementation checks for null pointers,
returning \fBERR\fP in that case.
.SH SEE ALSO
Functions:
\fBcurses\fR(3X),
\fBcurs_in_wch\fR(3X),
\fBcurs_instr\fR(3X),
\fBcurs_inwstr\fR(3X)
\fBcurs_inchstr\fR(3X)
diff --git a/contrib/ncurses/man/curs_inch.3x b/contrib/ncurses/man/curs_inch.3x
index a91d9638d5b5..ab38cbb9dd06 100644
--- a/contrib/ncurses/man/curs_inch.3x
+++ b/contrib/ncurses/man/curs_inch.3x
@@ -1,119 +1,119 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_inch.3x,v 1.23 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_inch.3x,v 1.25 2020/10/18 00:25:23 tom Exp $
.TH curs_inch 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fBinch\fR,
\fBwinch\fR,
\fBmvinch\fR,
\fBmvwinch\fR \- get a character and attributes from a \fBcurses\fR window
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBchtype inch(void);\fR
.br
-\fBchtype winch(WINDOW *win);\fR
-.br
-\fBchtype mvinch(int y, int x);\fR
+\fBchtype winch(WINDOW *\fP\fIwin\fP\fB);\fR
+.sp
+\fBchtype mvinch(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
.br
-\fBchtype mvwinch(WINDOW *win, int y, int x);\fR
+\fBchtype mvwinch(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
.br
.SH DESCRIPTION
These routines return the character, of type \fBchtype\fR, at the current
position in the named window.
If any attributes are set for that position,
their values are OR'ed into the value returned.
Constants defined in
\fB<curses.h>\fR can be used with the \fB&\fR (logical AND) operator to
extract the character or attributes alone.
.
.SS Attributes
The following bit-masks may be AND-ed with characters returned by \fBwinch\fR.
.
.TS
l l .
\fBA_CHARTEXT\fR Bit-mask to extract character
\fBA_ATTRIBUTES\fR Bit-mask to extract attributes
\fBA_COLOR\fR Bit-mask to extract color-pair field information
.TE
.SH RETURN VALUE
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.PP
The \fBwinch\fP function does not return an error if the window contains
characters larger than 8-bits (255).
Only the low-order 8 bits of the character are used by \fBwinch\fP.
.SH NOTES
Note that all of these routines may be macros.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
.PP
Very old systems (before standardization) provide a different function
with the same name:
.bP
The \fBwinch\fP function was part of the original BSD curses library,
which stored a 7-bit character combined with the \fIstandout\fP attribute.
.IP
In BSD curses, \fBwinch\fP returned only the character (as an integer)
with the \fIstandout\fP attribute removed.
.bP
System V curses added support for several video attributes which
could be combined with characters in the window.
.IP
Reflecting this improvement, the function was altered to return the
character combined with all video attributes in a \fBchtype\fP value.
.PP
X/Open Curses does not specify
the size and layout of attributes, color and character values in
\fBchtype\fP; it is implementation-dependent.
This implementation uses 8 bits for character values.
An application using more bits, e.g., a Unicode value,
should use the wide-character equivalents to these functions.
.SH SEE ALSO
.TP 5
\fBcurses\fR(3X)
gives an overview of the WINDOW and \fBchtype\fP data types.
.TP 5
\fBcurs_attr\fR(3X)
goes into more detail, pointing out portability problems and
constraints on the use of \fBchtype\fP for returning window information.
.TP 5
\fBcurs_in_wch\fR(3X)
describes comparable functions for the wide-character (ncursesw) library.
diff --git a/contrib/ncurses/man/curs_inchstr.3x b/contrib/ncurses/man/curs_inchstr.3x
index d352c385c853..332604e78996 100644
--- a/contrib/ncurses/man/curs_inchstr.3x
+++ b/contrib/ncurses/man/curs_inchstr.3x
@@ -1,114 +1,114 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_inchstr.3x,v 1.19 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_inchstr.3x,v 1.21 2020/10/18 00:24:36 tom Exp $
.TH curs_inchstr 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.SH NAME
\fBinchstr\fR,
\fBinchnstr\fR,
\fBwinchstr\fR,
\fBwinchnstr\fR,
\fBmvinchstr\fR,
\fBmvinchnstr\fR,
\fBmvwinchstr\fR,
\fBmvwinchnstr\fR \- get a string of characters (and attributes) from a \fBcurses\fR window
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBint inchstr(chtype *chstr);\fR
+\fBint inchstr(chtype *\fP\fIchstr\fP\fB);\fR
.br
-\fBint inchnstr(chtype *chstr, int n);\fR
+\fBint inchnstr(chtype *\fP\fIchstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint winchstr(WINDOW *win, chtype *chstr);\fR
+\fBint winchstr(WINDOW *\fP\fIwin\fP\fB, chtype *\fP\fIchstr\fP\fB);\fR
.br
-\fBint winchnstr(WINDOW *win, chtype *chstr, int n);\fR
-.br
-\fBint mvinchstr(int y, int x, chtype *chstr);\fR
+\fBint winchnstr(WINDOW *\fP\fIwin\fP\fB, chtype *\fP\fIchstr\fP\fB, int \fP\fIn\fP\fB);\fR
+.sp
+\fBint mvinchstr(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, chtype *\fP\fIchstr\fP\fB);\fR
.br
-\fBint mvinchnstr(int y, int x, chtype *chstr, int n);\fR
+\fBint mvinchnstr(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, chtype *\fP\fIchstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint mvwinchstr(WINDOW *win, int y, int x, chtype *chstr);\fR
+\fBint mvwinchstr(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, chtype *\fP\fIchstr\fP\fB);\fR
.br
-\fBint mvwinchnstr(WINDOW *win, int y, int x, chtype *chstr, int n);\fR
+\fBint mvwinchnstr(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, chtype *\fP\fIchstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
.SH DESCRIPTION
These routines return a NULL-terminated array of \fBchtype\fR quantities,
starting at the current cursor position in the named window and ending at the
right margin of the window.
The four functions with \fIn\fR as
the last argument, return a leading substring at most \fIn\fR characters long
(exclusive of the trailing (chtype)0).
Constants defined in \fB<curses.h>\fR can be used with the \fB&\fR (logical
AND) operator to extract the character or the attribute alone from any position
in the \fIchstr\fR [see \fBcurs_inch\fR(3X)].
.SH RETURN VALUE
All routines return the integer \fBERR\fR upon failure and an integer value
other than \fBERR\fR upon successful completion (the number of characters
retrieved, exclusive of the trailing 0).
.PP
X/Open Curses defines no error conditions.
In this implementation:
.bP
If the \fIwin\fP parameter is null, an error is returned,
.bP
If the \fIchstr\fP parameter is null, an error is returned,
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH NOTES
Note that all routines except \fBwinchnstr\fR may be macros.
SVr4 does not
document whether the result string is zero-terminated; it does not document
whether a length limit argument includes any trailing 0; and it does not
document the meaning of the return value.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
It is no
more specific than the SVr4 documentation on the trailing 0.
It does specify
that the successful return of the functions is \fBOK\fR.
.SH SEE ALSO
\fBcurses\fR(3X), \fBcurs_inch\fR(3X).
.PP
Comparable functions in the wide-character (ncursesw) library are
described in
\fBcurs_in_wchstr\fR(3X).
diff --git a/contrib/ncurses/man/curs_initscr.3x b/contrib/ncurses/man/curs_initscr.3x
index e0e8ba2caf9e..235a5aa715bb 100644
--- a/contrib/ncurses/man/curs_initscr.3x
+++ b/contrib/ncurses/man/curs_initscr.3x
@@ -1,260 +1,260 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_initscr.3x,v 1.32 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_initscr.3x,v 1.33 2020/10/17 23:20:48 tom Exp $
.TH curs_initscr 3X ""
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.na
.hy 0
.SH NAME
\fBinitscr\fR,
\fBnewterm\fR,
\fBendwin\fR,
\fBisendwin\fR,
\fBset_term\fR,
\fBdelscreen\fR \- \fBcurses\fR screen initialization and manipulation routines
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBWINDOW *initscr(void);\fR
.br
\fBint endwin(void);\fR
-.br
+.sp
\fBbool isendwin(void);\fR
-.br
+.sp
\fBSCREEN *newterm(const char *\fP\fItype\fP\fB, FILE *\fP\fIoutfd\fP\fB, FILE *\fP\fIinfd\fP\fB);\fR
.br
\fBSCREEN *set_term(SCREEN *\fP\fInew\fP\fB);\fR
.br
\fBvoid delscreen(SCREEN* \fP\fIsp\fP\fB);\fR
.br
.SH DESCRIPTION
.SS initscr
\fBinitscr\fR is normally the first \fBcurses\fR routine to call when
initializing a program.
A few special routines sometimes need to be called before it;
these are \fBslk_init\fR(3X), \fBfilter\fR, \fBripoffline\fR,
\fBuse_env\fR.
For multiple-terminal applications,
\fBnewterm\fR may be called before \fBinitscr\fR.
.PP
The initscr code determines the terminal type and initializes all \fBcurses\fR
data structures.
\fBinitscr\fR also causes the first call to \fBrefresh\fR(3X)
to clear the screen.
If errors occur, \fBinitscr\fR writes an appropriate error
message to standard error and exits;
otherwise, a pointer is returned to \fBstdscr\fR.
.SS newterm
.PP
A program that outputs to more than one terminal should use the \fBnewterm\fR
routine for each terminal instead of \fBinitscr\fR.
A program that needs to inspect capabilities,
so it can continue to run in a line-oriented mode if the
terminal cannot support a screen-oriented program, would also use
\fBnewterm\fR.
The routine \fBnewterm\fR should be called once for each terminal.
It returns a variable of type \fBSCREEN *\fR which should be saved
as a reference to that terminal.
\fBnewterm\fP's arguments are
.bP
the \fItype\fR of the terminal to be used in place of \fB$TERM\fR,
.bP
a file pointer for output to the terminal, and
.bP
another file pointer for input from the terminal
.PP
If the \fItype\fR parameter is \fBNULL\fR, \fB$TERM\fR will be used.
.SS endwin
.PP
The program must also call
\fBendwin\fR for each terminal being used before exiting from \fBcurses\fR.
If \fBnewterm\fR is called more than once for the same terminal, the first
terminal referred to must be the last one for which \fBendwin\fR is called.
.PP
A program should always call \fBendwin\fR before exiting or escaping from
\fBcurses\fR mode temporarily.
This routine
.bP
resets colors to correspond with the default color pair 0,
.bP
moves the cursor to the lower left-hand corner of the screen,
.bP
clears the remainder of the line so that it uses the default colors,
.bP
sets the cursor to normal visibility (see \fBcurs_set\fP(3X)),
.bP
stops cursor-addressing mode using the \fIexit_ca_mode\fP terminal capability,
.bP
restores tty modes (see \fBreset_shell_mode\fP(3X)).
.PP
Calling \fBrefresh\fR(3X) or \fBdoupdate\fR(3X) after a
temporary escape causes the program to resume visual mode.
.SS isendwin
.PP
The \fBisendwin\fR routine returns \fBTRUE\fR if \fBendwin\fR has been
called without any subsequent calls to \fBwrefresh\fR,
and \fBFALSE\fR otherwise.
.SS set_term
.PP
The \fBset_term\fR routine is used to switch between different terminals.
The screen reference \fBnew\fR becomes the new current terminal.
The previous terminal is returned by the routine.
This is the only routine which manipulates \fBSCREEN\fR pointers;
all other routines affect only the current terminal.
.SS delscreen
.PP
The \fBdelscreen\fR routine frees storage associated with the
\fBSCREEN\fR data structure.
The \fBendwin\fR routine does not do
this, so \fBdelscreen\fR should be called after \fBendwin\fR if a
particular \fBSCREEN\fR is no longer needed.
.SH RETURN VALUE
\fBendwin\fR returns the integer \fBERR\fR upon failure and \fBOK\fR
upon successful completion.
.PP
Routines that return pointers always return \fBNULL\fR on error.
.PP
X/Open defines no error conditions.
In this implementation
.bP
\fBendwin\fP returns an error if the terminal was not initialized.
.bP
\fBnewterm\fP
returns an error if it cannot allocate the data structures for the screen,
or for the top-level windows within the screen,
i.e.,
\fBcurscr\fP, \fBnewscr\fP, or \fBstdscr\fP.
.bP
\fBset_term\fP
returns no error.
.SH PORTABILITY
These functions were described in the XSI Curses standard, Issue 4.
As of 2015, the current document is X/Open Curses, Issue 7.
.SS Differences
X/Open specifies that portable applications must not
call \fBinitscr\fR more than once:
.bP
The portable way to use \fBinitscr\fP is once only,
using \fBrefresh\fP (see curs_refresh(3X))
to restore the screen after \fBendwin\fP.
.bP
This implementation allows using \fBinitscr\fP after \fBendwin\fP.
.PP
Old versions of curses, e.g., BSD 4.4, may have returned a null pointer
from \fBinitscr\fR when an error is detected, rather than exiting.
It is safe but redundant to check the return value of \fBinitscr\fR
in XSI Curses.
.SS Unset TERM Variable
.PP
If the TERM variable is missing or empty, \fBinitscr\fP uses the
value \*(``unknown\*('',
which normally corresponds to a terminal entry with the \fIgeneric\fP
(\fIgn\fP) capability.
Generic entries are detected by \fBsetupterm\fP
(see curs_terminfo(3X)) and cannot be used for full-screen operation.
Other implementations may handle a missing/empty TERM variable differently.
.SS Signal Handlers
.PP
Quoting from X/Open Curses, section 3.1.1:
.RS 5
.PP
\fICurses implementations may provide for special handling of the \fBSIGINT\fP,
\fBSIGQUIT\fP and \fBSIGTSTP\fP signals
if their disposition is \fBSIG_DFL\fP at the time
\fBinitscr\fP is called \fP...
.PP
\fIAny special handling for these signals may remain in effect for the
life of the process or until the process changes the disposition of
the signal.\fP
.PP
\fINone of the Curses functions are required to be safe
with respect to signals \fP...
.RE
.PP
This implementation establishes signal handlers during initialization,
e.g., \fBinitscr\fP or \fBnewterm\fP.
Applications which must handle these signals should set up the corresponding
handlers \fIafter\fP initializing the library:
.TP 5
.B SIGINT
The handler \fIattempts\fP to cleanup the screen on exit.
Although it \fIusually\fP works as expected, there are limitations:
.RS 5
.bP
Walking the \fBSCREEN\fP list is unsafe, since all list management
is done without any signal blocking.
.bP
On systems which have \fBREENTRANT\fP turned on, \fBset_term\fP uses
functions which could deadlock or misbehave in other ways.
.bP
\fBendwin\fP calls other functions, many of which use stdio or
other library functions which are clearly unsafe.
.RE
.TP 5
.B SIGTERM
This uses the same handler as \fBSIGINT\fP, with the same limitations.
It is not mentioned in X/Open Curses, but is more suitable for this
purpose than \fBSIGQUIT\fP (which is used in debugging).
.TP 5
.B SIGTSTP
This handles the \fIstop\fP signal, used in job control.
When resuming the process, this implementation discards pending
input with \fBflushinput\fP (see curs_util(3X)), and repaints the screen
assuming that it has been completely altered.
It also updates the saved terminal modes with \fBdef_shell_mode\fP
(see \fBcurs_kernel\fR(3X)).
.TP 5
.B SIGWINCH
This handles the window-size changes which were ignored in
the standardization efforts.
The handler sets a (signal-safe) variable
which is later tested in \fBwgetch\fP (see curs_getch(3X)).
If \fBkeypad\fP has been enabled for the corresponding window,
\fBwgetch\fP returns the key symbol \fBKEY_RESIZE\fP.
At the same time, \fBwgetch\fP calls \fBresizeterm\fP to adjust the
standard screen \fBstdscr\fP,
and update other data such as \fBLINES\fP and \fBCOLS\fP.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_kernel\fR(3X),
\fBcurs_refresh\fR(3X),
\fBcurs_slk\fR(3X),
\fBcurs_terminfo\fR(3X),
\fBcurs_util\fR(3X),
\fBcurs_variables\fR(3X).
diff --git a/contrib/ncurses/man/curs_inopts.3x b/contrib/ncurses/man/curs_inopts.3x
index 3422c6b68a69..d346017ba0ea 100644
--- a/contrib/ncurses/man/curs_inopts.3x
+++ b/contrib/ncurses/man/curs_inopts.3x
@@ -1,349 +1,380 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_inopts.3x,v 1.29 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_inopts.3x,v 1.33 2020/12/05 19:38:18 Benno.Schulenberg Exp $
.TH curs_inopts 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.na
.hy 0
.SH NAME
\fBcbreak\fR,
\fBnocbreak\fR,
\fBecho\fR,
\fBnoecho\fR,
\fBhalfdelay\fR,
\fBintrflush\fR,
\fBkeypad\fR,
\fBmeta\fR,
+\fBnl\fR,
+\fBnonl\fR,
\fBnodelay\fR,
\fBnotimeout\fR,
\fBraw\fR,
\fBnoraw\fR,
-\fBnoqiflush\fR,
\fBqiflush\fR,
+\fBnoqiflush\fR,
\fBtimeout\fR,
\fBwtimeout\fR,
\fBtypeahead\fR \- \fBcurses\fR input options
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.PP
\fBint cbreak(void);\fR
.br
\fBint nocbreak(void);\fR
-.br
+.sp
\fBint echo(void);\fR
.br
\fBint noecho(void);\fR
+.sp
+\fBint intrflush(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR
.br
-\fBint halfdelay(int tenths);\fR
+\fBint keypad(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR
.br
-\fBint intrflush(WINDOW *win, bool bf);\fR
+\fBint meta(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR
.br
-\fBint keypad(WINDOW *win, bool bf);\fR
+\fBint nodelay(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR
.br
-\fBint meta(WINDOW *win, bool bf);\fR
-.br
-\fBint nodelay(WINDOW *win, bool bf);\fR
+\fBint notimeout(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR
+.sp
+\fBint nl(void);\fR
.br
+\fBint nonl(void);\fR
+.sp
\fBint raw(void);\fR
.br
\fBint noraw(void);\fR
-.br
-\fBvoid noqiflush(void);\fR
-.br
+.sp
\fBvoid qiflush(void);\fR
.br
-\fBint notimeout(WINDOW *win, bool bf);\fR
-.br
-\fBvoid timeout(int delay);\fR
+\fBvoid noqiflush(void);\fR
+.sp
+\fBint halfdelay(int \fP\fItenths\fP\fB);\fR
.br
-\fBvoid wtimeout(WINDOW *win, int delay);\fR
+\fBvoid timeout(int \fP\fIdelay\fP\fB);\fR
.br
-\fBint typeahead(int fd);\fR
+\fBvoid wtimeout(WINDOW *\fP\fIwin\fP\fB, int \fP\fIdelay\fP\fB);\fR
+.sp
+\fBint typeahead(int \fP\fIfd\fP\fB);\fR
.br
.SH DESCRIPTION
The \fBncurses\fP library provides several functions which let an application
change the way input from the terminal is handled.
Some are global, applying to all windows.
Others apply only to a specific window.
Window-specific settings are not automatically applied to new or derived
windows.
An application must apply these to each window, if the same behavior
is needed.
.\"
-.SS cbreak
+.SS cbreak/nocbreak
Normally, the tty driver buffers typed characters until a newline or carriage
return is typed.
The \fBcbreak\fR routine disables line buffering and
erase/kill character-processing (interrupt and flow control characters are
unaffected), making characters typed by the user immediately available to the
program.
The \fBnocbreak\fR routine returns the terminal to normal (cooked)
mode.
.PP
Initially the terminal may or may not be in \fBcbreak\fR mode, as the mode is
inherited; therefore, a program should call \fBcbreak\fR or \fBnocbreak\fR
explicitly.
Most interactive programs using \fBcurses\fR set the \fBcbreak\fR
mode.
Note that \fBcbreak\fR overrides \fBraw\fR.
[See \fBcurs_getch\fR(3X) for a
discussion of how these routines interact with \fBecho\fR and \fBnoecho\fR.]
.\"
.SS echo/noecho
.PP
The \fBecho\fR and \fBnoecho\fR routines control whether characters typed by
the user are echoed by \fBgetch\fR(3X) as they are typed.
Echoing by the tty
driver is always disabled, but initially \fBgetch\fR is in echo mode, so
characters typed are echoed.
Authors of most interactive programs prefer to do
their own echoing in a controlled area of the screen, or not to echo at all, so
they disable echoing by calling \fBnoecho\fR.
[See \fBcurs_getch\fR(3X) for a
discussion of how these routines interact with \fBcbreak\fR and
\fBnocbreak\fR.]
.\"
.SS halfdelay
.PP
The \fBhalfdelay\fR routine is used for half-delay mode, which is similar to
\fBcbreak\fR mode in that characters typed by the user are immediately
available to the program.
However, after blocking for \fItenths\fR tenths of
seconds, \fBERR\fP is returned if nothing has been typed.
The value of \fItenths\fR
must be a number between 1 and 255.
Use \fBnocbreak\fR to leave half-delay
mode.
.\"
.SS intrflush
.PP
If the \fBintrflush\fR option is enabled (\fIbf\fR is \fBTRUE\fR), and an
interrupt key is pressed on the keyboard (interrupt, break, quit), all output in
the tty driver queue will be flushed, giving the effect of faster response to
the interrupt, but causing \fBcurses\fR to have the wrong idea of what is on
the screen.
Disabling the option (\fIbf\fR is \fBFALSE\fR) prevents the
flush.
The default for the option is inherited from the tty driver settings.
The window argument is ignored.
.\"
.SS keypad
.PP
The \fBkeypad\fR option enables the keypad of the user's terminal.
If
enabled (\fIbf\fR is \fBTRUE\fR), the user can press a function key
(such as an arrow key) and \fBwgetch\fR(3X) returns a single value
representing the function key, as in \fBKEY_LEFT\fR.
If disabled
(\fIbf\fR is \fBFALSE\fR), \fBcurses\fR does not treat function keys
specially and the program has to interpret the escape sequences
itself.
If the keypad in the terminal can be turned on (made to
transmit) and off (made to work locally), turning on this option
causes the terminal keypad to be turned on when \fBwgetch\fR(3X) is
called.
The default value for keypad is \fBFALSE\fP.
.\"
.SS meta
.PP
Initially, whether the terminal returns 7 or 8 significant bits on
input depends on the control mode of the tty driver [see \fBtermios\fP(3)].
To force 8 bits to be returned, invoke \fBmeta\fR(\fIwin\fR,
\fBTRUE\fR); this is equivalent, under POSIX, to setting the CS8 flag
on the terminal.
To force 7 bits to be returned, invoke
\fBmeta\fR(\fIwin\fR, \fBFALSE\fR); this is equivalent, under POSIX,
to setting the CS7 flag on the terminal.
The window argument,
\fIwin\fR, is always ignored.
If the terminfo capabilities \fBsmm\fR
(meta_on) and \fBrmm\fR (meta_off) are defined for the terminal,
\fBsmm\fR is sent to the terminal when \fBmeta\fR(\fIwin\fR,
\fBTRUE\fR) is called and \fBrmm\fR is sent when \fBmeta\fR(\fIwin\fR,
\fBFALSE\fR) is called.
.\"
+.SS nl/nonl
+.PP
+The \fBnl\fR and \fBnonl\fR routines control whether the underlying display
+device translates the return key into newline on input.
+.\"
.SS nodelay
.PP
The \fBnodelay\fR option causes \fBgetch\fR to be a non-blocking call.
If no input is ready, \fBgetch\fR returns \fBERR\fR.
If disabled
(\fIbf\fR is \fBFALSE\fR), \fBgetch\fR waits until a key is pressed.
+.SS notimeout
.PP
-While interpreting an input escape sequence, \fBwgetch\fR(3X) sets a timer
+When interpreting an escape sequence, \fBwgetch\fR(3X) sets a timer
while waiting for the next character.
If \fBnotimeout(\fR\fIwin\fR,
\fBTRUE\fR) is called, then \fBwgetch\fR does not set a timer.
The
purpose of the timeout is to differentiate between sequences received
from a function key and those typed by a user.
.\"
.SS raw/noraw
.PP
The \fBraw\fR and \fBnoraw\fR routines place the terminal into or out of raw
mode.
Raw mode is similar to \fBcbreak\fR mode, in that characters typed are
immediately passed through to the user program.
The differences are that in
raw mode, the interrupt, quit, suspend, and flow control characters are all
passed through uninterpreted, instead of generating a signal.
The behavior of
the BREAK key depends on other bits in the tty driver that are not set by
\fBcurses\fR.
.\"
-.SS noqiflush
+.SS qiflush/noqiflush
.PP
When the \fBnoqiflush\fR routine is used, normal flush of input and
output queues associated with the \fBINTR\fR, \fBQUIT\fR and
\fBSUSP\fR characters will not be done [see \fBtermios\fP(3)].
When
\fBqiflush\fR is called, the queues will be flushed when these control
characters are read.
You may want to call \fBnoqiflush\fR in a signal
handler if you want output to continue as though the interrupt
had not occurred, after the handler exits.
.\"
.SS timeout/wtimeout
.PP
The \fBtimeout\fR and \fBwtimeout\fR routines set blocking or
non-blocking read for a given window.
If \fIdelay\fR is negative,
blocking read is used (i.e., waits indefinitely for
input).
If \fIdelay\fR is zero, then non-blocking read is used
(i.e., read returns \fBERR\fR if no input is waiting).
If
\fIdelay\fR is positive, then read blocks for \fIdelay\fR
milliseconds, and returns \fBERR\fR if there is still no input.
Hence, these routines provide the same functionality as \fBnodelay\fR,
plus the additional capability of being able to block for only
\fIdelay\fR milliseconds (where \fIdelay\fR is positive).
.\"
.SS typeahead
.PP
The \fBcurses\fR library does \*(``line-breakout optimization\*(''
by looking for typeahead periodically while updating the screen.
If input is found, and it is coming from a tty,
the current update is postponed until
\fBrefresh\fR(3X) or \fBdoupdate\fR is called again.
This allows faster response to commands typed in advance.
Normally, the input FILE
pointer passed to \fBnewterm\fR, or \fBstdin\fR in the case that
\fBinitscr\fR was used, will be used to do this typeahead checking.
The \fBtypeahead\fR routine specifies that the file descriptor
\fIfd\fR is to be used to check for typeahead instead.
If \fIfd\fR is
\-1, then no typeahead checking is done.
.\"
.SH RETURN VALUE
All routines that return an integer return \fBERR\fR upon failure and \fBOK\fP
(SVr4 specifies only \*(``an integer value other than \fBERR\fR\*('')
upon successful completion,
unless otherwise noted in the preceding routine descriptions.
.PP
X/Open does not define any error conditions.
In this implementation,
functions with a window parameter will return an error if it is null.
Any function will also return an error if the terminal was not initialized.
Also,
.RS
.TP 5
\fBhalfdelay\fP
returns an error
if its parameter is outside the range 1..255.
.RE
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
.PP
The ncurses library obeys the XPG4 standard and the historical practice of the
AT&T curses implementations, in that the echo bit is cleared when curses
initializes the terminal state.
BSD curses differed from this slightly; it
left the echo bit on at initialization, but the BSD \fBraw\fR call turned it
off as a side-effect.
-For best portability, set echo or noecho explicitly
+For best portability, set \fBecho \fPor \fBnoecho\fP explicitly
just after initialization, even if your program remains in cooked mode.
.PP
+The XSI Curses standard is ambiguous on the question of whether \fBraw\fR
+should disable the CRLF translations controlled by \fBnl\fR and \fBnonl\fR.
+BSD curses did turn off these translations; AT&T curses (at least as late as
+SVr1) did not.
+We chose to do so, on the theory that a programmer requesting
+raw input wants a clean (ideally 8-bit clean) connection that the operating
+system will not alter.
+.PP
When \fBkeypad\fP is first enabled,
ncurses loads the key-definitions for the current terminal description.
If the terminal description includes extended string capabilities,
e.g., from using the \fB\-x\fP option of \fB@TIC@\fP,
then ncurses also defines keys for the capabilities whose names
begin with \*(``k\*(''.
The corresponding keycodes are generated and (depending on previous
loads of terminal descriptions) may differ from one execution of a
program to the next.
The generated keycodes are recognized by the \fBkeyname\fP function
(which will then return a name beginning with \*(``k\*('' denoting the
terminfo capability name rather than \*(``K\*('', used for curses key-names).
On the other hand, an application can use \fBdefine_key\fP to establish
a specific keycode for a given string.
This makes it possible for an application to check for an extended
capability's presence with \fBtigetstr\fP,
and reassign the keycode to match its own needs.
.PP
Low-level applications can use \fBtigetstr\fP to obtain the definition
of any particular string capability.
Higher-level applications which use the curses \fBwgetch\fP
and similar functions to return keycodes rely upon the order in which
the strings are loaded.
If more than one key definition has the same string value,
then \fBwgetch\fP can return only one keycode.
Most curses implementations (including ncurses)
load key definitions in the order
defined by the array of string capability names.
The last key to be loaded determines the keycode which will be returned.
In ncurses, you may also have extended capabilities interpreted as
key definitions.
These are loaded after the predefined keys,
and if a capability's value is the same as a previously-loaded
key definition,
the later definition is the one used.
.SH NOTES
-Note that \fBecho\fR, \fBnoecho\fR, \fBhalfdelay\fR, \fBintrflush\fR,
-\fBmeta\fR, \fBnodelay\fR, \fBnotimeout\fR, \fBnoqiflush\fR,
-\fBqiflush\fR, \fBtimeout\fR, and \fBwtimeout\fR may be macros.
+Note that
+\fBecho\fR,
+\fBnoecho\fR,
+\fBhalfdelay\fR,
+\fBintrflush\fR,
+\fBmeta\fR,
+\fBnl\fR,
+\fBnonl\fR,
+\fBnodelay\fR,
+\fBnotimeout\fR,
+\fBnoqiflush\fR,
+\fBqiflush\fR,
+\fBtimeout\fR, and
+\fBwtimeout\fR may be macros.
.PP
The \fBnoraw\fR and \fBnocbreak\fR calls follow historical practice in that
they attempt to restore to normal (\*(``cooked\*('') mode
from raw and cbreak modes respectively.
Mixing raw/noraw and cbreak/nocbreak calls leads to tty driver
control states that are hard to predict or understand; it is not recommended.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_getch\fR(3X),
\fBcurs_initscr\fR(3X),
\fBcurs_util\fR(3X),
\fBdefine_key\fR(3X),
\fBtermios\fR(3)
diff --git a/contrib/ncurses/man/curs_ins_wch.3x b/contrib/ncurses/man/curs_ins_wch.3x
index 69731f6ad27b..9b19a2825c41 100644
--- a/contrib/ncurses/man/curs_ins_wch.3x
+++ b/contrib/ncurses/man/curs_ins_wch.3x
@@ -1,68 +1,68 @@
.\"***************************************************************************
.\" Copyright 2019,2020 Thomas E. Dickey *
.\" Copyright 2002-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_ins_wch.3x,v 1.8 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_ins_wch.3x,v 1.10 2020/10/18 00:22:21 tom Exp $
.TH curs_ins_wch 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.SH NAME
\fBins_wch\fR,
\fBmvins_wch\fR,
\fBmvwins_wch\fR,
\fBwins_wch\fR \- insert a complex character and rendition into a window
.SH SYNOPSIS
#include <curses.h>
.sp
\fBint ins_wch(const cchar_t *\fR\fIwch\fR\fB);\fR
.br
-\fBint wins_wch(WINDOW *\fR\fIwin, const cchar_t *\fR\fIwch\fR\fB);\fR
-.br
-\fBint mvins_wch(int \fR\fIy, int \fR\fIx, const cchar_t *\fR\fIwch\fR\fB);\fR
+\fBint wins_wch(WINDOW *\fR\fIwin\fP\fB, const cchar_t *\fR\fIwch\fR\fB);\fR
+.sp
+\fBint mvins_wch(int \fR\fIy\fP\fB, int \fR\fIx\fP\fB, const cchar_t *\fR\fIwch\fR\fB);\fR
.br
-\fBint mvwins_wch(WINDOW *\fR\fIwin, int \fR\fIy, int \fR\fIx, const cchar_t *\fR\fIwch\fR\fB);\fR
+\fBint mvwins_wch(WINDOW *\fR\fIwin\fP\fB, int \fR\fIy\fP\fB, int \fR\fIx\fP\fB, const cchar_t *\fR\fIwch\fR\fB);\fR
.SH DESCRIPTION
These routines, insert the complex character \fIwch\fR with rendition
before the character under the cursor.
All characters to the right of the cursor are moved one space to the right,
with the possibility of the rightmost character on the line being lost.
The insertion operation does not change the cursor position.
.SH RETURN VALUE
If successful, these functions return \fBOK\fP.
If not, they return \fBERR\fP.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH ERRORS
No errors are defined.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_insch\fR(3X).
diff --git a/contrib/ncurses/man/curs_ins_wstr.3x b/contrib/ncurses/man/curs_ins_wstr.3x
index 2a89ff1f5925..76c44fb65cfd 100644
--- a/contrib/ncurses/man/curs_ins_wstr.3x
+++ b/contrib/ncurses/man/curs_ins_wstr.3x
@@ -1,111 +1,111 @@
.\"***************************************************************************
.\" Copyright 2019,2020 Thomas E. Dickey *
.\" Copyright 2002-2012,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_ins_wstr.3x,v 1.10 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_ins_wstr.3x,v 1.11 2020/10/17 23:21:25 tom Exp $
.TH curs_ins_wstr 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.na
.hy 0
.SH NAME
\fBins_wstr\fR,
\fBins_nwstr\fR,
\fBwins_wstr\fR,
\fBwins_nwstr\fR,
\fBmvins_wstr\fR,
\fBmvins_nwstr\fR,
\fBmvwins_wstr\fR,
\fBmvwins_nwstr\fR \- insert a wide-character string into a curses window
.ad
.hy
.SH SYNOPSIS
.nf
\fB#include <curses.h>\fR
.sp
\fBint ins_wstr(const wchar_t *\fR\fIwstr);\fR
.br
\fBint ins_nwstr(const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint wins_wstr(WINDOW *\fR\fIwin\fR\fB, const wchar_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint wins_nwstr(WINDOW *\fR\fIwin\fR\fB, const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
-.br
+.sp
\fBint mvins_wstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint mvins_nwstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint mvwins_wstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint mvwins_nwstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.fi
.SH DESCRIPTION
These routines insert a \fBwchar_t\fR character string
(as many characters as will fit on the line)
before the character under the cursor.
All characters to the right of the cursor are shifted right,
with the possibility of the rightmost characters on the line being lost.
No wrapping is performed.
The cursor position does not change
(after moving to \fIy\fR, \fIx\fR, if specified).
The four routines with \fIn\fR as the last argument
insert a leading substring of at most \fIn\fR \fBwchar_t\fR characters.
If \fIn\fR is less than 1, the entire string is inserted.
.PP
If a character in \fIwstr\fR is a tab, newline, carriage return or
backspace, the cursor is moved appropriately within the window.
A newline also does a \fBclrtoeol\fR before moving.
Tabs are considered to be at every eighth column.
If a character in \fIwstr\fR is another control character,
it is drawn in the \fB^\fR\fIX\fR notation.
Calling \fBwin_wch\fR after adding a control character
(and moving to it, if necessary)
does not return the control character,
but instead returns a character in the ^-representation
of the control character.
.SH NOTES
Note that all but wins_nwstr may be macros.
.PP
If the first character in the string is a nonspacing character, these
functions will fail.
XSI does not define what will happen if a nonspacing character follows
a control character.
.SH RETURN VALUE
Upon successful completion, these functions return \fBOK\fP.
Otherwise, they return \fBERR\fP.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_insstr\fR(3X),
\fBcurs_in_wch\fR(3X),
\fBcurs_ins_wch\fR(3X).
diff --git a/contrib/ncurses/man/curs_insch.3x b/contrib/ncurses/man/curs_insch.3x
index 4642caa4e531..1b4e3ee4c52e 100644
--- a/contrib/ncurses/man/curs_insch.3x
+++ b/contrib/ncurses/man/curs_insch.3x
@@ -1,79 +1,79 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_insch.3x,v 1.17 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_insch.3x,v 1.19 2020/10/18 00:21:39 tom Exp $
.TH curs_insch 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.SH NAME
\fBinsch\fR,
\fBwinsch\fR,
\fBmvinsch\fR,
\fBmvwinsch\fR \- insert a character before cursor in a \fBcurses\fR window
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBint insch(chtype ch);\fR
+\fBint insch(chtype \fP\fIch\fP\fB);\fR
.br
-\fBint winsch(WINDOW *win, chtype ch);\fR
-.br
-\fBint mvinsch(int y, int x, chtype ch);\fR
+\fBint winsch(WINDOW *\fP\fIwin\fP\fB, chtype \fP\fIch\fP\fB);\fR
+.sp
+\fBint mvinsch(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, chtype \fP\fIch\fP\fB);\fR
.br
-\fBint mvwinsch(WINDOW *win, int y, int x, chtype ch);\fR
+\fBint mvwinsch(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, chtype \fP\fIch\fP\fB);\fR
.br
.SH DESCRIPTION
These routines insert the character \fIch\fR before the character under the
cursor.
All characters to the right of the cursor are moved one space to the
right, with the possibility of the rightmost character on the line being lost.
The insertion operation does not change the cursor position.
.SH RETURN VALUE
All routines that return an integer return \fBERR\fR upon failure and \fBOK\fP
(SVr4 specifies only "an integer value other than \fBERR\fR")
upon successful completion,
unless otherwise noted in the preceding routine descriptions.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH NOTES
These routines do not necessarily imply use of a hardware insert character
feature.
.PP
Note that \fBinsch\fR, \fBmvinsch\fR, and \fBmvwinsch\fR may be macros.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
.SH SEE ALSO
\fBcurses\fR(3X).
.PP
Comparable functions in the wide-character (ncursesw) library are
described in
\fBcurs_ins_wch\fR(3X).
diff --git a/contrib/ncurses/man/curs_insstr.3x b/contrib/ncurses/man/curs_insstr.3x
index b3147ed6151e..4d5f123e928b 100644
--- a/contrib/ncurses/man/curs_insstr.3x
+++ b/contrib/ncurses/man/curs_insstr.3x
@@ -1,105 +1,105 @@
.\"***************************************************************************
.\" Copyright 2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_insstr.3x,v 1.24 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_insstr.3x,v 1.26 2020/10/18 00:20:36 tom Exp $
.TH curs_insstr 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.SH NAME
\fBinsstr\fR,
\fBinsnstr\fR,
\fBwinsstr\fR,
\fBwinsnstr\fR,
\fBmvinsstr\fR,
\fBmvinsnstr\fR,
\fBmvwinsstr\fR,
\fBmvwinsnstr\fR \- insert string before cursor in a \fBcurses\fR window
.SH SYNOPSIS
\fB#include <curses.h>\fR
.br
-\fBint insstr(const char *str);\fR
+\fBint insstr(const char *\fP\fIstr\fP\fB);\fR
.br
-\fBint insnstr(const char *str, int n);\fR
+\fBint insnstr(const char *\fP\fIstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint winsstr(WINDOW *win, const char *str);\fR
+\fBint winsstr(WINDOW *\fP\fIwin\fP\fB, const char *\fP\fIstr\fP\fB);\fR
.br
-\fBint winsnstr(WINDOW *win, const char *str, int n);\fR
+\fBint winsnstr(WINDOW *\fP\fIwin\fP\fB, const char *\fP\fIstr\fP\fB, int \fP\fIn\fP\fB);\fR
+.sp
+\fBint mvinsstr(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const char *\fP\fIstr\fP\fB);\fR
.br
-\fBint mvinsstr(int y, int x, const char *str);\fR
+\fBint mvinsnstr(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const char *\fP\fIstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint mvinsnstr(int y, int x, const char *str, int n);\fR
+\fBint mvwinsstr(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const char *\fP\fIstr\fP\fB);\fR
.br
-\fBint mvwinsstr(WINDOW *win, int y, int x, const char *str);\fR
-.br
-\fBint mvwinsnstr(WINDOW *win, int y, int x, const char *str, int n);\fR
+\fBint mvwinsnstr(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const char *\fP\fIstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
.SH DESCRIPTION
These routines insert a character string
(as many characters as will fit on the line)
before the character under the cursor.
All characters to the right of the cursor are shifted right
with the possibility of the rightmost characters on the line being lost.
The cursor position does not change
(after moving to \fIy\fR, \fIx\fR, if specified).
The functions with \fIn\fR as the last argument
insert a leading substring of at most \fIn\fR characters.
If \fIn\fR<=0, then the entire string is inserted.
.PP
Special characters are handled as in \fBaddch\fP.
.SH RETURN VALUE
All routines that return an integer return \fBERR\fR upon failure and \fBOK\fP
(SVr4 specifies only "an integer value other than \fBERR\fR")
upon successful completion,
unless otherwise noted in the preceding routine descriptions.
.PP
X/Open defines no error conditions.
In this implementation,
if the window parameter is null or the str parameter is null,
an error is returned.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH NOTES
Note that all but \fBwinsnstr\fR may be macros.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4, which adds
const qualifiers to the arguments.
.LP
The Single Unix Specification, Version 2 states that
\fBinsnstr\fP and \fBwinsnstr\fP perform wrapping.
This is probably an error, since it makes this group of functions inconsistent.
Also, no implementation of curses documents this inconsistency.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_util\fR(3X),
\fBcurs_clear\fR(3X),
\fBcurs_inch\fR(3X).
diff --git a/contrib/ncurses/man/curs_instr.3x b/contrib/ncurses/man/curs_instr.3x
index 442310602187..7cc4b4bc1a1c 100644
--- a/contrib/ncurses/man/curs_instr.3x
+++ b/contrib/ncurses/man/curs_instr.3x
@@ -1,99 +1,99 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_instr.3x,v 1.20 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_instr.3x,v 1.22 2020/10/18 00:18:27 tom Exp $
.TH curs_instr 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fBinstr\fR,
\fBinnstr\fR,
\fBwinstr\fR,
\fBwinnstr\fR,
\fBmvinstr\fR,
\fBmvinnstr\fR,
\fBmvwinstr\fR,
\fBmvwinnstr\fR \- get a string of characters from a \fBcurses\fR window
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBint instr(char *str);\fR
+\fBint instr(char *\fP\fIstr\fP\fB);\fR
.br
-\fBint innstr(char *str, int n);\fR
+\fBint innstr(char *\fP\fIstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint winstr(WINDOW *win, char *str);\fR
+\fBint winstr(WINDOW *\fP\fIwin\fP\fB, char *\fP\fIstr\fP\fB);\fR
.br
-\fBint winnstr(WINDOW *win, char *str, int n);\fR
-.br
-\fBint mvinstr(int y, int x, char *str);\fR
+\fBint winnstr(WINDOW *\fP\fIwin\fP\fB, char *\fP\fIstr\fP\fB, int \fP\fIn\fP\fB);\fR
+.sp
+\fBint mvinstr(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, char *\fP\fIstr\fP\fB);\fR
.br
-\fBint mvinnstr(int y, int x, char *str, int n);\fR
+\fBint mvinnstr(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, char *\fP\fIstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
-\fBint mvwinstr(WINDOW *win, int y, int x, char *str);\fR
+\fBint mvwinstr(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, char *\fP\fIstr\fP\fB);\fR
.br
-\fBint mvwinnstr(WINDOW *win, int y, int x, char *str, int n);\fR
+\fBint mvwinnstr(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, char *\fP\fIstr\fP\fB, int \fP\fIn\fP\fB);\fR
.br
.SH DESCRIPTION
These routines return a string of characters in \fIstr\fR, extracted starting
at the current cursor position in the named window.
Attributes are stripped from the characters.
The four
functions with \fIn\fR as the last argument return a leading substring at most
\fIn\fR characters long (exclusive of the trailing NUL).
.SH RETURN VALUE
All of the functions return \fBERR\fR upon failure,
or the number of characters actually read into the string.
.PP
X/Open Curses defines no error conditions.
In this implementation:
.bP
If the \fIwin\fP parameter is null, an error is returned,
.bP
If the \fIchstr\fP parameter is null, an error is returned,
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH NOTES
Note that all routines except \fBwinnstr\fR may be macros.
.SH PORTABILITY
SVr4 does not
document whether a length limit includes or excludes the trailing NUL.
.PP
The ncurses library extends the XSI description by allowing a negative
value for \fIn\fR.
In this case, the functions return the string ending at the right margin.
.SH SEE ALSO
\fBcurses\fR(3X).
diff --git a/contrib/ncurses/man/curs_inwstr.3x b/contrib/ncurses/man/curs_inwstr.3x
index 1b44a645e7a3..b3899c4b94f2 100644
--- a/contrib/ncurses/man/curs_inwstr.3x
+++ b/contrib/ncurses/man/curs_inwstr.3x
@@ -1,106 +1,106 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 2002-2012,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_inwstr.3x,v 1.13 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_inwstr.3x,v 1.14 2020/10/17 23:22:11 tom Exp $
.TH curs_inwstr 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.SH NAME
\fBinwstr\fR,
\fBinnwstr\fR,
\fBwinwstr\fR,
\fBwinnwstr\fR,
\fBmvinwstr\fR,
\fBmvinnwstr\fR,
\fBmvwinwstr\fR,
\fBmvwinnwstr\fR \- get a string of \fBwchar_t\fR characters from a curses window
.SH SYNOPSIS
.nf
\fB#include <curses.h> \fR
.sp
\fBint inwstr(\fR\fBwchar_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint innwstr(\fR\fBwchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint winwstr(\fR\fBWINDOW *\fR\fIwin\fR\fB, wchar_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint winnwstr(\fR\fBWINDOW *\fR\fIwin\fR\fB, wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
-.br
+.sp
\fBint mvinwstr(\fR\fBint \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wchar_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint mvinnwstr(\fR\fBint \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint mvwinwstr(\fR\fBWINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wchar_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint mvwinnwstr(\fR\fBWINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.fi
.SH DESCRIPTION
.PP
These routines return a string of \fBwchar_t\fR wide characters in \fIwstr\fR,
extracted starting at the current cursor position in the named window.
.PP
The four functions with \fIn\fR as the last argument return
a leading substring at most \fIn\fR characters long
(exclusive of the trailing NUL).
Transfer stops at the end of the current line, or when \fIn\fR characters have
been stored at the location referenced by \fIwstr\fR.
.PP
If the size \fIn\fR is not large enough to store a complete complex character,
an error is generated.
.SH NOTES
.PP
All routines except
\fBwinnwstr\fR
may be macros.
.PP
Each cell in the window holds a complex character (i.e., base-
and combining-characters) together with attributes and color.
These functions store only the wide characters,
ignoring attributes and color.
Use \fBin_wchstr\fP to return the complex characters from a window.
.SH RETURN VALUE
All routines return
\fBERR\fR
upon failure.
Upon
successful completion, the *\fBinwstr\fR
routines return
\fBOK\fR, and the *\fBinnwstr\fR
routines return the
number of characters read into the string.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_instr\fR(3X),
\fBcurs_in_wchstr\fR(3X)
diff --git a/contrib/ncurses/man/curs_kernel.3x b/contrib/ncurses/man/curs_kernel.3x
index 2d89d1ac6f89..a4e6c808b08e 100644
--- a/contrib/ncurses/man/curs_kernel.3x
+++ b/contrib/ncurses/man/curs_kernel.3x
@@ -1,231 +1,231 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_kernel.3x,v 1.28 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_kernel.3x,v 1.29 2020/10/17 23:22:35 tom Exp $
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.TH curs_kernel 3X ""
.na
.hy 0
.SH NAME
\fBdef_prog_mode\fR,
\fBdef_shell_mode\fR,
\fBreset_prog_mode\fR,
\fBreset_shell_mode\fR,
\fBresetty\fR,
\fBsavetty\fR,
\fBgetsyx\fR,
\fBsetsyx\fR,
\fBripoffline\fR,
\fBcurs_set\fR,
\fBnapms\fR \- low-level \fBcurses\fR routines
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBint def_prog_mode(void);\fR
.br
\fBint def_shell_mode(void);\fR
-.br
+.sp
\fBint reset_prog_mode(void);\fR
.br
\fBint reset_shell_mode(void);\fR
-.br
+.sp
\fBint resetty(void);\fR
.br
\fBint savetty(void);\fR
-.br
+.sp
\fBvoid getsyx(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
.br
\fBvoid setsyx(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
-.br
+.sp
\fBint ripoffline(int \fP\fIline\fP\fB, int (*\fP\fIinit\fP\fB)(WINDOW *, int));\fR
.br
\fBint curs_set(int \fP\fIvisibility\fP\fB);\fR
.br
\fBint napms(int \fP\fIms\fP\fB);\fR
.br
.SH DESCRIPTION
The following routines give low-level access
to various \fBcurses\fR capabilities.
These routines typically are used inside library routines.
.SS def_prog_mode, def_shell_mode
.PP
The \fBdef_prog_mode\fR and \fBdef_shell_mode\fR routines save the
current terminal modes as the \*(``program\*('' (in \fBcurses\fR) or \*(``shell\*(''
(not in \fBcurses\fR) state for use by the \fBreset_prog_mode\fR and
\fBreset_shell_mode\fR routines.
This is done automatically by \fBinitscr\fR.
There is one such save area for each screen context
allocated by \fBnewterm\fR.
.SS reset_prog_mode, reset_shell_mode
.PP
The \fBreset_prog_mode\fR and \fBreset_shell_mode\fR routines restore
the terminal to \*(``program\*('' (in \fBcurses\fR) or \*(``shell\*('' (out of
\fBcurses\fR) state.
These are done automatically by \fBendwin\fR(3X) and,
after an \fBendwin\fR, by \fBdoupdate\fR,
so they normally are not called.
.SS resetty, savetty
.PP
The \fBresetty\fR and \fBsavetty\fR routines save and restore the
state of the terminal modes.
\fBsavetty\fR saves the current state in
a buffer and \fBresetty\fR restores the state to what it was at the
last call to \fBsavetty\fR.
.SS getsyx
.PP
The \fBgetsyx\fR routine returns the current coordinates
of the \fIvirtual screen\fP cursor in \fIy\fR and \fIx\fR.
If \fBleaveok\fR is currently \fBTRUE\fR, then
\fB\-1\fR,\fB\-1\fR is returned.
If lines have been removed from the top of the
screen, using \fBripoffline\fR, \fIy\fR and \fIx\fR include these lines;
therefore, \fIy\fR and \fIx\fR should be used only as arguments for
\fBsetsyx\fR.
.PP
Few applications will use this feature,
most use \fBgetyx\fP instead.
.SS setsyx
.PP
The \fBsetsyx\fR routine sets
the \fIvirtual screen\fP cursor to \fIy\fR, \fIx\fR.
If \fIy\fR and \fIx\fR are both \fB\-1\fR, then
\fBleaveok\fR is set.
The two routines \fBgetsyx\fR and \fBsetsyx\fR
are designed to be used by a library routine, which manipulates
\fBcurses\fR windows but does not want to change the current position
of the program's cursor.
The library routine would call \fBgetsyx\fR
at the beginning, do its manipulation of its own windows, do a
\fBwnoutrefresh\fR on its windows, call \fBsetsyx\fR, and then call
\fBdoupdate\fR.
.PP
Few applications will use this feature,
most use \fBwmove\fP instead.
.SS ripoffline
.PP
The \fBripoffline\fR routine provides access to the same facility that
\fBslk_init\fR [see \fBcurs_slk\fR(3X)] uses to reduce the size of the
screen.
\fBripoffline\fR must be called before \fBinitscr\fR or
\fBnewterm\fR is called, to prepare these initial actions:
.bP
If \fIline\fR is positive, a line is removed from the top of \fBstdscr\fR.
.bP
if \fIline\fR is negative, a line is removed from the bottom.
.PP
When the resulting initialization is done inside \fBinitscr\fR, the
routine \fBinit\fR (supplied by the user) is called with two
arguments:
.bP
a window pointer to the one-line window that has been
allocated and
.bP
an integer with the number of columns in the window.
.PP
Inside this initialization routine, the integer variables \fBLINES\fR
and \fBCOLS\fR (defined in \fB<curses.h>\fR) are not guaranteed to be
accurate and \fBwrefresh\fR or \fBdoupdate\fR must not be called.
It is allowable to call \fBwnoutrefresh\fR during the initialization routine.
.PP
\fBripoffline\fR can be called up to five times before calling \fBinitscr\fR or
\fBnewterm\fR.
.SS curs_set
.PP
The \fBcurs_set\fR routine sets the cursor state to invisible,
normal, or very visible for \fBvisibility\fR equal to \fB0\fR,
\fB1\fR, or \fB2\fR respectively.
If the terminal supports the \fIvisibility\fR requested,
the previous \fIcursor\fR state is returned;
otherwise, \fBERR\fR is returned.
.SS napms
.PP
The \fBnapms\fR routine is used to sleep for \fIms\fR milliseconds.
.SH RETURN VALUE
Except for \fBcurs_set\fR, these routines always return \fBOK\fR.
.PP
\fBcurs_set\fR
returns the previous cursor state, or \fBERR\fR if the
requested \fIvisibility\fR is not supported.
.PP
X/Open defines no error conditions.
In this implementation
.TP 5
.na
.hy 0
\fBdef_prog_mode\fR, \fBdef_shell_mode\fR, \fBreset_prog_mode\fR, \fBreset_shell_mode\fR
.hy
.ad
return an error
if the terminal was not initialized, or
if the I/O call to obtain the terminal settings fails.
.TP 5
\fBripoffline\fP
returns an error if the maximum number of ripped-off lines
exceeds the maximum (NRIPS = 5).
.SH NOTES
Note that \fBgetsyx\fR is a macro, so \fB&\fR is not necessary before
the variables \fIy\fR and \fIx\fR.
.PP
Older SVr4 man pages warn that the return value
of \fBcurs_set\fR \*(``is currently incorrect\*(''.
This implementation gets it right, but it may be unwise to count
on the correctness of the return value anywhere else.
.PP
Both ncurses and SVr4 will call \fBcurs_set\fR in \fBendwin\fR
if \fBcurs_set\fR
has been called to make the cursor other than normal, i.e., either
invisible or very visible.
There is no way for ncurses to determine the initial cursor state to
restore that.
.SH PORTABILITY
The \fIvirtual screen\fP functions \fBsetsyx\fR and \fBgetsyx\fR
are not described in the XSI Curses standard, Issue 4.
All other functions are as described in XSI Curses.
.PP
The SVr4 documentation describes \fBsetsyx\fR and \fBgetsyx\fR
as having return type int.
This is misleading, as they are macros with no documented semantics
for the return value.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_initscr\fR(3X),
\fBcurs_outopts\fR(3X),
\fBcurs_refresh\fR(3X),
\fBcurs_scr_dump\fR(3X),
\fBcurs_slk\fR(3X),
\fBcurs_variables\fR(3X).
diff --git a/contrib/ncurses/man/curs_legacy.3x b/contrib/ncurses/man/curs_legacy.3x
index b73a6be197b4..c2eb86b8834c 100644
--- a/contrib/ncurses/man/curs_legacy.3x
+++ b/contrib/ncurses/man/curs_legacy.3x
@@ -1,108 +1,108 @@
.\"***************************************************************************
.\" Copyright 2019,2020 Thomas E. Dickey *
.\" Copyright 2007-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_legacy.3x,v 1.10 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_legacy.3x,v 1.12 2020/10/18 00:16:04 tom Exp $
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.TH curs_legacy 3X ""
.SH NAME
curs_legacy \- get \fBcurses\fP cursor and window coordinates, attributes
.SH SYNOPSIS
\fB#include <curses.h>\fP
.sp
-\fBint getattrs(const WINDOW *win);\fP
-.br
-\fBint getbegx(const WINDOW *win);\fP
-.br
-\fBint getbegy(const WINDOW *win);\fP
-.br
-\fBint getcurx(const WINDOW *win);\fP
-.br
-\fBint getcury(const WINDOW *win);\fP
+\fBint getattrs(const WINDOW *\fP\fIwin\fP\fB);\fP
+.sp
+\fBint getbegx(const WINDOW *\fP\fIwin\fP\fB);\fP
.br
-\fBint getmaxx(const WINDOW *win);\fP
+\fBint getbegy(const WINDOW *\fP\fIwin\fP\fB);\fP
+.sp
+\fBint getcurx(const WINDOW *\fP\fIwin\fP\fB);\fP
.br
-\fBint getmaxy(const WINDOW *win);\fP
+\fBint getcury(const WINDOW *\fP\fIwin\fP\fB);\fP
+.sp
+\fBint getmaxx(const WINDOW *\fP\fIwin\fP\fB);\fP
.br
-\fBint getparx(const WINDOW *win);\fP
+\fBint getmaxy(const WINDOW *\fP\fIwin\fP\fB);\fP
+.sp
+\fBint getparx(const WINDOW *\fP\fIwin\fP\fB);\fP
.br
-\fBint getpary(const WINDOW *win);\fP
+\fBint getpary(const WINDOW *\fP\fIwin\fP\fB);\fP
.br
.SH DESCRIPTION
These legacy functions are simpler to use than the X/Open Curses functions:
.bP
The \fBgetattrs\fP function returns the same attribute data as \fBwattr_get\fP.
.IP
However, \fBgetattrs\fP returns an integer (actually a \fBchtype\fP),
while \fBwattr_get\fP returns the current color pair in a separate parameter.
In the wide-character library configuration,
color pairs may not fit into a \fBchtype\fP,
so \fBwattr_get\fP is the only way to obtain the color information.
.IP
Because \fBgetattrs\fP returns the attributes in a single parameter,
it would not be possible for an application to distinguish that from
\fBERR\fP (a \fI-1\fP).
If the window parameter is null, \fBgetattrs\fP returns \fBA_NORMAL\fP (zero).
.bP
The \fBgetbegy\fP and \fBgetbegx\fP functions return the same
data as \fBgetbegyx\fP.
.bP
The \fBgetcury\fP and \fBgetcurx\fP functions return the same
data as \fBgetyx\fP.
.bP
The \fBgetmaxy\fP and \fBgetmaxx\fP functions return the same
data as \fBgetmaxyx\fP.
.bP
The \fBgetpary\fP and \fBgetparx\fP functions return the same
data as \fBgetparyx\fP.
.SH RETURN VALUE
Except as noted,
these functions return an integer,
or \fBERR\fP if the window parameter is null.
.SH NOTES
All of these interfaces are provided as macros and functions.
The macros are suppressed (and only the functions provided)
when \fBNCURSES_OPAQUE\fP is defined.
The standard forms such as \fBgetyx\fP must be implemented as macros,
and (in this implementation) are defined in terms of the functions
described here,
to avoid reliance on internal details of the WINDOW structure.
.SH PORTABILITY
These functions were supported on Version 7, BSD or System V implementations.
None of those implementations checked the window parameter.
.PP
The \fBgetattrs\fP function and macro are defined to return a (signed) integer
for compatibility with those implementations
although an unsigned type would have been more appropriate.
.SH SEE ALSO
\fBcurses\fP(3X),
\fBcurs_getyx\fP(3X),
\fBcurs_opaque\fP(3X)
diff --git a/contrib/ncurses/man/curs_memleaks.3x b/contrib/ncurses/man/curs_memleaks.3x
index 06a95edfe3e4..59bd3e851f92 100644
--- a/contrib/ncurses/man/curs_memleaks.3x
+++ b/contrib/ncurses/man/curs_memleaks.3x
@@ -1,105 +1,106 @@
.\"***************************************************************************
-.\" Copyright 2019,2020 Thomas E. Dickey *
+.\" Copyright 2019-2020,2021 Thomas E. Dickey *
.\" Copyright 2008-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_memleaks.3x,v 1.8 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_memleaks.3x,v 1.11 2021/01/02 23:47:51 tom Exp $
.TH curs_memleaks 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.na
.hy 0
.SH NAME
-\fB_nc_freeall\fP,
-\fB_nc_free_and_exit\fP,
-\fB_nc_free_tinfo\fP \- \fBcurses\fR memory-leak checking
+\fBexit_curses\fP,
+\fBexit_terminfo\fP \- \fBcurses\fR memory-leak checking
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
+.br
+\fBvoid exit_curses(int \fP\fIcode\fP\fB);\fR
.sp
-\fBvoid exit_curses(int);\fR
+\fB#include <term.h>\fR
.br
-\fBvoid exit_terminfo(int);\fR
+\fBvoid exit_terminfo(int \fP\fIcode\fP\fB);\fR
.sp
-/* deprecated */
+/* deprecated (intentionally not declared in curses.h or term.h) */
.br
\fBvoid _nc_freeall(void);\fR
.br
-\fBvoid _nc_free_and_exit(int);\fR
+\fBvoid _nc_free_and_exit(int \fP\fIcode\fP\fB);\fR
.br
-\fBvoid _nc_free_tinfo(int);\fR
+\fBvoid _nc_free_tinfo(int \fP\fIcode\fP\fB);\fR
.SH DESCRIPTION
These functions are used to simplify analysis of memory leaks in the ncurses
library.
.PP
Any implementation of curses must not free the memory associated with
-a screen, since (even after calling \fBendwin\fP), it must be available
+a screen, since (even after calling \fBendwin\fP(3X)), it must be available
for use in the next call to \fBrefresh\fP(3X).
There are also chunks of memory held for performance reasons.
That makes it hard to analyze curses applications for memory leaks.
When using the specially configured debugging version of the ncurses library,
applications can call functions which free those chunks of memory,
simplifying the process of memory-leak checking.
.PP
Some of the functions are named with a \*(``_nc_\*('' prefix
because they are not intended for use in the non-debugging library:
.TP 5
\fB_nc_freeall\fP
This frees (almost) all of the memory allocated by ncurses.
.TP 5
\fB_nc_free_and_exit\fP
This frees the memory allocated by ncurses (like \fB_nc_freeall\fP),
and exits the program.
It is preferred over \fB_nc_freeall\fP since some of that memory
may be required to keep the application running.
Simply exiting (with the given exit-code) is safer.
.TP 5
\fB_nc_free_tinfo\fP
Use this function if only the low-level terminfo functions (and
corresponding library) are used.
Like \fB_nc_free_and_exit\fP, it exits the program after freeing memory.
.PP
The functions prefixed \*(``_nc\*('' are normally not available;
they must be configured into the library
at build time using the \fB\-\-disable-leaks\fP option.
That compiles-in code that frees memory that normally would not be freed.
.PP
The \fBexit_curses\fP and \fBexit_terminfo\fP functions
call \fB_nc_free_and_exit\fP and \fB_nc_free_tinfo\fP if
the library is configured to support memory-leak checking.
If the library is not configured to support memory-leak checking,
they simply call \fBexit\fP.
.SH RETURN VALUE
These functions do not return a value.
.SH PORTABILITY
These functions are not part of X/Open Curses;
nor do other implementations of curses provide a similar feature.
.SH SEE ALSO
\fBcurses\fR(3X).
diff --git a/contrib/ncurses/man/curs_mouse.3x b/contrib/ncurses/man/curs_mouse.3x
index 775bc33f01db..c18be3fa3378 100644
--- a/contrib/ncurses/man/curs_mouse.3x
+++ b/contrib/ncurses/man/curs_mouse.3x
@@ -1,417 +1,416 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_mouse.3x,v 1.52 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_mouse.3x,v 1.53 2020/10/17 23:25:08 tom Exp $
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de NS
.ie n .sp
.el .sp .5
.ie n .in +4
.el .in +2
.nf
.ft C \" Courier
..
.de NE
.fi
.ft R
.ie n .in -4
.el .in -2
..
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.TH curs_mouse 3X ""
.na
.hy 0
.SH NAME
\fBhas_mouse\fR,
\fBgetmouse\fR, \fBungetmouse\fR,
\fBmousemask\fR, \fBwenclose\fR,
\fBmouse_trafo\fR, \fBwmouse_trafo\fR,
\fBmouseinterval\fR \- mouse interface through curses
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.PP
\fBtypedef unsigned long mmask_t;\fR
.PP
.nf
\fBtypedef struct {\fR
\fB short id; \fR\fI/* ID to distinguish multiple devices */\fR
\fB int x, y, z; \fR\fI/* event coordinates */\fR
\fB mmask_t bstate; \fR\fI/* button state bits */\fR
\fB} MEVENT;\fR
.fi
.PP
\fBbool has_mouse(void);\fR
-.br
+.sp
\fBint getmouse(MEVENT *\fP\fIevent\fP\fB);\fR
.br
\fBint ungetmouse(MEVENT *\fP\fIevent\fP\fB);\fR
-.br
+.sp
\fBmmask_t mousemask(mmask_t \fP\fInewmask\fP\fB, mmask_t *\fP\fIoldmask\fP\fB);\fR
-.br
+.sp
\fBbool wenclose(const WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
-.br
+.sp
\fBbool mouse_trafo(int* \fP\fIpY\fP\fB, int* \fP\fIpX\fP\fB, bool \fP\fIto_screen\fP\fB);\fR
.br
-\fBbool wmouse_trafo(const WINDOW* \fP\fIwin\fP\fB, int* \fP\fIpY\fP\fB, int* \fP\fIpX\fP\fB,\fR
-.br
- \fBbool \fP\fIto_screen\fP\fB);\fR
-.br
+\fBbool wmouse_trafo(const WINDOW* \fP\fIwin\fP\fB,\fR
+ \fBint* \fP\fIpY\fP\fB, int* \fP\fIpX\fP\fB, bool \fP\fIto_screen\fP\fB);\fR
+.sp
\fBint mouseinterval(int \fP\fIerval\fP\fB);\fR
.br
.SH DESCRIPTION
These functions provide an interface to mouse events from
\fBncurses\fR(3X).
Mouse events are represented by \fBKEY_MOUSE\fR
pseudo-key values in the \fBwgetch\fR(3X) input stream.
.SS mousemask
.PP
To make mouse events visible, use the \fBmousemask\fR function.
This will set
the mouse events to be reported.
By default, no mouse events are reported.
The function will return a mask to indicate which of the specified mouse events
can be reported; on complete failure it returns 0.
If oldmask is non-NULL,
this function fills the indicated location with the previous value of the given
window's mouse event mask.
.PP
As a side effect, setting a zero mousemask may turn off the mouse pointer;
setting a nonzero mask may turn it on.
Whether this happens is device-dependent.
.SS Mouse events
.PP
Here are the mouse event type masks which may be defined:
.PP
.TS
l l
_ _
l l.
\fIName\fR \fIDescription\fR
BUTTON1_PRESSED mouse button 1 down
BUTTON1_RELEASED mouse button 1 up
BUTTON1_CLICKED mouse button 1 clicked
BUTTON1_DOUBLE_CLICKED mouse button 1 double clicked
BUTTON1_TRIPLE_CLICKED mouse button 1 triple clicked
_
BUTTON2_PRESSED mouse button 2 down
BUTTON2_RELEASED mouse button 2 up
BUTTON2_CLICKED mouse button 2 clicked
BUTTON2_DOUBLE_CLICKED mouse button 2 double clicked
BUTTON2_TRIPLE_CLICKED mouse button 2 triple clicked
_
BUTTON3_PRESSED mouse button 3 down
BUTTON3_RELEASED mouse button 3 up
BUTTON3_CLICKED mouse button 3 clicked
BUTTON3_DOUBLE_CLICKED mouse button 3 double clicked
BUTTON3_TRIPLE_CLICKED mouse button 3 triple clicked
_
BUTTON4_PRESSED mouse button 4 down
BUTTON4_RELEASED mouse button 4 up
BUTTON4_CLICKED mouse button 4 clicked
BUTTON4_DOUBLE_CLICKED mouse button 4 double clicked
BUTTON4_TRIPLE_CLICKED mouse button 4 triple clicked
_
BUTTON5_PRESSED mouse button 5 down
BUTTON5_RELEASED mouse button 5 up
BUTTON5_CLICKED mouse button 5 clicked
BUTTON5_DOUBLE_CLICKED mouse button 5 double clicked
BUTTON5_TRIPLE_CLICKED mouse button 5 triple clicked
_
BUTTON_SHIFT shift was down during button state change
BUTTON_CTRL control was down during button state change
BUTTON_ALT alt was down during button state change
ALL_MOUSE_EVENTS report all button state changes
REPORT_MOUSE_POSITION report mouse movement
_
.TE
.SS getmouse
.PP
Once a class of mouse events has been made visible in a window,
calling the \fBwgetch\fR function on that window may return
\fBKEY_MOUSE\fR as an indicator that a mouse event has been queued.
To read the event data and pop the event off the queue, call
\fBgetmouse\fR.
This function will return \fBOK\fR if a mouse event
is actually visible in the given window, \fBERR\fR otherwise.
When \fBgetmouse\fR returns \fBOK\fR, the data deposited as y and
x in the event structure coordinates will be screen-relative character-cell
coordinates.
The returned state mask will have exactly one bit set to
indicate the event type.
The corresponding data in the queue is marked invalid.
A subsequent call to \fBgetmouse\fP will retrieve the next older
item from the queue.
.SS ungetmouse
.PP
The \fBungetmouse\fR function behaves analogously to \fBungetch\fR.
It pushes
a \fBKEY_MOUSE\fR event onto the input queue, and associates with that event
the given state data and screen-relative character-cell coordinates.
.SS wenclose
.PP
The \fBwenclose\fR function tests whether a given pair of screen-relative
character-cell coordinates is enclosed by a given window, returning \fBTRUE\fP
if it is and \fBFALSE\fP otherwise.
It is useful for determining what subset of
the screen windows enclose the location of a mouse event.
.SS wmouse_trafo
.PP
The \fBwmouse_trafo\fR function transforms a given pair of coordinates
from stdscr-relative coordinates
to coordinates relative to the given window or vice versa.
The resulting stdscr-relative coordinates are not always identical
to window-relative coordinates due to the mechanism to reserve lines on top
or bottom of the screen for other purposes
(see the \fBripoffline\fP and \fBslk_init\fR(3X) calls, for example).
.bP
If the parameter \fBto_screen\fR is \fBTRUE\fR, the pointers
\fBpY, pX\fR must reference the coordinates of a location
inside the window \fBwin\fR.
They are converted to window-relative coordinates and returned
through the pointers.
If the conversion was successful, the function returns \fBTRUE\fR.
.bP
If one of the parameters was NULL or the location is
not inside the window, \fBFALSE\fR is returned.
.bP
If \fBto_screen\fR is
\fBFALSE\fR, the pointers \fBpY, pX\fR must reference window-relative
coordinates.
They are converted to stdscr-relative coordinates if the
window \fBwin\fR encloses this point.
In this case the function returns \fBTRUE\fR.
.bP
If one of the parameters is NULL or the point is not inside the
window, \fBFALSE\fR is returned.
The referenced coordinates
are only replaced by the converted coordinates if the transformation was
successful.
.SS mouse_trafo
.PP
The \fBmouse_trafo\fR function performs the same translation
as \fBwmouse_trafo\fR,
using stdscr for \fBwin\fR.
.SS mouseinterval
.PP
The \fBmouseinterval\fR function sets the maximum time (in thousands of a
second) that can elapse between press and release events for them to
be recognized as a click.
Use \fBmouseinterval(0)\fR to disable click resolution.
This function returns the previous interval value.
Use \fBmouseinterval(\-1)\fR to obtain the interval without altering it.
The default is one sixth of a second.
.SS has_mouse
.PP
The \fBhas_mouse\fP function returns \fBTRUE\fP if the mouse driver has been
successfully initialized.
.PP
Note that mouse events will be ignored when input is in cooked mode, and will
cause an error beep when cooked mode is being simulated in a window by a
function such as \fBgetstr\fR that expects a linefeed for input-loop
termination.
.SH RETURN VALUE
\fBgetmouse\fR and \fBungetmouse\fR
return the integer \fBERR\fR upon failure or \fBOK\fR
upon successful completion:
.RS 3
.TP 5
\fBgetmouse\fP
returns an error.
.bP
If no mouse driver was initialized, or
if the mask parameter is zero,
.bP
It also returns an error if no more events remain in the queue.
.TP 5
\fBungetmouse\fP
returns an error if the FIFO is full.
.RE
.PP
\fBmousemask\fR
returns the mask of reportable events.
.PP
\fBmouseinterval\fR
returns the previous interval value, unless
the terminal was not initialized.
In that case, it returns the maximum interval value (166).
.PP
\fBwenclose\fR and \fBwmouse_trafo\fR
are boolean functions returning \fBTRUE\fR or \fBFALSE\fR depending
on their test result.
.SH PORTABILITY
These calls were designed for \fBncurses\fR(3X), and are not found in SVr4
curses, 4.4BSD curses, or any other previous version of curses.
.PP
SVr4 curses had support for the mouse in a variant of \fBxterm\fP.
It is mentioned in a few places, but with no supporting documentation:
.bP
the \*(``libcurses\*('' manual page lists functions for this feature
which are prototyped in \fBcurses.h\fP:
.NS
extern int mouse_set(long int);
extern int mouse_on(long int);
extern int mouse_off(long int);
extern int request_mouse_pos(void);
extern int map_button(unsigned long);
extern void wmouse_position(WINDOW *, int *, int *);
extern unsigned long getmouse(void), getbmap(void);
.NE
.bP
the \*(``terminfo\*('' manual page lists capabilities for the feature
.NS
buttons btns BT Number of buttons on the mouse
get_mouse getm Gm Curses should get button events
key_mouse kmous Km 0631, Mouse event has occurred
mouse_info minfo Mi Mouse status information
req_mouse_pos reqmp RQ Request mouse position report
.NE
.bP
the interface made assumptions (as does ncurses) about the escape sequences
sent to and received from the terminal.
.IP
For instance
the SVr4 curses library used the \fBget_mouse\fP capability to tell the
terminal which mouse button events it should send,
passing the mouse-button bit-mask to the terminal.
Also, it could ask the terminal
where the mouse was using the \fBreq_mouse_pos\fP capability.
.IP
Those features required a terminal which had been modified to work with curses.
They were not part of the X Consortium's xterm.
.PP
When developing the xterm mouse support for ncurses in September 1995,
Eric Raymond was uninterested in using the same interface due to its
lack of documentation.
Later, in 1998, Mark Hesseling provided support in
PDCurses 2.3 using the SVr4 interface.
PDCurses, however, does not use video terminals,
making it unnecessary to be concerned about compatibility with the
escape sequences.
.PP
The feature macro \fBNCURSES_MOUSE_VERSION\fR is provided so the preprocessor
can be used to test whether these features are present.
If the interface is changed, the value of \fBNCURSES_MOUSE_VERSION\fR will be
incremented.
These values for \fBNCURSES_MOUSE_VERSION\fR may be
specified when configuring ncurses:
.RS 3
.TP 3
1
has definitions for reserved events.
The mask uses 28 bits.
.TP 3
2
adds definitions for button 5,
removes the definitions for reserved events.
The mask uses 29 bits.
.RE
.PP
The order of the \fBMEVENT\fR structure members is not guaranteed.
Additional fields may be added to the structure in the future.
.PP
Under \fBncurses\fR(3X), these calls are implemented using either
xterm's built-in mouse-tracking API or
platform-specific drivers including
.RS 3
.bP
Alessandro Rubini's gpm server
.bP
FreeBSD sysmouse
.bP
OS/2 EMX
.RE
.PP
If you are using an unsupported configuration,
mouse events will not be visible to
\fBncurses\fR(3X) (and the \fBmousemask\fR function will always
return \fB0\fR).
.PP
If the terminfo entry contains a \fBXM\fR string,
this is used in the xterm mouse driver to control the
way the terminal is initialized for mouse operation.
The default, if \fBXM\fR is not found,
corresponds to private mode 1000 of xterm:
.PP
.RS 3
\\E[?1000%?%p1%{1}%=%th%el%;
.RE
.PP
The mouse driver also recognizes a newer xterm private mode 1006, e.g.,
.PP
.RS 3
\\E[?1006;1000%?%p1%{1}%=%th%el%;
.RE
.PP
The \fIz\fP member in the event structure is not presently used.
It is intended
for use with touch screens (which may be pressure-sensitive) or with
3D-mice/trackballs/power gloves.
.PP
The \fBALL_MOUSE_EVENTS\fP class does not include \fBREPORT_MOUSE_POSITION\fP.
They are distinct.
For example, in xterm,
wheel/scrolling mice send position reports as a sequence of
presses of buttons 4 or 5 without matching button-releases.
.SH BUGS
Mouse events under xterm will not in fact be ignored during cooked mode,
if they have been enabled by \fBmousemask\fR.
Instead, the xterm mouse
report sequence will appear in the string read.
.PP
Mouse events under xterm will not be detected correctly in a window with
its keypad bit off, since they are interpreted as a variety of function key.
Your terminfo description should have \fBkmous\fR set to \*(``\\E[M\*(''
(the beginning of the response from xterm for mouse clicks).
Other values for \fBkmous\fR are permitted,
but under the same assumption,
i.e., it is the beginning of the response.
.PP
Because there are no standard terminal responses that would serve to identify
terminals which support the xterm mouse protocol, \fBncurses\fR assumes that
if \fBkmous\fR is defined in the terminal description,
or if the terminal description's primary name or aliases
contain the string \*(``xterm\*('',
then the terminal may send mouse events.
The \fBkmous\fP capability is checked first,
allowing the use of newer xterm mouse protocols
such as xterm's private mode 1006.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_kernel\fR(3X),
\fBcurs_slk\fR(3X),
\fBcurs_variables\fR(3X).
diff --git a/contrib/ncurses/man/curs_move.3x b/contrib/ncurses/man/curs_move.3x
index e71045286245..e0c1bf5e0284 100644
--- a/contrib/ncurses/man/curs_move.3x
+++ b/contrib/ncurses/man/curs_move.3x
@@ -1,66 +1,66 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_move.3x,v 1.18 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_move.3x,v 1.19 2020/10/24 09:39:41 tom Exp $
.TH curs_move 3X ""
.na
.hy 0
.SH NAME
\fBmove\fR,
\fBwmove\fR \- move \fBcurses\fR window cursor
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBint move(int y, int x);\fR
+\fBint move(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
.br
-\fBint wmove(WINDOW *win, int y, int x);\fR
+\fBint wmove(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR
.br
.SH DESCRIPTION
These routines move the cursor associated with the window to line \fIy\fR and
column \fIx\fR.
This routine does not move the physical cursor of the terminal
until \fBrefresh\fR(3X) is called.
The position specified is relative to the upper
left-hand corner of the window, which is (0,0).
.SH RETURN VALUE
These routines return \fBERR\fR upon failure and \fBOK\fP (SVr4
specifies only "an integer value other than \fBERR\fR") upon successful
completion.
.PP
Specifically, they return an error
if the window pointer is null, or
if the position is outside the window.
.SH NOTES
Note that \fBmove\fR may be a macro.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
.SH SEE ALSO
\fBcurses\fR(3X), \fBcurs_refresh\fR(3X)
diff --git a/contrib/ncurses/man/curs_opaque.3x b/contrib/ncurses/man/curs_opaque.3x
index 855d31e74726..1d0cb55f2bb2 100644
--- a/contrib/ncurses/man/curs_opaque.3x
+++ b/contrib/ncurses/man/curs_opaque.3x
@@ -1,155 +1,155 @@
.\"***************************************************************************
.\" Copyright 2020 Thomas E. Dickey *
.\" Copyright 2007-2014,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_opaque.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_opaque.3x,v 1.15 2020/10/24 09:41:22 tom Exp $
.TH curs_opaque 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.na
.hy 0
.SH NAME
\fBis_cleared\fR,
\fBis_idlok\fR,
\fBis_idcok\fR,
\fBis_immedok\fR,
\fBis_keypad\fR,
\fBis_leaveok\fR,
\fBis_nodelay\fR,
\fBis_notimeout\fR,
\fBis_pad\fR,
\fBis_scrollok\fR,
\fBis_subwin\fR,
\fBis_syncok\fR,
\fBwgetdelay\fR,
\fBwgetparent\fR,
\fBwgetscrreg\fR \- \fBcurses\fR window properties
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBbool is_cleared(const WINDOW *win);\fR
+\fBbool is_cleared(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBbool is_idcok(const WINDOW *win);\fR
+\fBbool is_idcok(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBbool is_idlok(const WINDOW *win);\fR
+\fBbool is_idlok(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBbool is_immedok(const WINDOW *win);\fR
+\fBbool is_immedok(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBbool is_keypad(const WINDOW *win);\fR
+\fBbool is_keypad(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBbool is_leaveok(const WINDOW *win);\fR
+\fBbool is_leaveok(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBbool is_nodelay(const WINDOW *win);\fR
+\fBbool is_nodelay(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBbool is_notimeout(const WINDOW *win);\fR
+\fBbool is_notimeout(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBbool is_pad(const WINDOW *win);\fR
+\fBbool is_pad(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBbool is_scrollok(const WINDOW *win);\fR
+\fBbool is_scrollok(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBbool is_subwin(const WINDOW *win);\fR
+\fBbool is_subwin(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBbool is_syncok(const WINDOW *win);\fR
+\fBbool is_syncok(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBWINDOW * wgetparent(const WINDOW *win);\fR
+\fBWINDOW * wgetparent(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBint wgetdelay(const WINDOW *win);\fR
+\fBint wgetdelay(const WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBint wgetscrreg(const WINDOW *win, int *top, int *bottom);\fR
+\fBint wgetscrreg(const WINDOW *\fP\fIwin\fP\fB, int *\fP\fItop\fP\fB, int *\fP\fIbottom\fP\fB);\fR
.br
.SH DESCRIPTION
This implementation provides functions which return properties
set in the WINDOW structure, allowing it to be \*(``opaque\*('' if
the symbol \fBNCURSES_OPAQUE\fR is defined:
.TP 5
\fBis_cleared\fR
returns the value set in \fBclearok\fR
.TP 5
\fBis_idcok\fR
returns the value set in \fBidcok\fR
.TP 5
\fBis_idlok\fR
returns the value set in \fBidlok\fR
.TP 5
\fBis_immedok\fR
returns the value set in \fBimmedok\fR
.TP 5
\fBis_keypad\fR
returns the value set in \fBkeypad\fR
.TP 5
\fBis_leaveok\fR
returns the value set in \fBleaveok\fR
.TP 5
\fBis_nodelay\fR
returns the value set in \fBnodelay\fR
.TP 5
\fBis_notimeout\fR
returns the value set in \fBnotimeout\fR
.TP 5
\fBis_pad\fR
returns \fBTRUE\fP if the window is a pad
i.e., created by \fBnewpad\fP
.TP 5
\fBis_scrollok\fR
returns the value set in \fBscrollok\fR
.TP 5
\fBis_subwin\fR
returns \fBTRUE\fP if the window is a subwindow,
i.e., created by \fBsubwin\fP or \fBderwin\fP
.TP 5
\fBis_syncok\fR
returns the value set in \fBsyncok\fR
.TP 5
\fBwgetdelay\fR
returns the delay timeout as set in \fBwtimeout\fP.
.TP 5
\fBwgetparent\fR
returns the parent WINDOW pointer for subwindows,
or NULL for windows having no parent.
.TP 5
\fBwgetscrreg\fR
returns the top and bottom rows for the scrolling margin
as set in \fBwsetscrreg\fP.
.SH RETURN VALUE
These functions all return \fBTRUE\fP or \fBFALSE\fP, except as noted.
.SH NOTES
Both a macro and a function are provided for each name.
.SH PORTABILITY
These routines are specific to ncurses.
They were not supported on Version 7, BSD or System V implementations.
It is recommended that any code depending on ncurses extensions
be conditioned using NCURSES_VERSION.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_inopts\fR(3X),
\fBcurs_outopts\fR(3X),
\fBcurs_window\fR(3X)
diff --git a/contrib/ncurses/man/curs_outopts.3x b/contrib/ncurses/man/curs_outopts.3x
index b3e46088000b..e4e742132744 100644
--- a/contrib/ncurses/man/curs_outopts.3x
+++ b/contrib/ncurses/man/curs_outopts.3x
@@ -1,232 +1,223 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_outopts.3x,v 1.30 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_outopts.3x,v 1.33 2020/10/03 22:04:09 tom Exp $
.TH curs_outopts 3X ""
.na
.hy 0
+.de bP
+.ie n .IP \(bu 4
+.el .IP \(bu 2
+..
.SH NAME
\fBclearok\fR,
\fBidlok\fR,
\fBidcok\fR,
\fBimmedok\fR,
\fBleaveok\fR,
\fBsetscrreg\fR,
\fBwsetscrreg\fR,
-\fBscrollok\fR,
-\fBnl\fR,
-\fBnonl\fR \- \fBcurses\fR output options
+\fBscrollok\fR \- \fBcurses\fR output options
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBint clearok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR
.br
\fBint idlok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR
.br
\fBvoid idcok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR
.br
\fBvoid immedok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR
.br
\fBint leaveok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR
.br
+\fBint scrollok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR
+.sp
\fBint setscrreg(int \fP\fItop\fP\fB, int \fP\fIbot\fP\fB);\fR
.br
\fBint wsetscrreg(WINDOW *\fP\fIwin\fP\fB, int \fP\fItop\fP\fB, int \fP\fIbot\fP\fB);\fR
.br
-\fBint scrollok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR
-.br
-\fBint nl(void);\fR
-.br
-\fBint nonl(void);\fR
-.br
.SH DESCRIPTION
+.PP
These routines set options that change the style of output within
\fBcurses\fR.
All options are initially \fBFALSE\fR, unless otherwise stated.
It is not necessary to turn these options off before calling \fBendwin\fR(3X).
.SS clearok
.PP
If \fBclearok\fR is called with \fBTRUE\fR as argument, the next
call to \fBwrefresh\fR with this window will clear the screen completely and
redraw the entire screen from scratch.
This is useful when the contents of the
screen are uncertain, or in some cases for a more pleasing visual effect.
If
the \fIwin\fR argument to \fBclearok\fR is the global variable \fBcurscr\fR,
the next call to \fBwrefresh\fR with any window causes the screen to be cleared
and repainted from scratch.
.SS idlok
.PP
If \fBidlok\fR is called with \fBTRUE\fR as second argument, \fBcurses\fR
considers using the hardware insert/delete line feature of terminals so
equipped.
Calling \fBidlok\fR with \fBFALSE\fR as second argument disables use
of line insertion and deletion.
This option should be enabled only if the
application needs insert/delete line, for example, for a screen editor.
It is
disabled by default because insert/delete line tends to be visually annoying
when used in applications where it is not really needed.
If insert/delete line
cannot be used, \fBcurses\fR redraws the changed portions of all lines.
.SS idcok
.PP
If \fBidcok\fR is called with \fBFALSE\fR as second argument, \fBcurses\fR
no longer considers using the hardware insert/delete character feature of
terminals so equipped.
Use of character insert/delete is enabled by default.
Calling \fBidcok\fR with \fBTRUE\fR as second argument re-enables use
of character insertion and deletion.
.SS immedok
.PP
If \fBimmedok\fR is called with \fBTRUE as argument\fR, any change
in the window image, such as the ones caused by \fBwaddch, wclrtobot, wscrl\fR,
etc., automatically cause a call to \fBwrefresh\fR.
However, it may
degrade performance considerably, due to repeated calls to \fBwrefresh\fR.
It is disabled by default.
.SS leaveok
.PP
Normally, the hardware cursor is left at the location of the window cursor
being refreshed.
The \fBleaveok\fR option allows the cursor to be left
wherever the update happens to leave it.
It is useful for applications where
the cursor is not used, since it reduces the need for cursor motions.
-.SS setscrreg
+.SS scrollok
+.PP
+The \fBscrollok\fR option controls what happens when the cursor of a window is
+moved off the edge of the window or scrolling region, either as a result of a
+newline action on the bottom line, or typing the last character of the last
+line.
+If disabled, (\fIbf\fR is \fBFALSE\fR), the cursor is left on the bottom
+line.
+If enabled, (\fIbf\fR is \fBTRUE\fR), the window is scrolled up one line
+(Note that to get the physical scrolling effect on the terminal, it is
+also necessary to call \fBidlok\fR).
+.SS setscrreg/wsetscrreg
.PP
The \fBsetscrreg\fR and \fBwsetscrreg\fR routines allow the application
programmer to set a software scrolling region in a window.
The \fItop\fR and
\fIbot\fR parameters
are the line numbers of the top and bottom margin of the scrolling
region.
(Line 0 is the top line of the window.) If this option and
\fBscrollok\fR are enabled, an attempt to move off the bottom margin line
causes all lines in the scrolling region to scroll one line in the direction
of the first line.
Only the text of the window is scrolled.
(Note that this
has nothing to do with the use of a physical scrolling region capability in the
terminal, like that in the VT100.
If \fBidlok\fR is enabled and the terminal
has either a scrolling region or insert/delete line capability, they will
probably be used by the output routines.)
-.SS scrollok
-.PP
-The \fBscrollok\fR option controls what happens when the cursor of a window is
-moved off the edge of the window or scrolling region, either as a result of a
-newline action on the bottom line, or typing the last character of the last
-line.
-If disabled, (\fIbf\fR is \fBFALSE\fR), the cursor is left on the bottom
-line.
-If enabled, (\fIbf\fR is \fBTRUE\fR), the window is scrolled up one line
-(Note that to get the physical scrolling effect on the terminal, it is
-also necessary to call \fBidlok\fR).
-.SS nl, nonl
-.PP
-The \fBnl\fR and \fBnonl\fR routines control whether the underlying display
-device translates the return key into newline on input, and whether it
-translates newline into return and line-feed on output (in either case, the
-call \fBaddch('\\n')\fR does the equivalent of return and line feed on the
-\fIvirtual screen\fP).
-Initially, these translations do occur.
-If you disable them
-using \fBnonl\fR, \fBcurses\fR will be able to make better use of the line-feed
-capability, resulting in faster cursor motion.
-Also, \fBcurses\fR will then be
-able to detect the return key.
.SH RETURN VALUE
The functions \fBsetscrreg\fR and \fBwsetscrreg\fR return \fBOK\fR upon success
and \fBERR\fR upon failure.
All other routines that return an integer always
return \fBOK\fR.
.PP
X/Open Curses does not define any error conditions.
.PP
-In this implementation, those functions that have a window pointer
-will return an error if the window pointer is null.
-.RS
-.TP 5
-.B wclrtoeol
-returns an error
-if the cursor position is about to wrap.
-.TP 5
-.B wsetscrreg
+In this implementation,
+.bP
+those functions that have a window pointer
+will return an error if the window pointer is null
+.bP
+\fBwsetscrreg\fP
returns an error if the scrolling region limits extend outside the window.
.RE
.PP
X/Open does not define any error conditions.
This implementation returns an error
if the window pointer is null.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
.PP
-The XSI Curses standard is ambiguous on the question of whether \fBraw\fR
-should disable the CRLF translations controlled by \fBnl\fR and \fBnonl\fR.
-BSD curses did turn off these translations; AT&T curses (at least as late as
-SVr1) did not.
-We choose to do so, on the theory that a programmer requesting
-raw input wants a clean (ideally 8-bit clean) connection that the operating
-system will not alter.
+From the outset, ncurses used \fBnl\fP/\fBnonl\fP to control the conversion
+of newlines to carriage return/line-feed on output as well as input.
+XSI Curses documents only the use of these functions for input.
+This difference arose from converting the \fIpcurses\fP source
+(which used \fBioctl\fP calls with the \fBsgttyb\fP structure)
+to termios (i.e., the POSIX terminal interface).
+In the former, both input and output were controlled via a single
+option \fBCRMOD\fP,
+while the latter separates these features.
+Because that conversion interferes with output optimization,
+\fBnl\fP/\fBnonl\fP were amended after ncurses 6.2
+to eliminate their effect on output.
.PP
Some historic curses implementations had, as an undocumented feature, the
ability to do the equivalent of \fBclearok(..., 1)\fR by saying
\fBtouchwin(stdscr)\fR or \fBclear(stdscr)\fR.
-This will not work under
-ncurses.
+This will not work under ncurses.
.PP
Earlier System V curses implementations specified that with \fBscrollok\fR
enabled, any window modification triggering a scroll also forced a physical
refresh.
XSI Curses does not require this, and \fBncurses\fR avoids doing
it to perform better vertical-motion optimization at \fBwrefresh\fR
time.
.PP
The XSI Curses standard does not mention that the cursor should be
made invisible as a side-effect of \fBleaveok\fR.
SVr4 curses documentation does this, but the code does not.
Use \fBcurs_set\fR to make the cursor invisible.
.SH NOTES
-Note that \fBclearok\fR, \fBleaveok\fR, \fBscrollok\fR, \fBidcok\fR, \fBnl\fR,
-\fBnonl\fR and \fBsetscrreg\fR may be macros.
+Note that
+\fBclearok\fR,
+\fBleaveok\fR,
+\fBscrollok\fR,
+\fBidcok\fR, and
+\fBsetscrreg\fR may be macros.
.PP
The \fBimmedok\fR routine is useful for windows that are used as terminal
emulators.
.SH SEE ALSO
.na
\fBcurses\fR(3X),
\fBcurs_addch\fR(3X),
\fBcurs_clear\fR(3X),
\fBcurs_initscr\fR(3X),
\fBcurs_scroll\fR(3X),
\fBcurs_refresh\fR(3X),
\fBcurs_variables\fR(3X).
diff --git a/contrib/ncurses/man/curs_print.3x b/contrib/ncurses/man/curs_print.3x
index edb5008d7302..8bde817d92f0 100644
--- a/contrib/ncurses/man/curs_print.3x
+++ b/contrib/ncurses/man/curs_print.3x
@@ -1,72 +1,72 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_print.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_print.3x,v 1.16 2020/10/24 09:25:14 tom Exp $
.TH curs_print 3X ""
.SH NAME
\fBmcprint\fR \- ship binary data to printer
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBint mcprint(char *data, int len);\fR
+\fBint mcprint(char *\fP\fIdata\fP\fB, int \fP\fIlen\fP\fB);\fR
.SH DESCRIPTION
This function uses the \fBmc5p\fR or \fBmc4\fR and \fBmc5\fR capabilities,
if they are present, to ship given data to a printer attached to the terminal.
.PP
Note that the \fBmcprint\fR code has no way to do flow control with the printer
or to know how much buffering it has.
Your application is responsible for
keeping the rate of writes to the printer below its continuous throughput rate
(typically about half of its nominal cps rating).
Dot-matrix printers and
6-page-per-minute lasers can typically handle 80cps, so a good conservative
rule of thumb is to sleep for a second after shipping each 80-character line.
.
.SH RETURN VALUE
The \fBmcprint\fR function returns \fBERR\fR if the write operation aborted
for some reason.
-In this case, errno will contain either an error associated
+In this case, \fBerrno\fP will contain either an error associated
with \fBwrite\fP(2) or one of the following:
.TP 5
ENODEV
Capabilities for printer redirection do not exist.
.TP 5
ENOMEM
Couldn't allocate sufficient memory to buffer the printer write.
.PP
When \fBmcprint\fR succeeds, it returns the number of characters actually
sent to the printer.
.SH PORTABILITY
The \fBmcprint\fR call was designed for \fBncurses\fR(3X), and is not found
in SVr4 curses, 4.4BSD curses, or any other previous version of curses.
.SH BUGS
Padding in the \fBmc5p\fR, \fBmc4\fR and \fBmc5\fR capabilities will not be
interpreted.
.SH SEE ALSO
\fBcurses\fR(3X)
diff --git a/contrib/ncurses/man/curs_printw.3x b/contrib/ncurses/man/curs_printw.3x
index 4d060d73cd1a..4980517275d5 100644
--- a/contrib/ncurses/man/curs_printw.3x
+++ b/contrib/ncurses/man/curs_printw.3x
@@ -1,118 +1,154 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_printw.3x,v 1.25 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_printw.3x,v 1.28 2020/10/24 09:22:45 tom Exp $
.TH curs_printw 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.SH NAME
\fBprintw\fR,
\fBwprintw\fR,
\fBmvprintw\fR,
\fBmvwprintw\fR,
\fBvwprintw\fR, \fBvw_printw\fR \- print formatted output in \fBcurses\fR windows
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBint printw(const char *fmt, ...);\fR
+\fBint printw(const char *\fP\fIfmt\fP\fB, ...);\fR
.br
-\fBint wprintw(WINDOW *win, const char *fmt, ...);\fR
+\fBint wprintw(WINDOW *\fP\fIwin\fP\fB, const char *\fP\fIfmt\fP\fB, ...);\fR
.br
-\fBint mvprintw(int y, int x, const char *fmt, ...);\fR
+\fBint mvprintw(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const char *\fP\fIfmt\fP\fB, ...);\fR
.br
-\fBint mvwprintw(WINDOW *win, int y, int x, const char *fmt, ...);\fR
+\fBint mvwprintw(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const char *\fP\fIfmt\fP\fB, ...);\fR
.br
-\fBint vw_printw(WINDOW *win, const char *fmt, va_list varglist);\fR
+\fBint vw_printw(WINDOW *\fP\fIwin\fP\fB, const char *\fP\fIfmt\fP\fB, va_list \fP\fIvarglist\fP\fB);\fR
.sp
/* obsolete */
.br
-\fBint vwprintw(WINDOW *win, const char *fmt, va_list varglist);\fR
+\fBint vwprintw(WINDOW *\fP\fIwin\fP\fB, const char *\fP\fIfmt\fP\fB, va_list \fP\fIvarglist\fP\fB);\fR
.SH DESCRIPTION
The \fBprintw\fR, \fBwprintw\fR, \fBmvprintw\fR and \fBmvwprintw\fR
routines are analogous to \fBprintf\fR [see \fBprintf\fR(3)].
In
effect, the string that would be output by \fBprintf\fR is output
instead as though \fBwaddstr\fR were used on the given window.
.PP
-The \fBvwprintw\fR and \fBwv_printw\fR routines are analogous
+The \fBvwprintw\fR and \fBvw_printw\fR routines are analogous
to \fBvprintf\fR [see \fBprintf\fR(3)]
and perform a \fBwprintw\fR using a variable argument list.
The third argument is a \fBva_list\fR, a pointer to a
list of arguments, as defined in \fB<stdarg.h>\fR.
.SH RETURN VALUE
Routines that return an integer return \fBERR\fR upon failure and \fBOK\fR
(SVr4 only specifies "an integer value other than \fBERR\fR") upon successful
completion.
.PP
X/Open defines no error conditions.
In this implementation,
an error may be returned if it cannot allocate enough memory for the
buffer used to format the results.
It will return an error if the window pointer is null.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
+.SH HISTORY
+While \fBprintw\fP was implemented in 4BSD,
+it was unused until 4.2BSD (which used it in games).
+That early version of curses was before the ANSI C standard.
+It did not use <varargs.h>, though that was available.
+In 1991 (a couple of years after SVr4 was generally available,
+and after the C standard was published),
+other developers updated the library,
+using <stdarg.h> internally in 4.4BSD curses.
+Even with this improvement,
+BSD curses did not use function prototypes (or even declare
+functions) in the <curses.h> header until 1992.
+.PP
+SVr2 documented
+\fBprintw\fP,
+\fBwprintw\fP
+tersely as \*(``printf on \fIstdscr\fP\*('' and
+tersely as \*(``printf on \fIwin\fP\*('', respectively.
+.PP
+SVr3 added
+\fBmvprintw\fP, and
+\fBmvwprintw\fP, with a three-line summary saying that they were analogous
+to \fBprintf\fP(3),
+explaining that the string which would be output from \fBprintf\fP(3) would
+instead be output using \fBwaddstr\fP on the given window.
+SVr3 also added \fBvwprintw\fP, saying that the third parameter
+is a \fBva_list\fP, defined in <varargs.h>,
+and referring the reader to the manual pages for \fIvarargs\fP and
+\fIvprintf\fP for detailed descriptions.
+.PP
+SVr4 added no new variations of \fBprintw\fP,
+but provided for using <varargs.h> or <stdarg.h> to define the \fBva_list\fP
+type.
+.PP
+X/Open Curses added \fBvw_printw\fP to replace \fBvwprintw\fP,
+stating that its \fBva_list\fP definition requires <stdarg.h>.
.SH PORTABILITY
In this implementation, \fBvw_printw\fP and \fBvwprintw\fP are equivalent,
to support legacy applications.
However, the latter (\fBvwprintw\fP) is obsolete:
.bP
The XSI Curses standard, Issue 4 described these functions.
The function
\fBvwprintw\fR is marked TO BE WITHDRAWN, and is to be replaced by a function
\fBvw_printw\fR using the \fB<stdarg.h>\fR interface.
.bP
The Single Unix Specification, Version 2 states that
\fBvw_printw\fR is preferred to \fBvwprintw\fR since the latter requires
including \fB<varargs.h>\fR, which
cannot be used in the same file as \fB<stdarg.h>\fR.
This implementation uses \fB<stdarg.h>\fR for both,
because that header is included in \fB<curses.h\fR>.
.bP
X/Open Curses, Issue 5 (December 2007) marked \fBvwprintw\fP (along with
\fBvwscanw\fP and the termcap interface) as withdrawn.
.SH SEE ALSO
.na
\fBcurses\fR(3X),
\fBcurs_addstr\fR(3X),
\fBcurs_scanw\fR(3X),
\fBcurs_termcap\fP(3X),
\fBprintf\fR(3),
\fBvprintf\fR(3).
diff --git a/contrib/ncurses/man/curs_refresh.3x b/contrib/ncurses/man/curs_refresh.3x
index 765020df133a..4c4b8e7f28d0 100644
--- a/contrib/ncurses/man/curs_refresh.3x
+++ b/contrib/ncurses/man/curs_refresh.3x
@@ -1,163 +1,163 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2016 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_refresh.3x,v 1.21 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_refresh.3x,v 1.22 2020/10/24 09:43:49 tom Exp $
.TH curs_refresh 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.SH NAME
\fBdoupdate\fR,
\fBredrawwin\fR,
\fBrefresh\fR,
\fBwnoutrefresh\fR,
\fBwredrawln\fR,
\fBwrefresh\fR \- refresh \fBcurses\fR windows and lines
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBint refresh(void);\fR
.br
-\fBint wrefresh(WINDOW *win);\fR
+\fBint wrefresh(WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBint wnoutrefresh(WINDOW *win);\fR
+\fBint wnoutrefresh(WINDOW *\fP\fIwin\fP\fB);\fR
.br
\fBint doupdate(void);\fR
+.sp
+\fBint redrawwin(WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBint redrawwin(WINDOW *win);\fR
-.br
-\fBint wredrawln(WINDOW *win, int beg_line, int num_lines);\fR
+\fBint wredrawln(WINDOW *\fP\fIwin\fP\fB, int \fP\fIbeg_line\fP\fB, int \fP\fInum_lines\fP\fB);\fR
.br
.SH DESCRIPTION
.SS refresh/wrefresh
The \fBrefresh\fR and \fBwrefresh\fR routines (or \fBwnoutrefresh\fR and
\fBdoupdate\fR) must be called to get actual output to the terminal,
as other routines merely manipulate data structures.
The routine \fBwrefresh\fR copies
the named window to the \fIphysical screen\fP,
taking into account what is already there to do optimizations.
The \fBrefresh\fR routine is the
same, using \fBstdscr\fR as the default window.
Unless \fBleaveok\fR has been
enabled, the physical cursor of the terminal is left at the location of the
cursor for that window.
.SS wnoutrefresh/doupdate
.PP
The \fBwnoutrefresh\fR and \fBdoupdate\fR routines allow multiple updates with
more efficiency than \fBwrefresh\fR alone.
In addition to all the window
structures, \fBcurses\fR keeps two data structures representing the terminal
screen:
.bP
a \fIphysical screen\fP, describing what is actually on the screen, and
.bP
a \fIvirtual screen\fP, describing what the programmer wants to have on the screen.
.PP
The routine \fBwrefresh\fR works by
.bP
first calling \fBwnoutrefresh\fR,
which copies the named window to the \fIvirtual screen\fP, and
.bP
then calling \fBdoupdate\fR, which compares
the \fIvirtual screen\fP to the \fIphysical screen\fP
and does the actual update.
.PP
If the programmer wishes to output several windows at once, a series
of calls to \fBwrefresh\fR results in alternating calls to \fBwnoutrefresh\fR
and \fBdoupdate\fR, causing several bursts of output to the screen.
By first
calling \fBwnoutrefresh\fR for each window, it is then possible to call
\fBdoupdate\fR once, resulting in only one burst of output, with fewer total
characters transmitted and less CPU time used.
.PP
If the \fIwin\fR argument to
\fBwrefresh\fR is the \fIphysical screen\fP
(i.e., the global variable \fBcurscr\fR),
the screen is immediately cleared and repainted from scratch.
.PP
The phrase \*(``copies the named window
to the virtual screen\*('' above is ambiguous.
What actually happens is that all \fItouched\fR (changed) lines in the window
are copied to the virtual screen.
This affects programs that use overlapping
windows; it means that if two windows overlap, you can refresh them in either
order and the overlap region will be modified only when it is explicitly
changed.
(But see the section on \fBPORTABILITY\fR below for a warning about
exploiting this behavior.)
.SS wredrawln/redrawwin
.PP
The \fBwredrawln\fR routine indicates to \fBcurses\fR that some screen lines
are corrupted and should be thrown away before anything is written over them.
It touches the indicated lines (marking them changed).
The routine \fBredrawwin\fR touches the entire window.
.SH RETURN VALUE
Routines that return an integer return \fBERR\fR upon failure, and \fBOK\fR
(SVr4 only specifies "an integer value other than \fBERR\fR") upon successful
completion.
.PP
X/Open does not define any error conditions.
In this implementation
.RS 3
.TP 5
\fBwnoutrefresh\fP
returns an error
if the window pointer is null, or
if the window is really a pad.
.TP 5
\fBwredrawln\fP
returns an error
if the associated call to \fBtouchln\fP returns an error.
.RE
.SH NOTES
Note that \fBrefresh\fR and \fBredrawwin\fR may be macros.
.SH PORTABILITY
The XSI Curses standard, Issue 4 describes these functions.
.PP
Whether \fBwnoutrefresh\fR copies to the virtual screen the entire contents
of a window or just its changed portions has never been well-documented in
historic curses versions (including SVr4).
It might be unwise to rely on
either behavior in programs that might have to be linked with other curses
implementations.
Instead, you can do an explicit \fBtouchwin\fR before the
\fBwnoutrefresh\fR call to guarantee an entire-contents copy anywhere.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_outopts\fR(3X)
\fBcurs_variables\fR(3X).
diff --git a/contrib/ncurses/man/curs_scanw.3x b/contrib/ncurses/man/curs_scanw.3x
index 9407ae6489d8..1de9ad866839 100644
--- a/contrib/ncurses/man/curs_scanw.3x
+++ b/contrib/ncurses/man/curs_scanw.3x
@@ -1,131 +1,169 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_scanw.3x,v 1.26 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_scanw.3x,v 1.28 2020/10/24 09:29:26 tom Exp $
.TH curs_scanw 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fBscanw\fR,
\fBwscanw\fR,
\fBmvscanw\fR,
\fBmvwscanw\fR,
\fBvwscanw\fR, \fBvw_scanw\fR \- convert formatted input from a \fBcurses\fR window
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBint scanw(const char *fmt, ...);\fR
+\fBint scanw(const char *\fP\fIfmt\fP\fB, ...);\fR
.br
-\fBint wscanw(WINDOW *win, const char *fmt, ...);\fR
+\fBint wscanw(WINDOW *\fP\fIwin\fP\fB, const char *\fP\fIfmt\fP\fB, ...);\fR
.br
-\fBint mvscanw(int y, int x, const char *fmt, ...);\fR
+\fBint mvscanw(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const char *\fP\fIfmt\fP\fB, ...);\fR
.br
-\fBint mvwscanw(WINDOW *win, int y, int x, const char *fmt, ...);\fR
-.br
-\fBint vw_scanw(WINDOW *win, const char *fmt, va_list varglist);\fR
+\fBint mvwscanw(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, const char *\fP\fIfmt\fP\fB, ...);\fR
+.sp
+\fBint vw_scanw(WINDOW *\fP\fIwin\fP\fB, const char *\fP\fIfmt\fP\fB, va_list \fP\fIvarglist\fP\fB);\fR
.sp
/* obsolete */
.br
-\fBint vwscanw(WINDOW *win, const char *fmt, va_list varglist);\fR
+\fBint vwscanw(WINDOW *\fP\fIwin\fP\fB, const char *\fP\fIfmt\fP\fB, va_list \fP\fIvarglist\fP\fB);\fR
.SH DESCRIPTION
The \fBscanw\fR, \fBwscanw\fR and \fBmvscanw\fR routines are analogous to
\fBscanf\fR [see \fBscanf\fR(3)].
The effect of these routines is as though
\fBwgetstr\fR were called on the window, and the resulting line used as input
for \fBsscanf\fR(3).
Fields which do not map to a variable in the \fIfmt\fR
field are lost.
.PP
The \fBvwscanw\fR and \fBvw_scanw\fR routines are analogous to \fBvscanf\fR(3).
They perform a \fBwscanw\fR using a variable argument list.
The third argument is a \fIva_list\fR,
a pointer to a list of arguments, as defined in \fB<stdarg.h>\fR.
.SH RETURN VALUE
\fBvwscanw\fR returns \fBERR\fR on failure and an integer equal to the
number of fields scanned on success.
.PP
Applications may use the return value from the \fBscanw\fR, \fBwscanw\fR,
\fBmvscanw\fR and \fBmvwscanw\fR routines to determine the number of fields
which were mapped in the call.
.PP
Functions with a \*(``mv\*('' prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
+.SH HISTORY
+While \fBscanw\fP was implemented in 4BSD,
+none of the BSD releases used it until 4.4BSD (in a game).
+That early version of curses was before the ANSI C standard.
+It did not use <varargs.h>, though that was available.
+In 1991 (a couple of years after SVr4 was generally available,
+and after the C standard was published),
+other developers updated the library,
+using <stdarg.h> internally in 4.4BSD curses.
+Even with this improvement,
+BSD curses did not use function prototypes (or even declare
+functions) in the <curses.h> header until 1992.
+.PP
+SVr2 documented
+\fBscanw\fP,
+\fBwscanw\fP
+tersely as \*(``scanf through \fIstdscr\fP\*('' and
+tersely as \*(``scanf through \fIwin\fP\*('', respectively.
+.PP
+SVr3 added
+\fBmvscanw\fP, and
+\fBmvwscanw\fP, with a three-line summary saying that they were analogous
+to \fBscanf\fP(3),
+explaining that the string which would be output from \fBscanf\fP(3) would
+instead be output using \fBwaddstr\fP on the given window.
+SVr3 also added \fBvwscanw\fP, saying that the third parameter
+is a \fBva_list\fP, defined in <varargs.h>,
+and referring the reader to the manual pages for \fIvarargs\fP and
+\fIvprintf\fP for detailed descriptions.
+(Because the SVr3 documentation does not mention \fIvscanf\fP,
+that reference to \fIvprintf\fP may not be an error).
+.PP
+SVr4 added no new variations of \fBscanw\fP,
+but provided for using <varargs.h> or <stdarg.h> to define the \fBva_list\fP
+type.
+.PP
+X/Open Curses added \fBvw_scanw\fP to replace \fBvwscanw\fP,
+stating that its \fBva_list\fP definition requires <stdarg.h>.
.SH PORTABILITY
In this implementation, \fBvw_scanw\fP and \fBvwscanw\fP are equivalent,
to support legacy applications.
However, the latter (\fBvwscanw\fP) is obsolete:
.bP
The XSI Curses standard, Issue 4 described these functions,
noting that the function
\fBvwscanw\fR is marked TO BE WITHDRAWN, and is to be replaced by a function
\fBvw_scanw\fR using the \fB<stdarg.h>\fR interface.
.bP
The Single Unix Specification, Version 2 states that
\fBvw_scanw\fR is preferred to \fBvwscanw\fR since the latter requires
including \fB<varargs.h>\fR, which
cannot be used in the same file as \fB<stdarg.h>\fR.
This implementation uses \fB<stdarg.h>\fR for both, because that header
is included in \fB<curses.h\fR>.
.bP
X/Open Curses, Issue 5 (December 2007) marked \fBvwscanw\fP (along with
\fBvwprintw\fP and the termcap interface) as withdrawn.
.LP
Both XSI and The Single Unix Specification, Version 2 state that these
functions return \fBERR\fP or \fBOK\fP.
.bP
Since the underlying \fBscanf\fR(3) can return the number of items scanned,
and the SVr4 code was documented to use this feature,
this is probably an editing error which was introduced in XSI,
rather than being done intentionally.
.bP
This implementation returns the number of items scanned,
for compatibility with SVr4 curses.
As of 2018, NetBSD curses also returns the number of items scanned.
Both ncurses and NetBSD curses call \fBvsscanf\fP to scan the string,
which returns \fBEOF\fP on error.
.bP
Portable applications should only test if the return value is \fBERR\fP,
since the \fBOK\fP value (zero) is likely to be misleading.
.IP
One possible way to get useful results would be to use a "%n" conversion
at the end of the format string to ensure that something was processed.
.SH SEE ALSO
.na
\fBcurses\fR(3X),
\fBcurs_getstr\fR(3X),
\fBcurs_printw\fR(3X),
\fBcurs_termcap\fP(3X),
\fBscanf\fR(3).
diff --git a/contrib/ncurses/man/curs_scr_dump.3x b/contrib/ncurses/man/curs_scr_dump.3x
index 01c61b26a25b..229acefd39d9 100644
--- a/contrib/ncurses/man/curs_scr_dump.3x
+++ b/contrib/ncurses/man/curs_scr_dump.3x
@@ -1,115 +1,115 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_scr_dump.3x,v 1.15 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_scr_dump.3x,v 1.16 2020/10/24 09:44:43 tom Exp $
.TH curs_scr_dump 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.SH NAME
\fBscr_dump\fR,
\fBscr_restore\fR,
\fBscr_init\fR,
\fBscr_set\fR \- read (write) a \fBcurses\fR screen from (to) a file
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBint scr_dump(const char *filename);\fR
+\fBint scr_dump(const char *\fP\fIfilename\fP\fB);\fR
.br
-\fBint scr_restore(const char *filename);\fR
+\fBint scr_restore(const char *\fP\fIfilename\fP\fB);\fR
.br
-\fBint scr_init(const char *filename);\fR
+\fBint scr_init(const char *\fP\fIfilename\fP\fB);\fR
.br
-\fBint scr_set(const char *filename);\fR
+\fBint scr_set(const char *\fP\fIfilename\fP\fB);\fR
.br
.SH DESCRIPTION
The \fBscr_dump\fR routine dumps the current contents
of the \fIvirtual screen\fP
to the file \fIfilename\fR.
.PP
The \fBscr_restore\fR routine sets the \fIvirtual screen\fP to the contents
of \fIfilename\fR, which must have been written using \fBscr_dump\fR.
The next call to \fBdoupdate\fR restores
the \fIphysical screen\fP to the way it looked in the dump file.
.PP
The \fBscr_init\fR routine reads in the contents of \fIfilename\fR and uses
them to initialize the \fBcurses\fR data structures about what the terminal
currently has on its screen.
If the data is determined to be valid,
\fBcurses\fR bases its next update of the screen on this information rather
than clearing the screen and starting from scratch.
\fBscr_init\fR is used
after \fBinitscr\fR or a \fBsystem\fR call to share
the screen with another process which has done a \fBscr_dump\fR after its
\fBendwin\fR(3X) call.
The data is declared invalid
.bP
if the terminfo capabilities \fBrmcup\fR and \fBnrrmc\fR exist, also
.bP
if the terminal has been written to since the preceding \fBscr_dump\fR call.
.PP
The \fBscr_set\fR routine is a combination of \fBscr_restore\fR and
\fBscr_init\fR. It tells the program that the information in \fIfilename\fR is
what is currently on the screen, and also what the program wants on the screen.
This can be thought of as a screen inheritance function.
.PP
To read (write) a window from (to) a file, use the \fBgetwin\fR and
\fBputwin\fR routines [see \fBcurs_util\fR(3X)].
.SH RETURN VALUE
All routines return the integer \fBERR\fR upon failure and \fBOK\fR
upon success.
.PP
X/Open defines no error conditions.
In this implementation,
each will return an error if the file cannot be opened.
.SH NOTES
Note that \fBscr_init\fR, \fBscr_set\fR, and \fBscr_restore\fR may be macros.
.SH PORTABILITY
The XSI Curses standard, Issue 4, describes these functions (adding the const
qualifiers).
.PP
The SVr4 docs merely say under \fBscr_init\fR that the dump data is also
considered invalid "if the time-stamp of the tty is old" but do not define
\*(``old\*(''.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_initscr\fR(3X),
\fBcurs_refresh\fR(3X),
\fBcurs_util\fR(3X),
\fBscr_dump\fR(5),
\fBsystem\fR(3)
diff --git a/contrib/ncurses/man/curs_scroll.3x b/contrib/ncurses/man/curs_scroll.3x
index 50d2a997e40d..d9e45f2d5bec 100644
--- a/contrib/ncurses/man/curs_scroll.3x
+++ b/contrib/ncurses/man/curs_scroll.3x
@@ -1,95 +1,95 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2006,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_scroll.3x,v 1.18 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_scroll.3x,v 1.19 2020/10/24 09:45:48 tom Exp $
.TH curs_scroll 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.na
.hy 0
.SH NAME
\fBscroll\fR,
\fBscrl\fR,
\fBwscrl\fR \- scroll a \fBcurses\fR window
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBint scroll(WINDOW *win);\fR
-.br
-\fBint scrl(int n);\fR
+\fBint scroll(WINDOW *\fP\fIwin\fP\fB);\fR
+.sp
+\fBint scrl(int \fP\fIn\fP\fB);\fR
.br
-\fBint wscrl(WINDOW *win, int n);\fR
+\fBint wscrl(WINDOW *\fP\fIwin\fP\fB, int \fP\fIn\fP\fB);\fR
.br
.SH DESCRIPTION
The \fBscroll\fR routine scrolls the window up one line.
This involves moving
the lines in the window data structure.
As an optimization, if the scrolling
region of the window is the entire screen,
the \fIphysical screen\fP may be scrolled at the same time.
.PP
For positive \fIn\fR, the \fBscrl\fR and \fBwscrl\fR routines scroll the
window up \fIn\fR lines (line \fIi\fR+\fIn\fR becomes \fIi\fR); otherwise
scroll the window down \fIn\fR lines.
This involves moving the lines in the
window character image structure.
The current cursor position is not changed.
.PP
For these functions to work, scrolling must be enabled via \fBscrollok\fR.
.SH RETURN VALUE
These routines return \fBERR\fR upon failure, and \fBOK\fR (SVr4 only specifies
"an integer value other than \fBERR\fR") upon successful completion.
.PP
X/Open defines no error conditions.
.PP
This implementation returns an error
if the window pointer is null, or
if scrolling is not enabled in the window, e.g., with \fBscrollok\fP.
.SH NOTES
Note that \fBscrl\fR and \fBscroll\fR may be macros.
.PP
The SVr4 documentation says that the optimization of physically scrolling
immediately if the scroll region is the entire screen \*(``is\*('' performed, not
\*(``may be\*('' performed.
This implementation deliberately does not guarantee
that this will occur, to leave open the possibility of smarter
optimization of multiple scroll actions on the next update.
.PP
Neither the SVr4 nor the XSI documentation specify whether the current
attribute or
current color-pair of blanks generated by the scroll function is zeroed.
Under this implementation it is.
.SH PORTABILITY
The XSI Curses standard, Issue 4 describes these functions.
.SH SEE ALSO
\fBcurses\fR(3X), \fBcurs_outopts\fR(3X)
diff --git a/contrib/ncurses/man/curs_slk.3x b/contrib/ncurses/man/curs_slk.3x
index 9eb2dfb4dd43..a99be8f7c188 100644
--- a/contrib/ncurses/man/curs_slk.3x
+++ b/contrib/ncurses/man/curs_slk.3x
@@ -1,318 +1,320 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_slk.3x,v 1.36 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_slk.3x,v 1.37 2020/12/30 18:37:43 tom Exp $
.TH curs_slk 3X ""
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.SH NAME
\fBslk_init\fR,
\fBslk_set\fR,
\fBslk_wset\fR,
\fBslk_refresh\fR,
\fBslk_noutrefresh\fR,
\fBslk_label\fR,
\fBslk_clear\fR,
\fBslk_restore\fR,
\fBslk_touch\fR,
\fBslk_attron\fR,
\fBslk_attrset\fR,
\fBslk_attroff\fR,
\fBslk_attr_on\fR,
\fBslk_attr_set\fR,
\fBslk_attr_off\fR,
\fBslk_attr\fR,
\fBslk_color\fR,
\fBextended_slk_color\fR \- \fBcurses\fR soft label routines
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBint slk_init(int \fP\fIfmt\fP\fB);\fR
.sp
\fBint slk_set(int \fP\fIlabnum\fP\fB, const char *\fP\fIlabel\fP\fB, int \fP\fIfmt\fP\fB);\fR
.br
+/* extension */
+.br
\fBint slk_wset(int \fP\fIlabnum\fP\fB, const wchar_t *\fP\fIlabel\fP\fB, int \fP\fIfmt\fP\fB);\fR
.sp
\fBchar *slk_label(int \fP\fIlabnum\fP\fB);\fR
.sp
\fBint slk_refresh(void);\fR
.br
\fBint slk_noutrefresh(void);\fR
.br
\fBint slk_clear(void);\fR
.br
\fBint slk_restore(void);\fR
.br
\fBint slk_touch(void);\fR
.sp
\fBint slk_attron(const chtype \fP\fIattrs\fP\fB);\fR
.br
\fBint slk_attroff(const chtype \fP\fIattrs\fP\fB);\fR
.br
\fBint slk_attrset(const chtype \fP\fIattrs\fP\fB);\fR
.br
\fBint slk_attr_on(attr_t \fP\fIattrs\fP\fB, void* \fP\fIopts\fP\fB);\fR
.br
\fBint slk_attr_off(const attr_t \fP\fIattrs\fP\fB, void * \fP\fIopts\fP\fB);\fR
.br
\fBint slk_attr_set(const attr_t \fP\fIattrs\fP\fB, short \fP\fIpair\fP\fB, void* \fP\fIopts\fP\fB);\fR
.sp
\fBattr_t slk_attr(void);\fR
.sp
\fBint slk_color(short \fP\fIpair\fP\fB);\fR
.br
/* extension */
.br
\fBint extended_slk_color(int \fP\fIpair\fP\fB);\fR
.SH DESCRIPTION
The slk* functions manipulate the set of soft function-key labels that exist on
many terminals.
For those terminals that do not have soft labels,
\fBcurses\fR takes over the bottom line of \fBstdscr\fR, reducing the size of
\fBstdscr\fR and the variable \fBLINES\fR.
\fBcurses\fR standardizes on eight
labels of up to eight characters each.
In addition to this, the ncurses
implementation supports a mode where it simulates 12 labels of up to five
characters each.
This is useful for PC-like enduser devices.
ncurses simulates this mode by taking over up to two lines at
the bottom of the screen;
it does not try to use any hardware support for this
mode.
.SS Initialization
.PP
The \fBslk_init\fR routine must be called before \fBinitscr\fR or \fBnewterm\fR
is called.
If \fBinitscr\fR eventually uses a line from \fBstdscr\fR to
emulate the soft labels,
then \fIfmt\fR determines how the labels are arranged on the screen:
.RS 3
.TP 3
.B 0
indicates a 3\-2\-3 arrangement of
the labels.
.TP 3
.B 1
indicates a 4\-4 arrangement
.TP 3
.B 2
indicates the PC-like 4\-4\-4 mode.
.TP 3
.B 3
is again the PC-like 4\-4\-4 mode,
but in addition an index line is generated, helping the user to
identify the key numbers easily.
.RE
.SS Labels
.PP
The \fBslk_set\fR routine
(and the \fBslk_wset\fR routine for the wide-character library)
has three parameters:
.RS 3
.TP 5
.I labnum
is the label number, from \fB1\fR to \fB8\fR
(12 for \fIfmt\fP in \fBslk_init\fP is \fB2\fP or \fB3\fP);
.TP
.I label
is be the string to put on the label,
up to eight
(five for \fIfmt\fP in \fBslk_init\fP is \fB2\fP or \fB3\fP)
characters in length.
A null string or a null pointer sets up a blank label.
.TP
.I fmt
is either
\fB0\fR, \fB1\fR, or \fB2\fR, indicating whether the label is to be
left-justified, centered, or right-justified, respectively, within the
label.
.RE
.PP
The \fBslk_label\fR routine returns the current label for label number
\fIlabnum\fR, with leading and trailing blanks stripped.
.SS Screen updates
.PP
The \fBslk_refresh\fR and \fBslk_noutrefresh\fR routines correspond to
the \fBwrefresh\fR and \fBwnoutrefresh\fR routines.
.PP
The \fBslk_clear\fR routine clears the soft labels from the screen.
.PP
The \fBslk_restore\fR routine restores the soft labels to the screen
after a \fBslk_clear\fR has been performed.
.PP
The \fBslk_touch\fR routine forces all the soft labels to be output
the next time a \fBslk_noutrefresh\fR is performed.
.SS Video attributes
.PP
The
\fBslk_attron\fR, \fBslk_attrset\fR, \fBslk_attroff\fR and \fBslk_attr\fR
routines correspond to
\fBattron\fR, \fBattrset\fR, \fBattroff\fR and \fBattr_get\fR, respectively.
They have an effect only if soft labels are simulated on the bottom line of
the screen.
The default highlight for soft keys is A_STANDOUT (as in
System V curses, which does not document this fact).
.SS Colors
.PP
The \fBslk_color\fR routine corresponds to \fBcolor_set\fR.
It has an effect only
if soft labels are simulated on the bottom line of the screen.
.PP
Because \fBslk_color\fR accepts only \fBshort\fP (signed 16-bit integer) values,
this implementation provides
\fBextended_slk_color\fR which accepts an integer value, e.g., 32-bits.
.
.SH RETURN VALUE
These routines return \fBERR\fR upon failure
and \fBOK\fP (SVr4 specifies only "an integer value other than \fBERR\fR")
upon successful completion.
.PP
X/Open defines no error conditions.
In this implementation
.RS 3
.TP 5
\fBslk_attr\fR
returns the attribute used for the soft keys.
.TP 5
.na
.hy 0
\fBslk_attroff\fP, \fBslk_attron\fP, \fBslk_clear\fP, \fBslk_noutrefresh\fP, \fBslk_refresh\fP, \fBslk_touch\fP
.ad
.hy
return an error
if the terminal or the softkeys were not initialized.
.TP 5
\fBslk_attrset\fP
returns an error
if the terminal or the softkeys were not initialized.
.TP 5
\fBslk_attr_set\fP
returns an error
if the terminal or the softkeys were not initialized, or
the color pair is outside the range 0..COLOR_PAIRS\-1.
.TP 5
\fBslk_color\fP
returns an error
if the terminal or the softkeys were not initialized, or
the color pair is outside the range 0..COLOR_PAIRS\-1.
.TP 5
\fBslk_init\fR
returns an error
if the format parameter is outside the range 0..3.
.TP 5
\fBslk_label\fR
returns \fBNULL\fR on error.
.TP 5
\fBslk_set\fP
returns an error
if the terminal or the softkeys were not initialized, or
the \fIlabnum\fP parameter is outside the range of label counts, or
if the format parameter is outside the range 0..2, or if
memory for the labels cannot be allocated.
.RE
.SH HISTORY
SVr3 introduced these functions:
slk_clear
slk_init
slk_label
slk_noutrefresh
slk_refresh
slk_restore
slk_set
slk_touch
.PP
SVr4 added these functions:
slk_attroff
slk_attron
slk_attrset
slk_start
.PP
X/Open Curses added these:
slk_attr_off
slk_attr_on
slk_attr_set
slk_color
slk_wset
.SH EXTENSIONS
.PP
X/Open Curses documents the \fIopts\fP argument as reserved for future use,
saying that it must be null.
This implementation
uses that parameter in ABI 6 for the functions which have a color-pair
parameter to support extended color pairs.
.PP
For functions which modify the color, e.g., \fBslk_attr_set\fP,
if \fIopts\fP is set it is treated as a pointer to \fBint\fP,
and used to set the color pair instead of the \fBshort\fP pair parameter.
.SH NOTES
Most applications would use \fBslk_noutrefresh\fR because a
\fBwrefresh\fR is likely to follow soon.
.SH PORTABILITY
The XSI Curses standard, Issue 4, described the soft-key functions,
with some differences from SVr4 curses:
.bP
It added functions like the SVr4
attribute-manipulation functions \fBslk_attron\fR,
\fBslk_attroff\fR, \fBslk_attrset\fR,
but which use \fBattr_t\fR parameters (rather than \fBchtype\fP),
along with a reserved \fIopts\fP parameter.
.IP
Two of these new functions (unlike the SVr4 functions) have no provision
for color: \fBslk_attr_on\fP and \fBslk_attr_off\fP.
.IP
The third function (\fBslk_attr_set\fP) has a color-pair parameter.
.bP
It added \fBconst\fR qualifiers to parameters (unnecessarily), and
.bP
It added \fBslk_color\fP.
.PP
The format codes \fB2\fR and \fB3\fR for \fBslk_init\fR and the
function \fBslk_attr\fR are specific to ncurses.
.PP
X/Open Curses does not specify a limit for the number of colors and
color pairs which a terminal can support.
However, in its use of \fBshort\fP for the parameters,
it carries over SVr4's implementation detail for the compiled
terminfo database, which uses signed 16-bit numbers.
This implementation provides extended versions of those functions
which use \fBshort\fP parameters,
allowing applications to use larger color- and pair-numbers.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_attr\fR(3X),
\fBcurs_initscr\fR(3X),
\fBcurs_refresh\fR(3X),
\fBcurs_variables\fR(3X).
diff --git a/contrib/ncurses/man/curs_sp_funcs.3x b/contrib/ncurses/man/curs_sp_funcs.3x
index d524c0e2c470..fd1c9b46bd31 100644
--- a/contrib/ncurses/man/curs_sp_funcs.3x
+++ b/contrib/ncurses/man/curs_sp_funcs.3x
@@ -1,379 +1,388 @@
.\"***************************************************************************
-.\" Copyright 2018-2019,2020 Thomas E. Dickey *
+.\" Copyright 2018-2020,2021 Thomas E. Dickey *
.\" Copyright 2010-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_sp_funcs.3x,v 1.18 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_sp_funcs.3x,v 1.24 2021/01/02 23:53:22 tom Exp $
.TH curs_sp_funcs 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.na
.hy 0
.SH NAME
curs_sp_funcs \- \fBcurses\fR screen-pointer extension
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
-\fB#include <term.h>\fR
.nf
.sp
-\fBint alloc_pair_sp(SCREEN*, int, int);\fR
-.br
-\fBint assume_default_colors_sp(SCREEN*, int, int);\fR
-.br
-\fBint baudrate_sp(SCREEN*);\fR
-.br
-\fBint beep_sp(SCREEN*);\fR
+\fBint alloc_pair_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIfg\fP\fB, int \fP\fIbg\fP\fB);\fR
.br
-\fBbool can_change_color_sp(SCREEN*);\fR
+\fBint assume_default_colors_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIfg\fP\fB, int \fP\fIbg\fP\fB);\fR
.br
-\fBint cbreak_sp(SCREEN*);\fR
+\fBint baudrate_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint color_content_sp(SCREEN*, short, short*, short*, short*);\fR
+\fBint beep_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint curs_set_sp(SCREEN*, int);\fR
+\fBbool can_change_color_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint define_key_sp(SCREEN*, const char *, int);\fR
+\fBint cbreak_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint def_prog_mode_sp(SCREEN*);\fR
+\fBint color_content_sp(SCREEN* \fP\fIsp\fP\fB, short \fP\fIcolor\fP\fB, short* \fP\fIr\fP\fB, short* \fP\fIg\fP\fB, short* \fP\fIb\fP\fB);\fR
.br
-\fBint def_shell_mode_sp(SCREEN*);\fR
+\fBint curs_set_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIvisibility\fP);\fR
.br
-\fBint delay_output_sp(SCREEN*, int);\fR
+\fBint def_prog_mode_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint doupdate_sp(SCREEN*);\fR
-.br
-\fBint echo_sp(SCREEN*);\fR
-.br
-\fBint endwin_sp(SCREEN*);\fR
+\fBint def_shell_mode_sp(SCREEN* \fP\fIsp\fP\fB);\fR
+.sp
+\fBint define_key_sp(SCREEN* \fP\fIsp\fP\fB, const char * \fP\fIdefinition\fP\fB, int \fP\fIkeycode\fP\fB);\fR
.br
-\fBchar erasechar_sp(SCREEN*);\fR
+\fBint delay_output_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIms\fP\fB);\fR
.br
-\fBint extended_color_content_sp(SCREEN *, int, int *, int *, int *);\fR
+\fBint doupdate_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint extended_pair_content_sp(SCREEN*, int, int *, int *);\fR
+\fBint echo_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint extended_slk_color_sp(SCREEN*, int);\fR
+\fBint endwin_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBvoid filter_sp(SCREEN*);\fR
+\fBchar erasechar_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint find_pair_sp(SCREEN*, int, int);\fR
+\fBint extended_color_content_sp(SCREEN * \fP\fIsp\fP\fB, int \fP\fIcolor\fP\fB, int * \fP\fIr\fP\fB, int * \fP\fIg\fP\fB, int * \fP\fIb\fP\fB);\fR
.br
-\fBint free_pair_sp(SCREEN*, int);\fR
+\fBint extended_pair_content_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIpair\fP\fB, int * \fP\fIfg\fP\fB, int * \fP\fIbg\fP\fB);\fR
.br
-\fBint flash_sp(SCREEN*);\fR
+\fBint extended_slk_color_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIpair\fP\fB);\fR
.br
-\fBint flushinp_sp(SCREEN*);\fR
+\fBvoid filter_sp(SCREEN* \fP\fIsp\fP\fB);\fR
+.sp
+\fBint find_pair_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIfg\fP\fB, int \fP\fIbg\fP\fB);\fR
.br
-\fBint get_escdelay_sp(SCREEN*);\fR
+\fBint flash_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint getmouse_sp(SCREEN*, MEVENT*);\fR
+\fBint flushinp_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBWINDOW* getwin_sp(SCREEN*, FILE*);\fR
+\fBint free_pair_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIpair\fP\fB);\fR
.br
-\fBint halfdelay_sp(SCREEN*, int);\fR
+\fBint get_escdelay_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBbool has_colors_sp(SCREEN*);\fR
+\fBint getmouse_sp(SCREEN* \fP\fIsp\fP\fB, MEVENT* \fP\fBevent\fP\fB);\fR
.br
-\fBbool has_ic_sp(SCREEN*);\fR
+\fBWINDOW* getwin_sp(SCREEN* \fP\fIsp\fP\fB, FILE* \fP\fIfilep\fP\fB);\fR
.br
-\fBbool has_il_sp(SCREEN*);\fR
+\fBint halfdelay_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fItenths\fP\fB);\fR
.br
-\fBint has_key_sp(SCREEN*, int);\fR
+\fBbool has_colors_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBbool has_mouse_sp(SCREEN*);\fR
+\fBbool has_ic_sp(SCREEN* \fP\fIsp\fP\fB);\fR
+.sp
+\fBbool has_il_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint init_color_sp(SCREEN*, short, short, short, short);\fR
+\fBint has_key_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIch\fP\fB);\fR
.br
-\fBint init_extended_color_sp(SCREEN*, int, int, int, int);\fR
+\fBbool has_mouse_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint init_extended_pair_sp(SCREEN*, int, int, int);\fR
+\fBint init_color_sp(SCREEN* \fP\fIsp\fP\fB, short \fP\fIcolor\fP\fB, short \fP\fIr\fP\fB, short \fP\fIg\fP\fB, short \fP\fIb\fP\fB);\fR
.br
-\fBint init_pair_sp(SCREEN*, short, short, short);\fR
+\fBint init_extended_color_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIcolor\fP\fB, int \fP\fIr\fP\fB, int \fP\fIg\fP\fB, int \fP\fIb\fP\fB);\fR
.br
-\fBint intrflush_sp(SCREEN*, WINDOW*, bool);\fR
+\fBint init_extended_pair_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIpair\fP\fB, int \fP\fIfg\fP\fB, int \fP\fIbg\fP\fB);\fR
.br
-\fBbool isendwin_sp(SCREEN*);\fR
+\fBint init_pair_sp(SCREEN* \fP\fIsp\fP\fB, short \fP\fIpair\fP\fB, short \fP\fIfg\fP\fB, short \fP\fIbg\fP\fB);\fR
.br
-\fBbool is_term_resized_sp(SCREEN*, int, int);\fR
+\fBint intrflush_sp(SCREEN* \fP\fIsp\fP\fB, WINDOW* \fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR
.br
-\fBchar* keybound_sp(SCREEN*, int, int);\fR
+\fBbool is_term_resized_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIlines\fP\fB, int \fP\fIcolumns\fP\fB);\fR
.br
-\fBint key_defined_sp(SCREEN*, const char *);\fR
+\fBbool isendwin_sp(SCREEN* \fP\fIsp\fP\fB);\fR
+.sp
+\fBint key_defined_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIdefinition\fP\fB);\fR
.br
-\fBNCURSES_CONST char * keyname_sp(SCREEN*, int);\fR
+\fBchar* keybound_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIkeycode\fP\fB, int \fP\fIcount\fP\fB);\fR
.br
-\fBint keyok_sp(SCREEN*, int, bool);\fR
+\fBNCURSES_CONST char * keyname_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIc\fP\fB);\fR
.br
-\fBchar killchar_sp(SCREEN*);\fR
+\fBint keyok_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIkeycode\fP\fB, bool \fP\fIenable\fP\fB);\fR
.br
-\fBchar* longname_sp(SCREEN*);\fR
+\fBchar killchar_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint mcprint_sp(SCREEN*, char *, int);\fR
+\fBchar* longname_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint mouseinterval_sp(SCREEN*, int);\fR
+\fBint mcprint_sp(SCREEN* \fP\fIsp\fP\fB, char *\fP\fIdata\fP\fB, int \fP\fIlen\fP\fB);\fR
.br
-\fBmmask_t mousemask_sp(SCREEN*, mmask_t, mmask_t *);\fR
+\fBint mouseinterval_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIerval\fP\fB);\fR
.br
-\fBint mvcur_sp(SCREEN*, int, int, int, int);\fR
+\fBmmask_t mousemask_sp(SCREEN* \fP\fIsp\fP\fB, mmask_t \fP\fInewmask\fP\fB, mmask_t *\fP\fIoldmask\fP\fB);\fR
.br
-\fBint napms_sp(SCREEN*, int);\fR
+\fBint mvcur_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIoldrow\fP\fB, int \fP\fIoldcol\fP\fB, int \fP\fInewrow\fP\fB, int \fP\fInewcol\fP\fB);\fR
+.sp
+\fBint napms_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIms\fP\fB);\fR
.br
-\fBWINDOW* newpad_sp(SCREEN*, int, int);\fR
+\fBWINDOW* newpad_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fInrows\fP\fB, int \fP\fIncols\fP\fB);\fR
.br
\fBSCREEN* new_prescr(void);\fR
.br
-\fBSCREEN* newterm_sp(SCREEN*, const char *, FILE *, FILE *);\fR
-.br
-\fBWINDOW* newwin_sp(SCREEN*, int, int, int, int);\fR
-.br
-\fBint nl_sp(SCREEN*);\fR
-.br
-\fBint nocbreak_sp(SCREEN*);\fR
-.br
-\fBint noecho_sp(SCREEN*);\fR
+\fBSCREEN* newterm_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fItype\fP\fB, FILE *\fP\fIoutfd\fP\fB, FILE *\fP\fIinfd\fP\fB);\fR
.br
-\fBvoid nofilter_sp(SCREEN*);\fR
+\fBWINDOW* newwin_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fInlines\fP\fB, int \fP\fIncols\fP\fB, int \fP\fIbegin_y\fP\fB, int \fP\fIbegin_x\fP\fB);\fR
.br
-\fBint nonl_sp(SCREEN*);\fR
+\fBint nl_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBvoid noqiflush_sp(SCREEN*);\fR
+\fBint nocbreak_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint noraw_sp(SCREEN*);\fR
+\fBint noecho_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint pair_content_sp(SCREEN*, short, short*, short*);\fR
+\fBvoid nofilter_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBvoid qiflush_sp(SCREEN*);\fR
-.br
-\fBint raw_sp(SCREEN*);\fR
-.br
-\fBint reset_prog_mode_sp(SCREEN*);\fR
-.br
-\fBint reset_shell_mode_sp(SCREEN*);\fR
+\fBint nonl_sp(SCREEN* \fP\fIsp\fP\fB);\fR
+.sp
+\fBvoid noqiflush_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint resetty_sp(SCREEN*);\fR
+\fBint noraw_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint resize_term_sp(SCREEN*, int, int);\fR
+\fBint pair_content_sp(SCREEN* \fP\fIsp\fP\fB, short \fP\fIpair\fP\fB, short* \fP\fIfg\fP\fB, short* \fP\fIbg\fP\fB);\fR
.br
-\fBint resizeterm_sp(SCREEN*, int, int);\fR
+\fBvoid qiflush_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint restartterm_sp(SCREEN*, NCURSES_CONST char*, int, int *);\fR
+\fBint raw_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint ripoffline_sp(SCREEN*, int, int (*)(WINDOW*, int));\fR
+\fBint reset_prog_mode_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint savetty_sp(SCREEN*);\fR
+\fBvoid reset_color_pairs_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint scr_init_sp(SCREEN*, const char *);\fR
+\fBint reset_shell_mode_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint scr_restore_sp(SCREEN*, const char *);\fR
+\fBint resetty_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint scr_set_sp(SCREEN*, const char *);\fR
+\fBint resize_term_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIlines\fP\fB, int \fP\fIcolumns\fP\fB);\fR
+.sp
+\fBint resizeterm_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIlines\fP\fB, int \fP\fIcolumns\fP\fB);\fR
.br
-\fBTERMINAL* set_curterm_sp(SCREEN*, TERMINAL*);\fR
+\fBint ripoffline_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIline\fP\fB, int (*\fP\fIinit\fP\fB)(WINDOW* \fP\fIwin\fP\fB, int \fP\fIfmt\fP\fB));\fR
.br
-\fBint set_escdelay_sp(SCREEN*, int);\fR
+\fBint savetty_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint set_tabsize_sp(SCREEN*, int);\fR
+\fBint scr_init_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIfilename\fP\fB);\fR
.br
-\fBint slk_attroff_sp(SCREEN*, const chtype);\fR
+\fBint scr_restore_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIfilename\fP\fB);\fR
.br
-\fBint slk_attron_sp(SCREEN*, const chtype);\fR
+\fBint scr_set_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIfilename\fP\fB);\fR
.br
-\fBint slk_attr_set_sp(SCREEN*, const attr_t, short, void*);\fR
+\fBint set_escdelay_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIms\fP\fB);\fR
.br
-\fBint slk_attrset_sp(SCREEN*, const chtype);\fR
+\fBint set_tabsize_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIcols\fP\fB);\fR
.br
-\fBattr_t slk_attr_sp(SCREEN*);\fR
+\fBint slk_attr_set_sp(SCREEN* \fP\fIsp\fP\fB, const attr_t \fP\fIattrs\fP\fB, short \fP\fIpair\fP\fB, void*\fP\fIopts\fP\fB);\fR
+.sp
+\fBint slk_attrset_sp(SCREEN* \fP\fIsp\fP\fB, const chtype \fP\fIa\fP\fB);\fR
.br
-\fBint slk_clear_sp(SCREEN*);\fR
+\fBint slk_attroff_sp(SCREEN* \fP\fIsp\fP\fB, const chtype \fP\fIa\fP\fB);\fR
.br
-\fBint slk_color_sp(SCREEN*, short);\fR
+\fBint slk_attron_sp(SCREEN* \fP\fIsp\fP\fB, const chtype \fP\fIa\fP\fB);\fR
.br
-\fBint slk_init_sp(SCREEN*, int);\fR
+\fBattr_t slk_attr_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBchar* slk_label_sp(SCREEN*, int);\fR
+\fBint slk_clear_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint slk_noutrefresh_sp(SCREEN*);\fR
+\fBint slk_color_sp(SCREEN* \fP\fIsp\fP\fB, short \fP\fIpair\fP\fB);\fR
.br
-\fBint slk_refresh_sp(SCREEN*);\fR
+\fBint slk_init_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIfmt\fP\fB);\fR
.br
-\fBint slk_restore_sp(SCREEN*);\fR
+\fBchar* slk_label_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIlabnum\fP\fB);\fR
.br
-\fBint slk_set_sp(SCREEN*, int, const char *, int);\fR
+\fBint slk_noutrefresh_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint slk_touch_sp(SCREEN*);\fR
+\fBint slk_refresh_sp(SCREEN* \fP\fIsp\fP\fB);\fR
+.sp
+\fBint slk_restore_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint start_color_sp(SCREEN*);\fR
+\fBint slk_set_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIlabnum\fP\fB, const char * \fP\fIlabel\fP\fB, int \fP\fIfmt\fP\fB);\fR
.br
-\fBattr_t term_attrs_sp(SCREEN*);\fR
+\fBint slk_touch_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBchtype termattrs_sp(SCREEN*);\fR
+\fBint start_color_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBchar* termname_sp(SCREEN*);\fR
+\fBattr_t term_attrs_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint typeahead_sp(SCREEN*, int);\fR
+\fBchtype termattrs_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBNCURSES_CONST char* unctrl_sp(SCREEN*, chtype);\fR
+\fBchar* termname_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBint ungetch_sp(SCREEN*, int);\fR
+\fBint typeahead_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIfd\fP\fB);\fR
.br
-\fBint ungetmouse_sp(SCREEN*,MEVENT *);\fR
+\fBint unget_wch_sp(SCREEN* \fP\fIsp\fP\fB, const wchar_t \fP\fIwch\fP\fB);\fR
.br
-\fBint unget_wch_sp(SCREEN*, const wchar_t);\fR
+\fBint ungetch_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIch\fP\fB);\fR
+.sp
+\fBint ungetmouse_sp(SCREEN* \fP\fIsp\fP\fB,MEVENT * \fP\fBevent\fP\fB);\fR
.br
-\fBint use_default_colors_sp(SCREEN*);\fR
+\fBint use_default_colors_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBvoid use_env_sp(SCREEN*, bool);\fR
+\fBvoid use_env_sp(SCREEN* \fP\fIsp\fP\fB, bool \fP\fIbf\fP\fB);\fR
.br
-\fBvoid use_tioctl_sp(SCREEN *, bool);\fR
+\fBint use_legacy_coding_sp(SCREEN* \fP\fIsp\fP\fB, int \fP\fIlevel\fP\fB);\fR
.br
-\fBint use_legacy_coding_sp(SCREEN*, int);\fR
+\fBvoid use_tioctl_sp(SCREEN *\fP\fIsp\fP\fB, bool \fP\fIbf\fP\fB);\fR
.br
-\fBint vid_attr_sp(SCREEN*, attr_t, short, void *);\fR
+\fBint vid_attr_sp(SCREEN* \fP\fIsp\fP\fB, attr_t \fP\fIattrs\fP\fB, short \fP\fIpair\fP\fB, void * \fP\fIopts\fP\fB);\fR
.br
-\fBint vidattr_sp(SCREEN*, chtype);\fR
+\fBint vid_puts_sp(SCREEN* \fP\fIsp\fP\fB, attr_t \fP\fIattrs\fP\fB, short \fP\fIpair\fP\fB, void * \fP\fIopts\fP\fB, NCURSES_SP_OUTC \fP\fIputc\fP\fB);\fR
.br
-\fBint vid_puts_sp(SCREEN*, attr_t, short, void *, NCURSES_SP_OUTC);\fR
+\fBint vidattr_sp(SCREEN* \fP\fIsp\fP\fB, chtype \fP\fIattrs\fP\fB);\fR
.br
-\fBint vidputs_sp(SCREEN*, chtype, NCURSES_SP_OUTC);\fR
+\fBint vidputs_sp(SCREEN* \fP\fIsp\fP\fB, chtype \fP\fIattrs\fP\fB, NCURSES_SP_OUTC \fP\fIputc\fP\fB);\fR
.br
-\fBwchar_t* wunctrl_sp(SCREEN*, cchar_t *);\fR
+\fBwchar_t* wunctrl_sp(SCREEN* \fP\fIsp\fP\fB, cchar_t *\fP\fIch\fP\fB);\fR
.sp
\fB#include <form.h>\fR
.sp
-\fBFORM* new_form_sp(SCREEN*, FIELD **);\fR
+\fBFORM* new_form_sp(SCREEN* \fP\fIsp\fP\fB, FIELD **\fP\fIfields\fP\fB);\fR
.sp
\fB#include <menu.h>\fR
.sp
-\fBMENU* new_menu_sp(SCREEN*, ITEM **);\fR
+\fBMENU* new_menu_sp(SCREEN* \fP\fIsp\fP\fB, ITEM **\fP\fIitems\fP\fB);\fR
.sp
\fB#include <panel.h>\fR
.sp
-\fBPANEL* ceiling_panel(SCREEN*);\fR
+\fBPANEL* ceiling_panel(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBPANEL* ground_panel(SCREEN*);\fR
+\fBPANEL* ground_panel(SCREEN* \fP\fIsp\fP\fB);\fR
.br
-\fBvoid update_panels_sp(SCREEN*);\fR
+\fBvoid update_panels_sp(SCREEN* \fP\fIsp\fP\fB);\fR
.sp
\fB#include <term.h>\fR
.sp
-\fBint del_curterm_sp(SCREEN*, TERMINAL *);\fR
+\fBint del_curterm_sp(SCREEN* \fP\fIsp\fP\fB, TERMINAL *\fP\fIoterm\fP\fB);\fR
.br
-\fBint putp_sp(SCREEN*, const char *);\fR
+\fBint putp_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIstr\fP\fB);\fR
.br
-\fBint tgetflag_sp(SCREEN*, const char *);\fR
+\fBint restartterm_sp(SCREEN* \fP\fIsp\fP\fB, NCURSES_CONST char*\fP\fIterm\fP\fB, int \fP\fIfiledes\fP\fB, int *\fP\fIerrret\fP\fB);\fR
.br
-\fBint tgetent_sp(SCREEN*, char *, const char *);\fR
+\fBTERMINAL* set_curterm_sp(SCREEN* \fP\fIsp\fP\fB, TERMINAL*\fP\fInterm\fP\fB);\fR
.br
-\fBint tgetnum_sp(SCREEN*, const char *);\fR
+\fBint tgetent_sp(SCREEN* \fP\fIsp\fP\fB, char *\fP\fIbp\fP\fB, const char *\fP\fIname\fP\fB);\fR
.br
-\fBchar* tgetstr_sp(SCREEN*, const char *, char **);\fR
+\fBint tgetflag_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIcapname\fP\fB);\fR
.br
-\fBint tigetflag_sp(SCREEN*, const char *);\fR
+\fBint tgetnum_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIcapname\fP\fB);\fR
.br
-\fBint tigetnum_sp(SCREEN*, const char *);\fR
+\fBchar* tgetstr_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIcapname\fP\fB, char **\fP\fIarea\fP\fB);\fR
.br
-\fBchar* tigetstr_sp(SCREEN*, const char *);\fR
+\fBchar* tgoto_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIcapname\fP\fB, int \fP\fIcol\fP\fB, int \fP\fIrow\fP\fB);\fR
.br
-\fBint tputs_sp(SCREEN*, const char *, int, NCURSES_SP_OUTC);\fR
+\fBint tigetflag_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIcapname\fP\fB);\fR
+.br
+\fBint tigetnum_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIcapname\fP\fB);\fR
+.br
+\fBchar* tigetstr_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIcapname\fP\fB);\fR
+.br
+/* may instead use 9 long parameters */
+.br
+\fBchar* tparm_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIstr\fP\fB, ...);\fR
+.br
+\fBint tputs_sp(SCREEN* \fP\fIsp\fP\fB, const char *\fP\fIstr\fP\fB, int \fP\fIaffcnt\fP\fB, NCURSES_SP_OUTC \fP\fIputc\fP\fB);\fR
+.sp
+\fB#include <unctrl.h>\fR
+.sp
+\fBNCURSES_CONST char* unctrl_sp(SCREEN* \fP\fIsp\fP\fB, chtype \fP\fIc\fP\fB);\fR
.ad
.br
.SH DESCRIPTION
This implementation can be configured to provide a set of functions which
improve the ability to manage multiple screens.
This feature can be added to any of the configurations supported by ncurses;
it adds new entrypoints
without changing the meaning of any of the existing ones.
.PP
.\" ***************************************************************************
.SS IMPROVED FUNCTIONS
Most of the functions are new versions of existing functions.
A parameter is added at the front of the parameter list.
It is a SCREEN pointer.
.PP
The existing functions all use the current screen,
which is a static variable.
The extended functions use the specified screen,
thereby reducing the number of variables which must be modified
to update multiple screens.
.\" ***************************************************************************
.SS NEW FUNCTIONS
Here are the new functions:
.TP 5
ceiling_panel
this returns a pointer to the topmost panel in the given screen.
.TP 5
ground_panel
this returns a pointer to the lowest panel in the given screen.
.TP 5
new_prescr
when creating a new screen, the library uses static variables which
have been preset, e.g., by \fBuse_env\fP(3X), \fBfilter\fP(3X), etc.
With the screen-pointer extension,
there are situations where it must create a current screen before
the unextended library does.
The \fBnew_prescr\fP function is used internally to handle these cases.
It is also provided as an entrypoint to allow applications to customize
the library initialization.
.\" ***************************************************************************
.SH NOTES
This extension introduces some new names:
.TP 5
NCURSES_SP_FUNCS
This is set to the library patch-level number.
In the unextended library, this is zero (0),
to make it useful for checking if the extension is provided.
.TP 5
NCURSES_SP_NAME
The new functions are named using the macro \fINCURSES_SP_NAME\fP,
which hides the actual implementation.
Currently this adds a \*(``_sp\*('' suffix to the name of the unextended function.
This manual page indexes the extensions showing the full name.
However the proper usage of these functions uses the macro,
to provide for the possibility of changing the naming convention
for specific library configurations.
.TP 5
NCURSES_SP_OUTC
This is a new function-pointer type to use in the screen-pointer functions
where an \fINCURSES_OUTC\fP is used in the unextended library.
.TP 5
NCURSES_OUTC
This is a function-pointer type used for the cases where a function passes
characters to the output stream, e.g., \fBvidputs\fP(3X).
.PP
.SH PORTABILITY
These routines are specific to ncurses.
They were not supported on Version 7, BSD or System V implementations.
It is recommended that any code depending on ncurses extensions
be conditioned using \fINCURSES_SP_FUNCS\fP.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_opaque\fR(3X),
\fBcurs_threads\fR(3X).
diff --git a/contrib/ncurses/man/curs_termcap.3x b/contrib/ncurses/man/curs_termcap.3x
index e7422b460bbe..35a8b4442f60 100644
--- a/contrib/ncurses/man/curs_termcap.3x
+++ b/contrib/ncurses/man/curs_termcap.3x
@@ -1,279 +1,338 @@
.\"***************************************************************************
-.\" Copyright 2018-2019,2020 Thomas E. Dickey *
+.\" Copyright 2018-2020,2021 Thomas E. Dickey *
.\" Copyright 1998-2017,2018 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_termcap.3x,v 1.43 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_termcap.3x,v 1.48 2021/01/09 11:07:15 tom Exp $
.TH curs_termcap 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.ds n 5
.SH NAME
\fBPC\fR,
\fBUP\fR,
\fBBC\fR,
\fBospeed\fR,
\fBtgetent\fR,
\fBtgetflag\fR,
\fBtgetnum\fR,
\fBtgetstr\fR,
\fBtgoto\fR,
-\fBtputs\fR \- direct \fBcurses\fR interface to the terminfo capability database
+\fBtputs\fR \- \fBcurses\fR emulation of termcap
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.br
\fB#include <term.h>\fR
.sp
\fBextern char PC;\fR
.br
\fBextern char * UP;\fR
.br
\fBextern char * BC;\fR
.br
\fBextern @NCURSES_OSPEED@ ospeed;\fR
.sp
-\fBint tgetent(char *bp, const char *name);\fR
+\fBint tgetent(char *\fP\fIbp\fP\fB, const char *\fP\fIname\fP\fB);\fR
.br
-\fBint tgetflag(const char *id);\fR
+\fBint tgetflag(const char *\fP\fIid\fP\fB);\fR
.br
-\fBint tgetnum(const char *id);\fR
+\fBint tgetnum(const char *\fP\fIid\fP\fB);\fR
.br
-\fBchar *tgetstr(const char *id, char **area);\fR
+\fBchar *tgetstr(const char *\fP\fIid\fP\fB, char **\fP\fIarea\fP\fB);\fR
.br
-\fBchar *tgoto(const char *cap, int col, int row);\fR
+\fBchar *tgoto(const char *\fP\fIcap\fP\fB, int \fP\fIcol\fP\fB, int \fP\fIrow\fP\fB);\fR
.br
-\fBint tputs(const char *str, int affcnt, int (*putc)(int));\fR
+\fBint tputs(const char *\fP\fIstr\fP\fB, int \fP\fIaffcnt\fP\fB, int (*\fP\fIputc\fP\fB)(int));\fR
.br
.SH DESCRIPTION
These routines are included as a conversion aid for programs that use
the \fItermcap\fR library.
-Their parameters are the same and the
+Their parameters are the same, but the
routines are emulated using the \fIterminfo\fR database.
Thus, they
can only be used to query the capabilities of entries for which a
terminfo entry has been compiled.
.SS INITIALIZATION
.PP
The \fBtgetent\fR routine loads the entry for \fIname\fR.
It returns:
.RS 3
.TP 3
1
on success,
.TP 3
0
if there is no such entry
(or that it is a generic type, having too little information for curses
applications to run), and
.TP 3
\-1
if the terminfo database could not be found.
.RE
.PP
This differs from the \fItermcap\fP library in two ways:
.RS 3
.bP
The emulation ignores the buffer pointer \fIbp\fR.
The \fItermcap\fP library would store a copy of the terminal
description in the area referenced by this pointer.
However, ncurses stores its terminal descriptions in compiled
binary form, which is not the same thing.
.bP
There is a difference in return codes.
The \fItermcap\fP library does not check if the terminal
description is marked with the \fIgeneric\fP capability,
or if the terminal description has cursor-addressing.
.RE
.SS CAPABILITY VALUES
.PP
The \fBtgetflag\fR routine gets the boolean entry for \fIid\fR,
or zero if it is not available.
.PP
The \fBtgetnum\fR routine gets the numeric entry for \fIid\fR,
or \-1 if it is not available.
.PP
The \fBtgetstr\fR routine returns the string entry for \fIid\fR,
or zero if it is not available.
Use \fBtputs\fR to output the returned string.
The \fIarea\fP parameter is used as follows:
.RS 3
.bP
It is assumed to be the address of a pointer to a buffer managed by the
calling application.
.bP
However, ncurses checks to ensure that \fBarea\fP is not NULL,
and also that the resulting buffer pointer is not NULL.
If either check fails, the \fIarea\fP parameter is ignored.
.bP
If the checks succeed, ncurses also copies the return value to
the buffer pointed to by \fIarea\fR,
and the \fIarea\fR value will be updated to point past the null ending
this value.
.bP
The return value itself is an address in the terminal description which
is loaded into memory.
.RE
.PP
Only the first two characters of the \fBid\fR parameter of
\fBtgetflag\fR,
\fBtgetnum\fR and
\fBtgetstr\fR are compared in lookups.
.SS FORMATTING CAPABILITIES
.PP
The \fBtgoto\fR routine expands the given capability using the parameters.
.bP
Because the capability may have padding characters,
the output of \fBtgoto\fP should be passed to \fBtputs\fR
rather than some other output function such as \fBprintf\fP.
.bP
While \fBtgoto\fP is assumed to be used for the two-parameter
cursor positioning capability,
termcap applications also use it for single-parameter capabilities.
.IP
Doing this shows a quirk in \fBtgoto\fP: most hardware
terminals use cursor addressing with \fIrow\fP first,
but the original developers of the termcap interface chose to
put the \fIcolumn\fP parameter first.
The \fBtgoto\fP function swaps the order of parameters.
It does this also for calls requiring only a single parameter.
In that case, the first parameter is merely a placeholder.
.bP
Normally the ncurses library is compiled with terminfo support.
In that case, \fBtgoto\fP uses \fBtparm\fP(3X) (a more capable formatter).
.IP
However, \fBtparm\fP is not a \fItermcap\fP feature,
and portable \fItermcap\fP applications should not rely upon its availability.
.PP
The \fBtputs\fR routine is described on the \fBcurs_terminfo\fR(3X) manual
page.
It can retrieve capabilities by either termcap or terminfo name.
.SS GLOBAL VARIABLES
.PP
The variables
\fBPC\fR,
\fBUP\fR and
\fBBC\fR
are set by \fBtgetent\fR to the terminfo entry's data for
\fBpad_char\fR,
\fBcursor_up\fR and
\fBbackspace_if_not_bs\fR,
respectively.
\fBUP\fR is not used by ncurses.
\fBPC\fR is used in the \fBtdelay_output\fR function.
\fBBC\fR is used in the \fBtgoto\fR emulation.
The variable \fBospeed\fR is set by ncurses in a system-specific coding
to reflect the terminal speed.
.
.SH RETURN VALUE
Except where explicitly noted,
routines that return an integer return \fBERR\fR upon failure and \fBOK\fR
(SVr4 only specifies "an integer value other than \fBERR\fR") upon successful
completion.
.PP
Routines that return pointers return \fBNULL\fR on error.
.SH BUGS
If you call \fBtgetstr\fR to fetch \fBca\fR or any other parameterized string,
be aware that it will be returned in terminfo notation, not the older and
not-quite-compatible termcap notation.
This will not cause problems if all
you do with it is call \fBtgoto\fR or \fBtparm\fR, which both expand
terminfo-style strings as terminfo.
(The \fBtgoto\fR function, if configured to support termcap, will check
if the string is indeed terminfo-style by looking for "%p" parameters or
"$<..>" delays, and invoke a termcap-style parser if the string does not
appear to be terminfo).
.PP
Because terminfo conventions for representing padding in string capabilities
differ from termcap's, \fBtputs("50");\fR will put out a literal \*(``50\*('' rather
than busy-waiting for 50 milliseconds.
Cope with it.
.PP
Note that termcap has nothing analogous to terminfo's \fBsgr\fR string.
One consequence of this is that termcap applications assume \fRme\fR
(terminfo \fBsgr0\fR) does not reset the alternate character set.
This implementation checks for, and modifies the data shown to the
termcap interface to accommodate termcap's limitation in this respect.
.SH PORTABILITY
+.SS Standards
These functions are provided for supporting legacy applications,
and should not be used in new programs:
.bP
The XSI Curses standard, Issue 4 describes these functions.
However, they
are marked TO BE WITHDRAWN and may be removed in future versions.
.bP
X/Open Curses, Issue 5 (December 2007) marked the termcap interface
(along with \fBvwprintw\fP and \fBvwscanw\fP) as withdrawn.
.PP
Neither the XSI Curses standard nor the SVr4 man pages documented the return
values of \fBtgetent\fR correctly, though all three were in fact returned ever
since SVr1.
In particular, an omission in the XSI Curses documentation has been
misinterpreted to mean that \fBtgetent\fR returns \fBOK\fR or \fBERR\fR.
Because the purpose of these functions is to provide compatibility with
the \fItermcap\fR library, that is a defect in XCurses, Issue 4, Version 2
rather than in ncurses.
+.SS Compatibility with BSD Termcap
.PP
External variables are provided for support of certain termcap applications.
However, termcap applications' use of those variables is poorly documented,
e.g., not distinguishing between input and output.
In particular, some applications are reported to declare and/or
modify \fBospeed\fR.
.PP
The comment that only the first two characters of the \fBid\fR parameter
are used escapes many application developers.
The original BSD 4.2 termcap library (and historical relics thereof)
did not require a trailing null NUL on the parameter name passed
to \fBtgetstr\fP, \fBtgetnum\fP and \fBtgetflag\fP.
Some applications assume that the termcap interface does not require
the trailing NUL for the parameter name.
Taking into account these issues:
.bP
As a special case,
\fBtgetflag\fP matched against a single-character identifier
provided that was at the end of the terminal description.
You should not rely upon this behavior in portable programs.
This implementation disallows matches against single-character capability names.
.bP
This implementation disallows matches by the termcap interface against
extended capability names which are longer than two characters.
+.PP
+The BSD termcap function \fBtgetent\fP returns the text of a termcap
+entry in the buffer passed as an argument.
+This library (like other terminfo implementations) does not store
+terminal descriptions as text.
+It sets the buffer contents to a null-terminated string.
+.SS Other Compatibility
+This library includes a termcap.h header,
+for compatibility with other implementations.
+But the header is rarely used because the other implementations
+are not strictly compatible.
+.PP
+The original BSD termcap (through 4.3BSD) had no header file which
+gave function prototypes, because that was a feature of ANSI C.
+BSD termcap was written several years before C was standardized.
+However, there were two different termcap.h header files in the BSD
+sources:
+.bP
+One was used internally by the \fIjove\fP editor in 2BSD through 4.4BSD.
+It defined global symbols for the termcap variables which it used.
+.bP
+The other appeared in 4.4BSD Lite Release 2 (mid-1993)
+as part of \fIlibedit\fP (also known as the \fIeditline\fP library).
+The CSRG source history shows that this was added in mid-1992.
+The \fIlibedit\fP header file was used internally,
+as a convenience for compiling the \fIeditline\fP library.
+It declared function prototypes, but no global variables.
+.PP
+The header file from \fIlibedit\fP was added to NetBSD's termcap
+library in mid-1994.
+.PP
+Meanwhile, GNU termcap was under development, starting in 1990.
+The first release (termcap 1.0) in 1991 included a termcap.h header.
+The second release (termcap 1.1) in September 1992 modified the
+header to use \fBconst\fP for the function prototypes in the header
+where one would expect the parameters to be read-only.
+This was a difference versus the original BSD termcap.
+The prototype for \fBtputs\fP also differed,
+but in that instance, it was \fIlibedit\fP which differed from BSD termcap.
+.PP
+A copy of GNU termcap 1.3 was bundled with \fIbash\fP in mid-1993,
+to support the \fIreadline\fP library.
+.PP
+A termcap.h file was provided in ncurses 1.8.1 (November 1993).
+That reflected influence by \fIemacs\fP (rather than \fIjove\fP)
+and GNU termcap:
+.bP
+it provided declarations for a few global symbols used by \fIemacs\fP
+.bP
+it provided function prototypes (using \fBconst\fP).
+.bP
+a prototype for \fBtparam\fP (a GNU termcap feature) was provided.
+.PP
+Later (in mid-1996) the \fBtparam\fP function was removed from ncurses.
+As a result, there are differences between any of the four implementations,
+which must be taken into account by programs which can work with all
+termcap library interfaces.
.SH SEE ALSO
\fBcurses\fR(3X),
-\fBterminfo\fR(\*n),
+\fBputc\fR(3),
\fBterm_variables\fR(3X),
-\fBputc\fR(3).
+\fBterminfo\fR(\*n).
.sp
https://invisible-island.net/ncurses/tctest.html
diff --git a/contrib/ncurses/man/curs_terminfo.3x b/contrib/ncurses/man/curs_terminfo.3x
index 041c58f0852e..9120a04b9a98 100644
--- a/contrib/ncurses/man/curs_terminfo.3x
+++ b/contrib/ncurses/man/curs_terminfo.3x
@@ -1,641 +1,667 @@
.\"***************************************************************************
-.\" Copyright 2018,2020 Thomas E. Dickey *
+.\" Copyright 2018-2020,2021 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_terminfo.3x,v 1.64 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_terminfo.3x,v 1.72 2021/01/02 23:50:04 tom Exp $
.TH curs_terminfo 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.ds n 5
.na
.hy 0
.SH NAME
\fBdel_curterm\fR,
\fBmvcur\fR,
\fBputp\fR,
\fBrestartterm\fR,
\fBset_curterm\fR,
-\fBsetterm\fR,
\fBsetupterm\fR,
\fBtigetflag\fR,
\fBtigetnum\fR,
\fBtigetstr\fR,
\fBtiparm\fR,
\fBtparm\fR,
\fBtputs\fR,
\fBvid_attr\fR,
\fBvid_puts\fR,
\fBvidattr\fR,
\fBvidputs\fR \- \fBcurses\fR interfaces to terminfo database
.ad
.hy
.SH SYNOPSIS
.nf
\fB#include <curses.h>\fR
-.br
\fB#include <term.h>\fR
.sp
\fBTERMINAL *cur_term;\fR
.sp
\fBconst char * const boolnames[];\fP
\fBconst char * const boolcodes[];\fP
\fBconst char * const boolfnames[];\fP
\fBconst char * const numnames[];\fP
\fBconst char * const numcodes[];\fP
\fBconst char * const numfnames[];\fP
\fBconst char * const strnames[];\fP
\fBconst char * const strcodes[];\fP
\fBconst char * const strfnames[];\fP
.sp
\fBint setupterm(const char *\fR\fIterm\fR\fB, int \fR\fIfiledes\fR\fB, int *\fR\fIerrret\fR\fB);\fR
.br
-\fBint setterm(const char *\fR\fIterm\fR\fB);\fR
-.br
\fBTERMINAL *set_curterm(TERMINAL *\fR\fInterm\fR\fB);\fR
.br
\fBint del_curterm(TERMINAL *\fR\fIoterm\fR\fB);\fR
.br
\fBint restartterm(const char *\fR\fIterm\fR\fB, int \fR\fIfiledes\fR\fB, int *\fR\fIerrret\fR\fB);\fR
.sp
\fBchar *tparm(const char *\fR\fIstr\fR\fB, ...);\fR
.br
\fBint tputs(const char *\fR\fIstr\fR\fB, int \fR\fIaffcnt\fR\fB, int (*\fR\fIputc\fR\fB)(int));\fR
.br
\fBint putp(const char *\fR\fIstr\fR\fB);\fR
.sp
\fBint vidputs(chtype \fR\fIattrs\fR\fB, int (*\fR\fIputc\fR\fB)(int));\fR
.br
\fBint vidattr(chtype \fR\fIattrs\fR\fB);\fR
.br
\fBint vid_puts(attr_t \fR\fIattrs\fR\fB, short \fR\fIpair\fR\fB, void *\fR\fIopts\fR\fB, int (*\fR\fIputc\fR\fB)(int));\fR
.br
\fBint vid_attr(attr_t \fR\fIattrs\fR\fB, short \fR\fIpair\fR\fB, void *\fR\fIopts\fR\fB);\fR
.sp
\fBint mvcur(int \fR\fIoldrow\fR\fB, int \fR\fIoldcol\fR\fB, int \fR\fInewrow\fR, int \fR\fInewcol\fR\fB);\fR
.sp
\fBint tigetflag(const char *\fR\fIcapname\fR\fB);\fR
.br
\fBint tigetnum(const char *\fR\fIcapname\fR\fB);\fR
.br
\fBchar *tigetstr(const char *\fR\fIcapname\fR\fB);\fR
.sp
\fBchar *tiparm(const char *\fR\fIstr\fR\fB, ...);\fR
.br
.fi
.SH DESCRIPTION
These low-level routines must be called by programs that have to deal
directly with the \fBterminfo\fR database to handle certain terminal
capabilities, such as programming function keys.
For all other
functionality, \fBcurses\fR routines are more suitable and their use is
recommended.
+.PP
+None of these functions use (or are aware of) multibyte character strings
+such as UTF-8:
+.bP
+capability names use the POSIX portable character set
+.bP
+capability string values have no associated encoding;
+they are strings of 8-bit characters.
.SS Initialization
.PP
Initially, \fBsetupterm\fR should be called.
The high-level curses functions \fBinitscr\fR and
\fBnewterm\fR call \fBsetupterm\fP to initialize the
low-level set of terminal-dependent variables
[listed in \fBterminfo\fR(\*n)].
.PP
Applications can use the
terminal capabilities either directly (via header definitions),
or by special functions.
The header files \fBcurses.h\fR and \fBterm.h\fR should be included (in this
order) to get the definitions for these strings, numbers, and flags.
.PP
The \fBterminfo\fR variables
\fBlines\fR and \fBcolumns\fR are initialized by \fBsetupterm\fR as
follows:
.bP
If \fBuse_env(FALSE)\fR has been called, values for
\fBlines\fR and \fBcolumns\fR specified in \fBterminfo\fR are used.
.bP
Otherwise, if the environment variables \fBLINES\fR and \fBCOLUMNS\fR
exist, their values are used.
If these environment variables do not
exist and the program is running in a window, the current window size
is used.
Otherwise, if the environment variables do not exist, the
values for \fBlines\fR and \fBcolumns\fR specified in the
\fBterminfo\fR database are used.
.PP
Parameterized strings should be passed through \fBtparm\fR to instantiate them.
All \fBterminfo\fR strings
(including the output of \fBtparm\fR)
should be printed
with \fBtputs\fR or \fBputp\fR.
Call \fBreset_shell_mode\fR to restore the
tty modes before exiting [see \fBcurs_kernel\fR(3X)].
.PP
Programs which use
cursor addressing should
.bP
output \fBenter_ca_mode\fR upon startup and
.bP
output \fBexit_ca_mode\fR before exiting.
.PP
Programs which execute shell subprocesses should
.bP
call \fBreset_shell_mode\fR and
output \fBexit_ca_mode\fR before the shell
is called and
.bP
output \fBenter_ca_mode\fR and
call \fBreset_prog_mode\fR after returning from the shell.
.PP
The \fBsetupterm\fR routine reads in the \fBterminfo\fR database,
initializing the \fBterminfo\fR structures, but does not set up the
output virtualization structures used by \fBcurses\fR.
These are its parameters:
.RS 3
.TP 5
\fIterm\fP
is the terminal type, a character string.
If \fIterm\fR is null, the environment variable \fBTERM\fR is used.
.TP 5
\fIfiledes\fP
is the file descriptor used for all output.
.TP 5
\fIerrret\fP
points to an optional location where an error status can be returned to
the caller.
If \fIerrret\fR is not null,
then \fBsetupterm\fR returns \fBOK\fR or
\fBERR\fR and stores a status value in the integer pointed to by
\fIerrret\fR.
A return value of \fBOK\fR combined with status of \fB1\fR in \fIerrret\fR
is normal.
.IP
If \fBERR\fR is returned, examine \fIerrret\fR:
.RS
.TP 5
.B 1
means that the terminal is hardcopy, cannot be used for curses applications.
.IP
\fBsetupterm\fP determines if the entry is a hardcopy type by
checking the \fBhc\fP (\fBhardcopy\fP) capability.
.TP 5
.B 0
means that the terminal could not be found,
or that it is a generic type,
having too little information for curses applications to run.
.IP
\fBsetupterm\fP determines if the entry is a generic type by
checking the \fBgn\fP (\fBgeneric\fP) capability.
.TP 5
.B \-1
means that the \fBterminfo\fR database could not be found.
.RE
.IP
If \fIerrret\fR is
null, \fBsetupterm\fR prints an error message upon finding an error
and exits.
Thus, the simplest call is:
.sp
\fBsetupterm((char *)0, 1, (int *)0);\fR,
.sp
which uses all the defaults and sends the output to \fBstdout\fR.
.RE
-.PP
-The \fBsetterm\fR routine was replaced by \fBsetupterm\fR. The call:
-.sp
- \fBsetupterm(\fR\fIterm\fR\fB, 1, (int *)0)\fR
-.sp
-provides the same functionality as \fBsetterm(\fR\fIterm\fR\fB)\fR.
-The \fBsetterm\fR routine is provided for BSD compatibility, and
-is not recommended for new programs.
.\" ***************************************************************************
.SS The Terminal State
.PP
The \fBsetupterm\fR routine stores its information about the terminal
in a \fBTERMINAL\fP structure pointed to by the global variable \fBcur_term\fP.
If it detects an error,
or decides that the terminal is unsuitable (hardcopy or generic),
it discards this information,
making it not available to applications.
.PP
If \fBsetupterm\fP is called repeatedly for the same terminal type,
it will reuse the information.
It maintains only one copy of a given terminal's capabilities in memory.
If it is called for different terminal types,
\fBsetupterm\fP allocates new storage for each set of terminal capabilities.
.PP
The \fBset_curterm\fR routine sets \fBcur_term\fR to
\fInterm\fR, and makes all of the \fBterminfo\fR boolean, numeric, and
string variables use the values from \fInterm\fR.
It returns the old value of \fBcur_term\fR.
.PP
The \fBdel_curterm\fR routine frees the space pointed to by
\fIoterm\fR and makes it available for further use.
If \fIoterm\fR is
the same as \fBcur_term\fR, references to any of the \fBterminfo\fR
boolean, numeric, and string variables thereafter may refer to invalid
memory locations until another \fBsetupterm\fR has been called.
.PP
The \fBrestartterm\fR routine is similar to \fBsetupterm\fR and \fBinitscr\fR,
except that it is called after restoring memory to a previous state (for
example, when reloading a game saved as a core image dump).
\fBrestartterm\fP assumes that the windows and the input and output options
are the same as when memory was saved,
but the terminal type and baud rate may be different.
Accordingly, \fBrestartterm\fP saves various tty state bits,
calls \fBsetupterm\fP, and then restores the bits.
.\" ***************************************************************************
.SS Formatting Output
.PP
The \fBtparm\fR routine instantiates the string \fIstr\fR with
parameters \fIpi\fR. A pointer is returned to the result of \fIstr\fR
with the parameters applied.
Application developers should keep in mind these quirks of the interface:
.bP
Although \fBtparm\fP's actual parameters may be integers or strings,
the prototype expects \fBlong\fP (integer) values.
.bP
Aside from the \fBset_attributes\fP (\fBsgr\fP) capability,
most terminal capabilities require no more than one or two parameters.
.PP
\fBtiparm\fP is a newer form of \fBtparm\fP which uses \fI<stdarg.h>\fP
rather than a fixed-parameter list.
Its numeric parameters are integers (int) rather than longs.
.\" ***************************************************************************
.SS Output Functions
.PP
The \fBtputs\fR routine applies padding information to the string
\fIstr\fR and outputs it:
.bP
The \fIstr\fR parameter must be a terminfo string
variable or the return value from
\fBtparm\fR, \fBtiparm\fP, \fBtgetstr\fR, or \fBtgoto\fR.
.IP
The \fBtgetstr\fP and \fBtgoto\fP functions are part of the \fItermcap\fP
interface,
which happens to share this function name with the \fIterminfo\fP interface.
.bP
\fIaffcnt\fR is the number of lines affected, or 1 if
not applicable.
.bP
\fIputc\fR is a \fBputchar\fR-like routine to which
the characters are passed, one at a time.
.PP
The \fBputp\fR routine calls \fBtputs(\fR\fIstr\fR\fB, 1, putchar)\fR.
The output of \fBputp\fR always goes to \fBstdout\fR, rather than
the \fIfiledes\fR specified in \fBsetupterm\fR.
.PP
The \fBvidputs\fR routine displays the string on the terminal in the
video attribute mode \fIattrs\fR, which is any combination of the
attributes listed in \fBcurses\fR(3X).
The characters are passed to
the \fBputchar\fR-like routine \fIputc\fR.
.PP
The \fBvidattr\fR routine is like the \fBvidputs\fR routine, except
that it outputs through \fBputchar\fR.
.PP
The \fBvid_attr\fR and \fBvid_puts\fR routines correspond
to vidattr and vidputs, respectively.
They use a set of arguments for representing the video attributes plus color,
i.e.,
.bP
\fIattrs\fP of type \fBattr_t\fP for the attributes and
.bP
\fIpair\fP of type \fBshort\fP for the color-pair number.
.PP
The \fBvid_attr\fR and \fBvid_puts\fR routines
are designed to use the attribute constants with the \fIWA_\fR prefix.
.PP
X/Open Curses reserves the \fIopts\fP argument for future use,
saying that applications must provide a null pointer for that argument.
As an extension,
this implementation allows \fIopts\fP to be used as a pointer to \fBint\fP,
which overrides the \fIpair\fP (\fBshort\fP) argument.
.PP
The \fBmvcur\fR routine provides low-level cursor motion.
-It takes
-effect immediately (rather than at the next refresh).
+It takes effect immediately (rather than at the next refresh).
+.PP
+While \fBputp\fR and \fBmvcur\fP are low-level functions which
+do not use the high-level curses state,
+they are declared in \fB<curses.h>\fP because SystemV did this
+(see \fBHISTORY\fP).
.\" ***************************************************************************
.SS Terminal Capability Functions
.PP
The \fBtigetflag\fR, \fBtigetnum\fR and \fBtigetstr\fR routines return
the value of the capability corresponding to the \fBterminfo\fR
\fIcapname\fR passed to them, such as \fBxenl\fR.
The \fIcapname\fR for each capability is given in the table column entitled
\fIcapname\fR code in the capabilities section of \fBterminfo\fR(\*n).
.PP
These routines return special values to denote errors.
.PP
The \fBtigetflag\fR routine returns
.TP
\fB\-1\fR
if \fIcapname\fR is not a boolean capability,
or
.TP
\fB0\fR
if it is canceled or absent from the terminal description.
.PP
The \fBtigetnum\fR routine returns
.TP
\fB\-2\fR
if \fIcapname\fR is not a numeric capability, or
.TP
\fB\-1\fR
if it is canceled or absent from the terminal description.
.PP
The \fBtigetstr\fR routine returns
.TP
\fB(char *)\-1\fR
if \fIcapname\fR is not a string capability,
or
.TP
\fB0\fR
if it is canceled or absent from the terminal description.
.\" ***************************************************************************
.SS Terminal Capability Names
.PP
These null-terminated arrays contain
.bP
the short terminfo names (\*(``codes\*(''),
.bP
-the \fBtermcap\fR names (\*(``names\*('', and
+the \fBtermcap\fR names (\*(``names\*(''), and
.bP
the long terminfo names (\*(``fnames\*('')
.PP
for each of the predefined \fBterminfo\fR variables:
.sp
.RS
\fBconst char *boolnames[]\fR, \fB*boolcodes[]\fR, \fB*boolfnames[]\fR
.br
\fBconst char *numnames[]\fR, \fB*numcodes[]\fR, \fB*numfnames[]\fR
.br
\fBconst char *strnames[]\fR, \fB*strcodes[]\fR, \fB*strfnames[]\fR
.RE
.SH RETURN VALUE
Routines that return an integer return \fBERR\fR upon failure and \fBOK\fR
(SVr4 only specifies \*(``an integer value other than \fBERR\fR\*('')
upon successful completion,
unless otherwise noted in the preceding routine descriptions.
.PP
Routines that return pointers always return \fBNULL\fR on error.
.PP
X/Open defines no error conditions.
In this implementation
.RS 3
.TP 5
\fBdel_curterm\fP
returns an error
if its terminal parameter is null.
.TP 5
\fBputp\fP
calls \fBtputs\fP, returning the same error-codes.
.TP 5
\fBrestartterm\fP
returns an error
if the associated call to \fBsetupterm\fP returns an error.
.TP 5
\fBsetupterm\fP
returns an error
if it cannot allocate enough memory, or
create the initial windows (stdscr, curscr, newscr).
Other error conditions are documented above.
.TP 5
\fBtputs\fP
returns an error if the string parameter is null.
It does not detect I/O errors:
X/Open states that \fBtputs\fP ignores the return value
of the output function \fIputc\fP.
.RE
+.\" ***************************************************************************
+.SS Compatibility macros
+This implementation provides a few macros for compatibility with systems
+before SVr4 (see \fBHISTORY\fP).
+Those include
+\fBcrmode\fP,
+\fBfixterm\fP,
+\fBgettmode\fP,
+\fBnocrmode\fP,
+\fBresetterm\fP,
+\fBsaveterm\fP, and
+\fBsetterm\fP.
+.PP
+In SVr4, those are found in \fB<curses.h>\fP,
+but except for \fBsetterm\fR, are likewise macros.
+The one function, \fBsetterm\fR, is mentioned in the manual page.
+The manual page notes that the \fBsetterm\fR routine
+was replaced by \fBsetupterm\fR, stating that the call:
+.sp
+ \fBsetupterm(\fR\fIterm\fR\fB, 1, (int *)0)\fR
+.sp
+provides the same functionality as \fBsetterm(\fR\fIterm\fR\fB)\fR,
+and is not recommended for new programs.
+This implementation provides each of those symbols
+as macros for BSD compatibility,
+.\" ***************************************************************************
.SH HISTORY
.PP
SVr2 introduced the terminfo feature.
Its programming manual mentioned these low-level functions:
.TS
l l
_ _
l l.
\fBFunction\fR \fBDescription\fR
fixterm restore tty to \*(``in curses\*('' state
gettmode establish current tty modes
mvcur low level cursor motion
putp T{
utility function that uses \fBtputs\fP to send characters via \fBputchar\fP.
T}
resetterm set tty modes to \*(``out of curses\*('' state
resetty reset tty flags to stored value
saveterm save current modes as \*(``in curses\*('' state
savetty store current tty flags
setterm establish terminal with given type
setupterm establish terminal with given type
tparm instantiate a string expression with parameters
tputs apply padding information to a string
vidattr like \fBvidputs\fP, but outputs through \fBputchar\fP
vidputs T{
output a string to put terminal in a specified video attribute mode
T}
.TE
.PP
The programming manual also mentioned
functions provided for termcap compatibility
(commenting that they \*(``may go away at a later date\*(''):
.TS
l l
_ _
l l.
\fBFunction\fR \fBDescription\fR
tgetent look up termcap entry for given \fIname\fP
tgetflag get boolean entry for given \fIid\fP
tgetnum get numeric entry for given \fIid\fP
tgetstr get string entry for given \fIid\fP
tgoto apply parameters to given capability
tputs T{
apply padding to capability, calling a function to put characters
T}
.TE
.PP
Early terminfo programs obtained capability values from the
\fBTERMINAL\fP structure initialized by \fBsetupterm\fR.
.PP
SVr3 extended terminfo by adding functions to retrieve capability values
(like the termcap interface),
and reusing tgoto and tputs:
.TS
l l
_ _
l l.
\fBFunction\fR \fBDescription\fR
tigetflag get boolean entry for given \fIid\fP
tigetnum get numeric entry for given \fIid\fP
tigetstr get string entry for given \fIid\fP
.TE
.PP
SVr3 also replaced several of the SVr2 terminfo functions
which had no counterpart in the termcap interface,
documenting them as obsolete:
.TS
l l
_ _
l l.
\fBFunction\fR \fBReplaced by\fP
crmode cbreak
fixterm reset_prog_mode
gettmode N/A
nocrmode nocbreak
resetterm reset_shell_mode
saveterm def_prog_mode
setterm setupterm
.TE
.PP
SVr3 kept the \fBmvcur\fP, \fBvidattr\fP and \fBvidputs\fP functions,
along with \fBputp\fP, \fBtparm\fP and \fBtputs\fP.
The latter were needed to support padding,
and handling functions such as \fBvidattr\fP
(which used more than the two parameters supported by \fBtgoto\fP).
.PP
SVr3 introduced the functions for switching between terminal
descriptions, e.g., \fBset_curterm\fP.
The various global variables such as \fBboolnames\fP were mentioned
in the programming manual at this point.
.PP
SVr4 added the \fBvid_attr\fP and \fBvid_puts\fP functions.
.PP
There are other low-level functions declared in the curses header files
on Unix systems,
but none were documented.
The functions marked \*(``obsolete\*('' remained in use
by the Unix \fBvi\fP editor.
.SH PORTABILITY
.SS Legacy functions
.PP
X/Open notes that \fBvidattr\fR and \fBvidputs\fR may be macros.
.PP
The function \fBsetterm\fR is not described by X/Open and must
be considered non-portable.
All other functions are as described by X/Open.
.SS Legacy data
.PP
\fBsetupterm\fP copies the terminal name to the array \fBttytype\fP.
This is not part of X/Open Curses, but is assumed by some applications.
.PP
Other implementions may not declare the capability name arrays.
Some provide them without declaring them.
X/Open does not specify them.
.PP
Extended terminal capability names, e.g., as defined by \fB@TIC@\ \-x\fP,
are not stored in the arrays described here.
.SS Output buffering
.PP
Older versions of \fBncurses\fP assumed that the file descriptor passed to
\fBsetupterm\fP from \fBinitscr\fP or \fBnewterm\fP uses buffered I/O,
and would write to the corresponding stream.
In addition to the limitation that the terminal was left in block-buffered
mode on exit (like System V curses),
it was problematic because \fBncurses\fP
did not allow a reliable way to cleanup on receiving SIGTSTP.
.PP
The current version (ncurses6)
uses output buffers managed directly by \fBncurses\fP.
Some of the low-level functions described in this manual page write
to the standard output.
They are not signal-safe.
The high-level functions in \fBncurses\fP use
alternate versions of these functions
using the more reliable buffering scheme.
.SS Function prototypes
.PP
The X/Open Curses prototypes are based on the SVr4 curses header declarations,
which were defined at the same time the C language was first standardized in
the late 1980s.
.bP
X/Open Curses uses \fBconst\fP less effectively than a later design might,
in some cases applying it needlessly to values are already constant,
and in most cases overlooking parameters which normally would use \fBconst\fP.
Using constant parameters for functions which do not use \fBconst\fP
may prevent the program from compiling.
On the other hand, \fIwritable strings\fP are an obsolescent feature.
.IP
As an extension, this implementation can be configured to change the
function prototypes to use the \fBconst\fP keyword.
The ncurses ABI 6 enables this feature by default.
.bP
X/Open Curses prototypes \fBtparm\fR with a fixed number of parameters,
rather than a variable argument list.
.IP
This implementation uses a variable argument list, but can be
configured to use the fixed-parameter list.
Portable applications should provide 9 parameters after the format;
zeroes are fine for this purpose.
.IP
In response to review comments by Thomas E. Dickey,
X/Open Curses Issue 7 proposed the \fBtiparm\fP function in mid-2009.
.SS Special TERM treatment
.PP
If configured to use the terminal-driver,
e.g., for the MinGW port,
.bP
\fBsetupterm\fP interprets a missing/empty TERM variable as the
special value \*(``unknown\*(''.
.bP
\fBsetupterm\fP allows explicit use of the
the windows console driver by checking if $TERM is set to
\*(``#win32con\*('' or an abbreviation of that string.
.SS Other portability issues
.PP
In System V Release 4, \fBset_curterm\fR has an \fBint\fR return type and
returns \fBOK\fR or \fBERR\fR. We have chosen to implement the X/Open Curses
semantics.
.PP
In System V Release 4, the third argument of \fBtputs\fR has the type
\fBint (*putc)(char)\fR.
.PP
At least one implementation of X/Open Curses (Solaris) returns a value
other than \fBOK\fP/\fBERR\fP from \fBtputs\fP.
That returns the length of the string, and does no error-checking.
.PP
X/Open notes that after calling \fBmvcur\fR, the curses state may not match the
actual terminal state, and that an application should touch and refresh
the window before resuming normal curses calls.
Both \fBncurses\fP and System V Release 4 curses implement \fBmvcur\fR using
the SCREEN data allocated in either \fBinitscr\fR or \fBnewterm\fR.
So though it is documented as a terminfo function,
\fBmvcur\fR is really a curses function which is not well specified.
.PP
X/Open states that the old location must be given for \fBmvcur\fP.
This implementation allows the caller to use \-1's for the old ordinates.
In that case, the old location is unknown.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_initscr\fR(3X),
\fBcurs_kernel\fR(3X),
\fBcurs_termcap\fR(3X),
\fBcurs_variables\fR(3X),
\fBterm_variables\fR(3X),
\fBputc\fR(3),
\fBterminfo\fR(\*n)
diff --git a/contrib/ncurses/man/curs_threads.3x b/contrib/ncurses/man/curs_threads.3x
index 95afb8732eb4..cb2da61a55df 100644
--- a/contrib/ncurses/man/curs_threads.3x
+++ b/contrib/ncurses/man/curs_threads.3x
@@ -1,603 +1,603 @@
.\"***************************************************************************
.\" Copyright 2020 Thomas E. Dickey *
.\" Copyright 2008-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_threads.3x,v 1.25 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_threads.3x,v 1.27 2020/12/30 18:28:51 tom Exp $
.TH curs_threads 3X ""
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.SH NAME
\fBcurs_threads\fR \- \fBcurses\fR thread support
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBtypedef int (*NCURSES_WINDOW_CB)(WINDOW *, void *);\fR
.br
\fBtypedef int (*NCURSES_SCREEN_CB)(SCREEN *, void *);\fR
-.br
+.sp
\fBint get_escdelay(void);\fR
.br
-\fBint set_escdelay(int size);\fR
+\fBint set_escdelay(int \fP\fIms\fP\fB);\fR
.br
-\fBint set_tabsize(int size);\fR
-.br
-\fBint use_screen(SCREEN *scr, NCURSES_SCREEN_CB func, void *data);\fR
+\fBint set_tabsize(int \fP\fIcols\fP\fB);\fR
+.sp
+\fBint use_screen(SCREEN *\fP\fIscr\fP\fB, NCURSES_SCREEN_CB \fP\fIfunc\fP\fB, void *\fP\fIdata\fP\fB);\fR
.br
-\fBint use_window(WINDOW *win, NCURSES_WINDOW_CB func, void *data);\fR
+\fBint use_window(WINDOW *\fP\fIwin\fP\fB, NCURSES_WINDOW_CB \fP\fIfunc\fP\fB, void *\fP\fIdata\fP\fB);\fR
.br
.SH DESCRIPTION
This implementation can be configured to provide rudimentary support
for multi-threaded applications.
This makes a different set of libraries, e.g., \fIlibncursest\fP since
the binary interfaces are different.
.PP
Rather than modify the interfaces to pass a thread specifier to
each function, it adds a few functions which can be used in any
configuration which hide the mutex's needed to prevent concurrent
use of the global variables when configured for threading.
.PP
In addition to forcing access to members of the \fBWINDOW\fP structure
to be via functions (see \fBcurs_opaque\fP(3X)),
it makes functions of the common global variables,
e.g.,
COLORS,
COLOR_PAIRS,
COLS,
ESCDELAY,
LINES,
TABSIZE
curscr,
newscr and
ttytype.
Those variables are maintained as read-only values, stored in the \fBSCREEN\fP
structure.
.PP
Even this is not enough to make a thread-safe application using curses.
A multi-threaded application would be expected to have threads updating
separate windows (within the same device),
or updating on separate screens (on different devices).
Also, a few of the global variables are considered writable by some
applications.
The functions described here address these special situations.
.PP
The ESCDELAY and TABSIZE global variables are modified by some applications.
To modify them in any configuration,
use the \fBset_escdelay\fP or \fBset_tabsize\fP functions.
Other global variables are not modifiable.
.PP
The \fBget_escdelay\fP function returns the value for ESCDELAY.
.PP
The \fBuse_window\fP and \fBuse_screen\fP functions provide coarse
granularity mutexes for their respective \fBWINDOW\fP and \fBSCREEN\fP
parameters, and call a user-supplied function,
passing it a \fIdata\fP parameter,
and returning the value from the user-supplied function to the application.
.\" ***************************************************************************
.SS USAGE
All of the ncurses library functions assume that the locale is not
altered during operation.
In addition,
they use data which is maintained within a hierarchy of scopes.
.RS 3
.bP
global data, e.g., used in the low-level terminfo or termcap interfaces.
.bP
terminal data, e.g., associated with a call to \fIset_curterm\fP.
The terminal data are initialized when screens are created.
.bP
screen data, e.g., associated with a call to \fInewterm\fP or \fIinitscr\fP.
.bP
window data, e.g., associated with a call to \fInewwin\fP or \fIsubwin\fP.
Windows are associated with screens.
Pads are not necessarily associated with a particular screen.
.IP
Most curses applications operate on one or more windows within a single screen.
.bP
reentrant, i.e., it uses only the data passed as parameters.
.RE
.PP
This table lists the scope of data used for each symbol in the
ncurses library when it is configured to support threading:
.TS
center tab(/);
l l
l l .
Symbol/Scope
=
BC/global
COLORS/screen (readonly)
COLOR_PAIR/reentrant
COLOR_PAIRS/screen (readonly)
COLS/screen (readonly)
ESCDELAY/screen (readonly, see \fIset_escdelay\fP)
LINES/screen (readonly)
PAIR_NUMBER/reentrant
PC/global
SP/global
TABSIZE/screen (readonly)
UP/global
acs_map/screen (readonly)
add_wch/window (stdscr)
add_wchnstr/window (stdscr)
add_wchstr/window (stdscr)
addch/window (stdscr)
addchnstr/window (stdscr)
addchstr/window (stdscr)
addnstr/window (stdscr)
addnwstr/window (stdscr)
addstr/window (stdscr)
addwstr/window (stdscr)
assume_default_colors/screen
attr_get/window (stdscr)
attr_off/window (stdscr)
attr_on/window (stdscr)
attr_set/window (stdscr)
attroff/window (stdscr)
attron/window (stdscr)
attrset/window (stdscr)
baudrate/screen
beep/screen
bkgd/window (stdscr)
bkgdset/window (stdscr)
bkgrnd/window (stdscr)
bkgrndset/window (stdscr)
boolcodes/global (readonly)
boolfnames/global (readonly)
boolnames/global (readonly)
border/window (stdscr)
border_set/window (stdscr)
box/window (stdscr)
box_set/window (stdscr)
can_change_color/terminal
cbreak/screen
chgat/window (stdscr)
clear/window (stdscr)
clearok/window
clrtobot/window (stdscr)
clrtoeol/window (stdscr)
color_content/screen
color_set/window (stdscr)
copywin/window locks(source, target)
cur_term/terminal
curs_set/screen
curscr/screen (readonly)
curses_version/global (readonly)
def_prog_mode/terminal
def_shell_mode/terminal
define_key/screen
del_curterm/screen
delay_output/screen
delch/window (stdscr)
deleteln/window (stdscr)
delscreen/global locks(screenlist, screen)
delwin/global locks(windowlist)
derwin/screen
doupdate/screen
dupwin/screen locks(window)
echo/screen
echo_wchar/window (stdscr)
echochar/window (stdscr)
endwin/screen
erase/window (stdscr)
erasechar/window (stdscr)
erasewchar/window (stdscr)
filter/global
flash/terminal
flushinp/screen
get_wch/screen (input-operation)
get_wstr/screen (input-operation)
getattrs/window
getbegx/window
getbegy/window
getbkgd/window
getbkgrnd/window
getcchar/reentrant
getch/screen (input-operation)
getcurx/window
getcury/window
getmaxx/window
getmaxy/window
getmouse/screen (input-operation)
getn_wstr/screen (input-operation)
getnstr/screen (input-operation)
getparx/window
getpary/window
getstr/screen (input-operation)
getwin/screen (input-operation)
halfdelay/screen
has_colors/terminal
has_ic/terminal
has_il/terminal
has_key/screen
hline/window (stdscr)
hline_set/window (stdscr)
idcok/window
idlok/window
immedok/window
in_wch/window (stdscr)
in_wchnstr/window (stdscr)
in_wchstr/window (stdscr)
inch/window (stdscr)
inchnstr/window (stdscr)
inchstr/window (stdscr)
init_color/screen
init_pair/screen
initscr/global locks(screenlist)
innstr/window (stdscr)
innwstr/window (stdscr)
ins_nwstr/window (stdscr)
ins_wch/window (stdscr)
ins_wstr/window (stdscr)
insch/window (stdscr)
insdelln/window (stdscr)
insertln/window (stdscr)
insnstr/window (stdscr)
insstr/window (stdscr)
instr/window (stdscr)
intrflush/terminal
inwstr/window (stdscr)
is_cleared/window
is_idcok/window
is_idlok/window
is_immedok/window
is_keypad/window
is_leaveok/window
is_linetouched/window
is_nodelay/window
is_notimeout/window
is_scrollok/window
is_syncok/window
is_term_resized/terminal
is_wintouched/window
isendwin/screen
key_defined/screen
key_name/global (static data)
keybound/screen
keyname/global (static data)
keyok/screen
keypad/window
killchar/terminal
killwchar/terminal
leaveok/window
longname/screen
mcprint/terminal
meta/screen
mouse_trafo/window (stdscr)
mouseinterval/screen
mousemask/screen
move/window (stdscr)
mvadd_wch/window (stdscr)
mvadd_wchnstr/window (stdscr)
mvadd_wchstr/window (stdscr)
mvaddch/window (stdscr)
mvaddchnstr/window (stdscr)
mvaddchstr/window (stdscr)
mvaddnstr/window (stdscr)
mvaddnwstr/window (stdscr)
mvaddstr/window (stdscr)
mvaddwstr/window (stdscr)
mvchgat/window (stdscr)
mvcur/screen
mvdelch/window (stdscr)
mvderwin/window (stdscr)
mvget_wch/screen (input-operation)
mvget_wstr/screen (input-operation)
mvgetch/screen (input-operation)
mvgetn_wstr/screen (input-operation)
mvgetnstr/screen (input-operation)
mvgetstr/screen (input-operation)
mvhline/window (stdscr)
mvhline_set/window (stdscr)
mvin_wch/window (stdscr)
mvin_wchnstr/window (stdscr)
mvin_wchstr/window (stdscr)
mvinch/window (stdscr)
mvinchnstr/window (stdscr)
mvinchstr/window (stdscr)
mvinnstr/window (stdscr)
mvinnwstr/window (stdscr)
mvins_nwstr/window (stdscr)
mvins_wch/window (stdscr)
mvins_wstr/window (stdscr)
mvinsch/window (stdscr)
mvinsnstr/window (stdscr)
mvinsstr/window (stdscr)
mvinstr/window (stdscr)
mvinwstr/window (stdscr)
mvprintw/window (stdscr)
mvscanw/screen
mvvline/window (stdscr)
mvvline_set/window (stdscr)
mvwadd_wch/window
mvwadd_wchnstr/window
mvwadd_wchstr/window
mvwaddch/window
mvwaddchnstr/window
mvwaddchstr/window
mvwaddnstr/window
mvwaddnwstr/window
mvwaddstr/window
mvwaddwstr/window
mvwchgat/window
mvwdelch/window
mvwget_wch/screen (input-operation)
mvwget_wstr/screen (input-operation)
mvwgetch/screen (input-operation)
mvwgetn_wstr/screen (input-operation)
mvwgetnstr/screen (input-operation)
mvwgetstr/screen (input-operation)
mvwhline/window
mvwhline_set/window
mvwin/window
mvwin_wch/window
mvwin_wchnstr/window
mvwin_wchstr/window
mvwinch/window
mvwinchnstr/window
mvwinchstr/window
mvwinnstr/window
mvwinnwstr/window
mvwins_nwstr/window
mvwins_wch/window
mvwins_wstr/window
mvwinsch/window
mvwinsnstr/window
mvwinsstr/window
mvwinstr/window
mvwinwstr/window
mvwprintw/window
mvwscanw/screen
mvwvline/window
mvwvline_set/window
napms/reentrant
newpad/global locks(windowlist)
newscr/screen (readonly)
newterm/global locks(screenlist)
newwin/global locks(windowlist)
nl/screen
nocbreak/screen
nodelay/window
noecho/screen
nofilter/global
nonl/screen
noqiflush/terminal
noraw/screen
notimeout/window
numcodes/global (readonly)
numfnames/global (readonly)
numnames/global (readonly)
ospeed/global
overlay/window locks(source, target)
overwrite/window locks(source, target)
pair_content/screen
pecho_wchar/screen
pechochar/screen
pnoutrefresh/screen
prefresh/screen
printw/window
putp/global
putwin/window
qiflush/terminal
raw/screen
redrawwin/window
refresh/screen
reset_prog_mode/screen
reset_shell_mode/screen
resetty/terminal
resize_term/screen locks(windowlist)
resizeterm/screen
restartterm/screen
ripoffline/global (static data)
savetty/terminal
scanw/screen
scr_dump/screen
scr_init/screen
scr_restore/screen
scr_set/screen
scrl/window (stdscr)
scroll/window
scrollok/window
set_curterm/screen
set_escdelay/screen
set_tabsize/screen
set_term/global locks(screenlist, screen)
setcchar/reentrant
setscrreg/window (stdscr)
setupterm/global
slk_attr/screen
slk_attr_off/screen
slk_attr_on/screen
slk_attr_set/screen
slk_attroff/screen
slk_attron/screen
slk_attrset/screen
slk_clear/screen
slk_color/screen
slk_init/screen
slk_label/screen
slk_noutrefresh/screen
slk_refresh/screen
slk_restore/screen
slk_set/screen
slk_touch/screen
slk_wset/screen
standend/window
standout/window
start_color/screen
stdscr/screen (readonly)
strcodes/global (readonly)
strfnames/global (readonly)
strnames/global (readonly)
subpad/window
subwin/window
syncok/window
term_attrs/screen
termattrs/screen
termname/terminal
tgetent/global
tgetflag/global
tgetnum/global
tgetstr/global
tgoto/global
tigetflag/terminal
tigetnum/terminal
tigetstr/terminal
timeout/window (stdscr)
touchline/window
touchwin/window
tparm/global (static data)
tputs/screen
trace/global (static data)
ttytype/screen (readonly)
typeahead/screen
unctrl/screen
unget_wch/screen (input-operation)
ungetch/screen (input-operation)
ungetmouse/screen (input-operation)
untouchwin/window
use_default_colors/screen
use_env/global (static data)
use_extended_names/global (static data)
use_legacy_coding/screen
use_screen/global locks(screenlist, screen)
use_window/global locks(windowlist, window)
vid_attr/screen
vid_puts/screen
vidattr/screen
vidputs/screen
vline/window (stdscr)
vline_set/window (stdscr)
vw_printw/window
vw_scanw/screen
vwprintw/window
vwscanw/screen
wadd_wch/window
wadd_wchnstr/window
wadd_wchstr/window
waddch/window
waddchnstr/window
waddchstr/window
waddnstr/window
waddnwstr/window
waddstr/window
waddwstr/window
wattr_get/window
wattr_off/window
wattr_on/window
wattr_set/window
wattroff/window
wattron/window
wattrset/window
wbkgd/window
wbkgdset/window
wbkgrnd/window
wbkgrndset/window
wborder/window
wborder_set/window
wchgat/window
wclear/window
wclrtobot/window
wclrtoeol/window
wcolor_set/window
wcursyncup/screen (affects window plus parents)
wdelch/window
wdeleteln/window
wecho_wchar/window
wechochar/window
wenclose/window
werase/window
wget_wch/screen (input-operation)
wget_wstr/screen (input-operation)
wgetbkgrnd/window
wgetch/screen (input-operation)
wgetdelay/window
wgetn_wstr/screen (input-operation)
wgetnstr/screen (input-operation)
wgetparent/window
wgetscrreg/window
wgetstr/screen (input-operation)
whline/window
whline_set/window
win_wch/window
win_wchnstr/window
win_wchstr/window
winch/window
winchnstr/window
winchstr/window
winnstr/window
winnwstr/window
wins_nwstr/window
wins_wch/window
wins_wstr/window
winsch/window
winsdelln/window
winsertln/window
winsnstr/window
winsstr/window
winstr/window
winwstr/window
wmouse_trafo/window
wmove/window
wnoutrefresh/screen
wprintw/window
wredrawln/window
wrefresh/screen
wresize/window locks(windowlist)
wscanw/screen
wscrl/window
wsetscrreg/window
wstandend/window
wstandout/window
wsyncdown/screen (affects window plus parents)
wsyncup/screen (affects window plus parents)
wtimeout/window
wtouchln/window
wunctrl/global (static data)
wvline/window
wvline_set/window
.TE
.\" ***************************************************************************
.SH RETURN VALUE
These functions all return \fBTRUE\fP or \fBFALSE\fP, except as noted.
.SH NOTES
Both a macro and a function are provided for each name.
.SH PORTABILITY
These routines are specific to ncurses.
They were not supported on Version 7, BSD or System V implementations.
It is recommended that any code depending on ncurses extensions
be conditioned using NCURSES_VERSION.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_opaque\fR(3X),
\fBcurs_variables\fR(3X).
diff --git a/contrib/ncurses/man/curs_touch.3x b/contrib/ncurses/man/curs_touch.3x
index e53207896529..b5ea35b3fa3f 100644
--- a/contrib/ncurses/man/curs_touch.3x
+++ b/contrib/ncurses/man/curs_touch.3x
@@ -1,129 +1,129 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_touch.3x,v 1.22 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_touch.3x,v 1.23 2020/10/24 09:51:21 tom Exp $
.TH curs_touch 3X ""
.na
.hy 0
.SH NAME
\fBtouchwin\fR,
\fBtouchline\fR,
\fBuntouchwin\fR,
\fBwtouchln\fR,
\fBis_linetouched\fR,
\fBis_wintouched\fR \- \fBcurses\fR refresh control routines
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
+.sp
+\fBint touchline(WINDOW *\fP\fIwin\fP\fB, int \fP\fIstart\fP\fB, int \fP\fIcount\fP\fB);\fR
+.sp
+\fBint touchwin(WINDOW *\fP\fIwin\fP\fB);\fR
.br
-\fBint touchwin(WINDOW *win);\fR
+\fBint wtouchln(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIn\fP\fB, int \fP\fIchanged\fP\fB);\fR
+.sp
+\fBint untouchwin(WINDOW *\fP\fIwin\fP\fB);\fR
+.sp
+\fBbool is_linetouched(WINDOW *\fP\fIwin\fP\fB, int \fP\fIline\fP\fB);\fR
.br
-\fBint touchline(WINDOW *win, int start, int count);\fR
-.br
-\fBint untouchwin(WINDOW *win);\fR
-.br
-\fBint wtouchln(WINDOW *win, int y, int n, int changed);\fR
-.br
-\fBbool is_linetouched(WINDOW *win, int line);\fR
-.br
-\fBbool is_wintouched(WINDOW *win);\fR
+\fBbool is_wintouched(WINDOW *\fP\fIwin\fP\fB);\fR
.br
.SH DESCRIPTION
The \fBtouchwin\fR and \fBtouchline\fR routines throw away all
optimization information about which parts of the window have been
touched, by pretending that the entire window has been drawn on.
This
is sometimes necessary when using overlapping windows, since a change
to one window affects the other window, but the records of which lines
have been changed in the other window do not reflect the change.
The
routine \fBtouchline\fR only pretends that \fIcount\fR lines have been
changed, beginning with line \fIstart\fR.
.PP
The \fBuntouchwin\fR routine marks all lines in the window as unchanged since
the last call to \fBwrefresh\fR.
.PP
The \fBwtouchln\fR routine makes \fIn\fR lines in the window, starting
at line \fIy\fR, look as if they have (\fIchanged\fR\fB=1\fR) or have
not (\fIchanged\fR\fB=0\fR) been changed since the last call to
\fBwrefresh\fR.
.PP
The \fBis_linetouched\fR and \fBis_wintouched\fR routines return
\fBTRUE\fR if the specified line/window was modified since the last
call to \fBwrefresh\fR; otherwise they return \fBFALSE\fR. In
addition, \fBis_linetouched\fR returns \fBERR\fR if \fIline\fR is not
valid for the given window.
.SH RETURN VALUE
All routines return the integer \fBERR\fR upon failure and an integer value
other than \fBERR\fR upon successful completion, unless otherwise noted in the
preceding routine descriptions.
.PP
X/Open does not define any error conditions.
In this implementation
.RS 3
.TP 5
\fBis_linetouched\fP
returns an error
if the window pointer is null, or
if the line number is outside the window.
.IP
The constant \fBERR\fP is distinct from \fBTRUE\fP and \fBFALSE\fP,
which are the normal return values of this function.
Because the function returns a \fBbool\fP,
returning \fBERR\fP (which is neither \fBTRUE\fP nor \fBFALSE\fP)
may not be supported by the compiler.
.IP
To provide error-checking and also match the X/Open function prototype,
the \fBERR\fP is provided by a macro named \fBis_linetouched\fP.
The actual function returns \fBFALSE\fP when it detects an error.
.TP 5
\fBwtouchln\fP
returns an error
if the window pointer is null, or
if the line number is outside the window.
.RE
.SH PORTABILITY
.PP
These functions were introduced by SVr4.
The Solaris curses header file,
for instance, defines both an actual function and macro for each.
The macros give the same result as the actual functions.
SVr4 curses does not check the window parameter \fIwin\fP to ensure
that it is not \fBNULL\fP;
otherwise this implementation behaves the same as SVr4.
.PP
The XSI Curses standard, Issue 4 describes these functions,
but defines no error conditions.
.SH NOTES
All of these routines except \fBwtouchln\fR may be macros.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_refresh\fR(3X),
\fBcurs_variables\fR(3X).
diff --git a/contrib/ncurses/man/curs_util.3x b/contrib/ncurses/man/curs_util.3x
index 7cee63fe1337..f833803a412d 100644
--- a/contrib/ncurses/man/curs_util.3x
+++ b/contrib/ncurses/man/curs_util.3x
@@ -1,408 +1,407 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_util.3x,v 1.57 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_util.3x,v 1.60 2020/12/19 22:44:46 tom Exp $
.TH curs_util 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.na
.hy 0
.SH NAME
\fBdelay_output\fR,
\fBfilter\fR,
\fBflushinp\fR,
\fBgetwin\fR,
\fBkey_name\fR,
\fBkeyname\fR,
\fBnofilter\fR,
\fBputwin\fR,
\fBunctrl\fR,
\fBuse_env\fR,
\fBuse_tioctl\fR,
\fBwunctrl\fR \- miscellaneous \fBcurses\fR utility routines
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBconst char *unctrl(chtype c);\fR
+\fBconst char *unctrl(chtype \fP\fIc\fP\fB);\fR
.br
-\fBwchar_t *wunctrl(cchar_t *c);\fR
-.br
-\fBconst char *keyname(int c);\fR
-.br
-\fBconst char *key_name(wchar_t w);\fR
+\fBwchar_t *wunctrl(cchar_t *\fP\fIc\fP\fB);\fR
+.sp
+\fBconst char *keyname(int \fP\fIc\fP\fB);\fR
.br
+\fBconst char *key_name(wchar_t \fP\fIw\fP\fB);\fR
+.sp
\fBvoid filter(void);\fR
.br
\fBvoid nofilter(void);\fR
+.sp
+\fBvoid use_env(bool \fP\fIf\fP\fB);\fR
.br
-\fBvoid use_env(bool f);\fR
-.br
-\fBvoid use_tioctl(bool f);\fR
-.br
-\fBint putwin(WINDOW *win, FILE *filep);\fR
-.br
-\fBWINDOW *getwin(FILE *filep);\fR
+\fBvoid use_tioctl(bool \fP\fIf\fP\fB);\fR
+.sp
+\fBint putwin(WINDOW *\fP\fIwin\fP\fB, FILE *\fP\fIfilep\fP\fB);\fR
.br
-\fBint delay_output(int ms);\fR
+\fBWINDOW *getwin(FILE *\fP\fIfilep\fP\fB);\fR
+.sp
+\fBint delay_output(int \fP\fIms\fP\fB);\fR
.br
\fBint flushinp(void);\fR
.br
.SH DESCRIPTION
.SS unctrl
.PP
The \fBunctrl\fR routine returns a character string which is a printable
representation of the character \fIc\fR, ignoring attributes.
Control characters are displayed in the \fB^\fR\fIX\fR notation.
Printing characters are displayed as is.
The corresponding \fBwunctrl\fR returns a printable representation of
a wide character.
.SS keyname/key_name
.PP
The \fBkeyname\fR routine returns a character string
corresponding to the key \fIc\fR:
.bP
Printable characters are displayed as themselves,
e.g., a one-character string containing the key.
.bP
Control characters are displayed in the \fB^\fR\fIX\fR notation.
.bP
DEL (character 127) is displayed as \fB^?\fP.
.bP
Values above 128 are either meta characters
(if the screen has not been initialized,
or if \fBmeta\fP(3X) has been called with a \fBTRUE\fP parameter),
shown in the \fBM\-\fR\fIX\fR notation,
or are displayed as themselves.
In the latter case, the values may not be printable;
this follows the X/Open specification.
.bP
Values above 256 may be the names of the names of function keys.
.bP
Otherwise (if there is no corresponding name) the function returns null,
to denote an error.
X/Open also lists an \*(``UNKNOWN KEY\*('' return value,
which some implementations return rather than null.
.LP
The corresponding \fBkey_name\fR returns a character string corresponding
to the wide-character value \fIw\fR.
The two functions do not return the same set of strings;
the latter returns null where the former would display a meta character.
.SS filter/nofilter
.PP
The \fBfilter\fR routine, if used, must be called before \fBinitscr\fR or
\fBnewterm\fR are called.
Calling \fBfilter\fP causes these changes in initialization:
.bP
\fBLINES\fR is set to 1;
.bP
the capabilities
\fBclear\fR,
\fBcud1\fR,
\fBcud\fR,
\fBcup\fR,
\fBcuu1\fR,
\fBcuu\fR,
\fBvpa\fR
are disabled;
.bP
the capability \fBed\fP is disabled if \fBbce\fP is set;
.bP
and the \fBhome\fR string is set to the value of \fBcr\fR.
.PP
The \fBnofilter\fP routine cancels the effect of a preceding \fBfilter\fP
call.
That allows the caller to initialize a screen on a different device,
using a different value of \fB$TERM\fP.
The limitation arises because the \fBfilter\fP routine modifies the
in-memory copy of the terminal information.
.SS use_env
.PP
The \fBuse_env\fR routine, if used,
should be called before \fBinitscr\fR or
\fBnewterm\fR are called
(because those compute the screen size).
It modifies the way \fBncurses\fP treats environment variables
when determining the screen size.
.bP
Normally \fBncurses\fP looks first at the terminal database for the screen size.
.IP
If \fBuse_env\fP was called with \fBFALSE\fP for parameter,
it stops here unless
\fBuse_tioctl\fP was also called with \fBTRUE\fP for parameter.
.bP
Then it asks for the screen size via operating system calls.
If successful,
it overrides the values from the terminal database.
.bP
Finally (unless \fBuse_env\fP was called with \fBFALSE\fP parameter),
\fBncurses\fP examines the \fBLINES\fR or \fBCOLUMNS\fR environment variables,
using a value in those to override the results
from the operating system or terminal database.
.IP
\fBNcurses\fP also updates the screen size in response to \fBSIGWINCH\fP,
unless overridden by the \fBLINES\fR or \fBCOLUMNS\fR environment variables,
.SS use_tioctl
.PP
The \fBuse_tioctl\fR routine, if used,
should be called before \fBinitscr\fR or \fBnewterm\fR are called
(because those compute the screen size).
After \fBuse_tioctl\fR is called with \fBTRUE\fR as an argument,
\fBncurses\fP modifies the last step in its computation
of screen size as follows:
.bP
checks if the \fBLINES\fR and \fBCOLUMNS\fR environment variables
are set to a number greater than zero.
.bP
for each, \fBncurses\fP updates the corresponding environment variable
with the value that it has obtained via operating system call
or from the terminal database.
.bP
\fBncurses\fP re-fetches the value of the environment variables so that
it is still the environment variables which set the screen size.
.PP
The \fBuse_env\fP and \fBuse_tioctl\fP routines combine as
summarized here:
.TS
center tab(/);
l l l
_ _ _
lw7 lw7 lw40.
\fIuse_env\fR/\fIuse_tioctl\fR/\fISummary\fR
TRUE/FALSE/T{
This is the default behavior.
\fBncurses\fP uses operating system calls
unless overridden by $LINES or $COLUMNS environment variables.
T}
TRUE/TRUE/T{
\fBncurses\fP updates $LINES and $COLUMNS based on operating system calls.
T}
FALSE/TRUE/T{
\fBncurses\fP ignores $LINES and $COLUMNS,
uses operating system calls to obtain size.
T}
FALSE/FALSE/T{
\fBncurses\fP relies on the terminal database to determine size.
T}
.TE
.SS putwin/getwin
.PP
The \fBputwin\fR routine writes all data associated
with window (or pad) \fIwin\fR into
the file to which \fIfilep\fR points.
This information can be later retrieved
using the \fBgetwin\fR function.
.PP
The \fBgetwin\fR routine reads window related data stored in the file by
\fBputwin\fR.
The routine then creates and initializes a new window using that
data.
It returns a pointer to the new window.
There are a few caveats:
.bP
the data written is a copy of the \fBWINDOW\fP structure,
and its associated character cells.
The format differs between the wide-character (\fBncursesw\fP) and
non-wide (\fBncurses\fP) libraries.
You can transfer data between the two, however.
.bP
the retrieved window is always created as a top-level window (or pad),
rather than a subwindow.
.bP
the window's character cells contain the color pair \fIvalue\fP,
but not the actual color \fInumbers\fP.
If cells in the retrieved window use color pairs which have not been
created in the application using \fBinit_pair\fP,
they will not be colored when the window is refreshed.
.SS delay_output
.PP
The \fBdelay_output\fR routine inserts an \fIms\fR millisecond pause
in output.
This routine should not be used extensively because
padding characters are used rather than a CPU pause.
If no padding character is specified,
this uses \fBnapms\fR to perform the delay.
.SS flushinp
.PP
The \fBflushinp\fR routine throws away any typeahead that has been typed by the
user and has not yet been read by the program.
.SH RETURN VALUE
Except for \fBflushinp\fR, routines that return an integer return \fBERR\fR
upon failure and \fBOK\fR (SVr4 specifies only "an integer value other than
\fBERR\fR") upon successful completion.
.PP
Routines that return pointers return \fBNULL\fR on error.
.PP
X/Open does not define any error conditions.
In this implementation
.RS 3
.TP 5
\fBflushinp\fR
returns an error if the terminal was not initialized.
.TP 5
\fBputwin\fP
returns an error if the associated \fBfwrite\fP calls return an error.
.RE
.SH PORTABILITY
.SS filter
.PP
The SVr4 documentation describes the action of \fBfilter\fR only in the vaguest
terms.
The description here is adapted from the XSI Curses standard (which
erroneously fails to describe the disabling of \fBcuu\fR).
.SS keyname
.PP
The \fBkeyname\fP function may return the names of user-defined
string capabilities which are defined in the terminfo entry via the \fB\-x\fP
option of \fB@TIC@\fP.
This implementation automatically assigns at run-time keycodes to
user-defined strings which begin with \*(``k\*(''.
The keycodes start at KEY_MAX, but are not guaranteed to be
the same value for different runs because user-defined codes are
merged from all terminal descriptions which have been loaded.
The \fBuse_extended_names\fP(3X) function controls whether this data is
loaded when the terminal description is read by the library.
.SS nofilter/use_tioctl
.PP
The \fBnofilter\fP and \fBuse_tioctl\fP routines are specific to \fBncurses\fP.
They were not supported on Version 7, BSD or System V implementations.
It is recommended that any code depending on \fBncurses\fP extensions
be conditioned using NCURSES_VERSION.
.SS putwin/getwin
.PP
The \fBputwin\fP and \fBgetwin\fP functions have several issues with
portability:
.bP
The files written and read by these functions
use an implementation-specific format.
Although the format is an obvious target for standardization,
it has been overlooked.
.IP
Interestingly enough, according to the copyright dates in Solaris source,
the functions (along with \fBscr_init\fP, etc.) originated with
the University of California, Berkeley (in 1982)
and were later (in 1988) incorporated into SVr4.
Oddly, there are no such functions in the 4.3BSD curses sources.
.bP
Most implementations simply dump the binary \fBWINDOW\fP structure to the file.
These include SVr4 curses, NetBSD and PDCurses,
as well as older \fBncurses\fP versions.
This implementation
(as well as the X/Open variant of Solaris curses, dated 1995)
uses textual dumps.
.IP
The implementations which use binary dumps use block-I/O
(the \fBfwrite\fP and \fBfread\fP functions).
Those that use textual dumps use buffered-I/O.
A few applications may happen to write extra data in the file using
these functions.
Doing that can run into problems mixing block- and buffered-I/O.
This implementation reduces the problem on writes by flushing the output.
However, reading from a file written using mixed schemes may not be successful.
.SS unctrl/wunctrl
.PP
The XSI Curses standard, Issue 4 describes these functions.
It states that \fBunctrl\fR and \fBwunctrl\fR will return a null pointer if
unsuccessful, but does not define any error conditions.
This implementation checks for three cases:
.bP
the parameter is a 7-bit US\-ASCII code.
This is the case that X/Open Curses documented.
.bP
the parameter is in the range 128\-159, i.e., a C1 control code.
-If \fBuse_legacy_coding\fP has been called with a \fB2\fP parameter,
+If \fBuse_legacy_coding\fP(3X) has been called with a \fB2\fP parameter,
\fBunctrl\fP returns the parameter, i.e., a one-character string with
the parameter as the first character.
Otherwise, it returns \*(``~@\*('', \*(``~A\*('', etc.,
analogous to \*(``^@\*('', \*(``^A\*('', C0 controls.
.IP
X/Open Curses does not document whether \fBunctrl\fP can be called before
initializing curses.
This implementation permits that,
and returns the \*(``~@\*('', etc., values in that case.
.bP
parameter values outside the 0 to 255 range.
\fBunctrl\fP returns a null pointer.
.PP
The strings returned by \fBunctrl\fR in this implementation are determined
at compile time,
showing C1 controls from the upper-128 codes
with a \*(``~\*('' prefix rather than \*(``^\*(''.
Other implementations have different conventions.
For example, they may show both sets of control characters with \*(``^\*('',
and strip the parameter to 7 bits.
Or they may ignore C1 controls and treat all of the upper-128 codes as
printable.
This implementation uses 8 bits but does not modify the string to reflect
locale.
-The \fBuse_legacy_coding\fP function allows the caller to
+The \fBuse_legacy_coding\fP(3X) function allows the caller to
change the output of \fBunctrl\fP.
.PP
Likewise, the \fBmeta\fP(3X) function allows the caller to change the
output of \fBkeyname\fP, i.e.,
it determines whether to use the \*(``M\-\*('' prefix
for \*(``meta\*('' keys (codes in the range 128 to 255).
-Both \fBuse_legacy_coding\fP and \fBmeta\fP succeed only after
+Both \fBuse_legacy_coding\fP(3X) and \fBmeta\fP(3X) succeed only after
curses is initialized.
X/Open Curses does not document the treatment of codes 128 to 159.
When treating them as \*(``meta\*('' keys
(or if \fBkeyname\fP is called before initializing curses),
this implementation returns strings \*(``M\-^@\*('', \*(``M\-^A\*('', etc.
.PP
X/Open Curses documents \fBunctrl\fP as declared in \fB<unctrl.h>\fP,
which \fBncurses\fP does.
However, \fBncurses\fP' \fB<curses.h>\fP includes \fB<unctrl.h>\fP,
matching the behavior of SVr4 curses.
Other implementations may not do that.
.SS use_env/use_tioctl
.PP
If \fBncurses\fP is configured to provide the sp-functions extension,
the state of \fBuse_env\fP and \fBuse_tioctl\fP may be updated before
creating each \fIscreen\fP rather than once only
(\fBcurs_sp_funcs\fR(3X)).
This feature of \fBuse_env\fP
is not provided by other implementation of curses.
.SH SEE ALSO
-\fBlegacy_coding\fR(3X),
\fBcurses\fR(3X),
\fBcurs_initscr\fR(3X),
\fBcurs_inopts\fR(3X),
\fBcurs_kernel\fR(3X),
\fBcurs_scr_dump\fR(3X),
\fBcurs_sp_funcs\fR(3X),
\fBcurs_variables\fR(3X),
\fBlegacy_coding\fR(3X).
diff --git a/contrib/ncurses/man/curs_variables.3x b/contrib/ncurses/man/curs_variables.3x
index cd0c86651c61..25294dfeabf5 100644
--- a/contrib/ncurses/man/curs_variables.3x
+++ b/contrib/ncurses/man/curs_variables.3x
@@ -1,188 +1,188 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 2010-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_variables.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: curs_variables.3x,v 1.15 2020/04/18 14:29:07 tom Exp $
.TH curs_variables 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.ds n 5
.na
.hy 0
.SH NAME
\fBCOLORS\fR,
\fBCOLOR_PAIRS\fR,
\fBCOLS\fR,
\fBESCDELAY\fR,
\fBLINES\fR,
\fBTABSIZE\fR,
\fBcurscr\fR,
\fBnewscr\fR,
\fBstdscr\fR
\- \fBcurses\fR global variables
.ad
.hy
.SH SYNOPSIS
.nf
\fB#include <curses.h>\fR
.PP
\fBint COLOR_PAIRS;\fR
.br
\fBint COLORS;\fR
.br
\fBint COLS;\fR
.br
\fBint ESCDELAY;\fR
.br
\fBint LINES;\fR
.br
\fBint TABSIZE;\fR
.br
\fBWINDOW * curscr;\fR
.br
\fBWINDOW * newscr;\fR
.br
\fBWINDOW * stdscr;\fR
.fi
.SH DESCRIPTION
This page summarizes variables provided by the \fBcurses\fP library.
A more complete description is given in the \fBcurses\fP(3X) manual page.
.PP
Depending on the configuration, these may be actual variables,
or macros (see \fBcurs_threads\fR(3X) and \fBcurs_opaque\fR(3X))
which provide read-only access to \fIcurses\fP's state.
In either case, applications should treat them as read-only to avoid
confusing the library.
.SS COLOR_PAIRS
After initializing curses, this variable contains the number of color pairs
which the terminal can support.
Usually the number of color pairs will be the product \fBCOLORS\fP*\fBCOLORS\fP,
however this is not always true:
.bP
a few terminals use HLS colors, which do not follow this rule
.bP
terminals supporting a large number of colors are limited by the number
of color pairs that can be represented in a \fIsigned short\fP value.
.SS COLORS
After initializing curses, this variable contains the number of colors
which the terminal can support.
.SS COLS
After initializing curses, this variable contains the width of the screen,
i.e., the number of columns.
.SS ESCDELAY
This variable holds the number of milliseconds to wait after reading an
escape character,
to distinguish between an individual escape character entered on the
keyboard from escape sequences sent by cursor- and function-keys
(see curses(3X)).
.SS LINES
After initializing curses, this variable contains the height of the screen,
i.e., the number of lines.
.SS TABSIZE
This variable holds the number of columns used by the \fIcurses\fP library
when converting a tab character to spaces as it adds the tab to a window
-(see curs_addch(3X).
+(see \fBcurs_addch\fP(3X).
.SS The Current Screen
This implementation of curses uses a special window \fBcurscr\fP to
record its updates to the terminal screen.
.PP
This is referred to as the \*(``physical screen\*('' in the
\fBcurs_refresh\fR(3X) and
\fBcurs_outopts\fR(3X) manual pages.
.SS The New Screen
This implementation of curses uses a special window \fBnewscr\fP to
hold updates to the terminal screen before applying them to \fBcurscr\fP.
.PP
This is referred to as the \*(``virtual screen\*('' in the
\fBcurs_kernel\fR(3X),
\fBcurs_refresh\fR(3X) and
\fBcurs_outopts\fR(3X) manual pages.
.SS The Standard Screen
Upon initializing curses,
a default window called \fBstdscr\fP,
which is the size of the terminal screen, is created.
Many curses functions use this window.
.SH NOTES
The curses library is initialized using either \fBinitscr\fR(3X),
or \fBnewterm\fR(3X).
.PP
If \fBcurses\fP is configured to use separate curses/terminfo libraries,
most of these variables reside in the curses library.
.SH PORTABILITY
\fBTABSIZE\fP is a feature of SVr4 curses
which is not documented by X/Open curses.
.bP
In SVr4 curses, \fBTABSIZE\fP is initially set from the terminal description's
\fBinit_tabs\fP capability.
After that, it can be altered by the applications using SVr4 curses.
.IP
SVr4 curses uses the current value of \fBTABSIZE\fP to
compute the position of tabstops for updating both
the virtual screen with \fBaddch\fP(3X) as well as
the physical screen with \fBmvcur\fP(3X).
.bP
This implementation uses the current value of \fBTABSIZE\fP only for
updating the virtual screen.
It uses the terminal description's \fBit\fP (\fBinit_tabs\fP) capability for
computing hardware tabs (i.e., tab stops on the physical screen).
.bP
Other implementations differ.
For instance, NetBSD curses allows \fBTABSIZE\fP to be set through
an environment variable.
This implementation does not.
.IP
NetBSD curses does not support hardware tabs;
it uses the \fBinit_tabs\fP capability and the \fBTABSIZE\fP variable
only for updating the virtual screen.
.PP
\fBESCDELAY\fP is an extension in AIX curses:
.bP
In AIX, the units for \fBESCDELAY\fP are \fIfifths\fP of a millisecond.
.bP
The default value for AIX's \fBESCDELAY\fP is 0.1 seconds.
.bP
AIX also enforces a limit of 10,000 seconds for \fBESCDELAY\fP;
this implementation currently has no upper limit.
.PP
This implementation has long used \fBESCDELAY\fP with units of milliseconds,
making it impossible to be completely compatible with AIX.
Likewise, most users have either decided to override the value,
or rely upon its default value.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_opaque\fR(3X),
\fBcurs_terminfo\fR(3X),
\fBcurs_threads\fR(3X),
\fBterm_variables\fR(3X),
\fBterminfo\fR(\*n).
diff --git a/contrib/ncurses/man/default_colors.3x b/contrib/ncurses/man/default_colors.3x
index 2ad7dcde338b..c1d1bf706724 100644
--- a/contrib/ncurses/man/default_colors.3x
+++ b/contrib/ncurses/man/default_colors.3x
@@ -1,144 +1,144 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 2000-2011,2016 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
.\" Author: Thomas E. Dickey 1997,1999,2000,2005
.\"
-.\" $Id: default_colors.3x,v 1.29 2020/02/02 23:34:34 tom Exp $
+.\" $Id: default_colors.3x,v 1.31 2020/12/19 21:38:37 tom Exp $
.TH default_colors 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.SH NAME
\fBuse_default_colors\fR,
\fBassume_default_colors\fR \- use terminal's default colors
.SH SYNOPSIS
\fB#include <curses.h>\fP
.sp
\fBint use_default_colors(void);\fP
.br
-\fBint assume_default_colors(int fg, int bg);\fP
+\fBint assume_default_colors(int \fP\fIfg\fP\fB, int \fP\fIbg\fP\fB);\fP
.SH DESCRIPTION
The \fBuse_default_colors\fP and \fBassume_default_colors\fP
functions are extensions to the curses library.
They are used with terminals that support ISO 6429 color, or equivalent.
These terminals allow the application to reset color to an unspecified
default value (e.g., with SGR 39 or SGR 49).
.PP
Applications that paint a colored background over the whole screen
do not take advantage of SGR 39 and SGR 49.
Some applications are designed to work with the default background,
using colors only for text.
For example, there are several implementations of the \fBls\fP program
which use colors to denote different file types or permissions.
These \*(``color ls\*('' programs do not necessarily modify the background color,
typically using only the \fBsetaf\fP terminfo capability to set the
foreground color.
Full-screen applications that use default colors can achieve similar
visual effects.
.PP
The first function, \fBuse_default_colors\fP
tells the curses library to assign terminal default
foreground/background colors to color number \-1.
So init_pair(x,COLOR_RED,\-1)
will initialize pair x as red on default background
and init_pair(x,\-1,COLOR_BLUE) will
initialize pair x as default foreground on blue.
.PP
The other, \fBassume_default_colors\fP
is a refinement which tells which colors to paint for color pair 0.
This function recognizes a special color number \-1,
which denotes the default terminal color.
.PP
The following are equivalent:
.RS
.br
.I use_default_colors();
.br
.I assume_default_colors(\-1,\-1);
.RE
.PP
These are ncurses extensions.
For other curses implementations, color
number \-1 does not mean anything, just as for ncurses before a
successful call of \fBuse_default_colors\fP or \fBassume_default_colors\fP.
.PP
Other curses implementations do not allow an application to modify color pair 0.
They assume that the background is COLOR_BLACK,
but do not ensure that the color pair 0 is painted to match the
assumption.
If your application does not use either
.B use_default_colors
or
.B assume_default_colors
ncurses will paint a white foreground (text) with black background
for color pair 0.
.SH RETURN VALUE
These functions return the integer \fBERR\fP upon failure
and \fBOK\fP on success.
They will fail if either the terminal does not support
the \fBorig_pair\fP or \fBorig_colors\fP capability.
If the \fBinitialize_pair\fP capability is not found, this causes an
error as well.
.SH NOTES
Associated with this extension, the \fBinit_pair\fR function accepts
negative arguments to specify default foreground or background colors.
.PP
The \fBuse_default_colors\fP function was added to support \fIded\fP.
This is a full-screen application which uses curses to manage only part
of the screen.
The bottom portion of the screen, which is of adjustable
size, is left uncolored to display the results from shell commands.
The top portion of the screen colors filenames using a scheme like the
\*(``color ls\*('' programs.
Attempting to manage the background color of the screen for this application
would give unsatisfactory results for a variety of reasons.
This extension was devised after
noting that color xterm (and similar programs) provides a background color
which does not necessarily correspond to any of the ANSI colors.
While a special terminfo entry could be constructed using nine colors,
there was no mechanism provided within curses to account for the related
\fBorig_pair\fP and \fBback_color_erase\fP capabilities.
.PP
The \fBassume_default_colors\fP function was added to solve
a different problem: support for applications which would use
environment variables and other configuration to bypass curses'
notion of the terminal's default colors, setting specific values.
.SH PORTABILITY
These routines are specific to ncurses.
They were not supported on
Version 7, BSD or System V implementations.
It is recommended that
any code depending on them be conditioned using NCURSES_VERSION.
.SH SEE ALSO
-\fBcurs_color\fR(3X),
-\fBded\fP(1).
+\fBded\fP(1),
+\fBcurs_color\fR(3X).
.SH AUTHOR
Thomas Dickey (from an analysis of the requirements for color xterm
for XFree86 3.1.2C, February 1996).
diff --git a/contrib/ncurses/man/define_key.3x b/contrib/ncurses/man/define_key.3x
index a8d7b47e2381..d0dbe7fccaa9 100644
--- a/contrib/ncurses/man/define_key.3x
+++ b/contrib/ncurses/man/define_key.3x
@@ -1,66 +1,66 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
.\" Author: Thomas E. Dickey 1997
.\"
-.\" $Id: define_key.3x,v 1.17 2020/02/02 23:34:34 tom Exp $
+.\" $Id: define_key.3x,v 1.18 2020/10/24 09:52:54 tom Exp $
.TH define_key 3X ""
.SH NAME
\fBdefine_key\fP \- define a keycode
.SH SYNOPSIS
\fB#include <curses.h>\fP
.sp
-\fBint define_key(const char *definition, int keycode);\fP
+\fBint define_key(const char *\fP\fIdefinition\fP\fB, int \fP\fIkeycode\fP\fB);\fP
.SH DESCRIPTION
This is an extension to the curses library.
It permits an application to define keycodes with their corresponding control
strings, so that the ncurses library will interpret them just as it would
the predefined codes in the terminfo database.
.PP
If the given string is null, any existing definition for the keycode is
removed.
Similarly, if the given keycode is negative or zero, any existing string
for the given definition is removed.
.SH RETURN VALUE
The keycode must be greater than zero, and the string non-null,
otherwise \fBERR\fP is returned.
\fBERR\fP may also be returned if there is insufficient memory to allocate the
data to store the definition.
If no error is detected, \fBOK\fP is returned.
.SH PORTABILITY
These routines are specific to ncurses.
They were not supported on
Version 7, BSD or System V implementations.
It is recommended that
any code depending on them be conditioned using NCURSES_VERSION.
.SH SEE ALSO
\fBkeyok\fR(3X),
\fBkey_defined\fR(3X).
.SH AUTHOR
Thomas Dickey.
diff --git a/contrib/ncurses/man/form.3x b/contrib/ncurses/man/form.3x
index 2115ddcf6817..685ad71f1047 100644
--- a/contrib/ncurses/man/form.3x
+++ b/contrib/ncurses/man/form.3x
@@ -1,242 +1,244 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form.3x,v 1.34 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form.3x,v 1.36 2020/12/12 16:34:33 tom Exp $
.TH form 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fBform\fR \- curses extension for programming forms
.SH SYNOPSIS
\fB#include <form.h>\fR
.br
.SH DESCRIPTION
The \fBform\fR library provides terminal-independent facilities for composing
form screens on character-cell terminals.
The library includes: field
routines, which create and modify form fields; and form routines, which group
fields into forms, display forms on the screen, and handle interaction with the
user.
.PP
The \fBform\fR library uses the \fBcurses\fR libraries.
To use the \fBform\fR library, link with the options
\fB\-lform \-lcurses\fR.
.PP
Your program should set up the locale, e.g.,
.sp
\fBsetlocale(LC_ALL, "");\fP
.sp
so that input/output processing will work.
.PP
A curses initialization routine such as \fBinitscr\fR must be called
before using any of these functions.
.
.SS Current Default Values for Field Attributes
.
The \fBform\fR library maintains a default value for field attributes.
You
can get or set this default by calling the appropriate \fBset_\fR
or retrieval
routine with a \fBNULL\fR field pointer.
Changing this default with a
\fBset_\fR function affects future field creations, but does not change the
rendering of fields already created.
.
.SS Routine Name Index
.
The following table lists each \fBform\fR routine and the name of
the manual page on which it is described.
+Routines flagged with \*(``*\*(''
+are ncurses-specific, not present in SVr4.
.
.TS
l l
l l .
\fBcurses\fR Routine Name Manual Page Name
=
current_field \fBform_page\fR(3X)
data_ahead \fBform_data\fR(3X)
data_behind \fBform_data\fR(3X)
dup_field \fBform_field_new\fR(3X)
dynamic_field_info \fBform_field_info\fR(3X)
field_arg \fBform_field_validation\fR(3X)
field_back \fBform_field_attributes\fR(3X)
field_buffer \fBform_field_buffer\fR(3X)
field_count \fBform_field\fR(3X)
field_fore \fBform_field_attributes\fR(3X)
field_index \fBform_page\fR(3X)
field_info \fBform_field_info\fR(3X)
field_init \fBform_hook\fR(3X)
field_just \fBform_field_just\fR(3X)
field_opts \fBform_field_opts\fR(3X)
field_opts_off \fBform_field_opts\fR(3X)
field_opts_on \fBform_field_opts\fR(3X)
field_pad \fBform_field_attributes\fR(3X)
field_status \fBform_field_buffer\fR(3X)
field_term \fBform_hook\fR(3X)
field_type \fBform_field_validation\fR(3X)
field_userptr \fBform_field_userptr\fR(3X)
form_driver \fBform_driver\fR(3X)
form_driver_w \fBform_driver\fR(3X)*
form_fields \fBform_field\fR(3X)
form_init \fBform_hook\fR(3X)
form_opts \fBform_opts\fR(3X)
form_opts_off \fBform_opts\fR(3X)
form_opts_on \fBform_opts\fR(3X)
form_page \fBform_page\fR(3X)
-form_request_by_name \fBform_requestname\fR(3X)
-form_request_name \fBform_requestname\fR(3X)
+form_request_by_name \fBform_requestname\fR(3X)*
+form_request_name \fBform_requestname\fR(3X)*
form_sub \fBform_win\fR(3X)
form_term \fBform_hook\fR(3X)
form_userptr \fBform_userptr\fR(3X)
form_win \fBform_win\fR(3X)
free_field \fBform_field_new\fR(3X)
free_fieldtype \fBform_fieldtype\fR(3X)
free_form \fBform_new\fR(3X)
link_field \fBform_field_new\fR(3X)
link_fieldtype \fBform_fieldtype\fR(3X)
move_field \fBform_field\fR(3X)
new_field \fBform_field_new\fR(3X)
new_fieldtype \fBform_fieldtype\fR(3X)
new_form \fBform_new\fR(3X)
new_page \fBform_new_page\fR(3X)
pos_form_cursor \fBform_cursor\fR(3X)
post_form \fBform_post\fR(3X)
scale_form \fBform_win\fR(3X)
set_current_field \fBform_page\fR(3X)
set_field_back \fBform_field_attributes\fR(3X)
set_field_buffer \fBform_field_buffer\fR(3X)
set_field_fore \fBform_field_attributes\fR(3X)
set_field_init \fBform_hook\fR(3X)
set_field_just \fBform_field_just\fR(3X)
set_field_opts \fBform_field_opts\fR(3X)
set_field_pad \fBform_field_attributes\fR(3X)
set_field_status \fBform_field_buffer\fR(3X)
set_field_term \fBform_hook\fR(3X)
set_field_type \fBform_field_validation\fR(3X)
set_field_userptr \fBform_field_userptr\fR(3X)
set_fieldtype_arg \fBform_fieldtype\fR(3X)
set_fieldtype_choice \fBform_fieldtype\fR(3X)
set_form_fields \fBform_field\fR(3X)
set_form_init \fBform_hook\fR(3X)
set_form_opts \fBform_field_opts\fR(3X)
set_form_page \fBform_page\fR(3X)
set_form_sub \fBform_win\fR(3X)
set_form_term \fBform_hook\fR(3X)
set_form_userptr \fBform_userptr\fR(3X)
set_form_win \fBform_win\fR(3X)
set_max_field \fBform_field_buffer\fR(3X)
set_new_page \fBform_new_page\fR(3X)
-unfocus_current_field \fBform_page\fR(3X)
+unfocus_current_field \fBform_page\fR(3X)*
unpost_form \fBform_post\fR(3X)
.TE
.SH RETURN VALUE
Routines that return pointers return \fBNULL\fR on error,
-and set errno to the corresponding error-code returned by functions
+and set \fBerrno\fP to the corresponding error-code returned by functions
returning an integer.
Routines that return
an integer return one of the following error codes:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_BAD_STATE
Routine was called from an initialization or termination function.
.TP 5
.B E_CONNECTED
The field is already connected to a form.
.TP 5
.B E_INVALID_FIELD
Contents of a field are not valid.
.TP 5
.B E_NOT_CONNECTED
No fields are connected to the form.
.TP 5
.B E_NOT_POSTED
The form has not been posted.
.TP 5
.B E_NO_ROOM
Form is too large for its window.
.TP 5
.B E_POSTED
The form is already posted.
.TP 5
.B E_REQUEST_DENIED
The form driver could not process the request.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_UNKNOWN_COMMAND
The form driver code saw an unknown request code.
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header files
\fB<curses.h>\fR and \fB<eti.h>\fR.
.PP
In your library list, libform.a should be before libncurses.a; that is,
you want to say \*(``\-lform \-lncurses\*('', not the other way around
(which would give you a link error when using static libraries).
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.PP
The menu facility was documented in SVr4.2 in
\fICharacter User Interface Programming (UNIX SVR4.2)\fP.
.PP
It is not part of X/Open Curses.
.PP
Aside from ncurses, there are few implementations:
.bP
systems based on SVr4 source code, e.g., Solaris.
.bP
NetBSD curses.
.PP
A few functions in this implementation are extensions added for ncurses,
but not provided by other implementations, e.g.,
\fBform_driver_w\fP,
\fBunfocus_current_field\fP.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for ncurses by Eric
S. Raymond.
.SH SEE ALSO
\fBcurses\fR(3X) and related pages whose names begin \*(``form_\*('' for detailed
descriptions of the entry points.
.PP
This describes \fBncurses\fR
version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@).
diff --git a/contrib/ncurses/man/form_cursor.3x b/contrib/ncurses/man/form_cursor.3x
index 7fde03c5660e..cb9d1cd1cc33 100644
--- a/contrib/ncurses/man/form_cursor.3x
+++ b/contrib/ncurses/man/form_cursor.3x
@@ -1,72 +1,72 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_cursor.3x,v 1.12 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_cursor.3x,v 1.14 2020/10/18 00:15:29 tom Exp $
.TH form_cursor 3X ""
.SH NAME
\fBpos_form_cursor\fR \- position a form window cursor
.SH SYNOPSIS
\fB#include <form.h>\fR
-.br
-int pos_form_cursor(FORM *form);
+.sp
+\fBint pos_form_cursor(FORM *\fP\fIform\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBpos_form_cursor\fR restores the cursor to the position required
for the forms driver to continue processing requests.
This is useful after
\fBcurses\fR routines have been called to do screen-painting in response to a
form operation.
.SH RETURN VALUE
This routine returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_NOT_POSTED
The form has not been posted.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.
.SH SEE ALSO
\fBcurses\fR(3X), \fBform\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_data.3x b/contrib/ncurses/man/form_data.3x
index 1d14343d5006..8a5669209a5e 100644
--- a/contrib/ncurses/man/form_data.3x
+++ b/contrib/ncurses/man/form_data.3x
@@ -1,62 +1,62 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_data.3x,v 1.13 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_data.3x,v 1.15 2020/10/18 00:15:00 tom Exp $
.TH form_data 3X ""
.SH NAME
\fBdata_ahead\fP,
\fBdata_behind\fR \- test for off-screen data in given forms
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBbool data_ahead(const FORM *\fP\fIform\fP\fB);\fP
.br
-bool data_ahead(const FORM *form);
-.br
-bool data_behind(const FORM *form);
+\fBbool data_behind(const FORM *\fP\fIform\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBdata_ahead\fR tests whether there is off-screen data
ahead in the given form.
It returns TRUE (1) or FALSE (0).
.PP
The function \fBdata_behind\fR tests whether there is off-screen data
behind in the given form.
It returns TRUE (1) or FALSE (0).
.SH SEE ALSO
\fBcurses\fR(3X), \fBform\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_driver.3x b/contrib/ncurses/man/form_driver.3x
index 64a1e487b61e..9c096f90d4c5 100644
--- a/contrib/ncurses/man/form_driver.3x
+++ b/contrib/ncurses/man/form_driver.3x
@@ -1,271 +1,271 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_driver.3x,v 1.33 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_driver.3x,v 1.35 2020/12/19 21:34:15 tom Exp $
.TH form_driver 3X ""
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fBform_driver\fR,
\fBform_driver_w\fR \- command-processing loop of the form system
.SH SYNOPSIS
\fB#include <form.h>\fR
-.br
+.sp
\fBint form_driver(FORM *\fP\fIform\fP\fB, int \fP\fIc\fP\fB);\fP
.br
\fBint form_driver_w(FORM *\fP\fIform\fP\fB, int \fP\fIc\fP\fB, wchar_t \fP\fIwch\fP\fB);\fP
.br
.SH DESCRIPTION
.SS form_driver
Once a form has been posted (displayed), you should funnel input events to it
through \fBform_driver\fR. This routine has three major input cases:
.bP
The input is a form navigation request.
Navigation request codes are constants defined in \fB<form.h>\fP,
which are distinct from the key- and character codes returned
by \fBwgetch\fP(3X).
.bP
The input is a printable character.
Printable characters (which must be positive, less than 256) are
checked according to the program's locale settings.
.bP
The input is the KEY_MOUSE special key associated with an mouse event.
.SS form_driver_w
.PP
This extension simplifies the use of the forms library using wide characters.
The input is either a key code (a request) or a wide character
returned by \fBget_wch\fP(3X).
The type must be passed as well,
to enable the library to determine whether the parameter
is a wide character or a request.
.SS Form-driver requests
.PP
The form driver requests are as follows:
.TS
l l
_ _
l l.
\fIName\fR \fIDescription\fR
REQ_BEG_FIELD Move to the beginning of the field.
REQ_BEG_LINE Move to the beginning of the line.
REQ_CLR_EOF Clear to end of field from cursor.
REQ_CLR_EOL Clear to end of line from cursor.
REQ_CLR_FIELD Clear the entire field.
REQ_DEL_CHAR Delete character at the cursor.
REQ_DEL_LINE Delete line at the cursor.
REQ_DEL_PREV Delete character before the cursor.
REQ_DEL_WORD Delete blank-delimited word at the cursor.
REQ_DOWN_CHAR Move down in the field.
REQ_DOWN_FIELD Move down to a field.
REQ_END_FIELD Move to the end of the field.
REQ_END_LINE Move to the end of the line.
REQ_FIRST_FIELD Move to the first field.
REQ_FIRST_PAGE Move to the first page.
REQ_INS_CHAR Insert a blank at the cursor.
REQ_INS_LINE Insert a blank line at the cursor.
REQ_INS_MODE Enter insert mode.
REQ_LAST_FIELD Move to the last field.
REQ_LAST_PAGE Move to the last field.
REQ_LEFT_CHAR Move left in the field.
REQ_LEFT_FIELD Move left to a field.
REQ_NEW_LINE Insert or overlay a new line.
REQ_NEXT_CHAR Move to the next char.
REQ_NEXT_CHOICE Display next field choice.
REQ_NEXT_FIELD Move to the next field.
REQ_NEXT_LINE Move to the next line.
REQ_NEXT_PAGE Move to the next page.
REQ_NEXT_PAGE Move to the next page.
REQ_NEXT_WORD Move to the next word.
REQ_OVL_MODE Enter overlay mode.
REQ_PREV_CHAR Move to the previous char.
REQ_PREV_CHOICE Display previous field choice.
REQ_PREV_FIELD Move to the previous field.
REQ_PREV_LINE Move to the previous line.
REQ_PREV_PAGE Move to the previous page.
REQ_PREV_WORD Move to the previous word.
REQ_RIGHT_CHAR Move right in the field.
REQ_RIGHT_FIELD Move right to a field.
REQ_SCR_BCHAR Scroll the field backward a character.
REQ_SCR_BHPAGE Scroll the field backward half a page.
REQ_SCR_BLINE Scroll the field backward a line.
REQ_SCR_BPAGE Scroll the field backward a page.
REQ_SCR_FCHAR Scroll the field forward a character.
REQ_SCR_FHPAGE Scroll the field forward half a page.
REQ_SCR_FLINE Scroll the field forward a line.
REQ_SCR_FPAGE Scroll the field forward a page.
REQ_SCR_HBHALF Horizontal scroll the field backward half a line.
REQ_SCR_HBLINE Horizontal scroll the field backward a line.
REQ_SCR_HFHALF Horizontal scroll the field forward half a line.
REQ_SCR_HFLINE Horizontal scroll the field forward a line.
REQ_SFIRST_FIELD Move to the sorted first field.
REQ_SLAST_FIELD Move to the sorted last field.
REQ_SNEXT_FIELD Move to the sorted next field.
REQ_SPREV_FIELD Move to the sorted previous field.
REQ_UP_CHAR Move up in the field.
REQ_UP_FIELD Move up to a field.
REQ_VALIDATION Validate field.
.TE
.PP
If the second argument is a printable character, the driver places it
in the current position in the current field.
If it is one of the forms
requests listed above, that request is executed.
.SS Field validation
The form library makes updates to the window associated
with form fields rather than directly to the field buffers.
.PP
The form driver provides low-level control over updates to the form fields.
The form driver also provides for validating modified fields
to ensure that the contents
meet whatever constraints an application may attach using \fBset_field_type\fP.
.PP
.PP
You can validate a field without making any changes to it using
\fBREQ_VALIDATION\fP.
The form driver also validates a field in these cases:
.bP
a call to \fBset_current_field\fP attempts to move to a different field.
.bP
a call to \fBset_current_page\fP attempts to move
to a different page of the form.
.bP
a request attempts to move to a different field.
.bP
a request attempts to move to a different page of the form.
.PP
In each case, the move fails if the field is invalid.
.PP
If the modified field is valid, the form driver copies the modified
data from the window associated with the field
to the field buffer.
.SS Mouse handling
.PP
If the second argument is the KEY_MOUSE special key, the associated
mouse event is translated into one of the above pre-defined requests.
Currently only clicks in the user window (e.g., inside the form display
area or the decoration window) are handled.
.PP
If you click above the display region of the form:
.RS 3
.TP
a REQ_PREV_FIELD is generated for a single click,
.TP
a REQ_PREV_PAGE is generated for a double-click and
.TP
a REQ_FIRST_FIELD is generated for a triple-click.
.RE
.PP
If you click below the display region of the form:
.RS 3
.TP
a REQ_NEXT_FIELD is generated for a single click,
.TP
a REQ_NEXT_PAGE is generated for a double-click and
.TP
a REQ_LAST_FIELD is generated for a triple-click.
.RE
.PP
If you click at an field inside the display area of the form:
.RS 3
.bP
the form cursor is positioned to that field.
.bP
If you double-click a field,
the form cursor is positioned to that field
and \fBE_UNKNOWN_COMMAND\fR is returned.
This return value makes sense,
because a double click usually means that an field-specific action should
be returned.
It is exactly the purpose of this return value to signal that an
application specific command should be executed.
.bP
If a translation
into a request was done, \fBform_driver\fR returns the result of this request.
.RE
.PP
If you clicked outside the user window
or the mouse event could not be translated
into a form request an \fBE_REQUEST_DENIED\fR is returned.
.SS Application-defined commands
.PP
If the second argument is neither printable nor one of the above
pre-defined form requests, the driver assumes it is an application-specific
command and returns \fBE_UNKNOWN_COMMAND\fR. Application-defined commands
should be defined relative to \fBMAX_COMMAND\fR, the maximum value of these
pre-defined requests.
.SH RETURN VALUE
\fBform_driver\fR returns one of the following error codes:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_BAD_STATE
Routine was called from an initialization or termination function.
.TP 5
.B E_NOT_POSTED
The form has not been posted.
.TP 5
.B E_INVALID_FIELD
Contents of field is invalid.
.TP 5
.B E_NOT_CONNECTED
No fields are connected to the form.
.TP 5
.B E_REQUEST_DENIED
The form driver could not process the request.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_UNKNOWN_COMMAND
The form driver code saw an unknown request code.
.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBform\fR(3X),
+\fBform_fieldtype\fR(3X),
\fBform_field_buffer\fR(3X),
\fBform_field_validation\fR(3X),
-\fBform_fieldtype\fR(3X),
\fBform_variables\fR(3X),
\fBgetch\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header files
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_field.3x b/contrib/ncurses/man/form_field.3x
index 113604d68932..01ff576af173 100644
--- a/contrib/ncurses/man/form_field.3x
+++ b/contrib/ncurses/man/form_field.3x
@@ -1,94 +1,94 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2012 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_field.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_field.3x,v 1.17 2020/10/24 09:10:45 tom Exp $
.TH form_field 3X ""
.SH NAME
\fBform_field\fR \- make and break connections between fields and forms
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBint set_form_fields(FORM *\fP\fIform\fP\fB, FIELD **\fP\fIfields\fP\fB);\fP
.br
-int set_form_fields(FORM *form, FIELD **fields);
+\fBFIELD **form_fields(const FORM *\fP\fIform\fP\fB);\fP
.br
-FIELD **form_fields(const FORM *form);
+\fBint field_count(const FORM *\fP\fIform\fP\fB);\fP
.br
-int field_count(const FORM *form);
-.br
-int move_field(FIELD *field, int frow, int fcol);
+\fBint move_field(FIELD *\fP\fIfield\fP\fB, int \fP\fIfrow\fP\fB, int \fP\fIfcol\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_form_fields\fR changes the field pointer array of
the given \fIform\fR. The array must be terminated by a \fBNULL\fR.
.PP
The function \fBform_fields\fR returns the field array of the given form.
.PP
The function \fBfield_count\fR returns the count of fields in \fIform\fR.
.PP
The function \fBmove_field\fR moves the given field (which must be disconnected)
to a specified location on the screen.
.SH RETURN VALUE
The function \fBform_fields\fR returns a pointer (which may be \fBNULL\fR).
-It does not set errno.
+It does not set \fBerrno\fP.
.PP
The function \fBfield_count\fR returns \fBERR\fR if the \fIform\fP parameter
is \fBNULL\fP.
.PP
The functions \fBset_form_fields\fR and \fBmove_field\fR return one of
the following codes on error:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_CONNECTED
The field is already connected to a form.
.TP 5
.B E_POSTED
The form is already posted.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.SH SEE ALSO
\fBcurses\fR(3X), \fBform\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.PP
The SVr4 forms library documentation specifies the \fBfield_count\fR error value
as \-1 (which is the value of \fBERR\fR).
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_field_attributes.3x b/contrib/ncurses/man/form_field_attributes.3x
index caeffa39c52f..88778b1bc9a5 100644
--- a/contrib/ncurses/man/form_field_attributes.3x
+++ b/contrib/ncurses/man/form_field_attributes.3x
@@ -1,96 +1,96 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2006,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_field_attributes.3x,v 1.16 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_field_attributes.3x,v 1.18 2020/10/18 00:14:20 tom Exp $
.TH form_field_attributes 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.SH NAME
\fBform_field_attributes\fR \- color and attribute control for form fields
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBint set_field_fore(FIELD *\fP\fIfield\fP\fB, chtype \fP\fIattr\fP\fB);\fP
.br
-int set_field_fore(FIELD *field, chtype attr);
+\fBchtype field_fore(const FIELD *\fP\fIfield\fP\fB);\fP
+.sp
+\fBint set_field_back(FIELD *\fP\fIfield\fP\fB, chtype \fP\fIattr\fP\fB);\fP
.br
-chtype field_fore(const FIELD *field);
+\fBchtype field_back(const FIELD *\fP\fIfield\fP\fB);\fP
+.sp
+\fBint set_field_pad(FIELD *\fP\fIfield\fP\fB, int \fP\fIpad\fP\fB);\fP
.br
-int set_field_back(FIELD *field, chtype attr);
-.br
-chtype field_back(const FIELD *field);
-.br
-int set_field_pad(FIELD *field, int pad);
-.br
-int field_pad(const FIELD *field);
+\fBint field_pad(const FIELD *\fP\fIfield\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_field_fore\fR sets the foreground attribute of
\fIfield\fR. This is the highlight used to display the field contents. The
function \fBfield_fore\fR returns the foreground attribute.
The default is
\fBA_STANDOUT\fR.
.PP
The function \fBset_field_back\fR sets the background attribute of
\fIform\fR. This is the highlight used to display the extent fields in the
form.
The function \fBfield_back\fR returns the background attribute.
The
default is \fBA_NORMAL\fR.
.PP
The function \fBset_field_pad\fR sets the character used to fill the field.
The function \fBfield_pad\fR returns the given form's pad character.
The
default is a blank.
.SH RETURN VALUE
These routines return one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.
.SH SEE ALSO
\fBcurses\fR(3X) and related pages whose names begin \*(``form_\*('' for detailed
descriptions of the entry points.
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_field_buffer.3x b/contrib/ncurses/man/form_field_buffer.3x
index 95e963e2bf23..98b2e42dc831 100644
--- a/contrib/ncurses/man/form_field_buffer.3x
+++ b/contrib/ncurses/man/form_field_buffer.3x
@@ -1,144 +1,144 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_field_buffer.3x,v 1.25 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_field_buffer.3x,v 1.27 2020/10/24 09:27:17 tom Exp $
.TH form_field_buffer 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fBform_field_buffer\fR \- field buffer control
.SH SYNOPSIS
\fB#include <form.h>\fR
.sp
-int set_field_buffer(FIELD *field, int buf, const char *value);
+\fBint set_field_buffer(FIELD *\fP\fIfield\fP\fB, int \fP\fIbuf\fP\fB, const char *\fP\fIvalue\fP\fB);\fP
.br
-char *field_buffer(const FIELD *field, int buffer);
-.br
-int set_field_status(FIELD *field, bool status);
-.br
-bool field_status(const FIELD *field);
+\fBchar *field_buffer(const FIELD *\fP\fIfield\fP\fB, int \fP\fIbuffer\fP\fB);\fP
+.sp
+\fBint set_field_status(FIELD *\fP\fIfield\fP\fB, bool \fP\fIstatus\fP\fB);\fP
.br
-int set_max_field(FIELD *field, int max);
+\fBbool field_status(const FIELD *\fP\fIfield\fP\fB);\fP
+.sp
+\fBint set_max_field(FIELD *\fP\fIfield\fP\fB, int \fP\fImax\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_field_buffer\fR sets the numbered buffer of the given field
to contain a given string:
.RS 3
.bP
Buffer 0 is the displayed value of the field.
.bP
Other numbered buffers may be allocated by applications through the \fBnbuf\fR
argument of (see \fBform_field_new\fR(3X))
but are not manipulated by the forms library.
.RE
.PP
The function \fBfield_buffer\fR returns a pointer to
the contents of the given numbered buffer:
.RS 3
.bP
The buffer contents always have the same length,
and are padded with trailing spaces
as needed to ensure this length is the same.
.bP
The buffer may contain leading spaces, depending on how it was set.
.bP
The buffer contents are set with \fBset_field_buffer\fP,
or as a side effect of any editing operations on the corresponding field.
.bP
Editing operations are based on the \fIwindow\fP which displays the field,
rather than a \fIstring\fP.
The window contains only printable characters, and is filled with blanks.
If you want the raw data, you must write your
own routine that copies the value out of the buffer and removes the leading
and trailing spaces.
.bP
Because editing operations change the content of the buffer to
correspond to the window, you should not rely on using buffers
for long-term storage of form data.
.RE
.PP
The function \fBset_field_status\fR sets the associated status flag of
\fIfield\fR; \fBfield_status\fR gets the current value.
The status flag
is set to a nonzero value whenever the field changes.
.PP
The function \fBset_max_field\fR sets the maximum size for a dynamic field.
An argument of 0 turns off any maximum size threshold for that field.
.SH RETURN VALUE
The \fBfield_buffer\fR function returns NULL on error.
-It sets errno according to their success:
+It sets \fBerrno\fP according to their success:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.PP
The \fBfield_status\fR function returns \fBTRUE\fR or \fBFALSE\fR.
.PP
The remaining routines return one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.SH SEE ALSO
\fBcurses\fR(3X) and related pages whose names begin \*(``form_\*('' for detailed
descriptions of the entry points.
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
.PP
When configured for wide characters, \fBfield_buffer\fP returns a pointer
to temporary storage (allocated and freed by the library).
The application should not attempt to modify the data.
It will be freed on the next call to \fBfield_buffer\fP to return the
same buffer.
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.PP
The \fBset_max_field\fP function checks for an ncurses extension
\fBO_INPUT_FIELD\fP which allows a dynamic field to shrink if the new
limit is smaller than the current field size.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_field_info.3x b/contrib/ncurses/man/form_field_info.3x
index ba4c82a4aecf..556c45ba22d5 100644
--- a/contrib/ncurses/man/form_field_info.3x
+++ b/contrib/ncurses/man/form_field_info.3x
@@ -1,88 +1,92 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_field_info.3x,v 1.17 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_field_info.3x,v 1.18 2020/10/17 23:35:05 tom Exp $
.TH form_field_info 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.SH NAME
\fBdynamic_field_info\fP,
\fBfield_info\fR \- retrieve field characteristics
.SH SYNOPSIS
+.nf
\fB#include <form.h>\fR
-.br
-int field_info(const FIELD *field, int *rows, int *cols,
- int *frow, int *fcol, int *nrow, int *nbuf);
-.br
-int dynamic_field_info(const FIELD *field, int *rows, int *cols, int *max);
-.br
+.sp
+\fBint field_info(const FIELD *\fP\fIfield\fP\fB,\fP
+ \fBint *\fP\fIrows\fP\fB, int *\fP\fIcols\fP\fB,\fP
+ \fBint *\fP\fIfrow\fP\fB, int *\fP\fIfcol\fP\fB,\fP
+ \fBint *\fP\fInrow\fP\fB, int *\fP\fInbuf\fB);\fP
+.sp
+\fBint dynamic_field_info(const FIELD *\fP\fIfield\fP\fB,\fP
+ \fBint *\fP\fIrows\fP\fB, int *\fP\fIcols\fP\fB, int *\fImax\fB);\fP
+.fi
.SH DESCRIPTION
The function \fBfield_info\fR returns the sizes and other attributes passed in
to the field at its creation time.
The attributes are: height, width, row of
upper-left corner, column of upper-left corner, number off-screen rows, and
number of working buffers.
.PP
The function \fBdynamic_field_info\fR returns the actual size of the field, and
its maximum possible size.
If the field has no size limit, the location
addressed by the third argument will be set to 0.
A field can be made dynamic
by turning off the \fBO_STATIC\fR option with \fBfield_opts_off\fR.
.SH RETURN VALUE
These routines return one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.SH SEE ALSO
\fBcurses\fR(3X) and related pages whose names begin \*(``form_\*('' for detailed
descriptions of the entry points.
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.PP
A null (zero pointer) is accepted for any of the return values,
to ignore that value.
Not all implementations allow this, e.g., Solaris 2.7 does not.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_field_just.3x b/contrib/ncurses/man/form_field_just.3x
index bd3753d11ad0..d8fef7656542 100644
--- a/contrib/ncurses/man/form_field_just.3x
+++ b/contrib/ncurses/man/form_field_just.3x
@@ -1,79 +1,79 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_field_just.3x,v 1.16 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_field_just.3x,v 1.18 2020/10/18 00:12:55 tom Exp $
.TH form_field_just 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.SH NAME
\fBset_field_just\fR,
\fBfield_just\fP \- retrieve field characteristics
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBint set_field_just(FIELD *\fP\fIfield\fP\fB, int \fP\fIjustification\fP\fB);\fP
.br
-int set_field_just(FIELD *field, int justification);
-.br
-int field_just(const FIELD *field);
+\fBint field_just(const FIELD *\fP\fIfield\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_field_just\fR sets the justification attribute of
a field; \fBfield_just\fR returns a field's justification attribute.
The attribute may be one of NO_JUSTIFICATION, JUSTIFY_RIGHT,
JUSTIFY_LEFT, or JUSTIFY_CENTER.
.
.SH RETURN VALUE
The function \fBfield_just\fR returns one of: NO_JUSTIFICATION,
JUSTIFY_RIGHT, JUSTIFY_LEFT, or JUSTIFY_CENTER.
.PP
The function \fBset_field_just\fR returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.SH SEE ALSO
\fBcurses\fR(3X) and related pages whose names begin \*(``form_\*('' for detailed
descriptions of the entry points.
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_field_new.3x b/contrib/ncurses/man/form_field_new.3x
index 18ad3b9dd6fc..1a240d0a7fc3 100644
--- a/contrib/ncurses/man/form_field_new.3x
+++ b/contrib/ncurses/man/form_field_new.3x
@@ -1,108 +1,108 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_field_new.3x,v 1.21 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_field_new.3x,v 1.24 2020/10/24 09:09:18 tom Exp $
.TH form_field_new 3X ""
.SH NAME
\fBnew_field\fR,
\fBdup_field\fR,
\fBlink_field\fR,
\fBfree_field\fR \- create and destroy form fields
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBFIELD *new_field(int \fP\fIheight\fP\fB, int \fP\fIwidth\fP\fB,\fP
+ \fBint \fP\fItoprow\fP\fB, int \fP\fIleftcol\fP\fB,\fP
+ \fBint \fP\fIoffscreen\fP\fB, int \fP\fInbuffers\fP\fB);\fP
.br
-FIELD *new_field(int height, int width,
- int toprow, int leftcol,
- int offscreen, int nbuffers);
+\fBFIELD *dup_field(FIELD *\fP\fIfield\fP\fB, int \fP\fItoprow\fP\fB, int \fP\fIleftcol\fP\fB);\fP
.br
-FIELD *dup_field(FIELD *field, int toprow, int leftcol);
+\fBFIELD *link_field(FIELD *\fP\fIfield\fP\fB, int \fP\fItoprow\fP\fB, int \fP\fIleftcol\fP\fB);\fP
.br
-FIELD *link_field(FIELD *field, int toprow, int leftcol);
-.br
-int free_field(FIELD *field);
+\fBint free_field(FIELD *\fP\fIfield\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBnew_field\fR allocates a new field and initializes it from the
parameters given: height, width, row of upper-left corner, column of upper-left
corner, number off-screen rows, and number of additional working buffers.
.PP
The function \fBdup_field\fR duplicates a field at a new location.
Most
attributes (including current contents, size, validation type, buffer count,
growth threshold, justification, foreground, background, pad character,
options, and user pointer) are copied.
Field status and the field page bit are
not copied.
.PP
The function \fBlink_field\fR acts like \fBdup_field\fR, but the new field
shares buffers with its parent.
Attribute data is separate.
.PP
The function \fBfree_field\fR de-allocates storage associated with a field.
.SH RETURN VALUE
-The function, \fBnew_field\fR, \fBdup_field\fR, \fBlink_field\fR return
+The functions \fBnew_field\fR, \fBdup_field\fR, \fBlink_field\fR return
\fBNULL\fR on error.
-They set errno according to their success:
+They set \fBerrno\fP according to their success:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_SYSTEM_ERROR
System error occurred, e.g., malloc failure.
.PP
The function \fBfree_field\fR returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_CONNECTED
field is connected.
.SH SEE ALSO
\fBcurses\fR(3X), \fBform\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.PP
It may be unwise to count on the set of attributes copied by
\fBdup_field\fR being portable; the System V forms library documents are
not very explicit about what gets copied and what does not.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_field_opts.3x b/contrib/ncurses/man/form_field_opts.3x
index 14f9a20dfb18..96338e295eef 100644
--- a/contrib/ncurses/man/form_field_opts.3x
+++ b/contrib/ncurses/man/form_field_opts.3x
@@ -1,150 +1,150 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2014,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_field_opts.3x,v 1.25 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_field_opts.3x,v 1.27 2020/10/18 00:11:45 tom Exp $
.TH form_field_opts 3X ""
.SH NAME
\fBset_field_opts\fP,
\fBfield_opts_on\fP,
\fBfield_opts_off\fP,
\fBfield_opts\fP \- set and get field options
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBint set_field_opts(FIELD *\fP\fIfield\fP\fB, Field_Options \fP\fIopts\fP\fB);\fP
.br
-int set_field_opts(FIELD *field, Field_Options opts);
+\fBField_Options field_opts(const FIELD *\fP\fIfield\fP\fB);\fP
+.sp
+\fBint field_opts_on(FIELD *\fP\fIfield\fP\fB, Field_Options \fP\fIopts\fP\fB);\fP
.br
-int field_opts_on(FIELD *field, Field_Options opts);
-.br
-int field_opts_off(FIELD *field, Field_Options opts);
-.br
-Field_Options field_opts(const FIELD *field);
+\fBint field_opts_off(FIELD *\fP\fIfield\fP\fB, Field_Options \fP\fIopts\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_field_opts\fR sets all the given field's option bits (field
option bits may be logically-OR'ed together).
.PP
The function \fBfield_opts_on\fR turns on the given option bits, and leaves
others alone.
.PP
The function \fBfield_opts_off\fR turns off the given option bits, and leaves
others alone.
.PP
The function \fBfield_opts\fR returns the field's current option bits.
.PP
The following standard options are defined (all are on by default):
.TP 5
O_ACTIVE
The field is visited during processing.
If this option is off, the field will
not be reachable by navigation keys.
Please notice that an invisible field
appears to be inactive also.
.TP 5
O_AUTOSKIP
Skip to the next field when this one fills.
.TP 5
O_BLANK
The field is cleared whenever a character is entered at the first position.
.TP 5
O_EDIT
The field can be edited.
.TP 5
O_NULLOK
Allow a blank field.
.TP 5
O_PASSOK
Validate field only if modified by user.
.TP 5
O_PUBLIC
The field contents are displayed as data is entered.
.TP 5
O_STATIC
Field buffers are fixed to field's original size.
Turn this option off to create a dynamic field.
.TP 5
O_VISIBLE
The field is displayed.
If this option is off, display of the field is
suppressed.
.TP 5
O_WRAP
Words that do not fit on a line are wrapped to the next line.
Words are
blank-separated.
.PP
These extension options are defined (extensions are off by default):
.TP 5
O_DYNAMIC_JUSTIFY
Permit dynamic fields to be justified, like static fields.
.TP 5
O_NO_LEFT_STRIP
Preserve leading whitespace in the field buffer, which is normally discarded.
.TP 5
O_EDGE_INSERT_STAY
When inserting into a field up to the boundary position,
optionally delay the scrolling,
so that the last inserted character remains visible,
but advance the cursor to reflect the insertion.
This allows the form library to display the
inserted character in one-character fields
as well as allowing the library to maintain consistent state.
.TP 5
O_INPUT_FIELD
The \fBset_max_field\fP function checks for this extension,
which allows a dynamic field to shrink if the new
limit is smaller than the current field size.
.SH RETURN VALUE
Except for \fBfield_opts\fR, each routine returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_CURRENT
The field is the current field.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.SH SEE ALSO
\fBcurses\fR(3X),
\fBform\fR(3X).
\fBform_field_just\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_field_userptr.3x b/contrib/ncurses/man/form_field_userptr.3x
index 4d6aa57fdea8..5d3ab1444c35 100644
--- a/contrib/ncurses/man/form_field_userptr.3x
+++ b/contrib/ncurses/man/form_field_userptr.3x
@@ -1,67 +1,66 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_field_userptr.3x,v 1.13 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_field_userptr.3x,v 1.16 2020/10/24 09:06:33 tom Exp $
.TH form_field_userptr 3X ""
.SH NAME
\fBset_field_userptr\fR,
\fBfield_userptr\fR \- associate application data with a form field
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBint set_field_userptr(FIELD *\fP\fIfield\fP\fB, void *\fP\fIuserptr\fP\fB);\fP
.br
-int set_field_userptr(FIELD *field, void*userptr);
-.br
-void *field_userptr(const FIELD *field);
-.br
+\fBvoid *field_userptr(const FIELD *\fP\fIfield\fP\fB);\fP
.SH DESCRIPTION
Every form field has a field that can be used to hold application-specific data
(that is, the form-driver code leaves it alone).
These functions get and set
that field.
.SH RETURN VALUE
The function \fBfield_userptr\fR returns a pointer (which may be \fBNULL\fR).
-It does not set errno.
+It does not set \fBerrno\fP.
.PP
The function \fBset_field_userptr\fR returns \fBE_OK\fP (success).
.SH SEE ALSO
\fBcurses\fR(3X), \fBform\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.PP
The user pointer is a void pointer.
We chose not to leave it as a char pointer for SVr4 compatibility.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_field_validation.3x b/contrib/ncurses/man/form_field_validation.3x
index 58359230e491..8ce9132c13c7 100644
--- a/contrib/ncurses/man/form_field_validation.3x
+++ b/contrib/ncurses/man/form_field_validation.3x
@@ -1,190 +1,234 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_field_validation.3x,v 1.25 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_field_validation.3x,v 1.33 2020/12/12 19:57:55 tom Exp $
.TH form_field_validation 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fBform_field_validation\fR \- data type validation for fields
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBvoid *field_arg(const FIELD *\fP\fIfield\fP\fB);\fP
.br
-int set_field_type(FIELD *field, FIELDTYPE *type, ...);
-.br
-FIELDTYPE *field_type(const FIELD *field);
+\fBFIELDTYPE *field_type(const FIELD *\fP\fIfield\fP\fB);\fP
.br
-void *field_arg(const FIELD *field);
+\fBint set_field_type(FIELD *\fP\fIfield\fP\fB, FIELDTYPE *\fP\fItype\fP\fB, ...);\fP
.sp
-FIELDTYPE *TYPE_ALNUM;
+/* predefined field types */
.br
-FIELDTYPE *TYPE_ALPHA;
+\fBFIELDTYPE *TYPE_ALNUM;\fP
.br
-FIELDTYPE *TYPE_ENUM;
+\fBFIELDTYPE *TYPE_ALPHA;\fP
.br
-FIELDTYPE *TYPE_INTEGER;
+\fBFIELDTYPE *TYPE_ENUM;\fP
.br
-FIELDTYPE *TYPE_NUMERIC;
+\fBFIELDTYPE *TYPE_INTEGER;\fP
.br
-FIELDTYPE *TYPE_REGEXP;
+\fBFIELDTYPE *TYPE_NUMERIC;\fP
.br
-FIELDTYPE *TYPE_IPV4;
+\fBFIELDTYPE *TYPE_REGEXP;\fP
+.br
+\fBFIELDTYPE *TYPE_IPV4;\fP
.br
.SH DESCRIPTION
-The function \fBset_field_type\fR declares a data type for a given form field.
+By default, no validation is done on form fields.
+You can associate a form with with a \fIfield type\fP,
+making the form library validate input.
+.SS field_arg
+Returns a pointer to the field's argument block.
+The \fIargument block\fP is an opaque structure containing
+a copy of the arguments provided in a \fBset_field_type\fP call.
+.SS field_type
+Returns a pointer to the \fIfield type\fP associated with the form field,
+i.e., by calling \fBset_field_type\fP.
+.SS set_field_type
+The function \fBset_field_type\fR associates
+a field type with a given form field.
This is the type checked by validation functions.
+Most field types are configurable,
+via arguments which the caller provides when calling \fBset_field_type\fP.
+.PP
+Several field types are predefined by the form library.
+.SS Predefined types
+.PP
+It is possible to set up new programmer-defined field types.
+Field types are implemented via the \fBFIELDTYPE\fP data
+structure, which contains several pointers to functions.
+.PP
+See the \fBform_fieldtype\fR(3X) manual page,
+which describes functions which can be used to construct
+a field-type dynamically.
+.PP
The predefined types are as follows:
.TP 5
TYPE_ALNUM
Alphanumeric data.
-Requires a third \fBint\fR argument, a minimum field width.
+Required parameter:
+.RS
+.bP
+a third \fBint\fR argument, a minimum field width.
+.RE
.TP 5
TYPE_ALPHA
Character data.
-Requires a third \fBint\fR argument, a minimum field width.
+Required parameter:
+.RS
+.bP
+a third \fBint\fR argument, a minimum field width.
+.RE
.TP 5
TYPE_ENUM
Accept one of a specified set of strings.
-Requires additional parameters:
+Required parameters:
.RS
.bP
a third \fB(char **)\fR argument pointing to a string list;
.bP
a fourth \fBint\fR flag argument to enable case-sensitivity;
.bP
-and a fifth \fBint\fR flag argument specifying whether a partial
+a fifth \fBint\fR flag argument specifying whether a partial
match must be a unique one.
If this flag is off, a prefix matches the first
of any set of more than one list elements with that prefix.
+.RE
.IP
The library copies the string list,
so you may use a list that lives in automatic variables on the stack.
-.RE
.TP 5
TYPE_INTEGER
Integer data, parsable to an integer by \fBatoi\fP(3).
-Requires additional parameters:
+Required parameters:
.RS
.bP
a third \fBint\fR argument controlling the precision,
.bP
a fourth \fBlong\fR argument constraining minimum value,
.bP
-and a fifth \fBlong\fR constraining maximum value.
+a fifth \fBlong\fR constraining maximum value.
If the maximum value is less than or equal to the minimum value, the range is
simply ignored.
+.RE
+.IP
On return, the field buffer is formatted according to the
\fBprintf\fR format specification \*(``.*ld\*('',
where the \*(``*\*('' is replaced by the precision argument.
.IP
For details of the precision handling see \fBprintf\fR(3).
-.RE
.TP 5
TYPE_NUMERIC
Numeric data (may have a decimal-point part).
-This requires additional parameters:
+Required parameters:
.RS
.bP
a third \fBint\fR argument controlling the precision,
.bP
a fourth \fBdouble\fR argument constraining minimum value,
.bP
and a fifth \fBdouble\fR constraining maximum value.
If your system supports locales,
the decimal point character must be the one specified by your locale.
If the maximum value is less than or equal to the minimum value,
the range is simply ignored.
+.RE
.IP
On return, the field buffer is formatted according to the
\fBprintf\fR format specification \*(``.*f\*('',
where the \*(``*\*('' is replaced by the precision argument.
.IP
For details of the precision handling see \fBprintf\fR(3).
-.RE
.TP 5
TYPE_REGEXP
Regular expression data.
-Requires a regular expression \fB(char *)\fR third argument.
+Required parameter:
+.RS
+.bP
+a third argument, a regular expression \fB(char *)\fR string.
The data is valid if the regular expression matches it.
+.RE
.IP
Regular expressions
are in the format of \fBregcomp\fR and \fBregexec\fR.
.IP
The regular expression must match the whole field.
If you have for example, an eight character wide field,
a regular expression "^[0\-9]*$" always
means that you have to fill all eight positions with digits.
If you want to allow fewer digits,
you may use for example "^[0\-9]* *$" which is good for
trailing spaces (up to an empty field),
or "^ *[0\-9]* *$" which is good for
leading and trailing spaces around the digits.
.TP 5
TYPE_IPV4
An Internet Protocol Version 4 address.
-This requires no additional argument.
-The library checks whether or not the buffer has the form a.b.c.d,
-where a,b,c and d are numbers between 0 and 255.
+Required parameter:
+.RS
+.bP
+none
+.RE
+.IP
+The form library checks whether or not the buffer has the form \fIa.b.c.d\fP,
+where \fIa\fP, \fIb\fP, \fIc\fP, and \fId\fP are numbers in the range 0 to 255.
Trailing blanks in the buffer are ignored.
The address itself is not validated.
.IP
This is an ncurses extension;
this field type may not be available in other curses implementations.
-.PP
-It is possible to set up new programmer-defined field types.
-See the \fBform_fieldtype\fR(3X) manual page.
.SH RETURN VALUE
The functions \fBfield_type\fR and \fBfield_arg\fR return \fBNULL\fR on error.
The function \fBset_field_type\fR returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.SH SEE ALSO
\fBcurses\fR(3X),
\fBform\fR(3X),
+\fBform_fieldtype\fR(3X),
\fBform_variables\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_fieldtype.3x b/contrib/ncurses/man/form_fieldtype.3x
index dd350c2bd8ef..767c3fcfafcd 100644
--- a/contrib/ncurses/man/form_fieldtype.3x
+++ b/contrib/ncurses/man/form_fieldtype.3x
@@ -1,145 +1,170 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2006,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_fieldtype.3x,v 1.20 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_fieldtype.3x,v 1.28 2020/12/12 17:11:21 tom Exp $
+.de bP
+.ie n .IP \(bu 4
+.el .IP \(bu 2
+..
.TH form_fieldtype 3X ""
.SH NAME
\fBform_fieldtype\fR \- define validation-field types
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBFIELDTYPE *new_fieldtype(\fP
+ \fBbool (* const \fP\fIfield_check\fP\fB)(FIELD *, const void *),\fP
+ \fBbool (* const \fP\fIchar_check\fP\fB)(int, const void *));\fP
.br
-FIELDTYPE *new_fieldtype(
- bool (* const field_check)(FIELD *, const void *),
- bool (* const char_check)(int, const void *));
-.br
-int free_fieldtype(FIELDTYPE *fieldtype);
-.br
-int set_fieldtype_arg(
- FIELDTYPE *fieldtype,
- void *(* const make_arg)(va_list *),
- void *(* const copy_arg)(const void *),
- void (* const free_arg)(void *));
-.br
-int set_fieldtype_choice(
- FIELDTYPE *fieldtype,
- bool (* const next_choice)(FIELD *, const void *),
- bool (* const prev_choice)(FIELD *, const void *));
-.br
-FIELDTYPE *link_fieldtype(FIELDTYPE *type1,
- FIELDTYPE *type2);
+\fBint free_fieldtype(FIELDTYPE *\fP\fIfieldtype\fP\fB);\fP
+.sp
+\fBint set_fieldtype_arg(\fP
+ \fBFIELDTYPE *\fP\fIfieldtype\fP\fB,\fP
+ \fBvoid *(* const \fP\fImake_arg\fP\fB)(va_list *),\fP
+ \fBvoid *(* const \fP\fIcopy_arg\fP\fB)(const void *),\fP
+ \fBvoid (* const \fP\fIfree_arg\fP\fB)(void *));\fP
.br
+\fBint set_fieldtype_choice(\fP
+ \fBFIELDTYPE *\fP\fIfieldtype\fP\fB,\fP
+ \fBbool (* const \fP\fInext_choice\fP\fB)(FIELD *, const void *),\fP
+ \fBbool (* const \fP\fIprev_choice\fP\fB)(FIELD *, const void *));\fP
+.sp
+\fBFIELDTYPE *link_fieldtype(FIELDTYPE *\fP\fItype1\fP\fB,\fP
+ \fBFIELDTYPE *\fP\fItype2\fP\fB);\fP
.SH DESCRIPTION
+.SS new_fieldtype
The function \fBnew_fieldtype\fR creates a new field type usable for data
validation.
-You supply it with \fIfield_check\fR, a predicate to check the
+Its parameters are function pointers:
+.TP 5
+\fIfield_check\fR
+This function checks the
validity of an entered data string whenever the user attempts to leave a field.
+It has two arguments:
+.RS
+.bP
The (FIELD *) argument is passed in so the validation predicate can see the
-field's buffer, sizes and other attributes; the second argument is an
+field's buffer, sizes and other attributes.
+.bP
+The second argument is an
argument-block structure, about which more below.
+.RE
+.TP 5
+\fIchar_check\fR
+This function validates input characters as they are entered.
+The form library passes it the character to be checked
+and a pointer to an argument-block structure.
+.SS free_fieldtype
.PP
-You also supply \fBnew_fieldtype\fR with \fIchar_check\fR,
-a function to validate input characters as they are entered; it will be passed
-the character to be checked and a pointer to an argument-block structure.
-.PP
-The function \fBfree_fieldtype\fR frees the space allocated for a given
-validation type.
+The \fBfree_fieldtype\fR function
+frees the space allocated for a given validation type by \fBnew_fieldtype\fP.
+.SS set_fieldtype_arg
.PP
The function \fBset_fieldtype_arg\fR associates
-three storage-management functions with a field type.
-The \fImake_arg\fR function is automatically applied to the
+three storage-management functions with a field type:
+.TP 5
+\fImake_arg\fR
+This function is automatically applied to the
list of arguments you give \fBset_field_type\fR when attaching validation
-to a field; its job is to bundle these into an allocated argument-block
-object which can later be passed to validation predicated.
-The other two hook arguments should copy and free argument-block structures.
-They will be used by the forms-driver code.
-You must supply the \fImake_arg\fR function,
-the other two are optional, you may supply NULL for them.
-In this case it is assumed
+to a field.
+It stores the arguments in an allocated argument-block
+object which is used when validating input.
+.TP 5
+\fIcopy_arg\fR
+This function may be used by applications to copy argument-blocks.
+.TP 5
+\fIfree_arg\fR
+Frees an argument-block structure.
+.PP
+You must supply the \fImake_arg\fR function.
+The other two are optional: you may supply NULL for them.
+In this case, the form library assumes
that \fImake_arg\fR does not allocate memory but simply loads the
argument into a single scalar value.
-.PP
-The function \fBlink_fieldtype\fR creates
-a new field type from the two given types.
-They are connected by an logical 'OR'.
+.SS set_fieldtype_choice
.PP
The form driver requests \fBREQ_NEXT_CHOICE\fR and \fBREQ_PREV_CHOICE\fR assume
that the possible values of a field form an ordered set, and provide the forms
user with a way to move through the set.
+.PP
The \fBset_fieldtype_choice\fR
function allows forms programmers to define successor and predecessor functions
for the field type.
These functions take the field pointer and an
argument-block structure as arguments.
+.SS link_fieldtype
+.PP
+The function \fBlink_fieldtype\fR creates
+a new field type from the two given types.
+They are connected by an logical 'OR'.
.SH RETURN VALUE
The pointer-valued routines return NULL on error.
-They set errno according to their success:
+They set \fBerrno\fP according to their success:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_SYSTEM_ERROR
System error occurred, e.g., malloc failure.
.PP
The integer-valued routines return one of the following codes on
error:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_CONNECTED
The field is already connected to a form.
.TP 5
.B E_CURRENT
The field is the current field.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.SH SEE ALSO
-\fBcurses\fR(3X), \fBform\fR(3X).
+\fBcurses\fR(3X),
+\fBform\fR(3X),
+\fBform_field_validation\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
-.PP
-All of the \fB(char *)\fR arguments of these functions should actually be
-\fB(void *)\fR. The type has been left uncorrected for strict compatibility
-with System V.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_hook.3x b/contrib/ncurses/man/form_hook.3x
index 5ddeb9fe897d..e84aa972f4c2 100644
--- a/contrib/ncurses/man/form_hook.3x
+++ b/contrib/ncurses/man/form_hook.3x
@@ -1,101 +1,101 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2007,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_hook.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_hook.3x,v 1.16 2020/10/18 00:06:29 tom Exp $
.TH form_hook 3X ""
.SH NAME
\fBform_hook\fR \- set hooks for automatic invocation by applications
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBint set_field_init(FORM *\fP\fIform\fP\fB, Form_Hook \fP\fIfunc\fP\fB);\fP
.br
-int set_field_init(FORM *form, Form_Hook func);
+\fBForm_Hook field_init(const FORM *\fP\fIform\fP\fB);\fP
+.sp
+\fBint set_field_term(FORM *\fP\fIform\fP\fB, Form_Hook \fP\fIfunc\fP\fB);\fP
.br
-Form_Hook field_init(const FORM *form);
+\fBForm_Hook field_term(const FORM *\fP\fIform\fP\fB);\fP
+.sp
+\fBint set_form_init(FORM *\fP\fIform\fP\fB, Form_Hook \fP\fIfunc\fP\fB);\fP
.br
-int set_field_term(FORM *form, Form_Hook func);
+\fBForm_Hook form_init(const FORM *\fP\fIform\fP\fB);\fP
+.sp
+\fBint set_form_term(FORM *\fP\fIform\fP\fB, Form_Hook \fP\fIfunc\fP\fB);\fP
.br
-Form_Hook field_term(const FORM *form);
-.br
-int set_form_init(FORM *form, Form_Hook func);
-.br
-Form_Hook form_init(const FORM *form);
-.br
-int set_form_term(FORM *form, Form_Hook func);
-.br
-Form_Hook form_term(const FORM *form);
+\fBForm_Hook form_term(const FORM *\fP\fIform\fP\fB);\fP
.br
.SH DESCRIPTION
These functions make it possible to set hook functions to be called at various
points in the automatic processing of input event codes by \fBform_driver\fR.
.PP
The function \fBset_field_init\fR sets a hook to be called at form-post time
and each time the selected field changes (after the change).
\fBfield_init\fR
returns the current field init hook, if any (\fBNULL\fR if there is no such
hook).
.PP
The function \fBset_field_term\fR sets a hook to be called at form-unpost time
and each time the selected field changes (before the change).
\fBfield_term\fR
returns the current field term hook, if any (\fBNULL\fR if there is no such
hook).
.PP
The function \fBset_form_init\fR sets a hook to be called at form-post time and
just after a page change once it is posted.
\fBform_init\fR returns the
current form init hook, if any (\fBNULL\fR if there is no such hook).
.PP
The function \fBset_form_term\fR sets a hook to be called at form-unpost time
and just before a page change once it is posted.
\fBform_init\fR
returns the current form term hook, if any (\fBNULL\fR if there is no such
hook).
.SH RETURN VALUE
Routines that return pointers return \fBNULL\fR on error.
Other routines
return one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.SH SEE ALSO
\fBcurses\fR(3X), \fBform\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_new.3x b/contrib/ncurses/man/form_new.3x
index 25513bd6eb4c..47398174fad8 100644
--- a/contrib/ncurses/man/form_new.3x
+++ b/contrib/ncurses/man/form_new.3x
@@ -1,86 +1,86 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_new.3x,v 1.12 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_new.3x,v 1.15 2020/10/24 09:02:26 tom Exp $
.TH form_new 3X ""
.SH NAME
\fBnew_form\fR,
\fBfree_form\fP \- create and destroy forms
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBFORM *new_form(FIELD **\fP\fIfields\fP\fB);\fP
.br
-FORM *new_form(FIELD **fields);
-.br
-int free_form(FORM *form);
+\fBint free_form(FORM *\fP\fIform\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBnew_form\fR creates a new form connected to a specified field
pointer array (which must be \fBNULL\fR-terminated).
.PP
The function \fBfree_form\fR disconnects \fIform\fR from its field array
and frees the storage allocated for the form.
.SH RETURN VALUE
The function \fBnew_form\fR returns \fBNULL\fR on error.
-It sets errno according to the function's success:
+It sets \fBerrno\fP according to the function's success:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_CONNECTED
The field is already connected to a form.
.TP 5
.B E_SYSTEM_ERROR
System error occurred, e.g., malloc failure.
.PP
The function \fBfree_form\fR returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_POSTED
The form has already been posted.
.SH SEE ALSO
\fBcurses\fR(3X), \fBform\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_new_page.3x b/contrib/ncurses/man/form_new_page.3x
index 68dce029c23f..478688faffbe 100644
--- a/contrib/ncurses/man/form_new_page.3x
+++ b/contrib/ncurses/man/form_new_page.3x
@@ -1,75 +1,75 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_new_page.3x,v 1.15 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_new_page.3x,v 1.17 2020/10/18 00:04:36 tom Exp $
.TH form_new_page 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.SH NAME
\fBset_new_page\fR,
\fBnew_page\fR \- form pagination functions
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBint set_new_page(FIELD *\fP\fIfield\fP\fB, bool \fP\fInew_page_flag\fP\fB);\fP
.br
-int set_new_page(FIELD *field, bool new_page_flag);
-.br
-bool new_page(const FIELD *field);
+\fBbool new_page(const FIELD *\fP\fIfield\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_new_page\fR sets or resets a flag marking the given field
as the beginning of a new page on its form.
.PP
The function \fBnew_page\fR is a predicate which tests if a given field marks
a page beginning on its form.
.SH RETURN VALUE
The function \fBnew_page\fR returns \fBTRUE\fR or \fBFALSE\fR.
.PP
The function \fBset_new_page\fR returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_CONNECTED
The given field is already connected to a form.
.SH SEE ALSO
\fBcurses\fR(3X) and related pages whose names begin \*(``form_\*('' for detailed
descriptions of the entry points.
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_opts.3x b/contrib/ncurses/man/form_opts.3x
index 18474fa02f46..db6c491eed73 100644
--- a/contrib/ncurses/man/form_opts.3x
+++ b/contrib/ncurses/man/form_opts.3x
@@ -1,89 +1,89 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_opts.3x,v 1.15 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_opts.3x,v 1.17 2020/10/18 00:03:49 tom Exp $
.TH form_opts 3X ""
.SH NAME
\fBset_form_opts\fP,
\fBform_opts_on\fP,
\fBform_opts_off\fP,
\fBform_opts\fR \- set and get form options
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBint set_form_opts(FORM *\fP\fIform\fP\fB, Field_Options \fP\fIopts\fP\fB);\fP
.br
-int set_form_opts(FORM *form, Field_Options opts);
+\fBField_Options form_opts(const FORM *\fP\fIform\fP\fB);\fP
+.sp
+\fBint form_opts_on(FORM *\fP\fIform\fP\fB, Field_Options \fP\fIopts\fP\fB);\fP
.br
-int form_opts_on(FORM *form, Field_Options opts);
-.br
-int form_opts_off(FORM *form, Field_Options opts);
-.br
-Field_Options form_opts(const FORM *form);
+\fBint form_opts_off(FORM *\fP\fIform\fP\fB, Field_Options \fP\fIopts\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_form_opts\fR sets all the given form's option bits (form
option bits may be logically-OR'ed together).
.PP
The function \fBform_opts_on\fR turns on the given option bits, and leaves
others alone.
.PP
The function \fBform_opts_off\fR turns off the given option bits, and leaves
others alone.
.PP
The function \fBform_opts\fR returns the form's current option bits.
.PP
The following options are defined (all are on by default):
.TP 5
O_NL_OVERLOAD
Overload the \fBREQ_NEW_LINE\fR forms driver request so that calling it at the
end of a field goes to the next field.
.TP 5
O_BS_OVERLOAD
Overload the \fBREQ_DEL_PREV\fR forms driver request so that calling it at the
beginning of a field goes to the previous field.
.SH RETURN VALUE
Except for \fBform_opts\fR, each routine returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.SH SEE ALSO
\fBcurses\fR(3X), \fBform\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_page.3x b/contrib/ncurses/man/form_page.3x
index 4b0e8191da61..da1c7254b646 100644
--- a/contrib/ncurses/man/form_page.3x
+++ b/contrib/ncurses/man/form_page.3x
@@ -1,101 +1,101 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2016 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_page.3x,v 1.17 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_page.3x,v 1.19 2020/10/18 00:02:44 tom Exp $
.TH form_page 3X ""
.SH NAME
\fBform_page\fR \- set and get form page number
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBint set_current_field(FORM *\fP\fIform\fP\fB, FIELD *\fP\fIfield\fP\fB);\fP
.br
-int set_current_field(FORM *form, FIELD *field);
+\fBFIELD *current_field(const FORM *\fP\fIform\fP\fB);\fP
+.sp
+\fBint unfocus_current_field(FORM *\fP\fIform\fP\fB);\fP
+.sp
+\fBint set_form_page(FORM *\fP\fIform\fP\fB, int \fP\fIn\fP\fB);\fP
.br
-FIELD *current_field(const FORM *);
-.br
-int unfocus_current_field(FORM *form);
-.br
-int set_form_page(FORM *form, int n);
-.br
-int form_page(const FORM *form);
-.br
-int field_index(const FIELD *field);
+\fBint form_page(const FORM *\fP\fIform\fP\fB);\fP
+.sp
+\fBint field_index(const FIELD *\fP\fIfield\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_current_field\fR sets the current field of the given
form; \fBcurrent_field\fR returns the current field of the given form.
.PP
The function \fBunfocus_current_field\fR removes the focus from the current
field of the form.
In such state, inquiries via \fBcurrent_field\fR shall return a NULL pointer.
.PP
The function \fBset_form_page\fR sets the form's page number (goes to page
\fIn\fR of the form).
.PP
The function \fBform_page\fR returns the form's current page number.
.PP
The function \fBfield_index\fR returns the index of the field in the
field array of the form it is connected to.
It returns \fBERR\fR if
the argument is the null pointer or the field is not connected.
.SH RETURN VALUE
Except for \fBform_page\fR, each routine returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_BAD_STATE
Routine was called from an initialization or termination function.
.TP 5
.B E_INVALID_FIELD
Contents of a field are not valid.
.TP 5
.B E_REQUEST_DENIED
The form driver could not process the request.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.
.SH SEE ALSO
\fBcurses\fR(3X), \fBform\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.PP
The \fBunfocus_current_field\fP function is an ncurses extension.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_post.3x b/contrib/ncurses/man/form_post.3x
index 5aa08c71138a..c0e5baa5af28 100644
--- a/contrib/ncurses/man/form_post.3x
+++ b/contrib/ncurses/man/form_post.3x
@@ -1,89 +1,89 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_post.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_post.3x,v 1.16 2020/10/18 00:01:05 tom Exp $
.TH form_post 3X ""
.SH NAME
\fBpost_form\fR,
\fBunpost_form\fR \- write or erase forms from associated subwindows
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBint post_form(FORM *\fP\fIform\fP\fB);\fP
.br
-int post_form(FORM *form);
-.br
-int unpost_form(FORM *form);
+\fBint unpost_form(FORM *\fP\fIform\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBpost_form\fR displays a form to its associated subwindow.
To trigger physical display of the subwindow,
use \fBrefresh\fR(3X) or some equivalent
\fBcurses\fR routine (the implicit \fBdoupdate\fR triggered by an \fBcurses\fR
input request will do).
.PP
The function \fBunpost_form\fR erases form from its associated subwindow.
.SH RETURN VALUE
These routines return one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_BAD_STATE
Routine was called from an initialization or termination function.
.TP 5
.B E_NOT_POSTED
The form has not been posted.
.TP 5
.B E_NOT_CONNECTED
No items are connected to the form.
.TP 5
.B E_NO_ROOM
Form is too large for its window.
.TP 5
.B E_POSTED
The form has already been posted.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.
.SH SEE ALSO
\fBcurses\fR(3X), \fBform\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_requestname.3x b/contrib/ncurses/man/form_requestname.3x
index a816370a3f96..11e5c0fb54f1 100644
--- a/contrib/ncurses/man/form_requestname.3x
+++ b/contrib/ncurses/man/form_requestname.3x
@@ -1,69 +1,70 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_requestname.3x,v 1.12 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_requestname.3x,v 1.16 2020/12/12 16:37:14 tom Exp $
.TH form_requestname 3X ""
.SH NAME
\fBform_request_by_name\fP,
\fBform_request_name\fR \- handle printable form request names
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBconst char *form_request_name(int \fP\fIrequest\fP\fB);\fP
.br
-const char *form_request_name(int request);
-.br
-int form_request_by_name(const char *name);
+\fBint form_request_by_name(const char *\fP\fIname\fP\fB);\fP
.br
.SH DESCRIPTION
+.SS form_request_name
The function \fBform_request_name\fR returns the printable name of a form
request code.
-.br
+.SS form_request_name_by_name
The function \fBform_request_by_name\fR searches in the name-table for a request
with the given name and returns its request code.
Otherwise E_NO_MATCH is returned.
.SH RETURN VALUE
-\fBform_request_name\fR returns \fBNULL\fR on error and sets errno
+\fBform_request_name\fR returns \fBNULL\fR on error and sets \fBerrno\fP
to \fBE_BAD_ARGUMENT\fR.
-.br
+.PP
\fBform_request_by_name\fR returns \fBE_NO_MATCH\fR on error.
-It does not set errno.
+It does not set \fBerrno\fP.
.SH SEE ALSO
\fBcurses\fR(3X), \fBform\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines are specific to ncurses.
They were not supported on
Version 7, BSD or System V implementations.
It is recommended that
any code depending on them be conditioned using NCURSES_VERSION.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_userptr.3x b/contrib/ncurses/man/form_userptr.3x
index 4af4e18fd4d0..5651a95f57e1 100644
--- a/contrib/ncurses/man/form_userptr.3x
+++ b/contrib/ncurses/man/form_userptr.3x
@@ -1,66 +1,66 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_userptr.3x,v 1.16 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_userptr.3x,v 1.19 2020/10/24 09:00:52 tom Exp $
.TH form_userptr 3X ""
.SH NAME
\fBset_form_userptr\fP,
\fBform_userptr\fR \- associate application data with a form item
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBint set_form_userptr(FORM *\fP\fIform\fP\fB, void *\fP\fIuserptr\fP\fB);\fP
.br
-int set_form_userptr(FORM *form, void *userptr);
-.br
-void* form_userptr(const FORM *form);
+\fBvoid* form_userptr(const FORM *\fP\fIform\fP\fB);\fP
.br
.SH DESCRIPTION
Every form and every form item has a field that can be used to hold
application-specific data (that is, the form-driver code leaves it alone).
These functions get and set the form user pointer field.
.SH RETURN VALUE
The function \fBform_userptr\fR returns a pointer (which may be \fBNULL\fR).
-It does not set errno.
+It does not set \fBerrno\fP.
.PP
The function \fBset_form_userptr\fR returns \fBE_OK\fP (success).
.SH SEE ALSO
\fBcurses\fR(3X), \fBform\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.PP
The user pointer is a void pointer.
We chose not to leave it as a char pointer for SVr4 compatibility.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/form_variables.3x b/contrib/ncurses/man/form_variables.3x
index 5b4387ee900d..0419cb745c93 100644
--- a/contrib/ncurses/man/form_variables.3x
+++ b/contrib/ncurses/man/form_variables.3x
@@ -1,80 +1,81 @@
.\"***************************************************************************
.\" Copyright 2020 Thomas E. Dickey *
.\" Copyright 2010-2013,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_variables.3x,v 1.6 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_variables.3x,v 1.7 2020/12/12 14:45:16 tom Exp $
.TH form_variables 3X ""
.na
.hy 0
.SH NAME
\fBTYPE_ALNUM\fR,
\fBTYPE_ALPHA\fR,
\fBTYPE_ENUM\fR,
\fBTYPE_INTEGER\fR,
\fBTYPE_IPV4\fR,
\fBTYPE_NUMERIC\fR,
\fBTYPE_REGEXP\fR
\- form system global variables
.ad
.hy
.SH SYNOPSIS
.nf
\fB#include <form.h>\fR
.PP
\fBFIELDTYPE * TYPE_ALNUM;\fR
\fBFIELDTYPE * TYPE_ALPHA;\fR
\fBFIELDTYPE * TYPE_ENUM;\fR
\fBFIELDTYPE * TYPE_INTEGER;\fR
\fBFIELDTYPE * TYPE_IPV4;\fR
\fBFIELDTYPE * TYPE_NUMERIC;\fR
\fBFIELDTYPE * TYPE_REGEXP;\fR
.fi
.SH DESCRIPTION
These are building blocks for the form library,
-defining fields that can be created using \fBset_fieldtype\fP(3X).
+defining fields that can be created using
+the \fBform_fieldtype\fP(3X) functions.
Each provides functions for field- and character-validation,
according to the given datatype.
.SS TYPE_ALNUM
This holds alphanumeric data.
.SS TYPE_ALPHA
This holds alphabetic data.
.SS TYPE_ENUM
This holds an enumerated type.
.SS TYPE_INTEGER
This holds a decimal integer.
.SS TYPE_IPV4
This holds an IPv4 internet address, e.g., "127.0.0.1".
.SS TYPE_NUMERIC
This holds a decimal number, with optional sign and decimal point.
.SS TYPE_REGEXP
This holds a regular expression.
.SH PORTABILITY
The \fBTYPE_IPV4\fP variable is an extension not provided by older
implementations of the form library.
.SH SEE ALSO
\fBform\fR(3X).
diff --git a/contrib/ncurses/man/form_win.3x b/contrib/ncurses/man/form_win.3x
index b1dc9dff308c..8d4a46da3559 100644
--- a/contrib/ncurses/man/form_win.3x
+++ b/contrib/ncurses/man/form_win.3x
@@ -1,96 +1,96 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2006,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: form_win.3x,v 1.16 2020/02/02 23:34:34 tom Exp $
+.\" $Id: form_win.3x,v 1.18 2020/10/18 00:00:32 tom Exp $
.TH form_win 3X ""
.SH NAME
\fBform_win\fR \- make and break form window and subwindow associations
.SH SYNOPSIS
\fB#include <form.h>\fR
+.sp
+\fBint set_form_win(FORM *\fP\fIform\fP\fB, WINDOW *\fP\fIwin\fP\fB);\fP
.br
-int set_form_win(FORM *form, WINDOW *win);
+\fBWINDOW *form_win(const FORM *\fP\fIform\fP\fB);\fP
+.sp
+\fBint set_form_sub(FORM *\fP\fIform\fP\fB, WINDOW *\fP\fIsub\fP\fB);\fP
.br
-WINDOW *form_win(const FORM *form);
-.br
-int set_form_sub(FORM *form, WINDOW *sub);
-.br
-WINDOW *form_sub(const FORM *form);
-.br
-int scale_form(const FORM *form, int *rows, int *columns);
+\fBWINDOW *form_sub(const FORM *\fP\fIform\fP\fB);\fP
+.sp
+\fBint scale_form(const FORM *\fP\fIform\fP\fB, int *\fP\fIrows\fP\fB, int *\fP\fIcolumns\fP\fB);\fP
.br
.SH DESCRIPTION
Every form has an associated pair of \fBcurses\fR windows.
The form window
displays any title and border associated with the window; the form subwindow
displays the items of the form that are currently available for selection.
.PP
The first four functions get and set those windows.
It is not necessary to set
either window; by default, the driver code uses \fBstdscr\fR for both.
.PP
In the \fBset_\fR functions, window argument of \fBNULL\fR is treated as though
it were \fBstsdcr\fR. A form argument of \fBNULL\fR is treated as a request
to change the system default form window or subwindow.
.PP
The function \fBscale_form\fR returns the minimum size required for the
subwindow of \fIform\fR.
.SH RETURN VALUE
Routines that return pointers return \fBNULL\fR on error.
Routines that return
an integer return one of the following error codes:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_POSTED
The form has already been posted.
.TP 5
.B E_NOT_CONNECTED
No items are connected to the form.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_variables\fR(3X),
\fBform\fR(3X).
.SH NOTES
The header file \fB<form.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V forms library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/infocmp.1m b/contrib/ncurses/man/infocmp.1m
index 8793ed92691b..41a50a0c33fc 100644
--- a/contrib/ncurses/man/infocmp.1m
+++ b/contrib/ncurses/man/infocmp.1m
@@ -1,644 +1,644 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2017,2018 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: infocmp.1m,v 1.76 2020/02/02 23:34:34 tom Exp $
+.\" $Id: infocmp.1m,v 1.77 2020/07/25 20:37:39 tom Exp $
.TH @INFOCMP@ 1M ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.ds n 5
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.de NS
.ie n .sp
.el .sp .5
.ie n .in +4
.el .in +2
.nf
.ft C \" Courier
..
.de NE
.fi
.ft R
.ie n .in -4
.el .in -2
..
.ds d @TERMINFO@
.SH NAME
\fB@INFOCMP@\fR \- compare or print out \fIterminfo\fR descriptions
.SH SYNOPSIS
\fB@INFOCMP@\fR [\fB\-\
1\
C\
D\
E\
F\
G\
I\
K\
L\
T\
U\
V\
W\
c\
d\
e\
g\
i\
l\
n\
p\
q\
r\
t\
u\
x\
\fR]
.br
[\fB\-v\fR \fIn\fR] [\fB\-s d\fR| \fBi\fR| \fBl\fR| \fBc\fR] [\fB\-Q\fR \fIn\fR] [\fB\-R \fR\fBsubset\fR]
.br
[\fB\-w\fR\ \fIwidth\fR] [\fB\-A\fR\ \fIdirectory\fR] [\fB\-B\fR\ \fIdirectory\fR]
.br
[\fItermname\fR...]
.SH DESCRIPTION
\fB@INFOCMP@\fR can be used to compare a binary \fBterminfo\fR entry with other
terminfo entries, rewrite a \fBterminfo\fR description to take advantage of the
\fBuse=\fR terminfo field, or print out a \fBterminfo\fR description from the
binary file (\fBterm\fR) in a variety of formats.
In all cases, the boolean
fields will be printed first, followed by the numeric fields, followed by the
string fields.
.SS Default Options
If no options are specified and zero or one \fItermnames\fR are specified, the
\fB\-I\fR option will be assumed.
If more than one \fItermname\fR is specified,
the \fB\-d\fR option will be assumed.
.SS Comparison Options [\-d] [\-c] [\-n]
\fB@INFOCMP@\fR compares the \fBterminfo\fR description of the first terminal
\fItermname\fR with each of the descriptions given by the entries for the other
terminal's \fItermnames\fR.
If a capability is defined for only one of the
terminals, the value returned depends on the type of the capability:
.bP
\fBF\fR for missing boolean variables
.bP
\fBNULL\fR for missing integer or string variables
.PP
Use the \fB\-q\fP option to show the distinction between
\fIabsent\fP and \fIcancelled\fP capabilities.
.PP
These options produce a list which you can use to compare two
or more terminal descriptions:
.TP 5
\fB\-d\fR
produces a list of each capability that is \fIdifferent\fP
between two entries.
Each item in the list shows \*(``:\*('' after the capability name,
followed by the capability values, separated by a comma.
.TP
\fB\-c\fR
produces a list of each capability that is \fIcommon\fP between
two or more entries.
Missing capabilities are ignored.
Each item in the list shows \*(``=\*('' after the capability name,
followed by the capability value.
.IP
The \fB\-u\fR option provides a related output,
showing the first terminal description rewritten to use the second
as a building block via the \*(``use=\*('' clause.
.TP
\fB\-n\fR
produces a list of each capability that is in \fInone\fP of the given entries.
Each item in the list shows \*(``!\*('' before the capability name.
.IP
Normally only the conventional capabilities are shown.
Use the \fB\-x\fP option to add the BSD-compatibility
capabilities (names prefixed with \*(``OT\*('').
.IP
If no \fItermnames\fR are given,
\fB@INFOCMP@\fR uses the environment variable \fBTERM\fR
for each of the \fItermnames\fR.
.SS Source Listing Options [\-I] [\-L] [\-C] [\-r]
The \fB\-I\fR, \fB\-L\fR, and \fB\-C\fR options will produce
a source listing for each terminal named.
.
.TS
center tab(/) ;
l l .
\fB\-I\fR/use the \fBterminfo\fR names
\fB\-L\fR/use the long C variable name listed in <\fBterm.h\fR>
\fB\-C\fR/use the \fBtermcap\fR names
\fB\-r\fR/when using \fB\-C\fR, put out all capabilities in \fBtermcap\fR form
\fB\-K\fR/modifies the \fB\-C\fP option, improving BSD-compatibility.
.TE
.PP
If no \fItermnames\fR are given, the environment variable \fBTERM\fR will be
used for the terminal name.
.PP
The source produced by the \fB\-C\fR option may be used directly as a
\fBtermcap\fR entry, but not all parameterized strings can be changed to
the \fBtermcap\fR format.
\fB@INFOCMP@\fR will attempt to convert most of the
parameterized information, and anything not converted will be plainly marked in
the output and commented out.
These should be edited by hand.
.PP
For best results when converting to \fBtermcap\fP format,
you should use both \fB\-C\fP and \fB\-r\fP.
Normally a termcap description is limited to 1023 bytes.
\fB@INFOCMP@\fP trims away less essential parts to make it fit.
If you are converting to one of the (rare) termcap implementations
which accept an unlimited size of termcap,
you may want to add the \fB\-T\fP option.
More often however, you must help the termcap implementation,
and trim excess whitespace (use the \fB\-0\fP option for that).
.PP
All padding information for strings will be collected together and placed
at the beginning of the string where \fBtermcap\fR expects it.
Mandatory
padding (padding information with a trailing \*(``/\*('') will become optional.
.PP
All \fBtermcap\fR variables no longer supported by \fBterminfo\fR, but which
are derivable from other \fBterminfo\fR variables, will be output.
Not all
\fBterminfo\fR capabilities will be translated; only those variables which were
part of \fBtermcap\fR will normally be output.
Specifying the \fB\-r\fR option
will take off this restriction, allowing all capabilities to be output in
\fItermcap\fR form.
Normally you would use both the \fB\-C\fP and \fB\-r\fP options.
The actual format used incorporates some improvements for escaped characters
from terminfo format.
For a stricter BSD-compatible translation, use the \fB\-K\fR option
rather than \fB\-C\fP.
.PP
Note that because padding is collected to the beginning of the capability, not
all capabilities are output.
Mandatory padding is not supported.
Because
\fBtermcap\fR strings are not as flexible, it is not always possible to convert
a \fBterminfo\fR string capability into an equivalent \fBtermcap\fR format.
A subsequent conversion of the \fBtermcap\fR file
back into \fBterminfo\fR format
will not necessarily reproduce the original \fBterminfo\fR source.
.PP
Some common \fBterminfo\fR parameter sequences, their \fBtermcap\fR
equivalents, and some terminal types which commonly have such sequences, are:
.
.TS
center tab(/) ;
l c l
l l l.
\fBterminfo/termcap\fR/Representative Terminals
=
\fB%p1%c/%.\fR/adm
\fB%p1%d/%d\fR/hp, ANSI standard, vt100
\fB%p1%'x'%+%c/%+x\fR/concept
\fB%i/%i\fRq/ANSI standard, vt100
\fB%p1%?%'x'%>%t%p1%'y'%+%;/%>xy\fR/concept
\fB%p2\fR is printed before \fB%p1/%r\fR/hp
.TE
.SS Use= Option [\-u]
The \fB\-u\fR option produces a \fBterminfo\fR source description of the first
terminal \fItermname\fR which is relative to the sum of the descriptions given
by the entries for the other terminals \fItermnames\fR.
It does this by
analyzing the differences between the first \fItermname\fR and the other
\fItermnames\fR and producing a description with \fBuse=\fR fields for the
other terminals.
In this manner, it is possible to retrofit generic terminfo
entries into a terminal's description.
Or, if two similar terminals exist, but
were coded at different times or by different people so that each description
is a full description, using \fB@INFOCMP@\fR
will show what can be done to change
one description to be relative to the other.
.PP
-A capability will get printed with an at-sign (@) if it no longer exists in the
+A capability will be printed with an at-sign (@) if it no longer exists in the
first \fItermname\fR, but one of the other \fItermname\fR entries contains a
value for it.
-A capability's value gets printed if the value in the first
+A capability's value will be printed if the value in the first
\fItermname\fR is not found in any of the other \fItermname\fR entries, or if
the first of the other \fItermname\fR entries that has this capability gives a
different value for the capability than that in the first \fItermname\fR.
.PP
The order of the other \fItermname\fR entries is significant.
Since the
terminfo compiler \fB@TIC@\fR does a left-to-right scan of the capabilities,
specifying two \fBuse=\fR entries that contain differing entries for the same
capabilities will produce different results depending on the order that the
entries are given in.
\fB@INFOCMP@\fR will flag any such inconsistencies between
the other \fItermname\fR entries as they are found.
.PP
Alternatively, specifying a capability \fIafter\fR a \fBuse=\fR entry that
contains that capability will cause the second specification to be ignored.
Using \fB@INFOCMP@\fR to recreate a description can be a useful check to make
sure that everything was specified correctly in the original source
description.
.PP
Another error that does not cause incorrect compiled files, but will slow down
the compilation time, is specifying extra \fBuse=\fR fields that are
superfluous.
\fB@INFOCMP@\fR will flag any other \fItermname use=\fR fields that
were not needed.
.SS Changing Databases [\-A \fIdirectory\fR] [\-B \fIdirectory\fR]
Like other \fBncurses\fP utilities,
\fB@INFOCMP@\fP looks for the terminal descriptions in several places.
You can use the \fBTERMINFO\fP and \fBTERMINFO_DIRS\fP environment variables
to override the compiled-in default list of places to search
(see \fBcurses\fP(3X) for details).
.PP
You can also use the options \fB\-A\fR
and \fB\-B\fR to override the list of places to search
when comparing terminal descriptions:
.bP
The \fB\-A\fR option sets the location for the first \fItermname\fR
.bP
The \fB\-B\fR option sets the location for the other \fItermnames\fR.
.PP
Using these options, it is possible to
compare descriptions for a terminal with the same name located in two different
databases.
For instance,
you can use this feature for comparing descriptions for the same terminal
created by different people.
.SS Other Options
.TP 5
\fB\-0\fR
causes the fields to be printed on one line, without wrapping.
.TP 5
\fB\-1\fR
causes the fields to be printed out one to a line.
Otherwise,
the fields will be printed several to a line to a maximum width
of 60 characters.
.TP
\fB\-a\fR
tells \fB@INFOCMP@\fP to retain commented-out capabilities
rather than discarding them.
Capabilities are commented by prefixing them with a period.
.TP
\fB\-D\fR
tells \fB@INFOCMP@\fP to print the database locations that it knows about,
and exit.
.TP 5
\fB\-E\fR
Dump the capabilities of the given terminal as tables, needed in
the C initializer for a
TERMTYPE structure (the terminal capability structure in the \fB<term.h>\fR).
This option is useful for preparing versions of the curses library hardwired
for a given terminal type.
The tables are all declared static, and are named according to the type
and the name of the corresponding terminal entry.
.sp
Before ncurses 5.0, the split between the \fB\-e\fP and \fB\-E\fP
options was not needed; but support for extended names required making
the arrays of terminal capabilities separate from the TERMTYPE structure.
.TP 5
\fB\-e\fR
Dump the capabilities of the given terminal as a C initializer for a
TERMTYPE structure (the terminal capability structure in the \fB<term.h>\fR).
This option is useful for preparing versions of the curses library hardwired
for a given terminal type.
.TP 5
\fB\-F\fR
compare terminfo files.
This assumes that two following arguments are filenames.
The files are searched for pairwise matches between
entries, with two entries considered to match if any of their names do.
The report printed to standard output lists entries with no matches in
the other file, and entries with more than one match.
For entries
with exactly one match it includes a difference report.
Normally,
to reduce the volume of the report, use references are
not resolved before looking for differences, but resolution can be forced
by also specifying \fB\-r\fR.
.TP 5
\fB\-f\fR
Display complex terminfo strings which contain if/then/else/endif expressions
indented for readability.
.TP 5
\fB\-G\fR
Display constant literals in decimal form
rather than their character equivalents.
.TP 5
\fB\-g\fR
Display constant character literals in quoted form
rather than their decimal equivalents.
.TP 5
\fB\-i\fR
Analyze the initialization (\fBis1\fR, \fBis2\fR, \fBis3\fR), and reset
(\fBrs1\fR, \fBrs2\fR, \fBrs3\fR), strings in the entry,
as well as those used for starting/stopping cursor-positioning mode
(\fBsmcup\fP, \fBrmcup\fP) as well as starting/stopping keymap mode
(\fBsmkx\fP, \fBrmkx\fP).
.IP
For each string, the
code tries to analyze it into actions in terms of the other capabilities in the
entry, certain X3.64/ISO 6429/ECMA\-48 capabilities, and certain DEC VT-series
private modes (the set of recognized special sequences has been selected for
completeness over the existing terminfo database).
Each report line consists
of the capability name, followed by a colon and space, followed by a printable
expansion of the capability string with sections matching recognized actions
translated into {}-bracketed descriptions.
.IP
Here is a list of the DEC/ANSI
special sequences recognized:
.TS
center tab(/) ;
l l
l l.
Action/Meaning
=
RIS/full reset
SC/save cursor
RC/restore cursor
LL/home-down
RSR/reset scroll region
=
DECSTR/soft reset (VT320)
S7C1T/7-bit controls (VT220)
=
ISO DEC G0/enable DEC graphics for G0
ISO UK G0/enable UK chars for G0
ISO US G0/enable US chars for G0
ISO DEC G1/enable DEC graphics for G1
ISO UK G1/enable UK chars for G1
ISO US G1/enable US chars for G1
=
DECPAM/application keypad mode
DECPNM/normal keypad mode
DECANSI/enter ANSI mode
=
ECMA[+\-]AM/keyboard action mode
ECMA[+\-]IRM/insert replace mode
ECMA[+\-]SRM/send receive mode
ECMA[+\-]LNM/linefeed mode
=
DEC[+\-]CKM/application cursor keys
DEC[+\-]ANM/set VT52 mode
DEC[+\-]COLM/132-column mode
DEC[+\-]SCLM/smooth scroll
DEC[+\-]SCNM/reverse video mode
DEC[+\-]OM/origin mode
DEC[+\-]AWM/wraparound mode
DEC[+\-]ARM/auto-repeat mode
.TE
.sp
It also recognizes a SGR action corresponding to ANSI/ISO 6429/ECMA Set
Graphics Rendition, with the values NORMAL, BOLD, UNDERLINE, BLINK, and
REVERSE.
All but NORMAL may be prefixed with
.RS
.bP
\*(``+\*('' (turn on) or
.bP
\*(``\-\*('' (turn off).
.RE
.IP
An SGR0 designates an empty highlight sequence (equivalent to {SGR:NORMAL}).
.TP 5
\fB\-l\fR
Set output format to terminfo.
.TP 5
\fB\-p\fR
Ignore padding specifications when comparing strings.
.TP 5
\fB\-Q\fR \fIn\fR
Rather than show source in terminfo (text) format,
print the compiled (binary) format in hexadecimal or base64 form,
depending on the option's value:
.RS 8
.TP 3
1
hexadecimal
.TP 3
2
base64
.TP 3
3
hexadecimal and base64
.RE
.IP
For example, this prints the compiled terminfo value as a string
which could be assigned to the \fBTERMINFO\fP environment variable:
.NS
@INFOCMP@ -0 -q -Q2
.NE
.TP 5
\fB\-q\fR
This makes the output a little shorter:
.RS
.bP
Make the comparison listing shorter by omitting subheadings, and using
\*(``\-\*('' for absent capabilities, \*(``@\*(''
for canceled rather than \*(``NULL\*(''.
.bP
However, show differences between absent and cancelled capabilities.
.bP
Omit the \*(``Reconstructed from\*('' comment for source listings.
.RE
.TP 5
\fB\-R\fR\fIsubset\fR
Restrict output to a given subset.
This option is for use with archaic
versions of terminfo like those on SVr1, Ultrix, or HP/UX that do not support
the full set of SVR4/XSI Curses terminfo; and variants such as AIX
that have their own extensions incompatible with SVr4/XSI.
.RS
.bP
Available terminfo
subsets are \*(``SVr1\*('', \*(``Ultrix\*('', \*(``HP\*('', and \*(``AIX\*('';
see \fBterminfo\fR(\*n) for details.
.bP
You can also choose the subset \*(``BSD\*('' which selects only capabilities
with termcap equivalents recognized by 4.4BSD.
The \fB\-C\fP option sets the \*(``BSD\*('' subset as a side-effect.
.bP
If you select any other value for \fB\-R\fP,
it is the same as no subset, i.e., all capabilities are used.
The \fB\-I\fP option likewise selects no subset as a side-effect.
.RE
.TP
\fB\-s \fR\fI[d|i|l|c]\fR
The \fB\-s\fR option sorts the fields within each type according to the argument
below:
.br
.RS 5
.TP 5
\fBd\fR
leave fields in the order that they are stored in the \fIterminfo\fR database.
.TP 5
\fBi\fR
sort by \fIterminfo\fR name.
.TP 5
\fBl\fR
sort by the long C variable name.
.TP 5
\fBc\fR
sort by the \fItermcap\fR name.
.RE
.IP
If the \fB\-s\fR option is not given, the fields printed out will be
sorted alphabetically by the \fBterminfo\fR name within each type,
except in the case of the \fB\-C\fR or the \fB\-L\fR options, which cause the
sorting to be done by the \fBtermcap\fR name or the long C variable
name, respectively.
.TP 5
\fB\-T\fR
eliminates size-restrictions on the generated text.
This is mainly useful for testing and analysis, since the compiled
descriptions are limited (e.g., 1023 for termcap, 4096 for terminfo).
.TP
\fB\-t\fR
tells \fB@TIC@\fP to discard commented-out capabilities.
Normally when translating from terminfo to termcap,
untranslatable capabilities are commented-out.
.TP 5
\fB\-U\fR
tells \fB@INFOCMP@\fP to not post-process the data
after parsing the source file.
This feature helps when comparing the actual contents of two source files,
since it excludes the inferences that \fB@INFOCMP@\fP makes to fill in missing
data.
.TP 5
\fB\-V\fR
reports the version of ncurses which was used in this program, and exits.
.TP 5
\fB\-v\fR \fIn\fR
prints out tracing information on standard error as the program runs.
.IP
The optional parameter \fIn\fR is a number from 1 to 10, inclusive,
indicating the desired level of detail of information.
If ncurses is built without tracing support, the optional parameter is ignored.
.TP
\fB\-W\fR
By itself, the \fB\-w\fP option will not force long strings to be wrapped.
Use the \fB\-W\fP option to do this.
.TP 5
\fB\-w\fR \fIwidth\fR
changes the output to \fIwidth\fR characters.
.TP
\fB\-x\fR
print information for user-defined capabilities (see \fBuser_caps(\*n)\fP.
These are extensions to the terminfo repertoire which can be loaded
using the \fB\-x\fR option of \fB@TIC@\fP.
.SH FILES
.TP 20
\*d
Compiled terminal description database.
.SH HISTORY
Although System V Release 2 provided a terminfo library,
it had no documented tool for decompiling the terminal descriptions.
Tony Hansen (AT&T) wrote the first \fBinfocmp\fP in early 1984,
for System V Release 3.
.PP
Eric Raymond used the AT&T documentation in 1995 to provide an equivalent
\fB@INFOCMP@\fP for ncurses.
In addition, he added a few new features such as:
.bP
the \fB\-e\fP option, to support \fIfallback\fP
(compiled-in) terminal descriptions
.bP
the \fB\-i\fP option, to help with analysis
.PP
Later, Thomas Dickey added the \fB\-x\fP (user-defined capabilities)
option, and the \fB\-E\fP option to support fallback entries with
user-defined capabilities.
.PP
For a complete list, see the \fIEXTENSIONS\fP section.
.PP
In 2010, Roy Marples provided an \fBinfocmp\fP program for NetBSD.
It is less capable than the SVr4 or ncurses versions
(e.g., it lacks the sorting options documented in X/Open),
but does include the \fB\-x\fP option adapted from ncurses.
.SH PORTABILITY
X/Open Curses, Issue 7 (2009) provides a description of \fBinfocmp\fP.
It does not mention the options used for converting to termcap format.
.SH EXTENSIONS
The
\fB\-0\fR,
\fB\-1\fR,
\fB\-E\fR,
\fB\-F\fR,
\fB\-G\fR,
\fB\-Q\fR,
\fB\-R\fR,
\fB\-T\fR,
\fB\-V\fR,
\fB\-a\fR,
\fB\-e\fR,
\fB\-f\fR,
\fB\-g\fR,
\fB\-i\fR,
\fB\-l\fR,
\fB\-p\fR,
\fB\-q\fR and
\fB\-t\fR
options are not supported in SVr4 curses.
.PP
SVr4 infocmp does not distinguish between absent and cancelled capabilities.
Also, it shows missing integer capabilities as \fB\-1\fP
(the internal value used to represent missing integers).
This implementation shows those as \*(``NULL\*('',
for consistency with missing strings.
.PP
The \fB\-r\fR option's notion of \*(``termcap\*('' capabilities
is System V Release 4's.
Actual BSD curses versions will have a more restricted set.
To see only the
4.4BSD set, use \fB\-r\fR \fB\-RBSD\fR.
.SH BUGS
The \fB\-F\fR option of \fB@INFOCMP@\fR(1M) should be a \fB@TOE@\fR(1M) mode.
.SH SEE ALSO
\fB@CAPTOINFO@\fR(1M),
\fB@INFOTOCAP@\fR(1M),
\fB@TIC@\fR(1M),
\fB@TOE@\fR(1M),
\fBcurses\fR(3X),
\fBterminfo\fR(\*n).
\fBuser_caps\fR(\*n).
.sp
https://invisible-island.net/ncurses/tctest.html
.PP
This describes \fBncurses\fR
version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@).
.SH AUTHOR
Eric S. Raymond <esr@snark.thyrsus.com>
and
.br
Thomas E. Dickey <dickey@invisible-island.net>
diff --git a/contrib/ncurses/man/infotocap.1m b/contrib/ncurses/man/infotocap.1m
index 10c95ea9667d..2740b5598d18 100644
--- a/contrib/ncurses/man/infotocap.1m
+++ b/contrib/ncurses/man/infotocap.1m
@@ -1,81 +1,81 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1999-2010,2016 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: infotocap.1m,v 1.16 2020/02/02 23:34:34 tom Exp $
+.\" $Id: infotocap.1m,v 1.17 2020/12/19 21:49:52 tom Exp $
.TH @INFOTOCAP@ 1M ""
.ds n 5
.ds d @TERMINFO@
.SH NAME
\fB@INFOTOCAP@\fR \- convert a \fIterminfo\fR description into a \fItermcap\fR description
.SH SYNOPSIS
\fB@INFOTOCAP@\fR [\fB\-v\fR\fIn\fR \fIwidth\fR] [\fB\-V\fR] [\fB\-1\fR] [\fB\-w\fR \fIwidth\fR] \fIfile\fR ...
.SH DESCRIPTION
\fB@INFOTOCAP@\fR looks in each given text
\fIfile\fR for \fBterminfo\fR descriptions.
For each terminfo description found,
an equivalent \fBtermcap\fR description is written to standard output.
Terminfo \fBuse\fR capabilities are translated directly to termcap
\fBtc\fR capabilities.
.TP 5
\fB\-v\fR
print out tracing information on standard error as the program runs.
.TP 5
\fB\-V\fR
print out the version of the program in use on standard error and exit.
.TP 5
\fB\-1\fR
cause the fields to print out one to a line.
Otherwise, the fields
will be printed several to a line to a maximum width of 60 characters.
.TP 5
\fB\-w\fR
change the output to \fIwidth\fR characters.
.SH FILES
.TP 20
\*d
Compiled terminal description database.
.SH NOTES
This utility is actually a link to \fB@TIC@\fR, running in \fI\-C\fR mode.
You can use other \fB@TIC@\fR options such as \fB\-f\fR and \fB\-x\fR.
.SH PORTABILITY
None of X/Open Curses, Issue 7 (2009), SVr4 or NetBSD document this application.
.SH SEE ALSO
-\fBcurses\fR(3X),
-\fB@TIC@\fR(1M),
\fB@INFOCMP@\fR(1M),
+\fB@TIC@\fR(1M),
+\fBcurses\fR(3X),
\fBterminfo\fR(\*n)
.PP
This describes \fBncurses\fR
version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@).
.SH AUTHOR
Eric S. Raymond <esr@snark.thyrsus.com>
and
.br
Thomas E. Dickey <dickey@invisible-island.net>
diff --git a/contrib/ncurses/man/key_defined.3x b/contrib/ncurses/man/key_defined.3x
index 9ff86a7fea7e..c66c54c22464 100644
--- a/contrib/ncurses/man/key_defined.3x
+++ b/contrib/ncurses/man/key_defined.3x
@@ -1,58 +1,58 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 2003-2006,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
.\" Author: Thomas E. Dickey 2003
.\"
-.\" $Id: key_defined.3x,v 1.9 2020/02/02 23:34:34 tom Exp $
+.\" $Id: key_defined.3x,v 1.10 2020/10/17 23:39:03 tom Exp $
.TH key_defined 3X ""
.SH NAME
\fBkey_defined\fP \- check if a keycode is defined
.SH SYNOPSIS
\fB#include <curses.h>\fP
.sp
-\fBint key_defined(const char *definition);\fP
+\fBint key_defined(const char *\fP\fIdefinition\fP\fB);\fP
.SH DESCRIPTION
This is an extension to the curses library.
It permits an application to determine if a string is currently bound
to any keycode.
.SH RETURN VALUE
If the string is bound to a keycode, its value (greater than zero) is returned.
If no keycode is bound, zero is returned.
If the string conflicts with longer strings
which are bound to keys, \-1 is returned.
.SH PORTABILITY
These routines are specific to ncurses.
They were not supported on
Version 7, BSD or System V implementations.
It is recommended that
any code depending on them be conditioned using NCURSES_VERSION.
.SH SEE ALSO
\fBdefine_key\fR(3X).
.SH AUTHOR
Thomas Dickey.
diff --git a/contrib/ncurses/man/keybound.3x b/contrib/ncurses/man/keybound.3x
index 6a4642b2f5af..d9a069e80df2 100644
--- a/contrib/ncurses/man/keybound.3x
+++ b/contrib/ncurses/man/keybound.3x
@@ -1,61 +1,61 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1999-2008,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
.\" Author: Thomas E. Dickey 1999
.\"
-.\" $Id: keybound.3x,v 1.10 2020/02/02 23:34:34 tom Exp $
+.\" $Id: keybound.3x,v 1.11 2020/10/17 23:39:30 tom Exp $
.TH keybound 3X ""
.SH NAME
\fBkeybound\fP \- return definition of keycode
.SH SYNOPSIS
\fB#include <curses.h>\fP
.sp
-\fBchar * keybound(int keycode, int count);\fP
+\fBchar * keybound(int \fP\fIkeycode\fP\fB, int \fP\fIcount);\fP
.SH DESCRIPTION
This is an extension to the curses library.
It permits an application to determine the string which is defined
in the terminfo for specific keycodes.
.SH RETURN VALUE
The \fIkeycode\fP parameter must be greater than zero, else NULL is returned.
If it does not correspond to a defined key, then NULL is returned.
The \fIcount\fP parameter is used to allow the application to iterate
through multiple definitions, counting from zero.
When successful,
the function returns a string which must be freed by the caller.
.SH PORTABILITY
These routines are specific to ncurses.
They were not supported on
Version 7, BSD or System V implementations.
It is recommended that
any code depending on them be conditioned using NCURSES_VERSION.
.SH SEE ALSO
\fBdefine_key\fR(3X),
\fBkeyok\fR(3X).
.SH AUTHOR
Thomas Dickey.
diff --git a/contrib/ncurses/man/keyok.3x b/contrib/ncurses/man/keyok.3x
index d3c1c847aa8f..937450e57cfb 100644
--- a/contrib/ncurses/man/keyok.3x
+++ b/contrib/ncurses/man/keyok.3x
@@ -1,60 +1,60 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
.\" Author: Thomas E. Dickey 1997
.\"
-.\" $Id: keyok.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: keyok.3x,v 1.15 2020/10/17 23:39:59 tom Exp $
.TH keyok 3X ""
.SH NAME
\fBkeyok\fP \- enable or disable a keycode
.SH SYNOPSIS
\fB#include <curses.h>\fP
.sp
-\fBint keyok(int keycode, bool enable);\fP
+\fBint keyok(int \fP\fIkeycode\fP\fB, bool \fP\fIenable\fP\fB);\fP
.SH DESCRIPTION
This is an extension to the curses library.
It permits an application to disable specific keycodes, rather than
use the \fIkeypad\fP function to disable all keycodes.
Keys that have been disabled can be re-enabled.
.SH RETURN VALUE
The keycode must be greater than zero, else \fBERR\fP is returned.
If it does not correspond to a defined key, then \fBERR\fP is returned.
If the \fIenable\fP parameter is true, then the key must have been disabled,
and vice versa.
Otherwise, the function returns \fBOK\fP.
.SH PORTABILITY
These routines are specific to ncurses.
They were not supported on
Version 7, BSD or System V implementations.
It is recommended that
any code depending on them be conditioned using NCURSES_VERSION.
.SH SEE ALSO
\fBdefine_key\fR(3X).
.SH AUTHOR
Thomas Dickey.
diff --git a/contrib/ncurses/man/legacy_coding.3x b/contrib/ncurses/man/legacy_coding.3x
index ff951d67b6ad..fa3181a88515 100644
--- a/contrib/ncurses/man/legacy_coding.3x
+++ b/contrib/ncurses/man/legacy_coding.3x
@@ -1,75 +1,75 @@
.\"***************************************************************************
.\" Copyright 2020 Thomas E. Dickey *
.\" Copyright 2005-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
.\" Author: Thomas E. Dickey
.\"
-.\" $Id: legacy_coding.3x,v 1.7 2020/02/02 23:34:34 tom Exp $
+.\" $Id: legacy_coding.3x,v 1.8 2020/10/17 23:40:23 tom Exp $
.TH legacy_coding 3X ""
.SH NAME
\fBuse_legacy_coding\fR \- override locale-encoding checks
.SH SYNOPSIS
\fB#include <curses.h>\fP
.sp
-\fBint use_legacy_coding(int level);\fP
+\fBint use_legacy_coding(int \fP\fIlevel\fP\fB);\fP
.SH DESCRIPTION
The \fBuse_legacy_coding\fP function is an extension to the curses library.
It allows the caller to change the result of \fBunctrl\fP,
and suppress related checks within the library that would normally
cause nonprinting characters to be rendered in visible form.
This affects only 8-bit characters.
.PP
The \fIlevel\fP parameter controls the result:
.RS
.TP 5
0
the library functions normally,
rendering nonprinting characters as described in \fBunctrl\fP.
.TP
1
the library ignores \fBisprintf\fP for codes in the range 160-255.
.TP
2
the library ignores \fBisprintf\fP for codes in the range 128-255.
It also modifies the output of \fBunctrl\fP, showing codes in the
range 128-159 as is.
.RE
.SH RETURN VALUE
If the screen has not been initialized,
or the \fIlevel\fP parameter is out of range,
the function returns \fBERR\fP.
Otherwise, it returns the previous level: \fB0\fP, \fB1\fP or \fB2\fP.
.SH PORTABILITY
This routine is specific to ncurses.
It was not supported on Version 7, BSD or System V implementations.
It is recommended that any code depending on ncurses extensions
be conditioned using NCURSES_VERSION.
.SH SEE ALSO
\fBunctrl\fR.
.SH AUTHOR
Thomas Dickey (to support lynx's font-switching feature).
diff --git a/contrib/ncurses/man/manhtml.aliases b/contrib/ncurses/man/manhtml.aliases
index 4fff94b5a40e..a9f18ca70693 100644
--- a/contrib/ncurses/man/manhtml.aliases
+++ b/contrib/ncurses/man/manhtml.aliases
@@ -1,66 +1,69 @@
-# $Id: manhtml.aliases,v 1.16 2020/02/15 21:02:48 tom Exp $
+# $Id: manhtml.aliases,v 1.19 2020/12/12 14:45:55 tom Exp $
#***************************************************************************
# Copyright 2019,2020 Thomas E. Dickey *
# Copyright 2013,2017 Free Software Foundation, Inc. *
# *
# Permission is hereby granted, free of charge, to any person obtaining a *
# copy of this software and associated documentation files (the *
# "Software"), to deal in the Software without restriction, including *
# without limitation the rights to use, copy, modify, merge, publish, *
# distribute, distribute with modifications, sublicense, and/or sell *
# copies of the Software, and to permit persons to whom the Software is *
# furnished to do so, subject to the following conditions: *
# *
# The above copyright notice and this permission notice shall be included *
# in all copies or substantial portions of the Software. *
# *
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
# IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
# THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
# *
# Except as contained in this notice, the name(s) of the above copyright *
# holders shall not be used in advertising or otherwise to promote the *
# sale, use or other dealings in this Software without prior written *
# authorization. *
#***************************************************************************
# Items in this list will be linked to the corresponding manpages by man2html
-assume_default_colors(3X) default_colors(3X)
addch(3X) curs_addch(3X)
+assume_default_colors(3X) default_colors(3X)
curs_set(3X) curs_kernel(3X)
delscreen(3X) curs_initscr(3X)
doupdate(3X) curs_refresh(3X)
endwin(3X) curs_initscr(3X)
filter(3X) curs_util(3X)
get_wch(3X) curs_get_wch(3X)
+getcchar(3X) curs_getcchar(3X)
getch(3X) curs_getch(3X)
inch(3X) curs_inch(3X)
infocmp(1) infocmp(1M)
initscr(3X) curs_initscr(3X)
is_scrollok(3X) curs_opaque(3X)
keypad(3X) curs_inopts(3X)
longname(3X) curs_termattrs(3X)
meta(3X) curs_inopts(3X)
mvcur(3X) curs_terminfo(3X)
mvwin(3X) curs_window(3X)
newterm(3X) curs_initscr(3X)
refresh(3X) curs_refresh(3X)
reset_shell_mode(3X) curs_kernel(3X)
-set_fieldtype(3X) form_fieldtype(3X)
set_term(3X) curs_initscr(3X)
+setcchar(3X) curs_getcchar(3X)
setupterm(3X) curs_terminfo(3X)
slk_init(3X) curs_slk(3X)
+slk_touch(3X) curs_slk(3X)
tic(1) tic(1M)
tigetstr(3X) curs_terminfo(3X)
tparm(3X) curs_terminfo(3X)
tputs(3X) curs_terminfo(3X)
-use_env(3X) curs_util(3X)
use_default_colors(3X) default_colors(3X)
+use_env(3X) curs_util(3X)
use_extended_names(3X) curs_extend(3X)
+use_legacy_coding(3X) legacy_coding(3X)
vidputs(3X) curs_terminfo(3X)
wgetch(3X) curs_getch(3X)
wnoutrefresh(3X) curs_refresh(3X)
wrefresh(3X) curs_refresh(3X)
diff --git a/contrib/ncurses/man/manhtml.externs b/contrib/ncurses/man/manhtml.externs
index c6fcace72351..8787b2ce1778 100644
--- a/contrib/ncurses/man/manhtml.externs
+++ b/contrib/ncurses/man/manhtml.externs
@@ -1,65 +1,67 @@
-# $Id: manhtml.externs,v 1.13 2020/02/02 23:34:34 tom Exp $
+# $Id: manhtml.externs,v 1.14 2020/04/18 09:48:50 tom Exp $
# Items in this list will not be linked by man2html
#***************************************************************************
# Copyright 2019,2020 Thomas E. Dickey *
# Copyright 2013,2017 Free Software Foundation, Inc. *
# *
# Permission is hereby granted, free of charge, to any person obtaining a *
# copy of this software and associated documentation files (the *
# "Software"), to deal in the Software without restriction, including *
# without limitation the rights to use, copy, modify, merge, publish, *
# distribute, distribute with modifications, sublicense, and/or sell *
# copies of the Software, and to permit persons to whom the Software is *
# furnished to do so, subject to the following conditions: *
# *
# The above copyright notice and this permission notice shall be included *
# in all copies or substantial portions of the Software. *
# *
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
# IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
# THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
# *
# Except as contained in this notice, the name(s) of the above copyright *
# holders shall not be used in advertising or otherwise to promote the *
# sale, use or other dealings in this Software without prior written *
# authorization. *
#***************************************************************************
ADACURSES(1)
COLOR_PAIR(1)
COLOR_PAIR(2)
COLOR_PAIR(3)
atoi(3)
conflict(1)
csh(1)
ded(1)
environ(7)
errno(3)
file(1)
getty(1)
lynx(1)
nvi(1)
mutt(1)
od(1)
printf(3)
profile(5)
putc(3)
putchar(3)
putwc(3)
read(2)
scanf(3)
+screen(1)
sh(1)
sscanf(3)
stdio(3)
stty(1)
system(3)
termios(3)
+tmux(1)
tty(4)
ttys(5)
vprintf(3)
vscanf(3)
wcwidth(3)
write(2)
diff --git a/contrib/ncurses/man/manlinks.sed b/contrib/ncurses/man/manlinks.sed
index 9b57bcaafd66..09b055f2fa04 100644
--- a/contrib/ncurses/man/manlinks.sed
+++ b/contrib/ncurses/man/manlinks.sed
@@ -1,103 +1,107 @@
-# $Id: manlinks.sed,v 1.14 2020/02/02 23:34:34 tom Exp $
+# $Id: manlinks.sed,v 1.15 2021/01/05 20:30:00 tom Exp $
##############################################################################
-# Copyright 2020 Thomas E. Dickey #
+# Copyright 2020,2021 Thomas E. Dickey #
# Copyright 2000-2003,2008 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
# Given a manpage (nroff) as input, writes a list of the names that are
# listed in the "NAME" section, i.e., the names that we would like to use
# as aliases for the manpage -T.Dickey
#
# eliminate formatting controls that get in the way
/^'\\"/d
/\.\\"/d
/^\.br/d
/^\.sp/d
/typedef/d
s/^\.IX//
s/\\f.//g
s/[:,]/ /g
#
+# ignore C-style comments
+s%/\*.*\*/%%
+#
# eliminate unnecessary whitespace, convert multiple blanks to single space
s/^[ ][ ]*//
s/[ ][ ]*$//
s/[ ][ ]*/ /g
+/^$/d
#
# convert ".SH" into a more manageable form
s/\.SH[ ][ ]*/.SH_(/
#
# in ".SH NAME"
# change "\-" to "-", eliminate text after "-", and split the remaining lines
# at each space, making a list of names:
/^\.SH_(NAME/,/^\.SH_(SYNOPSIS/{
s/\\-.*/ -/
/ -/{
s/ -.*//
s/ /\
/g
}
/^-/{
d
}
s/ /\
/g
}
#
# in ".SH SYNOPSIS"
# remove any line that does not contain a '(', since we only want functions.
# then strip off return-type of each function.
# finally, remove the parameter list, which begins with a '('.
/^\.SH_(SYNOPSIS/,/^\.SH_(DESCRIPTION/{
/^[^(]*$/d
# reduce
# .B "int add_wch( const cchar_t *\fIwch\fB );"
# to
# add_wch( const cchar_t *\fIwch\fB );"
s/^\([^ (]* [^ (]* [*]*\)//g
s/^\([^ (]* [*]*\)//g
# trim blanks in case we have
# void (*) (FORM *) field_init(const FORM *form);
s/) (/)(/g
# reduce stuff like
# void (*)(FORM *) field_init(const FORM *form);
# to
# field_init(const FORM *form);
s/^\(([^)]*)\)\(([^)]*)\)*[ ]*//g
# rename marker temporarily
s/\.SH_(/.SH_/
# kill lines with ");", and trim off beginning of argument list.
s/[()].*//
# rename marker back
s/\.SH_/.SH_(/
}
#
# delete ".SH DESCRIPTION" and following lines
/^\.SH_(DESCRIPTION/,${
d
}
#
# delete any remaining directives
/^\./d
diff --git a/contrib/ncurses/man/menu_attributes.3x b/contrib/ncurses/man/menu_attributes.3x
index 0dcea245956d..903e303c8dac 100644
--- a/contrib/ncurses/man/menu_attributes.3x
+++ b/contrib/ncurses/man/menu_attributes.3x
@@ -1,113 +1,113 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_attributes.3x,v 1.17 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_attributes.3x,v 1.19 2020/10/17 23:58:58 tom Exp $
.TH menu_attributes 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.SH NAME
\fBmenu_back\fR,
\fBmenu_fore\fR,
\fBmenu_grey\fR,
\fBmenu_pad\fR,
\fBset_menu_back\fR,
\fBset_menu_fore\fR,
\fBset_menu_grey\fR,
\fBset_menu_pad\fR \- color and attribute control for menus
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_menu_fore(MENU *\fP\fImenu\fP\fB, chtype \fP\fIattr\fP\fB);\fP
.br
-int set_menu_fore(MENU *menu, chtype attr);
+\fBchtype menu_fore(const MENU *\fP\fImenu\fP\fB);\fP
+.sp
+\fBint set_menu_back(MENU *\fP\fImenu\fP\fB, chtype \fP\fIattr\fP\fB);\fP
.br
-chtype menu_fore(const MENU *menu);
+\fBchtype menu_back(const MENU *\fP\fImenu\fP\fB);\fP
+.sp
+\fBint set_menu_grey(MENU *\fP\fImenu\fP\fB, chtype \fP\fIattr\fP\fB);\fP
.br
-int set_menu_back(MENU *menu, chtype attr);
+\fBchtype menu_grey(const MENU *\fP\fImenu\fP\fB);\fP
+.sp
+\fBint set_menu_pad(MENU *\fP\fImenu\fP\fB, int \fP\fIpad\fP\fB);\fP
.br
-chtype menu_back(const MENU *menu);
-.br
-int set_menu_grey(MENU *menu, chtype attr);
-.br
-chtype menu_grey(const MENU *menu);
-.br
-int set_menu_pad(MENU *menu, int pad);
-.br
-int menu_pad(const MENU *menu);
+\fBint menu_pad(const MENU *\fP\fImenu\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_menu_fore\fR sets the foreground attribute of
\fImenu\fR. This is the highlight used for selected menu items.
\fBmenu_fore\fR returns the foreground attribute.
The default
is \fBA_REVERSE\fR.
.PP
The function \fBset_menu_back\fR sets the background attribute of
\fImenu\fR. This is the highlight used for selectable (but not currently
selected) menu items.
The function \fBmenu_back\fR returns the background
attribute.
The default is \fBA_NORMAL\fR.
.PP
The function \fBset_menu_grey\fR sets the grey attribute of \fImenu\fR. This is
the highlight used for un-selectable menu items in menus that permit more than
one selection.
The function \fBmenu_grey\fR returns the grey attribute.
The default is \fBA_UNDERLINE\fR.
.PP
The function \fBset_menu_pad\fR sets the character used to fill the space
between the name and description parts of a menu item.
\fBmenu_pad\fR returns
the given menu's pad character.
The default is a blank.
.SH RETURN VALUE
These routines return one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.SH SEE ALSO
\fBcurses\fR(3X) and related pages whose names begin \*(``menu_\*('' for detailed
descriptions of the entry points.
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/menu_cursor.3x b/contrib/ncurses/man/menu_cursor.3x
index 2ea893d56d6e..7a364eb5aba0 100644
--- a/contrib/ncurses/man/menu_cursor.3x
+++ b/contrib/ncurses/man/menu_cursor.3x
@@ -1,70 +1,70 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_cursor.3x,v 1.12 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_cursor.3x,v 1.13 2020/10/17 23:41:31 tom Exp $
.TH menu_cursor 3X ""
.SH NAME
\fBpos_menu_cursor\fR \- position a menu's cursor
.SH SYNOPSIS
\fB#include <menu.h>\fR
-.br
-int pos_menu_cursor(const MENU *menu);
+.sp
+\fBint pos_menu_cursor(const MENU *\fP\fImenu\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBpos_menu_cursor\fR restores the cursor to the current position
associated with the menu's selected item.
This is useful after \fBcurses\fR
routines have been called to do screen-painting in response to a menu select.
.SH RETURN VALUE
This routine returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_NOT_POSTED
The menu has not been posted.
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/menu_driver.3x b/contrib/ncurses/man/menu_driver.3x
index 27dccbb8052a..e395358296c4 100644
--- a/contrib/ncurses/man/menu_driver.3x
+++ b/contrib/ncurses/man/menu_driver.3x
@@ -1,208 +1,208 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_driver.3x,v 1.26 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_driver.3x,v 1.28 2020/12/19 21:33:37 tom Exp $
.TH menu_driver 3X ""
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fBmenu_driver\fR \- command-processing loop of the menu system
.SH SYNOPSIS
\fB#include <menu.h>\fR
-.br
-int menu_driver(MENU *menu, int c);
+.sp
+\fBint menu_driver(MENU *\fP\fImenu\fP\fB, int \fP\fIc\fP\fB);\fP
.br
.SH DESCRIPTION
Once a menu has been posted (displayed), you should funnel input events to it
through \fBmenu_driver\fR. This routine has three major input cases:
.bP
The input is a form navigation request.
Navigation request codes are constants defined in \fB<form.h>\fP,
which are distinct from the key- and character codes
returned by \fBwgetch\fP(3X).
.bP
The input is a printable character.
Printable characters (which must be positive, less than 256) are
checked according to the program's locale settings.
.bP
The input is the KEY_MOUSE special key associated with an mouse event.
.PP
The menu driver requests are as follows:
.TP 5
REQ_LEFT_ITEM
Move left to an item.
.TP 5
REQ_RIGHT_ITEM
Move right to an item.
.TP 5
REQ_UP_ITEM
Move up to an item.
.TP 5
REQ_DOWN_ITEM
Move down to an item.
.TP 5
REQ_SCR_ULINE
Scroll up a line.
.TP 5
REQ_SCR_DLINE
Scroll down a line.
.TP 5
REQ_SCR_DPAGE
Scroll down a page.
.TP 5
REQ_SCR_UPAGE
Scroll up a page.
.TP 5
REQ_FIRST_ITEM
Move to the first item.
.TP 5
REQ_LAST_ITEM
Move to the last item.
.TP 5
REQ_NEXT_ITEM
Move to the next item.
.TP 5
REQ_PREV_ITEM
Move to the previous item.
.TP 5
REQ_TOGGLE_ITEM
Select/deselect an item.
.TP 5
REQ_CLEAR_PATTERN
Clear the menu pattern buffer.
.TP 5
REQ_BACK_PATTERN
Delete the previous character from the pattern buffer.
.TP 5
REQ_NEXT_MATCH
Move to the next item matching the pattern match.
.TP 5
REQ_PREV_MATCH
Move to the previous item matching the pattern match.
.PP
If the second argument is a printable character, the code appends
it to the pattern buffer and attempts to move to the next item matching
the new pattern.
If there is no such match, \fBmenu_driver\fR returns
\fBE_NO_MATCH\fR and deletes the appended character from the buffer.
.PP
If the second argument is one of the above pre-defined requests, the
corresponding action is performed.
.SS MOUSE HANDLING
.PP
If the second argument is the KEY_MOUSE special key, the associated
mouse event is translated into one of the above pre-defined requests.
Currently only clicks in the user window (e.g., inside the menu display
area or the decoration window) are handled.
.PP
If you click above the display region of the menu:
.bP
a REQ_SCR_ULINE is generated for a single click,
.bP
a REQ_SCR_UPAGE is generated for a double-click and
.bP
a REQ_FIRST_ITEM is generated for a triple-click.
.PP
If you click below the display region of the menu:
.bP
a REQ_SCR_DLINE is generated for a single click,
.bP
a REQ_SCR_DPAGE is generated for a double-click and
.bP
a REQ_LAST_ITEM is generated for a triple-click.
.PP
If you click at an item inside the display area of the menu:
.bP
the menu cursor is positioned to that item.
.bP
If you double-click an item a REQ_TOGGLE_ITEM
is generated and \fBE_UNKNOWN_COMMAND\fR is returned.
This return value makes sense,
because a double click usually means that an item-specific action should
be returned.
It is exactly the purpose of this return value to signal that an
application specific command should be executed.
.bP
If a translation
into a request was done, \fBmenu_driver\fR returns the result of this request.
.PP
If you clicked outside the user window
or the mouse event could not be translated
into a menu request an \fBE_REQUEST_DENIED\fR is returned.
.SS APPLICATION-DEFINED COMMANDS
.PP
If the second argument is neither printable nor one of the above
pre-defined menu requests or KEY_MOUSE,
the drive assumes it is an application-specific
command and returns \fBE_UNKNOWN_COMMAND\fR. Application-defined commands
should be defined relative to \fBMAX_COMMAND\fR, the maximum value of these
pre-defined requests.
.SH RETURN VALUE
\fBmenu_driver\fR return one of the following error codes:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_BAD_STATE
Routine was called from an initialization or termination function.
.TP 5
.B E_NOT_POSTED
The menu has not been posted.
.TP 5
.B E_UNKNOWN_COMMAND
The menu driver code saw an unknown request code.
.TP 5
.B E_NO_MATCH
Character failed to match.
.TP 5
.B E_REQUEST_DENIED
The menu driver could not process the request.
.SH SEE ALSO
\fBcurses\fR(3X),
-\fBmenu\fR(3X),
-\fBgetch\fR(3X).
+\fBgetch\fR(3X),
+\fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header files
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
The support for mouse events is ncurses specific.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/menu_format.3x b/contrib/ncurses/man/menu_format.3x
index ca2e8ef5a0ec..d01f27ea26f8 100644
--- a/contrib/ncurses/man/menu_format.3x
+++ b/contrib/ncurses/man/menu_format.3x
@@ -1,88 +1,88 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2015,2016 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_format.3x,v 1.17 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_format.3x,v 1.18 2020/10/17 23:43:11 tom Exp $
.TH menu_format 3X ""
.SH NAME
\fBset_menu_format\fP,
\fBmenu_format\fP \- set and get menu sizes
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_menu_format(MENU *\fP\fImenu\fP\fB, int \fP\fIrows\fP\fB, int \fP\fIcols\fP\fB);\fP
.br
-int set_menu_format(MENU *menu, int rows, int cols);
-.br
-void menu_format(const MENU *menu, int *rows, int *cols);
+\fBvoid menu_format(const MENU *\fP\fImenu\fP\fB, int *\fP\fIrows\fP\fB, int *\fP\fIcols\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_menu_format\fR sets the maximum display size of the given
menu.
If this size is too small to display all menu items, the menu will be
made scrollable.
If this size is larger than the menus subwindow and the
subwindow is too small to display all menu items, \fBpost_menu\fR will fail.
.PP
The default format is 16 rows, 1 column.
Calling \fBset_menu_format\fR with a
null menu pointer will change this default.
A zero row or column argument to
\fBset_menu_format\fR is interpreted as a request not to change the current
value.
.PP
The function \fBmenu_format\fR returns the maximum-size constraints for the
given menu into the storage addressed by \fBrows\fR and \fBcols\fR.
.SH RETURN VALUE
These routines returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_POSTED
The menu is already posted.
.TP 5
.B E_NOT_CONNECTED
No items are connected to the menu.
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/menu_hook.3x b/contrib/ncurses/man/menu_hook.3x
index adf0cb419326..17a1036fabbe 100644
--- a/contrib/ncurses/man/menu_hook.3x
+++ b/contrib/ncurses/man/menu_hook.3x
@@ -1,102 +1,102 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2007,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_hook.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_hook.3x,v 1.15 2020/10/17 23:44:57 tom Exp $
.TH menu_hook 3X ""
.SH NAME
\fBmenu_hook\fR \- set hooks for automatic invocation by applications
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_item_init(MENU *\fP\fImenu\fP\fB, Menu_Hook \fP\fIfunc);\fP
.br
-int set_item_init(MENU *menu, Menu_Hook func);
+\fBMenu_Hook item_init(const MENU *\fP\fImenu);\fP
+.sp
+\fBint set_item_term(MENU *\fP\fImenu\fP\fB, Menu_Hook \fP\fIfunc);\fP
.br
-Menu_Hook item_init(const MENU *menu);
+\fBMenu_Hook item_term(const MENU *\fP\fImenu);\fP
+.sp
+\fBint set_menu_init(MENU *\fP\fImenu\fP\fB, Menu_Hook \fP\fIfunc);\fP
.br
-int set_item_term(MENU *menu, Menu_Hook func);
+\fBMenu_Hook menu_init(const MENU *\fP\fImenu);\fP
+.sp
+\fBint set_menu_term(MENU *\fP\fImenu\fP\fB, Menu_Hook \fP\fIfunc);\fP
.br
-Menu_Hook item_term(const MENU *menu);
-.br
-int set_menu_init(MENU *menu, Menu_Hook func);
-.br
-Menu_Hook menu_init(const MENU *menu);
-.br
-int set_menu_term(MENU *menu, Menu_Hook func);
-.br
-Menu_Hook menu_term(const MENU *menu);
+\fBMenu_Hook menu_term(const MENU *\fP\fImenu);\fP
.br
.SH DESCRIPTION
These functions make it possible to set hook functions to be called at various
points in the automatic processing of input event codes by \fBmenu_driver\fR.
.PP
The function \fBset_item_init\fR sets a hook to be called at menu-post time and
each time the selected item changes (after the change).
\fBitem_init\fR
returns the current item init hook, if any (\fBNULL\fR if there is no such
hook).
.PP
The function \fBset_item_term\fR sets a hook to be called at menu-unpost time
and each time the selected item changes (before the change).
\fBitem_term\fR
returns the current item term hook, if any (\fBNULL\fR if there is no such
hook).
.PP
The function \fBset_menu_init\fR sets a hook to be called at menu-post time and
just after the top row on the menu changes once it is posted.
\fBmenu_init\fR
returns the current menu init hook, if any (\fBNULL\fR if there is no such
hook).
.PP
The function \fBset_menu_term\fR sets a hook to be called at menu-unpost time
and just before the top row on the menu changes once it is posted.
\fBmenu_term\fR returns the current menu term hook, if any (\fBNULL\fR if there
is no such hook).
.SH RETURN VALUE
Routines that return pointers return \fBNULL\fR on error.
Other routines
return one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric
S. Raymond.
diff --git a/contrib/ncurses/man/menu_items.3x b/contrib/ncurses/man/menu_items.3x
index 4d018022bcd9..7c042435cfc7 100644
--- a/contrib/ncurses/man/menu_items.3x
+++ b/contrib/ncurses/man/menu_items.3x
@@ -1,91 +1,91 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2012,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_items.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_items.3x,v 1.17 2020/10/24 09:00:06 tom Exp $
.TH menu_items 3X ""
.SH NAME
\fBset_menu_items\fR,
\fBmenu_items\fR,
\fBitem_count\fP \- make and break connections between items and menus
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_menu_items(MENU *\fP\fImenu\fP\fB, ITEM **\fP\fIitems\fP\fB);\fP
.br
-int set_menu_items(MENU *menu, ITEM **items);
+\fBITEM **menu_items(const MENU *\fP\fImenu\fP\fB);\fP
.br
-ITEM **menu_items(const MENU *menu);
-.br
-int item_count(const MENU *menu);
+\fBint item_count(const MENU *\fP\fImenu\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_menu_items\fR changes the item pointer array of the given
\fImenu\fR. The array must be terminated by a \fBNULL\fR.
.PP
The function \fBmenu_items\fR returns the item array of the given menu.
.PP
The function \fBitem_count\fR returns the count of items in \fImenu\fR.
.SH RETURN VALUE
The function \fBmenu_items\fR returns a pointer (which may be \fBNULL\fR).
-It does not set errno.
+It does not set \fBerrno\fP.
.PP
The function \fBitem_count\fR returns \fBERR\fR (the general \fBcurses\fR error
return value) if its \fImenu\fP parameter is \fBNULL\fP.
.PP
The function \fBset_menu_items\fR returns one of the following codes on error:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_NOT_CONNECTED
No items are connected to the menu.
.TP 5
.B E_POSTED
The menu is already posted.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.PP
The SVr4 menu library documentation specifies the \fBitem_count\fR error value
as \-1 (which is the value of \fBERR\fR).
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/menu_mark.3x b/contrib/ncurses/man/menu_mark.3x
index 9ad0989fa879..960113578f48 100644
--- a/contrib/ncurses/man/menu_mark.3x
+++ b/contrib/ncurses/man/menu_mark.3x
@@ -1,84 +1,84 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_mark.3x,v 1.15 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_mark.3x,v 1.18 2020/10/24 08:59:04 tom Exp $
.TH menu_mark 3X ""
.SH NAME
\fBset_menu_mark\fP,
\fBmenu_mark\fR \- get and set the menu mark string
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_menu_mark(MENU *\fP\fImenu\fP\fB, const char *\fP\fImark\fP\fB);\fP
.br
-int set_menu_mark(MENU *menu, const char *mark);
-.br
-const char *menu_mark(const MENU *menu);
+\fBconst char *menu_mark(const MENU *\fP\fImenu\fP\fB);\fP
.br
.SH DESCRIPTION
In order to make menu selections visible on older terminals without
highlighting or color capability, the menu library marks selected items
in a menu with a prefix string.
.PP
The function \fBset_menu_mark\fR sets the mark string for the given menu.
Calling \fBset_menu_mark\fR with a null menu item will abolish the mark string.
Note that changing the length of the mark string for a menu while the
menu is posted is likely to produce unhelpful behavior.
.PP
The default string is "\-" (a dash).
Calling \fBset_menu_mark\fR with
a non-\fBNULL\fR menu argument will change this default.
.PP
The function \fBmenu_mark\fR returns the menu's mark string (or \fBNULL\fR if
there is none).
.SH RETURN VALUE
The function \fBmenu_mark\fR returns a pointer (which may be \fBNULL\fR).
-It does not set errno.
+It does not set \fBerrno\fP.
.PP
The function \fBset_menu_mark\fR may return the following error codes:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/menu_new.3x b/contrib/ncurses/man/menu_new.3x
index 46e415e8e25c..3b04f93bb162 100644
--- a/contrib/ncurses/man/menu_new.3x
+++ b/contrib/ncurses/man/menu_new.3x
@@ -1,83 +1,83 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_new.3x,v 1.15 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_new.3x,v 1.18 2020/10/24 08:57:51 tom Exp $
.TH menu_new 3X ""
.SH NAME
\fBnew_menu\fP,
\fBfree_menu\fR \- create and destroy menus
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBMENU *new_menu(ITEM **\fP\fIitems\fP\fB);\fP
.br
-MENU *new_menu(ITEM **items);
-.br
-int free_menu(MENU *menu);
+\fBint free_menu(MENU *\fP\fImenu\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBnew_menu\fR creates a new menu connected to a specified item
pointer array (which must be \fBNULL\fR-terminated).
.PP
The function \fBfree_menu\fR disconnects \fImenu\fR from its item array
and frees the storage allocated for the menu.
.SH RETURN VALUE
The function \fBnew_menu\fR returns \fBNULL\fR on error.
-It sets errno according to the function's failure:
+It sets \fBerrno\fP according to the function's failure:
.TP 5
.B E_NOT_CONNECTED
No items are connected to the menu.
.TP 5
.B E_SYSTEM_ERROR
System error occurred, e.g., malloc failure.
.PP
The function \fBfree_menu\fR returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_POSTED
The menu has already been posted.
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/menu_opts.3x b/contrib/ncurses/man/menu_opts.3x
index 4a0d435d41d3..99e950e5b8d4 100644
--- a/contrib/ncurses/man/menu_opts.3x
+++ b/contrib/ncurses/man/menu_opts.3x
@@ -1,109 +1,109 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2015,2016 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_opts.3x,v 1.17 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_opts.3x,v 1.18 2020/10/17 23:46:35 tom Exp $
.TH menu_opts 3X ""
.SH NAME
\fBset_menu_opts\fP,
\fBmenu_opts_on\fP,
\fBmenu_opts_off\fP,
\fBmenu_opts\fR \- set and get menu options
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_menu_opts(MENU *\fP\fImenu\fP\fB, Menu_Options \fP\fIopts\fP\fB);\fP
.br
-int set_menu_opts(MENU *menu, Menu_Options opts);
+\fBMenu_Options menu_opts(const MENU *\fP\fImenu\fP\fB);\fP
+.sp
+\fBint menu_opts_on(MENU *\fP\fImenu\fP\fB, Menu_Options \fP\fIopts\fP\fB);\fP
.br
-int menu_opts_on(MENU *menu, Menu_Options opts);
-.br
-int menu_opts_off(MENU *menu, Menu_Options opts);
-.br
-Menu_Options menu_opts(const MENU *menu);
+\fBint menu_opts_off(MENU *\fP\fImenu\fP\fB, Menu_Options \fP\fIopts\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_menu_opts\fR sets all the given menu's option bits (menu
option bits may be logically-OR'ed together).
.PP
The function \fBmenu_opts_on\fR turns on the given option bits, and leaves
others alone.
.PP
The function \fBmenu_opts_off\fR turns off the given option bits, and leaves
others alone.
.PP
The function \fBmenu_opts\fR returns the menu's current option bits.
.PP
The following options are defined (all are on by default):
.TP 5
O_ONEVALUE
Only one item can be selected for this menu.
.TP 5
O_SHOWDESC
Display the item descriptions when the menu is posted.
.TP 5
O_ROWMAJOR
Display the menu in row-major order.
.TP 5
O_IGNORECASE
Ignore the case when pattern-matching.
.TP 5
O_SHOWMATCH
Move the cursor to within the item name while pattern-matching.
.TP 5
O_NONCYCLIC
Don't wrap around next-item and previous-item,
requests to the other end of the menu.
.TP 5
O_MOUSE_MENU
If user clicks with the mouse
and it does not fall on the currently active menu,
push \fBKEY_MOUSE\fP and the \fBMEVENT\fP data
back on the queue to allow processing in another part of the calling program.
.SH RETURN VALUE
Except for \fBmenu_opts\fR, each routine returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_POSTED
The menu is already posted.
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/menu_pattern.3x b/contrib/ncurses/man/menu_pattern.3x
index ce439b472ca8..a24ffa0818c5 100644
--- a/contrib/ncurses/man/menu_pattern.3x
+++ b/contrib/ncurses/man/menu_pattern.3x
@@ -1,92 +1,92 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_pattern.3x,v 1.18 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_pattern.3x,v 1.21 2020/10/18 00:41:14 tom Exp $
.TH menu_pattern 3X ""
.SH NAME
\fBset_menu_pattern\fP,
\fBmenu_pattern\fR \- set and get a menu's pattern buffer
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_menu_pattern(MENU *\fP\fImenu\fP\fB, const char *\fP\fIpattern\fP\fB);\fP
.br
-int set_menu_pattern(MENU *menu, const char *pattern);
-.br
-char *menu_pattern(const MENU *menu);
+\fBchar *menu_pattern(const MENU *\fP\fImenu\fP\fB);\fP
.br
.SH DESCRIPTION
Every menu has an associated pattern match buffer.
As input events that are
printable characters come in, they are appended to this match buffer
and tested for a match, as described in \fBmenu_driver\fR(3X).
.PP
The function \fBset_menu_pattern\fR sets the pattern buffer for the given menu
and tries to find the first matching item.
If it succeeds, that item becomes
current; if not, the current item does not change.
.PP
The function \fBmenu_pattern\fR returns the pattern buffer of the given
\fImenu\fR.
.SH RETURN VALUE
The function \fBmenu_pattern\fR returns a pointer,
which is \fBNULL\fR if the \fImenu\fP parameter is \fBNULL\fP.
Otherwise, it is a pointer to a string which is empty
if no pattern has been set.
-It does not set errno.
+It does not set \fBerrno\fP.
.PP
The function \fBset_menu_pattern\fR may return the following error codes:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_BAD_STATE
Routine was called from an initialization or termination function.
.TP 5
.B E_NOT_CONNECTED
No items are connected to menu.
.TP 5
.B E_NO_MATCH
Character failed to match.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/menu_post.3x b/contrib/ncurses/man/menu_post.3x
index 71f31a7000a9..6f14a45a77c6 100644
--- a/contrib/ncurses/man/menu_post.3x
+++ b/contrib/ncurses/man/menu_post.3x
@@ -1,91 +1,91 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_post.3x,v 1.18 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_post.3x,v 1.19 2020/10/17 23:47:21 tom Exp $
.TH menu_post 3X ""
.SH NAME
\fBpost_menu\fR,
\fBunpost_menu\fR \- write or erase menus from associated subwindows
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint post_menu(MENU *\fP\fImenu\fP\fB);\fP
.br
-int post_menu(MENU *menu);
-.br
-int unpost_menu(MENU *menu);
+\fBint unpost_menu(MENU *\fP\fImenu\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBpost_menu\fR displays a menu to its associated subwindow.
To
trigger physical display of the subwindow,
use \fBrefresh\fR(3X) or some equivalent
\fBcurses\fR routine (the implicit \fBdoupdate\fR triggered by an \fBcurses\fR
input request will do).
\fBpost_menu\fR resets the selection status of all items.
.PP
The function \fBunpost_menu\fR erases menu from its associated subwindow.
.SH RETURN VALUE
These routines return one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_POSTED
The menu has already been posted.
.TP 5
.B E_BAD_STATE
Routine was called from an initialization or termination function.
.TP 5
.B E_NO_ROOM
Menu is too large for its window.
You should consider using \fBset_menu_format\fR to solve the problem.
.TP 5
.B E_NOT_POSTED
The menu has not been posted.
.TP 5
.B E_NOT_CONNECTED
No items are connected to the menu.
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/menu_requestname.3x b/contrib/ncurses/man/menu_requestname.3x
index c62ec503a43d..d10874cc4bcf 100644
--- a/contrib/ncurses/man/menu_requestname.3x
+++ b/contrib/ncurses/man/menu_requestname.3x
@@ -1,69 +1,69 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_requestname.3x,v 1.12 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_requestname.3x,v 1.15 2020/10/18 00:40:34 tom Exp $
.TH menu_requestname 3X ""
.SH NAME
\fBmenu_request_by_name\fP,
\fBmenu_request_name\fR \- handle printable menu request names
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBconst char *menu_request_name(int \fP\fIrequest\fP\fB);\fP
.br
-const char *menu_request_name(int request);
-.br
-int menu_request_by_name(const char *name);
+\fBint menu_request_by_name(const char *\fP\fIname\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBmenu_request_name\fR returns the printable name of a menu
request code.
.br
The function \fBmenu_request_by_name\fR searches in the name-table for a request
with the given name and returns its request code.
Otherwise E_NO_MATCH is returned.
.SH RETURN VALUE
\fBmenu_request_name\fR returns \fBNULL\fR on error
-and sets errno to \fBE_BAD_ARGUMENT\fR.
+and sets \fBerrno\fP to \fBE_BAD_ARGUMENT\fR.
.br
\fBmenu_request_by_name\fR returns \fBE_NO_MATCH\fR on error.
-It does not set errno.
+It does not set \fBerrno\fP.
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines are specific to ncurses.
They were not supported on
Version 7, BSD or System V implementations.
It is recommended that
any code depending on them be conditioned using NCURSES_VERSION.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/menu_spacing.3x b/contrib/ncurses/man/menu_spacing.3x
index 04ccb573ae7d..7d67f0b6aa2f 100644
--- a/contrib/ncurses/man/menu_spacing.3x
+++ b/contrib/ncurses/man/menu_spacing.3x
@@ -1,92 +1,92 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_spacing.3x,v 1.16 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_spacing.3x,v 1.17 2020/10/17 23:48:53 tom Exp $
.TH menu_spacing 3X ""
.SH NAME
\fBset_menu_spacing\fP,
\fBmenu_spacing\fR \- set and get spacing between menu items.
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_menu_spacing(MENU *\fP\fImenu\fP\fB,\fP
+ \fBint \fP\fIspc_description\fP\fB,\fP
+ \fBint \fP\fIspc_rows\fP\fB,\fP
+ \fBint \fP\fIspc_columns\fP\fB);\fP
.br
-int set_menu_spacing(MENU *menu,
- int spc_description,
- int spc_rows,
- int spc_columns);
-.br
-int menu_spacing(const MENU *menu,
- int* spc_description,
- int* spc_rows,
- int* spc_columns);
+\fBint menu_spacing(const MENU *\fP\fImenu\fP\fB,\fP
+ \fBint* \fP\fIspc_description\fP\fB,\fP
+ \fBint* \fP\fIspc_rows\fP\fB,\fP
+ \fBint* \fP\fIspc_columns\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_menu_spacing\fR sets the spacing information for the menu.
Its parameter \fBspc_description\fR controls the number of spaces
between an item name and an item description.
It must not be larger than \fBTABSIZE\fR.
The menu system puts in the
middle of this spacing area the pad character.
The remaining parts are filled with
spaces.
The \fBspc_rows\fR parameter controls the number of rows
that are used for an item.
It must not be larger than 3.
The menu system inserts the blank lines between item rows, these lines
will contain the pad character in the appropriate positions.
The \fBspc_columns\fR parameter controls
the number of blanks between columns of items.
It must not be larger than \fBTABSIZE\fP.
A value of 0 for all the spacing values resets them to the default,
which is 1 for all of them.
.br
The function \fBmenu_spacing\fR passes back the spacing info for the menu.
If a
pointer is NULL, this specific info is simply not returned.
.SH RETURN VALUE
Both routines return \fBE_OK\fR on success.
\fBset_menu_spacing\fR may return
\fBE_POSTED\fR if the menu is posted, or \fBE_BAD_ARGUMENT\fR if one of the
spacing values is out of range.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_variables\fR(3X),
\fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines are specific to ncurses.
They were not supported on
Version 7, BSD or System V implementations.
It is recommended that
any code depending on them be conditioned using NCURSES_VERSION.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/menu_userptr.3x b/contrib/ncurses/man/menu_userptr.3x
index 15cc14b9770b..afc393e08040 100644
--- a/contrib/ncurses/man/menu_userptr.3x
+++ b/contrib/ncurses/man/menu_userptr.3x
@@ -1,66 +1,66 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_userptr.3x,v 1.13 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_userptr.3x,v 1.16 2020/10/18 00:39:49 tom Exp $
.TH menu_userptr 3X ""
.SH NAME
\fBset_menu_userptr\fP,
\fBmenu_userptr\fR \- associate application data with a menu item
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_menu_userptr(MENU *\fP\fImenu\fP\fB, void *\fP\fIuserptr\fP\fB);\fP
.br
-int set_menu_userptr(MENU *menu, void *userptr);
-.br
-void *menu_userptr(const MENU *menu);
+\fBvoid *menu_userptr(const MENU *\fP\fImenu\fP\fB);\fP
.br
.SH DESCRIPTION
Every menu and every menu item has a field that can be used to hold
application-specific data (that is, the menu-driver code leaves it alone).
These functions get and set the menu user pointer field.
.SH RETURN VALUE
\fBmenu_userptr\fR returns a pointer (which may be \fBNULL\fR).
-It does not set errno.
+It does not set \fBerrno\fP.
.PP
\fBset_menu_userptr\fP returns \fBE_OK\fP (success).
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.PP
The user pointer is a void pointer.
We chose not to leave it as a char pointer for SVr4 compatibility.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/menu_win.3x b/contrib/ncurses/man/menu_win.3x
index 99ba546318af..ae764ec9a126 100644
--- a/contrib/ncurses/man/menu_win.3x
+++ b/contrib/ncurses/man/menu_win.3x
@@ -1,96 +1,96 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2006,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: menu_win.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: menu_win.3x,v 1.15 2020/10/17 23:50:51 tom Exp $
.TH menu_win 3X ""
.SH NAME
\fBmenu_win\fR \- make and break menu window and subwindow associations
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_menu_win(MENU *\fP\fImenu\fP\fB, WINDOW *\fP\fIwin\fP\fB);\fP
.br
-int set_menu_win(MENU *menu, WINDOW *win);
+\fBWINDOW *menu_win(const MENU *\fP\fImenu\fP\fB);\fP
+.sp
+\fBint set_menu_sub(MENU *\fP\fImenu\fP\fB, WINDOW *\fP\fIsub\fP\fB);\fP
.br
-WINDOW *menu_win(const MENU *menu);
-.br
-int set_menu_sub(MENU *menu, WINDOW *sub);
-.br
-WINDOW *menu_sub(const MENU *menu);
-.br
-int scale_menu(const MENU *menu, int *rows, int *columns);
+\fBWINDOW *menu_sub(const MENU *\fP\fImenu\fP\fB);\fP
+.sp
+\fBint scale_menu(const MENU *\fP\fImenu, int *\fP\fIrows\fP\fB, int *\fP\fIcolumns);\fP
.br
.SH DESCRIPTION
Every menu has an associated pair of \fBcurses\fR windows.
The menu window
displays any title and border associated with the window; the menu subwindow
displays the items of the menu that are currently available for selection.
.PP
The first four functions get and set those windows.
It is not necessary to set
either window; by default, the driver code uses \fBstdscr\fR for both.
.PP
In the \fBset_\fR functions, window argument of \fBNULL\fR is treated as though
it were \fBstsdcr\fR. A menu argument of \fBNULL\fR is treated as a request
to change the system default menu window or subwindow.
.PP
The function \fBscale_menu\fR returns the minimum size required for the
subwindow of \fImenu\fR.
.SH RETURN VALUE
Routines that return pointers return \fBNULL\fR on error.
Routines that return
an integer return one of the following error codes:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_POSTED
The menu has already been posted.
.TP 5
.B E_NOT_CONNECTED
No items are connected to the menu.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_variables\fR(3X),
\fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/mitem_current.3x b/contrib/ncurses/man/mitem_current.3x
index b1736c7394e5..4cd37b6033e2 100644
--- a/contrib/ncurses/man/mitem_current.3x
+++ b/contrib/ncurses/man/mitem_current.3x
@@ -1,101 +1,101 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2006,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: mitem_current.3x,v 1.17 2020/02/02 23:34:34 tom Exp $
+.\" $Id: mitem_current.3x,v 1.20 2020/10/18 00:39:06 tom Exp $
.TH mitem_current 3X ""
.SH NAME
\fBmitem_current\fR \- set and get current_menu_item
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_current_item(MENU *\fP\fImenu\fP\fB, ITEM *\fP\fIitem\fP\fB);\fP
.br
-int set_current_item(MENU *menu, ITEM *item);
+\fBITEM *current_item(const MENU *\fP\fImenu\fP\fB);\fP
+.sp
+\fBint set_top_row(MENU *\fP\fImenu\fP\fB, int \fP\fIrow\fP\fB);\fP
.br
-ITEM *current_item(const MENU *menu);
-.br
-int set_top_row(MENU *menu, int row);
-.br
-int top_row(const MENU *menu);
-.br
-int item_index(const ITEM *item);
+\fBint top_row(const MENU *\fP\fImenu\fP\fB);\fP
+.sp
+\fBint item_index(const ITEM *\fP\fIitem\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_current_item\fR sets the current item (the item on which
the menu cursor is positioned).
\fBcurrent_item\fR returns a pointer to the
current item in the given menu.
.PP
The function \fBset_top_row\fR sets the top row of the menu to show the given
row (the top row is initially 0, and is reset to this value whenever the
\fBO_ROWMAJOR\fR option is toggled).
The item leftmost on the given row
becomes current.
The function \fBtop_row\fR returns the number of the top menu
row being displayed.
.PP
The function \fBitem_index\fR returns the (zero-origin) index of \fIitem\fR in
the menu's item pointer list.
.SH RETURN VALUE
\fBcurrent_item\fR returns a pointer (which may be \fBNULL\fR).
-It does not set errno.
+It does not set \fBerrno\fP.
.PP
\fBtop_row\fR and \fBitem_index\fR return \fBERR\fR (the general \fBcurses\fR
error value) if their \fImenu\fP parameter is \fBNULL\fP.
.PP
\fBset_current_item\fR and \fBset_top_row\fR return one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_BAD_STATE
Routine was called from an initialization or termination function.
.TP 5
.B E_NOT_CONNECTED
No items are connected to the menu.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.PP
The SVr4 menu library documentation specifies the \fBtop_row\fR and
\fBindex_item\fR error value as \-1 (which is the value of \fBERR\fR).
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/mitem_name.3x b/contrib/ncurses/man/mitem_name.3x
index 0207a9ac1f29..bf50cfd8f424 100644
--- a/contrib/ncurses/man/mitem_name.3x
+++ b/contrib/ncurses/man/mitem_name.3x
@@ -1,61 +1,61 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: mitem_name.3x,v 1.11 2020/02/02 23:34:34 tom Exp $
+.\" $Id: mitem_name.3x,v 1.14 2020/10/18 00:37:48 tom Exp $
.TH mitem_name 3X ""
.SH NAME
\fBitem_name\fR,
\fBitem_description\fR \- get menu item name and description fields
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBconst char *item_name(const ITEM *\fP\fIitem\fP\fB);\fP
.br
-const char *item_name(const ITEM *item);
-.br
-const char *item_description(const ITEM *item);
+\fBconst char *item_description(const ITEM *\fP\fIitem\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBitem_name\fR returns the name part of the given item.
.br
The function \fBitem_description\fR returns the description part of the given
item.
.SH RETURN VALUE
These routines return a pointer (which may be \fBNULL\fR).
-They do not set errno.
+They do not set \fBerrno\fP.
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/mitem_new.3x b/contrib/ncurses/man/mitem_new.3x
index 9f591f651a57..ce52044f1280 100644
--- a/contrib/ncurses/man/mitem_new.3x
+++ b/contrib/ncurses/man/mitem_new.3x
@@ -1,91 +1,91 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: mitem_new.3x,v 1.16 2020/02/02 23:34:34 tom Exp $
+.\" $Id: mitem_new.3x,v 1.19 2020/10/18 00:37:03 tom Exp $
.TH mitem_new 3X ""
.SH NAME
\fBnew_item\fP,
\fBfree_item\fR \- create and destroy menu items
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBITEM *new_item(const char *\fP\fIname\fP\fB, const char *\fP\fIdescription\fP\fB);\fP
.br
-ITEM *new_item(const char *name, const char *description);
-.br
-int free_item(ITEM *item);
+\fBint free_item(ITEM *\fP\fIitem\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBnew_item\fR allocates a new item and initializes it from the
\fBname\fR and \fBdescription\fR pointers.
Please notice that the item stores
only the pointers to the name and description.
Those pointers must be valid
during the lifetime of the item.
So you should be very careful with names
or descriptions allocated on the stack of some routines.
.br
The function \fBfree_item\fR de-allocates an item.
Please notice that it
is the responsibility of the application to release the memory for the
name or the description of the item.
.SH RETURN VALUE
The function \fBnew_item\fR returns \fBNULL\fR on error.
-It sets errno according to the function's failure:
+It sets \fBerrno\fP according to the function's failure:
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_SYSTEM_ERROR
System error occurred, e.g., malloc failure.
.PP
The function \fBfree_item\fR returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_BAD_ARGUMENT
Routine detected an incorrect or out-of-range argument.
.TP 5
.B E_CONNECTED
Item is connected to a menu.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/mitem_opts.3x b/contrib/ncurses/man/mitem_opts.3x
index 27459433a4b5..105f9de97a42 100644
--- a/contrib/ncurses/man/mitem_opts.3x
+++ b/contrib/ncurses/man/mitem_opts.3x
@@ -1,84 +1,84 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: mitem_opts.3x,v 1.15 2020/02/02 23:34:34 tom Exp $
+.\" $Id: mitem_opts.3x,v 1.16 2020/10/17 23:52:26 tom Exp $
.TH mitem_opts 3X ""
.SH NAME
\fBset_item_opts\fP,
\fBitem_opts_on\fP,
\fBitem_opts_off\fP,
\fBitem_opts\fR \- set and get menu item options
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_item_opts(ITEM *\fP\fIitem\fP\fB, Item_Options \fP\fIopts\fP\fB);\fP
.br
-int set_item_opts(ITEM *item, Item_Options opts);
+\fBItem_Options item_opts(const ITEM *\fP\fIitem\fP\fB);\fP
+.sp
+\fBint item_opts_on(ITEM *\fP\fIitem\fP\fB, Item_Options \fP\fIopts\fP\fB);\fP
.br
-int item_opts_on(ITEM *item, Item_Options opts);
-.br
-int item_opts_off(ITEM *item, Item_Options opts);
-.br
-Item_Options item_opts(const ITEM *item);
+\fBint item_opts_off(ITEM *\fP\fIitem\fP\fB, Item_Options \fP\fIopts\fP\fB);\fP
.br
.SH DESCRIPTION
The function \fBset_item_opts\fR sets all the given item's option bits (menu
option bits may be logically-OR'ed together).
.PP
The function \fBitem_opts_on\fR turns on the given option bits, and leaves
others alone.
.PP
The function \fBitem_opts_off\fR turns off the given option bits, and leaves
others alone.
.PP
The function \fBitem_opts\fR returns the item's current option bits.
.PP
There is only one defined option bit mask, \fBO_SELECTABLE\fR. When this is
on, the item may be selected during menu processing.
This option defaults
to on.
.SH RETURN VALUE
Except for \fBitem_opts\fR, each routine returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/mitem_userptr.3x b/contrib/ncurses/man/mitem_userptr.3x
index f2639fda96e9..3c3feb26883a 100644
--- a/contrib/ncurses/man/mitem_userptr.3x
+++ b/contrib/ncurses/man/mitem_userptr.3x
@@ -1,68 +1,68 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: mitem_userptr.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: mitem_userptr.3x,v 1.17 2020/10/18 00:36:16 tom Exp $
.TH mitem_userptr 3X ""
.SH NAME
\fBset_item_userptr\fP,
\fBitem_userptr\fR \- associate application data with a menu item
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_item_userptr(ITEM *\fP\fIitem\fP\fB, void *\fP\fIuserptr\fP\fB);\fP
.br
-int set_item_userptr(ITEM *item, void *userptr);
-.br
-void *item_userptr(const ITEM *item);
+\fBvoid *item_userptr(const ITEM *\fP\fIitem\fP\fB);\fP
.br
.SH DESCRIPTION
Every menu item has a field that can be used to hold application-specific data
(that is, the menu-driver code leaves it alone).
These functions get and set
that field.
.SH RETURN VALUE
The function \fBitem_userptr\fR returns a pointer (possibly \fBNULL\fR).
-It does not set errno.
+It does not set \fBerrno\fP.
.PP
The \fBset_item_userptr\fP always returns \fBE_OK\fP (success).
.
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.PP
The user pointer is a void pointer.
We chose not to leave it as a char pointer for SVr4 compatibility.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/mitem_value.3x b/contrib/ncurses/man/mitem_value.3x
index ddbc0f5deaa9..3dc20f1a3c4f 100644
--- a/contrib/ncurses/man/mitem_value.3x
+++ b/contrib/ncurses/man/mitem_value.3x
@@ -1,73 +1,73 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: mitem_value.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: mitem_value.3x,v 1.15 2020/10/17 23:53:24 tom Exp $
.TH mitem_value 3X ""
.SH NAME
\fBset_item_value\fP,
\fBitem_value\fP \- set and get menu item values
.SH SYNOPSIS
\fB#include <menu.h>\fR
+.sp
+\fBint set_item_value(ITEM *\fP\fIitem\fP\fB, bool \fP\fIvalue\fP\fB);\fP
.br
-int set_item_value(ITEM *item, bool value);
-.br
-bool item_value(const ITEM *item);
+\fBbool item_value(const ITEM *\fP\fIitem\fP\fB);\fP
.br
.SH DESCRIPTION
If you turn off the menu option \fBO_ONEVALUE\fR (e.g., with
\fBset_menu_opts\fR or \fBmenu_opts_off\fR; see \fBmenu_opts\fR(3X)), the menu
becomes multi-valued; that is, more than one item may simultaneously be
selected.
.PP
In a multi_valued menu, you can used \fBset_item_value\fR to select the
given menu item (second argument \fBTRUE\fR) or deselect it (second argument
\fBFALSE\fR).
.SH RETURN VALUE
The function \fBset_item_value\fR returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_REQUEST_DENIED
The menu driver could not process the request.
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/mitem_visible.3x b/contrib/ncurses/man/mitem_visible.3x
index 37f569c50263..5e6d1682dd0e 100644
--- a/contrib/ncurses/man/mitem_visible.3x
+++ b/contrib/ncurses/man/mitem_visible.3x
@@ -1,55 +1,55 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998,2010 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: mitem_visible.3x,v 1.9 2020/02/02 23:34:34 tom Exp $
+.\" $Id: mitem_visible.3x,v 1.10 2020/10/17 23:53:55 tom Exp $
.TH mitem_visible 3X ""
.SH NAME
\fBmitem_visible\fR \- check visibility of a menu item
.SH SYNOPSIS
\fB#include <menu.h>\fR
-.br
-bool item_visible(const ITEM *item);
+.sp
+\fBbool item_visible(const ITEM *\fP\fIitem\fP\fB);\fP
.br
.SH DESCRIPTION
A menu item is visible when it is in the portion of a posted menu that
is mapped onto the screen (if the menu is scrollable, in particular, this
portion will be smaller than the whole menu).
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
diff --git a/contrib/ncurses/man/ncurses.3x b/contrib/ncurses/man/ncurses.3x
index fdd2a717cef4..77083c796f47 100644
--- a/contrib/ncurses/man/ncurses.3x
+++ b/contrib/ncurses/man/ncurses.3x
@@ -1,1414 +1,1557 @@
'\" t
.\"***************************************************************************
-.\" Copyright 2018-2019,2020 Thomas E. Dickey *
+.\" Copyright 2018-2020,2021 Thomas E. Dickey *
.\" Copyright 1998-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: ncurses.3x,v 1.144 2020/02/02 23:34:34 tom Exp $
+.\" $Id: ncurses.3x,v 1.152 2021/01/09 11:07:55 tom Exp $
.hy 0
.TH ncurses 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.de NS
.ie n .sp
.el .sp .5
.ie n .in +4
.el .in +2
.nf
.ft C \" Courier
..
.de NE
.fi
.ft R
.ie n .in -4
.el .in -2
..
.ds n 5
.ds d @TERMINFO@
.SH NAME
\fBncurses\fR \- CRT screen handling and optimization package
.SH SYNOPSIS
\fB#include <curses.h>\fR
.br
.SH DESCRIPTION
The \fBncurses\fR library routines give the user a terminal-independent method
of updating character screens with reasonable optimization.
This implementation is \*(``new curses\*('' (ncurses) and
is the approved replacement for
4.4BSD classic curses, which has been discontinued.
This describes \fBncurses\fR
version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@).
.PP
The \fBncurses\fR library emulates the curses library of
System V Release 4 UNIX,
and XPG4 (X/Open Portability Guide) curses (also known as XSI curses).
XSI stands for X/Open System Interfaces Extension.
The \fBncurses\fR library is freely redistributable in source form.
Differences from the SVr4
curses are summarized under the
\fBEXTENSIONS\fP and \fBPORTABILITY\fP sections below and
described in detail in the respective
\fBEXTENSIONS\fP, \fBPORTABILITY\fP and \fBBUGS\fP sections
of individual man pages.
.PP
The \fBncurses\fR library also provides many useful extensions,
i.e., features which cannot be implemented by a simple add-on library
but which require access to the internals of the library.
.PP
A program using these routines must be linked with the \fB\-lncurses\fR option,
or (if it has been generated) with the debugging library \fB\-lncurses_g\fR.
(Your system integrator may also have installed these libraries under
the names \fB\-lcurses\fR and \fB\-lcurses_g\fR.)
The ncurses_g library generates trace logs (in a file called 'trace' in the
current directory) that describe curses actions.
See also the section on \fBALTERNATE CONFIGURATIONS\fP.
.PP
The \fBncurses\fR package supports: overall screen, window and pad
manipulation; output to windows and pads; reading terminal input; control over
terminal and \fBcurses\fR input and output options; environment query
routines; color manipulation; use of soft label keys; terminfo capabilities;
and access to low-level terminal-manipulation routines.
.SS Initialization
.PP
The library uses the locale which the calling program has initialized.
That is normally done with \fBsetlocale\fP:
.NS
\fBsetlocale(LC_ALL, "");\fP
.NE
.PP
If the locale is not initialized,
the library assumes that characters are printable as in ISO\-8859\-1,
to work with certain legacy programs.
You should initialize the locale and not rely on specific details of
the library when the locale has not been setup.
.PP
The function \fBinitscr\fR or \fBnewterm\fR
must be called to initialize the library
before any of the other routines that deal with windows
and screens are used.
The routine \fBendwin\fR(3X) must be called before exiting.
.PP
To get character-at-a-time input without echoing (most
interactive, screen oriented programs want this), the following
sequence should be used:
.NS
\fBinitscr(); cbreak(); noecho();\fR
.NE
.PP
Most programs would additionally use the sequence:
.NS
-\fBnonl();\fR
\fBintrflush(stdscr, FALSE);\fR
\fBkeypad(stdscr, TRUE);\fR
.NE
.PP
Before a \fBcurses\fR program is run, the tab stops of the terminal
should be set and its initialization strings, if defined, must be output.
This can be done by executing the \fB@TPUT@ init\fR command
after the shell environment variable \fBTERM\fR has been exported.
\fB@TSET@(1)\fR is usually responsible for doing this.
[See \fBterminfo\fR(\*n) for further details.]
.SS Datatypes
.PP
The \fBncurses\fR library permits manipulation of data structures,
called \fIwindows\fR, which can be thought of as two-dimensional
arrays of characters representing all or part of a CRT screen.
A default window called \fBstdscr\fR, which is the size of the terminal
screen, is supplied.
Others may be created with \fBnewwin\fR.
.PP
Note that \fBcurses\fR does not handle overlapping windows, that's done by
the \fBpanel\fR(3X) library.
This means that you can either use
\fBstdscr\fR or divide the screen into tiled windows and not using
\fBstdscr\fR at all.
Mixing the two will result in unpredictable, and undesired, effects.
.PP
Windows are referred to by variables declared as \fBWINDOW *\fR.
These data structures are manipulated with routines described here and
elsewhere in the \fBncurses\fR manual pages.
Among those, the most basic
routines are \fBmove\fR and \fBaddch\fR.
More general versions of
these routines are included with names beginning with \fBw\fR,
allowing the user to specify a window.
The routines not beginning
with \fBw\fR affect \fBstdscr\fR.
.PP
After using routines to manipulate a window, \fBrefresh\fR(3X) is called,
telling \fBcurses\fR to make the user's CRT screen look like
\fBstdscr\fR.
The characters in a window are actually of type
\fBchtype\fR, (character and attribute data) so that other information
about the character may also be stored with each character.
.PP
Special windows called \fIpads\fR may also be manipulated.
These are windows
which are not constrained to the size of the screen and whose contents need not
be completely displayed.
See \fBcurs_pad\fR(3X) for more information.
.PP
In addition to drawing characters on the screen, video attributes and colors
may be supported, causing the characters to show up in such modes as
underlined, in reverse video, or in color on terminals that support such
display enhancements.
Line drawing characters may be specified to be output.
On input, \fBcurses\fR is also able to translate arrow and function keys that
transmit escape sequences into single values.
The video attributes, line
drawing characters, and input values use names, defined in \fB<curses.h>\fR,
such as \fBA_REVERSE\fR, \fBACS_HLINE\fR, and \fBKEY_LEFT\fR.
.SS Environment variables
.PP
If the environment variables \fBLINES\fR and \fBCOLUMNS\fR are set, or if the
program is executing in a window environment, line and column information in
the environment will override information read by \fIterminfo\fR.
This would affect a program running in an AT&T 630 layer,
for example, where the size of a
screen is changeable (see \fBENVIRONMENT\fR).
.PP
If the environment variable \fBTERMINFO\fR is defined, any program using
\fBcurses\fR checks for a local terminal definition before checking in the
standard place.
For example, if \fBTERM\fR is set to \fBatt4424\fR, then the
compiled terminal definition is found in
.NS
\fB\*d/a/att4424\fR.
.NE
.PP
(The \fBa\fR is copied from the first letter of \fBatt4424\fR to avoid
creation of huge directories.) However, if \fBTERMINFO\fR is set to
\fB$HOME/myterms\fR, \fBcurses\fR first checks
.NS
\fB$HOME/myterms/a/att4424\fR,
.NE
.PP
and if that fails, it then checks
.NS
\fB\*d/a/att4424\fR.
.NE
.PP
This is useful for developing experimental definitions or when write
permission in \fB\*d\fR is not available.
.PP
The integer variables \fBLINES\fR and \fBCOLS\fR are defined in
\fB<curses.h>\fR and will be filled in by \fBinitscr\fR with the size of the
screen.
The constants \fBTRUE\fR and \fBFALSE\fR have the values \fB1\fR and
\fB0\fR, respectively.
.PP
The \fBcurses\fR routines also define the \fBWINDOW *\fR variable \fBcurscr\fR
which is used for certain low-level operations like clearing and redrawing a
screen containing garbage.
The \fBcurscr\fR can be used in only a few routines.
.\"
.SS Routine and Argument Names
Many \fBcurses\fR routines have two or more versions.
The routines prefixed with \fBw\fR require a window argument.
The routines prefixed with \fBp\fR require a pad argument.
Those without a prefix generally use \fBstdscr\fR.
.PP
The routines prefixed with \fBmv\fR require a \fIy\fR and \fIx\fR
coordinate to move to before performing the appropriate action.
The \fBmv\fR routines imply a call to \fBmove\fR before the call to the
other routine.
The coordinate \fIy\fR always refers to the row (of
the window), and \fIx\fR always refers to the column.
The upper left-hand corner is always (0,0), not (1,1).
.PP
The routines prefixed with \fBmvw\fR take both a window argument and
\fIx\fR and \fIy\fR coordinates.
The window argument is always specified before the coordinates.
.PP
In each case, \fIwin\fR is the window affected, and \fIpad\fR is the
pad affected; \fIwin\fR and \fIpad\fR are always pointers to type
\fBWINDOW\fR.
.PP
Option setting routines require a Boolean flag \fIbf\fR with the value
\fBTRUE\fR or \fBFALSE\fR; \fIbf\fR is always of type \fBbool\fR.
Most of the data types used in the library routines,
such as \fBWINDOW\fR, \fBSCREEN\fR, \fBbool\fR, and \fBchtype\fR
are defined in \fB<curses.h>\fR.
Types used for the terminfo routines such as
\fBTERMINAL\fR are defined in \fB<term.h>\fR.
.PP
This manual page describes functions which may appear in any configuration
of the library.
There are two common configurations of the library:
.RS 3
.TP 5
.I ncurses
the \*(``normal\*('' library, which handles 8-bit characters.
The normal (8-bit) library stores characters combined with attributes
in \fBchtype\fP data.
.IP
Attributes alone (no corresponding character) may be stored in \fBchtype\fP
or the equivalent \fBattr_t\fP data.
In either case, the data is stored in something like an integer.
.IP
Each cell (row and column) in a \fBWINDOW\fP is stored as a \fBchtype\fP.
.TP 5
.I ncursesw
the so-called \*(``wide\*('' library, which handles multibyte characters
(see the section on \fBALTERNATE CONFIGURATIONS\fP).
The \*(``wide\*('' library includes all of the calls
from the \*(``normal\*('' library.
It adds about one third more calls using data types which store
multibyte characters:
.RS 5
.TP 5
.B cchar_t
corresponds to \fBchtype\fP.
However it is a structure, because more data is stored than can fit into
an integer.
The characters are large enough to require a full integer value \- and there
may be more than one character per cell.
The video attributes and color are stored in separate fields of the structure.
.IP
Each cell (row and column) in a \fBWINDOW\fP is stored as a \fBcchar_t\fP.
.IP
The \fBsetcchar\fP(3X) and \fBgetcchar\fP(3X)
functions store and retrieve the data from
a \fBcchar_t\fP structure.
.TP 5
.B wchar_t
stores a \*(``wide\*('' character.
Like \fBchtype\fP, this may be an integer.
.TP 5
.B wint_t
stores a \fBwchar_t\fP or \fBWEOF\fP \- not the same, though both may have
the same size.
.RE
.IP
The \*(``wide\*('' library provides new functions which are analogous to
functions in the \*(``normal\*('' library.
There is a naming convention which relates many of the normal/wide variants:
a \*(``_w\*('' is inserted into the name.
For example, \fBwaddch\fP becomes \fBwadd_wch\fP.
.RE
.PP
.\"
.SS Routine Name Index
-The following table lists each \fBcurses\fR routine and the name of
-the manual page on which it is described.
+The following table lists the \fBcurses\fR routines provided in
+the \*(``normal\*('' and \*(``wide\*('' libraries and the names of
+the manual pages on which they are described.
Routines flagged with \*(``*\*(''
are ncurses-specific, not described by XPG4 or present in SVr4.
.PP
.TS
center tab(/);
l l
l l .
\fBcurses\fR Routine Name/Manual Page Name
=
COLOR_PAIR/\fBcurs_color\fR(3X)
PAIR_NUMBER/\fBcurs_attr\fR(3X)
-_nc_free_and_exit/\fBcurs_memleaks\fR(3X)*
-_nc_freeall/\fBcurs_memleaks\fR(3X)*
-_nc_tracebits/\fBcurs_trace\fR(3X)*
-_traceattr/\fBcurs_trace\fR(3X)*
-_traceattr2/\fBcurs_trace\fR(3X)*
-_tracechar/\fBcurs_trace\fR(3X)*
-_tracechtype/\fBcurs_trace\fR(3X)*
-_tracechtype2/\fBcurs_trace\fR(3X)*
-_tracedump/\fBcurs_trace\fR(3X)*
-_tracef/\fBcurs_trace\fR(3X)*
-_tracemouse/\fBcurs_trace\fR(3X)*
add_wch/\fBcurs_add_wch\fR(3X)
add_wchnstr/\fBcurs_add_wchstr\fR(3X)
add_wchstr/\fBcurs_add_wchstr\fR(3X)
addch/\fBcurs_addch\fR(3X)
addchnstr/\fBcurs_addchstr\fR(3X)
addchstr/\fBcurs_addchstr\fR(3X)
addnstr/\fBcurs_addstr\fR(3X)
addnwstr/\fBcurs_addwstr\fR(3X)
addstr/\fBcurs_addstr\fR(3X)
addwstr/\fBcurs_addwstr\fR(3X)
alloc_pair/\fBnew_pair\fR(3X)*
assume_default_colors/\fBdefault_colors\fR(3X)*
attr_get/\fBcurs_attr\fR(3X)
attr_off/\fBcurs_attr\fR(3X)
attr_on/\fBcurs_attr\fR(3X)
attr_set/\fBcurs_attr\fR(3X)
attroff/\fBcurs_attr\fR(3X)
attron/\fBcurs_attr\fR(3X)
attrset/\fBcurs_attr\fR(3X)
baudrate/\fBcurs_termattrs\fR(3X)
beep/\fBcurs_beep\fR(3X)
bkgd/\fBcurs_bkgd\fR(3X)
bkgdset/\fBcurs_bkgd\fR(3X)
bkgrnd/\fBcurs_bkgrnd\fR(3X)
bkgrndset/\fBcurs_bkgrnd\fR(3X)
border/\fBcurs_border\fR(3X)
border_set/\fBcurs_border_set\fR(3X)
box/\fBcurs_border\fR(3X)
box_set/\fBcurs_border_set\fR(3X)
can_change_color/\fBcurs_color\fR(3X)
cbreak/\fBcurs_inopts\fR(3X)
chgat/\fBcurs_attr\fR(3X)
clear/\fBcurs_clear\fR(3X)
clearok/\fBcurs_outopts\fR(3X)
clrtobot/\fBcurs_clear\fR(3X)
clrtoeol/\fBcurs_clear\fR(3X)
color_content/\fBcurs_color\fR(3X)
color_set/\fBcurs_attr\fR(3X)
copywin/\fBcurs_overlay\fR(3X)
curs_set/\fBcurs_kernel\fR(3X)
+curses_trace/\fBcurs_trace\fR(3X)*
curses_version/\fBcurs_extend\fR(3X)*
def_prog_mode/\fBcurs_kernel\fR(3X)
def_shell_mode/\fBcurs_kernel\fR(3X)
define_key/\fBdefine_key\fR(3X)*
del_curterm/\fBcurs_terminfo\fR(3X)
delay_output/\fBcurs_util\fR(3X)
delch/\fBcurs_delch\fR(3X)
deleteln/\fBcurs_deleteln\fR(3X)
delscreen/\fBcurs_initscr\fR(3X)
delwin/\fBcurs_window\fR(3X)
derwin/\fBcurs_window\fR(3X)
doupdate/\fBcurs_refresh\fR(3X)
dupwin/\fBcurs_window\fR(3X)
echo/\fBcurs_inopts\fR(3X)
echo_wchar/\fBcurs_add_wch\fR(3X)
echochar/\fBcurs_addch\fR(3X)
endwin/\fBcurs_initscr\fR(3X)
erase/\fBcurs_clear\fR(3X)
erasechar/\fBcurs_termattrs\fR(3X)
erasewchar/\fBcurs_termattrs\fR(3X)
+exit_curses/\fBcurs_memleaks\fR(3X)*
+exit_terminfo/\fBcurs_memleaks\fR(3X)*
extended_color_content/\fBcurs_color\fR(3X)*
extended_pair_content/\fBcurs_color\fR(3X)*
extended_slk_color/\fBcurs_slk\fR(3X)*
filter/\fBcurs_util\fR(3X)
find_pair/\fBnew_pair\fR(3X)*
flash/\fBcurs_beep\fR(3X)
flushinp/\fBcurs_util\fR(3X)
free_pair/\fBnew_pair\fR(3X)*
get_wch/\fBcurs_get_wch\fR(3X)
get_wstr/\fBcurs_get_wstr\fR(3X)
getattrs/\fBcurs_attr\fR(3X)
getbegx/\fBcurs_legacy\fR(3X)*
getbegy/\fBcurs_legacy\fR(3X)*
getbegyx/\fBcurs_getyx\fR(3X)
getbkgd/\fBcurs_bkgd\fR(3X)
getbkgrnd/\fBcurs_bkgrnd\fR(3X)
getcchar/\fBcurs_getcchar\fR(3X)
getch/\fBcurs_getch\fR(3X)
getcurx/\fBcurs_legacy\fR(3X)*
getcury/\fBcurs_legacy\fR(3X)*
getmaxx/\fBcurs_legacy\fR(3X)*
getmaxy/\fBcurs_legacy\fR(3X)*
getmaxyx/\fBcurs_getyx\fR(3X)
getmouse/\fBcurs_mouse\fR(3X)*
getn_wstr/\fBcurs_get_wstr\fR(3X)
getnstr/\fBcurs_getstr\fR(3X)
getparx/\fBcurs_legacy\fR(3X)*
getpary/\fBcurs_legacy\fR(3X)*
getparyx/\fBcurs_getyx\fR(3X)
getstr/\fBcurs_getstr\fR(3X)
getsyx/\fBcurs_kernel\fR(3X)
getwin/\fBcurs_util\fR(3X)
getyx/\fBcurs_getyx\fR(3X)
halfdelay/\fBcurs_inopts\fR(3X)
has_colors/\fBcurs_color\fR(3X)
has_ic/\fBcurs_termattrs\fR(3X)
has_il/\fBcurs_termattrs\fR(3X)
has_key/\fBcurs_getch\fR(3X)*
+has_mouse/\fBcurs_mouse\fR(3X)*
hline/\fBcurs_border\fR(3X)
hline_set/\fBcurs_border_set\fR(3X)
idcok/\fBcurs_outopts\fR(3X)
idlok/\fBcurs_outopts\fR(3X)
immedok/\fBcurs_outopts\fR(3X)
in_wch/\fBcurs_in_wch\fR(3X)
in_wchnstr/\fBcurs_in_wchstr\fR(3X)
in_wchstr/\fBcurs_in_wchstr\fR(3X)
inch/\fBcurs_inch\fR(3X)
inchnstr/\fBcurs_inchstr\fR(3X)
inchstr/\fBcurs_inchstr\fR(3X)
init_color/\fBcurs_color\fR(3X)
init_extended_color/\fBcurs_color\fR(3X)*
init_extended_pair/\fBcurs_color\fR(3X)*
init_pair/\fBcurs_color\fR(3X)
initscr/\fBcurs_initscr\fR(3X)
innstr/\fBcurs_instr\fR(3X)
innwstr/\fBcurs_inwstr\fR(3X)
ins_nwstr/\fBcurs_ins_wstr\fR(3X)
ins_wch/\fBcurs_ins_wch\fR(3X)
ins_wstr/\fBcurs_ins_wstr\fR(3X)
insch/\fBcurs_insch\fR(3X)
insdelln/\fBcurs_deleteln\fR(3X)
insertln/\fBcurs_deleteln\fR(3X)
insnstr/\fBcurs_insstr\fR(3X)
insstr/\fBcurs_insstr\fR(3X)
instr/\fBcurs_instr\fR(3X)
intrflush/\fBcurs_inopts\fR(3X)
inwstr/\fBcurs_inwstr\fR(3X)
is_cleared/\fBcurs_opaque\fR(3X)*
is_idcok/\fBcurs_opaque\fR(3X)*
is_idlok/\fBcurs_opaque\fR(3X)*
is_immedok/\fBcurs_opaque\fR(3X)*
is_keypad/\fBcurs_opaque\fR(3X)*
is_leaveok/\fBcurs_opaque\fR(3X)*
is_linetouched/\fBcurs_touch\fR(3X)
is_nodelay/\fBcurs_opaque\fR(3X)*
is_notimeout/\fBcurs_opaque\fR(3X)*
is_pad/\fBcurs_opaque\fR(3X)*
is_scrollok/\fBcurs_opaque\fR(3X)*
is_subwin/\fBcurs_opaque\fR(3X)*
is_syncok/\fBcurs_opaque\fR(3X)*
is_term_resized/\fBresizeterm\fR(3X)*
is_wintouched/\fBcurs_touch\fR(3X)
isendwin/\fBcurs_initscr\fR(3X)
key_defined/\fBkey_defined\fR(3X)*
key_name/\fBcurs_util\fR(3X)
keybound/\fBkeybound\fR(3X)*
keyname/\fBcurs_util\fR(3X)
keyok/\fBkeyok\fR(3X)*
keypad/\fBcurs_inopts\fR(3X)
killchar/\fBcurs_termattrs\fR(3X)
killwchar/\fBcurs_termattrs\fR(3X)
leaveok/\fBcurs_outopts\fR(3X)
longname/\fBcurs_termattrs\fR(3X)
mcprint/\fBcurs_print\fR(3X)*
meta/\fBcurs_inopts\fR(3X)
mouse_trafo/\fBcurs_mouse\fR(3X)*
mouseinterval/\fBcurs_mouse\fR(3X)*
mousemask/\fBcurs_mouse\fR(3X)*
move/\fBcurs_move\fR(3X)
mvadd_wch/\fBcurs_add_wch\fR(3X)
mvadd_wchnstr/\fBcurs_add_wchstr\fR(3X)
mvadd_wchstr/\fBcurs_add_wchstr\fR(3X)
mvaddch/\fBcurs_addch\fR(3X)
mvaddchnstr/\fBcurs_addchstr\fR(3X)
mvaddchstr/\fBcurs_addchstr\fR(3X)
mvaddnstr/\fBcurs_addstr\fR(3X)
mvaddnwstr/\fBcurs_addwstr\fR(3X)
mvaddstr/\fBcurs_addstr\fR(3X)
mvaddwstr/\fBcurs_addwstr\fR(3X)
mvchgat/\fBcurs_attr\fR(3X)
mvcur/\fBcurs_terminfo\fR(3X)
mvdelch/\fBcurs_delch\fR(3X)
mvderwin/\fBcurs_window\fR(3X)
mvget_wch/\fBcurs_get_wch\fR(3X)
mvget_wstr/\fBcurs_get_wstr\fR(3X)
mvgetch/\fBcurs_getch\fR(3X)
mvgetn_wstr/\fBcurs_get_wstr\fR(3X)
mvgetnstr/\fBcurs_getstr\fR(3X)
mvgetstr/\fBcurs_getstr\fR(3X)
mvhline/\fBcurs_border\fR(3X)
mvhline_set/\fBcurs_border_set\fR(3X)
mvin_wch/\fBcurs_in_wch\fR(3X)
mvin_wchnstr/\fBcurs_in_wchstr\fR(3X)
mvin_wchstr/\fBcurs_in_wchstr\fR(3X)
mvinch/\fBcurs_inch\fR(3X)
mvinchnstr/\fBcurs_inchstr\fR(3X)
mvinchstr/\fBcurs_inchstr\fR(3X)
mvinnstr/\fBcurs_instr\fR(3X)
mvinnwstr/\fBcurs_inwstr\fR(3X)
mvins_nwstr/\fBcurs_ins_wstr\fR(3X)
mvins_wch/\fBcurs_ins_wch\fR(3X)
mvins_wstr/\fBcurs_ins_wstr\fR(3X)
mvinsch/\fBcurs_insch\fR(3X)
mvinsnstr/\fBcurs_insstr\fR(3X)
mvinsstr/\fBcurs_insstr\fR(3X)
mvinstr/\fBcurs_instr\fR(3X)
mvinwstr/\fBcurs_inwstr\fR(3X)
mvprintw/\fBcurs_printw\fR(3X)
mvscanw/\fBcurs_scanw\fR(3X)
mvvline/\fBcurs_border\fR(3X)
mvvline_set/\fBcurs_border_set\fR(3X)
mvwadd_wch/\fBcurs_add_wch\fR(3X)
mvwadd_wchnstr/\fBcurs_add_wchstr\fR(3X)
mvwadd_wchstr/\fBcurs_add_wchstr\fR(3X)
mvwaddch/\fBcurs_addch\fR(3X)
mvwaddchnstr/\fBcurs_addchstr\fR(3X)
mvwaddchstr/\fBcurs_addchstr\fR(3X)
mvwaddnstr/\fBcurs_addstr\fR(3X)
mvwaddnwstr/\fBcurs_addwstr\fR(3X)
mvwaddstr/\fBcurs_addstr\fR(3X)
mvwaddwstr/\fBcurs_addwstr\fR(3X)
mvwchgat/\fBcurs_attr\fR(3X)
mvwdelch/\fBcurs_delch\fR(3X)
mvwget_wch/\fBcurs_get_wch\fR(3X)
mvwget_wstr/\fBcurs_get_wstr\fR(3X)
mvwgetch/\fBcurs_getch\fR(3X)
mvwgetn_wstr/\fBcurs_get_wstr\fR(3X)
mvwgetnstr/\fBcurs_getstr\fR(3X)
mvwgetstr/\fBcurs_getstr\fR(3X)
mvwhline/\fBcurs_border\fR(3X)
mvwhline_set/\fBcurs_border_set\fR(3X)
mvwin/\fBcurs_window\fR(3X)
mvwin_wch/\fBcurs_in_wch\fR(3X)
mvwin_wchnstr/\fBcurs_in_wchstr\fR(3X)
mvwin_wchstr/\fBcurs_in_wchstr\fR(3X)
mvwinch/\fBcurs_inch\fR(3X)
mvwinchnstr/\fBcurs_inchstr\fR(3X)
mvwinchstr/\fBcurs_inchstr\fR(3X)
mvwinnstr/\fBcurs_instr\fR(3X)
mvwinnwstr/\fBcurs_inwstr\fR(3X)
mvwins_nwstr/\fBcurs_ins_wstr\fR(3X)
mvwins_wch/\fBcurs_ins_wch\fR(3X)
mvwins_wstr/\fBcurs_ins_wstr\fR(3X)
mvwinsch/\fBcurs_insch\fR(3X)
mvwinsnstr/\fBcurs_insstr\fR(3X)
mvwinsstr/\fBcurs_insstr\fR(3X)
mvwinstr/\fBcurs_instr\fR(3X)
mvwinwstr/\fBcurs_inwstr\fR(3X)
mvwprintw/\fBcurs_printw\fR(3X)
mvwscanw/\fBcurs_scanw\fR(3X)
mvwvline/\fBcurs_border\fR(3X)
mvwvline_set/\fBcurs_border_set\fR(3X)
napms/\fBcurs_kernel\fR(3X)
newpad/\fBcurs_pad\fR(3X)
newterm/\fBcurs_initscr\fR(3X)
newwin/\fBcurs_window\fR(3X)
-nl/\fBcurs_outopts\fR(3X)
+nl/\fBcurs_inopts\fR(3X)
nocbreak/\fBcurs_inopts\fR(3X)
nodelay/\fBcurs_inopts\fR(3X)
noecho/\fBcurs_inopts\fR(3X)
nofilter/\fBcurs_util\fR(3X)*
-nonl/\fBcurs_outopts\fR(3X)
+nonl/\fBcurs_inopts\fR(3X)
noqiflush/\fBcurs_inopts\fR(3X)
noraw/\fBcurs_inopts\fR(3X)
notimeout/\fBcurs_inopts\fR(3X)
overlay/\fBcurs_overlay\fR(3X)
overwrite/\fBcurs_overlay\fR(3X)
pair_content/\fBcurs_color\fR(3X)
+pecho_wchar/\fBcurs_pad\fR(3X)*
pechochar/\fBcurs_pad\fR(3X)
pnoutrefresh/\fBcurs_pad\fR(3X)
prefresh/\fBcurs_pad\fR(3X)
printw/\fBcurs_printw\fR(3X)
putp/\fBcurs_terminfo\fR(3X)
putwin/\fBcurs_util\fR(3X)
qiflush/\fBcurs_inopts\fR(3X)
raw/\fBcurs_inopts\fR(3X)
redrawwin/\fBcurs_refresh\fR(3X)
refresh/\fBcurs_refresh\fR(3X)
+reset_color_pairs/\fBcurs_color\fR(3X)*
reset_prog_mode/\fBcurs_kernel\fR(3X)
reset_shell_mode/\fBcurs_kernel\fR(3X)
resetty/\fBcurs_kernel\fR(3X)
resize_term/\fBresizeterm\fR(3X)*
resizeterm/\fBresizeterm\fR(3X)*
restartterm/\fBcurs_terminfo\fR(3X)
ripoffline/\fBcurs_kernel\fR(3X)
savetty/\fBcurs_kernel\fR(3X)
scanw/\fBcurs_scanw\fR(3X)
scr_dump/\fBcurs_scr_dump\fR(3X)
scr_init/\fBcurs_scr_dump\fR(3X)
scr_restore/\fBcurs_scr_dump\fR(3X)
scr_set/\fBcurs_scr_dump\fR(3X)
scrl/\fBcurs_scroll\fR(3X)
scroll/\fBcurs_scroll\fR(3X)
scrollok/\fBcurs_outopts\fR(3X)
set_curterm/\fBcurs_terminfo\fR(3X)
set_term/\fBcurs_initscr\fR(3X)
setcchar/\fBcurs_getcchar\fR(3X)
setscrreg/\fBcurs_outopts\fR(3X)
setsyx/\fBcurs_kernel\fR(3X)
-setterm/\fBcurs_terminfo\fR(3X)
setupterm/\fBcurs_terminfo\fR(3X)
slk_attr/\fBcurs_slk\fR(3X)*
slk_attr_off/\fBcurs_slk\fR(3X)
slk_attr_on/\fBcurs_slk\fR(3X)
slk_attr_set/\fBcurs_slk\fR(3X)
slk_attroff/\fBcurs_slk\fR(3X)
slk_attron/\fBcurs_slk\fR(3X)
slk_attrset/\fBcurs_slk\fR(3X)
slk_clear/\fBcurs_slk\fR(3X)
slk_color/\fBcurs_slk\fR(3X)
slk_init/\fBcurs_slk\fR(3X)
slk_label/\fBcurs_slk\fR(3X)
slk_noutrefresh/\fBcurs_slk\fR(3X)
slk_refresh/\fBcurs_slk\fR(3X)
slk_restore/\fBcurs_slk\fR(3X)
slk_set/\fBcurs_slk\fR(3X)
slk_touch/\fBcurs_slk\fR(3X)
+slk_wset/\fBcurs_slk\fR(3X)*
standend/\fBcurs_attr\fR(3X)
standout/\fBcurs_attr\fR(3X)
start_color/\fBcurs_color\fR(3X)
subpad/\fBcurs_pad\fR(3X)
subwin/\fBcurs_window\fR(3X)
syncok/\fBcurs_window\fR(3X)
term_attrs/\fBcurs_termattrs\fR(3X)
termattrs/\fBcurs_termattrs\fR(3X)
termname/\fBcurs_termattrs\fR(3X)
tgetent/\fBcurs_termcap\fR(3X)
tgetflag/\fBcurs_termcap\fR(3X)
tgetnum/\fBcurs_termcap\fR(3X)
tgetstr/\fBcurs_termcap\fR(3X)
tgoto/\fBcurs_termcap\fR(3X)
tigetflag/\fBcurs_terminfo\fR(3X)
tigetnum/\fBcurs_terminfo\fR(3X)
tigetstr/\fBcurs_terminfo\fR(3X)
timeout/\fBcurs_inopts\fR(3X)
tiparm/\fBcurs_terminfo\fR(3X)*
touchline/\fBcurs_touch\fR(3X)
touchwin/\fBcurs_touch\fR(3X)
tparm/\fBcurs_terminfo\fR(3X)
tputs/\fBcurs_termcap\fR(3X)
tputs/\fBcurs_terminfo\fR(3X)
trace/\fBcurs_trace\fR(3X)*
typeahead/\fBcurs_inopts\fR(3X)
unctrl/\fBcurs_util\fR(3X)
unget_wch/\fBcurs_get_wch\fR(3X)
ungetch/\fBcurs_getch\fR(3X)
ungetmouse/\fBcurs_mouse\fR(3X)*
untouchwin/\fBcurs_touch\fR(3X)
use_default_colors/\fBdefault_colors\fR(3X)*
use_env/\fBcurs_util\fR(3X)
use_extended_names/\fBcurs_extend\fR(3X)*
use_legacy_coding/\fBlegacy_coding\fR(3X)*
use_tioctl/\fBcurs_util\fR(3X)*
vid_attr/\fBcurs_terminfo\fR(3X)
vid_puts/\fBcurs_terminfo\fR(3X)
vidattr/\fBcurs_terminfo\fR(3X)
vidputs/\fBcurs_terminfo\fR(3X)
vline/\fBcurs_border\fR(3X)
vline_set/\fBcurs_border_set\fR(3X)
vw_printw/\fBcurs_printw\fR(3X)
vw_scanw/\fBcurs_scanw\fR(3X)
vwprintw/\fBcurs_printw\fR(3X)
vwscanw/\fBcurs_scanw\fR(3X)
wadd_wch/\fBcurs_add_wch\fR(3X)
wadd_wchnstr/\fBcurs_add_wchstr\fR(3X)
wadd_wchstr/\fBcurs_add_wchstr\fR(3X)
waddch/\fBcurs_addch\fR(3X)
waddchnstr/\fBcurs_addchstr\fR(3X)
waddchstr/\fBcurs_addchstr\fR(3X)
waddnstr/\fBcurs_addstr\fR(3X)
waddnwstr/\fBcurs_addwstr\fR(3X)
waddstr/\fBcurs_addstr\fR(3X)
waddwstr/\fBcurs_addwstr\fR(3X)
wattr_get/\fBcurs_attr\fR(3X)
wattr_off/\fBcurs_attr\fR(3X)
wattr_on/\fBcurs_attr\fR(3X)
wattr_set/\fBcurs_attr\fR(3X)
wattroff/\fBcurs_attr\fR(3X)
wattron/\fBcurs_attr\fR(3X)
wattrset/\fBcurs_attr\fR(3X)
wbkgd/\fBcurs_bkgd\fR(3X)
wbkgdset/\fBcurs_bkgd\fR(3X)
wbkgrnd/\fBcurs_bkgrnd\fR(3X)
wbkgrndset/\fBcurs_bkgrnd\fR(3X)
wborder/\fBcurs_border\fR(3X)
wborder_set/\fBcurs_border_set\fR(3X)
wchgat/\fBcurs_attr\fR(3X)
wclear/\fBcurs_clear\fR(3X)
wclrtobot/\fBcurs_clear\fR(3X)
wclrtoeol/\fBcurs_clear\fR(3X)
wcolor_set/\fBcurs_attr\fR(3X)
wcursyncup/\fBcurs_window\fR(3X)
wdelch/\fBcurs_delch\fR(3X)
wdeleteln/\fBcurs_deleteln\fR(3X)
wecho_wchar/\fBcurs_add_wch\fR(3X)
wechochar/\fBcurs_addch\fR(3X)
wenclose/\fBcurs_mouse\fR(3X)*
werase/\fBcurs_clear\fR(3X)
wget_wch/\fBcurs_get_wch\fR(3X)
wget_wstr/\fBcurs_get_wstr\fR(3X)
wgetbkgrnd/\fBcurs_bkgrnd\fR(3X)
wgetch/\fBcurs_getch\fR(3X)
wgetdelay/\fBcurs_opaque\fR(3X)*
wgetn_wstr/\fBcurs_get_wstr\fR(3X)
wgetnstr/\fBcurs_getstr\fR(3X)
wgetparent/\fBcurs_opaque\fR(3X)*
wgetscrreg/\fBcurs_opaque\fR(3X)*
wgetstr/\fBcurs_getstr\fR(3X)
whline/\fBcurs_border\fR(3X)
whline_set/\fBcurs_border_set\fR(3X)
win_wch/\fBcurs_in_wch\fR(3X)
win_wchnstr/\fBcurs_in_wchstr\fR(3X)
win_wchstr/\fBcurs_in_wchstr\fR(3X)
winch/\fBcurs_inch\fR(3X)
winchnstr/\fBcurs_inchstr\fR(3X)
winchstr/\fBcurs_inchstr\fR(3X)
winnstr/\fBcurs_instr\fR(3X)
winnwstr/\fBcurs_inwstr\fR(3X)
wins_nwstr/\fBcurs_ins_wstr\fR(3X)
wins_wch/\fBcurs_ins_wch\fR(3X)
wins_wstr/\fBcurs_ins_wstr\fR(3X)
winsch/\fBcurs_insch\fR(3X)
winsdelln/\fBcurs_deleteln\fR(3X)
winsertln/\fBcurs_deleteln\fR(3X)
winsnstr/\fBcurs_insstr\fR(3X)
winsstr/\fBcurs_insstr\fR(3X)
winstr/\fBcurs_instr\fR(3X)
winwstr/\fBcurs_inwstr\fR(3X)
wmouse_trafo/\fBcurs_mouse\fR(3X)*
wmove/\fBcurs_move\fR(3X)
wnoutrefresh/\fBcurs_refresh\fR(3X)
wprintw/\fBcurs_printw\fR(3X)
wredrawln/\fBcurs_refresh\fR(3X)
wrefresh/\fBcurs_refresh\fR(3X)
wresize/\fBwresize\fR(3X)*
wscanw/\fBcurs_scanw\fR(3X)
wscrl/\fBcurs_scroll\fR(3X)
wsetscrreg/\fBcurs_outopts\fR(3X)
wstandend/\fBcurs_attr\fR(3X)
wstandout/\fBcurs_attr\fR(3X)
wsyncdown/\fBcurs_window\fR(3X)
wsyncup/\fBcurs_window\fR(3X)
wtimeout/\fBcurs_inopts\fR(3X)
wtouchln/\fBcurs_touch\fR(3X)
wunctrl/\fBcurs_util\fR(3X)
wvline/\fBcurs_border\fR(3X)
wvline_set/\fBcurs_border_set\fR(3X)
.TE
+.PP
+Depending on the configuration,
+additional sets of functions may be available:
+.RS 3
+.TP 5
+\fBcurs_memleaks\fP(3X) - curses memory-leak checking
+.TP 5
+\fBcurs_sp_funcs\fP(3X) - curses screen-pointer extension
+.TP 5
+\fBcurs_threads\fP(3X) - curses thread support
+.TP 5
+\fBcurs_trace\fP(3X) - curses debugging routines
+.RE
.SH RETURN VALUE
Routines that return an integer return \fBERR\fR upon failure and an
integer value other than \fBERR\fR upon successful completion, unless
otherwise noted in the routine descriptions.
.PP
As a general rule, routines check for null pointers passed as parameters,
and handle this as an error.
.PP
All macros return the value of the \fBw\fR version, except \fBsetscrreg\fR,
\fBwsetscrreg\fR, \fBgetyx\fR, \fBgetbegyx\fR, and \fBgetmaxyx\fR.
The return values of
\fBsetscrreg\fR,
\fBwsetscrreg\fR,
\fBgetyx\fR,
\fBgetbegyx\fR, and
\fBgetmaxyx\fR are undefined (i.e., these should not be used as the
right-hand side of assignment statements).
.PP
+Functions with a \*(``mv\*('' prefix first perform a cursor movement using
+\fBwmove\fP, and return an error if the position is outside the window,
+or if the window pointer is null.
+Most \*(``mv\*(''-prefixed functions
+(except variadic functions such as \fBmvprintw\fP)
+are provided both as macros and functions.
+.PP
Routines that return pointers return \fBNULL\fR on error.
.SH ENVIRONMENT
.PP
The following environment symbols are useful for customizing the
runtime behavior of the \fBncurses\fR library.
The most important ones have been already discussed in detail.
.SS CC command-character
.PP
When set, change occurrences of the command_character
(i.e., the \fBcmdch\fP capability)
of the loaded terminfo entries to the value of this variable.
Very few terminfo entries provide this feature.
.PP
Because this name is also used in development environments to represent
the C compiler's name, \fBncurses\fR ignores it if it does not happen to
be a single character.
.SS BAUDRATE
.PP
The debugging library checks this environment variable when the application
has redirected output to a file.
The variable's numeric value is used for the baudrate.
If no value is found, \fBncurses\fR uses 9600.
This allows testers to construct repeatable test-cases
that take into account costs that depend on baudrate.
.SS COLUMNS
.PP
Specify the width of the screen in characters.
Applications running in a windowing environment usually are able to
obtain the width of the window in which they are executing.
If neither the \fBCOLUMNS\fP value nor the terminal's screen size is available,
\fBncurses\fR uses the size which may be specified in the terminfo database
(i.e., the \fBcols\fR capability).
.PP
It is important that your application use a correct size for the screen.
This is not always possible because your application may be
running on a host which does not honor NAWS (Negotiations About Window
Size), or because you are temporarily running as another user.
However, setting \fBCOLUMNS\fP and/or \fBLINES\fP overrides the library's
use of the screen size obtained from the operating system.
.PP
Either \fBCOLUMNS\fP or \fBLINES\fP symbols may be specified independently.
This is mainly useful to circumvent legacy misfeatures of terminal descriptions,
e.g., xterm which commonly specifies a 65 line screen.
For best results, \fBlines\fR and \fBcols\fR should not be specified in
a terminal description for terminals which are run as emulations.
.PP
Use the \fBuse_env\fR function to disable all use of external environment
(but not including system calls) to determine the screen size.
Use the \fBuse_tioctl\fR function to update \fBCOLUMNS\fP or \fBLINES\fP
to match the screen size obtained from system calls or the terminal database.
.SS ESCDELAY
.PP
Specifies the total time, in milliseconds, for which ncurses will
await a character sequence, e.g., a function key.
The default value, 1000 milliseconds, is enough for most uses.
However, it is made a variable to accommodate unusual applications.
.PP
The most common instance where you may wish to change this value
is to work with slow hosts, e.g., running on a network.
If the host cannot read characters rapidly enough, it will have the same
effect as if the terminal did not send characters rapidly enough.
The library will still see a timeout.
.PP
Note that xterm mouse events are built up from character sequences
received from the xterm.
If your application makes heavy use of multiple-clicking, you may
wish to lengthen this default value because the timeout applies
to the composed multi-click event as well as the individual clicks.
.PP
In addition to the environment variable,
this implementation provides a global variable with the same name.
Portable applications should not rely upon the presence of ESCDELAY
in either form,
but setting the environment variable rather than the global variable
does not create problems when compiling an application.
.SS HOME
Tells \fBncurses\fR where your home directory is.
That is where it may read and write auxiliary terminal descriptions:
.NS
$HOME/.termcap
$HOME/.terminfo
.NE
.SS LINES
.PP
Like COLUMNS, specify the height of the screen in characters.
See COLUMNS for a detailed description.
.SS MOUSE_BUTTONS_123
.PP
This applies only to the OS/2 EMX port.
It specifies the order of buttons on the mouse.
OS/2 numbers a 3-button mouse inconsistently from other
platforms:
.NS
1 = left
.br
2 = right
.br
3 = middle.
.NE
.PP
This variable lets you customize the mouse.
The variable must be three numeric digits 1\-3 in any order, e.g., 123 or 321.
If it is not specified, \fBncurses\fR uses 132.
.SS NCURSES_ASSUMED_COLORS
.PP
Override the compiled-in assumption that the
terminal's default colors are white-on-black
(see \fBdefault_colors\fR(3X)).
You may set the foreground and background color values with this environment
variable by proving a 2-element list: foreground,background.
For example, to tell ncurses to not assume anything
about the colors, set this to "\-1,\-1".
To make it green-on-black, set it to "2,0".
Any positive value from zero to the terminfo \fBmax_colors\fR value is allowed.
.SS NCURSES_CONSOLE2
This applies only to the MinGW port of ncurses.
.PP
The \fBConsole2\fP program's handling of the Microsoft Console API call
\fBCreateConsoleScreenBuffer\fP is defective.
Applications which use this will hang.
However, it is possible to simulate the action of this call by
mapping coordinates,
explicitly saving and restoring the original screen contents.
Setting the environment variable \fBNCGDB\fP has the same effect.
.SS NCURSES_GPM_TERMS
.PP
This applies only to ncurses configured to use the GPM interface.
.PP
If present,
the environment variable is a list of one or more terminal names
against which the \fBTERM\fP environment variable is matched.
Setting it to an empty value disables the GPM interface;
using the built-in support for xterm, etc.
.PP
If the environment variable is absent,
ncurses will attempt to open GPM if \fBTERM\fP contains \*(``linux\*(''.
.SS NCURSES_NO_HARD_TABS
.PP
\fBNcurses\fP may use tabs as part of the cursor movement optimization.
In some cases,
your terminal driver may not handle these properly.
Set this environment variable to disable the feature.
You can also adjust your \fBstty\fP settings to avoid the problem.
.SS NCURSES_NO_MAGIC_COOKIE
.PP
Some terminals use a magic-cookie feature which requires special handling
to make highlighting and other video attributes display properly.
You can suppress the highlighting entirely for these terminals by
setting this environment variable.
.SS NCURSES_NO_PADDING
.PP
Most of the terminal descriptions in the terminfo database are written
for real \*(``hardware\*('' terminals.
Many people use terminal emulators
which run in a windowing environment and use curses-based applications.
Terminal emulators can duplicate
all of the important aspects of a hardware terminal, but they do not
have the same limitations.
The chief limitation of a hardware terminal from the standpoint
of your application is the management of dataflow, i.e., timing.
Unless a hardware terminal is interfaced into a terminal concentrator
(which does flow control),
it (or your application) must manage dataflow, preventing overruns.
The cheapest solution (no hardware cost)
is for your program to do this by pausing after
operations that the terminal does slowly, such as clearing the display.
.PP
As a result, many terminal descriptions (including the vt100)
have delay times embedded.
You may wish to use these descriptions,
but not want to pay the performance penalty.
.PP
Set the NCURSES_NO_PADDING environment variable to disable all but mandatory
padding.
Mandatory padding is used as a part of special control
sequences such as \fIflash\fR.
.SS NCURSES_NO_SETBUF
This setting is obsolete.
Before changes
.RS 3
.bP
started with 5.9 patch 20120825
and
.bP
continued
though 5.9 patch 20130126
.RE
.PP
\fBncurses\fR enabled buffered output during terminal initialization.
This was done (as in SVr4 curses) for performance reasons.
For testing purposes, both of \fBncurses\fR and certain applications,
this feature was made optional.
Setting the NCURSES_NO_SETBUF variable
disabled output buffering, leaving the output in the original (usually
line buffered) mode.
.PP
In the current implementation,
ncurses performs its own buffering and does not require this workaround.
It does not modify the buffering of the standard output.
.PP
The reason for the change was to make the behavior for interrupts and
other signals more robust.
One drawback is that certain nonconventional programs would mix
ordinary stdio calls with ncurses calls and (usually) work.
This is no longer possible since ncurses is not using
the buffered standard output but its own output (to the same file descriptor).
As a special case, the low-level calls such as \fBputp\fP still use the
standard output.
But high-level curses calls do not.
.SS NCURSES_NO_UTF8_ACS
.PP
During initialization, the \fBncurses\fR library
checks for special cases where VT100 line-drawing (and the corresponding
alternate character set capabilities) described in the terminfo are known
to be missing.
Specifically, when running in a UTF\-8 locale,
the Linux console emulator and the GNU screen program ignore these.
Ncurses checks the \fBTERM\fP environment variable for these.
For other special cases, you should set this environment variable.
Doing this tells ncurses to use Unicode values which correspond to
the VT100 line-drawing glyphs.
That works for the special cases cited,
and is likely to work for terminal emulators.
.PP
When setting this variable, you should set it to a nonzero value.
Setting it to zero (or to a nonnumber)
disables the special check for \*(``linux\*('' and \*(``screen\*(''.
.PP
As an alternative to the environment variable,
ncurses checks for an extended terminfo capability \fBU8\fP.
This is a numeric capability which can be compiled using \fB@TIC@\ \-x\fP.
For example
.RS 3
.ft CW
.sp
.nf
# linux console, if patched to provide working
# VT100 shift-in/shift-out, with corresponding font.
linux-vt100|linux console with VT100 line-graphics,
U8#0, use=linux,
.sp
# uxterm with vt100Graphics resource set to false
xterm-utf8|xterm relying on UTF-8 line-graphics,
U8#1, use=xterm,
.fi
.ft
.RE
.PP
The name \*(``U8\*('' is chosen to be two characters,
to permit it to be used by applications that use ncurses'
termcap interface.
.SS NCURSES_TRACE
.PP
During initialization, the \fBncurses\fR debugging library
checks the NCURSES_TRACE environment variable.
If it is defined, to a numeric value, \fBncurses\fR calls the \fBtrace\fR
function, using that value as the argument.
.PP
The argument values, which are defined in \fBcurses.h\fR, provide several
types of information.
When running with traces enabled, your application will write the
file \fBtrace\fR to the current directory.
.PP
See \fBcurs_trace\fP(3X) for more information.
.SS TERM
.PP
Denotes your terminal type.
Each terminal type is distinct, though many are similar.
.PP
\fBTERM\fP is commonly set by terminal emulators to help
applications find a workable terminal description.
Some of those choose a popular approximation, e.g.,
\*(``ansi\*('', \*(``vt100\*('', \*(``xterm\*('' rather than an exact fit.
Not infrequently, your application will have problems with that approach,
e.g., incorrect function-key definitions.
.PP
If you set \fBTERM\fP in your environment,
it has no effect on the operation of the terminal emulator.
It only affects the way applications work within the terminal.
Likewise, as a general rule (\fBxterm\fP being a rare exception),
terminal emulators which allow you to
specify \fBTERM\fP as a parameter or configuration value do
not change their behavior to match that setting.
.SS TERMCAP
If the \fBncurses\fR library has been configured with \fItermcap\fR
support, \fBncurses\fR will check for a terminal's description in
termcap form if it is not available in the terminfo database.
.PP
The \fBTERMCAP\fP environment variable contains
either a terminal description (with newlines stripped out),
or a file name telling where the information denoted by
the \fBTERM\fP environment variable exists.
In either case, setting it directs \fBncurses\fR to ignore
the usual place for this information, e.g., /etc/termcap.
.SS TERMINFO
.PP
\fBncurses\fP can be configured to read from multiple terminal databases.
The \fBTERMINFO\fP variable overrides the location for
the default terminal database.
Terminal descriptions (in terminal format) are stored in terminal databases:
.bP
Normally these are stored in a directory tree,
using subdirectories named by the first letter of the terminal names therein.
.IP
This is the scheme used in System V, which legacy Unix systems use,
and the \fBTERMINFO\fP variable is used by \fIcurses\fP applications on those
systems to override the default location of the terminal database.
.bP
If \fBncurses\fP is built to use hashed databases,
then each entry in this list may be the path of a hashed database file, e.g.,
.NS
/usr/share/terminfo.db
.NE
.IP
rather than
.NS
/usr/share/terminfo/
.NE
.IP
The hashed database uses less disk-space and is a little faster than the
directory tree.
However,
some applications assume the existence of the directory tree,
reading it directly
rather than using the terminfo library calls.
.bP
If \fBncurses\fP is built with a support for reading termcap files
directly, then an entry in this list may be the path of a termcap file.
.bP
If the \fBTERMINFO\fP variable begins with
\*(``hex:\*('' or \*(``b64:\*('',
\fBncurses\fP uses the remainder of that variable as a compiled terminal
description.
You might produce the base64 format using \fBinfocmp\fP(1M):
.NS
TERMINFO="$(infocmp -0 -Q2 -q)"
export TERMINFO
.NE
.IP
The compiled description is used if it corresponds to the terminal identified
by the \fBTERM\fP variable.
.PP
Setting \fBTERMINFO\fP is the simplest,
but not the only way to set location of the default terminal database.
The complete list of database locations in order follows:
.RS 3
.bP
the last terminal database to which \fBncurses\fR wrote,
if any, is searched first
.bP
the location specified by the TERMINFO environment variable
.bP
$HOME/.terminfo
.bP
locations listed in the TERMINFO_DIRS environment variable
.bP
one or more locations whose names are configured and compiled into the
ncurses library, i.e.,
.RS 3
.bP
@TERMINFO_DIRS@ (corresponding to the TERMINFO_DIRS variable)
.bP
@TERMINFO@ (corresponding to the TERMINFO variable)
.RE
.RE
.PP
.SS TERMINFO_DIRS
.PP
Specifies a list of locations to search for terminal descriptions.
Each location in the list is a terminal database as described in
the section on the \fBTERMINFO\fP variable.
The list is separated by colons (i.e., ":") on Unix, semicolons on OS/2 EMX.
.PP
There is no corresponding feature in System V terminfo;
it is an extension developed for \fBncurses\fP.
.SS TERMPATH
.PP
If \fBTERMCAP\fP does not hold a file name then \fBncurses\fR checks
the \fBTERMPATH\fP environment variable.
This is a list of filenames separated by spaces or colons (i.e., ":") on Unix,
semicolons on OS/2 EMX.
.PP
If the \fBTERMPATH\fP environment variable is not set,
\fBncurses\fR looks in the files
.NS
/etc/termcap, /usr/share/misc/termcap and $HOME/.termcap,
.NE
.PP
in that order.
.PP
The library may be configured to disregard the following variables when the
current user is the superuser (root), or if the application uses setuid or
setgid permissions:
.NS
$TERMINFO, $TERMINFO_DIRS, $TERMPATH, as well as $HOME.
.NE
.SH ALTERNATE CONFIGURATIONS
.PP
Several different configurations are possible,
depending on the configure script options used when building \fBncurses\fP.
There are a few main options whose effects are visible to the applications
developer using \fBncurses\fP:
.TP 5
\-\-disable\-overwrite
The standard include for \fBncurses\fP is as noted in \fBSYNOPSIS\fP:
.NS
\fB#include <curses.h>\fR
.NE
.IP
This option is used to avoid filename conflicts when \fBncurses\fP
is not the main implementation of curses of the computer.
If \fBncurses\fP is installed disabling overwrite, it puts its headers in
a subdirectory, e.g.,
.NS
\fB#include <ncurses/curses.h>\fR
.NE
.IP
It also omits a symbolic link which would allow you to use \fB\-lcurses\fP
to build executables.
.TP 5
\-\-enable\-widec
The configure script renames the library and
(if the \fB\-\-disable\-overwrite\fP option is used)
puts the header files in a different subdirectory.
All of the library names have a \*(``w\*('' appended to them,
i.e., instead of
.NS
\fB\-lncurses\fR
.NE
.IP
you link with
.NS
\fB\-lncursesw\fR
.NE
.IP
You must also enable the wide-character features in the header file
when compiling for the wide-character library
to use the extended (wide-character) functions.
The symbol which enables these features has changed since XSI Curses, Issue 4:
.RS
.bP
Originally, the wide-character feature required the symbol
\fB_XOPEN_SOURCE_EXTENDED\fP
but that was only valid for XPG4 (1996).
.bP
Later, that was deemed conflicting with \fB_XOPEN_SOURCE\fP defined to 500.
.bP
As of mid-2018,
none of the features in this implementation require a \fB_XOPEN_SOURCE\fP
feature greater than 600.
However, X/Open Curses, Issue 7 (2009) recommends defining it to 700.
.bP
Alternatively, you can enable the feature by defining \fBNCURSES_WIDECHAR\fP
with the caveat that some other header file than \fBcurses.h\fP
may require a specific value for \fB_XOPEN_SOURCE\fP
(or a system-specific symbol).
.RE
.IP
The \fBcurses.h\fP file which is installed for the wide-character
library is designed to be compatible with the normal library's header.
Only the size of the \fBWINDOW\fP structure differs, and very few
applications require more than a pointer to \fBWINDOW\fPs.
.IP
If the headers are installed allowing overwrite,
the wide-character library's headers should be installed last,
to allow applications to be built using either library
from the same set of headers.
.TP 5
\-\-with\-pthread
The configure script renames the library.
All of the library names have a \*(``t\*('' appended to them
(before any \*(``w\*('' added by \fB\-\-enable\-widec\fP).
.IP
The global variables such as \fBLINES\fP are replaced by macros to
allow read-only access.
At the same time, setter-functions are provided to set these values.
Some applications (very few) may require changes to work with this convention.
.TP 5
\-\-with\-shared
.TP
\-\-with\-normal
.TP
\-\-with\-debug
.TP
\-\-with\-profile
The shared and normal (static) library names differ by their suffixes,
e.g., \fBlibncurses.so\fP and \fBlibncurses.a\fP.
The debug and profiling libraries add a \*(``_g\*(''
and a \*(``_p\*('' to the root names respectively,
e.g., \fBlibncurses_g.a\fP and \fBlibncurses_p.a\fP.
.TP 5
+\-\-with\-termlib
+Low-level functions which do not depend upon whether the library
+supports wide-characters, are provided in the tinfo library.
+.IP
+By doing this, it is possible to share the tinfo library between
+wide/normal configurations as well as reduce the size of the library
+when only low-level functions are needed.
+.IP
+Those functions are described in these pages:
+.RS
+.bP
+\fBcurs_extend\fP(3X) \- miscellaneous curses extensions
+.bP
+\fBcurs_inopts\fR(3X) \- \fBcurses\fR input options
+.bP
+\fBcurs_kernel\fR(3X) \- low-level \fBcurses\fR routines
+.bP
+\fBcurs_termattrs\fR(3X) \- \fBcurses\fR environment query routines
+.bP
+\fBcurs_termcap\fR(3X) \- \fBcurses\fR emulation of termcap
+.bP
+\fBcurs_terminfo\fR(3X) \- \fBcurses\fR interfaces to terminfo database
+.bP
+\fBcurs_util\fR(3X) \- miscellaneous \fBcurses\fR utility routines
+.RE
+.TP 5
\-\-with\-trace
The \fBtrace\fP function normally resides in the debug library,
but it is sometimes useful to configure this in the shared library.
Configure scripts should check for the function's existence rather
than assuming it is always in the debug library.
.SH FILES
.TP 5
@DATADIR@/tabset
directory containing initialization files for the terminal capability database
@TERMINFO@
terminal capability database
.SH SEE ALSO
\fBterminfo\fR(\*n) and related pages whose names begin
\*(``curs_\*('' for detailed routine descriptions.
.br
\fBcurs_variables\fR(3X)
.br
\fBuser_caps\fP(5) for user-defined capabilities
.SH EXTENSIONS
The \fBncurses\fR library can be compiled with an option (\fB\-DUSE_GETCAP\fR)
that falls back to the old-style /etc/termcap file if the terminal setup code
cannot find a terminfo entry corresponding to \fBTERM\fR.
Use of this feature
is not recommended, as it essentially includes an entire termcap compiler in
the \fBncurses\fR startup code, at significant cost in core and startup cycles.
.PP
The \fBncurses\fR library includes facilities for capturing mouse events on
certain terminals (including xterm).
See the \fBcurs_mouse\fR(3X)
manual page for details.
.PP
The \fBncurses\fR library includes facilities for responding to window
resizing events, e.g., when running in an xterm.
See the \fBresizeterm\fR(3X)
and \fBwresize\fR(3X) manual pages for details.
In addition, the library may be configured with a \fBSIGWINCH\fP handler.
.PP
The \fBncurses\fR library extends the fixed set of function key capabilities
of terminals by allowing the application designer to define additional
key sequences at runtime.
See the \fBdefine_key\fR(3X)
\fBkey_defined\fR(3X),
and \fBkeyok\fR(3X) manual pages for details.
.PP
The \fBncurses\fR library can exploit the capabilities of terminals which
implement the ISO\-6429 SGR 39 and SGR 49 controls, which allow an application
to reset the terminal to its original foreground and background colors.
From the users' perspective, the application is able to draw colored
text on a background whose color is set independently, providing better
control over color contrasts.
See the \fBdefault_colors\fR(3X) manual page for details.
.PP
The \fBncurses\fR library includes a function for directing application output
to a printer attached to the terminal device.
See the \fBcurs_print\fR(3X) manual page for details.
.SH PORTABILITY
The \fBncurses\fR library is intended to be BASE-level conformant with XSI
Curses.
The EXTENDED XSI Curses functionality
(including color support) is supported.
.PP
A small number of local differences (that is, individual differences between
the XSI Curses and \fBncurses\fR calls) are described in \fBPORTABILITY\fR
sections of the library man pages.
+.SS Error checking
+.PP
+In many cases, X/Open Curses is vague about error conditions,
+omitting some of the SVr4 documentation.
.PP
Unlike other implementations, this one checks parameters such as pointers
to WINDOW structures to ensure they are not null.
The main reason for providing this behavior is to guard against programmer
error.
The standard interface does not provide a way for the library
to tell an application which of several possible errors were detected.
Relying on this (or some other) extension will adversely affect the
portability of curses applications.
+.SS Extensions versus portability
.PP
-This implementation also contains several extensions:
+Most of the extensions provided by ncurses have not been standardized.
+Some have been incorporated into other implementations, such as
+PDCurses or NetBSD curses.
+Here are a few to consider:
.bP
The routine \fBhas_key\fR is not part of XPG4, nor is it present in SVr4.
See the \fBcurs_getch\fR(3X) manual page for details.
.bP
The routine \fBslk_attr\fR is not part of XPG4, nor is it present in SVr4.
See the \fBcurs_slk\fR(3X) manual page for details.
.bP
The routines \fBgetmouse\fR, \fBmousemask\fR, \fBungetmouse\fR,
\fBmouseinterval\fR, and \fBwenclose\fR relating to mouse interfacing are not
part of XPG4, nor are they present in SVr4.
See the \fBcurs_mouse\fR(3X) manual page for details.
.bP
The routine \fBmcprint\fR was not present in any previous curses implementation.
See the \fBcurs_print\fR(3X) manual page for details.
.bP
The routine \fBwresize\fR is not part of XPG4, nor is it present in SVr4.
See the \fBwresize\fR(3X) manual page for details.
.bP
The WINDOW structure's internal details can be hidden from application
programs.
See \fBcurs_opaque\fR(3X) for the discussion of \fBis_scrollok\fR, etc.
.bP
This implementation can be configured to provide rudimentary support
for multi-threaded applications.
See \fBcurs_threads\fR(3X) for details.
.bP
This implementation can also be configured to provide a set of functions which
improve the ability to manage multiple screens.
See \fBcurs_sp_funcs\fR(3X) for details.
+.SS Padding differences
.PP
In historic curses versions, delays embedded in the capabilities \fBcr\fR,
\fBind\fR, \fBcub1\fR, \fBff\fR and \fBtab\fR activated corresponding delay
bits in the UNIX tty driver.
In this implementation, all padding is done by sending NUL bytes.
This method is slightly more expensive, but narrows the interface
to the UNIX kernel significantly and increases the package's portability
correspondingly.
-.SH NOTES
+.SS Header files
The header file \fB<curses.h>\fR automatically includes the header files
\fB<stdio.h>\fR and \fB<unctrl.h>\fR.
.PP
+X/Open Curses has more to say,
+but does not finish the story:
+.RS 4
+.PP
+The inclusion of <curses.h> may make visible all symbols
+from the headers <stdio.h>, <term.h>, <termios.h>, and <wchar.h>.
+.RE
+.PP
+Here is a more complete story:
+.bP
+Starting with BSD curses, all implementations have included <stdio.h>.
+.IP
+BSD curses included <curses.h> and <unctrl.h> from an internal header
+"curses.ext" ("ext" was a short name for \fIexterns\fP).
+.IP
+BSD curses used <stdio.h> internally (for \fBprintw\fP and \fBscanw\fP),
+but nothing in <curses.h> itself relied upon <stdio.h>.
+.bP
+SVr2 curses added \fBnewterm\fP(3X), which relies upon <stdio.h>.
+That is, the function prototype uses \fBFILE\fP.
+.IP
+SVr4 curses added \fBputwin\fP and \fBgetwin\fP, which also use <stdio.h>.
+.IP
+X/Open Curses documents all three of these functions.
+.IP
+SVr4 curses and X/Open Curses do not require the developer to
+include <stdio.h> before including <curses.h>.
+Both document curses showing <curses.h> as the only required header.
+.IP
+As a result, standard <curses.h> will always include <stdio.h>.
+.bP
+X/Open Curses is inconsistent with respect to SVr4 regarding <unctrl.h>.
+.IP
+As noted in \fBcurs_util\fP(3X), ncurses includes <unctrl.h> from
+<curses.h> (like SVr4).
+.bP
+X/Open's comments about <term.h> and <termios.h> may refer to HP-UX and AIX:
+.IP
+HP-UX curses includes <term.h> from <curses.h>
+to declare \fBsetupterm\fP in curses.h,
+but ncurses (and Solaris curses) do not.
+.IP
+AIX curses includes <term.h> and <termios.h>.
+Again, ncurses (and Solaris curses) do not.
+.bP
+X/Open says that <curses.h> \fImay\fP include <term.h>,
+but there is no requirement that it do that.
+.IP
+Some programs use functions declared in both <curses.h> and <term.h>,
+and must include both headers in the same module.
+Very old versions of AIX curses required including <curses.h>
+before including <term.h>.
+.IP
+Because ncurses header files include the headers needed to
+define datatypes used in the headers,
+ncurses header files can be included in any order.
+But for portability, you should include <curses.h> before <term.h>.
+.bP
+X/Open Curses says \fI"may make visible"\fP
+because including a header file does not necessarily make all symbols
+in it visible (there are ifdef's to consider).
+.IP
+For instance, in ncurses <wchar.h> \fImay\fP be included if
+the proper symbol is defined, and if ncurses is configured for
+wide-character support.
+If the header is included, its symbols may be made visible.
+That depends on the value used for \fB_XOPEN_SOURCE\fP
+feature test macro.
+.bP
+X/Open Curses documents one required header,
+in a special case: <stdarg.h> before <curses.h> to prototype
+the \fBvw_printw\fP and \fBvw_scanw\fP functions
+(as well as the obsolete
+the \fBvwprintw\fP and \fBvwscanw\fP functions).
+Each of those uses a \fBva_list\fP parameter.
+.IP
+The two obsolete functions were introduced in SVr3.
+The other functions were introduced in X/Open Curses.
+In between, SVr4 curses provided for the possibility that
+an application might include either <varargs.h> or <stdarg.h>.
+Initially, that was done by using \fBvoid*\fP for the \fBva_list\fP
+parameter.
+Later, a special type (defined in <stdio.h>) was introduced,
+to allow for compiler type-checking.
+That special type is always available,
+because <stdio.h> is always included by <curses.h>.
+.IP
+None of the X/Open Curses implementations require an application
+to include <stdarg.h> before <curses.h> because they either
+have allowed for a special type, or (like ncurses) include <stdarg.h>
+directly to provide a portable interface.
+.SH NOTES
+.PP
If standard output from a \fBncurses\fR program is re-directed to something
which is not a tty, screen updates will be directed to standard error.
This was an undocumented feature of AT&T System V Release 3 curses.
.SH AUTHORS
Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey.
Based on pcurses by Pavel Curtis.
diff --git a/contrib/ncurses/man/new_pair.3x b/contrib/ncurses/man/new_pair.3x
index 3f1e3ac6b00d..c22523887ac6 100644
--- a/contrib/ncurses/man/new_pair.3x
+++ b/contrib/ncurses/man/new_pair.3x
@@ -1,166 +1,166 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
.\" Author: Thomas E. Dickey
.\"
-.\" $Id: new_pair.3x,v 1.14 2020/02/02 23:34:34 tom Exp $
+.\" $Id: new_pair.3x,v 1.15 2020/10/17 23:54:50 tom Exp $
.TH new_pair 3X ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.de NS
.ie n .sp
.el .sp .5
.ie n .in +4
.el .in +2
.nf
.ft C \" Courier
..
.de NE
.fi
.ft R
.ie n .in -4
.el .in -2
..
.SH NAME
\fBalloc_pair\fP,
\fBfind_pair\fP,
\fBfree_pair\fP \- new curses color-pair functions
.SH SYNOPSIS
\fB#include <curses.h>\fP
.sp
-\fBint alloc_pair(int fg, int bg);\fP
+\fBint alloc_pair(int \fP\fIfg\fP\fB, int \fP\fIbg\fP\fB);\fP
.br
-\fBint find_pair(int fg, int bg);\fP
+\fBint find_pair(int \fP\fIfg\fP\fB, int \fP\fIbg\fP\fB);\fP
.br
-\fBint free_pair(int pair);\fP
+\fBint free_pair(int \fP\fIpair\fP\fB);\fP
.SH DESCRIPTION
These functions are an extension to the curses library.
They permit an application to dynamically allocate a color pair using
the foreground/background colors rather than assign a fixed color pair number,
and return an unused pair to the pool.
.PP
The number of colors may be related to the number of possible color
pairs for a given terminal, or it may not:
.bP
While almost all terminals allow setting the color \fIattributes\fP
independently,
it is unlikely that your terminal allows you to modify the attributes
of a given character cell without rewriting it.
That is, the foreground and background colors are applied as a pair.
.bP
Color pairs are the curses library's way of managing a color palette
on a terminal.
If the library does not keep track of the \fIcombinations\fP of
colors which are displayed, it will be inefficient.
.bP
For simple terminal emulators
with only a few dozen color combinations,
it is convenient to use the maximum number of combinations
as the limit on color pairs:
.NS
\fBCOLORS\fP\fI * \fP\fBCOLORS\fP
.NE
.bP
Terminals which support \fIdefault colors\fP distinct
from \*(``ANSI colors\*(''
add to the possible combinations, producing this total:
.NS
\fI( \fP\fBCOLORS\fP\fI + 1 ) * ( \fP\fBCOLORS\fP\fI + 1 )\fP
.NE
.bP
An application might use up to a few dozen color pairs to
implement a predefined color scheme.
.IP
Beyond that lies in the realm of programs using the foreground
and background colors for \*(``ASCII art\*(''
(or some other non-textual application).
.IP
Also beyond those few dozen pairs, the required size for a table
to represent the combinations grows rapidly with an increasing number of colors.
.IP
These functions allow a developer to let the screen library
manage color pairs.
.SS alloc_pair
The \fBalloc_pair\fP function accepts parameters for
foreground and background color, and
checks if that color combination is already associated with a color pair.
.bP
If the combination already exists,
\fBalloc_pair\fP returns the existing pair.
.bP
If the combination does not exist,
\fBalloc_pair\fP allocates a new color pair and returns that.
.bP
If the table fills up, \fBalloc_pair\fP discards the least-recently
allocated entry using \fBfree_pair\fP and allocates a new color pair.
.PP
All of the color pairs are allocated from a table of possible color pairs.
The size of the table is determined by the terminfo \fIpairs\fP capability.
The table is shared with \fBinit_pair\fP;
in fact \fBalloc_pair\fP calls \fBinit_pair\fP after
updating the ncurses library's fast index to the colors versus color pairs.
.SS find_pair
The \fBfind_pair\fP function accepts parameters for
foreground and background color, and
checks if that color combination is already associated with a color pair,
returning the pair number if it has been allocated.
Otherwise it returns \-1.
.SS free_pair
Marks the given color pair as unused,
i.e., like color pair 0.
.SH RETURN VALUE
.PP
The \fBalloc_pair\fP function returns a color pair number in the range
1 through \fBCOLOR_PAIRS\fP\-1, unless it encounters an error updating
its fast index to the color pair values, preventing it from allocating
a color pair.
In that case, it returns \-1.
.PP
The \fBfind_pair\fP function returns a color pair number if the
given color combination has been associated with a color pair,
or \-1 if not.
.PP
Likewise, \fBfree_pair\fP returns \fBOK\fP unless it encounters an
error updating the fast index or if no such color pair is in use.
.SH PORTABILITY
These routines are specific to ncurses.
They were not supported on
Version 7, BSD or System V implementations.
It is recommended that
any code depending on them be conditioned using NCURSES_VERSION.
.SH SEE ALSO
\fBcurs_color\fR(3X).
.SH AUTHOR
Thomas Dickey.
diff --git a/contrib/ncurses/man/resizeterm.3x b/contrib/ncurses/man/resizeterm.3x
index 5f2bc9350ff7..ae5106e1d0b0 100644
--- a/contrib/ncurses/man/resizeterm.3x
+++ b/contrib/ncurses/man/resizeterm.3x
@@ -1,143 +1,143 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
.\" Author: Thomas E. Dickey 1996-on
.\"
-.\" $Id: resizeterm.3x,v 1.27 2020/02/02 23:34:34 tom Exp $
+.\" $Id: resizeterm.3x,v 1.28 2020/10/17 23:55:41 tom Exp $
.TH resizeterm 3X ""
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fBis_term_resized\fR,
\fBresize_term\fR,
\fBresizeterm\fR \- change the curses terminal size
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBbool is_term_resized(int lines, int columns);\fR
+\fBbool is_term_resized(int \fP\fIlines\fP\fB, int \fP\fIcolumns\fP\fB);\fR
.br
-\fBint resize_term(int lines, int columns);\fR
+\fBint resize_term(int \fP\fIlines\fP\fB, int \fP\fIcolumns\fP\fB);\fR
.br
-\fBint resizeterm(int lines, int columns);\fR
+\fBint resizeterm(int \fP\fIlines\fP\fB, int \fP\fIcolumns\fP\fB);\fR
.SH DESCRIPTION
.PP
This is an extension to the curses library.
It provides callers with a hook into the \fBncurses\fR data to resize windows,
primarily for use by programs running in an X Window terminal (e.g., xterm).
.SS resizeterm
.PP
The function \fBresizeterm\fR resizes the standard and current windows
to the specified dimensions, and adjusts other bookkeeping data used by
the \fBncurses\fR library that record the window dimensions
such as the \fBLINES\fP and \fBCOLS\fP variables.
.SS resize_term
.PP
Most of the work is done by the inner function \fBresize_term\fR.
The outer function \fBresizeterm\fR adds bookkeeping
for the \fBSIGWINCH\fP handler,
as well as repainting the soft-key area (see \fBslk_touch\fP(3X)).
.PP
When resizing the windows,
\fBresize_term\fR blank-fills the areas that are extended.
The calling application should fill in these areas with appropriate data.
.PP
The \fBresize_term\fR function attempts to resize all windows.
However, due to the calling convention of pads,
it is not possible to resize these
without additional interaction with the application.
.PP
When resizing windows, \fBresize_term\fR recursively adjusts subwindows,
keeping them within the updated parent window's limits.
If a top-level window happens to extend to the screen's limits,
then on resizing the window, \fBresize_term\fR will keep the window
extending to the corresponding limit, regardless of whether the
screen has shrunk or grown.
.SS is_term_resized
.PP
A support function \fBis_term_resized\fR is provided so that applications
can check if the \fBresize_term\fR function would modify the window structures.
It returns \fBTRUE\fP if the windows would be modified,
and \fBFALSE\fP otherwise.
.SH RETURN VALUE
Except as noted, these functions return
the integer \fBERR\fR upon failure and \fBOK\fR on success.
They will fail if either of the dimensions are less than or equal to zero,
or if an error occurs while (re)allocating memory for the windows.
.SH NOTES
While these functions are intended to be used to support a signal handler
(i.e., for \fBSIGWINCH\fP), care should be taken to avoid invoking them in a
context where \fBmalloc\fR or \fBrealloc\fR may have been interrupted,
since it uses those functions.
.PP
If ncurses is configured to supply its own \fBSIGWINCH\fP handler,
.bP
on receipt of a \fBSIGWINCH\fP, the handler sets a flag
.bP
which is tested in \fBwgetch\fP(3X) and \fBdoupdate\fP,
.bP
in turn, calling the \fBresizeterm\fR function,
.bP
which \fBungetch\fP's a \fBKEY_RESIZE\fR which
will be read on the next call to \fBwgetch\fR.
.IP
The \fBKEY_RESIZE\fP alerts an application that the screen size has changed,
and that it should repaint special features such as pads that cannot
be done automatically.
.IP
Calling \fBresizeterm\fP or \fBresize_term\fP
directly from a signal handler is unsafe.
This indirect method is used to provide a safe way to resize the ncurses
data structures.
.PP
If the environment variables \fBLINES\fP or \fBCOLUMNS\fP are set,
this overrides the library's use of the window size obtained from
the operating system.
Thus, even if a \fBSIGWINCH\fP is received,
no screen size change may be recorded.
.SH PORTABILITY
.PP
It is possible to resize the screen with SVr4 curses,
by
.bP
exiting curses with \fBendwin\fP(3X) and
.bP
resuming using \fBrefresh\fP(3X).
.PP
Doing that clears the screen and is visually distracting.
.PP
This extension of ncurses was introduced in mid-1995.
It was adopted in NetBSD curses (2001) and PDCurses (2003).
.SH SEE ALSO
\fBcurs_getch\fR(3X),
\fBcurs_variables\fR(3X),
\fBwresize\fR(3X).
.SH AUTHOR
Thomas Dickey (from an equivalent function written in 1988 for BSD curses).
diff --git a/contrib/ncurses/man/tabs.1 b/contrib/ncurses/man/tabs.1
index 9c891f1bfde6..eb7e659746dd 100644
--- a/contrib/ncurses/man/tabs.1
+++ b/contrib/ncurses/man/tabs.1
@@ -1,238 +1,238 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 2008-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: tabs.1,v 1.27 2020/02/02 23:34:34 tom Exp $
+.\" $Id: tabs.1,v 1.28 2020/12/19 21:50:22 tom Exp $
.TH @TABS@ 1 ""
.ds n 5
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.de NS
.ie n .sp
.el .sp .5
.ie n .in +4
.el .in +2
.nf
.ft C \" Courier
..
.de NE
.fi
.ft R
.ie n .in -4
.el .in -2
..
.SH NAME
\fB@TABS@\fR \- set tabs on a terminal
.SH SYNOPSIS
\fB@TABS@\fR [\fIoptions\fR]] \fI[tabstop-list]\fR
.SH DESCRIPTION
.PP
The \fB@TABS@\fP program clears and sets tab-stops on the terminal.
This uses the terminfo \fIclear_all_tabs\fP and \fIset_tab\fP capabilities.
If either is absent, \fB@TABS@\fP is unable to clear/set tab-stops.
The terminal should be configured to use hard tabs, e.g.,
.NS
stty tab0
.NE
.PP
Like \fB@CLEAR@\fR(1), \fB@TABS@\fR writes to the standard output.
You can redirect the standard output to a file (which prevents
\fB@TABS@\fR from actually changing the tabstops),
and later \fBcat\fP the file to the screen, setting tabstops at that point.
.PP
These are hardware tabs, which cannot be queried rapidly by applications
running in the terminal, if at all.
Curses and other full-screen applications may use hardware tabs
in optimizing their output to the terminal.
If the hardware tabstops differ from the information in the terminal
database, the result is unpredictable.
Before running curses programs,
you should either reset tab-stops to the standard interval
.NS
tabs -8
.NE
.PP
or use the \fB@RESET@\fP program,
since the normal initialization sequences do not ensure that tab-stops
are reset.
.SH OPTIONS
.SS General Options
.TP 5
.BI \-T "name"
Tell \fB@TABS@\fP which terminal type to use.
If this option is not given, \fB@TABS@\fP will use the \fB$TERM\fP
environment variable.
If that is not set, it will use the \fIansi+tabs\fP entry.
.TP 5
.B \-d
The debugging option shows a ruler line, followed by two data lines.
The first data line shows the expected tab-stops marked with asterisks.
The second data line shows the actual tab-stops, marked with asterisks.
.TP 5
.B \-n
This option tells \fB@TABS@\fP to check the options and run any debugging
option, but not to modify the terminal settings.
.TP
\fB\-V\fR
reports the version of ncurses which was used in this program, and exits.
.PP
The \fB@TABS@\fP program processes a single list of tab stops.
The last option to be processed which defines a list is the one that
determines the list to be processed.
.SS Implicit Lists
Use a single number as an option,
e.g., \*(``\fB\-5\fP\*('' to set tabs at the given
interval (in this case 1, 6, 11, 16, 21, etc.).
Tabs are repeated up to the right margin of the screen.
.PP
Use \*(``\fB\-0\fP\*('' to clear all tabs.
.PP
Use \*(``\fB\-8\fP\*('' to set tabs to the standard interval.
.SS Explicit Lists
An explicit list can be defined after the options
(this does not use a \*(``\-\*('').
The values in the list must be in increasing numeric order,
and greater than zero.
They are separated by a comma or a blank, for example,
.NS
tabs 1,6,11,16,21
.br
tabs 1 6 11 16 21
.NE
.PP
Use a \*(``+\*('' to treat a number
as an increment relative to the previous value,
e.g.,
.NS
tabs 1,+5,+5,+5,+5
.NE
.PP
which is equivalent to the 1,6,11,16,21 example.
.SS Predefined Tab-Stops
X/Open defines several predefined lists of tab stops.
.TP 5
.B \-a
Assembler, IBM S/370, first format
.TP 5
.B \-a2
Assembler, IBM S/370, second format
.TP 5
.B \-c
COBOL, normal format
.TP 5
.B \-c2
COBOL compact format
.TP 5
.B \-c3
COBOL compact format extended
.TP 5
.B \-f
FORTRAN
.TP 5
.B \-p
PL/I
.TP 5
.B \-s
SNOBOL
.TP 5
.B \-u
UNIVAC 1100 Assembler
.SH PORTABILITY
.PP
\fIIEEE Std 1003.1/The Open Group Base Specifications Issue 7\fP (POSIX.1-2008)
describes a \fBtabs\fP utility.
However
.bP
This standard describes a \fB+m\fP option, to set a terminal's left-margin.
Very few of the entries in the terminal database provide the
\fBsmgl\fP (\fBset_left_margin\fP) or
\fBsmglp\fP (\fBset_left_margin_parm\fP)
capability needed to support the feature.
.bP
There is no counterpart in X/Open Curses Issue 7 for this utility,
unlike \fB@TPUT@(1)\fP.
.PP
The \fB\-d\fP (debug) and \fB\-n\fP (no-op) options are extensions not provided
by other implementations.
.PP
A \fBtabs\fP utility appeared in PWB/Unix 1.0 (1977).
There was a reduced version of the \fBtabs\fP utility
in Unix 7th edition and in 3BSD (1979).
The latter supported a single \*(``\-n\*('' option
(to cause the first tab stop to be set on the left margin).
That option is not documented by POSIX.
.PP
The PWB/Unix \fBtabs\fP utility, which was included in System III (1980),
used built-in tables rather than the terminal database,
to support a half-dozen terminal types.
It also had built-in logic to support the left-margin,
as well as a feature for copying the tab settings from a file.
.PP
Later versions of Unix, e.g., SVr4,
added support for the terminal database,
but kept the tables, as a fallback.
In an earlier development effort,
the tab-stop initialization provided by \fBtset\fP (1982)
and incorporated into \fBtput\fP uses the terminal database,
.PP
POSIX documents no limits on the number of tab stops.
Documentation for other implementations states that there is a limit on the
number of tab stops
(e.g., 20 in PWB/Unix's \fBtabs\fP utility).
While some terminals may not accept an arbitrary number
of tab stops, this implementation will attempt to set tab stops up to the
right margin of the screen, if the given list happens to be that long.
.PP
The \fIRationale\fP section of the POSIX documentation goes into some
detail about the ways the committee considered redesigning the
\fBtabs\fP and \fBtput\fP utilities,
without proposing an improved solution.
It comments that
.RS 5
.PP
no known historical version of tabs supports the capability of setting
arbitrary tab stops.
.RE
.PP
However, the \fIExplicit Lists\fP described in this manual page
were implemented in PWB/Unix.
Those provide the capability of setting abitrary tab stops.
.SH SEE ALSO
-\fB@TSET@\fR(1),
\fB@INFOCMP@\fR(1M),
+\fB@TSET@\fR(1),
\fBcurses\fR(3X),
\fBterminfo\fR(\*n).
.PP
This describes \fBncurses\fR
version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@).
diff --git a/contrib/ncurses/man/term.5 b/contrib/ncurses/man/term.5
index 14e912a574c4..e9ae5bd0b908 100644
--- a/contrib/ncurses/man/term.5
+++ b/contrib/ncurses/man/term.5
@@ -1,379 +1,417 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: term.5,v 1.33 2020/02/02 23:34:34 tom Exp $
+.\" $Id: term.5,v 1.38 2020/07/25 21:56:02 tom Exp $
.TH term 5
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de NS
.ie n .sp
.el .sp .5
.ie n .in +4
.el .in +2
.nf
.ft C \" Courier
..
.de NE
.fi
.ft R
.ie n .in -4
.el .in -2
..
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.ds n 5
.ds d @TERMINFO@
.SH NAME
term \- format of compiled term file.
.SH SYNOPSIS
.B term
.SH DESCRIPTION
.SS STORAGE LOCATION
Compiled terminfo descriptions are placed under the directory \fB\*d\fP.
Two configurations are supported (when building the \fBncurses\fP libraries):
.TP 5
.B directory tree
A two-level scheme is used to avoid a linear search
of a huge \s-1UNIX\s+1 system directory: \fB\*d/c/name\fP where
.I name
is the name of the terminal, and
.I c
is the first character of
.IR name .
Thus,
.I act4
can be found in the file \fB\*d/a/act4\fP.
Synonyms for the same terminal are implemented by multiple
links to the same compiled file.
.TP 5
.B hashed database
Using Berkeley database, two types of records are stored:
the terminfo data in the same format as stored in a directory tree with
the terminfo's primary name as a key,
and records containing only aliases pointing to the primary name.
.IP
If built to write hashed databases,
\fBncurses\fP can still read terminfo databases organized as a directory tree,
but cannot write entries into the directory tree.
It can write (or rewrite) entries in the hashed database.
.IP
\fBncurses\fP distinguishes the two cases in the TERMINFO and TERMINFO_DIRS
environment variable by assuming a directory tree for entries that
correspond to an existing directory,
and hashed database otherwise.
.SS LEGACY STORAGE FORMAT
The format has been chosen so that it will be the same on all hardware.
An 8 or more bit byte is assumed, but no assumptions about byte ordering
or sign extension are made.
.PP
The compiled file is created with the \fB@TIC@\fP program,
and read by the routine \fBsetupterm\fP(3X).
The file is divided into six parts:
-the header,
-terminal names,
-boolean flags,
-numbers,
-strings,
-and
-string table.
+.RS 5
+.TP 3
+a) \fIheader\fP,
+.TP 3
+b) \fIterminal names\fP,
+.TP 3
+c) \fIboolean flags\fP,
+.TP 3
+d) \fInumbers\fP,
+.TP 3
+e) \fIstrings\fP, and
+.TP 3
+f) \fIstring table\fP.
+.RE
.PP
-The header section begins the file.
+The \fIheader\fP section begins the file.
This section contains six short integers in the format
described below.
These integers are
.RS 5
.TP 5
-(1) the magic number (octal 0432);
+(1) the \fImagic number\fP (octal 0432);
.TP 5
-(2) the size, in bytes, of the names section;
+(2) the size, in bytes, of the \fIterminal names\fP section;
.TP 5
-(3) the number of bytes in the boolean section;
+(3) the number of bytes in the \fIboolean flags\fP section;
.TP 5
-(4) the number of short integers in the numbers section;
+(4) the number of short integers in the \fInumbers\fP section;
.TP 5
-(5) the number of offsets (short integers) in the strings section;
+(5) the number of offsets (short integers) in the \fIstrings\fP section;
.TP 5
-(6) the size, in bytes, of the string table.
+(6) the size, in bytes, of the \fIstring table\fP.
.RE
.PP
-Short integers are stored in two 8-bit bytes.
+The capabilities in the
+\fIboolean flags\fP,
+\fInumbers\fP, and
+\fIstrings\fP
+sections are in the same order as the file <term.h>.
+.PP
+Short integers are signed, in the range \-32768 to 32767.
+They are stored as two 8-bit bytes.
The first byte contains the least significant 8 bits of the value,
and the second byte contains the most significant 8 bits.
(Thus, the value represented is 256*second+first.)
-The value \-1 is represented by the two bytes 0377, 0377; other negative
-values are illegal.
-This value generally
-means that the corresponding capability is missing from this terminal.
-Note that this format corresponds to the hardware of the \s-1VAX\s+1
+This format corresponds to the hardware of the \s-1VAX\s+1
and \s-1PDP\s+1-11 (that is, little-endian machines).
Machines where this does not correspond to the hardware must read the
integers as two bytes and compute the little-endian value.
.PP
-The terminal names section comes next.
+Numbers in a terminal description,
+whether they are entries in the \fInumbers\fP or \fIstrings\fP table,
+are positive integers.
+Boolean flags are treated as positive one-byte integers.
+In each case, those positive integers represent a terminal capability.
+The terminal compiler @TIC@ uses negative integers to handle the cases where
+a capability is not available:
+.bP
+If a capability is absent from this terminal,
+@TIC@ stores a \-1 in the corresponding table.
+.IP
+The integer value \-1 is represented by two bytes 0377, 0377.
+.br
+Absent boolean values are represented by the byte 0 (false).
+.bP
+If a capability has been canceled from this terminal,
+@TIC@ stores a \-2 in the corresponding table.
+.IP
+The integer value \-2 is represented by two bytes 0377, 0376.
+.br
+The boolean value \-2 is represented by the byte 0376.
+.br
+.bP
+Other negative values are illegal.
+.PP
+The \fIterminal names\fP section comes after the \fIheader\fP.
It contains the first line of the terminfo description,
listing the various names for the terminal,
separated by the \*(``|\*('' character.
-The section is terminated with an \s-1ASCII NUL\s+1 character.
+The \fIterminal names\fP section is terminated
+with an \s-1ASCII NUL\s+1 character.
.PP
-The boolean flags have one byte for each flag.
-This byte is either 0 or 1 as the flag is present or absent.
-The capabilities are in the same order as the file <term.h>.
+The \fIboolean flags\fP section has one byte for each flag.
+Boolean capabilities are either 1 or 0 (true or false)
+according to whether the terminal supports the given capability or not.
.PP
-Between the boolean section and the number section,
+Between the \fIboolean flags\fP section and the \fInumber\fP section,
a null byte will be inserted, if necessary,
-to ensure that the number section begins on an even byte (this is a
-relic of the PDP\-11's word-addressed architecture, originally
-designed in to avoid IOT traps induced by addressing a word on an
-odd byte boundary).
+to ensure that the \fInumber\fP section begins on an even byte
+This is a relic of the PDP\-11's word-addressed architecture,
+originally designed to avoid traps induced
+by addressing a word on an odd byte boundary.
All short integers are aligned on a short word boundary.
.PP
-The numbers section is similar to the flags section.
+The \fInumbers\fP section is similar to the \fIboolean flags\fP section.
Each capability takes up two bytes,
and is stored as a little-endian short integer.
-If the value represented is \-1, the capability is taken to be missing.
.PP
-The strings section is also similar.
-Each capability is stored as a short integer, in the format above.
-A value of \-1 means the capability is missing.
-Otherwise, the value is taken as an offset from the beginning
-of the string table.
+The \fIstrings\fP section is also similar.
+Each capability is stored as a short integer.
+The capability value is an index into the \fIstring table\fP.
+.PP
+The \fIstring table\fP is the last section.
+It contains all of the values of string capabilities referenced in
+the \fIstrings\fP section.
+Each string is null-terminated.
Special characters in ^X or \ec notation are stored in their
interpreted form, not the printing representation.
Padding information $<nn> and parameter information %x are
stored intact in uninterpreted form.
-.PP
-The final section is the string table.
-It contains all the values of string capabilities referenced in
-the string section.
-Each string is null terminated.
.SS EXTENDED STORAGE FORMAT
The previous section describes the conventional terminfo binary format.
With some minor variations of the offsets (see PORTABILITY),
the same binary format is used in all modern UNIX systems.
Each system uses a predefined set of boolean, number or string capabilities.
.PP
The \fBncurses\fP libraries and applications support
extended terminfo binary format,
allowing users to define capabilities which are loaded at runtime.
This
extension is made possible by using the fact that the other implementations
stop reading the terminfo data when they have reached the end of the size given
in the header.
\fBncurses\fP checks the size,
and if it exceeds that due to the predefined data,
continues to parse according to its own scheme.
.PP
First, it reads the extended header (5 short integers):
.RS 5
.TP 5
(1)
count of extended boolean capabilities
.TP 5
(2)
count of extended numeric capabilities
.TP 5
(3)
count of extended string capabilities
.TP 5
(4)
count of the items in extended string table
.TP 5
(5)
size of the extended string table in bytes
.RE
.PP
The count- and size-values for the extended string table
include the extended capability \fInames\fP as well as
extended capability \fIvalues\fP.
.PP
Using the counts and sizes, \fBncurses\fP allocates arrays and reads data
for the extended capabilities in the same order as the header information.
.PP
The extended string table contains values for string capabilities.
After the end of these values, it contains the names for each of
the extended capabilities in order, e.g., booleans, then numbers and
finally strings.
.PP
Applications which manipulate terminal data can use the definitions
described in \fBterm_variables\fP(3X) which associate the long capability
names with members of a \fBTERMTYPE\fP structure.
.
.SS EXTENDED NUMBER FORMAT
.PP
On occasion, 16-bit signed integers are not large enough.
With \fBncurses\fP 6.1, a new format was introduced by making a few changes
to the legacy format:
.bP
a different magic number (octal 01036)
.bP
changing the type for the \fInumber\fP array from signed 16-bit integers
to signed 32-bit integers.
.PP
To maintain compatibility, the library presents the same data structures
to direct users of the \fBTERMTYPE\fP structure as in previous formats.
However, that cannot provide callers with the extended numbers.
The library uses a similar but hidden data structure \fBTERMTYPE2\fP
to provide data for the terminfo functions.
.SH PORTABILITY
.SS setupterm
.PP
Note that it is possible for
.B setupterm
to expect a different set of capabilities
than are actually present in the file.
Either the database may have been updated since
.B setupterm
has been recompiled
(resulting in extra unrecognized entries in the file)
or the program may have been recompiled more recently
than the database was updated
(resulting in missing entries).
The routine
.B setupterm
must be prepared for both possibilities \-
this is why the numbers and sizes are included.
Also, new capabilities must always be added at the end of the lists
of boolean, number, and string capabilities.
.SS Binary format
.PP
X/Open Curses does not specify a format for the terminfo database.
UNIX System V curses used a directory-tree of binary files,
one per terminal description.
.PP
Despite the consistent use of little-endian for numbers and the otherwise
self-describing format, it is not wise to count on portability of binary
terminfo entries between commercial UNIX versions.
The problem is that there
are at least three versions of terminfo (under HP\-UX, AIX, and OSF/1) which
diverged from System V terminfo after SVr1, and have added extension
capabilities to the string table that (in the binary format) collide with
System V and XSI Curses extensions.
See \fBterminfo\fR(\*n) for detailed
discussion of terminfo source compatibility issues.
.PP
This implementation is by default compatible with the binary
terminfo format used by Solaris curses,
except in a few less-used details
where it was found that the latter did not match X/Open Curses.
The format used by the other Unix versions
can be matched by building ncurses
with different configuration options.
.SS Magic codes
.PP
The magic number in a binary terminfo file is the first 16-bits (two bytes).
Besides making it more reliable for the library to check that a file
is terminfo,
utilities such as \fBfile\fP also use that to tell what the file-format is.
System V defined more than one magic number,
with 0433, 0435 as screen-dumps (see \fBscr_dump\fP(5)).
This implementation uses 01036 as a continuation of that sequence,
but with a different high-order byte to avoid confusion.
.SS The TERMTYPE structure
.PP
Direct access to the \fBTERMTYPE\fP structure is provided for legacy
applications.
Portable applications should use the \fBtigetflag\fP and related functions
described in \fBcurs_terminfo\fP(3X) for reading terminal capabilities.
.SS Mixed-case terminal names
.PP
A small number of terminal descriptions use uppercase characters in
their names.
If the underlying filesystem ignores the difference between
uppercase and lowercase,
\fBncurses\fP represents the \*(``first character\*(''
of the terminal name used as
the intermediate level of a directory tree in (two-character) hexadecimal form.
.SH EXAMPLE
As an example, here is a description for the Lear-Siegler
ADM\-3, a popular though rather stupid early terminal:
.NS
adm3a|lsi adm3a,
am,
cols#80, lines#24,
bel=^G, clear=\032$<1>, cr=^M, cub1=^H, cud1=^J,
cuf1=^L, cup=\\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
home=^^, ind=^J,
.NS
.PP
and a hexadecimal dump of the compiled terminal description:
.NS
.ft CW
\s-20000 1a 01 10 00 02 00 03 00 82 00 31 00 61 64 6d 33 ........ ..1.adm3
0010 61 7c 6c 73 69 20 61 64 6d 33 61 00 00 01 50 00 a|lsi ad m3a...P.
0020 ff ff 18 00 ff ff 00 00 02 00 ff ff ff ff 04 00 ........ ........
0030 ff ff ff ff ff ff ff ff 0a 00 25 00 27 00 ff ff ........ ..%.'...
0040 29 00 ff ff ff ff 2b 00 ff ff 2d 00 ff ff ff ff ).....+. ..-.....
0050 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0060 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0070 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0080 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
00a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
00b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
00c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
00d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
00e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
00f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0100 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0110 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0120 ff ff ff ff ff ff 2f 00 07 00 0d 00 1a 24 3c 31 ....../. .....$<1
0130 3e 00 1b 3d 25 70 31 25 7b 33 32 7d 25 2b 25 63 >..=%p1% {32}%+%c
0140 25 70 32 25 7b 33 32 7d 25 2b 25 63 00 0a 00 1e %p2%{32} %+%c....
0150 00 08 00 0c 00 0b 00 0a 00 ........ .\s+2
.ft R
.NE
.sp
.SH LIMITS
Some limitations:
.bP
total compiled entries cannot exceed 4096 bytes in the legacy format.
.bP
total compiled entries cannot exceed 32768 bytes in the extended format.
.bP
the name field cannot exceed 128 bytes.
+.PP
+Compiled entries are limited to 32768 bytes because offsets into the
+\fIstrings table\fP use two-byte integers.
+The legacy format could have supported 32768-byte entries,
+but was limited a virtual memory page's 4096 bytes.
.SH FILES
\*d/*/* compiled terminal capability data base
.SH SEE ALSO
\fBcurses\fR(3X), \fBterminfo\fR(\*n).
.SH AUTHORS
Thomas E. Dickey
.br
extended terminfo format for ncurses 5.0
.br
hashed database support for ncurses 5.6
.br
extended number support for ncurses 6.1
.sp
Eric S. Raymond
.br
documented legacy terminfo format, e.g., from pcurses.
diff --git a/contrib/ncurses/man/terminfo.tail b/contrib/ncurses/man/terminfo.tail
index f6ccf6b003ba..da154ecf96fc 100644
--- a/contrib/ncurses/man/terminfo.tail
+++ b/contrib/ncurses/man/terminfo.tail
@@ -1,1920 +1,1920 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: terminfo.tail,v 1.99 2020/02/02 23:34:34 tom Exp $
+.\" $Id: terminfo.tail,v 1.100 2020/12/19 21:51:22 tom Exp $
.ps +1
.SS User-Defined Capabilities
.
The preceding section listed the \fIpredefined\fP capabilities.
They deal with some special features for terminals no longer
(or possibly never) produced.
Occasionally there are special features of newer terminals which
are awkward or impossible to represent by reusing the predefined
capabilities.
.PP
\fBncurses\fP addresses this limitation by allowing user-defined capabilities.
The \fB@TIC@\fP and \fB@INFOCMP@\fP programs provide
the \fB\-x\fP option for this purpose.
When \fB\-x\fP is set,
\fB@TIC@\fP treats unknown capabilities as user-defined.
That is, if \fB@TIC@\fP encounters a capability name
which it does not recognize,
it infers its type (boolean, number or string) from the syntax
and makes an extended table entry for that capability.
The \fBuse_extended_names\fP(3X) function makes this information
conditionally available to applications.
The ncurses library provides the data leaving most of the behavior
to applications:
.bP
User-defined capability strings whose name begins
with \*(``k\*('' are treated as function keys.
.bP
The types (boolean, number, string) determined by \fB@TIC@\fP
can be inferred by successful calls on \fBtigetflag\fP, etc.
.bP
If the capability name happens to be two characters,
the capability is also available through the termcap interface.
.PP
While termcap is said to be extensible because it does not use a predefined set
of capabilities,
in practice it has been limited to the capabilities defined by
terminfo implementations.
As a rule,
user-defined capabilities intended for use by termcap applications should
be limited to booleans and numbers to avoid running past the 1023 byte
limit assumed by termcap implementations and their applications.
In particular, providing extended sets of function keys (past the 60
numbered keys and the handful of special named keys) is best done using
the longer names available using terminfo.
.
.SS A Sample Entry
.
The following entry, describing an ANSI-standard terminal, is representative
of what a \fBterminfo\fR entry for a modern terminal typically looks like.
.PP
.nf
.ft CW
\s-2ansi|ansi/pc-term compatible with color,
am, mc5i, mir, msgr,
colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,
acsc=+\\020\\,\\021-\\030.^Y0\\333`\\004a\\261f\\370g\\361h\\260
j\\331k\\277l\\332m\\300n\\305o~p\\304q\\304r\\304s_t\\303
u\\264v\\301w\\302x\\263y\\363z\\362{\\343|\\330}\\234~\\376,
bel=^G, blink=\\E[5m, bold=\\E[1m, cbt=\\E[Z, clear=\\E[H\\E[J,
cr=^M, cub=\\E[%p1%dD, cub1=\\E[D, cud=\\E[%p1%dB, cud1=\\E[B,
cuf=\\E[%p1%dC, cuf1=\\E[C, cup=\\E[%i%p1%d;%p2%dH,
cuu=\\E[%p1%dA, cuu1=\\E[A, dch=\\E[%p1%dP, dch1=\\E[P,
dl=\\E[%p1%dM, dl1=\\E[M, ech=\\E[%p1%dX, ed=\\E[J, el=\\E[K,
el1=\\E[1K, home=\\E[H, hpa=\\E[%i%p1%dG, ht=\\E[I, hts=\\EH,
ich=\\E[%p1%d@, il=\\E[%p1%dL, il1=\\E[L, ind=^J,
indn=\\E[%p1%dS, invis=\\E[8m, kbs=^H, kcbt=\\E[Z, kcub1=\\E[D,
kcud1=\\E[B, kcuf1=\\E[C, kcuu1=\\E[A, khome=\\E[H, kich1=\\E[L,
mc4=\\E[4i, mc5=\\E[5i, nel=\\r\\E[S, op=\\E[39;49m,
rep=%p1%c\\E[%p2%{1}%-%db, rev=\\E[7m, rin=\\E[%p1%dT,
rmacs=\\E[10m, rmpch=\\E[10m, rmso=\\E[m, rmul=\\E[m,
s0ds=\\E(B, s1ds=\\E)B, s2ds=\\E*B, s3ds=\\E+B,
setab=\\E[4%p1%dm, setaf=\\E[3%p1%dm,
sgr=\\E[0;10%?%p1%t;7%;
%?%p2%t;4%;
%?%p3%t;7%;
%?%p4%t;5%;
%?%p6%t;1%;
%?%p7%t;8%;
%?%p9%t;11%;m,
sgr0=\\E[0;10m, smacs=\\E[11m, smpch=\\E[11m, smso=\\E[7m,
smul=\\E[4m, tbc=\\E[3g, u6=\\E[%i%d;%dR, u7=\\E[6n,
u8=\\E[?%[;0123456789]c, u9=\\E[c, vpa=\\E[%i%p1%dd,
.fi
.ft R
.PP
Entries may continue onto multiple lines by placing white space at
the beginning of each line except the first.
Comments may be included on lines beginning with \*(``#\*(''.
Capabilities in
.I terminfo
are of three types:
.bP
Boolean capabilities which indicate that the terminal has
some particular feature,
.bP
numeric capabilities giving the size of the terminal
or the size of particular delays, and
.bP
string
capabilities, which give a sequence which can be used to perform particular
terminal operations.
.PP
.SS Types of Capabilities
.PP
All capabilities have names.
For instance, the fact that
ANSI-standard terminals have
.I "automatic margins"
(i.e., an automatic return and line-feed
when the end of a line is reached) is indicated by the capability \fBam\fR.
Hence the description of ansi includes \fBam\fR.
Numeric capabilities are followed by the character \*(``#\*('' and then a positive value.
Thus \fBcols\fR, which indicates the number of columns the terminal has,
gives the value \*(``80\*('' for ansi.
Values for numeric capabilities may be specified in decimal, octal or hexadecimal,
using the C programming language conventions (e.g., 255, 0377 and 0xff or 0xFF).
.PP
Finally, string valued capabilities, such as \fBel\fR (clear to end of line
sequence) are given by the two-character code, an \*(``=\*('', and then a string
ending at the next following \*(``,\*(''.
.PP
A number of escape sequences are provided in the string valued capabilities
for easy encoding of characters there:
.bP
Both \fB\eE\fR and \fB\ee\fR
map to an \s-1ESCAPE\s0 character,
.bP
\fB^x\fR maps to a control-x for any appropriate \fIx\fP, and
.bP
the sequences
.RS 6
.PP
\fB\en\fP, \fB\el\fP, \fB\er\fP, \fB\et\fP, \fB\eb\fP, \fB\ef\fP, and \fB\es\fR
.RE
.IP
produce
.RS 6
.PP
\fInewline\fP, \fIline-feed\fP, \fIreturn\fP, \fItab\fP, \fIbackspace\fP, \fIform-feed\fP, and \fIspace\fP,
.RE
.IP
respectively.
.PP
X/Open Curses does not say what \*(``appropriate \fIx\fP\*('' might be.
In practice, that is a printable ASCII graphic character.
The special case \*(``^?\*('' is interpreted as DEL (127).
In all other cases, the character value is AND'd with 0x1f,
mapping to ASCII control codes in the range 0 through 31.
.PP
Other escapes include
.bP
\fB\e^\fR for \fB^\fR,
.bP
\fB\e\e\fR for \fB\e\fR,
.bP
\fB\e\fR, for comma,
.bP
\fB\e:\fR for \fB:\fR,
.bP
and \fB\e0\fR for null.
.IP
\fB\e0\fR will produce \e200, which does not terminate a string but behaves
as a null character on most terminals, providing CS7 is specified.
See \fBstty\fP(1).
.IP
The reason for this quirk is to maintain binary compatibility of the
compiled terminfo files with other implementations,
e.g., the SVr4 systems, which document this.
Compiled terminfo files use null-terminated strings, with no lengths.
Modifying this would require a new binary format,
which would not work with other implementations.
.PP
Finally, characters may be given as three octal digits after a \fB\e\fR.
.PP
A delay in milliseconds may appear anywhere in a string capability, enclosed in
$<..> brackets, as in \fBel\fP=\eEK$<5>,
and padding characters are supplied by \fBtputs\fP(3X)
to provide this delay.
.bP
The delay must be a number with at most one decimal
place of precision; it may be followed by suffixes \*(``*\*('' or \*(``/\*('' or both.
.bP
A \*(``*\*(''
indicates that the padding required is proportional to the number of lines
affected by the operation, and the amount given is the per-affected-unit
padding required.
(In the case of insert character, the factor is still the
number of \fIlines\fP affected.)
.IP
Normally, padding is advisory if the device has the \fBxon\fR
capability; it is used for cost computation but does not trigger delays.
.bP
A \*(``/\*(''
suffix indicates that the padding is mandatory and forces a delay of the given
number of milliseconds even on devices for which \fBxon\fR is present to
indicate flow control.
.PP
Sometimes individual capabilities must be commented out.
To do this, put a period before the capability name.
For example, see the second
.B ind
in the example above.
.br
.ne 5
.PP
.SS Fetching Compiled Descriptions
.PP
The \fBncurses\fP library searches for terminal descriptions in several places.
It uses only the first description found.
The library has a compiled-in list of places to search
which can be overridden by environment variables.
Before starting to search,
\fBncurses\fP eliminates duplicates in its search list.
.bP
If the environment variable TERMINFO is set, it is interpreted as the pathname
of a directory containing the compiled description you are working on.
Only that directory is searched.
.bP
If TERMINFO is not set,
\fBncurses\fR will instead look in the directory \fB$HOME/.terminfo\fR
for a compiled description.
.bP
Next, if the environment variable TERMINFO_DIRS is set,
\fBncurses\fR will interpret the contents of that variable
as a list of colon-separated directories (or database files) to be searched.
.IP
An empty directory name (i.e., if the variable begins or ends
with a colon, or contains adjacent colons)
is interpreted as the system location \fI\*d\fR.
.bP
Finally, \fBncurses\fP searches these compiled-in locations:
.RS
.bP
a list of directories (@TERMINFO_DIRS@), and
.bP
the system terminfo directory, \fI\*d\fR (the compiled-in default).
.RE
.SS Preparing Descriptions
.PP
We now outline how to prepare descriptions of terminals.
The most effective way to prepare a terminal description is by imitating
the description of a similar terminal in
.I terminfo
and to build up a description gradually, using partial descriptions
with
.I vi
or some other screen-oriented program to check that they are correct.
Be aware that a very unusual terminal may expose deficiencies in
the ability of the
.I terminfo
file to describe it
or bugs in the screen-handling code of the test program.
.PP
To get the padding for insert line right (if the terminal manufacturer
did not document it) a severe test is to edit a large file at 9600 baud,
delete 16 or so lines from the middle of the screen, then hit the \*(``u\*(''
key several times quickly.
If the terminal messes up, more padding is usually needed.
A similar test can be used for insert character.
.PP
.SS Basic Capabilities
.PP
The number of columns on each line for the terminal is given by the
\fBcols\fR numeric capability.
If the terminal is a \s-1CRT\s0, then the
number of lines on the screen is given by the \fBlines\fR capability.
If the terminal wraps around to the beginning of the next line when
it reaches the right margin, then it should have the \fBam\fR capability.
If the terminal can clear its screen, leaving the cursor in the home
position, then this is given by the \fBclear\fR string capability.
If the terminal overstrikes
(rather than clearing a position when a character is struck over)
then it should have the \fBos\fR capability.
If the terminal is a printing terminal, with no soft copy unit,
give it both
.B hc
and
.BR os .
.RB ( os
applies to storage scope terminals, such as \s-1TEKTRONIX\s+1 4010
series, as well as hard copy and APL terminals.)
If there is a code to move the cursor to the left edge of the current
row, give this as
.BR cr .
(Normally this will be carriage return, control/M.)
If there is a code to produce an audible signal (bell, beep, etc)
give this as
.BR bel .
.PP
If there is a code to move the cursor one position to the left
(such as backspace) that capability should be given as
.BR cub1 .
Similarly, codes to move to the right, up, and down should be
given as
.BR cuf1 ,
.BR cuu1 ,
and
.BR cud1 .
These local cursor motions should not alter the text they pass over,
for example, you would not normally use \*(``\fBcuf1\fP=\ \*('' because the
space would erase the character moved over.
.PP
A very important point here is that the local cursor motions encoded
in
.I terminfo
are undefined at the left and top edges of a \s-1CRT\s0 terminal.
Programs should never attempt to backspace around the left edge,
unless
.B bw
is given,
and never attempt to go up locally off the top.
In order to scroll text up, a program will go to the bottom left corner
of the screen and send the
.B ind
(index) string.
.PP
To scroll text down, a program goes to the top left corner
of the screen and sends the
.B ri
(reverse index) string.
The strings
.B ind
and
.B ri
are undefined when not on their respective corners of the screen.
.PP
Parameterized versions of the scrolling sequences are
.B indn
and
.B rin
which have the same semantics as
.B ind
and
.B ri
except that they take one parameter, and scroll that many lines.
They are also undefined except at the appropriate edge of the screen.
.PP
The \fBam\fR capability tells whether the cursor sticks at the right
edge of the screen when text is output, but this does not necessarily
apply to a
.B cuf1
from the last column.
The only local motion which is defined from the left edge is if
.B bw
is given, then a
.B cub1
from the left edge will move to the right edge of the previous row.
If
.B bw
is not given, the effect is undefined.
This is useful for drawing a box around the edge of the screen, for example.
If the terminal has switch selectable automatic margins,
the
.I terminfo
file usually assumes that this is on; i.e., \fBam\fR.
If the terminal has a command which moves to the first column of the next
line, that command can be given as
.B nel
(newline).
It does not matter if the command clears the remainder of the current line,
so if the terminal has no
.B cr
and
.B lf
it may still be possible to craft a working
.B nel
out of one or both of them.
.PP
These capabilities suffice to describe hard-copy and \*(``glass-tty\*('' terminals.
Thus the model 33 teletype is described as
.PP
.DT
.nf
.ft CW
.\".in -2
\s-133\||\|tty33\||\|tty\||\|model 33 teletype,
bel=^G, cols#72, cr=^M, cud1=^J, hc, ind=^J, os,\s+1
.\".in +2
.ft R
.fi
.PP
while the Lear Siegler \s-1ADM-3\s0 is described as
.PP
.DT
.nf
.ft CW
.\".in -2
\s-1adm3\||\|3\||\|lsi adm3,
am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H, cud1=^J,
ind=^J, lines#24,\s+1
.\".in +2
.ft R
.fi
.PP
.SS Parameterized Strings
.PP
Cursor addressing and other strings requiring parameters
in the terminal are described by a
parameterized string capability,
with \fIprintf\fP-like escapes such as \fI%x\fR in it.
For example, to address the cursor, the
.B cup
capability is given, using two parameters:
the row and column to address to.
(Rows and columns are numbered from zero and refer to the
physical screen visible to the user, not to any unseen memory.)
If the terminal has memory relative cursor addressing,
that can be indicated by
.BR mrcup .
.PP
The parameter mechanism uses a stack and special \fB%\fP codes
to manipulate it.
Typically a sequence will push one of the
parameters onto the stack and then print it in some format.
Print (e.g., "%d") is a special case.
Other operations, including "%t" pop their operand from the stack.
It is noted that more complex operations are often necessary,
e.g., in the \fBsgr\fP string.
.PP
The \fB%\fR encodings have the following meanings:
.PP
.TP 5
\fB%%\fP
outputs \*(``%\*(''
.TP
\fB%\fP\fI[[\fP:\fI]flags][width[.precision]][\fP\fBdoxXs\fP\fI]\fP
as in \fBprintf\fP(3), flags are \fI[\-+#]\fP and \fIspace\fP.
Use a \*(``:\*('' to allow the next character to be a \*(``\-\*('' flag,
avoiding interpreting \*(``%\-\*('' as an operator.
.TP
\f(CW%c\fP
print \fIpop()\fP like %c in \fBprintf\fP
.TP
\fB%s\fP
print \fIpop()\fP like %s in \fBprintf\fP
.TP
\fB%p\fP\fI[1\-9]\fP
push \fIi\fP'th parameter
.TP
\fB%P\fP\fI[a\-z]\fP
set dynamic variable \fI[a\-z]\fP to \fIpop()\fP
.TP
\fB%g\fP\fI[a\-z]/\fP
get dynamic variable \fI[a\-z]\fP and push it
.TP
\fB%P\fP\fI[A\-Z]\fP
set static variable \fI[a\-z]\fP to \fIpop()\fP
.TP
\fB%g\fP\fI[A\-Z]\fP
get static variable \fI[a\-z]\fP and push it
.IP
The terms \*(``static\*('' and \*(``dynamic\*('' are misleading.
Historically, these are simply two different sets of variables,
whose values are not reset between calls to \fBtparm\fP(3X).
However, that fact is not documented in other implementations.
Relying on it will adversely impact portability to other implementations.
.TP
\fB%'\fP\fIc\fP\fB'\fP
char constant \fIc\fP
.TP
\fB%{\fP\fInn\fP\fB}\fP
integer constant \fInn\fP
.TP
\fB%l\fP
push strlen(pop)
.TP
\fB%+\fP, \fB%\-\fP, \fB%*\fP, \fB%/\fP, \fB%m\fP
arithmetic (%m is \fImod\fP): \fIpush(pop() op pop())\fP
.TP
\fB%&\fP, \fB%|\fP, \fB%^\fP
bit operations (AND, OR and exclusive-OR): \fIpush(pop() op pop())\fP
.TP
\fB%=\fP, \fB%>\fP, \fB%<\fP
logical operations: \fIpush(pop() op pop())\fP
.TP
\fB%A\fP, \fB%O\fP
logical AND and OR operations (for conditionals)
.TP
\fB%!\fP, \fB%~\fP
unary operations (logical and bit complement): \fIpush(op pop())\fP
.TP
\fB%i\fP
add 1 to first two parameters (for ANSI terminals)
.TP
\fB%?\fP \fIexpr\fP \fB%t\fP \fIthenpart\fP \fB%e\fP \fIelsepart\fP \fB%;\fP
This forms an if-then-else.
The \fB%e\fP \fIelsepart\fP is optional.
Usually the \fB%?\fP \fIexpr\fP part pushes a value onto the stack,
and \fB%t\fP pops it from the stack, testing if it is nonzero (true).
If it is zero (false), control passes to the \fB%e\fP (else) part.
.IP
It is possible to form else-if's a la Algol 68:
.RS
\fB%?\fP c\d1\u \fB%t\fP b\d1\u \fB%e\fP c\d2\u \fB%t\fP b\d2\u \fB%e\fP c\d3\u \fB%t\fP b\d3\u \fB%e\fP c\d4\u \fB%t\fP b\d4\u \fB%e\fP \fB%;\fP
.RE
.IP
where c\di\u are conditions, b\di\u are bodies.
.IP
Use the \fB\-f\fP option of \fB@TIC@\fP or \fB@INFOCMP@\fP to see
the structure of if-then-else's.
Some strings, e.g., \fBsgr\fP can be very complicated when written
on one line.
The \fB\-f\fP option splits the string into lines with the parts indented.
.PP
Binary operations are in postfix form with the operands in the usual order.
That is, to get x\-5 one would use "%gx%{5}%-".
\fB%P\fP and \fB%g\fP variables are
persistent across escape-string evaluations.
.PP
Consider the HP2645, which, to get to row 3 and column 12, needs
to be sent \eE&a12c03Y padded for 6 milliseconds.
Note that the order
of the rows and columns is inverted here, and that the row and column
are printed as two digits.
Thus its \fBcup\fR capability is \*(``cup=6\eE&%p2%2dc%p1%2dY\*(''.
.PP
The Microterm \s-1ACT-IV\s0 needs the current row and column sent
preceded by a \fB^T\fR, with the row and column simply encoded in binary,
\*(``cup=^T%p1%c%p2%c\*(''.
Terminals which use \*(``%c\*('' need to be able to
backspace the cursor (\fBcub1\fR),
and to move the cursor up one line on the screen (\fBcuu1\fR).
This is necessary because it is not always safe to transmit \fB\en\fR
\fB^D\fR and \fB\er\fR, as the system may change or discard them.
(The library routines dealing with terminfo set tty modes so that
tabs are never expanded, so \et is safe to send.
This turns out to be essential for the Ann Arbor 4080.)
.PP
A final example is the \s-1LSI ADM\s0-3a, which uses row and column
offset by a blank character, thus \*(``cup=\eE=%p1%' '%+%c%p2%' '%+%c\*(''.
After sending \*(``\eE=\*('', this pushes the first parameter, pushes the
ASCII value for a space (32), adds them (pushing the sum on the stack
in place of the two previous values) and outputs that value as a character.
Then the same is done for the second parameter.
More complex arithmetic is possible using the stack.
.PP
.SS Cursor Motions
.PP
If the terminal has a fast way to home the cursor
(to very upper left corner of screen) then this can be given as
\fBhome\fR; similarly a fast way of getting to the lower left-hand corner
can be given as \fBll\fR; this may involve going up with \fBcuu1\fR
from the home position,
but a program should never do this itself (unless \fBll\fR does) because it
can make no assumption about the effect of moving up from the home position.
Note that the home position is the same as addressing to (0,0):
to the top left corner of the screen, not of memory.
(Thus, the \eEH sequence on HP terminals cannot be used for
.BR home .)
.PP
If the terminal has row or column absolute cursor addressing,
these can be given as single parameter capabilities
.B hpa
(horizontal position absolute)
and
.B vpa
(vertical position absolute).
Sometimes these are shorter than the more general two parameter
sequence (as with the hp2645) and can be used in preference to
.BR cup .
If there are parameterized local motions (e.g., move
.I n
spaces to the right) these can be given as
.BR cud ,
.BR cub ,
.BR cuf ,
and
.B cuu
with a single parameter indicating how many spaces to move.
These are primarily useful if the terminal does not have
.BR cup ,
such as the \s-1TEKTRONIX\s+1 4025.
.PP
If the terminal needs to be in a special mode when running
a program that uses these capabilities,
the codes to enter and exit this mode can be given as \fBsmcup\fR and \fBrmcup\fR.
This arises, for example, from terminals like the Concept with more than
one page of memory.
If the terminal has only memory relative cursor addressing and not screen
relative cursor addressing, a one screen-sized window must be fixed into
the terminal for cursor addressing to work properly.
This is also used for the \s-1TEKTRONIX\s+1 4025,
where
.B smcup
sets the command character to be the one used by terminfo.
If the \fBsmcup\fP sequence will not restore the screen after an
\fBrmcup\fP sequence is output (to the state prior to outputting
\fBrmcup\fP), specify \fBnrrmc\fP.
.PP
.SS Area Clears
.PP
If the terminal can clear from the current position to the end of the
line, leaving the cursor where it is, this should be given as \fBel\fR.
If the terminal can clear from the beginning of the line to the current
position inclusive, leaving
the cursor where it is, this should be given as \fBel1\fP.
If the terminal can clear from the current position to the end of the
display, then this should be given as \fBed\fR.
\fBEd\fR is only defined from the first column of a line.
(Thus, it can be simulated by a request to delete a large number of lines,
if a true
.B ed
is not available.)
.PP
.SS Insert/delete line and vertical motions
.PP
If the terminal can open a new blank line before the line where the cursor
is, this should be given as \fBil1\fR; this is done only from the first
position of a line.
The cursor must then appear on the newly blank line.
If the terminal can delete the line which the cursor is on, then this
should be given as \fBdl1\fR; this is done only from the first position on
the line to be deleted.
Versions of
.B il1
and
.B dl1
which take a single parameter and insert or delete that many lines can
be given as
.B il
and
.BR dl .
.PP
If the terminal has a settable scrolling region (like the vt100)
the command to set this can be described with the
.B csr
capability, which takes two parameters:
the top and bottom lines of the scrolling region.
The cursor position is, alas, undefined after using this command.
.PP
It is possible to get the effect of insert or delete line using
.B csr
on a properly chosen region; the
.B sc
and
.B rc
(save and restore cursor) commands may be useful for ensuring that
your synthesized insert/delete string does not move the cursor.
(Note that the \fBncurses\fR(3X) library does this synthesis
automatically, so you need not compose insert/delete strings for
an entry with \fBcsr\fR).
.PP
Yet another way to construct insert and delete might be to use a combination of
index with the memory-lock feature found on some terminals (like the HP\-700/90
series, which however also has insert/delete).
.PP
Inserting lines at the top or bottom of the screen can also be
done using
.B ri
or
.B ind
on many terminals without a true insert/delete line,
and is often faster even on terminals with those features.
.PP
The boolean \fBnon_dest_scroll_region\fR should be set if each scrolling
window is effectively a view port on a screen-sized canvas.
To test for
this capability, create a scrolling region in the middle of the screen,
write something to the bottom line, move the cursor to the top of the region,
and do \fBri\fR followed by \fBdl1\fR or \fBind\fR.
If the data scrolled
off the bottom of the region by the \fBri\fR re-appears, then scrolling
is non-destructive.
System V and XSI Curses expect that \fBind\fR, \fBri\fR,
\fBindn\fR, and \fBrin\fR will simulate destructive scrolling; their
documentation cautions you not to define \fBcsr\fR unless this is true.
This \fBcurses\fR implementation is more liberal and will do explicit erases
after scrolling if \fBndsrc\fR is defined.
.PP
If the terminal has the ability to define a window as part of
memory, which all commands affect,
it should be given as the parameterized string
.BR wind .
The four parameters are the starting and ending lines in memory
and the starting and ending columns in memory, in that order.
.PP
If the terminal can retain display memory above, then the
\fBda\fR capability should be given; if display memory can be retained
below, then \fBdb\fR should be given.
These indicate
that deleting a line or scrolling may bring non-blank lines up from below
or that scrolling back with \fBri\fR may bring down non-blank lines.
.PP
.SS Insert/Delete Character
.PP
There are two basic kinds of intelligent terminals with respect to
insert/delete character which can be described using
.I terminfo.
The most common insert/delete character operations affect only the characters
on the current line and shift characters off the end of the line rigidly.
Other terminals, such as the Concept 100 and the Perkin Elmer Owl, make
a distinction between typed and untyped blanks on the screen, shifting
upon an insert or delete only to an untyped blank on the screen which is
either eliminated, or expanded to two untyped blanks.
.PP
You can determine the
kind of terminal you have by clearing the screen and then typing
text separated by cursor motions.
Type \*(``abc\ \ \ \ def\*('' using local
cursor motions (not spaces) between the \*(``abc\*('' and the \*(``def\*(''.
Then position the cursor before the \*(``abc\*('' and put the terminal in insert
mode.
If typing characters causes the rest of the line to shift
rigidly and characters to fall off the end, then your terminal does
not distinguish between blanks and untyped positions.
If the \*(``abc\*(''
shifts over to the \*(``def\*('' which then move together around the end of the
current line and onto the next as you insert, you have the second type of
terminal, and should give the capability \fBin\fR, which stands for
\*(``insert null\*(''.
.PP
While these are two logically separate attributes (one line versus multi-line
insert mode, and special treatment of untyped spaces) we have seen no
terminals whose insert mode cannot be described with the single attribute.
.PP
Terminfo can describe both terminals which have an insert mode, and terminals
which send a simple sequence to open a blank position on the current line.
Give as \fBsmir\fR the sequence to get into insert mode.
Give as \fBrmir\fR the sequence to leave insert mode.
Now give as \fBich1\fR any sequence needed to be sent just before sending
the character to be inserted.
Most terminals with a true insert mode
will not give \fBich1\fR; terminals which send a sequence to open a screen
position should give it here.
.PP
If your terminal has both, insert mode is usually preferable to \fBich1\fR.
Technically, you should not give both unless the terminal actually requires
both to be used in combination.
Accordingly, some non-curses applications get
confused if both are present; the symptom is doubled characters in an update
using insert.
This requirement is now rare; most \fBich\fR sequences do not
require previous smir, and most smir insert modes do not require \fBich1\fR
before each character.
Therefore, the new \fBcurses\fR actually assumes this
is the case and uses either \fBrmir\fR/\fBsmir\fR or \fBich\fR/\fBich1\fR as
appropriate (but not both).
If you have to write an entry to be used under
new curses for a terminal old enough to need both, include the
\fBrmir\fR/\fBsmir\fR sequences in \fBich1\fR.
.PP
If post insert padding is needed, give this as a number of milliseconds
in \fBip\fR (a string option).
Any other sequence which may need to be
sent after an insert of a single character may also be given in \fBip\fR.
If your terminal needs both to be placed into an \*(``insert mode\*('' and
a special code to precede each inserted character, then both
.BR smir / rmir
and
.B ich1
can be given, and both will be used.
The
.B ich
capability, with one parameter,
.IR n ,
will repeat the effects of
.B ich1
.I n
times.
.PP
If padding is necessary between characters typed while not
in insert mode, give this as a number of milliseconds padding in \fBrmp\fP.
.PP
It is occasionally necessary to move around while in insert mode
to delete characters on the same line (e.g., if there is a tab after
the insertion position).
If your terminal allows motion while in
insert mode you can give the capability \fBmir\fR to speed up inserting
in this case.
Omitting \fBmir\fR will affect only speed.
Some terminals
(notably Datamedia's) must not have \fBmir\fR because of the way their
insert mode works.
.PP
Finally, you can specify
.B dch1
to delete a single character,
.B dch
with one parameter,
.IR n ,
to delete
.I n characters,
and delete mode by giving \fBsmdc\fR and \fBrmdc\fR
to enter and exit delete mode (any mode the terminal needs to be placed
in for
.B dch1
to work).
.PP
A command to erase
.I n
characters (equivalent to outputting
.I n
blanks without moving the cursor)
can be given as
.B ech
with one parameter.
.PP
.SS "Highlighting, Underlining, and Visible Bells"
.PP
If your terminal has one or more kinds of display attributes,
these can be represented in a number of different ways.
You should choose one display form as
\f2standout mode\fR,
representing a good, high contrast, easy-on-the-eyes,
format for highlighting error messages and other attention getters.
(If you have a choice, reverse video plus half-bright is good,
or reverse video alone.)
The sequences to enter and exit standout mode
are given as \fBsmso\fR and \fBrmso\fR, respectively.
If the code to change into or out of standout
mode leaves one or even two blank spaces on the screen,
as the TVI 912 and Teleray 1061 do,
then \fBxmc\fR should be given to tell how many spaces are left.
.PP
Codes to begin underlining and end underlining can be given as \fBsmul\fR
and \fBrmul\fR respectively.
If the terminal has a code to underline the current character and move
the cursor one space to the right,
such as the Microterm Mime,
this can be given as \fBuc\fR.
.PP
Other capabilities to enter various highlighting modes include
.B blink
(blinking)
.B bold
(bold or extra bright)
.B dim
(dim or half-bright)
.B invis
(blanking or invisible text)
.B prot
(protected)
.B rev
(reverse video)
.B sgr0
(turn off
.I all
attribute modes)
.B smacs
(enter alternate character set mode)
and
.B rmacs
(exit alternate character set mode).
Turning on any of these modes singly may or may not turn off other modes.
.PP
If there is a sequence to set arbitrary combinations of modes,
this should be given as
.B sgr
(set attributes),
taking 9 parameters.
Each parameter is either 0 or nonzero, as the corresponding attribute is on or off.
The 9 parameters are, in order:
standout, underline, reverse, blink, dim, bold, blank, protect, alternate
character set.
Not all modes need be supported by
.BR sgr ,
only those for which corresponding separate attribute commands exist.
.PP
For example, the DEC vt220 supports most of the modes:
.PP
.TS
center;
l l l
l l l
lw18 lw14 lw18.
\fBtparm parameter attribute escape sequence\fP
none none \\E[0m
p1 standout \\E[0;1;7m
p2 underline \\E[0;4m
p3 reverse \\E[0;7m
p4 blink \\E[0;5m
p5 dim not available
p6 bold \\E[0;1m
p7 invis \\E[0;8m
p8 protect not used
p9 altcharset ^O (off) ^N (on)
.TE
.PP
We begin each escape sequence by turning off any existing modes, since
there is no quick way to determine whether they are active.
Standout is set up to be the combination of reverse and bold.
The vt220 terminal has a protect mode,
though it is not commonly used in sgr
because it protects characters on the screen from the host's erasures.
The altcharset mode also is different in that it is either ^O or ^N,
depending on whether it is off or on.
If all modes are turned on, the resulting sequence is \\E[0;1;4;5;7;8m^N.
.PP
Some sequences are common to different modes.
For example, ;7 is output when either p1 or p3 is true, that is, if
either standout or reverse modes are turned on.
.PP
Writing out the above sequences, along with their dependencies yields
.PP
.ne 11
.TS
center;
l l l
l l l
lw18 lw14 lw18.
\fBsequence when to output terminfo translation\fP
.ft CW
\\E[0 always \\E[0
;1 if p1 or p6 %?%p1%p6%|%t;1%;
;4 if p2 %?%p2%|%t;4%;
;5 if p4 %?%p4%|%t;5%;
;7 if p1 or p3 %?%p1%p3%|%t;7%;
;8 if p7 %?%p7%|%t;8%;
m always m
^N or ^O if p9 ^N, else ^O %?%p9%t^N%e^O%;
.ft R
.TE
.PP
Putting this all together into the sgr sequence gives:
.PP
.ft CW
.nf
sgr=\\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p4%t;5%;
%?%p1%p3%|%t;7%;%?%p7%t;8%;m%?%p9%t\\016%e\\017%;,
.fi
.ft R
.PP
Remember that if you specify sgr, you must also specify sgr0.
Also, some implementations rely on sgr being given if sgr0 is,
Not all terminfo entries necessarily have an sgr string, however.
Many terminfo entries are derived from termcap entries
which have no sgr string.
The only drawback to adding an sgr string is that termcap also
assumes that sgr0 does not exit alternate character set mode.
.PP
Terminals with the \*(``magic cookie\*('' glitch
.RB ( xmc )
deposit special \*(``cookies\*('' when they receive mode-setting sequences,
which affect the display algorithm rather than having extra bits for
each character.
Some terminals, such as the HP 2621, automatically leave standout
mode when they move to a new line or the cursor is addressed.
Programs using standout mode should exit standout mode before
moving the cursor or sending a newline,
unless the
.B msgr
capability, asserting that it is safe to move in standout mode, is present.
.PP
If the terminal has
a way of flashing the screen to indicate an error quietly (a bell replacement)
then this can be given as \fBflash\fR; it must not move the cursor.
.PP
If the cursor needs to be made more visible than normal when it is
not on the bottom line (to make, for example, a non-blinking underline into an
easier to find block or blinking underline)
give this sequence as
.BR cvvis .
If there is a way to make the cursor completely invisible, give that as
.BR civis .
The capability
.B cnorm
should be given which undoes the effects of both of these modes.
.PP
If your terminal correctly generates underlined characters
(with no special codes needed)
even though it does not overstrike,
then you should give the capability \fBul\fR.
If a character overstriking another leaves both characters on the screen,
specify the capability \fBos\fP.
If overstrikes are erasable with a blank,
then this should be indicated by giving \fBeo\fR.
.PP
.SS Keypad and Function Keys
.PP
If the terminal has a keypad that transmits codes when the keys are pressed,
this information can be given.
Note that it is not possible to handle
terminals where the keypad only works in local (this applies, for example,
to the unshifted HP 2621 keys).
If the keypad can be set to transmit or not transmit,
give these codes as \fBsmkx\fR and \fBrmkx\fR.
Otherwise the keypad is assumed to always transmit.
.PP
The codes sent by the left arrow, right arrow, up arrow, down arrow,
and home keys can be given as
\fBkcub1, kcuf1, kcuu1, kcud1, \fRand\fB khome\fR respectively.
If there are function keys such as f0, f1, ..., f10, the codes they send
can be given as \fBkf0, kf1, ..., kf10\fR.
If these keys have labels other than the default f0 through f10, the labels
can be given as \fBlf0, lf1, ..., lf10\fR.
.PP
The codes transmitted by certain other special keys can be given:
.bP
.B kll
(home down),
.bP
.B kbs
(backspace),
.bP
.B ktbc
(clear all tabs),
.bP
.B kctab
(clear the tab stop in this column),
.bP
.B kclr
(clear screen or erase key),
.bP
.B kdch1
(delete character),
.bP
.B kdl1
(delete line),
.bP
.B krmir
(exit insert mode),
.bP
.B kel
(clear to end of line),
.bP
.B ked
(clear to end of screen),
.bP
.B kich1
(insert character or enter insert mode),
.bP
.B kil1
(insert line),
.bP
.B knp
(next page),
.bP
.B kpp
(previous page),
.bP
.B kind
(scroll forward/down),
.bP
.B kri
(scroll backward/up),
.bP
.B khts
(set a tab stop in this column).
.PP
In addition, if the keypad has a 3 by 3 array of keys including the four
arrow keys, the other five keys can be given as
.BR ka1 ,
.BR ka3 ,
.BR kb2 ,
.BR kc1 ,
and
.BR kc3 .
These keys are useful when the effects of a 3 by 3 directional pad are needed.
.PP
Strings to program function keys can be given as
.BR pfkey ,
.BR pfloc ,
and
.BR pfx .
A string to program screen labels should be specified as \fBpln\fP.
Each of these strings takes two parameters: the function key number to
program (from 0 to 10) and the string to program it with.
Function key numbers out of this range may program undefined keys in
a terminal dependent manner.
The difference between the capabilities is that
.B pfkey
causes pressing the given key to be the same as the user typing the
given string;
.B pfloc
causes the string to be executed by the terminal in local; and
.B pfx
causes the string to be transmitted to the computer.
.PP
The capabilities \fBnlab\fP, \fBlw\fP and \fBlh\fP
define the number of programmable
screen labels and their width and height.
If there are commands to turn the labels on and off,
give them in \fBsmln\fP and \fBrmln\fP.
\fBsmln\fP is normally output after one or more pln
sequences to make sure that the change becomes visible.
.PP
.SS Tabs and Initialization
.PP
A few capabilities are used only for tabs:
.bP
If the terminal has hardware tabs, the command to advance to the next
tab stop can be given as
.B ht
(usually control/I).
.bP
A \*(``back-tab\*('' command which moves leftward to the preceding tab stop can
be given as
.BR cbt .
.IP
By convention, if the teletype modes indicate that tabs are being
expanded by the computer rather than being sent to the terminal,
programs should not use
.B ht
or
.B cbt
even if they are present, since the user may not have the tab stops
properly set.
.bP
If the terminal has hardware tabs which are initially set every
.I n
spaces when the terminal is powered up,
the numeric parameter
.B it
is given, showing the number of spaces the tabs are set to.
.IP
The \fBit\fP capability is normally used by the \fB@TSET@\fP
command to determine whether to set the mode for hardware tab expansion,
and whether to set the tab stops.
If the terminal has tab stops that can be saved in non-volatile memory,
the terminfo description can assume that they are properly set.
.PP
Other capabilities
include
.bP
.BR is1 ,
.BR is2 ,
and
.BR is3 ,
initialization strings for the terminal,
.bP
.BR iprog ,
the path name of a program to be run to initialize the terminal,
.bP
and \fBif\fR, the name of a file containing long initialization strings.
.PP
These strings are expected to set the terminal into modes consistent
with the rest of the terminfo description.
They are normally sent to the terminal, by the
.I init
option of the \fB@TPUT@\fP program, each time the user logs in.
They will be printed in the following order:
.RS
.TP
run the program
.B iprog
.TP
output
.br
\fBis1\fP and
.br
\fBis2\fP
.TP
set the margins using
\fBmgc\fP or
.br
\fBsmglp\fP and \fBsmgrp\fP or
.br
\fBsmgl\fP and \fBsmgr\fP
.TP
set tabs using
.B tbc
and
.B hts
.TP
print the file
\fBif\fP
.TP
and finally output
\fBis3\fP.
.RE
.PP
Most initialization is done with
.BR is2 .
Special terminal modes can be set up without duplicating strings
by putting the common sequences in
.B is2
and special cases in
.B is1
and
.BR is3 .
.PP
A set of sequences that does a harder reset from a totally unknown state
can be given as
.BR rs1 ,
.BR rs2 ,
.B rf
and
.BR rs3 ,
analogous to
.B is1 ,
.B is2 ,
.B if
and
.B is3
respectively.
These strings are output
by \fIreset\fP option of \fB@TPUT@\fP,
or by the \fB@RESET@\fP program
(an alias of \fB@TSET@\fP),
which is used when the terminal gets into a wedged state.
Commands are normally placed in
.BR rs1 ,
.B rs2
.B rs3
and
.B rf
only if they produce annoying effects on the screen and are not
necessary when logging in.
For example, the command to set the vt100 into 80-column mode would
normally be part of
.BR is2 ,
but it causes an annoying glitch of the screen and is not normally
needed since the terminal is usually already in 80-column mode.
.PP
The \fB@RESET@\fP program writes strings including
.BR iprog ,
etc., in the same order as the
.I init
program, using
.BR rs1 ,
etc., instead of
.BR is1 ,
etc.
If any of
.BR rs1 ,
.BR rs2 ,
.BR rs3 ,
or
.B rf
reset capability strings are missing,
the \fB@RESET@\fP program
falls back upon the corresponding initialization capability string.
.PP
If there are commands to set and clear tab stops, they can be given as
.B tbc
(clear all tab stops)
and
.B hts
(set a tab stop in the current column of every row).
If a more complex sequence is needed to set the tabs than can be
described by this, the sequence can be placed in
.B is2
or
.BR if .
.PP
The \fB@TPUT@ reset\fP command uses the same capability strings
as the \fB@RESET@\fP command,
although the two programs (\fB@TPUT@\fP and \fB@RESET@\fP)
provide different command-line options.
.PP
In practice, these terminfo capabilities are not often used in
initialization of tabs
(though they are required for the \fB@TABS@\fP program):
.bP
Almost all hardware terminals (at least those which supported tabs)
initialized those to every \fIeight\fP columns:
.IP
The only exception was the AT&T 2300 series,
which set tabs to every \fIfive\fP columns.
.bP
In particular, developers of the hardware terminals which are commonly used
as models for modern terminal emulators provided documentation demonstrating
that \fIeight\fP columns were the standard.
.bP
Because of this, the terminal initialization programs
\fB@TPUT@\fP and \fB@TSET@\fP
use the
\fBtbc\fP (\fBclear_all_tabs\fP) and
\fBhts\fP (\fBset_tab\fP) capabilities directly
only when the \fBit\fP (\fBinit_tabs\fP) capability
is set to a value other than \fIeight\fP.
.SS Delays and Padding
.PP
Many older and slower terminals do not support either XON/XOFF or DTR
handshaking, including hard copy terminals and some very archaic CRTs
(including, for example, DEC VT100s).
These may require padding characters
after certain cursor motions and screen changes.
.PP
If the terminal uses xon/xoff handshaking for flow control (that is,
it automatically emits ^S back to the host when its input buffers are
close to full), set
.BR xon .
This capability suppresses the emission of padding.
You can also set it
for memory-mapped console devices effectively that do not have a speed limit.
Padding information should still be included so that routines can
make better decisions about relative costs, but actual pad characters will
not be transmitted.
.PP
If \fBpb\fR (padding baud rate) is given, padding is suppressed at baud rates
below the value of \fBpb\fR.
If the entry has no padding baud rate, then
whether padding is emitted or not is completely controlled by \fBxon\fR.
.PP
If the terminal requires other than a null (zero) character as a pad,
then this can be given as \fBpad\fR.
Only the first character of the
.B pad
string is used.
.PP
.SS Status Lines
Some terminals have an extra \*(``status line\*('' which is not normally used by
software (and thus not counted in the terminal's \fBlines\fR capability).
.PP
The simplest case is a status line which is cursor-addressable but not
part of the main scrolling region on the screen; the Heathkit H19 has
a status line of this kind, as would a 24-line VT100 with a 23-line
scrolling region set up on initialization.
This situation is indicated
by the \fBhs\fR capability.
.PP
Some terminals with status lines need special sequences to access the
status line.
These may be expressed as a string with single parameter
\fBtsl\fR which takes the cursor to a given zero-origin column on the
status line.
The capability \fBfsl\fR must return to the main-screen
cursor positions before the last \fBtsl\fR.
You may need to embed the
string values of \fBsc\fR (save cursor) and \fBrc\fR (restore cursor)
in \fBtsl\fR and \fBfsl\fR to accomplish this.
.PP
The status line is normally assumed to be the same width as the width
of the terminal.
If this is untrue, you can specify it with the numeric
capability \fBwsl\fR.
.PP
A command to erase or blank the status line may be specified as \fBdsl\fR.
.PP
The boolean capability \fBeslok\fR specifies that escape sequences, tabs,
etc., work ordinarily in the status line.
.PP
The \fBncurses\fR implementation does not yet use any of these capabilities.
They are documented here in case they ever become important.
.PP
.SS Line Graphics
.PP
Many terminals have alternate character sets useful for forms-drawing.
Terminfo and \fBcurses\fR have built-in support
for most of the drawing characters
supported by the VT100, with some characters from the AT&T 4410v1 added.
This alternate character set may be specified by the \fBacsc\fR capability.
.PP
.TS H
center expand;
l l l l l
l l l l l
_ _ _ _ _
lw25 lw10 lw6 lw6 lw6.
.\".TH
\fBGlyph ACS Ascii acsc acsc\fR
\fBName Name Default Char Value\fR
arrow pointing right ACS_RARROW > + 0x2b
arrow pointing left ACS_LARROW < , 0x2c
arrow pointing up ACS_UARROW ^ \- 0x2d
arrow pointing down ACS_DARROW v . 0x2e
solid square block ACS_BLOCK # 0 0x30
diamond ACS_DIAMOND + ` 0x60
checker board (stipple) ACS_CKBOARD : a 0x61
degree symbol ACS_DEGREE \e f 0x66
plus/minus ACS_PLMINUS # g 0x67
board of squares ACS_BOARD # h 0x68
lantern symbol ACS_LANTERN # i 0x69
lower right corner ACS_LRCORNER + j 0x6a
upper right corner ACS_URCORNER + k 0x6b
upper left corner ACS_ULCORNER + l 0x6c
lower left corner ACS_LLCORNER + m 0x6d
large plus or crossover ACS_PLUS + n 0x6e
scan line 1 ACS_S1 ~ o 0x6f
scan line 3 ACS_S3 \- p 0x70
horizontal line ACS_HLINE \- q 0x71
scan line 7 ACS_S7 \- r 0x72
scan line 9 ACS_S9 \&_ s 0x73
tee pointing right ACS_LTEE + t 0x74
tee pointing left ACS_RTEE + u 0x75
tee pointing up ACS_BTEE + v 0x76
tee pointing down ACS_TTEE + w 0x77
vertical line ACS_VLINE | x 0x78
less-than-or-equal-to ACS_LEQUAL < y 0x79
greater-than-or-equal-to ACS_GEQUAL > z 0x7a
greek pi ACS_PI * { 0x7b
not-equal ACS_NEQUAL ! | 0x7c
UK pound sign ACS_STERLING f } 0x7d
bullet ACS_BULLET o ~ 0x7e
.TE
.PP
A few notes apply to the table itself:
.bP
X/Open Curses incorrectly states that the mapping for \fIlantern\fP is
uppercase \*(``I\*('' although Unix implementations use the
lowercase \*(``i\*('' mapping.
.bP
The DEC VT100 implemented graphics using the alternate character set
feature, temporarily switching \fImodes\fP and sending characters
in the range 0x60 (96) to 0x7e (126)
(the \fBacsc Value\fP column in the table).
.bP
The AT&T terminal added graphics characters outside that range.
.IP
Some of the characters within the range do not match the VT100;
presumably they were used in the AT&T terminal:
\fIboard of squares\fP replaces the VT100 \fInewline\fP symbol, while
\fIlantern symbol\fP replaces the VT100 \fIvertical tab\fP symbol.
The other VT100 symbols for control characters (\fIhorizontal tab\fP,
\fIcarriage return\fP and \fIline-feed\fP) are not (re)used in curses.
.PP
The best way to define a new device's graphics set is to add a column
to a copy of this table for your terminal, giving the character which
(when emitted between \fBsmacs\fR/\fBrmacs\fR switches) will be rendered
as the corresponding graphic.
Then read off the VT100/your terminal
character pairs right to left in sequence; these become the ACSC string.
.PP
.SS Color Handling
.PP
The curses library functions \fBinit_pair\fP and \fBinit_color\fP
manipulate the \fIcolor pairs\fP and \fIcolor values\fP discussed in this
section
(see \fBcurs_color\fP(3X) for details on these and related functions).
.PP
Most color terminals are either \*(``Tektronix-like\*('' or \*(``HP-like\*('':
.bP
Tektronix-like
terminals have a predefined set of \fIN\fP colors
(where \fIN\fP is usually 8),
and can set
character-cell foreground and background characters independently, mixing them
into \fIN\fP\ *\ \fIN\fP color-pairs.
.bP
On HP-like terminals, the user must set each color
pair up separately (foreground and background are not independently settable).
Up to \fIM\fP color-pairs may be set up from 2*\fIM\fP different colors.
ANSI-compatible terminals are Tektronix-like.
.PP
Some basic color capabilities are independent of the color method.
The numeric
capabilities \fBcolors\fR and \fBpairs\fR specify the maximum numbers of colors
and color-pairs that can be displayed simultaneously.
The \fBop\fR (original
pair) string resets foreground and background colors to their default values
for the terminal.
The \fBoc\fR string resets all colors or color-pairs to
their default values for the terminal.
Some terminals (including many PC
terminal emulators) erase screen areas with the current background color rather
than the power-up default background; these should have the boolean capability
\fBbce\fR.
.PP
While the curses library works with \fIcolor pairs\fP
(reflecting the inability of some devices to set foreground
and background colors independently),
there are separate capabilities for setting these features:
.bP
To change the current foreground or background color on a Tektronix-type
terminal, use \fBsetaf\fR (set ANSI foreground) and \fBsetab\fR (set ANSI
background) or \fBsetf\fR (set foreground) and \fBsetb\fR (set background).
These take one parameter, the color number.
The SVr4 documentation describes
only \fBsetaf\fR/\fBsetab\fR; the XPG4 draft says that "If the terminal
supports ANSI escape sequences to set background and foreground, they should
be coded as \fBsetaf\fR and \fBsetab\fR, respectively.
.bP
If the terminal
supports other escape sequences to set background and foreground, they should
be coded as \fBsetf\fR and \fBsetb\fR, respectively.
The \fBvidputs\fR and the \fBrefresh\fP(3X) functions
use the \fBsetaf\fR and \fBsetab\fR capabilities if they are defined.
.PP
The \fBsetaf\fR/\fBsetab\fR and \fBsetf\fR/\fBsetb\fR capabilities take a
single numeric argument each.
Argument values 0-7 of \fBsetaf\fR/\fBsetab\fR are portably defined as
follows (the middle column is the symbolic #define available in the header for
the \fBcurses\fR or \fBncurses\fR libraries).
The terminal hardware is free to
map these as it likes, but the RGB values indicate normal locations in color
space.
.PP
.TS H
center;
l c c c
l l n l.
\fBColor #define Value RGB\fR
black \fBCOLOR_BLACK\fR 0 0, 0, 0
red \fBCOLOR_RED\ \fR 1 max,0,0
green \fBCOLOR_GREEN\fR 2 0,max,0
yellow \fBCOLOR_YELLOW\fR 3 max,max,0
blue \fBCOLOR_BLUE\fR 4 0,0,max
magenta \fBCOLOR_MAGENTA\fR 5 max,0,max
cyan \fBCOLOR_CYAN\fR 6 0,max,max
white \fBCOLOR_WHITE\fR 7 max,max,max
.TE
.PP
The argument values of \fBsetf\fR/\fBsetb\fR historically correspond to
a different mapping, i.e.,
.TS H
center;
l c c c
l l n l.
\fBColor #define Value RGB\fR
black \fBCOLOR_BLACK\fR 0 0, 0, 0
blue \fBCOLOR_BLUE\fR 1 0,0,max
green \fBCOLOR_GREEN\fR 2 0,max,0
cyan \fBCOLOR_CYAN\fR 3 0,max,max
red \fBCOLOR_RED\ \fR 4 max,0,0
magenta \fBCOLOR_MAGENTA\fR 5 max,0,max
yellow \fBCOLOR_YELLOW\fR 6 max,max,0
white \fBCOLOR_WHITE\fR 7 max,max,max
.TE
.PP
It is important to not confuse the two sets of color capabilities;
otherwise red/blue will be interchanged on the display.
.PP
On an HP-like terminal, use \fBscp\fR with a color-pair number parameter to set
which color pair is current.
.PP
Some terminals allow the \fIcolor values\fP to be modified:
.bP
On a Tektronix-like terminal, the capability \fBccc\fR may be present to
indicate that colors can be modified.
If so, the \fBinitc\fR capability will
take a color number (0 to \fBcolors\fR \- 1)and three more parameters which
describe the color.
These three parameters default to being interpreted as RGB
(Red, Green, Blue) values.
If the boolean capability \fBhls\fR is present,
they are instead as HLS (Hue, Lightness, Saturation) indices.
The ranges are
terminal-dependent.
.bP
On an HP-like terminal, \fBinitp\fR may give a capability for changing a
color-pair value.
It will take seven parameters; a color-pair number (0 to
\fBmax_pairs\fR \- 1), and two triples describing first background and then
foreground colors.
These parameters must be (Red, Green, Blue) or
(Hue, Lightness, Saturation) depending on \fBhls\fR.
.PP
On some color terminals, colors collide with highlights.
You can register
these collisions with the \fBncv\fR capability.
This is a bit-mask of
attributes not to be used when colors are enabled.
The correspondence with the
attributes understood by \fBcurses\fR is as follows:
.PP
.TS
center;
l l l l
lw20 lw2 lw10 lw10.
\fBAttribute Bit Decimal Set by\fR
A_STANDOUT 0 1 sgr
A_UNDERLINE 1 2 sgr
A_REVERSE 2 4 sgr
A_BLINK 3 8 sgr
A_DIM 4 16 sgr
A_BOLD 5 32 sgr
A_INVIS 6 64 sgr
A_PROTECT 7 128 sgr
A_ALTCHARSET 8 256 sgr
A_HORIZONTAL 9 512 sgr1
A_LEFT 10 1024 sgr1
A_LOW 11 2048 sgr1
A_RIGHT 12 4096 sgr1
A_TOP 13 8192 sgr1
A_VERTICAL 14 16384 sgr1
A_ITALIC 15 32768 sitm
.TE
.PP
For example, on many IBM PC consoles, the underline attribute collides with the
foreground color blue and is not available in color mode.
These should have
an \fBncv\fR capability of 2.
.PP
SVr4 curses does nothing with \fBncv\fR, ncurses recognizes it and optimizes
the output in favor of colors.
.PP
.SS Miscellaneous
If the terminal requires other than a null (zero) character as a pad, then this
can be given as pad.
Only the first character of the pad string is used.
If the terminal does not have a pad character, specify npc.
Note that ncurses implements the termcap-compatible \fBPC\fR variable;
though the application may set this value to something other than
a null, ncurses will test \fBnpc\fR first and use napms if the terminal
has no pad character.
.PP
If the terminal can move up or down half a line,
this can be indicated with
.B hu
(half-line up)
and
.B hd
(half-line down).
This is primarily useful for superscripts and subscripts on hard-copy terminals.
If a hard-copy terminal can eject to the next page (form feed), give this as
.B ff
(usually control/L).
.PP
If there is a command to repeat a given character a given number of
times (to save time transmitting a large number of identical characters)
this can be indicated with the parameterized string
.BR rep .
The first parameter is the character to be repeated and the second
is the number of times to repeat it.
Thus, tparm(repeat_char, 'x', 10) is the same as \*(``xxxxxxxxxx\*(''.
.PP
If the terminal has a settable command character, such as the \s-1TEKTRONIX\s+1 4025,
this can be indicated with
.BR cmdch .
A prototype command character is chosen which is used in all capabilities.
This character is given in the
.B cmdch
capability to identify it.
The following convention is supported on some UNIX systems:
The environment is to be searched for a
.B CC
variable, and if found, all
occurrences of the prototype character are replaced with the character
in the environment variable.
.PP
Terminal descriptions that do not represent a specific kind of known
terminal, such as
.IR switch ,
.IR dialup ,
.IR patch ,
and
.IR network ,
should include the
.B gn
(generic) capability so that programs can complain that they do not know
how to talk to the terminal.
(This capability does not apply to
.I virtual
terminal descriptions for which the escape sequences are known.)
.PP
If the terminal has a \*(``meta key\*('' which acts as a shift key,
setting the 8th bit of any character transmitted, this fact can
be indicated with
.BR km .
Otherwise, software will assume that the 8th bit is parity and it
will usually be cleared.
If strings exist to turn this \*(``meta mode\*('' on and off, they
can be given as
.B smm
and
.BR rmm .
.PP
If the terminal has more lines of memory than will fit on the screen
at once, the number of lines of memory can be indicated with
.BR lm .
A value of
.BR lm #0
indicates that the number of lines is not fixed,
but that there is still more memory than fits on the screen.
.PP
If the terminal is one of those supported by the \s-1UNIX\s+1 virtual
terminal protocol, the terminal number can be given as
.BR vt .
.PP
Media copy
strings which control an auxiliary printer connected to the terminal
can be given as
.BR mc0 :
print the contents of the screen,
.BR mc4 :
turn off the printer, and
.BR mc5 :
turn on the printer.
When the printer is on, all text sent to the terminal will be sent
to the printer.
It is undefined whether the text is also displayed on the terminal screen
when the printer is on.
A variation
.B mc5p
takes one parameter, and leaves the printer on for as many characters
as the value of the parameter, then turns the printer off.
The parameter should not exceed 255.
All text, including
.BR mc4 ,
is transparently passed to the printer while an
.B mc5p
is in effect.
.PP
.SS Glitches and Braindamage
.PP
Hazeltine terminals, which do not allow \*(``~\*('' characters to be displayed should
indicate \fBhz\fR.
.PP
Terminals which ignore a line-feed immediately after an \fBam\fR wrap,
such as the Concept and vt100,
should indicate \fBxenl\fR.
.PP
If
.B el
is required to get rid of standout
(instead of merely writing normal text on top of it),
\fBxhp\fP should be given.
.PP
Teleray terminals, where tabs turn all characters moved over to blanks,
should indicate \fBxt\fR (destructive tabs).
Note: the variable indicating this is now \*(``dest_tabs_magic_smso\*(''; in
older versions, it was teleray_glitch.
This glitch is also taken to mean that it is not possible to position
the cursor on top of a \*(``magic cookie\*('',
that to erase standout mode it is instead necessary to use
delete and insert line.
The ncurses implementation ignores this glitch.
.PP
The Beehive Superbee, which is unable to correctly transmit the escape
or control/C characters, has
.BR xsb ,
indicating that the f1 key is used for escape and f2 for control/C.
(Only certain Superbees have this problem, depending on the ROM.)
Note that in older terminfo versions, this capability was called
\*(``beehive_glitch\*(''; it is now \*(``no_esc_ctl_c\*(''.
.PP
Other specific terminal problems may be corrected by adding more
capabilities of the form \fBx\fR\fIx\fR.
.PP
.SS Pitfalls of Long Entries
.PP
Long terminfo entries are unlikely to be a problem; to date, no entry has even
approached terminfo's 4096-byte string-table maximum.
Unfortunately, the termcap
translations are much more strictly limited (to 1023 bytes), thus termcap translations
of long terminfo entries can cause problems.
.PP
The man pages for 4.3BSD and older versions of \fBtgetent\fP instruct the user to
allocate a 1024-byte buffer for the termcap entry.
The entry gets null-terminated by
the termcap library, so that makes the maximum safe length for a termcap entry
1k\-1 (1023) bytes.
Depending on what the application and the termcap library
being used does, and where in the termcap file the terminal type that \fBtgetent\fP
is searching for is, several bad things can happen.
.PP
Some termcap libraries print a warning message or exit if they find an
entry that's longer than 1023 bytes; others do not; others truncate the
entries to 1023 bytes.
Some application programs allocate more than
the recommended 1K for the termcap entry; others do not.
.PP
Each termcap entry has two important sizes associated with it: before
\*(``tc\*('' expansion, and after \*(``tc\*('' expansion.
\*(``tc\*('' is the capability that
tacks on another termcap entry to the end of the current one, to add
on its capabilities.
If a termcap entry does not use the \*(``tc\*(''
capability, then of course the two lengths are the same.
.PP
The \*(``before tc expansion\*('' length is the most important one, because it
affects more than just users of that particular terminal.
This is the
length of the entry as it exists in /etc/termcap, minus the
backslash-newline pairs, which \fBtgetent\fP strips out while reading it.
Some termcap libraries strip off the final newline, too (GNU termcap does not).
Now suppose:
.bP
a termcap entry before expansion is more than 1023 bytes long,
.bP
and the application has only allocated a 1k buffer,
.bP
and the termcap library (like the one in BSD/OS 1.1 and GNU) reads
the whole entry into the buffer, no matter what its length, to see
if it is the entry it wants,
.bP
and \fBtgetent\fP is searching for a terminal type that either is the
long entry, appears in the termcap file after the long entry, or
does not appear in the file at all (so that \fBtgetent\fP has to search
the whole termcap file).
.PP
Then \fBtgetent\fP will overwrite memory, perhaps its stack, and probably core dump
the program.
Programs like telnet are particularly vulnerable; modern telnets
pass along values like the terminal type automatically.
The results are almost
as undesirable with a termcap library, like SunOS 4.1.3 and Ultrix 4.4, that
prints warning messages when it reads an overly long termcap entry.
If a
termcap library truncates long entries, like OSF/1 3.0, it is immune to dying
here but will return incorrect data for the terminal.
.PP
The \*(``after tc expansion\*('' length will have a similar effect to the
above, but only for people who actually set TERM to that terminal
type, since \fBtgetent\fP only does \*(``tc\*('' expansion once it is found the
terminal type it was looking for, not while searching.
.PP
In summary, a termcap entry that is longer than 1023 bytes can cause,
on various combinations of termcap libraries and applications, a core
dump, warnings, or incorrect operation.
If it is too long even before
\*(``tc\*('' expansion, it will have this effect even for users of some other
terminal types and users whose TERM variable does not have a termcap
entry.
.PP
When in \-C (translate to termcap) mode, the \fBncurses\fR implementation of
\fB@TIC@\fR(1M) issues warning messages when the pre-tc length of a termcap
translation is too long.
The \-c (check) option also checks resolved (after tc
expansion) lengths.
.SS Binary Compatibility
It is not wise to count on portability of binary terminfo entries between
commercial UNIX versions.
The problem is that there are at least two versions
of terminfo (under HP\-UX and AIX) which diverged from System V terminfo after
SVr1, and have added extension capabilities to the string table that (in the
binary format) collide with System V and XSI Curses extensions.
.SH EXTENSIONS
.PP
Searching for terminal descriptions in
\fB$HOME/.terminfo\fR and TERMINFO_DIRS
is not supported by older implementations.
.PP
Some SVr4 \fBcurses\fR implementations, and all previous to SVr4, do not
interpret the %A and %O operators in parameter strings.
.PP
SVr4/XPG4 do not specify whether \fBmsgr\fR licenses movement while in
an alternate-character-set mode (such modes may, among other things, map
CR and NL to characters that do not trigger local motions).
The \fBncurses\fR implementation ignores \fBmsgr\fR in \fBALTCHARSET\fR
mode.
This raises the possibility that an XPG4
implementation making the opposite interpretation may need terminfo
entries made for \fBncurses\fR to have \fBmsgr\fR turned off.
.PP
The \fBncurses\fR library handles insert-character and insert-character modes
in a slightly non-standard way to get better update efficiency.
See
the \fBInsert/Delete Character\fR subsection above.
.PP
The parameter substitutions for \fBset_clock\fR and \fBdisplay_clock\fR are
not documented in SVr4 or the XSI Curses standard.
They are deduced from the
documentation for the AT&T 505 terminal.
.PP
Be careful assigning the \fBkmous\fR capability.
The \fBncurses\fR library wants to interpret it as \fBKEY_MOUSE\fR,
for use by terminals and emulators like xterm
that can return mouse-tracking information in the keyboard-input stream.
.PP
X/Open Curses does not mention italics.
Portable applications must assume that numeric capabilities are
signed 16-bit values.
This includes the \fIno_color_video\fP (ncv) capability.
The 32768 mask value used for italics with ncv can be confused with
an absent or cancelled ncv.
If italics should work with colors,
then the ncv value must be specified, even if it is zero.
.PP
Different commercial ports of terminfo and curses support different subsets of
the XSI Curses standard and (in some cases) different extension sets.
Here
is a summary, accurate as of October 1995:
.bP
\fBSVR4, Solaris, ncurses\fR \-\-
These support all SVr4 capabilities.
.bP
\fBSGI\fR \-\-
Supports the SVr4 set, adds one undocumented extended string
capability (\fBset_pglen\fR).
.bP
\fBSVr1, Ultrix\fR \-\-
These support a restricted subset of terminfo capabilities.
The booleans end with \fBxon_xoff\fR;
the numerics with \fBwidth_status_line\fR;
and the strings with \fBprtr_non\fR.
.bP
\fBHP/UX\fR \-\-
Supports the SVr1 subset, plus the SVr[234] numerics \fBnum_labels\fR,
\fBlabel_height\fR, \fBlabel_width\fR, plus function keys 11 through 63, plus
\fBplab_norm\fR, \fBlabel_on\fR, and \fBlabel_off\fR, plus some incompatible
extensions in the string table.
.bP
\fBAIX\fR \-\-
Supports the SVr1 subset, plus function keys 11 through 63, plus a number
of incompatible string table extensions.
.bP
\fBOSF\fR \-\-
Supports both the SVr4 set and the AIX extensions.
.SH FILES
.TP 25
\*d/?/*
files containing terminal descriptions
.SH SEE ALSO
+\fB@INFOCMP@\fR(1M),
\fB@TABS@\fR(1),
\fB@TIC@\fR(1M),
-\fB@INFOCMP@\fR(1M),
\fBcurses\fR(3X),
\fBcurs_color\fR(3X),
\fBcurs_variables\fR(3X),
\fBprintf\fR(3),
-\fBterm\fR(\*n).
\fBterm_variables\fR(3X).
+\fBterm\fR(\*n).
\fBuser_caps\fR(5).
.SH AUTHORS
Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey.
Based on pcurses by Pavel Curtis.
diff --git a/contrib/ncurses/man/tic.1m b/contrib/ncurses/man/tic.1m
index f7fe26b67b65..f0a627d96af8 100644
--- a/contrib/ncurses/man/tic.1m
+++ b/contrib/ncurses/man/tic.1m
@@ -1,591 +1,591 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: tic.1m,v 1.77 2020/02/02 23:34:34 tom Exp $
+.\" $Id: tic.1m,v 1.78 2020/12/19 21:32:45 tom Exp $
.TH @TIC@ 1M ""
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.ds n 5
.ds d @TERMINFO@
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fB@TIC@\fR \- the \fIterminfo\fR entry-description compiler
.SH SYNOPSIS
\fB@TIC@\fR
[\fB\-\
0\
1\
C\
D\
G\
I\
K\
L\
N\
T\
U\
V\
W\
a\
c\
f\
g\
q\
r\
s\
t\
x\
\fR]
[\fB\-e\fR \fInames\fR]
[\fB\-o\fR \fIdir\fR]
[\fB\-Q\fR[\fIn\fR]]
[\fB\-R\fR \fIsubset\fR]
[\fB\-v\fR[\fIn\fR]]
[\fB\-w\fR[\fIn\fR]]
\fIfile\fR
.br
.SH DESCRIPTION
The \fB@TIC@\fR command translates a \fBterminfo\fR file from source
format into compiled format.
The compiled format is necessary for use with
the library routines in \fBncurses\fR(3X).
.PP
As described in \fBterm\fR(\*n), the database may be either a directory
tree (one file per terminal entry) or a hashed database (one record per entry).
The \fB@TIC@\fR command writes only one type of entry,
depending on how it was built:
.bP
For directory trees, the top-level directory, e.g., /usr/share/terminfo,
specifies the location of the database.
.bP
For hashed databases, a filename is needed.
If the given file is not found by that name,
but can be found by adding the suffix ".db",
then that is used.
.IP
The default name for the hashed database is the same as the
default directory name (only adding a ".db" suffix).
.PP
In either case (directory or hashed database),
\fB@TIC@\fP will create the container if it does not exist.
For a directory, this would be the \*(``terminfo\*('' leaf,
versus a "terminfo.db" file.
.PP
The results are normally placed in the system terminfo database \fB\*d\fR.
The compiled terminal description can be placed
in a different terminfo database.
There are two ways to achieve this:
.bP
First, you may override the system default either by
using the \fB\-o\fP option,
or by setting the variable \fBTERMINFO\fR
in your shell environment to a valid database location.
.bP
Secondly, if \fB@TIC@\fR cannot write in \fI\*d\fR
or the location specified using your TERMINFO variable,
it looks for the directory \fI$HOME/.terminfo\fR
(or hashed database \fI$HOME/.terminfo.db)\fR;
if that location exists, the entry is placed there.
.PP
Libraries that read terminfo entries are expected to check in succession
.bP
a location specified with the TERMINFO environment variable,
.bP
\fI$HOME/.terminfo\fR,
.bP
directories listed in the TERMINFO_DIRS environment variable,
.bP
a compiled-in list of directories (@TERMINFO_DIRS@), and
.bP
the system terminfo database (\fI\*d\fR).
.SS ALIASES
.PP
This is the same program as @INFOTOCAP@ and @CAPTOINFO@;
usually those are linked to, or copied from this program:
.bP
When invoked as @INFOTOCAP@, @TIC@ sets the \fB\-I\fP option.
.bP
When invoked as @CAPTOINFO@, @TIC@ sets the \fB\-C\fP option.
.SS OPTIONS
.TP
\fB\-0\fR
restricts the output to a single line
.TP
\fB\-1\fR
restricts the output to a single column
.TP
\fB\-a\fR
tells \fB@TIC@\fP to retain commented-out capabilities rather than discarding
them.
Capabilities are commented by prefixing them with a period.
This sets the \fB\-x\fR option, because it treats the commented-out
entries as user-defined names.
If the source is termcap, accept the 2-character names required by version 6.
Otherwise these are ignored.
.TP
\fB\-C\fR
Force source translation to termcap format.
Note: this differs from the \fB\-C\fR
option of \fB@INFOCMP@\fR(1M) in that it does not merely translate capability
names, but also translates terminfo strings to termcap format.
Capabilities
that are not translatable are left in the entry under their terminfo names
but commented out with two preceding dots.
The actual format used incorporates some improvements for escaped characters
from terminfo format.
For a stricter BSD-compatible translation, add the \fB\-K\fR option.
.IP
If this is combined with \fB\-c\fR, \fB@TIC@\fR makes additional checks
to report cases where the terminfo values do not have an exact equivalent
in termcap form.
For example:
.RS
.bP
\fBsgr\fP usually will not convert, because termcap lacks the ability to
work with more than two parameters, and because termcap lacks many of
the arithmetic/logical operators used in terminfo.
.bP
capabilities with more than one delay or with delays before the end of
the string will not convert completely.
.RE
.TP
\fB\-c\fR
tells \fB@TIC@\fP to only check \fIfile\fR for errors,
including syntax problems and bad use-links.
If you specify \fB\-C\fR (\fB\-I\fR) with this option, the code
will print warnings about entries which, after use resolution, are more than
1023 (4096) bytes long.
Due to a fixed buffer length in older termcap libraries,
as well as buggy checking for the buffer length
(and a documented limit in terminfo),
these entries may cause core
dumps with other implementations.
.IP
\fB@TIC@\fP checks string capabilities to ensure that those with parameters
will be valid expressions.
It does this check only for the predefined string capabilities;
those which are defined with the \fB\-x\fP option are ignored.
.TP
\fB\-D\fR
tells \fB@TIC@\fP to print the database locations that it knows about, and exit.
The first location shown is the one to which it would write compiled
terminal descriptions.
If \fB@TIC@\fP is not able to find a writable database location
according to the rules summarized above,
it will print a diagnostic and exit with an error rather than
printing a list of database locations.
.TP
\fB\-e \fR\fInames\fR
Limit writes and translations to the following comma-separated list of
terminals.
If any name or alias of a terminal matches one of the names in
the list, the entry will be written or translated as normal.
Otherwise no output will be generated for it.
The option value is interpreted as a file containing the list if it
contains a '/'.
(Note: depending on how @TIC@ was compiled,
this option may require \fB\-I\fR or \fB\-C\fR.)
.TP
\fB\-f\fR
Display complex terminfo strings which contain if/then/else/endif expressions
indented for readability.
.TP
\fB\-G\fR
Display constant literals in decimal form
rather than their character equivalents.
.TP
\fB\-g\fR
Display constant character literals in quoted form
rather than their decimal equivalents.
.TP
\fB\-I\fR
Force source translation to terminfo format.
.TP
\fB\-K\fR
Suppress some longstanding ncurses extensions to termcap format,
e.g., "\\s" for space.
.TP
\fB\-L\fR
Force source translation to terminfo format
using the long C variable names listed in <\fBterm.h\fR>
.TP
\fB\-N\fR
Disable smart defaults.
Normally, when translating from termcap to terminfo, the compiler makes
a number of assumptions about the defaults of string capabilities
\fBreset1_string\fR, \fBcarriage_return\fR, \fBcursor_left\fR,
\fBcursor_down\fR, \fBscroll_forward\fR, \fBtab\fR, \fBnewline\fR,
\fBkey_backspace\fR, \fBkey_left\fR, and \fBkey_down\fR, then attempts
to use obsolete termcap capabilities to deduce correct values.
It also
normally suppresses output of obsolete termcap capabilities such as \fBbs\fR.
This option forces a more literal translation that also preserves the
obsolete capabilities.
.TP
\fB\-o\fR\fIdir\fR
Write compiled entries to given database location.
Overrides the TERMINFO environment variable.
.TP
\fB\-Q\fR\fIn\fR
Rather than show source in terminfo (text) format,
print the compiled (binary) format in hexadecimal or base64 form,
depending on the option's value:
.RS 8
.TP 3
1
hexadecimal
.TP 3
2
base64
.TP 3
3
hexadecimal and base64
.RE
.TP
\fB\-q\fR
Suppress comments and blank lines when showing translated source.
.TP
\fB\-R\fR\fIsubset\fR
Restrict output to a given subset.
This option is for use with archaic
versions of terminfo like those on SVr1, Ultrix, or HP/UX that do not support
the full set of SVR4/XSI Curses terminfo; and outright broken ports like AIX 3.x
that have their own extensions incompatible with SVr4/XSI.
Available subsets
are \*(``SVr1\*('', \*(``Ultrix\*('', \*(``HP\*('', \*(``BSD\*('' and \*(``AIX\*('';
see \fBterminfo\fR(\*n) for details.
.TP
\fB\-r\fR
Force entry resolution (so there are no remaining tc capabilities) even
when doing translation to termcap format.
This may be needed if you are
preparing a termcap file for a termcap library (such as GNU termcap through
version 1.3 or BSD termcap through 4.3BSD) that does not handle multiple
tc capabilities per entry.
.TP
\fB\-s\fR
Summarize the compile by showing the database location into which entries
are written, and the number of entries which are compiled.
.TP
\fB\-T\fR
eliminates size-restrictions on the generated text.
This is mainly useful for testing and analysis, since the compiled
descriptions are limited (e.g., 1023 for termcap, 4096 for terminfo).
.TP
\fB\-t\fR
tells \fB@TIC@\fP to discard commented-out capabilities.
Normally when translating from terminfo to termcap,
untranslatable capabilities are commented-out.
.TP 5
\fB\-U\fR
tells \fB@TIC@\fP to not post-process the data after parsing the source file.
Normally, it infers data which is commonly missing in older terminfo data,
or in termcaps.
.TP
\fB\-V\fR
reports the version of ncurses which was used in this program, and exits.
.TP
\fB\-v\fR\fIn\fR
specifies that (verbose) output be written to standard error trace
information showing \fB@TIC@\fR's progress.
.IP
The optional parameter \fIn\fR is a number from 1 to 10, inclusive,
indicating the desired level of detail of information.
If ncurses is built without tracing support, the optional parameter is ignored.
If \fIn\fR is omitted, the default level is 1.
If \fIn\fR is specified and greater than 1, the level of
detail is increased.
.RS
.PP
The debug flag levels are as follows:
.TP
1
Names of files created and linked
.TP
2
Information related to the \*(``use\*('' facility
.TP
3
Statistics from the hashing algorithm
.TP
5
String-table memory allocations
.TP
7
Entries into the string-table
.TP
8
List of tokens encountered by scanner
.TP
9
All values computed in construction of the hash table
.LP
If the debug level \fIn\fR is not given, it is taken to be one.
.RE
.TP
\fB\-W\fR
By itself, the \fB\-w\fP option will not force long strings to be wrapped.
Use the \fB\-W\fP option to do this.
.IP
If you specify both \fB\-f\fP and \fB\-W\fP options,
the latter is ignored when \fB\-f\fP has already split the line.
.TP
\fB\-w\fR\fIn\fR
specifies the width of the output.
The parameter is optional.
If it is omitted, it defaults to 60.
.TP
\fB\-x\fR
Treat unknown capabilities as user-defined (see \fBuser_caps(\*n)\fP).
That is, if you supply a capability name which \fB@TIC@\fP does not recognize,
it will infer its type (boolean, number or string) from the syntax and
make an extended table entry for that.
User-defined capability strings
whose name begins with \*(``k\*('' are treated as function keys.
.SS PARAMETERS
.TP
\fIfile\fR
contains one or more \fBterminfo\fR terminal descriptions in source
format [see \fBterminfo\fR(\*n)].
Each description in the file
describes the capabilities of a particular terminal.
.IP
If \fIfile\fR is \*(``-\*('', then the data is read from the standard input.
The \fIfile\fR parameter may also be the path of a character-device.
.SS PROCESSING
.PP
All but one of the capabilities recognized by \fB@TIC@\fR are documented
in \fBterminfo\fR(\*n).
The exception is the \fBuse\fR capability.
.PP
When a \fBuse\fR=\fIentry\fR\-\fIname\fR field is discovered in a
terminal entry currently being compiled, \fB@TIC@\fR reads in the binary
from \fB\*d\fR to complete the entry.
(Entries created from
\fIfile\fR will be used first.
\fB@TIC@\fR duplicates the capabilities in
\fIentry\fR\-\fIname\fR for the current entry, with the exception of
those capabilities that explicitly are defined in the current entry.
.PP
When an entry, e.g., \fBentry_name_1\fR, contains a
\fBuse=\fR\fIentry\fR_\fIname\fR_\fI2\fR field, any canceled
capabilities in \fIentry\fR_\fIname\fR_\fI2\fR must also appear in
\fBentry_name_1\fR before \fBuse=\fR for these capabilities to be
canceled in \fBentry_name_1\fR.
.PP
Total compiled entries cannot exceed 4096 bytes.
The name field cannot
exceed 512 bytes.
Terminal names exceeding the maximum alias length
(32 characters on systems with long filenames, 14 characters otherwise)
will be truncated to the maximum alias length
and a warning message will be printed.
.SH HISTORY
.PP
System V Release 2 provided a \fBtic\fP utility.
It accepted a single option: \fB\-v\fP (optionally followed by a number).
According to Ross Ridge's comment in \fImytinfo\fP,
this version of \fBtic\fP was
unable to represent cancelled capabilities.
.PP
System V Release 3 provided a different \fBtic\fP utility,
written by Pavel Curtis,
(originally named \*(``compile\*('' in \fIpcurses\fP).
This added an option \fB\-c\fP to check the file for
errors, with the caveat that errors in \*(``use=\*('' links
would not be reported.
System V Release 3 documented a few warning messages which
did not appear in \fIpcurses\fP.
While the program itself was changed little as development
continued with System V Release 4,
the table of capabilities grew from 180 (\fIpcurses\fP) to 464 (Solaris).
.PP
In early development of ncurses (1993),
Zeyd Ben-Halim used the table from \fImytinfo\fP to
extend the \fIpcurses\fP table to 469 capabilities
(456 matched SVr4, 8 were only in SVr4, 13 were not in SVr4).
Of those 13, 11 were ultimately discarded
(perhaps to match the draft of X/Open Curses).
The exceptions were
\fBmemory_lock_above\fP and
\fBmemory_unlock\fP (see \fBuser_caps\fP(5)).
.PP
Eric Raymond incorporated parts of \fImytinfo\fP into ncurses
to implement the termcap-to-terminfo source conversion,
and extended that to begin development of
the corresponding terminfo-to-termcap source conversion,
Thomas Dickey completed that development over the course of several years.
.PP
In 1999, Thomas Dickey added the \fB\-x\fP option
to support user-defined capabilities.
.PP
In 2010, Roy Marples provided a \fBtic\fP program
and terminfo library for NetBSD.
That implementation adapts several features from ncurses,
including \fB@TIC@\fP's \fB\-x\fP option.
.PP
The \fB\-c\fP option tells \fB@TIC@\fP to check for problems in the
terminfo source file.
Continued development provides additional checks:
.bP
\fIpcurses\fP had 8 warnings
.bP
ncurses in 1996 had 16 warnings
.bP
Solaris (SVr4) curses has 28 warnings
.bP
NetBSD tic in 2019 has 19 warnings.
.bP
ncurses in 2019 has 96 warnings
.PP
The checking done in ncurses' \fB@TIC@\fP helps with the conversion to
termcap, as well as pointing out errors and inconsistencies.
It is also used to ensure consistency with the user-defined capabilities.
There are 527 distinct capabilities in ncurses' terminal database;
128 of those are user-defined.
.SH PORTABILITY
.PP
X/Open Curses, Issue 7 (2009) provides a brief description of \fBtic\fP.
It lists one option: \fB\-c\fP.
The omission of \fB\-v\fP is unexpected.
The change history states that the description is derived from True64 UNIX.
According to its manual pages, that system also supported the \fB\-v\fP option.
.PP
Shortly after Issue 7 was released, Tru64 was discontinued.
As of 2019, the surviving implementations of \fBtic\fP
are SVr4 (AIX, HP-UX and Solaris),
ncurses
and NetBSD curses.
The SVr4 \fBtic\fP programs all support the \fB\-v\fP option.
The NetBSD \fBtic\fP program follows X/Open's documentation,
omitting the \fB\-v\fP option.
.PP
The X/Open rationale states that some implementations of \fBtic\fP
read terminal descriptions from the standard input if the \fIfile\fP
parameter is omitted.
None of these implementations do that.
Further, it comments that some may choose to read from \*(''./terminfo.src\*(''
but that is obsolescent behavior from SVr2,
and is not (for example) a documented feature of SVr3.
.SS COMPATIBILITY
There is some evidence that historic \fB@TIC@\fR implementations treated
description fields with no whitespace in them as additional aliases or
short names.
This \fB@TIC@\fR does not do that, but it does warn when
description fields may be treated that way and check them for dangerous
characters.
.SS EXTENSIONS
Unlike the SVr4 \fB@TIC@\fR command, this implementation can actually
compile termcap sources.
In fact, entries in terminfo and termcap syntax can
be mixed in a single source file.
See \fBterminfo\fR(\*n) for the list of
termcap names taken to be equivalent to terminfo names.
.PP
The SVr4 manual pages are not clear on the resolution rules for \fBuse\fR
capabilities.
This implementation of \fB@TIC@\fR will find \fBuse\fR targets anywhere
in the source file, or anywhere in the file tree rooted at \fBTERMINFO\fR (if
\fBTERMINFO\fR is defined),
or in the user's \fI$HOME/.terminfo\fR database
(if it exists),
or (finally) anywhere in the system's file tree of
compiled entries.
.PP
The error messages from this \fB@TIC@\fR have the same format as GNU C
error messages, and can be parsed by GNU Emacs's compile facility.
.PP
Aside from \fB\-c\fP and \fB\-v\fP, options are not portable:
.bP
Most of @TIC@'s options
are not supported by SVr4 \fBtic\fP:
.sp
.RS
\fB\-0\fR
\fB\-1\fR
\fB\-C\fR
\fB\-G\fR
\fB\-I\fR
\fB\-N\fR
\fB\-R\fR
\fB\-T\fR
\fB\-V\fR
\fB\-a\fR
\fB\-e\fR
\fB\-f\fR
\fB\-g\fR
\fB\-o\fR
\fB\-r\fR
\fB\-s\fR
\fB\-t\fR
\fB\-x\fR
.RE
.bP
The NetBSD \fBtic\fP supports a few of the ncurses options
.sp
.RS
\fB\-a\fP
\fB\-o\fP
\fB\-x\fP
.RE
.IP
and adds \fB\-S\fP
(a feature which does the same thing
as @INFOCMP@'s \fB\-e\fP and \fB\-E\fP options).
.PP
The SVr4 \fB\-c\fR mode does not report bad \*(``use=\*('' links.
.PP
System V does not compile entries to or read entries from your
\fI$HOME/.terminfo\fR database unless TERMINFO is explicitly set to it.
.SH FILES
.TP 5
\fB\*d/?/*\fR
Compiled terminal description database.
.SH SEE ALSO
-\fB@INFOCMP@\fR(1M),
\fB@CAPTOINFO@\fR(1M),
+\fB@INFOCMP@\fR(1M),
\fB@INFOTOCAP@\fR(1M),
\fB@TOE@\fR(1M),
\fBcurses\fR(3X),
\fBterm\fR(\*n).
\fBterminfo\fR(\*n).
\fBuser_caps\fR(\*n).
.PP
This describes \fBncurses\fR
version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@).
.SH AUTHOR
Eric S. Raymond <esr@snark.thyrsus.com>
and
.br
Thomas E. Dickey <dickey@invisible-island.net>
diff --git a/contrib/ncurses/man/toe.1m b/contrib/ncurses/man/toe.1m
index e5fa1c6f3ccf..9a83821babc5 100644
--- a/contrib/ncurses/man/toe.1m
+++ b/contrib/ncurses/man/toe.1m
@@ -1,194 +1,194 @@
.\"***************************************************************************
.\" Copyright 2019,2020 Thomas E. Dickey *
.\" Copyright 1998-2015,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: toe.1m,v 1.32 2020/02/02 23:34:34 tom Exp $
+.\" $Id: toe.1m,v 1.33 2020/12/19 21:52:09 tom Exp $
.TH @TOE@ 1M ""
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de NS
.ie n .sp
.el .sp .5
.ie n .in +4
.el .in +2
.nf
.ft C \" Courier
..
.de NE
.fi
.ft R
.ie n .in -4
.el .in -2
..
.ds n 5
.ds d @TERMINFO@
.SH NAME
\fB@TOE@\fR \- table of (terminfo) entries
.SH SYNOPSIS
\fB@TOE@\fR [\fB\-v\fR[\fIn\fR]] [\fB\-ahsuUV\fR] \fIfile...\fR
.br
.SH DESCRIPTION
.PP
With no options,
\fB@TOE@\fR lists all available terminal types by primary name
with descriptions.
File arguments specify the directories to be scanned; if no
such arguments are given,
your default terminfo directory is scanned.
If you also specify the \fB\-h\fR option,
a directory header will be issued as each
directory is entered.
.PP
There are other options intended for use by terminfo file maintainers:
.TP
\fB\-a\fR
report on all of the terminal databases which ncurses would search,
rather than only the first one that it finds.
.IP
If the \fB\-s\fR is also given, \fB@TOE@\fR
adds a column to the report,
showing (like \fBconflict\fP(1)) which entries which
belong to a given terminal database.
An "*" marks entries which differ, and "+" marks equivalent entries.
.IP
Without the \fB\-s\fP option, \fB@TOE@\fR does not attempt to merge
duplicates in its report
.TP
\fB\-s\fR
sort the output by the entry names.
.TP
\fB\-u\fR \fIfile\fR
says to write a report to the standard output,
listing dependencies in the given terminfo/termcap source file.
The report condenses the \*(``use\*('' relation:
each line consists of the primary name of a terminal that
has use capabilities,
followed by a colon,
followed by the
whitespace-separated primary names of all terminals which occur in those use
capabilities,
followed by a newline
.TP
\fB\-U\fR \fIfile\fR
says to write a report to the standard output,
listing reverse dependencies in the given terminfo/termcap source file.
The report reverses the \*(``use\*('' relation:
each line consists of the primary name of a
terminal that occurs in use capabilities,
followed by a colon,
followed by the
whitespace-separated primary names of all terminals which depend on it,
followed by a newline.
.TP
\fB\-v\fR\fIn\fR
specifies that (verbose) output be written to standard error,
showing \fB@TOE@\fR's progress.
.IP
The optional parameter \fIn\fR is a number from 1 to 10,
interpreted as for \fB@TIC@\fR(1M).
If ncurses is built without tracing support, the optional parameter is ignored.
.TP
\fB\-V\fR
reports the version of ncurses which was used in this program,
and exits.
.SH EXAMPLES
.PP
Without sorting, the \fB\-a\fP option reports all of the names found
in all of the terminal databases found by the \fBTERMINFO\fP and
\fBTERMINFO_DIRS\fP environment variables:
.NS
MtxOrb162 16x2 Matrix Orbital LCD display
MtxOrb204 20x4 Matrix Orbital LCD display
MtxOrb Generic Matrix Orbital LCD display
qvt101+ qume qvt 101 PLUS product
qvt119+-25 QVT 119 PLUS with 25 data lines
qansi-g QNX ANSI
qvt103 qume qvt 103
qnxw QNX4 windows
qansi-w QNX ansi for windows
qnxm QNX4 with mouse events
qvt203-25-w QVT 203 PLUS with 25 by 132 columns
qansi-t QNX ansi without console writes
\&.\ .\ .
.NE
.PP
Use the \fB\-a\fP and \fB\-s\fP options together to show where each terminal
description was found:
.NS
--> /usr/local/ncurses/share/terminfo
----> /usr/share/terminfo
*-+-: 9term Plan9 terminal emulator for X
*---: Eterm Eterm with xterm-style color support (X Window System)
*-*-: Eterm-256color Eterm with xterm 256-colors
*-*-: Eterm-88color Eterm with 88 colors
*-+-: MtxOrb Generic Matrix Orbital LCD display
*-+-: MtxOrb162 16x2 Matrix Orbital LCD display
*-+-: MtxOrb204 20x4 Matrix Orbital LCD display
*-*-: NCR260VT300WPP NCR 2900_260 vt300 wide mode pc+ kybd
*-+-: aaa ann arbor ambassador/30 lines
*-+-: aaa+dec ann arbor ambassador in dec vt100 mode
*-+-: aaa+rv ann arbor ambassador in reverse video
\&.\ .\ .
.NE
.SH FILES
.TP 5
\fB\*d/?/*\fR
Compiled terminal description database.
.SH HISTORY
This utility is not provided by other implementations.
There is no relevant X/Open or POSIX standard for \fB@TOE@\fP.
.PP
The program name refers to a developer's pun:
.bP
\fBtic\fP,
.bP
\fBtac\fP (now \fBtack\fP),
.bP
\fBtoe\fP.
.PP
It replaced a \fB\-T\fP option which was briefly supported by
the ncurses \fBinfocmp\fP utility in 1995.
.PP
The \fB\-a\fP and \fB\-s\fP options were added to
\fB@TOE@\fR several years later (2006 and 2011, respectively).
.SH SEE ALSO
-\fB@TIC@\fR(1M),
-\fB@INFOCMP@\fR(1M),
\fB@CAPTOINFO@\fR(1M),
+\fB@INFOCMP@\fR(1M),
\fB@INFOTOCAP@\fR(1M),
+\fB@TIC@\fR(1M),
\fBcurses\fR(3X),
\fBterminfo\fR(\*n).
.PP
This describes \fBncurses\fR
version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@).
diff --git a/contrib/ncurses/man/tput.1 b/contrib/ncurses/man/tput.1
index bc2acaabb2d3..64fb453016eb 100644
--- a/contrib/ncurses/man/tput.1
+++ b/contrib/ncurses/man/tput.1
@@ -1,597 +1,597 @@
'\" t
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: tput.1,v 1.63 2020/02/02 23:34:34 tom Exp $
+.\" $Id: tput.1,v 1.65 2020/12/19 22:17:47 tom Exp $
.TH @TPUT@ 1 ""
.ds d @TERMINFO@
.ds n 1
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
\fB@TPUT@\fR, \fBreset\fR \- initialize a terminal or query terminfo database
.SH SYNOPSIS
\fB@TPUT@\fR [\fB\-T\fR\fItype\fR] \fIcapname\fR [\fIparameters\fR]
.br
\fB@TPUT@\fR [\fB\-T\fR\fItype\fR] [\fB\-x\fP] \fBclear\fR
.br
\fB@TPUT@\fR [\fB\-T\fR\fItype\fR] \fBinit\fR
.br
\fB@TPUT@\fR [\fB\-T\fR\fItype\fR] \fBreset\fR
.br
\fB@TPUT@\fR [\fB\-T\fR\fItype\fR] \fBlongname\fR
.br
\fB@TPUT@ \-S\fR \fB<<\fR
.br
\fB@TPUT@ \-V\fR
.br
.SH DESCRIPTION
The \fB@TPUT@\fR utility uses the \fBterminfo\fR database to make the
values of terminal-dependent capabilities and information available to
the shell (see \fBsh\fR(1)), to initialize or reset the terminal, or
return the long name of the requested terminal type.
The result depends upon the capability's type:
.RS 3
.TP 5
string
\fB@TPUT@\fR writes the string to the standard output.
No trailing newline is supplied.
.TP
integer
\fB@TPUT@\fR writes the decimal value to the standard output,
with a trailing newline.
.TP
boolean
\fB@TPUT@\fR simply sets the exit code
(\fB0\fR for TRUE if the terminal has the capability,
\fB1\fR for FALSE if it does not),
and writes nothing to the standard output.
.RE
.PP
Before using a value returned on the standard output,
the application should test the exit code
(e.g., \fB$?\fR, see \fBsh\fR(1)) to be sure it is \fB0\fR.
(See the \fBEXIT CODES\fR and \fBDIAGNOSTICS\fR sections.)
For a complete list of capabilities
and the \fIcapname\fR associated with each, see \fBterminfo\fR(5).
.SS Options
.TP
\fB\-S\fR
allows more than one capability per invocation of \fB@TPUT@\fR. The
capabilities must be passed to \fB@TPUT@\fR from the standard input
instead of from the command line (see example).
Only one \fIcapname\fR is allowed per line.
The \fB\-S\fR option changes the
meaning of the \fB0\fR and \fB1\fR boolean and string exit codes (see the
EXIT CODES section).
.IP
Because some capabilities may use
\fIstring\fP parameters rather than \fInumbers\fP,
\fB@TPUT@\fR uses a table and the presence of parameters in its input
to decide whether to use \fBtparm\fR(3X),
and how to interpret the parameters.
.TP
\fB\-T\fR\fItype\fR
indicates the \fItype\fR of terminal.
Normally this option is
unnecessary, because the default is taken from the environment
variable \fBTERM\fR.
If \fB\-T\fR is specified, then the shell
variables \fBLINES\fR and \fBCOLUMNS\fR will also be ignored.
.TP
\fB\-V\fR
reports the version of ncurses which was used in this program, and exits.
.TP
.B \-x
do not attempt to clear the terminal's scrollback buffer
using the extended \*(``E3\*('' capability.
.SS Commands
A few commands (\fBinit\fP, \fBreset\fP and \fBlongname\fP) are
special; they are defined by the \fB@TPUT@\fP program.
The others are the names of \fIcapabilities\fP from the terminal database
(see \fBterminfo\fR(5) for a list).
Although \fBinit\fP and \fBreset\fP resemble capability names,
\fB@TPUT@\fP uses several capabilities to perform these special functions.
.TP
\fIcapname\fR
indicates the capability from the terminal database.
.IP
If the capability is a string that takes parameters, the arguments
following the capability will be used as parameters for the string.
.IP
Most parameters are numbers.
Only a few terminal capabilities require string parameters;
\fB@TPUT@\fR uses a table to decide which to pass as strings.
Normally \fB@TPUT@\fR uses \fBtparm\fR(3X) to perform the substitution.
If no parameters are given for the capability,
\fB@TPUT@\fR writes the string without performing the substitution.
.TP
\fBinit\fR
If the terminal database is present and an entry for the user's
terminal exists (see \fB\-T\fR\fItype\fR, above), the following will
occur:
.RS
.TP 5
(1)
first, \fB@TPUT@\fR retrieves the current terminal mode settings
for your terminal.
It does this by successively testing
.RS
.bP
the standard error,
.bP
standard output,
.bP
standard input and
.bP
ultimately \*(``/dev/tty\*(''
.RE
.IP
to obtain terminal settings.
Having retrieved these settings, \fB@TPUT@\fP remembers which
file descriptor to use when updating settings.
.TP
(2)
if the window size cannot be obtained from the operating system,
but the terminal description (or environment, e.g., \fBLINES\fP
and \fBCOLUMNS\fP variables specify this),
update the operating system's notion of the window size.
.TP
(3)
the terminal modes will be updated:
.RS
.bP
any delays (e.g., newline) specified in the entry will
be set in the tty driver,
.bP
tabs expansion will be turned on or off according to
the specification in the entry, and
.bP
if tabs are not expanded,
standard tabs will be set (every 8 spaces).
.RE
.TP
(4)
if present, the terminal's initialization strings will be
output as detailed in the \fBterminfo\fR(5) section on
.IR "Tabs and Initialization" ,
.TP
(5)
output is flushed.
.RE
.IP
If an entry does not
contain the information needed for any of these activities,
that activity will silently be skipped.
.TP
\fBreset\fR
This is similar to \fBinit\fP, with two differences:
.RS
.TP 5
(1)
before any other initialization,
the terminal modes will be reset to a \*(``sane\*('' state:
.RS
.bP
set cooked and echo modes,
.bP
turn off cbreak and raw modes,
.bP
turn on newline translation and
.bP
reset any unset special characters to their default values
.RE
.TP 5
(2)
Instead of putting out \fIinitialization\fP strings, the terminal's
\fIreset\fP strings will be output if present
(\fBrs1\fR, \fBrs2\fR, \fBrs3\fR, \fBrf\fR).
If the \fIreset\fP strings are not present, but \fIinitialization\fP
strings are, the \fIinitialization\fP strings will be output.
.RE
.IP
Otherwise, \fBreset\fR acts identically to \fBinit\fR.
.TP
\fBlongname\fR
If the terminal database is present and an entry for the
user's terminal exists (see \fB\-T\fR\fItype\fR above), then the long name
of the terminal will be put out.
The long name is the last
name in the first line of the terminal's description in the
\fBterminfo\fR database [see \fBterm\fR(5)].
.SS Aliases
\fB@TPUT@\fR handles the \fBclear\fP, \fBinit\fP and \fBreset\fP
commands specially:
it allows for the possibility that it is invoked by a link with those names.
.PP
If \fB@TPUT@\fR is invoked by a link named \fBreset\fR, this has the
same effect as \fB@TPUT@ reset\fR.
The \fB@TSET@\fR(\*n) utility also treats a link named \fBreset\fP specially.
.PP
Before ncurses 6.1, the two utilities were different from each other:
.bP
\fB@TSET@\fP utility reset the terminal modes and special characters
(not done with \fB@TPUT@\fP).
.bP
On the other hand, \fB@TSET@\fP's repertoire of terminal capabilities for
resetting the terminal was more limited,
i.e., only \fBreset_1string\fP, \fBreset_2string\fP and \fBreset_file\fP
in contrast to the tab-stops and margins which are set by this utility.
.bP
The \fBreset\fP program is usually an alias for \fB@TSET@\fP,
because of this difference with resetting terminal modes and special characters.
.PP
With the changes made for ncurses 6.1, the \fIreset\fP feature of the
two programs is (mostly) the same.
A few differences remain:
.bP
The \fB@TSET@\fP program waits one second when resetting,
in case it happens to be a hardware terminal.
.bP
The two programs write the terminal initialization strings
to different streams (i.e., the standard error for \fB@TSET@\fP and the
standard output for \fB@TPUT@\fP).
.IP
\fBNote:\fP although these programs write to different streams,
redirecting their output to a file will capture only part of their actions.
The changes to the terminal modes are not affected by redirecting the output.
.PP
If \fB@TPUT@\fR is invoked by a link named \fBinit\fR, this has the
same effect as \fB@TPUT@ init\fR.
Again, you are less likely to use that link because another program
named \fBinit\fP has a more well-established use.
.SS Terminal Size
.PP
Besides the special commands (e.g., \fBclear\fP),
@TPUT@ treats certain terminfo capabilities specially:
-\fBlines\fP and \fBcolumns\fP.
+\fBlines\fP and \fBcols\fP.
@TPUT@ calls \fBsetupterm\fP(3X) to obtain the terminal size:
.bP
first, it gets the size from the terminal database
(which generally is not provided for terminal emulators
which do not have a fixed window size)
.bP
then it asks the operating system for the terminal's size
(which generally works, unless connecting via a serial line which
does not support \fINAWS\fP: negotiations about window size).
.bP
finally, it inspects the environment variables \fBLINES\fP and \fBCOLUMNS\fP
which may override the terminal size.
.PP
If the \fB\-T\fP option is given
@TPUT@ ignores the environment variables by calling \fBuse_tioctl(TRUE)\fP,
relying upon the operating system (or finally, the terminal database).
.SH EXAMPLES
.TP 5
\fB@TPUT@ init\fR
Initialize the terminal according to the type of
terminal in the environmental variable \fBTERM\fR. This
command should be included in everyone's .profile after
the environmental variable \fBTERM\fR has been exported, as
illustrated on the \fBprofile\fR(5) manual page.
.TP 5
\fB@TPUT@ \-T5620 reset\fR
Reset an AT&T 5620 terminal, overriding the type of
terminal in the environmental variable \fBTERM\fR.
.TP 5
\fB@TPUT@ cup 0 0\fR
Send the sequence to move the cursor to row \fB0\fR, column \fB0\fR
(the upper left corner of the screen, usually known as the \*(``home\*(''
cursor position).
.TP 5
\fB@TPUT@ clear\fR
Echo the clear-screen sequence for the current terminal.
.TP 5
\fB@TPUT@ cols\fR
Print the number of columns for the current terminal.
.TP 5
\fB@TPUT@ \-T450 cols\fR
Print the number of columns for the 450 terminal.
.TP 5
\fBbold=`@TPUT@ smso` offbold=`@TPUT@ rmso`\fR
Set the shell variables \fBbold\fR, to begin stand-out mode
sequence, and \fBoffbold\fR, to end standout mode sequence,
for the current terminal.
This might be followed by a
prompt: \fBecho "${bold}Please type in your name: ${offbold}\\c"\fR
.TP 5
\fB@TPUT@ hc\fR
Set exit code to indicate if the current terminal is a hard copy terminal.
.TP 5
\fB@TPUT@ cup 23 4\fR
Send the sequence to move the cursor to row 23, column 4.
.TP 5
\fB@TPUT@ cup\fR
Send the terminfo string for cursor-movement, with no parameters substituted.
.TP 5
\fB@TPUT@ longname\fR
Print the long name from the \fBterminfo\fR database for the
type of terminal specified in the environmental
variable \fBTERM\fR.
.PP
.RS 5
\fB@TPUT@ \-S <<!\fR
.br
\fB> clear\fR
.br
\fB> cup 10 10\fR
.br
\fB> bold\fR
.br
\fB> !\fR
.RE
.TP 5
\&
This example shows \fB@TPUT@\fR processing several capabilities
in one invocation.
It clears the screen,
moves the cursor to position 10, 10
and turns on bold (extra bright) mode.
The list is terminated by an exclamation mark (\fB!\fR) on a line by itself.
.SH FILES
.TP
\fB\*d\fR
compiled terminal description database
.TP
\fB@DATADIR@/tabset/*\fR
tab settings for some terminals, in a format
appropriate to be output to the terminal (escape
sequences that set margins and tabs); for more
information, see the
.IR "Tabs and Initialization" ,
section of \fBterminfo\fR(5)
.SH EXIT CODES
If the \fB\-S\fR option is used,
\fB@TPUT@\fR checks for errors from each line,
and if any errors are found, will set the exit code to 4 plus the
number of lines with errors.
If no errors are found, the exit code is \fB0\fR.
No indication of which line failed can be given so
exit code \fB1\fR will never appear.
Exit codes \fB2\fR, \fB3\fR, and
\fB4\fR retain their usual interpretation.
If the \fB\-S\fR option is not used,
the exit code depends on the type of \fIcapname\fR:
.RS 3
.TP
.I boolean
a value of \fB0\fR is set for TRUE and \fB1\fR for FALSE.
.TP
.I string
a value of \fB0\fR is set if the
\fIcapname\fR is defined for this terminal \fItype\fR (the value of
\fIcapname\fR is returned on standard output);
a value of \fB1\fR is set if \fIcapname\fR
is not defined for this terminal \fItype\fR
(nothing is written to standard output).
.TP
.I integer
a value of \fB0\fR is always set,
whether or not \fIcapname\fR is defined for this terminal \fItype\fR.
To determine if \fIcapname\fR is defined for this terminal \fItype\fR,
the user must test the value written to standard output.
A value of \fB\-1\fR
means that \fIcapname\fR is not defined for this terminal \fItype\fR.
.TP
.I other
\fBreset\fR or \fBinit\fR may fail to find their respective files.
In that case, the exit code is set to 4 + \fBerrno\fR.
.RE
.PP
Any other exit code indicates an error; see the DIAGNOSTICS section.
.SH DIAGNOSTICS
\fB@TPUT@\fR prints the following error messages and sets the corresponding exit
codes.
.PP
.ne 15
.TS
l l.
exit code error message
=
\fB0\fR T{
(\fIcapname\fR is a numeric variable that is not specified in the
\fBterminfo\fR(5) database for this terminal type, e.g.
\fB@TPUT@ \-T450 lines\fR and \fB@TPUT@ \-T2621 xmc\fR)
T}
\fB1\fR no error message is printed, see the \fBEXIT CODES\fR section.
\fB2\fR usage error
\fB3\fR unknown terminal \fItype\fR or no \fBterminfo\fR database
\fB4\fR unknown \fBterminfo\fR capability \fIcapname\fR
\fB>4\fR error occurred in \-S
=
.TE
.SH HISTORY
The \fBtput\fP command was begun by Bill Joy in 1980.
The initial version only cleared the screen.
.PP
AT&T System V provided a different \fBtput\fP command,
whose \fBinit\fP and \fBreset\fP subcommands
(more than half the program) were incorporated from
the \fBreset\fP feature of BSD \fBtset\fP written by Eric Allman.
.PP
Keith Bostic replaced the BSD \fBtput\fP command in 1989
with a new implementation
based on the AT&T System V program \fBtput\fP.
Like the AT&T program, Bostic's version
accepted some parameters named for \fIterminfo capabilities\fP
(\fBclear\fP, \fBinit\fP, \fBlongname\fP and \fBreset\fP).
However (because he had only termcap available),
it accepted \fItermcap names\fP for other capabilities.
Also, Bostic's BSD \fBtput\fP did not modify the terminal I/O modes
as the earlier BSD \fBtset\fP had done.
.PP
At the same time, Bostic added a shell script named \*(``clear\*('',
which used \fBtput\fP to clear the screen.
.PP
Both of these appeared in 4.4BSD,
becoming the \*(``modern\*('' BSD implementation of \fBtput\fP.
.PP
This implementation of \fBtput\fP began from a different source than
AT&T or BSD: Ross Ridge's \fImytinfo\fP package, published on
\fIcomp.sources.unix\fP in December 1992.
Ridge's program made more sophisticated use of the terminal capabilities
than the BSD program.
Eric Raymond used that \fBtput\fP program
(and other parts of \fImytinfo\fP) in ncurses in June 1995.
Using the portions dealing with terminal capabilities
almost without change,
Raymond made improvements to the way the command-line parameters
were handled.
.SH PORTABILITY
.PP
This implementation of \fBtput\fP differs from AT&T \fBtput\fP in
two important areas:
.bP
\fB@TPUT@\fP \fIcapname\fP writes to the standard output.
That need not be a regular terminal.
However, the subcommands which manipulate terminal modes
may not use the standard output.
.IP
The AT&T implementation's \fBinit\fP and \fBreset\fP commands
use the BSD (4.1c) \fBtset\fP source, which manipulates terminal modes.
It successively tries standard output, standard error, standard input
before falling back to \*(``/dev/tty\*('' and finally just assumes
a 1200Bd terminal.
When updating terminal modes, it ignores errors.
.IP
Until changes made after ncurses 6.0,
\fB@TPUT@\fP did not modify terminal modes.
\fB@TPUT@\fP now uses a similar scheme,
using functions shared with \fB@TSET@\fP
(and ultimately based on the 4.4BSD \fBtset\fP).
If it is not able to open a terminal, e.g., when running in \fBcron\fP,
\fB@TPUT@\fP will return an error.
.bP
AT&T \fBtput\fP guesses the type of its \fIcapname\fP operands by seeing if
all of the characters are numeric, or not.
.IP
Most implementations which provide support for \fIcapname\fR operands
use the \fItparm\fP function to expand parameters in it.
That function expects a mixture of numeric and string parameters,
requiring \fB@TPUT@\fP to know which type to use.
.IP
This implementation uses a table to determine the parameter types for
the standard \fIcapname\fR operands, and an internal library
function to analyze nonstandard \fIcapname\fR operands.
.PP
This implementation (unlike others) can accept both \fItermcap\fP
and \fIterminfo\fP names for the \fIcapname\fP feature,
if
\fItermcap\fR support is compiled in.
However, the predefined \fItermcap\fP and \fIterminfo\fP names have two
ambiguities in this case (and the \fIterminfo\fP name is assumed):
.bP
The \fItermcap\fP name \fBdl\fP corresponds to
the \fIterminfo\fP name \fBdl1\fP (delete one line).
.br
The \fIterminfo\fP name \fBdl\fP corresponds to
the \fItermcap\fP name \fBDL\fP (delete a given number of lines).
.bP
The \fItermcap\fP name \fBed\fP corresponds to
the \fIterminfo\fP name \fBrmdc\fP (end delete mode).
.br
The \fIterminfo\fP name \fBed\fP corresponds to
the \fItermcap\fP name \fBcd\fP (clear to end of screen).
.PP
The \fBlongname\fR and \fB\-S\fR options, and the parameter-substitution
features used in the \fBcup\fR example,
were not supported in BSD curses before 4.3reno (1989) or in
AT&T/USL curses before SVr4 (1988).
.PP
IEEE Std 1003.1/The Open Group Base Specifications Issue 7 (POSIX.1-2008)
documents only the operands for \fBclear\fP, \fBinit\fP and \fBreset\fP.
There are a few interesting observations to make regarding that:
.bP
In this implementation, \fBclear\fP is part of the \fIcapname\fR support.
The others (\fBinit\fP and \fBlongname\fP) do not correspond to terminal
capabilities.
.bP
Other implementations of \fBtput\fP on
SVr4-based systems such as Solaris, IRIX64 and HPUX
as well as others such as AIX and Tru64
provide support for \fIcapname\fR operands.
.bP
A few platforms such as FreeBSD recognize termcap names rather
than terminfo capability names in their respective \fBtput\fP commands.
Since 2010, NetBSD's \fBtput\fP uses terminfo names.
Before that, it (like FreeBSD) recognized termcap names.
.PP
Because (apparently) \fIall\fP of the certified Unix systems
support the full set of capability names, the reasoning for documenting
only a few may not be apparent.
.bP
X/Open Curses Issue 7 documents \fBtput\fP differently, with \fIcapname\fP
and the other features used in this implementation.
.bP
That is, there are two standards for \fBtput\fP:
POSIX (a subset) and X/Open Curses (the full implementation).
POSIX documents a subset to avoid the complication of including X/Open Curses
and the terminal capabilities database.
.bP
While it is certainly possible to write a \fBtput\fP program
without using curses,
none of the systems which have a curses implementation provide
a \fBtput\fP utility which does not provide the \fIcapname\fP feature.
.PP
X/Open Curses Issue 7 (2009) is the first version to document utilities.
However that part of X/Open Curses does not follow existing practice
(i.e., Unix features documented in SVID 3):
.bP
It assigns exit code 4 to \*(``invalid operand\*('',
which may be the same as \fIunknown capability\fP.
For instance, the source code for Solaris' xcurses uses the term
\*(``invalid\*('' in this case.
.bP
It assigns exit code 255 to a numeric variable that is not specified in
the terminfo database.
That likely is a documentation error,
confusing the \fB\-1\fP written to the standard output for an absent
or cancelled numeric value versus an (unsigned) exit code.
.PP
The various Unix systems (AIX, HPUX, Solaris) use the same exit-codes
as ncurses.
.PP
NetBSD curses documents different exit codes which do not correspond
to either ncurses or X/Open.
.SH SEE ALSO
\fB@CLEAR@\fR(\*n),
\fBstty\fR(1),
\fB@TABS@\fR(\*n),
\fB@TSET@\fR(\*n),
-\fBterminfo\fR(5),
-\fBcurs_termcap\fR(3X).
+\fBcurs_termcap\fR(3X),
+\fBterminfo\fR(5).
.PP
This describes \fBncurses\fR
version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@).
diff --git a/contrib/ncurses/man/user_caps.5 b/contrib/ncurses/man/user_caps.5
index 31f4f72db7a2..43dd000cdc08 100644
--- a/contrib/ncurses/man/user_caps.5
+++ b/contrib/ncurses/man/user_caps.5
@@ -1,426 +1,439 @@
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey *
.\" Copyright 2017 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: user_caps.5,v 1.12 2020/02/02 23:34:34 tom Exp $
+.\" $Id: user_caps.5,v 1.16 2020/12/19 21:26:11 tom Exp $
.TH user_caps 5
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.de NS
.ie n .sp
.el .sp .5
.ie n .in +4
.el .in +2
.nf
.ft C \" Courier
..
.de NE
.fi
.ft R
.ie n .in -4
.el .in -2
..
.de bP
.ie n .IP \(bu 4
.el .IP \(bu 2
..
.SH NAME
user_caps \- user-defined terminfo capabilities
.SH SYNOPSIS
.B @TIC@ -x, @INFOCMP@ -x
.SH DESCRIPTION
.SS Background
.PP
Before ncurses 5.0,
terminfo databases used a \fIfixed repertoire\fP of terminal
capabilities designed for the SVr2 terminal database in 1984,
and extended in stages through SVr4 (1989),
and standardized in the Single Unix Specification beginning in 1995.
.PP
Most of the \fIextensions\fP in this fixed repertoire were additions
to the tables of boolean, numeric and string capabilities.
Rather than change the meaning of an existing capability, a new name was added.
The terminfo database uses a binary format; binary compatibility was
ensured by using a header which gave the number of items in the
tables for each type of capability.
The standardization was incomplete:
.bP
The \fIbinary format\fP itself is not described
in the X/Open Curses documentation.
Only the \fIsource format\fP is described.
.IP
Library developers rely upon the SVr4 documentation,
and reverse-engineering the compiled terminfo files to match the binary format.
.bP
Lacking a standard for the binary format, most implementations
copy the SVr2 binary format, which uses 16-bit signed integers,
and is limited to 4096-byte entries.
.IP
The format cannot represent very large numeric capabilities,
nor can it represent large numbers of special keyboard definitions.
.bP
The tables of capability names differ between implementations.
.IP
Although they \fImay\fP provide all of the standard capability names,
the position in the tables differs because some features were added as needed,
while others were added (out of order) to comply with X/Open Curses.
.IP
While ncurses' repertoire of predefined capabilities is closest to Solaris,
Solaris's terminfo database has a few differences from
the list published by X/Open Curses.
For example, ncurses can be configured with tables which match the
terminal databases for AIX, HP-UX or OSF/1,
rather than the default Solaris-like configuration.
.bP
In SVr4 curses and ncurses,
the terminal database is defined at compile-time using a text file
which lists the different terminal capabilities.
.IP
In principle, the text-file can be extended,
but doing this requires recompiling and reinstalling the library.
The text-file used in ncurses for terminal capabilities includes
details for various systems past the documented X/Open Curses features.
For example, ncurses supports these capabilities in each configuration:
.RS 8
.TP 5
memory_lock
(meml)
lock memory above cursor
.TP 5
memory_unlock
(memu)
unlock memory
.TP 5
box_chars_1
(box1)
box characters primary set
.RE
.IP
The memory lock/unlock capabilities were included because they were used
in the X11R6 terminal description for \fBxterm\fP.
The \fIbox1\fP capability is used in @TIC@ to help with terminal descriptions
written for AIX.
.PP
During the 1990s, some users were reluctant to use terminfo
in spite of its performance advantages over termcap:
.bP
The fixed repertoire prevented users from adding features
for unanticipated terminal improvements
(or required them to reuse existing capabilities as a workaround).
.bP
The limitation to 16-bit signed integers was also mentioned.
Because termcap stores everything as a string,
it could represent larger numbers.
.PP
Although termcap's extensibility was rarely used
(it was never the \fIspeaker\fP who had actually used the feature),
the criticism had a point.
ncurses 5.0 provided a way to detect nonstandard capabilities,
determine their
type and optionally store and retrieve them in a way which did not interfere
with other applications.
These are referred to as \fIuser-defined capabilities\fP because no
modifications to the toolset's predefined capability names are needed.
.PP
The ncurses utilities \fB@TIC@\fP and \fB@INFOCMP@\fP have a command-line
option \*(``\-x\*('' to control whether the nonstandard capabilities
are stored or retrieved.
A library function \fBuse_extended_names\fP
is provided for the same purpose.
.PP
When compiling a terminal database, if \*(``\-x\*('' is set,
\fB@TIC@\fP will store a user-defined capability if the capability name is not
one of the predefined names.
.PP
Because ncurses provides a termcap library interface,
these user-defined capabilities may be visible to termcap applications:
.bP
The termcap interface (like all implementations of termcap)
requires that the capability names are 2-characters.
.IP
When the capability is simple enough for use in a termcap application,
it is provided as a 2-character name.
.bP
There are other
user-defined capabilities which refer to features not usable in termcap,
e.g., parameterized strings that use more than two parameters
or use more than the trivial expression support provided by termcap.
For these, the terminfo database should have only capability names with
3 or more characters.
.bP
Some terminals can send distinct strings for special keys (cursor-,
keypad- or function-keys) depending on modifier keys (shift, control, etc.).
While terminfo and termcap have a set of 60 predefined function-key names,
to which a series of keys can be assigned,
that is insufficient for more than a dozen keys multiplied by more than
a couple of modifier combinations.
The ncurses database uses a convention based on \fBxterm\fP to
provide extended special-key names.
.IP
Fitting that into termcap's limitation of 2-character names
would be pointless.
These extended keys are available only with terminfo.
.SS Recognized capabilities
.PP
The ncurses library uses the user-definable capabilities.
While the terminfo database may have other extensions,
ncurses makes explicit checks for these:
.RS 3
.TP 3
AX
\fIboolean\fP, asserts that the terminal interprets SGR 39 and SGR 49
by resetting the foreground and background color, respectively, to the default.
.IP
This is a feature recognized by the \fBscreen\fP program as well.
.TP 3
E3
\fIstring\fP, tells how to clear the terminal's scrollback buffer.
When present, the \fBclear\fP(1) program sends this before clearing
the terminal.
.IP
The command \*(``\fBtput clear\fP\*('' does the same thing.
.TP 3
RGB
\fIboolean\fP, \fInumber\fP \fBor\fP \fIstring\fP,
to assert that the
\fBset_a_foreground\fP and
\fBset_a_background\fP capabilities correspond to \fIdirect colors\fP,
using an RGB (red/green/blue) convention.
This capability allows the \fBcolor_content\fP function to
return appropriate values without requiring the application
to initialize colors using \fBinit_color\fP.
.IP
The capability type determines the values which ncurses sees:
.RS 3
.TP 3
\fIboolean\fP
implies that the number of bits for red, green and blue are the same.
Using the maximum number of colors,
ncurses adds two, divides that sum by three, and assigns the result
to red, green and blue in that order.
.IP
If the number of bits needed for the number of colors is not a multiple
of three, the blue (and green) components lose in comparison to red.
.TP 3
\fInumber\fP
tells ncurses what result to add to red, green and blue.
If ncurses runs out of bits,
blue (and green) lose just as in the \fIboolean\fP case.
.TP 3
\fIstring\fP
explicitly list the number of bits used for red, green and blue components
as a slash-separated list of decimal integers.
.RE
.IP
Because there are several RGB encodings in use,
applications which make assumptions about the number of bits per color
are unlikely to work reliably.
As a trivial case, for example, one could define \fBRGB#1\fP
to represent the standard eight ANSI colors, i.e., one bit per color.
.TP 3
U8
\fInumber\fP,
asserts that ncurses must use Unicode values for line-drawing characters,
and that it should ignore the alternate character set capabilities
when the locale uses UTF-8 encoding.
For more information, see the discussion of
\fBNCURSES_NO_UTF8_ACS\fP in \fBncurses\fP(3X).
.IP
Set this capability to a nonzero value to enable it.
.TP 3
XM
\fIstring\fP,
override ncurses's built-in string which
enables/disables \fBxterm\fP mouse mode.
.IP
ncurses sends a character sequence to the terminal to initialize mouse mode,
and when the user clicks the mouse buttons or (in certain modes) moves the
mouse, handles the characters sent back by the terminal to tell it what
was done with the mouse.
.IP
The mouse protocol is enabled when
the \fImask\fP passed in the \fBmousemask\fP function is nonzero.
By default, ncurses handles the responses for the X11 xterm mouse protocol.
It also knows about the \fISGR 1006\fP xterm mouse protocol,
but must to be told to look for this specifically.
It will not be able to guess which mode is used,
because the responses are enough alike that only confusion would result.
.IP
The \fBXM\fP capability has a single parameter.
If nonzero, the mouse protocol should be enabled.
If zero, the mouse protocol should be disabled.
ncurses inspects this capability if it is present,
to see whether the 1006 protocol is used.
If so, it expects the responses to use the \fISGR 1006\fP xterm mouse protocol.
.IP
The xterm mouse protocol is used by other terminal emulators.
The terminal database uses building-blocks for the various xterm mouse
protocols which can be used in customized terminal descriptions.
.IP
The terminal database building blocks for this mouse
feature also have an experimental capability \fIxm\fP.
The \*(``xm\*('' capability describes the mouse response.
Currently there is no interpreter which would use this
information to make the mouse support completely data-driven.
.IP
\fIxm\fP shows the format of the mouse responses.
In this experimental capability, the parameters are
.RS 5
.TP 5
.I p1
y-ordinate
.TP 5
.I p2
x-ordinate
.TP 5
.I p3
button
.TP 5
.I p4
state, e.g., pressed or released
.TP 5
.I p5
y-ordinate starting region
.TP 5
.I p6
x-ordinate starting region
.TP 5
.I p7
y-ordinate ending region
.TP 5
.I p8
x-ordinate ending region
.RE
.IP
Here are examples from the terminal database for the most commonly used
xterm mouse protocols:
.IP
.nf
xterm+x11mouse|X11 xterm mouse protocol,
kmous=\\E[M, XM=\\E[?1000%?%p1%{1}%=%th%el%;,
xm=\\E[M
%?%p4%t%p3%e%{3}%;%'\ '%+%c
%p2%'!'%+%c
%p1%'!'%+%c,
xterm+sm+1006|xterm SGR-mouse,
kmous=\\E[<, XM=\\E[?1006;1000%?%p1%{1}%=%th%el%;,
xm=\\E[<%i%p3%d;
%p1%d;
%p2%d;
%?%p4%tM%em%;,
.fi
.
.SS Extended key-definitions
.PP
Several terminals provide the ability to send distinct strings for
combinations of modified special keys.
There is no standard for what those keys can send.
.PP
Since 1999, \fBxterm\fP has supported
\fIshift\fP, \fIcontrol\fP, \fIalt\fP, and \fImeta\fP modifiers which produce
distinct special-key strings.
In a terminal description, ncurses has no special knowledge of the
modifiers used.
Applications can use the \fInaming convention\fP established for \fBxterm\fP
to find these special keys in the terminal description.
.PP
Starting with the curses convention that \fIkey names\fP begin with \*(``k\*(''
and that shifted special keys are an uppercase name,
ncurses' terminal database defines these names to which a suffix is added:
.RS 5
.TS
tab(/) ;
l l .
\fIName\fR/\fIDescription\fR
_
kDC/special form of kdch1 (delete character)
kDN/special form of kcud1 (cursor down)
kEND/special form of kend (End)
kHOM/special form of khome (Home)
kLFT/special form of kcub1 (cursor-left or cursor-back)
kNXT/special form of knext (Next, or Page-Down)
kPRV/special form of kprev (Prev, or Page-Up)
kRIT/special form of kcuf1 (cursor-right, or cursor-forward)
kUP/special form of kcuu1 (cursor-up)
.TE
.RE
.PP
These are the suffixes used to denote the modifiers:
.RS 5
.TS
tab(/) ;
l l .
\fIValue\fR/\fIDescription\fR
_
2/Shift
3/Alt
4/Shift + Alt
5/Control
6/Shift + Control
7/Alt + Control
8/Shift + Alt + Control
9/Meta
10/Meta + Shift
11/Meta + Alt
12/Meta + Alt + Shift
13/Meta + Ctrl
14/Meta + Ctrl + Shift
15/Meta + Ctrl + Alt
16/Meta + Ctrl + Alt + Shift
.TE
.RE
.PP
None of these are predefined; terminal descriptions can refer to \fInames\fP
which ncurses will allocate at runtime to \fIkey-codes\fP.
To use these keys in an ncurses program, an application could do this:
.bP
using a list of extended key \fInames\fP,
ask \fBtigetstr\fP(3X) for their values, and
.bP
given the list of values,
ask \fBkey_defined\fP(3X) for the \fIkey-code\fP which
would be returned for those keys by \fBwgetch\fP(3X).
.PP
+.\"
.SH PORTABILITY
.PP
The \*(``\-x\*('' extension feature of \fB@TIC@\fP and \fB@INFOCMP@\fP
has been adopted in NetBSD curses.
That implementation stores user-defined capabilities,
but makes no use of these capabilities itself.
+.\"
.SH SEE ALSO
.PP
-\fB@TIC@\fR(1M),
-\fB@INFOCMP@\fR(1M).
+\fB@INFOCMP@\fR(1M),
+\fB@TIC@\fR(1M).
+.PP
+The terminal database section
+.I "NCURSES USER-DEFINABLE CAPABILITIES"
+summarizes commonly-used user-defined capabilities
+which are used in the terminal descriptions.
+Some of those features are mentioned in \fBscreen\fR(1) or \fBtmux\fR(1).
+.PP
+.I "XTerm Control Sequences"
+provides further information on the \fBxterm\fP features
+which are used in these extended capabilities.
+.\"
.SH AUTHORS
.PP
Thomas E. Dickey
.br
beginning with ncurses 5.0 (1999)
diff --git a/contrib/ncurses/man/wresize.3x b/contrib/ncurses/man/wresize.3x
index 8afaddaae305..54c1fc6bccc5 100644
--- a/contrib/ncurses/man/wresize.3x
+++ b/contrib/ncurses/man/wresize.3x
@@ -1,66 +1,66 @@
.\"***************************************************************************
.\" Copyright 2018,2020 Thomas E. Dickey *
.\" Copyright 1998-2010,2015 Free Software Foundation, Inc. *
.\" *
.\" Permission is hereby granted, free of charge, to any person obtaining a *
.\" copy of this software and associated documentation files (the *
.\" "Software"), to deal in the Software without restriction, including *
.\" without limitation the rights to use, copy, modify, merge, publish, *
.\" distribute, distribute with modifications, sublicense, and/or sell *
.\" copies of the Software, and to permit persons to whom the Software is *
.\" furnished to do so, subject to the following conditions: *
.\" *
.\" The above copyright notice and this permission notice shall be included *
.\" in all copies or substantial portions of the Software. *
.\" *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
.\" *
.\" Except as contained in this notice, the name(s) of the above copyright *
.\" holders shall not be used in advertising or otherwise to promote the *
.\" sale, use or other dealings in this Software without prior written *
.\" authorization. *
.\"***************************************************************************
.\"
.\" Author: Thomas E. Dickey 1996
.\"
-.\" $Id: wresize.3x,v 1.16 2020/02/02 23:34:34 tom Exp $
+.\" $Id: wresize.3x,v 1.17 2020/10/17 23:56:38 tom Exp $
.TH wresize 3X ""
.SH NAME
\fBwresize\fR \- resize a curses window
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
-\fBint wresize(WINDOW *win, int lines, int columns);\fR
+\fBint wresize(WINDOW *\fP\fIwin\fP\fB, int \fP\fIlines\fP\fB, int \fP\fIcolumns\fP\fB);\fR
.SH DESCRIPTION
This is an extension to the curses library.
It reallocates storage for an \fBncurses\fR
window to adjust its dimensions to the specified values.
If either dimension is larger than the current values, the
window's data is filled with blanks that have the current background rendition
(as set by \fBwbkgdset\fR) merged into them.
.SH RETURN VALUE
The function returns the integer \fBERR\fR upon failure and \fBOK\fR on success.
It will fail if either of the dimensions less than or equal to zero,
or if an error occurs while (re)allocating memory for the window.
.SH NOTES
The only restriction placed on the dimensions is that they be greater than zero.
The dimensions are not compared to \fBcurses\fR screen dimensions to
simplify the logic of \fBresizeterm\fR.
The caller must ensure that the window's dimensions fit within the
actual screen dimensions.
.SH PORTABILITY
.PP
It is not possible to resize windows with SVr4 curses.
.PP
This extension of ncurses was introduced in mid-1995.
It was adopted in NetBSD curses (2001) and PDCurses (2003).
.SH SEE ALSO
\fBresizeterm\fR(3X).
.SH AUTHOR
Thomas Dickey (from an equivalent function written in 1988 for BSD curses).
diff --git a/contrib/ncurses/menu/Makefile.in b/contrib/ncurses/menu/Makefile.in
index 495651c2084d..fb13eb07c8ef 100644
--- a/contrib/ncurses/menu/Makefile.in
+++ b/contrib/ncurses/menu/Makefile.in
@@ -1,184 +1,199 @@
-# $Id: Makefile.in,v 1.66 2020/02/02 23:34:34 tom Exp $
+# $Id: Makefile.in,v 1.70 2020/08/29 14:50:45 tom Exp $
##############################################################################
# Copyright 2020 Thomas E. Dickey #
# Copyright 1998-2015,2018 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey 1996-on
#
# Makefile for menu source code.
#
# This makes the following:
# libraries (normal/debug/profile/shared)
#
# The variable 'srcdir' refers to the source-distribution, and can be set with
# the configure script by "--srcdir=DIR".
#
# The rules are organized to produce the libraries for the configured models,
# turn off _all_ suffix rules; we'll generate our own
.SUFFIXES:
SHELL = @SHELL@
VPATH = @srcdir@
THIS = Makefile
x = @EXEEXT@
o = .@OBJEXT@
MODEL = @DFT_LWR_MODEL@
DESTDIR = @DESTDIR@
top_srcdir = @top_srcdir@
srcdir = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
includedir = @includedir@
includesubdir = @includesubdir@
INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir)
PACKAGE = @PACKAGE@
LIBTOOL = @LIBTOOL@
LIBTOOL_OPTS = @LIBTOOL_OPTS@ @EXPORT_SYMS@
LIBTOOL_CLEAN = @LIB_CLEAN@
LIBTOOL_COMPILE = @LIB_COMPILE@
LIBTOOL_LINK = @LIB_LINK@
LIBTOOL_INSTALL = @LIB_INSTALL@
LIBTOOL_UNINSTALL = @LIB_UNINSTALL@
LT_UNDEF = @LT_UNDEF@
INSTALL = @INSTALL@
INSTALL_LIB = @INSTALL@ @INSTALL_LIB@
INSTALL_PROG = @INSTALL_PROGRAM@ @INSTALL_OPT_S@
INSTALL_DATA = @INSTALL_DATA@
AR = @AR@
ARFLAGS = @ARFLAGS@
AWK = @AWK@
LD = @LD@
LN_S = @LN_S@
CTAGS = @CTAGS@
ETAGS = @ETAGS@
CC = @CC@
CPP = @CPP@
-CFLAGS = @CFLAGS@
+CFLAGS = @CFLAGS@ @EXTRA_CFLAGS@
-CPPFLAGS = -I${top_srcdir}/ncurses -DHAVE_CONFIG_H @CPPFLAGS@
+INCDIR = $(top_srcdir)/include
+BASE_DIR = $(top_srcdir)/ncurses
+CPPFLAGS = -I$(BASE_DIR) -DHAVE_CONFIG_H -DBUILDING_MENU @CPPFLAGS@
CCFLAGS = $(CPPFLAGS) $(CFLAGS)
CFLAGS_LIBTOOL = $(CCFLAGS)
-CFLAGS_NORMAL = $(CCFLAGS)
-CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE
-CFLAGS_PROFILE = $(CCFLAGS) -pg
+CFLAGS_NORMAL = $(CCFLAGS) -DNCURSES_STATIC
+CFLAGS_DEBUG = $(CCFLAGS) -DNCURSES_STATIC @CC_G_OPT@ -DTRACE
+CFLAGS_PROFILE = $(CCFLAGS) -DNCURSES_STATIC -pg
CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@
CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@)
LINK = $(LIBTOOL_LINK)
LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@
SHLIB_DIRS = -L../lib
SHLIB_LIST = $(SHLIB_DIRS) -lncurses@USE_LIB_SUFFIX@ @SHLIB_LIST@
RPATH_LIST = @RPATH_LIST@
RESULTING_SYMS = @RESULTING_SYMS@
VERSIONED_SYMS = @VERSIONED_SYMS@
MK_SHARED_LIB = @MK_SHARED_LIB@
NCURSES_MAJOR = @NCURSES_MAJOR@
NCURSES_MINOR = @NCURSES_MINOR@
REL_VERSION = @cf_cv_rel_version@
ABI_VERSION = @cf_cv_abi_version@
RANLIB = @LIB_PREP@
LIBRARIES = @Libs_To_Make@
LINT = @LINT@
LINT_OPTS = @LINT_OPTS@
LINT_LIBS = -lmenu -lncurses @LIBS@
AUTO_SRC = \
../include/menu.h \
../include/eti.h \
../include/mf_common.h
################################################################################
all \
libs \
install :: $(AUTO_SRC) $(LIBRARIES)
sources : $(AUTO_SRC)
$(DESTDIR)$(bindir) \
$(DESTDIR)$(libdir) :
mkdir -p $@
# make copies to simplify include-paths while still keeping menu's include
# file in this directory.
../include/menu.h : $(srcdir)/menu.h
-rm -f $@
cp $(srcdir)/menu.h $@
../include/eti.h : $(srcdir)/eti.h
-rm -f $@
cp $(srcdir)/eti.h $@
../include/mf_common.h : $(srcdir)/mf_common.h
-rm -f $@
cp $(srcdir)/mf_common.h $@
HEADER_DEPS = \
+ ../include/curses.h \
+ ../include/ncurses_cfg.h \
+ ../include/ncurses_def.h \
+ ../include/ncurses_dll.h \
+ ../include/term.h \
+ ../include/unctrl.h \
+ $(BASE_DIR)/curses.priv.h \
+ $(BASE_DIR)/new_pair.h \
+ $(INCDIR)/nc_alloc.h \
+ $(INCDIR)/nc_panel.h \
+ $(INCDIR)/nc_string.h \
+ $(INCDIR)/nc_termios.h \
+ $(INCDIR)/nc_tparm.h \
+ $(INCDIR)/term_entry.h \
$(srcdir)/menu.priv.h \
- $(AUTO_SRC) \
- ../include/curses.h
+ $(AUTO_SRC)
tags:
$(CTAGS) *.[ch]
@MAKE_UPPER_TAGS@TAGS:
@MAKE_UPPER_TAGS@ $(ETAGS) *.[ch]
mostlyclean ::
-rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace
clean :: mostlyclean
-rm -f $(AUTO_SRC)
-rm -rf .libs *.dSYM
distclean :: clean
-rm -f Makefile
realclean :: distclean
###############################################################################
# The remainder of this file is automatically generated during configuration
###############################################################################
diff --git a/contrib/ncurses/menu/m_attribs.c b/contrib/ncurses/menu/m_attribs.c
index e3c88ac420f3..5cd94d342475 100644
--- a/contrib/ncurses/menu/m_attribs.c
+++ b/contrib/ncurses/menu/m_attribs.c
@@ -1,145 +1,145 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_attribs *
* Control menus display attributes *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_attribs.c,v 1.18 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_attribs.c,v 1.19 2020/07/04 19:44:58 tom Exp $")
/* Macro to redraw menu if it is posted and changed */
#define Refresh_Menu(menu) \
if ( (menu) && ((menu)->status & _POSTED) )\
{\
_nc_Draw_Menu( menu );\
_nc_Show_Menu( menu );\
}
/* "Template" macro to generate a function to set a menus attribute */
#define GEN_MENU_ATTR_SET_FCT( name ) \
-NCURSES_IMPEXP int NCURSES_API set_menu_ ## name (MENU* menu, chtype attr) \
+MENU_EXPORT(int) NCURSES_API set_menu_ ## name (MENU* menu, chtype attr) \
{\
T((T_CALLED("set_menu_" #name "(%p,%s)"), (void *) menu, _traceattr(attr))); \
if (!(attr==A_NORMAL || (attr & A_ATTRIBUTES)==attr))\
RETURN(E_BAD_ARGUMENT);\
if (menu && ( menu -> name != attr))\
{\
(menu -> name) = attr;\
Refresh_Menu(menu);\
}\
Normalize_Menu( menu ) -> name = attr;\
RETURN(E_OK);\
}
/* "Template" macro to generate a function to get a menu's attribute */
#define GEN_MENU_ATTR_GET_FCT( name ) \
-NCURSES_IMPEXP chtype NCURSES_API menu_ ## name (const MENU * menu)\
+MENU_EXPORT(chtype) NCURSES_API menu_ ## name (const MENU * menu)\
{\
T((T_CALLED("menu_" #name "(%p)"), (const void *) menu));\
returnAttr(Normalize_Menu( menu ) -> name);\
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_fore(MENU *menu, chtype attr)
|
| Description : Set the attribute for selectable items. In single-
| valued menus this is used to highlight the current
| item ((i.e. where the cursor is), in multi-valued
| menus this is used to highlight the selected items.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - an invalid value has been passed
+--------------------------------------------------------------------------*/
GEN_MENU_ATTR_SET_FCT(fore)
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : chtype menu_fore(const MENU* menu)
|
| Description : Return the attribute used for selectable items that
| are current (single-valued menu) or selected (multi-
| valued menu).
|
| Return Values : Attribute value
+--------------------------------------------------------------------------*/
GEN_MENU_ATTR_GET_FCT(fore)
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_back(MENU *menu, chtype attr)
|
| Description : Set the attribute for selectable but not yet selected
| items.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - an invalid value has been passed
+--------------------------------------------------------------------------*/
GEN_MENU_ATTR_SET_FCT(back)
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : chtype menu_back(const MENU *menu)
|
| Description : Return the attribute used for selectable but not yet
| selected items.
|
| Return Values : Attribute value
+--------------------------------------------------------------------------*/
GEN_MENU_ATTR_GET_FCT(back)
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_grey(MENU *menu, chtype attr)
|
| Description : Set the attribute for unselectable items.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - an invalid value has been passed
+--------------------------------------------------------------------------*/
GEN_MENU_ATTR_SET_FCT(grey)
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : chtype menu_grey(const MENU *menu)
|
| Description : Return the attribute used for non-selectable items
|
| Return Values : Attribute value
+--------------------------------------------------------------------------*/
GEN_MENU_ATTR_GET_FCT(grey)
/* m_attribs.c ends here */
diff --git a/contrib/ncurses/menu/m_cursor.c b/contrib/ncurses/menu/m_cursor.c
index 3f8e54809137..8cf15ce51335 100644
--- a/contrib/ncurses/menu/m_cursor.c
+++ b/contrib/ncurses/menu/m_cursor.c
@@ -1,113 +1,113 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_cursor *
* Correctly position a menu's cursor *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_cursor.c,v 1.23 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_cursor.c,v 1.25 2020/12/12 00:38:02 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : _nc_menu_cursor_pos
|
| Description : Return position of logical cursor to current item
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid menu
| E_NOT_POSTED - Menu is not posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-_nc_menu_cursor_pos(const MENU * menu, const ITEM * item, int *pY, int *pX)
+MENU_EXPORT(int)
+_nc_menu_cursor_pos(const MENU *menu, const ITEM *item, int *pY, int *pX)
{
if (!menu || !pX || !pY)
return (E_BAD_ARGUMENT);
else
{
- if ((ITEM *) 0 == item)
+ if ((ITEM *)0 == item)
item = menu->curitem;
- assert(item != (ITEM *) 0);
+ assert(item != (ITEM *)0);
if (!(menu->status & _POSTED))
return (E_NOT_POSTED);
*pX = item->x * (menu->spc_cols + menu->itemlen);
*pY = (item->y - menu->toprow) * menu->spc_rows;
}
return (E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : pos_menu_cursor
|
| Description : Position logical cursor to current item in menu
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid menu
| E_NOT_POSTED - Menu is not posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-pos_menu_cursor(const MENU * menu)
+MENU_EXPORT(int)
+pos_menu_cursor(const MENU *menu)
{
WINDOW *win, *sub;
int x = 0, y = 0;
- int err = _nc_menu_cursor_pos(menu, (ITEM *) 0, &y, &x);
+ int err = _nc_menu_cursor_pos(menu, (ITEM *)0, &y, &x);
T((T_CALLED("pos_menu_cursor(%p)"), (const void *)menu));
if (E_OK == err)
{
win = Get_Menu_UserWin(menu);
sub = menu->usersub ? menu->usersub : win;
assert(win && sub);
if ((menu->opt & O_SHOWMATCH) && (menu->pindex > 0))
x += (menu->pindex + menu->marklen - 1);
wmove(sub, y, x);
if (win != sub)
{
wcursyncup(sub);
wsyncup(sub);
untouchwin(sub);
}
}
RETURN(err);
}
/* m_cursor.c ends here */
diff --git a/contrib/ncurses/menu/m_driver.c b/contrib/ncurses/menu/m_driver.c
index e592bab4e368..b1d7c3541b53 100644
--- a/contrib/ncurses/menu/m_driver.c
+++ b/contrib/ncurses/menu/m_driver.c
@@ -1,565 +1,565 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2012,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_driver *
* Central dispatching routine *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_driver.c,v 1.34 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_driver.c,v 1.36 2020/12/12 00:38:02 tom Exp $")
/* Macros */
/* Remove the last character from the match pattern buffer */
#define Remove_Character_From_Pattern(menu) \
(menu)->pattern[--((menu)->pindex)] = '\0'
/* Add a new character to the match pattern buffer */
#define Add_Character_To_Pattern(menu,ch) \
{ (menu)->pattern[((menu)->pindex)++] = (char) (ch);\
(menu)->pattern[(menu)->pindex] = '\0'; }
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : static bool Is_Sub_String(
| bool IgnoreCaseFlag,
| const char *part,
| const char *string)
|
| Description : Checks whether or not part is a substring of string.
|
| Return Values : TRUE - if it is a substring
| FALSE - if it is not a substring
+--------------------------------------------------------------------------*/
static bool
Is_Sub_String(
bool IgnoreCaseFlag,
const char *part,
const char *string
)
{
assert(part && string);
if (IgnoreCaseFlag)
{
while (*string && *part)
{
if (toupper(UChar(*string++)) != toupper(UChar(*part)))
break;
part++;
}
}
else
{
while (*string && *part)
if (*part != *string++)
break;
part++;
}
return ((*part) ? FALSE : TRUE);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int _nc_Match_Next_Character_In_Item_Name(
| MENU *menu,
| int ch,
| ITEM **item)
|
| Description : This internal routine is called for a menu positioned
| at an item with three different classes of characters:
| - a printable character; the character is added to
| the current pattern and the next item matching
| this pattern is searched.
| - NUL; the pattern stays as it is and the next item
| matching the pattern is searched
| - BS; the pattern stays as it is and the previous
| item matching the pattern is searched
|
| The item parameter contains on call a pointer to
| the item where the search starts. On return - if
| a match was found - it contains a pointer to the
| matching item.
|
| Return Values : E_OK - an item matching the pattern was found
| E_NO_MATCH - nothing found
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+MENU_EXPORT(int)
_nc_Match_Next_Character_In_Item_Name
-(MENU * menu, int ch, ITEM ** item)
+(MENU *menu, int ch, ITEM **item)
{
bool found = FALSE, passed = FALSE;
int idx, last;
T((T_CALLED("_nc_Match_Next_Character(%p,%d,%p)"),
(void *)menu, ch, (void *)item));
assert(menu && item && *item);
idx = (*item)->index;
if (ch && ch != BS)
{
/* if we become to long, we need no further checking : there can't be
a match ! */
if ((menu->pindex + 1) > menu->namelen)
RETURN(E_NO_MATCH);
Add_Character_To_Pattern(menu, ch);
/* we artificially position one item back, because in the do...while
loop we start with the next item. This means, that with a new
pattern search we always start the scan with the actual item. If
we do a NEXT_PATTERN or PREV_PATTERN search, we start with the
one after or before the actual item. */
if (--idx < 0)
idx = menu->nitems - 1;
}
last = idx; /* this closes the cycle */
do
{
if (ch == BS)
{ /* we have to go backward */
if (--idx < 0)
idx = menu->nitems - 1;
}
else
{ /* otherwise we always go forward */
if (++idx >= menu->nitems)
idx = 0;
}
if (Is_Sub_String((bool)((menu->opt & O_IGNORECASE) != 0),
menu->pattern,
menu->items[idx]->name.str)
)
found = TRUE;
else
passed = TRUE;
}
while (!found && (idx != last));
if (found)
{
if (!((idx == (*item)->index) && passed))
{
*item = menu->items[idx];
RETURN(E_OK);
}
/* This point is reached, if we fully cycled through the item list
and the only match we found is the starting item. With a NEXT_PATTERN
or PREV_PATTERN scan this means, that there was no additional match.
If we searched with an expanded new pattern, we should never reach
this point, because if the expanded pattern matches also the actual
item we will find it in the first attempt (passed==FALSE) and we
will never cycle through the whole item array.
*/
assert(ch == 0 || ch == BS);
}
else
{
if (ch && ch != BS && menu->pindex > 0)
{
/* if we had no match with a new pattern, we have to restore it */
Remove_Character_From_Pattern(menu);
}
}
RETURN(E_NO_MATCH);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int menu_driver(MENU* menu, int c)
|
| Description : Central dispatcher for the menu. Translates the logical
| request 'c' into a menu action.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid menu pointer
| E_BAD_STATE - menu is in user hook routine
| E_NOT_POSTED - menu is not posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-menu_driver(MENU * menu, int c)
+MENU_EXPORT(int)
+menu_driver(MENU *menu, int c)
{
#define NAVIGATE(dir) \
if (!item->dir)\
result = E_REQUEST_DENIED;\
else\
item = item->dir
int result = E_OK;
ITEM *item;
int my_top_row, rdiff;
T((T_CALLED("menu_driver(%p,%d)"), (void *)menu, c));
if (!menu)
RETURN(E_BAD_ARGUMENT);
if (menu->status & _IN_DRIVER)
RETURN(E_BAD_STATE);
if (!(menu->status & _POSTED))
RETURN(E_NOT_POSTED);
item = menu->curitem;
my_top_row = menu->toprow;
assert(item);
if ((c > KEY_MAX) && (c <= MAX_MENU_COMMAND))
{
if (!((c == REQ_BACK_PATTERN)
|| (c == REQ_NEXT_MATCH) || (c == REQ_PREV_MATCH)))
{
assert(menu->pattern);
Reset_Pattern(menu);
}
switch (c)
{
case REQ_LEFT_ITEM:
/*=================*/
NAVIGATE(left);
break;
case REQ_RIGHT_ITEM:
/*==================*/
NAVIGATE(right);
break;
case REQ_UP_ITEM:
/*===============*/
NAVIGATE(up);
break;
case REQ_DOWN_ITEM:
/*=================*/
NAVIGATE(down);
break;
case REQ_SCR_ULINE:
/*=================*/
if (my_top_row == 0 || !(item->up))
result = E_REQUEST_DENIED;
else
{
--my_top_row;
item = item->up;
}
break;
case REQ_SCR_DLINE:
/*=================*/
if ((my_top_row + menu->arows >= menu->rows) || !(item->down))
{
/* only if the menu has less items than rows, we can deny the
request. Otherwise the epilogue of this routine adjusts the
top row if necessary */
result = E_REQUEST_DENIED;
}
else
{
my_top_row++;
item = item->down;
}
break;
case REQ_SCR_DPAGE:
/*=================*/
rdiff = menu->rows - (menu->arows + my_top_row);
if (rdiff > menu->arows)
rdiff = menu->arows;
if (rdiff <= 0)
result = E_REQUEST_DENIED;
else
{
my_top_row += rdiff;
while (rdiff-- > 0 && item != 0 && item->down != 0)
item = item->down;
}
break;
case REQ_SCR_UPAGE:
/*=================*/
rdiff = (menu->arows < my_top_row) ? menu->arows : my_top_row;
if (rdiff <= 0)
result = E_REQUEST_DENIED;
else
{
my_top_row -= rdiff;
while (rdiff-- > 0 && item != 0 && item->up != 0)
item = item->up;
}
break;
case REQ_FIRST_ITEM:
/*==================*/
item = menu->items[0];
break;
case REQ_LAST_ITEM:
/*=================*/
item = menu->items[menu->nitems - 1];
break;
case REQ_NEXT_ITEM:
/*=================*/
if ((item->index + 1) >= menu->nitems)
{
if (menu->opt & O_NONCYCLIC)
result = E_REQUEST_DENIED;
else
item = menu->items[0];
}
else
item = menu->items[item->index + 1];
break;
case REQ_PREV_ITEM:
/*=================*/
if (item->index <= 0)
{
if (menu->opt & O_NONCYCLIC)
result = E_REQUEST_DENIED;
else
item = menu->items[menu->nitems - 1];
}
else
item = menu->items[item->index - 1];
break;
case REQ_TOGGLE_ITEM:
/*===================*/
if (menu->opt & O_ONEVALUE)
{
result = E_REQUEST_DENIED;
}
else
{
if (menu->curitem->opt & O_SELECTABLE)
{
menu->curitem->value = !menu->curitem->value;
Move_And_Post_Item(menu, menu->curitem);
_nc_Show_Menu(menu);
}
else
result = E_NOT_SELECTABLE;
}
break;
case REQ_CLEAR_PATTERN:
/*=====================*/
/* already cleared in prologue */
break;
case REQ_BACK_PATTERN:
/*====================*/
if (menu->pindex > 0)
{
assert(menu->pattern);
Remove_Character_From_Pattern(menu);
pos_menu_cursor(menu);
}
else
result = E_REQUEST_DENIED;
break;
case REQ_NEXT_MATCH:
/*==================*/
assert(menu->pattern);
if (menu->pattern[0])
result = _nc_Match_Next_Character_In_Item_Name(menu, 0, &item);
else
{
if ((item->index + 1) < menu->nitems)
item = menu->items[item->index + 1];
else
{
if (menu->opt & O_NONCYCLIC)
result = E_REQUEST_DENIED;
else
item = menu->items[0];
}
}
break;
case REQ_PREV_MATCH:
/*==================*/
assert(menu->pattern);
if (menu->pattern[0])
result = _nc_Match_Next_Character_In_Item_Name(menu, BS, &item);
else
{
if (item->index)
item = menu->items[item->index - 1];
else
{
if (menu->opt & O_NONCYCLIC)
result = E_REQUEST_DENIED;
else
item = menu->items[menu->nitems - 1];
}
}
break;
default:
/*======*/
result = E_UNKNOWN_COMMAND;
break;
}
}
else
{ /* not a command */
if (!(c & ~((int)MAX_REGULAR_CHARACTER)) && isprint(UChar(c)))
result = _nc_Match_Next_Character_In_Item_Name(menu, c, &item);
#ifdef NCURSES_MOUSE_VERSION
else if (KEY_MOUSE == c)
{
MEVENT event;
WINDOW *uwin = Get_Menu_UserWin(menu);
getmouse(&event);
if ((event.bstate & (BUTTON1_CLICKED |
BUTTON1_DOUBLE_CLICKED |
BUTTON1_TRIPLE_CLICKED))
&& wenclose(uwin, event.y, event.x))
{ /* we react only if the click was in the userwin, that means
* inside the menu display area or at the decoration window.
*/
WINDOW *sub = Get_Menu_Window(menu);
int ry = event.y, rx = event.x; /* screen coordinates */
result = E_REQUEST_DENIED;
if (mouse_trafo(&ry, &rx, FALSE))
{ /* rx, ry are now "curses" coordinates */
if (ry < sub->_begy)
{ /* we clicked above the display region; this is
* interpreted as "scroll up" request
*/
if (event.bstate & BUTTON1_CLICKED)
result = menu_driver(menu, REQ_SCR_ULINE);
else if (event.bstate & BUTTON1_DOUBLE_CLICKED)
result = menu_driver(menu, REQ_SCR_UPAGE);
else if (event.bstate & BUTTON1_TRIPLE_CLICKED)
result = menu_driver(menu, REQ_FIRST_ITEM);
RETURN(result);
}
else if (ry > sub->_begy + sub->_maxy)
{ /* we clicked below the display region; this is
* interpreted as "scroll down" request
*/
if (event.bstate & BUTTON1_CLICKED)
result = menu_driver(menu, REQ_SCR_DLINE);
else if (event.bstate & BUTTON1_DOUBLE_CLICKED)
result = menu_driver(menu, REQ_SCR_DPAGE);
else if (event.bstate & BUTTON1_TRIPLE_CLICKED)
result = menu_driver(menu, REQ_LAST_ITEM);
RETURN(result);
}
else if (wenclose(sub, event.y, event.x))
{ /* Inside the area we try to find the hit item */
int i, x, y, err;
ry = event.y;
rx = event.x;
if (wmouse_trafo(sub, &ry, &rx, FALSE))
{
for (i = 0; i < menu->nitems; i++)
{
err = _nc_menu_cursor_pos(menu, menu->items[i],
&y, &x);
if (E_OK == err)
{
if ((ry == y) &&
(rx >= x) &&
(rx < x + menu->itemlen))
{
item = menu->items[i];
result = E_OK;
break;
}
}
}
if (E_OK == result)
{ /* We found an item, now we can handle the click.
* A single click just positions the menu cursor
* to the clicked item. A double click toggles
* the item.
*/
if (event.bstate & BUTTON1_DOUBLE_CLICKED)
{
_nc_New_TopRow_and_CurrentItem(menu,
my_top_row,
item);
menu_driver(menu, REQ_TOGGLE_ITEM);
result = E_UNKNOWN_COMMAND;
}
}
}
}
}
}
else
{
if (menu->opt & O_MOUSE_MENU)
ungetmouse(&event); /* let someone else handle this */
result = E_REQUEST_DENIED;
}
}
#endif /* NCURSES_MOUSE_VERSION */
else
result = E_UNKNOWN_COMMAND;
}
if (item == 0)
{
result = E_BAD_STATE;
}
else if (E_OK == result)
{
/* Adjust the top row if it turns out that the current item unfortunately
doesn't appear in the menu window */
if (item->y < my_top_row)
my_top_row = item->y;
else if (item->y >= (my_top_row + menu->arows))
my_top_row = item->y - menu->arows + 1;
_nc_New_TopRow_and_CurrentItem(menu, my_top_row, item);
}
RETURN(result);
}
/* m_driver.c ends here */
diff --git a/contrib/ncurses/menu/m_format.c b/contrib/ncurses/menu/m_format.c
index 9738dbf25d2d..848de0b21118 100644
--- a/contrib/ncurses/menu/m_format.c
+++ b/contrib/ncurses/menu/m_format.c
@@ -1,132 +1,132 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_format *
* Set and get maximum numbers of rows and columns in menus *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_format.c,v 1.19 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_format.c,v 1.21 2020/12/12 00:38:02 tom Exp $")
#define minimum(a,b) ((a)<(b) ? (a): (b))
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_format(MENU *menu, int rows, int cols)
|
| Description : Sets the maximum number of rows and columns of items
| that may be displayed at one time on a menu. If the
| menu contains more items than can be displayed at
| once, the menu will be scrollable.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid values passed
| E_NOT_CONNECTED - there are no items connected
| E_POSTED - the menu is already posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_menu_format(MENU * menu, int rows, int cols)
+MENU_EXPORT(int)
+set_menu_format(MENU *menu, int rows, int cols)
{
int total_rows, total_cols;
T((T_CALLED("set_menu_format(%p,%d,%d)"), (void *)menu, rows, cols));
if (rows < 0 || cols < 0)
RETURN(E_BAD_ARGUMENT);
if (menu)
{
if (menu->status & _POSTED)
RETURN(E_POSTED);
if (!(menu->items))
RETURN(E_NOT_CONNECTED);
if (rows == 0)
rows = menu->frows;
if (cols == 0)
cols = menu->fcols;
if (menu->pattern)
Reset_Pattern(menu);
menu->frows = (short)rows;
menu->fcols = (short)cols;
assert(rows > 0 && cols > 0);
total_rows = (menu->nitems - 1) / cols + 1;
total_cols = (menu->opt & O_ROWMAJOR) ?
minimum(menu->nitems, cols) :
(menu->nitems - 1) / total_rows + 1;
menu->rows = (short)total_rows;
menu->cols = (short)total_cols;
menu->arows = (short)minimum(total_rows, rows);
menu->toprow = 0;
menu->curitem = *(menu->items);
assert(menu->curitem);
SetStatus(menu, _LINK_NEEDED);
_nc_Calculate_Item_Length_and_Width(menu);
}
else
{
if (rows > 0)
_nc_Default_Menu.frows = (short)rows;
if (cols > 0)
_nc_Default_Menu.fcols = (short)cols;
}
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void menu_format(const MENU *menu, int *rows, int *cols)
|
| Description : Returns the maximum number of rows and columns that may
| be displayed at one time on menu.
|
| Return Values : -
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
-menu_format(const MENU * menu, int *rows, int *cols)
+MENU_EXPORT(void)
+menu_format(const MENU *menu, int *rows, int *cols)
{
if (rows)
*rows = Normalize_Menu(menu)->frows;
if (cols)
*cols = Normalize_Menu(menu)->fcols;
}
/* m_format.c ends here */
diff --git a/contrib/ncurses/menu/m_global.c b/contrib/ncurses/menu/m_global.c
index 489987febaa1..2e5211468a86 100644
--- a/contrib/ncurses/menu/m_global.c
+++ b/contrib/ncurses/menu/m_global.c
@@ -1,603 +1,603 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2012,2014 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_global *
* Globally used internal routines and the default menu and item structures *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_global.c,v 1.30 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_global.c,v 1.32 2020/12/12 00:38:02 tom Exp $")
static char mark[] = "-";
/* *INDENT-OFF* */
-NCURSES_EXPORT_VAR(MENU) _nc_Default_Menu = {
+MENU_EXPORT_VAR(MENU) _nc_Default_Menu = {
16, /* Nr. of chars high */
1, /* Nr. of chars wide */
16, /* Nr. of items high */
1, /* Nr. of items wide */
16, /* Nr. of formatted items high */
1, /* Nr. of formatted items wide */
16, /* Nr. of items high (actual) */
0, /* length of widest name */
0, /* length of widest description */
1, /* length of mark */
1, /* length of one item */
1, /* Spacing for descriptor */
1, /* Spacing for columns */
1, /* Spacing for rows */
(char *)0, /* buffer used to store match chars */
0, /* Index into pattern buffer */
(WINDOW *)0, /* Window containing entire menu */
(WINDOW *)0, /* Portion of menu displayed */
(WINDOW *)0, /* User's window */
(WINDOW *)0, /* User's subwindow */
(ITEM **)0, /* List of items */
0, /* Total Nr. of items in menu */
(ITEM *)0, /* Current item */
0, /* Top row of menu */
(chtype)A_REVERSE, /* Attribute for selection */
(chtype)A_NORMAL, /* Attribute for nonselection */
(chtype)A_UNDERLINE, /* Attribute for inactive */
' ', /* Pad character */
(Menu_Hook)0, /* Menu init */
(Menu_Hook)0, /* Menu term */
(Menu_Hook)0, /* Item init */
(Menu_Hook)0, /* Item term */
(void *)0, /* userptr */
mark, /* mark */
ALL_MENU_OPTS, /* options */
0 /* status */
};
-NCURSES_EXPORT_VAR(ITEM) _nc_Default_Item = {
+MENU_EXPORT_VAR(ITEM) _nc_Default_Item = {
{ (char *)0, 0 }, /* name */
{ (char *)0, 0 }, /* description */
(MENU *)0, /* Pointer to parent menu */
(char *)0, /* Userpointer */
ALL_ITEM_OPTS, /* options */
0, /* Item Nr. */
0, /* y */
0, /* x */
FALSE, /* value */
(ITEM *)0, /* left */
(ITEM *)0, /* right */
(ITEM *)0, /* up */
(ITEM *)0 /* down */
};
/* *INDENT-ON* */
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : static void ComputeMaximum_NameDesc_Lenths(MENU *menu)
|
| Description : Calculates the maximum name and description lengths
| of the items connected to the menu
|
| Return Values : -
+--------------------------------------------------------------------------*/
NCURSES_INLINE static void
-ComputeMaximum_NameDesc_Lengths(MENU * menu)
+ComputeMaximum_NameDesc_Lengths(MENU *menu)
{
unsigned MaximumNameLength = 0;
unsigned MaximumDescriptionLength = 0;
ITEM **items;
unsigned check;
assert(menu && menu->items);
for (items = menu->items; *items; items++)
{
check = (unsigned)_nc_Calculate_Text_Width(&((*items)->name));
if (check > MaximumNameLength)
MaximumNameLength = check;
check = (unsigned)_nc_Calculate_Text_Width(&((*items)->description));
if (check > MaximumDescriptionLength)
MaximumDescriptionLength = check;
}
menu->namelen = (short)MaximumNameLength;
menu->desclen = (short)MaximumDescriptionLength;
T(("ComputeMaximum_NameDesc_Lengths %d,%d", menu->namelen, menu->desclen));
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : static void ResetConnectionInfo(MENU *, ITEM **)
|
| Description : Reset all information in the menu and the items in
| the item array that indicates a connection
|
| Return Values : -
+--------------------------------------------------------------------------*/
NCURSES_INLINE static void
-ResetConnectionInfo(MENU * menu, ITEM ** items)
+ResetConnectionInfo(MENU *menu, ITEM **items)
{
ITEM **item;
assert(menu && items);
for (item = items; *item; item++)
{
(*item)->index = 0;
- (*item)->imenu = (MENU *) 0;
+ (*item)->imenu = (MENU *)0;
}
if (menu->pattern)
free(menu->pattern);
menu->pattern = (char *)0;
menu->pindex = 0;
- menu->items = (ITEM **) 0;
+ menu->items = (ITEM **)0;
menu->nitems = 0;
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : bool _nc_Connect_Items(MENU *menu, ITEM **items)
|
| Description : Connect the items in the item array to the menu.
| Decorate all the items with a number and a backward
| pointer to the menu.
|
| Return Values : TRUE - successful connection
| FALSE - connection failed
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
-_nc_Connect_Items(MENU * menu, ITEM ** items)
+MENU_EXPORT(bool)
+_nc_Connect_Items(MENU *menu, ITEM **items)
{
ITEM **item;
unsigned int ItemCount = 0;
if (menu && items)
{
for (item = items; *item; item++)
{
if ((*item)->imenu)
{
/* if a item is already connected, reject connection */
break;
}
}
if (!(*item))
/* we reached the end, so there was no connected item */
{
for (item = items; *item; item++)
{
if (menu->opt & O_ONEVALUE)
{
(*item)->value = FALSE;
}
(*item)->index = (short)ItemCount++;
(*item)->imenu = menu;
}
}
}
else
return (FALSE);
if (ItemCount != 0)
{
menu->items = items;
menu->nitems = (short)ItemCount;
ComputeMaximum_NameDesc_Lengths(menu);
if ((menu->pattern = typeMalloc(char, (unsigned)(1 + menu->namelen))))
{
Reset_Pattern(menu);
set_menu_format(menu, menu->frows, menu->fcols);
menu->curitem = *items;
menu->toprow = 0;
return (TRUE);
}
}
/* If we fall through to this point, we have to reset all items connection
and inform about a reject connection */
ResetConnectionInfo(menu, items);
return (FALSE);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void _nc_Disconnect_Items(MENU *menu)
|
| Description : Disconnect the menus item array from the menu
|
| Return Values : -
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
-_nc_Disconnect_Items(MENU * menu)
+MENU_EXPORT(void)
+_nc_Disconnect_Items(MENU *menu)
{
if (menu && menu->items)
ResetConnectionInfo(menu, menu->items);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int _nc_Calculate_Text_Width(const TEXT * item)
|
| Description : Calculate the number of columns for a TEXT.
|
| Return Values : the width
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-_nc_Calculate_Text_Width(const TEXT * item /*FIXME: limit length */ )
+MENU_EXPORT(int)
+_nc_Calculate_Text_Width(const TEXT *item /*FIXME: limit length */ )
{
#if USE_WIDEC_SUPPORT
int result = item->length;
T((T_CALLED("_nc_menu_text_width(%p)"), (const void *)item));
if (result != 0 && item->str != 0)
{
int count = (int)mbstowcs(0, item->str, 0);
wchar_t *temp = 0;
if (count > 0
&& (temp = typeMalloc(wchar_t, 2 + count)) != 0)
{
int n;
result = 0;
mbstowcs(temp, item->str, (unsigned)count);
for (n = 0; n < count; ++n)
{
int test = wcwidth(temp[n]);
if (test <= 0)
test = 1;
result += test;
}
free(temp);
}
}
returnCode(result);
#else
return item->length;
#endif
}
/*
* Calculate the actual width of a menu entry for wide-characters.
*/
#if USE_WIDEC_SUPPORT
static int
-calculate_actual_width(MENU * menu, bool name)
+calculate_actual_width(MENU *menu, bool name)
{
int width = 0;
int check = 0;
ITEM **items;
assert(menu && menu->items);
if (menu->items != 0)
{
for (items = menu->items; *items; items++)
{
if (name)
{
check = _nc_Calculate_Text_Width(&((*items)->name));
}
else
{
check = _nc_Calculate_Text_Width(&((*items)->description));
}
if (check > width)
width = check;
}
}
else
{
width = (name ? menu->namelen : menu->desclen);
}
T(("calculate_actual_width %s = %d/%d",
name ? "name" : "desc",
width,
name ? menu->namelen : menu->desclen));
return width;
}
#else
#define calculate_actual_width(menu, name) (name ? menu->namelen : menu->desclen)
#endif
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void _nc_Calculate_Item_Length_and_Width(MENU *menu)
|
| Description : Calculate the length of an item and the width of the
| whole menu.
|
| Return Values : -
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
-_nc_Calculate_Item_Length_and_Width(MENU * menu)
+MENU_EXPORT(void)
+_nc_Calculate_Item_Length_and_Width(MENU *menu)
{
int l;
assert(menu);
menu->height = (short)(1 + menu->spc_rows * (menu->arows - 1));
l = calculate_actual_width(menu, TRUE);
l += menu->marklen;
if ((menu->opt & O_SHOWDESC) && (menu->desclen > 0))
{
l += calculate_actual_width(menu, FALSE);
l += menu->spc_desc;
}
menu->itemlen = (short)l;
l *= menu->cols;
l += (menu->cols - 1) * menu->spc_cols; /* for the padding between the columns */
menu->width = (short)l;
T(("_nc_CalculateItem_Length_and_Width columns %d, item %d, width %d",
menu->cols,
menu->itemlen,
menu->width));
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void _nc_Link_Item(MENU *menu)
|
| Description : Statically calculate for every item its four neighbors.
| This depends on the orientation of the menu. This
| static approach simplifies navigation in the menu a lot.
|
| Return Values : -
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
-_nc_Link_Items(MENU * menu)
+MENU_EXPORT(void)
+_nc_Link_Items(MENU *menu)
{
if (menu && menu->items && *(menu->items))
{
int i, j;
ITEM *item;
int Number_Of_Items = menu->nitems;
int col = 0, row = 0;
int Last_in_Row;
int Last_in_Column;
bool cycle = (menu->opt & O_NONCYCLIC) ? FALSE : TRUE;
ClrStatus(menu, _LINK_NEEDED);
if (menu->opt & O_ROWMAJOR)
{
int Number_Of_Columns = menu->cols;
for (i = 0; i < Number_Of_Items; i++)
{
item = menu->items[i];
Last_in_Row = row * Number_Of_Columns + (Number_Of_Columns - 1);
item->left = (col) ?
/* if we are not in the leftmost column, we can use the
predecessor in the items array */
menu->items[i - 1] :
(cycle ? menu->items[(Last_in_Row >= Number_Of_Items) ?
Number_Of_Items - 1 :
Last_in_Row] :
- (ITEM *) 0);
+ (ITEM *)0);
item->right = ((col < (Number_Of_Columns - 1)) &&
((i + 1) < Number_Of_Items)
)?
menu->items[i + 1] :
(cycle ? menu->items[row * Number_Of_Columns] :
- (ITEM *) 0
+ (ITEM *)0
);
Last_in_Column = (menu->rows - 1) * Number_Of_Columns + col;
item->up = (row) ? menu->items[i - Number_Of_Columns] :
(cycle ? menu->items[(Last_in_Column >= Number_Of_Items) ?
Number_Of_Items - 1 :
Last_in_Column] :
- (ITEM *) 0);
+ (ITEM *)0);
item->down = ((i + Number_Of_Columns) < Number_Of_Items)
?
menu->items[i + Number_Of_Columns] :
(cycle ? menu->items[(row + 1) < menu->rows ?
Number_Of_Items - 1 : col] :
- (ITEM *) 0);
+ (ITEM *)0);
item->x = (short)col;
item->y = (short)row;
if (++col == Number_Of_Columns)
{
row++;
col = 0;
}
}
}
else
{
int Number_Of_Rows = menu->rows;
for (j = 0; j < Number_Of_Items; j++)
{
item = menu->items[i = (col * Number_Of_Rows + row)];
Last_in_Column = (menu->cols - 1) * Number_Of_Rows + row;
item->left = (col) ?
menu->items[i - Number_Of_Rows] :
(cycle ? (Last_in_Column >= Number_Of_Items) ?
menu->items[Last_in_Column - Number_Of_Rows] :
menu->items[Last_in_Column] :
- (ITEM *) 0);
+ (ITEM *)0);
item->right = ((i + Number_Of_Rows) < Number_Of_Items)
?
menu->items[i + Number_Of_Rows] :
- (cycle ? menu->items[row] : (ITEM *) 0);
+ (cycle ? menu->items[row] : (ITEM *)0);
Last_in_Row = col * Number_Of_Rows + (Number_Of_Rows - 1);
item->up = (row) ?
menu->items[i - 1] :
(cycle ?
menu->items[(Last_in_Row >= Number_Of_Items) ?
Number_Of_Items - 1 :
Last_in_Row] :
- (ITEM *) 0);
+ (ITEM *)0);
item->down = (row < (Number_Of_Rows - 1))
?
(menu->items[((i + 1) < Number_Of_Items) ?
i + 1 :
(col - 1) * Number_Of_Rows + row + 1]) :
(cycle ?
menu->items[col * Number_Of_Rows] :
- (ITEM *) 0
+ (ITEM *)0
);
item->x = (short)col;
item->y = (short)row;
if ((++row) == Number_Of_Rows)
{
col++;
row = 0;
}
}
}
}
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void _nc_Show_Menu(const MENU* menu)
|
| Description : Update the window that is associated with the menu
|
| Return Values : -
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
-_nc_Show_Menu(const MENU * menu)
+MENU_EXPORT(void)
+_nc_Show_Menu(const MENU *menu)
{
WINDOW *win;
int maxy, maxx;
assert(menu);
if ((menu->status & _POSTED) && !(menu->status & _IN_DRIVER))
{
/* adjust the internal subwindow to start on the current top */
assert(menu->sub);
mvderwin(menu->sub, menu->spc_rows * menu->toprow, 0);
win = Get_Menu_Window(menu);
maxy = getmaxy(win);
maxx = getmaxx(win);
if (menu->height < maxy)
maxy = menu->height;
if (menu->width < maxx)
maxx = menu->width;
copywin(menu->sub, win, 0, 0, 0, 0, maxy - 1, maxx - 1, 0);
pos_menu_cursor(menu);
}
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void _nc_New_TopRow_and_CurrentItem(
| MENU *menu,
| int new_toprow,
| ITEM *new_current_item)
|
| Description : Redisplay the menu so that the given row becomes the
| top row and the given item becomes the new current
| item.
|
| Return Values : -
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+MENU_EXPORT(void)
_nc_New_TopRow_and_CurrentItem(
- MENU * menu,
+ MENU *menu,
int new_toprow,
- ITEM * new_current_item)
+ ITEM *new_current_item)
{
ITEM *cur_item;
bool mterm_called = FALSE;
bool iterm_called = FALSE;
assert(menu);
if (menu->status & _POSTED)
{
if (new_current_item != menu->curitem)
{
Call_Hook(menu, itemterm);
iterm_called = TRUE;
}
if (new_toprow != menu->toprow)
{
Call_Hook(menu, menuterm);
mterm_called = TRUE;
}
cur_item = menu->curitem;
assert(cur_item);
menu->toprow = (short)(((menu->rows - menu->frows) >= 0)
? min(menu->rows - menu->frows, new_toprow)
: 0);
menu->curitem = new_current_item;
if (mterm_called)
{
Call_Hook(menu, menuinit);
}
if (iterm_called)
{
/* this means, move from the old current_item to the new one... */
Move_To_Current_Item(menu, cur_item);
Call_Hook(menu, iteminit);
}
if (mterm_called || iterm_called)
{
_nc_Show_Menu(menu);
}
else
pos_menu_cursor(menu);
}
else
{ /* if we are not posted, this is quite simple */
menu->toprow = (short)(((menu->rows - menu->frows) >= 0)
? min(menu->rows - menu->frows, new_toprow)
: 0);
menu->curitem = new_current_item;
}
}
/* m_global.c ends here */
diff --git a/contrib/ncurses/menu/m_hook.c b/contrib/ncurses/menu/m_hook.c
index c98aede7969d..916b9fc7ce7d 100644
--- a/contrib/ncurses/menu/m_hook.c
+++ b/contrib/ncurses/menu/m_hook.c
@@ -1,153 +1,153 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 1998-2012,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_hook *
* Assign application specific routines for automatic invocation by menus *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_hook.c,v 1.19 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_hook.c,v 1.20 2020/07/04 19:45:16 tom Exp $")
/* "Template" macro to generate function to set application specific hook */
#define GEN_HOOK_SET_FUNCTION( typ, name ) \
-NCURSES_IMPEXP int NCURSES_API set_ ## typ ## _ ## name (MENU *menu, Menu_Hook func )\
+MENU_EXPORT(int) NCURSES_API set_ ## typ ## _ ## name (MENU *menu, Menu_Hook func )\
{\
TR_FUNC_BFR(1);\
T((T_CALLED("set_" #typ "_" #name "(%p,%s)"), (void *) menu, TR_FUNC_ARG(0, func)));\
(Normalize_Menu(menu) -> typ ## name = func );\
RETURN(E_OK);\
}
/* "Template" macro to generate function to get application specific hook */
#define GEN_HOOK_GET_FUNCTION( typ, name ) \
-NCURSES_IMPEXP Menu_Hook NCURSES_API typ ## _ ## name ( const MENU *menu )\
+MENU_EXPORT(Menu_Hook) NCURSES_API typ ## _ ## name ( const MENU *menu )\
{\
T((T_CALLED(#typ "_" #name "(%p)"), (const void *) menu));\
returnMenuHook(Normalize_Menu(menu) -> typ ## name);\
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_init(MENU *menu, void (*f)(MENU *))
|
| Description : Set user-exit which is called when menu is posted
| or just after the top row changes.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
GEN_HOOK_SET_FUNCTION(menu, init)
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void (*)(MENU *) menu_init(const MENU *menu)
|
| Description : Return address of user-exit function which is called
| when a menu is posted or just after the top row
| changes.
|
| Return Values : Menu init function address or NULL
+--------------------------------------------------------------------------*/
GEN_HOOK_GET_FUNCTION(menu, init)
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_term (MENU *menu, void (*f)(MENU *))
|
| Description : Set user-exit which is called when menu is unposted
| or just before the top row changes.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
GEN_HOOK_SET_FUNCTION(menu, term)
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void (*)(MENU *) menu_term(const MENU *menu)
|
| Description : Return address of user-exit function which is called
| when a menu is unposted or just before the top row
| changes.
|
| Return Values : Menu finalization function address or NULL
+--------------------------------------------------------------------------*/
GEN_HOOK_GET_FUNCTION(menu, term)
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_item_init (MENU *menu, void (*f)(MENU *))
|
| Description : Set user-exit which is called when menu is posted
| or just after the current item changes.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
GEN_HOOK_SET_FUNCTION(item, init)
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void (*)(MENU *) item_init (const MENU *menu)
|
| Description : Return address of user-exit function which is called
| when a menu is posted or just after the current item
| changes.
|
| Return Values : Item init function address or NULL
+--------------------------------------------------------------------------*/
GEN_HOOK_GET_FUNCTION(item, init)
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_item_term (MENU *menu, void (*f)(MENU *))
|
| Description : Set user-exit which is called when menu is unposted
| or just before the current item changes.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
GEN_HOOK_SET_FUNCTION(item, term)
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void (*)(MENU *) item_init (const MENU *menu)
|
| Description : Return address of user-exit function which is called
| when a menu is unposted or just before the current item
| changes.
|
| Return Values : Item finalization function address or NULL
+--------------------------------------------------------------------------*/
GEN_HOOK_GET_FUNCTION(item, term)
/* m_hook.c ends here */
diff --git a/contrib/ncurses/menu/m_item_cur.c b/contrib/ncurses/menu/m_item_cur.c
index c09bf31125f9..dcb0be156ac5 100644
--- a/contrib/ncurses/menu/m_item_cur.c
+++ b/contrib/ncurses/menu/m_item_cur.c
@@ -1,114 +1,114 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_item_cur *
* Set and get current menus item *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_cur.c,v 1.19 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_item_cur.c,v 1.21 2020/12/12 00:38:02 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_current_item(MENU *menu, const ITEM *item)
|
| Description : Make the item the current item
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_current_item(MENU * menu, ITEM * item)
+MENU_EXPORT(int)
+set_current_item(MENU *menu, ITEM *item)
{
T((T_CALLED("set_current_item(%p,%p)"), (void *)menu, (void *)item));
if (menu && item && (item->imenu == menu))
{
if (menu->status & _IN_DRIVER)
RETURN(E_BAD_STATE);
assert(menu->curitem);
if (item != menu->curitem)
{
if (menu->status & _LINK_NEEDED)
{
/*
* Items are available, but they are not linked together.
* So we have to link here.
*/
_nc_Link_Items(menu);
}
assert(menu->pattern);
Reset_Pattern(menu);
/* adjust the window to make item visible and update the menu */
Adjust_Current_Item(menu, menu->toprow, item);
}
}
else
RETURN(E_BAD_ARGUMENT);
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : ITEM *current_item(const MENU *menu)
|
| Description : Return the menus current item
|
| Return Values : Item pointer or NULL if failure
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(ITEM *)
-current_item(const MENU * menu)
+MENU_EXPORT(ITEM *)
+current_item(const MENU *menu)
{
T((T_CALLED("current_item(%p)"), (const void *)menu));
- returnItem((menu && menu->items) ? menu->curitem : (ITEM *) 0);
+ returnItem((menu && menu->items) ? menu->curitem : (ITEM *)0);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int item_index(const ITEM *)
|
| Description : Return the logical index of this item.
|
| Return Values : The index or ERR if this is an invalid item pointer
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-item_index(const ITEM * item)
+MENU_EXPORT(int)
+item_index(const ITEM *item)
{
T((T_CALLED("item_index(%p)"), (const void *)item));
returnCode((item && item->imenu) ? item->index : ERR);
}
/* m_item_cur.c ends here */
diff --git a/contrib/ncurses/menu/m_item_nam.c b/contrib/ncurses/menu/m_item_nam.c
index aaf54e0a3352..92966270454d 100644
--- a/contrib/ncurses/menu/m_item_nam.c
+++ b/contrib/ncurses/menu/m_item_nam.c
@@ -1,73 +1,73 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_item_nam *
* Get menus item name and description *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_nam.c,v 1.16 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_item_nam.c,v 1.18 2020/12/12 00:38:08 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : char *item_name(const ITEM *item)
|
| Description : Return name of menu item
|
| Return Values : See above; returns NULL if item is invalid
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(const char *)
-item_name(const ITEM * item)
+MENU_EXPORT(const char *)
+item_name(const ITEM *item)
{
T((T_CALLED("item_name(%p)"), (const void *)item));
returnCPtr((item) ? item->name.str : (char *)0);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : char *item_description(const ITEM *item)
|
| Description : Returns description of item
|
| Return Values : See above; Returns NULL if item is invalid
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(const char *)
-item_description(const ITEM * item)
+MENU_EXPORT(const char *)
+item_description(const ITEM *item)
{
T((T_CALLED("item_description(%p)"), (const void *)item));
returnCPtr((item) ? item->description.str : (char *)0);
}
/* m_item_nam.c ends here */
diff --git a/contrib/ncurses/menu/m_item_new.c b/contrib/ncurses/menu/m_item_new.c
index 1e7950db2f51..4e3f67bacdd0 100644
--- a/contrib/ncurses/menu/m_item_new.c
+++ b/contrib/ncurses/menu/m_item_new.c
@@ -1,275 +1,277 @@
/****************************************************************************
- * Copyright 2020 Thomas E. Dickey *
+ * Copyright 2020,2021 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_item_new *
* Create and destroy menu items *
* Set and get marker string for menu *
***************************************************************************/
#include "menu.priv.h"
#if USE_WIDEC_SUPPORT
#if HAVE_WCTYPE_H
#include <wctype.h>
#endif
#endif
-MODULE_ID("$Id: m_item_new.c,v 1.34 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_item_new.c,v 1.37 2021/02/13 19:40:51 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : bool Is_Printable_String(const char *s)
|
| Description : Checks whether or not the string contains only printable
| characters.
|
| Return Values : TRUE - if string is printable
| FALSE - if string contains non-printable characters
+--------------------------------------------------------------------------*/
static bool
Is_Printable_String(const char *s)
{
int result = TRUE;
#if USE_WIDEC_SUPPORT
int count = (int)mbstowcs(0, s, 0);
wchar_t *temp = 0;
assert(s);
if (count > 0
&& (temp = typeCalloc(wchar_t, (2 + (unsigned)count))) != 0)
{
int n;
mbstowcs(temp, s, (unsigned)count);
for (n = 0; n < count; ++n)
- if (!iswprint((wint_t) temp[n]))
+ if (!iswprint((wint_t)temp[n]))
{
result = FALSE;
break;
}
free(temp);
}
#else
assert(s);
while (*s)
{
if (!isprint(UChar(*s)))
{
result = FALSE;
break;
}
s++;
}
#endif
return result;
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : ITEM *new_item(char *name, char *description)
|
| Description : Create a new item with name and description. Return
| a pointer to this new item.
| N.B.: an item must(!) have a name.
|
| Return Values : The item pointer or NULL if creation failed.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(ITEM *)
+MENU_EXPORT(ITEM *)
new_item(const char *name, const char *description)
{
ITEM *item;
T((T_CALLED("new_item(\"%s\", \"%s\")"),
name ? name : "",
description ? description : ""));
if (!name || (*name == '\0') || !Is_Printable_String(name))
{
- item = (ITEM *) 0;
+ item = (ITEM *)0;
SET_ERROR(E_BAD_ARGUMENT);
}
else
{
item = typeCalloc(ITEM, 1);
+
if (item)
{
+ T((T_CREATE("item %p"), (void *)item));
*item = _nc_Default_Item; /* hope we have struct assignment */
item->name.length = (unsigned short)strlen(name);
item->name.str = name;
if (description && (*description != '\0') &&
Is_Printable_String(description))
{
item->description.length = (unsigned short)strlen(description);
item->description.str = description;
}
else
{
item->description.length = 0;
item->description.str = (char *)0;
}
}
else
SET_ERROR(E_SYSTEM_ERROR);
}
returnItem(item);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int free_item(ITEM *item)
|
| Description : Free the allocated storage for this item.
| N.B.: a connected item can't be freed.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid value has been passed
| E_CONNECTED - item is still connected to a menu
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-free_item(ITEM * item)
+MENU_EXPORT(int)
+free_item(ITEM *item)
{
T((T_CALLED("free_item(%p)"), (void *)item));
if (!item)
RETURN(E_BAD_ARGUMENT);
if (item->imenu)
RETURN(E_CONNECTED);
free(item);
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_mark( MENU *menu, const char *mark )
|
| Description : Set the mark string used to indicate the current
| item (single-valued menu) or the selected items
| (multi-valued menu).
| The mark argument may be NULL, in which case no
| marker is used.
| This might be a little bit tricky, because this may
| affect the geometry of the menu, which we don't allow
| if it is already posted.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - an invalid value has been passed
| E_SYSTEM_ERROR - no memory to store mark
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_menu_mark(MENU * menu, const char *mark)
+MENU_EXPORT(int)
+set_menu_mark(MENU *menu, const char *mark)
{
short l;
T((T_CALLED("set_menu_mark(%p,%s)"), (void *)menu, _nc_visbuf(mark)));
if (mark && (*mark != '\0') && Is_Printable_String(mark))
l = (short)strlen(mark);
else
l = 0;
if (menu)
{
char *old_mark = menu->mark;
unsigned short old_status = menu->status;
if (menu->status & _POSTED)
{
/* If the menu is already posted, the geometry is fixed. Then
we can only accept a mark with exactly the same length */
if (menu->marklen != l)
RETURN(E_BAD_ARGUMENT);
}
menu->marklen = l;
if (l)
{
menu->mark = strdup(mark);
if (menu->mark)
{
if (menu != &_nc_Default_Menu)
SetStatus(menu, _MARK_ALLOCATED);
}
else
{
menu->mark = old_mark;
menu->marklen = (short)((old_mark != 0) ? strlen(old_mark) : 0);
RETURN(E_SYSTEM_ERROR);
}
}
else
menu->mark = (char *)0;
if ((old_status & _MARK_ALLOCATED) && old_mark)
free(old_mark);
if (menu->status & _POSTED)
{
_nc_Draw_Menu(menu);
_nc_Show_Menu(menu);
}
else
{
/* Recalculate the geometry */
_nc_Calculate_Item_Length_and_Width(menu);
}
}
else
{
returnCode(set_menu_mark(&_nc_Default_Menu, mark));
}
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : char *menu_mark(const MENU *menu)
|
| Description : Return a pointer to the marker string
|
| Return Values : The marker string pointer or NULL if no marker defined
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(const char *)
-menu_mark(const MENU * menu)
+MENU_EXPORT(const char *)
+menu_mark(const MENU *menu)
{
T((T_CALLED("menu_mark(%p)"), (const void *)menu));
returnPtr(Normalize_Menu(menu)->mark);
}
/* m_item_new.c */
diff --git a/contrib/ncurses/menu/m_item_opt.c b/contrib/ncurses/menu/m_item_opt.c
index f8df220552eb..985fd2988c37 100644
--- a/contrib/ncurses/menu/m_item_opt.c
+++ b/contrib/ncurses/menu/m_item_opt.c
@@ -1,160 +1,160 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_item_opt *
* Menus item option routines *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_opt.c,v 1.19 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_item_opt.c,v 1.21 2020/12/12 00:38:08 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_item_opts(ITEM *item, Item_Options opts)
|
| Description : Set the options of the item. If there are relevant
| changes, the item is connected and the menu is posted,
| the menu will be redisplayed.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid item options
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_item_opts(ITEM * item, Item_Options opts)
+MENU_EXPORT(int)
+set_item_opts(ITEM *item, Item_Options opts)
{
T((T_CALLED("set_menu_opts(%p,%d)"), (void *)item, opts));
opts &= ALL_ITEM_OPTS;
if (opts & ~ALL_ITEM_OPTS)
RETURN(E_BAD_ARGUMENT);
if (item)
{
if (item->opt != opts)
{
MENU *menu = item->imenu;
item->opt = opts;
if ((!(opts & O_SELECTABLE)) && item->value)
item->value = FALSE;
if (menu && (menu->status & _POSTED))
{
Move_And_Post_Item(menu, item);
_nc_Show_Menu(menu);
}
}
}
else
_nc_Default_Item.opt = opts;
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int item_opts_off(ITEM *item, Item_Options opts)
|
| Description : Switch of the options for this item.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid options
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-item_opts_off(ITEM * item, Item_Options opts)
+MENU_EXPORT(int)
+item_opts_off(ITEM *item, Item_Options opts)
{
ITEM *citem = item; /* use a copy because set_item_opts must detect
NULL item itself to adjust its behavior */
T((T_CALLED("item_opts_off(%p,%d)"), (void *)item, opts));
if (opts & ~ALL_ITEM_OPTS)
RETURN(E_BAD_ARGUMENT);
else
{
Normalize_Item(citem);
opts = citem->opt & ~(opts & ALL_ITEM_OPTS);
returnCode(set_item_opts(item, opts));
}
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int item_opts_on(ITEM *item, Item_Options opts)
|
| Description : Switch on the options for this item.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid options
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-item_opts_on(ITEM * item, Item_Options opts)
+MENU_EXPORT(int)
+item_opts_on(ITEM *item, Item_Options opts)
{
ITEM *citem = item; /* use a copy because set_item_opts must detect
NULL item itself to adjust its behavior */
T((T_CALLED("item_opts_on(%p,%d)"), (void *)item, opts));
opts &= ALL_ITEM_OPTS;
if (opts & ~ALL_ITEM_OPTS)
RETURN(E_BAD_ARGUMENT);
else
{
Normalize_Item(citem);
opts = citem->opt | opts;
returnCode(set_item_opts(item, opts));
}
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : Item_Options item_opts(const ITEM *item)
|
| Description : Switch of the options for this item.
|
| Return Values : Items options
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(Item_Options)
-item_opts(const ITEM * item)
+MENU_EXPORT(Item_Options)
+item_opts(const ITEM *item)
{
T((T_CALLED("item_opts(%p)"), (const void *)item));
returnItemOpts(ALL_ITEM_OPTS & Normalize_Item(item)->opt);
}
/* m_item_opt.c ends here */
diff --git a/contrib/ncurses/menu/m_item_top.c b/contrib/ncurses/menu/m_item_top.c
index 9417e72bb561..ee0d17b43dd5 100644
--- a/contrib/ncurses/menu/m_item_top.c
+++ b/contrib/ncurses/menu/m_item_top.c
@@ -1,108 +1,108 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_item_top *
* Set and get top menus item *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_top.c,v 1.12 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_item_top.c,v 1.14 2020/12/12 00:38:08 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_top_row(MENU *menu, int row)
|
| Description : Makes the specified row the top row in the menu
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - not a menu pointer or invalid row
| E_NOT_CONNECTED - there are no items for the menu
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_top_row(MENU * menu, int row)
+MENU_EXPORT(int)
+set_top_row(MENU *menu, int row)
{
ITEM *item;
T((T_CALLED("set_top_row(%p,%d)"), (void *)menu, row));
if (menu)
{
if (menu->status & _IN_DRIVER)
RETURN(E_BAD_STATE);
- if (menu->items == (ITEM **) 0)
+ if (menu->items == (ITEM **)0)
RETURN(E_NOT_CONNECTED);
if ((row < 0) || (row > (menu->rows - menu->arows)))
RETURN(E_BAD_ARGUMENT);
}
else
RETURN(E_BAD_ARGUMENT);
if (row != menu->toprow)
{
if (menu->status & _LINK_NEEDED)
_nc_Link_Items(menu);
item = menu->items[(menu->opt & O_ROWMAJOR) ? (row * menu->cols) : row];
assert(menu->pattern);
Reset_Pattern(menu);
_nc_New_TopRow_and_CurrentItem(menu, row, item);
}
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int top_row(const MENU *)
|
| Description : Return the top row of the menu
|
| Return Values : The row number or ERR if there is no row
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-top_row(const MENU * menu)
+MENU_EXPORT(int)
+top_row(const MENU *menu)
{
T((T_CALLED("top_row(%p)"), (const void *)menu));
if (menu && menu->items && *(menu->items))
{
assert((menu->toprow >= 0) && (menu->toprow < menu->rows));
returnCode(menu->toprow);
}
else
returnCode(ERR);
}
/* m_item_top.c ends here */
diff --git a/contrib/ncurses/menu/m_item_use.c b/contrib/ncurses/menu/m_item_use.c
index 308143275199..52d087e91df3 100644
--- a/contrib/ncurses/menu/m_item_use.c
+++ b/contrib/ncurses/menu/m_item_use.c
@@ -1,77 +1,77 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_item_use *
* Associate application data with menu items *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_use.c,v 1.19 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_item_use.c,v 1.21 2020/12/12 00:38:08 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_item_userptr(ITEM *item, void *userptr)
|
| Description : Set the pointer that is reserved in any item to store
| application relevant information.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_item_userptr(ITEM * item, void *userptr)
+MENU_EXPORT(int)
+set_item_userptr(ITEM *item, void *userptr)
{
T((T_CALLED("set_item_userptr(%p,%p)"), (void *)item, (void *)userptr));
Normalize_Item(item)->userptr = userptr;
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void *item_userptr(const ITEM *item)
|
| Description : Return the pointer that is reserved in any item to store
| application relevant information.
|
| Return Values : Value of the pointer. If no such pointer has been set,
| NULL is returned.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void *)
-item_userptr(const ITEM * item)
+MENU_EXPORT(void *)
+item_userptr(const ITEM *item)
{
T((T_CALLED("item_userptr(%p)"), (const void *)item));
returnVoidPtr(Normalize_Item(item)->userptr);
}
/* m_item_use.c */
diff --git a/contrib/ncurses/menu/m_item_val.c b/contrib/ncurses/menu/m_item_val.c
index d8d11f211765..a5c38e2716dc 100644
--- a/contrib/ncurses/menu/m_item_val.c
+++ b/contrib/ncurses/menu/m_item_val.c
@@ -1,105 +1,105 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_item_val *
* Set and get menus item values *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_val.c,v 1.16 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_item_val.c,v 1.18 2020/12/12 00:38:08 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_item_value(ITEM *item, int value)
|
| Description : Programmatically set the item's selection value. This is
| only allowed if the item is selectable at all and if
| it is not connected to a single-valued menu.
| If the item is connected to a posted menu, the menu
| will be redisplayed.
|
| Return Values : E_OK - success
| E_REQUEST_DENIED - not selectable or single valued menu
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_item_value(ITEM * item, bool value)
+MENU_EXPORT(int)
+set_item_value(ITEM *item, bool value)
{
MENU *menu;
T((T_CALLED("set_item_value(%p,%d)"), (void *)item, value));
if (item)
{
menu = item->imenu;
if ((!(item->opt & O_SELECTABLE)) ||
(menu && (menu->opt & O_ONEVALUE)))
RETURN(E_REQUEST_DENIED);
if (item->value ^ value)
{
item->value = value ? TRUE : FALSE;
if (menu)
{
if (menu->status & _POSTED)
{
Move_And_Post_Item(menu, item);
_nc_Show_Menu(menu);
}
}
}
}
else
_nc_Default_Item.value = value;
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : bool item_value(const ITEM *item)
|
| Description : Return the selection value of the item
|
| Return Values : TRUE - if item is selected
| FALSE - if item is not selected
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
-item_value(const ITEM * item)
+MENU_EXPORT(bool)
+item_value(const ITEM *item)
{
T((T_CALLED("item_value(%p)"), (const void *)item));
returnBool((Normalize_Item(item)->value) ? TRUE : FALSE);
}
/* m_item_val.c ends here */
diff --git a/contrib/ncurses/menu/m_item_vis.c b/contrib/ncurses/menu/m_item_vis.c
index 8e9934134b16..8e409cb864ad 100644
--- a/contrib/ncurses/menu/m_item_vis.c
+++ b/contrib/ncurses/menu/m_item_vis.c
@@ -1,69 +1,69 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_item_vis *
* Tell if menu item is visible *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_vis.c,v 1.17 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_item_vis.c,v 1.19 2020/12/12 00:38:08 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : bool item_visible(const ITEM *item)
|
| Description : A item is visible if it currently appears in the
| subwindow of a posted menu.
|
| Return Values : TRUE if visible
| FALSE if invisible
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
-item_visible(const ITEM * item)
+MENU_EXPORT(bool)
+item_visible(const ITEM *item)
{
MENU *menu;
T((T_CALLED("item_visible(%p)"), (const void *)item));
if (item &&
(menu = item->imenu) &&
(menu->status & _POSTED) &&
((menu->toprow + menu->arows) > (item->y)) &&
(item->y >= menu->toprow))
returnBool(TRUE);
else
returnBool(FALSE);
}
/* m_item_vis.c ends here */
diff --git a/contrib/ncurses/menu/m_items.c b/contrib/ncurses/menu/m_items.c
index 9f46c8be2b53..5b24cb76a01d 100644
--- a/contrib/ncurses/menu/m_items.c
+++ b/contrib/ncurses/menu/m_items.c
@@ -1,111 +1,111 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2005,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_items *
* Connect and disconnect items to and from menus *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_items.c,v 1.18 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_items.c,v 1.20 2020/12/12 00:38:08 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_items(MENU *menu, ITEM **items)
|
| Description : Sets the item pointer array connected to menu.
|
| Return Values : E_OK - success
| E_POSTED - menu is already posted
| E_CONNECTED - one or more items are already connected
| to another menu.
| E_BAD_ARGUMENT - An incorrect menu or item array was
| passed to the function
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_menu_items(MENU * menu, ITEM ** items)
+MENU_EXPORT(int)
+set_menu_items(MENU *menu, ITEM **items)
{
T((T_CALLED("set_menu_items(%p,%p)"), (void *)menu, (void *)items));
if (!menu || (items && !(*items)))
RETURN(E_BAD_ARGUMENT);
if (menu->status & _POSTED)
RETURN(E_POSTED);
if (menu->items)
_nc_Disconnect_Items(menu);
if (items)
{
if (!_nc_Connect_Items(menu, items))
RETURN(E_CONNECTED);
}
menu->items = items;
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : ITEM **menu_items(const MENU *menu)
|
| Description : Returns a pointer to the item pointer array of the menu
|
| Return Values : NULL on error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(ITEM **)
-menu_items(const MENU * menu)
+MENU_EXPORT(ITEM **)
+menu_items(const MENU *menu)
{
T((T_CALLED("menu_items(%p)"), (const void *)menu));
- returnItemPtr(menu ? menu->items : (ITEM **) 0);
+ returnItemPtr(menu ? menu->items : (ITEM **)0);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int item_count(const MENU *menu)
|
| Description : Get the number of items connected to the menu. If the
| menu pointer is NULL we return -1.
|
| Return Values : Number of items or -1 to indicate error.
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-item_count(const MENU * menu)
+MENU_EXPORT(int)
+item_count(const MENU *menu)
{
T((T_CALLED("item_count(%p)"), (const void *)menu));
returnCode(menu ? menu->nitems : -1);
}
/* m_items.c ends here */
diff --git a/contrib/ncurses/menu/m_new.c b/contrib/ncurses/menu/m_new.c
index cf89196abd83..82c410c6a96a 100644
--- a/contrib/ncurses/menu/m_new.c
+++ b/contrib/ncurses/menu/m_new.c
@@ -1,143 +1,144 @@
/****************************************************************************
- * Copyright 2020 Thomas E. Dickey *
+ * Copyright 2020,2021 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_new *
* Creation and destruction of new menus *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_new.c,v 1.22 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_new.c,v 1.26 2021/02/13 19:43:10 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : MENU* _nc_new_menu(SCREEN*, ITEM **items)
|
| Description : Creates a new menu connected to the item pointer
| array items and returns a pointer to the new menu.
| The new menu is initialized with the values from the
| default menu.
|
| Return Values : NULL on error
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(MENU *)
-NCURSES_SP_NAME(new_menu) (NCURSES_SP_DCLx ITEM ** items)
+MENU_EXPORT(MENU *)
+NCURSES_SP_NAME(new_menu) (NCURSES_SP_DCLx ITEM **items)
{
int err = E_SYSTEM_ERROR;
MENU *menu = typeCalloc(MENU, 1);
T((T_CALLED("new_menu(%p,%p)"), (void *)SP_PARM, (void *)items));
if (menu)
{
+ T((T_CREATE("menu %p"), (void *)menu));
*menu = _nc_Default_Menu;
menu->status = 0;
menu->rows = menu->frows;
menu->cols = menu->fcols;
#if NCURSES_SP_FUNCS
/* This ensures userwin and usersub are always non-null,
so we can derive always the SCREEN that this menu is
running on. */
menu->userwin = SP_PARM->_stdscr;
menu->usersub = SP_PARM->_stdscr;
#endif
if (items && *items)
{
if (!_nc_Connect_Items(menu, items))
{
err = E_NOT_CONNECTED;
free(menu);
- menu = (MENU *) 0;
+ menu = (MENU *)0;
}
else
err = E_OK;
}
}
if (!menu)
SET_ERROR(err);
returnMenu(menu);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : MENU *new_menu(ITEM **items)
|
| Description : Creates a new menu connected to the item pointer
| array items and returns a pointer to the new menu.
| The new menu is initialized with the values from the
| default menu.
|
| Return Values : NULL on error
+--------------------------------------------------------------------------*/
#if NCURSES_SP_FUNCS
-NCURSES_EXPORT(MENU *)
-new_menu(ITEM ** items)
+MENU_EXPORT(MENU *)
+new_menu(ITEM **items)
{
return NCURSES_SP_NAME(new_menu) (CURRENT_SCREEN, items);
}
#endif
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int free_menu(MENU *menu)
|
| Description : Disconnects menu from its associated item pointer
| array and frees the storage allocated for the menu.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - Invalid menu pointer passed
| E_POSTED - Menu is already posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-free_menu(MENU * menu)
+MENU_EXPORT(int)
+free_menu(MENU *menu)
{
T((T_CALLED("free_menu(%p)"), (void *)menu));
if (!menu)
RETURN(E_BAD_ARGUMENT);
if (menu->status & _POSTED)
RETURN(E_POSTED);
if (menu->items)
_nc_Disconnect_Items(menu);
if ((menu->status & _MARK_ALLOCATED) && menu->mark)
free(menu->mark);
free(menu);
RETURN(E_OK);
}
/* m_new.c ends here */
diff --git a/contrib/ncurses/menu/m_opts.c b/contrib/ncurses/menu/m_opts.c
index 4c29f333bec7..bbf9459c9484 100644
--- a/contrib/ncurses/menu/m_opts.c
+++ b/contrib/ncurses/menu/m_opts.c
@@ -1,184 +1,184 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_opts *
* Menus option routines *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_opts.c,v 1.21 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_opts.c,v 1.23 2020/12/12 00:38:08 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_opts(MENU *menu, Menu_Options opts)
|
| Description : Set the options for this menu. If the new settings
| end up in a change of the geometry of the menu, it
| will be recalculated. This operation is forbidden if
| the menu is already posted.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid menu options
| E_POSTED - menu is already posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_menu_opts(MENU * menu, Menu_Options opts)
+MENU_EXPORT(int)
+set_menu_opts(MENU *menu, Menu_Options opts)
{
T((T_CALLED("set_menu_opts(%p,%d)"), (void *)menu, opts));
opts &= ALL_MENU_OPTS;
if (opts & ~ALL_MENU_OPTS)
RETURN(E_BAD_ARGUMENT);
if (menu)
{
if (menu->status & _POSTED)
RETURN(E_POSTED);
if ((opts & O_ROWMAJOR) != (menu->opt & O_ROWMAJOR))
{
/* we need this only if the layout really changed ... */
if (menu->items && menu->items[0])
{
menu->toprow = 0;
menu->curitem = menu->items[0];
assert(menu->curitem);
set_menu_format(menu, menu->frows, menu->fcols);
}
}
menu->opt = opts;
if (opts & O_ONEVALUE)
{
ITEM **item;
- if (((item = menu->items) != (ITEM **) 0))
+ if (((item = menu->items) != (ITEM **)0))
for (; *item; item++)
(*item)->value = FALSE;
}
if (opts & O_SHOWDESC) /* this also changes the geometry */
_nc_Calculate_Item_Length_and_Width(menu);
}
else
_nc_Default_Menu.opt = opts;
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int menu_opts_off(MENU *menu, Menu_Options opts)
|
| Description : Switch off the options for this menu. If the new settings
| end up in a change of the geometry of the menu, it
| will be recalculated. This operation is forbidden if
| the menu is already posted.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid options
| E_POSTED - menu is already posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-menu_opts_off(MENU * menu, Menu_Options opts)
+MENU_EXPORT(int)
+menu_opts_off(MENU *menu, Menu_Options opts)
{
MENU *cmenu = menu; /* use a copy because set_menu_opts must detect
NULL menu itself to adjust its behavior */
T((T_CALLED("menu_opts_off(%p,%d)"), (void *)menu, opts));
opts &= ALL_MENU_OPTS;
if (opts & ~ALL_MENU_OPTS)
RETURN(E_BAD_ARGUMENT);
else
{
Normalize_Menu(cmenu);
opts = cmenu->opt & ~opts;
returnCode(set_menu_opts(menu, opts));
}
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int menu_opts_on(MENU *menu, Menu_Options opts)
|
| Description : Switch on the options for this menu. If the new settings
| end up in a change of the geometry of the menu, it
| will be recalculated. This operation is forbidden if
| the menu is already posted.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid menu options
| E_POSTED - menu is already posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-menu_opts_on(MENU * menu, Menu_Options opts)
+MENU_EXPORT(int)
+menu_opts_on(MENU *menu, Menu_Options opts)
{
MENU *cmenu = menu; /* use a copy because set_menu_opts must detect
NULL menu itself to adjust its behavior */
T((T_CALLED("menu_opts_on(%p,%d)"), (void *)menu, opts));
opts &= ALL_MENU_OPTS;
if (opts & ~ALL_MENU_OPTS)
RETURN(E_BAD_ARGUMENT);
else
{
Normalize_Menu(cmenu);
opts = cmenu->opt | opts;
returnCode(set_menu_opts(menu, opts));
}
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : Menu_Options menu_opts(const MENU *menu)
|
| Description : Return the options for this menu.
|
| Return Values : Menu options
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(Menu_Options)
-menu_opts(const MENU * menu)
+MENU_EXPORT(Menu_Options)
+menu_opts(const MENU *menu)
{
T((T_CALLED("menu_opts(%p)"), (const void *)menu));
returnMenuOpts(ALL_MENU_OPTS & Normalize_Menu(menu)->opt);
}
/* m_opts.c ends here */
diff --git a/contrib/ncurses/menu/m_pad.c b/contrib/ncurses/menu/m_pad.c
index 3d5702ae96f4..88dad151d6ff 100644
--- a/contrib/ncurses/menu/m_pad.c
+++ b/contrib/ncurses/menu/m_pad.c
@@ -1,96 +1,96 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_pad *
* Control menus padding character *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_pad.c,v 1.14 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_pad.c,v 1.16 2020/12/12 00:38:14 tom Exp $")
/* Macro to redraw menu if it is posted and changed */
#define Refresh_Menu(menu) \
if ( (menu) && ((menu)->status & _POSTED) )\
{\
_nc_Draw_Menu( menu );\
_nc_Show_Menu( menu ); \
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_pad(MENU* menu, int pad)
|
| Description : Set the character to be used to separate the item name
| from its description. This must be a printable
| character.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - an invalid value has been passed
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_menu_pad(MENU * menu, int pad)
+MENU_EXPORT(int)
+set_menu_pad(MENU *menu, int pad)
{
- bool do_refresh = (menu != (MENU *) 0);
+ bool do_refresh = (menu != (MENU *)0);
T((T_CALLED("set_menu_pad(%p,%d)"), (void *)menu, pad));
if (!isprint(UChar(pad)))
RETURN(E_BAD_ARGUMENT);
Normalize_Menu(menu);
menu->pad = (unsigned char)pad;
if (do_refresh)
Refresh_Menu(menu);
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int menu_pad(const MENU *menu)
|
| Description : Return the value of the padding character
|
| Return Values : The pad character
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-menu_pad(const MENU * menu)
+MENU_EXPORT(int)
+menu_pad(const MENU *menu)
{
T((T_CALLED("menu_pad(%p)"), (const void *)menu));
returnCode(Normalize_Menu(menu)->pad);
}
/* m_pad.c ends here */
diff --git a/contrib/ncurses/menu/m_pattern.c b/contrib/ncurses/menu/m_pattern.c
index 9ff02304892d..58047df218d4 100644
--- a/contrib/ncurses/menu/m_pattern.c
+++ b/contrib/ncurses/menu/m_pattern.c
@@ -1,125 +1,125 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2006,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_pattern *
* Pattern matching handling *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_pattern.c,v 1.17 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_pattern.c,v 1.19 2020/12/12 00:38:14 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : char *menu_pattern(const MENU *menu)
|
| Description : Return the value of the pattern buffer.
|
| Return Values : NULL - if there is no pattern buffer allocated
| EmptyString - if there is a pattern buffer but no
| pattern is stored
| PatternString - as expected
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(char *)
-menu_pattern(const MENU * menu)
+MENU_EXPORT(char *)
+menu_pattern(const MENU *menu)
{
static char empty[] = "";
T((T_CALLED("menu_pattern(%p)"), (const void *)menu));
returnPtr(menu ? (menu->pattern ? menu->pattern : empty) : 0);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_pattern(MENU *menu, const char *p)
|
| Description : Set the match pattern for a menu and position to the
| first item that matches.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid menu or pattern pointer
| E_BAD_STATE - menu in user hook routine
| E_NOT_CONNECTED - no items connected to menu
| E_NO_MATCH - no item matches pattern
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_menu_pattern(MENU * menu, const char *p)
+MENU_EXPORT(int)
+set_menu_pattern(MENU *menu, const char *p)
{
ITEM *matchitem;
int matchpos;
T((T_CALLED("set_menu_pattern(%p,%s)"), (void *)menu, _nc_visbuf(p)));
if (!menu || !p)
RETURN(E_BAD_ARGUMENT);
if (!(menu->items))
RETURN(E_NOT_CONNECTED);
if (menu->status & _IN_DRIVER)
RETURN(E_BAD_STATE);
Reset_Pattern(menu);
if (!(*p))
{
pos_menu_cursor(menu);
RETURN(E_OK);
}
if (menu->status & _LINK_NEEDED)
_nc_Link_Items(menu);
matchpos = menu->toprow;
matchitem = menu->curitem;
assert(matchitem);
while (*p)
{
if (!isprint(UChar(*p)) ||
(_nc_Match_Next_Character_In_Item_Name(menu, *p, &matchitem) != E_OK))
{
Reset_Pattern(menu);
pos_menu_cursor(menu);
RETURN(E_NO_MATCH);
}
p++;
}
/* This is reached if there was a match. So we position to the new item */
Adjust_Current_Item(menu, matchpos, matchitem);
RETURN(E_OK);
}
/* m_pattern.c ends here */
diff --git a/contrib/ncurses/menu/m_post.c b/contrib/ncurses/menu/m_post.c
index 2cc0ea09d5fe..bfc633164b49 100644
--- a/contrib/ncurses/menu/m_post.c
+++ b/contrib/ncurses/menu/m_post.c
@@ -1,378 +1,378 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_post *
* Write or erase menus from associated subwindows *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_post.c,v 1.32 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_post.c,v 1.34 2020/12/12 00:38:14 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void _nc_Post_Item(MENU *menu, ITEM *item)
|
| Description : Draw the item in the menus window at the current
| window position
|
| Return Values : -
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
-_nc_Post_Item(const MENU * menu, const ITEM * item)
+MENU_EXPORT(void)
+_nc_Post_Item(const MENU *menu, const ITEM *item)
{
int i;
chtype ch;
int item_x, item_y;
int count = 0;
bool isfore = FALSE, isback = FALSE, isgrey = FALSE;
int name_len;
int desc_len;
assert(menu->win);
getyx(menu->win, item_y, item_x);
/* We need a marker iff
- it is a onevalued menu and it is the current item
- or it has a selection value
*/
wattron(menu->win, (int)menu->back);
if (item->value || (item == menu->curitem))
{
if (menu->marklen)
{
/* In a multi selection menu we use the fore attribute
for a selected marker that is not the current one.
This improves visualization of the menu, because now
always the 'normal' marker denotes the current
item. */
if (!(menu->opt & O_ONEVALUE) && item->value && item != menu->curitem)
{
wattron(menu->win, (int)menu->fore);
isfore = TRUE;
}
waddstr(menu->win, menu->mark);
if (isfore)
{
wattron(menu->win, (int)menu->fore);
isfore = FALSE;
}
}
}
else /* otherwise we have to wipe out the marker area */
for (ch = ' ', i = menu->marklen; i > 0; i--)
waddch(menu->win, ch);
wattroff(menu->win, (int)menu->back);
count += menu->marklen;
/* First we have to calculate the attribute depending on selectability
and selection status
*/
if (!(item->opt & O_SELECTABLE))
{
wattron(menu->win, (int)menu->grey);
isgrey = TRUE;
}
else
{
if (item->value || item == menu->curitem)
{
wattron(menu->win, (int)menu->fore);
isfore = TRUE;
}
else
{
wattron(menu->win, (int)menu->back);
isback = TRUE;
}
}
waddnstr(menu->win, item->name.str, item->name.length);
name_len = _nc_Calculate_Text_Width(&(item->name));
for (ch = ' ', i = menu->namelen - name_len; i > 0; i--)
{
waddch(menu->win, ch);
}
count += menu->namelen;
/* Show description if required and available */
if ((menu->opt & O_SHOWDESC) && menu->desclen > 0)
{
int m = menu->spc_desc / 2;
int cy = -1, cx = -1;
for (ch = ' ', i = 0; i < menu->spc_desc; i++)
{
if (i == m)
{
waddch(menu->win, menu->pad);
getyx(menu->win, cy, cx);
}
else
waddch(menu->win, ch);
}
if (item->description.length)
waddnstr(menu->win, item->description.str, item->description.length);
desc_len = _nc_Calculate_Text_Width(&(item->description));
for (ch = ' ', i = menu->desclen - desc_len; i > 0; i--)
{
waddch(menu->win, ch);
}
count += menu->desclen + menu->spc_desc;
if (menu->spc_rows > 1)
{
int j, k, ncy, ncx;
assert(cx >= 0 && cy >= 0);
getyx(menu->win, ncy, ncx);
if (isgrey)
wattroff(menu->win, (int)menu->grey);
else if (isfore)
wattroff(menu->win, (int)menu->fore);
wattron(menu->win, (int)menu->back);
for (j = 1; j < menu->spc_rows; j++)
{
if ((item_y + j) < getmaxy(menu->win))
{
wmove(menu->win, item_y + j, item_x);
for (k = 0; k < count; k++)
waddch(menu->win, ' ');
}
if ((cy + j) < getmaxy(menu->win))
(void)mvwaddch(menu->win, cy + j, cx - 1, menu->pad);
}
wmove(menu->win, ncy, ncx);
if (!isback)
wattroff(menu->win, (int)menu->back);
}
}
/* Remove attributes */
if (isfore)
wattroff(menu->win, (int)menu->fore);
if (isback)
wattroff(menu->win, (int)menu->back);
if (isgrey)
wattroff(menu->win, (int)menu->grey);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void _nc_Draw_Menu(const MENU *)
|
| Description : Display the menu in its windows
|
| Return Values : -
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
-_nc_Draw_Menu(const MENU * menu)
+MENU_EXPORT(void)
+_nc_Draw_Menu(const MENU *menu)
{
ITEM *item = menu->items[0];
ITEM *lasthor, *lastvert;
ITEM *hitem;
int y = 0;
chtype s_bkgd;
assert(item && menu->win);
s_bkgd = getbkgd(menu->win);
wbkgdset(menu->win, menu->back);
werase(menu->win);
wbkgdset(menu->win, s_bkgd);
- lastvert = (menu->opt & O_NONCYCLIC) ? (ITEM *) 0 : item;
+ lastvert = (menu->opt & O_NONCYCLIC) ? (ITEM *)0 : item;
do
{
wmove(menu->win, y, 0);
hitem = item;
- lasthor = (menu->opt & O_NONCYCLIC) ? (ITEM *) 0 : hitem;
+ lasthor = (menu->opt & O_NONCYCLIC) ? (ITEM *)0 : hitem;
do
{
_nc_Post_Item(menu, hitem);
wattron(menu->win, (int)menu->back);
if (((hitem = hitem->right) != lasthor) && hitem)
{
int i, j, cy, cx;
chtype ch = ' ';
getyx(menu->win, cy, cx);
for (j = 0; j < menu->spc_rows; j++)
{
wmove(menu->win, cy + j, cx);
for (i = 0; i < menu->spc_cols; i++)
{
waddch(menu->win, ch);
}
}
wmove(menu->win, cy, cx + menu->spc_cols);
}
}
while (hitem && (hitem != lasthor));
wattroff(menu->win, (int)menu->back);
item = item->down;
y += menu->spc_rows;
}
while (item && (item != lastvert));
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int post_menu(MENU* menu)
|
| Description : Post a menu to the screen. This makes it visible.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - not a valid menu pointer
| E_SYSTEM_ERROR - error in lower layers
| E_NOT_CONNECTED - No items connected to menu
| E_BAD_STATE - Menu in userexit routine
| E_POSTED - Menu already posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-post_menu(MENU * menu)
+MENU_EXPORT(int)
+post_menu(MENU *menu)
{
T((T_CALLED("post_menu(%p)"), (void *)menu));
if (!menu)
RETURN(E_BAD_ARGUMENT);
if (menu->status & _IN_DRIVER)
RETURN(E_BAD_STATE);
if (menu->status & _POSTED)
RETURN(E_POSTED);
if (menu->items && *(menu->items))
{
int y;
int h = 1 + menu->spc_rows * (menu->rows - 1);
WINDOW *win = Get_Menu_Window(menu);
int maxy = getmaxy(win);
if ((menu->win = newpad(h, menu->width)))
{
y = (maxy >= h) ? h : maxy;
if (y >= menu->height)
y = menu->height;
if (!(menu->sub = subpad(menu->win, y, menu->width, 0, 0)))
RETURN(E_SYSTEM_ERROR);
}
else
RETURN(E_SYSTEM_ERROR);
if (menu->status & _LINK_NEEDED)
_nc_Link_Items(menu);
}
else
RETURN(E_NOT_CONNECTED);
SetStatus(menu, _POSTED);
if (!(menu->opt & O_ONEVALUE))
{
ITEM **items;
for (items = menu->items; *items; items++)
{
(*items)->value = FALSE;
}
}
_nc_Draw_Menu(menu);
Call_Hook(menu, menuinit);
Call_Hook(menu, iteminit);
_nc_Show_Menu(menu);
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int unpost_menu(MENU*)
|
| Description : Detach menu from screen
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - not a valid menu pointer
| E_BAD_STATE - menu in userexit routine
| E_NOT_POSTED - menu is not posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-unpost_menu(MENU * menu)
+MENU_EXPORT(int)
+unpost_menu(MENU *menu)
{
WINDOW *win;
T((T_CALLED("unpost_menu(%p)"), (void *)menu));
if (!menu)
RETURN(E_BAD_ARGUMENT);
if (menu->status & _IN_DRIVER)
RETURN(E_BAD_STATE);
if (!(menu->status & _POSTED))
RETURN(E_NOT_POSTED);
Call_Hook(menu, itemterm);
Call_Hook(menu, menuterm);
win = Get_Menu_Window(menu);
werase(win);
wsyncup(win);
assert(menu->sub);
delwin(menu->sub);
menu->sub = (WINDOW *)0;
assert(menu->win);
delwin(menu->win);
menu->win = (WINDOW *)0;
ClrStatus(menu, _POSTED);
RETURN(E_OK);
}
/* m_post.c ends here */
diff --git a/contrib/ncurses/menu/m_req_name.c b/contrib/ncurses/menu/m_req_name.c
index d3f04c1d35a2..7d1e7bf5d106 100644
--- a/contrib/ncurses/menu/m_req_name.c
+++ b/contrib/ncurses/menu/m_req_name.c
@@ -1,131 +1,131 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2012,2015 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_request_name *
* Routines to handle external names of menu requests *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_req_name.c,v 1.24 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_req_name.c,v 1.25 2020/05/24 01:40:20 anonymous.maarten Exp $")
#define DATA(s) { s }
static const char request_names[MAX_MENU_COMMAND - MIN_MENU_COMMAND + 1][14] =
{
DATA("LEFT_ITEM"),
DATA("RIGHT_ITEM"),
DATA("UP_ITEM"),
DATA("DOWN_ITEM"),
DATA("SCR_ULINE"),
DATA("SCR_DLINE"),
DATA("SCR_DPAGE"),
DATA("SCR_UPAGE"),
DATA("FIRST_ITEM"),
DATA("LAST_ITEM"),
DATA("NEXT_ITEM"),
DATA("PREV_ITEM"),
DATA("TOGGLE_ITEM"),
DATA("CLEAR_PATTERN"),
DATA("BACK_PATTERN"),
DATA("NEXT_MATCH"),
DATA("PREV_MATCH")
};
#define A_SIZE (sizeof(request_names)/sizeof(request_names[0]))
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : const char * menu_request_name (int request);
|
| Description : Get the external name of a menu request.
|
| Return Values : Pointer to name - on success
| NULL - on invalid request code
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(const char *)
+MENU_EXPORT(const char *)
menu_request_name(int request)
{
T((T_CALLED("menu_request_name(%d)"), request));
if ((request < MIN_MENU_COMMAND) || (request > MAX_MENU_COMMAND))
{
SET_ERROR(E_BAD_ARGUMENT);
returnCPtr((const char *)0);
}
else
returnCPtr(request_names[request - MIN_MENU_COMMAND]);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int menu_request_by_name (const char *str);
|
| Description : Search for a request with this name.
|
| Return Values : Request Id - on success
| E_NO_MATCH - request not found
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+MENU_EXPORT(int)
menu_request_by_name(const char *str)
{
/* because the table is so small, it doesn't really hurt
to run sequentially through it.
*/
size_t i = 0;
char buf[16];
T((T_CALLED("menu_request_by_name(%s)"), _nc_visbuf(str)));
if (str != 0 && (i = strlen(str)) != 0)
{
if (i > sizeof(buf) - 2)
i = sizeof(buf) - 2;
memcpy(buf, str, i);
buf[i] = '\0';
for (i = 0; buf[i] != '\0'; ++i)
{
buf[i] = (char)toupper(UChar(buf[i]));
}
for (i = 0; i < A_SIZE; i++)
{
if (strcmp(request_names[i], buf) == 0)
returnCode(MIN_MENU_COMMAND + (int)i);
}
}
RETURN(E_NO_MATCH);
}
/* m_req_name.c ends here */
diff --git a/contrib/ncurses/menu/m_scale.c b/contrib/ncurses/menu/m_scale.c
index e013acd8441a..0067ae76a1c9 100644
--- a/contrib/ncurses/menu/m_scale.c
+++ b/contrib/ncurses/menu/m_scale.c
@@ -1,77 +1,77 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_scale *
* Menu scaling routine *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_scale.c,v 1.11 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_scale.c,v 1.13 2020/12/12 00:38:14 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int scale_menu(const MENU *menu)
|
| Description : Returns the minimum window size necessary for the
| subwindow of menu.
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid menu pointer
| E_NOT_CONNECTED - no items are connected to menu
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-scale_menu(const MENU * menu, int *rows, int *cols)
+MENU_EXPORT(int)
+scale_menu(const MENU *menu, int *rows, int *cols)
{
T((T_CALLED("scale_menu(%p,%p,%p)"),
(const void *)menu,
(void *)rows,
(void *)cols));
if (!menu)
RETURN(E_BAD_ARGUMENT);
if (menu->items && *(menu->items))
{
if (rows)
*rows = menu->height;
if (cols)
*cols = menu->width;
RETURN(E_OK);
}
else
RETURN(E_NOT_CONNECTED);
}
/* m_scale.c ends here */
diff --git a/contrib/ncurses/menu/m_spacing.c b/contrib/ncurses/menu/m_spacing.c
index 9bb746a0810b..76f8d5caa2d2 100644
--- a/contrib/ncurses/menu/m_spacing.c
+++ b/contrib/ncurses/menu/m_spacing.c
@@ -1,114 +1,114 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_spacing *
* Routines to handle spacing between entries *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_spacing.c,v 1.20 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_spacing.c,v 1.22 2020/12/12 00:38:14 tom Exp $")
#define MAX_SPC_DESC ((TABSIZE) ? (TABSIZE) : 8)
#define MAX_SPC_COLS ((TABSIZE) ? (TABSIZE) : 8)
#define MAX_SPC_ROWS (3)
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_spacing(MENU *menu,int desc, int r, int c);
|
| Description : Set the spacing between entries
|
| Return Values : E_OK - on success
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_menu_spacing(MENU * menu, int s_desc, int s_row, int s_col)
+MENU_EXPORT(int)
+set_menu_spacing(MENU *menu, int s_desc, int s_row, int s_col)
{
MENU *m; /* split for ATAC workaround */
T((T_CALLED("set_menu_spacing(%p,%d,%d,%d)"),
(void *)menu, s_desc, s_row, s_col));
m = Normalize_Menu(menu);
assert(m);
if (m->status & _POSTED)
RETURN(E_POSTED);
if (((s_desc < 0) || (s_desc > MAX_SPC_DESC)) ||
((s_row < 0) || (s_row > MAX_SPC_ROWS)) ||
((s_col < 0) || (s_col > MAX_SPC_COLS)))
RETURN(E_BAD_ARGUMENT);
m->spc_desc = (short)(s_desc ? s_desc : 1);
m->spc_rows = (short)(s_row ? s_row : 1);
m->spc_cols = (short)(s_col ? s_col : 1);
_nc_Calculate_Item_Length_and_Width(m);
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int menu_spacing (const MENU *,int *,int *,int *);
|
| Description : Retrieve info about spacing between the entries
|
| Return Values : E_OK - on success
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-menu_spacing(const MENU * menu, int *s_desc, int *s_row, int *s_col)
+MENU_EXPORT(int)
+menu_spacing(const MENU *menu, int *s_desc, int *s_row, int *s_col)
{
const MENU *m; /* split for ATAC workaround */
T((T_CALLED("menu_spacing(%p,%p,%p,%p)"),
(const void *)menu,
(void *)s_desc,
(void *)s_row,
(void *)s_col));
m = Normalize_Menu(menu);
assert(m);
if (s_desc)
*s_desc = m->spc_desc;
if (s_row)
*s_row = m->spc_rows;
if (s_col)
*s_col = m->spc_cols;
RETURN(E_OK);
}
/* m_spacing.c ends here */
diff --git a/contrib/ncurses/menu/m_sub.c b/contrib/ncurses/menu/m_sub.c
index 4658e90e5a07..5f898b0f7766 100644
--- a/contrib/ncurses/menu/m_sub.c
+++ b/contrib/ncurses/menu/m_sub.c
@@ -1,101 +1,101 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_sub *
* Menus subwindow association routines *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_sub.c,v 1.13 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_sub.c,v 1.15 2020/12/12 00:38:14 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_sub(MENU *menu, WINDOW *win)
|
| Description : Sets the subwindow of the menu.
|
| Return Values : E_OK - success
| E_POSTED - menu is already posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_menu_sub(MENU * menu, WINDOW *win)
+MENU_EXPORT(int)
+set_menu_sub(MENU *menu, WINDOW *win)
{
T((T_CALLED("set_menu_sub(%p,%p)"), (void *)menu, (void *)win));
if (menu)
{
if (menu->status & _POSTED)
RETURN(E_POSTED);
else
#if NCURSES_SP_FUNCS
{
/* We ensure that usersub is never null. So even if a null
WINDOW parameter is passed, we store the SCREENS stdscr.
The only MENU that can have a null usersub is the static
_nc_default_Menu.
*/
SCREEN *sp = _nc_screen_of(menu->usersub);
menu->usersub = win ? win : sp->_stdscr;
_nc_Calculate_Item_Length_and_Width(menu);
}
#else
menu->usersub = win;
#endif
}
else
_nc_Default_Menu.usersub = win;
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : WINDOW* menu_sub(const MENU *menu)
|
| Description : Returns a pointer to the subwindow of the menu
|
| Return Values : NULL on error, otherwise a pointer to the window
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(WINDOW *)
-menu_sub(const MENU * menu)
+MENU_EXPORT(WINDOW *)
+menu_sub(const MENU *menu)
{
const MENU *m = Normalize_Menu(menu);
T((T_CALLED("menu_sub(%p)"), (const void *)menu));
returnWin(Get_Menu_Window(m));
}
/* m_sub.c ends here */
diff --git a/contrib/ncurses/menu/m_trace.c b/contrib/ncurses/menu/m_trace.c
index f5332b189166..331236c51268 100644
--- a/contrib/ncurses/menu/m_trace.c
+++ b/contrib/ncurses/menu/m_trace.c
@@ -1,79 +1,79 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 2004-2010,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey *
****************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_trace.c,v 1.7 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_trace.c,v 1.9 2020/12/12 00:38:14 tom Exp $")
-NCURSES_EXPORT(ITEM *)
-_nc_retrace_item(ITEM * code)
+MENU_EXPORT(ITEM *)
+_nc_retrace_item(ITEM *code)
{
T((T_RETURN("%p"), (void *)code));
return code;
}
-NCURSES_EXPORT(ITEM **)
-_nc_retrace_item_ptr(ITEM ** code)
+MENU_EXPORT(ITEM **)
+_nc_retrace_item_ptr(ITEM **code)
{
T((T_RETURN("%p"), (void *)code));
return code;
}
-NCURSES_EXPORT(Item_Options)
+MENU_EXPORT(Item_Options)
_nc_retrace_item_opts(Item_Options code)
{
T((T_RETURN("%d"), code));
return code;
}
-NCURSES_EXPORT(MENU *)
-_nc_retrace_menu(MENU * code)
+MENU_EXPORT(MENU *)
+_nc_retrace_menu(MENU *code)
{
T((T_RETURN("%p"), (void *)code));
return code;
}
-NCURSES_EXPORT(Menu_Hook)
+MENU_EXPORT(Menu_Hook)
_nc_retrace_menu_hook(Menu_Hook code)
{
TR_FUNC_BFR(1);
T((T_RETURN("%s"), TR_FUNC_ARG(0, code)));
return code;
}
-NCURSES_EXPORT(Menu_Options)
+MENU_EXPORT(Menu_Options)
_nc_retrace_menu_opts(Menu_Options code)
{
T((T_RETURN("%d"), code));
return code;
}
diff --git a/contrib/ncurses/menu/m_userptr.c b/contrib/ncurses/menu/m_userptr.c
index df3a45f89d3a..72f2d4ca8f24 100644
--- a/contrib/ncurses/menu/m_userptr.c
+++ b/contrib/ncurses/menu/m_userptr.c
@@ -1,77 +1,77 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2004,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_userptr *
* Associate application data with menus *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_userptr.c,v 1.19 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_userptr.c,v 1.21 2020/12/12 00:38:14 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_userptr(MENU *menu, void *userptr)
|
| Description : Set the pointer that is reserved in any menu to store
| application relevant information.
|
| Return Values : E_OK - success
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_menu_userptr(MENU * menu, void *userptr)
+MENU_EXPORT(int)
+set_menu_userptr(MENU *menu, void *userptr)
{
T((T_CALLED("set_menu_userptr(%p,%p)"), (void *)menu, (void *)userptr));
Normalize_Menu(menu)->userptr = userptr;
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : void *menu_userptr(const MENU *menu)
|
| Description : Return the pointer that is reserved in any menu to
| store application relevant information.
|
| Return Values : Value of the pointer. If no such pointer has been set,
| NULL is returned
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void *)
-menu_userptr(const MENU * menu)
+MENU_EXPORT(void *)
+menu_userptr(const MENU *menu)
{
T((T_CALLED("menu_userptr(%p)"), (const void *)menu));
returnVoidPtr(Normalize_Menu(menu)->userptr);
}
/* m_userptr.c ends here */
diff --git a/contrib/ncurses/menu/m_win.c b/contrib/ncurses/menu/m_win.c
index f06c58083d9b..72f72ad0cc90 100644
--- a/contrib/ncurses/menu/m_win.c
+++ b/contrib/ncurses/menu/m_win.c
@@ -1,101 +1,101 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
* Module m_win *
* Menus window association routines *
***************************************************************************/
#include "menu.priv.h"
-MODULE_ID("$Id: m_win.c,v 1.18 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: m_win.c,v 1.20 2020/12/12 00:38:14 tom Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : int set_menu_win(MENU *menu, WINDOW *win)
|
| Description : Sets the window of the menu.
|
| Return Values : E_OK - success
| E_POSTED - menu is already posted
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
-set_menu_win(MENU * menu, WINDOW *win)
+MENU_EXPORT(int)
+set_menu_win(MENU *menu, WINDOW *win)
{
T((T_CALLED("set_menu_win(%p,%p)"), (void *)menu, (void *)win));
if (menu)
{
if (menu->status & _POSTED)
RETURN(E_POSTED);
else
#if NCURSES_SP_FUNCS
{
/* We ensure that userwin is never null. So even if a null
WINDOW parameter is passed, we store the SCREENS stdscr.
The only MENU that can have a null userwin is the static
_nc_default_Menu.
*/
SCREEN *sp = _nc_screen_of(menu->userwin);
menu->userwin = win ? win : sp->_stdscr;
_nc_Calculate_Item_Length_and_Width(menu);
}
#else
menu->userwin = win;
#endif
}
else
_nc_Default_Menu.userwin = win;
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
| Facility : libnmenu
| Function : WINDOW* menu_win(const MENU*)
|
| Description : Returns pointer to the window of the menu
|
| Return Values : NULL on error, otherwise pointer to window
+--------------------------------------------------------------------------*/
-NCURSES_EXPORT(WINDOW *)
-menu_win(const MENU * menu)
+MENU_EXPORT(WINDOW *)
+menu_win(const MENU *menu)
{
const MENU *m = Normalize_Menu(menu);
T((T_CALLED("menu_win(%p)"), (const void *)menu));
returnWin(Get_Menu_UserWin(m));
}
/* m_win.c ends here */
diff --git a/contrib/ncurses/menu/menu.h b/contrib/ncurses/menu/menu.h
index b2e845c6fa45..e5a53729d65f 100644
--- a/contrib/ncurses/menu/menu.h
+++ b/contrib/ncurses/menu/menu.h
@@ -1,271 +1,281 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
-/* $Id: menu.h,v 1.24 2020/02/02 23:34:34 tom Exp $ */
+/* $Id: menu.h,v 1.26 2020/12/12 00:38:02 tom Exp $ */
#ifndef ETI_MENU
#define ETI_MENU
#ifdef AMIGA
#define TEXT TEXT_ncurses
#endif
#include <curses.h>
#include <eti.h>
#ifdef __cplusplus
-extern "C" {
+extern "C"
+{
#endif
-typedef int Menu_Options;
-typedef int Item_Options;
+#if defined(BUILDING_MENU)
+# define MENU_IMPEXP NCURSES_EXPORT_GENERAL_EXPORT
+#else
+# define MENU_IMPEXP NCURSES_EXPORT_GENERAL_IMPORT
+#endif
+
+#define MENU_WRAPPED_VAR(type,name) extern MENU_IMPEXP type NCURSES_PUBLIC_VAR(name)(void)
+
+#define MENU_EXPORT(type) MENU_IMPEXP type NCURSES_API
+#define MENU_EXPORT_VAR(type) MENU_IMPEXP type
+
+ typedef int Menu_Options;
+ typedef int Item_Options;
/* Menu options: */
#define O_ONEVALUE (0x01)
#define O_SHOWDESC (0x02)
#define O_ROWMAJOR (0x04)
#define O_IGNORECASE (0x08)
#define O_SHOWMATCH (0x10)
#define O_NONCYCLIC (0x20)
#define O_MOUSE_MENU (0x40)
/* Item options: */
#define O_SELECTABLE (0x01)
#if !NCURSES_OPAQUE_MENU
-typedef struct
-{
- const char* str;
- unsigned short length;
-} TEXT;
-#endif /* !NCURSES_OPAQUE_MENU */
+ typedef struct
+ {
+ const char *str;
+ unsigned short length;
+ }
+ TEXT;
+#endif /* !NCURSES_OPAQUE_MENU */
-struct tagMENU;
+ struct tagMENU;
-typedef struct tagITEM
+ typedef struct tagITEM
#if !NCURSES_OPAQUE_MENU
-{
- TEXT name; /* name of menu item */
- TEXT description; /* description of item, optional in display */
- struct tagMENU *imenu; /* Pointer to parent menu */
- void *userptr; /* Pointer to user defined per item data */
- Item_Options opt; /* Item options */
- short index; /* Item number if connected to a menu */
- short y; /* y and x location of item in menu */
- short x;
- bool value; /* Selection value */
-
- struct tagITEM *left; /* neighbor items */
- struct tagITEM *right;
- struct tagITEM *up;
- struct tagITEM *down;
-
-}
-#endif /* !NCURSES_OPAQUE_MENU */
-ITEM;
-
-typedef void (*Menu_Hook)(struct tagMENU *);
-
-typedef struct tagMENU
-#if 1 /* not yet: !NCURSES_OPAQUE_MENU */
-{
- short height; /* Nr. of chars high */
- short width; /* Nr. of chars wide */
- short rows; /* Nr. of items high */
- short cols; /* Nr. of items wide */
- short frows; /* Nr. of formatted items high */
- short fcols; /* Nr. of formatted items wide */
- short arows; /* Nr. of items high (actual) */
- short namelen; /* Max. name length */
- short desclen; /* Max. description length */
- short marklen; /* Length of mark, if any */
- short itemlen; /* Length of one item */
- short spc_desc; /* Spacing for descriptor */
- short spc_cols; /* Spacing for columns */
- short spc_rows; /* Spacing for rows */
- char *pattern; /* Buffer to store match chars */
- short pindex; /* Index into pattern buffer */
- WINDOW *win; /* Window containing menu */
- WINDOW *sub; /* Subwindow for menu display */
- WINDOW *userwin; /* User's window */
- WINDOW *usersub; /* User's subwindow */
- ITEM **items; /* array of items */
- short nitems; /* Nr. of items in menu */
- ITEM *curitem; /* Current item */
- short toprow; /* Top row of menu */
- chtype fore; /* Selection attribute */
- chtype back; /* Nonselection attribute */
- chtype grey; /* Inactive attribute */
- unsigned char pad; /* Pad character */
-
- Menu_Hook menuinit; /* User hooks */
- Menu_Hook menuterm;
- Menu_Hook iteminit;
- Menu_Hook itemterm;
-
- void *userptr; /* Pointer to menus user data */
- char *mark; /* Pointer to marker string */
-
- Menu_Options opt; /* Menu options */
- unsigned short status; /* Internal state of menu */
-}
-#endif /* !NCURSES_OPAQUE_MENU */
-MENU;
-
+ {
+ TEXT name; /* name of menu item */
+ TEXT description; /* description of item, optional in display */
+ struct tagMENU *imenu; /* Pointer to parent menu */
+ void *userptr; /* Pointer to user defined per item data */
+ Item_Options opt; /* Item options */
+ short index; /* Item number if connected to a menu */
+ short y; /* y and x location of item in menu */
+ short x;
+ bool value; /* Selection value */
+
+ struct tagITEM *left; /* neighbor items */
+ struct tagITEM *right;
+ struct tagITEM *up;
+ struct tagITEM *down;
+
+ }
+#endif /* !NCURSES_OPAQUE_MENU */
+ ITEM;
+
+ typedef void (*Menu_Hook) (struct tagMENU *);
+
+ typedef struct tagMENU
+#if 1 /* not yet: !NCURSES_OPAQUE_MENU */
+ {
+ short height; /* Nr. of chars high */
+ short width; /* Nr. of chars wide */
+ short rows; /* Nr. of items high */
+ short cols; /* Nr. of items wide */
+ short frows; /* Nr. of formatted items high */
+ short fcols; /* Nr. of formatted items wide */
+ short arows; /* Nr. of items high (actual) */
+ short namelen; /* Max. name length */
+ short desclen; /* Max. description length */
+ short marklen; /* Length of mark, if any */
+ short itemlen; /* Length of one item */
+ short spc_desc; /* Spacing for descriptor */
+ short spc_cols; /* Spacing for columns */
+ short spc_rows; /* Spacing for rows */
+ char *pattern; /* Buffer to store match chars */
+ short pindex; /* Index into pattern buffer */
+ WINDOW *win; /* Window containing menu */
+ WINDOW *sub; /* Subwindow for menu display */
+ WINDOW *userwin; /* User's window */
+ WINDOW *usersub; /* User's subwindow */
+ ITEM **items; /* array of items */
+ short nitems; /* Nr. of items in menu */
+ ITEM *curitem; /* Current item */
+ short toprow; /* Top row of menu */
+ chtype fore; /* Selection attribute */
+ chtype back; /* Nonselection attribute */
+ chtype grey; /* Inactive attribute */
+ unsigned char pad; /* Pad character */
+
+ Menu_Hook menuinit; /* User hooks */
+ Menu_Hook menuterm;
+ Menu_Hook iteminit;
+ Menu_Hook itemterm;
+
+ void *userptr; /* Pointer to menus user data */
+ char *mark; /* Pointer to marker string */
+
+ Menu_Options opt; /* Menu options */
+ unsigned short status; /* Internal state of menu */
+ }
+#endif /* !NCURSES_OPAQUE_MENU */
+ MENU;
/* Define keys */
#define REQ_LEFT_ITEM (KEY_MAX + 1)
#define REQ_RIGHT_ITEM (KEY_MAX + 2)
#define REQ_UP_ITEM (KEY_MAX + 3)
#define REQ_DOWN_ITEM (KEY_MAX + 4)
#define REQ_SCR_ULINE (KEY_MAX + 5)
#define REQ_SCR_DLINE (KEY_MAX + 6)
#define REQ_SCR_DPAGE (KEY_MAX + 7)
#define REQ_SCR_UPAGE (KEY_MAX + 8)
#define REQ_FIRST_ITEM (KEY_MAX + 9)
#define REQ_LAST_ITEM (KEY_MAX + 10)
#define REQ_NEXT_ITEM (KEY_MAX + 11)
#define REQ_PREV_ITEM (KEY_MAX + 12)
#define REQ_TOGGLE_ITEM (KEY_MAX + 13)
#define REQ_CLEAR_PATTERN (KEY_MAX + 14)
#define REQ_BACK_PATTERN (KEY_MAX + 15)
#define REQ_NEXT_MATCH (KEY_MAX + 16)
#define REQ_PREV_MATCH (KEY_MAX + 17)
#define MIN_MENU_COMMAND (KEY_MAX + 1)
#define MAX_MENU_COMMAND (KEY_MAX + 17)
/*
* Some AT&T code expects MAX_COMMAND to be out-of-band not
* just for menu commands but for forms ones as well.
*/
#if defined(MAX_COMMAND)
# if (MAX_MENU_COMMAND > MAX_COMMAND)
# error Something is wrong -- MAX_MENU_COMMAND is greater than MAX_COMMAND
# elif (MAX_COMMAND != (KEY_MAX + 128))
# error Something is wrong -- MAX_COMMAND is already inconsistently defined.
# endif
#else
# define MAX_COMMAND (KEY_MAX + 128)
#endif
-
/* --------- prototypes for libmenu functions ----------------------------- */
-extern NCURSES_EXPORT(ITEM **) menu_items (const MENU *);
-extern NCURSES_EXPORT(ITEM *) current_item (const MENU *);
-extern NCURSES_EXPORT(ITEM *) new_item (const char *,const char *);
-
-extern NCURSES_EXPORT(MENU *) new_menu (ITEM **);
-
-extern NCURSES_EXPORT(Item_Options) item_opts (const ITEM *);
-extern NCURSES_EXPORT(Menu_Options) menu_opts (const MENU *);
-
-extern NCURSES_EXPORT(Menu_Hook) item_init (const MENU *);
-extern NCURSES_EXPORT(Menu_Hook) item_term (const MENU *);
-extern NCURSES_EXPORT(Menu_Hook) menu_init (const MENU *);
-extern NCURSES_EXPORT(Menu_Hook) menu_term (const MENU *);
-
-extern NCURSES_EXPORT(WINDOW *) menu_sub (const MENU *);
-extern NCURSES_EXPORT(WINDOW *) menu_win (const MENU *);
-
-extern NCURSES_EXPORT(const char *) item_description (const ITEM *);
-extern NCURSES_EXPORT(const char *) item_name (const ITEM *);
-extern NCURSES_EXPORT(const char *) menu_mark (const MENU *);
-extern NCURSES_EXPORT(const char *) menu_request_name (int);
-
-extern NCURSES_EXPORT(char *) menu_pattern (const MENU *);
-
-extern NCURSES_EXPORT(void *) menu_userptr (const MENU *);
-extern NCURSES_EXPORT(void *) item_userptr (const ITEM *);
-
-extern NCURSES_EXPORT(chtype) menu_back (const MENU *);
-extern NCURSES_EXPORT(chtype) menu_fore (const MENU *);
-extern NCURSES_EXPORT(chtype) menu_grey (const MENU *);
-
-extern NCURSES_EXPORT(int) free_item (ITEM *);
-extern NCURSES_EXPORT(int) free_menu (MENU *);
-extern NCURSES_EXPORT(int) item_count (const MENU *);
-extern NCURSES_EXPORT(int) item_index (const ITEM *);
-extern NCURSES_EXPORT(int) item_opts_off (ITEM *,Item_Options);
-extern NCURSES_EXPORT(int) item_opts_on (ITEM *,Item_Options);
-extern NCURSES_EXPORT(int) menu_driver (MENU *,int);
-extern NCURSES_EXPORT(int) menu_opts_off (MENU *,Menu_Options);
-extern NCURSES_EXPORT(int) menu_opts_on (MENU *,Menu_Options);
-extern NCURSES_EXPORT(int) menu_pad (const MENU *);
-extern NCURSES_EXPORT(int) pos_menu_cursor (const MENU *);
-extern NCURSES_EXPORT(int) post_menu (MENU *);
-extern NCURSES_EXPORT(int) scale_menu (const MENU *,int *,int *);
-extern NCURSES_EXPORT(int) set_current_item (MENU *menu,ITEM *item);
-extern NCURSES_EXPORT(int) set_item_init (MENU *, Menu_Hook);
-extern NCURSES_EXPORT(int) set_item_opts (ITEM *,Item_Options);
-extern NCURSES_EXPORT(int) set_item_term (MENU *, Menu_Hook);
-extern NCURSES_EXPORT(int) set_item_userptr (ITEM *, void *);
-extern NCURSES_EXPORT(int) set_item_value (ITEM *,bool);
-extern NCURSES_EXPORT(int) set_menu_back (MENU *,chtype);
-extern NCURSES_EXPORT(int) set_menu_fore (MENU *,chtype);
-extern NCURSES_EXPORT(int) set_menu_format (MENU *,int,int);
-extern NCURSES_EXPORT(int) set_menu_grey (MENU *,chtype);
-extern NCURSES_EXPORT(int) set_menu_init (MENU *, Menu_Hook);
-extern NCURSES_EXPORT(int) set_menu_items (MENU *,ITEM **);
-extern NCURSES_EXPORT(int) set_menu_mark (MENU *, const char *);
-extern NCURSES_EXPORT(int) set_menu_opts (MENU *,Menu_Options);
-extern NCURSES_EXPORT(int) set_menu_pad (MENU *,int);
-extern NCURSES_EXPORT(int) set_menu_pattern (MENU *,const char *);
-extern NCURSES_EXPORT(int) set_menu_sub (MENU *,WINDOW *);
-extern NCURSES_EXPORT(int) set_menu_term (MENU *, Menu_Hook);
-extern NCURSES_EXPORT(int) set_menu_userptr (MENU *,void *);
-extern NCURSES_EXPORT(int) set_menu_win (MENU *,WINDOW *);
-extern NCURSES_EXPORT(int) set_top_row (MENU *,int);
-extern NCURSES_EXPORT(int) top_row (const MENU *);
-extern NCURSES_EXPORT(int) unpost_menu (MENU *);
-extern NCURSES_EXPORT(int) menu_request_by_name (const char *);
-extern NCURSES_EXPORT(int) set_menu_spacing (MENU *,int,int,int);
-extern NCURSES_EXPORT(int) menu_spacing (const MENU *,int *,int *,int *);
-
-
-extern NCURSES_EXPORT(bool) item_value (const ITEM *);
-extern NCURSES_EXPORT(bool) item_visible (const ITEM *);
-
-extern NCURSES_EXPORT(void) menu_format (const MENU *,int *,int *);
+ extern MENU_EXPORT(ITEM **) menu_items(const MENU *);
+ extern MENU_EXPORT(ITEM *) current_item(const MENU *);
+ extern MENU_EXPORT(ITEM *) new_item(const char *, const char *);
+
+ extern MENU_EXPORT(MENU *) new_menu(ITEM **);
+
+ extern MENU_EXPORT(Item_Options) item_opts(const ITEM *);
+ extern MENU_EXPORT(Menu_Options) menu_opts(const MENU *);
+
+ extern MENU_EXPORT(Menu_Hook) item_init(const MENU *);
+ extern MENU_EXPORT(Menu_Hook) item_term(const MENU *);
+ extern MENU_EXPORT(Menu_Hook) menu_init(const MENU *);
+ extern MENU_EXPORT(Menu_Hook) menu_term(const MENU *);
+
+ extern MENU_EXPORT(WINDOW *) menu_sub(const MENU *);
+ extern MENU_EXPORT(WINDOW *) menu_win(const MENU *);
+
+ extern MENU_EXPORT(const char *) item_description(const ITEM *);
+ extern MENU_EXPORT(const char *) item_name(const ITEM *);
+ extern MENU_EXPORT(const char *) menu_mark(const MENU *);
+ extern MENU_EXPORT(const char *) menu_request_name(int);
+
+ extern MENU_EXPORT(char *) menu_pattern(const MENU *);
+
+ extern MENU_EXPORT(void *) menu_userptr(const MENU *);
+ extern MENU_EXPORT(void *) item_userptr(const ITEM *);
+
+ extern MENU_EXPORT(chtype) menu_back(const MENU *);
+ extern MENU_EXPORT(chtype) menu_fore(const MENU *);
+ extern MENU_EXPORT(chtype) menu_grey(const MENU *);
+
+ extern MENU_EXPORT(int) free_item(ITEM *);
+ extern MENU_EXPORT(int) free_menu(MENU *);
+ extern MENU_EXPORT(int) item_count(const MENU *);
+ extern MENU_EXPORT(int) item_index(const ITEM *);
+ extern MENU_EXPORT(int) item_opts_off(ITEM *, Item_Options);
+ extern MENU_EXPORT(int) item_opts_on(ITEM *, Item_Options);
+ extern MENU_EXPORT(int) menu_driver(MENU *, int);
+ extern MENU_EXPORT(int) menu_opts_off(MENU *, Menu_Options);
+ extern MENU_EXPORT(int) menu_opts_on(MENU *, Menu_Options);
+ extern MENU_EXPORT(int) menu_pad(const MENU *);
+ extern MENU_EXPORT(int) pos_menu_cursor(const MENU *);
+ extern MENU_EXPORT(int) post_menu(MENU *);
+ extern MENU_EXPORT(int) scale_menu(const MENU *, int *, int *);
+ extern MENU_EXPORT(int) set_current_item(MENU *menu, ITEM *item);
+ extern MENU_EXPORT(int) set_item_init(MENU *, Menu_Hook);
+ extern MENU_EXPORT(int) set_item_opts(ITEM *, Item_Options);
+ extern MENU_EXPORT(int) set_item_term(MENU *, Menu_Hook);
+ extern MENU_EXPORT(int) set_item_userptr(ITEM *, void *);
+ extern MENU_EXPORT(int) set_item_value(ITEM *, bool);
+ extern MENU_EXPORT(int) set_menu_back(MENU *, chtype);
+ extern MENU_EXPORT(int) set_menu_fore(MENU *, chtype);
+ extern MENU_EXPORT(int) set_menu_format(MENU *, int, int);
+ extern MENU_EXPORT(int) set_menu_grey(MENU *, chtype);
+ extern MENU_EXPORT(int) set_menu_init(MENU *, Menu_Hook);
+ extern MENU_EXPORT(int) set_menu_items(MENU *, ITEM **);
+ extern MENU_EXPORT(int) set_menu_mark(MENU *, const char *);
+ extern MENU_EXPORT(int) set_menu_opts(MENU *, Menu_Options);
+ extern MENU_EXPORT(int) set_menu_pad(MENU *, int);
+ extern MENU_EXPORT(int) set_menu_pattern(MENU *, const char *);
+ extern MENU_EXPORT(int) set_menu_sub(MENU *, WINDOW *);
+ extern MENU_EXPORT(int) set_menu_term(MENU *, Menu_Hook);
+ extern MENU_EXPORT(int) set_menu_userptr(MENU *, void *);
+ extern MENU_EXPORT(int) set_menu_win(MENU *, WINDOW *);
+ extern MENU_EXPORT(int) set_top_row(MENU *, int);
+ extern MENU_EXPORT(int) top_row(const MENU *);
+ extern MENU_EXPORT(int) unpost_menu(MENU *);
+ extern MENU_EXPORT(int) menu_request_by_name(const char *);
+ extern MENU_EXPORT(int) set_menu_spacing(MENU *, int, int, int);
+ extern MENU_EXPORT(int) menu_spacing(const MENU *, int *, int *, int *);
+
+ extern MENU_EXPORT(bool) item_value(const ITEM *);
+ extern MENU_EXPORT(bool) item_visible(const ITEM *);
+
+ extern MENU_EXPORT(void) menu_format(const MENU *, int *, int *);
#if NCURSES_SP_FUNCS
-extern NCURSES_EXPORT(MENU *) NCURSES_SP_NAME(new_menu) (SCREEN*, ITEM **);
+ extern MENU_EXPORT(MENU *) NCURSES_SP_NAME(new_menu) (SCREEN *, ITEM **);
#endif
#ifdef __cplusplus
- }
+}
#endif
-#endif /* ETI_MENU */
+#endif /* ETI_MENU */
diff --git a/contrib/ncurses/menu/menu.priv.h b/contrib/ncurses/menu/menu.priv.h
index d084565a6267..0bc6147e07d9 100644
--- a/contrib/ncurses/menu/menu.priv.h
+++ b/contrib/ncurses/menu/menu.priv.h
@@ -1,164 +1,164 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
-/* $Id: menu.priv.h,v 1.28 2020/02/02 23:34:34 tom Exp $ */
+/* $Id: menu.priv.h,v 1.29 2020/05/24 01:40:20 anonymous.maarten Exp $ */
/***************************************************************************
* Module menu.priv.h *
* Top level private header file for all libnmenu modules *
***************************************************************************/
#ifndef MENU_PRIV_H_incl
#define MENU_PRIV_H_incl 1
/* *INDENT-OFF* */
#include "curses.priv.h"
#define NCURSES_OPAQUE_MENU 0
#include "mf_common.h"
#include "menu.h"
/* Backspace code */
#define BS (8)
-extern NCURSES_EXPORT_VAR(ITEM) _nc_Default_Item;
-extern NCURSES_EXPORT_VAR(MENU) _nc_Default_Menu;
+extern MENU_EXPORT_VAR(ITEM) _nc_Default_Item;
+extern MENU_EXPORT_VAR(MENU) _nc_Default_Menu;
/* Normalize item to default if none was given */
#define Normalize_Item( item ) ((item)=(item)?(item):&_nc_Default_Item)
/* Normalize menu to default if none was given */
#define Normalize_Menu( menu ) ((menu)=(menu)?(menu):&_nc_Default_Menu)
#define Get_Menu_Screen( menu ) (menu->userwin ? \
_nc_screen_of(menu->userwin) : CURRENT_SCREEN)
/* Get the user defined (framing) window of the menu */
#define Get_Menu_UserWin(menu) ((menu)->userwin ? \
(menu)->userwin : CURRENT_SCREEN->_stdscr)
/* Normalize menu window */
#define Get_Menu_Window( menu ) \
((menu)->usersub ? (menu)->usersub : Get_Menu_UserWin(menu))
/* menu specific status flags */
#define _LINK_NEEDED (0x04)
#define _MARK_ALLOCATED (0x08)
#define ALL_MENU_OPTS ( \
O_ONEVALUE | \
O_SHOWDESC | \
O_ROWMAJOR | \
O_IGNORECASE | \
O_SHOWMATCH | \
O_NONCYCLIC | \
O_MOUSE_MENU )
#define ALL_ITEM_OPTS (O_SELECTABLE)
/* Move to the window position of an item and draw it */
#define Move_And_Post_Item(menu,item) \
{wmove((menu)->win,(menu)->spc_rows*(item)->y,((menu)->itemlen+(menu)->spc_cols)*(item)->x);\
_nc_Post_Item((menu),(item));}
#define Move_To_Current_Item(menu,item) \
if ( (item) != (menu)->curitem)\
{\
Move_And_Post_Item(menu,item);\
Move_And_Post_Item(menu,(menu)->curitem);\
}
/* This macro ensures, that the item becomes visible, if possible with the
specified row as the top row of the window. If this is not possible,
the top row will be adjusted and the value is stored in the row argument.
*/
#define Adjust_Current_Item(menu,row,item) \
{ if ((item)->y < row) \
row = (short) (item)->y; \
if ( (item)->y >= (row + (menu)->arows) ) \
row = (short) (( (item)->y < ((menu)->rows - row) ) \
? (item)->y \
: (menu)->rows - (menu)->arows); \
_nc_New_TopRow_and_CurrentItem(menu,row,item); }
/* Reset the match pattern buffer */
#define Reset_Pattern(menu) \
{ (menu)->pindex = 0; \
(menu)->pattern[0] = '\0'; }
#define UChar(c) ((unsigned char)(c))
/* Internal functions. */
-extern NCURSES_EXPORT(void) _nc_Draw_Menu (const MENU *);
-extern NCURSES_EXPORT(void) _nc_Show_Menu (const MENU *);
-extern NCURSES_EXPORT(void) _nc_Calculate_Item_Length_and_Width (MENU *);
-extern NCURSES_EXPORT(int) _nc_Calculate_Text_Width(const TEXT *);
-extern NCURSES_EXPORT(void) _nc_Post_Item (const MENU *, const ITEM *);
-extern NCURSES_EXPORT(bool) _nc_Connect_Items (MENU *, ITEM **);
-extern NCURSES_EXPORT(void) _nc_Disconnect_Items (MENU *);
-extern NCURSES_EXPORT(void) _nc_New_TopRow_and_CurrentItem (MENU *,int, ITEM *);
-extern NCURSES_EXPORT(void) _nc_Link_Items (MENU *);
-extern NCURSES_EXPORT(int) _nc_Match_Next_Character_In_Item_Name (MENU*,int,ITEM**);
-extern NCURSES_EXPORT(int) _nc_menu_cursor_pos (const MENU* menu, const ITEM* item,
+extern MENU_EXPORT(void) _nc_Draw_Menu (const MENU *);
+extern MENU_EXPORT(void) _nc_Show_Menu (const MENU *);
+extern MENU_EXPORT(void) _nc_Calculate_Item_Length_and_Width (MENU *);
+extern MENU_EXPORT(int) _nc_Calculate_Text_Width(const TEXT *);
+extern MENU_EXPORT(void) _nc_Post_Item (const MENU *, const ITEM *);
+extern MENU_EXPORT(bool) _nc_Connect_Items (MENU *, ITEM **);
+extern MENU_EXPORT(void) _nc_Disconnect_Items (MENU *);
+extern MENU_EXPORT(void) _nc_New_TopRow_and_CurrentItem (MENU *,int, ITEM *);
+extern MENU_EXPORT(void) _nc_Link_Items (MENU *);
+extern MENU_EXPORT(int) _nc_Match_Next_Character_In_Item_Name (MENU*,int,ITEM**);
+extern MENU_EXPORT(int) _nc_menu_cursor_pos (const MENU* menu, const ITEM* item,
int* pY, int* pX);
#ifdef TRACE
#define returnItem(code) TRACE_RETURN1(code,item)
#define returnItemPtr(code) TRACE_RETURN1(code,item_ptr)
#define returnItemOpts(code) TRACE_RETURN1(code,item_opts)
#define returnMenu(code) TRACE_RETURN1(code,menu)
#define returnMenuHook(code) TRACE_RETURN1(code,menu_hook)
#define returnMenuOpts(code) TRACE_RETURN1(code,menu_opts)
-extern NCURSES_EXPORT(ITEM *) _nc_retrace_item (ITEM *);
-extern NCURSES_EXPORT(ITEM **) _nc_retrace_item_ptr (ITEM **);
-extern NCURSES_EXPORT(Item_Options) _nc_retrace_item_opts (Item_Options);
-extern NCURSES_EXPORT(MENU *) _nc_retrace_menu (MENU *);
-extern NCURSES_EXPORT(Menu_Hook) _nc_retrace_menu_hook (Menu_Hook);
-extern NCURSES_EXPORT(Menu_Options) _nc_retrace_menu_opts (Menu_Options);
+extern MENU_EXPORT(ITEM *) _nc_retrace_item (ITEM *);
+extern MENU_EXPORT(ITEM **) _nc_retrace_item_ptr (ITEM **);
+extern MENU_EXPORT(Item_Options) _nc_retrace_item_opts (Item_Options);
+extern MENU_EXPORT(MENU *) _nc_retrace_menu (MENU *);
+extern MENU_EXPORT(Menu_Hook) _nc_retrace_menu_hook (Menu_Hook);
+extern MENU_EXPORT(Menu_Options) _nc_retrace_menu_opts (Menu_Options);
#else /* !TRACE */
#define returnItem(code) return code
#define returnItemPtr(code) return code
#define returnItemOpts(code) return code
#define returnMenu(code) return code
#define returnMenuHook(code) return code
#define returnMenuOpts(code) return code
#endif /* TRACE/!TRACE */
/* *INDENT-ON* */
#endif /* MENU_PRIV_H_incl */
diff --git a/contrib/ncurses/misc/Makefile.in b/contrib/ncurses/misc/Makefile.in
index 1d83da8fab5c..3999a4e9bd1b 100644
--- a/contrib/ncurses/misc/Makefile.in
+++ b/contrib/ncurses/misc/Makefile.in
@@ -1,209 +1,209 @@
-# $Id: Makefile.in,v 1.73 2020/02/02 23:34:34 tom Exp $
+# $Id: Makefile.in,v 1.74 2021/01/23 20:42:08 tom Exp $
##############################################################################
-# Copyright 2018-2019,2020 Thomas E. Dickey #
+# Copyright 2018-2020,2021 Thomas E. Dickey #
# Copyright 1998-2016,2017 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey 1996-on
#
# Makefile for ncurses miscellany directory
#
# This makes/installs the terminfo database
#
# The variable 'srcdir' refers to the source-distribution, and can be set with
# the configure script by "--srcdir=DIR".
#
# The rules are organized to produce the libraries for the configured models,
# and the programs with the configured default model.
# turn off _all_ suffix rules; we'll generate our own
.SUFFIXES :
SHELL = @SHELL@
VPATH = @srcdir@
THIS = Makefile
CF_MFLAGS = @cf_cv_makeflags@
@SET_MAKE@
DESTDIR = @DESTDIR@
top_srcdir = @top_srcdir@
srcdir = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
datarootdir = @datarootdir@
datadir = @datadir@
includesubdir = @includesubdir@
INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir)
tabsetdir = $(datadir)/tabset
ticdir = @TERMINFO@
ticfile = $(ticdir).db
source = @TERMINFO_SRC@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_DATA = @INSTALL_DATA@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
################################################################################
all \
sources ::
@MAKE_DATABASE@all \
@MAKE_DATABASE@sources :: terminfo.tmp
depend :
@MAKE_DATABASE@install :: @MISC_INSTALL_DATA@
@MAKE_DATABASE@install.data :: terminfo.tmp \
@MAKE_DATABASE@ $(DESTDIR)$(libdir) \
@MAKE_DATABASE@ $(DESTDIR)$(datadir) \
@MAKE_DATABASE@ $(DESTDIR)$(tabsetdir)
@MAKE_DATABASE@ DESTDIR=${DESTDIR} \
@MAKE_DATABASE@ prefix=${prefix} \
@MAKE_DATABASE@ exec_prefix=${exec_prefix} \
@MAKE_DATABASE@ bindir=${bindir} \
@MAKE_DATABASE@ top_srcdir=${top_srcdir} \
@MAKE_DATABASE@ srcdir=${srcdir} \
@MAKE_DATABASE@ datadir=${datadir} \
@MAKE_DATABASE@ ticdir=${ticdir} \
@MAKE_DATABASE@ source=terminfo.tmp \
@MAKE_DATABASE@ cross_compiling=@cross_compiling@ \
@MAKE_DATABASE@ $(SHELL) ./run_tic.sh
-@MAKE_DATABASE@ @cd $(srcdir)/tabset && \
+@MAKE_DATABASE@ @( cd $(srcdir)/tabset && \
@MAKE_DATABASE@ $(SHELL) -c 'for i in * ; do \
@MAKE_DATABASE@ if test -f $$i ; then \
@MAKE_DATABASE@ echo installing $$i; \
@MAKE_DATABASE@ $(INSTALL_DATA) $$i $(DESTDIR)$(tabsetdir)/$$i; \
-@MAKE_DATABASE@ fi; done'
+@MAKE_DATABASE@ fi; done' )
install.data ::
@echo "finished $@"
NCURSES_CONFIG = ncurses@DFT_ARG_SUFFIX@@cf_cv_abi_version@@cf_config_suffix@-config
install \
install.libs :: $(DESTDIR)$(bindir) ncurses-config
$(INSTALL_SCRIPT) ncurses-config $(DESTDIR)$(bindir)/$(NCURSES_CONFIG)
# Make a list of the files that gen-pkgconfig might create:
@MAKE_PC_FILES@PC_FILES = \
@MAKE_PC_FILES@ @LIB_NAME@@USE_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc \
@MAKE_PC_FILES@ @TINFO_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc \
@MAKE_PC_FILES@ @TICS_NAME@@USE_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc \
@MAKE_PC_FILES@ @PANEL_NAME@@USE_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc \
@MAKE_PC_FILES@ @MENU_NAME@@USE_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc \
@MAKE_PC_FILES@ @FORM_NAME@@USE_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc \
@MAKE_PC_FILES@ @CXX_NAME@@USE_ARG_SUFFIX@@PC_MODULE_SUFFIX@.pc
# some packagers prefer to be able to construct pc-files on servers where
# pkg-config is not installed. Work around that by creating the library
# directory during this rule:
@MAKE_PC_FILES@install \
@MAKE_PC_FILES@install.libs :: pc-files
@MAKE_PC_FILES@ @$(SHELL) -c 'case "x$(DESTDIR)$(PKG_CONFIG_LIBDIR)" in \
@MAKE_PC_FILES@ (x/*) \
@MAKE_PC_FILES@ mkdir -p $(DESTDIR)$(PKG_CONFIG_LIBDIR); \
@MAKE_PC_FILES@ for name in $(PC_FILES); do \
@MAKE_PC_FILES@ test -f $$name || continue; \
@MAKE_PC_FILES@ echo installing $$name; \
@MAKE_PC_FILES@ $(INSTALL_DATA) $$name $(DESTDIR)$(PKG_CONFIG_LIBDIR)/$$name; \
@MAKE_PC_FILES@ done \
@MAKE_PC_FILES@ ;; \
@MAKE_PC_FILES@ (*) \
@MAKE_PC_FILES@ echo "...skip actual install: no destination was given" ; \
@MAKE_PC_FILES@ ;; \
@MAKE_PC_FILES@ esac'
@MAKE_PC_FILES@all \
@MAKE_PC_FILES@sources :: pc-files
@MAKE_PC_FILES@pc-files :
@MAKE_PC_FILES@ $(SHELL) ./gen-pkgconfig
@MAKE_PC_FILES@ -touch $@
terminfo.tmp : run_tic.sed $(source)
echo '** adjusting tabset paths'
sed -f run_tic.sed $(source) >terminfo.tmp
run_tic.sed :
WHICH_XTERM=@WHICH_XTERM@ \
XTERM_KBS=@XTERM_KBS@ \
datadir=${datadir} \
$(SHELL) $(srcdir)/gen_edit.sh >$@
$(DESTDIR)$(bindir) \
$(DESTDIR)$(libdir) \
$(DESTDIR)$(datadir) \
$(DESTDIR)$(tabsetdir) :
mkdir -p $@
uninstall : @MISC_UNINSTALL_DATA@ uninstall.libs
uninstall.data :
-test -d $(DESTDIR)$(tabsetdir) && rm -rf $(DESTDIR)$(tabsetdir)
-test -d $(DESTDIR)$(ticdir) && rm -rf $(DESTDIR)$(ticdir)
-test -f $(DESTDIR)$(ticfile) && rm -f $(DESTDIR)$(ticfile)
uninstall.libs :
-rm -f $(DESTDIR)$(bindir)/$(NCURSES_CONFIG)
@MAKE_PC_FILES@ @$(SHELL) -c 'case x$(DESTDIR)$(PKG_CONFIG_LIBDIR) in \
@MAKE_PC_FILES@ (x/*) \
@MAKE_PC_FILES@ for name in $(PC_FILES); do \
@MAKE_PC_FILES@ test -f $$name || continue; \
@MAKE_PC_FILES@ echo uninstalling $$name; \
@MAKE_PC_FILES@ rm -f $(DESTDIR)$(PKG_CONFIG_LIBDIR)/$$name; \
@MAKE_PC_FILES@ done \
@MAKE_PC_FILES@ ;; \
@MAKE_PC_FILES@ esac'
tags :
@MAKE_UPPER_TAGS@TAGS :
mostlyclean :
@MAKE_DATABASE@ -rm -f terminfo.tmp
@MAKE_DATABASE@ -rm -f run_tic.sed
@MAKE_PC_FILES@ -rm -f pc-files $(PC_FILES)
-rm -f core tags TAGS *~ *.bak *.ln *.atac trace
clean :: mostlyclean
distclean : clean
@MAKE_PC_FILES@ -rm -f gen-pkgconfig
-rm -f Makefile run_tic.sh ncurses-config
realclean : distclean
###############################################################################
# The remainder of this file is automatically generated during configuration
###############################################################################
diff --git a/contrib/ncurses/misc/gen-pkgconfig.in b/contrib/ncurses/misc/gen-pkgconfig.in
index 8f00b824b9e4..5a71ab0203c6 100644
--- a/contrib/ncurses/misc/gen-pkgconfig.in
+++ b/contrib/ncurses/misc/gen-pkgconfig.in
@@ -1,199 +1,241 @@
#!@SHELL@
-# $Id: gen-pkgconfig.in,v 1.44 2020/02/12 00:09:26 tom Exp $
+# $Id: gen-pkgconfig.in,v 1.49 2021/01/24 00:35:28 tom Exp $
##############################################################################
-# Copyright 2018-2019,2020 Thomas E. Dickey #
+# Copyright 2018-2020,2021 Thomas E. Dickey #
# Copyright 2009-2015,2018 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey
#
# The complete configure script for ncurses is the ncurses5-config (or similar
# name, depending on the flavor, e.g., ncursesw5-config, ncurses6-config, etc).
# That provides more information than pkg-config, and is the portable and
# recommended solution.
#
# For each library, generate a ".pc" file which depends on the base ncurses
# library, except that the tinfo library does not depend on ncurses.
LIB_NAME=@LIB_NAME@
TINFO_NAME=@TINFO_NAME@
PANEL_NAME=@PANEL_NAME@
MENU_NAME=@MENU_NAME@
FORM_NAME=@FORM_NAME@
CXX_NAME=@CXX_NAME@
+
DFT_DEP_SUFFIX=@DFT_DEP_SUFFIX@
TINFO_ARG_SUFFIX=@TINFO_ARG_SUFFIX@
CXX_LIB_SUFFIX=@CXX_LIB_SUFFIX@
suffix=@PC_MODULE_SUFFIX@
prefix="@prefix@"
exec_prefix="@exec_prefix@"
includedir="@includedir@@includesubdir@"
libdir="@libdir@"
RPATH_LIST=@RPATH_LIST@
PRIVATE_LIBS="@PRIVATE_LIBS@"
show_prefix='@prefix@'
show_exec_prefix='@exec_prefix@'
show_includedir='@includedir@@includesubdir@'
show_libdir='@libdir@'
MAIN_LIBRARY="${LIB_NAME}@USE_ARG_SUFFIX@"
SUB_LIBRARY="${TINFO_ARG_SUFFIX}"
-PANEL_LIBRARY="${PANEL_NAME}@USE_ARG_SUFFIX@"
-MENU_LIBRARY="${MENU_NAME}@USE_ARG_SUFFIX@"
+
+CXX_LIBRARY="${CXX_NAME}@USE_ARG_SUFFIX@"
FORM_LIBRARY="${FORM_NAME}@USE_ARG_SUFFIX@"
+MENU_LIBRARY="${MENU_NAME}@USE_ARG_SUFFIX@"
+PANEL_LIBRARY="${PANEL_NAME}@USE_ARG_SUFFIX@"
CFLAGS="@PKG_CFLAGS@"
if [ "$includedir" != "/usr/include" ]; then
includetop=`echo "$includedir" | sed -e 's,/include/[^/]*$,/include,'`
[ "$includetop" = "/usr/include" ] && includetop="$includedir"
CFLAGS="$CFLAGS -I\${includedir}"
if [ "x$includetop" != "x$includedir" ]
then
CFLAGS="$CFLAGS -I${includetop}"
fi
fi
lib_flags=
-for opt in -L$libdir @LDFLAGS@ @EXTRA_LDFLAGS@ @LIBS@
+for opt in -L$libdir @LDFLAGS@ @EXTRA_PKG_LDFLAGS@ @LIBS@
do
case $opt in
-l*) # LIBS is handled specially below
continue
;;
-specs*) # ignore linker specs-files which were used to build library
continue
;;
-Wl,-z,*) # ignore flags used to manipulate shared image
continue
;;
-L*)
- [ -d ${opt##-L} ] || continue
- case ${opt##-L} in
+ lib_check=${opt##-L}
+ [ -d "$lib_check" ] || continue
+ case "$lib_check" in
@LD_SEARCHPATH@) # skip standard libdir
- continue
+ if [ "$lib_check" = "$libdir" ]
+ then
+ lib_first=yes
+ IFS_save="$IFS"
+ IFS='|'
+ LIBDIRS="@LD_SEARCHPATH@"
+ for lib_check in $LIBDIRS
+ do
+ if [ -d "$lib_check" ]
+ then
+ if [ "$lib_check" != "$libdir" ]
+ then
+ lib_first=no
+ fi
+ break
+ fi
+ done
+ IFS="$IFS_save"
+ [ $lib_first = yes ] && continue
+ found=no
+ for check in $lib_flags
+ do
+ if [ "x$check" = "x$opt" ]
+ then
+ found=yes
+ break
+ fi
+ done
+ [ $found = yes ] && continue
+ :
+ else
+ continue
+ fi
;;
*)
found=no
for check in $lib_flags
do
if [ "x$check" = "x$opt" ]
then
found=yes
break
fi
done
[ $found = yes ] && continue
;;
esac
;;
esac
lib_flags="$lib_flags $opt"
done
# Check if we should specify the tinfo library explicitly so that terminfo
# functions or curses variables (which also reside in tinfo) can be linked
# using the -lncurses option.
NEED_TINFO=no
if [ "x@TINFO_LIBS@" != "x" ] && \
[ "x$TINFO_ARG_SUFFIX" != "x$MAIN_LIBRARY" ]
then
NEED_TINFO=yes
fi
# The "URL" feature came in pkg-config 0.17
USEURL=""
CFGVER=`pkg-config --version 2>/dev/null |head -n 1 | awk -F. '/0.[0-9][0-9]/{print $2;}'`
# A missing version should simply fail, but some packagers insist on building
# packages on machines which do not actually have the tools they depend on at
# runtime.
[ -z "$CFGVER" ] && CFGVER=30
[ $CFGVER -ge 17 ] || USEURL="#"
for name in @PC_MODULES_TO_MAKE@
do
name="${name}"
+ case $name in
+ form*) name="$FORM_LIBRARY" ;;
+ menu*) name="$MENU_LIBRARY" ;;
+ panel*) name="$PANEL_LIBRARY" ;;
+ ncurses++*) name="$CXX_LIBRARY" ;;
+ esac
LIBS="-l$name"
desc="ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@"
reqs=
if [ $name = $MAIN_LIBRARY ]; then
desc="$desc library"
[ $NEED_TINFO = yes ] && LIBS="$LIBS -l$TINFO_ARG_SUFFIX"
[ -n "@LIBS@" ] && LIBS="$LIBS @LIBS@"
elif [ $name = $SUB_LIBRARY ]; then
desc="$desc terminal interface library"
elif expr $name : ".*${CXX_NAME}.*" >/dev/null ; then
reqs="$PANEL_LIBRARY${suffix}, $MENU_LIBRARY${suffix}, $FORM_LIBRARY${suffix}, $MAIN_LIBRARY${suffix}"
desc="$desc add-on library"
else
reqs="$MAIN_LIBRARY${suffix}"
desc="$desc add-on library"
fi
if [ $name != $SUB_LIBRARY ] && \
[ $SUB_LIBRARY != $MAIN_LIBRARY ] && \
[ $name != $TINFO_NAME ] && \
[ $NEED_TINFO != yes ] ; then
[ -n "$reqs" ] && reqs="$reqs, "
reqs="${reqs}${SUB_LIBRARY}${suffix}"
fi
if [ $name = $MAIN_LIBRARY ]
then
main_libs="$PRIVATE_LIBS"
else
main_libs=
fi
echo "** creating ${name}${suffix}.pc"
cat >${name}${suffix}.pc <<EOF
# pkg-config file generated by `basename $0`
# vile:makemode
prefix=$show_prefix
exec_prefix=$show_exec_prefix
libdir=$show_libdir
includedir=$show_includedir
abi_version=@cf_cv_abi_version@
major_version=@NCURSES_MAJOR@
version=@NCURSES_MAJOR@.@NCURSES_MINOR@.@NCURSES_PATCH@
Name: ${name}${suffix}
Description: $desc
Version: \${version}
${USEURL}URL: https://invisible-island.net/ncurses
Requires.private: $reqs
Libs: $lib_flags $LIBS
Libs.private: @LIBS@ $main_libs
Cflags: $CFLAGS
EOF
done
# vile:shmode ts=4 sw=4
diff --git a/contrib/ncurses/misc/ncurses-config.in b/contrib/ncurses/misc/ncurses-config.in
index 7f8ba697d118..eae39a516ff3 100644
--- a/contrib/ncurses/misc/ncurses-config.in
+++ b/contrib/ncurses/misc/ncurses-config.in
@@ -1,292 +1,325 @@
#!@SHELL@
-# $Id: ncurses-config.in,v 1.43 2020/02/02 23:34:34 tom Exp $
+# $Id: ncurses-config.in,v 1.46 2021/01/23 23:47:46 tom Exp $
##############################################################################
-# Copyright 2018-2019,2020 Thomas E. Dickey #
+# Copyright 2018-2020,2021 Thomas E. Dickey #
# Copyright 2006-2015,2017 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey, 2006-on
LANG=C; export LANG
LANGUAGE=C; export LANGUAGE
LC_ALL=C; export LC_ALL
LC_CTYPE=C; export LC_CTYPE
prefix="@prefix@"
exec_prefix="@exec_prefix@"
bindir="@bindir@"
includedir="@includedir@"
libdir="@libdir@"
datarootdir="@datarootdir@"
datadir="@datadir@"
mandir="@mandir@"
THIS="@LIB_NAME@@USE_LIB_SUFFIX@"
TINFO_LIB="@TINFO_ARG_SUFFIX@"
RPATH_LIST="@RPATH_LIST@"
includesubdir="@includedir@/${THIS}"
# Ensure that RPATH_LIST contains only absolute pathnames, if it is nonempty.
# We cannot filter it out within the build-process since the variable is used
# in some special cases of installation using a relative path.
if [ -n "$RPATH_LIST" ]
then
save_IFS="$IFS"
IFS='@PATH_SEPARATOR@'
filtered=
for item in $RPATH_LIST
do
case "$item" in
./*|../*|*/..|*/../*)
;;
*)
[ -n "$filtered" ] && filtered="${filtered}@PATH_SEPARATOR@"
filtered="${filtered}${item}"
;;
esac
done
IFS="$save_IFS"
# if the result is empty, there is little we can do to fix it
RPATH_LIST="$filtered"
fi
# with --disable-overwrite, we installed into a subdirectory, but transformed
# the headers to include like this:
# <ncurses@LIB_SUFFIX@/curses.h>
if [ x@WITH_OVERWRITE@ = xno ]; then
case $includedir in
$prefix/include/ncurses@LIB_SUFFIX@@EXTRA_SUFFIX@)
includedir=`echo "$includedir" | sed -e 's,/[^/]*$,,'`
;;
esac
fi
LIBS="@LIBS@"
if [ "@TINFO_NAME@" = "@LIB_NAME@" ]; then
LIBS="-l${THIS} $LIBS"
else
LIBS="-l${THIS} -l${TINFO_LIB} $LIBS"
fi
# Ignore -L options which do not correspond to an actual directory, or which
# are standard library directories (i.e., the linker is supposed to search
# those directories).
#
# There is no portable way to find the list of standard library directories.
# Require a POSIX shell anyway, to keep this simple.
lib_flags=
-for opt in -L$libdir @LDFLAGS@ @EXTRA_LDFLAGS@ $LIBS
+for opt in -L$libdir @LDFLAGS@ @EXTRA_PKG_LDFLAGS@ $LIBS
do
case $opt in
-specs*) # ignore linker specs-files which were used to build library
continue
;;
-Wl,-z,*) # ignore flags used to manipulate shared image
continue
;;
-L*)
- [ -d ${opt##-L} ] || continue
- case ${opt##-L} in
+ lib_check=${opt##-L}
+ [ -d "$lib_check" ] || continue
+ case "$lib_check" in
@LD_SEARCHPATH@) # skip standard libdir
- continue
+ if [ "$lib_check" = "$libdir" ]
+ then
+ lib_first=yes
+ IFS_save="$IFS"
+ IFS='|'
+ LIBDIRS="@LD_SEARCHPATH@"
+ for lib_check in $LIBDIRS
+ do
+ if [ -d "$lib_check" ]
+ then
+ if [ "$lib_check" != "$libdir" ]
+ then
+ lib_first=no
+ fi
+ break
+ fi
+ done
+ IFS="$IFS_save"
+ [ $lib_first = yes ] && continue
+ found=no
+ for check in $lib_flags
+ do
+ if [ "x$check" = "x$opt" ]
+ then
+ found=yes
+ break
+ fi
+ done
+ [ $found = yes ] && continue
+ :
+ else
+ continue
+ fi
;;
*)
found=no
for check in $lib_flags
do
if [ "x$check" = "x$opt" ]
then
found=yes
break
fi
done
[ $found = yes ] && continue
;;
esac
;;
esac
lib_flags="$lib_flags $opt"
done
[ $# = 0 ] && exec @SHELL@ $0 --error
while [ $# -gt 0 ]; do
case "$1" in
# basic configuration
--prefix)
echo "$prefix"
;;
--exec-prefix)
echo "$exec_prefix"
;;
# compile/link
--cflags)
INCS="@PKG_CFLAGS@"
if [ "x@WITH_OVERWRITE@" = xno ]; then
INCS="$INCS -I${includesubdir}"
fi
if [ "${includedir}" != /usr/include ]; then
INCS="$INCS -I${includedir}"
fi
sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO
$INCS
ENDECHO
;;
--libs)
OPTS=
for opt in $lib_flags
do
[ -n "$OPTS" ] && OPTS="$OPTS "
OPTS="${OPTS}${opt}"
done
printf "%s\n" "$OPTS"
;;
--libs-only-L)
OPTS=
for opt in $lib_flags
do
case "x$opt" in
x-L*)
[ -n "$OPTS" ] && OPTS="$OPTS "
OPTS="${OPTS}${opt}"
;;
esac
done
printf "%s\n" "$OPTS"
;;
--libs-only-l)
OPTS=
for opt in $lib_flags
do
case "x$opt" in
x-l*)
[ -n "$OPTS" ] && OPTS="$OPTS "
OPTS="${OPTS}${opt}"
;;
esac
done
printf "%s\n" "$OPTS"
;;
--libs-only-other)
OPTS=
for opt in $lib_flags
do
case "x$opt" in
x-[lL]*)
;;
*)
[ -n "$OPTS" ] && OPTS="$OPTS "
OPTS="${OPTS}${opt}"
;;
esac
done
printf "%s\n" "$OPTS"
;;
# identification
--version)
echo "@NCURSES_MAJOR@.@NCURSES_MINOR@.@NCURSES_PATCH@"
;;
--abi-version)
echo "@cf_cv_abi_version@"
;;
--mouse-version)
echo "@NCURSES_MOUSE_VERSION@"
;;
# locations
--bindir)
echo "${bindir}"
;;
--datadir)
echo "${datadir}"
;;
--includedir)
INCS=
if [ "x@WITH_OVERWRITE@" = xno ]; then
INCS="${includesubdir}"
elif [ "${includedir}" != /usr/include ]; then
INCS="${includedir}"
fi
echo $INCS
;;
--libdir)
echo "${libdir}"
;;
--mandir)
echo "${mandir}"
;;
--terminfo)
echo "@TERMINFO@"
;;
--terminfo-dirs)
echo "@TERMINFO_DIRS@"
;;
--termpath)
echo "@TERMPATH@"
;;
# general info
--help)
cat <<ENDHELP
Usage: `basename $0` [options]
Options:
--prefix echos the package-prefix of ${THIS}
--exec-prefix echos the executable-prefix of ${THIS}
--cflags echos the C compiler flags needed to compile with ${THIS}
--libs echos the libraries needed to link with ${THIS}
--libs-only-L echos -L linker options (search path) for ${THIS}
--libs-only-l echos -l linker options (libraries) for ${THIS}
--libs-only-other echos linker options other than -L/-l
--version echos the release+patchdate version of ${THIS}
--abi-version echos the ABI version of ${THIS}
--mouse-version echos the mouse-interface version of ${THIS}
--bindir echos the directory containing ${THIS} programs
--datadir echos the directory containing ${THIS} data
--includedir echos the directory containing ${THIS} header files
--libdir echos the directory containing ${THIS} libraries
--mandir echos the directory containing ${THIS} manpages
--terminfo echos the \$TERMINFO terminfo database path
--terminfo-dirs echos the \$TERMINFO_DIRS directory list
--termpath echos the \$TERMPATH termcap list
--help prints this message
ENDHELP
;;
--error|*)
@SHELL@ $0 --help 1>&2
exit 1
;;
esac
shift
done
# vi:ts=4 sw=4
# vile:shmode
diff --git a/contrib/ncurses/misc/terminfo.src b/contrib/ncurses/misc/terminfo.src
index 70047be7f615..c1fdeb8a875d 100644
--- a/contrib/ncurses/misc/terminfo.src
+++ b/contrib/ncurses/misc/terminfo.src
@@ -1,26438 +1,26923 @@
######## TERMINAL TYPE DESCRIPTIONS SOURCE FILE
#
# This version of terminfo.src is distributed with ncurses and is maintained
# by Thomas E. Dickey (TD).
#
# Report bugs and new terminal descriptions to
# bug-ncurses@gnu.org
#
-# $Revision: 1.779 $
-# $Date: 2020/01/19 01:09:38 $
+# $Revision: 1.866 $
+# $Date: 2021/02/20 23:39:21 $
#
# The original header is preserved below for reference. It is noted that there
# is a "newer" version which differs in some cosmetic details (but actually
# stopped updates several years ago); we have decided to not change the header
# unless there is also a change in content.
#
# To further muddy the waters, it is noted that changes to this file as part of
# maintenance of ncurses (since 1996) are generally conceded to be copyright
# under the ncurses MIT-style license. That was the effect of the agreement
# which the principal authors of ncurses made in 1998. However, since much of
# the file itself is of unknown authorship (and the disclaimer below makes it
# obvious that Raymond cannot or will not convey rights over those parts),
# there is no explicit copyright notice on the file itself.
#
# It would also be a nuisance to split the file into unknown/known authorship
# and move pieces as they are maintained, since many of the maintenance changes
# have been small corrections to Raymond's translations to/from termcap format,
# correcting the data but not the accompanying annotations.
#
# In any case, note that almost half of this file is not data but annotations
# which reflect creative effort. Furthermore, the structure of entries to
# reuse common chunks also is creative (and subject to copyright). Finally,
# some portions of the data are derivative work under a compatible MIT-style
# license from xterm.
#
#------------------------------------------------------------------------------
# https://invisible-island.net/ncurses/ncurses.faq.html#terminfo_copying
# https://invisible-island.net/personal/copyrights.html#removing_notes
#------------------------------------------------------------------------------
#
# Version 10.2.1
# terminfo syntax
#
# Eric S. Raymond (current maintainer)
# John Kunze, Berkeley
# Craig Leres, Berkeley
#
# Please e-mail changes to terminfo@thyrsus.com; the old termcap@berkeley.edu
# address is no longer valid. The latest version can always be found at
# <http://www.tuxedo.org/terminfo>.
#
# PURPOSE OF THIS FILE:
#
# This file describes the capabilities of various character-cell terminals,
# as needed by software such as screen-oriented editors.
#
# Other terminfo and termcap files exist, supported by various OS vendors
# or as relics of various older versions of UNIX. This one is the longest
# and most comprehensive one in existence. It subsumes not only the entirety
# of the historical 4.4BSD, GNU, System V and SCO termcap files and the BRL
# termcap file, but also large numbers of vendor-maintained termcap and
# terminfo entries more complete and carefully tested than those in historical
# termcap/terminfo versions.
#
# Pointers to related resources (including the ncurses distribution) may
# be found at <http://www.tuxedo.org/terminfo>.
#
# INTERNATIONALIZATION:
#
# This file uses only the US-ASCII character set (no ISO8859 characters).
#
# This file assumes a US-ASCII character set. If you need to fix this, start
# by global-replacing \E(B and \E)B with the appropriate ISO 6429 enablers
# for your character set. \E(A and \E)A enables the British character set
# with the pound sign at position 2/3.
#
# In a Japanese-processing environment using EUC/Japanese or Shift-JIS,
# C1 characters are considered the first-byte set of the Japanese encodings,
# so \E)0 should be avoided in <enacs> and initialization strings.
#
# FILE FORMAT:
#
# The version you are looking at may be in any of three formats: master
# (terminfo with OT capabilities), stock terminfo, or termcap. You can tell
# which by the format given in the header above.
#
# The master format is accepted and generated by the terminfo tools in the
# ncurses suite; it differs from stock (System V-compatible) terminfo only
# in that it admits a group of capabilities (prefixed `OT') equivalent to
# various obsolete termcap capabilities. You can, thus, convert from master
# to stock terminfo simply by filtering with `sed "/OT[^,]*,/s///"'; but if
# you have ncurses `tic -I' is nicer (among other things, it automatically
# outputs entries in a canonical form).
#
# The termcap version is generated automatically from the master version
# using tic -C. This filtering leaves in the OT capabilities under their
# original termcap names. All translated entries fit within the 1023-byte
# string-table limit of archaic termcap libraries except where explicitly
# noted below. Note that the termcap translation assumes that your termcap
# library can handle multiple tc capabilities in an entry. 4.4BSD has this
# capability. Older versions of GNU termcap, through 1.3, do not.
#
# For details on these formats, see terminfo(5) in the ncurses distribution,
# and termcap(5) in the 4.4BSD Unix Programmer's Manual. Be aware that 4.4BSD
# curses has been declared obsolete by the caretakers of the 4.4BSD sources
# as of June 1995; they are encouraging everyone to migrate to ncurses.
#
# Note: unlike some other distributed terminfo files (Novell Unix & SCO's),
# no entry in this file has embedded comments. This is so source translation
# to termcap only has to carry over leading comments. Also, no name field
# contains embedded whitespace (such whitespace confuses rdist).
#
# Further note: older versions of this file were often installed with an editor
# script (reorder) that moved the most common terminal types to the front of
# the file. This should no longer be necessary, as the file is now ordered
# roughly by type frequency with ANSI/VT100 and other common types up front.
#
# Some information has been merged in from terminfo files distributed by
# USL and SCO (see COPYRIGHTS AND OTHER DELUSIONS below). Much information
# comes from vendors who maintain official terminfos for their hardware
# (notably DEC and Wyse).
#
# A detailed change history is included at the end of this file.
#
# FILE ORGANIZATION:
#
# Comments in this file begin with # - they cannot appear in the middle
# of a terminfo/termcap entry (this feature had to be sacrificed in order
# to allow standard terminfo and termcap syntax to be generated cleanly from
# the master format). Individual capabilities are commented out by
# placing a period between the colon and the capability name.
#
# The file is divided up into major sections (headed by lines beginning with
# the string "########") and minor sections (beginning with "####"); do
#
# grep "^####" <file> | more
#
# to see a listing of section headings. The intent of the divisions is
# (a) to make it easier to find things, and (b) to order the database so
# that important and frequently-encountered terminal types are near the
# front (so that you'll get reasonable search efficiency from a linear
# search of the termcap form even if you don't use reorder). Minor sections
# usually correspond to manufacturers or standard terminal classes.
# Parenthesized words following manufacturer names are type prefixes or
# product line names used by that manufacturers.
#
# HOW TO READ THE ENTRIES:
#
# The first name in an entry is the canonical name for the model or
# type, last entry is a verbose description. Others are mnemonic synonyms for
# the terminal.
#
# Terminal names look like <manufacturer> <model> - <modes/options>
# The part to the left of the dash, if a dash is present, describes the
# particular hardware of the terminal. The part to the right may be used
# for flags indicating special ROMs, extra memory, particular terminal modes,
# or user preferences.
#
# All names should be in lower case, for consistency in typing.
#
# The following are conventionally used suffixes:
# -2p Has two pages of memory. Likewise 4p, 8p, etc.
# -am Enable auto-margin.
# -m Monochrome. Suppress color support
# -mc Magic-cookie. Some terminals (notably older Wyses) can
# only support one attribute without magic-cookie lossage.
# Their base entry is usually paired with another that
# uses magic cookies to support multiple attributes.
# -nam No auto-margin - suppress <am> capability
# -nl No labels - suppress soft labels
# -ns No status line - suppress status line
# -rv Terminal in reverse video mode (black on white)
# -s Enable status line.
# -vb Use visible bell (<flash>) rather than <bel>.
# -w Wide - in 132 column mode.
# If a name has multiple suffixes and one is a line height, that one should
# go first. Thus `aaa-30-s-rv' is recommended over `aaa-s-rv-30'.
#
# Entries with embedded plus signs are designed to be included through use/tc
# capabilities, not used as standalone entries.
#
# To avoid search clashes, some older all-numeric names for terminals have
# been removed (i.e., "33" for the Model 33 Teletype, "2621" for the HP2621).
# All primary names of terminals now have alphanumeric prefixes.
#
# Comments marked "esr" are mostly results of applying the termcap-compiler
# code packaged with ncurses and contemplating the resulting error messages.
# In many cases, these indicated obvious fixes to syntax garbled by the
# composers. In a few cases, I was able to deduce corrected forms for garbled
# capabilities by looking at context. All the information in the original
# entries is preserved in the comments.
#
# In the comments, terminfo capability names are bracketed with <> (angle
# brackets). Termcap capability names are bracketed with :: (colons).
#
# INTERPRETATION OF USER CAPABILITIES
#
# The System V Release 4 and XPG4 terminfo format defines ten string
# capabilities for use by applications, <u0>...<u9>. In this file, we use
# certain of these capabilities to describe functions which are not covered
# by terminfo. The mapping is as follows:
#
# u9 terminal enquire string (equiv. to ANSI/ECMA-48 DA)
# u8 terminal answerback description
# u7 cursor position request (equiv. to VT100/ANSI/ECMA-48 DSR 6)
# u6 cursor position report (equiv. to ANSI/ECMA-48 CPR)
#
# The terminal enquire string <u9> should elicit an answerback response
# from the terminal. Common values for <u9> will be ^E (on older ASCII
# terminals) or \E[c (on newer VT100/ANSI/ECMA-48-compatible terminals).
#
# The cursor position request (<u7>) string should elicit a cursor position
# report. A typical value (for VT100 terminals) is \E[6n.
#
# The terminal answerback description (u8) must consist of an expected
# answerback string. The string may contain the following scanf(3)-like
# escapes:
#
# %c Accept any character
# %[...] Accept any number of characters in the given set
#
# The cursor position report (<u6>) string must contain two scanf(3)-style
# %d format elements. The first of these must correspond to the Y coordinate
# and the second to the %d. If the string contains the sequence %i, it is
# taken as an instruction to decrement each value after reading it (this is
# the inverse sense from the cup string). The typical CPR value is
# \E[%i%d;%dR (on VT100/ANSI/ECMA-48-compatible terminals).
#
# These capabilities are used by tack(1m), the terminfo action checker
# (distributed with ncurses 5.0).
#
# TABSET FILES
#
# All the entries in this file have been edited to assume that the tabset
# files directory is /usr/share/tabset, in conformance with the File Hierarchy
# Standard for Linux and open-source BSD systems. Some vendors (notably Sun)
# use /usr/lib/tabset or (more recently) /usr/share/lib/tabset.
#
# No curses package we know of actually uses these files. If their location
# is an issue, you will have to hand-patch the file locations before compiling
# this file.
#
# REQUEST FOR CONTACT INFORMATION AND HISTORICAL MATERIAL
#
# As the ANSI/ECMA-48 standard and variants take firmer hold, and as
# character-cell terminals are increasingly replaced by X displays, much of
# this file is becoming a historical document (this is part of the reason for
# the new organization, which puts ANSI types, xterm, Unix consoles,
# and vt100 up front in confidence that this will catch 95% of new hardware).
#
# For the terminal types still alive, I'd like to have manufacturer's
# contact data (Internet address and/or snail-mail + phone).
#
# I'm also interested in enriching the comments so that the latter portions of
# the file do in fact become a potted history of VDT technology as seen by
# UNIX hackers. Ideally, I'd like the headers for each manufacturer to
# include its live/dead/out-of-the-business status, and for as many
# terminal types as possible to be tagged with information like years
# of heaviest use, popularity, and interesting features.
#
# I'm especially interested in identifying the obscure entries listed under
# `Miscellaneous obsolete terminals, manufacturers unknown' before the tribal
# wisdom about them gets lost. If you know a lot about obscure old terminals,
# please go to the terminfo resource page, grab the UFO file (ufo.ti), and
# eyeball it for things you can identify and describe.
#
# If you have been around long enough to contribute, please read the file
# with this in mind and send me your annotations.
#
# COPYRIGHTS AND OTHER DELUSIONS
#
# The BSD ancestor of this file had a standard Regents of the University of
# California copyright with dates from 1980 to 1993.
#
# Some information has been merged in from a terminfo file SCO distributes.
# It has an obnoxious boilerplate copyright which I'm ignoring because they
# took so much of the content from the ancestral BSD versions of this file
# and didn't attribute it, thereby violating the BSD Regents' copyright.
#
# Not that anyone should care. However many valid functions copyrights may
# serve, putting one on a termcap/terminfo file with hundreds of anonymous
# contributors makes about as much sense as copyrighting a wall-full of
# graffiti -- it's legally dubious, ethically bogus, and patently ridiculous.
#
# This file deliberately has no copyright. It belongs to no one and everyone.
# If you claim you own it, you will merely succeed in looking like a fool.
# Use it as you like. Use it at your own risk. Copy and redistribute freely.
# There are no guarantees anywhere. Svaha!
#
######## ANSI, UNIX CONSOLE, AND SPECIAL TYPES
#
# This section describes terminal classes and brands that are still
# quite common.
#
#### Specials
#
# Special "terminals". These are used to label tty lines when you don't
# know what kind of terminal is on it. The characteristics of an unknown
# terminal are the lowest common denominator - they look about like a ti 700.
#
dumb|80-column dumb tty,
am,
cols#80,
bel=^G, cr=\r, cud1=\n, ind=\n,
unknown|unknown terminal type,
gn, use=dumb,
lpr|printer|line printer,
OTbs, hc, os,
cols#132, lines#66,
bel=^G, cr=\r, cub1=^H, cud1=\n, ff=^L, ind=\n,
glasstty|classic glass tty interpreting ASCII control characters,
OTbs, am,
cols#80,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, ht=^I, kcub1=^H,
kcud1=\n, nel=\r\n, .kbs=^H,
vanilla|dumb tty,
OTbs,
bel=^G, cr=\r, cud1=\n, ind=\n,
# This is almost the same as "dumb", but with no prespecified width.
# DEL and ^C are hardcoded to act as kill characters.
# ^D acts as a line break (just like newline).
# It also interprets
# \033];xxx\007
# for compatibility with xterm -TD
9term|Plan9 terminal emulator for X,
am,
OTnl=\n, bel=^G, cud1=\n,
#### ANSI.SYS/ISO 6429/ECMA-48 Capabilities
#
# See the end-of-file comment for more on these.
#
# ANSI capabilities are broken up into pieces, so that a terminal
# implementing some ANSI subset can use many of them.
ansi+local1|ANSI normal-mode cursor-keys,
cub1=\E[D, cud1=\E[B, cuf1=\E[C, cuu1=\E[A,
ansi+local|ANSI normal-mode parameterized cursor-keys,
cub=\E[%p1%dD, cud=\E[%p1%dB, cuf=\E[%p1%dC,
cuu=\E[%p1%dA, use=ansi+local1,
ansi+tabs|ANSI tab-stops,
cbt=\E[Z, ht=^I, hts=\EH, tbc=\E[3g,
ansi+inittabs|ANSI initial tab-stops,
it#8, use=ansi+tabs,
ansi+erase|ANSI clear screen/line,
clear=\E[H\E[J, ed=\E[J, el=\E[K,
ansi+rca|ANSI relative cursor-addressing,
hpa=\E[%p1%{1}%+%dG, vpa=\E[%p1%{1}%+%dd,
ansi+cup|ANSI absolute cursor-addressing,
cup=\E[%i%p1%d;%p2%dH, home=\E[H,
ansi+rep|ANSI repeat-character,
rep=%p1%c\E[%p2%{1}%-%db,
ansi+idl1|ANSI insert/delete one line,
dl1=\E[M, il1=\E[L,
ansi+idl|ANSI insert/delete lines,
dl=\E[%p1%dM, il=\E[%p1%dL, use=ansi+idl1,
ansi+idc1|ANSI insert/delete one character,
dch1=\E[P, ich1=\E[@, rmir=\E[4l, smir=\E[4h,
ansi+idc|ANSI insert/delete characters,
dch=\E[%p1%dP, ich=\E[%p1%d@, use=ansi+idc1,
ansi+arrows|ANSI normal-mode cursor-keys,
kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
khome=\E[H,
ansi+sgr|ANSI graphic renditions,
blink=\E[5m, invis=\E[8m, rev=\E[7m,
sgr=\E[0%?%p3%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,
sgr0=\E[0m,
ansi+sgrso|ANSI standout only,
rmso=\E[m, smso=\E[7m,
ansi+sgrul|ANSI underline only,
rmul=\E[m, smul=\E[4m,
ansi+sgrbold|ANSI graphic renditions; assuming terminal has bold; not dim,
bold=\E[1m,
sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1;
%;%?%p7%t8;%;m,
use=ansi+sgr, use=ansi+sgrso, use=ansi+sgrul,
ansi+sgrdim|ANSI graphic renditions; assuming terminal has dim; not bold,
dim=\E[2m,
sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p5%t2;
%;%?%p7%t8;%;m,
use=ansi+sgr, use=ansi+sgrso, use=ansi+sgrul,
# ECMA-48 does not specify scroll-regions, but most people consider it to be
# "ANSI" because it is widely-supported. See ecma+index for the standard form.
ansi+csr|ANSI scroll-region plus cursor save & restore,
csr=\E[%i%p1%d;%p2%dr, rc=\E8, sc=\E7,
# The normal (ANSI) flavor of "media copy" building block asserts that
# characters sent to the printer do not echo on the screen. DEC terminals
# can also be put into autoprinter mode, where each line is sent to the
# printer as you move off that line, e.g., by a carriage return.
ansi+pp|ANSI printer port,
mc5i,
mc0=\E[i, mc4=\E[4i, mc5=\E[5i,
dec+pp|DEC autoprinter mode,
mc0=\E[i, mc4=\E[?4i, mc5=\E[?5i,
# The IBM PC alternate character set. Plug this into any Intel console entry.
# We use \E[11m for rmacs rather than \E[12m so the <acsc> string can use the
# ROM graphics for control characters such as the diamond, up- and down-arrow.
# This works with the System V, Linux, and BSDI consoles. It's a safe bet this
# will work with any Intel console, they all seem to have inherited \E[11m
# from the ANSI.SYS de-facto standard.
klone+acs|alternate character set for ansi.sys displays,
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j
\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v
\301w\302x\263y\363z\362{\343|\330}\234~\376,
rmacs=\E[10m, smacs=\E[11m,
# Highlight controls corresponding to the ANSI.SYS standard. Most
# console drivers for Intel boxes obey these. Makes the same assumption
# about \E[11m as klone+acs. True ANSI/ECMA-48 would have <rmso=\E[27m>,
# <rmul=\E[24m>, but this isn't a documented feature of ANSI.SYS.
klone+sgr|attribute control for ansi.sys displays,
blink=\E[5m, bold=\E[1m, rev=\E[7m, rmpch=\E[10m,
rmso=\E[m, rmul=\E[m,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6
%t;1%;%?%p9%t;11%;m,
sgr0=\E[0;10m, smpch=\E[11m, smso=\E[7m, smul=\E[4m,
use=klone+acs,
# Most Intel boxes do not treat "invis" (invisible) text.
klone+sgr8|attribute control for ansi.sys displays,
invis=\E[8m,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6
%t;1%;%?%p7%t;8%;%?%p9%t;11%;m,
use=klone+sgr,
# Highlight controls corresponding to the ANSI.SYS standard. *All*
# console drivers for Intel boxes obey these. Does not assume \E[11m will
# work; uses \E[12m instead, which is pretty bulletproof but loses you the ACS
# diamond and arrow characters under curses.
klone+sgr-dumb|attribute control for ansi.sys displays (no ESC [ 11 m),
blink=\E[5m, bold=\E[1m, invis=\E[8m, rev=\E[7m, rmso=\E[m,
rmul=\E[m,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6
%t;1%;%?%p7%t;8%;%?%p9%t;12%;m,
sgr0=\E[0;10m, smacs=\E[12m, smso=\E[7m, smul=\E[4m,
use=klone+acs,
# KOI8-R (RFC1489) acs (alternate character set)
# From: Qing Long <qinglong@Bolizm.ihep.su>, 24 Feb 1996.
klone+koi8acs|alternate character set for ansi.sys displays with KOI8 charset,
acsc=+\020\,\021-\036.^_0\215`\004a\237f\234g\232h\222i
\220j\205k\203l\202m\204n\212o\213p\216q\0r\217s\214t
\206u\207v\210w\211x\201y\230z\231{\267|\274}L~
\225,
rmacs=\E[10m, smacs=\E[11m,
# ANSI.SYS color control. The setab/setaf caps depend on the coincidence
# between SVr4/XPG4's color numbers and ANSI.SYS attributes. Here are longer
# but equivalent strings that don't rely on that coincidence:
# setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
# setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
# The DOS 5 manual asserts that these sequences meet the ISO 6429 standard.
# They match a subset of ECMA-48.
klone+color|color control for ansi.sys and ISO6429-compatible displays,
colors#8, ncv#3, pairs#64,
op=\E[37;40m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
# This is better than klone+color, it doesn't assume white-on-black as the
# default color pair, but many `ANSI' terminals don't grok the <op> cap.
ecma+color|color control for ECMA-48-compatible terminals,
AX,
colors#8, ncv#3, pairs#64,
op=\E[39;49m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
ecma+italics|ECMA-48 italics,
ritm=\E[23m, sitm=\E[3m,
# Attribute control for ECMA-48-compatible terminals
ecma+sgr|attribute capabilities for true ECMA-48 terminals,
rmso=\E[27m, rmul=\E[24m, use=klone+sgr8,
ecma+strikeout|ECMA-48 strikeout/crossed-out,
rmxx=\E[29m, smxx=\E[9m,
# ECMA-48 does not include the VT100 indexing and scroll-margins. It has its
# own variation.
ecma+index|ECMA-48 scroll up/down,
indn=\E[%p1%dS, rin=\E[%p1%dT,
# For comparison, here are all the capabilities implied by the Intel
# Binary Compatibility Standard (level 2) that fit within terminfo.
# For more detail on this rather pathetic standard, see the comments
# near the end of this file.
ibcs2|Intel Binary Compatibility Standard prescriptions,
cbt=\E[Z, clear=\Ec, cub=\E[%p1%dD, cub1=\E[1D,
cud=\E[%p1%dB, cud1=\E[1B, cuf=\E[%p1%dC, cuf1=\E[1C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[1A,
dch=\E[%p1%dP, dispc=\E=%p1%dg, ech=\E[%p1%dX,
hpa=\E[%i%p1%dG, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
il=\E[%p1%dL, rc=\E7, rmam=\E[?7l, sc=\E7, smam=\E[?7h,
tbc=\E[g, vpa=\E[%i%p1%dd, use=ecma+index,
#### ANSI/ECMA-48 terminals and terminal emulators
#
# See near the end of this file for details on ANSI conformance.
# Don't mess with these entries! Lots of other entries depend on them!
#
# This section lists entries in a least-capable to most-capable order.
# if you're in doubt about what `ANSI' matches yours, try them in that
# order and back off from the first that breaks.
# ansi-mr is for ANSI terminals with ONLY relative cursor addressing
# and more than one page of memory. It uses local motions instead of
# direct cursor addressing, and makes almost no assumptions. It does
# assume auto margins, no padding and/or xon/xoff, and a 24x80 screen.
ansi-mr|mem rel cup ansi,
am, xon,
cols#80, lines#24, use=vanilla, use=ansi+erase,
use=ansi+local1,
# ansi-mini is a bare minimum ANSI terminal. This should work on anything, but
# beware of screen size problems and memory relative cursor addressing.
ansi-mini|any ansi terminal with pessimistic assumptions,
am, xon,
cols#80, lines#24, use=vanilla, use=ansi+cup,
use=ansi+erase,
# ansi-mtabs adds relative addressing and minimal tab support
ansi-mtabs|any ansi terminal with pessimistic assumptions,
it#8,
ht=^I, use=ansi-mini, use=ansi+local1,
# ANSI X3.64 from emory!mlhhh (Hugh Hansard) via BRL
#
# The following is an entry for the full ANSI 3.64 (1977). It lacks
# padding, but most terminals using the standard are "fast" enough
# not to require any -- even at 9600 bps. If you encounter problems,
# try including the padding specifications.
#
# Note: the :as: and :ae: specifications are not implemented here, for
# the available termcap documentation does not make clear WHICH alternate
# character set to specify. ANSI 3.64 seems to make allowances for several.
# Please make the appropriate adjustments to fit your needs -- that is
# if you will be using alternate character sets.
#
# There are very few terminals running the full ANSI 3.64 standard,
# so I could only test this entry on one verified terminal (Visual 102).
# I would appreciate the results on other terminals sent to me.
#
# Please report comments, changes, and problems to:
#
# U.S. MAIL: Hugh Hansard
# Box: 22830
# Emory University
# Atlanta, GA. 30322.
#
# USENET {akgua,msdc,sb1,sb6,gatech}!emory!mlhhh.
#
# (Added vt100 <rc>,<sc> to quiet a tic warning --esr)
ansi77|ANSI 3.64 standard 1977 version,
OTbs, am, mir,
cols#80, it#8, lines#24,
bel=^G, clear=\E[;H\E[2J, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu1=\E[A, dch1=\E[P, dl1=\E[M$<5*/>, ed=\E[J, el=\E[K,
home=\E[H, ht=^I, il1=\E[L$<5*/>, ind=\ED, kbs=^H,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP,
kf2=\EOR, kf4=\EOS, khome=\E[H, nel=\r\ED, rc=\E8, ri=\EM,
rmir=\E[4l, rmso=\E[m, rmul=\E[m, sc=\E7, smir=\E[4h,
smso=\E[7m, smul=\E[4m,
# Procomm and some other ANSI emulations don't recognize all of the ANSI-
# standard capabilities. This entry deletes <cuu>, <cuf>, <cud>, <cub>, and
# <vpa>/<hpa> capabilities, forcing curses to use repetitions of <cuu1>,
# <cuf1>, <cud1> and <cub1>. Also deleted <ich> and <ich1>, as QModem up to
# 5.03 doesn't recognize these. Finally, we delete <rep> and <ri>, which seem
# to confuse many emulators. On the other hand, we can count on these programs
# doing <rmacs>/<smacs>/<sgr>. Older versions of this entry featured
# <invis=\E[9m>, but <invis=\E[8m> now seems to be more common under
# ANSI.SYS influence.
# From: Eric S. Raymond <esr@snark.thyrsus.com> Oct 30 1995
pcansi-m|pcansi-mono|ibm-pc terminal programs claiming to be ansi (mono mode),
OTbs, am, mir, msgr,
cols#80, it#8, lines#24,
bel=^G, cbt=\E[Z, clear=\E[H\E[J, cr=\r, cub1=\E[D,
cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I,
hts=\EH, il1=\E[L, ind=\n, kbs=^H, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, tbc=\E[3g,
use=klone+sgr-dumb,
pcansi-25-m|pcansi25m|ibm-pc terminal programs with 25 lines (mono mode),
lines#25, use=pcansi-m,
pcansi-33-m|pcansi33m|ibm-pc terminal programs with 33 lines (mono mode),
lines#33, use=pcansi-m,
pcansi-43-m|ansi43m|ibm-pc terminal programs with 43 lines (mono mode),
lines#43, use=pcansi-m,
# The color versions. All PC emulators do color...
pcansi|ibm-pc terminal programs claiming to be ansi,
use=klone+color, use=pcansi-m,
pcansi-25|pcansi25|ibm-pc terminal programs with 25 lines,
lines#25, use=pcansi,
pcansi-33|pcansi33|ibm-pc terminal programs with 33 lines,
lines#33, use=pcansi,
pcansi-43|pcansi43|ibm-pc terminal programs with 43 lines,
lines#43, use=pcansi,
# ansi-m -- full ANSI X3.64 with ANSI.SYS-compatible attributes, no color.
# If you want pound signs rather than dollars, replace `B' with `A'
# in the <s0ds>, <s1ds>, <s2ds>, and <s3ds> capabilities.
# From: Eric S. Raymond <esr@snark.thyrsus.com> Nov 6 1995
ansi-m|ansi-mono|ANSI X3.64-1979 terminal with ANSI.SYS compatible attributes,
mc5i,
cub=\E[%p1%dD, cud=\E[%p1%dB, cuf=\E[%p1%dC,
cuu=\E[%p1%dA, dch=\E[%p1%dP, dl=\E[%p1%dM,
ech=\E[%p1%dX, el1=\E[1K, hpa=\E[%i%p1%dG, ht=\E[I,
ich=\E[%p1%d@, il=\E[%p1%dL, kbs=^H, kcbt=\E[Z, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kich1=\E[L, mc4=\E[4i,
mc5=\E[5i, nel=\r\E[S, rep=%p1%c\E[%p2%{1}%-%db,
s0ds=\E(B, s1ds=\E)B, s2ds=\E*B, s3ds=\E+B, tbc=\E[3g,
vpa=\E[%i%p1%dd, use=ecma+index, use=pcansi-m,
ansi+enq|ncurses extension for ANSI ENQ,
u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?%[;0123456789]c,
u9=\E[c,
# ansi -- this terminfo expresses the largest subset of X3.64 that will fit in
# standard terminfo. Assumes ANSI.SYS-compatible attributes and color.
# From: Eric S. Raymond <esr@snark.thyrsus.com> Nov 6 1995
ansi|ansi/pc-term compatible with color,
use=ansi+enq, use=ecma+color, use=klone+sgr8, use=ansi-m,
# ansi-generic is a vanilla ANSI terminal. This is assumed to implement
# all the normal ANSI stuff with no extensions. It assumes
# insert/delete line/char is there, so it won't work with
# vt100 clones. It assumes video attributes for bold, blink,
# underline, and reverse, which won't matter much if the terminal
# can't do some of those. Padding is assumed to be zero, which
# shouldn't hurt since xon/xoff is assumed.
ansi-generic|ansiterm|generic ansi standard terminal,
am, xon,
cols#80, lines#24, use=vanilla, use=ansi+csr, use=ansi+cup,
use=ansi+rca, use=ansi+erase, use=ansi+tabs,
use=ansi+local, use=ansi+idc, use=ansi+idl, use=ansi+rep,
use=ansi+sgrbold, use=ansi+arrows,
#### DOS ANSI.SYS variants
#
# This completely describes the sequences specified in the DOS 2.1 ANSI.SYS
# documentation (except for the keyboard key reassignment feature, which
# doesn't fit the <pfkey> model well). The klone+acs sequences were valid
# though undocumented. The <pfkey> capability is untested but should work for
# keys F1-F10 (%p1 values outside this range will yield unpredictable results).
# From: Eric S. Raymond <esr@snark.thyrsus.com> Nov 7 1995
ansi.sys-old|ANSI.SYS under PC-DOS 2.1,
OTbs, am, mir, msgr, xon,
cols#80, lines#25,
clear=\E[2J, cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[k, home=\E[H,
is2=\E[m\E[?7h, kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K,
khome=^^, pfkey=\E[0;%p1%{58}%+%d;%p2"%s"p, rc=\E[u,
rmam=\E[?7l, sc=\E[s, smam=\E[?7h, u6=\E[%i%d;%dR,
u7=\E[6n, use=klone+color, use=klone+sgr8,
# Keypad: Home=\0G Up=\0H PrPag=\0I
# ka1,kh kcuu1 kpp,ka3
#
# Left=\0K 5=\0L Right=\0M
# kcub1 kb2 kcuf1
#
# End=\0O Down=\0P NxPag=\0Q
# kc1,kend kcud1 kc3,knp
#
# Ins=\0R Del=\0S
# kich1 kdch1
#
# On keyboard with 12 function keys,
# shifted f-keys: F13-F24
# control f-keys: F25-F36
# alt f-keys: F37-F48
# The shift/control/alt keys do not modify each other, but alt overrides both,
# and control overrides shift.
#
# <pfkey> capability for F1-F48 -TD
ansi.sys|ANSI.SYS 3.1 and later versions,
el=\E[K, ka1=\0G, ka3=\0I, kb2=\0L, kbs=^H, kc1=\0O, kc3=\0Q,
kcbt=\0^O, kcub1=\0K, kcud1=\0P, kcuf1=\0M, kcuu1=\0H,
kdch1=\0S, kend=\0O, kf1=\0;, kf10=\0D, kf11=\0\205,
kf12=\0\206, kf13=\0T, kf14=\0U, kf15=\0V, kf16=\0W,
kf17=\0X, kf18=\0Y, kf19=\0Z, kf2=\0<, kf20=\0[, kf21=\0\\,
kf22=\0], kf23=\0\207, kf24=\0\210, kf25=\0\^, kf26=\0_,
kf27=\0`, kf28=\0a, kf29=\0b, kf3=\0=, kf30=\0c, kf31=\0d,
kf32=\0e, kf33=\0f, kf34=\0g, kf35=\0\211, kf36=\0\212,
kf37=\0h, kf38=\0i, kf39=\0j, kf4=\0>, kf40=\0k, kf41=\0l,
kf42=\0m, kf43=\0n, kf44=\0o, kf45=\0p, kf46=\0q,
kf47=\0\213, kf48=\0\214, kf5=\0?, kf6=\0@, kf7=\0A, kf8=\0B,
kf9=\0C, khome=\0G, kich1=\0R, knp=\0Q, kpp=\0I,
pfkey=\E[0;%?%p1%{11}%<%t%'\:'%e%p1%{13}%<%t%'z'%e%p1%{23}%<
%t%'G'%e%p1%{25}%<%t%'p'%e%p1%'#'%<%t%'E'%e%p1%'%'%<%t
%'f'%e%p1%'/'%<%t%'C'%e%{92}%;%p1%+%d;%p2"%s"p,
use=ansi.sys-old,
#
# Define IBM PC keypad keys for vi as per MS-Kermit while using ANSI.SYS.
# This should only be used when the terminal emulator cannot redefine the keys.
# Since redefining keys with ansi.sys also affects PC-DOS programs, the key
# definitions must be restored. If the terminal emulator is quit while in vi
# or others using <smkx>/<rmkx>, the keypad will not be defined as per PC-DOS.
# The PgUp and PgDn are prefixed with ESC so that tn3270 can be used on Unix
# (^U and ^D are already defined for tn3270). The ESC is safe for vi but it
# does "beep". ESC ESC i is used for Ins to avoid tn3270 ESC i for coltab.
# Note that <kcub1> is always BS, because PC-dos can tolerate this change.
# Caution: vi is limited to 256 string bytes, longer crashes or weirds out vi.
# Consequently the End keypad key could not be set (it is relatively safe and
# actually useful because it sends ^@ O, which beeps and opens a line above).
ansi.sysk|ansisysk|PC-DOS 3.1 ANSI.SYS with keypad redefined for vi,
is2=U2\sPC-DOS\s3.1\sANSI.SYS\swith\skeypad\sredefined\sfor
\svi\s9-29-86\n\E[;75;8p,
rmkx=\E[;71;0;71p\E[;72;0;72p\E[;73;0;73p\E[;77;0;77p\E[;80;
0;80p\E[;81;0;81p\E[;82;0;82p\E[;83;0;83p,
smkx=\E[;71;30p\E[;72;11p\E[;73;27;21p\E[;77;12p\E[;80;10p
\E[;81;27;4p\E[;82;27;27;105p\E[;83;127p,
use=ansi.sys,
#
# Adds ins/del line/character, hence vi reverse scrolls/inserts/deletes nicer.
nansi.sys|nansisys|PC-DOS Public Domain NANSI.SYS,
dch1=\E[1P, dl1=\E[1M, ich1=\E[1@, il1=\E[1L,
is2=U3 PC-DOS Public Domain NANSI.SYS 9-23-86\n,
use=ansi.sys,
#
# See ansi.sysk and nansi.sys above.
nansi.sysk|nansisysk|PC-DOS Public Domain NANSI.SYS with keypad redefined for vi,
dch1=\E[1P, dl1=\E[1M, ich1=\E[1@, il1=\E[1L,
is2=U4\sPC-DOS\sPublic\sDomain\sNANSI.SYS\swith\skeypad
\sredefined\sfor\svi\s9-29-86\n\E[;75;8p,
use=ansi.sysk,
#### Atari ST terminals
# From Guido Flohr <gufl0000@stud.uni-sb.de>.
#
tw52|tw52-color|Toswin window manager with color,
bce,
colors#16, pairs#0x100,
oc=\Eb?\Ec0, op=\Eb?\Ec0,
setab=\Ec%?%p1%{0}%=%t?%e%p1%{7}%=%t0%e%p1%{15}%=%t7%e%p1
%{48}%+%c,
setaf=\Eb%?%p1%{0}%=%t?%e%p1%{7}%=%t0%e%p1%{15}%=%t7%e%p1
%{48}%+%c,
setb=\Ec%?%p1%{0}%=%t?%e%p1%{7}%=%t0%e%p1%{15}%=%t7%e%p1
%{48}%+%c,
setf=\Eb%?%p1%{0}%=%t?%e%p1%{7}%=%t0%e%p1%{15}%=%t7%e%p1
%{48}%+%c,
use=tw52-m,
tw52-m|Toswin window manager monochrome,
ul,
ma#999,
bold=\Eya, dch1=\Ea, dim=\EyB,
is2=\Ev\Eq\Ez_\Ee\Ei\Eb?\Ec0, rev=\EyP, rmso=\EzQ,
rmul=\EzH, rs2=\Ev\Eq\Ez_\Ee\Ei\Eb?\Ec0, sgr0=\Ez_,
smso=\EyQ, smul=\EyH, use=at-m,
tt52|Atari TT medium and high resolution,
lines#30, use=at-color,
st52-color|at-color|atari-color|atari_st-color|Atari ST with color,
bce,
colors#16, pairs#0x100,
is2=\Ev\Eq\Ee\Eb1\Ec0, rs2=\Ev\Eq\Ee\Eb1\Ec0,
setab=\Ec%?%p1%{0}%=%t1%e%p1%{1}%=%t2%e%p1%{2}%=%t3%e%p1%{3}
%=%t>%e%p1%{4}%=%t4%e%p1%{5}%=%t7%e%p1%{6}%=%t5%e%p1
%{7}%=%t0%e%p1%{8}%=%t8%e%p1%{9}%=%t9%e%p1%{10}%=%t\:
%e%p1%{11}%=%t;%e%p1%{12}%=%t<%e%p1%{13}%=%t=%e%p1
%{14}%=%t6%e?,
setaf=\Eb%?%p1%{0}%=%t1%e%p1%{1}%=%t2%e%p1%{2}%=%t3%e%p1%{3}
%=%t>%e%p1%{4}%=%t4%e%p1%{5}%=%t7%e%p1%{6}%=%t5%e%p1
%{7}%=%t0%e%p1%{8}%=%t8%e%p1%{9}%=%t9%e%p1%{10}%=%t\:
%e%p1%{11}%=%t;%e%p1%{12}%=%t<%e%p1%{13}%=%t=%e%p1
%{14}%=%t6%e?,
setb=\Ec%?%p1%{0}%=%t1%e%p1%{1}%=%t2%e%p1%{2}%=%t3%e%p1%{3}
%=%t>%e%p1%{4}%=%t4%e%p1%{5}%=%t7%e%p1%{6}%=%t5%e%p1
%{7}%=%t0%e%p1%{8}%=%t8%e%p1%{9}%=%t9%e%p1%{10}%=%t\:%e
%p1%{11}%=%t;%e%p1%{12}%=%t<%e%p1%{13}%=%t=%e%p1%{14}%=
%t6%e?,
setf=\Eb%?%p1%{0}%=%t1%e%p1%{1}%=%t2%e%p1%{2}%=%t3%e%p1%{3}
%=%t>%e%p1%{4}%=%t4%e%p1%{5}%=%t7%e%p1%{6}%=%t5%e%p1
%{7}%=%t0%e%p1%{8}%=%t8%e%p1%{9}%=%t9%e%p1%{10}%=%t\:%e
%p1%{11}%=%t;%e%p1%{12}%=%t<%e%p1%{13}%=%t=%e%p1%{14}%=
%t6%e?,
use=st52,
st52|st52-m|at|at-m|atari|atari-m|atari_st|atarist-m|Atari ST,
am, eo, mir, npc,
cols#80, it#8, lines#24,
bel=^G, civis=\Ef, clear=\EE, cnorm=\Ee, cr=\r, cub1=\ED,
cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c,
cuu1=\EA, dl1=\EM, ed=\EJ, el=\EK, el1=\Eo, home=\EH, ht=^I,
il1=\EL, ind=\n, is2=\Ev\Eq\Ee, kLFT=\Ed, kRIT=\Ec, kbs=^H,
kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=^?,
kf1=\EP, kf10=\EY, kf11=\Ep, kf12=\Eq, kf13=\Er, kf14=\Es,
kf15=\Et, kf16=\Eu, kf17=\Ev, kf18=\Ew, kf19=\Ex, kf2=\EQ,
kf20=\Ey, kf3=\ER, kf4=\ES, kf5=\ET, kf6=\EU, kf7=\EV, kf8=\EW,
kf9=\EX, khlp=\EH, khome=\EE, kich1=\EI, knp=\Eb, kpp=\Ea,
kund=\EK, nel=\r\n, rc=\Ek, rev=\Ep, ri=\EI, rmso=\Eq,
rs2=\Ev\Eq\Ee, sc=\Ej, sgr0=\Eq, smso=\Ep,
tw100|toswin vt100 window mgr,
eo, mir, msgr, xon,
colors#8, cols#80, it#8, lines#24, pairs#64, vt#3,
acsc=++\,\,--..00II``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxy
yzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, civis=\Ef,
clear=\E[2J\E[H, cnorm=\Ee, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\EB,
cuf=\E[%p1%dC, cuf1=\EC, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\EA, dch1=\Ea, dim=\E[2m, dl=\E[%p1%dM,
dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I,
hts=\EH, ich=\E[%p1%d@, il1=\EL, ind=\n, is2=\E<\E)0, kbs=^H,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=^?,
kf1=\EOP, kf10=\EOY, kf11=\Ep, kf12=\Eq, kf13=\Er, kf14=\Es,
kf15=\Et, kf16=\Eu, kf17=\Ev, kf18=\Ew, kf19=\Ex, kf2=\EOQ,
kf20=\Ey, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV,
kf8=\EOW, kf9=\EOX, khlp=\EH, khome=\E\EE, kich1=\EI,
knp=\Eb, kpp=\E\Ea, kund=\EK, ll=\E[24H, nel=\EE,
oc=\E[30;47m, op=\E[30;47m, rc=\E8, rev=\E[7m, ri=\EM,
rmacs=^O, rmcup=\E[?7h, rmir=\Ei, rmkx=\E[?1l\E>,
rmso=\E[m, rmul=\E[m,
rs1=\E<\E[20l\E[?3;6;9l\E[r\Eq\E(B\017\E)0\E>,
sc=\E7,
setb=\E[4%p1%'0'%+%Pa%?%ga%'0'%=%t0%e%ga%'1'%=%t4%e%ga%'2'%=
%t2%e%ga%'3'%=%t6%e%ga%'4'%=%t1%e%ga%'5'%=%t5%e%ga%'6'
%=%t3%e7%;m,
setf=\E[3%p1%'0'%+%Pa%?%ga%'0'%=%t0%e%ga%'1'%=%t4%e%ga%'2'%=
%t2%e%ga%'3'%=%t6%e%ga%'4'%=%t1%e%ga%'5'%=%t5%e%ga%'6'
%=%t3%e7%;m,
sgr0=\E[m, smacs=^N, smcup=\E[?7l, smir=\Eh,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
# The entries for stv52 and stv52pc probably need a revision.
stv52|MiNT virtual console,
am, msgr,
cols#80, it#8, lines#30,
bel=^G, blink=\Er, bold=\EyA, civis=\Ef, clear=\EE,
cnorm=\E. \Ee, cr=\r, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\E.",
dim=\Em, dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I, il1=\EL,
ind=\n$<2*/>, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kdch1=^?, kf1=\EP, kf10=\EY, kf11=\Ep, kf12=\Eq,
kf13=\Er, kf14=\Es, kf15=\Et, kf16=\Eu, kf17=\Ev, kf18=\Ew,
kf19=\Ex, kf2=\EQ, kf20=\Ey, kf3=\ER, kf4=\ES, kf5=\ET,
kf6=\EU, kf7=\EV, kf8=\EW, kf9=\EX, khlp=\EH, khome=\EE,
kich1=\EI, knp=\Eb, kpp=\Ea, kund=\EK, nel=\r\n$<2*/>,
op=\Eb@\EcO, rev=\Ep, ri=\EI$<2*/>, rmcup=\Ev\E. \Ee\Ez_,
rmso=\Eq, rmul=\EzH, rs1=\Ez_\Eb@\EcA, sgr0=\Ez_,
smcup=\Ev\Ee\Ez_, smso=\Ep, smul=\EyH,
stv52pc|MiNT virtual console with PC charset,
am, msgr,
cols#80, it#8, lines#30,
acsc=+\257\,\256-\^.v0\333I\374`\177a\260f\370g\361h\261j
\331k\277l\332m\300n\305o\377p-q\304r-s_t+u+v+w+x\263y
\363z\362{\343|\366}\234~\371,
bel=^G, blink=\Er, bold=\EyA, civis=\Ef, clear=\EE,
cnorm=\E. \Ee, cr=\r, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\E.",
dim=\Em, dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I, il1=\EL,
ind=\n$<2*/>, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kdch1=^?, kf1=\EP, kf10=\EY, kf11=\Ep, kf12=\Eq,
kf13=\Er, kf14=\Es, kf15=\Et, kf16=\Eu, kf17=\Ev, kf18=\Ew,
kf19=\Ex, kf2=\EQ, kf20=\Ey, kf3=\ER, kf4=\ES, kf5=\ET,
kf6=\EU, kf7=\EV, kf8=\EW, kf9=\EX, khlp=\EH, khome=\EE,
kich1=\EI, knp=\Eb, kpp=\Ea, kund=\EK, nel=\r\n$<2*/>,
rev=\Ep, ri=\EI$<2*/>, rmcup=\Ev\E. \Ee\Ez_, rmso=\Eq,
rmul=\EzH, rs1=\Ez_\Eb@\EcA, sgr0=\Ez_, smcup=\Ev\Ee\Ez_,
smso=\Ep, smul=\EyH,
# From: Simson L. Garfinkel <simsong@media-lab.mit.edu>
atari-old|atari st,
OTbs, am,
cols#80, it#8, lines#25,
clear=\EH\EJ, cub1=\ED, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dl1=\EM,
ed=\EJ, el=\EK, ht=^I, il1=\EL, kcub1=\ED, kcud1=\EB,
kcuf1=\EC, kcuu1=\EA, ri=\EI, rmso=\Eq, sgr0=\Eq, smso=\Ep,
# UniTerm terminal program for the Atari ST: 49-line VT220 emulation mode
# From: Paul M. Aoki <aoki@ucbvax.berkeley.edu>
uniterm|uniterm49|UniTerm VT220 emulator with 49 lines,
lines#49,
- is2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;49r\E[49;1H, use=vt220,
+ is2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;49r\E[49;1H, use=vt220-base,
# MiNT VT52 emulation. 80 columns, 25 rows.
# MiNT is Now TOS, the operating system which comes with all Ataris now
# (mainly Atari Falcon). This termcap is for the VT52 emulation you get
# under tcsh/zsh/bash/sh/ksh/ash/csh when you run MiNT in `console' mode
# From: Per Persson <pp@gnu.ai.mit.edu>, 27 Feb 1996
st52-old|Atari ST with VT52 emulation,
am, km,
cols#80, lines#25,
bel=^G, civis=\Ef, clear=\EH\EJ, cnorm=\Ee, cr=\r, cub1=\ED,
cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c,
cuu1=\EA, dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I, il1=\EL,
ind=\n, ka1=\E#7, ka3=\E#5, kb2=\E#9, kbs=^H, kc1=\E#1,
kc3=\E#3, kclr=\E#7, kcub1=\E#K, kcud1=\E#P, kcuf1=\E#M,
kcuu1=\E#H, kf0=\E#D, kf1=\E#;, kf2=\E#<, kf3=\E#=, kf4=\E#>,
kf5=\E#?, kf6=\E#@, kf7=\E#A, kf8=\E#B, kf9=\E#C, khome=\E#G,
kil1=\E#R, kind=\E#2, kri=\E#8, lf0=f10, nel=\r\n, rc=\Ek,
ri=\EI, rmcup=, rmso=\Eq, rs1=\Ez_\Eb@\EcA, sc=\Ej, sgr0=\Eq,
smcup=\Ee, smso=\Ep,
#### BeOS
#
# BeOS entry for Terminal program Seems to be almost ANSI
beterm|BeOS Terminal,
am, eo, mir, msgr, xenl, xon,
colors#8, cols#80, it#8, lines#25, ncv#5, pairs#64,
bel=^G, bold=\E[1m, clear=\E[H\E[J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H,
hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
il=\E[%p1%dL, il1=\E[L, ind=\n, kbs=^H, kcub1=\E[D,
- kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~,
- kend=\E[4~, kf1=\E[11~, kf10=\E[20~, kf11=\E[21~,
- kf12=\E[22~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~,
- kf5=\E[15~, kf6=\E[16~, kf7=\E[17~, kf8=\E[18~, kf9=\E[19~,
- khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kspd=^Z,
- nel=\r\n, op=\E[m, rc=\E8, rev=\E[7m, ri=\EM, rmir=\E[4l,
- rmkx=\E[?4l, rmso=\E[m, rmul=\E[24m, rs1=\Ec, sc=\E7,
- setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
- setb=\E[%p1%{40}%+%cm, setf=\E[%p1%{30}%+%cm,
- sgr0=\E[0;10m, smir=\E[4h, smkx=\E[?4h, smso=\E[7m,
- smul=\E[4m, u6=\E[%i%p1%d;%p2%dR, u7=\E[6n,
- vpa=\E[%i%p1%dd,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E[11~,
+ kf10=\E[20~, kf11=\E[21~, kf12=\E[22~, kf2=\E[12~,
+ kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[16~, kf7=\E[17~,
+ kf8=\E[18~, kf9=\E[19~, kspd=^Z, nel=\r\n, op=\E[m, rc=\E8,
+ rev=\E[7m, ri=\EM, rmir=\E[4l, rmkx=\E[?4l, rmso=\E[m,
+ rmul=\E[24m, rs1=\Ec, sc=\E7, setab=\E[4%p1%dm,
+ setaf=\E[3%p1%dm, setb=\E[%p1%{40}%+%cm,
+ setf=\E[%p1%{30}%+%cm, sgr0=\E[0;10m, smir=\E[4h,
+ smkx=\E[?4h, smso=\E[7m, smul=\E[4m,
+ u6=\E[%i%p1%d;%p2%dR, u7=\E[6n, vpa=\E[%i%p1%dd,
+ use=vt220+pcedit,
#### Linux consoles
#
# This entry is good for the 1.2.13 or later version of the Linux console.
#
# ***************************************************************************
# * *
# * WARNING: *
# * Linuxes come with a default keyboard mapping kcbt=^I. This entry, in *
# * response to user requests, assumes kcbt=\E[Z, the ANSI/ECMA reverse-tab *
# * character. Here are the keymap replacement lines that will set this up: *
# * *
# keycode 15 = Tab Tab
# alt keycode 15 = Meta_Tab
# shift keycode 15 = F26
# string F26 ="\033[Z"
# * *
# * This has to use a key slot which is unfortunate (any unused one will *
# * do, F26 is the higher-numbered one). The change ought to be built *
# * into the kernel tables. *
# * *
# ***************************************************************************
#
# All linux kernels since 1.2.13 (at least) set the screen size
# themselves; this entry assumes that capability.
#
linux-basic|linux console,
am, bce, eo, mir, msgr, xenl, xon,
it#8, ncv#18, U8#1,
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i
\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u
\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
bel=^G, clear=\E[H\E[J, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J,
el=\E[K, el1=\E[1K, flash=\E[?5h$<200/>\E[?5l, home=\E[H,
hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
il=\E[%p1%dL, il1=\E[L, ind=\n, kb2=\E[G, kbs=^?, kcbt=\E[Z,
- kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
- kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
- kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
- kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D,
- kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
- kspd=^Z, nel=\r\n, rc=\E8, rev=\E[7m, ri=\EM, rmam=\E[?7l,
- rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec\E]R, sc=\E7,
+ kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E[[A,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\E[[B,
+ kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~,
+ kf8=\E[19~, kf9=\E[20~, kmous=\E[M, kspd=^Z, nel=\r\n,
+ rc=\E8, rev=\E[7m, ri=\EM, rmam=\E[?7l, rmir=\E[4l,
+ rmso=\E[27m, rmul=\E[24m, rs1=\Ec\E]R, sc=\E7,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5
%t;2%;%?%p6%t;1%;%?%p9%t;11%;m,
smam=\E[?7h, smir=\E[4h, smul=\E[4m, tbc=\E[3g,
- vpa=\E[%i%p1%dd, use=vt102+enq, use=klone+sgr,
- use=ecma+color,
+ vpa=\E[%i%p1%dd, use=vt220+pcedit, use=vt102+enq,
+ use=klone+sgr, use=ecma+color, use=linux+sfkeys,
+
+linux+decid|ncurses extension for Linux console DECID,
+ u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?6c, u9=\EZ,
+
+linux+sfkeys|shifted function-keys for Linux console,
+ kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
+ kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf20=\E[34~,
linux-m|Linux console no color,
colors@, pairs@,
setab@, setaf@, setb@, setf@, use=linux,
# The 1.3.x kernels add color-change capabilities; if yours doesn't have this
# and it matters, turn off <ccc>. The %02x escape used to implement this is
# not supposedly back-portable to older SV curses (although it has worked fine
# on Solaris for several years) and not supported in ncurses versions before
# 1.9.9.
linux-c-nc|linux console with color-change,
ccc,
initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/
%02x%p4%{255}%*%{1000}%/%02x,
oc=\E]R, use=linux-basic,
# From: Dennis Henriksen <opus@osrl.dk>, 9 July 1996
linux-c|linux console 1.3.6+ for older ncurses,
ccc,
initc=\E]P%?%p1%{9}%>%t%p1%{10}%-%'a'%+%c%e%p1%d%;%p2%{255}
%*%{1000}%/%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'a'
%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'a'
%+%c%e%gx%d%;%p3%{255}%*%{1000}%/%Pr%gr%{16}%/%Px%?%gx
%{9}%>%t%gx%{10}%-%'a'%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx
%{9}%>%t%gx%{10}%-%'a'%+%c%e%gx%d%;%p4%{255}%*%{1000}
%/%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'a'%+%c%e%gx
%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'a'%+%c%e%gx
%d%;,
oc=\E]R, use=linux-basic,
# The 2.2.x kernels add a private mode that sets the cursor type; use that to
# get a block cursor for cvvis.
# reported by Frank Heckenbach <frank@g-n-u.de>.
linux2.2|linux 2.2.x console,
civis=\E[?25l\E[?1c, cnorm=\E[?25h\E[?0c,
cvvis=\E[?25h\E[?8c, use=linux-c-nc,
# Linux 2.6.x has a fix for SI/SO to work with UTF-8 encoding added here:
# http://lkml.iu.edu/hypermail/linux/kernel/0602.2/0738.html
# Although the kernel has mappings for these, they were not in the default
# font (tested with Debian and Fedora):
# '`' diamond
# '~' scan line 1
# 'p' scan line 3
# 'r' scan line 7
# '_' scan line 9
+#
+# The fix for SI/SO is part of a configurable (i.e., "optional") kernel feature
+# misleadingly called CONFIG_CONSOLE_TRANSLATIONS. Disabling that not only
+# omits the line-drawing using SI/SO, but also part/all of the Unicode feature:
+#
+# https://cateee.net/lkddb/web-lkddb/CONSOLE_TRANSLATIONS.html
+# "This enables support for font mapping and Unicode translation on virtual consoles."
+#
+# This mailing list thread in July 2008 illustrates:
+#
+# https://marc.info/?t=121734656700005&r=1&w=4
+# "commit a29ccf6f823a84d89e1c7aaaf221cf7282022024 break console on slackware 12.1"
+#
+# The change which made it configurable was to reduce the size for use in
+# embedded systems. Some background is found in
+#
+# https://lwn.net/Articles/284767/
+# "An interview with the new embedded maintainers"
linux2.6|linux 2.6.x console,
- acsc=++\,\,--..00__``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwx
- xyyzz{{||}c~~,
+ acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxy
+ yzz{{||}}~~,
enacs=\E)0, rmacs=^O,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5
%t;2%;%?%p6%t;1%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, use=linux2.2,
# The 3.0 kernel adds support for clearing scrollback buffer (capability E3).
# It is the same as xterm's erase-saved-lines feature.
linux3.0|linux 3.0 kernels,
E3=\E[3J, use=linux2.6,
# This is Linux console for ncurses.
linux|linux console,
use=linux3.0,
# Subject: linux 2.6.26 vt back_color_erase
# Changes to the Linux console driver broke bce model as reported in
# https://bugzilla.novell.com/show_bug.cgi?id=418613
# apparently from
# http://lkml.org/lkml/2008/4/26/305
# http://lkml.org/lkml/2008/10/3/66
linux2.6.26|linux console w/o bce,
bce@, use=linux2.6,
# See the note on ICH/ICH1 VERSUS RMIR/SMIR near the end of file
linux-nic|linux with ich/ich1 suppressed for non-curses programs,
ich@, ich1@, use=linux,
# This assumes you have used setfont(8) to load one of the Linux koi8-r fonts.
# acsc entry from Pavel Roskin" <pavel@absolute.spb.su>, 29 Sep 1997.
linux-koi8|linux with koi8 alternate character set,
acsc=+\020\,\021-\030.^Y0\215`\004a\221f\234g\237h\220i
\276j\205k\203l\202m\204n\212o~p\0q\0r\0s_t\206u\207v
\211w\210x\201y\230z\231{\267|\274~\224,
use=linux, use=klone+koi8acs,
# Another entry for KOI8-r with Qing Long's acsc.
# (which one better complies with the standard?)
linux-koi8r|linux with koi8-r alternate character set,
use=linux, use=klone+koi8acs,
# Entry for the latin1 and latin2 fonts
linux-lat|linux with latin1 or latin2 alternate character set,
acsc=+\020\,\021-\030.^Y0\333`\004a\013f\370g\361h\260i
\316j\211k\214l\206m\203n\305o~p\304q\212r\304s_t\207u
\215v\301w\302x\205y\363z\362{\343|\330}\234~\376,
use=linux,
# This uses graphics from VT codeset instead of from cp437.
# reason: cp437 (aka "straight to font") is not functional under luit.
# from: Andrey V Lukyanov <land@long.yar.ru>.
linux-vt|linux console using VT codes for graphics,
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxy
yzz~~,
rmacs=\E(K, rmpch@, sgr@, sgr0=\E[0m\E(K\017, smacs=\E(0,
smpch@, use=linux,
# This is based on the Linux console (relies on the console to perform some
# of the functionality), but does not recognize as many control sequences.
# The program comes bundled with an old (circa 1998) copy of the Linux
# console terminfo. It recognizes some non-ANSI/VT100 sequences such as
# \E* move cursor to home, as as \E[H
# \E,X same as \E(X
# \EE move cursor to beginning of row
# \E[y,xf same as \E[y,xH
#
# Note: The status-line support is buggy (dsl does not work).
kon|kon2|jfbterm|Kanji ON Linux console,
ccc@, hs,
civis@, cnorm@, cvvis@, dsl=\E[?H, flash@, fsl=\E[?F, initc@,
initp@, kcbt@, oc@, op=\E[37;40m, rs1=\Ec, tsl=\E[?T,
use=linux,
# FbTerm
# Another variant. There are two parts (src, src/lib) with the latter
# comprising the escape-sequence parsing. The copyright notice on that
# says it is based on GTerm by Timothy Miller.
#
# The original developer "dragchan" has left, but as of March 2017 there is
# (still dead) code from May 2015 here:
# https://github.com/izmntuk/fbterm
#
# The acsc string may be incorrect.
#
# Not used here, the program recognizes escapes for italic, underline and
# dim, rendering those as green, cyan and gray respectively.
fbterm|FbTerm for Linux with framebuffer,
colors#0x100, pairs#0x10000,
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i
\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u
\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
initc=\E[3;%p1%d;%p2%d;%p3%d;%p4%d}, rmacs=\E[10m,
setab=\E[2;%p1%d}, setaf=\E[1;%p1%d},
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5
%t;2%;%?%p6%t;1%;%?%p9%t;11%;m,
sgr0=\E[0;10m, smacs=\E[11m, use=linux,
# 16-color linux console entry; this works with a 256-character
# console font but bright background colors turn into dim ones when
# you use a 512-character console font. This uses bold for bright
# foreground colors and blink for bright background colors.
#
# Interestingly, the original version of this entry in 2009 used a documented
# (but nonstandard) SGR 21, which was supported in the Linux console since 1992
# as an equivalent for SGR 22. Long after (early 2018), someone modified the
# console driver to make it ignore SGR 21 because the ECMA-48 standard
-# suggested a different use for that particular code.
+# suggested a different use for that particular code:
+#
+# https://github.com/torvalds/linux/commit/65d9982d7e523a1a8e7c9af012da0d166f72fc56#diff-7da3c215d12c9f6b88e1a37d38b116f0
+#
+# Two years later, someone (unfamiliar with ECMA-48 this time) documented it:
+#
+# https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/commit/man4/console_codes.4?id=a133a6bc03d751a424fe0a4adea2198757599615
+#
+# For background, refer to the report on bug-ncurses:
+#
+# https://lists.gnu.org/archive/html/bug-ncurses/2019-10/msg00059.html
linux-16color|linux console with 16 colors,
colors#16, ncv#42, pairs#0x100,
setab=\E[4%p1%{8}%m%d%?%p1%{7}%>%t;5%e;25%;m,
setaf=\E[3%p1%{8}%m%d%?%p1%{7}%>%t;1%e;22%;m,
use=linux,
# bterm (bogl 0.1.18)
# Implementation is in bogl-term.c
# Key capabilities from linux terminfo entry
#
# Notes:
# bterm only supports acs using wide-characters, has case for these: qjxamlkut
# bterm does not support sgr, since it only processes one parameter -TD
bterm|bogl virtual terminal,
am, bce,
colors#8, cols#80, lines#24, pairs#64,
- acsc=aajjkkllmmqqttuuxx, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?25h, cr=\r, cub1=^H, cud1=\n,
- cup=\E[%i%p1%d;%p2%dH, ed=\E[J, el=\E[K, home=\E[H, ind=\n,
- kb2=\E[G, kbs=^?, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B,
- kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A,
+ acsc=aajjkkllmmqqttuuxx, bold=\E[1m, clear=\E[H\E[2J,
+ cr=\r, cub1=^H, cud1=\n, cup=\E[%i%p1%d;%p2%dH, ed=\E[J,
+ el=\E[K, home=\E[H, ind=\n, kb2=\E[G, kbs=^?, kcbt=\E[Z,
+ kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E[[A,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
kf18=\E[32~, kf19=\E[33~, kf2=\E[[B, kf20=\E[34~,
kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~,
- kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~,
- kmous=\E[M, knp=\E[6~, kpp=\E[5~, kspd=^Z, nel=\r\n,
+ kf8=\E[19~, kf9=\E[20~, kmous=\E[M, kspd=^Z, nel=\r\n,
op=\E[49m\E[39m, rev=\E[7m, ri=\EM, rmacs=^O, rmso=\E[27m,
rmul=\E[24m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr0=\E[0m, smacs=^N, smso=\E[7m, smul=\E[4m,
+ use=vt220+pcedit, use=vt220+cvis,
#### Mach
#
# From: Matthew Vernon <mcv21@pick.sel.cam.ac.uk>
mach|Mach Console,
am, km,
cols#80, it#8, lines#25,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\Ec, cr=\r,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, home=\E[H, ht=^I, il=\E[%p1%dL, il1=\E[L, ind=\n,
kbs=^?, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=\E[9, kend=\E[Y, kf1=\EOP, kf10=\EOY, kf2=\EOQ,
kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW,
kf9=\EOX, khome=\E[H, kich1=\E[@, kll=\E[F, knp=\E[U,
kpp=\E[V, rev=\E[7m, rmso=\E[0m, rmul=\E[24m, sgr0=\E[0m,
smso=\E[7m, smul=\E[4m,
mach-bold|Mach Console with bold instead of underline,
rmul=\E[0m, smul=\E[1m, use=mach,
mach-color|Mach Console with ANSI color,
colors#8, pairs#64,
dim=\E[2m, invis=\E[8m, op=\E[37;40m, rmso=\E[27m,
setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=mach,
# From: Samuel Thibault
# Source: git://git.sv.gnu.org/hurd/gnumach.git
# Files: i386/i386at/kd.c
#
# Added nel, hpa, sgr and removed rmacs, smacs based on source -TD
mach-gnu|GNU Mach,
acsc=+>\,<-\^.v0\333`+a\261f\370g\361h\260i#j\331k\277l
\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x
\263y\363z\362{\343|\330}\234~\376,
dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, ech=\E[%p1%dX,
el1=\E[1K, hpa=\E[%i%p1%dG, ich=\E[%p1%d@, ich1=\E[@,
invis=\E[8m, nel=\EE,
sgr=\E[0%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;
2%;%?%p6%t;1%;%?%p7%t;8%;m,
use=ecma+index, use=mach,
mach-gnu-color|Mach Console with ANSI color,
colors#8, pairs#64,
op=\E[37;40m, rmso=\E[27m, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm, use=mach-gnu,
# From: Marcus Brinkmann
-# http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/hurd/hurd/console/
+# http://git.savannah.gnu.org/cgit/hurd/hurd.git/log/console/
#
# Comments in the original are summarized here:
#
# hurd uses 8-bit characters (km).
#
# Although it doesn't do XON/XOFF, we don't want padding characters (xon).
#
# Regarding compatibility to vt100: hurd doesn't specify <xenl>, as we don't
# have the eat_newline_glitch. It doesn't support setting or removing tab
# stops (hts/tbc).
#
# hurd uses ^H instead of \E[D for cub1, as only ^H implements <bw> and it is
# one byte instead three.
#
# <ich1> is not included because hurd has insert mode.
#
# hurd doesn't use ^J for scrolling, because this could put things into the
# scrollback buffer.
#
# gsbom/grbom are used to enable/disable real bold (not intensity bright) mode.
# This is a GNU extension.
#
# The original has commented-out ncv, but is restored here.
#
# Reading the source, RIS resets cnorm, but not xmous.
hurd|The GNU Hurd console server,
am, bce, bw, eo, km, mir, msgr, xenl, xon,
colors#8, it#8, ncv#18, pairs#64,
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxy
yzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\Ec, cnorm=\E[?25h, cr=\r, csr=\E[%i%p1%d;%p2%dr,
- cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B,
- cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
- cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[34l, dch=\E[%p1%dP,
- dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M,
- ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, flash=\Eg,
- home=\E[H, hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@,
- il=\E[%p1%dL, il1=\E[L, ind=\E[S, invis=\E[8m, kb2=\E[G,
- kbs=^?, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,
- kcuu1=\EOA, kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\Ec, cr=\r,
+ csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
+ cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
+ cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
+ cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
+ dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
+ el1=\E[1K, flash=\Eg, home=\E[H, hpa=\E[%i%p1%dG, ht=^I,
+ ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\E[S,
+ invis=\E[8m, kb2=\E[G, kbs=^?, kcbt=\E[Z, kcub1=\EOD,
+ kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf10=\E[21~,
kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS,
kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
- kspd=^Z, nel=\r\n, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\E[T,
- rmacs=\E[10m, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m,
- rs1=\EM\E[?1000l, sc=\E7, setab=\E[4%p1%dm,
- setaf=\E[3%p1%dm,
+ kich1=\E[2~, kmous=\E[M, kspd=^Z, nel=\r\n, op=\E[39;49m,
+ rc=\E8, rev=\E[7m, ri=\E[T, rmacs=\E[10m, rmir=\E[4l,
+ rmso=\E[27m, rmul=\E[24m, rs1=\EM\E[?1000l, sc=\E7,
+ setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr=\E[0%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;
2%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m,
sgr0=\E[0m, smacs=\E[11m, smir=\E[4h, smso=\E[7m,
smul=\E[4m, vpa=\E[%i%p1%dd, grbom=\E[>1l, gsbom=\E[>1h,
- use=ecma+index, use=ecma+italics,
+ use=vt220+pcedit, use=ecma+index, use=ecma+italics,
+ use=vt220+cvis,
#### QNX
#
# QNX 4.0 Console
# Michael's original version of this entry had <am@>, <smcup=\Ei>,
# <rmcup=\Eh\ER>; this was so terminfo applications could write the lower
# right corner without triggering a scroll. The ncurses terminfo library can
# handle this case with the <ich1> capability, and prefers <am> for better
# optimization. Bug: The <op> capability resets attributes.
# From: Michael Hunter <mphunter@qnx.com> 30 Jul 1996
# (removed: <sgr=%?%p1%t\E<%;%p2%t\E[%;%p3%t\E(%;%p4%t\E{%;%p6%t\E<%;,>)
qnx|qnx4|qnx console,
daisy, km, mir, msgr, xhpa, xt,
colors#8, cols#80, it#4, lines#25, ncv#3, pairs#8,
acsc=O\333a\261j\331k\277l\332m\300n\305o\337q\304s\334t
\303u\264v\301w\302x\263,
bel=^G, blink=\E{, bold=\E<, civis=\Ey0, clear=\EH\EJ,
cnorm=\Ey1, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\Ey2,
dch1=\Ef, dl1=\EF, ed=\EJ, el=\EK, home=\EH, ht=^I, ich1=\Ee,
il1=\EE, ind=\n, kBEG=\377\356, kCAN=\377\263,
kCMD=\377\267, kCPY=\377\363, kCRT=\377\364,
kDL=\377\366, kEND=\377\301, kEOL=\377\311,
kEXT=\377\367, kFND=\377\370, kHLP=\377\371,
kHOM=\377\260, kIC=\377\340, kLFT=\377\264,
kMOV=\377\306, kMSG=\377\304, kNXT=\377\272,
kOPT=\377\372, kPRT=\377\275, kPRV=\377\262,
kRDO=\377\315, kRES=\377\374, kRIT=\377\266,
kRPL=\377\373, kSAV=\377\307, kSPD=\377\303,
kUND=\377\337, kbeg=\377\300, kcan=\377\243, kcbt=\377\0,
kclo=\377\343, kclr=\377\341, kcmd=\377\245,
kcpy=\377\265, kcrt=\377\305, kctab=\377\237,
kcub1=\377\244, kcud1=\377\251, kcuf1=\377\246,
kcuu1=\377\241, kdch1=\377\254, kdl1=\377\274,
ked=\377\314, kel=\377\310, kend=\377\250, kent=\377\320,
kext=\377\270, kf1=\377\201, kf10=\377\212,
kf11=\377\256, kf12=\377\257, kf13=\377\213,
kf14=\377\214, kf15=\377\215, kf16=\377\216,
kf17=\377\217, kf18=\377\220, kf19=\377\221,
kf2=\377\202, kf20=\377\222, kf21=\377\223,
kf22=\377\224, kf23=\377\333, kf24=\377\334,
kf25=\377\225, kf26=\377\226, kf27=\377\227,
kf28=\377\230, kf29=\377\231, kf3=\377\203,
kf30=\377\232, kf31=\377\233, kf32=\377\234,
kf33=\377\235, kf34=\377\236, kf35=\377\276,
kf36=\377\277, kf37=\377\321, kf38=\377\322,
kf39=\377\323, kf4=\377\204, kf40=\377\324,
kf41=\377\325, kf42=\377\326, kf43=\377\327,
kf44=\377\330, kf45=\377\331, kf46=\377\332,
kf47=\377\316, kf48=\377\317, kf5=\377\205, kf6=\377\206,
kf7=\377\207, kf8=\377\210, kf9=\377\211, kfnd=\377\346,
khlp=\377\350, khome=\377\240, khts=\377\342,
kich1=\377\253, kil1=\377\273, kind=\377\261,
kmov=\377\351, kmrk=\377\355, kmsg=\377\345,
knp=\377\252, knxt=\377\312, kopn=\377\357,
kopt=\377\353, kpp=\377\242, kprt=\377\255,
kprv=\377\302, krdo=\377\336, kref=\377\354,
kres=\377\360, krfr=\377\347, kri=\377\271,
krmir=\377\313, krpl=\377\362, krst=\377\352,
ksav=\377\361, kslt=\377\247, kspd=\377\335,
ktbc=\377\344, kund=\377\365, mvpa=\E!%p1%02d, op=\ER,
rep=\Eg%p2%{32}%+%c%p1%c, rev=\E(, ri=\EI, rmcup=\Eh\ER,
rmso=\E), rmul=\E], rs1=\ER, setb=\E@%p1%Pb%gb%gf%d%d,
setf=\E@%p1%Pf%gb%gf%d%d, sgr0=\E}\E]\E>\E), smcup=\Ei,
smso=\E(, smul=\E[,
#
#
qnxt|qnxt4|QNX4 terminal,
crxm, use=qnx4,
#
qnxm|QNX4 with mouse events,
maddr#1,
chr=\E/, cvr=\E", is1=\E/0t, mcub=\E/>1h, mcub1=\E/>7h,
mcud=\E/>1h, mcud1=\E/>1l\E/>9h, mcuf=\E/>1h\E/>9l,
mcuf1=\E/>7l, mcuu=\E/>6h, mcuu1=\E/>6l, rmicm=\E/>2l,
smicm=\E/>2h, use=qnx4,
#
qnxw|QNX4 windows,
xvpa, use=qnxm,
#
# Monochrome QNX4 terminal or console. Setting this terminal type will
# allow an application running on a color console to behave as if it
# were a monochrome terminal. Output will be through stdout instead of
# console writes because the term routines will recognize that the
# terminal name starts with 'qnxt'.
#
qnxtmono|Monochrome QNX4 terminal or console,
colors@, pairs@,
scp@, use=qnx4,
# From: Federico Bianchi <bianchi@pc-arte2.arte.unipi.it>, 1 Jul 1998
# (esr: commented out <scp> and <rmcup> to avoid warnings.)
# (TD: derive from original qnx4 entry)
qnxt2|qnx 2.15 serial terminal,
am,
civis@, cnorm@, cvvis@, dch1@, ich1@, kRES@, kRPL@, kUND@, kspd@,
rep@, rmcup@, rmso=\E>, setb@, setf@, smcup@, smso=\E<, use=qnx4,
# QNX ANSI terminal definition
qansi-g|QNX ANSI,
am, eslok, hs, xon,
colors#8, cols#80, it#8, lines#25, ncv#19, pairs#64, wsl#80,
acsc=Oa``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[2J\E[H, cnorm=\E[?25h\E[?12l, cr=\r,
- csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[2J\E[H,
+ cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[1M, dsl=\E[r, ech=\E[%p1%dX, ed=\E[J,
el=\E[K, el1=\E[1K\E[X, flash=\E[?5h$<200>\E[?5l,
fsl=\E[?6h\E8, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH,
ich=\E[%p1%d@, ich1=\E[1@, il=\E[%p1%dL, il1=\E[1L,
ind=\E[S, invis=\E[9m,
is2=\E>\E[?1l\E[?7h\E[0;10;39;49m, is3=\E(B\E)0,
kBEG=\ENn, kCAN=\E[s, kCMD=\E[t, kCPY=\ENs, kCRT=\ENt,
kDL=\ENv, kEXT=\ENw, kFND=\ENx, kHLP=\ENy, kHOM=\E[h,
kLFT=\E[d, kNXT=\E[u, kOPT=\ENz, kPRV=\E[v, kRIT=\E[c,
kbs=^H, kcan=\E[S, kcbt=\E[Z, kclo=\ENc, kclr=\ENa,
kcmd=\E[G, kcpy=\E[g, kctab=\E[z, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[p, kend=\E[Y,
kext=\E[y, kf1=\EOP, kf10=\EOY, kf11=\EOZ, kf12=\EOA,
kf13=\EOp, kf14=\EOq, kf15=\EOr, kf16=\EOs, kf17=\EOt,
kf18=\EOu, kf19=\EOv, kf2=\EOQ, kf20=\EOw, kf21=\EOx,
kf22=\EOy, kf23=\EOz, kf24=\EOa, kf25=\E[1~, kf26=\E[2~,
kf27=\E[3~, kf28=\E[4~, kf29=\E[5~, kf3=\EOR, kf30=\E[6~,
kf31=\E[7~, kf32=\E[8~, kf33=\E[9~, kf34=\E[10~,
kf35=\E[11~, kf36=\E[12~, kf37=\E[17~, kf38=\E[18~,
kf39=\E[19~, kf4=\EOS, kf40=\E[20~, kf41=\E[21~,
kf42=\E[22~, kf43=\E[23~, kf44=\E[24~, kf45=\E[25~,
kf46=\E[26~, kf47=\E[27~, kf48=\E[28~, kf5=\EOT, kf6=\EOU,
kf7=\EOV, kf8=\EOW, kf9=\EOX, kfnd=\ENf, khlp=\ENh,
khome=\E[H, khts=\ENb, kich1=\E[@, kil1=\E[`, kind=\E[a,
kmov=\ENi, kmrk=\ENm, kmsg=\ENe, knp=\E[U, kopn=\ENo,
kopt=\ENk, kpp=\E[V, kref=\ENl, kres=\ENp, krfr=\ENg,
kri=\E[b, krpl=\ENr, krst=\ENj, ksav=\ENq, kslt=\E[T,
ktbc=\ENd, kund=\ENu, ll=\E[99H, nel=\EE, op=\E[39;49m,
rev=\E[7m, ri=\E[T, rmacs=^O, rmam=\E[?7l, rmso=\E[27m,
rmul=\E[24m, rs1=\017\E[?7h\E[0;39;49m$<2>\E>\E[?1l,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h,
setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
sgr=\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1
%|%t;7%;%?%p7%t;9%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smso=\E[7m,
smul=\E[4m, tbc=\E[3g,
tsl=\E7\E1;24r\E[?6l\E[25;%i%p1%dH, use=ansi+rep,
- use=ecma+index,
+ use=att610+cvis0, use=ecma+index,
#
qansi|QNX ansi with console writes,
daisy, xhpa, use=qansi-g,
#
qansi-t|QNX ansi without console writes,
crxm, use=qansi,
#
qansi-m|QNX ansi with mouse,
maddr#1,
chr=\E[, cvr=\E], is1=\E[0t, mcub=\E[>1h, mcub1=\E[>7h,
mcud=\E[>1h, mcud1=\E[>1l\E[>9h, mcuf=\E[>1h\E[>9l,
mcuf1=\E[>7l, mcuu=\E[>6h, mcuu1=\E[>6l, rmicm=\E[>2l,
smicm=\E[>2h, use=qansi,
#
qansi-w|QNX ansi for windows,
xvpa, use=qansi-m,
#### SCO consoles
# SCO console and SOS-Syscons console for 386bsd
# (scoansi: had unknown capabilities
# :Gc=N:Gd=K:Gh=M:Gl=L:Gu=J:Gv=\072:\
# :GC=E:GD=B:GH=D:GL=\64:GU=A:GV=\63:GR=C:
# :G1=?:G2=Z:G3=@:G4=Y:G5=;:G6=I:G7=H:G8=<:\
# :CW=\E[M:NU=\E[N:RF=\E[O:RC=\E[P:\
# :WL=\E[S:WR=\E[T:CL=\E[U:CR=\E[V:\
# I renamed GS/GE/HM/EN/PU/PD/RT and added klone+sgr-dumb, based
# on the <smacs>=\E[12m -- esr)
#
# klone+sgr-dumb is an error since the acsc does not match -TD
#
# In this description based on SCO's keyboard(HW) manpage list of default
# function key values:
# F13-F24 are shifted F1-F12
# F25-F36 are control F1-F12
# F37-F48 are shift+control F1-F12
#
# hpa/vpa work in the console, but not in scoterm:
# hpa=\E[%p1%dG,
# vpa=\E[%p1%dd,
#
# SCO's terminfo uses
# kLFT=\E[d,
# kRIT=\E[c,
# which do not work (console or scoterm).
#
# Console documents only 3 attributes can be set with SGR (so we don't use sgr).
scoansi-old|SCO Extended ANSI standard crt (5.0.5),
OTbs, am, bce, eo, xon,
colors#8, cols#80, it#8, lines#25, pairs#64,
acsc=+/\,.-\230.\2310[5566778899\:\:;;<<==>>FFGGHHIIJJKKLLMM
NNOOPPQQRRSSTTUUVVWWXX`\204a0fxgqh2jYk?lZm@nEqDtCu4vAwB
x3yszr{c}\034~\207,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
civis=\E[=14;12C, clear=\E[H\E[2J, cnorm=\E[=10;12C,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[=0;12C, dch=\E[%p1%dP,
dch1=\E[P, dispc=\E[=%p1%dg, dl=\E[%p1%dM, dl1=\E[M,
ed=\E[m\E[J, el=\E[m\E[K, el1=\E[1K, home=\E[H, ht=^I,
hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L,
ind=\E[S, invis=\E[8m, kbeg=\E[E, kbs=^H, kcbt=\E[Z,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=^?,
kend=\E[F, kf1=\E[M, kf10=\E[V, kf11=\E[W, kf12=\E[X,
kf13=\E[Y, kf15=\E[a, kf16=\E[b, kf17=\E[c, kf18=\E[d,
kf19=\E[e, kf2=\E[N, kf20=\E[f, kf21=\E[g, kf22=\E[h,
kf23=\E[i, kf24=\E[j, kf25=\E[k, kf26=\E[l, kf27=\E[m,
kf28=\E[n, kf29=\E[o, kf3=\E[O, kf30=\E[p, kf31=\E[q,
kf32=\E[r, kf33=\E[s, kf34=\E[t, kf35=\E[u, kf36=\E[v,
kf37=\E[w, kf38=\E[x, kf39=\E[y, kf4=\E[P, kf40=\E[z,
kf41=\E[@, kf42=\E[[, kf43=\E[\\, kf44=\E[], kf45=\E[\^,
kf46=\E[_, kf47=\E[`, kf48=\E[{, kf5=\E[Q, kf6=\E[R,
kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H, kich1=\E[L,
knp=\E[G, kpp=\E[I, op=\E[0;37;40m, rc=\E8, rev=\E[7m,
ri=\E[T, rmacs=\E[10m, rmam=\E[?7l, rmso=\E[m, rmul=\E[m,
sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr0=\E[0;10m, smacs=\E[12m, smam=\E[?7h, smso=\E[7m,
smul=\E[4m, use=ecma+index,
scoansi-new|SCO Extended ANSI standard crt (5.0.6),
km,
civis=\E[=0c, cnorm=\E[=1c, csr=\E[%i%p1%d;%p2%dr,
cvvis=\E[=2c, mgc=\E[=r, oc=\E[51m, op=\E[50m,
rep=\E[%p1%d;%p2%db, rmm=\E[=11L,
sgr=\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p6%t;1%;%?
%p7%t;8%;%?%p9%t;12%e;10%;m,
smgb=\E[=1;0m, smgbp=\E[=1;%i%p1%dm,
smglp=\E[=2;%i%p1%dm, smgr=\E[=3;0m,
smgrp=\E[=3;%i%p1%dm, smgt=\E[=0;0m,
smgtp=\E[=0;%i%p1%dm, smm=\E[=10L,
wind=\E[%i%p1%d;%p2%d;%i%p3%d;%p4%dr,
use=scoansi-old,
# make this easy to change...
scoansi|SCO Extended ANSI standard crt,
use=scoansi-old,
#### SGI consoles
# Sent by Stefan Stapelberg <stefan@rent-a-guru.de>, 24 Feb 1997, this is
# from SGI's terminfo database. SGI's entry shows F9-F12 with the codes
# for the application keypad mode. We have added iris-ansi-ap rather than
# change the original to keypad mode.
#
# (iris-ansi: added rmam/smam based on init string -- esr)
#
# This entry, and those derived from it, is used in xwsh (also known as
# winterm). Some capabilities that do not fit into the terminfo model
# include the shift- and control-functionkeys:
#
# F1-F12 generate different codes when shift or control modifiers are used.
# For example:
# F1 \E[001q
# shift F1 \E[013q
# control-F1 \E[025q
#
# In application keypad mode, F9-F12 generate codes like vt100 PF1-PF4, i.e.,
# \EOP to \EOS. The shifted and control modifiers still do the same thing.
#
# The cursor keys also have different codes:
# control-up \E[162q
# control-down \E[165q
# control-left \E[159q
# control-right \E[168q
#
# shift-up \E[161q
# shift-down \E[164q
# shift-left \E[158q
# shift-right \E[167q
#
# control-tab \[072q
#
iris-ansi|iris-ansi-net|IRIS emulating 40 line ANSI terminal (almost VT100),
am,
cols#80, it#8, lines#40,
bel=^G, bold=\E[1m, clear=\E[H\E[2J,
cnorm=\E[9/y\E[12/y\E[=6l, cr=\r, cub=\E[%p1%dD,
cub1=\E[D, cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA,
cuu1=\E[A, cvvis=\E[10/y\E[=1h\E[=2l\E[=6h,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=\ED,
is2=\E[?1l\E>\E[?7h\E[100g\E[0m\E7\E[r\E8, kDC=\E[P,
kEND=\E[147q, kHOM=\E[143q, kLFT=\E[158q, kPRT=\E[210q,
kRIT=\E[167q, kSPD=\E[218q, kbs=^H, kcbt=\E[Z, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=^?, kend=\E[146q,
kent=\r, kf1=\E[001q, kf10=\E[010q, kf11=\E[011q,
kf12=\E[012q, kf2=\E[002q, kf3=\E[003q, kf4=\E[004q,
kf5=\E[005q, kf6=\E[006q, kf7=\E[007q, kf8=\E[008q,
kf9=\E[009q, khome=\E[H, kich1=\E[139q, knp=\E[154q,
kpp=\E[150q, kprt=\E[209q, krmir=\E[146q, kspd=\E[217q,
nel=\EE, pfkey=\EP101;%p1%d.y%p2%s\E\\, rc=\E8,
rev=\E[7m, ri=\EM, rmam=\E[?7l, rmso=\E[m, rmul=\E[m, sc=\E7,
sgr0=\E[m, smam=\E[?7h, smso=\E[1;7m, smul=\E[4m,
tbc=\E[3g,
iris-ansi-ap|IRIS ANSI in application-keypad mode,
is2=\E[?1l\E=\E[?7h, kent=\EOM, kf10=\E[010q,
kf11=\E[011q, kf12=\E[012q, kf9=\E[009q, use=iris-ansi,
# From the man-page, this is a quasi-vt100 emulator that runs on SGI's IRIX
# (T.Dickey 98/1/24)
iris-color|xwsh|IRIX ANSI with color,
ncv#33,
csr=\E[%i%p1%d;%p2%dr, dch=\E[%p1%dP, dim=\E[2m,
ech=\E[%p1%dX, ich=\E[%p1%d@, rc=\E8, rmul=\E[24m, rs1=\Ec,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
use=ecma+italics, use=vt100+enq, use=klone+color,
use=iris-ansi-ap,
#### OpenBSD consoles
#
# From: Alexei Malinin <Alexei.Malinin@mail.ru>; October, 2011.
#
# The following terminal descriptions for the AMD/Intel PC console
# were prepared based on information contained in the OpenBSD-4.9
# termtypes.master and wscons(4) & vga(4) manuals (2010, November).
#
# Added bce based on testing with tack -TD
# Added several capabilities to pccon+base, reading wsemul_vt100_subr.c -TD
# Changed kbs to DEL and removed keys that duplicate stty settings -TD
#
# Notes from testing with vttest:
# fails wrapping test
# no 8-bit controls
# identifies as vt200 with selective erase, but does not implement DECSCA
# no vt52 mode
# also lacks these:
# ESC # 8 DEC Screen Alignment Test (DECALN).
# CSI ? 5 h Reverse Video (DECSCNM).
#
pccon+keys|OpenBSD PC keyboard keys,
kbs=^?, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=\E[3~, kend=\E[8~, kent=\r, kf1=\E[11~, kf10=\E[21~,
kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf21=\E[35~,
kf22=\E[36~, kf23=\E[37~, kf24=\E[38~, kf3=\E[13~,
kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
kf9=\E[20~, khome=\E[7~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
krfr=^R,
pccon+sgr+acs0|sgr and simple ASCII pseudographics for OpenBSD PC console,
acsc=+>\,<-\^.v0#`+a\:f\\h#i#j+k+l+m+n+o~p-q-r-s_t+u+v+w+x|y
#z#{*|!}#~o,
sgr=\E[0%?%p1%p3%|%t;7%;%?%p6%t;1%;%?%p2%t;4%;m,
sgr0=\E[m,
pccon+sgr+acs|sgr and default ASCII pseudographics for OpenBSD PC console,
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxy
yzz{{||}}~~,
enacs=\E)0$<5>, rmacs=\E(B$<5>,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e
\E(B%;$<2>,
sgr0=\E[m\E(B$<5>, smacs=\E(0$<5>,
# underline renders as color
pccon+colors|ANSI colors for OpenBSD PC console,
bce,
colors#8, ncv#2, pairs#64,
op=\E[47;30m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
pccon+base|base capabilities for OpenBSD PC console,
am, km, mc5i, msgr, npc, nxon, xenl, xon,
cols#80, it#8, lines#24,
bel=^G, bold=\E[1m, clear=\E[H\E[J, cr=\r, cub1=^H, cud1=\n,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J,
el=\E[K, el1=\E[1K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
il1=\E[L, ind=\ED, nel=\EE, rev=\E[7m, ri=\EM, rmam=\E[?7l,
rmso=\E[27m, rmul=\E[24m, rs2=\Ec$<50>, smam=\E[?7h,
smso=\E[7m, smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR,
u7=\E[6n,
pccon0-m|OpenBSD PC console without colors & with simple ASCII pseudographics,
use=pccon+sgr+acs0, use=pccon+base, use=pccon+keys,
pccon0|OpenBSD PC console with simple ASCII pseudographics,
use=pccon0-m, use=pccon+colors,
pccon-m|OpenBSD PC console without colors,
use=pccon+base, use=pccon+sgr+acs, use=pccon+keys,
pccon|OpenBSD PC console,
use=pccon-m, use=pccon+colors,
#### NetBSD consoles
#
# pcvt termcap database entries (corresponding to release 3.31)
# Author's last edit-date: [Fri Sep 15 20:29:10 1995]
#
# (For the terminfo master file, I translated these into terminfo syntax.
# Then I dropped all the pseudo-HP entries. we don't want and can't use
# the :Xs: flag. Then I split :is: into a size-independent <is1> and a
# size-dependent <is2>. Finally, I added <rmam>/<smam> -- esr)
# NOTE: <ich1> has been taken out of this entry. for reference, it should
# be <ich1=\E[@>. For discussion, see ICH/ICH1 VERSUS RMIR/SMIR below.
# (esr: added <civis> and <cnorm> to resolve NetBSD Problem Report #4583)
pcvtXX|pcvt vt200 emulator (DEC VT220),
am, km, mir, msgr, xenl,
it#8, vt#3,
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxy
yzz~~,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, el1=\E[1K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=\ED,
is1=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, kbs=^?,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
kdch1=\E[3~, kf1=\E[17~, kf2=\E[18~, kf3=\E[19~,
kf4=\E[20~, kf5=\E[21~, kf6=\E[23~, kf7=\E[24~, kf8=\E[25~,
khome=\E[1~, kich1=\E[2~, kll=\E[4~, knp=\E[6~, kpp=\E[5~,
nel=\EE, rc=\E8, rev=\E[7m, rf=/usr/share/tabset/vt100,
ri=\EM, rmacs=\E(B, rmam=\E[?7l, rmir=\E[4l,
rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m,
rs1=\Ec\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
sgr0=\E[m, smacs=\E(0, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
- use=ecma+index,
+ use=ecma+index, use=vt220+cvis,
# NetBSD/FreeBSD vt220 terminal emulator console (pc keyboard & monitor)
# termcap entries for pure VT220-Emulation and 25, 28, 35, 40, 43 and
# 50 lines entries; 80 columns
pcvt25|dec vt220 emulation with 25 lines,
cols#80, lines#25,
is2=\E[1;25r\E[25;1H, use=pcvtXX,
pcvt28|dec vt220 emulation with 28 lines,
cols#80, lines#28,
is2=\E[1;28r\E[28;1H, use=pcvtXX,
pcvt35|dec vt220 emulation with 35 lines,
cols#80, lines#35,
is2=\E[1;35r\E[35;1H, use=pcvtXX,
pcvt40|dec vt220 emulation with 40 lines,
cols#80, lines#40,
is2=\E[1;40r\E[40;1H, use=pcvtXX,
pcvt43|dec vt220 emulation with 43 lines,
cols#80, lines#43,
is2=\E[1;43r\E[43;1H, use=pcvtXX,
pcvt50|dec vt220 emulation with 50 lines,
cols#80, lines#50,
is2=\E[1;50r\E[50;1H, use=pcvtXX,
# NetBSD/FreeBSD vt220 terminal emulator console (pc keyboard & monitor)
# termcap entries for pure VT220-Emulation and 25, 28, 35, 40, 43 and
# 50 lines entries; 132 columns
pcvt25w|dec vt220 emulation with 25 lines and 132 cols,
cols#132, lines#25,
is2=\E[1;25r\E[25;1H, use=pcvtXX,
pcvt28w|dec vt220 emulation with 28 lines and 132 cols,
cols#132, lines#28,
is2=\E[1;28r\E[28;1H, use=pcvtXX,
pcvt35w|dec vt220 emulation with 35 lines and 132 cols,
cols#132, lines#35,
is2=\E[1;35r\E[35;1H, use=pcvtXX,
pcvt40w|dec vt220 emulation with 40 lines and 132 cols,
cols#132, lines#40,
is2=\E[1;40r\E[40;1H, use=pcvtXX,
pcvt43w|dec vt220 emulation with 43 lines and 132 cols,
cols#132, lines#43,
is2=\E[1;43r\E[43;1H, use=pcvtXX,
pcvt50w|dec vt220 emulation with 50 lines and 132 cols,
cols#132, lines#50,
is2=\E[1;50r\E[50;1H, use=pcvtXX,
# OpenBSD implements a color variation
pcvt25-color|dec vt220 emulation with 25 lines and color,
cols#80, lines#25,
is2=\E[1;25r\E[25;1H, kf1=\EOP, kf10=\E[29~, kf11=\E[23~,
kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf5=\E[17~,
kf6=\E[18~, kf7=\E[19~, kf8=\E[20~, kf9=\E[21~, use=pcvtXX,
use=ecma+color,
# Terminfo entries to enable the use of the ncurses library in colour on a
# NetBSD-arm32 console (only tested on a RiscPC).
# Created by Dave Millen <dmill@globalnet.co.uk> 22.07.98
# modified codes for setf/setb to setaf/setab, then to klone+color, corrected
# typo in invis - TD
arm100|arm100-am|Arm(RiscPC) ncurses compatible (for 640x480),
am, bce, msgr, xenl, xon,
cols#80, it#8, lines#30,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>,
clear=\E[H\E[J$<50>, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C$<2>,
cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA,
cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>,
enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ind=\n,
invis=\E[8m$<2>, ka1=\E[q, ka3=\E[s, kb2=\E[r, kbs=^H,
kc1=\E[p, kc3=\E[n, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kent=\E[M, kf0=\E[y, kf1=\E[P, kf10=\E[x,
kf2=\E[Q, kf3=\E[R, kf4=\E[S, kf5=\E[t, kf6=\E[u, kf7=\E[v,
kf8=\E[l, kf9=\E[w, rc=\E8, rev=\E[7m$<2>, ri=\EM$<5>,
rmacs=^O, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m$<2>,
rmul=\E[m$<2>, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h,
sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;%?%p7%t;8%;m%?%p9%t\016%e\017%;$<2>,
sgr0=\E[m\017$<2>, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=,
smso=\E[7m$<2>, smul=\E[4m$<2>, tbc=\E[3g, use=ecma+sgr,
use=klone+color,
arm100-w|arm100-wam|Arm(RiscPC) ncurses compatible (for 1024x768),
cols#132, lines#50, use=arm100,
# NetBSD/x68k console vt200 emulator. This port runs on a 68K machine
# manufactured by Sharp for the Japanese market.
# From Minoura Makoto <minoura@netlaputa.or.jp>, 12 May 1996
x68k|x68k-ite|NetBSD/x68k ITE,
cols#96, lines#32,
- kclr=\E[9~, khlp=\E[28~, use=vt220,
+ kclr=\E[9~, khlp=\E[28~, use=vt220-base,
# <tv@pobox.com>:
# Entry for the DNARD OpenFirmware console, close to ANSI but not quite.
#
# (still unfinished, but good enough so far.)
ofcons|DNARD OpenFirmware console,
bw,
cols#80, lines#30,
bel=^G, blink=\2335m, bold=\2331m, clear=^L, cr=\r,
cub=\233%p1%dD, cub1=\233D, cud=\233%p1%dB, cud1=\233B,
cuf=\233%p1%dC, cuf1=\233C, cup=\233%i%p1%d;%p2%dH,
cuu=\233%p1%dA, cuu1=\233A, dch=\233%p1%dP, dch1=\233P,
dim=\2332m, dl=\233%p1%dM, dl1=\233M, ed=\233J, el=\233K,
flash=^G, ht=^I, ich=\233%p1%d@, ich1=\233@, il=\233%p1%dL,
il1=\233L, ind=\n, invis=\2338m, kbs=^H, kcub1=\233D,
kcud1=\233B, kcuf1=\233C, kcuu1=\233A, kdch1=\233P,
kf1=\2330P, kf10=\2330M, kf2=\2330Q, kf3=\2330W,
kf4=\2330x, kf5=\2330t, kf6=\2330u, kf7=\2330q, kf8=\2330r,
kf9=\2330p, knp=\233/, kpp=\233?, nel=\r\n, rev=\2337m,
rmso=\2330m, rmul=\2330m,
sgr=\2330%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p5%t2%;%?%p7%t8
%;%?%p1%p3%|%t;7%;m,
sgr0=\2330m, smso=\2337m, smul=\2334m,
# NetBSD "wscons" emulator in vt220 mode.
# This entry is based on the NetBSD termcap entry, correcting the ncv value.
# The emulator renders underlined text in red. Colors are otherwise usable.
#
# Testing the emulator and reading the source code (NetBSD 2.0), it appears
# that "vt220" is inaccurate. There are a few vt220-features, but most of the
# vt220 screens in vttest do not work with this emulator. For instance, it
# identifies itself (primary DA response) as a vt220 with selective erase. But
# the selective erase feature does not work. The secondary response is copied
# from Kermit's emulation of vt220, does not correspond to actual vt220. At
# the level of detail in a termcap, it is a passable emulator, since ECH does
# work. Don't use it on a VMS system -TD
wsvt25|NetBSD wscons in 25 line DEC VT220 mode,
bce, msgr,
colors#8, cols#80, it#8, lines#25, ncv#2, pairs#64,
- civis=\E[?25l, cnorm=\E[?25h, is2=\E[r\E[25;1H,
- kdch1=\E[3~, kend=\E[8~, kf1=\E[11~, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf2=\E[12~, kf3=\E[13~,
- kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
- kf9=\E[20~, khome=\E[7~, op=\E[m, rs1=\Ec,
+ is2=\E[r\E[25;1H, kdch1=\E[3~, kend=\E[8~, kf1=\E[11~,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\E[12~,
+ kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~,
+ kf8=\E[19~, kf9=\E[20~, khome=\E[7~, op=\E[m, rs1=\Ec,
setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=vt220,
wsvt25m|NetBSD wscons in 25 line DEC VT220 mode with Meta,
km, use=wsvt25,
# NetBSD 6.x still uses wscons, with minor changes (2014/02/22) -TD
#
# TERM is by default vt100 for the console, wsvt25 for other ttys.
# Initial testing set TERM=xterm, based on comments by developers, found too
# many differences to continue in that path. However, test-results may be
# useful to people curious about compatibility with xterm.
#
# Testing with tack:
# -----------------
# Failed: cbt, bel, flash, cvvis, smul (color), blink, invis
# There is color-bleeding in the color-pairs screen.
# Attributes do not work with color
# Failed: vpa/hpa
# Failed: kf1-kf4, kf13-kf48, khome, kend
# (effectively xterm-r6 for function-keys)
# None of the function or cursor key-modifiers are encoded.
# Console hangs in the smm/rmm test if TERM=xterm, does not show test
#
# Testing with vttest:
# -------------------
# Identifies as vt220 with selective erase
# (however, selective erase refers to DECSCA, SPA)
# Does not implement vt52
# Uses spaces to simulate double-size characters
# Does not support 8-bit controls
# Does not support VT220 reports
# Does not support send/receive mode
# Supports ECH (like rxvt)
# Does not support DECSCA
# Does not support any of the ISO-6429 cursor-movement
# Does not support any of the ISO-6429 miscellaneous tests
# (SL/SR also leave unexpected char on screen too)
# Background does not change in menu 11.6.9 (SGR 22-27)
# None of the xterm special features tests work
netbsd6|NetBSD wscons in 25 line DEC VT100 mode,
kbs=^?, use=wsvt25,
# `rasterconsole' provided by 4.4BSD, NetBSD and OpenBSD on SPARC, and
# DECstation/pmax.
rcons|BSD rasterconsole,
use=sun-il,
# Color version of above. Color currently only provided by NetBSD.
rcons-color|BSD rasterconsole with ANSI color,
bce,
colors#8, pairs#64,
op=\E[m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=rcons,
# mgterm -- MGL/MGL2, MobileGear Graphic Library
# for PocketBSD,PocketLinux,NetBSD/{hpcmips,mac68k}
# -- the setf/setb are probably incorrect, more likely setaf/setab -TD
# -- compare with cons25w
mgterm|MGL/MGL2 MobileGear Graphic Library,
OTbs, OTpt, am, bce, bw, eo, km, msgr, npc,
colors#8, cols#80, it#8, lines#18, pairs#64,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dim=\E[30;1m, dl=\E[%p1%dM,
dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
home=\E[H, hpa=\E[%i%p1%d`, ht=^I, ich=\E[%p1%d@,
ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\E[S, kb2=\E[E,
kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kdch1=^?, kend=\E[F, kf1=\E[M, kf10=\E[V,
kf11=\E[W, kf12=\E[X, kf2=\E[N, kf3=\E[O, kf4=\E[P, kf5=\E[Q,
kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H,
kich1=\E[L, knp=\E[G, kpp=\E[I, nel=\E[E, op=\E[x, rc=\E8,
rev=\E[7m, ri=\E[T, rmso=\E[m, rs2=\E[x\E[m\Ec, sc=\E7,
setb=\E[4%p1%dm, setf=\E[3%p1%dm, sgr0=\E[m, smso=\E[7m,
vpa=\E[%i%p1%dd, use=ecma+index,
#### FreeBSD console entries
#
# From: Andrey Chernov <ache@astral.msk.su> 29 Mar 1996
# Andrey Chernov maintains the FreeBSD termcap distributions.
#
# Note: Users of FreeBSD 2.1.0 and older versions must either upgrade
# or comment out the :cb: capability in the console entry.
#
# Alexander Lukyanov reports:
# I have seen FreeBSD-2.1.5R... The old el1 bug changed, but it is still there.
# Now el1 clears not only to the line beginning, but also a large chunk
# of previous line. But there is another bug - ech does not work at all.
#
# for syscons
# common entry without semigraphics
# Bug: The <op> capability resets attributes.
# Bug? The ech and el1 attributes appear to move the cursor in some cases; for
# instance el1 does if the cursor is moved to the right margin first. Removed
# by T.Dickey 97/5/3 (ech=\E[%p1%dX, el1=\E[1K)
#
# Setting colors turns off reverse; we cannot guarantee order, so use ncv.
# Note that this disables standout with color.
#
# The emulator sends difference strings based on shift- and control-keys,
# like scoansi:
# F13-F24 are shifted F1-F12
# F25-F36 are control F1-F12
# F37-F48 are shift+control F1-F12
cons25w|ansiw|ansi80x25-raw|freebsd console (25-line raw mode),
am, bce, bw, eo, msgr, npc,
colors#8, cols#80, it#8, lines#25, ncv#21, pairs#64,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
cnorm=\E[=0C, cr=\r, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB,
cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[=1C, dch=\E[%p1%dP, dch1=\E[P, dim=\E[30;1m,
dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
home=\E[H, hpa=\E[%i%p1%d`, ht=^I, ich=\E[%p1%d@,
ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\E[S, kb2=\E[E,
kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kdch1=^?, kend=\E[F, kf1=\E[M, kf10=\E[V,
kf11=\E[W, kf12=\E[X, kf13=\E[Y, kf14=\E[Z, kf15=\E[a,
kf16=\E[b, kf17=\E[c, kf18=\E[d, kf19=\E[e, kf2=\E[N,
kf20=\E[f, kf21=\E[g, kf22=\E[h, kf23=\E[i, kf24=\E[j,
kf25=\E[k, kf26=\E[l, kf27=\E[m, kf28=\E[n, kf29=\E[o,
kf3=\E[O, kf30=\E[p, kf31=\E[q, kf32=\E[r, kf33=\E[s,
kf34=\E[t, kf35=\E[u, kf36=\E[v, kf37=\E[w, kf38=\E[x,
kf39=\E[y, kf4=\E[P, kf40=\E[z, kf41=\E[@, kf42=\E[[,
kf43=\E[\\, kf44=\E[], kf45=\E[\^, kf46=\E[_, kf47=\E[`,
kf48=\E[{, kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U,
khome=\E[H, kich1=\E[L, knp=\E[G, kpp=\E[I, nel=\E[E,
op=\E[x, rc=\E8, rev=\E[7m, ri=\E[T, rmso=\E[m,
rs2=\E[x\E[m\Ec, sc=\E7, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm,
sgr=\E[0%?%p1%t;2;7%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;30;1%;%?
%p6%t;1%;m,
sgr0=\E[m, smso=\E[7m, vpa=\E[%i%p1%dd, use=ecma+index,
cons25|ansis|ansi80x25|freebsd console (25-line ansi mode),
acsc=-\030.^Y0\333`\004a\260f\370g\361h\261i\025j\331k\277l
\332m\300n\305q\304t\303u\264v\301w\302x\263y\363z\362~
\371,
use=cons25w,
cons25-debian|freebsd console with debian backspace (25-line ansi mode),
kbs=^?, kdch1=\E[3~, use=cons25,
cons25-m|ansis-mono|ansi80x25-mono|freebsd console (25-line mono ansi mode),
colors@, pairs@,
bold@, dim@, op@, rmul=\E[m, setab@, setaf@,
sgr=\E[0%?%p1%t;2;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;m,
smul=\E[4m, use=cons25,
cons30|ansi80x30|freebsd console (30-line ansi mode),
lines#30, use=cons25,
cons30-m|ansi80x30-mono|freebsd console (30-line mono ansi mode),
lines#30, use=cons25-m,
cons43|ansi80x43|freebsd console (43-line ansi mode),
lines#43, use=cons25,
cons43-m|ansi80x43-mono|freebsd console (43-line mono ansi mode),
lines#43, use=cons25-m,
cons50|ansil|ansi80x50|freebsd console (50-line ansi mode),
lines#50, use=cons25,
cons50-m|ansil-mono|ansi80x50-mono|freebsd console (50-line mono ansi mode),
lines#50, use=cons25-m,
cons60|ansi80x60|freebsd console (60-line ansi mode),
lines#60, use=cons25,
cons60-m|ansi80x60-mono|freebsd console (60-line mono ansi mode),
lines#60, use=cons25-m,
cons25r|pc3r|ibmpc3r|cons25-koi8-r|freebsd console w/koi8-r cyrillic,
acsc=-\030.^Y0\215`\004a\220f\234h\221i\025j\205k\203l\202m
\204n\212q\0t\206u\207v\211w\210x\201y\230z\231~
\225,
use=cons25w,
cons25r-m|pc3r-m|ibmpc3r-mono|cons25-koi8r-m|freebsd console w/koi8-r cyrillic (mono),
colors@, pairs@,
op@, rmul=\E[m, setab@, setaf@,
sgr=\E[0%?%p1%t;2;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5
%t;30;1%;%?%p6%t;1%;m,
smul=\E[4m, use=cons25r,
cons50r|cons50-koi8r|freebsd console w/koi8-r cyrillic (50 lines),
lines#50, use=cons25r,
cons50r-m|cons50-koi8r-m|freebsd console w/koi8-r cyrillic (50-line mono),
lines#50, use=cons25r-m,
cons60r|cons60-koi8r|freebsd console w/koi8-r cyrillic (60 lines),
lines#60, use=cons25r,
cons60r-m|cons60-koi8r-m|freebsd console w/koi8-r cyrillic (60-line mono),
lines#60, use=cons25r-m,
# ISO 8859-1 FreeBSD console
cons25l1|cons25-iso8859|freebsd console w/iso 8859-1 chars,
acsc=+\253\,\273-\030.\031`\201a\202f\207g\210i\247j\213k
\214l\215m\216n\217o\220p\221q\222r\223s\224t\225u
\226v\227w\230x\231y\232z\233~\237,
use=cons25w,
cons25l1-m|cons25-iso-m|freebsd console w/iso 8859-1 chars (mono),
colors@, pairs@,
bold@, dim@, op@, rmul=\E[m, setab@, setaf@,
sgr=\E[0%?%p1%t;2;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;m,
smul=\E[4m, use=cons25l1,
cons50l1|cons50-iso8859|freebsd console w/iso 8859-1 chars (50 lines),
lines#50, use=cons25l1,
cons50l1-m|cons50-iso-m|freebsd console w/iso 8859-1 chars (50-line mono),
lines#50, use=cons25l1-m,
cons60l1|cons60-iso|freebsd console w/iso 8859-1 chars (60 lines),
lines#60, use=cons25l1,
cons60l1-m|cons60-iso-m|freebsd console w/iso 8859-1 chars (60-line mono),
lines#60, use=cons25l1-m,
# Starting with FreeBSD 8, an alternative configuration for syscons is provided,
# which is intended to be xterm-compatible. See for example
# http://svnweb.freebsd.org/base/stable/8/sys/dev/syscons/
# in particular scterm-teken.c
#
# For FreeBSD 9 and 10:
# --------------------
# The /etc/ttys entries for console and other ttys are all configured to set
# TERM=xterm.
#
# Testing with tack:
# There is no VT100 line-drawing (uses +'s and -'s)
# Shifted f1-f12 give cons25 codes, rather than xterm function-keys
#
# Testing with vttest:
# Menu 2 diamonds don't work, blink ditto, light background ditto
# The terminal identifies itself as VT100 with AVO
# There is no VT52 support
# There is no doublesize character support
# The terminal supports ECH (like rxvt)
# The terminal does not support send/receive mode
# The terminal supports all of the ISO-6429 cursor-movement
# The terminal supports some of the ISO-6429 miscellaneous tests
# (SL/SR also leave unexpected char on screen too)
#
# Considering cons25 as a base, the line-drawing mostly works, but is missing
# the cells which happen to have ASCII control-character values:
# - ^X arrow pointing up
# . ^Y arrow pointing down
# i ^Y lantern
# ` ^D diamond
#
# Those are removed from this entry's acsc string to avoid confusion.
# The resulting description provides correct line-drawing and function-keys -TD
teken|syscons with teken,
bw@, mir, xenl,
acsc=0\333a\260f\370g\361h\261j\331k\277l\332m\300n\305q
\304t\303u\264v\301w\302x\263y\363z\362~\371,
- civis=\E[?25l, cnorm=\E[?25h, cvvis@, hpa=\E[%i%p1%dG,
- hts=\EH, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
- kdch1=\E[3~, kend=\E[F, kent=\r, kf1=\EOP, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
- kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- khome=\E[H, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, rmir=\E[4l,
- smir=\E[4h, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
- u8=\E[?1;2c, u9=\E[c, vpa=\E[%i%p1%dd, use=cons25,
+ cvvis@, hpa=\E[%i%p1%dG, hts=\EH, kcub1=\E[D, kcud1=\E[B,
+ kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[F, kent=\r,
+ kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ,
+ kf3=\EOR, kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~,
+ kf8=\E[19~, kf9=\E[20~, khome=\E[H, kich1=\E[2~, knp=\E[6~,
+ kpp=\E[5~, rmir=\E[4l, smir=\E[4h, tbc=\E[3g,
+ u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c,
+ vpa=\E[%i%p1%dd, use=vt220+cvis, use=cons25,
#### 386BSD and BSD/OS Consoles
#
# This was the original 386BSD console entry (I think).
# Some places it's named oldpc3|oldibmpc3.
# From: Alex R.N. Wetmore <aw2t@andrew.cmu.edu>
origpc3|origibmpc3|IBM PC 386BSD Console,
OTbs, am, bw, eo, xon,
cols#80, lines#25,
acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x
\263,
bold=\E[7m, clear=\Ec, cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[A, ed=\E[J, el=\E[K,
home=\E[H, ind=\E[S, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, khome=\E[Y, ri=\E[T, rmso=\E[1;0x\E[2;7x,
rmul=\E[1;0x\E[2;7x, sgr0=\E[m\E[1;0x\E[2;7x,
smso=\E[1;7x\E[2;0x, smul=\E[1;7x\E[2;0x,
# description of BSD/386 console emulator in version 1.0 (supplied by BSDI)
oldpc3|oldibmpc3|old IBM PC BSD/386 Console,
OTbs, km,
lines#25,
bel=^G, bold=\E[=15F, cr=\r, cud1=\n, dim=\E[=8F, dl1=\E[M,
ht=^I, il1=\E[L, ind=\n, kbs=^H, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kich1=\E[L, kll=\E[F,
knp=\E[G, kpp=\E[I, nel=\r\n, sgr0=\E[=R,
# Description of BSD/OS console emulator in version 1.1, 2.0, 2.1
# Note, the emulator supports many of the additional console features
# listed in the iBCS2 (e.g. character-set selection) though not all
# are described here. This entry really ought to be upgraded.
# Also note, the console will also work with fewer lines after doing
# "stty rows NN", e.g. to use 24 lines.
# (Color support from Kevin Rosenberg <kevin@cyberport.com>, 2 May 1996)
# Bug: The <op> capability resets attributes.
bsdos-pc|IBM PC BSD/OS Console,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;1%;%?%p3%t;7%;%?%p4%t;5%;%?%p6
%t;1%;%?%p7%t;8%;%?%p9%t;11%;m,
use=bsdos-pc-nobold,
bsdos-pc-nobold|BSD/OS PC console w/o bold,
use=klone+color, use=bsdos-pc-m,
bsdos-pc-m|bsdos-pc-mono|BSD/OS PC console mono,
OTbs, am, eo, km, xon,
cols#80, it#8, lines#25,
bel=^G, clear=\Ec, cr=\r, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I,
il=\E[%p1%dL, il1=\E[L, ind=\n, kbs=^H, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kich1=\E[L,
kll=\E[F, knp=\E[G, kpp=\E[I, nel=\r\n, rc=\E8, sc=\E7,
sgr=\E[0;10%?%p1%t;7%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7
%t;8%;%?%p9%t;11%;m%?%p5%t\E[=8F%;,
use=klone+sgr8,
# Old names for BSD/OS PC console used in releases before 4.1.
pc3|BSD/OS on the PC Console,
use=bsdos-pc-nobold,
ibmpc3|pc3-bold|BSD/OS on the PC Console with bold instead of underline,
use=bsdos-pc,
# BSD/OS on the SPARC
bsdos-sparc|Sun SPARC BSD/OS Console,
use=sun,
# BSD/OS on the PowerPC
bsdos-ppc|PowerPC BSD/OS Console,
use=bsdos-pc,
#### DEC VT52
# (<acsc>/<rmacs>/<smacs> capabilities aren't in DEC's official entry -- esr)
#
# Actually (TD pointed this out at the time the acsc string was added):
# vt52 shouldn't define full acsc since most of the cells don't match.
# see vt100 manual page A-31. This is the list that does match:
# f degree
# g plus/minus
# h right-arrow
# k down-arrow
# m scan-1
# o scan-3
# q scan-5
# s scan-7
# The line-drawing happens to work in several terminal emulators, but should
# not be used as a guide to the capabilities of the vt52. Note in particular
# that vt52 does not support line-drawing characters (the scan-X values refer
# to a crude plotting feature) -TD
vt52|dec vt52,
OTbs,
+ it#8, lines#24,
+ acsc=+h.k0affggolpnqprrss, home=\EH, kbs=^H, nel=\r\n,
+ ri=\EI, rmacs=\EG, rmkx=\E>, smacs=\EF, smkx=\E=, u8=\E/[KL],
+ use=vt50h,
+
+# This is more likely the "vt52" that you would see in emulation, i.e., no
+# keypad, no graphics.
+vt52-basic|vt52 for emulators,
cols#80, it#8, lines#24,
- acsc=+h.k0affggolpnqprrss, bel=^G, clear=\EH\EJ, cr=\r,
- cub1=\ED, cud1=\EB, cuf1=\EC,
- cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ,
- el=\EK, home=\EH, ht=^I, ind=\n, kbs=^H, kcub1=\ED, kcud1=\EB,
- kcuf1=\EC, kcuu1=\EA, nel=\r\n, ri=\EI, rmacs=\EG, smacs=\EF,
+ bel=^G, clear=\EH\EJ, cr=\r, cub1=\ED, cud1=\EB, cuf1=\EC,
+ cup=\EY%p1%' '%+%c%p2%' '%+%c, cuu1=\EA, ed=\EJ, el=\EK,
+ home=\EH, ht=^I, ind=\n, kbs=^H, kcub1=\ED, kcud1=\EB,
+ kcuf1=\EC, kcuu1=\EA, nel=\r\n, ri=\EI,
#### DEC VT100 and compatibles
#
# DEC terminals from the vt100 forward are collected here. Older DEC terminals
# and micro consoles can be found in the `obsolete' section. More details on
# the relationship between the VT100 and ANSI X3.64/ISO 6429/ECMA-48 may be
# found near the end of this file.
#
# Except where noted, these entries are DEC's official terminfos.
# Contact Bill Hedberg <hedberg@hannah.enet.dec.com> of Terminal Support
# Engineering for more information. Updated terminfos and termcaps
# are kept available at ftp://gatekeeper.dec.com/pub/DEC/termcaps.
#
# In October 1995 DEC sold its terminals business, including the VT and Dorio
# line and trademark, to SunRiver Data Systems. SunRiver has since changed
# its name to Boundless Technologies; see http://www.boundless.com.
#
# NOTE: Any VT100 emulation, whether in hardware or software, almost
# certainly includes what DEC called the `Level 1 editing extension' codes;
# only the very oldest VT100s lacked these and there probably aren't any of
# those left alive. To capture these, use one of the VT102 entries.
#
# Note that the <xenl> glitch in vt100 is not quite the same as on the Concept,
# since the cursor is left in a different position while in the
# weird state (concept at beginning of next line, vt100 at end
# of this line) so all versions of vi before 3.7 don't handle
# <xenl> right on vt100. The correct way to handle <xenl> is when
# you output the char in column 80, immediately output CR LF
# and then assume you are in column 1 of the next line. If <xenl>
# is on, am should be on too.
#
# I assume you have smooth scroll off or are at a slow enough baud
# rate that it doesn't matter (1200? or less). Also this assumes
# that you set auto-nl to "on", if you set it off use vt100-nam
# below.
#
# The padding requirements listed here are guesses. It is strongly
# recommended that xon/xoff be enabled, as this is assumed here.
#
# The vt100 uses <rs2> and <rf> rather than <is2>/<tbc>/<hts> because the
# tab settings are in non-volatile memory and don't need to be
# reset upon login. Also setting the number of columns glitches
# the screen annoyingly. You can type "reset" to get them set.
#
# The VT100 series terminals have cursor ("arrows") keys which can operate
# in two different modes: Cursor Mode and Application Mode. Cursor Mode
# is the reset state, and is assumed to be the normal state. Application
# Mode is the "set" state. In Cursor Mode, the cursor keys transmit
# "Esc [ {code}" sequences, conforming to ANSI standards. In Application
# Mode, the cursor keys transmit "Esc O <code>" sequences. Application Mode
# was provided primarily as an aid to the porting of VT52 applications. It is
# assumed that the cursor keys are normally in Cursor Mode, and expected that
# applications such as vi will always transmit the <smkx> string. Therefore,
# the definitions for the cursor keys are made to match what the terminal
# transmits after the <smkx> string is transmitted. If the <smkx> string
# is a null string or is not defined, then cursor keys are assumed to be in
# "Cursor Mode", and the cursor keys definitions should match that assumption,
# else the application may fail. It is also expected that applications will
# always transmit the <rmkx> string to the terminal before they exit.
#
# The VT100 series terminals have an auxiliary keypad, commonly referred to as
# the "Numeric Keypad", because it is a cluster of numeric and function keys.
# The Numeric Keypad which can operate in two different modes: Numeric Mode and
# Application Mode. Numeric Mode is the reset state, and is assumed to be
# the normal state. Application Mode is the "set" state. In Numeric Mode,
# the numeric and punctuation keys transmit ASCII 7-bit characters, and the
# Enter key transmits the same as the Return key (Note: the Return key
# can be configured to send either LF (\015) or CR LF). In Application Mode,
# all the keypad keys transmit "Esc O {code}" sequences. The PF1 - PF4 keys
# always send the same "Esc O {code}" sequences. It is assumed that the keypad
# is normally in Numeric Mode. If an application requires that the keypad be
# in Application Mode then it is expected that the user, or the application,
# will set the TERM environment variable to point to a terminfo entry which has
# defined the <smkx> string to include the codes that switch the keypad into
# Application Mode, and the terminfo entry will also define function key
# fields to match the Application Mode control codes. If the <smkx> string
# is a null string or is not defined, then the keypad is assumed to be in
# Numeric Mode. If the <smkx> string switches the keypad into Application
# Mode, it is expected that the <rmkx> string will contain the control codes
# necessary to reset the keypad to "Normal" mode, and it is also expected that
# applications which transmit the <smkx> string will also always transmit the
# <rmkx> string to the terminal before they exit.
#
# Here's a diagram of the VT100 keypad keys with their bindings.
# The top line is the name of the key (some DEC keyboards have the keys
# labelled somewhat differently, like GOLD instead of PF1, but this is
# the most "official" name). The second line is the escape sequence it
# generates in Application Keypad mode (where "$" means the ESC
# character). The third line contains two items, first the mapping of
# the key in terminfo, and then in termcap.
# _______________________________________
# | PF1 | PF2 | PF3 | PF4 |
# | $OP | $OQ | $OR | $OS |
# |_kf1__k1_|_kf2__k2_|_kf3__k3_|_kf4__k4_|
# | 7 8 9 - |
# | $Ow | $Ox | $Oy | $Om |
# |_kf9__k9_|_kf10_k;_|_kf0__k0_|_________|
# | 4 | 5 | 6 | , |
# | $Ot | $Ou | $Ov | $Ol |
# |_kf5__k5_|_kf6__k6_|_kf7__k7_|_kf8__k8_|
# | 1 | 2 | 3 | |
# | $Oq | $Or | $Os | enter |
# |_ka1__K1_|_kb2__K2_|_ka3__K3_| $OM |
# | 0 | . | |
# | $Op | $On | |
# |___kc1_______K4____|_kc3__K5_|_kent_@8_|
#
# Note however, that the arrangement of the 5-key ka1-kc3 do not follow the
# terminfo guidelines. That is a compromise used to assign the remaining
# keys on the keypad to kf5-kf0, used on older systems with legacy termcap
# support:
vt100+keypad|dec vt100 numeric keypad no fkeys,
ka1=\EOq, ka3=\EOs, kb2=\EOr, kc1=\EOp, kc3=\EOn,
vt100+pfkeys|dec vt100 numeric keypad,
kent=\EOM, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
use=vt100+keypad,
vt100+fnkeys|dec vt100 numeric keypad,
kf0=\EOy, kf10=\EOx, kf5=\EOt, kf6=\EOu, kf7=\EOv, kf8=\EOl,
kf9=\EOw, use=vt100+pfkeys,
#
# A better adaptation to modern keyboards such as the PC's, which have a dozen
# function keys and the keypad 2,4,6,8 keys are labeled with arrows keys, is to
# use the 5-key arrangement to model the arrow keys as suggested in the
# terminfo guidelines:
# _______________________________________
# | PF1 | PF2 | PF3 | PF4 |
# | $OP | $OQ | $OR | $OS |
# |_kf1__k1_|_kf2__k2_|_kf3__k3_|_kf4__k4_|
# | 7 8 9 - |
# | $Ow | $Ox | $Oy | $Om |
# |_ka1__K1_|_________|_ka3__K3_|_________|
# | 4 | 5 | 6 | , |
# | $Ot | $Ou | $Ov | $Ol |
# |_________|_kb2__K2_|_________|_________|
# | 1 | 2 | 3 | |
# | $Oq | $Or | $Os | enter |
# |_kc1__K4_|_________|_kc3__K5_| $OM |
# | 0 | . | |
# | $Op | $On | |
# |___________________|_________|_kent_@8_|
#
vt220+keypad|dec vt220 numeric keypad,
ka1=\EOw, ka3=\EOy, kb2=\EOu, kc1=\EOq, kc3=\EOs, kent=\EOM,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, ka2=\EOx, kb1=\EOt,
kb3=\EOv, kc2=\EOr,
#
vt100+enq|ncurses extension for vt100-style ENQ,
u8=\E[?1;2c, use=ansi+enq,
vt102+enq|ncurses extension for vt102-style ENQ,
u8=\E[?6c, use=ansi+enq,
#
# And here, for those of you with orphaned VT100s lacking documentation, is
# a description of the soft switches invoked when you do `Set Up'.
#
# Scroll 0-Jump Shifted 3 0-#
# | 1-Smooth | 1-British pound sign
# | Autorepeat 0-Off | Wrap Around 0-Off
# | | 1-On | | 1-On
# | | Screen 0-Dark Bkg | | New Line 0-Off
# | | | 1-Light Bkg | | | 1-On
# | | | Cursor 0-Underline | | | Interlace 0-Off
# | | | | 1-Block | | | | 1-On
# | | | | | | | |
# 1 1 0 1 1 1 1 1 0 1 0 0 0 0 1 0 <--Standard Settings
# | | | | | | | |
# | | | Auto XON/XOFF 0-Off | | | Power 0-60 Hz
# | | | 1-On | | | 1-50 Hz
# | | ANSI/VT52 0-VT52 | | Bits Per Char. 0-7 Bits
# | | 1-ANSI | | 1-8 Bits
# | Keyclick 0-Off | Parity 0-Off
# | 1-On | 1-On
# Margin Bell 0-Off Parity Sense 0-Odd
# 1-On 1-Even
#
# The following SET-UP modes are assumed for normal operation:
# ANSI_MODE AUTO_XON/XOFF_ON NEWLINE_OFF 80_COLUMNS
# WRAP_AROUND_ON JUMP_SCROLL_OFF
# Other SET-UP modes may be set for operator convenience or communication
# requirements; I recommend
# AUTOREPEAT_ON BLOCK_CURSOR MARGIN_BELL_OFF SHIFTED_3_#
# Unless you have a graphics add-on such as Digital Engineering's VT640
# (and even then, whenever it can be arranged!) you should set
# INTERLACE_OFF
#
# (vt100: I added <rmam>/<smam> based on the init string, also <OTbs>. -- esr)
vt100|vt100-am|dec vt100 (w/advanced video),
OTbs, mc5i, xenl, xon,
vt#3,
csr=\E[%i%p1%d;%p2%dr, kcub1=\EOD, kcud1=\EOB,
kcuf1=\EOC, kcuu1=\EOA, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4,
mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rc=\E8, rmam=\E[?7l,
rmkx=\E[?1l\E>, rs2=\E<\E>\E[?3;4;5l\E[?7;8h\E[r,
sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;m%?%p9%t\016%e\017%;$<2>,
smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m$<2>,
use=vt100+4bsd, use=vt100+fnkeys,
vt100+4bsd|dec vt100 from 4.0BSD,
am, msgr,
cols#80, it#8, lines#24,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>,
clear=\E[H\E[J$<50>, cr=\r, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C$<2>,
cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA,
cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>,
enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ind=\n, kbs=^H,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O, rmso=\E[m$<2>,
rmul=\E[m$<2>, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;m%?%p9%t\016%e\017%;$<2>,
sgr0=\E[m\017$<2>, smacs=^N, smso=\E[1;7m$<2>,
smul=\E[4m$<2>, tbc=\E[3g,
vt100nam|vt100-nam|vt100 no automargins,
am@, xenl@,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7l\E[?8h, use=vt100-am,
vt100-vb|dec vt100 (w/advanced video) & no beep,
bel@, flash=\E[?5h$<100/>\E[?5l, use=vt100,
# Ordinary vt100 in 132 column ("wide") mode.
vt100-w|vt100-w-am|dec vt100 132 cols (w/advanced video),
cols#132, lines#24,
rs2=\E>\E[?3h\E[?4l\E[?5l\E[?8h, use=vt100-am,
vt100-w-nam|vt100-nam-w|dec vt100 132 cols (w/advanced video no automargin),
cols#132, lines#14, vt@,
rs2=\E>\E[?3h\E[?4l\E[?5l\E[?8h, use=vt100-nam,
# vt100 with no advanced video.
vt100-nav|vt100 without advanced video option,
xmc#1,
blink@, bold@, rev@, rmso=\E[m, rmul@, sgr@, sgr0@, smso=\E[7m,
smul@, use=vt100,
vt100-nav-w|vt100-w-nav|dec vt100 132 cols 14 lines (no advanced video option),
cols#132, lines#14, use=vt100-nav,
# vt100 with one of the 24 lines used as a status line.
# We put the status line on the top.
vt100-s|vt100-s-top|vt100-top-s|vt100 for use with top sysline,
eslok, hs,
lines#23,
clear=\E[2;1H\E[J$<50>, csr=\E[%i%i%p1%d;%p2%dr,
cup=\E[%i%p1%{1}%+%d;%p2%dH$<5>, dsl=\E7\E[1;24r\E8,
fsl=\E8, home=\E[2;1H, is2=\E7\E[2;24r\E8,
tsl=\E7\E[1;%p1%dH\E[1K, use=vt100-am,
# Status line at bottom.
# Clearing the screen will clobber status line.
vt100-s-bot|vt100-bot-s|vt100 for use with bottom sysline,
eslok, hs,
lines#23,
dsl=\E7\E[1;24r\E8, fsl=\E8, is2=\E[1;23r\E[23;1H,
tsl=\E7\E[24;%p1%dH\E[1K, use=vt100-am,
# Most of the `vt100' emulators out there actually emulate a vt102
# This entry (or vt102-nsgr) is probably the right thing to use for
# these.
vt102|dec vt102,
dch1=\E[P, dl1=\E[M, il1=\E[L, rmir=\E[4l, smir=\E[4h,
use=vt100,
vt102-w|dec vt102 in wide mode,
cols#132,
rs3=\E[?3h, use=vt102,
# Many brain-dead PC comm programs that pretend to be `vt100-compatible'
# fail to interpret the ^O and ^N escapes properly. Symptom: the <sgr0>
# string in the canonical vt100 entry above leaves the screen littered
# with little snowflake or star characters (IBM PC ROM character \017 = ^O)
# after highlight turnoffs. This entry should fix that, and even leave
# ACS support working, at the cost of making multiple-highlight changes
# slightly more expensive.
# From: Eric S. Raymond <esr@snark.thyrsus.com> July 22 1995
vt102-nsgr|vt102 no sgr (use if you see snowflakes after highlight changes),
sgr@, sgr0=\E[m, use=vt102,
# VT125 Graphics CRT. Clear screen also erases graphics
# Some vt125's came configured with vt102 support.
vt125|vt125 graphics terminal,
mir,
clear=\E[H\E[2J\EPpS(E)\E\\$<50>, use=vt100,
# This isn't a DEC entry, it came from University of Wisconsin.
# (vt131: I added <rmam>/<smam> based on the init string, also <OTbs> -- esr)
vt131|dec vt131,
OTbs, am, xenl,
cols#80, it#8, lines#24, vt#3,
bel=^G, blink=\E[5m$<2/>, bold=\E[1m$<2/>,
clear=\E[;H\E[2J$<50/>, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub1=^H, cud1=\n, cuf1=\E[C$<2/>,
cup=\E[%i%p1%d;%p2%dH$<5/>, cuu1=\E[A$<2/>,
ed=\E[J$<50/>, el=\E[K$<3/>, home=\E[H, ht=^I,
is2=\E[1;24r\E[24;1H, kbs=^H, kcub1=\EOD, kcud1=\EOB,
kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR,
kf4=\EOS, nel=\r\n, rc=\E8, rev=\E[7m$<2/>, ri=\EM$<5/>,
rmam=\E[?7h, rmkx=\E[?1l\E>, rmso=\E[m$<2/>,
rmul=\E[m$<2/>,
rs1=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
sgr0=\E[m$<2/>, smam=\E[?7h, smkx=\E[?1h\E=,
smso=\E[7m$<2/>, smul=\E[4m$<2/>,
# vt132 - like vt100 but slower and has ins/del line and such.
# I'm told that <smir>/<rmir> are backwards in the terminal from the
# manual and from the ANSI standard, this describes the actual
# terminal. I've never actually used a vt132 myself, so this
# is untested.
#
vt132|DEC vt132,
xenl,
dch1=\E[P$<7>, dl1=\E[M$<99>, il1=\E[L$<99>, ind=\n$<30>,
ip=$<7>, rmir=\E[4h, smir=\E[4l, use=vt100,
# This vt220 description maps F5--F9 to the second block of function keys
# at the top of the keyboard. The "DO" key is used as F10 to avoid conflict
# with the key marked (ESC) on the vt220. See vt220d for an alternate mapping.
# PF1--PF4 are used as F1--F4.
#
# added msgr -TD
vt220-old|vt200-old|DEC VT220 in vt100 emulation mode,
OTbs, OTpt, am, mir, msgr, xenl, xon,
cols#80, lines#24, vt#3,
OTnl=\n,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>, civis=\E[?25l,
- clear=\E[H\E[2J$<50>, cnorm=\E[?25h, cr=\r,
- csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\E[B, cuf1=\E[C,
+ bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>,
+ clear=\E[H\E[2J$<50>, cr=\r, csr=\E[%i%p1%d;%p2%dr,
+ cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH$<10>, cuu1=\E[A, dch1=\E[P,
dl1=\E[M, ed=\E[J$<50>, el=\E[K$<3>, home=\E[H, ht=^I,
if=/usr/share/tabset/vt100, il1=\E[L, ind=\ED$<20/>,
is2=\E[1;24r\E[24;1H, kbs=^H, kcub1=\E[D, kcud1=\E[B,
- kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\EOP,
- kf10=\E[29~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[17~,
- kf6=\E[18~, kf7=\E[19~, kf8=\E[20~, kf9=\E[21~,
- khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, rc=\E8,
- rev=\E[7m$<2>, rf=/usr/share/tabset/vt100,
- ri=\EM$<14/>, rmacs=\E(B$<4>, rmam=\E[?7l, rmir=\E[4l,
- rmso=\E[27m, rmul=\E[24m,
- rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
+ kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf10=\E[29~, kf2=\EOQ,
+ kf3=\EOR, kf4=\EOS, kf5=\E[17~, kf6=\E[18~, kf7=\E[19~,
+ kf8=\E[20~, kf9=\E[21~, kich1=\E[2~, rc=\E8, rev=\E[7m$<2>,
+ rf=/usr/share/tabset/vt100, ri=\EM$<14/>,
+ rmacs=\E(B$<4>, rmam=\E[?7l, rmir=\E[4l, rmso=\E[27m,
+ rmul=\E[24m, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h,
+ sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?
%p9%t\E(0%e\E(B%;$<2>,
sgr0=\E[m$<2>, smacs=\E(0$<2>, smam=\E[?7h, smir=\E[4h,
- smso=\E[7m, smul=\E[4m,
+ smso=\E[7m, smul=\E[4m, use=vt220+pcedit, use=vt220+cvis,
+
+# Here's a picture of the Sun/PC editing keypad:
+# +--------+--------+--------+
+# | Insert | Home | PageUp |
+# +--------+--------+--------+
+# | Delete | End | PageDn |
+# +--------+--------+--------+
+#
+# VT220 emulators such as xterm, using PC-keyboards use a different layout than
+# the VT220 keyboard:
+# VT220 PC
+# ----- --
+# Prev PageUp
+# Next PageDn
+# Insert Insert
+# Remove Delete
+# Find Home
+# Select End
+vt220+pcedit|editing-keypad for vt220 using PC keyboard,
+ kdch1=\E[3~, kend=\E[4~, khome=\E[1~, kich1=\E[2~,
+ knp=\E[6~, kpp=\E[5~,
+vt220+vtedit|editing-keypad for vt220 using DEC keyboard,
+ kdch1=\E[3~, kfnd=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
+ kslt=\E[4~,
# A much better description of the VT200/220; used to be vt220-8
# changed rmacs/smacs from shift-in/shift-out to vt200-old's explicit G0/G1
# designation to accommodate bug in pcvt -TD
#
# Here's a picture of the VT220 editing keypad:
# +--------+--------+--------+
# | Find | Insert | Remove |
# +--------+--------+--------+
# | Select | Prev | Next |
# +--------+--------+--------+
-vt220|vt200|dec vt220,
+#
+# Still, this is a "base" entry. Software emulators commonly leave out the
+# DECTCEM feature -TD
+vt220-base|DEC VT220 as emulated,
OTbs, am, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, vt#3,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E)0,
flash=\E[?5h$<200/>\E[?5l, home=\E[H, ht=^I, hts=\EH,
ich=\E[%p1%d@, if=/usr/share/tabset/vt100,
il=\E[%p1%dL, il1=\E[L, ind=\ED,
is2=\E[?7h\E[>\E[?1l\E F\E[?4l, kbs=^H, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kf1=\EOP,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
kf14=\E[26~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf6=\E[17~,
- kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~,
- khlp=\E[28~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
- krdo=\E[29~, kslt=\E[4~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4,
- nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E(B$<4>,
- rmam=\E[?7l, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m,
- rs1=\E[?3l, sc=\E7,
+ kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khlp=\E[28~,
+ krdo=\E[29~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, nel=\EE,
+ rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E(B$<4>, rmam=\E[?7l,
+ rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs1=\E[?3l, sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?
%p9%t\E(0%e\E(B%;$<2>,
sgr0=\E[m\E(B, smacs=\E(0$<2>, smam=\E[?7h, smir=\E[4h,
- smso=\E[7m, smul=\E[4m, tbc=\E[3g, use=ansi+pp,
- use=ansi+enq,
+ smso=\E[7m, smul=\E[4m, tbc=\E[3g, use=vt220+vtedit,
+ use=ansi+pp, use=ansi+enq,
+vt220|vt200|dec vt220,
+ use=vt220+cvis, use=vt220-base,
vt220-w|vt200-w|DEC vt220 in wide mode,
cols#132,
rs3=\E[?3h, use=vt220,
vt220-8bit|vt220-8|vt200-8bit|vt200-8|dec vt220/200 in 8-bit mode,
OTbs, am, mc5i, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, vt#3,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\2335m, bold=\2331m, clear=\233H\233J, cr=\r,
csr=\233%i%p1%d;%p2%dr, cub=\233%p1%dD, cub1=^H,
cud=\233%p1%dB, cud1=\n, cuf=\233%p1%dC, cuf1=\233C,
cup=\233%i%p1%d;%p2%dH, cuu=\233%p1%dA, cuu1=\233A,
dch=\233%p1%dP, dch1=\233P, dl=\233%p1%dM, dl1=\233M,
ech=\233%p1%dX, ed=\233J, el=\233K, el1=\2331K, enacs=\E)0,
flash=\233?5h$<200/>\233?5l, home=\233H, ht=^I, hts=\EH,
ich=\233%p1%d@, if=/usr/share/tabset/vt100,
il=\233%p1%dL, il1=\233L, ind=\ED,
is2=\233?7h\233>\233?1l\E F\233?4l, kbs=^H,
kcub1=\233D, kcud1=\233B, kcuf1=\233C, kcuu1=\233A,
kdch1=\2333~, kf1=\EOP, kf10=\23321~, kf11=\23323~,
kf12=\23324~, kf13=\23325~, kf14=\23326~, kf17=\23331~,
kf18=\23332~, kf19=\23333~, kf2=\EOQ, kf20=\23334~,
kf3=\EOR, kf4=\EOS, kf6=\23317~, kf7=\23318~, kf8=\23319~,
kf9=\23320~, kfnd=\2331~, khlp=\23328~, khome=\233H,
kich1=\2332~, knp=\2336~, kpp=\2335~, krdo=\23329~,
kslt=\2334~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, mc0=\233i,
mc4=\2334i, mc5=\2335i, nel=\EE, rc=\E8, rev=\2337m, ri=\EM,
rmacs=\E(B, rmam=\233?7l, rmir=\2334l, rmso=\23327m,
rmul=\23324m, rs1=\233?3l, sc=\E7,
sgr=\2330%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m
%?%p9%t\E(0%e\E(B%;$<2>,
sgr0=\2330m\E(B, smacs=\E(0, smam=\233?7h, smir=\2334h,
- smso=\2337m, smul=\2334m, tbc=\2333g,
+ smso=\2337m, smul=\2334m, tbc=\2333g, use=vt220+cvis8,
# vt220d:
# This vt220 description regards F6--F10 as the second block of function keys
# at the top of the keyboard. This mapping follows the description given
# in the VT220 Programmer Reference Manual and agrees with the labeling
# on some terminals that emulate the vt220. There is no support for an F5.
# See vt220 for an alternate mapping.
#
vt220d|DEC VT220 in vt100 mode with DEC function key labeling,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
kf18=\E[32~, kf19=\E[33~, kf20=\E[34~, kf5@, kf6=\E[17~,
kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, use=vt220-old,
vt220-nam|v200-nam|VT220 in vt100 mode with no auto margins,
am@,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7l\E[?8h, use=vt220,
# vt220 termcap written Tue Oct 25 20:41:10 1988 by Alex Latzko
# (not an official DEC entry!)
# The problem with real vt220 terminals is they don't send escapes when in
# in vt220 mode. This can be gotten around two ways. 1> don't send
# escapes or 2> put the vt220 into vt100 mode and use all the nifty
# features of vt100 advanced video which it then has.
#
# This entry takes the view of putting a vt220 into vt100 mode so
# you can use the escape key in emacs and everything else which needs it.
#
# You probably don't want to use this on a VMS machine since VMS will think
# it has a vt220 and will get fouled up coming out of emacs
#
# From: Alexander Latzko <latzko@marsenius.rutgers.edu>, 30 Dec 1996
# (Added vt100 <rc>,<sc> to quiet a tic warning -- esr)
# added msgr -TD
vt200-js|vt220-js|dec vt200 series with jump scroll,
am, msgr,
cols#80,
bel=^G, clear=\E[H\E[J, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub1=^H, cud1=\n, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H,
ht=^I, il1=\E[L, ind=\ED,
is2=\E[61"p\E[H\E[?3l\E[?4l\E[?1h\E[?5l\E[?6l\E[?7h\E[?8h\E[
?25h\E>\E[m,
kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, nel=\r\ED, rc=\E8,
rf=/usr/share/tabset/vt100, ri=\EM, rmdc=, rmir=\E[4l,
rmkx=\E[?1l\E>, rmso=\E[27m$<5/>, rmul=\E[24m,
rs1=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, smdc=,
smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m$<5/>, smul=\E[4m,
+ use=vt220+cvis,
# This was DEC's vt320. Use the purpose-built one below instead
#vt320|DEC VT320 in vt100 emulation mode,
# use=vt220,
# Use v320n for SCO's LYRIX. Otherwise, use Adam Thompson's vt320-nam.
#
vt320nam|v320n|DEC VT320 in vt100 emul. mode with NO AUTO WRAP mode,
am@,
- rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7l\E[?8h, use=vt220,
+ rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7l\E[?8h,
+ use=vt220-base,
# These entries are not DEC's official ones, they were purpose-built for the
# VT320. Here are the designer's notes:
# <kel> is end on a PC kbd. Actually 'select' on a VT. Mapped to
# 'Erase to End of Field'... since nothing seems to use 'end' anyways...
# khome is Home on a PC kbd. Actually 'FIND' on a VT.
# Things that use <knxt> usually use tab anyways... and things that don't use
# tab usually use <knxt> instead...
# kprv is same as tab - Backtab is useless...
# I left out <sgr> because of its RIDICULOUS complexity,
# and the resulting fact that it causes the termcap translation of the entry
# to SMASH the 1k-barrier...
# From: Adam Thompson <athompso@pangea.ca> Sept 10 1995
# (vt320: uncommented <fsl> --esr)
vt320|vt300|dec vt320 7 bit terminal,
am, hs, mir, msgr, xenl,
cols#80, lines#24, wsl#80,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I,
hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED,
is2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H,
kbs=^?, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
kdch1=\E[3~, kel=\E[4~, kf10=\E[21~, kf11=\E[23~,
kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
kf20=\E[34~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
kf9=\E[20~, khome=\E[1~, kich1=\E[2~, knp=\E[6~, knxt=^I,
kpp=\E[5~, kprv=\E[Z, kslt=\E[4~, nel=\EE, rc=\E8, rev=\E[7m,
rf=/usr/share/tabset/vt300, ri=\EM, rmacs=\E(B,
rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m,
rmul=\E[m,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H,
sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?
%p9%t\E(0%e\E(B%;$<2>,
sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
- use=dec+pp, use=vt220+keypad, use=dec+sl, use=ansi+enq,
+ use=dec+pp, use=vt220+cvis, use=vt220+keypad, use=dec+sl,
+ use=ansi+enq,
vt320-nam|vt300-nam|dec vt320 7 bit terminal with no am to make SAS happy,
am@,
is2=\E>\E[?3l\E[?4l\E[?5l\E[?7l\E[?8h\E[1;24r\E[24;1H,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7l\E[?8h\E[1;24r\E[24;1H, use=vt320,
# We have to init 132-col mode, not 80-col mode.
vt320-w|vt300-w|dec vt320 wide 7 bit terminal,
cols#132, wsl#132,
is2=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H,
rs2=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H, use=vt320,
vt320-w-nam|vt300-w-nam|dec vt320 wide 7 bit terminal with no am,
am@,
is2=\E>\E[?3h\E[?4l\E[?5l\E[?7l\E[?8h\E[1;24r\E[24;1H,
rs2=\E>\E[?3h\E[?4l\E[?5l\E[?7l\E[?8h\E[1;24r\E[24;1H, use=vt320-w,
# VT330 and VT340 -- These are ReGIS and SIXEL graphics terminals
# which are pretty much a superset of the VT320. They have the
# host writable status line, yet another different DRCS matrix size,
# and such, but they add the DEC Technical character set, Multiple text
# pages, selectable length pages, and the like. The difference between
-# the vt330 and vt340 is that the latter has only 2 planes and a monochrome
-# monitor, the former has 4 planes and a color monitor. These terminals
+# the vt330 and vt340 is that the former has only 2 planes and a monochrome
+# monitor, the latter has 4 planes and a color monitor. These terminals
# support VT131 and ANSI block mode, but as with much of these things,
# termcap/terminfo doesn't deal with these features.
#
# Note that this entry is are set up in what was the standard way for GNU
# Emacs v18 terminal modes to deal with the cursor keys in that the arrow
# keys were switched into application mode at the same time the numeric pad
# is switched into application mode. This changes the definitions of the
# arrow keys. Emacs v19 is smarter and mines its keys directly out of
# your termcap or terminfo entry,
#
# From: Daniel Glasser <dag@persoft.persoft.com>, 13 Oct 1993
# (vt340: string capability "sb=\E[M" corrected to "sr";
# also, added <rmam>/<smam> based on the init string -- esr)
vt340|dec-vt340|vt330|dec-vt330|dec vt340 graphics terminal with 24 line page,
am, eslok, hs, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, vt#3,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J,
- cnorm=\E[?25h, cr=\r, csr=\E[%i%p1%d;%p2%dr,
- cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
- cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
- cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
- dl=\E[%p1%dM, dl1=\E[M, dsl=\E[2$~\r\E[1$}\E[K\E[$},
- ed=\E[J, el=\E[K, flash=\E[?5h$<200/>\E[?5l, fsl=\E[$},
- home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL,
- il1=\E[L, ind=\ED,
+ blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
+ csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
+ cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
+ cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
+ dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
+ dsl=\E[2$~\r\E[1$}\E[K\E[$}, ed=\E[J, el=\E[K,
+ flash=\E[?5h$<200/>\E[?5l, fsl=\E[$}, home=\E[H, ht=^I,
+ hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED,
is2=\E<\E\sF\E>\E[?1h\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r
\E[24;1H,
kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf6=\E[17~,
kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, lf1=pf1, lf2=pf2,
lf3=pf3, lf4=pf4, nel=\r\ED, rc=\E8, rev=\E[7m,
rf=/usr/share/tabset/vt300, ri=\EM, rmacs=\E(B,
rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m,
rmul=\E[24m, rs1=\E[?3l, sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?
%p9%t\E(0%e\E(B%;$<2>,
sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
- tsl=\E[2$~\E[1$}\E[1;%dH,
+ tsl=\E[2$~\E[1$}\E[1;%dH, use=vt220+cvis,
# Left/right margins are supported in xterm since patch #279 (2012/05/10)
vt420+lrmm|VT420 left/right margins,
mgc=\E[?69l, smglr=\E[?69h\E[%i%p1%d;%p2%ds,
# DEC doesn't supply a vt400 description, so we add Daniel Glasser's
# (originally written with vt420 as its primary name, and usable for it).
#
# VT400/420 -- This terminal is a superset of the vt320. It adds the multiple
# text pages and long text pages with selectable length of the vt340, along
# with left and right margins, rectangular area text copy, fill, and erase
# operations, selected region character attribute change operations,
# page memory and rectangle checksums, insert/delete column, reception
# macros, and other features too numerous to remember right now. TERMCAP
# can only take advantage of a few of these added features.
#
-# Note that this entry is are set up in what was the standard way for GNU
+# Note that this entry is set up in what was the standard way for GNU
# Emacs v18 terminal modes to deal with the cursor keys in that the arrow
# keys were switched into application mode at the same time the numeric pad
# is switched into application mode. This changes the definitions of the
# arrow keys. Emacs v19 is smarter and mines its keys directly out of
# your termcap entry,
#
# From: Daniel Glasser <dag@persoft.persoft.com>, 13 Oct 1993
# (vt400: string capability ":sb=\E[M:" corrected to ":sr=\E[M:";
# also, added <rmam>/<smam> based on the init string -- esr)
vt400|vt400-24|dec-vt400|dec vt400 24x80 column autowrap,
am, eslok, hs, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, vt#3,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[J$<10/>, cnorm=\E[?25h, cr=\r,
+ blink=\E[5m, bold=\E[1m, clear=\E[H\E[J$<10/>, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
dsl=\E[2$~\r\E[1$}\E[K\E[$}, ed=\E[J$<10/>,
el=\E[K$<4/>, flash=\E[?5h$<200/>\E[?5l, fsl=\E[$},
home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
il=\E[%p1%dL, il1=\E[L, ind=\ED,
is2=\E<\E\sF\E>\E[?1h\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r
\E[24;1H,
kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf6=\E[17~,
kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, lf1=pf1, lf2=pf2,
lf3=pf3, lf4=pf4, nel=\r\ED, rc=\E8, rev=\E[7m,
rf=/usr/share/tabset/vt300, ri=\EM, rmacs=\E(B,
rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m,
rmul=\E[24m, rs1=\E<\E[?3l\E[!p\E[?7h, sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?
%p9%t\E(0%e\E(B%;$<2>,
sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
- tsl=\E[2$~\E[1$}\E[1;%dH, use=dec+sl,
+ tsl=\E[2$~\E[1$}\E[1;%dH, use=dec+sl, use=vt220+cvis,
# (vt420: I removed <kf0>, it collided with <kf10>. I also restored
# a missing <sc> -- esr)
# add msgr and other capabilities from vt220 -TD
vt420|DEC VT420,
am, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, vt#3,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>, civis=\E[?25l,
- clear=\E[H\E[2J$<50>, cnorm=\E[?25h, cr=\r,
- csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
- cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
- cup=\E[%i%p1%d;%p2%dH$<10>, cuu=\E[%p1%dA, cuu1=\E[A,
- dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
- ech=\E[%p1%dX, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K,
- enacs=\E)0, flash=\E[?5h$<200/>\E[?5l, home=\E[H, ht=^I,
- hts=\EH, ich=\E[%p1%d@, if=/usr/share/tabset/vt300,
+ bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>,
+ clear=\E[H\E[2J$<50>, cr=\r, csr=\E[%i%p1%d;%p2%dr,
+ cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
+ cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH$<10>,
+ cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
+ dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J$<50>,
+ el=\E[K$<3>, el1=\E[1K, enacs=\E)0,
+ flash=\E[?5h$<200/>\E[?5l, home=\E[H, ht=^I, hts=\EH,
+ ich=\E[%p1%d@, if=/usr/share/tabset/vt300,
il=\E[%p1%dL, il1=\E[L, ind=\ED, is2=\E[1;24r\E[24;1H,
is3=\E[?67h\E[64;1"p, kbs=^H, kcub1=\E[D, kcud1=\E[B,
- kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kf1=\EOP, kf10=\E[29~,
- kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[17~, kf6=\E[18~,
- kf7=\E[19~, kf8=\E[20~, kf9=\E[21~, kfnd=\E[1~,
- kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, nel=\EE,
- rc=\E8, rev=\E[7m$<2>, rf=/usr/share/tabset/vt300,
- ri=\EM, rmacs=\E(B$<4>, rmam=\E[?7l, rmir=\E[4l, rmkx=\E>,
+ kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf10=\E[29~, kf2=\EOQ,
+ kf3=\EOR, kf4=\EOS, kf5=\E[17~, kf6=\E[18~, kf7=\E[19~,
+ kf8=\E[20~, kf9=\E[21~, nel=\EE, rc=\E8, rev=\E[7m$<2>,
+ rf=/usr/share/tabset/vt300, ri=\EM, rmacs=\E(B$<4>,
+ rmam=\E[?7l, rmir=\E[4l, rmkx=\E>,
rmsc=\E[?0;0r\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h,
rmso=\E[27m, rmul=\E[24m, rs3=\E[?67h\E[64;1"p, sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?
%p9%t\E(0%e\E(B%;$<2>,
sgr0=\E[m\E(B$<2>, smacs=\E(0$<2>, smam=\E[?7h,
smir=\E[4h, smkx=\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
- use=ansi+pp, use=dec+sl, use=ansi+enq,
+ use=vt220+vtedit, use=ansi+pp, use=dec+sl, use=ansi+enq,
+ use=vt220+cvis,
# DEC VT220 and up support DECUDK (user-defined keys). DECUDK (i.e., pfx)
# takes two parameters, the key and the string. Translating the key is
# straightforward (keys 1-5 are not defined on real terminals, though some
# emulators define these):
#
# if (key < 16) then value = key;
# else if (key < 21) then value = key + 1;
# else if (key < 25) then value = key + 2;
# else if (key < 27) then value = key + 3;
# else if (key < 30) then value = key + 4;
# else value = key + 5;
#
# The string must be the hexadecimal equivalent, e.g., "5052494E" for "PRINT".
# There's no provision in terminfo for emitting a string in this format, so the
# application has to know it.
#
vt420pc|DEC VT420 w/PC keyboard,
kdch1=^?, kend=\E[4~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~,
kf12=\E[24~, kf13=\E[11;2~, kf14=\E[12;2~, kf15=\E[13;2~,
kf16=\E[14;2~, kf17=\E[15;2~, kf18=\E[17;2~,
kf19=\E[18;2~, kf2=\E[12~, kf20=\E[19;2~, kf21=\E[20;2~,
kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~, kf25=\E[23~,
kf26=\E[24~, kf27=\E[25~, kf28=\E[26~, kf29=\E[28~,
kf3=\E[13~, kf30=\E[29~, kf31=\E[31~, kf32=\E[32~,
kf33=\E[33~, kf34=\E[34~, kf35=\E[35~, kf36=\E[36~,
kf37=\E[23;2~, kf38=\E[24;2~, kf39=\E[25;2~, kf4=\E[14~,
kf40=\E[26;2~, kf41=\E[28;2~, kf42=\E[29;2~,
kf43=\E[31;2~, kf44=\E[32;2~, kf45=\E[33;2~,
kf46=\E[34;2~, kf47=\E[35;2~, kf48=\E[36;2~, kf5=\E[15~,
kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[H,
pctrm=USR_TERM\:vt420pcdos\:,
pfx=\EP1;1|%?%{16}%p1%>%t%{0}%e%{21}%p1%>%t%{1}%e%{25}%p1%>
%t%{2}%e%{27}%p1%>%t%{3}%e%{30}%p1%>%t%{4}%e%{5}%;%p1%+
%d/%p2%s\E\\,
use=vt420,
vt420pcdos|DEC VT420 w/PC for DOS Merge,
lines#25,
dispc=%?%p1%{19}%=%t\E\023\021%e%p1%{32}%<%t\E%p1%c%e%p1
%{127}%=%t\E\177%e%p1%c%;,
pctrm@,
rmsc=\E[?0;0r\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sgr@,
sgr0=\E[m, smsc=\E[?1;2r\E[34h, use=vt420pc,
vt420f|DEC VT420 with VT kbd; VT400 mode; F1-F5 used as Fkeys,
kdch1=^?, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~,
kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~,
kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
khome=\E[H, lf1=\EOP, lf2=\EOQ, lf3=\EOR, lf4=\EOS,
use=vt420,
vt510|DEC VT510,
use=vt420,
vt510pc|DEC VT510 w/PC keyboard,
use=vt420pc,
vt510pcdos|DEC VT510 w/PC for DOS Merge,
use=vt420pcdos,
# VT520/VT525
#
# The VT520 is a monochrome text terminal capable of managing up to
# four independent sessions in the terminal. It has multiple ANSI
# emulations (VT520, VT420, VT320, VT220, VT100, VT PCTerm, SCO Console)
# and ASCII emulations (WY160/60, PCTerm, 50/50+, 150/120, TVI 950,
# 925 910+, ADDS A2). This terminfo data is for the ANSI emulations only.
#
# Terminal Set-Up is entered by pressing [F3], [Caps Lock]/[F3] or
# [Alt]/[Print Screen] depending upon which keyboard and which
# terminal mode is being used. If Set-Up has been disabled or
# assigned to an unknown key, Set-Up may be entered by pressing
# [F3] as the first key after power up, regardless of keyboard type.
vt520|DEC VT520,
use=ansi+rca, use=vt420, use=ansi+tabs,
vt525|DEC VT525,
use=vt520,
# I just got a brand new Boundless VT520 with that company's "ANSI 2011"
# Keyboard, which replaces the old LK41R-AA keyboard.
#
# In trying to get the function keys to work, I had to cobble my own
# terminfo.src entry, since the existing vt520 entry doesn't include most of
# the function keys. If I blend the entries for "vt420f" and "vt220+keypad"
# I seem to get them all -Mike Gran
vt520ansi|Boundless VT520 ANSI,
use=ansi+rca, use=vt420f, use=vt220+keypad,
use=ansi+tabs,
#### VT100 emulations
# John Hawkinson <jhawk@MIT.EDU> tells us that the EWAN telnet for Windows
# (the best Windows telnet as of September 1995) presents the name `dec-vt100'
# to telnetd. Michael Deutschmann <ldeutsch@mail.netshop.net> informs us
# that this works best with a stock vt100 entry.
dec-vt100|EWAN telnet's vt100 emulation,
use=vt100,
# From: Adrian Garside <94ajg2@eng.cam.ac.uk>, 19 Nov 1996
dec-vt220|DOS tnvt200 terminal emulator,
am@, use=vt220,
# Zstem340 is an (IMHO) excellent VT emulator for PC's. I recommend it to
# anyone who needs PC VT340 emulation. (or anything below that level, for
# that matter -- DEC's ALL-in-1 seems happy with it, as does INFOPLUS's
-# RDBM systems, it includes ReGIS and SiXel support! I'm impressed...
+# RDBM systems, it includes ReGIS and Sixel support! I'm impressed...
# I can send the address if requested.
# (z340: changed garbled \E[5?l to \E[?5l, DEC smooth scroll off -- esr)
# From: Adam Thompson <athompso@pangea.ca> Sept 10 1995
z340|zstem vt340 terminal emulator 132col 42line,
lines#42,
is2=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h\E[1;42r\E[42;1H,
rs2=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h\E[1;42r\E[42;1H, use=vt320-w,
z340-nam|zstem vt340 terminal emulator 132col 42line (no automatic margins),
am@,
is2=\E>\E[?3h\E[?4l\E[?5l\E[?7l\E[?8h\E[1;42r\E[42;1H,
rs2=\E>\E[?3h\E[?4l\E[?5l\E[?7l\E[?8h\E[1;42r\E[42;1H, use=z340,
# expect-5.44.1.15/example/tkterm
# a minimal subset of a vt100 (compare with "news-unk).
#
# The missing "=" in smkx is not a typo (here), but an error in tkterm.
tt|tkterm|Don Libes' tk text widget terminal emulator,
clear=\E[H\E[J, cr=\r, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%p1%d;%p2%dH, cuu1=\E[A, ind=\n, kf1=\EOP, kf2=\EOQ,
kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW,
kf9=\EOX, rmkx=\E[?1l\E>, rmso=\E[m, smkx=\E[?1h\E,
smso=\E[7m,
######## APPLE
#### Terminal.app
# nsterm*|Apple_Terminal - AppKit Terminal.app
#
# Terminal.app is a Terminal emulator bundled with NeXT's NeXTSTEP and
# OPENSTEP/Mach operating systems, and with Apple's Rhapsody, Mac OS X
# Server and Mac OS X operating systems. There is also a
# "terminal.app" in GNUstep, but I believe it to be an unrelated
# codebase and I have not attempted to describe it here.
#
# For NeXTSTEP, OPENSTEP/Mach, Rhapsody and Mac OS X Server 1.0, you
# are pretty much on your own. Use "nsterm-7-m" and hope for the best.
# You might also try "nsterm-7" and "nsterm-old" if you suspect your
# version supports color.
#
# To determine the version of Terminal.app you're using by running:
#
# echo "$TERM_PROGRAM" "$TERM_PROGRAM_VERSION"
#
# For Apple_Terminal v309+, use "nsterm-256color" (or "nsterm-bce")
#
# For Apple_Terminal v200+, use "nsterm-16color" (a.k.a. "nsterm")
#
# For Apple_Terminal v71+/v100+, use "nsterm-bce".
#
# For Apple_Terminal v51+, use "nsterm-7-c" or "nsterm-7-c-s".
#
# For Apple_Terminal v41+, use "nsterm-old", or "nsterm-s".
#
# For all earlier versions (Apple_Terminal), try "nsterm-7-m"
# (monochrome) or "nsterm-7" (color); "nsterm-7-m-s" and "nsterm-7-s"
# might work too, but really you're on your own here since these
# systems are very obsolete and I can't test them. I do welcome
# patches, though :).
# Other Terminals:
#
# For GNUstep_Terminal, you're probably best off using "linux" or
# writing your own terminfo.
# For MacTelnet, you're on your own. It's a different codebase, and
# seems to be somewhere between "vt102", "ncsa" and "xterm-color".
# For iTerm.app, see "iterm".
#
# The AppKit Terminal.app descriptions all have names beginning with
# "nsterm". Note that the statusline (-s) versions use the window
# titlebar as a phony status line, and may produce warnings during
# compilation as a result ("tsl uses 0 parameters, expected 1".)
# Ignore these warnings, or even ignore these entries entirely. Apps
# which need to position the cursor or do other fancy stuff inside the
# status line won't work with these entries. They're primarily useful
# for programs like Pine which provide simple notifications in the
# status line. Please note that non-ASCII characters don't work right
# in the status line, since Terminal.app incorrectly interprets their
# Unicode codepoints as MacRoman codepoints (in earlier Mac OS X
# versions) or only accepts status lines consisting entirely of
# characters from the first 256 Unicode positions (including C1 but
# not C0 or DEL.)
#
# The Mythology* of AppKit Terminal.app:
#
# In the days of NeXTSTEP 0.x and 1.x there were two incompatible
# bundled terminal emulators, Shell and Terminal. Scott Hess wrote a
# shareware replacement for Terminal called "Stuart" which NeXT bought
# and used as the basis for the Terminal.app in NeXTSTEP 2+,
# OPENSTEP/Mach, Apple Rhapsody, Mac OS X Server 1.0, and Mac OS X. I
# don't know the TERM_PROGRAM and TERM_PROGRAM_VERSION settings or
# capabilities for the early versions, but I believe that the
# TERM_PROGRAM_VERSION may have been reset at some point.
#
# The early versions were tailored to the NeXT character set. Sometime
# after the Apple acquisition the encoding was switched to MacRoman
# (initially with serious altcharset bugs due to incomplete conversion
# of the old NeXT code,) and then later to UTF-8. Also sometime during
# or just prior to the early days of Mac OS X, the Terminal grew ANSI
# 8-color support (initially buggy when combined with attributes, but
# that was later fixed.) More recently, around Mac OS X version 10.3
# or so (Terminal.app v100+) xterm-like 16-color support was added. In
# some versions (for instance 133-1 which shipped with Mac OS X
# version 10.4) this suffered from the <bce> bug, but that seems to
# have been fixed in Mac OS X version 10.5 (Terminal.app v240.2+).
#
# In the early days of Mac OS X the terminal was fairly buggy and
# would routinely crash under load. Many of these bugs seem to have
# been fixed around Mac OS X version 10.3 (Terminal.app v100+) but
# some may still remain. This change seems to correspond to
# Terminal.app reporting "xterm-color" as $TERM rather than "vt100" as
# it did previously.
#
# * This may correspond with what actually happened, but I don't
# know. It is based on guesswork, hearsay, private correspondence,
# my faulty memory, and the following online sources and references:
#
# [1] "Three Scotts and a Duane" by Simson L. Garfinkel
# http://www.nextcomputers.org/NeXTfiles/Articles/NeXTWORLD/93.8/93.8.Dec.Community1.html
#
# [2] NeXTSTEP entry from Wikipedia, the free encyclopedia
# https://secure.wikimedia.org/wikipedia/en/wiki/Nextstep
#
# * Renamed the AppKit Terminal.app entry from "Apple_Terminal" to
# "nsterm" to comply with the name length and case conventions and
# limitations of various software packages [notably Solaris terminfo
# and UNIX.] A single Apple_Terminal alias is retained for
# backwards-compatibility.
#
# * Added function key support (F1-F4). These only work in Terminal.app
# version 51, hopefully the capabilities won't cause problems for people
# using version 41.
#
# * Added "full color" (-c) entries which support the 16-color mode in
# version 51.
#
# * By default, version 51 uses UTF-8 encoding with broken altcharset
# support, so "ASCII" (-7) entries without altcharset support were
# added.
# nsterm - AppKit Terminal.app
#
# Apple's Mac OS X includes a Terminal.app derived from the old NeXT
# Terminal.app. It is a partial VT100 emulation with some xterm-like
# extensions. This terminfo was written to describe versions 41
# (shipped with Mac OS X version 10.0) and 51 (shipped with Mac OS X
# version 10.1) of Terminal.app.
#
# Terminal.app runs under the Mac OS X Quartz windowing system (and
# other AppKit-supported windowing systems.) On the Mac OS X machine I
# use, the executable for Terminal.app is:
# /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal
#
# If you're looking for a description of the full-screen system
# console which runs under Apple's Darwin operating system on PowerPC
# platforms, see the "xnuppc" entry instead.
#
# There were no function keys in version 41. In version 51, there are
# four working function keys (F1, F2, F3 and F4.) The function keys
# are included in all of these entries.
#
# It does not support mouse pointer position reporting. Under some
# circumstances the cursor can be positioned using option-click; this
# works by comparing the cursor position and the selected position,
# and simulating enough cursor-key presses to move the cursor to the
# selected position. This technique fails in all but the simplest
# applications.
#
# It provides partial ANSI color support (background colors interacted
# badly with bold in version 41, though, as reflected in :ncv:.) The
# monochrome (-m) entries are useful if you've disabled color support
# or use a monochrome monitor. The full color (-c) entries are useful
# in version 51, which doesn't exhibit the background color bug. They
# also enable an xterm-compatible 16-color mode.
#
# The configurable titlebar is set using xterm-compatible sequences;
# it is used as a status bar in the statusline (-s) entries. Its width
# depends on font sizes and window sizes, but 50 characters seems to
# be the default for an 80x24 window.
#
# The MacRoman character encoding is used for some of the alternate
# characters in the "MacRoman" entries; the "ASCII" (-7) entries
# disable alternate character set support entirely, and the "VT100"
# (-acs) entries rely instead on Terminal.app's own buggy VT100
# graphics emulation, which seems to think the character encoding is
# the old NeXT charset instead of MacRoman. The "ASCII" (-7) entries
# are useful in Terminal.app version 51, which supports UTF-8 and
# other ASCII-compatible character encodings but does not correctly
# implement VT100 graphics; once VT100 graphics are correctly
# implemented in Terminal.app, the "VT100" (-acs) entries should be
# usable in any ASCII-compatible character encoding [except perhaps
# in UTF-8, where some experts argue for disallowing alternate
# characters entirely.]
#
# Terminal.app reports "vt100" as the terminal type, but exports
# several environment variables which may aid detection in a shell
# profile (i.e. .profile or .login):
#
# TERM=vt100
# TERM_PROGRAM=Apple_Terminal
# TERM_PROGRAM_VERSION=41 # in Terminal.app version 41
# TERM_PROGRAM_VERSION=51 # in Terminal.app version 51
#
# For example, the following Bourne shell script would detect the
# correct terminal type:
#
# if [ :"$TERM" = :"vt100" -a :"$TERM_PROGRAM" = :"Apple_Terminal" ]
# then
# export TERM
# if [ :"$TERM_PROGRAM_VERSION" = :41 ]
# then
# TERM="nsterm-old"
# else
# TERM="nsterm-c-7"
# fi
# fi
#
# In a C shell derivative, this would be accomplished by:
#
# if ( $?TERM && $?TERM_PROGRAM && $?TERM_PROGRAM_VERSION) then
# if ( :"$TERM" == :"vt100" && :"$TERM_PROGRAM" == :"Apple_Terminal" ) then
# if ( :"$TERM_PROGRAM_VERSION" == :41 ) then
# setenv TERM "nsterm-old"
# else
# setenv TERM "nsterm-c-7"
# endif
# endif
# endif
# The '+' entries are building blocks
nsterm+7|AppKit Terminal.app v41+ basic capabilities w/ASCII charset,
am, bw, msgr, xenl, xon,
cols#80, it#8, lines#24,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K,
el1=\E[1K, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L,
ind=\n, invis=\E[8m, kbs=^?, kcub1=\EOD, kcud1=\EOB,
kcuf1=\EOC, kcuu1=\EOA, kent=\EOM, rc=\E8, rev=\E[7m, ri=\EM,
rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?
%p5%t;2%;%?%p7%t;8%;m,
sgr0=\E[m, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m,
smul=\E[4m, tbc=\E[3g, use=vt100+enq, use=vt100+pfkeys,
nsterm+acs|AppKit Terminal.app v41+ basic capabilities w/VT100 alternate-charset,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
enacs=\E(B\E)0, rmacs=^O,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?
%p5%t;2%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, use=nsterm+7,
nsterm+mac|AppKit Terminal.app v41+ basic capabilities w/MacRoman alternate-charset,
acsc=+\335\,\334-\366.\3770#`\327a\:f\241g\261h#i
\360jjkkllmmnno\370p\370q\321rrssttuuvvwwxxy\262z\263{
\271|\255}\243~\245,
enacs=\E(B\E)0, rmacs=^O,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?
%p5%t;2%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, use=nsterm+7,
# compare with xterm+sl-twm
nsterm+s|AppKit Terminal.app v41+ status-line (window titlebar) support,
wsl#50, use=xterm+sl-twm,
nsterm+c|AppKit Terminal.app v51+ full color support (including 16 colors),
op=\E[0m, use=ibm+16color,
nsterm+c41|AppKit Terminal.app v41 color support,
colors#8, ncv#37, pairs#64,
op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
# These are different combinations of the building blocks
# ASCII charset (-7)
nsterm-m-7|nsterm-7-m|AppKit Terminal.app v41+ w/ASCII charset (monochrome),
use=nsterm+7,
nsterm-m-s-7|nsterm-7-m-s|AppKit Terminal.app v41+ w/ASCII charset (monochrome w/statusline),
use=nsterm+s, use=nsterm+7,
nsterm-7|AppKit Terminal.app v41+ w/ASCII charset (color),
use=nsterm+c41, use=nsterm+7,
nsterm-7-c|nsterm-c-7|AppKit Terminal.app v51+ w/ASCII charset (full color),
use=nsterm+c, use=nsterm+7,
nsterm-s-7|nsterm-7-s|AppKit Terminal.app v41+ w/ASCII charset (color w/statusline),
use=nsterm+s, use=nsterm+c41, use=nsterm+7,
nsterm-c-s-7|nsterm-7-c-s|AppKit Terminal.app v51+ w/ASCII charset (full color w/statusline),
use=nsterm+s, use=nsterm+c, use=nsterm+7,
# VT100 alternate-charset (-acs)
nsterm-m-acs|nsterm-acs-m|AppKit Terminal.app v41+ w/VT100 alternate-charset (monochrome),
use=nsterm+acs,
nsterm-m-s-acs|nsterm-acs-m-s|AppKit Terminal.app v41+ w/VT100 alternate-charset (monochrome w/statusline),
use=nsterm+s, use=nsterm+acs,
nsterm-acs|AppKit Terminal.app v41+ w/VT100 alternate-charset (color),
use=nsterm+c41, use=nsterm+acs,
nsterm-c-acs|nsterm-acs-c|AppKit Terminal.app v51+ w/VT100 alternate-charset (full color),
use=nsterm+c, use=nsterm+acs,
nsterm-s-acs|nsterm-acs-s|AppKit Terminal.app v41+ w/VT100 alternate-charset (color w/statusline),
use=nsterm+s, use=nsterm+c41, use=nsterm+acs,
nsterm-c-s-acs|nsterm-acs-c-s|AppKit Terminal.app v51+ w/VT100 alternate-charset (full color w/statusline),
use=nsterm+s, use=nsterm+c, use=nsterm+acs,
# MacRoman charset
nsterm-m|AppKit Terminal.app v41+ w/MacRoman charset (monochrome),
use=nsterm+mac,
nsterm-m-s|AppKit Terminal.app v41+ w/MacRoman charset (monochrome w/statusline),
use=nsterm+s, use=nsterm+mac,
nsterm-old|AppKit Terminal.app v41+ w/MacRoman charset (color),
use=nsterm+c41, use=nsterm+mac,
nsterm-c|AppKit Terminal.app v51+ w/MacRoman charset (full color),
use=nsterm+c, use=nsterm+mac,
nsterm-s|AppKit Terminal.app v41+ w/MacRoman charset (color w/statusline),
use=nsterm+s, use=nsterm+c41, use=nsterm+mac,
nsterm-c-s|AppKit Terminal.app v51+ w/MacRoman charset (full color w/statusline),
use=nsterm+s, use=nsterm+c, use=nsterm+mac,
# In Mac OS X version 10.5 the format of the preferences has changed
# and a new, more complex technique is needed, e.g.,
#
# python -c 'import sys,objc;NSUserDefaults=objc.lookUpClass(
# "NSUserDefaults");ud=NSUserDefaults.alloc();
# ud.init();prefs=ud.persistentDomainForName_(
# "com.apple.Terminal");prefs["Window Settings"][
# prefs["Default Window Settings"]]["TerminalType"
# ]=sys.argv[1];ud.setPersistentDomain_forName_(prefs,
# "com.apple.Terminal")' nsterm-16color
#
# and it is still not settable from the preferences dialog. This is
# tracked under rdar://problem/7365108 and rdar://problem/7365134
# in Apple's bug reporter.
#
# In OS X 10.5 (Leopard) the TERM which can be set in the preferences dialog
# defaults to xterm-color. Alternative selections are ansi, dtterm, rxvt,
# vt52, vt100, vt102 and xterm.
nsterm-16color|AppKit Terminal.app v240.2+ with Mac OS X version 10.5,
bw@, mir, npc,
- civis=\E[?25l, cnorm=\E[?25h, dch=\E[%p1%dP, dch1=\E[P,
- flash=\E[?5h$<200/>\E[?5l, hpa=\E[%i%p1%dG,
- ich=\E[%p1%d@, ich1=\E[@, kdch1=\E[3~, kend=\E[F,
- kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
- kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
- kf18=\E[22~, kf19=\E[33~, kf20=\E[34~, kf5=\E[15~,
- kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[H,
- knp=\E[6~, kpp=\E[5~, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l,
- smcup=\E7\E[?47h, smir=\E[4h, vpa=\E[%i%p1%dd,
- kLFT5=\E[5D, kRIT5=\E[5C, use=nsterm-c-s-acs,
+ dch=\E[%p1%dP, dch1=\E[P, flash=\E[?5h$<200/>\E[?5l,
+ hpa=\E[%i%p1%dG, ich=\E[%p1%d@, ich1=\E[@, kdch1=\E[3~,
+ kend=\E[F, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
+ kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
+ kf17=\E[31~, kf18=\E[22~, kf19=\E[33~, kf20=\E[34~,
+ kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
+ khome=\E[H, knp=\E[6~, kpp=\E[5~, rmcup=\E[2J\E[?47l\E8,
+ rmir=\E[4l, smcup=\E7\E[?47h, smir=\E[4h,
+ vpa=\E[%i%p1%dd, kLFT5=\E[5D, kRIT5=\E[5C,
+ use=nsterm-c-s-acs, use=vt220+cvis,
# The versions of Terminal.app in Mac OS X version 10.3.x seem to have
# the background color erase feature. The newer version 240.2 in Mac OS X
# version 10.5 does not.
#
# This entry is based on newsgroup comments by Alain Bench, Christian Ebert,
# and D P Schreber comparing to nsterm-c-s-acs.
#
# In Mac OS X version 10.4 and earlier, D P Schreber notes that $TERM
# can be set in Terminal.app, e.g.,
#
# defaults write com.apple.Terminal TermCapString nsterm-bce
#
# and that it is not set in Terminal's preferences dialog.
#
# Modified for OS X 10.8, omitting bw based on testing with tack -TD
#
# Notes:
# * The terminal description matches the default settings.
# * The keyboard is configurable via a dialog.
# * By default khome, kend, knext and kprev are honored only with a
# shift-modifier.
# * There are bindings for control left/right arrow (but not up/down).
# Added those to nsterm-16color, which is the version used for OS X 10.6
# * "Allow VT100 application keypage mode" is by default disabled.
# There is no way to press keypad-comma unless application mode is enabled
# and used.
# * 132-column mode stopped working during vttest's tests. Consider it broken.
# * CHT, REP, SU, SD are buggy.
# * ECH works (also in Leopard), but is not used here for compatibility.
# * The terminal preferences dialog replaces xterm-color by xterm-16color and
# xterm-256color. However, it adds "nsterm", so it is possible to use the
# nsterm entry from this file to override the MacPorts (20110404) or
# system (20081102) copy of this file.
# + In OS X 10.8 (Mountain Lion) the TERM which can be set in the preferences
# dialog defaults to xterm-256color. Alternative selections are ansi,
# dtterm, rxvt, vt52, vt100, vt102, xterm and xterm-16color. However,
# the menu says "Declare terminal as" without promising to actually emulate
# the corresponding terminals. Indeed, changing TERM does not affect the
# emulation itself. This means that
# + the function-keys do not match for dtterm for kf1-kf4 as well as
# khome/kend
# + the color model is the same for each setting of TERM (does not match
# ansi or dtterm).
# + the shift/control/meta key modifiers from rxvt and xterm variants are not
# recognised except for a few special cases, i.e., kRIT5 and kLFT5.
# + the vt52 emulation does not give a usable shell because screen-clearing
# does not work as expected.
# + selecting "xterm" or "xterm-16color" sets TERM to "xterm-256color".
# + OSX 10.9 (Yosemite) added more extended keys in the default configuration
# as well as unmasking F10 (which had been used in the window manager). Those
# keys are listed in this entry.
nsterm-bce|AppKit Terminal.app v71+/v100.1.8+ with Mac OS X version 10.3/10.4 (bce),
bce, use=nsterm-16color,
# This is tested with OS X 10.8 (Mountain Lion), 2012/08/11
# TERM_PROGRAM_VERSION=309
# Earlier reports state that these differences also apply to OS X 10.7 (Lion),
# TERM_PROGRAM_VERSION=303
nsterm-build309|Terminal.app in OS X 10.8,
use=xterm+256setaf, use=nsterm-bce,
# removed bogus kDC7 -TD
nsterm-build326|Terminal.app in OS X 10.9,
kDC=\E[3;2~, kLFT=\E[1;2D, kRIT=\E[1;2C, kcbt=\E[Z,
kf18=\E[32~, kDC5=\E[3;5~, kLFT3=\Eb, kLFT5=\E[1;5D,
kRIT3=\Ef, kRIT5=\E[1;5C, use=nsterm-build309,
# actually "343.7"
nsterm-build343|Terminal.app in OS X 10.10,
kend=\EOF, khome=\EOH, use=nsterm-build326,
# reviewed Terminal.app in El Capitan (version 2.6 build 361) -TD
# Using vttest:
# + no vt52 mode for cursor keys, though vt52 screen works in vttest
# + f1-f4 map to pf1-pf4
# + no vt220 support aside from DECTCEM and ECH
# + there are no protected areas. Forget about anything above vt220.
# + in ECMA-48 cursor movement, VPR and HPR fail. Others work.
# + vttest color 11.6.4 and 11.6.5 (bce for ED/EL and ECH/indexing) are bce
# + but bce fails for 11.6.7.2 (test repeat).
# + SD (11.6.7.3) also fails, but SL/SR/SU work.
# + 11.6.6 (test insert/delete char/line with bce) has several failures.
# + normal (not X10 or Highlight tracking) mouse now works.
# + mouse any-event works
# + mouse button-event works
# + in alternate screen:
# mode 47/48 work
# mode 1047 fails to restore cursor position (do not use)
# mode 1049 fails to restore screen contents (do not use)
# + dtterm window-modify operations work (some messages are not printed)
# + dtterm window-report gives size of window in characters/pixels as
# well as state of window.
# Using tack:
# + there is no difference between cnorm/cvvis
# + has dim/invis/blink (no protect of course)
# + most function keys with shift/control modifiers give beep
# (user can configure, but out-of-the-box is what I record)
# + shift-F5 is \E[25~ through shift-F12 is \E[34~ (skips \E[30~ between
# F8 and F9).
# + kLFT5/kRIT5 work, but not up/down with control-modifier
# + kLFT/kRIT work, but not up/down with shift-modifier
# + there are a few predefined bindings with Alt, but no clear pattern.
# + uses alt-key as UTF-8 "meta" something like xterm altSendsEscape
# Using ncurses test-program with xterm-new:
# + no italics
# Using xterm's scripts:
# + palette for 256-colors is hardcoded.
# + no support for "dynamic colors"
# + no support for tcap-query.
nsterm-build361|Terminal.app in OS X 10.11,
XT,
kmous=\E[M, use=nsterm-build343,
# reviewed Terminal.app in High Sierra (version 2.8 build 400) -TD
# Comparing with build361, little has changed, except that italics work.
# Direct-color is not supported, by the way.
#
# Improved rmso/rmul -TD
nsterm-build400|Terminal.app in OS X 10.13,
rmso=\E[27m, rmul=\E[24m, use=xterm+sm+1006,
use=ecma+italics, use=nsterm-build361,
# This is an alias which should always point to the "current" version
nsterm|nsterm-256color|Apple_Terminal|AppKit Terminal.app,
use=nsterm-build400,
#### iTerm, iTerm2
# iTerm 0.10
#
# iTerm.app from http://iterm.sourceforge.net/ is an alternative (and more
# featureful) terminal emulator for Mac OS X. It is similar enough in
# capabilities to nsterm-16color that I have derived this description from that
# one, but as far as I know they share no code. Many of the features are
# user-configurable, but I attempt only to describe the default configuration
# (B. Sittler).
#
# According to its documentation, iTerm uses terminfo to obtain function key
# definitions. For example, if it is started with TERM=xterm, it uses key
# definitions from that terminal description from the local OSX machine. Those
# $TERM settings may be augmented using the bookmark and profile dialogs.
# However, the behavior seen with tack does not agree with either the terminfo
# description or the function keys in its "xterm" profile.
#
# NOTES:
# with vttest:
# reports primary DA as VT100 with AVO: \E[?1;2c
# reports secondary DA as "\E[>0;95;c"
# supports blink and underline
# displays bold text as red
# recognizes all dtterm controls for modifying/querying window
# resizing via escape sequence is very slow
# supports X11R5 mouse (no X10) and XFree86 mouse (button- and event-tracking)
# supports X11R5 alternate screen and XFree86 1049 (no 1047/1048)
# supports CHA, VPA, VPR, but no other ECMA-48 cursor movement such as HPA
# with tack:
# .
# with ncurses test-program:
# ncurses 'k' has problem in second screen; light background does not fill
# with xterm scripts
# can display/alter xterm-256color cube
# can display/alter xterm-88color cube
iTerm.app|iterm|iTerm.app terminal emulator for Mac OS X,
am, bce, hs, mir, msgr, npc, xenl, xon,
cols#80, it#8, lines#24, wsl#50,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, el1=\E[1K, enacs=\E(B\E)0,
flash=\E[?5h$<200/>\E[?5l, home=\E[H, hpa=\E[%i%p1%dG,
ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL,
il1=\E[L, ind=\n, kLFT=\E[1;2D, kRIT=\E[1;2C, kbs=^?,
kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
kdch1=\E[3~, kend=\EOF, kent=\EOM, kf1=\EOP, kf10=\E[21~,
kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
khome=\EOH, knp=\E[6~, kpp=\E[5~, op=\E[0m, rc=\E8,
rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l,
rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>,
rmso=\E[m, rmul=\E[m,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?
%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E7\E[?47h,
smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, vpa=\E[%i%p1%dd, kEND5=\E[1;5F, kHOM5=\E[1;5H,
use=ansi+enq, use=xterm+sl-twm, use=vt100+keypad,
- use=xterm+x11mouse, use=xterm+256setaf,
+ use=xterm+x11mouse, use=xterm+256setaf, use=vt220+cvis,
# iTerm2 3.0.15
#
# https://www.iterm2.com/
# https://github.com/gnachman/iTerm2
# ~/Library/Preferences/com.googlecode.iterm2.plist
# "iTerm" stalled in 2009. A different set of developers began "iTerm2".
#
# NOTES:
# with vttest:
# reports primary DA as VT100 with AVO: \E[?1;2c
# reports secondary DA as "\E[>0;95;0c"
# numeric keypad application mode does not work
# by default, dtterm window-modifications are ignored
# by default, dtterm window-reports return, but icon as "L", window as "l"
# supports SD/SU, no REP, SL, SR
# supports CBT, CHA, VPA, CNL, CPL, VPR (no HPA, CHT, HPR)
# no improvement to XFree86 1047/1048 modes
# with tack:
# in meta-mode, imitates xterm, sending UTF-8
# special-key modifiers based on xterm use incompatible default for alt/meta
# with ncurses test-program:
# no italics
# no improvement to ncurses 'k'
# with xterm scripts:
# acolors.sh works
#
# Italic text did not work initially, apparently because upgrading did not
# add/change that preference (set in Preferences, Profiles, Text). A new
# install of iTerm 3.0.15 provides italics by default (blinking text is an
# option in the preferences dialog).
#
# 2018/01/21: found xterm+sm+1006 did not work with version 3.1.5
# 2018/05/19: xterm+sm+1006 seems to work with 3.1.6beta -TD
iTerm2.app|iterm2|terminal emulator for Mac OS X,
blink=\E[5m, cbt=\E[Z, dim=\E[2m, kEND=\E[1;2F,
kHOM=\E[1;2H, ka1@, ka3@, kb2@, kc1@, kc3@, kent@, kf13=\E[1;2P,
kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~,
kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~,
kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~,
kf24=\E[24;2~, kind=\E[1;2B, kri=\E[1;2A, nel=\EE,
op=\E[39;49m, rmso=\E[27m, rmul=\E[24m,
rs2=\E[!p\E[?3;4l\E[4l\E>\E[?1000l,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?
%p5%t;2%;m%?%p9%t\016%e\017%;,
kDN3=\E\E[B, kDN4=\E[1;10B, kDN5=\E[1;5B, kDN6=\E[1;6B,
kEND3=\E[1;9F, kEND4=\E[1;10F, kEND6=\E[1;6F,
kEND7=\E[1;13F, kEND8=\E[1;14F, kHOM3=\E[1;9H,
kHOM4=\E[1;10H, kHOM6=\E[1;6H, kHOM7=\E[1;13H,
kHOM8=\E[1;14H, kLFT3=\E\E[D, kLFT4=\E[1;10D,
kLFT5=\E[1;5D, kLFT6=\E[1;6D, kNXT3=\E\E[6~,
kPRV3=\E\E[5~, kRIT3=\E\E[C, kRIT4=\E[1;10C,
kRIT5=\E[1;5C, kRIT6=\E[1;6C, kUP3=\E\E[A, kUP4=\E[1;10A,
kUP5=\E[1;5A, kUP6=\E[1;6A, use=ecma+index,
use=xterm+alt+title, use=ecma+italics, use=iterm,
# xnuppc - Darwin PowerPC Console (a.k.a. "darwin")
#
# On PowerPC platforms, Apple's Darwin operating system uses a
# full-screen system console derived from a NetBSD framebuffer
# console. It is an ANSI-style terminal, and is not really VT-100
# compatible.
#
# Under Mac OS X, this is the system console driver used while in
# single-user mode [reachable by holding down Command-S during the
# boot process] and when logged in using console mode [reachable by
# typing ">console" at the graphical login prompt.]
#
# If you're looking for a description of the Terminal.app terminal
# emulator which runs under the Mac OS X Quartz windowing system (and
# other AppKit-supported windowing systems,) see the "nsterm"
# entry instead.
#
# NOTE: Under Mac OS X version 10.1, the default login window does not
# prompt for user name, instead requiring an icon to be selected from
# a list of known users. Since the special ">console" login is not in
# this list, you must make one of two changes in the Login Window
# panel of the Login section of System Prefs to make the special
# ">console" login accessible. The first option is to enable 'Show
# "Other User" in list for network users', which will add a special
# "Other..." icon to the graphical login panel. Selecting "Other..."
# will present the regular graphical login prompt. The second option
# is to change the 'Display Login Window as:' setting to 'Name and
# password entry fields', which replaces the login panel with a
# graphical login prompt.
#
# There are no function keys, at least not in Darwin 1.3.
#
# It has no mouse support.
#
# It has full ANSI color support, and color combines correctly with
# all three supported attributes: bold, inverse-video and underline.
# However, bold colored text is almost unreadable (bolding is
# accomplished using shifting and or-ing, and looks smeared) so bold
# has been excluded from the list of color-compatible attributes
# [using (ncv)]. The monochrome entry (-m) is useful if you use a
# monochrome monitor.
#
# There is one serious bug with this terminal emulation's color
# support: repositioning the cursor onto a cell with non-matching
# colors obliterates that cell's contents, replacing it with a blank
# and displaying a colored cursor in the "current" colors. There is
# no complete workaround at present [other than using the monochrome
# (-m) entries,] but removing the (msgr) capability seemed to help.
#
# The "standout" chosen was simple reverse-video, although a colorful
# standout might be more aesthetically pleasing. Similarly, the bold
# chosen is the terminal's own smeared bold, although a simple
# color-change might be more readable. The color-bold (-b) entries
# uses magenta colored text for bolding instead. The fancy color (-f
# and -f2) entries use color for bold, standout and underlined text
# (underlined text is still underlined, though.)
#
# Apparently the terminal emulator does support a VT-100-style
# alternate character set, but all the alternate character set
# positions have been left blank in the font. For this reason, no
# alternate character set capabilities have been included in this
# description. The console driver appears to be ASCII-only, so (enacs)
# has been excluded [although the VT-100 sequence does work.]
#
# The default Mac OS X and Darwin installation reports "vt100" as the
# terminal type, and exports no helpful environment variables. To fix
# this, change the "console" entry in /etc/ttys from "vt100" to
# "xnuppc-WxH", where W and H are the character dimensions of your
# console (see below.)
#
# The font used by the terminal emulator is apparently one originally
# drawn by Ka-Ping Yee, and uses 8x16-pixel characters. This
# file includes descriptions for the following geometries:
#
# Pixels Characters Entry Name (append -m for monochrome)
# -------------------------------------------------------------------
# 640x400 80x25 xnuppc-80x25
# 640x480 80x30 xnuppc-80x30
# 720x480 90x30 xnuppc-90x30
# 800x600 100x37 xnuppc-100x37
# 896x600 112x37 xnuppc-112x37
# 1024x640 128x40 xnuppc-128x40
# 1024x768 128x48 xnuppc-128x48
# 1152x768 144x48 xnuppc-144x48
# 1280x1024 160x64 xnuppc-160x64
# 1600x1024 200x64 xnuppc-200x64
# 1600x1200 200x75 xnuppc-200x75
# 2048x1536 256x96 xnuppc-256x96
#
# The basic "xnuppc" entry includes no size information, and the
# emulator includes no reporting capability, so you'll be at the mercy
# of the TTY device (which reports incorrectly on my hardware.) The
# color-bold entries do not include size information.
# The '+' entries are building blocks
xnuppc+basic|Darwin PowerPC Console basic capabilities,
am, bce, mir, xenl,
it#8,
bold=\E[1m, clear=\E[H\E[J, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dsl=\E]2;\007, ed=\E[J, el=\E[K,
el1=\E[1K, home=\E[H, ht=^I, hts=\EH, ind=\n, kbs=^?,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, rc=\E8,
rev=\E[7m, ri=\EM, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m,
rmul=\E[m, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h,
sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m,
sgr0=\E[m, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m,
smul=\E[4m, tbc=\E[3g, use=vt100+keypad,
xnuppc+c|Darwin PowerPC Console ANSI color support,
colors#8, ncv#32, pairs#64,
op=\E[37;40m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
xnuppc+b|Darwin PowerPC Console color-bold support,
ncv#32,
bold=\E[35m,
sgr=\E[0%?%p6%t;35%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m,
use=xnuppc+basic,
xnuppc+f|Darwin PowerPC Console fancy color support,
ncv#35,
sgr=\E[0%?%p6%t;35%;%?%p2%t;36;4%;%?%p1%t;33;44%;%?%p3%t;7%;
m,
smso=\E[33;44m, smul=\E[36;4m, use=xnuppc+b,
xnuppc+f2|Darwin PowerPC Console alternate fancy color support,
ncv#35,
bold=\E[33m,
sgr=\E[0%?%p6%t;33%;%?%p2%t;34%;%?%p1%t;31;47%;%?%p3%t;7%;m,
smso=\E[31;47m, smul=\E[34m, use=xnuppc+basic,
# Building blocks for specific screen sizes
xnuppc+80x25|Darwin PowerPC Console 80x25 support (640x400 pixels),
cols#80, lines#25,
xnuppc+80x30|Darwin PowerPC Console 80x30 support (640x480 pixels),
cols#80, lines#30,
xnuppc+90x30|Darwin PowerPC Console 90x30 support (720x480 pixels),
cols#90, lines#30,
xnuppc+100x37|Darwin PowerPC Console 100x37 support (800x600 pixels),
cols#100, lines#37,
xnuppc+112x37|Darwin PowerPC Console 112x37 support (896x600 pixels),
cols#112, lines#37,
xnuppc+128x40|Darwin PowerPC Console 128x40 support (1024x640 pixels),
cols#128, lines#40,
xnuppc+128x48|Darwin PowerPC Console 128x48 support (1024x768 pixels),
cols#128, lines#48,
xnuppc+144x48|Darwin PowerPC Console 144x48 support (1152x768 pixels),
cols#144, lines#48,
xnuppc+160x64|Darwin PowerPC Console 160x64 support (1280x1024 pixels),
cols#160, lines#64,
xnuppc+200x64|Darwin PowerPC Console 200x64 support (1600x1024 pixels),
cols#200, lines#64,
xnuppc+200x75|Darwin PowerPC Console 200x75 support (1600x1200 pixels),
cols#200, lines#75,
xnuppc+256x96|Darwin PowerPC Console 256x96 support (2048x1536 pixels),
cols#0x100, lines#96,
# These are different combinations of the building blocks
xnuppc-m|darwin-m|Darwin PowerPC Console (monochrome),
use=xnuppc+basic,
xnuppc|darwin|Darwin PowerPC Console (color),
use=xnuppc+c, use=xnuppc+basic,
xnuppc-m-b|darwin-m-b|Darwin PowerPC Console (monochrome w/color-bold),
use=xnuppc+b,
xnuppc-b|darwin-b|Darwin PowerPC Console (color w/color-bold),
use=xnuppc+b, use=xnuppc+c,
xnuppc-m-f|darwin-m-f|Darwin PowerPC Console (fancy monochrome),
use=xnuppc+f,
xnuppc-f|darwin-f|Darwin PowerPC Console (fancy color),
use=xnuppc+f, use=xnuppc+c,
xnuppc-m-f2|darwin-m-f2|Darwin PowerPC Console (alternate fancy monochrome),
use=xnuppc+f2,
xnuppc-f2|darwin-f2|Darwin PowerPC Console (alternate fancy color),
use=xnuppc+f2, use=xnuppc+c,
# Combinations for specific screen sizes
xnuppc-80x25-m|darwin-80x25-m|Darwin PowerPC Console (monochrome) 80x25,
use=xnuppc+80x25, use=xnuppc+basic,
xnuppc-80x25|darwin-80x25|Darwin PowerPC Console (color) 80x25,
use=xnuppc+c, use=xnuppc+80x25, use=xnuppc+basic,
xnuppc-80x30-m|darwin-80x30-m|Darwin PowerPC Console (monochrome) 80x30,
use=xnuppc+80x30, use=xnuppc+basic,
xnuppc-80x30|darwin-80x30|Darwin PowerPC Console (color) 80x30,
use=xnuppc+c, use=xnuppc+80x30, use=xnuppc+basic,
xnuppc-90x30-m|darwin-90x30-m|Darwin PowerPC Console (monochrome) 90x30,
use=xnuppc+90x30, use=xnuppc+basic,
xnuppc-90x30|darwin-90x30|Darwin PowerPC Console (color) 90x30,
use=xnuppc+c, use=xnuppc+90x30, use=xnuppc+basic,
xnuppc-100x37-m|darwin-100x37-m|Darwin PowerPC Console (monochrome) 100x37,
use=xnuppc+100x37, use=xnuppc+basic,
xnuppc-100x37|darwin-100x37|Darwin PowerPC Console (color) 100x37,
use=xnuppc+c, use=xnuppc+100x37, use=xnuppc+basic,
xnuppc-112x37-m|darwin-112x37-m|Darwin PowerPC Console (monochrome) 112x37,
use=xnuppc+112x37, use=xnuppc+basic,
xnuppc-112x37|darwin-112x37|Darwin PowerPC Console (color) 112x37,
use=xnuppc+c, use=xnuppc+112x37, use=xnuppc+basic,
xnuppc-128x40-m|darwin-128x40-m|Darwin PowerPC Console (monochrome) 128x40,
use=xnuppc+128x40, use=xnuppc+basic,
xnuppc-128x40|darwin-128x40|Darwin PowerPC Console (color) 128x40,
use=xnuppc+c, use=xnuppc+128x40, use=xnuppc+basic,
xnuppc-128x48-m|darwin-128x48-m|Darwin PowerPC Console (monochrome) 128x48,
use=xnuppc+128x48, use=xnuppc+basic,
xnuppc-128x48|darwin-128x48|Darwin PowerPC Console (color) 128x48,
use=xnuppc+c, use=xnuppc+128x48, use=xnuppc+basic,
xnuppc-144x48-m|darwin-144x48-m|Darwin PowerPC Console (monochrome) 144x48,
use=xnuppc+144x48, use=xnuppc+basic,
xnuppc-144x48|darwin-144x48|Darwin PowerPC Console (color) 144x48,
use=xnuppc+c, use=xnuppc+144x48, use=xnuppc+basic,
xnuppc-160x64-m|darwin-160x64-m|Darwin PowerPC Console (monochrome) 160x64,
use=xnuppc+160x64, use=xnuppc+basic,
xnuppc-160x64|darwin-160x64|Darwin PowerPC Console (color) 160x64,
use=xnuppc+c, use=xnuppc+160x64, use=xnuppc+basic,
xnuppc-200x64-m|darwin-200x64-m|Darwin PowerPC Console (monochrome) 200x64,
use=xnuppc+200x64, use=xnuppc+basic,
xnuppc-200x64|darwin-200x64|Darwin PowerPC Console (color) 200x64,
use=xnuppc+c, use=xnuppc+200x64, use=xnuppc+basic,
xnuppc-200x75-m|darwin-200x75-m|Darwin PowerPC Console (monochrome) 200x75,
use=xnuppc+200x75, use=xnuppc+basic,
xnuppc-200x75|darwin-200x75|Darwin PowerPC Console (color) 200x75,
use=xnuppc+c, use=xnuppc+200x75, use=xnuppc+basic,
xnuppc-256x96-m|darwin-256x96-m|Darwin PowerPC Console (monochrome) 256x96,
use=xnuppc+256x96, use=xnuppc+basic,
xnuppc-256x96|darwin-256x96|Darwin PowerPC Console (color) 256x96,
use=xnuppc+c, use=xnuppc+256x96, use=xnuppc+basic,
######## DOS/WINDOWS
# CRT is shareware. It implements some xterm features, including mouse.
crt|crt-vt220|CRT 2.3 emulating VT220,
bce, msgr,
ncv@,
- hts=\EH, use=vt100+enq, use=vt220, use=ecma+color,
+ hts=\EH, use=vt100+enq, use=vt220-base, use=ecma+color,
+
+# SecureCRT 8.7.3.2279
+# 8.7.3 was released 2020/08/11
+# (eval 2021/02/05)
+# VanDyke Software, Inc.
+#
+# Advertised features:
+# Xterm 24-bit color
+# Xterm 256-color
+# Double-size characters
+# Xterm extensions for mouse support and changing title bar
+# Emulates VT100, VT102, VT220, VT320, Linux console, SCO ANSI,
+# TN3270, TVI910, TVI925, Wyse 50/60, and ANSI.
+# Changes:
+# Added ANSI sc/rc and REP in 2019/12/17
+# Added TVI910/ TVI925 in 2019/11/20
+#
+# Default:
+# Emulate "Xterm", using "ANSI with 256color"
+# TERM=xterm-256color
+#
+# vttest:
+# DA1 \E[?62;1;2;6;7;8;9c (vt220 with DRCS and NRCS)
+# DA2 \E[>1;136;0c
+# double-sized characters do not work
+# Menu-1 fails (window resizes to 132-columns, but does not repaint)
+# NRCS fails (tried French, but none of the replacements worked)
+# VT100 line-drawing works, except the C/R, etc., are an hline.
+# VT52 works except for S8C1T bug.
+# RIS hangs the terminal.
+# Local SRM does not echo.
+# Some of the VT320/VT220 status reports work, not locator or DECXCPR
+# DECUDK works if I press shift.
+# Fails CHT, CNL, CPL
+# Does not honor bce with ECH
+# ERM/SPA does not work
+# REP has 11 +'s except for final 2 +'s, like PuTTY.
+# Fails SL/SR
+# DECRPM does not respond.
+# dtterm modify/report operations do not work
+# Alternate screen works.
+# Mouse:
+# highlight tracking does not work.
+# any event tracking does not work, but
+# button event tracking does work.
+# DEC locator does not work.
+# SGR coordinates does not work.
+# ncurses:
+# reset6 does reset to 80-columns
+# ncurses RGB edit does not work.
+# direct colors don't work, probably needs semicolons.
+# tack:
+# blink works, but not dim or invis
+# no italics or crossed-out
+# scripts:
+# 256color handles "-r" option (but test/ncurses menu d does not alter)
+# dynamic colors queries do not work, though it seems some can be set.
+# resize.pl gets no reply, resize.sh needs fix for no reply.
+scrt|securecrt|SecureCRT emulating xterm-256color,
+ bce@, km@, npc,
+ bel@, cvvis@, kcbt=\E[Z, kent=\EOM, use=vt220+pcedit,
+ use=xterm+256setaf, use=ecma+index, use=ansi+rep,
+ use=xterm+keypad, use=xterm+pcfkeys, use=xterm-basic,
+
+# Absolute Telnet
+# (eval 2021/02/20)
+# 11.24 was released 2020/08/13
+# Celestial Software
+#
+# Advertised features:
+# Emacs compatibility mode (Meta Keys can be enabled for left/right ALT)
+# Double-size characters
+# Xterm extensions for mouse support
+# Emulates VT52, VT100, VT220, VT320, ansi, xterm, qnx, scoansi,
+# ANSIBBS, WYSE60, Televideo 950.
+#
+# Default:
+# TERM=xterm
+#
+# vttest:
+# DA1: \E[?62;1;2;6;7;8;9;15;22c (VT200 with DRCS, UDK, NRCS)
+# DA2: \E[>1;10;0c
+# However:
+# + NRCS tests do not work
+# + DECUDK test fails
+# + VT100 double-sized characters work
+# menu-1 autowrap does not work
+# supports blinking text
+# VT220 DECSCA last screen (ignoring ECH, etc), leaves fill on top/left
+# VT220 device status reports fail, except operating status
+# 8-bit controls work
+# xterm alternate screen recognized, but cursor restored incorrectly
+# xterm mouse (normal, any event, button event) works
+# xterm highlight-mouse does not work properly, confused with any-event
+# does not recognize SGR-mouse mode
+# supports xterm window-modifiny/reporting controls
+# supports ECMA-48 cursor movement except HPR
+# supports REP and SD, but not ECMA-48 SL, SR, SU
+# tack:
+# italics and crossed-out do not work
+# supports xterm-style modified function-keys, using X11R6 F1-F4.
+# does not support modified cursor-keys or editing-keys
+# uses VT220-style Home/End
+# if alt-keys are enabled,
+# meta-mode sends escape rather than shifting, in 7-bit mode
+# meta-mode does the expected shifting in 8-bit mode
+# scripts:
+# supports 256-colors, including changing palette (ncurses menu d works)
+# supports UTF-8, but honors VT100 line-drawing
+absolute|Absolute Telnet emulating xterm,
+ kcbt=\E[Z, use=ecma+index, use=ansi+rep,
+ use=vt220+pcedit, use=xterm+keypad, use=xterm+app,
+ use=xterm+pcf0, use=xterm+256color, use=xterm+x11mouse,
+ use=xterm-basic,
#### PuTTY
-# PuTTY 0.55 (released 3 August 2004)
+# PuTTY 0.74 (27 June 2020)
# http://www.chiark.greenend.org.uk/~sgtatham/putty/
#
+# PuTTY 0.73 (September 2019)
+# Testing with tack:
+# does not implement italics
+# does not implement cross-out text
+# its settings dialog allows some of the VT100 line-drawing tests to pass
+# (not the padding test, though)
+# Testing with vttest:
+# xterm mouse modes are incomplete: X10, highlight, any-event, and focus in/out modes are not implemented.
+# does not implement protected areas
+# does not implement SL/SR
+#
+# PuTTY 0.71 (March 2019) provided a workable "rep" capability. It also
+# changed longstanding keypad assignments, so that these no longer apply:
+# kLFT=\E[D, kRIT=\E[C, kb2=\E[G,
+#
+# PuTTY recognized xterm's 1006 mouse mode in late 2015; subsequent release was
+# in 2017 (0.70) -TD
+#
# Comparing with 0.51, vttest is much better (only a few problems with the
# cursor position reports and wrapping).
#
-# PuTTY 0.51 (released 14 December 2000)
+# PuTTY 0.51 (14 December 2000)
#
# This emulates vt100 + vt52 (plus a few vt220 features: ech, SRM, DECTCEM, as
# well as SCO and Atari, color palettes from Linux console). Reading the code,
# it is intended to be VT102 plus selected features. By default, it sets $TERM
# to xterm, which is incorrect, since several features are misimplemented:
#
# Alt+key always sends ESC+key, so 'km' capability is removed.
#
# Control responses, wrapping and tabs are buggy, failing a couple of
# screens in vttest.
#
-# xterm mouse support is not implemented (unrelease version may).
+# xterm mouse support is not implemented (unreleased version may).
#
# Several features such as backspace/delete are optional; this entry documents
-# the default behavior -TD
+# the default behavior. None of the combinations of keyboard settings match
+# those used for xterm -TD
#
# PuTTY recognizes xterm's 1049 mode for switching to/from alternate screen,
# but implements it incorrectly as mentioned here:
# http://stackoverflow.com/questions/24613237/terminal-retains-bg-color-after-closing-vim-using-color-scheme-and-putty-256co/37869114#37869114
-# PuTTY recognized xterm's 1006 mode since late 2015; subsequent release was
-# in 2017 (0.70) -TD
putty|PuTTY terminal emulator,
am, bce, bw, ccc, mir, msgr, xenl, xon, XT,
colors#8, it#8, ncv#22, pairs#64, U8#1,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\ED, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM,
dch=\E[%p1%dP, dch1=\E[P,
dispc=%?%p1%{8}%=%t\E%%G\342\227\230\E%%@%e%p1%{10}%=%t\E%%G
\342\227\231\E%%@%e%p1%{12}%=%t\E%%G\342\231\0\E%%@%e
%p1%{13}%=%t\E%%G\342\231\252\E%%@%e%p1%{14}%=%t\E%%G
\342\231\253\E%%@%e%p1%{15}%=%t\E%%G\342\230\274\E%%@
%e%p1%{27}%=%t\E%%G\342\206\220\E%%@%e%p1%{155}%=%t\E
%%G\340\202\242\E%%@%e%p1%c%;,
dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
el1=\E[1K, enacs=\E(B\E)0, flash=\E[?5h$<100/>\E[?5l,
- home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, il=\E[%p1%dL,
- il1=\E[L, ind=\n,
+ home=\E[H, hpa=\E[%i%p1%dG, il=\E[%p1%dL, il1=\E[L, ind=\n,
initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/
%02x%p4%{255}%*%{1000}%/%02x,
is2=\E7\E[r\E[m\E[?7h\E[?1;4;6l\E[4l\E8\E>\E]R,
- kLFT=\E[D, kRIT=\E[C, kb2=\E[G, kbs=^?, kcbt=\E[Z,
- kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
- kdch1=\E[3~, kend=\E[4~, khome=\E[1~, kich1=\E[2~,
- kind=\E[B, knp=\E[6~, kpp=\E[5~, kri=\E[A, kspd=^Z, nel=\r\n,
- oc=\E]R, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
+ kbs=^?, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,
+ kcuu1=\EOA, kind=\E[B, kri=\E[A, kspd=^Z, nel=\r\n, oc=\E]R,
+ op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
rmam=\E[?7l, rmcup=\E[2J\E[?47l, rmir=\E[4l,
rmkx=\E[?1l\E>, rmpch=\E[10m, rmso=\E[27m, rmul=\E[24m,
rs2=\E<\E["p\E[50;6"p\Ec\E[?3l\E]R\E[?1000l,
s0ds=\E[10m, s1ds=\E[11m, s2ds=\E[12m, sc=\E7,
setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E[?47h,
smir=\E[4h, smkx=\E[?1h\E=, smpch=\E[11m, smso=\E[7m,
- smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, E3=\E[3J,
- use=ecma+index, use=xterm+sm+1006, use=putty+fnkeys,
- use=vt102+enq, use=xterm+sl,
+ smul=\E[4m, vpa=\E[%i%p1%dd, E3=\E[3J, use=vt220+pcedit,
+ use=ansi+tabs, use=ansi+rep, use=ecma+index,
+ use=xterm+sm+1006, use=putty+fnkeys, use=vt102+enq,
+ use=xterm+sl, use=vt100+fnkeys, use=putty+keypad,
+ use=vt220+cvis,
+putty+keypad|PuTTY numeric keypad,
+ kp1=\EOq, kp2=\EOr, kp3=\EOs, kp4=\EOt, kp5=\EOu, kp6=\EOv,
+ kp7=\EOw, kp8=\EOx, kp9=\EOy, kpADD=\EOl, kpDIV=\EOQ,
+ kpDOT=\EOn, kpMUL=\EOR, kpNUM=\EOP, kpSUB=\EOS, kpZRO=\EOp,
+
vt100-putty|Reset PuTTY to pure vt100,
rs2=\E<\E["p\Ec\E[?3l\E]R\E[40"p\E[61"p\E[50;1;2"p,
use=vt100,
putty-256color|PuTTY 0.58 with xterm 256-colors,
use=xterm+256setaf, use=putty,
putty-noapp|putty with cursor keys in normal mode,
kLFT=\EOD, kRIT=\EOC, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kind=\EOB, kri=\EOA, rmkx=\E>, smkx=\E=,
use=putty,
# One of the keyboard selections is "VT100+".
# pterm (the X11 port) uses shifted F1-F10 as F11-F20
putty-vt100|VT100+ keyboard layout,
use=putty+fnkeys+vt100, use=putty,
putty-sco|putty with SCO function keys,
use=putty+fnkeys+sco, use=putty,
# PuTTY has more than one section in its Keyboard configuration:
# a) backspace/delete, which we ignore since that choice largely depends on
# whether one matches Unix and BSD or Linux.
# b) home/end keys, also ignored because the "rxvt" setting sends keys which
# are unrelated to rxvt's actual settings.
# c) function keys and keypad - this is the interesting part. None of the
# selections match any of their respective namesakes, but they are shown
# here to help users who expect that the selections do what is implied.
#
# This is the default setting for PuTTY
putty+fnkeys|fn-keys for PuTTY,
use=putty+fnkeys+esc,
putty+fnkeys+esc|ESC[n~ fn-keys for PuTTY,
kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[12~,
kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~,
kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
putty+fnkeys+linux|Linux fn-keys for PuTTY,
kf1=\E[[A, kf2=\E[[B, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E,
use=putty+fnkeys+esc,
putty+fnkeys+xterm|Xterm R6 fn-keys for PuTTY,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
use=putty+fnkeys+esc,
putty+fnkeys+vt400|VT400 fn-keys for PuTTY,
use=putty+fnkeys+esc,
# Shifted F1 is F11. F13-F20 inherit from the defaults, and the last distinct
# key is F20.
putty+fnkeys+vt100|VT100+ fn-keys for PuTTY,
kf1=\EOP, kf10=\EOY, kf11=\EOZ, kf12=\EO[, kf2=\EOQ,
kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW,
kf9=\EOX, use=putty+fnkeys+esc,
# Unlike xterm-sco, this leaves kmous ambiguous with kf1.
#
# Use modifiers to obtain function keys past 12:
# F1-F12 - normal
# F13-F24 - shift
# F25-F36 - control/alt
# F37-F48 - control/shift
#
putty+fnkeys+sco|SCO fn-keys for PuTTY,
kbeg=\E[E, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=^?, kend=\E[F, kf1=\E[M, kf10=\E[V, kf11=\E[W,
kf12=\E[X, kf13=\E[Y, kf14=\E[Z, kf15=\E[a, kf16=\E[b,
kf17=\E[c, kf18=\E[d, kf19=\E[e, kf2=\E[N, kf20=\E[f,
kf21=\E[g, kf22=\E[h, kf23=\E[i, kf24=\E[j, kf25=\E[k,
kf26=\E[l, kf27=\E[m, kf28=\E[n, kf29=\E[o, kf3=\E[O,
kf30=\E[p, kf31=\E[q, kf32=\E[r, kf33=\E[s, kf34=\E[t,
kf35=\E[u, kf36=\E[v, kf37=\E[w, kf38=\E[x, kf39=\E[y,
kf4=\E[P, kf40=\E[z, kf41=\E[@, kf42=\E[[, kf43=\E[\\,
kf44=\E[], kf45=\E[\^, kf46=\E[_, kf47=\E[`, kf48=\E[{,
kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H,
kich1=\E[L, knp=\E[G, kpp=\E[I,
#### mintty
# https://github.com/mintty/mintty
#
# Originally a fork (and reduction) of PuTTY, this has grown from 15ksloc in
-# 2013 to 38ksloc in 2019. That is still smaller than PuTTY (160ksloc), but
-# larger than rxvt (31ksloc).
+# 2013 to 41ksloc in 2020. That is still smaller than PuTTY (160ksloc), but
+# larger than rxvt (31ksloc) and slightly smaller than rxvt-unicode (42ksloc).
#
# Version 3.0 responds to DA as a VT400, however it does not implement the
# application keypad. The assignment of cursor-keys versus modifiers differs
# from xterm (alt-left and alt-right send modifier 7, i.e., alt+control).
#
# Thomas Wolff suggested these extensions:
# blink2 turn on rapid blinking
# blink0 turn off blinking
# norm turn off bold and half-bright mode
# opaq turn off blank mode
# smul2 begin double underline mode
# smol begin overline mode
# rmol exit overline mode
# Font0 use default font
# Font1 use alternative font 1
# ...
# Font10 use alternative font 10
# setal set (under)line color
# ol set default (under)line color
# overs overstrike (print characters over each other)
#
# but see vte-2018 (use Smol/Rmol rather than smol/rmol).
mintty|Cygwin Terminal,
setal=\E[5%p1%dm, use=xterm+256color,
use=mintty+common,
mintty-direct|Cygwin Terminal direct-color,
setal=\E[%?%p1%{8}%<%t5%p1%d%e58\:2\:\:%p1%{65536}%/%d\:%p1
%{256}%/%{255}%&%d\:%p1%{255}%&%d%;m,
use=xterm+direct, use=mintty+common,
mintty+common|shared capabilities for mintty,
km@, npc,
kcbt=\E[Z, kent=\EOM, rmm@, rmpch=\E[10m,
rs1=\Ec\E]104\007, rshm=\E[22m, rsubm=\E[75m,
rsupm=\E[75m, smm@, smpch=\E[11m, sshm=\E[1\:2m,
ssubm=\E[74m, ssupm=\E[73m, Rmol=\E[55m, Smol=\E[53m,
Smulx=\E[4\:%p1%dm, blink2=\E[6m, norm=\E[22m,
opaq=\E[28m, smul2=\E[21m, use=ansi+rep,
use=ecma+strikeout, use=ecma+index, use=vt420+lrmm,
use=xterm+sm+1006, use=xterm+pcfkeys, use=xterm+tmux,
- use=xterm-basic,
+ use=ecma+italics, use=xterm-basic,
# 2019-06-09: These capabilities are commented-out for compatibility with
# existing releases 5.9-6.1, and may be considered for inclusion after the
# release of ncurses 6.2:
# Font0=\E[10m,
# Font1=\E[11m,
# Font2=\E[12m,
# Font3=\E[13m,
# Font4=\E[14m,
# Font5=\E[15m,
# Font6=\E[16m,
# Font7=\E[17m,
# Font8=\E[18m,
# Font9=\E[19m,
# Font10=\E[20m,
# blink0=\E[25m,
# ol=\E[59m,
# overs=\E[8\:7m,
#### TeraTerm
# This entry is for Tera Term Pro version 2.3, for MS-Windows 95/NT written by
# T. Teranishi dated Mar 10, 1998. It is a free software terminal emulator
# (communication program) which supports:
#
# - Serial port connections.
# - TCP/IP (telnet) connections.
# - VT100 emulation, and selected VT200/300 emulation.
# - TEK4010 emulation.
# - File transfer protocols (Kermit, XMODEM, ZMODEM, B-PLUS and
# Quick-VAN).
# - Scripts using the "Tera Term Language".
# - Japanese and Russian character sets.
#
# The program does not come with terminfo or termcap entries. However, the
# emulation (testing with vttest and ncurses) is reasonably close to vt100 (no
# vt52 or doublesize character support; blinking is done with color). Besides
# the HPA, VPA extensions it also implements CPL and CNL.
#
# All of the function keys can be remapped. This description shows the default
# mapping, as installed. Both vt100 PF1-PF4 keys and quasi-vt220 F1-F4 keys
# are supported. F13-F20 are obtained by shifting F3-F10. The editing keypad
# is laid out like vt220, rather than the face codes on the PC keyboard, i.e,
# kfnd Insert
# kslt Delete
# kich1 Home
# kdch1 PageUp
# kpp End
# knp PageDown
#
# ANSI colors are implemented, but cannot be combined with video attributes
# except for reverse.
#
# No fonts are supplied with the program, so the acsc string is chosen to
# correspond with the default Microsoft terminal font.
#
# Tera Term recognizes some xterm sequences, including those for setting and
# retrieving the window title, and for setting the window size (i.e., using
# "resize -s"), though it does not pass SIGWINCH to the application if the
# user resizes the window with the mouse.
teraterm2.3|Tera Term Pro,
km,
ncv#43, vt@,
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i
\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u
\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
- blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J,
- cnorm=\E[?25h, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
- cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
- dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
- flash=\E[?5h$<200/>\E[?5l, hpa=\E[%i%p1%dG,
- il=\E[%p1%dL, il1=\E[L, kdch1=\E[3~, kf1=\E[11~,
+ blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cuf1=\E[C,
+ cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP,
+ dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J,
+ el=\E[K, el1=\E[1K, flash=\E[?5h$<200/>\E[?5l,
+ hpa=\E[%i%p1%dG, il=\E[%p1%dL, il1=\E[L, kf1=\E[11~,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~,
kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~,
- kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, kich1=\E[2~, knp=\E[6~,
- kpp=\E[5~, kslt=\E[4~, op=\E[100m, rev=\E[7m, ri=\EM,
+ kf8=\E[19~, kf9=\E[20~, op=\E[100m, rev=\E[7m, ri=\EM,
rmso=\E[27m, rmul=\E[24m, sgr0=\E[0m\017, smso=\E[7m,
- smul=\E[4m, vpa=\E[%i%p1%dd, use=vt100+enq,
- use=klone+color, use=vt100,
+ smul=\E[4m, vpa=\E[%i%p1%dd, use=vt220+vtedit,
+ use=vt100+enq, use=klone+color, use=vt100,
+ use=vt220+cvis,
# Version 4.59 has regular vt100 line-drawing (so it is no longer necessary
# to choose a Windows OEM font).
#
# Testing with tack:
# - it does not have xenl (suppress that)
# - underline seems to work with color (modify ncv).
# Testing with vttest:
# - wrapping differs from vt100 (menu 1).
# - it recognizes xterm's X10 and normal mouse tracking, but none of the
# other flavors.
# - it recognizes the dtterm window controls for reporting size in
# characters and pixels.
# - it passes SIGWINCH.
teraterm4.59|Tera Term Pro,
bce, xenl@,
ncv#41,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
kmous=\E[M, use=teraterm2.3,
# Version 4.97
#
# Testing with tack:
# - no bell (flash works)
# - bold is yellow, blink is red.
# - default keyboard sends ^? for Delete, can be configured for kdch1
# - no meta mode
# Testing with vttest:
# + autowrap has problems...
# + color-tests for bce feature match xterm's behavior
# + handles most of xterm's mouse-controls other than highlight-tracking.
# xterm's SGR 1006 works.
# + partial support for DEC locator-events
# + implements ECMA-48 SD/SU, but not REP, SL/SR.
# + has a "Tek" window, but does not work with vttest's examples
# + supports the dtterm window modify/report controls
# + responds to DECRQM and DECRQSS controls, but not consistent with DSR
# e.g., for VT220
# + VT220 screen-display tests are ok
# + no VT52 support
# Other tests:
# + recognizes xterm's original direct-colors sequences, but result is
# poor.
# + no UTF-8 apparent when UTF-8 is set, with font Lucida Control
teraterm4.97|Tera Term Pro,
XT, use=ecma+color, use=xterm+sm+1006, use=teraterm4.59,
teraterm-256color|TeraTerm with xterm 256-colors,
use=xterm+256setaf, use=teraterm,
teraterm|Tera Term,
use=teraterm4.97,
#### Command prompt
# Tested with WinNT 4.0, the telnet application assumes the screensize is
# 25x80. This entry uses the 'Terminal' font, to get line-drawing characters.
#
# Other notes:
# a) Fails tack's cup (cursor-addressing) test, though cup works well enough
# for casual (occasional) use. Also fails several of the vttest screens,
# but that is not unusual for vt100 "emulators".
# b) Does not implement vt100 keypad
# c) Recognizes a subset of vt52 controls.
ms-vt100|MS telnet imitating dec vt100,
lines#25,
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i
\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u
\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
ka1@, ka3@, kb2@, kc1@, kc3@, kent@, kf0@, kf1@, kf10@, kf2@, kf3@, kf4@,
kf5@, kf6@, kf7@, kf8@, kf9@, tbc@, use=vt102+enq, use=vt100,
# Tested with Windows 2000, the telnet application runs in a console window,
# also using 'Terminal' font.
#
# Other notes:
# a) This version has no function keys or numeric keypad. Unlike the older
# version, the numeric keypad is entirely ignored.
# b) The program sets $TERM to "ansi", which of course is inaccurate.
ms-vt100-color|vtnt|windows 2000 ansi (sic),
bce,
dch=\E[%p1%dP, ich=\E[%p1%d@, use=ecma+color,
use=ms-vt100,
# Based on comments from Federico Bianchi:
#
# vt100+ is basically a VT102-noSGR with ANSI.SYS colors and a different
# scheme for PF keys.
#
# and PuTTY wishlist:
#
# The modifiers are represented as the codes listed above, prefixed to
# the normal sequences. If the modifier is pressed alone, its sequence
# is transmitted twice in succession. If multiple modifiers apply,
# they're transmitted in the order shift, control, alt.
#
# Shift \E^S
# Alt \E^A,
# Ctrl \E^C,
ms-vt100+|vt100+|windows XP vt100+ (sic),
kdch1=\E-, kend=\Ek, kf1=\E1, kf10=\E0, kf11=\E!, kf12=\E@,
kf13=\E\023\E1, kf14=\E\023\E2, kf15=\E\023\E3,
kf16=\E\023\E4, kf17=\E\023\E5, kf18=\E\023\E6,
kf19=\E\023\E7, kf2=\E2, kf20=\E\023\E8, kf21=\E\023\E9,
kf22=\E\023\E0, kf23=\E\023\E!, kf24=\E\023\E@,
kf25=\E\003\E1, kf26=\E\003\E2, kf27=\E\003\E3,
kf28=\E\003\E4, kf29=\E\003\E5, kf3=\E3, kf30=\E\003\E6,
kf31=\E\003\E7, kf32=\E\003\E8, kf33=\E\003\E9,
kf34=\E\003\E0, kf35=\E\003\E!, kf36=\E\003\E@,
kf37=\E\001\E1, kf38=\E\001\E2, kf39=\E\001\E3, kf4=\E4,
kf40=\E\001\E4, kf41=\E\001\E5, kf42=\E\001\E6,
kf43=\E\001\E7, kf44=\E\001\E8, kf45=\E\001\E9,
kf46=\E\001\E0, kf47=\E\001\E!, kf48=\E\001\E@, kf5=\E5,
kf6=\E6, kf7=\E7, kf8=\E8, kf9=\E9, khome=\Eh, kich1=\E+,
knp=\E/, kpp=\E?, use=ms-vt100-color,
ms-vt-utf8|vt-utf8|UTF-8 flavor of vt100+,
use=ms-vt100+,
# Windows Terminal (Preview)
# Windows 10 1903
# Version 0.2.1831.0
# https://github.com/microsoft/terminal
#
# The task manager shows this as "OpenConsole.exe", which differs
# from the "Windows Command Processor" used for the command-prompt.
#
# The settings dialog does not work (unless the end user expects to open
# profiles.json in Visual Studio). There is no documentation, of course.
#
# Testing via an ssh connection, using openssh:
# - the program sets TERM to cygwin if the tab is set to PowerShell,
# and to xterm-256color if "Legacy". However, in the latter, more tests
# fail in vttest, which does not pay attention to TERM.
# vttest:
# - menu 1 (tests for cursor movement) misbehaves like command-prompt
# - primary DA says this is a vanilla VT100
# - does not flush response to primary DA, leaving a ^M on the end when
# the PowerShell tab is used. Both the "Legacy" tab and the command-prompt
# work properly in this test.
# - in the generic VT100 tests, there are problems with character sets
# (diamond shows as a double-width character, DEL as two replacement-chars).
# - outside of the generic VT100 tests, the program does poorly because most
# of the features are missing.
# - ECH does not work properly
# - a few generic xterm features are supported (set window title), but
# others are missing (such as the mouse).
# - the cursor visible/invisible works in the PowerShell tab, not in "Legacy"
# tack:
# - blink, dim, bold, invis, protect do not work
# - bce works (but per vttest, with ED, EL, not ECH)
# - does not support keypad application mode
# - implements most of the xterm modified keys; sometimes modifiers are ignored
# or simply incorrect
# - sends escape+key rather than implementing meta mode
# other:
# - color palette can be altered, but OSC 104 for resetting does not work
# - crashed with a script used for testing NRCS.
# - does not recognize either xterm+direct or xterm+indirect escapes.
ms-terminal|Windows10 terminal,
npc,
rmkx=\E[?1l, rmm@, smkx=\E[?1h, smm@, use=xterm+256setaf,
use=xterm+pcfkeys, use=ansi+rep, use=ecma+index,
- use=xterm-basic,
+ use=ecma+italics, use=xterm-basic,
#### Visual Studio
+# Visual Studio Code 1.45.0 uses xterm.js 12.8.1 (see https://xtermjs.org/).
+#
+# vttest:
+# - fixes menu 1 problem with wrapping
+# - supports DECALN
+# - fixes menu 8 problem with delete-character
+# - REP, SL/SL work
+# - keypad application mode still does not work; PF1-PF4 are not assigned.
+# - DECRQM/DECRPM do not work
+# - xterm mouse features:
+# - SGR coordinates work; the other modes do not (see vscode #96058)
+# - focus-events are not sent
+# - mouse highlight tracking does not send button event
+# tack/other:
+# - little or no change since previous review
+#
# Visual Studio Code 1.35.1 uses xterm.js (see https://xtermjs.org/).
# https://code.visualstudio.com/docs/editor/integrated-terminal
#
# This sets TERM to xterm-256color, which is a little more successful than
# Windows Terminal.
#
# vttest:
# - menu 1 (cursor movement) has problems with wrapping
# - claims to be a VT100 with AVO, but copies xterm #276's secondary response
# - menu 8 (insert/delete char/line) has problem with delete-character
# - like Windows Terminal, fails the ECH test: neither supports DECALN
# However, the bce test with ECH works.
# - does not support keypad application mode
# - supports most xterm mode controls (except DEC Locator Events)
# - REP, SL/SL do not work, but SD/SU work.
# - the alternate-screen tests fail because it does not support DECALN
# - window modify/report is not supported
# - supports some VT320 presentation reports
# tack:
# - does not support blinking text
# - implements most of the xterm modified keys, with some exceptions:
# - pageup/pagedown do not send escapes
# - alt cursor left/right send escape-b and escape-f
# - sends UTF-8 like xterm for meta mode
# other:
# - mouse mode is not reset by reset-sequence
# - supports italics and dim, but not cross-out or double-underline
# - color-palette cannot be changed
vscode|xterm.js|Visual Studio Code terminal using xterm.js,
npc,
kcbt=\E[Z, rmkx=\E[?1l, smkx=\E[?1h, use=xterm+256setaf,
use=ecma+index, use=xterm+sm+1006, use=xterm+pcfkeys,
- use=xterm-basic,
+ use=ecma+italics, use=xterm-basic,
vscode-direct|Visual Studio Code with direct-colors,
use=xterm+indirect, use=vscode,
######## X TERMINAL EMULATORS
#### XTERM
#
# You can add the following line to your .Xdefaults to change the terminal type
# set by the xterms you start up to my-xterm:
#
# *termName: my-xterm
#
# System administrators can change the default entry for xterm instances
# by adding a similar line to /usr/X11/lib/X11/app-defaults/XTerm. In either
# case, xterm will detect and reject an invalid terminal type, falling back
# to the default of xterm.
#
# X10/6.6 11/7/86, minus alternate screen, plus (csr)
# (xterm: ":MT:" changed to ":km:"; added <smam>/<rmam> based on init string;
# removed (hs, eslok, tsl=\E[?E\E[?%i%dT, fsl=\E[?F, dsl=\E[?E)
# as these seem not to work -- esr)
x10term|vs100-x10|xterm terminal emulator (X10 window system),
OTbs, am, km, mir, msgr, xenl, xon,
cols#80, it#8, lines#65,
bold=\E[1m, clear=\E[H\E[2J, csr=\E[%i%p1%d;%p2%dr,
cub1=^H, cud1=\n, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il=\E[%p1%dL,
il1=\E[L, ind=\n, is2=\E\E[m\E[?7h\E[?1;4l, kbs=^H,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP,
kf2=\EOQ, kf3=\EOR, kf4=\EOS, rev=\E[7m, ri=\EM, rmam=\E[?7l,
rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
sgr0=\E[m, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=,
smso=\E[7m, smul=\E[4m,
# Compatible with the R5 xterm
# (from the XFree86 3.2 distribution, <blink=@> removed)
# added khome/kend, rmir/smir, rmul/smul, hts based on the R5 xterm code - TD
# corrected typos in rs2 string - TD
# added u6-u9 -TD
xterm-r5|xterm R5 version,
OTbs, am, km, msgr, xenl,
cols#80, it#8, lines#24,
bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
il=\E[%p1%dL, il1=\E[L, ind=\n, kcub1=\EOD, kcud1=\EOB,
- kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kdl1=\E[31~,
- kel=\E[8~, kend=\E[4~, kf0=\EOq, kf1=\E[11~, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf2=\E[12~, kf3=\E[13~,
- kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
- kf9=\E[20~, khome=\E[1~, kich1=\E[2~, kil1=\E[30~,
- kmous=\E[M, knp=\E[6~, kpp=\E[5~, rc=\E8, rev=\E[7m, ri=\EM,
+ kcuf1=\EOC, kcuu1=\EOA, kdl1=\E[31~, kel=\E[8~, kf0=\EOq,
+ kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
+ kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~,
+ kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~,
+ kil1=\E[30~, kmous=\E[M, rc=\E8, rev=\E[7m, ri=\EM,
rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
rs2=\E>\E[?1;3;4;5;6l\E[4l\E[?7h\E[m\E[r\E[2J\E[H,
sc=\E7,
sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1
%;m,
sgr0=\E[m, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m,
- smul=\E[4m, tbc=\E[3g, use=vt100+enq, use=xterm+kbs,
+ smul=\E[4m, tbc=\E[3g, use=vt220+pcedit, use=vt100+enq,
+ use=xterm+kbs,
# Compatible with the R6 xterm
# (from XFree86 3.2 distribution, <acsc> and <it> added, <blink@> removed)
# added khome/kend, hts based on the R6 xterm code - TD
# (khome/kend do not actually work in X11R5 or X11R6, but many people use this
# for compatibility with other emulators).
xterm-r6|xterm X11R6 version,
OTbs, am, km, mir, msgr, xenl,
cols#80, it#8, lines#24,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, enacs=\E)0, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL,
il1=\E[L, ind=\n,
is2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8,
- kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
- kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~,
- kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
- kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
- kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~,
- kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- kfnd=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
- kslt=\E[4~, meml=\El, memu=\Em, rc=\E8, rev=\E[7m, ri=\EM,
- rmacs=^O, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l,
- rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
+ kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\E[11~,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
+ kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
+ kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~,
+ kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~,
+ kf8=\E[19~, kf9=\E[20~, kmous=\E[M, meml=\El, memu=\Em,
+ rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmcup=\E[2J\E[?47l\E8,
+ rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
rs2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8, sc=\E7,
sgr0=\E[m, smacs=^N, smcup=\E7\E[?47h, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
- use=xterm+kbs, use=vt100+enq,
+ use=vt220+vtedit, use=xterm+kbs, use=vt100+enq,
xterm-old|antique xterm version,
use=xterm-r6,
# The monochrome version began as a copy of "xtermm" (from Solaris), and was
# initially part of the xterm sources (in XFree86). But "xterm" continued to
# grow, while "xterm-mono" had none of the newer features. Additionally,
# inheriting from "xtermm" runs into several problems, including different
-# function keys as well as the fact that the mouse support is not compatible.
+# function keys as well as the fact that the mouse support is not compatible.
# This entry restores the original intent, intentionally not an alias to
# simplify maintenance -TD
xterm-mono|monochrome xterm,
use=xterm-r6,
# This is the base xterm entry for the xterm supplied with XFree86 3.2 & up.
# The name has been changed and some aliases have been removed.
xterm-xf86-v32|xterm terminal emulator (XFree86 3.2 Window System),
OTbs, am, bce, km, mir, msgr, xenl, XT,
cols#80, it#8, lines#24, ncv@,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?25h, cr=\r,
+ bel=^G, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0,
flash=\E[?5h$<100/>\E[?5l, home=\E[H, hpa=\E[%i%p1%dG,
ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL,
il1=\E[L, ind=\n,
is2=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>,
kbeg=\EOE, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
kdch1=^?, kend=\EOF, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~,
kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~,
kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
kfnd=\E[1~, khome=\EOH, kich1=\E[2~, kmous=\E[M, knp=\E[6~,
kpp=\E[5~, kslt=\E[4~, meml=\El, memu=\Em, rc=\E8, rev=\E[7m,
ri=\EM, rmacs=^O, rmam=\E[?7l, rmcup=\E[2J\E[?47l\E8,
rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m,
rs1=^O, rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;3;4;6l\E[4l\E>,
sc=\E7,
setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E7\E[?47h,
smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, vpa=\E[%i%p1%dd, use=xterm+kbs, use=vt100+enq,
- use=ecma+color, use=vt220+keypad,
+ use=ecma+color, use=vt220+cvis, use=vt220+keypad,
# This is the stock xterm entry supplied with XFree86 3.3, which uses VT100
# codes for F1-F4 except while in VT220 mode.
xterm-xf86-v33|xterm terminal emulator (XFree86 3.3 Window System),
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, use=xterm-xf86-v32,
# This version was released in XFree86 3.3.3 (November 1998).
# Besides providing printer support, it exploits a new feature that allows
# xterm to use terminfo-based descriptions with the titeInhibit resource.
# -- the distribution contained incorrect khome/kend values -TD
xterm-xf86-v333|xterm terminal emulator (XFree86 3.3.3 Window System),
blink=\E[5m, ich1@, invis=\E[8m,
is2=\E[!p\E[?3;4l\E[4l\E>, kdch1=\E[3~, kfnd@, kslt@,
rmcup=\E[?1047l\E[?1048l, rs1=\Ec,
rs2=\E[!p\E[?3;4l\E[4l\E>,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
smcup=\E[?1048h\E[?1047h, use=ansi+pp,
use=xterm-xf86-v33,
# This version was released in XFree86 4.0.
xterm-xf86-v40|xterm terminal emulator (XFree86 4.0 Window System),
npc,
kDC=\E[3;5~, kEND=\EO5F, kHOM=\EO5H, kIC=\E[2;5~,
kLFT=\EO5D, kNXT=\E[6;5~, kPRV=\E[5;5~, kRIT=\EO5C, ka1@,
ka3@, kb2=\EOE, kc1@, kc3@, kcbt=\E[Z, kdch1=\E[3~, kend=\EOF,
kf13=\EO2P, kf14=\EO2Q, kf15=\EO2R, kf16=\EO2S,
kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~,
kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~,
kf23=\E[23;2~, kf24=\E[24;2~, kf25=\EO5P, kf26=\EO5Q,
kf27=\EO5R, kf28=\EO5S, kf29=\E[15;5~, kf30=\E[17;5~,
kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~,
kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~, kf37=\EO6P,
kf38=\EO6Q, kf39=\EO6R, kf40=\EO6S, kf41=\E[15;6~,
kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~,
kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~,
kf48=\E[24;6~, khome=\EOH,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?
%p9%t\016%e\017%;,
use=xterm+alt1049, use=xterm-xf86-v333,
# This version was released in XFree86 4.3.
xterm-xf86-v43|xterm terminal emulator (XFree86 4.3 Window System),
kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~,
kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C,
kbeg@,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?
%p7%t;8%;m%?%p9%t\016%e\017%;,
use=xterm-xf86-v40,
+# Controlling the cursor-visibility is not a "new" feature, but was generally
+# neglected in terminal emulators until the mid-1990s. These would work for
+# the hardware terminals, or for more recent emulators, e.g., xterm.
+vt220+cvis|DECTCEM VT220 cursor-visibility,
+ civis=\E[?25l, cnorm=\E[?25h,
+vt220+cvis8|8-bit variant,
+ civis=\233?25l, cnorm=\233?25h,
+# The cvvis capability was unused in the SVr4 terminal descriptions for the
+# AT&T terminals, and there are no available documents as of 2021 which can
+# provide that it would have worked. The first block is used for those 1980s
+# terminals; the second is used for terminals whose behavior can be verified.
+att610+cvis0|ATT 610 cursor-visibility,
+ civis=\E[?25l, cnorm=\E[?25h\E[?12l,
+att610+cvis|xterm cursor-visibility in XFree86 4.4,
+ civis=\E[?25l, cnorm=\E[?12l\E[?25h, cvvis=\E[?12;25h,
+
# This version was released in XFree86 4.4.
xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
- cnorm=\E[?12l\E[?25h, cvvis=\E[?12;25h, use=ecma+index,
- use=xterm-xf86-v43,
+ use=att610+cvis, use=ecma+index, use=xterm-xf86-v43,
xterm-xfree86|xterm terminal emulator (XFree86),
use=xterm-xf86-v44,
+xterm+nofkeys|building block for xterm fkey-variants,
+ npc,
+ kcbt=\E[Z, kent=\EOM, nel=\EE, use=ecma+index,
+ use=ansi+rep, use=ecma+strikeout, use=vt420+lrmm,
+ use=xterm+sm+1006, use=xterm+tmux, use=ecma+italics,
+ use=xterm+keypad, use=xterm-basic,
+
# This version reflects the current xterm features.
xterm-new|modern xterm terminal emulator,
npc,
- kcbt=\E[Z, kent=\EOM, use=ecma+index, use=ansi+rep,
- use=ecma+strikeout, use=xterm+keypad, use=vt420+lrmm,
- use=xterm+sm+1006, use=xterm+pcfkeys, use=xterm+tmux,
- use=xterm-basic,
+ kcbt=\E[Z, kent=\EOM, nel=\EE, use=ecma+index,
+ use=ansi+rep, use=ecma+strikeout, use=xterm+pcfkeys,
+ use=xterm+nofkeys,
# This fragment is for people who cannot agree on what the backspace key
# should send.
xterm+kbs|fragment for backspace key,
kbs=^H,
#
# This fragment describes as much of XFree86 xterm's "pc-style" function
# keys as will fit into terminfo's 60 function keys.
# From ctlseqs.ms:
# Code Modifiers
# ---------------------------------
# 2 Shift
# 3 Alt
# 4 Shift + Alt
# 5 Control
# 6 Shift + Control
# 7 Alt + Control
# 8 Shift + Alt + Control
# ---------------------------------
# The meta key may also be used as a modifier in this scheme, adding another
# bit to the parameter.
xterm+pcfkeys|fragment for PC-style fkeys,
use=xterm+app, use=xterm+pcf2, use=xterm+pcc2,
use=xterm+pce2,
#
xterm+noapp|fragment with cursor keys in normal mode,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kend=\E[F,
khome=\E[H,
xterm+app|fragment with cursor keys in application mode,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kend=\EOF,
khome=\EOH,
#
# The "PC-style" modifier scheme was introduced in xterm patch #94 (1999/3/27)
# and revised in xterm patch #167 (2002/8/24). Some other terminal emulators
# copied the earlier scheme, as noted in the "use=" clauses in this file.
#
# The original assignments from patch #94 for cursor-keys had some technical
# issues:
#
# A parameter for a function-key to represent a modifier is just more
# bits. But for a cursor-key it may change the behavior of the
# application. For instance, emacs decodes the first parameter of a
# cursor-key as a repeat count.
#
# A parameterized string should (really) not begin with SS3 (\EO).
# Rather, CSI (\E[) should be used.
#
# For these reasons, the original assignments were deprecated. For
# compatibility reasons, they are still available as a setting of xterm's
# modifyCursorKeys resource. These fragments list the modified cursor-keys
# that might apply to xterm+pcfkeys with different values of that resource.
#
# These entries will have warnings when checking with tic because the kri/kind
# capabilities duplicate the kUP/kDN extensions. This is intentional, though
# not part of the original plan. The changes for xterm patch #206 (2005/11/3)
# show that kri/kind were seen much later as part of a set including kLFT/kRIT:
#
# * modify xterm-new terminfo entry to use capabilities for shifted
# scroll forward/reverse as shifted cursor up/down.
#
# In the 1980s when terminfo was defined, the developers made more of
# a distinction between shifted up/down versus shifted left/right since most
# terminals can index (scroll up/down), while few can scroll left/right.
xterm+pcc3|fragment with modifyCursorKeys:3,
kLFT=\E[>1;2D, kRIT=\E[>1;2C, kind=\E[>1;2B,
kri=\E[>1;2A, kDN=\E[>1;2B, kDN3=\E[>1;3B, kDN4=\E[>1;4B,
kDN5=\E[>1;5B, kDN6=\E[>1;6B, kDN7=\E[>1;7B,
kLFT3=\E[>1;3D, kLFT4=\E[>1;4D, kLFT5=\E[>1;5D,
kLFT6=\E[>1;6D, kLFT7=\E[>1;7D, kRIT3=\E[>1;3C,
kRIT4=\E[>1;4C, kRIT5=\E[>1;5C, kRIT6=\E[>1;6C,
kRIT7=\E[>1;7C, kUP=\E[>1;2A, kUP3=\E[>1;3A,
kUP4=\E[>1;4A, kUP5=\E[>1;5A, kUP6=\E[>1;6A,
kUP7=\E[>1;7A,
xterm+pcc2|fragment with modifyCursorKeys:2,
kLFT=\E[1;2D, kRIT=\E[1;2C, kind=\E[1;2B, kri=\E[1;2A,
kDN=\E[1;2B, kDN3=\E[1;3B, kDN4=\E[1;4B, kDN5=\E[1;5B,
kDN6=\E[1;6B, kDN7=\E[1;7B, kLFT3=\E[1;3D, kLFT4=\E[1;4D,
kLFT5=\E[1;5D, kLFT6=\E[1;6D, kLFT7=\E[1;7D,
kRIT3=\E[1;3C, kRIT4=\E[1;4C, kRIT5=\E[1;5C,
kRIT6=\E[1;6C, kRIT7=\E[1;7C, kUP=\E[1;2A, kUP3=\E[1;3A,
kUP4=\E[1;4A, kUP5=\E[1;5A, kUP6=\E[1;6A, kUP7=\E[1;7A,
xterm+pcc1|fragment with modifyCursorKeys:1,
kLFT=\E[2D, kRIT=\E[2C, kind=\E[2B, kri=\E[2A, kDN=\E[2B,
kDN3=\E[3B, kDN4=\E[4B, kDN5=\E[5B, kDN6=\E[6B, kDN7=\E[7B,
kLFT3=\E[3D, kLFT4=\E[4D, kLFT5=\E[5D, kLFT6=\E[6D,
kLFT7=\E[7D, kRIT3=\E[3C, kRIT4=\E[4C, kRIT5=\E[5C,
kRIT6=\E[6C, kRIT7=\E[7C, kUP=\E[2A, kUP3=\E[3A,
kUP4=\E[4A, kUP5=\E[5A, kUP6=\E[6A, kUP7=\E[7A,
xterm+pcc0|fragment with modifyCursorKeys:0,
kLFT=\EO2D, kRIT=\EO2C, kind=\EO2B, kri=\EO2A, kDN=\EO2B,
kDN3=\EO3B, kDN4=\EO4B, kDN5=\EO5B, kDN6=\EO6B, kDN7=\EO7B,
kLFT3=\EO3D, kLFT4=\EO4D, kLFT5=\EO5D, kLFT6=\EO6D,
kLFT7=\EO7D, kRIT3=\EO3C, kRIT4=\EO4C, kRIT5=\EO5C,
kRIT6=\EO6C, kRIT7=\EO7C, kUP=\EO2A, kUP3=\EO3A,
kUP4=\EO4A, kUP5=\EO5A, kUP6=\EO6A, kUP7=\EO7A,
#
# Here are corresponding fragments from xterm patch #216:
#
xterm+pcf0|fragment with modifyFunctionKeys:0,
kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
kf13=\EO2P, kf14=\EO2Q, kf15=\EO2R, kf16=\EO2S,
kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ,
kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~,
kf23=\E[23;2~, kf24=\E[24;2~, kf25=\EO5P, kf26=\EO5Q,
kf27=\EO5R, kf28=\EO5S, kf29=\E[15;5~, kf3=\EOR,
kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~,
kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~,
kf36=\E[24;5~, kf37=\EO6P, kf38=\EO6Q, kf39=\EO6R,
kf4=\EOS, kf40=\EO6S, kf41=\E[15;6~, kf42=\E[17;6~,
kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~,
kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~, kf49=\EO3P,
kf5=\E[15~, kf50=\EO3Q, kf51=\EO3R, kf52=\EO3S,
kf53=\E[15;3~, kf54=\E[17;3~, kf55=\E[18;3~,
kf56=\E[19;3~, kf57=\E[20;3~, kf58=\E[21;3~,
kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~, kf61=\EO4P,
kf62=\EO4Q, kf63=\EO4R, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
#
xterm+pcf2|fragment with modifyFunctionKeys:2,
kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
kf13=\E[1;2P, kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S,
kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ,
kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~,
kf23=\E[23;2~, kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q,
kf27=\E[1;5R, kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR,
kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~,
kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~,
kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R,
kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~, kf42=\E[17;6~,
kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~,
kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~,
kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q, kf51=\E[1;3R,
kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~,
#
# Chunks from xterm #230:
xterm+pce2|fragment with modifyCursorKeys:2,
kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~,
kNXT=\E[6;2~, kPRV=\E[5;2~, kich1=\E[2~, knp=\E[6~,
kpp=\E[5~, kDC3=\E[3;3~, kDC4=\E[3;4~, kDC5=\E[3;5~,
kDC6=\E[3;6~, kDC7=\E[3;7~, kEND3=\E[1;3F, kEND4=\E[1;4F,
kEND5=\E[1;5F, kEND6=\E[1;6F, kEND7=\E[1;7F,
kHOM3=\E[1;3H, kHOM4=\E[1;4H, kHOM5=\E[1;5H,
kHOM6=\E[1;6H, kHOM7=\E[1;7H, kIC3=\E[2;3~, kIC4=\E[2;4~,
kIC5=\E[2;5~, kIC6=\E[2;6~, kIC7=\E[2;7~, kNXT3=\E[6;3~,
kNXT4=\E[6;4~, kNXT5=\E[6;5~, kNXT6=\E[6;6~,
kNXT7=\E[6;7~, kPRV3=\E[5;3~, kPRV4=\E[5;4~,
kPRV5=\E[5;5~, kPRV6=\E[5;6~, kPRV7=\E[5;7~,
use=xterm+edit,
xterm+edit|fragment for 6-key editing-keypad,
kdch1=\E[3~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
use=xterm+pc+edit,
xterm+pc+edit|fragment for pc-style editing keypad,
kend=\E[4~, khome=\E[1~,
xterm+vt+edit|fragment for vt220-style editing keypad,
kfnd=\E[1~, kslt=\E[4~,
# These variations for alternate-screen and title-stacking were introduced by
# xterm patch #331:
xterm+noalt|xterm without altscreen,
rmcup@, smcup@,
xterm+alt1049|xterm 90 feature,
rmcup=\E[?1049l, smcup=\E[?1049h,
xterm+titlestack|xterm 251 feature,
rmcup=\E[23;0;0t, smcup=\E[22;0;0t,
xterm+alt+title|xterm 90 and 251 features combined,
rmcup=\E[?1049l\E[23;0;0t, smcup=\E[?1049h\E[22;0;0t,
# https://invisible-island.net/xterm/xterm.faq.html#xterm_keypad
#
# Xterm's emulation of the VT100 numeric keypad on a PC-keyboard runs into the
# problem that the keypad layout is different, and that the natural choice for
# PF1 is NumLock (which happens to be reserved for other use). To work around
# that, PF1-PF4 are emulated via F1-F4, which leaves the "/", "*" and "+" not
# directly related to VT100.
#
# With the VT220 keypad block that uses the 1-9 keys as suggested in
# terminfo(5), the other keys can be handled with user-defined capabilities:
#
# _______________________________________
# | NumLock | / | * | - |
# | | $Oo | $Oj | $OS |
# |_________|__kpDIV__|__kpMUL__|__kpSUB__|
# | 7 8 9 | |
# | $Ow | $Ox | $Oy | + |
# |_ka1__K1_|_________|_ka3__K3_| $Ok |
# | 4 | 5 | 6 | kpADD |
# | $Ot | $Ou | $Ov | |
# |_________|_kb2__K2_|_________|_________|
# | 1 | 2 | 3 | |
# | $Oq | $Or | $Os | |
# |_kc1__K4_|_________|_kc3__K5_| enter |
# | 0 | . | $OM |
# | $Op | $On | |
# |___________________|_________|_kent_@8_|
#
xterm+keypad|xterm emulating VT100/VT220 numeric keypad,
kp5=\EOE, kpADD=\EOk, kpCMA=\EOl, kpDIV=\EOo, kpDOT=\EOn,
kpMUL=\EOj, kpSUB=\EOm, kpZRO=\EOp, use=vt220+keypad,
#
# Those chunks use the new-style (the xterm oldFunctionKeys resource is false).
# Alternatively, the same scheme with old-style function keys as in xterm-r6
# is shown here (because that is used in mrxvt and mlterm):
xterm+r6f2|xterm with oldFunctionKeys and modifyFunctionKeys:2,
kf1=\E[11~, kf13=\E[11;2~, kf14=\E[12;2~, kf15=\E[13;2~,
kf16=\E[14;2~, kf2=\E[12~, kf25=\E[11;5~, kf26=\E[12;5~,
kf27=\E[13;5~, kf28=\E[14;5~, kf3=\E[13~, kf37=\E[11;6~,
kf38=\E[12;6~, kf39=\E[13;6~, kf4=\E[14~, kf40=\E[14;6~,
kf49=\E[11;3~, kf50=\E[12;3~, kf51=\E[13;3~,
kf52=\E[14;3~, kf61=\E[11;4~, kf62=\E[12;4~,
kf63=\E[13;4~, use=xterm+pcf2,
#
# This chunk is used for building the VT220/Sun/PC keyboard variants.
xterm-basic|modern xterm terminal emulator - common,
- OTbs, am, bce, km, mir, msgr, xenl, AX, XT,
+ OTbs, am, bce, mir, msgr, xenl, AX, XT,
colors#8, cols#80, it#8, lines#24, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=\r,
- csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[2J,
+ cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
- cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
- dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
- el1=\E[1K, flash=\E[?5h$<100/>\E[?5l, home=\E[H,
- hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
- il=\E[%p1%dL, il1=\E[L, ind=\n, invis=\E[8m,
- is2=\E[!p\E[?3;4l\E[4l\E>, kmous=\E[M, meml=\El,
- memu=\Em, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM,
- rmacs=\E(B, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>,
- rmm=\E[?1034l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec,
+ dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM,
+ dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
+ flash=\E[?5h$<100/>\E[?5l, home=\E[H, hpa=\E[%i%p1%dG,
+ ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L,
+ ind=\n, invis=\E[8m, is2=\E[!p\E[?3;4l\E[4l\E>,
+ kmous=\E[M, meml=\El, memu=\Em, op=\E[39;49m, rc=\E8,
+ rev=\E[7m, ri=\EM, rmacs=\E(B, rmam=\E[?7l, rmir=\E[4l,
+ rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m, rs1=\Ec,
rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm,
setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;
%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,
sgr0=\E(B\E[m, smacs=\E(0, smam=\E[?7h, smir=\E[4h,
- smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m, smul=\E[4m,
- tbc=\E[3g, vpa=\E[%i%p1%dd, E3=\E[3J, use=ecma+italics,
- use=ansi+pp, use=xterm+kbs, use=xterm+alt+title,
- use=ansi+enq,
+ smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
+ vpa=\E[%i%p1%dd, E3=\E[3J, use=ansi+pp, use=xterm+kbs,
+ use=xterm+alt+title, use=ansi+enq, use=att610+cvis,
+ use=xterm+meta,
+
+xterm+meta|meta mode for xterm,
+ km,
+ rmm=\E[?1034l, smm=\E[?1034h,
# From: David J. MacKenzie <djm@va.pubnix.com>, 14 Nov 1997
# In retrospect, something like xterm-r6 was intended here -TD
xterm-xi|xterm on XI Graphics Accelerated X under BSD/OS 3.1,
rmso=\E[m, rmul=\E[m, use=xterm-xf86-v33,
#### XTERM Colors
# 16-colors is one of the variants of XFree86 3.3 xterm, updated for 4.0
# (T.Dickey)
#
# If configured to support 88- or 256-colors (which is fairly common in 2009),
# xterm also recognizes the control sequences for initc -TD
xterm-16color|xterm with 16 colors like aixterm,
ccc,
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*
%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
use=xterm+osc104, use=ibm+16color, use=xterm-new,
# 256-colors is a compile-time feature of XFree86 xterm beginning with
# xterm patch #111 (1999/7/10) -TD
-xterm+256color|xterm 256-color feature,
+xterm+256color|original xterm 256-color feature,
ccc,
colors#0x100, pairs#0x10000,
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*
%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
oc=\E]104\007,
setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;
5;%p1%d%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5
;%p1%d%;m,
setb@, setf@,
+# The semicolon separator used in xterm+256color does not follow the ECMA-48
+# standard. Since patch #282 (in 2012), xterm has supported both the legacy
+# subparameter separator (semicolon) and the standard (colon).
+#
+# The xterm FAQ gives some of the history:
+# https://invisible-island.net/xterm/xterm.faq.html#color_by_number
+xterm+256color2|xterm 256-color feature,
+ setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48
+ \:5\:%p1%d%;m,
+ setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38\:
+ 5\:%p1%d%;m,
+ use=xterm+256color,
+
# xterm OSC 104 resets the color palette. Using it as part of xterm+256color
# has the drawback that some of the xterm-alikes which use that building block
# require a different approach to rs1 -TD
xterm+osc104|reset color palette,
oc=\E]104\007, rs1=\Ec\E]104\007,
# palette is hardcoded...
xterm+256setaf|xterm 256-color (set-only),
ccc@,
colors#0x100, pairs#0x10000,
initc@, op=\E[39;49m,
setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;
5;%p1%d%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5
;%p1%d%;m,
setb@, setf@,
# 88-colors is a compile-time feature of XFree86 xterm beginning with
# xterm patch #115 (1999/9/18) -TD
#
# Note that the escape sequences used are the same as for 256-colors - xterm
# has a different table of default color resource values. If built for
# 256-colors, it can still handle an 88-color palette by using the initc
# capability.
#
# At this time (2007/7/14), except for rxvt 2.7.x, none of the other terminals
# which support the xterm+256color feature support the associated initc
# capability. So it is cancelled in the entries which use this and/or the
# xterm+256color block.
#
# The default color palette for the 256- and 88-colors are different. A
# given executable will have one palette (perhaps compiled-in). If the program
# supports xterm's control sequence, it can be programmed using initc.
-xterm+88color|xterm 88-color feature,
+xterm+88color|original xterm 88-color feature,
colors#88, pairs#7744, use=xterm+256color,
+xterm+88color2|xterm 88-color feature,
+ colors#88, pairs#7744, use=xterm+256color2,
+
# These variants of XFree86 3.9.16 xterm are built as a configure option.
xterm-256color|xterm with 256 colors,
use=xterm+osc104, use=xterm+256color, use=xterm-new,
xterm-88color|xterm with 88 colors,
use=xterm+osc104, use=xterm+88color,
use=xterm-256color,
# Emacs 26.1 and later support direct color mode in terminals, using a
# combination of user-defined capabilities and ncurses-dependent function
# calls. We will not include that here.
#
# Here is a first revision, which (disregarding the reuse of colors 1-7 which
# is of interest only to the numerically illiterate), is compatible with other
# terminal descriptions written for curses. It relies upon the extended range
# for numeric capabilities provided in ncurses 6.1:
xterm+direct2|xterm with direct-color indexing,
RGB,
- colors#0x1000000, pairs#0x10000,
+ colors#0x1000000, pairs#0x10000, CO#8,
initc@, op=\E[39;49m,
setab=\E[%?%p1%{8}%<%t4%p1%d%e48\:2\:%p1%{65536}%/%d\:%p1
%{256}%/%{255}%&%d\:%p1%{255}%&%d%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%d%e38\:2\:%p1%{65536}%/%d\:%p1
%{256}%/%{255}%&%d\:%p1%{255}%&%d%;m,
setb@, setf@,
xterm-direct2|xterm with direct-color indexing (old),
use=xterm+direct2, use=xterm+titlestack, use=xterm,
# That in turn had a problem: in the original patch submitted for KDE konsole
# in 2006, the submitter and the developer alike overlooked a "color space
# identifier" parameter. This version provides for that parameter:
xterm+direct|xterm with direct-color indexing,
RGB,
- colors#0x1000000, pairs#0x10000,
+ colors#0x1000000, pairs#0x10000, CO#8,
initc@, op=\E[39;49m,
setab=\E[%?%p1%{8}%<%t4%p1%d%e48\:2\:\:%p1%{65536}%/%d\:%p1
%{256}%/%{255}%&%d\:%p1%{255}%&%d%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%d%e38\:2\:\:%p1%{65536}%/%d\:%p1
%{256}%/%{255}%&%d\:%p1%{255}%&%d%;m,
setb@, setf@,
xterm-direct|xterm with direct-color indexing,
use=xterm+direct, use=xterm,
# Here are corresponding flavors for terminals which could use the feature:
iterm2-direct|iTerm2 with direct-color indexing,
use=xterm+direct, use=iterm2,
mlterm-direct|mlterm with direct-color indexing,
use=xterm+direct, use=mlterm,
# Meanwhile, in KDE #107487, the patch submitter and the developer both saw
# that xterm's original implementation should have used colons for the
# subparameter separators, but chose not to correct this in konsole. As of
# late 2017, konsole still accepts only the nonstandard semicolon delimiters.
xterm+indirect|xterm with direct-color indexing (old),
RGB,
colors#0x1000000, pairs#0x10000,
initc@, op=\E[39;49m,
setab=\E[%?%p1%{8}%<%t4%p1%d%e48;2;%p1%{65536}%/%d;%p1%{256}
%/%{255}%&%d;%p1%{255}%&%d%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%d%e38;2;%p1%{65536}%/%d;%p1%{256}
%/%{255}%&%d;%p1%{255}%&%d%;m,
setb@, setf@,
konsole-direct|konsole with direct-color indexing,
use=xterm+indirect, use=konsole,
st-direct|st with direct-color indexing,
use=xterm+indirect, use=st,
vte-direct|vte with direct-color indexing,
use=xterm+indirect, use=vte,
# reportedly in Apple's Mohave (fall 2018), but untested -TD
nsterm-direct|nsterm with direct-color indexing,
use=xterm+indirect, use=nsterm,
-# As for others:
+# As for others (commenting at the time of release for ncurses 6.1):
# + Apple's Terminal.app does not recognize either form of the direct-color
# sequences.
# + Cygwin's mintty recognizes xterm's original implementation, does okay with
# the colors. Like vte, it is a subset of xterm, although different
# omissions/reservations of modified-keys are seen in testing.
# + PuTTY 0.70 seems to recognize xterm's original implementation but does
# nothing useful with the colors.
# + Teraterm 4.97, like PuTTY (no good).
# + terminology 0.91 recognizes xterm's original implementation, but does
# nothing useful with it.
+# Reviewing after ncurses 6.2:
+# + Apple's Terminal.app is unchanged, has no support for direct color:
+# Catalina 10.15.5 Terminal.app 2.10 (433)
+# Mohave 10.14.6 - Terminal.app 2.9.5 (421.2)
+# + Cygwin's mintty 3.1.7 works with colon/semicolon
+# + PuTTY 0.73 works with semicolon
+# + Teraterm 4.105 works with semicolon
+# + terminology 1.7.0 works with colon/semicolon.
+
+# Other variants are possible, e.g., by using more of xterm's indexed color
+# palette, though the intrusion of indexed colors on the direct-color space
+# would be more noticeable.
+
+xterm+direct16|xterm with direct-color indexing,
+ CO#16,
+ setab=\E[%?%p1%{8}%<%t4%p1%d%e%?%p1%{16}%<%t%p1%{92}%+%e48\:
+ 2\:\:%p1%{65536}%/%d\:%p1%{256}%/%{255}%&%d\:%p1%{255}
+ %&%d%;%;m,
+ setaf=\E[%?%p1%{8}%<%t3%p1%d%e%?%p1%{16}%<%t%p1%'R'%+%e38\:2
+ \:\:%p1%{65536}%/%d\:%p1%{256}%/%{255}%&%d\:%p1%{255}
+ %&%d%;%;m,
+ setb@, setf@, use=xterm+direct,
+
+xterm-direct16|xterm with direct-colors and 16 indexed colors,
+ use=xterm, use=xterm+direct16,
+
+xterm+direct256|xterm with direct-color indexing,
+ CO#0x100,
+ setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e%?
+ %p1%{256}%<%t48;5;%p1%d%e48\:2\:\:%p1%{65536}%/%d\:%p1
+ %{256}%/%{255}%&%d\:%p1%{255}%&%d%;%;m,
+ setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e%?
+ %p1%{256}%<%t38;5;%p1%d%e38\:2\:\:%p1%{65536}%/%d\:%p1
+ %{256}%/%{255}%&%d\:%p1%{255}%&%d%;%;m,
+ setb@, setf@, use=xterm+direct,
+
+xterm-direct256|xterm with direct-colors and 256 indexed colors,
+ use=xterm, use=xterm+direct256,
+
#### XTERM Features
# This chunk is based on suggestions by Ailin Nemui and Nicholas Marriott, who
# asked for some of xterm's advanced features to be added to its terminfo
# entry. It defines extended capabilities not found in standard terminfo or
# termcap. These are useful in tmux, for instance, hence the name.
#
# One caveat in adding extended capabilities in ncurses is that if the names
# are longer than two characters, then they will not be visible through the
# termcap interface.
#
# Ms modifies the selection/clipboard. Its parameters are
# p1 = the storage unit (clipboard, selection or cut buffer)
# p2 = the base64-encoded clipboard content.
#
# Ss is used to set the cursor style as described by the DECSCUSR
# function to a block or underline.
# Se resets the cursor style to the terminal power-on default.
#
# Cs and Cr set and reset the cursor colour.
xterm+tmux|advanced xterm features used in tmux,
Cr=\E]112\007, Cs=\E]12;%p1%s\007,
Ms=\E]52;%p1%s;%p2%s\007, Se=\E[2 q, Ss=\E[%p1%d q,
# This is another variant, for XFree86 4.0 xterm (T.Dickey)
# This is an 8-bit version of xterm, which emulates DEC vt220 with ANSI color.
# To use it, your decTerminalID resource must be set to 200 or above.
#
# HTS \E H \210
# RI \E M \215
# SS3 \E O \217
# CSI \E [ \233
#
xterm-8bit|xterm terminal emulator 8-bit controls (X Window System),
OTbs, am, bce, km, mc5i, mir, msgr, npc, xenl, AX,
colors#8, cols#80, it#8, lines#24, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\2335m, bold=\2331m, cbt=\233Z,
civis=\233?25l, clear=\233H\2332J,
cnorm=\233?25l\233?25h, cr=\r, csr=\233%i%p1%d;%p2%dr,
cub=\233%p1%dD, cub1=^H, cud=\233%p1%dB, cud1=\n,
cuf=\233%p1%dC, cuf1=\233C, cup=\233%i%p1%d;%p2%dH,
cuu=\233%p1%dA, cuu1=\233A, cvvis=\233?12;25h,
dch=\233%p1%dP, dch1=\233P, dl=\233%p1%dM, dl1=\233M,
ech=\233%p1%dX, ed=\233J, el=\233K, el1=\2331K,
flash=\233?5h$<100/>\233?5l, home=\233H,
hpa=\233%i%p1%dG, ht=^I, hts=\210, ich=\233%p1%d@,
il=\233%p1%dL, il1=\233L, ind=\n, invis=\2338m,
is2=\E[62"p\E\sG\233m\233?7h\E>\E7\233?1;3;4;6l\2334l\233r
\E8,
ka1=\217w, ka3=\217u, kb2=\217y, kbeg=\217E, kc1=\217q,
kc3=\217s, kcbt=\233Z, kcub1=\217D, kcud1=\217B,
kcuf1=\217C, kcuu1=\217A, kdch1=\2333~, kend=\2334~,
kent=\217M, kf1=\23311~, kf10=\23321~, kf11=\23323~,
kf12=\23324~, kf13=\23325~, kf14=\23326~, kf15=\23328~,
kf16=\23329~, kf17=\23331~, kf18=\23332~, kf19=\23333~,
kf2=\23312~, kf20=\23334~, kf3=\23313~, kf4=\23314~,
kf5=\23315~, kf6=\23317~, kf7=\23318~, kf8=\23319~,
kf9=\23320~, khome=\2331~, kich1=\2332~, kmous=\233M,
knp=\2336~, kpp=\2335~, mc0=\233i, mc4=\2334i, mc5=\2335i,
meml=\El, memu=\Em, op=\23339;49m, rc=\E8, rev=\2337m,
ri=\215, rmacs=\E(B, rmam=\233?7l, rmcup=\233?1049l,
rmir=\2334l, rmkx=\233?1l\E>, rmso=\23327m, rmul=\23324m,
rs1=\Ec,
rs2=\E[62"p\E\sG\233m\233?7h\E>\E7\233?1;3;4;6l\2334l\233r
\E8,
sc=\E7, setab=\2334%p1%dm, setaf=\2333%p1%dm,
setb=\2334%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1
%{6}%=%t3%e%p1%d%;m,
setf=\2333%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1
%{6}%=%t3%e%p1%d%;m,
sgr=\2330%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?
%p7%t;8%;m%?%p9%t\E(0%e\E(B%;,
sgr0=\2330m\E(B, smacs=\E(0, smam=\233?7h,
smcup=\233?1049h, smir=\2334h, smkx=\233?1h\E=,
smso=\2337m, smul=\2334m, tbc=\2333g, u6=\233[%i%d;%dR,
u7=\E[6n, u8=\233[?%[;0123456789]c, u9=\E[c,
vpa=\233%i%p1%dd, use=xterm+kbs,
xterm-hp|xterm with hpterm function keys,
kclr=\EJ, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA,
kdch1=\EP, kend=\EF, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es,
kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew, khome=\Eh, kich1=\EQ,
- knp=\ES, kpp=\ET, use=xterm-basic,
+ knp=\ES, kpp=\ET, use=xterm+nofkeys,
xterm-sco|xterm with SCO function keys,
kbeg=\E[E, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=^?, kend=\E[F, kf1=\E[M, kf10=\E[V, kf11=\E[W,
kf12=\E[X, kf13=\E[Y, kf14=\E[Z, kf15=\E[a, kf16=\E[b,
kf17=\E[c, kf18=\E[d, kf19=\E[e, kf2=\E[N, kf20=\E[f,
kf21=\E[g, kf22=\E[h, kf23=\E[i, kf24=\E[j, kf25=\E[k,
kf26=\E[l, kf27=\E[m, kf28=\E[n, kf29=\E[o, kf3=\E[O,
kf30=\E[p, kf31=\E[q, kf32=\E[r, kf33=\E[s, kf34=\E[t,
kf35=\E[u, kf36=\E[v, kf37=\E[w, kf38=\E[x, kf39=\E[y,
kf4=\E[P, kf40=\E[z, kf41=\E[@, kf42=\E[[, kf43=\E[\\,
kf44=\E[], kf45=\E[\^, kf46=\E[_, kf47=\E[`, kf48=\E[{,
kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H,
kich1=\E[L, kmous=\E[>M, knp=\E[G, kpp=\E[I,
- use=xterm-basic,
+ use=xterm+nofkeys,
# The xterm-new description has all of the features, but is not completely
# compatible with vt220. If you are using a Sun or PC keyboard, set the
# sunKeyboard resource to true:
# + maps the editing keypad
# + interprets control-function-key as a second array of keys, so a
# 12-fkey keyboard can support vt220's 20-fkeys.
# + maps numeric keypad "+" to ",".
# + uses DEC-style control sequences for the application keypad.
#
xterm-vt220|xterm emulating vt220,
+ npc,
kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
- kend=\E[4~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
- kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
- kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf20=\E[34~,
- kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
- use=xterm+app, use=xterm+edit, use=xterm-basic,
- use=vt220+keypad,
+ kend=\E[4~, kent=\EOM, kf10=\E[21~, kf11=\E[23~,
+ kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
+ kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
+ kf20=\E[34~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~,
+ kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~,
+ kmous=\E[M, knp=\E[6~, kpp=\E[5~, nel=\EE, use=xterm+app,
+ use=xterm+edit, use=vt220+keypad, use=ecma+italics,
+ use=ecma+index, use=ansi+rep, use=ecma+strikeout,
+ use=xterm+sm+1006, use=xterm+tmux, use=ecma+italics,
+ use=xterm+keypad, use=xterm-basic,
xterm-vt52|xterm emulating dec vt52,
cols#80, it#8, lines#24,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, clear=\EH\EJ, cr=\r, cub1=\ED, cud1=\EB, cuf1=\EC,
cup=\EY%p1%' '%+%c%p2%' '%+%c, cuu1=\EA, ed=\EJ, el=\EK,
home=\EH, ht=^I, ind=\n, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, nel=\r\n, ri=\EI, rmacs=\EG, smacs=\EF,
- use=xterm+kbs,
+ use=xterm+kbs, use=vt52+keypad,
xterm-noapp|xterm with cursor keys in normal mode,
rmcup@, rmkx=\E>, smcup@, smkx=\E=, use=xterm+noapp,
use=xterm,
xterm-24|vs100|xterms|xterm terminal emulator (X Window System),
lines#24, use=xterm-old,
# This is xterm for ncurses.
xterm|xterm terminal emulator (X Window System),
use=xterm-new,
# This entry assumes that xterm's handling of VT100 SI/SO is disabled by
# setting the vt100Graphics resource to false.
xterm-utf8|xterm with no VT100 line-drawing in UTF-8 mode,
U8#1, use=xterm,
# These building-blocks allow access to the X titlebar and icon name as a
# status line. There are a few problems in using them in entries:
#
# a) tsl should have a parameter to denote the column on which to transfer to
# the status line.
# b) the "0" code for xterm updates both icon-title and window title. Some
# window managers such as twm (and possibly window managers descended from
# it such as tvtwm, ctwm, and vtwm) track windows by icon-name. Thus, you
# don't want to mess with icon-name when using those window managers.
#
# The extension "TS" is preferable, because it does not accept a parameter.
# However, if you are using a non-extended terminfo, "TS" is not visible.
xterm+sl|access X title line and icon name,
hs,
dsl=\E]0;\007, fsl=^G, tsl=\E]0;, TS=\E]0;,
xterm+sl-twm|access X title line (pacify twm-descended window managers),
hs,
dsl=\E]2;\007, fsl=^G, tsl=\E]2;, TS=\E]2;,
# In contrast, this block can be used for a DEC vt320 and up. There are two
# controls used.
#
# DECSASD (select active status display)
# \E[0$} Main display
# \E[1$} Status line
#
# DECSSDT (select status line type)
# \E[0$~ No status line
# \E[1$~ Indicator status line
# \E[2$~ Host-writable status line
#
# The building block assumes that the terminal always shows something at the
# status line (either the indicator, or status line). That is because if no
# status line is used, then the terminal makes that line part of the user
# window, changing its size without notice.
#
# Because there is no "esl" (enable status line) capability, the "tsl"
# capability ensures that the status line is host-writable. A DEC terminal
# will clear the status line when changing from indicator to host-writable
# mode.
#
# Once on the status line, the row part of cursor addressing is ignored. Since
# tsl expects a parameter (to specify the column), the shortest addressing that
# can be used for this purpose is HPA, e.g., \E[5d to go to column 5.
#
dec+sl|DEC VTxx status line,
eslok, hs,
dsl=\E[1$~, fsl=\E[0$}, tsl=\E[2$~\E[1$}\E[%i%p1%d`,
#
# The following xterm variants don't depend on your base version
#
# xterm with bold instead of underline
xterm-bold|xterm terminal emulator (X11R6 Window System) standout w/bold,
sgr=%?%p9%t\016%e\017%;B\E[0%?%p6%t;1%;%?%p2%t;1%;%?%p1%p3%|
%t;7%;m,
smso=\E[7m, smul=\E[1m, use=xterm-old,
# See the note on ICH/ICH1 VERSUS RMIR/SMIR near the end of file
xterm-nic|xterm with ich/ich1 suppressed for non-curses programs,
ich@, ich1@, use=xterm,
# From: Mark Sheppard <kimble@mistral.co.uk>, 4 May 1996
xterm1|xterm terminal emulator ignoring the alternate screen buffer,
rmcup@, smcup@, use=xterm,
#### XTERM Mouse
# The xterm mouse protocol is used by other terminal emulators.
# In this section, two extended capabilities are used to illustrate the mouse
# protocol: XM and xm. The "XM" capability is recognized by ncurses to allow
# enabling/disabling other mouse protocols. The "xm" capability describes the
# mouse response; currently there is no interpreter which would use this
# information to make the mouse support completely data-driven.
# Here is the "original" xterm mouse protocol.
#
# First seen in X10.3, February 1986, this likely dates from 1985 based on the
# copyright dates in the sources. A comment in charproc.c notes "MIT bogus
# sequence", referring to the fact that it does not correspond to a "real"
# terminal. The mouse responses for the X10 protocol are sent only for
# button-presses.
xterm+x10mouse|X10 xterm mouse protocol,
kmous=\E[M, XM=\E[?9%?%p1%{1}%=%th%el%;,
xm=\E[M%p3%' '%+%c%p2%'!'%+%c%p1%'!'%+%c,
xterm-x10mouse|X10 xterm mouse,
use=xterm+x10mouse, use=xterm,
# Here is the conventional xterm mouse protocol, introduced with X11R1 in
# September 1987.
#
# The mouse responses for the X11 protocol covered button releases, as well as
# modifiers:
# shift 4
# alt/meta 8 (technically the "mod1" mask, because X11 has no such keys)
# control 16
#
# The modifiers are not reflected in this description because as used in xterm
# they are normally inaccessible because the translations resources assign
# shift and control to other features. However, they are important because
# they take up space in the first byte of the response. The other bits of this
# byte are used to encode the button number for both presses and releases.
# In the X11 protocol, any button-release is encoded with "3" (the lowest 2
# bits in the byte). Later work on XFree86 xterm used the remaining 3 bits to
# provide additional features, e.g., wheel mouse.
#
# X11R1's xterm also supported an "emacs" mouse protocol, with final character
# "t" or "T", which was activated by double-clicking. The "t" response was
# used when the starting/ending positions were the same.
#
# X11R3 (February 1988) added the highlight/tracking mode.
#
# X11R4 (December 1989) added the control sequences document, listing the
# control sequences for the X10/X11 protocols without descriptions. It also
# mentioned the "emacs" ("T") response. Comments in button.c referred to the
# X11 protocol as "DEC vt200 compatible", although DEC offered no such terminal.
#
# X11R5 (November 1993) gave a description of the mouse protocol.
#
# X11R6 (January 1995) moved the control sequences document out of the xterm
# source-directory to xc/doc/specs/xterm, polishing the formatting but adding
# no new information.
xterm+x11mouse|X11 xterm mouse protocol,
kmous=\E[M, XM=\E[?1000%?%p1%{1}%=%th%el%;,
xm=\E[M%?%p4%t%p3%e%{3}%;%'\s'%+%c%p2%'!'%+%c%p1%'!'%+%c,
xterm-x11mouse|X11 mouse,
use=xterm+x11mouse, use=xterm,
# Here is a suggested description of the xterm highlighting protocol.
# A more complicated example could be constructed to account for the "t"
# response.
xterm+x11hilite|X11 xterm mouse protocol with highlight,
kmous=\E[M, XM=\E[?1001%?%p1%{1}%=%th%el%;,
xm=\E[%p6%'!'%+%p5%'!'%+%c%p8%'!'%+%c%p7%'!'%+%c%p2%'!'%+%c
%p1%'!'%+%cT,
xterm-x11hilite|X11 mouse with highlight,
use=xterm+x11mouse, use=xterm,
# The preceding were the sources from X Consortium. Other sources (or patches)
# were available. Starting in mid-1995, XFree86 developers collected some of
# those changes and began improvements, e.g., to support color. This was, by
# the way, around the same time that rxvt developers began implementing color,
# though dates (and attributions) are not well documented. I became interested
# in xterm in late 1995, and involved in early 1996. To complete the picture,
# CDE's dtterm was introduced around the same time, with no mouse protocol -TD
# xterm patch #83 (1998/10/7), added Jason Bacon's changes to provide an
# "any-event" mouse mode.
xterm+sm+1002|xterm any-event mouse,
kmous=\E[M, XM=\E[?1002%?%p1%{1}%=%th%el%;,
xterm-1002|xterm any-event mouse,
use=xterm+sm+1002, use=xterm,
xterm+sm+1003|testing xterm-mouse,
kmous=\E[M, XM=\E[?1003%?%p1%{1}%=%th%el%;,
xterm-1003|testing xterm-mouse,
use=xterm+sm+1003, use=xterm,
# xterm patch #116 (1999/9/25) added Stephen P Wall's changes to support DEC
# locator mode.
# xterm patch #120 (1999/10/28) added my change to support wheel mouse, by
# dropping support for the X11 mouse protocol's shift-modifier and using
# available bits in the first byte of the response to encode buttons 4 and 5.
# xterm patch #126 (2000/2/8) amended that change to avoid conflicting with
# older configurations which might have used the obsolete modifiers.
# xterm patch #262 (2010/8/30) added Ryan Johnson's changes to provide a mode
# where the coordinates in the mouse response would be encoded in UTF-8,
# thereby extending the range of coordinates past 222=(255-33). This is the
# "1005" mouse mode.
xterm+sm+1005|xterm UTF-8 mouse,
kmous=\E[M, XM=\E[?1005;1000%?%p1%{1}%=%th%el%;,
xm=\E[M%?%p4%t3%e%p3%'\s'%+%c%;%p2%'!'%+%u%p1%'!'%+%u,
xterm-1005|xterm UTF-8 mouse,
use=xterm+sm+1005, use=xterm,
# xterm patch #277 (2012/1/7) provides a mode where the mouse response uses
# SGR-style parameters.
#
# Someone stated that the 1005 mouse mode would not be handled properly in luit.
# (By the way, this is a problem with the X11 protocol). A more plausible
# criticism is that the responses provided by the 1005 mode are not distinct
# from the non-1005 responses.
#
# As an alternative (and fixing the longstanding limitation of X11 mouse
# protocol regarding button-releases), I provided the 1006 mode, referring
# to it as "SGR 1006" since the replies resemble the SGR control string:
xterm+sm+1006|xterm SGR-mouse,
kmous=\E[<, XM=\E[?1006;1000%?%p1%{1}%=%th%el%;,
xm=\E[<%i%p3%d;%p1%d;%p2%d;%?%p4%tM%em%;,
xterm-1006|xterm SGR-mouse,
use=xterm+sm+1006, use=xterm,
#### KTERM
# (kterm: this had extension capabilities ":KJ:TY=ascii:" -- esr)
# (kterm should not invoke DEC Graphics as the alternate character set
# -- Kenji Rikitake)
# (proper setting of enacs, smacs, rmacs makes kterm to use DEC Graphics
# -- MATSUMOTO Shoji)
# kterm implements acsc via built-in table of X Drawable's
kterm|kterm kanji terminal emulator (X window system),
eslok, hs, XT,
ncv@,
acsc=``aajjkkllmmnnooppqqrrssttuuvvwwxx~~,
csr=\E[%i%p1%d;%p2%dr, dsl=\E[?H, enacs=, fsl=\E[?F,
kmous=\E[M, rc=\E8, rmacs=\E(B, rmam=\E[?7l, sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e
\E(B%;,
sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h,
tsl=\E[?E\E[?%i%p1%dT, use=xterm-r6, use=ecma+color,
kterm-color|kterm-co|kterm with ANSI colors,
ncv@, use=kterm, use=ecma+color,
#### Other XTERM
# These (xtermc and xtermm) are distributed with Solaris. They refer to a
# variant of xterm which is apparently no longer supported, but are interesting
# because they illustrate SVr4 curses mouse controls - T.Dickey
xtermm|xterm terminal emulator (monochrome),
OTbs, am, km, mir, msgr, xenl,
btns#3, cols#80, it#8, lines#24,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink@, bold=\E[1m, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, el1=\E[1K$<3>, enacs=\E(B\E)0, getm=\E[%p1%dY,
home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
il=\E[%p1%dL, il1=\E[L, ind=\n, kbs=^H, kcub1=\EOD,
kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kend=\E[Y, kf0=\EOy,
kf10=\EOY, kf11=\EOZ, kf12=\EOA, kf5=\EOT, kf6=\EOU,
kf7=\EOV, kf8=\EOW, kf9=\EOX, khome=\E[H, kmous=\E[^_,
knp=\E[U, kpp=\E[V, rc=\E8, reqmp=\E[492Z, rev=\E[7m, ri=\EM,
rmacs=^O, rmcup=\E@0\E[?4r, rmso=\E[m,
rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smcup=\E@0\E[?4s\E[?4h\E@1,
smso=\E[7m, tbc=\E[3g, use=vt100+fnkeys,
xtermc|xterm terminal emulator (color),
colors#8, ncv#7, pairs#64,
op=\E[100m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
use=xtermm,
# From: David J. MacKenzie <djm@va.pubnix.com> 20 Apr 1995
# Here's a termcap entry I've been using for xterm_color, which comes
# with BSD/OS 2.0, and the X11R6 contrib tape too I think. Besides the
# color stuff, I also have a status line defined as the window manager
# title bar. [I have translated it to terminfo -- ESR]
xterm-pcolor|xterm with color used for highlights and status line,
wsl#40,
bold=\E[1;43m, rev=\E[7;34m,
sgr=%?%p9%t\016%e\017%;\E[0%?%p6%t;1;43%;%?%p2%t;4;42%;%?%p1
%t;7;31%;%?%p3%t;7;34%;m,
smso=\E[7;31m, smul=\E[4;42m, use=xterm+sl, use=xterm-r6,
# This describes the capabilities of color_xterm, an xterm variant from
# before ECMA-64 color support was folded into the main-line xterm release.
# This entry is straight from color_xterm's maintainer.
# From: Jacob Mandelson <jlm@ugcs.caltech.edu>, 09 Nov 1996
# The README's with the distribution also say that it supports SGR 21, 24, 25
# and 27, but they are not present in the terminfo or termcap.
color_xterm|cx|cx100|color_xterm color terminal emulator for X,
OTbs, am, km, mir, msgr, xenl, XT,
cols#80, it#8, lines#65, ncv@,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, el1=\E[1K, enacs=\E(B\E)0, home=\E[H, ht=^I,
ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\n,
is1=\E[r\E[m\E[?7h\E[?4;6l\E[4l, kbs=^H, kcub1=\EOD,
kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kend=\E[8~, kf1=\E[11~,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\E[12~,
kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, khome=\E[7~, kich1=\E[2~,
kmous=\E[M, knp=\E[6~, kpp=\E[5~, rc=\E8, rev=\E[7m, ri=\EM,
rmacs=^O, rmam=\E[?7l, rmcup=\E>\E[?41;1r, rmir=\E[4l,
rmso=\E[27m, rmul=\E[24m,
rs1=\E(B\017\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E<,
sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;m%?%p9%t\016%e\017%;,
sgr0=\E[0m\017, smacs=^N, smam=\E[?7h,
smcup=\E[?1;41s\E[?1;41h\E=, smir=\E[4h, smso=\E[7m,
smul=\E[4m, use=ecma+color, use=vt220+keypad,
# The 'nxterm' distributed with Redhat Linux 5.2 is a slight rehack of
# xterm-sb_right-ansi-3d, which implements ANSI colors, but does not support
# SGR 39 or 49. SGR 0 does reset colors (along with everything else). This
# description is "compatible" with color_xterm, rxvt and XFree86 xterm, except
# that each of those implements the home, end, delete keys differently.
#
# Redhat Linux 6.x distributes XFree86 xterm as "nxterm", which uses bce
# colors; note that this is not compatible with the 5.2 version.
# csw (2002-05-15): make xterm-color primary instead of nxterm, to
# match XFree86's xterm.terminfo usage and prevent circular links
xterm-color|nxterm|generic color xterm,
ncv@,
op=\E[m, use=xterm-r6, use=klone+color,
# This entry describes an xterm with Sun-style function keys enabled
# via the X resource setting "xterm*sunFunctionKeys:true"
# To understand <kf11>/<kf12> note that L1,L2 and F11,F12 are the same.
# The <kf13>...<kf20> keys are L3-L10. We don't set <kf16=\E[197z>
# because we want it to be seen as <kcpy>.
# The <kf31>...<kf45> keys are R1-R15. We treat some of these in accordance
# with their Sun keyboard labels instead.
# From: Simon J. Gerraty <sjg@zen.void.oz.au> 10 Jan 1996
xterm-sun|xterm with sunFunctionKeys true,
kb2=\E[218z, kcpy=\E[197z, kcub1=\EOD, kcud1=\EOB,
kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3z, kend=\E[220z,
kent=\EOM, kf1=\E[224z, kf10=\E[233z, kf11=\E[192z,
kf12=\E[193z, kf13=\E[194z, kf14=\E[195z, kf15=\E[196z,
kf17=\E[198z, kf18=\E[199z, kf19=\E[200z, kf2=\E[225z,
kf20=\E[201z, kf3=\E[226z, kf31=\E[208z, kf32=\E[209z,
kf33=\E[210z, kf34=\E[211z, kf35=\E[212z, kf36=\E[213z,
kf38=\E[215z, kf4=\E[227z, kf40=\E[217z, kf42=\E[219z,
kf44=\E[221z, kf45=\E[222z, kf46=\E[234z, kf47=\E[235z,
kf5=\E[228z, kf6=\E[229z, kf7=\E[230z, kf8=\E[231z,
kf9=\E[232z, kfnd=\E[200z, khlp=\E[196z, khome=\E[214z,
kich1=\E[2z, knp=\E[222z, kpp=\E[216z, kund=\E[195z,
- use=xterm-basic,
+ use=xterm+nofkeys,
xterms-sun|small (80x24) xterm with sunFunctionKeys true,
cols#80, lines#24, use=xterm-sun,
#### GNOME (VTE)
# this describes the alpha-version of Gnome terminal shipped with Redhat 6.0
gnome-rh62|Gnome terminal,
bce,
kdch1=^?, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
use=xterm-color,
# GNOME Terminal 1.4.0.4 (Redhat 7.2)
#
# This implements a subset of vt102 with a random selection of features from
# other terminals such as color and function-keys.
#
# shift-f1 to shift-f10 are f11 to f20
#
# NumLock changes the application keypad to approximate vt100 keypad, except
# that there is no escape sequence matching comma (,).
#
# Other defects observed:
# vt100 LNM mode is not implemented.
# vt100 80/132 column mode is not implemented.
# vt100 DECALN is not implemented.
# vt100 DECSCNM mode is not implemented, so flash does not work.
# vt100 TBC (tab reset) is not implemented.
# xterm alternate screen controls do not restore cursor position properly
# it hangs in tack after running function-keys test.
gnome-rh72|GNOME Terminal,
bce, km@,
- civis=\E[?25l, cnorm=\E[?25h, kdch1=\E[3~, kf1=\EOP,
- kf2=\EOQ, kf3=\EOR, kf4=\EOS, rmam=\E[?7l,
+ kdch1=\E[3~, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
+ rmam=\E[?7l,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m%?%p9%t\016%e
\017%;,
- sgr0=\E[0m\017, smam=\E[?7h, tbc@, use=xterm-color,
+ sgr0=\E[0m\017, smam=\E[?7h, tbc@, use=vt220+cvis,
+ use=xterm-color,
# GNOME Terminal 2.0.1 (Redhat 8.0)
#
# Documentation now claims it implements vt220 (which is demonstrably false).
# However, it does implement ECH, which is a vt220 feature. And there are
# workable vt100 LNM, DECALN, DECSNM modes, making it possible to display
# more of its bugs using vttest.
#
# However, note that bce and msgr are broken in this release. Tabs (tbc and
# hts) are broken as well. Sometimes flash (as in xterm-new) works.
#
# kf1 and kf10 are not tested since they're assigned (hardcoded?) to menu
# operations. Shift-tab generates a distinct sequence so it can be argued
# that it implements kcbt.
gnome-rh80|GNOME Terminal,
bce@, msgr@,
ech=\E[%p1%dX, flash=\E[?5h$<100/>\E[?5l, kbs=^?,
kcbt=\E^I, op=\E[39;49m, use=gnome-rh72,
# GNOME Terminal 2.2.1 (Redhat 9.0)
#
# bce and msgr are repaired.
gnome-rh90|GNOME Terminal,
bce, msgr, XT,
hpa=\E[%i%p1%dG, kDC=\E[3;2~, kLFT=\EO2D, kRIT=\EO2C,
kb2=\E[E, kcbt=\E[Z, kend=\EOF, khome=\EOH, tbc=\E[3g,
vpa=\E[%i%p1%dd, use=xterm+pcf0, use=xterm+pcfkeys,
use=gnome-rh80,
# GNOME Terminal 2.14.2 (Fedora Core 5)
# Ed Catmur notes that gnome-terminal has recognized soft-reset since May 2002.
gnome-fc5|GNOME Terminal,
rs1=\Ec,
rs2=\E7\E[r\E8\E[m\E[?7h\E[!p\E[?1;3;4;6l\E[4l\E>\E[?1000l
\E[?25h,
use=ansi+enq, use=xterm+pcc0, use=gnome-rh90,
# GNOME Terminal 2.18.1 (2007 snapshot)
#
# For any "recent" version of gnome-terminal, it is futile to attempt to
# support modifiers on cursor- and keypad keys because the program usually
# is hardcoded to set $TERM to "xterm", and on startup, it builds a subset
# of the keys (which more/less correspond to the termcap values), and will
# interpret those according to the $TERM value, but others not in the
# terminfo according to some constantly changing set of hacker guidelines -TD
vte-2007|VTE in GNOME Terminal snapshot 2.18.1,
- use=xterm+pcc2, use=gnome-fc5,
+ use=xterm+pcc2, use=vt220+cvis, use=gnome-fc5,
gnome-2007|GNOME Terminal snapshot 2.18.1,
use=vte-2007,
# GNOME Terminal 2.22.3 (2008 snapshot)
#
# In vttest, it claims to be a vt220 with national replacement character-sets,
# but aside from the identifier string, implements only a small fraction of
# vt220's behavior, which will make it less usable on a VMS system (unclear
# what the intent of the developer is, since the NRC feature exposed in vttest
# by this change does not work).
vte-2008|VTE in GNOME Terminal snapshot 2.22.3,
use=vte+pcfkeys, use=vte-2007,
gnome-2008|GNOME Terminal snapshot 2.22.3,
use=vte-2008,
# GNOME Terminal 3.6.0 (2012)
# VTE 0.34.1 was marked in git 2012-10-15 (three days after patch was applied
# in ncurses). It inherited from gnome-fc5, which broke the modified forms
# of f1-f4 -TD
#
# Testing with tack shows that flash does not/has not worked -TD
vte-2012|VTE 0.34.1,
ncv#16,
dim=\E[2m, flash@, invis=\E[8m, rmso=\E[27m, rmul=\E[24m,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p5%t;2%;%?%p7%t;8%;%?%p1%p3
%|%t;7%;m%?%p9%t\016%e\017%;,
use=ecma+italics, use=vte-2008,
# Version 3.6.1 sets TERM to xterm-256color (still hardcoded), which has
# 61 differences from a correct entry for gnome terminal.
gnome-2012|GNOME Terminal 3.6.0,
use=vte-2012,
# Before 2008, GNOME terminal could automatically use the contents of the
# "xterm" terminfo to supply key information which is not built into the
# program. With 2.22.3, this list was built into the program (which addressed
# the inadvertent use of random terminfo data, though using a set of values
# which did not correspond to any that xterm produced - still not solving the
# problem that GNOME terminal hardcoded the $TERM variable as "xterm").
#
# terminfo modifier code keys
# kf13-kf24 shift 2 F1 to F12
# kf25-kf36 control 5 F1 to F12
# kf37-kf48 shift/control 6 F1 to F12
# kf49-kf60 alt 3 F1 to F12
# kf61-kf63 shift-alt 4 F1 to F3
#
# The parameters with \EO (SS3) are technically an error, since SS3 should have
# no parameters. This appears to be rote copying based on xterm+pcc0.
vte+pcfkeys|VTE's variation on xterm+pcfkeys,
kf1=\EOP, kf13=\EO1;2P, kf14=\EO1;2Q, kf15=\EO1;2R,
kf16=\EO1;2S, kf2=\EOQ, kf25=\EO1;5P, kf26=\EO1;5Q,
kf27=\EO1;5R, kf28=\EO1;5S, kf3=\EOR, kf37=\EO1;6P,
kf38=\EO1;6Q, kf39=\EO1;6R, kf4=\EOS, kf40=\EO1;6S,
kf49=\EO1;3P, kf50=\EO1;3Q, kf51=\EO1;3R, kf52=\EO1;3S,
kf61=\EO1;4P, kf62=\EO1;4Q, kf63=\EO1;4R,
use=xterm+pcfkeys,
gnome+pcfkeys|VTE's variation on xterm+pcfkeys,
use=vte+pcfkeys,
# deprecated - use "vte" for newer versions
gnome|GNOME Terminal,
use=vte-2012,
gnome-256color|GNOME Terminal with xterm 256-colors,
use=xterm+256color, use=gnome,
# relevant changes were made in January 2014, and later.
#
# Originally VTE was promoted as a library able to emulate any terminal by
# reading its terminal description. In practice, that never got beyond the
# ability to read definitions of special keys (function-, editing-, cursor).
#
# Before 2014, VTE had a termcap reader (originally pointing to a private copy
# of a termcap file derived from xterm). That was incomplete because it did
# not have any of the modifier-key information used for xterm's function-,
# editing-, and cursor-keys. Having its own reader was unnecessary since
# ncurses provides that information; used since xterm patch #225 in 2007.
#
# During April/May 2014, a few bug reports (e.g., gnome #169295, gnome #728900,
# gnome #730137) dealt with attempts to recast that termcap reader as library
# calls, then attempting to adapt a chunk of code from ncurses (src/vteti.c),
# abandoning that and finally constructing a table to match xterm's default
# behavior, e.g., for "xterm+pcfkeys".
vte-2014|VTE 0.35.1,
ncv@,
cbt=\E[Z, el1=\E[1K, flash=\E[?5h$<100/>\E[?5l,
ich=\E[%p1%d@, kent=\EOM, use=ecma+index,
use=xterm+sm+1006, use=xterm+pcfkeys, use=vte-2012,
# As of January 2018, this was the most recent release,
# e.g., with gnome-terminal 3.26.2
vte-2017|VTE 0.50.2,
use=ecma+strikeout, use=vte-2014,
# VTE 0.51.2 and gnome-terminal 3.28.2 copied a feature from KovId's TTY
# late in 2017 for changing the appearance of underlines, which was
# incorporated into Debian and Fedora testing-packages in February and March
# 2018, respectively. Overline (Smol/Rmol) has been supported since December
# 2017.
vte-2018|VTE 0.51.2,
Rmol=\E[55m, Smol=\E[53m, Smulx=\E[4\:%p1%dm,
use=vte-2017,
vte|VTE aka GNOME Terminal,
use=vte-2018,
vte-256color|VTE with xterm 256-colors,
use=xterm+256color, use=vte,
# XFCE Terminal 0.2.5.4beta2
#
# This is based on some of the same source code, e.g., the VTE library, as
# gnome-terminal, but has fewer features, fails more screens in vttest.
# Since most of the terminfo-related behavior is due to the VTE library,
# the terminfo is the same as gnome-terminal.
xfce|Xfce Terminal,
use=vte-2008,
# TERMITE
#
# https://github.com/thestinger/termite
#
# A review requires install of Arch Linux since Fedora and Debian don't have
# this program. It uses "vte3-ng" (a conflicting package), which is here:
# https://github.com/thestinger/vte-ng
# which (based on the default branch setting) seems to be a fork of vte
# 0.48.2, and is noted as such in Arch:
-# https://www.archlinux.org/packages/community/x86_64/vte3-ng/
+# https://aur.archlinux.org/packages/vte3-ng/
# It won't be merged:
# https://bugzilla.gnome.org/show_bug.cgi?id=679658#c10
# https://bugzilla.gnome.org/show_bug.cgi?id=78291
# but perhaps made obsolete.
#
# The entry as given was mislabeled "xterm-termite" (it is not xterm), and
# was mostly cut/paste from xterm-256color, but since VTE does not actually
# implement several of the features in that terminal description, this one is
# trimmed to eliminate those. Also, since it is a slightly older version of
# VTE, it lacks a few more features (again, trimmed).
termite|VTE-based terminal,
am, ccc, km, mir, msgr, npc, xenl,
cols#80, it#8, lines#24, ncv@,
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxy
yzz{{||}}~~,
- bel=^G, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=\r,
+ bel=^G, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
flash=\E[?5h$<100/>\E[?5l, home=\E[H, hpa=\E[%i%p1%dG,
ht=^I, hts=\EH, ind=\n, invis=\E[8m,
is2=\E[!p\E[?3;4l\E[4l\E>, kb2=\EOE, kbs=^?, kcbt=\E[Z,
kent=\EOM, kmous=\E[M, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E(B,
rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m,
rs1=\Ec, rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|
%t;7%;%?%p7%t;8%;m,
sgr0=\E(B\E[m, smacs=\E(0, smam=\E[?7h, smkx=\E[?1h\E=,
smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd,
use=xterm+alt1049, use=ecma+index, use=ansi+idc,
use=ansi+idl, use=ansi+enq, use=ecma+italics,
- use=xterm+256color, use=ecma+color, use=xterm+pcfkeys,
- use=xterm+sl-twm,
+ use=xterm+256color, use=ecma+color, use=vt220+cvis,
+ use=xterm+pcfkeys, use=xterm+sl-twm,
#### Other GNOME
# Multi-Gnome-Terminal 1.6.2
#
# This does not use VTE, and does have different behavior (compare xfce and
# gnome).
mgt|Multi GNOME Terminal,
use=ecma+index, use=xterm-xf86-v333,
#### KDE
# This is kvt 0-18.7, shipped with Redhat 6.0 (though whether it supports bce
# or not is debatable).
kvt|KDE terminal,
bce, km@,
kdch1=^?, kend=\E[F, khome=\E[H, use=xterm-color,
# Konsole 1.0.1 (2001/11/25)
# (formerly known as kvt)
#
# This program hardcodes $TERM to 'xterm', which is not accurate. However, to
# simplify this entry (and point out why konsole isn't xterm), we base this on
# xterm-r6. The default keyboard appears to be 'linux'.
#
# Notes:
# a) konsole implements several features from XFree86 xterm, though none of
# that is documented - except of course in its source code - apparently
# because its implementors are unaccustomed to reading documentation - as
# evidenced by the sparse and poorly edited documentation distributed with
# konsole. Some features such as the 1049 private mode are recognized but
# incorrectly implemented as a duplicate of the 47 private mode.
# b) even with the "vt100 (historical)" keyboard setting, the numeric keypad
# sends PC-style escapes rather than vt100.
# c) fails vttest menu 3 (Test of character sets) because it does not properly
# parse some control sequences. Also fails vttest Primary Device Attributes
# by sending a bogus code (in the source it says it's supposed to be a
# vt220, which is doubly incorrect because it does not implement vt220
# control sequences except for a few special cases). Treat it as a
# mildly-broken vt102.
#
# Update for konsole 1.3.2:
# The 1049 private mode works (but see the other xterm screens in vttest).
# Primary Device Attributes now returns the code for a vt100 with advanced
# video option. Perhaps that's intended to be a "mildly-broken vt102".
#
# Updated for konsole 1.6.4:
# add konsole-solaris
#
# Updated for konsole 1.6.6:
# add control-key modifiers for function-keys, etc.
#
# Updated for konsole 2.3 (October 2008):
# vttest menu 1 shows that both konsole and gnome terminal do wrapping
# different from xterm (and vt100's). They have the same behavior in
# this detail, but it is unclear which copies the other.
#
# Deferred update for konsole 2.10 (late 2012):
# add SGR 1006 mouse
#
# Updated for konsole 2.12.4 (late 2013):
# add sitm/ritm
#
# Updated for konsole 16.07 (mid 2016):
# add dim, invis, strikeout
# (also overline, which is too rarely used to provide as an extension)
#
# Updated for konsole 17.12.0 (late 2017):
+#
+# Re-enable "bel", since it is latent in the source-code even though KDE config
+# often hides the feature (2020/5/30)
konsole-base|KDE console window,
bce, km@, npc, XT,
ncv@,
- bel@, blink=\E[5m, civis=\E[?25l, cnorm=\E[?25h, dim=\E[2m,
- ech=\E[%p1%dX, flash=\E[?5h$<100/>\E[?5l,
- hpa=\E[%i%p1%dG, invis=\E[8m, kbs=^?, kdch1=\E[3~,
- kend=\E[4~, kf1@, kf10@, kf11@, kf12@, kf13@, kf14@, kf15@, kf16@,
- kf17@, kf18@, kf19@, kf2@, kf20@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@,
- kf9@, kfnd@, khome=\E[1~, kslt@, rmam=\E[?7l, rmso=\E[27m,
- rmul=\E[24m, rs1=\Ec,
+ blink=\E[5m, dim=\E[2m, ech=\E[%p1%dX,
+ flash=\E[?5h$<100/>\E[?5l, hpa=\E[%i%p1%dG,
+ invis=\E[8m, kbs=^?, kdch1=\E[3~, kend=\E[4~, kf1@, kf10@,
+ kf11@, kf12@, kf13@, kf14@, kf15@, kf16@, kf17@, kf18@, kf19@, kf2@,
+ kf20@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, kf9@, kfnd@, khome=\E[1~,
+ kslt@, rmam=\E[?7l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec,
rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?25h,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?
%p5%t;2%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[0m\017, smam=\E[?7h, vpa=\E[%i%p1%dd,
use=ecma+index, use=xterm+sm+1006, use=ecma+strikeout,
use=ecma+italics, use=ecma+color, use=xterm-r6,
+ use=vt220+cvis,
# The keytab feature was introduced in 0.9.12 (February 2000) with "linux" and
# "vt100" key-table files along with a compiled-in default key-table.
#
# The main difference between the two keytabs was that the developer equated
# "vt100" with xterm, and noticed that the Linux console's F1-F5 differed from
# that. For the same reason, the home/end keys differ. A VT100 had none of
# that. The otherwise identical keytabs have definitions to model the VT52
# cursor-keys and the VT100 cursor-keys with application versus normal modes.
#
# An "x11r5" keytab (displayed in the menu as "X11 R5") was added in January
# 2001, and shortly after retitled to "XFree 3.x.x". Both it and "vt100" were
# dropped from the install in June 2008.
#
# The default keytab added in January 2000 was originally titled "X11 R6",
# and likewise retitled to "XFree 4".
#
# A "solaris" keytab was added in Febrary 2005, copying the "vt100" keytab
# and changing backspace to ^H, removing that keytab's attempt to model the
# VT100 keypad and VT52 (KDE #20459).
#
# The developers made changes to the default and linux keytabs. Comparing
# the original and 2018 versions using diffstat:
# default: 119 added, 147 deleted, 28 unchanged
# linux: 47 added, 28 deleted, 104 unchanged
#
# Most of the change for the default keytab was to make konsole act more like
# xterm. That was a feature named AnyMod which came in May 2005 for KDE #92749
# (see also Redhat #122815). Later, in June 2007 the compiled-in keytab was
# made an external file (like "linux" and "solaris"), and some further
# refinement made. But there are still flaws in the scheme.
#
# Essentially AnyMod maps the xterm "PC-style" modifier codes such as 2 for
# Shift into a placeholder in the table entries. That works well if all of the
# modified keys are modified in the same way. But xterm does not do that. The
# first 4 function keys are used in xterm to support the VT100 PF1-PF4 keypad
# keys. For example, F2 sends \EOQ in both terminals because of this feature.
# But a shifted F2 (F14=F2+12) differs like this, in infocmp's listing:
# kf14: '\E[1;2Q', '\EO2Q'.
#
# In effect, a quarter of konsole's function-keys are different from xterm.
#
# It is not a simple blunder:
# a) xterm patch #121 (November 1999), providing the first version of the
# PC-style modifiers would send \EO2Q
# b) xterm patch #216 (July 2006) amended this and other details, provided
# better documentation for the modifiers and made the behavior configurable,
# e.g., using the modifyFunctionKeys resource. The reason why it sends
# \E[1;2Q is that \E[O2Q is not a legal ECMA-48 control sequence. The
# changelog points this out as "avoid sending SS3 with parameters".
# c) That came after AnyMod was introduced, but still early enough that one
# might expect konsole's developers to followup. Twelve years later that
# has yet to happen.
#
# As of 2018, konsole still provides 3 keyboard profiles ("XFree 4", "linux",
# "solaris").
konsole-linux|KDE console window with linux keyboard,
kf1=\E[[A, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13@,
kf14@, kf15@, kf16@, kf17@, kf18@, kf19@, kf2=\E[[B, kf20@,
kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, use=konsole-base,
konsole-solaris|KDE console window with Solaris keyboard,
kbs=^H, kend=\E[4~, khome=\E[1~, use=konsole-vt100,
# Obsolete: x11r5.keymap
# KDE's "XFree86 3.x.x" keyboard was obviously based on reading the xterm
# terminfo at the time rather than testing the code.
konsole-xf3x|KDE console window with keyboard for XFree86 3.x xterm,
kend=\E[4~, khome=\E[1~, use=konsole-vt100,
# The value for kbs (see konsole-vt100) reflects local customization rather
# than the settings used for XFree86 xterm.
konsole-xf4x|KDE console window with keyboard for XFree86 4.x xterm,
kend=\EOF, khome=\EOH, use=konsole+pcfkeys,
use=konsole-vt100,
konsole+pcfkeys|konsole subset of xterm+pcfkeys,
kcbt=\E[Z, use=xterm+pcc2, use=xterm+pcf0,
use=xterm+pce2,
# Obsolete: vt100.keymap
# KDE's "vt100" keyboard has no relationship to any terminal that DEC made, but
# it is still useful for deriving the other entries, since the developer
# provided function-keys based on xterm.
konsole-vt100|KDE console window with vt100 (sic) keyboard,
kbs=^?, kdch1=\E[3~, kend=\E[F, kf1=\E[11~, kf10=\E[21~,
kf11=\E[23~, kf12=\E[24~, kf13@, kf14@, kf15@, kf16@, kf17@,
kf18@, kf19@, kf2=\E[12~, kf20@, kf3=\E[13~, kf4=\E[14~,
kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
khome=\E[H, use=konsole-base,
# Obsolete: vt420pc.keytab was added in June 2000, dropped from the install in
# September 2008 and removed in June 2016. The developer who removed it stated
# that it was never installed.
konsole-vt420pc|KDE console window with vt420 pc keyboard,
kbs=^H, kdch1=^?, use=konsole-vt100,
# make a default entry for konsole
konsole|KDE console window,
use=konsole-xf4x,
# These were written for ncurses:
konsole-16color|klone of xterm-16color,
ncv#32, use=ibm+16color, use=konsole,
konsole-256color|KDE console window with xterm 256-colors,
use=xterm+256setaf, use=konsole,
#### MLTERM
-# http://mlterm.sourceforge.net/
+# https://github.com/arakiken/mlterm
mlterm|multi lingual terminal emulator,
use=mlterm3,
-# Tested mlterm 3.2.2:
-# mlterm 3.x has made changes, but they are not reflected in the included
-# mlterm.ti; this entry is based on testing with ncurses, tack and vttest -TD
-# 2018/01/21: found xterm+sm+1006 did not work with version 3.3.8
+# Tested mlterm 3.9.0 (2020/09/19):
+# ncurses:
+# - has blinking text
+# - has italics
+# - has invisible-text
+# tack:
+# - has crossed-out text
+# - does not support palette reset with OSC 104
+# - testing the function-keys is difficult because the terminal is
+# preconfigured to set many of the modified keys to special functions, e.g.,
+# - shift-F1 and shift-F2 are bound to a split-screen feature
+# - control-F1 and control-F2 is bound to a new-terminal feature
+# vttest:
+# - primary response says it is a VT340 (ReGIS and Sixel).
+# - has partial support for double-size characters.
+# - character-set tests do not work.
+# - DEC locator works.
+# - 1006-mouse works.
+# - focus-events do not work reliably.
+# - numeric keypad escapes do not work.
+# - back-color erase works
+# other:
+# - title-stack works.
+# - doesn't respond to 8-bit controls.
+# - 256-color palette initializing works.
+# - DECSTR soft-reset is documented.
+#
+# Tested mlterm 3.3.8 (2018/01/21):
+# found xterm+sm+1006 did not work with version 3.3.8
+# soft-reset DECSTR is in sources since 2017/09/19.
+#
+# Tested mlterm 3.2.2 (2014/03/22):
+# mlterm 3.x made further changes, but they were not reflected in the included
+# mlterm.ti (which was dropped in 2015). This entry has been based on testing
+# with ncurses, tack and vttest -TD
mlterm3|multi lingual terminal emulator,
- kf1=\E[11~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~,
- use=ecma+italics, use=xterm+app, use=xterm+pcf0,
- use=xterm+pcc2, use=xterm+pce2, use=xterm+x11mouse,
- use=mlterm2,
+ bce, AX,
+ blink=\E[5m, flash=\E[?5h$<100/>\E[?5l, invis=\E[8m,
+ is2=\E[!p\E[?3;4l\E>, rs2=\E[!p\E[?3;4l\E>,
+ sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;%?
+ %p7%t;8%;m%?%p9%t\E(0%e\E(B%;,
+ use=ansi+enq, use=ansi+rep, use=ecma+italics,
+ use=ecma+strikeout, use=xterm+app, use=xterm+pcf2,
+ use=xterm+pcc2, use=xterm+pce2, use=xterm+meta,
+ use=xterm+alt+title, use=xterm+sm+1006,
+ use=vt100+pfkeys, use=mlterm2,
# This is mlterm 2.9.3's mlterm.ti, with some additions/corrections -TD
#
# It is nominally a vt102 emulator, with features borrowed from rxvt and
# xterm.
#
# The function keys are numbered based on shift/control/alt modifiers, except
# that the control-modifier itself is used to spawn a new copy of mlterm (the
# "-P" option). So control/F1 to control/F12 may not be usable, depending on
# how it is configured.
#
# kf1 to kf12 \E[11~ to \E[24~
# shift kf1 to kf12 \E[11;2~ to \E[24;2~
# alt kf1 to kf12 \E[11;3~ to \E[24;3~
# shift/alt kf1 to kf12 \E[11;4~ to \E[24;4~
# control kf1 to kf12 \E[11;5~ to \E[24;5~ (maybe)
# control/shift kf1 to kf12 \E[11;6~ to \E[24;6~
# control/alt kf1 to kf12 \E[11;7~ to \E[24;7~
# control/shift/alt kf1 to kf12 \E[11;8~ to \E[24;8~
#
mlterm2|multi lingual terminal emulator,
am, eslok, km, mc5i, mir, msgr, npc, xenl, XT,
colors#8, cols#80, it#8, lines#24, pairs#64,
acsc=00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?25h, cr=\r,
+ bel=^G, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=,
home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=\n,
is2=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>, kbs=^?,
kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
- kdch1=\E[3~, kend=\EOF, kent=\EOM, kfnd=\E[1~, khome=\EOH,
- kich1=\E[2~, kind=\EO1;2B, kmous=\E[M, knp=\E[6~,
- kpp=\E[5~, kri=\EO1;2A, kslt=\E[4~, mc0=\E[i, nel=\EE,
- op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E(B,
- rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m,
- rmul=\E[24m, rs1=\Ec,
+ kend=\EOF, kent=\EOM, khome=\EOH, kind=\EO1;2B, kmous=\E[M,
+ kri=\EO1;2A, mc0=\E[i, nel=\EE, op=\E[39;49m, rc=\E8,
+ rev=\E[7m, ri=\EM, rmacs=\E(B, rmam=\E[?7l, rmir=\E[4l,
+ rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m, rs1=\Ec,
rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;3;4;6l\E[4l\E>\E[?1000l,
sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e
\E(B%;,
sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c,
- vpa=\E[%i%p1%dd, use=xterm+alt1049, use=ecma+index,
- use=mlterm+pcfkeys, use=xterm+r6f2,
+ vpa=\E[%i%p1%dd, use=vt220+vtedit, use=xterm+alt1049,
+ use=ecma+index, use=mlterm+pcfkeys, use=vt220+cvis,
+ use=xterm+r6f2,
# The insert/delete/home/end keys do not respond to modifiers because mlterm
# looks in its termcap to decide which string to send. If it used terminfo
# (when available), it could use the extended names introduced for xterm.
mlterm+pcfkeys|fragment for PC-style fkeys,
kLFT=\EO1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\EO1;2C,
kDN=\EO1;2B, kDN3=\EO1;3B, kDN4=\EO1;4B, kDN5=\EO1;5B,
kDN6=\EO1;6B, kDN7=\EO1;7B, kIC5=\E[2;5~, kIC6=\E[2;6~,
kLFT3=\EO1;3D, kLFT4=\EO1;4D, kLFT5=\EO1;5D,
kLFT6=\EO1;6D, kLFT7=\EO1;7D, kNXT5=\E[6;5~,
kNXT6=\E[6;6~, kPRV5=\E[5;5~, kPRV6=\E[5;6~,
kRIT3=\EO1;3C, kRIT4=\EO1;4C, kRIT5=\EO1;5C,
kRIT6=\EO1;6C, kRIT7=\EO1;7C, kUP=\EO1;2A, kUP3=\EO1;3A,
kUP4=\EO1;4A, kUP5=\EO1;5A, kUP6=\EO1;6A, kUP7=\EO1;7A,
mlterm-256color|mlterm 3.0 with xterm 256-colors,
use=xterm+256color, use=mlterm,
#### RXVT
# From: Thomas Dickey <dickey@clark.net> 04 Oct 1997
# Updated: Oezguer Kesim <kesim@math.fu-berlin.de> 02 Nov 1997
# Notes:
# rxvt 2.21b uses
# smacs=\E(B\E)U^N, rmacs=\E(B\E)0^O,
# but some applications don't work with that.
# It also has an AIX extension
# box2=lqkxjmwuvtn,
# and
# ech=\E[%p1%dX,
# but the latter does not work correctly.
#
# The distributed terminfo says it implements hpa and vpa, but they are not
# implemented correctly, using relative rather than absolute positioning.
#
# rxvt is normally configured to look for "xterm" or "xterm-color" as $TERM.
# Since rxvt is not really compatible with xterm, it should be configured as
# "rxvt" or "rxvt-color".
#
# removed dch/dch1 because they are inconsistent with bce/ech -TD
# remove km as per tack test -TD
rxvt-basic|rxvt terminal base (X Window System),
OTbs, am, bce, eo, mir, msgr, xenl, xon, XT,
cols#80, it#8, lines#24,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
enacs=\E(B\E)0, flash=\E[?5h$<100/>\E[?5l, home=\E[H,
ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L,
ind=\n, is1=\E[?47l\E=\E[?1l,
is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l, kbs=^H,
kcbt=\E[Z, kmous=\E[M, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E>, rmso=\E[27m,
rmul=\E[24m,
rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H,
rs2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?
25h,
s0ds=\E(B, s1ds=\E(0, sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?
%p9%t\016%e\017%;,
sgr0=\E[0m\017, smacs=^N, smcup=\E7\E[?47h, smir=\E[4h,
smkx=\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, use=vt100+enq,
- use=rxvt+pcfkeys, use=vt220+keypad,
+ use=rxvt+pcfkeys, use=vt220+cvis, use=vt220+keypad,
# Key Codes from rxvt reference:
#
# Note: Shift + F1-F10 generates F11-F20
#
# For the keypad, use Shift to temporarily override Application-Keypad
# setting use Num_Lock to toggle Application-Keypad setting if Num_Lock
# is off, escape sequences toggle Application-Keypad setting.
# Also note that values of Home, End, Delete may have been compiled
# differently on your system.
#
# Normal Shift Control Ctrl+Shift
# Tab ^I ESC [ Z ^I ESC [ Z
# BackSpace ^H ^? ^? ^?
# Find ESC [ 1 ~ ESC [ 1 $ ESC [ 1 ^ ESC [ 1 @
# Insert ESC [ 2 ~ paste ESC [ 2 ^ ESC [ 2 @
# Execute ESC [ 3 ~ ESC [ 3 $ ESC [ 3 ^ ESC [ 3 @
# Select ESC [ 4 ~ ESC [ 4 $ ESC [ 4 ^ ESC [ 4 @
# Prior ESC [ 5 ~ scroll-up ESC [ 5 ^ ESC [ 5 @
# Next ESC [ 6 ~ scroll-down ESC [ 6 ^ ESC [ 6 @
# Home ESC [ 7 ~ ESC [ 7 $ ESC [ 7 ^ ESC [ 7 @
# End ESC [ 8 ~ ESC [ 8 $ ESC [ 8 ^ ESC [ 8 @
# Delete ESC [ 3 ~ ESC [ 3 $ ESC [ 3 ^ ESC [ 3 @
# F1 ESC [ 11 ~ ESC [ 23 ~ ESC [ 11 ^ ESC [ 23 ^
# F2 ESC [ 12 ~ ESC [ 24 ~ ESC [ 12 ^ ESC [ 24 ^
# F3 ESC [ 13 ~ ESC [ 25 ~ ESC [ 13 ^ ESC [ 25 ^
# F4 ESC [ 14 ~ ESC [ 26 ~ ESC [ 14 ^ ESC [ 26 ^
# F5 ESC [ 15 ~ ESC [ 28 ~ ESC [ 15 ^ ESC [ 28 ^
# F6 ESC [ 17 ~ ESC [ 29 ~ ESC [ 17 ^ ESC [ 29 ^
# F7 ESC [ 18 ~ ESC [ 31 ~ ESC [ 18 ^ ESC [ 31 ^
# F8 ESC [ 19 ~ ESC [ 32 ~ ESC [ 19 ^ ESC [ 32 ^
# F9 ESC [ 20 ~ ESC [ 33 ~ ESC [ 20 ^ ESC [ 33 ^
# F10 ESC [ 21 ~ ESC [ 34 ~ ESC [ 21 ^ ESC [ 34 ^
# F11 ESC [ 23 ~ ESC [ 23 $ ESC [ 23 ^ ESC [ 23 @
# F12 ESC [ 24 ~ ESC [ 24 $ ESC [ 24 ^ ESC [ 24 @
# F13 ESC [ 25 ~ ESC [ 25 $ ESC [ 25 ^ ESC [ 25 @
# F14 ESC [ 26 ~ ESC [ 26 $ ESC [ 26 ^ ESC [ 26 @
# F15 (Help) ESC [ 28 ~ ESC [ 28 $ ESC [ 28 ^ ESC [ 28 @
# F16 (Menu) ESC [ 29 ~ ESC [ 29 $ ESC [ 29 ^ ESC [ 29 @
# F17 ESC [ 31 ~ ESC [ 31 $ ESC [ 31 ^ ESC [ 31 @
# F18 ESC [ 32 ~ ESC [ 32 $ ESC [ 32 ^ ESC [ 32 @
# F19 ESC [ 33 ~ ESC [ 33 $ ESC [ 33 ^ ESC [ 33 @
# F20 ESC [ 34 ~ ESC [ 34 $ ESC [ 34 ^ ESC [ 34 @
#
# Application
# Up ESC [ A ESC [ a ESC O a ESC O A
# Down ESC [ B ESC [ b ESC O b ESC O B
# Right ESC [ C ESC [ c ESC O c ESC O C
# Left ESC [ D ESC [ d ESC O d ESC O D
# KP_Enter ^M ESC O M
# KP_F1 ESC O P ESC O P
# KP_F2 ESC O Q ESC O Q
# KP_F3 ESC O R ESC O R
# KP_F4 ESC O S ESC O S
# XK_KP_Multiply * ESC O j
# XK_KP_Add + ESC O k
# XK_KP_Separator , ESC O l
# XK_KP_Subtract - ESC O m
# XK_KP_Decimal . ESC O n
# XK_KP_Divide / ESC O o
# XK_KP_0 0 ESC O p
# XK_KP_1 1 ESC O q
# XK_KP_2 2 ESC O r
# XK_KP_3 3 ESC O s
# XK_KP_4 4 ESC O t
# XK_KP_5 5 ESC O u
# XK_KP_6 6 ESC O v
# XK_KP_7 7 ESC O w
# XK_KP_8 8 ESC O x
# XK_KP_9 9 ESC O y
#
# The source-code for rxvt actually defines mappings for F21-F35, using
# "ESC [ 35 ~" to "ESC [ 49 ~". Keyboards with more than 12 function keys
# are rare, so this entry uses the shift- and control-modifiers as in
# xterm+pcfkeys to define keys past F12.
#
# kIC is normally not used, since rxvt performs a paste for that (shifted
# insert), unless private mode 35 is set.
#
# kDN, kDN5, kDN6, etc are extensions based on the names from xterm+pcfkeys -TD
# Removed kDN6, etc (control+shift) since rxvt does not implement this -TD
rxvt+pcfkeys|fragment for PC-style fkeys,
kDC=\E[3$, kEND=\E[8$, kHOM=\E[7$, kIC=\E[2$, kLFT=\E[d,
kNXT=\E[6$, kPRV=\E[5$, kRIT=\E[c, kcub1=\E[D, kcud1=\E[B,
- kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kel=\E[8\^,
- kend=\E[8~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~,
- kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
- kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
- kf2=\E[12~, kf20=\E[34~, kf21=\E[23$, kf22=\E[24$,
- kf23=\E[11\^, kf24=\E[12\^, kf25=\E[13\^, kf26=\E[14\^,
- kf27=\E[15\^, kf28=\E[17\^, kf29=\E[18\^, kf3=\E[13~,
- kf30=\E[19\^, kf31=\E[20\^, kf32=\E[21\^, kf33=\E[23\^,
- kf34=\E[24\^, kf35=\E[25\^, kf36=\E[26\^, kf37=\E[28\^,
- kf38=\E[29\^, kf39=\E[31\^, kf4=\E[14~, kf40=\E[32\^,
- kf41=\E[33\^, kf42=\E[34\^, kf43=\E[23@, kf44=\E[24@,
- kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- kfnd=\E[1~, khome=\E[7~, kich1=\E[2~, kind=\E[a, knp=\E[6~,
- kpp=\E[5~, kri=\E[b, kslt=\E[4~, kDC5=\E[3\^, kDC6=\E[3@,
- kDN=\E[b, kDN5=\EOb, kEND5=\E[8\^, kEND6=\E[8@,
- kHOM5=\E[7\^, kHOM6=\E[7@, kIC5=\E[2\^, kIC6=\E[2@,
- kLFT5=\EOd, kNXT5=\E[6\^, kNXT6=\E[6@, kPRV5=\E[5\^,
- kPRV6=\E[5@, kRIT5=\EOc, kUP=\E[a, kUP5=\EOa,
+ kcuf1=\E[C, kcuu1=\E[A, kel=\E[8\^, kend=\E[8~, kf1=\E[11~,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
+ kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
+ kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~,
+ kf21=\E[23$, kf22=\E[24$, kf23=\E[11\^, kf24=\E[12\^,
+ kf25=\E[13\^, kf26=\E[14\^, kf27=\E[15\^, kf28=\E[17\^,
+ kf29=\E[18\^, kf3=\E[13~, kf30=\E[19\^, kf31=\E[20\^,
+ kf32=\E[21\^, kf33=\E[23\^, kf34=\E[24\^, kf35=\E[25\^,
+ kf36=\E[26\^, kf37=\E[28\^, kf38=\E[29\^, kf39=\E[31\^,
+ kf4=\E[14~, kf40=\E[32\^, kf41=\E[33\^, kf42=\E[34\^,
+ kf43=\E[23@, kf44=\E[24@, kf5=\E[15~, kf6=\E[17~,
+ kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[7~, kind=\E[a,
+ kri=\E[b, kDC5=\E[3\^, kDC6=\E[3@, kDN=\E[b, kDN5=\EOb,
+ kEND5=\E[8\^, kEND6=\E[8@, kHOM5=\E[7\^, kHOM6=\E[7@,
+ kIC5=\E[2\^, kIC6=\E[2@, kLFT5=\EOd, kNXT5=\E[6\^,
+ kNXT6=\E[6@, kPRV5=\E[5\^, kPRV6=\E[5@, kRIT5=\EOc,
+ kUP=\E[a, kUP5=\EOa, use=vt220+vtedit,
# rxvt was originally "xvt", first announced in April 1993:
# http://www.krsaborio.net/linux-desktops/research/1993/0416.html
#------------------------------------------------------------------------------
# Article: 567 of comp.os.linux.announce
# Path: pavo.csi.cam.ac.uk!warwick!uknet!pipex!uunet!zaphod.mps.ohio-state.edu!
# caen!batcomputer!theory.TC.Cornell.EDU!mdw
# From: nation@rocket.sanders.com (Robert Nation)
# Newsgroups: comp.os.linux.announce
# Subject: xvt upload
# Date: 16 Apr 1993 18:13:07 GMT
# Organization: Cornell Theory Center
# Lines: 13
# Approved: linux-announce@tc.cornell.edu (Matt Welsh)
# Message-ID: <1qmsvj$pvj@fitz.TC.Cornell.EDU>
# NNTP-Posting-Host: theory.tc.cornell.edu
# Keywords: xvt, xterm, Xwindows
# Originator: mdw@theory.TC.Cornell.EDU
#
# Rxvt has been uploaded to /pub/Linux/Incoming/rxvt.tar.z and
# rxvt.README on sunsite.unc.edu.
#
# Xvt is an xterm replacement which uses a little less memory, and is
# suitable for use on machines with small memories. Tek4010 support
# is removed.
#
# Modifications were made by Rob Nation (nation@rocket.sanders.lockheed.com)
# to make it a little more compact, and to add and remove certain features.
#
#
# --
# Send submissions for comp.os.linux.announce to: linux-announce@tc.cornell.edu
#------------------------------------------------------------------------------
#
# Though its change-log does not mention this, John Davis has stated that he
# was the author of the changes to use the bce ("new color model") which was
# incorporated into rxvt 2.11 (June 15, 1995). The change-log does not give
# dates, nor give developer's names. Initial color support was added for rxvt
# "2.0", which was sometime in 1994.
#
# rxvt had usable color support with 2.16 (April 2, 1996), with some help by my
# work on vttest, as well as bug reports to Mark Olesen. For instance, the fix
# mentioned here
# https://web.archive.org/web/20141016124430/http://web.archiveorange.com/archive/v/6ETvLb5wHtbbzCaS4S9J
# was from one of my bug-reports -TD
#
# While the color model both for xterm and rxvt was based on Linux console,
# Olesen (or possibly Davis) diverged in one respect from Linux's bce color
# behavior: inserting/deleting characters does not fill the newly empty cell
# with the default background color.
rxvt|rxvt terminal emulator (X Window System),
ncv@,
hpa=\E[%i%p1%dG, kf0=\E[21~, sgr0=\E[m\017,
vpa=\E[%i%p1%dd, use=rxvt-basic, use=ecma+color,
rxvt-color|rxvt terminal emulator (X Window System),
use=rxvt,
rxvt-256color|rxvt 2.7.9 with xterm 256-colors,
use=xterm+256color, use=rxvt,
rxvt-88color|rxvt 2.7.9 with xterm 88-colors,
use=xterm+88color, use=rxvt,
rxvt-xpm|rxvt terminal emulator (X Window System),
use=rxvt,
rxvt-cygwin|rxvt terminal emulator (X Window System) on cygwin,
acsc=+\257\,\256-\^0\333`\004a\261f\370g\361h\260j\331k
\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w
\302x\263y\363z\362{\343|\330}\234~\376,
use=rxvt,
rxvt-cygwin-native|rxvt terminal emulator (native MS Window System port) on cygwin,
acsc=+\257\,\256-\^0\333`\004a\261f\370g\361h\260j\331k
\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w
\302x\263y\363z\362{\343|\330~\376,
use=rxvt-cygwin,
# This variant is supposed to work with rxvt 2.7.7 when compiled with
# NO_BRIGHTCOLOR defined. rxvt needs more work...
rxvt-16color|rxvt with 16 colors like aixterm,
ncv#32, use=ibm+16color, use=rxvt,
#### MRXVT
# mrxvt 0.5.4
#
# mrxvt is based on rxvt 2.7.11, but has by default XTERM_FKEYS defined, which
# makes its function-keys different from other flavors of rxvt -TD
#
# Testing with tack:
# + made custom description (below) to work, though it sets TERM=xterm.
#
# Testing with vttest:
# + While "based on" rxvt, some of the basic functionality is broken. The
# window collapses to a single line when running several of the screens
# in vttest, e.g., the tests for cursor movement, screen features,
# double-sized characters.
# + The vt52 test works properly, but this is an exception. Due to the
# other bug(s) most of vttest is untestable.
# + the color test using ECH shows a gap in the bce model, like rxvt.
#
# Testing with xterm "vttest" scripts:
# + resize.pl does not work because mrxvt does implement CSI 18 t
# (not in rxvt, but not documented by mrxvt) but not CSI 19 t.
# + none of the "dynamic colors" (OSC colors) scripts work.
mrxvt|multitabbed rxvt,
XT,
kEND=\E[8;2~, kHOM=\E[7;2~, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kend=\E[8~, khome=\E[7~,
kEND3=\E[8;3~, kEND4=\E[8;4~, kEND5=\E[8;5~,
kEND6=\E[8;6~, kEND7=\E[8;7~, kHOM3=\E[7;3~,
kHOM4=\E[7;4~, kHOM5=\E[7;5~, kHOM6=\E[7;6~,
kHOM7=\E[7;7~, use=xterm+r6f2, use=xterm+pcfkeys,
use=rxvt,
mrxvt-256color|multitabbed rxvt with 256 colors,
use=xterm+256color, use=mrxvt,
#### ETERM
# From: Michael Jennings <mej@valinux.com>
#
# Eterm 0.9.3
#
# removed kf0 which conflicts with kf10 -TD
# remove cvvis which conflicts with cnorm -TD
# Eterm does not implement control/shift cursor keys such as kDN6, or kPRV/kNXT
# but does otherwise follow the rxvt+pcfkeys model -TD
# remove nonworking flash -TD
# remove km as per tack test -TD
Eterm|Eterm-color|Eterm with xterm-style color support (X Window System),
am, bce, bw, eo, mc5i, mir, msgr, xenl, xon, XT,
btns#5, cols#80, it#8, lines#24, lm#0, ncv@,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E)0,
home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=\n, is1=\E[?47l\E>\E[?1l,
is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l, kNXT@,
kPRV@, ka1=\E[7~, ka3=\E[5~, kb2=\EOu, kbeg=\EOu, kbs=^H,
kc1=\E[8~, kc3=\E[6~, kent=\EOM, khlp=\E[28~, kmous=\E[M,
mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
rmam=\E[?7l, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=,
rmso=\E[27m, rmul=\E[24m,
rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H,
rs2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?
25h,
sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E7\E[?47h,
smir=\E[4h, smkx=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
vpa=\E[%i%p1%dd, use=vt100+enq, use=rxvt+pcfkeys,
- use=ecma+color,
+ use=ecma+color, use=vt220+cvis,
Eterm-256color|Eterm with xterm 256-colors,
use=xterm+256color, use=Eterm,
Eterm-88color|Eterm with 88 colors,
use=xterm+88color, use=Eterm,
#### ATERM
# Based on rxvt 2.4.8, it has a few differences in key bindings
aterm|AfterStep terminal,
XT,
kbs=^?, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, use=rxvt,
#### XITERM
# xiterm 0.5-5.2
# This is not based on xterm's source...
# vttest shows several problems with keyboard, cursor-movements.
# see also https://invisible-island.net/xterm/xterm.faq.html#bug_xiterm
xiterm|internationalized terminal emulator for X,
km@,
kbs=^?, kdch1=\E[3~, use=klone+color, use=xterm-r6,
#### HPTERM
# HP ships this (HPUX 9 and 10), except for the pb#9600 which was merged in
# from BSD termcap. (hpterm: added empty <acsc>, we have no idea what ACS
# chars look like --esr)
hpterm|X-hpterm|hp X11 terminal emulator,
am, da, db, mir, xhp, xon,
cols#80, lh#2, lines#24, lm#0, lw#8, nlab#8, pb#9600, xmc#0,
acsc=, bel=^G, bold=\E&dB, cbt=\Ei, clear=\E&a0y0C\EJ, cr=\r,
cub1=^H, cud1=\EB, cuf1=\EC, cup=\E&a%p1%dy%p2%dC,
cuu1=\EA, dch1=\EP, dim=\E&dH, dl1=\EM, ed=\EJ$<1>, el=\EK,
hpa=\E&a%p1%dC, ht=^I, hts=\E1, il1=\EL, ind=\n, kbs=^H,
kclr=\EJ, kctab=\E2, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, kf1=\Ep,
kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew,
khome=\Eh, khts=\E1, kich1=\EQ, kil1=\EL, kind=\ES, kll=\EF,
knp=\EU, kpp=\EV, kri=\ET, krmir=\ER, ktbc=\E3, meml=\El,
memu=\Em, pfkey=\E&f%p1%dk%p2%l%dL%p2%s,
pfloc=\E&f1a%p1%dk%p2%l%dL%p2%s,
pfx=\E&f2a%p1%dk%p2%l%dL%p2%s,
pln=\E&f%p1%dk%p2%l%dd0L%p2%s, rev=\E&dB, ri=\ET,
rmacs=^O, rmir=\ER, rmkx=\E&s0A, rmln=\E&j@, rmso=\E&d@,
rmul=\E&d@,
sgr=\E&d%?%p7%t%{115}%c%;%p1%p3%|%p6%|%{2}%*%p2%{4}%*%+%p4%+
%p5%{8}%*%+%{64}%+%c%?%p9%t%'\016'%c%e%'\017'%c%;,
sgr0=\E&d@\017, smacs=^N, smir=\EQ, smkx=\E&s1A,
smln=\E&jB, smso=\E&dJ, smul=\E&dD, tbc=\E3,
vpa=\E&a%p1%dY,
# HPUX 11 provides a color version.
hpterm-color|HP X11 terminal emulator with color,
ccc,
colors#64, pairs#8,
home=\E&a0y0C,
initp=\E&v%p2%da%p3%db%p4%dc%p5%dx%p6%dy%p7%dz%p1%dI,
op=\E&v0S, scp=\E&v%p1%dS, use=hpterm,
#### EMU
# This is for the extensible terminal emulator on the X11R6 contrib tape.
# It corresponds to emu's internal emulation:
# emu -term emu
# emu's default sets TERM to "xterm", but that doesn't work well -TD
# fixes: remove bogus rmacs/smacs, change oc to op, add bce, am -TD
# fixes: add civis, cnorm, sgr -TD
emu|emu native mode,
am, bce, mir, msgr, xon,
colors#15, cols#80, it#8, lines#24, pairs#64, vt#200,
acsc=61a\202f\260g2j\213k\214l\215m\216n\217o\220q\222s
\224t\225u\226v\227w\230x\231~\244,
bel=^G, blink=\EW, bold=\EU, civis=\EZ, clear=\EP\EE0;0;,
cnorm=\Ea, cr=\r, csr=\Ek%p1%d;%p2%d;, cub=\Eq-%p1%d;,
cub1=^H, cud=\Ep%p1%d;, cud1=\EB, cuf=\Eq%p1%d;, cuf1=\EC,
cup=\EE%p1%d;%p2%d;, cuu=\Ep-%p1%d;, cuu1=\EA,
dch=\EI%p1%d;, dch1=\EI1;, dl=\ER%p1%d;, dl1=\ER1;,
ech=\Ej%p1%d;, ed=\EN, el=\EK, el1=\EL, home=\EE0;0;, ht=^I,
hts=\Eh, il=\EQ%p1%d;, il1=\EQ1;, ind=\EG,
is2=\ES\Er0;\Es0;, kbs=^H, kcub1=\EC, kcud1=\EB, kcuf1=\ED,
kcuu1=\EA, kdch1=^?, kent=\r, kf0=\EF00, kf1=\EF01,
kf10=\EF10, kf11=\EF11, kf12=\EF12, kf13=\EF13, kf14=\EF14,
kf15=\EF15, kf16=\EF16, kf17=\EF17, kf18=\EF18, kf19=\EF19,
kf2=\EF02, kf20=\EF20, kf3=\EF03, kf4=\EF04, kf5=\EF05,
kf6=\EF06, kf7=\EF07, kf8=\EF08, kf9=\EF09, kfnd=\Efind,
kich1=\Eins, knp=\Enext, kpp=\Eprior, kslt=\Esel,
op=\Es0;\Er0;, rev=\ET, ri=\EF, rmir=\EX, rmso=\ES, rmul=\ES,
rs2=\ES\Es0;\Er0;, setab=\Es%i%p1%d;,
setaf=\Er%i%p1%d;,
sgr=\ES%?%p1%t\ET%;%?%p2%t\EV%;%?%p3%t\ET%;%?%p4%t\EW%;%?%p6
%t\EU%;,
sgr0=\ES, smir=\EY, smso=\ET, smul=\EV, tbc=\Ej,
# vt220 Terminfo entry for the Emu emulation, corresponds to
# emu -term vt220
# with NumLock set (to make the keypad transmit kf0-kf9).
# fixes: add am, xenl, corrected sgr0 -TD
emu-220|Emu-220 (vt200-7bit mode),
am, xenl, xon,
cols#80, it#8, lines#24, vt#200,
acsc=aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G,
- blink=\E[0;5m, bold=\E[0;1m, civis=\E[?25l,
- clear=\E[2J\E[H, cnorm=\E[?25h, cr=\r,
+ blink=\E[0;5m, bold=\E[0;1m, clear=\E[2J\E[H, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[1D,
cud=\E[%p1%dB, cud1=\E[1B, cuf=\E[%p1%dC, cuf1=\E[1C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[1A,
dch=\E[%p1%dP, dch1=\E[1P, dl=\E[%p1%dM, dl1=\E[1M,
ed=\E[0J, el=\E[0K, el1=\E[1K, enacs=\E)0, home=\E[H, ht=^I,
hts=\EH, if=/usr/share/tabset/vt300, il=\E[%p1%dL,
il1=\E[1L, ind=\ED, is2=\E>\E[?1l\E[?3l\E[4l\E[?7h,
kbs=^H, kcmd=\E[29~, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
- kcuu1=\E[A, kdch1=\E[3~, kent=\EOM, kf0=\EOp, kf1=\EOq,
- kf10=\EOl, kf11=\EOm, kf12=\EOn, kf13=\EOP, kf14=\EOQ,
- kf15=\EOR, kf16=\EOS, kf2=\EOr, kf26=\E[17~, kf27=\E[18~,
- kf28=\E[19~, kf29=\E[20~, kf3=\EOs, kf30=\E[21~,
- kf34=\E[26~, kf37=\E[31~, kf38=\E[32~, kf39=\E[33~,
- kf4=\EOt, kf40=\E[34~, kf5=\EOu, kf6=\EOv, kf7=\EOw,
- kf8=\EOx, kf9=\EOy, kfnd=\E[1~, khlp=\E[28~, kich1=\E[2~,
- knp=\E[6~, kpp=\E[5~, kslt=\E[4~, rc=\E8, rev=\E[0;7m,
- ri=\EM, rmacs=^O, rmcup=\E>, rmkx=\E>, rmso=\E[m, rmul=\E[m,
+ kcuu1=\E[A, kent=\EOM, kf0=\EOp, kf1=\EOq, kf10=\EOl,
+ kf11=\EOm, kf12=\EOn, kf13=\EOP, kf14=\EOQ, kf15=\EOR,
+ kf16=\EOS, kf2=\EOr, kf26=\E[17~, kf27=\E[18~, kf28=\E[19~,
+ kf29=\E[20~, kf3=\EOs, kf30=\E[21~, kf34=\E[26~,
+ kf37=\E[31~, kf38=\E[32~, kf39=\E[33~, kf4=\EOt,
+ kf40=\E[34~, kf5=\EOu, kf6=\EOv, kf7=\EOw, kf8=\EOx,
+ kf9=\EOy, khlp=\E[28~, rc=\E8, rev=\E[0;7m, ri=\EM, rmacs=^O,
+ rmcup=\E>, rmkx=\E>, rmso=\E[m, rmul=\E[m,
rs2=\E[4l\E[34l\E[?1l\E[?3l\E[?5l\E[?7h, sc=\E7,
sgr=\E[0%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;
2%;%?%p6%t;1%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smcup=\E[?1l\E=, smkx=\E=,
- smso=\E[0;7m, smul=\E[0;4m, tbc=\E[3g,
+ smso=\E[0;7m, smul=\E[0;4m, tbc=\E[3g, use=vt220+vtedit,
+ use=vt220+cvis,
#### MVTERM
# A commercial product, Reportedly a version of Xterm with an OPEN LOOK UI,
# print interface, ANSI X3.64 colour escape sequences, etc. Newsgroup postings
# indicate that it emulates more than one terminal, but incompletely.
#
# This is adapted from a FreeBSD bug-report by Daniel Rudy <dcrudy@pacbell.net>
# It is based on vt102's entry, with some subtle differences, but also
# has status line
# supports ANSI colors (except for 'op' string)
# apparently implements alternate screen like xterm
# does not use padding, of course.
mvterm|vv100|SwitchTerm aka mvTERM,
am, eslok, hs, km, mir, msgr, xenl, xon,
colors#8, cols#80, it#8, lines#24, pairs#64,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
dsl=\E[?E, ed=\E[J, el=\E[K, el1=\E[1K$<3>, enacs=\E(B\E)0,
fsl=\E[?F, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n, kbs=^H,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf0=\EOy,
kf10=\EOx, kf5=\EOt, kf6=\EOu, kf7=\EOv, kf8=\EOl, kf9=\EOw,
op=\E[100m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
rmcup=\E[2J\E[?47l\E8, rmkx=\E[?1l\E>, rmso=\E[m,
rmul=\E[m,
rs2=\E>\E[1;3;4;5;6l\E[?7h\E[100m\E[m\E[r\E[2J\E[H,
sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smcup=\E7\E[?47h,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
tsl=\E[?E\E[?%i%p1%dT, use=vt100+fnkeys,
#### MTERM
#
# This application is available by email from <mouse@Rodents.Montreal.QC.CA>.
#
# "mterm -type ansi" sets $TERM to "ansi"
mterm-ansi|ANSI emulation,
am, bw, mir, msgr,
it#8,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J,
el=\E[K, home=\E[H, hpa=\E[%i%p1%d`, ht=^I, ich1=,
il=\E[%p1%dL, il1=\E[L, ind=\E[S, invis=\E[8m,
is2=\E)0\017, kbs=^H, nel=\EE, rev=\E[7m, ri=\E[T, rmacs=^O,
rmir=\E[4l, rmso=\E[27m, rmul=\E[24m,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?
%p5%t;2%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smir=\E[4h, smso=\E[7m,
smul=\E[4m, vpa=\E[%i%p1%dd, use=ecma+index,
# mterm normally sets $TERM to "mterm"
mterm|mouse-sun|Der Mouse term,
am, bw, mir,
it#8,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=^N, cuf1=^S,
cup=\006%p1%d.%p2%d., cuu1=^X, dch1=^Y, dl1=^K, ed=^B, el=^C,
home=^P, ht=^I, il1=^A, ind=^U, kbs=^H, ll=^R, nel=\r^U, ri=^W,
rmir=^O, rmso=^T, smir=^Q, smso=^V,
# "mterm -type decansi" sets $TERM to "decansi"
#
# note: kdch1, kfnd, kslt are in the source code, but do not work -TD
decansi|ANSI emulation with DEC compatibility hacks,
am, mir, msgr, xenl,
colors#8, it#8, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM,
dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, enacs=\E(B\E)0,
home=\E[H, hpa=\E[%i%p1%d`, ht=^I, ich1=, il=\E[%p1%dL,
il1=\E[L, ind=\E[S, invis=\E[8m, is2=\E)0\E[r\017, kbs=^H,
- kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
- kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~,
- kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
- kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
- kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~,
- kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- kfnd=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kslt=\E[4~,
- nel=\EE, op=\E[0m, rc=\E8, rev=\E[7m, ri=\E[T, rmacs=^O,
- rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m,
- rmul=\E[24m, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
+ kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\E[11~,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
+ kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
+ kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~,
+ kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~,
+ kf8=\E[19~, kf9=\E[20~, nel=\EE, op=\E[0m, rc=\E8, rev=\E[7m,
+ ri=\E[T, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>,
+ rmso=\E[27m, rmul=\E[24m, sc=\E7, setab=\E[4%p1%dm,
+ setaf=\E[3%p1%dm,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?
%p5%t;2%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, u6=\E[%i%d;%dR,
- u7=\E[6n, vpa=\E[%i%p1%dd, use=ecma+index,
+ u7=\E[6n, vpa=\E[%i%p1%dd, use=vt220+vtedit,
+ use=ecma+index, use=vt220+cvis,
#### VWM
# http://vwm.sourceforge.net/
#
# VWM 2.0.2 (2009-05-01)
# vwmterm is a terminal emulator written for the VWM console window manager.
# This version is obsolete, replaced by libvterm in 2.1.0 (2009-10-23).
vwmterm|(vwm term),
am, bce, ccc, mir, msgr, npc, xenl, xon,
colors#8, pairs#64,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h, cr=\r, cub=\E[%p1%dD,
- cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC,
- cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA,
- cuu1=\E[A, cvvis=\E[?25h, dim=\E[2m, ed=\E[J, el=\E[K,
- home=\E[H, il1=\E[L, ind=\n, invis=\E[8m, kcub1=\E[D,
- kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~,
- kend=\E[4~, kf1=\E[[A, kf10=\E[21~, kf11=\E[22~,
- kf12=\E[23~, kf2=\E[[B, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E,
- kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
+ cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B,
+ cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
+ cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?25h, dim=\E[2m,
+ ed=\E[J, el=\E[K, home=\E[H, il1=\E[L, ind=\n, invis=\E[8m,
+ kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
+ kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~,
+ kf11=\E[22~, kf12=\E[23~, kf2=\E[[B, kf3=\E[[C, kf4=\E[[D,
+ kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
khome=\E[1~, knp=\E[6~, kpp=\E[5~, rev=\E[7m, rmacs=\E[10m,
rmam=\E[?7l, rs1=\E[H\E[J\E[m\Ec, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm,
sgr=\E[0;10%?%p1%t;3%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5
%t;2%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m,
sgr0=\E[0;10m, smacs=\E[11m, smam=\E[?7h, smso=\E[3m,
- smul=\E[4m, use=xterm+alt1049,
+ smul=\E[4m, use=vt220+cvis, use=xterm+alt1049,
#### MGR
#
# MGR is a Bell Labs window system lighter-weight than X.
# These entries describe MGR's xterm-equivalent.
# They are courtesy of Vincent Broman <broman@nosc.mil> 14 Jan 1997
#
mgr|Bellcore MGR (non X) window system terminal emulation,
am, km, xon,
bel=^G, bold=\E2n, civis=\E9h, clear=^L, cnorm=\Eh, cr=\r,
csr=\E%p1%d;%p2%dt, cub1=^H, cud1=\Ef, cuf1=\Er,
cup=\E%p2%d;%p1%dM, cuu1=\Eu, cvvis=\E0h,
dch=\E%p1%dE$<5>, dch1=\EE, dl=\E%p1%dd$<3*>,
dl1=\Ed$<3>, ed=\EC, el=\Ec, hd=\E1;2f, ht=^I, hu=\E1;2u,
ich=\E%p1%dA$<5>, ich1=\EA, il=\E%p1%da$<3*>,
il1=\Ea$<3>, ind=\n, kbs=^H, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, nel=\r\n, rev=\E1n, rmam=\E5S,
rmso=\E0n, rmul=\E0n, sgr0=\E0n, smam=\E5s, smso=\E1n,
smul=\E4n,
mgr-sun|Mgr window with Sun keyboard,
ka1=\E[214z, ka3=\E[216z, kb2=\E[218z, kc1=\E[220z,
kc3=\E[222z, kcpy=\E[197z, kend=\E[220z, kent=\E[250z,
kf1=\E[224z, kf10=\E[233z, kf11=\E[234z, kf12=\E[235z,
kf2=\E[225z, kf3=\E[226z, kf4=\E[227z, kf5=\E[228z,
kf6=\E[229z, kf7=\E[230z, kf8=\E[231z, kf9=\E[232z,
kfnd=\E[200z, khlp=\E[207z, khome=\E[214z, knp=\E[222z,
kopn=\E[198z, kpp=\E[216z, kund=\E[195z, use=mgr,
mgr-linux|Mgr window with Linux keyboard,
ka1=\E[H, ka3=\E[5~, kb2=\E[G, kc1=\E[Y, kc3=\E[6~,
kdch1=\E[3~, kend=\E[4~, kf0=\E[[J, kf1=\E[[A, kf10=\E[21~,
kf11=\E[23~, kf12=\E[24~, kf2=\E[[B, kf3=\E[[C, kf4=\E[[D,
kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
khome=\E[1~, knp=\E[6~, kpp=\E[5~, use=mgr,
#### SIMPLETERM
# st.suckless.org
st|stterm| simpleterm,
use=st-0.8,
# Reviewed 0.8.2:
# In tack,
# there is some problem turning off line-drawing
# shift+control function-keys do nothing; shift+control cursor keys work
# the padding tests make the terminal non-functional.
# In vttest,
# SD/SU work
# SL/SR/REP do not work
# ECMA-48 cursor movement works, e.g., CHA, CBT, etc.
#
# This entry discards the ccc/initc capabilities from st-0.7 because they
# belong in st-256color.
st-0.8|simpleterm 0.7,
dim=\E[2m, kcbt@, kent@, oc=\E]104\007,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|
%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m,
Ms=\E]52;%p1%s;%p2%s\007, kDN3=\E[1;3B, kDN5=\E[1;5B,
kLFT3=\E[1;3D, kLFT5=\E[1;5D, kNXT3=\E[6;3~,
kNXT5=\E[6;5~, kPRV3=\E[5;3~, kPRV5=\E[5;5~,
kRIT3=\E[1;3C, kRIT5=\E[1;5C, kUP3=\E[1;3A, kUP5=\E[1;5A,
use=ecma+strikeout, use=st-0.6,
# Reviewed 0.7:
# dim is intermittent, sometimes works, sometimes does not
# italics may show up with yellow color
# has control cursor-keys, alt cursor-keys, still no combinations
# has control pageup/down
# tmux extensions, see TERMINFO EXTENSIONS in tmux(1)
# Se and Ss are implemented in the source-code, but the terminfo
# provided with the source is incorrect, since Se/Ss are mis-coded
# as booleans rather than strings.
st-0.7|simpleterm 0.7,
ccc,
dim=\E[2m,
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*
%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
kcbt@, kent@, oc=\E]104\007,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|
%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m,
Ms=\E]52;%p1%s;%p2%s\007, kDN3=\E[1;3B, kDN5=\E[1;5B,
kLFT3=\E[1;3D, kLFT5=\E[1;5D, kNXT3=\E[6;3~,
kNXT5=\E[6;5~, kPRV3=\E[5;3~, kPRV5=\E[5;5~,
kRIT3=\E[1;3C, kRIT5=\E[1;5C, kUP3=\E[1;3A, kUP5=\E[1;5A,
use=ecma+strikeout, use=st-0.6,
# st-0.4.1
#
# This version uses a table which supports a single modifier (a subset of
# xterm's keys, using the same scheme). Because it supports only a single
# modifier in this table, function keys f36-f48 are normally unavailable
# because they are assigned to modifier-4.
#
# The program assigns TERM to match the program name (the upstream source says
# "st", but Debian renames it to "stterm").
#
# The source includes two entries which are not useful here:
# st-meta| simpleterm with meta key,
# st-meta-256color| simpleterm with meta key and 256 colors,
# because st's notion of "meta" does not correspond to the terminfo definition.
# Rather, it acts like xterm - when the meta feature is disabled.
#
# Removed invis -TD
# Added eo, removed ul -TD
#
# Reviewed st 0.5:
# implements control-modifier, but not control-shift for special keys
# implements alt-modifier, but not alt-shift for special keys
#
# Reviewed st 0.6:
# http://git.suckless.org/st/log/st.info
# Tmux unofficial extensions, see TERMINFO EXTENSIONS in tmux(1)
# still has no function keys past kf36 (no combinations of modifiers)
# no application keypad mode, e.g, kent.
st-0.6|simpleterm 0.6,
am, bce, hs, mir, msgr, npc, xenl, XT,
colors#8, cols#80, it#8, lines#24, pairs#64,
acsc=+C\,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyy
zz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=\r,
- csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[2J,
+ cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
- cvvis=\E[?25h, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
- dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
- enacs=\E)0, flash=\E[?5h$<100/>\E[?5l, fsl=^G, home=\E[H,
+ dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
+ ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E)0,
+ flash=\E[?5h$<100/>\E[?5l, fsl=^G, home=\E[H,
hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=\n, invis=\E[8m,
is2=\E[4l\E>\E[?1034l, kDC=\E[3;2~, kEND=\E[1;2F,
kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~,
kPRV=\E[5;2~, kRIT=\E[1;2C, ka1=\E[1~, ka3=\E[5~, kb2=\EOu,
kbs=^?, kc1=\E[4~, kc3=\E[6~, kcbt=\E[Z, kclr=\E[3;5~,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
- kdch1=\E[3~, kdl1=\E[3;2~, ked=\E[1;5F, kel=\E[1;2F,
- kend=\E[4~, kent=\EOM, kf1=\EOP, kf10=\E[21~, kf11=\E[23~,
- kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q, kf15=\E[1;2R,
- kf16=\E[1;2S, kf17=\E[15;2~, kf18=\E[17;2~,
- kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~,
- kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~,
- kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S,
- kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~,
- kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~,
- kf35=\E[23;5~, kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q,
- kf39=\E[1;6R, kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~,
- kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~,
- kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~,
- kf48=\E[24;6~, kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q,
- kf51=\E[1;3R, kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
+ kdl1=\E[3;2~, ked=\E[1;5F, kel=\E[1;2F, kent=\EOM,
+ kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
+ kf13=\E[1;2P, kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S,
+ kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ,
+ kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~,
+ kf23=\E[23;2~, kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q,
+ kf27=\E[1;5R, kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR,
+ kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~,
+ kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~,
+ kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R,
+ kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~, kf42=\E[17;6~,
+ kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~,
+ kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~,
+ kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q, kf51=\E[1;3R,
+ kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
- kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~,
- kil1=\E[2;5~, kind=\E[1;2B, kmous=\E[M, knp=\E[6~,
- kpp=\E[5~, kri=\E[1;2A, krmir=\E[2;2~, mc0=\E[i, mc4=\E[4i,
- mc5=\E[5i, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM,
- rmacs=\E(B, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m,
- rmul=\E[24m, rs1=\Ec, rs2=\E[4l\E>\E[?1034l, sc=\E7,
- setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
+ kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kil1=\E[2;5~,
+ kind=\E[1;2B, kmous=\E[M, kri=\E[1;2A, krmir=\E[2;2~,
+ mc0=\E[i, mc4=\E[4i, mc5=\E[5i, op=\E[39;49m, rc=\E8,
+ rev=\E[7m, ri=\EM, rmacs=\E(B, rmir=\E[4l, rmkx=\E[?1l\E>,
+ rmso=\E[27m, rmul=\E[24m, rs1=\Ec, rs2=\E[4l\E>\E[?1034l,
+ sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|
%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,
sgr0=\E[0m, smacs=\E(0, smir=\E[4h, smkx=\E[?1h\E=,
smso=\E[7m, smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR,
u7=\E[6n, u8=\E[?1;2c, u9=\E[c, vpa=\E[%i%p1%dd, Se=\E[2 q,
- Ss=\E[%p1%d q, use=ecma+index, use=xterm+alt1049,
- use=xterm+sl, use=ecma+italics,
+ Ss=\E[%p1%d q, use=vt220+pcedit, use=ecma+index,
+ use=xterm+alt1049, use=vt220+cvis, use=xterm+sl,
+ use=ecma+italics,
#
# st-0.1.1
#
# Note: the original terminfo description uses leading blank to persuade
# ncurses to use "st" as its name. Proper fix for that is to use "st" as an
# alias.
#
# Reading the code shows it should work for aixterm 16-colors
# - added st-16color
#
# Using tack:
# - set eo (erase-overstrike)
# - set xenl
# - tbc doesn't work
# - hts works
# - cbt doesn't work
# - shifted cursor-keys send sequences like rxvt
# - sgr referred to unimplemented "invis" mode.
# Fixes: add eo and xenl per tack, remove nonworking cbt, hts and tbc, invis
simpleterm|old-st| simpleterm 0.1.1,
am, eo, mir, msgr, ul, xenl,
colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J,
- cnorm=\E[?12l\E[?25h, cr=\r, csr=\E[%i%p1%d;%p2%dr,
- cub1=^H, cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
- cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
- dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K,
- home=\E[H, hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@,
- il=\E[%p1%dL, il1=\E[L, ind=\n, kbs=^?, kcub1=\E[D,
- kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~,
- kend=\E[4~, kf1=\EOP, kf10=\E[21~, kf11=\E[23~,
- kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[15~,
- kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
+ bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=\r,
+ csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud=\E[%p1%dB, cud1=\n,
+ cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
+ cuu=\E[%p1%dA, cuu1=\E[A, dch1=\E[P, dl=\E[%p1%dM,
+ dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, hpa=\E[%i%p1%dG,
+ ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\n, kbs=^?,
+ kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
+ kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~,
+ kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
+ kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
khome=\E[1~, knp=\E[6~, kpp=\E[5~, op=\E[37;40m, rc=\E8,
rev=\E[7m, rmacs=\E(B, rmso=\E[m, rmul=\E[m, sc=\E7,
setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|
%t;7%;m,
sgr0=\E[0m, smacs=\E(0, smso=\E[7m, smul=\E[4m,
- use=ecma+index,
+ use=vt220+cvis, use=ecma+index,
st-16color|stterm-16color|simpleterm with 16-colors,
use=ibm+16color, use=st,
# Tested with st 0.8.2
# The issue with the titlebar is fixed, though st is very slow.
# In st 0.7, 256 colors "works", but when running xterm's test-scripts, some
# garbage is shown in the titlebar.
#
# terminal wants to use TERM=stterm-256color, but that is longer than 14
# characters, making the choice nonportable.
st-256color|stterm-256color|simpleterm with 256 colors,
use=xterm+256color, use=st,
#### TERMINATOR
# https://github.com/software-jessies-org/jessies/wiki/Terminator
#
# Tested using the Debian package org.jessies.terminator 6.104.3256 on 64-bit
# Debian/current -TD (2011/8/20)
#
# There were some packaging problems:
# a) using Java, the program starts off using 50Mb, and climbs from there,
# up to 114Mb after testing (no scrollback).
# b) it insists on reinstalling its terminal description in $HOME/.terminfo
# (two copies, just in case the host happens to be Mac OS X).
# I deleted this after testing with tack.
#
# Issues/features found with tack:
# a) tbc does not work (implying that hts also is broken).
# Comparing with the tabs utility shows a problem with the last tabstop on
# a line.
# b) has xterm-style shifted function-key strings
# meta also is used, but control is ignored.
# c) has xterm-style modifiers for cursor keys (shift, control, shift+control,
# meta)
# d) some combinations of shift/control send xterm-style sequences for
# insert/delete/home/end.
# e) numeric keypad sends only numbers (compare with vttest).
# f) meta mode (km) is not implemented.
#
# Issues found with ncurses test-program:
# a) bce is inconsistently implemented
# b) widths of Unicode values above 256 do not always agree with wcwidth.
#
# Checked with vttest, found low degree of compatibility there.
#
# Checked with xterm's scripts, found that the 256-color palette is fixed.
#
# Fixes:
# a) add sgr string
# b) corrected sgr0 to reset alternate character set
# c) modified smacs/rmacs to use SCS rather than SI/SO
# d) removed bce
# e) removed km
#
# Revisiting in May 2019, the Debian package was no longer available, and a
# developer-provided ".deb" does not work. However, a usable Windows ".msi"
# (which relies upon Cygwin) can be tested. The developers provide a terminfo,
# but some of the features it lists do not work reliably (bce, italics, invis).
#
# tack:
# tbc fails
# invis attribute fails
# key-definitions could be expanded, with some work:
# + supports xterm-style cursor key-modifiers for shift
# + supports xterm-style function key-modifiers for shift,control,alt
# + supports xterm-style editing key-modifiers for shift,control,alt
# (kbs=^?)
# ncurses test-program:
# "C" menu shows that bce implementation is incomplete
# italics did not work
# dim worked once in tack, but not in ncurses test-program
# "F" thick-line characters do not display
# vttest:
# terminal does not respond to 80/132-column switching
# wrapping at the right margin is erratic
# there are several problems in the cursor-movements and screen-features
# no vt52, no double-sized characters
# Device attributes response says it is a vanilla VT100
# does not respond to xterm mouse controls
# alternate screen tests do not fill the screen, return wrong position
# window modify/report operations do not work
# miscellaneous ISO-6429 tests, e.g., REP, do not work
# CBT, CHT, HPR, CNL,CPL, VPR do not work
#
# removed the cancel for "hs", removed cbt, invis, corrected sgr -TD
# use xterm+256setaf, etc -TD
terminator|Terminator no line wrap,
bce, eo, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, lm#0,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J,
- cnorm=\E[?25h, cr=\r, csr=\E[%i%p1%d;%p2%dr,
- cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
- cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
- cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
- dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K,
- el1=\E[1K, enacs=\E(B\E)0, flash=^G, home=\E[H,
- hpa=\E[%i%p1%dG, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L,
- ind=\n, is1=\E[?47l\E=\E[?1l,
+ bold=\E[1m, clear=\E[H\E[2J, cr=\r,
+ csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
+ cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
+ cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
+ dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM,
+ dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0,
+ flash=^G, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH,
+ il=\E[%p1%dL, il1=\E[L, ind=\n, is1=\E[?47l\E=\E[?1l,
is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l, kbs=^?,
- kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
- kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
- kf15=\E[28~, kf16=\E[29~, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
- kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, rc=\E8,
- rev=\E[7m, ri=\EM, rmacs=\E(B, rmir=\E[4l, rmso=\E[27m,
- rmul=\E[24m, rs1=\Ec, rs2=\E[!p\E[?3;4l\E[4l\E>,
- s0ds=\E(B, s1ds=\E(0, sc=\E7,
+ kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
+ kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf2=\EOQ, kf3=\EOR,
+ kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
+ kf9=\E[20~, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E(B,
+ rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec,
+ rs2=\E[!p\E[?3;4l\E[4l\E>, s0ds=\E(B, s1ds=\E(0, sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p5%t;2%;%?%p1%p3%|%t;7
%;m%?%p9%t\E(0%e\E(B%;,
sgr0=\E[m\E(B, smacs=\E(0, smir=\E[4h, smso=\E[7m,
smul=\E[4m, tbc=\E[3g, tsl=\E]2;%p1, vpa=\E[%i%p1%dd,
- use=ecma+italics, use=ecma+index, use=xterm+256setaf,
- use=xterm+sl-twm, use=xterm+alt1049,
+ use=vt220+pcedit, use=ecma+italics, use=ecma+index,
+ use=xterm+256setaf, use=xterm+sl-twm,
+ use=xterm+alt1049, use=vt220+cvis,
#### TERMINOLOGY
# https://www.enlightenment.org/about-terminology
+# https://github.com/borisfaure/terminology
#
+# 2014/10/14:
# Tested terminology-0.3.0, 0.6.1, using tack and vttest. This is not a vt100
# emulator, nor is it compatible with xterm, but it uses a few features from
# both -TD
#
# General comments:
# cursor does not fill on focus
# there are pervasive problems with clearing/erasing parts of the screen
# resizing the window causes it to stop listening to the keyboard
# tack -
# doesn't understand vt100 CPR needed for resize
# no CBT
# no cvvis
# has invis
# no blink
# uses bce model for colors, but (see below) fails the vttest screens
# has partial support for 256color feature.
# tack function-keys (a subset of xterm+pcf0), and
# tack cursor-keys (a subset of xterm+pce2):
# ctrl+shift (ignored)
# 2 shift
# shift-alt modifier -> shift (2)
# 3 alt
# 4
# 5 ctrl
# tack modifiers did not work for fkeys in 0.3.0; subset works in 0.6.1
# ctrl + khome/kend works - none of the other modifiers do
# vttest -
# spits lots of messages from termptyesc.c especially in vttest.
# no 132-column mode
# fails menu 1, 2 (definitely not vt100-compatible)
# primary (claims vt420 with several options, apparently none work) and
# secondary report says (perhaps... vt420): \E[>41;285;0c
# CHA, HPR, VPA, CNL, CPL work
# BCE with ED/EL - fail
# BCE with ECH/indexing - fail
# SD/SU work
# unlike teken, background light/dark works
# can set title
# X10 and Normal mouse work
# Any-event mouse works
# Mouse button-event works
#
# This description uses xterm+pcf0, which is misleading because the program
# does not handle combinations of modifiers - but listing them all would
# involve more effort than its developers spent -TD
terminology-0.6.1|EFL-based terminal emulator,
mc5i@,
blink@, ed@, el@, el1@, invis=\E[8m, kLFT=\E[1;2D,
kRIT=\E[1;2C, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
kind=\E[1;2B, kri=\E[1;2A,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p7%t;8
%;m%?%p9%t\016%e\017%;$<2>,
vpa=\E[%i%p1%dd, kDC3=\E[3;3~, kDC4=\E[3;4~,
kDC5=\E[3;5~, kDC6=\E[3;6~, kDC7=\E[3;7~, kDN=\E[1;2B,
kDN3=\E[1;3B, kDN4=\E[1;4B, kDN5=\E[1;5B, kDN6=\E[1;6B,
kDN7=\E[1;7B, kEND5=\E[1;5F, kHOM5=\E[1;5H,
kLFT3=\E[1;3D, kLFT4=\E[1;4D, kLFT5=\E[1;5D,
kLFT6=\E[1;6D, kLFT7=\E[1;7D, kRIT3=\E[1;3C,
kRIT4=\E[1;4C, kRIT5=\E[1;5C, kRIT6=\E[1;6C,
kRIT7=\E[1;7C, kUP=\E[1;2A, use=xterm+pcf0, use=vt100,
use=xterm+256setaf,
+# 2017-11-11
# Tested terminology 1.0.0
#
# tack -
# Shifted cursor-keys send nothing, but xterm modifiers for control+shift
# and control+alt were added like xterm+pcc2
# Editing keys have some features from xterm+pce2
# Changed from xterm+pcf0 to xterm+pcf2
#
# vttest -
# REP, SL, SR fail
#
# Aside from the partial fixes for function/cursor/editing keys, no improvement
# in other tests versus 0.6.1
terminology-1.0.0|EFL-based terminal emulator,
- civis=\E[?25l, cnorm=\E[?12l\E[?25h, dim=\E[2m,
- flash=\E[?5h$<100/>\E[?5l, kend=\E[OF, khome=\E[OH,
- rmacs=\E(B,
+ dim=\E[2m, flash=\E[?5h$<100/>\E[?5l, kend=\E[OF,
+ khome=\E[OH, rmacs=\E(B,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;
%?%p1%p3%|%t;7%;%?%p7%t;8%;m$<2>,
sgr0=\E(B\E[m, smacs=\E(0, use=ecma+italics,
- use=xterm+x11mouse, use=xterm+pce2, use=xterm+pcf2,
- use=xterm+pcc2, use=terminology-0.6.1,
+ use=vt220+cvis, use=xterm+x11mouse, use=xterm+pce2,
+ use=xterm+pcf2, use=xterm+pcc2, use=terminology-0.6.1,
+
+# 2020/12/26:
+# Tested terminology 1.8.1 using tack and vttest.
+# tack -
+# flash does not work
+# italics and crossed-out text work
+# no meta mode
+# vttest -
+# DA1 says this is a VT420 with with 132 columns, NRCS, horizontal scrolling
+# DA2 says this is a VT510, version 33.7
+# NRCS does not work, program hangs in the locking shift test.
+# some of the VT420 rectangle operations work
+# left/right margins do not work
+# most of DECSCUSR works
+# most problems with bce are fixed.
+terminology-1.8.1|EFL-based terminal emulator,
+ km@,
+ cvvis@, flash@, initc@, kcbt=\E[Z, rmm@, smm@, Ms@,
+ use=ecma+index, use=xterm+256setaf, use=ansi+rep,
+ use=ecma+strikeout, use=xterm+sm+1006,
+ use=xterm+pcfkeys, use=xterm+tmux, use=vt220+cvis,
+ use=ecma+italics, use=xterm-basic,
terminology|EFL-based terminal emulator,
- use=terminology-1.0.0,
+ use=terminology-1.8.1,
######## OPENGL CLIENTS
#### Alacritty
# https://github.com/jwilm/alacritty
+# Version 0.6.0 (2020/11/25)
# Version 0.4.0 (2019/11/25)
# Version 0.3.3 (2019/08/03)
# Version 0.2.1 (2018/10/03)
# Project started in 2016/02, uses Rust and OpenGL, and in contrast to (most X
# terminal programs) is not designed to run with a remote server.
#
# Packaged in Arch Linux -
# vttest:
# initial screensize 24x80
# no DECCOLM (does not switch between 80/132 columns)
# otherwise, passes wrapping test
# no DECSCNM
# identifies as a vt102
# numeric keypad does not send expected codes (seen in 0.4.0)
# passes bce test
# vt220:
# ECH works in 0.3.3 (0.2.1 left text on right margin)
# no SRM, DECSCA
# vt320:
# fails DECXCPR
# does not implement any of the DECRQM/DECRPM controls
# does not implement any of the DECRQSS controls
# vt420:
# no DECLRMM
# no DECBI, DECFI
# other:
# fails CHT, otherwise ECMA-48 cursor movement ok
# fails ERM/SPA, SL, SR, passes REP, SD, SU
# xterm:
# no X10 mouse
# has normal and highlight mouse
# has any-event and button-event mouse
# + does support SGR-mouse
# + does not correctly support focus in/out events (seen in 0.4.0)
# cursor-position wrong after alternate-screen (fixed in 0.4.0)
# none of the dtterm controls work
# tack:
# bell and flash do not work
# blink does not work
# italics and crossed-out work (latter did not work in 0.2.1)
# function-keys work up (tested combinations which window manager allows)
# treats meta as escape-prefix
#
# The program sources include "alacritty" and "alacritty-direct", which are
# copied from "xterm-256color" and "xterm-direct" (but using semicolon for
# subparameter delimiter). Refactored here to use ncurses building blocks -TD
alacritty|alacritty terminal emulator,
rs1=\Ec\E]104\007, use=xterm+256color,
use=alacritty+common,
alacritty-direct|alacritty with direct color indexing,
use=xterm+indirect, use=alacritty+common,
# cancel km, since it is not actually meta mode -TD
# added ecma+strikeout in 0.3.3 -TD
# added xterm+sl-twm in 0.3.3 -TD
alacritty+common|base fragment for alacritty,
km@, npc,
kb2=\EOE, kbs=^?, kcbt=\E[Z, kent=\EOM, Se=\E[0 q,
- use=ecma+index, use=xterm+sm+1006, use=xterm-basic,
- use=xterm+app, use=ansi+rep, use=xterm+tmux,
- use=ecma+strikeout, use=xterm+sl-twm, use=ecma+italics,
- use=xterm+pce2, use=xterm+pcc2, use=xterm+pcf2,
+ Smulx=\E[4\:%p1%dm, use=ecma+index, use=xterm+sm+1006,
+ use=xterm-basic, use=xterm+app, use=ansi+rep,
+ use=xterm+tmux, use=ecma+strikeout, use=xterm+sl-twm,
+ use=ecma+italics, use=xterm+pce2, use=xterm+pcc2,
+ use=xterm+pcf2,
#### Kitty
# https://github.com/kovidgoyal/kitty
-# Version 0.13.3
# Project started in 2016/10 (see alacritty), but is a Python script rather
# than Rust, using OpenGL. The same caveats regarding remote connections
# apply. This is not an X terminal, though (like alacritty), it copies
# features from xterm.
#
# Regarding the name "kitty", that is a pun, reflected in the description.
# But see
# http://www.9bis.net/kitty/
# https://github.com/kovidgoyal/kitty/issues/9
# https://github.com/kovidgoyal/kitty/issues/1025
# and
# http://lists.gnu.org/archive/html/bug-ncurses/2018-09/msg00005.html
# https://github.com/kovidgoyal/kitty/issues/879
#
+# Version 0.19.1
+# changes since 0.13.3:
+# vttest
+# ISO-6429
+# REP works, though using unspecified behavior
+# xterm
+# xterm's SGR-mouse mode is recognized.
+# does recognize original alternate-screen
+# bug: mouse focus in/out does not work.
+# bug: X10 mouse mode responds like any-event
+# bug: highlight-tracking does not work; terminal hangs.
+#
+# tack
+# rs1 adds an empty string for resetting title- and other OSC-strings.
+# italics work
+#
+# Version 0.13.3
# Notes:
# initial screensize 71x22
# does not respond to "resize -s"
# resizing with window manager gives no clues
# vttest
# does not switch between 80/132 columns
# fails wrapping test, copying vte/rxvt
# no reverse-background, no blink
# claims to be vt200:
# primary \E[?62;c
# secondary \E[>1;4000;12c
# however -
# no GR in the locking-shifts screen
# no NRCS or ISO-2022, anyway
# no VT52
# VT220:
# has DECTCEM, ECH, but no SRM and DECSCA
# has operating condition report, none of the others
# VT320:
# has SU/SD
# DECRQSS ok for DECSTBM, SGR, none of the others
# no status-line
# VT420:
# DECXCPR device status works, none of the others
# no left/right margins
# has DECCARA, but not DECERA, DECFRA, DECRARA, DECSERA
# inside of DECCARA is uncolored
# line-drawing with DECCARA does not work
# aside from left/right margins, editing sequences look ok
# no DECFI, DECBI
# color:
# fails ECH test for bce
# ISO-6429
# fails REP, SL, SL, but other cursor-movement ok
# xterm:
# does not recognize original alternate-screen
# cursor-position wrong after alternate-screen
# has normal mouse, any-event, any-button, but
# no X10 mouse
# no mouse-highlight tracking
# no DEC locator
# dtterm - only supports report-size chars/pixels
# recognizes tcap-query
# tack:
# flash doesn't work
# italics do not work
# bce should be set (but see vttest)
#* developer's terminfo stopped at kf25, but the program continues,
# copying xterm for the rest of the control+fkey sequence
# (but only one modifier is supported, like iTerm2).
#* it omitted shifted pageup/down
#* control+editing keys work
# In contrast to function-keys, some additional modifier combinations
# act like xterm for the editing/cursor-keys, e.g., alt+shift. While
# the implementation is incomplete, the building-blocks are consistent
# with what has been implemented -TD
# DECKPAM does not work -TD
#* ka1, ka3, kc1, kc3 were bogus (removed)
#* meta sends escape (removed kmm) -TD
#* cvvis does not make cursor "more visible" -TD
kitty|KovId's TTY,
use=xterm+256color, use=kitty+common,
kitty-direct|KovId's TTY using direct colors,
oc=\E]104\007, use=xterm+direct2, use=kitty+common,
kitty+common|KovId's TTY common properties,
am, mc5i, mir, msgr, npc, xenl,
cols#80, it#8, lines#24,
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxy
yzz{{||}}~~,
- bel=^G, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=\r,
+ bel=^G, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM,
dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
flash=\E[?5h$<100/>\E[?5l, home=\E[H, hpa=\E[%i%p1%dG,
ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L,
ind=\n, kbs=^?, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB,
kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kend=\EOF, kf1=\EOP,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P,
kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~,
kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~,
kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~,
kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R,
kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~,
kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~,
kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~, kf4=\EOS,
kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- khome=\EOH, kich1=\E[2~, kind=\E[1;2B, kmous=\E[M,
- knp=\E[6~, kpp=\E[5~, kri=\E[1;2A, op=\E[39;49m, rc=\E8,
- rev=\E[7m, ri=\EM, rmacs=\E(B, rmam=\E[?7l, rmir=\E[4l,
- rmkx=\E[?1l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec, sc=\E7,
+ khome=\EOH, kich1=\E[2~, kind=\E[1;2B, knp=\E[6~,
+ kpp=\E[5~, kri=\E[1;2A, op=\E[39;49m, rc=\E8, rev=\E[7m,
+ ri=\EM, rmacs=\E(B, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l,
+ rmso=\E[27m, rmul=\E[24m, rs1=\E]\E\\\Ec, sc=\E7,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;
%?%p1%p3%|%t;7%;m,
sgr0=\E(B\E[m, smacs=\E(0, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1h, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
- vpa=\E[%i%p1%dd, use=ecma+index, use=xterm+sl-twm,
+ vpa=\E[%i%p1%dd, use=ansi+enq, use=ansi+rep,
+ use=xterm+sm+1006, use=ecma+index, use=xterm+sl-twm,
use=ecma+strikeout, use=xterm+pce2, use=xterm+pcc2,
- use=ecma+italics, use=xterm+alt1049,
+ use=ecma+italics, use=xterm+alt1049, use=att610+cvis,
+ use=xterm+tmux,
######## WEB CLIENTS
#### DomTerm
# https://domterm.org
#
# Quoting its webpage:
# The domterm command runs a server that manages sessions (usually shell
# processes). The user interface and terminal emulation is handled by a
# JavaScript library that can run in a regular web browser or an embedded
# browser such as Electron, using Web Sockets to talk to the server.
#
# it can connect to, and display in, a web browser, or as a standalone Qt
# application. Either way, it displays in the current desktop session.
#
# Testing current code (2019/07/06) with Fedora 30:
# tack
# no flash
# no beep
# no dim
# no blink
# no invis
# no italics
# ok smxx/rmxx
# bce screen shows diagonal lines...
# kf6 sends nothing
# kf11 toggles maximize
# cursor-key application mode works
# numeric keypad application does not work; keys always send face-codes
# sends utf-8 for meta, like xterm
# vttest
# has problems with menu #1 (wrapping)
# DA = vt200 with 132 columns, color
# DA2 = 990, 100300 ("\E[>990;100300;0c")
# no VT52, no double-size characters
# vt220 ECH test works, SRM, DECSCA do not
# S7C1T/S8C1t does not work
# DECUDK does not work
# CNL does not work; the other ECMA-48 cursor-movement tests work
# REP sort-of works (does not match xterm)
# SD/SU work, but not SL/SR
# window reporting: works for size in chars/pixels, but not other tests
# X10 mouse clicks work -- but return 4 rather than 1 for codes
# any-event mouse mode acts like any-button mode
# implements SGR mouse-mode
# other:
# does not implement initc
# does accept either colons or semicolon in 38/48 SGR.
domterm|DomTerm web client,
npc,
bel@, blink@, dim@, invis@, kcbt=\E[Z, ritm@, rmkx=\E[?1l,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|
%t;7%;m,
sitm@, smkx=\E[?1h, use=xterm+256setaf, use=ecma+index,
use=xterm+sm+1006, use=xterm+pcfkeys, use=xterm-basic,
- use=xterm-basic,
######## UNIX VIRTUAL TERMINALS, VIRTUAL CONSOLES, AND TELNET CLIENTS
#
# Columbus UNIX virtual terminal. This terminal also appears in
# UNIX 4.0 and successors as line discipline 1 (?), but is
# undocumented and does not really work quite right.
cbunix|cb unix virtual terminal,
OTbs, am, da, db,
cols#80, lines#24, lm#0,
bel=^G, clear=\EL, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EG%p2%c%p1%c, cuu1=\EA, dch1=\EM, dl1=\EN, ed=\EL,
el=\EK, ich1=\EO, il1=\EP, ind=\n, kcub1=\ED, kcud1=\EB,
kcuf1=\EC, kcuu1=\EA, khome=\EE, rmso=\Eb^D, rmul=\Eb^A,
smso=\Ea^D, smul=\Ea^A,
# (vremote: removed obsolete ":nl@:" -- esr)
vremote|virtual remote terminal,
am@,
cols#79, use=cbunix,
pty|4bsd pseudo teletype,
cup=\EG%p1%{32}%+%c%p2%{32}%+%c, rmso=\Eb$, rmul=\Eb!,
smso=\Ea$, smul=\Ea!, use=cbunix,
#### Emacs
# https://www.emacswiki.org/emacs/AnsiTerm
# https://github.com/emacs-mirror/emacs/blob/master/lisp/term.el
#
# The codes supported by the term.el terminal emulation in GNU Emacs 19.30
eterm|gnu emacs term.el terminal emulation,
am, mir, xenl,
cols#80, lines#24,
bel=^G, bold=\E[1m, clear=\E[H\E[J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, el1=\E[1K, home=\E[H, ht=^I, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=\n, rev=\E[7m,
rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmso=\E[m, rmul=\E[m,
sgr0=\E[m, smcup=\E7\E[?47h, smir=\E[4h, smso=\E[7m,
smul=\E[4m,
# The codes supported by the term.el terminal emulation in GNU Emacs 22.2
eterm-color|Emacs term.el terminal emulator term-protocol-version 0.96,
am, mir, msgr, xenl,
colors#8, cols#80, lines#24, pairs#64,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, el1=\E[1K, home=\E[H, ht=^I, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=\n, invis=\E[8m, kbs=^?,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
- kdch1=\E[3~, kend=\E[4~, khome=\E[1~, kich1=\E[2~,
- knp=\E[6~, kpp=\E[5~, op=\E[39;49m, rc=\E8, rev=\E[7m,
- ri=\EM, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec,
- sc=\E7, setab=\E[%p1%'('%+%dm, setaf=\E[%p1%{30}%+%dm,
+ op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmir=\E[4l,
+ rmso=\E[27m, rmul=\E[24m, rs1=\Ec, sc=\E7,
+ setab=\E[%p1%'('%+%dm, setaf=\E[%p1%{30}%+%dm,
sgr=\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p6%t;1%;%?
%p7%t;8%;m,
sgr0=\E[m, smir=\E[4h, smso=\E[7m, smul=\E[4m,
- u6=\E[%i%d;%dR, u7=\E[6n,
+ u6=\E[%i%d;%dR, u7=\E[6n, use=vt220+pcedit,
# shell.el can "do" color, though not nearly as well.
#
# seen here:
# http://unix.stackexchange.com/questions/237943/changing-colors-used-by-ls-does-not-work-in-emacs-shell-mode
#
# and
# https://lists.gnu.org/archive/html/bug-gnu-emacs/2012-08/msg00481.html
# https://github.com/emacs-mirror/emacs/blob/master/lisp/shell.el
# https://github.com/emacs-mirror/emacs/blob/master/lisp/ansi-color.el
#
# however, as tested with Emacs 24.5.1, the result is buggy, losing overlays
# frequently. The contemporaneous term.el aka ansi-term does not "support"
# italics but does not lose the color information -TD 2017/01/28.
dumb-emacs-ansi|Emacs dumb terminal with ANSI color codes,
am, hc,
colors#8, it#8, ncv#13, pairs#64,
bold=\E[1m, cud1=\n, ht=^I, ind=\n, op=\E[39;49m,
rmul=\E[24m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr0=\E[m, smul=\E[4m, use=ecma+italics,
#### Screen
# Entries for use by the `screen' program by Juergen Weigert,
# Michael Schroeder, Oliver Laumann. The screen and
# screen-w entries came with version 3.7.1. The screen2 and screen3 entries
# come from University of Wisconsin and may be older.
# (screen: added <cnorm> on ANSI model -- esr)
#
# 'screen' defines extensions to termcap. Some are used in its terminal
# description:
# G0 (bool) Terminal can deal with ISO 2022 font selection sequences.
# AX (bool) Does understand ANSI set default fg/bg color
# (\E[39m / \E[49m).
# S0 (str) Switch charset 'G0' to the specified charset.
# E0 (str) Switch charset 'G0' back to standard charset.
#
# Initially tested with screen 3.09.08
#
# According to its manual page
#
# Screen is a full-screen window manager that multiplexes a physical
# terminal between several processes (typically interactive shells). Each
# virtual terminal provides the functions of a DEC VT100 terminal and, in
# addition, several control functions from the ISO 6429 (ECMA 48, ANSI
# X3.64) and ISO 2022 standards (e.g. insert/delete line and support for
# multiple character sets).
#
# However, there is a design error in its support for video highlights. The
# program uses a table (rendlist) which equates the SGR codes to terminal
# capabilities. That, and color-decoding are hardcoded in screen; its behavior
# is modified only by the presence or absence of the corresponding capabilities.
# Not by their values.
#
# If screen sets the TERMCAP variable, it uses hardcoded strings which
# correspond to the rendlist table.
#
# The table gives this information:
#
# SGR capability
# --- ---------
# 1 bold
# 2 dim
# 3 standout
# 4 underline
# 5 blink
# - (unused 6)
# 7 reverse
# - (unused 8-21)
# 22 reset bold, standout and dim
# 23 reset standout
# 24 reset underline
# 25 reset blink
# - (unused 26)
# 27 reset reverse
#
# ECMA-48 differs from this: 3 and 23 set and reset italics, respectively.
# ECMA-48 does not define "standout" - that is a termcap/terminfo abstraction.
# Without some redesign of screen, it is not possible to extend the set of
# capabilities. Substitution would be possible, e.g., sending italics in
# place of underline.
#
# Because screen uses hard-coded parsing, it does not check if two capabilities
# use the same value. For example, changing standout to be the same as any of
# the other capabilities will confuse screen. Curses applications which use
# sgr are not impacted (because that usually resets all capabilities before
# setting any), but termcap applications do not use sgr -TD
#
# The "screen" entry should use ecma+index rather than just indn, but tmux
# defaults to using "screen". For background, screen supported ecma+index
# since 1994 (i.e., screen 3.0.5), stating that it was an obscure code used by
# the (Siemens Nixdorf) 97801 terminal. It was not shown in the termcap or
# terminfo entries (which list about 60% of the control sequences).
screen|VT 100/ANSI X3.64 virtual terminal,
OTbs, OTpt, am, km, mir, msgr, xenl, G0,
colors#8, cols#80, it#8, lines#24, ncv@, pairs#64, U8#1,
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxy
yzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM,
cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
enacs=\E(B\E)0, flash=\Eg, home=\E[H, hpa=\E[%i%p1%dG,
ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L,
ind=\n, indn=\E[%p1%dS, is2=\E)0, kbs=^H, kcbt=\E[Z,
- kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
- kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
- kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
- nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmir=\E[4l,
- rmkx=\E[?1l\E>, rmso=\E[23m, rmul=\E[24m,
- rs2=\Ec\E[?1000l\E[?25h, sc=\E7,
+ kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR,
+ kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
+ kf9=\E[20~, kmous=\E[M, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM,
+ rmacs=^O, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[23m,
+ rmul=\E[24m, rs2=\Ec\E[?1000l\E[?25h, sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p1%t;3%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;
5%;%?%p5%t;2%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smir=\E[4h, smkx=\E[?1h\E=,
smso=\E[3m, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd,
- E0=\E(B, S0=\E(%p1%c, use=xterm+alt1049, use=ecma+color,
+ E0=\E(B, S0=\E(%p1%c, use=vt220+pcedit,
+ use=xterm+alt1049, use=ecma+color, use=vt100+enq,
# The bce and status-line entries are from screen 3.9.13 (and require some
# changes to .screenrc).
screen-bce|VT 100/ANSI X3.64 virtual terminal with bce,
bce,
ech@, use=screen4,
screen-s|VT 100/ANSI X3.64 virtual terminal with hardstatus line,
dsl=\E_\E\\, fsl=\E\\, tsl=\E_, use=screen4,
# ======================================================================
# Entries for GNU Screen with 16 colors.
# Those variations permit to benefit from 16 colors palette, and from
# bold font and blink attribute separated from bright colors. But they
# are less portable than the generic "screen" 8 color entries: Their
# usage makes real sense only if the terminals you attach and reattach
# do all support 16 color palette.
screen-16color|GNU Screen with 16 colors,
use=ibm+16color, use=screen4,
screen-16color-s|GNU Screen with 16 colors and status line,
use=ibm+16color, use=screen-s,
screen-16color-bce|GNU Screen with 16 colors and BCE,
use=ibm+16color, use=screen-bce,
screen-16color-bce-s|GNU Screen with 16 colors using BCE and status line,
bce, use=ibm+16color, use=screen-s,
# ======================================================================
# Entries for GNU Screen 4.02 with --enable-colors256.
screen-256color|GNU Screen with 256 colors,
use=xterm+256setaf, use=screen4,
screen-256color-s|GNU Screen with 256 colors and status line,
use=xterm+256setaf, use=screen-s,
screen-256color-bce|GNU Screen with 256 colors and BCE,
bce, use=xterm+256setaf, use=screen-bce,
screen-256color-bce-s|GNU Screen with 256 colors using BCE and status line,
bce, use=xterm+256setaf, use=screen-s,
screen.xterm-256color|GNU Screen with xterm using 256 colors,
use=xterm+256setaf, use=screen.xterm-new,
screen.konsole-256color|GNU Screen with konsole using 256 colors,
use=xterm+256setaf, use=screen.konsole,
screen.vte-256color|GNU Screen with vte using 256 colors,
use=xterm+256setaf, use=screen.vte,
screen.putty-256color|GNU Screen with putty using 256 colors,
use=xterm+256setaf, use=screen.putty,
screen.mlterm-256color|GNU Screen with mlterm using 256 colors,
use=xterm+256setaf, use=screen.mlterm,
# ======================================================================
# Read the fine manpage:
# When screen tries to figure out a terminal name for
# itself, it first looks for an entry named "screen.<term>",
# where <term> is the contents of your $TERM variable. If
# no such entry exists, screen tries "screen" (or "screen-w"
# if the terminal is wide (132 cols or more)). If even this
# entry cannot be found, "vt100" is used as a substitute.
#
# Notwithstanding the manpage, screen uses its own notion of the termcap
# and some keys from "screen.<term>" are ignored. Here is an entry which
# covers those (tested with screen 4.00.02) -TD
screen+fkeys|function-keys according to screen,
kend=\E[4~, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kfnd@,
khome=\E[1~, kslt@,
# See explanation before "screen" entry. Cancel italics so that applications
# do not assume screen supports the feature. Add this tweak to entries which
# extend screen for terminals which do support italics.
screen+italics|screen cannot support italics,
ritm@, sitm@,
#
# Here are a few customized entries which are useful -TD
#
# Notes:
# (a) screen does not support invis.
# (b) screen's implementation of bw is incorrect according to tack.
# (c) screen appears to hardcode the strings for khome/kend, making it
# necessary to override the "use=" clause's values (screen+fkeys).
# (d) screen sets $TERMCAP to a termcap-formatted copy of the 'screen' entry,
# which is NOT the same as the terminfo screen.<term>.
# (e) when screen finds one of these customized entries, it sets $TERM to
# match. Hence, no "screen.xterm" entry is provided, since that would
# create heartburn for people running remote xterm's.
# (f) screen does not support rep.
#
# xterm (-xfree86 or -r6) does not normally support kIC, kNXT and kPRV
# since the default translations override the built-in keycode
# translation. They are suppressed here to show what is tested by tack.
screen.xterm-xfree86|screen.xterm-new|screen customized for modern xterm,
bce@, bw,
invis@, kIC@, kNXT@, kPRV@, meml@, memu@, rep@,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|
%t;7%;%?%p4%t;5%;%?%p5%t;2%;m,
E3@, use=screen+italics, use=screen+fkeys,
use=xterm+x11mouse, use=xterm-new,
#:screen.xterm|screen for modern xterm,
#: use=screen.xterm-new,
# xterm-r6 does not really support khome/kend unless it is propped up by
# the translations resource.
screen.xterm-r6|screen customized for X11R6 xterm,
bw, use=xterm+x11mouse, use=screen+fkeys, use=xterm-r6,
# Color applications running in screen and TeraTerm do not play well together
# on Solaris because Sun's curses implementation gets confused.
screen.teraterm|disable ncv in teraterm,
ncv#127,
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i
\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u
\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
use=screen+fkeys, use=xterm+x11mouse, use=screen4,
# Other terminals
screen.rxvt|screen in rxvt,
bw, XT,
cvvis@, flash@, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,
kcuu1=\EOA, use=screen+fkeys, use=vt100+enq,
use=rxvt+pcfkeys, use=xterm+x11mouse, use=vt220+keypad,
use=screen4,
screen.Eterm|screen in Eterm,
use=xterm+x11mouse, use=screen+fkeys, use=Eterm,
screen.mrxvt|screen in mrxvt,
use=xterm+x11mouse, use=screen+fkeys, use=mrxvt,
screen.vte|screen in any VTE-based terminal,
use=xterm+x11mouse, use=screen+italics,
use=screen+fkeys, use=vte,
screen.gnome|screen in GNOME Terminal,
use=xterm+x11mouse, use=screen+italics,
use=screen+fkeys, use=gnome,
screen.konsole|screen in KDE console window,
use=xterm+x11mouse, use=screen+italics,
use=screen+fkeys, use=konsole,
# fix the backspace key
-screen.linux|screen in linux console,
+screen.linux|screen.linux-s|screen in linux console,
bw,
- kbs=^?, kcbt@, use=xterm+x11mouse, use=screen+fkeys,
- use=screen4,
+ kbs=^?, kcbt@, use=linux+sfkeys, use=xterm+x11mouse,
+ use=screen+fkeys, use=screen4,
screen.mlterm|screen in mlterm,
use=xterm+x11mouse, use=screen+fkeys, use=mlterm,
screen.putty|screen in putty,
use=xterm+x11mouse, use=screen+fkeys, use=putty,
# The default "screen" entry is reasonably portable, but not optimal for the
# most widely-used terminal emulators. The "bce" capability is supported in
# screen since 3.9.13, and when used, will require fewer characters to be sent
# to the terminal for updates.
#
# If you are using only terminals which support bce, then you can use this
# feature in your screen configuration.
#
# Adding these lines to your ".screenrc" file will allow using these customized
# entries:
# term screen-bce
# bce on
# defbce on
screen-bce.xterm-new|screen optimized for modern xterm,
bce,
ech@, use=screen+italics, use=screen.xterm-new,
screen-bce.rxvt|screen optimized for rxvt,
bce,
ech@, use=screen.rxvt,
screen-bce.Eterm|screen optimized for Eterm,
bce,
ech@, use=screen.Eterm,
screen-bce.mrxvt|screen optimized for mrxvt,
bce,
ech@, use=screen.mrxvt,
screen-bce.gnome|screen optimized for GNOME-Terminal,
bce,
ech@, use=screen+italics, use=screen.gnome,
screen-bce.konsole|screen optimized for KDE console window,
bce,
ech@, use=screen+italics, use=screen.konsole,
screen-bce.linux|screen optimized for linux console,
bce,
ech@, use=screen.linux,
screen-w|VT 100/ANSI X3.64 virtual terminal with 132 cols,
cols#132, use=screen4,
screen2|old VT 100/ANSI X3.64 virtual terminal,
cols#80, it#8, lines#24,
cbt=\E[Z, clear=\E[2J\E[H, cr=\r, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=, il=\E[%p1%dL,
il1=\E[L, ind=\n, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kf0=\E~, kf1=\ES, kf2=\ET, kf3=\EU, kf4=\EV,
kf5=\EW, kf6=\EP, kf7=\EQ, kf8=\ER, kf9=\E0I, khome=\EH,
nel=\r\n, rc=\E8, ri=\EM, rmir=\E[4l, rmso=\E[23m,
rmul=\E[24m, rs1=\Ec, sc=\E7, sgr0=\E[m, smir=\E[4h,
smso=\E[3m, smul=\E[4m, tbc=\E[3g,
# (screen3: removed unknown ":xv:LP:G0:" -- esr)
screen3|older VT 100/ANSI X3.64 virtual terminal,
km, mir, msgr,
cols#80, it#8, lines#24,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=\n, is2=\E)0, kbs=^H, kcub1=\EOD,
kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ,
kf3=\EOR, kf4=\EOS, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM,
rmir=\E[4l, rmkx=\E>, rmso=\E[23m, rmul=\E[24m, rs1=\Ec,
sc=\E7, sgr0=\E[m, smir=\E[4h, smkx=\E=, smso=\E[3m,
smul=\E[4m, tbc=\E[3g,
# screen 4.0 was released 2003-07-21, and as of March 2019, its terminfo file
# was last updated in 2009 to include 256-color support. The most recent
# release is 4.6.2 (October 2017).
screen4|VT 100/ANSI X3.64 virtual terminal,
use=ecma+index, use=screen,
# As of March 2019, screen 5.0 has not been released.
#
# However,
#
# https://savannah.gnu.org/bugs/?36676
#
# mentions a change to implement italics which should be in a version 5,
# (implemented 2016-11-05, but merged 2017-07-09). That does away with the
# longstanding use of SGR 3 for standout, and interprets it as italics.
#
# The same development branch has some support for direct-colors, but none
# of this has been documented.
screen5|VT 100/ANSI X3.64 virtual terminal (someday),
rmso=\E[27m,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?
%p5%t;2%;m%?%p9%t\016%e\017%;,
smso=\E[7m, use=ecma+italics, use=screen4,
#### Tmux
# tmux is mostly compatible with screen, but has support for italics, and some
# of the xterm cursor bits.
#
# However, unlike screen, tmux has no provision for using derived terminal
# descriptions. When screen starts, it looks for a suitable "inner" terminal
# such as "screen.$TERM" to correspond to the outer terminal's quirks. The
# various entries such as screen.xterm-new provide a way to more closely
# match the terminal.
tmux|tmux terminal multiplexer,
- invis=\E[8m, rmso=\E[27m,
+ invis=\E[8m, kbs=^?, rmso=\E[27m,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?
%p5%t;2%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
smso=\E[7m, E3=\E[3J, Smulx=\E[4\:%p1%dm,
use=ecma+italics, use=ecma+strikeout, use=xterm+edit,
use=xterm+pcfkeys, use=xterm+sl, use=xterm+tmux,
use=screen,
tmux-256color|tmux with 256 colors,
use=xterm+256setaf, use=tmux,
+tmux-direct|tmux with direct-color indexing,
+ setal=\E[%?%p1%{8}%<%t5%p1%d%e58\:2\:\:%p1%{65536}%/%d\:%p1
+ %{256}%/%{255}%&%d\:%p1%{255}%&%d%;m,
+ use=xterm+direct, use=tmux,
+
#### Dvtm
# dvtwm 0.15
# http://www.brain-dump.org/projects/dvtm/
#
# + This uses ncurses to manage the display, including support for italics and
# default-colors.
# + However, default-colors are incomplete: do not set bce.
# + It does not implement flash (since no \e[?5h)
# + Do not set XT: dvtm knows about OSC 0 and 2, but not 1.
# Oddly enough, if $TERM contains "linux", it attempts to set the title.
# + Some of the program is cut/paste from rxvt-unicode, e.g., the ACS table.
# + The built-in table of function-keys (based on rxvt) is incomplete (ends
# with kf22).
# + It also omits the shifted cursor- and editing-keypad keys.
# However, it is confused by xterm's shifted cursor- and editing-keypad keys
# (and passes those through without interpretation)
# and may simply pass-through rxvt's, making it appear to work.
# In other cases such as kf23 and up, no pass-through is done.
# + Most of the mode-settings in the initialization/reset strings are not
# implemented; dvtm copies its description from rxvt.
dvtm|dynamic virtual terminal manager,
am, eo, mir, msgr, xenl, AX,
colors#8, cols#80, it#8, lines#24, ncv@, pairs#64,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
enacs=\E(B\E)0, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH,
ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n,
is1=\E[?47l\E=\E[?1l,
is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l,
kDC=\E[3$, kEND=\E[8$, kHOM=\E[7$, kIC=\E[2$, kLFT=\E[d,
kNXT=\E[6$, kPRV=\E[5$, kRIT=\E[c, ka1=\EOw, ka3=\EOy,
kb2=\EOu, kbs=^?, kc1=\EOq, kc3=\EOs, kcbt=\E[Z, kcub1=\E[D,
- kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~,
- kel=\E[8\^, kend=\E[8~, kent=\EOM, kf0=\E[21~, kf1=\E[11~,
- kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
- kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
- kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~,
- kf21=\E[23$, kf22=\E[24$, kf3=\E[13~, kf4=\E[14~,
- kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- kfnd=\E[1~, khome=\E[7~, kich1=\E[2~, kind=\E[a,
- kmous=\E[M, knp=\E[6~, kpp=\E[5~, kri=\E[b, kslt=\E[4~,
- op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
- rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmso=\E[27m,
- rmul=\E[24m,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kel=\E[8\^, kend=\E[8~,
+ kent=\EOM, kf0=\E[21~, kf1=\E[11~, kf10=\E[21~,
+ kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
+ kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
+ kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf21=\E[23$,
+ kf22=\E[24$, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~,
+ kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
+ khome=\E[7~, kind=\E[a, kmous=\E[M, kri=\E[b, op=\E[39;49m,
+ rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmcup=\E[2J\E[?47l\E8,
+ rmir=\E[4l, rmso=\E[27m, rmul=\E[24m,
rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H,
rs2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?
25h,
s0ds=\E(B, s1ds=\E(0, sc=\E7, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?
%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smcup=\E7\E[?47h, smir=\E[4h,
smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd,
- use=ecma+italics,
+ use=vt220+vtedit, use=vt220+cvis, use=ecma+italics,
dvtm-256color|dynamic virtual terminal manager with 256 colors,
colors#0x100, pairs#0x10000,
setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;
5;%p1%d%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5
;%p1%d%;m,
use=dvtm,
#### NCSA Telnet
# Francesco Potorti <F.Potorti@cnuce.cnr.it>:
# NCSA telnet is one of the most used telnet clients for the Macintosh. It has
# been maintained until recently by the National Center for Supercomputer
# Applications, and it is feature rich, stable and free. It can be downloaded
# from www.ncsa.edu. This terminfo description file is based on xterm-vt220,
# xterm+sl, and the docs at NCSA. It works well.
#
# NCSA Telnet 2.6 for Macintosh in vt220 8-bit emulation mode
# The terminal options should be set as follows:
# Xterm sequences ON
# use VT wrap mode ON
# use Emacs arrow keys OFF
# CTRL-COMND is Emacs meta ON
# 8 bit mode ON
# answerback string: "ncsa-vt220-8"
# setup keys: all disabled
#
# Application mode is not used.
#
# Other special mappings:
# Apple VT220
# HELP Find
# HOME Insert here
# PAGEUP Remove
# DEL Select
# END Prev Screen
# PAGEDOWN Next Screen
#
# Though it supports ANSI color, NCSA Telnet uses color to represent blinking
# text.
#
# The status-line manipulation is a mapping of the xterm-compatible control
# sequences for setting the window-title. So you must use tsl and fsl in
# pairs, since the latter ends the string that is loaded to the window-title.
ncsa-m|ncsa-vt220-8|NCSA Telnet 2.6 for Macintosh in vt220-8 mode,
am, km, mir, msgr, xenl,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, el1=\E[1K, enacs=\E)0,
flash=\E[?5h$<100/>\E[?5l, home=\E[H, ht=^I, hts=\EH,
ich=\E[%p1%d@, if=/usr/share/tabset/vt100,
il=\E[%p1%dL, il1=\E[L, ind=\n$<150*>,
is2=\E7\E[r\E[m\E[?7h\E[?1;4;6l\E[4l\E8\E>, kbs=^H,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=\E[4~, kend=\E[5~, kf1=\E[17~, kf10=\E[28~,
kf11=\E[29~, kf12=\E[31~, kf13=\E[32~, kf14=\E[33~,
kf15=\E[34~, kf2=\E[18, kf3=\E[19~, kf4=\E[20~, kf5=\E[21~,
kf6=\E[23~, kf7=\E[24~, kf8=\E[25~, kf9=\E[26~, khlp=\E[1~,
khome=\E[2~, knp=\E[6~, kpp=\E[3~, mc4=\E[4i, mc5=\E[5i,
rc=\E8, rev=\E[7m, rf=/usr/share/tabset/vt100, ri=\EM,
rmacs=\E(B, rmam=\E[?7l, rmcup=\E[2J\E8, rmir=\E[4l,
rmso=\E[27m, rmul=\E[24m,
rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;4;6l\E[4l\E>, sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?
%p9%t\E(0%e\E(B%;,
sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h, smcup=\E7,
smir=\E[4h, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
- u8=\E[?62;1;6c, use=xterm+sl, use=ansi+enq,
+ u8=\E[?62;1;6c, use=vt220+cvis, use=xterm+sl,
+ use=ansi+enq,
ncsa|NCSA Telnet 2.7 for Macintosh in vt220-8 mode,
use=ncsa-m, use=klone+color,
ncsa-ns|NCSA Telnet 2.7 for Macintosh in vt220-8 mode,
hs@,
dsl@, fsl@, tsl@, use=ncsa,
ncsa-m-ns|NCSA Telnet 2.6 for Macintosh in vt220-8 mode,
hs@,
dsl@, fsl@, tsl@, use=ncsa-m,
# alternate -TD:
# The documented function-key mapping refers to the Apple Extended Keyboard
# (e.g., NCSA Telnet's F1 corresponds to a VT220 F6). We use the VT220-style
# codes, however, since the numeric keypad (VT100) PF1-PF4 are available on
# some keyboards and many applications require these as F1-F4.
#
ncsa-vt220|NCSA Telnet using vt220-compatible function keys,
kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\EOQ,
kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf6=\E[17~, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, use=ncsa,
#### Pilot Pro Palm-Top
#
# Termcap for Top Gun Telnet and SSH on the Palm Pilot.
# https://web.archive.org/web/20051103015726/http://www.ai/~iang/TGssh/
pilot|tgtelnet|Top Gun Telnet on the Palm Pilot Professional,
OTbs, am, xenl,
cols#39, lines#16,
bel=^G, clear=\Ec, cr=\r, cub1=^H, cud1=\n,
cup=\Em%p1%{32}%+%c%p2%{32}%+%c, home=\Em\s\s, ht=^I,
ind=\n, kbs=^H, kcub1=^H, kcud1=\n, knp=^L, kpp=^K, nel=\Em~\s,
rmso=\EB, smso=\Eb,
# From: Federico Bianchi <bianchi@www.arte.unipi.it>
# These entries are for the Embeddable Linux Kernel System (ELKS)
# project - an heavily stripped down Linux to be run on 16 bit
# boxes or, eventually, to be used in embedded systems - and have been
# adapted from the stock ELKS termcap. The project itself looks stalled,
# and the latest improvements I know of date back to March 2000.
#
# To cope with the ELKS dumb console I added an "elks-glasstty" entry;
# as an added bonus, this deals with all the capabilities common to
# both VT52 and ANSI (or, eventually, "special") modes.
elks-glasstty|ELKS glass-TTY capabilities,
OTbs, am,
cols#80, it#8, lines#25,
bel=^G, cr=\r, ht=^I, ind=\n, kbs=^H, kcub1=^H, kcud1=\n,
nel=\r\n,
elks-vt52|ELKS vt52 console,
clear=\EH\EJ, cub1=\ED, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, el=\EK,
home=\EH, use=elks-glasstty,
elks-ansi|ELKS ANSI console,
clear=\E[H\E[2J, cub1=\E[D, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[K, home=\E[H,
rmso=\E[m, smso=\E[7m, use=elks-glasstty,
# As a matter of fact, ELKS 0.0.83 on PCs defaults to ANSI emulation
# instead of VT52, but the "elks" entry still refers to the latter.
elks|default ELKS console,
use=elks-vt52,
# Project SIBO (for Psion 3 palmtops) console is identical to the ELKS
# one but in screen size
sibo|ELKS SIBO console,
cols#61, it#8, lines#20, use=elks-vt52,
######## COMMERCIAL WORKSTATION CONSOLES
#
#### Alpha consoles
#
# This is from the OSF/1 Release 1.0 termcap file
pccons|pcconsole|ANSI (mostly) Alpha PC console terminal emulation,
am, xon,
cols#80, lines#25,
bel=^G, clear=\E[H\E[2J, cr=\r, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M,
el=\E[K, home=\E[H, ht=^I, ich1=\E[@, il1=\E[L, kbs=^H,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H,
nel=\r\n, rev=\E[7m, rmso=\E[m, sgr0=\E[m, smso=\E[7m,
#### Sun consoles
#
# :is1: resets scrolling region in case a previous user had used "tset vt100"
oldsun|Sun Microsystems Workstation console,
OTbs, am, km, mir, msgr,
cols#80, it#8, lines#34,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP,
dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, ht=^I,
ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n,
is1=\E[1r, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H,
rmso=\E[m, sgr0=\E[m, smso=\E[7m,
# From: Alexander Lukyanov <lav@video.yars.free.net>, 14 Nov 1995
# <lines> capability later corrected by J.T. Conklin <jtc@cygnus.com>
# SGR 1, 4 aren't supported - removed bold/underline (T.Dickey 17 Jan 1998)
sun-il|Sun Microsystems console with working insert-line,
am, km, msgr,
cols#80, lines#34,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP,
dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, ht=^I,
ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n,
kb2=\E[218z, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kdch1=^?, kend=\E[220z, kf1=\E[224z,
kf10=\E[233z, kf11=\E[234z, kf12=\E[235z, kf2=\E[225z,
kf3=\E[226z, kf4=\E[227z, kf5=\E[228z, kf6=\E[229z,
kf7=\E[230z, kf8=\E[231z, kf9=\E[232z, khome=\E[214z,
kich1=\E[247z, knp=\E[222z, kopt=\E[194z, kpp=\E[216z,
kres=\E[193z, kund=\E[195z, rev=\E[7m, rmso=\E[m, rmul@,
rs2=\E[s, sgr=\E[0%?%p1%p3%|%t;7%;m, sgr0=\E[m,
smso=\E[7m, u8=\E[1t, u9=\E[11t,
# On some versions of CGSIX framebuffer firmware (SparcStation 5), <il1>/<il>
# flake out on the last line. Unfortunately, without them the terminal has no
# way to scroll.
sun-cgsix|sun-ss5|Sun SparcStation 5 console,
il@, il1@, use=sun-il,
# If you are using an SS5, change the sun definition to use sun-ss5.
sun|sun1|sun2|Sun Microsystems Inc. workstation console,
use=sun-il,
sun+sl|Sun Workstation window status line,
hs,
dsl=\E]l\E\\, fsl=\E\\, tsl=\E]l,
# From: <john@ucbrenoir> Tue Sep 24 13:14:44 1985
sun-s|Sun Microsystems Workstation window with status line,
hs,
dsl=\E]l\E\\, fsl=\E\\, tsl=\E]l, use=sun,
sun-e-s|sun-s-e|Sun Microsystems Workstation with status hacked for emacs,
hs,
dsl=\E]l\E\\, fsl=\E\\, tsl=\E]l, use=sun-e,
sun-48|Sun 48-line window,
cols#80, lines#48, use=sun,
sun-34|Sun 34-line window,
cols#80, lines#34, use=sun,
sun-24|Sun 24-line window,
cols#80, lines#24, use=sun,
sun-17|Sun 17-line window,
cols#80, lines#17, use=sun,
sun-12|Sun 12-line window,
cols#80, lines#12, use=sun,
sun-1|Sun 1-line window for sysline,
eslok, hs,
cols#80, lines#1,
dsl=^L, fsl=\E[K, tsl=\r, use=sun,
sun-e|sun-nic|sune|Sun Microsystems Workstation without insert character,
ich1@, rmir@, smir@, use=sun,
sun-c|sun-cmd|Sun Microsystems Workstation console with scrollable history,
lines#35,
rmcup=\E[>4h, smcup=\E[>4l, use=sun,
sun-type4|Sun Workstation console with type 4 keyboard,
kcub1=\E[217z, kcud1=\E[221z, kcuf1=\E[219z,
kcuu1=\E[215z, use=sun-il,
# Most of the current references to sun-color are from users wondering why this
# is the default on install. Details from reading the wscons manpage, adding
# cub, etc., here (rather than in the base sun-il entry) since it is not clear
# when those were added -TD (2005-05-28)
#
# According to wscons manpage, color is supported only on IA systems.
# Sun's terminfo entry documents bold and smul/rmul capabilities, but wscons
# does not list these. It also sets ncv#3, however that corresponds to
# underline and standout.
#
# Since the documentation and terminfo do not agree, see also current code at
# https://web.archive.org/web/20091231042744/http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/io/tem_safe.c
#
# That (actually a different driver which "supports" sun-color) also supports
# these features:
# vpa=\E[%i%p1%dd
# hpa=\E[%i%p1%d`
# cbt=\E[Z
# dim=\E[2m
# blink=\E[5m
# It supports bold, but not underline -TD (2009-09-19)
sun-color|Sun Microsystems Workstation console with color support (IA systems),
colors#8, ncv#3, pairs#64,
bold=\E[1m, cub=\E[%p1%dD, cud=\E[%p1%dB, cuf=\E[%p1%dC,
cuu=\E[%p1%dA, home=\E[H, op=\E[0m, rs2=\E[s,
setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
sgr=\E[0%?%p6%t;1%;%?%p1%p3%|%t;7%;m, sgr0=\E[m,
smso=\E[7m, use=sun,
#### Iris consoles
#
# (wsiris: this had extension capabilities
# :HS=\E7F2:HE=\E7F7:\
# :CT#2:CZ=*Bblack,red,green,yellow,blue,magenta,cyan,*Fwhite:
# See the note on Iris extensions near the end of this file.
# Finally, removed suboptimal <clear>=\EH\EJ and added <cud1> &
# <flash> from BRL -- esr)
wsiris|iris40|iris emulating a 40 line visual 50 (approximately),
OTbs, OTnc, OTpt, am,
OTkn#3, cols#80, it#8, lines#40,
OTnl=\EB, bel=^G, clear=\Ev, cnorm=\E>, cub1=^H, cud1=\EB,
cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA,
cvvis=\E;, dim=\E7F2, dl1=\EM, ed=\EJ, el=\EK,
flash=\E7F4\E7B1\013\E7F7\E7B0, home=\EH, ht=^I, il1=\EL,
ind=\n, is2=\E7B0\E7F7\E7C2\E7R3, kcub1=\ED, kcud1=\EB,
kcuf1=\EC, kcuu1=\EA, kf0=\E0, kf1=\E1, kf2=\E2, kf3=\E3,
kf4=\E4, kf5=\E5, kf6=\E6, kf7=\E7, kf8=\E8, kf9=\E9, ri=\EI,
rmso=\E0@, rmul=\E7R3\E0@, sgr0=\E7F7, smso=\E9P,
smul=\E7R2\E9P,
#### NeWS consoles
#
# Console terminal windows under the NeWS (Sun's Display Postscript windowing
# environment). Note: these have nothing to do with Sony's News workstation
# line.
#
# Entry for NeWS's psterm from Eric Messick & Hugh Daniel
# (psterm: unknown ":sl=\EOl:el=\ENl:" removed -- esr)
psterm|psterm-basic|NeWS psterm-80x34,
OTbs, am, hs, km, ul,
cols#80, it#8, lines#34,
blink=\EOb, bold=\EOd, clear=^L, csr=\EE%p1%d;%p2%d;,
cub1=\ET, cud1=\EP, cuf1=\EV, cup=\E%p1%d;%p2%d;, cuu1=\EY,
dch1=\EF, dl1=\EK, ed=\EB, el=\EC, flash=\EZ, fsl=\ENl,
home=\ER, ht=^I, il1=\EA, ind=\EW, is1=\EN*, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, ll=\EU, rc=^\, rev=\EOr,
ri=\EX, rmcup=\ENt, rmir=\ENi, rmso=\ENo, rmul=\ENu, sc=^],
sgr0=\EN*, smcup=\EOt, smir=\EOi, smso=\EOo, smul=\EOu,
tsl=\EOl,
psterm-96x48|NeWS psterm 96x48,
cols#96, lines#48, use=psterm,
psterm-90x28|NeWS psterm 90x28,
cols#90, lines#28, use=psterm,
psterm-80x24|NeWS psterm 80x24,
cols#80, lines#24, use=psterm,
# This is a faster termcap for psterm. Warning: if you use this termcap,
# some control characters you type will do strange things to the screen.
# (psterm-fast: unknown ":sl=^Ol:el=^Nl:" -- esr)
psterm-fast|NeWS psterm fast version (flaky ctrl chars),
OTbs, am, hs, km, ul,
cols#80, it#8, lines#34,
blink=^Ob, bold=^Od, clear=^L, csr=\005%p1%d;%p2%d;,
cub1=^T, cud1=^P, cuf1=^V, cup=\004%p1%d;%p2%d;, cuu1=^Y,
dch1=^F, dl1=^K, ed=^B, el=^C, flash=^Z, fsl=^Nl, home=^R, ht=^I,
il1=^A, ind=^W, is1=^N*, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, ll=^U, rc=^\, rev=^Or, ri=^X, rmcup=^Nt, rmir=^Ni,
rmso=^No, rmul=^Nu, sc=^], sgr0=^N*, smcup=^Ot, smir=^Oi,
smso=^Oo, smul=^Ou, tsl=^Ol,
#### NeXT consoles
#
# Use `glasstty' for the Workspace application
#
# From: Dave Wetzel <dave@turbocat.snafu.de> 22 Dec 1995
next|NeXT console,
am, xt,
cols#80, it#8, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[K, home=\E[H,
ht=^I, ind=\n, kbs=^H, kcub1=^H, kcud1=\n, nel=\r\n,
rmso=\E[4;1m, sgr0=\E[m, smso=\E[4;2m,
nextshell|NeXT Shell application,
am,
cols#80,
bel=^G, cr=\r, cub1=^H, cud1=\n, ht=^I, kbs=^H, kcub1=^H,
kcud1=\n, nel=\r\n,
#### Sony NEWS workstations
#
# (news-unk: this had :KB=news: -- esr)
news-unk|SONY NEWS vt100 emulator common entry,
OTbs, OTpt, am, xenl,
cols#80,
OTnl=\n, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J,
cr=\r, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dl=\E[%p1%dM, dl1=\E[M,
ed=\E[J, el=\E[K, home=\E[H, ht=^I,
if=/usr/share/tabset/vt100, il=\E[%p1%dL, il1=\E[L,
is2=\E[?7h\E[?1h\E[?3l\E7\E8, kbs=^H, kcub1=\EOD,
kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf0=\EOY, kf1=\EOP,
kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV,
kf8=\EOW, kf9=\EOX, rc=\E8, rev=\E[7m, ri=\EM,
rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[r, sc=\E7,
sgr0=\E[m, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,
#
# (news-29: this had :TY=ascii: --esr)
news-29|SONY NEWS vt100 emulator with 29 lines,
lines#29, use=news-unk,
# (news-29-euc: this had :TY=euc: --esr)
news-29-euc|SONY NEWS vt100 emulator with 29 lines and EUC,
use=news-29,
# (news-29-sjis: this had :TY=sjis: --esr)
news-29-sjis|SONY NEWS vt100 emulator with 29 lines and SJIS,
use=news-29,
#
# (news-33: this had :TY=ascii: --esr)
news-33|SONY NEWS vt100 with 33 lines,
lines#33, use=news-unk,
# (news-33-euc: this had :TY=euc: --esr)
news-33-euc|SONY NEWS vt100 with 33 lines and EUC,
use=news-33,
# (news-33-sjis: this had :TY=sjis: --esr)
news-33-sjis|SONY NEWS vt100 with 33 lines and SJIS,
use=news-33,
#
# (news-42: this had :TY=ascii: --esr)
news-42|SONY NEWS vt100 with 42 lines,
lines#42, use=news-unk,
# (news-42-euc: this had :TY=euc: --esr)
news-42-euc|SONY NEWS vt100 with 42 lines and EUC,
use=news-42,
# (news-42-sjis: this had :TY=sjis: --esr)
news-42-sjis|SONY NEWS vt100 with 42 lines and SJIS,
use=news-42,
#
# NEWS-OS old termcap entry
#
# (news-old-unk: this had :KB=news:TY=sjis: --esr)
news-old-unk|SONY NEWS vt100 emulator common entry,
OTbs, OTpt, am, xenl,
cols#80, vt#3,
OTnl=\n, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[;H\E[2J,
cr=\r, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, ed=\E[J, el=\E[K,
home=\E[H, ht=^I, if=/usr/share/tabset/vt100, kbs=^H,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP,
kf2=\EOQ, kf3=\EOR, kf4=\EOS, rc=\E8, rev=\E[7m, ri=\EM,
rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
sgr0=\E[m, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,
#
# (nwp512: this had :DE=^H:, which I think means <OTbs> --esr)
nwp512|news|nwp514|news40|vt100-bm|old sony vt100 emulator 40 lines,
OTbs,
lines#40,
is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;40
r\E8,
use=news-old-unk,
#
# (nwp512-a: this had :TY=ascii: and the alias vt100-bm --esr)
nwp512-a|nwp514-a|news-a|news42|news40-a|sony vt100 emulator 42 line,
lines#42,
is2=\E[?7h\E[?1l\E[?3l\E7\E[1;42r\E8,
use=news-old-unk,
#
# (nwp-512-o: this had :KB=nwp410:DE=^H: I interpret the latter as <OTbs>. --esr)
nwp512-o|nwp514-o|news-o|news40-o|vt100-bm-o|sony vt100 emulator 40 lines,
OTbs,
lines#40,
is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;40
r\E8,
use=news-old-unk,
#
# (nwp513: this had :DE=^H: and the alias vt100-bm --esr)
nwp513|nwp518|nwe501|newscbm|news31|sony vt100 emulator 33 lines,
OTbs,
lines#31,
is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;31
r\E8,
use=news-old-unk,
#
# (nwp513-a: this had :TY=ascii: and :DE=^H:, which I interpret as <OTbs>; --esr)
# also the alias vt100-bm.
nwp513-a|nwp518-a|nwe501-a|nwp251-a|newscbm-a|news31-a|newscbm33|news33|old sony vt100 emulator 33 lines,
OTbs,
lines#33,
is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;33
r\E8,
use=news-old-unk,
#
# (nwp513-o: had :DE=^H:, I think that's <OTbs>; also the alias vt100-bm --esr)
nwp513-o|nwp518-o|nwe501-o|nwp251-o|newscbm-o|news31-o|old sony vt100 emulator 33 lines,
OTbs,
lines#31,
is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;31
r\E8,
use=news-old-unk,
#
# (news28: this had :DE=^H:, I think that's <OTbs>, and :KB=nws1200: --esr)
news28|sony vt100 emulator 28 lines,
OTbs,
lines#28,
is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;28
r\E8,
use=news-old-unk,
#
# (news29: this had :TY=ascii:KB=nws1200:\ --esr)
news29|news28-a|sony vt100 emulator 29 lines,
lines#29,
is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;29
r\E8,
use=news-old-unk,
#
# (news511: this had :TY=sjis: --esr)
nwp511|nwp-511|nwp-511 vt100,
OTbs, OTpt, am, xenl,
cols#80, lines#24,
clear=\E[;H\E[2J$<20/>, cub1=\E[D, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A$<2/>, dl1=\E[M,
ed=\E[J$<30/>, el=\E[K$<3/>,
flash=\E[?5h\0\0\0\0\0\0\0\0\0\0\0\0\0\E[?5l,
il1=\E[L, is2=\E[?5l\E[?1l\E>\E[?7h\E[?8h, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ,
kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\E#W, khome=\E[H,
ri=\EM$<5/>, rmso=\E[m$<2/>, rmul=\E[m$<2/>,
rs2=\E7\E[r\E8\E[?5l\E[?1l\E>\E[?7h\E[?8h,
smso=\E[7m$<2/>, smul=\E[4m$<2/>,
# (news517: this had :TY=sjis:. --esr)
nwp517|nwp-517|nwp-517 vt200 80 cols 30 rows,
eslok, hs,
cols#80, lines#30,
OTi2=\E[2$~\n, dsl=\E[1$~, fsl=\E[0$},
is2=\E7\E[r\E8\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h,
- tsl=\E[1$}\E[;%df, use=vt200,
+ tsl=\E[1$}\E[;%df, use=vt220-base,
# (news517-w: this had :TY=sjis:. --esr)
nwp517-w|nwp-517-w|nwp-517 vt200 132 cols 50 rows,
eslok, hs,
cols#132, lines#50,
OTi2=\E[2$~\n, dsl=\E[1$~, fsl=\E[0$},
is2=\E7\E[r\E8\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h,
rs2=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h,
- tsl=\E[1$}\E[;%df, use=vt200,
+ tsl=\E[1$}\E[;%df, use=vt220-base,
#### Common Desktop Environment
#
# This ships with Sun's CDE in Solaris 2.5
# Corrected Sun Aug 9 1998 by Alexander V. Lukyanov <lav@video.yars.free.net>
dtterm|CDE desktop terminal,
am, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, lm#0, ncv@,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM,
dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
enacs=\E(B\E)0, flash=\E[?5h$<200>\E[?5l, home=\E[H,
ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L,
ind=\ED, invis=\E[8m, is2=\E F\E>\E[?1l\E[?7h\E[?45l,
kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
- kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~,
- kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
- kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
- kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~,
- kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- kfnd=\E[1~, khlp=\E[28~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
- kslt=\E[4~, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
+ kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
+ kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
+ kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[12~,
+ kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~,
+ kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
+ khlp=\E[28~, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
rmam=\E[?7l, rmir=\E[4l, rmso=\E[22;27m, rmul=\E[24m,
sc=\E7,
sgr=\E[0%?%p1%t;2;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5
%t;2%;%?%p6%t;1%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h,
- smso=\E[2;7m, smul=\E[4m, tbc=\E[3g, use=ecma+color,
+ smso=\E[2;7m, smul=\E[4m, tbc=\E[3g, use=vt220+vtedit,
+ use=vt220+cvis, use=ecma+color,
######## Non-Unix Consoles
#
#### EMX termcap.dat compatibility modes
#
# Also (possibly only EMX, so we don't put it in ansi.sys, etc): set the
# no_color_video to inform the application that standout(1), underline(2)
# reverse(4) and invisible(64) don't work with color.
emx-base|DOS special keys,
bce, bw,
it#8, ncv#71,
bel=^G, use=ansi.sys,
# Except for the "-emx" suffixes, these are as distributed with EMX 0.9b,
# a Unix-style environment used on OS/2. (Note that the suffix makes some
# names longer than 14 characters, the nominal maximum).
#
# Removed: rmacs=\E[10m, smacs=\E[11m, because OS/2 does not implement acs.
ansi-emx|ANSI.SYS color,
am, bce, eo, mir, msgr, xon,
colors#8, cols#80, it#8, lines#25, pairs#64,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[1;33;44m\E[H\E[J, cnorm=\E[?25h, cr=\r, cub1=^H,
- cud1=\n, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
+ bel=^G, blink=\E[5m, bold=\E[1m,
+ clear=\E[1;33;44m\E[H\E[J, cr=\r, cub1=^H, cud1=\n,
+ cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
dch=\E[%p1%dp, ed=\E[J, el=\E[K,
flash=\E[?5h$<100/>\E[?5l, home=\E[H, ht=^I, hts=\EH,
ich=\E[%p1%d@, ich1=\E[@, ind=\n, kb2=\E[G, kbs=^H, kf0=\0D,
kll=\0O, kspd=^Z, nel=\r\n, rev=\E[5;37;41m, rmir=\E[4l,
rmpch=\E[10m, rmso=\E[0;44m\E[1;33m,
rmul=\E[0;44m\E[1;33m, rs1=\Ec, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm, sgr0=\E[0m\E[1;33;44m, smir=\E[4h,
smpch=\E[11m, smso=\E[0;31;47m, smul=\E[1;31;44m,
- tbc=\E[3g, u8=\E[?6c, u9=\E[c, use=emx-base,
+ tbc=\E[3g, u8=\E[?6c, u9=\E[c, use=vt220+cvis,
+ use=emx-base,
# nice colors for Emacs (white on blue, mode line white on cyan)
ansi-color-2-emx|ANSI.SYS color 2,
clear=\E[0;37;44m\E[H\E[J, rev=\E[1;37;46m,
rmso=\E[0;37;44m, rmul=\E[0;37;44m, rs1=\Ec,
setaf=\E[3%p1%dm, sgr0=\E[0;37;44m, smso=\E[1;37;46m,
smul=\E[1;36;44m, use=ansi-emx,
# nice colors for Emacs (white on black, mode line black on cyan)
ansi-color-3-emx|ANSI.SYS color 3,
clear=\E[0;37;40m\E[H\E[J, rev=\E[1;37;46m,
rmso=\E[0;37;40m, rmul=\E[0;37;40m, rs1=\Ec,
setaf=\E[3%p1%dm, sgr0=\E[0;10m, smso=\E[1;37;46m,
smul=\E[0;36;40m, use=ansi-emx,
mono-emx|stupid monochrome ansi terminal with only one kind of emphasis,
am,
cols#80, it#8, lines#24,
clear=\E[H\E[2J$<50>, cub1=\E[D, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[K, home=\E[H,
ht=^I, kb2=\E[G, kbs=^H, kcub1=\0K, kcud1=\0P, kcuf1=\0M,
kcuu1=\0H, kf0=\0D, kf1=\0;, kf2=\0<, kf3=\0=, kf4=\0>,
kf5=\0?, kf6=\0@, kf7=\0A, kf8=\0B, kf9=\0C, khome=\0G,
kich1=\0R, kll=\0O, knp=\0Q, kpp=\0I, nel=\r\n, rev=\E[7m,
sgr0=\E[0m,
#### Cygwin
# Use this for cygwin32 (tested with beta 19.1)
# underline is colored bright magenta
# shifted kf1-kf12 are kf11-kf22
cygwinB19|ANSI emulation for cygwin32,
- kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
- kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
- kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
- kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D,
- kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, rmam@, smam@,
+ kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E[[A,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
+ kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
+ kf18=\E[32~, kf19=\E[33~, kf2=\E[[B, kf20=\E[34~,
+ kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~,
+ kf8=\E[19~, kf9=\E[20~, rmam@, smam@, use=vt220+pcedit,
use=ansi.sys,
# Use this for cygwin (tested with version 1.1.0).
# I've combined pcansi and linux. Some values of course were different and
# I've indicated which of these were and which I used.
# Cheers, earnie_boyd@yahoo.com
# several changes based on running with tack and comparing with older entry -TD
# more changes from csw:
# add cbt [backtab]
# remove eo [erase overstrike with blank]
# change clear was \E[H\E[J now \E[2J (faster?)
# remove cols
# remove lines
# remove ncv#3 [colors collide with highlights, bitmask] not applicable
# to MSDOS box?
# add cub [cursor back param]
# add cuf [cursor forward param]
# add cuu [cursor up param]
# add cud [cursor down param]
# add hs [has status line]
# add fsl [return from status line]
# add tsl [go to status line]
# add smacs [Start alt charset] (not sure if this works)
# add rmacs [End alt charset] (ditto)
# add smcup [enter_ca_mode] (save console; thanks Corinna)
# add rmcup [exit_ca_mode] (restore console; thanks Corinna)
# add kb2 [center of keypad]
# add u8 [user string 8] \E[?6c
# add el [clear to end of line] \E[K
# Notes:
# cnorm [make cursor normal] not implemented
# flash [flash] not implemented
# blink [blink] not implemented very usefully in cygwin? \E[5m
# dim [dim] not implemented very usefully in cygwin? \E[2m
# cub1 [cursor back 1] typically \E[D, but ^H is faster?
# kNXT [shifted next key] not implemented
# kPRV [shifted prev key] not implemented
# khome [home key] really is \E[1~ NOT \E[H
# tbc [clear tab stops] not implemented
# xenl [newline ignored after 80 cols] messes up last line? Ehud Karni
# smpch [Start PC charset] is \E[11m, same as smacs
# rmpch [End PC charset] is \E[10m, same as rmacs
# mir [move in insert mode] fails in tack?
# bce [back color erase] causes problems with change background color?
# cvvis [make cursor very visible] causes a stackdump when testing with
# testcurs using the output option? \E[?25h\E[?8c
# civis [make cursor invisible] causes everything to stackdump? \E[?25l\E[?1c
# ech [erase characters param] broken \E[%p1%dX
# kcbt [back-tab key] not implemented in cygwin? \E[Z
#
# 2005/11/12 -TD
# Remove cbt since it does not work in current cygwin
# Add 'mir' and 'in' flags based on tack
cygwin|ANSI emulation for Cygwin,
am, hs, mir, msgr, xon,
colors#8, it#8, pairs#64,
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j
\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v
\301w\302x\263y\363z\362{\343|\330}\234~\376,
bel=^G, bold=\E[1m, clear=\E[H\E[J, cr=\r, cub=\E[%p1%dD,
cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA,
cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, fsl=^G, home=\E[H,
hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@, ich1=\E[@,
il=\E[%p1%dL, il1=\E[L, ind=\n, invis=\E[8m, kb2=\E[G,
kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
- kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
- kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
- kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D,
- kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kspd=^Z,
- nel=\r\n, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM,
- rmacs=\E[10m, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l,
- rmpch=\E[10m, rmso=\E[27m, rmul=\E[24m, rs1=\Ec\E]R,
- sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
+ kf1=\E[[A, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
+ kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
+ kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[[B,
+ kf20=\E[34~, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~,
+ kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kspd=^Z, nel=\r\n,
+ op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E[10m,
+ rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmpch=\E[10m,
+ rmso=\E[27m, rmul=\E[24m, rs1=\Ec\E]R, sc=\E7,
+ setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p6%t;1%;%?%p7
%t;8%;%?%p9%t;11%;m,
sgr0=\E[0;10m, smacs=\E[11m, smcup=\E7\E[?47h,
smir=\E[4h, smpch=\E[11m, smso=\E[7m, smul=\E[4m, tsl=\E];,
- vpa=\E[%i%p1%dd, use=vt102+enq,
+ vpa=\E[%i%p1%dd, use=vt220+pcedit, use=vt102+enq,
# I've supplied this so that you can help test new values and add other
# features. Cheers, earnie_boyd@yahoo.com.
#
# Some features are from pcansi. The op value is from linux. Function-keys
# are from linux. These have been tested not to cause problems. xenl was in
# this list, but DOES cause problems so it has been removed
cygwinDBG|Debug Version for Cygwin,
am, eo, mir, msgr, xon,
colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j
\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v
\301w\302x\263y\363z\362{\343|\330}\234~\376,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
- cnorm=\E[?25h, cr=\r, cub=\E[%p1%dD, cub1=\E[D,
- cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
- cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
- dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM,
- dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
- flash=\E[?5h$<200/>\E[?5l, home=\E[H, hpa=\E[%i%p1%dG,
- ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL,
- il1=\E[L, ind=\n, invis=\E[8m, kNXT=\E[6$, kPRV=\E[5$,
- kb2=\E[G, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B,
- kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A,
- kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
- kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
- kf18=\E[32~, kf19=\E[33~, kf2=\E[[B, kf20=\E[34~,
- kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~,
- kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~,
- knp=\E[6~, kpp=\E[5~, kspd=^Z, nel=\r\n, op=\E[39;49m,
- rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E[10m, rmir=\E[4l,
- rmso=\E[m, rmul=\E[m, rs1=\Ec\E]R, sc=\E7,
- setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
+ cr=\r, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B,
+ cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
+ cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
+ dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K,
+ el1=\E[1K, flash=\E[?5h$<200/>\E[?5l, home=\E[H,
+ hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
+ il=\E[%p1%dL, il1=\E[L, ind=\n, invis=\E[8m, kNXT=\E[6$,
+ kPRV=\E[5$, kb2=\E[G, kbs=^H, kcbt=\E[Z, kcub1=\E[D,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E[[A, kf10=\E[21~,
+ kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
+ kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
+ kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D,
+ kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
+ kspd=^Z, nel=\r\n, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM,
+ rmacs=\E[10m, rmir=\E[4l, rmso=\E[m, rmul=\E[m,
+ rs1=\Ec\E]R, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5
%t;2%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;12%;m,
sgr0=\E[0;10m, smacs=\E[11m, smir=\E[4h, smso=\E[7m,
- smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, use=vt102+enq,
+ smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, use=vt220+pcedit,
+ use=vt220+cvis, use=vt102+enq,
#### DJGPP
# Key definitions:
# The encodings for unshifted arrow keys, F1-F12, Home, Insert, etc. match the
# encodings used by other x86 environments. All others are invented for DJGPP.
# Oddly enough, while several combinations of modifiers are tabulated, there is
# none for shifted cursor keys.
#
# F1 \E[[A
# F2 \E[[B
# F3 \E[[C
# F4 \E[[D
# F5 \E[[E
# F6 \E[17~
# F7 \E[18~
# F8 \E[19~
# F9 \E[20~
# F10 \E[21~
# F11 \E[23~
# F12 \E[24~
#
# Delete \E[3~
# Down Arrow \E[B
# End \E[4~
# Home \E[1~
# Insert \E[2~
# Left Arrow \E[D
# Page Down \E[6~
# Page Up \E[5~
# Right Arrow \E[C
# Up Arrow \E[A
#
# Shift-F1 \E[25~
# Shift-F2 \E[26~
# Shift-F3 \E[27~
# Shift-F4 \E[28~
# Shift-F5 \E[29~
# Shift-F6 \E[30~
# Shift-F7 \E[31~
# Shift-F8 \E[32~
# Shift-F9 \E[33~
# Shift-F10 \E[34~
# Shift-F11 \E[35~
# Shift-F12 \E[36~
#
# Ctrl-F1 \E[47~
# Ctrl-F2 \E[48~
# Ctrl-F3 \E[49~
# Ctrl-F4 \E[50~
# Ctrl-F5 \E[51~
# Ctrl-F6 \E[52~
# Ctrl-F7 \E[53~
# Ctrl-F8 \E[54~
# Ctrl-F9 \E[55~
# Ctrl-F10 \E[56~
# Ctrl-F11 \E[57~
# Ctrl-F12 \E[58~
#
# Ctrl-Delete \E[43~
# Ctrl-Down Arrow \E[38~
# Ctrl-End \E[44~
# Ctrl-Home \E[41~
# Ctrl-Insert \E[42~
# Ctrl-Left Arrow \E[39~
# Ctrl-Page Down \E[46~
# Ctrl-Page Up \E[45~
# Ctrl-Right Arrow \E[40~
# Ctrl-Up Arrow \E[37~
#
# Alt-F1 \E[59~
# Alt-F2 \E[60~
# Alt-F3 \E[61~
# Alt-F4 \E[62~
# Alt-F5 \E[63~
# Alt-F6 \E[64~
# Alt-F7 \E[65~
# Alt-F8 \E[66~
# Alt-F9 \E[67~
# Alt-F10 \E[68~
# Alt-F11 \E[79~
# Alt-F12 \E[80~
#
# Alt-Delete \E[65~
# Alt-Down Arrow \E[60~
# Alt-End \E[66~
# Alt-Home \E[41~
# Alt-Insert \E[64~
# Alt-Left Arrow \E[61~
# Alt-Page Down \E[68~
# Alt-Page Up \E[67~
# Alt-Right Arrow \E[62~
# Alt-Up Arrow \E[59~
#
# Also:
# Alt-A \E[82~
# Alt-B \E[82~
# Alt-C \E[83~
# Alt-D \E[84~
# Alt-E \E[85~
# Alt-F \E[86~
# Alt-G \E[87~
# Alt-H \E[88~
# Alt-I \E[89~
# Alt-J \E[90~
# Alt-K \E[91~
# Alt-L \E[92~
# Alt-M \E[93~
# Alt-N \E[94~
# Alt-O \E[95~
# Alt-P \E[96~
# Alt-Q \E[97~
# Alt-R \E[98~
# Alt-S \E[99~
# Alt-T \E[100~
# Alt-U \E[101~
# Alt-V \E[102~
# Alt-W \E[103~
# Alt-X \E[104~
# Alt-Y \E[105~
# Alt-Z \E[106~
djgpp|ANSI emulation for DJGPP alpha,
am, bce, msgr, xhp, xon, xt,
colors#8, it#8, pairs#64,
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j
\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v
\301w\302x\263y\363z\362{\343|\330}\234~\376,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[1v,
clear=\E[H\E[J, cnorm=\E[v, cr=\r, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[2v, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
home=\E[H, hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@,
ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\E[S, invis=\E[8m,
kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
- kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf2=\E[[B, kf3=\E[[C, kf4=\E[[D,
- kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, nel=\r\n,
- op=\E[37;40m, rev=\E[7m, ri=\E[T, rmso=\E[m,
- setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
+ kf1=\E[[A, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
+ kf2=\E[[B, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~,
+ kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, nel=\r\n, op=\E[37;40m,
+ rev=\E[7m, ri=\E[T, rmso=\E[m, setab=\E[4%p1%dm,
+ setaf=\E[3%p1%dm,
sgr=\E[0%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%e;25%;%?
%p6%t;1%;%?%p7%t;8%;m,
sgr0=\E[m, smso=\E[7m, smul=\E[4m, vpa=\E[%i%p1%dd,
- use=ecma+index,
+ use=vt220+pcedit, use=ecma+index,
djgpp203|Entry for DJGPP 2.03,
OTbs, am,
cols#80, it#8, lines#25,
bel=^G, cr=\r, cub1=^H, cud1=\n, ht=^I, ind=\n, kbs=^H, kcub1=^H,
kcud1=\n, nel=\r\n,
djgpp204|Entry for DJGPP 2.04,
OTbs, am, AX,
colors#8, cols#80, it#8, lines#25, ncv#3, pairs#64,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[1v,
clear=\E[H\E[2J, cnorm=\E[v, cr=\r, cub=\E[%p1%dD,
cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA,
cuu1=\E[A, cvvis=\E[2v, dch=\E[%p1%dP, dch1=\E[P,
dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL,
il1=\E[L, ind=\E[S, invis=\E[8m, kbs=^H, kcub1=\E[D,
- kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~,
- kf0=\E[21~, kf1=\E[[A, kf10=\E[21~, kf2=\E[[B, kf3=\E[[C,
- kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
- kf9=\E[20~, khome=\E[1~, kich1=\E[2~, kll=\E[4~, knp=\E[6~,
- kpp=\E[5~, nel=\r\n, rev=\E[7m, ri=\E[T, rmso=\E[m,
- setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[m,
- smso=\E[7m, smul=\E[4m, use=ecma+index,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\E[21~, kf1=\E[[A,
+ kf10=\E[21~, kf2=\E[[B, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E,
+ kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kll=\E[4~,
+ nel=\r\n, rev=\E[7m, ri=\E[T, rmso=\E[m, setab=\E[4%p1%dm,
+ setaf=\E[3%p1%dm, sgr0=\E[m, smso=\E[7m, smul=\E[4m,
+ use=vt220+pcedit, use=ecma+index,
#### U/Win
# This is tested using U/Win's telnet. Scrolling is omitted because it is
# buggy. Another odd bug appears when displaying "~" in alternate character
# set (the emulator spits out error messages). Compare with att6386 -TD
uwin|U/Win 3.2 console,
am, eo, in, msgr, xenl, xon,
colors#8, it#8, ncv#58, pairs#64,
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i
\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u
\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h, cr=\r, cub1=^H, cud1=\n,
- cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
- dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, ech=\E[%p1%dX,
- ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I, hts=\EH,
- ich=\E[%p1%d@, ich1=\E[@, kbs=^H, kcub1=\E[D, kcud1=\E[B,
- kcuf1=\E[C, kcuu1=\E[A, kdch1=^?, kend=\E[Y, kf1=\EOP,
- kf10=\EOY, kf11=\EOZ, kf12=\EOA, kf2=\EOQ, kf3=\EOR,
- kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX,
- khome=\E[H, kich1=\E[@, nel=\r\n, op=\E[39;49m, rc=\E8,
- rev=\E[7m, rmacs=\E[10m, rmir=\E[4l, rmpch=\E[10m,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
+ cub1=^H, cud1=\n, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
+ cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
+ ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I,
+ hts=\EH, ich=\E[%p1%d@, ich1=\E[@, kbs=^H, kcub1=\E[D,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=^?, kend=\E[Y,
+ kf1=\EOP, kf10=\EOY, kf11=\EOZ, kf12=\EOA, kf2=\EOQ,
+ kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW,
+ kf9=\EOX, khome=\E[H, kich1=\E[@, nel=\r\n, op=\E[39;49m,
+ rc=\E8, rev=\E[7m, rmacs=\E[10m, rmir=\E[4l, rmpch=\E[10m,
rmso=\E[27m, rmul=\E[m, rs1=\Ec\E]R, sc=\E7,
setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[0;10m,
smacs=\E[11m, smir=\E[4h, smpch=\E[11m, smso=\E[7m,
smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
+ use=vt220+cvis,
#### Microsoft (miscellaneous)
# This entry fits the Windows NT console when the _POSIX_TERM environment
# variable is set to 'on'. While the Windows NT POSIX console is seldom used,
# the Telnet client supplied with both the Windows for WorkGroup 3.11 TCP/IP
# stack and the Win32 (i.e., Windows 95 and Windows NT 3.1 or later) operating
# systems is not, and (surprise!) they match very well.
#
# See: MS Knowledge Base item Q108581, dated 13-MAY-1997, titled "Setting Up
# VI POSIX Editor for Windows NT 3.1". True to Microsoft form, not only
# are the installation instructions a pile of mind-numbing bureaucratese,
# but the termcap entry is actually broken and unusable as given; the :do:
# capability is misspelled "d".
#
# To use this, you need to a bunch of environment variables:
#
# SET _POSIX_TERM=on
# SET TERM=ansi
# SET TERMCAP=location of termcap file in POSIX file format
# which is case-sensitive.
# e.g. SET TERMCAP=//D/RESKIT35/posix/termcap
# SET TMP=//C/TEMP
#
# Important note: setting the TMP environment variable in POSIX style renders
# it incompatible with a lot of other applications, including Visual C++. So
# you should have a separate command window just for vi. All the other
# variables may be permanently set in the Control Panel\System applet.
#
# You can find out more about the restrictions of this facility at
-# <http://www.nentug.org/unix-to-nt/ntposix.htm>.
+# <https://jeffpar.github.io/kbarchive/kb/108/Q108581/>
#
# From: Federico Bianchi <bianchi@magna.cisid.unipi.it>, 15 Jan 1997
ansi-nt|psx_ansi|Microsoft Windows NT console POSIX ANSI mode,
am, bw, msgr,
cols#80, it#8, lines#25,
bel=^G, clear=\E[2J, cr=\r, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, ed=\E[J, el=\E[K,
home=\E[H, ht=^I, ind=\E[S, kbs=^H, kcub1=\E[D, kcud1=\E[V,
kcuf1=\E[C, kcuu1=\E[A, nel=\r\E[S, rc=\E[u, rev=\E[7m,
ri=\E[T, rmso=\E[m, sc=\E[s, sgr0=\E[0m, smso=\E[7m,
# From: jew@venus.sunquest.com
# Date: 19 Feb 93 23:41:07 GMT
# Here's a combination of ansi and vt100 termcap
# entries that works nearly perfectly for me
# (Gateway 2000 Handbook and Microsoft Works 3.0):
pcmw|PC running Microsoft Works,
am, xenl,
cols#80, it#8, lines#24, vt#3,
bel=^G, blink=\E[5m$<2/>, bold=\E[1m$<2/>,
clear=\E[;H\E[2J$<50/>, cr=\r, cub1=^H, cud1=\n,
cuf1=\E[C$<2/>, cup=\E[%i%p1%d;%p2%dH$<5/>,
cuu1=\E[A$<2/>, ed=\E[J$<50/>, el=\E[K$<3/>, home=\E[H,
ht=^I, hts=\EH$<2/>, ind=\ED$<5/>, is2=\E[1;24r\E[24;1H,
kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, nel=\r\ED$<5/>,
rc=\E8, rev=\E[7m$<2/>, rf=/usr/share/tabset/vt100,
ri=\EM$<5/>, rmso=\E[m$<2/>, rmul=\E[m$<2/>,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
sgr0=\E[m$<2/>, smso=\E[7m$<2/>, smul=\E[4m$<2/>,
tbc=\E[3g$<2/>,
# From: Federico Bianchi
# This is the entry for the OpenNT terminal.
# The ntconsole name is for backward compatibility.
# This is for OpenNT 2.0 and later.
# Later OpenNT was renamed to Interix.
#
# Presently it is distributed by Microsoft as Services For Unix (SFU).
# The 3.5 beta contained ncurses 4.2 (that is header files and executables,
# the documentation dated from 1.9.9e) -TD
#
# For a US keyboard, with 12 function-kecbt=\E[Z, ys,
# kf1-kf12 are unmodifiedcbt=\E[Z, cbt=\E[Z,
# kf13-kf24 use the shift-key
# kf25-kf36 use the left alt-key
# kf37-kf38 use the control-key
# kf49-kf60 use the shift- and control-keys
# The shifted cursor keys send the sequences originally used for kf61-kf64:
# down=\EF+ (kf61)
# up=\EF- (kf62)
# left=\EF^ (unassigned)
# right=\EF$ (kf64)
interix|opennt|opennt-25|ntconsole|ntconsole-25|OpenNT-term compatible with color,
am, bce, msgr,
cols#80, it#8, lines#25,
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j
\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v
\301w\302x\263y\363z\362{\343|\330}\234~\376,
bel=^G, bold=\E[1m, clear=\E[2J, cr=\r, cub=\E[%p1%dD,
cub1=\E[D, cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA,
cuu1=\E[A, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K,
home=\E[H, ht=^I, il=\E[%p1%dL, il1=\E[L, ind=\E[S,
kLFT=\EF\^, kRIT=\EF$, kbs=^H, kcbt=\E[Z, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=^?, kend=\E[U,
kf0=\EFA, kf1=\EF1, kf10=\EFA, kf11=\EFB, kf12=\EFC,
kf13=\EFD, kf14=\EFE, kf15=\EFF, kf16=\EFG, kf17=\EFH,
kf18=\EFI, kf19=\EFJ, kf2=\EF2, kf20=\EFK, kf21=\EFL,
kf22=\EFM, kf23=\EFN, kf24=\EFO, kf25=\EFP, kf26=\EFQ,
kf27=\EFR, kf28=\EFS, kf29=\EFT, kf3=\EF3, kf30=\EFU,
kf31=\EFV, kf32=\EFW, kf33=\EFX, kf34=\EFY, kf35=\EFZ,
kf36=\EFa, kf37=\EFb, kf38=\EFc, kf39=\EFd, kf4=\EF4,
kf40=\EFe, kf41=\EFf, kf42=\EFg, kf43=\EFh, kf44=\EFi,
kf45=\EFj, kf46=\EFk, kf47=\EFm, kf48=\EFn, kf49=\EFo,
kf5=\EF5, kf50=\EFp, kf51=\EFq, kf52=\EFr, kf53=\EFs,
kf54=\EFt, kf55=\EFu, kf56=\EFv, kf57=\EFw, kf58=\EFx,
kf59=\EFy, kf6=\EF6, kf60=\EFz, kf7=\EF7, kf8=\EF8, kf9=\EF9,
khome=\E[H, kich1=\E[L, kind=\EF+, kll=\E[U, knp=\E[T,
kpp=\E[S, kri=\EF-, ll=\E[U, nel=\r\n, op=\E[m, rc=\E[u,
rev=\E[7m, ri=\E[T, rmcup=\E[2b\E[u\r\E[K, rmso=\E[m,
rmul=\E[m, rs1=\Ec, sc=\E[s, sgr0=\E[0m, smcup=\E[s\E[1b,
smso=\E[7m, smul=\E[4m, use=ecma+index, use=klone+color,
opennt-35|ntconsole-35|OpenNT-term35 compatible with color,
lines#35, use=opennt,
opennt-50|ntconsole-50|OpenNT-term50 compatible with color,
lines#50, use=opennt,
opennt-60|ntconsole-60|OpenNT-term60 compatible with color,
lines#60, use=opennt,
opennt-100|ntconsole-100|OpenNT-term100 compatible with color,
lines#100, use=opennt,
# OpenNT wide terminals
opennt-w|opennt-25-w|ntconsole-w|ntconsole-25-w|OpenNT-term-w compat with color,
cols#125, use=opennt,
opennt-35-w|ntconsole-35-w|OpenNT-term35-w compatible with color,
lines#35, use=opennt-w,
opennt-50-w|ntconsole-50-w|OpenNT-term50-w compatible with color,
lines#50, use=opennt-w,
opennt-60-w|ntconsole-60-w|OpenNT-term60-w compatible with color,
lines#60, use=opennt-w,
opennt-w-vt|opennt-25-w-vt|ntconsole-w-vt|ntconsole-25-w-vt|OpenNT-term-w-vt compat with color,
cols#132, use=opennt,
# OpenNT terminals with no smcup/rmcup (names match termcap entries)
interix-nti|opennt-nti|opennt-25-nti|ntconsole-25-nti|OpenNT-nti compatible with color,
rmcup@, smcup@, use=opennt,
opennt-35-nti|ntconsole-35-nti|OpenNT-term35-nti compatible with color,
lines#35, use=opennt-nti,
opennt-50-nti|ntconsole-50-nti|OpenNT-term50-nti compatible with color,
lines#50, use=opennt-nti,
opennt-60-nti|ntconsole-60-nti|OpenNT-term60-nti compatible with color,
lines#60, use=opennt-nti,
opennt-100-nti|ntconsole-100-nti|OpenNT-term100-nti compatible with color,
lines#100, use=opennt-nti,
######## COMMON TERMINAL TYPES
#
# This section describes terminal classes and maker brands that are still
# quite common, but have proprietary command sets not blessed by ANSI.
#
#### Altos
#
# Altos made a moderately successful line of UNIX boxes. In 1990 they were
# bought out by Acer, a major Taiwanese manufacturer of PC-clones.
# Acer has a web site at http://www.acer.com.
#
# Altos descriptions from Ted Mittelstaedt <tedm@agora.rain.com> 4 Sep 1993
# His comments suggest they were shipped with the system.
#
# (altos2: had extension capabilities
# :c0=^A`\r:c1=^Aa\r:c2=^Ab\r:c3=^Ac\r:\
# :c4=^Ad\r:c5=^Ae\r:c6=^Af\r:c7=^Ag\r:\
# :c8=^Ah\r:c9=^Ai\r:cA=^Aj\r:cB=^Ak\r:\
# :cC=^Al\r:cD=^Am\r:cE=^An\r:cF=^Ao\r:
# :XU=^Aq\r:XD=^Ar\r:XR=^As\r:XL=^At\r:\
# :YU=^AQ\r:YD=^AR\r:YR=^AS\r:YL=^AT\r:\
# :HL=^AP\r:SP=\E[i:\
# :IS=\E[@:DE=\E[P:IL=\E[L:NS=\E[S:PS=\E[T:\
# :LO=\E[0q:LC=\E[5q:LL=\E[6q:\
# Comparison with the k* capabilities makes it obvious that the c* things are
# shift keys. I have renamed them to keys 32 and up accordingly. Also,
# :sr: was given as a boolean-- esr)
altos2|alt2|altos-2|altos II,
cols#80, it#8, lines#24, xmc#0,
clear=\E[H\E[2J, cr=\r, cub1=^H, cud1=\E[1B, cuf1=\E[1C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[1A, dch1=\E[P, dl1=\E[M,
ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich1=\E[@,
if=/usr/share/tabset/vt100, il1=\E[L, ind=\n,
is2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, kDL=^Am\r,
kEOL=^An\r, kbs=^H, kcbt=^AK\r, kclr=^AL\r, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=^AM\r, kel=^AN\r,
kf0=^AI\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf32=^A`\r,
kf33=^Aa\r, kf34=^Ab\r, kf35=^Ac\r, kf36=^Ad\r, kf37=^Ae\r,
kf38=^Af\r, kf39=^Ag\r, kf4=^AC\r, kf40=^Ah\r, kf41=^Ai\r,
kf42=^Aj\r, kf43=^Ak\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r,
kf8=^AG\r, kf9=^AH\r, khome=\E[f, kil1=^AJ\r, kind=^AO\r,
nel=\r\n, rmam=\E[?7l, rmso=\E[m, rmul=\E[m, sgr0=\E[m,
smam=\E[?7h, smso=\E[7m, smul=\E[4m,
# (altos3: had extension capabilities
# :c0=^A`\r:c1=^Aa\r:c2=^Ab\r:c3=^Ac\r:\
# :c4=^Ad\r:c5=^Ae\r:c6=^Af\r:c7=^Ag\r:\
# :c8=^Ah\r:c9=^Ai\r:cA=^Aj\r:cB=^Ak\r:\
# :cC=^Al\r:cD=^Am\r:cE=^An\r:cF=^Ao\r:
# :XU=^Aq\r:XD=^Ar\r:XR=^As\r:XL=^At\r:\
# :HL=^AP\r:SP=\E[i:\
# :IS=\E[@:DE=\E[P:IL=\E[L:NS=\E[S:PS=\E[T:
altos3|altos5|alt3|alt5|altos-3|altos-5|altos III or V,
blink=\E[5p, ri=\EM, sgr0=\E[p, use=altos2,
altos4|alt4|altos-4|altos IV,
use=wy50,
# (altos7: had extension capabilities:
# :GG#0:GI=\EH8:GF=\EH7:\
# :c0=^A`\r:c1=^Aa\r:c2=^Ab\r:c3=^Ac\r:\
# :c4=^Ad\r:c5=^Ae\r:c6=^Af\r:c7=^Ag\r:\
# :c8=^Ah\r:c9=^Ai\r:cA=^Aj\r:cB=^Ak\r:\
# :cC=^Al\r:cD=^Am\r:cE=^An\r:cF=^Ao\r:
# Comparison with the k* capabilities makes it obvious that the c* things are
# shift keys. I have renamed them to keys 32 and up accordingly. I have
# also made this entry relative to adm12 in order to give it an <sgr>. The
# <invis> imported by use=adm+sgr may work, let me know. -- esr)
altos7|alt7|altos VII,
am, mir,
cols#80, lines#24, xmc#0,
acsc=j5k3l2m1n8q\:t4u9v=w0x6, blink=\EG2, bold=\EGt,
clear=\E+^^, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dim=\EGp, dl1=\ER, ed=\EY, el=\ET, home=^^, ht=^I, il1=\EE,
ind=\n, invis=\EG1,
is2=\E`\:\Ee(\EO\Ee6\Ec41\E~4\Ec21\Eu\E~2, kDL=^Am\r,
kEOL=^An\r, kbs=^H, kcbt=^AK\r, kclr=^AL\r, kcub1=^H,
kcud1=\n, kcuf1=^L, kcuu1=^K, kdch1=^AM\r, kel=^AN\r,
kf0=^AI\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf32=^A`\r,
kf33=^Aa\r, kf34=^Ab\r, kf35=^Ac\r, kf36=^Ad\r, kf37=^Ae\r,
kf38=^Af\r, kf39=^Ag\r, kf4=^AC\r, kf40=^Ah\r, kf41=^Ai\r,
kf42=^Aj\r, kf43=^Ak\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r,
kf8=^AG\r, kf9=^AH\r, khome=^^, kil1=^AJ\r, kind=^AO\r,
knp=\EK, kpp=\EJ, mc4=\EJ, mc5=\Ed#, nel=\r\n, ri=\Ej,
rmir=\Er, smir=\Eq, use=adm+sgr,
altos7pc|alt7pc|altos PC VII,
kend=\ET, use=altos7,
#### Hewlett-Packard (hp)
#
# Hewlett-Packard
# 8000 Foothills Blvd
# Roseville, CA 95747
# Vox: 1-(916)-785-4363 (Technical response line for VDTs)
# 1-(800)-633-3600 (General customer support)
#
#
# As of March 1998, HP no longer has any terminals in production.
# The 700 series (22, 32, 41, 44, 92, 94, 96, 98) is still being
# supported (they still have parts). So are the 2392a and 2394a.
# See the WORKSTATION CONSOLES section for the 700s.
#
# Generic HP terminal - this should (hopefully) work on any HP terminal.
hpgeneric|hp|hewlett-packard generic terminal,
OTbs, OTpt, am, da, db, mir, xhp,
cols#80, lines#24, lm#0, vt#6,
bel=^G, clear=\EH\EJ, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\E&a%p2%dc%p1%dY$<6>, cuu1=\EA, dch1=\EP, dl1=\EM,
ed=\EJ, el=\EK, hpa=\E&a%p1%dC, ht=^I, hts=\E1, il1=\EL,
ind=\n, kbs=^H, kcbt=\Ei, rmir=\ER, rmso=\E&d@, rmul=\E&d@,
sgr0=\E&d@, smir=\EQ, smso=\E&dJ, smul=\E&dD, tbc=\E3,
vpa=\E&a%p1%dY,
hp110|hewlett-packard model 110 portable,
lines#16, use=hpgeneric,
hp+pfk+cr|hp function keys with CR,
kf1=\Ep\r, kf2=\Eq\r, kf3=\Er\r, kf4=\Es\r, kf5=\Et\r,
kf6=\Eu\r, kf7=\Ev\r, kf8=\Ew\r,
hp+pfk-cr|hp function keys w/o CR,
kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev,
kf8=\Ew,
# The hp2621s use the same keys for the arrows and function keys,
# but not separate escape sequences. These definitions allow the
# user to use those keys as arrow keys rather than as function
# keys.
hp+pfk+arrows|hp alternate arrow definitions,
kcub1=\Eu\r, kcud1=\Ew\r, kcuf1=\Ev\r, kcuu1=\Et\r, kf1@,
kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, khome=\Ep\r, kind=\Er\r,
kll=\Eq\r, kri=\Es\r,
hp+arrows|hp arrow definitions,
kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\Eh,
kind=\ES, kll=\EF, kri=\ET,
# Generic stuff from the HP 262x series
#
hp262x|HP 262x terminals,
xhp,
blink=\E&dA, dch1=\EP$<2>, ed=\EJ, ht=\011$<2>, ind=\ES,
invis=\E&dS, ip=$<2>, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, khome=\Eh,
kich1=\EQ, kil1=\EL, kind=\ES, knp=\EU, kpp=\EV, kri=\ET,
krmir=\ER, rev=\E&dB, rmkx=\E&s0A, rmso=\E&d@, rmul=\E&d@,
sgr=\E&d%{64}%?%p1%t%{66}%|%;%?%p2%t%{68}%|%;%?%p3%t%{66}%|
%;%?%p4%t%{65}%|%;%c,
sgr0=\E&d@, smkx=\E&s1A, smso=\E&dB, smul=\E&dD,
# Note: no <home> on HPs since that homes to top of memory, not screen.
# Due to severe 2621 braindamage, the only way to get the arrow keys to
# transmit anything at all is to turn on the function key labels
# with <smkx>, and even then the user has to hold down shift!
# The default 2621 turns off the labels except when it has to to
# enable the function keys. If your installation prefers labels
# on all the time, or off all the time (at the "expense" of the
# function keys), use 2621-nl or 2621-wl.
#
# Note: there are newer ROMs for 2621's that allow you to set
# strap A so the regular arrow keys xmit \EA, etc, as with the
# 2645. However, even with this strap set, the terminal stops
# xmitting if you reset it, until you unset and reset the strap!
# Since there is no way to set/unset the strap with an escape
# sequence, we don't use it in the default.
# If you like, you can use 2621-ba (brain-damaged arrow keys).
hp2621-ba|2621 w/new rom and strap A set,
rmkx@, smkx@, use=hp+arrows, use=hp2621,
# hp2621 with function labels. Most of the time they are off,
# but inside vi, the function key labels appear. You have to
# hold down shift to get them to xmit.
hp2621|hp2621a|hp2621A|2621|2621a|2621A|hp2621-wl|2621-wl|hp 2621 w/labels,
is2=\E&jA\r, rmkx=\E&jA, use=hp2621-fl,
hp2621-fl|hp 2621,
xhp@, xon,
pb#19200,
cbt=\Ei, cup=\E&a%p2%dc%p1%dY, dch1=\EP$<2>, ht=\011$<2>,
ip=$<2>, is2=\E&j@\r, rmkx=\E&j@, rmso=\E&d@, rmul=\E&d@,
sgr0=\E&d@, smkx=\E&jB, smso=\E&dD, smul=\E&dD,
use=hp+pfk+cr, use=hpgeneric,
# To use hp2621p printer, setenv TERM=2621p, PRINTER=2612p
hp2621p|hp 2621 with printer,
mc4=\E&p13C, mc5=\E&p11C, use=hp2621,
hp2621p-a|hp2621p with fn as arrows,
use=hp+pfk+arrows, use=hp2621p,
# hp2621 with k45 keyboard
hp2621-k45|hp2621k45|k45|hp 2621 with 45 keyboard,
kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA,
khome=\Eh, rmkx=\E&s0A, smkx=\E&s1A, use=hp2621,
# 2621 using all 48 lines of memory, only 24 visible at any time.
hp2621-48|48 line 2621,
lines#48,
cup=\E&a%p2%dc%p1%dR, home=\EH, vpa=\E&a%p1%dR,
use=hp2621,
# 2621 with no labels ever. Also prevents vi delays on escape.
hp2621-nl|hp 2621 with no labels,
kcub1@, kcud1@, kcuf1@, kcuu1@, khome@, rmkx@, smkx@,
use=hp2621-fl,
# Needed for UCB ARPAVAX console, since lsi-11 expands tabs
# (wrong).
#
hp2621-nt|hp 2621 w/no tabs,
ht@, use=hp2621,
# Hp 2624 B with 4 or 10 pages of memory.
#
# Some assumptions are made with this entry. These settings are
# NOT set up by the initialization strings.
#
# Port Configuration
# RecvPace=Xon/Xoff
# XmitPace=Xon/Xoff
# StripNulDel=Yes
#
# Terminal Configuration
# InhHndShk=Yes
# InhDC2=Yes
# XmitFnctn(A)=No
# InhEolWrp=No
#
# Note: the 2624 DOES have a true <home>, believe it or not!
#
# The 2624 has an "error line" to which messages can be sent.
# This is CLOSE to what is expected for a "status line". However,
# after a message is sent to the "error line", the next carriage
# return is EATEN and the "error line" is turned back off again!
# So I guess we can't define <hs>, <eslok>, <wsl>, <dsl>, <fsl>, <tsl>.
#
# This entry supports emacs (and any other program that uses raw
# mode) at 4800 baud and less. I couldn't get the padding right
# for 9600.
#
# (hp2624: replaced NUL sequences in flash with mandatory pauses -- esr)
hp2624|hp2624a|hp2624b|hp2624b-4p|Hewlett Packard 2624 B,
da, db,
lm#96,
flash=\E&w13F$<66/>\E&w12F$<66/>\E&w13F$<66/>\E&w12F, use=hp+labels, use=scrhp,
# This hp2626 entry does not use any of the fancy windowing stuff
# of the 2626.
#
# Indeed, terminfo does not yet handle such stuff. Since changing
# any window clears memory, it is probably not possible to use
# this for screen opt.
#
# ed is incredibly slow most of the time - I am guessing at the
# exact padding. Since the terminal uses xoff/xon this is intended
# only for cost computation, so that the terminal will prefer el
# or even dl1 which is probably faster!
#
# \ED\EJ\EC hack for ed from Ed Bradford - apparently ed is only
# extra slow on the last line of the window.
#
# The padding probably should be changed.
#
hp2626|hp2626a|hp2626p|hp 2626,
da, db,
lm#0, pb#19200,
ed=\ED\EJ$<500>\EC, indn=\E&r%p1%dD, ip=$<4>,
is2=\E&j@\r, rin=\E&r%p1%dU, use=hp+pfk-cr,
use=hp+labels, use=scrhp,
# This entry is for sysline. It allocates a 23 line window with
# a 115 line workspace for regular use, and a 1 line window for
# the status line.
#
# This assumes port 2 is being used.
# Turn off horizontal line, Create ws #1 with 115 lines,
# Create ws #2 with 1 line, Create window #1 lines 1-23,
# Create window #2 lines 24-24, Attach cursor to workspace #1.
# Note that this clears the tabs so it must be done by tset before
# it sets the tabs.
#
hp2626-s|hp 2626 using only 23 lines,
eslok, hs,
lines#23,
fsl=\E&d@\E&w7f2p1I\E&w4f1I,
is1=\E&q3t0{0H\s\E&w0f115n1I\s\E&w0f1n2I\s\E&w2f1i0d0u22l0S
\s\E&w2f2i0d23u23l0S\s\E&w7f2p1I\s\r,
tsl=\E&w7f2p2I\E&w4f2I\r\EK\E&a%p1%dC, use=hp2626,
# Force terminal back to 24 lines after being 23.
hp2626-ns|hp 2626 using all 24 lines,
is1=\E&q3t0{0H\s\E&w0f118n1I\s\E&w0f1n2I\s\E&w2f1i0d0u23l0S
\s\E&w3f2I\s\E&w7f2p1I\s\r,
use=hp2626,
# Various entries useful for small windows on 2626.
hp2626-12|hewlett-packard 2626 12 lines,
lines#12, use=hp2626,
hp2626-12x40|hewlett-packard 2626 12 lines 40 columns,
cols#40, lines#12, use=hp2626,
hp2626-x40|hewlett-packard 2626 40 columns,
cols#40, use=hp2626,
hp2626-12-s|hewlett-packard 2626 11 lines plus status,
lines#11, use=hp2626-s,
#
# hp2627 color tubes from University of Wisconsin
#
hp2627a-rev|hp 2627 with reverse video colors,
cr=\r, cud1=\n, ht=^I, ind=\n,
is2=\E&v0m1a0b0c1x1y1z1i0a0b1c1x1y1z0i0S\E&j@\r\E3
\r,
kbs=^H, kcub1=^H, kcud1=\n, nel=\r\n, rmul=\E&v0S\E&d@,
smul=\E&dD\E&v1S, use=hp2621-nl,
hp2627a|hp 2627 color terminal with no labels,
cr=\r, cud1=\n, ht=^I, ind=\n,
is2=\E&v0m1a1b0c1i0a1b1c2i1a0b0c0i0S\E&j@\r\E3\r,
kbs=^H, kcub1=^H, kcud1=\n, nel=\r\n, rmso=\E&v0S,
rmul=\E&v0S\E&d@, smso=\E&v2S, smul=\E&dD\E&v1S,
use=hp2621-nl,
hp2627c|hp 2627 color (cyan) terminal with no labels,
cr=\r, cud1=\n, ht=^I, ind=\n,
is2=\E&v0m1a0b0c2i1a1b0c1i0a1b1c0i0S\E&j@\r\E3\r,
kbs=^H, kcub1=^H, kcud1=\n, nel=\r\n, use=hp2627a,
# hp2640a doesn't have the Y cursor addressing feature, and C is
# memory relative instead of screen relative, as we need.
#
hp2640a|hp 2640a,
cup@, rmkx@, smkx@, use=hp2645,
hp2640b|hp2644a|hp 264x series,
rmkx@, smkx@, use=hp2645,
# (hp2641a: removed unknown :gu: -- esr)
hp2641a|hp2645a|hp2647a|HP 264?A series BRL entry,
am, da, db, mir, xhp,
cols#80, lines#24,
bel=^G, clear=\EH\EJ, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\E&a%p2%2dc%p1%2dY, cuu1=\EA, dch1=\EP, dl1=\EM,
ed=\EJ, el=\EK, hpa=\E&a%p1%2dC, ht=^I,
if=/usr/share/tabset/std, il1=\EL, ind=\n,
is2=\EE$<500/>, kbs=^H, kcub1=^H, kcud1=\n, nel=\r\n,
rmir=\ER, rmso=\E&d@, smir=\EQ, smso=\E&dB,
vpa=\E&a%p1%2dY,
# This terminal should be used at 4800 baud or less. It needs padding for
# plain characters at 9600, I guessed at an appropriate cr delay. It really
# wants ^E/^F handshaking, but that doesn't work well even if you write
# software to support it.
hp2645|hp45|HP 2645 series,
pb#9600,
blink=\E&dA, cr=\r$<20>, dim=\E&dH, kctab=\E2, kcub1=\ED,
kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM,
ked=\EJ, kel=\EK, khome=\Eh, khts=\E1, kich1=\EQ, kil1=\EL,
kind=\ES, knp=\EU, kpp=\EV, kri=\ET, krmir=\ER, rev=\E&dB,
rmkx=\E&s0A,
sgr=\E&d%{64}%?%p1%t%{66}%|%;%?%p2%t%{68}%|%;%?%p3%t%{66}%|
%;%?%p4%t%{65}%|%;%?%p5%t%{72}%|%;%?%p6%t%{66}%|%;%c,
sgr0=\E&d@, smkx=\E&s1A, smul=\E&dD, use=hpgeneric,
# You should use this terminal at 4800 baud or less.
hp2648|hp2648a|HP 2648a graphics terminal,
clear=\EH\EJ$<50>, cup=\E&a%p2%dc%p1%dY$<20>,
dch1=\EP$<7>, ip=$<5>, use=hp2645,
# The HP 150 terminal is a fairly vanilla HP terminal, with the
# clreol standout problem. It also has graphics capabilities and
# a touch screen, which we don't describe here.
hp150|hewlett packard Model 150,
OTbs, use=hp2622,
# HP 2382a terminals, "the little ones." They don't have any
# alternate character set support and sending out ^N/^O will
# leave the screen blank.
hp2382a|hp2382|hewlett packard 2382a,
da, db,
lh#1, lm#48,
acsc@,
pln=\E&f0a%p1%dk%p2%l%Pa%?%ga%t%ga%d%e1%;d0L%?%ga%!%t\s%;%p2
%s,
rmacs@,
sgr=\E&d%{0}%Pa%?%p4%t%{1}%ga%+%Pa%;%?%p1%p3%|%p6%|%t%{2}%ga
%+%Pa%;%?%p2%p6%|%t%{4}%ga%+%Pa%;%?%p1%p5%|%t%{8}%ga%+
%Pa%;%?%p7%t%?%ga%ts%ga%{64}%+%e%{83}%;%e%?%ga%t%ga%{64}
%+%e%{64}%;%;%c,
sgr0=\E&d@, smacs@, use=hp+labels, use=scrhp,
hp2621-a|hp2621a-a|hp2621 with fn as arrows,
use=hp+pfk+arrows, use=hp2621-fl,
# newer hewlett packard terminals
newhpkeyboard|generic entry for HP extended keyboard,
kbs=^H, kcbt=\Ei, kclr=\EJ, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, khome=\Eh,
kich1=\EQ, kil1=\EL, kind=\ET, kll=\EF, knp=\EU, kpp=\EV,
kri=\ES, krmir=\ER, rmkx=\E&s0A, smkx=\E&s1A,
use=hp+pfk-cr,
newhp|generic entry for new hewlett packard terminals,
am, bw, mir, xhp, xon,
cols#80, lines#24, pb#4800,
acsc=2[3@4>5I9(\:'JSKWLQMAO#P$Q;R!S"T1U2V4W3X\:Y+Z*dHjGkTlRm
Fn/q\,t5u6v8w7x.,
bel=^G, blink=\E&dA, bold=\E&dF, cbt=\Ei, cr=\r, cub1=^H,
cud1=\n, cuf1=\EC, cuu1=\EA, dch1=\EP$<2>, dim=\E&dH,
dl1=\EM, ed=\EJ, el=\EK, ht=\011$<2>, hts=\E1, il1=\EL, ind=\n,
invis=\E&dS, ip=$<2>, is1=\E&jB$<8>, nel=\r\n,
pfkey=\E&f0a%p1%dk0d%p2%l%dL%p2%s,
pfloc=\E&f1a%p1%dk0d%p2%l%dL%p2%s,
pfx=\E&f2a%p1%dk0d%p2%l%dL%p2%s, rev=\E&dB, ri=\ET,
rmacs=^O, rmir=\ER, rmso=\E&d@, rmul=\E&d@, rs1=\Eg,
sgr=\E&d%{0}%Pa%?%p4%t%{1}%ga%+%Pa%;%?%p1%p3%|%p6%|%t%{2}%ga
%+%Pa%;%?%p2%p6%|%t%{4}%ga%+%Pa%;%?%p1%p5%|%t%{8}%ga%+
%Pa%;%?%p7%t%?%ga%ts%ga%{64}%+%e%{83}%;%e%?%ga%t%ga%{64}
%+%e%{64}%;%;%c%?%p9%t\016%e\017%;,
sgr0=\E&d@\017, smacs=^N, smir=\EQ, smso=\E&dJ, smul=\E&dD,
tbc=\E3, use=newhpkeyboard,
memhp|memory relative addressing for new HP ttys,
vt#6,
clear=\EH\EJ$<40>, cub=\E&a-%p1%dC, cud=\E&a+%p1%dR,
cuf=\E&a+%p1%dC, cup=\E&a%p1%dr%p2%dC, cuu=\E&a-%p1%dR,
home=\EH, hpa=\E&a%p1%dC, ll=\E&a23R\r,
mrcup=\E&a%p1%dr%p2%dC, vpa=\E&a%p1%dR, use=newhp,
scrhp|screen relative addressing for new HP ttys,
clear=\E&a0c0Y\EJ$<40>, cub=\E&a-%p1%dC,
cud=\E&a+%p1%dR, cuf=\E&a+%p1%dC,
cup=\E&a%p1%dy%p2%dC$<10>, cuu=\E&a-%p1%dR,
home=\E&a0y0C, hpa=\E&a%p1%dC, ll=\E&a0y0C\EA,
mrcup=\E&a%p1%dr%p2%dC, vpa=\E&a%p1%dY, use=newhp,
# (hp+labels: added label values from a BRL termcap -- esr)
hp+labels|"standard" label info for new HP ttys,
lh#2, lw#8, nlab#8,
lf0=f1, lf1=f2, lf2=f3, lf3=f4, lf4=f5, lf5=f6, lf6=f7, lf7=f8,
pln=\E&f2a%p1%dk%p2%l%Pa%?%ga%t%ga%d%e1%;d0L%?%ga%!%t\s%;%p2
%s,
rmln=\E&j@, smln=\E&jB,
hp+printer|"standard" printer info for HP ttys,
ff=\E&p4u0C, mc0=\EH\E&p4dF, mc4=\E&p13C, mc5=\E&p11C,
# The new hp2621b is kind of a cross between the old 2621 and the
# new 262x series of machines. It has dip-switched options.
# The firmware has a bug in it such that if you give it a null
# length label, the following character is eaten!
hp2621b|hp 2621b with old style keyboard,
lh#1, lm#48, lw#8, nlab#8,
kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\Eh,
kind=\ET, kll=\EF, kri=\ES,
pln=\E&f0a%p1%dk%p2%l%Pa%?%ga%t%ga%d%e1%;d3L%?%ga%!%t%{32}%c
%;%p2%s\E%{111}%p1%+%c\r,
smln=\E&jB, use=hp2621,
hp2621b-p|hp 2621b with printer,
use=hp+printer, use=hp2621b,
# hp2621b - new 2621b with new extended keyboard
# these are closer to the new 26xx series than the other 2621b
hp2621b-kx|hp 2621b with extended keyboard,
use=newhpkeyboard, use=hp2621b,
hp2621b-kx-p|hp 2621b with new keyboard & printer,
use=hp+printer, use=hp2621b-kx,
# Some assumptions are made in the following entries.
# These settings are NOT set up by the initialization strings.
#
# Port Configuration
# RecvPace=Xon/Xoff XmitPace=Xon/Xoff StripNulDel=Yes
#
# Terminal Configuration
# InhHndShk(G)=Yes InhDC2(H)=Yes
# XmitFnctn(A)=No InhEolWrp=No
#
#
# Hp 2622a & hp2623a display and graphics terminals
#
hp2622|hp2622a|hp 2622,
da, db,
lm#0, pb#19200,
is2=\E&dj@\r, use=hp+pfk-cr, use=hp+labels, use=scrhp,
# The 2623 is a 2622 with extra graphics hardware.
hp2623|hp2623a|hp 2623,
use=hp2622,
hp2624b-p|hp2624b-4p-p|hewlett packard 2624 B with printer,
use=hp+printer, use=hp2624,
# The hewlett packard B can have an optional extra 6 pages of memory.
hp2624-10p|hp2624a-10p|hp2624b-10p|hewlett packard 2624 B w/ 10 pages of memory,
lm#240, use=hp2624,
hp2624b-10p-p|hewlett packard 2624 B w/ extra memory & printer,
lm#240, use=hp2624b-p,
# Color manipulations for HP terminals
hp+color|hp with colors,
ccc,
colors#16, ncv#17, pairs#7,
initp=\E&v%?%p2%{1000}%=%t1%e.%p2%d%;a%?%p3%{1000}%=%t1%e.
%p3%d%;b%?%p4%{1000}%=%t1%e.%p4%d%;c%?%p5%{1000}%=%t1
%e.%p5%d%;x%?%p6%{1000}%=%t1%e.%p6%d%;y%?%p7%{1000}%=
%t1%e.%p7%d%;z%p1%dI,
oc=\E&v0m1a1b1c0I\E&v1a1I\E&v1b2I\E&v1a1b3I\E&v1c4I\E&v1a1c5
I\E&v1b1c6I\E&v1x1y7I,
op=\E&v0S, scp=\E&v%p1%dS,
# <is2> sets the screen to be 80 columns wide
hp2397a|hp2397|hewlett packard 2397A color terminal,
is2=\E&w6f80X, use=memhp, use=hp+labels, use=hp+color,
# HP 700/44 Setup parameters:
# Terminal Mode HP-PCterm
# Inhibit Auto Wrap NO
# Status Line Host Writable
# PC Character Set YES
# Twenty-Five Line Mode YES
# XON/XOFF @128 or 64 (sc)
# Keycode Mode NO or YES (sc)
# Backspace Key BS or BS/DEL
#
# <is2> sets pcterm; autowrap; 25 lines; pc char set; prog DEL key;
# \E\\? does not turn off keycode mode
# <smsc> sets alternate start/stop; keycode on
hpansi|hp700|hewlett packard 700/44 in HP-PCterm mode,
am, eo, xenl, xon,
cols#80, lines#25,
acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x
\263,
- bel=^G, cbt=\E[Z, civis=\E[?25l, clear=\E[2J\E[H,
- cnorm=\E[?25h, cr=\r, cub1=\E[D, cud1=\E[B, cuf1=\E[C,
- cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M,
- ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich1=\E[@, il1=\E[L,
- ind=\n,
+ bel=^G, cbt=\E[Z, clear=\E[2J\E[H, cr=\r, cub1=\E[D,
+ cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
+ dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I,
+ ich1=\E[@, il1=\E[L, ind=\n,
is2=\E[44"p\E[?7h\E[>10h\E[>12h\EP1;1|3/7F\E\\,
kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kend=\E[4~, kf1=\E[17~, kf10=\E[28~,
kf2=\E[18~, kf3=\E[19~, kf4=\E[20~, kf5=\E[21~, kf6=\E[23~,
kf7=\E[24~, kf8=\E[25~, kf9=\E[26~, khome=\E[1~, knp=\E[6~,
kpp=\E[5~, rmam=\E[?7l,
rmsc=\E[>11l\EP1**x0/11;1/13\E[m\E\\, rmso=\E[m,
rmul=\E[m, sgr0=\E[m, smam=\E[?7h,
smsc=\E[>11h\EPO**x0/65;1/67\E\\$<250>, smso=\E[7m,
- smul=\E[4m, xoffc=g, xonc=e,
+ smul=\E[4m, xoffc=g, xonc=e, use=vt220+cvis,
#
# (hp2392: copied <rmir> here from hpex -- esr)
hp2392|239x series,
cols#80,
cbt=\Ei, cup=\E&a%p1%dy%p2%dC, kf1=\Ep\r, kf2=\Eq\r,
kf3=\Er\r, kf4=\Es\r, kf5=\Et\r, kf6=\Eu\r, kf7=\Ev\r,
kf8=\Ew\r, khome=\Eh, kind=\EU, knp=\Eu, kpp=\Ev, kri=\EV,
rmir=\ER, rmul=\E&d@, smir=\EQ, smul=\E&dD, vpa=\E&a%p1%dY,
use=hpsub,
hpsub|hp terminals -- capability subset,
am, da, db, mir, xhp, xon,
lines#24,
bel=^G, clear=\EH\EJ, cr=\r, cub1=^H, cud1=\EB, cuf1=\EC,
cuu1=\EA, dch1=\EP, dl1=\EM, ed=\EJ, el=\EK, hpa=\E&a%p1%dC,
ht=^I, if=/usr/share/tabset/stdcrt, il1=\EL, ind=\n,
is2=\E&s1A\E<\E&k0\\, kbs=^H, kcub1=\ED, kcud1=\EB,
kcuf1=\EC, kcuu1=\EA, khome=\Eh, rmkx=\E&s0A, rmso=\E&d@,
sgr0=\E&d@, smkx=\E&s1A, smso=\E&dB,
# hpex:
# May be used for most 24 x 80 hp terminals,
# but has no padding added, so may allow runover in some terminals at high
# baud rates. Will not work for hp2640a or hp2640b terminals, hp98x6 and
# hp98x5 terminal emulators or hp98x6 consoles.
# Adds xy-cursor addressing, vertical cursor addressing, home,
# last line, and underline capabilities.
#
# (hpex: removed memory-lock capabilities ":ml=\El:mu=\Em:",
# moved <rmir> here from hpsub -- esr)
hpex|hp extended capabilities,
cr=\r, cud1=\n, cup=\E&a%p1%dy%p2%dC, ht=^I, ind=\n, kbs=^H,
kcub1=^H, kcud1=\n, nel=\r\n, rmir=\ER, rmul=\E&d@, smir=\EQ,
smul=\E&dD, vpa=\E&a%p1%dY, use=hpsub,
# From: Ville Sulko <Ville.Sulko@bip.atk.tpo.fi>, 05 Aug 1996
hp2|hpex2|hewlett-packard extended capabilities newer version,
am, da, db, mir, xhp,
cols#80, lh#2, lines#24, lm#0, lw#8, nlab#8, xmc#0,
bel=^G, clear=\E&a0y0C\EJ, cr=\r, cub1=^H, cud1=\EB,
cuf1=\EC, cup=\E&a%p1%dy%p2%dC, cuu1=\EA, dch1=\EP,
dl1=\EM, ed=\EJ, el=\EK, hpa=\E&a%p1%dC, ht=^I, hts=\E1,
il1=\EL, ind=\n, kbs=^H, kclr=\EJ, kctab=\E2, kcub1=\ED,
kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM,
ked=\EJ, kel=\EK, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et,
kf6=\Eu, kf7=\Ev, kf8=\Ew, khome=\Eh, khts=\E1, kich1=\EQ,
kil1=\EL, kind=\ES, kll=\EF, knp=\EU, kpp=\EV, kri=\ET,
krmir=\ER, ktbc=\E3, meml=\El, memu=\Em,
pfkey=\E&f%p1%dk%p2%l%dL%p2%s,
pfloc=\E&f1a%p1%dk%p2%l%dL%p2%s,
pfx=\E&f2a%p1%dk%p2%l%dL%p2%s,
pln=\E&f%p1%dk%p2%l%dd0L%p2%s, rmir=\ER, rmkx=\E&s0A,
rmln=\E&j@, rmso=\E&d@, rmul=\E&d@,
sgr=\E&d%?%p7%t%{115}%c%;%p1%p3%|%p6%|%{2}%*%p2%{4}%*%+%p4%+
%p5%{8}%*%+%{64}%+%c%?%p9%t%'\016'%c%e%'\017'%c%;,
sgr0=\E&d@\017, smir=\EQ, smkx=\E&s1A, smln=\E&jB,
smso=\E&dB, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY,
# HP 236 console
# From: <ddavis@ic.berkeley.edu>
hp236|hp236 internal terminal emulator,
OTbs, am,
cols#80, lines#24,
clear=\EF, cnorm=\EDE, cub1=^H,
cup=\EE%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, cvvis=\EDB,
dch1=\EJ, dl1=\EH, el=\EK, ich1=\EI, il1=\EG, rmso=\ECI,
sgr0=\ECI, smso=\EBI,
# This works on a hp300 console running Utah 4.3 BSD
# From: Craig Leres <leres@okeeffe.berkeley.edu>
hp300h|HP Catseye console,
OTbs, am, da, db, mir, xhp,
cols#128, lines#51, lm#0, xmc#0,
bel=^G, cbt=\Ei, clear=\E&a0y0C\EJ, cr=\r, cub1=^H, cud1=\EB,
cuf1=\EC, cup=\E&a%p1%dy%p2%dC, cuu1=\EA, dch1=\EP,
dl1=\EM, ed=\EJ, el=\EK, hpa=\E&a%p1%dC, ht=^I,
if=/usr/share/tabset/stdcrt, il1=\EL, ind=\n, kbs=^H,
kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\Eh,
rmir=\ER, rmkx=\E&s0A, rmso=\E&d@, rmul=\E&d@, sgr0=\E&d@,
smir=\EQ, smkx=\E&s1A, smso=\E&dB, smul=\E&dD, tbc=\E3,
vpa=\E&a%p1%dY,
# From: Greg Couch <gregc@ernie.berkeley.edu>
hp9837|hp98720|hp98721|HP 9000/300 workstations,
OTbs, am, da, db, mir, xhp,
cols#128, it#8, lines#46, lm#0,
bel=^G, cbt=\Ei, clear=\E&a0y0C\EJ, cub1=^H, cud1=\EB,
cuf1=\EC, cup=\E&a%p1%dy%p2%dC, cuu1=\EA, dch1=\EP,
dl1=\EM, ed=\EJ, el=\EK, hpa=\E&a%p1%dC, ht=^I, hts=\E1,
il1=\EL, ind=\n, is2=\E&v0m1b0i&j@, kbs=^H, kcub1=\ED,
kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM,
ked=\EJ, kel=\EK, khome=\Eh, kich1=\EQ, kil1=\EL, knp=\EU,
kpp=\EV, rmir=\ER, rmkx=\E&s0A, rmso=\E&v0S, rmul=\E&d@,
sgr0=\E&d@, smir=\EQ, smkx=\E&s1A, smso=\E&v5S, smul=\E&dD,
tbc=\E3, vpa=\E&a%p1%dY,
# HP 9845 desktop computer from BRL
# (hp9845: removed unknown capability :gu: -- esr)
hp9845|HP 9845,
OTbs, am, da, db, eo, mir, xhp,
cols#80, lines#21,
OTbc=\ED, clear=\EH\EJ, cub1=\ED, cud1=\EB, cuf1=\EC,
cup=\E&a%p2%2dc%p1%2dY, cuu1=\EA, dch1=\EP, dl1=\EM,
ed=\EJ, el=\EK, if=/usr/share/tabset/std, il1=\EL,
rmir=\ER, rmso=\E&d@, smir=\EQ, smso=\E&dB,
# From: Charles A. Finnell of MITRE <finnell@mitre.org>, developed 07SEP90
# (hp98550: replaced /usr/share/tabset/9837 with std because <it#8>,<hts=\E1>;
# added empty <acsc> to avoid warnings re <smacs>/<rmacs> --esr)
hp98550|hp98550a|HP 9000 Series 300 color console,
OTbs, am, da, db, mir, xhp,
cols#128, it#8, lines#49, lm#0,
acsc=, bel=^G, blink=\E&dA, bold=\E&dJ, cbt=\Ei, civis=\E*dR,
clear=\EH\EJ, cnorm=\E*dQ, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\E&a%p1%dy%p2%dC, cuu1=\EA, dch1=\EP, dim=\E&dH,
dl1=\EM, ed=\EJ, el=\EK, hpa=\E&a%p1%dC, ht=^I, hts=\E1,
if=/usr/share/tabset/std, il1=\EL, ind=\n, invis=\E&ds,
kbs=^H, kclr=\EJ, kctab=\E2, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, kf1=\Ep,
kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew,
khome=\Eh, khts=\E1, kich1=\EQ, kil1=\EL, kind=\ES, kll=\EF,
knp=\EU, kpp=\EV, kri=\ET, krmir=\ER, ktbc=\E3, rev=\E&dJ,
rmacs=^O, rmir=\ER, rmkx=\E&s0A, rmso=\E&d@, rmul=\E&d@,
sgr0=\E&d@, smacs=^N, smir=\EQ, smkx=\E&s1A, smso=\E&dJ,
smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY,
# From: Victor Duchovni <vic@fine.princeton.edu>
# (hp700-wy: removed obsolete ":nl=^J:";
# replaced /usr/share/tabset/hp700-wy with std because <it#8>,<hts=\E1> -- esr)
hp700-wy|HP700/41 emulating wyse30,
OTbs, am, bw, mir, msgr,
cols#80, it#8, lines#24, xmc#1,
cbt=\EI, clear=^Z, cr=\r, cub1=^H, cud1=^V, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, ed=\EY, el=\ET$<10/>, home=^^, ht=^I, hts=\E1,
if=/usr/share/tabset/stdcrt, il1=\EE$<0.7*/>,
is1=\E~"\EC\Er\E(\EG0\003\E`9\E`1, kbs=^?, kcbt=\EI,
kclr=^Z, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, ked=\EY,
kel=\ET, khome=^^, khts=\EI, kich1=\Eq, krmir=\Er, ll=^^^K,
ri=\Ej, rmir=\Er, rmso=\EG0$<10/>, rmul=\EG0$<10/>,
sgr0=\EG0$<10/>, smir=\Eq, smso=\EG4$<10/>,
smul=\EG8$<10/>, tbc=\E0, vpa=\E[%p1%{32}%+%c,
hp70092|hp70092a|hp70092A|HP 700/92,
am, da, db, xhp,
cols#80, lh#2, lines#24, lm#0, lw#8, nlab#8,
acsc=0cjgktlrmfn/q\,t5u6v8w7x., bel=^G, blink=\E&dA,
bold=\E&dB, cbt=\Ei, clear=\E&a0y0C\EJ, cr=\r, cub1=^H,
cud1=\EB, cuf1=\EC, cup=\E&a%p1%dy%p2%dC, cuu1=\EA,
dch1=\EP, dim=\E&dH, dl1=\EM, el=\EK, hpa=\E&a%p1%dC, ht=^I,
hts=\E1, il1=\EL, kbs=^H, kclr=\EJ, kctab=\E2, kcub1=\ED,
kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM,
ked=\EJ, kel=\EK, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et,
kf6=\Eu, kf7=\Ev, kf8=\Ew, khome=\Eh, khts=\E1, kich1=\EQ,
kil1=\EL, kind=\ES, kll=\EF, knp=\EU, kpp=\EV, kri=\ET,
krmir=\ER, ktbc=\E3, rev=\E&dB, ri=\ET, rmacs=^O, rmir=\ER,
rmkx=\E&s0A, rmln=\E&j@, rmso=\E&d@, rmul=\E&d@,
sgr0=\E&d@, smacs=^N, smir=\EQ, smkx=\E&s1A, smln=\E&jB,
smso=\E&dJ, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY,
bobcat|sbobcat|HP 9000 model 300 console,
am, da, db, mir, xhp,
cols#128, it#8, lines#47, xmc#0,
cbt=\Ei, clear=\EH\EJ, cr=\r, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\E&a%p1%dy%p2%dC$<6/>, cuu1=\EA, dch1=\EP,
dl1=\EM$<10*/>, ed=\EJ, el=\EK, hpa=\E&a%p1%dC$<6/>, ht=^I,
il1=\EL$<10*/>, ind=\n, kbs=^H, kcub1=\ED, kcud1=\EB,
kcuf1=\EC, kcuu1=\EA, khome=\Eh, nel=\r\n, rmir=\ER,
rmkx=\E&s0A, rmso=\E&d@, rmul=\E&d@, sgr0=\E&d@, smir=\EQ,
smkx=\E&s1A, smso=\E&dB, smul=\E&dD, vpa=\E&a%p1%dY$<6/>,
gator-t|HP 9000 model 237 emulating extra-tall AAA,
lines#94, use=gator,
gator|HP 9000 model 237 emulating AAA,
bw, km, mir, ul,
cols#128, it#8, lines#47,
bel=^G, cbt=\E[Z, clear=\E[H\E[J, cr=\r, cub1=^H, cud1=\n,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\EM,
dch=\E[%p1%dP$<4/>, dch1=\E[P, dl=\E[%p1%dM$<1*/>,
dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, hpa=\E[%i%p1%d`,
ht=^I, ich=\E[%p1%d@$<4/>, ich1=\E[@, il=\E[%p1%dL$<1*/>,
il1=\E[L, kbs=^H, kcub1=^H, kcud1=\n, nel=\r\n,
rep=%p1%c\E[%p2%db$<1*/>, rev=\E[7m, rmso=\E[m,
rmul=\E[m, sgr0=\E[m, smso=\E[7m, smul=\E[4m,
gator-52|HP 9000 model 237 emulating VT52,
- cols#128, lines#47, use=vt52,
+ cols#128, lines#47, use=vt52-basic,
gator-52t|HP 9000 model 237 emulating extra-tall VT52,
lines#94, use=gator-52,
#### Honeywell-Bull
#
# From: Michael Haardt <michael@gandalf.moria> 11 Jan 93
#
# Honeywell Bull terminal. Its cursor and function keys send single
# control characters and it has standout/underline glitch. Most programs
# do not like these features/bugs. Visual bell is realized by flashing the
# "keyboard locked" LED.
dku7003-dumb|Honeywell Bull DKU 7003 dumb mode,
cols#80, lines#25,
clear=^]^_, cr=\r, cub1=^Y, cud1=^K, cuf1=^X,
cup=\E[%i%p1%d;%p2%dH, cuu1=^Z, ed=^_, el=\E[K,
flash=\E[2h\E[2l, home=^], ht=^I, ind=\n, kbs=^H, kcub1=^Y,
kcud1=^K, kcuf1=^X, kcuu1=^Z, khome=^], nel=\r\n,
dku7003|Honeywell Bull DKU 7003 all features described,
msgr,
xmc#1,
blink=\E[5m, bold=\E[7m, dim=\E[2m, rev=\E[7m, rmso=\E[m,
rmul=\E[m, sgr0=\E[m, smso=\E[7m, smul=\E[4m,
use=dku7003-dumb,
#### Lear-Siegler (adm)
#
# These guys are long since out of the terminals business, but
# in 1995 many current terminals still have an adm type as one of their
# emulations (usually their stupidest, and usually labeled adm3, though
# these `adm3' emulations normally have adm3a+ capabilities).
#
# WARNING: Some early ADM terminals (including the ADM3 and ADM5) had a
# `diagnostic feature' that sending them a ^G while pin 22 (`Ring Indicator')
# was being held to ground would trigger a send of the top line on the screen.
# A quick fix might be to drop back to a cheesy 4-wire cable with pin 22
# hanging in the air. (Thanks to Eric Fischer, <eric@fudge.uchicago.edu>,
# for clearing up this point.)
adm1a|adm1|lsi adm1a,
am,
cols#80, lines#24,
bel=^G, clear=\E;$<1>, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, home=^^,
ind=\n,
adm2|lsi adm2,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=\E;, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, ed=\EY, el=\ET, home=^^, ich1=\EQ, il1=\EE, ind=\n,
kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, khome=^^,
# (adm3: removed obsolete ":ma=^K^P:" -- esr)
adm3|lsi adm3,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=^Z, cr=\r, cub1=^H, cud1=\n, ind=\n,
# The following ADM-3A switch settings are assumed for normal operation:
# SPACE U/L_DISP CLR_SCRN 24_LINE
# CUR_CTL LC_EN AUTO_NL FDX
# Other switches may be set for operator convenience or communication
# requirements. I recommend
# DISABLE_KB_LOCK LOCAL_OFF 103 202_OFF
# ETX_OFF EOT_OFF
# Most of these terminals required an option ROM to support lower case display.
# Open the case and look at the motherboard; if you see an open 24-pin DIP
# socket, you may be out of luck.
#
# (adm3a: some capabilities merged in from BRl entry -- esr)
adm3a|lsi adm3a,
OTbs, am,
cols#80, lines#24,
OTma=^K^P, OTnl=\n, bel=^G, clear=\032$<1/>, cr=\r, cub1=^H,
cud1=\n, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c,
cuu1=^K, home=^^, ind=\n, kcub1=^H, kcud1=\n, kcuf1=^L,
kcuu1=^K, rs2=^N,
adm3a+|adm3a plus,
kbs=^H, use=adm3a,
# (adm5: removed obsolete ":ma=^Hh^Jj^Kk^Ll^^H:" & duplicate ":do=^J:" -- esr)
adm5|lsi adm5,
xmc#1,
bel=^G, cr=\r, cud1=\n, ed=\EY, el=\ET, kbs=^H, khome=^^,
rmso=\EG, smso=\EG, use=adm3a+,
# A lot of terminals other than adm11s use these. Wherever you see
# use=adm+sgr with some of its capabilities disabled, try the
# disabled ones. They may well work but not have been documented or
# expressed in the using entry. We'd like to cook up an <sgr> but the
# <rmacs>/<smacs> sequences of the using entries vary too much.
adm+sgr|adm style highlight capabilities,
invis=\EG1, rev=\EG4, rmso=\EG0, rmul=\EG0, sgr0=\EG0,
smso=\EG4, smul=\EG8,
# LSI ADM-11 from George William Hartwig, Jr. <geo@BRL-TGR.ARPA> via BRL
# Status line additions from Stephen J. Muir <stephen%comp.lancs.ac.uk@ucl-cs>
# <khome> from <stephen%comp.lancs.ac.uk@ucl-cs.arpa>. <clear> could also
# be ^Z, according to his entry.
# (adm11: <smul>=\EG4 was obviously erroneous because it also said
# <rev>=\EG4. Looking at other ADMs confirms this -- esr)
adm11|LSI ADM-11,
OTbs, am, hs,
OTkn#8, cols#80, lines#24,
OTnl=\n, bel=^G, blink=\EG2, clear=\E*, cr=\r, cub1=^H,
cud1=\n, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c,
cuu1=^K, dsl=\Eh, ed=\EY, el=\ET, fsl=\E(\r, home=^^, ht=^I,
kbs=^H, kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, kf1=^A@\r,
kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r,
kf7=^AF\r, kf8=^AG\r, khome=^^, nel=\r\n, tsl=\EF\E),
use=adm+sgr,
# From: Andrew Scott Beals <bandy@lll-crg.ARPA>
# Corrected by Olaf Siebert <rhialto@polder.ubc.kun.nl>, 11 May 1995
# Supervisor mode info by Ari Wuolle, <awuolle@delta.hut.fi>, 27 Aug 1996
# (adm12: removed obsolete ":kn:ma=j^Jk^P^K^Pl ^R^L^L :". This formerly had
# <is2>=\Eq but that looked wrong; this <is2> is from Dave Yost <esquire!yost>
# via BRL. That entry asserted <xmc#1>, but I've left that out because
# neither earlier nor later ADMSs have it -- esr)
#
# You will need to get into the supervisor setup before you can set
# baudrate etc. for your ADM-12+. Press Shift-Ctrl-Setup and you should
# see a lot more setup options.
#
# While in supervisor setup you can also use following codes:
#
# Ctrl-P Personality character selections (configure for example what
# arrow keys send, if I recall correctly)
# Ctrl-T tabs 1-80 use left&right to move and up to set and
# Ctrl-V tabs 81-158 down to clear tab. Shift-Ctrl-M sets right margin at cursor
# Ctrl-B Binary setup (probably not needed. I think that everything can
# be set using normal setup)
# Ctrl-A Answerback mode (enter answerback message)
# Ctrl-U User friendly mode (normal setup)
# Ctrl-D Defaults entire setup and function keys from EPROM tables
# Ctrl-S Save both setup and functions keys. Takes from 6 to 10 seconds.
# Ctrl-R Reads both setup and functions keys from NVM.
# Shift-Ctrl-X Unlock keyboard and cancel received X-OFF status
#
# ADM-12+ supports hardware handshaking, but it is DTR/CTS as opposed to
# RTS/CTS used nowadays with virtually every modem and computer. 19200
# bps works fine with hardware flow control.
#
# The following null-modem cable should fix this and enable you to use
# RTS/CTS handshaking (which Linux supports, use CRTSCTS setting). Also
# set ADM-12+ for DTR handshaking from supervisor setup.
#
# PC Serial ADM-12+
# -------- -------
# 2 - 3
# 3 - 2
# 4 - 5
# 5 - 20
# 6,8 - 4
# 7 - 7
# 20 - 6,8
#
adm12|lsi adm12,
OTbs, OTpt, am, mir,
OTug#1, cols#80, it#8, lines#24,
bel=^G, clear=^Z, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, ed=\EY, el=\ET, home=^^, hts=\E1, ich1=\EQ, il1=\EE,
is2=\E0\s\s\s\s\s\s\s\s\E1\s\s\s\s\s\s\s\s\E1\s\s\s\s\s\s\s
\s\E1\s\s\s\s\s\s\s\s\E1\s\s\s\s\s\s\s\s\E1\s\s\s\s\s\s
\s\s\E1\s\s\s\s\s\s\s\s\E1\s\s\s\s\s\s\s\s\E1,
kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, kf0=^A0\r, kf1=^A1\r,
kf2=^A2\r, kf3=^A3\r, kf4=^A4\r, kf5=^A5\r, kf6=^A6\r,
kf7=^A7\r, kf8=^A8\r, kf9=^A9\r, rmir=\Er, smir=\Eq, tbc=\E0,
use=adm+sgr,
# (adm20: removed obsolete ":kn#7:" -- esr)
adm20|lear siegler adm20,
OTbs, am,
cols#80, it#8, lines#24,
bel=^G, cbt=\EI, clear=^Z, cr=\r, cub1=^H, cuf1=^L,
cup=\E=%i%p2%{31}%+%c%p1%{31}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, ed=\EY, el=\ET, home=^^, ht=^I, ich1=\EQ, il1=\EE,
kf1=^A, kf2=^B, kf3=^W, kf4=^D, kf5=^E, kf6=^X, kf7=^Z, rmso=\E(,
sgr0=\E(, smso=\E),
adm21|lear siegler adm21,
xmc#1,
bel=^G, cr=\r, cud1=\n, dch1=\EW, dl1=\ER$<30*>, ed=\EY,
el=\ET, ich1=\EQ, il1=\EE$<30*>, ind=\n, invis@, kbs=^H,
kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, khome=^^,
use=adm+sgr, use=adm3a,
# (adm22: ":em=:" was an obvious typo for ":ei=:"; also,
# removed obsolete ":kn#7:ma=j^Jk^P^K^Pl ^R^L^L :";
# removed bogus-looking \200 from before <cup>. -- esr)
adm22|lsi adm22,
OTbs, am,
cols#80, lines#24,
bel=^G, cbt=\EI, clear=\E+, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, ed=\Ey, el=\Et, home=^^, ht=\Ei, ich1=\EQ, il1=\EE,
is2=\E%\014\014\014\016\003\0\003\002\003\002\0\0\0\0\0\0\0
\0\0\0\0,
kbs=^H, kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, kf1=^A@\r,
kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r,
kf7=^AF\r, khome=^^, lf1=F1, lf2=F2, lf3=F3, lf4=F4, lf5=F5,
lf6=F6, lf7=F7, rmso=\E(, sgr0=\E(, smso=\E),
# ADM 31 DIP Switches
#
# This information comes from two versions of the manual for the
# Lear-Siegler ADM 31.
#
# Main board:
# rear of case
# +-||||-------------------------------------+
# + S1S2 ||S +
# + ||3 +
# + +
# + ||S +
# + ||4 +
# + +
# + +
# + +
# + +
# + +
# +-+ +-+
# + +
# + S5 S6 S7 +
# + == == == +
# +----------------------------------------------+
# front of case (keyboard)
#
# S1 - Data Rate - Modem
# S2 - Data Rate - Printer
# ------------------------
# Data Rate Setting
# -------------------
# 50 0 0 0 0
# 75 1 0 0 0
# 110 0 1 0 0
# 134.5 1 1 0 0
# 150 0 0 1 0
# 300 1 0 1 0
# 600 0 1 1 0
# 1200 1 1 1 0
# 1800 0 0 0 1
# 2000 1 0 0 1
# 2400 0 1 0 1
# 3600 1 1 0 1
# 4800 0 0 1 1
# 7200 1 0 1 1
# 9600 0 1 1 1
# x 1 1 1 1
#
# S3 - Interface/Printer/Attributes
# ---------------------------------
# Printer Busy Control
# sw1 sw2 sw3
# ---------------
# off off off Busy not active, CD disabled
# off off on Busy not active, CD enabled
# off on off Busy active on J5-20, CD disabled
# on off off Busy active on J5-19, CD disabled - Factory Set.
# on off on Busy active on J5-19, CD enabled
#
# sw4 Used in conjunction with S4 for comm interface control - Fact 0
#
# sw5 Secondary Channel Control (Hardware implementation only) - Fact 0
#
# sw6 ON enables printer BUSY active LOW - Factory Setting
# OFF enables printer BUSY active HIGH - If set to this, ADM31 senses
#
# sw7 ON - steady cursor - Factory Setting
# OFF - blinking cursor
#
# sw8 ON causes selected attribute character to be displayed
# OFF causes SPACE to be displayed instead - Factory Setting
#
# S4 - Interface
# --------------
# Modem Interface
# S3 S4 S4 S4 S4
# sw4 sw1 sw2 sw3 sw4
# ---------------------------
# OFF ON OFF ON OFF Enable RS-232C interface, Direct Connect and
# Current Loop disabled - Factory Setting
# ON ON OFF ON OFF Enable Current Loop interface, Direct Connect
# disabled
# OFF OFF ON OFF ON Enable Direct Connect interface, RS-232C and
# Current Loop Disabled
#
# sw5 ON disables dot stretching mode - Factory Setting
# OFF enables dot stretching mode
# sw6 ON enables blanking function
# OFF enables underline function - Factory Setting
# sw7 ON causes NULLS to be displayed as NULLS
# OFF causes NULLS to be displayed as SPACES - Factory Setting
#
# S5 - Word Structure
# -------------------
# sw1 ON enables BREAK key - Factory Setting
# OFF disables BREAK key
# sw2 ON selects 50Hz monitor refresh rate
# OFF selects 60Hz monitor refresh rate - Factory Setting
#
# Modem Port Selection
# sw3 sw4 sw5
# ---------------
# ON ON ON Selects 7 DATA bits, even parity, 2 STOP bits
# OFF ON ON Selects 7 DATA bits, odd parity, 2 STOP bits
# ON OFF ON Selects 7 DATA bits, even parity, 1 STOP bit - Factory Set.
# OFF OFF ON Selects 7 DATA bits, odd parity, 1 STOP bit
# ON ON OFF Selects 8 DATA bits, no parity, 2 STOP bits
# OFF ON OFF Selects 8 DATA bits, no parity, 1 STOP bit
# ON OFF OFF Selects 8 DATA bits, even parity, 1 STOP bit
# OFF OFF OFF Selects 8 DATA bits, odd parity, 1 STOP bit
#
# sw6 ON sends bit 8 a 1 (mark)
# OFF sends bit 8 as 0 (space) - Factory Setting
# sw7 ON selects Block Mode
# OFF selects Conversation Mode - Factory Setting
# sw8 ON selects Full Duplex operation
# OFF selects Half Duplex operation - Factory Setting
#
# S6 - Printer
# ------------
# sw1, sw2, sw6, sw7 Reserved - Factory 0
#
# Printer Port Selection
# same as Modem above, bit 8 (when 8 DATA bits) is always = 0
#
# sw8 ON enables Printer Port
# OFF disables Printer Port - Factory Setting
#
# S7 - Polling Address
# --------------------
# sw1-7 Establish ASCII character which designates terminal polling address
# ON = logic 0
# OFF = logic 1 - Factory Setting
# sw8 ON enables Polling Option
# OFF disables Polling Option - Factory Setting
#
#
# On some older adm31s, S4 does not exist, and S5-sw6 is not defined.
#
# This adm31 entry uses underline as the standout mode.
# If the adm31 gives you trouble with standout mode, check the DIP switch in
# position 6, bank @c11, 25% from back end of the circuit board. Should be
# OFF. If there is no such switch, you have an old adm31 and must use oadm31.
# (adm31: removed obsolete ":ma=j^Jk^P^K^Pl ^R^L^L :" -- esr)
adm31|lsi adm31 with sw6 set for underline mode,
OTbs, am, mir,
cols#80, lines#24,
bel=^G, clear=\E*, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, ed=\EY, el=\ET, home=^^, il1=\EE, ind=\n, is2=\Eu\E0,
kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, kf0=^A0\r, kf1=^A1\r,
kf2=^A2\r, kf3=^A3\r, kf4=^A4\r, kf5=^A5\r, kf6=^A6\r,
kf7=^A7\r, kf8=^A8\r, kf9=^A9\r, rmir=\Er, rmso=\EG0,
rmul=\EG0, sgr0=\EG0, smir=\Eq, smso=\EG1, smul=\EG1,
adm31-old|o31|old adm31,
rmul@, smso=\EG4, smul@, use=adm31,
# LSI ADM-36 from Col. George L. Sicherman <gloria!colonel> via BRL
adm36|LSI ADM36,
OTbs, OTpt,
OTkn#4,
if=/usr/share/tabset/vt100,
is2=\E<\E>\E[6;?2;?7;?8h\E[4;20;?1;?3;?4;?5;?6;?18;?19l, use=vt100+4bsd,
# (adm42: removed obsolete ":ma=^K^P:" -- esr)
adm42|lsi adm42,
OTbs, am,
cols#80, lines#24,
bel=^G, cbt=\EI, clear=\E;, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
cvvis=\EC\E3 \E3(, dch1=\EW, dl1=\ER, ed=\EY, el=\ET, ht=^I,
il1=\EE$<270>, ind=\n, invis@, ip=$<6*>, kcub1=^H, kcud1=\n,
kcuf1=^L, kcuu1=^K, khome=^^, pad=^?, rmir=\Er, rmul@,
smir=\Eq, smul@, use=adm+sgr,
# The following termcap for the Lear Siegler ADM-42 leaves the
# "system line" at the bottom of the screen blank (for those who
# find it distracting otherwise)
adm42-ns|lsi adm-42 with no system line,
cbt=\EI\EF \011, clear=\E;\EF \011,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<6>\EF \011,
dch1=\EW\EF \011, dl1=\ER\EF \011, ed=\EY\EF \011,
el=\ET\EF \011, il1=\EE\EF \011, rmir=\Er\EF \011,
smir=\Eq\EF \011, use=adm42,
# ADM 1178 terminal -- rather like an ADM-42. Manual is dated March 1 1985.
# The insert mode of this terminal is commented out because it's broken for our
# purposes in that it will shift the position of every character on the page,
# not just the cursor line!
# From: Michael Driscoll <fenris@lightspeed.net> 10 July 1996
adm1178|1178|lsi adm1178,
am,
cols#80, lines#24, xmc#1,
bel=^G, bold=\E(, cbt=\EI, clear=\E+, cr=\r, cub1=^H, cud1=\n,
cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
cvvis=\EC\E3 \E3(, dch1=\EW, dl1=\ER, ed=\EY, el=\ET,
home=^^, ht=^I, il1=\EE, ind=\n, ip=$<6*/>, kbs=^H, kcub1=^H,
kcud1=\n, nel=\r\n, pad=^?, rev=\EG4, rmso=\EG0, rmul=\EG0,
sgr0=\E), smso=\EG4, smul=\EG1,
#### Prime
#
# Yes, Prime made terminals. These entries were posted by Kevin J. Cummings
# <cummings@primerd.prime.com> on 14 Dec 1992 and lightly edited by esr.
# Prime merged with ComputerVision in the late 1980s; you can reach them at:
#
# ComputerVision Services
# 500 Old Connecticut Path
# Framingham, Mass.
#
# Standout mode is dim reverse-video.
pt100|pt200|wren|fenix|prime pt100/pt200,
am, bw, mir, msgr,
cols#80, it#8, lines#24,
cbt=\E[Z, clear=\E?, cr=\r, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\ED, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E0%p1%{33}%+%c%p2%{33}%+%c, cuu=\E[%p1%dA,
cuu1=\EM, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl1=\E[M,
ed=\E[J\E[r, el=\E[K\E[t, flash=\E$$<200/>\E$P,
home=\E$B, ht=^I, il1=\E[L\E[t, ind=\n, kbs=^H, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E$A, nel=\r\n,
rmcup=, rmir=\E[4l, rmkx=\E[>13l, rmso=\E[m, rmul=\E[m,
sgr0=\E[m,
smcup=\E[>1l\E[>2l\E[>16l\E[4l\E[>9l\E[20l\E[>3l\E[>7h\E[>12
l\E[1Q,
smir=\E[4h, smkx=\E[>13h, smso=\E[2;7m, smul=\E[4m,
pt100w|pt200w|wrenw|fenixw|prime pt100/pt200 in 132-column mode,
cols#132,
cup=\E[%i%p1%d;%p2%dH, use=pt100,
pt250|Prime PT250,
rmso@, smso@, use=pt100,
pt250w|Prime PT250 in 132-column mode,
rmso@, smso@, use=pt100w,
#### Qume (qvt)
#
# Qume, Inc.
# 3475-A North 1st Street
# San Jose CA 95134
# Vox: (800)-457-4447
# Fax: (408)-473-1510
# Net: josed@techsupp.wyse.com (Jose D'Oliveira)
#
# Qume was bought by Wyse, but still (as of early 1995) has its own support
# group and production division.
#
# Discontinued Qume models:
#
# The qvt101 and qvt102 listed here are long obsolete; so is the qvt101+
# built to replace them, and a qvt119+ which was a 101+ with available wide
# mode (132 columns). There was a qvt103 which added vt100/vt131 emulations
# and an ANSI-compatible qvt203 that replaced it. Qume started producing
# ANSI-compatible terminals with the qvt323 and qvt61.
#
# Current Qume models (as of February 1995):
#
# All current Qume terminals have ANSI-compatible operation modes.
# Qume is still producing the qvt62, which features emulations for other
# popular lines such as ADDS, and dual-host capabilities. The qvt82 is
# designed for use as a SCO ANSI terminal. The qvt70 is a color terminal
# with many emulations including Wyse370, Wyse 325, etc. Their newest
# model is the qvt520, which is vt420-compatible.
#
# There are some ancient printing Qume terminals under `Daisy Wheel Printers'
#
# If you inherit a Qume without docs, try Ctrl-Shift-Setup to enter its
# setup mode. Shift-s should be a configuration save to NVRAM.
qvt101|qvt108|qume qvt 101 and QVT 108,
xmc#1, use=qvt101+,
# This used to have <cvvis=\E.2> but no <cnorm> or <civis>. The BSD termcap
# file had <cvvis=\EM4 \200\200\200>. I've done the safe thing and yanked
# both. The <rev> is from BSD, which also claimed bold=\E( and dim=\E).
# What seems to be going on here is that this entry was designed so that
# the normal highlight is bold and standout is dim plus something else
# (reverse-video maybe? But then, are there two <rev> sequences?)
#
# Added kdch1, kil1, kdl1 based on screenshot -TD:
# http://www.vintagecomputer.net/qume/qvt-108/qume_qvt-108_keyboard.jpg
qvt101+|qvt101p|qume qvt 101 PLUS product,
am, bw, hs, ul,
cols#80, lines#24, xmc#0,
bel=^G, cbt=\EI, clear=^Z, cnorm=\E.4, cr=\r, cub1=^H, cud1=\n,
cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
dch1=\EW, dl1=\ER, dsl=\Eg\Ef\r, ed=\EY, el=\ET,
flash=\Eb$<200>\Ed, fsl=\r, home=^^, ht=^I, hts=\E1,
ich1=\EQ, il1=\EE, ind=\n, invis@, kbs=^H, kcbt=\EI, kcub1=^H,
kcud1=\n, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY,
kel=\ET, kf1=^A@\r, kf10=^AI\r, kf2=^AA\r, kf3=^AB\r,
kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r,
kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, mc4=\EA, mc5=\E@,
rmso=\E(, smso=\E0P\E), tbc=\E3, tsl=\Eg\Ef, use=adm+sgr,
qvt102|qume qvt 102,
cnorm=\E., use=qvt101,
# (qvt103: added <rmam>/<smam> based on init string -- esr)
qvt103|qume qvt 103,
am, xenl, xon,
cols#80, it#8, lines#24, vt#3,
bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>,
clear=\E[H\E[2J$<50>, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C$<2>,
cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA,
cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>, home=\E[H, ht=^I,
hts=\EH, ind=\n, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,
kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, rc=\E8,
rev=\E[7m$<2>, ri=\EM$<5>, rmam=\E[?7l, rmkx=\E[?1l\E>,
rmso=\E[m$<2>, rmul=\E[m$<2>,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1
%;m$<2>,
sgr0=\E[m$<2>, smam=\E[?7h, smkx=\E[?1h\E=,
smso=\E[7m$<2>, smul=\E[4m$<2>, tbc=\E[3g,
qvt103-w|qume qvt103 132 cols,
cols#132, lines#24,
rs2=\E>\E[?3h\E[?4l\E[?5l\E[?8h, use=qvt103,
qvt119+|qvt119p|qvt119|qume qvt 119 and 119PLUS terminals,
am, hs, mir, msgr,
cols#80, lines#24, xmc#0,
bel=^G, cbt=\EI, clear=\E*1, cnorm=\E.4, cr=\r, cub1=^H,
cud1=\n, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c,
cuu1=^K, cvvis=\E.2, dch1=\EW, dl1=\ER, dsl=\Eg\Ef\r, ed=\Ey,
el=\Et, flash=\En0$<200>\En1, fsl=\r, home=^^, ht=^I,
hts=\E1, il1=\EE, ind=\n, is2=\EDF\EC\EG0\Er\E(\E%EX,
kbs=^H, kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, kf0=^AI\r,
kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r,
kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^,
mc4=\EA, mc5=\E@, ri=\EJ, rmir=\Er, smir=\Eq, smul=\EG8,
tbc=\E3, tsl=\Eg\Ef, use=adm+sgr,
qvt119+-25|qvt119p-25|QVT 119 PLUS with 25 data lines,
lines#25, use=qvt119+,
qvt119+-w|qvt119p-w|qvt119-w|QVT 119 and 119 PLUS in 132 column mode,
cols#132,
is2=\EDF\EC\EG0\Er\E(\E%\EX\En4, use=qvt119+,
qvt119+-25-w|qvt119p-25-w|qvt119-25-w|QVT 119 and 119 PLUS 132 by 25,
lines#25, use=qvt119+,
qvt203|qvt203+|qume qvt 203 Plus,
dch1=\E[P$<7>, dl1=\E[M$<99>, il1=\E[L$<99>, ind=\n$<30>,
ip=$<7>, kf0=\E[29~, kf1=\E[17~, kf2=\E[18~, kf3=\E[19~,
kf4=\E[20~, kf5=\E[21~, kf6=\E[23~, kf7=\E[24~, kf8=\E[25~,
kf9=\E[28~, rmir=\E[4l, smir=\E[4h, use=qvt103,
qvt203-w|qvt203-w-am|qume qvt 203 PLUS in 132 cols (w/advanced video),
cols#132, lines#24,
rs2=\E>\E[?3h\E[?4l\E[?5l\E[?8h, use=qvt203,
#
# Since a command is present for enabling 25 data lines,
# a specific terminfo entry may be generated for the 203.
# If one is desired for the QVT 119 PLUS then 25 lines must
# be selected in the status line (setup line 9).
#
qvt203-25|QVT 203 PLUS with 25 by 80 column mode,
cols#80, lines#25,
is2=\E[=40h\E[?3l, use=qvt203,
qvt203-25-w|QVT 203 PLUS with 25 by 132 columns,
cols#132, lines#25,
rs2=\E[?3h\E[=40h, use=qvt203,
#### Televideo (tvi)
#
# TeleVideo
# 550 East Brokaw Road
# PO Box 49048 95161
# San Jose CA 95112
# Vox: (408)-954-8333
# Fax: (408)-954-0623
#
#
# These require incredible amounts of padding.
#
# All of these terminals (912 to 970 and the tvipt) are discontinued. Newer
# Televideo terminals are ANSI and PC-ANSI compatible.
tvi803|televideo 803,
clear=\E*$<10>, use=tvi950,
# Vanilla tvi910 -- W. Gish <cswarren@violet> 10/29/86
# Switch settings are:
#
# S1 1 2 3 4
# D D D D 9600
# D D D U 50
# D D U D 75
# D D U U 110
# D U D D 135
# D U D U 150
# D U U D 300
# D U U U 600
# U D D D 1200
# U D D U 1800
# U D U D 2400
# U D U U 3600
# U U D D 4800
# U U D U 7200
# U U U D 9600
# U U U U 19200
#
# S1 5 6 7 8
# U D X D 7N1 (data bits, parity, stop bits) (X means ignored)
# U D X U 7N2
# U U D D 7O1
# U U D U 7O2
# U U U D 7E1
# U U U U 7E2
# D D X D 8N1
# D D X U 8N2
# D U D D 8O1
# D U U U 8E2
#
# S1 9 Autowrap
# U on
# D off
#
# S1 10 CR/LF
# U do CR/LF when CR received
# D do CR when CR received
#
# S2 1 Mode
# U block
# D conversational
#
# S2 2 Duplex
# U half
# D full
#
# S2 3 Hertz
# U 50
# D 60
#
# S2 4 Edit mode
# U local
# D duplex
#
# S2 5 Cursor type
# U underline
# D block
#
# S2 6 Cursor down key
# U send ^J
# D send ^V
#
# S2 7 Screen colour
# U green on black
# D black on green
#
# S2 8 DSR status (pin 6)
# U disconnected
# D connected
#
# S2 9 DCD status (pin 8)
# U disconnected
# D duplex
#
# S2 10 DTR status (pin 20)
# U disconnected
# D duplex
# (tvi910: removed obsolete ":ma=^Kk^Ll^R^L:"; added <khome>, <cub1>, <cud1>,
# <ind>, <hpa>, <vpa>, <am>, <msgr> from SCO entry -- esr)
tvi910|televideo model 910,
OTbs, am, msgr,
cols#80, it#8, lines#24, xmc#1,
bel=^G, cbt=\EI, clear=^Z, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, ed=\EY, el=\ET,
home=\E=^A^A, hpa=\E]%p1%{32}%+%c, ht=^I,
if=/usr/share/tabset/stdcrt, ind=\n, invis@, kbs=^H,
kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, kf0=^AI\r, kf1=^A@\r,
kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r,
kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^,
vpa=\E[%p1%{32}%+%c, use=adm+sgr,
# From: Alan R. Rogers <rogers%albany@csnet-relay>
# as subsequently hacked over by someone at SCO
# (tvi910+: removed obsolete ":ma=^K^P^L :" -- esr)
#
# Here are the 910+'s DIP switches (U = up, D = down, X = don't care):
#
# S1 1 2 3 4:
# D D D D 9600 D D D U 50 D D U D 75 D D U U 110
# D U D D 135 D U D U 150 D U U D 300 D U U U 600
# U D D D 1200 U D D U 1800 U D U D 2400 U D U U 3600
# U U D D 4800 U U D U 7200 U U U D 9600 U U U U 19200
#
# S1 5 6 7 8:
# U D X D 7N1 U D X U 7N2 U U D D 7O1 U U D U 7O2
# U U U D 7E1 U U U U 7E2 D D X D 8N1 D D X U 8N2
# D U D D 8O1 D U U U 8E2
#
# S1 9 Autowrap (U = on, D = off)
# S1 10 CR/LF (U = CR/LF on CR received, D = CR on CR received)
# S2 1 Mode (U = block, D = conversational)
# S2 2 Duplex (U = half, D = full)
# S2 3 Hertz (U = 50, D = 60)
# S2 4 Edit mode (U = local, D = duplex)
# S2 5 Cursor type (U = underline, D = block)
# S2 6 Cursor down key (U = send ^J, D = send ^V)
# S2 7 Screen colour (U = green on black, D = black on green)
# S2 8 DSR status (pin 6) (U = disconnected, D = connected)
# S2 9 DCD status (pin 8) (U = disconnected, D = connected)
# S2 10 DTR status (pin 20) (U = disconnected, D = connected)
#
tvi910+|televideo 910+,
dch1=\EW, dl1=\ER$<33*>, home=^^, ich1=\EQ, il1=\EE$<33*>,
kf0=^A@\r, kf1=^AA\r, kf2=^AB\r, kf3=^AC\r, kf4=^AD\r,
kf5=^AE\r, kf6=^AF\r, kf7=^AG\r, kf8=^AH\r, kf9=^AI\r,
ll=\E=7\s, use=tvi910,
# (tvi912: removed obsolete ":ma=^K^P^L :", added <flash> and
# <khome> from BRL entry -- esr)
tvi912|tvi914|tvi920|old televideo 912/914/920,
OTbs, OTpt, am, msgr,
cols#80, it#8, lines#24, xmc#1,
bel=^G, clear=^Z, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER$<33*>, ed=\Ey, el=\ET, flash=\Eb$<50/>\Ed, home=^^,
ht=^I, hts=\E1, ich1=\EQ, if=/usr/share/tabset/stdcrt,
il1=\EE$<33*>, ind=\n, kbs=^H, kcub1=^H, kcud1=\n, kcuf1=^L,
kcuu1=^K, kf0=^AI\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r,
kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r,
kf9=^AH\r, khome=^^, rmso=\Ek, rmul=\Em, smso=\Ej, smul=\El,
tbc=\E3,
# We got some new tvi912c terminals that act really weird on the regular
# termcap, so one of our gurus worked this up. Seems that cursor
# addressing is broken.
tvi912cc|tvi912 at cowell college,
cup@, use=tvi912c,
# tvi{912,920}[bc] - TeleVideo TVI-912B/TVI-920B and TVI-912C/TVI-920C
# From: Benjamin C. W. Sittler
#
# Someone has put a scanned copy of the manual online at:
# http://vt100.net/televideo/912b-om/
+# (https://vt100.net/manx/details/6,5484)
#
# These terminals were produced ca. 1979, and had a 12" monochrome
# screen, supported 75-9600 baud (no handshaking), monochrome, 7-bit
# ASCII, and were generally similar to adm3a but with attributes
# (including some with magic cookies), fancy half-duplex mode, and
# different bugs.
#
# Some operations require truly incredible amounts of padding. The
# insert_line (<il1>) and delete_line (<dl1>) operations in particular
# are so slow as to be nearly unusable.
#
# There may or may not have been a separate, earlier series of 912/920
# terminals (without the "B" and "C" suffix); I have never seen one,
# and the manual only describes the "B" and "C" series. The 912 and 920
# are quite distinct from the 914 and 924, which were much nicer non-
# magic-cookie terminals similar to the 950.
#
# This is a new description for the following TeleVideo terminals,
# distinguished chiefly by their keyboards:
#
# TVI-912B - very odd layout, no function keys (84 keys)
# TVI-920B - typewriter layout, no function keys (103 keys)
# TVI-912C - very odd layout, function keys F1-F11 (82 keys)
# TVI-920C - typewriter layout, function keys F1-F11 (101 keys)
#
# To choose a setting for the TERM variable, start with the model:
#
# Model || base name
# ----------||-----------
# TVI-912B || tvi912b
# TVI-912C || tvi912c
# TVI-920B || tvi920b
# TVI-920C || tvi920c
#
# Then add a suffix from the following table describing installed options
# and how you'd like to use the terminal:
#
# Use Video | Second | Visual | Magic | Page || feature
# Attributes | Page | Bell | Cookies | Print || suffix
# ------------|--------|--------|---------|-------||---------
# No | No | N/A | N/A | No || -unk
# No | No | N/A | N/A | Yes || -p
# No | Yes | No | N/A | No || -2p-unk
# No | Yes | No | N/A | Yes || -2p-p
# No | Yes | Yes | N/A | No || -vb-unk
# No | Yes | Yes | N/A | Yes || -vb-p
# Yes | No | N/A | No | N/A ||
# Yes | No | N/A | Yes | N/A || -mc
# Yes | Yes | No | No | N/A || -2p
# Yes | Yes | No | Yes | N/A || -2p-mc
# Yes | Yes | Yes | No | N/A || -vb
# Yes | Yes | Yes | Yes | N/A || -vb-mc
#
# So e.g. a model 920 C with second page memory option, visual bell
# and no magic cookies would be tvi920c-vb; a model 912 B without the
# second page memory option and using magic cookies would be
# tvi912b-mc
#
# PADDING
#
# At 9600 baud, the terminal is prone to overflow its input buffer
# during complex operations (insert/delete
# character/line/screen/page), and it does not signal this over the
# RS232 cable. The typical symptom of an overrun is that the terminal
# starts beeping, and output becomes garbled.
#
# The padding delays in this terminfo were derived using tack(1)
# running on a Linux box connected to a TVI-920C with a later-model
# (A49C1-style) ROM running at 9600 baud, so your mileage may
# vary. The numbers below seem to give the terminal enough time so
# that it doesn't overflow its input buffer and start losing
# characters.
#
# KEYS
#
# If you want to use the FUNCT key on a tvi912[bc], use the
# corresponding tvi920[bc] terminfo with FUNCT + ... equivalents from
# the following table (these also work on the 920 series):
#
# Unshifted Function Keys:
#
# Key | capname|| Equivalent
# -----|--------||------------
# F1 | <kf1> || FUNCT + @
# F2 | <kf2> || FUNCT + A
# F3 | <kf3> || FUNCT + B
# F4 | <kf4> || FUNCT + C
# F5 | <kf5> || FUNCT + D
# F6 | <kf6> || FUNCT + E
# F7 | <kf7> || FUNCT + F
# F8 | <kf8> || FUNCT + G
# F9 | <kf9> || FUNCT + H
# F10 | <kf10> || FUNCT + I
# F11 | <kf11> || FUNCT + J
#
# Shifted Function Keys:
#
# SHIFT + Key | capname|| Equivalent
# -------------|--------||------------
# SHIFT + F1 | <kf12> || FUNCT + `
# SHIFT + F2 | <kf13> || FUNCT + a
# SHIFT + F3 | <kf14> || FUNCT + b
# SHIFT + F4 | <kf15> || FUNCT + c
# SHIFT + F5 | <kf16> || FUNCT + d
# SHIFT + F6 | <kf17> || FUNCT + e
# SHIFT + F7 | <kf18> || FUNCT + f
# SHIFT + F8 | <kf19> || FUNCT + g
# SHIFT + F9 | <kf20> || FUNCT + h
# SHIFT + F10 | <kf21> || FUNCT + i
# SHIFT + F11 | <kf22> || FUNCT + j
#
# PORTS AND SWITCH SETTINGS
#
# Here are the switch settings for the TVI-912B/TVI-920B and
# TVI-912C/TVI-920C:
#
# S1 (Line), and S3 (Printer) baud rates -- put one, and only one, switch down:
# 2: 9600 3: 4800 4: 2400 5: 1200
# 6: 600 7: 300 8: 150 9: 75
# 10: 110
#
# S2 UART/Terminal options:
# Up Down
# 1: Not used Not allowed
# 2: Alternate character set Standard character set
# 3: Full duplex Half duplex
# 4: 50 Hz refresh 60 Hz refresh
# 5: No parity Send parity
# 6: 2 stop bits 1 stop bit
# 7: 8 data bits 7 data bits
# 8: Not used Not allowed on Rev E or lower
# 9: Even parity Odd parity
# 10: Steady cursor Blinking cursor
# (On Rev E or lower, use W25 instead of switch 10.)
#
# S5 UART/Terminal options:
# Open Closed
# 1: P3-6 Not connected DSR received on P3-6
# 2: P3-8 Not connected DCD received on P3-8
#
# 3 Open, 4 Open: P3-20 Not connected
# 3 Open, 4 Closed: DTR on when terminal is on
# 3 Closed, 4 Open: DTR is connected to RTS
# 3 Closed, 4 Closed: Not allowed
#
# 5 Closed: HDX printer (hardware control) Rev. K with extension port off,
# all data transmitted out of the modem port (P3) will also be
# transmitted out of the printer port (P4).
#
# 6 Open, 7 Open: Not allowed
# 6 Open, 7 Closed: 20ma current loop input
# 6 Closed, 7 Open: RS232 input
# 6 Closed, 7 Closed: Not allowed
#
# Jumper options:
# If the jumper is installed, the effect will occur (the next time the terminal
# is switched on).
#
# S4/W31: Enables automatic LF upon receipt of CR from
# remote or keyboard.
# S4/W32: Enables transmission of EOT at the end of Send. If not
# installed, a carriage return is sent.
# S4/W33: Disables automatic carriage return in column 80.
# S4/W34: Selects Page Print Mode as initial condition. If not
# installed, Extension Mode is selected.
#
# NON-STANDARD CAPABILITIES
#
# Sending <u9> or <u7> returns a cursor position report in the format
# YX\r, where Y and X are as in <cup>. This format is described in
# <u8> and <u6>, but it's not clear how one should write an
# appropriate scanf string, since we need to subtract %' ' from the
# character after reading it. The <u9> capability is used by tack(1)
# to synchronize during padding tests, and seems to work for that
# purpose.
#
# This description also includes the obsolete termcap capabilities
# has_hardware_tabs (<OTpt>) and backspaces_with_bs (<OTbs>).
#
# FEATURES NOT YET DESCRIBED IN THIS TERMINFO
#
# The FUNCT modifier actually works with every normal key by sending
# ^AX\r, where X is the sequence normally sent by that key. This is a
# sort of meta key not currently describable in terminfo.
#
# There are quite a few other keys (especially on the 920 models,) but
# they are for the most part only useful in block mode.
#
# These terminals have lots of forms manipulation features, mainly
# useful in block mode, including "clear X to nulls" (vs. "clear X to
# spaces"; nulls are sentinels for "send X" operations); "send X"
# operations for uploading all or part of the screen; and block-mode
# editing keys (they don't send escape sequences, but manipulate video
# memory directly). Block mode is used for local editing, and protect
# mode (in conjunction with the "write protect" attribute,
# a.k.a. half-intensity outside of protect mode) is used to control
# which parts of the screen are edited/sent/printed (by <mc0>).
#
# There are at least two major families of ROM, "early" and
# A49B1/A49C1; the major difference seems to be that the latter ROMs
# support a few extra escape sequences for manipulating the off-screen
# memory page, and for sending whole pages back to the host (mainly
# useful in block mode.) The descriptions in this file don't use any
# of those sequences: set cursor position including page (\E-PYX,
# where P is \s for page 0 and ! for page 1 [actually only the LSB of
# P is taken into account, so e.g. 0 and 1 work too,] and Y and X are
# as in <cup>); read cursor position (\E/), which is analogous to <u9>
# and returns PYX\r, where P is \s for page 0 or ! for page 1, and YX
# are as in <cup>, and some "send page" features mainly useful for
# forms manipulation.
#
# The keyboard enable (\E") and disable (\E#) sequences are unused,
# except that a terminal reset (<is2>) enables the keyboard.
#
# Auto-flip mode (\Ev) is likely faster than the scrolling mode (\Ew)
# enabled in <is2>, but auto-flip is very jarring so we don't use it.
#
# BUGS
#
# At least up to the A49B1 and A49C1 ROMs, there are no \Eb and \Ed
# sequences (I infer that in some TeleVideo terminal they may invert
# and uninvert the display) so the <flash> sequence given here is a
# cheesy page-flip instead.
#
# The back_tab (<cbt>) sequence (\EI) doesn't work according to
# tack(1), so it is not included in the descriptions below.
#
# It's not clear whether auto_left_margin (<bw>) flag should be set
# for these terminals; tack says yes, so it is set here, but this
# differs from other descriptions I've seen.
#
# Extension print mode (<mc5>) echoes all characters to the printer
# port [in addition to displaying them] except for the page print mode
# sequence (<mc4>); this is a slight violation of the terminfo
# definition for <mc5> but I don't expect it to cause problems. We
# reset to page print mode in <rs1> since it may have been enabled
# accidentally.
#
# The descriptions with plus signs (+) are building blocks.
tvi912b-unk|tvi912c-unk|TeleVideo TVI-912B or TVI-912C (no attributes),
OTbs, OTpt, am, bw,
cols#80, it#8, lines#24,
bel=^G, clear=\032$<50>, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%' '%+%c%p2%' '%+%c, cuu1=^K, dch1=\EW$<30>,
dl1=\ER$<1*>$<100>, ed=\Ey$<2*>$<10>, el=\ET$<15>,
home=^^, ht=^I, hts=\E1, ich1=\EQ$<30>,
if=/usr/share/tabset/stdcrt, il1=\EE$<1*>$<100>,
ind=\n$<10>, is2=\Ew\EA\E'\E"\E(, kcub1=^H, kcud1=\n,
kcuf1=^L, kcuu1=^K, kdch1=^?, kent=\r, khome=^^, mc4=\EA,
mc5=\E@, rs1=\Ek\010\Em\010\Eq\032, tbc=\E3, u6=%c%c\r,
u7=\E?, u8=%c%c\r, u9=\E?,
# This isn't included in the basic capabilities because it is
# typically unusable in combination with the full range of video
# attributes, since the magic cookie attributes turn into ASCII
# control characters, and the half-intensity ("protected") attribute
# converts all affected characters to spaces.
tvi912b+printer|TeleVideo TVI-912B/TVI-920B and TVI-912C/TVI-920C page print support,
mc0=\EP,
# This uses half-intensity mode (<dim>) for standout (<smso>), and
# exposes no other attributes (half-intensity is the only attribute
# that does not generate a magic cookie.)
tvi912b+dim|TeleVideo TVI-912B/TVI-920B and TVI-912C/TVI-920C half-intensity attribute support,
msgr,
dim=\E), rmso=\E(, sgr=\E%?%p1%p5%|%t)%e(%;, sgr0=\E(,
smso=\E),
# Full magic-cookie attribute support, with half-intensity reverse
# video for standout. Note that we add a space in the <dim> sequence
# to give a consistent magic-cookie count. Also note that <sgr> uses
# backspacing (in the TVI-supported order) to apply all requested
# attributes with only a single magic cookie.
tvi912b+mc|TeleVideo TVI-912B/TVI-920B and TVI-912C/TVI-920C full magic-cookie attribute support,
xmc#1,
blink=\E\^, dim=\E)\s, invis=\E_, rev=\Ej, rmso=\E(\Ek,
rmul=\Em,
sgr=\E%?%p1%p5%|%t)%e(%;\s\010\E%?%p1%p3%|%tj%ek%;\010\E%?
%p2%tl%em%;\010\E%?%p7%t_%e%?%p4%t\^%eq%;%;,
sgr0=\E(\Ek\010\Em\010\Eq, smso=\E)\Ej, smul=\El,
# This uses the second page memory option to save & restore screen
# contents. If your terminal is missing the option, this description
# should still work, but that has not been tested.
tvi912b+2p|TeleVideo TVI-912B/TVI-920B and TVI-912C/TVI-920C second page memory option support,
flash=\EK$<100>\EK, rmcup=\032$<50>\EK\E=7\s,
smcup=\EK\032$<50>\E(\Ek\010\Em\010\Eq\032$<50>,
# This simulates flashing by briefly toggling to the other page
# (kludge!)
tvi912b+vb|TeleVideo TVI-912B/TVI-920B and TVI-912C/TVI-920C second page memory option "visible bell" support,
bel=\EK$<100>\EK, use=tvi912b+2p,
# Function keys (<kf12> .. <kf22> are shifted <kf1> .. <kf11>)
tvi920b+fn|TeleVideo TVI-920B and TVI-920C function key support,
kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^A`\r, kf13=^Aa\r,
kf14=^Ab\r, kf15=^Ac\r, kf16=^Ad\r, kf17=^Ae\r, kf18=^Af\r,
kf19=^Ag\r, kf2=^AA\r, kf20=^Ah\r, kf21=^Ai\r, kf22=^Aj\r,
kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r,
kf8=^AG\r, kf9=^AH\r,
# Combinations of the basic building blocks
tvi912b-2p-unk|tvi912c-2p-unk|tvi912b-unk-2p|tvi912c-unk-2p|TeleVideo TVI-912B or TVI-912C (second page memory option; no attributes),
use=tvi912b+2p, use=tvi912b-unk,
tvi912b-vb-unk|tvi912c-vb-unk|tvi912b-unk-vb|tvi912c-unk-vb|TeleVideo TVI-912B or TVI-912C (second page memory option "visible bell"; no attributes),
use=tvi912b+vb, use=tvi912b-unk,
tvi912b-p|tvi912c-p|TeleVideo TVI-912B or TVI-912C (no attributes; page print),
use=tvi912b+printer, use=tvi912b-unk,
tvi912b-2p-p|tvi912c-2p-p|tvi912b-p-2p|tvi912c-p-2p|TeleVideo TVI-912B or TVI-912C (second page memory option; no attributes; page print),
use=tvi912b+2p, use=tvi912b+printer, use=tvi912b-unk,
tvi912b-vb-p|tvi912c-vb-p|tvi912b-p-vb|tvi912c-p-vb|TeleVideo TVI-912B or TVI-912C (second page memory option "visible bell"; no attributes; page print),
use=tvi912b+vb, use=tvi912b+printer, use=tvi912b-unk,
tvi912b-2p|tvi912c-2p|TeleVideo TVI-912B or TVI-912C (second page memory option; half-intensity attribute),
use=tvi912b+2p, use=tvi912b+dim, use=tvi912b-unk,
tvi912b-2p-mc|tvi912c-2p-mc|tvi912b-mc-2p|tvi912c-mc-2p|TeleVideo TVI-912B or TVI-912C (second page memory option; magic cookies),
use=tvi912b+2p, use=tvi912b+mc, use=tvi912b-unk,
tvi912b-vb|tvi912c-vb|TeleVideo TVI-912B or TVI-912C (second page memory option "visible bell"; half-intensity attribute),
use=tvi912b+vb, use=tvi912b+dim, use=tvi912b-unk,
tvi912b-vb-mc|tvi912c-vb-mc|tvi912b-mc-vb|tvi912c-mc-vb|TeleVideo TVI-912B or TVI-912C (second page memory option "visible bell"; magic cookies),
use=tvi912b+vb, use=tvi912b+mc, use=tvi912b-unk,
tvi912b|tvi912c|TeleVideo TVI-912B or TVI-912C (half-intensity attribute),
use=tvi912b+dim, use=tvi912b-unk,
tvi912b-mc|tvi912c-mc|TeleVideo TVI-912B or TVI-912C (magic cookies),
use=tvi912b+mc, use=tvi912b-unk,
tvi920b-unk|tvi920c-unk|TeleVideo TVI-920B or TVI-920C (no attributes),
use=tvi920b+fn, use=tvi912b-unk,
tvi920b-2p-unk|tvi920c-2p-unk|tvi920b-unk-2p|tvi920c-unk-2p|TeleVideo TVI-920B or TVI-920C (second page memory option; no attributes),
use=tvi920b+fn, use=tvi912b+2p, use=tvi912b-unk,
tvi920b-vb-unk|tvi920c-vb-unk|tvi920b-unk-vb|tvi920c-unk-vb|TeleVideo TVI-920B or TVI-920C (second page memory option "visible bell"; no attributes),
use=tvi920b+fn, use=tvi912b+vb, use=tvi912b-unk,
tvi920b-p|tvi920c-p|TeleVideo TVI-920B or TVI-920C (no attributes; page print),
use=tvi920b+fn, use=tvi912b+printer, use=tvi912b-unk,
tvi920b-2p-p|tvi920c-2p-p|tvi920b-p-2p|tvi920c-p-2p|TeleVideo TVI-920B or TVI-920C (second page memory option; no attributes; page print),
use=tvi920b+fn, use=tvi912b+2p, use=tvi912b+printer,
use=tvi912b-unk,
tvi920b-vb-p|tvi920c-vb-p|tvi920b-p-vb|tvi920c-p-vb|TeleVideo TVI-920B or TVI-920C (second page memory option "visible bell"; no attributes; page print),
use=tvi920b+fn, use=tvi912b+vb, use=tvi912b+printer,
use=tvi912b-unk,
tvi920b-2p|tvi920c-2p|TeleVideo TVI-920B or TVI-920C (second page memory option; half-intensity attribute),
use=tvi920b+fn, use=tvi912b+2p, use=tvi912b+dim,
use=tvi912b-unk,
tvi920b-2p-mc|tvi920c-2p-mc|tvi920b-mc-2p|tvi920c-mc-2p|TeleVideo TVI-920B or TVI-920C (second page memory option; magic cookies),
use=tvi920b+fn, use=tvi912b+2p, use=tvi912b+mc,
use=tvi912b-unk,
tvi920b-vb|tvi920c-vb|TeleVideo TVI-920B or TVI-920C (second page memory option "visible bell"; half-intensity attribute),
use=tvi920b+fn, use=tvi912b+vb, use=tvi912b+dim,
use=tvi912b-unk,
tvi920b-vb-mc|tvi920c-vb-mc|tvi920b-mc-vb|tvi920c-mc-vb|TeleVideo TVI-920B or TVI-920C (second page memory option "visible bell"; magic cookies),
use=tvi920b+fn, use=tvi912b+vb, use=tvi912b+mc,
use=tvi912b-unk,
tvi920b|tvi920c|TeleVideo TVI-920B or TVI-920C (half-intensity attribute),
use=tvi920b+fn, use=tvi912b+dim, use=tvi912b-unk,
tvi920b-mc|tvi920c-mc|TeleVideo TVI-920B or TVI-920C (magic cookies),
use=tvi920b+fn, use=tvi912b+mc, use=tvi912b-unk,
# Televideo 921 and variants
# From: Tim Theisen <tim@cs.wisc.edu> 22 Sept 1995
# (tvi921: removed :ko=bt: before translation, I see no backtab cap;
# also added empty <acsc> to suppress tic warning -- esr)
tvi921|televideo model 921 with sysline same as page & real vi function,
OTbs, OTpt, am, hs, xenl, xhp,
cols#80, lines#24, xmc#0,
acsc=, clear=^Z, cnorm=\E.3, cr=\r, cub1=^H, cud1=^V, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<3/>, cuu1=^K,
cvvis=\E.2, dch1=\EW, dl1=\ER$<1*/>, dsl=\Ef\r\Eg, ed=\EY,
el=\ET, fsl=\Eg, home=^^, ht=^I, ich1=\EQ,
if=/usr/share/tabset/stdcrt, il1=\EE, ind=\n, invis@,
is2=\El\E"\EF1\E.3\017\EA\E<, kbs=^H, kclr=^Z, kcub1=^H,
kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER$<1*/>,
ked=\EY, kel=\ET, kich1=\EQ, kil1=\EE, nel=\r\n, rmacs=\E%%,
rmir=, smacs=\E$, smir=, tsl=\Ef\EG0, use=adm+sgr,
# without the beeper
# (tvi92B: removed :ko=bt: before translation, I see no backtab cap;
# also added empty <acsc> to suppress tic warning -- esr)
tvi92B|televideo model 921 with sysline same as page & real vi function & no beeper,
am, hs, xenl, xhp,
cols#80, lines#24, xmc#0,
acsc=, clear=^Z, cnorm=\E.3, cr=\r, cub1=^H, cud1=^V, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<3/>, cuu1=^K,
cvvis=\E.2, dch1=\EW, dl1=\ER$<1*/>, dsl=\Ef\r\Eg, ed=\EY,
el=\ET, flash=\Eb$<200/>\Ed, fsl=\Eg, home=^^, ht=^I,
ich1=\EQ, if=/usr/share/tabset/stdcrt, il1=\EE, ind=\n,
invis@, is2=\El\E"\EF1\E.3\017\EA\E<, kbs=^H, kclr=^Z,
kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW,
kdl1=\ER$<1*/>, ked=\EY, kel=\ET, kich1=\EQ, kil1=\EE,
nel=\r\n, rmacs=\E%%, smacs=\E$, tsl=\Ef\EG0, use=adm+sgr,
# (tvi92D: removed :ko=bt: before translation, I see no backtab cap -- esr)
tvi92D|tvi92B with DTR instead of XON/XOFF & better padding,
dl1=\ER$<2*/>, il1=\EE$<2*/>,
is2=\El\E"\EF1\E.3\016\EA\E<, kdl1=\ER$<2*/>,
kil1=\EE$<2*/>, use=tvi92B,
# (tvi924: This used to have <dsl=\Es0>, <fsl=\031>. I put the new strings
# in from a BSD termcap file because it looks like they do something the
# old ones skip -- esr)
tvi924|televideo tvi924,
am, bw, hs, in, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, wsl#80, xmc#0,
bel=^G, blink=\EG2, cbt=\EI, civis=\E.0, clear=\E*0,
cnorm=\E.3, cr=\r, csr=\E_%p1%{32}%+%c%p2%{32}%+%c,
cub1=^H, cud1=^V, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, cvvis=\E.1,
dch1=\EW, dl1=\ER, dsl=\Es0\Ef\031, ed=\Ey, el=\Et,
flash=\Eb$<200>\Ed, fsl=\031\Es1, home=^^, ht=^I, hts=\E1,
ich1=\EQ, if=/usr/share/tabset/stdcrt, il1=\EE, ind=\n,
invis@, is1=\017\E%\E'\E(\EDF\EC\EG0\EN0\Es0\Ev0,
kbs=^H, kclr=\E*0, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K,
kdch1=\EW, kdl1=\ER, ked=\Ey, kel=\Et, kf0=^A@\r, kf1=^AA\r,
kf10=^AJ\r, kf11=^AK\r, kf12=^AL\r, kf13=^AM\r, kf14=^AN\r,
kf15=^AO\r, kf2=^AB\r, kf3=^AC\r, kf4=^AD\r, kf5=^AE\r,
kf6=^AF\r, kf7=^AG\r, kf8=^AH\r, kf9=^AI\r, khome=^^,
kich1=\EQ, kil1=\EE, lf0=F1, lf1=F2, lf10=F11, lf2=F3, lf3=F4,
lf4=F5, lf5=F6, lf6=F7, lf7=F8, lf8=F9, lf9=F10,
pfkey=\E|%p1%{49}%+%c%p2%s\031, ri=\Ej, tbc=\E3, tsl=\Ef,
use=adm+sgr,
# TVI925 DIP switches. In each of these, D = Down and U = Up,
#
# Here are the settings for the external (baud) switches (S1):
#
# Position Baud
# 7 8 9 10 [Printer]
# 1 2 3 4 [Main RS232]
# -----------------------------------------------------
# D D D D 9600
# D D D U 50
# D D U D 75
# D D U U 110
# D U D D 135
# D U D U 150
# D U U D 300
# D U U U 600
# U D D D 1200
# U D D U 1800
# U D U D 2400
# U D U U 3600
# U U D D 4800
# U U D U 7200
# U U U D 9600
# U U U U 19200
#
#
# Settings for word length and stop-bits (S1)
#
# Position Description
# 5 6
# ---------------------------
# U - 7-bit word
# D - 8-bit word
# - U 2 stop bits
# - D 1 stop bit
#
#
# S2 (external) settings
#
# Position Up Dn Description
# --------------------------------------------
# 1 X Local edit
# X Duplex edit (transmit editing keys)
# --------------------------------------------
# 2 X 912/920 emulation
# X 925
# --------------------------------------------
# 3 X
# 4 X No parity
# 5 X
# --------------------------------------------
# 3 X
# 4 X Odd parity
# 5 X
# --------------------------------------------
# 3 X
# 4 X Even parity
# 5 X
# --------------------------------------------
# 3 X
# 4 X Mark parity
# 5 X
# --------------------------------------------
# 3 X
# 4 X Space parity
# 5 X
# --------------------------------------------
# 6 X White on black display
# X Black on white display
# --------------------------------------------
# 7 X Half Duplex
# 8 X
# --------------------------------------------
# 7 X Full Duplex
# 8 X
# --------------------------------------------
# 7 X Block mode
# 8 X
# --------------------------------------------
# 9 X 50 Hz
# X 60 Hz
# --------------------------------------------
# 10 X CR/LF (Auto LF)
# X CR only
#
# S3 (internal switch) settings:
#
# Position Up Dn Description
# --------------------------------------------
# 1 X Keyclick off
# X Keyclick on
# --------------------------------------------
# 2 X English
# 3 X
# --------------------------------------------
# 2 X German
# 3 X
# --------------------------------------------
# 2 X French
# 3 X
# --------------------------------------------
# 2 X Spanish
# 3 X
# --------------------------------------------
# 4 X Blinking block cursor
# 5 X
# --------------------------------------------
# 4 X Blinking underline cursor
# 5 X
# --------------------------------------------
# 4 X Steady block cursor
# 5 X
# --------------------------------------------
# 4 X Steady underline cursor
# 5 X
# --------------------------------------------
# 6 X Screen blanking timer (ON)
# X Screen blanking timer (OFF)
# --------------------------------------------
# 7 X Page attributes
# X Line attributes
# --------------------------------------------
# 8 X DCD disconnected
# X DCD connected
# --------------------------------------------
# 9 X DSR disconnected
# X DSR connected
# --------------------------------------------
# 10 X DTR Disconnected
# X DTR connected
# --------------------------------------------
#
# (tvi925: BSD has <clear=\E*>. I got <is2> and <ri> from there -- esr)
tvi925|televideo 925,
OTbs, am, bw, hs, ul,
cols#80, lines#24, xmc#1,
bel=^G, cbt=\EI, clear=^Z, cnorm=\E.4, cr=\r, cub1=^H, cud1=^V,
cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
cvvis=\E.2, dch1=\EW, dl1=\ER, dsl=\Eh, ed=\EY, el=\ET,
flash=\Eb$<200>\Ed, fsl=\r\Eg, home=^^, ht=^I, hts=\E1,
ich1=\EQ, il1=\EE, ind=\n, invis@, is2=\El\E", kbs=^H, kclr=^Z,
kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER,
ked=\EY, kel=\ET, kf0=^AI\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r,
kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r,
kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, ri=\Ej, tbc=\E3,
tsl=\Eh\Ef, use=adm+sgr,
# TeleVideo 925 from Mitch Bradley <sun!wmb> via BRL
# to avoid "magic cookie" standout glitch:
tvi925-hi|TeleVideo Model 925 with half intensity standout mode,
xmc@,
kbs=^H, kcub1=^H, kcud1=\n, rmso=\E(, smso=\E), use=tvi925,
# From: Todd Litwin <litwin@litwin.jpl.nasa.gov> 28 May 1993
# Originally Tim Curry, Univ. of Central Fla., <duke!ucf-cs!tim> 5/21/82
# for additional capabilities,
# The following tvi descriptions from B:pjphar and virus!mike
# is for all 950s. It sets the following attributes:
# full duplex (\EDF) write protect off (\E()
# conversation mode (\EC) graphics mode off (\E%)
# white on black (\Ed) auto page flip off (\Ew)
# turn off status line (\Eg) clear status line (\Ef\r)
# normal video (\E0) monitor mode off (\EX or \Eu)
# edit mode (\Er) load blank char to space (\Ee\040)
# line edit mode (\EO) enable buffer control (^O)
# protect mode off (\E\047) duplex edit keys (\El)
# program unshifted send key to send line all (\E016)
# program shifted send key to send line unprotected (\E004)
# set the following to nulls:
# field delimiter (\Ex0\200\200)
# line delimiter (\Ex1\200\200)
# start-protected field delimiter (\Ex2\200\200)
# end-protected field delimiter (\Ex3\200\200)
# set end of text delimiter to carriage return/null (\Ex4\r\200)
#
# TVI 950 Switch Setting Reference Charts
#
# TABLE 1:
#
# S1 1 2 3 4 5 6 7 8 9 10
# +-----------------------+-----+-----+-----------------------+
# | Computer Baud Rate |Data |Stop | Printer Baud Rate |
# | |Bits |Bits | |
# +------+-----------------------+-----+-----+-----------------------+
# | Up | See | 7 | 2 | See |
# +------+-----------------------+-----+-----+-----------------------+
# | Down | TABLE 2 | 8 | 1 | TABLE 2 |
# +------+-----------------------+-----+-----+-----------------------+
#
#
# S2 1 2 3 4 5 6 7 8 9 10
# +-----+-----+-----------------+-----+-----------+-----+-----+
# |Edit |Cursr| Parity |Video|Transmiss'n| Hz |Click|
# +------+-----+-----+-----------------+-----+-----------+-----+-----+
# | Up | Dplx|Blink| See |GonBk| See | 60 | Off |
# +------+-----+-----+-----------------+-----+-----------+-----+-----+
# | Down |Local|St'dy| TABLE 3 |BkonG| CHART | 50 | On |
# +------+-----+-----+-----------------+-----+-----------+-----+-----+
#
# TABLE 2:
#
# +-----------+-----+-----+-----+-----+-----------+
# | Display | 1 | 2 | 3 | 4 | Baud |
# +-----------+-----+-----+-----+-----+ |
# | Printer | 7 | 8 | 9 | 10 | Rate |
# +-----------+-----+-----+-----+-----+-----------+
# | D | D | D | D | 9600 |
# | U | D | D | D | 50 |
# | D | U | D | D | 75 |
# | U | U | D | D | 110 |
# | D | D | U | D | 135 |
# | U | D | U | D | 150 |
# | D | U | U | D | 300 |
# | U | U | U | D | 600 |
# | D | D | D | U | 1200 |
# | U | D | D | U | 1800 |
# | D | U | D | U | 2400 |
# | U | U | D | U | 3600 |
# | D | D | U | U | 4800 |
# | U | D | U | U | 7200 |
# | D | U | U | U | 9600 |
# | U | U | U | U | 19200 |
# +-----+-----+-----+-----+-----------+
#
# TABLE 3:
# +-----+-----+-----+-----------+
# | 3 | 4 | 5 | Parity |
# +-----+-----+-----+-----------+
# | X | X | D | None |
# | D | D | U | Odd |
# | D | U | U | Even |
# | U | D | U | Mark |
# | U | U | U | Space |
# +-----+-----+-----+-----------+
# X = don't care
#
# CHART:
# +-----+-----+-----------------+
# | 7 | 8 | Communication |
# +-----+-----+-----------------+
# | D | D | Half Duplex |
# | D | U | Full Duplex |
# | U | D | Block |
# | U | U | Local |
# +-----+-----+-----------------+
#
# (tvi950: early versions had obsolete ":ma=^Vj^Kk^Hh^Ll^^H:".
# I also inserted <ich1> and <kich1>; the :ko: string indicated that <ich>
# should be present and all tvi native modes use the same string for this.
# Finally, note that BSD has cud1=^V. -- esr)
#
# TVI 950 has 11 function-keys -TD
tvi950|televideo 950,
OTbs, am, hs, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, xmc#1,
acsc=jHkGlFmEnIqKtMuLvOwNxJ, bel=^G, cbt=\EI, clear=\E*,
cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, dsl=\Eg\Ef\r, ed=\Ey, el=\Et, flash=\Eb$<200/>\Ed,
fsl=\r, home=^^, ht=^I, hts=\E1, ich1=\EQ, il1=\EE, ind=\n,
invis@,
is2=\EDF\EC\Ed\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee\s\017\011\El
\E016\E004\Ex0\0\0\Ex1\0\0\Ex2\0\0\011\Ex3\0\0\Ex4\r\0
\Ef\r,
kbs=^H, kcbt=\EI, kclr=\E*, kcub1=^H, kcud1=^V, kcuf1=^L,
kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\Ey, kel=\Et, kf1=^A@\r,
kf10=^AI\r, kf11=^AJ\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r,
kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r,
khome=^^, kich1=\EQ, kil1=\EE, mc4=\Ea, mc5=\E`, ri=\Ej,
rmacs=\E%%, rmir=\Er, smacs=\E$, smir=\Eq, tbc=\E3,
tsl=\Eg\Ef, kF1=^A`\r, kF10=^Ai\r, kF11=^Aj\r, kF2=^Aa\r,
kF3=^Ab\r, kF4=^Ac\r, kF5=^Ad\r, kF6=^Ae\r, kF7=^Af\r,
kF8=^Ag\r, kF9=^Ah\r, use=adm+sgr,
#
# is for 950 with two pages adds the following:
# set 48 line page (\E\\2)
# place cursor at page 0, line 24, column 1 (\E-07 )
# set local (no send) edit keys (\Ek)
#
# two page 950 adds the following:
# when entering ex, set 24 line page (\E\\1)
# when exiting ex, reset 48 line page (\E\\2)
# place cursor at 0,24,1 (\E-07 )
# set duplex (send) edit keys (\El) when entering vi
# set local (no send) edit keys (\Ek) when exiting vi
#
tvi950-2p|televideo950 w/2 pages,
is2=\EDF\EC\Ed\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee\s\017\011\Ek
\E016\E004\Ex0\0\0\Ex1\0\0\Ex2\0\0\011\Ex3\0\0\Ex4\r\0
\E\\2\E-07\s\011,
rmcup=\E\\2\E-07\s, rmkx=\Ek, smcup=\E\\1\E-07\s,
smkx=\El, use=tvi950,
#
# is for 950 with four pages adds the following:
# set 96 line page (\E\\3)
# place cursor at page 0, line 24, column 1 (\E-07 )
#
# four page 950 adds the following:
# when entering ex, set 24 line page (\E\\1)
# when exiting ex, reset 96 line page (\E\\3)
# place cursor at 0,24,1 (\E-07 )
#
tvi950-4p|televideo950 w/4 pages,
is2=\EDF\EC\Ed\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee\s\017\011\Ek
\E016\E004\Ex0\0\0\Ex1\0\0\Ex2\0\0\011\Ex3\0\0\Ex4\r\0
\E\\3\E-07\s\011,
rmcup=\E\\3\E-07\s, rmkx=\Ek, smcup=\E\\1\E-07\s,
smkx=\El, use=tvi950,
#
# <is2> for reverse video 950 changes the following:
# set reverse video (\Ed)
#
# set vb accordingly (\Ed ...delay... \Eb)
#
tvi950-rv|televideo950 rev video,
flash=\Ed$<200/>\Eb,
is2=\EDF\EC\Eb\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee\s\017\011\El
\E016\E004\Ex0\0\0\Ex1\0\0\Ex2\0\0\011\Ex3\0\0\Ex4\r
\0,
use=tvi950,
# tvi950-rv-2p uses the appropriate entries from 950-2p and 950-rv
tvi950-rv-2p|televideo950 rev video w/2 pages,
flash=\Ed$<200/>\Eb,
is2=\EDF\EC\Eb\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee\s\017\011\Ek
\E016\E004\Ex0\0\0\Ex1\0\0\Ex2\0\0\011\Ex3\0\0\Ex4\r\0
\E\\2\E-07\s,
rmcup=\E\\2\E-07\s, rmkx=\Ek, smcup=\E\\1\E-07\s,
smkx=\El, use=tvi950,
# tvi950-rv uses the appropriate entries from 950-4p and 950-rv
tvi950-rv-4p|televideo950 rev video w/4 pages,
flash=\Ed$<200/>\Eb,
is2=\EDF\EC\Eb\EG0\Er\EO\E'\E(\E%\Ew\EX\Ee\s\017\011\Ek
\E016\E004\Ex0\0\0\Ex1\0\0\Ex2\0\0\011\Ex3\0\0\Ex4\r\0
\E\\3\E-07\s,
rmcup=\E\\3\E-07\s, rmkx=\Ek, smcup=\E\\1\E-07\s,
smkx=\El, use=tvi950,
# From: Andreas Stolcke <stolcke@icsi.berkeley.edu>
# (tvi955: removed obsolete ":ma:=^Vj^Kk^Hh^Ll^^H";
# removed incorrect (and overridden) ":do=^J:"; fixed broken continuations in
# the :rs: string, inserted the <ich> implied by the termcap :ko: string. Note
# the :ko: string had :cl: in it, which means that one of the original
# <clear=\E*>, <kclr=\EY> had to be wrong; set <kclr=\E*> because that's what
# the 950 has. Finally, corrected the <kel> string to match the 950 and what
# ko implies -- esr)
# If the BSD termcap file was right, <cup=\E=%p1%{32}%+%c%p2%{32}%+%c> would
# also work.
tvi955|televideo 955,
OTbs, mc5i, msgr@,
it#8, xmc@,
acsc=0_`RjHkGlFmEnIoPqKsQtMuLvOwNxJ, blink=\EG2,
civis=\E.0, cnorm=\E.2, cud1=^V, cup=\E[%i%p1%d;%p2%dH,
cvvis=\E.1, dim=\E[=5h, ind@, invis=\EG1,
is2=\E[=3l\EF1\Ed\EG0\E[=5l\E%\El, kctab=\E2, khts=\E1,
knp=\EK, kpp=\EJ, krmir=\EQ, ktbc=\E3, mc0=\EP, rmacs=\E%,
rmam=\E[=7l, rmxon=^N,
rs1=\EDF\EC\Eg\Er\EO\E'\E(\Ew\EX\Ee\s\017\E0P\E6\0\E0p\E4\0
\Ef\r,
sgr0=\EG0\E[=5l, smacs=\E$, smam=\E[=7h, smxon=^O,
use=tvi950,
tvi955-w|955-w|televideo955 w/132 cols,
cols#132,
is2=\E[=3h\EF1\Ed\EG0\E[=5l\E%\El, use=tvi955,
# use half-intensity as normal mode, full intensity as <bold>
tvi955-hb|955-hb|televideo955 half-bright,
bold=\E[=5l, dim@, is2=\E[=3l\EF1\Ed\EG0\E[=5h\E%\El,
sgr0=\EG0\E[=5h, use=tvi955,
# From: Humberto Appleton <beto@cs.utexas.edu>, 880521 UT Austin
# (tvi970: removed ":sg#0:"; removed <rmso>=\E[m, <rmul>=\E[m;
# added <am>/<csr>/<home>/<hpa>/<vpa>/<smcup>/<rmcup> from BRL.
# According to BRL we could have <rmkx>=\E>, <smkx>=\E= but I'm not sure what
# it does to the function keys. I deduced <rmam>/<smam>.
# also added empty <acsc> to suppress tic warning, -- esr)
tvi970|televideo 970,
OTbs, OTpt, am, da, db, mir, msgr,
cols#80, it#8, lines#24,
acsc=, cbt=\E[Z, clear=\E[H\E[2J, csr=\E[%i%p1%d;%p2%dr,
cub1=^H, cud1=\ED, cuf1=\E[C, cup=\E[%i%p1%d;%p2%df,
cuu1=\EM, cvvis=\E[1Q, dch1=\E[P, dl1=\E[M, dsl=\Eg\Ef\r,
ed=\E[J, el=\E[K, flash=\E[5m$<200/>\E[m, home=\E[H,
hpa=\E[%i%p1%dG, ht=^I, il1=\E[L,
is2=\E<\E[?21l\E[19h\E[1Q\E[10l\E[7l\E[H\E[2J,
kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kf1=\E?a, kf2=\E?b, kf3=\E?c, kf4=\E?d, kf5=\E?e, kf6=\E?f,
kf7=\E?g, kf8=\E?h, kf9=\E?i, khome=\E[H, ri=\EM, rmacs=\E(B,
rmam=\E[?7h, rmcup=, rmir=\E[4l, rmso=\E[m, rmul=\E[m,
sgr0=\E[m, smacs=\E(B, smam=\E[?7l,
smcup=\E[?20l\E[?7h\E[1Q, smir=\E[4h, smso=\E[7m,
smul=\E[4m, vpa=\E[%i%p1%dd,
tvi970-vb|televideo 970 with visual bell,
flash=\E[?5h\0\0\0\0\0\0\0\0\0\0\0\0\0\E[?5l,
use=tvi970,
tvi970-2p|televideo 970 with using 2 pages of memory,
rmcup=\E[H\E[J\E[V, smcup=\E[U\E[?20l\E[?7h\E[1Q,
use=tvi970,
# Works with vi and rogue. NOTE: Esc v sets autowrap on, Esc u sets 80 chars
# per line (rather than 40), Esc K chooses the normal character set. Not sure
# padding is needed, but adapted from the tvi920c termcap. The <smso> and
# <smul> strings are klutzy, but at least use no screen space.
# (tvipt: removed obsolete ":ma=^Kk^Ll^R^L:". I wish we knew <rmam>,
# its absence means <smam>=\Ev isn't safe to use. -- esr)
# From: Gene Rochlin <armsis@amber.berkeley.edu> 9/19/84.
# The <ed>/<kf0>/<kf1>/<khome>/<mc4>, and <mc5> caps are from BRL, which says:
# F1 and F2 should be programmed as ^A and ^B; required for UNIFY.
tvipt|televideo personal terminal,
OTbs, am,
cols#80, lines#24,
cbt=\EI, clear=^Z, cub1=^H, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dl1=\ER$<5*>,
ed=\EY, el=\ET, home=^^, if=/usr/share/tabset/stdcrt,
il1=\EE$<5*>, is2=\Ev\Eu\EK, kbs=^H, kcub1=^H, kcud1=\n,
kcuf1=^L, kcuu1=^K, kf0=^A, kf1=^B, khome=^^, mc4=^T, mc5=^R,
rmso=\EF, rmul=\EF, smso=\EG1@A\EH, smul=\EG1B@\EH,
# From: Nathan Peterson <nathan@sco.com>, 03 Sep 1996
tvi9065|televideo 9065,
am, bw, chts, hs, mc5i, mir, msgr, xenl, xon,
cols#80, it#8, lh#1, lines#25, lm#0, lw#9, ma#4, nlab#8, vt#0,
wnum#0, wsl#30,
acsc='r0_jhkglfmeniopqksqtmulvownxj, bel=^G,
blink=\EG2, bold=\EG\,, cbt=\EI, civis=\E.0, clear=^Z,
cnorm=\E.3, cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD,
cub1=^H, cud=\E[%p1%dB, cud1=^V, cuf=\E[%p1%dC, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu=\E[%p1%dA,
cuu1=^K, cvvis=\E.2, dch=\E[%p1%dP, dch1=\EW, dim=\EGp,
dl=\E[%p1%dM, dl1=\ER, dsl=\E_30\r, ech=\E[%p1%d@, ed=\EY,
el=\ET, flash=\Eb$<15>\Ed, fsl=\r, home=^^, ht=^I, hts=\E1,
ich=\E[%p1%d@, if=/usr/share/tabset/stdcrt,
il=\E[%p1%dL, il1=\EE, ind=\n, invis=\EG1, ip=$<3>,
is1=\E"\E%\E'\E(\EG@\EO\EX\E[=5l\E[=6l\E[=7h\Ed\Er,
is2=\EF2\EG0\E\\L, is3=\E<\E[=4l\E[=8h, kHOM=\E\s\s\s,
kbs=^H, kcbt=\EI, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K,
kdch1=\EW, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r,
kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r,
kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, ll=\E[25;1H,
mc0=\E[0;0i, mc4=\Ea, mc5=\E`, nel=\r\n,
pfkey=\E|%p1%{48}%+%c3%p2%s\031,
pfloc=\E|%p1%{48}%+%c2%p2%s\031,
pfx=\E|%p1%{48}%+%c1%p2%s\031,
pln=\E_%p1%{63}%+%c%p2%s\r, prot=\E&,
rep=\E[%p2%db%p1%c, rev=\EG4,
rf=/usr/share/tabset/stdcrt, ri=\Ej, rmacs=\E%%,
rmam=\E[=7l, rmcup=\E.3\Er\E[1;25r\E[25;0H, rmdc=\0,
rmir=\Er, rmln=\E[4;1v, rmso=\EG0, rmul=\EG0, rmxon=^N,
rs1=\EC\EDF\E[0;0v\E[8;1v\E[=65l,
rs2=\E.b\E[10;20v\E[14;1v\E[3;0v\E[7;0v\E[=11.h\E[=12.h\E[=1
3.h\E[=14.h\E[=15l\E[=20h\E[=60l\E[=61h\E[=9l\E[=10l\E[=
21l\E[=23l\E[=3l\E_40\E_50\En\Ew\Ee\s\Ex0\0\0\Ex1\0\0
\Ex2\0\0\Ex3\0\0\Ex4\0\0\E1,
rs3=\E[=19h\E.3\E9\E0O\0\0\0\0\0\E0o\0\0\0\0\0\E0J\177\0\0
\0\0,
sgr=\EG0%?%p1%t\EGt%;%?%p2%t\EG8%;%?%p3%t\EG4%;%?%p4%t\EG2%;
%?%p5%t\EGp%;%?%p6%t\EG\,%;%?%p7%t\EG1%;%?%p8%t\E&%;%?
%p9%t\E$%e\E%%%;,
sgr0=\EG0\E%, smacs=\E$, smam=\E=7h, smcup=\E.2, smdc=\Er,
smir=\Eq, smln=\E[4;2v, smso=\EGt, smul=\EG8, smxon=^O,
tbc=\E3, tsl=\E[4;1v\E_30, uc=\EG8\EG0, use=ecma+index,
#### Visual (vi)
#
# In September 1993, Visual Technology of Westboro, Massachusetts,
# merged with White Pine Software of Nashua, New Hampshire.
#
# White Pine Software may be contacted at +1 603/886-9050.
# Or visit White Pine on the World Wide Web at URL http://www.wpine.com.
#
# Visual 50 from Beau Shekita, BTL-Whippany <whuxlb!ejs>
# Recently I hacked together the following termcap for Visual
# Technology's Visual 50 terminal. It's a slight modification of
# the vt52 termcap.
# It's intended to run when the Visual 50 is in vt52 emulation mode
# (I know what you're thinking; if it's emulating a vt52, then why
# another termcap? Well, it turns out that the Visual 50 can handle
# <dl1> and db(?) among other things, which the vt52 can't)
# The termcap works OK for the most part. The only problem is on
# character inserts. The whole line gets painfully redrawn for each
# character typed. Any suggestions?
# Beau's entry is combined with the vi50 entry from University of Wisconsin.
# Note especially the <il1> function. <kf4>-<kf6> are really l4-l6 in
# disguise; <kf7>-<kf9> are really l1-l3.
vi50|visual 50,
OTbs, OTpt, am, da, db, msgr,
cols#80, it#8, lines#24,
OTnl=\n, bel=^G, cbt=\Ez$<4/>, clear=\EH\EJ, cr=\r, cub1=^H,
cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c,
cuu1=\EA, dl1=\EM$<3*/>, ed=\EJ, el=\EK$<16/>, home=\EH,
ht=^I, il1=\EL, ind=\n, kbs=^H, kcub1=\ED, kcud1=\EB,
kcuf1=\EC, kcuu1=\EA, kf1=\EP, kf2=\EQ, kf3=\ER, kf4=\EV,
kf5=\EE, kf6=\E], kf7=\EL, kf8=\Ev, kf9=\EM, khome=\EH,
nel=\r\n, ri=\EI, rmso=\ET, rmul=\EW, smso=\EU, smul=\ES,
# this one was BSD & SCO's vi50
vi50adm|visual 50 in adm3a mode,
am, msgr,
cols#80, it#8, lines#24,
bel=^G, clear=^Z, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dl1=\EM,
ed=\Ek, el=\EK, home=\EH, ht=^I, il1=\EL, ind=\n, kbs=^H,
kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\EH,
rmso=\ET, smso=\EU,
# From: Jeff Siegal <jbs@quiotix.com>
vi55|Visual 55,
OTbs, am, mir, msgr,
cols#80, it#8, lines#24,
clear=\Ev, csr=\E_%p1%{65}%+%c%p2%{65}%+%c, cub1=^H,
cud1=\n, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c,
cuu1=\EA, dch1=\Ew, dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I,
il1=\EL, is2=\Ev\E_AX\Eb\EW\E9P\ET, kbs=^H, kcub1=\ED,
kcud1=\EB, kcuf1=\EC, kcuu1=\EA, ri=\EI, rmir=\Eb, rmso=\ET,
smir=\Ea, smso=\EU,
# Visual 200 from BRL
# The following switch settings are assumed for normal operation:
# FULL_DUPLEX SCROLL CR
# AUTO_NEW_LINE_ON VISUAL_200_EMULATION_MODE
# Other switches may be set for operator convenience or communication
# requirements.
# Character insertion is kludged in order to get around the "beep" misfeature.
# (This cap is commented out because <smir>/<rmir> is more efficient -- esr)
# Supposedly "4*" delays should be used for <il1>, <ed>, <clear>, <dch1>,
# and <dl1> strings, but we seem to get along fine without them.
vi200|visual 200,
OTbs, OTpt, am, mir, msgr,
OTkn#10, cols#80, it#8, lines#24,
acsc=+h.kffggjmkllsmenbq`tnuovcwdxa}r, bel=^G, cbt=\Ez,
clear=\Ev, cnorm=\Ec, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\Ed,
dch1=\EO, dim=\E4, dl1=\EM, ed=\Ey, el=\Ex, home=\EH, ht=^I,
hts=\E1, il1=\EL, ind=\n, invis=\Ea, kbs=^H, kclr=\Ev,
kctab=\E2, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA,
kdch1=\EO, kdl1=\EM, ked=\EJ, kel=\Et, kf0=\E?p, kf1=\E?q,
kf2=\E?r, kf3=\E?s, kf4=\E?t, kf5=\E?u, kf6=\E?v, kf7=\E?w,
kf8=\E?x, kf9=\E?y, khome=\EH, khts=\E1, kich1=\Ei, kil1=\EL,
krmir=\Ej, mc0=\EH\E], mc4=\EX, mc5=\EW, ri=\EI, rmacs=\EG,
rmkx=\E>, rmso=\E3, rs1=\E3\Eb\Ej\E\El\EG\Ec\Ek\EX,
sgr0=\E3\Eb, smacs=\EF, smkx=\E=, smso=\E4, tbc=\Eg,
# The older Visuals didn't come with function keys. This entry uses
# <smkx> and <rmkx> so that the keypad keys can be used as function keys.
# If your version of vi doesn't support function keys you may want
# to use vi200-f.
vi200-f|visual 200 no function keys,
is2=\E3\Eb\Ej\E\\\El\EG\Ed\Ek, kf0=\E?p, kf1=\E?q,
kf2=\E?r, kf3=\E?s, kf4=\E?t, kf5=\E?u, kf6=\E?v, kf7=\E?w,
kf8=\E?x, kf9=\E?y, rmkx=\E>, rmso@, smkx=\E=, smso@,
use=vi200,
vi200-rv|visual 200 reverse video,
cnorm@, cvvis@, ri@, rmso=\E3, smso=\E4, use=vi200,
# the function keys are programmable but we don't reprogram them to their
# default values with <is2> because programming them is very verbose. maybe
# an initialization file should be made for the 300 and they could be stuck
# in it.
# (vi300: added <rmam>/<smam> based on init string -- esr)
vi300|visual 300 ansi x3.64,
am, bw, mir, xenl,
cols#80, lines#24,
bel=^G, cbt=\E[Z, clear=\E[H\E[2J, cr=\r, cub1=^H, cud1=\E[B,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
dch1=\E[P$<40>, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I,
il1=\E[L, ind=\n,
is2=\E[7s\E[2;3;4;20;?5;?6l\E[12;?7h\E[1Q\E[0;1(D\E[8s,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kf1=\E_A\E\\, kf2=\E_B\E\\, kf3=\E_C\E\\, kf4=\E_D\E\\,
kf5=\E_E\E\\, kf6=\E_F\E\\, kf7=\E_G\E\\, kf8=\E_H\E\\,
kf9=\E_I\E\\, khome=\E[H, ri=\EM, rmam=\E[?7l, rmir=\E[4l,
rmso=\E[m, rmul=\E[m, sgr0=\E[m, smam=\E[?7h, smir=\E[4h,
smso=\E[1m, smul=\E[4m,
# some of the vi300s have older firmware that has the command
# sequence for setting editing extent reversed.
vi300-old|visual 300 with old firmware (set edit extent reversed),
is2=\E[7s\E[2;3;4;20;?5;?6l\E[12;?7h\E[2Q\E[0;1(D\E[8s, use=vi300,
# Visual 500 prototype entry from University of Wisconsin.
# The best place to look for the escape sequences is page A1-1 of the
# Visual 500 manual. The initialization sequence given here may be
# overkill, but it does leave out some of the initializations which can
# be done with the menus in set-up mode.
# The :xp: line below is so that emacs can understand the padding requirements
# of this slow terminal. :xp: is 10 time the padding factor.
# (vi500: removed unknown :xp#4: termcap;
# also added empty <acsc> to suppress tic warning -- esr)
vi500|visual 500,
am, mir, msgr,
cols#80, it#8, lines#33,
acsc=, cbt=\Ez$<4/>, clear=\Ev$<6*/>, cr=\r,
csr=\E(%p1%{32}%+%c%p2%{32}%+%c, cub1=^H, cud1=\EB,
cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA,
dch1=\EO$<3*/>, dl1=\EM$<3*/>, ed=\Ey$<3*/>,
el=\Ex$<16/>, home=\EH, ht=\011$<8/>, il1=\EL\Ex$<3*/>,
ind=\n,
is2=\E3\E\001\E\007\E\003\Ek\EG\Ed\EX\El\E>\Eb\E\\,
kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA,
khome=\EH, nel=\r\n, rmacs=^O, rmir=\Ej, rmso=\E^G,
rmul=\E^C, smacs=^N, smir=\Ei, smso=\E^H, smul=\E^D,
# The visual 550 is a visual 300 with tektronix graphics,
# and with 33 lines. clear screen is modified here to
# also clear the graphics.
vi550|visual 550 ansi x3.64,
lines#33,
clear=\030\E[H\E[2J, use=vi300,
vi603|visual603|visual 603,
hs, mir,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J,
csr=\E[%i%p1%d;%p2%dr, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M,
dsl=\EP2;1~\E\\, ed=\E[J, el=\E[K, fsl=\E\\, il1=\E[L,
ind=\ED, is1=\E>\E[?3l\E[?4l\E[?7h\E[?8h\E[1;24r,
rev=\E[7m, ri=\EM, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m,
sgr0=\E[m\017$<2>, smir=\E[4h, smso=\E[7m, smul=\E[4m,
tsl=\EP2~, use=vt100+4bsd,
#### Wyse (wy)
#
# Wyse Technology
# 3471 North First Street
# San Jose, CA 95134
# Vox: (408)-473-1200
# Fax: (408) 473-1222
# Web: http://www.wyse.com
#
# Wyse sales can be reached by phone at 1-800-GET-WYSE. Tech support is at
# (800)-800-WYSE (option 5 gets you a human). There's a Web page at the
# obvious address, <http://www.wyse.com>. They keep terminfo entries at
# https://web.archive.org/web/19970712022641/http://www.wyse.co.uk/support/appnotes/idxappnt.htm
#
#
# Wyse bought out Link Technology, Inc. in 1990 and closed it down in 1995.
# They now own the Qume and Amdek brands, too. So these are the people to
# talk with about all Link, Qume, and Amdek terminals.
#
# These entries include a few small fixes.
# I canceled the bel capacities in the vb entries.
# I made two trivial syntax fixes in the wyse30 entry.
# I made some entries relative to adm+sgr.
#
#
# Note: The wyse75, wyse85, and wyse99 have been discontinued.
# Although the Wyse 30 can support more than one attribute
# it requires magic cookies to do so. Many applications do not
# function well with magic cookies. The following terminfo uses
# the protect mode to support one attribute (dim) without cookies.
# If more than one attribute is needed then the wy30-mc terminfo
# should be used.
#
wy30|wyse30|Wyse 30,
am, bw, hs, mc5i, mir, msgr, xon,
cols#80, lh#1, lines#24, lw#8, ma#1, nlab#8, wsl#45,
acsc=0wa_h[jukslrmqnxqzttuyv]wpxv, bel=^G, cbt=\EI,
civis=\E`0, clear=\E+$<80>, cnorm=\E`1, cr=\r, cub1=^H,
cud1=\n, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c,
cuu1=^K, dch1=\EW$<10>, dim=\E`7\E), dl1=\ER$<1>,
dsl=\EF\r, ed=\EY$<80>, el=\ET, flash=\E`8$<100/>\E`9,
fsl=\r, home=^^, ht=\011$<1>, hts=\E1, il1=\EE$<2>,
ind=\n$<2>, ip=$<2>, is2=\E'\E(\E\^3\E`9\016\024,
kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=^H, kcud1=\n, kcuf1=^L,
kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kent=\E7,
kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r,
kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, khome=^^, kich1=\EQ,
kil1=\EE, knp=\EK, kpp=\EJ, krpl=\Er, ll=^^^K, mc0=\EP, mc4=^T,
mc5=^X, nel=\r\n, pfx=\Ez%p1%{63}%+%c%p2%s\177,
pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E`7\E), ri=\Ej$<3>,
rmacs=\EH^C, rmir=\Er, rmln=\EA11, rmso=\E(,
sgr=%?%p1%p5%p8%|%|%t\E`7\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;,
sgr0=\E(\EH\003, smacs=\EH^B, smir=\Eq, smln=\EA10,
smso=\E`7\E), tbc=\E0, tsl=\EF,
#
# This terminal description uses the non-hidden attribute mode
# (with magic cookie).
#
# (wy30-mc: added <smcup> to suppress tic warning --esr)
wy30-mc|wyse30-mc|wyse 30 with magic cookies,
msgr@,
ma@, xmc#1,
blink=\EG2, dim=\EGp, prot=\EG0\E), rmacs=\EG0\EH\003,
rmcup=\EG0, rmso=\EG0,
sgr=\EG%{48}%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?
%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c%?%p8
%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;,
sgr0=\EG0\E(\EH\003, smacs=\EG0\EH\002, smcup=,
smso=\EG4, use=wy30, use=adm+sgr,
# The mandatory pause used by <flash> does not work with
# older versions of terminfo. If you see this effect then
# unset xon and delete the / from the delay.
# i.e. change $<100/> to $<100>
wy30-vb|wyse30-vb|wyse 30 visible bell,
bel@, use=wy30,
#
# The Wyse 50 can support one attribute (e.g. Dim, Inverse,
# Normal) without magic cookies by using the protect mode.
# The following description uses this feature, but when more
# than one attribute is put on the screen at once, all attributes
# will be changed to be the same as the last attribute given.
# The Wyse 50 can support more attributes when used with magic
# cookies. The wy50-mc terminal description uses magic cookies
# to correctly handle multiple attributes on a screen.
#
wy50|wyse50|Wyse 50,
am, bw, hs, mc5i, mir, msgr, xon,
cols#80, lh#1, lines#24, lw#8, ma#1, nlab#8, wsl#45,
acsc=a;j5k3l2m1n8q\:t4u9v=w0x6, bel=^G, cbt=\EI,
civis=\E`0, clear=\E+$<20>, cnorm=\E`1, cr=\r, cub1=^H,
cud1=\n, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c,
cuu1=^K, dch1=\EW$<1>, dim=\E`7\E), dl1=\ER, dsl=\EF\r,
ed=\EY$<20>, el=\ET, flash=\E`8$<100/>\E`9, fsl=\r,
home=^^, ht=^I, hts=\E1, il1=\EE, ind=\n$<2>, ip=$<1>,
is1=\E`\:\E`9$<30>, is2=\016\024\E'\E(, kHOM=\E{, kbs=^H,
kcbt=\EI, kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, kdch1=\EW,
kdl1=\ER, ked=\EY, kel=\ET, kent=\E7, kf1=^A@\r, kf10=^AI\r,
kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r,
kf16=^AO\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r,
kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^,
kich1=\EQ, kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er,
ll=^^^K, mc0=\EP, mc4=^T, mc5=^X, nel=\r\n,
pfx=\Ez%p1%{63}%+%c%p2%s\177,
pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E`7\E), rev=\E`6\E),
ri=\Ej, rmacs=\EH^C, rmir=\Er, rmln=\EA11, rmso=\E(,
sgr=%?%p1%p3%|%t\E`6\E)%e%p5%p8%|%t\E`7\E)%e\E(%;%?%p9%t\EH
\002%e\EH\003%;,
sgr0=\E(\EH\003, smacs=\EH^B, smir=\Eq, smln=\EA10,
smso=\E`6\E), tbc=\E0, tsl=\EF, kF1=^A`\r, kF10=^Ai\r,
kF11=^Aj\r, kF12=^Ak\r, kF13=^Al\r, kF14=^Am\r, kF15=^An\r,
kF16=^Ao\r, kF2=^Aa\r, kF3=^Ab\r, kF4=^Ac\r, kF5=^Ad\r,
kF6=^Ae\r, kF7=^Af\r, kF8=^Ag\r, kF9=^Ah\r,
#
# This terminal description uses the non-hidden attribute mode
# (with magic cookie).
#
# The mandatory pause used by flash does not work with some
# older versions of terminfo. If you see this effect then
# unset <xon> and delete the / from the delay.
# i.e. change $<100/> to $<100>
# (wy50-mc: added <smcup> to suppress tic warning --esr)
wy50-mc|wyse50-mc|wyse 50 with magic cookies,
msgr@,
ma@, xmc#1,
blink=\EG2, dim=\EGp, prot=\EG0\E), rev=\EG4,
rmacs=\EG0\EH\003, rmcup=\EG0, rmso=\EG0,
sgr=\EG%{48}%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?
%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c%?%p8
%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;,
sgr0=\EG0\E(\EH\003, smacs=\EG0\EH\002, smcup=,
smso=\EGt, use=wy50, use=adm+sgr,
wy50-vb|wyse50-vb|wyse 50 visible bell,
bel@, use=wy50,
wy50-w|wyse50-w|wyse 50 132-column,
cols#132, lw#7, nlab#16, wsl#97,
cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<2>, is1=\E`;\E`9$<30>,
use=wy50,
wy50-wvb|wyse50-wvb|wyse 50 132-column visible bell,
bel@, use=wy50-w,
#
# The Wyse 350 is a Wyse 50 with color.
# Unfortunately this means that it has magic cookies.
# The color attributes are designed to overlap the reverse, dim and
# underline attributes. This is nice for monochrome applications
# because you can make underline stuff green (or any other color)
# but for true color applications it's not so hot because you cannot
# mix color with reverse, dim or underline.
# To further complicate things one of the attributes must be
# black (either the foreground or the background). In reverse video
# the background changes color with black letters. In normal video
# the foreground changes colors on a black background.
# This terminfo uses some of the more advanced features of curses
# to display both color and blink. In the final analysis I am not
# sure that the wy350 runs better with this terminfo than it does
# with the wy50 terminfo (with user adjusted colors).
#
# The mandatory pause used by flash does not work with
# older versions of terminfo. If you see this effect then
# unset xon and delete the / from the delay.
# i.e. change $<100/> to $<100>
#
# Bug: The <op> capability resets attributes.
wy350|wyse350|Wyse 350,
am, bw, hs, mc5i, mir, xon,
colors#8, cols#80, lh#1, lines#24, lw#8, ncv#55, nlab#8, pairs#8,
wsl#45, xmc#1,
acsc=0wa_h[jukslrmqnxqzttuyv]wpxv, bel=^G, blink=\EG2,
cbt=\EI, civis=\E`0, clear=\E+$<20>, cnorm=\E`1, cr=\r,
cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW$<1>,
dim=\EGp, dl1=\ER, dsl=\EF\r, ed=\EY$<20>, el=\ET,
flash=\E`8$<100/>\E`9, fsl=\r, home=^^, ht=^I, hts=\E1,
il1=\EE, ind=\n$<2>, ip=$<1>, is1=\E`\:\E`9$<30>,
is2=\016\024\E'\E(, is3=\E%?, kHOM=\E{, kbs=^H, kcbt=\EI,
kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER,
ked=\EY, kel=\ET, kent=\E7, kf1=^A@\r, kf10=^AI\r,
kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r,
kf16=^AO\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r,
kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^,
kich1=\EQ, kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er,
ll=^^^K, mc0=\EP, mc4=^T, mc5=^X, nel=\r\n, oc=\E%?, op=\EG0,
pfx=\Ez%p1%{63}%+%c%p2%s\177,
pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\EG0\E), ri=\Ej,
rmacs=\EG0\EH\003, rmir=\Er, rmln=\EA11, setb=,
setf=%?%p1%{0}%=%t%{76}%e%p1%{1}%=%t%{64}%e%p1%{2}%=%t%{8}%e
%p1%{3}%=%t%{72}%e%p1%{4}%=%t%{4}%e%p1%{5}%=%t%{68}%e
%p1%{6}%=%t%{12}%e%p1%{7}%=%t%{0}%;%PC\EG%gC%gA%+%{48}
%+%c,
sgr=%{0}%?%p4%t%{2}%|%;%?%p7%t%{1}%|%;%PA\EG%?%gC%t%gC%e%{0}
%?%p1%t%{4}%|%;%?%p2%t%{8}%|%;%?%p3%t%{4}%|%;%?%p5%t
%{64}%|%;%;%gA%+%{48}%+%c%?%p8%t\E)%e\E(%;%?%p9%t\EH
\002%e\EH\003%;,
sgr0=\EG0\E(\EH\003%{0}%PA%{0}%PC, smacs=\EG0\EH\002,
smir=\Eq, smln=\EA10, tbc=\E0, tsl=\EF, use=adm+sgr,
wy350-vb|wyse350-vb|wyse 350 visible bell,
bel@, use=wy350,
wy350-w|wyse350-w|wyse 350 132-column,
cols#132, lw#7, nlab#16, wsl#97,
cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<2>, is1=\E`;\E`9$<30>,
use=wy350,
wy350-wvb|wyse350-wvb|wyse 350 132-column visible bell,
bel@, use=wy350-w,
#
# This terminfo description is untested.
# The wyse100 emulates an adm31, so the adm31 entry should work.
#
wy100|wyse 100,
hs, mir,
cols#80, lines#24, xmc#1,
bel=^G, clear=\E;, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, dsl=\EA31, ed=\EY, el=\ET, fsl=\r, il1=\EE, ind=\n,
invis@, is2=\Eu\E0, kbs=^H, kcub1=^H, kcud1=\n, kcuf1=^L,
kcuu1=^K, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r,
kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, khome=\E{,
rmir=\Er, smir=\Eq, tsl=\EF, use=adm+sgr,
#
# The Wyse 120/150 has most of the features of the Wyse 60.
# This terminal does not need padding up to 9600 baud!
# <msgr> should be set but the clear screen fails when in
# alt-charset mode. Try \EcE\s\s\E+\s if the screen is really clear
# then set <msgr>.
#
wy120|wyse120|wy150|wyse150|Wyse 120/150,
am, bw, hs, km, mc5i, mir, msgr, xon,
cols#80, it#8, lh#1, lines#24, lw#8, nlab#8, pb#9601, wsl#45,
acsc=+/\,.0[a2fxgqh1ihjYk?lZm@nEqDtCu4vAwBx3yszr{c~~,
bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\E+$<50>,
cnorm=\E`1, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW$<7>,
dim=\EGp, dl1=\ER$<3>, dsl=\EF\r, ed=\EY$<50>, el=\ET$<4>,
flash=\E`8$<100/>\E`9, fsl=\r, home=^^, ht=\011$<1>,
hts=\E1, il1=\EE$<3>, ind=\n$<3>, ip=$<2>, is1=\EcB0\EcC1,
is2=\Ed$\EcD\E'\Er\EH\003\Ed/\EO\Ee1\Ed*\E`@\E`9\E`1\016
\024\El,
is3=\EwJ\Ew1$<150>, kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=^H,
kcud1=\n, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY,
kel=\ET, kent=\E7, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r,
kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r,
kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r,
kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ,
kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=^^^K,
mc0=\EP, mc4=^T, mc5=\Ed#, nel=\r\n$<3>,
pfloc=\EZ2%p1%{63}%+%c%p2%s\177,
pfx=\EZ1%p1%{63}%+%c%p2%s\177,
pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<2>,
rmacs=\EcD, rmam=\Ed., rmcup=\Ew1, rmir=\Er, rmln=\EA11,
rmxon=\Ec20, rs1=\E~!\E~4$<30>, rs2=\EeF\E`\:$<70>,
rs3=\EwG\Ee($<100>,
sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%{48}%?%p2%t%{8}
%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t
%{64}%|%;%?%p7%t%{1}%|%;%c,
sgr0=\E(\EH\003\EG0\EcD, smacs=\EcE, smam=\Ed/,
smcup=\Ew0, smir=\Eq, smln=\EA10, smso=\EGt, smxon=\Ec21,
tbc=\E0, tsl=\EF, use=adm+sgr,
#
wy120-w|wyse120-w|wy150-w|wyse150-w|wyse 120/150 132-column,
cols#132, lw#7, nlab#16, wsl#97,
cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<12>, ip=$<4>,
rs2=\E`;$<70>, use=wy120,
#
wy120-25|wyse120-25|wy150-25|wyse150-25|wyse 120/150 80-column 25-lines,
lh@, lines#25, lw@, nlab@,
pln@, rs3=\EwG\Ee)$<100>, use=wy120,
#
wy120-25-w|wyse120-25-w|wy150-25-w|wyse150-25-w|wyse 120/150 132-column 25-lines,
lh@, lines#25, lw@, nlab@,
pln@, rs3=\EwG\Ee)$<100>, use=wy120-w,
#
wy120-vb|wyse120-vb|wy150-vb|wyse150-vb|Wyse 120/150 visible bell,
bel@, use=wy120,
#
wy120-w-vb|wy120-wvb|wyse120-wvb|wy150-w-vb|wyse150-w-vb|Wyse 120/150 132-column visible bell,
bel@, use=wy120-w,
#
# The Wyse 60 is like the Wyse 50 but with more padding.
# The reset strings are slow and the pad times very depending
# on other parameters such as font loading. I have tried
# to follow the following outline:
#
# <rs1> -> set personality
# <rs2> -> set number of columns
# <rs3> -> set number of lines
# <is1> -> select the proper font
# <is2> -> do the initialization
# <is3> -> set up display memory (2 pages)
#
# The Wyse 60's that have vt100 emulation are slower than the
# older Wyse 60's. This change happened mid-1987.
# The capabilities effected are <dch1> <dl1> <il1> <ind> <ri>
#
# The meta key is only half right. This terminal will return the
# high order bit set when you hit CTRL-function_key
#
# It may be useful to assign two function keys with the
# values \E=(\s look at old data in page 1
# \E=W, look at bottom of page 1
# where \s is a space ( ).
#
# Note:
# The Wyse 60 runs faster when the XON/XOFF
# handshake is turned off.
#
# (wy60: we use \E{ rather than ^^ for home (both are documented) to avoid
# a bug reported by Robert Dunn, <rcdii@inlink.com> -- esr)
wy60|wyse60|Wyse 60,
am, bw, hs, km, mc5i, mir, msgr,
cols#80, lh#1, lines#24, lw#8, nlab#8, wsl#45,
acsc=+/\,.0[a2fxgqh1ihjYk?lZm@nEqDtCu4vAwBx3yszr{c~~,
bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\E+$<100>,
cnorm=\E`1, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
dch1=\EW$<11>, dclk=\E`b, dim=\EGp, dl1=\ER$<5>, dsl=\EF\r,
ed=\EY$<100>, el=\ET, flash=\E`8$<100/>\E`9, fsl=\r,
home=\E{, ht=\011$<1>, hts=\E1, il1=\EE$<4>, ind=\n$<5>,
ip=$<3>, is1=\EcB0\EcC1,
is2=\Ed$\EcD\E'\Er\EH\003\Ed/\EO\Ee1\Ed*\E`@\E`9\E`1\016
\024\El,
is3=\EwJ\Ew1$<150>, kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=^H,
kcud1=\n, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY,
kel=\ET, kent=\E7, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r,
kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r,
kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r,
kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ,
kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=\E{^K,
mc0=\EP, mc4=^T, mc5=\Ed#, nel=\r\n$<3>,
pfloc=\EZ2%p1%{63}%+%c%p2%s\177,
pfx=\EZ1%p1%{63}%+%c%p2%s\177,
pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<7>,
rmacs=\EcD, rmam=\Ed., rmclk=\E`c, rmcup=\Ew1, rmir=\Er,
rmln=\EA11, rmxon=\Ec20, rs1=\E~!\E~4$<150>,
rs2=\EeG$<150>, rs3=\EwG\Ee($<200>,
sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%{48}%?%p2%t%{8}
%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t
%{64}%|%;%?%p7%t%{1}%|%;%c,
sgr0=\E(\EH\003\EG0\EcD, smacs=\EcE, smam=\Ed/,
smcup=\Ew0, smir=\Eq, smln=\EA10, smso=\EGt, smxon=\Ec21,
tbc=\E0, tsl=\EF, kF1=^A`\r, kF10=^Ai\r, kF11=^Aj\r,
kF12=^Ak\r, kF13=^Al\r, kF14=^Am\r, kF15=^An\r, kF16=^Ao\r,
kF2=^Aa\r, kF3=^Ab\r, kF4=^Ac\r, kF5=^Ad\r, kF6=^Ae\r,
kF7=^Af\r, kF8=^Ag\r, kF9=^Ah\r, use=adm+sgr,
#
wy60-w|wyse60-w|wyse 60 132-column,
cols#132, lw#7, nlab#16, wsl#97,
cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<16>, ip=$<5>,
rs2=\EeF$<150>\E`;$<150>, use=wy60,
#
wy60-25|wyse60-25|wyse 60 80-column 25-lines,
lh@, lines#25, lw@, nlab@,
pln@, rs3=\EwG\Ee)$<200>, use=wy60,
wy60-25-w|wyse60-25-w|wyse 60 132-column 25-lines,
lh@, lines#25, lw@, nlab@,
pln@, rs3=\EwG\Ee)$<200>, use=wy60-w,
#
wy60-42|wyse60-42|wyse 60 80-column 42-lines,
lines#42,
clear=\E+$<260>, cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<2>,
dch1=\EW$<16>, dl1=\ER$<11>, ed=\Ey$<260>, il1=\EE$<11>,
ind=\n$<9>, ip=$<5>, is1=\EcB2\EcC3, nel=\r\n$<6>,
ri=\Ej$<10>, rs3=\Ee*$<150>, use=wy60,
wy60-42-w|wyse60-42-w|wyse 60 132-column 42-lines,
cols#132, lw#7, nlab#16, wsl#97,
clear=\E+$<260>, cup=\Ea%i%p1%dR%p2%dC$<2>,
dch1=\EW$<19>, ed=\Ey$<260>, home=\036$<2>, ip=$<6>,
nel=\r\n$<11>, rs2=\EeF$<150>\E`;$<150>, use=wy60-42,
#
wy60-43|wyse60-43|wyse 60 80-column 43-lines,
lh@, lines#43, lw@, nlab@,
pln@, rs3=\Ee+$<150>, use=wy60-42,
wy60-43-w|wyse60-43-w|wyse 60 132-column 43-lines,
lh@, lines#43, lw@, nlab@,
pln@, rs3=\Ee+$<150>, use=wy60-42-w,
#
wy60-vb|wyse60-vb|Wyse 60 visible bell,
bel@, use=wy60,
wy60-w-vb|wy60-wvb|wyse60-wvb|Wyse 60 132-column visible bell,
bel@, use=wy60-w,
# The Wyse-99GT looks at lot like the Wyse 60 except that it
# does not have the 42/43 line mode. In the Wyse-60 the "lines"
# setup parameter controls the number of lines on the screen.
# For the Wyse 99GT the "lines" setup parameter controls the
# number of lines in a page. The screen can display 25 lines max.
# The Wyse-99GT also has personalities for the VT220 and
# Tektronix 4014. But this has no bearing on the native mode.
#
# (msgr) should be set but the clear screen fails when in
# alt-charset mode. Try \EcE\s\s\E+\s if the screen is really clear
# then set msgr, else use msgr@.
#
# u0 -> enter Tektronix mode
# u1 -> exit Tektronix mode
#
wy99gt|wyse99gt|Wyse 99gt,
msgr@,
clear=\E+$<130>, dch1=\EW$<7>, dl1=\ER$<4>, ed=\Ey$<130>,
el=\Et$<5>, flash=\E`8$<100/>\E`9, ht=\011$<1>,
il1=\EE$<4>, ind=\n$<4>, ip=$<2>, is3=\Ew0$<20>, nel@,
ri=\Ej$<3>, rmcup=\Ew0, rs2=\E`\:$<150>, smcup=\Ew1,
u0=\E~>\E8, u1=\E[42h, use=wy60,
#
wy99gt-w|wyse99gt-w|wyse 99gt 132-column,
cols#132, lw#7, nlab#16, wsl#97,
clear=\E+$<160>, cup=\Ea%i%p1%dR%p2%dC$<2>,
dch1=\EW$<9>, ed=\Ey$<160>, ip=$<4>, rs2=\E`;$<150>,
use=wy99gt,
#
wy99gt-25|wyse99gt-25|wyse 99gt 80-column 25-lines,
lh@, lines#25, lw@, nlab@,
pln@, rs2=\E`\:$<150>, rs3=\EwG\Ee)$<200>, use=wy99gt,
#
wy99gt-25-w|wyse99gt-25-w|wyse 99gt 132-column 25-lines,
lh@, lines#25, lw@, nlab@,
pln@, rs2=\E`;$<150>, use=wy99gt-w,
#
wy99gt-vb|wyse99gt-vb|Wyse 99gt visible bell,
bel@, use=wy99gt,
#
wy99gt-w-vb|wy99gt-wvb|wyse99gt-wvb|Wyse 99gt 132-column visible bell,
bel@, use=wy99gt-w,
# Can't set tabs! Other bugs (ANSI mode only):
# - can't redefine function keys (anyway, key redefinition in ANSI mode
# is too much complex to be described);
# - meta key can't be described (the terminal forgets it when reset);
# The xon-xoff handshaking can't be disabled while in ansi personality, so
# emacs can't work at speed greater than 9600 baud. No padding is needed at
# this speed.
# dch1 has been commented out because it causes annoying glittering when
# vi deletes one character at the beginning of a line with tabs in it.
# dch makes sysgen(1M) have a horrible behaviour when deleting
# a screen and makes screen(1) behave badly, so it is disabled too. The nice
# thing is that vi goes crazy if smir-rmir are present and both dch-dch1 are
# not, so smir and rmir are commented out as well.
# From: Francesco Potorti` <F.Potorti@cnuce.cnr.it>, 24 Aug 1998
wy99-ansi|Wyse WY-99GT in ansi mode (int'l PC keyboard),
am, km, mc5i, mir, msgr, xenl,
cols#80, it#8, lines#25, vt#3,
acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
clear=\E[H\E[J$<200>, cnorm=\E[34h\E[?25h, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD$<1>,
cub1=\010$<1>, cud=\E[%p1%dB, cud1=\ED,
cuf=\E[%p1%dC$<1>, cuf1=\E[C$<1>,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM,
cvvis=\E[34l\E[?25h, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M,
ech=\E[%p1%dX, ed=\E[J$<8*>, el=\E[K$<1>, el1=\E[1K$<1>,
enacs=\E)0, flash=\E[?5h$<30/>\E[?5l, home=\E[H,
hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL,
il1=\E[L, ind=\n$<1>, invis=\E[8m,
is2=\E7\E[1r\E8\E[2;3;4;13;20;34;39;36l\E[12;16;34h\E[?1;3;4
;5;10;18l\E[?7;8;25h\E>\E[?5W\E(B\017\E[4i,
kbs=^H, kcbt=\E[z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,
kcuu1=\EOA, kf1=\EOP, kf10=\E[21~, kf11=\E[23~,
kf12=\E[24~, kf17=\E[K, kf18=\E[31~, kf19=\E[32~, kf2=\EOQ,
kf20=\E[33~, kf21=\E[34~, kf22=\E[35~, kf23=\E[1~,
kf24=\E[2~, kf3=\EOR, kf4=\EOS, kf5=\E[M, kf6=\E[17~,
kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, ll=\E[24E, mc0=\E[?19h,
mc4=\E[4i, mc5=\E[5i, nel=\EE, prot=\E[1"q, rc=\E8,
rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmir=\E[4l,
rmkx=\E[?1l, rmso=\E[27m, rmul=\E[24m,
rs2=\E[61"p\E[40h\E[?6l\E[1r\E[2;3;4;13;20;34;39;36l\E[12;16
;34h\E[?1;3;4;5;10;18l\E[?7;8;25h\E>\E[?5W\E(B\017\E[24E
\E[4i,
sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%O%t;7%;%?%p4%t;5%;%?
%p5%t;2%;%?%p7%t;8%;m\E[%?%p8%t1%;"q%?%p9%t\016%e\017%;,
sgr0=\E[m\017\E["q, smacs=^N, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1h, smso=\E[7m, smul=\E[4m, vpa=\E[%i%p1%dd,
# This is the american terminal. Here tabs work fine.
# From: Francesco Potorti` <F.Potorti@cnuce.cnr.it>, 24 Aug 1998
wy99a-ansi|Wyse WY-99GT in ansi mode (US PC keyboard),
hts=\EH, is3=\E[?5l, rs3=\E[?5l, tbc=\E[3g, use=wy99-ansi,
# This terminal (firmware version 02) has a lot of bugs:
# - can't set tabs;
# - other bugs in ANSI modes (see above).
# This description disables handshaking when using cup. This is because
# GNU emacs doesn't like Xon-Xoff handshaking. This means the terminal
# cannot be used at speeds greater than 9600 baud, because at greater
# speeds handshaking is needed even for character sending. If you use
# DTR handshaking, you can use even greater speeds.
# From: Francesco Potorti` <F.Potorti@cnuce.cnr.it>, 24 Aug 1998
wy99f|wy99fgt|wy-99fgt|Wyse WY-99GT (int'l PC keyboard),
am, bw, hs, km, mc5i, mir, msgr, xon,
cols#80, it#8, lines#25, wsl#46,
acsc='x+y.w_vi~j(k'l&m%n)o9q*s8t-u.v\,w+x=, bel=^G,
blink=\EG2, cbt=\EI, civis=\E`0, clear=\E'\E(\032,
cnorm=\E`4\E`1, cr=\r, cub1=^H, cud1=\Ej, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
cvvis=\E`2\E`1, dch1=\EW, dim=\EGp, dl1=\ER, dsl=\EF\r,
ed=\EY$<8*>, el=\ET$<8>, enacs=\Ec@1J$<2000>,
flash=\E\^1$<30/>\E\^0, fsl=\r, home=^^, ht=^I, il1=\EE,
ind=\n, invis=\EG3,
is2=\Eu\Ee6\EC\EDF\Ec21\Ec31\Ec62\Ec72\Ee;\016\E'\EeL\E`9\E
\^0\E`1\E`4\Ee.\E`\:\Ee1\EG0\E(\Ed/\Ee4\Ed*\EO\E`I\Er
\Ee"\EcD\024,
ka1=^^, ka3=\EJ, kbs=^H, kc1=\ET, kc3=\EK, kcbt=\EI, kcub1=^H,
kcud1=\n, kcuf1=^L, kcuu1=^K, kf1=^A@\r, kf10=^AI\r,
kf11=^AJ\r, kf12=^AK\r, kf13=^A`\r, kf14=^Aa\r, kf15=^Ab\r,
kf16=^Ac\r, kf17=^Ad\r, kf18=^Ae\r, kf19=^Af\r, kf2=^AA\r,
kf20=^Ag\r, kf21=^Ah\r, kf22=^Ai\r, kf23=^Aj\r, kf24=^Ak\r,
kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r,
kf8=^AG\r, kf9=^AH\r, kprt=\EP, mc0=\EP, mc4=^T, mc5=\Ed#,
nel=^_, prot=\E), rev=\EG4, ri=\Ej, rmacs=\EcD, rmam=\Ed.,
rmcup=\Ec21\Ec31, rmir=\Er, rmso=\EG0, rmxon=\Ec20\Ec30,
rs2=\Eu\E~4\Ee6\EC\EDF\Ec21\Ec31\Ec62\Ec72\Ee;\016\E'\EeL\E`
9\E\^0\E`1\E`4\Ee.\E`\:\Ee)\Ew\EwG\Ew0\Ee1\EG0\E(\Ed/
\Ee4\Ed*\EO\E`I\Er\Ee"\Ec@0B\EcD\024,
sgr=\E(\EG%{48}%?%p1%p3%O%t%{4}%+%;%?%p2%t%{8}%+%;%?%p4%t
%{2}%+%;%?%p5%t%{64}%+%;%?%p7%t%{1}%+%;%c%?%p8%t\E)%;%?
%p9%t\EcE%e\EcD%;,
sgr0=\E(\EG0, smacs=\EcE, smam=\Ed/, smcup=\Ec20\Ec30,
smir=\Eq, smso=\EG4, smxon=\Ec21\Ec31, tsl=\EF,
# This is the american terminal. Here tabs work.
# From: Francesco Potorti` <F.Potorti@cnuce.cnr.it>, 24 Aug 1998
wy99fa|wy99fgta|wy-99fgta|Wyse WY-99GT (US PC keyboard),
hts=\E1, tbc=\E0, use=wy99f,
#
# The Wyse 160 is combination of the WY-60 and the WY-99gt.
# The reset strings are slow and the pad times very depending
# on other parameters such as font loading. I have tried
# to follow the following outline:
#
# <rs1> -> set personality
# <rs2> -> set number of columns
# <rs3> -> set number of lines
# <is1> -> select the proper font
# <is2> -> do the initialization
# <is3> -> set up display memory (2 pages)
#
# The display memory may be used for either text or graphics.
# When "Display Memory = Shared" the terminal will have more pages
# but garbage may be left on the screen when you switch from
# graphics to text. If "Display Memory = Unshared" then the
# text area will be only one page long.
#
# (wy160: we use \E{ rather than ^^ for home (both are documented) to avoid
# a bug reported by Robert Dunn, <rcdii@inlink.com> -- esr)
wy160|wyse160|Wyse 160,
am, bw, hs, km, mc5i, mir, msgr,
cols#80, lh#1, lines#24, lw#8, nlab#8, wsl#38,
acsc=+/\,.0[a2fxgqh1ihjYk?lZm@nEqDtCu4vAwBx3yszr{c~~,
bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\E+$<30>,
cnorm=\E`1, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW$<5>,
dclk=\E`b, dim=\EGp, dl1=\ER$<1>, dsl=\EF\r, ed=\EY$<30>,
el=\ET$<5>, flash=\E`8$<100/>\E`9, fsl=\r, home=\E{, ht=^I,
hts=\E1, il1=\EE$<1>, ind=\n$<1>, ip=$<2>, is1=\EcB0\EcC1,
is2=\Ed$\EcD\E'\Er\EH\003\Ed/\EO\Ee1\Ed*\E`@\E`9\E`1\016
\024\El,
is3=\Ew0$<100>, kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=^H,
kcud1=\n, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY,
kel=\ET, kent=\E7, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r,
kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r,
kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r,
kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ,
kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=\E{^K,
mc0=\EP, mc4=^T, mc5=\Ed#, nel=\r\n$<1>,
pfloc=\EZ2%p1%{63}%+%c%p2%s\177,
pfx=\EZ1%p1%{63}%+%c%p2%s\177,
pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<1>,
rmacs=\EcD, rmam=\Ed., rmclk=\E`c, rmcup=\Ew0, rmir=\Er,
rmln=\EA11, rmxon=\Ec20, rs1=\E~!\E~4$<70>,
rs2=\E`\:$<100>, rs3=\EwG\Ee($<140>,
sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%{48}%?%p2%t%{8}
%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t
%{64}%|%;%?%p7%t%{1}%|%;%c,
sgr0=\E(\EH\003\EG0\EcD, smacs=\EcE, smam=\Ed/,
smcup=\Ew1, smir=\Eq, smln=\EA10, smso=\EGt, smxon=\Ec21,
tbc=\E0, tsl=\EF, use=adm+sgr,
#
wy160-w|wyse160-w|wyse 160 132-column,
cols#132, lw#7, nlab#16, wsl#90,
cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<9>,
rs2=\EeF$<150>\E`;$<150>, use=wy160,
#
wy160-25|wyse160-25|wyse 160 80-column 25-lines,
lh@, lines#25, lw@, nlab@,
pln@, rs3=\EwG\Ee)$<200>, use=wy160,
wy160-25-w|wyse160-25-w|wyse 160 132-column 25-lines,
lh@, lines#25, lw@, nlab@,
pln@, rs3=\EwG\Ee)$<200>, use=wy160-w,
#
wy160-42|wyse160-42|wyse 160 80-column 42-lines,
lines#42,
clear=\E+$<50>, dl1=\ER$<2>, ed=\Ey$<50>, il1=\EE$<2>,
ind=\n$<2>, is1=\EcB2\EcC3, nel=\r\n$<2>, ri=\Ej$<2>,
rs3=\Ee*$<150>, use=wy160,
wy160-42-w|wyse160-42-w|wyse 160 132-column 42-lines,
cols#132, lw#7, nlab#16, wsl#90,
cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<8>, ip=$<3>,
rs2=\EeF$<150>\E`;$<150>, use=wy160-42,
#
wy160-43|wyse160-43|wyse 160 80-column 43-lines,
lh@, lines#43, lw@, nlab@,
pln@, rs3=\Ee+$<150>, use=wy160-42,
wy160-43-w|wyse160-43-w|wyse 160 132-column 43-lines,
lh@, lines#43, lw@, nlab@,
pln@, rs3=\Ee+$<150>, use=wy160-42-w,
#
wy160-vb|wyse160-vb|Wyse 160 visible bell,
bel@, use=wy160,
wy160-w-vb|wy160-wvb|wyse160-wvb|Wyse 160 132-column visible bell,
bel@, use=wy160-w,
#
# The Wyse 75 is a vt100 lookalike without advanced video.
#
# The Wyse 75 can support one attribute (e.g. Dim, Inverse,
# Underline) without magic cookies. The following description
# uses this capability, but when more than one attribute is
# put on the screen at once, all attributes will be changed
# to be the same as the last attribute given.
# The Wyse 75 can support more attributes when used with magic
# cookies. The wy75-mc terminal description uses magic cookies
# to correctly handle multiple attributes on a screen.
#
wy75|wyse75|wyse 75,
am, hs, mc5i, mir, msgr, xenl, xon,
cols#80, lines#24, ma#1, pb#1201, wsl#78,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J$<30>,
- cnorm=\E[?25h, cr=\r, csr=\E[%i%p1%d;%p2%dr$<2>,
- cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
- cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
- cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP$<3*>,
- dch1=\E[P$<3>, dim=\E[0t\E[2m, dl=\E[%p1%dM$<1*>,
- dl1=\E[M, dsl=\E[>\,\001\001\E[>-\001\001,
- ech=\E[%p1%dX, ed=\E[J$<30>, el=\E[K$<3>, el1=\E[1K$<3>,
- enacs=\E)0, flash=\E[30h\E\,$<250/>\E[30l, fsl=^A,
- home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH,
- ich=\E[%p1%d@$<1*>, il=\E[%p1%dL$<2*>, il1=\E[L$<2>,
- ind=\n$<2>, ip=$<1>,
+ bel=^G, cbt=\E[Z, clear=\E[H\E[J$<30>, cr=\r,
+ csr=\E[%i%p1%d;%p2%dr$<2>, cub=\E[%p1%dD, cub1=^H,
+ cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
+ cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
+ dch=\E[%p1%dP$<3*>, dch1=\E[P$<3>, dim=\E[0t\E[2m,
+ dl=\E[%p1%dM$<1*>, dl1=\E[M,
+ dsl=\E[>\,\001\001\E[>-\001\001, ech=\E[%p1%dX,
+ ed=\E[J$<30>, el=\E[K$<3>, el1=\E[1K$<3>, enacs=\E)0,
+ flash=\E[30h\E\,$<250/>\E[30l, fsl=^A, home=\E[H,
+ hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@$<1*>,
+ il=\E[%p1%dL$<2*>, il1=\E[L$<2>, ind=\n$<2>, ip=$<1>,
is1=\E[2;4;20;30l\E[?1;10l\E[12h\E[?7;8;25h,
is2=\E>\E(B\E)0\017, is3=\E[m, kbs=^H, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdl1=\E[M, kel=\E[K,
kf1=\E[?5i, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[?3i,
kf20=\E[34~, kf21=\E[35~, kf3=\E[2i, kf4=\E[@, kf5=\E[M,
kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~,
khlp=\E[28~, khome=\E[H, kich1=\E[@, kil1=\E[L, knp=\E[6~,
kpp=\E[5~, kprt=\E[?5i, kslt=\E[4~, mc0=\E[0i, mc4=\E[4i,
mc5=\E[5i, rc=\E8, rev=\E[1t\E[7m, ri=\EM$<2>, rmacs=^O,
rmam=\E[?7l, rmir=\E[4l, rmkx=\E>, rmso=\E[m, rmul=\E[m,
rs1=\E[13l\E[3l\E!p, rs2=\E[35h\E[?3l$<80>, rs3=\E[?5l,
sc=\E7,
sgr=%?%p5%t\E[0t%;%?%p3%p1%|%t\E[1t%;%?%p2%t\E[2t%;%?%p4%t
\E[3t%;%?%p1%p2%p3%p4%p5%|%|%|%|%t\E[7m%e\E[m%;%?%p9%t
\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1l\E[?7h\E=, smso=\E[1t\E[7m, smul=\E[2t\E[4m,
- tbc=\E[3g, tsl=\E[>\,\001, use=vt220+keypad,
+ tbc=\E[3g, tsl=\E[>\,\001, use=vt220+cvis,
+ use=vt220+keypad,
#
# This terminal description uses the non-hidden attribute mode
# (with magic cookie).
#
wy75-mc|wyse75-mc|wyse 75 with magic cookies,
msgr@,
ma@, xmc#1,
blink=\E[2p, dim=\E[1p, invis=\E[4p, is3=\E[m\E[p,
rev=\E[16p, rmacs=\E[0p\017, rmso=\E[0p, rmul=\E[0p,
sgr=\E[%{0}%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{16}%|%;%?
%p4%t%{2}%|%;%?%p1%p5%|%t%{1}%|%;%?%p7%t%{4}%|%;%dp%?%p9
%t\016%e\017%;,
sgr0=\E[0p\017, smacs=\E[0p\016, smso=\E[17p, smul=\E[8p,
use=wy75,
wy75-vb|wyse75-vb|wyse 75 with visible bell,
pb@,
bel@, use=wy75,
wy75-w|wyse75-w|wyse 75 in 132 column mode,
cols#132, wsl#130,
rs2=\E[35h\E[?3h$<80>, use=wy75,
wy75-wvb|wyse75-wvb|wyse 75 with visible bell 132 columns,
pb@,
bel@, use=wy75-w,
#
# Wyse 85 emulating a vt220 7 bit mode.
# 24 line screen with status line.
#
# The vt220 mode permits more function keys but it wipes out
# the escape key. I strongly recommend that <f11> be set to
# escape (esc).
# The terminal may have to be set for 8 data bits and 2 stop
# bits for the arrow keys to work.
# The Wyse 85 runs faster with XON/XOFF enabled. Also the
# <dch> and <ich> work best when XON/XOFF is set. <ich> and
# <dch> leave trash on the screen when used without XON/XOFF.
#
wy85|wyse85|wyse 85,
am, hs, mc5i, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, wsl#80,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[J$<110>, cnorm=\E[?25h, cr=\r,
- csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
- cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
- cup=\E[%i%p1%d;%p2%dH$<1>, cuu=\E[%p1%dA, cuu1=\E[A,
- dch=\E[%p1%dP$<3*>, dch1=\E[P$<3>, dim=\E[2m,
- dl=\E[%p1%dM$<3*>, dl1=\E[M$<3>, dsl=\E[40l,
- ech=\E[%p1%dX, ed=\E[J$<110>, el=\E[K$<1>, el1=\E[1K,
- enacs=\E)0, flash=\E[30h\E\,$<300/>\E[30l,
- fsl=\E[1;24r\E8, home=\E[H, ht=\011$<1>, hts=\EH,
- ich=\E[%p1%d@$<4*>, il=\E[%p1%dL$<5*>, il1=\E[L$<5>,
- ind=\n$<3>, invis=\E[8m, ip=$<3>, is1=\E[62;1"p\E[?5W,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
+ clear=\E[H\E[J$<110>, cr=\r, csr=\E[%i%p1%d;%p2%dr,
+ cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
+ cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH$<1>,
+ cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP$<3*>,
+ dch1=\E[P$<3>, dim=\E[2m, dl=\E[%p1%dM$<3*>,
+ dl1=\E[M$<3>, dsl=\E[40l, ech=\E[%p1%dX, ed=\E[J$<110>,
+ el=\E[K$<1>, el1=\E[1K, enacs=\E)0,
+ flash=\E[30h\E\,$<300/>\E[30l, fsl=\E[1;24r\E8,
+ home=\E[H, ht=\011$<1>, hts=\EH, ich=\E[%p1%d@$<4*>,
+ il=\E[%p1%dL$<5*>, il1=\E[L$<5>, ind=\n$<3>, invis=\E[8m,
+ ip=$<3>, is1=\E[62;1"p\E[?5W,
is2=\E[2;4;20;30l\E[?1;4;10;16l\E[12h\E[?7;8;25h$<16>,
is3=\E>\E(B\E)0\017\E[m, kbs=^H, kcub1=\E[D, kcud1=\E[B,
- kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
- kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
- kf19=\E[33~, kf20=\E[34~, kf6=\E[17~, kf7=\E[18~,
- kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~,
- khome=\E[26~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
- kslt=\E[4~, lf1=PF1, lf2=PF2, lf3=PF3, lf4=PF4, mc0=\E[0i,
- mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m, ri=\EM$<3>,
- rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmkx=\E>, rmso=\E[m,
- rmul=\E[m, rs1=\E[13l\E[3l\E!p, rs2=\E[35h\E[?3l$<70>,
- rs3=\E[?5l, sc=\E7,
+ kcuf1=\E[C, kcuu1=\E[A, kf10=\E[21~, kf11=\E[23~,
+ kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
+ kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
+ kf20=\E[34~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
+ kf9=\E[20~, khlp=\E[28~, khome=\E[26~, lf1=PF1, lf2=PF2,
+ lf3=PF3, lf4=PF4, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rc=\E8,
+ rev=\E[7m, ri=\EM$<3>, rmacs=^O, rmam=\E[?7l, rmir=\E[4l,
+ rmkx=\E>, rmso=\E[m, rmul=\E[m, rs1=\E[13l\E[3l\E!p,
+ rs2=\E[35h\E[?3l$<70>, rs3=\E[?5l, sc=\E7,
sgr=\E[0%?%p2%t;4%;%?%p3%p1%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?
%p6%t;1%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1l\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
- tsl=\E[40h\E7\E[25;%i%p1%dH, use=vt220+keypad,
+ tsl=\E[40h\E7\E[25;%i%p1%dH, use=vt220+vtedit,
+ use=vt220+cvis, use=vt220+keypad,
#
# Wyse 85 with visual bell.
wy85-vb|wyse85-vb|wyse 85 with visible bell,
bel@, flash=\E[30h\E\,$<300/>\E[30l, use=wy85,
#
# Wyse 85 in 132-column mode.
wy85-w|wyse85-w|wyse 85 in 132-column mode,
cols#132, wsl#132,
rs2=\E[35h$<70/>\E[?3h, use=wy85,
#
# Wyse 85 in 132-column mode with visual bell.
wy85-wvb|wyse85-wvb|wyse 85 with visible bell 132-columns,
bel@, use=wy85-w,
# From: Kevin Turner <kevint@aracnet.com>, 12 Jul 1998
# This copes with an apparent firmware bug in the wy85. He writes:
# "What I did was change leave the terminal cursor keys set to Normal
# (instead of application), and change \E[ to \233 for all the keys in
# terminfo. At one point, I found some reference indicating that this
# terminal bug (not sending \E[) was acknowledged by Wyse (so it's not just
# me), but I can't find that and the server under my bookmark to "Wyse
# Technical" isn't responding. So there's the question of whether the wy85
# terminfo should reflect the manufacturer's intended behaviour of the terminal
# or the actual."
wy85-8bit|wyse85-8bit|wyse 85 in 8-bit mode,
am, hs, mc5i, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, wsl#80,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[J$<110>, cnorm=\E[?25h, cr=\r,
- csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
- cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
- cup=\E[%i%p1%d;%p2%dH$<1>, cuu=\E[%p1%dA, cuu1=\E[A,
- dch=\E[%p1%dP$<3*>, dch1=\E[P$<3>, dim=\E[2m,
- dl=\E[%p1%dM$<3*>, dl1=\E[M$<3>, dsl=\E[40l,
- ech=\E[%p1%dX, ed=\E[J$<110>, el=\E[K$<1>, el1=\E[1K,
- enacs=\E)0, flash=\E[30h\E\,$<300/>\E[30l,
- fsl=\E[1;24r\E8, home=\E[H, ht=\011$<1>, hts=\EH,
- ich=\E[%p1%d@$<4*>, il=\E[%p1%dL$<5*>, il1=\E[L$<5>,
- ind=\n$<3>, invis=\E[8m, ip=$<3>, is1=\E[62;1"p\E[?5W,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
+ clear=\E[H\E[J$<110>, cr=\r, csr=\E[%i%p1%d;%p2%dr,
+ cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
+ cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH$<1>,
+ cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP$<3*>,
+ dch1=\E[P$<3>, dim=\E[2m, dl=\E[%p1%dM$<3*>,
+ dl1=\E[M$<3>, dsl=\E[40l, ech=\E[%p1%dX, ed=\E[J$<110>,
+ el=\E[K$<1>, el1=\E[1K, enacs=\E)0,
+ flash=\E[30h\E\,$<300/>\E[30l, fsl=\E[1;24r\E8,
+ home=\E[H, ht=\011$<1>, hts=\EH, ich=\E[%p1%d@$<4*>,
+ il=\E[%p1%dL$<5*>, il1=\E[L$<5>, ind=\n$<3>, invis=\E[8m,
+ ip=$<3>, is1=\E[62;1"p\E[?5W,
is2=\E[2;4;20;30l\E[?1;4;10;16l\E[12h\E[?7;8;25h$<16>,
is3=\E>\E(B\E)0\017\E[m, ka1=\EOw, ka3=\EOy, kb2=\EOu,
kbs=^H, kc1=\EOq, kc3=\EOs, kcub1=\233D, kcud1=\233B,
kcuf1=\233C, kcuu1=\233A, kdch1=\2333~, kent=\EOM,
kf1=\EOP, kf10=\23321~, kf11=\23323~, kf12=\23324~,
kf13=\23325~, kf14=\23326~, kf15=\23328~, kf16=\23329~,
kf17=\23331~, kf18=\23332~, kf19=\23333~, kf2=\EOQ,
kf20=\23334~, kf3=\EOR, kf4=\EOS, kf6=\23317~, kf7=\23318~,
kf8=\23319~, kf9=\23320~, kfnd=\2331~, khlp=\23328~,
khome=\23326~, kich1=\2332~, knp=\2336~, kpp=\2335~,
kslt=\2334~, lf1=PF1, lf2=PF2, lf3=PF3, lf4=PF4, mc0=\E[0i,
mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m, ri=\EM$<3>,
rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmkx=\E>, rmso=\E[m,
rmul=\E[m, rs1=\E[13l\E[3l\E!p, rs2=\E[35h\E[?3l$<70>,
rs3=\E[?5l, sc=\E7,
sgr=\E[0%?%p2%t;4%;%?%p3%p1%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?
%p6%t;1%;%?%p7%t;8%;+m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1l\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
- tsl=\E[40h\E7\E[25;%i%p1%dH,
+ tsl=\E[40h\E7\E[25;%i%p1%dH, use=vt220+cvis,
#
# Wyse 185 emulating a vt320 7 bit mode.
#
# This terminal always displays 25 lines. These lines may be used
# as 24 data lines and a terminal status line (top or bottom) or
# 25 data lines. The 48 and 50 line modes change the page size
# and not the number of lines on the screen.
#
# The Compose Character key can be used as a meta key if changed
# by set-up.
#
wy185|wyse185|wyse 185,
am, hs, km, mc5i, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, wsl#80,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
clear=\E[H\E[J$<40>, cnorm=\E[34h\E[?25h, cr=\r,
csr=\E[%i%p1%d;%p2%dr$<20>, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?25h\E[34l, dch=\E[%p1%dP$<3>, dch1=\E[P$<3>,
dim=\E[2m, dl=\E[%p1%dM$<2*>, dl1=\E[M$<2>,
dsl=\E7\E[99;0H\E[K\E8, ech=\E[%p1%dX, ed=\E[J$<40>,
el=\E[K, el1=\E[1K, enacs=\E)0,
flash=\E[30h\E\,$<100/>\E[30l, fsl=\E[1;24r\E8,
home=\E[H, hpa=\E[%i%p1%d`, ht=^I, hts=\EH,
ich=\E[%p1%d@$<2>, il=\E[%p1%dL$<3*>, il1=\E[L$<3>,
ind=\n$<2>, invis=\E[8m, ip=$<4>, is1=\E[?5W,
is2=\E[2;4;20;30l\E[?1;4;10;16l\E[12h\E[?7;8;25h,
is3=\E>\E(B\E)0\017\E[m, kbs=^H, kcbt=\E[Z, kcub1=\E[D,
- kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kf1=\EOP,
- kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
- kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
- kf18=\E[32~, kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf3=\EOR,
- kf4=\EOS, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- kfnd=\E[1~, khlp=\E[28~, khome=\E[26~, kich1=\E[2~,
- knp=\E[6~, kpp=\E[5~, kslt=\E[4~, lf1=PF1, lf2=PF2, lf3=PF3,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf10=\E[21~,
+ kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
+ kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
+ kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS,
+ kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
+ khlp=\E[28~, khome=\E[26~, lf1=PF1, lf2=PF2, lf3=PF3,
lf4=PF4, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m,
ri=\EM$<2>, rmacs=^O, rmam=\E[?7l, rmcup=\E[ R, rmir=\E[4l,
rmkx=\E>, rmso=\E[27m, rmul=\E[24m,
rs1=\E[13l\E[3l\E\\\E[63;1"p\E[!p, rs2=\E[35h\E[?3l,
rs3=\E[?5l\E[47h\E[40l\E[r, sc=\E7,
sgr=\E[0%?%p2%t;4%;%?%p3%p1%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?
%p6%t;1%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E[ Q,
smir=\E[4h, smkx=\E[?1l\E=, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, tsl=\E7\E[99;%i%p1%dH, vpa=\E[%i%p1%dd,
- use=vt220+keypad,
+ use=vt220+vtedit, use=vt220+keypad,
#
# Wyse 185 with 24 data lines and top status (terminal status)
wy185-24|wyse185-24|wyse 185 with 24 data lines,
hs@,
dsl@, fsl@, rs3=\E[?5l\E[47h\E[40l\E[1;24r, tsl@,
use=wy185,
#
# Wyse 185 with visual bell.
wy185-vb|wyse185-vb|wyse 185+flash,
bel@, use=wy185,
#
# Wyse 185 in 132-column mode.
wy185-w|wyse185-w|wyse 185 in 132-column mode,
cols#132, wsl#132,
dch=\E[%p1%dP$<7>, dch1=\E[P$<7>, ich=\E[%p1%d@$<7>,
ip=$<7>, rs2=\E[35h\E[?3h, use=wy185,
#
# Wyse 185 in 132-column mode with visual bell.
wy185-wvb|wyse185-wvb|wyse 185+flash+132 cols,
bel@, use=wy185-w,
# wy325 terminfo entries
# Done by Joe H. Davis 3-9-92
# lines 25 columns 80
#
wy325|wyse325|Wyse epc,
am, bw, hs, mc5i, mir,
cols#80, lh#1, lines#24, lw#8, nlab#8, pb#9601, wsl#45,
acsc=+/\,.0[a2fxgqh1ihjYk?lZm@nEqDtCu4vAwBx3yszr{c~~,
bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\E+$<50>,
cnorm=\E`1, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW$<7>,
dim=\EGp, dl1=\ER$<3>, dsl=\EF\r, ed=\EY$<50>, el=\ET$<4>,
flash=\E`8$<100/>\E`9, fsl=\r, home=^^, ht=^I, hts=\E1,
il1=\EE$<3>, ind=\n$<3>, ip=$<2>, is1=\EcB0\EcC1,
is2=\EcD\E'\Er\EH\003\Ed/\EO\Ee1\Ed*\E`@\E`9\E`1\016\024
\El,
is3=\Ew0$<16>, kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=^H,
kcud1=\n, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY,
kel=\ET, kent=\E7, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r,
kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r,
kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r,
kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\Eq,
kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=^^^K,
mc0=\EP, mc4=^T, mc5=\Ed#,
pfloc=\EZ2%p1%{63}%+%c%p2%s\177,
pfx=\EZ1%p1%{63}%+%c%p2%s\177,
pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<2>,
rmacs=\EcD, rmam=\Ed., rmcup=\Ew0, rmir=\Er, rmln=\EA11,
rs1=\E~!\E~4$<30>, rs2=\EeF\E`\:$<70>,
rs3=\EwG\Ee($<100>,
sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%{48}%?%p2%t%{8}
%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t
%{64}%|%;%?%p7%t%{1}%|%;%c,
sgr0=\E(\EH\003\EG0\EcD, smacs=\EcE, smam=\Ed/,
smcup=\Ew1, smir=\Eq, smln=\EA10, smso=\EGt, tbc=\E0,
tsl=\EF, use=adm+sgr,
#
# lines 24 columns 80 vb
#
wy325-vb|wyse325-vb|wyse-325 with visual bell,
bel@, use=wy325,
#
# lines 24 columns 132
#
wy325-w|wyse325-w|wy325w-24|wyse-325 in wide mode,
cols#132, lw#7, nlab#16, wsl#97,
cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<12>, ip=$<4>,
rs2=\E`;$<70>, use=wy325,
#
# lines 25 columns 80
#
wy325-25|wyse325-25|wy325-80|wyse-325|wyse-325 25 lines,
lh@, lines#25, lw@, nlab@,
pln@, rs3=\EwG\Ee)$<100>, use=wy325,
#
# lines 25 columns 132
#
wy325-25w|wyse325-25w|wy325 132 columns,
lh@, lines#25, lw@, nlab@,
pln@, rs3=\EwG\Ee)$<100>, use=wy325-w,
#
# lines 25 columns 132 vb
#
wy325-w-vb|wy325-wvb|wyse325-wvb|wyse-325 wide mode reverse video,
bel@, use=wy325-w,
#
# lines 42 columns 80
#
wy325-42|wyse325-42|wyse-325 42 lines,
lh@, lines#42, lw@, nlab@,
pln@, rs3=\EwG\Ee)$<100>, use=wy325,
#
# lines 42 columns 132
#
wy325-42w|wyse325-42w|wyse-325 42 lines wide mode,
lh@, lines#42, lw@, nlab@,
pln@, rs3=\EwG\Ee)$<100>, use=wy325-w,
#
# lines 42 columns 132 vb
#
wy325-42w-vb|wy325-42wvb|wyse-325 42 lines wide mode visual bell,
bel@, use=wy325-w,
#
# lines 43 columns 80
#
wy325-43|wyse325-43|wyse-325 43 lines,
lh@, lines#43, lw@, nlab@,
pln@, use=wy325,
#
# lines 43 columns 132
#
wy325-43w|wyse325-43w|wyse-325 43 lines wide mode,
lh@, lines#43, lw@, nlab@,
pln@, rs3=\EwG\Ee)$<100>, use=wy325-w,
#
# lines 43 columns 132 vb
#
wy325-43w-vb|wy325-43wvb|wyse-325 43 lines wide mode visual bell,
bel@, use=wy325-w,
# Wyse 370 -- 24 line screen with status line.
#
# The terminal may have to be set for 8 data bits and 2 stop
# bits for the arrow keys to work.
#
# If you change keyboards the terminal will send different
# escape sequences.
# The following definition is for the basic terminal without
# function keys.
#
# <u0> -> enter Tektronix 4010/4014 mode
# <u1> -> exit Tektronix 4010/4014 mode
# <u2> -> enter ASCII mode (from any ANSI mode)
# <u3> -> exit ASCII mode (goto native ANSI mode)
# <u4> -> enter Tek 4207 ANSI mode (from any ANSI mode)
# <u5> -> exit Tek 4207 mode (goto native ANSI mode)
#
# Bug: The <op> capability resets attributes.
wy370-nk|wyse 370 without function keys,
am, ccc, hs, mc5i, mir, msgr, xenl, xon,
colors#64, cols#80, it#8, lines#24, ncv#48, pairs#64, wsl#80,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
clear=\E[H\E[J$<40>, cnorm=\E[34h\E[?25h, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH$<1>, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?25h\E[34l, dch=\E[%p1%dP$<1*>, dch1=\E[P$<1>,
dclk=\E[31h, dim=\E[2m, dl=\E[%p1%dM$<2*>, dl1=\E[M$<2>,
dsl=\E[40l, ech=\E[%p1%dX$<.1*>, ed=\E[J$<40>,
el=\E[K$<10>, el1=\E[1K$<12>, enacs=\E)0,
flash=\E[30h\E\,$<300/>\E[30l, fsl=\E[1;24r\E8,
home=\E[H, hpa=\E[%i%p1%d`, ht=\011$<1>, hts=\EH,
ich=\E[%p1%d@$<1*>, il=\E[%p1%dL$<2*>, il1=\E[L$<2>,
ind=\n$<2>,
initc=\E[66;%p1%d;%?%p2%{250}%<%t%{0}%e%p2%{500}%<%t%{16}%e
%p2%{750}%<%t%{32}%e%{48}%;%?%p3%{250}%<%t%{0}%e%p3
%{500}%<%t%{4}%e%p3%{750}%<%t%{8}%e%{12}%;%?%p4%{250}
%<%t%{0}%e%p4%{500}%<%t%{1}%e%p4%{750}%<%t%{2}%e%{3}%;
%{1}%+%+%+%dw,
invis=\E[8m, ip=$<1>, is1=\E[90;1"p\E[?5W$<6>,
is2=\E[2;4;20;30;40l\E[?1;10;16l\E[12h\E[?7;8;25h,
is3=\E>\017\E)0\E(B\E[63;0w\E[m, mc0=\E[0i, mc4=\E[4i,
mc5=\E[5i,
oc=\E[60w\E[63;0w\E[66;1;4w\E[66;2;13w\E[66;3;16w\E[66;4;49w
\E[66;5;51w\E[66;6;61w\E[66;7;64w,
op=\E[m, rc=\E8, rev=\E[7m, ri=\EM$<2>, rmacs=^O,
rmam=\E[?7l, rmclk=\E[31l, rmcup=\E[ R, rmir=\E[4l,
rmkx=\E>, rmso=\E[27m, rmul=\E[24m,
rs1=\E[13l\E[3l\E!p\E[?4i, rs2=\E[35h\E[?3l$<8>,
rs3=\E[?5l, sc=\E7, setb=\E[62;%p1%dw, setf=\E[61;%p1%dw,
sgr=\E[0%?%p2%t;4%;%?%p3%p1%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?
%p6%t;1%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E[ Q,
smir=\E[4h, smkx=\E[?1l\E=, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, tsl=\E[40l\E[40h\E7\E[99;%i%p1%dH,
u0=\E[?38h\E8, u1=\E[?38l\E)0, u2=\E[92;52"p, u3=\E~B,
u4=\E[92;76"p, u5=\E%!1\E[90;1"p, vpa=\E[%i%p1%dd,
#
# Function key set for the ASCII (wy-50 compatible) keyboard
# This is the default 370.
#
wy370|wyse370|wy370-101k|Wyse 370 with 101 key keyboard,
kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kdch1=\EOQ, kdl1=\EOQ, kent=\EOM, kf1=\E[?4i,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf2=\E[?3i,
kf3=\E[2i, kf4=\E[@, kf5=\E[M, kf6=\E[17~, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, khome=\E[H, kich1=\EOP, kil1=\EOP,
knp=\E[U, kpp=\E[V, use=wy370-nk,
#
# Function key set for the VT-320 (and wy85) compatible keyboard
#
wy370-105k|Wyse 370 with 105 key keyboard,
kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
- kdch1=\E[3~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
- kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
- kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf20=\E[34~,
- kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~,
- khlp=\E[28~, khome=\E[26~, kich1=\E[2~, knp=\E[6~,
- kpp=\E[5~, kslt=\E[4~, lf1=PF1, lf2=PF2, lf3=PF3, lf4=PF4,
- use=wy370-nk, use=vt220+keypad,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
+ kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
+ kf18=\E[32~, kf19=\E[33~, kf20=\E[34~, kf6=\E[17~,
+ kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~,
+ khlp=\E[28~, khome=\E[26~, lf1=PF1, lf2=PF2, lf3=PF3,
+ lf4=PF4, use=vt220+vtedit, use=wy370-nk,
+ use=vt220+keypad,
#
# Function key set for the PC compatible keyboard
#
wy370-EPC|Wyse 370 with 102 key keyboard,
kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kend=\E[1~, kent=\EOM, kf1=\EOP, kf10=\E[21~,
kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
kf5=\E[M, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
khome=\E[H, kich1=\E[2~, knp=\E[U, kpp=\E[V, use=wy370-nk,
#
# Wyse 370 with visual bell.
wy370-vb|Wyse 370 with visible bell,
bel@, use=wy370,
#
# Wyse 370 in 132-column mode.
wy370-w|Wyse 370 in 132-column mode,
cols#132, wsl#132,
rs2=\E[35h\E[?3h$<70>, use=wy370,
#
# Wyse 370 in 132-column mode with visual bell.
wy370-wvb|Wyse 370 with visible bell 132-columns,
flash=\E[30h\E\,$<300/>\E[30l, use=wy370-w,
wy370-rv|Wyse 370 reverse video,
rs3=\E[32h\E[?5h, use=wy370,
#
# Wyse 99gt Tektronix 4010/4014 emulator,
#
wy99gt-tek|Wyse 99gt Tektronix 4010/4014 emulator,
am, os,
cols#74, lines#35,
bel=^G, clear=\E^L, cr=\r, cub1=^H, cud1=\n, cuf1=\s,
cup=\035%{3040}%{89}%p1%*%-%Py%p2%{55}%*%Px%gy%{128}%/%{31}
%&%{32}%+%c%gy%{3}%&%{4}%*%gx%{3}%&%+%{96}%+%c%gy%{004}
%/%{31}%&%{96}%+%c%gx%{128}%/%{31}%&%{32}%+%c%gx%{004}%/
%{31}%&%{64}%+%c\037,
cuu1=^K, ff=^L,
hd=\036HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
\037,
home=^]7`x @\037,
hu=\036DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
\037,
is2=\E8, nel=\r\n, u0=\E~>\E8, u1=\E[42h,
#
# Wyse 160 Tektronix 4010/4014 emulator,
#
wy160-tek|Wyse 160 Tektronix 4010/4014 emulator,
cup=\035%{3103}%{91}%p1%*%-%Py%p2%{55}%*%Px%gy%{128}%/%{31}
%&%{32}%+%c%gy%{3}%&%{4}%*%gx%{3}%&%+%{96}%+%c%gy%{004}
%/%{31}%&%{96}%+%c%gx%{128}%/%{31}%&%{32}%+%c%gx%{004}%/
%{31}%&%{64}%+%c\037,
home=^]8`g @\037, use=wy99gt-tek,
#
# Wyse 370 Tektronix 4010/4014 emulator,
#
wy370-tek|Wyse 370 Tektronix 4010/4014 emulator,
am, os,
cols#80, lines#36,
bel=^G, clear=\E^L, cr=\r, cub1=^H, cud1=\n, cuf1=\s,
cup=\035%{775}%{108}%p1%*%{5}%/%-%Py%p2%{64}%*%{4}%+%{5}%/
%Px%gy%{32}%/%{31}%&%{32}%+%c%gy%{31}%&%{96}%+%c%gx%{32}
%/%{31}%&%{32}%+%c%gx%{31}%&%{64}%+%c\037,
cuu1=^K, ff=^L,
hd=\036HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
\037,
home=^]8g @\037,
hu=\036DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
\037,
is2=\E8, kbs=^H, kcub1=^H, kcud1=\n, kcuf1=^I, kcuu1=^K,
nel=\r\n, u0=\E[?38h\E8, u1=\E[?38l\E)0,
# Vendor-supplied Wyse entries end here.
#
#TITLE: TERMINFO ENTRY WY520
#DATE: 8/5/93
# The WY520 terminfo is based on the WY285 entry published on the WYSE
# BBS with the addition of more function keys and special keys.
#
# rs1 -> set personality
# rs2 -> set number of columns
# rs3 -> set number of lines
# is1 -> select the proper font
# is2 -> do the initialization
# is3 -> If this string is empty then rs3 gets sent.
#
# Wyse 520 emulating a vt420 7 bit mode with default ANSI keyboard
# - The BS key is programmed to generate BS in smcup since
# is2 doesn't seem to work.
# - Remove and shift/Remove: delete a character
# - Insert : enter insert mode
# - Find : delete to end of file
# - Select : clear a line
# - F11, F12, F13: send default sequences (not ESC, BS, LF)
# - F14 : Home key
# - Bottom status line (host writable line) is used.
# - smkx,rmkx are removed because this would put the numeric
# keypad in Dec application mode which doesn't seem to work
# with SCO applications.
#
wy520|wyse520|wyse 520,
am, hs, km, mc5i, mir, xenl, xon,
cols#80, it#8, lines#24, wsl#80,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
clear=\E[H\E[J$<40>, cnorm=\E[34h\E[?25h, cr=\r,
csr=\E[%i%p1%d;%p2%dr$<20>, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?25h\E[34l, dch=\E[%p1%dP$<3>, dch1=\E[P$<30>,
dim=\E[2m, dl=\E[%p1%dM$<2*>, dl1=\E[M$<2>, dsl=\E[0$~,
ech=\E[%p1%dX, ed=\E[J$<40>, el=\E[K, el1=\E[1K,
enacs=\E)0, fsl=\E[0$}, home=\E[H, hpa=\E[%i%p1%d`, ht=^I,
hts=\EH, ich=\E[%p1%d@$<2>, il=\E[%p1%dL$<3*>,
il1=\E[L$<3>, ind=\n$<2>, invis=\E[8m, ip=$<4>, is1=\E[?5W,
is2=\E[2;4;20;30l\E[?1;4;10;16l\E[12h\E[?7;8;25;67h,
is3=\E>\E(B\E)0\017\E[m, kbs=^H, kcbt=\E[Z, kcub1=\E[D,
- kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, ked=\E[1~,
- kel=\E[4~, kent=\EOM, kf10=\E[21~, kf11=\E[23~,
- kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
- kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
- kf20=\E[34~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
- kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~, khome=\E[26~,
- kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, lf1=PF1,
- lf2=PF2, lf3=PF3, lf4=PF4, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i,
- rc=\E8, rev=\E[7m, ri=\EM$<2>, rmacs=^O, rmam=\E[?7l,
- rmcup=\E[ R, rmir=\E[4l, rmso=\E[m, rmul=\E[24m,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, ked=\E[1~, kel=\E[4~,
+ kent=\EOM, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
+ kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
+ kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf20=\E[34~,
+ kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
+ khlp=\E[28~, khome=\E[26~, lf1=PF1, lf2=PF2, lf3=PF3,
+ lf4=PF4, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m,
+ ri=\EM$<2>, rmacs=^O, rmam=\E[?7l, rmcup=\E[ R, rmir=\E[4l,
+ rmso=\E[m, rmul=\E[24m,
rs1=\E[13l\E[3l\E\\\E[63;1"p\E[!p, rs2=\E[35h\E[?3l,
rs3=\E[?5l\E[47h\E[40l\E[r, sc=\E7,
sgr=\E[0%?%p2%t;4%;%?%p3%p1%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?
%p6%t;1%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h,
smcup=\E[ Q\E[?67;8h, smir=\E[4h, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, tsl=\E[2$~\E[1$}\E[%i%p1%d`,
- vpa=\E[%i%p1%dd, use=vt220+keypad,
+ vpa=\E[%i%p1%dd, use=vt220+vtedit, use=vt220+keypad,
#
# Wyse 520 with 24 data lines and status (terminal status)
wy520-24|wyse520-24|wyse 520 with 24 data lines,
hs@,
dsl@, fsl@, rs3=\E[?5l\E[47h\E[40l\E[1;24r, tsl@,
use=wy520,
#
# Wyse 520 with visual bell.
wy520-vb|wyse520-vb|wyse 520 with visible bell,
flash=\E[30h\E\,$<100/>\E[30l, use=wy520,
#
# Wyse 520 in 132-column mode.
wy520-w|wyse520-w|wyse 520 in 132-column mode,
cols#132, wsl#132,
dch=\E[%p1%dP$<7>, dch1=\E[P$<7>, ich=\E[%p1%d@$<7>,
ip=$<7>, rs2=\E[35h\E[?3h, use=wy520,
#
# Wyse 520 in 132-column mode with visual bell.
wy520-wvb|wyse520-wvb|wyse 520 with visible bell 132-columns,
flash=\E[30h\E\,$<100/>\E[30l, use=wy520-w,
#
#
# Wyse 520 emulating a vt420 7 bit mode.
# The DEL key is programmed to generate BS in is2.
# With EPC keyboard.
# - 'End' key will clear till end of line on EPC keyboard
# - Shift/End : ignored.
# - Insert : enter insert mode.
# - Delete : delete a character (have to change interrupt character
# to CTRL-C: stty intr '^c') for it to work since the
# Delete key sends 7FH.
wy520-epc|wyse520-epc|wyse 520 with EPC keyboard,
kdch1=^?, kel=\E[4~, kend=\E[4~, kf0=\E[21~, kf1=\E[11~,
kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, khome=\E[H,
use=wy520,
#
# Wyse 520 with 24 data lines and status (terminal status)
# with EPC keyboard.
wy520-epc-24|wyse520-pc-24|wyse 520 with 24 data lines and EPC keyboard,
hs@,
dsl@, fsl@, rs3=\E[?5l\E[47h\E[40l\E[1;24r, tsl@,
use=wy520-epc,
#
# Wyse 520 with visual bell.
wy520-epc-vb|wyse520-pc-vb|wyse 520 with visible bell and EPC keyboard,
flash=\E[30h\E\,$<100/>\E[30l, use=wy520-epc,
#
# Wyse 520 in 132-column mode.
wy520-epc-w|wyse520-epc-w|wyse 520 in 132-column mode with EPC keyboard,
cols#132, wsl#132,
dch=\E[%p1%dP$<7>, dch1=\E[P$<7>, ich=\E[%p1%d@$<7>,
ip=$<7>, rs2=\E[35h\E[?3h, use=wy520-epc,
#
# Wyse 520 in 132-column mode with visual bell.
wy520-epc-wvb|wyse520-p-wvb|wyse 520 with visible bell 132-columns and EPC keyboard,
flash=\E[30h\E\,$<100/>\E[30l, use=wy520-epc-w,
#
# Wyse 520 in 80-column, 36 lines
wy520-36|wyse520-36|wyse 520 with 36 data lines,
hs@,
lines#36,
dsl@, fsl@, rs3=\E[?5l\E[36*|\E[36t\E[40l\E[1;36r, tsl@,
use=wy520,
#
# Wyse 520 in 80-column, 48 lines
wy520-48|wyse520-48|wyse 520 with 48 data lines,
hs@,
lines#48,
dsl@, fsl@, rs3=\E[?5l\E[48*|\E[48t\E[40l\E[1;48r, tsl@,
use=wy520,
#
# Wyse 520 in 132-column, 36 lines
wy520-36w|wyse520-36w|wyse 520 with 132 columns and 36 data lines,
cols#132, wsl#132,
rs2=\E[?3h,
rs3=\E[?5l\E[36*|\E[36t\E[40l\E[1;36r\E[132$|,
use=wy520-36,
#
# Wyse 520 in 132-column, 48 lines
wy520-48w|wyse520-48w|wyse 520 with 48 data lines,
cols#132, wsl#132,
rs2=\E[?3h,
rs3=\E[?5l\E[48*|\E[48t\E[40l\E[1;48r\E[132$|,
use=wy520-48,
#
#
# Wyse 520 in 80-column, 36 lines with EPC keyboard
wy520-36pc|wyse520-36pc|wyse 520 with 36 data lines and EPC keyboard,
hs@,
lines#36,
dsl@, fsl@, rs3=\E[?5l\E[36*|\E[36t\E[40l\E[1;36r, tsl@,
use=wy520-epc,
#
# Wyse 520 in 80-column, 48 lines with EPC keyboard
wy520-48pc|wyse520-48pc|wyse 520 with 48 data lines and EPC keyboard,
hs@,
lines#48,
dsl@, fsl@, rs3=\E[?5l\E[48*|\E[48t\E[40l\E[1;48r, tsl@,
use=wy520-epc,
#
# Wyse 520 in 132-column, 36 lines with EPC keyboard
wy520-36wpc|wyse520-36wpc|wyse 520 with 36 data lines and EPC keyboard,
cols#132, wsl#132,
rs2=\E[?3h,
rs3=\E[?5l\E[36*|\E[36t\E[40l\E[1;36r\E[132$|,
use=wy520-36pc,
#
# Wyse 520 in 132-column, 48 lines with EPC keyboard
wy520-48wpc|wyse520-48wpc|wyse 520 with 48 data lines and EPC keyboard,
cols#132, wsl#132,
rs2=\E[?3h,
rs3=\E[?5l\E[48*|\E[48t\E[40l\E[1;48r\E[132$|,
use=wy520-48pc,
# From: John Gilmore <hoptoad!gnu@lll-crg.arpa>
# (wyse-vp: removed <if=/usr/share/tabset/wyse-adds>, there's no such
# file and we don't know what <hts> is -- esr)
wyse-vp|Wyse 50 in ADDS Viewpoint emulation mode with "enhance" on,
OTbs, am,
cols#80, it#8, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=^F,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z, dch1=\EW,
dl1=\El, ed=\Ek, el=\EK, home=^A, ht=^I, il1=\EM, ind=\n,
is2=\E`\:\E`9\017\Er, kbs=^H, kcub1=^U, kcud1=\n, kcuf1=^F,
kcuu1=^Z, khome=^A, ll=^A^Z, nel=\r\n, rmir=\Er, rmso=^O,
rmul=^O, rs1=\E`\:\E`9\017\Er, sgr0=^O, smir=\Eq, smso=^N,
smul=^N,
wy75ap|wyse75ap|wy-75ap|wyse-75ap|Wyse WY-75 Applications and Cursor keypad,
is2=\E[1;24r\E[?10;3l\E[?1;25h\E[4l\E[m\E(B\E=,
kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
khome=\EOH, rmkx=\E[?1l\E>$<10/>, smkx=\E[?1h\E=$<10/>,
use=wy75,
# From: Eric Freudenthal <freudent@eric.ultra.nyu.edu>
wy100q|Wyse 100 for Quotron,
OTbs,
cols#80, lines#24, xmc#1,
cbt=\EI, clear=^Z, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, ed=\EY, el=\ET, home=^^, il1=\EE, invis@,
is2=\E`\:\0\EC\EDF\E0\E'\E(\EA21, kcub1=^H, kcud1=\n,
kcuf1=^L, kcuu1=^K, ri=\Ej, rmir=\Er, smir=\Eq, use=adm+sgr,
#### Kermit terminal emulations
#
# Obsolete Kermit versions may be listed in the section describing obsolete
# non-ANSI terminal emulators later in the file.
#
# KERMIT standard all versions.
# Straight ascii keyboard. :sr=\EI: not avail. many versions + bug prone in vi.
# (kermit: removed obsolete ":ma=^Hh^Jj^Kk^Ll^^H:" -- esr)
# From: greg small <gts@populi.berkeley.edu> 9-25-84
kermit|standard kermit,
OTbs,
cols#80, lines#24,
clear=\EE, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ,
el=\EK, home=\EH, is2=K0 Standard Kermit 9-25-84\n,
kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, khome=^^,
kermit-am|standard kermit plus auto-margin,
am,
is2=K1 Standard Kermit plus Automatic Margins\n,
use=kermit,
# IBMPC Kermit 1.2.
# Bugs: <ed>, <el>: do not work except at beginning of line! <clear> does
# not work, but fake with :cl=\EH\EJ (since :cd=\EJ: works at beginning of
# line).
# From: greg small <gts@populi.berkeley.edu> 8-30-84
pckermit|pckermit12|UCB IBMPC Kermit 1.2,
am,
lines#25,
clear=\EH\EJ, ed@, el@,
is2=K2 UCB IBMPC Kermit 1.2 8-30-84\n, use=kermit,
# IBMPC Kermit 1.20
# Cannot use line 25, now acts funny like ansi special scrolling region.
# Initialization must escape from that region by cursor position to line 24.
# Cannot use character insert because 1.20 goes crazy if insert at col 80.
# Does not use :am: because autowrap is lost when kermit dropped and restarted.
# From: greg small <gts@populi.berkeley.edu> 12-19-84
pckermit120|UCB IBMPC Kermit 1.20,
it#8, lines#24,
cud1=\EB, cvvis=\EO\Eq\EEK3, dch1=\EN, dl1=\EM, ht=^I,
il1=\EL,
is2=\EO\Eq\EJ\EY7\sK3\sUCB\sIBMPC\sKermit\s1.20\s\s12-19-84
\n,
rmir@, rmso=\Eq, smir@, smso=\Ep, use=kermit,
# MS-DOS Kermit 2.27 for the IBMPC
# Straight ascii keyboard. :sr=\EI: not avail. many versions + bug prone in vi.
# Cannot use line 25, now acts funny like ansi special scrolling region.
# Initialization must escape from that region by cursor position to line 24.
# Does not use am: because autowrap is lost when kermit dropped and restarted.
# Reverse video for standout like H19.
# (msk227: removed obsolete ":ma=^Hh^Jj^Kk^Ll^^H:" -- esr)
# From: greg small <gts@populi.berkeley.edu> 3-17-85
msk227|mskermit227|MS-DOS Kermit 2.27 for the IBMPC,
OTbs, am@,
cols#80, it#8, lines#24,
clear=\EE, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA,
cvvis=\EO\Eq\EG\EwK4, dch1=\EN, dl1=\EM, ed=\EJ, el=\EK,
home=\EH, ht=^I, il1=\EL,
is2=\EO\Eq\EG\Ew\EJ\EY7\sK4\sMS\sKermit\s2.27\sfor\sthe
\sIBMPC\s3-17-85\n,
kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, khome=^^, rc=\Ek,
rmir=\EO, rmso=\Eq, sc=\Ej, smir=\E@, smso=\Ep,
# MS-DOS Kermit 2.27 with automatic margins
# From: greg small <gts@populi.berkeley.edu> 3-17-85
msk227am|mskermit227am|UCB MS-DOS Kermit 2.27 with automatic margins,
am,
cvvis=\EO\Eq\EG\EvK5,
is2=\EO\Eq\EG\Ev\EJ\EY7\sK5\sMS\sKermit\s2.27\s+automatic
\smargins\s3-17-85\n,
use=msk227,
# MS-DOS Kermit 2.27 UCB 227.14 for the IBM PC
# Automatic margins now default. Use ansi <sgr> for highlights.
# Define function keys.
# (msk22714: removed obsolete ":kn#10:" -- esr)
# From: greg small <gts@populi.berkeley.edu> 3-17-85
msk22714|mskermit22714|UCB MS-DOS Kermit 2.27 UCB 227.14 IBM PC,
am,
bold=\E[1m, cvvis=\EO\Eq\EG\EvK6,
is2=\EO\Eq\EG\Ev\EJ\EY7\sK6\sMS\sKermit\s2.27\sUCB\s227.14
\sIBM\sPC\s3-17-85\n,
kf0=\E0, kf1=\E1, kf2=\E2, kf3=\E3, kf4=\E4, kf5=\E5, kf6=\E6,
kf7=\E7, kf8=\E8, kf9=\E9, rev=\E[7m, rmso=\E[m, rmul=\E[m,
sgr0=\E[m, smso=\E[1m, smul=\E[4m, use=mskermit227,
# This was designed for a VT320 emulator, but it is probably a good start
# at support for the VT320 itself.
# Please send changes with explanations to bug-gnu-emacs@prep.ai.mit.edu.
# (vt320-k3: I added <rmam>/<smam> based on the init string -- esr)
vt320-k3|MS-Kermit 3.00's vt320 emulation,
am, eslok, hs, km, mir, msgr, xenl,
cols#80, it#8, lines#49, pb#9600, vt#3,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[J, cmdch=\E, cnorm=\E[?25h, cr=\r,
- csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cmdch=\E,
+ cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
dsl=\E[0$~, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
flash=\E[?5h$<100/>\E[?5l\E[?5h$<100/>\E[?5l\E[?5h$<100/>\E[
?5l,
fsl=\E[0$}, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH,
ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\n,
is2=\E>\E F\E[?1h\E[?7h\E[r\E[2$~, kbs=^H, kcub1=\EOD,
kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdl1=\E[3~, kf0=\E[21~,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf6=\E[17~,
kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kich1=\E[2~, knp=\E[6~,
kpp=\E[5~, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, nel=\r\n, rc=\E8,
rev=\E[7m, ri=\EM, rin=\E[%p1%dL, rmacs=\E(B, rmam=\E[?7l,
rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m,
rs1=\E(B\E)B\E>\E\sF\E[4;20l\E[12h\E[?1;5;6;38;42l\E[?7;25h
\E[4i\E[?4i\E[m\E[r\E[2$~,
sc=\E7, sgr0=\E[m, smacs=\E(0, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
- tsl=\E[1$}\r\E[K, vpa=\E[%i%p1%dd,
+ tsl=\E[1$}\r\E[K, vpa=\E[%i%p1%dd, use=vt220+cvis,
+
# From: Joseph Gil <yogi@cs.ubc.ca> 13 Dec 1991
# ACS capabilities from Philippe De Muyter <phdm@info.ucl.ac.be> 30 May 1996
# (I removed a bogus boolean :mo: and added <msgr>, <smam>, <rmam> -- esr)
vt320-k311|dec vt320 series as defined by kermit 3.11,
am, eslok, hs, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, vt#3,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[;H\E[2J, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[;H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
dsl=\E[2$~\r\E[1$}\E[K\E[$}, ed=\E[J, el=\E[K,
flash=\E[?5h$<100/>\E[?5l, fsl=\E[$}, home=\E[H, ht=^I,
hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L$<3/>,
ind=\ED,
is2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H,
kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf6=\E[17~,
kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, lf1=pf1, lf2=pf2,
lf3=pf3, lf4=pf4, nel=\r\ED, rc=\E8, rev=\E[7m,
rf=/usr/share/tabset/vt100, ri=\EM, rmacs=^O,
rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m,
rmul=\E[24m, rs1=\E[?3l, sc=\E7, sgr0=\E[m, smacs=^N,
smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m,
smul=\E[4m, tbc=\E[3g, tsl=\E[2$~\E[1$}\E[1;%dH,
+ use=vt220+cvis,
######## NON-ANSI TERMINAL EMULATIONS
#
#### Avatar
#
# These entries attempt to describe Avatar, a terminal emulation used with
# MS-DOS bulletin-board systems. It was designed to give ANSI-like
# capabilities, but with cheaper (shorter) control sequences. Messy design,
# excessively dependent on PC idiosyncrasies, but apparently rather popular
# in the BBS world.
#
# No color support. Avatar doesn't fit either of the Tektronix or HP color
# models that terminfo knows about. An Avatar color attribute is the
# low 7 bits of the IBM-PC display-memory attribute. Bletch.
#
# I wrote these entries while looking at the Avatar spec. I don't have
# the facilities to test them. Let me know if they work, or don't.
#
# Avatar escapes not used by these entries (because maybe you're smarter
# and more motivated than I am and can figure out how to wrap terminfo
# around some of them, and because they are weird enough to be funny):
# level 0:
# ^L -- clear window/reset current attribute to default
# ^V^A%p1%c -- set current color attribute, parameter decodes as follows:
#
# bit: 6 5 4 3 2 1 0
# | | | | |
# +---+---+ | +---+---+
# | | |
# | | foreground color
# | foreground intensity
# background color
# level 0+:
# ^V^J%p1%c%p2%c%p3%c%p4%c%p5%c -- scroll (p2,p3) to (p4,p5) up by p1 lines
# ^V^K%p1%c%p2%c%p3%c%p4%c%p5%c -- scroll (p2,p3) to (p4,p5) down by p1 lines
# ^V^L%p1%c%p2%c%p3%c -- clear p2 lines and p3 cols w/attr %p1
# ^V^M%p1%c%p2%c%p3%c%p4%c -- fill p3 lines & p4 cols w/char p2+attr %p1
# (^V^L and ^V^M set the current attribute as a side-effect.)
# ^V ^Y <a> [...] <c> -- repeat pattern. <a> specifies the number of bytes
# in the pattern, <c> the number of times the pattern
# should be repeated. If either value is 0, no-op.
# The pattern can contain Avatar console codes,
# including other ^V ^Y patterns.
# level 1:
# ^V^O -- clockwise mode on; turn print direction right each time you
# hit a window edge (yes, really). Turned off by CR
# ^V^P -- no-op
# ^V^Q%c -- query the driver
# ^V^R -- driver reset
# ^V^S -- Sound tone (PC-specific)
# ^V^T -- change highlight at current cursor position to %c
# ^V^U%p1%c%p2%c -- highlight window <a> with attribute <b>
# ^V^V%p1%c%p2%c%p3%c%p4%c%p5%c
# -- define window
#
# From: Eric S. Raymond <esr@snark.thyrsus.com> 1 Nov 1995
# (The <blink>/<bold>/<rev>/<smacs>/<smul>/<smso> capabilities exist only to
# tell ncurses that the corresponding highlights exist; it should use <sgr>,
# which is the only method that will actually work for multiple highlights.)
#
# Update by TD - 2004: half of this was inconsistent. Found documentation
# and repaired most of the damage. sgr0 is probably incorrect, but the
# available documentation gives no clues for a workable string.
avatar0|avatar terminal emulator level 0,
am, bce, msgr,
cols#80, it#8, lines#25,
blink=^V^B, bold=^V^A^P, cr=\r, cub1=^V^E, cud1=^V^D,
cuf1=^V^F, cup=\026\010%p1%c%p2%c, cuu1=^V^C, el=^V^G,
ind=\n, invis=^V^A\0, rep=\031%p1%c%p2%c, rev=^V^Ap,
rmacs@, rs2=^L,
sgr=%?%p1%p2%|%p3%|%p6%|%p7%|%t\026\001%?%p7%t%{128}%e%{0}%?
%p1%t%{112}%|%;%?%p2%t%{1}%|%;%?%p3%t%{112}%|%;%?%p6%t
%{16}%|%;%;%c%;%?%p4%t\026\002%;,
sgr0=^V^A^G, smacs@, smso=^V^Ap, smul=^V^A^A,
use=klone+acs,
# From: Eric S. Raymond <esr@snark.thyrsus.com> 1 Nov 1995
avatar0+|avatar terminal emulator level 0+,
dch1=^V^N, rmir=\026\n\0\0\0\0, smir=^V^I, use=avatar0,
# From: Eric S. Raymond <esr@snark.thyrsus.com> 1 Nov 1995
avatar|avatar1|avatar terminal emulator level 1,
civis=^V'^B, cnorm=^V'^A, cvvis=^V^C, dl1=^V-, il1=^V+,
rmam=^V", rmir=^V^P, smam=^V$, use=avatar0+,
#### RBcomm
#
# RBComm is a lean and mean terminal emulator written by the Interrupt List
# maintainer, Ralf Brown. It was fairly popular in the late DOS years (early
# '90s), especially in the BBS world, and still has some loyal users due to
# its very small memory footprint and to a cute macro language.
rbcomm|IBM PC with RBcomm and EMACS keybindings,
am, bw, mir, msgr, xenl,
cols#80, it#8, lines#25,
- bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=^L, cnorm=\E[?25h, cr=\r, csr=\E[%i%p1%d;%p2%dr,
- cub1=^H, cud1=^C, cuf1=^B,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=^L, cr=\r,
+ csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^C, cuf1=^B,
cup=\037%p2%{32}%+%c%p1%{32}%+%c, cuu1=^^, dch1=^W,
dl=\E[%p1%dM, dl1=^Z, ech=\E[%p1%dX, ed=^F5, el=^P^P, ht=^I,
il=\E[%p1%dL, il1=^K, ind=\ED, invis=\E[8m,
is2=\017\035\E(B\E)0\E[?7h\E[?3l\E[>8g, kbs=^H,
kcub1=^B, kcud1=^N, kcuf1=^F, kcuu1=^P, khome=^A, nel=\r\ED,
rc=\E8, rep=\030%p1%c%p2%c, rev=^R, ri=\EM, rmcup=, rmdc=,
rmir=^], rmkx=\E>, rmso=^U, rmul=^U,
rs1=\017\E(B\E)0\025\E[?3l\E[>8g, sc=\E7, sgr0=\E[m,
smcup=, smdc=, smir=^\, smkx=\E=, smso=^R, smul=^T,
+ use=vt220+cvis,
rbcomm-nam|IBM PC with RBcomm without autowrap,
am@,
bel=^G, cr=\r, cud1=\n, ht=^I, ind=\n,
is2=\017\035\E(B\E)0\E[?7l\E[?3l\E[>8g, kbs=^H,
kcub1=^H, kcud1=\n, nel=\r\n, use=rbcomm,
rbcomm-w|IBM PC with RBcomm in 132 column mode,
cols#132,
bel=^G, cr=\r, cud1=\n, ht=^I, ind=\n,
is2=\017\035\E(B\E)0\E[?7h\E[?3h\E[>8g, kbs=^H,
kcub1=^H, kcud1=\n, nel=\r\n, use=rbcomm,
######## LCD DISPLAYS
#
#### Matrix Orbital
# from: Eric Z. Ayers (eric@ale.org)
#
# Matrix Orbital 20x4 LCD display
# Command Character is 0xFE (decimal 254, octal 376)
#
# On this device, cursor addressability isn't possible. The LCD expects:
# 0xfe G <col> <row>
# for cup: %p1 == row and %p2 is column
#
# This line:
# cup=\376G%p2%c%p1%c
# LOOKS like it will work, but sometimes only one of the two numbers is sent.
# See the terminfo (5) manpage commented regarding 'Terminals which use "%c"'.
#
# Alas, there is no cursor upline capability on this display.
#
# These entries add some 'sanity stuff' to the clear function. That is, it
# does a 'clear' and also turns OFF auto scroll, turns ON Auto Line Wrapping,
# and turns off the cursor blinking and stuff like that.
#
# NOTE: calling 'beep' turns on the backlight (bell)
# NOTE: calling 'flash' turns it on and back off (visual bell)
#
MtxOrb|Generic Matrix Orbital LCD display,
bel=\376B\001, clear=\376X\376C\376R\376K\376T,
cnorm=\376K\376T, cub1=\376L, cuf1=\376M,
flash=\376B\001$<200>\376F, home=\376H,
MtxOrb204|20x4 Matrix Orbital LCD display,
cols#20, lines#4, use=MtxOrb,
MtxOrb162|16x2 Matrix Orbital LCD display,
cols#16, lines#2, use=MtxOrb,
# The end
######## OLDER TERMINAL TYPES
#
# This section is devoted to older commercial terminal brands that are now
# discontinued, but known to be still in use or represented by emulations.
#
#### AT&T (att, tty)
#
# This section also includes Teletype-branded VDTs.
#
# The AT&T/Teletype terminals group was sold to SunRiver Data Systems (now
# Boundless Technologies); for details, see the header comment on the ADDS
# section.
#
# These are AT&T's official terminfo entries. All-caps aliases have been
# removed.
#
att2300|sv80|AT&T 2300 Video Information Terminal 80 column mode,
am, eo, mir, msgr, xon,
cols#80, it#8, lines#24,
bel=^G, clear=\E[H\E[J, cr=\r, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, el1=\E[1K, home=\E[H, ht=^I, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=\n, kbs=^H, kcbt=\E[Z, kclr=\E[J,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P,
kdl1=\E[M, kf1=\E[1r, kf10=\E[10r, kf11=\E[11r,
kf12=\E[12r, kf13=\E[13r, kf14=\E[14r, kf15=\E[15r,
kf16=\E[16r, kf2=\E[2r, kf3=\E[3r, kf4=\E[4r, kf5=\E[5r,
kf6=\E[6r, kf7=\E[7r, kf8=\E[8r, kf9=\E[9r, khome=\E[H,
kich1=\E[@, kil1=\E[L, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i,
rev=\E[7m, rmir=\E[4l, rmso=\E[m, sgr0=\E[m, smir=\E[4h,
smso=\E[7m,
att2350|AT&T 2350 Video Information Terminal 80 column mode,
mc0@, mc4@, mc5@, use=att2300,
# Must setup RETURN KEY - CR, REC'VD LF - INDEX.
# Seems upward compatible with vt100, plus ins/del line/char.
# On sgr, the protection parameter is ignored.
# No check is made to make sure that only 3 parameters are output.
# standout= reverse + half-intensity = 3 | 5.
# bold= reverse + underline = 2 | 3.
# note that half-bright blinking doesn't look different from normal blinking.
# NOTE:you must program the function keys first, label second!
# (att4410: a BSD entry has been seen with the following capabilities:
# <is2=\E[?6l>, <kf1=\EOc>, <kf2=\EOd>, <kf3=\EOe>, <kf4=\EOg>,
# <kf6=\EOh>, <kf7=\EOi>, <kf8=\EOj>, -- esr)
att5410v1|att4410v1|tty5410v1|AT&T 4410/5410 80 columns - version 1,
am, hs, mir, msgr, xon,
cols#80, it#8, lh#2, lines#24, lw#8, nlab#8, wsl#80,
acsc=++\,\,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyz
z{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[2;7m, clear=\E[H\E[J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dim=\E[2m,
dl1=\E[M, ed=\E[J, el=\E[K, fsl=\E8, home=\E[H, ht=^I,
ich1=\E[@, il1=\E[L, ind=\n, invis=\E[8m, is1=\E[?3l\E)0,
is3=\E[1;03q\s\s\sf1\s\s\s\s\s\s\s\s\s\s\s\EOP\E[2;03q\s\s
\sf2\s\s\s\s\s\s\s\s\s\s\s\EOQ\E[3;03q\s\s\sf3\s\s\s\s
\s\s\s\s\s\s\s\EOR\E[4;03q\s\s\sf4\s\s\s\s\s\s\s\s\s\s
\s\EOS\E[5;03q\s\s\sf5\s\s\s\s\s\s\s\s\s\s\s\EOT\E[6;03q
\s\s\sf6\s\s\s\s\s\s\s\s\s\s\s\EOU\E[7;03q\s\s\sf7\s\s
\s\s\s\s\s\s\s\s\s\EOV\E[8;03q\s\s\sf8\s\s\s\s\s\s\s\s
\s\s\s\EOW,
kbs=^H, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT,
kf6=\EOU, kf7=\EOV, kf8=\EOW, khome=\E[H, kll=\E[24;1H,
ll=\E[24H, nel=\r\n,
pfx=\E[%p1%1d;%p2%l%2.2dq\s\s\sf%p1%1d\s\s\s\s\s\s\s\s\s\s
\s%p2%s,
pln=\E[%p1%d;00q%p2%:-16s, rc=\E8, rev=\E[7m, ri=\EM,
rmacs=^O, rmso=\E[m, rmul=\E[m, rs2=\Ec\E[?3l\E[2;0y,
sc=\E7,
sgr=\E[0%?%p1%p5%|%p6%|%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1
%|%p6%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smso=\E[7m, smul=\E[4m,
tsl=\E7\E[25;%p1%{1}%+%dH,
att4410v1-w|att5410v1-w|tty5410v1-w|AT&T 4410/5410 132 columns - version 1,
cols#132, wsl#132,
is1=\E[?3h\E)0, rs2=\Ec\E[?3h\E[2;0y, use=att5410v1,
att4410|att5410|tty5410|AT&T 4410/5410 80 columns - version 2,
OTbs,
pfx=\E[%p1%d;%p2%l%02dq f%p1%d %p2%s,
use=att5410v1,
att5410-w|att4410-w|4410-w|tty5410-w|5410-w|AT&T 4410/5410 in 132 column mode,
cols#132, wsl#132,
is1=\E[?3h\E)0, rs2=\Ec\E[?3h\E[2;0y, use=att4410,
# 5410 in terms of a vt100
# (v5410: added <rmam>/<smam> based on init string -- esr)
v5410|att5410 in terms of a vt100,
am, mir, msgr, xon,
cols#80, it#8, lines#24, vt#3,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>,
clear=\E[H\E[J$<50>, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub1=^H, cud1=\n, cuf1=\E[C$<2>,
cup=\E[%i%p1%d;%p2%dH$<5>, cuu1=\E[A$<2>, dch1=\E[P,
dl1=\E[M, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>,
enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ich1=\E[@,
il1=\E[L, ind=\n, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,
kcuu1=\EOA, rc=\E8, rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O,
rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m$<2>,
rmul=\E[m$<2>, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h,
sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;m%?%p9%t\016%e\017%;$<2>,
sgr0=\E[m\017$<2>, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=,
smso=\E[1;7m$<2>, smul=\E[4m$<2>, tbc=\E[3g,
use=vt100+fnkeys,
#
# Teletype Model 5420 -- A souped up 5410, with multiple windows,
# even! the 5420 has three modes: scroll, window or page mode
# this terminfo should work in scroll or window mode, but doesn't
# take advantage of any of the differences between them.
#
# Has memory below (2 lines!)
# 3 pages of memory (plus some spare)
# The 5410 sequences for <cup>, <cvvis>, <dch>, <dl>, <ech>, <flash>, <home>,
# <hpa>, <hts> would work for these, but these work in both scroll and window
# mode... Unset insert character so insert mode works
# <is1> sets 80 column mode,
# <is2> escape sequence:
# 1) turn off all fonts
# 2) function keys off, keyboard lock off, control display off,
# insert mode off, erasure mode off,
# 3) full duplex, monitor mode off, send graphics off, nl on lf off
# 4) reset origin mode
# 5) set line wraparound
# 6) exit erasure mode, positional attribute mode, and erasure extent mode
# 7) clear margins
# 8) program ENTER to transmit ^J,
# We use \212 to program the ^J because a bare ^J will get translated by
# UNIX into a CR/LF. The enter key is needed for AT&T uOMS.
# 1 2 3 4 5 6 7 8
# <is3> set screen color to black,
# No representation in terminfo for the delete word key: kdw1=\Ed
# Key capabilities assume the power-up send sequence...
# This <rmcup> is not strictly necessary, but it helps maximize
# memory usefulness: <rmcup=\Ez>,
# Alternate sgr0: <sgr0=\E[m\EW^O>,
# Alternate sgr: <sgr=\E[%?%p1%t2;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m%?%p8%t\EV%;%?%p9%t^N%e^O%;>,
# smkx programs the SYS PF keys to send a set sequence.
# It also sets up labels f1, f2, ..., f8, and sends edit keys.
# This string causes them to send the strings <kf1>-<kf8>
# when pressed in SYS PF mode.
# (att4415: I added <rmam>/<smam> based on the init string -- esr)
att4415|tty5420|att5420|AT&T 4415/5420 80 cols,
OTbs, db, mir, xon,
lh#2, lm#78, lw#8, nlab#8, wsl#55,
cbt=\E[Z, clear=\E[x\E[J, cnorm=\E[11;0j, cub=\E[%p1%dD,
cud=\E[%p1%dB, cuf=\E[%p1%dC, cup=\E[%i%p1%d;%p2%dx,
cuu=\E[%p1%dA, cvvis=\E[11;1j, dch=\E[%p1%dP,
dl=\E[%p1%dM, ech=\E[%p1%ds\E[%p1%dD,
flash=\E[?5h$<200>\E[?5l, home=\E[x,
hpa=\E[%p1%{1}%+%dG, hts=\EH, ich=\E[%p1%d@, ich1@,
il=\E[%p1%dL, indn=\E[%p1%dE, is1=\E[?3l$<100>,
is2=\E[m\017\E[1;2;3;4;6l\E[12;13;14;20l\E[?6;97;99l\E[?7h
\E[4i\Ex\E[21;1j\212,
is3=\E[?5l, kbeg=\Et, kcbt=\E[Z, kdch1=\E[P, kdl1=\E[M,
kel=\E[2K, kend=\Ez, kent=\Eent, kf1=\EOc, kf2=\EOd,
kf3=\EOe, kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj,
kich1=\E[4h, kil1=\E[L, kind=\E[T, kll=\Eu, knp=\E[U,
kpp=\E[V, kri=\E[S, lf1=F1, lf2=F2, lf3=F3, lf4=F4, lf5=F5,
lf6=F6, lf7=F7, lf8=F8, ll=\Ew, mc0=\E[?2i, mc4=\E[?9i,
mc5=\E[?4i, mrcup=\E[%i%p1%d;%p2%dt,
pfx=\E[%p1%d;%p2%l%02dq F%p1%d %p2%s,
pln=\E[%p1%d;0;0;0q%p2%:-16.16s, prot=\EV,
rin=\E[%p1%dF, rmam=\E[?7l, rmir=\E[4l,
rmkx=\E[19;0j\E[21;1j\212, rmln=\E|,
sgr=\E[0%?%p1%p5%|%p6%|%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1
%|%p6%|%t;7%;%?%p7%t;8%;m%?%p8%t\EV%;%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smam=\E[?7h, smir=\E[4h,
smkx=\E[19;1j\E[21;4j\Eent, smln=\E~, tbc=\E[3g,
tsl=\E7\E[25;%p1%{8}%+%dH, vpa=\E[%p1%{1}%+%dd,
use=att4410,
att4415-w|tty5420-w|att5420-w|AT&T 4415/5420 132 cols,
cols#132, lm#54, wsl#97,
is1=\E[?3h$<100>, use=att4415,
att4415-rv|tty5420-rv|att5420-rv|AT&T 4415/5420 80 cols/rv,
flash=\E[?5l$<200>\E[?5h, is3=\E[?5h, use=att4415,
att4415-w-rv|tty5420-w-rv|att5420-w-rv|AT&T 4415/5420 132 cols/rv,
cols#132, lm#54, wsl#97,
flash=\E[?5l$<200>\E[?5h, is1=\E[?3h$<100>, is3=\E[?5h,
use=att4415,
# Note that this mode permits programming USER PF KEYS and labels
# However, when you program user pf labels you have to reselect
# user pf keys to make them appear!
att4415+nl|tty5420+nl|att5420+nl|generic AT&T 4415/5420 changes for not changing labels,
kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@,
pfx=\E[%p1%d;%p2%l%02d;0;1q\s\s\sF%p1%d\s\s\s\s\s\s\s\s\s\s
\s%p2%s,
pln=\E[%p1%d;0;0;1q%p2%:-16.16s,
att4415-nl|tty5420-nl|att5420-nl|AT&T 4415/5420 without changing labels,
kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, use=att4415+nl,
use=att4415,
att4415-rv-nl|tty5420-rv-nl|att5420-rv-nl|AT&T 4415/5420 reverse video without changing labels,
kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, use=att4415+nl,
use=att4415-rv,
att4415-w-nl|tty5420-w-nl|att5420-w-nl|AT&T 4415/5420 132 cols without changing labels,
kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, use=att4415+nl,
use=att4415-w,
att4415-w-rv-n|tty5420-w-rv-n|att5420-w-rv-n|AT&T 4415/5420 132 cols reverse without changing labels,
kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, use=att4415+nl,
use=att4415-w-rv,
att5420_2|AT&T 5420 model 2 80 cols,
am, db, hs, mir, msgr, xon,
cols#80, it#8, lh#2, lines#24, lm#78, lw#8, nlab#8, wsl#55,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
blink=\E[5m, cbt=\E[1Z, clear=\EH\EJ, cnorm=\E[11;0j,
cr=\EG, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\E[1B, cuf=\E[%p1%dC, cuf1=\E[1C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[1A,
cvvis=\E[11;1j, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%ds\E[%p1%dD, ed=\E[0J,
el=\E[0K, el1=\E[1K, flash=\E[?5h$<200>\E[?5l, fsl=\E8,
home=\E[H, hpa=\E[%p1%{1}%+%dG, ht=^I, hts=\EH,
ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n,
indn=\E[%p1%dE, invis=\E[8m,
is1=\E[0;23r\Ex\Ey\E[2;0j\E[3;3j\E[4;0j\E[5;0j\E[6;0j\E[7;0j
\E[8;0j\E[9;1j\E[10;0j\E[15;0j\E[16;1j\E[19;0j\E[20;1j
\E[29;0j\E[1;24r,
kbeg=\Et, kbs=^H, kcbt=\E[Z, kclr=\E[2J, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M,
kel=\E[2K, kend=\Ez, kent=\n, kf1=\EOc, kf2=\EOd, kf3=\EOe,
kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, khome=\E[H,
kich1=\E[4h, kil1=\E[L, kind=\E[T, kll=\Eu, knp=\E[U,
kpp=\E[V, kri=\E[S, lf1=F1, lf2=F2, lf3=F3, lf4=F4, lf5=F5,
lf6=F6, lf7=F7, lf8=F8, ll=\Ew, mc0=\E[?;2i, mc4=\E[4i,
mc5=\E[5i, mrcup=\E[%i%p1%d;%p2%dt, nel=\r\n,
pfx=\E[%p1%d;%p2%l%02dq\s\s\sF%p1%d\s\s\s\s\s\s\s\s\s\s\s%p2
%s\E~,
pln=\E[%p1%d;0;0;0q%p2%:-16.16s\E~, prot=\EV, rc=\E8,
rev=\E[7m, ri=\EM, rin=\E[%p1%dF, rmacs=^O, rmkx=\E[19;0j,
rmln=\E|, rmso=\E[m, rmul=\E[m, rs2=\Ec\E[?3l\E[2;0y,
sc=\E7,
sgr=\E[0%?%p1%p5%|%t;2%;%?%p2%p6%|%t;4%;%?%p4%t;5%;%?%p3%p1
%|%p6%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;%?%p8%t\EV%;,
sgr0=\E[m\017, smacs=^N, smkx=\E[19;1j, smln=\E~,
smso=\E[7m, smul=\E[4m, tbc=\E[3g,
tsl=\E7\E[25;%p1%{8}%+%dH, vpa=\E[%p1%{1}%+%dd,
att5420_2-w|AT&T 5420 model 2 in 132 column mode,
cols#132,
is1=\E[0;23r\Ex\Ey\E[2;0j\E[3;3j\E[4;0j\E[5;1j\E[6;0j\E[7;0j
\E[8;0j\E[9;1j\E[10;0j\E[15;0j\E[16;1j\E[19;0j\E[20;1j
\E[29;0j\E[1;24r,
use=att5420_2,
att4418|att5418|AT&T 5418 80 cols,
am, xon,
cols#80, lines#24,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, clear=\E[H\E[2J, cr=\r, cub=\E[%p1%dD,
cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA,
cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[1P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[0J, el=\E[0K, home=\E[H,
ich=\E[%p1%d@, ich1=\E[1@, il=\E[%p1%dL, il1=\E[1L, ind=\n,
is1=\E[?3l, is2=\E)0\E?6l\E?5l, kclr=\E[%%, kcub1=\E@,
kcud1=\EU, kcuf1=\EA, kcuu1=\ES, kent=\E[, kf1=\E[h,
kf10=\E[m, kf11=\E[n, kf12=\E[o, kf13=\E[H, kf14=\E[I,
kf15=\E[J, kf18=\E[K, kf19=\E[L, kf2=\E[i, kf20=\E[E,
kf21=\E[_, kf22=\E[M, kf23=\E[N, kf24=\E[O, kf3=\E[j,
kf6=\E[k, kf7=\E[l, kf8=\E[f, kf9=\E[w, khome=\Ec, rc=\E8,
rev=\E[7m, rmacs=^O, rmso=\E[m, rmul=\E[m, sc=\E7,
sgr0=\E[m\017, smacs=^N, smso=\E[7m, smul=\E[4m,
att4418-w|att5418-w|AT&T 5418 132 cols,
cols#132,
is1=\E[?3h, use=att5418,
att4420|tty4420|teletype 4420,
OTbs, da, db, eo, msgr, ul, xon,
cols#80, lines#24, lm#72,
bel=^G, clear=\EH\EJ, cr=\EG, cub1=\ED, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EP,
dl1=\EM, ed=\EJ, el=\Ez, home=\EH, il1=\EL, ind=\EH\EM\EY7\s,
kcbt=\EO, kclr=\EJ, kcub1=^H, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kdch1=\EP, kdl1=\EM, kf0=\EU, kf3=\E@, khome=\EH,
kich1=\E\^, kil1=\EL, kind=\ES, kri=\ET,
lf0=segment advance, lf3=cursor tab, rmdc@, rmso=\E~,
rmul=\EZ, smdc@, smso=\E}, smul=\E\\,
# The following is a terminfo entry for the Teletype 4424
# asynchronous keyboard-display terminal. It supports
# the vi editor. The terminal must be set up as follows,
#
# HIGHLIGHT DEFINITION 3-TONE
# DISPLAY FUNCTION GROUP III
#
# The second entry below provides limited (a la adm3a)
# operation under GROUP II.
#
# This must be used with DISPLAY FUNCTION GROUP I or III
# and HIGHLIGHT DEFINITION 3-TONE
# The terminal has either bold or blink, depending on options
#
# (att4424: commented out <smcup>=\E[1m, we don't need bright locked on -- esr)
att4424|tty4424|teletype 4424,
OTbs, am, xon,
cols#80, lines#24,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E3, bold=\E3, cbt=\EO, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\EB, cuf=\E[%p1%dC, cuf1=\EC,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EA,
dch=\E[%p1%dP, dch1=\EP, dim=\EW, dl=\E[%p1%dM, dl1=\EM,
ed=\EJ, el=\Ez, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
ich1=\E\^, il=\E[%p1%dL, il1=\EL, ind=\n, is2=\E[20l\E[?7h,
kbs=^H, kclr=\EJ, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
khome=\E[H, nel=\EE, rev=\E}, ri=\ET, rmacs=\E(B, rmso=\E~,
rmul=\EZ,
sgr=\EX\E~\EZ\E4\E(B%?%p1%p3%|%t\E}%;%?%p2%t\E\\%;%?%p4%p6%|
%t\E3%;%?%p5%t\EW%;%?%p9%t\E(0%;,
sgr0=\EX\E~\EZ\E4\E(B, smacs=\E(0, smso=\E}, smul=\E\\,
tbc=\EF,
att4424-1|tty4424-1|teletype 4424 in display function group I,
kclr@, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome@,
use=att4424,
# This entry is not one of AT&T's official ones, it was translated from the
# 4.4BSD termcap file. The highlight strings are different from att4424.
# I have no idea why this is -- older firmware version, maybe?
# The following two lines are the comment originally attached to the entry:
# This entry appears to avoid the top line - I have no idea why.
# From: jwb Wed Mar 31 13:25:09 1982 remote from ihuxp
att4424m|tty4424m|teletype 4424M,
am, da, db, mir,
cols#80, it#8, lines#23,
bel=^G, clear=\E[2;H\E[J, cr=\r, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%2d;%p2%2dH\E[B, cuu1=\E[A, dch1=\EP,
dl1=\EM, el=\E[K, ht=^I, ich1=\E\^, il1=\EL, ind=\n, ip=$<2/>,
is2=\E[m\E[2;24r, kbs=^H, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR,
kf4=\EOS, khome=\E[H, nel=\r\n, ri=\ET, rmso=\E[m, rmul=\E[m,
sgr0=\E[m, smso=\E[7m, smul=\E[4m,
# The Teletype 5425 is really version 2 of the Teletype 5420. It
# is quite similar, except for some minor differences. No page
# mode, for example, so all of the <cup> sequences used above have
# to change back to what's being used for the 5410. Many of the
# option settings have changed their numbering as well.
#
# This has been tested on a preliminary model.
#
# (att5425: added <rmam>/<smam> based on the init string -- esr)
att5425|tty5425|att4425|AT&T 4425/5425,
am, da, db, hs, mir, msgr, xenl, xon,
cols#80, it#8, lh#2, lines#24, lm#78, lw#8, nlab#8, wsl#55,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[2;7m, cbt=\E[Z,
clear=\E[H\E[J, cnorm=\E[12;0j, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[12;1j, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%ds\E[%p1%dD, ed=\E[J,
el=\E[K, el1=\E[1K, enacs=\E(B\E)0,
flash=\E[?5h$<200>\E[?5l, fsl=\E8, home=\E[H,
hpa=\E[%p1%{1}%+%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=\n, indn=\E[%p1%dE,
invis=\E[8m, is1=\E<\E[?3l$<100>,
is2=\E[m\017\E[1;2;3;4;6l\E[12;13;14;20l\E[?6;97;99l\E[?7h
\E[4i\Ex\E[25;1j\212,
is3=\E[?5l, kbeg=\Et, kbs=^H, kcbt=\E[Z, kclr=\E[J,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P,
kdl1=\E[M, kel=\E[2K, kend=\Ez, kent=\Eent, kf1=\EOc,
kf2=\EOd, kf3=\EOe, kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi,
kf8=\EOj, khome=\E[H, kich1=\E[4h, kil1=\E[L, kind=\E[T,
kri=\E[S, ll=\E[24H, mc0=\E[?2i, mc4=\E[?9i, mc5=\E[?4i,
nel=\r\n,
pfx=\E[%p1%d;%p2%l%02dq F%p1%1d %p2%s,
pln=\E[%p1%d;0;0;0q%p2%:-16.16s, prot=\EV, rc=\E8,
rev=\E[7m, ri=\EM, rin=\E[%p1%dF, rmacs=^O, rmam=\E[?7l,
rmir=\E[4l, rmkx=\E[21;0j\E[25;1j\212, rmln=\E|,
rmso=\E[m, rmul=\E[m, rs2=\Ec\E[?3l\E[2;0y, sc=\E7,
sgr=\E[0%?%p5%p6%|%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%p6
%|%t;7%;%?%p7%t;8%;m%?%p8%t\EV%;%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h,
smkx=\E[21;1j\E[25;4j\Eent\E~, smln=\E~, smso=\E[7m,
smul=\E[4m, tbc=\E[3g, tsl=\E7\E[25;%p1%{8}%+%dH,
vpa=\E[%p1%{1}%+%dd,
att5425-nl|tty5425-nl|att4425-nl|AT&T 4425/5425 80 columns no labels,
smkx=\E[21;1j\E[25;4j\Eent, use=att4425,
att5425-w|att4425-w|tty5425-w|teletype 4425/5425 in 132 column mode,
cols#132, lm#54, wsl#97,
is1=\E[?3h$<100>, use=tty5425,
# (att4426: his had bogus capabilities: :ri=\EM:, :ri=\E[1U:.
# I also added <rmam>/<smam> -- esr)
att4426|tty4426|teletype 4426S,
am, da, db, xon,
cols#80, lines#24, lm#48,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, bold=\E[5m, clear=\E[H\E[2J\E[1U\E[H\E[2J\E[1V,
cr=\r, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\EP,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[0K, home=\E[H,
hpa=\E[%p1%dG, ht=^I, hts=\E1, ich=\E[%p1%d@, ich1=\E\^,
il=\E[%p1%dL, il1=\EL, ind=\n, is1=\Ec\E[?7h,
is2=\E[m\E[1;24r, kbs=^H, kcbt=\EO, kclr=\E[2J, kcub1=\ED,
kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf1=\EOP, kf2=\EOQ,
kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW,
khome=\E[H, kll=\E[24;1H, ll=\E[24H, nel=\r\n, rc=\E8,
rev=\E[7m, ri=\ET, rmacs=\E(B, rmam=\E[?7l, rmso=\E[m,
rmul=\E[m, rs2=\Ec\E[?3l\E[2;0y, sc=\E7, sgr0=\E[m\E(B,
smacs=\E(0, smam=\E[?7h, smso=\E[5m, smul=\E[4m, tbc=\E[3g,
vpa=\E[%p1%dd, use=ecma+index,
# Terminfo entry for the AT&T 510 A Personal Terminal
# Function keys 9 - 16 are available only after the
# screen labeled (soft keys/action blocks) are labeled. Function key
# 9 corresponds to the leftmost touch target on the screen,
# function key 16 corresponds to the rightmost.
#
# This entry is based on one done by Ernie Rice at Summit, NJ and
# changed by Anne Gallup, Skokie, IL, ttrdc!anne
att510a|bct510a|AT&T 510A Personal Terminal,
am, mir, msgr, xenl, xon,
cols#80, lh#2, lines#24, lw#7, nlab#8,
acsc=+g\,h-f.e`bhrisjjkkllmmnnqqttuuvvwwxx{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[2;7m, cbt=\E[Z,
civis=\E[11;0|, clear=\E[H\E[J, cnorm=\E[11;3|, cr=\r,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[11;2|, dch=\E[%p1%dP,
dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[0J,
el=\E[0K, el1=\E[1K, enacs=\E(B\E)1, ff=^L, home=\E[H, ht=^I,
hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=\n, is1=\E(B\E)1\E[2l,
is3=\E[21;1|\212, kLFT=\E[u, kRIT=\E[v, kbs=^H, kcbt=\E[Z,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOm,
kf10=\EOd, kf11=\EOe, kf12=\EOf, kf13=\EOg, kf14=\EOh,
kf15=\EOi, kf16=\EOj, kf2=\EOV, kf3=\EOu, kf4=\ENj, kf5=\ENe,
kf6=\ENf, kf7=\ENh, kf8=\E[H, kf9=\EOc, kind=\E[S, kri=\E[T,
mc0=\E[0i, mc4=\E[?8i, mc5=\E[?4i, nel=\EE,
pln=\E[%p1%dp%p2%:-16s, rc=\E8, rev=\E[7m, ri=\EM,
rmacs=^O, rmkx=\E[19;0|, rmso=\E[m, rmul=\E[m, sc=\E7,
sgr=\E[0%?%p5%p6%|%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%p6
%|%t;7%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smkx=\E[19;1|, smso=\E[7m,
smul=\E[4m, tbc=\E[3g,
# Terminfo entry for the AT&T 510 D Personal Terminal
# Function keys 9 through 16 are accessed by bringing up the
# system blocks.
# Function key 9 corresponds to the leftmost touch target on the screen,
# function key 16 corresponds to the rightmost.
#
# There are problems with soft key labeling. These are due to
# strangenesses in the native terminal that are impossible to
# describe in a terminfo.
att510d|bct510d|AT&T 510D Personal Terminal,
am, da, db, mir, msgr, xenl, xon,
cols#80, lh#2, lines#24, lm#48, lw#7, nlab#8,
acsc=+g\,h-f.e`bhrisjjkkllmmnnqqttuuvvwwxx{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[2;7m, cbt=\E[Z,
clear=\E[H\E[J, cnorm=\E[11;3|, cr=\r, cub=\E[%p1%dD,
cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA,
cuu1=\E[A, cvvis=\E[11;2|, dch=\E[%p1%dP, dch1=\E[P,
dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[0J, el=\E[0K,
el1=\E[1K, enacs=\E(B\E)1, ff=^L, home=\E[H,
hpa=\E[%p1%{1}%+%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=\n, invis=\E[8m,
is1=\E(B\E)1\E[5;0|, is3=\E[21;1|\212, kLFT=\E[u,
kRIT=\E[v, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kf1=\EOm, kf10=\EOd, kf11=\EOe,
kf12=\EOf, kf13=\EOg, kf14=\EOh, kf15=\EOi, kf16=\EOj,
kf2=\EOV, kf3=\EOu, kf4=\ENj, kf5=\ENe, kf6=\ENf, kf7=\ENh,
kf8=\E[H, kf9=\EOc, kind=\E[S, kri=\E[T, ll=\E#2, mc0=\E[0i,
mc4=\E[?8i, mc5=\E[?4i, mgc=\E\:, nel=\EE,
pln=\E[%p1%dp%p2%:-16s, rc=\E8, rev=\E[7m, ri=\EM,
rmacs=^O, rmir=\E[4l, rmkx=\E[19;0|, rmln=\E<, rmso=\E[m,
rmul=\E[m, rmxon=\E[29;1|, rs2=\E[5;0|, sc=\E7,
sgr=\E[0%?%p5%p6%|%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%p6
%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smgl=\E4, smgr=\E5, smir=\E[4h,
smkx=\E[19;1|, smln=\E?, smso=\E[7m, smul=\E[4m,
smxon=\E[29;0|, tbc=\E[3g, vpa=\E[%p1%{1}%+%dd,
use=ansi+rep, use=ecma+index,
# (att500: I merged this with the att513 entry, att500 just used att513 -- esr)
att500|att513|AT&T 513 using page mode,
am, chts, mir, msgr, xenl, xon,
cols#80, lh#2, lines#24, lw#8, nlab#8,
acsc=+g\,h-f.e`bhrisjjkkllmmnnqqttuuvvwwxx{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[2;7m, cbt=\E[Z,
clear=\E[H\E[J, cnorm=\E[11;0|, cr=\r,
csr=%i\E[%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[11;1|, dch=\E[%p1%dP, dch1=\E[P$<1>, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
enacs=\E(B\E)1, home=\E[H, hpa=\E[%p1%{1}%+%dG, ht=^I,
hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\n,
indn=\E[%p1%dE, invis=\E[8m,
is1=\E?\E[3;3|\E[10;0|\E[21;1|\212\E[6;1|\E[1{\E[?99l,
kBEG=\ENB, kCAN=\EOW, kCMD=\EOU, kCPY=\END, kCRT=\EON,
kDC=\ENF, kDL=\ENE, kEND=\ENN, kEOL=\EOA, kEXT=\EOK,
kFND=\EOX, kHLP=\EOM, kHOM=\ENM, kIC=\ENJ, kLFT=\ENK,
kMOV=\ENC, kMSG=\EOL, kNXT=\ENH, kOPT=\EOR, kPRT=\EOZ,
kPRV=\ENG, kRDO=\EOT, kRES=\EOQ, kRIT=\ENL, kRPL=\EOY,
kSAV=\EOO, kSPD=\EOP, kUND=\EOS, kbeg=\E9, kbs=^H, kcan=\EOw,
kcbt=\E[Z, kclo=\EOV, kclr=\E[J, kcmd=\EOu, kcpy=\ENd,
kcrt=\EOn, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=\ENf, kdl1=\ENe, kel=\EOa, kend=\E0, kent=\Eent,
kext=\EOk, kf1=\EOc, kf2=\EOd, kf3=\EOe, kf4=\EOf, kf5=\EOg,
kf6=\EOh, kf7=\EOi, kf8=\EOj, kfnd=\EOx, khlp=\EOm,
khome=\E[H, kich1=\ENj, kind=\E[S, kmov=\ENc, kmrk=\ENi,
kmsg=\EOl, knp=\E[U, knxt=\ENh, kopn=\EOv, kopt=\EOr,
kpp=\E[V, kprt=\EOz, kprv=\ENg, krdo=\EOt, kref=\EOb,
kres=\EOq, krfr=\ENa, kri=\E[T, krpl=\EOy, krst=\EOB,
ksav=\EOo, kslt=\ENI, kspd=\EOp, kund=\EOs, ll=\E#2,
mc0=\E[?98l\E[0i, mc4=\E[?98l\E[?8i, mc5=\E[?98l\E[?4i,
nel=\EE,
pfkey=\E[%p1%d;%p2%l%d;3;0p\s\s\sF%p1%d\s\s\s\s\s\s\s\s\s\s
\s%p2%s,
pfloc=\E[%p1%d;%p2%l%d;2;0p\s\s\sF%p1%d\s\s\s\s\s\s\s\s\s\s
\s%p2%s,
pfx=\E[%p1%d;%p2%l%d;1;0p F%p1%d %p2%s,
pln=\E[%p1%dp%p2%:-16s, rc=\E8, rev=\E[7m, ri=\EM,
rin=\E[%p1%dF, rmacs=^O, rmir=\E[4l,
rmkx=\E[19;0|\E[21;1|\212, rmln=\E<, rmso=\E[m,
rmul=\E[m,
rs1=\E?\E[3;3|\E[10;0|\E[21;1|\212\E[6;1|\E[1{\E[?99l\E[2;0|
\E[6;1|\E[8;0|\E[19;0|\E[1{\E[?99l,
rs2=\E[5;0|, sc=\E7,
sgr=\E[0%?%p1%p5%|%p6%|%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1
%|%p6%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smir=\E[4h,
smkx=\E[19;1|\E[21;4|\Eent, smln=\E?, smso=\E[7m,
smul=\E[4m, tbc=\E[3g, vpa=\E[%p1%{1}%+%dd, use=ansi+rep,
# 01-07-88
# printer must be set to EMUL ANSI to accept ESC codes
# <cuu1> stops at top margin
# <is1> sets cpi 10,lpi 6,form 66,left 1,right 132,top 1,bottom 66,font
# and alt font ascii,wrap on,tabs cleared
# <is2> disables newline on LF,Emphasized off
# The <u0> capability sets form length
att5310|att5320|AT&T Model 53210 or 5320 matrix printer,
xhpa, xvpa,
bufsz#0x2000, cols#132, cps#120, it#8, lines#66, orc#10,
orhi#100, orl#12, orvi#72,
cpi=%?%p1%{10}%=%t\E[w%e%p1%{12}%=%t\E[2w%e%p1%{5}%=%t\E[5w
%e%p1%{13}%=%p1%{14}%=%O%t\E[3w%e%p1%{16}%=%p1%{17}%=%O
%t\E[4w%e%p1%{6}%=%t\E[6w%e%p1%{7}%=%t\E[7w%e%p1%{8}%=%t
\E[8w%;,
cr=\r,
csnm=%?%p1%{0}%=%tusascii%e%p1%{1}%=%tenglish%e%p1%{2}%=%tfi
nnish%e%p1%{3}%=%tjapanese%e%p1%{4}%=%tnorwegian%e%p1
%{5}%=%tswedish%e%p1%{6}%=%tgermanic%e%p1%{7}%=%tfrench
%e%p1%{8}%=%tcanadian_french%e%p1%{9}%=%titalian%e%p1
%{10}%=%tspanish%e%p1%{11}%=%tline%e%p1%{12}%=%tsecurit
y%e%p1%{13}%=%tebcdic%e%p1%{14}%=%tapl%e%p1%{15}%=%tmos
aic%;,
cud=\E[%p1%de, cud1=\n, cuf=\E[%p1%da, cuf1=\s, cuu1=\EM,
ff=^L, hpa=\E[%p1%d`, ht=^I, is1=\Ec, is2=\E[20l\r,
lpi=%?%p1%{2}%=%t\E[4z%e%p1%{3}%=%t\E[5z%e%p1%{4}%=%t\E[6z%e
%p1%{6}%=%t\E[z%e%p1%{8}%=%t\E[2z%e%p1%{12}%=%t\E[3z%;,
rshm=\E[m,
scs=%?%p1%{0}%=%t\E(B%e%p1%{1}%=%t\E(A%e%p1%{2}%=%t\E(C%e%p1
%{3}%=%t\E(D%e%p1%{4}%=%t\E(E%e%p1%{5}%=%t\E(H%e%p1%{6}
%=%t\E(K%e%p1%{7}%=%t\E(R%e%p1%{8}%=%t\E(Q%e%p1%{9}%=%t
\E(Y%e%p1%{10}%=%t\E(Z%e%p1%{11}%=%t\E(0%e%p1%{12}%=%t
\E(1%e%p1%{13}%=%t\E(3%e%p1%{14}%=%t\E(8%e%p1%{15}%=%t
\E(}%;,
smgbp=\E[;%p1%dr, smglp=\E[%{1}%p1%+%ds,
smgrp=\E[;%{1}%p1%+%ds, smgtp=\E[%p1%dr, sshm=\E[5m,
u0=\E[%p1%dt, vpa=\E[%p1%dd,
# Teletype 5620, firmware version 1.1 (8;7;3) or earlier from BRL
# The following SET-UP modes are assumed for normal operation:
# CR_DEF=CR NL_DEF=INDEX DUPLEX=FULL
# Other SET-UP modes may be set for operator convenience or communication
# requirements. This termcap description is for the Resident Terminal Mode.
# No delays specified; use "stty ixon -ixany" to enable DC3/DC1 flow control!
# The BRL entry also said: UNSAFE :ll=\E[70H:
att5620-1|tty5620-1|dmd1|Teletype 5620 with old ROMs,
am, xon,
cols#88, it#8, lines#70, vt#3,
bel=^G, clear=\E[H\E[J, cr=\r, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP,
dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K,
home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL,
il1=\E[L, ind=\n, kbs=^H, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kll=\E[70;1H, nel=\r\n,
rc=\E8, ri=\E[T, rs1=\Ec, sc=\E7, use=ecma+index,
# 5620 terminfo (2.0 or later ROMS with char attributes)
# The following SET-UP modes are assumed for normal operation:
# DUPLEX=FULL GEN_FLOW=ON NEWLINE=INDEX RETURN=CR
# Other SET-UP modes may be set for operator convenience or communication
# requirements. This termcap description is for Resident Terminal Mode. No
# delays are specified; use "stty ixon -ixany" to enable DC3/DC1 flow control!
# assumptions: <ind> (scroll forward one line) is only done at screen bottom
# Be aware that older versions of the dmd have a firmware bug that affects
# parameter defaulting; for this terminal, the 0 in \E[0m is not optional.
# <msgr> is from an otherwise inferior BRL for this terminal. That entry
# also has <ll>=\E[70H commented out and marked unsafe.
# For more, see the 5620 FAQ maintained by David Breneman <daveb@dgtl.com>.
att5620|dmd|tty5620|ttydmd|5620|5620 terminal 88 columns,
OTbs, am, msgr, npc, xon,
cols#88, it#8, lines#70,
bel=^G, bold=\E[2m, clear=\E[H\E[J, cr=\r, cub1=^H,
cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM,
dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich=\E[%p1%d@,
ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\E[S, kbs=^H,
kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
khome=\E[H, kll=\E[70;1H, nel=\n,
pfx=\E[%p1%d;%p2%l%dq%p2%s, rc=\E8, rev=\E[7m, ri=\E[T,
rmso=\E[0m, rmul=\E[0m, rs1=\Ec, sc=\E7, sgr0=\E[0m,
smso=\E[7m, smul=\E[4m, use=ecma+index,
att5620-24|tty5620-24|dmd-24|teletype dmd 5620 in a 24x80 layer,
lines#24, use=att5620,
att5620-34|tty5620-34|dmd-34|teletype dmd 5620 in a 34x80 layer,
lines#34, use=att5620,
# 5620 layer running the "S" system's downloaded graphics handler:
att5620-s|tty5620-s|layer|vitty|5620 S layer,
OTbs, OTpt, am,
cols#80, it#8, lines#72,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n,
cup=\EY%p2%{32}%+%c%p1%{32}%+%c, cuu1=^K, dl1=\ED,
el=\EK, flash=\E^G, ht=^I, il1=\EI, ind=\n, kbs=^H, kclr=\E[2J,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H,
kll=\E[70;1H,
# Entries for <kf15> thru <kf28> refer to the shifted system pf keys.
#
# Entries for <kf29> thru <kf46> refer to the alternate keypad mode
# keys: = * / + 7 8 9 - 4 5 6 , 1 2 3 0 . ENTER
att605|AT&T 605 80 column 102key keyboard,
am, eo, xon,
cols#80, lines#24, lw#8, nlab#8, wsl#80,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
cr=\r, cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP,
dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, el1=\E[1K, fsl=\E8, ht=^I, ich=\E[%p1%d@, ich1=\E[@,
il1=\E[L, ind=\n, invis=\E[8m,
is1=\E[8;0|\E[?\E[13;20l\E[?\E[12h, is2=\E[m\017,
kLFT=\E[ A, kRIT=\E[ @, kbs=^H, kcbt=\E[Z, kclr=\E[2J,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P,
kdl1=\E[M, kend=\E[24;1H, kf1=\EOc, kf10=\ENp, kf11=\ENq,
kf12=\ENr, kf13=\ENs, kf14=\ENt, kf15=\EOC, kf16=\EOD,
kf17=\EOE, kf18=\EOF, kf19=\EOG, kf2=\EOd, kf20=\EOH,
kf21=\EOI, kf22=\EOJ, kf23=\ENO, kf24=\ENP, kf25=\ENQ,
kf26=\ENR, kf27=\ENS, kf28=\ENT, kf29=\EOP, kf3=\EOe,
kf30=\EOQ, kf31=\EOR, kf32=\EOS, kf33=\EOw, kf34=\EOx,
kf35=\EOy, kf36=\EOm, kf37=\EOt, kf38=\EOu, kf39=\EOv,
kf4=\EOf, kf40=\EOl, kf41=\EOq, kf42=\EOr, kf43=\EOs,
kf44=\EOp, kf45=\EOn, kf46=\EOM, kf5=\EOg, kf6=\EOh,
kf7=\EOi, kf8=\EOj, kf9=\ENo, khome=\E[H, kich1=\E[@,
kil1=\E[L, kind=\E[S, knp=\E[U, kpp=\E[V, ll=\E[24H,
mc4=\E[?4i, mc5=\E[?5i, nel=\EE,
pfx=\E[%p1%d;%p2%l%02dq F%p1%1d %p2%s,
pln=\E[%p1%d;0;0;0q%p2%:-16.16s, rc=\E8, rev=\E[7m,
rmacs=^O, rmir=\E[4l, rmln=\E[2p, rmso=\E[m, rmul=\E[m,
rs2=\Ec\E[?3l, sc=\E7, sgr0=\E[m\017, smacs=\E)0\016,
smir=\E[4h, smln=\E[p, smso=\E[7m, smul=\E[4m,
tsl=\E7\E[25;%i%p1%dx,
att605-pc|ATT 605 in pc term mode,
acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x
\263,
cbt=\E[Z, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cuu1=\E[A,
dch1=\E[P, dl1=\E[M, ich1=\E[@, il1=\E[L, kcbt=\E[Z,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P,
kdl1=\E[M, kend=\E[F, kf1=\E[M, kf10=\E[V, kf2=\E[N,
kf3=\E[O, kf4=\E[P, kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T,
kf9=\E[U, khome=\E[H, kich1=\E[@, knp=\E[G, kpp=\E[I,
rmsc=\E[50;0|$<400>, smsc=\E[?11l\E[50;1|$<250>,
xoffc=g, xonc=e, use=att605,
att605-w|AT&T 605-w 132 column 102 key keyboard,
cols#132, wsl#132,
is1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h\E(B\E)0, use=att605,
# (att610: I added <rmam>/<smam> based on the init string. I also
# added <indn> and <rin> because the BSD file says the att615s have them,
# and the 615 is like a 610 with a big keyboard, and most of their other
# smart terminals support the same sequence -- esr)
att610|AT&T 610; 80 column; 98key keyboard,
am, eslok, hs, mir, msgr, xenl, xon,
cols#80, it#8, lh#2, lines#24, lw#8, nlab#8, wsl#80,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h\E[?12l, cr=\r,
- csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
+ cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
flash=\E[?5h$<200>\E[?5l, fsl=\E8, home=\E[H, ht=^I,
ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED,
invis=\E[8m,
is1=\E[8;0|\E[?3;4;5;13;15l\E[13;20l\E[?7h\E[12h\E(B\E)0,
is2=\E[m\017, is3=\E(B\E)0, kLFT=\E[ @, kRIT=\E[ A, kbs=^H,
kcbt=\E[Z, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kf1=\EOc, kf10=\ENp, kf11=\ENq, kf12=\ENr,
kf13=\ENs, kf14=\ENt, kf2=\EOd, kf3=\EOe, kf4=\EOf, kf5=\EOg,
kf6=\EOh, kf7=\EOi, kf8=\EOj, kf9=\ENo, khome=\E[H,
kind=\E[S, kri=\E[T, ll=\E[24H, mc4=\E[?4i, mc5=\E[?5i,
nel=\EE,
pfx=\E[%p1%d;%p2%l%02dq F%p1%1d %p2%s,
pln=\E[%p1%d;0;0;0q%p2%:-16.16s, rc=\E8, rev=\E[7m,
ri=\EM, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmln=\E[2p,
rmso=\E[m, rmul=\E[m, rs2=\Ec\E[?3l, sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1
%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h,
smln=\E[p, smso=\E[7m, smul=\E[4m, tsl=\E7\E[25;%i%p1%dx,
- use=ecma+index,
+ use=ecma+index, use=att610+cvis0,
att610-w|AT&T 610; 132 column; 98key keyboard,
cols#132, wsl#132,
is1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h,
use=att610,
att610-103k|AT&T 610; 80 column; 103key keyboard,
kBEG=\ENB, kCAN=\EOW, kCMD=\EOU, kCPY=\END, kCRT=\EON,
kDC=\ENF, kDL=\ENE, kEND=\ENN, kEOL=\EOA, kEXT=\EOK,
kFND=\EOX, kHLP=\EOM, kMOV=\ENC, kMSG=\EOL, kNXT=\ENH,
kOPT=\EOR, kPRT=\EOZ, kPRV=\ENG, kRDO=\EOT, kRES=\EOQ,
kRPL=\EOY, kSAV=\EOO, kSPD=\EOP, kUND=\EOS, kbeg=\E9,
kcan=\EOw, kclo=\EOV, kcmd=\EOu, kcpy=\ENd, kcrt=\EOn,
kdch1=\ENf, kdl1=\ENe, kel=\EOa, kend=\E0, kent=\r,
kext=\EOk, kf10@, kf11@, kf12@, kf13@, kf14@, kf9@, kfnd=\EOx,
khlp=\EOm, kich1=\ENj, kmov=\ENc, kmrk=\ENi, kmsg=\EOl,
knp=\E[U, knxt=\ENh, kopn=\EOv, kopt=\EOr, kpp=\E[V,
kprt=\EOz, kprv=\ENg, krdo=\EOt, kref=\EOb, kres=\EOq,
krfr=\ENa, krmir=\ENj, krpl=\EOy, krst=\EOB, ksav=\EOo,
kslt=\ENI, kspd=\EOp, kund=\EOs, use=att610,
att610-103k-w|AT&T 610; 132 column; 103key keyboard,
cols#132, wsl#132,
is1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h,
use=att610-103k,
att615|AT&T 615; 80 column; 98key keyboard,
kLFT=\E[ A, kRIT=\E[ @, kf15=\EOC, kf16=\EOD, kf17=\EOE,
kf18=\EOF, kf19=\EOG, kf20=\EOH, kf21=\EOI, kf22=\EOJ,
kf23=\ENO, kf24=\ENP, kf25=\ENQ, kf26=\ENR, kf27=\ENS,
kf28=\ENT, kf29=\EOP, kf30=\EOQ, kf31=\EOR, kf32=\EOS,
kf33=\EOw, kf34=\EOx, kf35=\EOy, kf36=\EOm, kf37=\EOt,
kf38=\EOu, kf39=\EOv, kf40=\EOl, kf41=\EOq, kf42=\EOr,
kf43=\EOs, kf44=\EOp, kf45=\EOn, kf46=\EOM, use=att610,
att615-w|AT&T 615; 132 column; 98key keyboard,
kLFT=\E[ A, kRIT=\E[ @, kf15=\EOC, kf16=\EOD, kf17=\EOE,
kf18=\EOF, kf19=\EOG, kf20=\EOH, kf21=\EOI, kf22=\EOJ,
kf23=\ENO, kf24=\ENP, kf25=\ENQ, kf26=\ENR, kf27=\ENS,
kf28=\ENT, kf29=\EOP, kf30=\EOQ, kf31=\EOR, kf32=\EOS,
kf33=\EOw, kf34=\EOx, kf35=\EOy, kf36=\EOm, kf37=\EOt,
kf38=\EOu, kf39=\EOv, kf40=\EOl, kf41=\EOq, kf42=\EOr,
kf43=\EOs, kf44=\EOp, kf45=\EOn, kf46=\EOM, use=att610-w,
att615-103k|AT&T 615; 80 column; 103key keyboard,
kLFT=\E[ A, kRIT=\E[ @, use=att610-103k,
att615-103k-w|AT&T 615; 132 column; 103key keyboard,
kLFT=\E[ A, kRIT=\E[ @, use=att610-103k-w,
# (att620: I added <rmam>/<smam> based on the init string and
# <rin>/<indn> from a BSD termcap -- esr)
att620|AT&T 620; 80 column; 98key keyboard,
am, eslok, hs, mir, msgr, xenl, xon,
cols#80, it#8, lh#2, lines#24, lw#8, nlab#8, wsl#80,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h\E[?12l, cr=\r,
- csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
+ cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
flash=\E[?5h$<200>\E[?5l, fsl=\E8, home=\E[H, ht=^I,
ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED,
invis=\E[8m,
is1=\E[8;0|\E[?3;4;5;13;15l\E[13;20l\E[?7h\E[12h,
is2=\E[m\017, is3=\E(B\E)0, kLFT=\E[ A, kRIT=\E[ @, kbs=^H,
kcbt=\E[Z, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kf1=\EOc, kf10=\ENp, kf11=\ENq, kf12=\ENr,
kf13=\ENs, kf14=\ENt, kf15=\EOC, kf16=\EOD, kf17=\EOE,
kf18=\EOF, kf19=\EOG, kf2=\EOd, kf20=\EOH, kf21=\EOI,
kf22=\EOJ, kf23=\ENO, kf24=\ENP, kf25=\ENQ, kf26=\ENR,
kf27=\ENS, kf28=\ENT, kf29=\EOP, kf3=\EOe, kf30=\EOQ,
kf31=\EOR, kf32=\EOS, kf33=\EOw, kf34=\EOx, kf35=\EOy,
kf36=\EOm, kf37=\EOt, kf38=\EOu, kf39=\EOv, kf4=\EOf,
kf40=\EOl, kf41=\EOq, kf42=\EOr, kf43=\EOs, kf44=\EOp,
kf45=\EOn, kf46=\EOM, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj,
kf9=\ENo, khome=\E[H, kind=\E[S, kri=\E[T, ll=\E[24H,
mc4=\E[?4i, mc5=\E[?5i, nel=\EE,
pfx=\E[%p1%d;%p2%l%02dq F%p1%1d %p2%s,
pln=\E[%p1%d;0;0;0q%p2%:-16.16s, rc=\E8, rev=\E[7m,
ri=\EM, rmacs=\E(B\017, rmam=\E[?7l, rmir=\E[4l,
rmln=\E[2p, rmso=\E[m, rmul=\E[m, rs2=\Ec\E[?3l, sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1
%|%t;7%;%?%p7%t;8%;m%?%p9%t\E)0\016%e\E(B\017%;,
sgr0=\E[m\E(B\017, smacs=\E)0\016, smam=\E[?7h,
smir=\E[4h, smln=\E[p, smso=\E[7m, smul=\E[4m,
tsl=\E7\E[25;%i%p1%dx, use=ecma+index,
+ use=att610+cvis0,
att620-w|AT&T 620; 132 column; 98key keyboard,
cols#132, wsl#132,
is1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h,
use=att620,
att620-103k|AT&T 620; 80 column; 103key keyboard,
kBEG=\ENB, kCAN=\EOW, kCMD=\EOU, kCPY=\END, kCRT=\EON,
kDC=\ENF, kDL=\ENE, kEND=\ENN, kEOL=\EOA, kEXT=\EOK,
kFND=\EOX, kHLP=\EOM, kMOV=\ENC, kMSG=\EOL, kNXT=\ENH,
kOPT=\EOR, kPRT=\EOZ, kPRV=\ENG, kRDO=\EOT, kRES=\EOQ,
kRPL=\EOY, kSAV=\EOO, kSPD=\EOP, kUND=\EOS, kbeg=\E9,
kcan=\EOw, kclo=\EOV, kcmd=\EOu, kcpy=\ENd, kcrt=\EOn,
kdch1=\ENf, kdl1=\ENe, kel=\EOa, kend=\E0, kent=\r,
kext=\EOk, kf10@, kf11@, kf12@, kf13@, kf14@, kf15@, kf16@, kf17@,
kf18@, kf19@, kf20@, kf21@, kf22@, kf23@, kf24@, kf25@, kf26@, kf27@,
kf28@, kf29@, kf30@, kf31@, kf32@, kf33@, kf34@, kf35@, kf36@, kf37@,
kf38@, kf39@, kf40@, kf41@, kf42@, kf43@, kf44@, kf45@, kf46@, kf9@,
kfnd=\EOx, khlp=\EOm, kich1=\ENj, kmov=\ENc, kmrk=\ENi,
kmsg=\EOl, knp=\E[U, knxt=\ENh, kopn=\EOv, kopt=\EOr,
kpp=\E[V, kprt=\EOz, kprv=\ENg, krdo=\EOt, kref=\EOb,
kres=\EOq, krfr=\ENa, krmir=\ENj, krpl=\EOy, krst=\EOB,
ksav=\EOo, kslt=\ENI, kspd=\EOp, kund=\EOs, use=att620,
att620-103k-w|AT&T 620; 132 column; 103key keyboard,
cols#132, wsl#132,
is1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h,
use=att620-103k,
# AT&T (formerly Teletype) 630 Multi-Tasking Graphics terminal
# The following SETUP modes are assumed for normal operation:
# Local_Echo=Off Gen_Flow=On Return=CR Received_Newline=LF
# Font_Size=Large Non-Layers_Window_Cols=80
# Non-Layers_Window_Rows=60
# Other SETUP modes may be set for operator convenience or communication
# requirements. Some capabilities assume a printer attached to the Aux EIA
# port. This termcap description is for the Fixed Non-Layers Window. No
# delays are specified; use "stty ixon -ixany" to enable DC3/DC1 flow control!
# (att630: added <ich1>, <blink> and <dim> from a BSD termcap file -- esr)
att630|AT&T 630 windowing terminal,
OTbs, am, da, db, mir, msgr, npc, xon,
cols#80, it#8, lines#60, lm#0,
bel=^G, blink=\E[5m, cbt=\E[Z, clear=\E[H\E[J, cr=\r,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K,
el1=\E[1K, home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\E[@,
il=\E[%p1%dL, il1=\E[L, ind=\ED, is2=\E[m, kbs=^H, kcbt=\E[Z,
kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=\E[P, kdl1=\E[M, kent=\r, kf10=\ENp, kf11=\ENq,
kf12=\ENr, kf13=\ENs, kf14=\ENt, kf15=\ENu, kf16=\ENv,
kf17=\ENw, kf18=\ENx, kf19=\ENy, kf20=\ENz, kf21=\EN{,
kf22=\EN|, kf23=\EN}, kf24=\EN~, kf9=\ENo, khome=\E[H,
kich1=\E[@, kil1=\E[L, mc4=\E[?4i, mc5=\E[?5i, nel=\r\n,
pfx=\E[%p1%d;%p2%l%dq%p2%s, rc=\E8, rev=\E[7m, ri=\EM,
rmir=\E[4l, rmso=\E[m, rmul=\E[m, rs2=\Ec, sc=\E7,
sgr=\E[0%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%p4%|%t;7
%;m,
sgr0=\E[m, smir=\E[4h, smso=\E[7m, smul=\E[4m,
use=ecma+index,
att630-24|5630-24|5630DMD-24|630MTG-24|AT&T 630 windowing terminal 24 lines,
lines#24, use=att630,
# This is the att700 entry for 700 native emulation of the AT&T 700
# terminal. Comments are relative to changes from the 605V2 entry and
# att730 on which the entry is based. Comments show the terminfo
# capability name, termcap name, and description.
#
# Here is what's going onm in the init string:
# ESC [ 50;4| set 700 native mode (really is 605)
# x ESC [ 56;ps| set lines to 24: ps=0; 40: ps=1 (plus status line)
# ESC [ 53;0| set GenFlow to Xon/Xoff
# ESC [ 8 ;0| set CR on NL
# x ESC [ ? 3 l/h set workspace: 80 col(l); 132 col(h)
# ESC [ ? 4 l jump scroll
# ESC [ ? 5 l/h video: normal (l); reverse (h)
# ESC [ ?13 l Labels on
# ESC [ ?15 l parity check = no
# ESC [ 13 l monitor mode off
# ESC [ 20 l LF on NL (not CRLF on NL)
# ESC [ ? 7 h autowrap on
# ESC [ 12 h local echo off
# ESC ( B GO = ASCII
# ESC ) 0 G1 = Special Char & Line Drawing
# ESC [ ? 31 l Set 7 bit controls
#
# Note: Most terminals, especially the 600 family use Reverse Video for
# standout mode. DEC also uses reverse video. The VT100 uses bold in addition
# Assume we should stay with reverse video for 70.. However, the 605V2 exits
# standout mode with \E[m (all normal attributes). The 730 entry simply
# exits reverse video which would leave other current attributes intact. It
# was assumed the 730 entry to be more correct so rmso has changed. The
# 605V2 has no sequences to turn individual attributes off, thus its setting
# and the rmso/smso settings from the 730.
#
# Note: For the same reason as above in rmso I changed exit under-score mode
# to specifically turn off underscore, rather than return to all normal
# attributes
#
# Note: The following pkey_xmit is taken from the 605V2 which contained the
# capability as pfxl. It was changed here to pfx since pfxl
# will only compile successfully with Unix 4.0 tic. Also note that pfx only
# allows strings to be parameters and label values must be programmed as
# constant strings. Supposedly the pfxl of Version 4.0 allows both labels
# and strings to be parameters. The 605V2 pfx entry should be examined later
# in this regard. For reference the 730 pfxl entry is shown here for comparison
# 730 pfx entry:
# pfxl=\E[%?%p1%{25}%<%t%p1%e%p1%{24}%-%;%d;%p2%l%02d%?%p1%{25}%<%tq\s\s\s
# SYS\s\s\s\s\sF%p1%:-2d\s\s%e;0;3q%;%p2%s,
#
# (for 4.0 tic)
# pfxl=\E[%p1%d;%p2%l%02dq%?%p1%{9}%<%t F%p1%1d %;%p2%s,
#
# (for <4.0 tic)
# pfx=\E[%p1%d;%p2%l%02dq%?%p1%{9}%<%t F%p1%1d %;%p2%s,
#
# From the AT&T 705 Multi-tasking terminal user's guide Page 8-8,8-9
#
# Port1 Interface
#
# modular 10 pin Connector
# Left side Right side
# Pin 1 2 3 4 5 6 7 8 9 10
#
# Key (notch) at bottom
#
# Pin 1 DSR
# 3 DCD
# 4 DTR
# 5 Sig Ground
# 6 RD
# 7 SD
# 8 CTS
# 9 RTS
# 10 Frame Ground
#
# The manual is 189 pages and is loaded with details about the escape codes,
# etc..... Available from AT&T CIC 800-432-6600...
# ask for Document number 999-300-660..
#
att700|AT&T 700 24x80 column display w/102key keyboard,
am, eslok, hs, mir, msgr, xenl, xon,
cols#80, it#8, lh#2, lines#24, lw#8, nlab#8, wsl#80,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h\E[?12l, cr=\r,
- csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
+ cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
enacs=\E(B\E)0, flash=\E[?5h$<200>\E[?5l, fln=4\,4,
fsl=\E8, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=\ED, invis=\E[8m,
is2=\E[50;4|\E[53;0|\E[8;0|\E[?4;13;15l\E[13;20l\E[?7h\E[12h
\E(B\E)0\E[?31l\E[0m\017,
is3=\E(B\E)0, kLFT=\E[ A, kRIT=\E[ @, kbs=^H, kcbt=\E[Z,
kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=\E[P, kdl1=\E[M, kend=\E[24;1H, kf1=\EOc, kf10=\ENp,
kf11=\ENq, kf12=\ENr, kf13=\ENs, kf14=\ENt, kf15=\EOC,
kf16=\EOD, kf17=\EOE, kf18=\EOF, kf19=\EOG, kf2=\EOd,
kf20=\EOH, kf21=\EOI, kf22=\EOJ, kf23=\ENO, kf24=\ENP,
kf25=\ENQ, kf26=\ENR, kf27=\ENS, kf28=\ENT, kf29=\EOq,
kf3=\EOe, kf30=\EOr, kf31=\EOs, kf32=\EOt, kf33=\EOu,
kf34=\EOv, kf35=\EOw, kf36=\EOx, kf37=\EOy, kf38=\EOu,
kf39=\EOv, kf4=\EOf, kf40=\EOl, kf41=\EOq, kf42=\EOr,
kf43=\EOs, kf44=\EOp, kf45=\EOn, kf46=\EOM, kf5=\EOg,
kf6=\EOh, kf7=\EOi, kf8=\EOj, kf9=\ENo, khome=\E[H,
kich1=\E[@, kil1=\E[L, knp=\E[U, kpp=\E[V, ll=\E[24H,
mc0=\E[i, mc4=\E[?4i, mc5=\E[?5i, nel=\EE,
pfx=\E[%p1%d;%p2%l%02dq%?%p1%{9}%<%t\s\s\sF%p1%1d\s\s\s\s\s
\s\s\s\s\s\s%;%p2%s,
pln=\E[%p1%d;0;0;0q%p2%:-16.16s, rc=\E8, rev=\E[7m,
ri=\EM, rmacs=^O, rmir=\E[4l, rmln=\E[2p, rmso=\E[27m,
rmul=\E[24m, rmxon=\E[53;3|, rs1=\Ec\E[?3;5l\E[56;0|,
sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1
%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smir=\E[4h, smln=\E[p, smso=\E[7m,
smul=\E[4m, smxon=\E[53;0|, tbc=\E[3g,
- tsl=\E7\E[99;%i%p1%dx, use=ansi+rep,
+ tsl=\E7\E[99;%i%p1%dx, use=ansi+rep, use=att610+cvis0,
# This entry was modified 3/13/90 by JWE.
# fixes include additions of <enacs>, correcting <rep>, and modification
# of <kHOM>. (See comments below)
# att730 has status line of 80 chars
# These were commented out: <indn=\E[%p1%dS>, <rin=\E[%p1%dT>,
# the <kf25> and up keys are used for shifted system Fkeys
# NOTE: JWE 3/13/90 The 98 key keyboard translation for shift/HOME is
# currently the same as <khome> (unshifted HOME or \E[H). On the 102, 102+1
# and 122 key keyboards, the 730's translation is \E[2J. For consistency
# <kHOM> has been commented out. The user can uncomment <kHOM> if using the
# 102, 102+1, or 122 key keyboards
# kHOM=\E[2J,
# (att730: I added <rmam>/<smam> based on the init string -- esr)
att730|AT&T 730 windowing terminal,
am, da, db, eslok, hs, mir, msgr, npc, xenl, xon,
cols#80, it#8, lh#2, lines#60, lm#0, lw#8, nlab#24, wsl#80,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h\E[?12l, cr=\r,
- csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
+ cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
enacs=\E(B\E)0, flash=\E[?5h$<200>\E[?5l, fsl=\E8,
home=\E[H, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L,
ind=\ED, invis=\E[8m,
is1=\E[8;0|\E[?3;4;5;13;15l\E[13;20l\E[?7h\E[12h\E(B\E)B,
is2=\E[m\017, is3=\E(B\E)0, kLFT=\E[ @, kRIT=\E[ A, kbs=^H,
kcbt=\E[Z, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kf1=\EOc, kf10=\ENp, kf11=\ENq, kf12=\ENr,
kf13=\ENs, kf14=\ENt, kf15=\ENu, kf16=\ENv, kf17=\ENw,
kf18=\ENx, kf19=\ENy, kf2=\EOd, kf20=\ENz, kf21=\EN{,
kf22=\EN|, kf23=\EN}, kf24=\EN~, kf25=\EOC, kf26=\EOD,
kf27=\EOE, kf28=\EOF, kf29=\EOG, kf3=\EOe, kf30=\EOH,
kf31=\EOI, kf32=\EOJ, kf33=\ENO, kf34=\ENP, kf35=\ENQ,
kf36=\ENR, kf37=\ENS, kf38=\ENT, kf39=\EOU, kf4=\EOf,
kf40=\EOV, kf41=\EOW, kf42=\EOX, kf43=\EOY, kf44=\EOZ,
kf45=\EO[, kf46=\EO\s, kf47=\EO], kf48=\EO\^, kf5=\EOg,
kf6=\EOh, kf7=\EOi, kf8=\EOj, kf9=\ENo, khome=\E[H,
kich1=\E[@, kil1=\E[L, kind=\E[S, kri=\E[T,
mc0=\E[?19h\E[0i, mc4=\E[?4i, mc5=\E[?5i, nel=\EE,
pfx=\E[%?%p1%{25}%<%t%p1%e%p1%{24}%-%;%d;%p2%l%02d%?%p1%{25}
%<%tq\s\s\sSYS\s\s\s\s\sF%p1%:-2d\s\s%e;0;3q%;%p2%s,
pfxl=\E[%p1%d;%p2%l%02d;0;0q%p3%:-16.16s%p2%s,
pln=\E[%p1%d;0;0;0q%p2%:-16.16s, rc=\E8, rev=\E[7m,
ri=\EM, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmln=\E[?13h,
rmso=\E[27m, rmul=\E[24m, rmxon=\E[?21l, rs2=\Ec\E[?3l,
sc=\E7,
sgr=\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1
%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h,
smln=\E[?13l, smso=\E[7m, smul=\E[4m, smxon=\E[?21h,
swidm=\E#6, tsl=\E7\E[;%i%p1%dx, use=ansi+rep,
+ use=att610+cvis0,
att730-41|730MTG-41|AT&T 730-41 windowing terminal Version,
lines#41, use=att730,
att730-24|730MTG-24|AT&T 730-24 windowing terminal Version,
lines#24, use=att730,
att730r|730MTGr|AT&T 730 rev video windowing terminal Version,
flash=\E[?5l$<200>\E[?5h,
is1=\E[8;0|\E[?3;4;13;15l\E[?5h\E[13;20l\E[?7h\E[12h\E(B\E)B, use=att730,
att730r-41|730MTG-41r|AT&T 730r-41 rev video windowing terminal Version,
lines#41, use=att730r,
att730r-24|730MTGr-24|AT&T 730r-24 rev video windowing terminal Version,
lines#24, use=att730r,
# The following represents the screen layout along with the associated
# bezel buttons for the 5430/pt505 terminal. The "kf" designations do
# not appear on the screen but are shown to reference the bezel buttons.
# The "CMD", "MAIL", and "REDRAW" buttons are shown in their approximate
# position relative to the screen.
#
#
#
# +----------------------------------------------------------------+
# | |
# XXXX | kf0 kf24 | XXXX
# | |
# | |
# XXXX | kf1 kf23 | XXXX
# | |
# | |
# XXXX | kf2 kf22 | XXXX
# | |
# | |
# XXXX | kf3 kf21 | XXXX
# | |
# | |
# XXXX | kf4 kf20 | XXXX
# | |
# | |
# XXXX | kf5 kf19 | XXXX
# | |
# | |
# XXXX | kf6 kf18 | XXXX
# | |
# | |
# XXXX | | XXXX
# | |
# | |
# +----------------------------------------------------------------+
#
# XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
#
# Note: XXXX represents the screen buttons
# CMD REDRAW
#
# MAIL
#
# version 1 note:
# The character string sent by key 'kf26' may be user programmable
# to send either \E[16s, or \E[26s.
# The character string sent by key 'krfr' may be user programmable
# to send either \E[17s, or \E[27s.
#
# Depression of the "CMD" key sends \E! (kcmd)
# Depression of the "MAIL" key sends \E[26s (kf26)
# "REDRAW" same as "REFRESH" (krfr)
#
# "kf" functions adds carriage return to output string if terminal is in
# 'new line' mode.
#
# The following are functions not covered in the table above:
#
# Set keyboard character (SKC): \EPn1;Pn2w
# Pn1= 0 Back Space key
# Pn1= 1 Break key
# Pn2= Program char (hex)
#
# Screen Definition (SDF): \E[Pn1;Pn2;Pn3;Pn4;Pn5t
# Pn1= Window number (1-39)
# Pn2-Pn5= Y;X;Y;X coordinates
#
# Screen Selection (SSL): \E[Pnu
# Pn= Window number
#
# Set Terminal Modes (SM): \E[Pnh
# Pn= 3 Graphics mode
# Pn= > Cursor blink
# Pn= < Enter new line mode
# Pn= = Enter reverse insert/replace mode
# Pn= ? Enter no scroll mode
#
# Reset Terminal Mode (RM): \E[Pnl
# Pn= 3 Exit graphics mode
# Pn= > Exit cursor blink
# Pn= < Exit new line mode
# Pn= = Exit reverse insert/replace mode
# Pn= ? Exit no scroll mode
#
# Screen Status Report (SSR): \E[Pnp
# Pn= 0 Request current window number
# Pn= 1 Request current window dimensions
#
# Device Status Report (DSR): \E[6n Request cursor position
#
# Call Status Report (CSR): \E[Pnv
# Pn= 0 Call failed
# Pn= 1 Call successful
#
# Transparent Button String (TBS): \E[Pn1;Pn2;Pn3;{string
# Pn1= Button number to be loaded
# Pn2= Character count of "string"
# Pn3= Key mode being loaded:
# 0= Unshifted
# 1= Shifted
# 2= Control
# String= Text string (15 chars max)
#
# Screen Number Report (SNR): \E[Pnp
# Pn= Screen number
#
# Screen Dimension Report (SDR): \E[Pn1;Pn2r
# Pn1= Number of rows available in window
# Pn2= Number of columns available in window
#
# Cursor Position Report (CPR): \E[Pn1;Pn2R
# Pn1= "Y" Position of cursor
# Pn2= "X" Position of cursor
#
# Request Answer Back (RAB): \E[c
#
# Answer Back Response (ABR): \E[?;*;30;VSV
# *= 0 No printer available
# *= 2 Printer available
# V= Software version number
# SV= Software sub version number
# (printer-available field not documented in v1)
#
# Screen Alignment Aid: \En
#
# Bell (lower pitch): \E[x
#
# Dial Phone Number: \EPdstring\
# string= Phone number to be dialed
#
# Set Phone Labels: \EPpstring\
# string= Label for phone buttons
#
# Set Clock: \EPchour;minute;second\
#
# Position Clock: \EPsY;X\
# Y= "Y" coordinate
# X= "X" coordinate
#
# Delete Clock: \Epr\
#
# Programming The Function Buttons: \EPfPn;string\
# Pn= Button number (00-06, 18-24)
# (kf00-kf06, kf18-kf24)
# string= Text to sent on button depression
#
# The following in version 2 only:
#
# Request For Local Directory Data: \EPp12;\
#
# Local Directory Data to host: \EPp11;LOCAL...DIRECTORY...DATA\
#
# Request for Local Directory Data in print format: \EPp13;\
#
# Enable 'Prt on Line' mode: \022 (DC2)
#
# Disable 'Prt on Line' mode: \024 (DC4)
#
# 05-Aug-86:
# The following Terminfo entry describes functions which are supported by
# the AT&T 5430/pt505 terminal software version 2 and later.
att505|pt505|att5430|gs5430|AT&T Personal Terminal 505 or 5430 GETSET terminal,
am, xon,
cols#80, it#8, lines#24,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[2J\E[H,
cnorm=\E[>l, cr=\r, cub=\E[%p1%dD, cub1=\E[D,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[>h, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ed=\E[0J, el=\E[0K, el1=\E[2K, home=\E[H, ht=^I,
il=\E[%p1%dL, il1=\E[L, ind=\n,
is1=\EPr\\E[0u\E[2J\E[0;0H\E[m\E[3l\E[<l\E[4l\E[>l\E[=l\E[?l,
kbs=^H, kcmd=\E!, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kf0=\E[00s, kf1=\E[01s, kf18=\E[18s,
kf19=\E[19s, kf2=\E[02s, kf20=\E[20s, kf21=\E[21s,
kf22=\E[22s, kf23=\E[23s, kf24=\E[24s, kf26=\E[26s,
kf3=\E[03s, kf4=\E[04s, kf5=\E[05s, kf6=\E[06s,
krfr=\E[27s, mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m,
rmacs=\E[10m, rmam=\E[11;1j, rmir=\E[4l, rmso=\E[m,
rmul=\E[m, rs1=\Ec, sc=\E7, sgr0=\E[m, smacs=\E[11m,
smam=\E[11;0j, smir=\E[4h, smso=\E[1m, smul=\E[4m,
# The following Terminfo entry describes functions which are supported by
# the AT&T 5430/pt505 terminal software version 1.
att505-24|pt505-24|gs5430-24|AT&T PT505 or 5430 GETSET version 1 24 lines,
lines#24,
mc4@, mc5@, rc@, rmam@, sc@, smam@, use=att505,
tt505-22|pt505-22|gs5430-22|AT&T PT505 or 5430 GETSET version 1 22 lines,
lines#22, use=att505,
#
#### ------------------ TERMINFO FILE CAN BE SPLIT HERE ---------------------
# This cut mark helps make life less painful for people running ncurses tic
# on machines with relatively little RAM. The file can be broken in half here
# cleanly and compiled in sections -- no `use' references cross this cut
# going forward.
#
#### Ampex (Dialogue)
#
# Yes, these are the same people who are better-known for making audio- and
# videotape. I'm told they are located in Redwood City, CA.
#
# From: <cbosg!ucbvax!SRC:george> Fri Sep 11 22:38:32 1981
# (ampex80: some capabilities merged in from SCO's entry -- esr)
ampex80|a80|d80|dialogue|dialogue80|ampex dialogue 80,
OTbs, am, bw, ul,
cols#80, it#8, lines#24,
bel=^G, cbt=\EI, clear=\E*$<75>, cr=\r, cub1=^H, cud1=\n,
cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
dch1=\EW, dl1=\ER$<5*>, ed=\Ey, el=\Et, ht=^I, hts=\E1,
ich1=\EQ, il1=\EE$<5*>, ind=\n, is2=\EA, rmso=\Ek, rmul=\Em,
smso=\Ej, smul=\El, tbc=\E3,
# This entry was from somebody anonymous, Tue Aug 9 20:11:37 1983, who wrote:
ampex175|ampex d175,
am,
cols#80, lines#24,
bel=^G, clear=\E+, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, ed=\Ey, el=\Et, home=^^, ich1=\EQ, il1=\EE, ind=\n,
is2=\EX\EA\EF, kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K,
kdch1=\EW, kdl1=\ER, khome=^^, kich1=\EQ, kil1=\EE, ll=^^^K,
rmcup=\EF, rmso=\Ek, rmul=\Em, smcup=\EN, smso=\Ej, smul=\El,
# No backspace key in the main QWERTY cluster. Fortunately, it has a
# NEWLINE/PAGE key just above RETURN that sends a strange single-character
# code. Given a suitable Unix (one that lets you set an echo-erase-as-BS-SP-BS
# mode), this key can be used as the erase key; I find I like this. Because
# some people and some systems may not, there is another termcap ("ampex175")
# that suppresses this little eccentricity by omitting the relevant capability.
ampex175-b|ampex d175 using left arrow for erase,
kbs=^_, use=ampex175,
# From: Richard Bascove <atd!dsd!rcb@ucbvax.berkeley.edu>
# (ampex210: removed obsolete ":kn#10:" -- esr)
ampex210|a210|ampex a210,
OTbs, am, hs, xenl,
cols#80, it#8, lines#24, xmc#1,
cbt=\EI, clear=\E*, cub1=^H, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, ed=\Ey, el=\Et, flash=\EU\EX\EU\EX\EU\EX\EU\EX,
fsl=\E.2, home=^^, ht=^I, ich1=\EQ,
if=/usr/share/tabset/std, il1=\EE, invis@,
is2=\EC\Eu\E'\E(\El\EA\E%\E{\E.2\EG0\Ed\En, kcub1=^H,
kcud1=^V, kcuf1=^L, kcuu1=^K, kf0=^A0\r, kf1=^A1\r,
kf2=^A2\r, kf3=^A3\r, kf4=^A4\r, kf5=^A5\r, kf6=^A6\r,
kf7=^A7\r, kf8=^A8\r, kf9=^A9\r, khome=^^,
tsl=\E.0\Eg\E}\Ef, use=adm+sgr,
# (ampex219: I added <rmam>/<smam> based on the init string, added <cvvis>
# from ampex219w, added <cnorm>=\E[?3l, irresistibly suggested by <cvvis>,
# and moved the padding to be *after* the caps -- esr)
ampex219|ampex-219|amp219|Ampex with Automargins,
hs, xenl,
cols#80, it#8, lines#24,
bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>, cbt=\E[Z,
clear=\E[H\E[2J$<50>, cnorm=\E[?3l, cr=\r,
csr=%i\E[%p1%2d;%p2%2dr, cub1=^H, cud1=\E[B,
cuf1=\E[C$<2>, cup=\E[%i%p1%d;%p2%dH$<5>,
cuu1=\E[A$<2>, cvvis=\E[?3h, dim=\E[1m, ed=\E[J$<50>,
el=\E[K$<3>, home=\E[H, ht=^I, ind=\n,
is2=\E>\E[?1l\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\E[21~,
kf1=\E[7~, kf2=\E[8~, kf3=\E[9~, kf4=\E[10~, kf5=\E[11~,
kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[H,
rev=\E[7m, ri=\EM$<5>, rmam=\E[?7l, rmkx=\E>,
rmso=\E[m$<2>, rmul=\E[m$<2>, sgr0=\E[m$<2>, smam=\E[?7h,
smkx=\E=, smso=\E[7m$<2>, smul=\E[4m$<2>,
ampex219w|ampex-219w|amp219w|Ampex 132 cols,
cols#132, lines#24,
bel=^G, cr=\r, cud1=\n, ind=\n,
is2=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h, use=ampex219,
# (ampex232: removed <if=/usr/share/tabset/ampex>, no file and no <hts> --esr)
ampex232|ampex-232|Ampex Model 232,
am,
cols#80, lines#24, xmc#1,
cbt=\EI, civis=\E.0, clear=\E+, cnorm=\E.4, cub1=^H, cud1=^V,
cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
dch1=\EW, dl1=\ER$<5*/>, ed=\EY, el=\ET,
flash=\Eb$<200/>\Ed, ht=^I, ich1=\EQ, il1=\EE$<5*/>,
invis@, is2=\Eg\El, kbs=^H, kcub1=^H, kcud1=^V, kcuf1=^L,
kcuu1=^K, kf0=^A@\r, kf1=^AA\r, kf2=^AB\r, kf3=^AC\r,
kf4=^AD\r, kf5=^AE\r, kf6=^AF\r, kf7=^AG\r, kf8=^AH\r,
kf9=^AI\r, khome=^^, use=adm+sgr,
# (ampex: removed <if=/usr/share/tabset/amp-132>, no file and no <hts> -- esr)
ampex232w|Ampex Model 232 / 132 columns,
cols#132, lines#24,
is2=\E\034Eg\El, use=ampex232,
#### Ann Arbor (aa)
#
# Ann Arbor made dream terminals for hackers -- large screen sizes and huge
# numbers of function keys. At least some used monitors in portrait mode,
# allowing up to 76-character screen heights! They were reachable at:
#
# Ann Arbor Terminals
# 6175 Jackson Road
# Ann Arbor, MI 48103
# (313)-663-8000
#
# But in 1996 the phone number reaches some kitschy retail shop, and Ann Arbor
# can't be found on the Web; I fear they're long dead. R.I.P.
#
# Originally from Mike O'Brien@Rand and Howard Katseff at Bell Labs.
# Highly modified 6/22 by Mike O'Brien.
# split out into several for the various screen sizes by dave-yost@rand
# Modifications made 3/82 by Mark Horton
# Modified by Tom Quarles at UCB for greater efficiency and more diversity
# status line moved to top of screen, <flash> removed 5/82
# Some unknown person at SCO then hacked the init strings to make them more
# efficient.
#
# assumes the following setup:
# A menu: 0000 1010 0001 0000
# B menu: 9600 0100 1000 0000 0000 1000 0000 17 19
# C menu: 56 66 0 0 9600 0110 1100
# D menu: 0110 1001 1 0
#
# Briefly, the settings are for the following modes:
# (values are for bit set/clear with * indicating our preference
# and the value used to test these termcaps)
# Note that many of these settings are irrelevant to the terminfo
# and are just set to the default mode of the terminal as shipped
# by the factory.
#
# A menu: 0000 1010 0001 0000
# Block/underline cursor*
# blinking/nonblinking cursor*
# key click/no key click*
# bell/no bell at column 72*
#
# key pad is cursor control*/key pad is numeric
# return and line feed/return for <cr> key *
# repeat after .5 sec*/no repeat
# repeat at 25/15 chars per sec. *
#
# hold data until pause pressed/process data unless pause pressed*
# slow scroll/no slow scroll*
# Hold in area/don't hold in area*
# functions keys have default*/function keys disabled on powerup
#
# show/don't show position of cursor during page transmit*
# unused
# unused
# unused
#
# B menu: 9600 0100 1000 0000 0000 1000 0000 17 19
# Baud rate (9600*)
#
# 2 bits of parity - 00=odd,01=even*,10=space,11=mark
# 1 stop bit*/2 stop bits
# parity error detection off*/on
#
# keyboard local/on line*
# half/full duplex*
# disable/do not disable keyboard after data transmission*
#
# transmit entire page/stop transmission at cursor*
# transfer/do not transfer protected characters*
# transmit all characters/transmit only selected characters*
# transmit all selected areas/transmit only 1 selected area*
#
# transmit/do not transmit line separators to host*
# transmit/do not transmit page tab stops tabs to host*
# transmit/do not transmit column tab stop tabs to host*
# transmit/do not transmit graphics control (underline,inverse..)*
#
# enable*/disable auto XON/XOFF control
# require/do not require receipt of a DC1 from host after each LF*
# pause key acts as a meta key/pause key is pause*
# unused
#
# unused
# unused
# unused
# unused
#
# XON character (17*)
# XOFF character (19*)
#
# C menu: 56 66 0 0 9600 0110 1100
# number of lines to print data on (printer) (56*)
#
# number of lines on a sheet of paper (printer) (66*)
#
# left margin (printer) (0*)
#
# number of pad chars on new line to printer (0*)
#
# printer baud rate (9600*)
#
# printer parity: 00=odd,01=even*,10=space,11=mark
# printer stop bits: 2*/1
# print/do not print guarded areas*
#
# new line is: 01=LF,10=CR,11=CRLF*
# unused
# unused
#
# D menu: 0110 1001 1 0
# LF is newline/LF is down one line, same column*
# wrap to preceding line if move left from col 1*/don't wrap
# wrap to next line if move right from col 80*/don't wrap
# backspace is/is not destructive*
#
# display*/ignore DEL character
# display will not/will scroll*
# page/column tab stops*
# erase everything*/erase unprotected only
#
# editing extent: 0=display,1=line*,2=field,3=area
#
# unused
#
annarbor4080|aa4080|ann arbor 4080,
OTbs, am,
cols#80, lines#40,
bel=^G, clear=\014$<2>, cr=\r, cub1=^H, cud1=\n, cuf1=^_,
cup=\017%p2%{10}%/%{16}%*%p2%{10}%m%+%c%p1%?%p1%{19}%>%t
%{12}%+%;%{64}%+%c,
cuu1=^N, home=^K, ht=^I, hts=^]^P1, ind=\n, kbs=^^, kcub1=^H,
kcud1=\n, kcuf1=^_, kcuu1=^N, khome=^K, tbc=^\^P^P,
# Strange Ann Arbor terminal from BRL
aas1901|Ann Arbor K4080 w/S1901 mod,
am,
cols#80, lines#40,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=^_, cuu1=^N,
home=^K, ht=^I, ind=\n, kbs=^H, kcub1=^H, kcud1=\n, ll=^O\0c,
nel=\r\n,
# If you're using the GNU termcap library, add
# :cS=\E[%p1%d;%p2%d;%p3%d;%p4%dp:
# to these capabilities. This is the nonstandard GNU termcap scrolling
# capability, arguments are:
# 1. Total number of lines on the screen.
# 2. Number of lines above desired scroll region.
# 3. Number of lines below (outside of) desired scroll region.
# 4. Total number of lines on the screen, the same as the first parameter.
# The generic Ann Arbor entry is the only one that uses this.
aaa+unk|aaa-unk|ann arbor ambassador (internal - don't use this directly),
OTbs, am, km, mc5i, mir, xon,
cols#80, it#8,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
clear=\E[H\E[J$<156>, cr=\r, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=^K, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K$<5>, home=\E[H, hpa=\E[%p1%{1}%+%dG, ht=^I,
hts=\EH, ich=\E[%p1%d@$<4*>, ich1=\E[@$<4>, il=\E[%p1%dL,
il1=\E[L$<3>, ind=^K, invis=\E[8m, is1=\E[m\E7\E[H\E9\E8,
is3=\E[1Q\E[>20;30l\EP`+x~M\E\\, kbs=^H, kcbt=\E[Z,
kclr=\E[J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=\E[P, kdl1=\E[M, kf1=\EOA, kf10=\EOJ, kf11=\EOK,
kf12=\EOL, kf13=\EOM, kf14=\EON, kf15=\EOO, kf16=\EOP,
kf17=\EOQ, kf18=\EOR, kf19=\EOS, kf2=\EOB, kf20=\EOT,
kf21=\EOU, kf22=\EOV, kf23=\EOW, kf24=\EOX, kf3=\EOC,
kf4=\EOD, kf5=\EOE, kf6=\EOF, kf7=\EOG, kf8=\EOH, kf9=\EOI,
khome=\E[H, kich1=\E[@, kil1=\E[L, krmir=\E6, mc0=\E[0i,
mc4=^C, mc5=\E[v, mc5p=\E[%p1%dv, rc=\E8, rev=\E[7m,
rmkx=\EP`>y~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\E
\\,
rmm=\E[>52l, rmso=\E[m, rmul=\E[m, sc=\E7,
sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1;
%;%?%p7%t8;%;m,
sgr0=\E[m,
smkx=\EP`>z~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\E
\\,
smm=\E[>52h, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
vpa=\E[%p1%{1}%+%dd, use=ansi+rep,
aaa+rv|ann arbor ambassador in reverse video,
blink=\E[5;7m, bold=\E[1;7m, invis=\E[7;8m,
is1=\E[7m\E7\E[H\E9\E8, rev=\E[m, rmso=\E[7m, rmul=\E[7m,
rs1=\E[H\E[7m\E[J$<156>,
- sgr=\E[%?%p2%t4;%;%?%p4%t5;%;%?%p6%t1;%;%?%p1%p2%|%p3%!%t7;
- %;%?%p7%t8;%;m\016,
+ sgr=\E[%?%p2%t4;%;%?%p4%t5;%;%?%p6%t1;%;%?%p1%p2%|%p3%!%|%t7
+ ;%;%?%p7%t8;%;m\016,
sgr0=\E[7m\016, smso=\E[m, smul=\E[4;7m,
# Ambassador with the DEC option, for partial vt100 compatibility.
aaa+dec|ann arbor ambassador in dec vt100 mode,
acsc=aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}},
csr=\E[%i%p1%d;%p2%dr, enacs=\E(0, rmacs=^N,
sgr=\E[%?%p2%t4;%;%?%p4%t5;%;%?%p6%t1;%;%?%p1%p3%|%!%t7;%;%?
%p7%t8;%;m%?%p9%t\017%e\016%;,
smacs=^O,
aaa-18|ann arbor ambassador/18 lines,
lines#18,
is2=\E7\E[60;0;0;18p\E8,
rmcup=\E[60;0;0;18p\E[60;1H\E[K, smcup=\E[18;0;0;18p,
use=aaa+unk,
aaa-18-rv|ann arbor ambassador/18 lines+reverse video,
use=aaa+rv, use=aaa-18,
aaa-20|ann arbor ambassador/20 lines,
lines#20,
is2=\E7\E[60;0;0;20p\E8,
rmcup=\E[60;0;0;20p\E[60;1H\E[K, smcup=\E[20;0;0;20p,
use=aaa+unk,
aaa-22|ann arbor ambassador/22 lines,
lines#22,
is2=\E7\E[60;0;0;22p\E8,
rmcup=\E[60;0;0;22p\E[60;1H\E[K, smcup=\E[22;0;0;22p,
use=aaa+unk,
aaa-24|ann arbor ambassador/24 lines,
lines#24,
is2=\E7\E[60;0;0;24p\E8,
rmcup=\E[60;0;0;24p\E[60;1H\E[K, smcup=\E[24;0;0;24p,
use=aaa+unk,
aaa-24-rv|ann arbor ambassador/24 lines+reverse video,
use=aaa+rv, use=aaa-24,
aaa-26|ann arbor ambassador/26 lines,
lines#26,
is2=\E7\E[60;0;0;26p\E8,
rmcup=\E[60;0;0;26p\E[26;1H\E[K,
smcup=\E[H\E[J$<156>\E[26;0;0;26p, use=aaa+unk,
aaa-28|ann arbor ambassador/28 lines,
lines#28,
is2=\E7\E[60;0;0;28p\E8,
rmcup=\E[60;0;0;28p\E[28;1H\E[K,
smcup=\E[H\E[J$<156>\E[28;0;0;28p, use=aaa+unk,
aaa-30-s|aaa-s|ann arbor ambassador/30 lines w/status,
eslok, hs,
lines#29,
dsl=\E7\E[60;0;0;30p\E[1;1H\E[K\E[H\E8\r\n\E[K,
fsl=\E[>51l, is2=\r\n\E[A\E7\E[60;1;0;30p\E8,
rmcup=\E[60;1;0;30p\E[29;1H\E[K,
smcup=\E[H\E[J$<156>\E[30;1;0;30p\E[30;1H\E[K,
tsl=\E[>51h\E[1;%p1%dH\E[2K, use=aaa+unk,
aaa-30-s-rv|aaa-s-rv|ann arbor ambassador/30 lines+status+reverse video,
use=aaa+rv, use=aaa-30-s,
aaa-s-ctxt|aaa-30-s-ctxt|ann arbor ambassador/30 lines+status+save context,
rmcup=\E[60;1;0;30p\E[59;1H\E[K,
smcup=\E[30;1H\E[K\E[30;1;0;30p, use=aaa-30-s,
aaa-s-rv-ctxt|aaa-30-s-rv-ct|ann arbor ambassador/30 lines+status+save context+reverse video,
rmcup=\E[60;1;0;30p\E[59;1H\E[K,
smcup=\E[30;1H\E[K\E[30;1;0;30p, use=aaa-30-s-rv,
aaa|aaa-30|ambas|ambassador|ann arbor ambassador/30 lines,
lines#30,
is2=\E7\E[60;0;0;30p\E8,
rmcup=\E[60;0;0;30p\E[30;1H\E[K,
smcup=\E[H\E[J$<156>\E[30;0;0;30p, use=aaa+unk,
aaa-30-rv|aaa-rv|ann arbor ambassador/30 lines in reverse video,
use=aaa+rv, use=aaa-30,
aaa-30-ctxt|aaa-ctxt|ann arbor ambassador/30 lines; saving context,
rmcup=\E[60;0;0;30p\E[60;1H\E[K, smcup=\E[30;0;0;30p,
use=aaa-30,
aaa-30-rv-ctxt|aaa-rv-ctxt|ann arbor ambassador/30 lines reverse video; saving context,
rmcup=\E[60;0;0;30p\E[60;1H\E[K, smcup=\E[30;0;0;30p,
use=aaa+rv, use=aaa-30,
aaa-36|ann arbor ambassador/36 lines,
lines#36,
is2=\E7\E[60;0;0;36p\E8,
rmcup=\E[60;0;0;36p\E[36;1H\E[K,
smcup=\E[H\E[J$<156>\E[36;0;0;36p, use=aaa+unk,
aaa-36-rv|ann arbor ambassador/36 lines+reverse video,
use=aaa+rv, use=aaa-36,
aaa-40|ann arbor ambassador/40 lines,
lines#40,
is2=\E7\E[60;0;0;40p\E8,
rmcup=\E[60;0;0;40p\E[40;1H\E[K,
smcup=\E[H\E[J$<156>\E[40;0;0;40p, use=aaa+unk,
aaa-40-rv|ann arbor ambassador/40 lines+reverse video,
use=aaa+rv, use=aaa-40,
aaa-48|ann arbor ambassador/48 lines,
lines#48,
is2=\E7\E[60;0;0;48p\E8,
rmcup=\E[60;0;0;48p\E[48;1H\E[K,
smcup=\E[H\E[J$<156>\E[48;0;0;48p, use=aaa+unk,
aaa-48-rv|ann arbor ambassador/48 lines+reverse video,
use=aaa+rv, use=aaa-48,
aaa-60-s|ann arbor ambassador/59 lines+status,
eslok, hs,
lines#59,
dsl=\E7\E[60;0;0;60p\E[1;1H\E[K\E[H\E8\r\n\E[K,
fsl=\E[>51l, is2=\r\n\E[A\E7\E[60;1;0;60p\E8,
tsl=\E[>51h\E[1;%p1%dH\E[2K, use=aaa+unk,
aaa-60-s-rv|ann arbor ambassador/59 lines+status+reverse video,
use=aaa+rv, use=aaa-60-s,
aaa-60-dec-rv|ann arbor ambassador/dec mode+59 lines+status+rev video,
use=aaa+dec, use=aaa+rv, use=aaa-60-s,
aaa-60|ann arbor ambassador/60 lines,
lines#60,
is2=\E7\E[60;0;0;60p\E[1Q\E[m\E[>20;30l\E8,
use=aaa+unk,
aaa-60-rv|ann arbor ambassador/60 lines+reverse video,
use=aaa+rv, use=aaa-60,
aaa-db|ann arbor ambassador 30/destructive backspace,
OTbs@,
cub1=\E[D, is3=\E[1Q\E[m\E[>20l\E[>30h, use=aaa-30,
guru|guru-33|guru+unk|ann arbor guru/33 lines 80 cols,
lines#33,
flash=\E[>59h$<100>\E[>59l,
is2=\E7\E[255;0;0;33;80;80p\E8\E[J, is3=\E[>59l,
rmcup=\E[255p\E[255;1H\E[K, smcup=\E[33p, use=aaa+unk,
guru+rv|guru changes for reverse video,
flash=\E[>59l$<100>\E[>59h, is3=\E[>59h,
guru-rv|guru-33-rv|ann arbor guru/33 lines+reverse video,
use=guru+rv, use=guru-33,
guru+s|guru status line,
eslok, hs,
dsl=\E7\E[;0p\E[1;1H\E[K\E[H\E8\r\n\E[K, fsl=\E[>51l,
rmcup=\E[255;1p\E[255;1H\E[K, smcup=,
tsl=\E[>51h\E[1;%p1%dH\E[2K,
guru-nctxt|guru with no saved context,
smcup=\E[H\E[J$<156>\E[33p\E[255;1H\E[K, use=guru,
guru-s|guru-33-s|ann arbor guru/33 lines+status,
lines#32,
is2=\r\n\E[A\E7\E[255;1;0;33;80;80p\E8\E[J,
smcup=\E[33;1p\E[255;1H\E[K, use=guru+s, use=guru+unk,
guru-24|ann arbor guru 24 lines,
cols#80, lines#24,
is2=\E7\E[255;0;0;24;80;80p\E8\E[J, smcup=\E[24p,
use=guru+unk,
guru-44|ann arbor guru 44 lines,
cols#97, lines#44,
is2=\E7\E[255;0;0;44;97;100p\E8\E[J, smcup=\E[44p,
use=guru+unk,
guru-44-s|ann arbor guru/44 lines+status,
lines#43,
is2=\r\n\E[A\E7\E[255;1;0;44;80;80p\E8\E[J,
smcup=\E[44;1p\E[255;1H\E[K, use=guru+s, use=guru+unk,
guru-76|guru with 76 lines by 89 cols,
cols#89, lines#76,
is2=\E7\E[255;0;0;76;89;100p\E8\E[J, smcup=\E[76p,
use=guru+unk,
guru-76-s|ann arbor guru/76 lines+status,
cols#89, lines#75,
is2=\r\n\E[A\E7\E[255;1;0;76;89;100p\E8\E[J,
smcup=\E[76;1p\E[255;1H\E[K, use=guru+s, use=guru+unk,
guru-76-lp|guru-lp|guru with page bigger than line printer,
cols#134, lines#76,
is2=\E7\E[255;0;0;76;134;134p\E8\E[J, smcup=\E[76p,
use=guru+unk,
guru-76-w|guru 76 lines by 178 cols,
cols#178, lines#76,
is2=\E7\E[255;0;0;76;178;178p\E8\E[J, smcup=\E[76p,
use=guru+unk,
guru-76-w-s|ann arbor guru/76 lines+status+wide,
cols#178, lines#75,
is2=\r\n\E[A\E7\E[255;1;0;76;178;178p\E8\E[J,
smcup=\E[76;1p\E[255;1H\E[K, use=guru+s, use=guru+unk,
guru-76-wm|guru 76 lines by 178 cols with 255 cols memory,
cols#178, lines#76,
is2=\E7\E[255;0;0;76;178;255p\E8\E[J, smcup=\E[76p,
use=guru+unk,
aaa-rv-unk|ann arbor unknown type,
lh#0, lw#0, nlab#0,
blink=\E[5;7m, bold=\E[1;7m, home=\E[H, invis=\E[7;8m,
is1=\E[7m\E7\E[H\E9\E8, rev=\E[m, rmso=\E[7m, rmul=\E[7m,
rs1=\E[H\E[7m\E[J,
sgr=\E[%?%p6%t1;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p1%!%t
7;%;%?%p7%t8;%;m,
sgr0=\E[7m, smso=\E[m, smul=\E[4;7m,
#### Applied Digital Data Systems (adds)
#
# ADDS itself is long gone. ADDS was bought by NCR, and the same group made
# ADDS and NCR terminals. When AT&T and NCR merged, the engineering for
# terminals was merged again. Then AT&T sold the terminal business to
# SunRiver, which later changed its name to Boundless Technologies. The
# engineers from Teletype, AT&T terminals, ADDS, and NCR (who are still there
# as of early 1995) are at:
#
# Boundless Technologies
# 100 Marcus Boulevard
# Hauppauge, NY 11788-3762
# Vox: (800)-231-5445
# Fax: (516)-342-7378
# Web: http://boundless.com
#
# Their voice mail used to describe the place as "SunRiver (formerly ADDS)".
# In 1995 Boundless acquired DEC's terminals business.
#
# Regent: lowest common denominator, works on all regents.
# (regent: renamed ":bc:" to ":le:" -- esr)
regent|Adds Regent Series,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^U, cud1=\n, cuf1=^F, cuu1=^Z,
home=\EY\s\s, ind=\n, ll=^A,
# Regent 100 has a bug where if computer sends escape when user is holding
# down shift key it gets confused, so we avoid escape.
regent100|Adds Regent 100,
xmc#1,
bel=^G,
cup=\013%p1%'\s'%+%c\020%p2%{10}%/%{16}%*%p2%{10}%m%+%c,
kf0=^B1\r, kf1=^B2\r, kf2=^B3\r, kf3=^B4\r, kf4=^B5\r,
kf5=^B6\r, kf6=^B7\r, kf7=^B8\r, lf0=F1, lf1=F2, lf2=F3,
lf3=F4, lf4=F5, lf5=F6, lf6=F7, lf7=F8, rmso=\E0@, rmul=\E0@,
sgr0=\E0@, smso=\E0P, smul=\E0`, use=regent,
regent20|Adds Regent 20,
bel=^G, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, ed=\Ek, el=\EK,
use=regent,
regent25|Adds Regent 25,
bel=^G, kcub1=^U, kcud1=\n, kcuf1=^F, kcuu1=^Z, khome=^A,
use=regent20,
regent40|Adds Regent 40,
xmc#1,
bel=^G, dl1=\El$<2*>, il1=\EM$<2*>, kf1=^B1\r, kf2=^B2\r,
kf3=^B3\r, kf4=^B4\r, kf5=^B5\r, kf6=^B6\r, kf7=^B7\r,
kf8=^B8\r, lf0=F1, lf1=F2, lf2=F3, lf3=F4, lf4=F5, lf5=F6,
lf6=F7, lf7=F8, rmso=\E0@, rmul=\E0@, sgr0=\E0@, smso=\E0P,
smul=\E0`, use=regent25,
regent40+|Adds Regent 40+,
is2=\EB, use=regent40,
# It uses a different code for mapping acs vs dim/blink.
regent60|regent200|adds200|Adds Regent 60,
acsc=jLkDl@mHnhq`tXuTv\\wPxd, dch1=\EE, ed=\Ek,
is2=\EV\EB, kbs=^H, kcbt=\EO, kdch1=\EE, kich1=\EF,
krmir=\EF, rmacs=\E2, rmir=\EF, rmso=\ER\E0@\EV, smacs=\E1,
smir=\EF, smso=\ER\E0P\EV, kF1=^B!\r, kF2=^B"\r, kF3=^B#\r,
kF4=^B$\r, kF5=^B%\r, kF6=^B&\r, kF7=^B'\r, kF8=^B(\r,
use=regent40+,
# From: <edward@onyx.berkeley.edu> Thu Jul 9 09:27:33 1981
# (viewpoint: added <kcuf1>, function key, and <dl1> capabilities -- esr)
viewpoint|addsviewpoint|adds viewpoint,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=^L, cnorm=\017\E0`, cr=\r, cub1=^H, cud1=\n,
cuf1=^F, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z,
cvvis=\017\E0P, dl1=\El, ed=\Ek$<16.1*>, el=\EK$<16>,
ind=\n, is2=\017\E0`, kcub1=^U, kcud1=\n, kcuf1=^F, kcuu1=^Z,
kf0=^B1, kf2=^B2, kf3=^B!, kf4=^B", kf5=^B#, khome=^A, ll=^A,
rmso=^O, rmul=^O, sgr0=^O, smso=^N, smul=^N,
# Some viewpoints have bad ROMs that foo up on ^O
screwpoint|adds viewpoint with ^O bug,
cvvis@, rmso@, rmul@, smso@, smul@, use=viewpoint,
# From: Jay S. Rouman <jsr@dexter.mi.org> 5 Jul 92
# The <civis>/<cnorm>/<sgr>/<sgr0> strings were added by ESR from specs.
# Theory; the vp3a+ wants \E0%c to set highlights, where normal=01000000,
# underline=01100000, rev=01010000, blink=01000010,dim=01000001,
# invis=01000100 and %c is the logical or of desired attributes.
# There is also a `tag bit' enabling attributes, set by \E) and unset by \E(.
#
# Update by TD - 2004:
# Adapted from
# https://web.archive.org/web/19990922005103/http://www.cs.utk.edu/~shuford/terminal/adds_viewpoint_news.txt
#
# COMMANDS ASCII CODE
#
# Address, Absolute ESC,=,row,column
# Beep BEL
# Aux Port Enable ESC,@
# Aux Port Disable ESC,A
# Backspace BS
# Cursor back BS
# Cursor down LF
# Cursor forward FF
# Cursor home RS
# Cursor up VT
# Cursor suppress ETB
# Cursor enable CAN
# Erase to end of line ESC,T
# Erase to end of page ESC,Y
# Erase screen SUB
# Keyboard lock SI
# Keyboard unlock SO
# Read current cursor position ESC,?
# Set Attribute ESC,0,x (see below for values of x)
# Tag bit reset ESC,(
# Tag bit set ESC,)
# Transparent Print on ESC,3
# Transparent Print off ESC,4
#
#
# ATTRIBUTES
#
# Normal @ 0100
# Half Intensity A 0101
# Blinking B 0102
# Half Intensity Blinking C 0103
# Reverse Video P 0120
# Reverse Video Half Intensity Q 0121
# Reverse Video Blinking R 0122
# Reverse Video Half Intensity
# Blinking S 0123
# Underlined ` 0140
# Underlined Half Intensity a 0141
# Underlined Blinking b 0142
# Underlined Half Intensity
# Blinking c 0143
# Video suppress D 0104
vp3a+|viewpoint3a+|adds viewpoint 3a+,
am, bw,
cols#80, it#8, lines#24,
blink=\E0B\E), civis=^W, clear=\E*$<80>, cnorm=^X, cr=\r,
cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dim=\E0A\E),
ed=\EY$<80>, el=\ET, home=^^, ht=^I, ind=\n, invis=\E0D\E),
kbs=^H, kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, khome=^^,
nel=\r\n, rev=\E0P\E), rmso=\E(,
sgr=%?%p1%p2%|%p3%|%p4%|%p5%|%p7%|%t\E0%{64}%?%p1%t%{17}%|%;
%?%p2%t%{32}%|%;%?%p3%t%{16}%|%;%?%p4%t%{2}%|%;%?%p5%t
%{1}%|%;%c%?%p7%tD%;\E)%e\E(%;,
sgr0=\E(, smso=\E0Q\E), smul=\E0`\E),
vp60|viewpoint60|addsvp60|adds viewpoint60,
use=regent40,
#
# adds viewpoint 90 - from cornell
# Note: emacs sends ei occasionally to insure the terminal is out of
# insert mode. This unfortunately puts the viewpoint90 IN insert
# mode. A hack to get around this is <ich1=\EF\s\EF^U>. (Also,
# - :ei=:im=: must be present in the termcap translation.)
# - <xhp> indicates glitch that attributes stick to location
# - <msgr> means it's safe to move in standout mode
# - <clear=\EG\Ek>: clears screen and visual attributes without affecting
# the status line
# Function key and label capabilities merged in from SCO.
vp90|viewpoint90|adds viewpoint 90,
OTbs, bw, msgr, xhp,
cols#80, lines#24,
clear=\EG\Ek, cub1=^H, cud1=\n, cuf1=^F,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z, dch1=\EE,
dl1=\El, ed=\Ek, el=\EK, home=\EY\s\s, ht=^I,
ich1=\EF \EF\025, ind=\n, kbs=^H, kcub1=^U, kcud1=\n,
kcuf1=^F, kcuu1=^Z, kf0=^B1\r, kf1=^B2\r, kf10=^B;\r,
kf2=^B3\r, kf3=^B4\r, kf4=^B5\r, kf5=^B6\r, kf6=^B7\r,
kf7=^B8\r, kf8=^B9\r, kf9=\002\:\r, khome=^A, lf0=F1, lf1=F2,
lf10=F11, lf2=F3, lf3=F4, lf4=F5, lf5=F6, lf6=F7, lf7=F8, lf8=F9,
lf9=F10, ll=^A, rmso=\ER\E0@\EV, rmul=\ER\E0@\EV,
sgr0=\ER\E0@\EV, smso=\ER\E0Q\EV, smul=\ER\E0`\EV,
# Note: if return acts weird on a980, check internal switch #2
# on the top chip on the CONTROL pc board.
adds980|a980|adds consul 980,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=\014$<1>\013@, cr=\r, cub1=^H, cud1=\n,
cuf1=\E^E01, cup=\013%p1%{64}%+%c\E\005%p2%2d,
dl1=\E\017$<13>, il1=\E\016$<13>, ind=\n, kf0=\E0, kf1=\E1,
kf2=\E2, kf3=\E3, kf4=\E4, kf5=\E5, kf6=\E6, kf7=\E7, kf8=\E8,
kf9=\E9, rmso=^O, sgr0=^O, smso=^Y^^^N,
#### C. Itoh Electronics
#
# As of 1995 these people no longer make terminals (they're still in the
# printer business). Their terminals were all clones of the DEC VT series.
# They're located in Orange County, CA.
#
# CIT 80 - vt-52 emulator, the termcap has been modified to remove
# the delay times and do an auto tab set rather than the indirect
# file used in vt100.
cit80|cit-80|citoh 80,
OTbs, am,
cols#80, lines#24,
clear=\E[H\EJ, cr=\r, cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[A, ed=\EJ, el=\EK, ff=^L,
ind=\n, is2=\E>, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,
kcuu1=\EOA, rmkx=\E[?1l\E>, smkx=\E[?1h\E=,
# From: Tim Wood <mtxinu!sybase!tim> Fri Sep 27 09:39:12 PDT 1985
# (cit101: added <rmam>/<smam> based on init string, merged this with c101 -- esr)
cit101|citc|C.itoh fast vt100,
OTbs, am, xenl,
cols#80, lines#24,
bel=^G, clear=\E[H\E[2J, cnorm=\E[V\E8, cub1=^H, cud1=\E[B,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
cvvis=\E7\E[U, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K,
flash=\E[?5h$<200/>\E[?5l, ich1=\E[@, il1=\E[L,
is2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[3g\E[>5g,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
sgr0=\E[m, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m,
smul=\E[4m,
# CIE Terminals CIT-101e from Geoff Kuenning <callan!geoff> via BRL
# The following termcap entry was created from the Callan cd100 entry. The
# last two lines (with the capabilities in caps) are used by RM-cobol to allow
# full selection of combinations of reverse video, underline, and blink.
# (cit101e: removed unknown :f0=\EOp:f1=\EOq:f2=\EOr:f3=\EOs:f4=\EOt:f5=\EOu:\
# f6=\EOv:f7=\EOw:f8=\EOx:f9=\EOy:AB=\E[0;5m:AL=\E[m:AR=\E[0;7m:AS=\E[0;5;7m:\
# :NB=\E[0;1;5m:NM=\E[0;1m:NR=\E[0;1;7m:NS=\E[0;1;5;7m: -- esr)
cit101e|C. Itoh CIT-101e,
OTbs, OTpt, am, mir, msgr,
cols#80, it#8, lines#24,
acsc=, clear=\E[H\E[J, cnorm=, csr=\E[%i%p1%2d;%p2%2dr,
cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%2d;%p2%2dH,
cuu1=\E[A, cvvis=\E[?1l\E[?4l\E[?7h, dch1=\E[P, dl1=\E[M,
ed=\E[J, el=\E[K, if=/usr/share/tabset/vt100, il1=\E[L,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\EOT,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOm, kf6=\EOl,
kf7=\EOM, kf8=\EOn, rc=\E8, ri=\EM, rmacs=^O, rmir=\E[4l,
rmkx=\E>, rmso=\E[m, rmul=\E[m, sc=\E7, smacs=^N, smir=\E[4h,
smkx=\E=, smso=\E[7m, smul=\E[4m,
# From: David S. Lawyer, June 1997:
# The CIT 101-e was made in Japan in 1983-4 and imported by CIE
# Terminals in Irvine, CA. It was part of CITOH Electronics. In the
# late 1980's CIT Terminals went out of business.
# There is no need to use the initialization string is=... (by invoking
# tset or setterm etc.) provided that the terminal has been manually set
# up (and the setup saved with ^S) to be compatible with this termcap. To be
# compatible it should be in ANSI mode (not VT52). A set-up that
# works is to set all the manually settable stuff to factory defaults
# by pressing ^D in set-up mode. Then increase the brightness with the
# up-arrow key since the factory default will likely be dim on an old
# terminal. Then change any options you want (provided that they are
# compatible with the termcap). For my terminal I set: Screen
# Background: light; Keyclicks: silent; Auto wraparound: on; CRT saver:
# on. I also set up mine for parity (but you may not need it). Then
# save the setup with ^S.
# (cit101e-rv: added empty <rmcup> to suppress a tic warning. --esr)
cit101e-rv|Citoh CIT-101e (sets reverse video),
am, eo, mir, msgr, xenl, xon,
cols#80, it#8, lines#24,
OTnl=\EM, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
civis=\E[1v, clear=\E[H\E[J, cnorm=\E[0;3;4v, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[3;5v, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ed=\E[J, el=\E[K, flash=\E[?5l$<200/>\E[?5h,
home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n,
is2=\E<\E>\E[?1l\E[?3l\E[?4l\E[?5h\E[?7h\E[?8h\E[3g\E[>5g\E(
B\E[m\E[20l\E[1;24r\E[24;1H,
kbs=^?, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, nel=\EE, rc=\E8,
rev=\E[7m, ri=\EM, rmcup=, rmir=\E[4l, rmso=\E[m, rmul=\E[m,
rs1=\Ec\E[?7h\E[>5g, sc=\E7, sgr0=\E[m,
smcup=\E[>5g\E[?7h\E[?5h, smir=\E[4h, smso=\E[7m,
smul=\E[4m, tbc=\E[3g, u6=\E[%i%p1%d;%p2%dR, u7=\E[6n,
u8=\E[?6c, u9=\E[c, use=ecma+index,
cit101e-n|CIT-101e w/o am,
am@,
cvvis=\E[?1l\E[?4l\E[?7l, kbs=^H, kcub1=^H, kcud1=\n,
use=cit101e,
cit101e-132|CIT-101e with 132 cols,
cols#132,
kbs=^H, kcub1=^H, kcud1=\n, use=cit101e,
cit101e-n132|CIT-101e with 132 cols w/o am,
am@,
cols#132,
cvvis=\E[?1l\E[?4l\E[?7l, kbs=^H, kcub1=^H, kcud1=\n,
use=cit101e,
# CIE Terminals CIT-500 from BRL
# The following SET-UP modes are assumed for normal operation:
# GENERATE_XON/XOFF:YES DUPLEX:FULL NEWLINE:OFF
# AUTOWRAP:ON MODE:ANSI SCREEN_LENGTH:64_LINES
# DSPLY_CNTRL_CODES?NO PAGE_WIDTH:80 EDIT_MODE:OFF
# Other SET-UP modes may be set for operator convenience or communication
# requirements.
# Hardware tabs are assumed to be set every 8 columns; they can be set up
# by the "reset", "tset", or "tabs" utilities. No delays are specified; use
# "stty ixon -ixany" to enable DC3/DC1 flow control!
# (cit500: I added <rmam>/<smam> based on the init string -- esr)
cit500|CIE Terminals CIT-500,
OTbs, OTpt, mir, msgr, xon,
OTkn#10, cols#80, it#8, lines#64, vt#3,
acsc=, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
clear=\E[H\E[J, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\EM, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
ed=\EJ, el=\EK, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL,
il1=\E[L, ind=\n, is2=\E<\E)0, kbs=^H, kcbt=\E[Z, kcub1=\EOD,
kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[P, kdl1=\E[M,
ked=\EJ, kel=\EK, kf0=\EOP, kf1=\EOQ, kf2=\EOR, kf3=\EOS,
kf4=\EOU, kf5=\EOV, kf6=\EOW, kf7=\EOX, kf8=\EOY, kf9=\EOZ,
khome=\E[H, kich1=\E[4h, kil1=\E[L, krmir=\E[4l, lf0=PF1,
lf1=PF2, lf2=PF3, lf3=PF4, lf4=F15, lf5=F16, lf6=F17, lf7=F18,
lf8=F19, lf9=F20, ll=\E[64H, nel=\EE, rc=\E8, rev=\E[7m,
ri=\EM, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>,
rmso=\E[m, rmul=\E[m,
rs1=\E<\E2\E[20l\E[?6l\E[r\E[m\E[q\E(B\017\E)0\E>,
sc=\E7, sgr0=\E[m, smacs=^N, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
# C. Itoh printers begin here
citoh|ci8510|8510|c.itoh 8510a,
cols#80, it#8,
bold=\E!, cub1@,
is2=\E(009\,017\,025\,033\,041\,049\,057\,065\,073.,
rep=\ER%p2%03d%p1%c, ri=\Er, rmul=\EY, sgr0=\E"\EY,
smul=\EX, use=lpr,
citoh-pica|citoh in pica,
is1=\EN, use=citoh,
citoh-elite|citoh in elite,
cols#96,
is1=\EE,
is2=\E(009\,017\,025\,033\,041\,049\,057\,065\,073\,081\,089
.,
use=citoh,
citoh-comp|citoh in compressed,
cols#136,
is1=\EQ,
is2=\E(009\,017\,025\,033\,041\,049\,057\,065\,073\,081\,089
\,097\,105\,113\,121\,129.,
use=citoh,
# citoh has infinite cols because we don't want lp ever inserting \n\t**.
citoh-prop|citoh-ps|ips|citoh in proportional spacing mode,
cols#0x7fff,
is1=\EP, use=citoh,
citoh-6lpi|citoh in 6 lines per inch mode,
is3=\EA, use=citoh,
citoh-8lpi|citoh in 8 lines per inch mode,
lines#88,
is3=\EB, use=citoh,
#### Control Data (cdc)
#
cdc456|cdc 456 terminal,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=^Y^X, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E1%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z, dl1=\EJ, ed=^X,
el=^V, home=^Y, il1=\EL, ind=\n,
# Assorted CDC terminals from BRL (improvements by DAG & Ferd Brundick)
cdc721|CDC Viking,
OTbs, am,
cols#80, lines#24,
clear=^L, cuf1=^X, cup=\002%p2%{32}%+%c%p1%{32}%+%c,
cuu1=^W, el=^K, home=^Y, kcub1=^H, kcud1=\n, kcuf1=^I,
kcuu1=^W, khome=^Y,
cdc721ll|CDC Viking with long lines,
OTbs, am,
cols#132, lines#24,
clear=^L, cuf1=^X, cup=\002%p2%{32}%+%c%p1%{32}%+%c,
cuu1=^W, el=^K, home=^Y, kcub1=^H, kcud1=\n, kcuf1=^I,
kcuu1=^W, khome=^Y,
# (cdc752: the BRL entry had :ll=\E1 ^Z: commented out
cdc752|CDC 752,
OTbs, am, bw, xhp,
cols#80, lines#24,
bel=^G, clear=\030\E1\s\s, cr=\r, cub1=^H, cud1=\n, cuf1=^U,
cup=\E1%p2%{32}%+%c%p1%{32}%+%c, cuu1=^Z, el=^V,
home=\E1\s\s, ind=\n, ll=^Y, rs1=\E1 \030\002\003\017,
# CDC 756
# The following switch/key settings are assumed for normal operation:
# 96 chars SCROLL FULL duplex not BLOCK
# Other switches may be set according to communication requirements.
# Insert/delete-character cannot be used, as the whole display is affected.
# "so" & "se" are commented out until jove handles "sg" correctly.
cdc756|CDC 756,
OTbs, am, bw,
OTkn#10, cols#80, lines#24,
bel=^G, clear=^Y^X, cr=\r, cub1=^H, cud1=\n, cuf1=^U,
cup=\E1%p2%{32}%+%c%p1%{32}%+%c, cuu1=^Z,
dl1=\EJ$<6*/>, ed=^X, el=^V, home=^Y, il1=\EL$<6*/>, ind=\n,
kbs=^H, kcub1=^H, kcud1=\n, kcuf1=^U, kcuu1=^Z, kdch1=\EI,
kdl1=\EL, ked=^X, kel=^V, kf0=\EA, kf1=\EB, kf2=\EC, kf3=\ED,
kf4=\EE, kf5=\EF, kf6=\EG, kf7=\EH, kf8=\Ea, kf9=\Eb, khome=^Y,
khts=^O, kich1=\EK, kil1=\EL, lf0=F1, lf1=F2, lf2=F3, lf3=F4,
lf4=F5, lf5=F6, lf6=F7, lf7=F8, lf8=F9, lf9=F10, ll=^Y^Z,
rs1=^Y^X^B^C^O,
#
# CDC 721 from Robert Viduya, Ga. Tech. <ihnp4!gatech!gitpyr!robert> via BRL.
#
# Part of the long initialization string defines the "DOWN" key to the left
# of the tab key to send an ESC. The real ESC key is positioned way out
# in right field.
#
# The termcap won't work in 132 column mode due to the way it it moves the
# cursor. Termcap doesn't have the capability (as far as I could tell) to
# handle the 721 in 132 column mode.
#
# (cdc721: changed :ri: to :sr: -- esr)
cdc721-esc|Control Data 721,
OTbs, OTpt, am, bw, msgr, xon,
OTkn#10, cols#80, it#8, lines#30,
bel=^G, blink=^N, cbt=^^^K, clear=^L, cub1=^H, cud1=^Z,
cuf1=^X, cup=\002%p2%{32}%+%c%p1%{32}%+%c, cuu1=^W,
dch1=^^N, dim=^\, dl1=^^Q, ed=^^P, el=^K, home=^Y, hts=^^^RW,
ich1=^^O, il1=^^R, ind=\036W =\036U, invis=^^^R[,
is2=\036\022B\003\036\035\017\022\025\035\036E\036\022H\036
\022J\036\022L\036\022N\036\022P\036\022Q\036\022\036
\022\^\036\022b\036\022i\036W\s=\036\022Z\036\011C1-`\s`
!k/o,
kbs=^H, kcub1=^H, kcud1=^Z, kcuf1=^X, kcuu1=^W, kf0=^^q,
kf1=^^r, kf2=^^s, kf3=^^t, kf4=^^u, kf5=^^v, kf6=^^w, kf7=^^x,
kf8=^^y, kf9=^^z, khome=^Y, ll=^B =, rev=^^D,
ri=\036W =\036V, rmir=, rmkx=^^^Rl, rmso=^^E, rmul=^],
sgr0=^O^U^]^^E^^^R\\, smir=, smkx=^^^Rk, smso=^^D, smul=^\,
tbc=^^^RY,
#### Getronics
#
# Getronics is a Dutch electronics company that at one time was called
# `Geveke' and made async terminals; but (according to the company itself!)
# they've lost all their documentation on the command set. The hardware
# documentation suggests the terminals were actually manufactured by a
# Taiwanese electronics company named Cal-Comp. There are known
# to have been at least two models, the 33 and the 50.
#
# The 50 seems to be a top end vt220 clone, with the addition of a higher
# screen resolution, a larger screen, at least 1 page of memory above and
# below the screen, apparently pages of memory right and left of the screen
# which can be panned, and about 75 function keys (15 function keys x normal,
# shift, control, func A, func B). It also has more setup possibilities than
# the vt220. The monitor case is dated November 1978 and the keyboard case is
# May 1982.
#
# The vt100 emulation works as is. The entry below describes the rather
# non-conformant (but more featureful) ANSI mode.
#
# From: Stephen Peterson <stv@utrecht.ow.nl>, 27 May 1995
visa50|geveke visa 50 terminal in ansi 80 character mode,
bw, mir, msgr,
cols#80, lines#25,
acsc=0_aaffggh jjkkllmmnnooqqssttuuvvwwxx, bel=^G,
blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dX, dch1=\E[X, dim=\E[2m, dl=\E[%p1%dM,
dl1=\E[M, ed=\E[J, el=\E[K, flash=\E[?5h$<100/>\E[?5l,
home=\E[H, hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@,
ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n, invis=\E[8m,
is2=\E0;2m\E[1;25r\E[25;1H\E[?3l\E[?7h\E[?8h,
ka1=\E[f, ka3=\EOQ, kb2=\EOP, kbs=^H, kc1=\EOR, kc3=\EOS,
kcub1=\E[D, kcud1=\E[A, kcuf1=\E[C, kcuu1=\E[A, kdch1=^?,
kdl1=\EOS, kf0=\E010, kf1=\E001, kf10=\E011, kf2=\E002,
kf3=\E003, kf4=\E004, kf5=\E005, kf6=\E006, kf7=\E007,
kf8=\E008, kf9=\E009, khome=\E[f, lf2=A delete char,
lf3=A insert line, lf4=A delete line, lf5=A clear,
lf6=A ce of/cf gn, lf7=A print, lf8=A on-line,
lf9=A funcl0=A send, nel=\r\n, rev=\E[7m, rmacs=\E[3l,
rmam=\E[?7l, rmir=\E[4l, rmkx=\E>, rmso=\E[0;2m,
rmul=\E[0m, sgr0=\E[0;2m, smacs=\E3h, smam=\E?7h,
smir=\E[4h, smkx=\E=, smso=\E[2;7m, smul=\E[4m, tbc=\E[3g,
vpa=\E[%i%p1%dd,
#### Human Designed Systems (Concept)
#
# Human Designed Systems
# 400 Fehley Drive
# King of Prussia, PA 19406
# Vox: (610)-277-8300
# Fax: (610)-275-5739
# Net: support@hds.com
#
# John Martin <john@hds.com> is their termcap expert. They're mostly out of
# the character-terminal business now (1995) and making X terminals. In
# particular, the whole `Concept' line described here was discontinued long
# ago.
#
# From: <vax135!hpk> Sat Jun 27 07:41:20 1981
# Extensive changes to c108 by arpavax:eric Feb 1982
# Some unknown person at SCO then translated it to terminfo.
#
# There seem to be a number of different versions of the C108 PROMS
# (with bug fixes in its Z-80 program).
#
# The first one that we had would lock out the keyboard of you
# sent lots of short lines (like /usr/dict/words) at 9600 baud.
# Try that on your C108 and see if it sends a ^S when you type it.
# If so, you have an old version of the PROMs.
#
# You should configure the C108 to send ^S/^Q before running this.
# It is much faster (at 9600 baud) than the c100 because the delays
# are not fixed.
# new status line display entries for c108-8p:
# <is3> - init str #3 - setup term for status display -
# set programmer mode, select window 2, define window at last
# line of memory, set bkgnd stat mesg there, select window 0.
#
# <tsl> - to status line - select window 2, home cursor, erase to
# end-of-window, 1/2 bright on, goto(line#0, col#?)
#
# <fsl> - from status line - 1/2 bright off, select window 0
#
# <dsl> - disable status display - set bkgnd status mesg with
# illegal window #
#
# There are probably more function keys that should be added but
# I don't know what they are.
#
# No delays needed on c108 because of ^S/^Q handshaking
#
c108|concept108|c108-8p|concept108-8p|concept 108 w/8 pages,
is3=\EU\E\sz"\Ev\001\177\s!p\E\s;"\E\sz\s\Ev\s\s\001\177p
\Ep\n,
rmcup=\Ev \001\177p\Ep\r\n, use=c108-4p,
c108-4p|concept108-4p|concept 108 w/4 pages,
OTbs, eslok, hs, xon,
pb@,
acsc=jEkTl\\mMqLxU, cnorm=\Ew, cr=\r,
cup=\Ea%p1%?%p1%{95}%>%t\001%{96}%-%;%{32}%+%c%p2%?%p2%{95}
%>%t\001%{96}%-%;%{32}%+%c,
cvvis=\EW, dch1=\E 1$<16*>, dsl=\E ;\177, fsl=\Ee\E z\s,
ind=\n, is1=\EK\E!\E F,
is3=\EU\E z"\Ev\177 !p\E ;"\E z \Ev \001 p\Ep\n,
rmacs=\Ej\s, rmcup=\Ev \001 p\Ep\r\n, smacs=\Ej!,
smcup=\EU\Ev 8p\Ep\r\E\025,
tsl=\E z"\E?\E\005\EE\Ea %+\s, use=c100,
c108-rv|c108-rv-8p|concept 108 w/8 pages in reverse video,
rmcup=\Ev \002 p\Ep\r\n, smcup=\EU\Ev 8p\Ep\r,
use=c108-rv-4p,
c108-rv-4p|concept108rv4p|concept 108 w/4 pages in reverse video,
flash=\EK$<200>\Ek, is1=\Ek, rmso=\Ee, smso=\EE,
use=c108-4p,
c108-w|c108-w-8p|concept108-w-8|concept108-w8p|concept 108 w/8 pages in wide mode,
cols#132,
is1=\E F\E", rmcup=\Ev ^A0\001D\Ep\r\n,
smcup=\EU\Ev 8\001D\Ep\r, use=c108-8p,
# Concept 100:
# These have only window relative cursor addressing, not screen
# relative. To get it to work right here, smcup/rmcup (which
# were invented for the concept) lock you into a one page
# window for screen style programs.
#
# To get out of the one page window, we use a clever trick:
# we set the window size to zero ("\Ev " in rmcup) which the
# terminal recognizes as an error and resets the window to all
# of memory.
#
# This trick works on c100 but does not on c108, sigh.
#
# Some tty drivers use cr3 for concept, others use nl3, hence
# the delays on cr and ind below. This padding is only needed at
# 9600 baud and up. One or the other is commented out depending on
# local conventions.
#
# 2 ms padding on <rmcup> isn't always enough. 6 works fine. Maybe
# less than 6 but more than 2 will work.
#
# Note: can't use function keys f7-f10 because they are
# indistinguishable from arrow keys (!), also, del char and
# clear eol use xon/xoff so they probably won't work very well.
#
# Also note that we don't define insrt/del char/delline/eop/send
# because they don't transmit unless we reset them - I figured
# it was a bad idea to clobber their definitions.
#
# The <mc5> sequence changes the escape character to ^^ so that
# escapes will be passed through to the printer. Only trouble
# is that ^^ won't be - ^^ was chosen to be unlikely.
# Unfortunately, if you're sending raster bits through to be
# plotted, any character you choose will be likely, so we lose.
#
# \EQ"\EY(^W (send anything from printer to host, for xon/xoff)
# cannot be # in is2 because it will hang a c100 with no printer
# if sent twice.
c100|concept100|concept|c104|c100-4p|hds concept 100,
OTbs, am, eo, mir, ul, xenl,
cols#80, lines#24, pb#9600, vt#8,
bel=^G, blink=\EC, clear=\E?\E\005$<2*>, cr=$<9>\r,
cub1=^H, cud1=\n, cuf1=\E=,
cup=\Ea%p1%{32}%+%c%p2%{32}%+%c, cuu1=\E;,
dch1=\E\021$<16*>, dim=\EE, dl1=\E\002$<3*>,
ed=\E\005$<16*>, el=\E\025$<16>, flash=\Ek$<200>\EK,
ht=\011$<8>, il1=\E\022$<3*>, ind=\n, invis=\EH, ip=$<16*>,
is1=\EK,
is2=\EU\Ef\E7\E5\E8\El\ENH\E\0\Eo&\0\Eo'\E\Eo!\0\E\007!\E
\010A@\s\E4#\:"\E\:a\E4#;"\E\:b\E4#<"\E\:c,
is3=\Ev $<6>\Ep\n, kbs=^H, kcbt=\E', kctab=\E_,
kcub1=\E>, kcud1=\E<, kcuf1=\E=, kcuu1=\E;, kdch1=\E^Q,
kdl1=\E^B, ked=\E^C, kel=\E^S, kf1=\E5, kf2=\E6, kf3=\E7,
kf4=\E8, kf5=\E9, kf6=\E\:a, kf7=\E\:b, kf8=\E\:c, khome=\E?,
khts=\E], kich1=\E^P, kil1=\E^R, kind=\E[, knp=\E-, kpp=\E.,
kri=\E\\, krmir=\E\0, mc4=\036o \E\EQ!\EYP\027,
mc5=\EQ"\EY(\027\EYD\Eo \036, prot=\EI,
rep=\Er%p1%c%p2%{32}%+%c$<.2*>, rev=\ED,
rmcup=\Ev $<6>\Ep\r\n, rmir=\E\s\s, rmkx=\Ex,
rmso=\Ed, rmul=\Eg, sgr0=\EN@,
smcup=\EU\Ev 8p\Ep\r\E\025$<16>, smir=\E^P, smkx=\EX,
smso=\ED, smul=\EG,
c100-rv|c100-rv-4p|concept100-rv|c100 rev video,
cnorm@, cvvis@, flash=\EK$<200>\Ek, is1=\Ek, rmso=\Ee,
smso=\EE, use=c100,
oc100|oconcept|c100-1p|old 1 page concept 100,
in,
is3@, use=c100,
# From: Walter Skorski <walt@genetics1.JMP.TJU.EDU>, 16-oct-1996.
# Lots of notes, originally inline, but ncurses doesn't grok that.
#
# am: not available in power on mode, but turned on with \E[=107;207h in
# is2=. Also, \E=124l in is2= could have been used to prevent needing
# to specify xenl:, but that would have rendered the last space on the
# last line useless.
# bw: Not available in power on mode, but turned on with \E[=107;207h in
# is2=.
# clear: Could be done with \E[2J alone, except that vi (and probably most
# other programs) assume that this also homes the cursor.
# dsl: Go to window 2, go to the beginning of the line, use a line feed to
# scroll the window, and go back to window 1.
# is2: the string may cause a warning to be issued by tic that it
# found a very long line and that it suspects that a comma is missing
# somewhere. This warning can be ignored (unless it comes up more than
# once). The initialization string contains the following commands:
#
# [Setup mode items changed from factory defaults:]
# \E)0 set alternate character set to
# graphics
# ^O set character set to default
# [In case it wasn't]
# \E[m turn off all attributes
# [In case they weren't off]
# \E[=107; cursor wrap and
# 207h character wrap on
# \E[90;3u set Fkey definitions to "transmit"
# defaults
# \E[92;3u set cursor key definitions to
# "transmit" defaults
# \E[43;1u set shift F13 to transmit...
# \177\E$P\177
# \E[44;1u set shift F14 to transmit...
# \177\E$Q\177
# \E[45;1u set shift F15 to transmit...
# \177\E$R\177
# \E[46;1u set shift F16 to transmit...
# \177\E$S\177
# \E[200;1u set shift up to transmit...
# \177\E$A\177
# \E[201;1u set shift down to transmit...
# \177\E$B\177
# \E[202;1u set shift right to transmit...
# \177\E$C\177
# \E[203;1u set shift left to transmit...
# \177\E$D\177
# \E[204;1u set shift home to transmit...
# \177\E$H\177
# \E[212;1u set backtab to transmit...
# \177\E$I\177
# \E[213;1u set shift backspace to transmit...
# \177\E$^H\177
# \E[214;1u set shift del to transmit...
# "\E$\177"
# [Necessary items not mentioned in setup mode:]
# \E[2!w move to window 2
# \E[25;25w define window as line 25 of memory
# \E[!w move to window 1
# \E[2*w show current line of window 2 as
# status line
# \E[2+x set meta key to use high bit
# \E[;3+} move underline to bottom of character
#
# All Fkeys are set to their default transmit definitions with \E[90;3u
# in is2=. IMPORTANT: to use this terminal definition, the "quit" stty
# setting MUST be redefined or deactivated, because the default is
# contained in almost all of this terminal's Fkey strings! If for some
# reason "quit" cannot be altered, the Fkeys can, but it would be
# necessary to change ^| to ^] in all of these definitions, and add
# \E[2;029!t to is2.
# lines: is set to 24 because this terminal refuses to treat the 25th
# line normally.
# ll: Not available in power on mode, but turned on with \E[=107;207h in
# is2=.
# lm: Pointless, given that this definition locks a single screen of
# memory into view, but what the hey...
# rmso: Could use \E[1;7!{ to turn off only bold and reverse (leaving any
# other attributes alone), but some programs expect this to turn off
# everything.
# rmul: Could use \E[4!{ to turn off only underline (leaving any other
# attributes alone), but some programs expect this to turn off
# everything.
# sgr: Attributes are set on this terminal with the string \E[ followed by
# a list of attribute code numbers (in decimal, separated by
# semicolons), followed by the character m. The attribute code
# numbers are:
# 1 for bold;
# 2 for dim (which is ignored in power on mode);
# 4 for underline;
# 5 for blinking;
# 7 for inverse;
# 8 for not displayable; and
# =99 for protected (except that there are strange side
# effects to protected characters which make them inadvisable).
# The mapping of terminfo parameters to attributes is as follows:
# %p1 (standout) = bold and inverse together;
# %p2 (underline) = underline;
# %p3 (reverse) = inverse;
# %p4 (blink) = blinking;
# %p5 (dim) is ignored;
# %p6 (bold) = bold;
# %p7 (invisible) = not displayable;
# %p8 (protected) is ignored; and
# %p9 (alt char set) = alt char set.
# The code to do this is:
# \E[0 OUTPUT \E[0
# %?%p1%p6%O IF (standout; bold) OR
# %t;1 THEN OUTPUT ;1
# %; ENDIF
# %?%p2 IF underline
# %t;4 THEN OUTPUT ;4
# %; ENDIF
# %?%p4 IF blink
# %t;5 THEN OUTPUT ;5
# %; ENDIF
# %?%p1%p3%O IF (standout; reverse) OR
# %t;7 THEN OUTPUT ;7
# %; ENDIF
# %?%p7 IF invisible
# %t;8 THEN OUTPUT ;8
# %; ENDIF
# m OUTPUT m
# %?%p9 IF altcharset
# %t^N THEN OUTPUT ^N
# %e^O ELSE OUTPUT ^O
# %; ENDIF
# sgr0: Everything is turned off (including alternate character set), since
# there is no way of knowing what it is that the program wants turned
# off.
# smul: The "underline" attribute is reconfigurable to an overline or
# strike-through, or (as done with \E[;3+} in is2=), to a line at the true
# bottom of the character cell. This was done to allow for more readable
# underlined characters, and to be able to distinguish between an
# underlined space, an underscore, and an underlined underscore.
# xenl: Terminal can be configured to not need this, but this "glitch"
# behavior is actually preferable with autowrap terminals.
#
# Parameters kf31= thru kf53= actually contain the strings sent by the shifted
# Fkeys. There are no parameters for shifted Fkeys in terminfo. The is2
# string modifies the 'O' in kf43 to kf46 to a '$'.
#
# kcbt was originally ^I but redefined in is2=.
# kHOM was \E[H originally but redefined in is2=, as were a number of
# other keys.
# kDC was originally \177 but redefined in is2=.
#
# kbs: Shift was also ^H originally but redefined as \E$^H in is2=.
# tsl: Go to window 2, then do an hpa=.
#
#------- flash=\E[8;3!}^G\E[3;3!}
#------- flash=\E[?5h$<100>\E[?5l
# There are two ways to flash the screen, both of which have their drawbacks.
# The first is to set the bell mode to video, transmit a bell character, and
# set the bell mode back - but to what? There is no way of knowing what the
# user's old bell setting was before we messed with it. Worse, the command to
# set the bell mode also sets the key click volume, and there is no way to say
# "leave that alone", or to know what it's set to, either.
# The second way to do a flash is to set the screen to inverse video, pad for a
# tenth of a second, and set it back - but like before, there's no way to know
# that the screen wasn't ALREADY in inverse video, or that the user may prefer
# it that way. The point is moot anyway, since vi (and probably other
# programs) assume that by defining flash=, you want the computer to use it
# INSTEAD of bel=, rather than as a secondary type of signal.
#
#------- cvvis=\E[+{
# The is the power on setting, which is also as visible as the cursor
# gets.
#------- wind=\E[%i%p1%d;%p2%d;%p3%{1}%+%d;%p4%{1}%+%dw
# Windowing is possible, but not defined here because it is also used to
# emulate status line functions. Allowing a program to set a window could
# clobber the status line or render it unusable. There is additional memory,
# but screen scroll functions are destructive and do not make use of it.
#
#------- dim= Not available in power on mode.
# You have a choice of defining low intensity characters as "half bright" and
# high intensity as "normal", or defining low as "normal" and high as "bold".
# No matter which you choose, only one of either "half bright" or "bold" is
# available at any time, so taking the time to override the default is
# pointless.
#
#------- prot=\E[=0;99m
# Not defined, because it appears to have some strange side effects.
#------- pfkey=%?%p1%{24}%<%p1%{30}%>%p1%{54}%<%A%O%t\E[%p1%du\177%p2%s\177%;
#------- pfloc=%?%p1%{24}%<%p1%{30}%>%p1%{54}%<%A%O%t\E[%p1%du\177%p2%s\177%;
#------- pfx=%?%p1%{24}%<%p1%{30}%>%p1%{54}%<%A%O%t\E[%p1%d;1u\177%p2%s\177%;
# Available, but making them available to programs is inadvisable.
# The code to do this is:
# %?%p1%{24}%< IF ((key; 24) <;
# %p1%{30}%> ((key; 30) >;
# %p1%{54}%< (key; 54) <
# %A ) AND
# %O ) OR
# [that is, "IF key < 24 OR (key > 30 AND key < 54)",]
# %t\E[ THEN OUTPUT \E[
# %p1%d OUTPUT (key) as decimal
# [next line applies to pfx only]
# ;1 OUTPUT ;1
# u OUTPUT u
# \177 OUTPUT \177
# %p2%s OUTPUT (string) as string
# \177 OUTPUT \177
# [DEL chosen as delimiter, but could be any character]
# [implied: ELSE do nothing]
# %; ENDIF
#
#------- rs2=
# Not defined since anything it might do could be done faster and easier with
# either Meta-Shift-Reset or the main power switch.
#
#------- smkx=\E[1!z
#------- rmkx=\E[!z
# These sequences apply to the cursor and setup keys only, not to the
# numeric keypad. But it doesn't matter anyway, since making these
# available to programs is inadvisable.
# For the key definitions below, all sequences beginning with \E$ are
# custom and programmed into the terminal via is2. \E$ also has no
# meaning to any other terminal.
#
#------- cmdch=\E[;%p1%d!t
# Available, but making it available to programs is inadvisable.
#------- smxon=\E[1*q
# Available, but making it available to programs is inadvisable.
# Terminal will send XON/XOFF on buffer overflow.
#------- rmxon=\E[*q
# Available, but making it available to programs is inadvisable.
# Terminal will not notify on buffer overflow.
#------- smm=\E[2+x
#------- rmm=\E[+x
# Available, but making them available to programs is inadvisable.
#
# Printing:
# It's not made clear in the manuals, but based on other ansi/vt type
# terminals, it's a good guess that this terminal is capable of both
# "transparent print" (which doesn't copy data to the screen, and
# therefore needs mc5i: specified to say so) and "auxiliary print"
# (which does duplicate printed data on the screen, in which case mc4=
# and mc5= should use the \E[?4i and \E[?5i strings instead).
hds200|Human Designed Systems HDS200,
am, bw, eslok, hs, km, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, lm#0,
acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G,
blink=\E[0;5m, bold=\E[0;1m, cbt=\E[Z, civis=\E[6+{,
clear=\E[H\E[J, cnorm=\E[+{, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
dsl=\E[2!w\r\n\E[!w, ed=\E[J, el=\E[K, el1=\E[1K,
fsl=\E[!w, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH,
ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED,
invis=\E[0;8m,
is2=\E)0\017\E[m\E[=107;207h\E[90;3u\E[92;3u\E[43;1u\177\E$P
\177\E[44;1u\177\E$Q\177\E[45;1u\177\E$R\177\E[46;1u
\177\E$S\177\E[200;1u\177\E$A\177\E[201;1u\177\E$B\177
\E[202;1u\177\E$C\177\E[203;1u\177\E$D\177\E[204;1u\177
\E$H\177\E[212;1u\177\E$I\177\E[213;1u\177\E$\010\177\E[
214;1u"\E$\177"\E[2!w\E[25;25w\E[!w\E[2*w\E[2+x\E[;3+},
kDC=\E$^?, kHOM=\E$H, kLFT=\E$D, kRIT=\E$C, kbs=^H,
kcbt=\E$I, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=^?, kent=\r, kf1=^\001\r, kf10=^\010\r, kf11=^\011\r,
kf12=^\012\r, kf13=\EOP, kf14=\EOQ, kf15=\EOR, kf16=\EOS,
kf17=^\017\r, kf18=^\018\r, kf19=^\019\r, kf2=^\002\r,
kf20=^\020\r, kf21=^\021\r, kf22=^\022\r, kf23=^\023\r,
kf3=^\003\r, kf31=^\031\r, kf32=^\032\r, kf33=^\033\r,
kf34=^\034\r, kf35=^\035\r, kf36=^\036\r, kf37=^\037\r,
kf38=^\038\r, kf39=^\039\r, kf4=^\004\r, kf40=^\040\r,
kf41=^\041\r, kf42=^\042\r, kf43=\E$P, kf44=\E$Q,
kf45=\E$R, kf46=\E$S, kf47=^\047\r, kf48=^\048\r,
kf49=^\049\r, kf5=^\005\r, kf50=^\050\r, kf51=^\051\r,
kf52=^\052\r, kf53=^\053\r, kf6=^\006\r, kf7=^\007\r,
kf8=^\008\r, kf9=^\009\r, khome=\E[H, kind=\E[T, knp=\E[U,
kpp=\E[V, kri=\E[S, ll=\E[H\E[A, nel=\E[E, rc=\E8,
rev=\E[0;7m, ri=\EM, rmacs=^O, rmir=\E[4l, rmso=\E[m\017,
rmul=\E[m\017, sc=\E7,
sgr=\E[0%?%p1%p6%O%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%O%t;7
%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smir=\E[4h, smso=\E[0;1;7m,
smul=\E[0;4m, tbc=\E[3g, tsl=\E[2!w\E[%i%p1%dG,
vpa=\E[%i%p1%dd, use=ansi+pp,
# <ht> through <el> included to specify padding needed in raw mode.
# (avt-ns: added empty <acsc> to suppress a tic warning --esr)
avt-ns|concept avt no status line,
OTbs, am, eo, mir, ul, xenl, xon,
cols#80, it#8, lines#24, lm#192,
acsc=, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
clear=\E[H\E[J$<38>, cnorm=\E[=119l, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[=119h, dch1=\E[P, dim=\E[1!{, dl=\E[%p1%dM$<4*>,
dl1=\E[M$<4>, ed=\E[J$<96>, el=\E[K$<6>, home=\E[H,
hpa=\E[%p1%{1}%+%dG, ht=\011$<4>, hts=\EH, ich=\E[%p1%d@,
ich1=\E[@, il=\E[%p1%dL$<4*>, il1=\E[L$<4>, ind=\n$<8>,
invis=\E[8m, ip=$<4>, is1=\E[=103l\E[=205l,
is2=\E[1*q\E[2!t\E[7!t\E[=4;101;119;122l\E[=107;118;207h\E)1
\E[1Q\EW\E[!y\E[!z\E>\E[0\:0\:32!r\E[0*w\E[w\E2\r\n\E[2;
27!t,
kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=\E\002\r, ked=\E\004\r, kf1=\EOP, kf2=\EOQ, kf3=\EOR,
kf4=\EOS, khome=\E[H, kich1=\E\001\r, kil1=\E\003\r,
ll=\E[24H, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i,
pfloc=\E[%p1%d;0u#%p2%s#, pfx=\E[%p1%d;1u#%p2%s#,
prot=\E[99m, rc=\E8, rev=\E[7m, ri=\EM$<4>, rmacs=\016$<1>,
rmcup=\E[w\E2\r\n, rmir=\E[4l, rmkx=\E[!z\E[0;2u,
rmso=\E[7!{, rmul=\E[4!{, sc=\E7,
sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1;
%;%?%p7%t8;%;%?%p8%t99;%;m%?%p5%t\E[1!{%;%?%p9%t\017%e
\016%;$<1>,
sgr0=\E[m\016$<1>, smacs=\017$<1>,
smcup=\E[=4l\E[1;24w\E2\r, smir=\E[4h,
smkx=\E[1!z\E[0;3u, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
vpa=\E[%p1%{1}%+%dd, use=ansi+rep,
avt-rv-ns|concept avt in reverse video mode/no status line,
flash=\E[=205l$<200>\E[=205h, is1=\E[=103l\E[=205h,
use=avt-ns,
avt-w-ns|concept avt in 132 column mode/no status line,
is1=\E[=103h\E[=205l, smcup=\E[H\E[1;24;1;132w,
use=avt-ns,
avt-w-rv-ns|concept avt in 132 column mode/no status line/reverse video,
flash=\E[=205l$<200>\E[=205h, is1=\E[=103h\E[=205h,
smcup=\E[H\E[1;24;1;132w, use=avt-ns,
# Concept AVT with status line. We get the status line using the
# "Background status line" feature of the terminal. We swipe the
# first line of memory in window 2 for the status line, keeping
# 191 lines of memory and 24 screen lines for regular use.
# The first line is used instead of the last so that this works
# on both 4 and 8 page AVTs. (Note the lm#191 or 192 - this
# assumes an 8 page AVT but lm isn't currently used anywhere.)
#
avt+s|concept avt status line changes,
eslok, hs,
lm#191,
dsl=\E[0*w, fsl=\E[1;1!w,
is3=\E[2w\E[2!w\E[1;1;1;80w\E[H\E[2*w\E[1!w\E2\r\n,
rmcup=\E[2w\E2\r\n, smcup=\E[2;25w\E2\r,
tsl=\E[2;1!w\E[;%p1%dH\E[2K,
avt|avt-s|concept-avt|avt w/80 columns,
use=avt+s, use=avt-ns,
avt-rv|avt-rv-s|avt reverse video w/sl,
flash=\E[=205l$<200>\E[=205h, is1=\E[=103l\E[=205h,
use=avt+s, use=avt-ns,
avt-w|avt-w-s|concept avt 132 cols+status,
is1=\E[=103h\E[=205l, smcup=\E[H\E[1;24;1;132w,
use=avt+s, use=avt-ns,
avt-w-rv|avt-w-rv-s|avt wide+status+rv,
flash=\E[=205l$<200>\E[=205h, is1=\E[=103h\E[=205h,
smcup=\E[H\E[1;24;1;132w, use=avt+s, use=avt-ns,
#### Contel Business Systems.
#
# Contel c300 and c320 terminals.
contel300|contel320|c300|Contel Business Systems C-300 or C-320,
am, in, xon,
cols#80, lines#24, xmc#1,
bel=^G, clear=\EK, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EX%p1%{32}%+%c\EY%p2%{32}%+%c, cuu1=\EA,
dch1=\EO$<5.5*>, dl1=\EM$<5.5*>, ed=\EJ$<5.5*>,
el=\EI$<5.5>, flash=\020\002$<200/>\020\003, home=\EH,
hts=\E1, ich1=\EN, il1=\EL$<5.5*>, ind=\n, ip=$<5.5*>,
kbs=^H, kf0=\ERJ, kf1=\ERA, kf2=\ERB, kf3=\ERC, kf4=\ERD,
kf5=\ERE, kf6=\ERF, kf7=\ERG, kf8=\ERH, kf9=\ERI, ll=\EH\EA,
rmso=\E!\0, sgr0=\E!\0, smso=\E!\r, tbc=\E3,
# Contel c301 and c321 terminals.
contel301|contel321|c301|c321|Contel Business Systems C-301 or C-321,
flash@, ich1@, ip@, rmso=\E!\0$<20>, smso=\E!\r$<20>,
use=contel300,
#### Data General (dg)
#
# According to James Carlson <carlson@xylogics.com> writing in January 1995,
# the terminals group at Data General was shut down in 1991; all these
# terminals have thus been discontinued.
#
# DG terminals have function keys that respond to the SHIFT and CTRL keys,
# e.g., SHIFT-F1 generates a different code from F1. To number the keys
# sequentially, first the unmodified key codes are listed as F1 through F15.
# Then their SHIFT versions are listed as F16 through F30, their CTRL versions
# are listed as F31 through F45, and their CTRL-SHIFT versions are listed as
# F46 through F60. This is done in the private "includes" below whose names
# start with "dgkeys+".
#
# DG terminals generally support 8 bit characters. For each of these terminals
# two descriptions are supplied:
# 1) A default description for 8 bits/character communications, which
# uses the default DG international character set and keyboard codes.
# 2) A description with suffix "-7b" for 7 bits/character communications.
# This description must use the NON-DEFAULT native keyboard language.
# Unmodified fkeys (kf1-kf11), Shift fkeys (kf12-kf22), Ctrl fkeys (kf23-kf33),
# Ctrl/Shift fdkeys (kf34-kf44).
dgkeys+8b|Private entry describing DG terminal 8-bit ANSI mode special keys,
ka1=\233020z, ka3=\233021z, kc1=\233022z, kc3=\233023z,
kclr=\2332J, kcub1=\233D, kcud1=\233B, kcuf1=\233C,
kcuu1=\233A, kel=\233K, kf1=\233001z, kf10=\233010z,
kf11=\233011z, kf12=\233012z, kf13=\233013z,
kf14=\233014z, kf15=\233000z, kf16=\233101z,
kf17=\233102z, kf18=\233103z, kf19=\233104z,
kf2=\233002z, kf20=\233105z, kf21=\233106z,
kf22=\233107z, kf23=\233108z, kf24=\233109z,
kf25=\233110z, kf26=\233111z, kf27=\233112z,
kf28=\233113z, kf29=\233114z, kf3=\233003z,
kf30=\233100z, kf31=\233201z, kf32=\233202z,
kf33=\233203z, kf34=\233204z, kf35=\233205z,
kf36=\233206z, kf37=\233207z, kf38=\233208z,
kf39=\233209z, kf4=\233004z, kf40=\233210z,
kf41=\233211z, kf42=\233212z, kf43=\233213z,
kf44=\233214z, kf45=\233200z, kf46=\233301z,
kf47=\233302z, kf48=\233303z, kf49=\233304z,
kf5=\233005z, kf50=\233305z, kf51=\233306z,
kf52=\233307z, kf53=\233308z, kf54=\233309z,
kf55=\233310z, kf56=\233311z, kf57=\233312z,
kf58=\233313z, kf59=\233314z, kf6=\233006z,
kf60=\233300z, kf7=\233007z, kf8=\233008z, kf9=\233009z,
khome=\233H, kprt=\233i,
dgkeys+7b|Private entry describing DG terminal 7-bit ANSI mode special keys,
ka1=\E[020z, ka3=\E[021z, kc1=\E[022z, kc3=\E[023z,
kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kel=\E[K, kf1=\E[001z, kf10=\E[010z, kf11=\E[011z,
kf12=\E[012z, kf13=\E[013z, kf14=\E[014z, kf15=\E[000z,
kf16=\E[101z, kf17=\E[102z, kf18=\E[103z, kf19=\E[104z,
kf2=\E[002z, kf20=\E[105z, kf21=\E[106z, kf22=\E[107z,
kf23=\E[108z, kf24=\E[109z, kf25=\E[110z, kf26=\E[111z,
kf27=\E[112z, kf28=\E[113z, kf29=\E[114z, kf3=\E[003z,
kf30=\E[100z, kf31=\E[201z, kf32=\E[202z, kf33=\E[203z,
kf34=\E[204z, kf35=\E[205z, kf36=\E[206z, kf37=\E[207z,
kf38=\E[208z, kf39=\E[209z, kf4=\E[004z, kf40=\E[210z,
kf41=\E[211z, kf42=\E[212z, kf43=\E[213z, kf44=\E[214z,
kf45=\E[200z, kf46=\E[301z, kf47=\E[302z, kf48=\E[303z,
kf49=\E[304z, kf5=\E[005z, kf50=\E[305z, kf51=\E[306z,
kf52=\E[307z, kf53=\E[308z, kf54=\E[309z, kf55=\E[310z,
kf56=\E[311z, kf57=\E[312z, kf58=\E[313z, kf59=\E[314z,
kf6=\E[006z, kf60=\E[300z, kf7=\E[007z, kf8=\E[008z,
kf9=\E[009z, khome=\E[H, kprt=\E[i,
dgkeys+11|Private entry describing 11 minimal-subset DG mode special keys,
kclr=^L, kcub1=^Y, kcud1=^Z, kcuf1=^X, kcuu1=^W, kel=^K,
kf1=^^q, kf10=^^z, kf11=^^{, kf12=^^a, kf13=^^b, kf14=^^c,
kf15=^^d, kf16=^^e, kf17=^^f, kf18=^^g, kf19=^^h, kf2=^^r,
kf20=^^i, kf21=^^j, kf22=^^k, kf23=^^1, kf24=^^2, kf25=^^3,
kf26=^^4, kf27=^^5, kf28=^^6, kf29=^^7, kf3=^^s, kf30=^^8,
kf31=^^9, kf32=^^\:, kf33=^^;, kf34=^^!, kf35=^^", kf36=^^#,
kf37=^^$, kf38=^^%%, kf39=^^&, kf4=^^t, kf40=^^', kf41=^^(,
kf42=^^), kf43=^^*, kf44=^^+, kf5=^^u, kf6=^^v, kf7=^^w,
kf8=^^x, kf9=^^y, khome=^H,
dgkeys+15|Private entry describing 15 DG mode special keys,
kHOM=^^^H, kLFT=^^^Y, kRIT=^^^X, ka1=^^\\, ka3=^^], kc1=^^\^,
kc3=^^_, kf1=^^q, kf10=^^z, kf11=^^{, kf12=^^|, kf13=^^},
kf14=^^~, kf15=^^p, kf16=^^a, kf17=^^b, kf18=^^c, kf19=^^d,
kf2=^^r, kf20=^^e, kf21=^^f, kf22=^^g, kf23=^^h, kf24=^^i,
kf25=^^j, kf26=^^k, kf27=^^l, kf28=^^m, kf29=^^n, kf3=^^s,
kf30=^^`, kf31=^^1, kf32=^^2, kf33=^^3, kf34=^^4, kf35=^^5,
kf36=^^6, kf37=^^7, kf38=^^8, kf39=^^9, kf4=^^t, kf40=^^\:,
kf41=^^;, kf42=^^<, kf43=^^=, kf44=^^>, kf45=^^0, kf46=^^!,
kf47=^^", kf48=^^#, kf49=^^$, kf5=^^u, kf50=^^%%, kf51=^^&,
kf52=^^', kf53=^^(, kf54=^^), kf55=^^*, kf56=^^+, kf57=^^\,,
kf58=^^-, kf59=^^., kf6=^^v, kf60=^^\s, kf7=^^w, kf8=^^x,
kf9=^^y,
# Data General color terminals use the "Tektronix" color model. The total
# number of colors varies with the terminal model, as does support for
# attributes used in conjunction with color.
# Removed u7, u8 definitions since they conflict with tack:
# Preserve user-defined colors in at least some cases.
# u7=^^Fh,
# Default is ACM mode.
# u8=^^F}20^^Fi^^F}21,
#
dgunix+fixed|Fixed color info for DG D430C terminals in DG-UNIX mode,
bce,
colors#16, ncv#53, pairs#0x100,
op=\036Ad\036Bd,
setab=\036B%p1%?%p1%{8}%<%t%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1
%{4}%&%t%{1}%|%;%;%{48}%+%c,
setaf=\036A%p1%?%p1%{8}%<%t%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1
%{4}%&%t%{1}%|%;%;%{48}%+%c,
setb=\036B%p1%{48}%+%c, setf=\036A%p1%{48}%+%c,
dg+fixed|Fixed color info for DG D430C terminals in DG mode,
use=dgunix+fixed,
# Video attributes are coordinated using static variables set by "sgr", then
# checked by "op", "seta[bf]", and "set[bf]" to refresh the attribute settings.
# (D=dim, U=underline, B=blink, R=reverse.)
dg+color8|Color info for Data General D220 and D230C terminals in ANSI mode,
bce,
colors#8, ncv#16, pairs#64,
op=\E[%?%gD%t2;%;%?%gU%t4;%;%?%gB%t5;%;%?%gR%t7;%;m,
setab=\E[4%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m,
setaf=\E[3%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m,
setb=\E[4%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;
%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m,
setf=\E[3%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;
%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m,
dg+color|Color info for Data General D470C terminals in ANSI mode,
colors#16, ncv#53, pairs#0x100,
setab=\E[%?%p1%{8}%<%t4%p1%e=%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;
%?%p1%{4}%&%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t
;5%;%?%gR%t;7%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%e<%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;
%?%p1%{4}%&%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t
;5%;%?%gR%t;7%;m,
setb=\E[%?%p1%{8}%<%t4%e=%;%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?
%p1%{4}%&%t%{1}%|%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;
%?%gR%t;7%;m,
setf=\E[%?%p1%{8}%<%t3%e<%;%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?
%p1%{4}%&%t%{1}%|%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;
%?%gR%t;7%;m,
use=dg+color8,
dgmode+color8|Color info for Data General D220/D230C terminals in DG mode,
bce,
colors#8, ncv#16, pairs#64,
op=\036Ad\036Bd,
setab=\036B%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|
%;%{48}%+%c,
setaf=\036A%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|
%;%{48}%+%c,
setb=\036B%p1%{48}%+%c, setf=\036A%p1%{48}%+%c,
dgmode+color|Color info for Data General D470C terminals in DG mode,
colors#16, pairs#0x100,
setab=\036B%p1%?%p1%{8}%<%t%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1
%{4}%&%t%{1}%|%;%;%{48}%+%c,
setaf=\036A%p1%?%p1%{8}%<%t%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1
%{4}%&%t%{1}%|%;%;%{48}%+%c,
use=dgmode+color8,
dgunix+ccc|Configurable color info for DG D430C terminals in DG-UNIX mode,
bce, ccc,
colors#52, ncv#53, pairs#26,
initp=\036RG0%p1%02X%p2%{255}%*%{1000}%/%02X%p3%{255}%*
%{1000}%/%02X%p4%{255}%*%{1000}%/%02X%p5%{255}%*
%{1000}%/%02X%p6%{255}%*%{1000}%/%02X%p7%{255}%*
%{1000}%/%02X,
oc=\036RG01A00FF00000000\036RG01B00000000FF00
\036RG01C007F00000000\036RG01D000000007F00,
op=\036RF4831A\036RF2E31B\036RF1D31C\036RF3F31D,
scp=\036RG2%p1%02X,
# Colors are in the order: normal, reverse, dim, dim + reverse.
dg+ccc|Configurable color info for DG D430C terminals in DG mode,
bce, ccc,
colors#52, ncv#53, pairs#26,
initp=\036RG0%p1%{16}%/%{48}%+%c%p1%{16}%m%{48}%+%c%p2%{255}
%*%{1000}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c
%p3%{255}%*%{1000}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m
%{48}%+%c%p4%{255}%*%{1000}%/%Pa%ga%{16}%/%{48}%+%c%ga
%{16}%m%{48}%+%c%p5%{255}%*%{1000}%/%Pa%ga%{16}%/%{48}
%+%c%ga%{16}%m%{48}%+%c%p6%{255}%*%{1000}%/%Pa%ga%{16}
%/%{48}%+%c%ga%{16}%m%{48}%+%c%p7%{255}%*%{1000}%/%Pa
%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c,
oc=\036RG01\:00??00000000\036RG01;00000000??00\036RG01<007?0
0000000\036RG01=000000007?00,
op=\036RF4831\:\036RF2>31;\036RF1=31<\036RF3?31=,
scp=\036RG2%p1%{16}%/%{48}%+%c%p1%{16}%m%{48}%+%c,
# The generic DG terminal type (an 8-bit-clean subset of the 6053)
# Initialization string 1 sets:
# ^R - vertical scrolling enabled
# ^C - blinking enabled
dg-generic|Generic Data General terminal in DG mode,
am, bw, msgr, xon,
cols#80, lines#24,
bel=^G, blink=^N, clear=^L, cr=\r, cub1=^Y, cud1=^Z, cuf1=^X,
cup=\020%p2%c%p1%c, cuu1=^W, dim=^\, el=^K, ind=\n, is1=^R^C,
mc0=^Q, nel=\n, rmso=^], rmul=^U, sgr0=^O^U^], smso=^\,
smul=^T, use=dgkeys+11,
# According to the 4.4BSD termcap file, the dg200 <cup> should be the
# termcap equivalent of \020%p2%{128}%+%c%p1%{128}%+%c (in termcap
# notation that's "^P%r%+\200%+\200"). Those \200s are suspicious,
# maybe they were originally nuls (which would fit).
dg200|data general dasher 200,
OTbs, am, bw,
cols#80, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^Y, cud1=^Z, cuf1=^X,
cup=\020%p2%c%p1%c, cuu1=^W, el=^K, home=^H, ind=\n,
kcub1=^Y, kcud1=^Z, kcuf1=^X, kcuu1=^W, kf0=^^z, kf1=^^q,
kf2=^^r, kf3=^^s, kf4=^^t, kf5=^^u, kf6=^^v, kf7=^^w, kf8=^^x,
kf9=^^y, khome=^H, lf0=f10, nel=\n, rmso=^^E, rmul=^U,
smso=^^D, smul=^T,
# Data General 210/211 (and 410?) from Lee Pearson (umich!lp) via BRL
dg210|dg-ansi|Data General 210/211,
am,
cols#80, lines#24,
OTnl=\E[B, clear=\E[2J, cub1=\E[D, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, ed=\E[J, el=\E[K,
home=\E[H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
khome=\E[H, nel=\r\E[H\E[A\n, rmso=\E[0;m, rmul=\E[0;m,
smso=\E[7;m, smul=\E[4;m,
# From: Peter N. Wan <ihnp4!gatech!gacsr!wan>
# courtesy of Carlos Rucalde of Vantage Software, Inc.
# (dg211: this had <cup=\020%r%.%>., which was an ancient termcap hangover.
# I suspect the d200 function keys actually work on the dg211, check it out.)
dg211|Data General d211,
cnorm=^L, cvvis=^L^R, ht=^I, ind@, kbs=^Y, kf0@, kf1@, kf2@, kf3@,
kf4@, kf5@, kf6@, kf7@, kf8@, kf9@, lf0@, nel=\r^Z, rmcup=^L,
rmso=\036E$<0/>, smcup=^L^R, smso=\036D$<5/>, use=dg200,
# dg450 from Cornell (not official)
dg450|dg6134|data general 6134,
cub1@, cuf1=^X, use=dg200,
# Not official...
# Note: lesser Dasher terminals will not work with vi because vi insists upon
# having a command to move straight down from any position on the bottom line
# and scroll the screen up, or a direct vertical scroll command. The 460 and
# above have both, the D210/211, for instance, has neither. We must use ANSI
# mode rather than DG mode because standard UNIX tty drivers assume that ^H is
# backspace on all terminals. This is not so in DG mode.
# (dg460-ansi: removed obsolete ":kn#6:"; also removed ":mu=\EW:", on the
# grounds that there is no matching ":ml:"
dg460-ansi|Data General Dasher 460 in ANSI-mode,
OTbs, am, msgr, ul,
cols#80, it#8, lines#24,
OTnl=\ED, blink=\E[5m, clear=\E[2J, cub1=^H, cud1=\E[B,
cuf1=\E[C, cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[A, dch1=\E[P,
dim=\E[2m, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I,
ich1=\E[@, il1=\E[L, ind=\E[S, is2=^^F@, kbs=\E[D,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kf0=\E[001z, kf1=\E[002z, kf2=\E[003z, kf3=\E[004z,
kf4=\E[005z, kf5=\E[006z, kf6=\E[007z, kf7=\E[008z,
kf8=\E[009z, kf9=\E[00\:z, khome=\E[H, lf0=f1, lf1=f2,
lf2=f3, lf3=f4, lf4=f5, lf5=f6, lf6=f7, lf7=f8, lf9=f10,
mc0=\E[i, rev=\E[7m, ri=\E[T, rmso=\E[m, rmul=\E[05,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;
%?%p1%p3%|%t;7%;m,
sgr0=\E(B\E[m, smso=\E[7m, smul=\E[4m, u6=\E[%d;%dR,
u7=\E[6n, u8=\E[5n, u9=\E[0n,
# From: Wayne Throop <mcnc!rti-sel!rtp47!throopw> (not official)
# Data General 605x
# Ought to work for a Model 6242, Type D210 as well as a 605x.
# Note that the cursor-down key transmits ^Z. Job control users, beware!
# This also matches a posted description of something called a `Dasher 100'
# so there's a dg100 alias here.
# (dg6053: the 4.4BSD file had <cub1=^H>, <cud1=^J>, <cuf1=^S>. -- esr)
dg6053-old|dg100|data general 6053,
OTbs, am, bw, ul,
cols#80, lines#24,
OTbc=^Y, bel=^G, clear=^L, cnorm=^L, cr=\r, cub1=^Y, cud1=^Z,
cuf1=^X, cup=\020%p2%c%p1%c, cuu1=^W, cvvis=^L^R, el=^K,
home=^H, ht=^I, is2=^R, kbs=^Y, kcub1=^Y, kcud1=^Z, kcuf1=^X,
kcuu1=^W, kf0=^^q, kf1=^^r, kf2=^^s, kf3=^^t, kf4=^^u, kf5=^^v,
kf6=^^w, kf7=^^x, kf8=^^y, kf9=^^z, khome=^H, rmcup=^L,
rmso=\0^^E, rmul=^U, smcup=^L^R, smso=\0\0\0\0\0\036D,
smul=^T,
# (Some performance can be gained over the generic DG terminal type)
dg6053|6053|6053-dg|dg605x|605x|605x-dg|d2|d2-dg|Data General DASHER 6053,
xon@,
home=\020\0\0, ll=^P\0^W, use=dg-generic,
# Like 6053, but adds reverse video and more keypad and function keys.
d200|d200-dg|Data General DASHER D200,
bold=^^D^T, home@, ll@, rev=^^D, rmso=^^E^],
sgr=\036%?%p1%p3%|%p6%|%tD%eE%;%?%p2%p6%|%t\024%e\025%;%?%p4
%t\016%e\017%;%?%p1%p5%|%t\034%e\035%;,
sgr0=^O^U^]^^E, smso=^^D^\, use=dgkeys+15, use=dg6053,
# DASHER D210 series terminals in ANSI mode.
# Reverse video, no insert/delete character/line, 7 bits/character only.
#
# Initialization string 1 sets:
# <0 - scrolling enabled
# <1 - blink enabled
# <4 - print characters regardless of attributes
d210|d214|Data General DASHER D210 series,
am, bw, msgr, xon,
cols#80, lines#24,
bel=^G, blink=\E[5m, bold=\E[4;7m, clear=\E[2J, cr=\r,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dim=\E[2m, ed=\E[J, el=\E[K,
el1=\E[1K, home=\E[H, ind=\n, is1=\E[<0;<1;<4l,
ll=\E[H\E[A, nel=\n, rev=\E[7m, rmso=\E[m, rmul=\E[m,
sgr=\E[%?%p4%t5;%;%?%p2%p6%|%t4;%;%?%p1%p5%|%t2;%;%?%p1%p3%|
%p6%|%t7;%;m,
sgr0=\E[m, smso=\E[2;7m, smul=\E[4m, use=dgkeys+7b,
# DASHER D210 series terminals in DG mode.
# Like D200, but adds clear to end-of-screen and needs XON/XOFF.
d210-dg|d214-dg|Data General DASHER D210 series in DG mode,
xon,
ed=^^FF, use=d200-dg,
# DASHER D211 series terminals in ANSI mode.
# Like the D210, but with 8-bit characters and local printer support.
#
# Initialization string 2 sets:
# \E[2;1;1;1v
# 2;1 - 8 bit operations
# 1;1 - 8 bit (international) keyboard language
# \E(B - default primary character set (U.S. ASCII)
# \E)4 - default secondary character set (international)
# ^O - primary character set
#
d211|d215|Data General DASHER D211 series,
km,
is2=\E[2;1;1;1v\E(B\E)4\017, mc0=\E[i, use=dgkeys+8b,
use=d210,
# Initialization string 2 sets:
# \E[2;0;1;0v
# 2;0 - 7 bit operations
# 1;0 - 7 bit (native) keyboard language
# \E(0 - default character set (the keyboard native language)
# ^O - primary character set
d211-7b|d215-7b|Data General DASHER D211 series in 7 bit mode,
km@,
is2=\E[2;0;1;0v\E(0\017, use=dgkeys+7b, use=d211,
# Like the D210 series, but adds support for 8-bit characters.
#
# Reset string 2 sets:
# ^^N - secondary character set
# ^^FS0> - 8 bit international character set
# ^^O - primary character set
# ^^FS00 - default character set (matching the native keyboard language)
#
d211-dg|d215-dg|Data General DASHER D211 series in DG mode,
km,
rs2=\036N\036FS0>\036O\036FS00, use=d210-dg,
d216-dg|d216e-dg|d216+dg|d216e+dg|d217-dg|Data General DASHER D216 series in DG mode,
use=d211-dg,
# Enhanced DG mode with changes to be more UNIX compatible.
d216-unix|d216e-unix|d216+|d216e+|Data General DASHER D216+ in DG-UNIX mode,
mc5i,
it#8,
acsc=a\177j$k"l!m#n)q+t'u&v(w%x*, blink=^^PI,
clear=^^PH, cub1=^^PD, cud1=^^PB, cuf1=^^PC, cuu1=^^PA,
el=^^PE, home=^^PF, hpa=\020%p1%c\177, ht=^I, ind=\n,
is1=^R^C^^P@1, is3=^^Fz0, kHOM=^^Pf, kLFT=^^Pd, kPRT=^^P1,
kRIT=^^Pc, kclr=^^PH, kcub1=^^PD, kcud1=^^PB, kcuf1=^^PC,
kcuu1=^^PA, kel=^^PE, khome=^^PF, kprt=^^P0, mc0=^^F?9,
mc4=^^Fa, mc5=^^F`, rmacs=\036FS00,
rs2=\036N\036FS0E\036O\036FS00,
sgr=\036%?%p1%p3%|%p6%|%tD%eE%;%?%p2%p6%|%t\024%e\025%;
\036P%?%p4%tI%eJ%;%?%p1%p5%|%t\034%e\035%;\036FS%?%p9%t1
1%e00%;,
sgr0=\036PJ\025\035\036E\036FS00, smacs=\036FS11,
vpa=\020\177%p1%c, use=dgkeys+15, use=d216-dg,
d216-unix-25|d216+25|Data General DASHER D216+ in DG-UNIX mode with 25 lines,
lines#25,
is3=^^Fz2, use=d216+,
d217-unix|Data General DASHER D217 in DG-UNIX mode,
use=d216-unix,
d217-unix-25|Data General DASHER D217 in DG-UNIX mode with 25 lines,
use=d216-unix-25,
# DASHER D220 color terminal in ANSI mode.
# Like the D470C but with fewer colors and screen editing features.
#
# Initialization string 1 sets:
# \E[<0;<1;<4l
# <0 - scrolling enabled
# <1 - blink enabled
# <4 - print characters regardless of attributes
# \E[m - all attributes off
# Reset string 1 sets:
# \Ec - initial mode defaults (RIS)
#
d220|Data General DASHER D220,
mc5i@,
dl@, dl1@, il@, il1@, is1=\E[<0;<1;<4l\E[m, mc4@, mc5@, rs1=\Ec,
use=dg+color8, use=d470c,
d220-7b|Data General DASHER D220 in 7 bit mode,
mc5i@,
dl@, dl1@, il@, il1@, is1=\E[<0;<1;<4l\E[m, mc4@, mc5@, rs1=\Ec,
use=dg+color8, use=d470c-7b,
# Initialization string 3 sets:
# - default cursor (solid rectangle)
# Reset string 2 sets:
# ^^N - secondary character set
# ^^FS0> - 8 bit international character set
# ^^O - primary character set
# ^^FS00 - default character set (matching the native keyboard language)
#
d220-dg|Data General DASHER D220 color terminal in DG mode,
mc5i@,
dl1@, home@, il1@, is2@, is3=^^FQ2, ll@, mc4@, mc5@, rs1@,
rs2=\036N\036FS0>\036O\036FS00, use=dgmode+color8,
use=d470c-dg,
# DASHER D230C color terminal in ANSI mode.
# Like the D220 but with minor ANSI compatibility improvements.
#
d230c|d230|Data General DASHER D230C,
blink=\E[5;50m, bold=\E[4;7;50m, dim=\E[2;50m, nel=\r\n,
rev=\E[7;50m, rmkx=\E[2;1v, rmso=\E[50m, rmul=\E[50m,
- sgr=\E[50%?%p1%p3%|%p6%|%t;7%{1}%e%{0}%;%PR%?%p4%t;5%{1}%e
- %{0}%;%PB%?%p2%p6%|%t;4%{1}%e%{0}%;%PU%?%p1%p5%|%t;2%{1}
- %e%{0}%;%PDm\E)%?%p9%t6\016%e4\017%;,
+ sgr=\E[%?%p1%p3%|%p6%|%t7;%{1}%e%{0}%;%PR%?%p4%t5;%{1}%e%{0}
+ %;%PB%?%p2%p6%|%t4;%{1}%e%{0}%;%PU%?%p1%p5%|%t2;%{1}%e
+ %{0}%;%PD50m\E)%?%p9%t6\016%e4\017%;,
sgr0=\E[50m\E)4\017, smkx=\E[2;0v, smso=\E[2;7;50m,
smul=\E[4;50m, use=dgkeys+7b, use=d220,
d230c-dg|d230-dg|Data General DASHER D230C in DG mode,
use=d220-dg,
# DASHER D400/D450 series terminals.
# These add intelligent features like insert/delete to the D200 series.
#
# Initialization string 2 sets:
# ^^FQ2 - default cursor (solid rectangle)
# ^^FW - character protection disabled
# ^^FJ - normal (80 column) mode
# ^^F\^ - horizontal scrolling enabled (for alignment)
# ^^FX004? - margins at columns 0 and 79
# ^^F] - horizontal scrolling disabled
# ^^O - primary character set
# ^^FS00 - default character set (the keyboard native language)
# - (should reset scrolling regions, but that glitches the screen)
# Reset string 1 sets:
# ^^FA - all terminal defaults except scroll rate
# Reset string 2 sets:
# ^^F] - horizontal scrolling disabled
# ^^FT0 - jump scrolling
#
d400|d400-dg|d450|d450-dg|Data General DASHER D400/D450 series,
mc5i,
acsc=j$k"l!m#n)q+t'u&v(w%x*, civis=^^FQ0, cnorm=^^FQ2,
dch1=^^K, dl1=^^FI, enacs=\036N\036FS11\036O, home=^^FG,
hpa=\020%p1%c\177, ich1=^^J, il1=^^FH,
is2=\036FQ2\036FW\036FJ\036F\^\036FX004?\036F]\036O
\036FS00,
ll=^^FG^W, mc4=^^Fa, mc5=^^F`, ri=^^I, rmacs=^^O, rs1=^^FA,
rs2=\036F]\036FT0,
sgr=\036%?%p1%p3%|%p6%|%tD%eE%;%?%p2%p6%|%t\024%e\025%;%?%p4
%t\016%e\017%;%?%p1%p5%|%t\034%e\035%;\036%?%p9%tN%eO%;,
sgr0=^O^U^]^^E^^O, smacs=^^N, vpa=\020\177%p1%c,
use=d210-dg,
# DASHER D410/D460 series terminals in ANSI mode.
# These add a large number of intelligent terminal features.
#
# Initialization string 1 sets:
# \E[<0;<1;<2;<4l
# <0 - scrolling enabled
# <1 - blink enabled
# <2 - horizontal scrolling enabled (for alignment)
# <4 - print characters regardless of attributes
# \E[5;0v - normal (80 column) mode
# \E[1;1;80w - margins at columns 1 and 80
# \E[1;6;<2h
# 1 - print all characters even if protected
# 6 - character protection disabled
# <2 - horizontal scrolling disabled
# - (should reset scrolling regions, but that glitches the screen)
#
# Initialization string 2 sets:
# \E[3;2;2;1;1;1v
# 3;2 - default cursor (solid rectangle)
# 2;1 - 8 bit operations
# 1;1 - international keyboard language
# \E(B - default primary character set (U.S. ASCII)
# \E)4 - default secondary character set (international)
# ^O - primary character set
#
# Reset string 1 sets:
# \Ec - initial mode defaults (RIS)
# \E[<2h - horizontal scrolling disabled
#
# Reset string 2 sets:
# \E[4;0;2;1;1;1v
# 4;0 - jump scrolling
# 2;1 - 8 bit operations
# 1;1 - 8 bit (international) keyboard language
# \E(B - default primary character set (U.S. ASCII)
# \E)4 - default secondary character set (international)
#
d410|d411|d460|d461|Data General DASHER D410/D460 series,
mc5i,
acsc=j$k"l!m#n)q+t'u&v(w%x*, civis=\E[3;0v,
cnorm=\E[3;2v, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L,
is1=\E[<0;<1;<2;<4l\E[5;0v\E[1;1;80w\E[1;6;<2h,
is2=\E[3;2;2;1;1;1v\E(B\E)4\017, mc4=\E[4i, mc5=\E[5i,
ri=\EM, rmacs=\E)4\017, rs1=\Ec\E[<2h,
rs2=\E[4;0;2;1;1;1v\E(B\E)4,
sgr=\E[%?%p1%t2;7%;%?%p3%t7;%;%?%p4%t5;%;%?%p2%t4;%;%?%p1%p5
%|%t2;%;%?%p6%t4;7;%;m\E)%?%p9%t6\016%e4\017%;,
sgr0=\E[m\E)4\017, smacs=\E)6\016, use=d211,
# Initialization string 2 sets:
# \E[3;2;2;0;1;0v
# 3;2 - default cursor (solid rectangle)
# 2;0 - 7 bit operations
# 1;0 - 7 bit (native) keyboard language
# \E(0 - default character set (the keyboard native language)
# ^O - primary character set
#
# Reset string 2 sets:
# \E[4;0;2;0;1;0v
# 4;0 - jump scrolling
# 2;0 - 7 bit operations
# 1;0 - 7 bit (native) keyboard language
# \E(0 - default character set (the keyboard native language)
#
d410-7b|d411-7b|d460-7b|d461-7b|Data General DASHER D410/D460 series in 7 bit mode,
km@,
enacs=\E)6, is2=\E[3;2;2;0;1;0v\E(0\017, rmacs=^O,
rs2=\E[4;0;2;0;1;0v\E(0,
sgr=\E[%?%p1%p5%|%t2;%;%?%p2%p6%|%t4;%;%?%p1%p3%|%p6%|%t7;%;
%?%p4%t5;%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, use=dgkeys+7b, use=d410,
d410-dg|d460-dg|d411-dg|d461-dg|Data General DASHER D410/D460 series in DG mode,
km,
enacs@, rmacs=\036FS00,
sgr=\036%?%p1%p3%|%p6%|%tD%eE%;%?%p2%p6%|%t\024%e\025%;%?%p4
%t\016%e\017%;%?%p1%p5%|%t\034%e\035%;\036FS%?%p9%t11%e0
0%;,
sgr0=\017\025\035\036E\036FS00, smacs=\036FS11,
use=d400-dg,
# DASHER D410/D460 series terminals in wide (126 columns) ANSI mode.
#
# Initialization string 1 sets:
# \E[<0;<1;<2;<4l
# <0 - scrolling enabled
# <1 - blink enabled
# <2 - horizontal scrolling enabled (for alignment)
# <4 - print characters regardless of attributes
# \E[5;1v - compressed (135 column) mode
# \E[1;1;126 - margins at columns 1 and 126
# \E[1;6;<2h
# 1 - print all characters even if protected
# 6 - character protection disabled
# <2 - horizontal scrolling disabled
# - (should reset scrolling regions, but that glitches the screen)
#
# Reset string 1 sets:
# \Ec - initial mode defaults (RIS)
# \E[5;1v - compressed (135 column) mode
# \E[1;1;126w - margins at columns 1 and 126
# \E[<2h - horizontal scrolling disabled
#
d410-w|d411-w|d460-w|d461-w|Data General DASHER D410/D460 series in wide mode,
cols#126,
is1=\E[<0;<1;<2;<4l\E[5;1v\E[1;1;126w\E[1;6;<2h,
rs1=\Ec\E[5;1v\E[1;1;126w\E[<2h, use=d410,
d410-7b-w|d411-7b-w|d460-7b-w|d461-7b-w|Data General DASHER D410/D460 series in wide 7 bit mode,
cols#126,
is1=\E[<0;<1;<2;<4l\E[5;1v\E[1;1;126w\E[1;6;<2h,
rs1=\Ec\E[5;1v\E[1;1;126w\E[<2h, use=d410-7b,
d412-dg|d462-dg|d462e-dg|d412+dg|d462+dg|d413-dg|d463-dg|Data General DASHER D412/D462 series in DG mode,
use=d410-dg,
# These add intelligent features like scrolling regions.
d412-unix|d462-unix|d412+|d462+|Data General DASHER D412+/D462+ series in Unix mode,
civis=^^FQ0, clear=^^FE, cnorm=^^FQ5,
cup=\036FP%p2%2.2X%p1%2.2X, dch1=^^K, dl1=^^FI,
home=^^FG, hpa=\036FP%p1%2.2XFF, ich1=^^J, il1=^^FH,
is2=\036FQ5\036FW\036FJ\036F\^\036FX004F\036O
\036FS00,
ll=\036FG\036PA, mc0=^A, rc=\036F}11, ri=^^I,
rs1=\036FA\036FT0, rs2=^^P@1, sc=\036F}10,
vpa=\036FPFF%p1%2.2X,
wind=\036FB%?%p1%t%p1%2.2X0%;%p2%p1%-%{1}%+%2.2X0%?%{23}%p2
%>%t000%;\036FX%p3%2.2X%p4%2.2X,
use=d216+,
d412-unix-w|d462-unix-w|d412+w|d462+w|Data General DASHER D412+/D462+ series in wide Unix mode,
cols#132,
is2=\036FQ5\036FW\036FK\036F\^\036FX0083\036O
\036FS00,
rs2=\036P@1\036FK\036FX0083,
wind=\036FB%?%p1%t%p1%2.2X1%;%p2%p1%-%{1}%+%2.2X1%?%{23}%p2
%>%t001%;\036FX%p3%2.2X%p4%2.2X,
use=d412-unix,
d412-unix-25|d462-unix-25|d412+25|d462+25|Data General DASHER D412+/D462+ series in Unix mode with 25 lines,
lines#25,
is3=^^Fz2,
wind=\036FB%?%p1%t%p1%2.2X0%;%p2%p1%-%{1}%+%2.2X0%?%{24}%p2
%>%t000%;\036FX%p3%2.2X%p4%2.2X,
use=d462+,
d412-unix-s|d462-unix-s|d412+s|d462+s|Data General DASHER D412+/D462+ in Unix mode with status line,
eslok, hs,
clear=\036FG\036PH, fsl=\036F}01\022,
is3=\036Fz2\036F}00\036FB180000\036F}01, ll@,
tsl=\036F}00\036FP%p1%2.2X18\036PG,
wind=\036FB%?%p1%t%p1%2.2X0%;%p2%p1%-%{1}%+%2.2X0%?%{23}%p2
%>%t%{23}%p2%-%2.2X0%;000\036FX%p3%2.2X%p4%2.2X,
use=d462+,
# Relative cursor motions are confined to the current window,
# which is not what the scrolling region specification expects.
# Thus, relative vertical cursor positioning must be deleted.
d412-unix-sr|d462-unix-sr|d412+sr|d462+sr|Data General DASHER D412+/D462+ in Unix mode with scrolling region,
csr=\036FB%?%p1%t%p1%2.2X0%;%p2%p1%-%{1}%+%2.2X0%?%{23}%p2%>
%t000%;,
cud1@, cuu1@, ll@, use=d462+,
d413-unix|d463-unix|Data General DASHER D413/D463 series in DG-UNIX mode,
use=d412-unix,
d413-unix-w|d463-unix-w|Data General DASHER D413/D463 series in wide DG-UNIX mode,
use=d412-unix-w,
d413-unix-25|d463-unix-25|Data General DASHER D413/D463 series in DG-UNIX mode with 25 lines,
use=d412-unix-25,
d413-unix-s|d463-unix-s|Data General DASHER D413/D463 in DG-UNIX mode with status line,
use=d412-unix-s,
d413-unix-sr|d463-unix-sr|Data General DASHER D413/D463 in DG-UNIX mode with scrolling region,
use=d412-unix-sr,
d414-unix|d464-unix|Data General D414/D464 in DG-UNIX mode,
use=d413-unix,
d414-unix-w|d464-unix-w|Data General D414/D464 in wide DG-UNIX mode,
use=d413-unix-w,
d414-unix-25|d464-unix-25|Data General D414/D464 in DG-UNIX mode with 25 lines,
use=d413-unix-25,
d414-unix-s|d464-unix-s|Data General D414/D464 in DG-UNIX mode with status line,
use=d413-unix-s,
d414-unix-sr|d464-unix-sr|Data General D414/D464 in DG-UNIX mode with scrolling region,
use=d413-unix-sr,
d430c-dg|d430-dg|Data General D430C in DG mode,
use=d413-dg, use=dg+fixed,
d430c-dg-ccc|d430-dg-ccc|Data General D430C in DG mode with configurable colors,
use=d413-dg, use=dg+ccc,
d430c-unix|d430-unix|Data General D430C in DG-UNIX mode,
use=d413-unix, use=dgunix+fixed,
d430c-unix-w|d430-unix-w|Data General D430C in wide DG-UNIX mode,
use=d413-unix-w, use=dgunix+fixed,
d430c-unix-25|d430-unix-25|Data General D430C in DG-UNIX mode with 25 lines,
use=d413-unix-25, use=dgunix+fixed,
d430c-unix-s|d430-unix-s|Data General D430C in DG-UNIX mode with status line,
use=d413-unix-s, use=dgunix+fixed,
d430c-unix-sr|d430-unix-sr|Data General D430C in DG-UNIX mode with scrolling region,
use=d413-unix-sr, use=dgunix+fixed,
d430c-unix-ccc|d430-unix-ccc|Data General D430C in DG-UNIX mode with configurable colors,
use=d413-unix, use=dgunix+ccc,
d430c-unix-w-ccc|d430-unix-w-ccc|Data General D430C in wide DG-UNIX mode with configurable colors,
use=d413-unix-w, use=dgunix+ccc,
d430c-unix-25-ccc|d430-unix-25-ccc|Data General D430C in DG-UNIX mode with 25 lines and configurable colors,
use=d413-unix-25, use=dgunix+ccc,
d430c-unix-s-ccc|d430-unix-s-ccc|Data General D430C in DG-UNIX mode with status line and configurable colors,
use=d413-unix-s, use=dgunix+ccc,
d430c-unix-sr-ccc|d430-unix-sr-ccc|Data General D430C in DG-UNIX mode with scrolling region and configurable colors,
use=d413-unix-sr, use=dgunix+ccc,
# DASHER D470C color terminal in ANSI mode.
# Like the D460 but with 16 colors and without a compressed mode.
#
# Initialization string 1 sets:
# \E[<0;<1;<2;<4l
# <0 - scrolling enabled
# <1 - blink enabled
# <2 - horizontal scrolling enabled (for alignment)
# <4 - print characters regardless of attributes
# \E[1;1;80w - margins at columns 1 and 80
# \E[1;6;<2h
# 1 - print all characters even if protected
# 6 - character protection disabled
# <2 - horizontal scrolling disabled
# - (should reset scrolling regions, but that glitches the screen)
#
d470c|d470|Data General DASHER D470C,
is1=\E[<0;<1;<2;<4l\E[1;1;80w\E[1;6;<2h,
sgr=\E[%?%p3%t7;%;%?%p4%t5;%;%?%p2%t4;%;%?%p6%t4;7;%;%?%p1%t
2;7;%;%?%p5%t2;%;m\E)%?%p9%t6\016%e4\017%;,
use=dg+color, use=d460,
d470c-7b|d470-7b|Data General DASHER D470C in 7 bit mode,
is1=\E[<0;<1;<2;<4l\E[1;1;80w\E[1;6;<2h,
sgr=\E[%?%p3%t7;%;%?%p4%t5;%;%?%p2%t4;%;%?%p6%t4;7;%;%?%p1%t
2;7;%;%?%p5%t2;%;m%?%p9%t\016%e\017%;,
use=dg+color, use=d460-7b,
# Initialization string 2 sets:
# ^^FQ2 - default cursor (solid rectangle)
# ^^FW - character protection disabled
# ^^F\^ - horizontal scrolling enabled (for alignment)
# ^^FX004? - margins at columns 0 and 79
# ^^F] - horizontal scrolling disabled
# ^^O - primary character set
# ^^FS00 - default character set (the keyboard native language)
# - (should reset scrolling regions, but that glitches the screen)
#
d470c-dg|d470-dg|Data General DASHER D470C in DG mode,
is2=\036FQ2\036FW\036F\^\036FX004?\036F]\036O
\036FS00,
use=dgmode+color, use=d460-dg,
# DASHER D555 terminal in ANSI mode.
# Like a D411, but has an integrated phone.
d555|Data General DASHER D555,
use=d411,
d555-7b|Data General DASHER D555 in 7-bit mode,
use=d411-7b,
d555-w|Data General DASHER D555 in wide mode,
use=d411-w,
d555-7b-w|Data General DASHER D555 in wide 7-bit mode,
use=d411-7b-w,
d555-dg|Data General DASHER D555 series in DG mode,
use=d411-dg,
# DASHER D577 terminal in ANSI mode.
# Like a D411, but acts as a keyboard for serial printers ("KSR" modes).
d577|Data General DASHER D577,
use=d411,
d577-7b|Data General DASHER D577 in 7-bit mode,
use=d411-7b,
d577-w|Data General DASHER D577 in wide mode,
use=d411-w,
d577-7b-w|Data General DASHER D577 in wide 7-bit mode,
use=d411-7b-w,
d577-dg|d578-dg|Data General DASHER D577/D578 series in DG mode,
use=d411-dg,
# DASHER D578 terminal.
# Like a D577, but without compressed mode; like a D470C in this respect.
#
# Initialization string 1 sets:
# \E[<0;<1;<2;<4l
# <0 - scrolling enabled
# <1 - blink enabled
# <2 - horizontal scrolling enabled (for alignment)
# <4 - print characters regardless of attributes
# \E[1;1;80w - margins at columns 1 and 80
# \E[1;6;<2h
# 1 - print all characters even if protected
# 6 - character protection disabled
# <2 - horizontal scrolling disabled
# - (should reset scrolling regions, but that glitches the screen)
#
d578|Data General DASHER D578,
is1=\E[<0;<1;<2;<4l\E[1;1;80w\E[1;6;<2h, use=d577,
d578-7b|Data General DASHER D578 in 7-bit mode,
is1=\E[<0;<1;<2;<4l\E[1;1;80w\E[1;6;<2h, use=d577-7b,
#### Datamedia (dm)
#
# Datamedia was headquartered in Nashua, New Hampshire until it went
# out of business in 1993, but the ID plates on the terminals referred
# to the factory in Pennsauken, NJ. The factory was sold to a PCB board
# manufacturer which threw out all information about the terminals.
#
cs10|colorscan|Datamedia Color Scan 10,
msgr,
cols#80, lines#24,
bel=^G, clear=\E[H\E[J, cr=\r, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%02d;%p2%02dH, cuu1=\E[A, ed=\E[J, el=\E[K,
ind=\n, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, rmso=\E[m, rmul=\E[m,
sgr0=\E[m, smso=\E[7m, smul=\E[4m,
cs10-w|Datamedia Color Scan 10 with 132 columns,
cols#132,
cup=\E[%i%p1%02d;%p2%03dH, use=cs10,
# (dm1520: removed obsolete ":ma=^\ ^_^P^YH:" -- esr)
dm1520|dm1521|datamedia 1520,
OTbs, am, xenl,
cols#80, it#8, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=^\,
cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^],
home=^Y, ht=^I, ind=\n, kcub1=^H, kcud1=\n, kcuf1=^\, kcuu1=^_,
khome=^Y,
# dm2500: this terminal has both <ich> and <smir>. Applications using
# termcap/terminfo directly (rather than through ncurses) might be confused.
dm2500|datamedia2500|datamedia 2500,
OTbs, OTnc,
cols#80, lines#24,
bel=^G, clear=^^^^^?, cub1=^H, cud1=\n, cuf1=^\,
cup=\014%p2%{96}%^%c%p1%{96}%^%c, cuu1=^Z,
dch1=\020\010\030\035$<10*>,
dl1=\020\032\030\035$<10*>, el=^W, home=^B,
ich1=\020\034\030\035$<10*>,
il1=\020\n\030\035\030\035$<15>, ind=\n, pad=\377,
rmdc=^X^], rmir=\377\377\030\035$<10>, rmso=^X^],
smdc=^P, smir=^P, smso=^N,
# dmchat is like DM2500, but DOES need "all that padding" (jcm 1/31/82)
# also, has a meta-key.
# From: <goldberger@su-csli.arpa>
# (dmchat: ":MT:" changed to ":km:" -- esr)
dmchat|dmchat version of datamedia 2500,
km,
dl1=\020\032\030\035$<2/>,
il1=\020\n\030\035\030\035$<1*/>, use=dm2500,
# (dm3025: ":MT:" changed to ":km:" -- esr)
dm3025|datamedia 3025a,
OTbs, km,
cols#80, it#8, lines#24,
bel=^G, clear=\EM$<2>, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EY%p2%{32}%+%c%p1%{32}%+%c, cuu1=\EA,
dch1=\010$<6>, dl1=\EP\EA\EQ$<130>, ed=\EJ$<2>, el=\EK,
home=\EH, ht=^I, il1=\EP\n\EQ$<130>, ind=\n, ip=$<6>,
is2=\EQ\EU\EV, rmdc=\EQ, rmir=\EQ, rmso=\EO0, smdc=\EP,
smir=\EP, smso=\EO1,
dm3045|datamedia 3045a,
OTbs, am, eo, km@, ul, xenl,
dch1=\EB$<6>, dl1@, il1@, is2=\EU\EV, kcuf1=\EC, kcuu1=\EA,
kf0=\Ey\r, kf1=\Ep\r, kf2=\Eq\r, kf3=\Er\r, kf4=\Es\r,
kf5=\Et\r, kf6=\Eu\r, kf7=\Ev\r, kf8=\Ew\r, kf9=\Ex\r,
khome=\EH, pad=^?, rmdc@, rmir=\EP, rmso@, smdc@, smso@,
use=dm3025,
# Datamedia DT80 soft switches:
# 1 0=Jump 1=Smooth
# Autorepeat 0=off 1=on
# Screen 0=Dark 1=light
# Cursor 0=u/l 1=block
#
# 2 Margin Bell 0=off 1=on
# Keyclick 0=off 1=on
# ANSI/VT52 0=VT52 1=ANSI
# Xon/Xoff 0=Off 1=On
#
# 3 Shift3 0=Hash 1=UK Pound
# Wrap 0=Off 1=On
# Newline 0=Off 1=On
# Interlace 0=Off 1=On
#
# 4 Parity 0=Odd 1=Even
# Parity 0=Off 1=On
# Bits/Char 0=7 1=8
# Power 0=60Hz 1=50Hz
#
# 5 Line Interface 0=EIA 1=Loop
# Aux Interface 0=EIA 1=Loop
# Local Copy 0=Off 1=On
# Spare
#
# 6 Aux Parity 0=Odd 1=Even
# Aux Parity 0=Off 1=On
# Aux Bits/Char 0=7 1=8
# CRT Saver 0=Off 1=On
# dm80/1 is a vt100 lookalike, but it doesn't seem to need any padding.
dm80|dmdt80|dt80|datamedia dt80/1,
clear=\E[2J\E[H, cud1=\n, cuf1=\E[C,
cup=%i\E[%p1%d;%p2%dH, cuu1=\E[A, ed=\E[J, el=\E[K,
home=\E[H, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, ri=\EM,
rmso=\E[m, rmul=\E[m, sgr0=\E[m\017$<2>, smso=\E[7m,
smul=\E[4m, use=vt100+4bsd,
# except in 132 column mode, where it needs a little padding.
# This is still less padding than the vt100, and you can always turn on
# the ^S/^Q handshaking, so you can use vt100 flavors for things like
# reverse video.
dm80w|dmdt80w|dt80w|datamedia dt80/1 in 132 char mode,
cols#132,
clear=\E[H\E[2J$<50/>, cud1=\n,
cup=\E[%i%p1%d;%p2%dH$<5/>, cuu1=\E[A$<5/>,
ed=\E[0J$<20/>, el=\E[0K$<20/>, use=dm80,
# From: Adam Thompson <athompso@pangea.ca> Sept 10 1995
dt80-sas|Datamedia DT803/DTX for SAS usage,
am, bw,
cols#80, lines#24,
acsc=``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~,
bel=^G, clear=^L, cr=\r,
csr=\E=%p1%{32}%+%c%{32}%c\E#1\E=%p2%{32}%+%c%{32}%c\E#2,
cub1=^H, cud1=\EB, cuf1=^\,
cup=\E=%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, dl1=\EM, ed=^K,
el=^], ff=^L, home=^Y, ht=^I, hts=\E'1, il1=\EL, ind=\EB,
is2=\E)0\E<\EP\E'0\E$2, kclr=^L, kcub1=^H, kcud1=\n,
kcuf1=^\, kcuu1=^_, ked=^K, kel=^], khome=^Y, mc4=^O, mc5=^N,
rev=\E$2\004, ri=\EI, rmacs=\EG, rmso=^X, sgr0=^X, smacs=\EF,
smso=\E$2\004, tbc=\E'0,
# Datamedia Excel 62, 64 from Gould/SEL UTX/32 via BRL
# These aren't end-all Excel termcaps; but do insert/delete char/line
# and name some of the extra function keys. (Mike Feldman ccvaxa!feldman)
# The naming convention has been bent somewhat, with the use of E? (where
# E is for 'Excel') as # a name. This was done to distinguish the entries
# from the other Datamedias in use here, and yet to associate a model of
# the Excel terminals with the regular datamedia terminals that share
# major characteristics.
excel62|excel64|datamedia Excel 62,
dch1=\E[P, kbs=^H, kcub1=^H, kcud1=\n, kf5=\EOu, kf6=\EOv,
kf7=\EOw, kf8=\EOx, kf9=\EOy, rmir=\E[4l, smir=\E[4h,
use=dt80,
excel62-w|excel64-w|datamedia Excel 62 in 132 char mode,
dch1=\E[P, kbs=^H, kcub1=^H, kcud1=\n, kf5=\EOu, kf6=\EOv,
kf7=\EOw, kf8=\EOx, kf9=\EOy, rmir=\E[4l, smir=\E[4h,
use=dt80w,
excel62-rv|excel64-rv|datamedia Excel 62 in reverse video mode,
dch1=\E[P, flash=\E[?5l\E[?5h, kbs=^H, kcub1=^H, kcud1=\n,
kf5=\EOu, kf6=\EOv, kf7=\EOw, kf8=\EOx, kf9=\EOy, rmir=\E[4l,
smir=\E[4h, use=dt80,
#### Falco
#
# Falco Data Products
# 440 Potrero Avenue
# Sunnyvale, CA 940864-196
# Vox: (800)-325-2648
# Fax: (408)-745-7860
# Net: techsup@charm.sys.falco.com
#
# Current Falco models as of 1995 are generally ANSI-compatible and support
# emulations of DEC VT-series, Wyse, and Televideo types.
#
# Test version for Falco ts-1. See <arpavax.hickman@ucb> for info
# This terminal was released around 1983 and was discontinued long ago.
# The standout and underline highlights are the same.
falco|ts1|ts-1|falco ts-1,
OTbs, am,
cols#80, it#8, lines#24,
bel=^G, clear=\E*, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, ed=\EY, el=\ET\EG0\010, home=^^, ht=^I, il1=\EE,
ind=\n, is2=\Eu\E3, kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K,
kf0=^A0\r, rmir=\Er, rmso=\Eg0, rmul=\Eg0, sgr0=\Eg0,
smir=\Eq, smso=\Eg1, smul=\Eg1,
falco-p|ts1p|ts-1p|falco ts-1 with paging option,
OTbs, am, da, db, mir, msgr, ul,
cols#80, it#8, lines#24,
bel=^G, cbt=\EI, clear=\E*, cr=\r, cub1=^H, cud1=\E[B,
cuf1=\E[C, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=\E[A,
dch1=\EW, dl1=\ER, ed=\EY, el=\ET\EG0\010\Eg0, ht=^I,
il1=\EE, ind=\n, is2=\EZ\E3\E_c, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, rmcup=\E_b, rmir=\Er,
rmso=\Eg0, rmul=\Eg0, sgr0=\Eg0, smcup=\E_d, smir=\Eq,
smso=\Eg4, smul=\Eg1,
# (ts100: I added <rmam>/<smam> based on the init string -- esr)
ts100|ts100-sp|falco ts100-sp,
am, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, vt#3,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>,
clear=\E[H\E[J$<50>, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C$<2>,
cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA,
cuu1=\E[A$<2>, dch1=\E~W, dl1=\E~R, ed=\E[J$<50>,
el=\E[K$<3>, el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H,
ht=^I, hts=\EH, ich1=\E~Q, il1=\E~E, ind=\n, is1=\E~)\E~ea,
kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
rc=\E8, rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O, rmam=\E[?7l,
rmkx=\E[?1l\E>, rmso=\E[m$<2>, rmul=\E[m$<2>,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;m%?%p9%t\016%e\017%;$<2>,
sgr0=\E[m\017$<2>, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=,
smso=\E[1;7m$<2>, smul=\E[4m$<2>, tbc=\E[3g,
use=vt100+fnkeys,
ts100-ctxt|falco ts-100 saving context,
rmcup=\E~_b, smcup=\E~_d\E[2J, use=ts100,
#### Florida Computer Graphics
#
# Florida Computer Graphics Beacon System, using terminal emulator program
# "host.com", as provided by FCG. This description is for an early release
# of the "host" program. Known bug: <ed> clears the whole screen, so it's
# commented out.
# From: David Bryant <cbosg!djb> 1/7/83
beacon|FCG Beacon System,
am, da, db,
cols#80, lines#32,
bel=\ESTART\r\E37\r\EEND\r$<1>,
blink=\ESTART\r\E61\,1\r\EEND\r, clear=\EZ$<10>, cr=\r,
cub1=^H, cud1=\n, cuf1=\EV,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<20>, cuu1=\EU,
dch1=\EW, dl1=\ER, el=\ET, home=\EH$<10>, ich1=\EQ, il1=\EE,
ind=\n, rev=\ESTART\r\E59\,1\r\EEND\r, rmcup=,
rmso=\ESTART\r\E70\,0\r\EEND\r$<20>,
rmul=\ESTART\r\E60\,0\r\EEND\r,
sgr0=\ESTART\r\E78\r\E70\,0\r\EEND\r$<20>,
smcup=\ESTART\r\E2\,0\r\E12\r\EEND\r$<10>,
smso=\ESTART\r\E70\,6\r\EEND\r$<20>,
smul=\ESTART\r\E60\,1\r\EEND\r,
#### Fluke
#
# The f1720a differences from ANSI: no auto margin, destructive
# tabs, # of lines, funny highlighting and underlining
f1720|f1720a|fluke 1720A,
xt,
cols#80, lines#16, xmc#1,
bel=^G, clear=\E[H\E[2J, cr=\r, cub1=^H, cud1=\E[B,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, ed=\E[J,
el=\E[K, ind=\ED, is2=\E[H\E[2J, kcub1=^_, kcud1=^],
kcuf1=^^, kcuu1=^\, ri=\EM, rmso=\E[m, rmul=\E[m, sgr0=\E[m,
smso=\E[7m, smul=\E[4m,
#### Liberty Electronics (Freedom)
#
# Liberty Electronics
# 48089 Fremont Blvd
# Fremont CA 94538
# Vox: (510)-623-6000
# Fax: (510)-623-7021
# From: <faletti@berkeley.edu>
# (f100: added empty <acsc> to suppress a tic warning;
# made this relative to adm+sgr -- note that <invis> isn't
# known to work for f100 but does on the f110. --esr)
f100|freedom|freedom100|freedom model 100,
OTbs, am, bw, hs, mir, msgr, xon,
cols#80, lines#24,
acsc=, bel=^G, cbt=\EI, clear=^Z, cr=\r, cub1=^H, cud1=\n,
cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
dch1=\EW, dl1=\ER$<11.5*>, dsl=\Eg\Ef\r, ed=\EY, el=\ET,
flash=\Eb$<200>\Ed, fsl=\r, home=^^, hpa=\E]%p1%{32}%+%c,
ht=^I, hts=\E1, il1=\EE$<8.5*>, ind=\n, ip=$<6>,
is2=\Eg\Ef\r\Ed, kbs=^H, kcbt=\EI, kcub1=^H, kcud1=^V,
kcuf1=^L, kcuu1=^K, kf1=^A@\r, kf10=^AI\r, kf2=^AA\r,
kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r,
kf8=^AG\r, kf9=^AH\r, khome=^^, ri=\Ej, rmacs=\E$, rmir=\Er,
smacs=\E%%, smir=\Eq, tbc=\E3, tsl=\Eg\Ef,
vpa=\E[%p1%{32}%+%c, use=adm+sgr,
f100-rv|freedom-rv|freedom 100 in reverse video,
flash=\Ed$<200>\Eb, is2=\Eg\Ef\r\Eb, use=f100,
# The f110 and f200 have problems with vi(1). They use the ^V
# code for the down cursor key. When kcud1 is defined in terminfo
# as ^V, the Control Character Quoting capability (^V in insert mode)
# is lost! It cannot be remapped in vi because it is necessary to enter
# a ^V to to quote the ^V that is being remapped!!!
#
# f110/f200 users will have to decide whether
# to lose the down cursor key or the quoting capability. We will opt
# initially for leaving the quoting capability out, since use of VI
# is not generally applicable to most interactive applications
# (f110: added <ht>, <khome> & <kcbt> from f100 -- esr)
f110|freedom110|Liberty Freedom 110,
bw@, eslok,
it#8, wsl#80,
blink=\EG2, bold=\EG0, civis=\E.1, cnorm=\E.2, cud1=^V,
dim=\EG@, dl1=\ER, dsl=\Ef\r, flash=\Eb$<200/>\Ed, il1=\EE,
ip@, is2@, kclr=^^, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET,
kf0=^AI\r, kf10@, kich1=\EQ, kil1=\EE, mc4=\Ea, mc5=\E`,
ri=\EJ, rmacs=\E%%, rmir=\Er\EO, smacs=\E$, smir=\EO\Eq,
smso=\EG<, tsl=\Ef, use=f100,
f110-14|Liberty Freedom 110 14inch,
dch1@, use=f110,
f110-w|Liberty Freedom 110 - 132 cols,
cols#132, use=f110,
f110-14w|Liberty Freedom 110 14in/132 cols,
cols#132,
dch1@, use=f110,
# (f200: added <acsc> to suppress tic warnings re <smacs>/<rmacs> --esr)
f200|freedom200|Liberty Freedom 200,
OTbs, am, eslok, hs, mir, msgr, xon,
cols#80, it#8, lines#24, wsl#80,
acsc=, bel=^G, blink=\EG2, bold=\EG0, cbt=\EI, civis=\E.0,
clear=^Z, cnorm=\E.1, cr=\r,
csr=\Em0%p1%{32}%+%c%p2%{32}%+%c, cub1=^H, cud1=^V,
cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
dch1=\EW, dim=\EG@, dl1=\ER, dsl=\Ef\r, ed=\EY, el=\ET,
flash=\Eo$<200/>\En, fsl=\r, home=^^,
hpa=\E]%p1%{32}%+%c, hts=\E1, il1=\EE, ind=\n, kbs=^H,
kclr=^^, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW,
kdl1=\ER, ked=\EY, kel=\ET, kf0=^AI\r, kf1=^A@\r, kf2=^AA\r,
kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r,
kf8=^AG\r, kf9=^AH\r, kich1=\EQ, kil1=\EE, mc4=\Ea, mc5=\E`,
ri=\EJ, rmacs=\E%%, rmir=\Er, smacs=\E$, smir=\Eq, smso=\EG<,
tbc=\E3, tsl=\Ef, vpa=\E[%p1%{32}%+%c, use=adm+sgr,
f200-w|Liberty Freedom 200 - 132 cols,
cols#132, use=f200,
# The f200 has the ability to reprogram the down cursor key. The key is
# reprogrammed to ^J (linefeed). This value is remembered in non-volatile RAM,
# so powering the terminal off and on will not cause the change to be lost.
f200vi|Liberty Freedom 200 for vi,
flash=\Eb$<200/>\Ed, kcud1=\n, use=f200,
f200vi-w|Liberty Freedom 200 - 132 cols for vi,
cols#132, use=f200vi,
#### GraphOn (go)
#
# Graphon Corporation
# 544 Division Street
# Campbell, CA 95008
# Vox: (408)-370-4080
# Fax: (408)-370-5047
# Net: troy@graphon.com (Troy Morrison)
#
#
# The go140 and go225 have been discontinued. GraphOn now makes X terminals,
# including one odd hybrid that starts out life on power-up as a character
# terminal, than can be switched to X graphics mode (driven over the serial
# line) by an escape sequence. No info on this beast yet.
# (go140: I added <rmam>/<smam> based on the init string -- esr)
go140|graphon go-140,
OTbs,
cols#80, it#8, lines#24,
clear=\E[H\E[2J$<10/>, cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M,
ed=\E[J$<10/>, el=\E[K, ht=^I,
if=/usr/share/tabset/vt100, il1=\E[L,
is2=\E<\E=\E[?3l\E[?7l\E(B\E[J\E7\E[;r\E8\E[m\E[q,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP,
kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H, ri=\EM,
rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m,
rmul=\E[m, sgr0=\E[m, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,
go140w|graphon go-140 in 132 column mode,
am,
cols#132,
is2=\E<\E=\E[?3h\E[?7h\E(B\E[J\E7\E[;r\E8\E[m\E[q,
use=go140,
# Hacked up vt200 termcap to handle GO-225/VT220
# From: <edm@nwnexus.WA.COM>
# (go225: I added <rmam>/<smam> based on the init string -- esr)
go225|go-225|Graphon 225,
OTbs, am, mir, xenl,
cols#80, it#8, lines#25, vt#3,
blink=\E[5m, bold=\E[1m, clear=\E[H\E[J,
csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M,
ed=\E[J, el=\E[K, home=\E[H, ht=^I, il1=\E[L, ind=\ED,
is2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, kbs=^H,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP,
kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H, rc=\E8, rev=\E[7m,
rf=/usr/share/tabset/vt100, ri=\EM, rmam=\E[?7l,
rmcup=\E[!p\E[?7h\E[2;1;1#w, rmir=\E[4l, rmkx=\E>,
rmso=\E[27m, rmul=\E[24m, rs1=\E[!p\E[?7h\E[2;1;1#w,
sc=\E7, sgr0=\E[m, smam=\E[?7h, smcup=\E[2;0#w\E[1;25r,
smir=\E[4h, smkx=\E=, smso=\E[7m, smul=\E[4m,
#### Harris (Beehive)
#
# Bletch. These guys shared the Terminal Brain Damage laurels with Hazeltine.
# Their terminal group is ancient history now (1995) though the parent
# company is still in business.
#
# Beehive documentation is undated and marked Preliminary and has no figures
# so we must have early Superbee2 (Model 600, according to phone conversation
# with mfr.). It has proved reliable except for some missing padding
# (notably after \EK and <nl> at bottom of screen).
#
# The key idea is that AEP mode is poison for <cup> & that US's in
# the local memory should be avoided like the plague. That means
# that the 2048 character local buffer is used as 25 lines of 80
# characters, period. No scrolling local memory, folks. It also
# appears that we cannot use naked INS LINE feature since it uses
# US. The sbi fakes <il1> with an 80-space insert that may be too
# slow at low speeds; also spaces get converted to \040 which is
# too long for some programs (not vi). DEL LINE is ok but slow.
#
# The <nl> string is designed for last line of screen ONLY; cup to
# 25th line corrects the motion inherent in scrolling to Page 1.
#
# There is one understood bug. It is that the screen appears to
# pop to a new (blank) page after a <nel>, or leave a half-line
# ellipsis to a quad that is the extra 48 memory locations. The
# data received is dumped into memory but not displayed. Not to
# worry if <cup> is being used; the lines not displayed will be,
# whenever the cursor is moved up there. Since <cup> is addressed
# relative to MEMORY of window, nothing is lost; but beware of
# relative cursor motion (<cuu1>,<cud1>,<cuf1>,<cub1>). Recommended,
# therefore, is setenv MORE -c .
#
# WARNING: Not all features tested.
#
# Timings are assembled from 3 sources. Some timings may reflect
# SB2/Model 300 that were used if more conservative.
# Tested on a Model 600 at 1200 and 9600 bd.
#
# The BACKSPACEkb option is cute. The NEWLINE key, so cleverly
# placed on the keyboard and useless because of AEP, is made
# into a backspace key. In use ESC must be pressed twice (to send)
# and sending ^C must be prefixed by ESC to avoid that weird
# transmit mode associated with ENTER key.
#
# IF TERMINAL EVER GOES CATATONIC with the cursor buzzing across
# the screen, then it has dropped into ENTER mode; hit
# RESET--ONLINE--!tset.
#
# As delivered this machine has a FATAL feature that will throw
# it into that strange transmit state (SPOW) if the space bar is
# hit after a CR is received, but before receiving a LF (or a
# few others).
#
# The circuits MUST be modified to eliminate the SPOW latch.
# This is done by strapping on chip A46 of the I/O board; cut
# the p.c. connection to Pin 5 and strap Pin 5 to Pin 8 of that
# chip. This mod has been checked out on a Mod 600 of Superbee II.
# With this modification absurdly high timings on cr are
# unnecessary.
#
# NOTE WELL that the rear panel switch should be set to CR/LF,
# not AEP!
#
sb1|beehive superbee,
OTbs, am, bw, da, db, mir, ul, xsb,
cols#80, lines#25, xmc#1,
bel=^G, cbt=\E`$<650>, clear=\EH$<1>\EJ$<3>, cr=$<1>\r,
cub1=^H, cud1=\n, cuf1=\EC$<3>, cup=\EF%p2%03d%p1%03d,
cuu1=\EA$<3>, dch1=\EP$<3>, dl1=\EM$<100>, ed=\EJ$<3>,
el=\EK$<3>, home=\EH$<1>, ht=^I, hts=\E1,
il1=\EN\EL$<3>\EQ\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s
\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s
\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s
\s\s\s\s\s\EP$<3>\s\EO\ER\EA$<3>,
ind=\n, is2=\EE$<3>\EX\EZ\EO\Eb\Eg\ER, kbs=^_, kcub1=\ED,
kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdl1=\EM, ked=\EJ, kel=\EK,
kf0=\E2, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu,
kf7=\Ev, kf8=\Ew, kf9=\E1, khome=\EH, kich1=\EQ\EO,
krmir=\ER, lf0=TAB CLEAR, lf9=TAB SET, rmcup=, rmir=\ER,
rmso=\E_3, rmul=\E_3, sgr0=\E_3, smcup=\EO, smir=\EQ\EO,
smso=\E_1, smul=\E_0, tbc=\E3,
sbi|superbee|beehive superbee at Indiana U.,
xsb,
cr=\r$<1>, il1=\EN$<1>\EL$<9>\EQ \EP$<9> \EO\ER\EA,
use=sb1,
# Alternate (older) description of Superbee - f1=escape, f2=^C.
# Note: there are at least 3 kinds of superbees in the world. The sb1
# holds onto escapes and botches ^C's. The sb2 is the best of the 3.
# The sb3 puts garbage on the bottom of the screen when you scroll with
# the switch in the back set to CRLF instead of AEP. This description
# is tested on the sb2 but should work on all with either switch setting.
# The f1/f2 business is for the sb1 and the <xsb> can be taken out for
# the other two if you want to try to hit that tiny escape key.
# This description is tricky: being able to use cup depends on there being
# 2048 bytes of memory and the hairy <nl> string.
superbee-xsb|beehive super bee,
am, da, db, xsb,
cols#80, it#8, lines#25,
clear=\EH\EJ$<3>, cnorm=\n, cr=\r$<1000>, cub1=^H, cud1=\n,
cuf1=\EC, cup=\EF%p2%3d%p1%3d, cuu1=\EA$<3>,
dch1=\EP$<3>, dl1=\EM$<100>, ed=\EJ$<3>, el=\EK$<3>,
home=\EH, ht=^I, hts=\E1,
ind=\n\0\0\0\n\0\0\0\EA\EK\0\0\0\ET\ET, is2=\EH\EJ,
kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf1=\Ep, kf2=\Eq,
kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew,
khome=\EH, rmso=\E_3, sgr0=\E_3, smso=\E_1, tbc=\E3,
# This loses on lines > 80 chars long, use at your own risk
superbeeic|super bee with insert char,
ich1=, rmir=\ER, smir=\EQ, use=superbee-xsb,
sb2|sb3|fixed superbee,
xsb@, use=superbee,
#### Beehive Medical Electronics
#
# Steve Seymour <srseymour@mindspring.com> writes (Wed, 03 Feb 1999):
# Regarding your question though; Beehive terminals weren't made by Harris.
# They were made by Beehive Medical Electronics in Utah. They went out of
# business in the early '80s.
#
# (OK, then, I don't know why a couple of these say "harris beehive".)
#
# Reports are that most of these Beehive entries (except superbee) have not
# been tested and do not work right. <rmso> is a trouble spot. Be warned.
# (bee: <ich1> was empty, which is obviously bogus -- esr)
beehive|bee|harris beehive,
OTbs, am, mir,
cols#80, lines#24,
cbt=\E>, clear=\EE, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EF%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EP,
dl1=\EM, ed=\EJ, el=\EK, home=\EH, il1=\EL, kbs=^H, kcbt=\E>,
kclr=\EE, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA,
kdch1=\EP, kdl1=\EM, kel=\EK, khome=\EH, kich1=\EQ, kil1=\EL,
krmir=\E@, rmir=\E@, rmso=\Ed@, rmul=\Ed@, sgr0=\Ed@,
smir=\EQ, smso=\EdP, smul=\Ed`,
# set tab is ^F, clear (one) tab is ^V, no way to clear all tabs.
# good grief - does this entry make :sg:/:ug: when it doesn't have to?
# look at those spaces in <rmso>/<smso>. Seems strange to me...
# (beehive: <if=/usr/share/tabset/beehive> removed, no such file. If you
# really care, cook up one using ^F -- esr)
beehive3|bh3m|beehiveIIIm|harris beehive 3m,
OTbs, am,
cols#80, it#8, lines#20,
bel=^G, clear=^E^R, cr=\r, cub1=^H, cud1=\n, cuf1=^L, cuu1=^K,
dl1=\021$<350>, ed=^R, el=^P, home=^E, ht=^I, hts=^F,
il1=\023$<160>, ind=\n, ll=^E^K, rmso=\s^_, smso=^]\s,
beehive4|bh4|beehive 4,
am,
cols#80, lines#24,
bel=^G, clear=\EE, cr=\r, cub1=\ED, cud1=\n, cuf1=\EC,
cuu1=\EA, ed=\EJ, el=\EK, home=\EH, ind=\n,
# There was an early Australian kit-built computer called a "Microbee".
# It's not clear whether this is for one of those or for a relative
# of the Beehive.
microb|microbee|micro bee series,
OTbs, am,
cols#80, it#8, lines#24,
bel=^G, clear=\EE, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EF%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ,
el=\EK, ht=^I, ind=\n, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et,
kf6=\Eu, kf7=\Ev, kf8=\Ew, kf9=\Ex, khome=\EH, rmso=\Ed@,
rmul=\Ed@, sgr0=\Ed@, smso=\s\EdP, smul=\Ed`,
# 8675, 8686, and bee from Cyrus Rahman
# (8675: changed k10, k11...k16 to k;, F1...F6 -- esr)
ha8675|harris 8675,
is2=\ES\E#\E*\Eh\Em\E?\E1\E9\E@\EX\EU, kf1=^F,
kf10=\Ed, kf11=^W, kf12=\ER, kf13=\EE, kf14=\EI, kf15=\Ei,
kf16=\Eg, kf2=^P, kf3=^N, kf4=^V, kf5=\n, kf6=^T, kf7=^H, kf8=^?,
kf9=\Ee, use=bee,
# (8686: changed k10, k11...k16 to k;, F1...F6; fixed broken continuation
# in :is: -- esr)
ha8686|harris 8686,
is2=\ES\E#\E*\Eh\Em\E?\E1\E9\E@\EX\EU\E"*Z01\E"8F35021B7C83#
\E"8F45021B7D83#\E"8F55021B7E83#\E"8F65021B7F83#\E"8F750
21B7383#\E"8F851BD7#\E"8F95021B7083#\E"8FA5021B7183#\E"8
FB5021B7283#,
kf1=^B\Ep^C, kf10=\Ej, kf11=\EW, kf12=^B\E{^C,
kf13=^B\E|^C, kf14=^B\E}^C, kf15=^B\E~^C, kf16=^B\E^?^C,
kf2=^B\Eq^C, kf3=^B\Er^C, kf4=^B\Es^C, kf5=\E3, kf6=\EI,
kf7=\ER, kf8=\EJ, kf9=\E(, use=bee,
#### Hazeltine
#
# Hazeltine appears to be out of the terminal business as of 1995. These
# guys were co-owners of the Terminal Brain Damage Hall Of Fame along with
# Harris. They have a hazeltine.com domain (but no web page there ) and can
# be reached at:
#
# Hazeltine
# 450 East Pulaski Road
# Greenlawn, New York 11740
#
# As late as 1993, manuals for the terminal product line could still be
# purchased from:
#
# TRW Customer Service Division
# 15 Law Drive
# P.O. Box 2076
# Fairfield, NJ 07007-2078
#
# They're now (1998) a subsidiary of General Electric, operating under the
# marque "GEC-Marconi Hazeltine" and doing military avionics. Web page
# at <http://www.gec.com/cpd/1ncpd.htm#1.55>.
#
# Since <cuf1> is blank, when you want to erase something you
# are out of luck. You will have to do ^L's a lot to
# redraw the screen. h1000 is untested. It doesn't work in
# vi - this terminal is too dumb for even vi. (The code is
# there but it isn't debugged for this case.)
hz1000|hazeltine 1000,
OTbs,
cols#80, lines#12,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=\s, home=^K,
ind=\n,
# From: <cbosg!ucbvax!pur-ee!cincy!chris> Thu Aug 20 09:09:18 1981
hz1420|hazeltine 1420,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=\E^\, cr=\r, cub1=^H, cud1=\n, cuf1=^P,
cup=\E\021%p2%c%p1%{32}%+%c, cuu1=\E^L, dl1=\E^S,
ed=\E^X, el=\E^O, ht=^N, il1=\E^Z, ind=\n, rmso=\E^Y,
smso=\E^_,
# New "safe" cursor movement (11/87) from <cgs@umd5.umd.edu>. Prevents
# freakout with out-of-range args and tn3270. No hz since it needs to
# receive tildes.
hz1500|hazeltine 1500,
OTbs, am, hz,
cols#80, lines#24,
bel=^G, clear=~^\, cr=\r, cub1=^H, cud1=~^K, cuf1=^P,
cup=~\021%p2%p2%?%{30}%>%t%{32}%+%;%{96}%+%c%p1%{96}%+%c,
cuu1=~^L, dl1=~\023$<40>, ed=~\030$<10>, el=~^O, home=~^R,
il1=~\032$<40>, ind=\n, kcub1=^H, kcud1=\n, kcuf1=^P,
kcuu1=~^L, khome=~^R, rmso=~^Y, smso=~^_,
# h1510 assumed to be in sane escape mode. Else use h1500.
# (h1510: early versions of this entry apparently had "<rmso=\E^_>,
# <smso=\E^Y>, but these caps were commented out in 8.3; also,
# removed incorrect and overridden ":do=^J:" -- esr)
hz1510|hazeltine 1510,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=\E^\, cr=\r, cub1=^H, cud1=\E^K, cuf1=^P,
cup=\E\021%p2%c%p1%c, cuu1=\E^L, dl1=\E^S, ed=\E^X,
el=\E^O, il1=\E^Z, ind=\n,
# Hazeltine 1520
# The following switch settings are assumed for normal operation:
# FULL CR U/L_CASE ESCAPE
# FORMAT_OFF EOM_A_OFF EOM_B_OFF WRAPAROUND_ON
# Other switches may be set for operator convenience or communication
# requirements.
hz1520|Hazeltine 1520,
OTbs, am, bw, msgr,
cols#80, lines#24,
bel=^G, bold=\E^_, clear=\E^\, cr=\r, cub1=^H, cud1=\n,
cuf1=^P, cup=\E\021%p2%c%p1%c, cuu1=\E^L, dl1=\E^S,
ed=\E^X, el=\E^O, home=\E^R, il1=\E^Z, ind=\n, kbs=^H,
kclr=\E^\, kcub1=^H, kcud1=\E^K, kcuf1=^P, kcuu1=\E^L,
kdl1=\E^S, ked=\E^X, kel=\E^O, khome=\E^R, kil1=\E^Z,
rmso=\E^Y, rs1=\E$\E\005\E?\E\031, sgr0=\E^Y, smso=\E^_,
# This version works with the escape switch off
# (h1520: removed incorrect and overridden ":do=^J:" -- esr)
hz1520-noesc|hazeltine 1520,
am, hz,
cols#80, lines#24,
bel=^G, clear=~^\, cr=\r, cub1=^H, cud1=~^K, cuf1=^P,
cup=~\021%p2%c%p1%c$<1>, cuu1=~^L, dl1=~^S, ed=~^X, el=~^O,
home=~^R, il1=~^Z, ind=\n, rmso=~^Y, smso=~^_,
# Note: the h1552 appears to be the first Hazeltine terminal which
# is not braindamaged. It has tildes and backprimes and everything!
# Be sure the auto lf/cr switch is set to cr.
hz1552|hazeltine 1552,
OTbs,
- cud1=\n, dl1=\EO, il1=\EE, kf1=\EP, kf2=\EQ, kf3=\ER, lf1=blue,
- lf2=red, lf3=green, use=vt52,
+ cud1=\n, dl1=\EO, il1=\EE, lf1=blue, lf2=red, lf3=green,
+ use=vt52,
hz1552-rv|hazeltine 1552 reverse video,
cud1=\n, rmso=\ET, smso=\ES, use=hz1552,
# Note: h2000 won't work well because of a clash between upper case and ~'s.
hz2000|hazeltine 2000,
OTbs, OTnc, am,
cols#74, lines#27,
bel=^G, clear=~\034$<6>, cub1=^H, cud1=\n,
cup=~\021%p2%c%p1%c, dl1=~\023$<6>, home=~^R,
il1=~\032$<6>, ind=\n, pad=^?,
# Date: Fri Jul 23 10:27:53 1982. Some unknown person wrote:
# I tested this termcap entry for the Hazeltine Esprit with vi. It seems
# to work ok. There is one problem though if one types a lot of garbage
# characters very fast vi seems not able to keep up and hangs while trying
# to insert. That's in insert mode while trying to insert in the middle of
# a line. It might be because the Esprit doesn't have insert char and delete
# char as a built in function. Vi has to delete to end of line and then
# redraw the rest of the line.
esprit|Hazeltine Esprit I,
OTbs, am, bw,
cols#80, lines#24,
bel=^G, cbt=\E^T, clear=\E^\, cr=\r, cub1=^H, cud1=\E^K,
cuf1=^P, cup=\E\021%p2%c%p1%c, cuu1=\E^L, dl1=\E^S,
ed=\E^W, el=\E^O, home=\E^R, il1=\E^Z, ind=\n, is2=\E?, kbs=^H,
kcub1=^H, kcud1=\E^K, kcuf1=^P, kcuu1=\E^L, kf0=^B0\n,
kf1=^B1\n, kf2=^B2\n, kf3=^B3\n, kf4=^B4\n, kf5=^B5\n,
kf6=^B6\n, kf7=^B7\n, kf8=^B8\n, kf9=^B9\n, khome=\E^R,
lf0=0, lf1=1, lf2=2, lf3=3, lf4=4, lf5=5, lf6=6, lf7=7, lf8=8, lf9=9,
rmkx=\E>, rmso=\E^Y, smkx=\E<, smso=\E^_,
esprit-am|hazeltine esprit auto-margin,
am, use=esprit,
# Hazeltine Modular-1 from Cliff Shackelton <ittvax!ittral!shackelt> via BRL
# Vi it seems always wants to send a control J for "do" and it turned out
# that the terminal would work somewhat if the auto LF/CR was turned off.
# (hmod1: removed :dn=~^K: -- esr)
hmod1|Hazeltine Modular 1,
OTbs, am, hz,
cols#80, lines#24,
bel=^G, cbt=~^T, clear=~^\, cr=\r, cub1=^H, cud1=~^K, cuf1=^P,
cup=~\021%p2%c%p1%c, cuu1=~^L, dl1=~^S, home=~^R, il1=~^Z,
ind=\n, kcub1=^H, kcud1=~^K, kcuf1=^P, kcuu1=~^L, khome=~^R,
rc=~^Q, rmso=~^Y, sc=~^E, sgr0=~^Y, smso=~^_,
#
# Hazeltine Executive 80 Model 30 (1554?)
# from Will Martin <control@ALMSA-1.ARPA> via BRL
# Like VT100, except for different "am" behavior.
hazel|exec80|h80|he80|Hazeltine Executive 80,
OTbs, OTpt, am,
cols#80, it#8, lines#24, vt#3,
OTnl=\n, bel=^G, blink=\E[5m$<2/>, bold=\E[1m$<2/>,
clear=\E[;H\E[2J$<50/>, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub1=^H, cud1=\n, cuf1=\E[C$<2/>,
cup=\E[%i%p1%d;%p2%dH$<5/>, cuu1=\E[A$<2/>,
ed=\E[J$<50/>, el=\E[K$<3/>, home=\E[H, ht=^I,
is2=\E[1;24r\E[24;1H, kbs=^H, kcub1=\EOD, kcud1=\EOB,
kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR,
kf4=\EOS, rc=\E8, rev=\E[7m$<2/>,
rf=/usr/share/tabset/vt100, ri=\EM$<5/>,
rmkx=\E[?1l\E>, rmso=\E[m$<2/>, rmul=\E[m$<2/>,
rs1=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
sgr0=\E[m$<2/>, smkx=\E[?1h\E=, smso=\E[7m$<2/>,
smul=\E[4m$<2/>,
#### IBM
#
ibm327x|line mode IBM 3270 style,
gn,
clear=\r\n, el=\r, home=\r,
ibm3101|i3101|IBM 3101-10,
OTbs, am, xon,
cols#80, lines#24,
bel=^G, clear=\EK, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ,
el=\EI, home=\EH, hts=\E0, ind=\n, kcub1=\ED, kcud1=\EB,
kcuf1=\EC, kcuu1=\EA, nel=\r\n, tbc=\EH,
ibm3151|IBM 3151 display,
is2=\E S, rmacs=\E>B, rmcup=\E>B, rs2=\E S, s0ds=\E>B,
sgr=\E4%{64}%?%p1%t%{65}%|%;%?%p2%t%{66}%|%;%?%p3%t%{65}%|%;
%?%p4%t%{68}%|%;%?%p5%t%{64}%|%;%?%p6%t%{72}%|%;%?%p7%t
%{80}%|%;%c%?%p9%t\E>A%e\E>B%;,
sgr0=\E4@\E>B, smacs=\E>A, smcup=\E>B, use=ibm3162,
# From: Mark Easter <marke@fsi-ssd.csg.ssd.fsi.com> 29 Oct 1992
# removed kend, knp, kpp -TD
#
# From: Stephen Powell <zlinuxman@wowway.com> 23 Apr 2015
# Added ich1 (kich1 without ich1 doesn't make sense).
# Added il1 (kil1 without il1 doesn't make sense).
# Added xon (terminal uses XON/XOFF flow control).
#
ibm3161|ibm3163|wy60-316X|wyse60-316X|IBM 3161/3163 display,
OTbs, am, mir, msgr, xon,
cols#80, it#8, lines#24,
acsc=j\352k\353l\354m\355n\356q\361t\364u\365v\366w\367x
\370,
bel=^G, blink=\E4D, bold=\E4H, clear=\EH\EJ, cr=\r, cub1=\ED,
cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c,
cuu1=\EA, dch1=\EQ, dl1=\EO, ed=\EJ, el=\EI, home=\EH,
ich1=\EP \010, il1=\EN, ind=\n, invis=\E4P, kbs=^H, kcbt=\E2,
kclr=\EL\r, kctab=\E1, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kdch1=\EQ, kdl1=\EO, ked=\EJ, kel=\EI, kf1=\Ea\r,
kf10=\Ej\r, kf11=\Ek\r, kf12=\El\r, kf13=\E!a\r,
kf14=\E!b\r, kf15=\E!c\r, kf16=\E!d\r, kf17=\E!e\r,
kf18=\E!f\r, kf19=\E!g\r, kf2=\Eb\r, kf20=\E!h\r,
kf21=\E!i\r, kf22=\E!j\r, kf23=\E!k\r, kf24=\E!l\r,
kf3=\Ec\r, kf4=\Ed\r, kf5=\Ee\r, kf6=\Ef\r, kf7=\Eg\r,
kf8=\Eh\r, kf9=\Ei\r, khome=\EH, khts=\E0, kich1=\EP \010,
kil1=\EN, ktbc=\E 1, mc4=^P^T, mc5=^P^R, rev=\E4A,
rmcup=\E>A, rmso=\E4@, rmul=\E4@,
sgr=\E4%{64}%?%p1%t%{65}%|%;%?%p2%t%{66}%|%;%?%p3%t%{65}%|%;
%?%p4%t%{68}%|%;%?%p5%t%{64}%|%;%?%p6%t%{72}%|%;%?%p7%t
%{80}%|%;%c%?%p9%t\E>A%e\E<@%;,
sgr0=\E4@\E<@, smcup=\E>A, smso=\E4A, smul=\E4B,
ibm3161-C|IBM 3161-C NLS terminal using cartridge,
rmcup=\E>B, s0ds=\E>B, s1ds=\E>A, smcup=\E>B, use=ibm3161,
#
# From: Stephen Powell <zlinuxman@wowway.com> 23 Apr 2015
# Deleted il1. (il1 will now be inherited from ibm3161-C, which inherits
# it from ibm3161.
#
ibm3162|IBM 3162 display,
blink=\E4$a, bold=\E4(a, invis=\E40a, rev=\E4!a,
rmso=\E4>b, rmul=\E4=b, sgr0=\E4@, smso=\E4!a, smul=\E4"a,
use=ibm3161-C,
# This really should not use setab/setaf, but it is clear that the
# original terminfo does not toggle red/blue colors as in setb/setf.
ibm3164|i3164|IBM 3164,
msgr,
colors#8, pairs#64,
op=\E4 "@, rmcup=\E!9(N\E>B, s0ds=\E>B, s1ds=\E>A,
setab=\E4 %p1%{64}%+%c,
setaf=\E4%?%p1%t %p1%{32}%+%c%e!'%;@,
smcup=\E!9/N\E>B, use=ibm3161,
ibm5151|wy60-AT|wyse60-AT|IBM 5151 Monochrome display,
am, bw, msgr, xon,
cols#80, it#8, lines#25,
acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x
\263,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H,
hpa=\E[%i%p1%dG, il=\E[%p1%dL, il1=\E[L, ind=\E[S,
invis=\E[8m, is2=\Ec, kbs=^H, kcbt=\E[Z, kclr=\E[144q,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P,
ked=\E[148q, kel=\E[142q, kend=\E[146q, kf1=\E[001q,
kf10=\E[010q, kf11=\E[011q, kf12=\E[012q, kf13=\E[013q,
kf14=\E[014q, kf15=\E[015q, kf16=\E[016q, kf17=\E[017q,
kf18=\E[018q, kf19=\E[019q, kf2=\E[002q, kf20=\E[020q,
kf21=\E[021q, kf22=\E[022q, kf23=\E[023q, kf24=\E[024q,
kf25=\E[025q, kf26=\E[026q, kf27=\E[027q, kf28=\E[028q,
kf29=\E[029q, kf3=\E[003q, kf30=\E[030q, kf31=\E[031q,
kf32=\E[032q, kf33=\E[033q, kf34=\E[034q, kf35=\E[035q,
kf36=\E[036q, kf4=\E[004q, kf5=\E[005q, kf6=\E[006q,
kf7=\E[007q, kf8=\E[008q, kf9=\E[009q, khome=\E[H,
kich1=\E[139q, kil1=\E[140q, kind=\E[151q, knp=\E[154q,
kpp=\E[150q, kri=\E[155q, krmir=\E[4l, rev=\E[7m, ri=\E[T,
rmir=\E[4l, rmso=\E[m, rmul=\E[m, rs2=\Ec,
sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1
%;%?%p7%t;8%;m,
sgr0=\E[0m, smir=\E[4h, smso=\E[7m, smul=\E[4m,
use=ecma+index,
ibmaed|IBM Experimental display,
OTbs, am, eo, msgr,
cols#80, it#8, lines#52,
clear=\EH\EK, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EQ,
dl1=\EO, ed=\EJ, el=\EI, flash=\EG, home=\EH, ht=^I, ich1=\EP,
il1=\EN, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA,
rmso=\E0, sgr0=\E0, smso=\E0,
ibm-apl|apl|IBM apl terminal simulator,
lines#25, use=dm1520,
# (ibmmono: this had an unknown `sb' boolean, I changed it to `bs'.
# Also it had ":I0=f10:" which pretty obviously should be "l0=f10" -- esr)
ibmmono|IBM workstation monochrome,
eslok, hs,
bold=\EZ, dl1=\EM, dsl=\Ej\EY8 \EI\Ek, fsl=\Ek, il1=\EL,
invis=\EF\Ef0;\Eb0;, kbs=^H, kf0=\E<, kf1=\ES, kf2=\ET,
kf3=\EU, kf4=\EV, kf5=\EW, kf6=\EP, kf7=\EQ, kf8=\ER, kf9=\EY,
khome=\EH, kich1=\0, kind=\EE, knp=\EE, kpp=\Eg, kri=\EG,
lf0=f10, rev=\Ep, ri=\EA, rmso=\Ez, rmul=\Ew,
sgr0=\Ew\Eq\Ez\EB, smso=\EZ, smul=\EW, tsl=\Ej\EY8%+ \Eo,
use=ibm3101,
ibmega|IBM Enhanced Color Display,
cr=\r, cud1=\n, ht=^I, ind=\n, kbs=^H, kcub1=^H, kcud1=\n,
nel=\r\n, use=ibmmono,
# This color scheme is assumed in some recent IBM terminal descriptions
# (green on black, emulated on a 16-color terminal).
ibm+color|IBM color definitions,
colors#8, ncv#3, pairs#64,
op=\E[32m\E[40m,
setb=\E[%?%p1%{0}%=%t40m%e%p1%{1}%=%t41m%e%p1%{2}%=%t42m%e
%p1%{3}%=%t43m%e%p1%{4}%=%t44m%e%p1%{5}%=%t45m%e%p1%{6}
%=%t46m%e%p1%{7}%=%t107m%;,
setf=\E[%?%p1%{0}%=%t30m%e%p1%{1}%=%t31m%e%p1%{2}%=%t32m%e
%p1%{3}%=%t33m%e%p1%{4}%=%t34m%e%p1%{5}%=%t35m%e%p1%{6}
%=%t36m%e%p1%{7}%=%t97m%;,
ibm+16color|IBM aixterm color definitions,
colors#16, pairs#0x100,
setab=\E[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm,
setaf=\E[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm,
setb=%p1%{8}%/%{6}%*%{4}%+\E[%d%p1%{8}%m%Pa%?%ga%{1}%=%t4%e
%ga%{3}%=%t6%e%ga%{4}%=%t1%e%ga%{6}%=%t3%e%ga%d%;m,
setf=%p1%{8}%/%{6}%*%{3}%+\E[%d%p1%{8}%m%Pa%?%ga%{1}%=%t4%e
%ga%{3}%=%t6%e%ga%{4}%=%t1%e%ga%{6}%=%t3%e%ga%d%;m,
ibm5154|IBM 5154 Color display,
colors#8, ncv@, pairs#64,
bold@, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ibm5151,
use=ibm+color,
ibmega-c|ibm5154-c|IBM Enhanced Color Display with standout and underline,
rmso=\EB, rmul=\EB, smso=\EF\Ef3;, smul=\EF\Ef2;,
use=ibmmono,
ibmvga-c|IBM VGA display color termcap,
cr=\r, cud1=\n, ht=^I, ind=\n, kbs=^H, kcub1=^H, kcud1=\n,
nel=\r\n, use=ibmega-c,
ibmvga|IBM VGA display,
cr=\r, cud1=\n, ht=^I, ind=\n, kbs=^H, kcub1=^H, kcud1=\n,
nel=\r\n, use=ibmega,
# ibmapa* and ibmmono entries come from ACIS 4.3 distribution
rtpc|ibmapa16|IBM 6155 Extended Monochrome Graphics Display,
lines#32,
dsl=\Ej\EY@ \EI\Ek, tsl=\Ej\EY@%+ \Eo, use=ibmmono,
ibm6155|IBM 6155 Black & White display,
blink@, bold@, use=ibm5151,
# Advanced Monochrome (6153) and Color (6154) Graphics Display:
ibmapa8c|ibmapa8|IBM 6154 Advanced Graphics Display,
lines#31,
dsl=\Ej\EY? \EI\Ek, tsl=\Ej\EY?%+ \Eo, use=ibmmono,
ibmapa8c-c|ibm6154-c|IBM 6154 Advanced Color Graphics Display,
lines#31,
dim=\EF\Ef7;, dsl=\Ej\EY? \EI\Ek, tsl=\Ej\EY?%+ \Eo,
use=ibmega-c,
ibm6154|IBM 6154 Color displays,
blink@, bold=\E[12m, s0ds=\E[10m, s1ds=\E[11m, s2ds=\E[12m,
- sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1
+ sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p7%t;8%;%?%p6%t;1
2%;m,
sgr0=\E[0;10m, use=ibm5154,
ibm6153|IBM 6153 Black & White display,
blink@, bold=\E[12m, s0ds=\E[10m, s1ds=\E[11m, s2ds=\E[12m,
- sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1
+ sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p7%t;8%;%?%p6%t;1
2%;m,
sgr0=\E[0;10m, use=ibm5151,
ibm6153-90|IBM 6153 Black & White display,
cols#90, lines#36,
blink@, bold@, use=ibm5151,
ibm6153-40|IBM 6153 Black & White display,
cols#40, lines#12, use=ibm6153-90,
ibm8512|ibm8513|IBM color VGA Terminal,
am, mir, msgr,
cols#80, it#8, lines#25,
acsc=jjkkllmmnnqqttuuvvwwxx, blink=\E[5m, bold=\E[1m,
clear=\E[H\E[J, cub1=\E[D, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dl=\E[%p1%dM, dl1=\E[M,
ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H, il=\E[%p1%dL,
il1=\E[L, is2=\Eb\E[m\017\E[?7h, kcud1=\E[B, kcuu1=\E[A,
kf0=\E[010q, kf1=\E[001q, kf2=\E[002q, kf3=\E[003q,
kf4=\E[004q, kf5=\E[005q, kf6=\E[006q, kf7=\E[007q,
kf8=\E[008q, kf9=\E[009q, khome=\E[H, rc=\E[u, rev=\E[7m,
rmacs=^O, rmam=\E[?7l, rmcup=\E[20h, rmdc=\E[4l,
rmir=\E[4l, rmso=\E[m, rmul=\E[m,
rs1=\Eb\E[m\017\E[?7h\E[H\E[J, sc=\E[s, sgr0=\E[m,
smacs=^N, smam=\E[?7h, smcup=\E[20;4l\E[?7h\Eb,
smdc=\E[4h, smir=\E[4h, smso=\E[7m, smul=\E[4m,
use=ibm8503,
hft-c|HFT with Color,
colors#8, pairs#64,
acsc=jjkkllmmnnqqttuuvvwwxx, s0ds=\E(B, s1ds=\E(0,
setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[0m\E(B,
use=ibm5151, use=ibm+color,
hft-c-old|HFT with Color PC850,
colors#8, pairs#64,
setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ibm5151,
use=ibm+color,
hft-old|AIWS High Function Terminal,
am, xon,
cols#80, lines#25,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
cub1=^H, cud1=\n, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H,
ht=^I, ich1=\E[@, il1=\E[L, ind=\n, invis=\E[8m, kbs=^H,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kf1=\E[001q, kf2=\E[002q, kf3=\E[003q, kf4=\E[004q,
kf5=\E[005q, kf6=\E[006q, kf7=\E[007q, kf8=\E[008q,
kf9=\E[009q, khome=\E[H, knp=\E[153q, kpp=\E[159q,
ktbc=\E[010q, rev=\E[7m, rmir=\E6, rmso=\E[m, rmul=\E[m,
sgr0=\E[m, smir=\E6, smso=\E[7m, smul=\E[4m, use=ibm+color,
ibm-system1|system1|ibm system/1 computer,
am, xt,
cols#80, lines#24,
bel=^G, clear=^Z, cub1=^H, cuf1=^\,
cup=\005%p1%{32}%+%c%p2%{32}%+%c, cuu1=^^, home=^K,
ind=\n,
# lft-pc850 : IBM Low Function Terminal Device
# lft "supports" underline, bold, and blink in the sense that the lft code
# sets all the right bits. HOWEVER, depending upon the adapter, these
# attributes may or may not be supported by the device driver.
lft|lft-pc850|LFT-PC850|IBM LFT PC850 Device,
am, bw, msgr, xon,
cols#80, it#8, lines#25,
acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x
\263,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
cr=\r, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[2J, el=\E[0K,
home=\E[H, hpa=\E[%i%p1%dG, ich=\E[%p1%d@, il=\E[%p1%dL,
il1=\E[L, ind=\ED, invis=\E[8m, is2=\Ec, kbs=^H, kcbt=\E[Z,
kclr=\E[144q, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kdch1=\E[P, ked=\E[148q, kel=\E[142q,
kend=\E[146q, kf1=\E[001q, kf10=\E[010q, kf11=\E[011q,
kf12=\E[012q, kf13=\E[013q, kf14=\E[014q, kf15=\E[015q,
kf16=\E[016q, kf17=\E[017q, kf18=\E[018q, kf19=\E[019q,
kf2=\E[002q, kf20=\E[020q, kf21=\E[021q, kf22=\E[022q,
kf23=\E[023q, kf24=\E[024q, kf25=\E[025q, kf26=\E[026q,
kf27=\E[027q, kf28=\E[028q, kf29=\E[029q, kf3=\E[003q,
kf30=\E[030q, kf31=\E[031q, kf32=\E[032q, kf33=\E[033q,
kf34=\E[034q, kf35=\E[035q, kf36=\E[036q, kf4=\E[004q,
kf5=\E[005q, kf6=\E[006q, kf7=\E[007q, kf8=\E[008q,
kf9=\E[009q, khome=\E[H, kich1=\E[139q, kil1=\E[140q,
kind=\E[151q, knp=\E[154q, kpp=\E[150q, kri=\E[155q,
krmir=\E[4l, rev=\E[7m, ri=\EL, rmacs=\E(B, rmir=\E[4l,
rmso=\E[0m, rmul=\E[0m, rs2=\Ec,
sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1
%;%?%p7%t;8%;m%?%p9%t\E(0%e\E(B%;,
sgr0=\E[0m, smacs=\E(0, smir=\E[4h, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, use=ecma+index,
# "Megapel" refers to the display adapter, which was used with the IBM RT
# aka IBM 6150.
ibm5081|hft|IBM Megapel Color display,
acsc=jjkkllmmnnqqttuuvvwwxx, blink@, bold@, s0ds=\E(B,
s1ds=\E(0, sgr0=\E[0m\E(B, use=ibm5154,
ibm5081-c|ibmmpel-c|IBM 5081 1024x1024 256/4096 Megapel enhanced color display,
eslok, hs,
lines#33,
dsl=\Ej\EYA \EI\Ek, fsl=\Ek, tsl=\Ej\EYA%+ \Eo,
use=ibmega-c,
ibm8503|ibm8507|ibm8604|IBM 8503 B & W VGA display,
use=hft-c,
ibm8514|IBM 8514/a color VGA display,
eslok, hs,
dsl=\Ej\EYI \EI\Ek, fsl=\Ek, tsl=\Ej\EYI%+ \Eo, use=hft,
ibm8514-c|IBM 8514 color display with standout and underline,
eslok, hs,
lines#41,
cr=\r, cud1=\n, dsl=\Ej\EYI \EI\Ek, fsl=\Ek, ht=^I, ind=\n,
kbs=^H, kcub1=^H, kcud1=\n, nel=\r\n, tsl=\Ej\EYI%+ \Eo,
use=ibmega-c,
#
# AIX entries. IBM ships these with AIX 3.2.5.
# -- added rc, sc based on manpage -TD
# -- added rmacs, smacs based on manpage -TD
# Note that we could use ibm+16color, but that is not how IBM defines this one.
aixterm|IBM Aixterm Terminal Emulator,
eslok, hs,
acsc=jjkkllmmnnqqttuuvvwwxx, bold=\E[1m, dsl=\E[?E,
fsl=\E[?F, rc=\E8, ri@, rmacs=\E(B, s0ds=\E(B, s1ds=\E(0,
sc=\E7,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p6%t;1%;%?%p7
%t;8%;m%?%p9%t\E(0%e\E(B%;,
sgr0=\E[0;10m\E(B, smacs=\E(0, tsl=\E[?%p1%dT,
use=ibm6154,
aixterm-m|IBM AIXterm Monochrome Terminal Emulator,
eslok, hs,
acsc=jjkkllmmnnqqttuuvvwwxx, bold=\E[1m, dsl=\E[?E,
fsl=\E[?F, ri@, s0ds=\E(B, s1ds=\E(0,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p6%t;1%;%?%p7
%t;8%;m%?%p9%t\E(0%e\E(B%;,
sgr0=\E[0;10m\E(B, tsl=\E[?%p1%dT, use=ibm6153,
aixterm-m-old|old IBM AIXterm Monochrome Terminal Emulator,
eslok, hs,
bold=\E[1m, dsl=\E[?E, fsl=\E[?F, ri@,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p6%t;1%;%?%p7
%t;8%;m,
tsl=\E[?%p1%dT, use=ibm6153,
jaixterm|IBM Kanji Aixterm Terminal Eemulator,
acsc@, rmacs@,
sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p6%t;1%;%?%p7%t;8
%;m,
sgr0=\E[m, smacs@, use=aixterm,
jaixterm-m|IBM Kanji AIXterm Monochrome Terminal Emulator,
acsc@, rmacs@,
sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p6%t;1%;%?%p7%t;8
%;m,
sgr0=\E[m, smacs@, use=aixterm-m,
# This flavor is adapted from xterm, in turn from aixterm documentation -TD
aixterm-16color|IBM Aixterm Terminal Emulator with 16 colors,
use=ibm+16color, use=aixterm,
#### Infoton/General Terminal Corp.
#
# gt100 sounds like something DEC would come out with. Let's hope they don't.
i100|gt100|gt100a|General Terminal 100A (formerly Infoton 100),
OTbs, am,
cols#80, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\Ef%p2%{32}%+%c%p1%{32}%+%c, cuu1=\EA, dl1=\EM,
ed=\EJ, el=\EK, flash=\Eb$<200/>\Ea, home=\EH, il1=\EL,
ind=\n, rmso=\Ea, smso=\Eb,
i400|infoton 400,
OTbs, am,
cols#80, lines#25,
bel=^G, clear=\E[2J, cr=\r, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%3d;%p2%3dH, cuu1=\E[A,
dch1=\E[4h\E[2Q\E[P\E[4l\E[0Q, dl1=\E[M, el=\E[N,
il1=\E[L, ind=\n, rmir=\E[4l\E[0Q, smir=\E[4h\E[2Q,
# (addrinfo: removed obsolete ":bc=^Z:" -- esr)
addrinfo,
am,
cols#80, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^Z, cud1=\n, cuf1=^Y,
cup=\037%p1%c%p2%c, cuu1=^\, ed=^K, home=^H, ind=\n, ll=^H^\,
# (infoton: used to have the no-ops <lh#0>, <lw#0>, <nlab#0> -- esr)
infoton,
am,
cols#80, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^Z, cud1=\n, cuf1=^Y, cuu1=^\,
ed=^K, ind=\n, ll=^H^\,
# The ICL6402 was actually the Kokusai Display System 6402.
# The 6404 was the KDS7372 (color version of the 6402).
#
# ICL6404 control codes follow:
#
#code function
#~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#ctrl-A set SOM position at cursor position
#ctrl-G Bell
#ctrl-H Backspace
#ctrl-I Horizontal tab
#ctrl-J Linefeed
#ctrl-K Cursor up
#ctrl-L Cursor right
#ctrl-M Carriage return
#ctrl-N Disable xon/xoff to host
#ctrl-O Enable xon/xoff to host
#ctrl-R Enable bidirectional mode
#ctrl-T Disable bidirectional mode
#ctrl-V Cursor down
#ctrl-Z Clear unprotected data to insert char
#ctrl-^ Cursor home
#ctrl-_ Newline
#
#ESC lead-in char for multiple character command
#
#ESC space R execute power on sequence
#ESC ! p1 p2 define scroll region:
# p1 = scroll top line: 20h - 37h
# p1 = scroll bottom line: 20h - 37h
#ESC " unlock keyboard
#ESC # lock keyboard
#ESC $ Semi-graphics mode on
#ESC % Semi-graphics mode off
#ESC & protect mode on
#ESC ' protect mode off
#ESC ( write protect mode off (full intensity)
#ESC ) write protect mode on (half intensity)
#
#ESC * clear screen
#ESC + clear unprotected data to insert char
#ESC , clear unprotected data to half intensity spaces
#ESC - p1 p2 p3 p4 address cursor to page, row, column:
# p1 = page number 0 - 3
# p2 = row 20h - 7fh
# p3 = column (lo) 20h - 7fh
# p4 = column (hi) 20h - 21h (only 132 col)
#ESC . p1 set cursor style:
# p1 = 0 invisible cursor
# p1 = 1 block blinking cursor
# p1 = 2 block steady cursor
# p1 = 3 underline blinking cursor
# p1 = 4 underline steady cursor
#ESC / transmit cursor location (page, row, column)
#ESC 0 p1 p2 p3 p4 program edit key:
# p1 = edit key code: '@'-'S', '`'-'s'
# p2 p3 p4 = program data (3 bytes)
#
#ESC 1 set tab
#ESC 2 clear tab at cursor
#ESC 3 clear all tabs
#ESC 4 send unprotect line to cursor
#ESC 5 send unprotect page to cursor
#ESC 6 send line to cursor
#ESC 7 send page to cursor
#ESC 8 n set scroll mode:
# n = 0 set jump scroll
# n = 1 set smooth scroll
#ESC 9 n control display:
# n = 0 display off
# n = 1 display on
#ESC : clear unprotected data to null
#ESC ; clear unprotected data to insert char
#
#ESC < keyclick on
#ESC = p1 p2 address cursor to row, column
# p1 = row 20h - 7fh
# p2 = column (lo) 20h - 7fh
# p3 = column (hi) 20h - 21h (only 132 col)
#ESC > keyclick off
#ESC ? transmit cursor location (row, column)
#
#ESC @ copy print mode on
#ESC A copy print mode off
#ESC B block mode on
#ESC C block mode off (conversation mode)
#ESC D F set full duplex
#ESC D H set half duplex
#ESC E line insert
#ESC F p1 p2 set page colour (p1 = f/grnd, p2 = b/grnd)
# 0 = black, 1 = red, 2 = green, 3 = yellow
# 4 = blue, 5 = magenta, 6 = cyan, 7 = white
#ESC G n set serial field attribute (n = 30h - 3Fh)
#ESC H n full graphics mode:
# n = 0 exit full graphics mode
# n = 1 enter full graphics mode
#ESC I back tab
#ESC J back page
#ESC K forward page
#
#ESC L unformatted page print
#ESC M L move window left (132 col mode only)
#ESC M R move window right (132 col mode only)
#ESC N set page edit (clear line edit)
#ESC O set line edit (clear page edit)
#ESC P formatted page print
#ESC Q character insert
#ESC R line delete
#ESC S send message unprotected only
#ESC T erase line to insert char
#ESC U set monitor mode (see ESC X, ESC u)
#
#ESC V n select video attribute mode:
# n = 0 serial field attribute mode
# n = 1 parallel character attribute mode
#ESC V 2 n define line attribute:
# n = 0 single width single height
# n = 1 single width double height
# n = 2 double width single height
# n = 3 double width double height
#ESC V 3 n select character font:
# n = 0 system font
# n = 1 user defined font
#ESC V 4 n select screen mode:
# n = 0 page screen mode
# n = 1 virtual screen mode
#ESC V 5 n control mouse mode:
# n = 0 disable mouse
# n = 1 enable sample mode
# n = 2 send mouse information
# n = 3 enable request mode
#ESC W character delete
#ESC X clear monitor mode (see ESC U, ESC u)
#ESC Y erase page to insert char
#
#ESC Z n send user/status line:
# n = 0 send user line
# n = 1 send status line
# n = 2 send terminal ID
#ESC [ p1 p2 p3 set character attribute (parallel char mode):
# p1: 0 = normal
# 1 = blank
# 2 = blink
# 3 = blink blank (= blank)
# 4 = reverse
# 5 = reverse blank
# 6 = reverse blink
# 7 = reverse blink blank (= reverse blank)
# 8 = underline
# 9 = underline blank
# : = underline blink
# ; = underline blink blank
# < = reverse underline
# = = reverse underline blank
# > = reverse underline blink
# ? = reverse underline blink blank
# p2, p3: f/grnd, b/grnd colour
# (see ESC F for colours)
# use ZZ for mono, eg.
# ESC [ 0 Z Z for normal
# ESC [ 4 Z Z for inverse etc.
#
#ESC \ n set page size:
# n = 1 24 lines/page
# n = 2 48 lines/page
# n = 3 72 lines/page
# n = 4 96 lines/page
#ESC ] n set Wordstar mode:
# n = 0 normal (KDS7372) mode
# n = 1 Wordstar mode
#
#ESC b set foreground colour screen
#
#ESC c n enter self-test mode:
# n = 0 exit self test mode
# n = 1 ROM test
# n = 2 RAM test
# n = 3 NVRAM test
# n = 4 screen display test
# n = 5 main/printer port test
# n = 6 mouse port test
# n = 7 graphics board test
# n = 8 graphics memory test
# n = 9 display all 'E'
# n = : display all 'H'
#ESC d set background colour screen
#
#ESC e n program insert char (n = insert char)
#ESC f text CR load user status line with 'text'
#
#ESC g display user status line on 25th line
#ESC h display system status line on 25th line
#ESC i tab
#ESC j reverse linefeed
#ESC k n duplex/local edit mode:
# n = 0 duplex edit mode
# n = 1 local edit mode
#ESC l n select virtual screen:
# n = 0 screen 1
# n = 1 screen 2
#ESC m save current config to NVRAM
#ESC n p1 select display screen:
# p1 = 0 screen 1
# p1 = 1 screen 2
# p1 = 2 screen 3
# p1 = 3 screen 4
#ESC o p1 p2 set characters/line and attribute:
# p1 = 0 80 chars/line
#
#ESC o p1 p2 set characters/line and attribute:
# p1 = 0 80 chars/line
# p1 = 1 132 chars/line
# p2 = 0 single width single height
# p2 = 1 single width double height
# p2 = 2 double width single height
# p2 = 3 double width double height
#
#ESC q insert mode on
#ESC r edit mode on
#ESC s send message all
#ESC t erase line to null
#ESC u clear monitor mode (see ESC U, ESC X)
#ESC v autopage mode on
#ESC w autopage mode off
#ESC x p1 p2 p3 define delimiter code...
#ESC y erase page to null
#
#ESC z 2 p1 p2 p3 p4 draw quadrangle:
# p1 = starting row
# p2 = starting column
# p3 = end row
# p4 = end column
#
#ESC { p1 p2 p3 p4 configure main port
# (baud, stop bits, parity, word length)
#
#ESC | p1 p2 text Ctrl-Y program function key with 'text':
# p1 = function key code:
# '1' - ';' normal f1- f11
# '<' - 'F' shifted f1 - f11
# p2 = program mode:
# 1 = FDX
# 2 = LOC
# 3 = HDX
# Ctrl-Y = terminator
# (use Ctrl-P to escape ^P, ^Y )
#
#ESC } p1 p2 p3 p4 configure printer port
# (baud, stop bits, parity, word length)
#ESC ~ send system status
#
# Codes and info from Peter Disdale <pete@pdlmail.demon.co.uk> 12 May 1997
#
# Entry is by esr going solely on above information and is UNTESTED.
# This actually looks a lot like a Televideo 9xx.
# This entry uses page 0 and is monochrome; I'm not brave enough to try
# to make color work without a test terminal. The <am> capability is a guess.
# The initialization string sets conversation mode, blinking underline cursor,
# full duplex, parallel attribute mode, display user status line, white
# foreground, black background, normal highlight.
#
icl6404|kds7372|icl6402|kds6402|ICL 6404 aka Kokusai Display Systems 7372,
OTbs, am, hs,
cols#80, lines#24,
bel=^G, blink=\E[2ZZ, cbt=\EI, civis=\E.0, clear=\E*,
- cnorm=\E.3, cr=\r, csr=\E!%+%p1%{32}%+%p2%{32}, cub1=^H,
- cud1=^V, cuf1=^L,
+ cnorm=\E.3, cr=\r, csr=\E!%p1%{32}%+%c%p2%{32}%+%c,
+ cub1=^H, cud1=^V, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{80}%m%{32}%+%c%p2%{80}%>%{32}%+%c,
cuu1=^K, cvvis=\E.1, dch1=\EW, dl1=\ER, home=^^, ht=^I,
hts=\E1, il1=\EE, invis=\E[1ZZ,
is1=\EC\E.3\EDF\EV1\Eg\E[0ZZ, nel=^_, rev=\E[4ZZ,
rmir=\Er, rmso=\E[%gh%{4}%^%Ph%gh%dZZ,
rmul=\E[%gh%{8}%^%Ph%gh%dZZ, rs2=\Eo1,
sgr=\E[%'0'%?%p1%t%'8'%|%;%?%p2%t%'8'%|%;%?%p3%t%'4'%|%;%?
%p4%t%'2'%|%;%?%p7%t%'1'%|%;%cZZ,
sgr0=\E[0ZZ, smir=\Eq, smso=\E[8ZZ, smul=\E[8ZZ, tbc=\E3,
icl6404-w|kds7372-w|ICL 6404 aka Kokusai Display Systems 7372 132 cols,
rs2=\Eo1, use=icl6404,
#### Interactive Systems Corp
#
# ISC used to sell OEMed and customized hardware to support ISC UNIX.
# ISC UNIX still exists in 1995, but ISC itself is no more; they got
# bought out by Sun.
#
# From: <cithep!eric> Wed Sep 16 08:06:44 1981
# (intext: removed obsolete ":ma=^K^P^R^L^L ::bc=^_:", also the
# ":le=^_:" later overridden -- esr)
intext|Interactive Systems Corporation modified owl 1200,
OTbs, am,
cols#80, it#8, lines#24, xmc#1,
bel=^G, cbt=^Y, clear=\014$<132>, cr=\r, cub1=^H, cud1=\n,
cuf1=^^, cup=\017%p1%{32}%+%c%p2%{32}%+%c, cuu1=^\,
dch1=\022$<5.5*>, dl1=\021$<5.5*>, ed=\026J$<5.5*>,
el=^Kp^R, ht=^I, il1=\020$<5.5*>, ind=\n, ip=$<5.5*>, kbs=^H,
kcub1=^_, kcud1=\n, kcuf1=^^, kcuu1=^\, kf0=^VJ\r, kf1=^VA\r,
kf2=^VB\r, kf3=^VC\r, kf4=^VD\r, kf5=^VE\r, kf6=^VF\r,
kf7=^VG\r, kf8=^VH\r, kf9=^VI\r, khome=^Z, rmir=^V<,
rmkx=^V9, rmso=^V#\s, smir=^V;, smkx=\036\:\264\026%%,
smso=^V$\,,
intext2|intextii|INTERACTIVE modified owl 1251,
am, bw, ul,
cols#80, lines#24, xmc#0,
bel=^G, cbt=\E[Z, clear=\E[H\E[2J, cr=\r, cub1=\E[D,
cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K,
flash=\E[;;;;;;;;;2;;u$<200/>\E[;;;;;;;;;1;;u,
hpa=\E[%p1%{1}%+%dG, ht=^I, ich1=\E[@, il1=\E[L, ind=\E[S,
kbs=^H, kcub1=\ED\r, kcud1=\EB\r, kcuf1=\EC\r, kcuu1=\EA\r,
kf0=\E@\r, kf1=\EP\r, kf2=\EQ\r, kf3=\ES\r, kf4=\ET\r,
kf5=\EU\r, kf6=\EV\r, kf7=\EW\r, kf8=\EX\r, kf9=\EY\r,
khome=\ER\r, lf0=REFRSH, lf1=DEL CH, lf2=TABSET, lf3=GOTO,
lf4=+PAGE, lf5=+SRCH, lf6=-PAGE, lf7=-SRCH, lf8=LEFT,
lf9=RIGHT, ri=\E[T, rmso=\E[2 D, rmul=\E[2 D, smso=\E[6 D,
smul=\E[18 D,
#### Kimtron (abm, kt)
#
# Kimtron seems to be history, but as March 1998 these people are still
# offering repair services for Kimtron equipment:
#
# Com/Pair Monitor Service
# 1105 N. Cliff Ave.
# Sioux Falls, South Dakota 57103
#
# WATS voice: 1-800/398-4946
# POTS fax: +1 605/338-8709
# POTS voice: +1 605/338-9650
# Email: <compair@sd.cybernex.net>
# Internet/Web: <http://www.com-pair.com>
#
# Kimtron entries include (undocumented) codes for: enter dim mode,
# enter bold mode, enter reverse mode, turn off all attributes.
#
# Kimtron ABM 85 added by Dual Systems
# (abm85: removed duplicated ":kd=^J:" -- esr)
abm85|Kimtron ABM 85,
OTbs, am, bw, msgr,
cols#80, it#8, lines#24, xmc#1,
cbt=\EI, clear=\E*, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, ed=\Ey, el=\Et, ht=^I,
if=/usr/share/tabset/stdcrt, il1=\EE,
is2=\EC\EX\Eg\En\E%\Er\E(\Ek\Em\Eq, kbs=^H, kcub1=^H,
kcud1=\n, kcuf1=^L, kcuu1=^K, khome=^^, rmir=\Er, rmso=\Ek,
rmul=\Em, smir=\EQ, smso=\Ej, smul=\El,
# Kimtron ABM 85H added by Dual Systems.
# Some notes about the abm85h entries:
# 1) there are several firmware revs of 85H in the world. Use abm85h-old for
# firmware revs prior to SP51
# 2) Make sure to use abm85h entry if the terminal is in 85h mode and the
# abm85e entry if it is in tvi920 emulation mode. They are incompatible
# in some places and NOT software settable i.e., <is2> can't fix it)
# 3) In 85h mode, the arrow keys and special functions transmit when
# the terminal is in dup-edit, and work only locally in local-edit.
# Vi won't swallow `del char' for instance, but <smcup> turns on
# dup-edit anyway so that the arrow keys will work right. If the
# arrow keys don't work the way you like, change <smcup>, <rmcup>, and
# <is2>. Note that 920E mode does not have software commands to toggle
# between dup and local edit, so you get whatever was set last on the
# terminal.
# 4) <flash> attribute is nice, but seems too slow to work correctly
# (\Eb<pad>\Ed)
# 5) Make sure `hidden' attributes are selected. If `embedded' attributes
# are selected, the <xmc@> entry should be removed.
# 6) auto new-line should be on (selectable from setup mode only)
#
# From: Erik Fair <fair@ucbarpa> Sun Oct 27 07:21:05 1985
abm85h|Kimtron ABM 85H native mode,
hs,
xmc@,
bel=^G, cnorm=\E.4, cvvis=\E.2, dim=\E), dsl=\Ee, flash@,
fsl=\r, invis@,
is2=\EC\EN\EX\024\016\EA\Ea\E%\E9\Ee\Er\En\E"\E}\E'\E(\Ef\r
\EG0\Ed\E.4\El,
kcud1=^V, sgr0=\E(\EG0, smir=\EZ, tsl=\Eg\Ef, use=adm+sgr,
use=abm85,
abm85e|Kimtron ABM 85H in 920E mode,
xmc@,
bel=^G, dim=\E), flash@,
is2=\EC\EX\EA\E%\E9\Ee\Er\En\E"\E}\E'\E(\Ef\r\Ek\Eq
\Em,
rev=\Ej, sgr0=\E(\Ek, smir=\EZ, use=abm85,
abm85h-old|oabm85h|o85h|Kimtron ABM 85H with old firmware rev.,
xmc@,
bel=^G, dim=\E),
is2=\E}\EC\EX\Ee\En\E%\Er\E(\Ek\Em\Eq\Ed\ET\EC\E9
\EF,
rev=\Ej, sgr0=\E(\Ek, smir=\EZ, use=abm85,
# From: <malman@bbn-vax.arpa>
# (kt7: removed obsolete :ma=^V^J^L :" -- esr)
kt7|kimtron model kt-7,
OTbs, am,
cols#80, it#8, lines#24,
cbt=\EI, clear=^Z, cub1=^H, cud1=^V, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, ed=\EY, el=\ET, fsl=\Eg, home=^^, ht=^I, ich1=\EQ,
if=/usr/share/tabset/stdcrt, il1=\EE, invis@, is2=\El\E",
kbs=^H, kcbt=\EI, kclr=^Z, kcub1=^H, kcud1=^V, kcuf1=^L,
kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kf0=^AI\r,
kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r,
kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^,
kich1=\EQ, kil1=\EE, tsl=\Ef, use=adm+sgr,
# Renamed TB=^I to :ta:, BE=^G to :bl:, BS=^H to :kb:, N to :kS: (based on the
# other kt7 entry and the adjacent key capabilities). Removed EE which is
# identical to :mh:. Removed :ES=\EGD: which is some kind of highlight
# but we can't figure out what.
kt7ix|kimtron model kt-7 or 70 in IX mode,
am, bw,
cols#80, it#8, lines#25,
acsc=jYk?lZm@nEqDt4uCvAwBx3, bel=^G, blink=\EG2, cbt=\EI,
civis=\E.0, clear=\E*, cnorm=\E.3, cr=\r, cub1=^H, cud1=^V,
cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
dch1=\EW, dim=\EG@, dl1=\ER, dsl=\Ef\r, ed=\EY, el=\ET, fsl=\r,
home=^^, ht=^I, ich1=\EQ, il1=\EE, ind=\n,
is2=\EG0\E s\017\E~, kbs=^H, kcbt=\EI, kclr=\E*,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdl1=\ER,
ked=\EY, kel=\ET, kend=\EY, kf0=^AI\r, kf1=^A@\r, kf2=^AA\r,
kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r,
kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, knp=\EJ,
nel=\r\n, pulse=\EK, rmacs=\E%%, rmir=, rmso=\EG0, rmul=\EG0,
sgr0=\EG0, smacs=\E$, smir=, smso=\EG4, smul=\EG8, tsl=\Ef,
#### Microdata/MDIS
#
# This was a line of terminals made by McDonnell-Douglas Information Systems.
# These entries come direct from MDIS documentation. I have edited them only
# to move primary names of the form p[0-9] * to aliases, and to comment out
# <rmacs>/<smacs> in a couple of entries without <acsc> strings. I have
# also removed the change history; the last version indicates this is
# version 4.3 by A.Barkus, September 1990 (earliest entry is October 1989).
#
# McDonnell Information Systems Terminal Family History
# =========================================
#
# Prism-1, Prism-2 and P99:
# Ancient Microdata and CMC terminals, vaguely like Adds Regent 25.
#
# Prism-4 and Prism-5:
# Slightly less ancient range of Microdata terminals. Follow-on from
# Prism-2, but with many enhancements. P5 has eight display pages.
#
# Prism-6:
# A special terminal for use with library systems, primarily in Germany.
# Limited numbers. Similar functionality to P5 (except attributes?).
#
# Prism-7, Prism-8 and Prism-9:
# More recent range of MDIS terminals, in which P7 and P8
# replace the P4 & P5, with added functionality, and P9 is the flagship.
# The P9 has two emulation modes - P8 and ANSI - and includes a
# large number of the DEC VT220 control sequences. Both
# P8 and P9 support 80c/24ln/8pg and 132cl/24li/4pg formats.
#
# Prism-12 and Prism-14:
# Latest range, functionally very similar to the P9. The P14 has a
# black-on-white overscanning screen.
#
# The terminfo definitions given here are:
#
# p2 - Prism-2 (or Prism-1 or P99).
#
# p4 - Prism-4 (and older P7s & P8s).
# p5 - Prism-5 (or Prism-6).
#
# p7 - Prism-7.
# p8 - Prism-8 (in national or multinational mode).
# p8-w - 132 column version of p8.
# p9 - Prism-9 in ANSI mode.
# p9-w - 132 column version of p9.
# p9-8 - Prism-9 in Prism-8 emulation mode.
# p9-8-w - As p9-8, but with 132 columns.
#
# p12 - Prism-12 in ANSI mode.
# p12-w - 132 column version of p12.
# p12-m - Prism-12 in MDC emulation mode.
# p12-m-w - As p12-m, but with 132 columns.
# p14 - Prism-14 in ANSI mode.
# p14-w - 132 column version of p14.
# p14-m - Prism-14 in MDC emulation mode.
# p14-m-w - As p14-m, but with 132 columns.
#
# p2: Prism-2
# -----------
#
# Includes Prism-1 and basic P99 without SP or MP loaded.
# The simplest form of Prism-type terminal.
# Basic cursor movement and clearing operations only.
# No video attributes.
# Notes:
# Horizontal cursor qualifiers of NUL, XON and XOFF are mapped to the next
# value up, followed by backspace.
#
prism2|MDC Prism-2,
am, bw, msgr,
cols#80, lines#24,
bel=^G, clear=\014$<20>, cr=\r, cub1=^H, cud1=\n, cuf1=^F,
cup=\013%p1%{32}%+%c\020%p2%{10}%/%{16}%*%p2%{10}%m%+%Pc%?
%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c,
cuu1=^Z, ed=\EJ, el=\EK, home=^A,
hpa=\020%p1%{10}%/%{16}%*%p1%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc
%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c,
ind=\n, kbs=^H, khome=^A, vpa=\013%p1%{32}%+%c,
# p4: Prism-4
# -----------
#
# Includes early versions of P7 & P8.
# Basic family definition for most Prisms (except P2 and P9 ANSI).
# Notes:
# Horizontal cursor qualifiers of NUL, XON and XOFF are mapped to the next
# value up, followed by backspace.
# Cursor key definitions removed because they interfere with vi and csh keys.
#
prism4|p4|P4|MDC Prism-4,
am, bw, hs, mc5i, msgr,
cols#80, lines#24, wsl#72, xmc#1,
bel=^G, blink=^CB, civis=\035\344, clear=\014$<20>,
cnorm=\035\342, cr=\r, cub1=^H, cud1=\n, cuf1=^F,
cup=\013%p1%{32}%+%c\020%p2%{10}%/%{16}%*%p2%{10}%m%+%Pc%?
%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c,
cuu1=^Z, dim=^CA, dsl=\035\343\035\345, ed=\EJ, el=\EK,
fsl=\035\345, home=^A,
hpa=\020%p1%{10}%/%{16}%*%p1%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc
%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c,
ind=\n, invis=^CH, kbs=^H, khome=^A, mc0=\EU, mc4=\ET, mc5=\ER,
rev=^CD, rmso=^C\s, rmul=^C\s,
sgr=\003%{64}%?%p1%p3%|%t%{4}%+%;%?%p2%t%{16}%+%;%?%p4%t%{2}
%+%;%?%p5%t%{1}%+%;%?%p7%t%{8}%+%;%c%?%p9%t\016%e\017%;,
sgr0=^C\s, smso=^CD, smul=^CP, tsl=\035\343,
vpa=\013%p1%{32}%+%c,
# p5: Prism-5
# -----------
#
# Same definition as p4. Includes Prism-6 (not tested!).
# Does not use any multi-page features.
#
prism5|p5|P5|MDC Prism-5,
use=p4,
# p7: Prism-7
# -----------
#
# Similar definition to p4. Uses ANSI cursor motion to avoid network problems.
# Notes:
# Use p4 for very early models of P7.
# Rev-index removed; can't send nulls to terminal in 8-bit modes.
#
prism7|p7|P7|MDC Prism-7,
cup=\E[%i%p1%d;%p2%dH, hpa@, vpa@, use=p4,
# p8: Prism-8
# -----------
#
# Similar definition to p7. Uses ANSI cursor motion to avoid network problems.
# Supports national and multinational character sets.
# Notes:
# Alternate char set operations only work in multinational mode.
# Use p4 for very early models of P8.
# Rev-index removed; can't send nulls to terminal in 8-bit modes.
# (esr: commented out <smacs>/<rmacs> because there's no <acsc>)
#
prism8|p8|P8|MDC Prism-8,
cup=\E[%i%p1%d;%p2%dH, hpa=\E[%i%p1%d`, is2=\E[<12h,
vpa=\E[%i%p1%dd, use=p4,
# p8-w: Prism-8 in 132 column mode
# --------------------------------
#
# 'Wide' version of p8.
# Notes:
# Rev-index removed; can't send nulls to terminal in 8-bit modes.
#
prism8-w|p8-w|P8-W|MDC Prism-8 in 132 column mode,
cols#132,
is2=\E[<12h\E[<14h, use=p8,
# p9: Prism-9 in ANSI mode
# -------------------------
#
# The "flagship" model of this generation of terminals.
# ANSI X3.64 (ISO 6429) standard sequences, plus many DEC VT220 ones.
# Notes:
# Tabs only reset by "reset". Otherwise assumes default (8 cols).
# Fixes to deal with terminal firmware bugs:
# . 'ri' uses insert-line since rev index doesn't always
# . 'sgr0' has extra '0' since esc[m fails
# . 'fsl' & 'dsl' use illegal char since cr is actioned wrong on line 25
# Not covered in the current definition:
# . Labels
# . Programming Fn keys
# . Graphic characters (defaults correctly to vt100)
# . Padding values (sets xon)
# (esr: commented out <smacs>/<rmacs> because there's no <acsc>)
#
prism9|p9|P9|MDC Prism-9 in ANSII mode,
am, bw, hs, msgr, xenl, xon,
cols#80, it#8, lines#24, vt#3, wsl#72,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[<4l,
clear=^L, cnorm=\E[<4h, cr=\r, csr=\E[%i%p1%d;%p2%d%%v,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dl=\E[%p1%dM, dl1=\E[M, dsl=\E[%}\024, ech=\E[%p1%dX,
ed=\E[J$<10>, el=\E[K, fsl=^T, home=\E[H, hpa=\E[%i%p1%d`,
ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=\n,
is2=\E[&p\E[<12l\E F, kbs=^H, kclr=^L, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E[11~,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
kf18=\E[32~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~,
kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
khome=\E[H, nel=\r\n, prot=\E[32%{, rc=\E[%z,
rep=\E[%p2%db%p1%c, rev=\E[7m, ri=\E[L, rmir=\E[4l,
rmso=\E[27m, rmul=\E[24m,
rs2=\E[&p\E[<12l\E\sF\E[3g\E[9;17;25;33;41;49;57;65;73
\sN,
sc=\E[%y,
sgr=\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p6%t;1%;m%?
%p8%t\E[32%%{%;%?%p9%t\016%e\017%;,
sgr0=\E[0m\017, smir=\E[4h, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, tsl=\E[%i%p1%d%%}, vpa=\E[%i%p1%dd,
use=ansi+pp,
# p9-w: Prism-9 in 132 column mode
# --------------------------------
#
# 'Wide' version of p9.
#
prism9-w|p9-w|P9-W|MDC Prism-9 in 132 column mode,
cols#132,
is2=\E[&p\E[<12l\E F\E[<14h,
rs2=\E[&p\E[<12l\E F\E[<14h, use=p9,
# p9-8: Prism-9 in P8 mode
# ------------------------
#
# P9 terminal in P8 emulation mode.
# Similar to p8 definition.
# Insertion and deletion operations possible.
#
prism9-8|p9-8|P9-8|MDC Prism-9 in P8 mode,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, use=p8,
# p9-8-w: Prism-9 in P8 and 132 column modes
# ------------------------------------------
#
# P9 terminal in P8 emulation mode and 132 column mode.
#
prism9-8-w|p9-8-w|P9-8-W|MDC Prism-9 in Prism 8 emulation and 132 column mode,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, use=p8-w,
# p12: Prism-12 in ANSI mode
# ---------------------------
#
# See p9 definition.
#
prism12|p12|P12|MDC Prism-12 in ANSI mode,
use=p9,
# p12-w: Prism-12 in 132 column mode
# ----------------------------------
#
# 'Wide' version of p12.
#
prism12-w|p12-w|P12-W|MDC Prism-12 in 132 column mode,
use=p9-w,
# p12-m: Prism-12 in MDC emulation mode
# -------------------------------------
#
# P12 terminal in MDC emulation mode.
# Similar to p8 definition.
# Insertion and deletion operations possible.
#
prism12-m|p12-m|P12-M|MDC Prism-12 in MDC emulation mode,
use=p9-8,
# p12-m-w: Prism-12 in MDC emulation and 132 column modes
# -------------------------------------------------------
#
# P12 terminal in MDC emulation mode and 132 column mode.
#
prism12-m-w|p12-m-w|P12-M-W|MDC Prism-12 in MDC emulation and 132 column mode,
use=p9-8-w,
# p14: Prism-14 in ANSII mode
# ---------------------------
#
# See p9 definition.
#
prism14|p14|P14|MDC Prism-14 in ANSII mode,
use=p9,
# p14-w: Prism-14 in 132 column mode
# ----------------------------------
#
# 'Wide' version of p14.
#
prism14-w|p14-w|P14-W|MDC Prism-14 in 132 column mode,
use=p9-w,
# p14-m: Prism-14 in MDC emulation mode
# -------------------------------------
#
# P14 terminal in MDC emulation mode.
# Similar to p8 definition.
# Insertion and deletion operations possible.
#
prism14-m|p14-m|P14-M|MDC Prism-14 in MDC emulation mode,
use=p9-8,
# p14-m-w: Prism-14 in MDC emulation and 132 column modes
# -------------------------------------------------------
#
# P14 terminal in MDC emulation mode and 132 column mode.
#
prism14-m-w|p14-m-w|P14-M-W|MDC Prism-14 in MDC emulation and 132 column mode,
use=p9-8-w,
# End of McDonnell Information Systems Prism definitions
# These things were popular in the Pick database community at one time
# From: George Land <georgeland@aol.com> 24 Sep 1996
p8gl|prism8gl|McDonnell-Douglas Prism-8 alternate definition,
am, bw, hs, mir,
cols#80, lines#24, ma#1, wsl#78, xmc#1,
bel=^G, blink=^CB, clear=^L, cr=\r, cub1=^U, cud1=\n, cuf1=^F,
cup=\E[%i%p1%d;%p2%dH, cuu1=^Z, dch1=\s^H, dim=^CA, dl1=^P,
ed=\EJ, el=\EK, home=^A, ind=\n, invis=^CH, kbs=^H, kcub1=^U,
kcud1=\n, kcuf1=^F, kcuu1=^Z, kdch1=\s^H, kdl1=^P, ked=\EJ,
kel=\EK, kf1=^A@\r, kf10=^AI\r, kf12=^AJ\r, kf13=^AK\r,
kf14=^AL\r, kf15=^AM\r, kf16=^AN\r, kf17=^AO\r, kf2=^AA\r,
kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r,
kf8=^AG\r, kf9=^AH\r, khome=^A, lf1=F1, lf10=F10, lf2=F2,
lf3=F3, lf4=F4, lf5=F5, lf6=F6, lf7=F7, lf8=F8, lf9=F9, nel=\n\r,
pad=\0, rev=^CD, rmso=^C\s, rmul=^C\s, sgr0=^C\s, smso=^CE,
smul=^C0,
#### Microterm (act, mime)
#
# The mime1 entries refer to the Microterm Mime I or Mime II.
# The default mime is assumed to be in enhanced act iv mode.
#
# New "safe" cursor movement (5/87) from <reuss@umd5.umd.edu>. Prevents
# freakout with out-of-range args on Sytek multiplexors. No <smso=^N> and
# <rmso=^N> since it gets confused and it's too dim anyway. No <ich1>
# since Sytek insists ^S means xoff.
# (act4: found ":ic=2^S:ei=:im=:ip=.1*^V:" commented out in 8.3 -- esr)
act4|microterm|microterm act iv,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=\014$<12/>, cr=\r, cub1=^H, cud1=^K, cuf1=^X,
cup=\024%p1%{24}%+%c%p2%p2%?%{47}%>%t%{48}%+%;%{80}%+%c,
cuu1=^Z, dch1=\004$<.1*/>, dl1=\027$<2.3*/>,
ed=\037$<2.2*/>, el=\036$<.1*/>, home=^],
il1=\001<2.3*/>, ind=\n, kcub1=^H, kcud1=^K, kcuf1=^X,
kcuu1=^Z,
# The padding on :sr: and :ta: for act5 and mime is a guess and not final.
# The act 5 has hardware tabs, but they are in columns 8, 16, 24, 32, 41 (!)...
# (microterm5: removed obsolete ":ma==^Z^P^Xl^Kj:" -- esr)
act5|microterm5|microterm act v,
kcub1=^H, kcud1=^K, kcuf1=^X, kcuu1=^Z, ri=\EH$<3>, uc=^H\EA,
use=act4,
# Mimes using brightness for standout. Half bright is really dim unless
# you turn up the brightness so far that lines show up on the screen.
mime-fb|full bright mime1,
is2=^S\E, rmso=^S, smso=^Y, use=mime,
mime-hb|half bright mime1,
is2=^Y\E, rmso=^Y, smso=^S, use=mime,
# (mime: removed obsolete ":ma=^X ^K^J^Z^P:"; removed ":do=^K:" that overrode
# the more plausible ":do=^J:" -- esr)
# uc was at one time disabled to get around a curses bug, be wary of it
mime|mime1|mime2|mimei|mimeii|microterm mime1,
OTbs, am,
cols#80, it#8, lines#24, vt#9,
bel=^G, clear=^]^C, cr=\r, cub1=^H, cud1=\n, cuf1=^X,
cup=\024%p1%{24}%+%c%p2%p2%?%{32}%>%t%{48}%+%;%{80}%+%c,
cuu1=^Z, dl1=\027$<80>, ed=^_, el=^^, home=^], ht=\011$<2>,
il1=\001$<80>, ind=\n, is2=^S\E^Q, kcub1=^H, kcud1=^K,
kcuf1=^X, kcuu1=^Z, ri=\022$<3>, uc=^U,
# These termcaps (for mime2a) put the terminal in low intensity mode
# since high intensity mode is so obnoxious.
mime2a-s|microterm mime2a (emulating an enhanced soroc iq120),
OTbs, am,
cols#80, lines#24,
bel=^G, clear=\EL, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EI, dch1=\ED,
dl1=\027$<20*>, ed=\EJ$<20*>, el=\EK, home=^^,
il1=\001$<20*>, ind=\n, ip=$<2>, is2=\E), kcub1=^H, kcud1=\n,
kcuf1=^L, kcuu1=^K, ri=\EI, rmir=^Z, rmso=\E;, rmul=\E7,
smir=\EE, smso=\E\:, smul=\E6,
# This is the preferred mode (but ^X can't be used as a kill character)
mime2a|mime2a-v|microterm mime2a (emulating an enhanced vt52),
OTbs,
cols#80, it#8, lines#24,
bel=^G, clear=\EL, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=^N,
dl1=\027$<20*>, ed=\EQ$<20*>, el=\EP, home=\EH, ht=^I,
il1=\001$<20*>, ind=\n, ip=$<2>, is2=^Y, kcub1=\ED,
kcud1=\EB, kcuf1=\EC, kcuu1=\EA, ri=\EA, rmir=^Z, rmso=\E9,
rmul=\E5, smir=^O, smso=\E8, smul=\E4,
# (mime3a: removed obsolete ":ma=^X ^K^J^Z^P:" -- esr)
mime3a|mime1 emulating 3a,
am@,
kcub1=^H, kcud1=^K, kcuf1=^X, kcuu1=^Z, use=adm3a,
mime3ax|mime-3ax|mime1 emulating enhanced 3a,
it#8,
dl1=\027$<80>, ed=^_, el=^X, ht=\011$<3>, il1=\001$<80>,
use=mime3a,
# Wed Mar 9 18:53:21 1983
# We run our terminals at 2400 baud, so there might be some timing problems at
# higher speeds. The major improvements in this model are the terminal now
# scrolls down and insert mode works without redrawing the rest of the line
# to the right of the cursor. This is done with a bit of a kludge using the
# exit graphics mode to get out of insert, but it does not appear to hurt
# anything when using vi at least. If you have some users using act4s with
# programs that use curses and graphics mode this could be a problem.
mime314|mm314|mime 314,
am,
cols#80, lines#24,
clear=^L, cub1=^H, cuf1=^X, cup=\024%p1%c%p2%c, cuu1=^Z,
dch1=^D, dl1=^W, ed=^_, el=^^, home=^], ht=^I, il1=^A, kcub1=^H,
kcud1=^K, kcuf1=^X, kcuu1=^Z, rmir=^V, smir=^S,
# Microterm mime 340 from University of Wisconsin
mm340|mime340|mime 340,
cols#80, lines#24,
clear=\032$<12/>, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
dch1=\E#$<2.1*/>, dl1=\EV$<49.6/>, ed=\037$<2*/>,
el=\EL$<2.1/>, ht=^I, il1=\EU$<46/>, ind=\n, is2=\E\,,
kbs=^H, kcub1=^H, kcud1=\n, kcuu1=^K, nel=\r\n,
# This came from University of Wisconsin marked "astro termcap for jooss".
# (mt4520-rv: removed obsolete ":kn#4:" and incorrect ":ri=\E[C:";
# also added <rmam>/<smam> based on the init string -- esr)
mt4520-rv|micro-term 4520 reverse video,
am, hs, msgr, xenl, xon,
cols#80, it#8, lines#24, wsl#80,
bel=^G, clear=\E[H\E[J, cnorm=\E[0V\E8, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E7\E[0U, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ed=\E[J, el=\E[K, flash=\E[?5l$<200/>\E[?5h,
fsl=\E[?5l\E[?5h, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\ED,
is2=\E(B\E[2l\E>\E[20l\E[?3l\E[?5h\E[?7h\E[1;24r\E[24;1H\E[H
\E[J,
kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H,
ll=\E[24;1H, nel=\EE, rc=\E8, rf=/usr/share/tabset/vt100,
ri=\EM, rmam=\E[?7l, rmso=\E[0m, rmul=\E[24m,
rs1=\E(B\E[2l\E>\E[20l\E[?3l\E[?5h\E[?7h\E[H\E[J,
sc=\E7, sgr0=\E[m, smam=\E[?7h, smso=\E[7m, smul=\E[4m,
tbc=\E[g, tsl=\E[25;1H,
# Fri Aug 5 08:11:57 1983
# This entry works for the ergo 4000 with the following setups:
# ansi,wraparound,newline disabled, xon/xoff disabled in both
# setup a & c.
#
# WARNING!!! There are multiple versions of ERGO 4000 microcode
# Be advised that very early versions DO NOT WORK RIGHT !!
# Microterm does have a ROM exchange program- use it or lose big
# (ergo400: added <rmam>/<smam> based on the init string -- esr)
ergo4000|microterm ergo 4000,
da, db, msgr,
cols#80, lines#66,
bel=^G, clear=\E[H\E[2J$<80>, cr=\r, cub1=^H, cud1=\E[B,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
dch1=\E[1P$<80>, dl1=\E[1M$<5*>, ed=\E[0J$<15>,
el=\E[0K$<13>, ht=^I, il1=\E[1L$<5*>, ind=\ED$<20*>,
is2=\E<\E=\E[?1l\E[?4l\E[?5l\E[?7h\E[?8h$<300>,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP,
kf2=\EOQ, kf3=\EOR, kf4=\EOS, lf1=pf1, lf2=pf2, lf3=pf3,
lf4=pf4, ri=\EM$<20*>, rmam=\E[?7l, rmir=\E[4l,
rmkx=\E=$<4>, rmso=\E[m$<20>, sgr0=\E[m$<20>,
smam=\E[?7m, smir=\E[4h$<6>, smkx=\E=$<4>,
smso=\E[7m$<20>,
#### NCR
#
# NCR's terminal group was merged with AT&T's when AT&T bought the company.
# For what happened to that group, see the ADDS section.
#
# There is an NCR4103 terminal that's just a re-badged Wyse-50.
#
# The following vendor-supplied termcaps were captured from the Boundless
# Technologies site, 8 March 1998. I removed all-upper-case names that were
# identical, except for case, to lower-case ones. I also uncommented the acsc
# capabilities.X
#
# The Intecolor emulation of the NCR 2900/260C color terminal is basically a
# DEC vt200/300 with color capabilities added.
ncr260intan|NCR Intecolor emulation of the 2900_260C with an ANSI keyboard,
colors#8, pairs#64,
op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
use=ncr260vt300an,
# The Intecolor emulation of the NCR 2900/260C color terminal is basically a
# DEC vt200/300 with color capabilities added.
ncr260intwan|NCR Intecolor emulation of the 2900_260C with an ANSI keyboard,
colors#8, pairs#64,
op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
use=ncr260vt300wan,
# The Intecolor emulation of the NCR 2900/260C color terminal is basically a
# DEC vt200/300 with color capabilities added.
ncr260intpp|NCR Intecolor emulation of the 2900_260C with a PC+ keyboard,
colors#8, pairs#64,
op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
use=ncr260vt300pp,
# The Intecolor emulation of the NCR 2900/260C color terminal is basically a
# DEC vt200/300 with color capabilities added.
ncr260intwpp|NCR Intecolor emulation of the 2900_260C with a PC+ keyboard in 132 column mode,
colors#8, pairs#64,
op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
use=ncr260vt300wpp,
# This definition for ViewPoint supports several attributes. This means
# that it has magic cookies (extra spaces where the attributes begin).
# Some applications do not function well with magic cookies. The System
# Administrator's Shell in NCR Unix SVR4 1.03 is one such application.
# If supporting various attributes is not vital, 'xmc#1' and the extra
# attributes can be removed.
# Mapping to ASCII character set ('acsc' capability) can also be
# restored if needed.
ncr260vppp|NCR 2900_260 viewpoint,
am, bw, hs, km, mc5i, mir, msgr, xon,
cols#80, lines#24, nlab#32, xmc#1,
acsc=07a?h;j5k3l2m1n8q\:t4u9v=w0x6, bel=^G, blink=\EG2,
cbt=\EI, civis=\E`0, clear=\014$<40>, cnorm=\E`5,
cr=\r$<2>, cub1=\010$<2>, cud1=\n$<2>, cuf1=\006$<2>,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c$<5>, cuu1=\032$<2>,
dch1=\EW$<2>, dim=\EGp, dl1=\El$<2>, dsl=\E`c, ed=\Ek$<2>,
el=\EK$<2>, fsl=\r, home=\036$<2>, ht=^I, hts=\E1,
il1=\EM$<2>, ind=\n$<2>, invis=\EG1,
is2=\Ee6\E~%$<100>\E+\E`\:\Ed/\E`1\EO\Ee4\Ec@0@\Ec@1A\EcB0
\EcC1\Ee7$<100>,
kDC=\El, kEND=\Ek, kHOM=^A, kPRT=\E7, kRIT=^F, ka1=^A, ka3=\EJ,
kbs=^H, kc1=\ET, kc3=\EJ, kcub1=^U, kcud1=\n, kcuf1=^F,
kcuu1=^Z, kdch1=\EW, kend=\EK, kf1=^B1\r, kf10=\002\:\r,
kf11=^B;\r, kf12=^B<\r, kf13=^B=\r, kf14=^B>\r, kf15=^B?\r,
kf16=^B@\r, kf17=^B!\r, kf18=^B"\r, kf19=^B#\r, kf2=^B2\r,
kf20=^B$\r, kf21=^B%^M, kf22=^B&\r, kf23=^B'\r, kf24=^B(\r,
kf25=^B)\r, kf26=^B*\r, kf27=^B+\r, kf28=\002\,\r,
kf29=^B-\r, kf3=^B3\r, kf30=^B.\r, kf31=^B/\r, kf32=^B0\r,
kf4=^B4\r, kf5=^B5\r, kf6=^B6\r, kf7=^B7\r, kf8=^B8\r,
kf9=^B9\r, khome=^A, kich1=\Eq, knp=\EJ, kpp=\EJ, kprt=\EP,
ll=\001$<5>, mc0=\EP$<100>, mc4=^T, mc5=^R,
mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<5>,
nel=\037$<2>, rev=\EG4, ri=\Ej$<2>, rmacs=\EcB0\EH\003,
rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20,
rs2=\Ee6\E~%$<100>\E+\E`\:\Ed/\E`1\EO\Ee4\Ec@0@\Ec@1A\EcB0
\EcC1\Ee7$<100>,
sgr0=\EG0\EH\003, smacs=\EcB1\EH\002, smir=\Eq,
smso=\EG4, smul=\EG8, smxon=\Ec21, tsl=\EF,
ncr260vpwpp|NCR 2900_260 viewpoint wide mode,
cols#132,
cup=\Ea%i%p1%dR%p2%dC$<30>,
is2=\Ee6\E~%$<100>\E+\E`;\Ed/\E`1\EO\Ee4\Ec@0@\Ec@1A\EcB0
\EcC1\Ee7$<100>,
rs2=\Ee6\E~%$<100>\E+\E`;\Ed/\E`1\EO\Ee4\Ec@0@\Ec@1A\EcB0
\EcC1\Ee7$<100>,
use=ncr260vppp,
ncr260vt100an|NCR 2900_260 vt100 with ansi kybd,
am, hs, mir, msgr, xenl, xon,
cols#80, lines#24, nlab#32,
acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G,
- blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[2J\E[1;1H$<20>, cnorm=\E[?25h, cr=\r$<1>,
- csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD$<5>,
+ blink=\E[5m, bold=\E[1m, clear=\E[2J\E[1;1H$<20>,
+ cr=\r$<1>, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD$<5>,
cub1=\E[D$<5>, cud=\E[%p1%dB$<5>, cud1=\E[B$<5>,
cuf=\E[%p1%dC$<5>, cuf1=\E[C$<5>,
cup=\E[%i%p1%d;%p2%dH$<10>, cuu=\E[%p1%dA$<5>,
cuu1=\E[A$<5>, dch=\E[%p1%dP$<5>, dch1=\E[1P$<5>,
dl=\E[%p1%dM$<5>, dl1=\E[M$<5>, dsl=\E[0$~\E[1$~,
ech=\E[%p1%dX, ed=\E[0J$<5>, el=\E[0K$<3>, el1=\E[1K$<3>,
fsl=\E[0$}, home=\E[H$<1>, hpa=\E[%p1%dG$<40>, ht=^I,
hts=\EH, ich=\E[%p1%d@$<5>, il=\E[%p1%dL$<5>,
il1=\E[L$<5>, ind=\ED$<5>, indn=\E[%p1%dE$<5>,
invis=\E[8m,
is2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<
200>,
kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
- kdch1=\E[3~, kfnd=\E[1~, khlp=\E[28~, kich1=\E[2~,
- knp=\E[6~, kpp=\E[5~, krdo=\E[29~, kslt=\E[4~, nel=\EE$<5>,
- rc=\E8, rev=\E[7m, ri=\EM$<5>, rmacs=^O, rmir=\E[4l,
+ khlp=\E[28~, kich1=\E[2~, krdo=\E[29~, nel=\EE$<5>, rc=\E8,
+ rev=\E[7m, ri=\EM$<5>, rmacs=^O, rmir=\E[4l,
rmkx=\E[?1l\E>, rmso=\E[0m, rmul=\E[0m,
rs2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<
200>,
sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;%?%p7%t;8%;m%?%p9%t\016%e\017%;$<20>,
sgr0=\E[0m\017$<20>, smacs=^N, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[1;7m, smul=\E[4m, tbc=\E[3g,
- tsl=\E[2$~\E[1$}, vpa=\E[%p1%dd$<40>, use=vt220+keypad,
+ tsl=\E[2$~\E[1$}, vpa=\E[%p1%dd$<40>, use=vt220+vtedit,
+ use=vt220+cvis, use=vt220+keypad,
ncr260vt100wan|NCR 2900_260 vt100 wide mode ansi kybd,
cols#132,
cup=\E[%i%p1%d;%p2%dH$<30>,
is2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<
200>,
rs2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<
200>,
use=ncr260vt100an,
ncr260vt100pp|NCR 2900_260 vt100 with PC+ kybd,
is2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<
200>,
ka1=\E[H, ka3=\EOu, kb2=\E[V, kc3=\E[U, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[4~,
kend=\E[5~, khome=\E[2~, kich1=\E[1~, knp=\E[6~, kpp=\E[3~,
lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, rmkx=\E>,
rs2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<
200>,
smkx=\E=, use=ncr260vt100an,
ncr260vt100wpp|NCR 2900_260 vt100 wide mode pc+ kybd,
cols#132,
cup=\E[%i%p1%d;%p2%dH$<30>,
is2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<
200>,
rs2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<
200>,
use=ncr260vt100pp,
ncr260vt200an|NCR 2900_260 vt200 with ansi kybd,
am, hs, mir, msgr, xenl, xon,
cols#80, lines#24, nlab#32,
acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G,
- blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[2J\E[1;1H$<20>, cnorm=\E[?25h, cr=\r$<1>,
- csr=\E[%i%p1%d;%p2%dr$<5>, cub=\E[%p1%dD$<5>,
- cub1=\E[D$<5>, cud=\E[%p1%dB$<5>, cud1=\E[B$<5>,
- cuf=\E[%p1%dC$<5>, cuf1=\E[C$<5>,
+ blink=\E[5m, bold=\E[1m, clear=\E[2J\E[1;1H$<20>,
+ cr=\r$<1>, csr=\E[%i%p1%d;%p2%dr$<5>,
+ cub=\E[%p1%dD$<5>, cub1=\E[D$<5>, cud=\E[%p1%dB$<5>,
+ cud1=\E[B$<5>, cuf=\E[%p1%dC$<5>, cuf1=\E[C$<5>,
cup=\E[%i%p1%d;%p2%dH$<10>, cuu=\E[%p1%dA$<5>,
cuu1=\E[A$<5>, dch=\E[%p1%dP$<5>, dch1=\E[1P$<5>,
dl=\E[%p1%dM$<5>, dl1=\E[M$<5>, dsl=\E[0$~\E[1$~,
ech=\E[%p1%dX$<5>, ed=\E[0J, el=\E[0K$<5>, el1=\E[1K$<5>,
fsl=\E[0$}, home=\E[H, hpa=\E[%p1%dG$<40>, ht=^I, hts=\EH,
ich=\E[%p1%d@$<5>, il=\E[%p1%dL$<5>, il1=\E[L$<5>,
ind=\ED$<5>, indn=\E[%p1%dE$<5>, invis=\E[8m,
is2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<
200>,
kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
- kdch1=\E[3~, kf0=\EOy, kf10=\E[21~, kf11=\E[23~,
- kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
- kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
- kf2=\EOQ, kf20=\E[34~, kf21=\E[31~, kf22=\E[32~,
- kf23=\E[33~, kf24=\E[34~, kf25=\E[35~, kf26=\E[1~,
- kf27=\E[2~, kf28=\E[3~, kf29=\E[4~, kf3=\EOR, kf30=\E[5~,
- kf31=\E[6~, kf32=\E[7~, kf33=\E[8~, kf34=\E[9~,
- kf35=\E[10~, kf4=\EOS, kf5=\E[M, kf6=\E[17~, kf7=\E[18~,
- kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~,
- kich1=\E[2~, knp=\E[6~, kpp=\E[5~, krdo=\E[29~, kslt=\E[4~,
- mc0=\E[i, mc4=\E[4i, mc5=\E[5i, nel=\EE, rc=\E8, rev=\E[7m,
- ri=\EM$<5>, rmacs=\017$<20>, rmam=\E[?7l, rmir=\E[4l,
- rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m,
+ kf0=\EOy, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
+ kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
+ kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\EOQ,
+ kf20=\E[34~, kf21=\E[31~, kf22=\E[32~, kf23=\E[33~,
+ kf24=\E[34~, kf25=\E[35~, kf26=\E[1~, kf27=\E[2~,
+ kf28=\E[3~, kf29=\E[4~, kf3=\EOR, kf30=\E[5~, kf31=\E[6~,
+ kf32=\E[7~, kf33=\E[8~, kf34=\E[9~, kf35=\E[10~, kf4=\EOS,
+ kf5=\E[M, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
+ khlp=\E[28~, krdo=\E[29~, mc0=\E[i, mc4=\E[4i, mc5=\E[5i,
+ nel=\EE, rc=\E8, rev=\E[7m, ri=\EM$<5>, rmacs=\017$<20>,
+ rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m,
+ rmul=\E[24m,
rs2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<
200>,
sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;%?%p7%t;8%;m%?%p9%t\016%e\017%;$<20>,
sgr0=\E[0m\017$<20>, smacs=\016$<20>, smam=\E[?7h,
smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, tsl=\E[2$~\E[1$}, vpa=\E[%p1%dd$<40>,
- use=vt220+keypad,
+ use=vt220+vtedit, use=vt220+cvis, use=vt220+keypad,
ncr260vt200wan|NCR 2900_260 vt200 wide mode ansi kybd,
cols#132,
cup=\E[%i%p1%d;%p2%dH$<30>,
is2=\E[!p\E[?3;7;19;67h\E[?4l\E(B\E)0\017\E[2J\E[1;1H$<200>,
rs2=\E[!p\E[?3;7;19;67h\E[?4l\E(B\E)0\017\E[2J\E[1;1H$<200>, use=ncr260vt200an,
ncr260vt200pp|NCR 2900_260 vt200 with pc+ kybd,
ka1=\E[H, ka3=\EOu, kb2=\E[V, kc3=\E[U, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[4~,
kend=\E[1~, khome=\E[H, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, rmkx=\E>, smkx=\E=,
use=ncr260vt200an,
ncr260vt200wpp|NCR 2900_260 vt200 wide mode pc+ kybd,
cols#132,
cup=\E[%i%p1%d;%p2%dH$<30>,
is2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<
200>,
rs2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<
200>,
use=ncr260vt200pp,
ncr260vt300an|NCR 2900_260 vt300 with ansi kybd,
am, hs, mir, msgr, xenl, xon,
cols#80, lines#24, nlab#32,
acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G,
- blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[2J\E[1;1H$<20>, cnorm=\E[?25h, cr=\r$<1>,
- csr=\E[%i%p1%d;%p2%dr$<5>, cub=\E[%p1%dD$<5>,
- cub1=\E[D$<5>, cud=\E[%p1%dB$<5>, cud1=\E[B$<5>,
- cuf=\E[%p1%dC$<5>, cuf1=\E[C$<5>,
+ blink=\E[5m, bold=\E[1m, clear=\E[2J\E[1;1H$<20>,
+ cr=\r$<1>, csr=\E[%i%p1%d;%p2%dr$<5>,
+ cub=\E[%p1%dD$<5>, cub1=\E[D$<5>, cud=\E[%p1%dB$<5>,
+ cud1=\E[B$<5>, cuf=\E[%p1%dC$<5>, cuf1=\E[C$<5>,
cup=\E[%i%p1%d;%p2%dH$<10>, cuu=\E[%p1%dA$<5>,
cuu1=\E[A$<5>, dch=\E[%p1%dP$<5>, dch1=\E[1P$<5>,
dl=\E[%p1%dM$<5>, dl1=\E[M$<5>, dsl=\E[0$~\E[1$~,
ech=\E[%p1%dX$<5>, ed=\E[0J, el=\E[0K$<5>, el1=\E[1K$<5>,
fsl=\E[0$}, home=\E[H, hpa=\E[%p1%dG$<40>, ht=^I, hts=\EH,
ich=\E[%p1%d@$<5>, il=\E[%p1%dL$<5>, il1=\E[L$<5>,
ind=\ED$<5>, indn=\E[%p1%dE$<5>, invis=\E[8m,
is2=\E[!p\E[?7;19;67h\E[?1;3;4l\E[1;0%w\E(B\E)0\017\E[2J\E[1
;1H\E>$<200>,
kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
- kdch1=\E[3~, kf0=\EOy, kf10=\E[21~, kf11=\E[23~,
- kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
- kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
- kf20=\E[34~, kf21=\E[31~, kf22=\E[32~, kf23=\E[33~,
- kf24=\E[34~, kf25=\E[35~, kf26=\E[1~, kf27=\E[2~,
- kf28=\E[3~, kf29=\E[4~, kf30=\E[5~, kf31=\E[6~, kf32=\E[7~,
- kf33=\E[8~, kf34=\E[9~, kf35=\E[10~, kf5=\E[M, kf6=\E[17~,
- kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~,
- khlp=\E[28~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
- krdo=\E[29~, kslt=\E[4~, mc0=\E[i, mc4=\E[4i, mc5=\E[5i,
- nel=\EE, rc=\E8, rev=\E[7m, ri=\EM$<5>, rmacs=\017$<20>,
- rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m,
- rmul=\E[24m,
+ kf0=\EOy, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
+ kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
+ kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf20=\E[34~,
+ kf21=\E[31~, kf22=\E[32~, kf23=\E[33~, kf24=\E[34~,
+ kf25=\E[35~, kf26=\E[1~, kf27=\E[2~, kf28=\E[3~,
+ kf29=\E[4~, kf30=\E[5~, kf31=\E[6~, kf32=\E[7~, kf33=\E[8~,
+ kf34=\E[9~, kf35=\E[10~, kf5=\E[M, kf6=\E[17~, kf7=\E[18~,
+ kf8=\E[19~, kf9=\E[20~, khlp=\E[28~, krdo=\E[29~, mc0=\E[i,
+ mc4=\E[4i, mc5=\E[5i, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM$<5>,
+ rmacs=\017$<20>, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>,
+ rmso=\E[27m, rmul=\E[24m,
rs2=\E[!p\E[?7;19;67h\E[?1;3;4l\E[1;0%w\E(B\E)0\017\E[2J\E[1
;1H\E>$<200>,
sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;%?%p7%t;8%;m%?%p9%t\016%e\017%;$<20>,
sgr0=\E[0m\017$<20>, smacs=\016$<20>, smam=\E[?7h,
smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, tsl=\E[2$~\E[1$}, vpa=\E[%p1%dd$<40>,
- use=vt220+keypad,
+ use=vt220+vtedit, use=vt220+cvis, use=vt220+keypad,
ncr260vt300wan|NCR 2900_260 vt300 wide mode ansi kybd,
cols#132,
cup=\E[%i%p1%d;%p2%dH$<30>,
is2=\E[!p\E[?3;7;19;67h\E[?4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1
H$<200>,
rs2=\E[!p\E[?3;7;19;67h\E[?4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1
H$<200>,
use=ncr260vt300an,
ncr260vt300pp|NCR 2900_260 vt300 with pc+ kybd,
ka1=\E[H, ka3=\EOu, kb2=\E[V, kc3=\E[U, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[4~,
kend=\E[1~, khome=\E[H, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, rmkx=\E>, smkx=\E=,
use=ncr260vt300an,
NCR260VT300WPP|ncr260vt300wpp|NCR 2900_260 vt300 wide mode pc+ kybd,
cols#132,
cup=\E[%i%p1%d;%p2%dH$<30>,
is2=\E[!p\E[?3;7;19;67h\E[?1;4l\E[1;0%w\E(B\E)0\017\E[2J\E[1
;1H\E>$<200>,
rs2=\E[!p\E[?3;7;19;67h\E[?1;4l\E[1;0%w\E(B\E)0\017\E[2J\E[1
;1H\E>$<200>,
use=ncr260vt300pp,
# This terminfo file contains color capabilities for the Wyse325 emulation of
# the NCR 2900/260C color terminal. Because of the structure of the command
# (escape sequence) used to set color attributes, one of the fore/background
# colors must be preset to a given value. I have set the background color to
# black. The user can change this setup by altering the last section of the
# 'setf' definition. The escape sequence to set color attributes is
# ESC d y <foreground_color> <background_color> 1
# In addition, the background color can be changed through the desk accessories.
# The capability 'op' sets colors to green on black (default combination).
#
# NOTE: The NCR Unix System Administrator's Shell will not function properly
# if the 'pairs' capability is defined. Un-Comment the 'pairs'
# capability and recompile if you wish to have it included.
#
ncr260wy325pp|NCR 2900_260 wyse 325,
am, bw, hs, km, mc5i, mir, msgr, xon,
colors#16, cols#80, lines#24, ncv#33, nlab#32,
acsc=07a?h;j5k3l2m1n8q\:t4u9v=w0x6, bel=^G, blink=\EG2,
cbt=\EI, civis=\E`0, clear=\E*$<10>, cnorm=\E`1, cr=\r,
cub1=\010$<5>, cud1=\n$<5>, cuf1=\014$<5>,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<10>, cuu1=\013$<5>,
cvvis=\E`5, dch1=\EW$<50>, dl1=\ER$<5>, dsl=\E`c,
ed=\Ey$<5>, el=\Et$<5>, fsl=\r, home=\036$<5>, ht=^I,
hts=\E1, il1=\EE$<5>, ind=\n$<5>, invis=\EG1,
is2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9
\Ee7$<100>,
kDC=\ER, kEND=\EY, kHOM=\E{, kNXT=\EK, kPRT=\E7, kPRV=\EJ,
kRIT=^L, ka1=^^, kb2=\EJ, kbs=^H, kc1=\ET, kc3=\EK, kcbt=\EI,
kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, kdch1=\EW, kend=\ET,
kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r,
kf14=^AM\r, kf15=^AN\r, kf16=^AO\r, kf17=^A`\r, kf18=^Aa\r,
kf19=^Ab\r, kf2=^AA\r, kf20=^Ac\r, kf21=^Ad\r, kf22=^Ae\r,
kf23=^Af\r, kf24=^Ag\r, kf25=^Ah\r, kf26=^Ai\r, kf27=^Aj\r,
kf28=^Ak\r, kf29=^Al\r, kf3=^AB\r, kf30=^Am\r, kf31=^An\r,
kf32=^Ao\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r,
kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\Eq, knp=\EK, kpp=\EJ,
kprt=\EP, mc0=\EP, mc4=^T, mc5=^R,
mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<10>,
nel=\037$<5>, rev=\EG4, ri=\Ej$<5>, rmacs=\EH\003\EcB0,
rmam=\Ed., rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20,
rs2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9
\Ee7$<100>,
setb=\s,
setf=%?%p1%{0}%=%t%{49}%e%p1%{1}%=%t%{50}%e%p1%{2}%=%t%{51}
%e%p1%{3}%=%t%{52}%e%p1%{4}%=%t%{53}%e%p1%{5}%=%t%{54}
%e%p1%{6}%=%t%{55}%e%p1%{7}%=%t%{64}%e%p1%{8}%=%t%{57}
%e%p1%{9}%=%t%{58}%e%p1%{10}%=%t%{59}%e%p1%{11}%=%t
%{60}%e%p1%{12}%=%t%{61}%e%p1%{13}%=%t%{62}%e%p1%{14}%=
%t%{63}%e%p1%{15}%=%t%{56}%;\Edy%c11$<100>,
sgr0=\EG0\EcB0\EcD$<15>, smacs=\EH\002\EcB1, smam=\Ed/,
smir=\Eq, smso=\EGt, smul=\EG8, smxon=\Ec21, tbc=\E0,
tsl=\EF,
ncr260wy325wpp|NCR 2900_260 wyse 325 wide mode,
cols#132,
cup=\Ea%i%p1%dR%p2%dC$<30>,
is2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9
\Ee7$<100>,
rs2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9
\Ee7$<100>,
use=ncr260wy325pp,
# This definition for Wyse 350 supports several attributes. This means
# that it has magic cookies (extra spaces where the attributes begin).
# Some applications do not function well with magic cookies. The System
# Administrator's Shell in NCR Unix SVR4 1.03 is one such application.
# If supporting various attributes is not vital, 'xmc#1' and the extra
# attributes can be removed.
# Mapping to ASCII character set ('acsc' capability) can also be
# restored if needed.
# In addition, color capabilities have been added to this file. The drawback,
# however, is that the background color has to be black. The foreground colors
# are numbered 0 through 15.
#
# NOTE: The NCR Unix System Administrator's Shell does not function properly
# with the 'pairs' capability defined as below. If you wish to
# have it included, Un-comment it and recompile (using 'tic').
#
ncr260wy350pp|NCR 2900_260 wyse 350,
am, bw, hs, km, mc5i, mir, msgr, xon,
colors#16, cols#80, lines#24, ncv#33, nlab#32, pairs#16, xmc#1,
acsc=07a?h;j5k3l2m1n8q\:t4u9v=w0x6, bel=^G, blink=\EG2,
cbt=\EI, civis=\E`0, clear=\E+$<20>, cnorm=\E`1, cr=\r,
cub1=\010$<5>, cud1=\n$<5>, cuf1=\014$<5>,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<40>, cuu1=\013$<5>,
cvvis=\E`5, dch1=\EW$<50>, dim=\EGp, dl1=\ER$<5>, dsl=\E`c,
ed=\Ey$<5>, el=\Et$<5>, fsl=\r, home=\036$<10>, ht=^I,
hts=\E1, il1=\EE$<5>, ind=\n$<5>, invis=\EG1,
is2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9
\Ee7$<100>,
kDC=\ER, kEND=\EY, kHOM=\E{, kPRT=\E7, kRIT=^L, ka1=^^, kbs=^H,
kc1=\ET, kc3=\EK, kcbt=\EI, kcub1=^H, kcud1=\n, kcuf1=^L,
kcuu1=^K, kdch1=\EW, kend=\ET, kf1=^A@\r, kf10=^AI\r,
kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r,
kf16=^AO\r, kf17=^A`\r, kf18=^Aa\r, kf19=^Ab\r, kf2=^AA\r,
kf20=^Ac\r, kf21=^Ad\r, kf22=^Ae\r, kf23=^Af\r, kf24=^Ag\r,
kf25=^Ah\r, kf26=^Ai\r, kf27=^Aj\r, kf28=^Ak\r, kf29=^Al\r,
kf3=^AB\r, kf30=^Am\r, kf31=^An\r, kf32=^Ao\r, kf4=^AC\r,
kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r,
khome=^^, kich1=\Eq, knp=\EK, kpp=\EJ, kprt=\EP,
mc0=\EP$<10>, mc4=^T, mc5=^R,
mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<20>,
nel=\037$<5>, rev=\EG4, ri=\Ej$<5>, rmacs=\EH\003\EcB0,
rmam=\Ed., rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20,
rs2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9
\Ee7$<100>,
setb=\s,
setf=%?%p1%{0}%=%t%{49}%e%p1%{1}%=%t%{50}%e%p1%{2}%=%t%{51}
%e%p1%{3}%=%t%{52}%e%p1%{4}%=%t%{53}%e%p1%{5}%=%t%{54}
%e%p1%{6}%=%t%{55}%e%p1%{7}%=%t%{102}%e%p1%{8}%=%t%{97}
%e%p1%{9}%=%t%{98}%e%p1%{10}%=%t%{99}%e%p1%{11}%=%t
%{101}%e%p1%{12}%=%t%{106}%e%p1%{13}%=%t%{110}%e%p1
%{14}%=%t%{111}%e%p1%{15}%=%t%{56}%;\Em0%c$<100>,
sgr0=\EG0\EH\003\EcD, smacs=\EH\002\EcB1, smam=\Ed/,
smir=\Eq, smso=\EGt, smul=\EG8, smxon=\Ec21, tbc=\E0,
tsl=\EF,
ncr260wy350wpp|NCR 2900_260 wyse 350 wide mode,
cols#132,
cup=\Ea%i%p1%dR%p2%dC$<30>,
is2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9
\Ee7$<200>,
rs2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9
\Ee7$<200>,
use=ncr260wy350pp,
# This definition for Wyse 50+ supports several attributes. This means
# that it has magic cookies (extra spaces where the attributes begin).
# Some applications do not function well with magic cookies. The System
# Administrator's Shell in NCR Unix SVR4 1.03 is one such application.
# If supporting various attributes is not vital, 'xmc#1' and the extra
# attributes can be removed.
# Mapping to ASCII character set ('acsc' capability) can also be
# restored if needed.
# (ncr260wy50+pp: originally contained commented-out
# <acsc=j5k3l2m1n8q:t4u9v=w0x6>, as well as the commented-out one there -- esr)
ncr260wy50+pp|NCR 2900_260 wyse 50+,
am, bw, hs, km, mc5i, mir, msgr, xon,
cols#80, lines#24, nlab#32, xmc#1,
acsc=0wa_h[jukslrmqnxqzttuyv]wpxv, bel=^G, blink=\EG2,
cbt=\EI$<5>, civis=\E`0, clear=\E+$<20>, cnorm=\E`1, cr=\r,
cub1=\010$<5>, cud1=\n$<5>, cuf1=\014$<5>,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<30>, cuu1=\013$<5>,
cvvis=\E`5, dch1=\EW$<50>, dim=\EGp, dl1=\ER$<5>, dsl=\E`c,
ed=\EY$<5>, el=\ET$<5>, fsl=\r, home=\036$<10>,
ht=\011$<5>, hts=\E1$<5>, il1=\EE$<5>, ind=\n$<5>,
invis=\EG1,
is2=\Ee6\E~"$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"
\Ee4\Ex@\E`9\Ee7$<100>,
kDC=\ER, kEND=\EY, kHOM=\E{, kPRT=\E7, kRIT=^L, ka1=^^, kbs=^H,
kc1=\ET, kc3=\EK, kcbt=\EI, kcub1=^H, kcud1=\n, kcuf1=^L,
kcuu1=^K, kdch1=\EW, kend=\ET, kf1=^A@\r, kf10=^AI\r,
kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r,
kf16=^AO\r, kf17=^A`\r, kf18=^Aa\r, kf19=^Ab\r, kf2=^AA\r,
kf20=^Ac\r, kf21=^Ad\r, kf22=^Ae\r, kf23=^Af\r, kf24=^Ag\r,
kf25=^Ah\r, kf26=^Ai\r, kf27=^Aj\r, kf28=^Ak\r, kf29=^Al\r,
kf3=^AB\r, kf30=^Am\r, kf31=^An\r, kf32=^Ao\r, kf4=^AC\r,
kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r,
khome=^^, kich1=\Eq, knp=\EK, kpp=\EJ, kprt=\EP,
mc0=\EP$<10>, mc4=^T, mc5=^R,
mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<10>,
nel=\037$<5>, rev=\EG4, ri=\Ej$<5>, rmacs=\EH^C, rmam=\Ed.,
rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20,
rs2=\Ee6\E~"$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"
\Ee4\Ex@\E`9\Ee7$<100>,
sgr0=\EG0\EH\003$<15>, smacs=\EH^B, smam=\Ed/, smir=\Eq,
smso=\EGt, smul=\EG8, smxon=\Ec21, tbc=\E0$<5>, tsl=\EF,
ncr260wy50+wpp|NCR 2900_260 wyse 50+ wide mode,
cols#132,
cup=\Ea%i%p1%dR%p2%dC$<30>,
is2=\Ee6\E~"$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"
\Ee4\Ex@\E`9\Ee7$<200>,
rs2=\Ee6\E~"$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"
\Ee4\Ex@\E`9\Ee7$<200>,
use=ncr260wy50+pp,
ncr260wy60pp|NCR 2900_260 wyse 60,
am, bw, hs, km, mc5i, mir, msgr, xon,
cols#80, lines#24, nlab#32,
acsc=07a?h;j5k3l2m1n8q\:t4u9v=w0x6, bel=^G, blink=\EG2,
cbt=\EI$<15>, civis=\E`0, clear=\E*$<100>, cnorm=\E`1,
cr=\r, cub1=\010$<5>, cud1=\n$<5>, cuf1=\014$<5>,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<10>, cuu1=\013$<5>,
cvvis=\E`5, dch1=\EW$<50>, dl1=\ER$<5>, dsl=\E`c,
ed=\Ey$<5>, el=\Et$<5>, fsl=\r, home=\036$<25>,
ht=\011$<15>, hts=\E1$<15>, il1=\EE$<5>, ind=\n$<5>,
invis=\EG1,
is2=\Ee6\E~4$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"
\Ee4\Ex@\E`9\Ee7$<100>,
kDC=\ER, kEND=\EY, kHOM=\E{, kNXT=\EK, kPRT=\E7, kPRV=\EJ,
kRIT=^L, ka1=^^, kb2=\EJ, kbs=^H, kc1=\ET, kc3=\EK,
kcbt=\EI$<15>, kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K,
kdch1=\EW, kend=\ET, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r,
kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r,
kf17=^A`\r, kf18=^Aa\r, kf19=^Ab\r, kf2=^AA\r, kf20=^Ac\r,
kf21=^Ad\r, kf22=^Ae\r, kf23=^Af\r, kf24=^Ag\r, kf25=^Ah\r,
kf26=^Ai\r, kf27=^Aj\r, kf28=^Ak\r, kf29=^Al\r, kf3=^AB\r,
kf30=^Am\r, kf31=^An\r, kf32=^Ao\r, kf4=^AC\r, kf5=^AD\r,
kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^,
kich1=\Eq, knp=\EK, kpp=\EJ, kprt=\EP, mc0=\EP, mc4=^T, mc5=^R,
mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<30>,
nel=\037$<5>, rev=\EG4, ri=\Ej$<5>, rmacs=\EH^C, rmam=\Ed.,
rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20,
rs2=\Ee6\E~4$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"
\Ee4\Ex@\E`9\Ee7$<100>,
sgr0=\EG0\EcB0\EcD$<15>, smacs=\EH^B, smam=\Ed/,
smir=\Eq, smso=\EGt, smul=\EG8, smxon=\Ec21, tbc=\E0$<15>,
tsl=\EF,
ncr260wy60wpp|NCR 2900_260 wyse 60 wide mode,
cols#132,
cup=\Ea%i%p1%dR%p2%dC$<30>,
is2=\Ee6\E~4$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"
\Ee4\Ex@\E`9\Ee7$<100>,
rs2=\Ee6\E~4$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"
\Ee4\Ex@\E`9\Ee7$<100>,
use=ncr260wy60pp,
ncr160vppp|NCR 2900_160 viewpoint,
use=ncr260vppp,
ncr160vpwpp|NCR 2900_160 viewpoint wide mode,
use=ncr260vpwpp,
ncr160vt100an|NCR 2900_160 vt100 with ansi kybd,
use=ncr260vt100an,
ncr160vt100pp|NCR 2900_160 vt100 with PC+ kybd,
use=ncr260vt100pp,
ncr160vt100wan|NCR 2900_160 vt100 wide mode ansi kybd,
use=ncr260vt100wan,
ncr160vt100wpp|NCR 2900_160 vt100 wide mode pc+ kybd,
use=ncr260vt100wpp,
ncr160vt200an|NCR 2900_160 vt200 with ansi kybd,
use=ncr260vt200an,
ncr160vt200pp|NCR 2900_160 vt200 with pc+ kybd,
use=ncr260vt200pp,
ncr160vt200wan|NCR 2900_160 vt200 wide mode ansi kybd,
use=ncr260vt200wan,
ncr160vt200wpp|NCR 2900_160 vt200 wide mode pc+ kybd,
use=ncr260vt200wpp,
ncr160vt300an|NCR 2900_160 vt300 with ansi kybd,
use=ncr260vt300an,
ncr160vt300pp|NCR 2900_160 vt300 with pc+ kybd,
use=ncr260vt300pp,
ncr160vt300wan|NCR 2900_160 vt300 wide mode ansi kybd,
use=ncr260vt300wan,
ncr160vt300wpp|NCR 2900_160 vt300 wide mode pc+ kybd,
use=ncr260vt300wpp,
ncr160wy50+pp|NCR 2900_160 wyse 50+,
use=ncr260wy50+pp,
ncr160wy50+wpp|NCR 2900_160 wyse 50+ wide mode,
use=ncr260wy50+wpp,
ncr160wy60pp|NCR 2900_160 wyse 60,
use=ncr260wy60pp,
ncr160wy60wpp|NCR 2900_160 wyse 60 wide mode,
use=ncr260wy60wpp,
ncrvt100an|ncrvt100pp|NCR vt100 for the 2900 terminal,
am, hs, mc5i, mir, msgr, xon,
cols#80, it#8, lines#24, nlab#32,
acsc=``aaffgghhiijjkkllmmnnqqttuuvvwwxxyyzz~~,
bel=^G, blink=\E[5m$<30>, bold=\E[1m$<30>,
clear=\E[2J\E[1;1H$<300>, cr=\r,
csr=\E[%i%p1%d;%p2%dr$<100>, cub=\E[%p1%dD$<30>,
cub1=\E[D$<2>, cud=\E[%p1%dB$<30>, cud1=\E[B$<2>,
cuf=\E[%p1%dC$<30>, cuf1=\E[C$<2>,
cup=\E[%i%p1%d;%p2%dH$<100>, cuu=\E[%p1%dA$<30>,
cuu1=\E[A$<2>, dch=\E[%p1%dP$<40>, dch1=\E[1P$<10>,
dl=\E[%p1%dM$<70>, dl1=\E[M$<40>, dsl=\E[31l$<25>,
ed=\E[0J$<300>, el=\E[0K$<30>, el1=\E[1K$<30>,
enacs=\E(B\E)0$<40>, fsl=1$<10>, home=\E[H$<2>$<80>,
ht=^I, hts=\EH, il=\E[%p1%dL$<80>, il1=\E[B\E[L$<80>,
ind=\ED,
is2=\E[12h\E[?10l\E%/0n\E[P\031\E[?3l\E(B\E)0$<200>,
kLFT=\E[D, kRIT=\E[C, ka1=\E[H, kbs=^H, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kent=\r, kf1=\EOP,
kf2=\EOQ, kf3=\EOR, kf4=\EOS, mc0=\E[i$<100>, nel=\EE,
rc=\E8, rev=\E[7m$<30>, ri=\EM$<50>, rmacs=\017$<90>,
rmir=\E[4l$<80>, rmso=\E[0m$<30>, rmul=\E[0m$<30>,
rs2=\Ec\E[12;31h\E[?3;4;5;10l\E[?6;7;19;25h\E[33;34l\E[0m\E(
B\E)0\E%/0n\E[P\031$<200>,
sc=\E7,
sgr=%?%p9%t\016%e\017%;\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1
- %p3%|%t;7%;%?%p4%t;5%;m$<100>,
+ %p3%|%t;7%;%?%p4%t;5%;m$<120>,
sgr0=\017\E[0m$<120>, smacs=\016$<90>, smir=\E[4h$<80>,
smso=\E[7m$<30>, smul=\E[4m$<30>, tbc=\E[3g$<40>,
tsl=\E[>+1$<70>,
ncrvt100wan|NCRVT100WPP|ncrvt100wpp|NCR VT100 emulation of the 2900 terminal,
cols#132,
is2=\E[12h\E[?10l\E%/0n\E[P\031\E[?3h\E(B\E)0$<200>,
rs2=\Ec\E[12;31h\E[?4;5;10l\E?3;6;7;19;25h\E[33;34l\E[0m\E(B
\E)0\E%/0n\E[P\031$<200>,
use=ncrvt100an,
#
# Vendor-supplied NCR termcaps end here
# NCR7900 DIP switches:
#
# Switch A:
# 1-4 - Baud Rate
# 5 - Parity (Odd/Even)
# 6 - Don't Send or Do Send Spaces
# 7 - Parity Enable
# 8 - Stop Bits (One/Two)
#
# Switch B:
# 1 - Upper/Lower Shift
# 2 - Typewriter Shift
# 3 - Half Duplex / Full Duplex
# 4 - Light/Dark Background
# 5-6 - Carriage Return Without / With Line Feed
# 7 - Extended Mode
# 8 - Suppress Keyboard Display
#
# Switch C:
# 1 - End of line entry disabled/enabled
# 2 - Conversational mode / (Local?) Mode
# 3 - Control characters displayed / not displayed
# 4 - (2-wire?) / 4-wire communications
# 5 - RTS on and off for each character
# 6 - (50Hz?) / 60 Hz
# 7 - Exit after level zero diagnostics
# 8 - RS-232 interface
#
# Switch D:
# 1 - Reverse Channel (yes / no)
# 2 - Manual answer (no / yes)
# 3-4 - Cursor appearance
# 5 - Communication Rate
# 6 - Enable / Disable EXT turnoff
# 7 - Enable / Disable CR turnoff
# 8 - Enable / Disable backspace
#
# Since each attribute parameter is 0 or 1, we shift each attribute (standout,
# reverse, blink, dim, and underline) the appropriate number of bits (by
# multiplying the 0 or 1 by a correct factor to shift) so the bias character,
# '@' is (effectively) "or"ed with each attribute to generate the proper third
# character in the <ESC>0 sequence. The <sgr> string implements the following
# equation:
#
# ((((('@' + P5) | (P4 << 1)) | (P3 << 3)) | (P2 << 4)) | (p1 * 17)) =>
# ((((('@' + P5) + (P4 << 1)) + (P3 << 3)) + (P2 << 4)) + (p1 * 17))
#
# Where: P1 <==> Standout attribute parameter
# P2 <==> Underline attribute parameter
# P3 <==> Reverse attribute parameter
# P4 <==> Blink attribute parameter
# P5 <==> Dim attribute parameter
# From <root@goliath.un.atlantaga.NCR.COM>, init string hacked by SCO.
ncr7900i|ncr7900|n7900|ncr 7900 model 1,
am, bw, ul,
cols#80, lines#24, xmc#1,
bel=^G, blink=\E0B, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=^F,
cup=\E1%p2%c%p1%c, cuu1=^Z, dim=\E0A, ed=\Ek, el=\EK, ind=\n,
is2=\E0@\010\E3\E4\E7, kcub1=^U, kcud1=\n, kcuf1=^F,
kcuu1=^Z, khome=^A, ll=^A, mc4=^T, mc5=^R, rev=\E0P, rmso=\E0@,
rmul=\E0@,
sgr=\E0%p5%{64}%+%p4%{2}%*%+%p3%{16}%*%+%p2%{32}%*%+%p1%{17}
%*%+%c,
sgr0=\E0@, smso=\E0Q, smul=\E0`,
ncr7900iv|ncr 7900 model 4,
am, bw, eslok, hs,
cols#80, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n,
cup=\013%p1%{64}%+%c\E\005%p2%02d, dl1=\E^O, dsl=\Ey1,
fsl=\Ek\Ey5, home=\013@\E^E00, il1=\E^N, ind=\n, kbs=^H,
kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf1=\ES, kf2=\ET,
kf3=\EU, kf4=\EV, kf5=\EW, kf6=\EP, kf7=\EQ, kf8=\ER,
khome=\EH, lf6=blue, lf7=red, lf8=white, nel=\r\n,
tsl=\Ej\Ex5\Ex1\EY8%p1%{32}%+%c\Eo,
# Warning: This terminal will lock out the keyboard when it receives a CTRL-D.
# The user can enter a CTRL-B to get out of this locked state.
# In <hpa>, we want to output the character given by the formula:
# ((col / 10) * 16) + (col % 10) where "col" is "p1"
ncr7901|ncr 7901 model,
am, bw, ul,
cols#80, lines#24,
bel=^G, blink=\E0B, civis=^W, clear=^L, cnorm=^X, cr=\r,
cub1=^H, cud1=\n, cuf1=^F,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z, dim=\E0A,
ed=\Ek, el=\EK,
hpa=\020%p1%{10}%/%{16}%*%p1%{10}%m%+%c, ind=\n,
is2=\E4^O, kclr=^L, kcub1=^U, kcud1=\n, kcuf1=^F, kcuu1=^Z,
khome=^H, ll=^A, mc4=^T, mc5=^R, rev=\E0P, rmso=^O, rmul=^O,
sgr=\E0%p5%{64}%+%p4%{2}%*%+%p3%{16}%*%+%p2%{32}%*%+%p1%{17}
%*%+%c\016,
sgr0=^O, smso=\E0Q\016, smul=\E0`\016,
vpa=\013%p1%{64}%+%c,
# Newbury Data Recording Limited (Newbury Data)
#
# Have been manufacturing and reselling various peripherals for a long time
# They don't make terminals anymore, but are still in business (in 2007).
# Their e-mail address is at ndsales@newburydata.co.uk
# and their post address is:
#
# Newbury Data Recording Ltd,
# Premier Park, Road One,
# Winsford, Cheshire, CW7 3PT
#
# Their technical support is still good, they sent me for free a printed copy
# of the 9500 user manual and I got it just 1 week after I first contacted them
# (in 2005)!
# NDR 9500
# Manufactured in the early/mid eighties, behaves almost the same as a
# Televideo 950. Take a 950, change its cabinet for a more 80s-ish one (but
# keep the same keyboard layout), add an optional 25-line mode, replace the DIP
# switches with a menu and remove the "lock line" feature (ESC ! 1 and ESC !
# 2), here is the NDR 9500. Even the line-lock, albeit disabled, is
# recognized: if you type in "ESC !", the next (third) character is not
# echoed, showing that the terminal was actually waiting for a parameter!
ndr9500|nd9500|Newbury Data 9500,
am, bw, hs, mc5i, mir, msgr, ul, xon,
cols#80, lines#24, wsl#79,
acsc=jDkClBmAnIqKtMuLvOwNxJ, bel=^G, cbt=\EI, civis=\E.0,
clear=\E;, cnorm=\E.1, cr=\r, cub1=^H, cud1=^V, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dim=\E), dl1=\ER, dsl=\Eh, ed=\EY, el=\ET,
flash=\Eb$<50/>\Ed, fsl=\r, home=^^, ht=^I, hts=\E1,
ich1=\EQ, il1=\EE, ind=\n, is2=\Ew\E'\EDF\El\Er\EO,
kDC=\Er, kDL=\EO, kEOL=\Et, kIC=\Eq, kcbt=\EI, kclr=^Z,
kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER,
ked=\EY, kel=\ET, kent=\r, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r,
kf12=^A`\r, kf13=^Aa\r, kf14=^Ab\r, kf15=^Ac\r, kf16=^Ad\r,
kf17=^Ae\r, kf18=^Af\r, kf19=^Ag\r, kf2=^AA\r, kf20=^Ah\r,
kf21=^Ai\r, kf22=^Aj\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r,
kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^,
kich1=\EQ, kil1=\EE, kprt=\EP, mc4=\Ea, mc5=\E`, nel=^_,
- pfloc=\E|%{48}%p1%+%c2%p2\031,
- pfx=\E|%{48}%p1%+%c1%p2\031, prot=\E), ri=\Ej,
+ pfloc=\E|%{48}%p1%+%c2%p2%s\031,
+ pfx=\E|%{48}%p1%+%c1%p2%s\031, prot=\E), ri=\Ej,
rmacs=\E%%, rmir=\Er, rmso=\E(, rmxon=^N,
sgr=\EG0\E%%%%\E(%?%p1%p5%p8%|%|%t\E)%;%?%p9%t\E$%;,
sgr0=\EG0\E%%\E(, smacs=\E$, smir=\Eq, smso=\E), smxon=^O,
tbc=\E3, tsl=\Eg\Ef\011%p1%{32}%+%c, .kbs=^H,
ndr9500-nl|NDR 9500 with no status line,
hs@,
wsl@,
dsl@, fsl@, tsl@, use=ndr9500,
ndr9500-25|NDR 9500 with 25th line enabled,
lines#25, use=ndr9500,
ndr9500-25-nl|NDR 9500 with 25 lines and no status line,
lines#25, use=ndr9500-nl,
ndr9500-mc|NDR 9500 with magic cookies (enables underline inverse video invisible and blink),
msgr@,
xmc#1,
blink=\EG2, invis=\EG1, rev=\EG4, rmso=\EG0, rmul=\EG0,
sgr=\E%%\E(%?%p5%p8%|%t\E)%;%?%p9%t\E$%;\EG%{48}%?%p7%t%{1}
%+%;%?%p4%t%{2}%+%;%?%p3%p1%|%t%{4}%+%;%?%p2%t%{8}%+%;%c,
sgr0=\EG0\E%%\E(, smso=\EG4, smul=\EG8, use=ndr9500,
ndr9500-25-mc|NDR 500 with 25 lines and magic cookies,
lines#25, use=ndr9500-mc,
ndr9500-mc-nl|NDR 9500 with magic cookies and no status line,
hs@,
wsl@,
dsl@, fsl@, tsl@, use=ndr9500-mc,
ndr9500-25-mc-nl|NDR 9500 with 25 lines and magic cookies and no status line,
lines#25, use=ndr9500-mc-nl,
#### Perkin-Elmer (Owl)
#
# These are official terminfo entries from within Perkin-Elmer.
#
bantam|pe550|pe6100|perkin elmer 550,
OTbs,
cols#80, lines#24,
bel=^G, clear=\EK$<20>, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EX%p1%{32}%+%c\EY%p2%{32}%+%c, cuu1=\EA,
el=\EI$<20>, home=\EH, ind=\n, ll=\EH\EA,
fox|pe1100|perkin elmer 1100,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=\EH\EJ$<132>, cr=\r, cub1=^H, cud1=\n,
cuf1=\EC, cup=\EX%p1%{32}%+%c\EY%p2%{32}%+%c, cuu1=\EA,
ed=\EJ$<5.5*>, el=\EI, flash=\020\002$<200/>\020\003,
home=\EH, hts=\E1, ind=\n, ll=\EH\EA, tbc=\E3,
owl|pe1200|perkin elmer 1200,
OTbs, am, in,
cols#80, lines#24,
bel=^G, clear=\EH\EJ$<132>, cr=\r, cub1=^H, cud1=\n,
cuf1=\EC, cup=\EX%p1%{32}%+%c\EY%p2%{32}%+%c, cuu1=\EA,
dch1=\EO$<5.5*>, dl1=\EM$<5.5*>, ed=\EJ$<5.5*>,
el=\EI$<5.5>, flash=\020\002$<200/>\020\003, home=\EH,
hts=\E1, ich1=\EN, il1=\EL$<5.5*>, ind=\n, ip=$<5.5*>,
kbs=^H, kf0=\ERJ, kf1=\ERA, kf2=\ERB, kf3=\ERC, kf4=\ERD,
kf5=\ERE, kf6=\ERF, kf7=\ERG, kf8=\ERH, kf9=\ERI, ll=\EH\EA,
rmso=\E!\0, sgr0=\E!\0, smso=\E!^H, tbc=\E3,
pe1251|pe6300|pe6312|perkin elmer 1251,
am,
cols#80, it#8, lines#24, pb#300, vt#8, xmc#1,
bel=^G, clear=\EK$<332>, cr=\r, cub1=\ED, cud1=\EB, cuf1=\EC,
cup=\EX%p1%{32}%+%c\EY%p2%{32}%+%c, cuu1=\EA,
ed=\EJ$<20*>, el=\EI$<10*>, home=\EH, hts=\E1, ind=\n,
kf0=\ERA, kf1=\ERB, kf10=\ERK, kf2=\ERC, kf3=\ERD, kf4=\ERE,
kf5=\ERF, kf6=\ERG, kf7=\ERH, kf8=\ERI, kf9=\ERJ, tbc=\E3,
# (pe7000m: this had
# rmul=\E!\0, smul=\E!\040,
# which is probably wrong, it collides with kf0
pe7000m|perkin elmer 7000 series monochrome monitor,
am,
cols#80, lines#24,
bel=^G, cbt=\E!Y, clear=\EK, cr=\r, cub1=\ED, cud1=\EB,
cuf1=\EC, cup=\ES%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA,
ed=\EJ, el=\EI, home=\EH, ind=\n,
is1=\E!\0\EW 7o\Egf\ES7\s, kbs=^H, kcub1=\E!V,
kcud1=\E!U, kcuf1=\E!W, kcuu1=\E!T, kf0=\E!\0, kf1=\E!^A,
kf10=\E!\n, kf2=\E!^B, kf3=\E!^C, kf4=\E!^D, kf5=\E!^E,
kf6=\E!^F, kf7=\E!^G, kf8=\E!^H, kf9=\E!^I, khome=\E!S,
ll=\ES7\s, ri=\ER,
pe7000c|perkin elmer 7000 series colour monitor,
is1=\E!\0\EW 7o\Egf\Eb0\Ec7\ES7\s, rmso=\Eb0,
rmul=\E!\0, smso=\Eb2, smul=\E!\s, use=pe7000m,
#### Sperry Univac
#
# Sperry Univac has merged with Burroughs to form Unisys.
#
# This entry is for the Sperry UTS30 terminal running the TTY
# utility under control of CP/M Plus 1R1. The functionality
# provided is comparable to the DEC vt100.
# (uts30: I added <rmam>/<smam> based on the init string -- esr)
uts30|sperry uts30 with cp/m@1R1,
am, bw, hs,
cols#80, lines#24, wsl#40,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, civis=\ER, clear=^L,
cnorm=\ES, cr=\r, csr=\EU%p1%{32}%+%c%p2%{32}%+%c,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\EM,
dl=\E[%p1%dM, dl1=\EL, ed=\E[J, el=\E[K, fsl=\r, home=\E[H,
ht=^I, ich=\E[%p1%d@, ich1=\EO, il=\E[%p1%dL, il1=\EN,
ind=\n, indn=\E[%p1%dB, is2=\E[U 7\E[24;1H, kbs=^H,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, khome=\E[H,
rc=\EX, rev=\E[7m, rf=/usr/share/tabset/vt100, ri=\EI,
rin=\E[%p1%dA, rmacs=\Ed, rmam=\E[?7l, rmso=\E[m,
rmul=\E[m, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h,
sc=\EW, sgr0=\E[m, smacs=\EF, smam=\E[?7m, smso=\E[7m,
smul=\E[4m, tsl=\E], uc=\EPB,
#### Tandem
#
# Tandem builds these things for use with its line of fault-tolerant
# transaction-processing computers. They aren't generally available
# on the merchant market, and so are fairly uncommon.
#
tandem6510|adm3a repackaged by Tandem,
use=adm3a,
# A funny series of terminal that TANDEM uses. The actual model numbers
# have a fourth digit after 653 that designates minor variants. These are
# natively block-mode and rather ugly, but they have a character mode which
# this doubtless(?) exploits. There is a 6520 that is slightly dumber.
# (tandem653: had ":sb=\ES:", probably someone's mistake for sf; also,
# removed <if=/usr/share/tabset/tandem653>, no such file -- esr)
tandem653|t653x|Tandem 653x multipage terminal,
OTbs, am, da, db, hs,
cols#80, lines#24, wsl#64, xmc#1,
clear=\EI, cub1=^H, cud1=\n, cuf1=\EC,
cup=\023%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dsl=\Eo\r,
ed=\EJ, el=\EK, fsl=\r, home=\EH, ind=\ES, ri=\ET, rmso=\E6\s,
rmul=\E6\s, sgr0=\E6\s, smso=\E6$, smul=\E60, tsl=\Eo,
#### Tandy/Radio Shack
#
# Tandy has a line of VDTs distinct from its microcomputers.
#
dmterm|deskmate terminal,
am, bw,
cols#80, lines#24,
bel=^G, civis=\EG5, clear=\Ej, cnorm=\EG6, cr=\r, cub1=^H,
cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c,
cuu1=\EA, dch1=\ES, dl1=\ER, ed=\EJ, el=\EK, home=\EH, ht=^I,
ich1=\EQ, il1=\EP, ind=\EX, invis@, kcub1=\ED, kcud1=\EB,
kcuf1=\EC, kcuu1=\EA, kf0=\E1, kf1=\E2, kf2=\E3, kf3=\E4,
kf4=\E5, kf5=\E6, kf6=\E7, kf7=\E8, kf8=\E9, kf9=\E0,
khome=\EH, lf0=f1, lf1=f2, lf2=f3, lf3=f4, lf4=f5, lf5=f6,
lf6=f7, lf7=f8, lf8=f9, lf9=f10, ll=\EE, rmul@, smul@,
use=adm+sgr,
dt100|dt-100|Tandy DT-100 terminal,
xon,
cols#80, lines#24, xmc#1,
- acsc=jjkkllmmnnqqttuuvvwwxx, bel=^G, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?25h, cr=\r,
- csr=\E[%p1%2d;%p2%2dr, cub1=^H, cud1=\E[B, cuf1=\E[C,
- cup=\010\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P,
- dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich1=\E[@,
- il1=\E[L, ind=\n, is2=\E[?3l\E)0\E(B, kcub1=\E[D,
- kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E[?3i,
+ acsc=jjkkllmmnnqqttuuvvwwxx, bel=^G, clear=\E[H\E[2J,
+ cr=\r, csr=\E[%p1%2d;%p2%2dr, cub1=^H, cud1=\E[B,
+ cuf1=\E[C, cup=\010\E[%i%p1%d;%p2%dH, cuu1=\E[A,
+ dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I,
+ ich1=\E[@, il1=\E[L, ind=\n, is2=\E[?3l\E)0\E(B,
+ kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E[?3i,
kf10=\E[?5i, kf2=\E[2i, kf3=\E[@, kf4=\E[M, kf5=\E[17~,
kf6=\E[18~, kf7=\E[19~, kf8=\E[20~, kf9=\E[21~, khome=\E[H,
knp=\E[29~, kpp=\E[28~, lf1=f1, lf2=f2, lf3=f3, lf4=f4, lf5=f5,
lf6=f6, lf7=f7, lf8=f8, ri=\EM, rmacs=^O, rmso=\E[m, rmul=\E[m,
sgr0=\E[m, smacs=^N, smso=\E[7m, smul=\E[4m,
+ use=vt220+cvis,
dt100w|dt-100w|Tandy DT-100 terminal (wide mode),
cols#132, use=dt100,
dt110|Tandy DT-110 emulating ansi,
xon,
cols#80, lines#24,
- acsc=jjkkllmmnnqqttuuvvwwxx, bel=^G, civis=\E[?25l,
- clear=\E[H\E[2J, cnorm=\E[?25h, cr=\r,
- csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\E[B, cuf1=\E[C,
- cup=\010\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[0P,
- dl1=\E[0M, ed=\E[0J, el=\E[0K, enacs=\E(B\E)0, home=\E[H,
- ht=^I, ich1=\E[0@, il1=\E[0L, ind=\n, is2=\E[?3l\E)0\E(B,
- kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kend=\E[K,
- kf1=\E[1~, kf10=\E[10~, kf2=\E[2~, kf3=\E[3~, kf4=\E[4~,
- kf5=\E[5~, kf6=\E[6~, kf7=\E[7~, kf8=\E[8~, kf9=\E[9~,
- khome=\E[G, kich1=\E[@, knp=\E[26~, kpp=\E[25~, lf0=f1,
- lf1=f2, lf2=f3, lf3=f4, lf4=f5, lf5=f6, lf6=f7, lf7=f8, lf8=f9,
- lf9=f10, ri=\EM, rmacs=^O, rmso=\E[m, rmul=\E[m, sgr0=\E[m,
- smacs=^N, smso=\E[7m, smul=\E[4m,
+ acsc=jjkkllmmnnqqttuuvvwwxx, bel=^G, clear=\E[H\E[2J,
+ cr=\r, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\E[B,
+ cuf1=\E[C, cup=\010\E[%i%p1%d;%p2%dH, cuu1=\E[A,
+ dch1=\E[0P, dl1=\E[0M, ed=\E[0J, el=\E[0K, enacs=\E(B\E)0,
+ home=\E[H, ht=^I, ich1=\E[0@, il1=\E[0L, ind=\n,
+ is2=\E[?3l\E)0\E(B, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
+ kcuu1=\E[A, kend=\E[K, kf1=\E[1~, kf10=\E[10~, kf2=\E[2~,
+ kf3=\E[3~, kf4=\E[4~, kf5=\E[5~, kf6=\E[6~, kf7=\E[7~,
+ kf8=\E[8~, kf9=\E[9~, khome=\E[G, kich1=\E[@, knp=\E[26~,
+ kpp=\E[25~, lf0=f1, lf1=f2, lf2=f3, lf3=f4, lf4=f5, lf5=f6,
+ lf6=f7, lf7=f8, lf8=f9, lf9=f10, ri=\EM, rmacs=^O, rmso=\E[m,
+ rmul=\E[m, sgr0=\E[m, smacs=^N, smso=\E[7m, smul=\E[4m,
+ use=vt220+cvis,
pt210|TRS-80 PT-210 printing terminal,
hc, os,
cols#80,
bel=^G, cr=\r, cud1=\n, ind=\n,
#### Tektronix (tek)
#
# Tektronix tubes are graphics terminals. Most of them use modified
# oscilloscope technology incorporating a long-persistence green phosphor,
# and support vector graphics on a main screen with an attached "dialogue
# area" for interactive text.
#
tek|tek4012|tektronix 4012,
OTbs, os,
cols#75, lines#35,
bel=^G, clear=\E\014$<1000>, cr=\r, cub1=^H, cud1=\n,
ff=\014$<1000>, is2=\E^O,
# (tek4013: added <acsc> to suppress tic warnings re <smacs>/<rmacs> --esr)
tek4013|tektronix 4013,
acsc=, rmacs=\E^O, smacs=\E^N, use=tek4012,
tek4014|tektronix 4014,
cols#81, lines#38,
is2=\E\017\E9, use=tek4012,
# (tek4015: added <acsc> to suppress tic warnings re <smacs>/<rmacs> --esr)
tek4015|tektronix 4015,
acsc=, rmacs=\E^O, smacs=\E^N, use=tek4014,
tek4014-sm|tektronix 4014 in small font,
cols#121, lines#58,
is2=\E\017\E\:, use=tek4014,
# (tek4015-sm: added <acsc> to suppress tic warnings re <smacs>/<rmacs> --esr)
tek4015-sm|tektronix 4015 in small font,
acsc=, rmacs=\E^O, smacs=\E^N, use=tek4014-sm,
# Tektronix 4023 from Andrew Klossner <orca!andrew.tektronix@csnet-relay>
#
# You need to have "stty nl2" in effect. Some versions of tset(1) know
# how to set it for you.
#
# It's got the Magic Cookie problem around stand-out mode. If you can't
# live with Magic Cookie, remove the :so: and :se: fields and do without
# reverse video. If you like reverse video stand-out mode but don't want
# it to flash, change the letter 'H' to 'P' in the :so: field.
tek4023|tektronix 4023,
OTbs, am,
OTdN#4, cols#80, lines#24, vt#4, xmc#1,
OTnl=\n, bel=^G, clear=\E\014$<4/>, cr=\r, cub1=^H, cud1=\n,
cuf1=^I, cup=\034%p2%{32}%+%c%p1%{32}%+%c, kbs=^H,
rmso=^_@, smso=^_P,
# It is recommended that you run the 4025 at 4800 baud or less;
# various bugs in the terminal appear at 9600. It wedges at the
# bottom of memory (try "cat /usr/dict/words"); ^S and ^Q typed
# on keyboard don't work. You have to hit BREAK twice to get
# one break at any speed - this is a documented feature.
# Can't use cursor motion because it's memory relative, and
# because it only works in the workspace, not the monitor.
# Same for home. Likewise, standout only works in the workspace.
#
# <el> was commented out since vi and rogue seem to work better
# simulating it with lots of spaces!
#
# <il1> and <il> had 145ms of padding, but that slowed down vi's ^U
# and didn't seem necessary.
#
tek4024|tek4025|tek4027|tektronix 4024/4025/4027,
OTbs, am, da, db,
cols#80, it#8, lines#34, lm#0,
bel=^G, clear=\037era\r\n\n, cmdch=^_, cr=\r,
cub=\037lef %p1%d\r, cub1=^H, cud=\037dow %p1%d\r,
cud1=^F\n, cuf=\037rig %p1%d\r, cuf1=\037rig\r,
cuu=\037up %p1%d\r, cuu1=^K, dch1=\037dch\r,
dl=\037dli %p1%d\r\006, dl1=\037dli\r\006,
ed=\037dli 50\r, ht=^I, ich1=\037ich\r \010,
il=\037up\r\037ili %p1%d\r, il1=\037up\r\037ili\r,
ind=^F\n,
is2=!com 31\r\n\037sto 9 17 25 33 41 49 57 65 73\r,
rmkx=\037lea\sp2\r\037lea\sp4\r\037lea\sp6\r\037lea\sp8\r
\037lea\sf5\r,
smkx=\037lea\sp4\s/h/\r\037lea\sp8\s/k/\r\037lea\sp6\s/\s/
\r\037lea\sp2\s/j/\r\037lea\sf5\s/H/\r,
tek4025-17|tek 4025 17 line window,
lines#17, use=tek4025,
tek4025-17-ws|tek 4025 17 line window in workspace,
is2=!com\s31\r\n\037sto\s9\s17\s25\s33\s41\s49\s57\s65\s73
\r\037wor\s17\r\037mon\s17\r,
rmcup=\037mon h\r, rmso=\037att s\r, smcup=\037wor h\r,
smso=\037att e\r, use=tek4025-17,
tek4025-ex|tek4027-ex|tek 4025/4027 w/!,
is2=\037com 33\r\n!sto 9 17 25 33 41 49 57 65 73\r,
rmcup=\037com 33\r, smcup=!com 31\r, use=tek4025,
# Tektronix 4025a
# From: Doug Gwyn <gwyn@brl-smoke.ARPA>
# The following status modes are assumed for normal operation (replace the
# initial "!" by whatever the current command character is):
# !COM 29 # NOTE: changes command character to GS (^])
# ^]DUP
# ^]ECH R
# ^]EOL
# ^]RSS T
# ^]SNO N
# ^]STO 9 17 25 33 41 49 57 65 73
# Other modes may be set according to communication requirements.
# If the command character is inadvertently changed, termcap can't restore it.
# Insert-character cannot be made to work on both top and bottom rows.
# Clear-to-end-of-display emulation via !DLI 988 is too grotty to use, alas.
# There also seems to be a problem with vertical motion, perhaps involving
# delete/insert-line, following a typed carriage return. This terminal sucks.
# Delays not specified; use "stty ixon -ixany" to enable DC3/DC1 flow control!
# (tek4025a: removed obsolete ":xx:". This may mean the tek4025a entry won't
# work any more. -- esr)
tek4025a|Tektronix 4025A,
OTbs, OTpt, am, bw, da, db, xon,
cols#80, it#8, lines#34,
bel=^G, cbt=\035bac;, clear=\035era;\n\035rup;, cmdch=^],
cr=\r, cub=\035lef %p1%d;, cub1=^H, cud=\035dow %p1%d;,
cud1=\n, cuf=\035rig %p1%d;, cuf1=\035rig;,
cuu=\035up %p1%d;, cuu1=^K, dch=\035dch %p1%d;,
dch1=\035dch;, dl=\035dli %p1%d;, dl1=\035dli;,
el=\035dch 80;, hpa=\r\035rig %p1%d;, ht=^I,
il1=\013\035ili;, ind=\n, indn=\035dow %p1%d;,
rs2=!com\s29\035del\s0\035rss\st\035buf\035buf\sn\035cle
\035dis\035dup\035ech\sr\035eol\035era\sg\035for\sn
\035pad\s203\035pad\s209\035sno\sn\035sto\s9\s17\s25
\s33\s41\s49\s57\s65\s73\035wor\s0;,
tbc=\035sto;,
# From: cbosg!teklabs!davem Wed Sep 16 21:11:41 1981
# Here's the command file that I use to get rogue to work on the 4025.
# It should work with any program using the old curses (e.g. it better
# not try to scroll, or cursor addressing won't work. Also, you can't
# see the cursor.)
# (This "learns" the arrow keys for rogue. I have adapted it for termcap - mrh)
tek4025-cr|tek 4025 for curses and rogue,
OTbs, am,
cols#80, it#8, lines#33,
clear=\037era;, cub1=^H, cud1=^F\n, cuf1=\037rig;,
cup=\037jum%i%p1%d\,%p2%d;, cuu1=^K, ht=^I, ind=^F\n,
is2=!com 31\r\n\037sto 9 17 25 33 41 49 57 65 73\r,
rmcup=\037wor 0, smcup=\037wor 33h,
# next two lines commented out since curses only allows 128 chars, sigh.
# :ti=\037lea p1/b/\037lea p2/j/\037lea p3/n/\037lea p4/h/\037lea p5/ /\037lea p6/l/\037lea p7/y/\037lea p8/k/\037lea p9/u/\037lea p./f/\037lea pt/`era w/13\037lea p0/s/\037wor 33h:\
# :te=\037lea p1\037lea p2\037lea p3\037lea p4\037lea pt\037lea p5\037lea p6\037lea p7\037lea p8\037lea p9/la/13\037lea p.\037lea p0\037wor 0:
tek4025ex|4025ex|4027ex|tek 4025 w/!,
is2=\037com\s33\r\n!sto\s9\,17\,25\,33\,41\,49\,57\,65\,73
\r,
rmcup=\037com 33\r, smcup=!com 31\r, use=tek4025,
tek4105|tektronix 4105,
OTbs, am, mir, msgr, ul, xenl, xt,
cols#79, it#8, lines#29,
acsc=, bel=^G, blink=\E[=3;<7m, bold=\E[=7;<4m, cbt=\E[Z,
clear=\E[2J\E[H, cr=\r, cub1=\E[1D, cud1=\E[1B, cuf1=\E[1C,
cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[1A, dch1=\E[1P,
dim=\E[=1;<6m, dl1=\E[1M, ed=\E[J, el=\E[K, home=\E[H, ht=^I,
il1=\E[1L, ind=\E[S, invis=\E[=6;<5, is1=\E%!1\E[m,
is2=\E%!1\E[?6141\E[m, kbs=^H, kcub1=\E[1D, kcud1=\E[1B,
kcuf1=\E[1C, kcuu1=\E[1A, rev=\E[=1;<3m, ri=\E[T,
rmacs=\E[m, rmcup=, rmir=\E[4l, rmso=\E[=0;<1m,
rmul=\E[=0;<1m, sgr0=\E[=0;<1m, smacs=\E[1m,
smcup=\E%!1\E[?6l\E[2J, smir=\E[4h, smso=\E[=2;<3m,
smul=\E[=5;<2m, tbc=\E[1g,
# (tek4105-30: I added <rmam>/<smam> based on the init string -- esr)
tek4105-30|4015 emulating 30 line vt100,
am, mir, msgr, xenl, xon,
cols#80, it#8, lines#30, vt#3,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>,
clear=\E[H\E[J$<50>, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C$<2>,
cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA,
cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>,
enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ind=\n, kbs=^H,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, rc=\E8,
rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O, rmam=\E[?7l,
rmkx=\E[?1l\E>, rmso=\E[m$<2>, rmul=\E[m$<2>,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5
%;m%?%p9%t\016%e\017%;$<2>,
sgr0=\E[m\017$<2>, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=,
smso=\E[1;7m$<2>, smul=\E[4m$<2>, tbc=\E[3g,
use=vt100+fnkeys,
# Tektronix 4105 from BRL
# The following setup modes are assumed for normal operation:
# CODE ansi CRLF no DABUFFER 141
# DAENABLE yes DALINES 30 DAMODE replace
# DAVISIBILITY yes ECHO no EDITMARGINS 1 30
# FLAGGING input INSERTREPLACE replace LFCR no
# ORIGINMODE relative PROMPTMODE no SELECTCHARSET G0 B
# SELECTCHARSET G1 0 TABS -2
# Other setup modes may be set for operator convenience or communication
# requirements; I recommend
# ACURSOR 1 0 AUTOREPEAT yes AUTOWRAP yes
# BYPASSCANCEL <LF> CURSORKEYMODE no DAINDEX 1 0 0
# EOFSTRING '' EOLSTRING <CR> EOMCHARS <CR> <NU>
# GAMODE overstrike GCURSOR 0 100 0 GSPEED 10 1
# IGNOREDEL no KEYEXCHAR <DL> NVDEFINE -53 "<NU>"
# PROMPTSTRING '' QUEUESIZE 2460 WINDOW 0 0 4095 3132
# XMTDELAY 0
# and factory color maps. After setting these modes, save them with NVSAVE. No
# delays are specified; use "stty ixon -ixany" to enable DC3/DC1 flow control!
# "IC" cannot be used in combination with "im" & "ei".
# "tek4105a" is just a guess:
tek4105a|Tektronix 4105,
OTbs, OTpt, msgr, xon,
OTkn#8, cols#80, it#8, lines#30, vt#3,
acsc=, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
civis=\E%!0\ETD00\E%!1, clear=\E[H\E[J,
cnorm=\E%!0\ETD10\E%!1, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\EM, cvvis=\E%!0\ETD70\E%!1,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\EH,
il=\E[%p1%dL, il1=\E[L, ind=\n, is2=\E%!1, kbs=^H,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf0=\EOA,
kf1=\EOB, kf2=\EOC, kf3=\EOD, kf4=\EOP, kf5=\EOQ, kf6=\EOR,
kf7=\EOS, lf0=F1, lf1=F2, lf2=F3, lf3=F4, lf4=F5, lf5=F6, lf6=F8,
ll=\E[30;H, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
rmcup=\E%!0\ELBH=\E%!1, rmir=\E[4l, rmkx=\E[?1l\E>,
rmso=\E[m, rmul=\E[m,
rs2=\030\E%!0\EKC\E\014\EKR0\EKF0\ENM0\ELBH=\ETF8000010F40
\ELI100\ELLA>\ELM0\EKE0\ENF1\EKS0\END0\E%!1\Ec\E[?3;5l
\E[?7;8h\E[r\E[m\E>,
sc=\E7, sgr0=\E[m, smacs=^N, smcup=\E[?6l, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
use=ecma+index,
#
# Tektronix 4106/4107/4109 from BRL
# The following setup modes are assumed for normal operation:
# CODE ansi COLUMNMODE 80 CRLF no
# DABUFFER 141 DAENABLE yes DALINES 32
# DAMODE replace DAVISIBILITY yes ECHO no
# EDITMARGINS 1 32 FLAGGING input INSERTREPLACE replace
# LFCR no LOCKKEYBOARD no ORIGINMODE relative
# PROMPTMODE no SELECTCHARSET G0 B SELECTCHARSET G1 0
# TABS -2
# Other setup modes may be set for operator convenience or communication
# requirements; I recommend
# ACURSOR 1 0 AUTOREPEAT yes AUTOWRAP yes
# BYPASSCANCEL <LF> CURSORKEYMODE no DAINDEX 1 0 0
# EOFSTRING '' EOLSTRING <CR> EOMCHARS <CR> <NU>
# GAMODE overstrike GCURSOR 0 100 0 GSPEED 9 3
# IGNOREDEL no KEYEXCHAR <DL> NVDEFINE -53 "<NU>"
# PROMPTSTRING '' QUEUESIZE 2620 WINDOW 0 0 4095 3132
# XMTDELAY 0
# and factory color maps. After setting these modes, save them with NVSAVE. No
# delays are specified; use "stty ixon -ixany" to enable DC3/DC1 flow control!
# "IC" cannot be used in combination with "im" & "ei".
tek4106brl|tek4107brl|tek4109brl|Tektronix 4106 4107 or 4109,
msgr, xon,
cols#80, it#8, lines#32, vt#3,
acsc=, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
civis=\E%!0\ETD00\E%!1, clear=\E[H\E[J,
cnorm=\E%!0\ETD10\E%!1, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\EM, cvvis=\E%!0\ETD70\E%!1,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\EH,
il=\E[%p1%dL, il1=\E[L, ind=\n, is2=\E%!1, kbs=^H,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf0=\EOA,
kf1=\EOB, kf2=\EOC, kf3=\EOD, kf4=\EOP, kf5=\EOQ, kf6=\EOR,
kf7=\EOS, lf0=F1, lf1=F2, lf2=F3, lf3=F4, lf4=F5, lf5=F6, lf6=F8,
ll=\E[32;H, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
rmcup=\E%!0\ELBH=\E%!1, rmir=\E[4l, rmkx=\E[?1l\E>,
rmso=\E[m, rmul=\E[m,
rs1=\030\E%!0\EKC\E\014\EKR0\EKF0\ENM0\ELBH=\ETF8000010F40
\ELI100\ELLB0\ELM0\EKE0\ENF1\EKS0\END0\ERE0\E%!1\Ec\E[?3
;5l\E[?7;8h\E[r\E[m\E>,
sc=\E7, sgr0=\E[m, smacs=^N, smcup=\E[?6l, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[7;42m, smul=\E[4m, tbc=\E[3g,
use=ecma+index,
+# Refer to:
+# TEK Programmer's Reference
+# Part No. 070-4893-00
+# Product Group 18
+# 4107/4109 Computer Display Terminal
+# November 1983
+#
# Tektronix 4107/4109 interpret 4 modes using "\E%!" followed by a code:
# 0 selects Tek mode, i.e., \E%!0
# 1 selects ANSI mode
# 2 selects ANSI edit-mode
# 3 selects VT52 mode
#
# One odd thing about the description (which has been unchanged since the 90s)
# is that the cursor addressing is using VT52 mode, and a few others use the
-# VT52's non-CSI versions of ANSI, e.g., \EJ.
+# VT52's non-CSI versions of ANSI, e.g., \EJ. A possible explanation is that
+# the developer used Emacs, which misuses cvvis (this description sets VT52
+# mode in that capability).
tek4107|tek4109|tektronix terminals 4107 4109,
OTbs, am, mir, msgr, ul, xenl, xt,
cols#79, it#8, lines#29,
bel=^G, blink=\E%!1\E[5m$<2>\E%!0,
bold=\E%!1\E[1m$<2>\E%!0, clear=\ELZ, cnorm=\E%!0, cr=\r,
cub1=^H, cud1=\n, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\E%!3,
dim=\E%!1\E[<0m$<2>\E%!0, ed=\EJ, el=\EK, ht=^I, ind=\n,
kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA,
rev=\E%!1\E[7m$<2>\E%!0, ri=\EI,
rmso=\E%!1\E[m$<2>\E%!0, rmul=\E%!1\E[m$<2>\E%!0,
sgr=\E%%!1\E[%?%p1%t;7;5%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;
%?%p5%t<0%;%?%p6%t;1%;m$<2>\E%%!0,
sgr0=\E%!1\E[m$<2>\E%!0, smso=\E%!1\E[7;5m$<2>\E%!0,
smul=\E%!1\E[4m$<2>\E%!0,
# Tektronix 4207 with sysline. In the ancestral termcap file this was 4107-s;
# see the note attached to tek4207.
tek4207-s|Tektronix 4207 with sysline but no memory,
eslok, hs,
dsl=\E7\E[?6l\E[2K\E[?6h\E8, fsl=\E[?6h\E8,
is1=\E%!1\E[2;32r\E[132D\E[2g\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8
C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[J,
is2=\E7\E[?6l\E[2K\E[?6h\E8,
tsl=\E7\E[?6l\E[2K\E[;%i%df, use=tek4107,
# The 4110 series may be a wonderful graphics series, but they make the 4025
# look good for screen editing. In the dialog area, you can't move the cursor
# off the bottom line. Out of the dialog area, ^K moves it up, but there
# is no way to scroll.
#
# Note that there is a floppy for free from Tek that makes the
# 4112 emulate the vt52 (use the vt52 termcap). There is also
# an expected enhancement that will use ANSI standard sequences.
#
# 4112 in non-dialog area pretending to scroll. It really wraps
# but vi is said to work (more or less) in this mode.
#
# 'vi' works reasonably well with this entry.
#
otek4112|o4112-nd|otek4113|otek4114|old tektronix 4110 series,
am,
cols#80, lines#34,
bel=^G, clear=\E^L, cr=\r, cub1=^H, cud1=\n, cuu1=^K, ind=\n,
rmcup=\EKA1\ELV1, smcup=\EKA0\ELV0\EMG0,
# The 4112 with the ANSI compatibility enhancement
tek4112|tek4114|tektronix 4110 series,
OTbs, am, db,
cols#80, lines#34,
cbt=\E[Z, clear=\E[2J\E[0;0H, cub1=^H, cud1=\E[B,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\EM, dch1=\E[P,
dl1=\E[M, ed=\E[0J, el=\E[0K, ich1=\E[@, il1=\E[L,
ind=\E7\E[0;0H\E[M\E8, is2=\E3!1, ri=\E7\E[0;0H\E[L\E8,
rmso=\E[m, rmul=\E[m, sgr0=\E[m, smso=\E[7m, smul=\E[4m,
tek4112-nd|4112 not in dialog area,
OTns,
cuu1=^K, use=tek4112,
tek4112-5|4112 in 5 line dialog area,
lines#5, use=tek4112,
# (tek4113: this used to have "<cuf1=\LM1\s\LM0>", someone's mistake;
# removed "<smacs=\E^N>, <rmacs=\E^O>", which had been commented out in 8.3.
# Note, the !0 and !1 sequences in <rmcup>/<smcup>/<cnorm>/<civis> were
# previously \0410 and \0411 sequences...I don't *think* they were supposed
# to be 4-digit octal -- esr)
tek4113|tektronix 4113 color graphics with 5 line dialog area,
OTbs, am, da, eo,
cols#80, lines#5,
clear=\ELZ, cub1=^H, cud1=\n, cuf1=\ELM1 \ELM0,
flash=\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4
\ERBA4\ERBA4\ERB0,
is2=\EKA1\ELL5\ELV0\ELV1, uc=\010\ELM1_\ELM0,
tek4113-34|tektronix 4113 color graphics with 34 line dialog area,
lines#34,
is2=\EKA1\ELLB2\ELV0\ELV1, use=tek4113,
# :ns: left off to allow vi visual mode. APL font (:as=\E^N:/:ae=\E^O:) not
# supported here. :uc: is slow, but looks nice. Suggest setenv MORE -up .
# :vb: needs enough delay to let you see the background color being toggled.
tek4113-nd|tektronix 4113 color graphics with no dialog area,
OTbs, am, eo,
cols#80, it#8, lines#34,
clear=\E^L, cub1=^H, cud1=\n, cuf1=^I, cuu1=^K,
cvvis=\ELZ\EKA0,
flash=\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4
\ERBA4\ERBA4\ERB0,
home=\ELF7l\177 @, ht=^I, is2=\ELZ\EKA0\ELF7l\177 @,
ll=\ELF hl @, rmso=\EMT1, smso=\EMT2, uc=\010\EMG1_\EMG0,
# This entry is from Tek. Inc. (Brian Biehl)
# (tek4115: :bc: renamed to :le:, <rmam>/<smam> added based on init string -- esr)
otek4115|Tektronix 4115,
OTbs, am, da, db, eo,
cols#80, it#8, lines#34,
cbt=\E[Z, clear=\E[H\E[2J,
cnorm=\E%!0\ELBG8\E%!1\E[34;1H, cub1=\E[D, cud1=\E[B,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
cvvis=\E%!0\ELBB2\E%!1, dch1=\E[P, dl1=\E[M, ed=\E[J,
el=\E[K, home=\E[H, ht=^I, if=/usr/share/tabset/vt100,
il1=\E[L,
is2=\E%!0\E%\014\ELV0\EKA1\ELBB2\ENU@=\ELLB2\ELM0\ELV1\EKYA?
\E%!1\E[<1l\E[?7h\E[?8h\E[34;1H\E[34B\E[m,
kbs=^H, ri=\EM, rmam=\E[?7l,
rmcup=\E%!0\ELBG8\E%!1\E[34;1H\E[J, rmir=\E[4l,
rmkx=\E>, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smam=\E[?7h,
smcup=\E%!0\ELBB2\E%!1, smir=\E[4h, smkx=\E=, smso=\E[7m,
smul=\E[4m,
tek4115|newer tektronix 4115 entry with more ANSI capabilities,
am, xon,
cols#80, lines#34,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
cr=\r, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, hpa=\E[%p1%{1}%+%dG,
ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL,
il1=\E[L, ind=\n, invis=\E[8m, kbs=^H, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, rev=\E[7m,
rmam=\E[?7l, rmso=\E[m, rmul=\E[m,
sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1;
%;%?%p7%t8;%;m,
sgr0=\E[m, smam=\E[?7h, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
vpa=\E[%p1%{1}%+%dd, use=ansi+rep,
# The tek4125 emulates a vt100 incorrectly - the scrolling region
# command is ignored. The following entry replaces <csr> with the needed
# <il>, <il>, and <smir>; removes some cursor pad commands that the tek4125
# chokes on; and adds a lot of initialization for the tek dialog area.
# Note that this entry uses all 34 lines and sets the cursor color to green.
# Steve Jacobson 8/85
# (tek4125: there were two "\!"s in the is that I replaced with "\E!";
# commented out, <smir>=\E1 because there's no <rmir> -- esr)
tek4125|tektronix 4125,
lines#34,
csr@, dl1=\E[1M, il1=\E[1L,
is2=\E%\E!0\EQD1\EUX03\EKA\ELBB2\ELCE0\ELI100\ELJ2\ELLB2
\ELM0\ELS1\ELX00\ELV1\E%\E!1\E>\E[?3l\E[?4l\E[?5l\E[?7h
\E[?8h,
rc@, sc@, smkx=\E=, use=vt100+4bsd,
# From: <jcoker@ucbic>
# (tek4207: This was the termcap file's entry for the 4107/4207, but SCO
# supplied another, less capable 4107 entry. So we'll use that for 4107 and
# note that if jcoker wasn't confused you may be able to use this one.
# I merged in <msgr>,<ind>,<ri>,<invis>,<tbc> from a BRL entry -- esr)
tek4207|Tektronix 4207 graphics terminal with memory,
am, bw, mir, msgr, ul, xenl,
cols#80, it#8, lines#32,
blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J$<156/>,
cub1=^H, cud1=\n, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu1=\EM, dch1=\E[P$<4/>, dl1=\E[M$<3/>, ed=\E[J,
el=\E[K$<5/>, home=\E[H, ht=^I, ich1=\E[@$<4/>,
il1=\E[L$<3/>, ind=\E[S, invis=\E[=6;<5,
is2=\E%!0\ELBP0\E%!1\E[H\E[2g\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8
C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[J,
kcub1=\E[D, kcud1=\ED, kcuf1=\E[C, kcuu1=\EM, khome=\E[H,
rev=\E[7m, ri=\E[T,
rmcup=\E[?6h\E%!0\ELBP0\E%!1\E[32;1f, rmso=\E[m,
rmul=\E[m, sgr0=\E[m, smcup=\E[?6l\E[H\E[J, smso=\E[7m,
smul=\E[4m, tbc=\E[1g,
# From: <carolyn@dali.berkeley.edu> Thu Oct 31 12:54:27 1985
# (tek4404: There was a "\!" in <smcup> that I replaced with "\E!".
# Tab had been given as \E2I,that must be the tab-set capability -- esr)
tek4404|tektronix 4404,
OTbs,
cols#80, it#8, lines#32,
blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J,
csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[1M,
ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\E[2I, il1=\E[1L,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, rc=\E8,
rmcup=\E[1;1H\E[0J\E[?6h\E[?1l, rmir=\E[4l,
rmkx=\E[?1h, rmso=\E[27m, rmul=\E[m, sc=\E7, sgr0=\E[m,
smcup=\E%\E!1\E[1;32r\E[?6l\E>, smir=\E[4h,
smkx=\E[?1l, smso=\E[7m, smul=\E[4m,
# Some unknown person wrote:
# I added the is string - straight Unix has ESC ; in the login
# string which sets a ct8500 into monitor mode (aka 4025 snoopy
# mode). The is string here cleans up a few things (but not
# everything).
ct8500|tektronix ct8500,
am, bw, da, db,
cols#80, lines#25,
bel=^G, cbt=\E^I, clear=\E^E, cr=\r, cub1=^H, cud1=\n,
cuf1=\ES, cup=\E|%p1%{32}%+%c%p2%{32}%+%c, cuu1=\ER,
dch1=\E^], dl1=\E\r, ed=\E^U, el=\E^T, ht=^I, ich1=\E^\,
il1=\E^L, ind=\n, is2=\037\EZ\Ek, ri=\E^A, rmso=\E\s,
rmul=\E\s, sgr0=\E\s, smso=\E$, smul=\E!,
# Tektronix 4205 terminal.
#
# am is not defined because the wrap around occurs not when the char.
# is placed in the 80'th column, but when we are attempting to type
# the 81'st character on the line. (esr: hmm, this is like the vt100
# version of xenl, perhaps am + xenl would work!)
#
# Bold, dim, and standout are simulated by colors and thus not allowed
# with colors. The tektronix color table is mapped into the RGB color
# table by setf/setb. All colors are reset to factory specifications by oc.
# The <initc> cap uses RGB notation to define colors. for arguments 1-3 the
# interval (0-1000) is broken into 8 smaller sub-intervals (125). Each sub-
# interval then maps into pre-defined value.
tek4205|tektronix 4205,
ccc, mir, msgr,
colors#8, cols#80, it#8, lines#30, ncv#49, pairs#63,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[=7;<4m, cbt=\E[Z,
clear=\E[2J\E[H, cr=\r, cub=\E[%p1%dD, cub1=\E[D,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch1=\E[1P, dim=\E[=1;<6m, dl=\E[%p1%dM, dl1=\E[1M,
ech=\E%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E)0,
home=\E[H, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[1L,
ind=\ED,
initc=\E%%!0\ETF4%?%p1%{0}%=%t0%e%p1%{1}%=%t4%e%p1%{2}%=%t3
%e%p1%{3}%=%t5%e%p1%{4}%=%t2%e%p1%{5}%=%t6%e%p1%{6}%=
%t7%e1%;%?%p2%{125}%<%t0%e%p2%{250}%<%tA2%e%p2%{375}%<
%tA?%e%p2%{500}%<%tC8%e%p2%{625}%<%tD4%e%p2%{750}%<%tE
1%e%p2%{875}%<%tE\:%eF4%;%?%p3%{125}%<%t0%e%p3%{250}%<
%tA2%e%p3%{375}%<%tA?%e%p3%{500}%<%tC8%e%p3%{625}%<%tD
4%e%p3%{750}%<%tE1%e%p3%{875}%<%tE\:%eF4%;%?%p4%{125}
%<%t0%e%p4%{250}%<%tA2%e%p4%{375}%<%tA?%e%p4%{500}%<%t
C8%e%p4%{625}%<%tD4%e%p4%{750}%<%tE1%e%p4%{875}%<%tE\:
%eF4%;\E%%!1,
invis=\E[=6;<5, is1=\E%!0\ETM1\E%!1\E[m, kbs=^H,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\EOA,
kf1=\EOB, kf2=\EOC, kf3=\EOD, kf4=\EP, kf5=\EQ, kf6=\ER,
kf7=\ES,
oc=\E%!0\ETFB000001F4F4F42F40030F404A4C<F450F4F46F40F47F4F40
\E%!1,
op=\E[39;40m, rev=\E[7m, ri=\EM, rmacs=^O, rmcup=,
rmir=\E[4l, rmso=\E[=0;<1m, rmul=\E[24m,
setb=\E[=%?%p1%{0}%=%t0m%e%p1%{1}%=%t4m%e%p1%{2}%=%t3m%e%p1
%{3}%=%t5m%e%p1%{4}%=%t2m%e%p1%{5}%=%t6m%e%p1%{6}%=%t7m
%e1m%;,
setf=\E[<%?%p1%{0}%=%t0m%e%p1%{1}%=%t4m%e%p1%{2}%=%t3m%e%p1
%{3}%=%t5m%e%p1%{4}%=%t2m%e%p1%{5}%=%t6m%e%p1%{6}%=%t7m
%e1m%;,
sgr0=\E[=0;<1m\E[24;25;27m\017, smacs=^N,
smcup=\E%%!1\E[?6l\E[2J, smir=\E[4h, smso=\E[=2;<3m,
smul=\E[4m, tbc=\E[1g,
#### Teletype (tty)
#
# These are the hardcopy Teletypes from before AT&T bought the company,
# clattering electromechanical dinosaurs in Bakelite cases that printed on
# pulpy yellow roll paper. If you remember these you go back a ways.
# Teletype-branded VDTs are listed in the AT&T section.
#
# The earliest UNIXes were designed to use these clunkers; nroff and a few
# other programs still default to emitting codes for the Model 37.
#
tty33|tty35|model 33 or 35 teletype,
hc, os, xon,
cols#72,
bel=^G, cr=\r, cud1=\n, ind=\n,
tty37|model 37 teletype,
OTbs, hc, os, xon,
bel=^G, cr=\r, cub1=^H, cud1=\n, cuu1=\E7, hd=\E9, hu=\E8,
ind=\n,
# There are known to be at least three flavors of the tty40, all seem more
# like IBM half duplex forms fillers than ASCII terminals. They have lots of
# awful braindamage, such as printing a visible newline indicator after each
# newline. The 40-1 is a half duplex terminal and is hopeless. The 40-2 is
# braindamaged but has hope and is described here. The 40-4 is a 3270
# lookalike and beyond hope. The terminal has visible bell but I don't know
# it - it's null here to prevent it from showing the BL character.
# There is an \EG in <nl> because of a bug in old vi (if stty says you have
# a "newline" style terminal (-crmode) vi figures all it needs is nl
# to get crlf, even if <cr> is not ^M.)
# (tty40: removed obsolete ":nl=\EG\EB:", it's just do+cr -- esr)
tty40|ds40|ds40-2|dataspeed40|teletype dataspeed 40/2,
OTbs, xon,
cols#80, lines#24,
clear=\EH$<20>\EJ$<80>, cr=\EG, cub1=^H, cud1=\EB,
cuf1=\EC, cuu1=\E7, dch1=\EP$<50>, dl1=\EM$<50>,
ed=\EJ$<75>, home=\EH$<10>, ht=\E@$<10>, hts=\E1,
ich1=\E\^$<50>, il1=\EL$<50>, ind=\ES$<20>, kbs=^],
kcub1=^H, mc4=^T, mc5=\022$<2000>, ri=\ET$<10>, rmso=\E4,
rs2=\023\ER$<60>, smso=\E3, tbc=\EH\E2$<80>,
tty43|model 43 teletype,
OTbs, am, hc, os, xon,
cols#132,
bel=^G, cr=\r, cub1=^H, cud1=\n, ind=\n, kbs=^H,
#### Tymshare
#
# You can add <is2=\E<> to put this 40-column mode, though I can't
# for the life of me think why anyone would want to.
scanset|sc410|sc415|Tymshare Scan Set,
am, bw, msgr,
cols#80, lines#24,
acsc=j%k4l<m-q\,x5, bel=^G, clear=\EH\EJ, cr=\r, cub1=^H,
cud1=\n, cuf1=^I, cup=\EY%p1%{32}%+%c%p2%{32}%+%c,
cuu1=^K, ed=\EJ, el=\EK, home=\EH, ind=\n, kcub1=\ED,
kcud1=\EB, kcuf1=\EC, kcuu1=\EA, mc0=\E;3, mc4=\E;0,
mc5=\E;0, rc=^C, rmacs=^O, rs1=\E>, sc=^B, smacs=^N,
#### Volker-Craig (vc)
#
# If you saw a Byte Magazine cover with a terminal on it during the early
# 1980s, it was probably one of these. Carl Helmers liked them because
# they could crank 19.2 and were cheap (that is, he liked them until he tried
# to program one...)
#
# Missing in vc303a and vc303 descriptions: they scroll 2 lines at a time
# every other linefeed.
vc303|vc103|vc203|volker-craig 303,
OTbs, OTns, am,
cols#80, lines#24,
bel=^G, clear=\014$<40>, cr=\r, cub1=^H, cud1=\n, cuf1=^I,
cuu1=^N, home=\013$<40>, kcub1=^H, kcud1=\n, kcuf1=^I,
kcuu1=^N, ll=\017$<1>W,
vc303a|vc403a|volker-craig 303a,
clear=\030$<40>, cuf1=^U, cuu1=^Z, el=\026$<20>,
home=\031$<40>, kcuf1=^U, kcuu1=^Z, ll=^P, use=vc303,
# (vc404: removed obsolete ":ma=^Z^P^U :" -- esr)
vc404|volker-craig 404,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=\030$<40>, cr=\r, cub1=^H, cud1=\n, cuf1=^U,
cup=\020%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z,
ed=\027$<40>, el=\026$<20>, home=\031$<40>, ind=\n,
kcub1=^H, kcud1=\n, kcuf1=^U, kcuu1=^Z,
vc404-s|volker-craig 404 w/standout mode,
cud1=\n, rmso=^O, smso=^N, use=vc404,
# From: <wolfgang@cs.sfu.ca>
# (vc414: merged in cup/dl1/home from an old vc414h-noxon)
vc414|vc414h|Volker-Craig 414H in sane escape mode.,
OTbs, am,
cols#80, lines#24,
clear=\E\034$<40>, cud1=\E^K, cuf1=^P,
cup=\E\021%p2%c%p1%c$<40>, cuu1=\E^L, dch1=\E3,
dl1=\E\023$<40>, ed=\E^X, el=\E\017$<10/>, home=\E^R,
ich1=\E\:, il1=\E\032$<40>, kcub1=^H, kcud1=\E^K, kcuf1=^P,
kcuu1=\E^L, kf0=\EA, kf1=\EB, kf2=\EC, kf3=\ED, kf4=\EE,
kf5=\EF, kf6=\EG, kf7=\EH, khome=\E^R, lf0=PF1, lf1=PF2,
lf2=PF3, lf3=PF4, lf4=PF5, lf5=PF6, lf6=PF7, lf7=PF8,
rmso=\E^_, smso=\E^Y,
vc415|volker-craig 415,
clear=^L, use=vc404,
######## OBSOLETE PERSONAL-MICRO CONSOLES AND EMULATIONS
#
#### IBM PC and clones
#
# The pcplot IBM-PC terminal emulation program is really messed up. It is
# supposed to emulate a vt-100, but emulates the wraparound bug incorrectly,
# doesn't support scrolling regions, ignores add line commands, and ignores
# delete line commands. Consequently, the resulting behavior looks like a
# crude adm3a-type terminal.
# Steve Jacobson 8/85
pcplot|pc-plot terminal emulation program,
xenl@,
csr@, dl@, dl1@, il@, il1@, rc@, sc@, use=vt100+4bsd,
# KayPro II from Richard G Turner <rturner at Darcom-Hq.ARPA>
# I've found that my KayPro II, running MDM730, continues to emulate an
# ADM-3A terminal, just like I was running TERM.COM. On our 4.2 UNIX
# system the following termcap entry works well:
# I have noticed a couple of minor glitches, but nothing I can't work
# around. (I added two capabilities from the BRL entry -- esr)
kaypro|kaypro2|kaypro II,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=\032$<1/>, cr=\r, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dl1=\ER, ed=^W,
el=^X, home=^^, il1=\EE, ind=\n, kcud1=\n, kcuf1=^L, kcuu1=^K,
# From IBM, Thu May 5 19:35:27 1983
# (ibmpc: commented out <smir>=\200R because we don't know <rmir> -- esr)
ibm-pc|ibm5051|5051|IBM Personal Computer (no ANSI.SYS),
OTbs, am,
cols#80, lines#24,
bel=^G, clear=^L^K, cr=\r^^, cub1=^], cud1=\n, cuf1=^\,
cuu1=^^, home=^K, ind=\n$<10>, kcud1=^_,
ibmpc|wy60-PC|wyse60-PC|IBM PC/XT running PC/IX,
OTbs, am, bw, eo, hs, km, msgr, ul,
cols#80, it#8, lines#24,
acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x
\263,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\Ec, cr=\r,
cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
home=\E[H, hpa=\E[%i%p1%dG, ind=\E[S\E[B,
indn=\E[%p1%dS\E[%p1%dB, invis=\E[30;40m, kbs=^H,
kcbt=^], kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=^?, kend=\E[Y, kf1=\240, kf10=\251, kf2=\241, kf3=\242,
kf4=\243, kf5=\244, kf6=\245, kf7=\246, kf8=\247, kf9=\250,
khome=\E[H, kich1=\E[^H, knp=\E[U, kpp=\E[V, ll=\E[24;1H,
nel=\r, rev=\E[7m, ri=\E[T\E[A, rin=\E[%p1%dT\E[%p1%dA,
rmso=\E[m, rmul=\E[m,
sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1
%;%?%p7%t30;40%;m,
sgr0=\E[m, smso=\E[7m, smul=\E[4m,
#### Apple II
#
# Apple II firmware console first, then various 80-column cards and
# terminal emulators. For two cents I'd toss all these in the UFO file
# along with the 40-column apple entries.
#
# From: brsmith@umn-cs.cs.umn.edu (Brian R. Smith) via BRL
# 'it#8' tells UNIX that you have tabs every 8 columns. This is a
# function of TIC, not the firmware.
# The clear key on a IIgs will do something like clear-screen,
# depending on what you're in.
appleIIgs|appleIIe|appleIIc|Apple 80 column firmware interface,
OTbs, am, bw, eo, msgr,
cols#80, it#8, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=^\,
cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^],
home=^Y, ht=^I, ind=^W, kbs=^H, kclr=^X, kcub1=^H, kcud1=\n,
kcuf1=^U, kcuu1=^K, kdch1=^?, nel=\r^W, ri=^V, rmso=^N,
smso=^O,
# Apple //e with 80-column card, entry from BRL
# The modem interface is permitted to discard LF (maybe DC1), otherwise
# passing characters to the 80-column firmware via COUT (PR#3 assumed).
# Auto-wrap does not work right due to newline scrolling delay, which also
# requires that you set "stty cr2".
# Note: Cursor addressing is only available via the Pascal V1.1 entry,
# not via the BASIC PR#3 hook. All this nonsense can be avoided only by
# using a terminal emulation program instead of the built-in firmware.
apple2e|Apple //e,
bw, msgr,
cols#80, lines#24,
bel=^G, clear=\014$<100/>, cub1=^H, cud1=\n, cuu1=^_,
ed=\013$<4*/>, el=\035$<4/>, home=^Y, ht=^I, ind=^W,
is2=^R^N, kbs=^H, kcub1=^H, kcud1=\n, kcuf1=^U, kcuu1=^K,
nel=\r$<100/>, rev=^O, ri=^V, rmso=^N, rs1=^R^N, sgr0=^N,
smso=^O,
# mcvax!vu44!vu45!wilcke uses the "ap" entry together with Ascii Express Pro
# 4.20, with incoming and outgoing terminals both on 0, emulation On.
apple2e-p|Apple //e via Pascal,
cup=\036%p2%{32}%+%c%p1%{32}%+%c, kbs=^H, kcub1=^H,
kcud1=\n, use=apple2e,
# (ASCII Express) MouseTalk "Standard Apple //" emulation from BRL
# Enable DC3/DC1 flow control with "stty ixon -ixany".
apple-ae|ASCII Express,
OTbs, am, bw, msgr, nxon, xon,
cols#80, it#8, lines#24,
bel=\007$<500/>, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=^U,
cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^],
home=^Y, ind=^W, is2=^R^N, kclr=^X, kcub1=^H, kcud1=\n,
kcuf1=^U, kcuu1=^K, rev=^O, ri=^V, rmso=^N, rs1=^R^N, sgr0=^N,
smso=^O,
appleII|apple ii plus,
OTbs, am,
cols#80, it#8, lines#24,
clear=^L, cnorm=^TC2, cub1=^H, cud1=\n, cuf1=^\,
cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, cvvis=^TC6,
ed=^K, el=^], flash=\024G1$<200/>\024T1, home=\E^Y, ht=^I,
is2=^TT1^N, kcud1=\n, kcuf1=^U, rmso=^N, sgr0=^N, smso=^O,
# Originally by Gary Ford 21NOV83
# From: <ee178aci%sdcc7@SDCSVAX.ARPA> Fri Oct 11 21:27:00 1985
apple-80|apple II with smarterm 80 col,
OTbs, am, bw,
cols#80, lines#24,
cbt=^R, clear=\014$<10*/>, cr=\r$<10*/>, cub1=^H, cud1=\n,
cuf1=^\, cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_,
ed=\013$<10*/>, el=\035$<10/>, home=^Y,
apple-soroc|apple emulating soroc 120,
am,
cols#80, lines#24,
bel=^G, clear=\E*$<300>, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, ed=\EY, el=\ET,
home=^^, ind=\n, kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K,
# From Peter Harrison, Computer Graphics Lab, San Francisco
# ucbvax!ucsfmis!harrison .....uucp
# ucbvax!ucsfmis!harrison@BERKELEY .......ARPA
# "These two work. If you don't have the inverse video chip for the
# Apple with videx then remove the :so: and :se: fields."
# (apple-videx: this used to be called DaleApple -- esr)
apple-videx|Apple with videx videoterm 80 column board with inverse video,
OTbs, am, xenl,
cols#80, it#8, lines#24,
clear=\014$<300/>, cub1=^H, cud1=\n, cuf1=^\,
cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^],
home=^Y, ht=^I, kcub1=^H, kcud1=\n, kcuf1=^U, khome=^Y,
rmso=^Z2, sgr0=^Z2, smso=^Z3,
# My system [for reference] : Apple ][+, 64K, Ultraterm display card,
# Apple Cat ][ 212 modem, + more all
# controlled by ASCII Express: Pro.
# From Dave Shaver <isucs1!shaver>
apple-uterm-vb|Videx Ultraterm for Apple micros with Visible Bell,
OTbs, am, eo, xt,
cols#80, lines#24,
acsc=, clear=^L, cuf1=^\,
cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^],
flash=^W35^W06, home=^Y,
is2=^V4^W06\017\rVisible Bell Installed.\016\r\n,
rmso=^N, smso=^O,
apple-uterm|Ultraterm for Apple micros,
OTbs, am, eo, xt,
cols#80, lines#24,
acsc=, clear=^L, cuf1=^\,
cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^],
home=^Y, is2=^V4^W06\016, rmso=^N, smso=^O,
# from trwrba!bwong (Bradley W. Wong):
#
# This entry assumes that you are using an apple with the UCSD Pascal
# language card. SYSTEM.MISCINFO is assumed to be the same as that
# supplied with the standard apple except that screenwidth should be set
# using SETUP to 80 columns. Note that the right arrow is not mapped in
# this termcap entry. This is because that key, on the Apple, transmits
# a ^U and would thus preempt the more useful "up" function of vi.
#
# HMH 2/23/81
apple80p|80-column apple with Pascal card,
am, bw,
cols#80, lines#24,
clear=^Y^L, cuf1=^\\:,
cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^],
home=^Y, kcub1=^H,
#
# Apple II+ equipped with Videx 80 column card
#
# Terminfo from ihnp4!ihu1g!djc1 (Dave Christensen) via BRL;
# manually converted by D A Gwyn
#
# DO NOT use any terminal emulation with this data base, it works directly
# with the Videx card. This has been tested with vi 1200 baud and works fine.
#
# This works great for vi, except I've noticed in pre-R2, ^U will scroll back
# 1 screen, while in R2 ^U doesn't.
# For inverse alternate character set add:
# <smacs>=^O:<rmacs>=^N:
# (apple-v: added it#8 -- esr)
apple-videx2|Apple II+ w/ Videx card (similar to Datamedia h1520),
am, xenl,
cols#80, it#8, lines#24,
bel=\007$<100/>, clear=\014$<16*/>, cr=\r, cub1=^H,
cud1=\n, cuf1=^\, cup=\036%p2%{32}%+%c%p1%{32}%+%c,
cuu1=^_, ed=\013$<16*/>, el=^], home=^Y, ht=\011$<8/>,
ind=\n, kbs=^H, kcub1=^H, kcud1=\n, kcuf1=^\, kcuu1=^_,
khome=^Y, rmso=^Z2, smso=^Z3,
apple-videx3|vapple|Apple II with 80 col card,
OTbs, am,
cols#80, lines#24,
clear=\Ev, cub1=\ED, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, el=\Ex,
home=\EH, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA,
kf0=\EP, kf1=\EQ, kf2=\ER, kf3=\E\s, kf4=\E!, kf5=\E", kf6=\E#,
kf7=\E$, kf8=\E%%, kf9=\E&, khome=\EH,
#From: decvax!cbosgd!cbdkc1!mww Mike Warren via BRL
aepro|Apple II+ running ASCII Express Pro--vt52,
OTbs,
cols#80, lines#24,
clear=\014$<300/>, cub1=\ED, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ,
el=\EK, home=\EH,
# UCSD addition: Yet another termcap from Brian Kantor's Micro Munger Factory
apple-vm80|ap-vm80|apple with viewmax-80,
OTbs,
cols#80, lines#24,
clear=\014$<300/>, cuf1=^\\:,
cup=\036%p1%{32}%+%c%p2%{32}%+%c$<100/>, cuu1=^_,
ed=\013$<300/>, el=^], home=\031$<200/>,
#### Apple Lisa & Macintosh
#
# (lisa: changed <cvvis> to <cnorm> -- esr)
lisa|apple lisa console display (black on white),
OTbs, am, eo, msgr,
cols#88, it#8, lines#32,
acsc=jdkclfmenbqattuvvuwsx`, civis=\E[5h, clear=^L,
cnorm=\E[5l, cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M,
ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich1=\E[@, il1=\E[L,
is2=\E>\E[m\014, kbs=^H, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, rmacs=\E[10m, rmso=\E[m, rmul=\E[m,
sgr0=\E[m, smacs=\E[11m, smso=\E[7m, smul=\E[4m,
liswb|apple lisa console display (white on black),
is2=\E>\E[0;7m\014, rmso=\E[0;7m, rmul=\E[0;7m,
smso=\E[m, smul=\E[4m, use=lisa,
# lisaterm from ulysses!gamma!epsilon!mb2c!jed (John E. Duncan III) via BRL;
# <is2> revised by Ferd Brundick <fsbrn@BRL.ARPA>
#
# These entries assume that the 'Auto Wraparound' is enabled.
# Xon-Xoff flow control should also be enabled.
#
# The vt100 uses :rs2: and :rf: rather than :is2:/:tbc:/:hts: because the tab
# settings are in non-volatile memory and don't need to be reset upon login.
# Also setting the number of columns glitches the screen annoyingly.
# You can type "reset" to get them set.
#
lisaterm|Apple Lisa or Lisa/2 running LisaTerm vt100 emulation,
OTbs, OTpt, am, xenl, xon,
OTkn#4, cols#80, it#8, lines#24, vt#3,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, ed=\E[J,
el=\E[K, home=\E[H, ht=^I, hts=\EH, ind=\n, kbs=^H, kcub1=\EOD,
kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf0=\EOP, kf1=\EOQ,
kf2=\EOR, kf3=\EOS, lf0=F1, lf1=F2, lf2=F3, lf3=F4, rc=\E8,
rev=\E[7m, ri=\EM, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
rs1=\E>\E[?1l\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r,
sc=\E7, sgr0=\E[m, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,
tbc=\E[3g,
# Lisaterm in 132 column ("wide") mode.
lisaterm-w|Apple Lisa with Lisaterm in 132 column mode,
cols#132,
kbs=^H, kcub1=^H, kcud1=\n, use=lisaterm,
# Although MacTerminal has insert/delete line, it is commented out here
# since it is much faster and cleaner to use the "lock scrolling region"
# method of inserting and deleting lines due to the MacTerminal implementation.
# Also, the "Insert/delete ch" strings have an extra character appended to them
# due to a bug in MacTerminal V1.1. Blink is disabled since it is not
# supported by MacTerminal.
mac|macintosh|Macintosh with MacTerminal,
xenl,
OTdN#30,
blink@, dch1=\E[P$<7/>, ich1=\E[@$<9/>, ip=$<7/>, use=lisa,
# Lisaterm in 132 column ("wide") mode.
mac-w|macterminal-w|Apple Macintosh with MacTerminal in 132 column mode,
cols#132, use=mac,
#### Radio Shack/Tandy
#
# (coco3: This had "ta" used incorrectly as a boolean and bl given as "bl#7".
# I read these as mistakes for ":it#8:" and ":bl=\007:" respectively -- esr)
# From: <{pbrown,ctl}@ocf.berkeley.edu> 12 Mar 90
coco3|os9LII|Tandy CoCo3 24*80 OS9 Level II,
OTbs, am,
cols#80, it#8, lines#24,
bel=^G, blink=^_", bold=\E\:\001, civis=^E\s,
clear=\014$<5*/>, cnorm=^E!, cub1=^H, cud1=\n, cuf1=^F,
cup=\002%p2%{32}%+%c%p1%{32}%+%c$<2/>, cuu1=^I,
dl1=^_1, ed=^K, el=^D, home=^A, il1=^_0, kcub1=^H, kcud1=\n,
kcuf1=^I, kcuu1=^L, rev=^_\s, rmso=^_!, rmul=^_#,
sgr0=\037!\E\:\0, smso=^_\s, smul=^_",
# (trs2: removed obsolete ":nl=^_:" -- esr)
trs2|trsII|trs80II|Radio Shack Model II using P&T CP/M,
OTbs, am, msgr,
cols#80, it#8, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=^_, cuf1=^],
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=^^, dl1=^K, ed=^B,
el=^A, home=^F, ht=^I, il1=^D, ind=\n, kbs=^H, kcub1=^\,
kcud1=^_, kcuf1=^], kcuu1=^^, rmso=^O, sgr0=^O, smso=^N,
# From: Kevin Braunsdorf <ksb@mentor.cc.purdue.edu>
# (This had extension capabilities
# :BN=\E[?33h:BF=\E[?33l:UC=\E[_ q:BC=\E[\177 q:\
# :CN=\ERC:CF=\ERc:NR=\ERD:NM=\ER@:
# I also deleted the unnecessary ":kn#2:", ":sg#0:" -- esr)
trs16|trs-80 model 16 console,
OTbs, am,
cols#80, it#8, lines#24,
acsc=jak`l_mbquvewcxs, bel=^G, civis=\ERc, clear=^L,
cnorm=\ERC, cr=\r, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EQ,
dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I, ich1=\EP, il1=\EL,
ind=\n, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA,
kf0=^A, kf1=^B, kf2=^D, kf3=^L, kf4=^U, kf5=^P, kf6=^N, kf7=^S,
khome=^W, lf0=f1, lf1=f2, lf2=f3, lf3=f4, lf4=f5, lf5=f6, lf6=f7,
lf7=f8, mc4=\E]+, mc5=\E]=, rmacs=\ERg, rmso=\ER@, sgr0=\ER@,
smacs=\ERG, smso=\ERD,
#### Commodore Business Machines
#
# Formerly located in West Chester, PA; went spectacularly bust in 1994
# after years of shaky engineering and egregious mismanagement. Made one
# really nice machine (the Amiga) and boatloads of nasty ones (PET, C-64,
# C-128, VIC-20). The C-64 is said to have been the most popular machine
# ever (most units sold); they can still be found gathering dust in closets
# everywhere.
#
# From: Kent Polk <kent@swrinde.nde.swri.edu>, 30 May 90
# Added a few more entries, converted caret-type control sequence (^x) entries
# to '\0xx' entries since a couple of people mentioned losing '^x' sequences.
# Corrections by Ty Sarna <tsarna@endicor.com>, Sat Feb 28 18:55:15 1998
#
# :as:, :ae: Support for alternate character sets.
# :ve=\E[\040p:vi=\E[\060\040p: cursor visible/invisible.
# :xn: vt100 kludginess at column 80/NEWLINE ignore after 80 cols(Concept)
# This one appears to fix a problem I always had with a line ending
# at 'width+1' (I think) followed by a blank line in vi. The blank
# line tended to disappear and reappear depending on how the screen
# was refreshed. Note that this is probably needed only if you use
# something like a Dnet Fterm with the window sized to some peculiar
# dimension larger than 80 columns.
# :k0=\E9~: map F10 to k0 - could have F0-9 -> k0-9, but ... F10 was 'k;'
# (amiga: removed obsolete :kn#10:,
# also added empty <acsc> to suppress a warning --esr)
amiga|Amiga ANSI,
OTbs, am, bw, xenl,
cols#80, lines#24,
acsc=, bel=^G, blink=\E[7;2m, bold=\E[1m, cbt=\E[Z,
civis=\E[0 p, clear=\E[H\E[J, cnorm=\E[ p, cub=\E[%p1%dD,
cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA,
cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H,
ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\E[S,
invis=\E[8m, is2=\E[20l, kbs=^H, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kf0=\E[9~, kf1=\E[0~, kf2=\E[1~,
kf3=\E[2~, kf4=\E[3~, kf5=\E[4~, kf6=\E[5~, kf7=\E[6~,
kf8=\E[7~, kf9=\E[8~, rev=\E[7m, ri=\E[T, rmacs=^O,
rmso=\E[m, rmul=\E[m, rs1=\Ec, sgr0=\E[m, smacs=^N,
smso=\E[7m, smul=\E[4m, use=ecma+index,
# From: Hans Verkuil <hans@wyst.hobby.nl>, 4 Dec 1995
# (amiga: added empty <acsc> to suppress a warning.
# I'm told this entry screws up badly with AS225, the Amiga
# TCP/IP package once from Commodore, and now sold by InterWorks.--esr)
amiga-h|Hans Verkuil's Amiga ANSI,
OTbs, bw, msgr,
cols#80, lines#24,
acsc=, bel=^G, blink=\2337;2m, bold=\2331m, cbt=\233Z,
civis=\2330 p, clear=\233H\233J, cnorm=\233 p, cr=\r,
cub=\233%p1%dD, cub1=\233D, cud=\233%p1%dB, cud1=\233B,
cuf=\233%p1%dC, cuf1=\233C, cup=\233%i%p1%d;%p2%dH,
cuu=\233%p1%dA, cuu1=\233A, dch=\233%p1%dP, dch1=\233P,
dim=\2332m, ech=\233%p1%dP, ed=\233J, el=\233K, flash=^G,
home=\233H, ht=^I, ich=\233%p1%d@, ich1=\233@, ind=\233S,
indn=\233%p1%dS, invis=\2338m, is2=\23320l, kbs=^H,
kcub1=\233D, kcud1=\233B, kcuf1=\233C, kcuu1=\233A,
kdch1=^?, kf0=\2339~, kf1=\2330~, kf2=\2331~, kf3=\2332~,
kf4=\2333~, kf5=\2334~, kf6=\2335~, kf7=\2336~, kf8=\2337~,
kf9=\2338~, nel=\233B\r, rev=\2337m, ri=\233T,
rin=\233%p1%dT, rmacs=^O, rmcup=\233?7h, rmso=\2330m,
rmul=\2330m, rs1=\Ec, sgr0=\2330m, smacs=^N, smcup=\233?7l,
smso=\2337m, smul=\2334m,
# From: Henning 'Faroul' Peters <Faroul@beyond.kn-bremen.de>, 25 Sep 1999
#
# Pavel Fedin added
# Home Shift+Left
# End Shift+Right
# PgUp Shift+Up
# PgDn Shift+Down
amiga-8bit|Amiga ANSI using 8-bit controls,
acsc=, dl=\233%p1%dM, dl1=\233M, il=\233%p1%dL, il1=\233L,
ind=\204, indn@, kend=\233 @, khome=\233 A, knp=\233S,
kpp=\233T, ri=\215, rin@, use=amiga-h,
# From: Ruediger Kuhlmann <terminfo@ruediger-kuhlmann.de>, 18 Jul 2000
# requires use of appropriate preferences settings.
amiga-vnc|Amiga using VNC console (black on light gray),
am, da, db, msgr, ndscr,
btns#1, colors#16, cols#80, lines#24, lm#0, ncv#0, pairs#0x100,
bel=^G, blink=\E[7;2m, bold=\E[1m, civis=\E[0p,
clear=\E[H\E[J, cnorm=\E[p\E[>?6l, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[>?6h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[1M, ed=\E[J, el=\E[K, flash=^G,
ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[1L, ind=\ED,
invis=\E8m,
is2=\E[>?2;18l\E[>?26;?6;20;>?15;?7;>?22;>?8h,
kbs=^H, kcbt=\233Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kdch1=^?, kf0=\E[9~, kf1=\E[0~, kf2=\E[1~,
kf3=\E[2~, kf4=\E[3~, kf5=\E[4~, kf6=\E[5~, kf7=\E[6~,
kf8=\E[7~, kf9=\E[8~, khlp=\E[?~, khome=\E[44~, kll=\E[45~,
kmous=\E[M, knp=\E[42~, kpp=\E[41~, nel=\EE, oc=\E[0m,
rev=\E[7m, ri=\EM, rmcup=\E[?7h\E[r\E[J, rmkx=\E[?1l,
rmso=\E[21m, rmul=\E[24m, rs1=\Ec,
rs2=\E[>?2;18l\E[>?26;?6;20;>?15;?7;>?22;>?8h,
setab=\E[%?%p1%{8}%>%t%'F'%p1%+%d%e4%p1%d%;m,
setaf=\E[%?%p1%{8}%>%t%'2'%p1%+%d%e3%p1%d%;m,
sgr0=\E[0m\017\E[30;85;>15m, smcup=\E[?7h, smkx=\E[?1h,
smso=\E[1m, smul=\E[4m, use=ecma+index,
# MorphOS on Genesi Pegasos
# By Pavel Fedin <sonic_amiga@rambler.ru>
morphos|MorphOS on Genesi Pegasos,
acsc=, dl=\233%p1%dM, dl1=\233M, il=\233%p1%dL, il1=\233L,
ind=\204, indn@, kend=\23345~, kf11=\23320~, kf12=\23321~,
khome=\23344~, kich1=\23340~, knp=\23342~, kpp=\23341~,
ri=\215, rin@, use=amiga-h,
# Commodore B-128 microcomputer from Doug Tyrol <det@HEL-ACE.ARPA>
# I'm trying to write a termcap for a commodore b-128, and I'm
# having a little trouble. I've had to map most of my control characters
# to something that unix will accept (my delete-char is a ctrl-t, etc),
# and create some functions (like cm), but thats life.
# The problem is with the arrow keys - right, and up work fine, but
# left deletes the previous character and down I just can't figure out.
# Jove knows what I want, but I don't know what it's sending to me (it
# isn't thats bound to next-line in jove).
# Anybody got any ideas? Here's my termcap.
# DAG -- I changed his "^n" entries to "\n"; see if that works.
#
commodore|b-128|Commodore B-128 micro,
am, bw,
OTdN#20, cols#80, lines#24, pb#150,
OTbc=^H, OTnl=\r, clear=\E\006$<10/>, cr=\r, cud1=\n,
cuf1=^F, cup=\E\013%p1%2d\,%p2%2d\,$<20/>, cuu1=^P,
dch1=\177$<10*/>, dl1=\Ed$<10*/>, el=\Eq$<10/>,
home=\E^E, ht=\011$<5/>, ich1=\E\n$<5/>, il1=\Ei$<10/>,
kcub1=^B, kcud1=\n, kcuf1=^F, kcuu1=^P, khome=\E^E, rmir=,
smir=,
#### North Star
#
# North Star Advantage from Lt. Fickie <brl-ibd!fickie> via BRL
northstar|North Star Advantage,
OTbs,
cols#80, lines#24,
clear=\004$<200/>,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<1/>, ed=\017$<200/>,
el=\016$<200/>, home=\034\032$<200/>,
#### Osborne
#
# Thu Jul 7 03:55:16 1983
#
# As an aside, be careful; it may sound like an anomaly on the
# Osborne, but with the 80-column upgrade, it's too easy to
# enter lines >80 columns!
#
# I've already had several comments...
# The Osborne-1 with the 80-col option is capable of being
# 52, 80, or 104 characters wide; default to 80 for compatibility
# with most systems.
#
# The tab is destructive on the Ozzie; make sure to 'stty -tabs'.
osborne-w|osborne1-w|osborne I in 104-column mode,
msgr, ul, xt,
cols#104, lines#24,
bel=^G, clear=^Z, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, el=\ET, ich1=\EQ, il1=\EE, ind=\n, kcub1=^H, kcud1=\n,
kcuf1=^L, kcuu1=^K, rmso=\E(, rmul=\Em, smso=\E), smul=\El,
# Osborne I from ptsfa!rhc (Robert Cohen) via BRL
osborne|osborne1|osborne I in 80-column mode,
OTbs, am, mir, msgr, ul, xhp,
OTdB#4, cols#80, lines#24,
clear=^Z, cub1=\010$<4>, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
dch1=\EW$<4/>, dl1=\ER, el=\ET, il1=\EE, is2=^Z, kbs=^H,
kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, rmir=, rmso=\E),
rmul=\Em, smir=\EQ, smso=\E(, smul=\El,
#
# Osborne Executive definition from BRL
# Similar to tvi920
# Added by David Milligan and Tom Smith (SMU)
osexec|Osborne executive,
OTbs, am,
OTug#1, cols#80, lines#24, xmc#1,
OTnl=\n, bel=^G, clear=^Z, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dl1=\ER, ed=\EY, el=\ET, home=^^, hts=\E1, ich1=\EQ, il1=\EE,
is2=\Eq\Ek\Em\EA\Ex0, kbs=^H, kcub1=^H, kcud1=\n, kcuf1=^L,
kcuu1=^K, kf0=^A@\r, kf1=^AA\r, kf2=^AB\r, kf3=^AC\r,
kf4=^AD\r, kf5=^AE\r, kf6=^AF\r, kf7=^AG\r, kf8=^AH\r,
kf9=^AI\r, rmir=, rmso=\Ek, rmul=\Em, smir=, smso=\Ej,
smul=\El, tbc=\E3,
#### Console types for obsolete UNIX clones
#
# Coherent, Minix, Venix, and several lesser-known kin were OSs for 8088
# machines that tried to emulate the UNIX look'n'feel. Coherent and Venix
# were commercial, Minix an educational tool sold in conjunction with a book.
# Memory-segmentation limits and a strong tendency to look like V7 long after
# it was obsolete made all three pretty lame. Venix croaked early. Coherent
# and Minix were ported to 32-bit Intel boxes, only to be run over by a
# steamroller named `Linux' (which, to be fair, traces some lineage to Minix).
# Coherent's vendor, the Mark Williams Company, went belly-up in 1994. There
# are also, I'm told, Minix ports that ran on Amiga and Atari machines and
# even as single processes under SunOS and the Macintosh OS.
#
# See
# https://web.archive.org/web/20120703021949/http://www.minix3.org/manpages/html4/console.html
minix|minix console (v3),
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j
\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v
\301w\302x\263y\363z\362{\343|\330}\234~\376,
kdch1=^?, kend=\E[Y, kf0=\E[21~, kf1=\E[11~, kf10=\E[21~,
kf11=\E[11;2~, kf12=\E[12;2~, kf13=\E[13;2~,
kf14=\E[14;2~, kf15=\E[15;2~, kf16=\E[17;2~,
kf17=\E[18;2~, kf18=\E[19;2~, kf19=\E[20;2~, kf2=\E[12~,
kf20=\E[21;2~, kf21=\E[11;5~, kf22=\E[12;5~,
kf23=\E[13;5~, kf24=\E[14;5~, kf25=\E[15;5~,
kf26=\E[17;5~, kf27=\E[18;5~, kf28=\E[19;5~,
kf29=\E[20;5~, kf3=\E[13~, kf30=\E[21;5~, kf31=\E[11;6~,
kf32=\E[12;6~, kf33=\E[13;6~, kf34=\E[14;6~,
kf35=\E[15;6~, kf36=\E[17;6~, kf37=\E[18;6~,
kf38=\E[19;6~, kf39=\E[20;6~, kf4=\E[14~, kf40=\E[21;6~,
kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
kich1=\E[@, knp=\E[U, kpp=\E[V, lf0@, lf1@, lf2@, lf3@, lf4@, lf5@,
use=minix-3.0,
minix-3.0|minix console (v3.0),
use=ecma+color, use=minix-1.7,
# See
# https://web.archive.org/web/20030914201935/http://www.minix-vmd.org/pub/Minix-vmd/1.7.0/wwwman/man4/console.4.html
# This is the entry provided with minix 1.7.4, with bogus :ri: removed.
minix-1.7|minix console (v1.7),
am, xenl,
cols#80, it#8, lines#25,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[0J, cr=\r,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[0J, el=\E[K, el1=\E[2K,
home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL,
il1=\E[L, ind=\n, is2=\E[0m, kbs=^H, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kf0=\E[Y, kf1=\E[V, kf2=\E[U,
kf3=\E[T, kf4=\E[S, kf5=\E[G, khome=\E[H, lf0=End, lf1=PgUp,
lf2=PgDn, lf3=Num +, lf4=Num -, lf5=Num 5, nel=\r\n,
rev=\E[7m, ri=\EM, rmso=\E[0m, rmul=\E[0m, sgr0=\E[0m,
smso=\E[7m, smul=\E[4m,
# Corrected Jan 14, 1997 by Vincent Broman <broman@nosc.mil>
minix-old|minix-1.5|minix console (v1.5),
xon,
cols#80, it#8, lines#25,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[0J, cr=\r,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[0J, el=\E[K, home=\E[H, ht=^I,
ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n,
kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kf0=\E[Y, kf1=\E[V, kf2=\E[U, kf3=\E[T, kf4=\E[S, kf5=\E[G,
khome=\E[H, nel=\r\n, rev=\E[7m, ri=\EM, rmso=\E[0m,
rmul=\E[0m, sgr0=\E[0m, smso=\E[7m, smul=\E[4m,
# The linewrap option can be specified by editing /usr/include/minix/config.h
# before recompiling the minix 1.5 kernel.
minix-old-am|minix console with linewrap,
am, use=minix-old,
pc-minix|minix console on an Intel box,
use=klone+acs, use=minix-3.0,
# According to the Coherent 2.3 manual, the PC console is similar
# to a z19. The differences seem to be (1) 25 lines, (2) no status
# line, (3) standout is broken, (4) ins/del line is broken, (5)
# has blinking and bold.
pc-coherent|pcz19|coherent|IBM PC console running Coherent,
am, mir,
cols#80, it#8, lines#25,
bel=^G, clear=\EE, cr=\r, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EN,
ed=\EJ, el=\EK, home=\EH, ht=^I, ind=\n, kbs=^H, kcub1=\ED,
kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\EH, ri=\EI, rmir=\EO,
rmso=\Eq, sgr0=\Eq, smir=\E@, smso=\Ep,
# According to the Venix 1.1 manual, the PC console is similar
# to a DEC vt52. Differences seem to be (1) arrow keys send
# different strings, (2) enhanced standout, (3) added insert/delete line.
# Note in particular that it doesn't have automatic margins.
# There are other keys (f1-f10, kpp, knp, kcbt, kich1, kdch1) but they
# not described here because this derives from an old termcap entry.
pc-venix|venix|IBM PC console running Venix,
cols#80, it#8, lines#25,
bel=^G, clear=\EH\EJ, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dl1=\EM,
ed=\EJ, el=\EK, ht=^I, il1=\EL, ind=\n, kbs=^H, kcub1=\EK,
kcud1=\EP, kcuf1=\EM, kcuu1=\EH, khome=\EG, ri=\EI,
#### Miscellaneous microcomputer consoles
#
# If you know anything more about any of these, please tell me.
#
# The MAI Basic Four computer was obsolete at the end of the 1980s.
# It may be used as a terminal by putting it in "line" mode as seen on
# one of the status lines.
# Initialization is similar to CIT80. <is2> will set ANSI mode for you.
# Hardware tabs set by <if> at 8-spacing. Auto line wrap causes glitches so
# wrap mode is reset by <cvvis>. Using <ind>=\E[S caused errors so I
# used \ED instead.
# From: bf347@lafn.org (David Lawyer), 28 Jun 1997
mai|basic4|MAI Basic Four in ansi mode,
am, da, db, mir, msgr,
cols#82, it#8, lines#25,
bel=^G, blink=\E[5m, bold=\E[1m, clear=^]^_, cnorm=\E[?7h,
cr=\r, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\n, cuf1=^X,
cup=\E[%i%p1%d;%p2%dH, cuu1=^Z, cvvis=\E[?7l, dch1=\E[1P,
dl1=\E[M, ed=^_, el=^^, home=^], ht=^I,
if=/usr/share/tabset/vt100, il1=\E[L, ind=\ED,
is2=\E>\E[?1h\E[?7h\E[?5l\017\E(B\E[m\E[20l\E[1;24r\E[24;1H,
kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU,
kf7=\EOV, kf8=\EOW, nel=\r\ED, rc=\E8, rev=\E[7m, ri=\E[T,
rmir=\E[4l, rmso=\E[m, rmul=\E[m, sc=\E7, sgr0=\E[m,
smir=\E[4h, smso=\E[7m, smul=\E[4m,
# basis from Peter Harrison, Computer Graphics Lab, San Francisco
# ucbvax!ucsfmis!harrison ...uucp / ucbvax!ucsfmis!harrison@BERKELEY ...ARPA
#
# On Sat, 7 Aug 1999, Torsten Jerzembeck <toje@nightingale.ms.sub.org> wrote:
# The Basis 108 was a Apple II clone, manufactured by the "Basis
# Mikrocomputer GmbH" in Munster, Germany (the company still exists today,
# about 1,5 km from where I live, but doesn't build own computers any
# more). A Basis 108 featured a really heavy (cast aluminium?) case, was
# equipped with one or two 5.25" disk drives, had a monochrome and colour
# video output for a TV set or a dedicated monitor and several slots for
# Apple II cards. Basis 108 were quite popular at german schools before
# the advent of the IBM PC. They run, for example, the UCSD Pascal
# development system (which I used even in 1993 to program the steering
# and data recording for our school's experimental solar panel :), Apple DOS
# or CP/M.
# (basis: removed obsolete ":ma=^K^P^R^L^L :nl=5000*^J:" -- esr)
basis|BASIS108 computer with terminal translation table active,
clear=\E*$<300/>, cud1=\n$<5000/>, ed=\EY, el=\ET, kbs=^H,
kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, rmso=\E), sgr0=\E),
smso=\E(, use=adm3a,
# luna's BMC terminal emulator
luna|luna68k|LUNA68K Bitmap console,
cols#88, lines#46, use=ansi-mini,
megatek|pegasus workstation terminal emulator,
am, os,
cols#83, lines#60,
# The Xerox 820 was a Z80 micro with a snazzy XEROX PARC-derived
# interface (pre-Macintosh by several years) that went nowhere.
xerox820|x820|Xerox 820,
am,
cols#80, lines#24,
bel=^G, clear=\032$<1>, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, ed=^Q, el=^X,
home=^^, ind=\n,
#### Videotex and teletext
#
# \E\:1} switch to te'le'informatique mode (ascii terminal/ISO 6429)
# \E[?3l 80 columns
# \E[?4l scrolling on
# \E[12h local echo off
# \Ec reset: G0 U.S. charset (to get #,@,{,},...), 80 cols, clear screen
# \E)0 G1 DEC set (line graphics)
#
# From: Igor Tamitegama <igor@ppp1493-ft.teaser.fr>, 18 Jan 1997
m2-nam|minitel|minitel-2|minitel-2-nam|France Telecom Minitel 2 mode te'le'informatique,
OTbs, eslok, hs, xenl,
cols#80, it#8, lines#24, wsl#72, xmc#0,
acsc=aaffggjjkkllmmnnooqqssttuuvvwwxx, bel=^G,
blink=\E[5m, bold=\E[1m, civis=\E[<1h, clear=\E[H\E[J,
cnorm=\E[<1l, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, flash=^G, fsl=\n,
home=\E[H, ht=^I, il=\E[%p1%dL, il1=\E[L, ind=\n, ip=$<7/>,
is1=\E\:1}\Ec\E[?4l\E[12h, is2=\Ec\E[12h\E)0,
is3=\E[?3l, kbs=^H, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M, kf0=\EOp,
kf1=\EOq, kf10=\EOp, kf2=\EOr, kf3=\EOs, kf4=\EOt, kf5=\EOu,
kf6=\EOv, kf7=\EOw, kf8=\EOx, kf9=\EOy, khome=\E[H,
kich1=\E[4h, kil1=\E[4l, knp=\EOn, kpp=\EOR, ll=\E[24;80H,
mc0=\E[i, nel=\r\n, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
rmir=\E[4l, rmso=\E[27m, rmul=\E[24m,
rs1=\Ec\E[?4l\E[12h, rs2=\Ec\E)0, sc=\E7, sgr0=\E[m,
smacs=^N, smir=\E[4h, smso=\E[7m, smul=\E[4m, tsl=^_@A,
u6=\E[%i%d;%dR, u7=\E[6n,
# From: Alexandre Montaron <canal@mygale.org>, 18 Jun 1998, updated 19 Sep 2016
#
minitel1|minitel 1,
am, bw, eslok, hs, hz, .msgr, G0,
colors#8, cols#40, lines#24, pairs#8, .ncv#16,
acsc=j+k+l+m+n+o~q`s_t+u+v+w+x|, bel=^G, blink=\EH,
civis=^T, clear=^L, cnorm=^Q, cr=\r, cub1=^H, cud1=\n, cuf1=^I,
cup=\037%p1%'A'%+%c%p2%'A'%+%c, cuu1=^K,
dsl=\037@A\030\n, el=^X,
flash=\037@A\EW \177\022\177\022P\r\030\n, fsl=\n,
home=^^, ind=\n, is2=\E;`ZQ\E\:iC\E\:iE\021, kbs=^SG,
kcan=^SE, kend=^SI, kent=^SA, khlp=^SD, knp=^SH, kpp=^SB,
krfr=^SC, nel=\r\n, op=\EG, rep=%p1%c\022%p2%'?'%+%c,
rev=\E], ri=^K, rmso=\E\\,
rs2=\024\037XA\030\n\030\n\030\n\030\n\030\n\030\n\030\n
\030\n\030\n\030\n\030\n\030\n\030\n\030\n\030\n\030\n
\030\n\030\n\030\n\030\n\030\n\030\n\030\n\030\014
\021,
setab=\0, setaf=\E%p1%'@'%+%c, setb=\0,
setf=\E%?%p1%{1}%=%tD%e%p1%{3}%=%tF%e%p1%{4}%=%tA%e%p1%{6}%=
%tC%e%p1%'@'%+%c%;,
sgr=%?%p1%t\E]%;%?%p3%t\E]%;%?%p4%t\EH%;,
sgr0=\EI\E\\\EG, smso=\E], tsl=\037@%p1%'A'%+%c,
u6=\037%c%'A'%-%c%'A'%-, u7=\Ea,
u8=\001%[BCDEFGHIJKLbcresdfg0123456789]\004, u9=\E9{,
.dim=\EB, .hup=\E9g, .rs2=^L, .u8=^ABr4^D,
C0=`>a9f!j%k4l<m-n=p#q\,rpt=u5v-w<x5yvzy|l~$, E0=^O,
S0=^N,
XC=B\031%\,\241!\,\242"\,\243#\,\244$\,\245%\,\246&\,\247'\,
\250(\,\253+\,\257P\,\2600\,\2611\,\2622\,\2633\,\2655\,
\2677\,\272k\,\273;\,\274<\,\275=\,\276>\,\277?\,\300AA\,
\301BA\,\302CA\,\303DA\,\304HA\,\305JA\,\306a\,\307KC\,
\310AE\,\311BE\,\312CE\,\313HE\,\314AI\,\315BI\,\316CI\,
\317HI\,\320b\,\321DN\,\322AO\,\323BO\,\324CO\,\325DO\,
\326HO\,\3274\,\330i\,\331AU\,\332BU\,\333CU\,\334HU\,
\335BY\,\336l\,\337{\,\340Aa\,\341Ba\,\342Ca\,\343Da\,
\344Ha\,\345Ja\,\346q\,\347Kc\,\350Ae\,\351Be\,\352Ce\,
\353He\,\354Ai\,\355Bi\,\356Ci\,\357Hi\,\360r\,\361Dn\,
\362Ao\,\363Bo\,\364Co\,\365Do\,\366Ho\,\3678\,\370y\,
\371Au\,\372Bu\,\373Cu\,\374Hu\,\375By\,\376|\,\377Hy\,
\252c\,\,0\017\031%\016\,}#\,f0\,g1\,\\\,\\\,\,+.\,./\,0
\177\,--,
minitel1b|minitel 1-bistandard (in 40cols mode),
mir,
cub=\E[%p1%dD, cud=\E[%p1%dB, cuf=\E[%p1%dC,
cuu=\E[%p1%dA, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ed=\E[J, el1=\E[1K, il=\E[%p1%dL, il1=\E[L,
is1=\E;iYA\E;jYC, kbs@, kcan@, kclr=\E[2J, kctab=^I,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P,
kdl1=\E[M, kent@, kf1=^SD, kf10=^Y0, kf11=^Y1, kf12=^Y/,
kf13=^Y{1, kf14=^Y{2, kf15=^Y{3, kf16=^Y{4, kf17=^Y{5,
kf18=^Y{6, kf19=^Y{7, kf2=^SC, kf20=^Y{8, kf21=^Y{9,
kf22=^Y{0, kf23=^Y{*, kf24=^Y{#, kf3=^SF, kf4=^SA, kf5=^SG,
kf6=^SE, kf7=^Y8, kf8=^Y\,, kf9=^Y., khlp@, khome=\E[H,
kich1=\E[4h, kil1=\E[L, krfr@, lf1=Guide, lf2=Repetition,
lf3=Sommaire, lf4=Envoi, lf5=Correction, lf6=Annulation,
rmir=\E[4l, smir=\E[4h,
u8=\001%[ABCPtuvwxyz0123456789\:;<=>?]\004,
.ich=\E[%p1%d@, .ich1=\E[@, .kLFT=\E[P, .kRIT=\E[4h,
.kb2=^Y{g, .kcbt=^Y{i, .kel=^X, .mc0=\E\:|k, .rmkx=\E;jYA,
.rs1=\E[4l\E[2l, .smkx=\E;iYA\E;jYC, .u8=^ACu<^D,
use=minitel1,
# rmkx posait des problemes (logout en sortant de vi).
minitel1b-80|minitel 1-bistandard (standard teleinformatique),
am@, bw@, eslok@, hz@, msgr, G0,
colors@, cols#80, it#8, pairs@,
acsc@, blink=\E[5m, bold=\E[1m, civis=\037@A\024\n,
clear=\E[H\E[J, cnorm=\037@A\021\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[K, home=\E[H,
ht=^I, ind=\ED, is1@, is2@, kbs=\EOl, kcan=\EOQ, kend=\E)4\r,
kent=\EOM, kf1=\EOq, kf10=\EOp, kf11=\EOP1, kf12=\EOP2,
kf13=\EOP3, kf14=\EOP4, kf15=\EOP5, kf16=\EOP6, kf17=\EOP7,
kf18=\EOP8, kf19=\EOP9, kf2=\EOr, kf20=\EOP0, kf21=\EOP*,
kf22=\EOP#, kf23@, kf24@, kf3=\EOs, kf4=\EOt, kf5=\EOu,
kf6=\EOv, kf7=\EOw, kf8=\EOx, kf9=\EOy, khlp=\EOm, knp=\EOn,
kpp=\EOR, krfr=\EOS, lf1@, lf2@, lf3@, lf4@, lf5@, lf6@, nel=\EE,
op@, rc=\E8, rep@, rev=\E[7m, ri=\EM, rmkx@, rmso=\E[27m,
rmul=\E[24m,
rs2=\036\E[12H\E[2M\E[H\E[L\E[12H\E[2M\E[H\E[L\E[12H\E[2M\E[
H\E[L\E[12H\E[2M\E[H\E[L\E[12H\E[2M\E[H\E[L\E[12H\E[2M
\E[H\E[L\E[12H\E[2M\E[H\E[L\E[12H\E[2M\E[H\E[L\E[12H\E[2
M\E[H\E[L\E[12H\E[2M\E[H\E[L\E[12H\E[2M\E[H\E[L\E[12H\E[
2M\E[H\E[J\E[m,
sc=\E7, setab@, setaf@, setb@, setf@, sgr@, sgr0=\E[m, smkx@,
smso=\E[7m, smul=\E[4m,
tsl=\037@%?%p1%{63}%<%t%p1%'A'%+%c%e\177%p1%{62}%-%Pa%?%ga
%{1}%&%t\011%;%?%ga%{2}%&%t\011\011%;%?%ga%{4}%&%t\011
\011\011\011%;%?%ga%{07}%>%t\011\011\011\011\011\011
\011\011%;%?%ga%{15}%>%t\011\011\011\011\011\011\011
\011%;%;,
u6@, u7@, u8@, u9@, .acsc=}#f[, .enacs=^O, .kb2=\EOPg,
.kcbt=\EOPi, .ll=\E[24H, .mc0=\E[i, .rmacs=^O, .rs2=\Ec,
.sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1
;%;m,
.smacs=^N, C0=}#f[j+k+l+m+n+o~q=s_t+u+v+w+x!0\032,
E0=^O, S0=^N,
XC=B\016%\017\,\243#\,\247]\,\260[\,\340@\,\347\\\\\,\351{\,
\350}\,\371|\,\300A\,\301A\,\302A\,\303A\,\304A\,\305A\,
\306E\,\307C\,\310E\,\311E\,\312E\,\313E\,\314I\,\315I\,
\316I\,\317I\,\320D\,\321N\,\322O\,\323O\,\324O\,\325O\,
\326O\,\331U\,\332U\,\333U\,\334U\,\335Y\,\337s\,\341a\,
\342a\,\343a\,\344a\,\345a\,\346e\,\352e\,\353e\,\354i\,
\355i\,\356i\,\357i\,\360d\,\361n\,\362o\,\363o\,\364o\,
\365o\,\366o\,\372u\,\373u\,\374u\,\375y\,\377y\,\267.\,
\327x\,\367/\,\261\E7\E[4m+\E8\E[C\,\,0\017%\016\,x|\,y
\E7\E[4m<\E8\E[C\,z\E7\E[4m>\E8\E[C\,g\E7\E[4m+\E8\E[C,
use=minitel1b,
minitel1-nb|minitel 1 (40cols) noir & blanc sans couleurs avec bold et dim ...,
colors@, pairs@,
bold=\EG, clear=^L\EB,
cup=\037%p1%'A'%+%c%p2%'A'%+%c\EB, dim=\ED, home=^^\EB,
op@, rs2=^L\EB, setab@, setaf@, setb@, setf@,
sgr=%?%p1%p3%O%t\E]%;%?%p4%t\EH%;%?%p5%t\ED%;%?%p6%t\EG%;,
sgr0=\EI\E\\\EB, tsl=\037@%p1%'A'%+%c\EB, .invis=\E@,
use=minitel1,
minitel1b-nb|minitel 1b (40cols) noir & blanc sans couleurs avec bold et dim ...,
msgr,
colors@, pairs@,
acsc=`>a9f!j%k4l<m-n=p#q\,rpt=u5v-w<x5yvzy|l~$,
bold=\EG, clear=^L\EB, cup=\E[%i%p1%d;%p2%dH, dim=\ED,
home=^^\EB, kend=\E)4\r, kf1=\E$4\r, kf2=\E#4\r,
kf3=\E&4\r, kf4=\E!4\r, kf5=\E'4\r, kf6=\E/4\r, knp=\E(4\r,
kpp=\E"4\r, op@, rmacs=^O, rs2=^L\EB, setab@, setaf@, setb@,
setf@,
sgr=%?%p1%p3%O%t\E]%;%?%p4%t\EH%;%?%p5%t\ED%;%?%p6%t\EG%;,
sgr0=\EI\E\\\EB, smacs=^N, tsl=\037@%p1%'A'%+%c\EB,
u8=\001%[ABCPpqrstuvwxyz{|}~\177]\004\r, .invis=\E@,
.u8=\001Cu|\004r, use=minitel1b,
# Note:
#
# Faire, Fnct T puis "/" (TS+"?") pour activer les touches en 40cols :
#
# TS+Connexion/Fin(Fin),Retour(Page Up),Suite(Page Down),Guide(F1),
# Repetition(F2),Sommaire(F3),Envoi(F4),Correction(F5),Annulation(F6),
# Ctrl+7(F7),Ctrl+8(F8),Ctrl+9(F9),Ctrl+0(F10),Ctrl+*(F11),Ctrl+#(F12).
#
# Ctrl+Suite-1(F13), Ctrl+Suite-2(F14), Ctrl+Suite-3(F15),
# Ctrl+Suite-4(F16), Ctrl+Suite-5(F17), Ctrl+Suite-6(F18),
# Ctrl+Suite-7(F19), Ctrl+Suite-8(F20), Ctrl+Suite-9(F21),
# Ctrl+Suite-0(F22), Ctrl+Suite-*(F23), Ctrl+Suite-#(F24).
#
# Fonctionne par exemple avec Midnight Commander (mc).
minitel2-80|minitel 2 (80cols) avec filets vt100 (DEC),
G0,
acsc=ffggjjkkllmmnnooqqssttuuvvwwxxyyzz||}},
enacs=\E)0, rmacs=^O, smacs=^N, u6=\E[%i%d;%dR,
C0=ffggjjkkllmmnnooqqssttuuvvwwxxyyzz||}}, E0=^O,
S0=\E)0\016,
XC=B%\E(B\,\243\E(3}\,\247\E(R[\,\257\E(3v\,\260\E(3f\,\261
\E(3g\,\265\E(3Y\,\267\E(3~\,\274\E(3O\,\275\E(3P\,\276
\E(3Q\,\277\E(3Z\,\300A\,\301A\,\302A\,\303A\,\304\E(3R\,
\305A\,\306E\,\307C\,\310E\,\311\E(3S\,\312E\,\313E\,
\314\E(3T\,\315I\,\316I\,\317I\,\320D\,\321\E(3W\,\322\E(
3U\,\323O\,\324O\,\325O\,\326O\,\327x\,\331U\,\332U\,
\333U\,\334\E(3V\,\335Y\,\337\E(3{\,\340\E(3A\,\341a\,
\342\E(3B\,\343a\,\344\E(3C\,\345a\,\346e\,\347\E(R\\\\\,
\350\E(3E\,\351\E(3D\,\352\E(3F\,\353\E(3G\,\354i\,\355i
\,\356\E(3H\,\357\E(3I\,\360d\,\361\E(3X\,\362o\,\363o\,
\364\E(3J\,\365o\,\366\E(3K\,\367\E(3h\,\371\E(3L\,\372u
\,\373\E(3M\,\374\E(3N\,\375y\,\377y\,\,0\E)3%\E)0\,\\\,m
\,+k\,.l\,0\177\,-j,
use=minitel12-80,
minitel12-80|minitel 12 (80cols),
G0,
civis=\E[<1h, cnorm=\E[<1l, is2=\E[12h, u6=\E[%i%d;%dH,
u7=\E[6n,
.acsc=ffggj+k+l+m+n+ovq-swt+u+v+w+xx}}\,m+k.l-j0
\177,
.enacs=\E)3, .rmacs=^O, .rs3=\E[?4l, .scs=\E(%p1%c,
.smacs=^N,
C0=ffggj+k+l+m+n+ovq-swt+u+v+w+xx}}\,m+k.l-j0\177,
E0=^O, S0=\E)3\016,
XC=B%\E(B\,\243\E(3}\,\247\E(R[\,\257\E(3v\,\260\E(3f\,\261
\E(3g\,\267\E(3~\,\274\E(3O\,\275\E(3P\,\276\E(3Q\,\300A
\,\301A\,\302A\,\303A\,\304A\,\305A\,\306E\,\307C\,\310E
\,\311E\,\312E\,\313E\,\314I\,\315I\,\316I\,\317I\,\320D
\,\321N\,\322O\,\323O\,\324O\,\325O\,\326O\,\327x\,\331U
\,\332U\,\333U\,\334U\,\335Y\,\337\E(3{\,\340\E(3A\,
\341a\,\342\E(3B\,\343a\,\344\E(3C\,\345a\,\346e\,\347\E(
R\\\\\,\350\E(3E\,\351\E(3D\,\352\E(3F\,\353\E(3G\,\354i
\,\355i\,\356\E(3H\,\357\E(3I\,\360d\,\361n\,\362o\,
\363o\,\364\E(3J\,\365o\,\366\E(3K\,\367\E(3h\,\371\E(3L
\,\372u\,\373\E(3M\,\374\E(3N\,\375y\,\377y\,\,0\E)3%\E)0
\,\\\,m\,+k\,.l\,0\177\,-j,
use=minitel1b-80,
#
# Add these in your ~/.screenrc for inputting some special glyphs like french
# accentuated chars in 40 cols mode:
#
# bindkey ^YA digraph '`' # Saisi accent grave.
# bindkey ^YB digraph "'" # Saisi accent aigu.
# bindkey ^YC digraph '^' # Saisi accent circonflexe.
# bindkey ^YH digraph '"' # Saisi accent trema.
#
# bindkey ^Y# stuff \243 # Livre.
# bindkey "^Y\047" stuff \247 # Paragraphe.
# bindkey ^Yj stuff \306 # AE
# bindkey ^Yz stuff \346 # ae
# bindkey ^YKc stuff \347 # c cedille.
#
screen.minitel1|Screen specific for minitel1,
ncv@,
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxy
yzz||}}~~,
bel=\007\E\^ \E\\, bold@, csr@, flash=\Eg\E\^ \E\\, kmous@,
rmul@, smul@, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\EZ,
use=xterm+x11mouse, use=screen4,
screen.minitel1b|Screen specific for minitel1b,
kclr=\E[2J, kdl1=\E[M, kf13=^Y{1, kf14=^Y{2, kf15=^Y{3,
kf16=^Y{4, kf17=^Y{5, kf18=^Y{6, kf19=^Y{7, kf20=^Y{8,
kf21=^Y{9, kf22=^Y{0, kf23=^Y{*, kf24=^Y{#, kil1=\E[L,
use=screen.minitel1,
screen.minitel1b-80|screen.minitel2-80|screen.minitel12-80|Screen specific for minitel1b-80 minitel2-80 and minitel12-80,
colors@, ncv@, pairs@,
bold=\E[1m, kent=\EOM, kf13@, kf14@, kf15@, kf16@, kf17@, kf18@,
kf19@, kf20@, kf21@, kf22@, kf23@, kf24@, khlp=\EOm, op@,
rmul=\E[24m, setab@, setaf@, setb@, setf@, smul=\E[4m,
use=screen.minitel1b,
screen.minitel1-nb|Screen specific for minitel1-nb,
colors@, ncv@, pairs@,
bold=\E[1m, dim=\E[2m, op@, setab@, setaf@, setb@, setf@,
use=screen.minitel1,
screen.minitel1b-nb|Screen specific for minitel1b-nb,
colors@, ncv@, pairs@,
bold=\E[1m, dim=\E[2m, op@, setab@, setaf@, setb@, setf@,
use=screen.minitel1b,
# From: Alexandre Montaron, 29 Sep 2016
linux-m1|Linux Minitel 1 "like" Couleurs,
am, bw@, ccc, mir, msgr, xenl,
colors#8, it#8, ncv#16, pairs#64,
acsc=a\261f\370g\361h\260j\274k\273l\311m\310n\316q\315t
\314u\271v\312w\313x\272y\363z\362{\343|\252~\372,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP,
dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M,
ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E)U,
flash=\E[?5h$<100/>\E[?5l, home=\E[H, hpa=\E[%i%p1%d`,
ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=\n,
initc=\E]P%p1%{15}%&%X%p2%{255}%&%02X%p3%{255}%&%02X%p4
%{255}%&%02X,
is2=\E]R\E]P3FFFF80\E[?8c, ka1=\EOw, ka3=\EOy, kb2=\E[G,
kbs=^?, kc1=\EOq, kc3=\EOs, kcbt=\E^I, kclr=\E\r, kcub1=\E[D,
- kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~,
- kdl1=\E\E[A, kend=\E[4~, kent=\EOM, kf1=\E[[A, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
- kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
- kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D,
- kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- khome=\E[1~, kich1=\E[2~, kil1=\E\E[B, kmous=\E[M,
- knp=\E[6~, kpp=\E[5~, nel=\EE, oc=\E]R\E]P3FFFF80,
- op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
- rmam=\E[?7l, rmir=\E[4l, rmpch=\E[10m, rmso=\E[27m,
- rs1=\Ec, rs3=\E[37;40m\E[8], sc=\E7, setab=\E[4%p1%dm,
- setaf=\E[3%p1%dm, sgr0=\E[m, smacs=^N, smam=\E[?7h,
- smir=\E[4h, smpch=\E[11m, smso=\E[7m, tbc=\E[3g,
- u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?6c, u9=\EZ,
- vpa=\E[%i%p1%dd, .VN=\E[?5l, .VR=\E[?5h, .am@,
- .ich=\E[%p1%d@, .ich1=\E[@, .ll=\E[99H, .rmcup=,
- .rmul=\E[24m, .smcup=\E]R\E]P3FFFF80\E[?8c,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdl1=\E\E[A, kent=\EOM,
+ kf1=\E[[A, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
+ kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
+ kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[[B,
+ kf20=\E[34~, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~,
+ kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kil1=\E\E[B,
+ kmous=\E[M, nel=\EE, oc=\E]R\E]P3FFFF80, op=\E[39;49m,
+ rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmir=\E[4l,
+ rmpch=\E[10m, rmso=\E[27m, rs1=\Ec, rs3=\E[37;40m\E[8],
+ sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[m,
+ smacs=^N, smam=\E[?7h, smir=\E[4h, smpch=\E[11m,
+ smso=\E[7m, tbc=\E[3g, vpa=\E[%i%p1%dd, .VN=\E[?5l,
+ .VR=\E[?5h, .am@, .ich=\E[%p1%d@, .ich1=\E[@, .ll=\E[99H,
+ .rmcup=, .rmul=\E[24m, .smcup=\E]R\E]P3FFFF80\E[?8c,
.smul=\E[4m,
E3=\E[99H\E[2J\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n,
+ use=vt220+pcedit, use=vt220+cvis, use=linux+decid,
# 1. Using double-shapes for vt100 graphical chars (eg: mc).
# 2. Native brown color corrected to good yellow color.
# 3. Adding "Insert" and "Delete Line" keys as ESC Up and ESC Down arrow keys.
# 4. Suppressed nonexistent underlined mode (normally as bright).
# 5. ich/ich1 not filled because of non-curses programs.
#--
# 6. Suppressed nonexistent invisible mode.
#(7.)Adding forgotten "cub/cud/cuf/cuu" sequences deplacement.
linux-m1b|Linux Minitel 1B "like" Monochrome (Gris/Blanc/Noir+Dim),
ccc@,
colors@, ncv@, pairs@,
acsc@, bold=\E[33m, enacs@, initc@,
is2=\E]R\E]P1A9A9A9\E]P2A9A9A9\E]P3FFFFFF\E]P4A9A9A9\E]P5A9A
9A9\E]P6A9A9A9\E]P9FFFFFF\E]PAFFFFFF\E]PBFFFFFF\E]PCFFFF
FF\E]PDFFFFFF\E]PEFFFFFF\E[?2c,
oc@, op@, rmacs@, setab=^A, setaf=^A, smacs@, .setab@, .setaf@,
.smcup=\E]R\E]P1A9A9A9\E]P2A9A9A9\E]P3FFFFFF\E]P4A9A9A9\E]P5
A9A9A9\E]P6A9A9A9\E]P9FFFFFF\E]PAFFFFFF\E]PBFFFFFF\E]
PCFFFFFF\E]PDFFFFFF\E]PEFFFFFF\E[?2c,
use=linux-m1,
linux-m2|Linux Minitel 2 "like" Couleurs (Vert/Blanc/Noir+Bleu),
ccc@,
colors@, ncv@, pairs@,
acsc=++\,\,--..00``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttu
uvvwwxxyyzz{{||}}~~,
bold=\E[33m, cnorm=\E[?2c\E[?25h, cvvis=\E[?8c\E[?25h,
enacs=\E)0, initc@,
is2=\E]R\E]P100A900\E]P200A900\E]P3FFFFFF\E]P400A900\E]P500A
900\E]P600A900\E]P700A900\E]P80000FF\E]P9FFFFFF\E]PAFFFF
FF\E]PBFFFFFF\E]PCFFFFFF\E]PDFFFFFF\E]PEFFFFFF\E]PFFFFFF
F\E[;37m,
oc@, op@, rmacs=^O, setab=^A, setaf=^A, sgr0=\E[;37m, smacs=^N,
.setab@, .setaf@,
.smcup=\E]R\E]P100A900\E]P200A900\E]P3FFFFFF\E]P400A900\E]P5
00A900\E]P600A900\E]P700A900\E]P80000FF\E]P9FFFFFF\E]
PAFFFFFF\E]PBFFFFFF\E]PCFFFFFF\E]PDFFFFFF\E]PEFFFFFF
\E]PFFFFFFF\E[;37m,
use=linux-m1,
+# From: Alexandre Montaron, 27 May 2020
+linux-s|Linux Console with added status line at bottom,
+ hs,
+ clear=\E[255;255H\E[A\E[1J\E[H, csr@,
+ dsl=\E7\E[255H\E[K\E8, ed@, fsl=\E8,
+ iprog=\sbash\s-c\s'echo\s-ne\s"\E[?6l\E[255H\E[A\E[6n"\s;
+ \sread\s-d\sR\sTMP\s;\sLINES=`echo\s$TMP\s|\scut\s-f1
+ \s-d\s";"\s|\scut\s-f2\s-d\s"["`\s;\sstty\srows\s$LINE
+ S\s;\secho\s-ne\s"\E[;"$LINES"r\E[J"',
+ rs1=\E]R, tsl=\E7\E[255;%p1%dH, .rc@, .sc@, use=linux,
+
# Screen entries counterpart :
screen.linux-m1|Linux m1 specific for screen,
ncv@,
dim=\E[2m, kbs=^?, kclr=\E\r, kdl1=\E\E[A, kf13=\E[25~,
kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
kf18=\E[32~, kf19=\E[33~, kf20=\E[34~, kil1=\E\E[B, rmul@,
smul@, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\EZ,
E3=\E[99H\E[2J\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n,
use=xterm+x11mouse, use=screen4,
screen.linux-m1b|Linux m1b specific for screen,
colors@, pairs@,
op@, setab@, setaf@, setb@, setf@, use=screen.linux-m1,
screen.linux-m2|Linux m2 specific for screen,
acsc=++\,\,--..00``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttu
uvvwwxxyyzz{{||}}~~,
use=screen.linux-m1b,
# Putty :
putty-m1|Putty Minitel 1 "like" Couleurs,
hs,
dim@, kf1=\E[11~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~,
kf5=\E[15~, rmcup=\E[2J\E[?47l\E8, rmul=\E[24m,
smcup=\E7\E[?47h, smul=\E[4m, .E3=\E[300S,
- .WS=\E[8;%d;%dt, Z0=\E[?3h, Z1=\E[?3l, use=xterm+sl-twm,
- use=ecma+index, use=linux-m1,
+ use=putty+screen, use=xterm+sl-twm, use=ecma+index,
+ use=linux-m1,
putty-m1b|Putty Minitel 1B "like" Monochrome (Gris/Blanc/Noir),
hs,
dim@, kf1=\E[11~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~,
kf5=\E[15~, rmcup=\E[2J\E[?47l\E8, rmul=\E[24m,
smcup=\E7\E[?47h, smul=\E[4m, .E3=\E[300S,
- .WS=\E[8;%d;%dt, Z0=\E[?3h, Z1=\E[?3l, use=xterm+sl-twm,
- use=ecma+index, use=linux-m1b,
+ use=putty+screen, use=xterm+sl-twm, use=ecma+index,
+ use=linux-m1b,
putty-m2|Putty Minitel 2 "like" Couleurs (Vert/Blanc/Noir),
hs,
acsc=``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{
{||}}~~,
dim@, kf1=\E[11~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~,
kf5=\E[15~, rmcup=\E[2J\E[?47l\E8, rmul=\E[24m,
smcup=\E7\E[?47h, smul=\E[4m, .E3=\E[300S,
- .WS=\E[8;%d;%dt, Z0=\E[?3h, Z1=\E[?3l, use=xterm+sl-twm,
- use=ecma+index, use=linux-m2,
+ use=putty+screen, use=xterm+sl-twm, use=ecma+index,
+ use=linux-m2,
+
+putty+screen|PuTTY with screen resizing extensions,
+ .WS=\E[8;%p1%d;%p2%dt, Z0=\E[?3h, Z1=\E[?3l,
+
+putty-screen|PuTTY with screen resizing extensions,
+ WS=\E[8;%p1%d;%p2%dt, Z0=\E[?3h, Z1=\E[?3l, use=putty,
screen.putty-m1|Putty m1 specific for screen,
dim@, rmul=\E[24m, smul=\E[4m, E3@, use=screen.linux-m1,
screen.putty-m1b|Putty m1b specific for screen,
colors@, pairs@,
op@, setab@, setaf@, setb@, setf@, use=screen.putty-m1,
screen.putty-m2|Putty m2 specific for screen,
acsc=++\,\,--..00``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttu
uvvwwxxyyzz{{||}}~~,
use=screen.putty-m1b,
# From: Alexandre Montaron, 19 Nov 2015, updated 19 Sep 2016
#
# He comments:
# viewdata lacks a true cup capability,
# so I achieved it with home and cud1/cuf1 sequences only !
viewdata|prestel/viewdata terminals,
am, bw, eslok, hz,
cols#40, lines#24,
bel=^G, civis=^T, clear=^L, cnorm=^Q, cr=\r, cub1=^H, cud1=\n,
cuf1=^I,
cup=\036%?%p1%{07}%>%t\n\n\n\n\n\n\n\n%;%?%p1%{15}%>%t\n\n
\n\n\n\n\n\n%;%?%p1%{4}%&%t\n\n\n\n%;%?%p1%{2}%&%t\n\n%;
%?%p1%{1}%&%t\n%;%?%p2%{07}%>%t\011\011\011\011\011\011
\011\011%;%?%p2%{15}%>%t\011\011\011\011\011\011\011
\011%;%?%p2%{23}%>%t\011\011\011\011\011\011\011\011%;%?
%p2%{31}%>%t\011\011\011\011\011\011\011\011%;%?%p2%{4}
%&%t\011\011\011\011%;%?%p2%{2}%&%t\011\011%;%?%p2%{1}%&
%t\011%;,
cuu1=^K, home=^^, nel=\r\n, rs2=^L, .el=^X, .ind=\n,
.rep=%p1%c\022%p2%'?'%+%c, .ri=^K,
viewdata-o|optimized version of viewdata prestel/viewdata terminals,
cup=\036%p1%?%p2%{20}%>%t%?%p1%{23}%=%t%Pa%{1}%e%{1}%+%;%;
%Pa%?%ga%{13}%<%t%?%ga%{07}%>%t\n\n\n\n\n\n\n\n%;%?%ga
%{4}%&%t\n\n\n\n%;%?%ga%{2}%&%t\n\n%;%?%ga%{1}%&%t\n%;%e
%{24}%ga%-%Pa%?%ga%{07}%>%t\013\013\013\013\013\013\013
\013%;%?%ga%{4}%&%t\013\013\013\013%;%?%ga%{2}%&%t\013
\013%;%?%ga%{1}%&%t\013%;%;%?%p2%{21}%<%t%?%p2%{07}%>%t
\011\011\011\011\011\011\011\011%;%?%p2%{15}%>%t\011
\011\011\011\011\011\011\011%;%?%p2%{4}%&%t\011\011\011
\011%;%?%p2%{2}%&%t\011\011%;%?%p2%{1}%&%t\011%;%e%{40}
%p2%-%Pa%?%ga%{07}%>%t\010\010\010\010\010\010\010\010%;
%?%ga%{15}%>%t\010\010\010\010\010\010\010\010%;%?%ga
%{4}%&%t\010\010\010\010%;%?%ga%{2}%&%t\010\010%;%?%ga
%{1}%&%t\010%;%?%p1%{23}%=%t\013%;%;,
.ll=^^^K, use=viewdata,
# Samples with TERM=viewdata and TERM=viewdata-rv: http://canal.chez.com/blog/
viewdata-rv|prestel/viewdata terminals with reverse capabilitie (as green),
xmc#1,
rmso=\EG, smso=\EB, use=viewdata-o,
######## OBSOLETE VDT TYPES
#
# These terminals are *long* dead -- these entries are retained for
# historical interest only.
#### Amtek Business Machines
#
# (abm80: early versions of this entry apparently had ":se=\E^_:so=\E^Y",
# but these caps were commented out in 8.3; also, removed overridden
# ":do=^J:" -- esr)
abm80|amtek business machines 80,
OTbs, am, bw,
cols#80, lines#24,
cbt=^T, clear=\E^\, cub1=^H, cud1=\E^K, cuf1=^P,
cup=\E\021%p2%{32}%+%c%p1%{32}%+%c, cuu1=\E^L,
dl1=\E^S, ed=\E^X, el=\E^O, home=\E^R, il1=\E^Z,
#### Bell Labs blit terminals
#
# These were AT&T's official entries. The 5620 FAQ maintained by
# David Breneman <daveb@dgtl.com> has this to say:
#
# Actually, in the beginning was the Jerq, and the Jerq was white with a
# green face, and Locanthi and Pike looked upon the Jerq and said the Jerq
# was good. But lo, upon the horizon loomed a mighty management-type person
# (known now only by the initials VP) who said, the mighty Jerq must stay
# alone, and could not go forth into the world. So Locanthi and Pike put the
# Jerq to sleep, cloned its parts, and the Blit was brought forth unto the
# world. And the Jerq lived the rest of its days in research, but never
# strayed from those paths.
#
# In all seriousness, the Blit was originally known as the Jerq, but when
# it started to be shown outside of the halls of the Bell Labs Research
# organization, the management powers that be decided that the name could
# not remain. So it was renamed to be Blit. This was in late 1981.
#
# (The AT&T 5620 was the commercialized Blit. Its successors were the 630,
# 730, and 730+.)
#
blit|jerq|blit running teletype rom,
am, eo, ul, xon,
cols#87, it#8, lines#72,
bel=^G, clear=^L, cr=\r, cub1=\ED, cud1=\n, cuf1=\EC,
cup=\EY%p2%{32}%+%c%p1%{32}%+%c, cuu1=\EA,
dch=\Ee%p1%{32}%+%c, dch1=\Ee!, dl=\EE%p1%{32}%+%c,
dl1=\EE!, el=\EK, ht=^I, ich=\Ef%p1%{32}%+%c, ich1=\Ef!,
il=\EF%p1%{32}%+%c, il1=\EF!, ind=\n, kbs=^H, kcub1=\ED,
kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf1=\Ex, kf2=\Ey, kf3=\Ez,
# (cbblit: here's a BSD termcap that says <cud1=\EG> -- esr)
cbblit|fixterm|blit running columbus code,
cols#88,
ed=\EJ, flash=\E^G, ich1@, mc4=^T, mc5=^R, mc5p=\EP%p1%03d,
rmir=\ER, rmso=\EV!, rmul=\EV", smir=\EQ, smso=\EU!,
smul=\EU", use=blit,
oblit|ojerq|first version of blit rom,
am, da, db, eo, mir, ul, xon,
cols#88, it#8, lines#72,
bel=^G, clear=^L, cr=\r, cub1=\ED, cud1=\n, cuf1=\EC,
cup=\EY%p2%{32}%+%c%p1%{32}%+%c, cuu1=\EA, dch1=\EO,
dl=\Ee%p1%{32}%+%c, dl1=\EE, ed=\EJ, el=\EK, flash=\E^G,
ht=^I, il=\Ef%p1%{32}%+%c, il1=\EF, ind=\n, kbs=^H, rmir=\ER,
smir=\EQ,
#### Bolt, Beranek & Newman (bbn)
#
# The BitGraph was a product of the now-defunct BBN Computer Corporation.
# The parent company, best known as the architects of the Internet, is
# still around.
#
# Jeff DelPapa <dp@world.std.com> writes:
# The bitgraph was a large white box that contained a monochrome bitmap
# display, and a 68000 to run it. You could download code and run it on
# the cpu, it had 128kb (I think) of memory. I used one in the late
# 70's, sure beat a vt100. It had one strange feature tho -- it used
# the cpu to bitblt pixels to scroll, it took longer than the refresh
# rate, and looked like a rubber sheet stretching, then snapping
# upwards. It had everything the early mac had, except a floppy drive a
# small screen (it had a 17" crisp beauty) and a real OS. They (Bolt
# Beranek and Neuman) sold at most a few hundred of them to the real
# world. DOD may have bought more...
#
# Entries for the BitGraph terminals. The problem
# with scrolling in vi can only be fixed by getting BBN to put
# smarter scroll logic in the terminal or changing vi or padding
# scrolls with about 500 ms delay.
#
# I always thought the problem was related to the terminal
# counting newlines in its input buffer before scrolling and
# then moving the screen that much. Then vi comes along and
# paints lines in on the bottom line of the screen, so you get
# this big white gap.
bitgraph|bg2.0nv|bg3.10nv|bbn bitgraph 2.0 or later (normal video),
flash=\E[?5h$<200/>\E[?5l, is2=\E>\E[?5l\E[?7h,
use=bg2.0,
bg2.0rv|bg3.10rv|bbn bitgraph 2.0 (reverse video),
flash=\E[?5l$<200/>\E[?5h, is2=\E>\E[?5h\E[?7h,
use=bg2.0,
bg2.0|bg3.10|bbn bitgraph 2.0 or later (no init),
OTbs, xenl,
cols#85, lines#64,
bel=^G, clear=\E[H\E[J$<150>, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=%i\E[%p1%d;%p2%dH, cuu1=\E[A, dl1=\E[M$<2*>,
ed=\E[J$<150>, el=\E[K$<2>, ht=^I, il1=\E[L$<2*>,
ind=\n$<280>, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, lf1=PF1,
lf2=PF2, lf3=PF3, lf4=PF4, rc=\E8, rmkx=\E>, rmso=\E[m, sc=\E7,
sgr0=\E[m, smkx=\E=, smso=\E[7m,
bg1.25rv|bbn bitgraph 1.25 (reverse video),
flash=\E[?5l$<200/>\E[?5h, is2=\E>\E[?5h\E[?7h,
use=bg1.25,
bg1.25nv|bbn bitgraph 1.25 (normal video),
flash=\E[?5h$<200/>\E[?5l, is2=\E>\E[?5l\E[?7h,
use=bg1.25,
# (bg1.25: I added <rmam>/<smam> based on the init string -- esr)
bg1.25|bbn bitgraph 1.25,
cols#85, lines#64,
bel=^G, clear=\E[H\E[J$<150>, cr=\r, cub1=^H, cud1=\E[B,
cuf1=\E[C, cup=%i\E[%p1%d;%p2%dH, cuu1=\E[A,
dl1=\E[M$<2*>, ed=\E[J$<150>, el=\E[K$<2>, ht=^I,
il1=\E[L$<2*>, ind=\n$<280>, kcub1=\ED, kcud1=\EB,
kcuf1=\EC, kcuu1=\EA, kf1=\EP, kf2=\EQ, kf3=\ER, kf4=\ES,
lf1=PF1, lf2=PF2, lf3=PF3, lf4=PF4, ll=\E[64;1H, rmam=\E[?7l,
rmkx=\E>, rmso=\E[m, sgr0=\E[m, smam=\E[?7h, smkx=\E=,
smso=\E[7m,
#### Bull (bq, dku, vip)
#
# (Adapted for terminfo; AIX extension capabilities translated -- esr)
#============================================#
# BULL QUESTAR 210 `SDP' terminals emulation #
#============================================#
#
# Description written by R.K.Saunders (Bull Transac)
#
# Modifications written by F. Girard (Bull MTS)
# 19-05-87 V02.00.01
# 17-12-87 V02.00.02
# 15-09-89 V02.00.05
#
# Typical technical selections F1 (modes SDP/ROLL):
# -------------------------------------------------------
# | 01 02 03 04 05 06 07 08 09 10 |
# | 1010 0011 1010 0110 0110 0001 0100 0000 0000 0000 |
# | |
# | 11 12 13 14 15 16 17 18 19 20 |
# | 0000 0110 100? 0000 0000 0000 0001 0000 0000 0001 |
# | |
# | 21 22 23 24 25 26 27 28 29 30 |
# | 0011 0000 0001 1000 0000 0000 0000 0000 0000 0000 |
# | |
# | 31 32 33 34 35 36 37 38 39 40 |
# | 1010 0011 0000 0000 0000 0000 0000 0000 0000 0000 |
# -------------------------------------------------------
# Typical firmware identification F5 "etat 6":
# P287.02.04b (AZERTY)
# P297.11.04 (24-pin: 2732) or P798.11.04 (28-pin: 2764)
# P298.03.03 (monochrome) or P374.03.02 (colour)
#
# SM SDP mode (VIP command): ^[[?=h
# RIS (erases screen): ^[c
# DMI disable keyboard: ^[`
# SM double rendition mode: ^[[?>h
# RM solicited status mode: ^[[5l
# RM character mode: ^[[>l
# RM echoplex mode: ^[[12l
# RM column tab mode: ^[[18l
# RM forbid SS2 keyboard mode: ^[[?<l
# SM scroll mode: ^[[=h
# FCF enable XON/XOFF: ^[P1s^[\
# MTL select end msg character: ^[[^Wp
# EMI enable keyboard: ^[b
# RIS retour etat initial: ^[c
# enable FC keypad: ^[[?<h,
# MPW map status line window: ^[PY99:98^[\
# SCP select status line: ^[[0;98v
# ED erase entire partition: ^[[2J
# SCP select main partition: ^[[v
# SM character insertion mode: ^[[4h
# RM character replacement mode: ^[[4l
# COO cursor on: ^[[r
# COO cursor off: ^[[1r
# SGR dim (turquoise) rev attr: ^[[2;7m
# SGR Data normal attr: ^[[m
# SO Line-graphic mode ON: ^N
# SI Line-graphic mode OFF: ^O
# MC start routing to printer: ^[[5i
# MC stop routing to printer: ^M^[[4i
#
# This entry covers the following terminals:
# dku7102, tws2102, and tws models 2105 to 2112
tws-generic|dku7102|Bull Questar tws terminals,
am, eslok, hs, mir, msgr, xenl, xhp@, xon,
cols#80, it#8, lines#24, wsl#80,
acsc=``aaffggj)k\,l&m#n/ooppq*rrsst'u-v+w.x%yyzz{{||}}~~,
bel=^G, blink=\E[0;5m, cbt=\E[Z, civis=\E[1r, clear=\E[2J,
cnorm=\E[r, cr=\r, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB,
cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%df,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dim=\E[0;2m, dl=\E[%p1%dM, dl1=\E[M,
dsl=\EPY99\:98\E\\\E[0;98v\E[2J\E[v, ed=\E[J, el=\E[K,
fsl=\E[v, home=\E[H, ht=\E[I, hts=\EH, il=\E[%p1%dL,
il1=\E[L, ind=\n, invis=\E[0;8m,
is1=\E[?=h\Ec\E`\E[?>h\EPY99\:98\E\\,
is2=\E[5;>;12;18;?<l\E[=h\EP1s\E\\\E[\027p,
is3=\Eb\E[?<h, kbs=^H, kcbt=\E[Z, kctab=\E[g, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M,
ked=\E[J, kel=\E[K, kf1=\E[1u\027, kf2=\E[2u\027,
kf3=\E[3u\027, kf4=\E[4u\027, kf5=\E[5u\027,
kf6=\E[6u\027, kf7=\E[7u\027, kf8=\E[8u\027, khome=\E[H,
khts=\EH, kil1=\E[L, krmir=\E[4l, ll=\E[H\E[A, mc0=\E[0i,
mc4=\r\E[4i, mc5=\E[5i, rev=\E[0;7m, rmacs=^O,
rmcup=\E[0;98v\E[2J\E[v, rmir=\E[4l, rmso=\E[m,
rmul=\E[m, rs2=\E[?=h\Ec, s0ds=^O, s1ds=^N,
sgr=\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p5%t;2%;%?
%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smcup=\E[?>h\EPY99\:98\E\\,
smir=\E[4h, smso=\E[0;7m, smul=\E[0;4m, tbc=\E[3g,
tsl=\EPY99\:98\E\\\E[0;98v\E[2;7m,
tws2102-sna|dku7102-sna|BULL Questar tws2102 for SNA,
dsl=\E[0;98v\E[2J\E[v, fsl=\E[v, is3=\Eb, tsl=\E[0;98v,
use=tws-generic,
tws2103|xdku|BULL Questar tws2103,
ht=^I, use=tws-generic,
tws2103-sna|dku7103-sna|BULL Questar tws2103 for SNA,
ht=^I, use=tws2102-sna,
dku7102-old|BULL Questar 200 DKU7102 (microcode version < 6),
clear=\E[2J\E[H, cup@, dl@, dl1@,
dsl=\EPY99\:98\E\\\E[0;98v\E[2J\E[H\E[v, el=\E[K\E[m,
il@, il1@, tsl=\EPY99\:98\E\\\E[0;98v\E[H\E[2;7m,
use=tws-generic,
dku7202|BULL Questar 200 DKU7202 (colour/character attributes),
blink=\E[0;2;4m, dim=\E[0;5m, ht=^I, is3=\E[?3h\Eb,
sgr=\E[0%?%p1%t;2;4;5;7%;%?%p3%t;7%;%?%p2%t;2%;%?%p4%t;2;4%;
%?%p5%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
smso=\E[0;4;5;7m, smul=\E[0;2m, use=tws-generic,
#=========================================================#
# BULL QUESTAR 303 & 310 `DEC VT 320' terminals emulation #
#=========================================================#
#
# Description written by J. Staerck (BULL SA)
# Copyright (c) 1989 BULL SA
#---------------------------------------------------------------------------
# This entry is used for terminals with vt320 emulation mode
# and following set-up :
# 8 bit ISO Latin Character Set (ISO 8859-1),
# 7 bit Control Characters,
# 80 columns screen.
# Hereafter are some DEC vt terminals' commands. (valid on vt200 and 300)
# They are used in string capabilities with vt220-320 emulation mode.
# In the following DEC definitions, two kinds of terminfo databases are
# provided :
# 1. the first with Command Sequence Introducer starting with escape
# sequence in 7 bits characters ex. ESC [ : 2 chars. in 7-bit mode.
# 2. the second with Command Sequence Introducer starting with escape
# sequence in 8 bits characters ex. ESC [ : 1 char. 'CSI' =x9B.
# Soft Terminal Reset esc [ ! p
# RIS (erases screen): esc c
# DECKPNM numeric keypad mode: esc >
# DECKPAM applic. keypad mode: esc =
# DECSTBM Scrolling region: esc [ r
# SCS select G0 = US: esc ( B
# SCS select G1 = line-graphic: esc ) 0
# Select 7-bit C1 controls: esc sp F
# Select 8-bit C1 controls: esc sp G
# Select cursor home: esc [ H
# Select erase screen: esc [ J
# SM KAM lock keyboard: esc [ 2 h
# RM KAM unlock keyboard: esc [ 2 l
# SM SRM local echo off: esc [ 1 2 h
# RM SRM local echo on: esc [ 1 2 l
# SM LNM New line : esc [ 2 0 h
# RM LNM return = CR only: esc [ 2 0 l
# SM DECCKM cursor keys mode: esc [ ? 1 h
# RM DECCKM appli. keys mode: esc [ ? 1 l
# SM DECANM ANSI mode on: esc [ ? 2 h
# RM DECANM ANSI mode off: esc [ ? 2 l
# SM DECCOLM 132-column screen: esc [ ? 3 h
# RM DECCOLM 80-column screen: esc [ ? 3 l
# SM DECSCLM Smooth scroll: esc [ ? 4 h
# RM DECSCLM Jump scroll: esc [ ? 4 l
# SM DECSCNM screen light backgr. esc [ ? 5 h
# RM DECSCNM screen dark backgr. esc [ ? 5 l
# SM DECOM move within margins: esc [ ? 6 h
# RM DECOM move outside margins: esc [ ? 6 l
# SM DECAWM auto right margin: esc [ ? 7 h
# RM DECAWM auto right margin: esc [ ? 7 l
# SM DECARM auto repeat: esc [ ? 8 h
# RM DECARM auto repeat: esc [ ? 8 l
# DECSASD Select active main: esc [ 0 $ }
# DECSASD Select active status: esc [ 1 $ }
# DECSSDT Select status none: esc [ 0 $ ~
# DECSSDT Select status indic.: esc [ 1 $ ~
# DECSSDT Select status host-wr: esc [ 2 $ ~
# SM DECTCEM Visible cursor: esc [ ? 2 5 h
# RM DECTCEM Invisible cursor: esc [ ? 2 5 l
# SM DECNCRM 7 bits NCR set: esc [ ? 4 2 h
# RM DECNCRM Multi or ISO latin: esc [ ? 4 2 l
# SM DECNKM numeric keypad mode: esc [ ? 6 6 h
# RM DECNKM numeric keypad appl.: esc [ ? 6 6 l
# SM DECKBUM clavier informatique esc [ ? 6 8 h
# RM DECKBUM clavier bureautique: esc [ ? 6 8 l
# DECSCL vt300 mode 8-bit ctrl: esc [ 6 3 " p
# or DECSCL vt300 mode 8-bit ctrl: esc [ 6 3 ; 0 " p
# or DECSCL vt300 mode 8-bit ctrl: esc [ 6 3 ; 2 " p
# DECSCL vt300 mode 7-bit ctrl: esc [ 6 3 ; 1 " p
# Char. and Line attributes: esc [ Ps ... Ps m
# with: 0 All off, 1 Bold, 4 Underline, 5 Blinking, 7 Reverse
# and : 22 Bold off, 24 Underline off, 25 Blinking off, 27 Reverse off
#
# This entry covers BQ303, BQ306, BQ310, Q303, Q306, Q310
bq300|Bull vt320 ISO Latin 1 80 columns terminal,
am, eo, eslok, hs, km, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, vt#3, wsl#80,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
dsl=\E[1$}\E[2$~\n\E[0$}, ech=\E[%p1%dX, ed=\E[J,
el=\E[K, el1=\E[1K, enacs=\E(B\E)0,
flash=\E[?5h$<50>\E[?5l, fsl=\E[0$}, home=\E[H, ht=^I,
hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED,
is1=\E[63;1"p\E[2h,
is2=\E[?2h\E[?3l\E[?5l\E[?7h\E[?8h\E>\E[?1l\E\sF\E[?42l\E[?4
l,
is3=\E[0$}\E[?25h\E[2l\E[H\E[J, ka1=\EOw, ka3=\EOy,
kb2=\EOu, kbs=^H, kc1=\EOq, kc3=\EOs, kcub1=\E[D, kcud1=\E[B,
- kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kf1=\EOP, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
- kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
- kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS,
- kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~,
- khlp=\E[28~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
- krdo=\E[29~, kslt=\E[4~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4,
- nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E(B, rmam=\E[?7l,
+ kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf10=\E[21~, kf11=\E[23~,
+ kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
+ kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
+ kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf6=\E[17~,
+ kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khlp=\E[28~,
+ krdo=\E[29~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, nel=\EE,
+ rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E(B, rmam=\E[?7l,
rmcup=\E[?7h, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m,
rmul=\E[24m, rs1=\E[!p, rs2=\E[?3l, s0ds=\E(B, s1ds=\E(0,
sc=\E7,
sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1
%;m%?%p9%t\E(0%e\E(B%;,
sgr0=\E[0m\E(B, smacs=\E(0, smam=\E[?7h,
smcup=\E[?7l\E[?1l\E(B, smir=\E[4h, smso=\E[7m,
- smul=\E[4m, tbc=\E[3g, tsl=\E[1$}\E[2$~, use=ansi+pp,
+ smul=\E[4m, tbc=\E[3g, tsl=\E[1$}\E[2$~,
+ use=vt220+vtedit, use=ansi+pp, use=vt220+cvis,
bq300-rv|Bull vt320 reverse 80 columns,
flash=\E[?5l$<50>\E[?5h,
is2=\E[?2h\E[?3l\E[?5h\E[?7h\E[?8h\E>\E[?1l\E\sF\E[?42l\E[?4
l,
use=bq300,
bq300-w|Bull vt320 132 columns,
cols#132, wsl#132,
is2=\E[?2h\E[?3h\E[?5l\E[?7h\E[?8h\E>\E[?1l\E\sF\E[?42l\E[?4
l,
rs2=\E[?3h, use=bq300,
bq300-w-rv|Bull vt320 reverse mode 132 columns,
cols#132, wsl#132,
flash=\E[?5l$<50>\E[?5h,
is2=\E[?2h\E[?3h\E[?5h\E[?7h\E[?8h\E>\E[?1l\E\sF\E[?42l\E[?4
l,
rs2=\E[?3h, use=bq300,
# This entry is used for terminals with vt320 emulation mode
# and following set-up :
# 8 bit ISO Latin Character Set (ISO 8859-1),
# 8 bit Control Characters, (CSI coded as x9B for ESC [)
# 80 columns screen.
# Soft Terminal Reset csi ! p
# RIS (erases screen): esc c
# DECKPNM numeric keypad mode: esc >
# DECKPAM applic. keypad mode: esc =
# DECSTBM Scrolling region: esc [ r
# SCS select G0 = US: esc ( B
# SCS select G1 = line-graphic: esc ) 0
# Select 7-bit C1 controls: esc sp F
# Select 8-bit C1 controls: esc sp G
# Select cursor home: csi H
# Select erase screen: csi J
# SM KAM lock keyboard: csi 2 h
# RM KAM unlock keyboard: csi 2 l
# SM SRM local echo off: csi 1 2 h
# RM SRM local echo on: csi 1 2 l
# SM LNM New line : csi 2 0 h
# RM LNM return = CR only: csi 2 0 l
# SM DECCKM cursor keys mode: csi ? 1 h
# RM DECCKM appli. keys mode: csi ? 1 l
# SM DECANM ANSI mode on: csi ? 2 h
# RM DECANM ANSI mode off: csi ? 2 l
# SM DECCOLM 132-column screen: csi ? 3 h
# RM DECCOLM 80-column screen: csi ? 3 l
# SM DECSCLM Smooth scroll: csi ? 4 h
# RM DECSCLM Jump scroll: csi ? 4 l
# SM DECSCNM screen light backgr. csi ? 5 h
# RM DECSCNM screen dark backgr. csi ? 5 l
# SM DECOM move within margins: csi ? 6 h
# RM DECOM move outside margins: csi ? 6 l
# SM DECAWM auto right margin: csi ? 7 h
# RM DECAWM auto right margin: csi ? 7 l
# SM DECARM auto repeat: csi ? 8 h
# RM DECARM auto repeat: csi ? 8 l
# DECSASD Select active main: csi 0 $ }
# DECSASD Select active status: csi 1 $ }
# DECSSDT Select status none: csi 0 $ ~
# DECSSDT Select status indic.: csi 1 $ ~
# DECSSDT Select status host-wr: csi 2 $ ~
# SM DECTCEM Visible cursor: csi ? 2 5 h
# RM DECTCEM Invisible cursor: csi ? 2 5 l
# SM DECNCRM 7 bits NCR set: csi ? 4 2 h
# RM DECNCRM Multi or ISO latin: csi ? 4 2 l
# DECSCL vt300 mode 8-bit ctrl: csi 6 3 " p
# or DECSCL vt300 mode 8-bit ctrl: csi 6 3 ; 0 " p
# DECSCL vt300 mode 7-bit ctrl: csi 6 3 ; 1 " p
# Char. and Line attributes: csi Ps ... Ps m
# with: 0 All off, 1 Bold, 4 Underline, 5 Blinking, 7 Reverse
# and : 22 Bold off, 24 Underline off, 25 Blinking off, 27 Reverse off
# (bq300-8: <cub1>,<cuf1>,<cuu1>,<cud1>,<dl1>,<il1> to get under 1024 --esr)
bq300-8|Bull vt320 full 8 bits 80 columns,
am, eo, eslok, hs, km, mc5i, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, vt#3, wsl#80,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, blink=\2335m, bold=\2331m, civis=\233?25l,
- clear=\233H\233J, cnorm=\233?25h, cr=\r,
+ bel=^G, blink=\2335m, bold=\2331m, clear=\233H\233J, cr=\r,
csr=\233%i%p1%d;%p2%dr, cub=\233%p1%dD, cub1=\2331D,
cud=\233%p1%dB, cud1=\2331B, cuf=\233%p1%dC, cuf1=\2331C,
cup=\233%i%p1%d;%p2%dH, cuu=\233%p1%dA, cuu1=\2331A,
dch=\233%p1%dP, dch1=\233P, dl=\233%p1%dM, dl1=\233M,
dsl=\2331$}\2332$~\n\2330$}, ech=\233%p1%dX, ed=\233J,
el=\233K, el1=\2331K, enacs=\E(B\E)0,
flash=\233?5h$<50>\233?5l, fsl=\2330$}, home=\233H,
ht=^I, hts=\EH, ich=\233%p1%d@, il=\233%p1%dL, il1=\233L,
ind=\ED, is1=\E[63;2"p\E[2h,
is2=\E[?2h\E[?3l\E[?5l\E[?7h\E[?8h\E>\E[?1l\E\sG\E[?42l\E[?4
l,
is3=\2330$}\233?25h\2332l\233H\233J, ka1=\217w,
ka3=\217y, kb2=\217u, kbs=^H, kc1=\217q, kc3=\217s,
kcub1=\233D, kcud1=\233B, kcuf1=\233C, kcuu1=\233A,
kdch1=\2333~, kf1=\217P, kf10=\23321~, kf11=\23323~,
kf12=\23324~, kf13=\23325~, kf14=\23326~, kf15=\23328~,
kf16=\23329~, kf17=\23331~, kf18=\23332~, kf19=\23333~,
kf2=\217Q, kf20=\23334~, kf3=\217R, kf4=\217S, kf6=\23317~,
kf7=\23318~, kf8=\23319~, kf9=\23320~, kfnd=\2331~,
khlp=\23328~, kich1=\2332~, knp=\2336~, kpp=\2335~,
krdo=\23329~, kslt=\2334~, lf1=pf1, lf2=pf2, lf3=pf3,
lf4=pf4, mc0=\233i, mc4=\2334i, mc5=\2335i, nel=\EE, rc=\E8,
rev=\2337m, ri=\EM, rmacs=\E(B, rmam=\233?7l,
rmcup=\233?7h, rmir=\2334l, rmkx=\233?1l\E>,
rmso=\23327m, rmul=\23324m, rs1=\E[!p, rs2=\E[?3l,
s0ds=\E(B, s1ds=\E(0, sc=\E7,
sgr=\233%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;
1%;m%?%p9%t\E(0%e\E(B%;,
sgr0=\2330m\E(B, smacs=\E(0, smam=\233?7h,
smcup=\233?7l\233?1l\E(B, smir=\2334h, smso=\2337m,
smul=\2334m, tbc=\2333g, tsl=\2331$}\2332$~,
+ use=vt220+cvis8,
bq300-8rv|Bull vt320 8-bit reverse mode 80 columns,
flash=\233?5l$<50>\233?5h,
is2=\E[?2h\E[?3l\E[?5h\E[?7h\E[?8h\E>\E[?1l\E\sG\E[?42l\E[?4
l,
use=bq300-8,
bq300-8w|Bull vt320 8-bit 132 columns,
cols#132, wsl#132,
is2=\E[?2h\E[?3h\E[?5l\E[?7h\E[?8h\E>\E[?1l\E\sG\E[?42l\E[?4
l,
rs2=\233?3h, use=bq300-8,
bq300-w-8rv|Bull vt320 8-bit reverse mode 132 columns,
cols#132, wsl#132,
flash=\233?5l$<50>\233?5h,
is2=\E[?2h\E[?3h\E[?5h\E[?7h\E[?8h\E>\E[?1l\E\sG\E[?42l\E[?4
l,
rs2=\233?3h, use=bq300-8,
# This entry is used for terminals with vt320 emulation mode
# a 102 keys keyboard (PC scancode !) and following set-up :
# 8 bit ISO Latin Character Set (ISO 8859-1),
# 7 bit Control Characters,
# 80 columns screen.
bq300-pc|Questar 303 with PC keyboard ISO Latin 1 80 columns,
- kbs=^H, kdch1=\E[3~, kend=\E[4~, kf1=\E[17~, kf10=\E[28~,
- kf11=\E[29~, kf12=\E[31~, kf13@, kf14@, kf15@, kf16@, kf17@,
- kf18@, kf19@, kf2=\E[18~, kf20@, kf3=\E[19~, kf4=\E[20~,
- kf5=\E[21~, kf6=\E[23~, kf7=\E[24~, kf8=\E[25~, kf9=\E[26~,
- kfnd@, khlp@, khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
- krdo@, kslt@, lf1@, lf2@, lf3@, lf4@, use=bq300,
+ kbs=^H, kf1=\E[17~, kf10=\E[28~, kf11=\E[29~, kf12=\E[31~,
+ kf13@, kf14@, kf15@, kf16@, kf17@, kf18@, kf19@, kf2=\E[18~, kf20@,
+ kf3=\E[19~, kf4=\E[20~, kf5=\E[21~, kf6=\E[23~, kf7=\E[24~,
+ kf8=\E[25~, kf9=\E[26~, kfnd@, khlp@, krdo@, kslt@, lf1@, lf2@,
+ lf3@, lf4@, use=vt220+pcedit, use=bq300,
bq300-pc-rv|Questar 303 with PC keyboard reverse mode 80 columns,
flash=\E[?5l$<50>\E[?5h,
is2=\E[?2h\E[?3l\E[?5h\E[?7h\E[?8h\E>\E[?1l\E\sF\E[?42l\E[?4
l,
use=bq300-pc,
bq300-pc-w|Questar 303 with PC keyboard 132 columns terminal,
cols#132, wsl#132,
is2=\E[?2h\E[?3h\E[?5l\E[?7h\E[?8h\E>\E[?1l\E\sF\E[?42l\E[?4
l,
rs2=\E[?3h, use=bq300-pc,
bq300-pc-w-rv|Questar 303 with PC keyboard reverse mode 132 columns,
cols#132, wsl#132,
flash=\E[?5l$<50>\E[?5h,
is2=\E[?2h\E[?3h\E[?5h\E[?7h\E[?8h\E>\E[?1l\E\sF\E[?42l\E[?4
l,
rs2=\E[?3h, use=bq300-pc,
# 8 bit ISO Latin Character Set (ISO 8859-1),
# 8 bit Control Characters,
# 80 columns screen.
bq300-8-pc|Q306-8-pc|Questar 303 with PC keyboard in full 8 bits 80 columns,
kbs=^H, kdch1=\2333~, kend=\2334~, kf1=\23317~,
kf10=\23328~, kf11=\23329~, kf12=\23331~, kf13@, kf14@,
kf15@, kf16@, kf17@, kf18@, kf19@, kf2=\23318~, kf20@,
kf3=\23319~, kf4=\23320~, kf5=\23321~, kf6=\23323~,
kf7=\23324~, kf8=\23325~, kf9=\23326~, kfnd@, khlp@,
khome=\2331~, kich1=\2332~, knp=\2336~, kpp=\2335~, krdo@,
kslt@, lf1@, lf2@, lf3@, lf4@, use=bq300-8,
bq300-8-pc-rv|Questar 303 with PC keyboard full 8 bits reverse mode 80 columns,
flash=\E[?5l$<50>\E[?5h,
is2=\E[?2h\E[?3l\E[?5h\E[?7h\E[?8h\E>\E[?1l\E\sG\E[?42l\E[?4
l,
use=bq300-8-pc,
bq300-8-pc-w|Questar 303 with PC keyboard full 8 bits 132 columns,
cols#132, wsl#132,
is2=\E[?2h\E[?3h\E[?5l\E[?7h\E[?8h\E>\E[?1l\E\sG\E[?42l\E[?4
l,
rs2=\E[?3h, use=bq300-8-pc,
bq300-8-pc-w-rv|Questar 303 with PC keyboard full 8 bits reverse 132 columns,
cols#132, wsl#132,
flash=\E[?5l$<50>\E[?5h,
is2=\E[?2h\E[?3h\E[?5h\E[?7h\E[?8h\E>\E[?1l\E\sG\E[?42l\E[?4
l,
rs2=\E[?3h, use=bq300-8-pc,
#======================================================#
# BULL QUESTAR 310 `VIP 7800/8800' terminals emulation #
#======================================================#
# normal mode, 8 bits, 80 columns terminal.
# RES reset : ^[e
# RIS reset initial state: ^[c
# BLE bell enable ^[h
# BLD bell disable ^[g
# CAMS char. attr. mode set ^[[D
# CAMR char. attr. mode reset ^[[G
# CLR clear ^[`
# KBU keyboard unlock (set) ^[[W
# KBL keyboard lock (reset) ^[[X
# CM character mode (async.) ^[k
# NEP non echoplex mode (by host) ^[l
# EP echoplex mode (by host) ^[m
# IM insert mode set ^[[I
# IM insert mode reset ^[[J
# RMS roll mode set ^[r
# RMR roll mode reset ^[q
# SM78 set mode vip7800 ^[[1q
# SD scroll up (72 lines) ^[[0s
# SD scroll down (72 lines) ^[[1s
# RBM block mode reset ^[[E
# SLS status line set ^[w
# SLR status line reset ^[v
# SLL status line lock ^[O
# LGS Line-graphic mode set ^[G
# LGR Line-graphic mode reset ^[F
# TBC tab clear (at cursor pos.) ^[[g
# TBI tab initialize ^[[N
# TBS tab set (at cursor pos.) ^[p
# PDS print data space ^[[0p
# PHD print host data ^[[3p
# PDT print data terminator ^[[<p
# PRES print adapter reset ^[[2p
# SSPR multi-part. reset ^[[<>u
# SSP0 partition 0 set ^[[00u
# SSP1 partition n format 1 ^[[PnPnSTRINGu
# SSP2 partition n format 2 ^[[PnPnSTRINGu
# SSP3 partition n format 3 ^[[PnPnu
# ATR attribute (visual)
# blink : ^[sB
# dim : ^[sL
# hide (blank) : ^[sH
# restore : ^[sR
# inverse video : ^[sI
# prot. : ^[sP
# underline : ^[s_
# reset : ^{
#
# This covers the vip7800 and BQ3155-vip7800
vip|Bull Questar 3155-7800,
am, eslok, hs, km, mc5i, msgr, xenl, xon,
cols#80, it#8, lines#24, vt#3, wsl#80,
acsc=0pjdkblamcnkqitgufvhwexj, bel=^G, blink=\EsB,
cbt=\E[Z, clear=\E`, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\E[%i%p1%03d%p2%03df, cuu1=\EA, dch1=\E[P, dim=\EsL,
dl1=\E[M, dsl=\Ev, ed=\EJ, el=\EK,
flash=\007$<80>\007$<80>\007, fsl=\EO, home=\EH, ht=^I,
hts=\Ep, ich1=\E[I, ind=\n, invis=\EsH,
is2=\E[00u\E[<>001001024080024080u\E[01u,
is3=\Er\E[W\E`, kHOM=\EH, kLFT=\Eo, kRIT=\Eu, kbs=^H,
kcbt=\E[Z, kclr=\E`, kctab=\E[g, kcub1=\ED, kcud1=\EB,
kcuf1=\EC, kcuu1=\EA, kdch1=\E[P, kdl1=\E[M, ked=\EJ,
kel=\EK, kf1=\E0, kf10=\ET, kf11=\E\\, kf12=\E\^, kf13@, kf14@,
kf15@, kf16@, kf17@, kf18@, kf19@, kf2=\E2, kf20@, kf21=\E1,
kf22=\E5, kf23=\E7, kf24=\E9, kf25=\E;, kf26=\E=, kf27=\E?,
kf28=\EQ, kf29=\ES, kf3=\E6, kf30=\EV, kf31=\E], kf32=\E_,
kf4=\E8, kf5=\E\:, kf6=\E<, kf7=\E>, kf8=\EP, kf9=\ER,
khome=\EH, khts=\Ep, kich1=\E[I, kil1=\E[L, kind=\E[0s,
kll=\EH\EA, kri=\E[1s, krmir=\E[J, ktbc=\E[N, lf1=pf1,
lf2=pf2, lf3=pf3, lf4=pf4, ll=\EH\EA, mc0=\E[0p, mc4=\E[<p,
mc5=\E[3p, nel=\r, prot=\EsP, rev=\EsI,
ri=\EA\EJ\EH\E[L$<10>, rmacs=\EF, rmir=\E[J, rmso=\EsR,
rmul=\EsR, rs1=\Ec, rs2=\E[G, s0ds=\EF, s1ds=\EG,
sgr0=\EsR\EsU\EF, smacs=\EG, smir=\E[I, smso=\EsI,
smul=\Es_, tbc=\E[N, tsl=\Ew,
# normal screen, 8 bits, 132 columns terminal.
vip-w|vip7800-w|Q310-vip-w|Q310-vip-w-am|Questar 3155-vip7800 wide,
cols#132, wsl#132,
is2=\E[00u\E[<>001001024132024132u\E[01u, use=vip,
vip-H|vip7800-H|Q310-vip-H|Q310-vip-H-am|Questar 3155-vip7800 72 lines,
lines#72,
is2=\E[00u\E[<>001001024080072080u\E[01u, use=vip,
vip-Hw|vip7800-Hw|Q310-vip-Hw|Questar 3155-vip7800 wide 72 lines,
cols#132, lines#72, wsl#132,
is2=\E[00u\E[<>001001024132072132u\E[01u, use=vip,
#### Chromatics
#
# I have put the long strings in <smcup>/<rmcup>. Ti sets up a window
# that is smaller than the screen, and puts up a warning message
# outside the window. Te erases the warning message, puts the
# window back to be the whole screen, and puts the cursor at just
# below the small window. I defined <cnorm> and <civis> to really turn
# the cursor on and off, but I have taken this out since I don't
# like the cursor being turned off when vi exits.
cg7900|chromatics|chromatics 7900,
am,
cols#80, lines#40,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=^],
cup=\001M%p2%d\,%p1%d\,, cuu1=^K, dch1=^A<1, dl1=^A<2,
ed=^Al, el=^A`, home=^\, ich1=^A>1, il1=^A>2, ind=\n, ll=^A|,
rmcup=\001W0\,40\,85\,48\,\014\001W0\,0\,85\,48\,\001M0\,40
\,,
rmso=\001C1\,\001c2\,,
smcup=\001P0\001O1\001R1\001C4\,\001c0\,\014\001M0\,42\,WARN
ING\sDOUBLE\sENTER\sESCAPE\sand\s\025\001C1\,\001c2\,
\001W0\,0\,79\,39\,,
smso=\001C4\,\001c7\,, uc=^A^A_^A\0,
#### Computer Automation
#
ca22851|computer automation 22851,
am,
cols#80, lines#24,
bel=^G, clear=\014$<8>, cr=\r, cub1=^U, cud1=\n, cuf1=^I,
cup=\002%i%p1%c%p2%c, cuu1=^V, ed=^\, el=^], home=^^, ind=\n,
kcub1=^U, kcud1=^W, kcuu1=^V, khome=^^,
#### Cybernex
#
# This entry has correct padding and the undocumented "ri" capability
cyb83|xl83|cybernex xl-83,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=\014$<62>, cr=\r, cub1=^H, cud1=\n, cuf1=^I,
cup=\027%p1%{32}%+%c%p2%{32}%+%c, cuu1=^N,
ed=\020$<62>, el=\017$<3>, home=^K, ind=\n, kcub1=^H,
kcud1=\n, kcuf1=^I, kcuu1=^N, ri=^N,
# (mdl110: removed obsolete ":ma=^Z^P:" and overridden ":cd=145^NA^W:" -- esr)
cyb110|mdl110|cybernex mdl-110,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=\030$<70>, cr=\r, cub1=^H, cud1=\n, cuf1=^U,
cup=\020%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z,
dch1=\016A\036$<3.5>, dl1=\016A\016\036$<40>,
ed=\016@\026$<6>, el=\016@\026$<145>, home=^Y,
ht=\011$<43>, ich1=\016A\035$<3.5>,
il1=\016A\016\035$<65>, ind=\n, rmso=^NG, smso=^NF,
#### Datapoint
#
# Datapoint is gone. They used to be headquartered in Texas.
# They created ARCnet, an Ethernet competitor that flourished for a while
# in the early 1980s before 3COM got wise and cut its prices. The service
# side of Datapoint still lives (1995) in the form of Intelogic Trace.
#
dp3360|datapoint|datapoint 3360,
OTbs, am,
cols#82, lines#25,
bel=^G, clear=^]^_, cr=\r, cub1=^H, cud1=\n, cuf1=^X, cuu1=^Z,
ed=^_, el=^^, home=^], ind=\n,
# From: Jan Willem Stumpel <jw.stumpel@inter.nl.net>, 11 May 1997
# The Datapoint 8242 Workstation was sold at least between 1985
# and 1989. To make the terminal work with this entry, press
# CONTROL-INT-INT to take the terminal off-line, and type (opt).
# Set the options AUTO ROLL, ROLL DN, and ESC KBD on, and AUTO
# CR/LF off. Use control-shift-[] as escape key, control-I as tab,
# shift-F1 to shift-F5 as F6 to F10 (unshifted F1 to F5 are in
# fact unusable because the strings sent by the terminal conflict
# with other keys).
# The terminal is capable of displaying "box draw" characters.
# For each graphic character you must send 2 ESC's (\E\E) followed
# by a control character as follows:
# character meaning
# ========= =======
# ctrl-E top tee
# ctrl-F right tee
# ctrl-G bottom tee
# ctrl-H left tee
# ctrl-I cross
# ctrl-J top left corner
# ctrl-K top right corner
# ctrl-L bottom left corner
# ctrl-M bottom right corner
# ctrl-N horizontal line
# ctrl-O vertical line
# Unfortunately this cannot be fitted into the termcap/terminfo
# description scheme.
dp8242|datapoint 8242,
msgr,
cols#80, lines#25,
bel=^G, civis=^Y, clear=^U\E^D^W^X, cnorm=^X, cr=\r, cub1=^H,
cud1=\n, cup=\011%p2%'\0'%+%c%p1%'\0'%+%c, dl1=\E^Z,
ed=^W, el=^V, home=^U, ht=^I, il1=\E^T, ind=^C,
is1=\E\014\E\016\0\230\0\317\025\027\030\E\004,
kbs=^H, kcub1=^D, kcud1=^B, kcuf1=^F, kcuu1=^E, kf1=^G\Ee,
kf10=\EK\Ea, kf2=^I\Ed, kf3=\n\Ec, kf4=\n\Eb, kf5=^S\Ea,
kf6=\EO\Ee, kf7=\EN\Ed, kf8=\EM\Ec, kf9=\EL\Eb, nel=\r\n,
rep=\E\023%p1%c%p2%c, ri=^K, rmso=\E^D, rmul=\E^D,
rs1=\E\014\E\016\0\230\0\317\025\027\030\E\004,
smso=\E^E, smul=\E^F,
wind=\E\014\E\016%p1%'\0'%+%c%p2%'\0'%+%c%p3%'\0'%+%c%p4%'
\0'%+%c\025,
#### DEC terminals (Obsolete types: DECwriter and vt40/42/50)
#
-# These entries are DEC's official terminfos for its older terminals.
-# Contact Bill Hedberg <hedberg@hannah.enet.dec.com> of Terminal Support
-# Engineering for more information. Updated terminfos and termcaps
-# are kept available at ftp://gatekeeper.dec.com/pub/DEC/termcaps.
+# These entries came from DEC's official terminfos for its older terminals
+# (which happen to be identical to the AT&T/SCO terminal descriptions),
+# Bill Hedberg <hedberg@hannah.enet.dec.com> of Terminal Support Engineering
+# may have had more information. Updated terminfos and termcaps were available
+# at ftp://gatekeeper.dec.com/pub/DEC/termcaps.
+
+# DEC's terminfos did not describe the auxiliary keypad.
+#
+# DECScope of course had no "function keys", but this building block assigns
+# the three blank keys at the top of the auxiliary (numeric) keypad, using
+# the same analogy as vt100 (also lacking function-keys).
#
+# These assignments use the same layout for 0-9 as vt100+keypad; the vt52
+# keypad had its cursor-keys on the right-column as shown -TD
+# _______________________________________
+# | PF1 | PF2 | PF3 | c-up |
+# | \EP | \EQ | \ER | \EA |
+# |_kf1__k1_|_kf2__k2_|_kf3__k3_|kcuu1_k4_|
+# | 7 8 9 c-down |
+# | \E?w | \E?x | \E?y | \EB |
+# |_kf9__k9_|_kf10_k;_|_kf0__k0_|kcud1____|
+# | 4 | 5 | 6 | c-right |
+# | \E?t | \E?u | \E?v | \EC |
+# |_kf5__k5_|_kf6__k6_|_kf7__k7_|kcuf1_k8_|
+# | 1 | 2 | 3 | c-left |
+# | \E?q | \E?r | \E?s | \ED |
+# |_ka1__K1_|_kb2__K2_|_ka3__K3_|kcub1____|
+# | 0 | . | enter |
+# | \E?p | \E?n | \E?M |
+# |___kc1_______K4____|_kc3__K5_|_kent_@8_|
+#
+vt52+keypad|DECScope auxiliary keypad,
+ ka1=\E?q, ka3=\E?s, kb2=\E?r, kc1=\E?p, kc3=\E?n, kf0=\E?y,
+ kf1=\EP, kf2=\EQ, kf3=\ER, kf5=\E?t, kf6=\E?u, kf7=\E?v,
+ kf8=\E?w, kf9=\E?x,
gt40|dec gt40,
OTbs, os,
cols#72, lines#30,
bel=^G, cr=\r, cub1=^H, cud1=\n,
gt42|dec gt42,
OTbs, os,
cols#72, lines#40,
bel=^G, cr=\r, cub1=^H, cud1=\n,
+
vt50|dec vt50,
OTbs,
cols#80, lines#12,
bel=^G, clear=\EH\EJ, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
- cuu1=\EA, ed=\EJ, el=\EK, ht=^I, ind=\n,
+ cuu1=\EA, ed=\EJ, el=\EK, ht=^I, ind=\n, u8=\E/A, u9=\EZ,
vt50h|dec vt50h,
- OTbs,
- cols#80, lines#12,
- bel=^G, clear=\EH\EJ, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
- cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ,
- el=\EK, ht=^I, ind=\n, ri=\EI,
+ cub1=\ED, cud1=\EB, cup=\EY%p1%{32}%+%c%p2%{32}%+%c,
+ kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, u8=\E/[HJ],
+ use=vt52+keypad, use=vt50,
+
# (vt61: there's a BSD termcap that claims <dl1=\EPd>, <il1=\EPf.> <kbs=^H>)
vt61|vt-61|vt61.5|dec vt61,
cols#80, lines#24,
bel=^G, clear=\EH\EJ$<120>, cr=\r$<20>, cub1=^H, cud1=\n,
cuf1=\EC$<20>, cup=\EY%p1%{32}%+%c%p2%{32}%+%c$<20>,
cuu1=\EA$<20>, ed=\EJ$<120>, el=\EK$<70>, ht=^I,
ind=\n$<20>, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA,
ri=\E$<20>I,
# The gigi does standout with red!
# (gigi: I added <rmam>/<smam> based on the init string, corrected cub1 -- esr)
gigi|vk100|dec gigi graphics terminal,
OTbs, am, xenl,
cols#84, lines#24,
bel=^G, clear=\E[H\E[2J, cr=\r, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, ed=\E[J,
el=\E[K, ht=^I, ind=\n,
is2=\E>\E[?3l\E[?4l\E[?5l\E[?20l\E[?7h\E[?8h,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP,
kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H, ri=\EM,
rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
sgr0=\E[m, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7;31m,
smul=\E[4m,
# DEC PRO-350 console (VT220-style). The 350 was DEC's attempt to produce
# a PC differentiated from the IBM clones. It was a total, ludicrous,
# grossly-overpriced failure (among other things, DEC's OS didn't include
# a format program, so you had to buy pre-formatted floppies from DEC at
# a hefty premium!).
pro350|decpro|dec pro console,
OTbs,
cols#80, it#8, lines#24,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
clear=\EH\EJ, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ,
el=\EK, home=\EH, ht=^I, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kf0=\EE, kf1=\EF, kf2=\EG, kf3=\EH, kf4=\EI,
kf5=\EJ, kf6=\Ei, kf7=\Ej, khome=\EH, ri=\EI, rmacs=\EG,
rmso=\E^N, rmul=\E^C, smacs=\EF, smso=\E^H, smul=\E^D,
dw1|decwriter I,
OTbs, hc, os,
cols#72,
bel=^G, cr=\r, cub1=^H, cud1=\n, ind=\n,
dw2|decwriter|dw|decwriter II,
OTbs, hc, os,
cols#132,
bel=^G, cr=\r, cub1=^H, cud1=\n, ind=\n, kbs=^H,
# \E(B Use U.S. character set (otherwise # => british pound !)
# \E[20l Disable "linefeed newline" mode (else puts \r after \n,\f,\v)
# \E[w 10 char/in pitch
# \E[1;132 full width horizontal margins
# \E[2g clear all tab stops
# \E[z 6 lines/in
# \E[66t 66 lines/page (for \f)
# \E[1;66r full vertical page can be printed
# \E[4g clear vertical tab stops
# \E> disable alternate keypad mode (so it transmits numbers!)
# \E[%i%p1%du set tab stop at column %d (origin == 1)
# (Full syntax is \E[n;n;n;n;n;...;nu where each 'n' is
# a tab stop)
#
# The dw3 does standout with wide characters.
#
dw3|la120|decwriter III,
OTbs, hc, os,
cols#132,
bel=^G, cr=\r, cub1=^H, cud1=\n, ht=^I, ind=\n,
is1=\E(B\E[20l\E[w\E[0;132s\E[2g\E[z\E[66t\E[1;66r\E[4g\E>,
is2=\E[9;17;25;33;41;49;57;65;73;81;89;97;105;113;121;129u
\r,
kbs=^H, rmso=\E[w, sgr0=\E[w, smso=\E[6w,
dw4|decwriter IV,
OTbs, am, hc, os,
cols#132,
bel=^G, cr=\r, cub1=^H, cud1=\n, ht=^I, ind=\n, is2=\Ec, kbs=^H,
kf0=\EOP, kf1=\EOQ, kf2=\EOR, kf3=\EOS,
# These aren't official
ln03|dec ln03 laser printer,
hc,
cols#80, lines#66,
bel=^G, cr=\r, cud1=\n, hd=\EK, ht=^I, hu=\EL, ind=\n, nel=\r\n,
rmso=\E[22m, rmul=\E[24m, sgr0=\E[m, smso=\E[1m,
smul=\E[4m,
ln03-w|dec ln03 laser printer 132 cols,
cols#132,
bel=^G, cr=\r, cud1=\n, ht=^I, ind=\n, kbs=^H, kcub1=^H,
kcud1=\n, nel=\r\n, use=ln03,
#### Delta Data (dd)
#
# Untested. The cup sequence is hairy enough that it probably needs work.
# The idea is ctrl(O), dd(row), dd(col), where dd(x) is x - 2*(x%16) + '9'.
# There are BSD-derived termcap entries floating around for this puppy
# that are *certainly* wrong.
delta|dd5000|delta data 5000,
OTbs, am,
cols#80, lines#27,
bel=^G, clear=^NR, cub1=^H, cud1=\n, cuf1=^Y,
cup=\017%p1%p1%{16}%m%{2}%*%-%{57}%+%c%p2%p2%{16}%m%{2}%*%-
%{57}%+%c,
cuu1=^Z, dch1=^NV, el=^NU, home=^NQ, ind=\n,
#### Digital Data Research (ddr)
#
# (ddr: I added <rmam>/<smam> based on the init string -- esr)
ddr|rebus3180|ddr3180|Rebus/DDR 3180 vt100 emulator,
OTbs, am, xenl,
cols#80, it#8, lines#24, vt#3,
blink=\E[5m$<2/>, bold=\E[1m$<2/>,
clear=\E[H\E[2J$<50/>, csr=\E[%i%p1%d;%p2%dr, cub1=^H,
cud1=\n, cuf1=\E[C$<2/>, cup=\E[%i%p1%d;%p2%dH$<5/>,
cuu1=\E[A$<2/>, ed=\E[J$<50/>, el=\E[K$<3/>, home=\E[H,
ht=^I, ind=\ED$<5/>, is2=\E[1;24r\E[24;1H, kbs=^H,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP,
kf2=\EOQ, kf3=\EOR, kf4=\EOS, rc=\E8, rev=\E[7m$<2/>,
rf=/usr/share/tabset/vt100, ri=\EM$<5/>, rmam=\E[7l,
rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m$<2/>,
rs1=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
sgr0=\E[m$<2/>, smam=\E[7l, smkx=\E[?1h\E=, smso=\E[7m,
smul=\E[4m$<2/>,
#### Evans & Sutherland
#
# Jon Leech <leech@cs.unc.edu> tells us:
# The ps300 was the Evans & Sutherland Picture System 300, a high
# performance 3D vector graphics system with a bunch of specialized hardware.
# Approximate date of release was 1982 (early 80s, anyway), and it had several
# evolutions including (limited) color versions such as the PS330C. PS300s
# were effectively obsolete by the late 80s, replaced by raster graphics
# systems, although specialized applications like molecular modeling
# hung onto them for a while longer. AFAIK all E&S vector graphics systems
# are out of production, though of course E&S is very much alive (in 1996).
# (ps300: changed ":pt@:" to "it@" -- esr)
#
ps300|Picture System 300,
xt,
it@,
rmso@, rmul@, smso@, smul@, use=vt100+4bsd,
#### General Electric (ge)
#
terminet1200|terminet300|tn1200|tn300|terminet|GE terminet 1200,
OTbs, hc, os,
cols#120,
bel=^G, cr=\r, cud1=\n, ind=\n,
#### Heathkit/Zenith
#
# Here is a description of the H19 DIP switches:
#
# S401
# 0-3 = baud rate as follows:
#
# 3 2 1 0
# --- --- --- ---
# 0 0 1 1 300 baud
# 0 1 0 1 1200 baud
# 1 0 0 0 2400 baud
# 1 0 1 0 4800 baud
# 1 1 0 0 9600 baud
# 1 1 0 1 19.2K baud
#
# 4 = parity (0 = no parity)
# 5 = even parity (0 = odd parity)
# 6 = stick parity (0 = normal parity)
# 7 = full duplex (0 = half duplex)
#
# S402
# 0 = block cursor (0 = underscore cursor)
# 1 = no key click (0 = keyclick)
# 2 = wrap at end of line (0 = no wrap)
# 3 = auto LF on CR (0 = no LF on CR)
# 4 = auto CR on LF (0 = no CR on LF)
# 5 = ANSI mode (0 = VT52 mode)
# 6 = keypad shifted (0 = keypad unshifted)
# 7 = 50Hz refresh (1 = 60Hz refresh)
#
# Factory Default settings are as follows:
# 7 6 5 4 3 2 1 0
# S401 1 0 0 0 1 1 0 0
# S402 0 0 0 0 0 0 0 0
# (h19: I added <rmam>/<smam> based on the init string;
# also added empty <acsc> to suppress a tic warning -- esr)
h19-a|h19a|heath-ansi|heathkit-a|heathkit h19 ansi mode,
OTbs, am, mir, msgr,
cols#80, it#8, lines#24,
acsc=, bel=^G, clear=\E[2J, cnorm=\E[>4l, cr=\r, cub1=^H,
cud1=\E[1B, cuf1=\E[1C, cup=\E[%i%p1%d;%p2%dH,
cuu1=\E[1A, cvvis=\E[>4h, dch1=\E[1P, dl1=\E[1M$<1*>,
ed=\E[J, el=\E[K, home=\E[H, ht=^I, il1=\E[1L$<1*>, ind=\n,
is2=\E<\E[>1;2;3;4;5;6;7;8;9l\E[m\E[11m\E[?7h,
kbs=^H, kcub1=\E[1D, kcud1=\E[1B, kcuf1=\E[1C, kcuu1=\E[1A,
kf1=\EOS, kf2=\EOT, kf3=\EOU, kf4=\EOV, kf5=\EOW, kf6=\EOP,
kf7=\EOQ, kf8=\EOR, khome=\E[H, lf6=blue, lf7=red, lf8=white,
ri=\EM, rmacs=\E[11m, rmam=\E[?7l, rmir=\E[4l, rmso=\E[m,
smacs=\E[10m, smam=\E[?7h, smir=\E[4h, smso=\E[7m,
h19-bs|heathkit w/keypad shifted,
rmkx=\Eu, smkx=\Et, use=h19-b,
h19-us|h19us|h19-smul|heathkit w/keypad shifted/underscore cursor,
rmkx=\Eu, smkx=\Et, use=h19-u,
# (h19: merged in <ip> from BSDI hp19-e entry>;
# also added empty <acsc> to suppress a tic warning --esr)
# From: Tim Pierce <twp@skepsis.com>, 23 Feb 1998
# Tim tells us that:
# I have an old Zenith-19 terminal at home that still gets a lot of use.
# This terminal suffers from the same famous insert-mode padding lossage
# that has been acknowledged for the Z29 terminal. Emacs is nearly
# unusable on this box, since even a half-scroll up or down the window
# causes flaming terminal death.
#
# On the Z19, the only way I have found around this problem is to remove
# the :al: and :dl: entries entirely. No amount of extra padding will
# help (I have tried up to 20000). Removing <il1=\EL$> and <dl1=\EM$>
# makes Emacs a little slower, but it remains in the land of the living.
# Big win.
h19|heath|h19-b|heathkit|heath-19|z19|zenith|heathkit h19,
OTbs, am, eslok, hs, mir, msgr,
cols#80, it#8, lines#24,
acsc=+h.kaiggjdkclfmenbozqas{tvutvuwsx`~\^, bel=^G,
clear=\EE, cnorm=\Ey4, cr=\r, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\Ex4,
dch1=\EN, ed=\EJ, el=\EK, fsl=\Ek\Ey5, home=\EH, ht=^I, ind=\n,
ip=$<1.5/>, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kf1=\ES, kf2=\ET, kf3=\EU, kf4=\EV, kf5=\EW,
kf6=\EP, kf7=\EQ, kf8=\ER, khome=\EH, lf6=blue, lf7=red,
lf8=white, ri=\EI, rmacs=\EG, rmir=\EO, rmso=\Eq, smacs=\EF,
smir=\E@, smso=\Ep, tsl=\Ej\Ex5\EY8%p1%{32}%+%c\Eo\Eo,
h19-u|heathkit with underscore cursor,
cnorm@, cvvis@, use=h19-b,
h19-g|h19g|heathkit w/block cursor,
cnorm=\Ex4, cvvis@, use=h19-b,
alto-h19|altoh19|altoheath|alto-heath|alto emulating heathkit h19,
lines#60,
dl1=\EM, il1=\EL, use=h19,
# The major problem with the Z29 is that it requires more padding than the Z19.
#
# The problem with declaring an H19 to be synonymous with a Z29 is that
# it needs more padding. It especially loses if a program attempts
# to put the Z29 into insert mode and insert text at 9600 baud. It
# even loses worse if the program attempts to insert tabs at 9600
# baud. Adding padding to text that is inserted loses because in
# order to make the Z29 not die, one must add so much padding that
# whenever the program tries to use insert mode, the effective
# rate is about 110 baud.
#
# What program would want to put the terminal into insert mode
# and shove stuff at it at 9600 baud you ask?
#
# Emacs. Emacs seems to want to do the mathematically optimal
# thing in doing a redisplay rather than the practical thing.
# When it is about to output a line on top of a line that is
# already on the screen, instead of just killing to the end of
# the line and outputting the new line, it compares the old line
# and the new line and if there are any similarities, it
# constructs the new line by deleting the text on the old line
# on the terminal that is already there and then inserting new
# text into the line to transform it into the new line that is
# to be displayed. The Z29 does not react kindly to this.
#
# But don't cry for too long.... There is a solution. You can make
# a termcap entry for the Z29 that says the Z29 has no insert mode.
# Then Emacs cannot use it. "Oh, no, but now inserting into a
# line will be really slow", you say. Well there is a sort of a
# solution to that too. There is an insert character option on
# the Z29 that will insert one character. Unfortunately, it
# involves putting the terminal into ansi mode, inserting the
# character, and changing it back to H19 mode. All this takes 12
# characters. Pretty expensive to insert one character, but it
# works. Either Emacs doesn't try to use its inserting hack when
# it's only given an insert character ability or the Z29 doesn't
# require padding with this (the former is probably more likely,
# but I haven't checked it out).
# (z29: added empty <acsc> to suppress a tic warning, merged in
# status line capabilities from BRL entry --esr)
z29|zenith29|z29b|zenith z29b,
OTbs, OTpt, am, eslok, hs, mir, msgr,
OTkn#10, cols#80, lines#24,
OTbc=\ED, acsc=, bel=^G, cbt=\E-, clear=\EE$<14>, cnorm=\Ey4,
cr=\r, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\E$<1>A,
cvvis=\Ex4, dch1=\EN$<0.1*>, dl1=\EM$<1/>, dsl=\Ey1,
ed=\EJ$<14>, el=\EK$<1>, fsl=\Ek\Ey5, home=\EH, ht=^I,
ich1=\E<\E[1@\E[?2h$<1>, il1=\EL$<1/>, ind=\n$<2>,
is2=\E<\E[?2h\Ev, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kf0=\E~, kf1=\ES, kf2=\ET, kf3=\EU, kf4=\EV,
kf5=\EW, kf6=\EP, kf7=\EQ, kf8=\ER, kf9=\E0I, khome=\EH,
lf0=home, ri=\EI$<2/>, rmacs=\EF, rmir=\EO, rmso=\Eq,
rmul=\Es0, smacs=\EG, smir=\E@, smso=\Ep, smul=\Es8,
tsl=\Ej\Ex5\Ex1\EY8%+ \Eo,
# z29 in ansi mode. Assumes that the cursor is in the correct state, and that
# the world is stable. <rs1> causes the terminal to be reset to the state
# indicated by the name. kc -> key click, nkc -> no key click, uc -> underscore
# cursor, bc -> block cursor.
# From: Mike Meyers
# (z29a: replaced nonexistent <if=/usr/share/tabset/zenith29> because <hts>
# looks vt100-compatible -- esr)
z29a|z29a-kc-bc|h29a-kc-bc|heath/zenith 29 in ansi mode,
OTbs, OTpt, am, eslok, hs, mir, msgr,
OTkn#10, cols#80, it#8, lines#24,
OTbc=\ED, bel=^G, blink=\E[5m, bold=\E[2m, clear=\E[2J,
cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[1P, dim=\E[2m, dl=\E[%p1%dM,
dl1=\E[M, dsl=\E[>1l, ed=\E[J, el=\E[K, fsl=\E[u\E[>5l,
home=\E[H, ht=^I, hts=\EH, if=/usr/share/tabset/vt100,
il=\E[%p1%dL, il1=\E[L, ind=\ED, kbs=^H, kclr=\E[J,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, ked=\E[J,
kf0=\E[~, kf1=\EOS, kf2=\EOT, kf3=\EOU, kf4=\EOV, kf5=\EOW,
kf6=\EOP, kf7=\EOQ, kf8=\EOR, kf9=\EOX, khome=\E[H, lf0=help,
mc0=\E#7, nel=\r\ED, rc=\E[r, rev=\E[7m, ri=\EM,
rmcup=\E[?7h, rmso=\E[m, rmul=\E[m,
rs1=\E<\E[1;24r\E[24;1H\E[?7h\E[>4h\E[>1;2;3;5;6;7;8;9l\E[m
\E[11m,
sc=\E[s, sgr0=\E[m, smcup=\E[?7l, smso=\E[7;2m, smul=\E[4m,
tbc=\E[3g, tsl=\E[s\E[>5;1h\E[25;%i%dH\E[1K,
z29a-kc-uc|h29a-kc-uc|z29 ansi mode with keyclick and underscore cursor,
rs1=\E<\E[1;24r\E[24;1H\E[?7h\E[>1;2;3;4;5;6;7;8;9l\E[m\E[11
m,
use=z29a,
z29a-nkc-bc|h29a-nkc-bc|z29 ansi mode with block cursor and no keyclick,
rs1=\E<\E[1;24r\E[24;1H\E[?7h\E[>2;4h\E[>1;3;5;6;7;8;9l\E[m
\E[11m,
use=z29a,
z29a-nkc-uc|h29a-nkc-uc|z29 ansi mode with underscore cursor and no keyclick,
rs1=\E<\E[1;24r\E[24;1H\E[?7h\E[>2h\E[>1;3;4;5;6;7;8;9l\E[m
\E[11m,
use=z29a,
# From: Jeff Bartig <jeffb@dont.doit.wisc.edu> 31 Mar 1995
z39-a|z39a|zenith39-a|zenith39-ansi|Zenith 39 in ANSI mode,
am, eslok, hs, mc5i, mir, msgr, xon,
cols#80, lines#24,
acsc=0a``aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G,
blink=\E[5m, bold=\E[1m, cbt=\E[1Z, civis=\E[>5h,
clear=\E[2J\E[H, cnorm=\E[>5l, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[1P, dim=\E[2m, dl=\E[%p1%dM,
dl1=\E[1M, dsl=\E[>1l, ed=\E[0J, el=\E[0K, el1=\E[1K,
fsl=\E[u, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[1L,
ind=\n, is2=\E<\E[>1;3;5;6;7l\E[0m\E[2J, ka1=\EOw,
ka3=\EOu, kb2=\EOy, kbs=^H, kc1=\EOq, kc3=\EOs, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, ked=\E[J, kf1=\EOS,
kf2=\EOT, kf3=\EOU, kf4=\EOV, kf5=\EOW, kf6=\EOP, kf7=\EOQ,
kf8=\EOR, kf9=\EOX, khlp=\E[~, khome=\E[H, ll=\E[24;1H,
mc0=\E[?19h\E[i, mc4=\E[4i, mc5=\E[5i, rc=\E[u, rev=\E[7m,
rmacs=\E(B, rmir=\E[4l, rmkx=\E[>7l, rmso=\E[0m,
rmul=\E[0m, rs2=\E<\Ec\0, sc=\E[s, sgr0=\E[0m, smacs=\E(0,
smir=\E[4h, smkx=\E[>7h, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
tsl=\E[s\E[>1h\E[25;%i%p1%dH,
# From: Brad Brahms <Brahms@USC-ECLC>
z100|h100|z110|z-100|h-100|heath/zenith z-100 pc with color monitor,
cnorm=\Ey4\Em70, cvvis=\Ex4\Em71, use=z100bw,
# (z100bw: removed obsolete ":kn#10:", added empty <acsc> -- esr)
z100bw|h100bw|z110bw|z-100bw|h-100bw|heath/zenith z-100 pc,
OTbs, OTpt, mir, msgr,
OTkn#10, cols#80, it#8, lines#24,
acsc=+h.kaiggjdkclfmenbozqas{tvutvuwsx`~\^,
clear=\EE$<5*/>, cnorm=\Ey4, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c$<1*/>, cuu1=\EA,
cvvis=\Ex4, dch1=\EN$<1*/>, dl1=\EM$<5*/>, ed=\EJ, el=\EK,
home=\EH, ht=^I, il1=\EL$<5*/>, kbs=^H, kcub1=\ED, kcud1=\EB,
kcuf1=\EC, kcuu1=\EA, kf0=\EJ, kf1=\ES, kf2=\ET, kf3=\EU,
kf4=\EV, kf5=\EW, kf6=\EP, kf7=\EQ, kf8=\ER, kf9=\EOI,
khome=\EH, ri=\EI, rmacs=\EG, rmir=\EO, rmso=\Eq, smacs=\EF,
smir=\E@, smso=\Ep,
p19|h19-b with il1/dl1,
dl1=\EM$<2*/>, il1=\EL$<2*/>, use=h19-b,
# From: <ucscc!B.fiatlux@ucbvax.berkeley.edu>
# (ztx: removed duplicate :sr: -- esr)
ztx|ztx11|zt-1|htx11|ztx-1-a|ztx-10 or 11,
OTbs, am, eslok, hs,
cols#80, it#8, lines#24,
clear=\EE, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dl1=\EM,
dsl=\Ey1, ed=\EJ, el=\EK, fsl=\Ek\Ey5, home=\EH, ht=^I,
il1=\EL, is2=\Ej\EH\Eq\Ek\Ev\Ey1\Ey5\EG\Ey8\Ey9\Ey>,
kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf0=\ES,
kf1=\EB, kf2=\EU, kf3=\EV, kf4=\EW, kf5=\EP, kf6=\EQ, kf7=\ER,
ri=\EI, rmso=\Eq, rmul=\Eq, smso=\Es5, smul=\Es2,
tsl=\Ej\Ex5\Ex1\EY8%+ \Eo,
#### IMS International (ims)
#
# There was a company called IMS International located in Carson City,
# Nevada, that flourished from the mid-70s to mid-80s. They made S-100
# bus/Z80 hardware and a line of terminals called Ultimas.
#
# From: Erik Fair <fair@ucbarpa.berkeley.edu> Sun Oct 27 07:21:05 1985
ims950-b|bare ims950 no init string,
is2@, use=ims950,
# (ims950: removed obsolete ":ko@:" -- esr)
ims950|ims televideo 950 emulation,
xenl@,
flash@, kbs@, kcub1@, kcud1@, kcuf1@, kcuu1@, kf0@, kf1@, kf2@, kf3@,
kf4@, kf5@, kf6@, kf7@, kf8@, kf9@, khome@, use=tvi950,
# (ims950-rv: removed obsolete ":ko@:" -- esr)
ims950-rv|ims tvi950 rev video,
xenl@,
flash@, kbs@, kcub1@, kcud1@, kcuf1@, kcuu1@, kf0@, kf1@, kf2@, kf3@,
kf4@, kf5@, kf6@, kf7@, kf8@, kf9@, khome@, use=tvi950-rv,
ims-ansi|ultima2|ultimaII|IMS Ultima II,
OTbs, am,
cols#80, it#8, lines#24,
clear=\E[H\E[2J, cub1=^H, cud1=\ED, cuf1=\EC,
cup=\E[%i%p1%2d;%p2%2dH, cuu1=\EM, ed=\E[0J, el=\E[0K,
ht=^I, if=/usr/share/tabset/vt100,
is2=\E[m\E[>14l\E[?1;?5;20l\E>\E[1m\r, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, ri=\EM,
rmso=\E[m\E[1m, rmul=\E[m\E[1m, sgr0=\E[m, smso=\E[7m,
smul=\E[4m,
#### Intertec Data Systems
#
# I think this company is long dead as of 1995. They made an early CP/M
# micro called the "Intertec Superbrain" that was moderately popular,
# then sank out of sight.
#
superbrain|intertec superbrain,
OTbs, am, bw,
cols#80, lines#24,
OTbc=^U, bel=^G, clear=\014$<5*>, cr=\r, cub1=^H, cud1=\n,
cuf1=^F, cup=\EY%p1%{32}%+%c%p2%{32}%+%c$<20>, cuu1=^K,
ed=\E~k<10*>, el=\E~K$<15>, ht=^I, ind=\n, kcub1=^U,
kcud1=\n, kcuf1=^F, kcuu1=^K, rmcup=^L, smcup=^L,
# (intertube: a Gould entry via BRL asserted smul=\E0@$<200/>,
# rmul=\E0A$<200/>; my guess is the highlight letter is bit-coded like an ADM,
# and the reverse is actually true. Try it. -- esr)
intertube|intertec|Intertec InterTube,
OTbs, am,
cols#80, lines#25,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=^F,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c$<50>, cuu1=^Z, home=^A,
ind=\n, rmso=\E0@, smso=\E0P,
# The intertube 2 has the "full duplex" problem like the tek 4025: if you
# are typing and a command comes in, the keystrokes you type get interspersed
# with the command and it messes up
intertube2|intertec data systems intertube 2,
OTbs,
cup=\016%p1%c\020%p2%{10}%/%{16}%*%p2%{10}%m%+%c,
el=\EK, hpa=\020%p1%{10}%/%{16}%*%p1%{10}%m%+%c,
ll=^K^X\r, vpa=\013%p1%c, use=intertube,
#### Ithaca Intersystems
#
# This company made S100-bus personal computers long ago in the pre-IBM-PC
# past. They used to be reachable at:
#
# Ithaca Intersystems
# 1650 Hanshaw Road
# Ithaca, New York 14850
#
# However, the outfit went bankrupt years ago.
#
# The Graphos III was a color graphics terminal from Ithaca Intersystems.
# These entries were written (originally in termcap syntax) by Brian Yandell
# <yandell@stat.wisc.edu> and Mike Meyer <mikem@stat.wisc.edu> at the
# University of Wisconsin.
# (graphos: removed obsolete and syntactically incorrect :kn=4:,
# removed <if=/usr/share/tabset/init.graphos> and
# <rf=/usr/share/tabset/init.graphos> no such file & no <hts> -- esr)
graphos|graphos III,
am, mir,
cols#80, it#8, lines#24,
clear=\E[H\E[2J, cnorm=\Ez56;2;0;0z\Ez73z\Ez4;1;1z,
cr=\r, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\Ez4;2;1z\Ez56;2;80;24z, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il=\E[%p1%dL,
il1=\E[L, ind=\ED, kbs=^H, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR,
kf4=\EOS, khome=\E[H, nel=\r\ED, rc=\E8, ri=\EM, rmdc=\E[4l,
rmir=\E[4l, rmso=\E[m, sc=\E7, sgr0=\E[m, smdc=\E[4h,
smir=\E[4h, smso=\E[7m,
graphos-30|graphos III with 30 lines,
lines#30,
cvvis=\Ez4;2;1z\Ez56;2;80;30z, use=graphos,
#### Modgraph
#
# These people used to be reachable at:
#
# Modgraph, Inc
# 1393 Main Street,
# Waltham, MA 02154
# Vox: (617)-890-5796.
#
# However, if you call that number today you'll get an insurance company.
# I have mail from "Michael Berman, V.P. Sales, Modgraph" dated
# 26 Feb 1997 that says:
#
# Modgraph GX-1000, replaced by GX-2000. Both are out of production, have been
# for ~7 years. Modgraph still in business. Products are rugged laptop and
# portable PC's and specialized CRT and LCD monitors (rugged, rack-mount
# panel-mount etc). I can be emailed at sonfour@aol.com
#
# Peter D. Smith <pdsmith@nbbn.com> notes that his modgraph manual was
# dated 1984. According to the manual, it featured Tek 4010/4014
# graphics and DEC VT100/VT52 + ADM-3A emulation with a VT220-style keyboard.
#
modgraph|mod24|modgraph terminal emulating vt100,
xenl@,
cols#80, lines#24,
cvvis=\E\^9;0s\E\^7;1s,
is2=\E\^9;0s\E\^7;1s\E[3g\E\^11;9s\E\^11;17s\E\^11;25s\E\^11
;33s\E\^11;41s\E\^11;49s\E\^11;57s\E\^11;65s\E\^11;73s
\E\^11;81s\E\^11;89s,
rf@, ri=\EM\E[K$<5/>, use=vt100+4bsd,
# The GX-1000 manual is dated 1984. This looks rather like a VT-52.
modgraph2|modgraph gx-1000 80x24 with keypad not enabled,
am, da, db,
cols#80, it#8, lines#24,
clear=\EH\EJ$<50/>, cub1=^H, cud1=\EB$<2/>,
cuf1=\EC$<2/>, cup=\EY%p1%{32}%+%c%p2%{32}%+%c$<5/>,
cuu1=\EA$<2/>, ed=\EJ$<50/>, el=\EK$<3/>, ht=^I,
is2=\E<\E\^5;2s\E\^7;1s\E[3g\E\^11;9s\E\^11;17s\E\^11;25s\E
\^11;33s\E\^11;41s\E\^11;49s\E\^11;57s\E\^11;65s\E\^11;7
3s\E\^11;81s\E\^11;89s\E\^12;0s\E\^14;2s\E\^15;9s\E\^25;
1s\E\^9;1s\E\^27;1,
ri=\EI$<5/>,
#
# Modgraph from Nancy L. Cider <nancyc@brl-tbd>
# BUG NOTE from Barbara E. Ringers <barb@brl-tbd>:
# If we set TERM=vt100, and set the Modgraph screen to 24 lines, setting a
# mark and using delete-to-killbuffer work correctly. However, we would
# like normal mode of operation to be using a Modgraph with 48 line setting.
# If we set TERM=mod (which is a valid entry in termcap with 48 lines)
# the setting mark and delete-to-killbuffer results in the deletion of only
# the line the mark is set on.
# We've discovered that the delete-to-killbuffer works correctly
# with TERM=mod and screen set to 80x48 but it's not obvious. Only
# the first line disappears but a ctrl-l shows that it did work
# correctly.
modgraph48|mod|Modgraph w/48 lines,
OTbs, OTpt, am, xenl,
cols#80, it#8, lines#48, vt#3,
OTnl=\n, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[;H\E[2J,
cr=\r, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, ed=\E[J, el=\E[K,
flash=\E[?5h\E[0q\E[1;2q\E[?5l\E[0q\E[4;3q,
home=\E[H, ht=^I, is2=\E<\E[1;48r\E[0q\E[3;4q\E=\E[?1h,
kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, rc=\E8, rev=\E[7m,
ri=\EM, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
rs1=\E=\E[0q\E>, sc=\E7, sgr0=\E[m, smkx=\E[?1h\E=,
smso=\E[7m, smul=\E[4m,
#### Morrow Designs
#
# This was George Morrow's company. They started in the late 1970s making
# S100-bus machines. They used to be reachable at:
#
# Morrow
# 600 McCormick St.
# San Leandro, CA 94577
#
# but they're long gone now (1995).
#
# The mt70 terminal was shipped with the Morrow MD-3 microcomputer.
# Jeff's specimen was dated June 1984.
# From: Jeff Wieland <wieland@acn.purdue.edu> 24 Feb 1995
mt70|mt-70|Morrow MD-70; native Morrow mode,
am, mir, msgr, xon,
cols#80, it#8, lines#24,
acsc=+z\,{-x.yOi`|jGkFlEmDnHqJtLuKvNwMxI, bel=^G,
cbt=\EI, civis=\E"0, clear=^Z, cnorm=\E"2, cr=\r, cub1=^H,
cud1=\n, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<1>,
cuu1=^K, dch1=\EW, dim=\EG2, dl1=\ER, ed=\EY, el=\ET$<10>,
flash=\EK1$<200>\EK0, home=^^, ht=^I, ich1=\EQ, il1=\EE,
ind=\n, invis@, is1=\E"2\EG0\E], kbs=^H, kcbt=^A^Z\r,
kclr=^An\r, kcub1=^AL\r, kcud1=^AK\r, kcuf1=^AM\r,
kcuu1=^AJ\r, kdch1=^?, kf1=^A@\r, kf10=^AI\r, kf11=^A`\r,
kf12=^Aa\r, kf13=^Ab\r, kf14=^Ac\r, kf15=^Ad\r, kf16=^Ae\r,
kf17=^Af\r, kf18=^Ag\r, kf19=^Ah\r, kf2=^AA\r, kf20=^Ai\r,
kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r,
kf8=^AG\r, kf9=^AH\r, khlp=^AO\r, khome=^AN\r, nel=^_,
rmacs=\E%%, rmcup=, smacs=\E$, smcup=\E"2\EG0\E],
smul=\EG1, tbc=\E0, use=adm+sgr,
#### Motorola
#
# Motorola EXORterm 155 from {decvax, ihnp4}!philabs!sbcs!megad!seth via BRL
# (Seth H Zirin)
ex155|Motorola Exorterm 155,
OTbs, am, bw,
OTkn#5, OTug#1, cols#80, lines#24,
cbt=\E[, clear=\EX, cub1=\ED, cud1=\EB, cuf1=\EC,
cup=\EE%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\ET,
el=\EU, home=\E@, ht=\EZ, kbs=^H, kcbt=\E[, kclr=\EX, kcub1=^H,
kcud1=\n, kcuf1=^L, kcuu1=^K, ked=\ET, kel=\EU, khome=\E@,
rmso=\Ec\ED, rmul=\Eg\ED, smso=\Eb\ED, smul=\Ef\ED,
#### Omron
#
# This company is still around in 1995, manufacturing point-of-sale systems.
omron|Omron 8025AG,
OTbs, am, da, db,
cols#80, lines#24,
bel=^G, clear=\EJ, cr=\r, cub1=^H, cud1=\n, cuf1=\EC, cuu1=\EA,
cvvis=\EN, dch1=\EP, dl1=\EM, ed=\ER, el=\EK, home=\EH,
il1=\EL, ind=\ES, ri=\ET, rmso=\E4, smso=\Ef,
#### Ramtek
#
# Ramtek was a vendor of high-end graphics terminals around 1979-1983; they
# were competition for things like the Tektronix 4025.
#
# Ramtek 6221 from BRL, probably by Doug Gwyn
# The following SET-UP modes are assumed for normal operation:
# UNDERLINE_CURSOR ANSI_MODE AUTO_XON/XOFF_ON
# NEWLINE_OFF 80_COLUMNS
# Other SET-UP modes may be set for operator convenience or communication
# requirements; I recommend
# SMOOTH_SCROLL AUTO_REPEAT_ON 3_#_SHIFTED WRAP_AROUND_ON
# Hardware tabs are assumed to be every 8 columns; they can be set up by the
# "reset", "tset", or "tabs" utilities (use rt6221-w, 160 columns, for this).
# Note that the Control-E key is useless on this brain-damaged terminal. No
# delays are specified; use "stty ixon -ixany" to enable DC3/DC1 flow control!
rt6221|Ramtek 6221 80x24,
OTbs, OTpt, msgr, xon,
OTkn#4, cols#80, it#8, lines#24, vt#3,
acsc=, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[>5l,
clear=\E[1;1H\E[J, cnorm=\E[>5h\E[>9h, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=^K, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM,
cvvis=\E[>7h\E[>9l, ed=\E[J, el=\E[K, home=\E[1;1H, ht=^I,
hts=\EH, ind=\n, is2=\E)0, kbs=^H, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kf0=\EOP, kf1=\EOQ, kf2=\EOR,
kf3=\EOS, lf0=PF1, lf1=PF2, lf2=PF3, lf3=PF4, ll=\E[24;1H,
nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmkx=\E>,
rmso=\E[m, rmul=\E[m,
rs1=\E[1w\E[>37m\E[>39m\E[1v\E[20l\E[?3l\E[?6l\E[>5h\E[>6h
\E[>7h\E[>8l\E[>9h\E[>10l\E[1;24r\E[m\E[q\E(B\017\E)0\E#
5\E>,
sc=\E7, sgr0=\E[m, smacs=^N, smkx=\E=, smso=\E[7m,
smul=\E[4m, tbc=\E[3g,
# [TO DO: Check out: short forms of ho/cl and ll; reset (\Ec)].
rt6221-w|Ramtek 6221 160x48,
cols#160, lines#48,
ll=\E[48;1H, use=rt6221,
#### RCA
#
# RCA VP3301 or VP3501
rca|rca vp3301/vp3501,
OTbs,
cols#40, lines#24,
clear=^L, cuf1=^U, cup=\EY%p1%{32}%+%c%p2%{32}%+%c,
cuu1=^K, home=^Z, rmso=\E\ES0, smso=\E\ES1,
#### Selanar
#
# Selanar HiREZ-100 from BRL, probably by Doug Gwyn
# The following SET-UP modes are assumed for normal operation:
# SET_DEFAULT_TABS 48_LINES 80_COLUMNS
# ONLINE ANSI CURSOR_VISIBLE
# VT102_AUTO_WRAP_ON VT102_NEWLINE_OFF VT102_MONITOR_MODE_OFF
# LOCAL_ECHO_OFF US_CHAR_SET WPS_TERMINAL_DISABLED
# CPU_AUTO_XON/XOFF_ENABLED PRINT_FULL_SCREEN
# For use with graphics software, all graphics modes should be set to factory
# default. Other SET-UP modes may be set for operator convenience or
# communication requirements. No delays are specified; use "stty ixon -ixany"
# to enable DC3/DC1 flow control!
# I commented out the scrolling capabilities since they are too slow.
hirez100|Selanar HiREZ-100,
OTbs, OTpt, mir, msgr, xon,
OTkn#4, cols#80, it#8, lines#48, vt#3,
acsc=, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J,
cr=\r, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\EM, dch=\E[%p1%dP, dch1=\E[P,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I,
hts=\EH, il=\E[%p1%dL, il1=\E[L, is2=\E<\E)0, kbs=^H,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf0=\EOP,
kf1=\EOQ, kf2=\EOR, kf3=\EOS, lf0=PF1, lf1=PF2, lf2=PF3,
lf3=PF4, ll=\E[48H, mc0=\E[i, mc4=\E[4i\E[?4i,
mc5=\E[?5i\E[5i, nel=\EE, rc=\E8, rev=\E[7m, rmacs=^O,
rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
rs1=\030\E2\E<\E[4i\E[?4i\E[12h\E[2;4;20l\E[?0;7h\E[?1;3;6;1
9l\E[r\E[m\E(B\017\E)0\E>,
sc=\E7, sgr0=\E[m, smacs=^N, smkx=\E[?1h\E=, smso=\E[7m,
smul=\E[4m, tbc=\E[3g,
hirez100-w|Selanar HiREZ-100 in 132-column mode,
cols#132, use=hirez100,
#### Signetics
#
# From University of Wisconsin
vsc|Signetics Vsc Video driver by RMC,
am, msgr,
cols#80, it#8, lines#26,
clear=\E[;H\E[2J$<50/>, cr=\r, cub1=^H, cud1=\n, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[K, home=\E[H,
ht=^I, ind=\n, kbs=^H, kcub1=^H, kcud1=\n, nel=\r\n, rev=^_\s,
rmso=^_!, rmul=^_#, sgr0=^_!, smso=^_\s, smul=^_",
#### Soroc
#
# Alan Frisbie <frisbie@flying-disk.com> writes:
#
# As you may recall, the Soroc logo consisted of their name,
# with the letter "S" superimposed over an odd design. This
# consisted of a circle with a slightly smaller 15 degree (approx.)
# wedge with rounded corners inside it. The color was sort of
# a metallic gold/yellow.
#
# If I had been more of a beer drinker it might have been obvious
# to me, but it took a clue from their service department to make
# me exclaim, "Of course!" The circular object was the top of
# a beer can (the old removable pop-top style) and "Soroc" was an
# anagram for "Coors".
#
# I can just imagine the founders of the company sitting around
# one evening, tossing back a few and trying to decide what to
# call their new company and what to use for a logo.
#
# (soroc120: removed obsolete ":ma=^K^P^R^L^L :" -- esr)
soroc120|iq120|soroc|soroc iq120,
clear=\E*$<2>, cud1=\n, ed=\EY, el=\ET, kcub1=^H, kcud1=\n,
kcuf1=^L, kcuu1=^K, use=adm3a,
soroc140|iq140|soroc iq140,
OTbs, am, mir,
cols#80, lines#24,
bel=^G, cbt=\EI, clear=\E+, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\Ew,
dl1=\Er$<.7*>, ed=\Ey, el=\Et, home=^^, il1=\Ee$<1*>, ind=\n,
kbs=^H, kcuf1=^L, kcuu1=^K, kf0=^A0\r, kf1=^A@\r, kf2=^AA\r,
kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r,
kf8=^AG\r, kf9=^AH\r, khome=^^, ll=^^^K, rmir=\E8, rmso=\E^?,
rmul=\E^A, smir=\E9, smso=\E^?, smul=\E^A,
#### Southwest Technical Products
#
# These guys made an early personal micro called the M6800.
# The ct82 was probably its console terminal.
#
# (swtp: removed obsolete ":bc=^D:" -- esr)
swtp|ct82|southwest technical products ct82,
am,
cols#82, lines#20,
bel=^G, clear=^L, cr=\r, cub1=^D, cud1=\n, cuf1=^S,
cup=\013%p2%c%p1%c, cuu1=^A, dch1=^\^H, dl1=^Z, ed=^V, el=^F,
home=^P, ich1=^\^X, il1=^\^Y, ind=^N,
is2=\034\022\036\023\036\004\035\027\011\023\036\035\036
\017\035\027\022\011,
ll=^C, ri=^O, rmso=^^^F, smso=^^^V,
#### Synertek
#
# Bob Manson <manson@pattyr.acs.ohio-state.edu> writes (28 Apr 1995):
#
# Synertek used to make ICs, various 6502-based single-board process
# control and hobbyist computers, and assorted peripherals including a
# series of small inexpensive terminals (I think they were one of the
# first to have a "terminal-on-a-keyboard", where the terminal itself
# was only slightly larger than the keyboard).
#
# They apparently had a KTM-1 model, which I've never seen. The KTM-2/40
# was a 40x24 terminal that could connect to a standard TV through a
# video modulator. The KTM-2/80 was the 80-column version (the 2/40
# could be upgraded to the 2/80 by adding 2 2114 SRAMs and a new ROM).
# I have a KTM-2/80 still in working order. The KTM-2s had fully
# socketed parts, used 2 6507s, a 6532 as keyboard scanner, a program
# ROM and 2 ROMs as character generators. They were incredibly simple,
# and I've never had any problems with mine (witness the fact that mine
# was made in 1981 and is still working great... I've blown the video
# output transistor a couple of times, but it's a 2N2222 :-)
#
# The KTM-3 (which is what is listed in the terminfo file) was their
# attempt at putting a KTM-2 in a box (and some models came with a
# CRT). It wasn't much different from the KTM-2 hardware-wise, but the
# control and escape sequences are very different. The KTM-3 was always
# real broken, at least according to the folks I've talked to about it.
#
# The padding in the entry is probably off--these terminals were very
# slow (it takes like 100ms for the KTM-2 to clear the screen...) And
# anyone with any sanity replaced the ROMs with something that provided
# a reasonable subset of VT100 functionality, since the usual ROMs were
# obviously very primitive... oh, you could get an upgraded ROM from
# Synertek for some incredible amount of money, but what hacker with an
# EPROM burner would do that? :)
#
# Sorry I don't have any contact info; I believe they were located in
# Sunnyvale, and I'm fairly sure they are still manufacturing ICs
# (they've gone to ASICs and FPGAs), but I doubt they're in the computer
# business these days.
#
# Tested, seems to work fine with vi.
synertek|ktm|synertek380|synertek ktm 3/80 tubeless terminal,
am,
cols#80, lines#24,
clear=^Z, cub1=^H, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, ed=\EJ, el=\EK,
#### Tab Office Products
#
# TAB Products Co. - Palo Alto, California
# Electronic Office Products,
# 1451 California Avenue 94304
#
# I think they're out of business.
#
# The tab 132 uses xon/xoff, so no padding needed.
# <smkx>/<rmkx> have nothing to do with arrow keys.
# <is2> sets 80 col mode, normal video, autowrap on (for <am>).
# Seems to be no way to get rid of status line.
# The manual for this puppy was dated June 1981. It claims to be VT52-
# compatible but looks more vt100-like.
tab132|tab|tab132-15|tab 132/15,
da, db,
OTdN@, cols#80, lines#24, lm#96,
cud1=\n, cup=\E[%i%p1%d;%p2%dH, dch1=\E[P, dl1=\E[M,
il1=\E[L, is2=\E[?7h\E[?3l\E[?5l, kcub1=\E[D, kcud1=\E[B,
kcuu1=\E[A, rmir=\E[4l, rmkx@, smir=\E[4h, smkx@,
use=vt100+4bsd,
tab132-w|tab132 in wide mode,
cols#132,
is2=\E[?7h\E[?3h\E[?5l, use=tab132,
tab132-rv|tab132 in reverse-video mode,
is2=\E[?7h\E[?3l\E[?5h, use=tab132,
tab132-w-rv|tab132 in reverse-video/wide mode,
is2=\E[?7h\E[?3h\E[?5h, use=tab132-w,
#### Teleray
#
# Research Incorporated
# 6425 Flying Cloud Drive
# Eden Prairie, MN 55344
# Vox: (612)-941-3300
#
# The Teleray terminals were all discontinued in 1992-93. RI still services
# and repairs these beasts, but no longer manufactures them. The Teleray
# people believe that all the types listed below are very rare now (1995).
# There was a newer line of Telerays (Model 7, Model 20, Model 30, and
# Model 100) that were ANSI-compatible.
#
# Note two things called "teleray". Reorder should move the common one
# to the front if you have either. A dumb teleray with the cursor stuck
# on the bottom and no obvious model number is probably a 3700.
#
t3700|dumb teleray 3700,
OTbs,
cols#80, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, ind=\n,
t3800|teleray 3800 series,
OTbs,
cols#80, it#8, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, ed=\EJ, el=\EK,
home=\EH, ht=^I, ind=\n, ll=\EY7\s,
t1061|teleray|teleray 1061,
OTbs, am, km, xhp, xt,
cols#80, it#8, lines#24, xmc#1,
bel=^G, clear=\014$<1>, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EQ,
dl1=\EM$<2*>, ed=\EJ$<1>, el=\EK, home=\EH, ht=^I, hts=\EF,
ich1=\EP, il1=\EL$<2*>, ind=\n, ip=$<0.4*>,
is2=\Ee\EU01^Z1\EV\EU02^Z2\EV\EU03^Z3\EV\EU04^Z4\EV\EU05^Z5
\EV\EU06^Z6\EV\EU07^Z7\EV\EU08^Z8\EV\Ef,
kf1=^Z1, kf2=^Z2, kf3=^Z3, kf4=^Z4, kf5=^Z5, kf6=^Z6, kf7=^Z7,
kf8=^Z8, rmso=\ER@, rmul=\ER@, smso=\s\ERD, smul=\ERH,
tbc=\EG,
t1061f|teleray 1061 with fast PROMs,
dl1=\EM, il1=\EL, ip@, use=t1061,
# "Teleray Arpa Special", officially designated as
# "Teleray Arpa network model 10" with "Special feature 720".
# This is the new (1981) fast microcode updating the older "arpa" proms
# (which gave meta-key and programmable-fxn keys). 720 is much much faster,
# converts the keypad to programmable function keys, and has other goodies.
# Standout mode is still broken (magic cookie, etc) so is suppressed as no
# programs handle such lossage properly.
# Note: this is NOT the old termcap's "t1061f with fast proms."
# From: J. Lepreau <lepreau@utah-cs> Tue Feb 1 06:39:37 1983, Univ of Utah
# (t10: removed overridden ":so@:se@:us@:ue@:" -- esr)
t10|teleray 10 special,
OTbs, km, xhp, xt,
cols#80, it#8, lines#24, xmc#2,
clear=\Ej$<30/>, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EQ,
dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I, ich1=\EP, il1=\EL,
ind=\Eq, pad=\0, ri=\Ep, rmso=\ER@, rmul=\ER@, smso=\ERD,
smul=\ERH,
# teleray 16 - map the arrow keys for vi/rogue, shifted to up/down page, and
# back/forth words. Put the function keys (f1-f10) where they can be
# found, and turn off the other magic keys along the top row, except
# for line/local. Do the magic appropriate to make the page shifts work.
# Also toggle ^S/^Q for those of us who use Emacs.
t16|teleray 16,
am, da, db, mir, xhp, xt,
cols#80, lines#24,
bel=^G, clear=\E[H\E[2J, cr=\r, cub1=^H, cud1=\E[B,
cuf1=\E[C, cup=%i\E[%p1%d;%p2%df, cuu1=\E[A, dch1=\E[P,
dl1=\E[M, ed=\E[0J, el=\E[0K, home=\E[H, ht=^I, il1=\E[L,
ind=\n, kf1=^Z1, kf10=^Z0, kf2=^Z2, kf3=^Z3, kf4=^Z4, kf5=^Z5,
kf6=^Z6, kf7=^Z7, kf8=^Z8, kf9=^Z9, ri=\E[T,
rmcup=\E[V\E[24;1f\E[?38h, rmir=\E[4l, rmso=\E[m,
rmul=\E[m, sgr0=\E[m, smcup=\E[U\E[?38l, smir=\E[4h,
smso=\E[7m, smul=\E[4m,
#### Texas Instruments (ti)
#
# The Silent 700 was so called because it was built around a quiet thermal
# printer. It was portable, equipped with an acoustic coupler, and pretty
# neat for its day.
ti700|ti733|ti735|ti745|ti800|ti silent 700/733/735/745 or omni 800,
OTbs, hc, os,
cols#80,
bel=^G, cr=\r$<162>, cub1=^H, cud1=\n, ind=\n,
# Terminal entries for the Texas Instruments 703/707
# hardcopy terminals.
#
# http://www.bitsavers.org/pdf/ti/terminal/silent_700/
# Refer to:
# Model 707 Data Terminal User's Manual
#
# pages 2-7 and 2-8 say that the model 707 prints 10.2 characters per inch
# (cpi) (80 characters per line) by default, and can be switched to/from 17.0
# cpi using an escape sequence. There is no 80/132-column capability in
# terminfo (only the more general cpi which allows any value).
ti703|ti707|Texas Instruments Silent 703/707,
am, hc, os, xenl,
cols#80, it#8,
bel=^G, cr=\r$<162>, cub1=^H, cud1=\n, cuf1=\s, ind=\n,
is2=\EPC\\, nel=\r\n,
ti703-w|ti707-w|Texas Instruments Silent 703/707,
cols#132,
is2=\EPD\\, use=ti703,
#
# Texas Instruments 916 VDT 7 bit control mode
#
ti916|ti916-220-7|Texas Instruments 916 VDT 8859/1 vt220 mode 7 bit CTRL,
da, db, in, msgr,
- cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[2J$<6>,
- cnorm=\E[?25h, cub=\E[%p1%dD, cud=\E[%p1%dB,
- cuf=\E[%p1%dC, cup=\E[%p1%i%p1%d;%p2%dH, cuu=\E[%p1%dA,
- dch=\E[%p1%dP$<250>, dch1=\E[P, dl=\E[%p1%dM,
- ech=\E[%p1%dX$<20>, ed=\E[J$<6>, el=\E[0K, el1=\E[1K,
- enacs=\E(B\E)0, ff=^L, flash=\E[?5h\E[?5l$<6>,
+ cbt=\E[Z, clear=\E[H\E[2J$<6>, cub=\E[%p1%dD,
+ cud=\E[%p1%dB, cuf=\E[%p1%dC, cup=\E[%i%p1%d;%p2%dH,
+ cuu=\E[%p1%dA, dch=\E[%p1%dP$<250>, dch1=\E[P,
+ dl=\E[%p1%dM, ech=\E[%p1%dX$<20>, ed=\E[J$<6>, el=\E[0K,
+ el1=\E[1K, enacs=\E(B\E)0, ff=^L, flash=\E[?5h\E[?5l$<6>,
hpa=\E[%p1%{1}%+%dG, hts=\E[0W, ich=\E[%p1%d@$<250>,
il=\E[%p1%dL$<36>, ip=$<10>, is2=\E[1;24r\E[24;1H,
kcmd=\E[29~, kdch1=\E[P, kent=\n, kf1=\E[17~, kf10=\E[28~,
kf11=\E[29~, kf12=\E[31~, kf2=\E[18~, kf3=\E[19~,
kf4=\E[20~, kf5=\E[21~, kf6=\E[23~, kf7=\E[24~, kf8=\E[25~,
kf9=\E[26~, khome=\E[H, kich1=\E[@, knp=\E[S, kpp=\E[T,
kprt=^X, prot=\E&, rmacs=\017$<2>, rs2=\E[!p, sgr@,
smacs=\016$<2>, tbc=\E[3g, vpa=\E[%p1%{1}%+%dd,
use=vt220,
#
# Texas Instruments 916 VDT 8 bit control mode
#
ti916-8|ti916-220-8|Texas Instruments 916 VDT 8859/1 8 vt220 mode bit CTRL,
kcmd=\23329~, kcub1=\233D, kcud1=\233B, kcuf1=\233C,
kcuu1=\233A, kdch1=\233P, kent=\n, kf1=\23317~,
kf10=\23328~, kf11=\23329~, kf12=\23331~, kf2=\23318~,
kf3=\23319~, kf4=\23320~, kf5=\23321~, kf6=\23323~,
kf7=\23324~, kf8=\23325~, kf9=\23326~, khome=\233H,
kich1=\233@, knp=\233S, kpp=\233T, kprt=^X, use=ti916,
#
# Texas Instruments 916 VDT 8859/1 7 bit control 132 column mode
#
ti916-132|Texas Instruments 916 VDT vt220 132 column,
cols#132, use=ti916,
#
# Texas Instruments 916 VDT 8859/1 8 bit control 132 column mode
#
ti916-8-132|Texas Instruments 916 VDT 8-bit vt220 132 column,
cols#132, use=ti916-8,
ti924|Texas Instruments 924 VDT 8859/1 7 bit CTRL,
OTbs, am, xon,
cols#80, it#8, lines#24,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[2J\E[H, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[2J\E[H, cr=\r,
csr=%i\E[%p1%d;%p2%dr, cub1=\E[D, cud1=\E[B, cuf1=\E[C,
cup=%i\E[%p1%d;%p2%dH, cuu1=\E[A, cvvis=\E[?31h,
dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\EH,
il1=\E[L, ind=\ED, kbs=^H, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kf1=\EOP, kf2=\EOQ,
kf3=\EOR, kf4=\EOS, kf5=\E[16~, kf6=\E[17~, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, kich1=\E[@, rc=\E8, rev=\E[7m,
ri=\EM, rmso=\E[m, rmul=\E[m, sc=\E7, sgr0=\E[m, smso=\E[7m,
- smul=\E[4m, tbc=\E[3g,
+ smul=\E[4m, tbc=\E[3g, use=vt220+cvis,
ti924-8|Texas Instruments 924 VDT 8859/1 8 bit CTRL,
am, xon,
cols#80, it#8, lines#24,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[2J\E[H, cnorm=\E[?25h, cr=\r,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[2J\E[H, cr=\r,
csr=%i\E[%p1%d;%p2%dr, cub1=\E[D, cud1=\E[B, cuf1=\E[C,
cup=%i\E[%p1%d;%p2%dH, cuu1=\E[A, cvvis=\E[?31h,
dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\EH,
il1=\E[L, ind=\ED, kbs=^H, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kdch1=\233P, kf1=\217P, kf2=\217Q,
kf3=\217R, kf4=\217S, kf5=\23316~, kf6=\23317~,
kf7=\23318~, kf8=\23319~, kf9=\23320~, kich1=\233@, rc=\E8,
rev=\E[7m, ri=\EM, rmso=\E[m, rmul=\E[m, sc=\E7, sgr0=\E[m,
- smso=\E[7m, smul=\E[4m, tbc=\E[3g,
+ smso=\E[7m, smul=\E[4m, tbc=\E[3g, use=vt220+cvis,
ti924w|Texas Instruments 924 VDT 7 bit - 132 column mode,
cols#132, use=ti924,
ti924-8w|Texas Instruments 924 VDT 8 bit - 132 column mode,
cols#132, use=ti924-8,
ti931|Texas Instruments 931 VDT,
OTbs, am, xon,
cols#80, lines#24,
bel=^G, blink=\E4P, clear=\EL, cnorm=\E4@, cr=\r, cub1=\ED,
cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c,
cuu1=\EA, dch1=\EQ, dl1=\EO, ed=\EJ, el=\EI, home=\EH,
ich1=\ER\EP\EM, il1=\EN, ind=\Ea, invis=\E4H,
is2=\EGB\E(@B@@\E), kcub1=\ED, kcud1=\EB, kcuf1=\EC,
kcuu1=\EA, kdch1=\EQ, kdl1=\EO, kf1=\Ei1, kf2=\Ei2, kf3=\Ei3,
kf4=\Ei4, kf5=\Ei5, kf6=\Ei6, kf7=\Ei7, kf8=\Ei8, kf9=\Ei9,
kich1=\EP, kil1=\EN, rev=\E4B, ri=\Eb, rmso=\E4@, rmul=\E4@,
sgr0=\E4@, smso=\E4A, smul=\E4D,
ti926|Texas Instruments 926 VDT 8859/1 7 bit CTRL,
csr@, ind=\E[1S, ri=\E[1T, use=ti924,
# (ti926-8: I corrected this from the broken SCO entry -- esr)
ti926-8|Texas Instruments 926 VDT 8859/1 8 bit CTRL,
csr@, ind=\2331S, ri=\2331T, use=ti924-8,
ti_ansi|basic entry for ti928,
am, bce, eo, xenl, xon,
colors#8, cols#80, it#8, lines#25, pairs#64,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[2J\E[H,
cr=\r, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\E[B,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P,
dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich1=\E[@,
il1=\E[L, ind=\E[S, kbs=^H, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kend=\E[F, kf0=\E[V, kf1=\E[M,
kf2=\E[N, kf3=\E[O, kf4=\E[P, kf5=\E[Q, kf6=\E[R, kf7=\E[S,
kf8=\E[T, kf9=\E[U, khome=\E[H, knp=\E[G, kpp=\E[I,
op=\E[37;40m, ri=\E[T, rmso=\E[m, rmul=\E[m,
setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[m,
smso=\E[7m, smul=\E[4m,
#
# 928 VDT 7 bit control mode
#
ti928|Texas Instruments 928 VDT 8859/1 7 bit CTRL,
kdch1=\E[P, kend=\E_1\E\\, kent=\E[8~, kf1=\E[17~,
kf10=\E[28~, kf11=\E[29~, kf12=\E[31~, kf13=\E[32~,
kf15=\E[34~, kf2=\E[18~, kf3=\E[19~, kf4=\E[20~,
kf5=\E[21~, kf6=\E[23~, kf7=\E[24~, kf8=\E[25~, kf9=\E[26~,
kich1=\E[@, knp=\E[S, kpp=\E[T, kprt=\E[35~, use=ti_ansi,
#
# 928 VDT 8 bit control mode
#
ti928-8|Texas Instruments 928 VDT 8859/1 8 bit CTRL,
kdch1=\233P, kend=\2371\234, kent=\2338~, kf1=\23317~,
kf10=\23328~, kf11=\23329~, kf12=\23331~, kf13=\23332~,
kf15=\23334~, kf2=\23318~, kf3=\23319~, kf4=\23320~,
kf5=\23321~, kf6=\23323~, kf7=\23324~, kf8=\23325~,
kf9=\23326~, khome=\233H, kich1=\233@, knp=\233S,
kpp=\233T, kprt=\23335~, use=ti_ansi,
#### Zentec (zen)
#
# (zen30: removed obsolete :ma=^L ^R^L^K^P:. This entry originally
# had just <smso>=\EG6 which I think means standout was supposed to be
# dim-reverse using ADM12-style attributes. ADM12 <smul>/<rmul> and
# <invis> might work-- esr)
zen30|z30|zentec 30,
OTbs, am, mir, ul,
cols#80, lines#24,
bel=^G, clear=\E*, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW,
dim=\EG2, dl1=\ER$<1.5*>, ed=\EY, el=\ET$<1.0*>, home=^^,
il1=\EE$<1.5*>, ind=\n, rmir=\Er, rmul@, smir=\Eq, smso=\EG6,
smul@, use=adm+sgr,
# (zen50: this had extension capabilities
# :BS=^U:CL=^V:CR=^B:
# UK/DK/RK/LK/HM were someone's aliases for ku/kd/kl/kr/kh,
# which were also in the original entry -- esr)
# (zen50: removed obsolete ":ma=^Hh^Ll^Jj^Kk:" -- esr)
zen50|z50|zentec zephyr,
OTbs, am,
cols#80, lines#24, xmc#1,
clear=\E+, cub1=^H, cup=\E=%p1%{32}%+%c%p2%{32}%+%c,
cuu1=^K, dch1=\EW, dl1=\ER, ed=\EY, el=\ET, ich1=\EQ, il1=\EE,
invis@, kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K, khome=^^,
rmul@, smul@, use=adm+sgr,
# CCI 4574 (Office Power) from Will Martin <wmartin@BRL.ARPA> via BRL
cci|cci1|z8001|zen8001|CCI Custom Zentec 8001,
OTbs, am, bw,
cols#80, lines#24,
blink=\EM", clear=\EH\EJ, cnorm=\EP,
csr=\ER%p1%{32}%+%c%p2%{32}%+%c, cub1=^H, cud1=\n,
cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA,
cvvis=\EF\EQ\EM \ER 7, dim=\EM!, ed=\EJ, el=\EK, home=\EH,
invis=\EM(, is2=\EM \EF\ET\EP\ER 7, kbs=^H, kcub1=\ED,
kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\EH, mc4=^T, mc5=^R,
rev=\EM$, ri=\EI, rmso=\EM\s, rmul=\EM\s, sgr0=\EM\s,
smso=\EM$, smul=\EM0,
######## OBSOLETE UNIX CONSOLES
#
#### Apollo consoles
#
# Apollo got bought by Hewlett-Packard. The Apollo workstations are
# labeled HP700s now.
#
# From: Gary Darland <goodmanc@garnet.berkeley.edu>
apollo|apollo console,
OTbs, am, mir,
cols#88, lines#53,
clear=^L, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\EM%p1%{32}%+%c%p2%d), cuu1=\EA, dch1=\EP, dl1=\EL,
ed=\EJ, el=\EK, hpa=\EN%p1%d, il1=\EI, ind=\EE, ri=\ED,
rmcup=\EX, rmir=\ER, rmso=\ET, rmul=\EV, smcup=\EW, smir=\EQ,
smso=\ES, smul=\EU, vpa=\EO+\s,
# We don't know whether or not the apollo guys replicated DEC's firmware bug
# in the VT132 that reversed <rmir>/<smir>. To be on the safe side, disable
# both these capabilities.
apollo_15P|apollo 15 inch display,
rmir@, smir@, use=vt132,
apollo_19L|apollo 19 inch display,
rmir@, smir@, use=vt132,
apollo_color|apollo color display,
rmir@, smir@, use=vt132,
#### AT&T consoles
# This actually describes the generic SVr4 display driver for Intel boxes.
# The <dim=\E[2m> isn't documented and therefore may not be reliable.
# From: Eric Raymond <esr@snark.thyrsus.com> Mon Nov 27 19:00:53 EST 1995
att6386|at386|386at|AT&T WGS 6386 console,
am, bw, eo, xon,
cols#80, it#8, lines#25,
acsc=``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[=C,
clear=\E[2J\E[H, cnorm=\E[=1C, cr=\r, cub=\E[%p1%dD,
cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA,
cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[1M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
ich1=\E[1@, il=\E[%p1%dL, il1=\E[1L, ind=\E[S, invis=\E[9m,
is2=\E[0;10;39m, kbs=^H, kcbt=^], kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kend=\E[Y, kf1=\EOP,
kf10=\EOY, kf11=\EOZ, kf12=\EOA, kf2=\EOQ, kf3=\EOR,
kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX,
khome=\E[H, kich1=\E[@, knp=\E[U, kpp=\E[V, krmir=\E0,
nel=\r\E[S, rc=\E8, rev=\E[7m, ri=\E[T, rmacs=\E[10m,
rmso=\E[m, rmul=\E[m, sc=\E7,
sgr=\E[10m\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p5%t;
2%;%?%p6%t;1%;%?%p9%t;12%e;10%;%?%p7%t;9%;m,
sgr0=\E[0;10m, smacs=\E[12m, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, vpa=\E[%i%p1%dd, use=ecma+index,
use=klone+color,
# (pc6300plus: removed ":KM=/usr/lib/ua/kmap.s5:"; renamed BO/EE/CI/CV -- esr)
pc6300plus|AT&T 6300 plus,
OTbs, am, xon,
cols#80, lines#24,
bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[=C,
clear=\E[2J\E[H, cnorm=\E[=1C, cr=\r, cub1=^H, cud1=\E[B,
cuf1=\E[C, cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[A,
dch1=\E[1P, dim=\E[2m, dl1=\E[1M, ed=\E[0J, el=\E[0K,
home=\E[H, hts=\EH, ich1=\E[1@, il1=\E[1L, ind=\n,
invis=\E[9m, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
kcuu1=\E[A, kf1=\EOc, kf10=\EOu, kf2=\EOd, kf3=\EOe,
kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, kf9=\EOk,
nel=\r\n, rev=\E[7m, rmso=\E[m, rmul=\E[m, sgr0=\E[m,
smso=\E[7m, smul=\E[4m, tbc=\E[3g,
# From: Benjamin C. W. Sittler <bsittler@nmt.edu>
#
# I have a UNIX PC which I use as a terminal attached to my Linux PC.
# Unfortunately, the UNIX PC terminfo entry that comes with ncurses
# is broken. All the special key sequences are broken, making it unusable
# with Emacs. The problem stems from the following:
#
# The UNIX PC has a plethora of keys (103 of them, and there's no numeric
# keypad!), loadable fonts, and strange highlighting modes ("dithered"
# half-intensity, "smeared" bold, and real strike-out, for example.) It also
# uses resizable terminal windows, but the bundled terminal program always
# uses an 80x24 window (and doesn't support seem to support a 132-column
# mode.)
#
# HISTORY: The UNIX PC was one of the first machines with a GUI, and used a
# library which was a superset of SVr3.5 curses (called tam, for "terminal
# access method".) tam includes support for real, overlapping windows,
# onscreen function key labels, and bitmap graphics. But since the primary
# user interface on the UNIX PC was a GUI program (ua, for "user
# assistant",) and remote administration was considered important for the
# machine, tam also supported VT100-compatible terminals attached to the
# serial port or used across the StarLan network. To simulate the extra keys
# not present on a VT100, users could press ESC and a two-letter sequence,
# such as u d (Undo) or U D (Shift-Undo.) These two-letter sequences,
# however, were not the same as those sent by the actual Undo key. The
# actual Undo key sends ESC 0 s unshifted, and ESC 0 S shifted, for example.
# (If you're interested in adding some of the tam calls to ncurses, btw, I
# have the full documentation and several programs which use tam. It also
# used an extended terminfo format to describe key sequences, special
# highlighting modes, etc.)
#
# KEYS: This means that ncurses would quite painful on the UNIX PC, since
# there are two sequences for every key-modifier combination (local keyboard
# sequence and remote "VT100" sequence.) But I doubt many people are trying
# to use ncurses on the UNIX PC, since ncurses doesn't properly handle the
# GUI. Unfortunately, the terminfo entry (and the termcap, too, I presume)
# seem to have been built from the manual describing the VT100 sequences.
# This means it doesn't work for a real live UNIX PC.
#
# FONTS: The UNIX PC also has a strange interpretation of "alternate
# character set". Rather than the VT100 graphics you might expect, it allows
# up to 8 custom fonts to be loaded at any given time. This means that
# programs expecting VT100 graphics will usually be disappointed. For this
# reason I have disabled the smacs/rmacs sequences, but they could easily be
# re-enabled. Here are the relevant control sequences (from the ESCAPE(7)
# manpage), should you wish to do so:
#
# SGR10 - Select font 0 - ESC [ 10 m or SO
# SGR11 - Select font 1 - ESC [ 11 m or SI
# SGR12 - Select font 2 - ESC [ 12 m
# ... (etc.)
# SGR17 - Select font 7 - ESC [ 17 m
#
# Graphics for line drawing are not reliably found at *any* character
# location because the UNIX PC has dynamically reloadable fonts. I use font
# 0 for regular text and font 1 for italics, but this is by no means
# universal. So ASCII line drawing is in order if smacs/rmacs are enabled.
#
# MISC: The cursor visible/cursor invisible sequences were swapped in the
# distributed terminfo.
#
# To ameliorate these problems (and fix a few highlighting bugs) I rewrote
# the UNIX PC terminfo entry. The modified version works great with Lynx,
# Emacs, and XEmacs running on my Linux PC and displaying on the UNIX PC
# attached by serial cable. In Emacs, even the Undo key works, and many
# applications can now use the F1-F8 keys.
#
# esr's notes:
# Terminfo entry for the AT&T Unix PC 7300
# from escape(7) in Unix PC 7300 Manual.
# Somewhat similar to a vt100-am (but different enough
# to redo this from scratch.)
#
# /***************************************************************
# *
# * FONT LOADING PROGRAM FOR THE UNIX PC
# *
# * This routine loads a font defined in the file ALTFONT
# * into font memory slot #1. Once the font has been loaded,
# * it can be used as an alternative character set.
# *
# * The call to ioctl with the argument WIOCLFONT is the key
# * to this routine. For more information, see window(7) in
# * the PC 7300 documentation.
# ***************************************************************/
# #include <string.h> /* needed for strcpy call */
# #include <sys/window.h> /* needed for ioctl call */
# #define FNSIZE 60 /* font name size */
# #define ALTFONT "/usr/lib/wfont/special.8.ft" /* font file */
# /*
# * The file /usr/lib/wfont/special.8.ft comes with the
# * standard PC software. It defines a graphics character set
# * similar to that of the Teletype 5425 terminal. To view
# * this or other fonts in /usr/lib/wfont, use the command
# * cfont <filename>. For further information on fonts see
# * cfont(1) in the PC 7300 documentation.
# */
#
# struct altfdata /* structure for alt font data */
# {
# short altf_slot; /* memory slot number */
# char altf_name[FNSIZE]; /* font name (file name) */
# };
# ldfont()
# {
# int wd; /* window in which altfont will be */
# struct altfdata altf;
# altf.altf_slot=1;
# strcpy(altf.altf_name,ALTFONT);
# for (wd =1; wd < 12; wd++) {
# ioctl(wd, WIOCLFONT,&altf);
# }
# }
#
# (att7300: added <civis>/<cnorm>/<ich1>/<invis> from the BSDI entry,
# they're confirmed by the man page for the System V display---esr)
#
att7300|unixpc|pc7300|3b1|s4|AT&T UNIX PC Model 7300,
am, xon,
cols#80, it#8, lines#24,
bel=^G, blink=\E[9m, bold=\E[1m, cbt=\E^I, civis=\E[=1C,
clear=\E[2J\E[H, cnorm=\E[=0C, cr=\r, cub=\E[%p1%dD,
cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC,
cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA,
cuu1=\E[A, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M,
ed=\E[0J, el=\E[0K, home=\E[H, ich1=\E[@, il=\E[%p1%dL,
il1=\E[L, ind=\n, invis=\E[9m, is1=\017\E[=1w, kBEG=\ENB,
kCAN=\EOW, kCPY=\END, kCRT=\EON, kDC=\ENF, kDL=\ENE,
kEND=\ENN, kEOL=\EOA, kFND=\EOX, kHLP=\EOM, kHOM=\ENM,
kIC=\ENJ, kLFT=\ENK, kMOV=\ENC, kNXT=\ENH, kOPT=\EOR,
kPRV=\ENG, kRDO=\EOT, kRIT=\ENL, kRPL=\EOY, kSAV=\EOO,
kUND=\EOS, kbeg=\ENb, kbs=^H, kcan=\EOw, kcbt=\E[Z,
kclo=\EOV, kclr=\E[J, kcmd=\EOu, kcpy=\ENd, kcrt=\EOn,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\ENf,
ked=\E[J, kel=\EOa, kend=\E0, kext=\EOk, kf1=\EOc, kf2=\EOd,
kf3=\EOe, kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj,
kfnd=\EOx, khlp=\EOm, khome=\E[H, kich1=\ENj, kind=\E[B,
kmov=\ENc, kmrk=\ENi, knp=\E[U, knxt=\ENh, kopn=\EOv,
kopt=\EOr, kpp=\E[V, kprt=\EOz, kprv=\ENg, krdo=\EOt,
kref=\EOb, krfr=\ENa, kri=\E[A, krpl=\EOy, krst=\EOB,
ksav=\EOo, kslt=\ENI, kund=\EOs, nel=\EE, rev=\E[7m, ri=\EM,
rmso=\E[m, rmul=\E[m, sgr0=\E[0;10m, smso=\E[7m,
smul=\E[4m,
#### Convergent Technology
#
# Burroughs bought Convergent shortly before it merged with Univac.
# CTOS is (I believe) dead. Probably the aws is too (this entry dates
# from 1991 or earlier).
#
# Convergent AWS workstation from Gould/SEL UTX/32 via BRL
# (aws: removed unknown :dn=^K: -- esr)
aws|Convergent Technologies AWS workstation under UTX and Xenix,
am,
OTug#0, cols#80, lines#28, xmc#0,
OTbc=^H, OTma=\016h\013j\001k\022l\002m, OTnl=\n, acsc=,
clear=^L, cud1=^K, cuf1=^R, cup=\EC%p2%c%p1%c, cuu1=^A,
dch1=\EDC, dl1=\EDL, ed=\EEF, el=\EEL, hpa=\EH%p1%c,
ich1=\EIC, il1=\EIL, ind=\ESU, kbs=^H, kcub1=^N, kcud1=^K,
kcuf1=^R, kcuu1=^A, ri=\ESD, rmacs=\EAAF, rmso=\EARF,
rmul=\EAUF, smacs=\EAAN, smso=\EARN, smul=\EAUN,
vpa=\EV%p1%c,
awsc|Convergent Technologies AWS workstation under CTOS,
am,
OTug#0, cols#80, lines#24, xmc#0,
OTbc=^N, OTma=\016h\013j\001k\022l\002m, acsc=, clear=^L,
cud1=^K, cuf1=^R, cup=\EC%p2%c%p1%c, cuu1=^A, ed=\EEF,
el=\EEL, kbs=^H, kcub1=^N, kcud1=^K, kcuf1=^R, kcuu1=^A,
rmacs=\EAAF, rmso=\EAA, rmul=\EAA, smacs=\EAAN, smso=\EAE,
smul=\EAC,
#### DEC consoles
#
# The MicroVax console. Tim Theisen <tim@cs.wisc.edu> writes:
# The digital uVax II's had a graphic display called a qdss. It was
# supposed to be a high performance graphic accelerator, but it was
# late to market and barely appeared before faster dumb frame buffers
# appeared. I have only used this display while running X11. However,
# during bootup, it was in text mode, and probably had a terminal emulator
# within it. And that is what your termcap entry is for. In graphics
# mode the screen size is 1024x864 pixels.
qdss|qdcons|qdss glass tty,
OTbs, am,
cols#128, lines#57,
clear=\032$<1/>, cub1=^H, cud1=\n, cuf1=^L,
cup=\E=%p1%c%p2%c, cuu1=^K,
#### Fortune Systems consoles
#
# Fortune made a line of 68K-based UNIX boxes that were pretty nifty
# in their day; I (esr) used one myself for a year or so around 1984.
# They had no graphics, though, and couldn't compete against Suns and
# the like. R.I.P.
#
# From: Robert Nathanson <c160-3bp@Coral> via tut Wed Oct 5, 1983
# (This had extension capabilities
# :rv=\EH:re=\EI:rg=0:GG=0:\
# :CO=\E\\:WL=^Aa\r:WR=^Ab\r:CL=^Ac\r:CR=^Ad\r:DL=^Ae\r:RF=^Af\r:\
# :RC=^Ag\r:CW=^Ah\r:NU=^Aj\r:EN=^Ak\r:HM=^Al:PL=^Am\r:\
# :PU=^An\r:PD=^Ao\r:PR=^Ap\r:HP=^A@\r:RT=^Aq\r:TB=\r:CN=\177:MP=\E+F:
# It had both ":bs:" and ":bs=^H:"; I removed the latter. Also, it had
# ":sg=0:" and ":ug=0:"; evidently the composer was trying (unnecessarily)
# to force both magic cookie glitches off. Once upon a time, I
# used a Fortune myself, so I know the capabilities of the form ^A[a-z]\r are
# function keys; thus the "Al" value for HM was certainly an error. I renamed
# EN/PD/PU/CO/CF/RT according to the XENIX/TC mappings, but not HM/DL/RF/RC.
# I think :rv: and :re: are start/end reverse video and :rg: is a nonexistent
# "reverse-video-glitch" capability; I have put :rv: and :re: in with standard
# names below. I've removed obsolete ":nl=5^J:" as there is a :do: -- esr)
fos|fortune|Fortune system,
OTbs, am, bw,
cols#80, lines#25,
acsc=j*k(l m"q&v%w#x-, bel=^G, blink=\EN, civis=\E],
clear=\014$<20>, cnorm=\E\\, cr=\r, cub1=^H, cud1=\n$<3>,
cup=\034C%p1%{32}%+%c%p2%{32}%+%c, cuu1=\013$<3>,
cvvis=\E\:, dch1=\034W$<5>, dl1=\034R$<15>,
ed=\034Y$<3*>, el=^\Z, home=\036$<10>, ht=^Z,
ich1=\034Q$<5>, il1=\034E$<15>, ind=\n, is2=^_.., kbs=^H,
kcub1=^Aw\r, kcud1=^Ay\r, kcuf1=^Az\r, kcuu1=^Ax\r,
kend=^Ak\r, kent=^Aq, kf1=^Aa\r, kf2=^Ab\r, kf3=^Ac\r,
kf4=^Ad\r, kf5=^Ae\r, kf6=^Af\r, kf7=^Ag\r, kf8=^Ah\r,
khome=^A?\r, knp=^Ao\r, kpp=^An\r, nel=\r\n, rev=\EH,
rmacs=^O, rmso=^\I`, rmul=^\IP, sgr0=\EI, smacs=\Eo,
smso=^\H`, smul=^\HP,
#### Masscomp consoles
#
# Masscomp has gone out of business. Their product line was purchased by a
# company in Georgia (US) called "XS International", parts and service may
# still be available through them.
#
# (masscomp: ":MT:" changed to ":km:"; -- esr)
masscomp|masscomp workstation console,
OTbs, km, mir,
cols#80, it#8, lines#24,
clear=\E[2J, cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M,
ed=\E[J, el=\E[K, ht=^I, il1=\E[L, is2=\EGc\EGb\EGw, kbs=^H,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, rmir=\E[4l,
rmso=\E[m, rmul=\EGau, smir=\E[4h, smso=\E[7m, smul=\EGu,
masscomp1|masscomp large screen version 1,
cols#104, lines#36, use=masscomp,
masscomp2|masscomp large screen version 2,
cols#64, lines#21, use=masscomp,
#### OSF Unix
#
# OSF/1 1.1 Snapshot 2
pmcons|pmconsole|PMAX console,
am,
cols#128, lines#57,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, cuu1=^K, ht=^I,
ind=\n, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
#### Other consoles
# The following is a version of the ibm-pc entry distributed with PC/IX,
# (Interactive Systems' System 3 for the Big Blue), modified by Richard
# McIntosh at UCB/CSM. The :pt: and :uc: have been removed from the original,
# (the former is untrue, and the latter failed under UCB/man); standout and
# underline modes have been added. Note: this entry describes the "native"
# capabilities of the PC monochrome display, without ANY emulation; most
# communications packages (but NOT PC/IX connect) do some kind of emulation.
pcix|PC/IX console,
am, bw, eo,
cols#80, lines#24,
clear=\Ec, cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[A, ed=\E[J, el=\E[K,
home=\E[H, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smso=\E[7m,
smul=\E[4m,
# (ibmpcx: this entry used to be known as ibmx.
# It formerly included the following extension capabilities:
# :GC=b:GL=v:GR=t:RT=^J:\
# :GH=\E[196g:GV=\E[179g:\
# :GU=\E[193g:GD=\E[194g:\
# :G1=\E[191g:G2=\E[218g:G3=\E[192g:G4=\E[217g:\
# :CW=\E[E:NU=\E[F:RF=\E[G:RC=\E[H:\
# :WL=\E[K:WR=\E[L:CL=\E[M:CR=\E[N:\
# I renamed GS/GE/WL/WR/CL/CR/PU/PD/HM/EN; also, removed a duplicate
# ":kh=\E[Y:". Added IBM-PC forms characters and highlights, they match
# what was there before. -- esr)
ibmpcx|xenix|ibmx|IBM PC xenix console display,
OTbs, am, msgr,
cols#80, lines#25,
clear=^L, cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=\E[%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M,
ed=\E[J, el=\E[K, home=\E[H, ich1=\E[@, il1=\E[L, kbs=^H,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kend=\E[d,
kf1=\E[K, kf2=\E[L, kf3=\E[M, kf4=\E[N, khome=\E[Y, knp=\E[e,
kpp=\E[Z, use=klone+acs, use=klone+sgr8,
######## OTHER OBSOLETE TYPES
#
# These terminals are *long* dead -- these entries are retained for
# historical interest only.
#
#### Obsolete non-ANSI software emulations
#
# CTRM terminal emulator
# 1. underlining is not allowed with colors: first, is is simulated by
# black on white, second, it disables background color manipulations.
# 2. BLINKING, REVERSE and BOLD are allowed with colors,
# so we have to save their status in the static registers A, B and H
# respectively, to be able to restore them when color changes
# (because any color change turns off ALL attributes)
# 3. <bold> and <rev> sequences alternate modes,
# rather than simply entering them. Thus we have to check the
# static register B and H to determine the status, before sending the
# escape sequence.
# 4. <sgr0> now must set the status of all 3 register (A,B,H) to zero
# and then reset colors
# 5. implementation of the protect mode would badly penalize the performance.
# we would have to use \E&bn sequence to turn off colors (as well as all
# other attributes), and keep the status of protect mode in yet another
# static variable. If someone really needs this mode, they would have to
# create another terminfo entry.
# 6. original color-pair is white on black.
# store the information about colors into static registers
# 7. set foreground color. it performs the following steps.
# 1) turn off all attributes
# 2) turn on the background and video attributes that have been turned
# on before (this information is stored in static registers X,Y,Z,A,B,H,D).
# 3) turn on foreground attributes
# 4) store information about foreground into U,V,W static registers
# 8. turn on background: similar to turn on foreground above
ctrm|C terminal emulator,
am, bce, xon,
colors#8, cols#80, lh#0, lines#24, lm#0, lw#0, ncv#2, nlab#0,
pairs#63, pb#19200, vt#6,
bel=^G, blink=\E&dA%{1}%PA,
bold=%?%gH%{0}%=%t\E&dH%{1}%PH%;, cbt=\Ei,
clear=\EH\EJ, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\E&a%p2%dc%p1%dY, cuu1=\EA, dch1=\EP$<2>, dl1=\EM,
ed=\EJ, el=\EK, hpa=\E&a%p1%dC, ht=\011$<2>, hts=\E1,
il1=\EL, ind=\n, ip=$<2>, is2=\E&jA\r, kbs=^H, kcub1=\Eu\r,
kcud1=\Ew\r, kcuf1=\Ev\r, kcuu1=\Et\r, kf1=\Ep\r,
kf2=\Eq\r, kf3=\Er\r, kf4=\Es\r, kf5=\Et\r, kf6=\Eu\r,
kf7=\Ev\r, kf8=\Ew\r, khome=\Ep\r,
op=\E&bn\E&bB\E&bG\E&bR%{0}%PX%{0}%PY%{0}%PZ%{1}%PW%{1}%PV
%{1}%PU,
rev=%?%gB%{0}%=%t\E&dB%{1}%PB%;, rmir=\ER, rmkx=\E&jA,
setb=\E&bn%?%gA%t\E&dA%;%?%gB%t\E&dB%;%?%gH%t\E&dH%;%?%gU%t
\E&bR%;%?%gV%t\E&bG%;%?%gW%t\E&bB%;%?%p1%{1}%&%t\E&bb
%{1}%e%{0}%;%PZ%?%p1%{2}%&%t\E&bg%{1}%e%{0}%;%PY%?%p1
%{4}%&%t\E&br%{1}%e%{0}%;%PX,
setf=\E&bn%?%gA%t\E&dA%;%?%gB%t\E&dB%;%?%gH%t\E&dH%;%?%gX%t
\E&br%;%?%gY%t\E&bg%;%?%gZ%t\E&bb%;%?%p1%{1}%&%t\E&bB
%{1}%e%{0}%;%PW%?%p1%{2}%&%t\E&bG%{1}%e%{0}%;%PV%?%p1
%{4}%&%t\E&bR%{1}%e%{0}%;%PU,
sgr=\E&d@%{0}%PA%{0}%PB%{0}%PD%{0}%PH%?%p1%p3%p5%|%|%t\E&dB
%{1}%PB%;%?%p4%t\E&dA%{1}%PA%;%?%p6%t\E&dH%{1}%PH%;%?%p2
%t\E&dD%;,
sgr0=\E&d@%{0}%PA%{0}%PB%{0}%PH, smir=\EQ, smkx=\E&jB,
smso=\E&dD, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY,
# gs6300 - can't use blue foreground, it clashes with underline;
# it's simulated with cyan
# Bug: The <op> capability probably resets attributes.
# (gs6300: commented out <rmln> (no <smln>) --esr)
gs6300|emots|AT&T PC6300 with EMOTS terminal emulator,
am, bce, msgr, xon,
colors#8, cols#80, it#8, lines#24, pairs#63,
acsc=++\,\,--..``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyz
z{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=\r,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I,
ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n,
is2=\E[m, kbs=^H, kcbt=^R^I, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kf1=\E[0s, kf2=\E[24s, kf3=\E[1s,
kf4=\E[23s, kf5=\E[2s, kf6=\E[22s, kf7=\E[3s, kf8=\E[21s,
khome=\E[H, mc4=\E[4i, mc5=\E[5i, op=\E[?;m, rev=\E[7m,
ri=\E[L, rmacs=\E[10m, rs1=\Ec, setb=\E[?;%p1%dm,
setf=\E[?%?%p1%{0}%=%t0%e%p1%{1}%=%t2%e%p1%{1}%-%d%;m,
sgr0=\E[m\E[10m, smacs=\E[11m, smso=\E[1m, smul=\E[4m,
# From: <earle@smeagol.UUCP> 29 Oct 85 05:40:18 GMT
# MS-Kermit with Heath-19 emulation mode enabled
# (h19k: changed ":pt@:" to ":it@"
h19k|h19kermit|heathkit emulation provided by Kermit (no auto margin),
am@, da, db, xt,
it@,
ht@, use=h19-u,
# Apple Macintosh with Versaterm, a terminal emulator distributed by Synergy
# Software (formerly Peripherals Computers & Supplies, Inc) of
# 2457 Perkiomen Ave., Reading, PA 19606, 1-800-876-8376. They can
# also be reached at support@synergy.com.
versaterm|versaterm vt100 emulator for the Macintosh,
am, xenl,
cols#80, it#8, lines#24,
bel=^G, blink=\E[5m$<2/>, bold=\E[1m$<2/>,
clear=\E[;H\E[2J$<50/>, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub1=^H, cud1=\n, cuf1=\E[C$<2/>,
cup=\E[%i%p1%d;%p2%dH$<5/>, cuu1=\E[A$<2/>,
dch1=\E[1P$<7/>, dl1=\E[1M$<9/>, ed=\E[J$<50/>,
el=\E[K$<3/>, home=\E[H, ht=^I, ich1=\E[1@$<7/>,
il1=\E[1L$<9/>, is2=\E[1;24r\E[24;1H, kbs=^H, kcub1=\EOD,
kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ,
kf3=\EOR, kf4=\EOS, nel=\r\n, rc=\E8, rev=\E[7m$<2/>,
rf=/usr/share/tabset/vt100, ri=\EM$<5/>,
rmkx=\E>\E[?1l, rmso=\E[m$<2/>, rmul=\E[m$<2/>, rs1=\E>,
sc=\E7, sgr0=\E[m$<2/>, smkx=\E=\E[?1h, smso=\E[7m$<2/>,
smul=\E[4m$<2/>,
# From: Rick Thomas <ihnp4!btlunix!rbt>
# (xtalk: I added <rmam>/<smam> based on the init string.
xtalk|IBM PC with xtalk communication program (versions up to 3.4),
am, mir, msgr, xon,
cols#80, it#8, lines#24, vt#3, xmc#1,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, clear=\E[H\E[J$<50>, cr=\r, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C$<2>,
cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA,
cuu1=\E[A$<2>, dl1=\E[M$<99>, ed=\E[J$<50>, el=\E[K$<3>,
el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH,
il1=\E[L$<99>, ind=\n, kbs=^H, kcub1=\EOD, kcud1=\EOB,
kcuf1=\EOC, kcuu1=\EOA, ri=\EM$<5>, rmacs=^O, rmam=\E[?7l,
rmkx=\E[?1l\E>, rmso=\E[m\s,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sgr0=\E[m,
smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m\s,
tbc=\E[3g, use=vt100+fnkeys,
# The official PC terminal emulator program of the AT&T Product Centers.
# Note - insert mode commented out - doesn't seem to work on AT&T PC.
simterm|attpc running simterm,
am,
cols#80, lines#24,
bel=^G, clear=\EH\EJ, cr=\r, cub1=^H, cud1=\EB, cuf1=\EC,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\ER,
dl1=\EM, ed=\EJ, el=\EK, home=\EH, il1=\EL, ind=\n, rmcup=\EVE,
rmso=\E&d@, sgr0=\E&d@, smcup=\EVS, smso=\E&dB,
#### Daisy wheel printers
#
# This section collects Diablo, DTC, Xerox, Qume, and other daisy
# wheel terminals. These are now largely obsolete.
#
# (diablo1620: removed <if=/usr/share/tabset/xerox1720>, no such file -- esr)
diablo1620|diablo1720|diablo450|ipsi|diablo 1620,
hc, os,
cols#132, it#8,
cub1=^H, cud1=\n, cuu1=\E\n, hd=\ED, hpa=\E\011%i%p1%c,
ht=^I, hts=\E1, hu=\EU, kbs=^H, tbc=\E2,
diablo1620-m8|diablo1640-m8|diablo 1620 w/8 column left margin,
cols#124,
is2=\r \E9, use=diablo1620,
# (diablo1640: removed <if=/usr/share/tabset/xerox1730>, no such file -- esr)
diablo1640|diablo1730|diablo1740|diablo630|x1700|diablo|xerox|diablo 1640,
bel=^G, rmso=\E&, rmul=\ER, smso=\EW, smul=\EE,
use=diablo1620,
# (diablo1640-lm: removed <if=/usr/share/tabset/xerox1730-lm>, no such
# file -- esr)
diablo1640-lm|diablo-lm|xerox-lm|diablo 1640 with indented left margin,
cols#124,
rmso=\E&, rmul=\ER, smso=\EW, smul=\EE, use=diablo1620,
diablo1740-lm|630-lm|1730-lm|x1700-lm|diablo 1740 printer,
use=diablo1640-lm,
# DTC 382 with VDU. Has no <ed> so we fake it with <el>. Standout
# <smso=^P\s\002^PF> works but won't go away without dynamite <rmso=^P\s\0>.
# The terminal has tabs, but I'm getting tired of fighting the braindamage.
# If no tab is set or the terminal's in a bad mood, it glitches the screen
# around all of memory. Note that return puts a blank ("a return character")
# in the space the cursor was at, so we use ^P return (and thus ^P newline for
# newline). Note also that if you turn off :pt: and let Unix expand tabs,
# curses won't work (some old BSD versions) because it doesn't clear this bit,
# and cursor addressing sends a tab for row/column 9. What a losing terminal!
# I have been unable to get tabs set in all 96 lines - it always leaves at
# least one line with no tabs in it, and once you tab through that line,
# it completely weirds out.
# (dtc382: change <rmcup> to <smcup> -- it just does a clear --esr)
dtc382|DTC 382,
am, da, db, xhp,
cols#80, lines#24, lm#96,
bel=^G, clear=\020\035$<20>, cnorm=^Pb, cr=^P\r, cub1=^H,
cuf1=^PR, cup=\020\021%p2%c%p1%c, cuu1=^P^L, cvvis=^PB,
dch1=^X, dl1=^P^S, ed=^P^U^P^S^P^S, el=^P^U, home=^P^R,
il1=^P^Z, ind=\n, pad=^?, rmcup=, rmir=^Pi, rmul=^P \0,
smcup=\020\035$<20>, smir=^PI, smul=^P ^P,
dtc300s|DTC 300s,
hc, os,
cols#132,
bel=^G, cr=\r, cub1=^H, cud1=\n, cuu1=^Z, ff=^L, hd=\Eh, ht=^I,
hts=\E1, hu=\EH, ind=\n, kbs=^H, tbc=\E3,
gsi|mystery gsi terminal,
hc, os,
cols#132,
bel=^G, cr=\r, cub1=^H, cud1=\n, cuu1=^Z, hd=\Eh, ht=^I, hu=\EH,
ind=\n,
aj830|aj832|aj|anderson jacobson,
hc, os,
bel=^G, cr=\r, cub1=^H, cud1=\n, cuu1=\E7, hd=\E9, hu=\E8,
ind=\n,
# From: Chris Torek <chris@gyre.umd.edu> Thu, 7 Nov 85 18:21:58 EST
aj510|Anderson-Jacobson model 510,
am, mir,
cols#80, lines#24,
clear=^L, cub1=^H, cuf1=\EX,
cup=\E#%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EY,
dch1=\E'D$<.1*>, dl1=\E&D$<2*/>, ed=\E'P, el=\E'L, ich1=,
il1=\E&I$<2*/>, ip=$<.1*/>, kcub1=\EW, kcud1=\EZ,
kcuf1=\EX, kcuu1=\EY, pad=^?, rmcup=\E"N, rmir=\E'J,
rmso=\E"I, rmul=\E"U, smcup=\E"N, smir=\E'I, smso=\E"I,
smul=\E"U,
# From: <cbosg!ucbvax!pur-ee!cincy!chris> Thu Aug 20 09:09:18 1981
# This is incomplete, but it's a start.
nec5520|nec|spinwriter|nec 5520,
hc, os,
cols#132, it#8,
bel=^G, cr=\r, cub1=^H, cud1=\n, cuu1=\E9, ff=^L,
hd=\E]s\n\E]W, ht=^I, hts=\E1, hu=\E]s\E9\E]W, ind=\n,
kbs=^H, tbc=\E3,
qume5|qume|Qume Sprint 5,
hc, os,
cols#80, it#8,
bel=^G, cr=\r, cub1=^H, cud1=\n, cuu1=^Z, ff=^L, hd=\Eh, ht=^I,
hts=\E1, hu=\EH, ind=\n, kbs=^H, tbc=\E3,
# I suspect the xerox 1720 is the same as the diablo 1620.
xerox1720|x1720|x1750|xerox 1720,
hc, os,
cols#132, it#8,
bel=^G, cr=\r, cub1=^H, cud1=\n, ff=^L, ht=^I, hts=\E1, ind=\n,
tbc=\E2,
#### Miscellaneous obsolete terminals, manufacturers unknown
#
# If you have any information about these (like, a manufacturer's name,
# and a date on the serial-number plate) please send it!
cad68-3|cgc3|cad68 basic monitor transparent mode size 3 chars,
OTbs, am,
cols#73, lines#36,
clear=^Z, cub1=^H, cuf1=^L, cuu1=^K, home=^^,
cad68-2|cgc2|cad68 basic monitor transparent mode size 2 chars,
OTbs, am,
cols#85, lines#39,
clear=^Z, cub1=^H, cuf1=^L, cuu1=^K, home=^^, kcub1=\E3,
kcud1=\E2, kcuf1=\E4, kcuu1=\E1, kf1=\E5, kf2=\E6, kf3=\E7,
kf4=\E8, rmso=\Em^C, smso=\Em^L,
cops10|cops|cops-10|cops 10,
am, bw,
cols#80, lines#24,
bel=^G, clear=\030$<30/>, cr=\r, cub1=^H, cud1=\n, cuf1=^L,
cup=\020%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, ed=^W, el=^V,
ind=\n, kbs=^H, kcub1=^H, kcud1=\n, kcuf1=^L, kcuu1=^K,
khome=^Y,
# (d132: removed duplicate :ic=\E5:,
# merged in capabilities from a BRL entry -- esr)
d132|datagraphix|datagraphix 132a,
da, db, in,
cols#80, lines#30,
bel=^G, clear=^L, cnorm=\Em\En, cr=\r, cub1=^H, cud1=\n,
cuf1=\EL, cup=\E8%i%p1%3d%p2%3d, cuu1=\EK, cvvis=\Ex,
dch1=\E6, home=\ET, ht=^I, ich1=\E5, il1=\E3, ind=\n, kbs=^H,
kcub1=^H, kcud1=\n, nel=\r\n, ri=\Ew,
# The d800 was an early portable terminal from c.1984-85 that looked a lot
# like the original Compaq `lunchbox' portable (but no handle). It had a vt220
# mode (which is what this entry looks like) and several other lesser-known
# emulations.
d800|Direct 800/A,
OTbs, am, da, db, msgr, xhp,
cols#80, it#8, lines#24,
acsc=``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~,
bel=^G, clear=\E[1;1H\E[2J, cnorm=\E[>12h, cr=\r, cub1=^H,
cud1=\n, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
cvvis=\E[>12l, ed=\E[J, el=\E[K, ht=^I, ind=\ED, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ,
kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW,
ri=\EM, rmacs=\E[m, rmso=\E[m, rmul=\E[m, sgr0=\E[m,
smacs=\E[1m, smso=\E[7m, smul=\E[4m,
digilog|digilog 333,
OTbs,
cols#80, lines#16,
bel=^G, cr=\r, cub1=^H, cud1=\n, cuf1=^I, cuu1=^O, el=^X,
home=^N, ind=\n,
# The DWK was a terminal manufactured in the Soviet Union c.1986
dwk|dwk-vt|dwk terminal,
am,
cols#80, it#8, lines#24,
acsc=+\^\,Q-S.M0\177`+a\:f'g#h#i#jXkClJmFnNo~qUs_tEuPv
\\wKxW~_,
bel=^G, clear=\EH\EJ, cr=\r, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EP,
ed=\EJ, el=\EK, home=\EH, ht=^I, ich1=\EQ, ind=\n, kbs=^?,
kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\Ee,
kf1=\Ef1, kf10=\Ef0, kf2=\Ef2, kf3=\Ef3, kf4=\Ef4, kf5=\Ef5,
kf6=\Ef6, kf7=\Ef7, kf8=\Ef8, kf9=\Ef9, kich1=\Ed, knp=\Eh,
kpp=\Eg, nel=\r\n, rev=\ET, ri=\ES, rmacs=\EG, rmso=\EX,
sgr0=\EX, smacs=\EF, smso=\ET,
env230|envision230|envision 230 graphics terminal,
xenl@,
enacs@, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rmacs@,
sgr=\E[0%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;
1%;m$<2>,
sgr0=\E[0m$<2>, smacs@, smso=\E[7m, use=vt100+4bsd,
# These execuports were impact-printer ttys with a 30- or maybe 15-cps acoustic
# coupler attached, the whole rig fitting in a suitcase and more or less
# portable. Hot stuff for c.1977 :-) -- esr
ep48|ep4080|execuport 4080,
OTbs, am, os,
cols#80,
bel=^G, cr=\r, cub1=^H, cud1=\n, hd=^\, hu=^^, ind=\n,
ep40|ep4000|execuport 4000,
cols#136, use=ep4080,
# Adam Thompson <athompso@pangea.ca> tells us:
# Informer series - these are all portable units, resembling older
# automatic bread-baking machines. The terminal looks like a `clamshell'
# design, but isn't. The structure is similar to the Direct terminals,
# but only half the width. The entire unit is only about 10" wide.
# It features an 8" screen (6" or 7" if you have color!), and an 9"x6"
# keyboard. All the keys are crammed together, much like some laptop
# PCs today, but perhaps less well organized...all these units have a
# bewildering array of plugs on the back, including a built-in modem.
# The 305 was a color version of the 304; the 306 and 307 were mono and
# color terminals built for IBM bisync protocols.
# From: Paul Leondis <unllab@amber.berkeley.edu>
ifmr|Informer D304,
OTbs, am,
cols#80, lines#24,
clear=\EZ, cub1=^H, cud1=\n, cuf1=\EC,
cup=\EY%p2%{32}%+%c%p1%{32}%+%c, cuu1=\EA, dch1=\E\\,
ed=\E/, el=\EQ, home=\EH, ich1=\E[, ri=\En, rmso=\EK, sgr0=\EK,
smso=\EJ,
# Entry largely based on wy60 and has the features of wy60ak.
opus3n1+|Esprit Opus3n1+ in wy60 mode with ANSI arrow keys,
am, bw, hs, km, mir, msgr, ul, xon,
cols#80, lh#1, lines#24, lw#8, nlab#8, wsl#80,
acsc=0wa_h[jukslrmqnxqzttuyv]wpxv, bel=^G, blink=\EG2,
cbt=\EI, civis=\E`0, clear=\E*$<100>, cnorm=\E`1, cr=\r,
cub1=^H, cud1=\n, cuf1=^L, cup=\Ea%i%p1%dR%p2%dC, cuu1=^K,
dch1=\EW$<11>, dim=\EGp, dl1=\ER$<5>, dsl=\Ez(\r,
ed=\EY$<100>, el=\ET, fsl=\r, home=\036$<2>, ht=\011$<5>,
hts=\E1, if=/usr/share/tabset/std, il1=\EE$<4>, ind=\n,
ip=$<3>,
is2=\E`\:\Ee(\EO\Ee6\Ec41\E~4\Ec21\Ed/\Ezz&\E[A\177\Ezz'\E[B
\177\Ezz(\E[D\177\Ezz)\E[C\177\Ezz<\E[Q\177\Ezz`\E[F
\177\EA1*\EZH12,
kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kdch1=\EW, kdl1=\ER, ked=\EY,
kel=\ET, kend=\E[F, kent=\E7, kf1=^A@\r, kf10=^AI\r,
kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r,
kf16=^AO\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r,
kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^,
kich1=\EQ, kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er,
mc0=\EP, mc4=^T, mc5=^R, nel=\r\n$<3>,
pfloc=\EZ2%p1%{63}%+%c%p2%s\177,
pfx=\EZ1%p1%{63}%+%c%p2%s\177,
pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<7>,
rmacs=\EH^C, rmam=\Ed., rmcup=, rmir=\Er, rmln=\EA11,
rmxon=\Ec20, rs1=\E~!\E~4$<150>, rs2=\EeF$<150>,
rs3=\EwG\Ee($<150>,
sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;\EG%{48}%?%p2
%t%{8}%|%;%?%p1%p3%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|
%t%{64}%|%;%?%p7%t%{1}%|%;%c,
sgr0=\E(\EH\003\EG0\EcD, smacs=\EH^B, smam=\Ed/,
smcup=\Ezz&\E[A\177\Ezz'\E[B\177\Ezz(\E[D\177\Ezz)\E[C\177
\Ezz<\E[Q\177,
smir=\Eq, smln=\EA10, smxon=\Ec21, tbc=\E0, tsl=\Ez(,
uc=\EG8\EG0, use=adm+sgr,
teletec|Teletec Datascreen,
OTbs, am,
cols#80, lines#24,
bel=^G, clear=^L, cr=\r, cub1=^H, cud1=\n, cuf1=^_, cuu1=^K,
home=^^, ind=\n,
# From: Mark Dornfeld <romwa@ucbvax.berkeley.edu>
# This description is for the LANPAR Technologies VISION 3220
# terminal from 1984/85. The function key definitions k0-k5 represent the
# edit keypad: FIND, INSERT HERE, REMOVE, SELECT, PREV SCREEN,
# NEXT SCREEN. The key definitions k6-k9 represent the PF1 to PF4 keys.
#
# Kenneth Randell <kenr@datametrics.com> writes on 31 Dec 1998:
# I had a couple of scopes (3221) like this once where I used to work, around
# the 1987 time frame if memory serves me correctly. These scopes were made
# by an outfit called LANPAR Technologies, and were meant to me DEC VT 220
# compatible. The 3220 was a plain text terminal like the VT-220, the 3221
# was a like the VT-240 (monochrome with Regis + Sixel graphics), and the 3222
# was like the VT-241 (color with Regis + Sixel Graphics). These terminals
# (3221) cost about $1500 each, and one was always broken -- had to be sent
# back to the shop for repairs.
# The only real advantage these scopes had over the VT-240's were:
# 1) They were faster in the Regis display, or at least the ones I did
# 2) They had a handy debugging feature where you could split-screen the
# scope, the graphics would appear on the top, and the REGIS commands would
# appear on the bottom. I don't remember the VT-240s being able to do that.
# I would swear that LANPAR Technologies was in MA someplace, but since I
# don't work at the same place anymore, and those terminals and manuals were
# long since junked, I cannot be any more sure than that.
#
# (v3220: removed obsolete ":kn#10:",
# I added <rmam>/<smam> based on the init string -- esr)
v3220|LANPAR Vision II model 3220/3221/3222,
OTbs, am, mir, xenl,
cols#80, it#8, lines#24,
clear=\E[H\E[J, cub1=^H, cud1=\E[B, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M,
ed=\E[J, el=\E[K, ht=^I, il1=\E[L,
is2=\E>\E[?3l\E[?7h\E[?8h\E[p, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kf0=\E[1~, kf1=\E[2~, kf2=\E[3~,
kf3=\E[4~, kf4=\E[5~, kf5=\E[6~, kf6=\E[OP, kf7=\E[OQ,
kf8=\E[OR, kf9=\E[OS, khome=\E[H, ri=\EM, rmam=\E[?7l,
rmir=\E[4l, rmkx=\E>, rmso=\E[m, rmul=\E[m, sgr0=\E[m,
smam=\E[?7h, smir=\E[4h, smkx=\E=, smso=\E[7m, smul=\E[4m,
######## ICH/ICH1 VERSUS RMIR/SMIR
#
# Some non-curses applications get confused if both ich/ich1 and rmir/smir
# are present; the symptom is doubled characters in an update using insert.
# These applications are technically correct; in both 4.3BSD termcap and
# terminfo, you're not actually supposed to specify both ich/ich1 and rmir/smir
# unless the terminal needs both. To my knowledge, no terminal still in this
# file requires both other than the very obsolete dm2500.
#
# For ncurses-based applications this is not a problem, as ncurses uses
# one or the other as appropriate but never mixes the two. Therefore we
# have not corrected entries like `linux' and `xterm' that specify both.
# If you see doubled characters from these, use the linux-nic and xterm-nic
# entries that suppress ich/ich1. And upgrade to ncurses!
#
######## VT100/ANSI/ISO 6429/ECMA-48/PC-TERM TERMINAL STANDARDS
#
# ANSI X3.64 has been withdrawn and replaced by ECMA-48. The ISO 6429 and
# ECMA-48 standards are said to be almost identical, but are not the same
# as X3.64 (though for practical purposes they are close supersets of it).
#
# You can obtain ECMA-48 for free by sending email to helpdesk@ecma.ch
# requesting the standard(s) you want (i.e. ECMA-48, "Control Functions for
# Coded Character Sets"), include your snail-mail address, and you should
# receive the document in due course. Don't expect an email acknowledgment.
#
# Related standards include "X3.4-1977: American National Standard Code for
# Information Interchange" (the ASCII standard) and "X3.41.1974:
# Code-Extension Techniques for Use with the 7-Bit Coded Character Set of
# American National Standard for Information Interchange." I believe (but
# am not certain) that these are effectively identical to ECMA-6 and ECMA-35
# respectively.
#
#### VT100/ANSI/ECMA-48
#
# ANSI Standard (X3.64) Control Sequences for Video Terminals and Peripherals
# and ECMA-48 Control Functions for Coded Character Sets.
#
# Much of the content of this comment is adapted from a table prepared by
# Richard Shuford, based on a 1984 Byte article. Terminfo correspondences,
# discussion of some terminfo-related issues, and updates to capture ECMA-48
# have been added. Control functions described in ECMA-48 only are tagged
# with * after their names.
#
# The table is a complete list of the defined ANSI X3.64/ECMA-48 control
# sequences. In the main table, \E stands for an escape (\033) character,
# SPC for space. Pn stands for a single numeric parameter to be inserted
# in decimal ASCII. Ps stands for a list of such parameters separated by
# semicolons. Parameter meanings for most parameterized sequences are
# described in the notes.
#
# Sequence Sequence Parameter or
# Mnemonic Name Sequence Value Mode terminfo
# -----------------------------------------------------------------------------
# APC Applicatn Program Command \E _ - Delim -
# BEL Bell * ^G - - bel
# BPH Break Permitted Here * \E B - * -
# BS BackSpace * ^H - EF -
# CAN Cancel * ^X - - - (A)
# CBT Cursor Backward Tab \E [ Pn Z 1 eF cbt
# CCH Cancel Previous Character \E T - - -
# CHA Cursor Horizntal Absolute \E [ Pn G 1 eF hpa (B)
# CHT Cursor Horizontal Tab \E [ Pn I 1 eF tab (C)
# CMD Coding Method Delimiter * \E
# CNL Cursor Next Line \E [ Pn E 1 eF nel (D)
# CPL Cursor Preceding Line \E [ Pn F 1 eF -
# CPR Cursor Position Report \E [ Pn ; Pn R 1, 1 - - (E)
# CSI Control Sequence Intro \E [ - Intro -
# CTC Cursor Tabulation Control \E [ Ps W 0 eF - (F)
# CUB Cursor Backward \E [ Pn D 1 eF cub
# CUD Cursor Down \E [ Pn B 1 eF cud
# CUF Cursor Forward \E [ Pn C 1 eF cuf
# CUP Cursor Position \E [ Pn ; Pn H 1, 1 eF cup (G)
# CUU Cursor Up \E [ Pn A 1 eF cuu
# CVT Cursor Vertical Tab \E [ Pn Y - eF - (H)
# DA Device Attributes \E [ Pn c 0 - -
# DAQ Define Area Qualification \E [ Ps o 0 - -
# DCH Delete Character \E [ Pn P 1 eF dch
# DCS Device Control String \E P - Delim -
# DL Delete Line \E [ Pn M 1 eF dl
# DLE Data Link Escape * ^P - - -
# DMI Disable Manual Input \E \ - Fs -
# DSR Device Status Report \E [ Ps n 0 - - (I)
# DTA Dimension Text Area * \E [ Pn ; Pn SPC T - PC -
# EA Erase in Area \E [ Ps O 0 eF - (J)
# ECH Erase Character \E [ Pn X 1 eF ech
# ED Erase in Display \E [ Ps J 0 eF ed (J)
# EF Erase in Field \E [ Ps N 0 eF -
# EL Erase in Line \E [ Ps K 0 eF el (J)
# EM End of Medium * ^Y - - -
# EMI Enable Manual Input \E b Fs -
# ENQ Enquire ^E - - -
# EOT End Of Transmission ^D - * -
# EPA End of Protected Area \E W - - - (K)
# ESA End of Selected Area \E G - - -
# ESC Escape ^[ - - -
# ETB End Transmission Block ^W - - -
# ETX End of Text ^C - - -
# FF Form Feed ^L - - -
# FNK Function Key * \E [ Pn SPC W - - -
# GCC Graphic Char Combination* \E [ Pn ; Pn SPC B - - -
# FNT Font Selection \E [ Pn ; Pn SPC D 0, 0 FE -
# GSM Graphic Size Modify \E [ Pn ; Pn SPC B 100, 100 FE - (L)
# GSS Graphic Size Selection \E [ Pn SPC C none FE -
# HPA Horz Position Absolute \E [ Pn ` 1 FE - (B)
# HPB Char Position Backward \E [ j 1 FE -
# HPR Horz Position Relative \E [ Pn a 1 FE - (M)
# HT Horizontal Tab * ^I - FE - (N)
# HTJ Horz Tab w/Justification \E I - FE -
# HTS Horizontal Tab Set \E H - FE hts
# HVP Horz & Vertical Position \E [ Pn ; Pn f 1, 1 FE - (G)
# ICH Insert Character \E [ Pn @ 1 eF ich
# IDCS ID Device Control String \E [ SPC O - * -
# IGS ID Graphic Subrepertoire \E [ SPC M - * -
# IL Insert Line \E [ Pn L 1 eF il
# IND Index \E D - FE -
# INT Interrupt \E a - Fs -
# JFY Justify \E [ Ps SPC F 0 FE -
# IS1 Info Separator #1 * ^_ - * -
# IS2 Info Separator #1 * ^^ - * -
# IS3 Info Separator #1 * ^] - * -
# IS4 Info Separator #1 * ^\ - * -
# LF Line Feed ^J - - -
# LS1R Locking Shift Right 1 * \E ~ - - -
# LS2 Locking Shift 2 * \E n - - -
# LS2R Locking Shift Right 2 * \E } - - -
# LS3 Locking Shift 3 * \E o - - -
# LS3R Locking Shift Right 3 * \E | - - -
# MC Media Copy \E [ Ps i 0 - - (S)
# MW Message Waiting \E U - - -
# NAK Negative Acknowledge * ^U - * -
# NBH No Break Here * \E C - - -
# NEL Next Line \E E - FE nel (D)
# NP Next Page \E [ Pn U 1 eF -
# NUL Null * ^@ - - -
# OSC Operating System Command \E ] - Delim -
# PEC Pres. Expand/Contract * \E Pn SPC Z 0 - -
# PFS Page Format Selection * \E Pn SPC J 0 - -
# PLD Partial Line Down \E K - FE - (T)
# PLU Partial Line Up \E L - FE - (U)
# PM Privacy Message \E ^ - Delim -
# PP Preceding Page \E [ Pn V 1 eF -
# PPA Page Position Absolute * \E [ Pn SPC P 1 FE -
# PPB Page Position Backward * \E [ Pn SPC R 1 FE -
# PPR Page Position Forward * \E [ Pn SPC Q 1 FE -
# PTX Parallel Texts * \E [ \ - - -
# PU1 Private Use 1 \E Q - - -
# PU2 Private Use 2 \E R - - -
# QUAD Typographic Quadding \E [ Ps SPC H 0 FE -
# REP Repeat Char or Control \E [ Pn b 1 - rep
# RI Reverse Index \E M - FE - (V)
# RIS Reset to Initial State \E c - Fs -
# RM Reset Mode * \E [ Ps l - - - (W)
# SACS Set Add. Char. Sep. * \E [ Pn SPC / 0 - -
# SAPV Sel. Alt. Present. Var. * \E [ Ps SPC ] 0 - - (X)
# SCI Single-Char Introducer \E Z - - -
# SCO Sel. Char. Orientation * \E [ Pn ; Pn SPC k - - -
# SCS Set Char. Spacing * \E [ Pn SPC g - - -
# SD Scroll Down \E [ Pn T 1 eF rin
# SDS Start Directed String * \E [ Pn ] 1 - -
# SEE Select Editing Extent \E [ Ps Q 0 - - (Y)
# SEF Sheet Eject & Feed * \E [ Ps ; Ps SPC Y 0,0 - -
# SGR Select Graphic Rendition \E [ Ps m 0 FE sgr (O)
# SHS Select Char. Spacing * \E [ Ps SPC K 0 - -
# SI Shift In ^O - - - (P)
# SIMD Sel. Imp. Move Direct. * \E [ Ps ^ - - -
# SL Scroll Left \E [ Pn SPC @ 1 eF -
# SLH Set Line Home * \E [ Pn SPC U - - -
# SLL Set Line Limit * \E [ Pn SPC V - - -
# SLS Set Line Spacing * \E [ Pn SPC h - - -
# SM Select Mode \E [ Ps h none - - (W)
# SO Shift Out ^N - - - (Q)
# SOH Start Of Heading * ^A - - -
# SOS Start of String * \E X - - -
# SPA Start of Protected Area \E V - - - (Z)
# SPD Select Pres. Direction * \E [ Ps ; Ps SPC S 0,0 - -
# SPH Set Page Home * \E [ Ps SPC G - - -
# SPI Spacing Increment \E [ Pn ; Pn SPC G none FE -
# SPL Set Page Limit * \E [ Ps SPC j - - -
# SPQR Set Pr. Qual. & Rapid. * \E [ Ps SPC X 0 - -
# SR Scroll Right \E [ Pn SPC A 1 eF -
# SRCS Set Reduced Char. Sep. * \E [ Pn SPC f 0 - -
# SRS Start Reversed String * \E [ Ps [ 0 - -
# SSA Start of Selected Area \E F - - -
# SSU Select Size Unit * \E [ Pn SPC I 0 - -
# SSW Set Space Width * \E [ Pn SPC [ none - -
# SS2 Single Shift 2 (G2 set) \E N - Intro -
# SS3 Single Shift 3 (G3 set) \E O - Intro -
# ST String Terminator \E \ - Delim -
# STAB Selective Tabulation * \E [ Pn SPC ^ - - -
# STS Set Transmit State \E S - - -
# STX Start pf Text * ^B - - -
# SU Scroll Up \E [ Pn S 1 eF indn
# SUB Substitute * ^Z - - -
# SVS Select Line Spacing * \E [ Pn SPC \ 1 - -
# SYN Synchronous Idle * ^F - - -
# TAC Tabul. Aligned Centered * \E [ Pn SPC b - - -
# TALE Tabul. Al. Leading Edge * \E [ Pn SPC a - - -
# TATE Tabul. Al. Trailing Edge* \E [ Pn SPC ` - - -
# TBC Tab Clear \E [ Ps g 0 FE tbc
# TCC Tabul. Centered on Char * \E [ Pn SPC c - - -
# TSR Tabulation Stop Remove * \E [ Pn SPC d - FE -
# TSS Thin Space Specification \E [ Pn SC E none FE -
# VPA Vert. Position Absolute \E [ Pn d 1 FE vpa
# VPB Line Position Backward * \E [ Pn k 1 FE -
# VPR Vert. Position Relative \E [ Pn e 1 FE - (R)
# VT Vertical Tabulation * ^K - FE -
# VTS Vertical Tabulation Set \E J - FE -
#
# ---------------------------------------------------------------------------
#
# Notes:
#
# Some control characters are listed in the ECMA-48 standard without
# being assigned functions relevant to terminal control there (they
# referred to other standards such as ISO 1745 or ECMA-35). They are listed
# here anyway for completeness.
#
# (A) ECMA-48 calls this "CancelCharacter" but retains the CCH abbreviation.
#
# (B) There seems to be some confusion abroad between CHA and HPA. Most
# `ANSI' terminals accept the CHA sequence, not the HPA. but terminfo calls
# the capability (hpa). ECMA-48 calls this "Cursor Character Absolute" but
# preserved the CHA abbreviation.
#
# (C) CHT corresponds to terminfo (tab). Usually it has the value ^I.
# Occasionally (as on, for example, certain HP terminals) this has the HTJ
# value. ECMA-48 calls this "Cursor Forward Tabulation" but preserved the
# CHT abbreviation.
#
# (D) terminfo (nel) is usually \r\n rather than ANSI \EE.
#
# (E) ECMA-48 calls this "Active Position Report" but preserves the CPR
# abbreviation.
#
# (F) CTC parameter values:
# 0 = set char tab,
# 1 = set line tab,
# 2 = clear char tab,
# 3 = clear line tab,
# 4 = clear all char tabs on current line,
# 5 = clear all char tabs,
# 6 = clear all line tabs.
#
# (G) CUP and HVP are identical in effect. Some ANSI.SYS versions accept
# HVP, but always allow CUP as an alternate. ECMA-48 calls HVP "Character
# Position Absolute" but retains the HVP abbreviation.
#
# (H) ECMA calls this "Cursor Line Tabulation" but preserves the CVT
# abbreviation.
#
# (I) DSR parameter values:
# 0 = ready,
# 1 = busy,
# 2 = busy, will send DSR later,
# 3 = malfunction,
# 4 = malfunction, will send DSR later,
# 5 = request DSR,
# 6 = request CPR response.
#
# (J) ECMA calls ED "Erase In Page". EA/ED/EL parameters:
# 0 = clear to end,
# 1 = clear from beginning,
# 2 = clear.
#
# (K) ECMA calls this "End of Guarded Area" but preserves the EPA abbreviation.
#
# (L) The GSM parameters are vertical and horizontal parameters to scale by.
#
# (M) Some ANSI.SYS versions accept HPR, but more commonly `ANSI' terminals
# use CUF for this function and ignore HPR. ECMA-48 calls this "Character
# Position Relative" but retains the HPR abbreviation.
#
# (N) ECMA-48 calls this "Character Tabulation" but retains the HT
# abbreviation.
#
# (O) SGR parameter values:
# 0 = default mode (attributes off),
# 1 = bold,
# 2 = dim,
# 3 = italicized,
# 4 = underlined,
# 5 = slow blink,
# 6 = fast blink,
# 7 = reverse video,
# 8 = invisible,
# 9 = crossed-out (marked for deletion),
# 10 = primary font,
# 10 + n (n in 1..9) = nth alternative font,
# 20 = Fraktur,
# 21 = double underline,
# 22 = turn off 2,
# 23 = turn off 3,
# 24 = turn off 4,
# 25 = turn off 5,
# 26 = proportional spacing,
# 27 = turn off 7,
# 28 = turn off 8,
# 29 = turn off 9,
# 30 = black fg,
# 31 = red fg,
# 32 = green fg,
# 33 = yellow fg,
# 34 = blue fg,
# 35 = magenta fg,
# 36 = cyan fg,
# 37 = white fg,
# 38 = set fg color as in CCITT T.416,
# 39 = set default fg color,
# 40 = black bg
# 41 = red bg,
# 42 = green bg,
# 43 = yellow bg,
# 44 = blue bg,
# 45 = magenta bg,
# 46 = cyan bg,
# 47 = white bg,
# 48 = set bg color as in CCITT T.416,
# 49 = set default bg color,
# 50 = turn off 26,
# 51 = framed,
# 52 = encircled,
# 53 = overlined,
# 54 = turn off 51 & 52,
# 55 = not overlined,
# 56-59 = reserved,
# 61-65 = variable highlights for ideograms.
#
# (P) SI is also called LSO, Locking Shift Zero.
#
# (Q) SI is also called LS1, Locking Shift One.
#
# (R) Some ANSI.SYS versions accept VPR, but more commonly `ANSI' terminals
# use CUD for this function and ignore VPR. ECMA calls it `Line Position
# Absolute' but retains the VPA abbreviation.
#
# (S) MC parameters:
# 0 = start xfer to primary aux device,
# 1 = start xfer from primary aux device,
# 2 = start xfer to secondary aux device,
# 3 = start xfer from secondary aux device,
# 4 = stop relay to primary aux device,
# 5 = start relay to primary aux device,
# 6 = stop relay to secondary aux device,
# 7 = start relay to secondary aux device.
#
# (T) ECMA-48 calls this "Partial Line Forward" but retains the PLD
# abbreviation.
#
# (U) ECMA-48 calls this "Partial Line Backward" but retains the PLU
# abbreviation.
#
# (V) ECMA-48 calls this "Reverse Line Feed" but retains the RI abbreviation.
#
# (W) RM/SM modes are as follows:
# 1 = Guarded Area Transfer Mode (GATM),
# 2 = Keyboard Action Mode (KAM),
# 3 = Control Representation Mode (CRM),
# 4 = Insertion Replacement Mode (IRM),
# 5 = Status Report Transfer Mode (SRTM),
# 6 = Erasure Mode (ERM),
# 7 = Line Editing Mode (LEM),
# 8 = Bi-Directional Support Mode (BDSM),
# 9 = Device Component Select Mode (DCSM),
# 10 = Character Editing Mode (HEM),
# 11 = Positioning Unit Mode (PUM),
# 12 = Send/Receive Mode (SRM),
# 13 = Format Effector Action Mode (FEAM),
# 14 = Format Effector Transfer Mode (FETM),
# 15 = Multiple Area Transfer Mode (MATM),
# 16 = Transfer Termination Mode (TTM),
# 17 = Selected Area Transfer Mode (SATM),
# 18 = Tabulation Stop Mode (TSM),
# 19 = Editing Boundary Mode (EBM),
# 20 = Line Feed New Line Mode (LF/NL),
# 21 = Graphic Rendition Combination Mode (GRCM),
# 22 = Zero Default Mode (ZDM).
#
# The EBM and LF/NL modes have actually been removed from ECMA-48's 5th edition
# but are listed here for reference.
#
# (X) Select Alternate Presentation Variants is used only for non-Latin
# alphabets.
#
# (Y) "Select Editing Extent" (SEE) was ANSI "Select Edit Extent Mode" (SEM).
#
# (Z) ECMA-48 calls this "Start of Guarded Area" but retains the SPA
# abbreviation.
#
# ---------------------------------------------------------------------------
#
# Abbreviations:
#
# Intro an Introducer of some kind of defined sequence; the normal 7-bit
# X3.64 Control Sequence Introducer is the two characters "Escape ["
#
# Delim a Delimiter
#
# x/y identifies a character by position in the ASCII table (column/row)
#
# eF editor function (see explanation)
#
# FE format effector (see explanation)
#
# F is a Final character in
# an Escape sequence (F from 3/0 to 7/14 in the ASCII table)
# a control sequence (F from 4/0 to 7/14)
#
# Gs is a graphic character appearing in strings (Gs ranges from
# 2/0 to 7/14) in the ASCII table
#
# Ce is a control represented as a single bit combination in the C1 set
# of controls in an 8-bit character set
#
# C0 the familiar set of 7-bit ASCII control characters
#
# C1 roughly, the set of control chars available only in 8-bit systems.
# This is too complicated to explain fully here, so read Jim Fleming's
# article in the February 1983 BYTE, especially pages 214 through 224.
#
# Fe is a Final character of a 2-character Escape sequence that has an
# equivalent representation in an 8-bit environment as a Ce-type
# (Fe ranges from 4/0 to 5/15)
#
# Fs is a Final character of a 2-character Escape sequence that is
# standardized internationally with identical representation in 7-bit
# and 8-bit environments and is independent of the currently
# designated C0 and C1 control sets (Fs ranges from 6/0 to 7/14)
#
# I is an Intermediate character from 2/0 to 2/15 (inclusive) in the
# ASCII table
#
# P is a parameter character from 3/0 to 3/15 (inclusive) in the ASCII
# table
#
# Pn is a numeric parameter in a control sequence, a string of zero or
# more characters ranging from 3/0 to 3/9 in the ASCII table
#
# Ps is a variable number of selective parameters in a control sequence
# with each selective parameter separated from the other by the code
# 3/11 (which usually represents a semicolon); Ps ranges from
# 3/0 to 3/9 and includes 3/11
#
# * Not relevant to terminal control, listed for completeness only.
#
# Format Effectors versus Editor Functions
#
# A format effector specifies how following output is to be displayed.
# An editor function allows you to modify the display. Informally
# format effectors may be destructive; format effectors should not be.
#
# For instance, a format effector that moves the "active position" (the
# cursor or equivalent) one space to the left would be useful when you want to
# create an overstrike, a compound character made of two standard characters
# overlaid. Control-H, the Backspace character, is actually supposed to be a
# format effector, so you can do this. But many systems use it in a
# nonstandard fashion, as an editor function, deleting the character to the
# left of the cursor and moving the cursor left. When Control-H is assumed to
# be an editor function, you cannot predict whether its use will create an
# overstrike unless you also know whether the output device is in an "insert
# mode" or an "overwrite mode". When Control-H is used as a format effector,
# its effect can always be predicted. The familiar characters carriage
# return, linefeed, formfeed, etc., are defined as format effectors.
#
# NOTES ON THE DEC VT100 IMPLEMENTATION
#
# Control sequences implemented in the VT100 are as follows:
#
# CPR, CUB, CUD, CUF, CUP, CUU, DA, DSR, ED, EL, HTS, HVP, IND,
# LNM, NEL, RI, RIS, RM, SGR, SM, TBC
#
# plus several private DEC commands.
#
# Erasing parts of the display (EL and ED) in the VT100 is performed thus:
#
# Erase from cursor to end of line Esc [ 0 K or Esc [ K
# Erase from beginning of line to cursor Esc [ 1 K
# Erase line containing cursor Esc [ 2 K
# Erase from cursor to end of screen Esc [ 0 J or Esc [ J
# Erase from beginning of screen to cursor Esc [ 1 J
# Erase entire screen Esc [ 2 J
#
# Some brain-damaged terminal/emulators respond to Esc [ J as if it were
# Esc [ 2 J, but this is wrong; the default is 0.
#
# The VT100 responds to receiving the DA (Device Attributes) control
#
# Esc [ c (or Esc [ 0 c)
#
# by transmitting the sequence
#
# Esc [ ? l ; Ps c
#
# where Ps is a character that describes installed options.
#
# The VT100's cursor location can be read with the DSR (Device Status
# Report) control
#
# Esc [ 6 n
#
# The VT100 reports by transmitting the CPR sequence
#
# Esc [ Pl ; Pc R
#
# where Pl is the line number and Pc is the column number (in decimal).
#
# The specification for the DEC VT100 is document EK-VT100-UG-003.
#### ANSI.SYS
#
# Here is a description of the color and attribute controls supported in the
# the ANSI.SYS driver under MS-DOS. Most console drivers and ANSI
# terminal emulators for Intel boxes obey these. They are a proper subset
# of the ECMA-48 escapes.
#
# 0 all attributes off
# 1 foreground bright
# 4 underscore on
# 5 blink on/background bright (not reliable with brown)
# 7 reverse-video
# 8 set blank (non-display)
# 10 set primary font
# 11 set first alternate font (on PCs, display ROM characters 1-31)
# 12 set second alternate font (on PCs, display IBM high-half chars)
#
# Color attribute sets
# 3n set foreground color / 0=black, 1=red, 2=green, 3=brown,
# 4n set background color \ 4=blue, 5=magenta, 6=cyan, 7=white
# Bright black becomes gray. Bright brown becomes yellow,
# These coincide with the prescriptions of the ISO 6429/ECMA-48 standard.
#
# * If the 5 attribute is on and you set a background color (40-47) it is
# supposed to enable bright background.
#
# * Many VGA cards (such as the Paradise and compatibles) do the wrong thing
# when you try to set a "bright brown" (yellow) background with attribute
# 5 (you get a blinking yellow foreground instead). A few displays
# (including the System V console) support an attribute 6 that undoes this
# braindamage (this is required by iBCS2).
#
# * Some older versions of ANSI.SYS have a bug that causes them to require
# ESC [ Pn k as EL rather than the ANSI ESC [ Pn K. (This is not ECMA-48
# compatible.)
#### Intel Binary Compatibility Standard
#
# For comparison, here are the capabilities implied by the Intel Binary
# Compatibility Standard for UNIX systems (Intel order number 468366-001).
# These recommendations are optional. IBCS2 allows the leading escape to
# be either the 7-bit \E[ or 8-bit \0233 introducer, in accordance with
# the ANSI X.364/ISO 6429/ECMA-48 standard. Here are the iBCS2 capabilities
# (as described in figure 9-3 of the standard). Those expressed in the ibcs2
# terminfo entry are followed with the corresponding capability in parens:
#
# CSI <n>k disable (n=0) or enable (n=1) keyclick
# CSI 2h lock keyboard
# CSI 2i send screen as input
# CSI 2l unlock keyboard
# CSI 6m enable background color intensity
# CSI <0-2>c reserved
# CSI <0-59>m select graphic rendition
# CSI <n>;<m>H (cup) cursor to line n and column m
# CSI <n>;<m>f cursor to line n and column m
# CSI <n>@ (ich) insert characters
# CSI <n>A (cuu) cursor up n lines
# CSI <n>B (cud) cursor down n lines
# CSI <n>C (cuu) cursor right n characters
# CSI <n>D (cud) cursor left n characters
# CSI <n>E cursor down n lines and in first column
# CSI <n>F cursor up n lines and in first column
# CSI <n>G (hpa) position cursor at column n-1
# CSI <n>J (ed) erase in display
# CSI <n>K (el) erase in line
# CSI <n>L (il) insert line(s)
# CSI <n>P (dch) delete characters
# CSI <n>S (indn) scroll up n lines
# CSI <n>T (rin) scroll down n lines
# CSI <n>X (ech) erase characters
# CSI <n>Z (cbt) back up n tab stops
# CSI <n>` cursor to column n on line
# CSI <n>a (cuu) cursor right n characters
# CSI <n>d (vpa) cursor to line n
# CSI <n>e cursor down n lines and in first column
# CSI <n>g (cbt) clear all tabs
# CSI <n>z make virtual terminal n active
# CSI ?7h (smam) turn automargin on
# CSI ?7l (rmam) turn automargin off
# CSI s save cursor position
# CSI u restore cursor position to saved value
# CSI =<c>A set overscan color
# CSI =<c>F set normal foreground color
# CSI =<c>G set normal background color
# CSI =<c>H set reverse foreground color
# CSI =<c>I set reverse foreground color
# CSI =<c>J set graphic foreground color
# CSI =<c>K set graphic foreground color
# CSI =<n>g (dispc) display n from alternate graphics character set
# CSI =<p>;<d>B set bell parameters
# CSI =<s>;<e>C set cursor parameters
# CSI =<x>D enable/disable intensity of background color
# CSI =<x>E set/clear blink vs. bold background
# CSI 7 (sc) (sc) save cursor position
# CSI 8 (rc) (rc) restore cursor position to saved value
# CSI H (hts) (hts) set tab stop
# CSI Q<n><string> define function key string
# (string must begin and end with delimiter char)
# CSI c (clear) clear screen
#
# The lack of any specification for attributes in SGR (among other things)
# makes this a wretchedly weak standard. The table above is literally
# everything iBSC2 has to say about terminal escape sequences; there is
# no further discussion of their meaning or how to set the parameters
# in these sequences at all.
#
######## NONSTANDARD CAPABILITY TRANSLATIONS USED IN THIS FILE
#
# The historical termcap file entries were written primarily in 4.4BSD termcap.
# The 4.4BSD termcap set was substantially larger than the original 4.1BSD set,
# with the extension names chosen for compatibility with the termcap names
# assigned in System V terminfo. There are some variant extension sets out
# there. We try to describe them here.
#
#### XENIX extensions:
#
# The XENIX extensions include a set of function-key capabilities as follows:
#
# code XENIX variable name terminfo name name clashes?
# ---- ------------------- ------------- -----------------------
# CL key_char_left
# CR key_char_right
# CW key_change_window create_window
# EN key_end kend
# HM key_home khome
# HP ??
# LD key_delete_line kdl1
# LF key_linefeed label_off
# NU key_next_unlocked_cell
# PD key_page_down knp
# PL ??
# PN start_print mc5
# PR ??
# PS stop_print mc4
# PU key_page_up kpp pulse
# RC key_recalc remove_clock
# RF key_toggle_ref req_for_input
# RT key_return kent
# UP key_up_arrow kcuu1 parm_up_cursor
# WL key_word_left
# WR key_word_right
#
# The XENIX extensions also include the following character-set and highlight
# capabilities:
#
# XENIX terminfo function
# ----- -------- ------------------------------
# GS smacs start alternate character set
# GE rmacs end alternate character set
# GG :as:/:ae: glitch (analogous to :sg:/:ug:)
# bo blink begin blink (not used in /etc/termcap)
# be end blink (not used in /etc/termcap)
# bb blink glitch (not used in /etc/termcap)
# it dim begin dim (not used in /etc/termcap)
# ie end dim (not used in /etc/termcap)
# ig dim glitch (not used in /etc/termcap)
#
# Finally, XENIX also used the following forms-drawing capabilities:
#
# single double type ASCII approximation
# ------ ------ ------------- -------------------
# GV Gv vertical line |
# GH Gv horizontal line - _
# G1 G5 top right corner _ |
# G2 G6 top left corner |
# G3 G7 bottom left corner |_
# G4 G8 bottom right corner _|
# GD Gd down-tick character T
# GL Gl left-tick character -|
# GR Gr right-tick character |-
# GC Gc middle intersection -|-
# GU Gu up-tick character _|_
#
# These were invented to take advantage of the IBM PC ROM character set. One
# can compose an acsc string from the single-width characters as follows
# "j{G4}k{G1}l{G2}m{G3}q{GH}x{GV}t{GR}u{GL}v{GU}w{GD}n{GC}"
# When translating a termcap file, ncurses tic will do this automatically.
# The double forms characters don't fit the SVr4 terminfo model.
#
#### AT&T Extensions:
#
# The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of
# nonstandard capabilities. Its signature is the KM capability, used to name
# some sort of keymap file. EE, BO, CI, CV, XS, DS, FL and FE are in this
# set. Comments in the original, and a little cross-checking with other AT&T
# documentation, seem to establish that BO=:mr: (start reverse video), DS=:mh:
# (start dim), XS=:mk: (secure/invisible mode), EE=:me: (end highlights),
# FL=:LO: (enable soft labels), FE=:LF: (disable soft labels), CI=:vi: (make
# cursor invisible), and CV=:ve: (make cursor normal).
#
#### HP Extensions
#
# The HP library (as of mid-1995, their term.h file version 70.1) appears to
# have the System V capabilities up to SVr1 level. After that, it supports
# two nonstandard caps meml and memu corresponding to the old termcap :ml:,
# :mu: capabilities. After that, it supports caps plab_norm, label_on,
# label_off, and key_f11..key_f63 capabilities like SVr4's. This makes the
# HP binary format incompatible with SVr4's.
#
#### IBM Extensions
#
# There is a set of nonstandard terminfos used by IBM's AIX operating system.
# The AIX terminfo library diverged from SVr1 terminfo, and replaces all
# capabilities following prtr_non with the following special capabilities:
# box[12], batt[12], colb[0123456789], colf[0123456789], f[01234567], kbtab,
# kdo, kcmd, kcpn, kend, khlp, knl, knpn, kppn, kppn, kquit, ksel, kscl, kscr,
# ktab, kmpf[123456789], apstr, ksf1..ksf10, kf11...kf63, kact, topl, btml,
# rvert, lvert. Some of these are identical to XPG4/SVr4 equivalents:
# kcmd, kend, khlp, and kf11...kf63. Two others (kbtab and ksel) can be
# renamed (to kcbt and kslt). The places in the box[12] capabilities
# correspond to acsc chars, here is the mapping:
#
# box1[0] = ACS_ULCORNER
# box1[1] = ACS_HLINE
# box1[2] = ACS_URCORNER
# box1[3] = ACS_VLINE
# box1[4] = ACS_LRCORNER
# box1[5] = ACS_LLCORNER
# box1[6] = ACS_TTEE
# box1[7] = ACS_RTEE
# box1[8] = ACS_BTEE
# box1[9] = ACS_LTEE
# box1[10] = ACS_PLUS
#
# The box2 characters are the double-line versions of these forms graphics.
# The AIX binary terminfo format is incompatible with SVr4's.
#
#### Iris console extensions:
#
# HS is half-intensity start; HE is half-intensity end
# CT is color terminal type (for Curses & rogue)
# CP is color change escape sequence
# CZ are color names (for Curses & rogue)
#
# The ncurses tic utility recognizes HS as an alias for mh <dim>.
#
#### TC Extensions:
#
# There is a set of extended termcaps associated with something
# called the "Terminal Control" or TC package created by MainStream Systems,
# Winfield Kansas. This one also uses GS/GE for as/ae, and also uses
# CF for civis and CO for cvvis. Finally, they define a boolean :ct:
# that flags color terminals.
#
######## NCURSES USER-DEFINABLE CAPABILITIES
#
# Extensions added after ncurses 5.0 generally use the "-x" option of tic and
# infocmp to manipulate user-definable capabilities. Those that are intended
# for use in either terminfo or termcap use 2-character names. Extended
# function keys do not use 2-character names, and are available only with
# terminfo.
#
# Beginning in 2010, NetBSD curses has also provided a "-x" option for
# tic/infocmp, and uses this database (with a few changes). There are a few
# differences, noted in
# https://invisible-island.net/ncurses/ncurses-netbsd.html
#
# ncurses makes explicit checks for a few user-definable capabilities: AX,
# RGB, U8, XM, which are documented in the user_caps(5) manual page.
#
#### SCREEN Extensions:
#
# The screen program uses the termcap interface. It recognizes a few useful
# nonstandard capabilities. Those are used in this file.
#
# AX (bool) Does understand ANSI set default fg/bg color (\E[39m /
# \E[49m).
# G0 (bool) Terminal can deal with ISO 2022 font selection sequences.
# E0 (str) Switch charset 'G0' back to standard charset.
# S0 (str) Switch charset 'G0' to the specified charset.
# XT (bool) Terminal understands special xterm sequences (OSC, mouse
# tracking).
#
# AX is relatively straightforward; it is interpreted by ncurses to say that
# SGR 39/49 reset the terminal's foreground and background colors to their
# "default".
#
# XT is harder, since screen's manpage does not give more details. For that,
# we must read screen's source-code. For example, when XT is set, screen
# assumes
#
# a) OSC 1 sets the title string, e.g., for the icon. Recent versions of
# screen may also set the terminal's name, which is (for xterm) distinct
# from the icon name.
# b) OSC 20 sets the background pixmap. This is an rxvt feature.
# c) OSC 39 and OSC 49 set the default foreground/background colors. Again
# this is an rxvt feature.
# d) certain mode settings enable the mouse: 9, 1000, 1001, 1002, 1003.
# These are from xterm, although xterm accepts mouse codes that may not be
# recognized by screen, e.g., 1005, 1006.
# e) colors beyond 0..7 are implemented by xterm's aixterm-like 16-color
# sequence. However, because screen uses only termcap, the values returned
# by Af/Ab are not usable because they rely on expressions that termcap
# does not support. Therefore, screen uses a hardcoded string to work
# around the limitation. In a few cases, screen also uses tparm, which
# is a terminfo function rather than termcap.
# f) all entries named "*xterm*" or "*rxvt*" have the bce flag set.
# g) screen also uses the feature to decide whether to pay attention to other
# xterm-related features which are unrelated to the description in the
# manual page.
#
# Since XT is useful only when the outer terminal matches screen's assumptions,
# it is appropriate to use it in the derived terminal descriptions such as
# "screen.xterm", but not in the generic "screen", "screen-bce" entries.
#
# The other ISO-2022 features are rarely used, but provided here to make
# screen's termcap features available.
#
#### XTERM Extensions:
#
# Most of the xterm extensions are for function-keys. Since xterm patch #94 (in
# 1999), xterm has supported shift/control/alt/meta modifiers which produce
# additional function-key strings. Some other developers copied the feature,
# though they did not follow xterm's lead in xterm patch #167 (in 2002), to make
# these key definitions less ambiguous.
#
# A few terminals provide similar functionality (sending distinct keys when
# a modifier is used), including rxvt.
#
# These are the extended keys defined in this file:
#
# kDC3 kDC4 kDC5 kDC6 kDC7 kDN kDN3 kDN4 kDN5 kDN6 kDN7 kEND3 kEND4 kEND5 kEND6
# kEND7 kHOM3 kHOM4 kHOM5 kHOM6 kHOM7 kIC3 kIC4 kIC5 kIC6 kIC7 kLFT3 kLFT4
# kLFT5 kLFT6 kLFT7 kNXT3 kNXT4 kNXT5 kNXT6 kNXT7 kPRV3 kPRV4 kPRV5 kPRV6 kPRV7
# kRIT3 kRIT4 kRIT5 kRIT6 kRIT7 kUP kUP3 kUP4 kUP5 kUP6 kUP7 ka2 kb1 kb3 kc2
#
# Here are the other xterm-related extensions which are used in this file:
#
# Cr is a string capability which resets the cursor color
# Cs is a string capability which sets the cursor color to a given value.
# The single string parameter is the color name/number, according to the
# implementation.
# Ms modifies the selection/clipboard. Its parameters are
# p1 = the storage unit (clipboard, selection or cut buffer)
# p2 = the base64-encoded clipboard content.
# Se resets the cursor style to the terminal power-on default.
# Ss is a string capability with one numeric parameter. It is used to set the
# cursor style as described by the DECSCUSR function to a block or
# underline.
# TS is a string capability which acts like "tsl", but uses no parameter and
# goes to the first column of the "status line".
# XM is a string capability which overrides ncurses's built-in string which
# enables/disables xterm mouse mode.
# xm shows the format of the mouse responses. Parameters:
# p1 = y-ordinate
# p2 = x-ordinate
# p3 = button
# p4 = state, e.g., pressed or released
# p5 = y-ordinate starting region
# p6 = x-ordinate starting region
# p7 = y-ordinate ending region
# p8 = x-ordinate ending region
# Other extensions, used in xm:
# %u = UTF-8
#
#### Miscellaneous extensions:
#
# gsbom/grbom are used to enable/disable real bold (not intensity bright) mode.
# This was implemented for the Hurd.
# rmxx/smxx describes the ECMA-48 strikeout/crossed-out attributes, as an
# experimental feature of tmux.
+# CO gives the number of indexed ("ANSI") colors which overlay an RGB color
+# space.
# E3 clears the terminal's scrollback buffer. This was implemented in the
# Linux 3.0 kernel as a security feature. It matches a feature which was
# added in xterm patch #107.
# U8 is a numeric capability which denotes a terminal emulator which does not
# support VT100 SI/SO when processing UTF-8 encoding. Set this to a nonzero
# value to enable it.
# Smulx modifies the appearance of underlines in VTE, December 2017.
#
######## CHANGE HISTORY
#
# The last /etc/termcap version maintained by John Kunze was 8.3, dated 8/5/94.
# Releases 9 and 10 (up until the release of ncurses 4.2 in 1998) were
# maintained by Eric S. Raymond as part of the ncurses project.
#
# This file contains all the capability information present in John Kunze's
# last version of the termcap master file, except as noted in the change
# comments at end of file. Some information about very ancient obsolete
# capabilities has been moved to comments. Some all-numeric names of older
# terminals have been retired.
#
# I changed :MT: to :km: (the 4.4BSD name) everywhere. I commented out some
# capabilities (EP, dF, dT, dV, kn, ma, ml, mu, xr, xx) that are no longer
# used by BSD curses.
#
# The 9.1.0 version of this file was translated from my lightly-edited copy of
# 8.3, then mechanically checked against 8.3 using Emacs Lisp code written for
# the purpose. Unless the ncurses tic implementation and the Lisp code were
# making perfectly synchronized mistakes which I then failed to catch by
# eyeball, the translation was correct and perfectly information-preserving.
#
# Major version number bumps correspond to major version changes in ncurses.
#
# Here is a log of the changes since then:
#
# 9.1.0 (Wed Feb 1 04:50:32 EST 1995):
# * First terminfo master translated from 8.3.
# 9.2.0 (Wed Feb 1 12:21:45 EST 1995):
# * Replaced Wyse entries with updated entries supplied by vendor.
#
# 9.3.0 (Mon Feb 6 19:14:40 EST 1995):
# * Added contact & status info from G. Clark Brown <clark@sssi.com>.
# 9.3.1 (Tue Feb 7 12:00:24 EST 1995):
# * Better XENIX keycap translation. Describe TC termcaps.
# * Contact and history info supplied by Qume.
# 9.3.2 (Sat Feb 11 23:40:02 EST 1995):
# * Raided the Shuford FTP site for recent termcaps/terminfos.
# * Added information on X3.64 and VT100 standard escape sequences.
# 9.3.3 (Mon Feb 13 12:26:15 EST 1995):
# * Added a correct X11R6 xterm entry.
# * Fixed terminfo translations of padding.
# 9.3.4 (Wed Feb 22 19:27:34 EST 1995):
# * Added correct acsc/smacs/rmacs strings for vt100 and xterm.
# * Added u6/u7/u8/u9 capabilities.
# * Added PCVT entry.
# 9.3.5 (Thu Feb 23 09:37:12 EST 1995):
# * Emacs uses :so:, not :mr:, for its mode line. Fix linux entry
# to use reverse-video standout so Emacs will look right.
# * Added el1 capability to ansi.
# * Added smacs/rmacs to ansi.sys.
#
# 9.4.0 (Sat Feb 25 16:43:25 EST 1995):
# * New mt70 entry.
# * Added COPYRIGHTS AND OTHER DELUSIONS.
# * Added AT&T 23xx & 500/513, vt220 and vt420, opus3n1+, netronics
# smartvid & smarterm, ampex 175 & 219 & 232,
# env230, falco ts100, fluke, intertube, superbrain, ncr7901, vic20,
# ozzie, trs200, tr600, Tandy & Texas Instruments VDTs, intext2,
# screwpoint, fviewpoint, Contel Business Systems, Datamedia Colorscan,
# adm36, mime314, ergo4000, ca22851. Replaced att7300, esprit, dd5500.
# * Replaced the Perkin-Elmer entries with vendor's official ones.
# * Restored the old minimal-ansi entry, luna needs it.
# * Fixed some incorrect ip and proportional-padding translations.
# 9.4.1 (Mon Feb 27 14:18:33 EST 1995):
# * Fix linux & AT386 sgr strings to do A_ALTCHARSET turnoff correctly.
# * Make the xterm entry 65 lines again; create xterm25 and xterm24
# to force a particular height.
# * Added beehive4 and reorganized other Harris entries.
# 9.4.2 (Thu Mar 9 01:45:44 EST 1995):
# * Merged in DEC's official entries for its terminals. The only old
# entry I kept was Doug Gwyn's alternate vt100 (as vt100-avo).
# * Replaced the translated BBN BitGraph entries with purpose-built
# ones from AT&T's SVr3.
# * Replaced the AT&T entries with AT&T's official terminfos.
# * Added teleray 16, vc415, cops10.
# * Merged in many individual capabilities from SCO terminfo files.
# 9.4.3 (Mon Mar 13 02:37:53 EST 1995):
# * Typo fixes.
# * Change linux entry so A_PROTECT enables IBM-PC ROM characters.
# 9.4.4 (Mon Mar 27 12:32:35 EST 1995):
# * Added tty35, Ann Arbor Guru series. vi300 and 550, cg7900, tvi803,
# pt210, ibm3164, IBM System 1, ctrm, Tymshare scanset, dt200, adm21,
# simterm, citoh and variants.
# * Replaced sol entry with sol1 and sol2.
# * Replaced Qume QVT and Freedom-series entries with purpose-built
# terminfo entries.
# * Enhanced vt220, tvi910, tvi924, hpterm, hp2645, adm42, tek
# and dg200 entries using caps from from SCO.
# * Added the usual set of function-key mappings to ANSI entry.
# * Corrected xterm's function-key capabilities.
# 9.4.5 (Tue Mar 28 14:27:49 EST 1995):
# * Fix in xterm entry, cub and cud are not reliable under X11R6.
# 9.4.6 (Thu Mar 30 14:52:15 EST 1995):
# * Fix in xterm entry, get the arrow keys right.
# * Change some \0 escapes to \200.
# 9.4.7 (Tue Apr 4 11:27:11 EDT 1995)
# * Added apple (Videx card), adm1a, oadm31.
# * Fixed malformed ampex csr.
# * Fixed act4, cyb110; they had old-style prefix padding left in.
# * Changed mandatory to advisory padding in many entries.
# * Replaced HP entries up to hpsub with purpose-built ones.
# * Blank rmir/smir/rmdc/smdc capabilities removed.
# * Small fixes merged in from SCO entries for lpr, fos, tvi910+, tvi924.
# 9.4.8 (Fri Apr 7 09:36:34 EDT 1995):
# * Replaced the Ann Arbor entries with SCO's, the init strings are
# more efficient (but the entries otherwise identical).
# * Added dg211 from Shuford archive.
# * Added synertek, apple-soroc, ibmpc, pc-venix, pc-coherent, xtalk,
# adm42-nl, pc52, gs6300, xerox820, uts30.
# * Pull SCO's padding into vi200 entry.
# * Improved capabilities for tvi4107 and other Televideo and Viewpoint
# entries merged in from SCO's descriptions.
# * Fixed old-style prefix padding on zen50, h1500.
# * Moved old superbee entry to superbee-xsb, pulled in new superbee
# entry from SCO's description.
# * Reorganized the special entries.
# * Added lm#0 to cbunix and virtual entries.
#
# 9.5.0 (Mon Apr 10 11:30:00 EDT 1995):
# * Restored cdc456tst.
# * Fixed sb1 entry, SCO erroneously left out the xsb glitch.
# * Added megatek, beacon, microkit.
# * Freeze for ncurses-1.9 release.
# 9.5.1 (Fri Apr 21 12:46:42 EDT 1995):
# * Added historical data for TAB.
# * Comment fixes from David MacKenzie.
# * Added the new BSDI pc3 entry.
# 9.5.2 (Tue Apr 25 17:27:52 EDT 1995)
# * A change in the tic -C logic now ensures that all entries in
# the termcap translation will fit in < 1024 bytes.
# * Added `bobcat' and `gator' HP consoles and the Nu machine entries
# from GNU termcap file. This merges in all their local information.
# 9.5.3 (Tue Apr 25 22:28:13 EDT 1995)
# * Changed tic -C logic to dump all capabilities used by GNU termcap.
# * Added warnings about entries with long translations (restoring
# all the GNU termcaps pushes a few over the edge).
# 9.5.4 (Wed Apr 26 15:35:09 EDT 1995)
# * Yet another tic change, and a couple of entry tweaks, to reduce the
# number of long (> 1024) termcap translations back to 0.
#
# 9.6.0 (Mon May 1 10:35:54 EDT 1995)
# * Added kf13-kf20 to Linux entry.
# * Regularize Prime terminal names.
# * Historical data on Synertek.
# * Freeze for ncurses-1.9.1.
# 9.6.1 (Sat May 6 02:00:52 EDT 1995):
# * Added true xterm-color entry, renamed djm's pseudo-color entry.
# * Eliminate whitespace in short name fields, this tanks some scripts.
# * Name field changes to shorten some long entries.
# * Termcap translation now automatically generates empty rmir/smir
# when ich1/ich is present (copes with an ancient vi bug).
# * Added `screen' entries from FSF's screen-3.6.2.
# * Added linux-nic and xterm-nic entries.
# 9.6.2 (Sat May 6 17:00:55 EDT 1995):
# * Change linux entry to use smacs=\E[11m and have an explicit acsc,
# eliminating some special-case code in ncurses.
#
# 9.7.0 (Tue May 9 18:03:12 EDT 1995):
# * Added vt320-k3, rsvidtx from the Emacs termcap.dat file. I think
# that captures everything unique from it.
# * Added reorder script generator.
# * Freeze for ncurses 1.9.2 release.
# 9.7.1 (Thu Jun 29 09:35:22 EDT 1995):
# * Added Sean Farley's kspd, flash, rs1 capabilities for linux.
# * Added Olaf Siebert's corrections for adm12.
# * ansi-pc-color now includes the colors and pairs caps, so that
# entries which use it will inherit them automatically.
# * The linux entry can now recognize the center (keypad 5) key.
# * Removed some junk that found its way into Linux acsc.
#
# 9.8.0 (Fri Jul 7 04:46:57 EDT 1995):
# * Add 50% cut mark as a desperate hack to reduce tic's core usage.
# * xterm doesn't try to use application keypad mode any more.
# * Freeze for ncurses-1.9.3 release.
# 9.8.1 (Thu Jul 19 17:02:12 EDT 1995):
# * Added corrected sun entry from vendor.
# * Added csr capability to linux entry.
# * Peter Wemm says the at386 hpa should be \E[%i%p1%dG, not \E[%p1%dG.
# * Added vt102-nsgr to cope with stupid IBM PC `VT100' emulators.
# * Some commented-out caps in long entries come back in, my code
# for computing string-table lengths had a bug in it.
# * pcansi series modified to fit comm-program reality better.
# 9.8.2 (Sat Sep 9 23:35:00 EDT 1995):
# * BSD/OS actually ships the ibmpc3 bold entry as its console.
# * Correct some bad aliases in the pcansi series
# * Added entry for QNX console.
# * Clean up duplicate long names for use with 4.4 library.
# * Change vt100 standout to be normal reverse vide, not bright reverse;
# this makes the Emacs status line look better.
# 9.8.3 (Sun Sep 10 13:07:34 EDT 1995):
# * Added Adam Thompson's VT320 entries, also his dtx-sas and z340.
# * Minor surgery, mostly on name strings, to shorten termcap version.
#
# 9.9.0 (Sat Sep 16 23:03:48 EDT 1995):
# * Added dec-vt100 for use with the EWAN emulator.
# * Added kmous to xterm for use with xterm's mouse-tracking facility.
# * Freeze for 1.9.5 alpha release.
# 9.9.1 (Wed Sep 20 13:46:09 EDT 1995):
# * Changed xterm lines to 24, the X11R6 default.
# 9.9.2 (Sat Sep 23 21:29:21 EDT 1995):
# * Added 7 newly discovered, undocumented acsc characters to linux
# entry (the pryz{|} characters).
# * ncurses no longer steals A_PROTECT. Simplify linux sgr accordingly.
# * Correct two typos in the xterm entries introduced in 9.9.1.
# * I finally figured out how to translate ko capabilities. Done.
# * Added tvi921 entries from Tim Theisen.
# * Cleanup: dgd211 -> dg211, adm42-nl -> adm42-nsl.
# * Removed mystery tec entry, it was neither interesting nor useful.
# * shortened altos3, qvt203, tvi910+, tvi92D, tvi921-g, tvi955, vi200-f,
# vi300-ss, att505-24, contel301, dm3045, f200vi, pe7000c, vc303a,
# trs200, wind26, wind40, wind50, cdc456tst, dku7003, f110, dg211,
# by making them relative to use capabilities
# * Added cuf1=^L to tvi925 from deleted variant tvi925a.
# * fixed cup in adm22 entry and parametrized strings in vt320-k3.
# * added it#8 to entries that used to have :pt: -- tvi912, vi200,
# ampex80,
# * Translate all home=\E[;H capabilities to home=\E[H, they're
# equivalent.
# * Translate \E[0m -> \E[m in [rs]mso, [rs]mul, and init strings of
# vt100 and ANSI-like terminals.
# 9.9.3 (Tue Sep 26 20:11:15 EDT 1995):
# * Added it#8 and ht=\t to *all* entries with :pt:; the ncurses tic
# does this now, too.
# * fviewpoint is gone, it duplicated screwpoint.
# * Added hp2627, graphos, graphos-30, hpex, ibmega, ibm8514, ibm8514-c,
# ibmvga, ibmvga-c, minix, mm340, mt4520-rv, screen2, screen3,
# versaterm, vi500, vsc, vt131, vt340, vt400 entries from UW.
# The UW vi50 replaces the old one, which becomes vi50adm,
# * No more embedded commas in name fields.
#
# 9.10.0 (Wed Oct 4 15:39:37 EDT 1995):
# * XENIX forms characters in fos, trs16, scoansi become acsc strings,
# * Introduced klone+* entries for describing Intel-console behavior.
# * Linux kbs is default-mapped to delete for some brain-dead reason.
# * -nsl -> -ns. The -pp syntax is obsolete.
# * Eliminate [A-Z]* primaries in accordance with SVr4 terminfo docs.
# * Make xterm entry do application-keypad mode again. I got complaints
# that it was messing up someone's 3270 emulator.
# * Added some longname fields in order to avoid warning messages from
# older tic implementations.
# * According to ctlseqs.ms, xterm has a full vt100 graphics set. Use
# it! (This gives us pi, greater than, less than, and a few more.)
# * Freeze for ncurses-1.9.6 release.
# 9.10.1 (Sat Oct 21 22:18:09 EDT 1995):
# * Add xon to a number of console entries, they're memory-mapped and
# don't need padding.
# * Correct the use dependencies in the ansi series.
# * Hand-translate more XENIX capabilities.
# * Added hpterm entry for HP's X terminal emulator.
# * Added aixterm entries.
# * Shortened four names so everything fits in 14 chars.
#
# 9.11.0 (Thu Nov 2 17:29:35 EST 1995):
# * Added ibcs2 entry and info on iBCS2 standard.
# * Corrected hpa/vpa in linux entry. They still fail the worm test.
# * We can handle the HP meml/memu capability now.
# * Added smacs to klone entries, just as documentation.
# * Corrected ansi.sys and cit-500 entries.
# * Added z39, vt320-k311, v220c, and avatar entries.
# * Make pcansi use the ansi.sys invis capability.
# * Added DIP switch descriptions for vt100, adm31, tvi910, tvi920c,
# tvi925, tvi950, dt80, ncr7900i, h19.
# * X3.64 has been withdrawn, change some references.
# * Removed function keys from ansi-m entry.
# * Corrected ansi.sys entry.
# * Freeze for ncurses-1.9.7 release.
# 9.11.1 (Tue Nov 6 18:18:38 EST 1995):
# * Added rmam/smam capabilities to many entries based on init strings.
# * Added correct hpa/vpa to linux.
# * Reduced several entries relative to vt52.
# 9.11.2 (Tue Nov 7 00:21:06 EST 1995):
# * Exiled some utterly unidentifiable custom and homebrew types to the
# UFO file; also, obsolete small-screen hardware; also, entries which
# look flat-out incorrect, garbled, or redundant. These include the
# following entries: carlock, cdc456tst, microkit, qdss, ramtek, tec,
# tec400, tec500, ubell, wind, wind16, wind40, wind50, plasma, agile,
# apple, bch, daleblit, nucterm, ttywilliams, nuterminal, nu24, bnu,
# fnu, nunix-30, nunix-61, exidy, ex3000, sexidy, pc52, sanyo55,
# yterm10, yterm11, yterm10nat, aed, aed-ucb, compucolor, compucolor2,
# vic20, dg1, act5s, netx, smartvid, smarterm, sol, sol2, dt200,
# trs80, trs100, trs200, trs600, xitex, rsvidtx, vid, att2300-x40,
# att2350-x40, att4410-nfk, att5410-ns, otty5410, att5425-nl-w,
# tty5425-fk, tty5425-w-fk, cita, c108-na, c108-rv-na, c100-rv-na,
# c108-na-acs, c108-rv-na-acs, ims950-ns, infotonKAS, ncr7900i-na,
# regent60na, scanset-n, tvi921-g, tvi925n, tvi925vbn, tvi925vb,
# vc404-na, vc404-s-na, vt420nam, vt420f-nam, vt420pc-nam, vt510nam,
# vt510pc-nam, vt520nam, vt525nam, xterm25, xterm50, xterm65, xterms.
# * Corrected pcvt25h as suggested by Brian C. Grayson
# <bgrayson@pine.ece.utexas.edu>.
# 9.11.3 (Thu Nov 9 12:14:40 EST 1995):
# * Added kspd=\E[P, kcbt=\E[Z, to linux entry, changed kbs back to ^H.
# * Added kent=\EOM to xterm entry.
#
# 9.11.4 (Fri Nov 10 08:31:35 EST 1995):
# * Corrected gigi entry.
# * Restored cuf/cud1 to xterm, their apparent bugginess was due to
# bad hpa/vpa capabilities.
# * Corrected flash strings to have a uniform delay of .2 sec. No
# more speed-dependent NUL-padding!
# * terminfo capabilities in comments bracketed with <>.
# 9.11.5 (Fri Nov 10 15:35:02 EST 1995):
# * Replaced pcvt with the 3.31 pcvt entries.
# * Freeze for 1.9.7a.
# 9.11.6 (Mon Nov 13 10:20:24 EST 1995):
# * Added emu entry from the X11R6 contrib tape sources.
#
# 9.12.0 (Wed Nov 29 04:22:25 EST 1995):
# * Improved iris-ansi and sun entries.
# * More flash string improvements.
# * Corrected wy160 & wy160 as suggested by Robert Dunn
# * Added dim to at386.
# * Reconciled pc3 and ibmpc3 with the BSDI termcap file. Keith says
# he's ready to start using the termcap generated from this one.
# * Added vt102-w, vt220-w, xterm-bold, wyse-vp, wy75ap, att4424m,
# ln03, lno3-w, h19-g, z29a*, qdss. Made vt200 an alias of vt220.
# * Improved hpterm, apollo consoles, fos, qvt101, tvi924. tvi925,
# att610, att620, att630,
# * Changed hazeltine name prefix from h to hz.
# * Sent t500 to the UFI file.
# * I think we've sucked all the juice out of BSDI's termcap file now.
# * Freeze for ncurses 1.9.8 release
# 9.12.1 (Thu Nov 30 03:14:06 EST 1995)
# * Unfreeze, linux kbs needed to be fixed.
# * Tim Theisen pinned down a bug in the DMD firmware.
# 9.12.2 (Thu Nov 30 19:08:55 EST 1995):
# * Fixes to ansi and klone capabilities (thank you, Aaron Ucko).
# (The broken ones had been shadowed by sgr.)
# 9.12.3 (Thu Dec 7 17:47:22 EST 1995):
# * Added documentation on ECMA-48 standard.
# * New Amiga entry.
# 9.12.4 (Thu Dec 14 04:16:39 EST 1995):
# * More ECMA-48 stuff
# * Corrected typo in minix entry, added pc-minix.
# * Corrected khome/kend in xterm (thank you again, Aaron Ucko).
# * Added rxvt entry.
# * Added 1.3.x color-change capabilities to linux entry.
# 9.12.5 (Tue Dec 19 00:22:10 EST 1995):
# * Corrected rxvt entry khome/kend.
# * Corrected linux color change capabilities.
# * NeXT entries from Dave Wetzel.
# * Cleaned up if and rf file names (all in /usr/share now).
# * Changed linux op capability to avoid screwing up a background color
# pair set by setterm.
# 9.12.6 (Wed Feb 7 16:14:35 EST 1996):
# * Added xterm-sun.
# 9.12.7 (Fri Feb 9 13:27:35 EST 1996):
# * Added visa50.
#
# 9.13.0 (Sun Mar 10 00:13:08 EST 1996):
# * Another sweep through the Shuford archive looking for new info.
# * Added dg100 alias to dg6053 based on a comp.terminals posting.
# * Added st52 from Per Persson.
# * Added eterm from the GNU Emacs 19.30 distribution.
# * Freeze for 1.9.9.
# 9.13.1 (Fri Mar 29 14:06:46 EST 1996):
# * FreeBSD console entries from Andrew Chernov.
# * Removed duplicate Atari st52 name.
# 9.13.2 (Tue May 7 16:10:06 EDT 1996)
# * xterm doesn't actually have ACS_BLOCK.
# * Change klone+color setf/setb to simpler forms that can be
# translated into termcap.
# * Added xterm1.
# * Removed mechanically-generated junk capabilities from cons* entries.
# * Added color support to bsdos.
# 9.13.3 (Thu May 9 10:35:51 EDT 1996):
# * Added Wyse 520 entries from Wm. Randolph Franklin <wrf@ecse.rpi.edu>.
# * Created ecma+color, linux can use it. Also added ech to linux.
# * Teach xterm about more keys. Add Thomas Dickey's 3.1.2E updates.
# * Add descriptions to FreeBSD console entries. Also shorten
# some aliases to <= 14 chars for portability.
# * Added x68k console
# * Added OTbs to several VT-series entries.
# 9.13.4 (Wed May 22 10:54:09 EDT 1996):
# * screen entry update for 3.7.1 from Michael Alan Dorman.
# 9.13.5 (Wed Jun 5 11:22:41 EDT 1996):
# * kterm correction due to Kenji Rikitake.
# * ACS correction in vt320-kll due to Phillippe De Muyter.
# 9.13.6 (Sun Jun 16 15:01:07 EDT 1996):
# * Sun console entry correction from J.T. Conklin.
# * Changed all DEC VT300 and up terminals to use VT300 tab set
# 9.13.7 (Mon Jul 8 20:14:32 EDT 1996):
# * Added smul to linux entry (we never noticed it was missing
# because of sgr!).
# * Added rmln to hp+labels (deduced from other HP entries).
# * Added vt100 acsc capability to vt220, vt340, vt400, d800, dt80-sas,
# pro350, att7300, 5420_2, att4418, att4424, att4426, att505, vt320-k3.
# * Corrected vt220 acsc.
# * The klone+sgr and klone+sgr-dumb entries now use klone+acs;
# this corresponds to reality and helps prevent some tic warnings.
# * Added sgr0 to c101, pcix, vt100-nav, screen2, oldsun, next, altos2,
# hpgeneric, hpansi, hpsub, hp236, hp700-wy, bobcat, dku7003, adm11,
# adm12, adm20, adm21, adm22, adm31, adm36, adm42, pt100, pt200,
# qvt101, tvi910, tvi921, tvi92B, tvi925, tvi950, tvi970, wy30-mc,
# wy50-mc, wy100, wyse-vp, ampex232, regent100, viewpoint, vp90,
# adds980, cit101, cit500, contel300, cs10, dm80, falco, falco-p,
# f1720a, go140, sb1, superbeeic, microb, ibm8512, kt7, ergo4000,
# owl, uts30, dmterm, dt100, dt100, dt110, appleII, apple-videx,
# lisa, trsII, atari, st52, pc-coherent, basis, m2-man, bg2.0, bg1.25,
# dw3, ln03, ims-ansi, graphos, t16, zen30, xtalk, simterm, d800,
# ifmr, v3220, wy100q, tandem653, ibmaed.
# * Added DWK terminal description.
# 9.13.8 (Wed Jul 10 11:45:21 EDT 1996):
# * Many entries now have highlights inherited from adm+sgr.
# * xterm entry now corresponds to XFree86 3.1.2E, with color.
# * xtitle and xtitle-twm enable access to the X status line.
# * Added linux-1.3.6 color palette caps in conventional format.
# * Added adm1178 terminal.
# * Move fos and apollo terminals to obsolete category.
# * Aha! The BRL terminals file told us what the Iris extensions mean.
# * Added, from the BRL termcap file: rt6221, rt6221-w, northstar,
# commodore, cdc721-esc, excel62, osexec. Replaced from the BRL file:
# cit500, adm11.
# 9.13.9 (Mon Jul 15 00:32:51 EDT 1996):
# * Added, from the BRL termcap file: cdc721, cdc721l, cdc752, cdc756,
# aws, awsc, zentec8001, modgraph48, rca vp3301/vp3501, ex155.
# * Corrected, from BRL termcap file: vi50.
# * Better rxvt entry & corrected xterm entries from Thomas Dickey.
# 9.13.10 (Mon Jul 15 12:20:13 EDT 1996):
# * Added from BRL: cit101e & variants, hmod1, vi200, ansi77, att5620-1,
# att5620-s, att5620-s, dg210, aas1901, hz1520, hp9845, osborne
# (old osborne moved to osborne-w), tvi970-vb, tvi970-2p, tvi925-hi,
# tek4105brl, tek4106brl, tek4107brl,tek4109brl, hazel, aepro,
# apple40p, apple80p, appleIIgs, apple2e, apple2e-p, apple-ae.
# * Paired-attribute fixes to various terminals.
# * Sun entry corrections from A. Lukyanov & Gert-Jan Vons.
# * xterm entry corrections from Thomas Dickey.
# 9.13.11 (Tue Jul 30 16:42:58 EDT 1996):
# * Added t916 entry, translated from a termcap in SCO's support area.
# * New qnx entry from Michael Hunter.
# 9.13.12 (Mon Aug 5 14:31:11 EDT 1996):
# * Added hpex2 from Ville Sulko.
# * Fixed a bug that ran the qnx and pcvtXX together.
# 9.13.13 (Fri Aug 9 01:16:17 EDT 1996):
# * Added dtterm entry from Solaris CDE.
# 9.13.14 (Tue Sep 10 15:31:56 EDT 1996):
# * corrected pairs#8 typo in dtterm entry.
# * added tvi9065.
# 9.13.15 (Sun Sep 15 02:47:05 EDT 1996):
# * updated xterm entry to cover 3.1.2E's new features.
# 9.13.16 (Tue Sep 24 12:47:43 EDT 1996):
# * Added new minix entry
# * Removed aliases of the form ^[0-9]* for obsolete terminals.
# * Commented out linux-old, nobody's using pre-1.2 kernels now.
# 9.13.17 (Fri Sep 27 13:25:38 EDT 1996):
# * Added Prism entries and kt7ix.
# * Caution notes about EWAN and tabset files.
# * Changed /usr/lib/tabset -> /usr/share/tabset.
# * Added acsc/rmacs/smacs to vt52.
# 9.13.18 (Mon Oct 28 13:24:59 EST 1996):
# * Merged in Thomas Dickey's reorganization of the xterm entries;
# added technical corrections to avoid warning messages.
# 9.13.19 (Sat Nov 16 16:05:49 EST 1996):
# * Added rmso=\E[27m in Linux entry.
# * Added koi8-r support for Linux console.
# * Replace xterm entries with canonical ones from XFree86 3.2.
# 9.13.20 (Sun Nov 17 23:02:51 EST 1996):
# * Added color_xterm from Jacob Mandelson
# 9.13.21 (Mon Nov 18 12:43:42 EST 1996):
# * Back off the xterm entry to use r6 as a base.
# 9.13.22 (Sat Nov 30 11:51:31 EST 1996):
# * Added dec-vt220 at Adrian Garside's request.
#
#-(original-changelog-1996/12/29-to-1998/02/28-by-TD)---------------------------
#
# 10.1.0 (Sun Dec 29 02:36:31 EST 1996): withdrawn
# * Minor corrections to xterm entries.
# * Replaced EWAN telnet entry.
# * Dropped the reorder script generator. It was a fossil.
# 9.13.23 (Fri Feb 21 16:36:06 EST 1997):
# * Replaced minitel-2 entry.
# * Added MGR, ansi-nt.
# 9.13.24 (Sun Feb 23 20:55:23 EST 1997):
# * Thorsten Lockert added termcap `bs' to a lot of types, working from
# the 4.4BSD Lite2 file.
#
# 10.1.1 (Sat May 3 21:41:27 EDT 1997):
# * Use setaf/setab consistently with SVr4.
# * Remove ech, el1 from cons25w, they do not work in FreeBSD 2.1.5
# 10.1.2 (Sat May 24 21:10:57 EDT 1997)
# * update xterm-xf86-v32 to match XFree86 3.2A (changes F1-F4)
# * add xterm-16color, for XFree86 3.3
# 10.1.3 (Sat May 31 12:21:05 EDT 1997)
# * correct typo in emu
# * correct typo in vt102-w (Robert Wuest)
# * make new entry xterm-xf86-v33, restored xterm-xf86-v32.
# 10.1.4 (Sun Jun 15 08:29:05 EDT 1997)
# * remove ech capability from rxvt (it does the wrong thing)
# 10.1.5 (Sat Jun 28 21:34:36 EDT 1997)
# * remove spurious newlines from several entries (hp+color, wy50,
# wy350, wy370-nk, wy99gt-tek, wy370-tek, ibm3161, tek4205, ctrm,
# gs6300)
# 10.1.6 (Sat Jul 5 15:08:16 EDT 1997)
# * correct rmso capability of wy50-mc
# 10.1.7 (Sat Jul 12 20:05:55 EDT 1997)
# * add cbt to xterm-xf86-v32
# * disentangle some entries from 'xterm', preferring xterm-r6 in case
# 'xterm' is derived from xterm-xf86-v32, which implements ech and
# other capabilities not in xterm-r6.
# * remove alternate character set from kterm entry.
# 10.1.8 (Sat Aug 2 18:43:18 EDT 1997)
# * correct acsc entries for ACS_LANTERN, which is 'i', not 'I'.
# 10.1.9 (Sat Aug 23 17:54:38 EDT 1997)
# * add xterm-8bit entry.
# 10.1.10 (Sat Oct 4 18:17:13 EDT 1997)
# * repair several places where early version of tic replaced \, with \\\,
# * make acsc entries canonical form (sorted, uniq).
# * modify acsc entries for linux, linux-koi8
# * new rxvt entry, from corrected copy of distribution in rxvt 2.21b
# * add color, mouse support to kterm.
# 10.1.11 (Sat Oct 11 14:57:10 EDT 1997)
# * correct wy120 smxon/tbc capabilities which were stuck together.
# 10.1.12 (Sat Oct 18 17:38:41 EDT 1997)
# * add entry for xterm-xf86-v39t
# 10.1.13 (Sat Nov 8 13:43:33 EST 1997)
# * add u8,u9 to sun-il description
# 10.1.14 (Sat Nov 22 19:59:03 EST 1997)
# * add vt220-js, pilot, rbcomm, datapoint entries from esr's 27-jun-97
# version.
# * add hds200 description (Walter Skorski)
# * add EMX 0.9b descriptions
# * correct rmso/smso capabilities in wy30-mc and wy50-mc (Daniel Weaver)
# * rename xhpterm back to hpterm.
# 10.1.15 (Sat Nov 29 19:21:59 EST 1997)
# * change initc in linux-c-nc to use 0..1000 range.
# 10.1.16 (Sat Dec 13 19:41:59 EST 1997)
# * remove hpa/vpa from rxvt, which implements them incorrectly.
# * add sgr0 for rxvt.
# * remove bogus smacs/rmacs from EMX descriptions.
# 10.1.17 (Sat Dec 20 17:54:10 EST 1997)
# * revised entry for att7300
# 10.1.18 (Sat Jan 3 17:58:49 EST 1998)
# * use \0 rather than \200.
# * rename rxvt-color to rxvt to match rxvt 2.4.5 distribution.
# 10.1.19 (Sat Jan 17 14:24:57 EST 1998)
# * change xterm (xterm-xf86-v40), xterm-8bit rs1 to use hard reset.
# * rename xterm-xf86-v39t to xterm-xf86-v40
# * remove bold/underline from sun console entries since they're not
# implemented.
# 10.1.20 (Sat Jan 24 11:02:51 EST 1998)
# * add beterm entry (Fred Fish)
# * add irix-color/xwsh entry.
# * turn ncv off for linux.
# 10.1.21 (Sat Jan 31 17:39:16 EST 1998)
# * set ncv for FreeBSD console (treat colors with reverse specially).
# * remove sgr string from qnx based on report by Xiaodan Tang
# 10.1.22 (Wed Feb 11 18:40:12 EST 1998)
# * remove spurious commas from descriptions
# * correct xterm-8bit to match XFree86 3.9Ad F1-F4.
# 10.1.23 (Sat Feb 28 17:48:38 EST 1998)
# * add linux-koi8r to replace linux-koi8 (which uses a corrupt acsc,
# apparently based on cp-866).
#
#-(replaced-changelog-1998/02/28-by-ESR)----------------------------------------
#
# 9.13.23 (Fri Feb 21 16:36:06 EST 1997):
# * Replaced minitel-2 entry.
# * Added MGR, ansi-nt.
# * Minor corrections to xterm entries.
# * Replaced EWAN telnet entry.
# * Dropped the reorder script generator. It was a fossil.
# 9.13.24 (Sun Feb 23 20:55:23 EST 1997):
# * Thorsten Lockert added termcap `bs' to a lot of types, working from
# the 4.4BSD Lite2 file.
# 9.13.25 (Fri Jun 20 12:33:36 EDT 1997):
# * Added Datapoint 8242, pilot, ansi_psx, rbcomm, vt220js.
# * Updated iris-ansi; corrected vt102-w.
# * Switch base xterm entry to 3.3 level.
# 9.13.26 (Mon Jun 30 22:45:45 EDT 1997)
# * Added basic4.
# * Removed rmir/smir from tv92B.
#
# 10.2.0 (Sat Feb 28 12:47:36 EST 1998):
# * add hds200 description (Walter Skorski)
# * add beterm entry (Fred Fish)
# * add Thomas Dickey's xterm-xf86-v40, xterm-8bit, xterm-16color,
# iris-color entries.
# * add emx entries.
# * Replaced unixpc entry with Benjamin Sittler's corrected version.
# * Replaced xterm/rxvt/emu/syscons entries with Thomas Dickey's
# versions.
# * remove sgr string from qnx based on report by Xiaodan Tang
# * Added u8/u9, removed rmul/smul from sun-il.
# * 4.2 tic displays \0 rather than \200.
# * add linux-koi8r to replace linux-koi8 (which uses a corrupt acsc,
# apparently based on cp-866).
# * Merged in Pavel Roskin's acsc for linux-koi8
# * Corrected some erroneous \\'s to \.
# * 4.2 ncurses has been changed to use setaf/setab, consistent w/SysV.
# * II -> ii in pcvtXX, screen, xterm.
# * Removed \n chars following ANSI escapes in sgr & friends.
# * Updated Wyse entries.
# * h19 corrections from Tim Pierce.
# * Noted that the dm2500 has both ich and smir.
# * added pccons for the Alpha under OSF/1.
# * Added Sony NEWS workstation entries and cit101e-rv.
# * Reverted `amiga'; to Kent Polk's version, as I'm told
# the Verkuil entry messes up with Amiga Telnet.
# 10.2.1 (Sun Mar 8 18:32:04 EST 1998):
# * Corrected attributions in 10.2.0 release notes.
# * Scanned the Shuford archive for new terminfos and information.
# * Removed sgr from qnx entry (Thomas Dickey).
# * Added entries for ICL and Kokusai Data Systems terminals.
# * Incorporated NCR terminfos from the Boundless Technology FTP site.
# * Incorporated att700 from the Boundless Technology FTP site.
# * Miscellaneous contact-address and Web-page updates.
#
#-(changelog-beginning-ncurses-4.2)---------------------------------------------
#
# 1998/5/9
# * add nxterm and xterm-color terminfo description (request by Cristian
# Gafton <gafton@redhat.com>).
# * modify rxvt terminfo description to clear alternate screen before
# switching back to normal screen, for compatibility with applications
# which use xterm (reported by Manoj Kasichainula <manojk@io.com>).
# * modify linux terminfo description to reset color palette (reported
# by Telford Tendys <telford@eng.uts.edu.au>).
#
# 1998/7/4
# * merge changes from current XFree86 xterm terminfo descriptions.
#
# 1998/7/25
# * Added minitel1 entries from Alexander Montaron.
# * Added qnxt2 from Federico Bianchi.
# * Added arm100 terminfo entries from Dave Millen.
#
# 1998/8/6
# * Added ncsa telnet entries from Francesco Potorti
#
# 1998/8/15
# * modify ncsa telnet entry to reflect color, other capabilities based on
# examination of the source code - T.Dickey.
#
# 1998/8/22
# * Corrected some erroneous \\'s to \ (eterm, osborne) - TD.
#
# 1998/8/29
# * Added Francesco Potorti's tuned Wyse 99 entries.
# * dtterm enacs correction from Alexander V. Lukyanov.
# * Add ncsa-ns, ncsa-m-ns and ncsa-m entries from esr version.
# * correct a typo in icl6404 entry.
# * add xtermm and xtermc
#
# 1998/9/26
# * format most %'char' sequences to %{number}
# * adapt IBM AIX 3.2.5 terminfo - T.Dickey
# * merge Data General terminfo from Hasufin <hasufin@vidnet.net> - TD
#
# 1998/10/10
# * update xterm-xfree86 to current (xterm patch #84), for is2/rs2 changes - TD
# * correct initialization string in xterm-r5, add misc other features
# to correspond with xterm patch #84 - TD
#
# 1998/12/19
# * update xterm-xfree86 to current (xterm patch #90), smcur/rmcur changes - TD
# * add Mathew Vernon's mach console entries
# * corrections for ncsa function-keys (report by Larry Virden)
#
# 1998/12/19
# * change linux to use ncv#2, since underline does not work with color - TD
#
# 1999/1/9
# * add kbt to iris-ansi, document other shift/control functionkeys - TD
# * correct iris-ansi and iris-ansi-ap with respect to normal vs keypad
# application modes, change kent to use the correct keypad code - TD
#
# 1999/1/10
# * add entry for Tera Term - TD
#
# 1999/1/23
# * minor improvements for teraterm entry - TD
# * rename several entries used by BSDI: bsdos to bsdos-pc-nobold,
# and bsdos-bold to bsdos-pc (Jeffrey C Honig)
#
# 1999/2/20
# * resolve ambiguity of kend/kll/kslt and khome/kfnd/kich1 strings in
# xterm and ncsa entries by removing the unneeded ones. Note that
# some entries will return kend & khome versus kslt and kfnd, for
# PC-style keyboards versus strict vt220 compatibility - TD
#
# 1999/3/13
# * adjust xterm-xfree86 khome/kend to match default PC-style keyboard
# tables - TD
# * add 'crt' entry - TD
# * correct typos in 'linux-c' entry - TD
#
# 1999/3/14
# * update entries for BSD/OS console to use klone+sgr and klone+color
# (Jeffrey C Honig)
#
# 1999/3/27
# * adjust xterm-xfree86 miscellaneous keypad keys, as per xterm patch #94 - TD.
#
# 1999/4/10
# * add linux-lat, from RedHat patches to ncurses 4.2
#
# 1999/4/17
# * add complete set of default function-key definitions for scoansi - TD.
#
# 1999/7/3
# * add cnorm, cvvis for Linux 2.2 kernels
#
# 1999/7/24
# * add kmous to xterm-r5 -TD
# * correct entries xterm+sl and xterm+sl-twm, which were missing the
# parent "use" clause -TD
#
# 1999/7/31
# * corrected cnorm, added el1 in 'screen' description -TD
#
# 1999/8/14
# * add ms-vt100 -TD
#
# 1999/8/21
# * corrections to beterm entry -TD
#
# 1999/8/28
# * add cygwin entry -TD
#
# 1999/9/4
# * minor corrections for beterm entry -TD
#
# 1999/9/18
# * add acsc string to HP 70092 terminfo entry -Joerg Wunsch
#
# 1999/9/25
# * add amiga-8bit entry
# * add console entries from NetBSD: ofcons, wsvt25, wsvt25m, rcons,
# rcons-color, based on
# ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/share/termcap/termcap.src
# * add alias for iris-ansi-net
#
# 1999/10/2
# * corrected scoansi entry's acsc, some function keys, add color -TD
#
# 1999/10/23
# * add cnorm, cvvis to cons25w, and modify ncv to add 'dim' -TD
# * reorder ncsa entries to make ncsa-vt220 use the alternate function
# key mapping, leaving Potorti's entries more like he named them -TD
# * remove enter/exit am-mode from cygwin -TD
#
# 1999/10/30
# * correct typos in several entries (missing '[' from CSI):
# mgr-sun, ncsa-m, vt320-k3, att505, avt-ns, as well as smir/rmir
# strings for avt-ns -TD
# * add 'dim' to ncv mask for linux (report by Klaus Weide).
#
# 1999/11/27
# * correct kf1-kf4 in xterm-r6 which were vt100-style PF1-PF4 -TD
# * add hts to xterm-r6, and u6-u9 to xterm-r5 -TD
# * add xterm-88color and xterm-256color -TD
#
# 1999/12/4
# * add "obsolete" termcap strings -TD
# * add kvt and gnome entries -TD
#
# 1999/12/11
# * correct cup string for regent100 -TD
#
# 2000/1/1
# * update mach, add mach-color based on Debian diffs for ncurses 5.0 -TD
# * add entries for xterm-hp, xterm-vt220, xterm-vt52 and xterm-noapp -TD
# * change OTrs capabilities to rs2 -TD
# * add obsolete and extended capabilities to 'screen' -TD
#
# 2000/1/5
# * remove kf0 from rxvt, vt520, vt525 and ibm5151 since it conflicts
# with kf10 -TD
# * updated xterm-xf86-v40, making kdch1 correspond to vt220 'Remove',
# and adding kcbt -TD
#
# 2000/1/12
# * remove incorrect khome/kend from xterm-xf86-v333, which was based on
# nonstandard resource settings -TD
#
# 2000/2/26
# * minor fixes for xterm-*, based on Debian #58530 -TD
#
# 2000/3/4
# * add several terminal types from esr's "11.0", as well as comments.
# bq300*, dku7102-old, dku7202, hft, lft, pcmw, pmcons, tws*, vip*,
# vt220-8bit, vt220-old, wy85-8bit
#
# 2000/3/18
# * add several terminal types from esr's "11.0.1" (ansi-*).
# * update OTxx capabilities for changes on 2000/3/4.
# * revert part of vt220 change (request by Todd C Miller for OpenBSD)
#
# 2000/3/26
# * move screen's AX extension to ecma+color, modify several entries to
# use that, adjusting ncv as needed -TD
#
# 2000/4/8
# * add bsdos-pc-m, bsdos-pc-mono (Jeffrey C Honig)
# * correct spelling error in entry name: bq300-rv was given as bg300-rv
# in esr's version.
#
# 2000/4/15
# * add cud, ech, etc., to beterm based on feedback from Rico Tudor -TD
# * correct color definition for ibm3164, make minor changes to other
# IBM terminal definitions based on recent terminfo descriptions -TD
#
# 2000/4/22
# * add mgterm, from NetBSD -TD
# * add alias sun-cgsix for sun-ss5 as per NetBSD
# * change cons25w to use rs2 for reset rather than rs1 -TD
# * add rc/sc to aixterm based on manpage -TD
#
# 2000/5/13
# * remove ncv from xterm-16color, xterm-256color
#
# 2000/6/10
# * add kmous capability to linux to use Joerg Schoen's gpm patch.
#
# 2000/7/1
# * add Eterm (Michael Jennings)
#
# 2000-07-18
# * add amiga-vnc entry.
#
# 2000-08-12
# * correct description of Top Gun Telnet.
# * add kterm-color
#
# 2000-08-26
# * add qansi* entries from QNX ftp site.
#
# 2000-09-16
# * add Matrix Orbital entries by Eric Z. Ayers).
# * add xterm-basic, xterm-sco entries, update related entries to XFree86
# 4.0.1c -TD
#
# 2000-09-17
# * add S0, E0 extensions to screen's entry -TD
#
# 2000-09-23
# * several corrections based on tic's new parameter-checking code -TD
# * modify xterm-r6 and similar rs2 sequences which had \E7...\E8
# bracketing sequences that reset video attributes (\E8 would restore
# them) -TD
#
# 2000-11-11
# * rename cygwin to cygwinB19, adapt newer entry from Earnie Boyd -TD
#
# 2000-12-16
# * improved scoansi, based on SCO man-page, and testing console,
# scoterm with tack -TD
#
# 2001-01-27
# * modify kterm to use acsc via SCS controls.
#
# 2001-02-10
# * screen 3.9.8 allows xterm mouse controls to pass-through
#
# 2001-03-11
# * remove spurious "%|" from some xterm entries.
#
# 2001-03-31
# * modify 'screen' khome/kend to match screen 3.09.08
# * add examples of 'screen' customization (screen.xterm-xfree86,
# screen.xterm-r6, screen.teraterm) -TD
#
# 2001-04-14
# * correct definitions of shifted editing keys for xterm-xfree86 -TD
# * add "Apple_Terminal" entries -Benjamin Sittler
# * remove time-delays from "Apple_Terminal" entries -TD
# * make sgr entries time-delays consistent with individual caps -TD
#
# 2001-05-05
# * corrected/updated screen.xterm-xfree86
#
# 2001-05-19
# * ELKS descriptions, from Federico Bianchi
# * add u6 (CSR) to Eterm (Michael Jennings).
#
# 2001-07-21
# * renamed "Apple_Terminal" entries to "nsterm" to work with Solaris's
# tic which handles names no longer than 14 characters. Add
# corresponding descriptions for the Darwin PowerPC console named
# "xnuppc" -Benjamin Sittler
#
# 2001-09-01
# * change kbs in mach entries to ^? (Marcus Brinkmann).
#
# 2001-11-17
# * add "putty" entry -TD
# * updated "Apple_Terminal" entries -Benjamin Sittler
#
# 2001-11-24
# * add ms-vt100-color entry -TD
# * add "konsole" entries -TD
#
# 2001-12-08
# * update gnome entry to Redhat 7.2 -TD
#
# 2002-05-25
# * add kf13-kf48 strings to cons25w -TD
# * add pcvt25-color entry -TD
# * changed a few /usr/lib/tabset -> /usr/share/tabset.
# * improve some features of scoansi entry based on SCO's version -TD
# * add scoansi-new entry corresponding to OpenServer 5.0.6
#
# 2002-06-15
# * add kcbt to screen entry -TD
#
# 2002-06-22
# * add rxvt-16color, ibm+16color, mvterm entries -TD
#
# 2002-09-28
# * split out linux-basic entry, making linux-c inherit from that, and
# in turn linux (with cnorm, etc) inherit from linux-c-nc to reflect
# the history of this console type -TD
# * scaled the linux-c terminfo entry to match linux-c-nc, i.e., the
# r/g/b parameters of initc are in the range 0 to 1000 -TD
#
# 2002-10-05
# * minor fix for scale-factor of linux-c and linux-c-nc -TD
#
# 2002-11-09
# * split-out vt100+keypad and vt220+keypad, fix interchanged ka3/kb2
# in the latter -TD
#
# 2002-11-16
# * add entries for mterm (mterm, mterm-ansi, decansi) -TD
# * ncr260wy350pp has only 16 color pairs -TD
# * add sun-type4 from NetBSD -TD
# * update xterm-xfree86 to current (xterm patch #170) -TD
# * add screen-bce, screen-s entries -TD
# * add xterm-1002, xterm-1003 entries -TD
#
# 2003-01-11
# * update homepage for Top Gun Telnet/SSH
#
# 2003-01-25
# * reduce duplication in emx entries, added emx-base -TD
#
# 2003-05-24
# * corrected acs for screen.teraterm -TD
# * add tkterm entry -TD
#
# 2003-07-15
# * cygwin changes from Charles Wilson:
# misc/terminfo.src (nxterm|xterm-color): make xterm-color
# primary instead of nxterm, to match XFree86's xterm.terminfo
# usage and to prevent circular links.
# (rxvt): add additional codes from rxvt.org.
# (rxvt-color): new alias
# (rxvt-xpm): new alias
# (rxvt-cygwin): like rxvt, but with special acsc codes.
# (rxvt-cygwin-native): ditto. rxvt may be run under XWindows, or
# with a "native" MSWin GUI. Each takes different acsc codes,
# which are both different from the "normal" rxvt's acsc.
# (cygwin): cygwin-in-cmd.exe window. Lots of fixes.
# (cygwinDBG): ditto.
#
# 2003-09-27
# * update gnome terminal entries -TD
#
# 2003-10-04
# * add entries for djgpp 2.03 and 2.04 -TD
#
# 2003-10-25
# * add alias for vtnt -TD
# * update xterm-xfree86 for XFree86 4.4 -TD
#
# 2003-11-22
# * add linux-vt (Andrey V Lukyanov)
#
# 2003-12-20
# * add screen.linux -TD
#
# 2004-01-10
# * revised/improved entries for tvi912b, tvi920b (Benjamin Sittler)
#
# 2004-01-17
# * add OpenNT/Interix/SFU entries (Federico Bianchi)
# * add vt100+ and vt-utf8 entries -TD
# * add uwin entry -TD
#
# 2004-03-27
# * add sgr strings to several common entries lacking them, e.g.,
# screen, to make the entries more portable -TD
# * remove cvvis from rxvt entry, since it is the same as cnorm -TD
# * similar fixups for cvvis/cnorm various entries -TD
#
# 2004-05-22
# * remove 'ncv' from xterm-256color (xterm patch #188) -TD
#
# 2004-06-26
# * add mlterm -TD
# * add xterm-xf86-v44 -TD
# * modify xterm-new aka xterm-xfree86 to accommodate luit, which relies
# on G1 being used via an ISO-2022 escape sequence (report by
# Juliusz Chroboczek) -TD
# * add 'hurd' entry -TD
#
# 2004-07-03
# * make xterm-xf86-v43 derived from xterm-xf86-v40 rather than
# xterm-basic -TD
# * align with xterm #192's use of xterm-new -TD
# * update xterm-new and xterm-8bit for cvvis/cnorm strings -TD
# * make xterm-new the default "xterm" -TD
#
# 2004-07-10
# * minor fixes for emu -TD
# * add emu-220
# * add rmam/smam to linux (Trevor Van Bremen)
# * change wyse acsc strings to use 'i' map rather than 'I' -TD
# * fixes for avatar0 -TD
# * fixes for vp3a+ -TD
#
# 2004-07-17
# * add xterm-pc-fkeys -TD
# * review/update gnome and gnome-rh90 entries (prompted by
# Redhat Bugzilla #122815) -TD
# * review/update konsole entries -TD
# * add sgr, correct sgr0 for kterm and mlterm -TD
# * correct tsl string in kterm -TD
#
# 2004-07-24
# * make ncsa-m rmacs/smacs consistent with sgr -TD
# * add sgr, rc/sc and ech to syscons entries -TD
# * add function-keys to decansi -TD
# * add sgr to mterm-ansi -TD
# * add sgr, civis, cnorm to emu -TD
# * correct/simplify cup in addrinfo -TD
# * corrections for gnome and konsole entries
# (Redhat Bugzilla #122815) -Hans de Goede
# * modify DEC entries (vt220, etc), to add sgr string, and to use
# ISO-2022 strings for rmacs/smacs -TD
#
# 2004-07-31
# * rename xterm-pc-fkeys to xterm+pcfkeys -TD
#
# 2004-08-07
# * improved putty entry -Robert de Bath
#
# 2004-08-14
# * remove dch/dch1 from rxvt because they are implemented inconsistently
# with the common usage of bce/ech -TD
# * remove khome from vt220 (vt220's have no home key) -TD
# * add rxvt+pcfkeys -TD
#
# 2004-08-21
# * modify several entries to ensure xterm mouse and cursor visibility
# are reset in rs2 string: hurd, putty, gnome, konsole-base, mlterm,
# Eterm, screen. (The xterm entries are left alone - old ones for
# compatibility, and the new ones do not require this change) -TD
#
# 2004-08-28
# * add morphos entry -Pavel Fedin
# * modify amiga-8bit to add khome/kend/knp/kpp -Pavel Fedin
# * corrected \E[5?l to \E[?5l in vt320 entries -TD
#
# 2004-11-20
# * update wsvt25 entry -TD
#
# 2005-01-29
# * update pairs for xterm-88color and xterm-256color to reflect the
# ncurses extended-color support -TD
#
# 2005-02-26
# * modify sgr/sgr0 in xterm-new to improve tgetent's derived "me" -TD
# * add aixterm-16color to demonstrate 16-color capability -TD
#
# 2005-04-23
# * add media-copy to vt100 -TD
# * corrected acsc string for vt52 -TD
#
# 2005-04-30
# * add kUP, kDN (user-defined shifted up/down arrow) definitions for
# xterm-new -TD
# * add kUP5, kUP6, etc., for xterm-new and rxvt -TD
#
# 2005-05-07
# * re-corrected acsc string for vt52 -TD
#
# 2005-05-28
# * corrected sun-il sgr string which referred to bold and underline -TD
# * add sun-color entry -TD
#
# 2005-07-23
# * modify sgr0 in several entries to reset alternate-charset as in the
# sgr string -TD
# * modify sgr string of prism9 to better match the individual
# attributes -TD
#
# 2005-10-15
# * correct order of use= in rxvt-basic -TD
#
# 2005-10-26
# * use kind/kri as shifted up/down cursor keys for xterm-new -TD
#
# 2005-11-12
# * other minor fixes to cygwin based on tack -TD
# * correct smacs in cygwin (report by Baurzhan Ismagulov).
#
# 2006-02-18
# * add nsterm-16color entry -TD
# * remove ncv flag from xterm-16color -TD
# * remove setf/setb from xterm-256color to match xterm #209 -TD
# * update mlterm entry to 2.9.2 -TD
#
# 2006-02-25
# * fixes to make nsterm-16color match report
# by Christian Ebert -Alain Bench
#
# 2006-04-22
# * add xterm+256color building block -TD
# * add gnome-256color, putty-256color, rxvt-256color -TD
#
# 2006-05-06
# * add hpterm-color -TD
#
# 2006-06-24
# * add xterm+pcc0, xterm+pcc1, xterm+pcc2, xterm+pcc3 -TD
# * add gnome-fc5 (prompted by GenToo #122566) -TD
# * remove obsolete/misleading comments about kcbt on Linux -Alain Bench
# * improve xterm-256color by combining the ibm+16color setaf/setab
# strings with SGR 48. The setf/setb strings also are cancelled here
# rather than omitted so derived entries will cancel those also -Alain
# Bench
#
# 2006-07-01
# * add some notes regarding copyright to terminfo.src -TD
# * use rxvt+pcfkeys in Eterm -TD
# * remove km and flash from gnome, Eterm and rxvt since they do not work
# as one would expect (km sends ESC rather than setting the 8th bit
# of the key) -TD
# * add/use ansi+enq, vt100+enq and vt102+enq -TD
# * add konsole-solaris -TD
#
# 2006-07-22
# * update xterm-sun and xterm-sco entries to match xterm #216 -TD
# * modify is2/rs2 strings for xterm-r6 as per fix in xterm #148 -TD
# * modify xterm-24 to inherit from "xterm" -TD
# * add xiterm entry -TD
# * add putty-vt100 entry -TD
# * corrected spelling of Michael A Dorman's name, prompted by
# http://www.advogato.org/person/mdorman/diary.html -TD
#
# 2006-08-05
# * add xterm+pcf0, xterm+pcf2 from xterm #216 -TD
# * update xterm+pcfkeys to match xterm #216 -TD
#
# 2006-08-17
# * make descriptions of xterm entries consistent with its terminfo -TD
#
# 2006-08-26
# * add xfce, mgt -TD
#
# 2006-09-02
# * correct acsc string in kterm -TD
#
# 2006-09-09
# * add kon entry -TD
# * remove invis from linux and related entries, add klone+sgr8 for those
# that implement the feature (or have not been shown to lack it) -TD
#
# 2006-09-23
# * add ka2, kb1, kb3, kc2 to vt220-keypad as an extension -TD
# * minor improvements to rxvt+pcfkeys -TD
#
# 2006-09-30
# * fix a few typos in if/then/else expressions -TD
#
# 2006-10-07
# * add several GNU Screen variations with 16- and 256-colors, and
# status line (Alain Bench).
#
# 2007-03-03
# * add Newbury Data entries (Jean-Charles Billaud).
#
# 2007-06-10
# * corrected xterm+pcf2 modifiers for F1-F4, match xterm #226 -TD
#
# 2007-07-14
# * restore section of pre-ncurses-4.2 changelog to fix attribution -TD
# * add konsole-256color entry -TD
#
# 2007-08-18
# * add 9term entry (request by Juhapekka Tolvanen) -TD
#
# 2007-10-13
# * correct kIC in rxvt+pcfkeys (prompted by Debian #446444) -TD
# * add shift-control- and control-modified keys for rxvt editing
# keypad -TD
# * update mlterm entry to 2.9.3 -TD
# * add mlterm+pcfkeys -TD
#
# 2007-10-20
# * move kLFT, kRIT, kind and kri capabilities from xterm-new to
# xterm+pcc0, etc., to make the corresponding building blocks reflect
# xterm's capabilities -TD
# * add mrxvt entry -TD
# * add xterm+r6f2, use in mlterm and mrxvt entries -TD
#
# 2007-11-03
# * correct acsc strings for h19 and z100 (Benjamin Sittler)
#
# 2007-11-11
# * use xterm-xf86-v44 for "xterm-xfree86", reflecting changes to
# xterm starting with xterm patch #216 -TD
# * make legacy xterm entries such as xterm-24 inherit from xterm-old,
# to match xterm #230 -TD
# * extend xterm+pccX entries to match xterm #230 -TD
# * add xterm+app, xterm+noapp, from xterm #230 -TD
# * add/use xterm+pce2 from xterm #230, in xterm+pcfkeys -TD
#
# 2008-04-19
# * add screen.rxvt -TD
#
# 2008-04-28
# * add screen+fkeys (prompted by Debian #478094) -TD
#
# 2008-06-28
# * add screen.mlterm -TD
# * improve mlterm and mlterm+pcfkeys -TD
#
# 2008-08-23
# * add Eterm-256color, Eterm-88color -TD
# * add rxvt-88color -TD
#
# 2008-10-12
# * add teraterm4.59 entry, use that as primary teraterm entry, rename
# original to teraterm2.3 -TD
# * update "gnome" to 2.22.3 -TD
# * update "konsole" to 1.6.6 -TD
# * add "aterm" -TD
# * add "linux2.6.26" -TD
#
# 2008-11-15
# * change several \E[2g (clear tab at current column) to \E[3g
# (clear all tabs) to match definition for tbc capability -TD
#
# 2008-11-29
# * add eterm-color -TD
#
# 2009-01-10
# * add screen.Eterm -TD
#
# 2009-03-28
# * correct typo in pfkey of ansi.sys-old
# (report by Kalle Olavi Niemitalo)
# * move function- and cursor-keys from emx-base to ansi.sys, and create
# a pfkey capability which handles F1-F48 -TD
#
# 2009-05-02
# * add vwmterm entry (Bryan Christ)
#
# 2009-09-19
# * change ncv and op capabilities in sun-color to match Sun's entry for
# this (report by Laszlo Peter)
# * improve interix smso by using reverse rather than bold (report by
# Kristof Zelechovski).
#
# 2009-10-03
# * remove unnecessary kcan assignment to ^C from putty (Sven Joachim)
# * add linux-16color (Benjamin Sittler)
# * correct initc capability of linux-c-nc end-of-range (Benjamin Sittler)
# * similar change for dg+ccc and dgunix+ccc (Benjamin Sittler)
# * add ccc and initc capabilities to xterm-16color -TD
#
# 2009-10-31
# * updated nsterm* entries (Benjamin Sittler, prompted by GenToo #206201)
#
# 2009-12-12
# * updated nsterm* entries (Benjamin Sittler, Emanuele Giaquinta)
#
# 2009-12-19
# * add bw (auto-left-margin) to nsterm* entries (Benjamin Sittler)
# * rename minix to minix-1.7, add minix entry for Minix3 -TD
#
# 2009-12-26
# * add bterm (bogl 0.1.18) -TD
# * minor fix to rxvt+pcfkeys -TD
#
# 2010-02-06
# * update mrxvt to 0.5.4, add mrxvt-256color -TD
#
# 2010-02-13
# * add several screen-bce.XXX entries -TD
#
# 2010-02-23
# * modify screen-bce.XXX entries to exclude ech, since screen's color
# model does not clear with color for that feature -TD
#
# 2010-03-20
# * rename atari and st52 to atari-old, st52-old, use newer entries from
# FreeMiNT by Guido Flohr (from patch/report by Alan Hourihane).
#
# 2010-06-12
# * add mlterm-256color entry -TD
#
# 2010-07-17
# * add hard-reset for rs2 to wsvt25 to help ensure that reset ends
# the alternate character set (patch by Nicholas Marriott)
#
# 2010-08-28
# * improve acsc for vt52 (Benjamin Sittler)
# * modify nsterm entries for consistent sgr/sgr0 -TD
# * modify xnuppc entries for consistent sgr/sgr0 -TD
# * add invis to tek4115 sgr -TD
#
# 2010-09-11
# * reformat acsc strings to canonical format -TD
#
# 2010-09-25
# * add "XT" capability to entries for terminals that support both
# xterm-style mouse- and title-controls, for "screen" which
# special-cases TERM beginning with "xterm" or "rxvt" -TD
#
# 2010-10-02
# * fill in no-parameter forms of cursor-movement where a parameterized
# form is available -TD
# * fill in missing cursor controls where the form of the controls is
# ANSI -TD
# * add parameterized cursor-controls to linux-basic (report by Dae) -TD
#
# 2010-10-09
# * correct comparison used for setting 16-colors in linux-16color
# entry (Novell #644831) -TD
# * improve linux-16color entry, using "dim" for color-8 which makes it
# gray rather than black like color-0 -TD
#
# 2010-11-20
# * make "vte" the principal entry defining "gnome", since GNOME terminal
# is merely one of several terminals whose behavior is provided by this
# library -TD
#
# 2010-11-27
# * fix typo in rmso for tek4106 -Goran Weinholt
#
# 2010-12-11
# * suppress ncv in screen entry, allowing underline -Alejandro R. Sedeno
# * also suppress ncv in konsole-base -TD
#
# 2011-02-05
# * add U8 feature to denote entries for terminal emulators which do not
# support VT100 SI/SO when processing UTF-8 encoding -TD
# * add xterm-utf8 as a demo of the U8 feature -TD
#
# 2011-02-20
# * add cons25-debian entry (Brian M Carlson, Debian #607662).
#
# 2011-06-11
# * update minix entry to minix 3.2 (Thomas Cort).
#
# 2011-07-09
# * fix inconsistent tabset path in pcmw (Todd C. Miller).
# * remove a backslash which continued comment, obscuring altos3
# definition with OpenBSD toolset (Nicholas Marriott).
#
# 2011-07-16
# * add/use xterm+tmux chunk from xterm #271 -TD
# * resync xterm-new entry from xterm #271 -TD
# * add E3 extended capability to linux-basic (Miroslav Lichvar)
# * add linux2.2, linux2.6, linux3.0 entries to give context for E3 -TD
# * add SI/SO change to linux2.6 entry (Debian #515609) -TD
#
# 2011-07-21
# * add kich1 to sun (Yuri Pankov)
# * use bold rather than reverse for smso in sun-color (Yuri Pankov).
#
# 2011-08-06
# * corrected k9 in dg460-ansi, add other features based on manuals -TD
#
# 2011-08-20
# * minor cleanup of X-terminal emulator section -TD
# * add terminator entry -TD
# * add simpleterm entry -TD
#
# 2011-09-10
# * add xterm+kbs fragment from xterm #272 -TD
#
# 2011-11-12
# * add pccon entries for OpenBSD console (Alexei Malinin)
#
# 2011-12-17
# * corrected old changelog comments -TD
#
# 2011-11-24
# * add putty-sco -TD
#
# 2012-01-28
# * add mach-gnu (Samuel Thibault)
# * add mach-gnu-color, tweaks to mach-gnu -TD
# * make sgr for sun-color agree with smso -TD
# * make sgr for prism9 agree with other caps -TD
# * make sgr for icl6404 agree with other caps -TD
# * make sgr for ofcons agree with other caps -TD
# * make sgr for att5410v1, att4415, att620 agree with other caps -TD
# * make sgr for aaa-unk, aaa-rv agree with other caps -TD
# * make sgr for avt-ns agree with other caps -TD
#
# 2012-02-11
# * make sgr for xterm-pcolor agree with other caps -TD
# * make sgr for att5425 agree with other caps -TD
# * make sgr for att630 agree with other caps -TD
# * make sgr for linux entries agree with other caps -TD
# * make sgr for tvi9065 agree with other caps -TD
# * make sgr for ncr260vt200an agree with other caps -TD
# * make sgr for ncr160vt100pp agree with other caps -TD
# * make sgr for ncr260vt300an agree with other caps -TD
# * make sgr for aaa-60-dec-rv, aaa+dec agree with other caps -TD
# * make sgr for cygwin, cygwinDBG agree with other caps -TD
#
# 2012-03-31
# * correct order of use-clauses in st-256color -TD
#
# 2012-04-01
# * revert 2011-07-16 change to "linux" alias, return to "linux2.2" -TD
#
# 2012-04-14
# * document all of the user-defined capabilities in one place -TD
# * add XT to some places to improve usefulness for other applications
# than screen, which would like to pretend that xterm's title is
# a status-line. -TD
# * change use-clauses in ansi-mtabs, hp2626, and hp2622 based on review
# of ordering and overrides -TD
#
# 2012-04-21
# * add msgr to vt420, similar DEC vtXXX entries -TD
# * add several missing vt420 capabilities from vt220 -TD
# * factor out ansi+pp from several entries -TD
# * change xterm+sl and xterm+sl-twm to include only the status-line
# capabilities and not "use=xterm", making them more generally useful
# as building-blocks -TD
# * add dec+sl building block, as example -TD
#
# 2012-04-28
# * fix some inconsistencies between vt320/vt420, e.g., cnorm/civis -TD
# * add eslok flag to dec+sl -TD
# * dec+sl applies to vt320 and up -TD
# * drop wsl width from xterm+sl -TD
# * reuse xterm+sl in putty and nsca-m -TD
# * add ansi+tabs to vt520 -TD
# * add ansi+enq to vt220-vt520 -TD
#
# 2012-05-05
# * remove p6 (bold) from opus3n1+ for consistency -TD
# * remove acs stuff from env230 per clues in Ingres termcap -TD
# * modify env230 sgr/sgr0 to match other capabilities -TD
# * modify smacs/rmacs in bq300-8 to match sgr/sgr0 -TD
# * make sgr for dku7202 agree with other caps -TD
# * make sgr for ibmpc agree with other caps -TD
# * make sgr for tek4107 agree with other caps -TD
# * make sgr for ndr9500 agree with other caps -TD
# * make sgr for sco-ansi agree with other caps -TD
# * make sgr for d410 agree with other caps -TD
# * make sgr for d210 agree with other caps -TD
# * make sgr for d470c, d470c-7b agree with other caps -TD
#
# 2012-05-12
# * rewrite vt520 entry based on vt420 -TD
# * corrected 'op' for bterm (report by Samuel Thibault) -TD
#
# 2012-06-02
# * add kdch1 to wsvt25 entry from NetBSD CVS (reported by David Lord,
# analysis by Martin Husemann).
# * add cnorm/civis to wsvt25 entry from NetBSD CVS (report/analysis by
# Onno van der Linden).
# * add kdch1 aka "Remove" to vt220 and vt220-8 entries -TD
# * add kdch1, etc., to qvt108 -TD
# * add dl1/il1 to some entries based on dl/il values -TD
# * add dl to simpleterm -TD
#
# 2012-06-10
# * modify some older xterm entries to align with xterm source -TD
# * separate "xterm-old" alias from "xterm-r6" -TD
#
# 2012-07-28
# * add E3 to xterm-basic and putty -TD
#
# 2012-08-11
# * add nsterm-256color, make this the default nsterm -TD
# * remove bw from nsterm-bce, per testing with tack -TD
#
# 2012-10-12
# * add vte-2012, gnome-2012, making these the defaults for vte/gnome
# (patch by Christian Persch).
#
# 2012-11-02
# * reviewed vte-2012, reverted most of the change since it was incorrect
# based on testing with tack -TD
# * un-cancel the initc in vte-256color, since this was implemented
# starting with version 0.20 in 2009 -TD
#
# 2013-03-16
# * correct typo in sgr string for sun-color,
# add bold for consistency with sgr,
# change smso for consistency with sgr -TD
# * correct typo in sgr string for terminator -TD
# * add blink to the attributes masked by ncv in linux-16color (report
# by Benjamin Sittler)
#
# 2013-03-23
# * change initialization for vt220, similar entries for consistency
# with cursor-key strings (NetBSD #47674) -TD
# * further improvements to linux-16color (Benjamin Sittler)
#
# 2013-05-11
# * move nsterm-related entries out of "obsolete" section to more
# plausible "ansi consoles" -TD
# * additional cleanup of table-of-contents by reordering -TD
#
# 2013-06-07
# * added note to clarify Terminal.app's non-emulation of the various
# terminal types listed in the preferences dialog -TD
#
# 2013-11-02
# * use TS extension to describe xterm's title-escapes -TD
# * modify terminator and nsterm-s to use xterm+sl-twm building block -TD
# * update hurd.ti, add xenl to reflect 2011-03-06 change in
# http://git.savannah.gnu.org/cgit/hurd/hurd.git/log/console/display.c
# (Debian #727119).
# * simplify pfkey expression in ansi.sys -TD
#
# 2013-11-10
# * split-out building blocks xterm+sm+1002 and xterm+sm+1003 -TD
#
# 2014-02-22
# * updated notes for wsvt25 based on tack and vttest -TD
# * add teken entry to show actual properties of FreeBSD's "xterm"
# console -TD
#
# 2014-03-22
# * add terminology entry -TD
# * add mlterm3 entry, use that as "mlterm" -TD
# * inherit mlterm-256color from mlterm -TD
#
# 2014-03-23
# * fix typo in "mlterm" entry (report by Gabriele Balducci) -TD
#
# 2014-03-30
# * cancel ccc in putty-256color and konsole-256color for consistency
# with the cancelled initc capability (patch by Sven Zuhlsdorf).
# * add xterm+256setaf building block for various terminals which only
# get the 256-color feature half-implemented -TD
# * updated "st" entry (leaving the 0.1.1 version as "simpleterm") to
# 0.4.1 -TD
#
# 2014-05-03
# * add vt520ansi (Mike Gran)
#
# 2014-05-24
# * correct several entries which had termcap-style padding used in
# terminfo: adm21, aj510, alto-h19, att605-pc, x820 -TD
# * correct syntax for padding in some entries: dg211, h19 -TD
# * correct ti924-8 which had confused padding versus octal escapes -TD
# * correct padding in sbi entry -TD
#
# 2014-06-07
# * update xterm-new to xterm patch #305 -TD
# + change screen's smso to use SGR 7 (ECMA-80 reverse) rather than SGR 3
# (italic). This was a long-ago typo in screen 3.1.1 which was
# overlooked until a few terminal emulators implemented the feature -TD
#
# 2014-06-09
# > fix regression in screen terminfo entries (reports by Christian
# Ebert, Gabriele Balducci) -TD
# + revert the change to screen; see notes for why this did not work -TD
# + cancel sitm/ritm for entries which extend "screen", to work around
# screen's hardcoded behavior for SGR 3 -TD
#
# 2014-06-14
# + modify sgr for screen.xterm-new to support dim capability -TD
# + add dim capability to nsterm+7 -TD
# + cancel dim capability for iterm -TD
# + add dim, invis capabilities to vte-2012 -TD
# + add sitm/ritm to konsole-base and mlterm3 -TD
#
# 2014-10-06
# + add xterm-1005 and xterm-1006 entries, with suggested extension
# capability "xm" -TD
#
# 2014-10-07
# + update test-report for mrxvt -TD
#
# 2014-10-11
# + add xterm-x10mouse, xterm-x11mouse, etc. -TD
#
# 2014-10-18
# + reviewed terminology 0.6.1, add function key definitions. None of
# the vt100-compatibility issues were improved -TD
#
# 2015-04-22
# + add 'dim' capability to screen entry (report by Leonardo B Schenkel)
# + add several key definitions to nsterm-bce to match preconfigured
# keys, e.g., with OSX 10.9 and 10.10 (report by Leonardo B Schenkel)
#
# 2015-05-02
# + remove unnecessary ';' from E3 capabilities -TD
# + add tmux entry, derived from screen (patch by Nicholas Marriott).
# + split-out recent change to nsterm-bce as nsterm-build326, and add
# nsterm-build342 to reflect changes with successive releases of OSX
# (discussion with Leonardo B Schenkel)
# + add xon, ich1, il1 to ibm3161 (patch by Stephen Powell,
# Debian #783806)
#
# 2015-05-17
# + remove screen-bce.mlterm, since mlterm does not do "bce" -TD
# + add several screen.XXX entries to support the respective variations
# for 256 colors -TD
#
# 2015-05-23
# + add putty+fnkeys* building-block entries -TD
#
# 2015-05-30
# + remove spurious "%;" from st entry (report by Daniel Pitts) -TD
# + add vte-2014, update vte to use that -TD
#
# 2015-06-27
# + comment-out "screen.xterm" entry, and inherit screen.xterm-256color
# from xterm-new (report by Richard Birkett) -TD
#
# 2015-07-25
# + add status line to tmux via xterm+sl (patch by Nicholas Marriott).
# + fixes for st 0.5 from testing with tack -TD
#
# 2015-10-24
# + updated minitel entries to fix kel problem with emacs, and add
# minitel1b-nb (Alexandre Montaron).
# + reviewed/updated nsterm entry Terminal.app in OSX -TD
# + replace some dead URLs in commands with equivalents from the
# Internet Archive -TD
#
# 2015-11-14
# + add bold to pccon+sgr+acs and pccon-base (Tati Chevron).
# + add keys f12-f124 to pccon+keys (Tati Chevron).
#
# 2015-11-21
# + fix some inconsistencies in the pccon* entries -TD
#
# 2015-11-28
# + add viewdata (Alexandre Montaron).
#
# 2016-01-16
# + tidy up comments about hardcoded 256color palette (report by
# Leonardo Brondani Schenkel) -TD
# + add putty-noapp entry, and amend putty entry to use application mode
# for better consistency with xterm (report by Leonardo Brondani
# Schenkel) -TD
#
# 2016-04-23
# + add 'oc' capability to xterm+256color, allowing palette reset for
# xterm -TD
#
# 2016-05-14
# + modify linux2.6 entry to improve line-drawing -TD
# + make linux3.0 entry the default linux entry (Debian #823658) -TD
#
# 2016-05-29
# + modify rs1 for xterm-16color, xterm-88color and xterm-256color to
# reset palette using "oc" string as in linux -TD
#
# 2016-06-11
# + use ANSI reply for u8 in xterm-new, to reflect vt220-style responses
# that could be returned -TD
# + added a few capabilities fixed in recent vte -TD
#
# 2016-08-17
# + correct a typo in interix -TD
#
# 2016-09-24
# + updated minitel entries to use status line with screen(1), as well as
# printing special G2 videotex chars like french accentuated glyph
# using special cap XC= (patch by Alexandre Montaron).
#
# 2016-10-01
# + add linux-m1 minitel entries (patch by Alexandre Montaron).
# + correct rs2 string for vt100-nam -TD
#
# 2016-11-26
# + modify linux-16color to not mask dim, standout or reverse with the
# ncv capability -TD
# + add 0.1sec mandatory delay to flash capabilities using the VT100
# reverse-video control -TD
# + omit selection of ISO-8859-1 for G0 in enacs capability from linux2.6
# entry, to avoid conflict with the user-defined mapping. The reset
# feature will use ISO-8859-1 in any case (Mikulas Patocka).
#
# 2016-12-30
# + merge current st description (report by Harry Gindi) -TD
#
# 2016-12-31
# + modify flash capability for linux and wyse entries to put the delay
# between the reverse/normal escapes rather than after -TD
#
# 2017-01-28
# + minor comment-fixes to help automate links to bug-urls -TD
# + add dvtm, dvtm-256color -TD
# + add settings corresponding to xterm-keys option to tmux entry to
# reflect upcoming change to make that option "on" by default
# (patch by Nicholas Marriott).
# + uncancel Ms in tmux entry (Harry Gindi, Nicholas Marriott).
# + add dumb-emacs-ansi -TD
#
# 2017-03-05
# + correct a few spelling errors in comments -TD
# + add fbterm -TD
#
# 2017-03-11
# + add vt100+4bsd building block, use that for older terminals rather
# than "vt100" which is now mostly used as a building block for
# terminal emulators -TD
# + modify vt100 rs2 string to reset vt52 mode and scrolling regions
# (report/analysis by Robert King) -TD
#
# 2017-04-01
# + minor fixes for vt100+4bsd, e.g., delay in sgr for consistency -TD
# + add smso for env230, to match sgr -TD
# + remove p7/protect from sgr in fbterm -TD
# + drop setf/setb from fbterm; setaf/setab are enough -TD
# + make xterm-pcolor sgr consistent with other capabilities -TD
# + add rmxx/smxx ECMA-48 strikeout extension to tmux and xterm-basic
# (discussion with Nicholas Marriott)
#
# 2017-04-22
# + correct missing comma-separator between string capabilities in
# icl6402 and m2-nam -TD
# + update formatting with ncurses 6.0.20170422 -TD
# + restore rmir/smir in ansi+idc to better match original ansiterm+idc,
# add alias ansiterm (report by Robert King).
#
# 2017-05-13
# + reformatted using hexadecimal numbers to improve readability -TD
#
# 2017-07-29
# + update interix entry using tack and SFU on Windows 7 Ultimate -TD
# + use ^? for kdch1 in interix (reported by Jonathan de Boyne Pollard)
# + add "rep" to xterm-new, available since 1997/01/26 -TD
# + move SGR 24 and 27 from vte-2014 to vte-2012 (request by Alain
# Williams) -TD
#
# 2017-08-16
# + update "iterm" entry -TD
# + add "iterm2" entry (report by Leonardo Brondani Schenkel) -TD
#
# 2017-08-18
# + update notes on user-defined capabilities -TD
#
# 2017-08-26
# + fixes for "iterm2" (report by Leonardo Brondani Schenkel) -TD
#
# 2017-11-11
# + add "op" to xterm+256setaf -TD
# + reviewed terminology 1.0.0 -TD
# + reviewed st 0.7 -TD
#
# 2017-11-18
# + modify old terminology entry and a few other terminal emulators to
# account for xon -TD
# + correct sgr string for tmux, which used screen's "standout" code
# rather than the standard code (patch by Roman Kagan)
# + correct sgr/sgr0 strings in a few other cases reported by tic, making
# those correspond to the non-sgr settings where they differ, but
# otherwise use ECMA-48 consistently:
# jaixterm, aixterm, att5420_2, att4424, att500, decansi, d410-7b,
# dm80, hpterm, emu-220, hp2, iTerm2.app, mterm-ansi, ncrvt100an,
# st-0.7, vi603, vwmterm -TD
#
# 2017-12-30
# + add xterm+noalt, xterm+titlestack, xterm+alt1049, xterm+alt+title
# blocks from xterm #331 -TD
# + add xterm+direct, xterm+indirect, xterm-direct entries from xterm
# #331 -TD
# + modify xterm+256color and xterm+256setaf to use correct number of
# color pairs, for ncurses 6.1 -TD
# + add rs1 capability to xterm-256color -TD
# + modify xterm-r5, xterm-r6 and xterm-xf86-v32 to use xterm+kbs to
# match xterm #272, reflecting packager's changes -TD
# + remove "boolean" Se, Ss from st-0.7 -TD
#
# 2018-01-04
# + add konsole-direct and st-direct -TD
# + remove unsupported "Tc" capability from st-0.7; use st-direct if
# direct-colors are wanted -TD
#
# 2018-01-17
# + add vte-direct -TD
# + add XT, hpa, indn, and vpa to screen, and invis, E3 to tmux (patch by
# Pierre Carru)
#
# 2018-01-21
# + use xterm+sm+1006 in xterm-new, vte-2014 -TD
# + use xterm+x11mouse in iterm, iterm2, mlterm3 because xterm's 1006
# mode does not work with those programs. konsole is debatable -TD
# + add "termite" entry (report by Markus Pfeiffer) -TD
#
# 2018-01-27
# + trim "XT" from screen entry -TD
# + modify iterm to use xterm+sl-twm building block -TD
# + mark konsole-420pc, konsole-vt100, konsole-xf3x obsolete reflecting
# konsole's removal in 2008 -TD
# + expanded the history section of konsole to explain its flawed
# imitation of xterm's keyboard -TD
# + use xterm+x11mouse in screen.* entries because screen does not yet
# support xterm's 1006 mode -TD
# + add nsterm-build400 for macOS 10.13 -TD
# + add ansi+idc1, use that in ansi+idc adding dch for consistency -TD
# + update vte to vte-2017 -TD
# + add ecma+strikeout to vte-2017 -TD
# + add iterm2-direct -TD
# + updated teraterm, added teraterm-256color -TD
# + add mlterm-direct -TD
# + add descriptions for ANSI building-blocks -TD
#
# 2018-02-24
# + correct Ss/Ms interchange in st-0.7 entry (tmux #1264) -TD
# + fix remaining flash capabilities with trailing mandatory delays -TD
#
# 2018-03-17
# + trim some redundant capabilities from st-0.7 -TD
# + trim unnecessary setf/setb from interix -TD
#
# 2018-05-19
# + trim spurious whitespace from tmux in 2018-02-24 changes;
# fix some inconsistencies in/between tmux- and iterm2-entries for SGR
# (report by C Anthony Risinger)
# + improve iterm2 using some xterm features which it has adapted -TD
#
# 2018-06-30
# + add acsc string to vi200 (Nibby Nebbulous)
# add right/down-arrow to vi200's acsc -TD
#
# 2018-07-21
# + corrected acsc for wy50 -TD
# + add wy50 and wy60 shifted function-keys as kF1 to kF16 -TD
# + remove ansi+rep mis-added to interix in 2018-02-23 -TD
#
# 2018-07-28
# + fix typo in tvi955 -TD
# + corrected acsc for regent60 -TD
# + add alias n7900 -TD
#
# 2018-09-29
# + corrected acsc for tvi950 -TD
# + remove bogus kf0 from tvi950 -TD
# + added function-key definitions to agree with Televideo 950 manual -TD
# + add bel to tvi950 -TD
# + add shifted function-keys to regent60 -TD
# + renumber regent40 function-keys to match manual -TD
# + add cd (clr_eos) to adds200 -TD
#
# 2018-10-27
# + add OpenGL clients alacritty and kitty -TD
# + add Smulx for tmux, vte-2018 -Nicholas Marriott
#
# 2018-12-15
# + fix a typo in comments (Aaron Gyes).
# + add nsterm-build309 to replace nsterm-256color, assigning the latter
# as an alias of nsterm, to make mouse work with nsterm-256color -TD
# + base gnome-256color entry on "gnome", not "vte", for consistency -TD
#
# 2019-01-12
# + add nsterm-direct -TD
# + use SGR 1006 mouse for konsole-base -TD
# + use SGR 1006 mouse for putty -TD
# + add ti703/ti707, ti703-w/ti707-w (Robert Clausecker)
#
# 2019-02-23
# + fix typo in adds200 -TD
#
# 2019-03-30
# + add "screen5", to mention italics (report by Stefan Assmann)
# + modify description of xterm+x11hilite to eliminate unused p5 -TD
#
# 2019-05-18
# + update xterm-new to xterm patch #345 -TD
# + add/use xterm+keypad in xterm-new (report by Alain D D Williams) -TD
# + update terminator entry -TD
# + remove hard-tabs from ti703 (report by Robert Clausecker)
# + add Smol/Rmol for tmux, vte-2018 -Nicholas Marriott
#
# 2019-06-01
# + add rs1 to konsole, mlterm -TD
#
# 2019-06-08
# + add mintty, mintty-direct (Thomas Wolff)
# 2019-06-09
# + comment-out some user-defined capabilities in mintty+common to allow
# builds with existing releases 5.9-6.1 -TD
#
# 2019-06-30
# + add ms-terminal -TD
# + add vscode, vscode-direct -TD
# + use ecma+index in screen, st -TD
#
# 2019-07-06
# + add domterm -TD
# + improve comments for recent changes, add alias xterm.js -TD
#
# 2019-08-03
# + amend the change to screen, because tmux relies upon that entry
# and does not support that feature (Debian #933572) -TD
# + updated ms-terminal entry & notes -TD
# + updated kitty entry & notes -TD
# + updated alacritty+common entry & notes -TD
# + use xterm+sl-twm for consistency -TD
#
# 2019-09-22
# + correct a comment -TD
#
# 2019-10-26
# + modify linux-16color to accommodate Linux console driver change in
# early 2018 (report by Dino Petrucci).
#
# 2019-11-02
# + add "xterm-mono" to help packagers (report by Sven Joachim) -TD
#
# 2019-11-09
# + drop ich1 from rxvt-basic, Eterm and mlterm to improve compatibility
# with old non-curses programs -TD
# + reviewed st 0.8.2, updated some details -TD
# + use ansi+rep several places -TD
#
# 2020-01-12
# + update alacritty entries for 0.4.0 (prompted by patch by
-# Christian Durr) -TD
+# Christian Duerr) -TD
#
# 2020-01-18
# + spelling fixes per codespell -TD
# + improve xm example for xterm+x11mouse, xterm+sm+1006 -TD
#
+# 2020-02-22
+# + improve vt50h and vt52 based on DECScope manual -TD
+# + add/use vt52+keypad and vt52-basic -TD
+#
+# 2020-04-18
+# + use vt52+keypad in xterm-vt52, from xterm #354 -TD
+#
+# 2020-04-25
+# + use vt100+fnkeys in putty -TD
+#
+# 2020-05-02
+# + add details on the change to Linux SGR 21 in 2018 -TD
+# + add xterm-direct16 and xterm-direct256 -TD
+#
+# 2020-05-03
+# + fix some dead URLs -TD
+#
+# 2020-05-16
+# + update notes on vscode / xterm.js -TD
+#
+# 2020-05-30
+# + re-enable "bel" in konsole-base (report by Nia Huang)
+# + add linux-s entry (patch by Alexandre Montaron).
+#
+# 2020-06-06
+# + add xterm+256color2, xterm+88color2, to deprecate nonstandard usage
+# in xterm+256color, xterm+88color -TD
+# + add shifted Linux console keys in linux+sfkeys entry for
+# screen.linux (report by Alexandre Montaron).
+# + use vt100+enq in screen (report by Alexandre Montaron).
+# + add screen.linux-s alias (suggested by Alexandre Montaron).
+#
+# 2020-07-11
+# + fix pound-sign mapping in acsc of linux2.6 entry (report by Ingo
+# Bruckl).
+#
+# 2020-08-28
+# + correct icl6404 csr (report by Florian Weimer).
+# + correct ti916 cup (report by Florian Weimer).
+# + improve ndr9500 (report by Florian Weimer).
+#
+# 2020-09-05
+# + correct description of vt330/vt340 (Ross Combs).
+#
+# 2020-09-19
+# + update mlterm3 for 3.9.0 (report by Premysl Eric Janouch).
+#
+# 2020-09-29
+# + add tmux-direct (tmux #2370)
+# + simplify mlterm initialization with DECSTR -TD
+# + change tmux's kbs to ^? (report by Premysl Eric Janouch)
+#
+# 2020-10-10
+# + correct sgr in aaa+rv (report by Florian Weimer) -TD
+# + fix some sgr inconsistencies in d230c, ibm6153, ibm6154,
+# ncrvt100an -TD
+#
+# 2020-10-17
+# + expanded notes about tek4107 -TD
+#
+# 2020-11-07
+# + update kitty+common -TD
+# + add putty+screen and putty-screen (suggested by Alexandre Montaron).
+#
+# 2020-11-28
+# + add Smulx to alacritty (Christian Duerr).
+# + add rep to PuTTY -TD
+# + add putty+keypad -TD
+#
+# 2020-12-05
+# + correct mlterm3 kf1-kf4 (Debian #975322) -TD
+# + add flash to mlterm3 -TD
+#
+# 2020-12-27
+# + update terminology to 1.8.1 -TD
+#
+# 2021-01-16
+# + add comment for linux2.6 regarding CONFIG_CONSOLE_TRANSLATIONS
+# (report by Patrick McDermott) -TD
+#
+# 2021-01-25
+# + split-out att610+cvis, vt220+cvis, vt220+cvis8 -TD
+# + add vt220-base, for terminal emulators which generally have not
+# supported att610's blinking cursor control -TD
+# + use vt220+cvis in vt220, etc -TD
+# + use att610+cvis, xterm+tmux and ansi+enq in kitty -TD
+# + use vt220+cvis in st, terminology, termite since they ignore
+# blinking-cursor detail in att610+cvis -TD
+#
+# 2021-02-20
+# + add/use vt220+pcedit and vt220+vtedit -TD
+# + add scrt/securecrt and absolute -TD
+# + add nel to xterm-new, though supported since X11R5 -TD
+# + add/use xterm+nofkeys -TD
+# + move use of ecma+italics from xterm-basic to xterm+nofkeys -TD
+#
######## SHANTIH! SHANTIH! SHANTIH!
diff --git a/contrib/ncurses/mk-1st.awk b/contrib/ncurses/mk-1st.awk
index 480baad67ec8..74bc2ebe8384 100644
--- a/contrib/ncurses/mk-1st.awk
+++ b/contrib/ncurses/mk-1st.awk
@@ -1,554 +1,568 @@
-# $Id: mk-1st.awk,v 1.106 2020/02/02 23:34:34 tom Exp $
+# $Id: mk-1st.awk,v 1.109 2020/08/31 23:49:24 tom Exp $
##############################################################################
# Copyright 2018,2020 Thomas E. Dickey #
# Copyright 1998-2016,2017 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey
#
# Generate list of objects for a given model library
# Variables:
# name (library name, e.g., "ncurses", "panel", "forms", "menus")
# traces ("all" or "DEBUG", to control whether tracing is compiled in)
# MODEL (e.g., "DEBUG", uppercase; toupper is not portable)
# CXX_MODEL (e.g., "DEBUG", uppercase)
# model (directory into which we compile, e.g., "obj")
# prefix (e.g., "lib", for Unix-style libraries)
# suffix (e.g., "_g.a", for debug libraries)
# subset ("none", "base", "base+ext_funcs" or "termlib", etc.)
# driver ("yes" or "no", depends on --enable-term-driver)
# ShlibVer ("rel", "abi" or "auto", to augment DoLinks variable)
# ShlibVerInfix ("yes" or "no", determines location of version #)
# SymLink ("ln -s", etc)
# TermlibRoot ("tinfo" or other root for libterm.so)
# TermlibSuffix (".so" or other suffix for libterm.so)
# ReLink ("yes", or "no", flag to rebuild shared libs on install)
# ReRanlib ("yes", or "no", flag to rerun ranlib for installing static)
# DoLinks ("yes", "reverse" or "no", flag to add symbolic links)
# rmSoLocs ("yes" or "no", flag to add extra clean target)
# ldconfig (path for this tool, if used)
# overwrite ("yes" or "no", flag to add link to libcurses.a
# depend (optional dependencies for all objects, e.g, ncurses_cfg.h)
# host (cross-compile host, if any)
# libtool_version (libtool "-version-info" or "-version-number")
#
# Notes:
# CLIXs nawk does not like underscores in command-line variable names.
# Mixed-case variable names are ok.
# HP/UX requires shared libraries to have executable permissions.
#
function is_ticlib() {
return ( subset ~ /^ticlib$/ );
}
function is_termlib() {
return ( subset ~ /^(ticlib\+)?termlib((\+[^+ ]+)*\+[a-z_]+_tinfo)?$/ );
}
# see lib_name
function lib_name_of(a_name) {
return sprintf("%s%s%s", prefix, a_name, suffix)
}
# see imp_name
function imp_name_of(a_name) {
if (ShlibVerInfix == "cygdll" || ShlibVerInfix == "msysdll" || ShlibVerInfix == "mingw") {
result = sprintf("%s%s%s.a", prefix, a_name, suffix);
- } else {
+ } else if (ShlibVerInfix == "msvcdll") {
+ result = sprintf("%s%s%s.lib", prefix, a_name, suffix);
+ } else{
result = "";
}
return result;
}
# see abi_name
function abi_name_of(a_name) {
if (ShlibVerInfix == "cygdll") {
result = sprintf("%s%s$(ABI_VERSION)%s", "cyg", a_name, suffix);
} else if (ShlibVerInfix == "msysdll") {
result = sprintf("%s%s$(ABI_VERSION)%s", "msys-", a_name, suffix);
- } else if (ShlibVerInfix == "mingw") {
+ } else if (ShlibVerInfix == "mingw" || ShlibVerInfix == "msvcdll") {
result = sprintf("%s%s$(ABI_VERSION)%s", prefix, a_name, suffix);
} else if (ShlibVerInfix == "yes") {
result = sprintf("%s%s.$(ABI_VERSION)%s", prefix, a_name, suffix);
} else {
result = sprintf("%s.$(ABI_VERSION)", lib_name_of(a_name));
}
return result;
}
# see rel_name
function rel_name_of(a_name) {
if (ShlibVerInfix == "cygdll") {
result = sprintf("%s%s$(REL_VERSION)%s", "cyg", a_name, suffix);
} else if (ShlibVerInfix == "msysdll") {
result = sprintf("%s%s$(ABI_VERSION)%s", "msys-", a_name, suffix);
- } else if (ShlibVerInfix == "mingw") {
+ } else if (ShlibVerInfix == "mingw" || ShlibVerInfix == "msvcdll") {
result = sprintf("%s%s$(REL_VERSION)%s", prefix, a_name, suffix);
} else if (ShlibVerInfix == "yes") {
result = sprintf("%s%s.$(REL_VERSION)%s", prefix, a_name, suffix);
} else {
result = sprintf("%s.$(REL_VERSION)", lib_name_of(a_name));
}
return result;
}
# see end_name
function end_name_of(a_name) {
if ( MODEL != "SHARED" ) {
result = lib_name_of(a_name);
} else if ( DoLinks == "reverse") {
result = lib_name_of(a_name);
} else {
if ( ShlibVer == "rel" ) {
result = rel_name_of(a_name);
- } else if ( ShlibVer == "abi" || ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw" ) {
+ } else if ( ShlibVer == "abi" || ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw" || ShlibVer == "msvcdll" ) {
result = abi_name_of(a_name);
} else {
result = lib_name_of(a_name);
}
}
return result
}
function symlink(src,dst) {
if ( src != dst ) {
if ( SymLink !~ /.*-f.*/ ) {
printf "rm -f %s; ", dst
}
printf "$(LN_S) %s %s; ", src, dst
}
}
function rmlink(directory, dst) {
if ( dst != "" ) {
printf "\t-rm -f %s/%s\n", directory, dst
}
}
function removelinks(directory) {
nlinks = 0;
links[nlinks++] = end_name;
if ( DoLinks == "reverse" ) {
if ( ShlibVer == "rel" ) {
links[nlinks++] = abi_name;
links[nlinks++] = rel_name;
} else if ( ShlibVer == "abi" ) {
links[nlinks++] = abi_name;
}
} else {
if ( ShlibVer == "rel" ) {
links[nlinks++] = abi_name;
links[nlinks++] = lib_name;
} else if ( ShlibVer == "abi" ) {
links[nlinks++] = lib_name;
}
}
for (j = 0; j < nlinks; ++j) {
found = 0;
for (k = 0; k < j; ++k ) {
if ( links[j] == links[k] ) {
found = 1;
break;
}
}
if ( !found ) {
rmlink(directory, links[j]);
}
}
}
function make_shlib(objs, shlib_list) {
printf "\t$(MK_SHARED_LIB) $(%s_OBJS) $(%s)\n", objs, shlib_list
}
function sharedlinks(directory) {
- if ( ShlibVer != "auto" && ShlibVer != "cygdll" && ShlibVer != "msysdll" && ShlibVer != "mingw" ) {
+ if ( ShlibVer != "auto" && ShlibVer != "cygdll" && ShlibVer != "msysdll" && ShlibVer != "mingw" && ShlibVer != "msvcdll" ) {
printf "\tcd %s && (", directory
if ( DoLinks == "reverse" ) {
if ( ShlibVer == "rel" ) {
symlink(lib_name, abi_name);
symlink(abi_name, rel_name);
} else if ( ShlibVer == "abi" ) {
symlink(lib_name, abi_name);
}
} else {
if ( ShlibVer == "rel" ) {
symlink(rel_name, abi_name);
symlink(abi_name, lib_name);
} else if ( ShlibVer == "abi" ) {
symlink(abi_name, lib_name);
}
}
printf ")\n"
}
}
# termlib may be named explicitly via "--with-termlib=XXX", which overrides
# any suffix. Temporarily override "suffix" to account for this.
function termlib_end_of() {
termlib_save_suffix = suffix;
suffix = TermlibSuffix;
termlib_temp_result = end_name_of(TermlibRoot);
suffix = termlib_save_suffix;
return termlib_temp_result;
}
function shlib_build(directory) {
dst_libs = sprintf("%s/%s", directory, end_name);
printf "%s : \\\n", dst_libs
if (subset == "ticlib" && driver == "yes" ) {
base = name;
sub(/^tic/, "ncurses", base); # workaround for "w"
printf "\t\t%s/%s \\\n", directory, end_name_of(base);
}
if (subset ~ /^base/ || subset == "ticlib" ) {
save_suffix = suffix
sub(/^[^.]\./,".",suffix)
if (directory != "../lib") {
printf "\t\t%s/%s \\\n", "../lib", termlib_end_of();
}
printf "\t\t%s/%s \\\n", directory, termlib_end_of();
suffix = save_suffix
}
printf "\t\t$(RESULTING_SYMS) $(%s_OBJS)\n", OBJS
printf "\t@echo linking $@\n"
printf "\t@mkdir -p %s\n", directory
if ( ReLink != "yes" ) {
printf "\t@sleep 1\n"
}
if ( is_ticlib() ) {
make_shlib(OBJS, "TICS_LIST")
} else if ( is_termlib() ) {
make_shlib(OBJS, "TINFO_LIST")
} else {
make_shlib(OBJS, "SHLIB_LIST")
}
sharedlinks(directory)
}
function shlib_install(directory) {
src_lib1 = sprintf("../lib/%s", end_name);
dst_lib1 = sprintf("%s/%s", directory, end_name);
printf "%s : \\\n", dst_lib1
printf "\t\t%s \\\n", directory
printf "\t\t%s\n", src_lib1
printf "\t@echo installing $@\n"
printf "\t$(INSTALL_LIB) %s %s\n", src_lib1, dst_lib1;
sharedlinks(directory)
}
function install_dll(directory,filename) {
src_name = sprintf("../lib/%s", filename);
dst_name = sprintf("$(DESTDIR)%s/%s", directory, filename);
printf "\t@echo installing %s as %s\n", src_name, dst_name
if ( directory == "$(bindir)" ) {
program = "$(INSTALL) -m 755";
} else {
program = "$(INSTALL_LIB)";
}
printf "\t%s %s %s\n", program, src_name, dst_name
}
+function in_subset(value) {
+ value = " " value " ";
+ check = subset;
+ gsub("[+]", " ", check);
+ check = " " check " ";
+ return index(check,value);
+ }
BEGIN {
TOOL_PREFIX = "";
found = 0;
using = 0;
}
/^@/ {
using = 0
if (subset == "none") {
using = 1
- } else if (index(subset,$2) > 0) {
+ } else if (in_subset($2) > 0) {
if (using == 0) {
if (found == 0) {
if ( name ~ /^.*\+\+.*/ ) {
if ( CXX_MODEL == "NORMAL" && MODEL == "SHARED" ) {
print ""
printf "# overriding model from %s to match CXX_MODEL\n", MODEL;
MODEL = "NORMAL";
suffix = ".a";
DoLinks = "no";
}
}
print ""
printf "# generated by mk-1st.awk (subset=%s)\n", subset
printf "# name: %s\n", name
printf "# traces: %s\n", traces
printf "# MODEL: %s\n", MODEL
printf "# CXX_MODEL: %s\n", CXX_MODEL
printf "# model: %s\n", model
printf "# prefix: %s\n", prefix
printf "# suffix: %s\n", suffix
printf "# subset: %s\n", subset
printf "# driver: %s\n", driver
printf "# ShlibVer: %s\n", ShlibVer
printf "# ShlibVerInfix: %s\n", ShlibVerInfix
printf "# SymLink: %s\n", SymLink
printf "# TermlibRoot: %s\n", TermlibRoot
printf "# TermlibSuffix: %s\n", TermlibSuffix
printf "# ReLink: %s\n", ReLink
printf "# ReRanlib: %s\n", ReRanlib
printf "# DoLinks: %s\n", DoLinks
printf "# rmSoLocs: %s\n", rmSoLocs
printf "# ldconfig: %s\n", ldconfig
printf "# overwrite: %s\n", overwrite
printf "# depend: %s\n", depend
printf "# host: %s\n", host
print ""
}
using = 1
}
if ( is_ticlib() ) {
OBJS = MODEL "_P"
} else if ( is_termlib() ) {
OBJS = MODEL "_T"
} else {
OBJS = MODEL
}
}
}
/^[@#]/ {
next
}
$1 ~ /trace/ {
if (traces != "all" && traces != MODEL && $1 != "lib_trace")
next
}
{
if (using \
&& ( $1 != "link_test" ) \
&& ( $2 == "lib" \
|| $2 == "progs" \
|| $2 == "c++" \
|| $2 == "tack" ))
{
if ( found == 0 )
{
printf "%s_OBJS =", OBJS
if ( $2 == "lib" ) {
found = 1;
} else if ( $2 == "c++" ) {
TOOL_PREFIX = "CXX_";
found = 1;
} else {
found = 2;
}
if ( $2 == "c++" ) {
CC_NAME="CXX"
CC_FLAG="CXXFLAGS"
} else {
CC_NAME="CC"
CC_FLAG="CFLAGS"
}
}
printf " \\\n\t../%s/%s$o", model, $1;
}
}
END {
print ""
if ( found != 0 )
{
printf "\n$(%s_OBJS) : %s\n", OBJS, depend
}
if ( found == 1 )
{
print ""
lib_name = lib_name_of(name);
if ( MODEL == "SHARED" )
{
abi_name = abi_name_of(name);
rel_name = rel_name_of(name);
imp_name = imp_name_of(name);
end_name = end_name_of(name);
shlib_build("../lib")
print ""
print "install \\"
print "install.libs \\"
- if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw") {
+ if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw" || ShlibVer == "msvcdll") {
dst_dirs = "$(DESTDIR)$(bindir) $(DESTDIR)$(libdir)";
printf "install.%s :: %s $(LIBRARIES)\n", name, dst_dirs
install_dll("$(bindir)",end_name);
install_dll("$(libdir)",imp_name);
} else {
lib_dir = "$(DESTDIR)$(libdir)";
printf "install.%s :: %s/%s\n", name, lib_dir, end_name
print ""
if ( ReLink == "yes" ) {
shlib_build(lib_dir)
} else {
shlib_install(lib_dir)
}
}
if ( overwrite == "yes" && name == "ncurses" )
{
- if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw") {
- ovr_name = sprintf("libcurses%s.a", suffix)
+ if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw" || SlibVer == "msvcdll") {
+ if (ShlibVer == "msvcdll") {
+ curses_prefix = ""
+ } else {
+ curses_prefix = "lib"
+ }
+ ovr_name = sprintf("%scurses%s.a", curses_prefix, suffix)
printf "\t@echo linking %s to %s\n", imp_name, ovr_name
printf "\tcd $(DESTDIR)$(libdir) && ("
symlink(imp_name, ovr_name)
printf ")\n"
} else {
ovr_name = sprintf("libcurses%s", suffix)
printf "\t@echo linking %s to %s\n", end_name, ovr_name
printf "\tcd $(DESTDIR)$(libdir) && ("
symlink(end_name, ovr_name)
printf ")\n"
}
}
if ( ldconfig != "" && ldconfig != ":" ) {
printf "\t- test -z \"$(DESTDIR)\" && %s\n", ldconfig
}
print ""
print "uninstall \\"
print "uninstall.libs \\"
printf "uninstall.%s ::\n", name
- if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw") {
+ if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw" || ShlibVer == "msvcdll") {
printf "\t@echo uninstalling $(DESTDIR)$(bindir)/%s\n", end_name
printf "\t-@rm -f $(DESTDIR)$(bindir)/%s\n", end_name
printf "\t@echo uninstalling $(DESTDIR)$(libdir)/%s\n", imp_name
printf "\t-@rm -f $(DESTDIR)$(libdir)/%s\n", imp_name
} else {
printf "\t@echo uninstalling $(DESTDIR)$(libdir)/%s\n", end_name
removelinks("$(DESTDIR)$(libdir)")
if ( overwrite == "yes" && name == "ncurses" )
{
ovr_name = sprintf("libcurses%s", suffix)
printf "\t-@rm -f $(DESTDIR)$(libdir)/%s\n", ovr_name
}
}
if ( rmSoLocs == "yes" ) {
print ""
print "mostlyclean \\"
print "clean ::"
printf "\t-@rm -f so_locations\n"
}
}
else if ( MODEL == "LIBTOOL" )
{
end_name = lib_name;
printf "../lib/%s : $(%s_OBJS)\n", lib_name, OBJS
if ( is_ticlib() ) {
which_list = "TICS_LIST";
} else if ( is_termlib() ) {
which_list = "TINFO_LIST";
} else {
which_list = "SHLIB_LIST";
}
printf "\tcd ../lib && $(LIBTOOL_LINK) $(%s) $(%s) \\\n", CC_NAME, CC_FLAG;
printf "\t\t-o %s $(%s_OBJS:$o=.lo) \\\n", lib_name, OBJS;
printf "\t\t-rpath $(libdir) \\\n";
printf "\t\t%s $(NCURSES_MAJOR):$(NCURSES_MINOR) $(LT_UNDEF) $(%s) $(LDFLAGS)\n", libtool_version, which_list;
print ""
print "install \\"
print "install.libs \\"
printf "install.%s :: $(DESTDIR)$(libdir) ../lib/%s\n", name, lib_name
printf "\t@echo installing ../lib/%s as $(DESTDIR)$(libdir)/%s\n", lib_name, lib_name
printf "\tcd ../lib; $(LIBTOOL_INSTALL) $(INSTALL) %s $(DESTDIR)$(libdir)\n", lib_name
print ""
print "uninstall \\"
print "uninstall.libs \\"
printf "uninstall.%s ::\n", name
printf "\t@echo uninstalling $(DESTDIR)$(libdir)/%s\n", lib_name
printf "\t-@$(LIBTOOL_UNINSTALL) rm -f $(DESTDIR)$(libdir)/%s\n", lib_name
}
else
{
end_name = lib_name;
printf "../lib/%s : $(%s_OBJS)\n", lib_name, OBJS
# workaround: binutils' ranlib tries to be clever with
# timestamps, by pretending its update took no time, confusing
# the make utility.
if ( ReLink != "yes" ) {
printf "\t@sleep 1\n"
}
printf "\t$(%sAR) $(%sARFLAGS) $@ $?\n", TOOL_PREFIX, TOOL_PREFIX;
printf "\t$(RANLIB) $@\n"
if ( host == "vxworks" )
{
printf "\t$(LD) $(LD_OPTS) $? -o $(@:.a=$o)\n"
}
print ""
print "install \\"
print "install.libs \\"
printf "install.%s :: $(DESTDIR)$(libdir) ../lib/%s\n", name, lib_name
printf "\t@echo installing ../lib/%s as $(DESTDIR)$(libdir)/%s\n", lib_name, lib_name
printf "\t$(INSTALL_DATA) ../lib/%s $(DESTDIR)$(libdir)/%s\n", lib_name, lib_name
if ( overwrite == "yes" && lib_name == "libncurses.a" )
{
printf "\t@echo linking libcurses.a to libncurses.a\n"
printf "\t-@rm -f $(DESTDIR)$(libdir)/libcurses.a\n"
printf "\t(cd $(DESTDIR)$(libdir) && "
symlink("libncurses.a", "libcurses.a")
printf ")\n"
}
if ( ReRanlib == "yes" )
{
printf "\t$(RANLIB) $(DESTDIR)$(libdir)/%s\n", lib_name
}
if ( host == "vxworks" )
{
printf "\t@echo installing ../lib/lib%s$o as $(DESTDIR)$(libdir)/lib%s$o\n", name, name
printf "\t$(INSTALL_DATA) ../lib/lib%s$o $(DESTDIR)$(libdir)/lib%s$o\n", name, name
}
print ""
print "uninstall \\"
print "uninstall.libs \\"
printf "uninstall.%s ::\n", name
printf "\t@echo uninstalling $(DESTDIR)$(libdir)/%s\n", lib_name
printf "\t-@rm -f $(DESTDIR)$(libdir)/%s\n", lib_name
if ( overwrite == "yes" && lib_name == "libncurses.a" )
{
printf "\t@echo linking libcurses.a to libncurses.a\n"
printf "\t-@rm -f $(DESTDIR)$(libdir)/libcurses.a\n"
}
if ( host == "vxworks" )
{
printf "\t@echo uninstalling $(DESTDIR)$(libdir)/lib%s$o\n", name
printf "\t-@rm -f $(DESTDIR)$(libdir)/lib%s$o\n", name
}
}
print ""
print "clean ::"
removelinks("../lib");
print ""
print "mostlyclean::"
printf "\t-rm -f $(%s_OBJS)\n", OBJS
if ( MODEL == "LIBTOOL" ) {
printf "\t-$(LIBTOOL_CLEAN) rm -f $(%s_OBJS:$o=.lo)\n", OBJS
}
}
else if ( found == 2 )
{
print ""
print "mostlyclean::"
printf "\t-rm -f $(%s_OBJS)\n", OBJS
if ( MODEL == "LIBTOOL" ) {
printf "\t-$(LIBTOOL_CLEAN) rm -f $(%s_OBJS:$o=.lo)\n", OBJS
}
print ""
print "clean ::"
printf "\t-rm -f $(%s_OBJS)\n", OBJS
if ( MODEL == "LIBTOOL" ) {
printf "\t-$(LIBTOOL_CLEAN) rm -f $(%s_OBJS:$o=.lo)\n", OBJS
}
}
}
# vile:ts=4 sw=4
diff --git a/contrib/ncurses/mk-2nd.awk b/contrib/ncurses/mk-2nd.awk
index 41b0f9222a33..3fe7ed3d22a0 100644
--- a/contrib/ncurses/mk-2nd.awk
+++ b/contrib/ncurses/mk-2nd.awk
@@ -1,147 +1,154 @@
-# $Id: mk-2nd.awk,v 1.20 2020/02/02 23:34:34 tom Exp $
+# $Id: mk-2nd.awk,v 1.22 2020/08/31 23:49:17 tom Exp $
##############################################################################
# Copyright 2020 Thomas E. Dickey #
# Copyright 1998-2004,2005 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey
#
# Generate compile-rules for the modules that we are using in libraries or
# programs. We are listing them explicitly because we have turned off the
# suffix rules (to force compilation with the appropriate flags). We could use
# make-recursion but that would result in makefiles that are useless for
# development.
#
# Variables:
# model directory into which objects are compiled.
# MODEL (uppercase version of "model"; toupper is not portable)
# echo (yes iff we will show the $(CC) lines)
# subset ("none", "base", "base+ext_funcs" or "termlib")
# crenames ("yes" or "no", flag to control whether -c & -o options are used)
# cxxrenames ("yes" or "no", flag to control whether -c & -o options are used)
# traces ("all" or "DEBUG", to control whether tracing is compiled in)
# srcdir is expanded when "configure --srcdir" was used
#
# Fields in src/modules:
# $1 = module name
# $2 = progs|lib|c++
# $3 = source-directory
#
# Fields in src/modules past $3 are dependencies
#
+function in_subset(value) {
+ value = " " value " ";
+ check = subset;
+ gsub("[+]", " ", check);
+ check = " " check " ";
+ return index(check,value);
+ }
BEGIN {
found = 0
using = 0
}
/^@/ {
using = 0
if (subset == "none") {
using = 1
- } else if (index(subset,$2) > 0) {
+ } else if (in_subset($2) > 0) {
if (using == 0) {
if (found == 0) {
print ""
print "# generated by mk-2nd.awk"
printf "# model: %s\n", model
printf "# MODEL: %s\n", MODEL
printf "# echo: %s\n", echo
printf "# subset: %s\n", subset
printf "# crenames: %s\n", crenames
printf "# cxxrenames: %s\n", cxxrenames
printf "# traces: %s\n", traces
printf "# srcdir: %s\n", srcdir
}
using = 1
}
}
}
/^[@#]/ {
next
}
$1 ~ /trace/ {
if (traces != "all" && traces != MODEL && $1 != "lib_trace")
next
}
{
if ($0 != "" \
&& using != 0) {
found = 1
if ( $1 != "" ) {
print ""
if ( $2 == "c++" ) {
compile="CXX"
suffix=".cc"
use_c_o=cxxrenames
} else {
compile="CC"
suffix=".c"
use_c_o=crenames
}
printf "../%s/%s$o :\t%s/%s%s", model, $1, $3, $1, suffix
for (n = 4; n <= NF; n++) printf " \\\n\t\t\t%s", $n
print ""
if ( echo == "yes" )
atsign=""
else {
atsign="@"
printf "\t@echo 'compiling %s (%s)'\n", $1, model
}
printf "\t%s", atsign;
if ( use_c_o != "yes" ) {
printf "cd ../%s; ", model;
}
# The choice here is between
# base+ext_funcs and
# termlib+ext_tinfo
# but they may appear in the same value.
if ( subset ~ /base/ ) {
mycflags=""
} else if ( subset ~ /termlib/ ) {
mycflags=" -DUSE_TERMLIB"
}
printf "$(LIBTOOL_COMPILE) $(%s) $(CFLAGS_%s)%s -c ", compile, MODEL, mycflags
if ( $3 == "." || srcdir == "." ) {
dir = $3 "/"
sub("^\\$\\(srcdir\\)/","",dir);
sub("^\\./","",dir);
printf "../%s/%s%s%s", name, dir, $1, suffix
} else {
printf "%s/%s%s", $3, $1, suffix
}
if ( use_c_o == "yes" ) {
printf " -o ../%s/%s$o", model, $1
}
} else {
printf "%s", $1
for (n = 2; n <= NF; n++) printf " %s", $n
}
print ""
}
}
END {
print ""
}
diff --git a/contrib/ncurses/mk-hdr.awk b/contrib/ncurses/mk-hdr.awk
index 377b1c3c9e8c..2fa5941ea6ed 100644
--- a/contrib/ncurses/mk-hdr.awk
+++ b/contrib/ncurses/mk-hdr.awk
@@ -1,108 +1,115 @@
-# $Id: mk-hdr.awk,v 1.5 2020/02/02 23:34:34 tom Exp $
+# $Id: mk-hdr.awk,v 1.7 2020/08/31 23:48:44 tom Exp $
##############################################################################
# Copyright 2020 Thomas E. Dickey #
# Copyright 2007-2010,2013 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey 2007
#
# Generate install/uninstall rules for header files
# Variables:
# subset ("none", "base", "base+ext_funcs" or "termlib", etc.)
# compat ("yes" or "no", flag to add link to curses.h
#
function basename(path) {
sub(/^.*\//,"",path)
return path;
}
+function in_subset(value) {
+ value = " " value " ";
+ check = subset;
+ gsub("[+]", " ", check);
+ check = " " check " ";
+ return index(check,value);
+}
BEGIN {
found = 0
using = 1
count = 0
}
/^@/ {
using = 0
if (subset == "none") {
using = 1
- } else if (index(subset,$2) > 0) {
+ } else if (in_subset($2) > 0) {
using = 1
} else {
using = 0
}
}
/^[@#]/ {
next
}
{
if (using && NF != 0) {
if (found == 0) {
print ""
print "# generated by mk-hdr.awk"
printf "# subset: %s\n", subset
printf "# compat: %s\n", compat
print ""
found = 1
}
data[count] = $1
count = count + 1
}
}
END {
if ( count > 0 )
{
print "${INCLUDEDIR} :"
print " mkdir -p $@"
print ""
print "install \\"
print "install.libs \\"
print "install.includes :: ${AUTO_SRC} ${INCLUDEDIR} \\"
for (i = 0; i < count - 1; ++i) {
printf " %s \\\n", data[i]
}
printf " %s\n", data[count - 1]
for (i = 0; i < count; ++i) {
printf " @ (cd ${INCLUDEDIR} && rm -f %s) ; ../headers.sh ${INSTALL_DATA} ${INCLUDEDIR} ${srcdir} %s\n", basename(data[i]), data[i]
if (data[i] == "curses.h" && compat == "yes") {
printf " @ (cd ${INCLUDEDIR} && rm -f ncurses.h && ${LN_S} %s ncurses.h)\n", data[i]
}
}
print ""
print "uninstall \\"
print "uninstall.libs \\"
print "uninstall.includes ::"
for (i = 0; i < count; ++i) {
printf " -@ (cd ${INCLUDEDIR} && rm -f %s)\n", basename(data[i])
if (data[i] == "curses.h" && compat == "yes") {
printf " -@ (cd ${INCLUDEDIR} && rm -f ncurses.h)\n"
}
}
}
}
# vile:ts=4 sw=4
diff --git a/contrib/ncurses/ncurses/Makefile.in b/contrib/ncurses/ncurses/Makefile.in
index b242078804c4..8f2254d3a0d4 100644
--- a/contrib/ncurses/ncurses/Makefile.in
+++ b/contrib/ncurses/ncurses/Makefile.in
@@ -1,346 +1,352 @@
-# $Id: Makefile.in,v 1.168 2020/02/02 23:34:34 tom Exp $
+# $Id: Makefile.in,v 1.178 2021/01/23 20:34:00 tom Exp $
##############################################################################
-# Copyright 2018-2019,2020 Thomas E. Dickey #
+# Copyright 2018-2020,2021 Thomas E. Dickey #
# Copyright 1998-2017,2018 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey 1996-on
#
# Makefile for ncurses source code.
#
# This makes the following:
# programs
# includes
# libraries (normal/debug/profile/shared)
#
# The variable 'srcdir' refers to the source-distribution, and can be set with
# the configure script by "--srcdir=DIR".
#
# The rules are organized to produce the libraries for the configured models,
# and the programs with the configured default model.
# turn off _all_ suffix rules; we'll generate our own
.SUFFIXES:
SHELL = @SHELL@
VPATH = @srcdir@
THIS = Makefile
-CF_MFLAGS = @cf_cv_makeflags@
+TOP_MFLAGS = @cf_cv_makeflags@ DESTDIR="$(DESTDIR)" RPATH_LIST="$(RPATH_LIST)"
@SET_MAKE@
x = @EXEEXT@
o = .@OBJEXT@
MODEL = @DFT_LWR_MODEL@
DESTDIR = @DESTDIR@
top_srcdir = @top_srcdir@
srcdir = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
includedir = @includedir@
datarootdir = @datarootdir@
datadir = @datadir@
includesubdir = @includesubdir@
INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir)
PACKAGE = @PACKAGE@
LIBTOOL = @LIBTOOL@
LIBTOOL_OPTS = @LIBTOOL_OPTS@ @EXPORT_SYMS@
LIBTOOL_CLEAN = @LIB_CLEAN@
LIBTOOL_COMPILE = @LIB_COMPILE@
LIBTOOL_LINK = @LIB_LINK@
LIBTOOL_INSTALL = @LIB_INSTALL@
LIBTOOL_UNINSTALL = @LIB_UNINSTALL@
LT_UNDEF = @LT_UNDEF@
INSTALL = @INSTALL@
INSTALL_LIB = @INSTALL@ @INSTALL_LIB@
INSTALL_PROG = @INSTALL_PROGRAM@ @INSTALL_OPT_S@
INSTALL_DATA = @INSTALL_DATA@
AR = @AR@
ARFLAGS = @ARFLAGS@
AWK = @AWK@
LD = @LD@
LN_S = @LN_S@
NM = @NM@
CTAGS = @CTAGS@
ETAGS = @ETAGS@
CC = @CC@
CPP = @CPP@
-CFLAGS = @CFLAGS@
+CFLAGS = @CFLAGS@ @EXTRA_CFLAGS@
+LIBS = @LIBS@
INCDIR = $(srcdir)/../include
-CPPFLAGS = -DHAVE_CONFIG_H -I../ncurses @CPPFLAGS@
+CPPFLAGS = -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses @CPPFLAGS@
CCFLAGS = $(CPPFLAGS) $(CFLAGS)
-BUILD_CPPFLAGS = -DHAVE_CONFIG_H -DUSE_BUILD_CC -I../ncurses -I$(srcdir) -I../include -I$(INCDIR) @BUILD_CPPFLAGS@
+BUILD_CPPFLAGS = -DHAVE_CONFIG_H -DUSE_BUILD_CC -I../ncurses -I$(srcdir) -I../include -I$(INCDIR) @BUILD_CPPFLAGS@
BUILD_CC = @BUILD_CC@
BUILD_CCFLAGS = @BUILD_CFLAGS@
BUILD_LDFLAGS = @BUILD_LDFLAGS@
BUILD_LIBS = @BUILD_LIBS@
# The executables built in this directory are used for generating source that
# is compiled into the build, or are test-programs that are not installed.
BUILD_EXEEXT = @BUILD_EXEEXT@
x = @EXEEXT@
CFLAGS_LIBTOOL = $(CCFLAGS)
-CFLAGS_NORMAL = $(CCFLAGS)
-CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE
-CFLAGS_PROFILE = $(CCFLAGS) -pg
+CFLAGS_NORMAL = $(CCFLAGS) -DNCURSES_STATIC
+CFLAGS_DEBUG = $(CCFLAGS) -DNCURSES_STATIC @CC_G_OPT@ -DTRACE
+CFLAGS_PROFILE = $(CCFLAGS) -DNCURSES_STATIC -pg
CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@
CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@)
LINK = $(LIBTOOL)
LDFLAGS = @LDFLAGS@ @LD_MODEL@
SHLIB_DIRS = -L../lib
SHLIB_LIST = $(SHLIB_DIRS) @SHLIB_LIST@ @LIBS@
TINFO_LIST = $(SHLIB_DIRS) @TINFO_LIST@ @LIBS@
TICS_LIST = $(SHLIB_DIRS) @TICS_LIST@ @LIBS@
RPATH_LIST = @RPATH_LIST@
RESULTING_SYMS = @RESULTING_SYMS@
VERSIONED_SYMS = @VERSIONED_SYMS@
MK_SHARED_LIB = @MK_SHARED_LIB@
NCURSES_MAJOR = @NCURSES_MAJOR@
NCURSES_MINOR = @NCURSES_MINOR@
REL_VERSION = @cf_cv_rel_version@
ABI_VERSION = @cf_cv_abi_version@
RANLIB = @LIB_PREP@
LIBRARIES = @Libs_To_Make@
LINT = @LINT@
LINT_OPTS = @LINT_OPTS@
LINT_LIBS = -lncurses @LIBS@
FALLBACK_LIST = @FALLBACK_LIST@
USE_BIG_STRINGS = @USE_BIG_STRINGS@
TERMINFO_CAPS = $(top_srcdir)/include/@TERMINFO_CAPS@
CAPLIST = $(TERMINFO_CAPS) $(top_srcdir)/include/Caps-ncurses
TERMINFO = @TERMINFO@
TERMINFO_SRC = @TERMINFO_SRC@
TIC_PATH = @TIC@
INFOCMP_PATH = @INFOCMP@
AUTO_SRC = \
./codes.c \
./comp_captab.c \
./comp_userdefs.c \
./expanded.c \
./fallback.c \
./lib_gen.c \
./lib_keyname.c \
./link_test.c \
./names.c \
./unctrl.c \
init_keytry.h \
keys.list
-HEADER_DEPS = \
- $(srcdir)/curses.priv.h \
- ../include/ncurses_dll.h \
+HEADER_DEPS = @INTERNALS_HDR@ \
../include/ncurses_cfg.h \
+ ../include/ncurses_def.h \
+ ../include/ncurses_dll.h \
../include/curses.h \
- $(INCDIR)/nc_panel.h \
../include/term.h \
- $(INCDIR)/term_entry.h \
- $(INCDIR)/nc_tparm.h \
+ ../include/unctrl.h \
$(INCDIR)/nc_alloc.h \
- $(INCDIR)/nc_mingw.h
+ $(INCDIR)/nc_panel.h \
+ $(INCDIR)/nc_string.h \
+ $(INCDIR)/nc_termios.h \
+ $(INCDIR)/nc_tparm.h \
+ $(INCDIR)/nc_win32.h \
+ $(INCDIR)/term_entry.h \
+ $(srcdir)/curses.priv.h \
+ $(srcdir)/new_pair.h
TEST_DEPS = ../lib/@LIB_PREFIX@ncurses@DFT_DEP_SUFFIX@
TEST_ARGS = @LDFLAGS_STATIC@ @TEST_ARGS@ @LDFLAGS_SHARED@
TEST_LDFLAGS = @LD_MODEL@ $(TEST_ARGS) @LIBS@ @LOCAL_LDFLAGS@ @LDFLAGS@
TEST_PROGS = \
captoinfo$x \
hardscroll$x \
hashmap$x \
lib_mvcur$x \
link_test$x \
report_hashing$x
LOCAL_LIBDIR = @top_builddir@/lib
base = $(srcdir)/base
serial = $(srcdir)/tty
tinfo = $(srcdir)/tinfo
trace = $(srcdir)/trace
wide = $(srcdir)/widechar
win32con = $(srcdir)/win32con
################################################################################
all libs :: $(AUTO_SRC) ../lib $(LIBRARIES)
@CHECK_BUILD@all libs :: report_offsets$(BUILD_EXEEXT)
sources: $(AUTO_SRC)
$(DESTDIR)$(bindir) \
$(DESTDIR)$(libdir) :
mkdir -p $@
../lib : ; mkdir $@
./fallback.c : $(tinfo)/MKfallback.sh
- $(SHELL) -e $(tinfo)/MKfallback.sh $(TERMINFO) $(TERMINFO_SRC) $(TIC_PATH) $(INFOCMP_PATH) $(FALLBACK_LIST) >$@
+ $(SHELL) -e $(tinfo)/MKfallback.sh $(TERMINFO) $(TERMINFO_SRC) "$(TIC_PATH)" "$(INFOCMP_PATH)" $(FALLBACK_LIST) >$@
./lib_gen.c : $(base)/MKlib_gen.sh ../include/curses.h
$(SHELL) -e $(base)/MKlib_gen.sh "$(CPP) $(CPPFLAGS)" "$(AWK)" generated <../include/curses.h >$@
init_keytry.h: make_keys$(BUILD_EXEEXT) keys.list
./make_keys$(BUILD_EXEEXT) keys.list > $@
keys.list : $(tinfo)/MKkeys_list.sh
AWK=$(AWK) $(SHELL) $(tinfo)/MKkeys_list.sh $(CAPLIST) | LC_ALL=C sort >$@
make_keys$(BUILD_EXEEXT) : \
build.priv.h \
$(tinfo)/make_keys.c \
- names.c
+ ./names.c
$(BUILD_CC) -o $@ $(BUILD_CPPFLAGS) $(BUILD_CCFLAGS) $(tinfo)/make_keys.c $(BUILD_LDFLAGS) $(BUILD_LIBS)
make_hash$(BUILD_EXEEXT) : \
build.priv.h \
$(tinfo)/make_hash.c \
../include/hashsize.h
$(BUILD_CC) -o $@ $(BUILD_CPPFLAGS) $(BUILD_CCFLAGS) $(tinfo)/make_hash.c $(BUILD_LDFLAGS) $(BUILD_LIBS)
report_offsets$(BUILD_EXEEXT) : \
$(srcdir)/curses.priv.h \
$(srcdir)/report_offsets.c
$(BUILD_CC) -o $@ $(BUILD_CPPFLAGS) $(BUILD_CCFLAGS) $(srcdir)/report_offsets.c $(BUILD_LDFLAGS) $(BUILD_LIBS)
./report_offsets$(BUILD_EXEEXT)
./expanded.c : $(srcdir)/curses.priv.h $(serial)/MKexpanded.sh
$(SHELL) -e $(serial)/MKexpanded.sh "$(CPP)" $(CPPFLAGS) > $@
./comp_captab.c: \
make_hash$(BUILD_EXEEXT) \
../include/hashsize.h \
$(tinfo)/MKcaptab.sh \
$(tinfo)/MKcaptab.awk
$(SHELL) -e $(tinfo)/MKcaptab.sh $(AWK) $(USE_BIG_STRINGS) $(tinfo)/MKcaptab.awk $(CAPLIST) > $@
./comp_userdefs.c: \
make_hash$(BUILD_EXEEXT) \
../include/hashsize.h \
$(tinfo)/MKuserdefs.sh
$(SHELL) -e $(tinfo)/MKuserdefs.sh $(AWK) $(USE_BIG_STRINGS) $(CAPLIST) > $@
./lib_keyname.c: keys.list $(base)/MKkeyname.awk
$(AWK) -f $(base)/MKkeyname.awk bigstrings=$(USE_BIG_STRINGS) keys.list > $@
./codes.c: $(tinfo)/MKcodes.awk
$(AWK) -f $(tinfo)/MKcodes.awk bigstrings=$(USE_BIG_STRINGS) $(CAPLIST) >$@
./names.c: $(tinfo)/MKnames.awk
$(AWK) -f $(tinfo)/MKnames.awk bigstrings=$(USE_BIG_STRINGS) $(CAPLIST) >$@
./unctrl.c: $(base)/MKunctrl.awk
echo | $(AWK) -f $(base)/MKunctrl.awk bigstrings=$(USE_BIG_STRINGS) >$@
tags:
$(CTAGS) *.[ch] */*.[ch]
@MAKE_UPPER_TAGS@TAGS:
@MAKE_UPPER_TAGS@ $(ETAGS) *.[ch] */*.[ch]
mostlyclean ::
-rm -f core tags TAGS *~ *.bak *.i *.ln *.atac
-test -d trace || rm -f trace
-rm -f $(TEST_PROGS)
clean :: mostlyclean
-rm -f $(AUTO_SRC)
-rm -f make_keys$(BUILD_EXEEXT)
-rm -f make_hash$(BUILD_EXEEXT)
-rm -f report_offsets$(BUILD_EXEEXT)
-rm -rf .libs *.dSYM *.map
distclean :: clean
-rm -f Makefile
realclean :: distclean
# These rules are used to allow "make -n" to work on a clean directory-tree
../include/hashsize.h \
../include/parametrized.h \
../include/term.h :
- cd ../include; $(MAKE) $(CF_MFLAGS)
+ ( cd ../include && $(MAKE) $(TOP_MFLAGS) )
# These rules build test-programs for the modules that have test-drivers
test_progs : $(TEST_PROGS)
./link_test.c : $(base)/MKlib_gen.sh ../include/curses.h
$(SHELL) -e $(base)/MKlib_gen.sh "$(CPP) $(CPPFLAGS)" "$(AWK)" implemented <../include/curses.h >$@
captoinfo$x : $(tinfo)/captoinfo.c $(TEST_DEPS)
@ECHO_LD@ $(LIBTOOL_LINK) -o $@ $(CFLAGS_DEFAULT) -DMAIN $(tinfo)/captoinfo.c $(TEST_LDFLAGS)
hardscroll$x : $(serial)/hardscroll.c $(TEST_DEPS)
@ECHO_LD@ $(LIBTOOL_LINK) -o $@ $(CFLAGS_DEFAULT) -DSCROLLDEBUG $(serial)/hardscroll.c $(TEST_LDFLAGS)
hashmap$x : $(serial)/hashmap.c $(serial)/hardscroll.c $(TEST_DEPS)
@ECHO_LD@ $(LIBTOOL_LINK) -o $@ $(CFLAGS_DEFAULT) -DHASHDEBUG $(serial)/hashmap.c $(serial)/hardscroll.c $(TEST_LDFLAGS)
lib_mvcur$x : $(serial)/lib_mvcur.c $(TEST_DEPS) \
../@DFT_OBJ_SUBDIR@/dump_entry$o
@ECHO_LD@ $(LIBTOOL_LINK) -o $@ $(CFLAGS_DEFAULT) -DNCURSES_TEST -I$(serial)/../../progs $(serial)/lib_mvcur.c ../@DFT_OBJ_SUBDIR@/dump_entry$o $(TEST_LDFLAGS)
link_test$x : ./link_test.c $(TEST_DEPS) \
../@DFT_OBJ_SUBDIR@/link_test$o
@ECHO_LD@ $(CC) -o $@ $(CFLAGS_DEFAULT) ../@DFT_OBJ_SUBDIR@/link_test$o $(TEST_LDFLAGS)
../@DFT_OBJ_SUBDIR@/dump_entry$o:
- cd ../progs && $(MAKE) ../@DFT_OBJ_SUBDIR@/dump_entry$o
+ ( cd ../progs && $(MAKE) ../@DFT_OBJ_SUBDIR@/dump_entry$o )
report_hashing$x : \
$(srcdir)/curses.priv.h \
$(srcdir)/report_hashing.c $(TEST_DEPS)
@ECHO_LD@ $(CC) -o $@ $(CFLAGS_DEFAULT) report_hashing.c $(TEST_LDFLAGS)
###############################################################################
# The remainder of this file is automatically generated during configuration
###############################################################################
diff --git a/contrib/ncurses/ncurses/base/MKlib_gen.sh b/contrib/ncurses/ncurses/base/MKlib_gen.sh
index c8e4efe0c8d1..3829eff8eecb 100755
--- a/contrib/ncurses/ncurses/base/MKlib_gen.sh
+++ b/contrib/ncurses/ncurses/base/MKlib_gen.sh
@@ -1,519 +1,518 @@
#!/bin/sh
#
# MKlib_gen.sh -- generate sources from curses.h macro definitions
#
-# ($Id: MKlib_gen.sh,v 1.64 2020/02/15 14:58:02 tom Exp $)
+# ($Id: MKlib_gen.sh,v 1.68 2020/08/23 00:02:29 tom Exp $)
#
##############################################################################
# Copyright 2018,2020 Thomas E. Dickey #
# Copyright 1998-2016,2017 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# The XSI Curses standard requires all curses entry points to exist as
# functions, even though many definitions would normally be shadowed
# by macros. Rather than hand-hack all that code, we actually
# generate functions from the macros.
#
# This script accepts a file of prototypes on standard input. It discards
# any that don't have a `generated' comment attached. It then parses each
# prototype (relying on the fact that none of the macros take function
# pointer or array arguments) and generates C source from it.
#
# Here is what the pipeline stages are doing:
#
# 1. sed: extract prototypes of generated functions
# 2. sed: decorate prototypes with generated arguments a1. a2,...z
# 3. awk: generate the calls with args matching the formals
# 4. sed: prefix function names in prototypes so the preprocessor won't expand
# them.
# 5. cpp: macro-expand the file so the macro calls turn into C calls
# 6. awk: strip the expansion junk off the front and add the new header
# 7. sed: squeeze spaces, strip off gen_ prefix.
#
# keep the editing independent of locale:
if test "${LANGUAGE+set}" = set; then LANGUAGE=C; export LANGUAGE; fi
if test "${LANG+set}" = set; then LANG=C; export LANG; fi
if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
if test "${LC_COLLATE+set}" = set; then LC_COLLATE=C; export LC_COLLATE; fi
preprocessor="$1 -DNCURSES_WATTR_MACROS -DNCURSES_INTERNALS -I../include"
AWK="$2"
USE="$3"
# A patch discussed here:
# https://gcc.gnu.org/ml/gcc-patches/2014-06/msg02185.html
# introduces spurious #line markers into the preprocessor output. The result
# appears in gcc 5.0 and (with modification) in 5.1, making it necessary to
# determine if we are using gcc, and if so, what version because the proposed
# solution uses a nonstandard option.
-PRG=`echo "$1" | $AWK '{ sub(/^[ ]*/,""); sub(/[ ].*$/, ""); print; }' || exit 0`
+PRG=`echo "$1" | "$AWK" '{ sub(/^[ ]*/,""); sub(/[ ].*$/, ""); print; }' || exit 0`
FSF=`("$PRG" --version 2>/dev/null || exit 0) | fgrep "Free Software Foundation" | head -n 1`
ALL=`"$PRG" -dumpversion 2>/dev/null || exit 0`
-ONE=`echo "$ALL" | sed -e 's/\..*$//'`
+ONE=`echo "$ALL" | sed -e 's/[^0-9].*$//'`
if test -n "$FSF" && test -n "$ALL" && test -n "$ONE" ; then
- if test $ONE -ge 5 ; then
+ if test "$ONE" -ge 5 ; then
echo ".. adding -P option to work around $PRG $ALL" >&2
preprocessor="$preprocessor -P"
fi
fi
PID=$$
ED1=sed1_${PID}.sed
ED2=sed2_${PID}.sed
ED3=sed3_${PID}.sed
ED4=sed4_${PID}.sed
AW1=awk1_${PID}.awk
AW2=awk2_${PID}.awk
TMP=gen__${PID}.c
trap "rm -f $ED1 $ED2 $ED3 $ED4 $AW1 $AW2 $TMP" 0 1 2 3 15
ALL=$USE
if test "$USE" = implemented ; then
- CALL="call_"
cat >$ED1 <<EOF1
/^extern.*implemented/{
h
s/GCC_DEPRECATED([^)]*)//
s/NCURSES_SP_NAME(\([^)]*\))/NCURSES_SP_NAME___\1/
h
s/^.*implemented:\([^ *]*\).*/P_POUNDCif_USE_\1_SUPPORT/p
g
s/^extern \([^;]*\);.*/\1/p
g
s/^.*implemented:\([^ *]*\).*/P_POUNDCendif/p
}
/^extern.*generated/{
h
s/^.*generated:\([^ *]*\).*/P_POUNDCif_USE_\1_SUPPORT/p
g
s/^extern \([^;]*\);.*/\1/p
g
s/^.*generated:\([^ *]*\).*/P_POUNDCendif/p
}
EOF1
else
- CALL=""
cat >$ED1 <<EOF1
/^extern.*${ALL}/{
h
s/^.*${ALL}:\([^ *]*\).*/P_POUNDCif_USE_\1_SUPPORT/p
g
s/^extern \([^;]*\);.*/\1/p
g
s/^.*${ALL}:\([^ *]*\).*/P_POUNDCendif/p
}
EOF1
fi
cat >$ED2 <<EOF2
/^P_/b nc
/(void)/b nc
s/,/ a1% /
s/,/ a2% /
s/,/ a3% /
s/,/ a4% /
s/,/ a5% /
s/,/ a6% /
s/,/ a7% /
s/,/ a8% /
s/,/ a9% /
s/,/ a10% /
s/,/ a11% /
s/,/ a12% /
s/,/ a13% /
s/,/ a14% /
s/,/ a15% /
s/*/ * /g
s/%/ , /g
s/)/ z)/
s/\.\.\. z)/...)/
:nc
s/(/ ( /
s/)/ )/
EOF2
cat >$ED3 <<EOF3
/^P_/{
s/^P_POUNDCif_/#if /
s/^P_POUNDCendif/#endif/
s/^P_//
b done
}
s/ */ /g
s/ */ /g
s/ ,/,/g
s/( /(/g
s/ )/)/g
s/ gen_/ /
s/^[ ]*@[ ]*@[ ]*/ /
:done
EOF3
if test "$USE" = generated ; then
cat >$ED4 <<EOF
- s/^\(.*\) \(.*\) (\(.*\))\$/NCURSES_EXPORT(\1) (\2) (\3)/
+ s/^\(.*\) \(.*\) (\(.*\))\$/NCURSES_EXPORT(\1) \2 (\3)/
/attr_[sg]et.* z)/s,z),z GCC_UNUSED),
EOF
else
cat >$ED4 <<EOF
/^\(.*\) \(.*\) (\(.*\))\$/ {
h
s/^\(.*\) \(.*\) (\(.*\))\$/extern \1 call_\2 (\3);/
p
g
s/^\(.*\) \(.*\) (\(.*\))\$/\1 call_\2 (\3)/
}
s/\([^_]\)NCURSES_SP_NAME___\([a-zA-Z][a-zA-Z_]*\)/\1NCURSES_SP_NAME(\2)/g
EOF
fi
cat >$AW1 <<\EOF1
BEGIN {
skip=0;
}
/^P_POUNDCif/ {
print "\n"
print $0
skip=0;
}
/^P_POUNDCendif/ {
print $0
skip=1;
}
$0 !~ /^P_/ {
if (skip)
print "\n"
skip=1;
first=$1
for (i = 1; i <= NF; i++) {
if ( $i != "NCURSES_CONST" ) {
first = i;
break;
}
}
second = first + 1;
returnCast = "";
if ( $first == "chtype" ) {
returnType = "Chtype";
} else if ( $first == "SCREEN" ) {
returnType = "SP";
} else if ( $first == "WINDOW" ) {
returnType = "Win";
} else if ( $first == "attr_t" || $second == "attrset" || $second == "standout" || $second == "standend" || $second == "wattrset" || $second == "wstandout" || $second == "wstandend" ) {
returnType = "IntAttr";
returnCast = "(attr_t)";
} else if ( $first == "bool" || $first == "NCURSES_BOOL" ) {
returnType = "Bool";
} else if ( $second == "*" ) {
returnType = ($1 == "NCURSES_CONST") ? "CPtr" : "Ptr";
} else {
returnType = "Code";
}
myfunc = second;
for (i = second; i <= NF; i++) {
if ($i != "*") {
myfunc = i;
break;
}
}
if (using == "implemented") {
printf "#undef %s\n", $myfunc;
}
print $0;
print "{";
argcount = 1;
check = NF - 1;
if ($check == "void")
argcount = 0;
if (argcount != 0) {
for (i = 1; i <= NF; i++)
if ($i == ",")
argcount++;
}
# suppress trace-code for functions that we cannot do properly here,
# since they return data.
dotrace = 1;
if ($myfunc ~ /innstr/)
dotrace = 0;
if ($myfunc ~ /innwstr/)
dotrace = 0;
# workaround functions that we do not parse properly
if ($myfunc ~ /ripoffline/) {
dotrace = 0;
argcount = 2;
if ($myfunc ~ /NCURSES_SP_NAME/) {
argcount = 3;
}
}
if ($myfunc ~ /wunctrl/) {
dotrace = 0;
}
do_getstr = 0;
if ($myfunc ~ /get[n]?str/) {
do_getstr = 1;
}
call = "@@T((T_CALLED(\""
args = ""
comma = ""
num = 0;
pointer = 0;
va_list = 0;
varargs = 0;
argtype = ""
for (i = myfunc; i <= NF; i++) {
ch = $i;
if ( ch == "*" ) {
pointer = 1;
} else if ( ch == "va_list" ) {
va_list = 1;
} else if ( ch == "..." ) {
varargs = 1;
} else if ( ch == "char" ) {
argtype = "char";
} else if ( ch == "int" ) {
argtype = "int";
} else if ( ch == "short" ) {
argtype = "short";
} else if ( ch == "chtype" ) {
argtype = "chtype";
} else if ( ch == "attr_t" || ch == "NCURSES_ATTR_T" ) {
argtype = "attr";
}
if ( ch == "," || ch == ")" ) {
argcast = "";
if (va_list) {
call = call "%s"
} else if (varargs) {
call = call "%s"
} else if (pointer) {
if ( argtype == "char" ) {
if (do_getstr) {
call = call "%p"
} else {
call = call "%s"
}
comma = comma "_nc_visbuf2(" num ","
pointer = 0;
} else {
call = call "%p"
comma = comma "(const void *)"
}
} else if (argcount != 0) {
if ( argtype == "int" || argtype == "short" ) {
call = call "%d"
argtype = ""
} else if ( argtype != "" ) {
call = call "%s"
comma = comma "_trace" argtype "2(" num ","
if (argtype == "attr") {
argcast = "(chtype)";
}
} else {
call = call "%#lx"
comma = comma "(long)"
}
}
if (ch == ",") {
args = args comma "a" ++num;
} else if ( argcount != 0 ) {
if ( va_list ) {
args = args comma "\"va_list\""
} else if ( varargs ) {
args = args comma "\"...\""
} else {
args = args comma argcast "z"
}
}
call = call ch
if (pointer == 0 && argcount != 0 && argtype != "" )
args = args ")"
if (args != "")
comma = ", "
pointer = 0;
argtype = ""
}
if ( i == myfunc || ch == "(" )
call = call ch
}
call = call "\")"
if (args != "")
call = call ", " args
call = call ")); "
if (dotrace)
printf "%s\n\t@@", call
if (match($0, "^void")) {
call = ""
} else if (dotrace) {
call = sprintf("return%s( ", returnType);
if (returnCast != "") {
call = call returnCast;
}
} else {
call = "@@return ";
}
call = call $myfunc "(";
for (i = 1; i < argcount; i++) {
if (i != 1)
call = call ", ";
call = call "a" i;
}
if ( argcount != 0 && $check != "..." ) {
if (argcount != 1)
call = call ", ";
call = call "z";
}
if (!match($0, "^void"))
call = call ") ";
if (dotrace) {
call = call ")";
}
print call ";"
if (match($0, "^void"))
print "@@returnVoid;"
print "}";
}
EOF1
cat >$AW2 <<EOF1
BEGIN {
printf "/* This file was generated by $0 $USE */\n"
print ""
print "/*"
print " * DO NOT EDIT THIS FILE BY HAND!"
if ( "$USE" == "generated" ) {
print " *"
print " * This is a file of trivial functions generated from macro"
print " * definitions in curses.h to satisfy the XSI Curses requirement"
print " * that every macro also exist as a callable function."
print " *"
print " * It will never be linked unless you call one of the entry"
print " * points with its normal macro definition disabled. In that"
print " * case, if you have no shared libraries, it will indirectly"
print " * pull most of the rest of the library into your link image."
}
print " */"
print "#define NCURSES_ATTR_T int"
print "#include <ncurses_cfg.h>"
print ""
print "#undef NCURSES_NOMACROS /* _this_ file uses macros */"
+ print "#define NCURSES_NOMACROS 1"
print ""
print "#include <curses.priv.h>"
print ""
}
/^DECLARATIONS/ {start = 1; next;}
{
if (start) {
if ( "$USE" == "generated" ) {
print \$0;
} else if ( \$0 ~ /^[{}]?\$/ ) {
print \$0;
} else if ( \$0 ~ /;/ ) {
print \$0;
} else {
calls[start] = \$0;
print \$0;
start++;
}
}
}
END {
if ( "$USE" != "generated" ) {
print "int main(void)"
print "{"
for (n = 1; n < start; ++n) {
value = calls[n];
if ( value !~ /P_POUNDC/ ) {
gsub(/[ \t]+/," ",value);
sub(/^[0-9a-zA-Z_]+ /,"",value);
sub(/^\* /,"",value);
gsub(/[0-9a-zA-Z_]+ \* /,"",value);
gsub(/ (const) /," ",value);
gsub(/ (int|short|attr_t|chtype|wchar_t|NCURSES_BOOL|NCURSES_OUTC|NCURSES_OUTC_sp|va_list) /," ",value);
gsub(/ void /,"",value);
sub(/^/,"call_",value);
gsub(/ (a[0-9]|z) /, " 0 ", value);
gsub(/ int[ \t]*[(][^)]+[)][(][^)]+[)]/, "0", value);
printf "\t%s;\n", value;
} else {
print value;
}
}
print " return 0;"
print "}"
}
}
EOF1
cat >$TMP <<EOF
#include <ncurses_cfg.h>
#undef NCURSES_NOMACROS
#include <curses.h>
#include <term.h>
#include <unctrl.h>
DECLARATIONS
EOF
sed -n -f $ED1 \
| sed -e 's/NCURSES_EXPORT(\(.*\)) \(.*\) (\(.*\))/\1 \2(\3)/' \
| sed -f $ED2 \
-| $AWK -f $AW1 using=$USE \
+| "$AWK" -f $AW1 using="$USE" \
| sed \
-e 's/ [ ]*$//g' \
-e 's/^\([a-zA-Z_][a-zA-Z_]*[ *]*\)/\1 gen_/' \
-e 's/gen_$//' \
-e 's/ / /g' >>$TMP
$preprocessor $TMP 2>/dev/null \
| sed \
-e 's/ / /g' \
-e 's/^ //' \
-e 's/_Bool/NCURSES_BOOL/g' \
-| $AWK -f $AW2 \
+| "$AWK" -f $AW2 \
| sed -f $ED3 \
| sed \
-e 's/^.*T_CALLED.*returnCode( \([a-z].*) \));/ return \1;/' \
-e 's/^.*T_CALLED.*returnCode( \((wmove.*) \));/ return \1;/' \
-e 's/gen_//' \
-e 's/^[ ]*#/#/' \
-e '/#ident/d' \
-e '/#line/d' \
| sed -f $ED4
diff --git a/contrib/ncurses/ncurses/base/lib_addch.c b/contrib/ncurses/ncurses/base/lib_addch.c
index 604b13be8cec..378c2881faac 100644
--- a/contrib/ncurses/ncurses/base/lib_addch.c
+++ b/contrib/ncurses/ncurses/base/lib_addch.c
@@ -1,579 +1,593 @@
/****************************************************************************
- * Copyright 2019,2020 Thomas E. Dickey *
+ * Copyright 2019-2020,2021 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/*
** lib_addch.c
**
** The routine waddch().
**
*/
#include <curses.priv.h>
#include <ctype.h>
-MODULE_ID("$Id: lib_addch.c,v 1.134 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_addch.c,v 1.137 2021/02/20 22:24:34 tom Exp $")
static const NCURSES_CH_T blankchar = NewChar(BLANK_TEXT);
/*
* Ugly microtweaking alert. Everything from here to end of module is
* likely to be speed-critical -- profiling data sure says it is!
* Most of the important screen-painting functions are shells around
* waddch(). So we make every effort to reduce function-call overhead
* by inlining stuff, even at the cost of making wrapped copies for
* export. Also we supply some internal versions that don't call the
* window sync hook, for use by string-put functions.
*/
/* Return bit mask for clearing color pair number if given ch has color */
#define COLOR_MASK(ch) (~(attr_t)(((ch) & A_COLOR) ? A_COLOR : 0))
static NCURSES_INLINE NCURSES_CH_T
render_char(WINDOW *win, NCURSES_CH_T ch)
/* compute a rendition of the given char correct for the current context */
{
attr_t a = WINDOW_ATTRS(win);
int pair = GetPair(ch);
if (ISBLANK(ch)
&& AttrOf(ch) == A_NORMAL
&& pair == 0) {
/* color/pair in attrs has precedence over bkgrnd */
ch = win->_nc_bkgd;
SetAttr(ch, a | AttrOf(win->_nc_bkgd));
if ((pair = GET_WINDOW_PAIR(win)) == 0)
pair = GetPair(win->_nc_bkgd);
SetPair(ch, pair);
} else {
/* color in attrs has precedence over bkgrnd */
a |= AttrOf(win->_nc_bkgd) & COLOR_MASK(a);
/* color in ch has precedence */
if (pair == 0) {
if ((pair = GET_WINDOW_PAIR(win)) == 0)
pair = GetPair(win->_nc_bkgd);
}
AddAttr(ch, (a & COLOR_MASK(AttrOf(ch))));
SetPair(ch, pair);
}
TR(TRACE_VIRTPUT,
("render_char bkg %s (%d), attrs %s (%d) -> ch %s (%d)",
_tracech_t2(1, CHREF(win->_nc_bkgd)),
GetPair(win->_nc_bkgd),
_traceattr(WINDOW_ATTRS(win)),
GET_WINDOW_PAIR(win),
_tracech_t2(3, CHREF(ch)),
GetPair(ch)));
return (ch);
}
NCURSES_EXPORT(NCURSES_CH_T)
_nc_render(WINDOW *win, NCURSES_CH_T ch)
/* make render_char() visible while still allowing us to inline it below */
{
return render_char(win, ch);
}
/* check if position is legal; if not, return error */
#ifndef NDEBUG /* treat this like an assertion */
#define CHECK_POSITION(win, x, y) \
if (y > win->_maxy \
|| x > win->_maxx \
|| y < 0 \
|| x < 0) { \
TR(TRACE_VIRTPUT, ("Alert! Win=%p _curx = %d, _cury = %d " \
"(_maxx = %d, _maxy = %d)", win, x, y, \
win->_maxx, win->_maxy)); \
return(ERR); \
}
#else
#define CHECK_POSITION(win, x, y) /* nothing */
#endif
static bool
newline_forces_scroll(WINDOW *win, NCURSES_SIZE_T *ypos)
{
bool result = FALSE;
if (*ypos >= win->_regtop && *ypos <= win->_regbottom) {
if (*ypos == win->_regbottom) {
*ypos = win->_regbottom;
result = TRUE;
} else if (*ypos < win->_maxy) {
*ypos = (NCURSES_SIZE_T) (*ypos + 1);
}
} else if (*ypos < win->_maxy) {
*ypos = (NCURSES_SIZE_T) (*ypos + 1);
}
return result;
}
/*
* The _WRAPPED flag is useful only for telling an application that we've just
* wrapped the cursor. We don't do anything with this flag except set it when
* wrapping, and clear it whenever we move the cursor. If we try to wrap at
* the lower-right corner of a window, we cannot move the cursor (since that
* wouldn't be legal). So we return an error (which is what SVr4 does).
* Unlike SVr4, we can successfully add a character to the lower-right corner
* (Solaris 2.6 does this also, however).
*/
static int
wrap_to_next_line(WINDOW *win)
{
win->_flags |= _WRAPPED;
if (newline_forces_scroll(win, &(win->_cury))) {
win->_curx = win->_maxx;
if (!win->_scroll)
return (ERR);
scroll(win);
}
win->_curx = 0;
return (OK);
}
#if USE_WIDEC_SUPPORT
static int waddch_literal(WINDOW *, NCURSES_CH_T);
/*
* Fill the given number of cells with blanks using the current background
* rendition. This saves/restores the current x-position.
*/
static void
fill_cells(WINDOW *win, int count)
{
NCURSES_CH_T blank = blankchar;
int save_x = win->_curx;
int save_y = win->_cury;
while (count-- > 0) {
if (waddch_literal(win, blank) == ERR)
break;
}
win->_curx = (NCURSES_SIZE_T) save_x;
win->_cury = (NCURSES_SIZE_T) save_y;
}
#endif
/*
* Build up the bytes for a multibyte character, returning the length when
* complete (a positive number), -1 for error and -2 for incomplete.
*/
#if USE_WIDEC_SUPPORT
NCURSES_EXPORT(int)
_nc_build_wch(WINDOW *win, ARG_CH_T ch)
{
char *buffer = WINDOW_EXT(win, addch_work);
int len;
int x = win->_curx;
int y = win->_cury;
mbstate_t state;
wchar_t result;
if ((WINDOW_EXT(win, addch_used) != 0) &&
(WINDOW_EXT(win, addch_x) != x ||
WINDOW_EXT(win, addch_y) != y)) {
/* discard the incomplete multibyte character */
WINDOW_EXT(win, addch_used) = 0;
TR(TRACE_VIRTPUT,
("Alert discarded multibyte on move (%d,%d) -> (%d,%d)",
WINDOW_EXT(win, addch_y), WINDOW_EXT(win, addch_x),
y, x));
}
WINDOW_EXT(win, addch_x) = x;
WINDOW_EXT(win, addch_y) = y;
+ /*
+ * If the background character is a wide-character, that may interfere with
+ * processing multibyte characters in this function.
+ */
+ if (!is8bits(CharOf(CHDEREF(ch)))) {
+ if (WINDOW_EXT(win, addch_used) != 0) {
+ /* discard the incomplete multibyte character */
+ WINDOW_EXT(win, addch_used) = 0;
+ TR(TRACE_VIRTPUT,
+ ("Alert discarded incomplete multibyte"));
+ }
+ return 1;
+ }
+
init_mb(state);
buffer[WINDOW_EXT(win, addch_used)] = (char) CharOf(CHDEREF(ch));
WINDOW_EXT(win, addch_used) += 1;
buffer[WINDOW_EXT(win, addch_used)] = '\0';
if ((len = (int) mbrtowc(&result,
buffer,
(size_t) WINDOW_EXT(win, addch_used),
&state)) > 0) {
attr_t attrs = AttrOf(CHDEREF(ch));
if_EXT_COLORS(int pair = GetPair(CHDEREF(ch)));
SetChar(CHDEREF(ch), result, attrs);
if_EXT_COLORS(SetPair(CHDEREF(ch), pair));
WINDOW_EXT(win, addch_used) = 0;
} else if (len == -1) {
/*
* An error occurred. We could either discard everything,
* or assume that the error was in the previous input.
* Try the latter.
*/
TR(TRACE_VIRTPUT, ("Alert! mbrtowc returns error"));
/* handle this with unctrl() */
WINDOW_EXT(win, addch_used) = 0;
}
return len;
}
#endif /* USE_WIDEC_SUPPORT */
static
#if !USE_WIDEC_SUPPORT /* cannot be inline if it is recursive */
NCURSES_INLINE
#endif
int
waddch_literal(WINDOW *win, NCURSES_CH_T ch)
{
int x;
int y;
struct ldat *line;
x = win->_curx;
y = win->_cury;
CHECK_POSITION(win, x, y);
ch = render_char(win, ch);
line = win->_line + y;
CHANGED_CELL(line, x);
/*
* Build up multibyte characters until we have a wide-character.
*/
#if NCURSES_SP_FUNCS
#define DeriveSP() SCREEN *sp = _nc_screen_of(win);
#else
#define DeriveSP() /*nothing */
#endif
if_WIDEC({
DeriveSP();
if (WINDOW_EXT(win, addch_used) != 0 || !Charable(ch)) {
int len = _nc_build_wch(win, CHREF(ch));
if (len >= -1) {
attr_t attr = AttrOf(ch);
/* handle EILSEQ (i.e., when len >= -1) */
if (len == -1 && is8bits(CharOf(ch))) {
const char *s = NCURSES_SP_NAME(unctrl)
(NCURSES_SP_ARGx (chtype) CharOf(ch));
if (s[1] != '\0') {
int rc = OK;
while (*s != '\0') {
rc = waddch(win, UChar(*s) | attr);
if (rc != OK)
break;
++s;
}
return rc;
}
}
if (len == -1)
return waddch(win, ' ' | attr);
} else {
return OK;
}
}
});
/*
* Non-spacing characters are added to the current cell.
*
* Spacing characters that are wider than one column require some display
* adjustments.
*/
if_WIDEC({
int len = _nc_wacs_width(CharOf(ch));
int i;
int j;
wchar_t *chars;
if (len == 0) { /* non-spacing */
if ((x > 0 && y >= 0)
|| (win->_maxx >= 0 && win->_cury >= 1)) {
if (x > 0 && y >= 0)
chars = (win->_line[y].text[x - 1].chars);
else
chars = (win->_line[y - 1].text[win->_maxx].chars);
for (i = 0; i < CCHARW_MAX; ++i) {
if (chars[i] == 0) {
TR(TRACE_VIRTPUT,
("added non-spacing %d: %x",
x, (int) CharOf(ch)));
chars[i] = CharOf(ch);
break;
}
}
}
goto testwrapping;
} else if (len > 1) { /* multi-column characters */
/*
* Check if the character will fit on the current line. If it does
* not fit, fill in the remainder of the line with blanks. and
* move to the next line.
*/
if (len > win->_maxx + 1) {
TR(TRACE_VIRTPUT, ("character will not fit"));
return ERR;
} else if (x + len > win->_maxx + 1) {
int count = win->_maxx + 1 - x;
TR(TRACE_VIRTPUT, ("fill %d remaining cells", count));
fill_cells(win, count);
if (wrap_to_next_line(win) == ERR)
return ERR;
x = win->_curx;
y = win->_cury;
CHECK_POSITION(win, x, y);
line = win->_line + y;
}
/*
* Check for cells which are orphaned by adding this character, set
* those to blanks.
*
* FIXME: this actually could fill j-i cells, more complicated to
* setup though.
*/
for (i = 0; i < len; ++i) {
if (isWidecBase(win->_line[y].text[x + i])) {
break;
} else if (isWidecExt(win->_line[y].text[x + i])) {
for (j = i; x + j <= win->_maxx; ++j) {
if (!isWidecExt(win->_line[y].text[x + j])) {
TR(TRACE_VIRTPUT, ("fill %d orphan cells", j));
fill_cells(win, j);
break;
}
}
break;
}
}
/*
* Finally, add the cells for this character.
*/
for (i = 0; i < len; ++i) {
NCURSES_CH_T value = ch;
SetWidecExt(value, i);
TR(TRACE_VIRTPUT, ("multicolumn %d:%d (%d,%d)",
i + 1, len,
win->_begy + y, win->_begx + x));
line->text[x] = value;
CHANGED_CELL(line, x);
++x;
}
goto testwrapping;
}
});
/*
* Single-column characters.
*/
line->text[x++] = ch;
/*
* This label is used only for wide-characters.
*/
if_WIDEC(
testwrapping:
);
TR(TRACE_VIRTPUT, ("cell (%ld, %ld..%d) = %s",
(long) win->_cury, (long) win->_curx, x - 1,
_tracech_t(CHREF(ch))));
if (x > win->_maxx) {
return wrap_to_next_line(win);
}
win->_curx = (NCURSES_SIZE_T) x;
return OK;
}
static NCURSES_INLINE int
waddch_nosync(WINDOW *win, const NCURSES_CH_T ch)
/* the workhorse function -- add a character to the given window */
{
NCURSES_SIZE_T x, y;
chtype t = (chtype) CharOf(ch);
#if USE_WIDEC_SUPPORT || NCURSES_SP_FUNCS || USE_REENTRANT
SCREEN *sp = _nc_screen_of(win);
#endif
const char *s = NCURSES_SP_NAME(unctrl) (NCURSES_SP_ARGx t);
int tabsize = 8;
/*
* If we are using the alternate character set, forget about locale.
* Otherwise, if unctrl() returns a single-character or the locale
* claims the code is printable (and not also a control character),
* treat it that way.
*/
if ((AttrOf(ch) & A_ALTCHARSET)
|| (
#if USE_WIDEC_SUPPORT
(sp != 0 && sp->_legacy_coding) &&
#endif
s[1] == 0
)
|| (
(isprint((int) t) && !iscntrl((int) t))
#if USE_WIDEC_SUPPORT
|| ((sp == 0 || !sp->_legacy_coding) &&
(WINDOW_EXT(win, addch_used)
|| !_nc_is_charable(CharOf(ch))))
#endif
)) {
return waddch_literal(win, ch);
}
/*
* Handle carriage control and other codes that are not printable, or are
* known to expand to more than one character according to unctrl().
*/
x = win->_curx;
y = win->_cury;
CHECK_POSITION(win, x, y);
switch (t) {
case '\t':
#if USE_REENTRANT
tabsize = *ptrTabsize(sp);
#else
tabsize = TABSIZE;
#endif
x = (NCURSES_SIZE_T) (x + (tabsize - (x % tabsize)));
/*
* Space-fill the tab on the bottom line so that we'll get the
* "correct" cursor position.
*/
if ((!win->_scroll && (y == win->_regbottom))
|| (x <= win->_maxx)) {
NCURSES_CH_T blank = blankchar;
AddAttr(blank, AttrOf(ch));
while (win->_curx < x) {
if (waddch_literal(win, blank) == ERR)
return (ERR);
}
break;
} else {
wclrtoeol(win);
win->_flags |= _WRAPPED;
if (newline_forces_scroll(win, &y)) {
x = win->_maxx;
if (win->_scroll) {
scroll(win);
x = 0;
}
} else {
x = 0;
}
}
break;
case '\n':
wclrtoeol(win);
if (newline_forces_scroll(win, &y)) {
if (win->_scroll)
scroll(win);
else
return (ERR);
}
/* FALLTHRU */
case '\r':
x = 0;
win->_flags &= ~_WRAPPED;
break;
case '\b':
if (x == 0)
return (OK);
x--;
win->_flags &= ~_WRAPPED;
break;
default:
while (*s) {
NCURSES_CH_T sch;
SetChar(sch, UChar(*s++), AttrOf(ch));
if_EXT_COLORS(SetPair(sch, GetPair(ch)));
if (waddch_literal(win, sch) == ERR)
return ERR;
}
return (OK);
}
win->_curx = x;
win->_cury = y;
return (OK);
}
NCURSES_EXPORT(int)
_nc_waddch_nosync(WINDOW *win, const NCURSES_CH_T c)
/* export copy of waddch_nosync() so the string-put functions can use it */
{
return (waddch_nosync(win, c));
}
/*
* The versions below call _nc_synchook(). We wanted to avoid this in the
* version exported for string puts; they'll call _nc_synchook once at end
* of run.
*/
/* These are actual entry points */
NCURSES_EXPORT(int)
waddch(WINDOW *win, const chtype ch)
{
int code = ERR;
NCURSES_CH_T wch;
SetChar2(wch, ch);
TR(TRACE_VIRTPUT | TRACE_CCALLS, (T_CALLED("waddch(%p, %s)"), (void *) win,
_tracechtype(ch)));
if (win && (waddch_nosync(win, wch) != ERR)) {
_nc_synchook(win);
code = OK;
}
TR(TRACE_VIRTPUT | TRACE_CCALLS, (T_RETURN("%d"), code));
return (code);
}
NCURSES_EXPORT(int)
wechochar(WINDOW *win, const chtype ch)
{
int code = ERR;
NCURSES_CH_T wch;
SetChar2(wch, ch);
TR(TRACE_VIRTPUT | TRACE_CCALLS, (T_CALLED("wechochar(%p, %s)"),
(void *) win,
_tracechtype(ch)));
if (win && (waddch_nosync(win, wch) != ERR)) {
bool save_immed = win->_immed;
win->_immed = TRUE;
_nc_synchook(win);
win->_immed = save_immed;
code = OK;
}
TR(TRACE_VIRTPUT | TRACE_CCALLS, (T_RETURN("%d"), code));
return (code);
}
diff --git a/contrib/ncurses/ncurses/base/lib_addstr.c b/contrib/ncurses/ncurses/base/lib_addstr.c
index 19ebfcd5b337..a1e8829dd7f5 100644
--- a/contrib/ncurses/ncurses/base/lib_addstr.c
+++ b/contrib/ncurses/ncurses/base/lib_addstr.c
@@ -1,253 +1,253 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* *
* Rewritten 2001-2004 to support wide-characters by *
* Sven Verdoolaege *
* Thomas Dickey *
****************************************************************************/
/*
** lib_addstr.c
*
** The routines waddnstr(), waddchnstr().
**
*/
#include <curses.priv.h>
-MODULE_ID("$Id: lib_addstr.c,v 1.56 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_addstr.c,v 1.57 2020/12/05 20:06:19 tom Exp $")
NCURSES_EXPORT(int)
waddnstr(WINDOW *win, const char *astr, int n)
{
const char *str = astr;
int code = ERR;
T((T_CALLED("waddnstr(%p,%s,%d)"), (void *) win, _nc_visbufn(astr, n), n));
if (win && (str != 0)) {
TR(TRACE_VIRTPUT | TRACE_ATTRS,
("... current %s", _traceattr(WINDOW_ATTRS(win))));
code = OK;
if (n < 0)
- n = (int) strlen(astr);
+ n = INT_MAX;
TR(TRACE_VIRTPUT, ("str is not null, length = %d", n));
- while ((n-- > 0) && (*str != '\0')) {
+ while ((*str != '\0') && (n-- > 0)) {
NCURSES_CH_T ch;
TR(TRACE_VIRTPUT, ("*str = %#o", UChar(*str)));
SetChar(ch, UChar(*str++), A_NORMAL);
if (_nc_waddch_nosync(win, ch) == ERR) {
code = ERR;
break;
}
}
_nc_synchook(win);
}
TR(TRACE_VIRTPUT, ("waddnstr returns %d", code));
returnCode(code);
}
NCURSES_EXPORT(int)
waddchnstr(WINDOW *win, const chtype *astr, int n)
{
NCURSES_SIZE_T y, x;
int code = OK;
int i;
struct ldat *line;
T((T_CALLED("waddchnstr(%p,%p,%d)"), (void *) win, (const void *) astr, n));
if (!win || !astr)
returnCode(ERR);
y = win->_cury;
x = win->_curx;
if (n < 0) {
const chtype *str;
n = 0;
for (str = (const chtype *) astr; *str != 0; str++)
n++;
}
if (n > win->_maxx - x + 1)
n = win->_maxx - x + 1;
if (n == 0)
returnCode(code);
line = &(win->_line[y]);
for (i = 0; i < n && ChCharOf(astr[i]) != '\0'; ++i) {
SetChar2(line->text[i + x], astr[i]);
}
CHANGED_RANGE(line, x, (NCURSES_SIZE_T) (x + n - 1));
_nc_synchook(win);
returnCode(code);
}
#if USE_WIDEC_SUPPORT
NCURSES_EXPORT(int)
_nc_wchstrlen(const cchar_t *s)
{
int result = 0;
if (s != 0) {
while (CharOf(s[result]) != L'\0') {
result++;
}
}
return result;
}
NCURSES_EXPORT(int)
wadd_wchnstr(WINDOW *win, const cchar_t *astr, int n)
{
static const NCURSES_CH_T blank = NewChar(BLANK_TEXT);
NCURSES_SIZE_T y;
NCURSES_SIZE_T x;
int code = OK;
struct ldat *line;
int i, j, start, len, end;
T((T_CALLED("wadd_wchnstr(%p,%s,%d)"),
(void *) win,
_nc_viscbuf(astr, n),
n));
if (!win)
returnCode(ERR);
y = win->_cury;
x = win->_curx;
if (n < 0) {
n = _nc_wchstrlen(astr);
}
if (n > win->_maxx - x + 1)
n = win->_maxx - x + 1;
if (n == 0)
returnCode(code);
line = &(win->_line[y]);
start = x;
end = x + n - 1;
/*
* Reset orphaned cells of multi-column characters that extend up to the
* new string's location to blanks.
*/
if (x > 0 && isWidecExt(line->text[x])) {
for (i = 0; i <= x; ++i) {
if (!isWidecExt(line->text[x - i])) {
/* must be isWidecBase() */
start -= i;
while (i > 0) {
line->text[x - i--] = _nc_render(win, blank);
}
break;
}
}
}
/*
* Copy the new string to the window.
*/
for (i = 0; i < n && CharOf(astr[i]) != L'\0' && x <= win->_maxx; ++i) {
if (isWidecExt(astr[i]))
continue;
len = _nc_wacs_width(CharOf(astr[i]));
if (x + len - 1 <= win->_maxx) {
line->text[x] = _nc_render(win, astr[i]);
if (len > 1) {
for (j = 0; j < len; ++j) {
if (j != 0) {
line->text[x + j] = line->text[x];
}
SetWidecExt(line->text[x + j], j);
}
} else {
len = 1;
}
x = (NCURSES_SIZE_T) (x + len);
end += len - 1;
} else {
break;
}
}
/*
* Set orphaned cells of multi-column characters which lie after the new
* string to blanks.
*/
while (x <= win->_maxx && isWidecExt(line->text[x])) {
line->text[x] = _nc_render(win, blank);
++end;
++x;
}
CHANGED_RANGE(line, start, end);
_nc_synchook(win);
returnCode(code);
}
NCURSES_EXPORT(int)
waddnwstr(WINDOW *win, const wchar_t *str, int n)
{
int code = ERR;
T((T_CALLED("waddnwstr(%p,%s,%d)"), (void *) win, _nc_viswbufn(str, n), n));
if (win && (str != 0)) {
TR(TRACE_VIRTPUT | TRACE_ATTRS,
("... current %s", _traceattr(WINDOW_ATTRS(win))));
code = OK;
if (n < 0)
- n = (int) wcslen(str);
+ n = INT_MAX;
TR(TRACE_VIRTPUT, ("str is not null, length = %d", n));
- while ((n-- > 0) && (*str != L('\0'))) {
+ while ((*str != L('\0')) && (n-- > 0)) {
NCURSES_CH_T ch;
TR(TRACE_VIRTPUT, ("*str[0] = %#lx", (unsigned long) *str));
SetChar(ch, *str++, A_NORMAL);
if (wadd_wch(win, &ch) == ERR) {
code = ERR;
break;
}
}
_nc_synchook(win);
}
TR(TRACE_VIRTPUT, ("waddnwstr returns %d", code));
returnCode(code);
}
#endif
diff --git a/contrib/ncurses/ncurses/base/lib_bkgd.c b/contrib/ncurses/ncurses/base/lib_bkgd.c
index 2030030f91a5..23effc7cd141 100644
--- a/contrib/ncurses/ncurses/base/lib_bkgd.c
+++ b/contrib/ncurses/ncurses/base/lib_bkgd.c
@@ -1,229 +1,273 @@
/****************************************************************************
- * Copyright 2018-2019,2020 Thomas E. Dickey *
+ * Copyright 2018-2020,2021 Thomas E. Dickey *
* Copyright 1998-2014,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Juergen Pfeifer 1997 *
* and: Sven Verdoolaege 2000 *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
#include <curses.priv.h>
-MODULE_ID("$Id: lib_bkgd.c,v 1.54 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_bkgd.c,v 1.62 2021/02/13 20:06:54 tom Exp $")
+
+static const NCURSES_CH_T blank = NewChar(BLANK_TEXT);
/*
* Set the window's background information.
*/
#if USE_WIDEC_SUPPORT
NCURSES_EXPORT(void)
#else
static NCURSES_INLINE void
#endif
wbkgrndset(WINDOW *win, const ARG_CH_T ch)
{
- T((T_CALLED("wbkgdset(%p,%s)"), (void *) win, _tracech_t(ch)));
+ T((T_CALLED("wbkgrndset(%p,%s)"), (void *) win, _tracech_t(ch)));
if (win) {
attr_t off = AttrOf(win->_nc_bkgd);
attr_t on = AttrOf(CHDEREF(ch));
toggle_attr_off(WINDOW_ATTRS(win), off);
toggle_attr_on(WINDOW_ATTRS(win), on);
#if NCURSES_EXT_COLORS
{
int pair;
if ((pair = GetPair(win->_nc_bkgd)) != 0)
SET_WINDOW_PAIR(win, 0);
if ((pair = GetPair(CHDEREF(ch))) != 0)
SET_WINDOW_PAIR(win, pair);
}
#endif
if (CharOf(CHDEREF(ch)) == L('\0')) {
SetChar(win->_nc_bkgd, BLANK_TEXT, AttrOf(CHDEREF(ch)));
if_EXT_COLORS(SetPair(win->_nc_bkgd, GetPair(CHDEREF(ch))));
} else {
win->_nc_bkgd = CHDEREF(ch);
}
#if USE_WIDEC_SUPPORT
/*
* If we're compiled for wide-character support, _bkgrnd is the
* preferred location for the background information since it stores
* more than _bkgd. Update _bkgd each time we modify _bkgrnd, so the
* macro getbkgd() will work.
*/
{
cchar_t wch;
int tmp;
memset(&wch, 0, sizeof(wch));
(void) wgetbkgrnd(win, &wch);
tmp = _nc_to_char((wint_t) CharOf(wch));
win->_bkgd = (((tmp == EOF) ? ' ' : (chtype) tmp)
| (AttrOf(wch) & ALL_BUT_COLOR)
| (chtype) ColorPair(GET_WINDOW_PAIR(win)));
}
#endif
}
returnVoid;
}
NCURSES_EXPORT(void)
wbkgdset(WINDOW *win, chtype ch)
{
NCURSES_CH_T wch;
+ T((T_CALLED("wbkgdset(%p,%s)"), (void *) win, _tracechtype(ch)));
SetChar2(wch, ch);
wbkgrndset(win, CHREF(wch));
+ returnVoid;
}
/*
* Set the window's background information and apply it to each cell.
*/
-#if USE_WIDEC_SUPPORT
-NCURSES_EXPORT(int)
-#else
static NCURSES_INLINE int
-#undef wbkgrnd
-#endif
-wbkgrnd(WINDOW *win, const ARG_CH_T ch)
+_nc_background(WINDOW *win, const ARG_CH_T ch, bool narrow)
{
#undef SP_PARM
#define SP_PARM SP /* to use Charable() */
int code = ERR;
- T((T_CALLED("wbkgd(%p,%s)"), (void *) win, _tracech_t(ch)));
+#if USE_WIDEC_SUPPORT
+ T((T_CALLED("%s(%p,%s)"),
+ narrow ? "wbkgd" : "wbkgrnd",
+ (void *) win,
+ _tracecchar_t(ch)));
+#define TraceChar(c) _tracecchar_t2(1, &(c))
+#else
+ T((T_CALLED("%s(%p,%s)"),
+ "wbkgd",
+ (void *) win,
+ _tracech_t(ch)));
+ (void) narrow;
+#define TraceChar(c) _tracechar(CharOf(c))
+#endif
if (SP == 0) {
;
} else if (win) {
NCURSES_CH_T new_bkgd = CHDEREF(ch);
NCURSES_CH_T old_bkgd;
int y;
NCURSES_CH_T old_char;
attr_t old_attr;
int old_pair;
NCURSES_CH_T new_char;
attr_t new_attr;
int new_pair;
/* SVr4 trims color info if non-color terminal */
if (!SP->_pair_limit) {
RemAttr(new_bkgd, A_COLOR);
SetPair(new_bkgd, 0);
}
+ /* avoid setting background-character to a null */
+ if (CharOf(new_bkgd) == 0) {
+ NCURSES_CH_T tmp_bkgd = blank;
+ SetAttr(tmp_bkgd, AttrOf(new_bkgd));
+ SetPair(tmp_bkgd, GetPair(new_bkgd));
+ new_bkgd = tmp_bkgd;
+ }
+
memset(&old_bkgd, 0, sizeof(old_bkgd));
(void) wgetbkgrnd(win, &old_bkgd);
if (!memcmp(&old_bkgd, &new_bkgd, sizeof(new_bkgd))) {
T(("...unchanged"));
returnCode(OK);
}
old_char = old_bkgd;
RemAttr(old_char, ~A_CHARTEXT);
old_attr = AttrOf(old_bkgd);
old_pair = GetPair(old_bkgd);
if (!(old_attr & A_COLOR)) {
old_pair = 0;
}
T(("... old background char %s, attr %s, pair %d",
- _tracechar(CharOf(old_char)), _traceattr(old_attr), old_pair));
+ TraceChar(old_char), _traceattr(old_attr), old_pair));
new_char = new_bkgd;
RemAttr(new_char, ~A_CHARTEXT);
new_attr = AttrOf(new_bkgd);
new_pair = GetPair(new_bkgd);
/* SVr4 limits background character to printable 7-bits */
- if (!Charable(new_bkgd)) {
+ if (
+#if USE_WIDEC_SUPPORT
+ narrow &&
+#endif
+ !Charable(new_bkgd)) {
new_char = old_char;
}
if (!(new_attr & A_COLOR)) {
new_pair = 0;
}
T(("... new background char %s, attr %s, pair %d",
- _tracechar(CharOf(new_char)), _traceattr(new_attr), new_pair));
+ TraceChar(new_char), _traceattr(new_attr), new_pair));
(void) wbkgrndset(win, CHREF(new_bkgd));
/* SVr4 updates color pair if old/new match, otherwise just attrs */
if ((new_pair != 0) && (new_pair == old_pair)) {
WINDOW_ATTRS(win) = new_attr;
SET_WINDOW_PAIR(win, new_pair);
} else {
WINDOW_ATTRS(win) = new_attr;
}
for (y = 0; y <= win->_maxy; y++) {
int x;
for (x = 0; x <= win->_maxx; x++) {
NCURSES_CH_T *cp = &(win->_line[y].text[x]);
int tmp_pair = GetPair(*cp);
attr_t tmp_attr = AttrOf(*cp);
if (CharEq(*cp, old_bkgd)) {
- SetChar2(*cp, CharOf(new_char));
+#if USE_WIDEC_SUPPORT
+ if (!narrow) {
+ if (Charable(new_bkgd)) {
+ SetChar2(*cp, CharOf(new_char));
+ } else {
+ SetChar(*cp, L' ', AttrOf(new_char));
+ }
+ memcpy(cp->chars,
+ new_char.chars,
+ CCHARW_MAX * sizeof(cp->chars[0]));
+ } else
+#endif
+ SetChar2(*cp, CharOf(new_char));
}
if (tmp_pair != 0) {
if (tmp_pair == old_pair) {
SetAttr(*cp, (tmp_attr & ~old_attr) | new_attr);
SetPair(*cp, new_pair);
} else {
SetAttr(*cp,
(tmp_attr & (~old_attr | A_COLOR))
| (new_attr & ALL_BUT_COLOR));
}
} else {
SetAttr(*cp, (tmp_attr & ~old_attr) | new_attr);
SetPair(*cp, new_pair);
}
}
}
touchwin(win);
_nc_synchook(win);
code = OK;
}
returnCode(code);
}
+#if USE_WIDEC_SUPPORT
+NCURSES_EXPORT(int)
+wbkgrnd(WINDOW *win, const ARG_CH_T ch)
+{
+ return _nc_background(win, ch, FALSE);
+}
+#endif
+
NCURSES_EXPORT(int)
wbkgd(WINDOW *win, chtype ch)
{
NCURSES_CH_T wch;
SetChar2(wch, ch);
- return wbkgrnd(win, CHREF(wch));
+ return _nc_background(win, CHREF(wch), TRUE);
}
diff --git a/contrib/ncurses/ncurses/base/lib_color.c b/contrib/ncurses/ncurses/base/lib_color.c
index 376ad4f6047d..907e9743fcda 100644
--- a/contrib/ncurses/ncurses/base/lib_color.c
+++ b/contrib/ncurses/ncurses/base/lib_color.c
@@ -1,1165 +1,1164 @@
/****************************************************************************
- * Copyright 2018-2019,2020 Thomas E. Dickey *
+ * Copyright 2018-2020,2021 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
/* lib_color.c
*
* Handles color emulation of SYS V curses
*/
#define NEW_PAIR_INTERNAL 1
#include <curses.priv.h>
#include <new_pair.h>
#include <tic.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_color.c,v 1.143 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_color.c,v 1.146 2021/02/14 00:17:09 tom Exp $")
#ifdef USE_TERM_DRIVER
#define CanChange InfoOf(SP_PARM).canchange
#define DefaultPalette InfoOf(SP_PARM).defaultPalette
#define HasColor InfoOf(SP_PARM).hascolor
#define InitColor InfoOf(SP_PARM).initcolor
#define MaxColors InfoOf(SP_PARM).maxcolors
#define MaxPairs InfoOf(SP_PARM).maxpairs
#define UseHlsPalette (DefaultPalette == _nc_hls_palette)
#else
#define CanChange can_change
#define DefaultPalette (hue_lightness_saturation ? hls_palette : cga_palette)
#define HasColor has_color
#define InitColor initialize_color
#define MaxColors max_colors
#define MaxPairs max_pairs
#define UseHlsPalette (hue_lightness_saturation)
#endif
#ifndef USE_TERM_DRIVER
/*
* These should be screen structure members. They need to be globals for
* historical reasons. So we assign them in start_color() and also in
* set_term()'s screen-switching logic.
*/
#if USE_REENTRANT
NCURSES_EXPORT(int)
NCURSES_PUBLIC_VAR(COLOR_PAIRS) (void)
{
return SP ? SP->_pair_count : -1;
}
NCURSES_EXPORT(int)
NCURSES_PUBLIC_VAR(COLORS) (void)
{
return SP ? SP->_color_count : -1;
}
#else
NCURSES_EXPORT_VAR(int) COLOR_PAIRS = 0;
NCURSES_EXPORT_VAR(int) COLORS = 0;
#endif
#endif /* !USE_TERM_DRIVER */
#define DATA(r,g,b) {r,g,b, 0,0,0, 0}
#define TYPE_CALLOC(type,elts) typeCalloc(type, (unsigned)(elts))
#define MAX_PALETTE 8
#define OkColorHi(n) (((n) < COLORS) && ((n) < maxcolors))
#define InPalette(n) ((n) >= 0 && (n) < MAX_PALETTE)
/*
* Given a RGB range of 0..1000, we'll normally set the individual values
* to about 2/3 of the maximum, leaving full-range for bold/bright colors.
*/
#define RGB_ON 680
#define RGB_OFF 0
/* *INDENT-OFF* */
static const color_t cga_palette[] =
{
/* R G B */
DATA(RGB_OFF, RGB_OFF, RGB_OFF), /* COLOR_BLACK */
DATA(RGB_ON, RGB_OFF, RGB_OFF), /* COLOR_RED */
DATA(RGB_OFF, RGB_ON, RGB_OFF), /* COLOR_GREEN */
DATA(RGB_ON, RGB_ON, RGB_OFF), /* COLOR_YELLOW */
DATA(RGB_OFF, RGB_OFF, RGB_ON), /* COLOR_BLUE */
DATA(RGB_ON, RGB_OFF, RGB_ON), /* COLOR_MAGENTA */
DATA(RGB_OFF, RGB_ON, RGB_ON), /* COLOR_CYAN */
DATA(RGB_ON, RGB_ON, RGB_ON), /* COLOR_WHITE */
};
static const color_t hls_palette[] =
{
/* H L S */
DATA( 0, 0, 0), /* COLOR_BLACK */
DATA( 120, 50, 100), /* COLOR_RED */
DATA( 240, 50, 100), /* COLOR_GREEN */
DATA( 180, 50, 100), /* COLOR_YELLOW */
DATA( 330, 50, 100), /* COLOR_BLUE */
DATA( 60, 50, 100), /* COLOR_MAGENTA */
DATA( 300, 50, 100), /* COLOR_CYAN */
DATA( 0, 50, 100), /* COLOR_WHITE */
};
#ifdef USE_TERM_DRIVER
NCURSES_EXPORT_VAR(const color_t*) _nc_cga_palette = cga_palette;
NCURSES_EXPORT_VAR(const color_t*) _nc_hls_palette = hls_palette;
#endif
/* *INDENT-ON* */
-
#if NCURSES_EXT_FUNCS
/*
* These are called from _nc_do_color(), which in turn is called from
* vidattr - so we have to assume that sp may be null.
*/
static int
default_fg(NCURSES_SP_DCL0)
{
return (SP_PARM != 0) ? SP_PARM->_default_fg : COLOR_WHITE;
}
static int
default_bg(NCURSES_SP_DCL0)
{
return SP_PARM != 0 ? SP_PARM->_default_bg : COLOR_BLACK;
}
#else
#define default_fg(sp) COLOR_WHITE
#define default_bg(sp) COLOR_BLACK
#endif
#ifndef USE_TERM_DRIVER
/*
* SVr4 curses is known to interchange color codes (1,4) and (3,6), possibly
* to maintain compatibility with a pre-ANSI scheme. The same scheme is
* also used in the FreeBSD syscons.
*/
static int
toggled_colors(int c)
{
if (c < 16) {
static const int table[] =
{0, 4, 2, 6, 1, 5, 3, 7,
8, 12, 10, 14, 9, 13, 11, 15};
c = table[c];
}
return c;
}
#endif
static void
set_background_color(NCURSES_SP_DCLx int bg, NCURSES_SP_OUTC outc)
{
#ifdef USE_TERM_DRIVER
CallDriver_3(SP_PARM, td_color, FALSE, bg, outc);
#else
if (set_a_background) {
TPUTS_TRACE("set_a_background");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(set_a_background, bg),
+ TIPARM_1(set_a_background, bg),
1, outc);
} else {
TPUTS_TRACE("set_background");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(set_background, toggled_colors(bg)),
+ TIPARM_1(set_background, toggled_colors(bg)),
1, outc);
}
#endif
}
static void
set_foreground_color(NCURSES_SP_DCLx int fg, NCURSES_SP_OUTC outc)
{
#ifdef USE_TERM_DRIVER
CallDriver_3(SP_PARM, td_color, TRUE, fg, outc);
#else
if (set_a_foreground) {
TPUTS_TRACE("set_a_foreground");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(set_a_foreground, fg),
+ TIPARM_1(set_a_foreground, fg),
1, outc);
} else {
TPUTS_TRACE("set_foreground");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(set_foreground, toggled_colors(fg)),
+ TIPARM_1(set_foreground, toggled_colors(fg)),
1, outc);
}
#endif
}
static void
init_color_table(NCURSES_SP_DCL0)
{
const color_t *tp = DefaultPalette;
int n;
assert(tp != 0);
for (n = 0; n < COLORS; n++) {
if (InPalette(n)) {
SP_PARM->_color_table[n] = tp[n];
} else {
SP_PARM->_color_table[n] = tp[n % MAX_PALETTE];
if (UseHlsPalette) {
SP_PARM->_color_table[n].green = 100;
} else {
if (SP_PARM->_color_table[n].red)
SP_PARM->_color_table[n].red = 1000;
if (SP_PARM->_color_table[n].green)
SP_PARM->_color_table[n].green = 1000;
if (SP_PARM->_color_table[n].blue)
SP_PARM->_color_table[n].blue = 1000;
}
}
}
}
static bool
init_direct_colors(NCURSES_SP_DCL0)
{
static NCURSES_CONST char name[] = "RGB";
- int n;
- const char *s;
- int width;
rgb_bits_t *result = &(SP_PARM->_direct_color);
result->value = 0;
if (COLORS >= 8) {
+ int n;
+ const char *s;
+ int width;
+
/* find the number of bits needed for the maximum color value */
for (width = 0; (1 << width) - 1 < (COLORS - 1); ++width) {
;
}
if ((n = tigetflag(name)) > 0) {
n = (width + 2) / 3;
result->bits.red = UChar(n);
result->bits.green = UChar(n);
result->bits.blue = UChar(width - (2 * n));
} else if ((n = tigetnum(name)) > 0) {
result->bits.red = UChar(n);
result->bits.green = UChar(n);
result->bits.blue = UChar(n);
} else if ((s = tigetstr(name)) != 0 && VALID_STRING(s)) {
int red = n;
int green = n;
int blue = width - (2 * n);
switch (sscanf(s, "%d/%d/%d", &red, &green, &blue)) {
default:
blue = width - (2 * n);
/* FALLTHRU */
case 1:
green = n;
/* FALLTHRU */
case 2:
red = n;
/* FALLTHRU */
case 3:
/* okay */
break;
}
result->bits.red = UChar(red);
result->bits.green = UChar(green);
result->bits.blue = UChar(blue);
}
}
return (result->value != 0);
}
/*
* Reset the color pair, e.g., to whatever color pair 0 is.
*/
static bool
reset_color_pair(NCURSES_SP_DCL0)
{
#ifdef USE_TERM_DRIVER
return CallDriver(SP_PARM, td_rescol);
#else
bool result = FALSE;
(void) SP_PARM;
if (orig_pair != 0) {
(void) NCURSES_PUTP2("orig_pair", orig_pair);
result = TRUE;
}
return result;
#endif
}
/*
* Reset color pairs and definitions. Actually we do both more to accommodate
* badly-written terminal descriptions than for the relatively rare case where
* someone has changed the color definitions.
*/
NCURSES_EXPORT(bool)
NCURSES_SP_NAME(_nc_reset_colors) (NCURSES_SP_DCL0)
{
int result = FALSE;
T((T_CALLED("_nc_reset_colors(%p)"), (void *) SP_PARM));
if (SP_PARM->_color_defs > 0)
SP_PARM->_color_defs = -(SP_PARM->_color_defs);
if (reset_color_pair(NCURSES_SP_ARG))
result = TRUE;
#ifdef USE_TERM_DRIVER
result = CallDriver(SP_PARM, td_rescolors);
#else
if (orig_colors != 0) {
NCURSES_PUTP2("orig_colors", orig_colors);
result = TRUE;
}
#endif
returnBool(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(bool)
_nc_reset_colors(void)
{
return NCURSES_SP_NAME(_nc_reset_colors) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(start_color) (NCURSES_SP_DCL0)
{
int result = ERR;
- int maxpairs = 0, maxcolors = 0;
T((T_CALLED("start_color(%p)"), (void *) SP_PARM));
if (SP_PARM == 0) {
result = ERR;
} else if (SP_PARM->_coloron) {
result = OK;
} else {
- maxpairs = MaxPairs;
- maxcolors = MaxColors;
+ int maxpairs = MaxPairs;
+ int maxcolors = MaxColors;
if (reset_color_pair(NCURSES_SP_ARG) != TRUE) {
set_foreground_color(NCURSES_SP_ARGx
default_fg(NCURSES_SP_ARG),
NCURSES_SP_NAME(_nc_outch));
set_background_color(NCURSES_SP_ARGx
default_bg(NCURSES_SP_ARG),
NCURSES_SP_NAME(_nc_outch));
}
#if !NCURSES_EXT_COLORS
/*
* Without ext-colors, we cannot represent more than 256 color pairs.
*/
if (maxpairs > 256)
maxpairs = 256;
#endif
if (maxpairs > 0 && maxcolors > 0) {
SP_PARM->_pair_limit = maxpairs;
#if NCURSES_EXT_FUNCS
/*
* If using default colors, allocate extra space in table to
* allow for default-color as a component of a color-pair.
*/
SP_PARM->_pair_limit += (1 + (2 * maxcolors));
#if !NCURSES_EXT_COLORS
SP_PARM->_pair_limit = limit_PAIRS(SP_PARM->_pair_limit);
#endif
#endif /* NCURSES_EXT_FUNCS */
SP_PARM->_pair_count = maxpairs;
SP_PARM->_color_count = maxcolors;
#if !USE_REENTRANT
COLOR_PAIRS = maxpairs;
COLORS = maxcolors;
#endif
ReservePairs(SP_PARM, 16);
if (SP_PARM->_color_pairs != 0) {
if (init_direct_colors(NCURSES_SP_ARG)) {
result = OK;
} else {
SP_PARM->_color_table = TYPE_CALLOC(color_t, maxcolors);
if (SP_PARM->_color_table != 0) {
MakeColorPair(SP_PARM->_color_pairs[0],
default_fg(NCURSES_SP_ARG),
default_bg(NCURSES_SP_ARG));
init_color_table(NCURSES_SP_ARG);
result = OK;
}
}
if (result == OK) {
T(("started color: COLORS = %d, COLOR_PAIRS = %d",
COLORS, COLOR_PAIRS));
SP_PARM->_coloron = 1;
} else if (SP_PARM->_color_pairs != 0) {
FreeAndNull(SP_PARM->_color_pairs);
}
}
} else {
result = OK;
}
}
returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
start_color(void)
{
return NCURSES_SP_NAME(start_color) (CURRENT_SCREEN);
}
#endif
/* This function was originally written by Daniel Weaver <danw@znyx.com> */
static void
rgb2hls(int r, int g, int b, int *h, int *l, int *s)
/* convert RGB to HLS system */
{
int min, max, t;
if ((min = g < r ? g : r) > b)
min = b;
if ((max = g > r ? g : r) < b)
max = b;
/* calculate lightness */
*l = ((min + max) / 20);
if (min == max) { /* black, white and all shades of gray */
*h = 0;
*s = 0;
return;
}
/* calculate saturation */
if (*l < 50)
*s = (((max - min) * 100) / (max + min));
else
*s = (((max - min) * 100) / (2000 - max - min));
/* calculate hue */
if (r == max)
t = (120 + ((g - b) * 60) / (max - min));
else if (g == max)
t = (240 + ((b - r) * 60) / (max - min));
else
t = (360 + ((r - g) * 60) / (max - min));
*h = (t % 360);
}
/*
* Change all cells which use(d) a given color pair to force a repaint.
*/
NCURSES_EXPORT(void)
_nc_change_pair(SCREEN *sp, int pair)
{
int y, x;
if (CurScreen(sp)->_clear)
return;
#if NO_LEAKS
if (_nc_globals.leak_checking)
return;
#endif
for (y = 0; y <= CurScreen(sp)->_maxy; y++) {
struct ldat *ptr = &(CurScreen(sp)->_line[y]);
bool changed = FALSE;
for (x = 0; x <= CurScreen(sp)->_maxx; x++) {
if (GetPair(ptr->text[x]) == pair) {
/* Set the old cell to zero to ensure it will be
updated on the next doupdate() */
SetChar(ptr->text[x], 0, 0);
CHANGED_CELL(ptr, x);
changed = TRUE;
}
}
if (changed)
NCURSES_SP_NAME(_nc_make_oldhash) (NCURSES_SP_ARGx y);
}
}
NCURSES_EXPORT(void)
_nc_reserve_pairs(SCREEN *sp, int want)
{
int have = sp->_pair_alloc;
if (have == 0)
have = 1;
while (have <= want)
have *= 2;
if (have > sp->_pair_limit)
have = sp->_pair_limit;
if (sp->_color_pairs == 0) {
sp->_color_pairs = TYPE_CALLOC(colorpair_t, have);
} else if (have > sp->_pair_alloc) {
#if NCURSES_EXT_COLORS
colorpair_t *next;
if ((next = typeCalloc(colorpair_t, have)) == 0)
_nc_err_abort(MSG_NO_MEMORY);
memcpy(next, sp->_color_pairs, (size_t) sp->_pair_alloc * sizeof(*next));
_nc_copy_pairs(sp, next, sp->_color_pairs, sp->_pair_alloc);
free(sp->_color_pairs);
sp->_color_pairs = next;
#else
TYPE_REALLOC(colorpair_t, have, sp->_color_pairs);
if (sp->_color_pairs != 0) {
memset(sp->_color_pairs + sp->_pair_alloc, 0,
sizeof(colorpair_t) * (size_t) (have - sp->_pair_alloc));
}
#endif
}
if (sp->_color_pairs != 0) {
sp->_pair_alloc = have;
}
}
/*
* Extension (1997/1/18) - Allow negative f/b values to set default color
* values.
*/
NCURSES_EXPORT(int)
_nc_init_pair(SCREEN *sp, int pair, int f, int b)
{
static colorpair_t null_pair;
colorpair_t result = null_pair;
colorpair_t previous;
int maxcolors;
T((T_CALLED("init_pair(%p,%d,%d,%d)"), (void *) sp, pair, f, b));
if (!ValidPair(sp, pair))
returnCode(ERR);
maxcolors = MaxColors;
ReservePairs(sp, pair);
previous = sp->_color_pairs[pair];
#if NCURSES_EXT_FUNCS
if (sp->_default_color || sp->_assumed_color) {
bool isDefault = FALSE;
bool wasDefault = FALSE;
int default_pairs = sp->_default_pairs;
/*
* Map caller's color number, e.g., -1, 0, 1, .., 7, etc., into
* internal unsigned values which we will store in the _color_pairs[]
* table.
*/
if (isDefaultColor(f)) {
f = COLOR_DEFAULT;
isDefault = TRUE;
} else if (!OkColorHi(f)) {
returnCode(ERR);
}
if (isDefaultColor(b)) {
b = COLOR_DEFAULT;
isDefault = TRUE;
} else if (!OkColorHi(b)) {
returnCode(ERR);
}
/*
* Check if the table entry that we are going to init/update used
* default colors.
*/
if (isDefaultColor(FORE_OF(previous))
|| isDefaultColor(BACK_OF(previous)))
wasDefault = TRUE;
/*
* Keep track of the number of entries in the color pair table which
* used a default color.
*/
if (isDefault && !wasDefault) {
++default_pairs;
} else if (wasDefault && !isDefault) {
--default_pairs;
}
/*
* As an extension, ncurses allows the pair number to exceed the
* terminal's color_pairs value for pairs using a default color.
*
* Note that updating a pair which used a default color with one
* that does not will decrement the count - and possibly interfere
* with sequentially adding new pairs.
*/
if (pair > (sp->_pair_count + default_pairs)) {
returnCode(ERR);
}
sp->_default_pairs = default_pairs;
} else
#endif
{
if ((f < 0) || !OkColorHi(f)
|| (b < 0) || !OkColorHi(b)
|| (pair < 1)) {
returnCode(ERR);
}
}
/*
* When a pair's content is changed, replace its colors (if pair was
* initialized before a screen update is performed replacing original
* pair colors with the new ones).
*/
MakeColorPair(result, f, b);
if ((FORE_OF(previous) != 0
|| BACK_OF(previous) != 0)
&& !isSamePair(previous, result)) {
_nc_change_pair(sp, pair);
}
_nc_reset_color_pair(sp, pair, &result);
sp->_color_pairs[pair] = result;
_nc_set_color_pair(sp, pair, cpINIT);
if (GET_SCREEN_PAIR(sp) == pair)
SET_SCREEN_PAIR(sp, (int) (~0)); /* force attribute update */
#ifdef USE_TERM_DRIVER
CallDriver_3(sp, td_initpair, pair, f, b);
#else
if (initialize_pair && InPalette(f) && InPalette(b)) {
const color_t *tp = DefaultPalette;
TR(TRACE_ATTRS,
("initializing pair: pair = %d, fg=(%d,%d,%d), bg=(%d,%d,%d)",
(int) pair,
(int) tp[f].red, (int) tp[f].green, (int) tp[f].blue,
(int) tp[b].red, (int) tp[b].green, (int) tp[b].blue));
NCURSES_PUTP2("initialize_pair",
- TPARM_7(initialize_pair,
- pair,
- (int) tp[f].red,
- (int) tp[f].green,
- (int) tp[f].blue,
- (int) tp[b].red,
- (int) tp[b].green,
- (int) tp[b].blue));
+ TIPARM_7(initialize_pair,
+ pair,
+ (int) tp[f].red,
+ (int) tp[f].green,
+ (int) tp[f].blue,
+ (int) tp[b].red,
+ (int) tp[b].green,
+ (int) tp[b].blue));
}
#endif
returnCode(OK);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(init_pair) (NCURSES_SP_DCLx
NCURSES_PAIRS_T pair,
NCURSES_COLOR_T f,
NCURSES_COLOR_T b)
{
return _nc_init_pair(SP_PARM, pair, f, b);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
init_pair(NCURSES_COLOR_T pair, NCURSES_COLOR_T f, NCURSES_COLOR_T b)
{
return NCURSES_SP_NAME(init_pair) (CURRENT_SCREEN, pair, f, b);
}
#endif
#define okRGB(n) ((n) >= 0 && (n) <= 1000)
NCURSES_EXPORT(int)
_nc_init_color(SCREEN *sp, int color, int r, int g, int b)
{
int result = ERR;
int maxcolors;
T((T_CALLED("init_color(%p,%d,%d,%d,%d)"),
(void *) sp,
color,
r, g, b));
if (sp == 0 || sp->_direct_color.value)
returnCode(result);
maxcolors = MaxColors;
if (InitColor
&& sp->_coloron
&& (color >= 0 && OkColorHi(color))
&& (okRGB(r) && okRGB(g) && okRGB(b))) {
sp->_color_table[color].init = 1;
sp->_color_table[color].r = r;
sp->_color_table[color].g = g;
sp->_color_table[color].b = b;
if (UseHlsPalette) {
rgb2hls(r, g, b,
&sp->_color_table[color].red,
&sp->_color_table[color].green,
&sp->_color_table[color].blue);
} else {
sp->_color_table[color].red = r;
sp->_color_table[color].green = g;
sp->_color_table[color].blue = b;
}
#ifdef USE_TERM_DRIVER
CallDriver_4(sp, td_initcolor, color, r, g, b);
#else
NCURSES_PUTP2("initialize_color",
- TPARM_4(initialize_color, color, r, g, b));
+ TIPARM_4(initialize_color, color, r, g, b));
#endif
sp->_color_defs = max(color + 1, sp->_color_defs);
result = OK;
}
returnCode(result);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(init_color) (NCURSES_SP_DCLx
NCURSES_COLOR_T color,
NCURSES_COLOR_T r,
NCURSES_COLOR_T g,
NCURSES_COLOR_T b)
{
return _nc_init_color(SP_PARM, color, r, g, b);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
init_color(NCURSES_COLOR_T color,
NCURSES_COLOR_T r,
NCURSES_COLOR_T g,
NCURSES_COLOR_T b)
{
return NCURSES_SP_NAME(init_color) (CURRENT_SCREEN, color, r, g, b);
}
#endif
NCURSES_EXPORT(bool)
NCURSES_SP_NAME(can_change_color) (NCURSES_SP_DCL)
{
int result = FALSE;
T((T_CALLED("can_change_color(%p)"), (void *) SP_PARM));
if (HasTerminal(SP_PARM) && (CanChange != 0)) {
result = TRUE;
}
returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(bool)
can_change_color(void)
{
return NCURSES_SP_NAME(can_change_color) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(bool)
NCURSES_SP_NAME(has_colors) (NCURSES_SP_DCL0)
{
int code = FALSE;
(void) SP_PARM;
T((T_CALLED("has_colors(%p)"), (void *) SP_PARM));
if (HasTerminal(SP_PARM)) {
#ifdef USE_TERM_DRIVER
code = HasColor;
#else
code = ((VALID_NUMERIC(max_colors) && VALID_NUMERIC(max_pairs)
&& (((set_foreground != NULL)
&& (set_background != NULL))
|| ((set_a_foreground != NULL)
&& (set_a_background != NULL))
|| set_color_pair)) ? TRUE : FALSE);
#endif
}
returnCode(code);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(bool)
has_colors(void)
{
return NCURSES_SP_NAME(has_colors) (CURRENT_SCREEN);
}
#endif
static int
_nc_color_content(SCREEN *sp, int color, int *r, int *g, int *b)
{
int result = ERR;
int maxcolors;
T((T_CALLED("color_content(%p,%d,%p,%p,%p)"),
(void *) sp,
color,
(void *) r,
(void *) g,
(void *) b));
if (sp == 0)
returnCode(result);
maxcolors = MaxColors;
if (color < 0 || !OkColorHi(color) || !sp->_coloron) {
result = ERR;
} else {
int c_r, c_g, c_b;
if (sp->_direct_color.value) {
rgb_bits_t *work = &(sp->_direct_color);
#define max_direct_color(name) ((1 << work->bits.name) - 1)
#define value_direct_color(max) (1000 * ((color >> bitoff) & max)) / max
int max_r = max_direct_color(red);
int max_g = max_direct_color(green);
int max_b = max_direct_color(blue);
int bitoff = 0;
c_b = value_direct_color(max_b);
bitoff += work->bits.blue;
c_g = value_direct_color(max_g);
bitoff += work->bits.green;
c_r = value_direct_color(max_r);
} else {
c_r = sp->_color_table[color].red;
c_g = sp->_color_table[color].green;
c_b = sp->_color_table[color].blue;
}
if (r)
*r = c_r;
if (g)
*g = c_g;
if (b)
*b = c_b;
TR(TRACE_ATTRS, ("...color_content(%d,%d,%d,%d)",
color, c_r, c_g, c_b));
result = OK;
}
returnCode(result);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(color_content) (NCURSES_SP_DCLx
NCURSES_COLOR_T color,
NCURSES_COLOR_T *r,
NCURSES_COLOR_T *g,
NCURSES_COLOR_T *b)
{
int my_r, my_g, my_b;
int rc = _nc_color_content(SP_PARM, color, &my_r, &my_g, &my_b);
if (rc == OK) {
*r = limit_COLOR(my_r);
*g = limit_COLOR(my_g);
*b = limit_COLOR(my_b);
}
return rc;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
color_content(NCURSES_COLOR_T color,
NCURSES_COLOR_T *r,
NCURSES_COLOR_T *g,
NCURSES_COLOR_T *b)
{
return NCURSES_SP_NAME(color_content) (CURRENT_SCREEN, color, r, g, b);
}
#endif
NCURSES_EXPORT(int)
_nc_pair_content(SCREEN *sp, int pair, int *f, int *b)
{
int result;
T((T_CALLED("pair_content(%p,%d,%p,%p)"),
(void *) sp,
(int) pair,
(void *) f,
(void *) b));
if (!ValidPair(sp, pair)) {
result = ERR;
} else {
int fg;
int bg;
ReservePairs(sp, pair);
fg = FORE_OF(sp->_color_pairs[pair]);
bg = BACK_OF(sp->_color_pairs[pair]);
#if NCURSES_EXT_FUNCS
if (isDefaultColor(fg))
fg = -1;
if (isDefaultColor(bg))
bg = -1;
#endif
if (f)
*f = fg;
if (b)
*b = bg;
TR(TRACE_ATTRS, ("...pair_content(%p,%d,%d,%d)",
(void *) sp,
(int) pair,
(int) fg, (int) bg));
result = OK;
}
returnCode(result);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(pair_content) (NCURSES_SP_DCLx
NCURSES_PAIRS_T pair,
NCURSES_COLOR_T *f,
NCURSES_COLOR_T *b)
{
int my_f, my_b;
int rc = _nc_pair_content(SP_PARM, pair, &my_f, &my_b);
if (rc == OK) {
*f = limit_COLOR(my_f);
*b = limit_COLOR(my_b);
}
return rc;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
pair_content(NCURSES_COLOR_T pair, NCURSES_COLOR_T *f, NCURSES_COLOR_T *b)
{
return NCURSES_SP_NAME(pair_content) (CURRENT_SCREEN, pair, f, b);
}
#endif
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_DCLx
int old_pair,
int pair,
int reverse,
NCURSES_SP_OUTC outc)
{
#ifdef USE_TERM_DRIVER
CallDriver_4(SP_PARM, td_docolor, old_pair, pair, reverse, outc);
#else
int fg = COLOR_DEFAULT;
int bg = COLOR_DEFAULT;
int old_fg = -1;
int old_bg = -1;
if (!ValidPair(SP_PARM, pair)) {
return;
} else if (pair != 0) {
if (set_color_pair) {
TPUTS_TRACE("set_color_pair");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(set_color_pair, pair),
+ TIPARM_1(set_color_pair, pair),
1, outc);
return;
} else if (SP_PARM != 0) {
if (_nc_pair_content(SP_PARM, pair, &fg, &bg) == ERR)
return;
}
}
if (old_pair >= 0
&& SP_PARM != 0
&& _nc_pair_content(SP_PARM, old_pair, &old_fg, &old_bg) != ERR) {
if ((isDefaultColor(fg) && !isDefaultColor(old_fg))
|| (isDefaultColor(bg) && !isDefaultColor(old_bg))) {
#if NCURSES_EXT_FUNCS
/*
* A minor optimization - but extension. If "AX" is specified in
* the terminal description, treat it as screen's indicator of ECMA
* SGR 39 and SGR 49, and assume the two sequences are independent.
*/
if (SP_PARM->_has_sgr_39_49
&& isDefaultColor(old_bg)
&& !isDefaultColor(old_fg)) {
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx "\033[39m", 1, outc);
} else if (SP_PARM->_has_sgr_39_49
&& isDefaultColor(old_fg)
&& !isDefaultColor(old_bg)) {
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx "\033[49m", 1, outc);
} else
#endif
reset_color_pair(NCURSES_SP_ARG);
}
} else {
reset_color_pair(NCURSES_SP_ARG);
if (old_pair < 0 && pair <= 0)
return;
}
#if NCURSES_EXT_FUNCS
if (isDefaultColor(fg))
fg = default_fg(NCURSES_SP_ARG);
if (isDefaultColor(bg))
bg = default_bg(NCURSES_SP_ARG);
#endif
if (reverse) {
int xx = fg;
fg = bg;
bg = xx;
}
TR(TRACE_ATTRS, ("setting colors: pair = %d, fg = %d, bg = %d", pair,
fg, bg));
if (!isDefaultColor(fg)) {
set_foreground_color(NCURSES_SP_ARGx fg, outc);
}
if (!isDefaultColor(bg)) {
set_background_color(NCURSES_SP_ARGx bg, outc);
}
#endif
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
_nc_do_color(int old_pair, int pair, int reverse, NCURSES_OUTC outc)
{
SetSafeOutcWrapper(outc);
NCURSES_SP_NAME(_nc_do_color) (CURRENT_SCREEN,
old_pair,
pair,
reverse,
_nc_outc_wrapper);
}
#endif
#if NCURSES_EXT_COLORS
NCURSES_EXPORT(int)
NCURSES_SP_NAME(init_extended_pair) (NCURSES_SP_DCLx int pair, int f, int b)
{
return _nc_init_pair(SP_PARM, pair, f, b);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(init_extended_color) (NCURSES_SP_DCLx
int color,
int r, int g, int b)
{
return _nc_init_color(SP_PARM, color, r, g, b);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(extended_color_content) (NCURSES_SP_DCLx
int color,
int *r, int *g, int *b)
{
return _nc_color_content(SP_PARM, color, r, g, b);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(extended_pair_content) (NCURSES_SP_DCLx
int pair,
int *f, int *b)
{
return _nc_pair_content(SP_PARM, pair, f, b);
}
NCURSES_EXPORT(void)
NCURSES_SP_NAME(reset_color_pairs) (NCURSES_SP_DCL0)
{
if (SP_PARM != 0) {
if (SP_PARM->_color_pairs) {
_nc_free_ordered_pairs(SP_PARM);
free(SP_PARM->_color_pairs);
SP_PARM->_color_pairs = 0;
SP_PARM->_pair_alloc = 0;
ReservePairs(SP_PARM, 16);
clearok(CurScreen(SP_PARM), TRUE);
touchwin(StdScreen(SP_PARM));
}
}
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
init_extended_pair(int pair, int f, int b)
{
return NCURSES_SP_NAME(init_extended_pair) (CURRENT_SCREEN, pair, f, b);
}
NCURSES_EXPORT(int)
init_extended_color(int color, int r, int g, int b)
{
return NCURSES_SP_NAME(init_extended_color) (CURRENT_SCREEN,
color,
r, g, b);
}
NCURSES_EXPORT(int)
extended_color_content(int color, int *r, int *g, int *b)
{
return NCURSES_SP_NAME(extended_color_content) (CURRENT_SCREEN,
color,
r, g, b);
}
NCURSES_EXPORT(int)
extended_pair_content(int pair, int *f, int *b)
{
return NCURSES_SP_NAME(extended_pair_content) (CURRENT_SCREEN, pair, f, b);
}
NCURSES_EXPORT(void)
reset_color_pairs(void)
{
NCURSES_SP_NAME(reset_color_pairs) (CURRENT_SCREEN);
}
#endif /* NCURSES_SP_FUNCS */
#endif /* NCURSES_EXT_COLORS */
diff --git a/contrib/ncurses/ncurses/base/lib_driver.c b/contrib/ncurses/ncurses/base/lib_driver.c
index 546760710cb7..c53802f3732a 100644
--- a/contrib/ncurses/ncurses/base/lib_driver.c
+++ b/contrib/ncurses/ncurses/base/lib_driver.c
@@ -1,146 +1,148 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 2009-2012,2014 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer *
* *
****************************************************************************/
#include <curses.priv.h>
-MODULE_ID("$Id: lib_driver.c,v 1.8 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_driver.c,v 1.9 2020/08/29 19:53:35 tom Exp $")
+#ifndef EXP_WIN32_DRIVER
typedef struct DriverEntry {
const char *name;
TERM_DRIVER *driver;
} DRIVER_ENTRY;
static DRIVER_ENTRY DriverTable[] =
{
#ifdef _WIN32
{"win32console", &_nc_WIN_DRIVER},
#endif
{"tinfo", &_nc_TINFO_DRIVER} /* must be last */
};
NCURSES_EXPORT(int)
_nc_get_driver(TERMINAL_CONTROL_BLOCK * TCB, const char *name, int *errret)
{
int code = ERR;
size_t i;
TERM_DRIVER *res = (TERM_DRIVER *) 0;
TERM_DRIVER *use = 0;
T((T_CALLED("_nc_get_driver(%p, %s, %p)"),
(void *) TCB, NonNull(name), (void *) errret));
assert(TCB != 0);
for (i = 0; i < SIZEOF(DriverTable); i++) {
res = DriverTable[i].driver;
if (strcmp(DriverTable[i].name, res->td_name(TCB)) == 0) {
if (res->td_CanHandle(TCB, name, errret)) {
use = res;
break;
}
}
}
if (use != 0) {
TCB->drv = use;
code = OK;
}
returnCode(code);
}
+#endif /* !EXP_WIN32_DRIVER */
NCURSES_EXPORT(int)
NCURSES_SP_NAME(has_key) (SCREEN *sp, int keycode)
{
T((T_CALLED("has_key(%p, %d)"), (void *) sp, keycode));
returnCode(IsValidTIScreen(sp) ? CallDriver_1(sp, td_kyExist, keycode) : FALSE);
}
NCURSES_EXPORT(int)
has_key(int keycode)
{
return NCURSES_SP_NAME(has_key) (CURRENT_SCREEN, keycode);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(_nc_mcprint) (SCREEN *sp, char *data, int len)
{
int code = ERR;
if (0 != TerminalOf(sp))
code = CallDriver_2(sp, td_print, data, len);
return (code);
}
NCURSES_EXPORT(int)
mcprint(char *data, int len)
{
return NCURSES_SP_NAME(_nc_mcprint) (CURRENT_SCREEN, data, len);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(doupdate) (SCREEN *sp)
{
int code = ERR;
T((T_CALLED("doupdate(%p)"), (void *) sp));
if (IsValidScreen(sp))
code = CallDriver(sp, td_update);
returnCode(code);
}
NCURSES_EXPORT(int)
doupdate(void)
{
return NCURSES_SP_NAME(doupdate) (CURRENT_SCREEN);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(mvcur) (SCREEN *sp, int yold, int xold, int ynew, int xnew)
{
int code = ERR;
TR(TRACE_CALLS | TRACE_MOVE, (T_CALLED("mvcur(%p,%d,%d,%d,%d)"),
(void *) sp, yold, xold, ynew, xnew));
if (HasTerminal(sp)) {
code = CallDriver_4(sp, td_hwcur, yold, xold, ynew, xnew);
}
returnCode(code);
}
NCURSES_EXPORT(int)
mvcur(int yold, int xold, int ynew, int xnew)
/* optimized cursor move from (yold, xold) to (ynew, xnew) */
{
return NCURSES_SP_NAME(mvcur) (CURRENT_SCREEN, yold, xold, ynew, xnew);
}
diff --git a/contrib/ncurses/ncurses/base/lib_getch.c b/contrib/ncurses/ncurses/base/lib_getch.c
index bf2115dd0641..38537591afc0 100644
--- a/contrib/ncurses/ncurses/base/lib_getch.c
+++ b/contrib/ncurses/ncurses/base/lib_getch.c
@@ -1,765 +1,803 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2015,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
/*
** lib_getch.c
**
** The routine getch().
**
*/
+#define NEED_KEY_EVENT
#include <curses.priv.h>
-MODULE_ID("$Id: lib_getch.c,v 1.139 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_getch.c,v 1.141 2020/09/05 22:50:47 tom Exp $")
#include <fifo_defs.h>
#if USE_REENTRANT
#define GetEscdelay(sp) *_nc_ptr_Escdelay(sp)
NCURSES_EXPORT(int)
NCURSES_PUBLIC_VAR(ESCDELAY) (void)
{
return *(_nc_ptr_Escdelay(CURRENT_SCREEN));
}
NCURSES_EXPORT(int *)
_nc_ptr_Escdelay(SCREEN *sp)
{
return ptrEscdelay(sp);
}
#else
#define GetEscdelay(sp) ESCDELAY
NCURSES_EXPORT_VAR(int) ESCDELAY = 1000;
#endif
#if NCURSES_EXT_FUNCS
NCURSES_EXPORT(int)
NCURSES_SP_NAME(set_escdelay) (NCURSES_SP_DCLx int value)
{
int code = OK;
if (value < 0) {
code = ERR;
} else {
#if USE_REENTRANT
if (SP_PARM) {
SET_ESCDELAY(value);
} else {
code = ERR;
}
#else
(void) SP_PARM;
ESCDELAY = value;
#endif
}
return code;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
set_escdelay(int value)
{
int code;
if (value < 0) {
code = ERR;
} else {
#if USE_REENTRANT
code = NCURSES_SP_NAME(set_escdelay) (CURRENT_SCREEN, value);
#else
ESCDELAY = value;
code = OK;
#endif
}
return code;
}
#endif
#endif /* NCURSES_EXT_FUNCS */
#if NCURSES_EXT_FUNCS
NCURSES_EXPORT(int)
NCURSES_SP_NAME(get_escdelay) (NCURSES_SP_DCL0)
{
#if !USE_REENTRANT
(void) SP_PARM;
#endif
return GetEscdelay(SP_PARM);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
get_escdelay(void)
{
return NCURSES_SP_NAME(get_escdelay) (CURRENT_SCREEN);
}
#endif
#endif /* NCURSES_EXT_FUNCS */
static int
_nc_use_meta(WINDOW *win)
{
SCREEN *sp = _nc_screen_of(win);
return (sp ? sp->_use_meta : 0);
}
#ifdef USE_TERM_DRIVER
-# ifdef _WIN32
+# if defined(_NC_WINDOWS) && !defined(EXP_WIN32_DRIVER)
static HANDLE
_nc_get_handle(int fd)
{
intptr_t value = _get_osfhandle(fd);
return (HANDLE) value;
}
# endif
#endif
/*
* Check for mouse activity, returning nonzero if we find any.
*/
static int
check_mouse_activity(SCREEN *sp, int delay EVENTLIST_2nd(_nc_eventlist * evl))
{
int rc;
#ifdef USE_TERM_DRIVER
TERMINAL_CONTROL_BLOCK *TCB = TCBOf(sp);
rc = TCBOf(sp)->drv->td_testmouse(TCBOf(sp), delay EVENTLIST_2nd(evl));
-# ifdef _WIN32
+# if defined(EXP_WIN32_DRIVER)
+ /* if we emulate terminfo on console, we have to use the console routine */
+ if (IsTermInfoOnConsole(sp)) {
+ rc = _nc_console_testmouse(sp,
+ _nc_console_handle(sp->_ifd),
+ delay EVENTLIST_2nd(evl));
+ } else
+# elif defined(_NC_WINDOWS)
/* if we emulate terminfo on console, we have to use the console routine */
if (IsTermInfoOnConsole(sp)) {
HANDLE fd = _nc_get_handle(sp->_ifd);
rc = _nc_mingw_testmouse(sp, fd, delay EVENTLIST_2nd(evl));
} else
# endif
rc = TCB->drv->td_testmouse(TCB, delay EVENTLIST_2nd(evl));
-#else
-#if USE_SYSMOUSE
+#else /* !USE_TERM_DRIVER */
+# if USE_SYSMOUSE
if ((sp->_mouse_type == M_SYSMOUSE)
&& (sp->_sysmouse_head < sp->_sysmouse_tail)) {
rc = TW_MOUSE;
} else
-#endif
+# endif
{
+# if defined(EXP_WIN32_DRIVER)
+ rc = _nc_console_testmouse(sp,
+ _nc_console_handle(sp->_ifd),
+ delay
+ EVENTLIST_2nd(evl));
+# else
rc = _nc_timed_wait(sp,
TWAIT_MASK,
delay,
(int *) 0
EVENTLIST_2nd(evl));
-#if USE_SYSMOUSE
+# endif
+# if USE_SYSMOUSE
if ((sp->_mouse_type == M_SYSMOUSE)
&& (sp->_sysmouse_head < sp->_sysmouse_tail)
&& (rc == 0)
&& (errno == EINTR)) {
rc |= TW_MOUSE;
}
-#endif
+# endif
}
-#endif
+#endif /* USE_TERM_DRIVER */
return rc;
}
static NCURSES_INLINE int
fifo_peek(SCREEN *sp)
{
int ch = (peek >= 0) ? sp->_fifo[peek] : ERR;
TR(TRACE_IEVENT, ("peeking at %d", peek));
p_inc();
return ch;
}
static NCURSES_INLINE int
fifo_pull(SCREEN *sp)
{
int ch = (head >= 0) ? sp->_fifo[head] : ERR;
TR(TRACE_IEVENT, ("pulling %s from %d", _nc_tracechar(sp, ch), head));
if (peek == head) {
h_inc();
peek = head;
} else {
h_inc();
}
#ifdef TRACE
if (USE_TRACEF(TRACE_IEVENT)) {
_nc_fifo_dump(sp);
_nc_unlock_global(tracef);
}
#endif
return ch;
}
static NCURSES_INLINE int
fifo_push(SCREEN *sp EVENTLIST_2nd(_nc_eventlist * evl))
{
int n;
int ch = 0;
int mask = 0;
(void) mask;
if (tail < 0)
return ERR;
#ifdef NCURSES_WGETCH_EVENTS
if (evl
#if USE_GPM_SUPPORT || USE_EMX_MOUSE || USE_SYSMOUSE
|| (sp->_mouse_fd >= 0)
#endif
) {
mask = check_mouse_activity(sp, -1 EVENTLIST_2nd(evl));
} else
mask = 0;
if (mask & TW_EVENT) {
T(("fifo_push: ungetch KEY_EVENT"));
safe_ungetch(sp, KEY_EVENT);
return KEY_EVENT;
}
#elif USE_GPM_SUPPORT || USE_EMX_MOUSE || USE_SYSMOUSE
if (sp->_mouse_fd >= 0) {
mask = check_mouse_activity(sp, -1 EVENTLIST_2nd(evl));
}
#endif
#if USE_GPM_SUPPORT || USE_EMX_MOUSE
if ((sp->_mouse_fd >= 0) && (mask & TW_MOUSE)) {
sp->_mouse_event(sp);
ch = KEY_MOUSE;
n = 1;
} else
#endif
#if USE_SYSMOUSE
if ((sp->_mouse_type == M_SYSMOUSE)
&& (sp->_sysmouse_head < sp->_sysmouse_tail)) {
sp->_mouse_event(sp);
ch = KEY_MOUSE;
n = 1;
} else if ((sp->_mouse_type == M_SYSMOUSE)
&& (mask <= 0) && errno == EINTR) {
sp->_mouse_event(sp);
ch = KEY_MOUSE;
n = 1;
} else
#endif
#ifdef USE_TERM_DRIVER
if ((sp->_mouse_type == M_TERM_DRIVER)
&& (sp->_drv_mouse_head < sp->_drv_mouse_tail)) {
sp->_mouse_event(sp);
ch = KEY_MOUSE;
n = 1;
} else
#endif
#if USE_KLIBC_KBD
if (NC_ISATTY(sp->_ifd) && sp->_cbreak) {
ch = _read_kbd(0, 1, !sp->_raw);
n = (ch == -1) ? -1 : 1;
sp->_extended_key = (ch == 0);
} else
#endif
{ /* Can block... */
-#ifdef USE_TERM_DRIVER
+#if defined(USE_TERM_DRIVER)
int buf;
-#ifdef _WIN32
+# if defined(EXP_WIN32_DRIVER)
+ if (NC_ISATTY(sp->_ifd) && IsTermInfoOnConsole(sp) && sp->_cbreak) {
+# if USE_PTHREADS_EINTR
+ if ((pthread_self) && (pthread_kill) && (pthread_equal))
+ _nc_globals.read_thread = pthread_self();
+# endif
+ n = _nc_console_read(sp,
+ _nc_console_handle(sp->_ifd),
+ &buf);
+# if USE_PTHREADS_EINTR
+ _nc_globals.read_thread = 0;
+# endif
+ } else
+# elif defined(_NC_WINDOWS)
if (NC_ISATTY(sp->_ifd) && IsTermInfoOnConsole(sp) && sp->_cbreak)
n = _nc_mingw_console_read(sp,
_nc_get_handle(sp->_ifd),
&buf);
else
-#endif
+# endif /* EXP_WIN32_DRIVER */
n = CallDriver_1(sp, td_read, &buf);
ch = buf;
-#else
+#else /* !USE_TERM_DRIVER */
+#if defined(EXP_WIN32_DRIVER)
+ int buf;
+#endif
unsigned char c2 = 0;
-# if USE_PTHREADS_EINTR
-# if USE_WEAK_SYMBOLS
+#if USE_PTHREADS_EINTR
+#if USE_WEAK_SYMBOLS
if ((pthread_self) && (pthread_kill) && (pthread_equal))
-# endif
+#endif
_nc_globals.read_thread = pthread_self();
-# endif
+#endif
+#if defined(EXP_WIN32_DRIVER)
+ n = _nc_console_read(sp,
+ _nc_console_handle(sp->_ifd),
+ &buf);
+ c2 = buf;
+#else
n = (int) read(sp->_ifd, &c2, (size_t) 1);
+#endif
#if USE_PTHREADS_EINTR
_nc_globals.read_thread = 0;
#endif
ch = c2;
-#endif
+#endif /* USE_TERM_DRIVER */
}
if ((n == -1) || (n == 0)) {
TR(TRACE_IEVENT, ("read(%d,&ch,1)=%d, errno=%d", sp->_ifd, n, errno));
ch = ERR;
}
TR(TRACE_IEVENT, ("read %d characters", n));
sp->_fifo[tail] = ch;
sp->_fifohold = 0;
if (head == -1)
head = peek = tail;
t_inc();
TR(TRACE_IEVENT, ("pushed %s at %d", _nc_tracechar(sp, ch), tail));
#ifdef TRACE
if (USE_TRACEF(TRACE_IEVENT)) {
_nc_fifo_dump(sp);
_nc_unlock_global(tracef);
}
#endif
return ch;
}
static NCURSES_INLINE void
fifo_clear(SCREEN *sp)
{
memset(sp->_fifo, 0, sizeof(sp->_fifo));
head = -1;
tail = peek = 0;
}
static int kgetch(SCREEN *, bool EVENTLIST_2nd(_nc_eventlist *));
static void
recur_wrefresh(WINDOW *win)
{
#ifdef USE_PTHREADS
SCREEN *sp = _nc_screen_of(win);
if (_nc_use_pthreads && sp != CURRENT_SCREEN) {
SCREEN *save_SP;
/* temporarily switch to the window's screen to check/refresh */
_nc_lock_global(curses);
save_SP = CURRENT_SCREEN;
_nc_set_screen(sp);
recur_wrefresh(win);
_nc_set_screen(save_SP);
_nc_unlock_global(curses);
} else
#endif
if ((is_wintouched(win) || (win->_flags & _HASMOVED))
&& !(win->_flags & _ISPAD)) {
wrefresh(win);
}
}
static int
recur_wgetnstr(WINDOW *win, char *buf)
{
SCREEN *sp = _nc_screen_of(win);
int rc;
if (sp != 0) {
#ifdef USE_PTHREADS
if (_nc_use_pthreads && sp != CURRENT_SCREEN) {
SCREEN *save_SP;
/* temporarily switch to the window's screen to get cooked input */
_nc_lock_global(curses);
save_SP = CURRENT_SCREEN;
_nc_set_screen(sp);
rc = recur_wgetnstr(win, buf);
_nc_set_screen(save_SP);
_nc_unlock_global(curses);
} else
#endif
{
sp->_called_wgetch = TRUE;
rc = wgetnstr(win, buf, MAXCOLUMNS);
sp->_called_wgetch = FALSE;
}
} else {
rc = ERR;
}
return rc;
}
NCURSES_EXPORT(int)
_nc_wgetch(WINDOW *win,
int *result,
int use_meta
EVENTLIST_2nd(_nc_eventlist * evl))
{
SCREEN *sp;
int ch;
int rc = 0;
#ifdef NCURSES_WGETCH_EVENTS
int event_delay = -1;
#endif
T((T_CALLED("_nc_wgetch(%p)"), (void *) win));
*result = 0;
sp = _nc_screen_of(win);
if (win == 0 || sp == 0) {
returnCode(ERR);
}
if (cooked_key_in_fifo()) {
recur_wrefresh(win);
*result = fifo_pull(sp);
returnCode(*result >= KEY_MIN ? KEY_CODE_YES : OK);
}
#ifdef NCURSES_WGETCH_EVENTS
if (evl && (evl->count == 0))
evl = NULL;
event_delay = _nc_eventlist_timeout(evl);
#endif
/*
* Handle cooked mode. Grab a string from the screen,
* stuff its contents in the FIFO queue, and pop off
* the first character to return it.
*/
if (head == -1 &&
!sp->_notty &&
!sp->_raw &&
!sp->_cbreak &&
!sp->_called_wgetch) {
char buf[MAXCOLUMNS], *bufp;
TR(TRACE_IEVENT, ("filling queue in cooked mode"));
/* ungetch in reverse order */
#ifdef NCURSES_WGETCH_EVENTS
rc = recur_wgetnstr(win, buf);
if (rc != KEY_EVENT && rc != ERR)
safe_ungetch(sp, '\n');
#else
if (recur_wgetnstr(win, buf) != ERR)
safe_ungetch(sp, '\n');
#endif
for (bufp = buf + strlen(buf); bufp > buf; bufp--)
safe_ungetch(sp, bufp[-1]);
#ifdef NCURSES_WGETCH_EVENTS
/* Return it first */
if (rc == KEY_EVENT) {
*result = rc;
} else
#endif
*result = fifo_pull(sp);
returnCode(*result >= KEY_MIN ? KEY_CODE_YES : OK);
}
if (win->_use_keypad != sp->_keypad_on)
_nc_keypad(sp, win->_use_keypad);
recur_wrefresh(win);
if (win->_notimeout || (win->_delay >= 0) || (sp->_cbreak > 1)) {
if (head == -1) { /* fifo is empty */
int delay;
TR(TRACE_IEVENT, ("timed delay in wgetch()"));
if (sp->_cbreak > 1)
delay = (sp->_cbreak - 1) * 100;
else
delay = win->_delay;
#ifdef NCURSES_WGETCH_EVENTS
if (event_delay >= 0 && delay > event_delay)
delay = event_delay;
#endif
TR(TRACE_IEVENT, ("delay is %d milliseconds", delay));
rc = check_mouse_activity(sp, delay EVENTLIST_2nd(evl));
#ifdef NCURSES_WGETCH_EVENTS
if (rc & TW_EVENT) {
*result = KEY_EVENT;
returnCode(KEY_CODE_YES);
}
#endif
if (!rc) {
goto check_sigwinch;
}
}
/* else go on to read data available */
}
if (win->_use_keypad) {
/*
* This is tricky. We only want to get special-key
* events one at a time. But we want to accumulate
* mouse events until either (a) the mouse logic tells
* us it's picked up a complete gesture, or (b)
* there's a detectable time lapse after one.
*
* Note: if the mouse code starts failing to compose
* press/release events into clicks, you should probably
* increase the wait with mouseinterval().
*/
int runcount = 0;
do {
ch = kgetch(sp, win->_notimeout EVENTLIST_2nd(evl));
if (ch == KEY_MOUSE) {
++runcount;
if (sp->_mouse_inline(sp))
break;
}
if (sp->_maxclick < 0)
break;
} while
(ch == KEY_MOUSE
&& (((rc = check_mouse_activity(sp, sp->_maxclick
EVENTLIST_2nd(evl))) != 0
&& !(rc & TW_EVENT))
|| !sp->_mouse_parse(sp, runcount)));
#ifdef NCURSES_WGETCH_EVENTS
if ((rc & TW_EVENT) && !(ch == KEY_EVENT)) {
safe_ungetch(sp, ch);
ch = KEY_EVENT;
}
#endif
if (runcount > 0 && ch != KEY_MOUSE) {
#ifdef NCURSES_WGETCH_EVENTS
/* mouse event sequence ended by an event, report event */
if (ch == KEY_EVENT) {
safe_ungetch(sp, KEY_MOUSE); /* FIXME This interrupts a gesture... */
} else
#endif
{
/* mouse event sequence ended by keystroke, store keystroke */
safe_ungetch(sp, ch);
ch = KEY_MOUSE;
}
}
} else {
if (head == -1)
fifo_push(sp EVENTLIST_2nd(evl));
ch = fifo_pull(sp);
}
if (ch == ERR) {
check_sigwinch:
#if USE_SIZECHANGE
if (_nc_handle_sigwinch(sp)) {
_nc_update_screensize(sp);
/* resizeterm can push KEY_RESIZE */
if (cooked_key_in_fifo()) {
*result = fifo_pull(sp);
/*
* Get the ERR from queue -- it is from WINCH,
* so we should take it out, the "error" is handled.
*/
if (fifo_peek(sp) == -1)
fifo_pull(sp);
returnCode(*result >= KEY_MIN ? KEY_CODE_YES : OK);
}
}
#endif
returnCode(ERR);
}
/*
* If echo() is in effect, display the printable version of the
* key on the screen. Carriage return and backspace are treated
* specially by Solaris curses:
*
* If carriage return is defined as a function key in the
* terminfo, e.g., kent, then Solaris may return either ^J (or ^M
* if nonl() is set) or KEY_ENTER depending on the echo() mode.
* We echo before translating carriage return based on nonl(),
* since the visual result simply moves the cursor to column 0.
*
* Backspace is a different matter. Solaris curses does not
* translate it to KEY_BACKSPACE if kbs=^H. This does not depend
* on the stty modes, but appears to be a hardcoded special case.
* This is a difference from ncurses, which uses the terminfo entry.
* However, we provide the same visual result as Solaris, moving the
* cursor to the left.
*/
if (sp->_echo && !(win->_flags & _ISPAD)) {
chtype backup = (chtype) ((ch == KEY_BACKSPACE) ? '\b' : ch);
if (backup < KEY_MIN)
wechochar(win, backup);
}
/*
* Simulate ICRNL mode
*/
if ((ch == '\r') && sp->_nl)
ch = '\n';
/* Strip 8th-bit if so desired. We do this only for characters that
* are in the range 128-255, to provide compatibility with terminals
* that display only 7-bit characters. Note that 'ch' may be a
* function key at this point, so we mustn't strip _those_.
*/
if (!use_meta)
if ((ch < KEY_MIN) && (ch & 0x80))
ch &= 0x7f;
T(("wgetch returning : %s", _nc_tracechar(sp, ch)));
*result = ch;
returnCode(ch >= KEY_MIN ? KEY_CODE_YES : OK);
}
#ifdef NCURSES_WGETCH_EVENTS
NCURSES_EXPORT(int)
wgetch_events(WINDOW *win, _nc_eventlist * evl)
{
int code;
int value;
T((T_CALLED("wgetch_events(%p,%p)"), (void *) win, (void *) evl));
code = _nc_wgetch(win,
&value,
_nc_use_meta(win)
EVENTLIST_2nd(evl));
if (code != ERR)
code = value;
returnCode(code);
}
#endif
NCURSES_EXPORT(int)
wgetch(WINDOW *win)
{
int code;
int value;
T((T_CALLED("wgetch(%p)"), (void *) win));
code = _nc_wgetch(win,
&value,
_nc_use_meta(win)
EVENTLIST_2nd((_nc_eventlist *) 0));
if (code != ERR)
code = value;
returnCode(code);
}
/*
** int
** kgetch()
**
** Get an input character, but take care of keypad sequences, returning
** an appropriate code when one matches the input. After each character
** is received, set an alarm call based on ESCDELAY. If no more of the
** sequence is received by the time the alarm goes off, pass through
** the sequence gotten so far.
**
** This function must be called when there are no cooked keys in queue.
** (that is head==-1 || peek==head)
**
*/
static int
kgetch(SCREEN *sp, bool forever EVENTLIST_2nd(_nc_eventlist * evl))
{
TRIES *ptr;
int ch = 0;
int timeleft = forever ? 9999999 : GetEscdelay(sp);
TR(TRACE_IEVENT, ("kgetch() called"));
ptr = sp->_keytry;
for (;;) {
if (cooked_key_in_fifo() && sp->_fifo[head] >= KEY_MIN) {
break;
} else if (!raw_key_in_fifo()) {
ch = fifo_push(sp EVENTLIST_2nd(evl));
if (ch == ERR) {
peek = head; /* the keys stay uninterpreted */
return ERR;
}
#ifdef NCURSES_WGETCH_EVENTS
else if (ch == KEY_EVENT) {
peek = head; /* the keys stay uninterpreted */
return fifo_pull(sp); /* Remove KEY_EVENT from the queue */
}
#endif
}
ch = fifo_peek(sp);
if (ch >= KEY_MIN) {
/* If not first in queue, somebody put this key there on purpose in
* emergency. Consider it higher priority than the unfinished
* keysequence we are parsing.
*/
peek = head;
/* assume the key is the last in fifo */
t_dec(); /* remove the key */
return ch;
}
TR(TRACE_IEVENT, ("ch: %s", _nc_tracechar(sp, (unsigned char) ch)));
while ((ptr != NULL) && (ptr->ch != (unsigned char) ch))
ptr = ptr->sibling;
if (ptr == NULL) {
TR(TRACE_IEVENT, ("ptr is null"));
break;
}
TR(TRACE_IEVENT, ("ptr=%p, ch=%d, value=%d",
(void *) ptr, ptr->ch, ptr->value));
if (ptr->value != 0) { /* sequence terminated */
TR(TRACE_IEVENT, ("end of sequence"));
if (peek == tail) {
fifo_clear(sp);
} else {
head = peek;
}
return (ptr->value);
}
ptr = ptr->child;
if (!raw_key_in_fifo()) {
int rc;
TR(TRACE_IEVENT, ("waiting for rest of sequence"));
rc = check_mouse_activity(sp, timeleft EVENTLIST_2nd(evl));
#ifdef NCURSES_WGETCH_EVENTS
if (rc & TW_EVENT) {
TR(TRACE_IEVENT, ("interrupted by a user event"));
/* FIXME Should have preserved remainder timeleft for reuse... */
peek = head; /* Restart interpreting later */
return KEY_EVENT;
}
#endif
if (!rc) {
TR(TRACE_IEVENT, ("ran out of time"));
break;
}
}
}
ch = fifo_pull(sp);
peek = head;
return ch;
}
diff --git a/contrib/ncurses/ncurses/base/lib_getstr.c b/contrib/ncurses/ncurses/base/lib_getstr.c
index d0b09a3b927e..7871fb357a62 100644
--- a/contrib/ncurses/ncurses/base/lib_getstr.c
+++ b/contrib/ncurses/ncurses/base/lib_getstr.c
@@ -1,227 +1,228 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 1998-2011,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
/*
** lib_getstr.c
**
** The routine wgetstr().
**
*/
+#define NEED_KEY_EVENT
#include <curses.priv.h>
-MODULE_ID("$Id: lib_getstr.c,v 1.34 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_getstr.c,v 1.35 2020/07/18 20:02:24 tom Exp $")
/*
* This wipes out the last character, no matter whether it was a tab, control
* or other character, and handles reverse wraparound.
*/
static char *
WipeOut(WINDOW *win, int y, int x, char *first, char *last, int echoed)
{
if (last > first) {
*--last = '\0';
if (echoed) {
int y1 = win->_cury;
int x1 = win->_curx;
wmove(win, y, x);
waddstr(win, first);
getyx(win, y, x);
while (win->_cury < y1
|| (win->_cury == y1 && win->_curx < x1))
waddch(win, (chtype) ' ');
wmove(win, y, x);
}
}
return last;
}
NCURSES_EXPORT(int)
wgetnstr_events(WINDOW *win,
char *str,
int maxlen,
EVENTLIST_1st(_nc_eventlist * evl))
{
SCREEN *sp = _nc_screen_of(win);
TTY buf;
bool oldnl, oldecho, oldraw, oldcbreak;
char erasec;
char killc;
char *oldstr;
int ch;
int y, x;
T((T_CALLED("wgetnstr(%p,%p,%d)"), (void *) win, (void *) str, maxlen));
if (!win || !str)
returnCode(ERR);
maxlen = _nc_getstr_limit(maxlen);
NCURSES_SP_NAME(_nc_get_tty_mode) (NCURSES_SP_ARGx &buf);
oldnl = sp->_nl;
oldecho = sp->_echo;
oldraw = sp->_raw;
oldcbreak = sp->_cbreak;
NCURSES_SP_NAME(nl) (NCURSES_SP_ARG);
NCURSES_SP_NAME(noecho) (NCURSES_SP_ARG);
NCURSES_SP_NAME(noraw) (NCURSES_SP_ARG);
NCURSES_SP_NAME(cbreak) (NCURSES_SP_ARG);
erasec = NCURSES_SP_NAME(erasechar) (NCURSES_SP_ARG);
killc = NCURSES_SP_NAME(killchar) (NCURSES_SP_ARG);
oldstr = str;
getyx(win, y, x);
if (is_wintouched(win) || (win->_flags & _HASMOVED))
wrefresh(win);
while ((ch = wgetch_events(win, evl)) != ERR) {
/*
* Some terminals (the Wyse-50 is the most common) generate
* a \n from the down-arrow key. With this logic, it's the
* user's choice whether to set kcud=\n for wgetch();
* terminating *getstr() with \n should work either way.
*/
if (ch == '\n'
|| ch == '\r'
|| ch == KEY_DOWN
|| ch == KEY_ENTER) {
if (oldecho == TRUE
&& win->_cury == win->_maxy
&& win->_scroll)
wechochar(win, (chtype) '\n');
break;
}
#ifdef KEY_EVENT
if (ch == KEY_EVENT)
break;
#endif
#ifdef KEY_RESIZE
if (ch == KEY_RESIZE)
break;
#endif
if (ch == erasec || ch == KEY_LEFT || ch == KEY_BACKSPACE) {
if (str > oldstr) {
str = WipeOut(win, y, x, oldstr, str, oldecho);
}
} else if (ch == killc) {
while (str > oldstr) {
str = WipeOut(win, y, x, oldstr, str, oldecho);
}
} else if (ch >= KEY_MIN
|| (str - oldstr >= maxlen)) {
NCURSES_SP_NAME(beep) (NCURSES_SP_ARG);
} else {
*str++ = (char) ch;
if (oldecho == TRUE) {
int oldy = win->_cury;
if (waddch(win, (chtype) ch) == ERR) {
/*
* We can't really use the lower-right
* corner for input, since it'll mess
* up bookkeeping for erases.
*/
win->_flags &= ~_WRAPPED;
waddch(win, (chtype) ' ');
str = WipeOut(win, y, x, oldstr, str, oldecho);
continue;
} else if (win->_flags & _WRAPPED) {
/*
* If the last waddch forced a wrap &
* scroll, adjust our reference point
* for erasures.
*/
if (win->_scroll
&& oldy == win->_maxy
&& win->_cury == win->_maxy) {
if (--y <= 0) {
y = 0;
}
}
win->_flags &= ~_WRAPPED;
}
wrefresh(win);
}
}
}
win->_curx = 0;
win->_flags &= ~_WRAPPED;
if (win->_cury < win->_maxy)
win->_cury++;
wrefresh(win);
/* Restore with a single I/O call, to fix minor asymmetry between
* raw/noraw, etc.
*/
sp->_nl = oldnl;
sp->_echo = oldecho;
sp->_raw = oldraw;
sp->_cbreak = oldcbreak;
NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
*str = '\0';
if (ch == ERR)
returnCode(ch);
T(("wgetnstr returns %s", _nc_visbuf(oldstr)));
#ifdef KEY_EVENT
if (ch == KEY_EVENT)
returnCode(ch);
#endif
#ifdef KEY_RESIZE
if (ch == KEY_RESIZE)
returnCode(ch);
#endif
returnCode(OK);
}
#ifdef NCURSES_WGETCH_EVENTS
NCURSES_EXPORT(int)
wgetnstr(WINDOW *win, char *str, int maxlen)
{
returnCode(wgetnstr_events(win,
str,
maxlen,
EVENTLIST_1st((_nc_eventlist *) 0)));
}
#endif
diff --git a/contrib/ncurses/ncurses/base/lib_initscr.c b/contrib/ncurses/ncurses/base/lib_initscr.c
index 2ace0924a0ea..6b9149135501 100644
--- a/contrib/ncurses/ncurses/base/lib_initscr.c
+++ b/contrib/ncurses/ncurses/base/lib_initscr.c
@@ -1,111 +1,110 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
/*
** lib_initscr.c
**
** The routines initscr(), and termname().
**
*/
#include <curses.priv.h>
#if HAVE_SYS_TERMIO_H
#include <sys/termio.h> /* needed for ISC */
#endif
-MODULE_ID("$Id: lib_initscr.c,v 1.45 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_initscr.c,v 1.48 2020/09/07 14:26:48 tom Exp $")
NCURSES_EXPORT(WINDOW *)
initscr(void)
{
WINDOW *result;
START_TRACE();
T((T_CALLED("initscr()")));
_nc_init_pthreads();
_nc_lock_global(curses);
/* Portable applications must not call initscr() more than once */
if (!_nc_globals.init_screen) {
const char *env;
char *name;
_nc_globals.init_screen = TRUE;
- if ((env = getenv("TERM")) == 0
- || *env == '\0') {
- env = "unknown";
- }
+ env = getenv("TERM");
+ (void) VALID_TERM_ENV(env, "unknown");
+
if ((name = strdup(env)) == NULL) {
fprintf(stderr, "Error opening allocating $TERM.\n");
ExitProgram(EXIT_FAILURE);
}
#ifdef __CYGWIN__
/*
* 2002/9/21
* Work around a bug in Cygwin. Full-screen subprocesses run from
* bash, in turn spawned from another full-screen process, will dump
* core when attempting to write to stdout. Opening /dev/tty
* explicitly seems to fix the problem.
*/
if (NC_ISATTY(fileno(stdout))) {
FILE *fp = fopen("/dev/tty", "w");
if (fp != 0 && NC_ISATTY(fileno(fp))) {
fclose(stdout);
dup2(fileno(fp), STDOUT_FILENO);
stdout = fdopen(STDOUT_FILENO, "w");
}
}
#endif
if (newterm(name, stdout, stdin) == 0) {
fprintf(stderr, "Error opening terminal: %s.\n", name);
ExitProgram(EXIT_FAILURE);
}
/* def_shell_mode - done in newterm/_nc_setupscreen */
#if NCURSES_SP_FUNCS
NCURSES_SP_NAME(def_prog_mode) (CURRENT_SCREEN);
#else
def_prog_mode();
#endif
free(name);
}
result = stdscr;
_nc_unlock_global(curses);
returnWin(result);
}
diff --git a/contrib/ncurses/ncurses/base/lib_mouse.c b/contrib/ncurses/ncurses/base/lib_mouse.c
index 2530dec5a6e4..6caef327a3c0 100644
--- a/contrib/ncurses/ncurses/base/lib_mouse.c
+++ b/contrib/ncurses/ncurses/base/lib_mouse.c
@@ -1,2014 +1,2056 @@
/****************************************************************************
- * Copyright 2018-2019,2020 Thomas E. Dickey *
+ * Copyright 2018-2020,2021 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer 2008 *
****************************************************************************/
/*
* This module is intended to encapsulate ncurses's interface to pointing
* devices.
*
* The primary method used is xterm's internal mouse-tracking facility.
* Additional methods depend on the platform:
* Alessandro Rubini's GPM server (Linux)
* sysmouse (FreeBSD)
* special-purpose mouse interface for OS/2 EMX.
*
* Notes for implementors of new mouse-interface methods:
*
* The code is logically split into a lower level that accepts event reports
* in a device-dependent format and an upper level that parses mouse gestures
* and filters events. The mediating data structure is a circular queue of
* MEVENT structures.
*
* Functionally, the lower level's job is to pick up primitive events and
* put them on the circular queue. This can happen in one of two ways:
* either (a) _nc_mouse_event() detects a series of incoming mouse reports
* and queues them, or (b) code in lib_getch.c detects the kmous prefix in
* the keyboard input stream and calls _nc_mouse_inline to queue up a series
* of adjacent mouse reports.
*
* In either case, _nc_mouse_parse() should be called after the series is
* accepted to parse the digested mouse reports (low-level MEVENTs) into
* a gesture (a high-level or composite MEVENT).
*
* Don't be too shy about adding new event types or modifiers, if you can find
* room for them in the 32-bit mask. The API is written so that users get
* feedback on which theoretical event types they won't see when they call
* mousemask. There's one bit per button (the RESERVED_EVENT bit) not being
* used yet, and a couple of bits open at the high end.
*/
#ifdef __EMX__
# include <io.h>
# define INCL_DOS
# define INCL_VIO
# define INCL_KBD
# define INCL_MOU
# define INCL_DOSPROCESS
# include <os2.h> /* Need to include before the others */
#endif
#include <curses.priv.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_mouse.c,v 1.184 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_mouse.c,v 1.192 2021/02/14 00:17:09 tom Exp $")
#include <tic.h>
#if USE_GPM_SUPPORT
#include <linux/keyboard.h> /* defines KG_* macros */
#ifdef HAVE_LIBDL
/* use dynamic loader to avoid linkage dependency */
#include <dlfcn.h>
#ifdef RTLD_NOW
#define my_RTLD RTLD_NOW
#else
#ifdef RTLD_LAZY
#define my_RTLD RTLD_LAZY
#else
make an error
#endif
#endif /* RTLD_NOW */
#endif /* HAVE_LIBDL */
#endif /* USE_GPM_SUPPORT */
#if USE_SYSMOUSE
#undef buttons /* symbol conflict in consio.h */
#undef mouse_info /* symbol conflict in consio.h */
#include <osreldate.h>
#if defined(__DragonFly_version) || (defined(__FreeBSD__) && (__FreeBSD_version >= 400017))
#include <sys/consio.h>
#include <sys/fbio.h>
#else
#include <machine/console.h>
#endif
#endif /* use_SYSMOUSE */
#if USE_KLIBC_MOUSE
#include <sys/socket.h>
#define pipe(handles) socketpair(AF_LOCAL, SOCK_STREAM, 0, handles)
#define DosWrite(hfile, pbuffer, cbwrite, pcbactual) \
write(hfile, pbuffer, cbwrite)
#define DosExit(action, result ) /* do nothing */
#define DosCreateThread(ptid, pfn, param, flag, cbStack) \
(*(ptid) = _beginthread(pfn, NULL, cbStack, \
(void *)param), (*(ptid) == -1))
#endif
#define MY_TRACE TRACE_ICALLS|TRACE_IEVENT
#define MASK_RELEASE(x) (mmask_t) NCURSES_MOUSE_MASK(x, 001)
#define MASK_PRESS(x) (mmask_t) NCURSES_MOUSE_MASK(x, 002)
#define MASK_CLICK(x) (mmask_t) NCURSES_MOUSE_MASK(x, 004)
#define MASK_DOUBLE_CLICK(x) (mmask_t) NCURSES_MOUSE_MASK(x, 010)
#define MASK_TRIPLE_CLICK(x) (mmask_t) NCURSES_MOUSE_MASK(x, 020)
#define MASK_RESERVED_EVENT(x) (mmask_t) NCURSES_MOUSE_MASK(x, 040)
#if NCURSES_MOUSE_VERSION == 1
+
#define BUTTON_CLICKED (BUTTON1_CLICKED | BUTTON2_CLICKED | BUTTON3_CLICKED | BUTTON4_CLICKED)
#define BUTTON_PRESSED (BUTTON1_PRESSED | BUTTON2_PRESSED | BUTTON3_PRESSED | BUTTON4_PRESSED)
#define BUTTON_RELEASED (BUTTON1_RELEASED | BUTTON2_RELEASED | BUTTON3_RELEASED | BUTTON4_RELEASED)
#define BUTTON_DOUBLE_CLICKED (BUTTON1_DOUBLE_CLICKED | BUTTON2_DOUBLE_CLICKED | BUTTON3_DOUBLE_CLICKED | BUTTON4_DOUBLE_CLICKED)
#define BUTTON_TRIPLE_CLICKED (BUTTON1_TRIPLE_CLICKED | BUTTON2_TRIPLE_CLICKED | BUTTON3_TRIPLE_CLICKED | BUTTON4_TRIPLE_CLICKED)
+
#define MAX_BUTTONS 4
+
#else
+
#define BUTTON_CLICKED (BUTTON1_CLICKED | BUTTON2_CLICKED | BUTTON3_CLICKED | BUTTON4_CLICKED | BUTTON5_CLICKED)
#define BUTTON_PRESSED (BUTTON1_PRESSED | BUTTON2_PRESSED | BUTTON3_PRESSED | BUTTON4_PRESSED | BUTTON5_PRESSED)
#define BUTTON_RELEASED (BUTTON1_RELEASED | BUTTON2_RELEASED | BUTTON3_RELEASED | BUTTON4_RELEASED | BUTTON5_RELEASED)
#define BUTTON_DOUBLE_CLICKED (BUTTON1_DOUBLE_CLICKED | BUTTON2_DOUBLE_CLICKED | BUTTON3_DOUBLE_CLICKED | BUTTON4_DOUBLE_CLICKED | BUTTON5_DOUBLE_CLICKED)
#define BUTTON_TRIPLE_CLICKED (BUTTON1_TRIPLE_CLICKED | BUTTON2_TRIPLE_CLICKED | BUTTON3_TRIPLE_CLICKED | BUTTON4_TRIPLE_CLICKED | BUTTON5_TRIPLE_CLICKED)
+
+#if NCURSES_MOUSE_VERSION == 2
#define MAX_BUTTONS 5
+#else
+#define MAX_BUTTONS 11
+#endif
+
#endif
#define INVALID_EVENT -1
#define NORMAL_EVENT 0
#define ValidEvent(ep) ((ep)->id != INVALID_EVENT)
#define Invalidate(ep) (ep)->id = INVALID_EVENT
#if USE_GPM_SUPPORT
#ifndef LIBGPM_SONAME
#define LIBGPM_SONAME "libgpm.so"
#endif
#define GET_DLSYM(name) (my_##name = (TYPE_##name) dlsym(sp->_dlopen_gpm, #name))
#endif /* USE_GPM_SUPPORT */
static bool _nc_mouse_parse(SCREEN *, int);
static void _nc_mouse_resume(SCREEN *);
static void _nc_mouse_wrap(SCREEN *);
/* maintain a circular list of mouse events */
#define FirstEV(sp) ((sp)->_mouse_events)
#define LastEV(sp) ((sp)->_mouse_events + EV_MAX - 1)
#undef NEXT
#define NEXT(ep) ((ep >= LastEV(SP_PARM)) \
? FirstEV(SP_PARM) \
: ep + 1)
#undef PREV
#define PREV(ep) ((ep <= FirstEV(SP_PARM)) \
? LastEV(SP_PARM) \
: ep - 1)
#define IndexEV(sp, ep) (ep - FirstEV(sp))
#define RunParams(sp, eventp, runp) \
(long) IndexEV(sp, runp), \
(long) (IndexEV(sp, eventp) + (EV_MAX - 1)) % EV_MAX
#ifdef TRACE
static void
_trace_slot(SCREEN *sp, const char *tag)
{
MEVENT *ep;
_tracef("%s", tag);
for (ep = FirstEV(sp); ep <= LastEV(sp); ep++)
_tracef("mouse event queue slot %ld = %s",
(long) IndexEV(sp, ep),
_nc_tracemouse(sp, ep));
}
#endif
#if USE_EMX_MOUSE
# define TOP_ROW 0
# define LEFT_COL 0
# define M_FD(sp) sp->_mouse_fd
static void
write_event(SCREEN *sp, int down, int button, int x, int y)
{
char buf[6];
unsigned long ignore;
_nc_STRCPY(buf, "\033[M", sizeof(buf)); /* should be the same as key_mouse */
buf[3] = ' ' + (button - 1) + (down ? 0 : 0x40);
buf[4] = ' ' + x - LEFT_COL + 1;
buf[5] = ' ' + y - TOP_ROW + 1;
DosWrite(sp->_emxmouse_wfd, buf, 6, &ignore);
}
static void
#if USE_KLIBC_MOUSE
mouse_server(void *param)
#else
mouse_server(unsigned long param)
#endif
{
SCREEN *sp = (SCREEN *) param;
unsigned short fWait = MOU_WAIT;
/* NOPTRRECT mourt = { 0,0,24,79 }; */
MOUEVENTINFO mouev;
HMOU hmou;
unsigned short mask = MOUSE_BN1_DOWN | MOUSE_BN2_DOWN | MOUSE_BN3_DOWN;
int nbuttons = 3;
int oldstate = 0;
char err[80];
unsigned long rc;
/* open the handle for the mouse */
if (MouOpen(NULL, &hmou) == 0) {
rc = MouSetEventMask(&mask, hmou);
if (rc) { /* retry with 2 buttons */
mask = MOUSE_BN1_DOWN | MOUSE_BN2_DOWN;
rc = MouSetEventMask(&mask, hmou);
nbuttons = 2;
}
if (rc == 0 && MouDrawPtr(hmou) == 0) {
for (;;) {
/* sit and wait on the event queue */
rc = MouReadEventQue(&mouev, &fWait, hmou);
if (rc) {
_nc_SPRINTF(err, _nc_SLIMIT(sizeof(err))
"Error reading mouse queue, rc=%lu.\r\n", rc);
break;
}
if (!sp->_emxmouse_activated)
goto finish;
/*
* OS/2 numbers a 3-button mouse inconsistently from other
* platforms:
* 1 = left
* 2 = right
* 3 = middle.
*/
if ((mouev.fs ^ oldstate) & MOUSE_BN1_DOWN)
write_event(sp, mouev.fs & MOUSE_BN1_DOWN,
sp->_emxmouse_buttons[1], mouev.col, mouev.row);
if ((mouev.fs ^ oldstate) & MOUSE_BN2_DOWN)
write_event(sp, mouev.fs & MOUSE_BN2_DOWN,
sp->_emxmouse_buttons[3], mouev.col, mouev.row);
if ((mouev.fs ^ oldstate) & MOUSE_BN3_DOWN)
write_event(sp, mouev.fs & MOUSE_BN3_DOWN,
sp->_emxmouse_buttons[2], mouev.col, mouev.row);
finish:
oldstate = mouev.fs;
}
} else {
_nc_SPRINTF(err, _nc_SLIMIT(sizeof(err))
"Error setting event mask, buttons=%d, rc=%lu.\r\n",
nbuttons, rc);
}
DosWrite(2, err, strlen(err), &rc);
MouClose(hmou);
}
DosExit(EXIT_THREAD, 0L);
}
#endif /* USE_EMX_MOUSE */
#if USE_SYSMOUSE
static void
sysmouse_server(SCREEN *sp)
{
struct mouse_info the_mouse;
MEVENT *work;
the_mouse.operation = MOUSE_GETINFO;
if (sp != 0
&& sp->_mouse_fd >= 0
&& sp->_sysmouse_tail < FIFO_SIZE
&& ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse) != -1) {
if (sp->_sysmouse_head > sp->_sysmouse_tail) {
sp->_sysmouse_tail = 0;
sp->_sysmouse_head = 0;
}
work = &(sp->_sysmouse_fifo[sp->_sysmouse_tail]);
memset(work, 0, sizeof(*work));
work->id = NORMAL_EVENT; /* there's only one mouse... */
sp->_sysmouse_old_buttons = sp->_sysmouse_new_buttons;
sp->_sysmouse_new_buttons = the_mouse.u.data.buttons & 0x7;
if (sp->_sysmouse_new_buttons) {
if (sp->_sysmouse_new_buttons & 1)
work->bstate |= BUTTON1_PRESSED;
if (sp->_sysmouse_new_buttons & 2)
work->bstate |= BUTTON2_PRESSED;
if (sp->_sysmouse_new_buttons & 4)
work->bstate |= BUTTON3_PRESSED;
} else {
if (sp->_sysmouse_old_buttons & 1)
work->bstate |= BUTTON1_RELEASED;
if (sp->_sysmouse_old_buttons & 2)
work->bstate |= BUTTON2_RELEASED;
if (sp->_sysmouse_old_buttons & 4)
work->bstate |= BUTTON3_RELEASED;
}
/* for cosmetic bug in syscons.c on FreeBSD 3.[34] */
the_mouse.operation = MOUSE_HIDE;
ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse);
the_mouse.operation = MOUSE_SHOW;
ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse);
/*
* We're only interested if the button is pressed or released.
* FIXME: implement continuous event-tracking.
*/
if (sp->_sysmouse_new_buttons != sp->_sysmouse_old_buttons) {
sp->_sysmouse_tail += 1;
}
work->x = the_mouse.u.data.x / sp->_sysmouse_char_width;
work->y = the_mouse.u.data.y / sp->_sysmouse_char_height;
}
}
static void
handle_sysmouse(int sig GCC_UNUSED)
{
sysmouse_server(CURRENT_SCREEN);
}
#endif /* USE_SYSMOUSE */
#ifndef USE_TERM_DRIVER
#define xterm_kmous "\033[M"
static void
init_xterm_mouse(SCREEN *sp)
{
sp->_mouse_type = M_XTERM;
sp->_mouse_format = MF_X10;
sp->_mouse_xtermcap = tigetstr("XM");
if (VALID_STRING(sp->_mouse_xtermcap)) {
char *code = strstr(sp->_mouse_xtermcap, "[?");
if (code != 0) {
code += 2;
while ((*code >= '0') && (*code <= '9')) {
char *next = code;
while ((*next >= '0') && (*next <= '9')) {
++next;
}
if (!strncmp(code, "1006", (size_t) (next - code))) {
sp->_mouse_format = MF_SGR1006;
}
#ifdef EXP_XTERM_1005
if (!strncmp(code, "1005", (size_t) (next - code))) {
sp->_mouse_format = MF_XTERM_1005;
}
#endif
if (*next == ';') {
while (*next == ';') {
++next;
}
code = next;
} else {
break;
}
}
}
} else {
int code = tigetnum("XM");
switch (code) {
case 1006:
break;
default:
code = 1000;
break;
}
sp->_mouse_xtermcap = "\033[?1000%?%p1%{1}%=%th%el%;";
}
}
#endif
static void
enable_xterm_mouse(SCREEN *sp, int enable)
{
#if USE_EMX_MOUSE
sp->_emxmouse_activated = enable;
#else
- NCURSES_PUTP2("xterm-mouse", TPARM_1(sp->_mouse_xtermcap, enable));
+ NCURSES_PUTP2("xterm-mouse", TIPARM_1(sp->_mouse_xtermcap, enable));
#endif
sp->_mouse_active = enable;
}
#if USE_GPM_SUPPORT
static bool
allow_gpm_mouse(SCREEN *sp GCC_UNUSED)
{
bool result = FALSE;
#if USE_WEAK_SYMBOLS
/* Danger Robinson: do not use dlopen for libgpm if already loaded */
if ((Gpm_Wgetch) != 0) {
if (!sp->_mouse_gpm_loaded) {
T(("GPM library was already dlopen'd, not by us"));
}
} else
#endif
/* GPM does printf's without checking if stdout is a terminal */
if (NC_ISATTY(fileno(stdout))) {
const char *list = getenv("NCURSES_GPM_TERMS");
const char *env = getenv("TERM");
if (list != 0) {
if (env != 0) {
result = _nc_name_match(list, env, "|:");
}
} else {
/* GPM checks the beginning of the $TERM variable to decide if it
* should pass xterm events through. There is no real advantage in
* allowing GPM to do this. Recent versions relax that check, and
* pretend that GPM can work with any terminal having the kmous
* capability. Perhaps that works for someone. If so, they can
* set the environment variable (above).
*/
if (env != 0 && strstr(env, "linux") != 0) {
result = TRUE;
}
}
}
return result;
}
#ifdef HAVE_LIBDL
static void
unload_gpm_library(SCREEN *sp)
{
if (sp->_dlopen_gpm != 0) {
T(("unload GPM library"));
sp->_mouse_gpm_loaded = FALSE;
sp->_mouse_fd = -1;
- dlclose(sp->_dlopen_gpm);
- sp->_dlopen_gpm = 0;
}
}
static void
load_gpm_library(SCREEN *sp)
{
sp->_mouse_gpm_found = FALSE;
- if ((sp->_dlopen_gpm = dlopen(LIBGPM_SONAME, my_RTLD)) != 0) {
+
+ /*
+ * If we already had a successful dlopen, reuse it.
+ */
+ if (sp->_dlopen_gpm != 0) {
+ sp->_mouse_gpm_found = TRUE;
+ sp->_mouse_gpm_loaded = TRUE;
+ } else if ((sp->_dlopen_gpm = dlopen(LIBGPM_SONAME, my_RTLD)) != 0) {
#if (defined(__GNUC__) && (__GNUC__ >= 5)) || defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
#endif
if (GET_DLSYM(gpm_fd) == 0 ||
GET_DLSYM(Gpm_Open) == 0 ||
GET_DLSYM(Gpm_Close) == 0 ||
GET_DLSYM(Gpm_GetEvent) == 0) {
#if (defined(__GNUC__) && (__GNUC__ >= 5)) || defined(__clang__)
#pragma GCC diagnostic pop
#endif
T(("GPM initialization failed: %s", dlerror()));
unload_gpm_library(sp);
+ dlclose(sp->_dlopen_gpm);
+ sp->_dlopen_gpm = 0;
} else {
sp->_mouse_gpm_found = TRUE;
sp->_mouse_gpm_loaded = TRUE;
}
}
}
-#endif
+#endif /* HAVE_LIBDL */
static bool
enable_gpm_mouse(SCREEN *sp, bool enable)
{
bool result;
T((T_CALLED("enable_gpm_mouse(%d)"), enable));
if (enable && !sp->_mouse_active) {
#ifdef HAVE_LIBDL
if (sp->_mouse_gpm_found && !sp->_mouse_gpm_loaded) {
load_gpm_library(sp);
}
#endif
if (sp->_mouse_gpm_loaded) {
int code;
/* GPM: initialize connection to gpm server */
sp->_mouse_gpm_connect.eventMask = GPM_DOWN | GPM_UP;
sp->_mouse_gpm_connect.defaultMask =
(unsigned short) (~(sp->_mouse_gpm_connect.eventMask | GPM_HARD));
sp->_mouse_gpm_connect.minMod = 0;
sp->_mouse_gpm_connect.maxMod =
(unsigned short) (~((1 << KG_SHIFT) |
(1 << KG_SHIFTL) |
(1 << KG_SHIFTR)));
/*
* Note: GPM hardcodes \E[?1001s and \E[?1000h during its open.
* The former is recognized by wscons (SunOS), and the latter by
* xterm. Those will not show up in ncurses' traces.
*/
code = my_Gpm_Open(&sp->_mouse_gpm_connect, 0);
result = (code >= 0);
/*
* GPM can return a -2 if it is trying to do something with xterm.
* Ignore that, since it conflicts with our use of stdin.
*/
if (code == -2) {
my_Gpm_Close();
}
} else {
result = FALSE;
}
sp->_mouse_active = result;
T(("GPM open %s", result ? "succeeded" : "failed"));
} else {
if (!enable && sp->_mouse_active) {
/* GPM: close connection to gpm server */
my_Gpm_Close();
sp->_mouse_active = FALSE;
T(("GPM closed"));
}
result = enable;
}
#ifdef HAVE_LIBDL
if (!result) {
unload_gpm_library(sp);
}
#endif
returnBool(result);
}
#endif /* USE_GPM_SUPPORT */
static void
initialize_mousetype(SCREEN *sp)
{
T((T_CALLED("initialize_mousetype()")));
/* Try gpm first, because gpm may be configured to run in xterm */
#if USE_GPM_SUPPORT
if (allow_gpm_mouse(sp)) {
if (!sp->_mouse_gpm_loaded) {
#ifdef HAVE_LIBDL
load_gpm_library(sp);
#else /* !HAVE_LIBDL */
sp->_mouse_gpm_found = TRUE;
sp->_mouse_gpm_loaded = TRUE;
#endif
}
/*
* The gpm_fd file-descriptor may be negative (xterm). So we have to
* maintain our notion of whether the mouse connection is active
* without testing the file-descriptor.
*/
if (sp->_mouse_gpm_found && enable_gpm_mouse(sp, TRUE)) {
sp->_mouse_type = M_GPM;
sp->_mouse_fd = *(my_gpm_fd);
T(("GPM mouse_fd %d", sp->_mouse_fd));
returnVoid;
}
}
#endif /* USE_GPM_SUPPORT */
/* OS/2 VIO */
#if USE_EMX_MOUSE
if (!sp->_emxmouse_thread
&& strstr(SP_TERMTYPE term_names, "xterm") == 0
&& NonEmpty(key_mouse)) {
int handles[2];
if (pipe(handles) < 0) {
perror("mouse pipe error");
returnVoid;
} else {
int rc;
if (!sp->_emxmouse_buttons[0]) {
const char *s = getenv("MOUSE_BUTTONS_123");
sp->_emxmouse_buttons[0] = 1;
if (s && strlen(s) >= 3) {
sp->_emxmouse_buttons[1] = s[0] - '0';
sp->_emxmouse_buttons[2] = s[1] - '0';
sp->_emxmouse_buttons[3] = s[2] - '0';
} else {
sp->_emxmouse_buttons[1] = 1;
sp->_emxmouse_buttons[2] = 3;
sp->_emxmouse_buttons[3] = 2;
}
}
sp->_emxmouse_wfd = handles[1];
M_FD(sp) = handles[0];
/* Needed? */
setmode(handles[0], O_BINARY);
setmode(handles[1], O_BINARY);
/* Do not use CRT functions, we may single-threaded. */
rc = DosCreateThread((unsigned long *) &sp->_emxmouse_thread,
mouse_server, (long) sp, 0, 8192);
if (rc) {
printf("mouse thread error %d=%#x", rc, rc);
} else {
sp->_mouse_type = M_XTERM;
}
returnVoid;
}
}
#endif /* USE_EMX_MOUSE */
#if USE_SYSMOUSE
{
static char dev_tty[] = "/dev/tty";
struct mouse_info the_mouse;
char *the_device = 0;
if (NC_ISATTY(sp->_ifd))
the_device = ttyname(sp->_ifd);
if (the_device == 0)
the_device = dev_tty;
sp->_mouse_fd = open(the_device, O_RDWR);
if (sp->_mouse_fd >= 0) {
/*
* sysmouse does not have a usable user interface for obtaining
* mouse events. The logical way to proceed (reading data on a
* stream) only works if one opens the device as root. Even in
* that mode, careful examination shows we lose events
* occasionally. The interface provided for user programs is to
* establish a signal handler. really.
*
* Take over SIGUSR2 for this purpose since SIGUSR1 is more
* likely to be used by an application. getch() will have to
* handle the misleading EINTR's.
*/
signal(SIGUSR2, SIG_IGN);
the_mouse.operation = MOUSE_MODE;
the_mouse.u.mode.mode = 0;
the_mouse.u.mode.signal = SIGUSR2;
if (ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse) != -1) {
signal(SIGUSR2, handle_sysmouse);
the_mouse.operation = MOUSE_SHOW;
ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse);
#if defined(FBIO_MODEINFO) || defined(CONS_MODEINFO) /* FreeBSD > 2.x */
{
#ifndef FBIO_GETMODE /* FreeBSD 3.x */
#define FBIO_GETMODE CONS_GET
#define FBIO_MODEINFO CONS_MODEINFO
#endif /* FBIO_GETMODE */
video_info_t the_video;
if (ioctl(sp->_mouse_fd,
FBIO_GETMODE,
&the_video.vi_mode) != -1
&& ioctl(sp->_mouse_fd,
FBIO_MODEINFO,
&the_video) != -1) {
sp->_sysmouse_char_width = the_video.vi_cwidth;
sp->_sysmouse_char_height = the_video.vi_cheight;
}
}
#endif /* defined(FBIO_MODEINFO) || defined(CONS_MODEINFO) */
if (sp->_sysmouse_char_width <= 0)
sp->_sysmouse_char_width = 8;
if (sp->_sysmouse_char_height <= 0)
sp->_sysmouse_char_height = 16;
sp->_mouse_type = M_SYSMOUSE;
returnVoid;
}
}
}
#endif /* USE_SYSMOUSE */
#ifdef USE_TERM_DRIVER
CallDriver(sp, td_initmouse);
#else
/* we know how to recognize mouse events under "xterm" */
if (NonEmpty(key_mouse)) {
init_xterm_mouse(sp);
} else if (strstr(SP_TERMTYPE term_names, "xterm") != 0) {
if (_nc_add_to_try(&(sp->_keytry), xterm_kmous, KEY_MOUSE) == OK)
init_xterm_mouse(sp);
}
#endif
returnVoid;
}
static bool
_nc_mouse_init(SCREEN *sp)
/* initialize the mouse */
{
bool result = FALSE;
if (sp != 0) {
if (!sp->_mouse_initialized) {
int i;
sp->_mouse_initialized = TRUE;
TR(MY_TRACE, ("_nc_mouse_init() called"));
sp->_mouse_eventp = FirstEV(sp);
for (i = 0; i < EV_MAX; i++)
Invalidate(sp->_mouse_events + i);
initialize_mousetype(sp);
T(("_nc_mouse_init() set mousetype to %d", sp->_mouse_type));
}
result = sp->_mouse_initialized;
}
return result;
}
/*
* Query to see if there is a pending mouse event. This is called from
* fifo_push() in lib_getch.c
*/
static bool
_nc_mouse_event(SCREEN *sp)
{
MEVENT *eventp = sp->_mouse_eventp;
bool result = FALSE;
(void) eventp;
switch (sp->_mouse_type) {
case M_XTERM:
/* xterm: never have to query, mouse events are in the keyboard stream */
#if USE_EMX_MOUSE
{
char kbuf[3];
int i, res = read(M_FD(sp), &kbuf, 3); /* Eat the prefix */
if (res != 3)
printf("Got %d chars instead of 3 for prefix.\n", res);
for (i = 0; i < res; i++) {
if (kbuf[i] != key_mouse[i])
printf("Got char %d instead of %d for prefix.\n",
(int) kbuf[i], (int) key_mouse[i]);
}
result = TRUE;
}
#endif /* USE_EMX_MOUSE */
break;
#if USE_GPM_SUPPORT
case M_GPM:
if (sp->_mouse_fd >= 0) {
/* query server for event, return TRUE if we find one */
Gpm_Event ev;
switch (my_Gpm_GetEvent(&ev)) {
case 0:
/* Connection closed, drop the mouse. */
sp->_mouse_fd = -1;
break;
case 1:
/* there's only one mouse... */
eventp->id = NORMAL_EVENT;
eventp->bstate = 0;
switch (ev.type & 0x0f) {
case (GPM_DOWN):
if (ev.buttons & GPM_B_LEFT)
eventp->bstate |= BUTTON1_PRESSED;
if (ev.buttons & GPM_B_MIDDLE)
eventp->bstate |= BUTTON2_PRESSED;
if (ev.buttons & GPM_B_RIGHT)
eventp->bstate |= BUTTON3_PRESSED;
break;
case (GPM_UP):
if (ev.buttons & GPM_B_LEFT)
eventp->bstate |= BUTTON1_RELEASED;
if (ev.buttons & GPM_B_MIDDLE)
eventp->bstate |= BUTTON2_RELEASED;
if (ev.buttons & GPM_B_RIGHT)
eventp->bstate |= BUTTON3_RELEASED;
break;
default:
eventp->bstate |= REPORT_MOUSE_POSITION;
break;
}
eventp->x = ev.x - 1;
eventp->y = ev.y - 1;
eventp->z = 0;
/* bump the next-free pointer into the circular list */
sp->_mouse_eventp = NEXT(eventp);
result = TRUE;
break;
}
}
break;
#endif
#if USE_SYSMOUSE
case M_SYSMOUSE:
if (sp->_sysmouse_head < sp->_sysmouse_tail) {
*eventp = sp->_sysmouse_fifo[sp->_sysmouse_head];
/*
* Point the fifo-head to the next possible location. If there
* are none, reset the indices. This may be interrupted by the
* signal handler, doing essentially the same reset.
*/
sp->_sysmouse_head += 1;
if (sp->_sysmouse_head == sp->_sysmouse_tail) {
sp->_sysmouse_tail = 0;
sp->_sysmouse_head = 0;
}
/* bump the next-free pointer into the circular list */
sp->_mouse_eventp = eventp = NEXT(eventp);
result = TRUE;
}
break;
#endif /* USE_SYSMOUSE */
#ifdef USE_TERM_DRIVER
case M_TERM_DRIVER:
while (sp->_drv_mouse_head < sp->_drv_mouse_tail) {
*eventp = sp->_drv_mouse_fifo[sp->_drv_mouse_head];
/*
* Point the fifo-head to the next possible location. If there
* are none, reset the indices.
*/
sp->_drv_mouse_head += 1;
if (sp->_drv_mouse_head == sp->_drv_mouse_tail) {
sp->_drv_mouse_tail = 0;
sp->_drv_mouse_head = 0;
}
/* bump the next-free pointer into the circular list */
sp->_mouse_eventp = eventp = NEXT(eventp);
result = TRUE;
}
break;
#endif
case M_NONE:
break;
}
return result; /* true if we found an event */
}
#if USE_EMX_MOUSE
#define PRESS_POSITION(n) \
do { \
eventp->bstate = MASK_PRESS(n); \
sp->_mouse_bstate |= MASK_PRESS(n); \
if (button & 0x40) { \
eventp->bstate = MASK_RELEASE(n); \
sp->_mouse_bstate &= ~MASK_PRESS(n); \
} \
} while (0)
#else
#define PRESS_POSITION(n) \
do { \
eventp->bstate = (mmask_t) ((sp->_mouse_bstate & MASK_PRESS(n)) \
? REPORT_MOUSE_POSITION \
: MASK_PRESS(n)); \
sp->_mouse_bstate |= MASK_PRESS(n); \
} while (0)
#endif
static bool
handle_wheel(SCREEN *sp, MEVENT * eventp, int button, int wheel)
{
bool result = TRUE;
switch (button & 3) {
case 0:
if (wheel) {
eventp->bstate = MASK_PRESS(4);
/* Do not record in sp->_mouse_bstate; there will be no
* corresponding release event.
*/
} else {
PRESS_POSITION(1);
}
break;
case 1:
if (wheel) {
-#if NCURSES_MOUSE_VERSION == 2
+#if NCURSES_MOUSE_VERSION >= 2
eventp->bstate = MASK_PRESS(5);
/* See comment above for button 4 */
#else
/* Ignore this event as it is not a true press of the button */
eventp->bstate = REPORT_MOUSE_POSITION;
#endif
} else {
PRESS_POSITION(2);
}
break;
case 2:
PRESS_POSITION(3);
break;
default:
result = FALSE;
break;
}
return result;
}
static bool
decode_X10_bstate(SCREEN *sp, MEVENT * eventp, unsigned intro)
{
bool result;
+ int button = 0;
+ int wheel = (intro & 96) == 96;
eventp->bstate = 0;
- if (!handle_wheel(sp, eventp, (int) intro, (intro & 96) == 96)) {
+ if (intro >= 96) {
+ if (intro >= 160) {
+ button = (int) (intro - 152); /* buttons 8-11 */
+ } else {
+ button = (int) (intro - 92); /* buttons 4-7 */
+ }
+ } else {
+ button = (intro & 3);
+ }
+
+ if (button > MAX_BUTTONS) {
+ eventp->bstate = REPORT_MOUSE_POSITION;
+ } else if (!handle_wheel(sp, eventp, (int) intro, wheel)) {
/*
* Release events aren't reported for individual buttons, just for
* the button set as a whole. However, because there are normally
* no mouse events under xterm that intervene between press and
* release, we can infer the button actually released by looking at
* the previous event.
*/
if (sp->_mouse_bstate & BUTTON_PRESSED) {
int b;
eventp->bstate = BUTTON_RELEASED;
for (b = 1; b <= MAX_BUTTONS; ++b) {
if (!(sp->_mouse_bstate & MASK_PRESS(b)))
eventp->bstate &= ~MASK_RELEASE(b);
}
sp->_mouse_bstate = 0;
} else {
/*
* xterm will return a stream of release-events to let the
* application know where the mouse is going, if private mode
* 1002 or 1003 is enabled.
*/
eventp->bstate = REPORT_MOUSE_POSITION;
}
}
if (intro & 4) {
eventp->bstate |= BUTTON_SHIFT;
}
if (intro & 8) {
eventp->bstate |= BUTTON_ALT;
}
if (intro & 16) {
eventp->bstate |= BUTTON_CTRL;
}
result = (eventp->bstate & REPORT_MOUSE_POSITION) ? TRUE : FALSE;
return result;
}
/* This code requires that your xterm entry contain the kmous capability and
* that it be set to the \E[M documented in the Xterm Control Sequences
* reference. This is how we arrange for mouse events to be reported via a
* KEY_MOUSE return value from wgetch(). After this value is received,
* _nc_mouse_inline() gets called and is immediately responsible for parsing
* the mouse status information following the prefix.
*
* The following quotes from the ctlseqs.ms document in the XTerm distribution,
* describing the mouse tracking feature:
*
* Parameters for all mouse tracking escape sequences generated by xterm encode
* numeric parameters in a single character as value+040. For example, ! is
* 1.
*
* On button press or release, xterm sends ESC [ M CbCxCy. The low two bits of
* Cb encode button information: 0=MB1 pressed, 1=MB2 pressed, 2=MB3 pressed,
* 3=release. The upper bits encode what modifiers were down when the button
* was pressed and are added together. 4=Shift, 8=Meta, 16=Control. Cx and Cy
* are the x and y coordinates of the mouse event. The upper left corner is
* (1,1).
*
* (End quote) By the time we get here, we've eaten the key prefix. FYI, the
* loop below is necessary because mouse click info isn't guaranteed to present
* as a single clist item.
*
* Wheel mice may return buttons 4 and 5 when the wheel is turned. We encode
* those as button presses.
*/
static bool
decode_xterm_X10(SCREEN *sp, MEVENT * eventp)
{
#define MAX_KBUF 3
unsigned char kbuf[MAX_KBUF + 1];
size_t grabbed;
int res;
bool result;
# if USE_PTHREADS_EINTR
# if USE_WEAK_SYMBOLS
if ((pthread_self) && (pthread_kill) && (pthread_equal))
# endif
_nc_globals.read_thread = pthread_self();
# endif
for (grabbed = 0; grabbed < MAX_KBUF; grabbed += (size_t) res) {
/* For VIO mouse we add extra bit 64 to disambiguate button-up. */
res = (int) read(
#if USE_EMX_MOUSE
(M_FD(sp) >= 0) ? M_FD(sp) : sp->_ifd,
#else
sp->_ifd,
#endif
kbuf + grabbed, (size_t) (MAX_KBUF - (int) grabbed));
if (res == -1)
break;
}
#if USE_PTHREADS_EINTR
_nc_globals.read_thread = 0;
#endif
kbuf[MAX_KBUF] = '\0';
TR(TRACE_IEVENT,
("_nc_mouse_inline sees the following xterm data: '%s'", kbuf));
/* there's only one mouse... */
eventp->id = NORMAL_EVENT;
result = decode_X10_bstate(sp, eventp, kbuf[0]);
eventp->x = (kbuf[1] - ' ') - 1;
eventp->y = (kbuf[2] - ' ') - 1;
return result;
}
#ifdef EXP_XTERM_1005
/*
* This is identical to X10/X11 responses except that there are two UTF-8
* characters storing the ordinates instead of two bytes.
*/
static bool
decode_xterm_1005(SCREEN *sp, MEVENT * eventp)
{
char kbuf[80];
size_t grabbed;
size_t limit = (sizeof(kbuf) - 1);
unsigned coords[2];
bool result;
coords[0] = 0;
coords[1] = 0;
# if USE_PTHREADS_EINTR
# if USE_WEAK_SYMBOLS
if ((pthread_self) && (pthread_kill) && (pthread_equal))
# endif
_nc_globals.read_thread = pthread_self();
# endif
for (grabbed = 0; grabbed < limit;) {
int res;
res = (int) read(
#if USE_EMX_MOUSE
(M_FD(sp) >= 0) ? M_FD(sp) : sp->_ifd,
#else
sp->_ifd,
#endif
(kbuf + grabbed), (size_t) 1);
if (res == -1)
break;
grabbed += (size_t) res;
if (grabbed > 1) {
size_t check = 1;
int n;
for (n = 0; n < 2; ++n) {
int rc;
if (check >= grabbed)
break;
rc = _nc_conv_to_utf32(&coords[n], kbuf + check, (unsigned)
(grabbed - check));
if (!rc)
break;
check += (size_t) rc;
}
if (n >= 2)
break;
}
}
#if USE_PTHREADS_EINTR
_nc_globals.read_thread = 0;
#endif
TR(TRACE_IEVENT,
("_nc_mouse_inline sees the following xterm data: %s",
_nc_visbufn(kbuf, (int) grabbed)));
/* there's only one mouse... */
eventp->id = NORMAL_EVENT;
result = decode_X10_bstate(sp, eventp, UChar(kbuf[0]));
eventp->x = (int) (coords[0] - ' ') - 1;
eventp->y = (int) (coords[1] - ' ') - 1;
return result;
}
#endif /* EXP_XTERM_1005 */
/*
* ECMA-48 section 5.4
*/
#define isInter(c) ((c) >= 0x20 && (c) <= 0x2f)
#define isParam(c) ((c) >= 0x30 && (c) <= 0x3f)
#define isFinal(c) ((c) >= 0x40 && (c) <= 0x7e)
#define MAX_PARAMS 9
typedef struct {
int nerror; /* nonzero if there are unexpected chars */
int nparam; /* number of numeric parameters */
int params[MAX_PARAMS];
int final; /* the final-character */
} SGR_DATA;
static bool
read_SGR(SCREEN *sp, SGR_DATA * result)
{
char kbuf[80]; /* bigger than any possible mouse response */
int grabbed = 0;
int ch = 0;
int now = -1;
int marker = 1;
memset(result, 0, sizeof(*result));
# if USE_PTHREADS_EINTR
# if USE_WEAK_SYMBOLS
if ((pthread_self) && (pthread_kill) && (pthread_equal))
# endif
_nc_globals.read_thread = pthread_self();
# endif
do {
int res;
res = (int) read(
#if USE_EMX_MOUSE
(M_FD(sp) >= 0) ? M_FD(sp) : sp->_ifd,
#else
sp->_ifd,
#endif
(kbuf + grabbed), (size_t) 1);
if (res == -1)
break;
if ((grabbed + MAX_KBUF) >= (int) sizeof(kbuf)) {
result->nerror++;
break;
}
ch = UChar(kbuf[grabbed]);
kbuf[grabbed + 1] = 0;
switch (ch) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if (marker) {
++now;
result->nparam = (now + 1);
}
marker = 0;
result->params[now] = (result->params[now] * 10) + (ch - '0');
break;
case ';':
if (marker) {
++now;
result->nparam = (now + 1);
}
marker = 1;
break;
default:
if (ch < 32 || ch > 126) {
/*
* Technically other characters could be interspersed in the
* response. Ignore those for now.
*/
result->nerror++;
continue;
} else if (isFinal(ch)) {
if (marker) {
result->nparam++;
}
result->final = ch;
} else {
result->nerror++;
}
break;
}
++grabbed;
} while (!isFinal(ch));
#if USE_PTHREADS_EINTR
_nc_globals.read_thread = 0;
#endif
kbuf[++grabbed] = 0;
TR(TRACE_IEVENT,
("_nc_mouse_inline sees the following xterm data: '%s'", kbuf));
return (grabbed > 0) && (result->nerror == 0);
}
static bool
decode_xterm_SGR1006(SCREEN *sp, MEVENT * eventp)
{
SGR_DATA data;
bool result = FALSE;
if (read_SGR(sp, &data)) {
int b = data.params[0];
int b3 = 1 + (b & 3);
+ int wheel = ((b & 64) == 64);
+
+ if (b >= 132) {
+ b3 = MAX_BUTTONS + 1;
+ } else if (b >= 128) {
+ b3 = (b - 120); /* buttons 8-11 */
+ } else if (b >= 64) {
+ b3 = (b - 60); /* buttons 6-7 */
+ }
eventp->id = NORMAL_EVENT;
if (data.final == 'M') {
- (void) handle_wheel(sp, eventp, b, (b & 64) == 64);
+ (void) handle_wheel(sp, eventp, b, wheel);
+ } else if (b3 > MAX_BUTTONS) {
+ eventp->bstate = REPORT_MOUSE_POSITION;
} else {
mmask_t pressed = (mmask_t) NCURSES_MOUSE_MASK(b3, NCURSES_BUTTON_PRESSED);
mmask_t release = (mmask_t) NCURSES_MOUSE_MASK(b3, NCURSES_BUTTON_RELEASED);
if (sp->_mouse_bstate & pressed) {
eventp->bstate = release;
sp->_mouse_bstate &= ~pressed;
} else {
eventp->bstate = REPORT_MOUSE_POSITION;
}
}
if (b & 4) {
eventp->bstate |= BUTTON_SHIFT;
}
if (b & 8) {
eventp->bstate |= BUTTON_ALT;
}
if (b & 16) {
eventp->bstate |= BUTTON_CTRL;
}
result = (eventp->bstate & REPORT_MOUSE_POSITION) ? TRUE : FALSE;
eventp->x = (data.params[1] ? (data.params[1] - 1) : 0);
eventp->y = (data.params[2] ? (data.params[2] - 1) : 0);
}
return result;
}
static bool
_nc_mouse_inline(SCREEN *sp)
/* mouse report received in the keyboard stream -- parse its info */
{
bool result = FALSE;
MEVENT *eventp = sp->_mouse_eventp;
TR(MY_TRACE, ("_nc_mouse_inline() called"));
if (sp->_mouse_type == M_XTERM) {
switch (sp->_mouse_format) {
case MF_X10:
result = decode_xterm_X10(sp, eventp);
break;
case MF_SGR1006:
result = decode_xterm_SGR1006(sp, eventp);
break;
#ifdef EXP_XTERM_1005
case MF_XTERM_1005:
result = decode_xterm_1005(sp, eventp);
break;
#endif
}
TR(MY_TRACE,
("_nc_mouse_inline: primitive mouse-event %s has slot %ld",
_nc_tracemouse(sp, eventp),
(long) IndexEV(sp, eventp)));
/* bump the next-free pointer into the circular list */
sp->_mouse_eventp = NEXT(eventp);
if (!result) {
/* If this event is from a wheel-mouse, treat it like position
* reports and avoid waiting for the release-events which will
* never come.
*/
if (eventp->bstate & BUTTON_PRESSED) {
int b;
for (b = 4; b <= MAX_BUTTONS; ++b) {
if ((eventp->bstate & MASK_PRESS(b))) {
result = TRUE;
break;
}
}
}
}
}
return (result);
}
static void
mouse_activate(SCREEN *sp, int on)
{
if (!on && !sp->_mouse_initialized)
return;
if (!_nc_mouse_init(sp))
return;
if (on) {
sp->_mouse_bstate = 0;
switch (sp->_mouse_type) {
case M_XTERM:
#if NCURSES_EXT_FUNCS
NCURSES_SP_NAME(keyok) (NCURSES_SP_ARGx KEY_MOUSE, on);
#endif
TPUTS_TRACE("xterm mouse initialization");
enable_xterm_mouse(sp, 1);
break;
#if USE_GPM_SUPPORT
case M_GPM:
if (enable_gpm_mouse(sp, TRUE)) {
sp->_mouse_fd = *(my_gpm_fd);
T(("GPM mouse_fd %d", sp->_mouse_fd));
}
break;
#endif
#if USE_SYSMOUSE
case M_SYSMOUSE:
signal(SIGUSR2, handle_sysmouse);
sp->_mouse_active = TRUE;
break;
#endif
#ifdef USE_TERM_DRIVER
case M_TERM_DRIVER:
sp->_mouse_active = TRUE;
break;
#endif
case M_NONE:
return;
}
/* Make runtime binding to cut down on object size of applications that
* do not use the mouse (e.g., 'clear').
*/
sp->_mouse_event = _nc_mouse_event;
sp->_mouse_inline = _nc_mouse_inline;
sp->_mouse_parse = _nc_mouse_parse;
sp->_mouse_resume = _nc_mouse_resume;
sp->_mouse_wrap = _nc_mouse_wrap;
} else {
switch (sp->_mouse_type) {
case M_XTERM:
TPUTS_TRACE("xterm mouse deinitialization");
enable_xterm_mouse(sp, 0);
break;
#if USE_GPM_SUPPORT
case M_GPM:
enable_gpm_mouse(sp, FALSE);
break;
#endif
#if USE_SYSMOUSE
case M_SYSMOUSE:
signal(SIGUSR2, SIG_IGN);
sp->_mouse_active = FALSE;
break;
#endif
#ifdef USE_TERM_DRIVER
case M_TERM_DRIVER:
sp->_mouse_active = FALSE;
break;
#endif
case M_NONE:
return;
}
}
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
}
/**************************************************************************
*
* Device-independent code
*
**************************************************************************/
static bool
_nc_mouse_parse(SCREEN *sp, int runcount)
/* parse a run of atomic mouse events into a gesture */
{
MEVENT *eventp = sp->_mouse_eventp;
MEVENT *next, *ep;
MEVENT *first_valid = NULL;
MEVENT *first_invalid = NULL;
int n;
int b;
bool merge;
bool endLoop;
TR(MY_TRACE, ("_nc_mouse_parse(%d) called", runcount));
/*
* When we enter this routine, the event list next-free pointer
* points just past a run of mouse events that we know were separated
* in time by less than the critical click interval. The job of this
* routine is to collapse this run into a single higher-level event
* or gesture.
*
* We accomplish this in two passes. The first pass merges press/release
* pairs into click events. The second merges runs of click events into
* double or triple-click events.
*
* It's possible that the run may not resolve to a single event (for
* example, if the user quadruple-clicks). If so, leading events
* in the run are ignored if user does not call getmouse in a loop (getting
* them from newest to older).
*
* Note that this routine is independent of the format of the specific
* format of the pointing-device's reports. We can use it to parse
* gestures on anything that reports press/release events on a per-
* button basis, as long as the device-dependent mouse code puts stuff
* on the queue in MEVENT format.
*/
/*
* Reset all events that were not set, in case the user sometimes calls
* getmouse only once and other times until there are no more events in
* queue.
*
* This also allows reaching the beginning of the run.
*/
ep = eventp;
for (n = runcount; n < EV_MAX; n++) {
Invalidate(ep);
ep = NEXT(ep);
}
#ifdef TRACE
if (USE_TRACEF(TRACE_IEVENT)) {
_trace_slot(sp, "before mouse press/release merge:");
_tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",
RunParams(sp, eventp, ep),
runcount);
_nc_unlock_global(tracef);
}
#endif /* TRACE */
/* first pass; merge press/release pairs */
endLoop = FALSE;
while (!endLoop) {
next = NEXT(ep);
if (next == eventp) {
/* Will end the loop, but compact before */
endLoop = TRUE;
} else {
#define MASK_CHANGED(x) (!(ep->bstate & MASK_PRESS(x)) \
== !(next->bstate & MASK_RELEASE(x)))
if (ValidEvent(ep) && ValidEvent(next)
&& ep->x == next->x && ep->y == next->y
&& (ep->bstate & BUTTON_PRESSED)
&& (!(next->bstate & BUTTON_PRESSED))) {
bool changed = TRUE;
for (b = 1; b <= MAX_BUTTONS; ++b) {
if (!MASK_CHANGED(b)) {
changed = FALSE;
break;
}
}
if (changed) {
merge = FALSE;
for (b = 1; b <= MAX_BUTTONS; ++b) {
if ((sp->_mouse_mask & MASK_CLICK(b))
&& (ep->bstate & MASK_PRESS(b))) {
next->bstate &= ~MASK_RELEASE(b);
next->bstate |= MASK_CLICK(b);
merge = TRUE;
}
}
if (merge) {
Invalidate(ep);
}
}
}
}
/* Compact valid events */
if (!ValidEvent(ep)) {
if ((first_valid != NULL) && (first_invalid == NULL)) {
first_invalid = ep;
}
} else {
if (first_valid == NULL) {
first_valid = ep;
} else if (first_invalid != NULL) {
*first_invalid = *ep;
Invalidate(ep);
first_invalid = NEXT(first_invalid);
}
}
ep = next;
}
if (first_invalid != NULL) {
eventp = first_invalid;
}
#ifdef TRACE
if (USE_TRACEF(TRACE_IEVENT)) {
_trace_slot(sp, "before mouse click merge:");
if (first_valid == NULL) {
_tracef("_nc_mouse_parse: no valid event");
} else {
_tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",
RunParams(sp, eventp, first_valid),
runcount);
_nc_unlock_global(tracef);
}
}
#endif /* TRACE */
/*
* Second pass; merge click runs. We merge click events forward in the
* queue. For example, double click can be changed to triple click.
*
* NOTE: There is a problem with this design! If the application
* allows enough click events to pile up in the circular queue so
* they wrap around, it will cheerfully merge the newest forward
* into the oldest, creating a bogus doubleclick and confusing
* the queue-traversal logic rather badly. Generally this won't
* happen, because calling getmouse() marks old events invalid and
* ineligible for merges. The true solution to this problem would
* be to timestamp each MEVENT and perform the obvious sanity check,
* but the timer element would have to have sub-second resolution,
* which would get us into portability trouble.
*/
first_invalid = NULL;
endLoop = (first_valid == NULL);
ep = first_valid;
while (!endLoop) {
next = NEXT(ep);
if (next == eventp) {
/* Will end the loop, but check event type and compact before */
endLoop = TRUE;
} else if (!ValidEvent(next)) {
continue;
} else {
/* merge click events forward */
if ((ep->bstate & BUTTON_CLICKED)
&& (next->bstate & BUTTON_CLICKED)) {
merge = FALSE;
for (b = 1; b <= MAX_BUTTONS; ++b) {
if ((sp->_mouse_mask & MASK_DOUBLE_CLICK(b))
&& (ep->bstate & MASK_CLICK(b))
&& (next->bstate & MASK_CLICK(b))) {
next->bstate &= ~MASK_CLICK(b);
next->bstate |= MASK_DOUBLE_CLICK(b);
merge = TRUE;
}
}
if (merge) {
Invalidate(ep);
}
}
/* merge double-click events forward */
if ((ep->bstate & BUTTON_DOUBLE_CLICKED)
&& (next->bstate & BUTTON_CLICKED)) {
merge = FALSE;
for (b = 1; b <= MAX_BUTTONS; ++b) {
if ((sp->_mouse_mask & MASK_TRIPLE_CLICK(b))
&& (ep->bstate & MASK_DOUBLE_CLICK(b))
&& (next->bstate & MASK_CLICK(b))) {
next->bstate &= ~MASK_CLICK(b);
next->bstate |= MASK_TRIPLE_CLICK(b);
merge = TRUE;
}
}
if (merge) {
Invalidate(ep);
}
}
}
/* Discard event if it does not match event mask */
if (!(ep->bstate & sp->_mouse_mask2)) {
Invalidate(ep);
}
/* Compact valid events */
if (!ValidEvent(ep)) {
if (ep == first_valid) {
first_valid = next;
} else if (first_invalid == NULL) {
first_invalid = ep;
}
} else if (first_invalid != NULL) {
*first_invalid = *ep;
Invalidate(ep);
first_invalid = NEXT(first_invalid);
}
ep = next;
}
if (first_invalid == NULL) {
first_invalid = eventp;
}
sp->_mouse_eventp = first_invalid;
#ifdef TRACE
if (first_valid != NULL) {
if (USE_TRACEF(TRACE_IEVENT)) {
_trace_slot(sp, "after mouse event queue compaction:");
_tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",
RunParams(sp, first_invalid, first_valid),
runcount);
_nc_unlock_global(tracef);
}
for (ep = first_valid; ep != first_invalid; ep = NEXT(ep)) {
if (ValidEvent(ep))
TR(MY_TRACE,
("_nc_mouse_parse: returning composite mouse event %s at slot %ld",
_nc_tracemouse(sp, ep),
(long) IndexEV(sp, ep)));
}
}
#endif /* TRACE */
/* after all this, do we have a valid event? */
return ValidEvent(PREV(first_invalid));
}
static void
_nc_mouse_wrap(SCREEN *sp)
/* release mouse -- called by endwin() before shellout/exit */
{
TR(MY_TRACE, ("_nc_mouse_wrap() called"));
switch (sp->_mouse_type) {
case M_XTERM:
if (sp->_mouse_mask)
mouse_activate(sp, FALSE);
break;
#if USE_GPM_SUPPORT
/* GPM: pass all mouse events to next client */
case M_GPM:
if (sp->_mouse_mask)
mouse_activate(sp, FALSE);
break;
#endif
#if USE_SYSMOUSE
case M_SYSMOUSE:
mouse_activate(sp, FALSE);
break;
#endif
#ifdef USE_TERM_DRIVER
case M_TERM_DRIVER:
mouse_activate(sp, FALSE);
break;
#endif
case M_NONE:
break;
}
}
static void
_nc_mouse_resume(SCREEN *sp)
/* re-connect to mouse -- called by doupdate() after shellout */
{
TR(MY_TRACE, ("_nc_mouse_resume() called"));
switch (sp->_mouse_type) {
case M_XTERM:
/* xterm: re-enable reporting */
if (sp->_mouse_mask)
mouse_activate(sp, TRUE);
break;
#if USE_GPM_SUPPORT
case M_GPM:
/* GPM: reclaim our event set */
if (sp->_mouse_mask)
mouse_activate(sp, TRUE);
break;
#endif
#if USE_SYSMOUSE
case M_SYSMOUSE:
mouse_activate(sp, TRUE);
break;
#endif
#ifdef USE_TERM_DRIVER
case M_TERM_DRIVER:
mouse_activate(sp, TRUE);
break;
#endif
case M_NONE:
break;
}
}
/**************************************************************************
*
* Mouse interface entry points for the API
*
**************************************************************************/
NCURSES_EXPORT(int)
NCURSES_SP_NAME(getmouse) (NCURSES_SP_DCLx MEVENT * aevent)
{
int result = ERR;
MEVENT *eventp;
T((T_CALLED("getmouse(%p,%p)"), (void *) SP_PARM, (void *) aevent));
if ((aevent != 0) &&
(SP_PARM != 0) &&
(SP_PARM->_mouse_type != M_NONE) &&
(eventp = SP_PARM->_mouse_eventp) != 0) {
/* compute the current-event pointer */
MEVENT *prev = PREV(eventp);
/*
* Discard events not matching mask (there could be still some if
* _nc_mouse_parse was not called, e.g., when _nc_mouse_inline returns
* false).
*/
while (ValidEvent(prev) && (!(prev->bstate & SP_PARM->_mouse_mask2))) {
Invalidate(prev);
prev = PREV(prev);
}
if (ValidEvent(prev)) {
/* copy the event we find there */
*aevent = *prev;
TR(TRACE_IEVENT, ("getmouse: returning event %s from slot %ld",
_nc_tracemouse(SP_PARM, prev),
(long) IndexEV(SP_PARM, prev)));
Invalidate(prev); /* so the queue slot becomes free */
SP_PARM->_mouse_eventp = prev;
result = OK;
} else {
/* Reset the provided event */
aevent->bstate = 0;
Invalidate(aevent);
aevent->x = 0;
aevent->y = 0;
aevent->z = 0;
}
}
returnCode(result);
}
#if NCURSES_SP_FUNCS
/* grab a copy of the current mouse event */
NCURSES_EXPORT(int)
getmouse(MEVENT * aevent)
{
return NCURSES_SP_NAME(getmouse) (CURRENT_SCREEN, aevent);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(ungetmouse) (NCURSES_SP_DCLx MEVENT * aevent)
{
int result = ERR;
MEVENT *eventp;
T((T_CALLED("ungetmouse(%p,%p)"), (void *) SP_PARM, (void *) aevent));
if (aevent != 0 &&
SP_PARM != 0 &&
(eventp = SP_PARM->_mouse_eventp) != 0) {
/* stick the given event in the next-free slot */
*eventp = *aevent;
/* bump the next-free pointer into the circular list */
SP_PARM->_mouse_eventp = NEXT(eventp);
/* push back the notification event on the keyboard queue */
result = NCURSES_SP_NAME(ungetch) (NCURSES_SP_ARGx KEY_MOUSE);
}
returnCode(result);
}
#if NCURSES_SP_FUNCS
/* enqueue a synthesized mouse event to be seen by the next wgetch() */
NCURSES_EXPORT(int)
ungetmouse(MEVENT * aevent)
{
return NCURSES_SP_NAME(ungetmouse) (CURRENT_SCREEN, aevent);
}
#endif
NCURSES_EXPORT(mmask_t)
NCURSES_SP_NAME(mousemask) (NCURSES_SP_DCLx mmask_t newmask, mmask_t * oldmask)
/* set the mouse event mask */
{
mmask_t result = 0;
T((T_CALLED("mousemask(%p,%#lx,%p)"),
(void *) SP_PARM,
(unsigned long) newmask,
(void *) oldmask));
if (SP_PARM != 0) {
if (oldmask)
*oldmask = SP_PARM->_mouse_mask;
if (newmask || SP_PARM->_mouse_initialized) {
_nc_mouse_init(SP_PARM);
if (SP_PARM->_mouse_type != M_NONE) {
int b;
result = newmask &
(REPORT_MOUSE_POSITION
| BUTTON_ALT
| BUTTON_CTRL
| BUTTON_SHIFT
| BUTTON_PRESSED
| BUTTON_RELEASED
| BUTTON_CLICKED
| BUTTON_DOUBLE_CLICKED
| BUTTON_TRIPLE_CLICKED);
mouse_activate(SP_PARM, (bool) (result != 0));
SP_PARM->_mouse_mask = result;
SP_PARM->_mouse_mask2 = result;
/*
* Make a mask corresponding to the states we will need to
* retain (temporarily) while building up the state that the
* user asked for.
*/
for (b = 1; b <= MAX_BUTTONS; ++b) {
if (SP_PARM->_mouse_mask2 & MASK_TRIPLE_CLICK(b))
SP_PARM->_mouse_mask2 |= MASK_DOUBLE_CLICK(b);
if (SP_PARM->_mouse_mask2 & MASK_DOUBLE_CLICK(b))
SP_PARM->_mouse_mask2 |= MASK_CLICK(b);
if (SP_PARM->_mouse_mask2 & MASK_CLICK(b))
SP_PARM->_mouse_mask2 |= (MASK_PRESS(b) |
MASK_RELEASE(b));
}
}
}
}
returnMMask(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(mmask_t)
mousemask(mmask_t newmask, mmask_t * oldmask)
{
return NCURSES_SP_NAME(mousemask) (CURRENT_SCREEN, newmask, oldmask);
}
#endif
NCURSES_EXPORT(bool)
wenclose(const WINDOW *win, int y, int x)
/* check to see if given window encloses given screen location */
{
bool result = FALSE;
T((T_CALLED("wenclose(%p,%d,%d)"), (const void *) win, y, x));
if (win != 0) {
y -= win->_yoffset;
result = ((win->_begy <= y &&
win->_begx <= x &&
(win->_begx + win->_maxx) >= x &&
(win->_begy + win->_maxy) >= y) ? TRUE : FALSE);
}
returnBool(result);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(mouseinterval) (NCURSES_SP_DCLx int maxclick)
/* set the maximum mouse interval within which to recognize a click */
{
int oldval;
T((T_CALLED("mouseinterval(%p,%d)"), (void *) SP_PARM, maxclick));
if (SP_PARM != 0) {
oldval = SP_PARM->_maxclick;
if (maxclick >= 0)
SP_PARM->_maxclick = maxclick;
} else {
oldval = DEFAULT_MAXCLICK;
}
returnCode(oldval);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
mouseinterval(int maxclick)
{
return NCURSES_SP_NAME(mouseinterval) (CURRENT_SCREEN, maxclick);
}
#endif
/* This may be used by other routines to ask for the existence of mouse
support */
NCURSES_EXPORT(bool)
_nc_has_mouse(SCREEN *sp)
{
return (((0 == sp) || (sp->_mouse_type == M_NONE)) ? FALSE : TRUE);
}
NCURSES_EXPORT(bool)
NCURSES_SP_NAME(has_mouse) (NCURSES_SP_DCL0)
{
return _nc_has_mouse(SP_PARM);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(bool)
has_mouse(void)
{
return _nc_has_mouse(CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(bool)
wmouse_trafo(const WINDOW *win, int *pY, int *pX, bool to_screen)
{
bool result = FALSE;
T((T_CALLED("wmouse_trafo(%p,%p,%p,%d)"),
(const void *) win,
(void *) pY,
(void *) pX,
to_screen));
if (win && pY && pX) {
int y = *pY;
int x = *pX;
if (to_screen) {
y += win->_begy + win->_yoffset;
x += win->_begx;
if (wenclose(win, y, x))
result = TRUE;
} else {
if (wenclose(win, y, x)) {
y -= (win->_begy + win->_yoffset);
x -= win->_begx;
result = TRUE;
}
}
if (result) {
*pX = x;
*pY = y;
}
}
returnBool(result);
}
diff --git a/contrib/ncurses/ncurses/base/lib_newterm.c b/contrib/ncurses/ncurses/base/lib_newterm.c
index ac897906e9fb..bba97ba1fae8 100644
--- a/contrib/ncurses/ncurses/base/lib_newterm.c
+++ b/contrib/ncurses/ncurses/base/lib_newterm.c
@@ -1,361 +1,372 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
/*
** lib_newterm.c
**
** The newterm() function.
**
*/
#include <curses.priv.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
#include <tic.h>
-MODULE_ID("$Id: lib_newterm.c,v 1.102 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_newterm.c,v 1.103 2020/09/05 21:34:04 tom Exp $")
#ifdef USE_TERM_DRIVER
#define NumLabels InfoOf(SP_PARM).numlabels
#else
#define NumLabels num_labels
#endif
#ifndef ONLCR /* Allows compilation under the QNX 4.2 OS */
#define ONLCR 0
#endif
/*
* SVr4/XSI Curses specify that hardware echo is turned off in initscr, and not
* restored during the curses session. The library simulates echo in software.
* (The behavior is unspecified if the application enables hardware echo).
*
* The newterm function also initializes terminal settings, and since initscr
* is supposed to behave as if it calls newterm, we do it here.
*/
static NCURSES_INLINE int
_nc_initscr(NCURSES_SP_DCL0)
{
int result = ERR;
TERMINAL *term = TerminalOf(SP_PARM);
/* for extended XPG4 conformance requires cbreak() at this point */
/* (SVr4 curses does this anyway) */
T((T_CALLED("_nc_initscr(%p) ->term %p"), (void *) SP_PARM, (void *) term));
if (NCURSES_SP_NAME(cbreak) (NCURSES_SP_ARG) == OK) {
TTY buf;
buf = term->Nttyb;
#ifdef TERMIOS
buf.c_lflag &= (unsigned) ~(ECHO | ECHONL);
buf.c_iflag &= (unsigned) ~(ICRNL | INLCR | IGNCR);
buf.c_oflag &= (unsigned) ~(ONLCR);
#elif HAVE_SGTTY_H
buf.sg_flags &= ~(ECHO | CRMOD);
+#elif defined(EXP_WIN32_DRIVER)
+ buf.dwFlagIn = CONMODE_IN_DEFAULT;
+ buf.dwFlagOut = CONMODE_OUT_DEFAULT | VT_FLAG_OUT;
+ if (WINCONSOLE.isTermInfoConsole) {
+ buf.dwFlagIn |= VT_FLAG_IN;
+ }
#else
memset(&buf, 0, sizeof(buf));
#endif
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
if (result == OK)
term->Nttyb = buf;
}
returnCode(result);
}
/*
* filter() has to be called before either initscr() or newterm(), so there is
* apparently no way to make this flag apply to some terminals and not others,
* aside from possibly delaying a filter() call until some terminals have been
* initialized.
*/
NCURSES_EXPORT(void)
NCURSES_SP_NAME(filter) (NCURSES_SP_DCL0)
{
START_TRACE();
T((T_CALLED("filter(%p)"), (void *) SP_PARM));
#if NCURSES_SP_FUNCS
if (IsPreScreen(SP_PARM)) {
SP_PARM->_filtered = TRUE;
}
#else
_nc_prescreen.filter_mode = TRUE;
#endif
returnVoid;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
filter(void)
{
START_TRACE();
T((T_CALLED("filter()")));
_nc_prescreen.filter_mode = TRUE;
returnVoid;
}
#endif
#if NCURSES_EXT_FUNCS
/*
* An extension, allowing the application to open a new screen without
* requiring it to also be filtered.
*/
NCURSES_EXPORT(void)
NCURSES_SP_NAME(nofilter) (NCURSES_SP_DCL0)
{
START_TRACE();
T((T_CALLED("nofilter(%p)"), (void *) SP_PARM));
#if NCURSES_SP_FUNCS
if (IsPreScreen(SP_PARM)) {
SP_PARM->_filtered = FALSE;
}
#else
_nc_prescreen.filter_mode = FALSE;
#endif
returnVoid;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
nofilter(void)
{
START_TRACE();
T((T_CALLED("nofilter()")));
_nc_prescreen.filter_mode = FALSE;
returnVoid;
}
#endif
#endif /* NCURSES_EXT_FUNCS */
NCURSES_EXPORT(SCREEN *)
NCURSES_SP_NAME(newterm) (NCURSES_SP_DCLx
const char *name,
FILE *ofp,
FILE *ifp)
{
int errret;
SCREEN *result = 0;
SCREEN *current;
TERMINAL *its_term;
FILE *_ofp = ofp ? ofp : stdout;
FILE *_ifp = ifp ? ifp : stdin;
TERMINAL *new_term = 0;
START_TRACE();
T((T_CALLED("newterm(%p, \"%s\", %p,%p)"),
(void *) SP_PARM,
(name ? name : ""),
(void *) ofp,
(void *) ifp));
#if NCURSES_SP_FUNCS
assert(SP_PARM != 0);
if (SP_PARM == 0)
returnSP(SP_PARM);
#endif
_nc_init_pthreads();
_nc_lock_global(curses);
current = CURRENT_SCREEN;
its_term = (current ? current->_term : 0);
+#if defined(EXP_WIN32_DRIVER)
+ _setmode(fileno(_ifp), _O_BINARY);
+ _setmode(fileno(_ofp), _O_BINARY);
+#endif
+
INIT_TERM_DRIVER();
/* this loads the capability entry, then sets LINES and COLS */
if (
TINFO_SETUP_TERM(&new_term, name,
fileno(_ofp), &errret, FALSE) != ERR) {
int slk_format;
int filter_mode;
_nc_set_screen(0);
#ifdef USE_TERM_DRIVER
assert(new_term != 0);
#endif
#if NCURSES_SP_FUNCS
slk_format = SP_PARM->slk_format;
filter_mode = SP_PARM->_filtered;
#else
slk_format = _nc_globals.slk_format;
filter_mode = _nc_prescreen.filter_mode;
#endif
/*
* This actually allocates the screen structure, and saves the original
* terminal settings.
*/
if (NCURSES_SP_NAME(_nc_setupscreen) (
#if NCURSES_SP_FUNCS
&SP_PARM,
#endif
*(ptrLines(SP_PARM)),
*(ptrCols(SP_PARM)),
_ofp,
filter_mode,
slk_format) == ERR) {
_nc_set_screen(current);
result = 0;
} else {
int value;
int cols;
#ifdef USE_TERM_DRIVER
TERMINAL_CONTROL_BLOCK *TCB;
#elif !NCURSES_SP_FUNCS
_nc_set_screen(CURRENT_SCREEN);
#endif
assert(SP_PARM != 0);
cols = *(ptrCols(SP_PARM));
#ifdef USE_TERM_DRIVER
_nc_set_screen(SP_PARM);
TCB = (TERMINAL_CONTROL_BLOCK *) new_term;
TCB->csp = SP_PARM;
#endif
/*
* In setupterm() we did a set_curterm(), but it was before we set
* CURRENT_SCREEN. So the "current" screen's terminal pointer was
* overwritten with a different terminal. Later, in
* _nc_setupscreen(), we set CURRENT_SCREEN and the terminal
* pointer in the new screen.
*
* Restore the terminal-pointer for the pre-existing screen, if
* any.
*/
if (current)
current->_term = its_term;
#ifdef USE_TERM_DRIVER
SP_PARM->_term = new_term;
#else
new_term = SP_PARM->_term;
#endif
/* allow user to set maximum escape delay from the environment */
if ((value = _nc_getenv_num("ESCDELAY")) >= 0) {
#if NCURSES_EXT_FUNCS
NCURSES_SP_NAME(set_escdelay) (NCURSES_SP_ARGx value);
#else
ESCDELAY = value;
#endif
}
/* if the terminal type has real soft labels, set those up */
if (slk_format && NumLabels > 0 && SLK_STDFMT(slk_format))
_nc_slk_initialize(StdScreen(SP_PARM), cols);
SP_PARM->_ifd = fileno(_ifp);
NCURSES_SP_NAME(typeahead) (NCURSES_SP_ARGx fileno(_ifp));
#ifdef TERMIOS
SP_PARM->_use_meta = ((new_term->Ottyb.c_cflag & CSIZE) == CS8 &&
!(new_term->Ottyb.c_iflag & ISTRIP)) ||
USE_KLIBC_KBD;
#else
SP_PARM->_use_meta = FALSE;
#endif
SP_PARM->_endwin = ewInitial;
#ifndef USE_TERM_DRIVER
/*
* Check whether we can optimize scrolling under dumb terminals in
* case we do not have any of these capabilities, scrolling
* optimization will be useless.
*/
SP_PARM->_scrolling = ((scroll_forward && scroll_reverse) ||
((parm_rindex ||
parm_insert_line ||
insert_line) &&
(parm_index ||
parm_delete_line ||
delete_line)));
#endif
NCURSES_SP_NAME(baudrate) (NCURSES_SP_ARG); /* sets a field in the screen structure */
SP_PARM->_keytry = 0;
/* compute movement costs so we can do better move optimization */
#ifdef USE_TERM_DRIVER
TCBOf(SP_PARM)->drv->td_scinit(SP_PARM);
#else /* ! USE_TERM_DRIVER */
/*
* Check for mismatched graphic-rendition capabilities. Most SVr4
* terminfo trees contain entries that have rmul or rmso equated to
* sgr0 (Solaris curses copes with those entries). We do this only
* for curses, since many termcap applications assume that
* smso/rmso and smul/rmul are paired, and will not function
* properly if we remove rmso or rmul. Curses applications
* shouldn't be looking at this detail.
*/
#define SGR0_TEST(mode) (mode != 0) && (exit_attribute_mode == 0 || strcmp(mode, exit_attribute_mode))
SP_PARM->_use_rmso = SGR0_TEST(exit_standout_mode);
SP_PARM->_use_rmul = SGR0_TEST(exit_underline_mode);
#if USE_ITALIC
SP_PARM->_use_ritm = SGR0_TEST(exit_italics_mode);
#endif
/* compute movement costs so we can do better move optimization */
_nc_mvcur_init();
/* initialize terminal to a sane state */
_nc_screen_init();
#endif /* USE_TERM_DRIVER */
/* Initialize the terminal line settings. */
_nc_initscr(NCURSES_SP_ARG);
_nc_signal_handler(TRUE);
result = SP_PARM;
}
}
_nc_unlock_global(curses);
returnSP(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(SCREEN *)
newterm(const char *name, FILE *ofp, FILE *ifp)
{
SCREEN *rc;
_nc_lock_global(prescreen);
START_TRACE();
rc = NCURSES_SP_NAME(newterm) (CURRENT_SCREEN_PRE, name, ofp, ifp);
_nc_forget_prescr();
_nc_unlock_global(prescreen);
return rc;
}
#endif
diff --git a/contrib/ncurses/ncurses/base/lib_screen.c b/contrib/ncurses/ncurses/base/lib_screen.c
index 164356dc41de..6afba6611c61 100644
--- a/contrib/ncurses/ncurses/base/lib_screen.c
+++ b/contrib/ncurses/ncurses/base/lib_screen.c
@@ -1,1059 +1,1059 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 1998-2017,2018 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996 on *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
#include <curses.priv.h>
#include <ctype.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_screen.c,v 1.97 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_screen.c,v 1.100 2020/05/25 22:48:41 tom Exp $")
#define MAX_SIZE 0x3fff /* 16k is big enough for a window or pad */
#define MARKER '\\'
#define APPEND '+'
#define GUTTER '|'
#define L_CURL '{'
#define R_CURL '}'
#if USE_STRING_HACKS && HAVE_SNPRINTF
#define ARG_SLIMIT(name) size_t name,
#else
#define ARG_SLIMIT(name) /* nothing */
#endif
-#define CUR_SLIMIT _nc_SLIMIT(limit - (target - base))
+#define CUR_SLIMIT _nc_SLIMIT(limit - (size_t) (target - base))
#define TOP_SLIMIT _nc_SLIMIT(sizeof(buffer))
/*
* Use 0x888888 as the magic number for new-format files, since it cannot be
* mistaken for the _cury/_curx pair of 16-bit numbers which start the old
* format. It happens to be unused in the file 5.22 database (2015/03/07).
*/
static const char my_magic[] =
-{'\210', '\210', '\210', '\210'};
+{'\210', '\210', '\210', '\210', 0};
#if NCURSES_EXT_PUTWIN
typedef enum {
pINT /* int */
,pSHORT /* short */
,pBOOL /* bool */
,pATTR /* attr_t */
,pCHAR /* chtype */
,pSIZE /* NCURSES_SIZE_T */
#if NCURSES_WIDECHAR
,pCCHAR /* cchar_t */
#endif
} PARAM_TYPE;
typedef struct {
const char name[11];
attr_t attr;
} SCR_ATTRS;
typedef struct {
const char name[17];
PARAM_TYPE type;
size_t size;
size_t offset;
} SCR_PARAMS;
#define DATA(name) { { #name }, A_##name }
static const SCR_ATTRS scr_attrs[] =
{
DATA(NORMAL),
DATA(STANDOUT),
DATA(UNDERLINE),
DATA(REVERSE),
DATA(BLINK),
DATA(DIM),
DATA(BOLD),
DATA(ALTCHARSET),
DATA(INVIS),
DATA(PROTECT),
DATA(HORIZONTAL),
DATA(LEFT),
DATA(LOW),
DATA(RIGHT),
DATA(TOP),
DATA(VERTICAL),
#ifdef A_ITALIC
DATA(ITALIC),
#endif
};
#undef DATA
#define sizeof2(type,name) sizeof(((type *)0)->name)
#define DATA(name, type) { { #name }, type, sizeof2(WINDOW, name), offsetof(WINDOW, name) }
static const SCR_PARAMS scr_params[] =
{
DATA(_cury, pSIZE),
DATA(_curx, pSIZE),
DATA(_maxy, pSIZE),
DATA(_maxx, pSIZE),
DATA(_begy, pSIZE),
DATA(_begx, pSIZE),
DATA(_flags, pSHORT),
DATA(_attrs, pATTR),
DATA(_bkgd, pCHAR),
DATA(_notimeout, pBOOL),
DATA(_clear, pBOOL),
DATA(_leaveok, pBOOL),
DATA(_scroll, pBOOL),
DATA(_idlok, pBOOL),
DATA(_idcok, pBOOL),
DATA(_immed, pBOOL),
DATA(_sync, pBOOL),
DATA(_use_keypad, pBOOL),
DATA(_delay, pINT),
DATA(_regtop, pSIZE),
DATA(_regbottom, pSIZE),
DATA(_pad._pad_y, pSIZE),
DATA(_pad._pad_x, pSIZE),
DATA(_pad._pad_top, pSIZE),
DATA(_pad._pad_left, pSIZE),
DATA(_pad._pad_bottom, pSIZE),
DATA(_pad._pad_right, pSIZE),
DATA(_yoffset, pSIZE),
#if NCURSES_WIDECHAR
DATA(_bkgrnd, pCCHAR),
#if NCURSES_EXT_COLORS
DATA(_color, pINT),
#endif
#endif
};
#undef DATA
static const NCURSES_CH_T blank = NewChar(BLANK_TEXT);
/*
* Allocate and read a line of text. Caller must free it.
*/
static char *
read_txt(FILE *fp)
{
size_t limit = 1024;
char *result = malloc(limit);
char *buffer;
if (result != 0) {
int ch = 0;
size_t used = 0;
clearerr(fp);
result[used] = '\0';
do {
if (used + 2 >= limit) {
limit += 1024;
buffer = realloc(result, limit);
if (buffer == 0) {
free(result);
result = 0;
break;
}
result = buffer;
}
ch = fgetc(fp);
if (ch == EOF)
break;
result[used++] = (char) ch;
result[used] = '\0';
} while (ch != '\n');
if (ch == '\n') {
result[--used] = '\0';
T(("READ:%s", result));
} else if (used == 0) {
free(result);
result = 0;
}
}
return result;
}
static char *
decode_attr(char *source, attr_t *target, int *color)
{
bool found = FALSE;
T(("decode_attr '%s'", source));
while (*source) {
if (source[0] == MARKER && source[1] == L_CURL) {
source += 2;
found = TRUE;
} else if (source[0] == R_CURL) {
source++;
found = FALSE;
} else if (found) {
size_t n;
char *next = source;
if (source[0] == GUTTER) {
++next;
} else if (*next == 'C') {
int value = 0;
unsigned pair;
next++;
while (isdigit(UChar(*next))) {
value = value * 10 + (*next++ - '0');
}
*target &= ~A_COLOR;
pair = (unsigned) ((value > 256)
? COLOR_PAIR(255)
: COLOR_PAIR(value));
*target |= pair;
*color = value;
} else {
while (isalnum(UChar(*next))) {
++next;
}
for (n = 0; n < SIZEOF(scr_attrs); ++n) {
if ((size_t) (next - source) == strlen(scr_attrs[n].name)) {
if (scr_attrs[n].attr) {
*target |= scr_attrs[n].attr;
} else {
*target = A_NORMAL;
}
break;
}
}
}
source = next;
} else {
break;
}
}
return source;
}
static char *
decode_char(char *source, int *target)
{
int limit = 0;
int base = 16;
const char digits[] = "0123456789abcdef";
T(("decode_char '%s'", source));
*target = ' ';
switch (*source) {
case MARKER:
switch (*++source) {
case APPEND:
break;
case MARKER:
*target = MARKER;
++source;
break;
case 's':
*target = ' ';
++source;
break;
case '0':
case '1':
case '2':
case '3':
base = 8;
limit = 3;
break;
case 'u':
limit = 4;
++source;
break;
case 'U':
limit = 8;
++source;
break;
}
if (limit) {
*target = 0;
while (limit-- > 0) {
char *find = strchr(digits, *source++);
int ch = (find != 0) ? (int) (find - digits) : -1;
*target *= base;
if (ch >= 0 && ch < base) {
*target += ch;
}
}
}
break;
default:
*target = *source++;
break;
}
return source;
}
static char *
decode_chtype(char *source, chtype fillin, chtype *target)
{
attr_t attr = ChAttrOf(fillin);
int color = PAIR_NUMBER((int) attr);
int value;
T(("decode_chtype '%s'", source));
source = decode_attr(source, &attr, &color);
source = decode_char(source, &value);
*target = (ChCharOf(value) | attr | (chtype) COLOR_PAIR(color));
/* FIXME - ignore combining characters */
return source;
}
#if NCURSES_WIDECHAR
static char *
decode_cchar(char *source, cchar_t *fillin, cchar_t *target)
{
int color;
attr_t attr = fillin->attr;
wchar_t chars[CCHARW_MAX];
int append = 0;
int value = 0;
T(("decode_cchar '%s'", source));
*target = blank;
#if NCURSES_EXT_COLORS
color = fillin->ext_color;
#else
color = (int) PAIR_NUMBER(attr);
#endif
source = decode_attr(source, &attr, &color);
memset(chars, 0, sizeof(chars));
source = decode_char(source, &value);
chars[0] = (wchar_t) value;
/* handle combining characters */
while (source[0] == MARKER && source[1] == APPEND) {
source += 2;
source = decode_char(source, &value);
if (++append < CCHARW_MAX) {
chars[append] = (wchar_t) value;
}
}
setcchar(target, chars, attr, (short) color, &color);
return source;
}
#endif
static int
read_win(WINDOW *win, FILE *fp)
{
int code = ERR;
size_t n;
int color;
#if NCURSES_WIDECHAR
NCURSES_CH_T prior;
#endif
chtype prior2;
memset(win, 0, sizeof(WINDOW));
for (;;) {
char *name;
char *value;
char *txt = read_txt(fp);
if (txt == 0)
break;
if (!strcmp(txt, "rows:")) {
free(txt);
code = OK;
break;
}
if ((value = strchr(txt, '=')) == 0) {
free(txt);
continue;
}
*value++ = '\0';
name = !strcmp(txt, "flag") ? value : txt;
for (n = 0; n < SIZEOF(scr_params); ++n) {
if (!strcmp(name, scr_params[n].name)) {
void *data = (void *) ((char *) win + scr_params[n].offset);
switch (scr_params[n].type) {
case pATTR:
(void) decode_attr(value, data, &color);
break;
case pBOOL:
*(bool *) data = TRUE;
break;
case pCHAR:
prior2 = ' ';
decode_chtype(value, prior2, data);
break;
case pINT:
*(int *) data = atoi(value);
break;
case pSHORT:
*(short *) data = (short) atoi(value);
break;
case pSIZE:
*(NCURSES_SIZE_T *) data = (NCURSES_SIZE_T) atoi(value);
break;
#if NCURSES_WIDECHAR
case pCCHAR:
prior = blank;
decode_cchar(value, &prior, data);
break;
#endif
}
break;
}
}
free(txt);
}
return code;
}
static int
-read_row(char *source, NCURSES_CH_T * prior, NCURSES_CH_T * target, int length)
+read_row(char *source, NCURSES_CH_T *prior, NCURSES_CH_T *target, int length)
{
while (*source != '\0' && length > 0) {
#if NCURSES_WIDECHAR
int len;
source = decode_cchar(source, prior, target);
len = _nc_wacs_width(target->chars[0]);
if (len > 1) {
int n;
SetWidecExt(CHDEREF(target), 0);
for (n = 1; n < len; ++n) {
target[n] = target[0];
SetWidecExt(CHDEREF(target), n);
}
target += (len - 1);
length -= (len - 1);
}
#else
source = decode_chtype(source, *prior, target);
#endif
*prior = *target;
++target;
--length;
}
while (length-- > 0) {
*target++ = blank;
}
/* FIXME - see what error conditions should apply if I need to return ERR */
return 0;
}
#endif /* NCURSES_EXT_PUTWIN */
/*
* Originally, getwin/putwin used fread/fwrite, because they used binary data.
* The new format uses printable ASCII, which does not have as predictable
* sizes. Consequently, we use buffered I/O, e.g., fgetc/fprintf, which need
* special handling if we want to read screen dumps from an older library.
*/
static int
read_block(void *target, size_t length, FILE *fp)
{
int result = 0;
char *buffer = target;
clearerr(fp);
while (length-- != 0) {
int ch = fgetc(fp);
if (ch == EOF) {
result = -1;
break;
}
*buffer++ = (char) ch;
}
return result;
}
NCURSES_EXPORT(WINDOW *)
NCURSES_SP_NAME(getwin) (NCURSES_SP_DCLx FILE *filep)
{
WINDOW tmp, *nwin;
bool old_format = FALSE;
T((T_CALLED("getwin(%p)"), (void *) filep));
if (filep == 0) {
returnWin(0);
}
/*
* Read the first 4 bytes to determine first if this is an old-format
* screen-dump, or new-format.
*/
if (read_block(&tmp, (size_t) 4, filep) < 0) {
returnWin(0);
}
/*
* If this is a new-format file, and we do not support it, give up.
*/
if (!memcmp(&tmp, my_magic, (size_t) 4)) {
#if NCURSES_EXT_PUTWIN
if (read_win(&tmp, filep) < 0)
#endif
returnWin(0);
} else if (read_block(((char *) &tmp) + 4, sizeof(WINDOW) - 4, filep) < 0) {
returnWin(0);
} else {
old_format = TRUE;
}
/*
* Check the window-size:
*/
if (tmp._maxy == 0 ||
tmp._maxy > MAX_SIZE ||
tmp._maxx == 0 ||
tmp._maxx > MAX_SIZE) {
returnWin(0);
}
if (tmp._flags & _ISPAD) {
nwin = NCURSES_SP_NAME(newpad) (NCURSES_SP_ARGx
tmp._maxy + 1,
tmp._maxx + 1);
} else {
nwin = NCURSES_SP_NAME(newwin) (NCURSES_SP_ARGx
tmp._maxy + 1,
tmp._maxx + 1, 0, 0);
}
/*
* We deliberately do not restore the _parx, _pary, or _parent
* fields, because the window hierarchy within which they
* made sense is probably gone.
*/
if (nwin != 0) {
int n;
size_t linesize = sizeof(NCURSES_CH_T) * (size_t) (tmp._maxx + 1);
nwin->_curx = tmp._curx;
nwin->_cury = tmp._cury;
nwin->_maxy = tmp._maxy;
nwin->_maxx = tmp._maxx;
nwin->_begy = tmp._begy;
nwin->_begx = tmp._begx;
nwin->_yoffset = tmp._yoffset;
nwin->_flags = tmp._flags & ~(_SUBWIN);
WINDOW_ATTRS(nwin) = WINDOW_ATTRS(&tmp);
nwin->_nc_bkgd = tmp._nc_bkgd;
nwin->_notimeout = tmp._notimeout;
nwin->_clear = tmp._clear;
nwin->_leaveok = tmp._leaveok;
nwin->_idlok = tmp._idlok;
nwin->_idcok = tmp._idcok;
nwin->_immed = tmp._immed;
nwin->_scroll = tmp._scroll;
nwin->_sync = tmp._sync;
nwin->_use_keypad = tmp._use_keypad;
nwin->_delay = tmp._delay;
nwin->_regtop = tmp._regtop;
nwin->_regbottom = tmp._regbottom;
if (tmp._flags & _ISPAD)
nwin->_pad = tmp._pad;
if (old_format) {
T(("reading old-format screen dump"));
for (n = 0; n <= nwin->_maxy; n++) {
if (read_block(nwin->_line[n].text, linesize, filep) < 0) {
delwin(nwin);
returnWin(0);
}
}
}
#if NCURSES_EXT_PUTWIN
else {
char *txt = 0;
bool success = TRUE;
NCURSES_CH_T prior = blank;
T(("reading new-format screen dump"));
for (n = 0; n <= nwin->_maxy; n++) {
long row;
char *next;
if ((txt = read_txt(filep)) == 0) {
T(("...failed to read string for row %d", n + 1));
success = FALSE;
break;
}
row = strtol(txt, &next, 10);
if (row != (n + 1) || *next != ':') {
T(("...failed to read row-number %d", n + 1));
success = FALSE;
break;
}
if (read_row(++next, &prior, nwin->_line[n].text, tmp._maxx
+ 1) < 0) {
T(("...failed to read cells for row %d", n + 1));
success = FALSE;
break;
}
free(txt);
txt = 0;
}
if (!success) {
free(txt);
delwin(nwin);
returnWin(0);
}
}
#endif
touchwin(nwin);
}
returnWin(nwin);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(WINDOW *)
getwin(FILE *filep)
{
return NCURSES_SP_NAME(getwin) (CURRENT_SCREEN, filep);
}
#endif
#if NCURSES_EXT_PUTWIN
static void
encode_attr(char *target, ARG_SLIMIT(limit)
attr_t source,
attr_t prior,
int source_color,
int prior_color)
{
#if USE_STRING_HACKS && HAVE_SNPRINTF
char *base = target;
#endif
source &= ~A_CHARTEXT;
prior &= ~A_CHARTEXT;
*target = '\0';
if ((source != prior) || (source_color != prior_color)) {
size_t n;
bool first = TRUE;
*target++ = MARKER;
*target++ = L_CURL;
for (n = 0; n < SIZEOF(scr_attrs); ++n) {
if ((source & scr_attrs[n].attr) != 0 ||
((source & ALL_BUT_COLOR) == 0 &&
(scr_attrs[n].attr == A_NORMAL))) {
if (first) {
first = FALSE;
} else {
*target++ = '|';
}
_nc_STRCPY(target, scr_attrs[n].name, limit);
target += strlen(target);
}
}
if (source_color != prior_color) {
if (!first)
*target++ = '|';
_nc_SPRINTF(target, CUR_SLIMIT "C%d", source_color);
target += strlen(target);
}
*target++ = R_CURL;
*target = '\0';
}
}
static void
encode_cell(char *target, ARG_SLIMIT(limit) CARG_CH_T source, CARG_CH_T previous)
{
#if USE_STRING_HACKS && HAVE_SNPRINTF
char *base = target;
#endif
#if NCURSES_WIDECHAR
size_t n;
int source_pair = GetPair(*source);
int previous_pair = GetPair(*previous);
*target = '\0';
if ((previous->attr != source->attr) || (previous_pair != source_pair)) {
encode_attr(target, CUR_SLIMIT
source->attr,
previous->attr,
source_pair,
previous_pair);
}
target += strlen(target);
#if NCURSES_EXT_COLORS
if (previous->ext_color != source->ext_color) {
_nc_SPRINTF(target, CUR_SLIMIT
"%c%cC%d%c", MARKER, L_CURL, source->ext_color, R_CURL);
}
#endif
for (n = 0; n < SIZEOF(source->chars); ++n) {
unsigned uch = (unsigned) source->chars[n];
if (uch == 0)
continue;
if (n) {
*target++ = MARKER;
*target++ = APPEND;
}
*target++ = MARKER;
if (uch > 0xffff) {
_nc_SPRINTF(target, CUR_SLIMIT "U%08x", uch);
} else if (uch > 0xff) {
_nc_SPRINTF(target, CUR_SLIMIT "u%04x", uch);
} else if (uch < 32 || uch >= 127) {
_nc_SPRINTF(target, CUR_SLIMIT "%03o", uch & 0xff);
} else {
switch (uch) {
case ' ':
_nc_STRCPY(target, "s", limit);
break;
case MARKER:
*target++ = MARKER;
*target = '\0';
break;
default:
--target;
_nc_SPRINTF(target, CUR_SLIMIT "%c", uch);
break;
}
}
target += strlen(target);
}
#else
chtype ch = CharOfD(source);
*target = '\0';
if (AttrOfD(previous) != AttrOfD(source)) {
encode_attr(target, CUR_SLIMIT
AttrOfD(source),
AttrOfD(previous),
GetPair(source),
GetPair(previous));
}
target += strlen(target);
*target++ = MARKER;
if (ch < 32 || ch >= 127) {
_nc_SPRINTF(target, CUR_SLIMIT "%03o", UChar(ch));
} else {
switch (ch) {
case ' ':
_nc_STRCPY(target, "s", limit);
break;
case MARKER:
*target++ = MARKER;
*target = '\0';
break;
default:
--target;
_nc_SPRINTF(target, CUR_SLIMIT "%c", UChar(ch));
break;
}
}
#endif
}
#endif
NCURSES_EXPORT(int)
putwin(WINDOW *win, FILE *filep)
{
int code = ERR;
T((T_CALLED("putwin(%p,%p)"), (void *) win, (void *) filep));
#if NCURSES_EXT_PUTWIN
if (win != 0) {
const char *version = curses_version();
char buffer[1024];
NCURSES_CH_T last_cell;
int y;
memset(&last_cell, 0, sizeof(last_cell));
clearerr(filep);
/*
* Our magic number is technically nonprinting, but aside from that,
* all of the file is printable ASCII.
*/
#define PUTS(s) if (fputs(s, filep) == EOF || ferror(filep)) returnCode(code)
PUTS(my_magic);
PUTS(version);
PUTS("\n");
for (y = 0; y < (int) SIZEOF(scr_params); ++y) {
const char *name = scr_params[y].name;
const char *data = (char *) win + scr_params[y].offset;
const void *dp = (const void *) data;
attr_t attr;
*buffer = '\0';
if (!strncmp(name, "_pad.", (size_t) 5) && !(win->_flags & _ISPAD)) {
continue;
}
switch (scr_params[y].type) {
case pATTR:
attr = (*(const attr_t *) dp) & ~A_CHARTEXT;
encode_attr(buffer, TOP_SLIMIT
(*(const attr_t *) dp) & ~A_CHARTEXT,
A_NORMAL,
COLOR_PAIR((int) attr),
0);
break;
case pBOOL:
if (!(*(const bool *) data)) {
continue;
}
_nc_STRCPY(buffer, name, sizeof(buffer));
name = "flag";
break;
case pCHAR:
attr = (*(const attr_t *) dp);
encode_attr(buffer, TOP_SLIMIT
* (const attr_t *) dp,
A_NORMAL,
COLOR_PAIR((int) attr),
0);
break;
case pINT:
if (!(*(const int *) dp))
continue;
_nc_SPRINTF(buffer, TOP_SLIMIT
"%d", *(const int *) dp);
break;
case pSHORT:
if (!(*(const short *) dp))
continue;
_nc_SPRINTF(buffer, TOP_SLIMIT
"%d", *(const short *) dp);
break;
case pSIZE:
if (!(*(const NCURSES_SIZE_T *) dp))
continue;
_nc_SPRINTF(buffer, TOP_SLIMIT
"%d", *(const NCURSES_SIZE_T *) dp);
break;
#if NCURSES_WIDECHAR
case pCCHAR:
encode_cell(buffer, TOP_SLIMIT
(CARG_CH_T) dp, CHREF(last_cell));
break;
#endif
}
/*
* Only write non-default data.
*/
if (*buffer != '\0') {
if (fprintf(filep, "%s=%s\n", name, buffer) <= 0
|| ferror(filep))
returnCode(code);
}
}
/* Write row-data */
fprintf(filep, "rows:\n");
for (y = 0; y <= win->_maxy; y++) {
NCURSES_CH_T *data = win->_line[y].text;
int x;
if (fprintf(filep, "%d:", y + 1) <= 0
|| ferror(filep))
returnCode(code);
for (x = 0; x <= win->_maxx; x++) {
#if NCURSES_WIDECHAR
int len = _nc_wacs_width(data[x].chars[0]);
encode_cell(buffer, TOP_SLIMIT CHREF(data[x]), CHREF(last_cell));
last_cell = data[x];
PUTS(buffer);
if (len > 1)
x += (len - 1);
#else
encode_cell(buffer, TOP_SLIMIT CHREF(data[x]), CHREF(last_cell));
last_cell = data[x];
PUTS(buffer);
#endif
}
PUTS("\n");
}
code = OK;
}
#else
/*
* This is the original putwin():
* A straight binary dump is simple, but its format can depend on whether
* ncurses is compiled with wide-character support, and also may depend
* on the version of ncurses, e.g., if the WINDOW structure is extended.
*/
if (win != 0) {
size_t len = (size_t) (win->_maxx + 1);
int y;
clearerr(filep);
if (fwrite(win, sizeof(WINDOW), (size_t) 1, filep) != 1
|| ferror(filep))
returnCode(code);
for (y = 0; y <= win->_maxy; y++) {
if (fwrite(win->_line[y].text,
sizeof(NCURSES_CH_T), len, filep) != len
|| ferror(filep)) {
returnCode(code);
}
}
code = OK;
}
#endif
returnCode(code);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(scr_restore) (NCURSES_SP_DCLx const char *file)
{
FILE *fp = 0;
int code = ERR;
T((T_CALLED("scr_restore(%p,%s)"), (void *) SP_PARM, _nc_visbuf(file)));
if (_nc_access(file, R_OK) >= 0
&& (fp = fopen(file, BIN_R)) != 0) {
delwin(NewScreen(SP_PARM));
NewScreen(SP_PARM) = getwin(fp);
#if !USE_REENTRANT
newscr = NewScreen(SP_PARM);
#endif
(void) fclose(fp);
if (NewScreen(SP_PARM) != 0) {
code = OK;
}
}
returnCode(code);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
scr_restore(const char *file)
{
return NCURSES_SP_NAME(scr_restore) (CURRENT_SCREEN, file);
}
#endif
NCURSES_EXPORT(int)
scr_dump(const char *file)
{
int result;
FILE *fp = 0;
T((T_CALLED("scr_dump(%s)"), _nc_visbuf(file)));
if (_nc_access(file, W_OK) < 0
|| (fp = fopen(file, BIN_W)) == 0) {
result = ERR;
} else {
(void) putwin(newscr, fp);
(void) fclose(fp);
result = OK;
}
returnCode(result);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(scr_init) (NCURSES_SP_DCLx const char *file)
{
int code = ERR;
T((T_CALLED("scr_init(%p,%s)"), (void *) SP_PARM, _nc_visbuf(file)));
if (SP_PARM != 0 &&
#ifdef USE_TERM_DRIVER
InfoOf(SP_PARM).caninit
#else
!(exit_ca_mode && non_rev_rmcup)
#endif
) {
FILE *fp = 0;
if (_nc_access(file, R_OK) >= 0
&& (fp = fopen(file, BIN_R)) != 0) {
delwin(CurScreen(SP_PARM));
CurScreen(SP_PARM) = getwin(fp);
#if !USE_REENTRANT
curscr = CurScreen(SP_PARM);
#endif
(void) fclose(fp);
if (CurScreen(SP_PARM) != 0) {
code = OK;
}
}
}
returnCode(code);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
scr_init(const char *file)
{
return NCURSES_SP_NAME(scr_init) (CURRENT_SCREEN, file);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(scr_set) (NCURSES_SP_DCLx const char *file)
{
int code = ERR;
T((T_CALLED("scr_set(%p,%s)"), (void *) SP_PARM, _nc_visbuf(file)));
if (NCURSES_SP_NAME(scr_init) (NCURSES_SP_ARGx file) == OK) {
delwin(NewScreen(SP_PARM));
NewScreen(SP_PARM) = dupwin(curscr);
#if !USE_REENTRANT
newscr = NewScreen(SP_PARM);
#endif
if (NewScreen(SP_PARM) != 0) {
code = OK;
}
}
returnCode(code);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
scr_set(const char *file)
{
return NCURSES_SP_NAME(scr_set) (CURRENT_SCREEN, file);
}
#endif
diff --git a/contrib/ncurses/ncurses/base/lib_set_term.c b/contrib/ncurses/ncurses/base/lib_set_term.c
index c5f26bc7a656..8573fbe7d522 100644
--- a/contrib/ncurses/ncurses/base/lib_set_term.c
+++ b/contrib/ncurses/ncurses/base/lib_set_term.c
@@ -1,820 +1,845 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
/*
** lib_set_term.c
**
** The routine set_term().
**
*/
#include <curses.priv.h>
#include <tic.h>
+#if USE_GPM_SUPPORT
+#ifdef HAVE_LIBDL
+/* use dynamic loader to avoid linkage dependency */
+#include <dlfcn.h>
+#endif
+#endif
+
#undef CUR
#define CUR SP_TERMTYPE
-MODULE_ID("$Id: lib_set_term.c,v 1.169 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_set_term.c,v 1.175 2020/10/10 19:09:03 juergen Exp $")
#ifdef USE_TERM_DRIVER
#define MaxColors InfoOf(sp).maxcolors
#define NumLabels InfoOf(sp).numlabels
#else
#define MaxColors max_colors
#define NumLabels num_labels
#endif
NCURSES_EXPORT(SCREEN *)
set_term(SCREEN *screenp)
{
SCREEN *oldSP;
SCREEN *newSP;
T((T_CALLED("set_term(%p)"), (void *) screenp));
_nc_lock_global(curses);
oldSP = CURRENT_SCREEN;
_nc_set_screen(screenp);
newSP = screenp;
if (newSP != 0) {
TINFO_SET_CURTERM(newSP, newSP->_term);
#if !USE_REENTRANT
curscr = CurScreen(newSP);
newscr = NewScreen(newSP);
stdscr = StdScreen(newSP);
COLORS = newSP->_color_count;
COLOR_PAIRS = newSP->_pair_count;
#endif
} else {
TINFO_SET_CURTERM(oldSP, 0);
#if !USE_REENTRANT
curscr = 0;
newscr = 0;
stdscr = 0;
COLORS = 0;
COLOR_PAIRS = 0;
#endif
}
_nc_unlock_global(curses);
T((T_RETURN("%p"), (void *) oldSP));
return (oldSP);
}
static void
_nc_free_keytry(TRIES * kt)
{
if (kt != 0) {
_nc_free_keytry(kt->child);
_nc_free_keytry(kt->sibling);
free(kt);
}
}
static bool
delink_screen(SCREEN *sp)
{
SCREEN *last = 0;
SCREEN *temp;
bool result = FALSE;
for (each_screen(temp)) {
if (temp == sp) {
if (last)
last->_next_screen = sp->_next_screen;
else
_nc_screen_chain = sp->_next_screen;
result = TRUE;
break;
}
last = temp;
}
return result;
}
/*
* Free the storage associated with the given SCREEN sp.
*/
NCURSES_EXPORT(void)
delscreen(SCREEN *sp)
{
T((T_CALLED("delscreen(%p)"), (void *) sp));
_nc_lock_global(curses);
if (delink_screen(sp)) {
#ifdef USE_SP_RIPOFF
ripoff_t *rop;
if (safe_ripoff_sp && safe_ripoff_sp != safe_ripoff_stack) {
for (rop = safe_ripoff_stack;
rop != safe_ripoff_sp && (rop - safe_ripoff_stack) < N_RIPS;
rop++) {
if (rop->win) {
(void) delwin(rop->win);
rop->win = 0;
}
}
}
#endif
(void) _nc_freewin(CurScreen(sp));
(void) _nc_freewin(NewScreen(sp));
(void) _nc_freewin(StdScreen(sp));
if (sp->_slk != 0) {
if (sp->_slk->ent != 0) {
int i;
for (i = 0; i < sp->_slk->labcnt; ++i) {
FreeIfNeeded(sp->_slk->ent[i].ent_text);
FreeIfNeeded(sp->_slk->ent[i].form_text);
}
free(sp->_slk->ent);
}
free(sp->_slk);
sp->_slk = 0;
}
_nc_free_keytry(sp->_keytry);
sp->_keytry = 0;
_nc_free_keytry(sp->_key_ok);
sp->_key_ok = 0;
FreeIfNeeded(sp->_current_attr);
FreeIfNeeded(sp->_color_table);
FreeIfNeeded(sp->_color_pairs);
FreeIfNeeded(sp->_oldnum_list);
FreeIfNeeded(sp->oldhash);
FreeIfNeeded(sp->newhash);
FreeIfNeeded(sp->hashtab);
FreeIfNeeded(sp->_acs_map);
FreeIfNeeded(sp->_screen_acs_map);
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
NCURSES_SP_NAME(del_curterm) (NCURSES_SP_ARGx sp->_term);
FreeIfNeeded(sp->out_buffer);
if (_nc_find_prescr() == sp) {
_nc_forget_prescr();
}
+#if USE_GPM_SUPPORT
+#ifdef HAVE_LIBDL
+ if (sp->_dlopen_gpm != 0) {
+ dlclose(sp->_dlopen_gpm);
+ sp->_dlopen_gpm = 0;
+ }
+#endif
+#endif /* USE_GPM_SUPPORT */
free(sp);
/*
* If this was the current screen, reset everything that the
* application might try to use (except cur_term, which may have
* multiple references in different screens).
*/
if (sp == CURRENT_SCREEN) {
#if !USE_REENTRANT
curscr = 0;
newscr = 0;
stdscr = 0;
COLORS = 0;
COLOR_PAIRS = 0;
#endif
_nc_set_screen(0);
#if USE_WIDEC_SUPPORT
if (SP == 0) {
FreeIfNeeded(_nc_wacs);
_nc_wacs = 0;
}
#endif
}
}
_nc_unlock_global(curses);
returnVoid;
}
static bool
no_mouse_event(SCREEN *sp GCC_UNUSED)
{
return FALSE;
}
static bool
no_mouse_inline(SCREEN *sp GCC_UNUSED)
{
return FALSE;
}
static bool
no_mouse_parse(SCREEN *sp GCC_UNUSED, int code GCC_UNUSED)
{
return TRUE;
}
static void
no_mouse_resume(SCREEN *sp GCC_UNUSED)
{
}
static void
no_mouse_wrap(SCREEN *sp GCC_UNUSED)
{
}
#if NCURSES_EXT_FUNCS && USE_COLORFGBG
static const char *
extract_fgbg(const char *src, int *result)
{
const char *dst = 0;
char *tmp = 0;
long value = strtol(src, &tmp, 0);
if ((dst = tmp) == 0) {
dst = src;
} else if (value >= 0) {
*result = (int) value;
}
while (*dst != 0 && *dst != ';')
dst++;
if (*dst == ';')
dst++;
return dst;
}
#endif
#define ReturnScreenError() do { _nc_set_screen(0); \
returnCode(ERR); } while (0)
/* OS-independent screen initializations */
NCURSES_EXPORT(int)
NCURSES_SP_NAME(_nc_setupscreen) (
#if NCURSES_SP_FUNCS
SCREEN **spp,
#endif
int slines,
int scolumns,
FILE *output,
int filtered,
int slk_format)
{
#ifndef USE_TERM_DRIVER
static const TTY null_TTY; /* all zeros iff uninitialized */
#endif
char *env;
int bottom_stolen = 0;
SCREEN *sp;
#ifndef USE_TERM_DRIVER
bool support_cookies = USE_XMC_SUPPORT;
#endif
T((T_CALLED("_nc_setupscreen(%d, %d, %p, %d, %d)"),
slines, scolumns, (void *) output, filtered, slk_format));
assert(CURRENT_SCREEN == 0); /* has been reset in newterm() ! */
#if NCURSES_SP_FUNCS
assert(spp != 0);
sp = *spp;
if (!sp) {
sp = _nc_alloc_screen_sp();
T(("_nc_alloc_screen_sp %p", (void *) sp));
*spp = sp;
}
if (!sp
|| ((sp->_acs_map = typeCalloc(chtype, ACS_LEN)) == 0)
|| ((sp->_screen_acs_map = typeCalloc(bool, ACS_LEN)) == 0)) {
ReturnScreenError();
}
T(("created SP %p", (void *) sp));
sp->_next_screen = _nc_screen_chain;
_nc_screen_chain = sp;
if ((sp->_current_attr = typeCalloc(NCURSES_CH_T, 1)) == 0) {
ReturnScreenError();
}
#else
if (!_nc_alloc_screen()
|| ((SP->_acs_map = typeCalloc(chtype, ACS_LEN)) == 0)
|| ((SP->_screen_acs_map = typeCalloc(bool, ACS_LEN)) == 0)) {
returnCode(ERR);
}
T(("created SP %p", (void *) SP));
sp = SP; /* fixup so SET_LINES and SET_COLS works */
sp->_next_screen = _nc_screen_chain;
_nc_screen_chain = sp;
- if ((sp->_current_attr = typeCalloc(NCURSES_CH_T, 1)) == 0)
+ if ((sp->_current_attr = typeCalloc(NCURSES_CH_T, 1)) == 0) {
returnCode(ERR);
+ }
#endif
/*
* We should always check the screensize, just in case.
*/
_nc_set_screen(sp);
sp->_term = cur_term;
#ifdef USE_TERM_DRIVER
TCBOf(sp)->csp = sp;
_nc_get_screensize(sp, sp->_term, &slines, &scolumns);
#else
_nc_get_screensize(sp, &slines, &scolumns);
#endif
SET_LINES(slines);
SET_COLS(scolumns);
T((T_CREATE("screen %s %dx%d"),
NCURSES_SP_NAME(termname) (NCURSES_SP_ARG), slines, scolumns));
sp->_filtered = filtered;
/* implement filter mode */
if (filtered) {
slines = 1;
SET_LINES(slines);
#ifdef USE_TERM_DRIVER
CallDriver(sp, td_setfilter);
#else
/* *INDENT-EQLS* */
clear_screen = ABSENT_STRING;
cursor_address = ABSENT_STRING;
cursor_down = ABSENT_STRING;
cursor_up = ABSENT_STRING;
parm_down_cursor = ABSENT_STRING;
parm_up_cursor = ABSENT_STRING;
row_address = ABSENT_STRING;
cursor_home = carriage_return;
if (back_color_erase)
clr_eos = ABSENT_STRING;
#endif
T(("filter screensize %dx%d", slines, scolumns));
}
#ifdef __DJGPP__
T(("setting output mode to binary"));
fflush(output);
setmode(output, O_BINARY);
+#endif
+#if defined(EXP_WIN32_DRIVER)
+ T(("setting output mode to binary"));
+ fflush(output);
+ _setmode(fileno(output), _O_BINARY);
#endif
NCURSES_SP_NAME(_nc_set_buffer) (NCURSES_SP_ARGx output, TRUE);
sp->_lines = (NCURSES_SIZE_T) slines;
sp->_lines_avail = (NCURSES_SIZE_T) slines;
sp->_columns = (NCURSES_SIZE_T) scolumns;
fflush(output);
sp->_ofd = output ? fileno(output) : -1;
sp->_ofp = output;
+#if defined(EXP_WIN32_DRIVER)
+ if (output)
+ _setmode(fileno(output), _O_BINARY);
+#endif
sp->out_limit = (size_t) ((2 + slines) * (6 + scolumns));
if ((sp->out_buffer = malloc(sp->out_limit)) == 0)
sp->out_limit = 0;
sp->out_inuse = 0;
SP_PRE_INIT(sp);
SetNoPadding(sp);
#if NCURSES_EXT_FUNCS
sp->_default_color = FALSE;
sp->_has_sgr_39_49 = FALSE;
/*
* Set our assumption of the terminal's default foreground and background
* colors. The curs_color man-page states that we can assume that the
* background is black. The origin of this assumption appears to be
* terminals that displayed colored text, but no colored backgrounds, e.g.,
* the first colored terminals around 1980. More recent ones with better
* technology can display not only colored backgrounds, but all
* combinations. So a terminal might be something other than "white" on
* black (green/black looks monochrome too), but black on white or even
* on ivory.
*
* White-on-black is the simplest thing to use for monochrome. Almost
* all applications that use color paint both text and background, so
* the distinction is moot. But a few do not - which is why we leave this
* configurable (a better solution is to use assume_default_colors() for
* the rare applications that do require that sort of appearance, since
* is appears that more users expect to be able to make a white-on-black
* or black-on-white display under control of the application than not).
*/
#ifdef USE_ASSUMED_COLOR
sp->_default_fg = COLOR_WHITE;
sp->_default_bg = COLOR_BLACK;
#else
sp->_default_fg = COLOR_DEFAULT;
sp->_default_bg = COLOR_DEFAULT;
#endif
/*
* Allow those assumed/default color assumptions to be overridden at
* runtime:
*/
if ((env = getenv("NCURSES_ASSUMED_COLORS")) != 0) {
int fg, bg;
char sep1, sep2;
int count = sscanf(env, "%d%c%d%c", &fg, &sep1, &bg, &sep2);
if (count >= 1) {
sp->_default_fg = ((fg >= 0 && fg < MaxColors) ? fg : COLOR_DEFAULT);
if (count >= 3) {
sp->_default_bg = ((bg >= 0 && bg < MaxColors) ? bg : COLOR_DEFAULT);
}
TR(TRACE_CHARPUT | TRACE_MOVE,
("from environment assumed fg=%d, bg=%d",
sp->_default_fg,
sp->_default_bg));
}
}
#if USE_COLORFGBG
/*
* If rxvt's $COLORFGBG variable is set, use it to specify the assumed
* default colors. Note that rxvt (mis)uses bold colors, equating a bold
* color to that value plus 8. We'll only use the non-bold color for now -
* decide later if it is worth having default attributes as well.
*/
if (getenv("COLORFGBG") != 0) {
const char *p = getenv("COLORFGBG");
TR(TRACE_CHARPUT | TRACE_MOVE, ("decoding COLORFGBG %s", p));
p = extract_fgbg(p, &(sp->_default_fg));
p = extract_fgbg(p, &(sp->_default_bg));
if (*p) /* assume rxvt was compiled with xpm support */
p = extract_fgbg(p, &(sp->_default_bg));
TR(TRACE_CHARPUT | TRACE_MOVE, ("decoded fg=%d, bg=%d",
sp->_default_fg, sp->_default_bg));
if (sp->_default_fg >= MaxColors) {
if (set_a_foreground != ABSENT_STRING
&& !strcmp(set_a_foreground, "\033[3%p1%dm")) {
set_a_foreground = strdup("\033[3%?%p1%{8}%>%t9%e%p1%d%;m");
} else {
sp->_default_fg %= MaxColors;
}
}
if (sp->_default_bg >= MaxColors) {
if (set_a_background != ABSENT_STRING
&& !strcmp(set_a_background, "\033[4%p1%dm")) {
set_a_background = strdup("\033[4%?%p1%{8}%>%t9%e%p1%d%;m");
} else {
sp->_default_bg %= MaxColors;
}
}
}
#endif
#endif /* NCURSES_EXT_FUNCS */
sp->_maxclick = DEFAULT_MAXCLICK;
sp->_mouse_event = no_mouse_event;
sp->_mouse_inline = no_mouse_inline;
sp->_mouse_parse = no_mouse_parse;
sp->_mouse_resume = no_mouse_resume;
sp->_mouse_wrap = no_mouse_wrap;
sp->_mouse_fd = -1;
/*
* If we've no magic cookie support, we suppress attributes that xmc would
* affect, i.e., the attributes that affect the rendition of a space.
*/
sp->_ok_attributes = NCURSES_SP_NAME(termattrs) (NCURSES_SP_ARG);
if (NCURSES_SP_NAME(has_colors) (NCURSES_SP_ARG)) {
sp->_ok_attributes |= A_COLOR;
}
#ifdef USE_TERM_DRIVER
_nc_cookie_init(sp);
#else
#if USE_XMC_SUPPORT
/*
* If we have no magic-cookie support compiled-in, or if it is suppressed
* in the environment, reset the support-flag.
*/
if (magic_cookie_glitch >= 0) {
if (getenv("NCURSES_NO_MAGIC_COOKIE") != 0) {
support_cookies = FALSE;
}
}
#endif
if (!support_cookies && magic_cookie_glitch >= 0) {
T(("will disable attributes to work w/o magic cookies"));
}
if (magic_cookie_glitch > 0) { /* tvi, wyse */
sp->_xmc_triggers = sp->_ok_attributes & XMC_CONFLICT;
#if 0
/*
* We "should" treat colors as an attribute. The wyse350 (and its
* clones) appear to be the only ones that have both colors and magic
* cookies.
*/
if (has_colors()) {
sp->_xmc_triggers |= A_COLOR;
}
#endif
sp->_xmc_suppress = sp->_xmc_triggers & (chtype) ~(A_BOLD);
T(("magic cookie attributes %s", _traceattr(sp->_xmc_suppress)));
/*
* Supporting line-drawing may be possible. But make the regular
* video attributes work first.
*/
acs_chars = ABSENT_STRING;
ena_acs = ABSENT_STRING;
enter_alt_charset_mode = ABSENT_STRING;
exit_alt_charset_mode = ABSENT_STRING;
#if USE_XMC_SUPPORT
/*
* To keep the cookie support simple, suppress all of the optimization
* hooks except for clear_screen and the cursor addressing.
*/
if (support_cookies) {
clr_eol = ABSENT_STRING;
clr_eos = ABSENT_STRING;
set_attributes = ABSENT_STRING;
}
#endif
} else if (magic_cookie_glitch == 0) { /* hpterm */
}
/*
* If magic cookies are not supported, cancel the strings that set
* video attributes.
*/
if (!support_cookies && magic_cookie_glitch >= 0) {
magic_cookie_glitch = ABSENT_NUMERIC;
set_attributes = ABSENT_STRING;
enter_blink_mode = ABSENT_STRING;
enter_bold_mode = ABSENT_STRING;
enter_dim_mode = ABSENT_STRING;
enter_reverse_mode = ABSENT_STRING;
enter_standout_mode = ABSENT_STRING;
enter_underline_mode = ABSENT_STRING;
}
/* initialize normal acs before wide, since we use mapping in the latter */
#if !USE_WIDEC_SUPPORT
if (_nc_unicode_locale() && _nc_locale_breaks_acs(sp->_term)) {
acs_chars = NULL;
ena_acs = NULL;
enter_alt_charset_mode = NULL;
exit_alt_charset_mode = NULL;
set_attributes = NULL;
}
#endif
#endif
NCURSES_SP_NAME(_nc_init_acs) (NCURSES_SP_ARG);
#if USE_WIDEC_SUPPORT
sp->_screen_unicode = _nc_unicode_locale();
if (_nc_wacs == 0) {
_nc_init_wacs();
}
if (_nc_wacs == 0) {
ReturnScreenError();
}
sp->_screen_acs_fix = (sp->_screen_unicode
&& _nc_locale_breaks_acs(sp->_term));
#endif
env = _nc_get_locale();
sp->_legacy_coding = ((env == 0)
|| !strcmp(env, "C")
|| !strcmp(env, "POSIX"));
T(("legacy-coding %d", sp->_legacy_coding));
sp->_nc_sp_idcok = TRUE;
sp->_nc_sp_idlok = FALSE;
sp->oldhash = 0;
sp->newhash = 0;
T(("creating newscr"));
NewScreen(sp) = NCURSES_SP_NAME(newwin) (NCURSES_SP_ARGx slines, scolumns,
0, 0);
if (NewScreen(sp) == 0) {
ReturnScreenError();
}
T(("creating curscr"));
CurScreen(sp) = NCURSES_SP_NAME(newwin) (NCURSES_SP_ARGx slines, scolumns,
0, 0);
if (CurScreen(sp) == 0) {
ReturnScreenError();
}
#if !USE_REENTRANT
newscr = NewScreen(sp);
curscr = CurScreen(sp);
#endif
#if USE_SIZECHANGE
sp->_resize = NCURSES_SP_NAME(resizeterm);
sp->_ungetch = safe_ungetch;
#endif
NewScreen(sp)->_clear = TRUE;
CurScreen(sp)->_clear = FALSE;
/*
* Get the current tty-modes. setupterm() may already have done this,
* unless we use the term-driver.
*/
#ifndef USE_TERM_DRIVER
if (cur_term != 0 &&
!memcmp(&cur_term->Ottyb, &null_TTY, sizeof(TTY)))
#endif
{
NCURSES_SP_NAME(def_shell_mode) (NCURSES_SP_ARG);
NCURSES_SP_NAME(def_prog_mode) (NCURSES_SP_ARG);
}
if (safe_ripoff_sp && safe_ripoff_sp != safe_ripoff_stack) {
ripoff_t *rop;
for (rop = safe_ripoff_stack;
rop != safe_ripoff_sp && (rop - safe_ripoff_stack) < N_RIPS;
rop++) {
/* If we must simulate soft labels, grab off the line to be used.
We assume that we must simulate, if it is none of the standard
formats (4-4 or 3-2-3) for which there may be some hardware
support. */
if (rop->hook == _nc_slk_initialize) {
if (!(NumLabels <= 0 || !SLK_STDFMT(slk_format))) {
continue;
}
}
if (rop->hook) {
int count;
WINDOW *w;
count = (rop->line < 0) ? -rop->line : rop->line;
T(("ripping off %i lines at %s", count,
((rop->line < 0)
? "bottom"
: "top")));
w = NCURSES_SP_NAME(newwin) (NCURSES_SP_ARGx
count, scolumns,
((rop->line < 0)
? sp->_lines_avail - count
: 0),
0);
if (w) {
rop->win = w;
rop->hook(w, scolumns);
} else {
ReturnScreenError();
}
if (rop->line < 0) {
bottom_stolen += count;
} else {
sp->_topstolen = (NCURSES_SIZE_T) (sp->_topstolen + count);
}
sp->_lines_avail = (NCURSES_SIZE_T) (sp->_lines_avail - count);
}
}
/* reset the stack */
safe_ripoff_sp = safe_ripoff_stack;
}
T(("creating stdscr"));
assert((sp->_lines_avail + sp->_topstolen + bottom_stolen) == slines);
if ((StdScreen(sp) = NCURSES_SP_NAME(newwin) (NCURSES_SP_ARGx
sp->_lines_avail,
scolumns, 0, 0)) == 0) {
ReturnScreenError();
}
SET_LINES(sp->_lines_avail);
#if !USE_REENTRANT
stdscr = StdScreen(sp);
#endif
sp->_prescreen = FALSE;
returnCode(OK);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
_nc_setupscreen(int slines GCC_UNUSED,
int scolumns GCC_UNUSED,
FILE *output,
int filtered,
int slk_format)
{
SCREEN *sp = 0;
int rc = NCURSES_SP_NAME(_nc_setupscreen) (&sp,
slines,
scolumns,
output,
filtered,
slk_format);
if (rc != OK)
_nc_set_screen(0);
return rc;
}
#endif
/*
* The internal implementation interprets line as the number of lines to rip
* off from the top or bottom.
*/
NCURSES_EXPORT(int)
NCURSES_SP_NAME(_nc_ripoffline) (NCURSES_SP_DCLx
int line,
int (*init) (WINDOW *, int))
{
int code = ERR;
TR_FUNC_BFR(1);
START_TRACE();
T((T_CALLED("ripoffline(%p,%d,%s)"),
(void *) SP_PARM, line,
TR_FUNC_ARG(0, init)));
#if NCURSES_SP_FUNCS
if (SP_PARM != 0 && SP_PARM->_prescreen)
#endif
{
if (line == 0) {
code = OK;
} else {
if (safe_ripoff_sp == 0) {
safe_ripoff_sp = safe_ripoff_stack;
}
if (safe_ripoff_sp < safe_ripoff_stack + N_RIPS) {
safe_ripoff_sp->line = line;
safe_ripoff_sp->hook = init;
(safe_ripoff_sp)++;
T(("ripped-off %d:%d chunks",
(int) (safe_ripoff_sp - safe_ripoff_stack), N_RIPS));
code = OK;
}
}
}
returnCode(code);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
_nc_ripoffline(int line, int (*init) (WINDOW *, int))
{
int rc;
_nc_lock_global(prescreen);
START_TRACE();
rc = NCURSES_SP_NAME(_nc_ripoffline) (CURRENT_SCREEN_PRE, line, init);
_nc_unlock_global(prescreen);
return rc;
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(ripoffline) (NCURSES_SP_DCLx
int line,
int (*init) (WINDOW *, int))
{
START_TRACE();
return NCURSES_SP_NAME(_nc_ripoffline) (NCURSES_SP_ARGx
(line < 0) ? -1 : 1,
init);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
ripoffline(int line, int (*init) (WINDOW *, int))
{
int rc;
_nc_lock_global(prescreen);
START_TRACE();
rc = NCURSES_SP_NAME(ripoffline) (CURRENT_SCREEN_PRE, line, init);
_nc_unlock_global(prescreen);
return rc;
}
#endif
diff --git a/contrib/ncurses/ncurses/base/new_pair.c b/contrib/ncurses/ncurses/base/new_pair.c
index 547ab2818066..c04f4acbb95d 100644
--- a/contrib/ncurses/ncurses/base/new_pair.c
+++ b/contrib/ncurses/ncurses/base/new_pair.c
@@ -1,386 +1,393 @@
/****************************************************************************
- * Copyright 2018-2019,2020 Thomas E. Dickey *
+ * Copyright 2018-2020,2021 Thomas E. Dickey *
* Copyright 2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey *
****************************************************************************/
/* new_pair.c
*
* New color-pair functions, alloc_pair and free_pair
*/
#define NEW_PAIR_INTERNAL 1
#include <curses.priv.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
#ifdef USE_TERM_DRIVER
#define MaxColors InfoOf(SP_PARM).maxcolors
#else
#define MaxColors max_colors
#endif
#if NCURSES_EXT_COLORS
/* fix redefinition versys tic.h */
#undef entry
#define entry my_entry
#undef ENTRY
#define ENTRY my_ENTRY
#include <search.h>
#endif
-MODULE_ID("$Id: new_pair.c,v 1.19 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: new_pair.c,v 1.21 2021/02/14 00:17:09 tom Exp $")
#if NCURSES_EXT_COLORS
#ifdef NEW_PAIR_DEBUG
static int
prev_len(SCREEN *sp, int pair)
{
int result = 1;
int base = pair;
colorpair_t *list = sp->_color_pairs;
while (list[pair].prev != base) {
result++;
pair = list[pair].prev;
}
return result;
}
static int
next_len(SCREEN *sp, int pair)
{
int result = 1;
int base = pair;
colorpair_t *list = sp->_color_pairs;
while (list[pair].next != base) {
result++;
pair = list[pair].next;
}
return result;
}
/*
* Trace the contents of LRU color-pairs.
*/
static void
dumpit(SCREEN *sp, int pair, const char *tag)
{
colorpair_t *list = sp->_color_pairs;
char bigbuf[256 * 20];
char *p = bigbuf;
int n;
size_t have = sizeof(bigbuf);
_nc_STRCPY(p, tag, have);
for (n = 0; n < sp->_pair_limit; ++n) {
if (list[n].mode != cpFREE) {
p += strlen(p);
if ((size_t) (p - bigbuf) + 50 > have)
break;
_nc_SPRINTF(p, _nc_SLIMIT(have - (p - bigbuf))
" %d%c(%d,%d)",
n, n == pair ? '@' : ':', list[n].next, list[n].prev);
}
}
T(("(%d/%d) %ld - %s",
next_len(sp, 0),
prev_len(sp, 0),
strlen(bigbuf), bigbuf));
if (next_len(sp, 0) != prev_len(sp, 0)) {
endwin();
ExitProgram(EXIT_FAILURE);
}
}
#else
#define dumpit(sp, pair, tag) /* nothing */
#endif
static int
compare_data(const void *a, const void *b)
{
const colorpair_t *p = (const colorpair_t *) a;
const colorpair_t *q = (const colorpair_t *) b;
return ((p->fg == q->fg)
? (p->bg - q->bg)
: (p->fg - q->fg));
}
static int
_nc_find_color_pair(SCREEN *sp, int fg, int bg)
{
colorpair_t find;
- int result;
- void *pp;
+ int result = -1;
find.fg = fg;
find.bg = bg;
- if (sp != 0 &&
- (pp = tfind(&find, &sp->_ordered_pairs, compare_data)) != 0) {
- colorpair_t *temp = *(colorpair_t **) pp;
- result = (int) (temp - sp->_color_pairs);
- } else {
- result = -1;
+ if (sp != 0) {
+ void *pp;
+ if ((pp = tfind(&find, &sp->_ordered_pairs, compare_data)) != 0) {
+ colorpair_t *temp = *(colorpair_t **) pp;
+ result = (int) (temp - sp->_color_pairs);
+ }
}
return result;
}
static void
delink_color_pair(SCREEN *sp, int pair)
{
colorpair_t *list = sp->_color_pairs;
int prev = list[pair].prev;
int next = list[pair].next;
/* delink this from its current location */
if (list[prev].next == pair &&
list[next].prev == pair) {
list[prev].next = next;
list[next].prev = prev;
dumpit(sp, pair, "delinked");
}
}
/*
* Discard all nodes in the fast-index.
*/
NCURSES_EXPORT(void)
_nc_free_ordered_pairs(SCREEN *sp)
{
if (sp && sp->_ordered_pairs && sp->_pair_alloc) {
int n;
for (n = 0; n < sp->_pair_alloc; ++n) {
tdelete(&sp->_color_pairs[n], &sp->_ordered_pairs, compare_data);
}
}
}
/*
* Use this call to update the fast-index when modifying an entry in the color
* pair table.
*/
NCURSES_EXPORT(void)
_nc_reset_color_pair(SCREEN *sp, int pair, colorpair_t * next)
{
colorpair_t *last;
+
if (ValidPair(sp, pair)) {
+ bool used;
+
ReservePairs(sp, pair);
last = &(sp->_color_pairs[pair]);
delink_color_pair(sp, pair);
if (last->mode > cpFREE &&
(last->fg != next->fg || last->bg != next->bg)) {
/* remove the old entry from fast index */
tdelete(last, &sp->_ordered_pairs, compare_data);
+ used = FALSE;
+ } else {
+ used = (last->mode != cpFREE);
+ }
+ if (!used) {
/* create a new entry in fast index */
*last = *next;
tsearch(last, &sp->_ordered_pairs, compare_data);
}
}
}
/*
* Use this call to relink the newest pair to the front of the list, keeping
* "0" first.
*/
NCURSES_EXPORT(void)
_nc_set_color_pair(SCREEN *sp, int pair, int mode)
{
if (ValidPair(sp, pair)) {
colorpair_t *list = sp->_color_pairs;
dumpit(sp, pair, "SET_PAIR");
list[0].mode = cpKEEP;
if (list[pair].mode <= cpFREE)
sp->_pairs_used++;
list[pair].mode = mode;
if (list[0].next != pair) {
/* link it at the front of the list */
list[pair].next = list[0].next;
list[list[pair].next].prev = pair;
list[pair].prev = 0;
list[0].next = pair;
}
dumpit(sp, pair, "...after");
}
}
/*
* If we reallocate the color-pair array, we have to adjust the fast-index.
*/
NCURSES_EXPORT(void)
_nc_copy_pairs(SCREEN *sp, colorpair_t * target, colorpair_t * source, int length)
{
int n;
for (n = 0; n < length; ++n) {
void *find = tfind(source + n, &sp->_ordered_pairs, compare_data);
if (find != 0) {
tdelete(source + n, &sp->_ordered_pairs, compare_data);
tsearch(target + n, &sp->_ordered_pairs, compare_data);
}
}
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(alloc_pair) (NCURSES_SP_DCLx int fg, int bg)
{
int pair;
T((T_CALLED("alloc_pair(%d,%d)"), fg, bg));
if (SP_PARM == 0) {
pair = -1;
} else if ((pair = _nc_find_color_pair(SP_PARM, fg, bg)) < 0) {
/*
* Check if all of the slots have been used. If not, find one and
* use that.
*/
if (SP_PARM->_pairs_used + 1 < SP_PARM->_pair_limit) {
bool found = FALSE;
int hint = SP_PARM->_recent_pair;
/*
* The linear search is done to allow mixing calls to init_pair()
* and alloc_pair(). The former can make gaps...
*/
for (pair = hint + 1; pair < SP_PARM->_pair_alloc; pair++) {
if (SP_PARM->_color_pairs[pair].mode == cpFREE) {
T(("found gap %d", pair));
found = TRUE;
break;
}
}
if (!found && (SP_PARM->_pair_alloc < SP_PARM->_pair_limit)) {
pair = SP_PARM->_pair_alloc;
ReservePairs(SP_PARM, pair);
if (SP_PARM->_color_pairs == 0) {
pair = -1;
} else {
found = TRUE;
}
}
if (!found) {
for (pair = 1; pair <= hint; pair++) {
if (SP_PARM->_color_pairs[pair].mode == cpFREE) {
T(("found gap %d", pair));
found = TRUE;
break;
}
}
}
if (found) {
SP_PARM->_recent_pair = pair;
} else {
pair = ERR;
}
} else {
/* reuse the oldest one */
pair = SP_PARM->_color_pairs[0].prev;
T(("reusing %d", pair));
}
if (_nc_init_pair(SP_PARM, pair, fg, bg) == ERR)
pair = ERR;
}
returnCode(pair);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(find_pair) (NCURSES_SP_DCLx int fg, int bg)
{
int pair;
T((T_CALLED("find_pair(%d,%d)"), fg, bg));
pair = _nc_find_color_pair(SP_PARM, fg, bg);
returnCode(pair);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(free_pair) (NCURSES_SP_DCLx int pair)
{
int result = ERR;
T((T_CALLED("free_pair(%d)"), pair));
if (ValidPair(SP_PARM, pair) && pair < SP_PARM->_pair_alloc) {
colorpair_t *cp = &(SP_PARM->_color_pairs[pair]);
if (pair != 0) {
_nc_change_pair(SP_PARM, pair);
delink_color_pair(SP_PARM, pair);
tdelete(cp, &SP_PARM->_ordered_pairs, compare_data);
cp->mode = cpFREE;
result = OK;
SP_PARM->_pairs_used--;
}
}
returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
alloc_pair(int f, int b)
{
return NCURSES_SP_NAME(alloc_pair) (CURRENT_SCREEN, f, b);
}
NCURSES_EXPORT(int)
find_pair(int f, int b)
{
return NCURSES_SP_NAME(find_pair) (CURRENT_SCREEN, f, b);
}
NCURSES_EXPORT(int)
free_pair(int pair)
{
return NCURSES_SP_NAME(free_pair) (CURRENT_SCREEN, pair);
}
#endif
#if NO_LEAKS
NCURSES_EXPORT(void)
_nc_new_pair_leaks(SCREEN *sp)
{
if (sp->_color_pairs) {
while (sp->_color_pairs[0].next) {
free_pair(sp->_color_pairs[0].next);
}
}
}
#endif
#else
void _nc_new_pair(void);
void
_nc_new_pair(void)
{
}
#endif /* NCURSES_EXT_COLORS */
diff --git a/contrib/ncurses/ncurses/base/wresize.c b/contrib/ncurses/ncurses/base/wresize.c
index 93276ef5c42b..30718b8878fd 100644
--- a/contrib/ncurses/ncurses/base/wresize.c
+++ b/contrib/ncurses/ncurses/base/wresize.c
@@ -1,269 +1,277 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 1998-2010,2011 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer *
****************************************************************************/
#include <curses.priv.h>
-MODULE_ID("$Id: wresize.c,v 1.39 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: wresize.c,v 1.41 2020/04/18 21:01:00 tom Exp $")
static int
cleanup_lines(struct ldat *data, int length)
{
while (--length >= 0)
FreeAndNull(data[length].text);
free(data);
return ERR;
}
/*
* If we have reallocated the ldat structs, we will have to repair pointers
* used in subwindows.
*/
static void
repair_subwindows(WINDOW *cmp)
{
WINDOWLIST *wp;
struct ldat *pline = cmp->_line;
int row;
#ifdef USE_SP_WINDOWLIST
SCREEN *sp = _nc_screen_of(cmp);
#endif
_nc_lock_global(curses);
for (each_window(SP_PARM, wp)) {
WINDOW *tst = &(wp->win);
if (tst->_parent == cmp) {
#define REPAIR1(field, limit) \
if (tst->field > cmp->limit) \
tst->field = cmp->limit
REPAIR1(_pary, _maxy);
REPAIR1(_parx, _maxx);
#define REPAIR2(field, limit) \
if (tst->limit + tst->field > cmp->limit) \
tst->limit = (NCURSES_SIZE_T) (cmp->limit - tst->field)
REPAIR2(_pary, _maxy);
REPAIR2(_parx, _maxx);
#define REPAIR3(field, limit) \
if (tst->field > tst->limit) \
tst->field = tst->limit
REPAIR3(_cury, _maxy);
REPAIR3(_curx, _maxx);
REPAIR3(_regtop, _maxy);
REPAIR3(_regbottom, _maxy);
for (row = 0; row <= tst->_maxy; ++row) {
tst->_line[row].text = &pline[tst->_pary + row].text[tst->_parx];
}
repair_subwindows(tst);
}
}
_nc_unlock_global(curses);
}
/*
* Reallocate a curses WINDOW struct to either shrink or grow to the specified
* new lines/columns. If it grows, the new character cells are filled with
* blanks. The application is responsible for repainting the blank area.
*/
NCURSES_EXPORT(int)
wresize(WINDOW *win, int ToLines, int ToCols)
{
int col, row, size_x, size_y;
struct ldat *pline;
struct ldat *new_lines = 0;
#ifdef TRACE
T((T_CALLED("wresize(%p,%d,%d)"), (void *) win, ToLines, ToCols));
if (win) {
TR(TRACE_UPDATE, ("...beg (%ld, %ld), max(%ld,%ld), reg(%ld,%ld)",
(long) win->_begy, (long) win->_begx,
(long) win->_maxy, (long) win->_maxx,
(long) win->_regtop, (long) win->_regbottom));
if (USE_TRACEF(TRACE_UPDATE)) {
_tracedump("...before", win);
_nc_unlock_global(tracef);
}
}
#endif
if (!win || --ToLines < 0 || --ToCols < 0)
returnCode(ERR);
size_x = win->_maxx;
size_y = win->_maxy;
if (ToLines == size_y
&& ToCols == size_x)
returnCode(OK);
if ((win->_flags & _SUBWIN)) {
/*
* Check if the new limits will fit into the parent window's size. If
* not, do not resize. We could adjust the location of the subwindow,
* but the application may not like that.
*/
if (win->_pary + ToLines > win->_parent->_maxy
|| win->_parx + ToCols > win->_parent->_maxx) {
returnCode(ERR);
}
pline = win->_parent->_line;
} else {
pline = 0;
}
/*
* Allocate new memory as needed. Do the allocations without modifying
* the original window, in case an allocation fails. Always allocate
* (at least temporarily) the array pointing to the individual lines.
*/
new_lines = typeCalloc(struct ldat, (unsigned) (ToLines + 1));
if (new_lines == 0)
returnCode(ERR);
/*
* For each line in the target, allocate or adjust pointers for the
* corresponding text, depending on whether this is a window or a
* subwindow.
*/
for (row = 0; row <= ToLines; ++row) {
int begin = (row > size_y) ? 0 : (size_x + 1);
int end = ToCols;
NCURSES_CH_T *s;
if (!(win->_flags & _SUBWIN)) {
if (row <= size_y) {
if (ToCols != size_x) {
s = typeMalloc(NCURSES_CH_T, (unsigned) ToCols + 1);
if (s == 0)
returnCode(cleanup_lines(new_lines, row));
for (col = 0; col <= ToCols; ++col) {
- s[col] = (col <= size_x
+ bool valid = (col <= size_x);
+ if_WIDEC({
+ if (col == ToCols
+ && col < size_x
+ && isWidecBase(win->_line[row].text[col])) {
+ valid = FALSE;
+ }
+ });
+ s[col] = (valid
? win->_line[row].text[col]
: win->_nc_bkgd);
}
} else {
s = win->_line[row].text;
}
} else {
s = typeMalloc(NCURSES_CH_T, (unsigned) ToCols + 1);
if (s == 0)
returnCode(cleanup_lines(new_lines, row));
for (col = 0; col <= ToCols; ++col)
s[col] = win->_nc_bkgd;
}
} else if (pline != 0 && pline[win->_pary + row].text != 0) {
s = &pline[win->_pary + row].text[win->_parx];
} else {
s = 0;
}
if_USE_SCROLL_HINTS(new_lines[row].oldindex = row);
if (row <= size_y) {
new_lines[row].firstchar = win->_line[row].firstchar;
new_lines[row].lastchar = win->_line[row].lastchar;
}
if ((ToCols != size_x) || (row > size_y)) {
if (end >= begin) { /* growing */
if (new_lines[row].firstchar < begin)
new_lines[row].firstchar = (NCURSES_SIZE_T) begin;
} else { /* shrinking */
new_lines[row].firstchar = 0;
}
new_lines[row].lastchar = (NCURSES_SIZE_T) ToCols;
}
new_lines[row].text = s;
}
/*
* Dispose of unwanted memory.
*/
if (!(win->_flags & _SUBWIN)) {
if (ToCols == size_x) {
for (row = ToLines + 1; row <= size_y; row++) {
FreeAndNull(win->_line[row].text);
}
} else {
for (row = 0; row <= size_y; row++) {
FreeAndNull(win->_line[row].text);
}
}
}
FreeAndNull(win->_line);
win->_line = new_lines;
/*
* Finally, adjust the parameters showing screen size and cursor
* position:
*/
win->_maxx = (NCURSES_SIZE_T) ToCols;
win->_maxy = (NCURSES_SIZE_T) ToLines;
if (win->_regtop > win->_maxy)
win->_regtop = win->_maxy;
if (win->_regbottom > win->_maxy
|| win->_regbottom == size_y)
win->_regbottom = win->_maxy;
if (win->_curx > win->_maxx)
win->_curx = win->_maxx;
if (win->_cury > win->_maxy)
win->_cury = win->_maxy;
/*
* Check for subwindows of this one, and readjust pointers to our text,
* if needed.
*/
repair_subwindows(win);
#ifdef TRACE
TR(TRACE_UPDATE, ("...beg (%ld, %ld), max(%ld,%ld), reg(%ld,%ld)",
(long) win->_begy, (long) win->_begx,
(long) win->_maxy, (long) win->_maxx,
(long) win->_regtop, (long) win->_regbottom));
if (USE_TRACEF(TRACE_UPDATE)) {
_tracedump("...after:", win);
_nc_unlock_global(tracef);
}
#endif
returnCode(OK);
}
diff --git a/contrib/ncurses/ncurses/curses.priv.h b/contrib/ncurses/ncurses/curses.priv.h
index 2846791fbdd6..4243373f9a7a 100644
--- a/contrib/ncurses/ncurses/curses.priv.h
+++ b/contrib/ncurses/ncurses/curses.priv.h
@@ -1,2746 +1,2793 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2017,2018 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer *
****************************************************************************/
/*
- * $Id: curses.priv.h,v 1.628 2020/02/02 23:34:34 tom Exp $
+ * $Id: curses.priv.h,v 1.639 2020/11/14 23:37:54 tom Exp $
*
* curses.priv.h
*
* Header file for curses library objects which are private to
* the library.
*
*/
#ifndef CURSES_PRIV_H
#define CURSES_PRIV_H 1
/* *INDENT-OFF* */
#include <ncurses_dll.h>
#ifdef __cplusplus
extern "C" {
#endif
#include <ncurses_cfg.h>
#if USE_RCS_IDS
#define MODULE_ID(id) static const char Ident[] = id;
#else
#define MODULE_ID(id) /*nothing*/
#endif
#include <stddef.h> /* for offsetof */
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
-#if HAVE_SYS_BSDTYPES_H && !(defined(_WIN32) || defined(_WIN64))
-#include <sys/bsdtypes.h> /* needed for ISC */
-#endif
-
#if HAVE_LIMITS_H
# include <limits.h>
#elif HAVE_SYS_PARAM_H
# include <sys/param.h>
#endif
#include <assert.h>
#include <stdio.h>
#include <errno.h>
#if defined __hpux
# ifndef EILSEQ
# define EILSEQ 47
# endif
#endif
#ifndef PATH_MAX
# if defined(_POSIX_PATH_MAX)
# define PATH_MAX _POSIX_PATH_MAX
# elif defined(MAXPATHLEN)
# define PATH_MAX MAXPATHLEN
# else
# define PATH_MAX 255 /* the Posix minimum path-size */
# endif
#endif
#if DECL_ERRNO
extern int errno;
#endif
+/* Some Windows related defines */
+#undef _NC_WINDOWS
+#if (defined(_WIN32) || defined(_WIN64))
+#define _NC_WINDOWS
+#else
+#undef EXP_WIN32_DRIVER
+#endif
+
+#undef _NC_MINGW
+#if (defined(__MINGW32__) || defined(__MINGW64__))
+#define _NC_MINGW
+#endif
+
+#undef _NC_MSC
+#ifdef _MSC_VER
+#define _NC_MSC
+#endif
+
/* Some systems have a broken 'select()', but workable 'poll()'. Use that */
#if HAVE_WORKING_POLL
#define USE_FUNC_POLL 1
#if HAVE_POLL_H
#include <poll.h>
#else
#include <sys/poll.h>
#endif
#else
#define USE_FUNC_POLL 0
#endif
#if HAVE_INTTYPES_H
# include <inttypes.h>
#else
# if HAVE_STDINT_H
# include <stdint.h>
# endif
#endif
/* include signal.h before curses.h to work-around defect in glibc 2.1.3 */
#include <signal.h>
/* Alessandro Rubini's GPM (general-purpose mouse) */
#if HAVE_LIBGPM && HAVE_GPM_H
#define USE_GPM_SUPPORT 1
#else
#define USE_GPM_SUPPORT 0
#endif
/* QNX mouse support */
#if defined(__QNX__) && !defined(__QNXNTO__)
#define USE_QNX_MOUSE 1
#else
#define USE_QNX_MOUSE 0
#endif
/* EMX mouse support */
#ifdef __EMX__
#define USE_EMX_MOUSE 1
#else
#define USE_EMX_MOUSE 0
#endif
/* kLIBC keyboard/mouse support */
#if defined(__OS2__) && defined(__KLIBC__)
#define USE_KLIBC_KBD 1
#define USE_KLIBC_MOUSE 1
#else
#define USE_KLIBC_KBD 0
#define USE_KLIBC_MOUSE 0
#endif
#define DEFAULT_MAXCLICK 166
#define EV_MAX 8 /* size of mouse circular event queue */
/*
* If we don't have signals to support it, don't add a sigwinch handler.
* In any case, resizing is an extended feature. Use it if we've got it.
*/
#if !NCURSES_EXT_FUNCS
#undef HAVE_SIZECHANGE
#define HAVE_SIZECHANGE 0
#endif
#if HAVE_SIZECHANGE && USE_SIGWINCH && defined(SIGWINCH)
#define USE_SIZECHANGE 1
#else
#define USE_SIZECHANGE 0
#undef USE_SIGWINCH
#define USE_SIGWINCH 0
#endif
/*
* When building in the MSYS2 environment, the automatic discovery of
* the path separator in configure doesn't work properly. So, if building
* for MinGW, we enforce the correct Windows PATH separator
*/
-#ifdef _WIN32
+#if defined(_NC_WINDOWS)
# ifdef NCURSES_PATHSEP
# undef NCURSES_PATHSEP
# endif
# define NCURSES_PATHSEP ';'
#endif
/*
* If desired, one can configure this, disabling environment variables that
* point to custom terminfo/termcap locations.
*/
#ifdef USE_ROOT_ENVIRON
#define use_terminfo_vars() 1
#else
#define use_terminfo_vars() _nc_env_access()
extern NCURSES_EXPORT(int) _nc_env_access (void);
#endif
/*
* Not all platforms have memmove; some have an equivalent bcopy. (Some may
* have neither).
*/
#if USE_OK_BCOPY
#define memmove(d,s,n) bcopy(s,d,n)
#elif USE_MY_MEMMOVE
#define memmove(d,s,n) _nc_memmove(d,s,n)
extern NCURSES_EXPORT(void *) _nc_memmove (void *, const void *, size_t);
#endif
/*
* If we have va_copy(), use it for assigning va_list's.
*/
#if defined(HAVE___VA_COPY)
#define begin_va_copy(dst,src) __va_copy(dst, src)
#define end_va_copy(dst) va_end(dst)
#elif defined(va_copy) || defined(HAVE_VA_COPY)
#define begin_va_copy(dst,src) va_copy(dst, src)
#define end_va_copy(dst) va_end(dst)
#else
#define begin_va_copy(dst,src) (dst) = (src)
#define end_va_copy(dst) /* nothing */
#endif
/*
* Either/both S_ISxxx and/or S_IFxxx are defined in sys/types.h; some systems
* lack one or the other.
*/
#ifndef S_ISDIR
#define S_ISDIR(mode) ((mode & S_IFMT) == S_IFDIR)
#endif
#ifndef S_ISREG
#define S_ISREG(mode) ((mode & S_IFMT) == S_IFREG)
#endif
/*
* POSIX ignores the "b", which c89 specified. Some very old systems do not
* accept it.
*/
#if USE_FOPEN_BIN_R
#define BIN_R "rb"
#define BIN_W "wb"
#else
#define BIN_R "r"
#define BIN_W "w"
#endif
/*
* Scroll hints are useless when hashmap is used
*/
#if !USE_SCROLL_HINTS
#if !USE_HASHMAP
#define USE_SCROLL_HINTS 1
#else
#define USE_SCROLL_HINTS 0
#endif
#endif
#if USE_SCROLL_HINTS
#define if_USE_SCROLL_HINTS(stmt) stmt
#else
#define if_USE_SCROLL_HINTS(stmt) /*nothing*/
#endif
#include <nc_string.h>
/*
* Options for terminal drivers, etc...
*/
#ifdef USE_TERM_DRIVER
+#define NO_TERMINAL "unknown"
#define USE_SP_RIPOFF 1
#define USE_SP_TERMTYPE 1
#define USE_SP_WINDOWLIST 1
+#else
+#define NO_TERMINAL 0
#endif
+#define VALID_TERM_ENV(term_env, no_terminal) \
+ (term_env = (NonEmpty(term_env) \
+ ? term_env \
+ : no_terminal), \
+ NonEmpty(term_env))
+
/*
* Note: ht/cbt expansion flakes out randomly under Linux 1.1.47, but only
* when we're throwing control codes at the screen at high volume. To see
* this, re-enable USE_HARD_TABS and run worm for a while. Other systems
* probably don't want to define this either due to uncertainties about tab
* delays and expansion in raw mode.
*/
#define TRIES struct tries
typedef TRIES {
TRIES *child; /* ptr to child. NULL if none */
TRIES *sibling; /* ptr to sibling. NULL if none */
unsigned char ch; /* character at this node */
unsigned short value; /* code of string so far. 0 if none. */
#undef TRIES
} TRIES;
/*
* Common/troublesome character definitions
*/
#define StringOf(ch) {ch, 0}
#define L_BRACE '{'
#define R_BRACE '}'
#define S_QUOTE '\''
#define D_QUOTE '"'
#define VT_ACSC "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~"
/*
* Structure for palette tables
*/
#define MAXCOLUMNS 135
#define MAXLINES 66
#define FIFO_SIZE MAXCOLUMNS+2 /* for nocbreak mode input */
#define ACS_LEN 128
#define WINDOWLIST struct _win_list
#if USE_WIDEC_SUPPORT
#define _nc_bkgd _bkgrnd
#else
#undef _XOPEN_SOURCE_EXTENDED
#undef _XPG5
#define _nc_bkgd _bkgd
#define wgetbkgrnd(win, wch) ((*wch = win->_bkgd) != 0 ? OK : ERR)
#define wbkgrnd wbkgd
#endif
#undef NCURSES_OPAQUE
#define NCURSES_INTERNALS 1
#define NCURSES_OPAQUE 0
#include <curses.h> /* we'll use -Ipath directive to get the right one! */
+#if !(defined(NCURSES_WGETCH_EVENTS) && defined(NEED_KEY_EVENT))
+#undef KEY_EVENT /* reduce compiler-warnings with Visual C++ */
+#endif
+
typedef struct
{
int red, green, blue; /* what color_content() returns */
int r, g, b; /* params to init_color() */
int init; /* true if we called init_color() */
}
color_t;
typedef union {
struct {
unsigned char red;
unsigned char green;
unsigned char blue;
} bits; /* bits per color-value in RGB */
unsigned value;
} rgb_bits_t;
/*
* If curses.h did not expose the SCREEN-functions, then we do not need the
* parameter in the corresponding unextended functions.
*/
#define USE_SP_FUNC_SUPPORT NCURSES_SP_FUNCS
#define USE_EXT_SP_FUNC_SUPPORT (NCURSES_SP_FUNCS && NCURSES_EXT_FUNCS)
#if NCURSES_SP_FUNCS
#define SP_PARM sp /* use parameter */
#define NCURSES_SP_ARG SP_PARM
#define NCURSES_SP_DCL SCREEN *NCURSES_SP_ARG
#define NCURSES_SP_DCL0 NCURSES_SP_DCL
#define NCURSES_SP_ARGx NCURSES_SP_ARG,
#define NCURSES_SP_DCLx SCREEN *NCURSES_SP_ARGx
#else
#define SP_PARM SP /* use global variable */
#define NCURSES_SP_ARG
#define NCURSES_SP_DCL
#define NCURSES_SP_DCL0 void
#define NCURSES_SP_ARGx
#define NCURSES_SP_DCLx
#endif
#include <nc_panel.h>
#include <term.h>
#include <nc_termios.h>
#define IsPreScreen(sp) (((sp) != 0) && sp->_prescreen)
#define HasTerminal(sp) (((sp) != 0) && (0 != ((sp)->_term)))
#define IsValidScreen(sp) (HasTerminal(sp) && !IsPreScreen(sp))
#if USE_REENTRANT
#define CurTerm _nc_prescreen._cur_term
#else
#define CurTerm cur_term
#endif
#if NCURSES_SP_FUNCS
#define TerminalOf(sp) ((sp) ? ((sp)->_term ? (sp)->_term : CurTerm) : CurTerm)
#else
#define TerminalOf(sp) CurTerm
#endif
/*
* The legacy layout for TERMTYPE uses "short" for all of the numbers. Moving
* past that, numeric capabilities can be "int" by using a TERMTYPE2 structure
* in TERMINAL, and doing most of the internal work using TERMTYPE2. There are
* a few places (mostly to expose the legacy layout) where the distinction
* needs attention.
*/
#if NCURSES_EXT_COLORS && HAVE_INIT_EXTENDED_COLOR
#define NCURSES_EXT_NUMBERS 1
#define NCURSES_INT2 int
#define SIZEOF_INT2 4
#define TerminalType(tp) (tp)->type2
#else
#define NCURSES_EXT_NUMBERS 0
#define NCURSES_INT2 short
#define SIZEOF_INT2 2
#define TerminalType(tp) (tp)->type
#endif
#define SIZEOF_SHORT 2
#ifdef CUR
#undef CUR
#define CUR TerminalType(cur_term).
#endif
/*
* Reduce dependency on cur_term global by using terminfo data from SCREEN's
* pointer to this data.
*/
#ifdef USE_SP_TERMTYPE
#undef CUR
#endif
#define SP_TERMTYPE TerminalType(TerminalOf(sp)).
#include <term_entry.h>
#include <nc_tparm.h>
/*
* Simplify ifdef's for the "*_ATTR" macros in case italics are not configured.
*/
#if defined(A_ITALIC) && defined(exit_italics_mode)
#define USE_ITALIC 1
#else
#define USE_ITALIC 0
#undef A_ITALIC
#define A_ITALIC 0
#endif
/*
* Use these macros internally, to make tracing less verbose. But leave the
* option for compiling the tracing into the library.
*/
#if 1
#define ColorPair(n) (NCURSES_BITS(n, 0) & A_COLOR)
#define PairNumber(a) (NCURSES_CAST(int,(((unsigned long)(a) & A_COLOR) >> NCURSES_ATTR_SHIFT)))
#else
#define ColorPair(pair) COLOR_PAIR(pair)
#define PairNumber(attr) PAIR_NUMBER(attr)
#endif
#define unColor(n) unColor2(AttrOf(n))
#define unColor2(a) ((a) & ALL_BUT_COLOR)
/*
* Extended-colors stores the color pair in a separate struct-member than the
* attributes. But for compatibility, we handle most cases where a program
* written for non-extended colors stores the color in the attributes by
* checking for a color pair in both places.
*/
#if NCURSES_EXT_COLORS
#define if_EXT_COLORS(stmt) stmt
#define SetPair(value,p) SetPair2((value).ext_color, AttrOf(value), p)
#define SetPair2(c,a,p) c = (p), \
a = (unColor2(a) | ColorPair(oldColor(c)))
#define GetPair(value) GetPair2((value).ext_color, AttrOf(value))
#define GetPair2(c,a) ((c) ? (c) : PairNumber(a))
#define oldColor(p) (((p) > 255) ? 255 : (p))
#define GET_WINDOW_PAIR(w) GetPair2((w)->_color, (w)->_attrs)
#define SET_WINDOW_PAIR(w,p) (w)->_color = (p)
#define SameAttrOf(a,b) (AttrOf(a) == AttrOf(b) && GetPair(a) == GetPair(b))
#define VIDPUTS(sp,attr,pair) do { \
int vid_pair = pair; \
NCURSES_SP_NAME(vid_puts)( \
NCURSES_SP_ARGx attr, \
(NCURSES_PAIRS_T) pair, \
&vid_pair, \
NCURSES_OUTC_FUNC); \
} while (0)
#else /* !NCURSES_EXT_COLORS */
#define if_EXT_COLORS(stmt) /* nothing */
#define SetPair(value,p) RemAttr(value, A_COLOR), \
SetAttr(value, AttrOf(value) | ColorPair(p))
#define GetPair(value) PairNumber(AttrOf(value))
#define GET_WINDOW_PAIR(w) PairNumber(WINDOW_ATTRS(w))
#define SET_WINDOW_PAIR(w,p) WINDOW_ATTRS(w) &= ALL_BUT_COLOR, \
WINDOW_ATTRS(w) |= ColorPair(p)
#define SameAttrOf(a,b) (AttrOf(a) == AttrOf(b))
#define VIDPUTS(sp,attr,pair) NCURSES_SP_NAME(vidputs)(NCURSES_SP_ARGx attr, NCURSES_OUTC_FUNC)
#endif /* NCURSES_EXT_COLORS */
#define NCURSES_OUTC_FUNC NCURSES_SP_NAME(_nc_outch)
#define NCURSES_PUTP2(name,value) NCURSES_SP_NAME(_nc_putp)(NCURSES_SP_ARGx name, value)
#define NCURSES_PUTP2_FLUSH(name,value) NCURSES_SP_NAME(_nc_putp_flush)(NCURSES_SP_ARGx name, value)
#if NCURSES_NO_PADDING
#define GetNoPadding(sp) ((sp) ? (sp)->_no_padding : _nc_prescreen._no_padding)
#define SetNoPadding(sp) _nc_set_no_padding(sp)
extern NCURSES_EXPORT(void) _nc_set_no_padding(SCREEN *);
#else
#define GetNoPadding(sp) FALSE
#define SetNoPadding(sp) /*nothing*/
#endif
#define WINDOW_ATTRS(w) ((w)->_attrs)
#define SCREEN_ATTRS(s) (*((s)->_current_attr))
#define GET_SCREEN_PAIR(s) GetPair(SCREEN_ATTRS(s))
#define SET_SCREEN_PAIR(s,p) SetPair(SCREEN_ATTRS(s), p)
#if USE_REENTRANT || NCURSES_SP_FUNCS
NCURSES_EXPORT(int *) _nc_ptr_Lines (SCREEN *);
NCURSES_EXPORT(int *) _nc_ptr_Cols (SCREEN *);
NCURSES_EXPORT(int *) _nc_ptr_Tabsize (SCREEN *);
NCURSES_EXPORT(int *) _nc_ptr_Escdelay (SCREEN *);
#endif
#if USE_REENTRANT
#define ptrLines(sp) (sp ? &(sp->_LINES) : &(_nc_prescreen._LINES))
#define ptrCols(sp) (sp ? &(sp->_COLS) : &(_nc_prescreen._COLS))
#define ptrTabsize(sp) (sp ? &(sp->_TABSIZE) : &(_nc_prescreen._TABSIZE))
#define ptrEscdelay(sp) (sp ? &(sp->_ESCDELAY) : &(_nc_prescreen._ESCDELAY))
#define SET_LINES(value) *_nc_ptr_Lines(SP_PARM) = value
#define SET_COLS(value) *_nc_ptr_Cols(SP_PARM) = value
#define SET_TABSIZE(value) *_nc_ptr_Tabsize(SP_PARM) = value
#define SET_ESCDELAY(value) *_nc_ptr_Escdelay(SP_PARM) = value
#else
#define ptrLines(sp) &LINES
#define ptrCols(sp) &COLS
#define ptrTabsize(sp) &TABSIZE
#define ptrEscdelay(sp) &ESCDELAY
#define SET_LINES(value) LINES = value
#define SET_COLS(value) COLS = value
#define SET_TABSIZE(value) TABSIZE = value
#define SET_ESCDELAY(value) ESCDELAY = value
#endif
#define HasHardTabs() (NonEmpty(clear_all_tabs) && NonEmpty(set_tab))
#define TR_MUTEX(data) _tracef("%s@%d: me:%08lX COUNT:%2u/%2d/%6d/%2d/%s%9u: " #data, \
__FILE__, __LINE__, \
(unsigned long) (pthread_self()), \
data.__data.__lock, \
data.__data.__count, \
data.__data.__owner, \
data.__data.__kind, \
(data.__data.__nusers > 5) ? " OOPS " : "", \
data.__data.__nusers)
#define TR_GLOBAL_MUTEX(name) TR_MUTEX(_nc_globals.mutex_##name)
#if USE_WEAK_SYMBOLS
#if defined(__GNUC__)
# if defined __USE_ISOC99
# define _cat_pragma(exp) _Pragma(#exp)
# define _weak_pragma(exp) _cat_pragma(weak name)
# else
# define _weak_pragma(exp)
# endif
# define _declare(name) __extension__ extern __typeof__(name) name
# define weak_symbol(name) _weak_pragma(name) _declare(name) __attribute__((weak))
#else
# undef USE_WEAK_SYMBOLS
# define USE_WEAK_SYMBOLS 0
#endif
#endif
#ifdef USE_PTHREADS
#if USE_REENTRANT
#include <pthread.h>
extern NCURSES_EXPORT(void) _nc_init_pthreads(void);
extern NCURSES_EXPORT(void) _nc_mutex_init(pthread_mutex_t *);
extern NCURSES_EXPORT(int) _nc_mutex_lock(pthread_mutex_t *);
extern NCURSES_EXPORT(int) _nc_mutex_trylock(pthread_mutex_t *);
extern NCURSES_EXPORT(int) _nc_mutex_unlock(pthread_mutex_t *);
#define _nc_lock_global(name) _nc_mutex_lock(&_nc_globals.mutex_##name)
#define _nc_try_global(name) _nc_mutex_trylock(&_nc_globals.mutex_##name)
#define _nc_unlock_global(name) _nc_mutex_unlock(&_nc_globals.mutex_##name)
#else
#error POSIX threads requires --enable-reentrant option
#endif
#ifdef USE_PTHREADS
# if USE_WEAK_SYMBOLS
weak_symbol(pthread_sigmask);
weak_symbol(pthread_kill);
weak_symbol(pthread_self);
weak_symbol(pthread_equal);
weak_symbol(pthread_mutex_init);
weak_symbol(pthread_mutex_lock);
weak_symbol(pthread_mutex_unlock);
weak_symbol(pthread_mutex_trylock);
weak_symbol(pthread_mutexattr_settype);
weak_symbol(pthread_mutexattr_init);
extern NCURSES_EXPORT(int) _nc_sigprocmask(int, const sigset_t *, sigset_t *);
# undef sigprocmask
# define sigprocmask(a, b, c) _nc_sigprocmask(a, b, c)
# define GetThreadID() (((pthread_self)) ? pthread_self() : (pthread_t) getpid())
# else
# define GetThreadID() pthread_self()
# endif
#endif
#if HAVE_NANOSLEEP
#undef HAVE_NANOSLEEP
#define HAVE_NANOSLEEP 0 /* nanosleep suspends all threads */
#endif
#else /* !USE_PTHREADS */
#if USE_PTHREADS_EINTR
# if USE_WEAK_SYMBOLS
#include <pthread.h>
weak_symbol(pthread_sigmask);
weak_symbol(pthread_kill);
weak_symbol(pthread_self);
weak_symbol(pthread_equal);
extern NCURSES_EXPORT(int) _nc_sigprocmask(int, const sigset_t *, sigset_t *);
# undef sigprocmask
# define sigprocmask(a, b, c) _nc_sigprocmask(a, b, c)
# endif
#endif /* USE_PTHREADS_EINTR */
#define _nc_init_pthreads() /* nothing */
#define _nc_mutex_init(obj) /* nothing */
#define _nc_lock_global(name) /* nothing */
#define _nc_try_global(name) 0
#define _nc_unlock_global(name) /* nothing */
#endif /* USE_PTHREADS */
/*
* When using sp-funcs, locks are targeted to SCREEN-level granularity.
* So the locking is done in the non-sp-func (which calls the sp-func) rather
* than in the sp-func itself.
*
* Use the _nc_nonsp_XXX functions in the function using "NCURSES_SP_NAME()".
* Use the _nc_sp_XXX functions in the function using "#if NCURSES_SP_FUNCS".
*/
#if NCURSES_SP_FUNCS
#define _nc_nonsp_lock_global(name) /* nothing */
#define _nc_nonsp_try_global(name) 0
#define _nc_nonsp_unlock_global(name) /* nothing */
#define _nc_sp_lock_global(name) _nc_lock_global(name)
#define _nc_sp_try_global(name) _nc_try_global(name)
#define _nc_sp_unlock_global(name) _nc_unlock_global(name)
#else
#define _nc_nonsp_lock_global(name) _nc_lock_global(name)
#define _nc_nonsp_try_global(name) _nc_try_global(name)
#define _nc_nonsp_unlock_global(name) _nc_unlock_global(name)
#define _nc_sp_lock_global(name) /* nothing */
#define _nc_sp_try_global(name) 0
#define _nc_sp_unlock_global(name) /* nothing */
#endif
#if HAVE_GETTIMEOFDAY
# define PRECISE_GETTIME 1
# define TimeType struct timeval
#else
# define PRECISE_GETTIME 0
# define TimeType time_t
#endif
/*
* Definitions for color pairs
*/
#define MAX_OF_TYPE(t) (int)(((unsigned t)(~0))>>1)
#include <new_pair.h>
#define isDefaultColor(c) ((c) < 0)
#define COLOR_DEFAULT -1
#if defined(USE_BUILD_CC) || (defined(USE_TERMLIB) && !defined(NEED_NCURSES_CH_T))
#undef NCURSES_CH_T /* this is not a termlib feature */
#define NCURSES_CH_T void /* ...but we need a pointer in SCREEN */
#endif /* USE_TERMLIB */
#ifndef USE_TERMLIB
struct ldat
{
NCURSES_CH_T *text; /* text of the line */
NCURSES_SIZE_T firstchar; /* first changed character in the line */
NCURSES_SIZE_T lastchar; /* last changed character in the line */
NCURSES_SIZE_T oldindex; /* index of the line at last update */
};
#endif /* USE_TERMLIB */
typedef enum {
M_XTERM = -1 /* use xterm's mouse tracking? */
,M_NONE = 0 /* no mouse device */
#if USE_GPM_SUPPORT
,M_GPM /* use GPM */
#endif
#if USE_SYSMOUSE
,M_SYSMOUSE /* FreeBSD sysmouse on console */
#endif
#ifdef USE_TERM_DRIVER
,M_TERM_DRIVER /* Win32 console, etc */
#endif
} MouseType;
typedef enum {
MF_X10 = 0 /* conventional 3-byte format */
, MF_SGR1006 /* xterm private mode 1006, SGR-style */
#ifdef EXP_XTERM_1005
, MF_XTERM_1005 /* xterm UTF-8 private mode 1005 */
#endif
} MouseFormat;
/*
* Structures for scrolling.
*/
typedef struct {
unsigned long hashval;
int oldcount, newcount;
int oldindex, newindex;
} HASHMAP;
/*
* Structures for soft labels.
*/
struct _SLK;
#if !(defined(USE_TERMLIB) || defined(USE_BUILD_CC))
typedef struct
{
char *ent_text; /* text for the label */
char *form_text; /* formatted text (left/center/...) */
int ent_x; /* x coordinate of this field */
char dirty; /* this label has changed */
char visible; /* field is visible */
} slk_ent;
typedef struct _SLK {
bool dirty; /* all labels have changed */
bool hidden; /* soft labels are hidden */
WINDOW *win;
slk_ent *ent;
short maxlab; /* number of available labels */
short labcnt; /* number of allocated labels */
short maxlen; /* length of labels */
NCURSES_CH_T attr; /* soft label attribute */
} SLK;
#endif /* USE_TERMLIB */
typedef struct {
WINDOW *win; /* the window used in the hook */
int line; /* lines to take, < 0 => from bottom*/
int (*hook)(WINDOW *, int); /* callback for user */
} ripoff_t;
#if USE_GPM_SUPPORT
#undef buttons /* term.h defines this, and gpm uses it! */
#include <gpm.h>
#if USE_WEAK_SYMBOLS
weak_symbol(Gpm_Wgetch);
#endif
#ifdef HAVE_LIBDL
/* link dynamically to GPM */
typedef int *TYPE_gpm_fd;
typedef int (*TYPE_Gpm_Open) (Gpm_Connect *, int);
typedef int (*TYPE_Gpm_Close) (void);
typedef int (*TYPE_Gpm_GetEvent) (Gpm_Event *);
#define my_gpm_fd SP_PARM->_mouse_gpm_fd
#define my_Gpm_Open SP_PARM->_mouse_Gpm_Open
#define my_Gpm_Close SP_PARM->_mouse_Gpm_Close
#define my_Gpm_GetEvent SP_PARM->_mouse_Gpm_GetEvent
#else
/* link statically to GPM */
#define my_gpm_fd &gpm_fd
#define my_Gpm_Open Gpm_Open
#define my_Gpm_Close Gpm_Close
#define my_Gpm_GetEvent Gpm_GetEvent
#endif /* HAVE_LIBDL */
#endif /* USE_GPM_SUPPORT */
typedef struct {
long sequence;
bool last_used;
char *fix_sgr0; /* this holds the filtered sgr0 string */
char *last_bufp; /* help with fix_sgr0 leak */
TERMINAL *last_term;
} TGETENT_CACHE;
#define TGETENT_MAX 4
/*
* When converting from terminfo to termcap, check for cases where we can trim
* octal escapes down to 2-character form. It is useful for terminfo format
* also, but not as important.
*/
#define MAX_TC_FIXUPS 10
#define MIN_TC_FIXUPS 4
#define isoctal(c) ((c) >= '0' && (c) <= '7')
/*
* State of tparm().
*/
#define STACKSIZE 20
typedef struct {
union {
int num;
char *str;
} data;
bool num_type;
} STACK_FRAME;
#define NUM_VARS 26
typedef struct {
const char *tparam_base;
STACK_FRAME stack[STACKSIZE];
int stack_ptr;
char *out_buff;
size_t out_size;
size_t out_used;
char *fmt_buff;
size_t fmt_size;
int dynamic_var[NUM_VARS];
int static_vars[NUM_VARS];
#ifdef TRACE
const char *tname;
#endif
} TPARM_STATE;
typedef struct {
char *text;
size_t size;
} TRACEBUF;
/*
* The filesystem database normally uses a single-letter for the lower level
* of directories. Use a hexadecimal code for filesystems which do not
* preserve mixed-case names.
*/
#if MIXEDCASE_FILENAMES
#define LEAF_FMT "%c"
#define LEAF_LEN 1
#else
#define LEAF_FMT "%02x"
#define LEAF_LEN 2
#endif
/*
* TRACEMSE_FMT is no longer than 80 columns, there are 5 numbers that
* could at most have 10 digits, and the mask contains no more than 32 bits
* with each bit representing less than 15 characters. Usually the whole
* string is less than 80 columns, but this buffer size is an absolute
* limit.
*/
#define TRACEMSE_MAX (80 + (5 * 10) + (32 * 15))
#define TRACEMSE_FMT "id %2d at (%2d, %2d, %2d) state %4lx = {" /* } */
#ifdef USE_TERM_DRIVER
struct DriverTCB; /* Terminal Control Block forward declaration */
#define INIT_TERM_DRIVER() _nc_globals.term_driver = _nc_get_driver
#else
#define INIT_TERM_DRIVER() /* nothing */
#endif
typedef struct {
const char *name;
char *value;
} ITERATOR_VARS;
/*
* Global data which is not specific to a screen.
*/
typedef struct {
SIG_ATOMIC_T have_sigtstp;
SIG_ATOMIC_T have_sigwinch;
SIG_ATOMIC_T cleanup_nested;
bool init_signals;
bool init_screen;
char *comp_sourcename;
char *comp_termtype;
bool have_tic_directory;
bool keep_tic_directory;
const char *tic_directory;
char *dbi_list;
int dbi_size;
char *first_name;
char **keyname_table;
int init_keyname;
int slk_format;
int getstr_limit; /* getstr_limit based on POSIX LINE_MAX */
char *safeprint_buf;
size_t safeprint_used;
TGETENT_CACHE tgetent_cache[TGETENT_MAX];
int tgetent_index;
long tgetent_sequence;
char *dbd_blob; /* string-heap for dbd_list[] */
char **dbd_list; /* distinct places to look for data */
int dbd_size; /* length of dbd_list[] */
time_t dbd_time; /* cache last updated */
ITERATOR_VARS dbd_vars[dbdLAST];
+#if HAVE_TSEARCH
+ void *cached_tparm;
+ int count_tparm;
+#endif /* HAVE_TSEARCH */
+
#ifdef USE_TERM_DRIVER
int (*term_driver)(struct DriverTCB*, const char*, int*);
#endif
#ifndef USE_SP_WINDOWLIST
WINDOWLIST *_nc_windowlist;
#define WindowList(sp) _nc_globals._nc_windowlist
#endif
#if USE_HOME_TERMINFO
char *home_terminfo;
#endif
#if !USE_SAFE_SPRINTF
int safeprint_cols;
int safeprint_rows;
#endif
#ifdef USE_PTHREADS
pthread_mutex_t mutex_curses;
pthread_mutex_t mutex_prescreen;
pthread_mutex_t mutex_screen;
pthread_mutex_t mutex_update;
pthread_mutex_t mutex_tst_tracef;
pthread_mutex_t mutex_tracef;
int nested_tracef;
int use_pthreads;
#define _nc_use_pthreads _nc_globals.use_pthreads
#if USE_PTHREADS_EINTR
pthread_t read_thread; /* The reading thread */
#endif
#endif
#if USE_WIDEC_SUPPORT
char key_name[MB_LEN_MAX + 1];
#endif
#ifdef TRACE
bool trace_opened;
char trace_fname[PATH_MAX];
int trace_level;
FILE *trace_fp;
int trace_fd;
char *tracearg_buf;
size_t tracearg_used;
TRACEBUF *tracebuf_ptr;
size_t tracebuf_used;
char tracechr_buf[40];
char *tracedmp_buf;
size_t tracedmp_used;
unsigned char *tracetry_buf;
size_t tracetry_used;
char traceatr_color_buf[2][80];
int traceatr_color_sel;
int traceatr_color_last;
#if !defined(USE_PTHREADS) && USE_REENTRANT
int nested_tracef;
#endif
#endif /* TRACE */
#if NO_LEAKS
bool leak_checking;
#endif
} NCURSES_GLOBALS;
extern NCURSES_EXPORT_VAR(NCURSES_GLOBALS) _nc_globals;
#define N_RIPS 5
/* The limit reserves one byte for a terminating NUL */
#define my_getstr_limit (_nc_globals.getstr_limit - 1)
#define _nc_getstr_limit(n) \
(((n) < 0) \
? my_getstr_limit \
: (((n) > my_getstr_limit) \
? my_getstr_limit \
: (n)))
#ifdef USE_PTHREADS
typedef struct _prescreen_list {
struct _prescreen_list *next;
pthread_t id;
struct screen *sp;
} PRESCREEN_LIST;
#endif
/*
* Global data which can be swept up into a SCREEN when one is created.
* It may be modified before the next SCREEN is created.
*/
typedef struct {
#ifdef USE_PTHREADS
PRESCREEN_LIST *allocated;
#else
struct screen * allocated;
#endif
bool use_env;
bool filter_mode;
attr_t previous_attr;
TPARM_STATE tparm_state;
TTY *saved_tty; /* savetty/resetty information */
bool use_tioctl;
NCURSES_SP_OUTC _outch; /* output handler if not putc */
#ifndef USE_SP_RIPOFF
ripoff_t rippedoff[N_RIPS];
ripoff_t *rsp;
#endif
#if NCURSES_NO_PADDING
bool _no_padding; /* flag to set if padding disabled */
#endif
#if BROKEN_LINKER || USE_REENTRANT
chtype *real_acs_map;
int _LINES;
int _COLS;
int _TABSIZE;
int _ESCDELAY;
TERMINAL *_cur_term;
#endif
#ifdef TRACE
#if BROKEN_LINKER || USE_REENTRANT
long _outchars;
const char *_tputs_trace;
#endif
#endif
} NCURSES_PRESCREEN;
/*
* Use screen-specific ripoff data (for softkeys) rather than global.
*/
#ifdef USE_SP_RIPOFF
#define safe_ripoff_sp (sp)->rsp
#define safe_ripoff_stack (sp)->rippedoff
#else
#define safe_ripoff_sp _nc_prescreen.rsp
#define safe_ripoff_stack _nc_prescreen.rippedoff
#endif
extern NCURSES_EXPORT_VAR(NCURSES_PRESCREEN) _nc_prescreen;
typedef enum {
ewInitial = 0,
ewRunning,
ewSuspend
} ENDWIN;
/*
* The SCREEN structure.
*/
struct screen {
int _ifd; /* input file descriptor for screen */
int _ofd; /* output file descriptor for screen */
FILE *_ofp; /* output file ptr for screen */
char *out_buffer; /* output buffer */
size_t out_limit; /* output buffer size */
size_t out_inuse; /* output buffer current use */
bool _filtered; /* filter() was called */
bool _prescreen; /* is in prescreen phase */
bool _use_env; /* LINES & COLS from environment? */
int _checkfd; /* filedesc for typeahead check */
TERMINAL *_term; /* terminal type information */
TTY _saved_tty; /* savetty/resetty information */
NCURSES_SIZE_T _lines; /* screen lines */
NCURSES_SIZE_T _columns; /* screen columns */
NCURSES_SIZE_T _lines_avail; /* lines available for stdscr */
NCURSES_SIZE_T _topstolen; /* lines stolen from top */
WINDOW *_curscr; /* current screen */
WINDOW *_newscr; /* virtual screen to be updated to */
WINDOW *_stdscr; /* screen's full-window context */
#define CurScreen(sp) (sp)->_curscr
#define NewScreen(sp) (sp)->_newscr
#define StdScreen(sp) (sp)->_stdscr
TRIES *_keytry; /* "Try" for use with keypad mode */
TRIES *_key_ok; /* Disabled keys via keyok(,FALSE) */
bool _tried; /* keypad mode was initialized */
bool _keypad_on; /* keypad mode is currently on */
bool _called_wgetch; /* check for recursion in wgetch() */
int _fifo[FIFO_SIZE]; /* input push-back buffer */
short _fifohead, /* head of fifo queue */
_fifotail, /* tail of fifo queue */
_fifopeek, /* where to peek for next char */
_fifohold; /* set if breakout marked */
int _endwin; /* are we out of window mode? */
NCURSES_CH_T *_current_attr; /* holds current attributes set */
int _coloron; /* is color enabled? */
int _color_defs; /* are colors modified */
int _cursor; /* visibility of the cursor */
int _cursrow; /* physical cursor row */
int _curscol; /* physical cursor column */
bool _notty; /* true if we cannot switch non-tty */
int _nl; /* True if NL -> CR/NL is on */
int _raw; /* True if in raw mode */
int _cbreak; /* 1 if in cbreak mode */
/* > 1 if in halfdelay mode */
int _echo; /* True if echo on */
int _use_meta; /* use the meta key? */
struct _SLK *_slk; /* ptr to soft key struct / NULL */
int slk_format; /* selected format for this screen */
/* cursor movement costs; units are 10ths of milliseconds */
int _char_padding; /* cost of character put */
int _cr_cost; /* cost of (carriage_return) */
int _cup_cost; /* cost of (cursor_address) */
int _home_cost; /* cost of (cursor_home) */
int _ll_cost; /* cost of (cursor_to_ll) */
int _cub1_cost; /* cost of (cursor_left) */
int _cuf1_cost; /* cost of (cursor_right) */
int _cud1_cost; /* cost of (cursor_down) */
int _cuu1_cost; /* cost of (cursor_up) */
int _cub_cost; /* cost of (parm_cursor_left) */
int _cuf_cost; /* cost of (parm_cursor_right) */
int _cud_cost; /* cost of (parm_cursor_down) */
int _cuu_cost; /* cost of (parm_cursor_up) */
int _hpa_cost; /* cost of (column_address) */
int _vpa_cost; /* cost of (row_address) */
/* used in tty_update.c, must be chars */
int _ed_cost; /* cost of (clr_eos) */
int _el_cost; /* cost of (clr_eol) */
int _el1_cost; /* cost of (clr_bol) */
int _dch1_cost; /* cost of (delete_character) */
int _ich1_cost; /* cost of (insert_character) */
int _dch_cost; /* cost of (parm_dch) */
int _ich_cost; /* cost of (parm_ich) */
int _ech_cost; /* cost of (erase_chars) */
int _rep_cost; /* cost of (repeat_char) */
int _hpa_ch_cost; /* cost of (column_address) */
int _cup_ch_cost; /* cost of (cursor_address) */
int _cuf_ch_cost; /* cost of (parm_cursor_right) */
int _inline_cost; /* cost of inline-move */
int _smir_cost; /* cost of (enter_insert_mode) */
int _rmir_cost; /* cost of (exit_insert_mode) */
int _ip_cost; /* cost of (insert_padding) */
/* used in lib_mvcur.c */
char * _address_cursor;
/* used in tty_update.c */
int _scrolling; /* 1 if terminal's smart enough to */
/* used in lib_color.c */
rgb_bits_t _direct_color; /* RGB overrides color-table */
color_t *_color_table; /* screen's color palette */
int _color_count; /* count of colors in palette */
colorpair_t *_color_pairs; /* screen's color pair list */
int _pair_count; /* same as COLOR_PAIRS */
int _pair_limit; /* actual limit of color-pairs */
int _pair_alloc; /* current table-size of color-pairs */
chtype _ok_attributes; /* valid attributes for terminal */
chtype _xmc_suppress; /* attributes to suppress if xmc */
chtype _xmc_triggers; /* attributes to process if xmc */
chtype * _acs_map; /* the real alternate-charset map */
bool * _screen_acs_map;
/* used in lib_vidattr.c */
bool _use_rmso; /* true if we may use 'rmso' */
bool _use_rmul; /* true if we may use 'rmul' */
/*
* These data correspond to the state of the idcok() and idlok()
* functions. A caveat is in order here: the XSI and SVr4
* documentation specify that these functions apply to the window which
* is given as an argument. However, ncurses implements this logic
* only for the newscr/curscr update process, _not_ per-window.
*/
bool _nc_sp_idlok;
bool _nc_sp_idcok;
/*
* These are the data that support the mouse interface.
*/
bool _mouse_initialized;
MouseType _mouse_type;
int _maxclick;
bool (*_mouse_event) (SCREEN *);
bool (*_mouse_inline)(SCREEN *);
bool (*_mouse_parse) (SCREEN *, int);
void (*_mouse_resume)(SCREEN *);
void (*_mouse_wrap) (SCREEN *);
int _mouse_fd; /* file-descriptor, if any */
bool _mouse_active; /* true if initialized */
mmask_t _mouse_mask; /* set via mousemask() */
mmask_t _mouse_mask2; /* OR's in press/release bits */
mmask_t _mouse_bstate;
MouseFormat _mouse_format; /* type of xterm mouse protocol */
NCURSES_CONST char *_mouse_xtermcap; /* string to enable/disable mouse */
MEVENT _mouse_events[EV_MAX]; /* hold the last mouse event seen */
MEVENT *_mouse_eventp; /* next free slot in event queue */
/*
* These are data that support the proper handling of the panel stack on an
* per screen basis.
*/
struct panelhook _panelHook;
bool _sig_winch;
SCREEN *_next_screen;
/* hashes for old and new lines */
unsigned long *oldhash, *newhash;
HASHMAP *hashtab;
int hashtab_len;
int *_oldnum_list;
int _oldnum_size;
NCURSES_SP_OUTC _outch; /* output handler if not putc */
NCURSES_OUTC jump;
ripoff_t rippedoff[N_RIPS];
ripoff_t *rsp;
int _legacy_coding; /* see use_legacy_coding() */
#if NCURSES_NO_PADDING
bool _no_padding; /* flag to set if padding disabled */
#endif
#if USE_HARD_TABS
int _ht_cost; /* cost of (tab) */
int _cbt_cost; /* cost of (backtab) */
#endif /* USE_HARD_TABS */
/* used in lib_vidattr.c */
#if USE_ITALIC
bool _use_ritm; /* true if we may use 'ritm' */
#endif
/* used in getch/twait */
#if USE_KLIBC_KBD
bool _extended_key; /* true if an extended key */
#endif
/* used in lib_color.c */
#if NCURSES_EXT_FUNCS
bool _assumed_color; /* use assumed colors */
bool _default_color; /* use default colors */
bool _has_sgr_39_49; /* has ECMA default color support */
int _default_fg; /* assumed default foreground */
int _default_bg; /* assumed default background */
int _default_pairs; /* count pairs using default color */
#endif
/* system-dependent mouse data */
#if USE_GPM_SUPPORT
bool _mouse_gpm_loaded;
bool _mouse_gpm_found;
#ifdef HAVE_LIBDL
void *_dlopen_gpm;
TYPE_gpm_fd _mouse_gpm_fd;
TYPE_Gpm_Open _mouse_Gpm_Open;
TYPE_Gpm_Close _mouse_Gpm_Close;
TYPE_Gpm_GetEvent _mouse_Gpm_GetEvent;
#endif
Gpm_Connect _mouse_gpm_connect;
#endif /* USE_GPM_SUPPORT */
#if USE_EMX_MOUSE
int _emxmouse_wfd;
int _emxmouse_thread;
int _emxmouse_activated;
char _emxmouse_buttons[4];
#endif
#if USE_SYSMOUSE
MEVENT _sysmouse_fifo[FIFO_SIZE];
int _sysmouse_head;
int _sysmouse_tail;
int _sysmouse_char_width; /* character width */
int _sysmouse_char_height; /* character height */
int _sysmouse_old_buttons;
int _sysmouse_new_buttons;
#endif
-#ifdef USE_TERM_DRIVER
+#if defined(USE_TERM_DRIVER) || defined(EXP_WIN32_DRIVER)
MEVENT _drv_mouse_fifo[FIFO_SIZE];
int _drv_mouse_head;
int _drv_mouse_tail;
int _drv_mouse_old_buttons;
int _drv_mouse_new_buttons;
#endif
/*
* This supports automatic resizing
*/
#if USE_SIZECHANGE
int (*_resize)(NCURSES_SP_DCLx int y, int x);
int (*_ungetch)(SCREEN *, int);
#endif
#ifdef USE_SP_WINDOWLIST
WINDOWLIST* _windowlist;
#define WindowList(sp) (sp)->_windowlist
#endif
#if USE_REENTRANT
char _ttytype[NAMESIZE];
int _ESCDELAY;
int _TABSIZE;
int _LINES;
int _COLS;
#endif
#if NCURSES_SP_FUNCS
bool use_tioctl;
#endif
/*
* ncurses/ncursesw are the same up to this point.
*/
#if USE_WIDEC_SUPPORT
/* recent versions of 'screen' have partially-working support for
* UTF-8, but do not permit ACS at the same time (see tty_update.c).
*/
bool _screen_acs_fix;
bool _screen_unicode;
#endif
#if NCURSES_EXT_FUNCS && NCURSES_EXT_COLORS
void *_ordered_pairs; /* index used by alloc_pair() */
int _pairs_used; /* actual number of color-pairs used */
int _recent_pair; /* number for most recent free-pair */
#endif
#ifdef TRACE
char tracechr_buf[40];
char tracemse_buf[TRACEMSE_MAX];
#if USE_REENTRANT
long _outchars;
const char *_tputs_trace;
#endif
#endif
};
extern NCURSES_EXPORT_VAR(SCREEN *) _nc_screen_chain;
extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch;
WINDOWLIST {
WINDOWLIST *next;
SCREEN *screen; /* screen containing the window */
WINDOW win; /* WINDOW_EXT() needs to account for offset */
#if NCURSES_WIDECHAR
char addch_work[(MB_LEN_MAX * 9) + 1];
unsigned addch_used; /* number of bytes in addch_work[] */
int addch_x; /* x-position for addch_work[] */
int addch_y; /* y-position for addch_work[] */
#endif
};
#define WINDOW_EXT(w,m) (((WINDOWLIST *)((void *)((char *)(w) - offsetof(WINDOWLIST, win))))->m)
#ifdef USE_SP_WINDOWLIST
#define SP_INIT_WINDOWLIST(sp) WindowList(sp) = 0
#else
#define SP_INIT_WINDOWLIST(sp) /* nothing */
#endif
#define SP_PRE_INIT(sp) \
sp->_cursrow = -1; \
sp->_curscol = -1; \
sp->_nl = TRUE; \
sp->_raw = FALSE; \
sp->_cbreak = 0; \
sp->_echo = TRUE; \
sp->_fifohead = -1; \
sp->_endwin = ewSuspend; \
sp->_cursor = -1; \
SP_INIT_WINDOWLIST(sp); \
sp->_outch = NCURSES_OUTC_FUNC; \
sp->jump = 0 \
/* usually in <limits.h> */
#ifndef UCHAR_MAX
#define UCHAR_MAX 255
#endif
/* The terminfo source is assumed to be 7-bit ASCII */
#define is7bits(c) ((unsigned)(c) < 128)
/* Checks for isprint() should be done on 8-bit characters (non-wide) */
#define is8bits(c) ((unsigned)(c) <= UCHAR_MAX)
#ifndef min
#define min(a,b) ((a) > (b) ? (b) : (a))
#endif
#ifndef max
#define max(a,b) ((a) < (b) ? (b) : (a))
#endif
/* usually in <unistd.h> */
#ifndef STDIN_FILENO
#define STDIN_FILENO 0
#endif
#ifndef STDOUT_FILENO
#define STDOUT_FILENO 1
#endif
#ifndef STDERR_FILENO
#define STDERR_FILENO 2
#endif
#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
#endif
#ifndef EXIT_FAILURE
#define EXIT_FAILURE 1
#endif
#ifndef R_OK
#define R_OK 4 /* Test for read permission. */
#endif
#ifndef W_OK
#define W_OK 2 /* Test for write permission. */
#endif
#ifndef X_OK
#define X_OK 1 /* Test for execute permission. */
#endif
#ifndef F_OK
#define F_OK 0 /* Test for existence. */
#endif
#if HAVE_FCNTL_H
#include <fcntl.h> /* may define O_BINARY */
#endif
#ifndef O_BINARY
#define O_BINARY 0
#endif
#ifdef TRACE
#if USE_REENTRANT
#define COUNT_OUTCHARS(n) _nc_count_outchars(n);
#else
#define COUNT_OUTCHARS(n) _nc_outchars += (n);
#endif
#else
#define COUNT_OUTCHARS(n) /* nothing */
#endif
#define RESET_OUTCHARS() COUNT_OUTCHARS(-_nc_outchars)
#define UChar(c) ((unsigned char)(c))
#define UShort(c) ((unsigned short)(c))
#define ChCharOf(c) ((chtype)(c) & (chtype)A_CHARTEXT)
#define ChAttrOf(c) ((chtype)(c) & (chtype)A_ATTRIBUTES)
#define TR_PUTC(c) TR(TRACE_CHARPUT, ("PUTC %#x", UChar(c)))
#ifndef MB_LEN_MAX
#define MB_LEN_MAX 8 /* should be >= MB_CUR_MAX, but that may be a function */
#endif
#if USE_WIDEC_SUPPORT /* { */
#define isEILSEQ(status) (((size_t)status == (size_t)-1) && (errno == EILSEQ))
#define init_mb(state) memset(&state, 0, sizeof(state))
#if NCURSES_EXT_COLORS
#define NulColor , 0
#else
#define NulColor /* nothing */
#endif
#define NulChar 0,0,0,0 /* FIXME: see CCHARW_MAX */
#define CharOf(c) ((c).chars[0])
#define AttrOf(c) ((c).attr)
#define AddAttr(c,a) AttrOf(c) |= ((a) & A_ATTRIBUTES)
#define RemAttr(c,a) AttrOf(c) &= ~((a) & A_ATTRIBUTES)
#define SetAttr(c,a) AttrOf(c) = ((a) & A_ATTRIBUTES) | WidecExt(c)
#define NewChar2(c,a) { a, { c, NulChar } NulColor }
#define NewChar(ch) NewChar2(ChCharOf(ch), ChAttrOf(ch))
#if CCHARW_MAX == 5
#define CharEq(a,b) (((a).attr == (b).attr) \
&& (a).chars[0] == (b).chars[0] \
&& (a).chars[1] == (b).chars[1] \
&& (a).chars[2] == (b).chars[2] \
&& (a).chars[3] == (b).chars[3] \
&& (a).chars[4] == (b).chars[4] \
if_EXT_COLORS(&& (a).ext_color == (b).ext_color))
#elif CCHARW_MAX > 0
#error Inconsistent values for CCHARW_MAX
#else
#define CharEq(a,b) (!memcmp(&(a), &(b), sizeof(a)))
#endif
#define SetChar(ch,c,a) do { \
NCURSES_CH_T *_cp = &ch; \
memset(_cp, 0, sizeof(ch)); \
_cp->chars[0] = (wchar_t) (c); \
_cp->attr = (a); \
if_EXT_COLORS(SetPair(ch, PairNumber(a))); \
} while (0)
#define CHREF(wch) (&wch)
#define CHDEREF(wch) (*wch)
#define ARG_CH_T NCURSES_CH_T *
#define CARG_CH_T const NCURSES_CH_T *
#define PUTC_DATA char PUTC_buf[MB_LEN_MAX]; int PUTC_i, PUTC_n; \
mbstate_t PUT_st; wchar_t PUTC_ch
#define PUTC_INIT init_mb (PUT_st)
#define PUTC(ch) do { if(!isWidecExt(ch)) { \
if (Charable(ch)) { \
TR_PUTC(CharOf(ch)); \
NCURSES_OUTC_FUNC (NCURSES_SP_ARGx CharOf(ch)); \
COUNT_OUTCHARS(1); \
} else { \
for (PUTC_i = 0; PUTC_i < CCHARW_MAX; ++PUTC_i) { \
PUTC_ch = (ch).chars[PUTC_i]; \
if (PUTC_ch == L'\0') \
break; \
PUTC_INIT; \
PUTC_n = (int) wcrtomb(PUTC_buf, \
(ch).chars[PUTC_i], &PUT_st); \
if (PUTC_n <= 0) { \
if (PUTC_ch && is8bits(PUTC_ch) && PUTC_i == 0) { \
TR_PUTC(CharOf(ch)); \
NCURSES_OUTC_FUNC (NCURSES_SP_ARGx CharOf(ch)); \
} \
break; \
} else { \
int PUTC_j; \
for (PUTC_j = 0; PUTC_j < PUTC_n; ++PUTC_j) { \
TR_PUTC(PUTC_buf[PUTC_j]); \
NCURSES_OUTC_FUNC (NCURSES_SP_ARGx PUTC_buf[PUTC_j]); \
} \
} \
} \
COUNT_OUTCHARS(PUTC_i); \
} } } while (0)
#define BLANK NewChar2(' ', WA_NORMAL)
#define ZEROS NewChar2('\0', WA_NORMAL)
#define ISBLANK(ch) ((ch).chars[0] == L' ' && (ch).chars[1] == L'\0')
/*
* Wide characters cannot be represented in the A_CHARTEXT mask of
* attr_t's but an application might have set a narrow character there.
* But even in that case, it would only be a printable character, or
* zero. Otherwise we can use those bits to tell if a cell is the
* first or extension part of a wide character.
*/
#define WidecExt(ch) (int) (AttrOf(ch) & A_CHARTEXT)
#define isWidecBase(ch) (WidecExt(ch) == 1)
#define isWidecExt(ch) (WidecExt(ch) > 1 && WidecExt(ch) < 32)
#define SetWidecExt(dst, ext) AttrOf(dst) &= ~A_CHARTEXT, \
AttrOf(dst) |= (attr_t) (ext + 1)
#define if_WIDEC(code) code
#define Charable(ch) (((SP_PARM->_legacy_coding) \
|| (AttrOf(ch) & A_ALTCHARSET) \
|| (!isWidecExt(ch))) && \
(ch).chars[1] == L'\0' && \
_nc_is_charable(CharOf(ch)))
#define L(ch) L ## ch
#else /* }{ */
#define CharOf(c) ChCharOf(c)
#define AttrOf(c) ChAttrOf(c)
#define AddAttr(c,a) c |= (a)
#define RemAttr(c,a) c &= ~((a) & A_ATTRIBUTES)
#define SetAttr(c,a) c = ((c) & ~A_ATTRIBUTES) | (a)
#define NewChar(ch) (ch)
#define NewChar2(c,a) ((c) | (a))
#define CharEq(a,b) ((a) == (b))
#define SetChar(ch,c,a) ch = (c) | (a)
#define CHREF(wch) wch
#define CHDEREF(wch) wch
#define ARG_CH_T NCURSES_CH_T
#define CARG_CH_T NCURSES_CH_T
#define PUTC_DATA /* nothing */
#define PUTC(ch) { \
TR_PUTC(ch); \
NCURSES_OUTC_FUNC (NCURSES_SP_ARGx (int) ch); \
}
#define BLANK (' '|A_NORMAL)
#define ZEROS ('\0'|A_NORMAL)
#define ISBLANK(ch) (CharOf(ch) == ' ')
#define isWidecExt(ch) (0)
#define if_WIDEC(code) /* nothing */
#define Charable(ch) ((ch) >= ' ' && (ch) <= '~')
#define L(ch) ch
#endif /* } */
#define AttrOfD(ch) AttrOf(CHDEREF(ch))
#define CharOfD(ch) CharOf(CHDEREF(ch))
#define SetChar2(wch,ch) SetChar(wch,ChCharOf(ch),ChAttrOf(ch))
#define BLANK_ATTR A_NORMAL
#define BLANK_TEXT L(' ')
#define CHANGED -1
#define LEGALYX(w, y, x) \
((w) != 0 && \
((x) >= 0 && (x) <= (w)->_maxx && \
(y) >= 0 && (y) <= (w)->_maxy))
#define CHANGED_CELL(line,col) \
if (line->firstchar == _NOCHANGE) \
line->firstchar = line->lastchar = (NCURSES_SIZE_T) (col); \
else if ((col) < line->firstchar) \
line->firstchar = (NCURSES_SIZE_T) (col); \
else if ((col) > line->lastchar) \
line->lastchar = (NCURSES_SIZE_T) (col)
#define CHANGED_RANGE(line,start,end) \
if (line->firstchar == _NOCHANGE \
|| line->firstchar > (start)) \
line->firstchar = (NCURSES_SIZE_T) (start); \
if (line->lastchar == _NOCHANGE \
|| line->lastchar < (end)) \
line->lastchar = (NCURSES_SIZE_T) (end)
#define CHANGED_TO_EOL(line,start,end) \
if (line->firstchar == _NOCHANGE \
|| line->firstchar > (start)) \
line->firstchar = (NCURSES_SIZE_T) (start); \
line->lastchar = (NCURSES_SIZE_T) (end)
#define SIZEOF(v) (sizeof(v)/sizeof(v[0]))
#define FreeIfNeeded(p) if ((p) != 0) free(p)
/* FreeAndNull() is not a comma-separated expression because some compilers
* do not accept a mixture of void with values.
*/
#define FreeAndNull(p) do { free(p); p = 0; } while (0)
#include <nc_alloc.h>
/*
* Use these for tic/infocmp malloc failures. Generally the ncurses library
* tries to limp along after a failure.
*/
#define TYPE_MALLOC(type, size, name) \
do { \
name = typeMalloc(type, size); \
if (name == 0) \
_nc_err_abort(MSG_NO_MEMORY); \
} while (0)
#define TYPE_REALLOC(type, size, name) \
do { \
name = typeRealloc(type, size, name); \
if (name == 0) \
_nc_err_abort(MSG_NO_MEMORY); \
} while (0)
/*
* TTY bit definition for converting tabs to spaces.
*/
#ifdef TAB3
# define OFLAGS_TABS TAB3 /* POSIX specifies TAB3 */
#else
# ifdef XTABS
# define OFLAGS_TABS XTABS /* XTABS is usually the "same" */
# else
# ifdef OXTABS
# define OFLAGS_TABS OXTABS /* the traditional BSD equivalent */
# else
# define OFLAGS_TABS 0
# endif
# endif
#endif
#ifdef __TANDEM
#define ROOT_UID 65535
#endif
#ifndef ROOT_UID
#define ROOT_UID 0
#endif
/*
* Standardize/simplify common loops
*/
#define each_screen(p) p = _nc_screen_chain; p != 0; p = (p)->_next_screen
#define each_window(sp,p) p = WindowList(sp); p != 0; p = (p)->next
#define each_ripoff(p) p = safe_ripoff_stack; (p - safe_ripoff_stack) < N_RIPS; ++p
/*
* Prefixes for call/return points of library function traces. We use these to
* instrument the public functions so that the traces can be easily transformed
* into regression scripts.
*/
#define T_CALLED(fmt) "called {" fmt
#define T_CREATE(fmt) "create :" fmt
#define T_RETURN(fmt) "return }" fmt
#define NonNull(s) ((s) != 0 ? s : "<null>")
#define NonEmpty(s) ((s) != 0 && *(s) != '\0')
#ifdef TRACE
#if USE_REENTRANT
#define TPUTS_TRACE(s) _nc_set_tputs_trace(s);
#else
#define TPUTS_TRACE(s) _nc_tputs_trace = s;
#endif
#ifdef HAVE_CONSISTENT_GETENV
#define START_TRACE() \
if ((_nc_tracing & TRACE_MAXIMUM) == 0) { \
int t = _nc_getenv_num("NCURSES_TRACE"); \
if (t >= 0) \
curses_trace((unsigned) t); \
}
#else
#define START_TRACE() /* nothing */
#endif
/*
* Many of the _tracef() calls use static buffers; lock the trace state before
* trying to fill them.
*/
#if USE_REENTRANT
#define USE_TRACEF(mask) _nc_use_tracef(mask)
extern NCURSES_EXPORT(int) _nc_use_tracef (unsigned);
extern NCURSES_EXPORT(void) _nc_locked_tracef (const char *, ...) GCC_PRINTFLIKE(1,2);
#else
#define USE_TRACEF(mask) (_nc_tracing & (mask))
#define _nc_locked_tracef _tracef
#endif
#define TR(n, a) if (USE_TRACEF(n)) _nc_locked_tracef a
#define T(a) TR(TRACE_CALLS, a)
#define TRACE_RETURN(value,type) return _nc_retrace_##type((type)(value))
#define TRACE_RETURN1(value,dst) return _nc_retrace_##dst(value)
#define TRACE_RETURN2(value,dst,src) return _nc_retrace_##dst##_##src(value)
#define TRACE_RETURN_SP(value,type) return _nc_retrace_##type(SP_PARM, value)
typedef void VoidFunc(void);
#define TR_FUNC_LEN ((sizeof(void *) + sizeof(void (*)(void))) * 2 + 4)
#define TR_FUNC_BFR(max) char tr_func_data[max][TR_FUNC_LEN]
#define TR_FUNC_ARG(num,func) _nc_fmt_funcptr(&tr_func_data[num][0], (const char *)&(func), sizeof((func)))
#define returnAttr(code) TRACE_RETURN(code,attr_t)
#define returnBits(code) TRACE_RETURN(code,unsigned)
#define returnBool(code) TRACE_RETURN(code,bool)
#define returnCPtr(code) TRACE_RETURN1(code,cptr)
#define returnCVoidPtr(code) TRACE_RETURN1(code,cvoid_ptr)
#define returnChar(code) TRACE_RETURN(code,char)
#define returnChtype(code) TRACE_RETURN(code,chtype)
#define returnCode(code) TRACE_RETURN(code,int)
#define returnIntAttr(code) TRACE_RETURN2(code,int,attr_t)
#define returnMMask(code) TRACE_RETURN_SP(code,mmask_t)
#define returnPtr(code) TRACE_RETURN1(code,ptr)
#define returnSP(code) TRACE_RETURN1(code,sp)
#define returnVoid T((T_RETURN(""))); return
#define returnVoidPtr(code) TRACE_RETURN1(code,void_ptr)
#define returnWin(code) TRACE_RETURN1(code,win)
#define returnDB(rc) do { TR(TRACE_DATABASE,(T_RETURN("code %d"), (rc))); return (rc); } while (0)
extern NCURSES_EXPORT(NCURSES_BOOL) _nc_retrace_bool (int);
extern NCURSES_EXPORT(NCURSES_CONST void *) _nc_retrace_cvoid_ptr (NCURSES_CONST void *);
extern NCURSES_EXPORT(SCREEN *) _nc_retrace_sp (SCREEN *);
extern NCURSES_EXPORT(WINDOW *) _nc_retrace_win (WINDOW *);
extern NCURSES_EXPORT(attr_t) _nc_retrace_attr_t (attr_t);
extern NCURSES_EXPORT(char *) _nc_retrace_ptr (char *);
-extern NCURSES_EXPORT(char *) _nc_trace_ttymode(TTY *tty);
+extern NCURSES_EXPORT(char *) _nc_trace_ttymode(const TTY *tty);
extern NCURSES_EXPORT(char *) _nc_varargs (const char *, va_list);
extern NCURSES_EXPORT(chtype) _nc_retrace_chtype (chtype);
extern NCURSES_EXPORT(const char *) _nc_altcharset_name(attr_t, chtype);
extern NCURSES_EXPORT(const char *) _nc_retrace_cptr (const char *);
extern NCURSES_EXPORT(char) _nc_retrace_char (int);
extern NCURSES_EXPORT(int) _nc_retrace_int (int);
extern NCURSES_EXPORT(int) _nc_retrace_int_attr_t (attr_t);
extern NCURSES_EXPORT(mmask_t) _nc_retrace_mmask_t (SCREEN *, mmask_t);
extern NCURSES_EXPORT(unsigned) _nc_retrace_unsigned (unsigned);
extern NCURSES_EXPORT(void *) _nc_retrace_void_ptr (void *);
extern NCURSES_EXPORT(void) _nc_fifo_dump (SCREEN *);
extern NCURSES_EXPORT(char *) _nc_fmt_funcptr(char *, const char *, size_t);
#if USE_REENTRANT
NCURSES_WRAPPED_VAR(long, _nc_outchars);
NCURSES_WRAPPED_VAR(const char *, _nc_tputs_trace);
#define _nc_outchars NCURSES_PUBLIC_VAR(_nc_outchars())
#define _nc_tputs_trace NCURSES_PUBLIC_VAR(_nc_tputs_trace())
extern NCURSES_EXPORT(void) _nc_set_tputs_trace (const char *);
extern NCURSES_EXPORT(void) _nc_count_outchars (long);
#else
extern NCURSES_EXPORT_VAR(const char *) _nc_tputs_trace;
extern NCURSES_EXPORT_VAR(long) _nc_outchars;
#endif
extern NCURSES_EXPORT_VAR(unsigned) _nc_tracing;
extern NCURSES_EXPORT(char *) _nc_tracebits (void);
extern NCURSES_EXPORT(char *) _tracemouse (const MEVENT *);
extern NCURSES_EXPORT(void) _tracedump (const char *, WINDOW *);
#if USE_WIDEC_SUPPORT
extern NCURSES_EXPORT(const char *) _nc_viswbuf2 (int, const wchar_t *);
extern NCURSES_EXPORT(const char *) _nc_viswbufn (const wchar_t *, int);
#endif
extern NCURSES_EXPORT(const char *) _nc_viscbuf2 (int, const NCURSES_CH_T *, int);
extern NCURSES_EXPORT(const char *) _nc_viscbuf (const NCURSES_CH_T *, int);
#else /* !TRACE */
#define START_TRACE() /* nothing */
#define T(a)
#define TR(n, a)
#define TPUTS_TRACE(s)
#define TR_FUNC_BFR(max)
#define returnAttr(code) return code
#define returnBits(code) return code
#define returnBool(code) return code
#define returnCPtr(code) return code
#define returnCVoidPtr(code) return code
#define returnChar(code) return ((char) code)
#define returnChtype(code) return code
#define returnCode(code) return code
#define returnIntAttr(code) return code
#define returnMMask(code) return code
#define returnPtr(code) return code
#define returnSP(code) return code
#define returnVoid return
#define returnVoidPtr(code) return code
#define returnWin(code) return code
#define returnDB(code) return code
#endif /* TRACE/!TRACE */
/*
* Workaround for defective implementation of gcc attribute warn_unused_result
*/
#if defined(__GNUC__) && defined(_FORTIFY_SOURCE)
#define IGNORE_RC(func) errno = (int) func
#else
#define IGNORE_RC(func) (void) func
#endif /* gcc workarounds */
/*
* Return-codes for tgetent() and friends.
*/
#define TGETENT_YES 1 /* entry is found */
#define TGETENT_NO 0 /* entry is not found */
#define TGETENT_ERR -1 /* an error occurred */
extern NCURSES_EXPORT(const char *) _nc_visbuf2 (int, const char *);
extern NCURSES_EXPORT(const char *) _nc_visbufn (const char *, int);
#define EMPTY_MODULE(name) \
extern NCURSES_EXPORT(void) name (void); \
NCURSES_EXPORT(void) name (void) { }
#define ALL_BUT_COLOR ((chtype)~(A_COLOR))
#define NONBLANK_ATTR (A_BOLD | A_DIM | A_BLINK | A_ITALIC)
#define TPARM_ATTR (A_STANDOUT | A_UNDERLINE | A_REVERSE | A_BLINK | A_DIM | A_BOLD | A_ALTCHARSET | A_INVIS | A_PROTECT)
#define XMC_CONFLICT (A_STANDOUT | A_UNDERLINE | A_REVERSE | A_BLINK | A_DIM | A_BOLD | A_INVIS | A_PROTECT | A_ITALIC)
#define XMC_CHANGES(c) ((c) & SP_PARM->_xmc_suppress)
#define toggle_attr_on(S,at) {\
if (PairNumber(at) > 0) {\
(S) = ((S) & ALL_BUT_COLOR) | (attr_t) (at);\
} else {\
(S) |= (attr_t) (at);\
}\
TR(TRACE_ATTRS, ("new attribute is %s", _traceattr((S))));}
#define toggle_attr_off(S,at) {\
if (PairNumber(at) > 0) {\
(S) &= ~(at|A_COLOR);\
} else {\
(S) &= ~(at);\
}\
TR(TRACE_ATTRS, ("new attribute is %s", _traceattr((S))));}
#define DelCharCost(sp,count) \
((parm_dch != 0) \
? sp->_dch_cost \
: ((delete_character != 0) \
? (sp->_dch1_cost * count) \
: INFINITY))
#define InsCharCost(sp,count) \
((parm_ich != 0) \
? sp->_ich_cost \
: ((enter_insert_mode && exit_insert_mode) \
? sp->_smir_cost + sp->_rmir_cost + (sp->_ip_cost * count) \
: ((insert_character != 0) \
? ((sp->_ich1_cost + sp->_ip_cost) * count) \
: INFINITY)))
#if USE_XMC_SUPPORT
#define UpdateAttrs(sp,c) if (!SameAttrOf(SCREEN_ATTRS(sp), c)) { \
attr_t chg = AttrOf(SCREEN_ATTRS(sp)); \
VIDPUTS(sp, AttrOf(c), GetPair(c)); \
if (magic_cookie_glitch > 0 \
&& XMC_CHANGES((chg ^ AttrOf(SCREEN_ATTRS(sp))))) { \
T(("%s @%d before glitch %d,%d", \
__FILE__, __LINE__, \
sp->_cursrow, \
sp->_curscol)); \
NCURSES_SP_NAME(_nc_do_xmc_glitch)(NCURSES_SP_ARGx chg); \
} \
}
#else
#define UpdateAttrs(sp,c) if (!SameAttrOf(SCREEN_ATTRS(sp), c)) { \
VIDPUTS(sp, AttrOf(c), GetPair(c)); \
}
#endif
/*
* Macros to make additional parameter to implement wgetch_events()
*/
#ifdef NCURSES_WGETCH_EVENTS
#define EVENTLIST_0th(param) param
#define EVENTLIST_1st(param) param
#define EVENTLIST_2nd(param) , param
#define TWAIT_MASK (TW_ANY | TW_EVENT)
#else
#define EVENTLIST_0th(param) void
#define EVENTLIST_1st(param) /* nothing */
#define EVENTLIST_2nd(param) /* nothing */
#define TWAIT_MASK TW_ANY
#endif
#if NCURSES_EXPANDED && NCURSES_EXT_FUNCS
#undef toggle_attr_on
#define toggle_attr_on(S,at) _nc_toggle_attr_on(&(S), at)
extern NCURSES_EXPORT(void) _nc_toggle_attr_on (attr_t *, attr_t);
#undef toggle_attr_off
#define toggle_attr_off(S,at) _nc_toggle_attr_off(&(S), at)
extern NCURSES_EXPORT(void) _nc_toggle_attr_off (attr_t *, attr_t);
#undef DelCharCost
#define DelCharCost(sp, count) NCURSES_SP_NAME(_nc_DelCharCost)(NCURSES_SP_ARGx count)
#undef InsCharCost
#define InsCharCost(sp, count) NCURSES_SP_NAME(_nc_InsCharCost)(NCURSES_SP_ARGx count)
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_DelCharCost) (NCURSES_SP_DCLx int _c);
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_InsCharCost) (NCURSES_SP_DCLx int _c);
#undef UpdateAttrs
#define UpdateAttrs(sp,c) NCURSES_SP_NAME(_nc_UpdateAttrs)(NCURSES_SP_ARGx CHREF(c))
#if USE_WIDEC_SUPPORT || defined(NEED_NCURSES_CH_T)
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_UpdateAttrs) (NCURSES_SP_DCLx CARG_CH_T _c);
#else
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_UpdateAttrs) (NCURSES_SP_DCLx chtype c);
#endif
#if NCURSES_SP_FUNCS
extern NCURSES_EXPORT(int) _nc_DelCharCost (int);
extern NCURSES_EXPORT(int) _nc_InsCharCost (int);
extern NCURSES_EXPORT(void) _nc_UpdateAttrs (CARG_CH_T);
#endif /* NCURSES_SP_FUNCS */
#else
extern NCURSES_EXPORT(void) _nc_expanded (void);
#endif
#if !NCURSES_EXT_FUNCS
#define set_escdelay(value) ESCDELAY = value
#endif
#if !HAVE_GETCWD
#define getcwd(buf,len) getwd(buf)
#endif
#define save_ttytype(termp) \
if (TerminalType(termp).term_names != 0) { \
_nc_STRNCPY(ttytype, \
TerminalType(termp).term_names, \
NAMESIZE - 1); \
ttytype[NAMESIZE - 1] = '\0'; \
}
#if !NCURSES_WCWIDTH_GRAPHICS
extern NCURSES_EXPORT(int) _nc_wacs_width(unsigned);
#else
#define _nc_wacs_width(ch) wcwidth(ch)
#endif
/* charable.c */
#if USE_WIDEC_SUPPORT
extern NCURSES_EXPORT(bool) _nc_is_charable(wchar_t);
extern NCURSES_EXPORT(int) _nc_to_char(wint_t);
extern NCURSES_EXPORT(wint_t) _nc_to_widechar(int);
#endif
/* comp_captab.c */
typedef struct {
short nte_name; /* offset of name to hash on */
int nte_type; /* BOOLEAN, NUMBER or STRING */
short nte_index; /* index of associated variable in its array */
short nte_link; /* index in table of next hash, or -1 */
} name_table_data;
typedef struct
{
short from;
short to;
short source;
} alias_table_data;
/* comp_userdefs.c */
typedef struct {
short ute_name; /* offset of name to hash on */
unsigned ute_type; /* mask (BOOLEAN, NUMBER, STRING) */
unsigned ute_argc; /* number of parameters */
unsigned ute_args; /* bit-mask for string parameters */
short ute_index; /* index of associated variable in its array */
short ute_link; /* index in table of next hash, or -1 */
} user_table_data;
/* doupdate.c */
#if USE_XMC_SUPPORT
extern NCURSES_EXPORT(void) _nc_do_xmc_glitch (attr_t);
#endif
/* hardscroll.c */
#if defined(TRACE) || defined(SCROLLDEBUG) || defined(HASHDEBUG)
extern NCURSES_EXPORT(void) _nc_linedump (void);
#endif
/* lib_acs.c */
extern NCURSES_EXPORT(void) _nc_init_acs (void); /* corresponds to traditional 'init_acs()' */
extern NCURSES_EXPORT(int) _nc_msec_cost (const char *const, int); /* used by 'tack' program */
/* lib_addch.c */
#if USE_WIDEC_SUPPORT
NCURSES_EXPORT(int) _nc_build_wch(WINDOW *win, ARG_CH_T ch);
#endif
/* lib_addstr.c */
#if USE_WIDEC_SUPPORT && !(defined(USE_TERMLIB) || defined(USE_BUILD_CC))
extern NCURSES_EXPORT(int) _nc_wchstrlen(const cchar_t *);
#endif
/* lib_color.c */
extern NCURSES_EXPORT(int) _nc_init_color(SCREEN *, int, int, int, int);
extern NCURSES_EXPORT(int) _nc_init_pair(SCREEN *, int, int, int);
extern NCURSES_EXPORT(int) _nc_pair_content(SCREEN *, int, int *, int *);
extern NCURSES_EXPORT(bool) _nc_reset_colors(void);
extern NCURSES_EXPORT(void) _nc_reserve_pairs(SCREEN *, int);
extern NCURSES_EXPORT(void) _nc_change_pair(SCREEN *, int);
#define ReservePairs(sp,want) \
if ((sp->_color_pairs == 0) || (want >= sp->_pair_alloc)) \
_nc_reserve_pairs(sp, want)
/* lib_getch.c */
extern NCURSES_EXPORT(int) _nc_wgetch(WINDOW *, int *, int EVENTLIST_2nd(_nc_eventlist *));
/* lib_insch.c */
extern NCURSES_EXPORT(int) _nc_insert_ch(SCREEN *, WINDOW *, chtype);
/* lib_mvcur.c */
#define INFINITY 1000000 /* cost: too high to use */
extern NCURSES_EXPORT(int) _nc_mvcur(int yold, int xold, int ynew, int xnew);
extern NCURSES_EXPORT(void) _nc_mvcur_init (void);
extern NCURSES_EXPORT(void) _nc_mvcur_resume (void);
extern NCURSES_EXPORT(void) _nc_mvcur_wrap (void);
extern NCURSES_EXPORT(int) _nc_scrolln (int, int, int, int);
extern NCURSES_EXPORT(void) _nc_screen_init (void);
extern NCURSES_EXPORT(void) _nc_screen_resume (void);
extern NCURSES_EXPORT(void) _nc_screen_wrap (void);
/* lib_mouse.c */
extern NCURSES_EXPORT(bool) _nc_has_mouse (SCREEN *);
/* lib_mvcur.c */
#define INFINITY 1000000 /* cost: too high to use */
#define BAUDBYTE 9 /* 9 = 7 bits + 1 parity + 1 stop */
/* lib_setup.c */
extern NCURSES_EXPORT(char *) _nc_get_locale(void);
extern NCURSES_EXPORT(int) _nc_unicode_locale(void);
extern NCURSES_EXPORT(int) _nc_locale_breaks_acs(TERMINAL *);
extern NCURSES_EXPORT(int) _nc_setupterm(const char *, int, int *, int);
extern NCURSES_EXPORT(void) _nc_tinfo_cmdch(TERMINAL *, int);
#ifdef USE_PTHREADS
extern NCURSES_EXPORT(SCREEN *) _nc_find_prescr(void);
extern NCURSES_EXPORT(void) _nc_forget_prescr(void);
#else
#define _nc_find_prescr() _nc_prescreen.allocated
#define _nc_forget_prescr() _nc_prescreen.allocated = 0
#endif
/* lib_set_term.c */
extern NCURSES_EXPORT(int) _nc_ripoffline(int, int(*)(WINDOW*, int));
/* lib_setup.c */
#define ExitTerminfo(code) exit_terminfo(code)
#define SETUP_FAIL ERR
#define ret_error(rc, fmt, p, q) if (errret) {\
*errret = rc;\
q;\
returnCode(SETUP_FAIL);\
} else {\
fprintf(stderr, fmt, p);\
q;\
ExitTerminfo(EXIT_FAILURE);\
}
#define ret_error1(rc, fmt, p, q) ret_error(rc, "'%s': " fmt, p, q)
#define ret_error0(rc, msg) if (errret) {\
*errret = rc;\
returnCode(SETUP_FAIL);\
} else {\
fprintf(stderr, msg);\
ExitTerminfo(EXIT_FAILURE);\
}
/* lib_tstp.c */
#if USE_SIGWINCH
extern NCURSES_EXPORT(int) _nc_handle_sigwinch(SCREEN *);
#else
#define _nc_handle_sigwinch(a) /* nothing */
#endif
/* lib_wacs.c */
#if USE_WIDEC_SUPPORT
extern NCURSES_EXPORT(void) _nc_init_wacs(void);
#endif
typedef struct {
char *s_head; /* beginning of the string (may be null) */
char *s_tail; /* end of the string (may be null) */
size_t s_size; /* current remaining size available */
size_t s_init; /* total size available */
} string_desc;
/* strings.c */
extern NCURSES_EXPORT(string_desc *) _nc_str_init (string_desc *, char *, size_t);
extern NCURSES_EXPORT(string_desc *) _nc_str_null (string_desc *, size_t);
extern NCURSES_EXPORT(string_desc *) _nc_str_copy (string_desc *, string_desc *);
extern NCURSES_EXPORT(bool) _nc_safe_strcat (string_desc *, const char *);
extern NCURSES_EXPORT(bool) _nc_safe_strcpy (string_desc *, const char *);
#if !HAVE_STRSTR
#define strstr _nc_strstr
extern NCURSES_EXPORT(char *) _nc_strstr (const char *, const char *);
#endif
/* safe_sprintf.c */
extern NCURSES_EXPORT(char *) _nc_printf_string (const char *, va_list);
/* tries.c */
extern NCURSES_EXPORT(int) _nc_add_to_try (TRIES **, const char *, unsigned);
extern NCURSES_EXPORT(char *) _nc_expand_try (TRIES *, unsigned, int *, size_t);
extern NCURSES_EXPORT(int) _nc_remove_key (TRIES **, unsigned);
extern NCURSES_EXPORT(int) _nc_remove_string (TRIES **, const char *);
/* elsewhere ... */
extern NCURSES_EXPORT(SCREEN *) _nc_screen_of (WINDOW *);
extern NCURSES_EXPORT(TERMINAL*) _nc_get_cur_term (void);
extern NCURSES_EXPORT(WINDOW *) _nc_makenew (int, int, int, int, int);
extern NCURSES_EXPORT(char *) _nc_trace_buf (int, size_t);
extern NCURSES_EXPORT(char *) _nc_trace_bufcat (int, const char *);
extern NCURSES_EXPORT(char *) _nc_tracechar (SCREEN *, int);
extern NCURSES_EXPORT(char *) _nc_tracemouse (SCREEN *, MEVENT const *);
extern NCURSES_EXPORT(char *) _nc_trace_mmask_t (SCREEN *, mmask_t);
extern NCURSES_EXPORT(int) _nc_access (const char *, int);
extern NCURSES_EXPORT(int) _nc_baudrate (int);
extern NCURSES_EXPORT(ENTRY *) _nc_delink_entry (ENTRY *, TERMTYPE2 *);
extern NCURSES_EXPORT(int) _nc_freewin (WINDOW *);
extern NCURSES_EXPORT(int) _nc_getenv_num (const char *);
extern NCURSES_EXPORT(int) _nc_keypad (SCREEN *, int);
extern NCURSES_EXPORT(int) _nc_ospeed (int);
extern NCURSES_EXPORT(int) _nc_outch (int);
extern NCURSES_EXPORT(int) _nc_putchar (int);
extern NCURSES_EXPORT(int) _nc_putp(const char *, const char *);
extern NCURSES_EXPORT(int) _nc_putp_flush(const char *, const char *);
extern NCURSES_EXPORT(int) _nc_read_termcap_entry (const char *const, TERMTYPE2 *const);
extern NCURSES_EXPORT(int) _nc_setup_tinfo(const char *, TERMTYPE2 *);
extern NCURSES_EXPORT(int) _nc_setupscreen (int, int, FILE *, int, int);
extern NCURSES_EXPORT(int) _nc_timed_wait (SCREEN *, int, int, int * EVENTLIST_2nd(_nc_eventlist *));
extern NCURSES_EXPORT(void) _nc_init_termtype (TERMTYPE2 *const);
extern NCURSES_EXPORT(void) _nc_do_color (int, int, int, NCURSES_OUTC);
extern NCURSES_EXPORT(void) _nc_flush (void);
extern NCURSES_EXPORT(void) _nc_free_entry (ENTRY *, TERMTYPE2 *);
extern NCURSES_EXPORT(void) _nc_freeall (void);
extern NCURSES_EXPORT(void) _nc_hash_map (void);
extern NCURSES_EXPORT(void) _nc_init_keytry (SCREEN *);
extern NCURSES_EXPORT(void) _nc_keep_tic_dir (const char *);
extern NCURSES_EXPORT(void) _nc_make_oldhash (int i);
extern NCURSES_EXPORT(void) _nc_scroll_oldhash (int n, int top, int bot);
extern NCURSES_EXPORT(void) _nc_scroll_optimize (void);
extern NCURSES_EXPORT(void) _nc_set_buffer (FILE *, int);
extern NCURSES_EXPORT(void) _nc_setenv_num (const char *, int);
extern NCURSES_EXPORT(void) _nc_signal_handler (int);
extern NCURSES_EXPORT(void) _nc_synchook (WINDOW *);
extern NCURSES_EXPORT(void) _nc_trace_tries (TRIES *);
#if NCURSES_EXT_NUMBERS
extern NCURSES_EXPORT(const TERMTYPE2 *) _nc_fallback2 (const char *);
#else
#define _nc_fallback2(tp) _nc_fallback(tp)
#endif
#if NCURSES_EXT_NUMBERS
extern NCURSES_EXPORT(void) _nc_copy_termtype2 (TERMTYPE2 *, const TERMTYPE2 *);
extern NCURSES_EXPORT(void) _nc_export_termtype2(TERMTYPE *, const TERMTYPE2 *);
#else
#define _nc_copy_termtype2(dst,src) _nc_copy_termtype((dst),(src))
#define _nc_export_termtype2(dst,src) /* nothing */
#define _nc_free_termtype2(t) _nc_free_termtype(t)
/* also... */
#define _nc_read_entry2 _nc_read_entry
#endif
#if NO_LEAKS
extern NCURSES_EXPORT(void) _nc_alloc_entry_leaks(void);
extern NCURSES_EXPORT(void) _nc_captoinfo_leaks(void);
extern NCURSES_EXPORT(void) _nc_codes_leaks(void);
extern NCURSES_EXPORT(void) _nc_comp_captab_leaks(void);
extern NCURSES_EXPORT(void) _nc_comp_error_leaks(void);
extern NCURSES_EXPORT(void) _nc_comp_scan_leaks(void);
extern NCURSES_EXPORT(void) _nc_comp_userdefs_leaks(void);
extern NCURSES_EXPORT(void) _nc_db_iterator_leaks(void);
extern NCURSES_EXPORT(void) _nc_keyname_leaks(void);
extern NCURSES_EXPORT(void) _nc_names_leaks(void);
extern NCURSES_EXPORT(void) _nc_tgetent_leak(TERMINAL *);
extern NCURSES_EXPORT(void) _nc_tgetent_leaks(void);
#endif
#if !(defined(USE_TERMLIB) || defined(USE_BUILD_CC))
extern NCURSES_EXPORT(NCURSES_CH_T) _nc_render (WINDOW *, NCURSES_CH_T);
extern NCURSES_EXPORT(int) _nc_waddch_nosync (WINDOW *, const NCURSES_CH_T);
extern NCURSES_EXPORT(void) _nc_scroll_window (WINDOW *, int const, int const, int const, NCURSES_CH_T);
#endif
#if USE_WIDEC_SUPPORT
extern NCURSES_EXPORT(int) _nc_insert_wch(WINDOW *, const cchar_t *);
#endif
#if USE_WIDEC_SUPPORT && !(defined(USE_TERMLIB) || defined(USE_BUILD_CC))
extern NCURSES_EXPORT(size_t) _nc_wcrtomb (char *, wchar_t, mbstate_t *);
#endif
#if USE_SIZECHANGE
extern NCURSES_EXPORT(void) _nc_update_screensize (SCREEN *);
#endif
#if HAVE_RESIZETERM
extern NCURSES_EXPORT(void) _nc_resize_margins (WINDOW *);
#else
#define _nc_resize_margins(wp) /* nothing */
#endif
#ifdef NCURSES_WGETCH_EVENTS
extern NCURSES_EXPORT(int) _nc_eventlist_timeout(_nc_eventlist *);
#else
#define wgetch_events(win, evl) wgetch(win)
#define wgetnstr_events(win, str, maxlen, evl) wgetnstr(win, str, maxlen)
#endif
/*
* Wide-character macros to hide some platform-differences.
*/
#if USE_WIDEC_SUPPORT
-#if defined(_WIN32)
+#if defined(_NC_WINDOWS) && !defined(_NC_MSC) && !defined(EXP_WIN32_DRIVER)
/*
* MinGW has wide-character functions, but they do not work correctly.
*/
-
extern int __MINGW_NOTHROW _nc_wctomb(char *, wchar_t);
#define wctomb(s,wc) _nc_wctomb(s,wc)
#define wcrtomb(s,wc,n) _nc_wctomb(s,wc)
extern int __MINGW_NOTHROW _nc_mbtowc(wchar_t *, const char *, size_t);
#define mbtowc(pwc,s,n) _nc_mbtowc(pwc,s,n)
extern int __MINGW_NOTHROW _nc_mblen(const char *, size_t);
#define mblen(s,n) _nc_mblen(s, n)
-#endif /* _WIN32 */
+#endif /* _NC_WINDOWS && !_NC_MSC */
#if HAVE_MBTOWC && HAVE_MBLEN
#define reset_mbytes(state) IGNORE_RC(mblen(NULL, (size_t) 0)), IGNORE_RC(mbtowc(NULL, NULL, (size_t) 0))
#define count_mbytes(buffer,length,state) mblen(buffer,length)
#define check_mbytes(wch,buffer,length,state) \
(int) mbtowc(&wch, buffer, length)
#define state_unused
#elif HAVE_MBRTOWC && HAVE_MBRLEN
#define reset_mbytes(state) init_mb(state)
#define count_mbytes(buffer,length,state) mbrlen(buffer,length,&state)
#define check_mbytes(wch,buffer,length,state) \
(int) mbrtowc(&wch, buffer, length, &state)
#else
make an error
#endif
#endif /* USE_WIDEC_SUPPORT */
/*
* Not everyone has vsscanf(), but we'd like to use it for scanw().
*/
#if !HAVE_VSSCANF
extern int vsscanf(const char *str, const char *format, va_list __arg);
#endif
/* scroll indices */
extern NCURSES_EXPORT_VAR(int *) _nc_oldnums;
#define USE_SETBUF_0 0
#define NC_OUTPUT(sp) ((sp != 0 && sp->_ofp != 0) ? sp->_ofp : stdout)
/*
* On systems with a broken linker, define 'SP' as a function to force the
* linker to pull in the data-only module with 'SP'.
*/
#define _nc_alloc_screen_sp() typeCalloc(SCREEN, 1)
#if BROKEN_LINKER
#define SP _nc_screen()
extern NCURSES_EXPORT(SCREEN *) _nc_screen (void);
extern NCURSES_EXPORT(int) _nc_alloc_screen (void);
extern NCURSES_EXPORT(void) _nc_set_screen (SCREEN *);
#define CURRENT_SCREEN _nc_screen()
#else
/* current screen is private data; avoid possible linking conflicts too */
extern NCURSES_EXPORT_VAR(SCREEN *) SP;
#define CURRENT_SCREEN SP
#define _nc_alloc_screen() ((SP = _nc_alloc_screen_sp()) != 0)
#define _nc_set_screen(sp) SP = sp
#endif
#if NCURSES_SP_FUNCS
#define CURRENT_SCREEN_PRE (IsPreScreen(CURRENT_SCREEN) ? CURRENT_SCREEN : new_prescr())
#else
#define CURRENT_SCREEN_PRE CURRENT_SCREEN
#endif
/*
* We don't want to use the lines or columns capabilities internally, because
* if the application is running multiple screens under X, it's quite possible
* they could all have type xterm but have different sizes! So...
*/
#define screen_lines(sp) (sp)->_lines
#define screen_columns(sp) (sp)->_columns
extern NCURSES_EXPORT(int) _nc_slk_initialize (WINDOW *, int);
extern NCURSES_EXPORT(int) _nc_format_slks (NCURSES_SP_DCLx int _c);
/*
* Some constants related to SLK's
*/
#define MAX_SKEY_OLD 8 /* count of soft keys */
#define MAX_SKEY_LEN_OLD 8 /* max length of soft key text */
#define MAX_SKEY_PC 12 /* This is what most PC's have */
#define MAX_SKEY_LEN_PC 5
/* Macro to check whether or not we use a standard format */
#define SLK_STDFMT(fmt) (fmt < 3)
/* Macro to determine height of label window */
#define SLK_LINES(fmt) (SLK_STDFMT(fmt) ? 1 : ((fmt) - 2))
#define MAX_SKEY(fmt) (SLK_STDFMT(fmt)? MAX_SKEY_OLD : MAX_SKEY_PC)
#define MAX_SKEY_LEN(fmt) (SLK_STDFMT(fmt)? MAX_SKEY_LEN_OLD : MAX_SKEY_LEN_PC)
/*
* Common error messages
*/
#define MSG_NO_MEMORY "Out of memory"
#define MSG_NO_INPUTS "Premature EOF"
extern NCURSES_EXPORT(int) _nc_set_tty_mode(TTY *);
extern NCURSES_EXPORT(int) _nc_get_tty_mode(TTY *);
/* timed_wait flag definitions */
#define TW_NONE 0
#define TW_INPUT 1
#define TW_MOUSE 2
#define TW_ANY (TW_INPUT | TW_MOUSE)
#define TW_EVENT 4
#define SetSafeOutcWrapper(outc) \
SCREEN* sp = CURRENT_SCREEN; \
struct screen outc_wrapper; \
if (sp==0) { \
sp = &outc_wrapper; \
memset(sp,0,sizeof(struct screen)); \
sp->_outch = _nc_outc_wrapper; \
}\
sp->jump = outc
#ifdef USE_TERM_DRIVER
typedef struct _termInfo
{
bool caninit;
bool hascolor;
bool initcolor;
bool canchange;
int tabsize;
int maxcolors;
int maxpairs;
int nocolorvideo;
int numbuttons;
int numlabels;
int labelwidth;
int labelheight;
const color_t* defaultPalette;
} TerminalInfo;
typedef struct term_driver {
bool isTerminfo;
const char* (*td_name)(struct DriverTCB*);
bool (*td_CanHandle)(struct DriverTCB*, const char*, int*);
void (*td_init)(struct DriverTCB*);
void (*td_release)(struct DriverTCB*);
int (*td_size)(struct DriverTCB*, int* Line, int *Cols);
int (*td_sgmode)(struct DriverTCB*, int setFlag, TTY*);
chtype (*td_conattr)(struct DriverTCB*);
int (*td_hwcur)(struct DriverTCB*, int yold, int xold, int y, int x);
int (*td_mode)(struct DriverTCB*, int progFlag, int defFlag);
bool (*td_rescol)(struct DriverTCB*);
bool (*td_rescolors)(struct DriverTCB*);
void (*td_color)(struct DriverTCB*, int fore, int color, int(*)(SCREEN*, int));
int (*td_doBeepOrFlash)(struct DriverTCB*, int);
void (*td_initpair)(struct DriverTCB*, int, int, int);
void (*td_initcolor)(struct DriverTCB*, int, int, int, int);
void (*td_docolor)(struct DriverTCB*, int, int, int, int(*)(SCREEN*, int));
void (*td_initmouse)(struct DriverTCB*);
int (*td_testmouse)(struct DriverTCB*, int EVENTLIST_2nd(_nc_eventlist*));
void (*td_setfilter)(struct DriverTCB*);
void (*td_hwlabel)(struct DriverTCB*, int, char*);
void (*td_hwlabelOnOff)(struct DriverTCB*, int);
int (*td_update)(struct DriverTCB*);
int (*td_defaultcolors)(struct DriverTCB*, int, int);
int (*td_print)(struct DriverTCB*, char*, int);
int (*td_getsize)(struct DriverTCB*, int*, int*);
int (*td_setsize)(struct DriverTCB*, int, int);
void (*td_initacs)(struct DriverTCB*, chtype*, chtype*);
void (*td_scinit)(SCREEN *);
void (*td_scexit)(SCREEN *);
int (*td_twait)(struct DriverTCB*, int, int, int* EVENTLIST_2nd(_nc_eventlist*));
int (*td_read)(struct DriverTCB*, int*);
int (*td_nap)(struct DriverTCB*, int);
int (*td_kpad)(struct DriverTCB*, int);
int (*td_kyOk)(struct DriverTCB*, int, int);
bool (*td_kyExist)(struct DriverTCB*, int);
int (*td_cursorSet)(struct DriverTCB*, int);
} TERM_DRIVER;
typedef struct DriverTCB
{
TERMINAL term; /* needs to be the first Element !!! */
TERM_DRIVER* drv; /* The driver for that Terminal */
SCREEN* csp; /* The screen that owns that Terminal */
TerminalInfo info; /* Driver independent core capabilities of the Terminal */
void* prop; /* Driver dependent property storage to be used by the Driver */
long magic;
} TERMINAL_CONTROL_BLOCK;
#define NCDRV_MAGIC(id) (0x47110000 | (id&0xffff))
#define NCDRV_TINFO 0x01
#define NCDRV_WINCONSOLE 0x02
#define TCBOf(sp) ((TERMINAL_CONTROL_BLOCK*)(TerminalOf(sp)))
#define InfoOf(sp) TCBOf(sp)->info
#define CallDriver(sp,method) TCBOf(sp)->drv->method(TCBOf(sp))
#define CallDriver_1(sp,method,arg1) TCBOf(sp)->drv->method(TCBOf(sp),arg1)
#define CallDriver_2(sp,method,arg1,arg2) TCBOf(sp)->drv->method(TCBOf(sp),arg1,arg2)
#define CallDriver_3(sp,method,arg1,arg2,arg3) TCBOf(sp)->drv->method(TCBOf(sp),arg1,arg2,arg3)
#define CallDriver_4(sp,method,arg1,arg2,arg3,arg4) TCBOf(sp)->drv->method(TCBOf(sp),arg1,arg2,arg3,arg4)
extern NCURSES_EXPORT_VAR(const color_t*) _nc_cga_palette;
extern NCURSES_EXPORT_VAR(const color_t*) _nc_hls_palette;
extern NCURSES_EXPORT(int) _nc_get_driver(TERMINAL_CONTROL_BLOCK*, const char*, int*);
extern NCURSES_EXPORT(void) _nc_get_screensize_ex(SCREEN *, TERMINAL *, int *, int *);
#endif /* USE_TERM_DRIVER */
/*
* Entrypoints which are actually provided in the terminal driver, which would
* be an sp-name otherwise.
*/
#ifdef USE_TERM_DRIVER
#define TINFO_HAS_KEY _nc_tinfo_has_key
#define TINFO_DOUPDATE _nc_tinfo_doupdate
#define TINFO_MVCUR _nc_tinfo_mvcur
extern NCURSES_EXPORT(int) TINFO_HAS_KEY(SCREEN*, int);
extern NCURSES_EXPORT(int) TINFO_DOUPDATE(SCREEN *);
extern NCURSES_EXPORT(int) TINFO_MVCUR(SCREEN*, int, int, int, int);
#else
#define TINFO_HAS_KEY NCURSES_SP_NAME(has_key)
#define TINFO_DOUPDATE NCURSES_SP_NAME(doupdate)
#define TINFO_MVCUR NCURSES_SP_NAME(_nc_mvcur)
#endif
+#if defined(EXP_WIN32_DRIVER)
+#include <nc_win32.h>
+#endif
+
/*
* Entrypoints using an extra parameter with the terminal driver.
*/
#ifdef USE_TERM_DRIVER
extern NCURSES_EXPORT(void) _nc_get_screensize(SCREEN *, TERMINAL *, int *, int *);
extern NCURSES_EXPORT(int) _nc_setupterm_ex(TERMINAL **, const char *, int , int *, int);
#define TINFO_GET_SIZE(sp, tp, lp, cp) \
_nc_get_screensize(sp, tp, lp, cp)
#define TINFO_SET_CURTERM(sp, tp) \
NCURSES_SP_NAME(set_curterm)(sp, tp)
#define TINFO_SETUP_TERM(tpp, name, fd, err, reuse) \
_nc_setupterm_ex(tpp, name, fd, err, reuse)
#else /* !USE_TERM_DRIVER */
extern NCURSES_EXPORT(void) _nc_get_screensize(SCREEN *, int *, int *);
#define TINFO_GET_SIZE(sp, tp, lp, cp) \
_nc_get_screensize(sp, lp, cp)
#define TINFO_SET_CURTERM(sp, tp) \
set_curterm(tp)
#define TINFO_SETUP_TERM(tpp, name, fd, err, reuse) \
_nc_setupterm(name, fd, err, reuse)
#endif /* !USE_TERM_DRIVER */
+#ifdef EXP_WIN32_DRIVER
+extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_TINFO_DRIVER;
+#else
#ifdef USE_TERM_DRIVER
#if defined(USE_WIN32CON_DRIVER)
#include <nc_mingw.h>
extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_WIN_DRIVER;
extern NCURSES_EXPORT(int) _nc_mingw_isatty(int fd);
extern NCURSES_EXPORT(int) _nc_mingw_isconsole(int fd);
extern NCURSES_EXPORT(int) _nc_mingw_console_read(
SCREEN *sp,
HANDLE fd,
int *buf);
extern NCURSES_EXPORT(int) _nc_mingw_testmouse(
SCREEN * sp,
HANDLE fd,
int delay EVENTLIST_2nd(_nc_eventlist*));
#else
#endif
extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_TINFO_DRIVER;
-#endif
+#endif /* USE_TERM_DRIVER */
+#endif /* EXP_WIN32_DRIVER */
-#if defined(USE_TERM_DRIVER) && defined(USE_WIN32CON_DRIVER)
+#if defined(USE_TERM_DRIVER) && defined(EXP_WIN32_DRIVER)
+#define NC_ISATTY(fd) (0 != _nc_console_isatty(fd))
+#elif defined(USE_TERM_DRIVER) && defined(USE_WIN32CON_DRIVER)
#define NC_ISATTY(fd) _nc_mingw_isatty(fd)
#else
#define NC_ISATTY(fd) isatty(fd)
#endif
#ifdef USE_TERM_DRIVER
# define IsTermInfo(sp) ((TCBOf(sp) != 0) && ((TCBOf(sp)->drv->isTerminfo)))
# define HasTInfoTerminal(sp) ((0 != TerminalOf(sp)) && IsTermInfo(sp))
-# if defined(USE_WIN32CON_DRIVER)
+# if defined(EXP_WIN32_DRIVER)
+# define IsTermInfoOnConsole(sp) (IsTermInfo(sp)&&_nc_console_test(TerminalOf(sp)->Filedes))
+# elif defined(USE_WIN32CON_DRIVER)
# define IsTermInfoOnConsole(sp) (IsTermInfo(sp)&&_nc_mingw_isconsole(TerminalOf(sp)->Filedes))
-#else
+# else
# define IsTermInfoOnConsole(sp) FALSE
# endif
#else
# define IsTermInfo(sp) TRUE
# define HasTInfoTerminal(sp) (0 != TerminalOf(sp))
-# define IsTermInfoOnConsole(sp) FALSE
+# if defined(EXP_WIN32_DRIVER)
+# define IsTermInfoOnConsole(sp) _nc_console_test(TerminalOf(sp)->Filedes)
+# else
+# define IsTermInfoOnConsole(sp) FALSE
+# endif
#endif
#define IsValidTIScreen(sp) (HasTInfoTerminal(sp))
/*
* Exported entrypoints beyond the published API
*/
#if NCURSES_SP_FUNCS
extern NCURSES_EXPORT(WINDOW *) _nc_curscr_of(SCREEN*);
extern NCURSES_EXPORT(WINDOW *) _nc_newscr_of(SCREEN*);
extern NCURSES_EXPORT(WINDOW *) _nc_stdscr_of(SCREEN*);
extern NCURSES_EXPORT(int) _nc_outc_wrapper(SCREEN*,int);
#if USE_REENTRANT
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_TABSIZE)(SCREEN*);
extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(longname)(SCREEN*);
#endif
#if NCURSES_EXT_FUNCS
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_set_tabsize)(SCREEN*, int);
#endif
/*
* We put the safe versions of various calls here as they are not published
* part of the API up to now
*/
extern NCURSES_EXPORT(TERMINAL*) NCURSES_SP_NAME(_nc_get_cur_term) (SCREEN *sp);
extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(_nc_makenew) (SCREEN*, int, int, int, int, int);
extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(_nc_reset_colors)(SCREEN*);
extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(_nc_printf_string)(SCREEN*, const char *, va_list);
extern NCURSES_EXPORT(chtype) NCURSES_SP_NAME(_nc_acs_char)(SCREEN*,int);
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_get_tty_mode)(SCREEN*,TTY*);
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_mcprint)(SCREEN*,char*, int);
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_msec_cost)(SCREEN*, const char *, int);
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_mvcur)(SCREEN*, int, int, int, int);
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_outch)(SCREEN*, int);
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_putchar)(SCREEN*, int);
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_putp)(SCREEN*, const char *, const char*);
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_putp_flush)(SCREEN*, const char *, const char *);
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_ripoffline)(SCREEN*, int, int (*)(WINDOW *,int));
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_scrolln)(SCREEN*, int, int, int, int);
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_set_tty_mode)(SCREEN*, TTY*);
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_setupscreen)(SCREEN**, int, int, FILE *, int, int);
extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_tgetent)(SCREEN*,char*,const char *);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_do_color)(SCREEN*, int, int, int, NCURSES_SP_OUTC);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_do_xmc_glitch)(SCREEN*, attr_t);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_flush)(SCREEN*);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_free_and_exit)(SCREEN*, int) GCC_NORETURN;
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_freeall)(SCREEN*);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_hash_map)(SCREEN*);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_init_acs)(SCREEN*);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_make_oldhash)(SCREEN*, int i);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_mvcur_init)(SCREEN*);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_mvcur_resume)(SCREEN*);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_mvcur_wrap)(SCREEN*);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_screen_init)(SCREEN*);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_screen_resume)(SCREEN*);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_screen_wrap)(SCREEN*);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_scroll_oldhash)(SCREEN*, int n, int top, int bot);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_scroll_optimize)(SCREEN*);
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_set_buffer)(SCREEN*, FILE *, int);
extern NCURSES_EXPORT(void) _nc_cookie_init(SCREEN *sp);
#if defined(TRACE) || defined(SCROLLDEBUG) || defined(HASHDEBUG)
extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_linedump)(SCREEN*);
#endif
#if USE_WIDEC_SUPPORT
extern NCURSES_EXPORT(wchar_t *) NCURSES_SP_NAME(_nc_wunctrl)(SCREEN*, cchar_t *);
#endif
#endif /* NCURSES_SP_FUNCS */
#if NCURSES_SP_FUNCS
#define safe_keyname NCURSES_SP_NAME(keyname)
#define safe_unctrl NCURSES_SP_NAME(unctrl)
#define safe_ungetch NCURSES_SP_NAME(ungetch)
#else
#define safe_keyname _nc_keyname
#define safe_unctrl _nc_unctrl
#define safe_ungetch _nc_ungetch
extern NCURSES_EXPORT(NCURSES_CONST char *) _nc_keyname (SCREEN *, int);
extern NCURSES_EXPORT(int) _nc_ungetch (SCREEN *, int);
extern NCURSES_EXPORT(NCURSES_CONST char *) _nc_unctrl (SCREEN *, chtype);
#endif
#ifdef EXP_XTERM_1005
NCURSES_EXPORT(int) _nc_conv_to_utf8(unsigned char *, unsigned, unsigned);
NCURSES_EXPORT(int) _nc_conv_to_utf32(unsigned *, const char *, unsigned);
#endif
#ifdef __cplusplus
}
#endif
/* *INDENT-ON* */
#endif /* CURSES_PRIV_H */
diff --git a/contrib/ncurses/ncurses/llib-lncurses b/contrib/ncurses/ncurses/llib-lncurses
index 642c68d6ce5f..3033100792bf 100644
--- a/contrib/ncurses/ncurses/llib-lncurses
+++ b/contrib/ncurses/ncurses/llib-lncurses
@@ -1,4419 +1,4426 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 1996-on *
****************************************************************************/
/* LINTLIBRARY */
/* ./tty/hardscroll.c */
#include <curses.priv.h>
#undef _nc_oldnums
int *_nc_oldnums;
#undef _nc_scroll_optimize_sp
void _nc_scroll_optimize_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_scroll_optimize
void _nc_scroll_optimize(void)
{ /* void */ }
#undef _nc_linedump_sp
void _nc_linedump_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_linedump
void _nc_linedump(void)
{ /* void */ }
/* ./tty/hashmap.c */
#undef _nc_hash_map_sp
void _nc_hash_map_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_hash_map
void _nc_hash_map(void)
{ /* void */ }
#undef _nc_make_oldhash_sp
void _nc_make_oldhash_sp(
SCREEN *sp,
int i)
{ /* void */ }
#undef _nc_make_oldhash
void _nc_make_oldhash(
int i)
{ /* void */ }
#undef _nc_scroll_oldhash_sp
void _nc_scroll_oldhash_sp(
SCREEN *sp,
int n,
int top,
int bot)
{ /* void */ }
#undef _nc_scroll_oldhash
void _nc_scroll_oldhash(
int n,
int top,
int bot)
{ /* void */ }
/* ./base/lib_addch.c */
#undef _nc_render
chtype _nc_render(
WINDOW *win,
chtype ch)
{ return(*(chtype *)0); }
#undef _nc_waddch_nosync
int _nc_waddch_nosync(
WINDOW *win,
const chtype c)
{ return(*(int *)0); }
#undef waddch
int waddch(
WINDOW *win,
const chtype ch)
{ return(*(int *)0); }
#undef wechochar
int wechochar(
WINDOW *win,
const chtype ch)
{ return(*(int *)0); }
/* ./base/lib_addstr.c */
#undef waddnstr
int waddnstr(
WINDOW *win,
const char *astr,
int n)
{ return(*(int *)0); }
#undef waddchnstr
int waddchnstr(
WINDOW *win,
const chtype *astr,
int n)
{ return(*(int *)0); }
/* ./base/lib_beep.c */
#undef beep_sp
int beep_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef beep
int beep(void)
{ return(*(int *)0); }
/* ./base/lib_bkgd.c */
#undef wbkgdset
void wbkgdset(
WINDOW *win,
chtype ch)
{ /* void */ }
#undef wbkgd
int wbkgd(
WINDOW *win,
chtype ch)
{ return(*(int *)0); }
/* ./base/lib_box.c */
#undef wborder
int wborder(
WINDOW *win,
chtype ls,
chtype rs,
chtype ts,
chtype bs,
chtype tl,
chtype tr,
chtype bl,
chtype br)
{ return(*(int *)0); }
/* ./base/lib_chgat.c */
#undef wchgat
int wchgat(
WINDOW *win,
int n,
attr_t attr,
short pair_arg,
const void *opts)
{ return(*(int *)0); }
/* ./base/lib_clear.c */
#undef wclear
int wclear(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_clearok.c */
#undef clearok
int clearok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/lib_clrbot.c */
#undef wclrtobot
int wclrtobot(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_clreol.c */
#undef wclrtoeol
int wclrtoeol(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_color.c */
#undef COLOR_PAIRS
int COLOR_PAIRS;
#undef COLORS
int COLORS;
#undef _nc_reset_colors_sp
NCURSES_BOOL _nc_reset_colors_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_reset_colors
NCURSES_BOOL _nc_reset_colors(void)
{ return(*(NCURSES_BOOL *)0); }
#undef start_color_sp
int start_color_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef start_color
int start_color(void)
{ return(*(int *)0); }
#undef _nc_change_pair
void _nc_change_pair(
SCREEN *sp,
int pair)
{ /* void */ }
#undef _nc_reserve_pairs
void _nc_reserve_pairs(
SCREEN *sp,
int want)
{ /* void */ }
#undef _nc_init_pair
int _nc_init_pair(
SCREEN *sp,
int pair,
int f,
int b)
{ return(*(int *)0); }
#undef init_pair_sp
int init_pair_sp(
SCREEN *sp,
short pair,
short f,
short b)
{ return(*(int *)0); }
#undef init_pair
int init_pair(
short pair,
short f,
short b)
{ return(*(int *)0); }
#undef _nc_init_color
int _nc_init_color(
SCREEN *sp,
int color,
int r,
int g,
int b)
{ return(*(int *)0); }
#undef init_color_sp
int init_color_sp(
SCREEN *sp,
short color,
short r,
short g,
short b)
{ return(*(int *)0); }
#undef init_color
int init_color(
short color,
short r,
short g,
short b)
{ return(*(int *)0); }
#undef can_change_color_sp
NCURSES_BOOL can_change_color_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef can_change_color
NCURSES_BOOL can_change_color(void)
{ return(*(NCURSES_BOOL *)0); }
#undef has_colors_sp
NCURSES_BOOL has_colors_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_colors
NCURSES_BOOL has_colors(void)
{ return(*(NCURSES_BOOL *)0); }
#undef color_content_sp
int color_content_sp(
SCREEN *sp,
short color,
short *r,
short *g,
short *b)
{ return(*(int *)0); }
#undef color_content
int color_content(
short color,
short *r,
short *g,
short *b)
{ return(*(int *)0); }
#undef _nc_pair_content
int _nc_pair_content(
SCREEN *sp,
int pair,
int *f,
int *b)
{ return(*(int *)0); }
#undef pair_content_sp
int pair_content_sp(
SCREEN *sp,
short pair,
short *f,
short *b)
{ return(*(int *)0); }
#undef pair_content
int pair_content(
short pair,
short *f,
short *b)
{ return(*(int *)0); }
#undef _nc_do_color_sp
void _nc_do_color_sp(
SCREEN *sp,
int old_pair,
int pair,
int reverse,
NCURSES_OUTC_sp outc)
{ /* void */ }
#undef _nc_do_color
void _nc_do_color(
int old_pair,
int pair,
int reverse,
NCURSES_OUTC outc)
{ /* void */ }
/* ./base/lib_colorset.c */
#undef wcolor_set
int wcolor_set(
WINDOW *win,
short pair_arg,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_delch.c */
#undef wdelch
int wdelch(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_delwin.c */
#undef delwin
int delwin(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_echo.c */
#undef echo_sp
int echo_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef echo
int echo(void)
{ return(*(int *)0); }
#undef noecho_sp
int noecho_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef noecho
int noecho(void)
{ return(*(int *)0); }
/* ./base/lib_endwin.c */
#undef endwin_sp
int endwin_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef endwin
int endwin(void)
{ return(*(int *)0); }
/* ./base/lib_erase.c */
#undef werase
int werase(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_flash.c */
#undef flash_sp
int flash_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef flash
int flash(void)
{ return(*(int *)0); }
/* ./lib_gen.c */
#undef addch
-int (addch)(
+int addch(
const chtype z)
{ return(*(int *)0); }
#undef addchnstr
-int (addchnstr)(
+int addchnstr(
const chtype *a1,
int z)
{ return(*(int *)0); }
#undef addchstr
-int (addchstr)(
+int addchstr(
const chtype *z)
{ return(*(int *)0); }
#undef addnstr
-int (addnstr)(
+int addnstr(
const char *a1,
int z)
{ return(*(int *)0); }
#undef addstr
-int (addstr)(
+int addstr(
const char *z)
{ return(*(int *)0); }
#undef attroff
-int (attroff)(
- NCURSES_ATTR_T z)
+int attroff(
+ int z)
{ return(*(int *)0); }
#undef attron
-int (attron)(
- NCURSES_ATTR_T z)
+int attron(
+ int z)
{ return(*(int *)0); }
#undef attrset
-int (attrset)(
- NCURSES_ATTR_T z)
+int attrset(
+ int z)
{ return(*(int *)0); }
#undef attr_get
-int (attr_get)(
+int attr_get(
attr_t *a1,
short *a2,
void *z)
{ return(*(int *)0); }
#undef attr_off
-int (attr_off)(
+int attr_off(
attr_t a1,
void *z)
{ return(*(int *)0); }
#undef attr_on
-int (attr_on)(
+int attr_on(
attr_t a1,
void *z)
{ return(*(int *)0); }
#undef attr_set
-int (attr_set)(
+int attr_set(
attr_t a1,
short a2,
void *z)
{ return(*(int *)0); }
#undef bkgd
-int (bkgd)(
+int bkgd(
chtype z)
{ return(*(int *)0); }
#undef bkgdset
-void (bkgdset)(
+void bkgdset(
chtype z)
{ /* void */ }
#undef border
-int (border)(
+int border(
chtype a1,
chtype a2,
chtype a3,
chtype a4,
chtype a5,
chtype a6,
chtype a7,
chtype z)
{ return(*(int *)0); }
#undef box
-int (box)(
+int box(
WINDOW *a1,
chtype a2,
chtype z)
{ return(*(int *)0); }
#undef chgat
-int (chgat)(
+int chgat(
int a1,
attr_t a2,
short a3,
const void *z)
{ return(*(int *)0); }
#undef clear
-int (clear)(void)
+int clear(void)
{ return(*(int *)0); }
#undef clrtobot
-int (clrtobot)(void)
+int clrtobot(void)
{ return(*(int *)0); }
#undef clrtoeol
-int (clrtoeol)(void)
+int clrtoeol(void)
{ return(*(int *)0); }
#undef color_set
-int (color_set)(
+int color_set(
short a1,
void *z)
{ return(*(int *)0); }
#undef COLOR_PAIR
-int (COLOR_PAIR)(
+int COLOR_PAIR(
int z)
{ return(*(int *)0); }
#undef delch
-int (delch)(void)
+int delch(void)
{ return(*(int *)0); }
#undef deleteln
-int (deleteln)(void)
+int deleteln(void)
{ return(*(int *)0); }
#undef echochar
-int (echochar)(
+int echochar(
const chtype z)
{ return(*(int *)0); }
#undef erase
-int (erase)(void)
+int erase(void)
{ return(*(int *)0); }
#undef getbkgd
-chtype (getbkgd)(
+chtype getbkgd(
WINDOW *z)
{ return(*(chtype *)0); }
#undef getch
-int (getch)(void)
+int getch(void)
{ return(*(int *)0); }
#undef getnstr
-int (getnstr)(
+int getnstr(
char *a1,
int z)
{ return(*(int *)0); }
#undef getstr
-int (getstr)(
+int getstr(
char *z)
{ return(*(int *)0); }
#undef hline
-int (hline)(
+int hline(
chtype a1,
int z)
{ return(*(int *)0); }
#undef inch
-chtype (inch)(void)
+chtype inch(void)
{ return(*(chtype *)0); }
#undef inchnstr
-int (inchnstr)(
+int inchnstr(
chtype *a1,
int z)
{ return(*(int *)0); }
#undef inchstr
-int (inchstr)(
+int inchstr(
chtype *z)
{ return(*(int *)0); }
#undef innstr
-int (innstr)(
+int innstr(
char *a1,
int z)
{ return(*(int *)0); }
#undef insch
-int (insch)(
+int insch(
chtype z)
{ return(*(int *)0); }
#undef insdelln
-int (insdelln)(
+int insdelln(
int z)
{ return(*(int *)0); }
#undef insertln
-int (insertln)(void)
+int insertln(void)
{ return(*(int *)0); }
#undef insnstr
-int (insnstr)(
+int insnstr(
const char *a1,
int z)
{ return(*(int *)0); }
#undef insstr
-int (insstr)(
+int insstr(
const char *z)
{ return(*(int *)0); }
#undef instr
-int (instr)(
+int instr(
char *z)
{ return(*(int *)0); }
#undef move
-int (move)(
+int move(
int a1,
int z)
{ return(*(int *)0); }
#undef mvaddch
-int (mvaddch)(
+int mvaddch(
int a1,
int a2,
const chtype z)
{ return(*(int *)0); }
#undef mvaddchnstr
-int (mvaddchnstr)(
+int mvaddchnstr(
int a1,
int a2,
const chtype *a3,
int z)
{ return(*(int *)0); }
#undef mvaddchstr
-int (mvaddchstr)(
+int mvaddchstr(
int a1,
int a2,
const chtype *z)
{ return(*(int *)0); }
#undef mvaddnstr
-int (mvaddnstr)(
+int mvaddnstr(
int a1,
int a2,
const char *a3,
int z)
{ return(*(int *)0); }
#undef mvaddstr
-int (mvaddstr)(
+int mvaddstr(
int a1,
int a2,
const char *z)
{ return(*(int *)0); }
#undef mvchgat
-int (mvchgat)(
+int mvchgat(
int a1,
int a2,
int a3,
attr_t a4,
short a5,
const void *z)
{ return(*(int *)0); }
#undef mvdelch
-int (mvdelch)(
+int mvdelch(
int a1,
int z)
{ return(*(int *)0); }
#undef mvgetch
-int (mvgetch)(
+int mvgetch(
int a1,
int z)
{ return(*(int *)0); }
#undef mvgetnstr
-int (mvgetnstr)(
+int mvgetnstr(
int a1,
int a2,
char *a3,
int z)
{ return(*(int *)0); }
#undef mvgetstr
-int (mvgetstr)(
+int mvgetstr(
int a1,
int a2,
char *z)
{ return(*(int *)0); }
#undef mvhline
-int (mvhline)(
+int mvhline(
int a1,
int a2,
chtype a3,
int z)
{ return(*(int *)0); }
#undef mvinch
-chtype (mvinch)(
+chtype mvinch(
int a1,
int z)
{ return(*(chtype *)0); }
#undef mvinchnstr
-int (mvinchnstr)(
+int mvinchnstr(
int a1,
int a2,
chtype *a3,
int z)
{ return(*(int *)0); }
#undef mvinchstr
-int (mvinchstr)(
+int mvinchstr(
int a1,
int a2,
chtype *z)
{ return(*(int *)0); }
#undef mvinnstr
-int (mvinnstr)(
+int mvinnstr(
int a1,
int a2,
char *a3,
int z)
{ return(*(int *)0); }
#undef mvinsch
-int (mvinsch)(
+int mvinsch(
int a1,
int a2,
chtype z)
{ return(*(int *)0); }
#undef mvinsnstr
-int (mvinsnstr)(
+int mvinsnstr(
int a1,
int a2,
const char *a3,
int z)
{ return(*(int *)0); }
#undef mvinsstr
-int (mvinsstr)(
+int mvinsstr(
int a1,
int a2,
const char *z)
{ return(*(int *)0); }
#undef mvinstr
-int (mvinstr)(
+int mvinstr(
int a1,
int a2,
char *z)
{ return(*(int *)0); }
#undef mvvline
-int (mvvline)(
+int mvvline(
int a1,
int a2,
chtype a3,
int z)
{ return(*(int *)0); }
#undef mvwaddch
-int (mvwaddch)(
+int mvwaddch(
WINDOW *a1,
int a2,
int a3,
const chtype z)
{ return(*(int *)0); }
#undef mvwaddchnstr
-int (mvwaddchnstr)(
+int mvwaddchnstr(
WINDOW *a1,
int a2,
int a3,
const chtype *a4,
int z)
{ return(*(int *)0); }
#undef mvwaddchstr
-int (mvwaddchstr)(
+int mvwaddchstr(
WINDOW *a1,
int a2,
int a3,
const chtype *z)
{ return(*(int *)0); }
#undef mvwaddnstr
-int (mvwaddnstr)(
+int mvwaddnstr(
WINDOW *a1,
int a2,
int a3,
const char *a4,
int z)
{ return(*(int *)0); }
#undef mvwaddstr
-int (mvwaddstr)(
+int mvwaddstr(
WINDOW *a1,
int a2,
int a3,
const char *z)
{ return(*(int *)0); }
#undef mvwchgat
-int (mvwchgat)(
+int mvwchgat(
WINDOW *a1,
int a2,
int a3,
int a4,
attr_t a5,
short a6,
const void *z)
{ return(*(int *)0); }
#undef mvwdelch
-int (mvwdelch)(
+int mvwdelch(
WINDOW *a1,
int a2,
int z)
{ return(*(int *)0); }
#undef mvwgetch
-int (mvwgetch)(
+int mvwgetch(
WINDOW *a1,
int a2,
int z)
{ return(*(int *)0); }
#undef mvwgetnstr
-int (mvwgetnstr)(
+int mvwgetnstr(
WINDOW *a1,
int a2,
int a3,
char *a4,
int z)
{ return(*(int *)0); }
#undef mvwgetstr
-int (mvwgetstr)(
+int mvwgetstr(
WINDOW *a1,
int a2,
int a3,
char *z)
{ return(*(int *)0); }
#undef mvwhline
-int (mvwhline)(
+int mvwhline(
WINDOW *a1,
int a2,
int a3,
chtype a4,
int z)
{ return(*(int *)0); }
#undef mvwinch
-chtype (mvwinch)(
+chtype mvwinch(
WINDOW *a1,
int a2,
int z)
{ return(*(chtype *)0); }
#undef mvwinchnstr
-int (mvwinchnstr)(
+int mvwinchnstr(
WINDOW *a1,
int a2,
int a3,
chtype *a4,
int z)
{ return(*(int *)0); }
#undef mvwinchstr
-int (mvwinchstr)(
+int mvwinchstr(
WINDOW *a1,
int a2,
int a3,
chtype *z)
{ return(*(int *)0); }
#undef mvwinnstr
-int (mvwinnstr)(
+int mvwinnstr(
WINDOW *a1,
int a2,
int a3,
char *a4,
int z)
{ return(*(int *)0); }
#undef mvwinsch
-int (mvwinsch)(
+int mvwinsch(
WINDOW *a1,
int a2,
int a3,
chtype z)
{ return(*(int *)0); }
#undef mvwinsnstr
-int (mvwinsnstr)(
+int mvwinsnstr(
WINDOW *a1,
int a2,
int a3,
const char *a4,
int z)
{ return(*(int *)0); }
#undef mvwinsstr
-int (mvwinsstr)(
+int mvwinsstr(
WINDOW *a1,
int a2,
int a3,
const char *z)
{ return(*(int *)0); }
#undef mvwinstr
-int (mvwinstr)(
+int mvwinstr(
WINDOW *a1,
int a2,
int a3,
char *z)
{ return(*(int *)0); }
#undef mvwvline
-int (mvwvline)(
+int mvwvline(
WINDOW *a1,
int a2,
int a3,
chtype a4,
int z)
{ return(*(int *)0); }
#undef PAIR_NUMBER
-int (PAIR_NUMBER)(
+int PAIR_NUMBER(
int z)
{ return(*(int *)0); }
#undef redrawwin
-int (redrawwin)(
+int redrawwin(
WINDOW *z)
{ return(*(int *)0); }
#undef refresh
-int (refresh)(void)
+int refresh(void)
{ return(*(int *)0); }
#undef scrl
-int (scrl)(
+int scrl(
int z)
{ return(*(int *)0); }
#undef scroll
-int (scroll)(
+int scroll(
WINDOW *z)
{ return(*(int *)0); }
#undef setscrreg
-int (setscrreg)(
+int setscrreg(
int a1,
int z)
{ return(*(int *)0); }
#undef standout
-int (standout)(void)
+int standout(void)
{ return(*(int *)0); }
#undef standend
-int (standend)(void)
+int standend(void)
{ return(*(int *)0); }
#undef timeout
-void (timeout)(
+void timeout(
int z)
{ /* void */ }
#undef touchline
-int (touchline)(
+int touchline(
WINDOW *a1,
int a2,
int z)
{ return(*(int *)0); }
#undef touchwin
-int (touchwin)(
+int touchwin(
WINDOW *z)
{ return(*(int *)0); }
#undef untouchwin
-int (untouchwin)(
+int untouchwin(
WINDOW *z)
{ return(*(int *)0); }
#undef vline
-int (vline)(
+int vline(
chtype a1,
int z)
{ return(*(int *)0); }
#undef waddchstr
-int (waddchstr)(
+int waddchstr(
WINDOW *a1,
const chtype *z)
{ return(*(int *)0); }
#undef waddstr
-int (waddstr)(
+int waddstr(
WINDOW *a1,
const char *z)
{ return(*(int *)0); }
#undef wattron
-int (wattron)(
+int wattron(
WINDOW *a1,
int z)
{ return(*(int *)0); }
#undef wattroff
-int (wattroff)(
+int wattroff(
WINDOW *a1,
int z)
{ return(*(int *)0); }
#undef wattrset
-int (wattrset)(
+int wattrset(
WINDOW *a1,
int z)
{ return(*(int *)0); }
#undef wattr_get
-int (wattr_get)(
+int wattr_get(
WINDOW *a1,
attr_t *a2,
short *a3,
void *z)
{ return(*(int *)0); }
#undef wattr_set
-int (wattr_set)(
+int wattr_set(
WINDOW *a1,
attr_t a2,
short a3,
void *z)
{ return(*(int *)0); }
#undef wdeleteln
-int (wdeleteln)(
+int wdeleteln(
WINDOW *z)
{ return(*(int *)0); }
#undef wgetstr
-int (wgetstr)(
+int wgetstr(
WINDOW *a1,
char *z)
{ return(*(int *)0); }
#undef winchstr
-int (winchstr)(
+int winchstr(
WINDOW *a1,
chtype *z)
{ return(*(int *)0); }
#undef winsertln
-int (winsertln)(
+int winsertln(
WINDOW *z)
{ return(*(int *)0); }
#undef winsstr
-int (winsstr)(
+int winsstr(
WINDOW *a1,
const char *z)
{ return(*(int *)0); }
#undef winstr
-int (winstr)(
+int winstr(
WINDOW *a1,
char *z)
{ return(*(int *)0); }
#undef wstandout
-int (wstandout)(
+int wstandout(
WINDOW *z)
{ return(*(int *)0); }
#undef wstandend
-int (wstandend)(
+int wstandend(
WINDOW *z)
{ return(*(int *)0); }
#undef getattrs
-int (getattrs)(
+int getattrs(
const WINDOW *z)
{ return(*(int *)0); }
#undef getcurx
-int (getcurx)(
+int getcurx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getcury
-int (getcury)(
+int getcury(
const WINDOW *z)
{ return(*(int *)0); }
#undef getbegx
-int (getbegx)(
+int getbegx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getbegy
-int (getbegy)(
+int getbegy(
const WINDOW *z)
{ return(*(int *)0); }
#undef getmaxx
-int (getmaxx)(
+int getmaxx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getmaxy
-int (getmaxy)(
+int getmaxy(
const WINDOW *z)
{ return(*(int *)0); }
#undef getparx
-int (getparx)(
+int getparx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getpary
-int (getpary)(
+int getpary(
const WINDOW *z)
{ return(*(int *)0); }
#undef wgetparent
-WINDOW *(wgetparent)(
+WINDOW *wgetparent(
const WINDOW *z)
{ return(*(WINDOW **)0); }
#undef is_cleared
-NCURSES_BOOL (is_cleared)(
+NCURSES_BOOL is_cleared(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_idcok
-NCURSES_BOOL (is_idcok)(
+NCURSES_BOOL is_idcok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_idlok
-NCURSES_BOOL (is_idlok)(
+NCURSES_BOOL is_idlok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_immedok
-NCURSES_BOOL (is_immedok)(
+NCURSES_BOOL is_immedok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_keypad
-NCURSES_BOOL (is_keypad)(
+NCURSES_BOOL is_keypad(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_leaveok
-NCURSES_BOOL (is_leaveok)(
+NCURSES_BOOL is_leaveok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_nodelay
-NCURSES_BOOL (is_nodelay)(
+NCURSES_BOOL is_nodelay(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_notimeout
-NCURSES_BOOL (is_notimeout)(
+NCURSES_BOOL is_notimeout(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_pad
-NCURSES_BOOL (is_pad)(
+NCURSES_BOOL is_pad(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_scrollok
-NCURSES_BOOL (is_scrollok)(
+NCURSES_BOOL is_scrollok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_subwin
-NCURSES_BOOL (is_subwin)(
+NCURSES_BOOL is_subwin(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_syncok
-NCURSES_BOOL (is_syncok)(
+NCURSES_BOOL is_syncok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef wgetdelay
-int (wgetdelay)(
+int wgetdelay(
const WINDOW *z)
{ return(*(int *)0); }
#undef wgetscrreg
-int (wgetscrreg)(
+int wgetscrreg(
const WINDOW *a1,
int *a2,
int *z)
{ return(*(int *)0); }
#undef mouse_trafo
-NCURSES_BOOL (mouse_trafo)(
+NCURSES_BOOL mouse_trafo(
int *a1,
int *a2,
NCURSES_BOOL z)
{ return(*(NCURSES_BOOL *)0); }
/* ./base/lib_getch.c */
#undef ESCDELAY
int ESCDELAY;
#undef set_escdelay_sp
int set_escdelay_sp(
SCREEN *sp,
int value)
{ return(*(int *)0); }
#undef set_escdelay
int set_escdelay(
int value)
{ return(*(int *)0); }
#undef get_escdelay_sp
int get_escdelay_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef get_escdelay
int get_escdelay(void)
{ return(*(int *)0); }
#undef _nc_wgetch
int _nc_wgetch(
WINDOW *win,
int *result,
int use_meta)
{ return(*(int *)0); }
#undef wgetch
int wgetch(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_getstr.c */
#undef wgetnstr
int wgetnstr(
WINDOW *win,
char *str,
int maxlen)
{ return(*(int *)0); }
/* ./base/lib_hline.c */
#undef whline
int whline(
WINDOW *win,
chtype ch,
int n)
{ return(*(int *)0); }
/* ./base/lib_immedok.c */
#undef immedok
void immedok(
WINDOW *win,
NCURSES_BOOL flag)
{ /* void */ }
/* ./base/lib_inchstr.c */
#undef winchnstr
int winchnstr(
WINDOW *win,
chtype *str,
int n)
{ return(*(int *)0); }
/* ./base/lib_initscr.c */
#undef initscr
WINDOW *initscr(void)
{ return(*(WINDOW **)0); }
/* ./base/lib_insch.c */
#undef _nc_insert_ch
int _nc_insert_ch(
SCREEN *sp,
WINDOW *win,
chtype ch)
{ return(*(int *)0); }
#undef winsch
int winsch(
WINDOW *win,
chtype c)
{ return(*(int *)0); }
/* ./base/lib_insdel.c */
#undef winsdelln
int winsdelln(
WINDOW *win,
int n)
{ return(*(int *)0); }
/* ./base/lib_insnstr.c */
#undef winsnstr
int winsnstr(
WINDOW *win,
const char *s,
int n)
{ return(*(int *)0); }
/* ./base/lib_instr.c */
#undef winnstr
int winnstr(
WINDOW *win,
char *str,
int n)
{ return(*(int *)0); }
/* ./base/lib_isendwin.c */
#undef isendwin_sp
NCURSES_BOOL isendwin_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef isendwin
NCURSES_BOOL isendwin(void)
{ return(*(NCURSES_BOOL *)0); }
/* ./base/lib_leaveok.c */
#undef leaveok
int leaveok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/lib_mouse.c */
#undef getmouse_sp
int getmouse_sp(
SCREEN *sp,
MEVENT *aevent)
{ return(*(int *)0); }
#undef getmouse
int getmouse(
MEVENT *aevent)
{ return(*(int *)0); }
#undef ungetmouse_sp
int ungetmouse_sp(
SCREEN *sp,
MEVENT *aevent)
{ return(*(int *)0); }
#undef ungetmouse
int ungetmouse(
MEVENT *aevent)
{ return(*(int *)0); }
#undef mousemask_sp
mmask_t mousemask_sp(
SCREEN *sp,
mmask_t newmask,
mmask_t *oldmask)
{ return(*(mmask_t *)0); }
#undef mousemask
mmask_t mousemask(
mmask_t newmask,
mmask_t *oldmask)
{ return(*(mmask_t *)0); }
#undef wenclose
NCURSES_BOOL wenclose(
const WINDOW *win,
int y,
int x)
{ return(*(NCURSES_BOOL *)0); }
#undef mouseinterval_sp
int mouseinterval_sp(
SCREEN *sp,
int maxclick)
{ return(*(int *)0); }
#undef mouseinterval
int mouseinterval(
int maxclick)
{ return(*(int *)0); }
#undef _nc_has_mouse
NCURSES_BOOL _nc_has_mouse(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_mouse_sp
NCURSES_BOOL has_mouse_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_mouse
NCURSES_BOOL has_mouse(void)
{ return(*(NCURSES_BOOL *)0); }
#undef wmouse_trafo
NCURSES_BOOL wmouse_trafo(
const WINDOW *win,
int *pY,
int *pX,
NCURSES_BOOL to_screen)
{ return(*(NCURSES_BOOL *)0); }
/* ./base/lib_move.c */
#undef wmove
int wmove(
WINDOW *win,
int y,
int x)
{ return(*(int *)0); }
/* ./tty/lib_mvcur.c */
#undef _nc_msec_cost_sp
int _nc_msec_cost_sp(
SCREEN *sp,
const char *const cap,
int affcnt)
{ return(*(int *)0); }
#undef _nc_msec_cost
int _nc_msec_cost(
const char *const cap,
int affcnt)
{ return(*(int *)0); }
#undef _nc_mvcur_resume_sp
void _nc_mvcur_resume_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_mvcur_resume
void _nc_mvcur_resume(void)
{ /* void */ }
#undef _nc_mvcur_init_sp
void _nc_mvcur_init_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_mvcur_init
void _nc_mvcur_init(void)
{ /* void */ }
#undef _nc_mvcur_wrap_sp
void _nc_mvcur_wrap_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_mvcur_wrap
void _nc_mvcur_wrap(void)
{ /* void */ }
#undef _nc_mvcur_sp
int _nc_mvcur_sp(
SCREEN *sp,
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef _nc_mvcur
int _nc_mvcur(
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef mvcur_sp
int mvcur_sp(
SCREEN *sp,
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef mvcur
int mvcur(
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef _nc_optimize_enable
int _nc_optimize_enable;
/* ./base/lib_mvwin.c */
#undef mvwin
int mvwin(
WINDOW *win,
int by,
int bx)
{ return(*(int *)0); }
/* ./base/lib_newterm.c */
#undef filter_sp
void filter_sp(
SCREEN *sp)
{ /* void */ }
#undef filter
void filter(void)
{ /* void */ }
#undef nofilter_sp
void nofilter_sp(
SCREEN *sp)
{ /* void */ }
#undef nofilter
void nofilter(void)
{ /* void */ }
#undef newterm_sp
SCREEN *newterm_sp(
SCREEN *sp,
const char *name,
FILE *ofp,
FILE *ifp)
{ return(*(SCREEN **)0); }
#undef newterm
SCREEN *newterm(
const char *name,
FILE *ofp,
FILE *ifp)
{ return(*(SCREEN **)0); }
/* ./base/lib_newwin.c */
#undef _nc_freewin
int _nc_freewin(
WINDOW *win)
{ return(*(int *)0); }
#undef newwin_sp
WINDOW *newwin_sp(
SCREEN *sp,
int num_lines,
int num_columns,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef newwin
WINDOW *newwin(
int num_lines,
int num_columns,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef derwin
WINDOW *derwin(
WINDOW *orig,
int num_lines,
int num_columns,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef subwin
WINDOW *subwin(
WINDOW *w,
int l,
int c,
int y,
int x)
{ return(*(WINDOW **)0); }
#undef _nc_makenew_sp
WINDOW *_nc_makenew_sp(
SCREEN *sp,
int num_lines,
int num_columns,
int begy,
int begx,
int flags)
{ return(*(WINDOW **)0); }
#undef _nc_curscr_of
WINDOW *_nc_curscr_of(
SCREEN *sp)
{ return(*(WINDOW **)0); }
#undef _nc_newscr_of
WINDOW *_nc_newscr_of(
SCREEN *sp)
{ return(*(WINDOW **)0); }
#undef _nc_stdscr_of
WINDOW *_nc_stdscr_of(
SCREEN *sp)
{ return(*(WINDOW **)0); }
/* ./base/lib_nl.c */
#undef nl_sp
int nl_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nl
int nl(void)
{ return(*(int *)0); }
#undef nonl_sp
int nonl_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nonl
int nonl(void)
{ return(*(int *)0); }
/* ./base/lib_overlay.c */
#undef overlay
int overlay(
const WINDOW *win1,
WINDOW *win2)
{ return(*(int *)0); }
#undef overwrite
int overwrite(
const WINDOW *win1,
WINDOW *win2)
{ return(*(int *)0); }
#undef copywin
int copywin(
const WINDOW *src,
WINDOW *dst,
int sminrow,
int smincol,
int dminrow,
int dmincol,
int dmaxrow,
int dmaxcol,
int over)
{ return(*(int *)0); }
/* ./base/lib_pad.c */
#undef newpad_sp
WINDOW *newpad_sp(
SCREEN *sp,
int l,
int c)
{ return(*(WINDOW **)0); }
#undef newpad
WINDOW *newpad(
int l,
int c)
{ return(*(WINDOW **)0); }
#undef subpad
WINDOW *subpad(
WINDOW *orig,
int l,
int c,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef prefresh
int prefresh(
WINDOW *win,
int pminrow,
int pmincol,
int sminrow,
int smincol,
int smaxrow,
int smaxcol)
{ return(*(int *)0); }
#undef pnoutrefresh
int pnoutrefresh(
WINDOW *win,
int pminrow,
int pmincol,
int sminrow,
int smincol,
int smaxrow,
int smaxcol)
{ return(*(int *)0); }
#undef pechochar
int pechochar(
WINDOW *pad,
const chtype ch)
{ return(*(int *)0); }
/* ./base/lib_printw.c */
#undef printw
int printw(
const char *fmt,
...)
{ return(*(int *)0); }
#undef wprintw
int wprintw(
WINDOW *win,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvprintw
int mvprintw(
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvwprintw
int mvwprintw(
WINDOW *win,
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
#undef vwprintw
int vwprintw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
#undef vw_printw
int vw_printw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
/* ./base/lib_redrawln.c */
#undef wredrawln
int wredrawln(
WINDOW *win,
int beg,
int num)
{ return(*(int *)0); }
/* ./base/lib_refresh.c */
#undef wrefresh
int wrefresh(
WINDOW *win)
{ return(*(int *)0); }
#undef wnoutrefresh
int wnoutrefresh(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_restart.c */
#undef restartterm_sp
int restartterm_sp(
SCREEN *sp,
const char *termp,
int filenum,
int *errret)
{ return(*(int *)0); }
#undef restartterm
int restartterm(
const char *termp,
int filenum,
int *errret)
{ return(*(int *)0); }
/* ./base/lib_scanw.c */
#undef vwscanw
int vwscanw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
#undef vw_scanw
int vw_scanw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
#undef scanw
int scanw(
const char *fmt,
...)
{ return(*(int *)0); }
#undef wscanw
int wscanw(
WINDOW *win,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvscanw
int mvscanw(
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvwscanw
int mvwscanw(
WINDOW *win,
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
/* ./base/lib_screen.c */
#undef getwin_sp
WINDOW *getwin_sp(
SCREEN *sp,
FILE *filep)
{ return(*(WINDOW **)0); }
#undef getwin
WINDOW *getwin(
FILE *filep)
{ return(*(WINDOW **)0); }
#undef putwin
int putwin(
WINDOW *win,
FILE *filep)
{ return(*(int *)0); }
#undef scr_restore_sp
int scr_restore_sp(
SCREEN *sp,
const char *file)
{ return(*(int *)0); }
#undef scr_restore
int scr_restore(
const char *file)
{ return(*(int *)0); }
#undef scr_dump
int scr_dump(
const char *file)
{ return(*(int *)0); }
#undef scr_init_sp
int scr_init_sp(
SCREEN *sp,
const char *file)
{ return(*(int *)0); }
#undef scr_init
int scr_init(
const char *file)
{ return(*(int *)0); }
#undef scr_set_sp
int scr_set_sp(
SCREEN *sp,
const char *file)
{ return(*(int *)0); }
#undef scr_set
int scr_set(
const char *file)
{ return(*(int *)0); }
/* ./base/lib_scroll.c */
#undef _nc_scroll_window
void _nc_scroll_window(
WINDOW *win,
int const n,
int const top,
int const bottom,
chtype blank)
{ /* void */ }
#undef wscrl
int wscrl(
WINDOW *win,
int n)
{ return(*(int *)0); }
/* ./base/lib_scrollok.c */
#undef scrollok
int scrollok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/lib_scrreg.c */
#undef wsetscrreg
int wsetscrreg(
WINDOW *win,
int top,
int bottom)
{ return(*(int *)0); }
/* ./base/lib_set_term.c */
#undef set_term
SCREEN *set_term(
SCREEN *screenp)
{ return(*(SCREEN **)0); }
#undef delscreen
void delscreen(
SCREEN *sp)
{ /* void */ }
#undef _nc_setupscreen_sp
int _nc_setupscreen_sp(
SCREEN **spp,
int slines,
int scolumns,
FILE *output,
int filtered,
int slk_format)
{ return(*(int *)0); }
#undef _nc_setupscreen
int _nc_setupscreen(
int slines,
int scolumns,
FILE *output,
int filtered,
int slk_format)
{ return(*(int *)0); }
#undef _nc_ripoffline_sp
int _nc_ripoffline_sp(
SCREEN *sp,
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
#undef _nc_ripoffline
int _nc_ripoffline(
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
#undef ripoffline_sp
int ripoffline_sp(
SCREEN *sp,
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
#undef ripoffline
int ripoffline(
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
/* ./base/lib_slk.c */
#undef _nc_format_slks
int _nc_format_slks(
SCREEN *sp,
int cols)
{ return(*(int *)0); }
#undef _nc_slk_initialize
int _nc_slk_initialize(
WINDOW *stwin,
int cols)
{ return(*(int *)0); }
#undef slk_restore_sp
int slk_restore_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_restore
int slk_restore(void)
{ return(*(int *)0); }
/* ./base/lib_slkatr_set.c */
#undef slk_attr_set_sp
int slk_attr_set_sp(
SCREEN *sp,
const attr_t attr,
short pair_arg,
void *opts)
{ return(*(int *)0); }
#undef slk_attr_set
int slk_attr_set(
const attr_t attr,
short pair_arg,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_slkatrof.c */
#undef slk_attroff_sp
int slk_attroff_sp(
SCREEN *sp,
const chtype attr)
{ return(*(int *)0); }
#undef slk_attroff
int slk_attroff(
const chtype attr)
{ return(*(int *)0); }
/* ./base/lib_slkatron.c */
#undef slk_attron_sp
int slk_attron_sp(
SCREEN *sp,
const chtype attr)
{ return(*(int *)0); }
#undef slk_attron
int slk_attron(
const chtype attr)
{ return(*(int *)0); }
/* ./base/lib_slkatrset.c */
#undef slk_attrset_sp
int slk_attrset_sp(
SCREEN *sp,
const chtype attr)
{ return(*(int *)0); }
#undef slk_attrset
int slk_attrset(
const chtype attr)
{ return(*(int *)0); }
/* ./base/lib_slkattr.c */
#undef slk_attr_sp
attr_t slk_attr_sp(
SCREEN *sp)
{ return(*(attr_t *)0); }
#undef slk_attr
attr_t slk_attr(void)
{ return(*(attr_t *)0); }
/* ./base/lib_slkclear.c */
#undef slk_clear_sp
int slk_clear_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_clear
int slk_clear(void)
{ return(*(int *)0); }
/* ./base/lib_slkcolor.c */
#undef slk_color_sp
int slk_color_sp(
SCREEN *sp,
short pair_arg)
{ return(*(int *)0); }
#undef slk_color
int slk_color(
short pair_arg)
{ return(*(int *)0); }
/* ./base/lib_slkinit.c */
#undef slk_init_sp
int slk_init_sp(
SCREEN *sp,
int format)
{ return(*(int *)0); }
#undef slk_init
int slk_init(
int format)
{ return(*(int *)0); }
/* ./base/lib_slklab.c */
#undef slk_label_sp
char *slk_label_sp(
SCREEN *sp,
int n)
{ return(*(char **)0); }
#undef slk_label
char *slk_label(
int n)
{ return(*(char **)0); }
/* ./base/lib_slkrefr.c */
#undef slk_noutrefresh_sp
int slk_noutrefresh_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_noutrefresh
int slk_noutrefresh(void)
{ return(*(int *)0); }
#undef slk_refresh_sp
int slk_refresh_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_refresh
int slk_refresh(void)
{ return(*(int *)0); }
/* ./base/lib_slkset.c */
#undef slk_set_sp
int slk_set_sp(
SCREEN *sp,
int i,
const char *astr,
int format)
{ return(*(int *)0); }
#undef slk_set
int slk_set(
int i,
const char *astr,
int format)
{ return(*(int *)0); }
/* ./base/lib_slktouch.c */
#undef slk_touch_sp
int slk_touch_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_touch
int slk_touch(void)
{ return(*(int *)0); }
/* ./base/lib_touch.c */
#undef is_linetouched
NCURSES_BOOL is_linetouched(
WINDOW *win,
int line)
{ return(*(NCURSES_BOOL *)0); }
#undef is_wintouched
NCURSES_BOOL is_wintouched(
WINDOW *win)
{ return(*(NCURSES_BOOL *)0); }
#undef wtouchln
int wtouchln(
WINDOW *win,
int y,
int n,
int changed)
{ return(*(int *)0); }
/* ./trace/lib_tracedmp.c */
#undef _tracedump
void _tracedump(
const char *name,
WINDOW *win)
{ /* void */ }
/* ./trace/lib_tracemse.c */
#undef _nc_trace_mmask_t
char *_nc_trace_mmask_t(
SCREEN *sp,
mmask_t code)
{ return(*(char **)0); }
#undef _nc_tracemouse
char *_nc_tracemouse(
SCREEN *sp,
MEVENT const *ep)
{ return(*(char **)0); }
#undef _nc_retrace_mmask_t
mmask_t _nc_retrace_mmask_t(
SCREEN *sp,
mmask_t code)
{ return(*(mmask_t *)0); }
#undef _tracemouse
char *_tracemouse(
MEVENT const *ep)
{ return(*(char **)0); }
/* ./tty/lib_tstp.c */
#undef _nc_signal_handler
void _nc_signal_handler(
int enable)
{ /* void */ }
/* ./base/lib_ungetch.c */
#undef _nc_fifo_dump
void _nc_fifo_dump(
SCREEN *sp)
{ /* void */ }
#undef ungetch_sp
int ungetch_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef ungetch
int ungetch(
int ch)
{ return(*(int *)0); }
/* ./tty/lib_vidattr.c */
#undef vidputs_sp
int vidputs_sp(
SCREEN *sp,
chtype newmode,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef vidputs
int vidputs(
chtype newmode,
NCURSES_OUTC outc)
{ return(*(int *)0); }
#undef vidattr_sp
int vidattr_sp(
SCREEN *sp,
chtype newmode)
{ return(*(int *)0); }
#undef vidattr
int vidattr(
chtype newmode)
{ return(*(int *)0); }
#undef termattrs_sp
chtype termattrs_sp(
SCREEN *sp)
{ return(*(chtype *)0); }
#undef termattrs
chtype termattrs(void)
{ return(*(chtype *)0); }
/* ./base/lib_vline.c */
#undef wvline
int wvline(
WINDOW *win,
chtype ch,
int n)
{ return(*(int *)0); }
/* ./base/lib_wattroff.c */
#undef wattr_off
int wattr_off(
WINDOW *win,
attr_t at,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_wattron.c */
#undef wattr_on
int wattr_on(
WINDOW *win,
attr_t at,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_winch.c */
#undef winch
chtype winch(
WINDOW *win)
{ return(*(chtype *)0); }
/* ./base/lib_window.c */
#undef _nc_synchook
void _nc_synchook(
WINDOW *win)
{ /* void */ }
#undef mvderwin
int mvderwin(
WINDOW *win,
int y,
int x)
{ return(*(int *)0); }
#undef syncok
int syncok(
WINDOW *win,
NCURSES_BOOL bf)
{ return(*(int *)0); }
#undef wsyncup
void wsyncup(
WINDOW *win)
{ /* void */ }
#undef wsyncdown
void wsyncdown(
WINDOW *win)
{ /* void */ }
#undef wcursyncup
void wcursyncup(
WINDOW *win)
{ /* void */ }
#undef dupwin
WINDOW *dupwin(
WINDOW *win)
{ return(*(WINDOW **)0); }
/* ./base/nc_panel.c */
#undef _nc_panelhook_sp
struct panelhook *_nc_panelhook_sp(
SCREEN *sp)
{ return(*(struct panelhook **)0); }
#undef _nc_panelhook
struct panelhook *_nc_panelhook(void)
{ return(*(struct panelhook **)0); }
/* ./base/safe_sprintf.c */
#undef _nc_printf_string_sp
char *_nc_printf_string_sp(
SCREEN *sp,
const char *fmt,
va_list ap)
{ return(*(char **)0); }
#undef _nc_printf_string
char *_nc_printf_string(
const char *fmt,
va_list ap)
{ return(*(char **)0); }
/* ./tty/tty_update.c */
#undef doupdate_sp
int doupdate_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef doupdate
int doupdate(void)
{ return(*(int *)0); }
#undef _nc_scrolln_sp
int _nc_scrolln_sp(
SCREEN *sp,
int n,
int top,
int bot,
int maxy)
{ return(*(int *)0); }
#undef _nc_scrolln
int _nc_scrolln(
int n,
int top,
int bot,
int maxy)
{ return(*(int *)0); }
#undef _nc_screen_resume_sp
void _nc_screen_resume_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_screen_resume
void _nc_screen_resume(void)
{ /* void */ }
#undef _nc_screen_init_sp
void _nc_screen_init_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_screen_init
void _nc_screen_init(void)
{ /* void */ }
#undef _nc_screen_wrap_sp
void _nc_screen_wrap_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_screen_wrap
void _nc_screen_wrap(void)
{ /* void */ }
#undef _nc_do_xmc_glitch_sp
void _nc_do_xmc_glitch_sp(
SCREEN *sp,
attr_t previous)
{ /* void */ }
#undef _nc_do_xmc_glitch
void _nc_do_xmc_glitch(
attr_t previous)
{ /* void */ }
/* ./trace/varargs.c */
#undef _nc_varargs
char *_nc_varargs(
const char *fmt,
va_list ap)
{ return(*(char **)0); }
/* ./base/vsscanf.c */
#undef _nc_vsscanf
void _nc_vsscanf(void)
{ /* void */ }
/* ./base/lib_freeall.c */
#undef _nc_freeall
void _nc_freeall(void)
{ /* void */ }
#undef _nc_free_and_exit_sp
void _nc_free_and_exit_sp(
SCREEN *sp,
int code)
{ /* void */ }
#undef _nc_free_and_exit
void _nc_free_and_exit(
int code)
{ /* void */ }
#undef exit_curses
void exit_curses(
int code)
{ /* void */ }
/* ./expanded.c */
#undef _nc_toggle_attr_on
void _nc_toggle_attr_on(
attr_t *S,
attr_t at)
{ /* void */ }
#undef _nc_toggle_attr_off
void _nc_toggle_attr_off(
attr_t *S,
attr_t at)
{ /* void */ }
#undef _nc_DelCharCost_sp
int _nc_DelCharCost_sp(
SCREEN *sp,
int count)
{ return(*(int *)0); }
#undef _nc_InsCharCost_sp
int _nc_InsCharCost_sp(
SCREEN *sp,
int count)
{ return(*(int *)0); }
#undef _nc_UpdateAttrs_sp
void _nc_UpdateAttrs_sp(
SCREEN *sp,
chtype c)
{ /* void */ }
#undef _nc_DelCharCost
int _nc_DelCharCost(
int count)
{ return(*(int *)0); }
#undef _nc_InsCharCost
int _nc_InsCharCost(
int count)
{ return(*(int *)0); }
#undef _nc_UpdateAttrs
void _nc_UpdateAttrs(
chtype c)
{ /* void */ }
/* ./base/legacy_coding.c */
#undef use_legacy_coding_sp
int use_legacy_coding_sp(
SCREEN *sp,
int level)
{ return(*(int *)0); }
#undef use_legacy_coding
int use_legacy_coding(
int level)
{ return(*(int *)0); }
/* ./base/lib_dft_fgbg.c */
#undef use_default_colors_sp
int use_default_colors_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef use_default_colors
int use_default_colors(void)
{ return(*(int *)0); }
#undef assume_default_colors_sp
int assume_default_colors_sp(
SCREEN *sp,
int fg,
int bg)
{ return(*(int *)0); }
#undef assume_default_colors
int assume_default_colors(
int fg,
int bg)
{ return(*(int *)0); }
/* ./tinfo/lib_print.c */
#undef mcprint_sp
int mcprint_sp(
SCREEN *sp,
char *data,
int len)
{ return(*(int *)0); }
#undef mcprint
int mcprint(
char *data,
int len)
{ return(*(int *)0); }
/* ./base/new_pair.c */
#undef _nc_new_pair
void _nc_new_pair(void)
{ /* void */ }
/* ./base/resizeterm.c */
#undef is_term_resized_sp
NCURSES_BOOL is_term_resized_sp(
SCREEN *sp,
int ToLines,
int ToCols)
{ return(*(NCURSES_BOOL *)0); }
#undef is_term_resized
NCURSES_BOOL is_term_resized(
int ToLines,
int ToCols)
{ return(*(NCURSES_BOOL *)0); }
#undef resize_term_sp
int resize_term_sp(
SCREEN *sp,
int ToLines,
int ToCols)
{ return(*(int *)0); }
#undef resize_term
int resize_term(
int ToLines,
int ToCols)
{ return(*(int *)0); }
#undef resizeterm_sp
int resizeterm_sp(
SCREEN *sp,
int ToLines,
int ToCols)
{ return(*(int *)0); }
#undef resizeterm
int resizeterm(
int ToLines,
int ToCols)
{ return(*(int *)0); }
/* ./trace/trace_xnames.c */
#undef _nc_trace_xnames
void _nc_trace_xnames(
TERMTYPE *tp)
{ /* void */ }
/* ./tinfo/use_screen.c */
#undef use_screen
int use_screen(
SCREEN *screen,
NCURSES_SCREEN_CB func,
void *data)
{ return(*(int *)0); }
/* ./base/use_window.c */
#undef use_window
int use_window(
WINDOW *win,
NCURSES_WINDOW_CB func,
void *data)
{ return(*(int *)0); }
/* ./base/wresize.c */
#undef wresize
int wresize(
WINDOW *win,
int ToLines,
int ToCols)
{ return(*(int *)0); }
/* ./tinfo/access.c */
#undef _nc_rootname
char *_nc_rootname(
char *path)
{ return(*(char **)0); }
#undef _nc_is_abs_path
NCURSES_BOOL _nc_is_abs_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_pathlast
unsigned _nc_pathlast(
const char *path)
{ return(*(unsigned *)0); }
#undef _nc_basename
char *_nc_basename(
char *path)
{ return(*(char **)0); }
#undef _nc_access
int _nc_access(
const char *path,
int mode)
{ return(*(int *)0); }
#undef _nc_is_dir_path
NCURSES_BOOL _nc_is_dir_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_is_file_path
NCURSES_BOOL _nc_is_file_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_env_access
int _nc_env_access(void)
{ return(*(int *)0); }
/* ./tinfo/add_tries.c */
#undef _nc_add_to_try
int _nc_add_to_try(
TRIES **tree,
const char *str,
unsigned code)
{ return(*(int *)0); }
/* ./tinfo/alloc_ttype.c */
#undef _nc_align_termtype
void _nc_align_termtype(
TERMTYPE2 *to,
TERMTYPE2 *from)
{ /* void */ }
#undef _nc_copy_termtype
void _nc_copy_termtype(
TERMTYPE *dst,
const TERMTYPE *src)
{ /* void */ }
/* ./codes.c */
#undef boolcodes
const char *const boolcodes[] = {0};
#undef numcodes
const char *const numcodes[] = {0};
#undef strcodes
const char *const strcodes[] = {0};
/* ./comp_captab.c */
#undef _nc_get_table
const struct name_table_entry *_nc_get_table(
NCURSES_BOOL termcap)
{ return(*(const struct name_table_entry **)0); }
#undef _nc_get_hash_table
const HashValue *_nc_get_hash_table(
NCURSES_BOOL termcap)
{ return(*(const HashValue **)0); }
#undef _nc_get_alias_table
const struct alias *_nc_get_alias_table(
NCURSES_BOOL termcap)
{ return(*(const struct alias **)0); }
#undef _nc_get_hash_info
const HashData *_nc_get_hash_info(
NCURSES_BOOL termcap)
{ return(*(const HashData **)0); }
/* ./tinfo/comp_error.c */
#undef _nc_suppress_warnings
NCURSES_BOOL _nc_suppress_warnings;
#undef _nc_curr_line
int _nc_curr_line;
#undef _nc_curr_col
int _nc_curr_col;
#undef _nc_get_source
const char *_nc_get_source(void)
{ return(*(const char **)0); }
#undef _nc_set_source
void _nc_set_source(
const char *const name)
{ /* void */ }
#undef _nc_set_type
void _nc_set_type(
const char *const name)
{ /* void */ }
#undef _nc_get_type
void _nc_get_type(
char *name)
{ /* void */ }
#undef _nc_warning
void _nc_warning(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_err_abort
void _nc_err_abort(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_syserr_abort
void _nc_syserr_abort(
const char *const fmt,
...)
{ /* void */ }
/* ./tinfo/comp_hash.c */
#undef _nc_find_entry
struct name_table_entry const *_nc_find_entry(
const char *string,
const HashValue *hash_table)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_type_entry
struct name_table_entry const *_nc_find_type_entry(
const char *string,
int type,
NCURSES_BOOL termcap)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_user_entry
struct user_table_entry const *_nc_find_user_entry(
const char *string)
{ return(*(struct user_table_entry const **)0); }
/* ./comp_userdefs.c */
#undef _nc_get_userdefs_table
const struct user_table_entry *_nc_get_userdefs_table(void)
{ return(*(const struct user_table_entry **)0); }
#undef _nc_get_hash_user
const HashData *_nc_get_hash_user(void)
{ return(*(const HashData **)0); }
/* ./tinfo/db_iterator.c */
#undef _nc_tic_dir
const char *_nc_tic_dir(
const char *path)
{ return(*(const char **)0); }
#undef _nc_keep_tic_dir
void _nc_keep_tic_dir(
const char *path)
{ /* void */ }
#undef _nc_last_db
void _nc_last_db(void)
{ /* void */ }
#undef _nc_next_db
const char *_nc_next_db(
DBDIRS *state,
int *offset)
{ return(*(const char **)0); }
#undef _nc_first_db
void _nc_first_db(
DBDIRS *state,
int *offset)
{ /* void */ }
/* ./tinfo/doalloc.c */
#undef _nc_doalloc
void *_nc_doalloc(
void *oldp,
size_t amount)
{ return(*(void **)0); }
/* ./tinfo/entries.c */
#undef _nc_head
ENTRY *_nc_head;
#undef _nc_tail
ENTRY *_nc_tail;
#undef _nc_free_entry
void _nc_free_entry(
ENTRY *headp,
TERMTYPE2 *tterm)
{ /* void */ }
#undef _nc_free_entries
void _nc_free_entries(
ENTRY *headp)
{ /* void */ }
#undef _nc_leaks_tinfo
void _nc_leaks_tinfo(void)
{ /* void */ }
#undef exit_terminfo
void exit_terminfo(
int code)
{ /* void */ }
/* ./fallback.c */
#undef _nc_fallback
const TERMTYPE2 *_nc_fallback(
const char *name)
{ return(*(const TERMTYPE2 **)0); }
/* ./tinfo/free_ttype.c */
#undef _nc_free_termtype
void _nc_free_termtype(
TERMTYPE *ptr)
{ /* void */ }
#undef _nc_user_definable
NCURSES_BOOL _nc_user_definable;
#undef use_extended_names
int use_extended_names(
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/getenv_num.c */
#undef _nc_getenv_num
int _nc_getenv_num(
const char *name)
{ return(*(int *)0); }
#undef _nc_setenv_num
void _nc_setenv_num(
const char *name,
int value)
{ /* void */ }
/* ./tinfo/home_terminfo.c */
#undef _nc_home_terminfo
char *_nc_home_terminfo(void)
{ return(*(char **)0); }
/* ./tinfo/init_keytry.c */
#undef _nc_init_keytry
void _nc_init_keytry(
SCREEN *sp)
{ /* void */ }
/* ./tinfo/lib_acs.c */
#undef acs_map
chtype acs_map[128];
#undef _nc_init_acs_sp
void _nc_init_acs_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_init_acs
void _nc_init_acs(void)
{ /* void */ }
/* ./tinfo/lib_baudrate.c */
struct speed {
int given_speed;
int actual_speed;
};
#undef _nc_baudrate
int _nc_baudrate(
int OSpeed)
{ return(*(int *)0); }
#undef _nc_ospeed
int _nc_ospeed(
int BaudRate)
{ return(*(int *)0); }
#undef baudrate_sp
int baudrate_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef baudrate
int baudrate(void)
{ return(*(int *)0); }
/* ./tinfo/lib_cur_term.c */
#undef cur_term
TERMINAL *cur_term;
#undef set_curterm_sp
TERMINAL *set_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef set_curterm
TERMINAL *set_curterm(
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef del_curterm_sp
int del_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(int *)0); }
#undef del_curterm
int del_curterm(
TERMINAL *termp)
{ return(*(int *)0); }
/* ./tinfo/lib_data.c */
#undef stdscr
WINDOW *stdscr;
#undef curscr
WINDOW *curscr;
#undef newscr
WINDOW *newscr;
#undef _nc_screen_chain
SCREEN *_nc_screen_chain;
#undef SP
SCREEN *SP;
#undef _nc_globals
NCURSES_GLOBALS _nc_globals;
#undef _nc_prescreen
NCURSES_PRESCREEN _nc_prescreen;
#undef _nc_screen_of
SCREEN *_nc_screen_of(
WINDOW *win)
{ return(*(SCREEN **)0); }
/* ./tinfo/lib_has_cap.c */
#undef has_ic_sp
NCURSES_BOOL has_ic_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_ic
NCURSES_BOOL has_ic(void)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il_sp
NCURSES_BOOL has_il_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il
NCURSES_BOOL has_il(void)
{ return(*(NCURSES_BOOL *)0); }
/* ./tinfo/lib_kernel.c */
#undef erasechar_sp
char erasechar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef erasechar
char erasechar(void)
{ return(*(char *)0); }
#undef killchar_sp
char killchar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef killchar
char killchar(void)
{ return(*(char *)0); }
#undef flushinp_sp
int flushinp_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef flushinp
int flushinp(void)
{ return(*(int *)0); }
/* ./lib_keyname.c */
struct kn { short offset; int code; };
#undef keyname_sp
const char *keyname_sp(
SCREEN *sp,
int c)
{ return(*(const char **)0); }
#undef keyname
const char *keyname(
int c)
{ return(*(const char **)0); }
/* ./tinfo/lib_longname.c */
#undef longname_sp
char *longname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef longname
char *longname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_napms.c */
#undef napms_sp
int napms_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef napms
int napms(
int ms)
{ return(*(int *)0); }
/* ./tinfo/lib_options.c */
#undef idlok
int idlok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef idcok
void idcok(
WINDOW *win,
NCURSES_BOOL flag)
{ /* void */ }
#undef halfdelay_sp
int halfdelay_sp(
SCREEN *sp,
int t)
{ return(*(int *)0); }
#undef halfdelay
int halfdelay(
int t)
{ return(*(int *)0); }
#undef nodelay
int nodelay(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef notimeout
int notimeout(
WINDOW *win,
NCURSES_BOOL f)
{ return(*(int *)0); }
#undef wtimeout
void wtimeout(
WINDOW *win,
int delay)
{ /* void */ }
#undef keypad
int keypad(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef meta
int meta(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef curs_set_sp
int curs_set_sp(
SCREEN *sp,
int vis)
{ return(*(int *)0); }
#undef curs_set
int curs_set(
int vis)
{ return(*(int *)0); }
#undef typeahead_sp
int typeahead_sp(
SCREEN *sp,
int fd)
{ return(*(int *)0); }
#undef typeahead
int typeahead(
int fd)
{ return(*(int *)0); }
#undef has_key_sp
int has_key_sp(
SCREEN *sp,
int keycode)
{ return(*(int *)0); }
#undef has_key
int has_key(
int keycode)
{ return(*(int *)0); }
#undef _nc_putp_flush_sp
int _nc_putp_flush_sp(
SCREEN *sp,
const char *name,
const char *value)
{ return(*(int *)0); }
#undef _nc_keypad
int _nc_keypad(
SCREEN *sp,
int flag)
{ return(*(int *)0); }
/* ./tinfo/lib_raw.c */
#undef raw_sp
int raw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef raw
int raw(void)
{ return(*(int *)0); }
#undef cbreak_sp
int cbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef cbreak
int cbreak(void)
{ return(*(int *)0); }
#undef qiflush_sp
void qiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef qiflush
void qiflush(void)
{ /* void */ }
#undef noraw_sp
int noraw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef noraw
int noraw(void)
{ return(*(int *)0); }
#undef nocbreak_sp
int nocbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nocbreak
int nocbreak(void)
{ return(*(int *)0); }
#undef noqiflush_sp
void noqiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef noqiflush
void noqiflush(void)
{ /* void */ }
#undef intrflush_sp
int intrflush_sp(
SCREEN *sp,
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef intrflush
int intrflush(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/lib_setup.c */
#undef ttytype
char ttytype[256];
#undef LINES
int LINES;
#undef COLS
int COLS;
#undef TABSIZE
int TABSIZE;
#undef set_tabsize_sp
int set_tabsize_sp(
SCREEN *sp,
int value)
{ return(*(int *)0); }
#undef set_tabsize
int set_tabsize(
int value)
{ return(*(int *)0); }
#undef _nc_handle_sigwinch
int _nc_handle_sigwinch(
SCREEN *sp)
{ return(*(int *)0); }
#undef use_env_sp
void use_env_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl_sp
void use_tioctl_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_env
void use_env(
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl
void use_tioctl(
NCURSES_BOOL f)
{ /* void */ }
#undef _nc_get_screensize
void _nc_get_screensize(
SCREEN *sp,
int *linep,
int *colp)
{ /* void */ }
#undef _nc_update_screensize
void _nc_update_screensize(
SCREEN *sp)
{ /* void */ }
#undef _nc_setup_tinfo
int _nc_setup_tinfo(
const char *const tn,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
#undef _nc_tinfo_cmdch
void _nc_tinfo_cmdch(
TERMINAL *termp,
int proto)
{ /* void */ }
#undef _nc_get_locale
char *_nc_get_locale(void)
{ return(*(char **)0); }
#undef _nc_unicode_locale
int _nc_unicode_locale(void)
{ return(*(int *)0); }
#undef _nc_locale_breaks_acs
int _nc_locale_breaks_acs(
TERMINAL *termp)
{ return(*(int *)0); }
#undef _nc_setupterm
int _nc_setupterm(
const char *tname,
int Filedes,
int *errret,
int reuse)
{ return(*(int *)0); }
#undef new_prescr
SCREEN *new_prescr(void)
{ return(*(SCREEN **)0); }
#undef setupterm
int setupterm(
const char *tname,
int Filedes,
int *errret)
{ return(*(int *)0); }
/* ./tinfo/lib_termcap.c */
#undef UP
char *UP;
#undef BC
char *BC;
#undef tgetent_sp
int tgetent_sp(
SCREEN *sp,
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetent
int tgetent(
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetflag_sp
int tgetflag_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetflag
int tgetflag(
const char *id)
{ return(*(int *)0); }
#undef tgetnum_sp
int tgetnum_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetnum
int tgetnum(
const char *id)
{ return(*(int *)0); }
#undef tgetstr_sp
char *tgetstr_sp(
SCREEN *sp,
const char *id,
char **area)
{ return(*(char **)0); }
#undef tgetstr
char *tgetstr(
const char *id,
char **area)
{ return(*(char **)0); }
/* ./tinfo/lib_termname.c */
#undef termname_sp
char *termname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef termname
char *termname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_tgoto.c */
#undef tgoto
char *tgoto(
const char *string,
int x,
int y)
{ return(*(char **)0); }
/* ./tinfo/lib_ti.c */
#undef tigetflag_sp
int tigetflag_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetflag
int tigetflag(
const char *str)
{ return(*(int *)0); }
#undef tigetnum_sp
int tigetnum_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetnum
int tigetnum(
const char *str)
{ return(*(int *)0); }
#undef tigetstr_sp
char *tigetstr_sp(
SCREEN *sp,
const char *str)
{ return(*(char **)0); }
#undef tigetstr
char *tigetstr(
const char *str)
{ return(*(char **)0); }
/* ./tinfo/lib_tparm.c */
#undef _nc_tparm_err
int _nc_tparm_err;
#undef _nc_tparm_analyze
int _nc_tparm_analyze(
const char *string,
char *p_is_s[9],
int *_nc_popcount)
{ return(*(int *)0); }
#undef tparm
char *tparm(
const char *string,
...)
{ return(*(char **)0); }
#undef tiparm
char *tiparm(
const char *string,
...)
{ return(*(char **)0); }
+#undef _nc_tiparm
+char *_nc_tiparm(
+ int expected,
+ const char *string,
+ ...)
+ { return(*(char **)0); }
+
/* ./tinfo/lib_tputs.c */
#undef PC
char PC;
#undef ospeed
short ospeed;
#undef _nc_nulls_sent
int _nc_nulls_sent;
#undef _nc_set_no_padding
void _nc_set_no_padding(
SCREEN *sp)
{ /* void */ }
#undef delay_output_sp
int delay_output_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef delay_output
int delay_output(
int ms)
{ return(*(int *)0); }
#undef _nc_flush_sp
void _nc_flush_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_flush
void _nc_flush(void)
{ /* void */ }
#undef _nc_outch_sp
int _nc_outch_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_outch
int _nc_outch(
int ch)
{ return(*(int *)0); }
#undef _nc_putchar_sp
int _nc_putchar_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_putchar
int _nc_putchar(
int ch)
{ return(*(int *)0); }
#undef putp_sp
int putp_sp(
SCREEN *sp,
const char *string)
{ return(*(int *)0); }
#undef putp
int putp(
const char *string)
{ return(*(int *)0); }
#undef _nc_putp_sp
int _nc_putp_sp(
SCREEN *sp,
const char *name,
const char *string)
{ return(*(int *)0); }
#undef _nc_putp
int _nc_putp(
const char *name,
const char *string)
{ return(*(int *)0); }
#undef tputs_sp
int tputs_sp(
SCREEN *sp,
const char *string,
int affcnt,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef _nc_outc_wrapper
int _nc_outc_wrapper(
SCREEN *sp,
int c)
{ return(*(int *)0); }
#undef tputs
int tputs(
const char *string,
int affcnt,
int (*outc)(
int p1))
{ return(*(int *)0); }
/* ./trace/lib_trace.c */
#undef _nc_tracing
unsigned _nc_tracing;
#undef _nc_tputs_trace
const char *_nc_tputs_trace = {0};
#undef _nc_outchars
long _nc_outchars;
#undef curses_trace
unsigned curses_trace(
unsigned tracelevel)
{ return(*(unsigned *)0); }
#undef trace
void trace(
const unsigned int tracelevel)
{ /* void */ }
#undef _tracef
void _tracef(
const char *fmt,
...)
{ /* void */ }
#undef _nc_retrace_bool
NCURSES_BOOL _nc_retrace_bool(
int code)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_retrace_char
char _nc_retrace_char(
int code)
{ return(*(char *)0); }
#undef _nc_retrace_int
int _nc_retrace_int(
int code)
{ return(*(int *)0); }
#undef _nc_retrace_unsigned
unsigned _nc_retrace_unsigned(
unsigned code)
{ return(*(unsigned *)0); }
#undef _nc_retrace_ptr
char *_nc_retrace_ptr(
char *code)
{ return(*(char **)0); }
#undef _nc_retrace_cptr
const char *_nc_retrace_cptr(
const char *code)
{ return(*(const char **)0); }
#undef _nc_retrace_cvoid_ptr
const void *_nc_retrace_cvoid_ptr(
const void *code)
{ return(*(const void **)0); }
#undef _nc_retrace_void_ptr
void *_nc_retrace_void_ptr(
void *code)
{ return(*(void **)0); }
#undef _nc_retrace_sp
SCREEN *_nc_retrace_sp(
SCREEN *code)
{ return(*(SCREEN **)0); }
#undef _nc_retrace_win
WINDOW *_nc_retrace_win(
WINDOW *code)
{ return(*(WINDOW **)0); }
#undef _nc_fmt_funcptr
char *_nc_fmt_funcptr(
char *target,
const char *source,
size_t size)
{ return(*(char **)0); }
/* ./trace/lib_traceatr.c */
#undef _traceattr2
char *_traceattr2(
int bufnum,
chtype newmode)
{ return(*(char **)0); }
#undef _traceattr
char *_traceattr(
attr_t newmode)
{ return(*(char **)0); }
#undef _nc_retrace_int_attr_t
int _nc_retrace_int_attr_t(
attr_t code)
{ return(*(int *)0); }
#undef _nc_retrace_attr_t
attr_t _nc_retrace_attr_t(
attr_t code)
{ return(*(attr_t *)0); }
#undef _nc_altcharset_name
const char *_nc_altcharset_name(
attr_t attr,
chtype ch)
{ return(*(const char **)0); }
#undef _tracechtype2
char *_tracechtype2(
int bufnum,
chtype ch)
{ return(*(char **)0); }
#undef _tracechtype
char *_tracechtype(
chtype ch)
{ return(*(char **)0); }
#undef _nc_retrace_chtype
chtype _nc_retrace_chtype(
chtype code)
{ return(*(chtype *)0); }
/* ./trace/lib_tracebits.c */
#undef _nc_trace_ttymode
char *_nc_trace_ttymode(
struct termios *tty)
{ return(*(char **)0); }
#undef _nc_tracebits
char *_nc_tracebits(void)
{ return(*(char **)0); }
/* ./trace/lib_tracechr.c */
#undef _nc_tracechar
char *_nc_tracechar(
SCREEN *sp,
int ch)
{ return(*(char **)0); }
#undef _tracechar
char *_tracechar(
int ch)
{ return(*(char **)0); }
/* ./tinfo/lib_ttyflags.c */
#undef _nc_get_tty_mode_sp
int _nc_get_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_get_tty_mode
int _nc_get_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode_sp
int _nc_set_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode
int _nc_set_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef def_shell_mode_sp
int def_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_shell_mode
int def_shell_mode(void)
{ return(*(int *)0); }
#undef def_prog_mode_sp
int def_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_prog_mode
int def_prog_mode(void)
{ return(*(int *)0); }
#undef reset_prog_mode_sp
int reset_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_prog_mode
int reset_prog_mode(void)
{ return(*(int *)0); }
#undef reset_shell_mode_sp
int reset_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_shell_mode
int reset_shell_mode(void)
{ return(*(int *)0); }
#undef savetty_sp
int savetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef savetty
int savetty(void)
{ return(*(int *)0); }
#undef resetty_sp
int resetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef resetty
int resetty(void)
{ return(*(int *)0); }
/* ./tty/lib_twait.c */
#undef _nc_timed_wait
int _nc_timed_wait(
SCREEN *sp,
int mode,
int milliseconds,
int *timeleft)
{ return(*(int *)0); }
/* ./tinfo/name_match.c */
#undef _nc_first_name
char *_nc_first_name(
const char *const sp)
{ return(*(char **)0); }
#undef _nc_name_match
int _nc_name_match(
const char *const namelst,
const char *const name,
const char *const delim)
{ return(*(int *)0); }
/* ./names.c */
#undef boolnames
const char *const boolnames[] = {0};
#undef boolfnames
const char *const boolfnames[] = {0};
#undef numnames
const char *const numnames[] = {0};
#undef numfnames
const char *const numfnames[] = {0};
#undef strnames
const char *const strnames[] = {0};
#undef strfnames
const char *const strfnames[] = {0};
/* ./tinfo/obsolete.c */
#undef _nc_set_buffer_sp
void _nc_set_buffer_sp(
SCREEN *sp,
FILE *ofp,
int buffered)
{ /* void */ }
#undef _nc_set_buffer
void _nc_set_buffer(
FILE *ofp,
int buffered)
{ /* void */ }
/* ./tinfo/read_entry.c */
#undef _nc_init_termtype
void _nc_init_termtype(
TERMTYPE2 *const tp)
{ /* void */ }
#undef _nc_read_termtype
int _nc_read_termtype(
TERMTYPE2 *ptr,
char *buffer,
int limit)
{ return(*(int *)0); }
#undef _nc_read_file_entry
int _nc_read_file_entry(
const char *const filename,
TERMTYPE2 *ptr)
{ return(*(int *)0); }
#undef _nc_read_entry
int _nc_read_entry(
const char *const name,
char *const filename,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
/* ./tinfo/read_termcap.c */
#undef _nc_read_termcap_entry
int _nc_read_termcap_entry(
const char *const tn,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
/* ./tinfo/strings.c */
#undef _nc_str_init
string_desc *_nc_str_init(
string_desc *dst,
char *src,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_null
string_desc *_nc_str_null(
string_desc *dst,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_copy
string_desc *_nc_str_copy(
string_desc *dst,
string_desc *src)
{ return(*(string_desc **)0); }
#undef _nc_safe_strcat
NCURSES_BOOL _nc_safe_strcat(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_safe_strcpy
NCURSES_BOOL _nc_safe_strcpy(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
/* ./trace/trace_buf.c */
#undef _nc_trace_buf
char *_nc_trace_buf(
int bufnum,
size_t want)
{ return(*(char **)0); }
#undef _nc_trace_bufcat
char *_nc_trace_bufcat(
int bufnum,
const char *value)
{ return(*(char **)0); }
/* ./trace/trace_tries.c */
#undef _nc_trace_tries
void _nc_trace_tries(
TRIES *tree)
{ /* void */ }
/* ./base/tries.c */
#undef _nc_expand_try
char *_nc_expand_try(
TRIES *tree,
unsigned code,
int *count,
size_t len)
{ return(*(char **)0); }
#undef _nc_remove_key
int _nc_remove_key(
TRIES **tree,
unsigned code)
{ return(*(int *)0); }
#undef _nc_remove_string
int _nc_remove_string(
TRIES **tree,
const char *string)
{ return(*(int *)0); }
/* ./tinfo/trim_sgr0.c */
#undef _nc_trim_sgr0
char *_nc_trim_sgr0(
TERMTYPE2 *tp)
{ return(*(char **)0); }
/* ./unctrl.c */
#undef unctrl_sp
const char *unctrl_sp(
SCREEN *sp,
chtype ch)
{ return(*(const char **)0); }
#undef unctrl
const char *unctrl(
chtype ch)
{ return(*(const char **)0); }
/* ./trace/visbuf.c */
#undef _nc_visbuf2
const char *_nc_visbuf2(
int bufnum,
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbuf
const char *_nc_visbuf(
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbufn
const char *_nc_visbufn(
const char *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viscbuf2
const char *_nc_viscbuf2(
int bufnum,
const chtype *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viscbuf
const char *_nc_viscbuf(
const chtype *buf,
int len)
{ return(*(const char **)0); }
/* ./tinfo/alloc_entry.c */
#undef _nc_init_entry
void _nc_init_entry(
ENTRY *const tp)
{ /* void */ }
#undef _nc_copy_entry
ENTRY *_nc_copy_entry(
ENTRY *oldp)
{ return(*(ENTRY **)0); }
#undef _nc_save_str
char *_nc_save_str(
const char *const string)
{ return(*(char **)0); }
#undef _nc_wrap_entry
void _nc_wrap_entry(
ENTRY *const ep,
NCURSES_BOOL copy_strings)
{ /* void */ }
#undef _nc_merge_entry
void _nc_merge_entry(
ENTRY *const target,
ENTRY *const source)
{ /* void */ }
/* ./tinfo/captoinfo.c */
#undef _nc_captoinfo
char *_nc_captoinfo(
const char *cap,
const char *s,
int const parameterized)
{ return(*(char **)0); }
#undef _nc_infotocap
char *_nc_infotocap(
const char *cap,
const char *str,
int const parameterized)
{ return(*(char **)0); }
/* ./tinfo/comp_expand.c */
#undef _nc_tic_expand
char *_nc_tic_expand(
const char *srcp,
NCURSES_BOOL tic_format,
int numbers)
{ return(*(char **)0); }
/* ./tinfo/comp_parse.c */
#undef _nc_check_termtype2
void (*_nc_check_termtype2)(
TERMTYPE2 *p1,
NCURSES_BOOL p2);
#undef _nc_entry_match
NCURSES_BOOL _nc_entry_match(
char *n1,
char *n2)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_read_entry_source
void _nc_read_entry_source(
FILE *fp,
char *buf,
int literal,
NCURSES_BOOL silent,
NCURSES_BOOL (*hook)(
ENTRY *p1))
{ /* void */ }
#undef _nc_resolve_uses2
int _nc_resolve_uses2(
NCURSES_BOOL fullresolve,
NCURSES_BOOL literal)
{ return(*(int *)0); }
/* ./tinfo/comp_scan.c */
#undef _nc_syntax
int _nc_syntax;
#undef _nc_strict_bsd
int _nc_strict_bsd;
#undef _nc_curr_file_pos
long _nc_curr_file_pos;
#undef _nc_comment_start
long _nc_comment_start;
#undef _nc_comment_end
long _nc_comment_end;
#undef _nc_start_line
long _nc_start_line;
#undef _nc_curr_token
struct token _nc_curr_token;
#undef _nc_disable_period
NCURSES_BOOL _nc_disable_period;
#undef _nc_reset_input
void _nc_reset_input(
FILE *fp,
char *buf)
{ /* void */ }
#undef _nc_get_token
int _nc_get_token(
NCURSES_BOOL silent)
{ return(*(int *)0); }
#undef _nc_trans_string
int _nc_trans_string(
char *ptr,
char *last)
{ return(*(int *)0); }
#undef _nc_push_token
void _nc_push_token(
int tokclass)
{ /* void */ }
#undef _nc_panic_mode
void _nc_panic_mode(
char ch)
{ /* void */ }
/* ./tinfo/parse_entry.c */
#undef _nc_parse_entry
int _nc_parse_entry(
ENTRY *entryp,
int literal,
NCURSES_BOOL silent)
{ return(*(int *)0); }
#undef _nc_capcmp
int _nc_capcmp(
const char *s,
const char *t)
{ return(*(int *)0); }
/* ./tinfo/write_entry.c */
#undef _nc_set_writedir
void _nc_set_writedir(
const char *dir)
{ /* void */ }
#undef _nc_write_entry
void _nc_write_entry(
TERMTYPE2 *const tp)
{ /* void */ }
#undef _nc_write_object
int _nc_write_object(
TERMTYPE2 *tp,
char *buffer,
unsigned *offset,
unsigned limit)
{ return(*(int *)0); }
#undef _nc_tic_written
int _nc_tic_written(void)
{ return(*(int *)0); }
/* ./base/define_key.c */
#undef define_key_sp
int define_key_sp(
SCREEN *sp,
const char *str,
int keycode)
{ return(*(int *)0); }
#undef define_key
int define_key(
const char *str,
int keycode)
{ return(*(int *)0); }
/* ./tinfo/hashed_db.c */
#undef _nc_hashed_db
void _nc_hashed_db(void)
{ /* void */ }
/* ./base/key_defined.c */
#undef key_defined_sp
int key_defined_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef key_defined
int key_defined(
const char *str)
{ return(*(int *)0); }
/* ./base/keybound.c */
#undef keybound_sp
char *keybound_sp(
SCREEN *sp,
int code,
int count)
{ return(*(char **)0); }
#undef keybound
char *keybound(
int code,
int count)
{ return(*(char **)0); }
/* ./base/keyok.c */
#undef keyok_sp
int keyok_sp(
SCREEN *sp,
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef keyok
int keyok(
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/version.c */
#undef curses_version
const char *curses_version(void)
{ return(*(const char **)0); }
diff --git a/contrib/ncurses/ncurses/llib-lncursest b/contrib/ncurses/ncurses/llib-lncursest
index 0fbde935d07b..36a94b57297e 100644
--- a/contrib/ncurses/ncurses/llib-lncursest
+++ b/contrib/ncurses/ncurses/llib-lncursest
@@ -1,4540 +1,4547 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 2008-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 2008-on *
****************************************************************************/
/* LINTLIBRARY */
/* ./tty/hardscroll.c */
#include <curses.priv.h>
#undef _nc_oldnums
int *_nc_oldnums;
#undef _nc_scroll_optimize_sp
void _nc_scroll_optimize_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_scroll_optimize
void _nc_scroll_optimize(void)
{ /* void */ }
#undef _nc_linedump_sp
void _nc_linedump_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_linedump
void _nc_linedump(void)
{ /* void */ }
/* ./tty/hashmap.c */
#undef _nc_hash_map_sp
void _nc_hash_map_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_hash_map
void _nc_hash_map(void)
{ /* void */ }
#undef _nc_make_oldhash_sp
void _nc_make_oldhash_sp(
SCREEN *sp,
int i)
{ /* void */ }
#undef _nc_make_oldhash
void _nc_make_oldhash(
int i)
{ /* void */ }
#undef _nc_scroll_oldhash_sp
void _nc_scroll_oldhash_sp(
SCREEN *sp,
int n,
int top,
int bot)
{ /* void */ }
#undef _nc_scroll_oldhash
void _nc_scroll_oldhash(
int n,
int top,
int bot)
{ /* void */ }
/* ./base/lib_addch.c */
#undef _nc_render
chtype _nc_render(
WINDOW *win,
chtype ch)
{ return(*(chtype *)0); }
#undef _nc_waddch_nosync
int _nc_waddch_nosync(
WINDOW *win,
const chtype c)
{ return(*(int *)0); }
#undef waddch
int waddch(
WINDOW *win,
const chtype ch)
{ return(*(int *)0); }
#undef wechochar
int wechochar(
WINDOW *win,
const chtype ch)
{ return(*(int *)0); }
/* ./base/lib_addstr.c */
#undef waddnstr
int waddnstr(
WINDOW *win,
const char *astr,
int n)
{ return(*(int *)0); }
#undef waddchnstr
int waddchnstr(
WINDOW *win,
const chtype *astr,
int n)
{ return(*(int *)0); }
/* ./base/lib_beep.c */
#undef beep_sp
int beep_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef beep
int beep(void)
{ return(*(int *)0); }
/* ./base/lib_bkgd.c */
#undef wbkgdset
void wbkgdset(
WINDOW *win,
chtype ch)
{ /* void */ }
#undef wbkgd
int wbkgd(
WINDOW *win,
chtype ch)
{ return(*(int *)0); }
/* ./base/lib_box.c */
#undef wborder
int wborder(
WINDOW *win,
chtype ls,
chtype rs,
chtype ts,
chtype bs,
chtype tl,
chtype tr,
chtype bl,
chtype br)
{ return(*(int *)0); }
/* ./base/lib_chgat.c */
#undef wchgat
int wchgat(
WINDOW *win,
int n,
attr_t attr,
short pair_arg,
const void *opts)
{ return(*(int *)0); }
/* ./base/lib_clear.c */
#undef wclear
int wclear(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_clearok.c */
#undef clearok
int clearok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/lib_clrbot.c */
#undef wclrtobot
int wclrtobot(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_clreol.c */
#undef wclrtoeol
int wclrtoeol(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_color.c */
#undef _nc_COLOR_PAIRS
int _nc_COLOR_PAIRS(void)
{ return(*(int *)0); }
#undef _nc_COLORS
int _nc_COLORS(void)
{ return(*(int *)0); }
#undef _nc_reset_colors_sp
NCURSES_BOOL _nc_reset_colors_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_reset_colors
NCURSES_BOOL _nc_reset_colors(void)
{ return(*(NCURSES_BOOL *)0); }
#undef start_color_sp
int start_color_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef start_color
int start_color(void)
{ return(*(int *)0); }
#undef _nc_change_pair
void _nc_change_pair(
SCREEN *sp,
int pair)
{ /* void */ }
#undef _nc_reserve_pairs
void _nc_reserve_pairs(
SCREEN *sp,
int want)
{ /* void */ }
#undef _nc_init_pair
int _nc_init_pair(
SCREEN *sp,
int pair,
int f,
int b)
{ return(*(int *)0); }
#undef init_pair_sp
int init_pair_sp(
SCREEN *sp,
short pair,
short f,
short b)
{ return(*(int *)0); }
#undef init_pair
int init_pair(
short pair,
short f,
short b)
{ return(*(int *)0); }
#undef _nc_init_color
int _nc_init_color(
SCREEN *sp,
int color,
int r,
int g,
int b)
{ return(*(int *)0); }
#undef init_color_sp
int init_color_sp(
SCREEN *sp,
short color,
short r,
short g,
short b)
{ return(*(int *)0); }
#undef init_color
int init_color(
short color,
short r,
short g,
short b)
{ return(*(int *)0); }
#undef can_change_color_sp
NCURSES_BOOL can_change_color_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef can_change_color
NCURSES_BOOL can_change_color(void)
{ return(*(NCURSES_BOOL *)0); }
#undef has_colors_sp
NCURSES_BOOL has_colors_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_colors
NCURSES_BOOL has_colors(void)
{ return(*(NCURSES_BOOL *)0); }
#undef color_content_sp
int color_content_sp(
SCREEN *sp,
short color,
short *r,
short *g,
short *b)
{ return(*(int *)0); }
#undef color_content
int color_content(
short color,
short *r,
short *g,
short *b)
{ return(*(int *)0); }
#undef _nc_pair_content
int _nc_pair_content(
SCREEN *sp,
int pair,
int *f,
int *b)
{ return(*(int *)0); }
#undef pair_content_sp
int pair_content_sp(
SCREEN *sp,
short pair,
short *f,
short *b)
{ return(*(int *)0); }
#undef pair_content
int pair_content(
short pair,
short *f,
short *b)
{ return(*(int *)0); }
#undef _nc_do_color_sp
void _nc_do_color_sp(
SCREEN *sp,
int old_pair,
int pair,
int reverse,
NCURSES_OUTC_sp outc)
{ /* void */ }
#undef _nc_do_color
void _nc_do_color(
int old_pair,
int pair,
int reverse,
NCURSES_OUTC outc)
{ /* void */ }
/* ./base/lib_colorset.c */
#undef wcolor_set
int wcolor_set(
WINDOW *win,
short pair_arg,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_delch.c */
#undef wdelch
int wdelch(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_delwin.c */
#undef delwin
int delwin(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_echo.c */
#undef echo_sp
int echo_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef echo
int echo(void)
{ return(*(int *)0); }
#undef noecho_sp
int noecho_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef noecho
int noecho(void)
{ return(*(int *)0); }
/* ./base/lib_endwin.c */
#undef endwin_sp
int endwin_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef endwin
int endwin(void)
{ return(*(int *)0); }
/* ./base/lib_erase.c */
#undef werase
int werase(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_flash.c */
#undef flash_sp
int flash_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef flash
int flash(void)
{ return(*(int *)0); }
/* ./lib_gen.c */
#undef addch
-int (addch)(
+int addch(
const chtype z)
{ return(*(int *)0); }
#undef addchnstr
-int (addchnstr)(
+int addchnstr(
const chtype *a1,
int z)
{ return(*(int *)0); }
#undef addchstr
-int (addchstr)(
+int addchstr(
const chtype *z)
{ return(*(int *)0); }
#undef addnstr
-int (addnstr)(
+int addnstr(
const char *a1,
int z)
{ return(*(int *)0); }
#undef addstr
-int (addstr)(
+int addstr(
const char *z)
{ return(*(int *)0); }
#undef attroff
-int (attroff)(
- NCURSES_ATTR_T z)
+int attroff(
+ int z)
{ return(*(int *)0); }
#undef attron
-int (attron)(
- NCURSES_ATTR_T z)
+int attron(
+ int z)
{ return(*(int *)0); }
#undef attrset
-int (attrset)(
- NCURSES_ATTR_T z)
+int attrset(
+ int z)
{ return(*(int *)0); }
#undef attr_get
-int (attr_get)(
+int attr_get(
attr_t *a1,
short *a2,
void *z)
{ return(*(int *)0); }
#undef attr_off
-int (attr_off)(
+int attr_off(
attr_t a1,
void *z)
{ return(*(int *)0); }
#undef attr_on
-int (attr_on)(
+int attr_on(
attr_t a1,
void *z)
{ return(*(int *)0); }
#undef attr_set
-int (attr_set)(
+int attr_set(
attr_t a1,
short a2,
void *z)
{ return(*(int *)0); }
#undef bkgd
-int (bkgd)(
+int bkgd(
chtype z)
{ return(*(int *)0); }
#undef bkgdset
-void (bkgdset)(
+void bkgdset(
chtype z)
{ /* void */ }
#undef border
-int (border)(
+int border(
chtype a1,
chtype a2,
chtype a3,
chtype a4,
chtype a5,
chtype a6,
chtype a7,
chtype z)
{ return(*(int *)0); }
#undef box
-int (box)(
+int box(
WINDOW *a1,
chtype a2,
chtype z)
{ return(*(int *)0); }
#undef chgat
-int (chgat)(
+int chgat(
int a1,
attr_t a2,
short a3,
const void *z)
{ return(*(int *)0); }
#undef clear
-int (clear)(void)
+int clear(void)
{ return(*(int *)0); }
#undef clrtobot
-int (clrtobot)(void)
+int clrtobot(void)
{ return(*(int *)0); }
#undef clrtoeol
-int (clrtoeol)(void)
+int clrtoeol(void)
{ return(*(int *)0); }
#undef color_set
-int (color_set)(
+int color_set(
short a1,
void *z)
{ return(*(int *)0); }
#undef COLOR_PAIR
-int (COLOR_PAIR)(
+int COLOR_PAIR(
int z)
{ return(*(int *)0); }
#undef delch
-int (delch)(void)
+int delch(void)
{ return(*(int *)0); }
#undef deleteln
-int (deleteln)(void)
+int deleteln(void)
{ return(*(int *)0); }
#undef echochar
-int (echochar)(
+int echochar(
const chtype z)
{ return(*(int *)0); }
#undef erase
-int (erase)(void)
+int erase(void)
{ return(*(int *)0); }
#undef getbkgd
-chtype (getbkgd)(
+chtype getbkgd(
WINDOW *z)
{ return(*(chtype *)0); }
#undef getch
-int (getch)(void)
+int getch(void)
{ return(*(int *)0); }
#undef getnstr
-int (getnstr)(
+int getnstr(
char *a1,
int z)
{ return(*(int *)0); }
#undef getstr
-int (getstr)(
+int getstr(
char *z)
{ return(*(int *)0); }
#undef hline
-int (hline)(
+int hline(
chtype a1,
int z)
{ return(*(int *)0); }
#undef inch
-chtype (inch)(void)
+chtype inch(void)
{ return(*(chtype *)0); }
#undef inchnstr
-int (inchnstr)(
+int inchnstr(
chtype *a1,
int z)
{ return(*(int *)0); }
#undef inchstr
-int (inchstr)(
+int inchstr(
chtype *z)
{ return(*(int *)0); }
#undef innstr
-int (innstr)(
+int innstr(
char *a1,
int z)
{ return(*(int *)0); }
#undef insch
-int (insch)(
+int insch(
chtype z)
{ return(*(int *)0); }
#undef insdelln
-int (insdelln)(
+int insdelln(
int z)
{ return(*(int *)0); }
#undef insertln
-int (insertln)(void)
+int insertln(void)
{ return(*(int *)0); }
#undef insnstr
-int (insnstr)(
+int insnstr(
const char *a1,
int z)
{ return(*(int *)0); }
#undef insstr
-int (insstr)(
+int insstr(
const char *z)
{ return(*(int *)0); }
#undef instr
-int (instr)(
+int instr(
char *z)
{ return(*(int *)0); }
#undef move
-int (move)(
+int move(
int a1,
int z)
{ return(*(int *)0); }
#undef mvaddch
-int (mvaddch)(
+int mvaddch(
int a1,
int a2,
const chtype z)
{ return(*(int *)0); }
#undef mvaddchnstr
-int (mvaddchnstr)(
+int mvaddchnstr(
int a1,
int a2,
const chtype *a3,
int z)
{ return(*(int *)0); }
#undef mvaddchstr
-int (mvaddchstr)(
+int mvaddchstr(
int a1,
int a2,
const chtype *z)
{ return(*(int *)0); }
#undef mvaddnstr
-int (mvaddnstr)(
+int mvaddnstr(
int a1,
int a2,
const char *a3,
int z)
{ return(*(int *)0); }
#undef mvaddstr
-int (mvaddstr)(
+int mvaddstr(
int a1,
int a2,
const char *z)
{ return(*(int *)0); }
#undef mvchgat
-int (mvchgat)(
+int mvchgat(
int a1,
int a2,
int a3,
attr_t a4,
short a5,
const void *z)
{ return(*(int *)0); }
#undef mvdelch
-int (mvdelch)(
+int mvdelch(
int a1,
int z)
{ return(*(int *)0); }
#undef mvgetch
-int (mvgetch)(
+int mvgetch(
int a1,
int z)
{ return(*(int *)0); }
#undef mvgetnstr
-int (mvgetnstr)(
+int mvgetnstr(
int a1,
int a2,
char *a3,
int z)
{ return(*(int *)0); }
#undef mvgetstr
-int (mvgetstr)(
+int mvgetstr(
int a1,
int a2,
char *z)
{ return(*(int *)0); }
#undef mvhline
-int (mvhline)(
+int mvhline(
int a1,
int a2,
chtype a3,
int z)
{ return(*(int *)0); }
#undef mvinch
-chtype (mvinch)(
+chtype mvinch(
int a1,
int z)
{ return(*(chtype *)0); }
#undef mvinchnstr
-int (mvinchnstr)(
+int mvinchnstr(
int a1,
int a2,
chtype *a3,
int z)
{ return(*(int *)0); }
#undef mvinchstr
-int (mvinchstr)(
+int mvinchstr(
int a1,
int a2,
chtype *z)
{ return(*(int *)0); }
#undef mvinnstr
-int (mvinnstr)(
+int mvinnstr(
int a1,
int a2,
char *a3,
int z)
{ return(*(int *)0); }
#undef mvinsch
-int (mvinsch)(
+int mvinsch(
int a1,
int a2,
chtype z)
{ return(*(int *)0); }
#undef mvinsnstr
-int (mvinsnstr)(
+int mvinsnstr(
int a1,
int a2,
const char *a3,
int z)
{ return(*(int *)0); }
#undef mvinsstr
-int (mvinsstr)(
+int mvinsstr(
int a1,
int a2,
const char *z)
{ return(*(int *)0); }
#undef mvinstr
-int (mvinstr)(
+int mvinstr(
int a1,
int a2,
char *z)
{ return(*(int *)0); }
#undef mvvline
-int (mvvline)(
+int mvvline(
int a1,
int a2,
chtype a3,
int z)
{ return(*(int *)0); }
#undef mvwaddch
-int (mvwaddch)(
+int mvwaddch(
WINDOW *a1,
int a2,
int a3,
const chtype z)
{ return(*(int *)0); }
#undef mvwaddchnstr
-int (mvwaddchnstr)(
+int mvwaddchnstr(
WINDOW *a1,
int a2,
int a3,
const chtype *a4,
int z)
{ return(*(int *)0); }
#undef mvwaddchstr
-int (mvwaddchstr)(
+int mvwaddchstr(
WINDOW *a1,
int a2,
int a3,
const chtype *z)
{ return(*(int *)0); }
#undef mvwaddnstr
-int (mvwaddnstr)(
+int mvwaddnstr(
WINDOW *a1,
int a2,
int a3,
const char *a4,
int z)
{ return(*(int *)0); }
#undef mvwaddstr
-int (mvwaddstr)(
+int mvwaddstr(
WINDOW *a1,
int a2,
int a3,
const char *z)
{ return(*(int *)0); }
#undef mvwchgat
-int (mvwchgat)(
+int mvwchgat(
WINDOW *a1,
int a2,
int a3,
int a4,
attr_t a5,
short a6,
const void *z)
{ return(*(int *)0); }
#undef mvwdelch
-int (mvwdelch)(
+int mvwdelch(
WINDOW *a1,
int a2,
int z)
{ return(*(int *)0); }
#undef mvwgetch
-int (mvwgetch)(
+int mvwgetch(
WINDOW *a1,
int a2,
int z)
{ return(*(int *)0); }
#undef mvwgetnstr
-int (mvwgetnstr)(
+int mvwgetnstr(
WINDOW *a1,
int a2,
int a3,
char *a4,
int z)
{ return(*(int *)0); }
#undef mvwgetstr
-int (mvwgetstr)(
+int mvwgetstr(
WINDOW *a1,
int a2,
int a3,
char *z)
{ return(*(int *)0); }
#undef mvwhline
-int (mvwhline)(
+int mvwhline(
WINDOW *a1,
int a2,
int a3,
chtype a4,
int z)
{ return(*(int *)0); }
#undef mvwinch
-chtype (mvwinch)(
+chtype mvwinch(
WINDOW *a1,
int a2,
int z)
{ return(*(chtype *)0); }
#undef mvwinchnstr
-int (mvwinchnstr)(
+int mvwinchnstr(
WINDOW *a1,
int a2,
int a3,
chtype *a4,
int z)
{ return(*(int *)0); }
#undef mvwinchstr
-int (mvwinchstr)(
+int mvwinchstr(
WINDOW *a1,
int a2,
int a3,
chtype *z)
{ return(*(int *)0); }
#undef mvwinnstr
-int (mvwinnstr)(
+int mvwinnstr(
WINDOW *a1,
int a2,
int a3,
char *a4,
int z)
{ return(*(int *)0); }
#undef mvwinsch
-int (mvwinsch)(
+int mvwinsch(
WINDOW *a1,
int a2,
int a3,
chtype z)
{ return(*(int *)0); }
#undef mvwinsnstr
-int (mvwinsnstr)(
+int mvwinsnstr(
WINDOW *a1,
int a2,
int a3,
const char *a4,
int z)
{ return(*(int *)0); }
#undef mvwinsstr
-int (mvwinsstr)(
+int mvwinsstr(
WINDOW *a1,
int a2,
int a3,
const char *z)
{ return(*(int *)0); }
#undef mvwinstr
-int (mvwinstr)(
+int mvwinstr(
WINDOW *a1,
int a2,
int a3,
char *z)
{ return(*(int *)0); }
#undef mvwvline
-int (mvwvline)(
+int mvwvline(
WINDOW *a1,
int a2,
int a3,
chtype a4,
int z)
{ return(*(int *)0); }
#undef PAIR_NUMBER
-int (PAIR_NUMBER)(
+int PAIR_NUMBER(
int z)
{ return(*(int *)0); }
#undef redrawwin
-int (redrawwin)(
+int redrawwin(
WINDOW *z)
{ return(*(int *)0); }
#undef refresh
-int (refresh)(void)
+int refresh(void)
{ return(*(int *)0); }
#undef scrl
-int (scrl)(
+int scrl(
int z)
{ return(*(int *)0); }
#undef scroll
-int (scroll)(
+int scroll(
WINDOW *z)
{ return(*(int *)0); }
#undef setscrreg
-int (setscrreg)(
+int setscrreg(
int a1,
int z)
{ return(*(int *)0); }
#undef standout
-int (standout)(void)
+int standout(void)
{ return(*(int *)0); }
#undef standend
-int (standend)(void)
+int standend(void)
{ return(*(int *)0); }
#undef timeout
-void (timeout)(
+void timeout(
int z)
{ /* void */ }
#undef touchline
-int (touchline)(
+int touchline(
WINDOW *a1,
int a2,
int z)
{ return(*(int *)0); }
#undef touchwin
-int (touchwin)(
+int touchwin(
WINDOW *z)
{ return(*(int *)0); }
#undef untouchwin
-int (untouchwin)(
+int untouchwin(
WINDOW *z)
{ return(*(int *)0); }
#undef vline
-int (vline)(
+int vline(
chtype a1,
int z)
{ return(*(int *)0); }
#undef waddchstr
-int (waddchstr)(
+int waddchstr(
WINDOW *a1,
const chtype *z)
{ return(*(int *)0); }
#undef waddstr
-int (waddstr)(
+int waddstr(
WINDOW *a1,
const char *z)
{ return(*(int *)0); }
#undef wattron
-int (wattron)(
+int wattron(
WINDOW *a1,
int z)
{ return(*(int *)0); }
#undef wattroff
-int (wattroff)(
+int wattroff(
WINDOW *a1,
int z)
{ return(*(int *)0); }
#undef wattrset
-int (wattrset)(
+int wattrset(
WINDOW *a1,
int z)
{ return(*(int *)0); }
#undef wattr_get
-int (wattr_get)(
+int wattr_get(
WINDOW *a1,
attr_t *a2,
short *a3,
void *z)
{ return(*(int *)0); }
#undef wattr_set
-int (wattr_set)(
+int wattr_set(
WINDOW *a1,
attr_t a2,
short a3,
void *z)
{ return(*(int *)0); }
#undef wdeleteln
-int (wdeleteln)(
+int wdeleteln(
WINDOW *z)
{ return(*(int *)0); }
#undef wgetstr
-int (wgetstr)(
+int wgetstr(
WINDOW *a1,
char *z)
{ return(*(int *)0); }
#undef winchstr
-int (winchstr)(
+int winchstr(
WINDOW *a1,
chtype *z)
{ return(*(int *)0); }
#undef winsertln
-int (winsertln)(
+int winsertln(
WINDOW *z)
{ return(*(int *)0); }
#undef winsstr
-int (winsstr)(
+int winsstr(
WINDOW *a1,
const char *z)
{ return(*(int *)0); }
#undef winstr
-int (winstr)(
+int winstr(
WINDOW *a1,
char *z)
{ return(*(int *)0); }
#undef wstandout
-int (wstandout)(
+int wstandout(
WINDOW *z)
{ return(*(int *)0); }
#undef wstandend
-int (wstandend)(
+int wstandend(
WINDOW *z)
{ return(*(int *)0); }
#undef getattrs
-int (getattrs)(
+int getattrs(
const WINDOW *z)
{ return(*(int *)0); }
#undef getcurx
-int (getcurx)(
+int getcurx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getcury
-int (getcury)(
+int getcury(
const WINDOW *z)
{ return(*(int *)0); }
#undef getbegx
-int (getbegx)(
+int getbegx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getbegy
-int (getbegy)(
+int getbegy(
const WINDOW *z)
{ return(*(int *)0); }
#undef getmaxx
-int (getmaxx)(
+int getmaxx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getmaxy
-int (getmaxy)(
+int getmaxy(
const WINDOW *z)
{ return(*(int *)0); }
#undef getparx
-int (getparx)(
+int getparx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getpary
-int (getpary)(
+int getpary(
const WINDOW *z)
{ return(*(int *)0); }
#undef wgetparent
-WINDOW *(wgetparent)(
+WINDOW *wgetparent(
const WINDOW *z)
{ return(*(WINDOW **)0); }
#undef is_cleared
-NCURSES_BOOL (is_cleared)(
+NCURSES_BOOL is_cleared(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_idcok
-NCURSES_BOOL (is_idcok)(
+NCURSES_BOOL is_idcok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_idlok
-NCURSES_BOOL (is_idlok)(
+NCURSES_BOOL is_idlok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_immedok
-NCURSES_BOOL (is_immedok)(
+NCURSES_BOOL is_immedok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_keypad
-NCURSES_BOOL (is_keypad)(
+NCURSES_BOOL is_keypad(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_leaveok
-NCURSES_BOOL (is_leaveok)(
+NCURSES_BOOL is_leaveok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_nodelay
-NCURSES_BOOL (is_nodelay)(
+NCURSES_BOOL is_nodelay(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_notimeout
-NCURSES_BOOL (is_notimeout)(
+NCURSES_BOOL is_notimeout(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_pad
-NCURSES_BOOL (is_pad)(
+NCURSES_BOOL is_pad(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_scrollok
-NCURSES_BOOL (is_scrollok)(
+NCURSES_BOOL is_scrollok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_subwin
-NCURSES_BOOL (is_subwin)(
+NCURSES_BOOL is_subwin(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_syncok
-NCURSES_BOOL (is_syncok)(
+NCURSES_BOOL is_syncok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef wgetdelay
-int (wgetdelay)(
+int wgetdelay(
const WINDOW *z)
{ return(*(int *)0); }
#undef wgetscrreg
-int (wgetscrreg)(
+int wgetscrreg(
const WINDOW *a1,
int *a2,
int *z)
{ return(*(int *)0); }
#undef mouse_trafo
-NCURSES_BOOL (mouse_trafo)(
+NCURSES_BOOL mouse_trafo(
int *a1,
int *a2,
NCURSES_BOOL z)
{ return(*(NCURSES_BOOL *)0); }
/* ./base/lib_getch.c */
#undef _nc_ESCDELAY
int _nc_ESCDELAY(void)
{ return(*(int *)0); }
#undef _nc_ptr_Escdelay
int *_nc_ptr_Escdelay(
SCREEN *sp)
{ return(*(int **)0); }
#undef set_escdelay_sp
int set_escdelay_sp(
SCREEN *sp,
int value)
{ return(*(int *)0); }
#undef set_escdelay
int set_escdelay(
int value)
{ return(*(int *)0); }
#undef get_escdelay_sp
int get_escdelay_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef get_escdelay
int get_escdelay(void)
{ return(*(int *)0); }
#undef _nc_wgetch
int _nc_wgetch(
WINDOW *win,
int *result,
int use_meta)
{ return(*(int *)0); }
#undef wgetch
int wgetch(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_getstr.c */
#undef wgetnstr
int wgetnstr(
WINDOW *win,
char *str,
int maxlen)
{ return(*(int *)0); }
/* ./base/lib_hline.c */
#undef whline
int whline(
WINDOW *win,
chtype ch,
int n)
{ return(*(int *)0); }
/* ./base/lib_immedok.c */
#undef immedok
void immedok(
WINDOW *win,
NCURSES_BOOL flag)
{ /* void */ }
/* ./base/lib_inchstr.c */
#undef winchnstr
int winchnstr(
WINDOW *win,
chtype *str,
int n)
{ return(*(int *)0); }
/* ./base/lib_initscr.c */
#undef initscr
WINDOW *initscr(void)
{ return(*(WINDOW **)0); }
/* ./base/lib_insch.c */
#undef _nc_insert_ch
int _nc_insert_ch(
SCREEN *sp,
WINDOW *win,
chtype ch)
{ return(*(int *)0); }
#undef winsch
int winsch(
WINDOW *win,
chtype c)
{ return(*(int *)0); }
/* ./base/lib_insdel.c */
#undef winsdelln
int winsdelln(
WINDOW *win,
int n)
{ return(*(int *)0); }
/* ./base/lib_insnstr.c */
#undef winsnstr
int winsnstr(
WINDOW *win,
const char *s,
int n)
{ return(*(int *)0); }
/* ./base/lib_instr.c */
#undef winnstr
int winnstr(
WINDOW *win,
char *str,
int n)
{ return(*(int *)0); }
/* ./base/lib_isendwin.c */
#undef isendwin_sp
NCURSES_BOOL isendwin_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef isendwin
NCURSES_BOOL isendwin(void)
{ return(*(NCURSES_BOOL *)0); }
/* ./base/lib_leaveok.c */
#undef leaveok
int leaveok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/lib_mouse.c */
#undef getmouse_sp
int getmouse_sp(
SCREEN *sp,
MEVENT *aevent)
{ return(*(int *)0); }
#undef getmouse
int getmouse(
MEVENT *aevent)
{ return(*(int *)0); }
#undef ungetmouse_sp
int ungetmouse_sp(
SCREEN *sp,
MEVENT *aevent)
{ return(*(int *)0); }
#undef ungetmouse
int ungetmouse(
MEVENT *aevent)
{ return(*(int *)0); }
#undef mousemask_sp
mmask_t mousemask_sp(
SCREEN *sp,
mmask_t newmask,
mmask_t *oldmask)
{ return(*(mmask_t *)0); }
#undef mousemask
mmask_t mousemask(
mmask_t newmask,
mmask_t *oldmask)
{ return(*(mmask_t *)0); }
#undef wenclose
NCURSES_BOOL wenclose(
const WINDOW *win,
int y,
int x)
{ return(*(NCURSES_BOOL *)0); }
#undef mouseinterval_sp
int mouseinterval_sp(
SCREEN *sp,
int maxclick)
{ return(*(int *)0); }
#undef mouseinterval
int mouseinterval(
int maxclick)
{ return(*(int *)0); }
#undef _nc_has_mouse
NCURSES_BOOL _nc_has_mouse(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_mouse_sp
NCURSES_BOOL has_mouse_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_mouse
NCURSES_BOOL has_mouse(void)
{ return(*(NCURSES_BOOL *)0); }
#undef wmouse_trafo
NCURSES_BOOL wmouse_trafo(
const WINDOW *win,
int *pY,
int *pX,
NCURSES_BOOL to_screen)
{ return(*(NCURSES_BOOL *)0); }
/* ./base/lib_move.c */
#undef wmove
int wmove(
WINDOW *win,
int y,
int x)
{ return(*(int *)0); }
/* ./tty/lib_mvcur.c */
#undef _nc_msec_cost_sp
int _nc_msec_cost_sp(
SCREEN *sp,
const char *const cap,
int affcnt)
{ return(*(int *)0); }
#undef _nc_msec_cost
int _nc_msec_cost(
const char *const cap,
int affcnt)
{ return(*(int *)0); }
#undef _nc_mvcur_resume_sp
void _nc_mvcur_resume_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_mvcur_resume
void _nc_mvcur_resume(void)
{ /* void */ }
#undef _nc_mvcur_init_sp
void _nc_mvcur_init_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_mvcur_init
void _nc_mvcur_init(void)
{ /* void */ }
#undef _nc_mvcur_wrap_sp
void _nc_mvcur_wrap_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_mvcur_wrap
void _nc_mvcur_wrap(void)
{ /* void */ }
#undef _nc_mvcur_sp
int _nc_mvcur_sp(
SCREEN *sp,
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef _nc_mvcur
int _nc_mvcur(
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef mvcur_sp
int mvcur_sp(
SCREEN *sp,
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef mvcur
int mvcur(
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef _nc_optimize_enable
int _nc_optimize_enable;
/* ./base/lib_mvwin.c */
#undef mvwin
int mvwin(
WINDOW *win,
int by,
int bx)
{ return(*(int *)0); }
/* ./base/lib_newterm.c */
#undef filter_sp
void filter_sp(
SCREEN *sp)
{ /* void */ }
#undef filter
void filter(void)
{ /* void */ }
#undef nofilter_sp
void nofilter_sp(
SCREEN *sp)
{ /* void */ }
#undef nofilter
void nofilter(void)
{ /* void */ }
#undef newterm_sp
SCREEN *newterm_sp(
SCREEN *sp,
const char *name,
FILE *ofp,
FILE *ifp)
{ return(*(SCREEN **)0); }
#undef newterm
SCREEN *newterm(
const char *name,
FILE *ofp,
FILE *ifp)
{ return(*(SCREEN **)0); }
/* ./base/lib_newwin.c */
#undef _nc_freewin
int _nc_freewin(
WINDOW *win)
{ return(*(int *)0); }
#undef newwin_sp
WINDOW *newwin_sp(
SCREEN *sp,
int num_lines,
int num_columns,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef newwin
WINDOW *newwin(
int num_lines,
int num_columns,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef derwin
WINDOW *derwin(
WINDOW *orig,
int num_lines,
int num_columns,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef subwin
WINDOW *subwin(
WINDOW *w,
int l,
int c,
int y,
int x)
{ return(*(WINDOW **)0); }
#undef _nc_makenew_sp
WINDOW *_nc_makenew_sp(
SCREEN *sp,
int num_lines,
int num_columns,
int begy,
int begx,
int flags)
{ return(*(WINDOW **)0); }
#undef _nc_curscr_of
WINDOW *_nc_curscr_of(
SCREEN *sp)
{ return(*(WINDOW **)0); }
#undef _nc_newscr_of
WINDOW *_nc_newscr_of(
SCREEN *sp)
{ return(*(WINDOW **)0); }
#undef _nc_stdscr_of
WINDOW *_nc_stdscr_of(
SCREEN *sp)
{ return(*(WINDOW **)0); }
/* ./base/lib_nl.c */
#undef nl_sp
int nl_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nl
int nl(void)
{ return(*(int *)0); }
#undef nonl_sp
int nonl_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nonl
int nonl(void)
{ return(*(int *)0); }
/* ./base/lib_overlay.c */
#undef overlay
int overlay(
const WINDOW *win1,
WINDOW *win2)
{ return(*(int *)0); }
#undef overwrite
int overwrite(
const WINDOW *win1,
WINDOW *win2)
{ return(*(int *)0); }
#undef copywin
int copywin(
const WINDOW *src,
WINDOW *dst,
int sminrow,
int smincol,
int dminrow,
int dmincol,
int dmaxrow,
int dmaxcol,
int over)
{ return(*(int *)0); }
/* ./base/lib_pad.c */
#undef newpad_sp
WINDOW *newpad_sp(
SCREEN *sp,
int l,
int c)
{ return(*(WINDOW **)0); }
#undef newpad
WINDOW *newpad(
int l,
int c)
{ return(*(WINDOW **)0); }
#undef subpad
WINDOW *subpad(
WINDOW *orig,
int l,
int c,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef prefresh
int prefresh(
WINDOW *win,
int pminrow,
int pmincol,
int sminrow,
int smincol,
int smaxrow,
int smaxcol)
{ return(*(int *)0); }
#undef pnoutrefresh
int pnoutrefresh(
WINDOW *win,
int pminrow,
int pmincol,
int sminrow,
int smincol,
int smaxrow,
int smaxcol)
{ return(*(int *)0); }
#undef pechochar
int pechochar(
WINDOW *pad,
const chtype ch)
{ return(*(int *)0); }
/* ./base/lib_printw.c */
#undef printw
int printw(
const char *fmt,
...)
{ return(*(int *)0); }
#undef wprintw
int wprintw(
WINDOW *win,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvprintw
int mvprintw(
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvwprintw
int mvwprintw(
WINDOW *win,
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
#undef vwprintw
int vwprintw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
#undef vw_printw
int vw_printw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
/* ./base/lib_redrawln.c */
#undef wredrawln
int wredrawln(
WINDOW *win,
int beg,
int num)
{ return(*(int *)0); }
/* ./base/lib_refresh.c */
#undef wrefresh
int wrefresh(
WINDOW *win)
{ return(*(int *)0); }
#undef wnoutrefresh
int wnoutrefresh(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_restart.c */
#undef restartterm_sp
int restartterm_sp(
SCREEN *sp,
const char *termp,
int filenum,
int *errret)
{ return(*(int *)0); }
#undef restartterm
int restartterm(
const char *termp,
int filenum,
int *errret)
{ return(*(int *)0); }
/* ./base/lib_scanw.c */
#undef vwscanw
int vwscanw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
#undef vw_scanw
int vw_scanw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
#undef scanw
int scanw(
const char *fmt,
...)
{ return(*(int *)0); }
#undef wscanw
int wscanw(
WINDOW *win,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvscanw
int mvscanw(
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvwscanw
int mvwscanw(
WINDOW *win,
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
/* ./base/lib_screen.c */
#undef getwin_sp
WINDOW *getwin_sp(
SCREEN *sp,
FILE *filep)
{ return(*(WINDOW **)0); }
#undef getwin
WINDOW *getwin(
FILE *filep)
{ return(*(WINDOW **)0); }
#undef putwin
int putwin(
WINDOW *win,
FILE *filep)
{ return(*(int *)0); }
#undef scr_restore_sp
int scr_restore_sp(
SCREEN *sp,
const char *file)
{ return(*(int *)0); }
#undef scr_restore
int scr_restore(
const char *file)
{ return(*(int *)0); }
#undef scr_dump
int scr_dump(
const char *file)
{ return(*(int *)0); }
#undef scr_init_sp
int scr_init_sp(
SCREEN *sp,
const char *file)
{ return(*(int *)0); }
#undef scr_init
int scr_init(
const char *file)
{ return(*(int *)0); }
#undef scr_set_sp
int scr_set_sp(
SCREEN *sp,
const char *file)
{ return(*(int *)0); }
#undef scr_set
int scr_set(
const char *file)
{ return(*(int *)0); }
/* ./base/lib_scroll.c */
#undef _nc_scroll_window
void _nc_scroll_window(
WINDOW *win,
int const n,
int const top,
int const bottom,
chtype blank)
{ /* void */ }
#undef wscrl
int wscrl(
WINDOW *win,
int n)
{ return(*(int *)0); }
/* ./base/lib_scrollok.c */
#undef scrollok
int scrollok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/lib_scrreg.c */
#undef wsetscrreg
int wsetscrreg(
WINDOW *win,
int top,
int bottom)
{ return(*(int *)0); }
/* ./base/lib_set_term.c */
#undef set_term
SCREEN *set_term(
SCREEN *screenp)
{ return(*(SCREEN **)0); }
#undef delscreen
void delscreen(
SCREEN *sp)
{ /* void */ }
#undef _nc_setupscreen_sp
int _nc_setupscreen_sp(
SCREEN **spp,
int slines,
int scolumns,
FILE *output,
int filtered,
int slk_format)
{ return(*(int *)0); }
#undef _nc_setupscreen
int _nc_setupscreen(
int slines,
int scolumns,
FILE *output,
int filtered,
int slk_format)
{ return(*(int *)0); }
#undef _nc_ripoffline_sp
int _nc_ripoffline_sp(
SCREEN *sp,
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
#undef _nc_ripoffline
int _nc_ripoffline(
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
#undef ripoffline_sp
int ripoffline_sp(
SCREEN *sp,
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
#undef ripoffline
int ripoffline(
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
/* ./base/lib_slk.c */
#undef _nc_format_slks
int _nc_format_slks(
SCREEN *sp,
int cols)
{ return(*(int *)0); }
#undef _nc_slk_initialize
int _nc_slk_initialize(
WINDOW *stwin,
int cols)
{ return(*(int *)0); }
#undef slk_restore_sp
int slk_restore_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_restore
int slk_restore(void)
{ return(*(int *)0); }
/* ./base/lib_slkatr_set.c */
#undef slk_attr_set_sp
int slk_attr_set_sp(
SCREEN *sp,
const attr_t attr,
short pair_arg,
void *opts)
{ return(*(int *)0); }
#undef slk_attr_set
int slk_attr_set(
const attr_t attr,
short pair_arg,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_slkatrof.c */
#undef slk_attroff_sp
int slk_attroff_sp(
SCREEN *sp,
const chtype attr)
{ return(*(int *)0); }
#undef slk_attroff
int slk_attroff(
const chtype attr)
{ return(*(int *)0); }
/* ./base/lib_slkatron.c */
#undef slk_attron_sp
int slk_attron_sp(
SCREEN *sp,
const chtype attr)
{ return(*(int *)0); }
#undef slk_attron
int slk_attron(
const chtype attr)
{ return(*(int *)0); }
/* ./base/lib_slkatrset.c */
#undef slk_attrset_sp
int slk_attrset_sp(
SCREEN *sp,
const chtype attr)
{ return(*(int *)0); }
#undef slk_attrset
int slk_attrset(
const chtype attr)
{ return(*(int *)0); }
/* ./base/lib_slkattr.c */
#undef slk_attr_sp
attr_t slk_attr_sp(
SCREEN *sp)
{ return(*(attr_t *)0); }
#undef slk_attr
attr_t slk_attr(void)
{ return(*(attr_t *)0); }
/* ./base/lib_slkclear.c */
#undef slk_clear_sp
int slk_clear_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_clear
int slk_clear(void)
{ return(*(int *)0); }
/* ./base/lib_slkcolor.c */
#undef slk_color_sp
int slk_color_sp(
SCREEN *sp,
short pair_arg)
{ return(*(int *)0); }
#undef slk_color
int slk_color(
short pair_arg)
{ return(*(int *)0); }
/* ./base/lib_slkinit.c */
#undef slk_init_sp
int slk_init_sp(
SCREEN *sp,
int format)
{ return(*(int *)0); }
#undef slk_init
int slk_init(
int format)
{ return(*(int *)0); }
/* ./base/lib_slklab.c */
#undef slk_label_sp
char *slk_label_sp(
SCREEN *sp,
int n)
{ return(*(char **)0); }
#undef slk_label
char *slk_label(
int n)
{ return(*(char **)0); }
/* ./base/lib_slkrefr.c */
#undef slk_noutrefresh_sp
int slk_noutrefresh_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_noutrefresh
int slk_noutrefresh(void)
{ return(*(int *)0); }
#undef slk_refresh_sp
int slk_refresh_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_refresh
int slk_refresh(void)
{ return(*(int *)0); }
/* ./base/lib_slkset.c */
#undef slk_set_sp
int slk_set_sp(
SCREEN *sp,
int i,
const char *astr,
int format)
{ return(*(int *)0); }
#undef slk_set
int slk_set(
int i,
const char *astr,
int format)
{ return(*(int *)0); }
/* ./base/lib_slktouch.c */
#undef slk_touch_sp
int slk_touch_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_touch
int slk_touch(void)
{ return(*(int *)0); }
/* ./base/lib_touch.c */
#undef is_linetouched
NCURSES_BOOL is_linetouched(
WINDOW *win,
int line)
{ return(*(NCURSES_BOOL *)0); }
#undef is_wintouched
NCURSES_BOOL is_wintouched(
WINDOW *win)
{ return(*(NCURSES_BOOL *)0); }
#undef wtouchln
int wtouchln(
WINDOW *win,
int y,
int n,
int changed)
{ return(*(int *)0); }
/* ./trace/lib_tracedmp.c */
#undef _tracedump
void _tracedump(
const char *name,
WINDOW *win)
{ /* void */ }
/* ./trace/lib_tracemse.c */
#undef _nc_trace_mmask_t
char *_nc_trace_mmask_t(
SCREEN *sp,
mmask_t code)
{ return(*(char **)0); }
#undef _nc_tracemouse
char *_nc_tracemouse(
SCREEN *sp,
MEVENT const *ep)
{ return(*(char **)0); }
#undef _nc_retrace_mmask_t
mmask_t _nc_retrace_mmask_t(
SCREEN *sp,
mmask_t code)
{ return(*(mmask_t *)0); }
#undef _tracemouse
char *_tracemouse(
MEVENT const *ep)
{ return(*(char **)0); }
/* ./tty/lib_tstp.c */
#undef _nc_signal_handler
void _nc_signal_handler(
int enable)
{ /* void */ }
/* ./base/lib_ungetch.c */
#undef _nc_fifo_dump
void _nc_fifo_dump(
SCREEN *sp)
{ /* void */ }
#undef ungetch_sp
int ungetch_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef ungetch
int ungetch(
int ch)
{ return(*(int *)0); }
/* ./tty/lib_vidattr.c */
#undef vidputs_sp
int vidputs_sp(
SCREEN *sp,
chtype newmode,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef vidputs
int vidputs(
chtype newmode,
NCURSES_OUTC outc)
{ return(*(int *)0); }
#undef vidattr_sp
int vidattr_sp(
SCREEN *sp,
chtype newmode)
{ return(*(int *)0); }
#undef vidattr
int vidattr(
chtype newmode)
{ return(*(int *)0); }
#undef termattrs_sp
chtype termattrs_sp(
SCREEN *sp)
{ return(*(chtype *)0); }
#undef termattrs
chtype termattrs(void)
{ return(*(chtype *)0); }
/* ./base/lib_vline.c */
#undef wvline
int wvline(
WINDOW *win,
chtype ch,
int n)
{ return(*(int *)0); }
/* ./base/lib_wattroff.c */
#undef wattr_off
int wattr_off(
WINDOW *win,
attr_t at,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_wattron.c */
#undef wattr_on
int wattr_on(
WINDOW *win,
attr_t at,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_winch.c */
#undef winch
chtype winch(
WINDOW *win)
{ return(*(chtype *)0); }
/* ./base/lib_window.c */
#undef _nc_synchook
void _nc_synchook(
WINDOW *win)
{ /* void */ }
#undef mvderwin
int mvderwin(
WINDOW *win,
int y,
int x)
{ return(*(int *)0); }
#undef syncok
int syncok(
WINDOW *win,
NCURSES_BOOL bf)
{ return(*(int *)0); }
#undef wsyncup
void wsyncup(
WINDOW *win)
{ /* void */ }
#undef wsyncdown
void wsyncdown(
WINDOW *win)
{ /* void */ }
#undef wcursyncup
void wcursyncup(
WINDOW *win)
{ /* void */ }
#undef dupwin
WINDOW *dupwin(
WINDOW *win)
{ return(*(WINDOW **)0); }
/* ./base/nc_panel.c */
#undef _nc_panelhook_sp
struct panelhook *_nc_panelhook_sp(
SCREEN *sp)
{ return(*(struct panelhook **)0); }
#undef _nc_panelhook
struct panelhook *_nc_panelhook(void)
{ return(*(struct panelhook **)0); }
/* ./base/safe_sprintf.c */
#undef _nc_printf_string_sp
char *_nc_printf_string_sp(
SCREEN *sp,
const char *fmt,
va_list ap)
{ return(*(char **)0); }
#undef _nc_printf_string
char *_nc_printf_string(
const char *fmt,
va_list ap)
{ return(*(char **)0); }
/* ./tty/tty_update.c */
#undef doupdate_sp
int doupdate_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef doupdate
int doupdate(void)
{ return(*(int *)0); }
#undef _nc_scrolln_sp
int _nc_scrolln_sp(
SCREEN *sp,
int n,
int top,
int bot,
int maxy)
{ return(*(int *)0); }
#undef _nc_scrolln
int _nc_scrolln(
int n,
int top,
int bot,
int maxy)
{ return(*(int *)0); }
#undef _nc_screen_resume_sp
void _nc_screen_resume_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_screen_resume
void _nc_screen_resume(void)
{ /* void */ }
#undef _nc_screen_init_sp
void _nc_screen_init_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_screen_init
void _nc_screen_init(void)
{ /* void */ }
#undef _nc_screen_wrap_sp
void _nc_screen_wrap_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_screen_wrap
void _nc_screen_wrap(void)
{ /* void */ }
#undef _nc_do_xmc_glitch_sp
void _nc_do_xmc_glitch_sp(
SCREEN *sp,
attr_t previous)
{ /* void */ }
#undef _nc_do_xmc_glitch
void _nc_do_xmc_glitch(
attr_t previous)
{ /* void */ }
/* ./trace/varargs.c */
#undef _nc_varargs
char *_nc_varargs(
const char *fmt,
va_list ap)
{ return(*(char **)0); }
/* ./base/vsscanf.c */
#undef _nc_vsscanf
void _nc_vsscanf(void)
{ /* void */ }
/* ./base/lib_freeall.c */
#undef _nc_freeall
void _nc_freeall(void)
{ /* void */ }
#undef _nc_free_and_exit_sp
void _nc_free_and_exit_sp(
SCREEN *sp,
int code)
{ /* void */ }
#undef _nc_free_and_exit
void _nc_free_and_exit(
int code)
{ /* void */ }
#undef exit_curses
void exit_curses(
int code)
{ /* void */ }
/* ./expanded.c */
#undef _nc_toggle_attr_on
void _nc_toggle_attr_on(
attr_t *S,
attr_t at)
{ /* void */ }
#undef _nc_toggle_attr_off
void _nc_toggle_attr_off(
attr_t *S,
attr_t at)
{ /* void */ }
#undef _nc_DelCharCost_sp
int _nc_DelCharCost_sp(
SCREEN *sp,
int count)
{ return(*(int *)0); }
#undef _nc_InsCharCost_sp
int _nc_InsCharCost_sp(
SCREEN *sp,
int count)
{ return(*(int *)0); }
#undef _nc_UpdateAttrs_sp
void _nc_UpdateAttrs_sp(
SCREEN *sp,
chtype c)
{ /* void */ }
#undef _nc_DelCharCost
int _nc_DelCharCost(
int count)
{ return(*(int *)0); }
#undef _nc_InsCharCost
int _nc_InsCharCost(
int count)
{ return(*(int *)0); }
#undef _nc_UpdateAttrs
void _nc_UpdateAttrs(
chtype c)
{ /* void */ }
/* ./base/legacy_coding.c */
#undef use_legacy_coding_sp
int use_legacy_coding_sp(
SCREEN *sp,
int level)
{ return(*(int *)0); }
#undef use_legacy_coding
int use_legacy_coding(
int level)
{ return(*(int *)0); }
/* ./base/lib_dft_fgbg.c */
#undef use_default_colors_sp
int use_default_colors_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef use_default_colors
int use_default_colors(void)
{ return(*(int *)0); }
#undef assume_default_colors_sp
int assume_default_colors_sp(
SCREEN *sp,
int fg,
int bg)
{ return(*(int *)0); }
#undef assume_default_colors
int assume_default_colors(
int fg,
int bg)
{ return(*(int *)0); }
/* ./tinfo/lib_print.c */
#undef mcprint_sp
int mcprint_sp(
SCREEN *sp,
char *data,
int len)
{ return(*(int *)0); }
#undef mcprint
int mcprint(
char *data,
int len)
{ return(*(int *)0); }
/* ./base/new_pair.c */
#undef _nc_new_pair
void _nc_new_pair(void)
{ /* void */ }
/* ./base/resizeterm.c */
#undef is_term_resized_sp
NCURSES_BOOL is_term_resized_sp(
SCREEN *sp,
int ToLines,
int ToCols)
{ return(*(NCURSES_BOOL *)0); }
#undef is_term_resized
NCURSES_BOOL is_term_resized(
int ToLines,
int ToCols)
{ return(*(NCURSES_BOOL *)0); }
#undef resize_term_sp
int resize_term_sp(
SCREEN *sp,
int ToLines,
int ToCols)
{ return(*(int *)0); }
#undef resize_term
int resize_term(
int ToLines,
int ToCols)
{ return(*(int *)0); }
#undef resizeterm_sp
int resizeterm_sp(
SCREEN *sp,
int ToLines,
int ToCols)
{ return(*(int *)0); }
#undef resizeterm
int resizeterm(
int ToLines,
int ToCols)
{ return(*(int *)0); }
/* ./trace/trace_xnames.c */
#undef _nc_trace_xnames
void _nc_trace_xnames(
TERMTYPE *tp)
{ /* void */ }
/* ./tinfo/use_screen.c */
#undef use_screen
int use_screen(
SCREEN *screen,
NCURSES_SCREEN_CB func,
void *data)
{ return(*(int *)0); }
/* ./base/use_window.c */
#undef use_window
int use_window(
WINDOW *win,
NCURSES_WINDOW_CB func,
void *data)
{ return(*(int *)0); }
/* ./base/wresize.c */
#undef wresize
int wresize(
WINDOW *win,
int ToLines,
int ToCols)
{ return(*(int *)0); }
/* ./tinfo/access.c */
#undef _nc_rootname
char *_nc_rootname(
char *path)
{ return(*(char **)0); }
#undef _nc_is_abs_path
NCURSES_BOOL _nc_is_abs_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_pathlast
unsigned _nc_pathlast(
const char *path)
{ return(*(unsigned *)0); }
#undef _nc_basename
char *_nc_basename(
char *path)
{ return(*(char **)0); }
#undef _nc_access
int _nc_access(
const char *path,
int mode)
{ return(*(int *)0); }
#undef _nc_is_dir_path
NCURSES_BOOL _nc_is_dir_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_is_file_path
NCURSES_BOOL _nc_is_file_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_env_access
int _nc_env_access(void)
{ return(*(int *)0); }
/* ./tinfo/add_tries.c */
#undef _nc_add_to_try
int _nc_add_to_try(
TRIES **tree,
const char *str,
unsigned code)
{ return(*(int *)0); }
/* ./tinfo/alloc_ttype.c */
#undef _nc_align_termtype
void _nc_align_termtype(
TERMTYPE2 *to,
TERMTYPE2 *from)
{ /* void */ }
#undef _nc_copy_termtype
void _nc_copy_termtype(
TERMTYPE *dst,
const TERMTYPE *src)
{ /* void */ }
/* ./codes.c */
#undef _nc_boolcodes
const char *const *_nc_boolcodes(void)
{ return(*(const char **)0); }
#undef _nc_numcodes
const char *const *_nc_numcodes(void)
{ return(*(const char **)0); }
#undef _nc_strcodes
const char *const *_nc_strcodes(void)
{ return(*(const char **)0); }
/* ./comp_captab.c */
#undef _nc_get_table
const struct name_table_entry *_nc_get_table(
NCURSES_BOOL termcap)
{ return(*(const struct name_table_entry **)0); }
#undef _nc_get_hash_table
const HashValue *_nc_get_hash_table(
NCURSES_BOOL termcap)
{ return(*(const HashValue **)0); }
#undef _nc_get_alias_table
const struct alias *_nc_get_alias_table(
NCURSES_BOOL termcap)
{ return(*(const struct alias **)0); }
#undef _nc_get_hash_info
const HashData *_nc_get_hash_info(
NCURSES_BOOL termcap)
{ return(*(const HashData **)0); }
/* ./tinfo/comp_error.c */
#undef _nc_suppress_warnings
NCURSES_BOOL _nc_suppress_warnings;
#undef _nc_curr_line
int _nc_curr_line;
#undef _nc_curr_col
int _nc_curr_col;
#undef _nc_get_source
const char *_nc_get_source(void)
{ return(*(const char **)0); }
#undef _nc_set_source
void _nc_set_source(
const char *const name)
{ /* void */ }
#undef _nc_set_type
void _nc_set_type(
const char *const name)
{ /* void */ }
#undef _nc_get_type
void _nc_get_type(
char *name)
{ /* void */ }
#undef _nc_warning
void _nc_warning(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_err_abort
void _nc_err_abort(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_syserr_abort
void _nc_syserr_abort(
const char *const fmt,
...)
{ /* void */ }
/* ./tinfo/comp_hash.c */
#undef _nc_find_entry
struct name_table_entry const *_nc_find_entry(
const char *string,
const HashValue *hash_table)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_type_entry
struct name_table_entry const *_nc_find_type_entry(
const char *string,
int type,
NCURSES_BOOL termcap)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_user_entry
struct user_table_entry const *_nc_find_user_entry(
const char *string)
{ return(*(struct user_table_entry const **)0); }
/* ./comp_userdefs.c */
#undef _nc_get_userdefs_table
const struct user_table_entry *_nc_get_userdefs_table(void)
{ return(*(const struct user_table_entry **)0); }
#undef _nc_get_hash_user
const HashData *_nc_get_hash_user(void)
{ return(*(const HashData **)0); }
/* ./tinfo/db_iterator.c */
#undef _nc_tic_dir
const char *_nc_tic_dir(
const char *path)
{ return(*(const char **)0); }
#undef _nc_keep_tic_dir
void _nc_keep_tic_dir(
const char *path)
{ /* void */ }
#undef _nc_last_db
void _nc_last_db(void)
{ /* void */ }
#undef _nc_next_db
const char *_nc_next_db(
DBDIRS *state,
int *offset)
{ return(*(const char **)0); }
#undef _nc_first_db
void _nc_first_db(
DBDIRS *state,
int *offset)
{ /* void */ }
/* ./tinfo/doalloc.c */
#undef _nc_doalloc
void *_nc_doalloc(
void *oldp,
size_t amount)
{ return(*(void **)0); }
/* ./tinfo/entries.c */
#undef _nc_head
ENTRY *_nc_head;
#undef _nc_tail
ENTRY *_nc_tail;
#undef _nc_free_entry
void _nc_free_entry(
ENTRY *headp,
TERMTYPE2 *tterm)
{ /* void */ }
#undef _nc_free_entries
void _nc_free_entries(
ENTRY *headp)
{ /* void */ }
#undef _nc_leaks_tinfo
void _nc_leaks_tinfo(void)
{ /* void */ }
#undef exit_terminfo
void exit_terminfo(
int code)
{ /* void */ }
/* ./fallback.c */
#undef _nc_fallback
const TERMTYPE2 *_nc_fallback(
const char *name)
{ return(*(const TERMTYPE2 **)0); }
/* ./tinfo/free_ttype.c */
#undef _nc_free_termtype
void _nc_free_termtype(
TERMTYPE *ptr)
{ /* void */ }
#undef _nc_user_definable
NCURSES_BOOL _nc_user_definable;
#undef use_extended_names
int use_extended_names(
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/getenv_num.c */
#undef _nc_getenv_num
int _nc_getenv_num(
const char *name)
{ return(*(int *)0); }
#undef _nc_setenv_num
void _nc_setenv_num(
const char *name,
int value)
{ /* void */ }
/* ./tinfo/home_terminfo.c */
#undef _nc_home_terminfo
char *_nc_home_terminfo(void)
{ return(*(char **)0); }
/* ./tinfo/init_keytry.c */
#undef _nc_init_keytry
void _nc_init_keytry(
SCREEN *sp)
{ /* void */ }
/* ./tinfo/lib_acs.c */
#undef _nc_acs_map
chtype *_nc_acs_map(void)
{ return(*(chtype **)0); }
#undef _nc_init_acs_sp
void _nc_init_acs_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_init_acs
void _nc_init_acs(void)
{ /* void */ }
/* ./tinfo/lib_baudrate.c */
struct speed {
int given_speed;
int actual_speed;
};
#undef _nc_baudrate
int _nc_baudrate(
int OSpeed)
{ return(*(int *)0); }
#undef _nc_ospeed
int _nc_ospeed(
int BaudRate)
{ return(*(int *)0); }
#undef baudrate_sp
int baudrate_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef baudrate
int baudrate(void)
{ return(*(int *)0); }
/* ./tinfo/lib_cur_term.c */
#undef _nc_get_cur_term_sp
TERMINAL *_nc_get_cur_term_sp(
SCREEN *sp)
{ return(*(TERMINAL **)0); }
#undef _nc_get_cur_term
TERMINAL *_nc_get_cur_term(void)
{ return(*(TERMINAL **)0); }
#undef _nc_cur_term
TERMINAL *_nc_cur_term(void)
{ return(*(TERMINAL **)0); }
#undef set_curterm_sp
TERMINAL *set_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef set_curterm
TERMINAL *set_curterm(
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef del_curterm_sp
int del_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(int *)0); }
#undef del_curterm
int del_curterm(
TERMINAL *termp)
{ return(*(int *)0); }
/* ./tinfo/lib_data.c */
#undef _nc_stdscr
WINDOW *_nc_stdscr(void)
{ return(*(WINDOW **)0); }
#undef _nc_curscr
WINDOW *_nc_curscr(void)
{ return(*(WINDOW **)0); }
#undef _nc_newscr
WINDOW *_nc_newscr(void)
{ return(*(WINDOW **)0); }
#undef _nc_screen_chain
SCREEN *_nc_screen_chain;
#undef SP
SCREEN *SP;
#undef _nc_globals
NCURSES_GLOBALS _nc_globals;
#undef _nc_prescreen
NCURSES_PRESCREEN _nc_prescreen;
#undef _nc_screen_of
SCREEN *_nc_screen_of(
WINDOW *win)
{ return(*(SCREEN **)0); }
#undef _nc_init_pthreads
void _nc_init_pthreads(void)
{ /* void */ }
#undef _nc_mutex_init
void _nc_mutex_init(
pthread_mutex_t *obj)
{ /* void */ }
#undef _nc_mutex_lock
int _nc_mutex_lock(
pthread_mutex_t *obj)
{ return(*(int *)0); }
#undef _nc_mutex_trylock
int _nc_mutex_trylock(
pthread_mutex_t *obj)
{ return(*(int *)0); }
#undef _nc_mutex_unlock
int _nc_mutex_unlock(
pthread_mutex_t *obj)
{ return(*(int *)0); }
/* ./tinfo/lib_has_cap.c */
#undef has_ic_sp
NCURSES_BOOL has_ic_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_ic
NCURSES_BOOL has_ic(void)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il_sp
NCURSES_BOOL has_il_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il
NCURSES_BOOL has_il(void)
{ return(*(NCURSES_BOOL *)0); }
/* ./tinfo/lib_kernel.c */
#undef erasechar_sp
char erasechar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef erasechar
char erasechar(void)
{ return(*(char *)0); }
#undef killchar_sp
char killchar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef killchar
char killchar(void)
{ return(*(char *)0); }
#undef flushinp_sp
int flushinp_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef flushinp
int flushinp(void)
{ return(*(int *)0); }
/* ./lib_keyname.c */
struct kn { short offset; int code; };
#undef keyname_sp
const char *keyname_sp(
SCREEN *sp,
int c)
{ return(*(const char **)0); }
#undef keyname
const char *keyname(
int c)
{ return(*(const char **)0); }
/* ./tinfo/lib_longname.c */
#undef longname_sp
char *longname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef longname
char *longname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_napms.c */
#undef napms_sp
int napms_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef napms
int napms(
int ms)
{ return(*(int *)0); }
/* ./tinfo/lib_options.c */
#undef idlok
int idlok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef idcok
void idcok(
WINDOW *win,
NCURSES_BOOL flag)
{ /* void */ }
#undef halfdelay_sp
int halfdelay_sp(
SCREEN *sp,
int t)
{ return(*(int *)0); }
#undef halfdelay
int halfdelay(
int t)
{ return(*(int *)0); }
#undef nodelay
int nodelay(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef notimeout
int notimeout(
WINDOW *win,
NCURSES_BOOL f)
{ return(*(int *)0); }
#undef wtimeout
void wtimeout(
WINDOW *win,
int delay)
{ /* void */ }
#undef keypad
int keypad(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef meta
int meta(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef curs_set_sp
int curs_set_sp(
SCREEN *sp,
int vis)
{ return(*(int *)0); }
#undef curs_set
int curs_set(
int vis)
{ return(*(int *)0); }
#undef typeahead_sp
int typeahead_sp(
SCREEN *sp,
int fd)
{ return(*(int *)0); }
#undef typeahead
int typeahead(
int fd)
{ return(*(int *)0); }
#undef has_key_sp
int has_key_sp(
SCREEN *sp,
int keycode)
{ return(*(int *)0); }
#undef has_key
int has_key(
int keycode)
{ return(*(int *)0); }
#undef _nc_putp_flush_sp
int _nc_putp_flush_sp(
SCREEN *sp,
const char *name,
const char *value)
{ return(*(int *)0); }
#undef _nc_keypad
int _nc_keypad(
SCREEN *sp,
int flag)
{ return(*(int *)0); }
/* ./tinfo/lib_raw.c */
#undef raw_sp
int raw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef raw
int raw(void)
{ return(*(int *)0); }
#undef cbreak_sp
int cbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef cbreak
int cbreak(void)
{ return(*(int *)0); }
#undef qiflush_sp
void qiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef qiflush
void qiflush(void)
{ /* void */ }
#undef noraw_sp
int noraw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef noraw
int noraw(void)
{ return(*(int *)0); }
#undef nocbreak_sp
int nocbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nocbreak
int nocbreak(void)
{ return(*(int *)0); }
#undef noqiflush_sp
void noqiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef noqiflush
void noqiflush(void)
{ /* void */ }
#undef intrflush_sp
int intrflush_sp(
SCREEN *sp,
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef intrflush
int intrflush(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/lib_setup.c */
#undef _nc_ttytype
char *_nc_ttytype(void)
{ return(*(char **)0); }
#undef _nc_ptr_Lines
int *_nc_ptr_Lines(
SCREEN *sp)
{ return(*(int **)0); }
#undef _nc_LINES
int _nc_LINES(void)
{ return(*(int *)0); }
#undef _nc_ptr_Cols
int *_nc_ptr_Cols(
SCREEN *sp)
{ return(*(int **)0); }
#undef _nc_COLS
int _nc_COLS(void)
{ return(*(int *)0); }
#undef _nc_ptr_Tabsize
int *_nc_ptr_Tabsize(
SCREEN *sp)
{ return(*(int **)0); }
#undef _nc_TABSIZE
int _nc_TABSIZE(void)
{ return(*(int *)0); }
#undef set_tabsize_sp
int set_tabsize_sp(
SCREEN *sp,
int value)
{ return(*(int *)0); }
#undef set_tabsize
int set_tabsize(
int value)
{ return(*(int *)0); }
#undef _nc_handle_sigwinch
int _nc_handle_sigwinch(
SCREEN *sp)
{ return(*(int *)0); }
#undef use_env_sp
void use_env_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl_sp
void use_tioctl_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_env
void use_env(
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl
void use_tioctl(
NCURSES_BOOL f)
{ /* void */ }
#undef _nc_get_screensize
void _nc_get_screensize(
SCREEN *sp,
int *linep,
int *colp)
{ /* void */ }
#undef _nc_update_screensize
void _nc_update_screensize(
SCREEN *sp)
{ /* void */ }
#undef _nc_setup_tinfo
int _nc_setup_tinfo(
const char *const tn,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
#undef _nc_tinfo_cmdch
void _nc_tinfo_cmdch(
TERMINAL *termp,
int proto)
{ /* void */ }
#undef _nc_get_locale
char *_nc_get_locale(void)
{ return(*(char **)0); }
#undef _nc_unicode_locale
int _nc_unicode_locale(void)
{ return(*(int *)0); }
#undef _nc_locale_breaks_acs
int _nc_locale_breaks_acs(
TERMINAL *termp)
{ return(*(int *)0); }
#undef _nc_setupterm
int _nc_setupterm(
const char *tname,
int Filedes,
int *errret,
int reuse)
{ return(*(int *)0); }
#undef _nc_find_prescr
SCREEN *_nc_find_prescr(void)
{ return(*(SCREEN **)0); }
#undef _nc_forget_prescr
void _nc_forget_prescr(void)
{ /* void */ }
#undef new_prescr
SCREEN *new_prescr(void)
{ return(*(SCREEN **)0); }
#undef setupterm
int setupterm(
const char *tname,
int Filedes,
int *errret)
{ return(*(int *)0); }
/* ./tinfo/lib_termcap.c */
#undef UP
char *UP;
#undef BC
char *BC;
#undef tgetent_sp
int tgetent_sp(
SCREEN *sp,
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetent
int tgetent(
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetflag_sp
int tgetflag_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetflag
int tgetflag(
const char *id)
{ return(*(int *)0); }
#undef tgetnum_sp
int tgetnum_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetnum
int tgetnum(
const char *id)
{ return(*(int *)0); }
#undef tgetstr_sp
char *tgetstr_sp(
SCREEN *sp,
const char *id,
char **area)
{ return(*(char **)0); }
#undef tgetstr
char *tgetstr(
const char *id,
char **area)
{ return(*(char **)0); }
/* ./tinfo/lib_termname.c */
#undef termname_sp
char *termname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef termname
char *termname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_tgoto.c */
#undef tgoto
char *tgoto(
const char *string,
int x,
int y)
{ return(*(char **)0); }
/* ./tinfo/lib_ti.c */
#undef tigetflag_sp
int tigetflag_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetflag
int tigetflag(
const char *str)
{ return(*(int *)0); }
#undef tigetnum_sp
int tigetnum_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetnum
int tigetnum(
const char *str)
{ return(*(int *)0); }
#undef tigetstr_sp
char *tigetstr_sp(
SCREEN *sp,
const char *str)
{ return(*(char **)0); }
#undef tigetstr
char *tigetstr(
const char *str)
{ return(*(char **)0); }
/* ./tinfo/lib_tparm.c */
#undef _nc_tparm_err
int _nc_tparm_err;
#undef _nc_tparm_analyze
int _nc_tparm_analyze(
const char *string,
char *p_is_s[9],
int *_nc_popcount)
{ return(*(int *)0); }
#undef tparm
char *tparm(
const char *string,
...)
{ return(*(char **)0); }
#undef tiparm
char *tiparm(
const char *string,
...)
{ return(*(char **)0); }
+#undef _nc_tiparm
+char *_nc_tiparm(
+ int expected,
+ const char *string,
+ ...)
+ { return(*(char **)0); }
+
/* ./tinfo/lib_tputs.c */
#undef PC
char PC;
#undef ospeed
short ospeed;
#undef _nc_nulls_sent
int _nc_nulls_sent;
#undef _nc_set_no_padding
void _nc_set_no_padding(
SCREEN *sp)
{ /* void */ }
#undef delay_output_sp
int delay_output_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef delay_output
int delay_output(
int ms)
{ return(*(int *)0); }
#undef _nc_flush_sp
void _nc_flush_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_flush
void _nc_flush(void)
{ /* void */ }
#undef _nc_outch_sp
int _nc_outch_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_outch
int _nc_outch(
int ch)
{ return(*(int *)0); }
#undef _nc_putchar_sp
int _nc_putchar_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_putchar
int _nc_putchar(
int ch)
{ return(*(int *)0); }
#undef putp_sp
int putp_sp(
SCREEN *sp,
const char *string)
{ return(*(int *)0); }
#undef putp
int putp(
const char *string)
{ return(*(int *)0); }
#undef _nc_putp_sp
int _nc_putp_sp(
SCREEN *sp,
const char *name,
const char *string)
{ return(*(int *)0); }
#undef _nc_putp
int _nc_putp(
const char *name,
const char *string)
{ return(*(int *)0); }
#undef tputs_sp
int tputs_sp(
SCREEN *sp,
const char *string,
int affcnt,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef _nc_outc_wrapper
int _nc_outc_wrapper(
SCREEN *sp,
int c)
{ return(*(int *)0); }
#undef tputs
int tputs(
const char *string,
int affcnt,
int (*outc)(
int p1))
{ return(*(int *)0); }
/* ./trace/lib_trace.c */
#undef _nc_tracing
unsigned _nc_tracing;
#undef _nc__nc_tputs_trace
const char *_nc__nc_tputs_trace(void)
{ return(*(const char **)0); }
#undef _nc__nc_outchars
long _nc__nc_outchars(void)
{ return(*(long *)0); }
#undef _nc_set_tputs_trace
void _nc_set_tputs_trace(
const char *s)
{ /* void */ }
#undef _nc_count_outchars
void _nc_count_outchars(
long increment)
{ /* void */ }
#undef curses_trace
unsigned curses_trace(
unsigned tracelevel)
{ return(*(unsigned *)0); }
#undef trace
void trace(
const unsigned int tracelevel)
{ /* void */ }
#undef _tracef
void _tracef(
const char *fmt,
...)
{ /* void */ }
#undef _nc_retrace_bool
NCURSES_BOOL _nc_retrace_bool(
int code)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_retrace_char
char _nc_retrace_char(
int code)
{ return(*(char *)0); }
#undef _nc_retrace_int
int _nc_retrace_int(
int code)
{ return(*(int *)0); }
#undef _nc_retrace_unsigned
unsigned _nc_retrace_unsigned(
unsigned code)
{ return(*(unsigned *)0); }
#undef _nc_retrace_ptr
char *_nc_retrace_ptr(
char *code)
{ return(*(char **)0); }
#undef _nc_retrace_cptr
const char *_nc_retrace_cptr(
const char *code)
{ return(*(const char **)0); }
#undef _nc_retrace_cvoid_ptr
const void *_nc_retrace_cvoid_ptr(
const void *code)
{ return(*(const void **)0); }
#undef _nc_retrace_void_ptr
void *_nc_retrace_void_ptr(
void *code)
{ return(*(void **)0); }
#undef _nc_retrace_sp
SCREEN *_nc_retrace_sp(
SCREEN *code)
{ return(*(SCREEN **)0); }
#undef _nc_retrace_win
WINDOW *_nc_retrace_win(
WINDOW *code)
{ return(*(WINDOW **)0); }
#undef _nc_fmt_funcptr
char *_nc_fmt_funcptr(
char *target,
const char *source,
size_t size)
{ return(*(char **)0); }
#undef _nc_use_tracef
int _nc_use_tracef(
unsigned mask)
{ return(*(int *)0); }
#undef _nc_locked_tracef
void _nc_locked_tracef(
const char *fmt,
...)
{ /* void */ }
/* ./trace/lib_traceatr.c */
#undef _traceattr2
char *_traceattr2(
int bufnum,
chtype newmode)
{ return(*(char **)0); }
#undef _traceattr
char *_traceattr(
attr_t newmode)
{ return(*(char **)0); }
#undef _nc_retrace_int_attr_t
int _nc_retrace_int_attr_t(
attr_t code)
{ return(*(int *)0); }
#undef _nc_retrace_attr_t
attr_t _nc_retrace_attr_t(
attr_t code)
{ return(*(attr_t *)0); }
#undef _nc_altcharset_name
const char *_nc_altcharset_name(
attr_t attr,
chtype ch)
{ return(*(const char **)0); }
#undef _tracechtype2
char *_tracechtype2(
int bufnum,
chtype ch)
{ return(*(char **)0); }
#undef _tracechtype
char *_tracechtype(
chtype ch)
{ return(*(char **)0); }
#undef _nc_retrace_chtype
chtype _nc_retrace_chtype(
chtype code)
{ return(*(chtype *)0); }
/* ./trace/lib_tracebits.c */
#undef _nc_trace_ttymode
char *_nc_trace_ttymode(
struct termios *tty)
{ return(*(char **)0); }
#undef _nc_tracebits
char *_nc_tracebits(void)
{ return(*(char **)0); }
/* ./trace/lib_tracechr.c */
#undef _nc_tracechar
char *_nc_tracechar(
SCREEN *sp,
int ch)
{ return(*(char **)0); }
#undef _tracechar
char *_tracechar(
int ch)
{ return(*(char **)0); }
/* ./tinfo/lib_ttyflags.c */
#undef _nc_get_tty_mode_sp
int _nc_get_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_get_tty_mode
int _nc_get_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode_sp
int _nc_set_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode
int _nc_set_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef def_shell_mode_sp
int def_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_shell_mode
int def_shell_mode(void)
{ return(*(int *)0); }
#undef def_prog_mode_sp
int def_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_prog_mode
int def_prog_mode(void)
{ return(*(int *)0); }
#undef reset_prog_mode_sp
int reset_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_prog_mode
int reset_prog_mode(void)
{ return(*(int *)0); }
#undef reset_shell_mode_sp
int reset_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_shell_mode
int reset_shell_mode(void)
{ return(*(int *)0); }
#undef savetty_sp
int savetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef savetty
int savetty(void)
{ return(*(int *)0); }
#undef resetty_sp
int resetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef resetty
int resetty(void)
{ return(*(int *)0); }
/* ./tty/lib_twait.c */
#undef _nc_timed_wait
int _nc_timed_wait(
SCREEN *sp,
int mode,
int milliseconds,
int *timeleft)
{ return(*(int *)0); }
/* ./tinfo/name_match.c */
#undef _nc_first_name
char *_nc_first_name(
const char *const sp)
{ return(*(char **)0); }
#undef _nc_name_match
int _nc_name_match(
const char *const namelst,
const char *const name,
const char *const delim)
{ return(*(int *)0); }
/* ./names.c */
#undef _nc_boolnames
const char *const *_nc_boolnames(void)
{ return(*(const char **)0); }
#undef _nc_boolfnames
const char *const *_nc_boolfnames(void)
{ return(*(const char **)0); }
#undef _nc_numnames
const char *const *_nc_numnames(void)
{ return(*(const char **)0); }
#undef _nc_numfnames
const char *const *_nc_numfnames(void)
{ return(*(const char **)0); }
#undef _nc_strnames
const char *const *_nc_strnames(void)
{ return(*(const char **)0); }
#undef _nc_strfnames
const char *const *_nc_strfnames(void)
{ return(*(const char **)0); }
/* ./tinfo/obsolete.c */
#undef _nc_set_buffer_sp
void _nc_set_buffer_sp(
SCREEN *sp,
FILE *ofp,
int buffered)
{ /* void */ }
#undef _nc_set_buffer
void _nc_set_buffer(
FILE *ofp,
int buffered)
{ /* void */ }
/* ./tinfo/read_entry.c */
#undef _nc_init_termtype
void _nc_init_termtype(
TERMTYPE2 *const tp)
{ /* void */ }
#undef _nc_read_termtype
int _nc_read_termtype(
TERMTYPE2 *ptr,
char *buffer,
int limit)
{ return(*(int *)0); }
#undef _nc_read_file_entry
int _nc_read_file_entry(
const char *const filename,
TERMTYPE2 *ptr)
{ return(*(int *)0); }
#undef _nc_read_entry
int _nc_read_entry(
const char *const name,
char *const filename,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
/* ./tinfo/read_termcap.c */
#undef _nc_read_termcap_entry
int _nc_read_termcap_entry(
const char *const tn,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
/* ./tinfo/strings.c */
#undef _nc_str_init
string_desc *_nc_str_init(
string_desc *dst,
char *src,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_null
string_desc *_nc_str_null(
string_desc *dst,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_copy
string_desc *_nc_str_copy(
string_desc *dst,
string_desc *src)
{ return(*(string_desc **)0); }
#undef _nc_safe_strcat
NCURSES_BOOL _nc_safe_strcat(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_safe_strcpy
NCURSES_BOOL _nc_safe_strcpy(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
/* ./trace/trace_buf.c */
#undef _nc_trace_buf
char *_nc_trace_buf(
int bufnum,
size_t want)
{ return(*(char **)0); }
#undef _nc_trace_bufcat
char *_nc_trace_bufcat(
int bufnum,
const char *value)
{ return(*(char **)0); }
/* ./trace/trace_tries.c */
#undef _nc_trace_tries
void _nc_trace_tries(
TRIES *tree)
{ /* void */ }
/* ./base/tries.c */
#undef _nc_expand_try
char *_nc_expand_try(
TRIES *tree,
unsigned code,
int *count,
size_t len)
{ return(*(char **)0); }
#undef _nc_remove_key
int _nc_remove_key(
TRIES **tree,
unsigned code)
{ return(*(int *)0); }
#undef _nc_remove_string
int _nc_remove_string(
TRIES **tree,
const char *string)
{ return(*(int *)0); }
/* ./tinfo/trim_sgr0.c */
#undef _nc_trim_sgr0
char *_nc_trim_sgr0(
TERMTYPE2 *tp)
{ return(*(char **)0); }
/* ./unctrl.c */
#undef unctrl_sp
const char *unctrl_sp(
SCREEN *sp,
chtype ch)
{ return(*(const char **)0); }
#undef unctrl
const char *unctrl(
chtype ch)
{ return(*(const char **)0); }
/* ./trace/visbuf.c */
#undef _nc_visbuf2
const char *_nc_visbuf2(
int bufnum,
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbuf
const char *_nc_visbuf(
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbufn
const char *_nc_visbufn(
const char *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viscbuf2
const char *_nc_viscbuf2(
int bufnum,
const chtype *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viscbuf
const char *_nc_viscbuf(
const chtype *buf,
int len)
{ return(*(const char **)0); }
/* ./tinfo/alloc_entry.c */
#undef _nc_init_entry
void _nc_init_entry(
ENTRY *const tp)
{ /* void */ }
#undef _nc_copy_entry
ENTRY *_nc_copy_entry(
ENTRY *oldp)
{ return(*(ENTRY **)0); }
#undef _nc_save_str
char *_nc_save_str(
const char *const string)
{ return(*(char **)0); }
#undef _nc_wrap_entry
void _nc_wrap_entry(
ENTRY *const ep,
NCURSES_BOOL copy_strings)
{ /* void */ }
#undef _nc_merge_entry
void _nc_merge_entry(
ENTRY *const target,
ENTRY *const source)
{ /* void */ }
/* ./tinfo/captoinfo.c */
#undef _nc_captoinfo
char *_nc_captoinfo(
const char *cap,
const char *s,
int const parameterized)
{ return(*(char **)0); }
#undef _nc_infotocap
char *_nc_infotocap(
const char *cap,
const char *str,
int const parameterized)
{ return(*(char **)0); }
/* ./tinfo/comp_expand.c */
#undef _nc_tic_expand
char *_nc_tic_expand(
const char *srcp,
NCURSES_BOOL tic_format,
int numbers)
{ return(*(char **)0); }
/* ./tinfo/comp_parse.c */
#undef _nc_check_termtype2
void (*_nc_check_termtype2)(
TERMTYPE2 *p1,
NCURSES_BOOL p2);
#undef _nc_entry_match
NCURSES_BOOL _nc_entry_match(
char *n1,
char *n2)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_read_entry_source
void _nc_read_entry_source(
FILE *fp,
char *buf,
int literal,
NCURSES_BOOL silent,
NCURSES_BOOL (*hook)(
ENTRY *p1))
{ /* void */ }
#undef _nc_resolve_uses2
int _nc_resolve_uses2(
NCURSES_BOOL fullresolve,
NCURSES_BOOL literal)
{ return(*(int *)0); }
/* ./tinfo/comp_scan.c */
#undef _nc_syntax
int _nc_syntax;
#undef _nc_strict_bsd
int _nc_strict_bsd;
#undef _nc_curr_file_pos
long _nc_curr_file_pos;
#undef _nc_comment_start
long _nc_comment_start;
#undef _nc_comment_end
long _nc_comment_end;
#undef _nc_start_line
long _nc_start_line;
#undef _nc_curr_token
struct token _nc_curr_token;
#undef _nc_disable_period
NCURSES_BOOL _nc_disable_period;
#undef _nc_reset_input
void _nc_reset_input(
FILE *fp,
char *buf)
{ /* void */ }
#undef _nc_get_token
int _nc_get_token(
NCURSES_BOOL silent)
{ return(*(int *)0); }
#undef _nc_trans_string
int _nc_trans_string(
char *ptr,
char *last)
{ return(*(int *)0); }
#undef _nc_push_token
void _nc_push_token(
int tokclass)
{ /* void */ }
#undef _nc_panic_mode
void _nc_panic_mode(
char ch)
{ /* void */ }
/* ./tinfo/parse_entry.c */
#undef _nc_parse_entry
int _nc_parse_entry(
ENTRY *entryp,
int literal,
NCURSES_BOOL silent)
{ return(*(int *)0); }
#undef _nc_capcmp
int _nc_capcmp(
const char *s,
const char *t)
{ return(*(int *)0); }
/* ./tinfo/write_entry.c */
#undef _nc_set_writedir
void _nc_set_writedir(
const char *dir)
{ /* void */ }
#undef _nc_write_entry
void _nc_write_entry(
TERMTYPE2 *const tp)
{ /* void */ }
#undef _nc_write_object
int _nc_write_object(
TERMTYPE2 *tp,
char *buffer,
unsigned *offset,
unsigned limit)
{ return(*(int *)0); }
#undef _nc_tic_written
int _nc_tic_written(void)
{ return(*(int *)0); }
/* ./base/define_key.c */
#undef define_key_sp
int define_key_sp(
SCREEN *sp,
const char *str,
int keycode)
{ return(*(int *)0); }
#undef define_key
int define_key(
const char *str,
int keycode)
{ return(*(int *)0); }
/* ./tinfo/hashed_db.c */
#undef _nc_hashed_db
void _nc_hashed_db(void)
{ /* void */ }
/* ./base/key_defined.c */
#undef key_defined_sp
int key_defined_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef key_defined
int key_defined(
const char *str)
{ return(*(int *)0); }
/* ./base/keybound.c */
#undef keybound_sp
char *keybound_sp(
SCREEN *sp,
int code,
int count)
{ return(*(char **)0); }
#undef keybound
char *keybound(
int code,
int count)
{ return(*(char **)0); }
/* ./base/keyok.c */
#undef keyok_sp
int keyok_sp(
SCREEN *sp,
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef keyok
int keyok(
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/version.c */
#undef curses_version
const char *curses_version(void)
{ return(*(const char **)0); }
diff --git a/contrib/ncurses/ncurses/llib-lncursestw b/contrib/ncurses/ncurses/llib-lncursestw
index 046313939ede..3c1aab97bc65 100644
--- a/contrib/ncurses/ncurses/llib-lncursestw
+++ b/contrib/ncurses/ncurses/llib-lncursestw
@@ -1,5529 +1,5536 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 2009-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 2009-on *
****************************************************************************/
/* LINTLIBRARY */
/* ./tty/hardscroll.c */
#include <curses.priv.h>
#undef _nc_oldnums
int *_nc_oldnums;
#undef _nc_scroll_optimize_sp
void _nc_scroll_optimize_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_scroll_optimize
void _nc_scroll_optimize(void)
{ /* void */ }
#undef _nc_linedump_sp
void _nc_linedump_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_linedump
void _nc_linedump(void)
{ /* void */ }
/* ./tty/hashmap.c */
#undef _nc_hash_map_sp
void _nc_hash_map_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_hash_map
void _nc_hash_map(void)
{ /* void */ }
#undef _nc_make_oldhash_sp
void _nc_make_oldhash_sp(
SCREEN *sp,
int i)
{ /* void */ }
#undef _nc_make_oldhash
void _nc_make_oldhash(
int i)
{ /* void */ }
#undef _nc_scroll_oldhash_sp
void _nc_scroll_oldhash_sp(
SCREEN *sp,
int n,
int top,
int bot)
{ /* void */ }
#undef _nc_scroll_oldhash
void _nc_scroll_oldhash(
int n,
int top,
int bot)
{ /* void */ }
/* ./base/lib_addch.c */
#undef _nc_render
cchar_t _nc_render(
WINDOW *win,
cchar_t ch)
{ return(*(cchar_t *)0); }
#undef _nc_build_wch
int _nc_build_wch(
WINDOW *win,
cchar_t *ch)
{ return(*(int *)0); }
#undef _nc_waddch_nosync
int _nc_waddch_nosync(
WINDOW *win,
const cchar_t c)
{ return(*(int *)0); }
#undef waddch
int waddch(
WINDOW *win,
const chtype ch)
{ return(*(int *)0); }
#undef wechochar
int wechochar(
WINDOW *win,
const chtype ch)
{ return(*(int *)0); }
/* ./base/lib_addstr.c */
#undef waddnstr
int waddnstr(
WINDOW *win,
const char *astr,
int n)
{ return(*(int *)0); }
#undef waddchnstr
int waddchnstr(
WINDOW *win,
const chtype *astr,
int n)
{ return(*(int *)0); }
#undef _nc_wchstrlen
int _nc_wchstrlen(
const cchar_t *s)
{ return(*(int *)0); }
#undef wadd_wchnstr
int wadd_wchnstr(
WINDOW *win,
const cchar_t *astr,
int n)
{ return(*(int *)0); }
#undef waddnwstr
int waddnwstr(
WINDOW *win,
const wchar_t *str,
int n)
{ return(*(int *)0); }
/* ./base/lib_beep.c */
#undef beep_sp
int beep_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef beep
int beep(void)
{ return(*(int *)0); }
/* ./base/lib_bkgd.c */
#undef wbkgrndset
void wbkgrndset(
WINDOW *win,
const cchar_t *ch)
{ /* void */ }
#undef wbkgdset
void wbkgdset(
WINDOW *win,
chtype ch)
{ /* void */ }
#undef wbkgrnd
int wbkgrnd(
WINDOW *win,
const cchar_t *ch)
{ return(*(int *)0); }
#undef wbkgd
int wbkgd(
WINDOW *win,
chtype ch)
{ return(*(int *)0); }
/* ./base/lib_box.c */
#undef wborder
int wborder(
WINDOW *win,
chtype ls,
chtype rs,
chtype ts,
chtype bs,
chtype tl,
chtype tr,
chtype bl,
chtype br)
{ return(*(int *)0); }
/* ./base/lib_chgat.c */
#undef wchgat
int wchgat(
WINDOW *win,
int n,
attr_t attr,
short pair_arg,
const void *opts)
{ return(*(int *)0); }
/* ./base/lib_clear.c */
#undef wclear
int wclear(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_clearok.c */
#undef clearok
int clearok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/lib_clrbot.c */
#undef wclrtobot
int wclrtobot(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_clreol.c */
#undef wclrtoeol
int wclrtoeol(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_color.c */
#undef _nc_COLOR_PAIRS
int _nc_COLOR_PAIRS(void)
{ return(*(int *)0); }
#undef _nc_COLORS
int _nc_COLORS(void)
{ return(*(int *)0); }
#undef _nc_reset_colors_sp
NCURSES_BOOL _nc_reset_colors_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_reset_colors
NCURSES_BOOL _nc_reset_colors(void)
{ return(*(NCURSES_BOOL *)0); }
#undef start_color_sp
int start_color_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef start_color
int start_color(void)
{ return(*(int *)0); }
#undef _nc_change_pair
void _nc_change_pair(
SCREEN *sp,
int pair)
{ /* void */ }
#undef _nc_reserve_pairs
void _nc_reserve_pairs(
SCREEN *sp,
int want)
{ /* void */ }
#undef _nc_init_pair
int _nc_init_pair(
SCREEN *sp,
int pair,
int f,
int b)
{ return(*(int *)0); }
#undef init_pair_sp
int init_pair_sp(
SCREEN *sp,
short pair,
short f,
short b)
{ return(*(int *)0); }
#undef init_pair
int init_pair(
short pair,
short f,
short b)
{ return(*(int *)0); }
#undef _nc_init_color
int _nc_init_color(
SCREEN *sp,
int color,
int r,
int g,
int b)
{ return(*(int *)0); }
#undef init_color_sp
int init_color_sp(
SCREEN *sp,
short color,
short r,
short g,
short b)
{ return(*(int *)0); }
#undef init_color
int init_color(
short color,
short r,
short g,
short b)
{ return(*(int *)0); }
#undef can_change_color_sp
NCURSES_BOOL can_change_color_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef can_change_color
NCURSES_BOOL can_change_color(void)
{ return(*(NCURSES_BOOL *)0); }
#undef has_colors_sp
NCURSES_BOOL has_colors_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_colors
NCURSES_BOOL has_colors(void)
{ return(*(NCURSES_BOOL *)0); }
#undef color_content_sp
int color_content_sp(
SCREEN *sp,
short color,
short *r,
short *g,
short *b)
{ return(*(int *)0); }
#undef color_content
int color_content(
short color,
short *r,
short *g,
short *b)
{ return(*(int *)0); }
#undef _nc_pair_content
int _nc_pair_content(
SCREEN *sp,
int pair,
int *f,
int *b)
{ return(*(int *)0); }
#undef pair_content_sp
int pair_content_sp(
SCREEN *sp,
short pair,
short *f,
short *b)
{ return(*(int *)0); }
#undef pair_content
int pair_content(
short pair,
short *f,
short *b)
{ return(*(int *)0); }
#undef _nc_do_color_sp
void _nc_do_color_sp(
SCREEN *sp,
int old_pair,
int pair,
int reverse,
NCURSES_OUTC_sp outc)
{ /* void */ }
#undef _nc_do_color
void _nc_do_color(
int old_pair,
int pair,
int reverse,
NCURSES_OUTC outc)
{ /* void */ }
#undef init_extended_pair_sp
int init_extended_pair_sp(
SCREEN *sp,
int pair,
int f,
int b)
{ return(*(int *)0); }
#undef init_extended_color_sp
int init_extended_color_sp(
SCREEN *sp,
int color,
int r,
int g,
int b)
{ return(*(int *)0); }
#undef extended_color_content_sp
int extended_color_content_sp(
SCREEN *sp,
int color,
int *r,
int *g,
int *b)
{ return(*(int *)0); }
#undef extended_pair_content_sp
int extended_pair_content_sp(
SCREEN *sp,
int pair,
int *f,
int *b)
{ return(*(int *)0); }
#undef reset_color_pairs_sp
void reset_color_pairs_sp(
SCREEN *sp)
{ /* void */ }
#undef init_extended_pair
int init_extended_pair(
int pair,
int f,
int b)
{ return(*(int *)0); }
#undef init_extended_color
int init_extended_color(
int color,
int r,
int g,
int b)
{ return(*(int *)0); }
#undef extended_color_content
int extended_color_content(
int color,
int *r,
int *g,
int *b)
{ return(*(int *)0); }
#undef extended_pair_content
int extended_pair_content(
int pair,
int *f,
int *b)
{ return(*(int *)0); }
#undef reset_color_pairs
void reset_color_pairs(void)
{ /* void */ }
/* ./base/lib_colorset.c */
#undef wcolor_set
int wcolor_set(
WINDOW *win,
short pair_arg,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_delch.c */
#undef wdelch
int wdelch(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_delwin.c */
#undef delwin
int delwin(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_echo.c */
#undef echo_sp
int echo_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef echo
int echo(void)
{ return(*(int *)0); }
#undef noecho_sp
int noecho_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef noecho
int noecho(void)
{ return(*(int *)0); }
/* ./base/lib_endwin.c */
#undef endwin_sp
int endwin_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef endwin
int endwin(void)
{ return(*(int *)0); }
/* ./base/lib_erase.c */
#undef werase
int werase(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_flash.c */
#undef flash_sp
int flash_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef flash
int flash(void)
{ return(*(int *)0); }
/* ./lib_gen.c */
#undef addch
-int (addch)(
+int addch(
const chtype z)
{ return(*(int *)0); }
#undef addchnstr
-int (addchnstr)(
+int addchnstr(
const chtype *a1,
int z)
{ return(*(int *)0); }
#undef addchstr
-int (addchstr)(
+int addchstr(
const chtype *z)
{ return(*(int *)0); }
#undef addnstr
-int (addnstr)(
+int addnstr(
const char *a1,
int z)
{ return(*(int *)0); }
#undef addstr
-int (addstr)(
+int addstr(
const char *z)
{ return(*(int *)0); }
#undef attroff
-int (attroff)(
- NCURSES_ATTR_T z)
+int attroff(
+ int z)
{ return(*(int *)0); }
#undef attron
-int (attron)(
- NCURSES_ATTR_T z)
+int attron(
+ int z)
{ return(*(int *)0); }
#undef attrset
-int (attrset)(
- NCURSES_ATTR_T z)
+int attrset(
+ int z)
{ return(*(int *)0); }
#undef attr_get
-int (attr_get)(
+int attr_get(
attr_t *a1,
short *a2,
void *z)
{ return(*(int *)0); }
#undef attr_off
-int (attr_off)(
+int attr_off(
attr_t a1,
void *z)
{ return(*(int *)0); }
#undef attr_on
-int (attr_on)(
+int attr_on(
attr_t a1,
void *z)
{ return(*(int *)0); }
#undef attr_set
-int (attr_set)(
+int attr_set(
attr_t a1,
short a2,
void *z)
{ return(*(int *)0); }
#undef bkgd
-int (bkgd)(
+int bkgd(
chtype z)
{ return(*(int *)0); }
#undef bkgdset
-void (bkgdset)(
+void bkgdset(
chtype z)
{ /* void */ }
#undef border
-int (border)(
+int border(
chtype a1,
chtype a2,
chtype a3,
chtype a4,
chtype a5,
chtype a6,
chtype a7,
chtype z)
{ return(*(int *)0); }
#undef box
-int (box)(
+int box(
WINDOW *a1,
chtype a2,
chtype z)
{ return(*(int *)0); }
#undef chgat
-int (chgat)(
+int chgat(
int a1,
attr_t a2,
short a3,
const void *z)
{ return(*(int *)0); }
#undef clear
-int (clear)(void)
+int clear(void)
{ return(*(int *)0); }
#undef clrtobot
-int (clrtobot)(void)
+int clrtobot(void)
{ return(*(int *)0); }
#undef clrtoeol
-int (clrtoeol)(void)
+int clrtoeol(void)
{ return(*(int *)0); }
#undef color_set
-int (color_set)(
+int color_set(
short a1,
void *z)
{ return(*(int *)0); }
#undef COLOR_PAIR
-int (COLOR_PAIR)(
+int COLOR_PAIR(
int z)
{ return(*(int *)0); }
#undef delch
-int (delch)(void)
+int delch(void)
{ return(*(int *)0); }
#undef deleteln
-int (deleteln)(void)
+int deleteln(void)
{ return(*(int *)0); }
#undef echochar
-int (echochar)(
+int echochar(
const chtype z)
{ return(*(int *)0); }
#undef erase
-int (erase)(void)
+int erase(void)
{ return(*(int *)0); }
#undef getbkgd
-chtype (getbkgd)(
+chtype getbkgd(
WINDOW *z)
{ return(*(chtype *)0); }
#undef getch
-int (getch)(void)
+int getch(void)
{ return(*(int *)0); }
#undef getnstr
-int (getnstr)(
+int getnstr(
char *a1,
int z)
{ return(*(int *)0); }
#undef getstr
-int (getstr)(
+int getstr(
char *z)
{ return(*(int *)0); }
#undef hline
-int (hline)(
+int hline(
chtype a1,
int z)
{ return(*(int *)0); }
#undef inch
-chtype (inch)(void)
+chtype inch(void)
{ return(*(chtype *)0); }
#undef inchnstr
-int (inchnstr)(
+int inchnstr(
chtype *a1,
int z)
{ return(*(int *)0); }
#undef inchstr
-int (inchstr)(
+int inchstr(
chtype *z)
{ return(*(int *)0); }
#undef innstr
-int (innstr)(
+int innstr(
char *a1,
int z)
{ return(*(int *)0); }
#undef insch
-int (insch)(
+int insch(
chtype z)
{ return(*(int *)0); }
#undef insdelln
-int (insdelln)(
+int insdelln(
int z)
{ return(*(int *)0); }
#undef insertln
-int (insertln)(void)
+int insertln(void)
{ return(*(int *)0); }
#undef insnstr
-int (insnstr)(
+int insnstr(
const char *a1,
int z)
{ return(*(int *)0); }
#undef insstr
-int (insstr)(
+int insstr(
const char *z)
{ return(*(int *)0); }
#undef instr
-int (instr)(
+int instr(
char *z)
{ return(*(int *)0); }
#undef move
-int (move)(
+int move(
int a1,
int z)
{ return(*(int *)0); }
#undef mvaddch
-int (mvaddch)(
+int mvaddch(
int a1,
int a2,
const chtype z)
{ return(*(int *)0); }
#undef mvaddchnstr
-int (mvaddchnstr)(
+int mvaddchnstr(
int a1,
int a2,
const chtype *a3,
int z)
{ return(*(int *)0); }
#undef mvaddchstr
-int (mvaddchstr)(
+int mvaddchstr(
int a1,
int a2,
const chtype *z)
{ return(*(int *)0); }
#undef mvaddnstr
-int (mvaddnstr)(
+int mvaddnstr(
int a1,
int a2,
const char *a3,
int z)
{ return(*(int *)0); }
#undef mvaddstr
-int (mvaddstr)(
+int mvaddstr(
int a1,
int a2,
const char *z)
{ return(*(int *)0); }
#undef mvchgat
-int (mvchgat)(
+int mvchgat(
int a1,
int a2,
int a3,
attr_t a4,
short a5,
const void *z)
{ return(*(int *)0); }
#undef mvdelch
-int (mvdelch)(
+int mvdelch(
int a1,
int z)
{ return(*(int *)0); }
#undef mvgetch
-int (mvgetch)(
+int mvgetch(
int a1,
int z)
{ return(*(int *)0); }
#undef mvgetnstr
-int (mvgetnstr)(
+int mvgetnstr(
int a1,
int a2,
char *a3,
int z)
{ return(*(int *)0); }
#undef mvgetstr
-int (mvgetstr)(
+int mvgetstr(
int a1,
int a2,
char *z)
{ return(*(int *)0); }
#undef mvhline
-int (mvhline)(
+int mvhline(
int a1,
int a2,
chtype a3,
int z)
{ return(*(int *)0); }
#undef mvinch
-chtype (mvinch)(
+chtype mvinch(
int a1,
int z)
{ return(*(chtype *)0); }
#undef mvinchnstr
-int (mvinchnstr)(
+int mvinchnstr(
int a1,
int a2,
chtype *a3,
int z)
{ return(*(int *)0); }
#undef mvinchstr
-int (mvinchstr)(
+int mvinchstr(
int a1,
int a2,
chtype *z)
{ return(*(int *)0); }
#undef mvinnstr
-int (mvinnstr)(
+int mvinnstr(
int a1,
int a2,
char *a3,
int z)
{ return(*(int *)0); }
#undef mvinsch
-int (mvinsch)(
+int mvinsch(
int a1,
int a2,
chtype z)
{ return(*(int *)0); }
#undef mvinsnstr
-int (mvinsnstr)(
+int mvinsnstr(
int a1,
int a2,
const char *a3,
int z)
{ return(*(int *)0); }
#undef mvinsstr
-int (mvinsstr)(
+int mvinsstr(
int a1,
int a2,
const char *z)
{ return(*(int *)0); }
#undef mvinstr
-int (mvinstr)(
+int mvinstr(
int a1,
int a2,
char *z)
{ return(*(int *)0); }
#undef mvvline
-int (mvvline)(
+int mvvline(
int a1,
int a2,
chtype a3,
int z)
{ return(*(int *)0); }
#undef mvwaddch
-int (mvwaddch)(
+int mvwaddch(
WINDOW *a1,
int a2,
int a3,
const chtype z)
{ return(*(int *)0); }
#undef mvwaddchnstr
-int (mvwaddchnstr)(
+int mvwaddchnstr(
WINDOW *a1,
int a2,
int a3,
const chtype *a4,
int z)
{ return(*(int *)0); }
#undef mvwaddchstr
-int (mvwaddchstr)(
+int mvwaddchstr(
WINDOW *a1,
int a2,
int a3,
const chtype *z)
{ return(*(int *)0); }
#undef mvwaddnstr
-int (mvwaddnstr)(
+int mvwaddnstr(
WINDOW *a1,
int a2,
int a3,
const char *a4,
int z)
{ return(*(int *)0); }
#undef mvwaddstr
-int (mvwaddstr)(
+int mvwaddstr(
WINDOW *a1,
int a2,
int a3,
const char *z)
{ return(*(int *)0); }
#undef mvwchgat
-int (mvwchgat)(
+int mvwchgat(
WINDOW *a1,
int a2,
int a3,
int a4,
attr_t a5,
short a6,
const void *z)
{ return(*(int *)0); }
#undef mvwdelch
-int (mvwdelch)(
+int mvwdelch(
WINDOW *a1,
int a2,
int z)
{ return(*(int *)0); }
#undef mvwgetch
-int (mvwgetch)(
+int mvwgetch(
WINDOW *a1,
int a2,
int z)
{ return(*(int *)0); }
#undef mvwgetnstr
-int (mvwgetnstr)(
+int mvwgetnstr(
WINDOW *a1,
int a2,
int a3,
char *a4,
int z)
{ return(*(int *)0); }
#undef mvwgetstr
-int (mvwgetstr)(
+int mvwgetstr(
WINDOW *a1,
int a2,
int a3,
char *z)
{ return(*(int *)0); }
#undef mvwhline
-int (mvwhline)(
+int mvwhline(
WINDOW *a1,
int a2,
int a3,
chtype a4,
int z)
{ return(*(int *)0); }
#undef mvwinch
-chtype (mvwinch)(
+chtype mvwinch(
WINDOW *a1,
int a2,
int z)
{ return(*(chtype *)0); }
#undef mvwinchnstr
-int (mvwinchnstr)(
+int mvwinchnstr(
WINDOW *a1,
int a2,
int a3,
chtype *a4,
int z)
{ return(*(int *)0); }
#undef mvwinchstr
-int (mvwinchstr)(
+int mvwinchstr(
WINDOW *a1,
int a2,
int a3,
chtype *z)
{ return(*(int *)0); }
#undef mvwinnstr
-int (mvwinnstr)(
+int mvwinnstr(
WINDOW *a1,
int a2,
int a3,
char *a4,
int z)
{ return(*(int *)0); }
#undef mvwinsch
-int (mvwinsch)(
+int mvwinsch(
WINDOW *a1,
int a2,
int a3,
chtype z)
{ return(*(int *)0); }
#undef mvwinsnstr
-int (mvwinsnstr)(
+int mvwinsnstr(
WINDOW *a1,
int a2,
int a3,
const char *a4,
int z)
{ return(*(int *)0); }
#undef mvwinsstr
-int (mvwinsstr)(
+int mvwinsstr(
WINDOW *a1,
int a2,
int a3,
const char *z)
{ return(*(int *)0); }
#undef mvwinstr
-int (mvwinstr)(
+int mvwinstr(
WINDOW *a1,
int a2,
int a3,
char *z)
{ return(*(int *)0); }
#undef mvwvline
-int (mvwvline)(
+int mvwvline(
WINDOW *a1,
int a2,
int a3,
chtype a4,
int z)
{ return(*(int *)0); }
#undef PAIR_NUMBER
-int (PAIR_NUMBER)(
+int PAIR_NUMBER(
int z)
{ return(*(int *)0); }
#undef redrawwin
-int (redrawwin)(
+int redrawwin(
WINDOW *z)
{ return(*(int *)0); }
#undef refresh
-int (refresh)(void)
+int refresh(void)
{ return(*(int *)0); }
#undef scrl
-int (scrl)(
+int scrl(
int z)
{ return(*(int *)0); }
#undef scroll
-int (scroll)(
+int scroll(
WINDOW *z)
{ return(*(int *)0); }
#undef setscrreg
-int (setscrreg)(
+int setscrreg(
int a1,
int z)
{ return(*(int *)0); }
#undef slk_attr_off
-int (slk_attr_off)(
+int slk_attr_off(
const attr_t a1,
void *z)
{ return(*(int *)0); }
#undef slk_attr_on
-int (slk_attr_on)(
+int slk_attr_on(
attr_t a1,
void *z)
{ return(*(int *)0); }
#undef standout
-int (standout)(void)
+int standout(void)
{ return(*(int *)0); }
#undef standend
-int (standend)(void)
+int standend(void)
{ return(*(int *)0); }
#undef timeout
-void (timeout)(
+void timeout(
int z)
{ /* void */ }
#undef touchline
-int (touchline)(
+int touchline(
WINDOW *a1,
int a2,
int z)
{ return(*(int *)0); }
#undef touchwin
-int (touchwin)(
+int touchwin(
WINDOW *z)
{ return(*(int *)0); }
#undef untouchwin
-int (untouchwin)(
+int untouchwin(
WINDOW *z)
{ return(*(int *)0); }
#undef vline
-int (vline)(
+int vline(
chtype a1,
int z)
{ return(*(int *)0); }
#undef waddchstr
-int (waddchstr)(
+int waddchstr(
WINDOW *a1,
const chtype *z)
{ return(*(int *)0); }
#undef waddstr
-int (waddstr)(
+int waddstr(
WINDOW *a1,
const char *z)
{ return(*(int *)0); }
#undef wattron
-int (wattron)(
+int wattron(
WINDOW *a1,
int z)
{ return(*(int *)0); }
#undef wattroff
-int (wattroff)(
+int wattroff(
WINDOW *a1,
int z)
{ return(*(int *)0); }
#undef wattrset
-int (wattrset)(
+int wattrset(
WINDOW *a1,
int z)
{ return(*(int *)0); }
#undef wattr_get
-int (wattr_get)(
+int wattr_get(
WINDOW *a1,
attr_t *a2,
short *a3,
void *z)
{ return(*(int *)0); }
#undef wattr_set
-int (wattr_set)(
+int wattr_set(
WINDOW *a1,
attr_t a2,
short a3,
void *z)
{ return(*(int *)0); }
#undef wdeleteln
-int (wdeleteln)(
+int wdeleteln(
WINDOW *z)
{ return(*(int *)0); }
#undef wgetstr
-int (wgetstr)(
+int wgetstr(
WINDOW *a1,
char *z)
{ return(*(int *)0); }
#undef winchstr
-int (winchstr)(
+int winchstr(
WINDOW *a1,
chtype *z)
{ return(*(int *)0); }
#undef winsertln
-int (winsertln)(
+int winsertln(
WINDOW *z)
{ return(*(int *)0); }
#undef winsstr
-int (winsstr)(
+int winsstr(
WINDOW *a1,
const char *z)
{ return(*(int *)0); }
#undef winstr
-int (winstr)(
+int winstr(
WINDOW *a1,
char *z)
{ return(*(int *)0); }
#undef wstandout
-int (wstandout)(
+int wstandout(
WINDOW *z)
{ return(*(int *)0); }
#undef wstandend
-int (wstandend)(
+int wstandend(
WINDOW *z)
{ return(*(int *)0); }
#undef getattrs
-int (getattrs)(
+int getattrs(
const WINDOW *z)
{ return(*(int *)0); }
#undef getcurx
-int (getcurx)(
+int getcurx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getcury
-int (getcury)(
+int getcury(
const WINDOW *z)
{ return(*(int *)0); }
#undef getbegx
-int (getbegx)(
+int getbegx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getbegy
-int (getbegy)(
+int getbegy(
const WINDOW *z)
{ return(*(int *)0); }
#undef getmaxx
-int (getmaxx)(
+int getmaxx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getmaxy
-int (getmaxy)(
+int getmaxy(
const WINDOW *z)
{ return(*(int *)0); }
#undef getparx
-int (getparx)(
+int getparx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getpary
-int (getpary)(
+int getpary(
const WINDOW *z)
{ return(*(int *)0); }
#undef wgetparent
-WINDOW *(wgetparent)(
+WINDOW *wgetparent(
const WINDOW *z)
{ return(*(WINDOW **)0); }
#undef is_cleared
-NCURSES_BOOL (is_cleared)(
+NCURSES_BOOL is_cleared(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_idcok
-NCURSES_BOOL (is_idcok)(
+NCURSES_BOOL is_idcok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_idlok
-NCURSES_BOOL (is_idlok)(
+NCURSES_BOOL is_idlok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_immedok
-NCURSES_BOOL (is_immedok)(
+NCURSES_BOOL is_immedok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_keypad
-NCURSES_BOOL (is_keypad)(
+NCURSES_BOOL is_keypad(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_leaveok
-NCURSES_BOOL (is_leaveok)(
+NCURSES_BOOL is_leaveok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_nodelay
-NCURSES_BOOL (is_nodelay)(
+NCURSES_BOOL is_nodelay(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_notimeout
-NCURSES_BOOL (is_notimeout)(
+NCURSES_BOOL is_notimeout(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_pad
-NCURSES_BOOL (is_pad)(
+NCURSES_BOOL is_pad(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_scrollok
-NCURSES_BOOL (is_scrollok)(
+NCURSES_BOOL is_scrollok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_subwin
-NCURSES_BOOL (is_subwin)(
+NCURSES_BOOL is_subwin(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_syncok
-NCURSES_BOOL (is_syncok)(
+NCURSES_BOOL is_syncok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef wgetdelay
-int (wgetdelay)(
+int wgetdelay(
const WINDOW *z)
{ return(*(int *)0); }
#undef wgetscrreg
-int (wgetscrreg)(
+int wgetscrreg(
const WINDOW *a1,
int *a2,
int *z)
{ return(*(int *)0); }
#undef add_wch
-int (add_wch)(
+int add_wch(
const cchar_t *z)
{ return(*(int *)0); }
#undef add_wchnstr
-int (add_wchnstr)(
+int add_wchnstr(
const cchar_t *a1,
int z)
{ return(*(int *)0); }
#undef add_wchstr
-int (add_wchstr)(
+int add_wchstr(
const cchar_t *z)
{ return(*(int *)0); }
#undef addnwstr
-int (addnwstr)(
+int addnwstr(
const wchar_t *a1,
int z)
{ return(*(int *)0); }
#undef addwstr
-int (addwstr)(
+int addwstr(
const wchar_t *z)
{ return(*(int *)0); }
#undef bkgrnd
-int (bkgrnd)(
+int bkgrnd(
const cchar_t *z)
{ return(*(int *)0); }
#undef bkgrndset
-void (bkgrndset)(
+void bkgrndset(
const cchar_t *z)
{ /* void */ }
#undef border_set
-int (border_set)(
+int border_set(
const cchar_t *a1,
const cchar_t *a2,
const cchar_t *a3,
const cchar_t *a4,
const cchar_t *a5,
const cchar_t *a6,
const cchar_t *a7,
const cchar_t *z)
{ return(*(int *)0); }
#undef box_set
-int (box_set)(
+int box_set(
WINDOW *a1,
const cchar_t *a2,
const cchar_t *z)
{ return(*(int *)0); }
#undef echo_wchar
-int (echo_wchar)(
+int echo_wchar(
const cchar_t *z)
{ return(*(int *)0); }
#undef get_wch
-int (get_wch)(
+int get_wch(
wint_t *z)
{ return(*(int *)0); }
#undef get_wstr
-int (get_wstr)(
+int get_wstr(
wint_t *z)
{ return(*(int *)0); }
#undef getbkgrnd
-int (getbkgrnd)(
+int getbkgrnd(
cchar_t *z)
{ return(*(int *)0); }
#undef getn_wstr
-int (getn_wstr)(
+int getn_wstr(
wint_t *a1,
int z)
{ return(*(int *)0); }
#undef hline_set
-int (hline_set)(
+int hline_set(
const cchar_t *a1,
int z)
{ return(*(int *)0); }
#undef in_wch
-int (in_wch)(
+int in_wch(
cchar_t *z)
{ return(*(int *)0); }
#undef in_wchnstr
-int (in_wchnstr)(
+int in_wchnstr(
cchar_t *a1,
int z)
{ return(*(int *)0); }
#undef in_wchstr
-int (in_wchstr)(
+int in_wchstr(
cchar_t *z)
{ return(*(int *)0); }
#undef innwstr
-int (innwstr)(
+int innwstr(
wchar_t *a1,
int z)
{ return(*(int *)0); }
#undef ins_nwstr
-int (ins_nwstr)(
+int ins_nwstr(
const wchar_t *a1,
int z)
{ return(*(int *)0); }
#undef ins_wch
-int (ins_wch)(
+int ins_wch(
const cchar_t *z)
{ return(*(int *)0); }
#undef ins_wstr
-int (ins_wstr)(
+int ins_wstr(
const wchar_t *z)
{ return(*(int *)0); }
#undef inwstr
-int (inwstr)(
+int inwstr(
wchar_t *z)
{ return(*(int *)0); }
#undef mvadd_wch
-int (mvadd_wch)(
+int mvadd_wch(
int a1,
int a2,
const cchar_t *z)
{ return(*(int *)0); }
#undef mvadd_wchnstr
-int (mvadd_wchnstr)(
+int mvadd_wchnstr(
int a1,
int a2,
const cchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvadd_wchstr
-int (mvadd_wchstr)(
+int mvadd_wchstr(
int a1,
int a2,
const cchar_t *z)
{ return(*(int *)0); }
#undef mvaddnwstr
-int (mvaddnwstr)(
+int mvaddnwstr(
int a1,
int a2,
const wchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvaddwstr
-int (mvaddwstr)(
+int mvaddwstr(
int a1,
int a2,
const wchar_t *z)
{ return(*(int *)0); }
#undef mvget_wch
-int (mvget_wch)(
+int mvget_wch(
int a1,
int a2,
wint_t *z)
{ return(*(int *)0); }
#undef mvget_wstr
-int (mvget_wstr)(
+int mvget_wstr(
int a1,
int a2,
wint_t *z)
{ return(*(int *)0); }
#undef mvgetn_wstr
-int (mvgetn_wstr)(
+int mvgetn_wstr(
int a1,
int a2,
wint_t *a3,
int z)
{ return(*(int *)0); }
#undef mvhline_set
-int (mvhline_set)(
+int mvhline_set(
int a1,
int a2,
const cchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvin_wch
-int (mvin_wch)(
+int mvin_wch(
int a1,
int a2,
cchar_t *z)
{ return(*(int *)0); }
#undef mvin_wchnstr
-int (mvin_wchnstr)(
+int mvin_wchnstr(
int a1,
int a2,
cchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvin_wchstr
-int (mvin_wchstr)(
+int mvin_wchstr(
int a1,
int a2,
cchar_t *z)
{ return(*(int *)0); }
#undef mvinnwstr
-int (mvinnwstr)(
+int mvinnwstr(
int a1,
int a2,
wchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvins_nwstr
-int (mvins_nwstr)(
+int mvins_nwstr(
int a1,
int a2,
const wchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvins_wch
-int (mvins_wch)(
+int mvins_wch(
int a1,
int a2,
const cchar_t *z)
{ return(*(int *)0); }
#undef mvins_wstr
-int (mvins_wstr)(
+int mvins_wstr(
int a1,
int a2,
const wchar_t *z)
{ return(*(int *)0); }
#undef mvinwstr
-int (mvinwstr)(
+int mvinwstr(
int a1,
int a2,
wchar_t *z)
{ return(*(int *)0); }
#undef mvvline_set
-int (mvvline_set)(
+int mvvline_set(
int a1,
int a2,
const cchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvwadd_wch
-int (mvwadd_wch)(
+int mvwadd_wch(
WINDOW *a1,
int a2,
int a3,
const cchar_t *z)
{ return(*(int *)0); }
#undef mvwadd_wchnstr
-int (mvwadd_wchnstr)(
+int mvwadd_wchnstr(
WINDOW *a1,
int a2,
int a3,
const cchar_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwadd_wchstr
-int (mvwadd_wchstr)(
+int mvwadd_wchstr(
WINDOW *a1,
int a2,
int a3,
const cchar_t *z)
{ return(*(int *)0); }
#undef mvwaddnwstr
-int (mvwaddnwstr)(
+int mvwaddnwstr(
WINDOW *a1,
int a2,
int a3,
const wchar_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwaddwstr
-int (mvwaddwstr)(
+int mvwaddwstr(
WINDOW *a1,
int a2,
int a3,
const wchar_t *z)
{ return(*(int *)0); }
#undef mvwget_wch
-int (mvwget_wch)(
+int mvwget_wch(
WINDOW *a1,
int a2,
int a3,
wint_t *z)
{ return(*(int *)0); }
#undef mvwget_wstr
-int (mvwget_wstr)(
+int mvwget_wstr(
WINDOW *a1,
int a2,
int a3,
wint_t *z)
{ return(*(int *)0); }
#undef mvwgetn_wstr
-int (mvwgetn_wstr)(
+int mvwgetn_wstr(
WINDOW *a1,
int a2,
int a3,
wint_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwhline_set
-int (mvwhline_set)(
+int mvwhline_set(
WINDOW *a1,
int a2,
int a3,
const cchar_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwin_wch
-int (mvwin_wch)(
+int mvwin_wch(
WINDOW *a1,
int a2,
int a3,
cchar_t *z)
{ return(*(int *)0); }
#undef mvwin_wchnstr
-int (mvwin_wchnstr)(
+int mvwin_wchnstr(
WINDOW *a1,
int a2,
int a3,
cchar_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwin_wchstr
-int (mvwin_wchstr)(
+int mvwin_wchstr(
WINDOW *a1,
int a2,
int a3,
cchar_t *z)
{ return(*(int *)0); }
#undef mvwinnwstr
-int (mvwinnwstr)(
+int mvwinnwstr(
WINDOW *a1,
int a2,
int a3,
wchar_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwins_nwstr
-int (mvwins_nwstr)(
+int mvwins_nwstr(
WINDOW *a1,
int a2,
int a3,
const wchar_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwins_wch
-int (mvwins_wch)(
+int mvwins_wch(
WINDOW *a1,
int a2,
int a3,
const cchar_t *z)
{ return(*(int *)0); }
#undef mvwins_wstr
-int (mvwins_wstr)(
+int mvwins_wstr(
WINDOW *a1,
int a2,
int a3,
const wchar_t *z)
{ return(*(int *)0); }
#undef mvwinwstr
-int (mvwinwstr)(
+int mvwinwstr(
WINDOW *a1,
int a2,
int a3,
wchar_t *z)
{ return(*(int *)0); }
#undef mvwvline_set
-int (mvwvline_set)(
+int mvwvline_set(
WINDOW *a1,
int a2,
int a3,
const cchar_t *a4,
int z)
{ return(*(int *)0); }
#undef vline_set
-int (vline_set)(
+int vline_set(
const cchar_t *a1,
int z)
{ return(*(int *)0); }
#undef wadd_wchstr
-int (wadd_wchstr)(
+int wadd_wchstr(
WINDOW *a1,
const cchar_t *z)
{ return(*(int *)0); }
#undef waddwstr
-int (waddwstr)(
+int waddwstr(
WINDOW *a1,
const wchar_t *z)
{ return(*(int *)0); }
#undef wget_wstr
-int (wget_wstr)(
+int wget_wstr(
WINDOW *a1,
wint_t *z)
{ return(*(int *)0); }
#undef wgetbkgrnd
-int (wgetbkgrnd)(
+int wgetbkgrnd(
WINDOW *a1,
cchar_t *z)
{ return(*(int *)0); }
#undef win_wchstr
-int (win_wchstr)(
+int win_wchstr(
WINDOW *a1,
cchar_t *z)
{ return(*(int *)0); }
#undef wins_wstr
-int (wins_wstr)(
+int wins_wstr(
WINDOW *a1,
const wchar_t *z)
{ return(*(int *)0); }
#undef mouse_trafo
-NCURSES_BOOL (mouse_trafo)(
+NCURSES_BOOL mouse_trafo(
int *a1,
int *a2,
NCURSES_BOOL z)
{ return(*(NCURSES_BOOL *)0); }
/* ./base/lib_getch.c */
#undef _nc_ESCDELAY
int _nc_ESCDELAY(void)
{ return(*(int *)0); }
#undef _nc_ptr_Escdelay
int *_nc_ptr_Escdelay(
SCREEN *sp)
{ return(*(int **)0); }
#undef set_escdelay_sp
int set_escdelay_sp(
SCREEN *sp,
int value)
{ return(*(int *)0); }
#undef set_escdelay
int set_escdelay(
int value)
{ return(*(int *)0); }
#undef get_escdelay_sp
int get_escdelay_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef get_escdelay
int get_escdelay(void)
{ return(*(int *)0); }
#undef _nc_wgetch
int _nc_wgetch(
WINDOW *win,
int *result,
int use_meta)
{ return(*(int *)0); }
#undef wgetch
int wgetch(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_getstr.c */
#undef wgetnstr
int wgetnstr(
WINDOW *win,
char *str,
int maxlen)
{ return(*(int *)0); }
/* ./base/lib_hline.c */
#undef whline
int whline(
WINDOW *win,
chtype ch,
int n)
{ return(*(int *)0); }
/* ./base/lib_immedok.c */
#undef immedok
void immedok(
WINDOW *win,
NCURSES_BOOL flag)
{ /* void */ }
/* ./base/lib_inchstr.c */
#undef winchnstr
int winchnstr(
WINDOW *win,
chtype *str,
int n)
{ return(*(int *)0); }
/* ./base/lib_initscr.c */
#undef initscr
WINDOW *initscr(void)
{ return(*(WINDOW **)0); }
/* ./base/lib_insch.c */
#undef _nc_insert_ch
int _nc_insert_ch(
SCREEN *sp,
WINDOW *win,
chtype ch)
{ return(*(int *)0); }
#undef winsch
int winsch(
WINDOW *win,
chtype c)
{ return(*(int *)0); }
/* ./base/lib_insdel.c */
#undef winsdelln
int winsdelln(
WINDOW *win,
int n)
{ return(*(int *)0); }
/* ./base/lib_insnstr.c */
#undef winsnstr
int winsnstr(
WINDOW *win,
const char *s,
int n)
{ return(*(int *)0); }
/* ./base/lib_instr.c */
#undef winnstr
int winnstr(
WINDOW *win,
char *str,
int n)
{ return(*(int *)0); }
/* ./base/lib_isendwin.c */
#undef isendwin_sp
NCURSES_BOOL isendwin_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef isendwin
NCURSES_BOOL isendwin(void)
{ return(*(NCURSES_BOOL *)0); }
/* ./base/lib_leaveok.c */
#undef leaveok
int leaveok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/lib_mouse.c */
#undef getmouse_sp
int getmouse_sp(
SCREEN *sp,
MEVENT *aevent)
{ return(*(int *)0); }
#undef getmouse
int getmouse(
MEVENT *aevent)
{ return(*(int *)0); }
#undef ungetmouse_sp
int ungetmouse_sp(
SCREEN *sp,
MEVENT *aevent)
{ return(*(int *)0); }
#undef ungetmouse
int ungetmouse(
MEVENT *aevent)
{ return(*(int *)0); }
#undef mousemask_sp
mmask_t mousemask_sp(
SCREEN *sp,
mmask_t newmask,
mmask_t *oldmask)
{ return(*(mmask_t *)0); }
#undef mousemask
mmask_t mousemask(
mmask_t newmask,
mmask_t *oldmask)
{ return(*(mmask_t *)0); }
#undef wenclose
NCURSES_BOOL wenclose(
const WINDOW *win,
int y,
int x)
{ return(*(NCURSES_BOOL *)0); }
#undef mouseinterval_sp
int mouseinterval_sp(
SCREEN *sp,
int maxclick)
{ return(*(int *)0); }
#undef mouseinterval
int mouseinterval(
int maxclick)
{ return(*(int *)0); }
#undef _nc_has_mouse
NCURSES_BOOL _nc_has_mouse(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_mouse_sp
NCURSES_BOOL has_mouse_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_mouse
NCURSES_BOOL has_mouse(void)
{ return(*(NCURSES_BOOL *)0); }
#undef wmouse_trafo
NCURSES_BOOL wmouse_trafo(
const WINDOW *win,
int *pY,
int *pX,
NCURSES_BOOL to_screen)
{ return(*(NCURSES_BOOL *)0); }
/* ./base/lib_move.c */
#undef wmove
int wmove(
WINDOW *win,
int y,
int x)
{ return(*(int *)0); }
/* ./tty/lib_mvcur.c */
#undef _nc_msec_cost_sp
int _nc_msec_cost_sp(
SCREEN *sp,
const char *const cap,
int affcnt)
{ return(*(int *)0); }
#undef _nc_msec_cost
int _nc_msec_cost(
const char *const cap,
int affcnt)
{ return(*(int *)0); }
#undef _nc_mvcur_resume_sp
void _nc_mvcur_resume_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_mvcur_resume
void _nc_mvcur_resume(void)
{ /* void */ }
#undef _nc_mvcur_init_sp
void _nc_mvcur_init_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_mvcur_init
void _nc_mvcur_init(void)
{ /* void */ }
#undef _nc_mvcur_wrap_sp
void _nc_mvcur_wrap_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_mvcur_wrap
void _nc_mvcur_wrap(void)
{ /* void */ }
#undef _nc_mvcur_sp
int _nc_mvcur_sp(
SCREEN *sp,
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef _nc_mvcur
int _nc_mvcur(
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef mvcur_sp
int mvcur_sp(
SCREEN *sp,
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef mvcur
int mvcur(
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef _nc_optimize_enable
int _nc_optimize_enable;
/* ./base/lib_mvwin.c */
#undef mvwin
int mvwin(
WINDOW *win,
int by,
int bx)
{ return(*(int *)0); }
/* ./base/lib_newterm.c */
#undef filter_sp
void filter_sp(
SCREEN *sp)
{ /* void */ }
#undef filter
void filter(void)
{ /* void */ }
#undef nofilter_sp
void nofilter_sp(
SCREEN *sp)
{ /* void */ }
#undef nofilter
void nofilter(void)
{ /* void */ }
#undef newterm_sp
SCREEN *newterm_sp(
SCREEN *sp,
const char *name,
FILE *ofp,
FILE *ifp)
{ return(*(SCREEN **)0); }
#undef newterm
SCREEN *newterm(
const char *name,
FILE *ofp,
FILE *ifp)
{ return(*(SCREEN **)0); }
/* ./base/lib_newwin.c */
#undef _nc_freewin
int _nc_freewin(
WINDOW *win)
{ return(*(int *)0); }
#undef newwin_sp
WINDOW *newwin_sp(
SCREEN *sp,
int num_lines,
int num_columns,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef newwin
WINDOW *newwin(
int num_lines,
int num_columns,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef derwin
WINDOW *derwin(
WINDOW *orig,
int num_lines,
int num_columns,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef subwin
WINDOW *subwin(
WINDOW *w,
int l,
int c,
int y,
int x)
{ return(*(WINDOW **)0); }
#undef _nc_makenew_sp
WINDOW *_nc_makenew_sp(
SCREEN *sp,
int num_lines,
int num_columns,
int begy,
int begx,
int flags)
{ return(*(WINDOW **)0); }
#undef _nc_curscr_of
WINDOW *_nc_curscr_of(
SCREEN *sp)
{ return(*(WINDOW **)0); }
#undef _nc_newscr_of
WINDOW *_nc_newscr_of(
SCREEN *sp)
{ return(*(WINDOW **)0); }
#undef _nc_stdscr_of
WINDOW *_nc_stdscr_of(
SCREEN *sp)
{ return(*(WINDOW **)0); }
/* ./base/lib_nl.c */
#undef nl_sp
int nl_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nl
int nl(void)
{ return(*(int *)0); }
#undef nonl_sp
int nonl_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nonl
int nonl(void)
{ return(*(int *)0); }
/* ./base/lib_overlay.c */
#undef overlay
int overlay(
const WINDOW *win1,
WINDOW *win2)
{ return(*(int *)0); }
#undef overwrite
int overwrite(
const WINDOW *win1,
WINDOW *win2)
{ return(*(int *)0); }
#undef copywin
int copywin(
const WINDOW *src,
WINDOW *dst,
int sminrow,
int smincol,
int dminrow,
int dmincol,
int dmaxrow,
int dmaxcol,
int over)
{ return(*(int *)0); }
/* ./base/lib_pad.c */
#undef newpad_sp
WINDOW *newpad_sp(
SCREEN *sp,
int l,
int c)
{ return(*(WINDOW **)0); }
#undef newpad
WINDOW *newpad(
int l,
int c)
{ return(*(WINDOW **)0); }
#undef subpad
WINDOW *subpad(
WINDOW *orig,
int l,
int c,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef prefresh
int prefresh(
WINDOW *win,
int pminrow,
int pmincol,
int sminrow,
int smincol,
int smaxrow,
int smaxcol)
{ return(*(int *)0); }
#undef pnoutrefresh
int pnoutrefresh(
WINDOW *win,
int pminrow,
int pmincol,
int sminrow,
int smincol,
int smaxrow,
int smaxcol)
{ return(*(int *)0); }
#undef pechochar
int pechochar(
WINDOW *pad,
const chtype ch)
{ return(*(int *)0); }
/* ./base/lib_printw.c */
#undef printw
int printw(
const char *fmt,
...)
{ return(*(int *)0); }
#undef wprintw
int wprintw(
WINDOW *win,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvprintw
int mvprintw(
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvwprintw
int mvwprintw(
WINDOW *win,
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
#undef vwprintw
int vwprintw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
#undef vw_printw
int vw_printw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
/* ./base/lib_redrawln.c */
#undef wredrawln
int wredrawln(
WINDOW *win,
int beg,
int num)
{ return(*(int *)0); }
/* ./base/lib_refresh.c */
#undef wrefresh
int wrefresh(
WINDOW *win)
{ return(*(int *)0); }
#undef wnoutrefresh
int wnoutrefresh(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_restart.c */
#undef restartterm_sp
int restartterm_sp(
SCREEN *sp,
const char *termp,
int filenum,
int *errret)
{ return(*(int *)0); }
#undef restartterm
int restartterm(
const char *termp,
int filenum,
int *errret)
{ return(*(int *)0); }
/* ./base/lib_scanw.c */
#undef vwscanw
int vwscanw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
#undef vw_scanw
int vw_scanw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
#undef scanw
int scanw(
const char *fmt,
...)
{ return(*(int *)0); }
#undef wscanw
int wscanw(
WINDOW *win,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvscanw
int mvscanw(
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvwscanw
int mvwscanw(
WINDOW *win,
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
/* ./base/lib_screen.c */
#undef getwin_sp
WINDOW *getwin_sp(
SCREEN *sp,
FILE *filep)
{ return(*(WINDOW **)0); }
#undef getwin
WINDOW *getwin(
FILE *filep)
{ return(*(WINDOW **)0); }
#undef putwin
int putwin(
WINDOW *win,
FILE *filep)
{ return(*(int *)0); }
#undef scr_restore_sp
int scr_restore_sp(
SCREEN *sp,
const char *file)
{ return(*(int *)0); }
#undef scr_restore
int scr_restore(
const char *file)
{ return(*(int *)0); }
#undef scr_dump
int scr_dump(
const char *file)
{ return(*(int *)0); }
#undef scr_init_sp
int scr_init_sp(
SCREEN *sp,
const char *file)
{ return(*(int *)0); }
#undef scr_init
int scr_init(
const char *file)
{ return(*(int *)0); }
#undef scr_set_sp
int scr_set_sp(
SCREEN *sp,
const char *file)
{ return(*(int *)0); }
#undef scr_set
int scr_set(
const char *file)
{ return(*(int *)0); }
/* ./base/lib_scroll.c */
#undef _nc_scroll_window
void _nc_scroll_window(
WINDOW *win,
int const n,
int const top,
int const bottom,
cchar_t blank)
{ /* void */ }
#undef wscrl
int wscrl(
WINDOW *win,
int n)
{ return(*(int *)0); }
/* ./base/lib_scrollok.c */
#undef scrollok
int scrollok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/lib_scrreg.c */
#undef wsetscrreg
int wsetscrreg(
WINDOW *win,
int top,
int bottom)
{ return(*(int *)0); }
/* ./base/lib_set_term.c */
#undef set_term
SCREEN *set_term(
SCREEN *screenp)
{ return(*(SCREEN **)0); }
#undef delscreen
void delscreen(
SCREEN *sp)
{ /* void */ }
#undef _nc_setupscreen_sp
int _nc_setupscreen_sp(
SCREEN **spp,
int slines,
int scolumns,
FILE *output,
int filtered,
int slk_format)
{ return(*(int *)0); }
#undef _nc_setupscreen
int _nc_setupscreen(
int slines,
int scolumns,
FILE *output,
int filtered,
int slk_format)
{ return(*(int *)0); }
#undef _nc_ripoffline_sp
int _nc_ripoffline_sp(
SCREEN *sp,
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
#undef _nc_ripoffline
int _nc_ripoffline(
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
#undef ripoffline_sp
int ripoffline_sp(
SCREEN *sp,
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
#undef ripoffline
int ripoffline(
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
/* ./base/lib_slk.c */
#undef _nc_format_slks
int _nc_format_slks(
SCREEN *sp,
int cols)
{ return(*(int *)0); }
#undef _nc_slk_initialize
int _nc_slk_initialize(
WINDOW *stwin,
int cols)
{ return(*(int *)0); }
#undef slk_restore_sp
int slk_restore_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_restore
int slk_restore(void)
{ return(*(int *)0); }
/* ./base/lib_slkatr_set.c */
#undef slk_attr_set_sp
int slk_attr_set_sp(
SCREEN *sp,
const attr_t attr,
short pair_arg,
void *opts)
{ return(*(int *)0); }
#undef slk_attr_set
int slk_attr_set(
const attr_t attr,
short pair_arg,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_slkatrof.c */
#undef slk_attroff_sp
int slk_attroff_sp(
SCREEN *sp,
const chtype attr)
{ return(*(int *)0); }
#undef slk_attroff
int slk_attroff(
const chtype attr)
{ return(*(int *)0); }
/* ./base/lib_slkatron.c */
#undef slk_attron_sp
int slk_attron_sp(
SCREEN *sp,
const chtype attr)
{ return(*(int *)0); }
#undef slk_attron
int slk_attron(
const chtype attr)
{ return(*(int *)0); }
/* ./base/lib_slkatrset.c */
#undef slk_attrset_sp
int slk_attrset_sp(
SCREEN *sp,
const chtype attr)
{ return(*(int *)0); }
#undef slk_attrset
int slk_attrset(
const chtype attr)
{ return(*(int *)0); }
/* ./base/lib_slkattr.c */
#undef slk_attr_sp
attr_t slk_attr_sp(
SCREEN *sp)
{ return(*(attr_t *)0); }
#undef slk_attr
attr_t slk_attr(void)
{ return(*(attr_t *)0); }
/* ./base/lib_slkclear.c */
#undef slk_clear_sp
int slk_clear_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_clear
int slk_clear(void)
{ return(*(int *)0); }
/* ./base/lib_slkcolor.c */
#undef slk_color_sp
int slk_color_sp(
SCREEN *sp,
short pair_arg)
{ return(*(int *)0); }
#undef slk_color
int slk_color(
short pair_arg)
{ return(*(int *)0); }
#undef extended_slk_color_sp
int extended_slk_color_sp(
SCREEN *sp,
int pair_arg)
{ return(*(int *)0); }
#undef extended_slk_color
int extended_slk_color(
int pair_arg)
{ return(*(int *)0); }
/* ./base/lib_slkinit.c */
#undef slk_init_sp
int slk_init_sp(
SCREEN *sp,
int format)
{ return(*(int *)0); }
#undef slk_init
int slk_init(
int format)
{ return(*(int *)0); }
/* ./base/lib_slklab.c */
#undef slk_label_sp
char *slk_label_sp(
SCREEN *sp,
int n)
{ return(*(char **)0); }
#undef slk_label
char *slk_label(
int n)
{ return(*(char **)0); }
/* ./base/lib_slkrefr.c */
#undef slk_noutrefresh_sp
int slk_noutrefresh_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_noutrefresh
int slk_noutrefresh(void)
{ return(*(int *)0); }
#undef slk_refresh_sp
int slk_refresh_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_refresh
int slk_refresh(void)
{ return(*(int *)0); }
/* ./base/lib_slkset.c */
#undef slk_set_sp
int slk_set_sp(
SCREEN *sp,
int i,
const char *astr,
int format)
{ return(*(int *)0); }
#undef slk_set
int slk_set(
int i,
const char *astr,
int format)
{ return(*(int *)0); }
/* ./base/lib_slktouch.c */
#undef slk_touch_sp
int slk_touch_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_touch
int slk_touch(void)
{ return(*(int *)0); }
/* ./base/lib_touch.c */
#undef is_linetouched
NCURSES_BOOL is_linetouched(
WINDOW *win,
int line)
{ return(*(NCURSES_BOOL *)0); }
#undef is_wintouched
NCURSES_BOOL is_wintouched(
WINDOW *win)
{ return(*(NCURSES_BOOL *)0); }
#undef wtouchln
int wtouchln(
WINDOW *win,
int y,
int n,
int changed)
{ return(*(int *)0); }
/* ./trace/lib_tracedmp.c */
#undef _tracedump
void _tracedump(
const char *name,
WINDOW *win)
{ /* void */ }
/* ./trace/lib_tracemse.c */
#undef _nc_trace_mmask_t
char *_nc_trace_mmask_t(
SCREEN *sp,
mmask_t code)
{ return(*(char **)0); }
#undef _nc_tracemouse
char *_nc_tracemouse(
SCREEN *sp,
MEVENT const *ep)
{ return(*(char **)0); }
#undef _nc_retrace_mmask_t
mmask_t _nc_retrace_mmask_t(
SCREEN *sp,
mmask_t code)
{ return(*(mmask_t *)0); }
#undef _tracemouse
char *_tracemouse(
MEVENT const *ep)
{ return(*(char **)0); }
/* ./tty/lib_tstp.c */
#undef _nc_signal_handler
void _nc_signal_handler(
int enable)
{ /* void */ }
/* ./base/lib_ungetch.c */
#undef _nc_fifo_dump
void _nc_fifo_dump(
SCREEN *sp)
{ /* void */ }
#undef ungetch_sp
int ungetch_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef ungetch
int ungetch(
int ch)
{ return(*(int *)0); }
/* ./tty/lib_vidattr.c */
#undef vidputs_sp
int vidputs_sp(
SCREEN *sp,
chtype newmode,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef vidputs
int vidputs(
chtype newmode,
NCURSES_OUTC outc)
{ return(*(int *)0); }
#undef vidattr_sp
int vidattr_sp(
SCREEN *sp,
chtype newmode)
{ return(*(int *)0); }
#undef vidattr
int vidattr(
chtype newmode)
{ return(*(int *)0); }
#undef termattrs_sp
chtype termattrs_sp(
SCREEN *sp)
{ return(*(chtype *)0); }
#undef termattrs
chtype termattrs(void)
{ return(*(chtype *)0); }
/* ./base/lib_vline.c */
#undef wvline
int wvline(
WINDOW *win,
chtype ch,
int n)
{ return(*(int *)0); }
/* ./base/lib_wattroff.c */
#undef wattr_off
int wattr_off(
WINDOW *win,
attr_t at,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_wattron.c */
#undef wattr_on
int wattr_on(
WINDOW *win,
attr_t at,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_winch.c */
#undef winch
chtype winch(
WINDOW *win)
{ return(*(chtype *)0); }
/* ./base/lib_window.c */
#undef _nc_synchook
void _nc_synchook(
WINDOW *win)
{ /* void */ }
#undef mvderwin
int mvderwin(
WINDOW *win,
int y,
int x)
{ return(*(int *)0); }
#undef syncok
int syncok(
WINDOW *win,
NCURSES_BOOL bf)
{ return(*(int *)0); }
#undef wsyncup
void wsyncup(
WINDOW *win)
{ /* void */ }
#undef wsyncdown
void wsyncdown(
WINDOW *win)
{ /* void */ }
#undef wcursyncup
void wcursyncup(
WINDOW *win)
{ /* void */ }
#undef dupwin
WINDOW *dupwin(
WINDOW *win)
{ return(*(WINDOW **)0); }
/* ./base/nc_panel.c */
#undef _nc_panelhook_sp
struct panelhook *_nc_panelhook_sp(
SCREEN *sp)
{ return(*(struct panelhook **)0); }
#undef _nc_panelhook
struct panelhook *_nc_panelhook(void)
{ return(*(struct panelhook **)0); }
/* ./base/safe_sprintf.c */
#undef _nc_printf_string_sp
char *_nc_printf_string_sp(
SCREEN *sp,
const char *fmt,
va_list ap)
{ return(*(char **)0); }
#undef _nc_printf_string
char *_nc_printf_string(
const char *fmt,
va_list ap)
{ return(*(char **)0); }
/* ./tty/tty_update.c */
#undef doupdate_sp
int doupdate_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef doupdate
int doupdate(void)
{ return(*(int *)0); }
#undef _nc_scrolln_sp
int _nc_scrolln_sp(
SCREEN *sp,
int n,
int top,
int bot,
int maxy)
{ return(*(int *)0); }
#undef _nc_scrolln
int _nc_scrolln(
int n,
int top,
int bot,
int maxy)
{ return(*(int *)0); }
#undef _nc_screen_resume_sp
void _nc_screen_resume_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_screen_resume
void _nc_screen_resume(void)
{ /* void */ }
#undef _nc_screen_init_sp
void _nc_screen_init_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_screen_init
void _nc_screen_init(void)
{ /* void */ }
#undef _nc_screen_wrap_sp
void _nc_screen_wrap_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_screen_wrap
void _nc_screen_wrap(void)
{ /* void */ }
#undef _nc_do_xmc_glitch_sp
void _nc_do_xmc_glitch_sp(
SCREEN *sp,
attr_t previous)
{ /* void */ }
#undef _nc_do_xmc_glitch
void _nc_do_xmc_glitch(
attr_t previous)
{ /* void */ }
/* ./trace/varargs.c */
#undef _nc_varargs
char *_nc_varargs(
const char *fmt,
va_list ap)
{ return(*(char **)0); }
/* ./base/vsscanf.c */
#undef _nc_vsscanf
void _nc_vsscanf(void)
{ /* void */ }
/* ./base/lib_freeall.c */
#undef _nc_freeall
void _nc_freeall(void)
{ /* void */ }
#undef _nc_free_and_exit_sp
void _nc_free_and_exit_sp(
SCREEN *sp,
int code)
{ /* void */ }
#undef _nc_free_and_exit
void _nc_free_and_exit(
int code)
{ /* void */ }
#undef exit_curses
void exit_curses(
int code)
{ /* void */ }
/* ./widechar/charable.c */
#undef _nc_is_charable
NCURSES_BOOL _nc_is_charable(
wchar_t ch)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_to_char
int _nc_to_char(
wint_t ch)
{ return(*(int *)0); }
#undef _nc_to_widechar
wint_t _nc_to_widechar(
int ch)
{ return(*(wint_t *)0); }
/* ./widechar/lib_add_wch.c */
#undef wadd_wch
int wadd_wch(
WINDOW *win,
const cchar_t *wch)
{ return(*(int *)0); }
#undef wecho_wchar
int wecho_wchar(
WINDOW *win,
const cchar_t *wch)
{ return(*(int *)0); }
/* ./widechar/lib_box_set.c */
#undef wborder_set
int wborder_set(
WINDOW *win,
const cchar_t *ls,
const cchar_t *rs,
const cchar_t *ts,
const cchar_t *bs,
const cchar_t *tl,
const cchar_t *tr,
const cchar_t *bl,
const cchar_t *br)
{ return(*(int *)0); }
/* ./widechar/lib_cchar.c */
#undef setcchar
int setcchar(
cchar_t *wcval,
const wchar_t *wch,
const attr_t attrs,
short pair_arg,
const void *opts)
{ return(*(int *)0); }
#undef getcchar
int getcchar(
const cchar_t *wcval,
wchar_t *wch,
attr_t *attrs,
short *pair_arg,
void *opts)
{ return(*(int *)0); }
/* ./widechar/lib_erasewchar.c */
#undef erasewchar
int erasewchar(
wchar_t *wch)
{ return(*(int *)0); }
#undef killwchar
int killwchar(
wchar_t *wch)
{ return(*(int *)0); }
/* ./widechar/lib_get_wch.c */
#undef wget_wch
int wget_wch(
WINDOW *win,
wint_t *result)
{ return(*(int *)0); }
/* ./widechar/lib_get_wstr.c */
#undef wgetn_wstr
int wgetn_wstr(
WINDOW *win,
wint_t *str,
int maxlen)
{ return(*(int *)0); }
/* ./widechar/lib_hline_set.c */
#undef whline_set
int whline_set(
WINDOW *win,
const cchar_t *ch,
int n)
{ return(*(int *)0); }
/* ./widechar/lib_in_wch.c */
#undef win_wch
int win_wch(
WINDOW *win,
cchar_t *wcval)
{ return(*(int *)0); }
/* ./widechar/lib_in_wchnstr.c */
#undef win_wchnstr
int win_wchnstr(
WINDOW *win,
cchar_t *wchstr,
int n)
{ return(*(int *)0); }
/* ./widechar/lib_ins_wch.c */
#undef _nc_insert_wch
int _nc_insert_wch(
WINDOW *win,
const cchar_t *wch)
{ return(*(int *)0); }
#undef wins_wch
int wins_wch(
WINDOW *win,
const cchar_t *wch)
{ return(*(int *)0); }
#undef wins_nwstr
int wins_nwstr(
WINDOW *win,
const wchar_t *wstr,
int n)
{ return(*(int *)0); }
/* ./widechar/lib_inwstr.c */
#undef winnwstr
int winnwstr(
WINDOW *win,
wchar_t *wstr,
int n)
{ return(*(int *)0); }
#undef winwstr
int winwstr(
WINDOW *win,
wchar_t *wstr)
{ return(*(int *)0); }
/* ./widechar/lib_key_name.c */
#undef key_name
const char *key_name(
wchar_t c)
{ return(*(const char **)0); }
/* ./widechar/lib_pecho_wchar.c */
#undef pecho_wchar
int pecho_wchar(
WINDOW *pad,
const cchar_t *wch)
{ return(*(int *)0); }
/* ./widechar/lib_slk_wset.c */
#undef slk_wset
int slk_wset(
int i,
const wchar_t *astr,
int format)
{ return(*(int *)0); }
/* ./widechar/lib_unget_wch.c */
#undef _nc_wcrtomb
size_t _nc_wcrtomb(
char *target,
wchar_t source,
mbstate_t *state)
{ return(*(size_t *)0); }
#undef unget_wch_sp
int unget_wch_sp(
SCREEN *sp,
const wchar_t wch)
{ return(*(int *)0); }
#undef unget_wch
int unget_wch(
const wchar_t wch)
{ return(*(int *)0); }
/* ./widechar/lib_vid_attr.c */
#undef vid_puts_sp
int vid_puts_sp(
SCREEN *sp,
attr_t newmode,
short pair_arg,
void *opts,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef vid_puts
int vid_puts(
attr_t newmode,
short pair_arg,
void *opts,
NCURSES_OUTC outc)
{ return(*(int *)0); }
#undef vid_attr_sp
int vid_attr_sp(
SCREEN *sp,
attr_t newmode,
short pair_arg,
void *opts)
{ return(*(int *)0); }
#undef vid_attr
int vid_attr(
attr_t newmode,
short pair_arg,
void *opts)
{ return(*(int *)0); }
#undef term_attrs_sp
attr_t term_attrs_sp(
SCREEN *sp)
{ return(*(attr_t *)0); }
#undef term_attrs
attr_t term_attrs(void)
{ return(*(attr_t *)0); }
/* ./widechar/lib_vline_set.c */
#undef wvline_set
int wvline_set(
WINDOW *win,
const cchar_t *ch,
int n)
{ return(*(int *)0); }
/* ./widechar/lib_wacs.c */
#undef _nc_wacs
cchar_t *_nc_wacs;
#undef _nc_init_wacs
void _nc_init_wacs(void)
{ /* void */ }
/* ./widechar/lib_wunctrl.c */
#undef wunctrl_sp
wchar_t *wunctrl_sp(
SCREEN *sp,
cchar_t *wc)
{ return(*(wchar_t **)0); }
#undef wunctrl
wchar_t *wunctrl(
cchar_t *wc)
{ return(*(wchar_t **)0); }
/* ./expanded.c */
#undef _nc_toggle_attr_on
void _nc_toggle_attr_on(
attr_t *S,
attr_t at)
{ /* void */ }
#undef _nc_toggle_attr_off
void _nc_toggle_attr_off(
attr_t *S,
attr_t at)
{ /* void */ }
#undef _nc_DelCharCost_sp
int _nc_DelCharCost_sp(
SCREEN *sp,
int count)
{ return(*(int *)0); }
#undef _nc_InsCharCost_sp
int _nc_InsCharCost_sp(
SCREEN *sp,
int count)
{ return(*(int *)0); }
#undef _nc_UpdateAttrs_sp
void _nc_UpdateAttrs_sp(
SCREEN *sp,
const cchar_t *c)
{ /* void */ }
#undef _nc_DelCharCost
int _nc_DelCharCost(
int count)
{ return(*(int *)0); }
#undef _nc_InsCharCost
int _nc_InsCharCost(
int count)
{ return(*(int *)0); }
#undef _nc_UpdateAttrs
void _nc_UpdateAttrs(
const cchar_t *c)
{ /* void */ }
/* ./base/legacy_coding.c */
#undef use_legacy_coding_sp
int use_legacy_coding_sp(
SCREEN *sp,
int level)
{ return(*(int *)0); }
#undef use_legacy_coding
int use_legacy_coding(
int level)
{ return(*(int *)0); }
/* ./base/lib_dft_fgbg.c */
#undef use_default_colors_sp
int use_default_colors_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef use_default_colors
int use_default_colors(void)
{ return(*(int *)0); }
#undef assume_default_colors_sp
int assume_default_colors_sp(
SCREEN *sp,
int fg,
int bg)
{ return(*(int *)0); }
#undef assume_default_colors
int assume_default_colors(
int fg,
int bg)
{ return(*(int *)0); }
/* ./tinfo/lib_print.c */
#undef mcprint_sp
int mcprint_sp(
SCREEN *sp,
char *data,
int len)
{ return(*(int *)0); }
#undef mcprint
int mcprint(
char *data,
int len)
{ return(*(int *)0); }
/* ./base/new_pair.c */
#undef _nc_free_ordered_pairs
void _nc_free_ordered_pairs(
SCREEN *sp)
{ /* void */ }
#undef _nc_reset_color_pair
void _nc_reset_color_pair(
SCREEN *sp,
int pair,
colorpair_t *next)
{ /* void */ }
#undef _nc_set_color_pair
void _nc_set_color_pair(
SCREEN *sp,
int pair,
int mode)
{ /* void */ }
#undef _nc_copy_pairs
void _nc_copy_pairs(
SCREEN *sp,
colorpair_t *target,
colorpair_t *source,
int length)
{ /* void */ }
#undef alloc_pair_sp
int alloc_pair_sp(
SCREEN *sp,
int fg,
int bg)
{ return(*(int *)0); }
#undef find_pair_sp
int find_pair_sp(
SCREEN *sp,
int fg,
int bg)
{ return(*(int *)0); }
#undef free_pair_sp
int free_pair_sp(
SCREEN *sp,
int pair)
{ return(*(int *)0); }
#undef alloc_pair
int alloc_pair(
int f,
int b)
{ return(*(int *)0); }
#undef find_pair
int find_pair(
int f,
int b)
{ return(*(int *)0); }
#undef free_pair
int free_pair(
int pair)
{ return(*(int *)0); }
/* ./base/resizeterm.c */
#undef is_term_resized_sp
NCURSES_BOOL is_term_resized_sp(
SCREEN *sp,
int ToLines,
int ToCols)
{ return(*(NCURSES_BOOL *)0); }
#undef is_term_resized
NCURSES_BOOL is_term_resized(
int ToLines,
int ToCols)
{ return(*(NCURSES_BOOL *)0); }
#undef resize_term_sp
int resize_term_sp(
SCREEN *sp,
int ToLines,
int ToCols)
{ return(*(int *)0); }
#undef resize_term
int resize_term(
int ToLines,
int ToCols)
{ return(*(int *)0); }
#undef resizeterm_sp
int resizeterm_sp(
SCREEN *sp,
int ToLines,
int ToCols)
{ return(*(int *)0); }
#undef resizeterm
int resizeterm(
int ToLines,
int ToCols)
{ return(*(int *)0); }
/* ./trace/trace_xnames.c */
#undef _nc_trace_xnames
void _nc_trace_xnames(
TERMTYPE *tp)
{ /* void */ }
/* ./tinfo/use_screen.c */
#undef use_screen
int use_screen(
SCREEN *screen,
NCURSES_SCREEN_CB func,
void *data)
{ return(*(int *)0); }
/* ./base/use_window.c */
#undef use_window
int use_window(
WINDOW *win,
NCURSES_WINDOW_CB func,
void *data)
{ return(*(int *)0); }
/* ./base/wresize.c */
#undef wresize
int wresize(
WINDOW *win,
int ToLines,
int ToCols)
{ return(*(int *)0); }
/* ./tinfo/access.c */
#undef _nc_rootname
char *_nc_rootname(
char *path)
{ return(*(char **)0); }
#undef _nc_is_abs_path
NCURSES_BOOL _nc_is_abs_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_pathlast
unsigned _nc_pathlast(
const char *path)
{ return(*(unsigned *)0); }
#undef _nc_basename
char *_nc_basename(
char *path)
{ return(*(char **)0); }
#undef _nc_access
int _nc_access(
const char *path,
int mode)
{ return(*(int *)0); }
#undef _nc_is_dir_path
NCURSES_BOOL _nc_is_dir_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_is_file_path
NCURSES_BOOL _nc_is_file_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_env_access
int _nc_env_access(void)
{ return(*(int *)0); }
/* ./tinfo/add_tries.c */
#undef _nc_add_to_try
int _nc_add_to_try(
TRIES **tree,
const char *str,
unsigned code)
{ return(*(int *)0); }
/* ./tinfo/alloc_ttype.c */
#undef _nc_align_termtype
void _nc_align_termtype(
TERMTYPE2 *to,
TERMTYPE2 *from)
{ /* void */ }
#undef _nc_copy_termtype
void _nc_copy_termtype(
TERMTYPE *dst,
const TERMTYPE *src)
{ /* void */ }
#undef _nc_copy_termtype2
void _nc_copy_termtype2(
TERMTYPE2 *dst,
const TERMTYPE2 *src)
{ /* void */ }
#undef _nc_export_termtype2
void _nc_export_termtype2(
TERMTYPE *dst,
const TERMTYPE2 *src)
{ /* void */ }
/* ./codes.c */
#undef _nc_boolcodes
const char *const *_nc_boolcodes(void)
{ return(*(const char **)0); }
#undef _nc_numcodes
const char *const *_nc_numcodes(void)
{ return(*(const char **)0); }
#undef _nc_strcodes
const char *const *_nc_strcodes(void)
{ return(*(const char **)0); }
/* ./comp_captab.c */
#undef _nc_get_table
const struct name_table_entry *_nc_get_table(
NCURSES_BOOL termcap)
{ return(*(const struct name_table_entry **)0); }
#undef _nc_get_hash_table
const HashValue *_nc_get_hash_table(
NCURSES_BOOL termcap)
{ return(*(const HashValue **)0); }
#undef _nc_get_alias_table
const struct alias *_nc_get_alias_table(
NCURSES_BOOL termcap)
{ return(*(const struct alias **)0); }
#undef _nc_get_hash_info
const HashData *_nc_get_hash_info(
NCURSES_BOOL termcap)
{ return(*(const HashData **)0); }
/* ./tinfo/comp_error.c */
#undef _nc_suppress_warnings
NCURSES_BOOL _nc_suppress_warnings;
#undef _nc_curr_line
int _nc_curr_line;
#undef _nc_curr_col
int _nc_curr_col;
#undef _nc_get_source
const char *_nc_get_source(void)
{ return(*(const char **)0); }
#undef _nc_set_source
void _nc_set_source(
const char *const name)
{ /* void */ }
#undef _nc_set_type
void _nc_set_type(
const char *const name)
{ /* void */ }
#undef _nc_get_type
void _nc_get_type(
char *name)
{ /* void */ }
#undef _nc_warning
void _nc_warning(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_err_abort
void _nc_err_abort(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_syserr_abort
void _nc_syserr_abort(
const char *const fmt,
...)
{ /* void */ }
/* ./tinfo/comp_hash.c */
#undef _nc_find_entry
struct name_table_entry const *_nc_find_entry(
const char *string,
const HashValue *hash_table)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_type_entry
struct name_table_entry const *_nc_find_type_entry(
const char *string,
int type,
NCURSES_BOOL termcap)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_user_entry
struct user_table_entry const *_nc_find_user_entry(
const char *string)
{ return(*(struct user_table_entry const **)0); }
/* ./comp_userdefs.c */
#undef _nc_get_userdefs_table
const struct user_table_entry *_nc_get_userdefs_table(void)
{ return(*(const struct user_table_entry **)0); }
#undef _nc_get_hash_user
const HashData *_nc_get_hash_user(void)
{ return(*(const HashData **)0); }
/* ./tinfo/db_iterator.c */
#undef _nc_tic_dir
const char *_nc_tic_dir(
const char *path)
{ return(*(const char **)0); }
#undef _nc_keep_tic_dir
void _nc_keep_tic_dir(
const char *path)
{ /* void */ }
#undef _nc_last_db
void _nc_last_db(void)
{ /* void */ }
#undef _nc_next_db
const char *_nc_next_db(
DBDIRS *state,
int *offset)
{ return(*(const char **)0); }
#undef _nc_first_db
void _nc_first_db(
DBDIRS *state,
int *offset)
{ /* void */ }
/* ./tinfo/doalloc.c */
#undef _nc_doalloc
void *_nc_doalloc(
void *oldp,
size_t amount)
{ return(*(void **)0); }
/* ./tinfo/entries.c */
#undef _nc_head
ENTRY *_nc_head;
#undef _nc_tail
ENTRY *_nc_tail;
#undef _nc_free_entry
void _nc_free_entry(
ENTRY *headp,
TERMTYPE2 *tterm)
{ /* void */ }
#undef _nc_free_entries
void _nc_free_entries(
ENTRY *headp)
{ /* void */ }
#undef _nc_leaks_tinfo
void _nc_leaks_tinfo(void)
{ /* void */ }
#undef exit_terminfo
void exit_terminfo(
int code)
{ /* void */ }
/* ./fallback.c */
#undef _nc_fallback2
const TERMTYPE2 *_nc_fallback2(
const char *name)
{ return(*(const TERMTYPE2 **)0); }
#undef _nc_fallback
const TERMTYPE *_nc_fallback(
const char *name)
{ return(*(const TERMTYPE **)0); }
/* ./tinfo/free_ttype.c */
#undef _nc_free_termtype
void _nc_free_termtype(
TERMTYPE *ptr)
{ /* void */ }
#undef _nc_free_termtype2
void _nc_free_termtype2(
TERMTYPE2 *ptr)
{ /* void */ }
#undef _nc_user_definable
NCURSES_BOOL _nc_user_definable;
#undef use_extended_names
int use_extended_names(
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/getenv_num.c */
#undef _nc_getenv_num
int _nc_getenv_num(
const char *name)
{ return(*(int *)0); }
#undef _nc_setenv_num
void _nc_setenv_num(
const char *name,
int value)
{ /* void */ }
/* ./tinfo/home_terminfo.c */
#undef _nc_home_terminfo
char *_nc_home_terminfo(void)
{ return(*(char **)0); }
/* ./tinfo/init_keytry.c */
#undef _nc_init_keytry
void _nc_init_keytry(
SCREEN *sp)
{ /* void */ }
/* ./tinfo/lib_acs.c */
#undef _nc_acs_map
chtype *_nc_acs_map(void)
{ return(*(chtype **)0); }
#undef _nc_init_acs_sp
void _nc_init_acs_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_init_acs
void _nc_init_acs(void)
{ /* void */ }
/* ./tinfo/lib_baudrate.c */
struct speed {
int given_speed;
int actual_speed;
};
#undef _nc_baudrate
int _nc_baudrate(
int OSpeed)
{ return(*(int *)0); }
#undef _nc_ospeed
int _nc_ospeed(
int BaudRate)
{ return(*(int *)0); }
#undef baudrate_sp
int baudrate_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef baudrate
int baudrate(void)
{ return(*(int *)0); }
/* ./tinfo/lib_cur_term.c */
#undef _nc_get_cur_term_sp
TERMINAL *_nc_get_cur_term_sp(
SCREEN *sp)
{ return(*(TERMINAL **)0); }
#undef _nc_get_cur_term
TERMINAL *_nc_get_cur_term(void)
{ return(*(TERMINAL **)0); }
#undef _nc_cur_term
TERMINAL *_nc_cur_term(void)
{ return(*(TERMINAL **)0); }
#undef set_curterm_sp
TERMINAL *set_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef set_curterm
TERMINAL *set_curterm(
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef del_curterm_sp
int del_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(int *)0); }
#undef del_curterm
int del_curterm(
TERMINAL *termp)
{ return(*(int *)0); }
/* ./tinfo/lib_data.c */
#undef _nc_stdscr
WINDOW *_nc_stdscr(void)
{ return(*(WINDOW **)0); }
#undef _nc_curscr
WINDOW *_nc_curscr(void)
{ return(*(WINDOW **)0); }
#undef _nc_newscr
WINDOW *_nc_newscr(void)
{ return(*(WINDOW **)0); }
#undef _nc_screen_chain
SCREEN *_nc_screen_chain;
#undef SP
SCREEN *SP;
#undef _nc_globals
NCURSES_GLOBALS _nc_globals;
#undef _nc_prescreen
NCURSES_PRESCREEN _nc_prescreen;
#undef _nc_screen_of
SCREEN *_nc_screen_of(
WINDOW *win)
{ return(*(SCREEN **)0); }
#undef _nc_init_pthreads
void _nc_init_pthreads(void)
{ /* void */ }
#undef _nc_mutex_init
void _nc_mutex_init(
pthread_mutex_t *obj)
{ /* void */ }
#undef _nc_mutex_lock
int _nc_mutex_lock(
pthread_mutex_t *obj)
{ return(*(int *)0); }
#undef _nc_mutex_trylock
int _nc_mutex_trylock(
pthread_mutex_t *obj)
{ return(*(int *)0); }
#undef _nc_mutex_unlock
int _nc_mutex_unlock(
pthread_mutex_t *obj)
{ return(*(int *)0); }
/* ./tinfo/lib_has_cap.c */
#undef has_ic_sp
NCURSES_BOOL has_ic_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_ic
NCURSES_BOOL has_ic(void)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il_sp
NCURSES_BOOL has_il_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il
NCURSES_BOOL has_il(void)
{ return(*(NCURSES_BOOL *)0); }
/* ./tinfo/lib_kernel.c */
#undef erasechar_sp
char erasechar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef erasechar
char erasechar(void)
{ return(*(char *)0); }
#undef killchar_sp
char killchar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef killchar
char killchar(void)
{ return(*(char *)0); }
#undef flushinp_sp
int flushinp_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef flushinp
int flushinp(void)
{ return(*(int *)0); }
/* ./lib_keyname.c */
struct kn { short offset; int code; };
#undef keyname_sp
const char *keyname_sp(
SCREEN *sp,
int c)
{ return(*(const char **)0); }
#undef keyname
const char *keyname(
int c)
{ return(*(const char **)0); }
/* ./tinfo/lib_longname.c */
#undef longname_sp
char *longname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef longname
char *longname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_napms.c */
#undef napms_sp
int napms_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef napms
int napms(
int ms)
{ return(*(int *)0); }
/* ./tinfo/lib_options.c */
#undef idlok
int idlok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef idcok
void idcok(
WINDOW *win,
NCURSES_BOOL flag)
{ /* void */ }
#undef halfdelay_sp
int halfdelay_sp(
SCREEN *sp,
int t)
{ return(*(int *)0); }
#undef halfdelay
int halfdelay(
int t)
{ return(*(int *)0); }
#undef nodelay
int nodelay(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef notimeout
int notimeout(
WINDOW *win,
NCURSES_BOOL f)
{ return(*(int *)0); }
#undef wtimeout
void wtimeout(
WINDOW *win,
int delay)
{ /* void */ }
#undef keypad
int keypad(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef meta
int meta(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef curs_set_sp
int curs_set_sp(
SCREEN *sp,
int vis)
{ return(*(int *)0); }
#undef curs_set
int curs_set(
int vis)
{ return(*(int *)0); }
#undef typeahead_sp
int typeahead_sp(
SCREEN *sp,
int fd)
{ return(*(int *)0); }
#undef typeahead
int typeahead(
int fd)
{ return(*(int *)0); }
#undef has_key_sp
int has_key_sp(
SCREEN *sp,
int keycode)
{ return(*(int *)0); }
#undef has_key
int has_key(
int keycode)
{ return(*(int *)0); }
#undef _nc_putp_flush_sp
int _nc_putp_flush_sp(
SCREEN *sp,
const char *name,
const char *value)
{ return(*(int *)0); }
#undef _nc_keypad
int _nc_keypad(
SCREEN *sp,
int flag)
{ return(*(int *)0); }
/* ./tinfo/lib_raw.c */
#undef raw_sp
int raw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef raw
int raw(void)
{ return(*(int *)0); }
#undef cbreak_sp
int cbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef cbreak
int cbreak(void)
{ return(*(int *)0); }
#undef qiflush_sp
void qiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef qiflush
void qiflush(void)
{ /* void */ }
#undef noraw_sp
int noraw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef noraw
int noraw(void)
{ return(*(int *)0); }
#undef nocbreak_sp
int nocbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nocbreak
int nocbreak(void)
{ return(*(int *)0); }
#undef noqiflush_sp
void noqiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef noqiflush
void noqiflush(void)
{ /* void */ }
#undef intrflush_sp
int intrflush_sp(
SCREEN *sp,
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef intrflush
int intrflush(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/lib_setup.c */
#undef _nc_ttytype
char *_nc_ttytype(void)
{ return(*(char **)0); }
#undef _nc_ptr_Lines
int *_nc_ptr_Lines(
SCREEN *sp)
{ return(*(int **)0); }
#undef _nc_LINES
int _nc_LINES(void)
{ return(*(int *)0); }
#undef _nc_ptr_Cols
int *_nc_ptr_Cols(
SCREEN *sp)
{ return(*(int **)0); }
#undef _nc_COLS
int _nc_COLS(void)
{ return(*(int *)0); }
#undef _nc_ptr_Tabsize
int *_nc_ptr_Tabsize(
SCREEN *sp)
{ return(*(int **)0); }
#undef _nc_TABSIZE
int _nc_TABSIZE(void)
{ return(*(int *)0); }
#undef set_tabsize_sp
int set_tabsize_sp(
SCREEN *sp,
int value)
{ return(*(int *)0); }
#undef set_tabsize
int set_tabsize(
int value)
{ return(*(int *)0); }
#undef _nc_handle_sigwinch
int _nc_handle_sigwinch(
SCREEN *sp)
{ return(*(int *)0); }
#undef use_env_sp
void use_env_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl_sp
void use_tioctl_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_env
void use_env(
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl
void use_tioctl(
NCURSES_BOOL f)
{ /* void */ }
#undef _nc_get_screensize
void _nc_get_screensize(
SCREEN *sp,
int *linep,
int *colp)
{ /* void */ }
#undef _nc_update_screensize
void _nc_update_screensize(
SCREEN *sp)
{ /* void */ }
#undef _nc_setup_tinfo
int _nc_setup_tinfo(
const char *const tn,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
#undef _nc_tinfo_cmdch
void _nc_tinfo_cmdch(
TERMINAL *termp,
int proto)
{ /* void */ }
#undef _nc_get_locale
char *_nc_get_locale(void)
{ return(*(char **)0); }
#undef _nc_unicode_locale
int _nc_unicode_locale(void)
{ return(*(int *)0); }
#undef _nc_locale_breaks_acs
int _nc_locale_breaks_acs(
TERMINAL *termp)
{ return(*(int *)0); }
#undef _nc_setupterm
int _nc_setupterm(
const char *tname,
int Filedes,
int *errret,
int reuse)
{ return(*(int *)0); }
#undef _nc_find_prescr
SCREEN *_nc_find_prescr(void)
{ return(*(SCREEN **)0); }
#undef _nc_forget_prescr
void _nc_forget_prescr(void)
{ /* void */ }
#undef new_prescr
SCREEN *new_prescr(void)
{ return(*(SCREEN **)0); }
#undef setupterm
int setupterm(
const char *tname,
int Filedes,
int *errret)
{ return(*(int *)0); }
/* ./tinfo/lib_termcap.c */
#undef UP
char *UP;
#undef BC
char *BC;
#undef tgetent_sp
int tgetent_sp(
SCREEN *sp,
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetent
int tgetent(
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetflag_sp
int tgetflag_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetflag
int tgetflag(
const char *id)
{ return(*(int *)0); }
#undef tgetnum_sp
int tgetnum_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetnum
int tgetnum(
const char *id)
{ return(*(int *)0); }
#undef tgetstr_sp
char *tgetstr_sp(
SCREEN *sp,
const char *id,
char **area)
{ return(*(char **)0); }
#undef tgetstr
char *tgetstr(
const char *id,
char **area)
{ return(*(char **)0); }
/* ./tinfo/lib_termname.c */
#undef termname_sp
char *termname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef termname
char *termname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_tgoto.c */
#undef tgoto
char *tgoto(
const char *string,
int x,
int y)
{ return(*(char **)0); }
/* ./tinfo/lib_ti.c */
#undef tigetflag_sp
int tigetflag_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetflag
int tigetflag(
const char *str)
{ return(*(int *)0); }
#undef tigetnum_sp
int tigetnum_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetnum
int tigetnum(
const char *str)
{ return(*(int *)0); }
#undef tigetstr_sp
char *tigetstr_sp(
SCREEN *sp,
const char *str)
{ return(*(char **)0); }
#undef tigetstr
char *tigetstr(
const char *str)
{ return(*(char **)0); }
/* ./tinfo/lib_tparm.c */
#undef _nc_tparm_err
int _nc_tparm_err;
#undef _nc_tparm_analyze
int _nc_tparm_analyze(
const char *string,
char *p_is_s[9],
int *_nc_popcount)
{ return(*(int *)0); }
#undef tparm
char *tparm(
const char *string,
...)
{ return(*(char **)0); }
#undef tiparm
char *tiparm(
const char *string,
...)
{ return(*(char **)0); }
+#undef _nc_tiparm
+char *_nc_tiparm(
+ int expected,
+ const char *string,
+ ...)
+ { return(*(char **)0); }
+
/* ./tinfo/lib_tputs.c */
#undef PC
char PC;
#undef ospeed
short ospeed;
#undef _nc_nulls_sent
int _nc_nulls_sent;
#undef _nc_set_no_padding
void _nc_set_no_padding(
SCREEN *sp)
{ /* void */ }
#undef delay_output_sp
int delay_output_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef delay_output
int delay_output(
int ms)
{ return(*(int *)0); }
#undef _nc_flush_sp
void _nc_flush_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_flush
void _nc_flush(void)
{ /* void */ }
#undef _nc_outch_sp
int _nc_outch_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_outch
int _nc_outch(
int ch)
{ return(*(int *)0); }
#undef _nc_putchar_sp
int _nc_putchar_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_putchar
int _nc_putchar(
int ch)
{ return(*(int *)0); }
#undef putp_sp
int putp_sp(
SCREEN *sp,
const char *string)
{ return(*(int *)0); }
#undef putp
int putp(
const char *string)
{ return(*(int *)0); }
#undef _nc_putp_sp
int _nc_putp_sp(
SCREEN *sp,
const char *name,
const char *string)
{ return(*(int *)0); }
#undef _nc_putp
int _nc_putp(
const char *name,
const char *string)
{ return(*(int *)0); }
#undef tputs_sp
int tputs_sp(
SCREEN *sp,
const char *string,
int affcnt,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef _nc_outc_wrapper
int _nc_outc_wrapper(
SCREEN *sp,
int c)
{ return(*(int *)0); }
#undef tputs
int tputs(
const char *string,
int affcnt,
int (*outc)(
int p1))
{ return(*(int *)0); }
/* ./trace/lib_trace.c */
#undef _nc_tracing
unsigned _nc_tracing;
#undef _nc__nc_tputs_trace
const char *_nc__nc_tputs_trace(void)
{ return(*(const char **)0); }
#undef _nc__nc_outchars
long _nc__nc_outchars(void)
{ return(*(long *)0); }
#undef _nc_set_tputs_trace
void _nc_set_tputs_trace(
const char *s)
{ /* void */ }
#undef _nc_count_outchars
void _nc_count_outchars(
long increment)
{ /* void */ }
#undef curses_trace
unsigned curses_trace(
unsigned tracelevel)
{ return(*(unsigned *)0); }
#undef trace
void trace(
const unsigned int tracelevel)
{ /* void */ }
#undef _tracef
void _tracef(
const char *fmt,
...)
{ /* void */ }
#undef _nc_retrace_bool
NCURSES_BOOL _nc_retrace_bool(
int code)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_retrace_char
char _nc_retrace_char(
int code)
{ return(*(char *)0); }
#undef _nc_retrace_int
int _nc_retrace_int(
int code)
{ return(*(int *)0); }
#undef _nc_retrace_unsigned
unsigned _nc_retrace_unsigned(
unsigned code)
{ return(*(unsigned *)0); }
#undef _nc_retrace_ptr
char *_nc_retrace_ptr(
char *code)
{ return(*(char **)0); }
#undef _nc_retrace_cptr
const char *_nc_retrace_cptr(
const char *code)
{ return(*(const char **)0); }
#undef _nc_retrace_cvoid_ptr
const void *_nc_retrace_cvoid_ptr(
const void *code)
{ return(*(const void **)0); }
#undef _nc_retrace_void_ptr
void *_nc_retrace_void_ptr(
void *code)
{ return(*(void **)0); }
#undef _nc_retrace_sp
SCREEN *_nc_retrace_sp(
SCREEN *code)
{ return(*(SCREEN **)0); }
#undef _nc_retrace_win
WINDOW *_nc_retrace_win(
WINDOW *code)
{ return(*(WINDOW **)0); }
#undef _nc_fmt_funcptr
char *_nc_fmt_funcptr(
char *target,
const char *source,
size_t size)
{ return(*(char **)0); }
#undef _nc_use_tracef
int _nc_use_tracef(
unsigned mask)
{ return(*(int *)0); }
#undef _nc_locked_tracef
void _nc_locked_tracef(
const char *fmt,
...)
{ /* void */ }
/* ./trace/lib_traceatr.c */
#undef _traceattr2
char *_traceattr2(
int bufnum,
chtype newmode)
{ return(*(char **)0); }
#undef _traceattr
char *_traceattr(
attr_t newmode)
{ return(*(char **)0); }
#undef _nc_retrace_int_attr_t
int _nc_retrace_int_attr_t(
attr_t code)
{ return(*(int *)0); }
#undef _nc_retrace_attr_t
attr_t _nc_retrace_attr_t(
attr_t code)
{ return(*(attr_t *)0); }
#undef _nc_altcharset_name
const char *_nc_altcharset_name(
attr_t attr,
chtype ch)
{ return(*(const char **)0); }
#undef _tracechtype2
char *_tracechtype2(
int bufnum,
chtype ch)
{ return(*(char **)0); }
#undef _tracechtype
char *_tracechtype(
chtype ch)
{ return(*(char **)0); }
#undef _nc_retrace_chtype
chtype _nc_retrace_chtype(
chtype code)
{ return(*(chtype *)0); }
#undef _tracecchar_t2
char *_tracecchar_t2(
int bufnum,
const cchar_t *ch)
{ return(*(char **)0); }
#undef _tracecchar_t
char *_tracecchar_t(
const cchar_t *ch)
{ return(*(char **)0); }
/* ./trace/lib_tracebits.c */
#undef _nc_trace_ttymode
char *_nc_trace_ttymode(
struct termios *tty)
{ return(*(char **)0); }
#undef _nc_tracebits
char *_nc_tracebits(void)
{ return(*(char **)0); }
/* ./trace/lib_tracechr.c */
#undef _nc_tracechar
char *_nc_tracechar(
SCREEN *sp,
int ch)
{ return(*(char **)0); }
#undef _tracechar
char *_tracechar(
int ch)
{ return(*(char **)0); }
/* ./tinfo/lib_ttyflags.c */
#undef _nc_get_tty_mode_sp
int _nc_get_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_get_tty_mode
int _nc_get_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode_sp
int _nc_set_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode
int _nc_set_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef def_shell_mode_sp
int def_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_shell_mode
int def_shell_mode(void)
{ return(*(int *)0); }
#undef def_prog_mode_sp
int def_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_prog_mode
int def_prog_mode(void)
{ return(*(int *)0); }
#undef reset_prog_mode_sp
int reset_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_prog_mode
int reset_prog_mode(void)
{ return(*(int *)0); }
#undef reset_shell_mode_sp
int reset_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_shell_mode
int reset_shell_mode(void)
{ return(*(int *)0); }
#undef savetty_sp
int savetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef savetty
int savetty(void)
{ return(*(int *)0); }
#undef resetty_sp
int resetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef resetty
int resetty(void)
{ return(*(int *)0); }
/* ./tty/lib_twait.c */
#undef _nc_timed_wait
int _nc_timed_wait(
SCREEN *sp,
int mode,
int milliseconds,
int *timeleft)
{ return(*(int *)0); }
/* ./tinfo/name_match.c */
#undef _nc_first_name
char *_nc_first_name(
const char *const sp)
{ return(*(char **)0); }
#undef _nc_name_match
int _nc_name_match(
const char *const namelst,
const char *const name,
const char *const delim)
{ return(*(int *)0); }
/* ./names.c */
#undef _nc_boolnames
const char *const *_nc_boolnames(void)
{ return(*(const char **)0); }
#undef _nc_boolfnames
const char *const *_nc_boolfnames(void)
{ return(*(const char **)0); }
#undef _nc_numnames
const char *const *_nc_numnames(void)
{ return(*(const char **)0); }
#undef _nc_numfnames
const char *const *_nc_numfnames(void)
{ return(*(const char **)0); }
#undef _nc_strnames
const char *const *_nc_strnames(void)
{ return(*(const char **)0); }
#undef _nc_strfnames
const char *const *_nc_strfnames(void)
{ return(*(const char **)0); }
/* ./tinfo/obsolete.c */
#undef _nc_set_buffer_sp
void _nc_set_buffer_sp(
SCREEN *sp,
FILE *ofp,
int buffered)
{ /* void */ }
#undef _nc_set_buffer
void _nc_set_buffer(
FILE *ofp,
int buffered)
{ /* void */ }
/* ./tinfo/read_entry.c */
#undef _nc_init_termtype
void _nc_init_termtype(
TERMTYPE2 *const tp)
{ /* void */ }
#undef _nc_read_termtype
int _nc_read_termtype(
TERMTYPE2 *ptr,
char *buffer,
int limit)
{ return(*(int *)0); }
#undef _nc_read_file_entry
int _nc_read_file_entry(
const char *const filename,
TERMTYPE2 *ptr)
{ return(*(int *)0); }
#undef _nc_read_entry2
int _nc_read_entry2(
const char *const name,
char *const filename,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
#undef _nc_read_entry
int _nc_read_entry(
const char *const name,
char *const filename,
TERMTYPE *const tp)
{ return(*(int *)0); }
/* ./tinfo/read_termcap.c */
#undef _nc_read_termcap_entry
int _nc_read_termcap_entry(
const char *const tn,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
/* ./tinfo/strings.c */
#undef _nc_str_init
string_desc *_nc_str_init(
string_desc *dst,
char *src,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_null
string_desc *_nc_str_null(
string_desc *dst,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_copy
string_desc *_nc_str_copy(
string_desc *dst,
string_desc *src)
{ return(*(string_desc **)0); }
#undef _nc_safe_strcat
NCURSES_BOOL _nc_safe_strcat(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_safe_strcpy
NCURSES_BOOL _nc_safe_strcpy(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
/* ./trace/trace_buf.c */
#undef _nc_trace_buf
char *_nc_trace_buf(
int bufnum,
size_t want)
{ return(*(char **)0); }
#undef _nc_trace_bufcat
char *_nc_trace_bufcat(
int bufnum,
const char *value)
{ return(*(char **)0); }
/* ./trace/trace_tries.c */
#undef _nc_trace_tries
void _nc_trace_tries(
TRIES *tree)
{ /* void */ }
/* ./base/tries.c */
#undef _nc_expand_try
char *_nc_expand_try(
TRIES *tree,
unsigned code,
int *count,
size_t len)
{ return(*(char **)0); }
#undef _nc_remove_key
int _nc_remove_key(
TRIES **tree,
unsigned code)
{ return(*(int *)0); }
#undef _nc_remove_string
int _nc_remove_string(
TRIES **tree,
const char *string)
{ return(*(int *)0); }
/* ./tinfo/trim_sgr0.c */
#undef _nc_trim_sgr0
char *_nc_trim_sgr0(
TERMTYPE2 *tp)
{ return(*(char **)0); }
/* ./unctrl.c */
#undef unctrl_sp
const char *unctrl_sp(
SCREEN *sp,
chtype ch)
{ return(*(const char **)0); }
#undef unctrl
const char *unctrl(
chtype ch)
{ return(*(const char **)0); }
/* ./trace/visbuf.c */
#undef _nc_visbuf2
const char *_nc_visbuf2(
int bufnum,
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbuf
const char *_nc_visbuf(
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbufn
const char *_nc_visbufn(
const char *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viswbuf2
const char *_nc_viswbuf2(
int bufnum,
const wchar_t *buf)
{ return(*(const char **)0); }
#undef _nc_viswbuf
const char *_nc_viswbuf(
const wchar_t *buf)
{ return(*(const char **)0); }
#undef _nc_viswbufn
const char *_nc_viswbufn(
const wchar_t *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viswibuf
const char *_nc_viswibuf(
const wint_t *buf)
{ return(*(const char **)0); }
#undef _nc_viscbuf2
const char *_nc_viscbuf2(
int bufnum,
const cchar_t *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viscbuf
const char *_nc_viscbuf(
const cchar_t *buf,
int len)
{ return(*(const char **)0); }
/* ./tinfo/alloc_entry.c */
#undef _nc_init_entry
void _nc_init_entry(
ENTRY *const tp)
{ /* void */ }
#undef _nc_copy_entry
ENTRY *_nc_copy_entry(
ENTRY *oldp)
{ return(*(ENTRY **)0); }
#undef _nc_save_str
char *_nc_save_str(
const char *const string)
{ return(*(char **)0); }
#undef _nc_wrap_entry
void _nc_wrap_entry(
ENTRY *const ep,
NCURSES_BOOL copy_strings)
{ /* void */ }
#undef _nc_merge_entry
void _nc_merge_entry(
ENTRY *const target,
ENTRY *const source)
{ /* void */ }
/* ./tinfo/captoinfo.c */
#undef _nc_captoinfo
char *_nc_captoinfo(
const char *cap,
const char *s,
int const parameterized)
{ return(*(char **)0); }
#undef _nc_infotocap
char *_nc_infotocap(
const char *cap,
const char *str,
int const parameterized)
{ return(*(char **)0); }
/* ./tinfo/comp_expand.c */
#undef _nc_tic_expand
char *_nc_tic_expand(
const char *srcp,
NCURSES_BOOL tic_format,
int numbers)
{ return(*(char **)0); }
/* ./tinfo/comp_parse.c */
#undef _nc_check_termtype2
void (*_nc_check_termtype2)(
TERMTYPE2 *p1,
NCURSES_BOOL p2);
#undef _nc_entry_match
NCURSES_BOOL _nc_entry_match(
char *n1,
char *n2)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_read_entry_source
void _nc_read_entry_source(
FILE *fp,
char *buf,
int literal,
NCURSES_BOOL silent,
NCURSES_BOOL (*hook)(
ENTRY *p1))
{ /* void */ }
#undef _nc_resolve_uses2
int _nc_resolve_uses2(
NCURSES_BOOL fullresolve,
NCURSES_BOOL literal)
{ return(*(int *)0); }
/* ./tinfo/comp_scan.c */
#undef _nc_syntax
int _nc_syntax;
#undef _nc_strict_bsd
int _nc_strict_bsd;
#undef _nc_curr_file_pos
long _nc_curr_file_pos;
#undef _nc_comment_start
long _nc_comment_start;
#undef _nc_comment_end
long _nc_comment_end;
#undef _nc_start_line
long _nc_start_line;
#undef _nc_curr_token
struct token _nc_curr_token;
#undef _nc_disable_period
NCURSES_BOOL _nc_disable_period;
#undef _nc_reset_input
void _nc_reset_input(
FILE *fp,
char *buf)
{ /* void */ }
#undef _nc_get_token
int _nc_get_token(
NCURSES_BOOL silent)
{ return(*(int *)0); }
#undef _nc_trans_string
int _nc_trans_string(
char *ptr,
char *last)
{ return(*(int *)0); }
#undef _nc_push_token
void _nc_push_token(
int tokclass)
{ /* void */ }
#undef _nc_panic_mode
void _nc_panic_mode(
char ch)
{ /* void */ }
/* ./tinfo/parse_entry.c */
#undef _nc_parse_entry
int _nc_parse_entry(
ENTRY *entryp,
int literal,
NCURSES_BOOL silent)
{ return(*(int *)0); }
#undef _nc_capcmp
int _nc_capcmp(
const char *s,
const char *t)
{ return(*(int *)0); }
/* ./tinfo/write_entry.c */
#undef _nc_set_writedir
void _nc_set_writedir(
const char *dir)
{ /* void */ }
#undef _nc_write_entry
void _nc_write_entry(
TERMTYPE2 *const tp)
{ /* void */ }
#undef _nc_write_object
int _nc_write_object(
TERMTYPE2 *tp,
char *buffer,
unsigned *offset,
unsigned limit)
{ return(*(int *)0); }
#undef _nc_tic_written
int _nc_tic_written(void)
{ return(*(int *)0); }
/* ./base/define_key.c */
#undef define_key_sp
int define_key_sp(
SCREEN *sp,
const char *str,
int keycode)
{ return(*(int *)0); }
#undef define_key
int define_key(
const char *str,
int keycode)
{ return(*(int *)0); }
/* ./tinfo/hashed_db.c */
#undef _nc_hashed_db
void _nc_hashed_db(void)
{ /* void */ }
/* ./base/key_defined.c */
#undef key_defined_sp
int key_defined_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef key_defined
int key_defined(
const char *str)
{ return(*(int *)0); }
/* ./base/keybound.c */
#undef keybound_sp
char *keybound_sp(
SCREEN *sp,
int code,
int count)
{ return(*(char **)0); }
#undef keybound
char *keybound(
int code,
int count)
{ return(*(char **)0); }
/* ./base/keyok.c */
#undef keyok_sp
int keyok_sp(
SCREEN *sp,
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef keyok
int keyok(
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/version.c */
#undef curses_version
const char *curses_version(void)
{ return(*(const char **)0); }
diff --git a/contrib/ncurses/ncurses/llib-lncursesw b/contrib/ncurses/ncurses/llib-lncursesw
index dd084a44cf17..794d4929254a 100644
--- a/contrib/ncurses/ncurses/llib-lncursesw
+++ b/contrib/ncurses/ncurses/llib-lncursesw
@@ -1,5408 +1,5415 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 2001-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 2001-on *
****************************************************************************/
/* LINTLIBRARY */
/* ./tty/hardscroll.c */
#include <curses.priv.h>
#undef _nc_oldnums
int *_nc_oldnums;
#undef _nc_scroll_optimize_sp
void _nc_scroll_optimize_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_scroll_optimize
void _nc_scroll_optimize(void)
{ /* void */ }
#undef _nc_linedump_sp
void _nc_linedump_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_linedump
void _nc_linedump(void)
{ /* void */ }
/* ./tty/hashmap.c */
#undef _nc_hash_map_sp
void _nc_hash_map_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_hash_map
void _nc_hash_map(void)
{ /* void */ }
#undef _nc_make_oldhash_sp
void _nc_make_oldhash_sp(
SCREEN *sp,
int i)
{ /* void */ }
#undef _nc_make_oldhash
void _nc_make_oldhash(
int i)
{ /* void */ }
#undef _nc_scroll_oldhash_sp
void _nc_scroll_oldhash_sp(
SCREEN *sp,
int n,
int top,
int bot)
{ /* void */ }
#undef _nc_scroll_oldhash
void _nc_scroll_oldhash(
int n,
int top,
int bot)
{ /* void */ }
/* ./base/lib_addch.c */
#undef _nc_render
cchar_t _nc_render(
WINDOW *win,
cchar_t ch)
{ return(*(cchar_t *)0); }
#undef _nc_build_wch
int _nc_build_wch(
WINDOW *win,
cchar_t *ch)
{ return(*(int *)0); }
#undef _nc_waddch_nosync
int _nc_waddch_nosync(
WINDOW *win,
const cchar_t c)
{ return(*(int *)0); }
#undef waddch
int waddch(
WINDOW *win,
const chtype ch)
{ return(*(int *)0); }
#undef wechochar
int wechochar(
WINDOW *win,
const chtype ch)
{ return(*(int *)0); }
/* ./base/lib_addstr.c */
#undef waddnstr
int waddnstr(
WINDOW *win,
const char *astr,
int n)
{ return(*(int *)0); }
#undef waddchnstr
int waddchnstr(
WINDOW *win,
const chtype *astr,
int n)
{ return(*(int *)0); }
#undef _nc_wchstrlen
int _nc_wchstrlen(
const cchar_t *s)
{ return(*(int *)0); }
#undef wadd_wchnstr
int wadd_wchnstr(
WINDOW *win,
const cchar_t *astr,
int n)
{ return(*(int *)0); }
#undef waddnwstr
int waddnwstr(
WINDOW *win,
const wchar_t *str,
int n)
{ return(*(int *)0); }
/* ./base/lib_beep.c */
#undef beep_sp
int beep_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef beep
int beep(void)
{ return(*(int *)0); }
/* ./base/lib_bkgd.c */
#undef wbkgrndset
void wbkgrndset(
WINDOW *win,
const cchar_t *ch)
{ /* void */ }
#undef wbkgdset
void wbkgdset(
WINDOW *win,
chtype ch)
{ /* void */ }
#undef wbkgrnd
int wbkgrnd(
WINDOW *win,
const cchar_t *ch)
{ return(*(int *)0); }
#undef wbkgd
int wbkgd(
WINDOW *win,
chtype ch)
{ return(*(int *)0); }
/* ./base/lib_box.c */
#undef wborder
int wborder(
WINDOW *win,
chtype ls,
chtype rs,
chtype ts,
chtype bs,
chtype tl,
chtype tr,
chtype bl,
chtype br)
{ return(*(int *)0); }
/* ./base/lib_chgat.c */
#undef wchgat
int wchgat(
WINDOW *win,
int n,
attr_t attr,
short pair_arg,
const void *opts)
{ return(*(int *)0); }
/* ./base/lib_clear.c */
#undef wclear
int wclear(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_clearok.c */
#undef clearok
int clearok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/lib_clrbot.c */
#undef wclrtobot
int wclrtobot(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_clreol.c */
#undef wclrtoeol
int wclrtoeol(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_color.c */
#undef COLOR_PAIRS
int COLOR_PAIRS;
#undef COLORS
int COLORS;
#undef _nc_reset_colors_sp
NCURSES_BOOL _nc_reset_colors_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_reset_colors
NCURSES_BOOL _nc_reset_colors(void)
{ return(*(NCURSES_BOOL *)0); }
#undef start_color_sp
int start_color_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef start_color
int start_color(void)
{ return(*(int *)0); }
#undef _nc_change_pair
void _nc_change_pair(
SCREEN *sp,
int pair)
{ /* void */ }
#undef _nc_reserve_pairs
void _nc_reserve_pairs(
SCREEN *sp,
int want)
{ /* void */ }
#undef _nc_init_pair
int _nc_init_pair(
SCREEN *sp,
int pair,
int f,
int b)
{ return(*(int *)0); }
#undef init_pair_sp
int init_pair_sp(
SCREEN *sp,
short pair,
short f,
short b)
{ return(*(int *)0); }
#undef init_pair
int init_pair(
short pair,
short f,
short b)
{ return(*(int *)0); }
#undef _nc_init_color
int _nc_init_color(
SCREEN *sp,
int color,
int r,
int g,
int b)
{ return(*(int *)0); }
#undef init_color_sp
int init_color_sp(
SCREEN *sp,
short color,
short r,
short g,
short b)
{ return(*(int *)0); }
#undef init_color
int init_color(
short color,
short r,
short g,
short b)
{ return(*(int *)0); }
#undef can_change_color_sp
NCURSES_BOOL can_change_color_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef can_change_color
NCURSES_BOOL can_change_color(void)
{ return(*(NCURSES_BOOL *)0); }
#undef has_colors_sp
NCURSES_BOOL has_colors_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_colors
NCURSES_BOOL has_colors(void)
{ return(*(NCURSES_BOOL *)0); }
#undef color_content_sp
int color_content_sp(
SCREEN *sp,
short color,
short *r,
short *g,
short *b)
{ return(*(int *)0); }
#undef color_content
int color_content(
short color,
short *r,
short *g,
short *b)
{ return(*(int *)0); }
#undef _nc_pair_content
int _nc_pair_content(
SCREEN *sp,
int pair,
int *f,
int *b)
{ return(*(int *)0); }
#undef pair_content_sp
int pair_content_sp(
SCREEN *sp,
short pair,
short *f,
short *b)
{ return(*(int *)0); }
#undef pair_content
int pair_content(
short pair,
short *f,
short *b)
{ return(*(int *)0); }
#undef _nc_do_color_sp
void _nc_do_color_sp(
SCREEN *sp,
int old_pair,
int pair,
int reverse,
NCURSES_OUTC_sp outc)
{ /* void */ }
#undef _nc_do_color
void _nc_do_color(
int old_pair,
int pair,
int reverse,
NCURSES_OUTC outc)
{ /* void */ }
#undef init_extended_pair_sp
int init_extended_pair_sp(
SCREEN *sp,
int pair,
int f,
int b)
{ return(*(int *)0); }
#undef init_extended_color_sp
int init_extended_color_sp(
SCREEN *sp,
int color,
int r,
int g,
int b)
{ return(*(int *)0); }
#undef extended_color_content_sp
int extended_color_content_sp(
SCREEN *sp,
int color,
int *r,
int *g,
int *b)
{ return(*(int *)0); }
#undef extended_pair_content_sp
int extended_pair_content_sp(
SCREEN *sp,
int pair,
int *f,
int *b)
{ return(*(int *)0); }
#undef reset_color_pairs_sp
void reset_color_pairs_sp(
SCREEN *sp)
{ /* void */ }
#undef init_extended_pair
int init_extended_pair(
int pair,
int f,
int b)
{ return(*(int *)0); }
#undef init_extended_color
int init_extended_color(
int color,
int r,
int g,
int b)
{ return(*(int *)0); }
#undef extended_color_content
int extended_color_content(
int color,
int *r,
int *g,
int *b)
{ return(*(int *)0); }
#undef extended_pair_content
int extended_pair_content(
int pair,
int *f,
int *b)
{ return(*(int *)0); }
#undef reset_color_pairs
void reset_color_pairs(void)
{ /* void */ }
/* ./base/lib_colorset.c */
#undef wcolor_set
int wcolor_set(
WINDOW *win,
short pair_arg,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_delch.c */
#undef wdelch
int wdelch(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_delwin.c */
#undef delwin
int delwin(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_echo.c */
#undef echo_sp
int echo_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef echo
int echo(void)
{ return(*(int *)0); }
#undef noecho_sp
int noecho_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef noecho
int noecho(void)
{ return(*(int *)0); }
/* ./base/lib_endwin.c */
#undef endwin_sp
int endwin_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef endwin
int endwin(void)
{ return(*(int *)0); }
/* ./base/lib_erase.c */
#undef werase
int werase(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_flash.c */
#undef flash_sp
int flash_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef flash
int flash(void)
{ return(*(int *)0); }
/* ./lib_gen.c */
#undef addch
-int (addch)(
+int addch(
const chtype z)
{ return(*(int *)0); }
#undef addchnstr
-int (addchnstr)(
+int addchnstr(
const chtype *a1,
int z)
{ return(*(int *)0); }
#undef addchstr
-int (addchstr)(
+int addchstr(
const chtype *z)
{ return(*(int *)0); }
#undef addnstr
-int (addnstr)(
+int addnstr(
const char *a1,
int z)
{ return(*(int *)0); }
#undef addstr
-int (addstr)(
+int addstr(
const char *z)
{ return(*(int *)0); }
#undef attroff
-int (attroff)(
- NCURSES_ATTR_T z)
+int attroff(
+ int z)
{ return(*(int *)0); }
#undef attron
-int (attron)(
- NCURSES_ATTR_T z)
+int attron(
+ int z)
{ return(*(int *)0); }
#undef attrset
-int (attrset)(
- NCURSES_ATTR_T z)
+int attrset(
+ int z)
{ return(*(int *)0); }
#undef attr_get
-int (attr_get)(
+int attr_get(
attr_t *a1,
short *a2,
void *z)
{ return(*(int *)0); }
#undef attr_off
-int (attr_off)(
+int attr_off(
attr_t a1,
void *z)
{ return(*(int *)0); }
#undef attr_on
-int (attr_on)(
+int attr_on(
attr_t a1,
void *z)
{ return(*(int *)0); }
#undef attr_set
-int (attr_set)(
+int attr_set(
attr_t a1,
short a2,
void *z)
{ return(*(int *)0); }
#undef bkgd
-int (bkgd)(
+int bkgd(
chtype z)
{ return(*(int *)0); }
#undef bkgdset
-void (bkgdset)(
+void bkgdset(
chtype z)
{ /* void */ }
#undef border
-int (border)(
+int border(
chtype a1,
chtype a2,
chtype a3,
chtype a4,
chtype a5,
chtype a6,
chtype a7,
chtype z)
{ return(*(int *)0); }
#undef box
-int (box)(
+int box(
WINDOW *a1,
chtype a2,
chtype z)
{ return(*(int *)0); }
#undef chgat
-int (chgat)(
+int chgat(
int a1,
attr_t a2,
short a3,
const void *z)
{ return(*(int *)0); }
#undef clear
-int (clear)(void)
+int clear(void)
{ return(*(int *)0); }
#undef clrtobot
-int (clrtobot)(void)
+int clrtobot(void)
{ return(*(int *)0); }
#undef clrtoeol
-int (clrtoeol)(void)
+int clrtoeol(void)
{ return(*(int *)0); }
#undef color_set
-int (color_set)(
+int color_set(
short a1,
void *z)
{ return(*(int *)0); }
#undef COLOR_PAIR
-int (COLOR_PAIR)(
+int COLOR_PAIR(
int z)
{ return(*(int *)0); }
#undef delch
-int (delch)(void)
+int delch(void)
{ return(*(int *)0); }
#undef deleteln
-int (deleteln)(void)
+int deleteln(void)
{ return(*(int *)0); }
#undef echochar
-int (echochar)(
+int echochar(
const chtype z)
{ return(*(int *)0); }
#undef erase
-int (erase)(void)
+int erase(void)
{ return(*(int *)0); }
#undef getbkgd
-chtype (getbkgd)(
+chtype getbkgd(
WINDOW *z)
{ return(*(chtype *)0); }
#undef getch
-int (getch)(void)
+int getch(void)
{ return(*(int *)0); }
#undef getnstr
-int (getnstr)(
+int getnstr(
char *a1,
int z)
{ return(*(int *)0); }
#undef getstr
-int (getstr)(
+int getstr(
char *z)
{ return(*(int *)0); }
#undef hline
-int (hline)(
+int hline(
chtype a1,
int z)
{ return(*(int *)0); }
#undef inch
-chtype (inch)(void)
+chtype inch(void)
{ return(*(chtype *)0); }
#undef inchnstr
-int (inchnstr)(
+int inchnstr(
chtype *a1,
int z)
{ return(*(int *)0); }
#undef inchstr
-int (inchstr)(
+int inchstr(
chtype *z)
{ return(*(int *)0); }
#undef innstr
-int (innstr)(
+int innstr(
char *a1,
int z)
{ return(*(int *)0); }
#undef insch
-int (insch)(
+int insch(
chtype z)
{ return(*(int *)0); }
#undef insdelln
-int (insdelln)(
+int insdelln(
int z)
{ return(*(int *)0); }
#undef insertln
-int (insertln)(void)
+int insertln(void)
{ return(*(int *)0); }
#undef insnstr
-int (insnstr)(
+int insnstr(
const char *a1,
int z)
{ return(*(int *)0); }
#undef insstr
-int (insstr)(
+int insstr(
const char *z)
{ return(*(int *)0); }
#undef instr
-int (instr)(
+int instr(
char *z)
{ return(*(int *)0); }
#undef move
-int (move)(
+int move(
int a1,
int z)
{ return(*(int *)0); }
#undef mvaddch
-int (mvaddch)(
+int mvaddch(
int a1,
int a2,
const chtype z)
{ return(*(int *)0); }
#undef mvaddchnstr
-int (mvaddchnstr)(
+int mvaddchnstr(
int a1,
int a2,
const chtype *a3,
int z)
{ return(*(int *)0); }
#undef mvaddchstr
-int (mvaddchstr)(
+int mvaddchstr(
int a1,
int a2,
const chtype *z)
{ return(*(int *)0); }
#undef mvaddnstr
-int (mvaddnstr)(
+int mvaddnstr(
int a1,
int a2,
const char *a3,
int z)
{ return(*(int *)0); }
#undef mvaddstr
-int (mvaddstr)(
+int mvaddstr(
int a1,
int a2,
const char *z)
{ return(*(int *)0); }
#undef mvchgat
-int (mvchgat)(
+int mvchgat(
int a1,
int a2,
int a3,
attr_t a4,
short a5,
const void *z)
{ return(*(int *)0); }
#undef mvdelch
-int (mvdelch)(
+int mvdelch(
int a1,
int z)
{ return(*(int *)0); }
#undef mvgetch
-int (mvgetch)(
+int mvgetch(
int a1,
int z)
{ return(*(int *)0); }
#undef mvgetnstr
-int (mvgetnstr)(
+int mvgetnstr(
int a1,
int a2,
char *a3,
int z)
{ return(*(int *)0); }
#undef mvgetstr
-int (mvgetstr)(
+int mvgetstr(
int a1,
int a2,
char *z)
{ return(*(int *)0); }
#undef mvhline
-int (mvhline)(
+int mvhline(
int a1,
int a2,
chtype a3,
int z)
{ return(*(int *)0); }
#undef mvinch
-chtype (mvinch)(
+chtype mvinch(
int a1,
int z)
{ return(*(chtype *)0); }
#undef mvinchnstr
-int (mvinchnstr)(
+int mvinchnstr(
int a1,
int a2,
chtype *a3,
int z)
{ return(*(int *)0); }
#undef mvinchstr
-int (mvinchstr)(
+int mvinchstr(
int a1,
int a2,
chtype *z)
{ return(*(int *)0); }
#undef mvinnstr
-int (mvinnstr)(
+int mvinnstr(
int a1,
int a2,
char *a3,
int z)
{ return(*(int *)0); }
#undef mvinsch
-int (mvinsch)(
+int mvinsch(
int a1,
int a2,
chtype z)
{ return(*(int *)0); }
#undef mvinsnstr
-int (mvinsnstr)(
+int mvinsnstr(
int a1,
int a2,
const char *a3,
int z)
{ return(*(int *)0); }
#undef mvinsstr
-int (mvinsstr)(
+int mvinsstr(
int a1,
int a2,
const char *z)
{ return(*(int *)0); }
#undef mvinstr
-int (mvinstr)(
+int mvinstr(
int a1,
int a2,
char *z)
{ return(*(int *)0); }
#undef mvvline
-int (mvvline)(
+int mvvline(
int a1,
int a2,
chtype a3,
int z)
{ return(*(int *)0); }
#undef mvwaddch
-int (mvwaddch)(
+int mvwaddch(
WINDOW *a1,
int a2,
int a3,
const chtype z)
{ return(*(int *)0); }
#undef mvwaddchnstr
-int (mvwaddchnstr)(
+int mvwaddchnstr(
WINDOW *a1,
int a2,
int a3,
const chtype *a4,
int z)
{ return(*(int *)0); }
#undef mvwaddchstr
-int (mvwaddchstr)(
+int mvwaddchstr(
WINDOW *a1,
int a2,
int a3,
const chtype *z)
{ return(*(int *)0); }
#undef mvwaddnstr
-int (mvwaddnstr)(
+int mvwaddnstr(
WINDOW *a1,
int a2,
int a3,
const char *a4,
int z)
{ return(*(int *)0); }
#undef mvwaddstr
-int (mvwaddstr)(
+int mvwaddstr(
WINDOW *a1,
int a2,
int a3,
const char *z)
{ return(*(int *)0); }
#undef mvwchgat
-int (mvwchgat)(
+int mvwchgat(
WINDOW *a1,
int a2,
int a3,
int a4,
attr_t a5,
short a6,
const void *z)
{ return(*(int *)0); }
#undef mvwdelch
-int (mvwdelch)(
+int mvwdelch(
WINDOW *a1,
int a2,
int z)
{ return(*(int *)0); }
#undef mvwgetch
-int (mvwgetch)(
+int mvwgetch(
WINDOW *a1,
int a2,
int z)
{ return(*(int *)0); }
#undef mvwgetnstr
-int (mvwgetnstr)(
+int mvwgetnstr(
WINDOW *a1,
int a2,
int a3,
char *a4,
int z)
{ return(*(int *)0); }
#undef mvwgetstr
-int (mvwgetstr)(
+int mvwgetstr(
WINDOW *a1,
int a2,
int a3,
char *z)
{ return(*(int *)0); }
#undef mvwhline
-int (mvwhline)(
+int mvwhline(
WINDOW *a1,
int a2,
int a3,
chtype a4,
int z)
{ return(*(int *)0); }
#undef mvwinch
-chtype (mvwinch)(
+chtype mvwinch(
WINDOW *a1,
int a2,
int z)
{ return(*(chtype *)0); }
#undef mvwinchnstr
-int (mvwinchnstr)(
+int mvwinchnstr(
WINDOW *a1,
int a2,
int a3,
chtype *a4,
int z)
{ return(*(int *)0); }
#undef mvwinchstr
-int (mvwinchstr)(
+int mvwinchstr(
WINDOW *a1,
int a2,
int a3,
chtype *z)
{ return(*(int *)0); }
#undef mvwinnstr
-int (mvwinnstr)(
+int mvwinnstr(
WINDOW *a1,
int a2,
int a3,
char *a4,
int z)
{ return(*(int *)0); }
#undef mvwinsch
-int (mvwinsch)(
+int mvwinsch(
WINDOW *a1,
int a2,
int a3,
chtype z)
{ return(*(int *)0); }
#undef mvwinsnstr
-int (mvwinsnstr)(
+int mvwinsnstr(
WINDOW *a1,
int a2,
int a3,
const char *a4,
int z)
{ return(*(int *)0); }
#undef mvwinsstr
-int (mvwinsstr)(
+int mvwinsstr(
WINDOW *a1,
int a2,
int a3,
const char *z)
{ return(*(int *)0); }
#undef mvwinstr
-int (mvwinstr)(
+int mvwinstr(
WINDOW *a1,
int a2,
int a3,
char *z)
{ return(*(int *)0); }
#undef mvwvline
-int (mvwvline)(
+int mvwvline(
WINDOW *a1,
int a2,
int a3,
chtype a4,
int z)
{ return(*(int *)0); }
#undef PAIR_NUMBER
-int (PAIR_NUMBER)(
+int PAIR_NUMBER(
int z)
{ return(*(int *)0); }
#undef redrawwin
-int (redrawwin)(
+int redrawwin(
WINDOW *z)
{ return(*(int *)0); }
#undef refresh
-int (refresh)(void)
+int refresh(void)
{ return(*(int *)0); }
#undef scrl
-int (scrl)(
+int scrl(
int z)
{ return(*(int *)0); }
#undef scroll
-int (scroll)(
+int scroll(
WINDOW *z)
{ return(*(int *)0); }
#undef setscrreg
-int (setscrreg)(
+int setscrreg(
int a1,
int z)
{ return(*(int *)0); }
#undef slk_attr_off
-int (slk_attr_off)(
+int slk_attr_off(
const attr_t a1,
void *z)
{ return(*(int *)0); }
#undef slk_attr_on
-int (slk_attr_on)(
+int slk_attr_on(
attr_t a1,
void *z)
{ return(*(int *)0); }
#undef standout
-int (standout)(void)
+int standout(void)
{ return(*(int *)0); }
#undef standend
-int (standend)(void)
+int standend(void)
{ return(*(int *)0); }
#undef timeout
-void (timeout)(
+void timeout(
int z)
{ /* void */ }
#undef touchline
-int (touchline)(
+int touchline(
WINDOW *a1,
int a2,
int z)
{ return(*(int *)0); }
#undef touchwin
-int (touchwin)(
+int touchwin(
WINDOW *z)
{ return(*(int *)0); }
#undef untouchwin
-int (untouchwin)(
+int untouchwin(
WINDOW *z)
{ return(*(int *)0); }
#undef vline
-int (vline)(
+int vline(
chtype a1,
int z)
{ return(*(int *)0); }
#undef waddchstr
-int (waddchstr)(
+int waddchstr(
WINDOW *a1,
const chtype *z)
{ return(*(int *)0); }
#undef waddstr
-int (waddstr)(
+int waddstr(
WINDOW *a1,
const char *z)
{ return(*(int *)0); }
#undef wattron
-int (wattron)(
+int wattron(
WINDOW *a1,
int z)
{ return(*(int *)0); }
#undef wattroff
-int (wattroff)(
+int wattroff(
WINDOW *a1,
int z)
{ return(*(int *)0); }
#undef wattrset
-int (wattrset)(
+int wattrset(
WINDOW *a1,
int z)
{ return(*(int *)0); }
#undef wattr_get
-int (wattr_get)(
+int wattr_get(
WINDOW *a1,
attr_t *a2,
short *a3,
void *z)
{ return(*(int *)0); }
#undef wattr_set
-int (wattr_set)(
+int wattr_set(
WINDOW *a1,
attr_t a2,
short a3,
void *z)
{ return(*(int *)0); }
#undef wdeleteln
-int (wdeleteln)(
+int wdeleteln(
WINDOW *z)
{ return(*(int *)0); }
#undef wgetstr
-int (wgetstr)(
+int wgetstr(
WINDOW *a1,
char *z)
{ return(*(int *)0); }
#undef winchstr
-int (winchstr)(
+int winchstr(
WINDOW *a1,
chtype *z)
{ return(*(int *)0); }
#undef winsertln
-int (winsertln)(
+int winsertln(
WINDOW *z)
{ return(*(int *)0); }
#undef winsstr
-int (winsstr)(
+int winsstr(
WINDOW *a1,
const char *z)
{ return(*(int *)0); }
#undef winstr
-int (winstr)(
+int winstr(
WINDOW *a1,
char *z)
{ return(*(int *)0); }
#undef wstandout
-int (wstandout)(
+int wstandout(
WINDOW *z)
{ return(*(int *)0); }
#undef wstandend
-int (wstandend)(
+int wstandend(
WINDOW *z)
{ return(*(int *)0); }
#undef getattrs
-int (getattrs)(
+int getattrs(
const WINDOW *z)
{ return(*(int *)0); }
#undef getcurx
-int (getcurx)(
+int getcurx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getcury
-int (getcury)(
+int getcury(
const WINDOW *z)
{ return(*(int *)0); }
#undef getbegx
-int (getbegx)(
+int getbegx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getbegy
-int (getbegy)(
+int getbegy(
const WINDOW *z)
{ return(*(int *)0); }
#undef getmaxx
-int (getmaxx)(
+int getmaxx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getmaxy
-int (getmaxy)(
+int getmaxy(
const WINDOW *z)
{ return(*(int *)0); }
#undef getparx
-int (getparx)(
+int getparx(
const WINDOW *z)
{ return(*(int *)0); }
#undef getpary
-int (getpary)(
+int getpary(
const WINDOW *z)
{ return(*(int *)0); }
#undef wgetparent
-WINDOW *(wgetparent)(
+WINDOW *wgetparent(
const WINDOW *z)
{ return(*(WINDOW **)0); }
#undef is_cleared
-NCURSES_BOOL (is_cleared)(
+NCURSES_BOOL is_cleared(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_idcok
-NCURSES_BOOL (is_idcok)(
+NCURSES_BOOL is_idcok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_idlok
-NCURSES_BOOL (is_idlok)(
+NCURSES_BOOL is_idlok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_immedok
-NCURSES_BOOL (is_immedok)(
+NCURSES_BOOL is_immedok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_keypad
-NCURSES_BOOL (is_keypad)(
+NCURSES_BOOL is_keypad(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_leaveok
-NCURSES_BOOL (is_leaveok)(
+NCURSES_BOOL is_leaveok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_nodelay
-NCURSES_BOOL (is_nodelay)(
+NCURSES_BOOL is_nodelay(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_notimeout
-NCURSES_BOOL (is_notimeout)(
+NCURSES_BOOL is_notimeout(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_pad
-NCURSES_BOOL (is_pad)(
+NCURSES_BOOL is_pad(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_scrollok
-NCURSES_BOOL (is_scrollok)(
+NCURSES_BOOL is_scrollok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_subwin
-NCURSES_BOOL (is_subwin)(
+NCURSES_BOOL is_subwin(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef is_syncok
-NCURSES_BOOL (is_syncok)(
+NCURSES_BOOL is_syncok(
const WINDOW *z)
{ return(*(NCURSES_BOOL *)0); }
#undef wgetdelay
-int (wgetdelay)(
+int wgetdelay(
const WINDOW *z)
{ return(*(int *)0); }
#undef wgetscrreg
-int (wgetscrreg)(
+int wgetscrreg(
const WINDOW *a1,
int *a2,
int *z)
{ return(*(int *)0); }
#undef add_wch
-int (add_wch)(
+int add_wch(
const cchar_t *z)
{ return(*(int *)0); }
#undef add_wchnstr
-int (add_wchnstr)(
+int add_wchnstr(
const cchar_t *a1,
int z)
{ return(*(int *)0); }
#undef add_wchstr
-int (add_wchstr)(
+int add_wchstr(
const cchar_t *z)
{ return(*(int *)0); }
#undef addnwstr
-int (addnwstr)(
+int addnwstr(
const wchar_t *a1,
int z)
{ return(*(int *)0); }
#undef addwstr
-int (addwstr)(
+int addwstr(
const wchar_t *z)
{ return(*(int *)0); }
#undef bkgrnd
-int (bkgrnd)(
+int bkgrnd(
const cchar_t *z)
{ return(*(int *)0); }
#undef bkgrndset
-void (bkgrndset)(
+void bkgrndset(
const cchar_t *z)
{ /* void */ }
#undef border_set
-int (border_set)(
+int border_set(
const cchar_t *a1,
const cchar_t *a2,
const cchar_t *a3,
const cchar_t *a4,
const cchar_t *a5,
const cchar_t *a6,
const cchar_t *a7,
const cchar_t *z)
{ return(*(int *)0); }
#undef box_set
-int (box_set)(
+int box_set(
WINDOW *a1,
const cchar_t *a2,
const cchar_t *z)
{ return(*(int *)0); }
#undef echo_wchar
-int (echo_wchar)(
+int echo_wchar(
const cchar_t *z)
{ return(*(int *)0); }
#undef get_wch
-int (get_wch)(
+int get_wch(
wint_t *z)
{ return(*(int *)0); }
#undef get_wstr
-int (get_wstr)(
+int get_wstr(
wint_t *z)
{ return(*(int *)0); }
#undef getbkgrnd
-int (getbkgrnd)(
+int getbkgrnd(
cchar_t *z)
{ return(*(int *)0); }
#undef getn_wstr
-int (getn_wstr)(
+int getn_wstr(
wint_t *a1,
int z)
{ return(*(int *)0); }
#undef hline_set
-int (hline_set)(
+int hline_set(
const cchar_t *a1,
int z)
{ return(*(int *)0); }
#undef in_wch
-int (in_wch)(
+int in_wch(
cchar_t *z)
{ return(*(int *)0); }
#undef in_wchnstr
-int (in_wchnstr)(
+int in_wchnstr(
cchar_t *a1,
int z)
{ return(*(int *)0); }
#undef in_wchstr
-int (in_wchstr)(
+int in_wchstr(
cchar_t *z)
{ return(*(int *)0); }
#undef innwstr
-int (innwstr)(
+int innwstr(
wchar_t *a1,
int z)
{ return(*(int *)0); }
#undef ins_nwstr
-int (ins_nwstr)(
+int ins_nwstr(
const wchar_t *a1,
int z)
{ return(*(int *)0); }
#undef ins_wch
-int (ins_wch)(
+int ins_wch(
const cchar_t *z)
{ return(*(int *)0); }
#undef ins_wstr
-int (ins_wstr)(
+int ins_wstr(
const wchar_t *z)
{ return(*(int *)0); }
#undef inwstr
-int (inwstr)(
+int inwstr(
wchar_t *z)
{ return(*(int *)0); }
#undef mvadd_wch
-int (mvadd_wch)(
+int mvadd_wch(
int a1,
int a2,
const cchar_t *z)
{ return(*(int *)0); }
#undef mvadd_wchnstr
-int (mvadd_wchnstr)(
+int mvadd_wchnstr(
int a1,
int a2,
const cchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvadd_wchstr
-int (mvadd_wchstr)(
+int mvadd_wchstr(
int a1,
int a2,
const cchar_t *z)
{ return(*(int *)0); }
#undef mvaddnwstr
-int (mvaddnwstr)(
+int mvaddnwstr(
int a1,
int a2,
const wchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvaddwstr
-int (mvaddwstr)(
+int mvaddwstr(
int a1,
int a2,
const wchar_t *z)
{ return(*(int *)0); }
#undef mvget_wch
-int (mvget_wch)(
+int mvget_wch(
int a1,
int a2,
wint_t *z)
{ return(*(int *)0); }
#undef mvget_wstr
-int (mvget_wstr)(
+int mvget_wstr(
int a1,
int a2,
wint_t *z)
{ return(*(int *)0); }
#undef mvgetn_wstr
-int (mvgetn_wstr)(
+int mvgetn_wstr(
int a1,
int a2,
wint_t *a3,
int z)
{ return(*(int *)0); }
#undef mvhline_set
-int (mvhline_set)(
+int mvhline_set(
int a1,
int a2,
const cchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvin_wch
-int (mvin_wch)(
+int mvin_wch(
int a1,
int a2,
cchar_t *z)
{ return(*(int *)0); }
#undef mvin_wchnstr
-int (mvin_wchnstr)(
+int mvin_wchnstr(
int a1,
int a2,
cchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvin_wchstr
-int (mvin_wchstr)(
+int mvin_wchstr(
int a1,
int a2,
cchar_t *z)
{ return(*(int *)0); }
#undef mvinnwstr
-int (mvinnwstr)(
+int mvinnwstr(
int a1,
int a2,
wchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvins_nwstr
-int (mvins_nwstr)(
+int mvins_nwstr(
int a1,
int a2,
const wchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvins_wch
-int (mvins_wch)(
+int mvins_wch(
int a1,
int a2,
const cchar_t *z)
{ return(*(int *)0); }
#undef mvins_wstr
-int (mvins_wstr)(
+int mvins_wstr(
int a1,
int a2,
const wchar_t *z)
{ return(*(int *)0); }
#undef mvinwstr
-int (mvinwstr)(
+int mvinwstr(
int a1,
int a2,
wchar_t *z)
{ return(*(int *)0); }
#undef mvvline_set
-int (mvvline_set)(
+int mvvline_set(
int a1,
int a2,
const cchar_t *a3,
int z)
{ return(*(int *)0); }
#undef mvwadd_wch
-int (mvwadd_wch)(
+int mvwadd_wch(
WINDOW *a1,
int a2,
int a3,
const cchar_t *z)
{ return(*(int *)0); }
#undef mvwadd_wchnstr
-int (mvwadd_wchnstr)(
+int mvwadd_wchnstr(
WINDOW *a1,
int a2,
int a3,
const cchar_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwadd_wchstr
-int (mvwadd_wchstr)(
+int mvwadd_wchstr(
WINDOW *a1,
int a2,
int a3,
const cchar_t *z)
{ return(*(int *)0); }
#undef mvwaddnwstr
-int (mvwaddnwstr)(
+int mvwaddnwstr(
WINDOW *a1,
int a2,
int a3,
const wchar_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwaddwstr
-int (mvwaddwstr)(
+int mvwaddwstr(
WINDOW *a1,
int a2,
int a3,
const wchar_t *z)
{ return(*(int *)0); }
#undef mvwget_wch
-int (mvwget_wch)(
+int mvwget_wch(
WINDOW *a1,
int a2,
int a3,
wint_t *z)
{ return(*(int *)0); }
#undef mvwget_wstr
-int (mvwget_wstr)(
+int mvwget_wstr(
WINDOW *a1,
int a2,
int a3,
wint_t *z)
{ return(*(int *)0); }
#undef mvwgetn_wstr
-int (mvwgetn_wstr)(
+int mvwgetn_wstr(
WINDOW *a1,
int a2,
int a3,
wint_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwhline_set
-int (mvwhline_set)(
+int mvwhline_set(
WINDOW *a1,
int a2,
int a3,
const cchar_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwin_wch
-int (mvwin_wch)(
+int mvwin_wch(
WINDOW *a1,
int a2,
int a3,
cchar_t *z)
{ return(*(int *)0); }
#undef mvwin_wchnstr
-int (mvwin_wchnstr)(
+int mvwin_wchnstr(
WINDOW *a1,
int a2,
int a3,
cchar_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwin_wchstr
-int (mvwin_wchstr)(
+int mvwin_wchstr(
WINDOW *a1,
int a2,
int a3,
cchar_t *z)
{ return(*(int *)0); }
#undef mvwinnwstr
-int (mvwinnwstr)(
+int mvwinnwstr(
WINDOW *a1,
int a2,
int a3,
wchar_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwins_nwstr
-int (mvwins_nwstr)(
+int mvwins_nwstr(
WINDOW *a1,
int a2,
int a3,
const wchar_t *a4,
int z)
{ return(*(int *)0); }
#undef mvwins_wch
-int (mvwins_wch)(
+int mvwins_wch(
WINDOW *a1,
int a2,
int a3,
const cchar_t *z)
{ return(*(int *)0); }
#undef mvwins_wstr
-int (mvwins_wstr)(
+int mvwins_wstr(
WINDOW *a1,
int a2,
int a3,
const wchar_t *z)
{ return(*(int *)0); }
#undef mvwinwstr
-int (mvwinwstr)(
+int mvwinwstr(
WINDOW *a1,
int a2,
int a3,
wchar_t *z)
{ return(*(int *)0); }
#undef mvwvline_set
-int (mvwvline_set)(
+int mvwvline_set(
WINDOW *a1,
int a2,
int a3,
const cchar_t *a4,
int z)
{ return(*(int *)0); }
#undef vline_set
-int (vline_set)(
+int vline_set(
const cchar_t *a1,
int z)
{ return(*(int *)0); }
#undef wadd_wchstr
-int (wadd_wchstr)(
+int wadd_wchstr(
WINDOW *a1,
const cchar_t *z)
{ return(*(int *)0); }
#undef waddwstr
-int (waddwstr)(
+int waddwstr(
WINDOW *a1,
const wchar_t *z)
{ return(*(int *)0); }
#undef wget_wstr
-int (wget_wstr)(
+int wget_wstr(
WINDOW *a1,
wint_t *z)
{ return(*(int *)0); }
#undef wgetbkgrnd
-int (wgetbkgrnd)(
+int wgetbkgrnd(
WINDOW *a1,
cchar_t *z)
{ return(*(int *)0); }
#undef win_wchstr
-int (win_wchstr)(
+int win_wchstr(
WINDOW *a1,
cchar_t *z)
{ return(*(int *)0); }
#undef wins_wstr
-int (wins_wstr)(
+int wins_wstr(
WINDOW *a1,
const wchar_t *z)
{ return(*(int *)0); }
#undef mouse_trafo
-NCURSES_BOOL (mouse_trafo)(
+NCURSES_BOOL mouse_trafo(
int *a1,
int *a2,
NCURSES_BOOL z)
{ return(*(NCURSES_BOOL *)0); }
/* ./base/lib_getch.c */
#undef ESCDELAY
int ESCDELAY;
#undef set_escdelay_sp
int set_escdelay_sp(
SCREEN *sp,
int value)
{ return(*(int *)0); }
#undef set_escdelay
int set_escdelay(
int value)
{ return(*(int *)0); }
#undef get_escdelay_sp
int get_escdelay_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef get_escdelay
int get_escdelay(void)
{ return(*(int *)0); }
#undef _nc_wgetch
int _nc_wgetch(
WINDOW *win,
int *result,
int use_meta)
{ return(*(int *)0); }
#undef wgetch
int wgetch(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_getstr.c */
#undef wgetnstr
int wgetnstr(
WINDOW *win,
char *str,
int maxlen)
{ return(*(int *)0); }
/* ./base/lib_hline.c */
#undef whline
int whline(
WINDOW *win,
chtype ch,
int n)
{ return(*(int *)0); }
/* ./base/lib_immedok.c */
#undef immedok
void immedok(
WINDOW *win,
NCURSES_BOOL flag)
{ /* void */ }
/* ./base/lib_inchstr.c */
#undef winchnstr
int winchnstr(
WINDOW *win,
chtype *str,
int n)
{ return(*(int *)0); }
/* ./base/lib_initscr.c */
#undef initscr
WINDOW *initscr(void)
{ return(*(WINDOW **)0); }
/* ./base/lib_insch.c */
#undef _nc_insert_ch
int _nc_insert_ch(
SCREEN *sp,
WINDOW *win,
chtype ch)
{ return(*(int *)0); }
#undef winsch
int winsch(
WINDOW *win,
chtype c)
{ return(*(int *)0); }
/* ./base/lib_insdel.c */
#undef winsdelln
int winsdelln(
WINDOW *win,
int n)
{ return(*(int *)0); }
/* ./base/lib_insnstr.c */
#undef winsnstr
int winsnstr(
WINDOW *win,
const char *s,
int n)
{ return(*(int *)0); }
/* ./base/lib_instr.c */
#undef winnstr
int winnstr(
WINDOW *win,
char *str,
int n)
{ return(*(int *)0); }
/* ./base/lib_isendwin.c */
#undef isendwin_sp
NCURSES_BOOL isendwin_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef isendwin
NCURSES_BOOL isendwin(void)
{ return(*(NCURSES_BOOL *)0); }
/* ./base/lib_leaveok.c */
#undef leaveok
int leaveok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/lib_mouse.c */
#undef getmouse_sp
int getmouse_sp(
SCREEN *sp,
MEVENT *aevent)
{ return(*(int *)0); }
#undef getmouse
int getmouse(
MEVENT *aevent)
{ return(*(int *)0); }
#undef ungetmouse_sp
int ungetmouse_sp(
SCREEN *sp,
MEVENT *aevent)
{ return(*(int *)0); }
#undef ungetmouse
int ungetmouse(
MEVENT *aevent)
{ return(*(int *)0); }
#undef mousemask_sp
mmask_t mousemask_sp(
SCREEN *sp,
mmask_t newmask,
mmask_t *oldmask)
{ return(*(mmask_t *)0); }
#undef mousemask
mmask_t mousemask(
mmask_t newmask,
mmask_t *oldmask)
{ return(*(mmask_t *)0); }
#undef wenclose
NCURSES_BOOL wenclose(
const WINDOW *win,
int y,
int x)
{ return(*(NCURSES_BOOL *)0); }
#undef mouseinterval_sp
int mouseinterval_sp(
SCREEN *sp,
int maxclick)
{ return(*(int *)0); }
#undef mouseinterval
int mouseinterval(
int maxclick)
{ return(*(int *)0); }
#undef _nc_has_mouse
NCURSES_BOOL _nc_has_mouse(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_mouse_sp
NCURSES_BOOL has_mouse_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_mouse
NCURSES_BOOL has_mouse(void)
{ return(*(NCURSES_BOOL *)0); }
#undef wmouse_trafo
NCURSES_BOOL wmouse_trafo(
const WINDOW *win,
int *pY,
int *pX,
NCURSES_BOOL to_screen)
{ return(*(NCURSES_BOOL *)0); }
/* ./base/lib_move.c */
#undef wmove
int wmove(
WINDOW *win,
int y,
int x)
{ return(*(int *)0); }
/* ./tty/lib_mvcur.c */
#undef _nc_msec_cost_sp
int _nc_msec_cost_sp(
SCREEN *sp,
const char *const cap,
int affcnt)
{ return(*(int *)0); }
#undef _nc_msec_cost
int _nc_msec_cost(
const char *const cap,
int affcnt)
{ return(*(int *)0); }
#undef _nc_mvcur_resume_sp
void _nc_mvcur_resume_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_mvcur_resume
void _nc_mvcur_resume(void)
{ /* void */ }
#undef _nc_mvcur_init_sp
void _nc_mvcur_init_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_mvcur_init
void _nc_mvcur_init(void)
{ /* void */ }
#undef _nc_mvcur_wrap_sp
void _nc_mvcur_wrap_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_mvcur_wrap
void _nc_mvcur_wrap(void)
{ /* void */ }
#undef _nc_mvcur_sp
int _nc_mvcur_sp(
SCREEN *sp,
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef _nc_mvcur
int _nc_mvcur(
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef mvcur_sp
int mvcur_sp(
SCREEN *sp,
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef mvcur
int mvcur(
int yold,
int xold,
int ynew,
int xnew)
{ return(*(int *)0); }
#undef _nc_optimize_enable
int _nc_optimize_enable;
/* ./base/lib_mvwin.c */
#undef mvwin
int mvwin(
WINDOW *win,
int by,
int bx)
{ return(*(int *)0); }
/* ./base/lib_newterm.c */
#undef filter_sp
void filter_sp(
SCREEN *sp)
{ /* void */ }
#undef filter
void filter(void)
{ /* void */ }
#undef nofilter_sp
void nofilter_sp(
SCREEN *sp)
{ /* void */ }
#undef nofilter
void nofilter(void)
{ /* void */ }
#undef newterm_sp
SCREEN *newterm_sp(
SCREEN *sp,
const char *name,
FILE *ofp,
FILE *ifp)
{ return(*(SCREEN **)0); }
#undef newterm
SCREEN *newterm(
const char *name,
FILE *ofp,
FILE *ifp)
{ return(*(SCREEN **)0); }
/* ./base/lib_newwin.c */
#undef _nc_freewin
int _nc_freewin(
WINDOW *win)
{ return(*(int *)0); }
#undef newwin_sp
WINDOW *newwin_sp(
SCREEN *sp,
int num_lines,
int num_columns,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef newwin
WINDOW *newwin(
int num_lines,
int num_columns,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef derwin
WINDOW *derwin(
WINDOW *orig,
int num_lines,
int num_columns,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef subwin
WINDOW *subwin(
WINDOW *w,
int l,
int c,
int y,
int x)
{ return(*(WINDOW **)0); }
#undef _nc_makenew_sp
WINDOW *_nc_makenew_sp(
SCREEN *sp,
int num_lines,
int num_columns,
int begy,
int begx,
int flags)
{ return(*(WINDOW **)0); }
#undef _nc_curscr_of
WINDOW *_nc_curscr_of(
SCREEN *sp)
{ return(*(WINDOW **)0); }
#undef _nc_newscr_of
WINDOW *_nc_newscr_of(
SCREEN *sp)
{ return(*(WINDOW **)0); }
#undef _nc_stdscr_of
WINDOW *_nc_stdscr_of(
SCREEN *sp)
{ return(*(WINDOW **)0); }
/* ./base/lib_nl.c */
#undef nl_sp
int nl_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nl
int nl(void)
{ return(*(int *)0); }
#undef nonl_sp
int nonl_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nonl
int nonl(void)
{ return(*(int *)0); }
/* ./base/lib_overlay.c */
#undef overlay
int overlay(
const WINDOW *win1,
WINDOW *win2)
{ return(*(int *)0); }
#undef overwrite
int overwrite(
const WINDOW *win1,
WINDOW *win2)
{ return(*(int *)0); }
#undef copywin
int copywin(
const WINDOW *src,
WINDOW *dst,
int sminrow,
int smincol,
int dminrow,
int dmincol,
int dmaxrow,
int dmaxcol,
int over)
{ return(*(int *)0); }
/* ./base/lib_pad.c */
#undef newpad_sp
WINDOW *newpad_sp(
SCREEN *sp,
int l,
int c)
{ return(*(WINDOW **)0); }
#undef newpad
WINDOW *newpad(
int l,
int c)
{ return(*(WINDOW **)0); }
#undef subpad
WINDOW *subpad(
WINDOW *orig,
int l,
int c,
int begy,
int begx)
{ return(*(WINDOW **)0); }
#undef prefresh
int prefresh(
WINDOW *win,
int pminrow,
int pmincol,
int sminrow,
int smincol,
int smaxrow,
int smaxcol)
{ return(*(int *)0); }
#undef pnoutrefresh
int pnoutrefresh(
WINDOW *win,
int pminrow,
int pmincol,
int sminrow,
int smincol,
int smaxrow,
int smaxcol)
{ return(*(int *)0); }
#undef pechochar
int pechochar(
WINDOW *pad,
const chtype ch)
{ return(*(int *)0); }
/* ./base/lib_printw.c */
#undef printw
int printw(
const char *fmt,
...)
{ return(*(int *)0); }
#undef wprintw
int wprintw(
WINDOW *win,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvprintw
int mvprintw(
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvwprintw
int mvwprintw(
WINDOW *win,
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
#undef vwprintw
int vwprintw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
#undef vw_printw
int vw_printw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
/* ./base/lib_redrawln.c */
#undef wredrawln
int wredrawln(
WINDOW *win,
int beg,
int num)
{ return(*(int *)0); }
/* ./base/lib_refresh.c */
#undef wrefresh
int wrefresh(
WINDOW *win)
{ return(*(int *)0); }
#undef wnoutrefresh
int wnoutrefresh(
WINDOW *win)
{ return(*(int *)0); }
/* ./base/lib_restart.c */
#undef restartterm_sp
int restartterm_sp(
SCREEN *sp,
const char *termp,
int filenum,
int *errret)
{ return(*(int *)0); }
#undef restartterm
int restartterm(
const char *termp,
int filenum,
int *errret)
{ return(*(int *)0); }
/* ./base/lib_scanw.c */
#undef vwscanw
int vwscanw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
#undef vw_scanw
int vw_scanw(
WINDOW *win,
const char *fmt,
va_list argp)
{ return(*(int *)0); }
#undef scanw
int scanw(
const char *fmt,
...)
{ return(*(int *)0); }
#undef wscanw
int wscanw(
WINDOW *win,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvscanw
int mvscanw(
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
#undef mvwscanw
int mvwscanw(
WINDOW *win,
int y,
int x,
const char *fmt,
...)
{ return(*(int *)0); }
/* ./base/lib_screen.c */
#undef getwin_sp
WINDOW *getwin_sp(
SCREEN *sp,
FILE *filep)
{ return(*(WINDOW **)0); }
#undef getwin
WINDOW *getwin(
FILE *filep)
{ return(*(WINDOW **)0); }
#undef putwin
int putwin(
WINDOW *win,
FILE *filep)
{ return(*(int *)0); }
#undef scr_restore_sp
int scr_restore_sp(
SCREEN *sp,
const char *file)
{ return(*(int *)0); }
#undef scr_restore
int scr_restore(
const char *file)
{ return(*(int *)0); }
#undef scr_dump
int scr_dump(
const char *file)
{ return(*(int *)0); }
#undef scr_init_sp
int scr_init_sp(
SCREEN *sp,
const char *file)
{ return(*(int *)0); }
#undef scr_init
int scr_init(
const char *file)
{ return(*(int *)0); }
#undef scr_set_sp
int scr_set_sp(
SCREEN *sp,
const char *file)
{ return(*(int *)0); }
#undef scr_set
int scr_set(
const char *file)
{ return(*(int *)0); }
/* ./base/lib_scroll.c */
#undef _nc_scroll_window
void _nc_scroll_window(
WINDOW *win,
int const n,
int const top,
int const bottom,
cchar_t blank)
{ /* void */ }
#undef wscrl
int wscrl(
WINDOW *win,
int n)
{ return(*(int *)0); }
/* ./base/lib_scrollok.c */
#undef scrollok
int scrollok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/lib_scrreg.c */
#undef wsetscrreg
int wsetscrreg(
WINDOW *win,
int top,
int bottom)
{ return(*(int *)0); }
/* ./base/lib_set_term.c */
#undef set_term
SCREEN *set_term(
SCREEN *screenp)
{ return(*(SCREEN **)0); }
#undef delscreen
void delscreen(
SCREEN *sp)
{ /* void */ }
#undef _nc_setupscreen_sp
int _nc_setupscreen_sp(
SCREEN **spp,
int slines,
int scolumns,
FILE *output,
int filtered,
int slk_format)
{ return(*(int *)0); }
#undef _nc_setupscreen
int _nc_setupscreen(
int slines,
int scolumns,
FILE *output,
int filtered,
int slk_format)
{ return(*(int *)0); }
#undef _nc_ripoffline_sp
int _nc_ripoffline_sp(
SCREEN *sp,
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
#undef _nc_ripoffline
int _nc_ripoffline(
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
#undef ripoffline_sp
int ripoffline_sp(
SCREEN *sp,
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
#undef ripoffline
int ripoffline(
int line,
int (*init)(
WINDOW *p1,
int p2))
{ return(*(int *)0); }
/* ./base/lib_slk.c */
#undef _nc_format_slks
int _nc_format_slks(
SCREEN *sp,
int cols)
{ return(*(int *)0); }
#undef _nc_slk_initialize
int _nc_slk_initialize(
WINDOW *stwin,
int cols)
{ return(*(int *)0); }
#undef slk_restore_sp
int slk_restore_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_restore
int slk_restore(void)
{ return(*(int *)0); }
/* ./base/lib_slkatr_set.c */
#undef slk_attr_set_sp
int slk_attr_set_sp(
SCREEN *sp,
const attr_t attr,
short pair_arg,
void *opts)
{ return(*(int *)0); }
#undef slk_attr_set
int slk_attr_set(
const attr_t attr,
short pair_arg,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_slkatrof.c */
#undef slk_attroff_sp
int slk_attroff_sp(
SCREEN *sp,
const chtype attr)
{ return(*(int *)0); }
#undef slk_attroff
int slk_attroff(
const chtype attr)
{ return(*(int *)0); }
/* ./base/lib_slkatron.c */
#undef slk_attron_sp
int slk_attron_sp(
SCREEN *sp,
const chtype attr)
{ return(*(int *)0); }
#undef slk_attron
int slk_attron(
const chtype attr)
{ return(*(int *)0); }
/* ./base/lib_slkatrset.c */
#undef slk_attrset_sp
int slk_attrset_sp(
SCREEN *sp,
const chtype attr)
{ return(*(int *)0); }
#undef slk_attrset
int slk_attrset(
const chtype attr)
{ return(*(int *)0); }
/* ./base/lib_slkattr.c */
#undef slk_attr_sp
attr_t slk_attr_sp(
SCREEN *sp)
{ return(*(attr_t *)0); }
#undef slk_attr
attr_t slk_attr(void)
{ return(*(attr_t *)0); }
/* ./base/lib_slkclear.c */
#undef slk_clear_sp
int slk_clear_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_clear
int slk_clear(void)
{ return(*(int *)0); }
/* ./base/lib_slkcolor.c */
#undef slk_color_sp
int slk_color_sp(
SCREEN *sp,
short pair_arg)
{ return(*(int *)0); }
#undef slk_color
int slk_color(
short pair_arg)
{ return(*(int *)0); }
#undef extended_slk_color_sp
int extended_slk_color_sp(
SCREEN *sp,
int pair_arg)
{ return(*(int *)0); }
#undef extended_slk_color
int extended_slk_color(
int pair_arg)
{ return(*(int *)0); }
/* ./base/lib_slkinit.c */
#undef slk_init_sp
int slk_init_sp(
SCREEN *sp,
int format)
{ return(*(int *)0); }
#undef slk_init
int slk_init(
int format)
{ return(*(int *)0); }
/* ./base/lib_slklab.c */
#undef slk_label_sp
char *slk_label_sp(
SCREEN *sp,
int n)
{ return(*(char **)0); }
#undef slk_label
char *slk_label(
int n)
{ return(*(char **)0); }
/* ./base/lib_slkrefr.c */
#undef slk_noutrefresh_sp
int slk_noutrefresh_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_noutrefresh
int slk_noutrefresh(void)
{ return(*(int *)0); }
#undef slk_refresh_sp
int slk_refresh_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_refresh
int slk_refresh(void)
{ return(*(int *)0); }
/* ./base/lib_slkset.c */
#undef slk_set_sp
int slk_set_sp(
SCREEN *sp,
int i,
const char *astr,
int format)
{ return(*(int *)0); }
#undef slk_set
int slk_set(
int i,
const char *astr,
int format)
{ return(*(int *)0); }
/* ./base/lib_slktouch.c */
#undef slk_touch_sp
int slk_touch_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef slk_touch
int slk_touch(void)
{ return(*(int *)0); }
/* ./base/lib_touch.c */
#undef is_linetouched
NCURSES_BOOL is_linetouched(
WINDOW *win,
int line)
{ return(*(NCURSES_BOOL *)0); }
#undef is_wintouched
NCURSES_BOOL is_wintouched(
WINDOW *win)
{ return(*(NCURSES_BOOL *)0); }
#undef wtouchln
int wtouchln(
WINDOW *win,
int y,
int n,
int changed)
{ return(*(int *)0); }
/* ./trace/lib_tracedmp.c */
#undef _tracedump
void _tracedump(
const char *name,
WINDOW *win)
{ /* void */ }
/* ./trace/lib_tracemse.c */
#undef _nc_trace_mmask_t
char *_nc_trace_mmask_t(
SCREEN *sp,
mmask_t code)
{ return(*(char **)0); }
#undef _nc_tracemouse
char *_nc_tracemouse(
SCREEN *sp,
MEVENT const *ep)
{ return(*(char **)0); }
#undef _nc_retrace_mmask_t
mmask_t _nc_retrace_mmask_t(
SCREEN *sp,
mmask_t code)
{ return(*(mmask_t *)0); }
#undef _tracemouse
char *_tracemouse(
MEVENT const *ep)
{ return(*(char **)0); }
/* ./tty/lib_tstp.c */
#undef _nc_signal_handler
void _nc_signal_handler(
int enable)
{ /* void */ }
/* ./base/lib_ungetch.c */
#undef _nc_fifo_dump
void _nc_fifo_dump(
SCREEN *sp)
{ /* void */ }
#undef ungetch_sp
int ungetch_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef ungetch
int ungetch(
int ch)
{ return(*(int *)0); }
/* ./tty/lib_vidattr.c */
#undef vidputs_sp
int vidputs_sp(
SCREEN *sp,
chtype newmode,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef vidputs
int vidputs(
chtype newmode,
NCURSES_OUTC outc)
{ return(*(int *)0); }
#undef vidattr_sp
int vidattr_sp(
SCREEN *sp,
chtype newmode)
{ return(*(int *)0); }
#undef vidattr
int vidattr(
chtype newmode)
{ return(*(int *)0); }
#undef termattrs_sp
chtype termattrs_sp(
SCREEN *sp)
{ return(*(chtype *)0); }
#undef termattrs
chtype termattrs(void)
{ return(*(chtype *)0); }
/* ./base/lib_vline.c */
#undef wvline
int wvline(
WINDOW *win,
chtype ch,
int n)
{ return(*(int *)0); }
/* ./base/lib_wattroff.c */
#undef wattr_off
int wattr_off(
WINDOW *win,
attr_t at,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_wattron.c */
#undef wattr_on
int wattr_on(
WINDOW *win,
attr_t at,
void *opts)
{ return(*(int *)0); }
/* ./base/lib_winch.c */
#undef winch
chtype winch(
WINDOW *win)
{ return(*(chtype *)0); }
/* ./base/lib_window.c */
#undef _nc_synchook
void _nc_synchook(
WINDOW *win)
{ /* void */ }
#undef mvderwin
int mvderwin(
WINDOW *win,
int y,
int x)
{ return(*(int *)0); }
#undef syncok
int syncok(
WINDOW *win,
NCURSES_BOOL bf)
{ return(*(int *)0); }
#undef wsyncup
void wsyncup(
WINDOW *win)
{ /* void */ }
#undef wsyncdown
void wsyncdown(
WINDOW *win)
{ /* void */ }
#undef wcursyncup
void wcursyncup(
WINDOW *win)
{ /* void */ }
#undef dupwin
WINDOW *dupwin(
WINDOW *win)
{ return(*(WINDOW **)0); }
/* ./base/nc_panel.c */
#undef _nc_panelhook_sp
struct panelhook *_nc_panelhook_sp(
SCREEN *sp)
{ return(*(struct panelhook **)0); }
#undef _nc_panelhook
struct panelhook *_nc_panelhook(void)
{ return(*(struct panelhook **)0); }
/* ./base/safe_sprintf.c */
#undef _nc_printf_string_sp
char *_nc_printf_string_sp(
SCREEN *sp,
const char *fmt,
va_list ap)
{ return(*(char **)0); }
#undef _nc_printf_string
char *_nc_printf_string(
const char *fmt,
va_list ap)
{ return(*(char **)0); }
/* ./tty/tty_update.c */
#undef doupdate_sp
int doupdate_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef doupdate
int doupdate(void)
{ return(*(int *)0); }
#undef _nc_scrolln_sp
int _nc_scrolln_sp(
SCREEN *sp,
int n,
int top,
int bot,
int maxy)
{ return(*(int *)0); }
#undef _nc_scrolln
int _nc_scrolln(
int n,
int top,
int bot,
int maxy)
{ return(*(int *)0); }
#undef _nc_screen_resume_sp
void _nc_screen_resume_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_screen_resume
void _nc_screen_resume(void)
{ /* void */ }
#undef _nc_screen_init_sp
void _nc_screen_init_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_screen_init
void _nc_screen_init(void)
{ /* void */ }
#undef _nc_screen_wrap_sp
void _nc_screen_wrap_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_screen_wrap
void _nc_screen_wrap(void)
{ /* void */ }
#undef _nc_do_xmc_glitch_sp
void _nc_do_xmc_glitch_sp(
SCREEN *sp,
attr_t previous)
{ /* void */ }
#undef _nc_do_xmc_glitch
void _nc_do_xmc_glitch(
attr_t previous)
{ /* void */ }
/* ./trace/varargs.c */
#undef _nc_varargs
char *_nc_varargs(
const char *fmt,
va_list ap)
{ return(*(char **)0); }
/* ./base/vsscanf.c */
#undef _nc_vsscanf
void _nc_vsscanf(void)
{ /* void */ }
/* ./base/lib_freeall.c */
#undef _nc_freeall
void _nc_freeall(void)
{ /* void */ }
#undef _nc_free_and_exit_sp
void _nc_free_and_exit_sp(
SCREEN *sp,
int code)
{ /* void */ }
#undef _nc_free_and_exit
void _nc_free_and_exit(
int code)
{ /* void */ }
#undef exit_curses
void exit_curses(
int code)
{ /* void */ }
/* ./widechar/charable.c */
#undef _nc_is_charable
NCURSES_BOOL _nc_is_charable(
wchar_t ch)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_to_char
int _nc_to_char(
wint_t ch)
{ return(*(int *)0); }
#undef _nc_to_widechar
wint_t _nc_to_widechar(
int ch)
{ return(*(wint_t *)0); }
/* ./widechar/lib_add_wch.c */
#undef wadd_wch
int wadd_wch(
WINDOW *win,
const cchar_t *wch)
{ return(*(int *)0); }
#undef wecho_wchar
int wecho_wchar(
WINDOW *win,
const cchar_t *wch)
{ return(*(int *)0); }
/* ./widechar/lib_box_set.c */
#undef wborder_set
int wborder_set(
WINDOW *win,
const cchar_t *ls,
const cchar_t *rs,
const cchar_t *ts,
const cchar_t *bs,
const cchar_t *tl,
const cchar_t *tr,
const cchar_t *bl,
const cchar_t *br)
{ return(*(int *)0); }
/* ./widechar/lib_cchar.c */
#undef setcchar
int setcchar(
cchar_t *wcval,
const wchar_t *wch,
const attr_t attrs,
short pair_arg,
const void *opts)
{ return(*(int *)0); }
#undef getcchar
int getcchar(
const cchar_t *wcval,
wchar_t *wch,
attr_t *attrs,
short *pair_arg,
void *opts)
{ return(*(int *)0); }
/* ./widechar/lib_erasewchar.c */
#undef erasewchar
int erasewchar(
wchar_t *wch)
{ return(*(int *)0); }
#undef killwchar
int killwchar(
wchar_t *wch)
{ return(*(int *)0); }
/* ./widechar/lib_get_wch.c */
#undef wget_wch
int wget_wch(
WINDOW *win,
wint_t *result)
{ return(*(int *)0); }
/* ./widechar/lib_get_wstr.c */
#undef wgetn_wstr
int wgetn_wstr(
WINDOW *win,
wint_t *str,
int maxlen)
{ return(*(int *)0); }
/* ./widechar/lib_hline_set.c */
#undef whline_set
int whline_set(
WINDOW *win,
const cchar_t *ch,
int n)
{ return(*(int *)0); }
/* ./widechar/lib_in_wch.c */
#undef win_wch
int win_wch(
WINDOW *win,
cchar_t *wcval)
{ return(*(int *)0); }
/* ./widechar/lib_in_wchnstr.c */
#undef win_wchnstr
int win_wchnstr(
WINDOW *win,
cchar_t *wchstr,
int n)
{ return(*(int *)0); }
/* ./widechar/lib_ins_wch.c */
#undef _nc_insert_wch
int _nc_insert_wch(
WINDOW *win,
const cchar_t *wch)
{ return(*(int *)0); }
#undef wins_wch
int wins_wch(
WINDOW *win,
const cchar_t *wch)
{ return(*(int *)0); }
#undef wins_nwstr
int wins_nwstr(
WINDOW *win,
const wchar_t *wstr,
int n)
{ return(*(int *)0); }
/* ./widechar/lib_inwstr.c */
#undef winnwstr
int winnwstr(
WINDOW *win,
wchar_t *wstr,
int n)
{ return(*(int *)0); }
#undef winwstr
int winwstr(
WINDOW *win,
wchar_t *wstr)
{ return(*(int *)0); }
/* ./widechar/lib_key_name.c */
#undef key_name
const char *key_name(
wchar_t c)
{ return(*(const char **)0); }
/* ./widechar/lib_pecho_wchar.c */
#undef pecho_wchar
int pecho_wchar(
WINDOW *pad,
const cchar_t *wch)
{ return(*(int *)0); }
/* ./widechar/lib_slk_wset.c */
#undef slk_wset
int slk_wset(
int i,
const wchar_t *astr,
int format)
{ return(*(int *)0); }
/* ./widechar/lib_unget_wch.c */
#undef _nc_wcrtomb
size_t _nc_wcrtomb(
char *target,
wchar_t source,
mbstate_t *state)
{ return(*(size_t *)0); }
#undef unget_wch_sp
int unget_wch_sp(
SCREEN *sp,
const wchar_t wch)
{ return(*(int *)0); }
#undef unget_wch
int unget_wch(
const wchar_t wch)
{ return(*(int *)0); }
/* ./widechar/lib_vid_attr.c */
#undef vid_puts_sp
int vid_puts_sp(
SCREEN *sp,
attr_t newmode,
short pair_arg,
void *opts,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef vid_puts
int vid_puts(
attr_t newmode,
short pair_arg,
void *opts,
NCURSES_OUTC outc)
{ return(*(int *)0); }
#undef vid_attr_sp
int vid_attr_sp(
SCREEN *sp,
attr_t newmode,
short pair_arg,
void *opts)
{ return(*(int *)0); }
#undef vid_attr
int vid_attr(
attr_t newmode,
short pair_arg,
void *opts)
{ return(*(int *)0); }
#undef term_attrs_sp
attr_t term_attrs_sp(
SCREEN *sp)
{ return(*(attr_t *)0); }
#undef term_attrs
attr_t term_attrs(void)
{ return(*(attr_t *)0); }
/* ./widechar/lib_vline_set.c */
#undef wvline_set
int wvline_set(
WINDOW *win,
const cchar_t *ch,
int n)
{ return(*(int *)0); }
/* ./widechar/lib_wacs.c */
#undef _nc_wacs
cchar_t *_nc_wacs;
#undef _nc_init_wacs
void _nc_init_wacs(void)
{ /* void */ }
/* ./widechar/lib_wunctrl.c */
#undef wunctrl_sp
wchar_t *wunctrl_sp(
SCREEN *sp,
cchar_t *wc)
{ return(*(wchar_t **)0); }
#undef wunctrl
wchar_t *wunctrl(
cchar_t *wc)
{ return(*(wchar_t **)0); }
/* ./expanded.c */
#undef _nc_toggle_attr_on
void _nc_toggle_attr_on(
attr_t *S,
attr_t at)
{ /* void */ }
#undef _nc_toggle_attr_off
void _nc_toggle_attr_off(
attr_t *S,
attr_t at)
{ /* void */ }
#undef _nc_DelCharCost_sp
int _nc_DelCharCost_sp(
SCREEN *sp,
int count)
{ return(*(int *)0); }
#undef _nc_InsCharCost_sp
int _nc_InsCharCost_sp(
SCREEN *sp,
int count)
{ return(*(int *)0); }
#undef _nc_UpdateAttrs_sp
void _nc_UpdateAttrs_sp(
SCREEN *sp,
const cchar_t *c)
{ /* void */ }
#undef _nc_DelCharCost
int _nc_DelCharCost(
int count)
{ return(*(int *)0); }
#undef _nc_InsCharCost
int _nc_InsCharCost(
int count)
{ return(*(int *)0); }
#undef _nc_UpdateAttrs
void _nc_UpdateAttrs(
const cchar_t *c)
{ /* void */ }
/* ./base/legacy_coding.c */
#undef use_legacy_coding_sp
int use_legacy_coding_sp(
SCREEN *sp,
int level)
{ return(*(int *)0); }
#undef use_legacy_coding
int use_legacy_coding(
int level)
{ return(*(int *)0); }
/* ./base/lib_dft_fgbg.c */
#undef use_default_colors_sp
int use_default_colors_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef use_default_colors
int use_default_colors(void)
{ return(*(int *)0); }
#undef assume_default_colors_sp
int assume_default_colors_sp(
SCREEN *sp,
int fg,
int bg)
{ return(*(int *)0); }
#undef assume_default_colors
int assume_default_colors(
int fg,
int bg)
{ return(*(int *)0); }
/* ./tinfo/lib_print.c */
#undef mcprint_sp
int mcprint_sp(
SCREEN *sp,
char *data,
int len)
{ return(*(int *)0); }
#undef mcprint
int mcprint(
char *data,
int len)
{ return(*(int *)0); }
/* ./base/new_pair.c */
#undef _nc_free_ordered_pairs
void _nc_free_ordered_pairs(
SCREEN *sp)
{ /* void */ }
#undef _nc_reset_color_pair
void _nc_reset_color_pair(
SCREEN *sp,
int pair,
colorpair_t *next)
{ /* void */ }
#undef _nc_set_color_pair
void _nc_set_color_pair(
SCREEN *sp,
int pair,
int mode)
{ /* void */ }
#undef _nc_copy_pairs
void _nc_copy_pairs(
SCREEN *sp,
colorpair_t *target,
colorpair_t *source,
int length)
{ /* void */ }
#undef alloc_pair_sp
int alloc_pair_sp(
SCREEN *sp,
int fg,
int bg)
{ return(*(int *)0); }
#undef find_pair_sp
int find_pair_sp(
SCREEN *sp,
int fg,
int bg)
{ return(*(int *)0); }
#undef free_pair_sp
int free_pair_sp(
SCREEN *sp,
int pair)
{ return(*(int *)0); }
#undef alloc_pair
int alloc_pair(
int f,
int b)
{ return(*(int *)0); }
#undef find_pair
int find_pair(
int f,
int b)
{ return(*(int *)0); }
#undef free_pair
int free_pair(
int pair)
{ return(*(int *)0); }
/* ./base/resizeterm.c */
#undef is_term_resized_sp
NCURSES_BOOL is_term_resized_sp(
SCREEN *sp,
int ToLines,
int ToCols)
{ return(*(NCURSES_BOOL *)0); }
#undef is_term_resized
NCURSES_BOOL is_term_resized(
int ToLines,
int ToCols)
{ return(*(NCURSES_BOOL *)0); }
#undef resize_term_sp
int resize_term_sp(
SCREEN *sp,
int ToLines,
int ToCols)
{ return(*(int *)0); }
#undef resize_term
int resize_term(
int ToLines,
int ToCols)
{ return(*(int *)0); }
#undef resizeterm_sp
int resizeterm_sp(
SCREEN *sp,
int ToLines,
int ToCols)
{ return(*(int *)0); }
#undef resizeterm
int resizeterm(
int ToLines,
int ToCols)
{ return(*(int *)0); }
/* ./trace/trace_xnames.c */
#undef _nc_trace_xnames
void _nc_trace_xnames(
TERMTYPE *tp)
{ /* void */ }
/* ./tinfo/use_screen.c */
#undef use_screen
int use_screen(
SCREEN *screen,
NCURSES_SCREEN_CB func,
void *data)
{ return(*(int *)0); }
/* ./base/use_window.c */
#undef use_window
int use_window(
WINDOW *win,
NCURSES_WINDOW_CB func,
void *data)
{ return(*(int *)0); }
/* ./base/wresize.c */
#undef wresize
int wresize(
WINDOW *win,
int ToLines,
int ToCols)
{ return(*(int *)0); }
/* ./tinfo/access.c */
#undef _nc_rootname
char *_nc_rootname(
char *path)
{ return(*(char **)0); }
#undef _nc_is_abs_path
NCURSES_BOOL _nc_is_abs_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_pathlast
unsigned _nc_pathlast(
const char *path)
{ return(*(unsigned *)0); }
#undef _nc_basename
char *_nc_basename(
char *path)
{ return(*(char **)0); }
#undef _nc_access
int _nc_access(
const char *path,
int mode)
{ return(*(int *)0); }
#undef _nc_is_dir_path
NCURSES_BOOL _nc_is_dir_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_is_file_path
NCURSES_BOOL _nc_is_file_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_env_access
int _nc_env_access(void)
{ return(*(int *)0); }
/* ./tinfo/add_tries.c */
#undef _nc_add_to_try
int _nc_add_to_try(
TRIES **tree,
const char *str,
unsigned code)
{ return(*(int *)0); }
/* ./tinfo/alloc_ttype.c */
#undef _nc_align_termtype
void _nc_align_termtype(
TERMTYPE2 *to,
TERMTYPE2 *from)
{ /* void */ }
#undef _nc_copy_termtype
void _nc_copy_termtype(
TERMTYPE *dst,
const TERMTYPE *src)
{ /* void */ }
#undef _nc_copy_termtype2
void _nc_copy_termtype2(
TERMTYPE2 *dst,
const TERMTYPE2 *src)
{ /* void */ }
#undef _nc_export_termtype2
void _nc_export_termtype2(
TERMTYPE *dst,
const TERMTYPE2 *src)
{ /* void */ }
/* ./codes.c */
#undef boolcodes
const char *const boolcodes[] = {0};
#undef numcodes
const char *const numcodes[] = {0};
#undef strcodes
const char *const strcodes[] = {0};
/* ./comp_captab.c */
#undef _nc_get_table
const struct name_table_entry *_nc_get_table(
NCURSES_BOOL termcap)
{ return(*(const struct name_table_entry **)0); }
#undef _nc_get_hash_table
const HashValue *_nc_get_hash_table(
NCURSES_BOOL termcap)
{ return(*(const HashValue **)0); }
#undef _nc_get_alias_table
const struct alias *_nc_get_alias_table(
NCURSES_BOOL termcap)
{ return(*(const struct alias **)0); }
#undef _nc_get_hash_info
const HashData *_nc_get_hash_info(
NCURSES_BOOL termcap)
{ return(*(const HashData **)0); }
/* ./tinfo/comp_error.c */
#undef _nc_suppress_warnings
NCURSES_BOOL _nc_suppress_warnings;
#undef _nc_curr_line
int _nc_curr_line;
#undef _nc_curr_col
int _nc_curr_col;
#undef _nc_get_source
const char *_nc_get_source(void)
{ return(*(const char **)0); }
#undef _nc_set_source
void _nc_set_source(
const char *const name)
{ /* void */ }
#undef _nc_set_type
void _nc_set_type(
const char *const name)
{ /* void */ }
#undef _nc_get_type
void _nc_get_type(
char *name)
{ /* void */ }
#undef _nc_warning
void _nc_warning(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_err_abort
void _nc_err_abort(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_syserr_abort
void _nc_syserr_abort(
const char *const fmt,
...)
{ /* void */ }
/* ./tinfo/comp_hash.c */
#undef _nc_find_entry
struct name_table_entry const *_nc_find_entry(
const char *string,
const HashValue *hash_table)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_type_entry
struct name_table_entry const *_nc_find_type_entry(
const char *string,
int type,
NCURSES_BOOL termcap)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_user_entry
struct user_table_entry const *_nc_find_user_entry(
const char *string)
{ return(*(struct user_table_entry const **)0); }
/* ./comp_userdefs.c */
#undef _nc_get_userdefs_table
const struct user_table_entry *_nc_get_userdefs_table(void)
{ return(*(const struct user_table_entry **)0); }
#undef _nc_get_hash_user
const HashData *_nc_get_hash_user(void)
{ return(*(const HashData **)0); }
/* ./tinfo/db_iterator.c */
#undef _nc_tic_dir
const char *_nc_tic_dir(
const char *path)
{ return(*(const char **)0); }
#undef _nc_keep_tic_dir
void _nc_keep_tic_dir(
const char *path)
{ /* void */ }
#undef _nc_last_db
void _nc_last_db(void)
{ /* void */ }
#undef _nc_next_db
const char *_nc_next_db(
DBDIRS *state,
int *offset)
{ return(*(const char **)0); }
#undef _nc_first_db
void _nc_first_db(
DBDIRS *state,
int *offset)
{ /* void */ }
/* ./tinfo/doalloc.c */
#undef _nc_doalloc
void *_nc_doalloc(
void *oldp,
size_t amount)
{ return(*(void **)0); }
/* ./tinfo/entries.c */
#undef _nc_head
ENTRY *_nc_head;
#undef _nc_tail
ENTRY *_nc_tail;
#undef _nc_free_entry
void _nc_free_entry(
ENTRY *headp,
TERMTYPE2 *tterm)
{ /* void */ }
#undef _nc_free_entries
void _nc_free_entries(
ENTRY *headp)
{ /* void */ }
#undef _nc_leaks_tinfo
void _nc_leaks_tinfo(void)
{ /* void */ }
#undef exit_terminfo
void exit_terminfo(
int code)
{ /* void */ }
/* ./fallback.c */
#undef _nc_fallback2
const TERMTYPE2 *_nc_fallback2(
const char *name)
{ return(*(const TERMTYPE2 **)0); }
#undef _nc_fallback
const TERMTYPE *_nc_fallback(
const char *name)
{ return(*(const TERMTYPE **)0); }
/* ./tinfo/free_ttype.c */
#undef _nc_free_termtype
void _nc_free_termtype(
TERMTYPE *ptr)
{ /* void */ }
#undef _nc_free_termtype2
void _nc_free_termtype2(
TERMTYPE2 *ptr)
{ /* void */ }
#undef _nc_user_definable
NCURSES_BOOL _nc_user_definable;
#undef use_extended_names
int use_extended_names(
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/getenv_num.c */
#undef _nc_getenv_num
int _nc_getenv_num(
const char *name)
{ return(*(int *)0); }
#undef _nc_setenv_num
void _nc_setenv_num(
const char *name,
int value)
{ /* void */ }
/* ./tinfo/home_terminfo.c */
#undef _nc_home_terminfo
char *_nc_home_terminfo(void)
{ return(*(char **)0); }
/* ./tinfo/init_keytry.c */
#undef _nc_init_keytry
void _nc_init_keytry(
SCREEN *sp)
{ /* void */ }
/* ./tinfo/lib_acs.c */
#undef acs_map
chtype acs_map[128];
#undef _nc_init_acs_sp
void _nc_init_acs_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_init_acs
void _nc_init_acs(void)
{ /* void */ }
/* ./tinfo/lib_baudrate.c */
struct speed {
int given_speed;
int actual_speed;
};
#undef _nc_baudrate
int _nc_baudrate(
int OSpeed)
{ return(*(int *)0); }
#undef _nc_ospeed
int _nc_ospeed(
int BaudRate)
{ return(*(int *)0); }
#undef baudrate_sp
int baudrate_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef baudrate
int baudrate(void)
{ return(*(int *)0); }
/* ./tinfo/lib_cur_term.c */
#undef cur_term
TERMINAL *cur_term;
#undef set_curterm_sp
TERMINAL *set_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef set_curterm
TERMINAL *set_curterm(
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef del_curterm_sp
int del_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(int *)0); }
#undef del_curterm
int del_curterm(
TERMINAL *termp)
{ return(*(int *)0); }
/* ./tinfo/lib_data.c */
#undef stdscr
WINDOW *stdscr;
#undef curscr
WINDOW *curscr;
#undef newscr
WINDOW *newscr;
#undef _nc_screen_chain
SCREEN *_nc_screen_chain;
#undef SP
SCREEN *SP;
#undef _nc_globals
NCURSES_GLOBALS _nc_globals;
#undef _nc_prescreen
NCURSES_PRESCREEN _nc_prescreen;
#undef _nc_screen_of
SCREEN *_nc_screen_of(
WINDOW *win)
{ return(*(SCREEN **)0); }
/* ./tinfo/lib_has_cap.c */
#undef has_ic_sp
NCURSES_BOOL has_ic_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_ic
NCURSES_BOOL has_ic(void)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il_sp
NCURSES_BOOL has_il_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il
NCURSES_BOOL has_il(void)
{ return(*(NCURSES_BOOL *)0); }
/* ./tinfo/lib_kernel.c */
#undef erasechar_sp
char erasechar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef erasechar
char erasechar(void)
{ return(*(char *)0); }
#undef killchar_sp
char killchar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef killchar
char killchar(void)
{ return(*(char *)0); }
#undef flushinp_sp
int flushinp_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef flushinp
int flushinp(void)
{ return(*(int *)0); }
/* ./lib_keyname.c */
struct kn { short offset; int code; };
#undef keyname_sp
const char *keyname_sp(
SCREEN *sp,
int c)
{ return(*(const char **)0); }
#undef keyname
const char *keyname(
int c)
{ return(*(const char **)0); }
/* ./tinfo/lib_longname.c */
#undef longname_sp
char *longname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef longname
char *longname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_napms.c */
#undef napms_sp
int napms_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef napms
int napms(
int ms)
{ return(*(int *)0); }
/* ./tinfo/lib_options.c */
#undef idlok
int idlok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef idcok
void idcok(
WINDOW *win,
NCURSES_BOOL flag)
{ /* void */ }
#undef halfdelay_sp
int halfdelay_sp(
SCREEN *sp,
int t)
{ return(*(int *)0); }
#undef halfdelay
int halfdelay(
int t)
{ return(*(int *)0); }
#undef nodelay
int nodelay(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef notimeout
int notimeout(
WINDOW *win,
NCURSES_BOOL f)
{ return(*(int *)0); }
#undef wtimeout
void wtimeout(
WINDOW *win,
int delay)
{ /* void */ }
#undef keypad
int keypad(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef meta
int meta(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef curs_set_sp
int curs_set_sp(
SCREEN *sp,
int vis)
{ return(*(int *)0); }
#undef curs_set
int curs_set(
int vis)
{ return(*(int *)0); }
#undef typeahead_sp
int typeahead_sp(
SCREEN *sp,
int fd)
{ return(*(int *)0); }
#undef typeahead
int typeahead(
int fd)
{ return(*(int *)0); }
#undef has_key_sp
int has_key_sp(
SCREEN *sp,
int keycode)
{ return(*(int *)0); }
#undef has_key
int has_key(
int keycode)
{ return(*(int *)0); }
#undef _nc_putp_flush_sp
int _nc_putp_flush_sp(
SCREEN *sp,
const char *name,
const char *value)
{ return(*(int *)0); }
#undef _nc_keypad
int _nc_keypad(
SCREEN *sp,
int flag)
{ return(*(int *)0); }
/* ./tinfo/lib_raw.c */
#undef raw_sp
int raw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef raw
int raw(void)
{ return(*(int *)0); }
#undef cbreak_sp
int cbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef cbreak
int cbreak(void)
{ return(*(int *)0); }
#undef qiflush_sp
void qiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef qiflush
void qiflush(void)
{ /* void */ }
#undef noraw_sp
int noraw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef noraw
int noraw(void)
{ return(*(int *)0); }
#undef nocbreak_sp
int nocbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nocbreak
int nocbreak(void)
{ return(*(int *)0); }
#undef noqiflush_sp
void noqiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef noqiflush
void noqiflush(void)
{ /* void */ }
#undef intrflush_sp
int intrflush_sp(
SCREEN *sp,
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef intrflush
int intrflush(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/lib_setup.c */
#undef ttytype
char ttytype[256];
#undef LINES
int LINES;
#undef COLS
int COLS;
#undef TABSIZE
int TABSIZE;
#undef set_tabsize_sp
int set_tabsize_sp(
SCREEN *sp,
int value)
{ return(*(int *)0); }
#undef set_tabsize
int set_tabsize(
int value)
{ return(*(int *)0); }
#undef _nc_handle_sigwinch
int _nc_handle_sigwinch(
SCREEN *sp)
{ return(*(int *)0); }
#undef use_env_sp
void use_env_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl_sp
void use_tioctl_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_env
void use_env(
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl
void use_tioctl(
NCURSES_BOOL f)
{ /* void */ }
#undef _nc_get_screensize
void _nc_get_screensize(
SCREEN *sp,
int *linep,
int *colp)
{ /* void */ }
#undef _nc_update_screensize
void _nc_update_screensize(
SCREEN *sp)
{ /* void */ }
#undef _nc_setup_tinfo
int _nc_setup_tinfo(
const char *const tn,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
#undef _nc_tinfo_cmdch
void _nc_tinfo_cmdch(
TERMINAL *termp,
int proto)
{ /* void */ }
#undef _nc_get_locale
char *_nc_get_locale(void)
{ return(*(char **)0); }
#undef _nc_unicode_locale
int _nc_unicode_locale(void)
{ return(*(int *)0); }
#undef _nc_locale_breaks_acs
int _nc_locale_breaks_acs(
TERMINAL *termp)
{ return(*(int *)0); }
#undef _nc_setupterm
int _nc_setupterm(
const char *tname,
int Filedes,
int *errret,
int reuse)
{ return(*(int *)0); }
#undef new_prescr
SCREEN *new_prescr(void)
{ return(*(SCREEN **)0); }
#undef setupterm
int setupterm(
const char *tname,
int Filedes,
int *errret)
{ return(*(int *)0); }
/* ./tinfo/lib_termcap.c */
#undef UP
char *UP;
#undef BC
char *BC;
#undef tgetent_sp
int tgetent_sp(
SCREEN *sp,
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetent
int tgetent(
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetflag_sp
int tgetflag_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetflag
int tgetflag(
const char *id)
{ return(*(int *)0); }
#undef tgetnum_sp
int tgetnum_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetnum
int tgetnum(
const char *id)
{ return(*(int *)0); }
#undef tgetstr_sp
char *tgetstr_sp(
SCREEN *sp,
const char *id,
char **area)
{ return(*(char **)0); }
#undef tgetstr
char *tgetstr(
const char *id,
char **area)
{ return(*(char **)0); }
/* ./tinfo/lib_termname.c */
#undef termname_sp
char *termname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef termname
char *termname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_tgoto.c */
#undef tgoto
char *tgoto(
const char *string,
int x,
int y)
{ return(*(char **)0); }
/* ./tinfo/lib_ti.c */
#undef tigetflag_sp
int tigetflag_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetflag
int tigetflag(
const char *str)
{ return(*(int *)0); }
#undef tigetnum_sp
int tigetnum_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetnum
int tigetnum(
const char *str)
{ return(*(int *)0); }
#undef tigetstr_sp
char *tigetstr_sp(
SCREEN *sp,
const char *str)
{ return(*(char **)0); }
#undef tigetstr
char *tigetstr(
const char *str)
{ return(*(char **)0); }
/* ./tinfo/lib_tparm.c */
#undef _nc_tparm_err
int _nc_tparm_err;
#undef _nc_tparm_analyze
int _nc_tparm_analyze(
const char *string,
char *p_is_s[9],
int *_nc_popcount)
{ return(*(int *)0); }
#undef tparm
char *tparm(
const char *string,
...)
{ return(*(char **)0); }
#undef tiparm
char *tiparm(
const char *string,
...)
{ return(*(char **)0); }
+#undef _nc_tiparm
+char *_nc_tiparm(
+ int expected,
+ const char *string,
+ ...)
+ { return(*(char **)0); }
+
/* ./tinfo/lib_tputs.c */
#undef PC
char PC;
#undef ospeed
short ospeed;
#undef _nc_nulls_sent
int _nc_nulls_sent;
#undef _nc_set_no_padding
void _nc_set_no_padding(
SCREEN *sp)
{ /* void */ }
#undef delay_output_sp
int delay_output_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef delay_output
int delay_output(
int ms)
{ return(*(int *)0); }
#undef _nc_flush_sp
void _nc_flush_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_flush
void _nc_flush(void)
{ /* void */ }
#undef _nc_outch_sp
int _nc_outch_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_outch
int _nc_outch(
int ch)
{ return(*(int *)0); }
#undef _nc_putchar_sp
int _nc_putchar_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_putchar
int _nc_putchar(
int ch)
{ return(*(int *)0); }
#undef putp_sp
int putp_sp(
SCREEN *sp,
const char *string)
{ return(*(int *)0); }
#undef putp
int putp(
const char *string)
{ return(*(int *)0); }
#undef _nc_putp_sp
int _nc_putp_sp(
SCREEN *sp,
const char *name,
const char *string)
{ return(*(int *)0); }
#undef _nc_putp
int _nc_putp(
const char *name,
const char *string)
{ return(*(int *)0); }
#undef tputs_sp
int tputs_sp(
SCREEN *sp,
const char *string,
int affcnt,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef _nc_outc_wrapper
int _nc_outc_wrapper(
SCREEN *sp,
int c)
{ return(*(int *)0); }
#undef tputs
int tputs(
const char *string,
int affcnt,
int (*outc)(
int p1))
{ return(*(int *)0); }
/* ./trace/lib_trace.c */
#undef _nc_tracing
unsigned _nc_tracing;
#undef _nc_tputs_trace
const char *_nc_tputs_trace = {0};
#undef _nc_outchars
long _nc_outchars;
#undef curses_trace
unsigned curses_trace(
unsigned tracelevel)
{ return(*(unsigned *)0); }
#undef trace
void trace(
const unsigned int tracelevel)
{ /* void */ }
#undef _tracef
void _tracef(
const char *fmt,
...)
{ /* void */ }
#undef _nc_retrace_bool
NCURSES_BOOL _nc_retrace_bool(
int code)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_retrace_char
char _nc_retrace_char(
int code)
{ return(*(char *)0); }
#undef _nc_retrace_int
int _nc_retrace_int(
int code)
{ return(*(int *)0); }
#undef _nc_retrace_unsigned
unsigned _nc_retrace_unsigned(
unsigned code)
{ return(*(unsigned *)0); }
#undef _nc_retrace_ptr
char *_nc_retrace_ptr(
char *code)
{ return(*(char **)0); }
#undef _nc_retrace_cptr
const char *_nc_retrace_cptr(
const char *code)
{ return(*(const char **)0); }
#undef _nc_retrace_cvoid_ptr
const void *_nc_retrace_cvoid_ptr(
const void *code)
{ return(*(const void **)0); }
#undef _nc_retrace_void_ptr
void *_nc_retrace_void_ptr(
void *code)
{ return(*(void **)0); }
#undef _nc_retrace_sp
SCREEN *_nc_retrace_sp(
SCREEN *code)
{ return(*(SCREEN **)0); }
#undef _nc_retrace_win
WINDOW *_nc_retrace_win(
WINDOW *code)
{ return(*(WINDOW **)0); }
#undef _nc_fmt_funcptr
char *_nc_fmt_funcptr(
char *target,
const char *source,
size_t size)
{ return(*(char **)0); }
/* ./trace/lib_traceatr.c */
#undef _traceattr2
char *_traceattr2(
int bufnum,
chtype newmode)
{ return(*(char **)0); }
#undef _traceattr
char *_traceattr(
attr_t newmode)
{ return(*(char **)0); }
#undef _nc_retrace_int_attr_t
int _nc_retrace_int_attr_t(
attr_t code)
{ return(*(int *)0); }
#undef _nc_retrace_attr_t
attr_t _nc_retrace_attr_t(
attr_t code)
{ return(*(attr_t *)0); }
#undef _nc_altcharset_name
const char *_nc_altcharset_name(
attr_t attr,
chtype ch)
{ return(*(const char **)0); }
#undef _tracechtype2
char *_tracechtype2(
int bufnum,
chtype ch)
{ return(*(char **)0); }
#undef _tracechtype
char *_tracechtype(
chtype ch)
{ return(*(char **)0); }
#undef _nc_retrace_chtype
chtype _nc_retrace_chtype(
chtype code)
{ return(*(chtype *)0); }
#undef _tracecchar_t2
char *_tracecchar_t2(
int bufnum,
const cchar_t *ch)
{ return(*(char **)0); }
#undef _tracecchar_t
char *_tracecchar_t(
const cchar_t *ch)
{ return(*(char **)0); }
/* ./trace/lib_tracebits.c */
#undef _nc_trace_ttymode
char *_nc_trace_ttymode(
struct termios *tty)
{ return(*(char **)0); }
#undef _nc_tracebits
char *_nc_tracebits(void)
{ return(*(char **)0); }
/* ./trace/lib_tracechr.c */
#undef _nc_tracechar
char *_nc_tracechar(
SCREEN *sp,
int ch)
{ return(*(char **)0); }
#undef _tracechar
char *_tracechar(
int ch)
{ return(*(char **)0); }
/* ./tinfo/lib_ttyflags.c */
#undef _nc_get_tty_mode_sp
int _nc_get_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_get_tty_mode
int _nc_get_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode_sp
int _nc_set_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode
int _nc_set_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef def_shell_mode_sp
int def_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_shell_mode
int def_shell_mode(void)
{ return(*(int *)0); }
#undef def_prog_mode_sp
int def_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_prog_mode
int def_prog_mode(void)
{ return(*(int *)0); }
#undef reset_prog_mode_sp
int reset_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_prog_mode
int reset_prog_mode(void)
{ return(*(int *)0); }
#undef reset_shell_mode_sp
int reset_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_shell_mode
int reset_shell_mode(void)
{ return(*(int *)0); }
#undef savetty_sp
int savetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef savetty
int savetty(void)
{ return(*(int *)0); }
#undef resetty_sp
int resetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef resetty
int resetty(void)
{ return(*(int *)0); }
/* ./tty/lib_twait.c */
#undef _nc_timed_wait
int _nc_timed_wait(
SCREEN *sp,
int mode,
int milliseconds,
int *timeleft)
{ return(*(int *)0); }
/* ./tinfo/name_match.c */
#undef _nc_first_name
char *_nc_first_name(
const char *const sp)
{ return(*(char **)0); }
#undef _nc_name_match
int _nc_name_match(
const char *const namelst,
const char *const name,
const char *const delim)
{ return(*(int *)0); }
/* ./names.c */
#undef boolnames
const char *const boolnames[] = {0};
#undef boolfnames
const char *const boolfnames[] = {0};
#undef numnames
const char *const numnames[] = {0};
#undef numfnames
const char *const numfnames[] = {0};
#undef strnames
const char *const strnames[] = {0};
#undef strfnames
const char *const strfnames[] = {0};
/* ./tinfo/obsolete.c */
#undef _nc_set_buffer_sp
void _nc_set_buffer_sp(
SCREEN *sp,
FILE *ofp,
int buffered)
{ /* void */ }
#undef _nc_set_buffer
void _nc_set_buffer(
FILE *ofp,
int buffered)
{ /* void */ }
/* ./tinfo/read_entry.c */
#undef _nc_init_termtype
void _nc_init_termtype(
TERMTYPE2 *const tp)
{ /* void */ }
#undef _nc_read_termtype
int _nc_read_termtype(
TERMTYPE2 *ptr,
char *buffer,
int limit)
{ return(*(int *)0); }
#undef _nc_read_file_entry
int _nc_read_file_entry(
const char *const filename,
TERMTYPE2 *ptr)
{ return(*(int *)0); }
#undef _nc_read_entry2
int _nc_read_entry2(
const char *const name,
char *const filename,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
#undef _nc_read_entry
int _nc_read_entry(
const char *const name,
char *const filename,
TERMTYPE *const tp)
{ return(*(int *)0); }
/* ./tinfo/read_termcap.c */
#undef _nc_read_termcap_entry
int _nc_read_termcap_entry(
const char *const tn,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
/* ./tinfo/strings.c */
#undef _nc_str_init
string_desc *_nc_str_init(
string_desc *dst,
char *src,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_null
string_desc *_nc_str_null(
string_desc *dst,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_copy
string_desc *_nc_str_copy(
string_desc *dst,
string_desc *src)
{ return(*(string_desc **)0); }
#undef _nc_safe_strcat
NCURSES_BOOL _nc_safe_strcat(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_safe_strcpy
NCURSES_BOOL _nc_safe_strcpy(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
/* ./trace/trace_buf.c */
#undef _nc_trace_buf
char *_nc_trace_buf(
int bufnum,
size_t want)
{ return(*(char **)0); }
#undef _nc_trace_bufcat
char *_nc_trace_bufcat(
int bufnum,
const char *value)
{ return(*(char **)0); }
/* ./trace/trace_tries.c */
#undef _nc_trace_tries
void _nc_trace_tries(
TRIES *tree)
{ /* void */ }
/* ./base/tries.c */
#undef _nc_expand_try
char *_nc_expand_try(
TRIES *tree,
unsigned code,
int *count,
size_t len)
{ return(*(char **)0); }
#undef _nc_remove_key
int _nc_remove_key(
TRIES **tree,
unsigned code)
{ return(*(int *)0); }
#undef _nc_remove_string
int _nc_remove_string(
TRIES **tree,
const char *string)
{ return(*(int *)0); }
/* ./tinfo/trim_sgr0.c */
#undef _nc_trim_sgr0
char *_nc_trim_sgr0(
TERMTYPE2 *tp)
{ return(*(char **)0); }
/* ./unctrl.c */
#undef unctrl_sp
const char *unctrl_sp(
SCREEN *sp,
chtype ch)
{ return(*(const char **)0); }
#undef unctrl
const char *unctrl(
chtype ch)
{ return(*(const char **)0); }
/* ./trace/visbuf.c */
#undef _nc_visbuf2
const char *_nc_visbuf2(
int bufnum,
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbuf
const char *_nc_visbuf(
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbufn
const char *_nc_visbufn(
const char *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viswbuf2
const char *_nc_viswbuf2(
int bufnum,
const wchar_t *buf)
{ return(*(const char **)0); }
#undef _nc_viswbuf
const char *_nc_viswbuf(
const wchar_t *buf)
{ return(*(const char **)0); }
#undef _nc_viswbufn
const char *_nc_viswbufn(
const wchar_t *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viswibuf
const char *_nc_viswibuf(
const wint_t *buf)
{ return(*(const char **)0); }
#undef _nc_viscbuf2
const char *_nc_viscbuf2(
int bufnum,
const cchar_t *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viscbuf
const char *_nc_viscbuf(
const cchar_t *buf,
int len)
{ return(*(const char **)0); }
/* ./tinfo/alloc_entry.c */
#undef _nc_init_entry
void _nc_init_entry(
ENTRY *const tp)
{ /* void */ }
#undef _nc_copy_entry
ENTRY *_nc_copy_entry(
ENTRY *oldp)
{ return(*(ENTRY **)0); }
#undef _nc_save_str
char *_nc_save_str(
const char *const string)
{ return(*(char **)0); }
#undef _nc_wrap_entry
void _nc_wrap_entry(
ENTRY *const ep,
NCURSES_BOOL copy_strings)
{ /* void */ }
#undef _nc_merge_entry
void _nc_merge_entry(
ENTRY *const target,
ENTRY *const source)
{ /* void */ }
/* ./tinfo/captoinfo.c */
#undef _nc_captoinfo
char *_nc_captoinfo(
const char *cap,
const char *s,
int const parameterized)
{ return(*(char **)0); }
#undef _nc_infotocap
char *_nc_infotocap(
const char *cap,
const char *str,
int const parameterized)
{ return(*(char **)0); }
/* ./tinfo/comp_expand.c */
#undef _nc_tic_expand
char *_nc_tic_expand(
const char *srcp,
NCURSES_BOOL tic_format,
int numbers)
{ return(*(char **)0); }
/* ./tinfo/comp_parse.c */
#undef _nc_check_termtype2
void (*_nc_check_termtype2)(
TERMTYPE2 *p1,
NCURSES_BOOL p2);
#undef _nc_entry_match
NCURSES_BOOL _nc_entry_match(
char *n1,
char *n2)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_read_entry_source
void _nc_read_entry_source(
FILE *fp,
char *buf,
int literal,
NCURSES_BOOL silent,
NCURSES_BOOL (*hook)(
ENTRY *p1))
{ /* void */ }
#undef _nc_resolve_uses2
int _nc_resolve_uses2(
NCURSES_BOOL fullresolve,
NCURSES_BOOL literal)
{ return(*(int *)0); }
/* ./tinfo/comp_scan.c */
#undef _nc_syntax
int _nc_syntax;
#undef _nc_strict_bsd
int _nc_strict_bsd;
#undef _nc_curr_file_pos
long _nc_curr_file_pos;
#undef _nc_comment_start
long _nc_comment_start;
#undef _nc_comment_end
long _nc_comment_end;
#undef _nc_start_line
long _nc_start_line;
#undef _nc_curr_token
struct token _nc_curr_token;
#undef _nc_disable_period
NCURSES_BOOL _nc_disable_period;
#undef _nc_reset_input
void _nc_reset_input(
FILE *fp,
char *buf)
{ /* void */ }
#undef _nc_get_token
int _nc_get_token(
NCURSES_BOOL silent)
{ return(*(int *)0); }
#undef _nc_trans_string
int _nc_trans_string(
char *ptr,
char *last)
{ return(*(int *)0); }
#undef _nc_push_token
void _nc_push_token(
int tokclass)
{ /* void */ }
#undef _nc_panic_mode
void _nc_panic_mode(
char ch)
{ /* void */ }
/* ./tinfo/parse_entry.c */
#undef _nc_parse_entry
int _nc_parse_entry(
ENTRY *entryp,
int literal,
NCURSES_BOOL silent)
{ return(*(int *)0); }
#undef _nc_capcmp
int _nc_capcmp(
const char *s,
const char *t)
{ return(*(int *)0); }
/* ./tinfo/write_entry.c */
#undef _nc_set_writedir
void _nc_set_writedir(
const char *dir)
{ /* void */ }
#undef _nc_write_entry
void _nc_write_entry(
TERMTYPE2 *const tp)
{ /* void */ }
#undef _nc_write_object
int _nc_write_object(
TERMTYPE2 *tp,
char *buffer,
unsigned *offset,
unsigned limit)
{ return(*(int *)0); }
#undef _nc_tic_written
int _nc_tic_written(void)
{ return(*(int *)0); }
/* ./base/define_key.c */
#undef define_key_sp
int define_key_sp(
SCREEN *sp,
const char *str,
int keycode)
{ return(*(int *)0); }
#undef define_key
int define_key(
const char *str,
int keycode)
{ return(*(int *)0); }
/* ./tinfo/hashed_db.c */
#undef _nc_hashed_db
void _nc_hashed_db(void)
{ /* void */ }
/* ./base/key_defined.c */
#undef key_defined_sp
int key_defined_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef key_defined
int key_defined(
const char *str)
{ return(*(int *)0); }
/* ./base/keybound.c */
#undef keybound_sp
char *keybound_sp(
SCREEN *sp,
int code,
int count)
{ return(*(char **)0); }
#undef keybound
char *keybound(
int code,
int count)
{ return(*(char **)0); }
/* ./base/keyok.c */
#undef keyok_sp
int keyok_sp(
SCREEN *sp,
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef keyok
int keyok(
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/version.c */
#undef curses_version
const char *curses_version(void)
{ return(*(const char **)0); }
diff --git a/contrib/ncurses/ncurses/llib-ltinfo b/contrib/ncurses/ncurses/llib-ltinfo
index 27680cae5f33..b2160d4f66b7 100644
--- a/contrib/ncurses/ncurses/llib-ltinfo
+++ b/contrib/ncurses/ncurses/llib-ltinfo
@@ -1,1510 +1,1527 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 2012-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 2012-on *
****************************************************************************/
/* LINTLIBRARY */
/* ./tinfo/access.c */
#include <curses.priv.h>
#undef _nc_rootname
char *_nc_rootname(
char *path)
{ return(*(char **)0); }
#undef _nc_is_abs_path
NCURSES_BOOL _nc_is_abs_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_pathlast
unsigned _nc_pathlast(
const char *path)
{ return(*(unsigned *)0); }
#undef _nc_basename
char *_nc_basename(
char *path)
{ return(*(char **)0); }
#undef _nc_access
int _nc_access(
const char *path,
int mode)
{ return(*(int *)0); }
#undef _nc_is_dir_path
NCURSES_BOOL _nc_is_dir_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_is_file_path
NCURSES_BOOL _nc_is_file_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_env_access
int _nc_env_access(void)
{ return(*(int *)0); }
/* ./tinfo/add_tries.c */
#undef _nc_add_to_try
int _nc_add_to_try(
TRIES **tree,
const char *str,
unsigned code)
{ return(*(int *)0); }
/* ./tinfo/alloc_ttype.c */
#undef _nc_align_termtype
void _nc_align_termtype(
TERMTYPE2 *to,
TERMTYPE2 *from)
{ /* void */ }
#undef _nc_copy_termtype
void _nc_copy_termtype(
TERMTYPE *dst,
const TERMTYPE *src)
{ /* void */ }
/* ./codes.c */
#undef boolcodes
const char *const boolcodes[] = {0};
#undef numcodes
const char *const numcodes[] = {0};
#undef strcodes
const char *const strcodes[] = {0};
/* ./comp_captab.c */
#undef _nc_get_table
const struct name_table_entry *_nc_get_table(
NCURSES_BOOL termcap)
{ return(*(const struct name_table_entry **)0); }
#undef _nc_get_hash_table
const HashValue *_nc_get_hash_table(
NCURSES_BOOL termcap)
{ return(*(const HashValue **)0); }
#undef _nc_get_alias_table
const struct alias *_nc_get_alias_table(
NCURSES_BOOL termcap)
{ return(*(const struct alias **)0); }
#undef _nc_get_hash_info
const HashData *_nc_get_hash_info(
NCURSES_BOOL termcap)
{ return(*(const HashData **)0); }
/* ./tinfo/comp_error.c */
#undef _nc_suppress_warnings
NCURSES_BOOL _nc_suppress_warnings;
#undef _nc_curr_line
int _nc_curr_line;
#undef _nc_curr_col
int _nc_curr_col;
#undef _nc_get_source
const char *_nc_get_source(void)
{ return(*(const char **)0); }
#undef _nc_set_source
void _nc_set_source(
const char *const name)
{ /* void */ }
#undef _nc_set_type
void _nc_set_type(
const char *const name)
{ /* void */ }
#undef _nc_get_type
void _nc_get_type(
char *name)
{ /* void */ }
#undef _nc_warning
void _nc_warning(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_err_abort
void _nc_err_abort(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_syserr_abort
void _nc_syserr_abort(
const char *const fmt,
...)
{ /* void */ }
/* ./tinfo/comp_hash.c */
#undef _nc_find_entry
struct name_table_entry const *_nc_find_entry(
const char *string,
const HashValue *hash_table)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_type_entry
struct name_table_entry const *_nc_find_type_entry(
const char *string,
int type,
NCURSES_BOOL termcap)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_user_entry
struct user_table_entry const *_nc_find_user_entry(
const char *string)
{ return(*(struct user_table_entry const **)0); }
/* ./comp_userdefs.c */
#undef _nc_get_userdefs_table
const struct user_table_entry *_nc_get_userdefs_table(void)
{ return(*(const struct user_table_entry **)0); }
#undef _nc_get_hash_user
const HashData *_nc_get_hash_user(void)
{ return(*(const HashData **)0); }
/* ./tinfo/db_iterator.c */
#undef _nc_tic_dir
const char *_nc_tic_dir(
const char *path)
{ return(*(const char **)0); }
#undef _nc_keep_tic_dir
void _nc_keep_tic_dir(
const char *path)
{ /* void */ }
#undef _nc_last_db
void _nc_last_db(void)
{ /* void */ }
#undef _nc_next_db
const char *_nc_next_db(
DBDIRS *state,
int *offset)
{ return(*(const char **)0); }
#undef _nc_first_db
void _nc_first_db(
DBDIRS *state,
int *offset)
{ /* void */ }
/* ./tinfo/doalloc.c */
#undef _nc_doalloc
void *_nc_doalloc(
void *oldp,
size_t amount)
{ return(*(void **)0); }
/* ./tinfo/entries.c */
#undef _nc_head
ENTRY *_nc_head;
#undef _nc_tail
ENTRY *_nc_tail;
#undef _nc_free_entry
void _nc_free_entry(
ENTRY *headp,
TERMTYPE2 *tterm)
{ /* void */ }
#undef _nc_free_entries
void _nc_free_entries(
ENTRY *headp)
{ /* void */ }
#undef _nc_leaks_tinfo
void _nc_leaks_tinfo(void)
{ /* void */ }
+#undef exit_terminfo
+void exit_terminfo(
+ int code)
+ { /* void */ }
+
/* ./fallback.c */
#undef _nc_fallback
const TERMTYPE2 *_nc_fallback(
const char *name)
{ return(*(const TERMTYPE2 **)0); }
/* ./tinfo/free_ttype.c */
#undef _nc_free_termtype
void _nc_free_termtype(
TERMTYPE *ptr)
{ /* void */ }
#undef _nc_user_definable
NCURSES_BOOL _nc_user_definable;
#undef use_extended_names
int use_extended_names(
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/getenv_num.c */
#undef _nc_getenv_num
int _nc_getenv_num(
const char *name)
{ return(*(int *)0); }
#undef _nc_setenv_num
void _nc_setenv_num(
const char *name,
int value)
{ /* void */ }
/* ./tinfo/home_terminfo.c */
#undef _nc_home_terminfo
char *_nc_home_terminfo(void)
{ return(*(char **)0); }
/* ./tinfo/init_keytry.c */
#undef _nc_init_keytry
void _nc_init_keytry(
SCREEN *sp)
{ /* void */ }
/* ./tinfo/lib_acs.c */
#undef acs_map
chtype acs_map[128];
#undef _nc_init_acs_sp
void _nc_init_acs_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_init_acs
void _nc_init_acs(void)
{ /* void */ }
/* ./tinfo/lib_baudrate.c */
struct speed {
int given_speed;
int actual_speed;
};
#undef _nc_baudrate
int _nc_baudrate(
int OSpeed)
{ return(*(int *)0); }
#undef _nc_ospeed
int _nc_ospeed(
int BaudRate)
{ return(*(int *)0); }
#undef baudrate_sp
int baudrate_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef baudrate
int baudrate(void)
{ return(*(int *)0); }
/* ./tinfo/lib_cur_term.c */
#undef cur_term
TERMINAL *cur_term;
#undef set_curterm_sp
TERMINAL *set_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef set_curterm
TERMINAL *set_curterm(
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef del_curterm_sp
int del_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(int *)0); }
#undef del_curterm
int del_curterm(
TERMINAL *termp)
{ return(*(int *)0); }
/* ./tinfo/lib_data.c */
#undef stdscr
WINDOW *stdscr;
#undef curscr
WINDOW *curscr;
#undef newscr
WINDOW *newscr;
#undef _nc_screen_chain
SCREEN *_nc_screen_chain;
#undef SP
SCREEN *SP;
#undef _nc_globals
NCURSES_GLOBALS _nc_globals;
#undef _nc_prescreen
NCURSES_PRESCREEN _nc_prescreen;
#undef _nc_screen_of
SCREEN *_nc_screen_of(
WINDOW *win)
{ return(*(SCREEN **)0); }
/* ./tinfo/lib_has_cap.c */
#undef has_ic_sp
NCURSES_BOOL has_ic_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_ic
NCURSES_BOOL has_ic(void)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il_sp
NCURSES_BOOL has_il_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il
NCURSES_BOOL has_il(void)
{ return(*(NCURSES_BOOL *)0); }
/* ./tinfo/lib_kernel.c */
#undef erasechar_sp
char erasechar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef erasechar
char erasechar(void)
{ return(*(char *)0); }
#undef killchar_sp
char killchar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef killchar
char killchar(void)
{ return(*(char *)0); }
#undef flushinp_sp
int flushinp_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef flushinp
int flushinp(void)
{ return(*(int *)0); }
/* ./lib_keyname.c */
struct kn { short offset; int code; };
#undef keyname_sp
const char *keyname_sp(
SCREEN *sp,
int c)
{ return(*(const char **)0); }
#undef keyname
const char *keyname(
int c)
{ return(*(const char **)0); }
/* ./tinfo/lib_longname.c */
#undef longname_sp
char *longname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef longname
char *longname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_napms.c */
#undef napms_sp
int napms_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef napms
int napms(
int ms)
{ return(*(int *)0); }
/* ./tinfo/lib_options.c */
#undef idlok
int idlok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef idcok
void idcok(
WINDOW *win,
NCURSES_BOOL flag)
{ /* void */ }
#undef halfdelay_sp
int halfdelay_sp(
SCREEN *sp,
int t)
{ return(*(int *)0); }
#undef halfdelay
int halfdelay(
int t)
{ return(*(int *)0); }
#undef nodelay
int nodelay(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef notimeout
int notimeout(
WINDOW *win,
NCURSES_BOOL f)
{ return(*(int *)0); }
#undef wtimeout
void wtimeout(
WINDOW *win,
int delay)
{ /* void */ }
#undef keypad
int keypad(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef meta
int meta(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef curs_set_sp
int curs_set_sp(
SCREEN *sp,
int vis)
{ return(*(int *)0); }
#undef curs_set
int curs_set(
int vis)
{ return(*(int *)0); }
#undef typeahead_sp
int typeahead_sp(
SCREEN *sp,
int fd)
{ return(*(int *)0); }
#undef typeahead
int typeahead(
int fd)
{ return(*(int *)0); }
#undef has_key_sp
int has_key_sp(
SCREEN *sp,
int keycode)
{ return(*(int *)0); }
#undef has_key
int has_key(
int keycode)
{ return(*(int *)0); }
#undef _nc_putp_flush_sp
int _nc_putp_flush_sp(
SCREEN *sp,
const char *name,
const char *value)
{ return(*(int *)0); }
#undef _nc_keypad
int _nc_keypad(
SCREEN *sp,
int flag)
{ return(*(int *)0); }
/* ./tinfo/lib_raw.c */
#undef raw_sp
int raw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef raw
int raw(void)
{ return(*(int *)0); }
#undef cbreak_sp
int cbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef cbreak
int cbreak(void)
{ return(*(int *)0); }
#undef qiflush_sp
void qiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef qiflush
void qiflush(void)
{ /* void */ }
#undef noraw_sp
int noraw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef noraw
int noraw(void)
{ return(*(int *)0); }
#undef nocbreak_sp
int nocbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nocbreak
int nocbreak(void)
{ return(*(int *)0); }
#undef noqiflush_sp
void noqiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef noqiflush
void noqiflush(void)
{ /* void */ }
#undef intrflush_sp
int intrflush_sp(
SCREEN *sp,
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef intrflush
int intrflush(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/lib_setup.c */
#undef ttytype
char ttytype[256];
#undef LINES
int LINES;
#undef COLS
int COLS;
#undef TABSIZE
int TABSIZE;
#undef set_tabsize_sp
int set_tabsize_sp(
SCREEN *sp,
int value)
{ return(*(int *)0); }
#undef set_tabsize
int set_tabsize(
int value)
{ return(*(int *)0); }
#undef _nc_handle_sigwinch
int _nc_handle_sigwinch(
SCREEN *sp)
{ return(*(int *)0); }
#undef use_env_sp
void use_env_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl_sp
void use_tioctl_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_env
void use_env(
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl
void use_tioctl(
NCURSES_BOOL f)
{ /* void */ }
#undef _nc_get_screensize
void _nc_get_screensize(
SCREEN *sp,
int *linep,
int *colp)
{ /* void */ }
#undef _nc_update_screensize
void _nc_update_screensize(
SCREEN *sp)
{ /* void */ }
#undef _nc_setup_tinfo
int _nc_setup_tinfo(
const char *const tn,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
#undef _nc_tinfo_cmdch
void _nc_tinfo_cmdch(
TERMINAL *termp,
int proto)
{ /* void */ }
#undef _nc_get_locale
char *_nc_get_locale(void)
{ return(*(char **)0); }
#undef _nc_unicode_locale
int _nc_unicode_locale(void)
{ return(*(int *)0); }
#undef _nc_locale_breaks_acs
int _nc_locale_breaks_acs(
TERMINAL *termp)
{ return(*(int *)0); }
#undef _nc_setupterm
int _nc_setupterm(
const char *tname,
int Filedes,
int *errret,
int reuse)
{ return(*(int *)0); }
#undef new_prescr
SCREEN *new_prescr(void)
{ return(*(SCREEN **)0); }
#undef setupterm
int setupterm(
const char *tname,
int Filedes,
int *errret)
{ return(*(int *)0); }
/* ./tinfo/lib_termcap.c */
#undef UP
char *UP;
#undef BC
char *BC;
#undef tgetent_sp
int tgetent_sp(
SCREEN *sp,
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetent
int tgetent(
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetflag_sp
int tgetflag_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetflag
int tgetflag(
const char *id)
{ return(*(int *)0); }
#undef tgetnum_sp
int tgetnum_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetnum
int tgetnum(
const char *id)
{ return(*(int *)0); }
#undef tgetstr_sp
char *tgetstr_sp(
SCREEN *sp,
const char *id,
char **area)
{ return(*(char **)0); }
#undef tgetstr
char *tgetstr(
const char *id,
char **area)
{ return(*(char **)0); }
/* ./tinfo/lib_termname.c */
#undef termname_sp
char *termname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef termname
char *termname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_tgoto.c */
#undef tgoto
char *tgoto(
const char *string,
int x,
int y)
{ return(*(char **)0); }
/* ./tinfo/lib_ti.c */
#undef tigetflag_sp
int tigetflag_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetflag
int tigetflag(
const char *str)
{ return(*(int *)0); }
#undef tigetnum_sp
int tigetnum_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetnum
int tigetnum(
const char *str)
{ return(*(int *)0); }
#undef tigetstr_sp
char *tigetstr_sp(
SCREEN *sp,
const char *str)
{ return(*(char **)0); }
#undef tigetstr
char *tigetstr(
const char *str)
{ return(*(char **)0); }
/* ./tinfo/lib_tparm.c */
#undef _nc_tparm_err
int _nc_tparm_err;
#undef _nc_tparm_analyze
int _nc_tparm_analyze(
const char *string,
char *p_is_s[9],
int *_nc_popcount)
{ return(*(int *)0); }
#undef tparm
char *tparm(
const char *string,
...)
{ return(*(char **)0); }
#undef tiparm
char *tiparm(
const char *string,
...)
{ return(*(char **)0); }
+#undef _nc_tiparm
+char *_nc_tiparm(
+ int expected,
+ const char *string,
+ ...)
+ { return(*(char **)0); }
+
/* ./tinfo/lib_tputs.c */
#undef PC
char PC;
#undef ospeed
short ospeed;
#undef _nc_nulls_sent
int _nc_nulls_sent;
#undef _nc_set_no_padding
void _nc_set_no_padding(
SCREEN *sp)
{ /* void */ }
#undef delay_output_sp
int delay_output_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef delay_output
int delay_output(
int ms)
{ return(*(int *)0); }
#undef _nc_flush_sp
void _nc_flush_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_flush
void _nc_flush(void)
{ /* void */ }
#undef _nc_outch_sp
int _nc_outch_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_outch
int _nc_outch(
int ch)
{ return(*(int *)0); }
#undef _nc_putchar_sp
int _nc_putchar_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_putchar
int _nc_putchar(
int ch)
{ return(*(int *)0); }
#undef putp_sp
int putp_sp(
SCREEN *sp,
const char *string)
{ return(*(int *)0); }
#undef putp
int putp(
const char *string)
{ return(*(int *)0); }
#undef _nc_putp_sp
int _nc_putp_sp(
SCREEN *sp,
const char *name,
const char *string)
{ return(*(int *)0); }
#undef _nc_putp
int _nc_putp(
const char *name,
const char *string)
{ return(*(int *)0); }
#undef tputs_sp
int tputs_sp(
SCREEN *sp,
const char *string,
int affcnt,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef _nc_outc_wrapper
int _nc_outc_wrapper(
SCREEN *sp,
int c)
{ return(*(int *)0); }
#undef tputs
int tputs(
const char *string,
int affcnt,
int (*outc)(
int p1))
{ return(*(int *)0); }
/* ./trace/lib_trace.c */
#undef _nc_tracing
unsigned _nc_tracing;
#undef _nc_tputs_trace
const char *_nc_tputs_trace = {0};
#undef _nc_outchars
long _nc_outchars;
+#undef curses_trace
+unsigned curses_trace(
+ unsigned tracelevel)
+ { return(*(unsigned *)0); }
+
#undef trace
void trace(
const unsigned int tracelevel)
{ /* void */ }
#undef _tracef
void _tracef(
const char *fmt,
...)
{ /* void */ }
#undef _nc_retrace_bool
NCURSES_BOOL _nc_retrace_bool(
int code)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_retrace_char
char _nc_retrace_char(
int code)
{ return(*(char *)0); }
#undef _nc_retrace_int
int _nc_retrace_int(
int code)
{ return(*(int *)0); }
#undef _nc_retrace_unsigned
unsigned _nc_retrace_unsigned(
unsigned code)
{ return(*(unsigned *)0); }
#undef _nc_retrace_ptr
char *_nc_retrace_ptr(
char *code)
{ return(*(char **)0); }
#undef _nc_retrace_cptr
const char *_nc_retrace_cptr(
const char *code)
{ return(*(const char **)0); }
#undef _nc_retrace_cvoid_ptr
const void *_nc_retrace_cvoid_ptr(
const void *code)
{ return(*(const void **)0); }
#undef _nc_retrace_void_ptr
void *_nc_retrace_void_ptr(
void *code)
{ return(*(void **)0); }
#undef _nc_retrace_sp
SCREEN *_nc_retrace_sp(
SCREEN *code)
{ return(*(SCREEN **)0); }
#undef _nc_retrace_win
WINDOW *_nc_retrace_win(
WINDOW *code)
{ return(*(WINDOW **)0); }
#undef _nc_fmt_funcptr
char *_nc_fmt_funcptr(
char *target,
const char *source,
size_t size)
{ return(*(char **)0); }
/* ./trace/lib_traceatr.c */
#undef _traceattr2
char *_traceattr2(
int bufnum,
chtype newmode)
{ return(*(char **)0); }
#undef _traceattr
char *_traceattr(
attr_t newmode)
{ return(*(char **)0); }
#undef _nc_retrace_int_attr_t
int _nc_retrace_int_attr_t(
attr_t code)
{ return(*(int *)0); }
#undef _nc_retrace_attr_t
attr_t _nc_retrace_attr_t(
attr_t code)
{ return(*(attr_t *)0); }
#undef _nc_altcharset_name
const char *_nc_altcharset_name(
attr_t attr,
chtype ch)
{ return(*(const char **)0); }
#undef _tracechtype2
char *_tracechtype2(
int bufnum,
chtype ch)
{ return(*(char **)0); }
#undef _tracechtype
char *_tracechtype(
chtype ch)
{ return(*(char **)0); }
#undef _nc_retrace_chtype
chtype _nc_retrace_chtype(
chtype code)
{ return(*(chtype *)0); }
/* ./trace/lib_tracebits.c */
#undef _nc_trace_ttymode
char *_nc_trace_ttymode(
struct termios *tty)
{ return(*(char **)0); }
#undef _nc_tracebits
char *_nc_tracebits(void)
{ return(*(char **)0); }
/* ./trace/lib_tracechr.c */
#undef _nc_tracechar
char *_nc_tracechar(
SCREEN *sp,
int ch)
{ return(*(char **)0); }
#undef _tracechar
char *_tracechar(
int ch)
{ return(*(char **)0); }
/* ./tinfo/lib_ttyflags.c */
#undef _nc_get_tty_mode_sp
int _nc_get_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_get_tty_mode
int _nc_get_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode_sp
int _nc_set_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode
int _nc_set_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef def_shell_mode_sp
int def_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_shell_mode
int def_shell_mode(void)
{ return(*(int *)0); }
#undef def_prog_mode_sp
int def_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_prog_mode
int def_prog_mode(void)
{ return(*(int *)0); }
#undef reset_prog_mode_sp
int reset_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_prog_mode
int reset_prog_mode(void)
{ return(*(int *)0); }
#undef reset_shell_mode_sp
int reset_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_shell_mode
int reset_shell_mode(void)
{ return(*(int *)0); }
#undef savetty_sp
int savetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef savetty
int savetty(void)
{ return(*(int *)0); }
#undef resetty_sp
int resetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef resetty
int resetty(void)
{ return(*(int *)0); }
/* ./tty/lib_twait.c */
#undef _nc_timed_wait
int _nc_timed_wait(
SCREEN *sp,
int mode,
int milliseconds,
int *timeleft)
{ return(*(int *)0); }
/* ./tinfo/name_match.c */
#undef _nc_first_name
char *_nc_first_name(
const char *const sp)
{ return(*(char **)0); }
#undef _nc_name_match
int _nc_name_match(
const char *const namelst,
const char *const name,
const char *const delim)
{ return(*(int *)0); }
/* ./names.c */
#undef boolnames
const char *const boolnames[] = {0};
#undef boolfnames
const char *const boolfnames[] = {0};
#undef numnames
const char *const numnames[] = {0};
#undef numfnames
const char *const numfnames[] = {0};
#undef strnames
const char *const strnames[] = {0};
#undef strfnames
const char *const strfnames[] = {0};
/* ./tinfo/obsolete.c */
#undef _nc_set_buffer_sp
void _nc_set_buffer_sp(
SCREEN *sp,
FILE *ofp,
int buffered)
{ /* void */ }
#undef _nc_set_buffer
void _nc_set_buffer(
FILE *ofp,
int buffered)
{ /* void */ }
/* ./tinfo/read_entry.c */
#undef _nc_init_termtype
void _nc_init_termtype(
TERMTYPE2 *const tp)
{ /* void */ }
#undef _nc_read_termtype
int _nc_read_termtype(
TERMTYPE2 *ptr,
char *buffer,
int limit)
{ return(*(int *)0); }
#undef _nc_read_file_entry
int _nc_read_file_entry(
const char *const filename,
TERMTYPE2 *ptr)
{ return(*(int *)0); }
#undef _nc_read_entry
int _nc_read_entry(
const char *const name,
char *const filename,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
/* ./tinfo/read_termcap.c */
#undef _nc_read_termcap
void _nc_read_termcap(void)
{ /* void */ }
/* ./tinfo/strings.c */
#undef _nc_str_init
string_desc *_nc_str_init(
string_desc *dst,
char *src,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_null
string_desc *_nc_str_null(
string_desc *dst,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_copy
string_desc *_nc_str_copy(
string_desc *dst,
string_desc *src)
{ return(*(string_desc **)0); }
#undef _nc_safe_strcat
NCURSES_BOOL _nc_safe_strcat(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_safe_strcpy
NCURSES_BOOL _nc_safe_strcpy(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
/* ./trace/trace_buf.c */
#undef _nc_trace_buf
char *_nc_trace_buf(
int bufnum,
size_t want)
{ return(*(char **)0); }
#undef _nc_trace_bufcat
char *_nc_trace_bufcat(
int bufnum,
const char *value)
{ return(*(char **)0); }
/* ./trace/trace_tries.c */
#undef _nc_trace_tries
void _nc_trace_tries(
TRIES *tree)
{ /* void */ }
/* ./base/tries.c */
#undef _nc_expand_try
char *_nc_expand_try(
TRIES *tree,
unsigned code,
int *count,
size_t len)
{ return(*(char **)0); }
#undef _nc_remove_key
int _nc_remove_key(
TRIES **tree,
unsigned code)
{ return(*(int *)0); }
#undef _nc_remove_string
int _nc_remove_string(
TRIES **tree,
const char *string)
{ return(*(int *)0); }
/* ./tinfo/trim_sgr0.c */
#undef _nc_trim_sgr0
char *_nc_trim_sgr0(
TERMTYPE2 *tp)
{ return(*(char **)0); }
/* ./unctrl.c */
#undef unctrl_sp
const char *unctrl_sp(
SCREEN *sp,
chtype ch)
{ return(*(const char **)0); }
#undef unctrl
const char *unctrl(
chtype ch)
{ return(*(const char **)0); }
/* ./trace/visbuf.c */
#undef _nc_visbuf2
const char *_nc_visbuf2(
int bufnum,
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbuf
const char *_nc_visbuf(
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbufn
const char *_nc_visbufn(
const char *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viscbuf2
const char *_nc_viscbuf2(
int bufnum,
const chtype *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viscbuf
const char *_nc_viscbuf(
const chtype *buf,
int len)
{ return(*(const char **)0); }
/* ./base/define_key.c */
#undef define_key_sp
int define_key_sp(
SCREEN *sp,
const char *str,
int keycode)
{ return(*(int *)0); }
#undef define_key
int define_key(
const char *str,
int keycode)
{ return(*(int *)0); }
/* ./tinfo/hashed_db.c */
#undef _nc_hashed_db
void _nc_hashed_db(void)
{ /* void */ }
/* ./base/key_defined.c */
#undef key_defined_sp
int key_defined_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef key_defined
int key_defined(
const char *str)
{ return(*(int *)0); }
/* ./base/keybound.c */
#undef keybound_sp
char *keybound_sp(
SCREEN *sp,
int code,
int count)
{ return(*(char **)0); }
#undef keybound
char *keybound(
int code,
int count)
{ return(*(char **)0); }
/* ./base/keyok.c */
#undef keyok_sp
int keyok_sp(
SCREEN *sp,
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef keyok
int keyok(
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/version.c */
#undef curses_version
const char *curses_version(void)
{ return(*(const char **)0); }
diff --git a/contrib/ncurses/ncurses/llib-ltinfot b/contrib/ncurses/ncurses/llib-ltinfot
index 8ac9facbe516..18780beb96b1 100644
--- a/contrib/ncurses/ncurses/llib-ltinfot
+++ b/contrib/ncurses/ncurses/llib-ltinfot
@@ -1,1622 +1,1639 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 2013-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 2013-on *
****************************************************************************/
/* LINTLIBRARY */
/* ./tinfo/access.c */
#include <curses.priv.h>
#undef _nc_rootname
char *_nc_rootname(
char *path)
{ return(*(char **)0); }
#undef _nc_is_abs_path
NCURSES_BOOL _nc_is_abs_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_pathlast
unsigned _nc_pathlast(
const char *path)
{ return(*(unsigned *)0); }
#undef _nc_basename
char *_nc_basename(
char *path)
{ return(*(char **)0); }
#undef _nc_access
int _nc_access(
const char *path,
int mode)
{ return(*(int *)0); }
#undef _nc_is_dir_path
NCURSES_BOOL _nc_is_dir_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_is_file_path
NCURSES_BOOL _nc_is_file_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_env_access
int _nc_env_access(void)
{ return(*(int *)0); }
/* ./tinfo/add_tries.c */
#undef _nc_add_to_try
int _nc_add_to_try(
TRIES **tree,
const char *str,
unsigned code)
{ return(*(int *)0); }
/* ./tinfo/alloc_ttype.c */
#undef _nc_align_termtype
void _nc_align_termtype(
TERMTYPE2 *to,
TERMTYPE2 *from)
{ /* void */ }
#undef _nc_copy_termtype
void _nc_copy_termtype(
TERMTYPE *dst,
const TERMTYPE *src)
{ /* void */ }
/* ./codes.c */
#undef _nc_boolcodes
const char *const *_nc_boolcodes(void)
{ return(*(const char **)0); }
#undef _nc_numcodes
const char *const *_nc_numcodes(void)
{ return(*(const char **)0); }
#undef _nc_strcodes
const char *const *_nc_strcodes(void)
{ return(*(const char **)0); }
/* ./comp_captab.c */
#undef _nc_get_table
const struct name_table_entry *_nc_get_table(
NCURSES_BOOL termcap)
{ return(*(const struct name_table_entry **)0); }
#undef _nc_get_hash_table
const HashValue *_nc_get_hash_table(
NCURSES_BOOL termcap)
{ return(*(const HashValue **)0); }
#undef _nc_get_alias_table
const struct alias *_nc_get_alias_table(
NCURSES_BOOL termcap)
{ return(*(const struct alias **)0); }
#undef _nc_get_hash_info
const HashData *_nc_get_hash_info(
NCURSES_BOOL termcap)
{ return(*(const HashData **)0); }
/* ./tinfo/comp_error.c */
#undef _nc_suppress_warnings
NCURSES_BOOL _nc_suppress_warnings;
#undef _nc_curr_line
int _nc_curr_line;
#undef _nc_curr_col
int _nc_curr_col;
#undef _nc_get_source
const char *_nc_get_source(void)
{ return(*(const char **)0); }
#undef _nc_set_source
void _nc_set_source(
const char *const name)
{ /* void */ }
#undef _nc_set_type
void _nc_set_type(
const char *const name)
{ /* void */ }
#undef _nc_get_type
void _nc_get_type(
char *name)
{ /* void */ }
#undef _nc_warning
void _nc_warning(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_err_abort
void _nc_err_abort(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_syserr_abort
void _nc_syserr_abort(
const char *const fmt,
...)
{ /* void */ }
/* ./tinfo/comp_hash.c */
#undef _nc_find_entry
struct name_table_entry const *_nc_find_entry(
const char *string,
const HashValue *hash_table)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_type_entry
struct name_table_entry const *_nc_find_type_entry(
const char *string,
int type,
NCURSES_BOOL termcap)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_user_entry
struct user_table_entry const *_nc_find_user_entry(
const char *string)
{ return(*(struct user_table_entry const **)0); }
/* ./comp_userdefs.c */
#undef _nc_get_userdefs_table
const struct user_table_entry *_nc_get_userdefs_table(void)
{ return(*(const struct user_table_entry **)0); }
#undef _nc_get_hash_user
const HashData *_nc_get_hash_user(void)
{ return(*(const HashData **)0); }
/* ./tinfo/db_iterator.c */
#undef _nc_tic_dir
const char *_nc_tic_dir(
const char *path)
{ return(*(const char **)0); }
#undef _nc_keep_tic_dir
void _nc_keep_tic_dir(
const char *path)
{ /* void */ }
#undef _nc_last_db
void _nc_last_db(void)
{ /* void */ }
#undef _nc_next_db
const char *_nc_next_db(
DBDIRS *state,
int *offset)
{ return(*(const char **)0); }
#undef _nc_first_db
void _nc_first_db(
DBDIRS *state,
int *offset)
{ /* void */ }
/* ./tinfo/doalloc.c */
#undef _nc_doalloc
void *_nc_doalloc(
void *oldp,
size_t amount)
{ return(*(void **)0); }
/* ./tinfo/entries.c */
#undef _nc_head
ENTRY *_nc_head;
#undef _nc_tail
ENTRY *_nc_tail;
#undef _nc_free_entry
void _nc_free_entry(
ENTRY *headp,
TERMTYPE2 *tterm)
{ /* void */ }
#undef _nc_free_entries
void _nc_free_entries(
ENTRY *headp)
{ /* void */ }
#undef _nc_leaks_tinfo
void _nc_leaks_tinfo(void)
{ /* void */ }
+#undef exit_terminfo
+void exit_terminfo(
+ int code)
+ { /* void */ }
+
/* ./fallback.c */
#undef _nc_fallback
const TERMTYPE2 *_nc_fallback(
const char *name)
{ return(*(const TERMTYPE2 **)0); }
/* ./tinfo/free_ttype.c */
#undef _nc_free_termtype
void _nc_free_termtype(
TERMTYPE *ptr)
{ /* void */ }
#undef _nc_user_definable
NCURSES_BOOL _nc_user_definable;
#undef use_extended_names
int use_extended_names(
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/getenv_num.c */
#undef _nc_getenv_num
int _nc_getenv_num(
const char *name)
{ return(*(int *)0); }
#undef _nc_setenv_num
void _nc_setenv_num(
const char *name,
int value)
{ /* void */ }
/* ./tinfo/home_terminfo.c */
#undef _nc_home_terminfo
char *_nc_home_terminfo(void)
{ return(*(char **)0); }
/* ./tinfo/init_keytry.c */
#undef _nc_init_keytry
void _nc_init_keytry(
SCREEN *sp)
{ /* void */ }
/* ./tinfo/lib_acs.c */
#undef _nc_acs_map
chtype *_nc_acs_map(void)
{ return(*(chtype **)0); }
#undef _nc_init_acs_sp
void _nc_init_acs_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_init_acs
void _nc_init_acs(void)
{ /* void */ }
/* ./tinfo/lib_baudrate.c */
struct speed {
int given_speed;
int actual_speed;
};
#undef _nc_baudrate
int _nc_baudrate(
int OSpeed)
{ return(*(int *)0); }
#undef _nc_ospeed
int _nc_ospeed(
int BaudRate)
{ return(*(int *)0); }
#undef baudrate_sp
int baudrate_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef baudrate
int baudrate(void)
{ return(*(int *)0); }
/* ./tinfo/lib_cur_term.c */
#undef _nc_get_cur_term_sp
TERMINAL *_nc_get_cur_term_sp(
SCREEN *sp)
{ return(*(TERMINAL **)0); }
#undef _nc_get_cur_term
TERMINAL *_nc_get_cur_term(void)
{ return(*(TERMINAL **)0); }
#undef _nc_cur_term
TERMINAL *_nc_cur_term(void)
{ return(*(TERMINAL **)0); }
#undef set_curterm_sp
TERMINAL *set_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef set_curterm
TERMINAL *set_curterm(
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef del_curterm_sp
int del_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(int *)0); }
#undef del_curterm
int del_curterm(
TERMINAL *termp)
{ return(*(int *)0); }
/* ./tinfo/lib_data.c */
#undef _nc_stdscr
WINDOW *_nc_stdscr(void)
{ return(*(WINDOW **)0); }
#undef _nc_curscr
WINDOW *_nc_curscr(void)
{ return(*(WINDOW **)0); }
#undef _nc_newscr
WINDOW *_nc_newscr(void)
{ return(*(WINDOW **)0); }
#undef _nc_screen_chain
SCREEN *_nc_screen_chain;
#undef SP
SCREEN *SP;
#undef _nc_globals
NCURSES_GLOBALS _nc_globals;
#undef _nc_prescreen
NCURSES_PRESCREEN _nc_prescreen;
#undef _nc_screen_of
SCREEN *_nc_screen_of(
WINDOW *win)
{ return(*(SCREEN **)0); }
#undef _nc_init_pthreads
void _nc_init_pthreads(void)
{ /* void */ }
#undef _nc_mutex_init
void _nc_mutex_init(
pthread_mutex_t *obj)
{ /* void */ }
#undef _nc_mutex_lock
int _nc_mutex_lock(
pthread_mutex_t *obj)
{ return(*(int *)0); }
#undef _nc_mutex_trylock
int _nc_mutex_trylock(
pthread_mutex_t *obj)
{ return(*(int *)0); }
#undef _nc_mutex_unlock
int _nc_mutex_unlock(
pthread_mutex_t *obj)
{ return(*(int *)0); }
/* ./tinfo/lib_has_cap.c */
#undef has_ic_sp
NCURSES_BOOL has_ic_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_ic
NCURSES_BOOL has_ic(void)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il_sp
NCURSES_BOOL has_il_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il
NCURSES_BOOL has_il(void)
{ return(*(NCURSES_BOOL *)0); }
/* ./tinfo/lib_kernel.c */
#undef erasechar_sp
char erasechar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef erasechar
char erasechar(void)
{ return(*(char *)0); }
#undef killchar_sp
char killchar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef killchar
char killchar(void)
{ return(*(char *)0); }
#undef flushinp_sp
int flushinp_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef flushinp
int flushinp(void)
{ return(*(int *)0); }
/* ./lib_keyname.c */
struct kn { short offset; int code; };
#undef keyname_sp
const char *keyname_sp(
SCREEN *sp,
int c)
{ return(*(const char **)0); }
#undef keyname
const char *keyname(
int c)
{ return(*(const char **)0); }
/* ./tinfo/lib_longname.c */
#undef longname_sp
char *longname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef longname
char *longname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_napms.c */
#undef napms_sp
int napms_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef napms
int napms(
int ms)
{ return(*(int *)0); }
/* ./tinfo/lib_options.c */
#undef idlok
int idlok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef idcok
void idcok(
WINDOW *win,
NCURSES_BOOL flag)
{ /* void */ }
#undef halfdelay_sp
int halfdelay_sp(
SCREEN *sp,
int t)
{ return(*(int *)0); }
#undef halfdelay
int halfdelay(
int t)
{ return(*(int *)0); }
#undef nodelay
int nodelay(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef notimeout
int notimeout(
WINDOW *win,
NCURSES_BOOL f)
{ return(*(int *)0); }
#undef wtimeout
void wtimeout(
WINDOW *win,
int delay)
{ /* void */ }
#undef keypad
int keypad(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef meta
int meta(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef curs_set_sp
int curs_set_sp(
SCREEN *sp,
int vis)
{ return(*(int *)0); }
#undef curs_set
int curs_set(
int vis)
{ return(*(int *)0); }
#undef typeahead_sp
int typeahead_sp(
SCREEN *sp,
int fd)
{ return(*(int *)0); }
#undef typeahead
int typeahead(
int fd)
{ return(*(int *)0); }
#undef has_key_sp
int has_key_sp(
SCREEN *sp,
int keycode)
{ return(*(int *)0); }
#undef has_key
int has_key(
int keycode)
{ return(*(int *)0); }
#undef _nc_putp_flush_sp
int _nc_putp_flush_sp(
SCREEN *sp,
const char *name,
const char *value)
{ return(*(int *)0); }
#undef _nc_keypad
int _nc_keypad(
SCREEN *sp,
int flag)
{ return(*(int *)0); }
/* ./tinfo/lib_raw.c */
#undef raw_sp
int raw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef raw
int raw(void)
{ return(*(int *)0); }
#undef cbreak_sp
int cbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef cbreak
int cbreak(void)
{ return(*(int *)0); }
#undef qiflush_sp
void qiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef qiflush
void qiflush(void)
{ /* void */ }
#undef noraw_sp
int noraw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef noraw
int noraw(void)
{ return(*(int *)0); }
#undef nocbreak_sp
int nocbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nocbreak
int nocbreak(void)
{ return(*(int *)0); }
#undef noqiflush_sp
void noqiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef noqiflush
void noqiflush(void)
{ /* void */ }
#undef intrflush_sp
int intrflush_sp(
SCREEN *sp,
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef intrflush
int intrflush(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/lib_setup.c */
#undef _nc_ttytype
char *_nc_ttytype(void)
{ return(*(char **)0); }
#undef _nc_ptr_Lines
int *_nc_ptr_Lines(
SCREEN *sp)
{ return(*(int **)0); }
#undef _nc_LINES
int _nc_LINES(void)
{ return(*(int *)0); }
#undef _nc_ptr_Cols
int *_nc_ptr_Cols(
SCREEN *sp)
{ return(*(int **)0); }
#undef _nc_COLS
int _nc_COLS(void)
{ return(*(int *)0); }
#undef _nc_ptr_Tabsize
int *_nc_ptr_Tabsize(
SCREEN *sp)
{ return(*(int **)0); }
#undef _nc_TABSIZE
int _nc_TABSIZE(void)
{ return(*(int *)0); }
#undef set_tabsize_sp
int set_tabsize_sp(
SCREEN *sp,
int value)
{ return(*(int *)0); }
#undef set_tabsize
int set_tabsize(
int value)
{ return(*(int *)0); }
#undef _nc_handle_sigwinch
int _nc_handle_sigwinch(
SCREEN *sp)
{ return(*(int *)0); }
#undef use_env_sp
void use_env_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl_sp
void use_tioctl_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_env
void use_env(
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl
void use_tioctl(
NCURSES_BOOL f)
{ /* void */ }
#undef _nc_get_screensize
void _nc_get_screensize(
SCREEN *sp,
int *linep,
int *colp)
{ /* void */ }
#undef _nc_update_screensize
void _nc_update_screensize(
SCREEN *sp)
{ /* void */ }
#undef _nc_setup_tinfo
int _nc_setup_tinfo(
const char *const tn,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
#undef _nc_tinfo_cmdch
void _nc_tinfo_cmdch(
TERMINAL *termp,
int proto)
{ /* void */ }
#undef _nc_get_locale
char *_nc_get_locale(void)
{ return(*(char **)0); }
#undef _nc_unicode_locale
int _nc_unicode_locale(void)
{ return(*(int *)0); }
#undef _nc_locale_breaks_acs
int _nc_locale_breaks_acs(
TERMINAL *termp)
{ return(*(int *)0); }
#undef _nc_setupterm
int _nc_setupterm(
const char *tname,
int Filedes,
int *errret,
int reuse)
{ return(*(int *)0); }
#undef _nc_find_prescr
SCREEN *_nc_find_prescr(void)
{ return(*(SCREEN **)0); }
#undef _nc_forget_prescr
void _nc_forget_prescr(void)
{ /* void */ }
#undef new_prescr
SCREEN *new_prescr(void)
{ return(*(SCREEN **)0); }
#undef setupterm
int setupterm(
const char *tname,
int Filedes,
int *errret)
{ return(*(int *)0); }
/* ./tinfo/lib_termcap.c */
#undef UP
char *UP;
#undef BC
char *BC;
#undef tgetent_sp
int tgetent_sp(
SCREEN *sp,
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetent
int tgetent(
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetflag_sp
int tgetflag_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetflag
int tgetflag(
const char *id)
{ return(*(int *)0); }
#undef tgetnum_sp
int tgetnum_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetnum
int tgetnum(
const char *id)
{ return(*(int *)0); }
#undef tgetstr_sp
char *tgetstr_sp(
SCREEN *sp,
const char *id,
char **area)
{ return(*(char **)0); }
#undef tgetstr
char *tgetstr(
const char *id,
char **area)
{ return(*(char **)0); }
/* ./tinfo/lib_termname.c */
#undef termname_sp
char *termname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef termname
char *termname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_tgoto.c */
#undef tgoto
char *tgoto(
const char *string,
int x,
int y)
{ return(*(char **)0); }
/* ./tinfo/lib_ti.c */
#undef tigetflag_sp
int tigetflag_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetflag
int tigetflag(
const char *str)
{ return(*(int *)0); }
#undef tigetnum_sp
int tigetnum_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetnum
int tigetnum(
const char *str)
{ return(*(int *)0); }
#undef tigetstr_sp
char *tigetstr_sp(
SCREEN *sp,
const char *str)
{ return(*(char **)0); }
#undef tigetstr
char *tigetstr(
const char *str)
{ return(*(char **)0); }
/* ./tinfo/lib_tparm.c */
#undef _nc_tparm_err
int _nc_tparm_err;
#undef _nc_tparm_analyze
int _nc_tparm_analyze(
const char *string,
char *p_is_s[9],
int *_nc_popcount)
{ return(*(int *)0); }
#undef tparm
char *tparm(
const char *string,
...)
{ return(*(char **)0); }
#undef tiparm
char *tiparm(
const char *string,
...)
{ return(*(char **)0); }
+#undef _nc_tiparm
+char *_nc_tiparm(
+ int expected,
+ const char *string,
+ ...)
+ { return(*(char **)0); }
+
/* ./tinfo/lib_tputs.c */
#undef PC
char PC;
#undef ospeed
short ospeed;
#undef _nc_nulls_sent
int _nc_nulls_sent;
#undef _nc_set_no_padding
void _nc_set_no_padding(
SCREEN *sp)
{ /* void */ }
#undef delay_output_sp
int delay_output_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef delay_output
int delay_output(
int ms)
{ return(*(int *)0); }
#undef _nc_flush_sp
void _nc_flush_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_flush
void _nc_flush(void)
{ /* void */ }
#undef _nc_outch_sp
int _nc_outch_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_outch
int _nc_outch(
int ch)
{ return(*(int *)0); }
#undef _nc_putchar_sp
int _nc_putchar_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_putchar
int _nc_putchar(
int ch)
{ return(*(int *)0); }
#undef putp_sp
int putp_sp(
SCREEN *sp,
const char *string)
{ return(*(int *)0); }
#undef putp
int putp(
const char *string)
{ return(*(int *)0); }
#undef _nc_putp_sp
int _nc_putp_sp(
SCREEN *sp,
const char *name,
const char *string)
{ return(*(int *)0); }
#undef _nc_putp
int _nc_putp(
const char *name,
const char *string)
{ return(*(int *)0); }
#undef tputs_sp
int tputs_sp(
SCREEN *sp,
const char *string,
int affcnt,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef _nc_outc_wrapper
int _nc_outc_wrapper(
SCREEN *sp,
int c)
{ return(*(int *)0); }
#undef tputs
int tputs(
const char *string,
int affcnt,
int (*outc)(
int p1))
{ return(*(int *)0); }
/* ./trace/lib_trace.c */
#undef _nc_tracing
unsigned _nc_tracing;
#undef _nc__nc_tputs_trace
const char *_nc__nc_tputs_trace(void)
{ return(*(const char **)0); }
#undef _nc__nc_outchars
long _nc__nc_outchars(void)
{ return(*(long *)0); }
#undef _nc_set_tputs_trace
void _nc_set_tputs_trace(
const char *s)
{ /* void */ }
#undef _nc_count_outchars
void _nc_count_outchars(
long increment)
{ /* void */ }
+#undef curses_trace
+unsigned curses_trace(
+ unsigned tracelevel)
+ { return(*(unsigned *)0); }
+
#undef trace
void trace(
const unsigned int tracelevel)
{ /* void */ }
#undef _tracef
void _tracef(
const char *fmt,
...)
{ /* void */ }
#undef _nc_retrace_bool
NCURSES_BOOL _nc_retrace_bool(
int code)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_retrace_char
char _nc_retrace_char(
int code)
{ return(*(char *)0); }
#undef _nc_retrace_int
int _nc_retrace_int(
int code)
{ return(*(int *)0); }
#undef _nc_retrace_unsigned
unsigned _nc_retrace_unsigned(
unsigned code)
{ return(*(unsigned *)0); }
#undef _nc_retrace_ptr
char *_nc_retrace_ptr(
char *code)
{ return(*(char **)0); }
#undef _nc_retrace_cptr
const char *_nc_retrace_cptr(
const char *code)
{ return(*(const char **)0); }
#undef _nc_retrace_cvoid_ptr
const void *_nc_retrace_cvoid_ptr(
const void *code)
{ return(*(const void **)0); }
#undef _nc_retrace_void_ptr
void *_nc_retrace_void_ptr(
void *code)
{ return(*(void **)0); }
#undef _nc_retrace_sp
SCREEN *_nc_retrace_sp(
SCREEN *code)
{ return(*(SCREEN **)0); }
#undef _nc_retrace_win
WINDOW *_nc_retrace_win(
WINDOW *code)
{ return(*(WINDOW **)0); }
#undef _nc_fmt_funcptr
char *_nc_fmt_funcptr(
char *target,
const char *source,
size_t size)
{ return(*(char **)0); }
#undef _nc_use_tracef
int _nc_use_tracef(
unsigned mask)
{ return(*(int *)0); }
#undef _nc_locked_tracef
void _nc_locked_tracef(
const char *fmt,
...)
{ /* void */ }
/* ./trace/lib_traceatr.c */
#undef _traceattr2
char *_traceattr2(
int bufnum,
chtype newmode)
{ return(*(char **)0); }
#undef _traceattr
char *_traceattr(
attr_t newmode)
{ return(*(char **)0); }
#undef _nc_retrace_int_attr_t
int _nc_retrace_int_attr_t(
attr_t code)
{ return(*(int *)0); }
#undef _nc_retrace_attr_t
attr_t _nc_retrace_attr_t(
attr_t code)
{ return(*(attr_t *)0); }
#undef _nc_altcharset_name
const char *_nc_altcharset_name(
attr_t attr,
chtype ch)
{ return(*(const char **)0); }
#undef _tracechtype2
char *_tracechtype2(
int bufnum,
chtype ch)
{ return(*(char **)0); }
#undef _tracechtype
char *_tracechtype(
chtype ch)
{ return(*(char **)0); }
#undef _nc_retrace_chtype
chtype _nc_retrace_chtype(
chtype code)
{ return(*(chtype *)0); }
/* ./trace/lib_tracebits.c */
#undef _nc_trace_ttymode
char *_nc_trace_ttymode(
struct termios *tty)
{ return(*(char **)0); }
#undef _nc_tracebits
char *_nc_tracebits(void)
{ return(*(char **)0); }
/* ./trace/lib_tracechr.c */
#undef _nc_tracechar
char *_nc_tracechar(
SCREEN *sp,
int ch)
{ return(*(char **)0); }
#undef _tracechar
char *_tracechar(
int ch)
{ return(*(char **)0); }
/* ./tinfo/lib_ttyflags.c */
#undef _nc_get_tty_mode_sp
int _nc_get_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_get_tty_mode
int _nc_get_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode_sp
int _nc_set_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode
int _nc_set_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef def_shell_mode_sp
int def_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_shell_mode
int def_shell_mode(void)
{ return(*(int *)0); }
#undef def_prog_mode_sp
int def_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_prog_mode
int def_prog_mode(void)
{ return(*(int *)0); }
#undef reset_prog_mode_sp
int reset_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_prog_mode
int reset_prog_mode(void)
{ return(*(int *)0); }
#undef reset_shell_mode_sp
int reset_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_shell_mode
int reset_shell_mode(void)
{ return(*(int *)0); }
#undef savetty_sp
int savetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef savetty
int savetty(void)
{ return(*(int *)0); }
#undef resetty_sp
int resetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef resetty
int resetty(void)
{ return(*(int *)0); }
/* ./tty/lib_twait.c */
#undef _nc_timed_wait
int _nc_timed_wait(
SCREEN *sp,
int mode,
int milliseconds,
int *timeleft)
{ return(*(int *)0); }
/* ./tinfo/name_match.c */
#undef _nc_first_name
char *_nc_first_name(
const char *const sp)
{ return(*(char **)0); }
#undef _nc_name_match
int _nc_name_match(
const char *const namelst,
const char *const name,
const char *const delim)
{ return(*(int *)0); }
/* ./names.c */
#undef _nc_boolnames
const char *const *_nc_boolnames(void)
{ return(*(const char **)0); }
#undef _nc_boolfnames
const char *const *_nc_boolfnames(void)
{ return(*(const char **)0); }
#undef _nc_numnames
const char *const *_nc_numnames(void)
{ return(*(const char **)0); }
#undef _nc_numfnames
const char *const *_nc_numfnames(void)
{ return(*(const char **)0); }
#undef _nc_strnames
const char *const *_nc_strnames(void)
{ return(*(const char **)0); }
#undef _nc_strfnames
const char *const *_nc_strfnames(void)
{ return(*(const char **)0); }
/* ./tinfo/obsolete.c */
#undef _nc_set_buffer_sp
void _nc_set_buffer_sp(
SCREEN *sp,
FILE *ofp,
int buffered)
{ /* void */ }
#undef _nc_set_buffer
void _nc_set_buffer(
FILE *ofp,
int buffered)
{ /* void */ }
/* ./tinfo/read_entry.c */
#undef _nc_init_termtype
void _nc_init_termtype(
TERMTYPE2 *const tp)
{ /* void */ }
#undef _nc_read_termtype
int _nc_read_termtype(
TERMTYPE2 *ptr,
char *buffer,
int limit)
{ return(*(int *)0); }
#undef _nc_read_file_entry
int _nc_read_file_entry(
const char *const filename,
TERMTYPE2 *ptr)
{ return(*(int *)0); }
#undef _nc_read_entry
int _nc_read_entry(
const char *const name,
char *const filename,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
/* ./tinfo/read_termcap.c */
#undef _nc_read_termcap
void _nc_read_termcap(void)
{ /* void */ }
/* ./tinfo/strings.c */
#undef _nc_str_init
string_desc *_nc_str_init(
string_desc *dst,
char *src,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_null
string_desc *_nc_str_null(
string_desc *dst,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_copy
string_desc *_nc_str_copy(
string_desc *dst,
string_desc *src)
{ return(*(string_desc **)0); }
#undef _nc_safe_strcat
NCURSES_BOOL _nc_safe_strcat(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_safe_strcpy
NCURSES_BOOL _nc_safe_strcpy(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
/* ./trace/trace_buf.c */
#undef _nc_trace_buf
char *_nc_trace_buf(
int bufnum,
size_t want)
{ return(*(char **)0); }
#undef _nc_trace_bufcat
char *_nc_trace_bufcat(
int bufnum,
const char *value)
{ return(*(char **)0); }
/* ./trace/trace_tries.c */
#undef _nc_trace_tries
void _nc_trace_tries(
TRIES *tree)
{ /* void */ }
/* ./base/tries.c */
#undef _nc_expand_try
char *_nc_expand_try(
TRIES *tree,
unsigned code,
int *count,
size_t len)
{ return(*(char **)0); }
#undef _nc_remove_key
int _nc_remove_key(
TRIES **tree,
unsigned code)
{ return(*(int *)0); }
#undef _nc_remove_string
int _nc_remove_string(
TRIES **tree,
const char *string)
{ return(*(int *)0); }
/* ./tinfo/trim_sgr0.c */
#undef _nc_trim_sgr0
char *_nc_trim_sgr0(
TERMTYPE2 *tp)
{ return(*(char **)0); }
/* ./unctrl.c */
#undef unctrl_sp
const char *unctrl_sp(
SCREEN *sp,
chtype ch)
{ return(*(const char **)0); }
#undef unctrl
const char *unctrl(
chtype ch)
{ return(*(const char **)0); }
/* ./trace/visbuf.c */
#undef _nc_visbuf2
const char *_nc_visbuf2(
int bufnum,
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbuf
const char *_nc_visbuf(
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbufn
const char *_nc_visbufn(
const char *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viscbuf2
const char *_nc_viscbuf2(
int bufnum,
const chtype *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viscbuf
const char *_nc_viscbuf(
const chtype *buf,
int len)
{ return(*(const char **)0); }
/* ./base/define_key.c */
#undef define_key_sp
int define_key_sp(
SCREEN *sp,
const char *str,
int keycode)
{ return(*(int *)0); }
#undef define_key
int define_key(
const char *str,
int keycode)
{ return(*(int *)0); }
/* ./tinfo/hashed_db.c */
#undef _nc_hashed_db
void _nc_hashed_db(void)
{ /* void */ }
/* ./base/key_defined.c */
#undef key_defined_sp
int key_defined_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef key_defined
int key_defined(
const char *str)
{ return(*(int *)0); }
/* ./base/keybound.c */
#undef keybound_sp
char *keybound_sp(
SCREEN *sp,
int code,
int count)
{ return(*(char **)0); }
#undef keybound
char *keybound(
int code,
int count)
{ return(*(char **)0); }
/* ./base/keyok.c */
#undef keyok_sp
int keyok_sp(
SCREEN *sp,
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef keyok
int keyok(
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/version.c */
#undef curses_version
const char *curses_version(void)
{ return(*(const char **)0); }
diff --git a/contrib/ncurses/ncurses/llib-ltinfotw b/contrib/ncurses/ncurses/llib-ltinfotw
index 7011dbef2a14..0e7e76275885 100644
--- a/contrib/ncurses/ncurses/llib-ltinfotw
+++ b/contrib/ncurses/ncurses/llib-ltinfotw
@@ -1,1684 +1,1701 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 2012-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 2012-on *
****************************************************************************/
/* LINTLIBRARY */
/* ./tinfo/access.c */
#include <curses.priv.h>
#undef _nc_rootname
char *_nc_rootname(
char *path)
{ return(*(char **)0); }
#undef _nc_is_abs_path
NCURSES_BOOL _nc_is_abs_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_pathlast
unsigned _nc_pathlast(
const char *path)
{ return(*(unsigned *)0); }
#undef _nc_basename
char *_nc_basename(
char *path)
{ return(*(char **)0); }
#undef _nc_access
int _nc_access(
const char *path,
int mode)
{ return(*(int *)0); }
#undef _nc_is_dir_path
NCURSES_BOOL _nc_is_dir_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_is_file_path
NCURSES_BOOL _nc_is_file_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_env_access
int _nc_env_access(void)
{ return(*(int *)0); }
/* ./tinfo/add_tries.c */
#undef _nc_add_to_try
int _nc_add_to_try(
TRIES **tree,
const char *str,
unsigned code)
{ return(*(int *)0); }
/* ./tinfo/alloc_ttype.c */
#undef _nc_align_termtype
void _nc_align_termtype(
TERMTYPE2 *to,
TERMTYPE2 *from)
{ /* void */ }
#undef _nc_copy_termtype
void _nc_copy_termtype(
TERMTYPE *dst,
const TERMTYPE *src)
{ /* void */ }
#undef _nc_copy_termtype2
void _nc_copy_termtype2(
TERMTYPE2 *dst,
const TERMTYPE2 *src)
{ /* void */ }
#undef _nc_export_termtype2
void _nc_export_termtype2(
TERMTYPE *dst,
const TERMTYPE2 *src)
{ /* void */ }
/* ./codes.c */
#undef _nc_boolcodes
const char *const *_nc_boolcodes(void)
{ return(*(const char **)0); }
#undef _nc_numcodes
const char *const *_nc_numcodes(void)
{ return(*(const char **)0); }
#undef _nc_strcodes
const char *const *_nc_strcodes(void)
{ return(*(const char **)0); }
/* ./comp_captab.c */
#undef _nc_get_table
const struct name_table_entry *_nc_get_table(
NCURSES_BOOL termcap)
{ return(*(const struct name_table_entry **)0); }
#undef _nc_get_hash_table
const HashValue *_nc_get_hash_table(
NCURSES_BOOL termcap)
{ return(*(const HashValue **)0); }
#undef _nc_get_alias_table
const struct alias *_nc_get_alias_table(
NCURSES_BOOL termcap)
{ return(*(const struct alias **)0); }
#undef _nc_get_hash_info
const HashData *_nc_get_hash_info(
NCURSES_BOOL termcap)
{ return(*(const HashData **)0); }
/* ./tinfo/comp_error.c */
#undef _nc_suppress_warnings
NCURSES_BOOL _nc_suppress_warnings;
#undef _nc_curr_line
int _nc_curr_line;
#undef _nc_curr_col
int _nc_curr_col;
#undef _nc_get_source
const char *_nc_get_source(void)
{ return(*(const char **)0); }
#undef _nc_set_source
void _nc_set_source(
const char *const name)
{ /* void */ }
#undef _nc_set_type
void _nc_set_type(
const char *const name)
{ /* void */ }
#undef _nc_get_type
void _nc_get_type(
char *name)
{ /* void */ }
#undef _nc_warning
void _nc_warning(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_err_abort
void _nc_err_abort(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_syserr_abort
void _nc_syserr_abort(
const char *const fmt,
...)
{ /* void */ }
/* ./tinfo/comp_hash.c */
#undef _nc_find_entry
struct name_table_entry const *_nc_find_entry(
const char *string,
const HashValue *hash_table)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_type_entry
struct name_table_entry const *_nc_find_type_entry(
const char *string,
int type,
NCURSES_BOOL termcap)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_user_entry
struct user_table_entry const *_nc_find_user_entry(
const char *string)
{ return(*(struct user_table_entry const **)0); }
/* ./comp_userdefs.c */
#undef _nc_get_userdefs_table
const struct user_table_entry *_nc_get_userdefs_table(void)
{ return(*(const struct user_table_entry **)0); }
#undef _nc_get_hash_user
const HashData *_nc_get_hash_user(void)
{ return(*(const HashData **)0); }
/* ./tinfo/db_iterator.c */
#undef _nc_tic_dir
const char *_nc_tic_dir(
const char *path)
{ return(*(const char **)0); }
#undef _nc_keep_tic_dir
void _nc_keep_tic_dir(
const char *path)
{ /* void */ }
#undef _nc_last_db
void _nc_last_db(void)
{ /* void */ }
#undef _nc_next_db
const char *_nc_next_db(
DBDIRS *state,
int *offset)
{ return(*(const char **)0); }
#undef _nc_first_db
void _nc_first_db(
DBDIRS *state,
int *offset)
{ /* void */ }
/* ./tinfo/doalloc.c */
#undef _nc_doalloc
void *_nc_doalloc(
void *oldp,
size_t amount)
{ return(*(void **)0); }
/* ./tinfo/entries.c */
#undef _nc_head
ENTRY *_nc_head;
#undef _nc_tail
ENTRY *_nc_tail;
#undef _nc_free_entry
void _nc_free_entry(
ENTRY *headp,
TERMTYPE2 *tterm)
{ /* void */ }
#undef _nc_free_entries
void _nc_free_entries(
ENTRY *headp)
{ /* void */ }
#undef _nc_leaks_tinfo
void _nc_leaks_tinfo(void)
{ /* void */ }
+#undef exit_terminfo
+void exit_terminfo(
+ int code)
+ { /* void */ }
+
/* ./fallback.c */
#undef _nc_fallback2
const TERMTYPE2 *_nc_fallback2(
const char *name)
{ return(*(const TERMTYPE2 **)0); }
#undef _nc_fallback
const TERMTYPE *_nc_fallback(
const char *name)
{ return(*(const TERMTYPE **)0); }
/* ./tinfo/free_ttype.c */
#undef _nc_free_termtype
void _nc_free_termtype(
TERMTYPE *ptr)
{ /* void */ }
#undef _nc_free_termtype2
void _nc_free_termtype2(
TERMTYPE2 *ptr)
{ /* void */ }
#undef _nc_user_definable
NCURSES_BOOL _nc_user_definable;
#undef use_extended_names
int use_extended_names(
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/getenv_num.c */
#undef _nc_getenv_num
int _nc_getenv_num(
const char *name)
{ return(*(int *)0); }
#undef _nc_setenv_num
void _nc_setenv_num(
const char *name,
int value)
{ /* void */ }
/* ./tinfo/home_terminfo.c */
#undef _nc_home_terminfo
char *_nc_home_terminfo(void)
{ return(*(char **)0); }
/* ./tinfo/init_keytry.c */
#undef _nc_init_keytry
void _nc_init_keytry(
SCREEN *sp)
{ /* void */ }
/* ./tinfo/lib_acs.c */
#undef _nc_acs_map
chtype *_nc_acs_map(void)
{ return(*(chtype **)0); }
#undef _nc_init_acs_sp
void _nc_init_acs_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_init_acs
void _nc_init_acs(void)
{ /* void */ }
/* ./tinfo/lib_baudrate.c */
struct speed {
int given_speed;
int actual_speed;
};
#undef _nc_baudrate
int _nc_baudrate(
int OSpeed)
{ return(*(int *)0); }
#undef _nc_ospeed
int _nc_ospeed(
int BaudRate)
{ return(*(int *)0); }
#undef baudrate_sp
int baudrate_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef baudrate
int baudrate(void)
{ return(*(int *)0); }
/* ./tinfo/lib_cur_term.c */
#undef _nc_get_cur_term_sp
TERMINAL *_nc_get_cur_term_sp(
SCREEN *sp)
{ return(*(TERMINAL **)0); }
#undef _nc_get_cur_term
TERMINAL *_nc_get_cur_term(void)
{ return(*(TERMINAL **)0); }
#undef _nc_cur_term
TERMINAL *_nc_cur_term(void)
{ return(*(TERMINAL **)0); }
#undef set_curterm_sp
TERMINAL *set_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef set_curterm
TERMINAL *set_curterm(
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef del_curterm_sp
int del_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(int *)0); }
#undef del_curterm
int del_curterm(
TERMINAL *termp)
{ return(*(int *)0); }
/* ./tinfo/lib_data.c */
#undef _nc_stdscr
WINDOW *_nc_stdscr(void)
{ return(*(WINDOW **)0); }
#undef _nc_curscr
WINDOW *_nc_curscr(void)
{ return(*(WINDOW **)0); }
#undef _nc_newscr
WINDOW *_nc_newscr(void)
{ return(*(WINDOW **)0); }
#undef _nc_screen_chain
SCREEN *_nc_screen_chain;
#undef SP
SCREEN *SP;
#undef _nc_globals
NCURSES_GLOBALS _nc_globals;
#undef _nc_prescreen
NCURSES_PRESCREEN _nc_prescreen;
#undef _nc_screen_of
SCREEN *_nc_screen_of(
WINDOW *win)
{ return(*(SCREEN **)0); }
#undef _nc_init_pthreads
void _nc_init_pthreads(void)
{ /* void */ }
#undef _nc_mutex_init
void _nc_mutex_init(
pthread_mutex_t *obj)
{ /* void */ }
#undef _nc_mutex_lock
int _nc_mutex_lock(
pthread_mutex_t *obj)
{ return(*(int *)0); }
#undef _nc_mutex_trylock
int _nc_mutex_trylock(
pthread_mutex_t *obj)
{ return(*(int *)0); }
#undef _nc_mutex_unlock
int _nc_mutex_unlock(
pthread_mutex_t *obj)
{ return(*(int *)0); }
/* ./tinfo/lib_has_cap.c */
#undef has_ic_sp
NCURSES_BOOL has_ic_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_ic
NCURSES_BOOL has_ic(void)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il_sp
NCURSES_BOOL has_il_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il
NCURSES_BOOL has_il(void)
{ return(*(NCURSES_BOOL *)0); }
/* ./tinfo/lib_kernel.c */
#undef erasechar_sp
char erasechar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef erasechar
char erasechar(void)
{ return(*(char *)0); }
#undef killchar_sp
char killchar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef killchar
char killchar(void)
{ return(*(char *)0); }
#undef flushinp_sp
int flushinp_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef flushinp
int flushinp(void)
{ return(*(int *)0); }
/* ./lib_keyname.c */
struct kn { short offset; int code; };
#undef keyname_sp
const char *keyname_sp(
SCREEN *sp,
int c)
{ return(*(const char **)0); }
#undef keyname
const char *keyname(
int c)
{ return(*(const char **)0); }
/* ./tinfo/lib_longname.c */
#undef longname_sp
char *longname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef longname
char *longname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_napms.c */
#undef napms_sp
int napms_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef napms
int napms(
int ms)
{ return(*(int *)0); }
/* ./tinfo/lib_options.c */
#undef idlok
int idlok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef idcok
void idcok(
WINDOW *win,
NCURSES_BOOL flag)
{ /* void */ }
#undef halfdelay_sp
int halfdelay_sp(
SCREEN *sp,
int t)
{ return(*(int *)0); }
#undef halfdelay
int halfdelay(
int t)
{ return(*(int *)0); }
#undef nodelay
int nodelay(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef notimeout
int notimeout(
WINDOW *win,
NCURSES_BOOL f)
{ return(*(int *)0); }
#undef wtimeout
void wtimeout(
WINDOW *win,
int delay)
{ /* void */ }
#undef keypad
int keypad(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef meta
int meta(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef curs_set_sp
int curs_set_sp(
SCREEN *sp,
int vis)
{ return(*(int *)0); }
#undef curs_set
int curs_set(
int vis)
{ return(*(int *)0); }
#undef typeahead_sp
int typeahead_sp(
SCREEN *sp,
int fd)
{ return(*(int *)0); }
#undef typeahead
int typeahead(
int fd)
{ return(*(int *)0); }
#undef has_key_sp
int has_key_sp(
SCREEN *sp,
int keycode)
{ return(*(int *)0); }
#undef has_key
int has_key(
int keycode)
{ return(*(int *)0); }
#undef _nc_putp_flush_sp
int _nc_putp_flush_sp(
SCREEN *sp,
const char *name,
const char *value)
{ return(*(int *)0); }
#undef _nc_keypad
int _nc_keypad(
SCREEN *sp,
int flag)
{ return(*(int *)0); }
/* ./tinfo/lib_raw.c */
#undef raw_sp
int raw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef raw
int raw(void)
{ return(*(int *)0); }
#undef cbreak_sp
int cbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef cbreak
int cbreak(void)
{ return(*(int *)0); }
#undef qiflush_sp
void qiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef qiflush
void qiflush(void)
{ /* void */ }
#undef noraw_sp
int noraw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef noraw
int noraw(void)
{ return(*(int *)0); }
#undef nocbreak_sp
int nocbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nocbreak
int nocbreak(void)
{ return(*(int *)0); }
#undef noqiflush_sp
void noqiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef noqiflush
void noqiflush(void)
{ /* void */ }
#undef intrflush_sp
int intrflush_sp(
SCREEN *sp,
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef intrflush
int intrflush(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/lib_setup.c */
#undef _nc_ttytype
char *_nc_ttytype(void)
{ return(*(char **)0); }
#undef _nc_ptr_Lines
int *_nc_ptr_Lines(
SCREEN *sp)
{ return(*(int **)0); }
#undef _nc_LINES
int _nc_LINES(void)
{ return(*(int *)0); }
#undef _nc_ptr_Cols
int *_nc_ptr_Cols(
SCREEN *sp)
{ return(*(int **)0); }
#undef _nc_COLS
int _nc_COLS(void)
{ return(*(int *)0); }
#undef _nc_ptr_Tabsize
int *_nc_ptr_Tabsize(
SCREEN *sp)
{ return(*(int **)0); }
#undef _nc_TABSIZE
int _nc_TABSIZE(void)
{ return(*(int *)0); }
#undef set_tabsize_sp
int set_tabsize_sp(
SCREEN *sp,
int value)
{ return(*(int *)0); }
#undef set_tabsize
int set_tabsize(
int value)
{ return(*(int *)0); }
#undef _nc_handle_sigwinch
int _nc_handle_sigwinch(
SCREEN *sp)
{ return(*(int *)0); }
#undef use_env_sp
void use_env_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl_sp
void use_tioctl_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_env
void use_env(
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl
void use_tioctl(
NCURSES_BOOL f)
{ /* void */ }
#undef _nc_get_screensize
void _nc_get_screensize(
SCREEN *sp,
int *linep,
int *colp)
{ /* void */ }
#undef _nc_update_screensize
void _nc_update_screensize(
SCREEN *sp)
{ /* void */ }
#undef _nc_setup_tinfo
int _nc_setup_tinfo(
const char *const tn,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
#undef _nc_tinfo_cmdch
void _nc_tinfo_cmdch(
TERMINAL *termp,
int proto)
{ /* void */ }
#undef _nc_get_locale
char *_nc_get_locale(void)
{ return(*(char **)0); }
#undef _nc_unicode_locale
int _nc_unicode_locale(void)
{ return(*(int *)0); }
#undef _nc_locale_breaks_acs
int _nc_locale_breaks_acs(
TERMINAL *termp)
{ return(*(int *)0); }
#undef _nc_setupterm
int _nc_setupterm(
const char *tname,
int Filedes,
int *errret,
int reuse)
{ return(*(int *)0); }
#undef _nc_find_prescr
SCREEN *_nc_find_prescr(void)
{ return(*(SCREEN **)0); }
#undef _nc_forget_prescr
void _nc_forget_prescr(void)
{ /* void */ }
#undef new_prescr
SCREEN *new_prescr(void)
{ return(*(SCREEN **)0); }
#undef setupterm
int setupterm(
const char *tname,
int Filedes,
int *errret)
{ return(*(int *)0); }
/* ./tinfo/lib_termcap.c */
#undef UP
char *UP;
#undef BC
char *BC;
#undef tgetent_sp
int tgetent_sp(
SCREEN *sp,
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetent
int tgetent(
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetflag_sp
int tgetflag_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetflag
int tgetflag(
const char *id)
{ return(*(int *)0); }
#undef tgetnum_sp
int tgetnum_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetnum
int tgetnum(
const char *id)
{ return(*(int *)0); }
#undef tgetstr_sp
char *tgetstr_sp(
SCREEN *sp,
const char *id,
char **area)
{ return(*(char **)0); }
#undef tgetstr
char *tgetstr(
const char *id,
char **area)
{ return(*(char **)0); }
/* ./tinfo/lib_termname.c */
#undef termname_sp
char *termname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef termname
char *termname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_tgoto.c */
#undef tgoto
char *tgoto(
const char *string,
int x,
int y)
{ return(*(char **)0); }
/* ./tinfo/lib_ti.c */
#undef tigetflag_sp
int tigetflag_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetflag
int tigetflag(
const char *str)
{ return(*(int *)0); }
#undef tigetnum_sp
int tigetnum_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetnum
int tigetnum(
const char *str)
{ return(*(int *)0); }
#undef tigetstr_sp
char *tigetstr_sp(
SCREEN *sp,
const char *str)
{ return(*(char **)0); }
#undef tigetstr
char *tigetstr(
const char *str)
{ return(*(char **)0); }
/* ./tinfo/lib_tparm.c */
#undef _nc_tparm_err
int _nc_tparm_err;
#undef _nc_tparm_analyze
int _nc_tparm_analyze(
const char *string,
char *p_is_s[9],
int *_nc_popcount)
{ return(*(int *)0); }
#undef tparm
char *tparm(
const char *string,
...)
{ return(*(char **)0); }
#undef tiparm
char *tiparm(
const char *string,
...)
{ return(*(char **)0); }
+#undef _nc_tiparm
+char *_nc_tiparm(
+ int expected,
+ const char *string,
+ ...)
+ { return(*(char **)0); }
+
/* ./tinfo/lib_tputs.c */
#undef PC
char PC;
#undef ospeed
short ospeed;
#undef _nc_nulls_sent
int _nc_nulls_sent;
#undef _nc_set_no_padding
void _nc_set_no_padding(
SCREEN *sp)
{ /* void */ }
#undef delay_output_sp
int delay_output_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef delay_output
int delay_output(
int ms)
{ return(*(int *)0); }
#undef _nc_flush_sp
void _nc_flush_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_flush
void _nc_flush(void)
{ /* void */ }
#undef _nc_outch_sp
int _nc_outch_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_outch
int _nc_outch(
int ch)
{ return(*(int *)0); }
#undef _nc_putchar_sp
int _nc_putchar_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_putchar
int _nc_putchar(
int ch)
{ return(*(int *)0); }
#undef putp_sp
int putp_sp(
SCREEN *sp,
const char *string)
{ return(*(int *)0); }
#undef putp
int putp(
const char *string)
{ return(*(int *)0); }
#undef _nc_putp_sp
int _nc_putp_sp(
SCREEN *sp,
const char *name,
const char *string)
{ return(*(int *)0); }
#undef _nc_putp
int _nc_putp(
const char *name,
const char *string)
{ return(*(int *)0); }
#undef tputs_sp
int tputs_sp(
SCREEN *sp,
const char *string,
int affcnt,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef _nc_outc_wrapper
int _nc_outc_wrapper(
SCREEN *sp,
int c)
{ return(*(int *)0); }
#undef tputs
int tputs(
const char *string,
int affcnt,
int (*outc)(
int p1))
{ return(*(int *)0); }
/* ./trace/lib_trace.c */
#undef _nc_tracing
unsigned _nc_tracing;
#undef _nc__nc_tputs_trace
const char *_nc__nc_tputs_trace(void)
{ return(*(const char **)0); }
#undef _nc__nc_outchars
long _nc__nc_outchars(void)
{ return(*(long *)0); }
#undef _nc_set_tputs_trace
void _nc_set_tputs_trace(
const char *s)
{ /* void */ }
#undef _nc_count_outchars
void _nc_count_outchars(
long increment)
{ /* void */ }
+#undef curses_trace
+unsigned curses_trace(
+ unsigned tracelevel)
+ { return(*(unsigned *)0); }
+
#undef trace
void trace(
const unsigned int tracelevel)
{ /* void */ }
#undef _tracef
void _tracef(
const char *fmt,
...)
{ /* void */ }
#undef _nc_retrace_bool
NCURSES_BOOL _nc_retrace_bool(
int code)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_retrace_char
char _nc_retrace_char(
int code)
{ return(*(char *)0); }
#undef _nc_retrace_int
int _nc_retrace_int(
int code)
{ return(*(int *)0); }
#undef _nc_retrace_unsigned
unsigned _nc_retrace_unsigned(
unsigned code)
{ return(*(unsigned *)0); }
#undef _nc_retrace_ptr
char *_nc_retrace_ptr(
char *code)
{ return(*(char **)0); }
#undef _nc_retrace_cptr
const char *_nc_retrace_cptr(
const char *code)
{ return(*(const char **)0); }
#undef _nc_retrace_cvoid_ptr
const void *_nc_retrace_cvoid_ptr(
const void *code)
{ return(*(const void **)0); }
#undef _nc_retrace_void_ptr
void *_nc_retrace_void_ptr(
void *code)
{ return(*(void **)0); }
#undef _nc_retrace_sp
SCREEN *_nc_retrace_sp(
SCREEN *code)
{ return(*(SCREEN **)0); }
#undef _nc_retrace_win
WINDOW *_nc_retrace_win(
WINDOW *code)
{ return(*(WINDOW **)0); }
#undef _nc_fmt_funcptr
char *_nc_fmt_funcptr(
char *target,
const char *source,
size_t size)
{ return(*(char **)0); }
#undef _nc_use_tracef
int _nc_use_tracef(
unsigned mask)
{ return(*(int *)0); }
#undef _nc_locked_tracef
void _nc_locked_tracef(
const char *fmt,
...)
{ /* void */ }
/* ./trace/lib_traceatr.c */
#undef _traceattr2
char *_traceattr2(
int bufnum,
chtype newmode)
{ return(*(char **)0); }
#undef _traceattr
char *_traceattr(
attr_t newmode)
{ return(*(char **)0); }
#undef _nc_retrace_int_attr_t
int _nc_retrace_int_attr_t(
attr_t code)
{ return(*(int *)0); }
#undef _nc_retrace_attr_t
attr_t _nc_retrace_attr_t(
attr_t code)
{ return(*(attr_t *)0); }
#undef _nc_altcharset_name
const char *_nc_altcharset_name(
attr_t attr,
chtype ch)
{ return(*(const char **)0); }
#undef _tracechtype2
char *_tracechtype2(
int bufnum,
chtype ch)
{ return(*(char **)0); }
#undef _tracechtype
char *_tracechtype(
chtype ch)
{ return(*(char **)0); }
#undef _nc_retrace_chtype
chtype _nc_retrace_chtype(
chtype code)
{ return(*(chtype *)0); }
#undef _tracecchar_t2
char *_tracecchar_t2(
int bufnum,
const cchar_t *ch)
{ return(*(char **)0); }
#undef _tracecchar_t
char *_tracecchar_t(
const cchar_t *ch)
{ return(*(char **)0); }
/* ./trace/lib_tracebits.c */
#undef _nc_trace_ttymode
char *_nc_trace_ttymode(
struct termios *tty)
{ return(*(char **)0); }
#undef _nc_tracebits
char *_nc_tracebits(void)
{ return(*(char **)0); }
/* ./trace/lib_tracechr.c */
#undef _nc_tracechar
char *_nc_tracechar(
SCREEN *sp,
int ch)
{ return(*(char **)0); }
#undef _tracechar
char *_tracechar(
int ch)
{ return(*(char **)0); }
/* ./tinfo/lib_ttyflags.c */
#undef _nc_get_tty_mode_sp
int _nc_get_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_get_tty_mode
int _nc_get_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode_sp
int _nc_set_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode
int _nc_set_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef def_shell_mode_sp
int def_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_shell_mode
int def_shell_mode(void)
{ return(*(int *)0); }
#undef def_prog_mode_sp
int def_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_prog_mode
int def_prog_mode(void)
{ return(*(int *)0); }
#undef reset_prog_mode_sp
int reset_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_prog_mode
int reset_prog_mode(void)
{ return(*(int *)0); }
#undef reset_shell_mode_sp
int reset_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_shell_mode
int reset_shell_mode(void)
{ return(*(int *)0); }
#undef savetty_sp
int savetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef savetty
int savetty(void)
{ return(*(int *)0); }
#undef resetty_sp
int resetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef resetty
int resetty(void)
{ return(*(int *)0); }
/* ./tty/lib_twait.c */
#undef _nc_timed_wait
int _nc_timed_wait(
SCREEN *sp,
int mode,
int milliseconds,
int *timeleft)
{ return(*(int *)0); }
/* ./tinfo/name_match.c */
#undef _nc_first_name
char *_nc_first_name(
const char *const sp)
{ return(*(char **)0); }
#undef _nc_name_match
int _nc_name_match(
const char *const namelst,
const char *const name,
const char *const delim)
{ return(*(int *)0); }
/* ./names.c */
#undef _nc_boolnames
const char *const *_nc_boolnames(void)
{ return(*(const char **)0); }
#undef _nc_boolfnames
const char *const *_nc_boolfnames(void)
{ return(*(const char **)0); }
#undef _nc_numnames
const char *const *_nc_numnames(void)
{ return(*(const char **)0); }
#undef _nc_numfnames
const char *const *_nc_numfnames(void)
{ return(*(const char **)0); }
#undef _nc_strnames
const char *const *_nc_strnames(void)
{ return(*(const char **)0); }
#undef _nc_strfnames
const char *const *_nc_strfnames(void)
{ return(*(const char **)0); }
/* ./tinfo/obsolete.c */
#undef _nc_set_buffer_sp
void _nc_set_buffer_sp(
SCREEN *sp,
FILE *ofp,
int buffered)
{ /* void */ }
#undef _nc_set_buffer
void _nc_set_buffer(
FILE *ofp,
int buffered)
{ /* void */ }
/* ./tinfo/read_entry.c */
#undef _nc_init_termtype
void _nc_init_termtype(
TERMTYPE2 *const tp)
{ /* void */ }
#undef _nc_read_termtype
int _nc_read_termtype(
TERMTYPE2 *ptr,
char *buffer,
int limit)
{ return(*(int *)0); }
#undef _nc_read_file_entry
int _nc_read_file_entry(
const char *const filename,
TERMTYPE2 *ptr)
{ return(*(int *)0); }
#undef _nc_read_entry2
int _nc_read_entry2(
const char *const name,
char *const filename,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
#undef _nc_read_entry
int _nc_read_entry(
const char *const name,
char *const filename,
TERMTYPE *const tp)
{ return(*(int *)0); }
/* ./tinfo/read_termcap.c */
#undef _nc_read_termcap
void _nc_read_termcap(void)
{ /* void */ }
/* ./tinfo/strings.c */
#undef _nc_str_init
string_desc *_nc_str_init(
string_desc *dst,
char *src,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_null
string_desc *_nc_str_null(
string_desc *dst,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_copy
string_desc *_nc_str_copy(
string_desc *dst,
string_desc *src)
{ return(*(string_desc **)0); }
#undef _nc_safe_strcat
NCURSES_BOOL _nc_safe_strcat(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_safe_strcpy
NCURSES_BOOL _nc_safe_strcpy(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
/* ./trace/trace_buf.c */
#undef _nc_trace_buf
char *_nc_trace_buf(
int bufnum,
size_t want)
{ return(*(char **)0); }
#undef _nc_trace_bufcat
char *_nc_trace_bufcat(
int bufnum,
const char *value)
{ return(*(char **)0); }
/* ./trace/trace_tries.c */
#undef _nc_trace_tries
void _nc_trace_tries(
TRIES *tree)
{ /* void */ }
/* ./base/tries.c */
#undef _nc_expand_try
char *_nc_expand_try(
TRIES *tree,
unsigned code,
int *count,
size_t len)
{ return(*(char **)0); }
#undef _nc_remove_key
int _nc_remove_key(
TRIES **tree,
unsigned code)
{ return(*(int *)0); }
#undef _nc_remove_string
int _nc_remove_string(
TRIES **tree,
const char *string)
{ return(*(int *)0); }
/* ./tinfo/trim_sgr0.c */
#undef _nc_trim_sgr0
char *_nc_trim_sgr0(
TERMTYPE2 *tp)
{ return(*(char **)0); }
/* ./unctrl.c */
#undef unctrl_sp
const char *unctrl_sp(
SCREEN *sp,
chtype ch)
{ return(*(const char **)0); }
#undef unctrl
const char *unctrl(
chtype ch)
{ return(*(const char **)0); }
/* ./trace/visbuf.c */
#undef _nc_visbuf2
const char *_nc_visbuf2(
int bufnum,
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbuf
const char *_nc_visbuf(
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbufn
const char *_nc_visbufn(
const char *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viswbuf2
const char *_nc_viswbuf2(
int bufnum,
const wchar_t *buf)
{ return(*(const char **)0); }
#undef _nc_viswbuf
const char *_nc_viswbuf(
const wchar_t *buf)
{ return(*(const char **)0); }
#undef _nc_viswbufn
const char *_nc_viswbufn(
const wchar_t *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viswibuf
const char *_nc_viswibuf(
const wint_t *buf)
{ return(*(const char **)0); }
#undef _nc_viscbuf2
const char *_nc_viscbuf2(
int bufnum,
const cchar_t *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viscbuf
const char *_nc_viscbuf(
const cchar_t *buf,
int len)
{ return(*(const char **)0); }
/* ./base/define_key.c */
#undef define_key_sp
int define_key_sp(
SCREEN *sp,
const char *str,
int keycode)
{ return(*(int *)0); }
#undef define_key
int define_key(
const char *str,
int keycode)
{ return(*(int *)0); }
/* ./tinfo/hashed_db.c */
#undef _nc_hashed_db
void _nc_hashed_db(void)
{ /* void */ }
/* ./base/key_defined.c */
#undef key_defined_sp
int key_defined_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef key_defined
int key_defined(
const char *str)
{ return(*(int *)0); }
/* ./base/keybound.c */
#undef keybound_sp
char *keybound_sp(
SCREEN *sp,
int code,
int count)
{ return(*(char **)0); }
#undef keybound
char *keybound(
int code,
int count)
{ return(*(char **)0); }
/* ./base/keyok.c */
#undef keyok_sp
int keyok_sp(
SCREEN *sp,
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef keyok
int keyok(
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/version.c */
#undef curses_version
const char *curses_version(void)
{ return(*(const char **)0); }
diff --git a/contrib/ncurses/ncurses/llib-ltinfow b/contrib/ncurses/ncurses/llib-ltinfow
index 7a68d7066557..815e6b3e3c3e 100644
--- a/contrib/ncurses/ncurses/llib-ltinfow
+++ b/contrib/ncurses/ncurses/llib-ltinfow
@@ -1,1572 +1,1589 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 2012-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 2012-on *
****************************************************************************/
/* LINTLIBRARY */
/* ./tinfo/access.c */
#include <curses.priv.h>
#undef _nc_rootname
char *_nc_rootname(
char *path)
{ return(*(char **)0); }
#undef _nc_is_abs_path
NCURSES_BOOL _nc_is_abs_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_pathlast
unsigned _nc_pathlast(
const char *path)
{ return(*(unsigned *)0); }
#undef _nc_basename
char *_nc_basename(
char *path)
{ return(*(char **)0); }
#undef _nc_access
int _nc_access(
const char *path,
int mode)
{ return(*(int *)0); }
#undef _nc_is_dir_path
NCURSES_BOOL _nc_is_dir_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_is_file_path
NCURSES_BOOL _nc_is_file_path(
const char *path)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_env_access
int _nc_env_access(void)
{ return(*(int *)0); }
/* ./tinfo/add_tries.c */
#undef _nc_add_to_try
int _nc_add_to_try(
TRIES **tree,
const char *str,
unsigned code)
{ return(*(int *)0); }
/* ./tinfo/alloc_ttype.c */
#undef _nc_align_termtype
void _nc_align_termtype(
TERMTYPE2 *to,
TERMTYPE2 *from)
{ /* void */ }
#undef _nc_copy_termtype
void _nc_copy_termtype(
TERMTYPE *dst,
const TERMTYPE *src)
{ /* void */ }
#undef _nc_copy_termtype2
void _nc_copy_termtype2(
TERMTYPE2 *dst,
const TERMTYPE2 *src)
{ /* void */ }
#undef _nc_export_termtype2
void _nc_export_termtype2(
TERMTYPE *dst,
const TERMTYPE2 *src)
{ /* void */ }
/* ./codes.c */
#undef boolcodes
const char *const boolcodes[] = {0};
#undef numcodes
const char *const numcodes[] = {0};
#undef strcodes
const char *const strcodes[] = {0};
/* ./comp_captab.c */
#undef _nc_get_table
const struct name_table_entry *_nc_get_table(
NCURSES_BOOL termcap)
{ return(*(const struct name_table_entry **)0); }
#undef _nc_get_hash_table
const HashValue *_nc_get_hash_table(
NCURSES_BOOL termcap)
{ return(*(const HashValue **)0); }
#undef _nc_get_alias_table
const struct alias *_nc_get_alias_table(
NCURSES_BOOL termcap)
{ return(*(const struct alias **)0); }
#undef _nc_get_hash_info
const HashData *_nc_get_hash_info(
NCURSES_BOOL termcap)
{ return(*(const HashData **)0); }
/* ./tinfo/comp_error.c */
#undef _nc_suppress_warnings
NCURSES_BOOL _nc_suppress_warnings;
#undef _nc_curr_line
int _nc_curr_line;
#undef _nc_curr_col
int _nc_curr_col;
#undef _nc_get_source
const char *_nc_get_source(void)
{ return(*(const char **)0); }
#undef _nc_set_source
void _nc_set_source(
const char *const name)
{ /* void */ }
#undef _nc_set_type
void _nc_set_type(
const char *const name)
{ /* void */ }
#undef _nc_get_type
void _nc_get_type(
char *name)
{ /* void */ }
#undef _nc_warning
void _nc_warning(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_err_abort
void _nc_err_abort(
const char *const fmt,
...)
{ /* void */ }
#undef _nc_syserr_abort
void _nc_syserr_abort(
const char *const fmt,
...)
{ /* void */ }
/* ./tinfo/comp_hash.c */
#undef _nc_find_entry
struct name_table_entry const *_nc_find_entry(
const char *string,
const HashValue *hash_table)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_type_entry
struct name_table_entry const *_nc_find_type_entry(
const char *string,
int type,
NCURSES_BOOL termcap)
{ return(*(struct name_table_entry const **)0); }
#undef _nc_find_user_entry
struct user_table_entry const *_nc_find_user_entry(
const char *string)
{ return(*(struct user_table_entry const **)0); }
/* ./comp_userdefs.c */
#undef _nc_get_userdefs_table
const struct user_table_entry *_nc_get_userdefs_table(void)
{ return(*(const struct user_table_entry **)0); }
#undef _nc_get_hash_user
const HashData *_nc_get_hash_user(void)
{ return(*(const HashData **)0); }
/* ./tinfo/db_iterator.c */
#undef _nc_tic_dir
const char *_nc_tic_dir(
const char *path)
{ return(*(const char **)0); }
#undef _nc_keep_tic_dir
void _nc_keep_tic_dir(
const char *path)
{ /* void */ }
#undef _nc_last_db
void _nc_last_db(void)
{ /* void */ }
#undef _nc_next_db
const char *_nc_next_db(
DBDIRS *state,
int *offset)
{ return(*(const char **)0); }
#undef _nc_first_db
void _nc_first_db(
DBDIRS *state,
int *offset)
{ /* void */ }
/* ./tinfo/doalloc.c */
#undef _nc_doalloc
void *_nc_doalloc(
void *oldp,
size_t amount)
{ return(*(void **)0); }
/* ./tinfo/entries.c */
#undef _nc_head
ENTRY *_nc_head;
#undef _nc_tail
ENTRY *_nc_tail;
#undef _nc_free_entry
void _nc_free_entry(
ENTRY *headp,
TERMTYPE2 *tterm)
{ /* void */ }
#undef _nc_free_entries
void _nc_free_entries(
ENTRY *headp)
{ /* void */ }
#undef _nc_leaks_tinfo
void _nc_leaks_tinfo(void)
{ /* void */ }
+#undef exit_terminfo
+void exit_terminfo(
+ int code)
+ { /* void */ }
+
/* ./fallback.c */
#undef _nc_fallback2
const TERMTYPE2 *_nc_fallback2(
const char *name)
{ return(*(const TERMTYPE2 **)0); }
#undef _nc_fallback
const TERMTYPE *_nc_fallback(
const char *name)
{ return(*(const TERMTYPE **)0); }
/* ./tinfo/free_ttype.c */
#undef _nc_free_termtype
void _nc_free_termtype(
TERMTYPE *ptr)
{ /* void */ }
#undef _nc_free_termtype2
void _nc_free_termtype2(
TERMTYPE2 *ptr)
{ /* void */ }
#undef _nc_user_definable
NCURSES_BOOL _nc_user_definable;
#undef use_extended_names
int use_extended_names(
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/getenv_num.c */
#undef _nc_getenv_num
int _nc_getenv_num(
const char *name)
{ return(*(int *)0); }
#undef _nc_setenv_num
void _nc_setenv_num(
const char *name,
int value)
{ /* void */ }
/* ./tinfo/home_terminfo.c */
#undef _nc_home_terminfo
char *_nc_home_terminfo(void)
{ return(*(char **)0); }
/* ./tinfo/init_keytry.c */
#undef _nc_init_keytry
void _nc_init_keytry(
SCREEN *sp)
{ /* void */ }
/* ./tinfo/lib_acs.c */
#undef acs_map
chtype acs_map[128];
#undef _nc_init_acs_sp
void _nc_init_acs_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_init_acs
void _nc_init_acs(void)
{ /* void */ }
/* ./tinfo/lib_baudrate.c */
struct speed {
int given_speed;
int actual_speed;
};
#undef _nc_baudrate
int _nc_baudrate(
int OSpeed)
{ return(*(int *)0); }
#undef _nc_ospeed
int _nc_ospeed(
int BaudRate)
{ return(*(int *)0); }
#undef baudrate_sp
int baudrate_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef baudrate
int baudrate(void)
{ return(*(int *)0); }
/* ./tinfo/lib_cur_term.c */
#undef cur_term
TERMINAL *cur_term;
#undef set_curterm_sp
TERMINAL *set_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef set_curterm
TERMINAL *set_curterm(
TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef del_curterm_sp
int del_curterm_sp(
SCREEN *sp,
TERMINAL *termp)
{ return(*(int *)0); }
#undef del_curterm
int del_curterm(
TERMINAL *termp)
{ return(*(int *)0); }
/* ./tinfo/lib_data.c */
#undef stdscr
WINDOW *stdscr;
#undef curscr
WINDOW *curscr;
#undef newscr
WINDOW *newscr;
#undef _nc_screen_chain
SCREEN *_nc_screen_chain;
#undef SP
SCREEN *SP;
#undef _nc_globals
NCURSES_GLOBALS _nc_globals;
#undef _nc_prescreen
NCURSES_PRESCREEN _nc_prescreen;
#undef _nc_screen_of
SCREEN *_nc_screen_of(
WINDOW *win)
{ return(*(SCREEN **)0); }
/* ./tinfo/lib_has_cap.c */
#undef has_ic_sp
NCURSES_BOOL has_ic_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_ic
NCURSES_BOOL has_ic(void)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il_sp
NCURSES_BOOL has_il_sp(
SCREEN *sp)
{ return(*(NCURSES_BOOL *)0); }
#undef has_il
NCURSES_BOOL has_il(void)
{ return(*(NCURSES_BOOL *)0); }
/* ./tinfo/lib_kernel.c */
#undef erasechar_sp
char erasechar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef erasechar
char erasechar(void)
{ return(*(char *)0); }
#undef killchar_sp
char killchar_sp(
SCREEN *sp)
{ return(*(char *)0); }
#undef killchar
char killchar(void)
{ return(*(char *)0); }
#undef flushinp_sp
int flushinp_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef flushinp
int flushinp(void)
{ return(*(int *)0); }
/* ./lib_keyname.c */
struct kn { short offset; int code; };
#undef keyname_sp
const char *keyname_sp(
SCREEN *sp,
int c)
{ return(*(const char **)0); }
#undef keyname
const char *keyname(
int c)
{ return(*(const char **)0); }
/* ./tinfo/lib_longname.c */
#undef longname_sp
char *longname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef longname
char *longname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_napms.c */
#undef napms_sp
int napms_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef napms
int napms(
int ms)
{ return(*(int *)0); }
/* ./tinfo/lib_options.c */
#undef idlok
int idlok(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef idcok
void idcok(
WINDOW *win,
NCURSES_BOOL flag)
{ /* void */ }
#undef halfdelay_sp
int halfdelay_sp(
SCREEN *sp,
int t)
{ return(*(int *)0); }
#undef halfdelay
int halfdelay(
int t)
{ return(*(int *)0); }
#undef nodelay
int nodelay(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef notimeout
int notimeout(
WINDOW *win,
NCURSES_BOOL f)
{ return(*(int *)0); }
#undef wtimeout
void wtimeout(
WINDOW *win,
int delay)
{ /* void */ }
#undef keypad
int keypad(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef meta
int meta(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef curs_set_sp
int curs_set_sp(
SCREEN *sp,
int vis)
{ return(*(int *)0); }
#undef curs_set
int curs_set(
int vis)
{ return(*(int *)0); }
#undef typeahead_sp
int typeahead_sp(
SCREEN *sp,
int fd)
{ return(*(int *)0); }
#undef typeahead
int typeahead(
int fd)
{ return(*(int *)0); }
#undef has_key_sp
int has_key_sp(
SCREEN *sp,
int keycode)
{ return(*(int *)0); }
#undef has_key
int has_key(
int keycode)
{ return(*(int *)0); }
#undef _nc_putp_flush_sp
int _nc_putp_flush_sp(
SCREEN *sp,
const char *name,
const char *value)
{ return(*(int *)0); }
#undef _nc_keypad
int _nc_keypad(
SCREEN *sp,
int flag)
{ return(*(int *)0); }
/* ./tinfo/lib_raw.c */
#undef raw_sp
int raw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef raw
int raw(void)
{ return(*(int *)0); }
#undef cbreak_sp
int cbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef cbreak
int cbreak(void)
{ return(*(int *)0); }
#undef qiflush_sp
void qiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef qiflush
void qiflush(void)
{ /* void */ }
#undef noraw_sp
int noraw_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef noraw
int noraw(void)
{ return(*(int *)0); }
#undef nocbreak_sp
int nocbreak_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef nocbreak
int nocbreak(void)
{ return(*(int *)0); }
#undef noqiflush_sp
void noqiflush_sp(
SCREEN *sp)
{ /* void */ }
#undef noqiflush
void noqiflush(void)
{ /* void */ }
#undef intrflush_sp
int intrflush_sp(
SCREEN *sp,
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef intrflush
int intrflush(
WINDOW *win,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./tinfo/lib_setup.c */
#undef ttytype
char ttytype[256];
#undef LINES
int LINES;
#undef COLS
int COLS;
#undef TABSIZE
int TABSIZE;
#undef set_tabsize_sp
int set_tabsize_sp(
SCREEN *sp,
int value)
{ return(*(int *)0); }
#undef set_tabsize
int set_tabsize(
int value)
{ return(*(int *)0); }
#undef _nc_handle_sigwinch
int _nc_handle_sigwinch(
SCREEN *sp)
{ return(*(int *)0); }
#undef use_env_sp
void use_env_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl_sp
void use_tioctl_sp(
SCREEN *sp,
NCURSES_BOOL f)
{ /* void */ }
#undef use_env
void use_env(
NCURSES_BOOL f)
{ /* void */ }
#undef use_tioctl
void use_tioctl(
NCURSES_BOOL f)
{ /* void */ }
#undef _nc_get_screensize
void _nc_get_screensize(
SCREEN *sp,
int *linep,
int *colp)
{ /* void */ }
#undef _nc_update_screensize
void _nc_update_screensize(
SCREEN *sp)
{ /* void */ }
#undef _nc_setup_tinfo
int _nc_setup_tinfo(
const char *const tn,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
#undef _nc_tinfo_cmdch
void _nc_tinfo_cmdch(
TERMINAL *termp,
int proto)
{ /* void */ }
#undef _nc_get_locale
char *_nc_get_locale(void)
{ return(*(char **)0); }
#undef _nc_unicode_locale
int _nc_unicode_locale(void)
{ return(*(int *)0); }
#undef _nc_locale_breaks_acs
int _nc_locale_breaks_acs(
TERMINAL *termp)
{ return(*(int *)0); }
#undef _nc_setupterm
int _nc_setupterm(
const char *tname,
int Filedes,
int *errret,
int reuse)
{ return(*(int *)0); }
#undef new_prescr
SCREEN *new_prescr(void)
{ return(*(SCREEN **)0); }
#undef setupterm
int setupterm(
const char *tname,
int Filedes,
int *errret)
{ return(*(int *)0); }
/* ./tinfo/lib_termcap.c */
#undef UP
char *UP;
#undef BC
char *BC;
#undef tgetent_sp
int tgetent_sp(
SCREEN *sp,
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetent
int tgetent(
char *bufp,
const char *name)
{ return(*(int *)0); }
#undef tgetflag_sp
int tgetflag_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetflag
int tgetflag(
const char *id)
{ return(*(int *)0); }
#undef tgetnum_sp
int tgetnum_sp(
SCREEN *sp,
const char *id)
{ return(*(int *)0); }
#undef tgetnum
int tgetnum(
const char *id)
{ return(*(int *)0); }
#undef tgetstr_sp
char *tgetstr_sp(
SCREEN *sp,
const char *id,
char **area)
{ return(*(char **)0); }
#undef tgetstr
char *tgetstr(
const char *id,
char **area)
{ return(*(char **)0); }
/* ./tinfo/lib_termname.c */
#undef termname_sp
char *termname_sp(
SCREEN *sp)
{ return(*(char **)0); }
#undef termname
char *termname(void)
{ return(*(char **)0); }
/* ./tinfo/lib_tgoto.c */
#undef tgoto
char *tgoto(
const char *string,
int x,
int y)
{ return(*(char **)0); }
/* ./tinfo/lib_ti.c */
#undef tigetflag_sp
int tigetflag_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetflag
int tigetflag(
const char *str)
{ return(*(int *)0); }
#undef tigetnum_sp
int tigetnum_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef tigetnum
int tigetnum(
const char *str)
{ return(*(int *)0); }
#undef tigetstr_sp
char *tigetstr_sp(
SCREEN *sp,
const char *str)
{ return(*(char **)0); }
#undef tigetstr
char *tigetstr(
const char *str)
{ return(*(char **)0); }
/* ./tinfo/lib_tparm.c */
#undef _nc_tparm_err
int _nc_tparm_err;
#undef _nc_tparm_analyze
int _nc_tparm_analyze(
const char *string,
char *p_is_s[9],
int *_nc_popcount)
{ return(*(int *)0); }
#undef tparm
char *tparm(
const char *string,
...)
{ return(*(char **)0); }
#undef tiparm
char *tiparm(
const char *string,
...)
{ return(*(char **)0); }
+#undef _nc_tiparm
+char *_nc_tiparm(
+ int expected,
+ const char *string,
+ ...)
+ { return(*(char **)0); }
+
/* ./tinfo/lib_tputs.c */
#undef PC
char PC;
#undef ospeed
short ospeed;
#undef _nc_nulls_sent
int _nc_nulls_sent;
#undef _nc_set_no_padding
void _nc_set_no_padding(
SCREEN *sp)
{ /* void */ }
#undef delay_output_sp
int delay_output_sp(
SCREEN *sp,
int ms)
{ return(*(int *)0); }
#undef delay_output
int delay_output(
int ms)
{ return(*(int *)0); }
#undef _nc_flush_sp
void _nc_flush_sp(
SCREEN *sp)
{ /* void */ }
#undef _nc_flush
void _nc_flush(void)
{ /* void */ }
#undef _nc_outch_sp
int _nc_outch_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_outch
int _nc_outch(
int ch)
{ return(*(int *)0); }
#undef _nc_putchar_sp
int _nc_putchar_sp(
SCREEN *sp,
int ch)
{ return(*(int *)0); }
#undef _nc_putchar
int _nc_putchar(
int ch)
{ return(*(int *)0); }
#undef putp_sp
int putp_sp(
SCREEN *sp,
const char *string)
{ return(*(int *)0); }
#undef putp
int putp(
const char *string)
{ return(*(int *)0); }
#undef _nc_putp_sp
int _nc_putp_sp(
SCREEN *sp,
const char *name,
const char *string)
{ return(*(int *)0); }
#undef _nc_putp
int _nc_putp(
const char *name,
const char *string)
{ return(*(int *)0); }
#undef tputs_sp
int tputs_sp(
SCREEN *sp,
const char *string,
int affcnt,
NCURSES_OUTC_sp outc)
{ return(*(int *)0); }
#undef _nc_outc_wrapper
int _nc_outc_wrapper(
SCREEN *sp,
int c)
{ return(*(int *)0); }
#undef tputs
int tputs(
const char *string,
int affcnt,
int (*outc)(
int p1))
{ return(*(int *)0); }
/* ./trace/lib_trace.c */
#undef _nc_tracing
unsigned _nc_tracing;
#undef _nc_tputs_trace
const char *_nc_tputs_trace = {0};
#undef _nc_outchars
long _nc_outchars;
+#undef curses_trace
+unsigned curses_trace(
+ unsigned tracelevel)
+ { return(*(unsigned *)0); }
+
#undef trace
void trace(
const unsigned int tracelevel)
{ /* void */ }
#undef _tracef
void _tracef(
const char *fmt,
...)
{ /* void */ }
#undef _nc_retrace_bool
NCURSES_BOOL _nc_retrace_bool(
int code)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_retrace_char
char _nc_retrace_char(
int code)
{ return(*(char *)0); }
#undef _nc_retrace_int
int _nc_retrace_int(
int code)
{ return(*(int *)0); }
#undef _nc_retrace_unsigned
unsigned _nc_retrace_unsigned(
unsigned code)
{ return(*(unsigned *)0); }
#undef _nc_retrace_ptr
char *_nc_retrace_ptr(
char *code)
{ return(*(char **)0); }
#undef _nc_retrace_cptr
const char *_nc_retrace_cptr(
const char *code)
{ return(*(const char **)0); }
#undef _nc_retrace_cvoid_ptr
const void *_nc_retrace_cvoid_ptr(
const void *code)
{ return(*(const void **)0); }
#undef _nc_retrace_void_ptr
void *_nc_retrace_void_ptr(
void *code)
{ return(*(void **)0); }
#undef _nc_retrace_sp
SCREEN *_nc_retrace_sp(
SCREEN *code)
{ return(*(SCREEN **)0); }
#undef _nc_retrace_win
WINDOW *_nc_retrace_win(
WINDOW *code)
{ return(*(WINDOW **)0); }
#undef _nc_fmt_funcptr
char *_nc_fmt_funcptr(
char *target,
const char *source,
size_t size)
{ return(*(char **)0); }
/* ./trace/lib_traceatr.c */
#undef _traceattr2
char *_traceattr2(
int bufnum,
chtype newmode)
{ return(*(char **)0); }
#undef _traceattr
char *_traceattr(
attr_t newmode)
{ return(*(char **)0); }
#undef _nc_retrace_int_attr_t
int _nc_retrace_int_attr_t(
attr_t code)
{ return(*(int *)0); }
#undef _nc_retrace_attr_t
attr_t _nc_retrace_attr_t(
attr_t code)
{ return(*(attr_t *)0); }
#undef _nc_altcharset_name
const char *_nc_altcharset_name(
attr_t attr,
chtype ch)
{ return(*(const char **)0); }
#undef _tracechtype2
char *_tracechtype2(
int bufnum,
chtype ch)
{ return(*(char **)0); }
#undef _tracechtype
char *_tracechtype(
chtype ch)
{ return(*(char **)0); }
#undef _nc_retrace_chtype
chtype _nc_retrace_chtype(
chtype code)
{ return(*(chtype *)0); }
#undef _tracecchar_t2
char *_tracecchar_t2(
int bufnum,
const cchar_t *ch)
{ return(*(char **)0); }
#undef _tracecchar_t
char *_tracecchar_t(
const cchar_t *ch)
{ return(*(char **)0); }
/* ./trace/lib_tracebits.c */
#undef _nc_trace_ttymode
char *_nc_trace_ttymode(
struct termios *tty)
{ return(*(char **)0); }
#undef _nc_tracebits
char *_nc_tracebits(void)
{ return(*(char **)0); }
/* ./trace/lib_tracechr.c */
#undef _nc_tracechar
char *_nc_tracechar(
SCREEN *sp,
int ch)
{ return(*(char **)0); }
#undef _tracechar
char *_tracechar(
int ch)
{ return(*(char **)0); }
/* ./tinfo/lib_ttyflags.c */
#undef _nc_get_tty_mode_sp
int _nc_get_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_get_tty_mode
int _nc_get_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode_sp
int _nc_set_tty_mode_sp(
SCREEN *sp,
struct termios *buf)
{ return(*(int *)0); }
#undef _nc_set_tty_mode
int _nc_set_tty_mode(
struct termios *buf)
{ return(*(int *)0); }
#undef def_shell_mode_sp
int def_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_shell_mode
int def_shell_mode(void)
{ return(*(int *)0); }
#undef def_prog_mode_sp
int def_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef def_prog_mode
int def_prog_mode(void)
{ return(*(int *)0); }
#undef reset_prog_mode_sp
int reset_prog_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_prog_mode
int reset_prog_mode(void)
{ return(*(int *)0); }
#undef reset_shell_mode_sp
int reset_shell_mode_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef reset_shell_mode
int reset_shell_mode(void)
{ return(*(int *)0); }
#undef savetty_sp
int savetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef savetty
int savetty(void)
{ return(*(int *)0); }
#undef resetty_sp
int resetty_sp(
SCREEN *sp)
{ return(*(int *)0); }
#undef resetty
int resetty(void)
{ return(*(int *)0); }
/* ./tty/lib_twait.c */
#undef _nc_timed_wait
int _nc_timed_wait(
SCREEN *sp,
int mode,
int milliseconds,
int *timeleft)
{ return(*(int *)0); }
/* ./tinfo/name_match.c */
#undef _nc_first_name
char *_nc_first_name(
const char *const sp)
{ return(*(char **)0); }
#undef _nc_name_match
int _nc_name_match(
const char *const namelst,
const char *const name,
const char *const delim)
{ return(*(int *)0); }
/* ./names.c */
#undef boolnames
const char *const boolnames[] = {0};
#undef boolfnames
const char *const boolfnames[] = {0};
#undef numnames
const char *const numnames[] = {0};
#undef numfnames
const char *const numfnames[] = {0};
#undef strnames
const char *const strnames[] = {0};
#undef strfnames
const char *const strfnames[] = {0};
/* ./tinfo/obsolete.c */
#undef _nc_set_buffer_sp
void _nc_set_buffer_sp(
SCREEN *sp,
FILE *ofp,
int buffered)
{ /* void */ }
#undef _nc_set_buffer
void _nc_set_buffer(
FILE *ofp,
int buffered)
{ /* void */ }
/* ./tinfo/read_entry.c */
#undef _nc_init_termtype
void _nc_init_termtype(
TERMTYPE2 *const tp)
{ /* void */ }
#undef _nc_read_termtype
int _nc_read_termtype(
TERMTYPE2 *ptr,
char *buffer,
int limit)
{ return(*(int *)0); }
#undef _nc_read_file_entry
int _nc_read_file_entry(
const char *const filename,
TERMTYPE2 *ptr)
{ return(*(int *)0); }
#undef _nc_read_entry2
int _nc_read_entry2(
const char *const name,
char *const filename,
TERMTYPE2 *const tp)
{ return(*(int *)0); }
#undef _nc_read_entry
int _nc_read_entry(
const char *const name,
char *const filename,
TERMTYPE *const tp)
{ return(*(int *)0); }
/* ./tinfo/read_termcap.c */
#undef _nc_read_termcap
void _nc_read_termcap(void)
{ /* void */ }
/* ./tinfo/strings.c */
#undef _nc_str_init
string_desc *_nc_str_init(
string_desc *dst,
char *src,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_null
string_desc *_nc_str_null(
string_desc *dst,
size_t len)
{ return(*(string_desc **)0); }
#undef _nc_str_copy
string_desc *_nc_str_copy(
string_desc *dst,
string_desc *src)
{ return(*(string_desc **)0); }
#undef _nc_safe_strcat
NCURSES_BOOL _nc_safe_strcat(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
#undef _nc_safe_strcpy
NCURSES_BOOL _nc_safe_strcpy(
string_desc *dst,
const char *src)
{ return(*(NCURSES_BOOL *)0); }
/* ./trace/trace_buf.c */
#undef _nc_trace_buf
char *_nc_trace_buf(
int bufnum,
size_t want)
{ return(*(char **)0); }
#undef _nc_trace_bufcat
char *_nc_trace_bufcat(
int bufnum,
const char *value)
{ return(*(char **)0); }
/* ./trace/trace_tries.c */
#undef _nc_trace_tries
void _nc_trace_tries(
TRIES *tree)
{ /* void */ }
/* ./base/tries.c */
#undef _nc_expand_try
char *_nc_expand_try(
TRIES *tree,
unsigned code,
int *count,
size_t len)
{ return(*(char **)0); }
#undef _nc_remove_key
int _nc_remove_key(
TRIES **tree,
unsigned code)
{ return(*(int *)0); }
#undef _nc_remove_string
int _nc_remove_string(
TRIES **tree,
const char *string)
{ return(*(int *)0); }
/* ./tinfo/trim_sgr0.c */
#undef _nc_trim_sgr0
char *_nc_trim_sgr0(
TERMTYPE2 *tp)
{ return(*(char **)0); }
/* ./unctrl.c */
#undef unctrl_sp
const char *unctrl_sp(
SCREEN *sp,
chtype ch)
{ return(*(const char **)0); }
#undef unctrl
const char *unctrl(
chtype ch)
{ return(*(const char **)0); }
/* ./trace/visbuf.c */
#undef _nc_visbuf2
const char *_nc_visbuf2(
int bufnum,
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbuf
const char *_nc_visbuf(
const char *buf)
{ return(*(const char **)0); }
#undef _nc_visbufn
const char *_nc_visbufn(
const char *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viswbuf2
const char *_nc_viswbuf2(
int bufnum,
const wchar_t *buf)
{ return(*(const char **)0); }
#undef _nc_viswbuf
const char *_nc_viswbuf(
const wchar_t *buf)
{ return(*(const char **)0); }
#undef _nc_viswbufn
const char *_nc_viswbufn(
const wchar_t *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viswibuf
const char *_nc_viswibuf(
const wint_t *buf)
{ return(*(const char **)0); }
#undef _nc_viscbuf2
const char *_nc_viscbuf2(
int bufnum,
const cchar_t *buf,
int len)
{ return(*(const char **)0); }
#undef _nc_viscbuf
const char *_nc_viscbuf(
const cchar_t *buf,
int len)
{ return(*(const char **)0); }
/* ./base/define_key.c */
#undef define_key_sp
int define_key_sp(
SCREEN *sp,
const char *str,
int keycode)
{ return(*(int *)0); }
#undef define_key
int define_key(
const char *str,
int keycode)
{ return(*(int *)0); }
/* ./tinfo/hashed_db.c */
#undef _nc_hashed_db
void _nc_hashed_db(void)
{ /* void */ }
/* ./base/key_defined.c */
#undef key_defined_sp
int key_defined_sp(
SCREEN *sp,
const char *str)
{ return(*(int *)0); }
#undef key_defined
int key_defined(
const char *str)
{ return(*(int *)0); }
/* ./base/keybound.c */
#undef keybound_sp
char *keybound_sp(
SCREEN *sp,
int code,
int count)
{ return(*(char **)0); }
#undef keybound
char *keybound(
int code,
int count)
{ return(*(char **)0); }
/* ./base/keyok.c */
#undef keyok_sp
int keyok_sp(
SCREEN *sp,
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
#undef keyok
int keyok(
int c,
NCURSES_BOOL flag)
{ return(*(int *)0); }
/* ./base/version.c */
#undef curses_version
const char *curses_version(void)
{ return(*(const char **)0); }
diff --git a/contrib/ncurses/ncurses/modules b/contrib/ncurses/ncurses/modules
index f4c3e8b763dc..e111712e16b0 100644
--- a/contrib/ncurses/ncurses/modules
+++ b/contrib/ncurses/ncurses/modules
@@ -1,247 +1,253 @@
-# $Id: modules,v 1.124 2020/02/02 23:34:34 tom Exp $
+# $Id: modules,v 1.127 2020/09/12 17:58:12 tom Exp $
##############################################################################
# Copyright 2019,2020 Thomas E. Dickey #
# Copyright 1998-2013,2017 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey 1996-on
#
@ base
# Library objects
hardscroll lib $(serial) $(HEADER_DEPS)
hashmap lib $(serial) $(HEADER_DEPS)
lib_addch lib $(base) $(HEADER_DEPS)
lib_addstr lib $(base) $(HEADER_DEPS)
lib_beep lib $(base) $(HEADER_DEPS)
lib_bkgd lib $(base) $(HEADER_DEPS)
lib_box lib $(base) $(HEADER_DEPS)
lib_chgat lib $(base) $(HEADER_DEPS)
lib_clear lib $(base) $(HEADER_DEPS)
lib_clearok lib $(base) $(HEADER_DEPS)
lib_clrbot lib $(base) $(HEADER_DEPS)
lib_clreol lib $(base) $(HEADER_DEPS)
lib_color lib $(base) $(HEADER_DEPS) $(INCDIR)/tic.h $(srcdir)/new_pair.h
lib_colorset lib $(base) $(HEADER_DEPS)
lib_delch lib $(base) $(HEADER_DEPS)
lib_delwin lib $(base) $(HEADER_DEPS)
lib_echo lib $(base) $(HEADER_DEPS)
lib_endwin lib $(base) $(HEADER_DEPS)
lib_erase lib $(base) $(HEADER_DEPS)
lib_flash lib $(base) $(HEADER_DEPS)
lib_gen lib . $(HEADER_DEPS)
lib_getch lib $(base) $(HEADER_DEPS) $(srcdir)/fifo_defs.h
lib_getstr lib $(base) $(HEADER_DEPS)
lib_hline lib $(base) $(HEADER_DEPS)
lib_immedok lib $(base) $(HEADER_DEPS)
lib_inchstr lib $(base) $(HEADER_DEPS)
lib_initscr lib $(base) $(HEADER_DEPS)
lib_insch lib $(base) $(HEADER_DEPS)
lib_insdel lib $(base) $(HEADER_DEPS)
lib_insnstr lib $(base) $(HEADER_DEPS)
lib_instr lib $(base) $(HEADER_DEPS)
lib_isendwin lib $(base) $(HEADER_DEPS)
lib_leaveok lib $(base) $(HEADER_DEPS)
lib_mouse lib $(base) $(HEADER_DEPS) $(INCDIR)/tic.h
lib_move lib $(base) $(HEADER_DEPS)
lib_mvcur lib $(serial) $(HEADER_DEPS) $(INCDIR)/tic.h $(srcdir)/../progs/dump_entry.h
lib_mvwin lib $(base) $(HEADER_DEPS)
lib_newterm lib $(base) $(HEADER_DEPS) $(INCDIR)/tic.h
lib_newwin lib $(base) $(HEADER_DEPS)
lib_nl lib $(base) $(HEADER_DEPS)
lib_overlay lib $(base) $(HEADER_DEPS)
lib_pad lib $(base) $(HEADER_DEPS)
lib_printw lib $(base) $(HEADER_DEPS)
lib_redrawln lib $(base) $(HEADER_DEPS)
lib_refresh lib $(base) $(HEADER_DEPS)
lib_restart lib $(base) $(HEADER_DEPS)
lib_scanw lib $(base) $(HEADER_DEPS)
lib_screen lib $(base) $(HEADER_DEPS)
lib_scroll lib $(base) $(HEADER_DEPS)
lib_scrollok lib $(base) $(HEADER_DEPS)
lib_scrreg lib $(base) $(HEADER_DEPS)
lib_set_term lib $(base) $(HEADER_DEPS) $(INCDIR)/tic.h
lib_slk lib $(base) $(HEADER_DEPS)
lib_slkatr_set lib $(base) $(HEADER_DEPS)
lib_slkatrof lib $(base) $(HEADER_DEPS)
lib_slkatron lib $(base) $(HEADER_DEPS)
lib_slkatrset lib $(base) $(HEADER_DEPS)
lib_slkattr lib $(base) $(HEADER_DEPS)
lib_slkclear lib $(base) $(HEADER_DEPS)
lib_slkcolor lib $(base) $(HEADER_DEPS)
lib_slkinit lib $(base) $(HEADER_DEPS)
lib_slklab lib $(base) $(HEADER_DEPS)
lib_slkrefr lib $(base) $(HEADER_DEPS)
lib_slkset lib $(base) $(HEADER_DEPS)
lib_slktouch lib $(base) $(HEADER_DEPS)
lib_touch lib $(base) $(HEADER_DEPS)
lib_tracedmp lib $(trace) $(HEADER_DEPS)
lib_tracemse lib $(trace) $(HEADER_DEPS)
lib_tstp lib $(serial) $(HEADER_DEPS) $(srcdir)/SigAction.h
lib_ungetch lib $(base) $(HEADER_DEPS) $(srcdir)/fifo_defs.h
lib_vidattr lib $(serial) $(HEADER_DEPS)
lib_vline lib $(base) $(HEADER_DEPS)
lib_wattroff lib $(base) $(HEADER_DEPS)
lib_wattron lib $(base) $(HEADER_DEPS)
lib_winch lib $(base) $(HEADER_DEPS)
lib_window lib $(base) $(HEADER_DEPS)
link_test lib . $(HEADER_DEPS)
nc_panel lib $(base) $(HEADER_DEPS)
safe_sprintf lib $(base) $(HEADER_DEPS)
tty_update lib $(serial) $(HEADER_DEPS)
varargs lib $(trace) $(HEADER_DEPS)
# Modules for porting
vsscanf lib $(base) $(HEADER_DEPS)
# actually an extension, but with its own configure option (--disable-leaks)
lib_freeall lib $(base) $(HEADER_DEPS) $(INCDIR)/tic.h
# XSI extensions to the base library (wide-character)
@ widechar
charable lib $(wide) $(HEADER_DEPS)
lib_add_wch lib $(wide) $(HEADER_DEPS)
lib_box_set lib $(wide) $(HEADER_DEPS)
lib_cchar lib $(wide) $(HEADER_DEPS) $(srcdir)/new_pair.h
lib_erasewchar lib $(wide) $(HEADER_DEPS)
lib_get_wch lib $(wide) $(HEADER_DEPS)
lib_get_wstr lib $(wide) $(HEADER_DEPS)
lib_hline_set lib $(wide) $(HEADER_DEPS)
lib_in_wch lib $(wide) $(HEADER_DEPS)
lib_in_wchnstr lib $(wide) $(HEADER_DEPS)
lib_ins_wch lib $(wide) $(HEADER_DEPS)
lib_inwstr lib $(wide) $(HEADER_DEPS)
lib_key_name lib $(wide) $(HEADER_DEPS)
lib_pecho_wchar lib $(wide) $(HEADER_DEPS)
lib_slk_wset lib $(wide) $(HEADER_DEPS)
lib_unget_wch lib $(wide) $(HEADER_DEPS)
lib_vid_attr lib $(wide) $(HEADER_DEPS)
lib_vline_set lib $(wide) $(HEADER_DEPS)
lib_wacs lib $(wide) $(HEADER_DEPS)
lib_wunctrl lib $(wide) $(HEADER_DEPS)
# Extensions to the base library
@ ext_funcs
expanded lib . $(HEADER_DEPS)
legacy_coding lib $(base) $(HEADER_DEPS)
lib_dft_fgbg lib $(base) $(HEADER_DEPS)
lib_print lib $(tinfo) $(HEADER_DEPS)
new_pair lib $(base) $(HEADER_DEPS) $(srcdir)/new_pair.h
resizeterm lib $(base) $(HEADER_DEPS)
trace_xnames lib $(trace) $(HEADER_DEPS)
use_screen lib $(tinfo) $(HEADER_DEPS)
use_window lib $(base) $(HEADER_DEPS)
wresize lib $(base) $(HEADER_DEPS)
# Support for termcap (and tic, etc.), which can be a separate library
@ termlib
access lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
add_tries lib $(tinfo) $(HEADER_DEPS)
alloc_ttype lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
codes lib . $(HEADER_DEPS)
comp_captab lib . $(HEADER_DEPS) $(INCDIR)/tic.h ../include/hashsize.h
comp_error lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
comp_hash lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h ../include/hashsize.h
comp_userdefs lib . $(HEADER_DEPS) $(INCDIR)/tic.h ../include/hashsize.h
db_iterator lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
doalloc lib $(tinfo) $(HEADER_DEPS)
entries lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
fallback lib . $(HEADER_DEPS)
free_ttype lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
getenv_num lib $(tinfo) $(HEADER_DEPS)
home_terminfo lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
init_keytry lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h init_keytry.h
lib_acs lib $(tinfo) $(HEADER_DEPS)
lib_baudrate lib $(tinfo) $(HEADER_DEPS) ../include/termcap.h
lib_cur_term lib $(tinfo) $(HEADER_DEPS) ../include/termcap.h
lib_data lib $(tinfo) $(HEADER_DEPS)
lib_has_cap lib $(tinfo) $(HEADER_DEPS)
lib_kernel lib $(tinfo) $(HEADER_DEPS)
lib_keyname lib . $(HEADER_DEPS) $(INCDIR)/tic.h
lib_longname lib $(tinfo) $(HEADER_DEPS)
lib_napms lib $(tinfo) $(HEADER_DEPS)
lib_options lib $(tinfo) $(HEADER_DEPS)
lib_raw lib $(tinfo) $(HEADER_DEPS)
lib_setup lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
lib_termcap lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h ../include/termcap.h $(INCDIR)/capdefaults.c
lib_termname lib $(tinfo) $(HEADER_DEPS)
lib_tgoto lib $(tinfo) $(HEADER_DEPS) ../include/termcap.h
lib_ti lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
lib_tparm lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
lib_tputs lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h ../include/termcap.h
lib_trace lib $(trace) $(HEADER_DEPS) $(INCDIR)/tic.h
lib_traceatr lib $(trace) $(HEADER_DEPS)
lib_tracebits lib $(trace) $(HEADER_DEPS)
lib_tracechr lib $(trace) $(HEADER_DEPS)
lib_ttyflags lib $(tinfo) $(HEADER_DEPS)
lib_twait lib $(serial) $(HEADER_DEPS)
name_match lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
names lib . $(HEADER_DEPS)
obsolete lib $(tinfo) $(HEADER_DEPS)
read_entry lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h $(INCDIR)/hashed_db.h
read_termcap lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
strings lib $(tinfo) $(HEADER_DEPS)
trace_buf lib $(trace) $(HEADER_DEPS)
trace_tries lib $(trace) $(HEADER_DEPS)
tries lib $(base) $(HEADER_DEPS)
trim_sgr0 lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
unctrl lib . $(HEADER_DEPS)
visbuf lib $(trace) $(HEADER_DEPS) $(INCDIR)/tic.h
# Modules used only for tic, other programs using internal interfaces
@ ticlib
alloc_entry lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
captoinfo lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
comp_expand lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
comp_parse lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
comp_scan lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
parse_entry lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h ../include/parametrized.h
write_entry lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h $(INCDIR)/hashed_db.h
# Extensions to the termlib library
@ ext_tinfo
define_key lib $(base) $(HEADER_DEPS)
hashed_db lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h $(INCDIR)/hashed_db.h
key_defined lib $(base) $(HEADER_DEPS)
keybound lib $(base) $(HEADER_DEPS)
keyok lib $(base) $(HEADER_DEPS)
version lib $(base) $(HEADER_DEPS)
# Porting
@ port_drivers
lib_driver lib $(base) $(HEADER_DEPS)
@ port_win32con
gettimeofday lib $(win32con) $(HEADER_DEPS)
wcwidth lib $(win32con) $(HEADER_DEPS)
widechars lib $(wide) $(HEADER_DEPS)
win_driver lib $(win32con) $(HEADER_DEPS)
+@ port_win32
+lib_win32con lib $(tinfo) $(HEADER_DEPS)
+lib_win32util lib $(tinfo) $(HEADER_DEPS)
+wcwidth lib $(win32con) $(HEADER_DEPS)
+win32_driver lib $(win32con) $(HEADER_DEPS)
+
@ port_tinfo
tinfo_driver lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h
# vile:makemode
diff --git a/contrib/ncurses/ncurses/new_pair.h b/contrib/ncurses/ncurses/new_pair.h
index 811abc11442b..dfda89077207 100644
--- a/contrib/ncurses/ncurses/new_pair.h
+++ b/contrib/ncurses/ncurses/new_pair.h
@@ -1,131 +1,130 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey *
****************************************************************************/
/*
* Common type definitions and macros for new_pair.c, lib_color.c
*
- * $Id: new_pair.h,v 1.10 2020/02/02 23:34:34 tom Exp $
+ * $Id: new_pair.h,v 1.11 2020/04/11 16:43:47 tom Exp $
*/
#ifndef NEW_PAIR_H
#define NEW_PAIR_H 1
/* *INDENT-OFF* */
#define LIMIT_TYPED(n,t) \
(t)(((n) > MAX_OF_TYPE(t)) \
? MAX_OF_TYPE(t) \
: ((n) < -MAX_OF_TYPE(t)) \
? -MAX_OF_TYPE(t) \
: (n))
#define limit_COLOR(n) LIMIT_TYPED(n,NCURSES_COLOR_T)
#define limit_PAIRS(n) LIMIT_TYPED(n,NCURSES_PAIRS_T)
#define MAX_XCURSES_PAIR MAX_OF_TYPE(NCURSES_PAIRS_T)
#if NCURSES_EXT_COLORS
#define OPTIONAL_PAIR GCC_UNUSED
#define get_extended_pair(opts, color_pair) \
if ((opts) != NULL) { \
*(int*)(opts) = color_pair; \
}
#define set_extended_pair(opts, color_pair) \
if ((opts) != NULL) { \
color_pair = *(const int*)(opts); \
}
#else
#define OPTIONAL_PAIR /* nothing */
#define get_extended_pair(opts, color_pair) /* nothing */
#define set_extended_pair(opts, color_pair) \
if ((opts) != NULL) { \
color_pair = -1; \
}
#endif
#ifdef NEW_PAIR_INTERNAL
typedef enum {
cpKEEP = -1, /* color pair 0 */
cpFREE = 0, /* free for use */
- cpINIT = 1, /* init_pair() */
- cpAUTO = 1 /* alloc_pair() */
+ cpINIT = 1 /* initialized */
} CPMODE;
typedef struct _color_pairs
{
int fg;
int bg;
#if NCURSES_EXT_COLORS
int mode; /* tells if the entry is allocated or free */
int prev; /* index of previous item */
int next; /* index of next item */
#endif
}
colorpair_t;
#define MakeColorPair(target,f,b) target.fg = f, target.bg = b
#define isSamePair(a,b) ((a).fg == (b).fg && (a).bg == (b).bg)
#define FORE_OF(c) (c).fg
#define BACK_OF(c) (c).bg
/*
* Ensure that we use color pairs only when colors have been started, and also
* that the index is within the limits of the table which we allocated.
*/
#define ValidPair(sp,pair) \
((sp != 0) && (pair >= 0) && (pair < sp->_pair_limit) && sp->_coloron)
#if NCURSES_EXT_COLORS
extern NCURSES_EXPORT(void) _nc_copy_pairs(SCREEN*, colorpair_t*, colorpair_t*, int);
extern NCURSES_EXPORT(void) _nc_free_ordered_pairs(SCREEN*);
extern NCURSES_EXPORT(void) _nc_reset_color_pair(SCREEN*, int, colorpair_t*);
extern NCURSES_EXPORT(void) _nc_set_color_pair(SCREEN*, int, int);
#else
#define _nc_free_ordered_pairs(sp) /* nothing */
#define _nc_reset_color_pair(sp, pair, data) /* nothing */
#define _nc_set_color_pair(sp, pair, mode) /* nothing */
#endif
#else
typedef struct _color_pairs colorpair_t;
#endif /* NEW_PAIR_INTERNAL */
#if NO_LEAKS
extern NCURSES_EXPORT(void) _nc_new_pair_leaks(SCREEN*);
#endif
/* *INDENT-ON* */
#endif /* NEW_PAIR_H */
diff --git a/contrib/ncurses/progs/tparm_type.h b/contrib/ncurses/ncurses/report_hashing.c
similarity index 72%
copy from contrib/ncurses/progs/tparm_type.h
copy to contrib/ncurses/ncurses/report_hashing.c
index 77f4f21cfb56..bed96efbe315 100644
--- a/contrib/ncurses/progs/tparm_type.h
+++ b/contrib/ncurses/ncurses/report_hashing.c
@@ -1,53 +1,73 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
- * Copyright 2014 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey *
****************************************************************************/
-/*
- * $Id: tparm_type.h,v 1.2 2020/02/02 23:34:34 tom Exp $
- *
- * determine expected/actual number of parameters to setup for tparm
- */
-#ifndef TPARM_TYPE_H
-#define TPARM_TYPE_H 1
+#include <curses.priv.h>
+#include <tic.h>
-#define USE_LIBTINFO
-#include <progs.priv.h>
+MODULE_ID("$Id: report_hashing.c,v 1.3 2020/02/02 23:34:34 tom Exp $")
-typedef enum {
- Numbers = 0
- ,Num_Str
- ,Num_Str_Str
-} TParams;
+static void
+check_names(const char *name, NCURSES_CONST char *const *table, int termcap)
+{
+ int errs = 0;
+ int n;
+ struct name_table_entry const *entry_ptr;
+ const HashValue *hash_table = _nc_get_hash_table(termcap);
-extern TParams tparm_type(const char *name);
+ printf("%s:\n", name);
+ for (n = 0; table[n] != NULL; ++n) {
+ entry_ptr = _nc_find_entry(table[n], hash_table);
+ if (entry_ptr == 0) {
+ printf(" %s\n", table[n]);
+ errs++;
+ }
+ }
+ if (errs)
+ printf("%d errors\n", errs);
+}
-#endif /* TPARM_TYPE_H */
+int
+main(void)
+{
+#define CHECK_TI(name) check_names(#name, name, 0)
+#define CHECK_TC(name) check_names(#name, name, 1)
+
+ CHECK_TI(boolnames);
+ CHECK_TI(numnames);
+ CHECK_TI(strnames);
+
+ CHECK_TC(boolcodes);
+ CHECK_TC(numcodes);
+ CHECK_TC(strcodes);
+
+ return EXIT_SUCCESS;
+}
diff --git a/contrib/ncurses/ncurses/tinfo/MKcaptab.sh b/contrib/ncurses/ncurses/tinfo/MKcaptab.sh
old mode 100644
new mode 100755
diff --git a/contrib/ncurses/ncurses/tinfo/MKfallback.sh b/contrib/ncurses/ncurses/tinfo/MKfallback.sh
index 319ab066c885..64c65f197e0d 100755
--- a/contrib/ncurses/ncurses/tinfo/MKfallback.sh
+++ b/contrib/ncurses/ncurses/tinfo/MKfallback.sh
@@ -1,168 +1,170 @@
#!/bin/sh
##############################################################################
# Copyright 2020 Thomas E. Dickey #
# Copyright 1998-2019,2020 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
-# $Id: MKfallback.sh,v 1.24 2020/02/08 21:52:37 tom Exp $
+# $Id: MKfallback.sh,v 1.25 2020/08/16 15:58:44 tom Exp $
#
# MKfallback.sh -- create fallback table for entry reads
#
# This script generates source code for a custom version of read_entry.c
# that (instead of reading capabilities for an argument terminal type
# from an on-disk terminfo tree) tries to match the type with one of a
# specified list of types generated in.
#
terminfo_dir=$1
shift
terminfo_src=$1
shift
tic_path=$1
+test -z "$tic_path" && tic_path=tic
shift
infocmp_path=$1
+test -z "$infocmp_path" && infocmp_path=infocmp
shift
-case $tic_path in #(vi
+case "$tic_path" in #(vi
/*)
tic_head=`echo "$tic_path" | sed -e 's,/[^/]*$,,'`
PATH=$tic_head:$PATH
export PATH
;;
esac
if test $# != 0 ; then
tmp_info=tmp_info
echo creating temporary terminfo directory... >&2
TERMINFO=`pwd`/$tmp_info
export TERMINFO
TERMINFO_DIRS=$TERMINFO:$terminfo_dir
export TERMINFO_DIRS
- $tic_path -x $terminfo_src >&2
+ "$tic_path" -x "$terminfo_src" >&2
else
tmp_info=
fi
cat <<EOF
/* This file was generated by $0 */
/*
* DO NOT EDIT THIS FILE BY HAND!
*/
#include <curses.priv.h>
EOF
if [ "$*" ]
then
cat <<EOF
#include <tic.h>
/* fallback entries for: $* */
EOF
- for x in $*
+ for x in "$@"
do
echo "/* $x */"
- $infocmp_path -E $x | sed -e 's/\<short\>/NCURSES_INT2/g'
+ "$infocmp_path" -E "$x" | sed -e 's/\<short\>/NCURSES_INT2/g'
done
cat <<EOF
static const TERMTYPE2 fallbacks[$#] =
{
EOF
comma=""
- for x in $*
+ for x in "$@"
do
echo "$comma /* $x */"
- $infocmp_path -e $x
+ "$infocmp_path" -e "$x"
comma=","
done
cat <<EOF
};
EOF
fi
cat <<EOF
NCURSES_EXPORT(const TERMTYPE2 *)
_nc_fallback2 (const char *name GCC_UNUSED)
{
EOF
if [ "$*" ]
then
cat <<EOF
const TERMTYPE2 *tp;
for (tp = fallbacks;
tp < fallbacks + sizeof(fallbacks)/sizeof(TERMTYPE2);
tp++) {
if (_nc_name_match(tp->term_names, name, "|")) {
return(tp);
}
}
EOF
else
echo " /* the fallback list is empty */";
fi
cat <<EOF
return((const TERMTYPE2 *)0);
}
#if NCURSES_EXT_NUMBERS
#undef _nc_fallback
/*
* This entrypoint is used by tack 1.07
*/
NCURSES_EXPORT(const TERMTYPE *)
_nc_fallback (const char *name)
{
const TERMTYPE2 *tp = _nc_fallback2(name);
const TERMTYPE *result = 0;
if (tp != 0) {
static TERMTYPE temp;
_nc_export_termtype2(&temp, tp);
result = &temp;
}
return result;
}
#endif
EOF
if test -n "$tmp_info" ; then
echo removing temporary terminfo directory... >&2
rm -rf $tmp_info
fi
diff --git a/contrib/ncurses/ncurses/tinfo/access.c b/contrib/ncurses/ncurses/tinfo/access.c
index c69707feb2c6..15593688266e 100644
--- a/contrib/ncurses/ncurses/tinfo/access.c
+++ b/contrib/ncurses/ncurses/tinfo/access.c
@@ -1,185 +1,191 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 1998-2011,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey *
****************************************************************************/
#include <curses.priv.h>
#include <ctype.h>
#include <tic.h>
-MODULE_ID("$Id: access.c,v 1.25 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: access.c,v 1.27 2020/08/29 16:22:03 juergen Exp $")
#define LOWERCASE(c) ((isalpha(UChar(c)) && isupper(UChar(c))) ? tolower(UChar(c)) : (c))
+#ifdef _NC_MSC
+# define ACCESS(FN, MODE) access((FN), (MODE)&(R_OK|W_OK))
+#else
+# define ACCESS access
+#endif
+
NCURSES_EXPORT(char *)
_nc_rootname(char *path)
{
char *result = _nc_basename(path);
#if !MIXEDCASE_FILENAMES || defined(PROG_EXT)
static char *temp;
char *s;
temp = strdup(result);
result = temp;
#if !MIXEDCASE_FILENAMES
for (s = result; *s != '\0'; ++s) {
*s = (char) LOWERCASE(*s);
}
#endif
#if defined(PROG_EXT)
if ((s = strrchr(result, '.')) != 0) {
if (!strcmp(s, PROG_EXT))
*s = '\0';
}
#endif
#endif
return result;
}
/*
* Check if a string appears to be an absolute pathname.
*/
NCURSES_EXPORT(bool)
_nc_is_abs_path(const char *path)
{
#if defined(__EMX__) || defined(__DJGPP__)
#define is_pathname(s) ((((s) != 0) && ((s)[0] == '/')) \
|| (((s)[0] != 0) && ((s)[1] == ':')))
#else
#define is_pathname(s) ((s) != 0 && (s)[0] == '/')
#endif
return is_pathname(path);
}
/*
* Return index of the basename
*/
NCURSES_EXPORT(unsigned)
_nc_pathlast(const char *path)
{
const char *test = strrchr(path, '/');
#ifdef __EMX__
if (test == 0)
test = strrchr(path, '\\');
#endif
if (test == 0)
test = path;
else
test++;
return (unsigned) (test - path);
}
NCURSES_EXPORT(char *)
_nc_basename(char *path)
{
return path + _nc_pathlast(path);
}
NCURSES_EXPORT(int)
_nc_access(const char *path, int mode)
{
int result;
if (path == 0) {
result = -1;
- } else if (access(path, mode) < 0) {
+ } else if (ACCESS(path, mode) < 0) {
if ((mode & W_OK) != 0
&& errno == ENOENT
&& strlen(path) < PATH_MAX) {
char head[PATH_MAX];
char *leaf;
_nc_STRCPY(head, path, sizeof(head));
leaf = _nc_basename(head);
if (leaf == 0)
leaf = head;
*leaf = '\0';
if (head == leaf)
_nc_STRCPY(head, ".", sizeof(head));
- result = access(head, R_OK | W_OK | X_OK);
+ result = ACCESS(head, R_OK | W_OK | X_OK);
} else {
result = -1;
}
} else {
result = 0;
}
return result;
}
NCURSES_EXPORT(bool)
_nc_is_dir_path(const char *path)
{
bool result = FALSE;
struct stat sb;
if (stat(path, &sb) == 0
&& S_ISDIR(sb.st_mode)) {
result = TRUE;
}
return result;
}
NCURSES_EXPORT(bool)
_nc_is_file_path(const char *path)
{
bool result = FALSE;
struct stat sb;
if (stat(path, &sb) == 0
&& S_ISREG(sb.st_mode)) {
result = TRUE;
}
return result;
}
#ifndef USE_ROOT_ENVIRON
/*
* Returns true if we allow application to use environment variables that are
* used for searching lists of directories, etc.
*/
NCURSES_EXPORT(int)
_nc_env_access(void)
{
#if HAVE_ISSETUGID
if (issetugid())
return FALSE;
#elif HAVE_GETEUID && HAVE_GETEGID
if (getuid() != geteuid()
|| getgid() != getegid())
return FALSE;
#endif
/* ...finally, disallow root */
return (getuid() != ROOT_UID) && (geteuid() != ROOT_UID);
}
#endif
diff --git a/contrib/ncurses/ncurses/tinfo/captoinfo.c b/contrib/ncurses/ncurses/tinfo/captoinfo.c
index 8b3b83d18239..de0133b386c6 100644
--- a/contrib/ncurses/ncurses/tinfo/captoinfo.c
+++ b/contrib/ncurses/ncurses/tinfo/captoinfo.c
@@ -1,1048 +1,1051 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
/*
* captoinfo.c
*
* Provide conversion in both directions between termcap and terminfo.
*
* cap-to-info --- conversion between termcap and terminfo formats
*
* The captoinfo() code was swiped from Ross Ridge's mytinfo package,
* adapted to fit ncurses by Eric S. Raymond <esr@snark.thyrsus.com>.
*
* It has just one entry point:
*
* char *_nc_captoinfo(n, s, parameterized)
*
* Convert value s for termcap string capability named n into terminfo
* format.
*
* This code recognizes all the standard 4.4BSD %-escapes:
*
* %% output `%'
* %d output value as in printf %d
* %2 output value as in printf %2d
* %3 output value as in printf %3d
* %. output value as in printf %c
* %+x add x to value, then do %.
* %>xy if value > x then add y, no output
* %r reverse order of two parameters, no output
* %i increment by one, no output
* %n exclusive-or all parameters with 0140 (Datamedia 2500)
* %B BCD (16*(value/10)) + (value%10), no output
* %D Reverse coding (value - 2*(value%16)), no output (Delta Data).
*
* Also, %02 and %03 are accepted as synonyms for %2 and %3.
*
* Besides all the standard termcap escapes, this translator understands
* the following extended escapes:
*
* used by GNU Emacs termcap libraries
* %a[+*-/=][cp]x GNU arithmetic.
* %m xor the first two parameters by 0177
* %b backup to previous parameter
* %f skip this parameter
*
* used by the University of Waterloo (MFCF) termcap libraries
* %-x subtract parameter FROM char x and output it as a char
* %ax add the character x to parameter
*
* If #define WATERLOO is on, also enable these translations:
*
* %sx subtract parameter FROM the character x
*
* By default, this Waterloo translations are not compiled in, because
* the Waterloo %s conflicts with the way terminfo uses %s in strings for
* function programming.
*
* Note the two definitions of %a: the GNU definition is translated if the
* characters after the 'a' are valid for it, otherwise the UW definition
* is translated.
*/
#include <curses.priv.h>
#include <ctype.h>
#include <tic.h>
-MODULE_ID("$Id: captoinfo.c,v 1.98 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: captoinfo.c,v 1.100 2020/07/08 21:39:54 tom Exp $")
#if 0
#define DEBUG_THIS(p) DEBUG(9, p)
#else
#define DEBUG_THIS(p) /* nothing */
#endif
#define MAX_PUSHED 16 /* max # args we can push onto the stack */
static int stack[MAX_PUSHED]; /* the stack */
static int stackptr; /* the next empty place on the stack */
static int onstack; /* the top of stack */
static int seenm; /* seen a %m */
static int seenn; /* seen a %n */
static int seenr; /* seen a %r */
static int param; /* current parameter */
static char *dp; /* pointer to end of the converted string */
static char *my_string;
static size_t my_length;
static char *
init_string(void)
/* initialize 'my_string', 'my_length' */
{
if (my_string == 0)
TYPE_MALLOC(char, my_length = 256, my_string);
*my_string = '\0';
return my_string;
}
static char *
save_string(char *d, const char *const s)
{
size_t have = (size_t) (d - my_string);
size_t need = have + strlen(s) + 2;
if (need > my_length) {
my_string = (char *) _nc_doalloc(my_string, my_length = (need + need));
if (my_string == 0)
_nc_err_abort(MSG_NO_MEMORY);
d = my_string + have;
}
_nc_STRCPY(d, s, my_length - have);
return d + strlen(d);
}
static NCURSES_INLINE char *
save_char(char *s, int c)
{
static char temp[2];
temp[0] = (char) c;
return save_string(s, temp);
}
static void
push(void)
/* push onstack on to the stack */
{
if (stackptr >= MAX_PUSHED)
_nc_warning("string too complex to convert");
else
stack[stackptr++] = onstack;
}
static void
pop(void)
/* pop the top of the stack into onstack */
{
if (stackptr == 0) {
if (onstack == 0)
_nc_warning("I'm confused");
else
onstack = 0;
} else
onstack = stack[--stackptr];
param++;
}
static int
cvtchar(register const char *sp)
/* convert a character to a terminfo push */
{
unsigned char c = 0;
int len;
switch (*sp) {
case '\\':
switch (*++sp) {
case '\'':
case '$':
case '\\':
case '%':
c = UChar(*sp);
len = 2;
break;
case '\0':
c = '\\';
len = 1;
break;
case '0':
case '1':
case '2':
case '3':
len = 1;
while (isdigit(UChar(*sp))) {
c = UChar(8 * c + (*sp++ - '0'));
len++;
}
break;
default:
c = UChar(*sp);
len = (c != '\0') ? 2 : 1;
break;
}
break;
case '^':
+ len = 2;
c = UChar(*++sp);
- if (c == '?')
+ if (c == '?') {
c = 127;
- else
+ } else if (c == '\0') {
+ len = 1;
+ } else {
c &= 0x1f;
- len = 2;
+ }
break;
default:
c = UChar(*sp);
len = (c != '\0') ? 1 : 0;
}
if (isgraph(c) && c != ',' && c != '\'' && c != '\\' && c != ':') {
dp = save_string(dp, "%\'");
dp = save_char(dp, c);
dp = save_char(dp, '\'');
} else if (c != '\0') {
dp = save_string(dp, "%{");
if (c > 99)
dp = save_char(dp, c / 100 + '0');
if (c > 9)
dp = save_char(dp, ((int) (c / 10)) % 10 + '0');
dp = save_char(dp, c % 10 + '0');
dp = save_char(dp, '}');
}
return len;
}
static void
getparm(int parm, int n)
/* push n copies of param on the terminfo stack if not already there */
{
int nn;
if (seenr) {
if (parm == 1)
parm = 2;
else if (parm == 2)
parm = 1;
}
for (nn = 0; nn < n; ++nn) {
dp = save_string(dp, "%p");
dp = save_char(dp, '0' + parm);
}
if (onstack == parm) {
if (n > 1) {
_nc_warning("string may not be optimal");
dp = save_string(dp, "%Pa");
while (n-- > 0) {
dp = save_string(dp, "%ga");
}
}
return;
}
if (onstack != 0)
push();
onstack = parm;
if (seenn && parm < 3) {
dp = save_string(dp, "%{96}%^");
}
if (seenm && parm < 3) {
dp = save_string(dp, "%{127}%^");
}
}
/*
* Convert a termcap string to terminfo format.
* 'cap' is the relevant terminfo capability index.
* 's' is the string value of the capability.
* 'parameterized' tells what type of translations to do:
* % translations if 1
* pad translations if >=0
*/
NCURSES_EXPORT(char *)
_nc_captoinfo(const char *cap, const char *s, int const parameterized)
{
const char *capstart;
stackptr = 0;
onstack = 0;
seenm = 0;
seenn = 0;
seenr = 0;
param = 1;
DEBUG_THIS(("_nc_captoinfo params %d, %s", parameterized, s));
dp = init_string();
/* skip the initial padding (if we haven't been told not to) */
capstart = 0;
if (s == 0)
s = "";
if (parameterized >= 0 && isdigit(UChar(*s)))
for (capstart = s; *s != '\0'; s++)
if (!(isdigit(UChar(*s)) || *s == '*' || *s == '.'))
break;
while (*s != '\0') {
switch (*s) {
case '%':
s++;
if (parameterized < 1) {
dp = save_char(dp, '%');
break;
}
switch (*s++) {
case '%':
dp = save_string(dp, "%%");
break;
case 'r':
if (seenr++ == 1) {
_nc_warning("saw %%r twice in %s", cap);
}
break;
case 'm':
if (seenm++ == 1) {
_nc_warning("saw %%m twice in %s", cap);
}
break;
case 'n':
if (seenn++ == 1) {
_nc_warning("saw %%n twice in %s", cap);
}
break;
case 'i':
dp = save_string(dp, "%i");
break;
case '6':
case 'B':
getparm(param, 1);
dp = save_string(dp, "%{10}%/%{16}%*");
getparm(param, 1);
dp = save_string(dp, "%{10}%m%+");
break;
case '8':
case 'D':
getparm(param, 2);
dp = save_string(dp, "%{2}%*%-");
break;
case '>':
/* %?%{x}%>%t%{y}%+%; */
if (s[0] && s[1]) {
getparm(param, 2);
dp = save_string(dp, "%?");
s += cvtchar(s);
dp = save_string(dp, "%>%t");
s += cvtchar(s);
dp = save_string(dp, "%+%;");
} else {
_nc_warning("expected two characters after %%>");
dp = save_string(dp, "%>");
}
break;
case 'a':
if ((*s == '=' || *s == '+' || *s == '-'
|| *s == '*' || *s == '/')
&& (s[1] == 'p' || s[1] == 'c')
&& s[2] != '\0') {
int l;
l = 2;
if (*s != '=')
getparm(param, 1);
if (s[1] == 'p') {
getparm(param + s[2] - '@', 1);
if (param != onstack) {
pop();
param--;
}
l++;
} else
l += cvtchar(s + 2);
switch (*s) {
case '+':
dp = save_string(dp, "%+");
break;
case '-':
dp = save_string(dp, "%-");
break;
case '*':
dp = save_string(dp, "%*");
break;
case '/':
dp = save_string(dp, "%/");
break;
case '=':
if (seenr) {
if (param == 1)
onstack = 2;
else if (param == 2)
onstack = 1;
else
onstack = param;
} else
onstack = param;
break;
}
s += l;
break;
}
getparm(param, 1);
s += cvtchar(s);
dp = save_string(dp, "%+");
break;
case '+':
getparm(param, 1);
s += cvtchar(s);
dp = save_string(dp, "%+%c");
pop();
break;
case 's':
#ifdef WATERLOO
s += cvtchar(s);
getparm(param, 1);
dp = save_string(dp, "%-");
#else
getparm(param, 1);
dp = save_string(dp, "%s");
pop();
#endif /* WATERLOO */
break;
case '-':
s += cvtchar(s);
getparm(param, 1);
dp = save_string(dp, "%-%c");
pop();
break;
case '.':
getparm(param, 1);
dp = save_string(dp, "%c");
pop();
break;
case '0': /* not clear any of the historical termcaps did this */
if (*s == '3') {
++s;
goto see03;
}
if (*s == '2') {
++s;
goto see02;
}
goto invalid;
case '2':
see02:
getparm(param, 1);
dp = save_string(dp, "%2d");
pop();
break;
case '3':
see03:
getparm(param, 1);
dp = save_string(dp, "%3d");
pop();
break;
case 'd':
getparm(param, 1);
dp = save_string(dp, "%d");
pop();
break;
case 'f':
param++;
break;
case 'b':
param--;
break;
case '\\':
dp = save_string(dp, "%\\");
break;
default:
invalid:
dp = save_char(dp, '%');
s--;
_nc_warning("unknown %% code %s (%#x) in %s",
unctrl((chtype) *s), UChar(*s), cap);
break;
}
break;
default:
if (*s != '\0')
dp = save_char(dp, *s++);
break;
}
}
/*
* Now, if we stripped off some leading padding, add it at the end
* of the string as mandatory padding.
*/
if (capstart) {
dp = save_string(dp, "$<");
for (s = capstart; *s != '\0'; s++)
if (isdigit(UChar(*s)) || *s == '*' || *s == '.')
dp = save_char(dp, *s);
else
break;
dp = save_string(dp, "/>");
}
(void) save_char(dp, '\0');
DEBUG_THIS(("... _nc_captoinfo %s", NonNull(my_string)));
return (my_string);
}
/*
* Check for an expression that corresponds to "%B" (BCD):
* (parameter / 10) * 16 + (parameter % 10)
*/
static int
bcd_expression(const char *str)
{
/* leave this non-const for HPUX */
static char fmt[] = "%%p%c%%{10}%%/%%{16}%%*%%p%c%%{10}%%m%%+";
int len = 0;
char ch1, ch2;
if (sscanf(str, fmt, &ch1, &ch2) == 2
&& isdigit(UChar(ch1))
&& isdigit(UChar(ch2))
&& (ch1 == ch2)) {
len = 28;
#ifndef NDEBUG
{
char buffer[80];
int tst;
_nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) fmt, ch1, ch2);
tst = strlen(buffer) - 1;
assert(len == tst);
}
#endif
}
return len;
}
static char *
save_tc_char(char *bufptr, int c1)
{
if (is7bits(c1) && isprint(c1)) {
if (c1 == ':' || c1 == '\\')
bufptr = save_char(bufptr, '\\');
bufptr = save_char(bufptr, c1);
} else {
char temp[80];
if (c1 == (c1 & 0x1f)) { /* iscntrl() returns T on 255 */
_nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp))
"%.20s", unctrl((chtype) c1));
} else {
_nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp))
"\\%03o", c1);
}
bufptr = save_string(bufptr, temp);
}
return bufptr;
}
static char *
save_tc_inequality(char *bufptr, int c1, int c2)
{
bufptr = save_string(bufptr, "%>");
bufptr = save_tc_char(bufptr, c1);
bufptr = save_tc_char(bufptr, c2);
return bufptr;
}
/*
* info-to-cap --- conversion between terminfo and termcap formats
*
* Here are the capabilities infotocap assumes it can translate to:
*
* %% output `%'
* %d output value as in printf %d
* %2 output value as in printf %2d
* %3 output value as in printf %3d
* %. output value as in printf %c
* %+c add character c to value, then do %.
* %>xy if value > x then add y, no output
* %r reverse order of two parameters, no output
* %i increment by one, no output
* %n exclusive-or all parameters with 0140 (Datamedia 2500)
* %B BCD (16*(value/10)) + (value%10), no output
* %D Reverse coding (value - 2*(value%16)), no output (Delta Data).
* %m exclusive-or all parameters with 0177 (not in 4.4BSD)
*/
#define octal_fixup(n, c) fixups[n].ch = ((fixups[n].ch << 3) | ((c) - '0'))
/*
* Convert a terminfo string to termcap format. Parameters are as in
* _nc_captoinfo().
*/
NCURSES_EXPORT(char *)
_nc_infotocap(const char *cap GCC_UNUSED, const char *str, int const parameterized)
{
int seenone = 0, seentwo = 0, saw_m = 0, saw_n = 0;
const char *padding;
const char *trimmed = 0;
int in0, in1, in2;
char ch1 = 0, ch2 = 0;
char *bufptr = init_string();
char octal[4];
int len;
int digits;
bool syntax_error = FALSE;
int myfix = 0;
struct {
int ch;
int offset;
} fixups[MAX_TC_FIXUPS];
DEBUG_THIS(("_nc_infotocap params %d, %s", parameterized, str));
/* we may have to move some trailing mandatory padding up front */
padding = str + strlen(str) - 1;
if (padding > str && *padding == '>') {
- if (*--padding == '/')
+ if (padding > (str + 1) && *--padding == '/')
--padding;
while (isdigit(UChar(*padding)) || *padding == '.' || *padding == '*')
padding--;
if (padding > str && *padding == '<' && *--padding == '$')
trimmed = padding;
padding += 2;
while (isdigit(UChar(*padding)) || *padding == '.' || *padding == '*')
bufptr = save_char(bufptr, *padding++);
}
for (; !syntax_error &&
*str &&
((trimmed == 0) || (str < trimmed)); str++) {
int c1, c2;
char *cp = 0;
if (str[0] == '^') {
if (str[1] == '\0' || (str + 1) == trimmed) {
bufptr = save_string(bufptr, "\\136");
++str;
} else if (str[1] == '?') {
/*
* Although the 4.3BSD termcap file has an instance of "kb=^?",
* that appears to be just cut/paste since neither 4.3BSD nor
* 4.4BSD termcap interprets "^?" as DEL.
*/
bufptr = save_string(bufptr, "\\177");
++str;
} else {
bufptr = save_char(bufptr, *str++);
bufptr = save_char(bufptr, *str);
}
} else if (str[0] == '\\') {
if (str[1] == '\0' || (str + 1) == trimmed) {
bufptr = save_string(bufptr, "\\134");
++str;
} else if (str[1] == '^') {
bufptr = save_string(bufptr, "\\136");
++str;
} else if (str[1] == ',') {
bufptr = save_char(bufptr, *++str);
} else {
int xx1;
bufptr = save_char(bufptr, *str++);
xx1 = *str;
if (_nc_strict_bsd) {
if (isoctal(UChar(xx1))) {
int pad = 0;
int xx2;
int fix = 0;
if (!isoctal(UChar(str[1])))
pad = 2;
else if (str[1] && !isoctal(UChar(str[2])))
pad = 1;
/*
* Test for "\0", "\00" or "\000" and transform those
* into "\200".
*/
if (xx1 == '0'
&& ((pad == 2) || (str[1] == '0'))
&& ((pad >= 1) || (str[2] == '0'))) {
xx2 = '2';
} else {
xx2 = '0';
pad = 0; /* FIXME - optionally pad to 3 digits */
}
if (myfix < MAX_TC_FIXUPS) {
fix = 3 - pad;
fixups[myfix].ch = 0;
fixups[myfix].offset = (int) (bufptr
- my_string
- 1);
}
while (pad-- > 0) {
bufptr = save_char(bufptr, xx2);
if (myfix < MAX_TC_FIXUPS) {
fixups[myfix].ch <<= 3;
fixups[myfix].ch |= (xx2 - '0');
}
xx2 = '0';
}
if (myfix < MAX_TC_FIXUPS) {
int n;
for (n = 0; n < fix; ++n) {
fixups[myfix].ch <<= 3;
fixups[myfix].ch |= (str[n] - '0');
}
if (fixups[myfix].ch < 32) {
++myfix;
}
}
} else if (strchr("E\\nrtbf", xx1) == 0) {
switch (xx1) {
case 'e':
xx1 = 'E';
break;
case 'l':
xx1 = 'n';
break;
case 's':
bufptr = save_char(bufptr, '0');
bufptr = save_char(bufptr, '4');
xx1 = '0';
break;
case ':':
/*
* Note: termcap documentation claims that ":"
* must be escaped as "\072", however the
* documentation is incorrect - read the code.
* The replacement does not work reliably,
* so the advice is not helpful.
*/
bufptr = save_char(bufptr, '0');
bufptr = save_char(bufptr, '7');
xx1 = '2';
break;
default:
/* should not happen, but handle this anyway */
_nc_SPRINTF(octal, _nc_SLIMIT(sizeof(octal))
"%03o", UChar(xx1));
bufptr = save_char(bufptr, octal[0]);
bufptr = save_char(bufptr, octal[1]);
xx1 = octal[2];
break;
}
}
} else {
if (myfix < MAX_TC_FIXUPS && isoctal(UChar(xx1))) {
bool will_fix = TRUE;
int n;
fixups[myfix].ch = 0;
fixups[myfix].offset = (int) (bufptr - my_string - 1);
for (n = 0; n < 3; ++n) {
if (isoctal(str[n])) {
octal_fixup(myfix, str[n]);
} else {
will_fix = FALSE;
break;
}
}
if (will_fix && (fixups[myfix].ch < 32))
++myfix;
}
}
bufptr = save_char(bufptr, xx1);
}
} else if (str[0] == '$' && str[1] == '<') { /* discard padding */
str += 2;
while (isdigit(UChar(*str))
|| *str == '.'
|| *str == '*'
|| *str == '/'
|| *str == '>')
str++;
--str;
} else if (sscanf(str,
"[%%?%%p1%%{8}%%<%%t%d%%p1%%d%%e%%p1%%{16}%%<%%t%d%%p1%%{8}%%-%%d%%e%d;5;%%p1%%d%%;m",
&in0, &in1, &in2) == 3
&& ((in0 == 4 && in1 == 10 && in2 == 48)
|| (in0 == 3 && in1 == 9 && in2 == 38))) {
/* dumb-down an optimized case from xterm-256color for termcap */
if ((str = strstr(str, ";m")) == 0)
break; /* cannot happen */
++str;
if (in2 == 48) {
bufptr = save_string(bufptr, "[48;5;%dm");
} else {
bufptr = save_string(bufptr, "[38;5;%dm");
}
} else if (str[0] == '%' && str[1] == '%') { /* escaped '%' */
bufptr = save_string(bufptr, "%%");
++str;
} else if (*str != '%' || (parameterized < 1)) {
bufptr = save_char(bufptr, *str);
} else if (sscanf(str, "%%?%%{%d}%%>%%t%%{%d}%%+%%;", &c1, &c2) == 2) {
str = strchr(str, ';');
bufptr = save_tc_inequality(bufptr, c1, c2);
} else if (sscanf(str, "%%?%%{%d}%%>%%t%%'%c'%%+%%;", &c1, &ch2) == 2) {
str = strchr(str, ';');
bufptr = save_tc_inequality(bufptr, c1, ch2);
} else if (sscanf(str, "%%?%%'%c'%%>%%t%%{%d}%%+%%;", &ch1, &c2) == 2) {
str = strchr(str, ';');
bufptr = save_tc_inequality(bufptr, ch1, c2);
} else if (sscanf(str, "%%?%%'%c'%%>%%t%%'%c'%%+%%;", &ch1, &ch2) == 2) {
str = strchr(str, ';');
bufptr = save_tc_inequality(bufptr, ch1, ch2);
} else if ((len = bcd_expression(str)) != 0) {
str += len;
bufptr = save_string(bufptr, "%B");
} else if ((sscanf(str, "%%{%d}%%+%%%c", &c1, &ch2) == 2
|| sscanf(str, "%%'%c'%%+%%%c", &ch1, &ch2) == 2)
&& ch2 == 'c'
&& (cp = strchr(str, '+'))) {
str = cp + 2;
bufptr = save_string(bufptr, "%+");
if (ch1)
c1 = ch1;
bufptr = save_tc_char(bufptr, c1);
}
/* FIXME: this "works" for 'delta' */
else if (strncmp(str, "%{2}%*%-", (size_t) 8) == 0) {
str += 7;
bufptr = save_string(bufptr, "%D");
} else if (strncmp(str, "%{96}%^", (size_t) 7) == 0) {
str += 6;
if (saw_m++ == 0) {
bufptr = save_string(bufptr, "%n");
}
} else if (strncmp(str, "%{127}%^", (size_t) 8) == 0) {
str += 7;
if (saw_n++ == 0) {
bufptr = save_string(bufptr, "%m");
}
} else { /* cm-style format element */
str++;
switch (*str) {
case '%':
bufptr = save_char(bufptr, '%');
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
bufptr = save_char(bufptr, '%');
ch1 = 0;
ch2 = 0;
digits = 0;
while (isdigit(UChar(*str))) {
if (++digits > 2) {
syntax_error = TRUE;
break;
}
ch2 = ch1;
ch1 = *str++;
if (digits == 2 && ch2 != '0') {
syntax_error = TRUE;
break;
} else if (_nc_strict_bsd) {
if (ch1 > '3') {
syntax_error = TRUE;
break;
}
} else {
bufptr = save_char(bufptr, ch1);
}
}
if (syntax_error)
break;
/*
* Convert %02 to %2 and %03 to %3
*/
if (ch2 == '0' && !_nc_strict_bsd) {
ch2 = 0;
bufptr[-2] = bufptr[-1];
*--bufptr = 0;
}
if (_nc_strict_bsd) {
if (ch2 != 0 && ch2 != '0') {
syntax_error = TRUE;
} else if (ch1 < '2') {
ch1 = 'd';
}
bufptr = save_char(bufptr, ch1);
}
if (strchr("oxX.", *str)) {
syntax_error = TRUE; /* termcap doesn't have octal, hex */
}
break;
case 'd':
bufptr = save_string(bufptr, "%d");
break;
case 'c':
bufptr = save_string(bufptr, "%.");
break;
/*
* %s isn't in termcap, but it's convenient to pass it through
* so we can represent things like terminfo pfkey strings in
* termcap notation.
*/
case 's':
if (_nc_strict_bsd) {
syntax_error = TRUE;
} else {
bufptr = save_string(bufptr, "%s");
}
break;
case 'p':
str++;
if (*str == '1')
seenone = 1;
else if (*str == '2') {
if (!seenone && !seentwo) {
bufptr = save_string(bufptr, "%r");
seentwo++;
}
} else if (*str >= '3') {
syntax_error = TRUE;
}
break;
case 'i':
bufptr = save_string(bufptr, "%i");
break;
default:
bufptr = save_char(bufptr, *str);
syntax_error = TRUE;
break;
} /* endswitch (*str) */
} /* endelse (*str == '%') */
/*
* 'str' always points to the end of what was scanned in this step,
* but that may not be the end of the string.
*/
assert(str != 0);
if (str == 0 || *str == '\0')
break;
} /* endwhile (*str) */
if (!syntax_error &&
myfix > 0 &&
((int) strlen(my_string) - (4 * myfix)) < MIN_TC_FIXUPS) {
while (--myfix >= 0) {
char *p = fixups[myfix].offset + my_string;
*p++ = '^';
*p++ = (char) (fixups[myfix].ch | '@');
while ((p[0] = p[2]) != '\0') {
++p;
}
}
}
DEBUG_THIS(("... _nc_infotocap %s",
syntax_error
? "<ERR>"
: _nc_visbuf(my_string)));
return (syntax_error ? NULL : my_string);
}
#ifdef MAIN
int curr_line;
int
main(int argc, char *argv[])
{
int c, tc = FALSE;
while ((c = getopt(argc, argv, "c")) != EOF)
switch (c) {
case 'c':
tc = TRUE;
break;
}
curr_line = 0;
for (;;) {
char buf[BUFSIZ];
++curr_line;
if (fgets(buf, sizeof(buf), stdin) == 0)
break;
buf[strlen(buf) - 1] = '\0';
_nc_set_source(buf);
if (tc) {
char *cp = _nc_infotocap("to termcap", buf, 1);
if (cp)
(void) fputs(cp, stdout);
} else
(void) fputs(_nc_captoinfo("to terminfo", buf, 1), stdout);
(void) putchar('\n');
}
return (0);
}
#endif /* MAIN */
#if NO_LEAKS
NCURSES_EXPORT(void)
_nc_captoinfo_leaks(void)
{
if (my_string != 0) {
FreeAndNull(my_string);
}
my_length = 0;
}
#endif
diff --git a/contrib/ncurses/ncurses/tinfo/comp_parse.c b/contrib/ncurses/ncurses/tinfo/comp_parse.c
index ab25d5b1f03d..2a89a866c374 100644
--- a/contrib/ncurses/ncurses/tinfo/comp_parse.c
+++ b/contrib/ncurses/ncurses/tinfo/comp_parse.c
@@ -1,730 +1,730 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
/*
* comp_parse.c -- parser driver loop and use handling.
*
* Use this code by calling _nc_read_entry_source() on as many source
* files as you like (either terminfo or termcap syntax). If you
* want use-resolution, call _nc_resolve_uses2(). To free the list
* storage, do _nc_free_entries().
*/
#include <curses.priv.h>
#include <ctype.h>
#include <tic.h>
-MODULE_ID("$Id: comp_parse.c,v 1.109 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: comp_parse.c,v 1.110 2020/02/29 15:46:00 anonymous.maarten Exp $")
static void sanity_check2(TERMTYPE2 *, bool);
-NCURSES_IMPEXP void NCURSES_API(*_nc_check_termtype2) (TERMTYPE2 *, bool) = sanity_check2;
+NCURSES_IMPEXP void (NCURSES_API *_nc_check_termtype2) (TERMTYPE2 *, bool) = sanity_check2;
static void fixup_acsc(TERMTYPE2 *, int);
static void
enqueue(ENTRY * ep)
/* add an entry to the in-core list */
{
ENTRY *newp = _nc_copy_entry(ep);
if (newp == 0)
_nc_err_abort(MSG_NO_MEMORY);
newp->last = _nc_tail;
_nc_tail = newp;
newp->next = 0;
if (newp->last)
newp->last->next = newp;
}
#define NAMEBUFFER_SIZE (MAX_NAME_SIZE + 2)
static char *
force_bar(char *dst, char *src)
{
if (strchr(src, '|') == 0) {
size_t len = strlen(src);
if (len > MAX_NAME_SIZE)
len = MAX_NAME_SIZE;
_nc_STRNCPY(dst, src, MAX_NAME_SIZE);
_nc_STRCPY(dst + len, "|", NAMEBUFFER_SIZE - len);
src = dst;
}
return src;
}
#define ForceBar(dst, src) ((strchr(src, '|') == 0) ? force_bar(dst, src) : src)
#if NCURSES_USE_TERMCAP && NCURSES_XNAMES
static char *
skip_index(char *name)
{
char *bar = strchr(name, '|');
if (bar != 0 && (bar - name) == 2)
name = bar + 1;
return name;
}
#endif
static bool
check_collisions(char *n1, char *n2, int counter)
{
char *pstart, *qstart, *pend, *qend;
char nc1[NAMEBUFFER_SIZE];
char nc2[NAMEBUFFER_SIZE];
n1 = ForceBar(nc1, n1);
n2 = ForceBar(nc2, n2);
#if NCURSES_USE_TERMCAP && NCURSES_XNAMES
if ((_nc_syntax == SYN_TERMCAP) && _nc_user_definable) {
n1 = skip_index(n1);
n2 = skip_index(n2);
}
#endif
for (pstart = n1; (pend = strchr(pstart, '|')); pstart = pend + 1) {
for (qstart = n2; (qend = strchr(qstart, '|')); qstart = qend + 1) {
if ((pend - pstart == qend - qstart)
&& memcmp(pstart, qstart, (size_t) (pend - pstart)) == 0) {
if (counter > 0)
(void) fprintf(stderr, "Name collision '%.*s' between\n",
(int) (pend - pstart), pstart);
return (TRUE);
}
}
}
return (FALSE);
}
static char *
next_name(char *name)
{
if (*name != '\0')
++name;
return name;
}
static char *
name_ending(char *name)
{
if (*name == '\0') {
name = 0;
} else {
while (*name != '\0' && *name != '|')
++name;
}
return name;
}
/*
* Essentially, find the conflict reported in check_collisions() and remove
* it from the second name, unless that happens to be the last alias.
*/
static bool
remove_collision(char *n1, char *n2)
{
char *p2 = n2;
char *pstart, *qstart, *pend, *qend;
bool removed = FALSE;
#if NCURSES_USE_TERMCAP && NCURSES_XNAMES
if ((_nc_syntax == SYN_TERMCAP) && _nc_user_definable) {
n1 = skip_index(n1);
p2 = n2 = skip_index(n2);
}
#endif
for (pstart = n1; (pend = name_ending(pstart)); pstart = next_name(pend)) {
for (qstart = n2; (qend = name_ending(qstart)); qstart = next_name(qend)) {
if ((pend - pstart == qend - qstart)
&& memcmp(pstart, qstart, (size_t) (pend - pstart)) == 0) {
if (qstart != p2 || *qend == '|') {
if (*qend == '|')
++qend;
while ((*qstart++ = *qend++) != '\0') ;
fprintf(stderr, "...now\t%s\n", p2);
removed = TRUE;
} else {
fprintf(stderr, "Cannot remove alias '%.*s'\n",
(int) (qend - qstart), qstart);
}
break;
}
}
}
return removed;
}
/* do any of the aliases in a pair of terminal names match? */
NCURSES_EXPORT(bool)
_nc_entry_match(char *n1, char *n2)
{
return check_collisions(n1, n2, 0);
}
/****************************************************************************
*
* Entry compiler and resolution logic
*
****************************************************************************/
NCURSES_EXPORT(void)
_nc_read_entry_source(FILE *fp, char *buf,
int literal, bool silent,
bool(*hook) (ENTRY *))
/* slurp all entries in the given file into core */
{
ENTRY thisentry;
bool oldsuppress = _nc_suppress_warnings;
int immediate = 0;
if (silent)
_nc_suppress_warnings = TRUE; /* shut the lexer up, too */
_nc_reset_input(fp, buf);
for (;;) {
memset(&thisentry, 0, sizeof(thisentry));
if (_nc_parse_entry(&thisentry, literal, silent) == ERR)
break;
if (!isalnum(UChar(thisentry.tterm.term_names[0])))
_nc_err_abort("terminal names must start with letter or digit");
/*
* This can be used for immediate compilation of entries with no "use="
* references to disk. That avoids consuming a lot of memory when the
* resolution code could fetch entries off disk.
*/
if (hook != NULLHOOK && (*hook) (&thisentry)) {
immediate++;
} else {
enqueue(&thisentry);
/*
* The enqueued entry is copied with _nc_copy_termtype(), so we can
* free some of the data from thisentry, i.e., the arrays.
*/
FreeIfNeeded(thisentry.tterm.Booleans);
FreeIfNeeded(thisentry.tterm.Numbers);
FreeIfNeeded(thisentry.tterm.Strings);
#if NCURSES_XNAMES
FreeIfNeeded(thisentry.tterm.ext_Names);
#endif
}
}
if (_nc_tail) {
/* set up the head pointer */
for (_nc_head = _nc_tail; _nc_head->last; _nc_head = _nc_head->last)
continue;
DEBUG(1, ("head = %s", _nc_head->tterm.term_names));
DEBUG(1, ("tail = %s", _nc_tail->tterm.term_names));
}
#ifdef TRACE
else if (!immediate)
DEBUG(1, ("no entries parsed"));
#endif
_nc_suppress_warnings = oldsuppress;
}
#if NCURSES_XNAMES
static unsigned
find_capname(TERMTYPE2 *p, const char *name)
{
unsigned num_names = NUM_EXT_NAMES(p);
unsigned n;
if (name != 0) {
for (n = 0; n < num_names; ++n) {
if (!strcmp(p->ext_Names[n], name))
break;
}
} else {
n = num_names + 1;
}
return n;
}
static int
extended_captype(TERMTYPE2 *p, unsigned which)
{
int result = UNDEF;
unsigned limit = 0;
limit += p->ext_Booleans;
if (limit != 0 && which < limit) {
result = BOOLEAN;
} else {
limit += p->ext_Numbers;
if (limit != 0 && which < limit) {
result = NUMBER;
} else {
limit += p->ext_Strings;
if (limit != 0 && which < limit) {
result = STRING;
} else if (which >= limit) {
result = CANCEL;
}
}
}
return result;
}
static const char *
name_of_captype(int which)
{
const char *result = "?";
switch (which) {
case BOOLEAN:
result = "boolean";
break;
case NUMBER:
result = "number";
break;
case STRING:
result = "string";
break;
}
return result;
}
#define valid_TERMTYPE2(p) \
((p) != 0 && \
(p)->term_names != 0 && \
(p)->ext_Names != 0)
/*
* Disallow changing the type of an extended capability when doing a "use"
* if one or the other is a string.
*/
static int
invalid_merge(TERMTYPE2 *to, TERMTYPE2 *from)
{
int rc = FALSE;
if (valid_TERMTYPE2(to)
&& valid_TERMTYPE2(from)) {
char *to_name = _nc_first_name(to->term_names);
char *from_name = strdup(_nc_first_name(from->term_names));
unsigned num_names = NUM_EXT_NAMES(from);
unsigned n;
for (n = 0; n < num_names; ++n) {
const char *capname = from->ext_Names[n];
int tt = extended_captype(to, find_capname(to, capname));
int tf = extended_captype(from, n);
if (tt <= STRING
&& tf <= STRING
&& (tt == STRING) != (tf == STRING)) {
if (from_name != 0 && strcmp(to_name, from_name)) {
DEBUG(2,
("merge of %s to %s changes type of %s from %s to %s",
from_name,
to_name,
from->ext_Names[n],
name_of_captype(tf),
name_of_captype(tt)));
} else {
DEBUG(2, ("merge of %s changes type of %s from %s to %s",
to_name,
from->ext_Names[n],
name_of_captype(tf),
name_of_captype(tt)));
}
_nc_warning("merge changes type of %s from %s to %s",
from->ext_Names[n],
name_of_captype(tf),
name_of_captype(tt));
rc = TRUE;
}
}
free(from_name);
}
return rc;
}
#define validate_merge(p, q) \
if (invalid_merge(&((p)->tterm), &((q)->tterm))) \
return FALSE
#else
#define validate_merge(p, q) /* nothing */
#endif
NCURSES_EXPORT(int)
_nc_resolve_uses2(bool fullresolve, bool literal)
/* try to resolve all use capabilities */
{
ENTRY *qp, *rp, *lastread = 0;
bool keepgoing;
unsigned i;
int unresolved, total_unresolved, multiples;
DEBUG(2, ("RESOLUTION BEGINNING"));
/*
* Check for multiple occurrences of the same name.
*/
multiples = 0;
for_entry_list(qp) {
int matchcount = 0;
for_entry_list(rp) {
if (qp > rp
&& check_collisions(qp->tterm.term_names,
rp->tterm.term_names,
matchcount + 1)) {
if (!matchcount++) {
(void) fprintf(stderr, "\t%s\n", rp->tterm.term_names);
}
(void) fprintf(stderr, "and\t%s\n", qp->tterm.term_names);
if (!remove_collision(rp->tterm.term_names,
qp->tterm.term_names)) {
++multiples;
}
}
}
}
if (multiples > 0)
return (FALSE);
DEBUG(2, ("NO MULTIPLE NAME OCCURRENCES"));
/*
* First resolution stage: compute link pointers corresponding to names.
*/
total_unresolved = 0;
_nc_curr_col = -1;
for_entry_list(qp) {
unresolved = 0;
for (i = 0; i < qp->nuses; i++) {
bool foundit;
char *child = _nc_first_name(qp->tterm.term_names);
char *lookfor = qp->uses[i].name;
long lookline = qp->uses[i].line;
if (lookfor == 0)
continue;
foundit = FALSE;
_nc_set_type(child);
/* first, try to resolve from in-core records */
for_entry_list(rp) {
if (rp != qp
&& _nc_name_match(rp->tterm.term_names, lookfor, "|")) {
DEBUG(2, ("%s: resolving use=%s (in core)",
child, lookfor));
qp->uses[i].link = rp;
foundit = TRUE;
}
}
/* if that didn't work, try to merge in a compiled entry */
if (!foundit) {
TERMTYPE2 thisterm;
char filename[PATH_MAX];
memset(&thisterm, 0, sizeof(thisterm));
if (_nc_read_entry2(lookfor, filename, &thisterm) == 1) {
DEBUG(2, ("%s: resolving use=%s (compiled)",
child, lookfor));
TYPE_MALLOC(ENTRY, 1, rp);
rp->tterm = thisterm;
rp->nuses = 0;
rp->next = lastread;
lastread = rp;
qp->uses[i].link = rp;
foundit = TRUE;
}
}
/* no good, mark this one unresolvable and complain */
if (!foundit) {
unresolved++;
total_unresolved++;
_nc_curr_line = (int) lookline;
_nc_warning("resolution of use=%s failed", lookfor);
qp->uses[i].link = 0;
}
}
}
if (total_unresolved) {
/* free entries read in off disk */
_nc_free_entries(lastread);
return (FALSE);
}
DEBUG(2, ("NAME RESOLUTION COMPLETED OK"));
/*
* OK, at this point all (char *) references in `name' members
* have been successfully converted to (ENTRY *) pointers in
* `link' members. Time to do the actual merges.
*/
if (fullresolve) {
do {
ENTRY merged;
keepgoing = FALSE;
for_entry_list(qp) {
if (qp->nuses > 0) {
DEBUG(2, ("%s: attempting merge",
_nc_first_name(qp->tterm.term_names)));
/*
* If any of the use entries we're looking for is
* incomplete, punt. We'll catch this entry on a
* subsequent pass.
*/
for (i = 0; i < qp->nuses; i++)
if (qp->uses[i].link
&& qp->uses[i].link->nuses) {
DEBUG(2, ("%s: use entry %d unresolved",
_nc_first_name(qp->tterm.term_names), i));
goto incomplete;
}
/*
* First, make sure there is no garbage in the
* merge block. As a side effect, copy into
* the merged entry the name field and string
* table pointer.
*/
_nc_copy_termtype2(&(merged.tterm), &(qp->tterm));
/*
* Now merge in each use entry in the proper
* (reverse) order.
*/
for (; qp->nuses; qp->nuses--) {
validate_merge(&merged,
qp->uses[qp->nuses - 1].link);
_nc_merge_entry(&merged,
qp->uses[qp->nuses - 1].link);
}
/*
* Now merge in the original entry.
*/
validate_merge(&merged, qp);
_nc_merge_entry(&merged, qp);
/*
* Replace the original entry with the merged one.
*/
FreeIfNeeded(qp->tterm.Booleans);
FreeIfNeeded(qp->tterm.Numbers);
FreeIfNeeded(qp->tterm.Strings);
#if NCURSES_XNAMES
FreeIfNeeded(qp->tterm.ext_Names);
#endif
qp->tterm = merged.tterm;
_nc_wrap_entry(qp, TRUE);
/*
* We know every entry is resolvable because name resolution
* didn't bomb. So go back for another pass.
*/
/* FALLTHRU */
incomplete:
keepgoing = TRUE;
}
}
} while
(keepgoing);
DEBUG(2, ("MERGES COMPLETED OK"));
}
/*
* We'd like to free entries read in off disk at this point, but can't.
* The merge_entry() code doesn't copy the strings in the use entries,
* it just aliases them. If this ever changes, do a
* free_entries(lastread) here.
*/
DEBUG(2, ("RESOLUTION FINISHED"));
if (fullresolve) {
_nc_curr_col = -1;
for_entry_list(qp) {
_nc_curr_line = (int) qp->startline;
_nc_set_type(_nc_first_name(qp->tterm.term_names));
/*
* tic overrides this function pointer to provide more verbose
* checking.
*/
if (_nc_check_termtype2 != sanity_check2) {
SCREEN *save_SP = SP;
SCREEN fake_sp;
TERMINAL fake_tm;
TERMINAL *save_tm = cur_term;
/*
* Setup so that tic can use ordinary terminfo interface to
* obtain capability information.
*/
memset(&fake_sp, 0, sizeof(fake_sp));
memset(&fake_tm, 0, sizeof(fake_tm));
fake_sp._term = &fake_tm;
TerminalType(&fake_tm) = qp->tterm;
_nc_set_screen(&fake_sp);
set_curterm(&fake_tm);
_nc_check_termtype2(&qp->tterm, literal);
_nc_set_screen(save_SP);
set_curterm(save_tm);
} else {
fixup_acsc(&qp->tterm, literal);
}
}
DEBUG(2, ("SANITY CHECK FINISHED"));
}
return (TRUE);
}
/*
* This bit of legerdemain turns all the terminfo variable names into
* references to locations in the arrays Booleans, Numbers, and Strings ---
* precisely what's needed.
*/
#undef CUR
#define CUR tp->
static void
fixup_acsc(TERMTYPE2 *tp, int literal)
{
if (!literal) {
if (acs_chars == ABSENT_STRING
&& PRESENT(enter_alt_charset_mode)
&& PRESENT(exit_alt_charset_mode))
acs_chars = strdup(VT_ACSC);
}
}
static void
sanity_check2(TERMTYPE2 *tp, bool literal)
{
if (!PRESENT(exit_attribute_mode)) {
#ifdef __UNUSED__ /* this casts too wide a net */
bool terminal_entry = !strchr(tp->term_names, '+');
if (terminal_entry &&
(PRESENT(set_attributes)
|| PRESENT(enter_standout_mode)
|| PRESENT(enter_underline_mode)
|| PRESENT(enter_blink_mode)
|| PRESENT(enter_bold_mode)
|| PRESENT(enter_dim_mode)
|| PRESENT(enter_secure_mode)
|| PRESENT(enter_protected_mode)
|| PRESENT(enter_reverse_mode)))
_nc_warning("no exit_attribute_mode");
#endif /* __UNUSED__ */
PAIRED(enter_standout_mode, exit_standout_mode);
PAIRED(enter_underline_mode, exit_underline_mode);
#if defined(enter_italics_mode) && defined(exit_italics_mode)
PAIRED(enter_italics_mode, exit_italics_mode);
#endif
}
/* we do this check/fix in postprocess_termcap(), but some packagers
* prefer to bypass it...
*/
if (!literal) {
fixup_acsc(tp, literal);
ANDMISSING(enter_alt_charset_mode, acs_chars);
ANDMISSING(exit_alt_charset_mode, acs_chars);
}
/* listed in structure-member order of first argument */
PAIRED(enter_alt_charset_mode, exit_alt_charset_mode);
ANDMISSING(enter_blink_mode, exit_attribute_mode);
ANDMISSING(enter_bold_mode, exit_attribute_mode);
PAIRED(exit_ca_mode, enter_ca_mode);
PAIRED(enter_delete_mode, exit_delete_mode);
ANDMISSING(enter_dim_mode, exit_attribute_mode);
PAIRED(enter_insert_mode, exit_insert_mode);
ANDMISSING(enter_secure_mode, exit_attribute_mode);
ANDMISSING(enter_protected_mode, exit_attribute_mode);
ANDMISSING(enter_reverse_mode, exit_attribute_mode);
PAIRED(from_status_line, to_status_line);
PAIRED(meta_off, meta_on);
PAIRED(prtr_on, prtr_off);
PAIRED(save_cursor, restore_cursor);
PAIRED(enter_xon_mode, exit_xon_mode);
PAIRED(enter_am_mode, exit_am_mode);
ANDMISSING(label_off, label_on);
#if defined(display_clock) && defined(remove_clock)
PAIRED(display_clock, remove_clock);
#endif
ANDMISSING(set_color_pair, initialize_pair);
}
#if NO_LEAKS
NCURSES_EXPORT(void)
_nc_leaks_tic(void)
{
T((T_CALLED("_nc_free_tic()")));
_nc_globals.leak_checking = TRUE;
_nc_alloc_entry_leaks();
_nc_captoinfo_leaks();
_nc_comp_scan_leaks();
#if BROKEN_LINKER || USE_REENTRANT
_nc_names_leaks();
_nc_codes_leaks();
#endif
_nc_tic_expand(0, FALSE, 0);
}
NCURSES_EXPORT(void)
_nc_free_tic(int code)
{
_nc_leaks_tic();
exit_terminfo(code);
}
#endif
diff --git a/contrib/ncurses/ncurses/tinfo/doalloc.c b/contrib/ncurses/ncurses/tinfo/doalloc.c
index f0c8141ad05e..0bda12cae8be 100644
--- a/contrib/ncurses/ncurses/tinfo/doalloc.c
+++ b/contrib/ncurses/ncurses/tinfo/doalloc.c
@@ -1,59 +1,59 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2002,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey <dickey@clark.net> 1998 *
****************************************************************************/
/*
* Wrapper for malloc/realloc. Standard implementations allow realloc with
* a null pointer, but older libraries may not (e.g., SunOS).
*
* Also if realloc fails, we discard the old memory to avoid leaks.
*/
#include <curses.priv.h>
-MODULE_ID("$Id: doalloc.c,v 1.12 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: doalloc.c,v 1.13 2020/08/30 00:27:15 tom Exp $")
-NCURSES_EXPORT(void *)
+void *
_nc_doalloc(void *oldp, size_t amount)
{
void *newp;
if (oldp != 0) {
if ((newp = realloc(oldp, amount)) == 0) {
free(oldp);
errno = ENOMEM; /* just in case 'free' reset */
}
} else {
newp = malloc(amount);
}
return newp;
}
diff --git a/contrib/ncurses/ncurses/tinfo/lib_baudrate.c b/contrib/ncurses/ncurses/tinfo/lib_baudrate.c
index c9b449fa7c90..311c41ac97fa 100644
--- a/contrib/ncurses/ncurses/tinfo/lib_baudrate.c
+++ b/contrib/ncurses/ncurses/tinfo/lib_baudrate.c
@@ -1,303 +1,317 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
/*
* lib_baudrate.c
*
*/
#include <curses.priv.h>
#include <termcap.h> /* ospeed */
#if defined(__FreeBSD__) || defined(__OpenBSD__)
#include <sys/param.h>
#endif
/*
* These systems use similar header files, which define B1200 as 1200, etc.,
* but can be overridden by defining USE_OLD_TTY so B1200 is 9, which makes all
* of the indices up to B115200 fit nicely in a 'short', allowing us to retain
* ospeed's type for compatibility.
*/
#if NCURSES_OSPEED_COMPAT && \
((defined(__FreeBSD__) && (__FreeBSD_version < 700000)) || \
defined(__NetBSD__) || \
((defined(__OpenBSD__) && OpenBSD < 201510)) || \
defined(__APPLE__))
#undef B0
#undef B50
#undef B75
#undef B110
#undef B134
#undef B150
#undef B200
#undef B300
#undef B600
#undef B1200
#undef B1800
#undef B2400
#undef B4800
#undef B9600
#undef B19200
#undef EXTA
#undef B38400
#undef EXTB
#undef B57600
#undef B115200
#undef B230400
#undef B460800
#undef B921600
#define USE_OLD_TTY
#include <sys/ttydev.h>
#else
#undef USE_OLD_TTY
#endif /* USE_OLD_TTY */
-MODULE_ID("$Id: lib_baudrate.c,v 1.44 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_baudrate.c,v 1.45 2020/09/05 21:15:32 tom Exp $")
/*
* int
* baudrate()
*
* Returns the current terminal's baud rate.
*
*/
struct speed {
int given_speed; /* values for 'ospeed' */
int actual_speed; /* the actual speed */
};
-#define DATA(number) { (NCURSES_OSPEED)B##number, number }
+#if !defined(EXP_WIN32_DRIVER)
+#define DATA(number) { B##number, number }
static struct speed const speeds[] =
{
DATA(0),
DATA(50),
DATA(75),
DATA(110),
DATA(134),
DATA(150),
DATA(200),
DATA(300),
DATA(600),
DATA(1200),
DATA(1800),
DATA(2400),
DATA(4800),
DATA(9600),
#ifdef B19200
DATA(19200),
#elif defined(EXTA)
{EXTA, 19200},
#endif
#ifdef B28800
DATA(28800),
#endif
#ifdef B38400
DATA(38400),
#elif defined(EXTB)
{EXTB, 38400},
#endif
#ifdef B57600
DATA(57600),
#endif
/* ifdef to prevent overflow when OLD_TTY is not available */
#if !(NCURSES_OSPEED_COMPAT && defined(__FreeBSD__) && (__FreeBSD_version > 700000))
#ifdef B76800
DATA(76800),
#endif
#ifdef B115200
DATA(115200),
#endif
#ifdef B153600
DATA(153600),
#endif
#ifdef B230400
DATA(230400),
#endif
#ifdef B307200
DATA(307200),
#endif
#ifdef B460800
DATA(460800),
#endif
#ifdef B500000
DATA(500000),
#endif
#ifdef B576000
DATA(576000),
#endif
#ifdef B921600
DATA(921600),
#endif
#ifdef B1000000
DATA(1000000),
#endif
#ifdef B1152000
DATA(1152000),
#endif
#ifdef B1500000
DATA(1500000),
#endif
#ifdef B2000000
DATA(2000000),
#endif
#ifdef B2500000
DATA(2500000),
#endif
#ifdef B3000000
DATA(3000000),
#endif
#ifdef B3500000
DATA(3500000),
#endif
#ifdef B4000000
DATA(4000000),
#endif
#endif
};
+#endif /* !EXP_WIN32_DRIVER */
NCURSES_EXPORT(int)
_nc_baudrate(int OSpeed)
{
+#if defined(EXP_WIN32_DRIVER)
+ /* On Windows this is a noop */
+ (void) OSpeed;
+ return (OK);
+#else
#if !USE_REENTRANT
static int last_OSpeed;
static int last_baudrate;
#endif
int result = ERR;
if (OSpeed < 0)
OSpeed = (NCURSES_OSPEED) OSpeed;
if (OSpeed < 0)
OSpeed = (unsigned short) OSpeed;
#if !USE_REENTRANT
if (OSpeed == last_OSpeed) {
result = last_baudrate;
}
#endif
if (result == ERR) {
if (OSpeed >= 0) {
unsigned i;
for (i = 0; i < SIZEOF(speeds); i++) {
if (speeds[i].given_speed > OSpeed) {
break;
}
if (speeds[i].given_speed == OSpeed) {
result = speeds[i].actual_speed;
break;
}
}
}
#if !USE_REENTRANT
if (OSpeed != last_OSpeed) {
last_OSpeed = OSpeed;
last_baudrate = result;
}
#endif
}
return (result);
+#endif /* !EXP_WIN32_DRIVER */
}
NCURSES_EXPORT(int)
_nc_ospeed(int BaudRate)
{
int result = 1;
-
+#if defined(EXP_WIN32_DRIVER)
+ (void) BaudRate;
+#else
if (BaudRate >= 0) {
unsigned i;
for (i = 0; i < SIZEOF(speeds); i++) {
if (speeds[i].actual_speed == BaudRate) {
result = speeds[i].given_speed;
break;
}
}
}
+#endif
return (result);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(baudrate) (NCURSES_SP_DCL0)
{
int result;
T((T_CALLED("baudrate(%p)"), (void *) SP_PARM));
+#if defined(EXP_WIN32_DRIVER)
+ result = OK;
+#else
/*
* In debugging, allow the environment symbol to override when we're
* redirecting to a file, so we can construct repeatable test-cases
* that take into account costs that depend on baudrate.
*/
#ifdef TRACE
if (IsValidTIScreen(SP_PARM)
&& !NC_ISATTY(fileno((SP_PARM && SP_PARM->_ofp) ? SP_PARM->_ofp : stdout))
&& getenv("BAUDRATE") != 0) {
int ret;
if ((ret = _nc_getenv_num("BAUDRATE")) <= 0)
ret = 9600;
ospeed = (NCURSES_OSPEED) _nc_ospeed(ret);
returnCode(ret);
}
#endif
if (IsValidTIScreen(SP_PARM)) {
#ifdef USE_OLD_TTY
result = (int) cfgetospeed(&(TerminalOf(SP_PARM)->Nttyb));
ospeed = (NCURSES_OSPEED) _nc_ospeed(result);
#else /* !USE_OLD_TTY */
#ifdef TERMIOS
ospeed = (NCURSES_OSPEED) cfgetospeed(&(TerminalOf(SP_PARM)->Nttyb));
#else
ospeed = (NCURSES_OSPEED) TerminalOf(SP_PARM)->Nttyb.sg_ospeed;
#endif
result = _nc_baudrate(ospeed);
#endif
TerminalOf(SP_PARM)->_baudrate = result;
} else {
result = ERR;
}
-
+#endif /* !EXP_WIN32_DRIVER */
returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
baudrate(void)
{
return NCURSES_SP_NAME(baudrate) (CURRENT_SCREEN);
}
#endif
diff --git a/contrib/ncurses/ncurses/tinfo/lib_cur_term.c b/contrib/ncurses/ncurses/tinfo/lib_cur_term.c
index 4a90335d5e33..0373aebb11b9 100644
--- a/contrib/ncurses/ncurses/tinfo/lib_cur_term.c
+++ b/contrib/ncurses/ncurses/tinfo/lib_cur_term.c
@@ -1,188 +1,189 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey <dickey@clark.net> 1997 *
****************************************************************************/
/*
* Module that "owns" the 'cur_term' variable:
*
* TERMINAL *set_curterm(TERMINAL *)
* int del_curterm(TERMINAL *)
*/
#include <curses.priv.h>
#include <termcap.h> /* ospeed */
+#include <tic.h> /* VALID_STRING */
-MODULE_ID("$Id: lib_cur_term.c,v 1.42 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_cur_term.c,v 1.43 2020/10/24 18:54:32 tom Exp $")
#undef CUR
#define CUR TerminalType(termp).
#if USE_REENTRANT
NCURSES_EXPORT(TERMINAL *)
NCURSES_SP_NAME(_nc_get_cur_term) (NCURSES_SP_DCL0)
{
return ((0 != TerminalOf(SP_PARM)) ? TerminalOf(SP_PARM) : CurTerm);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(TERMINAL *)
_nc_get_cur_term(void)
{
return NCURSES_SP_NAME(_nc_get_cur_term) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(TERMINAL *)
NCURSES_PUBLIC_VAR(cur_term) (void)
{
#if NCURSES_SP_FUNCS
return NCURSES_SP_NAME(_nc_get_cur_term) (CURRENT_SCREEN);
#else
return NCURSES_SP_NAME(_nc_get_cur_term) (NCURSES_SP_ARG);
#endif
}
#else
NCURSES_EXPORT_VAR(TERMINAL *) cur_term = 0;
#endif
NCURSES_EXPORT(TERMINAL *)
NCURSES_SP_NAME(set_curterm) (NCURSES_SP_DCLx TERMINAL *termp)
{
TERMINAL *oldterm;
T((T_CALLED("set_curterm(%p)"), (void *) termp));
_nc_lock_global(curses);
oldterm = cur_term;
if (SP_PARM)
SP_PARM->_term = termp;
#if USE_REENTRANT
CurTerm = termp;
#else
cur_term = termp;
#endif
if (termp != 0) {
#ifdef USE_TERM_DRIVER
TERMINAL_CONTROL_BLOCK *TCB = (TERMINAL_CONTROL_BLOCK *) termp;
ospeed = (NCURSES_OSPEED) _nc_ospeed(termp->_baudrate);
if (TCB->drv &&
TCB->drv->isTerminfo &&
TerminalType(termp).Strings) {
- PC = (char) ((pad_char != NULL) ? pad_char[0] : 0);
+ PC = (char) (VALID_STRING(pad_char) ? pad_char[0] : 0);
}
TCB->csp = SP_PARM;
#else
ospeed = (NCURSES_OSPEED) _nc_ospeed(termp->_baudrate);
if (TerminalType(termp).Strings) {
- PC = (char) ((pad_char != NULL) ? pad_char[0] : 0);
+ PC = (char) (VALID_STRING(pad_char) ? pad_char[0] : 0);
}
#endif
#if !USE_REENTRANT
save_ttytype(termp);
#endif
}
_nc_unlock_global(curses);
T((T_RETURN("%p"), (void *) oldterm));
return (oldterm);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(TERMINAL *)
set_curterm(TERMINAL *termp)
{
return NCURSES_SP_NAME(set_curterm) (CURRENT_SCREEN, termp);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(del_curterm) (NCURSES_SP_DCLx TERMINAL *termp)
{
int rc = ERR;
T((T_CALLED("del_curterm(%p, %p)"), (void *) SP_PARM, (void *) termp));
if (termp != 0) {
#ifdef USE_TERM_DRIVER
TERMINAL_CONTROL_BLOCK *TCB = (TERMINAL_CONTROL_BLOCK *) termp;
#endif
TERMINAL *cur = (
#if USE_REENTRANT
NCURSES_SP_NAME(_nc_get_cur_term) (NCURSES_SP_ARG)
#else
cur_term
#endif
);
#if NCURSES_EXT_NUMBERS
_nc_free_termtype(&termp->type);
#endif
_nc_free_termtype2(&TerminalType(termp));
if (termp == cur)
NCURSES_SP_NAME(set_curterm) (NCURSES_SP_ARGx 0);
FreeIfNeeded(termp->_termname);
#if USE_HOME_TERMINFO
if (_nc_globals.home_terminfo != 0) {
FreeAndNull(_nc_globals.home_terminfo);
}
#endif
#ifdef USE_TERM_DRIVER
if (TCB->drv)
TCB->drv->td_release(TCB);
#endif
#if NO_LEAKS
/* discard memory used in tgetent's cache for this terminal */
_nc_tgetent_leak(termp);
#endif
free(termp);
rc = OK;
}
returnCode(rc);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
del_curterm(TERMINAL *termp)
{
int rc;
_nc_lock_global(curses);
rc = NCURSES_SP_NAME(del_curterm) (CURRENT_SCREEN, termp);
_nc_unlock_global(curses);
return (rc);
}
#endif
diff --git a/contrib/ncurses/ncurses/tinfo/lib_data.c b/contrib/ncurses/ncurses/tinfo/lib_data.c
index bf3e554df70d..39274f4e7c39 100644
--- a/contrib/ncurses/ncurses/tinfo/lib_data.c
+++ b/contrib/ncurses/ncurses/tinfo/lib_data.c
@@ -1,398 +1,403 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer *
****************************************************************************/
/*
** lib_data.c
**
** Common data that may/may not be allocated, but is referenced globally
**
*/
#include <curses.priv.h>
-MODULE_ID("$Id: lib_data.c,v 1.80 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_data.c,v 1.81 2020/06/13 22:01:14 tom Exp $")
/*
* OS/2's native linker complains if we don't initialize public data when
* constructing a dll (reported by J.J.G.Ripoll).
*/
#if USE_REENTRANT
NCURSES_EXPORT(WINDOW *)
NCURSES_PUBLIC_VAR(stdscr) (void)
{
return CURRENT_SCREEN ? StdScreen(CURRENT_SCREEN) : 0;
}
NCURSES_EXPORT(WINDOW *)
NCURSES_PUBLIC_VAR(curscr) (void)
{
return CURRENT_SCREEN ? CurScreen(CURRENT_SCREEN) : 0;
}
NCURSES_EXPORT(WINDOW *)
NCURSES_PUBLIC_VAR(newscr) (void)
{
return CURRENT_SCREEN ? NewScreen(CURRENT_SCREEN) : 0;
}
#else
NCURSES_EXPORT_VAR(WINDOW *) stdscr = 0;
NCURSES_EXPORT_VAR(WINDOW *) curscr = 0;
NCURSES_EXPORT_VAR(WINDOW *) newscr = 0;
#endif
NCURSES_EXPORT_VAR(SCREEN *) _nc_screen_chain = 0;
/*
* The variable 'SP' will be defined as a function on systems that cannot link
* data-only modules, since it is used in a lot of places within ncurses and we
* cannot guarantee that any application will use any particular function. We
* put the WINDOW variables in this module, because it appears that any
* application that uses them will also use 'SP'.
*
* This module intentionally does not reference other ncurses modules, to avoid
* module coupling that increases the size of the executable.
*/
#if BROKEN_LINKER
static SCREEN *my_screen;
NCURSES_EXPORT(SCREEN *)
_nc_screen(void)
{
return my_screen;
}
NCURSES_EXPORT(int)
_nc_alloc_screen(void)
{
my_screen = _nc_alloc_screen_sp();
T(("_nc_alloc_screen_sp %p", my_screen));
return (my_screen != 0);
}
NCURSES_EXPORT(void)
_nc_set_screen(SCREEN *sp)
{
my_screen = sp;
}
#else
NCURSES_EXPORT_VAR(SCREEN *) SP = NULL; /* Some linkers require initialized data... */
#endif
/* *INDENT-OFF* */
#define CHARS_0s { '\0' }
#define TGETENT_0 { 0L, FALSE, NULL, NULL, NULL }
#define TGETENT_0s { TGETENT_0, TGETENT_0, TGETENT_0, TGETENT_0 }
NCURSES_EXPORT_VAR(NCURSES_GLOBALS) _nc_globals = {
0, /* have_sigtstp */
0, /* have_sigwinch */
0, /* cleanup_nested */
FALSE, /* init_signals */
FALSE, /* init_screen */
NULL, /* comp_sourcename */
NULL, /* comp_termtype */
FALSE, /* have_tic_directory */
FALSE, /* keep_tic_directory */
0, /* tic_directory */
NULL, /* dbi_list */
0, /* dbi_size */
NULL, /* first_name */
NULL, /* keyname_table */
0, /* init_keyname */
0, /* slk_format */
2048, /* getstr_limit */
NULL, /* safeprint_buf */
0, /* safeprint_used */
TGETENT_0s, /* tgetent_cache */
0, /* tgetent_index */
0, /* tgetent_sequence */
0, /* dbd_blob */
0, /* dbd_list */
0, /* dbd_size */
0, /* dbd_time */
{ { 0, 0 } }, /* dbd_vars */
+#if HAVE_TSEARCH
+ NULL, /* cached_tparm */
+ 0, /* count_tparm */
+#endif /* HAVE_TSEARCH */
+
#ifdef USE_TERM_DRIVER
0, /* term_driver */
#endif
#ifndef USE_SP_WINDOWLIST
0, /* _nc_windowlist */
#endif
#if USE_HOME_TERMINFO
NULL, /* home_terminfo */
#endif
#if !USE_SAFE_SPRINTF
0, /* safeprint_cols */
0, /* safeprint_rows */
#endif
#ifdef USE_PTHREADS
PTHREAD_MUTEX_INITIALIZER, /* mutex_curses */
PTHREAD_MUTEX_INITIALIZER, /* mutex_prescreen */
PTHREAD_MUTEX_INITIALIZER, /* mutex_screen */
PTHREAD_MUTEX_INITIALIZER, /* mutex_update */
PTHREAD_MUTEX_INITIALIZER, /* mutex_tst_tracef */
PTHREAD_MUTEX_INITIALIZER, /* mutex_tracef */
0, /* nested_tracef */
0, /* use_pthreads */
#if USE_PTHREADS_EINTR
0, /* read_thread */
#endif
#endif
#if USE_WIDEC_SUPPORT
CHARS_0s, /* key_name */
#endif
#ifdef TRACE
FALSE, /* trace_opened */
CHARS_0s, /* trace_fname */
0, /* trace_level */
NULL, /* trace_fp */
-1, /* trace_fd */
NULL, /* tracearg_buf */
0, /* tracearg_used */
NULL, /* tracebuf_ptr */
0, /* tracebuf_used */
CHARS_0s, /* tracechr_buf */
NULL, /* tracedmp_buf */
0, /* tracedmp_used */
NULL, /* tracetry_buf */
0, /* tracetry_used */
{ CHARS_0s, CHARS_0s }, /* traceatr_color_buf */
0, /* traceatr_color_sel */
-1, /* traceatr_color_last */
#if !defined(USE_PTHREADS) && USE_REENTRANT
0, /* nested_tracef */
#endif
#endif /* TRACE */
#if NO_LEAKS
FALSE, /* leak_checking */
#endif
};
#define STACK_FRAME_0 { { 0 }, 0 }
#define STACK_FRAME_0s { STACK_FRAME_0 }
#define NUM_VARS_0s { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
#define RIPOFF_0 { 0,0,0 }
#define RIPOFF_0s { RIPOFF_0 }
NCURSES_EXPORT_VAR(NCURSES_PRESCREEN) _nc_prescreen = {
NULL, /* allocated */
TRUE, /* use_env */
FALSE, /* filter_mode */
A_NORMAL, /* previous_attr */
{ /* tparm_state */
NULL, /* tparam_base */
STACK_FRAME_0s, /* stack */
0, /* stack_ptr */
NULL, /* out_buff */
0, /* out_size */
0, /* out_used */
NULL, /* fmt_buff */
0, /* fmt_size */
NUM_VARS_0s, /* dynamic_var */
NUM_VARS_0s, /* static_vars */
#ifdef TRACE
NULL, /* tname */
#endif
},
NULL, /* saved_tty */
FALSE, /* use_tioctl */
0, /* _outch */
#ifndef USE_SP_RIPOFF
RIPOFF_0s, /* ripoff */
NULL, /* rsp */
#endif
#if NCURSES_NO_PADDING
FALSE, /* flag to set if padding disabled */
#endif
#if BROKEN_LINKER || USE_REENTRANT
NULL, /* real_acs_map */
0, /* LINES */
0, /* COLS */
8, /* TABSIZE */
1000, /* ESCDELAY */
0, /* cur_term */
#endif
#ifdef TRACE
#if BROKEN_LINKER || USE_REENTRANT
0L, /* _outchars */
NULL, /* _tputs_trace */
#endif
#endif
};
/* *INDENT-ON* */
/*
* wgetch() and other functions with a WINDOW* parameter may use a SCREEN*
* internally, and it is useful to allow those to be invoked without switching
* SCREEN's, e.g., for multi-threaded applications.
*/
NCURSES_EXPORT(SCREEN *)
_nc_screen_of(WINDOW *win)
{
SCREEN *sp = 0;
if (win != 0) {
sp = WINDOW_EXT(win, screen);
}
return (sp);
}
/******************************************************************************/
#ifdef USE_PTHREADS
static void
init_global_mutexes(void)
{
static bool initialized = FALSE;
if (!initialized) {
initialized = TRUE;
_nc_mutex_init(&_nc_globals.mutex_curses);
_nc_mutex_init(&_nc_globals.mutex_prescreen);
_nc_mutex_init(&_nc_globals.mutex_screen);
_nc_mutex_init(&_nc_globals.mutex_update);
_nc_mutex_init(&_nc_globals.mutex_tst_tracef);
_nc_mutex_init(&_nc_globals.mutex_tracef);
}
}
NCURSES_EXPORT(void)
_nc_init_pthreads(void)
{
if (_nc_use_pthreads)
return;
# if USE_WEAK_SYMBOLS
if ((pthread_mutex_init) == 0)
return;
if ((pthread_mutex_lock) == 0)
return;
if ((pthread_mutex_unlock) == 0)
return;
if ((pthread_mutex_trylock) == 0)
return;
if ((pthread_mutexattr_settype) == 0)
return;
# endif
_nc_use_pthreads = 1;
init_global_mutexes();
}
/*
* Use recursive mutexes if we have them - they're part of Unix98.
* For the cases where we do not, _nc_mutex_trylock() is used to avoid a
* deadlock, at the expense of memory leaks and unexpected failures that
* may not be handled by typical clients.
*
* FIXME - need configure check for PTHREAD_MUTEX_RECURSIVE, define it to
* PTHREAD_MUTEX_NORMAL if not supported.
*/
NCURSES_EXPORT(void)
_nc_mutex_init(pthread_mutex_t * obj)
{
pthread_mutexattr_t recattr;
if (_nc_use_pthreads) {
pthread_mutexattr_init(&recattr);
pthread_mutexattr_settype(&recattr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(obj, &recattr);
}
}
NCURSES_EXPORT(int)
_nc_mutex_lock(pthread_mutex_t * obj)
{
if (_nc_use_pthreads == 0)
return 0;
return pthread_mutex_lock(obj);
}
NCURSES_EXPORT(int)
_nc_mutex_trylock(pthread_mutex_t * obj)
{
if (_nc_use_pthreads == 0)
return 0;
return pthread_mutex_trylock(obj);
}
NCURSES_EXPORT(int)
_nc_mutex_unlock(pthread_mutex_t * obj)
{
if (_nc_use_pthreads == 0)
return 0;
return pthread_mutex_unlock(obj);
}
#endif /* USE_PTHREADS */
#if defined(USE_PTHREADS) || USE_PTHREADS_EINTR
#if USE_WEAK_SYMBOLS
/*
* NB: sigprocmask(2) is global but pthread_sigmask(3p)
* only for the calling thread.
*/
NCURSES_EXPORT(int)
_nc_sigprocmask(int how, const sigset_t * newmask, sigset_t * oldmask)
{
if ((pthread_sigmask))
return pthread_sigmask(how, newmask, oldmask);
else
return (sigprocmask) (how, newmask, oldmask);
}
#endif
#endif /* USE_PTHREADS */
diff --git a/contrib/ncurses/ncurses/tinfo/lib_kernel.c b/contrib/ncurses/ncurses/tinfo/lib_kernel.c
index 482657add7cf..d5b021b80728 100644
--- a/contrib/ncurses/ncurses/tinfo/lib_kernel.c
+++ b/contrib/ncurses/ncurses/tinfo/lib_kernel.c
@@ -1,185 +1,195 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 2002 *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
/*
* lib_kernel.c
*
* Misc. low-level routines:
* erasechar()
* killchar()
* flushinp()
*
* The baudrate() and delay_output() functions could logically live here,
* but are in other modules to reduce the static-link size of programs
* that use only these facilities.
*/
#include <curses.priv.h>
-MODULE_ID("$Id: lib_kernel.c,v 1.32 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_kernel.c,v 1.34 2020/11/21 22:05:58 tom Exp $")
+#ifdef TERMIOS
static int
_nc_vdisable(void)
{
int value = -1;
#if defined(_POSIX_VDISABLE) && HAVE_UNISTD_H
value = _POSIX_VDISABLE;
#endif
#if defined(_PC_VDISABLE)
if (value == -1) {
value = (int) fpathconf(0, _PC_VDISABLE);
if (value == -1) {
value = 0377;
}
}
#elif defined(VDISABLE)
if (value == -1)
value = VDISABLE;
#endif
return value;
}
+#endif /* TERMIOS */
/*
* erasechar()
*
* Return erase character as given in cur_term->Ottyb.
*
*/
NCURSES_EXPORT(char)
NCURSES_SP_NAME(erasechar) (NCURSES_SP_DCL0)
{
int result = ERR;
TERMINAL *termp = TerminalOf(SP_PARM);
T((T_CALLED("erasechar(%p)"), (void *) SP_PARM));
if (termp != 0) {
#ifdef TERMIOS
result = termp->Ottyb.c_cc[VERASE];
if (result == _nc_vdisable())
result = ERR;
+#elif defined(EXP_WIN32_DRIVER)
+ result = ERR;
#else
result = termp->Ottyb.sg_erase;
#endif
}
returnChar((char) result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(char)
erasechar(void)
{
return NCURSES_SP_NAME(erasechar) (CURRENT_SCREEN);
}
#endif
/*
* killchar()
*
* Return kill character as given in cur_term->Ottyb.
*
*/
NCURSES_EXPORT(char)
NCURSES_SP_NAME(killchar) (NCURSES_SP_DCL0)
{
int result = ERR;
TERMINAL *termp = TerminalOf(SP_PARM);
T((T_CALLED("killchar(%p)"), (void *) SP_PARM));
if (termp != 0) {
#ifdef TERMIOS
result = termp->Ottyb.c_cc[VKILL];
if (result == _nc_vdisable())
result = ERR;
+#elif defined(EXP_WIN32_DRIVER)
+ result = ERR;
#else
result = termp->Ottyb.sg_kill;
#endif
}
returnChar((char) result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(char)
killchar(void)
{
return NCURSES_SP_NAME(killchar) (CURRENT_SCREEN);
}
#endif
/*
* flushinp()
*
* Flush any input on cur_term->Filedes
*
*/
NCURSES_EXPORT(int)
NCURSES_SP_NAME(flushinp) (NCURSES_SP_DCL0)
{
TERMINAL *termp = TerminalOf(SP_PARM);
T((T_CALLED("flushinp(%p)"), (void *) SP_PARM));
if (termp != 0) {
#ifdef TERMIOS
tcflush(termp->Filedes, TCIFLUSH);
#else
errno = 0;
do {
+#if defined(EXP_WIN32_DRIVER)
+ _nc_console_flush(_nc_console_fd2handle(termp->Filedes));
+#else
ioctl(termp->Filedes, TIOCFLUSH, 0);
+#endif
} while
(errno == EINTR);
#endif
if (SP_PARM) {
SP_PARM->_fifohead = -1;
SP_PARM->_fifotail = 0;
SP_PARM->_fifopeek = 0;
}
returnCode(OK);
}
returnCode(ERR);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
flushinp(void)
{
return NCURSES_SP_NAME(flushinp) (CURRENT_SCREEN);
}
#endif
diff --git a/contrib/ncurses/ncurses/tinfo/lib_napms.c b/contrib/ncurses/ncurses/tinfo/lib_napms.c
index 99dacd722928..3a9fc3168784 100644
--- a/contrib/ncurses/ncurses/tinfo/lib_napms.c
+++ b/contrib/ncurses/ncurses/tinfo/lib_napms.c
@@ -1,92 +1,94 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2014,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
/*
* lib_napms.c
*
* The routine napms.
*
* (This file was originally written by Eric Raymond; however except for
* comments, none of the original code remains - T.Dickey).
*/
#include <curses.priv.h>
#if HAVE_NANOSLEEP
#include <time.h>
#if HAVE_SYS_TIME_H
#include <sys/time.h> /* needed for MacOS X DP3 */
#endif
#endif
-MODULE_ID("$Id: lib_napms.c,v 1.26 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_napms.c,v 1.27 2020/08/15 19:45:23 tom Exp $")
NCURSES_EXPORT(int)
NCURSES_SP_NAME(napms) (NCURSES_SP_DCLx int ms)
{
T((T_CALLED("napms(%d)"), ms));
#ifdef USE_TERM_DRIVER
CallDriver_1(SP_PARM, td_nap, ms);
#else /* !USE_TERM_DRIVER */
#if NCURSES_SP_FUNCS
(void) sp;
#endif
#if HAVE_NANOSLEEP
{
struct timespec request, remaining;
request.tv_sec = ms / 1000;
request.tv_nsec = (ms % 1000) * 1000000;
while (nanosleep(&request, &remaining) == -1
&& errno == EINTR) {
request = remaining;
}
}
+#elif defined(_NC_WINDOWS)
+ Sleep((DWORD) ms);
#else
_nc_timed_wait(0, 0, ms, (int *) 0 EVENTLIST_2nd(0));
#endif
#endif /* !USE_TERM_DRIVER */
returnCode(OK);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
napms(int ms)
{
return NCURSES_SP_NAME(napms) (CURRENT_SCREEN, ms);
}
#endif
diff --git a/contrib/ncurses/ncurses/tinfo/lib_options.c b/contrib/ncurses/ncurses/tinfo/lib_options.c
index 784e06c17fa1..017a34aac6e7 100644
--- a/contrib/ncurses/ncurses/tinfo/lib_options.c
+++ b/contrib/ncurses/ncurses/tinfo/lib_options.c
@@ -1,378 +1,378 @@
/****************************************************************************
- * Copyright 2020 Thomas E. Dickey *
+ * Copyright 2020,2021 Thomas E. Dickey *
* Copyright 1998-2014,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
/*
** lib_options.c
**
** The routines to handle option setting.
**
*/
#include <curses.priv.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_options.c,v 1.81 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_options.c,v 1.82 2021/02/14 00:17:35 tom Exp $")
NCURSES_EXPORT(int)
idlok(WINDOW *win, bool flag)
{
int res = ERR;
T((T_CALLED("idlok(%p,%d)"), (void *) win, flag));
if (win) {
SCREEN *sp = _nc_screen_of(win);
if (sp != 0
#ifdef USE_TERM_DRIVER
&& IsTermInfo(sp)
#endif
) {
sp->_nc_sp_idlok =
win->_idlok = (flag && (NCURSES_SP_NAME(has_il) (NCURSES_SP_ARG)
|| change_scroll_region));
res = OK;
}
}
returnCode(res);
}
NCURSES_EXPORT(void)
idcok(WINDOW *win, bool flag)
{
T((T_CALLED("idcok(%p,%d)"), (void *) win, flag));
if (win) {
SCREEN *sp = _nc_screen_of(win);
sp->_nc_sp_idcok = win->_idcok = (flag && NCURSES_SP_NAME(has_ic) (NCURSES_SP_ARG));
}
returnVoid;
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(halfdelay) (NCURSES_SP_DCLx int t)
{
T((T_CALLED("halfdelay(%p,%d)"), (void *) SP_PARM, t));
if (t < 1 || t > 255 || !SP_PARM || !IsValidTIScreen(SP_PARM))
returnCode(ERR);
NCURSES_SP_NAME(cbreak) (NCURSES_SP_ARG);
SP_PARM->_cbreak = t + 1;
returnCode(OK);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
halfdelay(int t)
{
return NCURSES_SP_NAME(halfdelay) (CURRENT_SCREEN, t);
}
#endif
NCURSES_EXPORT(int)
nodelay(WINDOW *win, bool flag)
{
T((T_CALLED("nodelay(%p,%d)"), (void *) win, flag));
if (win) {
if (flag == TRUE)
win->_delay = 0;
else
win->_delay = -1;
returnCode(OK);
} else
returnCode(ERR);
}
NCURSES_EXPORT(int)
notimeout(WINDOW *win, bool f)
{
T((T_CALLED("notimeout(%p,%d)"), (void *) win, f));
if (win) {
win->_notimeout = f;
returnCode(OK);
} else
returnCode(ERR);
}
NCURSES_EXPORT(void)
wtimeout(WINDOW *win, int delay)
{
T((T_CALLED("wtimeout(%p,%d)"), (void *) win, delay));
if (win) {
win->_delay = delay;
}
returnVoid;
}
NCURSES_EXPORT(int)
keypad(WINDOW *win, bool flag)
{
T((T_CALLED("keypad(%p,%d)"), (void *) win, flag));
if (win) {
win->_use_keypad = flag;
returnCode(_nc_keypad(_nc_screen_of(win), flag));
} else
returnCode(ERR);
}
NCURSES_EXPORT(int)
meta(WINDOW *win GCC_UNUSED, bool flag)
{
int result = ERR;
SCREEN *sp = (win == 0) ? CURRENT_SCREEN : _nc_screen_of(win);
/* Ok, we stay relaxed and don't signal an error if win is NULL */
T((T_CALLED("meta(%p,%d)"), (void *) win, flag));
/* Ok, we stay relaxed and don't signal an error if win is NULL */
if (sp != 0) {
sp->_use_meta = flag;
#ifdef USE_TERM_DRIVER
if (IsTermInfo(sp)) {
if (flag) {
NCURSES_PUTP2("meta_on", meta_on);
} else {
NCURSES_PUTP2("meta_off", meta_off);
}
}
#else
if (flag) {
NCURSES_PUTP2("meta_on", meta_on);
} else {
NCURSES_PUTP2("meta_off", meta_off);
}
#endif
result = OK;
}
returnCode(result);
}
/* curs_set() moved here to narrow the kernel interface */
NCURSES_EXPORT(int)
NCURSES_SP_NAME(curs_set) (NCURSES_SP_DCLx int vis)
{
int code = ERR;
T((T_CALLED("curs_set(%p,%d)"), (void *) SP_PARM, vis));
if (SP_PARM != 0 && vis >= 0 && vis <= 2) {
int cursor = SP_PARM->_cursor;
if (vis == cursor) {
code = cursor;
} else {
#ifdef USE_TERM_DRIVER
code = CallDriver_1(SP_PARM, td_cursorSet, vis);
#else
if (IsValidTIScreen(SP_PARM)) {
switch (vis) {
case 2:
code = NCURSES_PUTP2_FLUSH("cursor_visible",
cursor_visible);
break;
case 1:
code = NCURSES_PUTP2_FLUSH("cursor_normal",
cursor_normal);
break;
case 0:
code = NCURSES_PUTP2_FLUSH("cursor_invisible",
cursor_invisible);
break;
}
} else {
code = ERR;
}
#endif
if (code != ERR)
code = (cursor == -1 ? 1 : cursor);
SP_PARM->_cursor = vis;
}
}
returnCode(code);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
curs_set(int vis)
{
return (NCURSES_SP_NAME(curs_set) (CURRENT_SCREEN, vis));
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(typeahead) (NCURSES_SP_DCLx int fd)
{
T((T_CALLED("typeahead(%p, %d)"), (void *) SP_PARM, fd));
if (SP_PARM && IsValidTIScreen(SP_PARM)) {
SP_PARM->_checkfd = fd;
returnCode(OK);
} else {
returnCode(ERR);
}
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
typeahead(int fd)
{
return NCURSES_SP_NAME(typeahead) (CURRENT_SCREEN, fd);
}
#endif
/*
** has_key()
**
** Return TRUE if the current terminal has the given key
**
*/
#if NCURSES_EXT_FUNCS
static int
has_key_internal(int keycode, TRIES * tp)
{
if (tp == 0)
return (FALSE);
else if (tp->value == keycode)
return (TRUE);
else
return (has_key_internal(keycode, tp->child)
|| has_key_internal(keycode, tp->sibling));
}
#ifdef USE_TERM_DRIVER
NCURSES_EXPORT(int)
TINFO_HAS_KEY(SCREEN *sp, int keycode)
{
return IsValidTIScreen(sp) ?
has_key_internal(keycode, sp->_keytry) : 0;
}
#else
NCURSES_EXPORT(int)
NCURSES_SP_NAME(has_key) (NCURSES_SP_DCLx int keycode)
{
T((T_CALLED("has_key(%p,%d)"), (void *) SP_PARM, keycode));
returnCode(SP != 0 ? has_key_internal(keycode, SP_PARM->_keytry) : FALSE);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
has_key(int keycode)
{
return NCURSES_SP_NAME(has_key) (CURRENT_SCREEN, keycode);
}
#endif
#endif
#endif /* NCURSES_EXT_FUNCS */
NCURSES_EXPORT(int)
NCURSES_SP_NAME(_nc_putp_flush) (NCURSES_SP_DCLx
const char *name, const char *value)
{
int rc = NCURSES_PUTP2(name, value);
if (rc != ERR) {
_nc_flush();
}
return rc;
}
#if 0 && NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
_nc_putp_flush(const char *name, const char *value)
{
return NCURSES_SP_NAME(_nc_putp_flush) (CURRENT_SCREEN, name, value);
}
#endif
/* Turn the keypad on/off
*
* Note: we flush the output because changing this mode causes some terminals
* to emit different escape sequences for cursor and keypad keys. If we don't
* flush, then the next wgetch may get the escape sequence that corresponds to
* the terminal state _before_ switching modes.
*/
NCURSES_EXPORT(int)
_nc_keypad(SCREEN *sp, int flag)
{
int rc = ERR;
if (sp != 0) {
#ifdef USE_PTHREADS
/*
* We might have this situation in a multithreaded application that
* has wgetch() reading in more than one thread. putp() and below
* may use SP explicitly.
*/
if (_nc_use_pthreads && sp != CURRENT_SCREEN) {
SCREEN *save_sp;
/* cannot use use_screen(), since that is not in tinfo library */
_nc_lock_global(curses);
save_sp = CURRENT_SCREEN;
_nc_set_screen(sp);
rc = _nc_keypad(sp, flag);
_nc_set_screen(save_sp);
_nc_unlock_global(curses);
} else
#endif
{
#ifdef USE_TERM_DRIVER
rc = CallDriver_1(sp, td_kpad, flag);
if (rc == OK)
sp->_keypad_on = flag;
#else
if (flag) {
(void) NCURSES_PUTP2_FLUSH("keypad_xmit", keypad_xmit);
- } else if (!flag && keypad_local) {
+ } else if (keypad_local) {
(void) NCURSES_PUTP2_FLUSH("keypad_local", keypad_local);
}
if (flag && !sp->_tried) {
_nc_init_keytry(sp);
sp->_tried = TRUE;
}
sp->_keypad_on = flag;
rc = OK;
#endif
}
}
return (rc);
}
diff --git a/contrib/ncurses/ncurses/tinfo/lib_print.c b/contrib/ncurses/ncurses/tinfo/lib_print.c
index eb9214925a92..4accdf6786ea 100644
--- a/contrib/ncurses/ncurses/tinfo/lib_print.c
+++ b/contrib/ncurses/ncurses/tinfo/lib_print.c
@@ -1,112 +1,112 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 1998-2011,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer *
****************************************************************************/
#include <curses.priv.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_print.c,v 1.25 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_print.c,v 1.28 2020/08/29 16:22:03 juergen Exp $")
NCURSES_EXPORT(int)
NCURSES_SP_NAME(mcprint) (NCURSES_SP_DCLx char *data, int len)
/* ship binary character data to the printer via mc4/mc5/mc5p */
{
int result;
char *mybuf, *switchon;
size_t onsize, offsize;
size_t need;
errno = 0;
if (!HasTInfoTerminal(SP_PARM)
|| len <= 0
|| (!prtr_non && (!prtr_on || !prtr_off))) {
errno = ENODEV;
return (ERR);
}
if (prtr_non) {
- switchon = TPARM_1(prtr_non, len);
+ switchon = TIPARM_1(prtr_non, len);
onsize = strlen(switchon);
offsize = 0;
} else {
switchon = prtr_on;
onsize = strlen(prtr_on);
offsize = strlen(prtr_off);
}
need = onsize + (size_t) len + offsize;
if (switchon == 0
|| (mybuf = typeMalloc(char, need + 1)) == 0) {
errno = ENOMEM;
return (ERR);
}
_nc_STRCPY(mybuf, switchon, need);
memcpy(mybuf + onsize, data, (size_t) len);
if (offsize)
_nc_STRCPY(mybuf + onsize + len, prtr_off, need);
/*
* We're relying on the atomicity of UNIX writes here. The
* danger is that output from a refresh() might get interspersed
* with the printer data after the write call returns but before the
* data has actually been shipped to the terminal. If the write(2)
* operation is truly atomic we're protected from this.
*/
result = (int) write(TerminalOf(SP_PARM)->Filedes, mybuf, need);
/*
* By giving up our scheduler slot here we increase the odds that the
* kernel will ship the contiguous clist items from the last write
* immediately.
*/
-#ifndef _WIN32
+#ifndef _NC_WINDOWS
(void) sleep(0);
#endif
free(mybuf);
return (result);
}
#if NCURSES_SP_FUNCS && !defined(USE_TERM_DRIVER)
NCURSES_EXPORT(int)
mcprint(char *data, int len)
{
return NCURSES_SP_NAME(mcprint) (CURRENT_SCREEN, data, len);
}
#endif
diff --git a/contrib/ncurses/ncurses/tinfo/lib_raw.c b/contrib/ncurses/ncurses/tinfo/lib_raw.c
index a691a266b703..1e47f3b6fbfb 100644
--- a/contrib/ncurses/ncurses/tinfo/lib_raw.c
+++ b/contrib/ncurses/ncurses/tinfo/lib_raw.c
@@ -1,388 +1,397 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1998-on *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
/*
* raw.c
*
* Routines:
* raw()
* cbreak()
* noraw()
* nocbreak()
* qiflush()
* noqiflush()
* intrflush()
*
*/
#include <curses.priv.h>
-MODULE_ID("$Id: lib_raw.c,v 1.24 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_raw.c,v 1.26 2020/11/21 22:07:48 tom Exp $")
#if HAVE_SYS_TERMIO_H
#include <sys/termio.h> /* needed for ISC */
#endif
#ifdef __EMX__
#include <io.h>
#define _nc_setmode(mode) setmode(SP_PARM->_ifd, mode)
#else
#define _nc_setmode(mode) /* nothing */
#endif
#if USE_KLIBC_KBD
#define INCL_KBD
#include <os2.h>
#endif
#define COOKED_INPUT (IXON|BRKINT|PARMRK)
#ifdef TRACE
#define BEFORE(N) if (USE_TRACEF(TRACE_BITS)) _nc_locked_tracef("%s before bits: %s", N, _nc_tracebits())
#define AFTER(N) if (USE_TRACEF(TRACE_BITS)) _nc_locked_tracef("%s after bits: %s", N, _nc_tracebits())
#else
#define BEFORE(s)
#define AFTER(s)
#endif /* TRACE */
NCURSES_EXPORT(int)
NCURSES_SP_NAME(raw) (NCURSES_SP_DCL0)
{
int result = ERR;
TERMINAL *termp;
T((T_CALLED("raw(%p)"), (void *) SP_PARM));
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
BEFORE("raw");
_nc_setmode(O_BINARY);
buf = termp->Nttyb;
#ifdef TERMIOS
buf.c_lflag &= (unsigned) ~(ICANON | ISIG | IEXTEN);
buf.c_iflag &= (unsigned) ~(COOKED_INPUT);
buf.c_cc[VMIN] = 1;
buf.c_cc[VTIME] = 0;
+#elif defined(EXP_WIN32_DRIVER)
+ buf.dwFlagIn &= (unsigned long) ~CONMODE_NORAW;
#else
buf.sg_flags |= RAW;
#endif
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
if (result == OK) {
#if USE_KLIBC_KBD
KBDINFO kbdinfo;
kbdinfo.cb = sizeof(kbdinfo);
KbdGetStatus(&kbdinfo, 0);
kbdinfo.cb = sizeof(kbdinfo);
kbdinfo.fsMask &= ~KEYBOARD_ASCII_MODE;
kbdinfo.fsMask |= KEYBOARD_BINARY_MODE;
KbdSetStatus(&kbdinfo, 0);
#endif
if (SP_PARM) {
SP_PARM->_raw = TRUE;
SP_PARM->_cbreak = 1;
}
termp->Nttyb = buf;
}
AFTER("raw");
}
returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
raw(void)
{
return NCURSES_SP_NAME(raw) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(cbreak) (NCURSES_SP_DCL0)
{
int result = ERR;
TERMINAL *termp;
T((T_CALLED("cbreak(%p)"), (void *) SP_PARM));
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
BEFORE("cbreak");
_nc_setmode(O_BINARY);
buf = termp->Nttyb;
#ifdef TERMIOS
buf.c_lflag &= (unsigned) ~ICANON;
buf.c_iflag &= (unsigned) ~ICRNL;
buf.c_lflag |= ISIG;
buf.c_cc[VMIN] = 1;
buf.c_cc[VTIME] = 0;
+#elif defined(EXP_WIN32_DRIVER)
+ buf.dwFlagIn |= CONMODE_NORAW;
+ buf.dwFlagIn &= (unsigned long) ~CONMODE_NOCBREAK;
#else
buf.sg_flags |= CBREAK;
#endif
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
if (result == OK) {
if (SP_PARM) {
SP_PARM->_cbreak = 1;
}
termp->Nttyb = buf;
}
AFTER("cbreak");
}
returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
cbreak(void)
{
return NCURSES_SP_NAME(cbreak) (CURRENT_SCREEN);
}
#endif
/*
* Note:
* this implementation may be wrong. See the comment under intrflush().
*/
NCURSES_EXPORT(void)
NCURSES_SP_NAME(qiflush) (NCURSES_SP_DCL0)
{
TERMINAL *termp;
T((T_CALLED("qiflush(%p)"), (void *) SP_PARM));
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
int result;
BEFORE("qiflush");
buf = termp->Nttyb;
#ifdef TERMIOS
buf.c_lflag &= (unsigned) ~(NOFLSH);
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
#else
result = ERR;
/* FIXME */
#endif
if (result == OK)
termp->Nttyb = buf;
AFTER("qiflush");
}
returnVoid;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
qiflush(void)
{
NCURSES_SP_NAME(qiflush) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(noraw) (NCURSES_SP_DCL0)
{
int result = ERR;
TERMINAL *termp;
T((T_CALLED("noraw(%p)"), (void *) SP_PARM));
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
BEFORE("noraw");
_nc_setmode(O_TEXT);
buf = termp->Nttyb;
#ifdef TERMIOS
buf.c_lflag |= ISIG | ICANON |
(termp->Ottyb.c_lflag & IEXTEN);
buf.c_iflag |= COOKED_INPUT;
+#elif defined(EXP_WIN32_DRIVER)
+ buf.dwFlagIn |= CONMODE_NORAW;
#else
buf.sg_flags &= ~(RAW | CBREAK);
#endif
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
if (result == OK) {
#if USE_KLIBC_KBD
KBDINFO kbdinfo;
kbdinfo.cb = sizeof(kbdinfo);
KbdGetStatus(&kbdinfo, 0);
kbdinfo.cb = sizeof(kbdinfo);
kbdinfo.fsMask &= ~KEYBOARD_BINARY_MODE;
kbdinfo.fsMask |= KEYBOARD_ASCII_MODE;
KbdSetStatus(&kbdinfo, 0);
#endif
if (SP_PARM) {
SP_PARM->_raw = FALSE;
SP_PARM->_cbreak = 0;
}
termp->Nttyb = buf;
}
AFTER("noraw");
}
returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
noraw(void)
{
return NCURSES_SP_NAME(noraw) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(nocbreak) (NCURSES_SP_DCL0)
{
int result = ERR;
TERMINAL *termp;
T((T_CALLED("nocbreak(%p)"), (void *) SP_PARM));
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
BEFORE("nocbreak");
_nc_setmode(O_TEXT);
buf = termp->Nttyb;
#ifdef TERMIOS
buf.c_lflag |= ICANON;
buf.c_iflag |= ICRNL;
+#elif defined(EXP_WIN32_DRIVER)
+ buf.dwFlagIn |= (CONMODE_NOCBREAK | CONMODE_NORAW);
#else
buf.sg_flags &= ~CBREAK;
#endif
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
if (result == OK) {
if (SP_PARM) {
SP_PARM->_cbreak = 0;
}
termp->Nttyb = buf;
}
AFTER("nocbreak");
}
returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
nocbreak(void)
{
return NCURSES_SP_NAME(nocbreak) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(void)
NCURSES_SP_NAME(noqiflush) (NCURSES_SP_DCL0)
{
TERMINAL *termp;
T((T_CALLED("noqiflush(%p)"), (void *) SP_PARM));
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
int result;
BEFORE("noqiflush");
buf = termp->Nttyb;
#ifdef TERMIOS
buf.c_lflag |= NOFLSH;
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
#else
/* FIXME */
result = ERR;
#endif
if (result == OK)
termp->Nttyb = buf;
AFTER("noqiflush");
}
returnVoid;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
noqiflush(void)
{
NCURSES_SP_NAME(noqiflush) (CURRENT_SCREEN);
}
#endif
/*
* This call does the same thing as the qiflush()/noqiflush() pair. We know
* for certain that SVr3 intrflush() tweaks the NOFLSH bit; on the other hand,
* the match (in the SVr4 man pages) between the language describing NOFLSH in
* termio(7) and the language describing qiflush()/noqiflush() in
* curs_inopts(3x) is too exact to be coincidence.
*/
NCURSES_EXPORT(int)
NCURSES_SP_NAME(intrflush) (NCURSES_SP_DCLx WINDOW *win GCC_UNUSED, bool flag)
{
int result = ERR;
TERMINAL *termp;
T((T_CALLED("intrflush(%p,%d)"), (void *) SP_PARM, flag));
if (SP_PARM == 0)
returnCode(ERR);
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
BEFORE("intrflush");
buf = termp->Nttyb;
#ifdef TERMIOS
if (flag)
buf.c_lflag &= (unsigned) ~(NOFLSH);
else
buf.c_lflag |= (NOFLSH);
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
#else
/* FIXME */
#endif
if (result == OK) {
termp->Nttyb = buf;
}
AFTER("intrflush");
}
returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
intrflush(WINDOW *win GCC_UNUSED, bool flag)
{
return NCURSES_SP_NAME(intrflush) (CURRENT_SCREEN, win, flag);
}
#endif
diff --git a/contrib/ncurses/ncurses/tinfo/lib_setup.c b/contrib/ncurses/ncurses/tinfo/lib_setup.c
index a6527bfd0967..976227effade 100644
--- a/contrib/ncurses/ncurses/tinfo/lib_setup.c
+++ b/contrib/ncurses/ncurses/tinfo/lib_setup.c
@@ -1,996 +1,1015 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
/*
* Terminal setup routines common to termcap and terminfo:
*
* use_env(bool)
* use_tioctl(bool)
* setupterm(char *, int, int *)
*/
#include <curses.priv.h>
#include <tic.h> /* for MAX_NAME_SIZE */
#if HAVE_LOCALE_H
#include <locale.h>
#endif
-MODULE_ID("$Id: lib_setup.c,v 1.207 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_setup.c,v 1.212 2020/09/09 19:43:00 juergen Exp $")
/****************************************************************************
*
* Terminal size computation
*
****************************************************************************/
#if HAVE_SIZECHANGE
# if !defined(sun) || !TERMIOS
# if HAVE_SYS_IOCTL_H
# include <sys/ioctl.h>
# endif
# endif
#endif
#if NEED_PTEM_H
/* On SCO, they neglected to define struct winsize in termios.h -- it's only
* in termio.h and ptem.h (the former conflicts with other definitions).
*/
# include <sys/stream.h>
# include <sys/ptem.h>
#endif
#if HAVE_LANGINFO_CODESET
#include <langinfo.h>
#endif
/*
* SCO defines TIOCGSIZE and the corresponding struct. Other systems (SunOS,
* Solaris, IRIX) define TIOCGWINSZ and struct winsize.
*/
#ifdef TIOCGSIZE
# define IOCTL_WINSIZE TIOCGSIZE
# define STRUCT_WINSIZE struct ttysize
# define WINSIZE_ROWS(n) (int)n.ts_lines
# define WINSIZE_COLS(n) (int)n.ts_cols
#else
# ifdef TIOCGWINSZ
# define IOCTL_WINSIZE TIOCGWINSZ
# define STRUCT_WINSIZE struct winsize
# define WINSIZE_ROWS(n) (int)n.ws_row
# define WINSIZE_COLS(n) (int)n.ws_col
# endif
#endif
/*
* Reduce explicit use of "cur_term" global variable.
*/
#undef CUR
#define CUR TerminalType(termp).
/*
* Wrap global variables in this module.
*/
#if USE_REENTRANT
NCURSES_EXPORT(char *)
NCURSES_PUBLIC_VAR(ttytype) (void)
{
static char empty[] = "";
char *result = empty;
#if NCURSES_SP_FUNCS
if (CURRENT_SCREEN) {
TERMINAL *termp = TerminalOf(CURRENT_SCREEN);
if (termp != 0) {
result = TerminalType(termp).term_names;
}
}
#else
if (cur_term != 0) {
result = TerminalType(cur_term).term_names;
}
#endif
return result;
}
NCURSES_EXPORT(int *)
_nc_ptr_Lines(SCREEN *sp)
{
return ptrLines(sp);
}
NCURSES_EXPORT(int)
NCURSES_PUBLIC_VAR(LINES) (void)
{
return *_nc_ptr_Lines(CURRENT_SCREEN);
}
NCURSES_EXPORT(int *)
_nc_ptr_Cols(SCREEN *sp)
{
return ptrCols(sp);
}
NCURSES_EXPORT(int)
NCURSES_PUBLIC_VAR(COLS) (void)
{
return *_nc_ptr_Cols(CURRENT_SCREEN);
}
NCURSES_EXPORT(int *)
_nc_ptr_Tabsize(SCREEN *sp)
{
return ptrTabsize(sp);
}
NCURSES_EXPORT(int)
NCURSES_PUBLIC_VAR(TABSIZE) (void)
{
return *_nc_ptr_Tabsize(CURRENT_SCREEN);
}
#else
NCURSES_EXPORT_VAR(char) ttytype[NAMESIZE] = "";
NCURSES_EXPORT_VAR(int) LINES = 0;
NCURSES_EXPORT_VAR(int) COLS = 0;
NCURSES_EXPORT_VAR(int) TABSIZE = 8;
#endif
#if NCURSES_EXT_FUNCS
NCURSES_EXPORT(int)
NCURSES_SP_NAME(set_tabsize) (NCURSES_SP_DCLx int value)
{
int code = OK;
if (value <= 0) {
code = ERR;
} else {
#if USE_REENTRANT
if (SP_PARM) {
SP_PARM->_TABSIZE = value;
} else {
code = ERR;
}
#else
(void) SP_PARM;
TABSIZE = value;
#endif
}
return code;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
set_tabsize(int value)
{
return NCURSES_SP_NAME(set_tabsize) (CURRENT_SCREEN, value);
}
#endif
#endif /* NCURSES_EXT_FUNCS */
#if USE_SIGWINCH
/*
* If we have a pending SIGWINCH, set the flag in each screen.
*/
NCURSES_EXPORT(int)
_nc_handle_sigwinch(SCREEN *sp)
{
SCREEN *scan;
if (_nc_globals.have_sigwinch) {
_nc_globals.have_sigwinch = 0;
for (each_screen(scan)) {
scan->_sig_winch = TRUE;
}
}
return (sp ? sp->_sig_winch : 0);
}
#endif
NCURSES_EXPORT(void)
NCURSES_SP_NAME(use_env) (NCURSES_SP_DCLx bool f)
{
START_TRACE();
T((T_CALLED("use_env(%p,%d)"), (void *) SP_PARM, (int) f));
#if NCURSES_SP_FUNCS
if (IsPreScreen(SP_PARM)) {
SP_PARM->_use_env = f;
}
#else
_nc_prescreen.use_env = f;
#endif
returnVoid;
}
NCURSES_EXPORT(void)
NCURSES_SP_NAME(use_tioctl) (NCURSES_SP_DCLx bool f)
{
START_TRACE();
T((T_CALLED("use_tioctl(%p,%d)"), (void *) SP_PARM, (int) f));
#if NCURSES_SP_FUNCS
if (IsPreScreen(SP_PARM)) {
SP_PARM->use_tioctl = f;
}
#else
_nc_prescreen.use_tioctl = f;
#endif
returnVoid;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
use_env(bool f)
{
START_TRACE();
T((T_CALLED("use_env(%d)"), (int) f));
_nc_prescreen.use_env = f;
returnVoid;
}
NCURSES_EXPORT(void)
use_tioctl(bool f)
{
START_TRACE();
T((T_CALLED("use_tioctl(%d)"), (int) f));
_nc_prescreen.use_tioctl = f;
returnVoid;
}
#endif
NCURSES_EXPORT(void)
_nc_get_screensize(SCREEN *sp,
#ifdef USE_TERM_DRIVER
TERMINAL *termp,
#endif
int *linep, int *colp)
/* Obtain lines/columns values from the environment and/or terminfo entry */
{
#ifdef USE_TERM_DRIVER
TERMINAL_CONTROL_BLOCK *TCB;
int my_tabsize;
assert(termp != 0 && linep != 0 && colp != 0);
TCB = (TERMINAL_CONTROL_BLOCK *) termp;
my_tabsize = TCB->info.tabsize;
TCB->drv->td_size(TCB, linep, colp);
#if USE_REENTRANT
if (sp != 0) {
sp->_TABSIZE = my_tabsize;
}
#else
(void) sp;
TABSIZE = my_tabsize;
#endif
T(("TABSIZE = %d", my_tabsize));
#else /* !USE_TERM_DRIVER */
TERMINAL *termp = cur_term;
int my_tabsize;
bool useEnv = _nc_prescreen.use_env;
bool useTioctl = _nc_prescreen.use_tioctl;
+#ifdef EXP_WIN32_DRIVER
+ /* If we are here, then Windows console is used in terminfo mode.
+ We need to figure out the size using the console API
+ */
+ _nc_console_size(linep, colp);
+ T(("screen size: winconsole lines = %d columns = %d", *linep, *colp));
+#else
/* figure out the size of the screen */
T(("screen size: terminfo lines = %d columns = %d", lines, columns));
*linep = (int) lines;
*colp = (int) columns;
+#endif
#if NCURSES_SP_FUNCS
if (sp) {
useEnv = sp->_use_env;
useTioctl = sp->use_tioctl;
}
#endif
if (useEnv || useTioctl) {
#ifdef __EMX__
{
int screendata[2];
_scrsize(screendata);
*colp = screendata[0];
*linep = ((sp != 0 && sp->_filtered)
? 1
: screendata[1]);
T(("EMX screen size: environment LINES = %d COLUMNS = %d",
*linep, *colp));
}
#endif
#if HAVE_SIZECHANGE
/* try asking the OS */
if (NC_ISATTY(cur_term->Filedes)) {
STRUCT_WINSIZE size;
errno = 0;
do {
if (ioctl(cur_term->Filedes, IOCTL_WINSIZE, &size) >= 0) {
*linep = ((sp != 0 && sp->_filtered)
? 1
: WINSIZE_ROWS(size));
*colp = WINSIZE_COLS(size);
T(("SYS screen size: environment LINES = %d COLUMNS = %d",
*linep, *colp));
break;
}
} while
(errno == EINTR);
}
#endif /* HAVE_SIZECHANGE */
if (useEnv) {
int value;
if (useTioctl) {
/*
* If environment variables are used, update them.
*/
if ((sp == 0 || !sp->_filtered) && _nc_getenv_num("LINES") > 0) {
_nc_setenv_num("LINES", *linep);
}
if (_nc_getenv_num("COLUMNS") > 0) {
_nc_setenv_num("COLUMNS", *colp);
}
}
/*
* Finally, look for environment variables.
*
* Solaris lets users override either dimension with an environment
* variable.
*/
if ((value = _nc_getenv_num("LINES")) > 0) {
*linep = value;
T(("screen size: environment LINES = %d", *linep));
}
if ((value = _nc_getenv_num("COLUMNS")) > 0) {
*colp = value;
T(("screen size: environment COLUMNS = %d", *colp));
}
}
/* if we can't get dynamic info about the size, use static */
if (*linep <= 0) {
*linep = (int) lines;
}
if (*colp <= 0) {
*colp = (int) columns;
}
/* the ultimate fallback, assume fixed 24x80 size */
if (*linep <= 0) {
*linep = 24;
}
if (*colp <= 0) {
*colp = 80;
}
/*
* Put the derived values back in the screen-size caps, so
* tigetnum() and tgetnum() will do the right thing.
*/
lines = (NCURSES_INT2) (*linep);
columns = (NCURSES_INT2) (*colp);
#if NCURSES_EXT_NUMBERS
#define OldNumber(termp,name) \
(termp)->type.Numbers[(&name - (termp)->type2.Numbers)]
OldNumber(termp, lines) = (short) (*linep);
OldNumber(termp, columns) = (short) (*colp);
#endif
}
T(("screen size is %dx%d", *linep, *colp));
if (VALID_NUMERIC(init_tabs))
my_tabsize = (int) init_tabs;
else
my_tabsize = 8;
#if USE_REENTRANT
if (sp != 0)
sp->_TABSIZE = my_tabsize;
#else
TABSIZE = my_tabsize;
#endif
T(("TABSIZE = %d", TABSIZE));
#endif /* USE_TERM_DRIVER */
}
#if USE_SIZECHANGE
NCURSES_EXPORT(void)
_nc_update_screensize(SCREEN *sp)
{
int new_lines;
int new_cols;
#ifdef USE_TERM_DRIVER
int old_lines;
int old_cols;
assert(sp != 0);
CallDriver_2(sp, td_getsize, &old_lines, &old_cols);
#else
TERMINAL *termp = cur_term;
int old_lines = lines;
int old_cols = columns;
#endif
if (sp != 0) {
TINFO_GET_SIZE(sp, sp->_term, &new_lines, &new_cols);
/*
* See is_term_resized() and resizeterm().
* We're doing it this way because those functions belong to the upper
* ncurses library, while this resides in the lower terminfo library.
*/
if (sp->_resize != 0) {
if ((new_lines != old_lines) || (new_cols != old_cols)) {
sp->_resize(NCURSES_SP_ARGx new_lines, new_cols);
} else if (sp->_sig_winch && (sp->_ungetch != 0)) {
sp->_ungetch(SP_PARM, KEY_RESIZE); /* so application can know this */
}
sp->_sig_winch = FALSE;
}
}
}
#endif /* USE_SIZECHANGE */
/****************************************************************************
*
* Terminal setup
*
****************************************************************************/
#if NCURSES_USE_DATABASE || NCURSES_USE_TERMCAP
/*
* Return 1 if entry found, 0 if not found, -1 if database not accessible,
* just like tgetent().
*/
int
_nc_setup_tinfo(const char *const tn, TERMTYPE2 *const tp)
{
char filename[PATH_MAX];
int status = _nc_read_entry2(tn, filename, tp);
/*
* If we have an entry, force all of the cancelled strings to null
* pointers so we don't have to test them in the rest of the library.
* (The terminfo compiler bypasses this logic, since it must know if
* a string is cancelled, for merging entries).
*/
if (status == TGETENT_YES) {
unsigned n;
for_each_boolean(n, tp) {
if (!VALID_BOOLEAN(tp->Booleans[n]))
tp->Booleans[n] = FALSE;
}
for_each_string(n, tp) {
if (tp->Strings[n] == CANCELLED_STRING)
tp->Strings[n] = ABSENT_STRING;
}
}
return (status);
}
#endif
/*
** Take the real command character out of the CC environment variable
** and substitute it in for the prototype given in 'command_character'.
*/
void
_nc_tinfo_cmdch(TERMINAL *termp, int proto)
{
char *tmp;
/*
* Only use the character if the string is a single character,
* since it is fairly common for developers to set the C compiler
* name as an environment variable - using the same symbol.
*/
if ((tmp = getenv("CC")) != 0 && strlen(tmp) == 1) {
unsigned i;
char CC = *tmp;
for_each_string(i, &(termp->type)) {
for (tmp = termp->type.Strings[i]; tmp && *tmp; tmp++) {
if (UChar(*tmp) == proto)
*tmp = CC;
}
}
}
}
/*
* Find the locale which is in effect.
*/
NCURSES_EXPORT(char *)
_nc_get_locale(void)
{
char *env;
#if HAVE_LOCALE_H
/*
* This is preferable to using getenv() since it ensures that we are using
* the locale which was actually initialized by the application.
*/
env = setlocale(LC_CTYPE, 0);
#else
if (((env = getenv("LANG")) != 0 && *env != '\0')
|| ((env = getenv("LC_CTYPE")) != 0 && *env != '\0')
|| ((env = getenv("LC_ALL")) != 0 && *env != '\0')) {
;
}
#endif
T(("_nc_get_locale %s", _nc_visbuf(env)));
return env;
}
/*
* Check if we are running in a UTF-8 locale.
*/
NCURSES_EXPORT(int)
_nc_unicode_locale(void)
{
int result = 0;
-#if defined(_WIN32) && USE_WIDEC_SUPPORT
+#if defined(_NC_WINDOWS) && USE_WIDEC_SUPPORT
result = 1;
#elif HAVE_LANGINFO_CODESET
char *env = nl_langinfo(CODESET);
result = !strcmp(env, "UTF-8");
T(("_nc_unicode_locale(%s) ->%d", env, result));
#else
char *env = _nc_get_locale();
if (env != 0) {
if (strstr(env, ".UTF-8") != 0) {
result = 1;
T(("_nc_unicode_locale(%s) ->%d", env, result));
}
}
#endif
return result;
}
#define CONTROL_N(s) ((s) != 0 && strstr(s, "\016") != 0)
#define CONTROL_O(s) ((s) != 0 && strstr(s, "\017") != 0)
/*
* Check for known broken cases where a UTF-8 locale breaks the alternate
* character set.
*/
NCURSES_EXPORT(int)
_nc_locale_breaks_acs(TERMINAL *termp)
{
const char *env_name = "NCURSES_NO_UTF8_ACS";
const char *env;
int value;
int result = 0;
T((T_CALLED("_nc_locale_breaks_acs:%d"), result));
if (getenv(env_name) != 0) {
result = _nc_getenv_num(env_name);
} else if ((value = tigetnum("U8")) >= 0) {
result = value; /* use extension feature */
} else if ((env = getenv("TERM")) != 0) {
if (strstr(env, "linux")) {
result = 1; /* always broken */
} else if (strstr(env, "screen") != 0
&& ((env = getenv("TERMCAP")) != 0
&& strstr(env, "screen") != 0)
&& strstr(env, "hhII00") != 0) {
if (CONTROL_N(enter_alt_charset_mode) ||
CONTROL_O(enter_alt_charset_mode) ||
CONTROL_N(set_attributes) ||
CONTROL_O(set_attributes)) {
result = 1;
}
}
}
returnCode(result);
}
NCURSES_EXPORT(int)
TINFO_SETUP_TERM(TERMINAL **tp,
const char *tname,
int Filedes,
int *errret,
int reuse)
{
#ifdef USE_TERM_DRIVER
TERMINAL_CONTROL_BLOCK *TCB = 0;
#endif
TERMINAL *termp;
SCREEN *sp = 0;
char *myname;
int code = ERR;
START_TRACE();
#ifdef USE_TERM_DRIVER
T((T_CALLED("_nc_setupterm_ex(%p,%s,%d,%p)"),
(void *) tp, _nc_visbuf(tname), Filedes, (void *) errret));
if (tp == 0) {
ret_error0(TGETENT_ERR,
"Invalid parameter, internal error.\n");
} else
termp = *tp;
#else
termp = cur_term;
T((T_CALLED("setupterm(%s,%d,%p)"), _nc_visbuf(tname), Filedes, (void *) errret));
#endif
if (tname == 0) {
tname = getenv("TERM");
- if (tname == 0 || *tname == '\0') {
-#ifdef USE_TERM_DRIVER
+#if defined(EXP_WIN32_DRIVER)
+ if (!VALID_TERM_ENV(tname, NO_TERMINAL)) {
+ T(("Failure with TERM=%s", NonNull(tname)));
+ ret_error0(TGETENT_ERR, "TERM environment variable not set.\n");
+ }
+#elif defined(USE_TERM_DRIVER)
+ if (!NonEmpty(tname))
tname = "unknown";
#else
+ if (!NonEmpty(tname)) {
+ T(("Failure with TERM=%s", NonNull(tname)));
ret_error0(TGETENT_ERR, "TERM environment variable not set.\n");
-#endif
}
+#endif
}
myname = strdup(tname);
if (strlen(myname) > MAX_NAME_SIZE) {
ret_error(TGETENT_ERR,
"TERM environment must be <= %d characters.\n",
MAX_NAME_SIZE,
free(myname));
}
T(("your terminal name is %s", myname));
/*
* Allow output redirection. This is what SVr3 does. If stdout is
* directed to a file, screen updates go to standard error.
*/
if (Filedes == STDOUT_FILENO && !NC_ISATTY(Filedes))
Filedes = STDERR_FILENO;
+#if defined(EXP_WIN32_DRIVER)
+ if (Filedes != STDERR_FILENO && NC_ISATTY(Filedes))
+ _setmode(Filedes, _O_BINARY);
+#endif
/*
* Check if we have already initialized to use this terminal. If so, we
* do not need to re-read the terminfo entry, or obtain TTY settings.
*
* This is an improvement on SVr4 curses. If an application mixes curses
* and termcap calls, it may call both initscr and tgetent. This is not
* really a good thing to do, but can happen if someone tries using ncurses
* with the readline library. The problem we are fixing is that when
* tgetent calls setupterm, the resulting Ottyb struct in cur_term is
* zeroed. A subsequent call to endwin uses the zeroed terminal settings
* rather than the ones saved in initscr. So we check if cur_term appears
* to contain terminal settings for the same output file as our current
* call - and copy those terminal settings. (SVr4 curses does not do this,
* however applications that are working around the problem will still work
* properly with this feature).
*/
if (reuse
&& (termp != 0)
&& termp->Filedes == Filedes
&& termp->_termname != 0
&& !strcmp(termp->_termname, myname)
&& _nc_name_match(TerminalType(termp).term_names, myname, "|")) {
T(("reusing existing terminal information and mode-settings"));
code = OK;
#ifdef USE_TERM_DRIVER
TCB = (TERMINAL_CONTROL_BLOCK *) termp;
#endif
} else {
#ifdef USE_TERM_DRIVER
TERMINAL_CONTROL_BLOCK *my_tcb;
termp = 0;
if ((my_tcb = typeCalloc(TERMINAL_CONTROL_BLOCK, 1)) != 0)
termp = &(my_tcb->term);
#else
int status;
termp = typeCalloc(TERMINAL, 1);
#endif
if (termp == 0) {
ret_error1(TGETENT_ERR,
"Not enough memory to create terminal structure.\n",
myname, free(myname));
}
#if HAVE_SYSCONF
{
long limit;
#ifdef LINE_MAX
limit = LINE_MAX;
#else
limit = _nc_globals.getstr_limit;
#endif
#ifdef _SC_LINE_MAX
if (limit < sysconf(_SC_LINE_MAX))
limit = sysconf(_SC_LINE_MAX);
#endif
if (_nc_globals.getstr_limit < (int) limit)
_nc_globals.getstr_limit = (int) limit;
}
#endif /* HAVE_SYSCONF */
T(("using %d for getstr limit", _nc_globals.getstr_limit));
#ifdef USE_TERM_DRIVER
INIT_TERM_DRIVER();
TCB = (TERMINAL_CONTROL_BLOCK *) termp;
code = _nc_globals.term_driver(TCB, myname, errret);
if (code == OK) {
termp->Filedes = (short) Filedes;
termp->_termname = strdup(myname);
} else {
ret_error1(errret ? *errret : TGETENT_ERR,
"Could not find any driver to handle terminal.\n",
myname, free(myname));
}
#else
#if NCURSES_USE_DATABASE || NCURSES_USE_TERMCAP
status = _nc_setup_tinfo(myname, &TerminalType(termp));
T(("_nc_setup_tinfo returns %d", status));
#else
T(("no database available"));
status = TGETENT_NO;
#endif
/* try fallback list if entry on disk */
if (status != TGETENT_YES) {
const TERMTYPE2 *fallback = _nc_fallback2(myname);
if (fallback) {
T(("found fallback entry"));
_nc_copy_termtype2(&(TerminalType(termp)), fallback);
status = TGETENT_YES;
}
}
if (status != TGETENT_YES) {
del_curterm(termp);
if (status == TGETENT_ERR) {
free(myname);
ret_error0(status, "terminals database is inaccessible\n");
} else if (status == TGETENT_NO) {
ret_error1(status, "unknown terminal type.\n",
myname, free(myname));
} else {
ret_error0(status, "unexpected return-code\n");
}
}
#if NCURSES_EXT_NUMBERS
_nc_export_termtype2(&termp->type, &TerminalType(termp));
#endif
#if !USE_REENTRANT
save_ttytype(termp);
#endif
termp->Filedes = (short) Filedes;
termp->_termname = strdup(myname);
set_curterm(termp);
if (command_character)
_nc_tinfo_cmdch(termp, UChar(*command_character));
/*
* If an application calls setupterm() rather than initscr() or
* newterm(), we will not have the def_prog_mode() call in
* _nc_setupscreen(). Do it now anyway, so we can initialize the
* baudrate. Also get the shell-mode so that erasechar() works.
*/
if (NC_ISATTY(Filedes)) {
NCURSES_SP_NAME(def_shell_mode) (NCURSES_SP_ARG);
NCURSES_SP_NAME(def_prog_mode) (NCURSES_SP_ARG);
baudrate();
}
code = OK;
#endif
}
#ifdef USE_TERM_DRIVER
*tp = termp;
NCURSES_SP_NAME(set_curterm) (sp, termp);
TCB->drv->td_init(TCB);
#else
sp = SP;
#endif
/*
* We should always check the screensize, just in case.
*/
TINFO_GET_SIZE(sp, termp, ptrLines(sp), ptrCols(sp));
if (errret)
*errret = TGETENT_YES;
#ifndef USE_TERM_DRIVER
if (generic_type) {
/*
* BSD 4.3's termcap contains mis-typed "gn" for wy99. Do a sanity
* check before giving up.
*/
if ((VALID_STRING(cursor_address)
|| (VALID_STRING(cursor_down) && VALID_STRING(cursor_home)))
&& VALID_STRING(clear_screen)) {
ret_error1(TGETENT_YES, "terminal is not really generic.\n",
myname, free(myname));
} else {
del_curterm(termp);
ret_error1(TGETENT_NO, "I need something more specific.\n",
myname, free(myname));
}
} else if (hard_copy) {
ret_error1(TGETENT_YES, "I can't handle hardcopy terminals.\n",
myname, free(myname));
}
#endif
free(myname);
returnCode(code);
}
#ifdef USE_PTHREADS
/*
* Returns a non-null pointer unless a new screen should be allocated because
* no match was found in the pre-screen cache.
*/
NCURSES_EXPORT(SCREEN *)
_nc_find_prescr(void)
{
SCREEN *result = 0;
PRESCREEN_LIST *p;
pthread_t id = GetThreadID();
for (p = _nc_prescreen.allocated; p != 0; p = p->next) {
if (p->id == id) {
result = p->sp;
break;
}
}
return result;
}
/*
* Tells ncurses to forget that this thread was associated with the pre-screen
* cache. It does not modify the pre-screen cache itself, since that is used
* for creating new screens.
*/
NCURSES_EXPORT(void)
_nc_forget_prescr(void)
{
PRESCREEN_LIST *p, *q;
pthread_t id = GetThreadID();
for (p = _nc_prescreen.allocated, q = 0; p != 0; q = p, p = p->next) {
if (p->id == id) {
if (q) {
q->next = p->next;
} else {
_nc_prescreen.allocated = p->next;
}
free(p);
break;
}
}
}
#endif /* USE_PTHREADS */
#if NCURSES_SP_FUNCS
/*
* In case of handling multiple screens, we need to have a screen before
* initialization in _nc_setupscreen takes place. This is to extend the
* substitute for some of the stuff in _nc_prescreen, especially for slk and
* ripoff handling which should be done per screen.
*/
NCURSES_EXPORT(SCREEN *)
new_prescr(void)
{
SCREEN *sp;
START_TRACE();
T((T_CALLED("new_prescr()")));
_nc_lock_global(screen);
if ((sp = _nc_find_prescr()) == 0) {
sp = _nc_alloc_screen_sp();
T(("_nc_alloc_screen_sp %p", (void *) sp));
if (sp != 0) {
#ifdef USE_PTHREADS
PRESCREEN_LIST *p = typeCalloc(PRESCREEN_LIST, 1);
if (p != 0) {
p->id = GetThreadID();
p->sp = sp;
p->next = _nc_prescreen.allocated;
_nc_prescreen.allocated = p;
}
#else
_nc_prescreen.allocated = sp;
#endif
sp->rsp = sp->rippedoff;
sp->_filtered = _nc_prescreen.filter_mode;
sp->_use_env = _nc_prescreen.use_env;
#if NCURSES_NO_PADDING
sp->_no_padding = _nc_prescreen._no_padding;
#endif
sp->slk_format = 0;
sp->_slk = 0;
sp->_prescreen = TRUE;
SP_PRE_INIT(sp);
#if USE_REENTRANT
sp->_TABSIZE = _nc_prescreen._TABSIZE;
sp->_ESCDELAY = _nc_prescreen._ESCDELAY;
#endif
}
} else {
T(("_nc_alloc_screen_sp %p (reuse)", (void *) sp));
}
_nc_unlock_global(screen);
returnSP(sp);
}
#endif
#ifdef USE_TERM_DRIVER
/*
* This entrypoint is called from tgetent() to allow a special case of reusing
* the same TERMINAL data (see comment).
*/
NCURSES_EXPORT(int)
_nc_setupterm(const char *tname,
int Filedes,
int *errret,
int reuse)
{
int rc = ERR;
TERMINAL *termp = 0;
_nc_lock_global(prescreen);
START_TRACE();
if (TINFO_SETUP_TERM(&termp, tname, Filedes, errret, reuse) == OK) {
_nc_forget_prescr();
if (NCURSES_SP_NAME(set_curterm) (CURRENT_SCREEN_PRE, termp) != 0) {
rc = OK;
}
}
_nc_unlock_global(prescreen);
return rc;
}
#endif
/*
* setupterm(termname, Filedes, errret)
*
* Find and read the appropriate object file for the terminal
* Make cur_term point to the structure.
*/
NCURSES_EXPORT(int)
setupterm(const char *tname, int Filedes, int *errret)
{
START_TRACE();
return _nc_setupterm(tname, Filedes, errret, FALSE);
}
diff --git a/contrib/ncurses/ncurses/tinfo/lib_tgoto.c b/contrib/ncurses/ncurses/tinfo/lib_tgoto.c
index 8e240856f823..9cf5e100ce87 100644
--- a/contrib/ncurses/ncurses/tinfo/lib_tgoto.c
+++ b/contrib/ncurses/ncurses/tinfo/lib_tgoto.c
@@ -1,212 +1,212 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 2000-2008,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey *
****************************************************************************/
#include <curses.priv.h>
#include <ctype.h>
#include <termcap.h>
-MODULE_ID("$Id: lib_tgoto.c,v 1.19 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_tgoto.c,v 1.21 2020/05/27 23:55:56 tom Exp $")
#if !PURE_TERMINFO
static bool
is_termcap(const char *string)
{
bool result = TRUE;
if (string == 0 || *string == '\0') {
result = FALSE; /* tparm() handles empty strings */
} else {
while ((*string != '\0') && result) {
if (*string == '%') {
switch (*++string) {
case 'p':
result = FALSE;
break;
case '\0':
string--;
break;
}
} else if (string[0] == '$' && string[1] == '<') {
result = FALSE;
}
string++;
}
}
return result;
}
static char *
tgoto_internal(const char *string, int x, int y)
{
static char *result;
static size_t length;
int swap_arg;
int param[3];
size_t used = 0;
size_t need = 10;
int *value = param;
bool need_BC = FALSE;
if (BC)
need += strlen(BC);
param[0] = y;
param[1] = x;
param[2] = 0;
while (*string != 0) {
if ((used + need) > length) {
length += (used + need);
if ((result = typeRealloc(char, length, result)) == 0) {
length = 0;
break;
}
}
if (*string == '%') {
const char *fmt = 0;
switch (*++string) {
case '\0':
string--;
break;
case 'd':
fmt = "%d";
break;
case '2':
fmt = "%02d";
*value %= 100;
break;
case '3':
fmt = "%03d";
*value %= 1000;
break;
case '+':
*value += UChar(*++string);
/* FALLTHRU */
case '.':
/*
* Guard against tputs() seeing a truncated string. The
* termcap documentation refers to a similar fixup for \n
* and \r, but I don't see that it could work -TD
*/
if (*value == 0) {
if (BC != 0) {
*value += 1;
need_BC = TRUE;
} else {
/* tputs will pretend this is \0, which will almost
* always work since ANSI-compatible terminals ignore
* the character. ECMA-48 does not document a C1
* control for this value. A few (obsolete) terminals
* can use this value in special cases, such as cursor
* addressing using single-byte coordinates.
*/
*value = 0200;
}
}
result[used++] = (char) *value++;
break;
case '%':
result[used++] = *string;
break;
case 'r':
swap_arg = param[0];
param[0] = param[1];
param[1] = swap_arg;
break;
case 'i':
param[0] += 1;
param[1] += 1;
break;
case '>':
if (*value > string[1])
*value += string[2];
string += 2;
break;
case 'n': /* Datamedia 2500 */
param[0] ^= 0140;
param[1] ^= 0140;
break;
case 'B': /* BCD */
*value = 16 * (*value / 10) + (*value % 10);
break;
case 'D': /* Reverse coding (Delta Data) */
*value -= 2 * (*value % 16);
break;
}
if (fmt != 0) {
_nc_SPRINTF(result + used, _nc_SLIMIT(length - used)
fmt, *value++);
used += strlen(result + used);
fmt = 0;
}
if (value - param > 2) {
value = param + 2;
*value = 0;
}
} else {
result[used++] = *string;
}
string++;
}
if (result != 0) {
if (need_BC) {
_nc_STRCPY(result + used, BC, length - used);
used += strlen(BC);
}
result[used] = '\0';
}
return result;
}
#endif
/*
* Retained solely for upward compatibility. Note the intentional reversing of
* the last two arguments when invoking tparm().
*/
NCURSES_EXPORT(char *)
tgoto(const char *string, int x, int y)
{
char *result;
T((T_CALLED("tgoto(%s, %d, %d)"), _nc_visbuf(string), x, y));
#if !PURE_TERMINFO
if (is_termcap(string))
result = tgoto_internal(string, x, y);
else
#endif
- result = TPARM_2(string, y, x);
+ result = TIPARM_2(string, y, x);
returnPtr(result);
}
diff --git a/contrib/ncurses/ncurses/tinfo/lib_tparm.c b/contrib/ncurses/ncurses/tinfo/lib_tparm.c
index 400cd31996f8..b8104eabcd5e 100644
--- a/contrib/ncurses/ncurses/tinfo/lib_tparm.c
+++ b/contrib/ncurses/ncurses/tinfo/lib_tparm.c
@@ -1,890 +1,1095 @@
/****************************************************************************
- * Copyright 2018-2019,2020 Thomas E. Dickey *
+ * Copyright 2018-2020,2021 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey, 1996 on *
****************************************************************************/
/*
* tparm.c
*
*/
+#define entry _ncu_entry
+#define ENTRY _ncu_ENTRY
+
#include <curses.priv.h>
+#undef entry
+#undef ENTRY
+
+#if HAVE_TSEARCH
+#include <search.h>
+#endif
+
#include <ctype.h>
#include <tic.h>
-MODULE_ID("$Id: lib_tparm.c,v 1.108 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_tparm.c,v 1.129 2021/02/14 00:09:49 tom Exp $")
/*
* char *
* tparm(string, ...)
*
* Substitute the given parameters into the given string by the following
* rules (taken from terminfo(5)):
*
* Cursor addressing and other strings requiring parame-
* ters in the terminal are described by a parameterized string
* capability, with escapes like %x in it. For example, to
* address the cursor, the cup capability is given, using two
* parameters: the row and column to address to. (Rows and
* columns are numbered from zero and refer to the physical
* screen visible to the user, not to any unseen memory.) If
* the terminal has memory relative cursor addressing, that can
* be indicated by
*
* The parameter mechanism uses a stack and special %
* codes to manipulate it. Typically a sequence will push one
* of the parameters onto the stack and then print it in some
* format. Often more complex operations are necessary.
*
* The % encodings have the following meanings:
*
* %% outputs `%'
* %c print pop() like %c in printf()
* %s print pop() like %s in printf()
* %[[:]flags][width[.precision]][doxXs]
* as in printf, flags are [-+#] and space
* The ':' is used to avoid making %+ or %-
* patterns (see below).
*
* %p[1-9] push ith parm
* %P[a-z] set dynamic variable [a-z] to pop()
* %g[a-z] get dynamic variable [a-z] and push it
* %P[A-Z] set static variable [A-Z] to pop()
* %g[A-Z] get static variable [A-Z] and push it
* %l push strlen(pop)
* %'c' push char constant c
* %{nn} push integer constant nn
*
* %+ %- %* %/ %m
* arithmetic (%m is mod): push(pop() op pop())
* %& %| %^ bit operations: push(pop() op pop())
* %= %> %< logical operations: push(pop() op pop())
* %A %O logical and & or operations for conditionals
* %! %~ unary operations push(op pop())
* %i add 1 to first two parms (for ANSI terminals)
*
* %? expr %t thenpart %e elsepart %;
* if-then-else, %e elsepart is optional.
* else-if's are possible ala Algol 68:
* %? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e c4 %t b4 %e b5 %;
*
* For those of the above operators which are binary and not commutative,
* the stack works in the usual way, with
* %gx %gy %m
* resulting in x mod y, not the reverse.
*/
NCURSES_EXPORT_VAR(int) _nc_tparm_err = 0;
#define TPS(var) _nc_prescreen.tparm_state.var
#define popcount _nc_popcount /* workaround for NetBSD 6.0 defect */
+#define isUPPER(c) ((c) >= 'A' && (c) <= 'Z')
+#define isLOWER(c) ((c) >= 'a' && (c) <= 'z')
+#define tc_BUMP() if (level < 0 && number < 2) number++
+
+typedef struct {
+ const char *format; /* format-string can be used as cache-key */
+ int tparm_type; /* bit-set for each string-parameter */
+ int num_actual;
+ int num_parsed;
+ int num_popped;
+ TPARM_ARG param[NUM_PARM];
+ char *p_is_s[NUM_PARM];
+} TPARM_DATA;
+
+#if HAVE_TSEARCH
+#define MyCache _nc_globals.cached_tparm
+#define MyCount _nc_globals.count_tparm
#if NO_LEAKS
+static int which_tparm;
+static TPARM_DATA **delete_tparm;
+#endif
+#endif /* HAVE_TSEARCH */
+
+static char dummy[] = ""; /* avoid const-cast */
+
+#if HAVE_TSEARCH
+static int
+cmp_format(const void *p, const void *q)
+{
+ const char *a = *(char *const *) p;
+ const char *b = *(char *const *) q;
+ return strcmp(a, b);
+}
+#endif
+
+#if NO_LEAKS
+#if HAVE_TSEARCH
+static void
+visit_nodes(const void *nodep, const VISIT which, const int depth)
+{
+ (void) depth;
+ if (which == preorder || which == leaf) {
+ delete_tparm[which_tparm] = *(TPARM_DATA **) nodep;
+ which_tparm++;
+ }
+}
+#endif
+
NCURSES_EXPORT(void)
_nc_free_tparm(void)
{
- if (TPS(out_buff) != 0) {
- FreeAndNull(TPS(out_buff));
- TPS(out_size) = 0;
- TPS(out_used) = 0;
- FreeAndNull(TPS(fmt_buff));
- TPS(fmt_size) = 0;
+#if HAVE_TSEARCH
+ if (MyCount != 0) {
+ delete_tparm = typeMalloc(TPARM_DATA *, MyCount);
+ which_tparm = 0;
+ twalk(MyCache, visit_nodes);
+ for (which_tparm = 0; which_tparm < MyCount; ++which_tparm) {
+ TPARM_DATA *ptr = delete_tparm[which_tparm];
+ tdelete(ptr, &MyCache, cmp_format);
+ free((char *) ptr->format);
+ free(ptr);
+ }
+ which_tparm = 0;
+ twalk(MyCache, visit_nodes);
+ FreeAndNull(delete_tparm);
+ MyCount = 0;
+ which_tparm = 0;
}
+#endif
+ FreeAndNull(TPS(out_buff));
+ TPS(out_size) = 0;
+ TPS(out_used) = 0;
+
+ FreeAndNull(TPS(fmt_buff));
+ TPS(fmt_size) = 0;
}
#endif
static NCURSES_INLINE void
get_space(size_t need)
{
need += TPS(out_used);
if (need > TPS(out_size)) {
TPS(out_size) = need * 2;
TYPE_REALLOC(char, TPS(out_size), TPS(out_buff));
}
}
static NCURSES_INLINE void
save_text(const char *fmt, const char *s, int len)
{
- size_t s_len = strlen(s);
- if (len > (int) s_len)
- s_len = (size_t) len;
-
+ size_t s_len = (size_t) len + strlen(s) + strlen(fmt);
get_space(s_len + 1);
_nc_SPRINTF(TPS(out_buff) + TPS(out_used),
_nc_SLIMIT(TPS(out_size) - TPS(out_used))
fmt, s);
TPS(out_used) += strlen(TPS(out_buff) + TPS(out_used));
}
static NCURSES_INLINE void
save_number(const char *fmt, int number, int len)
{
- if (len < 30)
- len = 30; /* actually log10(MAX_INT)+1 */
-
- get_space((size_t) len + 1);
+ size_t s_len = (size_t) len + 30 + strlen(fmt);
+ get_space(s_len + 1);
_nc_SPRINTF(TPS(out_buff) + TPS(out_used),
_nc_SLIMIT(TPS(out_size) - TPS(out_used))
fmt, number);
TPS(out_used) += strlen(TPS(out_buff) + TPS(out_used));
}
static NCURSES_INLINE void
save_char(int c)
{
if (c == 0)
c = 0200;
get_space((size_t) 1);
TPS(out_buff)[TPS(out_used)++] = (char) c;
}
static NCURSES_INLINE void
npush(int x)
{
if (TPS(stack_ptr) < STACKSIZE) {
TPS(stack)[TPS(stack_ptr)].num_type = TRUE;
TPS(stack)[TPS(stack_ptr)].data.num = x;
TPS(stack_ptr)++;
} else {
DEBUG(2, ("npush: stack overflow: %s", _nc_visbuf(TPS(tparam_base))));
_nc_tparm_err++;
}
}
static NCURSES_INLINE int
npop(void)
{
int result = 0;
if (TPS(stack_ptr) > 0) {
TPS(stack_ptr)--;
if (TPS(stack)[TPS(stack_ptr)].num_type)
result = TPS(stack)[TPS(stack_ptr)].data.num;
} else {
DEBUG(2, ("npop: stack underflow: %s", _nc_visbuf(TPS(tparam_base))));
_nc_tparm_err++;
}
return result;
}
static NCURSES_INLINE void
spush(char *x)
{
if (TPS(stack_ptr) < STACKSIZE) {
TPS(stack)[TPS(stack_ptr)].num_type = FALSE;
TPS(stack)[TPS(stack_ptr)].data.str = x;
TPS(stack_ptr)++;
} else {
DEBUG(2, ("spush: stack overflow: %s", _nc_visbuf(TPS(tparam_base))));
_nc_tparm_err++;
}
}
static NCURSES_INLINE char *
spop(void)
{
- static char dummy[] = ""; /* avoid const-cast */
char *result = dummy;
if (TPS(stack_ptr) > 0) {
TPS(stack_ptr)--;
if (!TPS(stack)[TPS(stack_ptr)].num_type
&& TPS(stack)[TPS(stack_ptr)].data.str != 0)
result = TPS(stack)[TPS(stack_ptr)].data.str;
} else {
DEBUG(2, ("spop: stack underflow: %s", _nc_visbuf(TPS(tparam_base))));
_nc_tparm_err++;
}
return result;
}
static NCURSES_INLINE const char *
parse_format(const char *s, char *format, int *len)
{
*len = 0;
if (format != 0) {
bool done = FALSE;
bool allowminus = FALSE;
bool dot = FALSE;
bool err = FALSE;
char *fmt = format;
int my_width = 0;
int my_prec = 0;
int value = 0;
*len = 0;
*format++ = '%';
while (*s != '\0' && !done) {
switch (*s) {
case 'c': /* FALLTHRU */
case 'd': /* FALLTHRU */
case 'o': /* FALLTHRU */
case 'x': /* FALLTHRU */
case 'X': /* FALLTHRU */
case 's':
#ifdef EXP_XTERM_1005
case 'u':
#endif
*format++ = *s;
done = TRUE;
break;
case '.':
*format++ = *s++;
if (dot) {
err = TRUE;
} else { /* value before '.' is the width */
dot = TRUE;
my_width = value;
}
value = 0;
break;
case '#':
*format++ = *s++;
break;
case ' ':
*format++ = *s++;
break;
case ':':
s++;
allowminus = TRUE;
break;
case '-':
if (allowminus) {
*format++ = *s++;
} else {
done = TRUE;
}
break;
default:
if (isdigit(UChar(*s))) {
value = (value * 10) + (*s - '0');
if (value > 10000)
err = TRUE;
*format++ = *s++;
} else {
done = TRUE;
}
}
}
/*
* If we found an error, ignore (and remove) the flags.
*/
if (err) {
my_width = my_prec = value = 0;
format = fmt;
*format++ = '%';
*format++ = *s;
}
/*
* Any value after '.' is the precision. If we did not see '.', then
* the value is the width.
*/
if (dot)
my_prec = value;
else
my_width = value;
*format = '\0';
/* return maximum string length in print */
*len = (my_width > my_prec) ? my_width : my_prec;
}
return s;
}
-#define isUPPER(c) ((c) >= 'A' && (c) <= 'Z')
-#define isLOWER(c) ((c) >= 'a' && (c) <= 'z')
-#define tc_BUMP() if (level < 0 && number < 2) number++
-
/*
* Analyze the string to see how many parameters we need from the varargs list,
* and what their types are. We will only accept string parameters if they
* appear as a %l or %s format following an explicit parameter reference (e.g.,
* %p2%s). All other parameters are numbers.
*
* 'number' counts coarsely the number of pop's we see in the string, and
* 'popcount' shows the highest parameter number in the string. We would like
* to simply use the latter count, but if we are reading termcap strings, there
* may be cases that we cannot see the explicit parameter numbers.
*/
NCURSES_EXPORT(int)
-_nc_tparm_analyze(const char *string, char *p_is_s[NUM_PARM], int *popcount)
+_nc_tparm_analyze(const char *string, char **p_is_s, int *popcount)
{
size_t len2;
int i;
int lastpop = -1;
int len;
int number = 0;
int level = -1;
const char *cp = string;
- static char dummy[] = "";
if (cp == 0)
return 0;
if ((len2 = strlen(cp)) + 2 > TPS(fmt_size)) {
TPS(fmt_size) += len2 + 2;
TPS(fmt_buff) = typeRealloc(char, TPS(fmt_size), TPS(fmt_buff));
if (TPS(fmt_buff) == 0)
return 0;
}
memset(p_is_s, 0, sizeof(p_is_s[0]) * NUM_PARM);
*popcount = 0;
while ((cp - string) < (int) len2) {
if (*cp == '%') {
cp++;
cp = parse_format(cp, TPS(fmt_buff), &len);
switch (*cp) {
default:
break;
case 'd': /* FALLTHRU */
case 'o': /* FALLTHRU */
case 'x': /* FALLTHRU */
case 'X': /* FALLTHRU */
case 'c': /* FALLTHRU */
#ifdef EXP_XTERM_1005
case 'u':
#endif
if (lastpop <= 0) {
tc_BUMP();
}
level -= 1;
lastpop = -1;
break;
case 'l':
case 's':
if (lastpop > 0) {
level -= 1;
p_is_s[lastpop - 1] = dummy;
}
tc_BUMP();
break;
case 'p':
cp++;
i = (UChar(*cp) - '0');
if (i >= 0 && i <= NUM_PARM) {
++level;
lastpop = i;
if (lastpop > *popcount)
*popcount = lastpop;
}
break;
case 'P':
++cp;
break;
case 'g':
++level;
cp++;
break;
case S_QUOTE:
++level;
cp += 2;
lastpop = -1;
break;
case L_BRACE:
++level;
cp++;
while (isdigit(UChar(*cp))) {
cp++;
}
break;
case '+':
case '-':
case '*':
case '/':
case 'm':
case 'A':
case 'O':
case '&':
case '|':
case '^':
case '=':
case '<':
case '>':
tc_BUMP();
level -= 1; /* pop 2, operate, push 1 */
lastpop = -1;
break;
case '!':
case '~':
tc_BUMP();
lastpop = -1;
break;
case 'i':
/* will add 1 to first (usually two) parameters */
break;
}
}
if (*cp != '\0')
cp++;
}
if (number > NUM_PARM)
number = NUM_PARM;
return number;
}
-static NCURSES_INLINE char *
-tparam_internal(int use_TPARM_ARG, const char *string, va_list ap)
+/*
+ * Analyze the capability string, finding the number of parameters and their
+ * types.
+ *
+ * TODO: cache the result so that this is done once per capability per term.
+ */
+static int
+tparm_setup(const char *string, TPARM_DATA * result)
{
- char *p_is_s[NUM_PARM];
- TPARM_ARG param[NUM_PARM];
- int popcount = 0;
- int number;
- int num_args;
- int len;
- int level;
- int x, y;
- int i;
- const char *cp = string;
- size_t len2;
- bool termcap_hack;
- bool incremented_two;
+ int rc = OK;
- if (cp == NULL) {
+ TPS(out_used) = 0;
+ memset(result, 0, sizeof(*result));
+
+ if (string == NULL) {
TR(TRACE_CALLS, ("%s: format is null", TPS(tname)));
- return NULL;
- }
+ rc = ERR;
+ } else {
+#if HAVE_TSEARCH
+ TPARM_DATA *fs;
+ void *ft;
+
+ result->format = string;
+ if ((ft = tfind(result, &MyCache, cmp_format)) != 0) {
+ fs = *(TPARM_DATA **) ft;
+ *result = *fs;
+ } else
+#endif
+ {
+ /*
+ * Find the highest parameter-number referred to in the format
+ * string. Use this value to limit the number of arguments copied
+ * from the variable-length argument list.
+ */
+ result->num_parsed = _nc_tparm_analyze(string,
+ result->p_is_s,
+ &(result->num_popped));
+ if (TPS(fmt_buff) == 0) {
+ TR(TRACE_CALLS, ("%s: error in analysis", TPS(tname)));
+ rc = ERR;
+ } else {
+ int n;
- TPS(out_used) = 0;
- len2 = strlen(cp);
-
- /*
- * Find the highest parameter-number referred to in the format string.
- * Use this value to limit the number of arguments copied from the
- * variable-length argument list.
- */
- number = _nc_tparm_analyze(cp, p_is_s, &popcount);
- if (TPS(fmt_buff) == 0) {
- TR(TRACE_CALLS, ("%s: error in analysis", TPS(tname)));
- return NULL;
+ if (result->num_parsed > NUM_PARM)
+ result->num_parsed = NUM_PARM;
+ if (result->num_popped > NUM_PARM)
+ result->num_popped = NUM_PARM;
+ result->num_actual = max(result->num_popped, result->num_parsed);
+
+ for (n = 0; n < result->num_actual; ++n) {
+ if (result->p_is_s[n])
+ result->tparm_type |= (1 << n);
+ }
+#if HAVE_TSEARCH
+ if ((fs = typeCalloc(TPARM_DATA, 1)) != 0) {
+ *fs = *result;
+ if ((fs->format = strdup(string)) != 0) {
+ if (tsearch(fs, &MyCache, cmp_format) != 0) {
+ ++MyCount;
+ } else {
+ rc = ERR;
+ }
+ } else {
+ rc = ERR;
+ }
+ } else {
+ rc = ERR;
+ }
+#endif
+ }
+ }
}
- incremented_two = FALSE;
+ return rc;
+}
- if (number > NUM_PARM)
- number = NUM_PARM;
- if (popcount > NUM_PARM)
- popcount = NUM_PARM;
- num_args = max(popcount, number);
+/*
+ * A few caps (such as plab_norm) have string-valued parms. We'll have to
+ * assume that the caller knows the difference, since a char* and an int may
+ * not be the same size on the stack. The normal prototype for tparm uses 9
+ * long's, which is consistent with our va_arg() usage.
+ */
+static void
+tparm_copy_valist(TPARM_DATA * data, int use_TPARM_ARG, va_list ap)
+{
+ int i;
- for (i = 0; i < num_args; i++) {
- /*
- * A few caps (such as plab_norm) have string-valued parms.
- * We'll have to assume that the caller knows the difference, since
- * a char* and an int may not be the same size on the stack. The
- * normal prototype for this uses 9 long's, which is consistent with
- * our va_arg() usage.
- */
- if (p_is_s[i] != 0) {
- p_is_s[i] = va_arg(ap, char *);
- param[i] = 0;
+ for (i = 0; i < data->num_actual; i++) {
+ if (data->p_is_s[i] != 0) {
+ char *value = va_arg(ap, char *);
+ if (value == 0)
+ value = dummy;
+ data->p_is_s[i] = value;
+ data->param[i] = 0;
} else if (use_TPARM_ARG) {
- param[i] = va_arg(ap, TPARM_ARG);
+ data->param[i] = va_arg(ap, TPARM_ARG);
} else {
- param[i] = (TPARM_ARG) va_arg(ap, int);
+ data->param[i] = (TPARM_ARG) va_arg(ap, int);
}
}
+}
+
+/*
+ * This is a termcap compatibility hack. If there are no explicit pop
+ * operations in the string, load the stack in such a way that successive pops
+ * will grab successive parameters. That will make the expansion of (for
+ * example) \E[%d;%dH work correctly in termcap style, which means tparam()
+ * will expand termcap strings OK.
+ */
+static bool
+tparm_tc_compat(TPARM_DATA * data)
+{
+ bool termcap_hack = FALSE;
- /*
- * This is a termcap compatibility hack. If there are no explicit pop
- * operations in the string, load the stack in such a way that
- * successive pops will grab successive parameters. That will make
- * the expansion of (for example) \E[%d;%dH work correctly in termcap
- * style, which means tparam() will expand termcap strings OK.
- */
TPS(stack_ptr) = 0;
- termcap_hack = FALSE;
- if (popcount == 0) {
+
+ if (data->num_popped == 0) {
+ int i;
+
termcap_hack = TRUE;
- for (i = number - 1; i >= 0; i--) {
- if (p_is_s[i])
- spush(p_is_s[i]);
+ for (i = data->num_parsed - 1; i >= 0; i--) {
+ if (data->p_is_s[i])
+ spush(data->p_is_s[i]);
else
- npush((int) param[i]);
+ npush((int) data->param[i]);
}
}
+ return termcap_hack;
+}
+
#ifdef TRACE
+static void
+tparm_trace_call(const char *string, TPARM_DATA * data)
+{
if (USE_TRACEF(TRACE_CALLS)) {
- for (i = 0; i < num_args; i++) {
- if (p_is_s[i] != 0) {
- save_text(", %s", _nc_visbuf(p_is_s[i]), 0);
- } else if ((long) param[i] > MAX_OF_TYPE(NCURSES_INT2) ||
- (long) param[i] < 0) {
+ int i;
+ for (i = 0; i < data->num_actual; i++) {
+ if (data->p_is_s[i] != 0) {
+ save_text(", %s", _nc_visbuf(data->p_is_s[i]), 0);
+ } else if ((long) data->param[i] > MAX_OF_TYPE(NCURSES_INT2) ||
+ (long) data->param[i] < 0) {
_tracef("BUG: problem with tparm parameter #%d of %d",
- i + 1, num_args);
+ i + 1, data->num_actual);
break;
} else {
- save_number(", %d", (int) param[i], 0);
+ save_number(", %d", (int) data->param[i], 0);
}
}
- _tracef(T_CALLED("%s(%s%s)"), TPS(tname), _nc_visbuf(cp), TPS(out_buff));
+ _tracef(T_CALLED("%s(%s%s)"), TPS(tname), _nc_visbuf(string), TPS(out_buff));
TPS(out_used) = 0;
_nc_unlock_global(tracef);
}
+}
+
+#else
+#define tparm_trace_call(string, data) /* nothing */
#endif /* TRACE */
+static NCURSES_INLINE char *
+tparam_internal(const char *string, TPARM_DATA * data)
+{
+ int number;
+ int len;
+ int level;
+ int x, y;
+ int i;
+ const char *cp = string;
+ size_t len2 = strlen(cp);
+ bool incremented_two = FALSE;
+ bool termcap_hack = tparm_tc_compat(data);
+
+ tparm_trace_call(string, data);
+
while ((cp - string) < (int) len2) {
if (*cp != '%') {
save_char(UChar(*cp));
} else {
TPS(tparam_base) = cp++;
cp = parse_format(cp, TPS(fmt_buff), &len);
switch (*cp) {
default:
break;
case '%':
save_char('%');
break;
case 'd': /* FALLTHRU */
case 'o': /* FALLTHRU */
case 'x': /* FALLTHRU */
case 'X': /* FALLTHRU */
save_number(TPS(fmt_buff), npop(), len);
break;
case 'c': /* FALLTHRU */
save_char(npop());
break;
#ifdef EXP_XTERM_1005
case 'u':
{
unsigned char target[10];
unsigned source = (unsigned) npop();
int rc = _nc_conv_to_utf8(target, source, (unsigned)
sizeof(target));
int n;
for (n = 0; n < rc; ++n) {
save_char(target[n]);
}
}
break;
#endif
case 'l':
npush((int) strlen(spop()));
break;
case 's':
save_text(TPS(fmt_buff), spop(), len);
break;
case 'p':
cp++;
i = (UChar(*cp) - '1');
if (i >= 0 && i < NUM_PARM) {
- if (p_is_s[i]) {
- spush(p_is_s[i]);
+ if (data->p_is_s[i]) {
+ spush(data->p_is_s[i]);
} else {
- npush((int) param[i]);
+ npush((int) data->param[i]);
}
}
break;
case 'P':
cp++;
if (isUPPER(*cp)) {
i = (UChar(*cp) - 'A');
TPS(static_vars)[i] = npop();
} else if (isLOWER(*cp)) {
i = (UChar(*cp) - 'a');
TPS(dynamic_var)[i] = npop();
}
break;
case 'g':
cp++;
if (isUPPER(*cp)) {
i = (UChar(*cp) - 'A');
npush(TPS(static_vars)[i]);
} else if (isLOWER(*cp)) {
i = (UChar(*cp) - 'a');
npush(TPS(dynamic_var)[i]);
}
break;
case S_QUOTE:
cp++;
npush(UChar(*cp));
cp++;
break;
case L_BRACE:
number = 0;
cp++;
while (isdigit(UChar(*cp))) {
number = (number * 10) + (UChar(*cp) - '0');
cp++;
}
npush(number);
break;
case '+':
npush(npop() + npop());
break;
case '-':
y = npop();
x = npop();
npush(x - y);
break;
case '*':
npush(npop() * npop());
break;
case '/':
y = npop();
x = npop();
npush(y ? (x / y) : 0);
break;
case 'm':
y = npop();
x = npop();
npush(y ? (x % y) : 0);
break;
case 'A':
y = npop();
x = npop();
npush(y && x);
break;
case 'O':
y = npop();
x = npop();
npush(y || x);
break;
case '&':
npush(npop() & npop());
break;
case '|':
npush(npop() | npop());
break;
case '^':
npush(npop() ^ npop());
break;
case '=':
y = npop();
x = npop();
npush(x == y);
break;
case '<':
y = npop();
x = npop();
npush(x < y);
break;
case '>':
y = npop();
x = npop();
npush(x > y);
break;
case '!':
npush(!npop());
break;
case '~':
npush(~npop());
break;
case 'i':
/*
* Increment the first two parameters -- if they are numbers
* rather than strings. As a side effect, assign into the
* stack; if this is termcap, then the stack was populated
* using the termcap hack above rather than via the terminfo
* 'p' case.
*/
if (!incremented_two) {
incremented_two = TRUE;
- if (p_is_s[0] == 0) {
- param[0]++;
+ if (data->p_is_s[0] == 0) {
+ data->param[0]++;
if (termcap_hack)
- TPS(stack)[0].data.num = (int) param[0];
+ TPS(stack)[0].data.num = (int) data->param[0];
}
- if (p_is_s[1] == 0) {
- param[1]++;
+ if (data->p_is_s[1] == 0) {
+ data->param[1]++;
if (termcap_hack)
- TPS(stack)[1].data.num = (int) param[1];
+ TPS(stack)[1].data.num = (int) data->param[1];
}
}
break;
case '?':
break;
case 't':
x = npop();
if (!x) {
/* scan forward for %e or %; at level zero */
cp++;
level = 0;
while (*cp) {
if (*cp == '%') {
cp++;
if (*cp == '?')
level++;
else if (*cp == ';') {
if (level > 0)
level--;
else
break;
} else if (*cp == 'e' && level == 0)
break;
}
if (*cp)
cp++;
}
}
break;
case 'e':
/* scan forward for a %; at level zero */
cp++;
level = 0;
while (*cp) {
if (*cp == '%') {
cp++;
if (*cp == '?')
level++;
else if (*cp == ';') {
if (level > 0)
level--;
else
break;
}
}
if (*cp)
cp++;
}
break;
case ';':
break;
} /* endswitch (*cp) */
} /* endelse (*cp == '%') */
if (*cp == '\0')
break;
cp++;
} /* endwhile (*cp) */
get_space((size_t) 1);
TPS(out_buff)[TPS(out_used)] = '\0';
+ if (TPS(stack_ptr) && !_nc_tparm_err) {
+ DEBUG(2, ("tparm: stack has %d item%s on return",
+ TPS(stack_ptr),
+ TPS(stack_ptr) == 1 ? "" : "s"));
+ _nc_tparm_err++;
+ }
+
T((T_RETURN("%s"), _nc_visbuf(TPS(out_buff))));
return (TPS(out_buff));
}
#if NCURSES_TPARM_VARARGS
-#define tparm_varargs tparm
-#else
-#define tparm_proto tparm
-#endif
NCURSES_EXPORT(char *)
-tparm_varargs(const char *string, ...)
+tparm(const char *string, ...)
{
+ TPARM_DATA myData;
va_list ap;
- char *result;
+ char *result = NULL;
_nc_tparm_err = 0;
- va_start(ap, string);
#ifdef TRACE
TPS(tname) = "tparm";
#endif /* TRACE */
- result = tparam_internal(TRUE, string, ap);
- va_end(ap);
+
+ if (tparm_setup(string, &myData) == OK) {
+
+ va_start(ap, string);
+ tparm_copy_valist(&myData, TRUE, ap);
+ va_end(ap);
+
+ result = tparam_internal(string, &myData);
+ }
return result;
}
-#if !NCURSES_TPARM_VARARGS
+#else /* !NCURSES_TPARM_VARARGS */
+
NCURSES_EXPORT(char *)
-tparm_proto(const char *string,
- TPARM_ARG a1,
- TPARM_ARG a2,
- TPARM_ARG a3,
- TPARM_ARG a4,
- TPARM_ARG a5,
- TPARM_ARG a6,
- TPARM_ARG a7,
- TPARM_ARG a8,
- TPARM_ARG a9)
+tparm(const char *string,
+ TPARM_ARG a1,
+ TPARM_ARG a2,
+ TPARM_ARG a3,
+ TPARM_ARG a4,
+ TPARM_ARG a5,
+ TPARM_ARG a6,
+ TPARM_ARG a7,
+ TPARM_ARG a8,
+ TPARM_ARG a9)
{
- return tparm_varargs(string, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+ TPARM_DATA myData;
+ char *result = NULL;
+
+ _nc_tparm_err = 0;
+#ifdef TRACE
+ TPS(tname) = "tparm";
+#endif /* TRACE */
+
+ if (tparm_setup(string, &myData) == OK) {
+
+ myData.param[0] = a1;
+ myData.param[1] = a2;
+ myData.param[2] = a3;
+ myData.param[3] = a4;
+ myData.param[4] = a5;
+ myData.param[5] = a6;
+ myData.param[6] = a7;
+ myData.param[7] = a8;
+ myData.param[8] = a9;
+
+ result = tparam_internal(string, &myData);
+ }
+ return result;
}
+
#endif /* NCURSES_TPARM_VARARGS */
NCURSES_EXPORT(char *)
tiparm(const char *string, ...)
{
+ TPARM_DATA myData;
va_list ap;
- char *result;
+ char *result = NULL;
_nc_tparm_err = 0;
- va_start(ap, string);
#ifdef TRACE
TPS(tname) = "tiparm";
#endif /* TRACE */
- result = tparam_internal(FALSE, string, ap);
- va_end(ap);
+
+ if (tparm_setup(string, &myData) == OK) {
+
+ va_start(ap, string);
+ tparm_copy_valist(&myData, FALSE, ap);
+ va_end(ap);
+
+ result = tparam_internal(string, &myData);
+ }
+ return result;
+}
+
+/*
+ * The internal-use flavor ensures that the parameters are numbers, not strings
+ */
+NCURSES_EXPORT(char *)
+_nc_tiparm(int expected, const char *string, ...)
+{
+ TPARM_DATA myData;
+ va_list ap;
+ char *result = NULL;
+
+ _nc_tparm_err = 0;
+#ifdef TRACE
+ TPS(tname) = "_nc_tiparm";
+#endif /* TRACE */
+
+ if (tparm_setup(string, &myData) == OK
+ && myData.num_actual <= expected
+ && myData.tparm_type == 0) {
+
+ va_start(ap, string);
+ tparm_copy_valist(&myData, FALSE, ap);
+ va_end(ap);
+
+ result = tparam_internal(string, &myData);
+ }
return result;
}
diff --git a/contrib/ncurses/ncurses/tinfo/lib_tputs.c b/contrib/ncurses/ncurses/tinfo/lib_tputs.c
index bfde26efd980..3eb19d2d9662 100644
--- a/contrib/ncurses/ncurses/tinfo/lib_tputs.c
+++ b/contrib/ncurses/ncurses/tinfo/lib_tputs.c
@@ -1,446 +1,456 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
/*
* tputs.c
* delay_output()
* _nc_outch()
* tputs()
*
*/
#include <curses.priv.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
#include <ctype.h>
#include <termcap.h> /* ospeed */
#include <tic.h>
-MODULE_ID("$Id: lib_tputs.c,v 1.103 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_tputs.c,v 1.106 2020/11/29 00:40:08 tom Exp $")
NCURSES_EXPORT_VAR(char) PC = 0; /* used by termcap library */
NCURSES_EXPORT_VAR(NCURSES_OSPEED) ospeed = 0; /* used by termcap library */
NCURSES_EXPORT_VAR(int) _nc_nulls_sent = 0; /* used by 'tack' program */
#if NCURSES_NO_PADDING
NCURSES_EXPORT(void)
_nc_set_no_padding(SCREEN *sp)
{
bool no_padding = (getenv("NCURSES_NO_PADDING") != 0);
if (sp)
sp->_no_padding = no_padding;
else
_nc_prescreen._no_padding = no_padding;
TR(TRACE_CHARPUT | TRACE_MOVE, ("padding will%s be used",
GetNoPadding(sp) ? " not" : ""));
}
#endif
#if NCURSES_SP_FUNCS
#define SetOutCh(func) if (SP_PARM) SP_PARM->_outch = func; else _nc_prescreen._outch = func
#define GetOutCh() (SP_PARM ? SP_PARM->_outch : _nc_prescreen._outch)
#else
#define SetOutCh(func) static_outch = func
#define GetOutCh() static_outch
static NCURSES_SP_OUTC static_outch = NCURSES_SP_NAME(_nc_outch);
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(delay_output) (NCURSES_SP_DCLx int ms)
{
T((T_CALLED("delay_output(%p,%d)"), (void *) SP_PARM, ms));
if (!HasTInfoTerminal(SP_PARM))
returnCode(ERR);
if (no_pad_char) {
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
napms(ms);
} else {
NCURSES_SP_OUTC my_outch = GetOutCh();
register int nullcount;
nullcount = (ms * _nc_baudrate(ospeed)) / (BAUDBYTE * 1000);
for (_nc_nulls_sent += nullcount; nullcount > 0; nullcount--)
my_outch(NCURSES_SP_ARGx PC);
if (my_outch == NCURSES_SP_NAME(_nc_outch))
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
}
returnCode(OK);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
delay_output(int ms)
{
return NCURSES_SP_NAME(delay_output) (CURRENT_SCREEN, ms);
}
#endif
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_DCL0)
{
+ T((T_CALLED("_nc_flush(%p)"), (void *) SP_PARM));
if (SP_PARM != 0 && SP_PARM->_ofd >= 0) {
+ TR(TRACE_CHARPUT, ("ofd:%d inuse:%lu buffer:%p",
+ SP_PARM->_ofd,
+ (unsigned long) SP_PARM->out_inuse,
+ SP_PARM->out_buffer));
if (SP_PARM->out_inuse) {
char *buf = SP_PARM->out_buffer;
size_t amount = SP->out_inuse;
SP->out_inuse = 0;
- TR(TRACE_CHARPUT, ("flushing %ld bytes", (unsigned long) amount));
+ TR(TRACE_CHARPUT, ("flushing %ld/%ld bytes",
+ (unsigned long) amount, _nc_outchars));
while (amount) {
ssize_t res = write(SP_PARM->_ofd, buf, amount);
-
if (res > 0) {
/* if the write was incomplete, try again */
amount -= (size_t) res;
buf += res;
} else if (errno == EAGAIN) {
continue;
} else if (errno == EINTR) {
continue;
} else {
break; /* an error we can not recover from */
}
}
+ } else if (SP_PARM->out_buffer == 0) {
+ TR(TRACE_CHARPUT, ("flushing stdout"));
+ fflush(stdout);
}
} else {
+ TR(TRACE_CHARPUT, ("flushing stdout"));
fflush(stdout);
}
+ returnVoid;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
_nc_flush(void)
{
NCURSES_SP_NAME(_nc_flush) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(_nc_outch) (NCURSES_SP_DCLx int ch)
{
int rc = OK;
COUNT_OUTCHARS(1);
if (HasTInfoTerminal(SP_PARM)
&& SP_PARM != 0) {
if (SP_PARM->out_buffer != 0) {
if (SP_PARM->out_inuse + 1 >= SP_PARM->out_limit)
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
SP_PARM->out_buffer[SP_PARM->out_inuse++] = (char) ch;
} else {
char tmp = (char) ch;
/*
* POSIX says write() is safe in a signal handler, but the
* buffered I/O is not.
*/
if (write(fileno(NC_OUTPUT(SP_PARM)), &tmp, (size_t) 1) == -1)
rc = ERR;
}
} else {
char tmp = (char) ch;
if (write(fileno(stdout), &tmp, (size_t) 1) == -1)
rc = ERR;
}
return rc;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
_nc_outch(int ch)
{
return NCURSES_SP_NAME(_nc_outch) (CURRENT_SCREEN, ch);
}
#endif
/*
* This is used for the putp special case.
*/
NCURSES_EXPORT(int)
NCURSES_SP_NAME(_nc_putchar) (NCURSES_SP_DCLx int ch)
{
(void) SP_PARM;
return putchar(ch);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
_nc_putchar(int ch)
{
return putchar(ch);
}
#endif
/*
* putp is special - per documentation it calls tputs with putchar as the
* parameter for outputting characters. This means that it uses stdio, which
* is not signal-safe. Applications call this entrypoint; we do not call it
* from within the library.
*/
NCURSES_EXPORT(int)
NCURSES_SP_NAME(putp) (NCURSES_SP_DCLx const char *string)
{
return NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
string, 1, NCURSES_SP_NAME(_nc_putchar));
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
putp(const char *string)
{
return NCURSES_SP_NAME(putp) (CURRENT_SCREEN, string);
}
#endif
/*
* Use these entrypoints rather than "putp" within the library.
*/
NCURSES_EXPORT(int)
NCURSES_SP_NAME(_nc_putp) (NCURSES_SP_DCLx
const char *name GCC_UNUSED,
const char *string)
{
int rc = ERR;
if (string != 0) {
TPUTS_TRACE(name);
rc = NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
string, 1, NCURSES_SP_NAME(_nc_outch));
}
return rc;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
_nc_putp(const char *name, const char *string)
{
return NCURSES_SP_NAME(_nc_putp) (CURRENT_SCREEN, name, string);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(tputs) (NCURSES_SP_DCLx
const char *string,
int affcnt,
NCURSES_SP_OUTC outc)
{
NCURSES_SP_OUTC my_outch = GetOutCh();
bool always_delay;
bool normal_delay;
int number;
#if BSD_TPUTS
int trailpad;
#endif /* BSD_TPUTS */
#ifdef TRACE
if (USE_TRACEF(TRACE_TPUTS)) {
char addrbuf[32];
TR_FUNC_BFR(1);
if (outc == NCURSES_SP_NAME(_nc_outch)) {
_nc_STRCPY(addrbuf, "_nc_outch", sizeof(addrbuf));
} else {
_nc_SPRINTF(addrbuf, _nc_SLIMIT(sizeof(addrbuf)) "%s",
TR_FUNC_ARG(0, outc));
}
if (_nc_tputs_trace) {
_tracef("tputs(%s = %s, %d, %s) called", _nc_tputs_trace,
_nc_visbuf(string), affcnt, addrbuf);
} else {
_tracef("tputs(%s, %d, %s) called", _nc_visbuf(string), affcnt, addrbuf);
}
TPUTS_TRACE(NULL);
_nc_unlock_global(tracef);
}
#endif /* TRACE */
if (SP_PARM != 0 && !HasTInfoTerminal(SP_PARM))
return ERR;
if (!VALID_STRING(string))
return ERR;
if (
#if NCURSES_SP_FUNCS
(SP_PARM != 0 && SP_PARM->_term == 0)
#else
cur_term == 0
#endif
) {
always_delay = FALSE;
normal_delay = TRUE;
} else {
always_delay = (string == bell) || (string == flash_screen);
normal_delay =
!xon_xoff
&& padding_baud_rate
#if NCURSES_NO_PADDING
&& !GetNoPadding(SP_PARM)
#endif
&& (_nc_baudrate(ospeed) >= padding_baud_rate);
}
#if BSD_TPUTS
/*
* This ugly kluge deals with the fact that some ancient BSD programs
* (like nethack) actually do the likes of tputs("50") to get delays.
*/
trailpad = 0;
if (isdigit(UChar(*string))) {
while (isdigit(UChar(*string))) {
trailpad = trailpad * 10 + (*string - '0');
string++;
}
trailpad *= 10;
if (*string == '.') {
string++;
if (isdigit(UChar(*string))) {
trailpad += (*string - '0');
string++;
}
while (isdigit(UChar(*string)))
string++;
}
if (*string == '*') {
trailpad *= affcnt;
string++;
}
}
#endif /* BSD_TPUTS */
SetOutCh(outc); /* redirect delay_output() */
while (*string) {
if (*string != '$')
(*outc) (NCURSES_SP_ARGx *string);
else {
string++;
if (*string != '<') {
(*outc) (NCURSES_SP_ARGx '$');
if (*string)
(*outc) (NCURSES_SP_ARGx *string);
} else {
bool mandatory;
string++;
if ((!isdigit(UChar(*string)) && *string != '.')
|| !strchr(string, '>')) {
(*outc) (NCURSES_SP_ARGx '$');
(*outc) (NCURSES_SP_ARGx '<');
continue;
}
number = 0;
while (isdigit(UChar(*string))) {
number = number * 10 + (*string - '0');
string++;
}
number *= 10;
if (*string == '.') {
string++;
if (isdigit(UChar(*string))) {
number += (*string - '0');
string++;
}
while (isdigit(UChar(*string)))
string++;
}
mandatory = FALSE;
while (*string == '*' || *string == '/') {
if (*string == '*') {
number *= affcnt;
string++;
} else { /* if (*string == '/') */
mandatory = TRUE;
string++;
}
}
if (number > 0
&& (always_delay
|| normal_delay
|| mandatory))
NCURSES_SP_NAME(delay_output) (NCURSES_SP_ARGx number / 10);
} /* endelse (*string == '<') */
} /* endelse (*string == '$') */
if (*string == '\0')
break;
string++;
}
#if BSD_TPUTS
/*
* Emit any BSD-style prefix padding that we've accumulated now.
*/
if (trailpad > 0
&& (always_delay || normal_delay))
delay_output(trailpad / 10);
#endif /* BSD_TPUTS */
SetOutCh(my_outch);
return OK;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
_nc_outc_wrapper(SCREEN *sp, int c)
{
if (0 == sp) {
return fputc(c, stdout);
} else {
return sp->jump(c);
}
}
NCURSES_EXPORT(int)
tputs(const char *string, int affcnt, int (*outc) (int))
{
SetSafeOutcWrapper(outc);
return NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx string, affcnt, _nc_outc_wrapper);
}
#endif
diff --git a/contrib/ncurses/ncurses/tinfo/lib_ttyflags.c b/contrib/ncurses/ncurses/tinfo/lib_ttyflags.c
index bfcd64af58b1..6363a805be9c 100644
--- a/contrib/ncurses/ncurses/tinfo/lib_ttyflags.c
+++ b/contrib/ncurses/ncurses/tinfo/lib_ttyflags.c
@@ -1,326 +1,330 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/*
* def_prog_mode()
* def_shell_mode()
* reset_prog_mode()
* reset_shell_mode()
* savetty()
* resetty()
*/
#include <curses.priv.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_ttyflags.c,v 1.34 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_ttyflags.c,v 1.36 2020/09/05 22:54:47 tom Exp $")
NCURSES_EXPORT(int)
NCURSES_SP_NAME(_nc_get_tty_mode) (NCURSES_SP_DCLx TTY * buf)
{
TERMINAL *termp = TerminalOf(SP_PARM);
int result = OK;
if (buf == 0 || termp == 0) {
result = ERR;
} else {
#ifdef USE_TERM_DRIVER
if (SP_PARM != 0) {
result = CallDriver_2(SP_PARM, td_sgmode, FALSE, buf);
} else {
result = ERR;
}
#else
for (;;) {
if (GET_TTY(termp->Filedes, buf) != 0) {
if (errno == EINTR)
continue;
result = ERR;
}
break;
}
#endif
TR(TRACE_BITS, ("_nc_get_tty_mode(%d): %s",
termp ? termp->Filedes : -1,
_nc_trace_ttymode(buf)));
}
if (result == ERR && buf != 0)
memset(buf, 0, sizeof(*buf));
return (result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
_nc_get_tty_mode(TTY * buf)
{
return NCURSES_SP_NAME(_nc_get_tty_mode) (CURRENT_SCREEN, buf);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_DCLx TTY * buf)
{
int result = OK;
if (buf == 0 || SP_PARM == 0) {
result = ERR;
} else {
TERMINAL *termp = TerminalOf(SP_PARM);
if (0 == termp) {
result = ERR;
} else {
#ifdef USE_TERM_DRIVER
result = CallDriver_2(SP_PARM, td_sgmode, TRUE, buf);
#else
for (;;) {
if ((SET_TTY(termp->Filedes, buf) != 0)
#if USE_KLIBC_KBD
&& !NC_ISATTY(termp->Filedes)
#endif
) {
if (errno == EINTR)
continue;
if ((errno == ENOTTY) && (SP_PARM != 0))
SP_PARM->_notty = TRUE;
result = ERR;
}
break;
}
#endif
}
TR(TRACE_BITS, ("_nc_set_tty_mode(%d): %s",
termp ? termp->Filedes : -1,
_nc_trace_ttymode(buf)));
}
return (result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
_nc_set_tty_mode(TTY * buf)
{
return NCURSES_SP_NAME(_nc_set_tty_mode) (CURRENT_SCREEN, buf);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(def_shell_mode) (NCURSES_SP_DCL0)
{
int rc = ERR;
TERMINAL *termp = TerminalOf(SP_PARM);
T((T_CALLED("def_shell_mode(%p) ->term %p"),
(void *) SP_PARM, (void *) termp));
if (termp != 0) {
#ifdef USE_TERM_DRIVER
rc = CallDriver_2(SP_PARM, td_mode, FALSE, TRUE);
#else
/*
* If XTABS was on, remove the tab and backtab capabilities.
*/
if (_nc_get_tty_mode(&termp->Ottyb) == OK) {
#ifdef TERMIOS
if (termp->Ottyb.c_oflag & OFLAGS_TABS)
tab = back_tab = NULL;
+#elif defined(EXP_WIN32_DRIVER)
+ /* noop */
#else
if (termp->Ottyb.sg_flags & XTABS)
tab = back_tab = NULL;
#endif
rc = OK;
}
#endif
}
returnCode(rc);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
def_shell_mode(void)
{
return NCURSES_SP_NAME(def_shell_mode) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(def_prog_mode) (NCURSES_SP_DCL0)
{
int rc = ERR;
TERMINAL *termp = TerminalOf(SP_PARM);
T((T_CALLED("def_prog_mode(%p) ->term %p"), (void *) SP_PARM, (void *) termp));
if (termp != 0) {
#ifdef USE_TERM_DRIVER
rc = CallDriver_2(SP_PARM, td_mode, TRUE, TRUE);
#else
/*
* Turn off the XTABS bit in the tty structure if it was on.
*/
if (_nc_get_tty_mode(&termp->Nttyb) == OK) {
#ifdef TERMIOS
termp->Nttyb.c_oflag &= (unsigned) (~OFLAGS_TABS);
+#elif defined(EXP_WIN32_DRIVER)
+ /* noop */
#else
termp->Nttyb.sg_flags &= (unsigned) (~XTABS);
#endif
rc = OK;
}
#endif
}
returnCode(rc);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
def_prog_mode(void)
{
return NCURSES_SP_NAME(def_prog_mode) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(reset_prog_mode) (NCURSES_SP_DCL0)
{
int rc = ERR;
TERMINAL *termp = TerminalOf(SP_PARM);
T((T_CALLED("reset_prog_mode(%p) ->term %p"), (void *) SP_PARM, (void *) termp));
if (termp != 0) {
#ifdef USE_TERM_DRIVER
rc = CallDriver_2(SP_PARM, td_mode, TRUE, FALSE);
#else
if (_nc_set_tty_mode(&termp->Nttyb) == OK) {
if (SP_PARM) {
if (SP_PARM->_keypad_on)
_nc_keypad(SP_PARM, TRUE);
}
rc = OK;
}
#endif
}
returnCode(rc);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
reset_prog_mode(void)
{
return NCURSES_SP_NAME(reset_prog_mode) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(reset_shell_mode) (NCURSES_SP_DCL0)
{
int rc = ERR;
TERMINAL *termp = TerminalOf(SP_PARM);
T((T_CALLED("reset_shell_mode(%p) ->term %p"),
(void *) SP_PARM, (void *) termp));
if (termp != 0) {
#ifdef USE_TERM_DRIVER
rc = CallDriver_2(SP_PARM, td_mode, FALSE, FALSE);
#else
if (SP_PARM) {
_nc_keypad(SP_PARM, FALSE);
_nc_flush();
}
rc = _nc_set_tty_mode(&termp->Ottyb);
#endif
}
returnCode(rc);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
reset_shell_mode(void)
{
return NCURSES_SP_NAME(reset_shell_mode) (CURRENT_SCREEN);
}
#endif
static TTY *
saved_tty(NCURSES_SP_DCL0)
{
TTY *result = 0;
if (SP_PARM != 0) {
result = (TTY *) & (SP_PARM->_saved_tty);
} else {
if (_nc_prescreen.saved_tty == 0) {
_nc_prescreen.saved_tty = typeCalloc(TTY, 1);
}
result = _nc_prescreen.saved_tty;
}
return result;
}
/*
** savetty() and resetty()
**
*/
NCURSES_EXPORT(int)
NCURSES_SP_NAME(savetty) (NCURSES_SP_DCL0)
{
T((T_CALLED("savetty(%p)"), (void *) SP_PARM));
returnCode(NCURSES_SP_NAME(_nc_get_tty_mode) (NCURSES_SP_ARGx saved_tty(NCURSES_SP_ARG)));
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
savetty(void)
{
return NCURSES_SP_NAME(savetty) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(resetty) (NCURSES_SP_DCL0)
{
T((T_CALLED("resetty(%p)"), (void *) SP_PARM));
returnCode(NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx saved_tty(NCURSES_SP_ARG)));
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
resetty(void)
{
return NCURSES_SP_NAME(resetty) (CURRENT_SCREEN);
}
#endif
diff --git a/contrib/ncurses/ncurses/tinfo/lib_win32con.c b/contrib/ncurses/ncurses/tinfo/lib_win32con.c
new file mode 100644
index 000000000000..3c0fe8160734
--- /dev/null
+++ b/contrib/ncurses/ncurses/tinfo/lib_win32con.c
@@ -0,0 +1,1256 @@
+/****************************************************************************
+ * Copyright 2020 Thomas E. Dickey *
+ * Copyright 1998-2009,2010 Free Software Foundation, Inc. *
+ * *
+ * Permission is hereby granted, free of charge, to any person obtaining a *
+ * copy of this software and associated documentation files (the *
+ * "Software"), to deal in the Software without restriction, including *
+ * without limitation the rights to use, copy, modify, merge, publish, *
+ * distribute, distribute with modifications, sublicense, and/or sell *
+ * copies of the Software, and to permit persons to whom the Software is *
+ * furnished to do so, subject to the following conditions: *
+ * *
+ * The above copyright notice and this permission notice shall be included *
+ * in all copies or substantial portions of the Software. *
+ * *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
+ * *
+ * Except as contained in this notice, the name(s) of the above copyright *
+ * holders shall not be used in advertising or otherwise to promote the *
+ * sale, use or other dealings in this Software without prior written *
+ * authorization. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Juergen Pfeifer *
+ * and: Thomas E. Dickey *
+ ****************************************************************************/
+
+/*
+ * TODO - GetMousePos(POINT * result) from ntconio.c
+ */
+
+#include <curses.priv.h>
+
+MODULE_ID("$Id: lib_win32con.c,v 1.6 2020/11/21 23:44:58 tom Exp $")
+
+#ifdef _NC_WINDOWS
+
+#ifdef _NC_MINGW
+#include <wchar.h>
+#else
+#include <tchar.h>
+#endif
+
+#include <io.h>
+
+#if USE_WIDEC_SUPPORT
+#define write_screen WriteConsoleOutputW
+#define read_screen ReadConsoleOutputW
+#else
+#define write_screen WriteConsoleOutput
+#define read_screen ReadConsoleOutput
+#endif
+
+static BOOL IsConsoleHandle(HANDLE hdl);
+static bool save_original_screen(void);
+static bool restore_original_screen(void) GCC_UNUSED;
+static bool read_screen_data(void);
+static int Adjust(int milliseconds, int diff);
+static int decode_mouse(SCREEN *sp, int mask);
+static bool handle_mouse(SCREEN *sp, MOUSE_EVENT_RECORD mer);
+static int rkeycompare(const void *el1, const void *el2);
+static int keycompare(const void *el1, const void *el2);
+static int MapKey(WORD vKey);
+static int AnsiKey(WORD vKey);
+
+static ULONGLONG tdiff(FILETIME fstart, FILETIME fend);
+
+#define GenMap(vKey,key) MAKELONG(key, vKey)
+static const LONG keylist[] =
+{
+ GenMap(VK_PRIOR, KEY_PPAGE),
+ GenMap(VK_NEXT, KEY_NPAGE),
+ GenMap(VK_END, KEY_END),
+ GenMap(VK_HOME, KEY_HOME),
+ GenMap(VK_LEFT, KEY_LEFT),
+ GenMap(VK_UP, KEY_UP),
+ GenMap(VK_RIGHT, KEY_RIGHT),
+ GenMap(VK_DOWN, KEY_DOWN),
+ GenMap(VK_DELETE, KEY_DC),
+ GenMap(VK_INSERT, KEY_IC)
+};
+static const LONG ansi_keys[] =
+{
+ GenMap(VK_PRIOR, 'I'),
+ GenMap(VK_NEXT, 'Q'),
+ GenMap(VK_END, 'O'),
+ GenMap(VK_HOME, 'H'),
+ GenMap(VK_LEFT, 'K'),
+ GenMap(VK_UP, 'H'),
+ GenMap(VK_RIGHT, 'M'),
+ GenMap(VK_DOWN, 'P'),
+ GenMap(VK_DELETE, 'S'),
+ GenMap(VK_INSERT, 'R')
+};
+#define array_length(a) (sizeof(a)/sizeof(a[0]))
+#define N_INI ((int)array_length(keylist))
+#define FKEYS 24
+#define MAPSIZE (FKEYS + N_INI)
+
+/* A process can only have a single console, so it's safe
+ to maintain all the information about it in a single
+ static structure.
+ */
+NCURSES_EXPORT_VAR(ConsoleInfo) _nc_CONSOLE;
+static bool console_initialized = FALSE;
+
+#define EnsureInit() (void)(console_initialized ? TRUE : _nc_console_checkinit(TRUE, TRUE))
+
+#define REQUIRED_MAX_V (DWORD)10
+#define REQUIRED_MIN_V (DWORD)0
+#define REQUIRED_BUILD (DWORD)17763
+/*
+ This function returns 0 if the Windows version has no support for
+ the modern Console interface, otherwise it returns 1
+ */
+NCURSES_EXPORT(int)
+_nc_console_vt_supported(void)
+{
+ OSVERSIONINFO osvi;
+ int res = 0;
+
+ T((T_CALLED("lib_win32con::_nc_console_vt_supported")));
+ ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+
+ GetVersionEx(&osvi);
+ T(("GetVersionEx returnedMajor=%ld, Minor=%ld, Build=%ld",
+ osvi.dwMajorVersion,
+ osvi.dwMinorVersion,
+ osvi.dwBuildNumber));
+ if (osvi.dwMajorVersion >= REQUIRED_MAX_V) {
+ if (osvi.dwMajorVersion == REQUIRED_MAX_V) {
+ if (((osvi.dwMinorVersion == REQUIRED_MIN_V) &&
+ (osvi.dwBuildNumber >= REQUIRED_BUILD)) ||
+ ((osvi.dwMinorVersion > REQUIRED_MIN_V)))
+ res = 1;
+ } else
+ res = 1;
+ }
+ returnCode(res);
+}
+
+NCURSES_EXPORT(void)
+_nc_console_size(int* Lines, int* Cols)
+{
+ EnsureInit();
+ if (Lines != NULL && Cols != NULL) {
+ if (WINCONSOLE.buffered) {
+ *Lines = (int) (WINCONSOLE.SBI.dwSize.Y);
+ *Cols = (int) (WINCONSOLE.SBI.dwSize.X);
+ } else {
+ *Lines = (int) (WINCONSOLE.SBI.srWindow.Bottom + 1 -
+ WINCONSOLE.SBI.srWindow.Top);
+ *Cols = (int) (WINCONSOLE.SBI.srWindow.Right + 1 -
+ WINCONSOLE.SBI.srWindow.Left);
+ }
+ }
+}
+
+/* Convert a file descriptor into a HANDLE
+ That's not necessarily a console HANDLE
+*/
+NCURSES_EXPORT(HANDLE)
+_nc_console_handle(int fd)
+{
+ intptr_t value = _get_osfhandle(fd);
+ return (HANDLE) value;
+}
+
+/* Validate that a HANDLE is actually a
+ console HANDLE
+*/
+static BOOL
+IsConsoleHandle(HANDLE hdl)
+{
+ DWORD dwFlag = 0;
+ BOOL result = FALSE;
+
+ T((T_CALLED("lib_win32con::IsConsoleHandle(HANDLE=%p"), hdl));
+
+ EnsureInit();
+
+ if (!GetConsoleMode(hdl, &dwFlag)) {
+ T(("GetConsoleMode failed"));
+ } else {
+ result = TRUE;
+ }
+
+ returnBool(result);
+}
+
+/* This is used when running in terminfo mode to discover,
+ whether or not the "terminal" is actually a Windows
+ Console. It's the responsibility of the console to deal
+ with the terminal escape sequences that are sent by
+ terminfo.
+ */
+NCURSES_EXPORT(int)
+_nc_console_test(int fd)
+{
+ int code = 0;
+ HANDLE hdl = INVALID_HANDLE_VALUE;
+ T((T_CALLED("lib_win32con::_nc_console_test(%d)"), fd));
+ hdl = _nc_console_handle(fd);
+ code = (int) IsConsoleHandle(hdl);
+ returnCode(code);
+}
+
+#define OutHandle() ((WINCONSOLE.isTermInfoConsole || WINCONSOLE.progMode) ? WINCONSOLE.hdl : WINCONSOLE.out)
+
+NCURSES_EXPORT(void)
+_nc_console_selectActiveHandle(void)
+{
+ if (WINCONSOLE.lastOut != WINCONSOLE.hdl) {
+ WINCONSOLE.lastOut = WINCONSOLE.hdl;
+ SetConsoleActiveScreenBuffer(WINCONSOLE.lastOut);
+ }
+}
+
+NCURSES_EXPORT(HANDLE)
+_nc_console_fd2handle(int fd)
+{
+ HANDLE hdl = _nc_console_handle(fd);
+ if (hdl==WINCONSOLE.inp) {
+ T(("lib_win32con:validateHandle %d -> WINCONSOLE.inp", fd));
+ } else if (hdl==WINCONSOLE.hdl) {
+ T(("lib_win32con:validateHandle %d -> WINCONSOLE.hdl", fd));
+ } else if (hdl==WINCONSOLE.out) {
+ T(("lib_win32con:validateHandle %d -> WINCONSOLE.out", fd));
+ } else {
+ T(("lib_win32con:validateHandle %d maps to unknown HANDLE", fd));
+ hdl = INVALID_HANDLE_VALUE;
+ }
+#if 1
+ assert(hdl != INVALID_HANDLE_VALUE);
+#endif
+ if (hdl != INVALID_HANDLE_VALUE) {
+ if (hdl != WINCONSOLE.inp && (!WINCONSOLE.isTermInfoConsole && WINCONSOLE.progMode)) {
+ if (hdl==WINCONSOLE.out && hdl!=WINCONSOLE.hdl) {
+ T(("lib_win32con:validateHandle forcing WINCONSOLE.out -> WINCONSOLE.hdl"));
+ hdl = WINCONSOLE.hdl;
+ }
+ }
+ }
+ return hdl;
+}
+
+NCURSES_EXPORT(int)
+_nc_console_setmode(HANDLE hdl, const TTY *arg)
+{
+ DWORD dwFlag = 0;
+ int code = ERR;
+ HANDLE alt;
+
+ if (arg) {
+#ifdef TRACE
+ TTY TRCTTY;
+#define TRCTTYOUT(flag) TRCTTY.dwFlagOut = flag
+#define TRCTTYIN(flag) TRCTTY.dwFlagIn = flag
+#else
+#define TRCTTYOUT(flag)
+#define TRCTTYIN(flag)
+#endif
+ T(("lib_win32con:_nc_console_setmode %s", _nc_trace_ttymode(arg)));
+ if (hdl==WINCONSOLE.inp) {
+ dwFlag = arg->dwFlagIn | ENABLE_MOUSE_INPUT | VT_FLAG_IN;
+ if (WINCONSOLE.isTermInfoConsole)
+ dwFlag |= (VT_FLAG_IN);
+ else
+ dwFlag &= (DWORD) ~(VT_FLAG_IN);
+ TRCTTYIN(dwFlag);
+ SetConsoleMode(hdl, dwFlag);
+
+ alt = OutHandle();
+ dwFlag = arg->dwFlagOut;
+ if (WINCONSOLE.isTermInfoConsole)
+ dwFlag |= (VT_FLAG_OUT);
+ else
+ dwFlag |= (VT_FLAG_OUT);
+ TRCTTYOUT(dwFlag);
+ SetConsoleMode(alt, dwFlag);
+ } else {
+ dwFlag = arg->dwFlagOut;
+ if (WINCONSOLE.isTermInfoConsole)
+ dwFlag |= (VT_FLAG_OUT);
+ else
+ dwFlag |= (VT_FLAG_OUT);
+ TRCTTYOUT(dwFlag);
+ SetConsoleMode(hdl, dwFlag);
+
+ alt = WINCONSOLE.inp;
+ dwFlag = arg->dwFlagIn | ENABLE_MOUSE_INPUT;
+ if (WINCONSOLE.isTermInfoConsole)
+ dwFlag |= (VT_FLAG_IN);
+ else
+ dwFlag &= (DWORD) ~(VT_FLAG_IN);
+ TRCTTYIN(dwFlag);
+ SetConsoleMode(alt, dwFlag);
+ T(("effective mode set %s", _nc_trace_ttymode(&TRCTTY)));
+ }
+ code = OK;
+ }
+ return(code);
+}
+
+NCURSES_EXPORT(int)
+_nc_console_getmode(HANDLE hdl, TTY *arg)
+{
+ int code = ERR;
+
+ if (arg) {
+ DWORD dwFlag = 0;
+ HANDLE alt;
+
+ if (hdl==WINCONSOLE.inp) {
+ if(GetConsoleMode(hdl, &dwFlag)) {
+ arg->dwFlagIn = dwFlag;
+ alt = OutHandle();
+ if (GetConsoleMode(alt, &dwFlag)) {
+ arg->dwFlagOut = dwFlag;
+ code = OK;
+ }
+ }
+ } else {
+ if (GetConsoleMode(hdl, &dwFlag)) {
+ arg->dwFlagOut = dwFlag;
+ alt = WINCONSOLE.inp;
+ if (GetConsoleMode(alt, &dwFlag)) {
+ arg->dwFlagIn = dwFlag;
+ code = OK;
+ }
+ }
+ }
+ }
+ T(("lib_win32con:_nc_console_getmode %s", _nc_trace_ttymode(arg)));
+ return(code);
+}
+
+NCURSES_EXPORT(int)
+_nc_console_flush(HANDLE hdl)
+{
+ int code = OK;
+
+ T((T_CALLED("lib_win32con::_nc_console_flush(hdl=%p"), hdl));
+
+ if (hdl != INVALID_HANDLE_VALUE) {
+ if (hdl == WINCONSOLE.hdl ||
+ hdl == WINCONSOLE.inp ||
+ hdl == WINCONSOLE.out) {
+ if (!FlushConsoleInputBuffer(WINCONSOLE.inp))
+ code = ERR;
+ } else {
+ code = ERR;
+ T(("_nc_console_flush not requesting a handle owned by console."));
+ }
+ }
+ returnCode(code);
+}
+
+NCURSES_EXPORT(WORD)
+_nc_console_MapColor(bool fore, int color)
+{
+ static const int _cmap[] =
+ {0, 4, 2, 6, 1, 5, 3, 7};
+ int a;
+ if (color < 0 || color > 7)
+ a = fore ? 7 : 0;
+ else
+ a = _cmap[color];
+ if (!fore)
+ a = a << 4;
+ return (WORD) a;
+}
+
+
+/*
+ * Attempt to save the screen contents. PDCurses does this if
+ * PDC_RESTORE_SCREEN is set, giving the same visual appearance on
+ * restoration as if the library had allocated a console buffer. MSDN
+ * says that the data which can be read is limited to 64Kb (and may be
+ * less).
+ */
+static bool
+save_original_screen(void)
+{
+ bool result = FALSE;
+
+ WINCONSOLE.save_region.Top = 0;
+ WINCONSOLE.save_region.Left = 0;
+ WINCONSOLE.save_region.Bottom = (SHORT) (WINCONSOLE.SBI.dwSize.Y - 1);
+ WINCONSOLE.save_region.Right = (SHORT) (WINCONSOLE.SBI.dwSize.X - 1);
+
+ if (read_screen_data()) {
+ result = TRUE;
+ } else {
+
+ WINCONSOLE.save_region.Top = WINCONSOLE.SBI.srWindow.Top;
+ WINCONSOLE.save_region.Left = WINCONSOLE.SBI.srWindow.Left;
+ WINCONSOLE.save_region.Bottom = WINCONSOLE.SBI.srWindow.Bottom;
+ WINCONSOLE.save_region.Right = WINCONSOLE.SBI.srWindow.Right;
+
+ WINCONSOLE.window_only = TRUE;
+
+ if (read_screen_data()) {
+ result = TRUE;
+ }
+ }
+
+ T(("... save original screen contents %s", result ? "ok" : "err"));
+ return result;
+}
+
+static bool
+restore_original_screen(void)
+{
+ COORD bufferCoord;
+ bool result = FALSE;
+ SMALL_RECT save_region = WINCONSOLE.save_region;
+
+ T(("... restoring %s",
+ WINCONSOLE.window_only ? "window" : "entire buffer"));
+
+ bufferCoord.X = (SHORT) (WINCONSOLE.window_only ?
+ WINCONSOLE.SBI.srWindow.Left : 0);
+ bufferCoord.Y = (SHORT) (WINCONSOLE.window_only ?
+ WINCONSOLE.SBI.srWindow.Top : 0);
+
+ if (write_screen(WINCONSOLE.hdl,
+ WINCONSOLE.save_screen,
+ WINCONSOLE.save_size,
+ bufferCoord,
+ &save_region)) {
+ result = TRUE;
+ mvcur(-1, -1, LINES - 2, 0);
+ T(("... restore original screen contents ok %dx%d (%d,%d - %d,%d)",
+ WINCONSOLE.save_size.Y,
+ WINCONSOLE.save_size.X,
+ save_region.Top,
+ save_region.Left,
+ save_region.Bottom,
+ save_region.Right));
+ } else {
+ T(("... restore original screen contents err"));
+ }
+ return result;
+}
+
+static bool
+read_screen_data(void)
+{
+ bool result = FALSE;
+ COORD bufferCoord;
+ size_t want;
+
+ WINCONSOLE.save_size.X = (SHORT) (WINCONSOLE.save_region.Right
+ - WINCONSOLE.save_region.Left + 1);
+ WINCONSOLE.save_size.Y = (SHORT) (WINCONSOLE.save_region.Bottom
+ - WINCONSOLE.save_region.Top + 1);
+
+ want = (size_t) (WINCONSOLE.save_size.X * WINCONSOLE.save_size.Y);
+
+ if ((WINCONSOLE.save_screen = malloc(want * sizeof(CHAR_INFO))) != 0) {
+ bufferCoord.X = (SHORT) (WINCONSOLE.window_only ?
+ WINCONSOLE.SBI.srWindow.Left : 0);
+ bufferCoord.Y = (SHORT) (WINCONSOLE.window_only ?
+ WINCONSOLE.SBI.srWindow.Top : 0);
+
+ T(("... reading console %s %dx%d into %d,%d - %d,%d at %d,%d",
+ WINCONSOLE.window_only ? "window" : "buffer",
+ WINCONSOLE.save_size.Y, WINCONSOLE.save_size.X,
+ WINCONSOLE.save_region.Top,
+ WINCONSOLE.save_region.Left,
+ WINCONSOLE.save_region.Bottom,
+ WINCONSOLE.save_region.Right,
+ bufferCoord.Y,
+ bufferCoord.X));
+
+ if (read_screen(WINCONSOLE.hdl,
+ WINCONSOLE.save_screen,
+ WINCONSOLE.save_size,
+ bufferCoord,
+ &WINCONSOLE.save_region)) {
+ result = TRUE;
+ } else {
+ T((" error %#lx", (unsigned long) GetLastError()));
+ FreeAndNull(WINCONSOLE.save_screen);
+ }
+ }
+
+ return result;
+}
+
+NCURSES_EXPORT(bool)
+_nc_console_get_SBI(void)
+{
+ bool rc = FALSE;
+ if (GetConsoleScreenBufferInfo(WINCONSOLE.hdl, &(WINCONSOLE.SBI))) {
+ T(("GetConsoleScreenBufferInfo"));
+ T(("... buffer(X:%d Y:%d)",
+ WINCONSOLE.SBI.dwSize.X,
+ WINCONSOLE.SBI.dwSize.Y));
+ T(("... window(X:%d Y:%d)",
+ WINCONSOLE.SBI.dwMaximumWindowSize.X,
+ WINCONSOLE.SBI.dwMaximumWindowSize.Y));
+ T(("... cursor(X:%d Y:%d)",
+ WINCONSOLE.SBI.dwCursorPosition.X,
+ WINCONSOLE.SBI.dwCursorPosition.Y));
+ T(("... display(Top:%d Bottom:%d Left:%d Right:%d)",
+ WINCONSOLE.SBI.srWindow.Top,
+ WINCONSOLE.SBI.srWindow.Bottom,
+ WINCONSOLE.SBI.srWindow.Left,
+ WINCONSOLE.SBI.srWindow.Right));
+ if (WINCONSOLE.buffered) {
+ WINCONSOLE.origin.X = 0;
+ WINCONSOLE.origin.Y = 0;
+ } else {
+ WINCONSOLE.origin.X = WINCONSOLE.SBI.srWindow.Left;
+ WINCONSOLE.origin.Y = WINCONSOLE.SBI.srWindow.Top;
+ }
+ rc = TRUE;
+ } else {
+ T(("GetConsoleScreenBufferInfo ERR"));
+ }
+ return rc;
+}
+
+#define MIN_WIDE 80
+#define MIN_HIGH 24
+
+/*
+ * In "normal" mode, reset the buffer- and window-sizes back to their original values.
+ */
+NCURSES_EXPORT(void)
+_nc_console_set_scrollback(bool normal, CONSOLE_SCREEN_BUFFER_INFO * info)
+{
+ SMALL_RECT rect;
+ COORD coord;
+ bool changed = FALSE;
+
+ T((T_CALLED("lib_win32con::_nc_console_set_scrollback(%s)"),
+ (normal
+ ? "normal"
+ : "application")));
+
+ T(("... SBI.srWindow %d,%d .. %d,%d",
+ info->srWindow.Top,
+ info->srWindow.Left,
+ info->srWindow.Bottom,
+ info->srWindow.Right));
+ T(("... SBI.dwSize %dx%d",
+ info->dwSize.Y,
+ info->dwSize.X));
+
+ if (normal) {
+ rect = info->srWindow;
+ coord = info->dwSize;
+ if (memcmp(info, &WINCONSOLE.SBI, sizeof(*info)) != 0) {
+ changed = TRUE;
+ WINCONSOLE.SBI = *info;
+ }
+ } else {
+ int high = info->srWindow.Bottom - info->srWindow.Top + 1;
+ int wide = info->srWindow.Right - info->srWindow.Left + 1;
+
+ if (high < MIN_HIGH) {
+ T(("... height %d < %d", high, MIN_HIGH));
+ high = MIN_HIGH;
+ changed = TRUE;
+ }
+ if (wide < MIN_WIDE) {
+ T(("... width %d < %d", wide, MIN_WIDE));
+ wide = MIN_WIDE;
+ changed = TRUE;
+ }
+
+ rect.Left =
+ rect.Top = 0;
+ rect.Right = (SHORT) (wide - 1);
+ rect.Bottom = (SHORT) (high - 1);
+
+ coord.X = (SHORT) wide;
+ coord.Y = (SHORT) high;
+
+ if (info->dwSize.Y != high ||
+ info->dwSize.X != wide ||
+ info->srWindow.Top != 0 ||
+ info->srWindow.Left != 0) {
+ changed = TRUE;
+ }
+
+ }
+
+ if (changed) {
+ T(("... coord %d,%d", coord.Y, coord.X));
+ T(("... rect %d,%d - %d,%d",
+ rect.Top, rect.Left,
+ rect.Bottom, rect.Right));
+ SetConsoleScreenBufferSize(WINCONSOLE.hdl, coord); /* dwSize */
+ SetConsoleWindowInfo(WINCONSOLE.hdl, TRUE, &rect); /* srWindow */
+ _nc_console_get_SBI();
+ }
+ returnVoid;
+}
+
+static ULONGLONG
+tdiff(FILETIME fstart, FILETIME fend)
+{
+ ULARGE_INTEGER ustart;
+ ULARGE_INTEGER uend;
+ ULONGLONG diff;
+
+ ustart.LowPart = fstart.dwLowDateTime;
+ ustart.HighPart = fstart.dwHighDateTime;
+ uend.LowPart = fend.dwLowDateTime;
+ uend.HighPart = fend.dwHighDateTime;
+
+ diff = (uend.QuadPart - ustart.QuadPart) / 10000;
+ return diff;
+}
+
+static int
+Adjust(int milliseconds, int diff)
+{
+ if (milliseconds != INFINITY) {
+ milliseconds -= diff;
+ if (milliseconds < 0)
+ milliseconds = 0;
+ }
+ return milliseconds;
+}
+
+#define BUTTON_MASK (FROM_LEFT_1ST_BUTTON_PRESSED | \
+ FROM_LEFT_2ND_BUTTON_PRESSED | \
+ FROM_LEFT_3RD_BUTTON_PRESSED | \
+ FROM_LEFT_4TH_BUTTON_PRESSED | \
+ RIGHTMOST_BUTTON_PRESSED)
+
+static int
+decode_mouse(SCREEN *sp, int mask)
+{
+ int result = 0;
+
+ (void) sp;
+ assert(sp && console_initialized);
+
+ if (mask & FROM_LEFT_1ST_BUTTON_PRESSED)
+ result |= BUTTON1_PRESSED;
+ if (mask & FROM_LEFT_2ND_BUTTON_PRESSED)
+ result |= BUTTON2_PRESSED;
+ if (mask & FROM_LEFT_3RD_BUTTON_PRESSED)
+ result |= BUTTON3_PRESSED;
+ if (mask & FROM_LEFT_4TH_BUTTON_PRESSED)
+ result |= BUTTON4_PRESSED;
+
+ if (mask & RIGHTMOST_BUTTON_PRESSED) {
+ switch (WINCONSOLE.numButtons) {
+ case 1:
+ result |= BUTTON1_PRESSED;
+ break;
+ case 2:
+ result |= BUTTON2_PRESSED;
+ break;
+ case 3:
+ result |= BUTTON3_PRESSED;
+ break;
+ case 4:
+ result |= BUTTON4_PRESSED;
+ break;
+ }
+ }
+
+ return result;
+}
+
+#define AdjustY() (WINCONSOLE.buffered ? 0 : (int) WINCONSOLE.SBI.srWindow.Top)
+
+static bool
+handle_mouse(SCREEN *sp, MOUSE_EVENT_RECORD mer)
+{
+ MEVENT work;
+ bool result = FALSE;
+
+ assert(sp);
+
+ sp->_drv_mouse_old_buttons = sp->_drv_mouse_new_buttons;
+ sp->_drv_mouse_new_buttons = mer.dwButtonState & BUTTON_MASK;
+
+ /*
+ * We're only interested if the button is pressed or released.
+ * FIXME: implement continuous event-tracking.
+ */
+ if (sp->_drv_mouse_new_buttons != sp->_drv_mouse_old_buttons) {
+ memset(&work, 0, sizeof(work));
+
+ if (sp->_drv_mouse_new_buttons) {
+ work.bstate |=
+ (mmask_t) decode_mouse(sp,
+ sp->_drv_mouse_new_buttons);
+ } else {
+ /* cf: BUTTON_PRESSED, BUTTON_RELEASED */
+ work.bstate |=
+ (mmask_t) (decode_mouse(sp,
+ sp->_drv_mouse_old_buttons)
+ >> 1);
+ result = TRUE;
+ }
+
+ work.x = mer.dwMousePosition.X;
+ work.y = mer.dwMousePosition.Y - AdjustY();
+
+ sp->_drv_mouse_fifo[sp->_drv_mouse_tail] = work;
+ sp->_drv_mouse_tail += 1;
+ }
+ return result;
+}
+
+static int
+rkeycompare(const void *el1, const void *el2)
+{
+ WORD key1 = (LOWORD((*((const LONG *) el1)))) & 0x7fff;
+ WORD key2 = (LOWORD((*((const LONG *) el2)))) & 0x7fff;
+
+ return ((key1 < key2) ? -1 : ((key1 == key2) ? 0 : 1));
+}
+
+
+static int
+keycompare(const void *el1, const void *el2)
+{
+ WORD key1 = HIWORD((*((const LONG *) el1)));
+ WORD key2 = HIWORD((*((const LONG *) el2)));
+
+ return ((key1 < key2) ? -1 : ((key1 == key2) ? 0 : 1));
+}
+
+static int
+MapKey(WORD vKey)
+{
+ int code = -1;
+
+ if (!WINCONSOLE.isTermInfoConsole) {
+ WORD nKey = 0;
+ void *res;
+ LONG key = GenMap(vKey, 0);
+
+ res = bsearch(&key,
+ WINCONSOLE.map,
+ (size_t) (N_INI + FKEYS),
+ sizeof(keylist[0]),
+ keycompare);
+ if (res) {
+ key = *((LONG *) res);
+ nKey = LOWORD(key);
+ code = (int) (nKey & 0x7fff);
+ if (nKey & 0x8000)
+ code = -code;
+ }
+ }
+ return code;
+}
+
+static int
+AnsiKey(WORD vKey)
+{
+ int code = -1;
+
+ if (!WINCONSOLE.isTermInfoConsole) {
+ WORD nKey = 0;
+ void *res;
+ LONG key = GenMap(vKey, 0);
+
+ res = bsearch(&key,
+ WINCONSOLE.ansi_map,
+ (size_t) (N_INI + FKEYS),
+ sizeof(keylist[0]),
+ keycompare);
+ if (res) {
+ key = *((LONG *) res);
+ nKey = LOWORD(key);
+ code = (int) (nKey & 0x7fff);
+ if (nKey & 0x8000)
+ code = -code;
+ }
+ }
+ return code;
+}
+
+NCURSES_EXPORT(int)
+_nc_console_keyok(int keycode, int flag)
+{
+ int code = ERR;
+ WORD nKey;
+ WORD vKey;
+ void *res;
+ LONG key = GenMap(0, (WORD) keycode);
+
+ T((T_CALLED("lib_win32con::_nc_console_keyok(%d, %d)"), keycode, flag));
+
+ res = bsearch(&key,
+ WINCONSOLE.rmap,
+ (size_t) (N_INI + FKEYS),
+ sizeof(keylist[0]),
+ rkeycompare);
+ if (res) {
+ key = *((LONG *) res);
+ vKey = HIWORD(key);
+ nKey = (LOWORD(key)) & 0x7fff;
+ if (!flag)
+ nKey |= 0x8000;
+ *(LONG *) res = GenMap(vKey, nKey);
+ }
+ returnCode(code);
+}
+
+NCURSES_EXPORT(bool)
+_nc_console_keyExist(int keycode)
+{
+ WORD nKey;
+ void *res;
+ bool found = FALSE;
+ LONG key = GenMap(0, (WORD) keycode);
+
+ T((T_CALLED("lib_win32con::_nc_console_keyExist(%d)"), keycode));
+ res = bsearch(&key,
+ WINCONSOLE.rmap,
+ (size_t) (N_INI + FKEYS),
+ sizeof(keylist[0]),
+ rkeycompare);
+ if (res) {
+ key = *((LONG *) res);
+ nKey = LOWORD(key);
+ if (!(nKey & 0x8000))
+ found = TRUE;
+ }
+ returnCode(found);
+}
+
+NCURSES_EXPORT(int)
+_nc_console_twait(
+ SCREEN *sp,
+ HANDLE hdl,
+ int mode,
+ int milliseconds,
+ int *timeleft
+ EVENTLIST_2nd(_nc_eventlist * evl))
+{
+ INPUT_RECORD inp_rec;
+ BOOL b;
+ DWORD nRead = 0, rc = (DWORD) (-1);
+ int code = 0;
+ FILETIME fstart;
+ FILETIME fend;
+ int diff;
+ bool isNoDelay = (milliseconds == 0);
+
+#ifdef NCURSES_WGETCH_EVENTS
+ (void) evl; /* TODO: implement wgetch-events */
+#endif
+
+#define IGNORE_CTRL_KEYS (SHIFT_PRESSED|LEFT_ALT_PRESSED|RIGHT_ALT_PRESSED| \
+ LEFT_CTRL_PRESSED|RIGHT_CTRL_PRESSED)
+#define CONSUME() ReadConsoleInput(hdl, &inp_rec, 1, &nRead)
+
+ assert(sp);
+
+ TR(TRACE_IEVENT, ("start twait: hdl=%p, %d milliseconds, mode: %d",
+ hdl, milliseconds, mode));
+
+ if (milliseconds < 0)
+ milliseconds = INFINITY;
+
+ memset(&inp_rec, 0, sizeof(inp_rec));
+
+ while (true) {
+ if (!isNoDelay) {
+ GetSystemTimeAsFileTime(&fstart);
+ rc = WaitForSingleObject(hdl, (DWORD) milliseconds);
+ GetSystemTimeAsFileTime(&fend);
+ diff = (int) tdiff(fstart, fend);
+ milliseconds = Adjust(milliseconds, diff);
+ if (milliseconds< 0)
+ break;
+ }
+
+ if (isNoDelay || (rc == WAIT_OBJECT_0)) {
+ if (mode) {
+ nRead = 0;
+ b = GetNumberOfConsoleInputEvents(hdl, &nRead);
+ if (!b) {
+ T(("twait:err GetNumberOfConsoleInputEvents"));
+ }
+ if (isNoDelay && b) {
+ T(("twait: Events Available: %ld", nRead));
+ if (nRead==0) {
+ code = 0;
+ goto end;
+ } else {
+ DWORD n = 0;
+ INPUT_RECORD* pInpRec =
+ TypeAlloca(INPUT_RECORD, nRead);
+ if (pInpRec != NULL) {
+ DWORD i;
+ BOOL f;
+ memset(pInpRec, 0, sizeof(INPUT_RECORD)*nRead);
+ f = PeekConsoleInput(hdl, pInpRec, nRead, &n);
+ if (f) {
+ for(i = 0; i < n; i++) {
+ if (pInpRec[i].EventType==KEY_EVENT) {
+ if(pInpRec[i].Event.KeyEvent.bKeyDown) {
+ DWORD ctrlMask =
+ (pInpRec[i].Event.KeyEvent.dwControlKeyState &
+ IGNORE_CTRL_KEYS);
+ if (!ctrlMask) {
+ code = TW_INPUT;
+ goto end;
+ }
+ }
+ }
+ }
+ } else {
+ T(("twait:err PeekConsoleInput"));
+ }
+ code = 0;
+ goto end;
+ } else {
+ T(("twait:err could not alloca input records"));
+ }
+ }
+ }
+ if (b && nRead > 0) {
+ b = PeekConsoleInput(hdl, &inp_rec, 1, &nRead);
+ if (!b) {
+ T(("twait:err PeekConsoleInput"));
+ }
+ if (b && nRead > 0) {
+ switch (inp_rec.EventType) {
+ case KEY_EVENT:
+ if (mode & TW_INPUT) {
+ WORD vk =
+ inp_rec.Event.KeyEvent.wVirtualKeyCode;
+ char ch =
+ inp_rec.Event.KeyEvent.uChar.AsciiChar;
+ T(("twait:event KEY_EVENT"));
+ T(("twait vk=%d, ch=%d, keydown=%d",
+ vk, ch, inp_rec.Event.KeyEvent.bKeyDown));
+ if (inp_rec.Event.KeyEvent.bKeyDown) {
+ T(("twait:event KeyDown"));
+ if (!WINCONSOLE.isTermInfoConsole &&
+ (0 == ch)) {
+ int nKey = MapKey(vk);
+ if (nKey < 0) {
+ CONSUME();
+ continue;
+ }
+ }
+ code = TW_INPUT;
+ goto end;
+ } else {
+ CONSUME();
+ }
+ }
+ continue;
+ case MOUSE_EVENT:
+ T(("twait:event MOUSE_EVENT"));
+ if (decode_mouse(sp,
+ (inp_rec.Event.MouseEvent.dwButtonState
+ & BUTTON_MASK)) == 0) {
+ CONSUME();
+ } else if (mode & TW_MOUSE) {
+ code = TW_MOUSE;
+ goto end;
+ }
+ continue;
+ /* e.g., FOCUS_EVENT */
+ default:
+ T(("twait:event Tyoe %d", inp_rec.EventType));
+ CONSUME();
+ _nc_console_selectActiveHandle();
+ continue;
+ }
+ }
+ }
+ }
+ continue;
+ } else {
+ if (rc != WAIT_TIMEOUT) {
+ code = -1;
+ break;
+ } else {
+ code = 0;
+ break;
+ }
+ }
+ }
+end:
+
+ TR(TRACE_IEVENT, ("end twait: returned %d (%lu), remaining time %d msec",
+ code, GetLastError(), milliseconds));
+
+ if (timeleft)
+ *timeleft = milliseconds;
+
+ return code;
+}
+
+NCURSES_EXPORT(int)
+_nc_console_testmouse(
+ SCREEN *sp,
+ HANDLE hdl,
+ int delay
+ EVENTLIST_2nd(_nc_eventlist * evl))
+{
+ int rc = 0;
+
+ assert(sp);
+
+ if (sp->_drv_mouse_head < sp->_drv_mouse_tail) {
+ rc = TW_MOUSE;
+ } else {
+ rc = _nc_console_twait(sp,
+ hdl,
+ TWAIT_MASK,
+ delay,
+ (int *) 0
+ EVENTLIST_2nd(evl));
+ }
+ return rc;
+}
+
+NCURSES_EXPORT(int)
+_nc_console_read(
+ SCREEN *sp,
+ HANDLE hdl,
+ int *buf)
+{
+ int rc = -1;
+ INPUT_RECORD inp_rec;
+ BOOL b;
+ DWORD nRead;
+ WORD vk;
+
+ assert(sp);
+ assert(buf);
+
+ memset(&inp_rec, 0, sizeof(inp_rec));
+
+ T((T_CALLED("lib_win32con::_nc_console_read(%p)"), sp));
+
+ while ((b = ReadConsoleInput(hdl, &inp_rec, 1, &nRead))) {
+ if (b && nRead > 0) {
+ if (rc < 0)
+ rc = 0;
+ rc = rc + (int) nRead;
+ if (inp_rec.EventType == KEY_EVENT) {
+ if (!inp_rec.Event.KeyEvent.bKeyDown)
+ continue;
+ *buf = (int) inp_rec.Event.KeyEvent.uChar.AsciiChar;
+ vk = inp_rec.Event.KeyEvent.wVirtualKeyCode;
+ /*
+ * There are 24 virtual function-keys, and typically
+ * 12 function-keys on a keyboard. Use the shift-modifier
+ * to provide the remaining 12 keys.
+ */
+ if (vk >= VK_F1 && vk <= VK_F12) {
+ if (inp_rec.Event.KeyEvent.dwControlKeyState &
+ SHIFT_PRESSED) {
+ vk = (WORD) (vk + 12);
+ }
+ }
+ if (*buf == 0) {
+ int key = MapKey(vk);
+ if (key < 0)
+ continue;
+ if (sp->_keypad_on) {
+ *buf = key;
+ } else {
+ ungetch('\0');
+ *buf = AnsiKey(vk);
+ }
+ }
+ break;
+ } else if (inp_rec.EventType == MOUSE_EVENT) {
+ if (handle_mouse(sp,
+ inp_rec.Event.MouseEvent)) {
+ *buf = KEY_MOUSE;
+ break;
+ }
+ }
+ continue;
+ }
+ }
+ returnCode(rc);
+}
+
+/* Our replacement for the systems _isatty to include also
+ a test for mintty. This is called from the NC_ISATTY macro
+ defined in curses.priv.h
+
+ Return codes:
+ - 0 : Not a TTY
+ - 1 : A Windows character device detected by _isatty
+ - 2 : A future implementation may return 2 for mintty
+ */
+NCURSES_EXPORT(int)
+_nc_console_isatty(int fd)
+{
+ int result = 0;
+ T((T_CALLED("lib_win32con::_nc_console_isatty(%d"), fd));
+
+ if (_isatty(fd))
+ result = 1;
+#ifdef _NC_CHECK_MINTTY
+ else {
+ if (_nc_console_checkmintty(fd, NULL)) {
+ result = 2;
+ fprintf(stderr, "ncurses on Windows must run in a Windows console.\n");
+ fprintf(stderr, "On newer versions of Windows, the calling program should create a PTY-like.\n");
+ fprintf(stderr, "device using the CreatePseudoConsole Windows API call.\n");
+ exit(EXIT_FAILURE);
+ }
+ }
+#endif
+ returnCode(result);
+}
+
+NCURSES_EXPORT(bool)
+_nc_console_checkinit(bool initFlag, bool assumeTermInfo)
+{
+ bool res = FALSE;
+
+ T((T_CALLED("lib_win32con::_nc_console_checkinit(initFlag=%d, assumeTermInfo=%d)"),
+ initFlag, assumeTermInfo));
+
+ if (!initFlag) {
+ res = console_initialized;
+ } else {
+ /* initialize once, or not at all */
+ if (!console_initialized) {
+ int i;
+ DWORD num_buttons;
+ WORD a;
+ BOOL buffered = FALSE;
+ BOOL b;
+
+ START_TRACE();
+ WINCONSOLE.isTermInfoConsole = assumeTermInfo;
+
+ WINCONSOLE.map = (LPDWORD)malloc(sizeof(DWORD)*MAPSIZE);
+ WINCONSOLE.rmap = (LPDWORD)malloc(sizeof(DWORD)*MAPSIZE);
+ WINCONSOLE.ansi_map = (LPDWORD)malloc(sizeof(DWORD)*MAPSIZE);
+
+ for (i = 0; i < (N_INI + FKEYS); i++) {
+ if (i < N_INI) {
+ WINCONSOLE.rmap[i] = WINCONSOLE.map[i] =
+ (DWORD) keylist[i];
+ WINCONSOLE.ansi_map[i] = (DWORD) ansi_keys[i];
+ } else {
+ WINCONSOLE.rmap[i] = WINCONSOLE.map[i] =
+ (DWORD) GenMap((VK_F1 + (i - N_INI)),
+ (KEY_F(1) + (i - N_INI)));
+ WINCONSOLE.ansi_map[i] =
+ (DWORD) GenMap((VK_F1 + (i - N_INI)),
+ (';' + (i - N_INI)));
+ }
+ }
+ qsort(WINCONSOLE.ansi_map,
+ (size_t) (MAPSIZE),
+ sizeof(keylist[0]),
+ keycompare);
+ qsort(WINCONSOLE.map,
+ (size_t) (MAPSIZE),
+ sizeof(keylist[0]),
+ keycompare);
+ qsort(WINCONSOLE.rmap,
+ (size_t) (MAPSIZE),
+ sizeof(keylist[0]),
+ rkeycompare);
+
+ if (GetNumberOfConsoleMouseButtons(&num_buttons)) {
+ WINCONSOLE.numButtons = (int) num_buttons;
+ } else {
+ WINCONSOLE.numButtons = 1;
+ }
+
+ a = _nc_console_MapColor(true, COLOR_WHITE) |
+ _nc_console_MapColor(false, COLOR_BLACK);
+ for (i = 0; i < CON_NUMPAIRS; i++)
+ WINCONSOLE.pairs[i] = a;
+
+ WINCONSOLE.inp = GetStdHandle(STD_INPUT_HANDLE);
+ WINCONSOLE.out = GetStdHandle(STD_OUTPUT_HANDLE);
+ WINCONSOLE.hdl = WINCONSOLE.out;
+
+ GetConsoleMode(WINCONSOLE.inp, &WINCONSOLE.originalMode.dwFlagIn);
+ GetConsoleMode(WINCONSOLE.out, &WINCONSOLE.originalMode.dwFlagOut);
+
+ if (!WINCONSOLE.isTermInfoConsole) {
+ b = AllocConsole();
+
+ if (!b)
+ b = AttachConsole(ATTACH_PARENT_PROCESS);
+
+ if (getenv("NCGDB") || getenv("NCURSES_CONSOLE2")) {
+ T(("... will not buffer console"));
+ } else {
+ T(("... creating console buffer"));
+ WINCONSOLE.hdl =
+ CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE,
+ 0,
+ NULL,
+ CONSOLE_TEXTMODE_BUFFER,
+ NULL);
+ buffered = TRUE;
+ }
+ }
+
+ /* We set binary I/O even when using the console
+ driver to cover the situation, that the
+ TERM variable is set to #win32con, but actually
+ Windows supports virtual terminal processing.
+ So if terminfo functions are used in this setup,
+ they actually may work.
+ */
+ _setmode(fileno(stdin), _O_BINARY);
+ _setmode(fileno(stdout), _O_BINARY);
+
+ if (WINCONSOLE.hdl != INVALID_HANDLE_VALUE) {
+ WINCONSOLE.buffered = buffered;
+ _nc_console_get_SBI();
+ WINCONSOLE.save_SBI = WINCONSOLE.SBI;
+ if (!buffered) {
+ save_original_screen();
+ _nc_console_set_scrollback(FALSE, &WINCONSOLE.SBI);
+ }
+ GetConsoleCursorInfo(WINCONSOLE.hdl, &WINCONSOLE.save_CI);
+ T(("... initial cursor is %svisible, %d%%",
+ (WINCONSOLE.save_CI.bVisible ? "" : "not-"),
+ (int) WINCONSOLE.save_CI.dwSize));
+ }
+
+ WINCONSOLE.initialized = TRUE;
+ console_initialized = TRUE;
+ }
+ res = (WINCONSOLE.hdl != INVALID_HANDLE_VALUE);
+ }
+ returnBool(res);
+}
+
+#endif // _NC_WINDOWS
diff --git a/contrib/ncurses/ncurses/tinfo/lib_win32util.c b/contrib/ncurses/ncurses/tinfo/lib_win32util.c
new file mode 100644
index 000000000000..d5bcd70199ed
--- /dev/null
+++ b/contrib/ncurses/ncurses/tinfo/lib_win32util.c
@@ -0,0 +1,134 @@
+/****************************************************************************
+ * Copyright 2020 Thomas E. Dickey *
+ * Copyright 1998-2009,2010 Free Software Foundation, Inc. *
+ * *
+ * Permission is hereby granted, free of charge, to any person obtaining a *
+ * copy of this software and associated documentation files (the *
+ * "Software"), to deal in the Software without restriction, including *
+ * without limitation the rights to use, copy, modify, merge, publish, *
+ * distribute, distribute with modifications, sublicense, and/or sell *
+ * copies of the Software, and to permit persons to whom the Software is *
+ * furnished to do so, subject to the following conditions: *
+ * *
+ * The above copyright notice and this permission notice shall be included *
+ * in all copies or substantial portions of the Software. *
+ * *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
+ * *
+ * Except as contained in this notice, the name(s) of the above copyright *
+ * holders shall not be used in advertising or otherwise to promote the *
+ * sale, use or other dealings in this Software without prior written *
+ * authorization. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Juergen Pfeifer *
+ * and: Thomas E. Dickey *
+ ****************************************************************************/
+
+#include <curses.priv.h>
+
+MODULE_ID("$Id: lib_win32util.c,v 1.1 2020/08/14 21:57:01 juergen Exp $")
+
+#ifdef _NC_WINDOWS
+#include <io.h>
+
+#ifdef _NC_CHECK_MINTTY
+#define PSAPI_VERSION 2
+#include <psapi.h>
+#include <tchar.h>
+
+#define array_length(a) (sizeof(a)/sizeof(a[0]))
+
+/* This function tests, whether or not the ncurses application
+ is running as a descendant of MSYS2/cygwin mintty terminal
+ application. mintty doesn't use Windows Console for it's screen
+ I/O, so the native Windows _isatty doesn't recognize it as
+ character device. But we can discover we are at the end of an
+ Pipe and can query the server side of the pipe, looking whether
+ or not this is mintty.
+ For now we terminate the program if we discover that situation.
+ Althogh in theory it would be possible, to remotely manipulate
+ the terminal state of mintty, this is out of scope for now and
+ not worth the significant effort.
+ */
+NCURSES_EXPORT(int)
+_nc_console_checkmintty(int fd, LPHANDLE pMinTTY)
+{
+ HANDLE handle = _nc_console_handle(fd);
+ DWORD dw;
+ int code = 0;
+
+ T((T_CALLED("lib_winhelper::_nc_console_checkmintty(%d, %p)"), fd, pMinTTY));
+
+ if (handle != INVALID_HANDLE_VALUE) {
+ dw = GetFileType(handle);
+ if (dw == FILE_TYPE_PIPE) {
+ if (GetNamedPipeInfo(handle, 0, 0, 0, 0)) {
+ ULONG pPid;
+ /* Requires NT6 */
+ if (GetNamedPipeServerProcessId(handle, &pPid)) {
+ TCHAR buf[MAX_PATH];
+ DWORD len = 0;
+ /* These security attributes may allow us to
+ create a remote thread in mintty to manipulate
+ the terminal state remotely */
+ HANDLE pHandle = OpenProcess(
+ PROCESS_CREATE_THREAD
+ | PROCESS_QUERY_INFORMATION
+ | PROCESS_VM_OPERATION
+ | PROCESS_VM_WRITE
+ | PROCESS_VM_READ,
+ FALSE,
+ pPid);
+ if (pMinTTY)
+ *pMinTTY = INVALID_HANDLE_VALUE;
+ if (pHandle != INVALID_HANDLE_VALUE) {
+ if ((len = GetProcessImageFileName(
+ pHandle,
+ buf,
+ (DWORD)
+ array_length(buf)))) {
+ TCHAR *pos = _tcsrchr(buf, _T('\\'));
+ if (pos) {
+ pos++;
+ if (_tcsnicmp(pos, _TEXT("mintty.exe"), 10)
+ == 0) {
+ if (pMinTTY)
+ *pMinTTY = pHandle;
+ code = 1;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ returnCode(code);
+}
+#endif /* _NC_CHECK_MINTTY */
+
+#define JAN1970 116444736000000000LL /* the value for 01/01/1970 00:00 */
+
+NCURSES_EXPORT(int)
+_nc_gettimeofday(struct timeval *tv, void *tz GCC_UNUSED)
+{
+ union {
+ FILETIME ft;
+ long long since1601; /* time since 1 Jan 1601 in 100ns units */
+ } data;
+
+ GetSystemTimeAsFileTime(&data.ft);
+ tv->tv_usec = (long) ((data.since1601 / 10LL) % 1000000LL);
+ tv->tv_sec = (long) ((data.since1601 - JAN1970) / 10000000LL);
+ return (0);
+}
+
+#endif // _NC_WINDOWS
diff --git a/contrib/ncurses/ncurses/tinfo/parse_entry.c b/contrib/ncurses/ncurses/tinfo/parse_entry.c
index 23574b6626bf..ec2d3364234e 100644
--- a/contrib/ncurses/ncurses/tinfo/parse_entry.c
+++ b/contrib/ncurses/ncurses/tinfo/parse_entry.c
@@ -1,1108 +1,1112 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
/*
* parse_entry.c -- compile one terminfo or termcap entry
*
* Get an exact in-core representation of an entry. Don't
* try to resolve use or tc capabilities, that is someone
* else's job. Depends on the lexical analyzer to get tokens
* from the input stream.
*/
#define __INTERNAL_CAPS_VISIBLE
#include <curses.priv.h>
#include <ctype.h>
#include <tic.h>
-MODULE_ID("$Id: parse_entry.c,v 1.99 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: parse_entry.c,v 1.101 2020/10/24 21:37:13 tom Exp $")
#ifdef LINT
static short const parametrized[] =
{0};
#else
#include <parametrized.h>
#endif
static void postprocess_termcap(TERMTYPE2 *, bool);
static void postprocess_terminfo(TERMTYPE2 *);
static struct name_table_entry const *lookup_fullname(const char *name);
#if NCURSES_XNAMES
static struct name_table_entry const *
_nc_extend_names(ENTRY * entryp, const char *name, int token_type)
{
static struct name_table_entry temp;
TERMTYPE2 *tp = &(entryp->tterm);
unsigned offset = 0;
unsigned actual;
unsigned tindex;
unsigned first, last, n;
bool found;
switch (token_type) {
case BOOLEAN:
first = 0;
last = tp->ext_Booleans;
offset = tp->ext_Booleans;
tindex = tp->num_Booleans;
break;
case NUMBER:
first = tp->ext_Booleans;
last = tp->ext_Numbers + first;
offset = (unsigned) (tp->ext_Booleans + tp->ext_Numbers);
tindex = tp->num_Numbers;
break;
case STRING:
first = (unsigned) (tp->ext_Booleans + tp->ext_Numbers);
last = tp->ext_Strings + first;
offset = (unsigned) (tp->ext_Booleans + tp->ext_Numbers + tp->ext_Strings);
tindex = tp->num_Strings;
break;
case CANCEL:
actual = NUM_EXT_NAMES(tp);
for (n = 0; n < actual; n++) {
if (!strcmp(name, tp->ext_Names[n])) {
if (n > (unsigned) (tp->ext_Booleans + tp->ext_Numbers)) {
token_type = STRING;
} else if (n > tp->ext_Booleans) {
token_type = NUMBER;
} else {
token_type = BOOLEAN;
}
return _nc_extend_names(entryp, name, token_type);
}
}
/* Well, we are given a cancel for a name that we don't recognize */
return _nc_extend_names(entryp, name, STRING);
default:
return 0;
}
/* Adjust the 'offset' (insertion-point) to keep the lists of extended
* names sorted.
*/
for (n = first, found = FALSE; n < last; n++) {
int cmp = strcmp(tp->ext_Names[n], name);
if (cmp == 0)
found = TRUE;
if (cmp >= 0) {
offset = n;
tindex = n - first;
switch (token_type) {
case BOOLEAN:
tindex += BOOLCOUNT;
break;
case NUMBER:
tindex += NUMCOUNT;
break;
case STRING:
tindex += STRCOUNT;
break;
}
break;
}
}
#define for_each_value(max) \
for (last = (unsigned) (max - 1); last > tindex; last--)
if (!found) {
switch (token_type) {
case BOOLEAN:
tp->ext_Booleans++;
tp->num_Booleans++;
TYPE_REALLOC(NCURSES_SBOOL, tp->num_Booleans, tp->Booleans);
for_each_value(tp->num_Booleans)
tp->Booleans[last] = tp->Booleans[last - 1];
break;
case NUMBER:
tp->ext_Numbers++;
tp->num_Numbers++;
TYPE_REALLOC(NCURSES_INT2, tp->num_Numbers, tp->Numbers);
for_each_value(tp->num_Numbers)
tp->Numbers[last] = tp->Numbers[last - 1];
break;
case STRING:
tp->ext_Strings++;
tp->num_Strings++;
TYPE_REALLOC(char *, tp->num_Strings, tp->Strings);
for_each_value(tp->num_Strings)
tp->Strings[last] = tp->Strings[last - 1];
break;
}
actual = NUM_EXT_NAMES(tp);
TYPE_REALLOC(char *, actual, tp->ext_Names);
while (--actual > offset)
tp->ext_Names[actual] = tp->ext_Names[actual - 1];
tp->ext_Names[offset] = _nc_save_str(name);
}
temp.nte_name = tp->ext_Names[offset];
temp.nte_type = token_type;
temp.nte_index = (short) tindex;
temp.nte_link = -1;
return &temp;
}
static const char *
usertype2s(int mask)
{
const char *result = "unknown";
if (mask & (1 << BOOLEAN)) {
result = "boolean";
} else if (mask & (1 << NUMBER)) {
result = "number";
} else if (mask & (1 << STRING)) {
result = "string";
}
return result;
}
static bool
expected_type(const char *name, int token_type, bool silent)
{
struct user_table_entry const *entry = _nc_find_user_entry(name);
bool result = TRUE;
if ((entry != 0) && (token_type != CANCEL)) {
int have_type = (1 << token_type);
if (!(entry->ute_type & have_type)) {
if (!silent)
_nc_warning("expected %s-type for %s, have %s",
usertype2s(entry->ute_type),
name,
usertype2s(have_type));
result = FALSE;
}
}
return result;
}
#endif /* NCURSES_XNAMES */
static bool
valid_entryname(const char *name)
{
bool result = TRUE;
int ch;
while ((ch = UChar(*name++)) != '\0') {
if (ch <= ' ' || ch > '~' || ch == '/') {
result = FALSE;
break;
}
}
return result;
}
/*
* int
* _nc_parse_entry(entry, literal, silent)
*
* Compile one entry. Doesn't try to resolve use or tc capabilities.
*
* found-forward-use = FALSE
* re-initialise internal arrays
* get_token();
* if the token was not a name in column 1, complain and die
* save names in entry's string table
* while (get_token() is not EOF and not NAMES)
* check for existence and type-correctness
* enter cap into structure
* if STRING
* save string in entry's string table
* push back token
*/
#define BAD_TC_USAGE if (!bad_tc_usage) \
{ bad_tc_usage = TRUE; \
_nc_warning("Legacy termcap allows only a trailing tc= clause"); }
#define MAX_NUMBER MAX_OF_TYPE(NCURSES_INT2)
NCURSES_EXPORT(int)
_nc_parse_entry(ENTRY * entryp, int literal, bool silent)
{
int token_type;
struct name_table_entry const *entry_ptr;
char *ptr, *base;
const char *name;
bool bad_tc_usage = FALSE;
token_type = _nc_get_token(silent);
if (token_type == EOF)
return (EOF);
if (token_type != NAMES)
_nc_err_abort("Entry does not start with terminal names in column one");
_nc_init_entry(entryp);
entryp->cstart = _nc_comment_start;
entryp->cend = _nc_comment_end;
entryp->startline = _nc_start_line;
DEBUG(2, ("Comment range is %ld to %ld", entryp->cstart, entryp->cend));
/*
* Strip off the 2-character termcap name, if present. Originally termcap
* used that as an indexing aid. We can retain 2-character terminfo names,
* but note that they would be lost if we translate to/from termcap. This
* feature is supposedly obsolete since "newer" BSD implementations do not
* use it; however our reference for this feature is SunOS 4.x, which
* implemented it. Note that the resulting terminal type was never the
* 2-character name, but was instead the first alias after that.
*/
#define ok_TC2(s) (isgraph(UChar(s)) && (s) != '|')
ptr = _nc_curr_token.tk_name;
if (_nc_syntax == SYN_TERMCAP
#if NCURSES_XNAMES
&& !_nc_user_definable
#endif
) {
if (ok_TC2(ptr[0]) && ok_TC2(ptr[1]) && (ptr[2] == '|')) {
ptr += 3;
_nc_curr_token.tk_name[2] = '\0';
}
}
entryp->tterm.str_table = entryp->tterm.term_names = _nc_save_str(ptr);
if (entryp->tterm.str_table == 0)
return (ERR);
DEBUG(1, ("Starting '%s'", ptr));
/*
* We do this because the one-token lookahead in the parse loop
* results in the terminal type getting prematurely set to correspond
* to that of the next entry.
*/
name = _nc_first_name(entryp->tterm.term_names);
if (!valid_entryname(name)) {
_nc_warning("invalid entry name \"%s\"", name);
name = "invalid";
}
_nc_set_type(name);
/* check for overly-long names and aliases */
for (base = entryp->tterm.term_names; (ptr = strchr(base, '|')) != 0;
base = ptr + 1) {
if (ptr - base > MAX_ALIAS) {
_nc_warning("%s `%.*s' may be too long",
(base == entryp->tterm.term_names)
? "primary name"
: "alias",
(int) (ptr - base), base);
}
}
entryp->nuses = 0;
for (token_type = _nc_get_token(silent);
token_type != EOF && token_type != NAMES;
token_type = _nc_get_token(silent)) {
bool is_use = (strcmp(_nc_curr_token.tk_name, "use") == 0);
bool is_tc = !is_use && (strcmp(_nc_curr_token.tk_name, "tc") == 0);
if (is_use || is_tc) {
if (!VALID_STRING(_nc_curr_token.tk_valstring)
|| _nc_curr_token.tk_valstring[0] == '\0') {
_nc_warning("missing name for use-clause");
continue;
} else if (!valid_entryname(_nc_curr_token.tk_valstring)) {
_nc_warning("invalid name for use-clause \"%s\"",
_nc_curr_token.tk_valstring);
continue;
} else if (entryp->nuses >= MAX_USES) {
_nc_warning("too many use-clauses, ignored \"%s\"",
_nc_curr_token.tk_valstring);
continue;
}
entryp->uses[entryp->nuses].name = _nc_save_str(_nc_curr_token.tk_valstring);
entryp->uses[entryp->nuses].line = _nc_curr_line;
entryp->nuses++;
if (entryp->nuses > 1 && is_tc) {
BAD_TC_USAGE
}
} else {
/* normal token lookup */
entry_ptr = _nc_find_entry(_nc_curr_token.tk_name,
_nc_get_hash_table(_nc_syntax));
/*
* Our kluge to handle aliasing. The reason it's done
* this ugly way, with a linear search, is so the hashing
* machinery doesn't have to be made really complicated
* (also we get better warnings this way). No point in
* making this case fast, aliased caps aren't common now
* and will get rarer.
*/
if (entry_ptr == NOTFOUND) {
const struct alias *ap;
if (_nc_syntax == SYN_TERMCAP) {
if (entryp->nuses != 0) {
BAD_TC_USAGE
}
for (ap = _nc_get_alias_table(TRUE); ap->from; ap++)
if (strcmp(ap->from, _nc_curr_token.tk_name) == 0) {
if (ap->to == (char *) 0) {
_nc_warning("%s (%s termcap extension) ignored",
ap->from, ap->source);
goto nexttok;
}
entry_ptr = _nc_find_entry(ap->to,
_nc_get_hash_table(TRUE));
if (entry_ptr && !silent)
_nc_warning("%s (%s termcap extension) aliased to %s",
ap->from, ap->source, ap->to);
break;
}
} else { /* if (_nc_syntax == SYN_TERMINFO) */
for (ap = _nc_get_alias_table(FALSE); ap->from; ap++)
if (strcmp(ap->from, _nc_curr_token.tk_name) == 0) {
if (ap->to == (char *) 0) {
_nc_warning("%s (%s terminfo extension) ignored",
ap->from, ap->source);
goto nexttok;
}
entry_ptr = _nc_find_entry(ap->to,
_nc_get_hash_table(FALSE));
if (entry_ptr && !silent)
_nc_warning("%s (%s terminfo extension) aliased to %s",
ap->from, ap->source, ap->to);
break;
}
if (entry_ptr == NOTFOUND) {
entry_ptr = lookup_fullname(_nc_curr_token.tk_name);
}
}
}
#if NCURSES_XNAMES
/*
* If we have extended-names active, we will automatically
* define a name based on its context.
*/
if (entry_ptr == NOTFOUND
&& _nc_user_definable) {
if (expected_type(_nc_curr_token.tk_name, token_type, silent)) {
if ((entry_ptr = _nc_extend_names(entryp,
_nc_curr_token.tk_name,
token_type)) != 0) {
if (_nc_tracing >= DEBUG_LEVEL(1)) {
_nc_warning("extended capability '%s'",
_nc_curr_token.tk_name);
}
}
} else {
/* ignore it: we have already printed error message */
continue;
}
}
#endif /* NCURSES_XNAMES */
/* can't find this cap name, not even as an alias */
if (entry_ptr == NOTFOUND) {
if (!silent)
_nc_warning("unknown capability '%s'",
_nc_curr_token.tk_name);
continue;
}
/* deal with bad type/value combinations. */
if (token_type == CANCEL) {
/*
* Prefer terminfo in this (long-obsolete) ambiguity:
*/
if (!strcmp("ma", _nc_curr_token.tk_name)) {
entry_ptr = _nc_find_type_entry("ma", NUMBER,
_nc_syntax != 0);
assert(entry_ptr != 0);
}
} else if (entry_ptr->nte_type != token_type) {
/*
* Nasty special cases here handle situations in which type
* information can resolve name clashes. Normal lookup
* finds the last instance in the capability table of a
* given name, regardless of type. find_type_entry looks
* for a first matching instance with given type. So as
* long as all ambiguous names occur in pairs of distinct
* type, this will do the job.
*/
if (token_type == NUMBER
&& !strcmp("ma", _nc_curr_token.tk_name)) {
/* tell max_attributes from arrow_key_map */
entry_ptr = _nc_find_type_entry("ma", NUMBER,
_nc_syntax != 0);
assert(entry_ptr != 0);
} else if (token_type == STRING
&& !strcmp("MT", _nc_curr_token.tk_name)) {
/* map terminfo's string MT to MT */
entry_ptr = _nc_find_type_entry("MT", STRING,
_nc_syntax != 0);
assert(entry_ptr != 0);
} else if (token_type == BOOLEAN
&& entry_ptr->nte_type == STRING) {
/* treat strings without following "=" as empty strings */
token_type = STRING;
} else {
/* we couldn't recover; skip this token */
if (!silent) {
const char *type_name;
switch (entry_ptr->nte_type) {
case BOOLEAN:
type_name = "boolean";
break;
case STRING:
type_name = "string";
break;
case NUMBER:
type_name = "numeric";
break;
default:
type_name = "unknown";
break;
}
_nc_warning("wrong type used for %s capability '%s'",
type_name, _nc_curr_token.tk_name);
}
continue;
}
}
/* now we know that the type/value combination is OK */
switch (token_type) {
case CANCEL:
switch (entry_ptr->nte_type) {
case BOOLEAN:
entryp->tterm.Booleans[entry_ptr->nte_index] = CANCELLED_BOOLEAN;
break;
case NUMBER:
entryp->tterm.Numbers[entry_ptr->nte_index] = CANCELLED_NUMERIC;
break;
case STRING:
entryp->tterm.Strings[entry_ptr->nte_index] = CANCELLED_STRING;
break;
}
break;
case BOOLEAN:
entryp->tterm.Booleans[entry_ptr->nte_index] = TRUE;
break;
case NUMBER:
#if !NCURSES_EXT_NUMBERS
if (_nc_curr_token.tk_valnumber > MAX_NUMBER) {
entryp->tterm.Numbers[entry_ptr->nte_index] = MAX_NUMBER;
} else
#endif
{
entryp->tterm.Numbers[entry_ptr->nte_index] =
(NCURSES_INT2) _nc_curr_token.tk_valnumber;
}
break;
case STRING:
ptr = _nc_curr_token.tk_valstring;
- if (_nc_syntax == SYN_TERMCAP)
+ if (_nc_syntax == SYN_TERMCAP) {
+ int n = entry_ptr->nte_index;
ptr = _nc_captoinfo(_nc_curr_token.tk_name,
ptr,
- parametrized[entry_ptr->nte_index]);
+ (n < (int) SIZEOF(parametrized))
+ ? parametrized[n]
+ : 0);
+ }
entryp->tterm.Strings[entry_ptr->nte_index] = _nc_save_str(ptr);
break;
default:
if (!silent)
_nc_warning("unknown token type");
_nc_panic_mode((char) ((_nc_syntax == SYN_TERMCAP) ? ':' : ','));
continue;
}
} /* end else cur_token.name != "use" */
nexttok:
continue; /* cannot have a label w/o statement */
} /* endwhile (not EOF and not NAMES) */
_nc_push_token(token_type);
_nc_set_type(_nc_first_name(entryp->tterm.term_names));
/*
* Try to deduce as much as possible from extension capabilities
* (this includes obsolete BSD capabilities). Sigh...it would be more
* space-efficient to call this after use resolution, but it has
* to be done before entry allocation is wrapped up.
*/
if (!literal) {
if (_nc_syntax == SYN_TERMCAP) {
bool has_base_entry = FALSE;
/*
* Don't insert defaults if this is a `+' entry meant only
* for inclusion in other entries (not sure termcap ever
* had these, actually).
*/
if (strchr(entryp->tterm.term_names, '+')) {
has_base_entry = TRUE;
} else {
unsigned i;
/*
* Otherwise, look for a base entry that will already
* have picked up defaults via translation.
*/
for (i = 0; i < entryp->nuses; i++) {
if (entryp->uses[i].name != 0
&& !strchr(entryp->uses[i].name, '+'))
has_base_entry = TRUE;
}
}
postprocess_termcap(&entryp->tterm, has_base_entry);
} else
postprocess_terminfo(&entryp->tterm);
}
_nc_wrap_entry(entryp, FALSE);
return (OK);
}
NCURSES_EXPORT(int)
_nc_capcmp(const char *s, const char *t)
/* compare two string capabilities, stripping out padding */
{
bool ok_s = VALID_STRING(s);
bool ok_t = VALID_STRING(t);
if (ok_s && ok_t) {
for (;;) {
if (s[0] == '$' && s[1] == '<') {
for (s += 2;; s++) {
if (!(isdigit(UChar(*s))
|| *s == '.'
|| *s == '*'
|| *s == '/'
|| *s == '>')) {
break;
}
}
}
if (t[0] == '$' && t[1] == '<') {
for (t += 2;; t++) {
if (!(isdigit(UChar(*t))
|| *t == '.'
|| *t == '*'
|| *t == '/'
|| *t == '>')) {
break;
}
}
}
/* we've now pushed s and t past any padding they pointed at */
if (*s == '\0' && *t == '\0')
return (0);
if (*s != *t)
return (*t - *s);
/* else *s == *t but one is not NUL, so continue */
s++, t++;
}
} else if (ok_s || ok_t) {
return 1;
}
return 0;
}
static void
append_acs0(string_desc * dst, int code, char *src, size_t off)
{
if (src != 0 && off < strlen(src)) {
char temp[3];
temp[0] = (char) code;
temp[1] = src[off];
temp[2] = 0;
_nc_safe_strcat(dst, temp);
}
}
static void
append_acs(string_desc * dst, int code, char *src)
{
if (VALID_STRING(src) && strlen(src) == 1) {
append_acs0(dst, code, src, 0);
}
}
/*
* The ko capability, if present, consists of a comma-separated capability
* list. For each capability, we may assume there is a keycap that sends the
* string which is the value of that capability.
*/
#define DATA(from, to) { { from }, { to } }
typedef struct {
const char from[3];
const char to[6];
} assoc;
static assoc const ko_xlate[] =
{
DATA("al", "kil1"), /* insert line key -> KEY_IL */
DATA("bt", "kcbt"), /* back tab -> KEY_BTAB */
DATA("cd", "ked"), /* clear-to-eos key -> KEY_EOL */
DATA("ce", "kel"), /* clear-to-eol key -> KEY_EOS */
DATA("cl", "kclr"), /* clear key -> KEY_CLEAR */
DATA("ct", "tbc"), /* clear all tabs -> KEY_CATAB */
DATA("dc", "kdch1"), /* delete char -> KEY_DC */
DATA("dl", "kdl1"), /* delete line -> KEY_DL */
DATA("do", "kcud1"), /* down key -> KEY_DOWN */
DATA("ei", "krmir"), /* exit insert key -> KEY_EIC */
DATA("ho", "khome"), /* home key -> KEY_HOME */
DATA("ic", "kich1"), /* insert char key -> KEY_IC */
DATA("im", "kIC"), /* insert-mode key -> KEY_SIC */
DATA("le", "kcub1"), /* le key -> KEY_LEFT */
DATA("nd", "kcuf1"), /* nd key -> KEY_RIGHT */
DATA("nl", "kent"), /* new line key -> KEY_ENTER */
DATA("st", "khts"), /* set-tab key -> KEY_STAB */
DATA("ta", ""),
DATA("up", "kcuu1"), /* up-arrow key -> KEY_UP */
};
/*
* This routine fills in string caps that either had defaults under
* termcap or can be manufactured from obsolete termcap capabilities.
* It was lifted from Ross Ridge's mytinfo package.
*/
static const char C_CR[] = "\r";
static const char C_LF[] = "\n";
static const char C_BS[] = "\b";
static const char C_HT[] = "\t";
/*
* This bit of legerdemain turns all the terminfo variable names into
* references to locations in the arrays Booleans, Numbers, and Strings ---
* precisely what's needed.
*/
#undef CUR
#define CUR tp->
static void
postprocess_termcap(TERMTYPE2 *tp, bool has_base)
{
char buf[MAX_LINE * 2 + 2];
string_desc result;
/*
* TERMCAP DEFAULTS AND OBSOLETE-CAPABILITY TRANSLATIONS
*
* This first part of the code is the functional inverse of the
* fragment in capdefaults.c.
* ----------------------------------------------------------------------
*/
/* if there was a tc entry, assume we picked up defaults via that */
if (!has_base) {
if (WANTED(init_3string) && PRESENT(termcap_init2))
init_3string = _nc_save_str(termcap_init2);
if (WANTED(reset_2string) && PRESENT(termcap_reset))
reset_2string = _nc_save_str(termcap_reset);
if (WANTED(carriage_return)) {
if (carriage_return_delay > 0) {
_nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf))
"%s$<%d>", C_CR, carriage_return_delay);
carriage_return = _nc_save_str(buf);
} else
carriage_return = _nc_save_str(C_CR);
}
if (WANTED(cursor_left)) {
if (backspace_delay > 0) {
_nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf))
"%s$<%d>", C_BS, backspace_delay);
cursor_left = _nc_save_str(buf);
} else if (backspaces_with_bs == 1)
cursor_left = _nc_save_str(C_BS);
else if (PRESENT(backspace_if_not_bs))
cursor_left = backspace_if_not_bs;
}
/* vi doesn't use "do", but it does seem to use nl (or '\n') instead */
if (WANTED(cursor_down)) {
if (PRESENT(linefeed_if_not_lf))
cursor_down = linefeed_if_not_lf;
else if (linefeed_is_newline != 1) {
if (new_line_delay > 0) {
_nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf))
"%s$<%d>", C_LF, new_line_delay);
cursor_down = _nc_save_str(buf);
} else
cursor_down = _nc_save_str(C_LF);
}
}
if (WANTED(scroll_forward) && crt_no_scrolling != 1) {
if (PRESENT(linefeed_if_not_lf))
cursor_down = linefeed_if_not_lf;
else if (linefeed_is_newline != 1) {
if (new_line_delay > 0) {
_nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf))
"%s$<%d>", C_LF, new_line_delay);
scroll_forward = _nc_save_str(buf);
} else
scroll_forward = _nc_save_str(C_LF);
}
}
if (WANTED(newline)) {
if (linefeed_is_newline == 1) {
if (new_line_delay > 0) {
_nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf))
"%s$<%d>", C_LF, new_line_delay);
newline = _nc_save_str(buf);
} else
newline = _nc_save_str(C_LF);
} else if (PRESENT(carriage_return) && PRESENT(scroll_forward)) {
_nc_str_init(&result, buf, sizeof(buf));
if (_nc_safe_strcat(&result, carriage_return)
&& _nc_safe_strcat(&result, scroll_forward))
newline = _nc_save_str(buf);
} else if (PRESENT(carriage_return) && PRESENT(cursor_down)) {
_nc_str_init(&result, buf, sizeof(buf));
if (_nc_safe_strcat(&result, carriage_return)
&& _nc_safe_strcat(&result, cursor_down))
newline = _nc_save_str(buf);
}
}
}
/*
* Inverse of capdefaults.c code ends here.
* ----------------------------------------------------------------------
*
* TERMCAP-TO TERMINFO MAPPINGS FOR SOURCE TRANSLATION
*
* These translations will *not* be inverted by tgetent().
*/
if (!has_base) {
/*
* We wait until now to decide if we've got a working cr because even
* one that doesn't work can be used for newline. Unfortunately the
* space allocated for it is wasted.
*/
if (return_does_clr_eol == 1 || no_correctly_working_cr == 1)
carriage_return = ABSENT_STRING;
/*
* Supposedly most termcap entries have ta now and '\t' is no longer a
* default, but it doesn't seem to be true...
*/
if (WANTED(tab)) {
if (horizontal_tab_delay > 0) {
_nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf))
"%s$<%d>", C_HT, horizontal_tab_delay);
tab = _nc_save_str(buf);
} else
tab = _nc_save_str(C_HT);
}
if (init_tabs == ABSENT_NUMERIC && has_hardware_tabs == TRUE)
init_tabs = 8;
/*
* Assume we can beep with ^G unless we're given bl@.
*/
if (WANTED(bell))
bell = _nc_save_str("\007");
}
/*
* Translate the old termcap :pt: capability to it#8 + ht=\t
*/
if (has_hardware_tabs == TRUE) {
if (init_tabs != 8 && init_tabs != ABSENT_NUMERIC)
_nc_warning("hardware tabs with a width other than 8: %d", init_tabs);
else {
if (PRESENT(tab) && _nc_capcmp(tab, C_HT))
_nc_warning("hardware tabs with a non-^I tab string %s",
_nc_visbuf(tab));
else {
if (WANTED(tab))
tab = _nc_save_str(C_HT);
init_tabs = 8;
}
}
}
/*
* Now translate the ko capability, if there is one. This
* isn't from mytinfo...
*/
if (PRESENT(other_non_function_keys)) {
char *base;
char *bp, *cp, *dp;
struct name_table_entry const *from_ptr;
struct name_table_entry const *to_ptr;
char buf2[MAX_TERMINFO_LENGTH];
bool foundim;
/* we're going to use this for a special case later */
dp = strchr(other_non_function_keys, 'i');
foundim = (dp != 0) && (dp[1] == 'm');
/* look at each comma-separated capability in the ko string... */
for (base = other_non_function_keys;
(cp = strchr(base, ',')) != 0;
base = cp + 1) {
size_t len = (unsigned) (cp - base);
size_t n;
assoc const *ap = 0;
for (n = 0; n < SIZEOF(ko_xlate); ++n) {
if (len == strlen(ko_xlate[n].from)
&& strncmp(ko_xlate[n].from, base, len) == 0) {
ap = ko_xlate + n;
break;
}
}
if (ap == 0) {
_nc_warning("unknown capability `%.*s' in ko string",
(int) len, base);
continue;
} else if (ap->to[0] == '\0') /* ignore it */
continue;
/* now we know we found a match in ko_table, so... */
from_ptr = _nc_find_entry(ap->from, _nc_get_hash_table(TRUE));
to_ptr = _nc_find_entry(ap->to, _nc_get_hash_table(FALSE));
if (!from_ptr || !to_ptr) /* should never happen! */
_nc_err_abort("ko translation table is invalid, I give up");
if (WANTED(tp->Strings[from_ptr->nte_index])) {
_nc_warning("no value for ko capability %s", ap->from);
continue;
}
if (tp->Strings[to_ptr->nte_index]) {
const char *s = tp->Strings[from_ptr->nte_index];
const char *t = tp->Strings[to_ptr->nte_index];
/* There's no point in warning about it if it's the same
* string; that's just an inefficiency.
*/
if (VALID_STRING(s) && VALID_STRING(t) && strcmp(s, t) != 0)
_nc_warning("%s (%s) already has an explicit value %s, ignoring ko",
ap->to, ap->from, t);
continue;
}
/*
* The magic moment -- copy the mapped key string over,
* stripping out padding.
*/
bp = tp->Strings[from_ptr->nte_index];
if (VALID_STRING(bp)) {
for (dp = buf2; *bp; bp++) {
if (bp[0] == '$' && bp[1] == '<') {
while (*bp && *bp != '>') {
++bp;
}
} else
*dp++ = *bp;
}
*dp = '\0';
tp->Strings[to_ptr->nte_index] = _nc_save_str(buf2);
} else {
tp->Strings[to_ptr->nte_index] = bp;
}
}
/*
* Note: ko=im and ko=ic both want to grab the `Insert'
* keycap. There's a kich1 but no ksmir, so the ic capability
* got mapped to kich1 and im to kIC to avoid a collision.
* If the description has im but not ic, hack kIC back to kich1.
*/
if (foundim && WANTED(key_ic) && PRESENT(key_sic)) {
key_ic = key_sic;
key_sic = ABSENT_STRING;
}
}
if (!has_base) {
if (!hard_copy) {
if (WANTED(key_backspace))
key_backspace = _nc_save_str(C_BS);
if (WANTED(key_left))
key_left = _nc_save_str(C_BS);
if (WANTED(key_down))
key_down = _nc_save_str(C_LF);
}
}
/*
* Translate XENIX forms characters.
*/
if (PRESENT(acs_ulcorner) ||
PRESENT(acs_llcorner) ||
PRESENT(acs_urcorner) ||
PRESENT(acs_lrcorner) ||
PRESENT(acs_ltee) ||
PRESENT(acs_rtee) ||
PRESENT(acs_btee) ||
PRESENT(acs_ttee) ||
PRESENT(acs_hline) ||
PRESENT(acs_vline) ||
PRESENT(acs_plus)) {
char buf2[MAX_TERMCAP_LENGTH];
_nc_str_init(&result, buf2, sizeof(buf2));
_nc_safe_strcat(&result, acs_chars);
append_acs(&result, 'j', acs_lrcorner);
append_acs(&result, 'k', acs_urcorner);
append_acs(&result, 'l', acs_ulcorner);
append_acs(&result, 'm', acs_llcorner);
append_acs(&result, 'n', acs_plus);
append_acs(&result, 'q', acs_hline);
append_acs(&result, 't', acs_ltee);
append_acs(&result, 'u', acs_rtee);
append_acs(&result, 'v', acs_btee);
append_acs(&result, 'w', acs_ttee);
append_acs(&result, 'x', acs_vline);
if (buf2[0]) {
acs_chars = _nc_save_str(buf2);
_nc_warning("acsc string synthesized from XENIX capabilities");
}
} else if (acs_chars == ABSENT_STRING
&& PRESENT(enter_alt_charset_mode)
&& PRESENT(exit_alt_charset_mode)) {
acs_chars = _nc_save_str(VT_ACSC);
}
}
static void
postprocess_terminfo(TERMTYPE2 *tp)
{
/*
* TERMINFO-TO-TERMINFO MAPPINGS FOR SOURCE TRANSLATION
* ----------------------------------------------------------------------
*/
/*
* Translate AIX forms characters.
*/
if (PRESENT(box_chars_1)) {
char buf2[MAX_TERMCAP_LENGTH];
string_desc result;
_nc_str_init(&result, buf2, sizeof(buf2));
_nc_safe_strcat(&result, acs_chars);
append_acs0(&result, 'l', box_chars_1, 0); /* ACS_ULCORNER */
append_acs0(&result, 'q', box_chars_1, 1); /* ACS_HLINE */
append_acs0(&result, 'k', box_chars_1, 2); /* ACS_URCORNER */
append_acs0(&result, 'x', box_chars_1, 3); /* ACS_VLINE */
append_acs0(&result, 'j', box_chars_1, 4); /* ACS_LRCORNER */
append_acs0(&result, 'm', box_chars_1, 5); /* ACS_LLCORNER */
append_acs0(&result, 'w', box_chars_1, 6); /* ACS_TTEE */
append_acs0(&result, 'u', box_chars_1, 7); /* ACS_RTEE */
append_acs0(&result, 'v', box_chars_1, 8); /* ACS_BTEE */
append_acs0(&result, 't', box_chars_1, 9); /* ACS_LTEE */
append_acs0(&result, 'n', box_chars_1, 10); /* ACS_PLUS */
if (buf2[0]) {
acs_chars = _nc_save_str(buf2);
_nc_warning("acsc string synthesized from AIX capabilities");
box_chars_1 = ABSENT_STRING;
}
}
/*
* ----------------------------------------------------------------------
*/
}
/*
* Do a linear search through the terminfo tables to find a given full-name.
* We don't expect to do this often, so there's no hashing function.
*
* In effect, this scans through the 3 lists of full-names, and looks them
* up in _nc_info_table, which is organized so that the nte_index fields are
* sorted, but the nte_type fields are not necessarily grouped together.
*/
static struct name_table_entry const *
lookup_fullname(const char *find)
{
int state = -1;
for (;;) {
int count = 0;
NCURSES_CONST char *const *names;
switch (++state) {
case BOOLEAN:
names = boolfnames;
break;
case STRING:
names = strfnames;
break;
case NUMBER:
names = numfnames;
break;
default:
return NOTFOUND;
}
for (count = 0; names[count] != 0; count++) {
if (!strcmp(names[count], find)) {
struct name_table_entry const *entry_ptr = _nc_get_table(FALSE);
while (entry_ptr->nte_type != state
|| entry_ptr->nte_index != count)
entry_ptr++;
return entry_ptr;
}
}
}
}
/* parse_entry.c ends here */
diff --git a/contrib/ncurses/ncurses/tinfo/read_entry.c b/contrib/ncurses/ncurses/tinfo/read_entry.c
index 5b570b0fe192..9741e103b7a9 100644
--- a/contrib/ncurses/ncurses/tinfo/read_entry.c
+++ b/contrib/ncurses/ncurses/tinfo/read_entry.c
@@ -1,897 +1,895 @@
/****************************************************************************
- * Copyright 2018-2019,2020 Thomas E. Dickey *
+ * Copyright 2018-2020,2021 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
/*
* read_entry.c -- Routine for reading in a compiled terminfo file
*/
#include <curses.priv.h>
#include <hashed_db.h>
#include <tic.h>
-MODULE_ID("$Id: read_entry.c,v 1.157 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: read_entry.c,v 1.159 2021/02/14 00:17:09 tom Exp $")
#define TYPE_CALLOC(type,elts) typeCalloc(type, (unsigned)(elts))
#define MyNumber(n) (short) LOW_MSB(n)
#define SIZEOF_32BITS 4
#if NCURSES_USE_DATABASE
#if NCURSES_EXT_NUMBERS
static size_t
convert_16bits(char *buf, NCURSES_INT2 *Numbers, int count)
{
int i;
size_t j;
size_t size = SIZEOF_SHORT;
for (i = 0; i < count; i++) {
unsigned mask = 0xff;
unsigned char ch = 0;
Numbers[i] = 0;
for (j = 0; j < size; ++j) {
ch = UChar(*buf++);
Numbers[i] |= (ch << (8 * j));
mask <<= 8;
}
if (ch & 0x80) {
while (mask != 0) {
Numbers[i] |= (int) mask;
mask <<= 8;
}
}
TR(TRACE_DATABASE, ("get Numbers[%d]=%d", i, Numbers[i]));
}
return size;
}
static size_t
convert_32bits(char *buf, NCURSES_INT2 *Numbers, int count)
{
int i;
size_t j;
size_t size = SIZEOF_INT2;
unsigned char ch;
assert(sizeof(NCURSES_INT2) == size);
for (i = 0; i < count; i++) {
Numbers[i] = 0;
for (j = 0; j < size; ++j) {
ch = UChar(*buf++);
Numbers[i] |= (ch << (8 * j));
}
/* "unsigned" and NCURSES_INT2 are the same size - no sign-extension */
TR(TRACE_DATABASE, ("get Numbers[%d]=%d", i, Numbers[i]));
}
return size;
}
#else
static size_t
convert_32bits(char *buf, NCURSES_INT2 *Numbers, int count)
{
int i, j;
unsigned char ch;
for (i = 0; i < count; i++) {
int value = 0;
for (j = 0; j < SIZEOF_32BITS; ++j) {
ch = UChar(*buf++);
value |= (ch << (8 * j));
}
if (value == -1)
Numbers[i] = ABSENT_NUMERIC;
else if (value == -2)
Numbers[i] = CANCELLED_NUMERIC;
else if (value > MAX_OF_TYPE(NCURSES_INT2))
Numbers[i] = MAX_OF_TYPE(NCURSES_INT2);
else
Numbers[i] = (short) value;
TR(TRACE_DATABASE, ("get Numbers[%d]=%d", i, Numbers[i]));
}
return SIZEOF_SHORT;
}
static size_t
convert_16bits(char *buf, NCURSES_INT2 *Numbers, int count)
{
int i;
for (i = 0; i < count; i++) {
if (IS_NEG1(buf + 2 * i))
Numbers[i] = ABSENT_NUMERIC;
else if (IS_NEG2(buf + 2 * i))
Numbers[i] = CANCELLED_NUMERIC;
else
Numbers[i] = MyNumber(buf + 2 * i);
TR(TRACE_DATABASE, ("get Numbers[%d]=%d", i, Numbers[i]));
}
return SIZEOF_SHORT;
}
#endif
static void
convert_strings(char *buf, char **Strings, int count, int size, char *table)
{
int i;
char *p;
for (i = 0; i < count; i++) {
if (IS_NEG1(buf + 2 * i)) {
Strings[i] = ABSENT_STRING;
} else if (IS_NEG2(buf + 2 * i)) {
Strings[i] = CANCELLED_STRING;
} else if (MyNumber(buf + 2 * i) > size) {
Strings[i] = ABSENT_STRING;
} else {
Strings[i] = (MyNumber(buf + 2 * i) + table);
TR(TRACE_DATABASE, ("Strings[%d] = %s", i, _nc_visbuf(Strings[i])));
}
/* make sure all strings are NUL terminated */
if (VALID_STRING(Strings[i])) {
- for (p = Strings[i]; p <= table + size; p++)
+ for (p = Strings[i]; p < table + size; p++)
if (*p == '\0')
break;
/* if there is no NUL, ignore the string */
- if (p > table + size)
+ if (p >= table + size)
Strings[i] = ABSENT_STRING;
}
}
}
static int
fake_read(char *src, int *offset, int limit, char *dst, unsigned want)
{
int have = (limit - *offset);
if (have > 0) {
if ((int) want > have)
want = (unsigned) have;
memcpy(dst, src + *offset, (size_t) want);
*offset += (int) want;
} else {
want = 0;
}
return (int) want;
}
#define Read(buf, count) fake_read(buffer, &offset, limit, (char *) buf, (unsigned) count)
#define read_shorts(buf, count) \
(Read(buf, (count)*SIZEOF_SHORT) == (int) (count)*SIZEOF_SHORT)
#define read_numbers(buf, count) \
(Read(buf, (count)*(unsigned)size_of_numbers) == (int) (count)*size_of_numbers)
#define even_boundary(value) \
if ((value) % 2 != 0) Read(buf, 1)
#endif
NCURSES_EXPORT(void)
_nc_init_termtype(TERMTYPE2 *const tp)
{
unsigned i;
#if NCURSES_XNAMES
tp->num_Booleans = BOOLCOUNT;
tp->num_Numbers = NUMCOUNT;
tp->num_Strings = STRCOUNT;
tp->ext_Booleans = 0;
tp->ext_Numbers = 0;
tp->ext_Strings = 0;
#endif
if (tp->Booleans == 0)
TYPE_MALLOC(NCURSES_SBOOL, BOOLCOUNT, tp->Booleans);
if (tp->Numbers == 0)
TYPE_MALLOC(NCURSES_INT2, NUMCOUNT, tp->Numbers);
if (tp->Strings == 0)
TYPE_MALLOC(char *, STRCOUNT, tp->Strings);
for_each_boolean(i, tp)
tp->Booleans[i] = FALSE;
for_each_number(i, tp)
tp->Numbers[i] = ABSENT_NUMERIC;
for_each_string(i, tp)
tp->Strings[i] = ABSENT_STRING;
}
#if NCURSES_USE_DATABASE
#if NCURSES_XNAMES
static bool
valid_shorts(char *buffer, int limit)
{
bool result = FALSE;
int n;
for (n = 0; n < limit; ++n) {
if (MyNumber(buffer + (n * 2)) > 0) {
result = TRUE;
break;
}
}
return result;
}
#endif
/*
* Return TGETENT_YES if read, TGETENT_NO if not found or garbled.
*/
NCURSES_EXPORT(int)
_nc_read_termtype(TERMTYPE2 *ptr, char *buffer, int limit)
{
int offset = 0;
int name_size, bool_count, num_count, str_count, str_size;
int i;
char buf[MAX_ENTRY_SIZE + 2];
char *string_table;
unsigned want, have;
- bool need_ints;
size_t (*convert_numbers) (char *, NCURSES_INT2 *, int);
int size_of_numbers;
int max_entry_size = MAX_ENTRY_SIZE;
TR(TRACE_DATABASE,
(T_CALLED("_nc_read_termtype(ptr=%p, buffer=%p, limit=%d)"),
(void *) ptr, buffer, limit));
TR(TRACE_DATABASE, ("READ termtype header @%d", offset));
memset(ptr, 0, sizeof(*ptr));
/* grab the header */
if (!read_shorts(buf, 6)
|| !IS_TIC_MAGIC(buf)) {
returnDB(TGETENT_NO);
}
#if NCURSES_EXT_NUMBERS
- if ((need_ints = (LOW_MSB(buf) == MAGIC2))) {
+ if (LOW_MSB(buf) == MAGIC2) {
convert_numbers = convert_32bits;
size_of_numbers = SIZEOF_INT2;
} else {
max_entry_size = MAX_ENTRY_SIZE1;
convert_numbers = convert_16bits;
size_of_numbers = SIZEOF_SHORT;
}
#else
- if ((need_ints = (LOW_MSB(buf) == MAGIC2))) {
+ if (LOW_MSB(buf) == MAGIC2) {
convert_numbers = convert_32bits;
size_of_numbers = SIZEOF_32BITS;
} else {
convert_numbers = convert_16bits;
size_of_numbers = SIZEOF_INT2;
}
#endif
/* *INDENT-EQLS* */
name_size = MyNumber(buf + 2);
bool_count = MyNumber(buf + 4);
num_count = MyNumber(buf + 6);
str_count = MyNumber(buf + 8);
str_size = MyNumber(buf + 10);
TR(TRACE_DATABASE,
("TERMTYPE name_size=%d, bool=%d/%d, num=%d/%d str=%d/%d(%d)",
name_size, bool_count, BOOLCOUNT, num_count, NUMCOUNT,
str_count, STRCOUNT, str_size));
if (name_size < 0
|| bool_count < 0
|| num_count < 0
|| str_count < 0
|| str_size < 0) {
returnDB(TGETENT_NO);
}
want = (unsigned) (str_size + name_size + 1);
/* try to allocate space for the string table */
if (str_count * SIZEOF_SHORT >= max_entry_size
|| (string_table = typeMalloc(char, want)) == 0) {
returnDB(TGETENT_NO);
}
/* grab the name (a null-terminated string) */
want = min(MAX_NAME_SIZE, (unsigned) name_size);
ptr->str_table = string_table;
ptr->term_names = string_table;
if ((have = (unsigned) Read(ptr->term_names, want)) != want) {
memset(ptr->term_names + have, 0, (size_t) (want - have));
}
ptr->term_names[want] = '\0';
string_table += (want + 1);
if (have > MAX_NAME_SIZE)
offset = (int) (have - MAX_NAME_SIZE);
/* grab the booleans */
if ((ptr->Booleans = TYPE_CALLOC(NCURSES_SBOOL,
max(BOOLCOUNT, bool_count))) == 0
|| Read(ptr->Booleans, (unsigned) bool_count) < bool_count) {
returnDB(TGETENT_NO);
}
/*
* If booleans end on an odd byte, skip it. The machine they
* originally wrote terminfo on must have been a 16-bit
* word-oriented machine that would trap out if you tried a
* word access off a 2-byte boundary.
*/
even_boundary(name_size + bool_count);
/* grab the numbers */
if (!(ptr->Numbers = TYPE_CALLOC(NCURSES_INT2, max(NUMCOUNT, num_count)))
|| !read_numbers(buf, num_count)) {
returnDB(TGETENT_NO);
}
convert_numbers(buf, ptr->Numbers, num_count);
if ((ptr->Strings = TYPE_CALLOC(char *, max(STRCOUNT, str_count))) == 0) {
returnDB(TGETENT_NO);
}
if (str_count) {
/* grab the string offsets */
if (!read_shorts(buf, str_count)) {
returnDB(TGETENT_NO);
}
/* finally, grab the string table itself */
if (Read(string_table, (unsigned) str_size) != str_size) {
returnDB(TGETENT_NO);
}
convert_strings(buf, ptr->Strings, str_count, str_size, string_table);
}
#if NCURSES_XNAMES
ptr->num_Booleans = BOOLCOUNT;
ptr->num_Numbers = NUMCOUNT;
ptr->num_Strings = STRCOUNT;
/*
* Read extended entries, if any, after the normal end of terminfo data.
*/
even_boundary(str_size);
TR(TRACE_DATABASE, ("READ extended_header @%d", offset));
if (_nc_user_definable && read_shorts(buf, 5) && valid_shorts(buf, 5)) {
int ext_bool_count = MyNumber(buf + 0);
int ext_num_count = MyNumber(buf + 2);
int ext_str_count = MyNumber(buf + 4);
int ext_str_usage = MyNumber(buf + 6);
int ext_str_limit = MyNumber(buf + 8);
unsigned need = (unsigned) (ext_bool_count + ext_num_count + ext_str_count);
int base = 0;
if ((int) need >= (max_entry_size / 2)
|| ext_str_usage >= max_entry_size
|| ext_str_limit >= max_entry_size
|| ext_bool_count < 0
|| ext_num_count < 0
|| ext_str_count < 0
|| ext_str_usage < 0
|| ext_str_limit < 0) {
returnDB(TGETENT_NO);
}
ptr->num_Booleans = UShort(BOOLCOUNT + ext_bool_count);
ptr->num_Numbers = UShort(NUMCOUNT + ext_num_count);
ptr->num_Strings = UShort(STRCOUNT + ext_str_count);
TYPE_REALLOC(NCURSES_SBOOL, ptr->num_Booleans, ptr->Booleans);
TYPE_REALLOC(NCURSES_INT2, ptr->num_Numbers, ptr->Numbers);
TYPE_REALLOC(char *, ptr->num_Strings, ptr->Strings);
TR(TRACE_DATABASE, ("extended header: "
"bool %d, "
"number %d, "
"string %d(%d:%d)",
ext_bool_count,
ext_num_count,
ext_str_count,
ext_str_usage,
ext_str_limit));
TR(TRACE_DATABASE, ("READ %d extended-booleans @%d",
ext_bool_count, offset));
if ((ptr->ext_Booleans = UShort(ext_bool_count)) != 0) {
if (Read(ptr->Booleans + BOOLCOUNT, (unsigned)
ext_bool_count) != ext_bool_count) {
returnDB(TGETENT_NO);
}
}
even_boundary(ext_bool_count);
TR(TRACE_DATABASE, ("READ %d extended-numbers @%d",
ext_num_count, offset));
if ((ptr->ext_Numbers = UShort(ext_num_count)) != 0) {
if (!read_numbers(buf, ext_num_count)) {
returnDB(TGETENT_NO);
}
TR(TRACE_DATABASE, ("Before converting extended-numbers"));
convert_numbers(buf, ptr->Numbers + NUMCOUNT, ext_num_count);
}
TR(TRACE_DATABASE, ("READ extended-offsets @%d", offset));
if ((ext_str_count + (int) need) >= (max_entry_size / 2)) {
returnDB(TGETENT_NO);
}
if ((ext_str_count || need)
&& !read_shorts(buf, ext_str_count + (int) need)) {
returnDB(TGETENT_NO);
}
TR(TRACE_DATABASE, ("READ %d bytes of extended-strings @%d",
ext_str_limit, offset));
if (ext_str_limit) {
ptr->ext_str_table = typeMalloc(char, (size_t) ext_str_limit);
if (ptr->ext_str_table == 0) {
returnDB(TGETENT_NO);
}
if (Read(ptr->ext_str_table, (unsigned) ext_str_limit) != ext_str_limit) {
returnDB(TGETENT_NO);
}
TR(TRACE_DATABASE, ("first extended-string is %s", _nc_visbuf(ptr->ext_str_table)));
}
if ((ptr->ext_Strings = UShort(ext_str_count)) != 0) {
int check = (ext_bool_count + ext_num_count + ext_str_count);
TR(TRACE_DATABASE,
("Before computing extended-string capabilities "
"str_count=%d, ext_str_count=%d",
str_count, ext_str_count));
convert_strings(buf, ptr->Strings + str_count, ext_str_count,
ext_str_limit, ptr->ext_str_table);
for (i = ext_str_count - 1; i >= 0; i--) {
TR(TRACE_DATABASE, ("MOVE from [%d:%d] %s",
i, i + str_count,
_nc_visbuf(ptr->Strings[i + str_count])));
ptr->Strings[i + STRCOUNT] = ptr->Strings[i + str_count];
if (VALID_STRING(ptr->Strings[i + STRCOUNT])) {
base += (int) (strlen(ptr->Strings[i + STRCOUNT]) + 1);
++check;
}
TR(TRACE_DATABASE, ("... to [%d] %s",
i + STRCOUNT,
_nc_visbuf(ptr->Strings[i + STRCOUNT])));
}
TR(TRACE_DATABASE, ("Check table-size: %d/%d", check, ext_str_usage));
#if 0
/*
* Phasing in a proper check will be done "later".
*/
if (check != ext_str_usage)
returnDB(TGETENT_NO);
#endif
}
if (need) {
if (ext_str_count >= (max_entry_size / 2)) {
returnDB(TGETENT_NO);
}
if ((ptr->ext_Names = TYPE_CALLOC(char *, need)) == 0) {
returnDB(TGETENT_NO);
}
TR(TRACE_DATABASE,
("ext_NAMES starting @%d in extended_strings, first = %s",
base, _nc_visbuf(ptr->ext_str_table + base)));
convert_strings(buf + (2 * ext_str_count),
ptr->ext_Names,
(int) need,
ext_str_limit, ptr->ext_str_table + base);
}
TR(TRACE_DATABASE,
("...done reading terminfo bool %d(%d) num %d(%d) str %d(%d)",
ptr->num_Booleans, ptr->ext_Booleans,
ptr->num_Numbers, ptr->ext_Numbers,
ptr->num_Strings, ptr->ext_Strings));
TR(TRACE_DATABASE, ("extend: num_Booleans:%d", ptr->num_Booleans));
} else
#endif /* NCURSES_XNAMES */
{
TR(TRACE_DATABASE, ("...done reading terminfo bool %d num %d str %d",
bool_count, num_count, str_count));
#if NCURSES_XNAMES
TR(TRACE_DATABASE, ("normal: num_Booleans:%d", ptr->num_Booleans));
#endif
}
for (i = bool_count; i < BOOLCOUNT; i++)
ptr->Booleans[i] = FALSE;
for (i = num_count; i < NUMCOUNT; i++)
ptr->Numbers[i] = ABSENT_NUMERIC;
for (i = str_count; i < STRCOUNT; i++)
ptr->Strings[i] = ABSENT_STRING;
returnDB(TGETENT_YES);
}
/*
* int
* _nc_read_file_entry(filename, ptr)
*
* Read the compiled terminfo entry in the given file into the
* structure pointed to by ptr, allocating space for the string
* table.
*/
NCURSES_EXPORT(int)
_nc_read_file_entry(const char *const filename, TERMTYPE2 *ptr)
/* return 1 if read, 0 if not found or garbled */
{
FILE *fp = 0;
int code;
if (_nc_access(filename, R_OK) < 0
|| (fp = fopen(filename, BIN_R)) == 0) {
TR(TRACE_DATABASE, ("cannot open terminfo %s (errno=%d)", filename, errno));
code = TGETENT_NO;
} else {
int limit;
char buffer[MAX_ENTRY_SIZE + 1];
if ((limit = (int) fread(buffer, sizeof(char), sizeof(buffer), fp))
> 0) {
TR(TRACE_DATABASE, ("read terminfo %s", filename));
if ((code = _nc_read_termtype(ptr, buffer, limit)) == TGETENT_NO) {
_nc_free_termtype2(ptr);
}
} else {
code = TGETENT_NO;
}
fclose(fp);
}
return (code);
}
#if USE_HASHED_DB
/*
* Return if if we can build the filename of a ".db" file.
*/
static bool
make_db_filename(char *filename, unsigned limit, const char *const path)
{
static const char suffix[] = DBM_SUFFIX;
size_t lens = sizeof(suffix) - 1;
size_t size = strlen(path);
size_t test = lens + size;
bool result = FALSE;
if (test < limit) {
if (size >= lens
&& !strcmp(path + size - lens, suffix))
_nc_STRCPY(filename, path, limit);
else
_nc_SPRINTF(filename, _nc_SLIMIT(limit) "%s%s", path, suffix);
result = TRUE;
}
return result;
}
#endif
/*
* Return true if we can build the name of a filesystem entry.
*/
static bool
make_dir_filename(char *filename,
unsigned limit,
const char *const path,
const char *name)
{
bool result = FALSE;
#if NCURSES_USE_TERMCAP
if (_nc_is_dir_path(path))
#endif
{
unsigned need = (unsigned) (LEAF_LEN + 3 + strlen(path) + strlen(name));
if (need <= limit) {
_nc_SPRINTF(filename, _nc_SLIMIT(limit)
"%s/" LEAF_FMT "/%s", path, *name, name);
result = TRUE;
}
}
return result;
}
static int
lookup_b64(int *target, const char **source)
{
int result = 3;
int j;
/*
* ncurses' quickdump writes only RFC 4648 "url/filename-safe" encoding,
* but accepts RFC-3548
*/
for (j = 0; j < 4; ++j) {
int ch = UChar(**source);
*source += 1;
if (ch >= 'A' && ch <= 'Z') {
target[j] = (ch - 'A');
} else if (ch >= 'a' && ch <= 'z') {
target[j] = 26 + (ch - 'a');
} else if (ch >= '0' && ch <= '9') {
target[j] = 52 + (ch - '0');
} else if (ch == '-' || ch == '+') {
target[j] = 62;
} else if (ch == '_' || ch == '/') {
target[j] = 63;
} else if (ch == '=') {
target[j] = 64;
result--;
} else {
result = -1;
break;
}
}
return result;
}
static int
decode_hex(const char **source)
{
int result = 0;
int nibble;
- int ch;
for (nibble = 0; nibble < 2; ++nibble) {
+ int ch = UChar(**source);
result <<= 4;
- ch = UChar(**source);
*source += 1;
if (ch >= '0' && ch <= '9') {
ch -= '0';
} else if (ch >= 'A' && ch <= 'F') {
ch -= 'A';
ch += 10;
} else if (ch >= 'a' && ch <= 'f') {
ch -= 'a';
ch += 10;
} else {
result = -1;
break;
}
result |= ch;
}
return result;
}
static int
decode_quickdump(char *target, const char *source)
{
char *base = target;
int result = 0;
if (!strncmp(source, "b64:", (size_t) 4)) {
source += 4;
while (*source != '\0') {
int bits[4];
int ch = lookup_b64(bits, &source);
if (ch < 0 || (ch + target - base) >= MAX_ENTRY_SIZE) {
result = 0;
break;
}
result += ch;
*target++ = (char) ((bits[0] << 2) | (bits[1] >> 4));
if (bits[2] < 64) {
*target++ = (char) ((bits[1] << 4) | (bits[2] >> 2));
if (bits[3] < 64) {
*target++ = (char) ((bits[2] << 6) | bits[3]);
}
}
}
} else if (!strncmp(source, "hex:", (size_t) 4)) {
source += 4;
while (*source != '\0') {
int ch = decode_hex(&source);
if (ch < 0 || (target - base) >= MAX_ENTRY_SIZE) {
result = 0;
break;
}
*target++ = (char) ch;
++result;
}
}
return result;
}
/*
* Build a terminfo pathname and try to read the data. Returns TGETENT_YES on
* success, TGETENT_NO on failure.
*/
static int
_nc_read_tic_entry(char *filename,
unsigned limit,
const char *const path,
const char *name,
TERMTYPE2 *const tp)
{
int code = TGETENT_NO;
#if USE_HASHED_DB
DB *capdbp;
#endif
char buffer[MAX_ENTRY_SIZE + 1];
int used;
TR(TRACE_DATABASE,
(T_CALLED("_nc_read_tic_entry(file=%p, path=%s, name=%s)"),
filename, path, name));
assert(TGETENT_YES == TRUE); /* simplify call for _nc_name_match */
if ((used = decode_quickdump(buffer, path)) != 0
&& (code = _nc_read_termtype(tp, buffer, used)) == TGETENT_YES
&& (code = _nc_name_match(tp->term_names, name, "|")) == TGETENT_YES) {
TR(TRACE_DATABASE, ("loaded quick-dump for %s", name));
/* shorten name shown by infocmp */
_nc_STRCPY(filename, "$TERMINFO", limit);
} else
#if USE_HASHED_DB
if (make_db_filename(filename, limit, path)
&& (capdbp = _nc_db_open(filename, FALSE)) != 0) {
DBT key, data;
int reccnt = 0;
char *save = strdup(name);
memset(&key, 0, sizeof(key));
key.data = save;
key.size = strlen(save);
/*
* This lookup could return termcap data, which we do not want. We are
* looking for compiled (binary) terminfo data.
*
* cgetent uses a two-level lookup. On the first it uses the given
* name to return a record containing only the aliases for an entry.
* On the second (using that list of aliases as a key), it returns the
* content of the terminal description. We expect second lookup to
* return data beginning with the same set of aliases.
*
* For compiled terminfo, the list of aliases in the second case will
* be null-terminated. A termcap entry will not be, and will run on
* into the description. So we can easily distinguish between the two
* (source/binary) by checking the lengths.
*/
while (_nc_db_get(capdbp, &key, &data) == 0) {
char *have = (char *) data.data;
used = (int) data.size - 1;
if (*have++ == 0) {
if (data.size > key.size
&& IS_TIC_MAGIC(have)) {
code = _nc_read_termtype(tp, have, used);
if (code == TGETENT_NO) {
_nc_free_termtype2(tp);
}
}
break;
}
/*
* Just in case we have a corrupt database, do not waste time with
* it.
*/
if (++reccnt >= 3)
break;
/*
* Prepare for the second level.
*/
key.data = have;
key.size = used;
}
free(save);
} else /* may be either filesystem or flat file */
#endif
if (make_dir_filename(filename, limit, path, name)) {
code = _nc_read_file_entry(filename, tp);
}
#if NCURSES_USE_TERMCAP
if (code != TGETENT_YES) {
code = _nc_read_termcap_entry(name, tp);
_nc_SPRINTF(filename, _nc_SLIMIT(PATH_MAX)
"%.*s", PATH_MAX - 1, _nc_get_source());
}
#endif
returnDB(code);
}
#endif /* NCURSES_USE_DATABASE */
/*
* Find and read the compiled entry for a given terminal type, if it exists.
* We take pains here to make sure no combination of environment variables and
* terminal type name can be used to overrun the file buffer.
*/
NCURSES_EXPORT(int)
_nc_read_entry2(const char *const name, char *const filename, TERMTYPE2 *const tp)
{
int code = TGETENT_NO;
if (name == 0)
return _nc_read_entry2("", filename, tp);
_nc_SPRINTF(filename, _nc_SLIMIT(PATH_MAX)
"%.*s", PATH_MAX - 1, name);
if (strlen(name) == 0
|| strcmp(name, ".") == 0
|| strcmp(name, "..") == 0
|| _nc_pathlast(name) != 0
|| strchr(name, NCURSES_PATHSEP) != 0) {
TR(TRACE_DATABASE, ("illegal or missing entry name '%s'", name));
} else {
#if NCURSES_USE_DATABASE
DBDIRS state;
int offset;
const char *path;
_nc_first_db(&state, &offset);
code = TGETENT_ERR;
while ((path = _nc_next_db(&state, &offset)) != 0) {
code = _nc_read_tic_entry(filename, PATH_MAX, path, name, tp);
if (code == TGETENT_YES) {
_nc_last_db();
break;
}
}
#elif NCURSES_USE_TERMCAP
if (code != TGETENT_YES) {
code = _nc_read_termcap_entry(name, tp);
_nc_SPRINTF(filename, _nc_SLIMIT(PATH_MAX)
"%.*s", PATH_MAX - 1, _nc_get_source());
}
#endif
}
return code;
}
#if NCURSES_EXT_NUMBERS
/*
* This entrypoint is used by tack 1.07
*/
NCURSES_EXPORT(int)
_nc_read_entry(const char *const name, char *const filename, TERMTYPE *const tp)
{
TERMTYPE2 dummy;
int rc;
rc = _nc_read_entry2(name, filename, &dummy);
if (rc == TGETENT_YES)
_nc_export_termtype2(tp, &dummy);
return rc;
}
#endif
diff --git a/contrib/ncurses/ncurses/tinfo/tinfo_driver.c b/contrib/ncurses/ncurses/tinfo/tinfo_driver.c
index 7919a9b09276..c28d76415549 100644
--- a/contrib/ncurses/ncurses/tinfo/tinfo_driver.c
+++ b/contrib/ncurses/ncurses/tinfo/tinfo_driver.c
@@ -1,1454 +1,1559 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 2008-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer *
* and: Thomas E. Dickey *
****************************************************************************/
#include <curses.priv.h>
#define CUR TerminalType((TERMINAL*)TCB).
#include <tic.h>
#include <termcap.h> /* ospeed */
#if HAVE_NANOSLEEP
#include <time.h>
#if HAVE_SYS_TIME_H
#include <sys/time.h> /* needed for MacOS X DP3 */
#endif
#endif
#if HAVE_SIZECHANGE
# if !defined(sun) || !TERMIOS
# if HAVE_SYS_IOCTL_H
# include <sys/ioctl.h>
# endif
# endif
#endif
-MODULE_ID("$Id: tinfo_driver.c,v 1.67 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: tinfo_driver.c,v 1.71 2020/12/12 01:06:40 tom Exp $")
/*
* SCO defines TIOCGSIZE and the corresponding struct. Other systems (SunOS,
* Solaris, IRIX) define TIOCGWINSZ and struct winsize.
*/
#ifdef TIOCGSIZE
# define IOCTL_WINSIZE TIOCGSIZE
# define STRUCT_WINSIZE struct ttysize
# define WINSIZE_ROWS(n) (int)n.ts_lines
# define WINSIZE_COLS(n) (int)n.ts_cols
#else
# ifdef TIOCGWINSZ
# define IOCTL_WINSIZE TIOCGWINSZ
# define STRUCT_WINSIZE struct winsize
# define WINSIZE_ROWS(n) (int)n.ws_row
# define WINSIZE_COLS(n) (int)n.ws_col
# endif
#endif
/*
* These should be screen structure members. They need to be globals for
* historical reasons. So we assign them in start_color() and also in
* set_term()'s screen-switching logic.
*/
#if USE_REENTRANT
NCURSES_EXPORT(int)
NCURSES_PUBLIC_VAR(COLOR_PAIRS) (void)
{
return CURRENT_SCREEN ? CURRENT_SCREEN->_pair_count : -1;
}
NCURSES_EXPORT(int)
NCURSES_PUBLIC_VAR(COLORS) (void)
{
return CURRENT_SCREEN ? CURRENT_SCREEN->_color_count : -1;
}
#else
NCURSES_EXPORT_VAR(int) COLOR_PAIRS = 0;
NCURSES_EXPORT_VAR(int) COLORS = 0;
#endif
#define TCBMAGIC NCDRV_MAGIC(NCDRV_TINFO)
#define AssertTCB() assert(TCB!=0 && TCB->magic==TCBMAGIC)
#define SetSP() assert(TCB->csp!=0); sp = TCB->csp; (void) sp
/*
* This routine needs to do all the work to make curscr look
* like newscr.
*/
static int
drv_doupdate(TERMINAL_CONTROL_BLOCK * TCB)
{
AssertTCB();
return TINFO_DOUPDATE(TCB->csp);
}
static const char *
drv_Name(TERMINAL_CONTROL_BLOCK * TCB)
{
(void) TCB;
return "tinfo";
}
static void
get_baudrate(TERMINAL *termp)
{
int my_ospeed;
int result;
if (GET_TTY(termp->Filedes, &termp->Nttyb) == OK) {
#ifdef TERMIOS
termp->Nttyb.c_oflag &= (unsigned) (~OFLAGS_TABS);
+#elif defined(EXP_WIN32_DRIVER)
+ /* noop */
#else
termp->Nttyb.sg_flags &= (unsigned) (~XTABS);
#endif
}
#ifdef USE_OLD_TTY
result = (int) cfgetospeed(&(termp->Nttyb));
my_ospeed = (NCURSES_OSPEED) _nc_ospeed(result);
#else /* !USE_OLD_TTY */
#ifdef TERMIOS
my_ospeed = (NCURSES_OSPEED) cfgetospeed(&(termp->Nttyb));
+#elif defined(EXP_WIN32_DRIVER)
+ /* noop */
+ my_ospeed = 0;
#else
my_ospeed = (NCURSES_OSPEED) termp->Nttyb.sg_ospeed;
#endif
result = _nc_baudrate(my_ospeed);
#endif
termp->_baudrate = result;
ospeed = (NCURSES_OSPEED) my_ospeed;
}
#undef SETUP_FAIL
#define SETUP_FAIL FALSE
#define NO_COPY {}
static bool
drv_CanHandle(TERMINAL_CONTROL_BLOCK * TCB, const char *tname, int *errret)
{
bool result = FALSE;
int status;
TERMINAL *termp;
SCREEN *sp;
START_TRACE();
T((T_CALLED("tinfo::drv_CanHandle(%p)"), (void *) TCB));
assert(TCB != 0 && tname != 0);
termp = (TERMINAL *) TCB;
sp = TCB->csp;
TCB->magic = TCBMAGIC;
#if (NCURSES_USE_DATABASE || NCURSES_USE_TERMCAP)
status = _nc_setup_tinfo(tname, &TerminalType(termp));
T(("_nc_setup_tinfo returns %d", status));
#else
T(("no database available"));
status = TGETENT_NO;
#endif
/* try fallback list if entry on disk */
if (status != TGETENT_YES) {
const TERMTYPE2 *fallback = _nc_fallback2(tname);
if (fallback) {
T(("found fallback entry"));
TerminalType(termp) = *fallback;
status = TGETENT_YES;
}
}
if (status != TGETENT_YES) {
NCURSES_SP_NAME(del_curterm) (NCURSES_SP_ARGx termp);
if (status == TGETENT_ERR) {
ret_error0(status, "terminals database is inaccessible\n");
} else if (status == TGETENT_NO) {
ret_error1(status, "unknown terminal type.\n",
tname, NO_COPY);
} else {
ret_error0(status, "unexpected return-code\n");
}
}
result = TRUE;
#if NCURSES_EXT_NUMBERS
_nc_export_termtype2(&termp->type, &TerminalType(termp));
#endif
#if !USE_REENTRANT
save_ttytype(termp);
#endif
if (command_character)
_nc_tinfo_cmdch(termp, *command_character);
/*
* If an application calls setupterm() rather than initscr() or
* newterm(), we will not have the def_prog_mode() call in
* _nc_setupscreen(). Do it now anyway, so we can initialize the
* baudrate.
*/
if (sp == 0 && NC_ISATTY(termp->Filedes)) {
get_baudrate(termp);
}
#if NCURSES_EXT_NUMBERS
#define cleanup_termtype() \
_nc_free_termtype2(&TerminalType(termp)); \
_nc_free_termtype(&termp->type)
#else
#define cleanup_termtype() \
_nc_free_termtype2(&TerminalType(termp))
#endif
if (generic_type) {
/*
* BSD 4.3's termcap contains mis-typed "gn" for wy99. Do a sanity
* check before giving up.
*/
if ((VALID_STRING(cursor_address)
|| (VALID_STRING(cursor_down) && VALID_STRING(cursor_home)))
&& VALID_STRING(clear_screen)) {
cleanup_termtype();
ret_error1(TGETENT_YES, "terminal is not really generic.\n",
tname, NO_COPY);
} else {
cleanup_termtype();
ret_error1(TGETENT_NO, "I need something more specific.\n",
tname, NO_COPY);
}
}
if (hard_copy) {
cleanup_termtype();
ret_error1(TGETENT_YES, "I can't handle hardcopy terminals.\n",
tname, NO_COPY);
}
returnBool(result);
}
static int
drv_dobeepflash(TERMINAL_CONTROL_BLOCK * TCB, int beepFlag)
{
SCREEN *sp;
int res = ERR;
AssertTCB();
SetSP();
/* FIXME: should make sure that we are not in altchar mode */
if (beepFlag) {
if (bell) {
res = NCURSES_PUTP2("bell", bell);
NCURSES_SP_NAME(_nc_flush) (sp);
} else if (flash_screen) {
res = NCURSES_PUTP2("flash_screen", flash_screen);
NCURSES_SP_NAME(_nc_flush) (sp);
}
} else {
if (flash_screen) {
res = NCURSES_PUTP2("flash_screen", flash_screen);
NCURSES_SP_NAME(_nc_flush) (sp);
} else if (bell) {
res = NCURSES_PUTP2("bell", bell);
NCURSES_SP_NAME(_nc_flush) (sp);
}
}
return res;
}
/*
* SVr4 curses is known to interchange color codes (1,4) and (3,6), possibly
* to maintain compatibility with a pre-ANSI scheme. The same scheme is
* also used in the FreeBSD syscons.
*/
static int
toggled_colors(int c)
{
if (c < 16) {
static const int table[] =
{0, 4, 2, 6, 1, 5, 3, 7,
8, 12, 10, 14, 9, 13, 11, 15};
c = table[c];
}
return c;
}
static int
drv_print(TERMINAL_CONTROL_BLOCK * TCB, char *data, int len)
{
SCREEN *sp;
AssertTCB();
SetSP();
#if NCURSES_EXT_FUNCS
return NCURSES_SP_NAME(mcprint) (TCB->csp, data, len);
#else
return ERR;
#endif
}
static int
drv_defaultcolors(TERMINAL_CONTROL_BLOCK * TCB, int fg, int bg)
{
SCREEN *sp;
int code = ERR;
AssertTCB();
SetSP();
if (sp != 0 && orig_pair && orig_colors && (initialize_pair != 0)) {
#if NCURSES_EXT_FUNCS
sp->_default_color = isDefaultColor(fg) || isDefaultColor(bg);
sp->_has_sgr_39_49 = (NCURSES_SP_NAME(tigetflag) (NCURSES_SP_ARGx
"AX")
== TRUE);
sp->_default_fg = isDefaultColor(fg) ? COLOR_DEFAULT : fg;
sp->_default_bg = isDefaultColor(bg) ? COLOR_DEFAULT : bg;
if (sp->_color_pairs != 0) {
bool save = sp->_default_color;
sp->_default_color = TRUE;
NCURSES_SP_NAME(init_pair) (NCURSES_SP_ARGx
0,
(short)fg,
(short)bg);
sp->_default_color = save;
}
#endif
code = OK;
}
return (code);
}
static void
drv_setcolor(TERMINAL_CONTROL_BLOCK * TCB,
int fore,
int color,
NCURSES_SP_OUTC outc)
{
SCREEN *sp;
AssertTCB();
SetSP();
if (fore) {
if (set_a_foreground) {
TPUTS_TRACE("set_a_foreground");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(set_a_foreground, color), 1, outc);
+ TIPARM_1(set_a_foreground, color), 1, outc);
} else {
TPUTS_TRACE("set_foreground");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(set_foreground,
- toggled_colors(color)), 1, outc);
+ TIPARM_1(set_foreground,
+ toggled_colors(color)), 1, outc);
}
} else {
if (set_a_background) {
TPUTS_TRACE("set_a_background");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(set_a_background, color), 1, outc);
+ TIPARM_1(set_a_background, color), 1, outc);
} else {
TPUTS_TRACE("set_background");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(set_background,
- toggled_colors(color)), 1, outc);
+ TIPARM_1(set_background,
+ toggled_colors(color)), 1, outc);
}
}
}
static bool
drv_rescol(TERMINAL_CONTROL_BLOCK * TCB)
{
bool result = FALSE;
SCREEN *sp;
AssertTCB();
SetSP();
if (orig_pair != 0) {
NCURSES_PUTP2("orig_pair", orig_pair);
result = TRUE;
}
return result;
}
static bool
drv_rescolors(TERMINAL_CONTROL_BLOCK * TCB)
{
int result = FALSE;
SCREEN *sp;
AssertTCB();
SetSP();
if (orig_colors != 0) {
NCURSES_PUTP2("orig_colors", orig_colors);
result = TRUE;
}
return result;
}
static int
drv_size(TERMINAL_CONTROL_BLOCK * TCB, int *linep, int *colp)
{
SCREEN *sp;
bool useEnv = TRUE;
bool useTioctl = TRUE;
AssertTCB();
sp = TCB->csp; /* can be null here */
if (sp) {
useEnv = sp->_use_env;
useTioctl = sp->use_tioctl;
} else {
useEnv = _nc_prescreen.use_env;
useTioctl = _nc_prescreen.use_tioctl;
}
+#ifdef EXP_WIN32_DRIVER
+ /* If we are here, then Windows console is used in terminfo mode.
+ We need to figure out the size using the console API
+ */
+ _nc_console_size(linep, colp);
+ T(("screen size: winconsole lines = %d columns = %d", *linep, *colp));
+#else
/* figure out the size of the screen */
T(("screen size: terminfo lines = %d columns = %d", lines, columns));
*linep = (int) lines;
*colp = (int) columns;
-
+#endif
if (useEnv || useTioctl) {
int value;
#ifdef __EMX__
{
int screendata[2];
_scrsize(screendata);
*colp = screendata[0];
*linep = ((sp != 0 && sp->_filtered)
? 1
: screendata[1]);
T(("EMX screen size: environment LINES = %d COLUMNS = %d",
*linep, *colp));
}
#endif
#if HAVE_SIZECHANGE
/* try asking the OS */
{
TERMINAL *termp = (TERMINAL *) TCB;
if (NC_ISATTY(termp->Filedes)) {
STRUCT_WINSIZE size;
errno = 0;
do {
if (ioctl(termp->Filedes, IOCTL_WINSIZE, &size) >= 0) {
*linep = ((sp != 0 && sp->_filtered)
? 1
: WINSIZE_ROWS(size));
*colp = WINSIZE_COLS(size);
T(("SYS screen size: environment LINES = %d COLUMNS = %d",
*linep, *colp));
break;
}
} while
(errno == EINTR);
}
}
#endif /* HAVE_SIZECHANGE */
if (useEnv) {
if (useTioctl) {
/*
* If environment variables are used, update them.
*/
if ((sp == 0 || !sp->_filtered) && _nc_getenv_num("LINES") > 0) {
_nc_setenv_num("LINES", *linep);
}
if (_nc_getenv_num("COLUMNS") > 0) {
_nc_setenv_num("COLUMNS", *colp);
}
}
/*
* Finally, look for environment variables.
*
* Solaris lets users override either dimension with an environment
* variable.
*/
if ((value = _nc_getenv_num("LINES")) > 0) {
*linep = value;
T(("screen size: environment LINES = %d", *linep));
}
if ((value = _nc_getenv_num("COLUMNS")) > 0) {
*colp = value;
T(("screen size: environment COLUMNS = %d", *colp));
}
}
/* if we can't get dynamic info about the size, use static */
if (*linep <= 0) {
*linep = (int) lines;
}
if (*colp <= 0) {
*colp = (int) columns;
}
/* the ultimate fallback, assume fixed 24x80 size */
if (*linep <= 0) {
*linep = 24;
}
if (*colp <= 0) {
*colp = 80;
}
/*
* Put the derived values back in the screen-size caps, so
* tigetnum() and tgetnum() will do the right thing.
*/
lines = (short) (*linep);
columns = (short) (*colp);
}
T(("screen size is %dx%d", *linep, *colp));
return OK;
}
static int
drv_getsize(TERMINAL_CONTROL_BLOCK * TCB, int *l, int *c)
{
AssertTCB();
assert(l != 0 && c != 0);
*l = lines;
*c = columns;
return OK;
}
static int
drv_setsize(TERMINAL_CONTROL_BLOCK * TCB, int l, int c)
{
AssertTCB();
lines = (short) l;
columns = (short) c;
return OK;
}
static int
drv_sgmode(TERMINAL_CONTROL_BLOCK * TCB, int setFlag, TTY * buf)
{
SCREEN *sp = TCB->csp;
TERMINAL *_term = (TERMINAL *) TCB;
int result = OK;
AssertTCB();
if (setFlag) {
for (;;) {
if (SET_TTY(_term->Filedes, buf) != 0) {
if (errno == EINTR)
continue;
if (errno == ENOTTY) {
if (sp)
sp->_notty = TRUE;
}
result = ERR;
}
break;
}
} else {
for (;;) {
if (GET_TTY(_term->Filedes, buf) != 0) {
if (errno == EINTR)
continue;
result = ERR;
}
break;
}
}
return result;
}
static int
drv_mode(TERMINAL_CONTROL_BLOCK * TCB, int progFlag, int defFlag)
{
SCREEN *sp;
TERMINAL *_term = (TERMINAL *) TCB;
int code = ERR;
AssertTCB();
sp = TCB->csp;
if (progFlag) /* prog mode */
{
if (defFlag) {
/* def_prog_mode */
/*
* Turn off the XTABS bit in the tty structure if it was on.
*/
if ((drv_sgmode(TCB, FALSE, &(_term->Nttyb)) == OK)) {
#ifdef TERMIOS
_term->Nttyb.c_oflag &= (unsigned) ~OFLAGS_TABS;
+#elif defined(EXP_WIN32_DRIVER)
+ /* noop */
#else
_term->Nttyb.sg_flags &= (unsigned) ~XTABS;
#endif
code = OK;
}
} else {
/* reset_prog_mode */
if (drv_sgmode(TCB, TRUE, &(_term->Nttyb)) == OK) {
if (sp) {
if (sp->_keypad_on)
_nc_keypad(sp, TRUE);
}
code = OK;
}
}
} else { /* shell mode */
if (defFlag) {
/* def_shell_mode */
/*
* If XTABS was on, remove the tab and backtab capabilities.
*/
if (drv_sgmode(TCB, FALSE, &(_term->Ottyb)) == OK) {
#ifdef TERMIOS
if (_term->Ottyb.c_oflag & OFLAGS_TABS)
tab = back_tab = NULL;
+#elif defined(EXP_WIN32_DRIVER)
+ /* noop */
#else
if (_term->Ottyb.sg_flags & XTABS)
tab = back_tab = NULL;
#endif
code = OK;
}
} else {
/* reset_shell_mode */
if (sp) {
_nc_keypad(sp, FALSE);
NCURSES_SP_NAME(_nc_flush) (sp);
}
code = drv_sgmode(TCB, TRUE, &(_term->Ottyb));
}
}
return (code);
}
static void
drv_wrap(SCREEN *sp)
{
if (sp) {
sp->_mouse_wrap(sp);
NCURSES_SP_NAME(_nc_screen_wrap) (sp);
NCURSES_SP_NAME(_nc_mvcur_wrap) (sp); /* wrap up cursor addressing */
}
}
static void
drv_release(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED)
{
}
# define SGR0_TEST(mode) (mode != 0) && (exit_attribute_mode == 0 || strcmp(mode, exit_attribute_mode))
static void
drv_screen_init(SCREEN *sp)
{
TERMINAL_CONTROL_BLOCK *TCB = TCBOf(sp);
AssertTCB();
/*
* Check for mismatched graphic-rendition capabilities. Most SVr4
* terminfo trees contain entries that have rmul or rmso equated to
* sgr0 (Solaris curses copes with those entries). We do this only
* for curses, since many termcap applications assume that
* smso/rmso and smul/rmul are paired, and will not function
* properly if we remove rmso or rmul. Curses applications
* shouldn't be looking at this detail.
*/
sp->_use_rmso = SGR0_TEST(exit_standout_mode);
sp->_use_rmul = SGR0_TEST(exit_underline_mode);
/*
* Check whether we can optimize scrolling under dumb terminals in
* case we do not have any of these capabilities, scrolling
* optimization will be useless.
*/
sp->_scrolling = ((scroll_forward && scroll_reverse) ||
((parm_rindex ||
parm_insert_line ||
insert_line) &&
(parm_index ||
parm_delete_line ||
delete_line)));
NCURSES_SP_NAME(baudrate) (sp);
NCURSES_SP_NAME(_nc_mvcur_init) (sp);
/* initialize terminal to a sane state */
NCURSES_SP_NAME(_nc_screen_init) (sp);
}
static void
drv_init(TERMINAL_CONTROL_BLOCK * TCB)
{
TERMINAL *trm;
AssertTCB();
trm = (TERMINAL *) TCB;
TCB->info.initcolor = VALID_STRING(initialize_color);
TCB->info.canchange = can_change;
TCB->info.hascolor = ((VALID_NUMERIC(max_colors) && VALID_NUMERIC(max_pairs)
&& (((set_foreground != NULL)
&& (set_background != NULL))
|| ((set_a_foreground != NULL)
&& (set_a_background != NULL))
|| set_color_pair)) ? TRUE : FALSE);
TCB->info.caninit = !(exit_ca_mode && non_rev_rmcup);
TCB->info.maxpairs = VALID_NUMERIC(max_pairs) ? max_pairs : 0;
TCB->info.maxcolors = VALID_NUMERIC(max_colors) ? max_colors : 0;
TCB->info.numlabels = VALID_NUMERIC(num_labels) ? num_labels : 0;
TCB->info.labelwidth = VALID_NUMERIC(label_width) ? label_width : 0;
TCB->info.labelheight = VALID_NUMERIC(label_height) ? label_height : 0;
TCB->info.nocolorvideo = VALID_NUMERIC(no_color_video) ? no_color_video
: 0;
TCB->info.tabsize = VALID_NUMERIC(init_tabs) ? (int) init_tabs : 8;
TCB->info.defaultPalette = hue_lightness_saturation ? _nc_hls_palette : _nc_cga_palette;
/*
* If an application calls setupterm() rather than initscr() or
* newterm(), we will not have the def_prog_mode() call in
* _nc_setupscreen(). Do it now anyway, so we can initialize the
* baudrate.
*/
if (NC_ISATTY(trm->Filedes)) {
TCB->drv->td_mode(TCB, TRUE, TRUE);
}
}
#define MAX_PALETTE 8
#define InPalette(n) ((n) >= 0 && (n) < MAX_PALETTE)
static void
drv_initpair(TERMINAL_CONTROL_BLOCK * TCB, int pair, int f, int b)
{
SCREEN *sp;
AssertTCB();
SetSP();
if ((initialize_pair != NULL) && InPalette(f) && InPalette(b)) {
const color_t *tp = InfoOf(sp).defaultPalette;
TR(TRACE_ATTRS,
("initializing pair: pair = %d, fg=(%d,%d,%d), bg=(%d,%d,%d)",
pair,
tp[f].red, tp[f].green, tp[f].blue,
tp[b].red, tp[b].green, tp[b].blue));
NCURSES_PUTP2("initialize_pair",
- TPARM_7(initialize_pair,
- pair,
- tp[f].red, tp[f].green, tp[f].blue,
- tp[b].red, tp[b].green, tp[b].blue));
+ TIPARM_7(initialize_pair,
+ pair,
+ tp[f].red, tp[f].green, tp[f].blue,
+ tp[b].red, tp[b].green, tp[b].blue));
}
}
static int
default_fg(SCREEN *sp)
{
#if NCURSES_EXT_FUNCS
return (sp != 0) ? sp->_default_fg : COLOR_WHITE;
#else
return COLOR_WHITE;
#endif
}
static int
default_bg(SCREEN *sp)
{
#if NCURSES_EXT_FUNCS
return sp != 0 ? sp->_default_bg : COLOR_BLACK;
#else
return COLOR_BLACK;
#endif
}
static void
drv_initcolor(TERMINAL_CONTROL_BLOCK * TCB,
int color, int r, int g, int b)
{
SCREEN *sp = TCB->csp;
AssertTCB();
if (initialize_color != NULL) {
NCURSES_PUTP2("initialize_color",
- TPARM_4(initialize_color, color, r, g, b));
+ TIPARM_4(initialize_color, color, r, g, b));
}
}
static void
drv_do_color(TERMINAL_CONTROL_BLOCK * TCB,
int old_pair,
int pair,
int reverse,
NCURSES_SP_OUTC outc)
{
SCREEN *sp = TCB->csp;
int fg = COLOR_DEFAULT;
int bg = COLOR_DEFAULT;
int old_fg, old_bg;
AssertTCB();
if (sp == 0)
return;
if (pair < 0 || pair >= COLOR_PAIRS) {
return;
} else if (pair != 0) {
if (set_color_pair) {
TPUTS_TRACE("set_color_pair");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(set_color_pair, pair), 1, outc);
+ TIPARM_1(set_color_pair, pair), 1, outc);
return;
} else if (sp != 0) {
_nc_pair_content(SP_PARM, pair, &fg, &bg);
}
}
if (old_pair >= 0
&& sp != 0
&& _nc_pair_content(SP_PARM, old_pair, &old_fg, &old_bg) != ERR) {
if ((isDefaultColor(fg) && !isDefaultColor(old_fg))
|| (isDefaultColor(bg) && !isDefaultColor(old_bg))) {
#if NCURSES_EXT_FUNCS
/*
* A minor optimization - but extension. If "AX" is specified in
* the terminal description, treat it as screen's indicator of ECMA
* SGR 39 and SGR 49, and assume the two sequences are independent.
*/
if (sp->_has_sgr_39_49
&& isDefaultColor(old_bg)
&& !isDefaultColor(old_fg)) {
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx "\033[39m", 1, outc);
} else if (sp->_has_sgr_39_49
&& isDefaultColor(old_fg)
&& !isDefaultColor(old_bg)) {
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx "\033[49m", 1, outc);
} else
#endif
drv_rescol(TCB);
}
} else {
drv_rescol(TCB);
if (old_pair < 0)
return;
}
#if NCURSES_EXT_FUNCS
if (isDefaultColor(fg))
fg = default_fg(sp);
if (isDefaultColor(bg))
bg = default_bg(sp);
#endif
if (reverse) {
int xx = fg;
fg = bg;
bg = xx;
}
TR(TRACE_ATTRS, ("setting colors: pair = %d, fg = %d, bg = %d", pair,
fg, bg));
if (!isDefaultColor(fg)) {
drv_setcolor(TCB, TRUE, fg, outc);
}
if (!isDefaultColor(bg)) {
drv_setcolor(TCB, FALSE, bg, outc);
}
}
#define xterm_kmous "\033[M"
static void
init_xterm_mouse(SCREEN *sp)
{
sp->_mouse_type = M_XTERM;
sp->_mouse_xtermcap = NCURSES_SP_NAME(tigetstr) (NCURSES_SP_ARGx "XM");
if (!VALID_STRING(sp->_mouse_xtermcap))
sp->_mouse_xtermcap = "\033[?1000%?%p1%{1}%=%th%el%;";
}
static void
drv_initmouse(TERMINAL_CONTROL_BLOCK * TCB)
{
SCREEN *sp;
AssertTCB();
SetSP();
/* we know how to recognize mouse events under "xterm" */
if (sp != 0) {
if (NonEmpty(key_mouse)) {
init_xterm_mouse(sp);
} else if (strstr(SP_TERMTYPE term_names, "xterm") != 0) {
if (_nc_add_to_try(&(sp->_keytry), xterm_kmous, KEY_MOUSE) == OK)
init_xterm_mouse(sp);
}
}
}
static int
drv_testmouse(TERMINAL_CONTROL_BLOCK * TCB,
int delay
EVENTLIST_2nd(_nc_eventlist * evl))
{
int rc = 0;
SCREEN *sp;
AssertTCB();
SetSP();
#if USE_SYSMOUSE
if ((sp->_mouse_type == M_SYSMOUSE)
&& (sp->_sysmouse_head < sp->_sysmouse_tail)) {
rc = TW_MOUSE;
} else
#endif
{
+#ifdef EXP_WIN32_DRIVER
+ rc = _nc_console_testmouse(sp,
+ _nc_console_handle(sp->_ifd),
+ delay
+ EVENTLIST_2nd(evl));
+#else
rc = TCBOf(sp)->drv->td_twait(TCBOf(sp),
TWAIT_MASK,
delay,
(int *) 0
EVENTLIST_2nd(evl));
+#endif
#if USE_SYSMOUSE
if ((sp->_mouse_type == M_SYSMOUSE)
&& (sp->_sysmouse_head < sp->_sysmouse_tail)
&& (rc == 0)
&& (errno == EINTR)) {
rc |= TW_MOUSE;
}
#endif
}
return rc;
}
static int
drv_mvcur(TERMINAL_CONTROL_BLOCK * TCB, int yold, int xold, int ynew, int xnew)
{
SCREEN *sp = TCB->csp;
AssertTCB();
return NCURSES_SP_NAME(_nc_mvcur) (sp, yold, xold, ynew, xnew);
}
static void
drv_hwlabel(TERMINAL_CONTROL_BLOCK * TCB, int labnum, char *text)
{
SCREEN *sp = TCB->csp;
AssertTCB();
if (labnum > 0 && labnum <= num_labels) {
NCURSES_PUTP2("plab_norm",
TPARM_2(plab_norm, labnum, text));
}
}
static void
drv_hwlabelOnOff(TERMINAL_CONTROL_BLOCK * TCB, int OnFlag)
{
SCREEN *sp = TCB->csp;
AssertTCB();
if (OnFlag) {
NCURSES_PUTP2("label_on", label_on);
} else {
NCURSES_PUTP2("label_off", label_off);
}
}
static chtype
drv_conattr(TERMINAL_CONTROL_BLOCK * TCB)
{
SCREEN *sp = TCB->csp;
chtype attrs = A_NORMAL;
AssertTCB();
if (enter_alt_charset_mode)
attrs |= A_ALTCHARSET;
if (enter_blink_mode)
attrs |= A_BLINK;
if (enter_bold_mode)
attrs |= A_BOLD;
if (enter_dim_mode)
attrs |= A_DIM;
if (enter_reverse_mode)
attrs |= A_REVERSE;
if (enter_standout_mode)
attrs |= A_STANDOUT;
if (enter_protected_mode)
attrs |= A_PROTECT;
if (enter_secure_mode)
attrs |= A_INVIS;
if (enter_underline_mode)
attrs |= A_UNDERLINE;
if (sp && sp->_coloron)
attrs |= A_COLOR;
#if USE_ITALIC
if (enter_italics_mode)
attrs |= A_ITALIC;
#endif
return (attrs);
}
static void
drv_setfilter(TERMINAL_CONTROL_BLOCK * TCB)
{
AssertTCB();
/* *INDENT-EQLS* */
clear_screen = ABSENT_STRING;
cursor_address = ABSENT_STRING;
cursor_down = ABSENT_STRING;
cursor_up = ABSENT_STRING;
parm_down_cursor = ABSENT_STRING;
parm_up_cursor = ABSENT_STRING;
row_address = ABSENT_STRING;
cursor_home = carriage_return;
if (back_color_erase)
clr_eos = ABSENT_STRING;
}
static void
drv_initacs(TERMINAL_CONTROL_BLOCK * TCB, chtype *real_map, chtype *fake_map)
{
SCREEN *sp = TCB->csp;
AssertTCB();
assert(sp != 0);
if (ena_acs != NULL) {
NCURSES_PUTP2("ena_acs", ena_acs);
}
#if NCURSES_EXT_FUNCS
/*
* Linux console "supports" the "PC ROM" character set by the coincidence
* that smpch/rmpch and smacs/rmacs have the same values. ncurses has
* no codepage support (see SCO Merge for an example). Outside of the
* values defined in acsc, there are no definitions for the "PC ROM"
* character set (assumed by some applications to be codepage 437), but we
* allow those applications to use those codepoints.
*
* test/blue.c uses this feature.
*/
#define PCH_KLUDGE(a,b) (a != 0 && b != 0 && !strcmp(a,b))
if (PCH_KLUDGE(enter_pc_charset_mode, enter_alt_charset_mode) &&
PCH_KLUDGE(exit_pc_charset_mode, exit_alt_charset_mode)) {
size_t i;
for (i = 1; i < ACS_LEN; ++i) {
if (real_map[i] == 0) {
real_map[i] = (chtype) i;
if (real_map != fake_map) {
if (sp != 0)
sp->_screen_acs_map[i] = TRUE;
}
}
}
}
#endif
if (acs_chars != NULL) {
size_t i = 0;
size_t length = strlen(acs_chars);
while (i + 1 < length) {
if (acs_chars[i] != 0 && UChar(acs_chars[i]) < ACS_LEN) {
real_map[UChar(acs_chars[i])] = UChar(acs_chars[i + 1]) | A_ALTCHARSET;
T(("#%d real_map[%s] = %s",
(int) i,
_tracechar(UChar(acs_chars[i])),
_tracechtype(real_map[UChar(acs_chars[i])])));
if (sp != 0) {
sp->_screen_acs_map[UChar(acs_chars[i])] = TRUE;
}
}
i += 2;
}
}
#ifdef TRACE
/* Show the equivalent mapping, noting if it does not match the
* given attribute, whether by re-ordering or duplication.
*/
if (USE_TRACEF(TRACE_CALLS)) {
size_t n, m;
char show[ACS_LEN * 2 + 1];
for (n = 1, m = 0; n < ACS_LEN; n++) {
if (real_map[n] != 0) {
show[m++] = (char) n;
show[m++] = (char) ChCharOf(real_map[n]);
}
}
show[m] = 0;
if (acs_chars == NULL || strcmp(acs_chars, show))
_tracef("%s acs_chars %s",
(acs_chars == NULL) ? "NULL" : "READ",
_nc_visbuf(acs_chars));
_tracef("%s acs_chars %s",
(acs_chars == NULL)
? "NULL"
: (strcmp(acs_chars, show)
? "DIFF"
: "SAME"),
_nc_visbuf(show));
_nc_unlock_global(tracef);
}
#endif /* TRACE */
}
#define ENSURE_TINFO(sp) (TCBOf(sp)->drv->isTerminfo)
NCURSES_EXPORT(void)
_nc_cookie_init(SCREEN *sp)
{
bool support_cookies = USE_XMC_SUPPORT;
TERMINAL_CONTROL_BLOCK *TCB = (TERMINAL_CONTROL_BLOCK *) (sp->_term);
if (sp == 0 || !ENSURE_TINFO(sp))
return;
#if USE_XMC_SUPPORT
/*
* If we have no magic-cookie support compiled-in, or if it is suppressed
* in the environment, reset the support-flag.
*/
if (magic_cookie_glitch >= 0) {
if (getenv("NCURSES_NO_MAGIC_COOKIE") != 0) {
support_cookies = FALSE;
}
}
#endif
if (!support_cookies && magic_cookie_glitch >= 0) {
T(("will disable attributes to work w/o magic cookies"));
}
if (magic_cookie_glitch > 0) { /* tvi, wyse */
sp->_xmc_triggers = sp->_ok_attributes & XMC_CONFLICT;
#if 0
/*
* We "should" treat colors as an attribute. The wyse350 (and its
* clones) appear to be the only ones that have both colors and magic
* cookies.
*/
if (has_colors()) {
sp->_xmc_triggers |= A_COLOR;
}
#endif
sp->_xmc_suppress = sp->_xmc_triggers & (chtype) ~(A_BOLD);
T(("magic cookie attributes %s", _traceattr(sp->_xmc_suppress)));
/*
* Supporting line-drawing may be possible. But make the regular
* video attributes work first.
*/
acs_chars = ABSENT_STRING;
ena_acs = ABSENT_STRING;
enter_alt_charset_mode = ABSENT_STRING;
exit_alt_charset_mode = ABSENT_STRING;
#if USE_XMC_SUPPORT
/*
* To keep the cookie support simple, suppress all of the optimization
* hooks except for clear_screen and the cursor addressing.
*/
if (support_cookies) {
clr_eol = ABSENT_STRING;
clr_eos = ABSENT_STRING;
set_attributes = ABSENT_STRING;
}
#endif
} else if (magic_cookie_glitch == 0) { /* hpterm */
}
/*
* If magic cookies are not supported, cancel the strings that set
* video attributes.
*/
if (!support_cookies && magic_cookie_glitch >= 0) {
magic_cookie_glitch = ABSENT_NUMERIC;
set_attributes = ABSENT_STRING;
enter_blink_mode = ABSENT_STRING;
enter_bold_mode = ABSENT_STRING;
enter_dim_mode = ABSENT_STRING;
enter_reverse_mode = ABSENT_STRING;
enter_standout_mode = ABSENT_STRING;
enter_underline_mode = ABSENT_STRING;
}
/* initialize normal acs before wide, since we use mapping in the latter */
#if !USE_WIDEC_SUPPORT
if (_nc_unicode_locale() && _nc_locale_breaks_acs(sp->_term)) {
acs_chars = NULL;
ena_acs = NULL;
enter_alt_charset_mode = NULL;
exit_alt_charset_mode = NULL;
set_attributes = NULL;
}
#endif
}
static int
drv_twait(TERMINAL_CONTROL_BLOCK * TCB,
int mode,
int milliseconds,
int *timeleft
EVENTLIST_2nd(_nc_eventlist * evl))
{
SCREEN *sp;
AssertTCB();
SetSP();
-
+#ifdef EXP_WIN32_DRIVER
+ return _nc_console_twait(sp,
+ _nc_console_handle(sp->_ifd),
+ mode,
+ milliseconds,
+ timeleft EVENTLIST_2nd(evl));
+#else
return _nc_timed_wait(sp, mode, milliseconds, timeleft EVENTLIST_2nd(evl));
+#endif
}
static int
drv_read(TERMINAL_CONTROL_BLOCK * TCB, int *buf)
{
SCREEN *sp;
- unsigned char c2 = 0;
int n;
+#ifndef EXP_WIN32_DRIVER
+ unsigned char c2 = 0;
+#endif
AssertTCB();
assert(buf);
SetSP();
# if USE_PTHREADS_EINTR
if ((pthread_self) && (pthread_kill) && (pthread_equal))
_nc_globals.read_thread = pthread_self();
# endif
+#ifdef EXP_WIN32_DRIVER
+ n = _nc_console_read(sp,
+ _nc_console_handle(sp->_ifd),
+ buf);
+#else
n = (int) read(sp->_ifd, &c2, (size_t) 1);
+#endif
#if USE_PTHREADS_EINTR
_nc_globals.read_thread = 0;
#endif
+#ifndef EXP_WIN32_DRIVER
*buf = (int) c2;
+#endif
return n;
}
static int
drv_nap(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED, int ms)
{
#if HAVE_NANOSLEEP
{
struct timespec request, remaining;
request.tv_sec = ms / 1000;
request.tv_nsec = (ms % 1000) * 1000000;
while (nanosleep(&request, &remaining) == -1
&& errno == EINTR) {
request = remaining;
}
}
+#elif defined(EXP_WIN32_DRIVER)
+ Sleep((DWORD) ms);
#else
_nc_timed_wait(0, 0, ms, (int *) 0 EVENTLIST_2nd(0));
#endif
return OK;
}
static int
__nc_putp(SCREEN *sp, const char *name GCC_UNUSED, const char *value)
{
int rc = ERR;
if (value) {
rc = NCURSES_PUTP2(name, value);
}
return rc;
}
static int
__nc_putp_flush(SCREEN *sp, const char *name, const char *value)
{
int rc = __nc_putp(sp, name, value);
if (rc != ERR) {
NCURSES_SP_NAME(_nc_flush) (sp);
}
return rc;
}
static int
drv_kpad(TERMINAL_CONTROL_BLOCK * TCB, int flag)
{
int ret = ERR;
SCREEN *sp;
AssertTCB();
sp = TCB->csp;
if (sp) {
if (flag) {
(void) __nc_putp_flush(sp, "keypad_xmit", keypad_xmit);
} else if (!flag && keypad_local) {
(void) __nc_putp_flush(sp, "keypad_local", keypad_local);
}
if (flag && !sp->_tried) {
_nc_init_keytry(sp);
sp->_tried = TRUE;
}
ret = OK;
}
return ret;
}
static int
drv_keyok(TERMINAL_CONTROL_BLOCK * TCB, int c, int flag)
{
SCREEN *sp;
int code = ERR;
int count = 0;
char *s;
AssertTCB();
SetSP();
if (c >= 0) {
unsigned ch = (unsigned) c;
if (flag) {
while ((s = _nc_expand_try(sp->_key_ok,
ch, &count, (size_t) 0)) != 0) {
if (_nc_remove_key(&(sp->_key_ok), ch)) {
code = _nc_add_to_try(&(sp->_keytry), s, ch);
free(s);
count = 0;
if (code != OK)
break;
} else {
free(s);
}
}
} else {
while ((s = _nc_expand_try(sp->_keytry,
ch, &count, (size_t) 0)) != 0) {
if (_nc_remove_key(&(sp->_keytry), ch)) {
code = _nc_add_to_try(&(sp->_key_ok), s, ch);
free(s);
count = 0;
if (code != OK)
break;
} else {
free(s);
}
}
}
}
return (code);
}
static int
drv_cursorSet(TERMINAL_CONTROL_BLOCK * TCB, int vis)
{
SCREEN *sp;
int code = ERR;
AssertTCB();
SetSP();
T((T_CALLED("tinfo:drv_cursorSet(%p,%d)"), (void *) SP_PARM, vis));
if (SP_PARM != 0 && IsTermInfo(SP_PARM)) {
switch (vis) {
case 2:
code = NCURSES_PUTP2_FLUSH("cursor_visible", cursor_visible);
break;
case 1:
code = NCURSES_PUTP2_FLUSH("cursor_normal", cursor_normal);
break;
case 0:
code = NCURSES_PUTP2_FLUSH("cursor_invisible", cursor_invisible);
break;
}
} else {
code = ERR;
}
returnCode(code);
}
static bool
drv_kyExist(TERMINAL_CONTROL_BLOCK * TCB, int key)
{
bool res = FALSE;
AssertTCB();
if (TCB->csp)
res = TINFO_HAS_KEY(TCB->csp, key) == 0 ? FALSE : TRUE;
return res;
}
NCURSES_EXPORT_VAR (TERM_DRIVER) _nc_TINFO_DRIVER = {
TRUE,
drv_Name, /* Name */
drv_CanHandle, /* CanHandle */
drv_init, /* init */
drv_release, /* release */
drv_size, /* size */
drv_sgmode, /* sgmode */
drv_conattr, /* conattr */
drv_mvcur, /* hwcur */
drv_mode, /* mode */
drv_rescol, /* rescol */
drv_rescolors, /* rescolors */
drv_setcolor, /* color */
drv_dobeepflash, /* doBeepOrFlash */
drv_initpair, /* initpair */
drv_initcolor, /* initcolor */
drv_do_color, /* docolor */
drv_initmouse, /* initmouse */
drv_testmouse, /* testmouse */
drv_setfilter, /* setfilter */
drv_hwlabel, /* hwlabel */
drv_hwlabelOnOff, /* hwlabelOnOff */
drv_doupdate, /* update */
drv_defaultcolors, /* defaultcolors */
drv_print, /* print */
drv_getsize, /* getsize */
drv_setsize, /* setsize */
drv_initacs, /* initacs */
drv_screen_init, /* scinit */
drv_wrap, /* scexit */
drv_twait, /* twait */
drv_read, /* read */
drv_nap, /* nap */
drv_kpad, /* kpad */
drv_keyok, /* kyOk */
drv_kyExist, /* kyExist */
drv_cursorSet /* cursorSet */
};
+
+#ifdef EXP_WIN32_DRIVER
+/*
+ * The terminfo driver is mandatory and must always be present.
+ * So this is the natural place for the driver initialisation
+ * logic.
+ */
+
+typedef struct DriverEntry {
+ const char *name;
+ TERM_DRIVER *driver;
+} DRIVER_ENTRY;
+
+static DRIVER_ENTRY DriverTable[] =
+{
+#ifdef _NC_WINDOWS
+ {"win32console", &_nc_WIN_DRIVER},
+#endif
+ {"tinfo", &_nc_TINFO_DRIVER} /* must be last */
+};
+
+NCURSES_EXPORT(int)
+_nc_get_driver(TERMINAL_CONTROL_BLOCK * TCB, const char *name, int *errret)
+{
+ int code = ERR;
+ size_t i;
+ TERM_DRIVER *res = (TERM_DRIVER *) 0;
+ TERM_DRIVER *use = 0;
+
+ T((T_CALLED("_nc_get_driver(%p, %s, %p)"),
+ (void *) TCB, NonNull(name), (void *) errret));
+
+ assert(TCB != 0);
+
+ for (i = 0; i < SIZEOF(DriverTable); i++) {
+ res = DriverTable[i].driver;
+#ifdef _NC_WINDOWS
+ if ((i + 1) == SIZEOF(DriverTable)) {
+ /* For Windows >= 10.0.17763 Windows Console interface implements
+ virtual Terminal functionality.
+ If on Windows td_CanHandle returned FALSE although the terminal
+ name is empty, we default to ms-terminal as tinfo TERM type.
+ */
+ if (name == 0 || *name == 0 || (strcmp(name, "unknown") == 0)) {
+ name = MS_TERMINAL;
+ T(("Set TERM=%s", name));
+ }
+ }
+#endif
+ if (strcmp(DriverTable[i].name, res->td_name(TCB)) == 0) {
+ if (res->td_CanHandle(TCB, name, errret)) {
+ use = res;
+ break;
+ }
+ }
+ }
+ if (use != 0) {
+ TCB->drv = use;
+ code = OK;
+ }
+ returnCode(code);
+}
+#endif /* EXP_WIN32_DRIVER */
diff --git a/contrib/ncurses/ncurses/tinfo/trim_sgr0.c b/contrib/ncurses/ncurses/tinfo/trim_sgr0.c
index 4d10529c029f..30c8f75c1e8a 100644
--- a/contrib/ncurses/ncurses/tinfo/trim_sgr0.c
+++ b/contrib/ncurses/ncurses/tinfo/trim_sgr0.c
@@ -1,336 +1,336 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 2005-2012,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas Dickey *
****************************************************************************/
#include <curses.priv.h>
#include <ctype.h>
#include <tic.h>
-MODULE_ID("$Id: trim_sgr0.c,v 1.18 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: trim_sgr0.c,v 1.20 2020/05/27 23:54:31 tom Exp $")
#undef CUR
#define CUR tp->
#define CSI 233
#define ESC 033 /* ^[ */
#define L_BRACK '['
static char *
set_attribute_9(TERMTYPE2 *tp, int flag)
{
const char *value;
char *result;
- value = tparm(set_attributes, 0, 0, 0, 0, 0, 0, 0, 0, flag);
+ value = TIPARM_9(set_attributes, 0, 0, 0, 0, 0, 0, 0, 0, flag);
if (PRESENT(value))
result = strdup(value);
else
result = 0;
return result;
}
static int
is_csi(const char *s)
{
int result = 0;
if (s != 0) {
if (UChar(s[0]) == CSI)
result = 1;
else if (s[0] == ESC && s[1] == L_BRACK)
result = 2;
}
return result;
}
static char *
skip_zero(char *s)
{
if (s[0] == '0') {
if (s[1] == ';')
s += 2;
else if (isalpha(UChar(s[1])))
s += 1;
}
return s;
}
static const char *
skip_delay(const char *s)
{
if (s[0] == '$' && s[1] == '<') {
s += 2;
while (isdigit(UChar(*s)) || *s == '/')
++s;
if (*s == '>')
++s;
}
return s;
}
/*
* Improve similar_sgr a little by moving the attr-string from the beginning
* to the end of the s-string.
*/
static bool
rewrite_sgr(char *s, char *attr)
{
if (s != 0) {
if (PRESENT(attr)) {
size_t len_s = strlen(s);
size_t len_a = strlen(attr);
if (len_s > len_a && !strncmp(attr, s, len_a)) {
unsigned n;
TR(TRACE_DATABASE, ("rewrite:\n\t%s", s));
for (n = 0; n < len_s - len_a; ++n) {
s[n] = s[n + len_a];
}
_nc_STRCPY(s + n, attr, strlen(s) + 1);
TR(TRACE_DATABASE, ("to:\n\t%s", s));
}
}
return TRUE;
}
return FALSE; /* oops */
}
static bool
similar_sgr(char *a, char *b)
{
bool result = FALSE;
if (a != 0 && b != 0) {
int csi_a = is_csi(a);
int csi_b = is_csi(b);
size_t len_a;
size_t len_b;
TR(TRACE_DATABASE, ("similar_sgr:\n\t%s\n\t%s",
_nc_visbuf2(1, a),
_nc_visbuf2(2, b)));
if (csi_a != 0 && csi_b != 0 && csi_a == csi_b) {
a += csi_a;
b += csi_b;
if (*a != *b) {
a = skip_zero(a);
b = skip_zero(b);
}
}
len_a = strlen(a);
len_b = strlen(b);
if (len_a && len_b) {
if (len_a > len_b)
result = (strncmp(a, b, len_b) == 0);
else
result = (strncmp(a, b, len_a) == 0);
}
TR(TRACE_DATABASE, ("...similar_sgr: %d\n\t%s\n\t%s", result,
_nc_visbuf2(1, a),
_nc_visbuf2(2, b)));
}
return result;
}
static unsigned
chop_out(char *string, unsigned i, unsigned j)
{
TR(TRACE_DATABASE, ("chop_out %d..%d from %s", i, j, _nc_visbuf(string)));
while (string[j] != '\0') {
string[i++] = string[j++];
}
string[i] = '\0';
return i;
}
/*
* Compare, ignoring delays. Some of the delay values are inconsistent, and
* we do not want to be stopped by that.
*
* Returns the number of chars from 'full' that we matched. If any mismatch
* occurs, return zero.
*/
static unsigned
compare_part(const char *part, const char *full)
{
const char *next_part;
const char *next_full;
unsigned used_full = 0;
unsigned used_delay = 0;
while (*part != 0) {
if (*part != *full) {
used_full = 0;
break;
}
/*
* Adjust the return-value to allow the rare case of
* string<delay>string
* to remove the whole piece. The most common case is a delay at the
* end of the string. The adjusted string will retain the delay, which
* is conservative.
*/
if (used_delay != 0) {
used_full += used_delay;
used_delay = 0;
}
if (*part == '$' && *full == '$') {
next_part = skip_delay(part);
next_full = skip_delay(full);
if (next_part != part && next_full != full) {
used_delay += (unsigned) (next_full - full);
full = next_full;
part = next_part;
continue;
}
}
++used_full;
++part;
++full;
}
return used_full;
}
/*
* While 'sgr0' is the "same" as termcap 'me', there is a compatibility issue.
* The sgr/sgr0 capabilities include setting/clearing alternate character set
* mode. A termcap application cannot use sgr, so sgr0 strings that reset
* alternate character set mode will be misinterpreted. Here, we remove those
* from the more common ISO/ANSI/VT100 entries, which have sgr0 agreeing with
* sgr.
*
* This function returns the modified sgr0 if it can be modified, a null if
* an error occurs, or the original sgr0 if no change is needed.
*/
NCURSES_EXPORT(char *)
_nc_trim_sgr0(TERMTYPE2 *tp)
{
char *result = exit_attribute_mode;
T((T_CALLED("_nc_trim_sgr0()")));
if (PRESENT(exit_attribute_mode)
&& PRESENT(set_attributes)) {
bool found = FALSE;
char *on = set_attribute_9(tp, 1);
char *off = set_attribute_9(tp, 0);
char *end = strdup(exit_attribute_mode);
char *tmp;
size_t i, j, k;
TR(TRACE_DATABASE, ("checking if we can trim sgr0 based on sgr"));
TR(TRACE_DATABASE, ("sgr0 %s", _nc_visbuf(end)));
TR(TRACE_DATABASE, ("sgr(9:off) %s", _nc_visbuf(off)));
TR(TRACE_DATABASE, ("sgr(9:on) %s", _nc_visbuf(on)));
if (!rewrite_sgr(on, enter_alt_charset_mode)
|| !rewrite_sgr(off, exit_alt_charset_mode)
|| !rewrite_sgr(end, exit_alt_charset_mode)) {
FreeIfNeeded(off);
} else if (similar_sgr(off, end)
&& !similar_sgr(off, on)) {
TR(TRACE_DATABASE, ("adjusting sgr(9:off) : %s", _nc_visbuf(off)));
result = off;
/*
* If rmacs is a substring of sgr(0), remove that chunk.
*/
if (PRESENT(exit_alt_charset_mode)) {
TR(TRACE_DATABASE, ("scan for rmacs %s", _nc_visbuf(exit_alt_charset_mode)));
j = strlen(off);
k = strlen(exit_alt_charset_mode);
if (j > k) {
for (i = 0; i <= (j - k); ++i) {
unsigned k2 = compare_part(exit_alt_charset_mode,
off + i);
if (k2 != 0) {
found = TRUE;
chop_out(off, (unsigned) i, (unsigned) (i + k2));
break;
}
}
}
}
/*
* SGR 10 would reset to normal font.
*/
if (!found) {
if ((i = (size_t) is_csi(off)) != 0
&& off[strlen(off) - 1] == 'm') {
TR(TRACE_DATABASE, ("looking for SGR 10 in %s",
_nc_visbuf(off)));
tmp = skip_zero(off + i);
if (tmp[0] == '1'
&& skip_zero(tmp + 1) != tmp + 1) {
i = (size_t) (tmp - off);
if (off[i - 1] == ';')
i--;
j = (size_t) (skip_zero(tmp + 1) - off);
(void) chop_out(off, (unsigned) i, (unsigned) j);
found = TRUE;
}
}
}
if (!found
&& (tmp = strstr(end, off)) != 0
&& strcmp(end, off) != 0) {
i = (size_t) (tmp - end);
j = strlen(off);
tmp = strdup(end);
chop_out(tmp, (unsigned) i, (unsigned) j);
free(off);
result = tmp;
}
TR(TRACE_DATABASE, ("...adjusted sgr0 : %s", _nc_visbuf(result)));
if (!strcmp(result, exit_attribute_mode)) {
TR(TRACE_DATABASE, ("...same result, discard"));
free(result);
result = exit_attribute_mode;
}
} else {
/*
* Either the sgr does not reference alternate character set,
* or it is incorrect. That's too hard to decide right now.
*/
free(off);
}
FreeIfNeeded(end);
FreeIfNeeded(on);
} else {
/*
* Possibly some applications are confused if sgr0 contains rmacs,
* but that would be a different bug report -TD
*/
}
returnPtr(result);
}
diff --git a/contrib/ncurses/ncurses/tinfo/write_entry.c b/contrib/ncurses/ncurses/tinfo/write_entry.c
index 138517651e12..5bb7aee7f360 100644
--- a/contrib/ncurses/ncurses/tinfo/write_entry.c
+++ b/contrib/ncurses/ncurses/tinfo/write_entry.c
@@ -1,945 +1,945 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
/*
* write_entry.c -- write a terminfo structure onto the file system
*/
#include <curses.priv.h>
#include <hashed_db.h>
#include <tic.h>
#if 1
#define TRACE_OUT(p) DEBUG(2, p)
#define TRACE_NUM(n) if (VALID_NUMERIC(Numbers[n])) { \
TRACE_OUT(("put Numbers[%u]=%d", (unsigned) (n), Numbers[n])); }
#else
#define TRACE_OUT(p) /*nothing */
#define TRACE_NUM(n) /* nothing */
#endif
-MODULE_ID("$Id: write_entry.c,v 1.115 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: write_entry.c,v 1.116 2020/08/29 16:22:03 juergen Exp $")
static int total_written;
static int total_parts;
static int total_size;
static int make_db_root(const char *);
#if !USE_HASHED_DB
static void
write_file(char *filename, TERMTYPE2 *tp)
{
char buffer[MAX_ENTRY_SIZE];
unsigned limit = sizeof(buffer);
unsigned offset = 0;
if (_nc_write_object(tp, buffer, &offset, limit) == ERR) {
_nc_warning("entry is larger than %u bytes", limit);
} else {
FILE *fp = ((_nc_access(filename, W_OK) == 0)
? fopen(filename, BIN_W)
: 0);
size_t actual;
if (fp == 0) {
perror(filename);
_nc_syserr_abort("can't open %s/%s", _nc_tic_dir(0), filename);
}
actual = fwrite(buffer, sizeof(char), (size_t) offset, fp);
if (actual != offset) {
int myerr = ferror(fp) ? errno : 0;
if (myerr) {
_nc_syserr_abort("error writing %s/%s: %s",
_nc_tic_dir(0),
filename,
strerror(myerr));
} else {
_nc_syserr_abort("error writing %s/%s: %u bytes vs actual %lu",
_nc_tic_dir(0),
filename,
offset,
(unsigned long) actual);
}
} else {
fclose(fp);
DEBUG(1, ("Created %s", filename));
}
}
}
/*
* Check for access rights to destination directories
* Create any directories which don't exist.
*
* Note: there's no reason to return the result of make_db_root(), since
* this function is called only in instances where that has to succeed.
*/
static void
check_writeable(int code)
{
static const char dirnames[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
static bool verified[sizeof(dirnames)];
char dir[sizeof(LEAF_FMT)];
char *s = 0;
if (code == 0 || (s = (strchr) (dirnames, code)) == 0)
_nc_err_abort("Illegal terminfo subdirectory \"" LEAF_FMT "\"", code);
if (verified[s - dirnames])
return;
_nc_SPRINTF(dir, _nc_SLIMIT(sizeof(dir)) LEAF_FMT, code);
if (make_db_root(dir) < 0) {
_nc_err_abort("%s/%s: permission denied", _nc_tic_dir(0), dir);
}
verified[s - dirnames] = TRUE;
}
#endif /* !USE_HASHED_DB */
static int
make_db_path(char *dst, const char *src, size_t limit)
{
int rc = -1;
const char *top = _nc_tic_dir(0);
if (src == top || _nc_is_abs_path(src)) {
if (strlen(src) + 1 <= limit) {
_nc_STRCPY(dst, src, limit);
rc = 0;
}
} else {
if (strlen(top) + strlen(src) + 2 <= limit) {
_nc_SPRINTF(dst, _nc_SLIMIT(limit) "%s/%s", top, src);
rc = 0;
}
}
#if USE_HASHED_DB
if (rc == 0) {
static const char suffix[] = DBM_SUFFIX;
size_t have = strlen(dst);
size_t need = strlen(suffix);
if (have > need && strcmp(dst + (int) (have - need), suffix)) {
if (have + need <= limit) {
_nc_STRCAT(dst, suffix, limit);
} else {
rc = -1;
}
} else if (_nc_is_dir_path(dst)) {
rc = -1;
}
}
#endif
return rc;
}
/*
* Make a database-root if it doesn't exist.
*/
static int
make_db_root(const char *path)
{
int rc;
char fullpath[PATH_MAX];
if ((rc = make_db_path(fullpath, path, sizeof(fullpath))) == 0) {
#if USE_HASHED_DB
DB *capdbp;
if ((capdbp = _nc_db_open(fullpath, TRUE)) == NULL) {
rc = -1;
} else if (_nc_db_close(capdbp) < 0) {
rc = -1;
}
#else
struct stat statbuf;
if ((rc = stat(path, &statbuf)) < 0) {
rc = mkdir(path
-#if !defined(_WIN32)
+#ifndef _NC_WINDOWS
,0777
#endif
);
} else if (_nc_access(path, R_OK | W_OK | X_OK) < 0) {
rc = -1; /* permission denied */
} else if (!(S_ISDIR(statbuf.st_mode))) {
rc = -1; /* not a directory */
}
#endif
}
return rc;
}
/*
* Set the write directory for compiled entries.
*/
NCURSES_EXPORT(void)
_nc_set_writedir(const char *dir)
{
const char *destination;
char actual[PATH_MAX];
if (dir == 0
#ifndef USE_ROOT_ENVIRON
&& use_terminfo_vars()
#endif
)
dir = getenv("TERMINFO");
if (dir != 0)
(void) _nc_tic_dir(dir);
destination = _nc_tic_dir(0);
if (make_db_root(destination) < 0) {
char *home = _nc_home_terminfo();
if (home != 0) {
destination = home;
if (make_db_root(destination) < 0)
_nc_err_abort("%s: permission denied (errno %d)",
destination, errno);
}
}
/*
* Note: because of this code, this logic should be exercised
* *once only* per run.
*/
#if USE_HASHED_DB
make_db_path(actual, destination, sizeof(actual));
#else
if (chdir(_nc_tic_dir(destination)) < 0
|| getcwd(actual, sizeof(actual)) == 0)
_nc_err_abort("%s: not a directory", destination);
#endif
_nc_keep_tic_dir(strdup(actual));
}
/*
* Save the compiled version of a description in the filesystem.
*
* make a copy of the name-list
* break it up into first-name and all-but-last-name
* creat(first-name)
* write object information to first-name
* close(first-name)
* for each name in all-but-last-name
* link to first-name
*
* Using 'time()' to obtain a reference for file timestamps is unreliable,
* e.g., with NFS, because the filesystem may have a different time
* reference. We check for pre-existence of links by latching the first
* timestamp from a file that we create.
*
* The _nc_warning() calls will report a correct line number only if
* _nc_curr_line is properly set before the write_entry() call.
*/
NCURSES_EXPORT(void)
_nc_write_entry(TERMTYPE2 *const tp)
{
#if USE_HASHED_DB
char buffer[MAX_ENTRY_SIZE + 1];
unsigned limit = sizeof(buffer);
unsigned offset = 0;
#else /* !USE_HASHED_DB */
struct stat statbuf;
char filename[PATH_MAX];
char linkname[PATH_MAX];
#if USE_SYMLINKS
char symlinkname[PATH_MAX];
#if !HAVE_LINK
#undef HAVE_LINK
#define HAVE_LINK 1
#endif
#endif /* USE_SYMLINKS */
unsigned limit2 = sizeof(filename) - (2 + LEAF_LEN);
char saved = '\0';
static int call_count;
static time_t start_time; /* time at start of writes */
#endif /* USE_HASHED_DB */
char name_list[MAX_TERMINFO_LENGTH];
char *first_name, *other_names;
char *ptr;
char *term_names = tp->term_names;
size_t name_size = strlen(term_names);
if (name_size == 0) {
_nc_syserr_abort("no terminal name found.");
} else if (name_size >= sizeof(name_list) - 1) {
_nc_syserr_abort("terminal name too long: %s", term_names);
}
_nc_STRCPY(name_list, term_names, sizeof(name_list));
DEBUG(7, ("Name list = '%s'", name_list));
first_name = name_list;
ptr = &name_list[name_size - 1];
other_names = ptr + 1;
while (ptr > name_list && *ptr != '|')
ptr--;
if (ptr != name_list) {
*ptr = '\0';
for (ptr = name_list; *ptr != '\0' && *ptr != '|'; ptr++)
continue;
if (*ptr == '\0')
other_names = ptr;
else {
*ptr = '\0';
other_names = ptr + 1;
}
}
DEBUG(7, ("First name = '%s'", first_name));
DEBUG(7, ("Other names = '%s'", other_names));
_nc_set_type(first_name);
#if USE_HASHED_DB
if (_nc_write_object(tp, buffer + 1, &offset, limit - 1) != ERR) {
DB *capdb = _nc_db_open(_nc_tic_dir(0), TRUE);
DBT key, data;
if (capdb != 0) {
buffer[0] = 0;
memset(&key, 0, sizeof(key));
key.data = term_names;
key.size = name_size;
memset(&data, 0, sizeof(data));
data.data = buffer;
data.size = offset + 1;
_nc_db_put(capdb, &key, &data);
buffer[0] = 2;
key.data = name_list;
key.size = strlen(name_list);
_nc_STRCPY(buffer + 1,
term_names,
sizeof(buffer) - 1);
data.size = name_size + 1;
total_size += data.size;
total_parts++;
_nc_db_put(capdb, &key, &data);
while (*other_names != '\0') {
ptr = other_names++;
assert(ptr < buffer + sizeof(buffer) - 1);
while (*other_names != '|' && *other_names != '\0')
other_names++;
if (*other_names != '\0')
*(other_names++) = '\0';
key.data = ptr;
key.size = strlen(ptr);
total_size += data.size;
total_parts++;
_nc_db_put(capdb, &key, &data);
}
}
}
#else /* !USE_HASHED_DB */
if (call_count++ == 0) {
start_time = 0;
}
if (strlen(first_name) >= limit2) {
_nc_warning("terminal name too long.");
saved = first_name[limit2];
first_name[limit2] = '\0';
}
_nc_SPRINTF(filename, _nc_SLIMIT(sizeof(filename))
LEAF_FMT "/%.*s", UChar(first_name[0]),
(int) (sizeof(filename) - (LEAF_LEN + 2)),
first_name);
if (saved)
first_name[limit2] = saved;
/*
* Has this primary name been written since the first call to
* write_entry()? If so, the newer write will step on the older,
* so warn the user.
*/
if (start_time > 0 &&
stat(filename, &statbuf) >= 0
&& statbuf.st_mtime >= start_time) {
#if HAVE_LINK && !USE_SYMLINKS
/*
* If the file has more than one link, the reason for the previous
* write could be that the current primary name used to be an alias for
* the previous entry. In that case, unlink the file so that we will
* not modify the previous entry as we write this one.
*/
if (statbuf.st_nlink > 1) {
_nc_warning("name redefined.");
unlink(filename);
} else {
_nc_warning("name multiply defined.");
}
#else
_nc_warning("name multiply defined.");
#endif
}
check_writeable(first_name[0]);
write_file(filename, tp);
if (start_time == 0) {
if (stat(filename, &statbuf) < 0
|| (start_time = statbuf.st_mtime) == 0) {
_nc_syserr_abort("error obtaining time from %s/%s",
_nc_tic_dir(0), filename);
}
}
while (*other_names != '\0') {
ptr = other_names++;
while (*other_names != '|' && *other_names != '\0')
other_names++;
if (*other_names != '\0')
*(other_names++) = '\0';
if (strlen(ptr) > sizeof(linkname) - (2 + LEAF_LEN)) {
_nc_warning("terminal alias %s too long.", ptr);
continue;
}
if (strchr(ptr, '/') != 0) {
_nc_warning("cannot link alias %s.", ptr);
continue;
}
check_writeable(ptr[0]);
_nc_SPRINTF(linkname, _nc_SLIMIT(sizeof(linkname))
LEAF_FMT "/%.*s", ptr[0],
(int) sizeof(linkname) - (2 + LEAF_LEN), ptr);
if (strcmp(filename, linkname) == 0) {
_nc_warning("self-synonym ignored");
} else if (stat(linkname, &statbuf) >= 0 &&
statbuf.st_mtime < start_time) {
_nc_warning("alias %s multiply defined.", ptr);
} else if (_nc_access(linkname, W_OK) == 0)
#if HAVE_LINK
{
int code;
#if USE_SYMLINKS
#define MY_SIZE sizeof(symlinkname) - 1
if (first_name[0] == linkname[0]) {
_nc_STRNCPY(symlinkname, first_name, MY_SIZE);
} else {
_nc_STRCPY(symlinkname, "../", sizeof(symlinkname));
_nc_STRNCPY(symlinkname + 3, filename, MY_SIZE - 3);
}
symlinkname[MY_SIZE] = '\0';
#endif /* USE_SYMLINKS */
#if HAVE_REMOVE
code = remove(linkname);
#else
code = unlink(linkname);
#endif
if (code != 0 && errno == ENOENT)
code = 0;
#if USE_SYMLINKS
if (symlink(symlinkname, linkname) < 0)
#else
if (link(filename, linkname) < 0)
#endif /* USE_SYMLINKS */
{
/*
* If there wasn't anything there, and we cannot
* link to the target because it is the same as the
* target, then the source must be on a filesystem
* that uses caseless filenames, such as Win32, etc.
*/
if (code == 0 && errno == EEXIST)
_nc_warning("can't link %s to %s", filename, linkname);
else if (code == 0 && (errno == EPERM || errno == ENOENT))
write_file(linkname, tp);
else {
#if MIXEDCASE_FILENAMES
_nc_syserr_abort("can't link %s to %s", filename, linkname);
#else
_nc_warning("can't link %s to %s (errno=%d)", filename,
linkname, errno);
#endif
}
} else {
DEBUG(1, ("Linked %s", linkname));
}
}
#else /* just make copies */
write_file(linkname, tp);
#endif /* HAVE_LINK */
}
#endif /* USE_HASHED_DB */
}
static size_t
fake_write(char *dst,
unsigned *offset,
size_t limit,
char *src,
size_t want,
size_t size)
{
size_t have = (limit - *offset);
want *= size;
if (have > 0) {
if (want > have)
want = have;
memcpy(dst + *offset, src, want);
*offset += (unsigned) want;
} else {
want = 0;
}
return (want / size);
}
#define Write(buf, size, count) fake_write(buffer, offset, (size_t) limit, (char *) buf, (size_t) count, (size_t) size)
#undef LITTLE_ENDIAN /* BSD/OS defines this as a feature macro */
#define HI(x) ((x) / 256)
#define LO(x) ((x) % 256)
#define LITTLE_ENDIAN(p, x) (p)[0] = (unsigned char)LO(x), \
(p)[1] = (unsigned char)HI(x)
#define WRITE_STRING(str) (Write(str, sizeof(char), strlen(str) + 1) == strlen(str) + 1)
static int
compute_offsets(char **Strings, size_t strmax, short *offsets)
{
int nextfree = 0;
size_t i;
for (i = 0; i < strmax; i++) {
if (Strings[i] == ABSENT_STRING) {
offsets[i] = -1;
} else if (Strings[i] == CANCELLED_STRING) {
offsets[i] = -2;
} else {
offsets[i] = (short) nextfree;
nextfree += (int) strlen(Strings[i]) + 1;
TRACE_OUT(("put Strings[%d]=%s(%d)", (int) i,
_nc_visbuf(Strings[i]), (int) nextfree));
}
}
return nextfree;
}
static size_t
convert_shorts(unsigned char *buf, short *Numbers, size_t count)
{
size_t i;
for (i = 0; i < count; i++) {
if (Numbers[i] == ABSENT_NUMERIC) { /* HI/LO won't work */
buf[2 * i] = buf[2 * i + 1] = 0377;
} else if (Numbers[i] == CANCELLED_NUMERIC) { /* HI/LO won't work */
buf[2 * i] = 0376;
buf[2 * i + 1] = 0377;
} else {
LITTLE_ENDIAN(buf + 2 * i, Numbers[i]);
TRACE_OUT(("put Numbers[%u]=%d", (unsigned) i, Numbers[i]));
}
}
return SIZEOF_SHORT;
}
#if NCURSES_EXT_NUMBERS
static size_t
convert_16bit(unsigned char *buf, NCURSES_INT2 *Numbers, size_t count)
{
size_t i, j;
size_t size = SIZEOF_SHORT;
for (i = 0; i < count; i++) {
unsigned value = (unsigned) Numbers[i];
TRACE_NUM(i);
for (j = 0; j < size; ++j) {
*buf++ = value & 0xff;
value >>= 8;
}
}
return size;
}
static size_t
convert_32bit(unsigned char *buf, NCURSES_INT2 *Numbers, size_t count)
{
size_t i, j;
size_t size = SIZEOF_INT2;
for (i = 0; i < count; i++) {
unsigned value = (unsigned) Numbers[i];
TRACE_NUM(i);
for (j = 0; j < size; ++j) {
*buf++ = value & 0xff;
value >>= 8;
}
}
return size;
}
#endif
#define even_boundary(value) \
((value) % 2 != 0 && Write(&zero, sizeof(char), 1) != 1)
#if NCURSES_XNAMES
static unsigned
extended_Booleans(TERMTYPE2 *tp)
{
unsigned result = 0;
unsigned i;
for (i = 0; i < tp->ext_Booleans; ++i) {
if (tp->Booleans[BOOLCOUNT + i] == TRUE)
result = (i + 1);
}
return result;
}
static unsigned
extended_Numbers(TERMTYPE2 *tp)
{
unsigned result = 0;
unsigned i;
for (i = 0; i < tp->ext_Numbers; ++i) {
if (tp->Numbers[NUMCOUNT + i] != ABSENT_NUMERIC)
result = (i + 1);
}
return result;
}
static unsigned
extended_Strings(TERMTYPE2 *tp)
{
unsigned short result = 0;
unsigned short i;
for (i = 0; i < tp->ext_Strings; ++i) {
if (tp->Strings[STRCOUNT + i] != ABSENT_STRING)
result = (unsigned short) (i + 1);
}
return result;
}
/*
* _nc_align_termtype() will extend entries that are referenced in a use=
* clause - discard the unneeded data.
*/
static bool
extended_object(TERMTYPE2 *tp)
{
bool result = FALSE;
if (_nc_user_definable) {
result = ((extended_Booleans(tp)
+ extended_Numbers(tp)
+ extended_Strings(tp)) != 0);
}
return result;
}
#endif
NCURSES_EXPORT(int)
_nc_write_object(TERMTYPE2 *tp, char *buffer, unsigned *offset, unsigned limit)
{
char *namelist;
size_t namelen, boolmax, nummax, strmax, numlen;
char zero = '\0';
size_t i;
int nextfree;
short offsets[MAX_ENTRY_SIZE / 2];
unsigned char buf[MAX_ENTRY_SIZE];
unsigned last_bool = BOOLWRITE;
unsigned last_num = NUMWRITE;
unsigned last_str = STRWRITE;
#if NCURSES_EXT_NUMBERS
bool need_ints = FALSE;
size_t (*convert_numbers) (unsigned char *, NCURSES_INT2 *, size_t) = convert_32bit;
#else
#define convert_numbers convert_shorts
#endif
#if NCURSES_XNAMES
/*
* Normally we limit the list of values to exclude the "obsolete"
* capabilities. However, if we are accepting extended names, add
* these as well, since they are used for supporting translation
* to/from termcap.
*/
if (_nc_user_definable) {
last_bool = BOOLCOUNT;
last_num = NUMCOUNT;
last_str = STRCOUNT;
}
#endif
namelist = tp->term_names;
namelen = strlen(namelist) + 1;
boolmax = 0;
for (i = 0; i < last_bool; i++) {
if (tp->Booleans[i] == TRUE) {
boolmax = i + 1;
}
}
nummax = 0;
for (i = 0; i < last_num; i++) {
if (tp->Numbers[i] != ABSENT_NUMERIC) {
nummax = i + 1;
#if NCURSES_EXT_NUMBERS
if (tp->Numbers[i] > MAX_OF_TYPE(NCURSES_COLOR_T)) {
need_ints = TRUE;
}
#endif
}
}
strmax = 0;
for (i = 0; i < last_str; i++) {
if (tp->Strings[i] != ABSENT_STRING)
strmax = i + 1;
}
nextfree = compute_offsets(tp->Strings, strmax, offsets);
/* fill in the header */
#if NCURSES_EXT_NUMBERS
if (need_ints) {
convert_numbers = convert_32bit;
LITTLE_ENDIAN(buf, MAGIC2);
} else {
convert_numbers = convert_16bit;
LITTLE_ENDIAN(buf, MAGIC);
}
#else
LITTLE_ENDIAN(buf, MAGIC);
#endif
LITTLE_ENDIAN(buf + 2, min(namelen, MAX_NAME_SIZE + 1));
LITTLE_ENDIAN(buf + 4, boolmax);
LITTLE_ENDIAN(buf + 6, nummax);
LITTLE_ENDIAN(buf + 8, strmax);
LITTLE_ENDIAN(buf + 10, nextfree);
/* write out the header */
TRACE_OUT(("Header of %s @%d", namelist, *offset));
if (Write(buf, 12, 1) != 1
|| Write(namelist, sizeof(char), namelen) != namelen) {
return (ERR);
}
for (i = 0; i < boolmax; i++) {
if (tp->Booleans[i] == TRUE) {
buf[i] = TRUE;
} else {
buf[i] = FALSE;
}
}
if (Write(buf, sizeof(char), boolmax) != boolmax) {
return (ERR);
}
if (even_boundary(namelen + boolmax)) {
return (ERR);
}
TRACE_OUT(("Numerics begin at %04x", *offset));
/* the numerics */
numlen = convert_numbers(buf, tp->Numbers, nummax);
if (Write(buf, numlen, nummax) != nummax) {
return (ERR);
}
TRACE_OUT(("String offsets begin at %04x", *offset));
/* the string offsets */
convert_shorts(buf, offsets, strmax);
if (Write(buf, SIZEOF_SHORT, strmax) != strmax) {
return (ERR);
}
TRACE_OUT(("String table begins at %04x", *offset));
/* the strings */
for (i = 0; i < strmax; i++) {
if (VALID_STRING(tp->Strings[i])) {
if (!WRITE_STRING(tp->Strings[i])) {
return (ERR);
}
}
}
#if NCURSES_XNAMES
if (extended_object(tp)) {
unsigned ext_total = (unsigned) NUM_EXT_NAMES(tp);
unsigned ext_usage = ext_total;
if (even_boundary(nextfree)) {
return (ERR);
}
nextfree = compute_offsets(tp->Strings + STRCOUNT,
(size_t) tp->ext_Strings,
offsets);
TRACE_OUT(("after extended string capabilities, nextfree=%d", nextfree));
if (tp->ext_Strings >= SIZEOF(offsets)) {
return (ERR);
}
nextfree += compute_offsets(tp->ext_Names,
(size_t) ext_total,
offsets + tp->ext_Strings);
TRACE_OUT(("after extended capnames, nextfree=%d", nextfree));
strmax = tp->ext_Strings + ext_total;
for (i = 0; i < tp->ext_Strings; ++i) {
if (VALID_STRING(tp->Strings[i + STRCOUNT])) {
ext_usage++;
}
}
TRACE_OUT(("will write %u/%lu strings", ext_usage, (unsigned long) strmax));
/*
* Write the extended header
*/
LITTLE_ENDIAN(buf + 0, tp->ext_Booleans);
LITTLE_ENDIAN(buf + 2, tp->ext_Numbers);
LITTLE_ENDIAN(buf + 4, tp->ext_Strings);
LITTLE_ENDIAN(buf + 6, ext_usage);
LITTLE_ENDIAN(buf + 8, nextfree);
TRACE_OUT(("WRITE extended-header @%d", *offset));
if (Write(buf, 10, 1) != 1) {
return (ERR);
}
TRACE_OUT(("WRITE %d booleans @%d", tp->ext_Booleans, *offset));
if (tp->ext_Booleans
&& Write(tp->Booleans + BOOLCOUNT, sizeof(char),
tp->ext_Booleans) != tp->ext_Booleans) {
return (ERR);
}
if (even_boundary(tp->ext_Booleans)) {
return (ERR);
}
TRACE_OUT(("WRITE %d numbers @%d", tp->ext_Numbers, *offset));
if (tp->ext_Numbers) {
numlen = convert_numbers(buf, tp->Numbers + NUMCOUNT, (size_t) tp->ext_Numbers);
if (Write(buf, numlen, tp->ext_Numbers) != tp->ext_Numbers) {
return (ERR);
}
}
/*
* Convert the offsets for the ext_Strings and ext_Names tables,
* in that order.
*/
convert_shorts(buf, offsets, strmax);
TRACE_OUT(("WRITE offsets @%d", *offset));
if (Write(buf, SIZEOF_SHORT, strmax) != strmax) {
return (ERR);
}
/*
* Write the string table after the offset tables so we do not
* have to do anything about alignment.
*/
for (i = 0; i < tp->ext_Strings; i++) {
if (VALID_STRING(tp->Strings[i + STRCOUNT])) {
TRACE_OUT(("WRITE ext_Strings[%d]=%s", (int) i,
_nc_visbuf(tp->Strings[i + STRCOUNT])));
if (!WRITE_STRING(tp->Strings[i + STRCOUNT])) {
return (ERR);
}
}
}
/*
* Write the extended names
*/
for (i = 0; i < ext_total; i++) {
TRACE_OUT(("WRITE ext_Names[%d]=%s", (int) i, tp->ext_Names[i]));
if (!WRITE_STRING(tp->ext_Names[i])) {
return (ERR);
}
}
}
#endif /* NCURSES_XNAMES */
total_written++;
total_parts++;
total_size = total_size + (int) (*offset + 1);
return (OK);
}
/*
* Returns the total number of entries written by this process
*/
NCURSES_EXPORT(int)
_nc_tic_written(void)
{
TR(TRACE_DATABASE, ("_nc_tic_written %d entries, %d parts, %d size",
total_written, total_parts, total_size));
return total_written;
}
diff --git a/contrib/ncurses/ncurses/trace/lib_trace.c b/contrib/ncurses/ncurses/trace/lib_trace.c
index 2c10b51d0170..5eb87fe0c176 100644
--- a/contrib/ncurses/ncurses/trace/lib_trace.c
+++ b/contrib/ncurses/ncurses/trace/lib_trace.c
@@ -1,410 +1,410 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer *
****************************************************************************/
/*
* lib_trace.c - Tracing/Debugging routines
*
* The _tracef() function is originally from pcurses (by Pavel Curtis) in 1982.
* pcurses allowed one to enable/disable tracing using traceon() and traceoff()
* functions. ncurses provides a trace() function which allows one to
* selectively enable or disable several tracing features.
*/
#include <curses.priv.h>
#include <tic.h>
#include <ctype.h>
-MODULE_ID("$Id: lib_trace.c,v 1.95 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_trace.c,v 1.97 2020/08/29 16:22:03 juergen Exp $")
NCURSES_EXPORT_VAR(unsigned) _nc_tracing = 0; /* always define this */
#ifdef TRACE
#if USE_REENTRANT
NCURSES_EXPORT(const char *)
NCURSES_PUBLIC_VAR(_nc_tputs_trace) (void)
{
return CURRENT_SCREEN ? CURRENT_SCREEN->_tputs_trace : _nc_prescreen._tputs_trace;
}
NCURSES_EXPORT(long)
NCURSES_PUBLIC_VAR(_nc_outchars) (void)
{
return CURRENT_SCREEN ? CURRENT_SCREEN->_outchars : _nc_prescreen._outchars;
}
NCURSES_EXPORT(void)
_nc_set_tputs_trace(const char *s)
{
if (CURRENT_SCREEN)
CURRENT_SCREEN->_tputs_trace = s;
else
_nc_prescreen._tputs_trace = s;
}
NCURSES_EXPORT(void)
_nc_count_outchars(long increment)
{
if (CURRENT_SCREEN)
CURRENT_SCREEN->_outchars += increment;
else
_nc_prescreen._outchars += increment;
}
#else
NCURSES_EXPORT_VAR(const char *) _nc_tputs_trace = "";
NCURSES_EXPORT_VAR(long) _nc_outchars = 0;
#endif
#define MyFP _nc_globals.trace_fp
#define MyFD _nc_globals.trace_fd
#define MyInit _nc_globals.trace_opened
#define MyPath _nc_globals.trace_fname
#define MyLevel _nc_globals.trace_level
#define MyNested _nc_globals.nested_tracef
#endif /* TRACE */
NCURSES_EXPORT(unsigned)
curses_trace(unsigned tracelevel)
{
unsigned result;
#if defined(TRACE)
result = _nc_tracing;
if ((MyFP == 0) && tracelevel) {
MyInit = TRUE;
if (MyFD >= 0) {
MyFP = fdopen(MyFD, BIN_W);
} else {
if (MyPath[0] == '\0') {
size_t size = sizeof(MyPath) - 12;
if (getcwd(MyPath, size) == 0) {
perror("curses: Can't get working directory");
exit(EXIT_FAILURE);
}
MyPath[size] = '\0';
assert(strlen(MyPath) <= size);
_nc_STRCAT(MyPath, "/trace", sizeof(MyPath));
if (_nc_is_dir_path(MyPath)) {
_nc_STRCAT(MyPath, ".log", sizeof(MyPath));
}
}
if (_nc_access(MyPath, W_OK) < 0
|| (MyFD = open(MyPath, O_CREAT | O_EXCL | O_RDWR, 0600)) < 0
|| (MyFP = fdopen(MyFD, BIN_W)) == 0) {
; /* EMPTY */
}
}
_nc_tracing = tracelevel;
/* Try to set line-buffered mode, or (failing that) unbuffered,
* so that the trace-output gets flushed automatically at the
* end of each line. This is useful in case the program dies.
*/
if (MyFP != 0) {
#if HAVE_SETVBUF /* ANSI */
(void) setvbuf(MyFP, (char *) 0, _IOLBF, (size_t) 0);
#elif HAVE_SETBUF /* POSIX */
(void) setbuffer(MyFP, (char *) 0);
#endif
}
_tracef("TRACING NCURSES version %s.%d (tracelevel=%#x)",
NCURSES_VERSION,
NCURSES_VERSION_PATCH,
tracelevel);
} else if (tracelevel == 0) {
if (MyFP != 0) {
MyFD = dup(MyFD); /* allow reopen of same file */
fclose(MyFP);
MyFP = 0;
}
_nc_tracing = tracelevel;
} else if (_nc_tracing != tracelevel) {
_nc_tracing = tracelevel;
_tracef("tracelevel=%#x", tracelevel);
}
#else
(void) tracelevel;
result = 0;
#endif
return result;
}
#if defined(TRACE)
NCURSES_EXPORT(void)
trace(const unsigned int tracelevel)
{
curses_trace(tracelevel);
}
static void
_nc_va_tracef(const char *fmt, va_list ap)
{
static const char Called[] = T_CALLED("");
static const char Return[] = T_RETURN("");
bool before = FALSE;
bool after = FALSE;
unsigned doit = _nc_tracing;
int save_err = errno;
FILE *fp = MyFP;
#ifdef TRACE
/* verbose-trace in the command-line utilities relies on this */
if (fp == 0 && !MyInit && _nc_tracing >= DEBUG_LEVEL(1))
fp = stderr;
#endif
if (strlen(fmt) >= sizeof(Called) - 1) {
if (!strncmp(fmt, Called, sizeof(Called) - 1)) {
before = TRUE;
MyLevel++;
} else if (!strncmp(fmt, Return, sizeof(Return) - 1)) {
after = TRUE;
}
if (before || after) {
if ((MyLevel <= 1)
|| (doit & TRACE_ICALLS) != 0)
doit &= (TRACE_CALLS | TRACE_CCALLS);
else
doit = 0;
}
}
if (doit != 0 && fp != 0) {
#ifdef USE_PTHREADS
/*
* TRACE_ICALLS is "really" needed to show normal use with threaded
* applications, since anything can be running during a napms(),
* making it appear in the hierarchical trace as it other functions
* are being called.
*
* Rather than add the complication of a per-thread stack, just
* show the thread-id in each line of the trace.
*/
# if USE_WEAK_SYMBOLS
if ((pthread_self))
# endif
-#ifdef _WIN32
+#ifdef _NC_WINDOWS
fprintf(fp, "%#lx:", (long) (intptr_t) pthread_self().p);
#else
fprintf(fp, "%#lx:", (long) (intptr_t) pthread_self());
#endif
#endif
if (before || after) {
int n;
for (n = 1; n < MyLevel; n++)
fputs("+ ", fp);
}
vfprintf(fp, fmt, ap);
fputc('\n', fp);
fflush(fp);
}
if (after && MyLevel)
MyLevel--;
errno = save_err;
}
NCURSES_EXPORT(void)
_tracef(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
_nc_va_tracef(fmt, ap);
va_end(ap);
}
/* Trace 'bool' return-values */
NCURSES_EXPORT(NCURSES_BOOL)
_nc_retrace_bool(int code)
{
T((T_RETURN("%s"), code ? "TRUE" : "FALSE"));
return code;
}
/* Trace 'char' return-values */
NCURSES_EXPORT(char)
_nc_retrace_char(int code)
{
T((T_RETURN("%c"), code));
return (char) code;
}
/* Trace 'int' return-values */
NCURSES_EXPORT(int)
_nc_retrace_int(int code)
{
T((T_RETURN("%d"), code));
return code;
}
/* Trace 'unsigned' return-values */
NCURSES_EXPORT(unsigned)
_nc_retrace_unsigned(unsigned code)
{
T((T_RETURN("%#x"), code));
return code;
}
/* Trace 'char*' return-values */
NCURSES_EXPORT(char *)
_nc_retrace_ptr(char *code)
{
T((T_RETURN("%s"), _nc_visbuf(code)));
return code;
}
/* Trace 'const char*' return-values */
NCURSES_EXPORT(const char *)
_nc_retrace_cptr(const char *code)
{
T((T_RETURN("%s"), _nc_visbuf(code)));
return code;
}
/* Trace 'NCURSES_CONST void*' return-values */
NCURSES_EXPORT(NCURSES_CONST void *)
_nc_retrace_cvoid_ptr(NCURSES_CONST void *code)
{
T((T_RETURN("%p"), code));
return code;
}
/* Trace 'void*' return-values */
NCURSES_EXPORT(void *)
_nc_retrace_void_ptr(void *code)
{
T((T_RETURN("%p"), code));
return code;
}
/* Trace 'SCREEN *' return-values */
NCURSES_EXPORT(SCREEN *)
_nc_retrace_sp(SCREEN *code)
{
T((T_RETURN("%p"), (void *) code));
return code;
}
/* Trace 'WINDOW *' return-values */
NCURSES_EXPORT(WINDOW *)
_nc_retrace_win(WINDOW *code)
{
T((T_RETURN("%p"), (void *) code));
return code;
}
NCURSES_EXPORT(char *)
_nc_fmt_funcptr(char *target, const char *source, size_t size)
{
size_t n;
char *dst = target;
bool leading = TRUE;
union {
int value;
char bytes[sizeof(int)];
} byteorder;
byteorder.value = 0x1234;
*dst++ = '0';
*dst++ = 'x';
for (n = 0; n < size; ++n) {
unsigned ch = ((byteorder.bytes[0] == 0x34)
? UChar(source[size - n - 1])
: UChar(source[n]));
if (ch != 0 || (n + 1) >= size)
leading = FALSE;
if (!leading) {
- _nc_SPRINTF(dst, _nc_SLIMIT(TR_FUNC_LEN - (dst - target))
+ _nc_SPRINTF(dst, _nc_SLIMIT(TR_FUNC_LEN - (size_t) (dst - target))
"%02x", ch & 0xff);
dst += 2;
}
}
*dst = '\0';
return target;
}
#if USE_REENTRANT
/*
* Check if the given trace-mask is enabled.
*
* This function may be called from within one of the functions that fills
* in parameters for _tracef(), but in that case we do not want to lock the
* mutex, since it is already locked.
*/
NCURSES_EXPORT(int)
_nc_use_tracef(unsigned mask)
{
bool result = FALSE;
_nc_lock_global(tst_tracef);
if (!MyNested++) {
if ((result = (_nc_tracing & (mask))) != 0
&& _nc_try_global(tracef) == 0) {
/* we will call _nc_locked_tracef(), no nesting so far */
} else {
/* we will not call _nc_locked_tracef() */
MyNested = 0;
}
} else {
/* we may call _nc_locked_tracef(), but with nested_tracef > 0 */
result = (_nc_tracing & (mask));
}
_nc_unlock_global(tst_tracef);
return result;
}
/*
* We call this if _nc_use_tracef() returns true, which means we must unlock
* the tracef mutex.
*/
NCURSES_EXPORT(void)
_nc_locked_tracef(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
_nc_va_tracef(fmt, ap);
va_end(ap);
if (--(MyNested) == 0) {
_nc_unlock_global(tracef);
}
}
#endif /* USE_REENTRANT */
#endif /* TRACE */
diff --git a/contrib/ncurses/ncurses/trace/lib_tracebits.c b/contrib/ncurses/ncurses/trace/lib_tracebits.c
index 14e5d90bd097..4bc50f3b0857 100644
--- a/contrib/ncurses/ncurses/trace/lib_tracebits.c
+++ b/contrib/ncurses/ncurses/trace/lib_tracebits.c
@@ -1,267 +1,303 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 1998-2012,2015 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
#include <curses.priv.h>
-MODULE_ID("$Id: lib_tracebits.c,v 1.28 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_tracebits.c,v 1.31 2020/11/14 23:38:11 tom Exp $")
#if HAVE_SYS_TERMIO_H
#include <sys/termio.h> /* needed for ISC */
#endif
#ifdef __EMX__
#include <io.h>
#endif
/* may be undefined if we're using termio.h */
#ifndef TOSTOP
#define TOSTOP 0
#endif
#ifndef IEXTEN
#define IEXTEN 0
#endif
#ifndef ONLCR
#define ONLCR 0
#endif
#ifndef OCRNL
#define OCRNL 0
#endif
#ifndef ONOCR
#define ONOCR 0
#endif
#ifndef ONLRET
#define ONLRET 0
#endif
#ifdef TRACE
+#if defined(EXP_WIN32_DRIVER)
+#define BITNAMELEN 36
+#else
+#define BITNAMELEN 8
+#endif
+
typedef struct {
unsigned int val;
- const char name[8];
+ const char name[BITNAMELEN];
} BITNAMES;
#define TRACE_BUF_SIZE(num) (_nc_globals.tracebuf_ptr[num].size)
static void
lookup_bits(char *buf, const BITNAMES * table, const char *label, unsigned int val)
{
const BITNAMES *sp;
_nc_STRCAT(buf, label, TRACE_BUF_SIZE(0));
_nc_STRCAT(buf, ": {", TRACE_BUF_SIZE(0));
for (sp = table; sp->name[0]; sp++)
if (sp->val != 0
&& (val & sp->val) == sp->val) {
_nc_STRCAT(buf, sp->name, TRACE_BUF_SIZE(0));
_nc_STRCAT(buf, ", ", TRACE_BUF_SIZE(0));
}
if (buf[strlen(buf) - 2] == ',')
buf[strlen(buf) - 2] = '\0';
_nc_STRCAT(buf, "} ", TRACE_BUF_SIZE(0));
}
NCURSES_EXPORT(char *)
-_nc_trace_ttymode(TTY * tty)
+_nc_trace_ttymode(const TTY * tty)
/* describe the state of the terminal control bits exactly */
{
char *buf;
#ifdef TERMIOS
#define DATA(name) { name, { #name } }
#define DATA2(name,name2) { name, { #name2 } }
#define DATAX() { 0, { "" } }
static const BITNAMES iflags[] =
{
DATA(BRKINT),
DATA(IGNBRK),
DATA(IGNPAR),
DATA(PARMRK),
DATA(INPCK),
DATA(ISTRIP),
DATA(INLCR),
DATA(IGNCR),
DATA(ICRNL),
DATA(IXON),
DATA(IXOFF),
DATAX()
#define ALLIN (BRKINT|IGNBRK|IGNPAR|PARMRK|INPCK|ISTRIP|INLCR|IGNCR|ICRNL|IXON|IXOFF)
}, oflags[] =
{
DATA(OPOST),
DATA2(OFLAGS_TABS, XTABS),
DATA(ONLCR),
DATA(OCRNL),
DATA(ONOCR),
DATA(ONLRET),
DATAX()
#define ALLOUT (OPOST|OFLAGS_TABS|ONLCR|OCRNL|ONOCR|ONLRET|OFLAGS_TABS)
}, cflags[] =
{
DATA(CLOCAL),
DATA(CREAD),
DATA(CSTOPB),
#if !defined(CS5) || !defined(CS8)
DATA(CSIZE),
#endif
DATA(HUPCL),
DATA(PARENB),
DATA2(PARODD | PARENB, PARODD),
DATAX()
#define ALLCTRL (CLOCAL|CREAD|CSIZE|CSTOPB|HUPCL|PARENB|PARODD)
}, lflags[] =
{
DATA(ECHO),
DATA2(ECHOE | ECHO, ECHOE),
DATA2(ECHOK | ECHO, ECHOK),
DATA(ECHONL),
DATA(ICANON),
DATA(ISIG),
DATA(NOFLSH),
DATA(TOSTOP),
DATA(IEXTEN),
DATAX()
#define ALLLOCAL (ECHO|ECHONL|ICANON|ISIG|NOFLSH|TOSTOP|IEXTEN)
};
buf = _nc_trace_buf(0,
8 + sizeof(iflags) +
8 + sizeof(oflags) +
8 + sizeof(cflags) +
8 + sizeof(lflags) +
8);
if (buf != 0) {
if (tty->c_iflag & ALLIN)
lookup_bits(buf, iflags, "iflags", tty->c_iflag);
if (tty->c_oflag & ALLOUT)
lookup_bits(buf, oflags, "oflags", tty->c_oflag);
if (tty->c_cflag & ALLCTRL)
lookup_bits(buf, cflags, "cflags", tty->c_cflag);
#if defined(CS5) && defined(CS8)
{
static const struct {
int value;
const char name[5];
} csizes[] = {
#define CS_DATA(name) { name, { #name " " } }
CS_DATA(CS5),
#ifdef CS6
CS_DATA(CS6),
#endif
#ifdef CS7
CS_DATA(CS7),
#endif
CS_DATA(CS8),
};
const char *result = "CSIZE? ";
int value = (int) (tty->c_cflag & CSIZE);
unsigned n;
if (value != 0) {
for (n = 0; n < SIZEOF(csizes); n++) {
if (csizes[n].value == value) {
result = csizes[n].name;
break;
}
}
}
_nc_STRCAT(buf, result, TRACE_BUF_SIZE(0));
}
#endif
if (tty->c_lflag & ALLLOCAL)
lookup_bits(buf, lflags, "lflags", tty->c_lflag);
}
+#elif defined(EXP_WIN32_DRIVER)
+#define DATA(name) { name, { #name } }
+ static const BITNAMES dwFlagsOut[] =
+ {
+ DATA(ENABLE_PROCESSED_OUTPUT),
+ DATA(ENABLE_WRAP_AT_EOL_OUTPUT),
+ DATA(ENABLE_VIRTUAL_TERMINAL_PROCESSING),
+ DATA(DISABLE_NEWLINE_AUTO_RETURN),
+ DATA(ENABLE_LVB_GRID_WORLDWIDE)
+ };
+ static const BITNAMES dwFlagsIn[] =
+ {
+ DATA(ENABLE_PROCESSED_INPUT),
+ DATA(ENABLE_LINE_INPUT),
+ DATA(ENABLE_ECHO_INPUT),
+ DATA(ENABLE_MOUSE_INPUT),
+ DATA(ENABLE_INSERT_MODE),
+ DATA(ENABLE_QUICK_EDIT_MODE),
+ DATA(ENABLE_EXTENDED_FLAGS),
+ DATA(ENABLE_AUTO_POSITION),
+ DATA(ENABLE_VIRTUAL_TERMINAL_INPUT)
+ };
+
+ buf = _nc_trace_buf(0,
+ 8 + sizeof(dwFlagsOut) +
+ 8 + sizeof(dwFlagsIn));
+ if (buf != 0) {
+ lookup_bits(buf, dwFlagsIn, "dwIn", tty->dwFlagIn);
+ lookup_bits(buf, dwFlagsOut, "dwOut", tty->dwFlagOut);
+ }
#else
/* reference: ttcompat(4M) on SunOS 4.1 */
#ifndef EVENP
#define EVENP 0
#endif
#ifndef LCASE
#define LCASE 0
#endif
#ifndef LLITOUT
#define LLITOUT 0
#endif
#ifndef ODDP
#define ODDP 0
#endif
#ifndef TANDEM
#define TANDEM 0
#endif
static const BITNAMES cflags[] =
{
DATA(CBREAK),
DATA(CRMOD),
DATA(ECHO),
DATA(EVENP),
DATA(LCASE),
DATA(LLITOUT),
DATA(ODDP),
DATA(RAW),
DATA(TANDEM),
DATA(XTABS),
DATAX()
#define ALLCTRL (CBREAK|CRMOD|ECHO|EVENP|LCASE|LLITOUT|ODDP|RAW|TANDEM|XTABS)
};
buf = _nc_trace_buf(0,
8 + sizeof(cflags));
if (buf != 0) {
if (tty->sg_flags & ALLCTRL) {
lookup_bits(buf, cflags, "cflags", tty->sg_flags);
}
}
#endif
return (buf);
}
NCURSES_EXPORT(char *)
_nc_tracebits(void)
{
return _nc_trace_ttymode(&(cur_term->Nttyb));
}
#else
EMPTY_MODULE(_nc_empty_lib_tracebits)
#endif /* TRACE */
diff --git a/contrib/ncurses/ncurses/tty/hashmap.c b/contrib/ncurses/ncurses/tty/hashmap.c
index 9d1e482b00eb..3f124c96c896 100644
--- a/contrib/ncurses/ncurses/tty/hashmap.c
+++ b/contrib/ncurses/ncurses/tty/hashmap.c
@@ -1,592 +1,592 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 1998-2015,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
/******************************************************************************
NAME
hashmap.c -- fill in scramble vector based on text hashes
SYNOPSIS
void _nc_hash_map(void)
DESCRIPTION:
This code attempts to recognize pairs of old and new lines in the physical
and virtual screens. When a line pair is recognized, the old line index is
placed in the oldindex member of the virtual screen line, to be used by the
vertical-motion optimizer portion of the update logic (see hardscroll.c).
Line pairs are recognized by applying a modified Heckel's algorithm,
sped up by hashing. If a line hash is unique in both screens, those
lines must be a pair. Then if the lines just before or after the pair
are the same or similar, they are a pair too.
We don't worry about false pairs produced by hash collisions, on the
assumption that such cases are rare and will only make the latter stages
of update less efficient, not introduce errors.
HOW TO TEST THIS:
Use the following production:
hashmap: hashmap.c
$(CC) -g -DHASHDEBUG hashmap.c hardscroll.c ../objects/lib_trace.o -o hashmap
AUTHOR
Eric S. Raymond <esr@snark.thyrsus.com>, May 1996
Bug fixes and improvements by Alexander V. Lukyanov <lav@yars.free.net>, 1997
*****************************************************************************/
#include <curses.priv.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: hashmap.c,v 1.68 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: hashmap.c,v 1.69 2020/05/31 17:50:48 tom Exp $")
#ifdef HASHDEBUG
# define _tracef printf
# undef TR
# ifdef TRACE
# define TR(n, a) if (_nc_tracing & (n)) { _tracef a ; putchar('\n'); }
# else
# define TR(n, a) { _tracef a ; putchar('\n'); }
# endif
# undef screen_lines
# define screen_lines(sp) MAXLINES
# define TEXTWIDTH(sp) 1
-int oldnums[MAXLINES], reallines[MAXLINES];
+static int oldnums[MAXLINES], reallines[MAXLINES];
static NCURSES_CH_T oldtext[MAXLINES][TEXTWIDTH(sp)];
static NCURSES_CH_T newtext[MAXLINES][TEXTWIDTH(sp)];
# define OLDNUM(sp,n) oldnums[n]
# define OLDTEXT(sp,n) oldtext[n]
# define NEWTEXT(sp,m) newtext[m]
# define PENDING(sp,n) 1
#else /* !HASHDEBUG */
# define OLDNUM(sp,n) (sp)->_oldnum_list[n]
# define OLDTEXT(sp,n) CurScreen(sp)->_line[n].text
# define NEWTEXT(sp,m) NewScreen(sp)->_line[m].text
# define TEXTWIDTH(sp) (CurScreen(sp)->_maxx + 1)
# define PENDING(sp,n) (NewScreen(sp)->_line[n].firstchar != _NOCHANGE)
#endif /* !HASHDEBUG */
#define oldhash(sp) ((sp)->oldhash)
#define newhash(sp) ((sp)->newhash)
#define hashtab(sp) ((sp)->hashtab)
#define lines_alloc(sp) ((sp)->hashtab_len)
#if USE_WIDEC_SUPPORT
#define HASH_VAL(ch) (ch.chars[0])
#else
#define HASH_VAL(ch) (ch)
#endif
static const NCURSES_CH_T blankchar = NewChar(BLANK_TEXT);
static NCURSES_INLINE unsigned long
hash(SCREEN *sp, NCURSES_CH_T *text)
{
int i;
NCURSES_CH_T ch;
unsigned long result = 0;
(void) sp;
for (i = TEXTWIDTH(sp); i > 0; i--) {
ch = *text++;
result += (result << 5) + (unsigned long) HASH_VAL(ch);
}
return result;
}
/* approximate update cost */
static int
update_cost(SCREEN *sp, NCURSES_CH_T *from, NCURSES_CH_T *to)
{
int cost = 0;
int i;
(void) sp;
for (i = TEXTWIDTH(sp); i > 0; i--, from++, to++)
if (!(CharEq(*from, *to)))
cost++;
return cost;
}
static int
update_cost_from_blank(SCREEN *sp, NCURSES_CH_T *to)
{
int cost = 0;
int i;
NCURSES_CH_T blank = blankchar;
(void) sp;
if (back_color_erase)
SetPair(blank, GetPair(stdscr->_nc_bkgd));
for (i = TEXTWIDTH(sp); i > 0; i--, to++)
if (!(CharEq(blank, *to)))
cost++;
return cost;
}
/*
* Returns true when moving line 'from' to line 'to' seems to be cost
* effective. 'blank' indicates whether the line 'to' would become blank.
*/
static NCURSES_INLINE bool
cost_effective(SCREEN *sp, const int from, const int to, const int blank)
{
int new_from;
if (from == to)
return FALSE;
new_from = OLDNUM(sp, from);
if (new_from == _NEWINDEX)
new_from = from;
/*
* On the left side of >= is the cost before moving;
* on the right side -- cost after moving.
*/
return (((blank ? update_cost_from_blank(sp, NEWTEXT(sp, to))
: update_cost(sp, OLDTEXT(sp, to), NEWTEXT(sp, to)))
+ update_cost(sp, OLDTEXT(sp, new_from), NEWTEXT(sp, from)))
>= ((new_from == from ? update_cost_from_blank(sp, NEWTEXT(sp, from))
: update_cost(sp, OLDTEXT(sp, new_from), NEWTEXT(sp, from)))
+ update_cost(sp, OLDTEXT(sp, from), NEWTEXT(sp, to))))
? TRUE : FALSE;
}
static void
grow_hunks(SCREEN *sp)
{
int back_limit; /* limits for cells to fill */
int back_ref_limit; /* limit for references */
int i;
int next_hunk;
/*
* This is tricky part. We have unique pairs to use as anchors.
* Use these to deduce the presence of spans of identical lines.
*/
back_limit = 0;
back_ref_limit = 0;
i = 0;
while (i < screen_lines(sp) && OLDNUM(sp, i) == _NEWINDEX)
i++;
for (; i < screen_lines(sp); i = next_hunk) {
int forward_limit;
int forward_ref_limit;
int end;
int start = i;
int shift = OLDNUM(sp, i) - i;
/* get forward limit */
i = start + 1;
while (i < screen_lines(sp)
&& OLDNUM(sp, i) != _NEWINDEX
&& OLDNUM(sp, i) - i == shift)
i++;
end = i;
while (i < screen_lines(sp) && OLDNUM(sp, i) == _NEWINDEX)
i++;
next_hunk = i;
forward_limit = i;
if (i >= screen_lines(sp) || OLDNUM(sp, i) >= i)
forward_ref_limit = i;
else
forward_ref_limit = OLDNUM(sp, i);
i = start - 1;
/* grow back */
if (shift < 0)
back_limit = back_ref_limit + (-shift);
while (i >= back_limit) {
if (newhash(sp)[i] == oldhash(sp)[i + shift]
|| cost_effective(sp, i + shift, i, shift < 0)) {
OLDNUM(sp, i) = i + shift;
TR(TRACE_UPDATE | TRACE_MOVE,
("connected new line %d to old line %d (backward continuation)",
i, i + shift));
} else {
TR(TRACE_UPDATE | TRACE_MOVE,
("not connecting new line %d to old line %d (backward continuation)",
i, i + shift));
break;
}
i--;
}
i = end;
/* grow forward */
if (shift > 0)
forward_limit = forward_ref_limit - shift;
while (i < forward_limit) {
if (newhash(sp)[i] == oldhash(sp)[i + shift]
|| cost_effective(sp, i + shift, i, shift > 0)) {
OLDNUM(sp, i) = i + shift;
TR(TRACE_UPDATE | TRACE_MOVE,
("connected new line %d to old line %d (forward continuation)",
i, i + shift));
} else {
TR(TRACE_UPDATE | TRACE_MOVE,
("not connecting new line %d to old line %d (forward continuation)",
i, i + shift));
break;
}
i++;
}
back_ref_limit = back_limit = i;
if (shift > 0)
back_ref_limit += shift;
}
}
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_hash_map) (NCURSES_SP_DCL0)
{
HASHMAP *hsp;
register int i;
if (screen_lines(SP_PARM) > lines_alloc(SP_PARM)) {
if (hashtab(SP_PARM))
free(hashtab(SP_PARM));
hashtab(SP_PARM) = typeMalloc(HASHMAP,
((size_t) screen_lines(SP_PARM) + 1) * 2);
if (!hashtab(SP_PARM)) {
if (oldhash(SP_PARM)) {
FreeAndNull(oldhash(SP_PARM));
}
lines_alloc(SP_PARM) = 0;
return;
}
lines_alloc(SP_PARM) = screen_lines(SP_PARM);
}
if (oldhash(SP_PARM) && newhash(SP_PARM)) {
/* re-hash only changed lines */
for (i = 0; i < screen_lines(SP_PARM); i++) {
if (PENDING(SP_PARM, i))
newhash(SP_PARM)[i] = hash(SP_PARM, NEWTEXT(SP_PARM, i));
}
} else {
/* re-hash all */
if (oldhash(SP_PARM) == 0)
oldhash(SP_PARM) = typeCalloc(unsigned long,
(size_t) screen_lines(SP_PARM));
if (newhash(SP_PARM) == 0)
newhash(SP_PARM) = typeCalloc(unsigned long,
(size_t) screen_lines(SP_PARM));
if (!oldhash(SP_PARM) || !newhash(SP_PARM))
return; /* malloc failure */
for (i = 0; i < screen_lines(SP_PARM); i++) {
newhash(SP_PARM)[i] = hash(SP_PARM, NEWTEXT(SP_PARM, i));
oldhash(SP_PARM)[i] = hash(SP_PARM, OLDTEXT(SP_PARM, i));
}
}
#ifdef HASH_VERIFY
for (i = 0; i < screen_lines(SP_PARM); i++) {
if (newhash(SP_PARM)[i] != hash(SP_PARM, NEWTEXT(SP_PARM, i)))
fprintf(stderr, "error in newhash[%d]\n", i);
if (oldhash(SP_PARM)[i] != hash(SP_PARM, OLDTEXT(SP_PARM, i)))
fprintf(stderr, "error in oldhash[%d]\n", i);
}
#endif
/*
* Set up and count line-hash values.
*/
memset(hashtab(SP_PARM), '\0',
sizeof(*(hashtab(SP_PARM)))
* ((size_t) screen_lines(SP_PARM) + 1) * 2);
for (i = 0; i < screen_lines(SP_PARM); i++) {
unsigned long hashval = oldhash(SP_PARM)[i];
for (hsp = hashtab(SP_PARM); hsp->hashval; hsp++)
if (hsp->hashval == hashval)
break;
hsp->hashval = hashval; /* in case this is a new entry */
hsp->oldcount++;
hsp->oldindex = i;
}
for (i = 0; i < screen_lines(SP_PARM); i++) {
unsigned long hashval = newhash(SP_PARM)[i];
for (hsp = hashtab(SP_PARM); hsp->hashval; hsp++)
if (hsp->hashval == hashval)
break;
hsp->hashval = hashval; /* in case this is a new entry */
hsp->newcount++;
hsp->newindex = i;
OLDNUM(SP_PARM, i) = _NEWINDEX; /* initialize old indices array */
}
/*
* Mark line pairs corresponding to unique hash pairs.
*
* We don't mark lines with offset 0, because it can make fail
* extending hunks by cost_effective. Otherwise, it does not
* have any side effects.
*/
for (hsp = hashtab(SP_PARM); hsp->hashval; hsp++)
if (hsp->oldcount == 1 && hsp->newcount == 1
&& hsp->oldindex != hsp->newindex) {
TR(TRACE_UPDATE | TRACE_MOVE,
("new line %d is hash-identical to old line %d (unique)",
hsp->newindex, hsp->oldindex));
OLDNUM(SP_PARM, hsp->newindex) = hsp->oldindex;
}
grow_hunks(SP_PARM);
/*
* Eliminate bad or impossible shifts -- this includes removing
* those hunks which could not grow because of conflicts, as well
* those which are to be moved too far, they are likely to destroy
* more than carry.
*/
for (i = 0; i < screen_lines(SP_PARM);) {
int start, shift, size;
while (i < screen_lines(SP_PARM) && OLDNUM(SP_PARM, i) == _NEWINDEX)
i++;
if (i >= screen_lines(SP_PARM))
break;
start = i;
shift = OLDNUM(SP_PARM, i) - i;
i++;
while (i < screen_lines(SP_PARM)
&& OLDNUM(SP_PARM, i) != _NEWINDEX
&& OLDNUM(SP_PARM, i) - i == shift)
i++;
size = i - start;
if (size < 3 || size + min(size / 8, 2) < abs(shift)) {
while (start < i) {
OLDNUM(SP_PARM, start) = _NEWINDEX;
start++;
}
}
}
/* After clearing invalid hunks, try grow the rest. */
grow_hunks(SP_PARM);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
_nc_hash_map(void)
{
NCURSES_SP_NAME(_nc_hash_map) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_make_oldhash) (NCURSES_SP_DCLx int i)
{
if (oldhash(SP_PARM))
oldhash(SP_PARM)[i] = hash(SP_PARM, OLDTEXT(SP_PARM, i));
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
_nc_make_oldhash(int i)
{
NCURSES_SP_NAME(_nc_make_oldhash) (CURRENT_SCREEN, i);
}
#endif
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_scroll_oldhash) (NCURSES_SP_DCLx int n, int top, int bot)
{
size_t size;
int i;
if (!oldhash(SP_PARM))
return;
size = sizeof(*(oldhash(SP_PARM))) * (size_t) (bot - top + 1 - abs(n));
if (n > 0) {
memmove(oldhash(SP_PARM) + top, oldhash(SP_PARM) + top + n, size);
for (i = bot; i > bot - n; i--)
oldhash(SP_PARM)[i] = hash(SP_PARM, OLDTEXT(SP_PARM, i));
} else {
memmove(oldhash(SP_PARM) + top - n, oldhash(SP_PARM) + top, size);
for (i = top; i < top - n; i++)
oldhash(SP_PARM)[i] = hash(SP_PARM, OLDTEXT(SP_PARM, i));
}
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
_nc_scroll_oldhash(int n, int top, int bot)
{
NCURSES_SP_NAME(_nc_scroll_oldhash) (CURRENT_SCREEN, n, top, bot);
}
#endif
#ifdef HASHDEBUG
static void
usage(void)
{
static const char *table[] =
{
"hashmap test-driver",
"",
"# comment",
"l get initial line number vector",
"n use following letters as text of new lines",
"o use following letters as text of old lines",
"d dump state of test arrays",
"h apply hash mapper and see scroll optimization",
"? this message"
};
size_t n;
for (n = 0; n < sizeof(table) / sizeof(table[0]); n++)
fprintf(stderr, "%s\n", table[n]);
}
int
main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
{
char line[BUFSIZ], *st;
int n;
if (setupterm(NULL, fileno(stdout), (int *) 0) == ERR)
return EXIT_FAILURE;
(void) _nc_alloc_screen();
for (n = 0; n < screen_lines(sp); n++) {
reallines[n] = n;
oldnums[n] = _NEWINDEX;
CharOf(oldtext[n][0]) = CharOf(newtext[n][0]) = '.';
}
if (NC_ISATTY(fileno(stdin)))
usage();
#ifdef TRACE
_nc_tracing = TRACE_MOVE;
#endif
for (;;) {
/* grab a test command */
if (fgets(line, sizeof(line), stdin) == (char *) NULL)
break;
switch (line[0]) {
case '#': /* comment */
(void) fputs(line, stderr);
break;
case 'l': /* get initial line number vector */
for (n = 0; n < screen_lines(sp); n++) {
reallines[n] = n;
oldnums[n] = _NEWINDEX;
}
n = 0;
st = strtok(line, " ");
do {
oldnums[n++] = atoi(st);
} while
((st = strtok((char *) NULL, " ")) != 0);
break;
case 'n': /* use following letters as text of new lines */
for (n = 0; n < screen_lines(sp); n++)
CharOf(newtext[n][0]) = '.';
for (n = 0; n < screen_lines(sp); n++)
if (line[n + 1] == '\n')
break;
else
CharOf(newtext[n][0]) = line[n + 1];
break;
case 'o': /* use following letters as text of old lines */
for (n = 0; n < screen_lines(sp); n++)
CharOf(oldtext[n][0]) = '.';
for (n = 0; n < screen_lines(sp); n++)
if (line[n + 1] == '\n')
break;
else
CharOf(oldtext[n][0]) = line[n + 1];
break;
case 'd': /* dump state of test arrays */
#ifdef TRACE
_nc_linedump();
#endif
(void) fputs("Old lines: [", stdout);
for (n = 0; n < screen_lines(sp); n++)
putchar(CharOf(oldtext[n][0]));
putchar(']');
putchar('\n');
(void) fputs("New lines: [", stdout);
for (n = 0; n < screen_lines(sp); n++)
putchar(CharOf(newtext[n][0]));
putchar(']');
putchar('\n');
break;
case 'h': /* apply hash mapper and see scroll optimization */
_nc_hash_map();
(void) fputs("Result:\n", stderr);
#ifdef TRACE
_nc_linedump();
#endif
_nc_scroll_optimize();
(void) fputs("Done.\n", stderr);
break;
default:
case '?':
usage();
break;
}
}
exit_curses(EXIT_SUCCESS);
}
#endif /* HASHDEBUG */
/* hashmap.c ends here */
diff --git a/contrib/ncurses/ncurses/tty/lib_mvcur.c b/contrib/ncurses/ncurses/tty/lib_mvcur.c
index 5382b3bfe37b..dd0dc3d9b712 100644
--- a/contrib/ncurses/ncurses/tty/lib_mvcur.c
+++ b/contrib/ncurses/ncurses/tty/lib_mvcur.c
@@ -1,1425 +1,1416 @@
/****************************************************************************
- * Copyright 2018-2019,2020 Thomas E. Dickey *
+ * Copyright 2018-2020,2021 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
/*
** lib_mvcur.c
**
** The routines for moving the physical cursor and scrolling:
**
** void _nc_mvcur_init(void)
**
** void _nc_mvcur_resume(void)
**
** int mvcur(int old_y, int old_x, int new_y, int new_x)
**
** void _nc_mvcur_wrap(void)
**
** Comparisons with older movement optimizers:
** SVr3 curses mvcur() can't use cursor_to_ll or auto_left_margin.
** 4.4BSD curses can't use cuu/cud/cuf/cub/hpa/vpa/tab/cbt for local
** motions. It doesn't use tactics based on auto_left_margin. Weirdly
** enough, it doesn't use its own hardware-scrolling routine to scroll up
** destination lines for out-of-bounds addresses!
** old ncurses optimizer: less accurate cost computations (in fact,
** it was broken and had to be commented out!).
**
** Compile with -DMAIN to build an interactive tester/timer for the movement
** optimizer. You can use it to investigate the optimizer's behavior.
** You can also use it for tuning the formulas used to determine whether
** or not full optimization is attempted.
**
** This code has a nasty tendency to find bugs in terminfo entries, because it
** exercises the non-cup movement capabilities heavily. If you think you've
** found a bug, try deleting subsets of the following capabilities (arranged
** in decreasing order of suspiciousness): it, tab, cbt, hpa, vpa, cuu, cud,
** cuf, cub, cuu1, cud1, cuf1, cub1. It may be that one or more are wrong.
**
** Note: you should expect this code to look like a resource hog in a profile.
** That's because it does a lot of I/O, through the tputs() calls. The I/O
** cost swamps the computation overhead (and as machines get faster, this
** will become even more true). Comments in the test exerciser at the end
** go into detail about tuning and how you can gauge the optimizer's
** effectiveness.
**/
/****************************************************************************
*
* Constants and macros for optimizer tuning.
*
****************************************************************************/
/*
* The average overhead of a full optimization computation in character
* transmission times. If it's too high, the algorithm will be a bit
* over-biased toward using cup rather than local motions; if it's too
* low, the algorithm may spend more time than is strictly optimal
* looking for non-cup motions. Profile the optimizer using the `t'
* command of the exerciser (see below), and round to the nearest integer.
*
* Yes, I (esr) thought about computing expected overhead dynamically, say
* by derivation from a running average of optimizer times. But the
* whole point of this optimization is to *decrease* the frequency of
* system calls. :-)
*/
#define COMPUTE_OVERHEAD 1 /* I use a 90MHz Pentium @ 9.6Kbps */
/*
* LONG_DIST is the distance we consider to be just as costly to move over as a
* cup sequence is to emit. In other words, it's the length of a cup sequence
* adjusted for average computation overhead. The magic number is the length
* of "\033[yy;xxH", the typical cup sequence these days.
*/
#define LONG_DIST (8 - COMPUTE_OVERHEAD)
/*
* Tell whether a motion is optimizable by local motions. Needs to be cheap to
* compute. In general, all the fast moves go to either the right or left edge
* of the screen. So any motion to a location that is (a) further away than
* LONG_DIST and (b) further inward from the right or left edge than LONG_DIST,
* we'll consider nonlocal.
*/
#define NOT_LOCAL(sp, fy, fx, ty, tx) ((tx > LONG_DIST) \
&& (tx < screen_columns(sp) - 1 - LONG_DIST) \
&& (abs(ty-fy) + abs(tx-fx) > LONG_DIST))
/****************************************************************************
*
* External interfaces
*
****************************************************************************/
/*
* For this code to work OK, the following components must live in the
* screen structure:
*
* int _char_padding; // cost of character put
* int _cr_cost; // cost of (carriage_return)
* int _cup_cost; // cost of (cursor_address)
* int _home_cost; // cost of (cursor_home)
* int _ll_cost; // cost of (cursor_to_ll)
*#if USE_HARD_TABS
* int _ht_cost; // cost of (tab)
* int _cbt_cost; // cost of (back_tab)
*#endif USE_HARD_TABS
* int _cub1_cost; // cost of (cursor_left)
* int _cuf1_cost; // cost of (cursor_right)
* int _cud1_cost; // cost of (cursor_down)
* int _cuu1_cost; // cost of (cursor_up)
* int _cub_cost; // cost of (parm_cursor_left)
* int _cuf_cost; // cost of (parm_cursor_right)
* int _cud_cost; // cost of (parm_cursor_down)
* int _cuu_cost; // cost of (parm_cursor_up)
* int _hpa_cost; // cost of (column_address)
* int _vpa_cost; // cost of (row_address)
* int _ech_cost; // cost of (erase_chars)
* int _rep_cost; // cost of (repeat_char)
*
* The USE_HARD_TABS switch controls whether it is reliable to use tab/backtabs
* for local motions. On many systems, it's not, due to uncertainties about
* tab delays and whether or not tabs will be expanded in raw mode. If you
* have parm_right_cursor, tab motions don't win you a lot anyhow.
*/
#include <curses.priv.h>
#include <ctype.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_mvcur.c,v 1.151 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_mvcur.c,v 1.155 2021/02/06 13:53:41 tom Exp $")
#define WANT_CHAR(sp, y, x) NewScreen(sp)->_line[y].text[x] /* desired state */
#if NCURSES_SP_FUNCS
#define BAUDRATE(sp) sp->_term->_baudrate /* bits per second */
#else
#define BAUDRATE(sp) cur_term->_baudrate /* bits per second */
#endif
#if defined(MAIN) || defined(NCURSES_TEST)
#include <sys/time.h>
static bool profiling = FALSE;
static float diff;
#endif /* MAIN */
#undef NCURSES_OUTC_FUNC
#define NCURSES_OUTC_FUNC myOutCh
#define OPT_SIZE 512
static int normalized_cost(NCURSES_SP_DCLx const char *const cap, int affcnt);
/****************************************************************************
*
* Initialization/wrapup (including cost pre-computation)
*
****************************************************************************/
#ifdef TRACE
static int
trace_cost_of(NCURSES_SP_DCLx const char *capname, const char *cap, int affcnt)
{
int result = NCURSES_SP_NAME(_nc_msec_cost) (NCURSES_SP_ARGx cap, affcnt);
TR(TRACE_CHARPUT | TRACE_MOVE,
("CostOf %s %d %s", capname, result, _nc_visbuf(cap)));
return result;
}
#define CostOf(cap,affcnt) trace_cost_of(NCURSES_SP_ARGx #cap, cap, affcnt)
static int
trace_normalized_cost(NCURSES_SP_DCLx const char *capname, const char *cap, int affcnt)
{
int result = normalized_cost(NCURSES_SP_ARGx cap, affcnt);
TR(TRACE_CHARPUT | TRACE_MOVE,
("NormalizedCost %s %d %s", capname, result, _nc_visbuf(cap)));
return result;
}
#define NormalizedCost(cap,affcnt) trace_normalized_cost(NCURSES_SP_ARGx #cap, cap, affcnt)
#else
#define CostOf(cap,affcnt) NCURSES_SP_NAME(_nc_msec_cost)(NCURSES_SP_ARGx cap, affcnt)
#define NormalizedCost(cap,affcnt) normalized_cost(NCURSES_SP_ARGx cap, affcnt)
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(_nc_msec_cost) (NCURSES_SP_DCLx const char *const cap, int affcnt)
/* compute the cost of a given operation */
{
if (cap == 0)
return (INFINITY);
else {
const char *cp;
float cum_cost = 0.0;
for (cp = cap; *cp; cp++) {
/* extract padding, either mandatory or required */
if (cp[0] == '$' && cp[1] == '<' && strchr(cp, '>')) {
float number = 0.0;
for (cp += 2; *cp != '>'; cp++) {
if (isdigit(UChar(*cp)))
number = number * 10 + (float) (*cp - '0');
else if (*cp == '*')
number *= (float) affcnt;
else if (*cp == '.' && (*++cp != '>') && isdigit(UChar(*cp)))
number += (float) ((*cp - '0') / 10.0);
}
#if NCURSES_NO_PADDING
if (!GetNoPadding(SP_PARM))
#endif
cum_cost += number * 10;
} else if (SP_PARM) {
cum_cost += (float) SP_PARM->_char_padding;
}
}
return ((int) cum_cost);
}
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
_nc_msec_cost(const char *const cap, int affcnt)
{
return NCURSES_SP_NAME(_nc_msec_cost) (CURRENT_SCREEN, cap, affcnt);
}
#endif
static int
normalized_cost(NCURSES_SP_DCLx const char *const cap, int affcnt)
/* compute the effective character-count for an operation (round up) */
{
int cost = NCURSES_SP_NAME(_nc_msec_cost) (NCURSES_SP_ARGx cap, affcnt);
if (cost != INFINITY)
cost = (cost + SP_PARM->_char_padding - 1) / SP_PARM->_char_padding;
return cost;
}
static void
reset_scroll_region(NCURSES_SP_DCL0)
/* Set the scroll-region to a known state (the default) */
{
if (change_scroll_region) {
NCURSES_PUTP2("change_scroll_region",
- TPARM_2(change_scroll_region,
- 0, screen_lines(SP_PARM) - 1));
+ TIPARM_2(change_scroll_region,
+ 0, screen_lines(SP_PARM) - 1));
}
}
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_mvcur_resume) (NCURSES_SP_DCL0)
/* what to do at initialization time and after each shellout */
{
if (!SP_PARM || !IsTermInfo(SP_PARM))
return;
/* initialize screen for cursor access */
if (enter_ca_mode) {
NCURSES_PUTP2("enter_ca_mode", enter_ca_mode);
}
/*
* Doing this here rather than in _nc_mvcur_wrap() ensures that
* ncurses programs will see a reset scroll region even if a
* program that messed with it died ungracefully.
*
* This also undoes the effects of terminal init strings that assume
* they know the screen size. This is useful when you're running
* a vt100 emulation through xterm.
*/
reset_scroll_region(NCURSES_SP_ARG);
SP_PARM->_cursrow = SP_PARM->_curscol = -1;
/* restore cursor shape */
if (SP_PARM->_cursor != -1) {
int cursor = SP_PARM->_cursor;
SP_PARM->_cursor = -1;
NCURSES_SP_NAME(curs_set) (NCURSES_SP_ARGx cursor);
}
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
_nc_mvcur_resume(void)
{
NCURSES_SP_NAME(_nc_mvcur_resume) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_mvcur_init) (NCURSES_SP_DCL0)
/* initialize the cost structure */
{
if (SP_PARM->_ofp && NC_ISATTY(fileno(SP_PARM->_ofp))) {
SP_PARM->_char_padding = ((BAUDBYTE * 1000 * 10)
/ (BAUDRATE(SP_PARM) > 0
? BAUDRATE(SP_PARM)
: 9600));
} else {
SP_PARM->_char_padding = 1; /* must be nonzero */
}
if (SP_PARM->_char_padding <= 0)
SP_PARM->_char_padding = 1; /* must be nonzero */
TR(TRACE_CHARPUT | TRACE_MOVE, ("char_padding %d msecs", SP_PARM->_char_padding));
/* non-parameterized local-motion strings */
SP_PARM->_cr_cost = CostOf(carriage_return, 0);
SP_PARM->_home_cost = CostOf(cursor_home, 0);
SP_PARM->_ll_cost = CostOf(cursor_to_ll, 0);
#if USE_HARD_TABS
if (getenv("NCURSES_NO_HARD_TABS") == 0
&& dest_tabs_magic_smso == 0
&& HasHardTabs()) {
SP_PARM->_ht_cost = CostOf(tab, 0);
SP_PARM->_cbt_cost = CostOf(back_tab, 0);
} else {
SP_PARM->_ht_cost = INFINITY;
SP_PARM->_cbt_cost = INFINITY;
}
#endif /* USE_HARD_TABS */
SP_PARM->_cub1_cost = CostOf(cursor_left, 0);
SP_PARM->_cuf1_cost = CostOf(cursor_right, 0);
SP_PARM->_cud1_cost = CostOf(cursor_down, 0);
SP_PARM->_cuu1_cost = CostOf(cursor_up, 0);
SP_PARM->_smir_cost = CostOf(enter_insert_mode, 0);
SP_PARM->_rmir_cost = CostOf(exit_insert_mode, 0);
SP_PARM->_ip_cost = 0;
if (insert_padding) {
SP_PARM->_ip_cost = CostOf(insert_padding, 0);
}
/*
* Assumption: if the terminal has memory_relative addressing, the
* initialization strings or smcup will set single-page mode so we
* can treat it like absolute screen addressing. This seems to be true
* for all cursor_mem_address terminal types in the terminfo database.
*/
SP_PARM->_address_cursor = cursor_address ? cursor_address : cursor_mem_address;
/*
* Parametrized local-motion strings. This static cost computation
* depends on the following assumptions:
*
* (1) They never have * padding. In the entire master terminfo database
* as of March 1995, only the obsolete Zenith Z-100 pc violates this.
* (Proportional padding is found mainly in insert, delete and scroll
* capabilities).
*
* (2) The average case of cup has two two-digit parameters. Strictly,
* the average case for a 24 * 80 screen has ((10*10*(1 + 1)) +
* (14*10*(1 + 2)) + (10*70*(2 + 1)) + (14*70*4)) / (24*80) = 3.458
* digits of parameters. On a 25x80 screen the average is 3.6197.
* On larger screens the value gets much closer to 4.
*
* (3) The average case of cub/cuf/hpa/ech/rep has 2 digits of parameters
* (strictly, (((10 * 1) + (70 * 2)) / 80) = 1.8750).
*
* (4) The average case of cud/cuu/vpa has 2 digits of parameters
* (strictly, (((10 * 1) + (14 * 2)) / 24) = 1.5833).
*
* All these averages depend on the assumption that all parameter values
* are equally probable.
*/
- SP_PARM->_cup_cost = CostOf(TPARM_2(SP_PARM->_address_cursor, 23, 23), 1);
- SP_PARM->_cub_cost = CostOf(TPARM_1(parm_left_cursor, 23), 1);
- SP_PARM->_cuf_cost = CostOf(TPARM_1(parm_right_cursor, 23), 1);
- SP_PARM->_cud_cost = CostOf(TPARM_1(parm_down_cursor, 23), 1);
- SP_PARM->_cuu_cost = CostOf(TPARM_1(parm_up_cursor, 23), 1);
- SP_PARM->_hpa_cost = CostOf(TPARM_1(column_address, 23), 1);
- SP_PARM->_vpa_cost = CostOf(TPARM_1(row_address, 23), 1);
+ SP_PARM->_cup_cost = CostOf(TIPARM_2(SP_PARM->_address_cursor, 23, 23), 1);
+ SP_PARM->_cub_cost = CostOf(TIPARM_1(parm_left_cursor, 23), 1);
+ SP_PARM->_cuf_cost = CostOf(TIPARM_1(parm_right_cursor, 23), 1);
+ SP_PARM->_cud_cost = CostOf(TIPARM_1(parm_down_cursor, 23), 1);
+ SP_PARM->_cuu_cost = CostOf(TIPARM_1(parm_up_cursor, 23), 1);
+ SP_PARM->_hpa_cost = CostOf(TIPARM_1(column_address, 23), 1);
+ SP_PARM->_vpa_cost = CostOf(TIPARM_1(row_address, 23), 1);
/* non-parameterized screen-update strings */
SP_PARM->_ed_cost = NormalizedCost(clr_eos, 1);
SP_PARM->_el_cost = NormalizedCost(clr_eol, 1);
SP_PARM->_el1_cost = NormalizedCost(clr_bol, 1);
SP_PARM->_dch1_cost = NormalizedCost(delete_character, 1);
SP_PARM->_ich1_cost = NormalizedCost(insert_character, 1);
/*
* If this is a bce-terminal, we want to bias the choice so we use clr_eol
* rather than spaces at the end of a line.
*/
if (back_color_erase)
SP_PARM->_el_cost = 0;
/* parameterized screen-update strings */
- SP_PARM->_dch_cost = NormalizedCost(TPARM_1(parm_dch, 23), 1);
- SP_PARM->_ich_cost = NormalizedCost(TPARM_1(parm_ich, 23), 1);
- SP_PARM->_ech_cost = NormalizedCost(TPARM_1(erase_chars, 23), 1);
- SP_PARM->_rep_cost = NormalizedCost(TPARM_2(repeat_char, ' ', 23), 1);
-
- SP_PARM->_cup_ch_cost = NormalizedCost(
- TPARM_2(SP_PARM->_address_cursor,
- 23, 23),
- 1);
- SP_PARM->_hpa_ch_cost = NormalizedCost(TPARM_1(column_address, 23), 1);
- SP_PARM->_cuf_ch_cost = NormalizedCost(TPARM_1(parm_right_cursor, 23), 1);
+ SP_PARM->_dch_cost = NormalizedCost(TIPARM_1(parm_dch, 23), 1);
+ SP_PARM->_ich_cost = NormalizedCost(TIPARM_1(parm_ich, 23), 1);
+ SP_PARM->_ech_cost = NormalizedCost(TIPARM_1(erase_chars, 23), 1);
+ SP_PARM->_rep_cost = NormalizedCost(TIPARM_2(repeat_char, ' ', 23), 1);
+
+ SP_PARM->_cup_ch_cost = NormalizedCost(TIPARM_2(SP_PARM->_address_cursor,
+ 23, 23),
+ 1);
+ SP_PARM->_hpa_ch_cost = NormalizedCost(TIPARM_1(column_address, 23), 1);
+ SP_PARM->_cuf_ch_cost = NormalizedCost(TIPARM_1(parm_right_cursor, 23), 1);
SP_PARM->_inline_cost = min(SP_PARM->_cup_ch_cost,
min(SP_PARM->_hpa_ch_cost,
SP_PARM->_cuf_ch_cost));
/*
* If save_cursor is used within enter_ca_mode, we should not use it for
* scrolling optimization, since the corresponding restore_cursor is not
* nested on the various terminals (vt100, xterm, etc.) which use this
* feature.
*/
if (save_cursor != 0
&& enter_ca_mode != 0
&& strstr(enter_ca_mode, save_cursor) != 0) {
T(("...suppressed sc/rc capability due to conflict with smcup/rmcup"));
save_cursor = 0;
restore_cursor = 0;
}
/*
* A different, possibly better way to arrange this would be to set the
* SCREEN's _endwin at window initialization time and let this be called by
* doupdate's return-from-shellout code.
*/
NCURSES_SP_NAME(_nc_mvcur_resume) (NCURSES_SP_ARG);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
_nc_mvcur_init(void)
{
NCURSES_SP_NAME(_nc_mvcur_init) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_mvcur_wrap) (NCURSES_SP_DCL0)
/* wrap up cursor-addressing mode */
{
/* leave cursor at screen bottom */
TINFO_MVCUR(NCURSES_SP_ARGx -1, -1, screen_lines(SP_PARM) - 1, 0);
if (!SP_PARM || !IsTermInfo(SP_PARM))
return;
/* set cursor to normal mode */
if (SP_PARM->_cursor != -1) {
int cursor = SP_PARM->_cursor;
NCURSES_SP_NAME(curs_set) (NCURSES_SP_ARGx 1);
SP_PARM->_cursor = cursor;
}
if (exit_ca_mode) {
NCURSES_PUTP2("exit_ca_mode", exit_ca_mode);
}
/*
* Reset terminal's tab counter. There's a long-time bug that
* if you exit a "curses" program such as vi or more, tab
* forward, and then backspace, the cursor doesn't go to the
* right place. The problem is that the kernel counts the
* escape sequences that reset things as column positions.
* Utter a \r to reset this invisibly.
*/
NCURSES_SP_NAME(_nc_outch) (NCURSES_SP_ARGx '\r');
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
_nc_mvcur_wrap(void)
{
NCURSES_SP_NAME(_nc_mvcur_wrap) (CURRENT_SCREEN);
}
#endif
/****************************************************************************
*
* Optimized cursor movement
*
****************************************************************************/
/*
* Perform repeated-append, returning cost
*/
static NCURSES_INLINE int
repeated_append(string_desc * target, int total, int num, int repeat, const char *src)
{
size_t need = (size_t) repeat * strlen(src);
if (need < target->s_size) {
while (repeat-- > 0) {
if (_nc_safe_strcat(target, src)) {
total += num;
} else {
total = INFINITY;
break;
}
}
} else {
total = INFINITY;
}
return total;
}
#ifndef NO_OPTIMIZE
#define NEXTTAB(fr) (fr + init_tabs - (fr % init_tabs))
/*
* Assume back_tab (CBT) does not wrap backwards at the left margin, return
* a negative value at that point to simplify the loop.
*/
#define LASTTAB(fr) ((fr > 0) ? ((fr - 1) / init_tabs) * init_tabs : -1)
static int
relative_move(NCURSES_SP_DCLx
string_desc * target,
int from_y,
int from_x,
int to_y,
int to_x,
int ovw)
/* move via local motions (cuu/cuu1/cud/cud1/cub1/cub/cuf1/cuf/vpa/hpa) */
{
string_desc save;
int n, vcost = 0, hcost = 0;
(void) _nc_str_copy(&save, target);
if (to_y != from_y) {
vcost = INFINITY;
if (row_address != 0
- && _nc_safe_strcat(target, TPARM_1(row_address, to_y))) {
+ && _nc_safe_strcat(target, TIPARM_1(row_address, to_y))) {
vcost = SP_PARM->_vpa_cost;
}
if (to_y > from_y) {
n = (to_y - from_y);
if (parm_down_cursor
&& SP_PARM->_cud_cost < vcost
&& _nc_safe_strcat(_nc_str_copy(target, &save),
- TPARM_1(parm_down_cursor, n))) {
+ TIPARM_1(parm_down_cursor, n))) {
vcost = SP_PARM->_cud_cost;
}
if (cursor_down
- && (*cursor_down != '\n' || SP_PARM->_nl)
+ && (*cursor_down != '\n')
&& (n * SP_PARM->_cud1_cost < vcost)) {
vcost = repeated_append(_nc_str_copy(target, &save), 0,
SP_PARM->_cud1_cost, n, cursor_down);
}
} else { /* (to_y < from_y) */
n = (from_y - to_y);
if (parm_up_cursor
&& SP_PARM->_cuu_cost < vcost
&& _nc_safe_strcat(_nc_str_copy(target, &save),
- TPARM_1(parm_up_cursor, n))) {
+ TIPARM_1(parm_up_cursor, n))) {
vcost = SP_PARM->_cuu_cost;
}
if (cursor_up && (n * SP_PARM->_cuu1_cost < vcost)) {
vcost = repeated_append(_nc_str_copy(target, &save), 0,
SP_PARM->_cuu1_cost, n, cursor_up);
}
}
if (vcost == INFINITY)
return (INFINITY);
}
save = *target;
if (to_x != from_x) {
char str[OPT_SIZE];
string_desc check;
hcost = INFINITY;
if (column_address
&& _nc_safe_strcat(_nc_str_copy(target, &save),
- TPARM_1(column_address, to_x))) {
+ TIPARM_1(column_address, to_x))) {
hcost = SP_PARM->_hpa_cost;
}
if (to_x > from_x) {
n = to_x - from_x;
if (parm_right_cursor
&& SP_PARM->_cuf_cost < hcost
&& _nc_safe_strcat(_nc_str_copy(target, &save),
- TPARM_1(parm_right_cursor, n))) {
+ TIPARM_1(parm_right_cursor, n))) {
hcost = SP_PARM->_cuf_cost;
}
if (cursor_right) {
int lhcost = 0;
(void) _nc_str_init(&check, str, sizeof(str));
#if USE_HARD_TABS
/* use hard tabs, if we have them, to do as much as possible */
if (init_tabs > 0 && tab) {
int nxt, fr;
for (fr = from_x; (nxt = NEXTTAB(fr)) <= to_x; fr = nxt) {
lhcost = repeated_append(&check, lhcost,
SP_PARM->_ht_cost, 1, tab);
if (lhcost == INFINITY)
break;
}
n = to_x - fr;
from_x = fr;
}
#endif /* USE_HARD_TABS */
if (n <= 0 || n >= (int) check.s_size)
ovw = FALSE;
#if BSD_TPUTS
/*
* If we're allowing BSD-style padding in tputs, don't generate
* a string with a leading digit. Otherwise, that will be
* interpreted as a padding value rather than sent to the
* screen.
*/
if (ovw
&& n > 0
&& n < (int) check.s_size
&& vcost == 0
&& str[0] == '\0') {
int wanted = CharOf(WANT_CHAR(SP_PARM, to_y, from_x));
if (is8bits(wanted) && isdigit(wanted))
ovw = FALSE;
}
#endif
/*
* If we have no attribute changes, overwrite is cheaper.
* Note: must suppress this by passing in ovw = FALSE whenever
* WANT_CHAR would return invalid data. In particular, this
* is true between the time a hardware scroll has been done
* and the time the structure WANT_CHAR would access has been
* updated.
*/
if (ovw) {
int i;
for (i = 0; i < n; i++) {
NCURSES_CH_T ch = WANT_CHAR(SP_PARM, to_y, from_x + i);
if (!SameAttrOf(ch, SCREEN_ATTRS(SP_PARM))
#if USE_WIDEC_SUPPORT
|| !Charable(ch)
#endif
) {
ovw = FALSE;
break;
}
}
}
if (ovw) {
int i;
for (i = 0; i < n; i++)
*check.s_tail++ = (char) CharOf(WANT_CHAR(SP_PARM, to_y,
from_x + i));
*check.s_tail = '\0';
check.s_size -= (size_t) n;
lhcost += n * SP_PARM->_char_padding;
} else {
lhcost = repeated_append(&check, lhcost, SP_PARM->_cuf1_cost,
n, cursor_right);
}
if (lhcost < hcost
&& _nc_safe_strcat(_nc_str_copy(target, &save), str)) {
hcost = lhcost;
}
}
} else { /* (to_x < from_x) */
n = from_x - to_x;
if (parm_left_cursor
&& SP_PARM->_cub_cost < hcost
&& _nc_safe_strcat(_nc_str_copy(target, &save),
- TPARM_1(parm_left_cursor, n))) {
+ TIPARM_1(parm_left_cursor, n))) {
hcost = SP_PARM->_cub_cost;
}
if (cursor_left) {
int lhcost = 0;
(void) _nc_str_init(&check, str, sizeof(str));
#if USE_HARD_TABS
if (init_tabs > 0 && back_tab) {
int nxt, fr;
for (fr = from_x; (nxt = LASTTAB(fr)) >= to_x; fr = nxt) {
lhcost = repeated_append(&check, lhcost,
SP_PARM->_cbt_cost,
1, back_tab);
if (lhcost == INFINITY)
break;
}
n = fr - to_x;
}
#endif /* USE_HARD_TABS */
lhcost = repeated_append(&check, lhcost,
SP_PARM->_cub1_cost,
n, cursor_left);
if (lhcost < hcost
&& _nc_safe_strcat(_nc_str_copy(target, &save), str)) {
hcost = lhcost;
}
}
}
if (hcost == INFINITY)
return (INFINITY);
}
return (vcost + hcost);
}
#endif /* !NO_OPTIMIZE */
/*
* With the machinery set up above, it's conceivable that
* onscreen_mvcur could be modified into a recursive function that does
* an alpha-beta search of motion space, as though it were a chess
* move tree, with the weight function being boolean and the search
* depth equated to length of string. However, this would jack up the
* computation cost a lot, especially on terminals without a cup
* capability constraining the search tree depth. So we settle for
* the simpler method below.
*/
static NCURSES_INLINE int
onscreen_mvcur(NCURSES_SP_DCLx
int yold, int xold,
int ynew, int xnew, int ovw,
NCURSES_SP_OUTC myOutCh)
/* onscreen move from (yold, xold) to (ynew, xnew) */
{
string_desc result;
char buffer[OPT_SIZE];
int tactic = 0, newcost, usecost = INFINITY;
int t5_cr_cost;
#if defined(MAIN) || defined(NCURSES_TEST)
struct timeval before, after;
gettimeofday(&before, NULL);
#endif /* MAIN */
#define NullResult _nc_str_null(&result, sizeof(buffer))
#define InitResult _nc_str_init(&result, buffer, sizeof(buffer))
/* tactic #0: use direct cursor addressing */
- if (_nc_safe_strcpy(InitResult, TPARM_2(SP_PARM->_address_cursor, ynew, xnew))) {
+ if (_nc_safe_strcpy(InitResult, TIPARM_2(SP_PARM->_address_cursor,
+ ynew, xnew))) {
tactic = 0;
usecost = SP_PARM->_cup_cost;
#if defined(TRACE) || defined(NCURSES_TEST)
if (!(_nc_optimize_enable & OPTIMIZE_MVCUR))
goto nonlocal;
#endif /* TRACE */
/*
* We may be able to tell in advance that the full optimization
* will probably not be worth its overhead. Also, don't try to
* use local movement if the current attribute is anything but
* A_NORMAL...there are just too many ways this can screw up
* (like, say, local-movement \n getting mapped to some obscure
* character because A_ALTCHARSET is on).
*/
if (yold == -1 || xold == -1 || NOT_LOCAL(SP_PARM, yold, xold, ynew, xnew)) {
#if defined(MAIN) || defined(NCURSES_TEST)
if (!profiling) {
(void) fputs("nonlocal\n", stderr);
goto nonlocal; /* always run the optimizer if profiling */
}
#else
goto nonlocal;
#endif /* MAIN */
}
}
#ifndef NO_OPTIMIZE
/* tactic #1: use local movement */
if (yold != -1 && xold != -1
&& ((newcost = relative_move(NCURSES_SP_ARGx
NullResult,
yold, xold,
ynew, xnew, ovw)) != INFINITY)
&& newcost < usecost) {
tactic = 1;
usecost = newcost;
}
/* tactic #2: use carriage-return + local movement */
if (yold != -1 && carriage_return
&& ((newcost = relative_move(NCURSES_SP_ARGx
NullResult,
yold, 0,
ynew, xnew, ovw)) != INFINITY)
&& SP_PARM->_cr_cost + newcost < usecost) {
tactic = 2;
usecost = SP_PARM->_cr_cost + newcost;
}
/* tactic #3: use home-cursor + local movement */
if (cursor_home
&& ((newcost = relative_move(NCURSES_SP_ARGx
NullResult,
0, 0,
ynew, xnew, ovw)) != INFINITY)
&& SP_PARM->_home_cost + newcost < usecost) {
tactic = 3;
usecost = SP_PARM->_home_cost + newcost;
}
/* tactic #4: use home-down + local movement */
if (cursor_to_ll
&& ((newcost = relative_move(NCURSES_SP_ARGx
NullResult,
screen_lines(SP_PARM) - 1, 0,
ynew, xnew, ovw)) != INFINITY)
&& SP_PARM->_ll_cost + newcost < usecost) {
tactic = 4;
usecost = SP_PARM->_ll_cost + newcost;
}
/*
* tactic #5: use left margin for wrap to right-hand side,
* unless strange wrap behavior indicated by xenl might hose us.
*/
t5_cr_cost = (xold > 0 ? SP_PARM->_cr_cost : 0);
if (auto_left_margin && !eat_newline_glitch
&& yold > 0 && cursor_left
&& ((newcost = relative_move(NCURSES_SP_ARGx
NullResult,
yold - 1, screen_columns(SP_PARM) - 1,
ynew, xnew, ovw)) != INFINITY)
&& t5_cr_cost + SP_PARM->_cub1_cost + newcost < usecost) {
tactic = 5;
usecost = t5_cr_cost + SP_PARM->_cub1_cost + newcost;
}
/*
* These cases are ordered by estimated relative frequency.
*/
if (tactic)
InitResult;
switch (tactic) {
case 1:
(void) relative_move(NCURSES_SP_ARGx
&result,
yold, xold,
ynew, xnew, ovw);
break;
case 2:
(void) _nc_safe_strcpy(&result, carriage_return);
(void) relative_move(NCURSES_SP_ARGx
&result,
yold, 0,
ynew, xnew, ovw);
break;
case 3:
(void) _nc_safe_strcpy(&result, cursor_home);
(void) relative_move(NCURSES_SP_ARGx
&result, 0, 0,
ynew, xnew, ovw);
break;
case 4:
(void) _nc_safe_strcpy(&result, cursor_to_ll);
(void) relative_move(NCURSES_SP_ARGx
&result,
screen_lines(SP_PARM) - 1, 0,
ynew, xnew, ovw);
break;
case 5:
if (xold > 0)
(void) _nc_safe_strcat(&result, carriage_return);
(void) _nc_safe_strcat(&result, cursor_left);
(void) relative_move(NCURSES_SP_ARGx
&result,
yold - 1, screen_columns(SP_PARM) - 1,
ynew, xnew, ovw);
break;
}
#endif /* !NO_OPTIMIZE */
nonlocal:
#if defined(MAIN) || defined(NCURSES_TEST)
gettimeofday(&after, NULL);
diff = after.tv_usec - before.tv_usec
+ (after.tv_sec - before.tv_sec) * 1000000;
if (!profiling)
(void) fprintf(stderr,
"onscreen: %d microsec, %f 28.8Kbps char-equivalents\n",
(int) diff, diff / 288);
#endif /* MAIN */
if (usecost != INFINITY) {
TR(TRACE_MOVE, ("mvcur tactic %d", tactic));
TPUTS_TRACE("mvcur");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
buffer, 1, myOutCh);
SP_PARM->_cursrow = ynew;
SP_PARM->_curscol = xnew;
return (OK);
} else
return (ERR);
}
/*
* optimized cursor move from (yold, xold) to (ynew, xnew)
*/
static int
_nc_real_mvcur(NCURSES_SP_DCLx
int yold, int xold,
int ynew, int xnew,
NCURSES_SP_OUTC myOutCh,
int ovw)
{
NCURSES_CH_T oldattr;
int code;
- TR(TRACE_CALLS | TRACE_MOVE, (T_CALLED("_nc_tinfo_mvcur(%p,%d,%d,%d,%d)"),
+ TR(TRACE_CALLS | TRACE_MOVE, (T_CALLED("_nc_real_mvcur(%p,%d,%d,%d,%d)"),
(void *) SP_PARM, yold, xold, ynew, xnew));
if (SP_PARM == 0) {
code = ERR;
} else if (yold == ynew && xold == xnew) {
code = OK;
} else {
/*
* Most work here is rounding for terminal boundaries getting the
* column position implied by wraparound or the lack thereof and
* rolling up the screen to get ynew on the screen.
*/
if (xnew >= screen_columns(SP_PARM)) {
ynew += xnew / screen_columns(SP_PARM);
xnew %= screen_columns(SP_PARM);
}
/*
* Force restore even if msgr is on when we're in an alternate
* character set -- these have a strong tendency to screw up the CR &
* LF used for local character motions!
*/
oldattr = SCREEN_ATTRS(SP_PARM);
if ((AttrOf(oldattr) & A_ALTCHARSET)
|| (AttrOf(oldattr) && !move_standout_mode)) {
TR(TRACE_CHARPUT, ("turning off (%#lx) %s before move",
(unsigned long) AttrOf(oldattr),
_traceattr(AttrOf(oldattr))));
VIDPUTS(SP_PARM, A_NORMAL, 0);
}
if (xold >= screen_columns(SP_PARM)) {
- if (SP_PARM->_nl) {
- int l = (xold + 1) / screen_columns(SP_PARM);
+ int l = (xold + 1) / screen_columns(SP_PARM);
- yold += l;
- if (yold >= screen_lines(SP_PARM))
- l -= (yold - screen_lines(SP_PARM) - 1);
+ yold += l;
+ if (yold >= screen_lines(SP_PARM))
+ l -= (yold - screen_lines(SP_PARM) - 1);
- if (l > 0) {
- if (carriage_return) {
- NCURSES_PUTP2("carriage_return", carriage_return);
- } else {
- myOutCh(NCURSES_SP_ARGx '\r');
- }
- xold = 0;
+ if (l > 0) {
+ if (carriage_return) {
+ NCURSES_PUTP2("carriage_return", carriage_return);
+ } else {
+ myOutCh(NCURSES_SP_ARGx '\r');
+ }
+ xold = 0;
- while (l > 0) {
- if (newline) {
- NCURSES_PUTP2("newline", newline);
- } else {
- myOutCh(NCURSES_SP_ARGx '\n');
- }
- l--;
+ while (l > 0) {
+ if (newline) {
+ NCURSES_PUTP2("newline", newline);
+ } else {
+ myOutCh(NCURSES_SP_ARGx '\n');
}
+ l--;
}
- } else {
- /*
- * If caller set nonl(), we cannot really use newlines to
- * position to the next row.
- */
- xold = -1;
- yold = -1;
}
}
if (yold > screen_lines(SP_PARM) - 1)
yold = screen_lines(SP_PARM) - 1;
if (ynew > screen_lines(SP_PARM) - 1)
ynew = screen_lines(SP_PARM) - 1;
/* destination location is on screen now */
code = onscreen_mvcur(NCURSES_SP_ARGx yold, xold, ynew, xnew, ovw, myOutCh);
/*
* Restore attributes if we disabled them before moving.
*/
if (!SameAttrOf(oldattr, SCREEN_ATTRS(SP_PARM))) {
TR(TRACE_CHARPUT, ("turning on (%#lx) %s after move",
(unsigned long) AttrOf(oldattr),
_traceattr(AttrOf(oldattr))));
VIDPUTS(SP_PARM, AttrOf(oldattr), GetPair(oldattr));
}
}
returnCode(code);
}
/*
* These entrypoints are used within the library.
*/
NCURSES_EXPORT(int)
NCURSES_SP_NAME(_nc_mvcur) (NCURSES_SP_DCLx
int yold, int xold,
int ynew, int xnew)
{
int rc;
rc = _nc_real_mvcur(NCURSES_SP_ARGx yold, xold, ynew, xnew,
NCURSES_SP_NAME(_nc_outch),
TRUE);
/*
* With the terminal-driver, we cannot distinguish between internal and
* external calls. Flush the output if the screen has not been
* initialized, e.g., when used from low-level terminfo programs.
*/
if ((SP_PARM != 0) && (SP_PARM->_endwin == ewInitial))
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
return rc;
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
_nc_mvcur(int yold, int xold,
int ynew, int xnew)
{
return NCURSES_SP_NAME(_nc_mvcur) (CURRENT_SCREEN, yold, xold, ynew, xnew);
}
#endif
#if defined(USE_TERM_DRIVER)
/*
* The terminal driver does not support the external "mvcur()".
*/
NCURSES_EXPORT(int)
TINFO_MVCUR(NCURSES_SP_DCLx int yold, int xold, int ynew, int xnew)
{
int rc;
rc = _nc_real_mvcur(NCURSES_SP_ARGx
yold, xold,
ynew, xnew,
NCURSES_SP_NAME(_nc_outch),
TRUE);
if ((SP_PARM != 0) && (SP_PARM->_endwin == ewInitial))
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
return rc;
}
#else /* !USE_TERM_DRIVER */
/*
* These entrypoints support users of the library.
*/
NCURSES_EXPORT(int)
NCURSES_SP_NAME(mvcur) (NCURSES_SP_DCLx int yold, int xold, int ynew,
int xnew)
{
return _nc_real_mvcur(NCURSES_SP_ARGx
yold, xold,
ynew, xnew,
NCURSES_SP_NAME(_nc_putchar),
FALSE);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
mvcur(int yold, int xold, int ynew, int xnew)
{
return NCURSES_SP_NAME(mvcur) (CURRENT_SCREEN, yold, xold, ynew, xnew);
}
#endif
#endif /* USE_TERM_DRIVER */
#if defined(TRACE) || defined(NCURSES_TEST)
NCURSES_EXPORT_VAR(int) _nc_optimize_enable = OPTIMIZE_ALL;
#endif
#if defined(MAIN) || defined(NCURSES_TEST)
/****************************************************************************
*
* Movement optimizer test code
*
****************************************************************************/
#include <tic.h>
#include <dump_entry.h>
#include <time.h>
NCURSES_EXPORT_VAR(const char *) _nc_progname = "mvcur";
static unsigned long xmits;
/* these override lib_tputs.c */
NCURSES_EXPORT(int)
tputs(const char *string, int affcnt GCC_UNUSED, int (*outc) (int) GCC_UNUSED)
/* stub tputs() that dumps sequences in a visible form */
{
if (profiling)
xmits += strlen(string);
else
(void) fputs(_nc_visbuf(string), stdout);
return (OK);
}
NCURSES_EXPORT(int)
putp(const char *string)
{
return (tputs(string, 1, _nc_outch));
}
NCURSES_EXPORT(int)
_nc_outch(int ch)
{
putc(ch, stdout);
return OK;
}
NCURSES_EXPORT(int)
delay_output(int ms GCC_UNUSED)
{
return OK;
}
static char tname[PATH_MAX];
static void
load_term(void)
{
(void) setupterm(tname, STDOUT_FILENO, NULL);
}
static int
roll(int n)
{
int i, j;
i = (RAND_MAX / n) * n;
while ((j = rand()) >= i)
continue;
return (j % n);
}
int
main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
{
_nc_STRCPY(tname, getenv("TERM"), sizeof(tname));
load_term();
_nc_setupscreen(lines, columns, stdout, FALSE, 0);
baudrate();
_nc_mvcur_init();
(void) puts("The mvcur tester. Type ? for help");
fputs("smcup:", stdout);
putchar('\n');
for (;;) {
int fy, fx, ty, tx, n, i;
char buf[BUFSIZ], capname[BUFSIZ];
if (fputs("> ", stdout) == EOF)
break;
if (fgets(buf, sizeof(buf), stdin) == 0)
break;
#define PUTS(s) (void) puts(s)
#define PUTF(s,t) (void) printf(s,t)
if (buf[0] == '?') {
PUTS("? -- display this help message");
PUTS("fy fx ty tx -- (4 numbers) display (fy,fx)->(ty,tx) move");
PUTS("s[croll] n t b m -- display scrolling sequence");
PUTF("r[eload] -- reload terminal info for %s\n",
termname());
PUTS("l[oad] <term> -- load terminal info for type <term>");
PUTS("d[elete] <cap> -- delete named capability");
PUTS("i[nspect] -- display terminal capabilities");
PUTS("c[ost] -- dump cursor-optimization cost table");
PUTS("o[optimize] -- toggle movement optimization");
PUTS("t[orture] <num> -- torture-test with <num> random moves");
PUTS("q[uit] -- quit the program");
} else if (sscanf(buf, "%d %d %d %d", &fy, &fx, &ty, &tx) == 4) {
struct timeval before, after;
putchar('"');
gettimeofday(&before, NULL);
mvcur(fy, fx, ty, tx);
gettimeofday(&after, NULL);
printf("\" (%ld msec)\n",
(long) (after.tv_usec - before.tv_usec
+ (after.tv_sec - before.tv_sec)
* 1000000));
} else if (sscanf(buf, "s %d %d %d %d", &fy, &fx, &ty, &tx) == 4) {
struct timeval before, after;
putchar('"');
gettimeofday(&before, NULL);
_nc_scrolln(fy, fx, ty, tx);
gettimeofday(&after, NULL);
printf("\" (%ld msec)\n",
(long) (after.tv_usec - before.tv_usec + (after.tv_sec -
before.tv_sec)
* 1000000));
} else if (buf[0] == 'r') {
_nc_STRCPY(tname, termname(), sizeof(tname));
load_term();
} else if (sscanf(buf, "l %s", tname) == 1) {
load_term();
} else if (sscanf(buf, "d %s", capname) == 1) {
struct name_table_entry const *np = _nc_find_entry(capname,
_nc_get_hash_table(FALSE));
if (np == NULL)
(void) printf("No such capability as \"%s\"\n", capname);
else {
switch (np->nte_type) {
case BOOLEAN:
cur_term->type.Booleans[np->nte_index] = FALSE;
(void)
printf("Boolean capability `%s' (%d) turned off.\n",
np->nte_name, np->nte_index);
break;
case NUMBER:
cur_term->type.Numbers[np->nte_index] = ABSENT_NUMERIC;
(void) printf("Number capability `%s' (%d) set to -1.\n",
np->nte_name, np->nte_index);
break;
case STRING:
cur_term->type.Strings[np->nte_index] = ABSENT_STRING;
(void) printf("String capability `%s' (%d) deleted.\n",
np->nte_name, np->nte_index);
break;
}
}
} else if (buf[0] == 'i') {
dump_init(NULL, F_TERMINFO, S_TERMINFO,
FALSE, 70, 0, 0, FALSE, FALSE, 0);
dump_entry(&TerminalType(cur_term), FALSE, TRUE, 0, 0);
putchar('\n');
} else if (buf[0] == 'o') {
if (_nc_optimize_enable & OPTIMIZE_MVCUR) {
_nc_optimize_enable &= ~OPTIMIZE_MVCUR;
(void) puts("Optimization is now off.");
} else {
_nc_optimize_enable |= OPTIMIZE_MVCUR;
(void) puts("Optimization is now on.");
}
}
/*
* You can use the `t' test to profile and tune the movement
* optimizer. Use iteration values in three digits or more.
* At above 5000 iterations the profile timing averages are stable
* to within a millisecond or three.
*
* The `overhead' field of the report will help you pick a
* COMPUTE_OVERHEAD figure appropriate for your processor and
* expected line speed. The `total estimated time' is
* computation time plus a character-transmission time
* estimate computed from the number of transmits and the baud
* rate.
*
* Use this together with the `o' command to get a read on the
* optimizer's effectiveness. Compare the total estimated times
* for `t' runs of the same length in both optimized and un-optimized
* modes. As long as the optimized times are less, the optimizer
* is winning.
*/
else if (sscanf(buf, "t %d", &n) == 1) {
float cumtime = 0.0, perchar;
int speeds[] =
{2400, 9600, 14400, 19200, 28800, 38400, 0};
srand((unsigned) (getpid() + time((time_t *) 0)));
profiling = TRUE;
xmits = 0;
for (i = 0; i < n; i++) {
/*
* This does a move test between two random locations,
* Random moves probably short-change the optimizer,
* which will work better on the short moves probably
* typical of doupdate()'s usage pattern. Still,
* until we have better data...
*/
#ifdef FIND_COREDUMP
int from_y = roll(lines);
int to_y = roll(lines);
int from_x = roll(columns);
int to_x = roll(columns);
printf("(%d,%d) -> (%d,%d)\n", from_y, from_x, to_y, to_x);
mvcur(from_y, from_x, to_y, to_x);
#else
mvcur(roll(lines), roll(columns), roll(lines), roll(columns));
#endif /* FIND_COREDUMP */
if (diff)
cumtime += diff;
}
profiling = FALSE;
/*
* Average milliseconds per character optimization time.
* This is the key figure to watch when tuning the optimizer.
*/
perchar = cumtime / n;
(void) printf("%d moves (%ld chars) in %d msec, %f msec each:\n",
n, xmits, (int) cumtime, perchar);
for (i = 0; speeds[i]; i++) {
/*
* Total estimated time for the moves, computation and
* transmission both. Transmission time is an estimate
* assuming 9 bits/char, 8 bits + 1 stop bit.
*/
float totalest = cumtime + xmits * 9 * 1e6 / speeds[i];
/*
* Per-character optimization overhead in character transmits
* at the current speed. Round this to the nearest integer
* to figure COMPUTE_OVERHEAD for the speed.
*/
float overhead = speeds[i] * perchar / 1e6;
(void)
printf("%6d bps: %3.2f char-xmits overhead; total estimated time %15.2f\n",
speeds[i], overhead, totalest);
}
} else if (buf[0] == 'c') {
(void) printf("char padding: %d\n", CURRENT_SCREEN->_char_padding);
(void) printf("cr cost: %d\n", CURRENT_SCREEN->_cr_cost);
(void) printf("cup cost: %d\n", CURRENT_SCREEN->_cup_cost);
(void) printf("home cost: %d\n", CURRENT_SCREEN->_home_cost);
(void) printf("ll cost: %d\n", CURRENT_SCREEN->_ll_cost);
#if USE_HARD_TABS
(void) printf("ht cost: %d\n", CURRENT_SCREEN->_ht_cost);
(void) printf("cbt cost: %d\n", CURRENT_SCREEN->_cbt_cost);
#endif /* USE_HARD_TABS */
(void) printf("cub1 cost: %d\n", CURRENT_SCREEN->_cub1_cost);
(void) printf("cuf1 cost: %d\n", CURRENT_SCREEN->_cuf1_cost);
(void) printf("cud1 cost: %d\n", CURRENT_SCREEN->_cud1_cost);
(void) printf("cuu1 cost: %d\n", CURRENT_SCREEN->_cuu1_cost);
(void) printf("cub cost: %d\n", CURRENT_SCREEN->_cub_cost);
(void) printf("cuf cost: %d\n", CURRENT_SCREEN->_cuf_cost);
(void) printf("cud cost: %d\n", CURRENT_SCREEN->_cud_cost);
(void) printf("cuu cost: %d\n", CURRENT_SCREEN->_cuu_cost);
(void) printf("hpa cost: %d\n", CURRENT_SCREEN->_hpa_cost);
(void) printf("vpa cost: %d\n", CURRENT_SCREEN->_vpa_cost);
} else if (buf[0] == 'x' || buf[0] == 'q')
break;
else
(void) puts("Invalid command.");
}
(void) fputs("rmcup:", stdout);
_nc_mvcur_wrap();
putchar('\n');
return (0);
}
#endif /* MAIN */
/* lib_mvcur.c ends here */
diff --git a/contrib/ncurses/ncurses/tty/lib_twait.c b/contrib/ncurses/ncurses/tty/lib_twait.c
index 3ab168ddd346..a7604b3e293b 100644
--- a/contrib/ncurses/ncurses/tty/lib_twait.c
+++ b/contrib/ncurses/ncurses/tty/lib_twait.c
@@ -1,518 +1,518 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 1998-2015,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
/*
** lib_twait.c
**
** The routine _nc_timed_wait().
**
** (This file was originally written by Eric Raymond; however except for
** comments, none of the original code remains - T.Dickey).
*/
#include <curses.priv.h>
#if defined __HAIKU__ && defined __BEOS__
#undef __BEOS__
#endif
#ifdef __BEOS__
#undef false
#undef true
#include <OS.h>
#endif
#if USE_KLIBC_KBD
#define INCL_KBD
#include <os2.h>
#endif
#if USE_FUNC_POLL
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# endif
#elif HAVE_SELECT
# if HAVE_SYS_TIME_H && HAVE_SYS_TIME_SELECT
# include <sys/time.h>
# endif
# if HAVE_SYS_SELECT_H
# include <sys/select.h>
# endif
#endif
-#ifdef _WIN32
+#if HAVE_SYS_TIME_H
# include <sys/time.h>
#endif
#undef CUR
-MODULE_ID("$Id: lib_twait.c,v 1.74 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_twait.c,v 1.75 2020/02/29 15:46:00 anonymous.maarten Exp $")
static long
_nc_gettime(TimeType * t0, int first)
{
long res;
#if PRECISE_GETTIME
TimeType t1;
gettimeofday(&t1, (struct timezone *) 0);
if (first) {
*t0 = t1;
res = 0;
} else {
/* .tv_sec and .tv_usec are unsigned, be careful when subtracting */
if (t0->tv_usec > t1.tv_usec) {
t1.tv_usec += 1000000; /* Convert 1s in 1e6 microsecs */
t1.tv_sec--;
}
res = (t1.tv_sec - t0->tv_sec) * 1000
+ (t1.tv_usec - t0->tv_usec) / 1000;
}
#else
time_t t1 = time((time_t *) 0);
if (first) {
*t0 = t1;
}
res = (long) ((t1 - *t0) * 1000);
#endif
TR(TRACE_IEVENT, ("%s time: %ld msec", first ? "get" : "elapsed", res));
return res;
}
#ifdef NCURSES_WGETCH_EVENTS
NCURSES_EXPORT(int)
_nc_eventlist_timeout(_nc_eventlist * evl)
{
int event_delay = -1;
if (evl != 0) {
int n;
for (n = 0; n < evl->count; ++n) {
_nc_event *ev = evl->events[n];
if (ev->type == _NC_EVENT_TIMEOUT_MSEC) {
event_delay = (int) ev->data.timeout_msec;
if (event_delay < 0)
event_delay = INT_MAX; /* FIXME Is this defined? */
}
}
}
return event_delay;
}
#endif /* NCURSES_WGETCH_EVENTS */
#if (USE_FUNC_POLL || HAVE_SELECT)
# define MAYBE_UNUSED
#else
# define MAYBE_UNUSED GCC_UNUSED
#endif
#if (USE_FUNC_POLL || HAVE_SELECT)
# define MAYBE_UNUSED
#else
# define MAYBE_UNUSED GCC_UNUSED
#endif
/*
* Wait a specified number of milliseconds, returning nonzero if the timer
* didn't expire before there is activity on the specified file descriptors.
* The file-descriptors are specified by the mode:
* TW_NONE 0 - none (absolute time)
* TW_INPUT 1 - ncurses' normal input-descriptor
* TW_MOUSE 2 - mouse descriptor, if any
* TW_ANY 3 - either input or mouse.
* TW_EVENT 4 -
* Experimental: if NCURSES_WGETCH_EVENTS is defined, (mode & 4) determines
* whether to pay attention to evl argument. If set, the smallest of
* millisecond and of timeout of evl is taken.
*
* We return a mask that corresponds to the mode (e.g., 2 for mouse activity).
*
* If the milliseconds given are -1, the wait blocks until activity on the
* descriptors.
*/
NCURSES_EXPORT(int)
_nc_timed_wait(SCREEN *sp MAYBE_UNUSED,
int mode MAYBE_UNUSED,
int milliseconds,
int *timeleft
EVENTLIST_2nd(_nc_eventlist * evl))
{
int count;
int result = TW_NONE;
TimeType t0;
#if (USE_FUNC_POLL || HAVE_SELECT)
int fd;
#endif
#ifdef NCURSES_WGETCH_EVENTS
int timeout_is_event = 0;
int n;
#endif
#if USE_FUNC_POLL
#define MIN_FDS 2
struct pollfd fd_list[MIN_FDS];
struct pollfd *fds = fd_list;
#elif defined(__BEOS__)
#elif HAVE_SELECT
fd_set set;
#endif
#if USE_KLIBC_KBD
fd_set saved_set;
KBDKEYINFO ki;
struct timeval tv;
#endif
long starttime, returntime;
#ifdef NCURSES_WGETCH_EVENTS
(void) timeout_is_event;
#endif
TR(TRACE_IEVENT, ("start twait: %d milliseconds, mode: %d",
milliseconds, mode));
#ifdef NCURSES_WGETCH_EVENTS
if (mode & TW_EVENT) {
int event_delay = _nc_eventlist_timeout(evl);
if (event_delay >= 0
&& (milliseconds >= event_delay || milliseconds < 0)) {
milliseconds = event_delay;
timeout_is_event = 1;
}
}
#endif
#if PRECISE_GETTIME && HAVE_NANOSLEEP
retry:
#endif
starttime = _nc_gettime(&t0, TRUE);
count = 0;
(void) count;
#ifdef NCURSES_WGETCH_EVENTS
if ((mode & TW_EVENT) && evl)
evl->result_flags = 0;
#endif
#if USE_FUNC_POLL
memset(fd_list, 0, sizeof(fd_list));
#ifdef NCURSES_WGETCH_EVENTS
if ((mode & TW_EVENT) && evl) {
if (fds == fd_list)
fds = typeMalloc(struct pollfd, MIN_FDS + evl->count);
if (fds == 0)
return TW_NONE;
}
#endif
if (mode & TW_INPUT) {
fds[count].fd = sp->_ifd;
fds[count].events = POLLIN;
count++;
}
if ((mode & TW_MOUSE)
&& (fd = sp->_mouse_fd) >= 0) {
fds[count].fd = fd;
fds[count].events = POLLIN;
count++;
}
#ifdef NCURSES_WGETCH_EVENTS
if ((mode & TW_EVENT) && evl) {
for (n = 0; n < evl->count; ++n) {
_nc_event *ev = evl->events[n];
if (ev->type == _NC_EVENT_FILE
&& (ev->data.fev.flags & _NC_EVENT_FILE_READABLE)) {
fds[count].fd = ev->data.fev.fd;
fds[count].events = POLLIN;
count++;
}
}
}
#endif
result = poll(fds, (size_t) count, milliseconds);
#ifdef NCURSES_WGETCH_EVENTS
if ((mode & TW_EVENT) && evl) {
int c;
if (!result)
count = 0;
for (n = 0; n < evl->count; ++n) {
_nc_event *ev = evl->events[n];
if (ev->type == _NC_EVENT_FILE
&& (ev->data.fev.flags & _NC_EVENT_FILE_READABLE)) {
ev->data.fev.result = 0;
for (c = 0; c < count; c++)
if (fds[c].fd == ev->data.fev.fd
&& fds[c].revents & POLLIN) {
ev->data.fev.result |= _NC_EVENT_FILE_READABLE;
evl->result_flags |= _NC_EVENT_FILE_READABLE;
}
} else if (ev->type == _NC_EVENT_TIMEOUT_MSEC
&& !result && timeout_is_event) {
evl->result_flags |= _NC_EVENT_TIMEOUT_MSEC;
}
}
}
#endif
#elif defined(__BEOS__)
/*
* BeOS's select() is declared in socket.h, so the configure script does
* not see it. That's just as well, since that function works only for
* sockets. This (using snooze and ioctl) was distilled from Be's patch
* for ncurses which uses a separate thread to simulate select().
*
* FIXME: the return values from the ioctl aren't very clear if we get
* interrupted.
*
* FIXME: this assumes mode&1 if milliseconds < 0 (see lib_getch.c).
*/
result = TW_NONE;
if (mode & TW_INPUT) {
int step = (milliseconds < 0) ? 0 : 5000;
bigtime_t d;
bigtime_t useconds = milliseconds * 1000;
int n, howmany;
if (useconds <= 0) /* we're here to go _through_ the loop */
useconds = 1;
for (d = 0; d < useconds; d += step) {
n = 0;
howmany = ioctl(0, 'ichr', &n);
if (howmany >= 0 && n > 0) {
result = 1;
break;
}
if (useconds > 1 && step > 0) {
snooze(step);
milliseconds -= (step / 1000);
if (milliseconds <= 0) {
milliseconds = 0;
break;
}
}
}
} else if (milliseconds > 0) {
snooze(milliseconds * 1000);
milliseconds = 0;
}
#elif HAVE_SELECT
/*
* select() modifies the fd_set arguments; do this in the
* loop.
*/
FD_ZERO(&set);
#if !USE_KLIBC_KBD
if (mode & TW_INPUT) {
FD_SET(sp->_ifd, &set);
count = sp->_ifd + 1;
}
#endif
if ((mode & TW_MOUSE)
&& (fd = sp->_mouse_fd) >= 0) {
FD_SET(fd, &set);
count = max(fd, count) + 1;
}
#ifdef NCURSES_WGETCH_EVENTS
if ((mode & TW_EVENT) && evl) {
for (n = 0; n < evl->count; ++n) {
_nc_event *ev = evl->events[n];
if (ev->type == _NC_EVENT_FILE
&& (ev->data.fev.flags & _NC_EVENT_FILE_READABLE)) {
FD_SET(ev->data.fev.fd, &set);
count = max(ev->data.fev.fd + 1, count);
}
}
}
#endif
#if USE_KLIBC_KBD
for (saved_set = set;; set = saved_set) {
if ((mode & TW_INPUT)
&& (sp->_extended_key
|| (KbdPeek(&ki, 0) == 0
&& (ki.fbStatus & KBDTRF_FINAL_CHAR_IN)))) {
FD_ZERO(&set);
FD_SET(sp->_ifd, &set);
result = 1;
break;
}
tv.tv_sec = 0;
tv.tv_usec = (milliseconds == 0) ? 0 : (10 * 1000);
if ((result = select(count, &set, NULL, NULL, &tv)) != 0)
break;
/* Time out ? */
if (milliseconds >= 0 && _nc_gettime(&t0, FALSE) >= milliseconds) {
result = 0;
break;
}
}
#else
if (milliseconds >= 0) {
struct timeval ntimeout;
ntimeout.tv_sec = milliseconds / 1000;
ntimeout.tv_usec = (milliseconds % 1000) * 1000;
result = select(count, &set, NULL, NULL, &ntimeout);
} else {
result = select(count, &set, NULL, NULL, NULL);
}
#endif
#ifdef NCURSES_WGETCH_EVENTS
if ((mode & TW_EVENT) && evl) {
evl->result_flags = 0;
for (n = 0; n < evl->count; ++n) {
_nc_event *ev = evl->events[n];
if (ev->type == _NC_EVENT_FILE
&& (ev->data.fev.flags & _NC_EVENT_FILE_READABLE)) {
ev->data.fev.result = 0;
if (FD_ISSET(ev->data.fev.fd, &set)) {
ev->data.fev.result |= _NC_EVENT_FILE_READABLE;
evl->result_flags |= _NC_EVENT_FILE_READABLE;
}
} else if (ev->type == _NC_EVENT_TIMEOUT_MSEC
&& !result && timeout_is_event)
evl->result_flags |= _NC_EVENT_TIMEOUT_MSEC;
}
}
#endif
#endif /* USE_FUNC_POLL, etc */
returntime = _nc_gettime(&t0, FALSE);
if (milliseconds >= 0)
milliseconds -= (int) (returntime - starttime);
#ifdef NCURSES_WGETCH_EVENTS
if (evl) {
evl->result_flags = 0;
for (n = 0; n < evl->count; ++n) {
_nc_event *ev = evl->events[n];
if (ev->type == _NC_EVENT_TIMEOUT_MSEC) {
long diff = (returntime - starttime);
if (ev->data.timeout_msec <= diff)
ev->data.timeout_msec = 0;
else
ev->data.timeout_msec -= diff;
}
}
}
#endif
#if PRECISE_GETTIME && HAVE_NANOSLEEP
/*
* If the timeout hasn't expired, and we've gotten no data,
* this is probably a system where 'select()' needs to be left
* alone so that it can complete. Make this process sleep,
* then come back for more.
*/
if (result == 0 && milliseconds > 100) {
napms(100); /* FIXME: this won't be right if I recur! */
milliseconds -= 100;
goto retry;
}
#endif
/* return approximate time left in milliseconds */
if (timeleft)
*timeleft = milliseconds;
TR(TRACE_IEVENT, ("end twait: returned %d (%d), remaining time %d msec",
result, errno, milliseconds));
/*
* Both 'poll()' and 'select()' return the number of file descriptors
* that are active. Translate this back to the mask that denotes which
* file-descriptors, so that we don't need all of this system-specific
* code everywhere.
*/
if (result != 0) {
if (result > 0) {
result = 0;
#if USE_FUNC_POLL
for (count = 0; count < MIN_FDS; count++) {
if ((mode & (1 << count))
&& (fds[count].revents & POLLIN)) {
result |= (1 << count);
}
}
#elif defined(__BEOS__)
result = TW_INPUT; /* redundant, but simple */
#elif HAVE_SELECT
if ((mode & TW_MOUSE)
&& (fd = sp->_mouse_fd) >= 0
&& FD_ISSET(fd, &set))
result |= TW_MOUSE;
if ((mode & TW_INPUT)
&& FD_ISSET(sp->_ifd, &set))
result |= TW_INPUT;
#endif
} else
result = 0;
}
#ifdef NCURSES_WGETCH_EVENTS
if ((mode & TW_EVENT) && evl && evl->result_flags)
result |= TW_EVENT;
#endif
#if USE_FUNC_POLL
#ifdef NCURSES_WGETCH_EVENTS
if (fds != fd_list)
free((char *) fds);
#endif
#endif
return (result);
}
diff --git a/contrib/ncurses/ncurses/tty/lib_vidattr.c b/contrib/ncurses/ncurses/tty/lib_vidattr.c
index c752919bf661..15e7397d5dbb 100644
--- a/contrib/ncurses/ncurses/tty/lib_vidattr.c
+++ b/contrib/ncurses/ncurses/tty/lib_vidattr.c
@@ -1,431 +1,431 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2014,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
/*
* vidputs(newmode, outc)
*
* newmode is taken to be the logical 'or' of the symbols in curses.h
* representing graphic renditions. The terminal is set to be in all of
* the given modes, if possible.
*
* if the new attribute is normal
* if exit-alt-char-set exists
* emit it
* emit exit-attribute-mode
* else if set-attributes exists
* use it to set exactly what you want
* else
* if exit-attribute-mode exists
* turn off everything
* else
* turn off those which can be turned off and aren't in
* newmode.
* turn on each mode which should be on and isn't, one by one
*
* NOTE that this algorithm won't achieve the desired mix of attributes
* in some cases, but those are probably just those cases in which it is
* actually impossible, anyway, so...
*
* NOTE that we cannot assume that there's no interaction between color
* and other attribute resets. So each time we reset color (or other
* attributes) we'll have to be prepared to restore the other.
*/
#include <curses.priv.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_vidattr.c,v 1.76 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_vidattr.c,v 1.78 2020/05/27 23:56:32 tom Exp $")
#define doPut(mode) \
TPUTS_TRACE(#mode); \
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx mode, 1, outc)
#define TurnOn(mask, mode) \
if ((turn_on & mask) && mode) { \
TPUTS_TRACE(#mode); \
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx mode, 1, outc); \
}
#define TurnOff(mask, mode) \
if ((turn_off & mask) && mode) { \
TPUTS_TRACE(#mode); \
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx mode, 1, outc); \
turn_off &= ~mask; \
}
/* if there is no current screen, assume we *can* do color */
#define SetColorsIf(why, old_attr) \
if (can_color && (why)) { \
int old_pair = PairNumber(old_attr); \
TR(TRACE_ATTRS, ("old pair = %d -- new pair = %d", old_pair, pair)); \
if ((pair != old_pair) \
|| (fix_pair0 && (pair == 0)) \
|| (reverse ^ ((old_attr & A_REVERSE) != 0))) { \
NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_ARGx \
(short) old_pair, \
(short) pair, \
reverse, outc); \
} \
}
#define PreviousAttr _nc_prescreen.previous_attr
NCURSES_EXPORT(int)
NCURSES_SP_NAME(vidputs) (NCURSES_SP_DCLx
chtype newmode,
NCURSES_SP_OUTC outc)
{
attr_t turn_on, turn_off;
int pair;
bool reverse = FALSE;
bool can_color = (SP_PARM == 0 || SP_PARM->_coloron);
#if NCURSES_EXT_FUNCS
bool fix_pair0 = (SP_PARM != 0 && SP_PARM->_coloron && !SP_PARM->_default_color);
#else
#define fix_pair0 FALSE
#endif
newmode &= A_ATTRIBUTES;
T((T_CALLED("vidputs(%p,%s)"), (void *) SP_PARM, _traceattr(newmode)));
if (!IsValidTIScreen(SP_PARM))
returnCode(ERR);
/* this allows us to go on whether or not newterm() has been called */
if (SP_PARM)
PreviousAttr = AttrOf(SCREEN_ATTRS(SP_PARM));
TR(TRACE_ATTRS, ("previous attribute was %s", _traceattr(PreviousAttr)));
if ((SP_PARM != 0)
&& (magic_cookie_glitch > 0)) {
#if USE_XMC_SUPPORT
static const chtype table[] =
{
A_STANDOUT,
A_UNDERLINE,
A_REVERSE,
A_BLINK,
A_DIM,
A_BOLD,
A_INVIS,
A_PROTECT,
#if USE_ITALIC
A_ITALIC,
#endif
};
unsigned n;
int used = 0;
#ifdef max_attributes /* not in U/Win */
int limit = (max_attributes <= 0) ? 1 : max_attributes;
#else
int limit = 1;
#endif
chtype retain = 0;
/*
* Limit the number of attribute bits set in the newmode according to
* the terminfo max_attributes value.
*/
for (n = 0; n < SIZEOF(table); ++n) {
if ((table[n] & SP_PARM->_ok_attributes) == 0) {
newmode &= ~table[n];
} else if ((table[n] & newmode) != 0) {
if (used++ >= limit) {
newmode &= ~table[n];
if (newmode == retain)
break;
} else {
retain = newmode;
}
}
}
#else
newmode &= ~(SP_PARM->_xmc_suppress);
#endif
TR(TRACE_ATTRS, ("suppressed attribute is %s", _traceattr(newmode)));
}
/*
* If we have a terminal that cannot combine color with video
* attributes, use the colors in preference.
*/
if (((newmode & A_COLOR) != 0
|| fix_pair0)
&& (no_color_video > 0)) {
/*
* If we had chosen the A_xxx definitions to correspond to the
* no_color_video mask, we could simply shift it up and mask off the
* attributes. But we did not (actually copied Solaris' definitions).
* However, this is still simpler/faster than a lookup table.
*
* The 63 corresponds to A_STANDOUT, A_UNDERLINE, A_REVERSE, A_BLINK,
* A_DIM, A_BOLD which are 1:1 with no_color_video. The bits that
* correspond to A_INVIS, A_PROTECT (192) must be shifted up 1 and
* A_ALTCHARSET (256) down 2 to line up. We use the NCURSES_BITS
* macro so this will work properly for the wide-character layout.
*/
unsigned value = (unsigned) no_color_video;
attr_t mask = NCURSES_BITS((value & 63)
| ((value & 192) << 1)
| ((value & 256) >> 2), 8);
if ((mask & A_REVERSE) != 0
&& (newmode & A_REVERSE) != 0) {
reverse = TRUE;
mask &= ~A_REVERSE;
}
newmode &= ~mask;
}
if (newmode == PreviousAttr)
returnCode(OK);
pair = PairNumber(newmode);
if (reverse) {
newmode &= ~A_REVERSE;
}
turn_off = (~newmode & PreviousAttr) & ALL_BUT_COLOR;
turn_on = (newmode & ~(PreviousAttr & TPARM_ATTR)) & ALL_BUT_COLOR;
SetColorsIf(((pair == 0) && !fix_pair0), PreviousAttr);
if (newmode == A_NORMAL) {
if ((PreviousAttr & A_ALTCHARSET) && exit_alt_charset_mode) {
doPut(exit_alt_charset_mode);
PreviousAttr &= ~A_ALTCHARSET;
}
if (PreviousAttr) {
if (exit_attribute_mode) {
doPut(exit_attribute_mode);
} else {
if (!SP_PARM || SP_PARM->_use_rmul) {
TurnOff(A_UNDERLINE, exit_underline_mode);
}
if (!SP_PARM || SP_PARM->_use_rmso) {
TurnOff(A_STANDOUT, exit_standout_mode);
}
#if USE_ITALIC
if (!SP_PARM || SP_PARM->_use_ritm) {
TurnOff(A_ITALIC, exit_italics_mode);
}
#endif
}
PreviousAttr &= ALL_BUT_COLOR;
}
SetColorsIf((pair != 0) || fix_pair0, PreviousAttr);
} else if (set_attributes) {
if (turn_on || turn_off) {
TPUTS_TRACE("set_attributes");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- tparm(set_attributes,
- (newmode & A_STANDOUT) != 0,
- (newmode & A_UNDERLINE) != 0,
- (newmode & A_REVERSE) != 0,
- (newmode & A_BLINK) != 0,
- (newmode & A_DIM) != 0,
- (newmode & A_BOLD) != 0,
- (newmode & A_INVIS) != 0,
- (newmode & A_PROTECT) != 0,
- (newmode & A_ALTCHARSET) != 0),
+ TIPARM_9(set_attributes,
+ (newmode & A_STANDOUT) != 0,
+ (newmode & A_UNDERLINE) != 0,
+ (newmode & A_REVERSE) != 0,
+ (newmode & A_BLINK) != 0,
+ (newmode & A_DIM) != 0,
+ (newmode & A_BOLD) != 0,
+ (newmode & A_INVIS) != 0,
+ (newmode & A_PROTECT) != 0,
+ (newmode & A_ALTCHARSET) != 0),
1, outc);
PreviousAttr &= ALL_BUT_COLOR;
}
#if USE_ITALIC
if (!SP_PARM || SP_PARM->_use_ritm) {
if (turn_on & A_ITALIC) {
TurnOn(A_ITALIC, enter_italics_mode);
} else if (turn_off & A_ITALIC) {
TurnOff(A_ITALIC, exit_italics_mode);
}
}
#endif
SetColorsIf((pair != 0) || fix_pair0, PreviousAttr);
} else {
TR(TRACE_ATTRS, ("turning %s off", _traceattr(turn_off)));
TurnOff(A_ALTCHARSET, exit_alt_charset_mode);
if (!SP_PARM || SP_PARM->_use_rmul) {
TurnOff(A_UNDERLINE, exit_underline_mode);
}
if (!SP_PARM || SP_PARM->_use_rmso) {
TurnOff(A_STANDOUT, exit_standout_mode);
}
#if USE_ITALIC
if (!SP_PARM || SP_PARM->_use_ritm) {
TurnOff(A_ITALIC, exit_italics_mode);
}
#endif
if (turn_off && exit_attribute_mode) {
doPut(exit_attribute_mode);
turn_on |= (newmode & ALL_BUT_COLOR);
PreviousAttr &= ALL_BUT_COLOR;
}
SetColorsIf((pair != 0) || fix_pair0, PreviousAttr);
TR(TRACE_ATTRS, ("turning %s on", _traceattr(turn_on)));
/* *INDENT-OFF* */
TurnOn(A_ALTCHARSET, enter_alt_charset_mode);
TurnOn(A_BLINK, enter_blink_mode);
TurnOn(A_BOLD, enter_bold_mode);
TurnOn(A_DIM, enter_dim_mode);
TurnOn(A_REVERSE, enter_reverse_mode);
TurnOn(A_STANDOUT, enter_standout_mode);
TurnOn(A_PROTECT, enter_protected_mode);
TurnOn(A_INVIS, enter_secure_mode);
TurnOn(A_UNDERLINE, enter_underline_mode);
#if USE_ITALIC
TurnOn(A_ITALIC, enter_italics_mode);
#endif
#if USE_WIDEC_SUPPORT && defined(enter_horizontal_hl_mode)
TurnOn(A_HORIZONTAL, enter_horizontal_hl_mode);
TurnOn(A_LEFT, enter_left_hl_mode);
TurnOn(A_LOW, enter_low_hl_mode);
TurnOn(A_RIGHT, enter_right_hl_mode);
TurnOn(A_TOP, enter_top_hl_mode);
TurnOn(A_VERTICAL, enter_vertical_hl_mode);
#endif
/* *INDENT-ON* */
}
if (reverse)
newmode |= A_REVERSE;
if (SP_PARM)
SetAttr(SCREEN_ATTRS(SP_PARM), newmode);
else
PreviousAttr = newmode;
returnCode(OK);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
vidputs(chtype newmode, NCURSES_OUTC outc)
{
SetSafeOutcWrapper(outc);
return NCURSES_SP_NAME(vidputs) (CURRENT_SCREEN,
newmode,
_nc_outc_wrapper);
}
#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(vidattr) (NCURSES_SP_DCLx chtype newmode)
{
T((T_CALLED("vidattr(%p,%s)"), (void *) SP_PARM, _traceattr(newmode)));
returnCode(NCURSES_SP_NAME(vidputs) (NCURSES_SP_ARGx
newmode,
NCURSES_SP_NAME(_nc_putchar)));
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
vidattr(chtype newmode)
{
return NCURSES_SP_NAME(vidattr) (CURRENT_SCREEN, newmode);
}
#endif
NCURSES_EXPORT(chtype)
NCURSES_SP_NAME(termattrs) (NCURSES_SP_DCL0)
{
chtype attrs = A_NORMAL;
T((T_CALLED("termattrs(%p)"), (void *) SP_PARM));
if (HasTerminal(SP_PARM)) {
#ifdef USE_TERM_DRIVER
attrs = CallDriver(SP_PARM, td_conattr);
#else /* ! USE_TERM_DRIVER */
if (enter_alt_charset_mode)
attrs |= A_ALTCHARSET;
if (enter_blink_mode)
attrs |= A_BLINK;
if (enter_bold_mode)
attrs |= A_BOLD;
if (enter_dim_mode)
attrs |= A_DIM;
if (enter_reverse_mode)
attrs |= A_REVERSE;
if (enter_standout_mode)
attrs |= A_STANDOUT;
if (enter_protected_mode)
attrs |= A_PROTECT;
if (enter_secure_mode)
attrs |= A_INVIS;
if (enter_underline_mode)
attrs |= A_UNDERLINE;
if (SP_PARM->_coloron)
attrs |= A_COLOR;
#if USE_ITALIC
if (enter_italics_mode)
attrs |= A_ITALIC;
#endif
#endif /* USE_TERM_DRIVER */
}
returnChtype(attrs);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(chtype)
termattrs(void)
{
return NCURSES_SP_NAME(termattrs) (CURRENT_SCREEN);
}
#endif
diff --git a/contrib/ncurses/ncurses/tty/tty_update.c b/contrib/ncurses/ncurses/tty/tty_update.c
index 8626c79e69e2..20f9349bd688 100644
--- a/contrib/ncurses/ncurses/tty/tty_update.c
+++ b/contrib/ncurses/ncurses/tty/tty_update.c
@@ -1,2281 +1,2285 @@
/****************************************************************************
- * Copyright 2018-2019,2020 Thomas E. Dickey *
+ * Copyright 2018-2020,2021 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
* and: Juergen Pfeifer 2009 *
****************************************************************************/
/*-----------------------------------------------------------------
*
* lib_doupdate.c
*
* The routine doupdate() and its dependents.
* All physical output is concentrated here (except _nc_outch()
* in lib_tputs.c).
*
*-----------------------------------------------------------------*/
#define NEW_PAIR_INTERNAL 1
#include <curses.priv.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
#if defined __HAIKU__ && defined __BEOS__
#undef __BEOS__
#endif
#ifdef __BEOS__
#undef false
#undef true
#include <OS.h>
#endif
#if defined(TRACE) && HAVE_SYS_TIMES_H && HAVE_TIMES
#define USE_TRACE_TIMES 1
#else
#define USE_TRACE_TIMES 0
#endif
#if HAVE_SYS_TIME_H && HAVE_SYS_TIME_SELECT
#include <sys/time.h>
#endif
#if USE_TRACE_TIMES
#include <sys/times.h>
#endif
#if USE_FUNC_POLL
#elif HAVE_SELECT
#if HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
#endif
#include <ctype.h>
-MODULE_ID("$Id: tty_update.c,v 1.305 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: tty_update.c,v 1.310 2021/02/06 14:24:38 tom Exp $")
/*
* This define controls the line-breakout optimization. Every once in a
* while during screen refresh, we want to check for input and abort the
* update if there's some waiting. CHECK_INTERVAL controls the number of
* changed lines to be emitted between input checks.
*
* Note: Input-check-and-abort is no longer done if the screen is being
* updated from scratch. This is a feature, not a bug.
*/
#define CHECK_INTERVAL 5
#define FILL_BCE(sp) (sp->_coloron && !sp->_default_color && !back_color_erase)
static const NCURSES_CH_T blankchar = NewChar(BLANK_TEXT);
static NCURSES_CH_T normal = NewChar(BLANK_TEXT);
/*
* Enable checking to see if doupdate and friends are tracking the true
* cursor position correctly. NOTE: this is a debugging hack which will
* work ONLY on ANSI-compatible terminals!
*/
/* #define POSITION_DEBUG */
static NCURSES_INLINE NCURSES_CH_T ClrBlank(NCURSES_SP_DCLx WINDOW *win);
#if NCURSES_SP_FUNCS
static int ClrBottom(SCREEN *, int total);
static void ClearScreen(SCREEN *, NCURSES_CH_T blank);
static void ClrUpdate(SCREEN *);
static void DelChar(SCREEN *, int count);
-static void InsStr(SCREEN *, NCURSES_CH_T * line, int count);
+static void InsStr(SCREEN *, NCURSES_CH_T *line, int count);
static void TransformLine(SCREEN *, int const lineno);
#else
static int ClrBottom(int total);
static void ClearScreen(NCURSES_CH_T blank);
static void ClrUpdate(void);
static void DelChar(int count);
-static void InsStr(NCURSES_CH_T * line, int count);
+static void InsStr(NCURSES_CH_T *line, int count);
static void TransformLine(int const lineno);
#endif
#ifdef POSITION_DEBUG
/****************************************************************************
*
* Debugging code. Only works on ANSI-standard terminals.
*
****************************************************************************/
static void
-position_check(NCURSES_SP_DCLx int expected_y, int expected_x, char *legend)
+position_check(NCURSES_SP_DCLx int expected_y, int expected_x, const char *legend)
/* check to see if the real cursor position matches the virtual */
{
char buf[20];
char *s;
int y, x;
if (!_nc_tracing || (expected_y < 0 && expected_x < 0))
return;
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
memset(buf, '\0', sizeof(buf));
NCURSES_PUTP2_FLUSH("cpr", "\033[6n"); /* only works on ANSI-compatibles */
*(s = buf) = 0;
do {
int ask = sizeof(buf) - 1 - (s - buf);
int got = read(0, s, ask);
if (got == 0)
break;
s += got;
} while (strchr(buf, 'R') == 0);
_tracef("probe returned %s", _nc_visbuf(buf));
/* try to interpret as a position report */
if (sscanf(buf, "\033[%d;%dR", &y, &x) != 2) {
_tracef("position probe failed in %s", legend);
} else {
if (expected_x < 0)
expected_x = x - 1;
if (expected_y < 0)
expected_y = y - 1;
if (y - 1 != expected_y || x - 1 != expected_x) {
NCURSES_SP_NAME(beep) (NCURSES_SP_ARG);
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- tparm("\033[%d;%dH",
- expected_y + 1,
- expected_x + 1),
+ TIPARM_2("\033[%d;%dH",
+ expected_y + 1,
+ expected_x + 1),
1, NCURSES_SP_NAME(_nc_outch));
_tracef("position seen (%d, %d) doesn't match expected one (%d, %d) in %s",
y - 1, x - 1, expected_y, expected_x, legend);
} else {
_tracef("position matches OK in %s", legend);
}
}
}
#else
#define position_check(expected_y, expected_x, legend) /* nothing */
#endif /* POSITION_DEBUG */
/****************************************************************************
*
* Optimized update code
*
****************************************************************************/
static NCURSES_INLINE void
GoTo(NCURSES_SP_DCLx int const row, int const col)
{
TR(TRACE_MOVE, ("GoTo(%p, %d, %d) from (%d, %d)",
(void *) SP_PARM, row, col, SP_PARM->_cursrow, SP_PARM->_curscol));
position_check(NCURSES_SP_ARGx
SP_PARM->_cursrow,
SP_PARM->_curscol, "GoTo");
TINFO_MVCUR(NCURSES_SP_ARGx
SP_PARM->_cursrow,
SP_PARM->_curscol,
row, col);
position_check(NCURSES_SP_ARGx
SP_PARM->_cursrow,
SP_PARM->_curscol, "GoTo2");
}
#if !NCURSES_WCWIDTH_GRAPHICS
#define is_wacs_value(ch) (_nc_wacs_width(ch) == 1 && wcwidth(ch) > 1)
#endif /* !NCURSES_WCWIDTH_GRAPHICS */
static NCURSES_INLINE void
PutAttrChar(NCURSES_SP_DCLx CARG_CH_T ch)
{
int chlen = 1;
NCURSES_CH_T my_ch;
#if USE_WIDEC_SUPPORT
PUTC_DATA;
#endif
NCURSES_CH_T tilde;
NCURSES_CH_T attr = CHDEREF(ch);
TR(TRACE_CHARPUT, ("PutAttrChar(%s) at (%d, %d)",
_tracech_t(ch),
SP_PARM->_cursrow, SP_PARM->_curscol));
#if USE_WIDEC_SUPPORT
/*
* If this is not a valid character, there is nothing more to do.
*/
if (isWidecExt(CHDEREF(ch))) {
TR(TRACE_CHARPUT, ("...skip"));
return;
}
/*
* Determine the number of character cells which the 'ch' value will use
* on the screen. It should be at least one.
*/
if ((chlen = _nc_wacs_width(CharOf(CHDEREF(ch)))) <= 0) {
static const NCURSES_CH_T blank = NewChar(BLANK_TEXT);
/*
* If the character falls into any of these special cases, do
* not force the result to a blank:
*
* a) it is printable (this works around a bug in wcwidth()).
* b) use_legacy_coding() has been called to modify the treatment
* of codes 128-255.
* c) the acs_map[] has been initialized to allow codes 0-31
* to be rendered. This supports Linux console's "PC"
* characters. Codes 128-255 are allowed though this is
* not checked.
*/
if (is8bits(CharOf(CHDEREF(ch)))
&& (isprint(CharOf(CHDEREF(ch)))
|| (SP_PARM->_legacy_coding > 0 && CharOf(CHDEREF(ch)) >= 160)
|| (SP_PARM->_legacy_coding > 1 && CharOf(CHDEREF(ch)) >= 128)
|| (AttrOf(attr) & A_ALTCHARSET
&& ((CharOfD(ch) < ACS_LEN
&& SP_PARM->_acs_map != 0
&& SP_PARM->_acs_map[CharOfD(ch)] != 0)
|| (CharOfD(ch) >= 128))))) {
;
} else {
ch = CHREF(blank);
TR(TRACE_CHARPUT, ("forced to blank"));
}
chlen = 1;
}
#endif
if ((AttrOf(attr) & A_ALTCHARSET)
&& SP_PARM->_acs_map != 0
&& ((CharOfD(ch) < ACS_LEN)
#if !NCURSES_WCWIDTH_GRAPHICS
|| is_wacs_value(CharOfD(ch))
#endif
)) {
int c8;
my_ch = CHDEREF(ch); /* work around const param */
c8 = CharOf(my_ch);
#if USE_WIDEC_SUPPORT
/*
* This is crude & ugly, but works most of the time. It checks if the
* acs_chars string specified that we have a mapping for this
* character, and uses the wide-character mapping when we expect the
* normal one to be broken (by mis-design ;-).
*/
if (SP_PARM->_screen_unicode
&& _nc_wacs[CharOf(my_ch)].chars[0]) {
if (SP_PARM->_screen_acs_map[CharOf(my_ch)]) {
if (SP_PARM->_screen_acs_fix) {
RemAttr(attr, A_ALTCHARSET);
my_ch = _nc_wacs[CharOf(my_ch)];
}
} else {
RemAttr(attr, A_ALTCHARSET);
my_ch = _nc_wacs[CharOf(my_ch)];
}
#if !NCURSES_WCWIDTH_GRAPHICS
if (!(AttrOf(attr) & A_ALTCHARSET)) {
chlen = 1;
}
#endif /* !NCURSES_WCWIDTH_GRAPHICS */
} else
#endif
if (!SP_PARM->_screen_acs_map[c8]) {
/*
* If we found no mapping for a given alternate-character set item
* in the terminal description, attempt to use the ASCII fallback
* code which is populated in the _acs_map[] array. If that did
* not correspond to a line-drawing, etc., graphics character, the
* array entry would be empty.
*/
chtype temp = UChar(SP_PARM->_acs_map[c8]);
if (temp) {
RemAttr(attr, A_ALTCHARSET);
SetChar(my_ch, temp, AttrOf(attr));
}
}
/*
* If we (still) have alternate character set, it is the normal 8bit
* flavor. The _screen_acs_map[] array tells if the character was
* really in acs_chars, needed because of the way wide/normal line
* drawing flavors are integrated.
*/
if (AttrOf(attr) & A_ALTCHARSET) {
int j = CharOfD(ch);
chtype temp = UChar(SP_PARM->_acs_map[j]);
if (temp != 0) {
SetChar(my_ch, temp, AttrOf(attr));
} else {
my_ch = CHDEREF(ch);
RemAttr(attr, A_ALTCHARSET);
}
}
ch = CHREF(my_ch);
}
#if USE_WIDEC_SUPPORT && !NCURSES_WCWIDTH_GRAPHICS
else if (chlen > 1 && is_wacs_value(CharOfD(ch))) {
chlen = 1;
}
#endif
if (tilde_glitch && (CharOfD(ch) == L('~'))) {
SetChar(tilde, L('`'), AttrOf(attr));
ch = CHREF(tilde);
}
UpdateAttrs(SP_PARM, attr);
PUTC(CHDEREF(ch));
#if !USE_WIDEC_SUPPORT
COUNT_OUTCHARS(1);
#endif
SP_PARM->_curscol += chlen;
if (char_padding) {
NCURSES_PUTP2("char_padding", char_padding);
}
}
static bool
check_pending(NCURSES_SP_DCL0)
/* check for pending input */
{
bool have_pending = FALSE;
/*
* Only carry out this check when the flag is zero, otherwise we'll
* have the refreshing slow down drastically (or stop) if there's an
* unread character available.
*/
if (SP_PARM->_fifohold != 0)
return FALSE;
if (SP_PARM->_checkfd >= 0) {
#if USE_FUNC_POLL
struct pollfd fds[1];
fds[0].fd = SP_PARM->_checkfd;
fds[0].events = POLLIN;
if (poll(fds, (size_t) 1, 0) > 0) {
have_pending = TRUE;
}
#elif defined(__BEOS__)
/*
* BeOS's select() is declared in socket.h, so the configure script does
* not see it. That's just as well, since that function works only for
* sockets. This (using snooze and ioctl) was distilled from Be's patch
* for ncurses which uses a separate thread to simulate select().
*
* FIXME: the return values from the ioctl aren't very clear if we get
* interrupted.
*/
int n = 0;
int howmany = ioctl(0, 'ichr', &n);
if (howmany >= 0 && n > 0) {
have_pending = TRUE;
}
#elif HAVE_SELECT
fd_set fdset;
struct timeval ktimeout;
ktimeout.tv_sec =
ktimeout.tv_usec = 0;
FD_ZERO(&fdset);
FD_SET(SP_PARM->_checkfd, &fdset);
if (select(SP_PARM->_checkfd + 1, &fdset, NULL, NULL, &ktimeout) != 0) {
have_pending = TRUE;
}
#endif
}
if (have_pending) {
SP_PARM->_fifohold = 5;
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
}
return FALSE;
}
/* put char at lower right corner */
static void
PutCharLR(NCURSES_SP_DCLx const ARG_CH_T ch)
{
if (!auto_right_margin) {
/* we can put the char directly */
PutAttrChar(NCURSES_SP_ARGx ch);
} else if (enter_am_mode && exit_am_mode) {
+ int oldcol = SP_PARM->_curscol;
/* we can suppress automargin */
NCURSES_PUTP2("exit_am_mode", exit_am_mode);
PutAttrChar(NCURSES_SP_ARGx ch);
- SP_PARM->_curscol--;
+ SP_PARM->_curscol = oldcol;
position_check(NCURSES_SP_ARGx
SP_PARM->_cursrow,
SP_PARM->_curscol,
"exit_am_mode");
NCURSES_PUTP2("enter_am_mode", enter_am_mode);
} else if ((enter_insert_mode && exit_insert_mode)
|| insert_character || parm_ich) {
GoTo(NCURSES_SP_ARGx
screen_lines(SP_PARM) - 1,
screen_columns(SP_PARM) - 2);
PutAttrChar(NCURSES_SP_ARGx ch);
GoTo(NCURSES_SP_ARGx
screen_lines(SP_PARM) - 1,
screen_columns(SP_PARM) - 2);
InsStr(NCURSES_SP_ARGx
NewScreen(SP_PARM)->_line[screen_lines(SP_PARM) - 1].text +
screen_columns(SP_PARM) - 2, 1);
}
}
/*
* Wrap the cursor position, i.e., advance to the beginning of the next line.
*/
static void
wrap_cursor(NCURSES_SP_DCL0)
{
if (eat_newline_glitch) {
/*
* xenl can manifest two different ways. The vt100 way is that, when
* you'd expect the cursor to wrap, it stays hung at the right margin
* (on top of the character just emitted) and doesn't wrap until the
* *next* graphic char is emitted. The c100 way is to ignore LF
* received just after an am wrap.
*
* An aggressive way to handle this would be to emit CR/LF after the
* char and then assume the wrap is done, you're on the first position
* of the next line, and the terminal out of its weird state. Here
* it's safe to just tell the code that the cursor is in hyperspace and
* let the next mvcur() call straighten things out.
*/
SP_PARM->_curscol = -1;
SP_PARM->_cursrow = -1;
} else if (auto_right_margin) {
SP_PARM->_curscol = 0;
SP_PARM->_cursrow++;
/*
* We've actually moved - but may have to work around problems with
* video attributes not working.
*/
if (!move_standout_mode && AttrOf(SCREEN_ATTRS(SP_PARM))) {
TR(TRACE_CHARPUT, ("turning off (%#lx) %s before wrapping",
(unsigned long) AttrOf(SCREEN_ATTRS(SP_PARM)),
_traceattr(AttrOf(SCREEN_ATTRS(SP_PARM)))));
VIDPUTS(SP_PARM, A_NORMAL, 0);
}
} else {
SP_PARM->_curscol--;
}
position_check(NCURSES_SP_ARGx
SP_PARM->_cursrow,
SP_PARM->_curscol,
"wrap_cursor");
}
static NCURSES_INLINE void
PutChar(NCURSES_SP_DCLx const ARG_CH_T ch)
/* insert character, handling automargin stuff */
{
if (SP_PARM->_cursrow == screen_lines(SP_PARM) - 1 &&
SP_PARM->_curscol == screen_columns(SP_PARM) - 1) {
PutCharLR(NCURSES_SP_ARGx ch);
} else {
PutAttrChar(NCURSES_SP_ARGx ch);
}
if (SP_PARM->_curscol >= screen_columns(SP_PARM))
wrap_cursor(NCURSES_SP_ARG);
position_check(NCURSES_SP_ARGx
SP_PARM->_cursrow,
SP_PARM->_curscol, "PutChar");
}
/*
* Check whether the given character can be output by clearing commands. This
* includes test for being a space and not including any 'bad' attributes, such
* as A_REVERSE. All attribute flags which don't affect appearance of a space
* or can be output by clearing (A_COLOR in case of bce-terminal) are excluded.
*/
static NCURSES_INLINE bool
can_clear_with(NCURSES_SP_DCLx ARG_CH_T ch)
{
if (!back_color_erase && SP_PARM->_coloron) {
#if NCURSES_EXT_FUNCS
int pair;
if (!SP_PARM->_default_color)
return FALSE;
if (!(isDefaultColor(SP_PARM->_default_fg) &&
isDefaultColor(SP_PARM->_default_bg)))
return FALSE;
if ((pair = GetPair(CHDEREF(ch))) != 0) {
NCURSES_COLOR_T fg, bg;
if (NCURSES_SP_NAME(pair_content) (NCURSES_SP_ARGx
(short) pair,
&fg, &bg) == ERR
|| !(isDefaultColor(fg) && isDefaultColor(bg))) {
return FALSE;
}
}
#else
if (AttrOfD(ch) & A_COLOR)
return FALSE;
#endif
}
return (ISBLANK(CHDEREF(ch)) &&
(AttrOfD(ch) & ~(NONBLANK_ATTR | A_COLOR)) == BLANK_ATTR);
}
/*
* Issue a given span of characters from an array.
* Must be functionally equivalent to:
* for (i = 0; i < num; i++)
* PutChar(ntext[i]);
* but can leave the cursor positioned at the middle of the interval.
*
* Returns: 0 - cursor is at the end of interval
* 1 - cursor is somewhere in the middle
*
* This code is optimized using ech and rep.
*/
static int
-EmitRange(NCURSES_SP_DCLx const NCURSES_CH_T * ntext, int num)
+EmitRange(NCURSES_SP_DCLx const NCURSES_CH_T *ntext, int num)
{
int i;
TR(TRACE_CHARPUT, ("EmitRange %d:%s", num, _nc_viscbuf(ntext, num)));
if (erase_chars || repeat_char) {
while (num > 0) {
int runcount;
NCURSES_CH_T ntext0;
while (num > 1 && !CharEq(ntext[0], ntext[1])) {
PutChar(NCURSES_SP_ARGx CHREF(ntext[0]));
ntext++;
num--;
}
ntext0 = ntext[0];
if (num == 1) {
PutChar(NCURSES_SP_ARGx CHREF(ntext0));
return 0;
}
runcount = 2;
while (runcount < num && CharEq(ntext[runcount], ntext0))
runcount++;
/*
* The cost expression in the middle isn't exactly right.
* _cup_ch_cost is an upper bound on the cost for moving to the
* end of the erased area, but not the cost itself (which we
* can't compute without emitting the move). This may result
* in erase_chars not getting used in some situations for
* which it would be marginally advantageous.
*/
if (erase_chars
&& runcount > SP_PARM->_ech_cost + SP_PARM->_cup_ch_cost
&& can_clear_with(NCURSES_SP_ARGx CHREF(ntext0))) {
UpdateAttrs(SP_PARM, ntext0);
- NCURSES_PUTP2("erase_chars", TPARM_1(erase_chars, runcount));
+ NCURSES_PUTP2("erase_chars", TIPARM_1(erase_chars, runcount));
/*
* If this is the last part of the given interval,
* don't bother moving cursor, since it can be the
* last update on the line.
*/
if (runcount < num) {
GoTo(NCURSES_SP_ARGx
SP_PARM->_cursrow,
SP_PARM->_curscol + runcount);
} else {
return 1; /* cursor stays in the middle */
}
} else if (repeat_char != 0 &&
+#if BSD_TPUTS
+ !isdigit(UChar(CharOf(ntext0))) &&
+#endif
#if USE_WIDEC_SUPPORT
(!SP_PARM->_screen_unicode &&
(CharOf(ntext0) < ((AttrOf(ntext0) & A_ALTCHARSET)
? ACS_LEN
: 256))) &&
#endif
runcount > SP_PARM->_rep_cost) {
NCURSES_CH_T temp;
bool wrap_possible = (SP_PARM->_curscol + runcount >=
screen_columns(SP_PARM));
int rep_count = runcount;
if (wrap_possible)
rep_count--;
UpdateAttrs(SP_PARM, ntext0);
temp = ntext0;
if ((AttrOf(temp) & A_ALTCHARSET) &&
SP_PARM->_acs_map != 0 &&
(SP_PARM->_acs_map[CharOf(temp)] & A_CHARTEXT) != 0) {
SetChar(temp,
(SP_PARM->_acs_map[CharOf(ntext0)] & A_CHARTEXT),
AttrOf(ntext0) | A_ALTCHARSET);
}
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(repeat_char,
- CharOf(temp),
- rep_count),
+ TIPARM_2(repeat_char,
+ CharOf(temp),
+ rep_count),
1,
NCURSES_SP_NAME(_nc_outch));
SP_PARM->_curscol += rep_count;
if (wrap_possible)
PutChar(NCURSES_SP_ARGx CHREF(ntext0));
} else {
for (i = 0; i < runcount; i++)
PutChar(NCURSES_SP_ARGx CHREF(ntext[i]));
}
ntext += runcount;
num -= runcount;
}
return 0;
}
for (i = 0; i < num; i++)
PutChar(NCURSES_SP_ARGx CHREF(ntext[i]));
return 0;
}
/*
* Output the line in the given range [first .. last]
*
* If there's a run of identical characters that's long enough to justify
* cursor movement, use that also.
*
* Returns: same as EmitRange
*/
static int
PutRange(NCURSES_SP_DCLx
- const NCURSES_CH_T * otext,
- const NCURSES_CH_T * ntext,
+ const NCURSES_CH_T *otext,
+ const NCURSES_CH_T *ntext,
int row,
int first, int last)
{
int rc;
TR(TRACE_CHARPUT, ("PutRange(%p, %p, %p, %d, %d, %d)",
(void *) SP_PARM,
(const void *) otext,
(const void *) ntext,
row, first, last));
if (otext != ntext
&& (last - first + 1) > SP_PARM->_inline_cost) {
int i, j, same;
for (j = first, same = 0; j <= last; j++) {
if (!same && isWidecExt(otext[j]))
continue;
if (CharEq(otext[j], ntext[j])) {
same++;
} else {
if (same > SP_PARM->_inline_cost) {
EmitRange(NCURSES_SP_ARGx ntext + first, j - same - first);
GoTo(NCURSES_SP_ARGx row, first = j);
}
same = 0;
}
}
i = EmitRange(NCURSES_SP_ARGx ntext + first, j - same - first);
/*
* Always return 1 for the next GoTo() after a PutRange() if we found
* identical characters at end of interval
*/
rc = (same == 0 ? i : 1);
} else {
rc = EmitRange(NCURSES_SP_ARGx ntext + first, last - first + 1);
}
return rc;
}
/* leave unbracketed here so 'indent' works */
#define MARK_NOCHANGE(win,row) \
win->_line[row].firstchar = _NOCHANGE; \
win->_line[row].lastchar = _NOCHANGE; \
if_USE_SCROLL_HINTS(win->_line[row].oldindex = row)
NCURSES_EXPORT(int)
TINFO_DOUPDATE(NCURSES_SP_DCL0)
{
int i;
int nonempty;
#if USE_TRACE_TIMES
struct tms before, after;
#endif /* USE_TRACE_TIMES */
T((T_CALLED("_nc_tinfo:doupdate(%p)"), (void *) SP_PARM));
_nc_lock_global(update);
if (SP_PARM == 0) {
_nc_unlock_global(update);
returnCode(ERR);
}
#if !USE_REENTRANT
/*
* It is "legal" but unlikely that an application could assign a new
* value to one of the standard windows. Check for that possibility
* and try to recover.
*
* We do not allow applications to assign new values in the reentrant
* model.
*/
#define SyncScreens(internal,exported) \
if (internal == 0) internal = exported; \
if (internal != exported) exported = internal
SyncScreens(CurScreen(SP_PARM), curscr);
SyncScreens(NewScreen(SP_PARM), newscr);
SyncScreens(StdScreen(SP_PARM), stdscr);
#endif
if (CurScreen(SP_PARM) == 0
|| NewScreen(SP_PARM) == 0
|| StdScreen(SP_PARM) == 0) {
_nc_unlock_global(update);
returnCode(ERR);
}
#ifdef TRACE
if (USE_TRACEF(TRACE_UPDATE)) {
if (CurScreen(SP_PARM)->_clear)
_tracef("curscr is clear");
else
_tracedump("curscr", CurScreen(SP_PARM));
_tracedump("newscr", NewScreen(SP_PARM));
_nc_unlock_global(tracef);
}
#endif /* TRACE */
_nc_signal_handler(FALSE);
if (SP_PARM->_fifohold)
SP_PARM->_fifohold--;
#if USE_SIZECHANGE
if ((SP_PARM->_endwin == ewSuspend)
|| _nc_handle_sigwinch(SP_PARM)) {
/*
* This is a transparent extension: XSI does not address it,
* and applications need not know that ncurses can do it.
*
* Check if the terminal size has changed while curses was off
* (this can happen in an xterm, for example), and resize the
* ncurses data structures accordingly.
*/
_nc_update_screensize(SP_PARM);
}
#endif
if (SP_PARM->_endwin == ewSuspend) {
T(("coming back from shell mode"));
NCURSES_SP_NAME(reset_prog_mode) (NCURSES_SP_ARG);
NCURSES_SP_NAME(_nc_mvcur_resume) (NCURSES_SP_ARG);
NCURSES_SP_NAME(_nc_screen_resume) (NCURSES_SP_ARG);
SP_PARM->_mouse_resume(SP_PARM);
SP_PARM->_endwin = ewRunning;
}
#if USE_TRACE_TIMES
/* zero the metering machinery */
RESET_OUTCHARS();
(void) times(&before);
#endif /* USE_TRACE_TIMES */
/*
* This is the support for magic-cookie terminals. The theory: we scan
* the virtual screen looking for attribute turnons. Where we find one,
* check to make sure it's realizable by seeing if the required number of
* un-attributed blanks are present before and after the attributed range;
* try to shift the range boundaries over blanks (not changing the screen
* display) so this becomes true. If it is, shift the beginning attribute
* change appropriately (the end one, if we've gotten this far, is
* guaranteed room for its cookie). If not, nuke the added attributes out
* of the span.
*/
#if USE_XMC_SUPPORT
if (magic_cookie_glitch > 0) {
int j, k;
attr_t rattr = A_NORMAL;
for (i = 0; i < screen_lines(SP_PARM); i++) {
for (j = 0; j < screen_columns(SP_PARM); j++) {
bool failed = FALSE;
NCURSES_CH_T *thisline = NewScreen(SP_PARM)->_line[i].text;
attr_t thisattr = AttrOf(thisline[j]) & SP_PARM->_xmc_triggers;
attr_t turnon = thisattr & ~rattr;
/* is an attribute turned on here? */
if (turnon == 0) {
rattr = thisattr;
continue;
}
TR(TRACE_ATTRS, ("At (%d, %d): from %s...", i, j, _traceattr(rattr)));
TR(TRACE_ATTRS, ("...to %s", _traceattr(turnon)));
/*
* If the attribute change location is a blank with a "safe"
* attribute, undo the attribute turnon. This may ensure
* there's enough room to set the attribute before the first
* non-blank in the run.
*/
#define SAFE(scr,a) (!((a) & (scr)->_xmc_triggers))
if (ISBLANK(thisline[j]) && SAFE(SP_PARM, turnon)) {
RemAttr(thisline[j], turnon);
continue;
}
/* check that there's enough room at start of span */
for (k = 1; k <= magic_cookie_glitch; k++) {
if (j - k < 0
|| !ISBLANK(thisline[j - k])
|| !SAFE(SP_PARM, AttrOf(thisline[j - k]))) {
failed = TRUE;
TR(TRACE_ATTRS, ("No room at start in %d,%d%s%s",
i, j - k,
(ISBLANK(thisline[j - k])
? ""
: ":nonblank"),
(SAFE(SP_PARM, AttrOf(thisline[j - k]))
? ""
: ":unsafe")));
break;
}
}
if (!failed) {
bool end_onscreen = FALSE;
int m, n = j;
/* find end of span, if it's onscreen */
for (m = i; m < screen_lines(SP_PARM); m++) {
for (; n < screen_columns(SP_PARM); n++) {
attr_t testattr =
AttrOf(NewScreen(SP_PARM)->_line[m].text[n]);
if ((testattr & SP_PARM->_xmc_triggers) == rattr) {
end_onscreen = TRUE;
TR(TRACE_ATTRS,
("Range attributed with %s ends at (%d, %d)",
_traceattr(turnon), m, n));
goto foundit;
}
}
n = 0;
}
TR(TRACE_ATTRS,
("Range attributed with %s ends offscreen",
_traceattr(turnon)));
foundit:;
if (end_onscreen) {
NCURSES_CH_T *lastline =
NewScreen(SP_PARM)->_line[m].text;
/*
* If there are safely-attributed blanks at the end of
* the range, shorten the range. This will help ensure
* that there is enough room at end of span.
*/
while (n >= 0
&& ISBLANK(lastline[n])
&& SAFE(SP_PARM, AttrOf(lastline[n]))) {
RemAttr(lastline[n--], turnon);
}
/* check that there's enough room at end of span */
for (k = 1; k <= magic_cookie_glitch; k++) {
if (n + k >= screen_columns(SP_PARM)
|| !ISBLANK(lastline[n + k])
|| !SAFE(SP_PARM, AttrOf(lastline[n + k]))) {
failed = TRUE;
TR(TRACE_ATTRS,
("No room at end in %d,%d%s%s",
i, j - k,
(ISBLANK(lastline[n + k])
? ""
: ":nonblank"),
(SAFE(SP_PARM, AttrOf(lastline[n + k]))
? ""
: ":unsafe")));
break;
}
}
}
}
if (failed) {
int p, q = j;
TR(TRACE_ATTRS,
("Clearing %s beginning at (%d, %d)",
_traceattr(turnon), i, j));
/* turn off new attributes over span */
for (p = i; p < screen_lines(SP_PARM); p++) {
for (; q < screen_columns(SP_PARM); q++) {
attr_t testattr = AttrOf(newscr->_line[p].text[q]);
if ((testattr & SP_PARM->_xmc_triggers) == rattr)
goto foundend;
RemAttr(NewScreen(SP_PARM)->_line[p].text[q], turnon);
}
q = 0;
}
foundend:;
} else {
TR(TRACE_ATTRS,
("Cookie space for %s found before (%d, %d)",
_traceattr(turnon), i, j));
/*
* Back up the start of range so there's room for cookies
* before the first nonblank character.
*/
for (k = 1; k <= magic_cookie_glitch; k++)
AddAttr(thisline[j - k], turnon);
}
rattr = thisattr;
}
}
#ifdef TRACE
/* show altered highlights after magic-cookie check */
if (USE_TRACEF(TRACE_UPDATE)) {
_tracef("After magic-cookie check...");
_tracedump("newscr", NewScreen(SP_PARM));
_nc_unlock_global(tracef);
}
#endif /* TRACE */
}
#endif /* USE_XMC_SUPPORT */
nonempty = 0;
if (CurScreen(SP_PARM)->_clear || NewScreen(SP_PARM)->_clear) { /* force refresh ? */
ClrUpdate(NCURSES_SP_ARG);
CurScreen(SP_PARM)->_clear = FALSE; /* reset flag */
NewScreen(SP_PARM)->_clear = FALSE; /* reset flag */
} else {
int changedlines = CHECK_INTERVAL;
if (check_pending(NCURSES_SP_ARG))
goto cleanup;
nonempty = min(screen_lines(SP_PARM), NewScreen(SP_PARM)->_maxy + 1);
if (SP_PARM->_scrolling) {
NCURSES_SP_NAME(_nc_scroll_optimize) (NCURSES_SP_ARG);
}
nonempty = ClrBottom(NCURSES_SP_ARGx nonempty);
TR(TRACE_UPDATE, ("Transforming lines, nonempty %d", nonempty));
for (i = 0; i < nonempty; i++) {
/*
* Here is our line-breakout optimization.
*/
if (changedlines == CHECK_INTERVAL) {
if (check_pending(NCURSES_SP_ARG))
goto cleanup;
changedlines = 0;
}
/*
* newscr->line[i].firstchar is normally set
* by wnoutrefresh. curscr->line[i].firstchar
* is normally set by _nc_scroll_window in the
* vertical-movement optimization code,
*/
if (NewScreen(SP_PARM)->_line[i].firstchar != _NOCHANGE
|| CurScreen(SP_PARM)->_line[i].firstchar != _NOCHANGE) {
TransformLine(NCURSES_SP_ARGx i);
changedlines++;
}
/* mark line changed successfully */
if (i <= NewScreen(SP_PARM)->_maxy) {
MARK_NOCHANGE(NewScreen(SP_PARM), i);
}
if (i <= CurScreen(SP_PARM)->_maxy) {
MARK_NOCHANGE(CurScreen(SP_PARM), i);
}
}
}
/* put everything back in sync */
for (i = nonempty; i <= NewScreen(SP_PARM)->_maxy; i++) {
MARK_NOCHANGE(NewScreen(SP_PARM), i);
}
for (i = nonempty; i <= CurScreen(SP_PARM)->_maxy; i++) {
MARK_NOCHANGE(CurScreen(SP_PARM), i);
}
if (!NewScreen(SP_PARM)->_leaveok) {
CurScreen(SP_PARM)->_curx = NewScreen(SP_PARM)->_curx;
CurScreen(SP_PARM)->_cury = NewScreen(SP_PARM)->_cury;
GoTo(NCURSES_SP_ARGx CurScreen(SP_PARM)->_cury, CurScreen(SP_PARM)->_curx);
}
cleanup:
/*
* We would like to keep the physical screen in normal mode in case we get
* other processes writing to the screen. This goal cannot be met for
* magic cookies since it interferes with attributes that may propagate
* past the current position.
*/
#if USE_XMC_SUPPORT
if (magic_cookie_glitch != 0)
#endif
UpdateAttrs(SP_PARM, normal);
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
WINDOW_ATTRS(CurScreen(SP_PARM)) = WINDOW_ATTRS(NewScreen(SP_PARM));
#if USE_TRACE_TIMES
(void) times(&after);
TR(TRACE_TIMES,
("Update cost: %ld chars, %ld clocks system time, %ld clocks user time",
_nc_outchars,
(long) (after.tms_stime - before.tms_stime),
(long) (after.tms_utime - before.tms_utime)));
#endif /* USE_TRACE_TIMES */
_nc_signal_handler(TRUE);
_nc_unlock_global(update);
returnCode(OK);
}
#if NCURSES_SP_FUNCS && !defined(USE_TERM_DRIVER)
NCURSES_EXPORT(int)
doupdate(void)
{
return TINFO_DOUPDATE(CURRENT_SCREEN);
}
#endif
/*
* ClrBlank(win)
*
* Returns the attributed character that corresponds to the "cleared"
* screen. If the terminal has the back-color-erase feature, this will be
* colored according to the wbkgd() call.
*
* We treat 'curscr' specially because it isn't supposed to be set directly
* in the wbkgd() call. Assume 'stdscr' for this case.
*/
#define BCE_ATTRS (A_NORMAL|A_COLOR)
#define BCE_BKGD(sp,win) (((win) == CurScreen(sp) ? StdScreen(sp) : (win))->_nc_bkgd)
static NCURSES_INLINE NCURSES_CH_T
ClrBlank(NCURSES_SP_DCLx WINDOW *win)
{
NCURSES_CH_T blank = blankchar;
if (back_color_erase)
AddAttr(blank, (AttrOf(BCE_BKGD(SP_PARM, win)) & BCE_ATTRS));
return blank;
}
/*
** ClrUpdate()
**
** Update by clearing and redrawing the entire screen.
**
*/
static void
ClrUpdate(NCURSES_SP_DCL0)
{
TR(TRACE_UPDATE, (T_CALLED("ClrUpdate")));
if (0 != SP_PARM) {
int i;
NCURSES_CH_T blank = ClrBlank(NCURSES_SP_ARGx StdScreen(SP_PARM));
int nonempty = min(screen_lines(SP_PARM),
NewScreen(SP_PARM)->_maxy + 1);
ClearScreen(NCURSES_SP_ARGx blank);
TR(TRACE_UPDATE, ("updating screen from scratch"));
nonempty = ClrBottom(NCURSES_SP_ARGx nonempty);
for (i = 0; i < nonempty; i++)
TransformLine(NCURSES_SP_ARGx i);
}
TR(TRACE_UPDATE, (T_RETURN("")));
}
/*
** ClrToEOL(blank)
**
** Clear to end of current line, starting at the cursor position
*/
static void
ClrToEOL(NCURSES_SP_DCLx NCURSES_CH_T blank, int needclear)
{
if (CurScreen(SP_PARM) != 0
&& SP_PARM->_cursrow >= 0) {
int j;
for (j = SP_PARM->_curscol; j < screen_columns(SP_PARM); j++) {
if (j >= 0) {
NCURSES_CH_T *cp =
&(CurScreen(SP_PARM)->_line[SP_PARM->_cursrow].text[j]);
if (!CharEq(*cp, blank)) {
*cp = blank;
needclear = TRUE;
}
}
}
}
if (needclear) {
UpdateAttrs(SP_PARM, blank);
if (clr_eol && SP_PARM->_el_cost <= (screen_columns(SP_PARM) - SP_PARM->_curscol)) {
NCURSES_PUTP2("clr_eol", clr_eol);
} else {
int count = (screen_columns(SP_PARM) - SP_PARM->_curscol);
while (count-- > 0)
PutChar(NCURSES_SP_ARGx CHREF(blank));
}
}
}
/*
** ClrToEOS(blank)
**
** Clear to end of screen, starting at the cursor position
*/
static void
ClrToEOS(NCURSES_SP_DCLx NCURSES_CH_T blank)
{
int row, col;
row = SP_PARM->_cursrow;
col = SP_PARM->_curscol;
if (row < 0)
row = 0;
if (col < 0)
col = 0;
UpdateAttrs(SP_PARM, blank);
TPUTS_TRACE("clr_eos");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
clr_eos,
screen_lines(SP_PARM) - row,
NCURSES_SP_NAME(_nc_outch));
while (col < screen_columns(SP_PARM))
CurScreen(SP_PARM)->_line[row].text[col++] = blank;
for (row++; row < screen_lines(SP_PARM); row++) {
for (col = 0; col < screen_columns(SP_PARM); col++)
CurScreen(SP_PARM)->_line[row].text[col] = blank;
}
}
/*
* ClrBottom(total)
*
* Test if clearing the end of the screen would satisfy part of the
* screen-update. Do this by scanning backwards through the lines in the
* screen, checking if each is blank, and one or more are changed.
*/
static int
ClrBottom(NCURSES_SP_DCLx int total)
{
int top = total;
int last = min(screen_columns(SP_PARM), NewScreen(SP_PARM)->_maxx + 1);
NCURSES_CH_T blank = NewScreen(SP_PARM)->_line[total - 1].text[last - 1];
if (clr_eos && can_clear_with(NCURSES_SP_ARGx CHREF(blank))) {
int row;
for (row = total - 1; row >= 0; row--) {
int col;
bool ok;
for (col = 0, ok = TRUE; ok && col < last; col++) {
ok = (CharEq(NewScreen(SP_PARM)->_line[row].text[col], blank));
}
if (!ok)
break;
for (col = 0; ok && col < last; col++) {
ok = (CharEq(CurScreen(SP_PARM)->_line[row].text[col], blank));
}
if (!ok)
top = row;
}
/* don't use clr_eos for just one line if clr_eol available */
if (top < total) {
GoTo(NCURSES_SP_ARGx top, 0);
ClrToEOS(NCURSES_SP_ARGx blank);
if (SP_PARM->oldhash && SP_PARM->newhash) {
for (row = top; row < screen_lines(SP_PARM); row++)
SP_PARM->oldhash[row] = SP_PARM->newhash[row];
}
}
}
return top;
}
#if USE_XMC_SUPPORT
#if USE_WIDEC_SUPPORT
#define check_xmc_transition(sp, a, b) \
((((a)->attr ^ (b)->attr) & ~((a)->attr) & (sp)->_xmc_triggers) != 0)
#define xmc_turn_on(sp,a,b) check_xmc_transition(sp,&(a), &(b))
#else
#define xmc_turn_on(sp,a,b) ((((a)^(b)) & ~(a) & (sp)->_xmc_triggers) != 0)
#endif
#define xmc_new(sp,r,c) NewScreen(sp)->_line[r].text[c]
#define xmc_turn_off(sp,a,b) xmc_turn_on(sp,b,a)
#endif /* USE_XMC_SUPPORT */
/*
** TransformLine(lineno)
**
** Transform the given line in curscr to the one in newscr, using
** Insert/Delete Character if idcok && has_ic().
**
** firstChar = position of first different character in line
** oLastChar = position of last different character in old line
** nLastChar = position of last different character in new line
**
** move to firstChar
** overwrite chars up to min(oLastChar, nLastChar)
** if oLastChar < nLastChar
** insert newLine[oLastChar+1..nLastChar]
** else
** delete oLastChar - nLastChar spaces
*/
static void
TransformLine(NCURSES_SP_DCLx int const lineno)
{
int firstChar, oLastChar, nLastChar;
NCURSES_CH_T *newLine = NewScreen(SP_PARM)->_line[lineno].text;
NCURSES_CH_T *oldLine = CurScreen(SP_PARM)->_line[lineno].text;
int n;
bool attrchanged = FALSE;
TR(TRACE_UPDATE, (T_CALLED("TransformLine(%p, %d)"), (void *) SP_PARM, lineno));
/* copy new hash value to old one */
if (SP_PARM->oldhash && SP_PARM->newhash)
SP_PARM->oldhash[lineno] = SP_PARM->newhash[lineno];
/*
* If we have colors, there is the possibility of having two color pairs
* that display as the same colors. For instance, Lynx does this. Check
* for this case, and update the old line with the new line's colors when
* they are equivalent.
*/
if (SP_PARM->_coloron) {
int oldPair;
int newPair;
for (n = 0; n < screen_columns(SP_PARM); n++) {
if (!CharEq(newLine[n], oldLine[n])) {
oldPair = GetPair(oldLine[n]);
newPair = GetPair(newLine[n]);
if (oldPair != newPair
&& unColor(oldLine[n]) == unColor(newLine[n])) {
if (oldPair < SP_PARM->_pair_limit
&& newPair < SP_PARM->_pair_limit
&& (isSamePair(SP_PARM->_color_pairs[oldPair],
SP_PARM->_color_pairs[newPair]))) {
SetPair(oldLine[n], GetPair(newLine[n]));
}
}
}
}
}
if (ceol_standout_glitch && clr_eol) {
firstChar = 0;
while (firstChar < screen_columns(SP_PARM)) {
if (!SameAttrOf(newLine[firstChar], oldLine[firstChar])) {
attrchanged = TRUE;
break;
}
firstChar++;
}
}
firstChar = 0;
if (attrchanged) { /* we may have to disregard the whole line */
GoTo(NCURSES_SP_ARGx lineno, firstChar);
ClrToEOL(NCURSES_SP_ARGx
ClrBlank(NCURSES_SP_ARGx
CurScreen(SP_PARM)), FALSE);
PutRange(NCURSES_SP_ARGx
oldLine, newLine, lineno, 0,
screen_columns(SP_PARM) - 1);
#if USE_XMC_SUPPORT
/*
* This is a very simple loop to paint characters which may have the
* magic cookie glitch embedded. It doesn't know much about video
* attributes which are continued from one line to the next. It
* assumes that we have filtered out requests for attribute changes
* that do not get mapped to blank positions.
*
* FIXME: we are not keeping track of where we put the cookies, so this
* will work properly only once, since we may overwrite a cookie in a
* following operation.
*/
} else if (magic_cookie_glitch > 0) {
GoTo(NCURSES_SP_ARGx lineno, firstChar);
for (n = 0; n < screen_columns(SP_PARM); n++) {
int m = n + magic_cookie_glitch;
/* check for turn-on:
* If we are writing an attributed blank, where the
* previous cell is not attributed.
*/
if (ISBLANK(newLine[n])
&& ((n > 0
&& xmc_turn_on(SP_PARM, newLine[n - 1], newLine[n]))
|| (n == 0
&& lineno > 0
&& xmc_turn_on(SP_PARM,
xmc_new(SP_PARM, lineno - 1,
screen_columns(SP_PARM) - 1),
newLine[n])))) {
n = m;
}
PutChar(NCURSES_SP_ARGx CHREF(newLine[n]));
/* check for turn-off:
* If we are writing an attributed non-blank, where the
* next cell is blank, and not attributed.
*/
if (!ISBLANK(newLine[n])
&& ((n + 1 < screen_columns(SP_PARM)
&& xmc_turn_off(SP_PARM, newLine[n], newLine[n + 1]))
|| (n + 1 >= screen_columns(SP_PARM)
&& lineno + 1 < screen_lines(SP_PARM)
&& xmc_turn_off(SP_PARM,
newLine[n],
xmc_new(SP_PARM, lineno + 1, 0))))) {
n = m;
}
}
#endif
} else {
NCURSES_CH_T blank;
/* it may be cheap to clear leading whitespace with clr_bol */
blank = newLine[0];
if (clr_bol && can_clear_with(NCURSES_SP_ARGx CHREF(blank))) {
int oFirstChar, nFirstChar;
for (oFirstChar = 0;
oFirstChar < screen_columns(SP_PARM);
oFirstChar++)
if (!CharEq(oldLine[oFirstChar], blank))
break;
for (nFirstChar = 0;
nFirstChar < screen_columns(SP_PARM);
nFirstChar++)
if (!CharEq(newLine[nFirstChar], blank))
break;
if (nFirstChar == oFirstChar) {
firstChar = nFirstChar;
/* find the first differing character */
while (firstChar < screen_columns(SP_PARM)
&& CharEq(newLine[firstChar], oldLine[firstChar]))
firstChar++;
} else if (oFirstChar > nFirstChar) {
firstChar = nFirstChar;
} else { /* oFirstChar < nFirstChar */
firstChar = oFirstChar;
if (SP_PARM->_el1_cost < nFirstChar - oFirstChar) {
if (nFirstChar >= screen_columns(SP_PARM)
&& SP_PARM->_el_cost <= SP_PARM->_el1_cost) {
GoTo(NCURSES_SP_ARGx lineno, 0);
UpdateAttrs(SP_PARM, blank);
NCURSES_PUTP2("clr_eol", clr_eol);
} else {
GoTo(NCURSES_SP_ARGx lineno, nFirstChar - 1);
UpdateAttrs(SP_PARM, blank);
NCURSES_PUTP2("clr_bol", clr_bol);
}
while (firstChar < nFirstChar)
oldLine[firstChar++] = blank;
}
}
} else {
/* find the first differing character */
while (firstChar < screen_columns(SP_PARM)
&& CharEq(newLine[firstChar], oldLine[firstChar]))
firstChar++;
}
/* if there wasn't one, we're done */
if (firstChar >= screen_columns(SP_PARM)) {
TR(TRACE_UPDATE, (T_RETURN("")));
return;
}
blank = newLine[screen_columns(SP_PARM) - 1];
if (!can_clear_with(NCURSES_SP_ARGx CHREF(blank))) {
/* find the last differing character */
nLastChar = screen_columns(SP_PARM) - 1;
while (nLastChar > firstChar
&& CharEq(newLine[nLastChar], oldLine[nLastChar]))
nLastChar--;
if (nLastChar >= firstChar) {
GoTo(NCURSES_SP_ARGx lineno, firstChar);
PutRange(NCURSES_SP_ARGx
oldLine,
newLine,
lineno,
firstChar,
nLastChar);
memcpy(oldLine + firstChar,
newLine + firstChar,
(unsigned) (nLastChar - firstChar + 1) * sizeof(NCURSES_CH_T));
}
TR(TRACE_UPDATE, (T_RETURN("")));
return;
}
/* find last non-blank character on old line */
oLastChar = screen_columns(SP_PARM) - 1;
while (oLastChar > firstChar && CharEq(oldLine[oLastChar], blank))
oLastChar--;
/* find last non-blank character on new line */
nLastChar = screen_columns(SP_PARM) - 1;
while (nLastChar > firstChar && CharEq(newLine[nLastChar], blank))
nLastChar--;
if ((nLastChar == firstChar)
&& (SP_PARM->_el_cost < (oLastChar - nLastChar))) {
GoTo(NCURSES_SP_ARGx lineno, firstChar);
if (!CharEq(newLine[firstChar], blank))
PutChar(NCURSES_SP_ARGx CHREF(newLine[firstChar]));
ClrToEOL(NCURSES_SP_ARGx blank, FALSE);
} else if ((nLastChar != oLastChar)
&& (!CharEq(newLine[nLastChar], oldLine[oLastChar])
|| !(SP_PARM->_nc_sp_idcok
&& NCURSES_SP_NAME(has_ic) (NCURSES_SP_ARG)))) {
GoTo(NCURSES_SP_ARGx lineno, firstChar);
if ((oLastChar - nLastChar) > SP_PARM->_el_cost) {
if (PutRange(NCURSES_SP_ARGx
oldLine,
newLine,
lineno,
firstChar,
nLastChar)) {
GoTo(NCURSES_SP_ARGx lineno, nLastChar + 1);
}
ClrToEOL(NCURSES_SP_ARGx blank, FALSE);
} else {
n = max(nLastChar, oLastChar);
PutRange(NCURSES_SP_ARGx
oldLine,
newLine,
lineno,
firstChar,
n);
}
} else {
int nLastNonblank = nLastChar;
int oLastNonblank = oLastChar;
/* find the last characters that really differ */
/* can be -1 if no characters differ */
while (CharEq(newLine[nLastChar], oldLine[oLastChar])) {
/* don't split a wide char */
if (isWidecExt(newLine[nLastChar]) &&
!CharEq(newLine[nLastChar - 1], oldLine[oLastChar - 1]))
break;
nLastChar--;
oLastChar--;
if (nLastChar == -1 || oLastChar == -1)
break;
}
n = min(oLastChar, nLastChar);
if (n >= firstChar) {
GoTo(NCURSES_SP_ARGx lineno, firstChar);
PutRange(NCURSES_SP_ARGx
oldLine,
newLine,
lineno,
firstChar,
n);
}
if (oLastChar < nLastChar) {
int m = max(nLastNonblank, oLastNonblank);
#if USE_WIDEC_SUPPORT
if (n) {
while (isWidecExt(newLine[n + 1]) && n) {
--n;
--oLastChar; /* increase cost */
}
} else if (n >= firstChar &&
isWidecBase(newLine[n])) {
while (isWidecExt(newLine[n + 1])) {
++n;
++oLastChar; /* decrease cost */
}
}
#endif
GoTo(NCURSES_SP_ARGx lineno, n + 1);
if ((nLastChar < nLastNonblank)
|| InsCharCost(SP_PARM, nLastChar - oLastChar) > (m - n)) {
PutRange(NCURSES_SP_ARGx
oldLine,
newLine,
lineno,
n + 1,
m);
} else {
InsStr(NCURSES_SP_ARGx &newLine[n + 1], nLastChar - oLastChar);
}
} else if (oLastChar > nLastChar) {
GoTo(NCURSES_SP_ARGx lineno, n + 1);
if (DelCharCost(SP_PARM, oLastChar - nLastChar)
> SP_PARM->_el_cost + nLastNonblank - (n + 1)) {
if (PutRange(NCURSES_SP_ARGx oldLine, newLine, lineno,
n + 1, nLastNonblank)) {
GoTo(NCURSES_SP_ARGx lineno, nLastNonblank + 1);
}
ClrToEOL(NCURSES_SP_ARGx blank, FALSE);
} else {
/*
* The delete-char sequence will
* effectively shift in blanks from the
* right margin of the screen. Ensure
* that they are the right color by
* setting the video attributes from
* the last character on the row.
*/
UpdateAttrs(SP_PARM, blank);
DelChar(NCURSES_SP_ARGx oLastChar - nLastChar);
}
}
}
}
/* update the code's internal representation */
if (screen_columns(SP_PARM) > firstChar)
memcpy(oldLine + firstChar,
newLine + firstChar,
(unsigned) (screen_columns(SP_PARM) - firstChar) * sizeof(NCURSES_CH_T));
TR(TRACE_UPDATE, (T_RETURN("")));
return;
}
/*
** ClearScreen(blank)
**
** Clear the physical screen and put cursor at home
**
*/
static void
ClearScreen(NCURSES_SP_DCLx NCURSES_CH_T blank)
{
int i, j;
bool fast_clear = (clear_screen || clr_eos || clr_eol);
TR(TRACE_UPDATE, ("ClearScreen() called"));
#if NCURSES_EXT_FUNCS
if (SP_PARM->_coloron
&& !SP_PARM->_default_color) {
NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_ARGx
(short) GET_SCREEN_PAIR(SP_PARM),
0,
FALSE,
NCURSES_SP_NAME(_nc_outch));
if (!back_color_erase) {
fast_clear = FALSE;
}
}
#endif
if (fast_clear) {
if (clear_screen) {
UpdateAttrs(SP_PARM, blank);
NCURSES_PUTP2("clear_screen", clear_screen);
SP_PARM->_cursrow = SP_PARM->_curscol = 0;
position_check(NCURSES_SP_ARGx
SP_PARM->_cursrow,
SP_PARM->_curscol,
"ClearScreen");
} else if (clr_eos) {
SP_PARM->_cursrow = SP_PARM->_curscol = -1;
GoTo(NCURSES_SP_ARGx 0, 0);
UpdateAttrs(SP_PARM, blank);
TPUTS_TRACE("clr_eos");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
clr_eos,
screen_lines(SP_PARM),
NCURSES_SP_NAME(_nc_outch));
} else if (clr_eol) {
SP_PARM->_cursrow = SP_PARM->_curscol = -1;
UpdateAttrs(SP_PARM, blank);
for (i = 0; i < screen_lines(SP_PARM); i++) {
GoTo(NCURSES_SP_ARGx i, 0);
NCURSES_PUTP2("clr_eol", clr_eol);
}
GoTo(NCURSES_SP_ARGx 0, 0);
}
} else {
UpdateAttrs(SP_PARM, blank);
for (i = 0; i < screen_lines(SP_PARM); i++) {
GoTo(NCURSES_SP_ARGx i, 0);
for (j = 0; j < screen_columns(SP_PARM); j++)
PutChar(NCURSES_SP_ARGx CHREF(blank));
}
GoTo(NCURSES_SP_ARGx 0, 0);
}
for (i = 0; i < screen_lines(SP_PARM); i++) {
for (j = 0; j < screen_columns(SP_PARM); j++)
CurScreen(SP_PARM)->_line[i].text[j] = blank;
}
TR(TRACE_UPDATE, ("screen cleared"));
}
/*
** InsStr(line, count)
**
** Insert the count characters pointed to by line.
**
*/
static void
-InsStr(NCURSES_SP_DCLx NCURSES_CH_T * line, int count)
+InsStr(NCURSES_SP_DCLx NCURSES_CH_T *line, int count)
{
TR(TRACE_UPDATE, ("InsStr(%p, %p,%d) called",
(void *) SP_PARM,
(void *) line, count));
/* Prefer parm_ich as it has the smallest cost - no need to shift
* the whole line on each character. */
/* The order must match that of InsCharCost. */
if (parm_ich) {
TPUTS_TRACE("parm_ich");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(parm_ich, count),
+ TIPARM_1(parm_ich, count),
1,
NCURSES_SP_NAME(_nc_outch));
while (count > 0) {
PutAttrChar(NCURSES_SP_ARGx CHREF(*line));
line++;
count--;
}
} else if (enter_insert_mode && exit_insert_mode) {
NCURSES_PUTP2("enter_insert_mode", enter_insert_mode);
while (count > 0) {
PutAttrChar(NCURSES_SP_ARGx CHREF(*line));
if (insert_padding) {
NCURSES_PUTP2("insert_padding", insert_padding);
}
line++;
count--;
}
NCURSES_PUTP2("exit_insert_mode", exit_insert_mode);
} else {
while (count > 0) {
NCURSES_PUTP2("insert_character", insert_character);
PutAttrChar(NCURSES_SP_ARGx CHREF(*line));
if (insert_padding) {
NCURSES_PUTP2("insert_padding", insert_padding);
}
line++;
count--;
}
}
position_check(NCURSES_SP_ARGx
SP_PARM->_cursrow,
SP_PARM->_curscol, "InsStr");
}
/*
** DelChar(count)
**
** Delete count characters at current position
**
*/
static void
DelChar(NCURSES_SP_DCLx int count)
{
TR(TRACE_UPDATE, ("DelChar(%p, %d) called, position = (%ld,%ld)",
(void *) SP_PARM, count,
(long) NewScreen(SP_PARM)->_cury,
(long) NewScreen(SP_PARM)->_curx));
if (parm_dch) {
TPUTS_TRACE("parm_dch");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(parm_dch, count),
+ TIPARM_1(parm_dch, count),
1,
NCURSES_SP_NAME(_nc_outch));
} else {
int n;
for (n = 0; n < count; n++) {
NCURSES_PUTP2("delete_character", delete_character);
}
}
}
/*
* Physical-scrolling support
*
* This code was adapted from Keith Bostic's hardware scrolling
* support for 4.4BSD curses. I (esr) translated it to use terminfo
* capabilities, narrowed the call interface slightly, and cleaned
* up some convoluted tests. I also added support for the memory_above
* memory_below, and non_dest_scroll_region capabilities.
*
* For this code to work, we must have either
* change_scroll_region and scroll forward/reverse commands, or
* insert and delete line capabilities.
* When the scrolling region has been set, the cursor has to
* be at the last line of the region to make the scroll up
* happen, or on the first line of region to scroll down.
*
* This code makes one aesthetic decision in the opposite way from
* BSD curses. BSD curses preferred pairs of il/dl operations
* over scrolls, allegedly because il/dl looked faster. We, on
* the other hand, prefer scrolls because (a) they're just as fast
* on many terminals and (b) using them avoids bouncing an
* unchanged bottom section of the screen up and down, which is
* visually nasty.
*
* (lav): added more cases, used dl/il when bot==maxy and in csr case.
*
* I used assumption that capabilities il/il1/dl/dl1 work inside
* changed scroll region not shifting screen contents outside of it.
* If there are any terminals behaving different way, it would be
* necessary to add some conditions to scroll_csr_forward/backward.
*/
/* Try to scroll up assuming given csr (miny, maxy). Returns ERR on failure */
static int
scroll_csr_forward(NCURSES_SP_DCLx
int n,
int top,
int bot,
int miny,
int maxy,
NCURSES_CH_T blank)
{
int i;
if (n == 1 && scroll_forward && top == miny && bot == maxy) {
GoTo(NCURSES_SP_ARGx bot, 0);
UpdateAttrs(SP_PARM, blank);
NCURSES_PUTP2("scroll_forward", scroll_forward);
} else if (n == 1 && delete_line && bot == maxy) {
GoTo(NCURSES_SP_ARGx top, 0);
UpdateAttrs(SP_PARM, blank);
NCURSES_PUTP2("delete_line", delete_line);
} else if (parm_index && top == miny && bot == maxy) {
GoTo(NCURSES_SP_ARGx bot, 0);
UpdateAttrs(SP_PARM, blank);
TPUTS_TRACE("parm_index");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(parm_index, n, 0),
+ TIPARM_1(parm_index, n),
n,
NCURSES_SP_NAME(_nc_outch));
} else if (parm_delete_line && bot == maxy) {
GoTo(NCURSES_SP_ARGx top, 0);
UpdateAttrs(SP_PARM, blank);
TPUTS_TRACE("parm_delete_line");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(parm_delete_line, n, 0),
+ TIPARM_1(parm_delete_line, n),
n,
NCURSES_SP_NAME(_nc_outch));
} else if (scroll_forward && top == miny && bot == maxy) {
GoTo(NCURSES_SP_ARGx bot, 0);
UpdateAttrs(SP_PARM, blank);
for (i = 0; i < n; i++) {
NCURSES_PUTP2("scroll_forward", scroll_forward);
}
} else if (delete_line && bot == maxy) {
GoTo(NCURSES_SP_ARGx top, 0);
UpdateAttrs(SP_PARM, blank);
for (i = 0; i < n; i++) {
NCURSES_PUTP2("delete_line", delete_line);
}
} else
return ERR;
#if NCURSES_EXT_FUNCS
if (FILL_BCE(SP_PARM)) {
int j;
for (i = 0; i < n; i++) {
GoTo(NCURSES_SP_ARGx bot - i, 0);
for (j = 0; j < screen_columns(SP_PARM); j++)
PutChar(NCURSES_SP_ARGx CHREF(blank));
}
}
#endif
return OK;
}
/* Try to scroll down assuming given csr (miny, maxy). Returns ERR on failure */
/* n > 0 */
static int
scroll_csr_backward(NCURSES_SP_DCLx
int n,
int top,
int bot,
int miny,
int maxy,
NCURSES_CH_T blank)
{
int i;
if (n == 1 && scroll_reverse && top == miny && bot == maxy) {
GoTo(NCURSES_SP_ARGx top, 0);
UpdateAttrs(SP_PARM, blank);
NCURSES_PUTP2("scroll_reverse", scroll_reverse);
} else if (n == 1 && insert_line && bot == maxy) {
GoTo(NCURSES_SP_ARGx top, 0);
UpdateAttrs(SP_PARM, blank);
NCURSES_PUTP2("insert_line", insert_line);
} else if (parm_rindex && top == miny && bot == maxy) {
GoTo(NCURSES_SP_ARGx top, 0);
UpdateAttrs(SP_PARM, blank);
TPUTS_TRACE("parm_rindex");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(parm_rindex, n, 0),
+ TIPARM_1(parm_rindex, n),
n,
NCURSES_SP_NAME(_nc_outch));
} else if (parm_insert_line && bot == maxy) {
GoTo(NCURSES_SP_ARGx top, 0);
UpdateAttrs(SP_PARM, blank);
TPUTS_TRACE("parm_insert_line");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(parm_insert_line, n, 0),
+ TIPARM_1(parm_insert_line, n),
n,
NCURSES_SP_NAME(_nc_outch));
} else if (scroll_reverse && top == miny && bot == maxy) {
GoTo(NCURSES_SP_ARGx top, 0);
UpdateAttrs(SP_PARM, blank);
for (i = 0; i < n; i++) {
NCURSES_PUTP2("scroll_reverse", scroll_reverse);
}
} else if (insert_line && bot == maxy) {
GoTo(NCURSES_SP_ARGx top, 0);
UpdateAttrs(SP_PARM, blank);
for (i = 0; i < n; i++) {
NCURSES_PUTP2("insert_line", insert_line);
}
} else
return ERR;
#if NCURSES_EXT_FUNCS
if (FILL_BCE(SP_PARM)) {
int j;
for (i = 0; i < n; i++) {
GoTo(NCURSES_SP_ARGx top + i, 0);
for (j = 0; j < screen_columns(SP_PARM); j++)
PutChar(NCURSES_SP_ARGx CHREF(blank));
}
}
#endif
return OK;
}
/* scroll by using delete_line at del and insert_line at ins */
/* n > 0 */
static int
scroll_idl(NCURSES_SP_DCLx int n, int del, int ins, NCURSES_CH_T blank)
{
int i;
if (!((parm_delete_line || delete_line) && (parm_insert_line || insert_line)))
return ERR;
GoTo(NCURSES_SP_ARGx del, 0);
UpdateAttrs(SP_PARM, blank);
if (n == 1 && delete_line) {
NCURSES_PUTP2("delete_line", delete_line);
} else if (parm_delete_line) {
TPUTS_TRACE("parm_delete_line");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(parm_delete_line, n, 0),
+ TIPARM_1(parm_delete_line, n),
n,
NCURSES_SP_NAME(_nc_outch));
} else { /* if (delete_line) */
for (i = 0; i < n; i++) {
NCURSES_PUTP2("delete_line", delete_line);
}
}
GoTo(NCURSES_SP_ARGx ins, 0);
UpdateAttrs(SP_PARM, blank);
if (n == 1 && insert_line) {
NCURSES_PUTP2("insert_line", insert_line);
} else if (parm_insert_line) {
TPUTS_TRACE("parm_insert_line");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(parm_insert_line, n, 0),
+ TIPARM_1(parm_insert_line, n),
n,
NCURSES_SP_NAME(_nc_outch));
} else { /* if (insert_line) */
for (i = 0; i < n; i++) {
NCURSES_PUTP2("insert_line", insert_line);
}
}
return OK;
}
/*
* Note: some terminals require the cursor to be within the scrolling margins
* before setting them. Generally, the cursor must be at the appropriate end
* of the scrolling margins when issuing an indexing operation (it is not
* apparent whether it must also be at the left margin; we do this just to be
* safe). To make the related cursor movement a little faster, we use the
* save/restore cursor capabilities if the terminal has them.
*/
NCURSES_EXPORT(int)
NCURSES_SP_NAME(_nc_scrolln) (NCURSES_SP_DCLx
int n,
int top,
int bot,
int maxy)
/* scroll region from top to bot by n lines */
{
NCURSES_CH_T blank;
int i;
bool cursor_saved = FALSE;
int res;
TR(TRACE_MOVE, ("_nc_scrolln(%p, %d, %d, %d, %d)",
(void *) SP_PARM, n, top, bot, maxy));
if (!IsValidScreen(SP_PARM))
return (ERR);
blank = ClrBlank(NCURSES_SP_ARGx StdScreen(SP_PARM));
#if USE_XMC_SUPPORT
/*
* If we scroll, we might remove a cookie.
*/
if (magic_cookie_glitch > 0) {
return (ERR);
}
#endif
if (n > 0) { /* scroll up (forward) */
/*
* Explicitly clear if stuff pushed off top of region might
* be saved by the terminal.
*/
res = scroll_csr_forward(NCURSES_SP_ARGx n, top, bot, 0, maxy, blank);
if (res == ERR && change_scroll_region) {
if ((((n == 1 && scroll_forward) || parm_index)
&& (SP_PARM->_cursrow == bot || SP_PARM->_cursrow == bot - 1))
&& save_cursor && restore_cursor) {
cursor_saved = TRUE;
NCURSES_PUTP2("save_cursor", save_cursor);
}
NCURSES_PUTP2("change_scroll_region",
- TPARM_2(change_scroll_region, top, bot));
+ TIPARM_2(change_scroll_region, top, bot));
if (cursor_saved) {
NCURSES_PUTP2("restore_cursor", restore_cursor);
} else {
SP_PARM->_cursrow = SP_PARM->_curscol = -1;
}
res = scroll_csr_forward(NCURSES_SP_ARGx n, top, bot, top, bot, blank);
NCURSES_PUTP2("change_scroll_region",
- TPARM_2(change_scroll_region, 0, maxy));
+ TIPARM_2(change_scroll_region, 0, maxy));
SP_PARM->_cursrow = SP_PARM->_curscol = -1;
}
if (res == ERR && SP_PARM->_nc_sp_idlok)
res = scroll_idl(NCURSES_SP_ARGx n, top, bot - n + 1, blank);
/*
* Clear the newly shifted-in text.
*/
if (res != ERR
&& (non_dest_scroll_region || (memory_below && bot == maxy))) {
static const NCURSES_CH_T blank2 = NewChar(BLANK_TEXT);
if (bot == maxy && clr_eos) {
GoTo(NCURSES_SP_ARGx bot - n + 1, 0);
ClrToEOS(NCURSES_SP_ARGx blank2);
} else {
for (i = 0; i < n; i++) {
GoTo(NCURSES_SP_ARGx bot - i, 0);
ClrToEOL(NCURSES_SP_ARGx blank2, FALSE);
}
}
}
} else { /* (n < 0) - scroll down (backward) */
res = scroll_csr_backward(NCURSES_SP_ARGx -n, top, bot, 0, maxy, blank);
if (res == ERR && change_scroll_region) {
if (top != 0
&& (SP_PARM->_cursrow == top ||
SP_PARM->_cursrow == top - 1)
&& save_cursor && restore_cursor) {
cursor_saved = TRUE;
NCURSES_PUTP2("save_cursor", save_cursor);
}
NCURSES_PUTP2("change_scroll_region",
- TPARM_2(change_scroll_region, top, bot));
+ TIPARM_2(change_scroll_region, top, bot));
if (cursor_saved) {
NCURSES_PUTP2("restore_cursor", restore_cursor);
} else {
SP_PARM->_cursrow = SP_PARM->_curscol = -1;
}
res = scroll_csr_backward(NCURSES_SP_ARGx
-n, top, bot, top, bot, blank);
NCURSES_PUTP2("change_scroll_region",
- TPARM_2(change_scroll_region, 0, maxy));
+ TIPARM_2(change_scroll_region, 0, maxy));
SP_PARM->_cursrow = SP_PARM->_curscol = -1;
}
if (res == ERR && SP_PARM->_nc_sp_idlok)
res = scroll_idl(NCURSES_SP_ARGx -n, bot + n + 1, top, blank);
/*
* Clear the newly shifted-in text.
*/
if (res != ERR
&& (non_dest_scroll_region || (memory_above && top == 0))) {
static const NCURSES_CH_T blank2 = NewChar(BLANK_TEXT);
for (i = 0; i < -n; i++) {
GoTo(NCURSES_SP_ARGx i + top, 0);
ClrToEOL(NCURSES_SP_ARGx blank2, FALSE);
}
}
}
if (res == ERR)
return (ERR);
_nc_scroll_window(CurScreen(SP_PARM), n,
(NCURSES_SIZE_T) top,
(NCURSES_SIZE_T) bot,
blank);
/* shift hash values too - they can be reused */
NCURSES_SP_NAME(_nc_scroll_oldhash) (NCURSES_SP_ARGx n, top, bot);
return (OK);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
_nc_scrolln(int n, int top, int bot, int maxy)
{
return NCURSES_SP_NAME(_nc_scrolln) (CURRENT_SCREEN, n, top, bot, maxy);
}
#endif
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_screen_resume) (NCURSES_SP_DCL0)
{
assert(SP_PARM);
/* make sure terminal is in a sane known state */
SetAttr(SCREEN_ATTRS(SP_PARM), A_NORMAL);
NewScreen(SP_PARM)->_clear = TRUE;
/* reset color pairs and definitions */
if (SP_PARM->_coloron || SP_PARM->_color_defs)
NCURSES_SP_NAME(_nc_reset_colors) (NCURSES_SP_ARG);
/* restore user-defined colors, if any */
if (SP_PARM->_color_defs < 0 && !SP_PARM->_direct_color.value) {
int n;
SP_PARM->_color_defs = -(SP_PARM->_color_defs);
for (n = 0; n < SP_PARM->_color_defs; ++n) {
if (SP_PARM->_color_table[n].init) {
_nc_init_color(SP_PARM,
n,
SP_PARM->_color_table[n].r,
SP_PARM->_color_table[n].g,
SP_PARM->_color_table[n].b);
}
}
}
if (exit_attribute_mode)
NCURSES_PUTP2("exit_attribute_mode", exit_attribute_mode);
else {
/* turn off attributes */
if (exit_alt_charset_mode)
NCURSES_PUTP2("exit_alt_charset_mode", exit_alt_charset_mode);
if (exit_standout_mode)
NCURSES_PUTP2("exit_standout_mode", exit_standout_mode);
if (exit_underline_mode)
NCURSES_PUTP2("exit_underline_mode", exit_underline_mode);
}
if (exit_insert_mode)
NCURSES_PUTP2("exit_insert_mode", exit_insert_mode);
if (enter_am_mode && exit_am_mode) {
if (auto_right_margin) {
NCURSES_PUTP2("enter_am_mode", enter_am_mode);
} else {
NCURSES_PUTP2("exit_am_mode", exit_am_mode);
}
}
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
_nc_screen_resume(void)
{
NCURSES_SP_NAME(_nc_screen_resume) (CURRENT_SCREEN);
}
#endif
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_screen_init) (NCURSES_SP_DCL0)
{
NCURSES_SP_NAME(_nc_screen_resume) (NCURSES_SP_ARG);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
_nc_screen_init(void)
{
NCURSES_SP_NAME(_nc_screen_init) (CURRENT_SCREEN);
}
#endif
/* wrap up screen handling */
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_screen_wrap) (NCURSES_SP_DCL0)
{
if (SP_PARM != 0) {
UpdateAttrs(SP_PARM, normal);
#if NCURSES_EXT_FUNCS
if (SP_PARM->_coloron
&& !SP_PARM->_default_color) {
static const NCURSES_CH_T blank = NewChar(BLANK_TEXT);
SP_PARM->_default_color = TRUE;
NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_ARGx
-1,
0,
FALSE,
NCURSES_SP_NAME(_nc_outch));
SP_PARM->_default_color = FALSE;
TINFO_MVCUR(NCURSES_SP_ARGx
SP_PARM->_cursrow,
SP_PARM->_curscol,
screen_lines(SP_PARM) - 1,
0);
ClrToEOL(NCURSES_SP_ARGx blank, TRUE);
}
#endif
if (SP_PARM->_color_defs) {
NCURSES_SP_NAME(_nc_reset_colors) (NCURSES_SP_ARG);
}
}
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
_nc_screen_wrap(void)
{
NCURSES_SP_NAME(_nc_screen_wrap) (CURRENT_SCREEN);
}
#endif
#if USE_XMC_SUPPORT
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_do_xmc_glitch) (NCURSES_SP_DCLx attr_t previous)
{
if (SP_PARM != 0) {
attr_t chg = XMC_CHANGES(previous ^ AttrOf(SCREEN_ATTRS(SP_PARM)));
while (chg != 0) {
if (chg & 1) {
SP_PARM->_curscol += magic_cookie_glitch;
if (SP_PARM->_curscol >= SP_PARM->_columns)
wrap_cursor(NCURSES_SP_ARG);
TR(TRACE_UPDATE, ("bumped to %d,%d after cookie",
SP_PARM->_cursrow, SP_PARM->_curscol));
}
chg >>= 1;
}
}
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
_nc_do_xmc_glitch(attr_t previous)
{
NCURSES_SP_NAME(_nc_do_xmc_glitch) (CURRENT_SCREEN, previous);
}
#endif
#endif /* USE_XMC_SUPPORT */
diff --git a/contrib/ncurses/ncurses/wcwidth.h b/contrib/ncurses/ncurses/wcwidth.h
index e261170188b1..ccae41a9b994 100644
--- a/contrib/ncurses/ncurses/wcwidth.h
+++ b/contrib/ncurses/ncurses/wcwidth.h
@@ -1,312 +1,312 @@
/*
* This is an implementation of wcwidth() and wcswidth() (defined in
* IEEE Std 1002.1-2001) for Unicode.
*
* http://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html
* http://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html
*
* In fixed-width output devices, Latin characters all occupy a single
* "cell" position of equal width, whereas ideographic CJK characters
* occupy two such cells. Interoperability between terminal-line
* applications and (teletype-style) character terminals using the
* UTF-8 encoding requires agreement on which character should advance
* the cursor by how many cell positions. No established formal
* standards exist at present on which Unicode character shall occupy
* how many cell positions on character terminals. These routines are
* a first attempt of defining such behavior based on simple rules
* applied to data provided by the Unicode Consortium.
*
* For some graphical characters, the Unicode standard explicitly
* defines a character-cell width via the definition of the East Asian
* FullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes.
* In all these cases, there is no ambiguity about which width a
* terminal shall use. For characters in the East Asian Ambiguous (A)
* class, the width choice depends purely on a preference of backward
* compatibility with either historic CJK or Western practice.
* Choosing single-width for these characters is easy to justify as
* the appropriate long-term solution, as the CJK practice of
* displaying these characters as double-width comes from historic
* implementation simplicity (8-bit encoded characters were displayed
* single-width and 16-bit ones double-width, even for Greek,
* Cyrillic, etc.) and not any typographic considerations.
*
* Much less clear is the choice of width for the Not East Asian
* (Neutral) class. Existing practice does not dictate a width for any
* of these characters. It would nevertheless make sense
* typographically to allocate two character cells to characters such
* as for instance EM SPACE or VOLUME INTEGRAL, which cannot be
* represented adequately with a single-width glyph. The following
* routines at present merely assign a single-cell width to all
* neutral characters, in the interest of simplicity. This is not
* entirely satisfactory and should be reconsidered before
* establishing a formal standard in this area. At the moment, the
* decision which Not East Asian (Neutral) characters should be
* represented by double-width glyphs cannot yet be answered by
* applying a simple rule from the Unicode database content. Setting
* up a proper standard for the behavior of UTF-8 character terminals
* will require a careful analysis not only of each Unicode character,
* but also of each presentation form, something the author of these
* routines has avoided to do so far.
*
* http://www.unicode.org/unicode/reports/tr11/
*
* Markus Kuhn -- 2007-05-26 (Unicode 5.0)
*
* Permission to use, copy, modify, and distribute this software
* for any purpose and without fee is hereby granted. The author
* disclaims all warranties with regard to this software.
*
* Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
*/
#include <wchar.h>
struct interval {
int first;
int last;
};
/* auxiliary function for binary search in interval table */
static int bisearch(wchar_t ucs, const struct interval *table, int max) {
int min = 0;
int mid;
if (ucs < table[0].first || ucs > table[max].last)
return 0;
while (max >= min) {
mid = (min + max) / 2;
if (ucs > table[mid].last)
min = mid + 1;
else if (ucs < table[mid].first)
max = mid - 1;
else
return 1;
}
return 0;
}
/* The following two functions define the column width of an ISO 10646
* character as follows:
*
* - The null character (U+0000) has a column width of 0.
*
* - Other C0/C1 control characters and DEL will lead to a return
* value of -1.
*
* - Non-spacing and enclosing combining characters (general
* category code Mn or Me in the Unicode database) have a
* column width of 0.
*
* - SOFT HYPHEN (U+00AD) has a column width of 1.
*
* - Other format characters (general category code Cf in the Unicode
* database) and ZERO WIDTH SPACE (U+200B) have a column width of 0.
*
* - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)
* have a column width of 0.
*
* - Spacing characters in the East Asian Wide (W) or East Asian
* Full-width (F) category as defined in Unicode Technical
* Report #11 have a column width of 2.
*
* - All remaining characters (including all printable
* ISO 8859-1 and WGL4 characters, Unicode control characters,
* etc.) have a column width of 1.
*
* This implementation assumes that wchar_t characters are encoded
* in ISO 10646.
*/
-int mk_wcwidth(wchar_t ucs)
+NCURSES_EXPORT(int) mk_wcwidth(wchar_t ucs)
{
/* sorted list of non-overlapping intervals of non-spacing characters */
/* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */
static const struct interval combining[] = {
{ 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 },
{ 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 },
{ 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0600, 0x0603 },
{ 0x0610, 0x0615 }, { 0x064B, 0x065E }, { 0x0670, 0x0670 },
{ 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED },
{ 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A },
{ 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0901, 0x0902 },
{ 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D },
{ 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 },
{ 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD },
{ 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C },
{ 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D },
{ 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC },
{ 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD },
{ 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C },
{ 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D },
{ 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 },
{ 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 },
{ 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC },
{ 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD },
{ 0x0CE2, 0x0CE3 }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D },
{ 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 },
{ 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E },
{ 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC },
{ 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 },
{ 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E },
{ 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 },
{ 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 },
{ 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 },
{ 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x135F, 0x135F },
{ 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 },
{ 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD },
{ 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD },
{ 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 },
{ 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B },
{ 0x1A17, 0x1A18 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 },
{ 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 },
{ 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF },
{ 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 },
{ 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F },
{ 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B },
{ 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F },
{ 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB },
{ 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F },
{ 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x1D167, 0x1D169 },
{ 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD },
{ 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F },
{ 0xE0100, 0xE01EF }
};
/* test for 8-bit control characters */
if (ucs == 0)
return 0;
if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))
return -1;
/* binary search in table of non-spacing characters */
if (bisearch(ucs, combining,
sizeof(combining) / sizeof(struct interval) - 1))
return 0;
/* if we arrive here, ucs is not a combining or C0/C1 control character */
return 1 +
(ucs >= 0x1100 &&
(ucs <= 0x115f || /* Hangul Jamo init. consonants */
ucs == 0x2329 || ucs == 0x232a ||
(ucs >= 0x2e80 && ucs <= 0xa4cf &&
ucs != 0x303f) /* CJK ... Yi */
|| (ucs >= 0xac00 && ucs <= 0xd7a3) /* Hangul Syllables */
|| (ucs >= 0xf900 && ucs <= 0xfaff) /* CJK Compatibility Ideographs */
|| (ucs >= 0xfe10 && ucs <= 0xfe19) /* Vertical forms */
|| (ucs >= 0xfe30 && ucs <= 0xfe6f) /* CJK Compatibility Forms */
|| (ucs >= 0xff00 && ucs <= 0xff60) /* Fullwidth Forms */
|| (ucs >= 0xffe0 && ucs <= 0xffe6)
#if !defined(SIZEOF_WCHAR_T) || (SIZEOF_WCHAR_T >= 4)
|| (ucs >= 0x20000 && ucs <= 0x2fffd)
|| (ucs >= 0x30000 && ucs <= 0x3fffd)
#endif
));
}
-int mk_wcswidth(const wchar_t *pwcs, size_t n)
+NCURSES_EXPORT(int) mk_wcswidth(const wchar_t *pwcs, size_t n)
{
int w, width = 0;
for (;*pwcs && n-- > 0; pwcs++)
if ((w = mk_wcwidth(*pwcs)) < 0)
return -1;
else
width += w;
return width;
}
/*
* The following functions are the same as mk_wcwidth() and
* mk_wcswidth(), except that spacing characters in the East Asian
* Ambiguous (A) category as defined in Unicode Technical Report #11
* have a column width of 2. This variant might be useful for users of
* CJK legacy encodings who want to migrate to UCS without changing
* the traditional terminal character-width behaviour. It is not
* otherwise recommended for general use.
*/
-int mk_wcwidth_cjk(wchar_t ucs)
+NCURSES_EXPORT(int) mk_wcwidth_cjk(wchar_t ucs)
{
/* sorted list of non-overlapping intervals of East Asian Ambiguous
* characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */
static const struct interval ambiguous[] = {
{ 0x00A1, 0x00A1 }, { 0x00A4, 0x00A4 }, { 0x00A7, 0x00A8 },
{ 0x00AA, 0x00AA }, { 0x00AE, 0x00AE }, { 0x00B0, 0x00B4 },
{ 0x00B6, 0x00BA }, { 0x00BC, 0x00BF }, { 0x00C6, 0x00C6 },
{ 0x00D0, 0x00D0 }, { 0x00D7, 0x00D8 }, { 0x00DE, 0x00E1 },
{ 0x00E6, 0x00E6 }, { 0x00E8, 0x00EA }, { 0x00EC, 0x00ED },
{ 0x00F0, 0x00F0 }, { 0x00F2, 0x00F3 }, { 0x00F7, 0x00FA },
{ 0x00FC, 0x00FC }, { 0x00FE, 0x00FE }, { 0x0101, 0x0101 },
{ 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x011B, 0x011B },
{ 0x0126, 0x0127 }, { 0x012B, 0x012B }, { 0x0131, 0x0133 },
{ 0x0138, 0x0138 }, { 0x013F, 0x0142 }, { 0x0144, 0x0144 },
{ 0x0148, 0x014B }, { 0x014D, 0x014D }, { 0x0152, 0x0153 },
{ 0x0166, 0x0167 }, { 0x016B, 0x016B }, { 0x01CE, 0x01CE },
{ 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 },
{ 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA },
{ 0x01DC, 0x01DC }, { 0x0251, 0x0251 }, { 0x0261, 0x0261 },
{ 0x02C4, 0x02C4 }, { 0x02C7, 0x02C7 }, { 0x02C9, 0x02CB },
{ 0x02CD, 0x02CD }, { 0x02D0, 0x02D0 }, { 0x02D8, 0x02DB },
{ 0x02DD, 0x02DD }, { 0x02DF, 0x02DF }, { 0x0391, 0x03A1 },
{ 0x03A3, 0x03A9 }, { 0x03B1, 0x03C1 }, { 0x03C3, 0x03C9 },
{ 0x0401, 0x0401 }, { 0x0410, 0x044F }, { 0x0451, 0x0451 },
{ 0x2010, 0x2010 }, { 0x2013, 0x2016 }, { 0x2018, 0x2019 },
{ 0x201C, 0x201D }, { 0x2020, 0x2022 }, { 0x2024, 0x2027 },
{ 0x2030, 0x2030 }, { 0x2032, 0x2033 }, { 0x2035, 0x2035 },
{ 0x203B, 0x203B }, { 0x203E, 0x203E }, { 0x2074, 0x2074 },
{ 0x207F, 0x207F }, { 0x2081, 0x2084 }, { 0x20AC, 0x20AC },
{ 0x2103, 0x2103 }, { 0x2105, 0x2105 }, { 0x2109, 0x2109 },
{ 0x2113, 0x2113 }, { 0x2116, 0x2116 }, { 0x2121, 0x2122 },
{ 0x2126, 0x2126 }, { 0x212B, 0x212B }, { 0x2153, 0x2154 },
{ 0x215B, 0x215E }, { 0x2160, 0x216B }, { 0x2170, 0x2179 },
{ 0x2190, 0x2199 }, { 0x21B8, 0x21B9 }, { 0x21D2, 0x21D2 },
{ 0x21D4, 0x21D4 }, { 0x21E7, 0x21E7 }, { 0x2200, 0x2200 },
{ 0x2202, 0x2203 }, { 0x2207, 0x2208 }, { 0x220B, 0x220B },
{ 0x220F, 0x220F }, { 0x2211, 0x2211 }, { 0x2215, 0x2215 },
{ 0x221A, 0x221A }, { 0x221D, 0x2220 }, { 0x2223, 0x2223 },
{ 0x2225, 0x2225 }, { 0x2227, 0x222C }, { 0x222E, 0x222E },
{ 0x2234, 0x2237 }, { 0x223C, 0x223D }, { 0x2248, 0x2248 },
{ 0x224C, 0x224C }, { 0x2252, 0x2252 }, { 0x2260, 0x2261 },
{ 0x2264, 0x2267 }, { 0x226A, 0x226B }, { 0x226E, 0x226F },
{ 0x2282, 0x2283 }, { 0x2286, 0x2287 }, { 0x2295, 0x2295 },
{ 0x2299, 0x2299 }, { 0x22A5, 0x22A5 }, { 0x22BF, 0x22BF },
{ 0x2312, 0x2312 }, { 0x2460, 0x24E9 }, { 0x24EB, 0x254B },
{ 0x2550, 0x2573 }, { 0x2580, 0x258F }, { 0x2592, 0x2595 },
{ 0x25A0, 0x25A1 }, { 0x25A3, 0x25A9 }, { 0x25B2, 0x25B3 },
{ 0x25B6, 0x25B7 }, { 0x25BC, 0x25BD }, { 0x25C0, 0x25C1 },
{ 0x25C6, 0x25C8 }, { 0x25CB, 0x25CB }, { 0x25CE, 0x25D1 },
{ 0x25E2, 0x25E5 }, { 0x25EF, 0x25EF }, { 0x2605, 0x2606 },
{ 0x2609, 0x2609 }, { 0x260E, 0x260F }, { 0x2614, 0x2615 },
{ 0x261C, 0x261C }, { 0x261E, 0x261E }, { 0x2640, 0x2640 },
{ 0x2642, 0x2642 }, { 0x2660, 0x2661 }, { 0x2663, 0x2665 },
{ 0x2667, 0x266A }, { 0x266C, 0x266D }, { 0x266F, 0x266F },
{ 0x273D, 0x273D }, { 0x2776, 0x277F }, { 0xE000, 0xF8FF },
{ 0xFFFD, 0xFFFD }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD }
};
/* binary search in table of non-spacing characters */
if (bisearch(ucs, ambiguous,
sizeof(ambiguous) / sizeof(struct interval) - 1))
return 2;
return mk_wcwidth(ucs);
}
-int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n)
+NCURSES_EXPORT(int) mk_wcswidth_cjk(const wchar_t *pwcs, size_t n)
{
int w, width = 0;
for (;*pwcs && n-- > 0; pwcs++)
if ((w = mk_wcwidth_cjk(*pwcs)) < 0)
return -1;
else
width += w;
return width;
}
diff --git a/contrib/ncurses/ncurses/widechar/lib_cchar.c b/contrib/ncurses/ncurses/widechar/lib_cchar.c
index ed1d236d900c..62a1113ecaa6 100644
--- a/contrib/ncurses/ncurses/widechar/lib_cchar.c
+++ b/contrib/ncurses/ncurses/widechar/lib_cchar.c
@@ -1,146 +1,154 @@
/****************************************************************************
- * Copyright 2019,2020 Thomas E. Dickey *
+ * Copyright 2019-2020,2021 Thomas E. Dickey *
* Copyright 2001-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/*
** lib_cchar.c
**
** The routines setcchar() and getcchar().
**
*/
#include <curses.priv.h>
+#include <wchar.h>
-MODULE_ID("$Id: lib_cchar.c,v 1.33 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_cchar.c,v 1.35 2021/01/17 00:04:08 tom Exp $")
/*
* The SuSv2 description leaves some room for interpretation. We'll assume wch
* points to a string which is L'\0' terminated, contains at least one
* character with strictly positive width, which must be the first, and
* contains no characters of negative width.
*/
NCURSES_EXPORT(int)
setcchar(cchar_t *wcval,
const wchar_t *wch,
const attr_t attrs,
NCURSES_PAIRS_T pair_arg,
const void *opts)
{
int code = OK;
int color_pair = pair_arg;
unsigned len;
- TR(TRACE_CCALLS, (T_CALLED("setcchar(%p,%s,%lu,%d,%p)"),
+ TR(TRACE_CCALLS, (T_CALLED("setcchar(%p,%s,attrs=%lu,pair=%d,%p)"),
(void *) wcval, _nc_viswbuf(wch),
(unsigned long) attrs, color_pair, opts));
set_extended_pair(opts, color_pair);
if (wch == NULL
|| ((len = (unsigned) wcslen(wch)) > 1 && _nc_wacs_width(wch[0]) < 0)
|| color_pair < 0) {
code = ERR;
} else {
unsigned i;
if (len > CCHARW_MAX)
len = CCHARW_MAX;
/*
* If we have a following spacing-character, stop at that point. We
* are only interested in adding non-spacing characters.
*/
for (i = 1; i < len; ++i) {
if (_nc_wacs_width(wch[i]) != 0) {
len = i;
break;
}
}
memset(wcval, 0, sizeof(*wcval));
if (len != 0) {
SetAttr(*wcval, attrs);
SetPair(CHDEREF(wcval), color_pair);
memcpy(&wcval->chars, wch, len * sizeof(wchar_t));
TR(TRACE_CCALLS, ("copy %d wchars, first is %s", len,
_tracecchar_t(wcval)));
}
}
TR(TRACE_CCALLS, (T_RETURN("%d"), code));
return (code);
}
NCURSES_EXPORT(int)
getcchar(const cchar_t *wcval,
wchar_t *wch,
attr_t *attrs,
NCURSES_PAIRS_T *pair_arg,
void *opts)
{
int code = ERR;
int color_pair;
TR(TRACE_CCALLS, (T_CALLED("getcchar(%p,%p,%p,%p,%p)"),
(const void *) wcval,
(void *) wch,
(void *) attrs,
(void *) pair_arg,
opts));
- if (opts == NULL && wcval != NULL) {
+#if !NCURSES_EXT_COLORS
+ if (opts != NULL) {
+ ; /* empty */
+ } else
+#endif
+ if (wcval != NULL) {
wchar_t *wp;
int len;
len = ((wp = wmemchr(wcval->chars, L'\0', (size_t) CCHARW_MAX))
? (int) (wp - wcval->chars)
: CCHARW_MAX);
if (wch == NULL) {
/*
* If the value is a null, set the length to 1.
* If the value is not a null, return the length plus 1 for null.
*/
code = (len < CCHARW_MAX) ? (len + 1) : CCHARW_MAX;
} else if (attrs == 0 || pair_arg == 0) {
code = ERR;
} else if (len >= 0) {
+ TR(TRACE_CCALLS, ("copy %d wchars, first is %s", len,
+ _tracecchar_t(wcval)));
*attrs = AttrOf(*wcval) & A_ATTRIBUTES;
color_pair = GetPair(*wcval);
get_extended_pair(opts, color_pair);
*pair_arg = limit_PAIRS(color_pair);
wmemcpy(wch, wcval->chars, (size_t) len);
wch[len] = L'\0';
if (*pair_arg >= 0)
code = OK;
}
}
TR(TRACE_CCALLS, (T_RETURN("%d"), code));
return (code);
}
diff --git a/contrib/ncurses/ncurses/widechar/lib_ins_wch.c b/contrib/ncurses/ncurses/widechar/lib_ins_wch.c
index a744f5bf138c..f75361081b62 100644
--- a/contrib/ncurses/ncurses/widechar/lib_ins_wch.c
+++ b/contrib/ncurses/ncurses/widechar/lib_ins_wch.c
@@ -1,150 +1,150 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 2002-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas Dickey 2002 *
****************************************************************************/
/*
** lib_ins_wch.c
**
** The routine wins_wch().
**
*/
#include <curses.priv.h>
-MODULE_ID("$Id: lib_ins_wch.c,v 1.24 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_ins_wch.c,v 1.25 2020/12/05 20:04:59 tom Exp $")
/*
* Insert the given character, updating the current location to simplify
* inserting a string.
*/
NCURSES_EXPORT(int)
_nc_insert_wch(WINDOW *win, const cchar_t *wch)
{
int cells = _nc_wacs_width(CharOf(CHDEREF(wch)));
int code = OK;
if (cells < 0) {
code = winsch(win, (chtype) CharOf(CHDEREF(wch)));
} else {
if (cells == 0)
cells = 1;
if (win->_curx <= win->_maxx) {
int cell;
struct ldat *line = &(win->_line[win->_cury]);
NCURSES_CH_T *end = &(line->text[win->_curx]);
NCURSES_CH_T *temp1 = &(line->text[win->_maxx]);
NCURSES_CH_T *temp2 = temp1 - cells;
CHANGED_TO_EOL(line, win->_curx, win->_maxx);
while (temp1 > end)
*temp1-- = *temp2--;
*temp1 = _nc_render(win, *wch);
for (cell = 1; cell < cells; ++cell) {
SetWidecExt(temp1[cell], cell);
}
win->_curx = (NCURSES_SIZE_T) (win->_curx + cells);
}
}
return code;
}
NCURSES_EXPORT(int)
wins_wch(WINDOW *win, const cchar_t *wch)
{
int code = ERR;
T((T_CALLED("wins_wch(%p, %s)"), (void *) win, _tracecchar_t(wch)));
if (win != 0) {
NCURSES_SIZE_T oy = win->_cury;
NCURSES_SIZE_T ox = win->_curx;
code = _nc_insert_wch(win, wch);
win->_curx = ox;
win->_cury = oy;
_nc_synchook(win);
}
returnCode(code);
}
NCURSES_EXPORT(int)
wins_nwstr(WINDOW *win, const wchar_t *wstr, int n)
{
int code = ERR;
T((T_CALLED("wins_nwstr(%p,%s,%d)"),
(void *) win, _nc_viswbufn(wstr, n), n));
if (win != 0
&& wstr != 0) {
if (n < 1)
- n = (int) wcslen(wstr);
+ n = INT_MAX;
code = OK;
if (n > 0) {
const wchar_t *cp;
SCREEN *sp = _nc_screen_of(win);
NCURSES_SIZE_T oy = win->_cury;
NCURSES_SIZE_T ox = win->_curx;
- for (cp = wstr; ((cp - wstr) < n) && *cp; cp++) {
+ for (cp = wstr; (*cp != L'\0') && ((cp - wstr) < n); cp++) {
int len = _nc_wacs_width(*cp);
if ((len >= 0 && len != 1) || !is7bits(*cp)) {
cchar_t tmp_cchar;
wchar_t tmp_wchar = *cp;
memset(&tmp_cchar, 0, sizeof(tmp_cchar));
(void) setcchar(&tmp_cchar,
&tmp_wchar,
WA_NORMAL,
(short) 0,
(void *) 0);
code = _nc_insert_wch(win, &tmp_cchar);
} else {
/* tabs, other ASCII stuff */
code = _nc_insert_ch(sp, win, (chtype) (*cp));
}
if (code != OK)
break;
}
win->_curx = ox;
win->_cury = oy;
_nc_synchook(win);
}
}
returnCode(code);
}
diff --git a/contrib/ncurses/ncurses/widechar/lib_vid_attr.c b/contrib/ncurses/ncurses/widechar/lib_vid_attr.c
index e167bebeec64..2d9531f1b864 100644
--- a/contrib/ncurses/ncurses/widechar/lib_vid_attr.c
+++ b/contrib/ncurses/ncurses/widechar/lib_vid_attr.c
@@ -1,368 +1,367 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 2002-2014,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey *
****************************************************************************/
#include <curses.priv.h>
#ifndef CUR
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_vid_attr.c,v 1.28 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: lib_vid_attr.c,v 1.30 2020/05/27 23:54:31 tom Exp $")
#define doPut(mode) \
TPUTS_TRACE(#mode); \
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx mode, 1, outc)
#define TurnOn(mask, mode) \
if ((turn_on & mask) && mode) { \
TPUTS_TRACE(#mode); \
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx mode, 1, outc); \
}
#define TurnOff(mask, mode) \
if ((turn_off & mask) && mode) { \
TPUTS_TRACE(#mode); \
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx mode, 1, outc); \
turn_off &= ~mask; \
}
/* if there is no current screen, assume we *can* do color */
#define SetColorsIf(why, old_attr, old_pair) \
if (can_color && (why)) { \
TR(TRACE_ATTRS, ("old pair = %d -- new pair = %d", old_pair, color_pair)); \
if ((color_pair != old_pair) \
|| (fix_pair0 && (color_pair == 0)) \
|| (reverse ^ ((old_attr & A_REVERSE) != 0))) { \
NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_ARGx \
old_pair, color_pair, \
reverse, outc); \
} \
}
#define set_color(mode, pair) \
mode &= ALL_BUT_COLOR; \
mode |= (attr_t) ColorPair(pair)
NCURSES_EXPORT(int)
NCURSES_SP_NAME(vid_puts) (NCURSES_SP_DCLx
attr_t newmode,
NCURSES_PAIRS_T pair_arg,
void *opts OPTIONAL_PAIR,
NCURSES_SP_OUTC outc)
{
int color_pair = pair_arg;
#if NCURSES_EXT_COLORS
static attr_t previous_attr = A_NORMAL;
static int previous_pair = 0;
attr_t turn_on, turn_off;
bool reverse = FALSE;
bool can_color = (SP_PARM == 0 || SP_PARM->_coloron);
#if NCURSES_EXT_FUNCS
bool fix_pair0 = (SP_PARM != 0 && SP_PARM->_coloron && !SP_PARM->_default_color);
#else
#define fix_pair0 FALSE
#endif
if (!IsValidTIScreen(SP_PARM))
returnCode(ERR);
newmode &= A_ATTRIBUTES;
set_extended_pair(opts, color_pair);
T((T_CALLED("vid_puts(%s,%d)"), _traceattr(newmode), color_pair));
/* this allows us to go on whether or not newterm() has been called */
if (SP_PARM) {
previous_attr = AttrOf(SCREEN_ATTRS(SP_PARM));
previous_pair = GetPair(SCREEN_ATTRS(SP_PARM));
}
TR(TRACE_ATTRS, ("previous attribute was %s, %d",
_traceattr(previous_attr), previous_pair));
#if !USE_XMC_SUPPORT
if ((SP_PARM != 0)
&& (magic_cookie_glitch > 0))
newmode &= ~(SP_PARM->_xmc_suppress);
#endif
/*
* If we have a terminal that cannot combine color with video
* attributes, use the colors in preference.
*/
if ((color_pair != 0
|| fix_pair0)
&& (no_color_video > 0)) {
/*
* If we had chosen the A_xxx definitions to correspond to the
* no_color_video mask, we could simply shift it up and mask off the
* attributes. But we did not (actually copied Solaris' definitions).
* However, this is still simpler/faster than a lookup table.
*
* The 63 corresponds to A_STANDOUT, A_UNDERLINE, A_REVERSE, A_BLINK,
* A_DIM, A_BOLD which are 1:1 with no_color_video. The bits that
* correspond to A_INVIS, A_PROTECT (192) must be shifted up 1 and
* A_ALTCHARSET (256) down 2 to line up. We use the NCURSES_BITS
* macro so this will work properly for the wide-character layout.
*/
unsigned value = (unsigned) no_color_video;
attr_t mask = NCURSES_BITS((value & 63)
| ((value & 192) << 1)
| ((value & 256) >> 2), 8);
if ((mask & A_REVERSE) != 0
&& (newmode & A_REVERSE) != 0) {
reverse = TRUE;
mask &= ~A_REVERSE;
}
newmode &= ~mask;
}
if (newmode == previous_attr
&& color_pair == previous_pair)
returnCode(OK);
if (reverse) {
newmode &= ~A_REVERSE;
}
turn_off = (~newmode & previous_attr) & ALL_BUT_COLOR;
turn_on = (newmode & ~(previous_attr & TPARM_ATTR)) & ALL_BUT_COLOR;
SetColorsIf(((color_pair == 0) && !fix_pair0), previous_attr, previous_pair);
if (newmode == A_NORMAL) {
if ((previous_attr & A_ALTCHARSET) && exit_alt_charset_mode) {
doPut(exit_alt_charset_mode);
previous_attr &= ~A_ALTCHARSET;
}
if (previous_attr) {
if (exit_attribute_mode) {
doPut(exit_attribute_mode);
} else {
if (!SP_PARM || SP_PARM->_use_rmul) {
TurnOff(A_UNDERLINE, exit_underline_mode);
}
if (!SP_PARM || SP_PARM->_use_rmso) {
TurnOff(A_STANDOUT, exit_standout_mode);
}
#if USE_ITALIC
if (!SP_PARM || SP_PARM->_use_ritm) {
TurnOff(A_ITALIC, exit_italics_mode);
}
#endif
}
previous_attr &= ALL_BUT_COLOR;
previous_pair = 0;
}
SetColorsIf((color_pair != 0) || fix_pair0, previous_attr, previous_pair);
} else if (set_attributes) {
if (turn_on || turn_off) {
TPUTS_TRACE("set_attributes");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_9(set_attributes,
- (newmode & A_STANDOUT) != 0,
- (newmode & A_UNDERLINE) != 0,
- (newmode & A_REVERSE) != 0,
- (newmode & A_BLINK) != 0,
- (newmode & A_DIM) != 0,
- (newmode & A_BOLD) != 0,
- (newmode & A_INVIS) != 0,
- (newmode & A_PROTECT) != 0,
- (newmode & A_ALTCHARSET) != 0),
+ TIPARM_9(set_attributes,
+ (newmode & A_STANDOUT) != 0,
+ (newmode & A_UNDERLINE) != 0,
+ (newmode & A_REVERSE) != 0,
+ (newmode & A_BLINK) != 0,
+ (newmode & A_DIM) != 0,
+ (newmode & A_BOLD) != 0,
+ (newmode & A_INVIS) != 0,
+ (newmode & A_PROTECT) != 0,
+ (newmode & A_ALTCHARSET) != 0),
1, outc);
previous_attr &= ALL_BUT_COLOR;
previous_pair = 0;
}
#if USE_ITALIC
if (!SP_PARM || SP_PARM->_use_ritm) {
if (turn_on & A_ITALIC) {
TurnOn(A_ITALIC, enter_italics_mode);
} else if (turn_off & A_ITALIC) {
TurnOff(A_ITALIC, exit_italics_mode);
}
}
#endif
SetColorsIf((color_pair != 0) || fix_pair0, previous_attr, previous_pair);
} else {
TR(TRACE_ATTRS, ("turning %s off", _traceattr(turn_off)));
TurnOff(A_ALTCHARSET, exit_alt_charset_mode);
if (!SP_PARM || SP_PARM->_use_rmul) {
TurnOff(A_UNDERLINE, exit_underline_mode);
}
if (!SP_PARM || SP_PARM->_use_rmso) {
TurnOff(A_STANDOUT, exit_standout_mode);
}
#if USE_ITALIC
if (!SP_PARM || SP_PARM->_use_ritm) {
TurnOff(A_ITALIC, exit_italics_mode);
}
#endif
if (turn_off && exit_attribute_mode) {
doPut(exit_attribute_mode);
turn_on |= (newmode & ALL_BUT_COLOR);
previous_attr &= ALL_BUT_COLOR;
previous_pair = 0;
}
SetColorsIf((color_pair != 0) || fix_pair0, previous_attr, previous_pair);
TR(TRACE_ATTRS, ("turning %s on", _traceattr(turn_on)));
/* *INDENT-OFF* */
TurnOn(A_ALTCHARSET, enter_alt_charset_mode);
TurnOn(A_BLINK, enter_blink_mode);
TurnOn(A_BOLD, enter_bold_mode);
TurnOn(A_DIM, enter_dim_mode);
TurnOn(A_REVERSE, enter_reverse_mode);
TurnOn(A_STANDOUT, enter_standout_mode);
TurnOn(A_PROTECT, enter_protected_mode);
TurnOn(A_INVIS, enter_secure_mode);
TurnOn(A_UNDERLINE, enter_underline_mode);
#if USE_ITALIC
TurnOn(A_ITALIC, enter_italics_mode);
#endif
#if USE_WIDEC_SUPPORT && defined(enter_horizontal_hl_mode)
TurnOn(A_HORIZONTAL, enter_horizontal_hl_mode);
TurnOn(A_LEFT, enter_left_hl_mode);
TurnOn(A_LOW, enter_low_hl_mode);
TurnOn(A_RIGHT, enter_right_hl_mode);
TurnOn(A_TOP, enter_top_hl_mode);
TurnOn(A_VERTICAL, enter_vertical_hl_mode);
#endif
/* *INDENT-ON* */
-
}
if (reverse)
newmode |= A_REVERSE;
if (SP_PARM) {
SetAttr(SCREEN_ATTRS(SP_PARM), newmode);
SetPair(SCREEN_ATTRS(SP_PARM), color_pair);
} else {
previous_attr = newmode;
previous_pair = color_pair;
}
returnCode(OK);
#else
T((T_CALLED("vid_puts(%s,%d)"), _traceattr(newmode), color_pair));
(void) opts;
set_color(newmode, color_pair);
returnCode(NCURSES_SP_NAME(vidputs) (NCURSES_SP_ARGx newmode, outc));
#endif
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
vid_puts(attr_t newmode,
NCURSES_PAIRS_T pair_arg,
void *opts GCC_UNUSED,
NCURSES_OUTC outc)
{
SetSafeOutcWrapper(outc);
return NCURSES_SP_NAME(vid_puts) (CURRENT_SCREEN,
newmode,
pair_arg,
opts,
_nc_outc_wrapper);
}
#endif
#undef vid_attr
NCURSES_EXPORT(int)
NCURSES_SP_NAME(vid_attr) (NCURSES_SP_DCLx
attr_t newmode,
NCURSES_PAIRS_T pair_arg,
void *opts)
{
T((T_CALLED("vid_attr(%s,%d)"), _traceattr(newmode), (int) pair_arg));
returnCode(NCURSES_SP_NAME(vid_puts) (NCURSES_SP_ARGx
newmode,
pair_arg,
opts,
NCURSES_SP_NAME(_nc_putchar)));
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
vid_attr(attr_t newmode, NCURSES_PAIRS_T pair_arg, void *opts)
{
return NCURSES_SP_NAME(vid_attr) (CURRENT_SCREEN, newmode, pair_arg, opts);
}
#endif
/*
* This implementation uses the same mask values for A_xxx and WA_xxx, so
* we can use termattrs() for part of the logic.
*/
NCURSES_EXPORT(attr_t)
NCURSES_SP_NAME(term_attrs) (NCURSES_SP_DCL0)
{
attr_t attrs = 0;
T((T_CALLED("term_attrs()")));
if (SP_PARM) {
attrs = NCURSES_SP_NAME(termattrs) (NCURSES_SP_ARG);
#if USE_WIDEC_SUPPORT && defined(enter_horizontal_hl_mode)
/* these are only supported for wide-character mode */
if (enter_horizontal_hl_mode)
attrs |= WA_HORIZONTAL;
if (enter_left_hl_mode)
attrs |= WA_LEFT;
if (enter_low_hl_mode)
attrs |= WA_LOW;
if (enter_right_hl_mode)
attrs |= WA_RIGHT;
if (enter_top_hl_mode)
attrs |= WA_TOP;
if (enter_vertical_hl_mode)
attrs |= WA_VERTICAL;
#endif
}
returnAttr(attrs);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(attr_t)
term_attrs(void)
{
return NCURSES_SP_NAME(term_attrs) (CURRENT_SCREEN);
}
#endif
diff --git a/contrib/ncurses/ncurses/widechar/widechars.c b/contrib/ncurses/ncurses/widechar/widechars.c
index 35774793216d..d05ba98a8265 100644
--- a/contrib/ncurses/ncurses/widechar/widechars.c
+++ b/contrib/ncurses/ncurses/widechar/widechars.c
@@ -1,153 +1,153 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 2012,2013 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
#include <curses.priv.h>
#if USE_WIDEC_SUPPORT
-MODULE_ID("$Id: widechars.c,v 1.7 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: widechars.c,v 1.9 2020/08/29 16:22:03 juergen Exp $")
-#if defined(_WIN32)
+#if (defined(_NC_WINDOWS)) && !defined(_NC_MSC)
/*
* MinGW has wide-character functions, but they do not work correctly.
*/
int
_nc_mbtowc(wchar_t *pwc, const char *s, size_t n)
{
int result;
int count;
int try;
if (s != 0 && n != 0) {
/*
* MultiByteToWideChar() can decide to return more than one
* wide-character. We want only one. Ignore any trailing null, both
* in the initial count and in the conversion.
*/
count = 0;
for (try = 1; try <= (int) n; ++try) {
count = MultiByteToWideChar(CP_UTF8,
MB_ERR_INVALID_CHARS,
s,
try,
pwc,
0);
TR(TRACE_BITS, ("...try %d:%d", try, count));
if (count > 0) {
break;
}
}
if (count < 1 || count > 2) {
result = -1;
} else {
wchar_t actual[2];
memset(&actual, 0, sizeof(actual));
count = MultiByteToWideChar(CP_UTF8,
MB_ERR_INVALID_CHARS,
s,
try,
actual,
2);
TR(TRACE_BITS, ("\twin32 ->%#x, %#x", actual[0], actual[1]));
*pwc = actual[0];
if (actual[1] != 0)
result = -1;
else
result = try;
}
} else {
result = 0;
}
return result;
}
int
_nc_mblen(const char *s, size_t n)
{
int result = -1;
int count;
wchar_t temp;
if (s != 0 && n != 0) {
count = _nc_mbtowc(&temp, s, n);
if (count == 1) {
int check = WideCharToMultiByte(CP_UTF8,
0,
&temp,
1,
NULL,
0, /* compute length only */
NULL,
NULL);
TR(TRACE_BITS, ("\tcheck ->%d\n", check));
if (check > 0 && (size_t) check <= n) {
result = check;
}
}
} else {
result = 0;
}
return result;
}
int __MINGW_NOTHROW
_nc_wctomb(char *s, wchar_t wc)
{
int result;
int check;
check = WideCharToMultiByte(CP_UTF8,
0,
&wc,
1,
NULL,
0, /* compute length only */
NULL,
NULL);
if (check > 0) {
result = WideCharToMultiByte(CP_UTF8,
0,
&wc,
1,
s,
check + 1,
NULL,
NULL);
} else {
result = -1;
}
return result;
}
-#endif /* _WIN32 */
+#endif /* _NC_WINDOWS */
#endif /* USE_WIDEC_SUPPORT */
diff --git a/contrib/ncurses/ncurses/win32con/gettimeofday.c b/contrib/ncurses/ncurses/win32con/gettimeofday.c
index 8fad9a625416..94be7b563b95 100644
--- a/contrib/ncurses/ncurses/win32con/gettimeofday.c
+++ b/contrib/ncurses/ncurses/win32con/gettimeofday.c
@@ -1,55 +1,55 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 2008-2010,2014 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
#ifdef WINVER
# undef WINVER
#endif
#define WINVER 0x0501
#include <curses.priv.h>
#include <windows.h>
-MODULE_ID("$Id: gettimeofday.c,v 1.4 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: gettimeofday.c,v 1.6 2020/07/11 21:03:53 tom Exp $")
#define JAN1970 116444736000000000LL /* the value for 01/01/1970 00:00 */
-int
+NCURSES_EXPORT(int)
gettimeofday(struct timeval *tv, void *tz GCC_UNUSED)
{
union {
FILETIME ft;
long long since1601; /* time since 1 Jan 1601 in 100ns units */
} data;
GetSystemTimeAsFileTime(&data.ft);
tv->tv_usec = (long) ((data.since1601 / 10LL) % 1000000LL);
tv->tv_sec = (long) ((data.since1601 - JAN1970) / 10000000LL);
return (0);
}
diff --git a/contrib/ncurses/ncurses/win32con/wcwidth.c b/contrib/ncurses/ncurses/win32con/wcwidth.c
index 17ebaa61a145..55843662e8aa 100644
--- a/contrib/ncurses/ncurses/win32con/wcwidth.c
+++ b/contrib/ncurses/ncurses/win32con/wcwidth.c
@@ -1,51 +1,51 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
#include <curses.priv.h>
-MODULE_ID("$Id: wcwidth.c,v 1.3 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: wcwidth.c,v 1.4 2020/07/11 21:02:10 tom Exp $")
#if USE_WIDEC_SUPPORT
#define mk_wcwidth(ucs) _nc_wcwidth(ucs)
#define mk_wcswidth(pwcs, n) _nc_wcswidth(pwcs, n)
#define mk_wcwidth_cjk(ucs) _nc_wcwidth_cjk(ucs)
#define mk_wcswidth_cjk(pwcs, n) _nc_wcswidth_cjk(pwcs, n)
-extern int mk_wcwidth(wchar_t);
-extern int mk_wcswidth(const wchar_t *, size_t);
-extern int mk_wcwidth_cjk(wchar_t);
-extern int mk_wcswidth_cjk(const wchar_t *, size_t);
+NCURSES_EXPORT(int) mk_wcwidth(wchar_t);
+NCURSES_EXPORT(int) mk_wcswidth(const wchar_t *, size_t);
+NCURSES_EXPORT(int) mk_wcwidth_cjk(wchar_t);
+NCURSES_EXPORT(int) mk_wcswidth_cjk(const wchar_t *, size_t);
#include <wcwidth.h>
#else
void _nc_empty_wcwidth(void);
void
_nc_empty_wcwidth(void)
{
}
#endif
diff --git a/contrib/ncurses/ncurses/win32con/win32_driver.c b/contrib/ncurses/ncurses/win32con/win32_driver.c
new file mode 100644
index 000000000000..45aadf2f596a
--- /dev/null
+++ b/contrib/ncurses/ncurses/win32con/win32_driver.c
@@ -0,0 +1,1221 @@
+/****************************************************************************
+ * Copyright 2018,2020 Thomas E. Dickey *
+ * Copyright 2008-2016,2017 Free Software Foundation, Inc. *
+ * *
+ * Permission is hereby granted, free of charge, to any person obtaining a *
+ * copy of this software and associated documentation files (the *
+ * "Software"), to deal in the Software without restriction, including *
+ * without limitation the rights to use, copy, modify, merge, publish, *
+ * distribute, distribute with modifications, sublicense, and/or sell *
+ * copies of the Software, and to permit persons to whom the Software is *
+ * furnished to do so, subject to the following conditions: *
+ * *
+ * The above copyright notice and this permission notice shall be included *
+ * in all copies or substantial portions of the Software. *
+ * *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
+ * *
+ * Except as contained in this notice, the name(s) of the above copyright *
+ * holders shall not be used in advertising or otherwise to promote the *
+ * sale, use or other dealings in this Software without prior written *
+ * authorization. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Juergen Pfeifer *
+ * and: Thomas E. Dickey *
+ ****************************************************************************/
+
+/*
+ * TODO - improve screen-repainting performance, using implied wraparound to reduce write's
+ * TODO - make it optional whether screen is restored or not when non-buffered
+ */
+
+#include <curses.priv.h>
+#ifdef _NC_WINDOWS
+#if (defined(__MINGW32__) || defined(__MINGW64__))
+#include <wchar.h>
+#else
+#include <tchar.h>
+#endif
+#include <io.h>
+
+#define CUR TerminalType(my_term).
+
+MODULE_ID("$Id: win32_driver.c,v 1.2 2020/11/21 23:35:56 tom Exp $")
+
+#define WINMAGIC NCDRV_MAGIC(NCDRV_WINCONSOLE)
+#define EXP_OPTIMIZE 0
+
+static bool console_initialized = FALSE;
+
+#define AssertTCB() assert(TCB != 0 && (TCB->magic == WINMAGIC))
+#define validateConsoleHandle() (AssertTCB() , console_initialized ||\
+ (console_initialized=\
+ _nc_console_checkinit(TRUE,FALSE)))
+#define SetSP() assert(TCB->csp != 0); sp = TCB->csp; (void) sp
+#define AdjustY() (WINCONSOLE.buffered ?\
+ 0 : (int) WINCONSOLE.SBI.srWindow.Top)
+#define RevAttr(attr) (WORD) (((attr) & 0xff00) | \
+ ((((attr) & 0x07) << 4) | \
+ (((attr) & 0x70) >> 4)))
+
+#if USE_WIDEC_SUPPORT
+#define write_screen WriteConsoleOutputW
+#define read_screen ReadConsoleOutputW
+#else
+#define write_screen WriteConsoleOutput
+#define read_screen ReadConsoleOutput
+#endif
+
+static WORD
+MapAttr(WORD res, attr_t ch)
+{
+ if (ch & A_COLOR) {
+ int p;
+
+ p = PairNumber(ch);
+ if (p > 0 && p < CON_NUMPAIRS) {
+ WORD a;
+ a = WINCONSOLE.pairs[p];
+ res = (WORD) ((res & 0xff00) | a);
+ }
+ }
+
+ if (ch & A_REVERSE) {
+ res = RevAttr(res);
+ }
+
+ if (ch & A_STANDOUT) {
+ res = RevAttr(res) | BACKGROUND_INTENSITY;
+ }
+
+ if (ch & A_BOLD)
+ res |= FOREGROUND_INTENSITY;
+
+ if (ch & A_DIM)
+ res |= BACKGROUND_INTENSITY;
+
+ return res;
+}
+
+#if 0 /* def TRACE */
+static void
+dump_screen(const char *fn, int ln)
+{
+ int max_cells = (WINCONSOLE.SBI.dwSize.Y *
+ (1 + WINCONSOLE.SBI.dwSize.X)) + 1;
+ char output[max_cells];
+ CHAR_INFO save_screen[max_cells];
+ COORD save_size;
+ SMALL_RECT save_region;
+ COORD bufferCoord;
+
+ T(("dump_screen %s@%d", fn, ln));
+
+ save_region.Top = WINCONSOLE.SBI.srWindow.Top;
+ save_region.Left = WINCONSOLE.SBI.srWindow.Left;
+ save_region.Bottom = WINCONSOLE.SBI.srWindow.Bottom;
+ save_region.Right = WINCONSOLE.SBI.srWindow.Right;
+
+ save_size.X = (SHORT) (save_region.Right - save_region.Left + 1);
+ save_size.Y = (SHORT) (save_region.Bottom - save_region.Top + 1);
+
+ bufferCoord.X = bufferCoord.Y = 0;
+
+ if (read_screen(WINCONSOLE.hdl,
+ save_screen,
+ save_size,
+ bufferCoord,
+ &save_region)) {
+ int i, j;
+ int ij = 0;
+ int k = 0;
+
+ for (i = save_region.Top; i <= save_region.Bottom; ++i) {
+ for (j = save_region.Left; j <= save_region.Right; ++j) {
+ output[k++] = save_screen[ij++].Char.AsciiChar;
+ }
+ output[k++] = '\n';
+ }
+ output[k] = 0;
+
+ T(("DUMP: %d,%d - %d,%d",
+ save_region.Top,
+ save_region.Left,
+ save_region.Bottom,
+ save_region.Right));
+ T(("%s", output));
+ }
+}
+
+#else
+#define dump_screen(fn,ln) /* nothing */
+#endif
+
+#if USE_WIDEC_SUPPORT
+/*
+ * TODO: support surrogate pairs
+ * TODO: support combining characters
+ * TODO: support acsc
+ * TODO: _nc_wacs should be part of sp.
+ */
+static BOOL
+con_write16(TERMINAL_CONTROL_BLOCK * TCB,
+ int y, int x, cchar_t *str, int limit)
+{
+ int actual = 0;
+ CHAR_INFO *ci = TypeAlloca(CHAR_INFO, limit);
+ COORD loc, siz;
+ SMALL_RECT rec;
+ int i;
+ cchar_t ch;
+ SCREEN *sp;
+
+ AssertTCB();
+ SetSP();
+
+ for (i = actual = 0; i < limit; i++) {
+ ch = str[i];
+ if (isWidecExt(ch))
+ continue;
+ ci[actual].Char.UnicodeChar = CharOf(ch);
+ ci[actual].Attributes = MapAttr(WINCONSOLE.SBI.wAttributes,
+ AttrOf(ch));
+ if (AttrOf(ch) & A_ALTCHARSET) {
+ if (_nc_wacs) {
+ int which = CharOf(ch);
+ if (which > 0
+ && which < ACS_LEN
+ && CharOf(_nc_wacs[which]) != 0) {
+ ci[actual].Char.UnicodeChar = CharOf(_nc_wacs[which]);
+ } else {
+ ci[actual].Char.UnicodeChar = ' ';
+ }
+ }
+ }
+ ++actual;
+ }
+
+ loc.X = (SHORT) 0;
+ loc.Y = (SHORT) 0;
+ siz.X = (SHORT) actual;
+ siz.Y = 1;
+
+ rec.Left = (SHORT) x;
+ rec.Top = (SHORT) (y + AdjustY());
+ rec.Right = (SHORT) (x + limit - 1);
+ rec.Bottom = rec.Top;
+
+ return write_screen(WINCONSOLE.hdl, ci, siz, loc, &rec);
+}
+#define con_write(tcb, y, x, str, n) con_write16(tcb, y, x, str, n)
+#else
+static BOOL
+con_write8(TERMINAL_CONTROL_BLOCK * TCB, int y, int x, chtype *str, int n)
+{
+ CHAR_INFO *ci = TypeAlloca(CHAR_INFO, n);
+ COORD loc, siz;
+ SMALL_RECT rec;
+ int i;
+ chtype ch;
+ SCREEN *sp;
+
+ AssertTCB();
+ SetSP();
+
+ for (i = 0; i < n; i++) {
+ ch = str[i];
+ ci[i].Char.AsciiChar = ChCharOf(ch);
+ ci[i].Attributes = MapAttr(WINCONSOLE.SBI.wAttributes,
+ ChAttrOf(ch));
+ if (ChAttrOf(ch) & A_ALTCHARSET) {
+ if (sp->_acs_map)
+ ci[i].Char.AsciiChar =
+ ChCharOf(NCURSES_SP_NAME(_nc_acs_char) (sp, ChCharOf(ch)));
+ }
+ }
+
+ loc.X = (short) 0;
+ loc.Y = (short) 0;
+ siz.X = (short) n;
+ siz.Y = 1;
+
+ rec.Left = (short) x;
+ rec.Top = (short) y;
+ rec.Right = (short) (x + n - 1);
+ rec.Bottom = rec.Top;
+
+ return write_screen(WINCONSOLE.hdl, ci, siz, loc, &rec);
+}
+#define con_write(tcb, y, x, str, n) con_write8(tcb, y, x, str, n)
+#endif
+
+#if EXP_OPTIMIZE
+/*
+ * Comparing new/current screens, determine the last column-index for a change
+ * beginning on the given row,col position. Unlike a serial terminal, there is
+ * no cost for "moving" the "cursor" on the line as we update it.
+ */
+static int
+find_end_of_change(SCREEN *sp, int row, int col)
+{
+ int result = col;
+ struct ldat *curdat = CurScreen(sp)->_line + row;
+ struct ldat *newdat = NewScreen(sp)->_line + row;
+
+ while (col <= newdat->lastchar) {
+#if USE_WIDEC_SUPPORT
+ if (isWidecExt(curdat->text[col]) ||
+ isWidecExt(newdat->text[col])) {
+ result = col;
+ } else if (memcmp(&curdat->text[col],
+ &newdat->text[col],
+ sizeof(curdat->text[0]))) {
+ result = col;
+ } else {
+ break;
+ }
+#else
+ if (curdat->text[col] != newdat->text[col]) {
+ result = col;
+ } else {
+ break;
+ }
+#endif
+ ++col;
+ }
+ return result;
+}
+
+/*
+ * Given a row,col position at the end of a change-chunk, look for the
+ * beginning of the next change-chunk.
+ */
+static int
+find_next_change(SCREEN *sp, int row, int col)
+{
+ struct ldat *curdat = CurScreen(sp)->_line + row;
+ struct ldat *newdat = NewScreen(sp)->_line + row;
+ int result = newdat->lastchar + 1;
+
+ while (++col <= newdat->lastchar) {
+#if USE_WIDEC_SUPPORT
+ if (isWidecExt(curdat->text[col]) !=
+ isWidecExt(newdat->text[col])) {
+ result = col;
+ break;
+ } else if (memcmp(&curdat->text[col],
+ &newdat->text[col],
+ sizeof(curdat->text[0]))) {
+ result = col;
+ break;
+ }
+#else
+ if (curdat->text[col] != newdat->text[col]) {
+ result = col;
+ break;
+ }
+#endif
+ }
+ return result;
+}
+
+#define EndChange(first) \
+ find_end_of_change(sp, y, first)
+#define NextChange(last) \
+ find_next_change(sp, y, last)
+
+#endif /* EXP_OPTIMIZE */
+
+#define MARK_NOCHANGE(win,row) \
+ win->_line[row].firstchar = _NOCHANGE; \
+ win->_line[row].lastchar = _NOCHANGE
+
+static bool
+restore_original_screen(void)
+{
+ COORD bufferCoord;
+ bool result = FALSE;
+ SMALL_RECT save_region = WINCONSOLE.save_region;
+
+ T(("... restoring %s", WINCONSOLE.window_only ?
+ "window" : "entire buffer"));
+
+ bufferCoord.X = (SHORT) (WINCONSOLE.window_only ?
+ WINCONSOLE.SBI.srWindow.Left : 0);
+ bufferCoord.Y = (SHORT) (WINCONSOLE.window_only ?
+ WINCONSOLE.SBI.srWindow.Top : 0);
+
+ if (write_screen(WINCONSOLE.hdl,
+ WINCONSOLE.save_screen,
+ WINCONSOLE.save_size,
+ bufferCoord,
+ &save_region)) {
+ result = TRUE;
+ mvcur(-1, -1, LINES - 2, 0);
+ T(("... restore original screen contents ok %dx%d (%d,%d - %d,%d)",
+ WINCONSOLE.save_size.Y,
+ WINCONSOLE.save_size.X,
+ save_region.Top,
+ save_region.Left,
+ save_region.Bottom,
+ save_region.Right));
+ } else {
+ T(("... restore original screen contents err"));
+ }
+ return result;
+}
+
+static const char *
+wcon_name(TERMINAL_CONTROL_BLOCK * TCB)
+{
+ (void) TCB;
+ return "win32console";
+}
+
+static int
+wcon_doupdate(TERMINAL_CONTROL_BLOCK * TCB)
+{
+ int result = ERR;
+ int y, nonempty, n, x0, x1, Width, Height;
+ SCREEN *sp;
+
+ T((T_CALLED("win32con::wcon_doupdate(%p)"), TCB));
+ if (validateConsoleHandle()) {
+ SetSP();
+
+ Width = screen_columns(sp);
+ Height = screen_lines(sp);
+ nonempty = min(Height, NewScreen(sp)->_maxy + 1);
+
+ T(("... %dx%d clear cur:%d new:%d",
+ Height, Width,
+ CurScreen(sp)->_clear,
+ NewScreen(sp)->_clear));
+
+ if (SP_PARM->_endwin == ewSuspend) {
+
+ T(("coming back from shell mode"));
+ NCURSES_SP_NAME(reset_prog_mode) (NCURSES_SP_ARG);
+
+ NCURSES_SP_NAME(_nc_mvcur_resume) (NCURSES_SP_ARG);
+ NCURSES_SP_NAME(_nc_screen_resume) (NCURSES_SP_ARG);
+ SP_PARM->_mouse_resume(SP_PARM);
+
+ SP_PARM->_endwin = ewRunning;
+ }
+
+ if ((CurScreen(sp)->_clear || NewScreen(sp)->_clear)) {
+ int x;
+#if USE_WIDEC_SUPPORT
+ cchar_t *empty = TypeAlloca(cchar_t, Width);
+ wchar_t blank[2] =
+ {
+ L' ', L'\0'
+ };
+
+ for (x = 0; x < Width; x++)
+ setcchar(&empty[x], blank, 0, 0, 0);
+#else
+ chtype *empty = TypeAlloca(chtype, Width);
+
+ for (x = 0; x < Width; x++)
+ empty[x] = ' ';
+#endif
+
+ for (y = 0; y < nonempty; y++) {
+ con_write(TCB, y, 0, empty, Width);
+ memcpy(empty,
+ CurScreen(sp)->_line[y].text,
+ (size_t) Width * sizeof(empty[0]));
+ }
+ CurScreen(sp)->_clear = FALSE;
+ NewScreen(sp)->_clear = FALSE;
+ touchwin(NewScreen(sp));
+ T(("... cleared %dx%d lines @%d of screen", nonempty, Width,
+ AdjustY()));
+ }
+
+ for (y = 0; y < nonempty; y++) {
+ x0 = NewScreen(sp)->_line[y].firstchar;
+ if (x0 != _NOCHANGE) {
+#if EXP_OPTIMIZE
+ int x2;
+ int limit = NewScreen(sp)->_line[y].lastchar;
+ while ((x1 = EndChange(x0)) <= limit) {
+ while ((x2 = NextChange(x1)) <=
+ limit && x2 <= (x1 + 2)) {
+ x1 = x2;
+ }
+ n = x1 - x0 + 1;
+ memcpy(&CurScreen(sp)->_line[y].text[x0],
+ &NewScreen(sp)->_line[y].text[x0],
+ n * sizeof(CurScreen(sp)->_line[y].text[x0]));
+ con_write(TCB,
+ y,
+ x0,
+ &CurScreen(sp)->_line[y].text[x0], n);
+ x0 = NextChange(x1);
+ }
+
+ /* mark line changed successfully */
+ if (y <= NewScreen(sp)->_maxy) {
+ MARK_NOCHANGE(NewScreen(sp), y);
+ }
+ if (y <= CurScreen(sp)->_maxy) {
+ MARK_NOCHANGE(CurScreen(sp), y);
+ }
+#else
+ x1 = NewScreen(sp)->_line[y].lastchar;
+ n = x1 - x0 + 1;
+ if (n > 0) {
+ memcpy(&CurScreen(sp)->_line[y].text[x0],
+ &NewScreen(sp)->_line[y].text[x0],
+ (size_t) n *
+ sizeof(CurScreen(sp)->_line[y].text[x0]));
+ con_write(TCB,
+ y,
+ x0,
+ &CurScreen(sp)->_line[y].text[x0], n);
+
+ /* mark line changed successfully */
+ if (y <= NewScreen(sp)->_maxy) {
+ MARK_NOCHANGE(NewScreen(sp), y);
+ }
+ if (y <= CurScreen(sp)->_maxy) {
+ MARK_NOCHANGE(CurScreen(sp), y);
+ }
+ }
+#endif
+ }
+ }
+
+ /* put everything back in sync */
+ for (y = nonempty; y <= NewScreen(sp)->_maxy; y++) {
+ MARK_NOCHANGE(NewScreen(sp), y);
+ }
+ for (y = nonempty; y <= CurScreen(sp)->_maxy; y++) {
+ MARK_NOCHANGE(CurScreen(sp), y);
+ }
+
+ if (!NewScreen(sp)->_leaveok) {
+ CurScreen(sp)->_curx = NewScreen(sp)->_curx;
+ CurScreen(sp)->_cury = NewScreen(sp)->_cury;
+
+ TCB->drv->td_hwcur(TCB,
+ 0,
+ 0,
+ CurScreen(sp)->_cury,
+ CurScreen(sp)->_curx);
+ }
+ _nc_console_selectActiveHandle();
+ result = OK;
+ }
+ returnCode(result);
+}
+
+static bool
+wcon_CanHandle(TERMINAL_CONTROL_BLOCK * TCB,
+ const char *tname,
+ int *errret GCC_UNUSED)
+{
+ bool code = FALSE;
+
+ T((T_CALLED("win32con::wcon_CanHandle(%p)"), TCB));
+
+ assert((TCB != 0) && (tname != 0));
+
+ TCB->magic = WINMAGIC;
+
+ if (tname == 0 || *tname == 0) {
+ if (!_nc_console_vt_supported())
+ code = TRUE;
+ } else if (tname != 0 && *tname == '#') {
+ /*
+ * Use "#" (a character which cannot begin a terminal's name) to
+ * select specific driver from the table.
+ *
+ * In principle, we could have more than one non-terminfo driver,
+ * e.g., "win32gui".
+ */
+ size_t n = strlen(tname + 1);
+ if (n != 0
+ && ((strncmp(tname + 1, "win32console", n) == 0)
+ || (strncmp(tname + 1, "win32con", n) == 0))) {
+ code = TRUE;
+ }
+ } else if (tname != 0 && stricmp(tname, "unknown") == 0) {
+ code = TRUE;
+ }
+
+ /*
+ * This is intentional, to avoid unnecessary breakage of applications
+ * using <term.h> symbols.
+ */
+ if (code && (TerminalType(&TCB->term).Booleans == 0)) {
+ _nc_init_termtype(&TerminalType(&TCB->term));
+#if NCURSES_EXT_NUMBERS
+ _nc_export_termtype2(&TCB->term.type, &TerminalType(&TCB->term));
+#endif
+ }
+
+ if (!code) {
+ if (_nc_console_test(0)) {
+ T(("isTermInfoConsole=TRUE"));
+ WINCONSOLE.isTermInfoConsole = TRUE;
+ }
+ }
+ returnBool(code);
+}
+
+static int
+wcon_dobeepflash(TERMINAL_CONTROL_BLOCK * TCB,
+ int beepFlag)
+{
+ SCREEN *sp;
+ int res = ERR;
+
+ int high = (WINCONSOLE.SBI.srWindow.Bottom -
+ WINCONSOLE.SBI.srWindow.Top + 1);
+ int wide = (WINCONSOLE.SBI.srWindow.Right -
+ WINCONSOLE.SBI.srWindow.Left + 1);
+ int max_cells = (high * wide);
+ int i;
+
+ CHAR_INFO *this_screen = TypeAlloca(CHAR_INFO, max_cells);
+ CHAR_INFO *that_screen = TypeAlloca(CHAR_INFO, max_cells);
+ COORD this_size;
+ SMALL_RECT this_region;
+ COORD bufferCoord;
+
+ if (validateConsoleHandle()) {
+ SetSP();
+ this_region.Top = WINCONSOLE.SBI.srWindow.Top;
+ this_region.Left = WINCONSOLE.SBI.srWindow.Left;
+ this_region.Bottom = WINCONSOLE.SBI.srWindow.Bottom;
+ this_region.Right = WINCONSOLE.SBI.srWindow.Right;
+
+ this_size.X = (SHORT) wide;
+ this_size.Y = (SHORT) high;
+
+ bufferCoord.X = this_region.Left;
+ bufferCoord.Y = this_region.Top;
+
+ if (!beepFlag &&
+ read_screen(WINCONSOLE.hdl,
+ this_screen,
+ this_size,
+ bufferCoord,
+ &this_region)) {
+
+ memcpy(that_screen,
+ this_screen,
+ sizeof(CHAR_INFO) * (size_t) max_cells);
+
+ for (i = 0; i < max_cells; i++) {
+ that_screen[i].Attributes =
+ RevAttr(that_screen[i].Attributes);
+ }
+
+ write_screen(WINCONSOLE.hdl, that_screen, this_size,
+ bufferCoord, &this_region);
+ Sleep(200);
+ write_screen(WINCONSOLE.hdl, this_screen, this_size,
+ bufferCoord, &this_region);
+
+ } else {
+ MessageBeep(MB_ICONWARNING); /* MB_OK might be better */
+ }
+ res = OK;
+ }
+ return res;
+}
+
+static int
+wcon_print(TERMINAL_CONTROL_BLOCK * TCB,
+ char *data GCC_UNUSED,
+ int len GCC_UNUSED)
+{
+ SCREEN *sp;
+
+ AssertTCB();
+ SetSP();
+
+ return ERR;
+}
+
+static int
+wcon_defaultcolors(TERMINAL_CONTROL_BLOCK * TCB,
+ int fg GCC_UNUSED,
+ int bg GCC_UNUSED)
+{
+ SCREEN *sp;
+ int code = ERR;
+
+ AssertTCB();
+ SetSP();
+
+ return (code);
+}
+
+static void
+wcon_setcolor(TERMINAL_CONTROL_BLOCK * TCB,
+ int fore,
+ int color,
+ int (*outc) (SCREEN *, int) GCC_UNUSED)
+{
+ (void) TCB;
+ if (validateConsoleHandle()) {
+ WORD a = _nc_console_MapColor(fore, color);
+ a |= (WORD) ((WINCONSOLE.SBI.wAttributes) & (fore ? 0xfff8 : 0xff8f));
+ SetConsoleTextAttribute(WINCONSOLE.hdl, a);
+ _nc_console_get_SBI();
+ }
+}
+
+static bool
+wcon_rescol(TERMINAL_CONTROL_BLOCK * TCB)
+{
+ bool res = FALSE;
+
+ (void) TCB;
+ if (validateConsoleHandle()) {
+ WORD a = FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN;
+ SetConsoleTextAttribute(WINCONSOLE.hdl, a);
+ _nc_console_get_SBI();
+ res = TRUE;
+ }
+ return res;
+}
+
+static bool
+wcon_rescolors(TERMINAL_CONTROL_BLOCK * TCB)
+{
+ int result = FALSE;
+ SCREEN *sp;
+
+ AssertTCB();
+ SetSP();
+
+ return result;
+}
+
+static int
+wcon_size(TERMINAL_CONTROL_BLOCK * TCB, int *Lines, int *Cols)
+{
+ int result = ERR;
+
+ T((T_CALLED("win32con::wcon_size(%p)"), TCB));
+
+ if (validateConsoleHandle() &&
+ (Lines != NULL) && (Cols != NULL)) {
+ _nc_console_size(Lines, Cols);
+ result = OK;
+ }
+ returnCode(result);
+}
+
+static int
+wcon_setsize(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED,
+ int l GCC_UNUSED,
+ int c GCC_UNUSED)
+{
+ AssertTCB();
+ return ERR;
+}
+
+static int
+wcon_sgmode(TERMINAL_CONTROL_BLOCK * TCB, int setFlag, TTY * buf)
+{
+ int result = ERR;
+
+ T((T_CALLED("win32con::wcon_sgmode(TCB=(%p),setFlag=%d,TTY=(%p)"),
+ TCB, setFlag, buf));
+ if (buf != NULL && validateConsoleHandle()) {
+
+ if (setFlag) {
+ _nc_console_setmode(WINCONSOLE.hdl, buf);
+ TCB->term.Nttyb = *buf;
+ } else {
+ _nc_console_getmode(WINCONSOLE.hdl, &(TCB->term.Nttyb));
+ *buf = TCB->term.Nttyb;
+ }
+ result = OK;
+ }
+ returnCode(result);
+}
+
+#define MIN_WIDE 80
+#define MIN_HIGH 24
+
+static int
+wcon_mode(TERMINAL_CONTROL_BLOCK * TCB, int progFlag, int defFlag)
+{
+ SCREEN *sp;
+ TERMINAL *_term = (TERMINAL *) TCB;
+ int code = ERR;
+
+ if (validateConsoleHandle()) {
+ sp = TCB->csp;
+
+ T((T_CALLED("win32con::wcon_mode(%p, progFlag=%d, defFlag=%d)"),
+ TCB, progFlag, defFlag));
+
+ WINCONSOLE.progMode = progFlag;
+ WINCONSOLE.lastOut = progFlag ? WINCONSOLE.hdl : WINCONSOLE.out;
+ SetConsoleActiveScreenBuffer(WINCONSOLE.lastOut);
+
+ if (progFlag) /* prog mode */ {
+ if (defFlag) {
+ if ((wcon_sgmode(TCB, FALSE, &(_term->Nttyb)) == OK)) {
+ code = OK;
+ }
+ } else {
+ /* reset_prog_mode */
+ if (wcon_sgmode(TCB, TRUE, &(_term->Nttyb)) == OK) {
+ if (sp) {
+ if (sp->_keypad_on)
+ _nc_keypad(sp, TRUE);
+ }
+ if (!WINCONSOLE.buffered) {
+ _nc_console_set_scrollback(FALSE, &WINCONSOLE.SBI);
+ }
+ code = OK;
+ }
+ }
+ T(("... buffered:%d, clear:%d",
+ WINCONSOLE.buffered, CurScreen(sp)->_clear));
+ } else { /* shell mode */
+ if (defFlag) {
+ /* def_shell_mode */
+ if (wcon_sgmode(TCB, FALSE, &(_term->Ottyb)) == OK) {
+ code = OK;
+ }
+ } else {
+ /* reset_shell_mode */
+ if (sp) {
+ _nc_keypad(sp, FALSE);
+ NCURSES_SP_NAME(_nc_flush) (sp);
+ }
+ code = wcon_sgmode(TCB, TRUE, &(_term->Ottyb));
+ if (!WINCONSOLE.buffered) {
+ _nc_console_set_scrollback(TRUE, &WINCONSOLE.save_SBI);
+ if (!restore_original_screen())
+ code = ERR;
+ }
+ SetConsoleCursorInfo(WINCONSOLE.hdl, &WINCONSOLE.save_CI);
+ }
+ }
+
+ }
+ returnCode(code);
+}
+
+static void
+wcon_screen_init(SCREEN *sp GCC_UNUSED)
+{
+}
+
+static void
+wcon_wrap(SCREEN *sp GCC_UNUSED)
+{
+}
+
+static void
+wcon_release(TERMINAL_CONTROL_BLOCK * TCB)
+{
+ T((T_CALLED("win32con::wcon_release(%p)"), TCB));
+
+ AssertTCB();
+ if (TCB->prop)
+ free(TCB->prop);
+
+ returnVoid;
+}
+
+static void
+wcon_init(TERMINAL_CONTROL_BLOCK * TCB)
+{
+ T((T_CALLED("win32con::wcon_init(%p)"), TCB));
+
+ AssertTCB();
+
+ if (!(console_initialized = _nc_console_checkinit(TRUE, FALSE))) {
+ returnVoid;
+ }
+
+ if (TCB) {
+ TCB->info.initcolor = TRUE;
+ TCB->info.canchange = FALSE;
+ TCB->info.hascolor = TRUE;
+ TCB->info.caninit = TRUE;
+
+ TCB->info.maxpairs = CON_NUMPAIRS;
+ TCB->info.maxcolors = 8;
+ TCB->info.numlabels = 0;
+ TCB->info.labelwidth = 0;
+ TCB->info.labelheight = 0;
+ TCB->info.nocolorvideo = 1;
+ TCB->info.tabsize = 8;
+
+ TCB->info.numbuttons = WINCONSOLE.numButtons;
+ TCB->info.defaultPalette = _nc_cga_palette;
+
+ }
+ returnVoid;
+}
+
+static void
+wcon_initpair(TERMINAL_CONTROL_BLOCK * TCB,
+ int pair,
+ int f,
+ int b)
+{
+ SCREEN *sp;
+
+ if (validateConsoleHandle()) {
+ SetSP();
+
+ if ((pair > 0) && (pair < CON_NUMPAIRS) && (f >= 0) && (f < 8)
+ && (b >= 0) && (b < 8)) {
+ WINCONSOLE.pairs[pair] =
+ _nc_console_MapColor(true, f) |
+ _nc_console_MapColor(false, b);
+ }
+ }
+}
+
+static void
+wcon_initcolor(TERMINAL_CONTROL_BLOCK * TCB,
+ int color GCC_UNUSED,
+ int r GCC_UNUSED,
+ int g GCC_UNUSED,
+ int b GCC_UNUSED)
+{
+ SCREEN *sp;
+
+ AssertTCB();
+ SetSP();
+}
+
+static void
+wcon_do_color(TERMINAL_CONTROL_BLOCK * TCB,
+ int old_pair GCC_UNUSED,
+ int pair GCC_UNUSED,
+ int reverse GCC_UNUSED,
+ int (*outc) (SCREEN *, int) GCC_UNUSED
+)
+{
+ SCREEN *sp;
+
+ AssertTCB();
+ SetSP();
+}
+
+static void
+wcon_initmouse(TERMINAL_CONTROL_BLOCK * TCB)
+{
+ SCREEN *sp;
+
+ if (validateConsoleHandle()) {
+ SetSP();
+
+ sp->_mouse_type = M_TERM_DRIVER;
+ }
+}
+
+static int
+wcon_testmouse(TERMINAL_CONTROL_BLOCK * TCB,
+ int delay
+ EVENTLIST_2nd(_nc_eventlist * evl))
+{
+ int rc = 0;
+ SCREEN *sp;
+
+ if (validateConsoleHandle()) {
+ SetSP();
+
+ if (sp->_drv_mouse_head < sp->_drv_mouse_tail) {
+ rc = TW_MOUSE;
+ } else {
+ rc = TCBOf(sp)->drv->td_twait(TCBOf(sp),
+ TWAIT_MASK,
+ delay,
+ (int *) 0
+ EVENTLIST_2nd(evl));
+ }
+ }
+
+ return rc;
+}
+
+static int
+wcon_mvcur(TERMINAL_CONTROL_BLOCK * TCB,
+ int yold GCC_UNUSED, int xold GCC_UNUSED,
+ int y, int x)
+{
+ int ret = ERR;
+
+ (void) TCB;
+ if (validateConsoleHandle()) {
+ COORD loc;
+ loc.X = (short) x;
+ loc.Y = (short) (y + AdjustY());
+ SetConsoleCursorPosition(WINCONSOLE.hdl, loc);
+ ret = OK;
+ }
+ return ret;
+}
+
+static void
+wcon_hwlabel(TERMINAL_CONTROL_BLOCK * TCB,
+ int labnum GCC_UNUSED,
+ char *text GCC_UNUSED)
+{
+ SCREEN *sp;
+
+ AssertTCB();
+ SetSP();
+}
+
+static void
+wcon_hwlabelOnOff(TERMINAL_CONTROL_BLOCK * TCB,
+ int OnFlag GCC_UNUSED)
+{
+ SCREEN *sp;
+
+ AssertTCB();
+ SetSP();
+}
+
+static chtype
+wcon_conattr(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED)
+{
+ chtype res = A_NORMAL;
+ res |= (A_BOLD | A_DIM | A_REVERSE | A_STANDOUT | A_COLOR);
+ return res;
+}
+
+static void
+wcon_setfilter(TERMINAL_CONTROL_BLOCK * TCB)
+{
+ SCREEN *sp;
+
+ AssertTCB();
+ SetSP();
+}
+
+static void
+wcon_initacs(TERMINAL_CONTROL_BLOCK * TCB,
+ chtype *real_map GCC_UNUSED,
+ chtype *fake_map GCC_UNUSED)
+{
+#define DATA(a,b) { a, b }
+ static struct {
+ int acs_code;
+ int use_code;
+ } table[] = {
+ DATA('a', 0xb1), /* ACS_CKBOARD */
+ DATA('f', 0xf8), /* ACS_DEGREE */
+ DATA('g', 0xf1), /* ACS_PLMINUS */
+ DATA('j', 0xd9), /* ACS_LRCORNER */
+ DATA('l', 0xda), /* ACS_ULCORNER */
+ DATA('k', 0xbf), /* ACS_URCORNER */
+ DATA('m', 0xc0), /* ACS_LLCORNER */
+ DATA('n', 0xc5), /* ACS_PLUS */
+ DATA('q', 0xc4), /* ACS_HLINE */
+ DATA('t', 0xc3), /* ACS_LTEE */
+ DATA('u', 0xb4), /* ACS_RTEE */
+ DATA('v', 0xc1), /* ACS_BTEE */
+ DATA('w', 0xc2), /* ACS_TTEE */
+ DATA('x', 0xb3), /* ACS_VLINE */
+ DATA('y', 0xf3), /* ACS_LEQUAL */
+ DATA('z', 0xf2), /* ACS_GEQUAL */
+ DATA('0', 0xdb), /* ACS_BLOCK */
+ DATA('{', 0xe3), /* ACS_PI */
+ DATA('}', 0x9c), /* ACS_STERLING */
+ DATA(',', 0xae), /* ACS_LARROW */
+ DATA('+', 0xaf), /* ACS_RARROW */
+ DATA('~', 0xf9), /* ACS_BULLET */
+ };
+#undef DATA
+ unsigned n;
+
+ SCREEN *sp;
+ if (validateConsoleHandle()) {
+ SetSP();
+
+ for (n = 0; n < SIZEOF(table); ++n) {
+ real_map[table[n].acs_code] =
+ (chtype) table[n].use_code | A_ALTCHARSET;
+ if (sp != 0)
+ sp->_screen_acs_map[table[n].acs_code] = TRUE;
+ }
+ }
+}
+
+static int
+wcon_twait(TERMINAL_CONTROL_BLOCK * TCB,
+ int mode,
+ int milliseconds,
+ int *timeleft
+ EVENTLIST_2nd(_nc_eventlist * evl))
+{
+ SCREEN *sp;
+ int code = 0;
+
+ if (validateConsoleHandle()) {
+ SetSP();
+
+ code = _nc_console_twait(sp,
+ WINCONSOLE.inp,
+ mode,
+ milliseconds,
+ timeleft EVENTLIST_2nd(evl));
+ }
+ return code;
+}
+
+static int
+wcon_read(TERMINAL_CONTROL_BLOCK * TCB, int *buf)
+{
+ SCREEN *sp;
+ int n = -1;
+
+ T((T_CALLED("win32con::wcon_read(%p)"), TCB));
+
+ assert(buf);
+ if (validateConsoleHandle()) {
+ SetSP();
+
+ n = _nc_console_read(sp, WINCONSOLE.inp, buf);
+ }
+ returnCode(n);
+}
+
+static int
+wcon_nap(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED, int ms)
+{
+ T((T_CALLED("win32con::wcon_nap(%p, %d)"), TCB, ms));
+ Sleep((DWORD) ms);
+ returnCode(OK);
+}
+
+static int
+wcon_cursorSet(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED, int mode)
+{
+ int res = -1;
+
+ T((T_CALLED("win32con:wcon_cursorSet(%d)"), mode));
+ if (validateConsoleHandle()) {
+ CONSOLE_CURSOR_INFO this_CI = WINCONSOLE.save_CI;
+ switch (mode) {
+ case 0:
+ this_CI.bVisible = FALSE;
+ break;
+ case 1:
+ break;
+ case 2:
+ this_CI.dwSize = 100;
+ break;
+ }
+ SetConsoleCursorInfo(WINCONSOLE.hdl, &this_CI);
+ }
+ returnCode(res);
+}
+
+static bool
+wcon_kyExist(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED, int keycode)
+{
+ bool found = FALSE;
+
+ T((T_CALLED("win32con::wcon_kyExist(%d)"), keycode));
+ found = _nc_console_keyExist(keycode);
+ returnBool(found);
+}
+
+static int
+wcon_kpad(TERMINAL_CONTROL_BLOCK * TCB, int flag GCC_UNUSED)
+{
+ SCREEN *sp;
+ int code = ERR;
+
+ T((T_CALLED("win32con::wcon_kpad(%p, %d)"), TCB, flag));
+
+ if (validateConsoleHandle()) {
+ SetSP();
+
+ if (sp) {
+ code = OK;
+ }
+ }
+ returnCode(code);
+}
+
+static int
+wcon_keyok(TERMINAL_CONTROL_BLOCK * TCB,
+ int keycode,
+ int flag)
+{
+ int code = ERR;
+ SCREEN *sp;
+
+ T((T_CALLED("win32con::wcon_keyok(%p, %d, %d)"), TCB, keycode, flag));
+
+ if (validateConsoleHandle()) {
+ SetSP();
+ if (sp) {
+ code = _nc_console_keyok(keycode, flag);
+ }
+ }
+ returnCode(code);
+}
+
+NCURSES_EXPORT_VAR (TERM_DRIVER) _nc_WIN_DRIVER = {
+ FALSE,
+ wcon_name, /* Name */
+ wcon_CanHandle, /* CanHandle */
+ wcon_init, /* init */
+ wcon_release, /* release */
+ wcon_size, /* size */
+ wcon_sgmode, /* sgmode */
+ wcon_conattr, /* conattr */
+ wcon_mvcur, /* hwcur */
+ wcon_mode, /* mode */
+ wcon_rescol, /* rescol */
+ wcon_rescolors, /* rescolors */
+ wcon_setcolor, /* color */
+ wcon_dobeepflash, /* DoBeepFlash */
+ wcon_initpair, /* initpair */
+ wcon_initcolor, /* initcolor */
+ wcon_do_color, /* docolor */
+ wcon_initmouse, /* initmouse */
+ wcon_testmouse, /* testmouse */
+ wcon_setfilter, /* setfilter */
+ wcon_hwlabel, /* hwlabel */
+ wcon_hwlabelOnOff, /* hwlabelOnOff */
+ wcon_doupdate, /* update */
+ wcon_defaultcolors, /* defaultcolors */
+ wcon_print, /* print */
+ wcon_size, /* getsize */
+ wcon_setsize, /* setsize */
+ wcon_initacs, /* initacs */
+ wcon_screen_init, /* scinit */
+ wcon_wrap, /* scexit */
+ wcon_twait, /* twait */
+ wcon_read, /* read */
+ wcon_nap, /* nap */
+ wcon_kpad, /* kpad */
+ wcon_keyok, /* kyOk */
+ wcon_kyExist, /* kyExist */
+ wcon_cursorSet /* cursorSet */
+};
+
+#endif /* _NC_WINDOWS */
diff --git a/contrib/ncurses/ncurses/win32con/win_driver.c b/contrib/ncurses/ncurses/win32con/win_driver.c
index 280aa6dc16cb..72a9cf53525f 100644
--- a/contrib/ncurses/ncurses/win32con/win_driver.c
+++ b/contrib/ncurses/ncurses/win32con/win_driver.c
@@ -1,2275 +1,2275 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 2008-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Juergen Pfeifer *
* and: Thomas E. Dickey *
****************************************************************************/
/*
* TODO - GetMousePos(POINT * result) from ntconio.c
* TODO - implement nodelay
* TODO - improve screen-repainting performance, using implied wraparound to reduce write's
* TODO - make it optional whether screen is restored or not when non-buffered
*/
#include <curses.priv.h>
#ifdef _WIN32
#include <tchar.h>
#else
#include <windows.h>
#include <wchar.h>
#endif
#include <io.h>
#define PSAPI_VERSION 2
#include <psapi.h>
#define CUR TerminalType(my_term).
-MODULE_ID("$Id: win_driver.c,v 1.63 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: win_driver.c,v 1.66 2020/03/01 00:18:49 tom Exp $")
-#ifndef __GNUC__
-# error We need GCC to compile for MinGW
-#endif
+#define TypeAlloca(type,count) (type*) _alloca(sizeof(type) * (size_t) (count))
#define WINMAGIC NCDRV_MAGIC(NCDRV_WINCONSOLE)
#define EXP_OPTIMIZE 0
#define array_length(a) (sizeof(a)/sizeof(a[0]))
static bool InitConsole(void);
static bool okConsoleHandle(TERMINAL_CONTROL_BLOCK *);
#define AssertTCB() assert(TCB != 0 && (TCB->magic == WINMAGIC))
#define SetSP() assert(TCB->csp != 0); sp = TCB->csp; (void) sp
#define GenMap(vKey,key) MAKELONG(key, vKey)
#define AdjustY() (CON.buffered ? 0 : (int) CON.SBI.srWindow.Top)
#if USE_WIDEC_SUPPORT
#define write_screen WriteConsoleOutputW
#define read_screen ReadConsoleOutputW
#else
#define write_screen WriteConsoleOutput
#define read_screen ReadConsoleOutput
#endif
static const LONG keylist[] =
{
GenMap(VK_PRIOR, KEY_PPAGE),
GenMap(VK_NEXT, KEY_NPAGE),
GenMap(VK_END, KEY_END),
GenMap(VK_HOME, KEY_HOME),
GenMap(VK_LEFT, KEY_LEFT),
GenMap(VK_UP, KEY_UP),
GenMap(VK_RIGHT, KEY_RIGHT),
GenMap(VK_DOWN, KEY_DOWN),
GenMap(VK_DELETE, KEY_DC),
GenMap(VK_INSERT, KEY_IC)
};
static const LONG ansi_keys[] =
{
GenMap(VK_PRIOR, 'I'),
GenMap(VK_NEXT, 'Q'),
GenMap(VK_END, 'O'),
GenMap(VK_HOME, 'H'),
GenMap(VK_LEFT, 'K'),
GenMap(VK_UP, 'H'),
GenMap(VK_RIGHT, 'M'),
GenMap(VK_DOWN, 'P'),
GenMap(VK_DELETE, 'S'),
GenMap(VK_INSERT, 'R')
};
#define N_INI ((int)array_length(keylist))
#define FKEYS 24
#define MAPSIZE (FKEYS + N_INI)
#define NUMPAIRS 64
/* A process can only have a single console, so it's safe
to maintain all the information about it in a single
static structure.
*/
static struct {
BOOL initialized;
BOOL buffered;
BOOL window_only;
BOOL progMode;
BOOL isMinTTY;
BOOL isTermInfoConsole;
HANDLE out;
HANDLE inp;
HANDLE hdl;
HANDLE lastOut;
int numButtons;
DWORD ansi_map[MAPSIZE];
DWORD map[MAPSIZE];
DWORD rmap[MAPSIZE];
WORD pairs[NUMPAIRS];
COORD origin;
CHAR_INFO *save_screen;
COORD save_size;
SMALL_RECT save_region;
CONSOLE_SCREEN_BUFFER_INFO SBI;
CONSOLE_SCREEN_BUFFER_INFO save_SBI;
CONSOLE_CURSOR_INFO save_CI;
} CON;
static BOOL console_initialized = FALSE;
static WORD
MapColor(bool fore, int color)
{
static const int _cmap[] =
{0, 4, 2, 6, 1, 5, 3, 7};
int a;
if (color < 0 || color > 7)
a = fore ? 7 : 0;
else
a = _cmap[color];
if (!fore)
a = a << 4;
return (WORD) a;
}
#define RevAttr(attr) \
(WORD) (((attr) & 0xff00) | \
((((attr) & 0x07) << 4) | \
(((attr) & 0x70) >> 4)))
static WORD
MapAttr(WORD res, attr_t ch)
{
if (ch & A_COLOR) {
int p;
p = PairNumber(ch);
if (p > 0 && p < NUMPAIRS) {
WORD a;
a = CON.pairs[p];
res = (WORD) ((res & 0xff00) | a);
}
}
if (ch & A_REVERSE) {
res = RevAttr(res);
}
if (ch & A_STANDOUT) {
res = RevAttr(res) | BACKGROUND_INTENSITY;
}
if (ch & A_BOLD)
res |= FOREGROUND_INTENSITY;
if (ch & A_DIM)
res |= BACKGROUND_INTENSITY;
return res;
}
#if 0 /* def TRACE */
static void
dump_screen(const char *fn, int ln)
{
int max_cells = (CON.SBI.dwSize.Y * (1 + CON.SBI.dwSize.X)) + 1;
char output[max_cells];
CHAR_INFO save_screen[max_cells];
COORD save_size;
SMALL_RECT save_region;
COORD bufferCoord;
T(("dump_screen %s@%d", fn, ln));
save_region.Top = CON.SBI.srWindow.Top;
save_region.Left = CON.SBI.srWindow.Left;
save_region.Bottom = CON.SBI.srWindow.Bottom;
save_region.Right = CON.SBI.srWindow.Right;
save_size.X = (SHORT) (save_region.Right - save_region.Left + 1);
save_size.Y = (SHORT) (save_region.Bottom - save_region.Top + 1);
bufferCoord.X = bufferCoord.Y = 0;
if (read_screen(CON.hdl,
save_screen,
save_size,
bufferCoord,
&save_region)) {
int i, j;
int ij = 0;
int k = 0;
for (i = save_region.Top; i <= save_region.Bottom; ++i) {
for (j = save_region.Left; j <= save_region.Right; ++j) {
output[k++] = save_screen[ij++].Char.AsciiChar;
}
output[k++] = '\n';
}
output[k] = 0;
T(("DUMP: %d,%d - %d,%d",
save_region.Top,
save_region.Left,
save_region.Bottom,
save_region.Right));
T(("%s", output));
}
}
#else
#define dump_screen(fn,ln) /* nothing */
#endif
#if USE_WIDEC_SUPPORT
/*
* TODO: support surrogate pairs
* TODO: support combining characters
* TODO: support acsc
* TODO: _nc_wacs should be part of sp.
*/
static BOOL
con_write16(TERMINAL_CONTROL_BLOCK * TCB, int y, int x, cchar_t *str, int limit)
{
int actual = 0;
- CHAR_INFO ci[limit];
+ CHAR_INFO *ci = TypeAlloca(CHAR_INFO, limit);
COORD loc, siz;
SMALL_RECT rec;
int i;
cchar_t ch;
SCREEN *sp;
AssertTCB();
SetSP();
for (i = actual = 0; i < limit; i++) {
ch = str[i];
if (isWidecExt(ch))
continue;
ci[actual].Char.UnicodeChar = CharOf(ch);
ci[actual].Attributes = MapAttr(CON.SBI.wAttributes,
AttrOf(ch));
if (AttrOf(ch) & A_ALTCHARSET) {
if (_nc_wacs) {
int which = CharOf(ch);
if (which > 0
&& which < ACS_LEN
&& CharOf(_nc_wacs[which]) != 0) {
ci[actual].Char.UnicodeChar = CharOf(_nc_wacs[which]);
} else {
ci[actual].Char.UnicodeChar = ' ';
}
}
}
++actual;
}
loc.X = (SHORT) 0;
loc.Y = (SHORT) 0;
siz.X = (SHORT) actual;
siz.Y = 1;
rec.Left = (SHORT) x;
rec.Top = (SHORT) (y + AdjustY());
rec.Right = (SHORT) (x + limit - 1);
rec.Bottom = rec.Top;
return write_screen(CON.hdl, ci, siz, loc, &rec);
}
#define con_write(tcb, y, x, str, n) con_write16(tcb, y, x, str, n)
#else
static BOOL
con_write8(TERMINAL_CONTROL_BLOCK * TCB, int y, int x, chtype *str, int n)
{
- CHAR_INFO ci[n];
+ CHAR_INFO *ci = TypeAlloca(CHAR_INFO, n);
COORD loc, siz;
SMALL_RECT rec;
int i;
chtype ch;
SCREEN *sp;
AssertTCB();
SetSP();
for (i = 0; i < n; i++) {
ch = str[i];
ci[i].Char.AsciiChar = ChCharOf(ch);
ci[i].Attributes = MapAttr(CON.SBI.wAttributes,
ChAttrOf(ch));
if (ChAttrOf(ch) & A_ALTCHARSET) {
if (sp->_acs_map)
ci[i].Char.AsciiChar =
ChCharOf(NCURSES_SP_NAME(_nc_acs_char) (sp, ChCharOf(ch)));
}
}
loc.X = (short) 0;
loc.Y = (short) 0;
siz.X = (short) n;
siz.Y = 1;
rec.Left = (short) x;
rec.Top = (short) y;
rec.Right = (short) (x + n - 1);
rec.Bottom = rec.Top;
return write_screen(CON.hdl, ci, siz, loc, &rec);
}
#define con_write(tcb, y, x, str, n) con_write8(tcb, y, x, str, n)
#endif
#if EXP_OPTIMIZE
/*
* Comparing new/current screens, determine the last column-index for a change
* beginning on the given row,col position. Unlike a serial terminal, there is
* no cost for "moving" the "cursor" on the line as we update it.
*/
static int
find_end_of_change(SCREEN *sp, int row, int col)
{
int result = col;
struct ldat *curdat = CurScreen(sp)->_line + row;
struct ldat *newdat = NewScreen(sp)->_line + row;
while (col <= newdat->lastchar) {
#if USE_WIDEC_SUPPORT
if (isWidecExt(curdat->text[col]) || isWidecExt(newdat->text[col])) {
result = col;
} else if (memcmp(&curdat->text[col],
&newdat->text[col],
sizeof(curdat->text[0]))) {
result = col;
} else {
break;
}
#else
if (curdat->text[col] != newdat->text[col]) {
result = col;
} else {
break;
}
#endif
++col;
}
return result;
}
/*
* Given a row,col position at the end of a change-chunk, look for the
* beginning of the next change-chunk.
*/
static int
find_next_change(SCREEN *sp, int row, int col)
{
struct ldat *curdat = CurScreen(sp)->_line + row;
struct ldat *newdat = NewScreen(sp)->_line + row;
int result = newdat->lastchar + 1;
while (++col <= newdat->lastchar) {
#if USE_WIDEC_SUPPORT
if (isWidecExt(curdat->text[col]) != isWidecExt(newdat->text[col])) {
result = col;
break;
} else if (memcmp(&curdat->text[col],
&newdat->text[col],
sizeof(curdat->text[0]))) {
result = col;
break;
}
#else
if (curdat->text[col] != newdat->text[col]) {
result = col;
break;
}
#endif
}
return result;
}
#define EndChange(first) \
find_end_of_change(sp, y, first)
#define NextChange(last) \
find_next_change(sp, y, last)
#endif /* EXP_OPTIMIZE */
#define MARK_NOCHANGE(win,row) \
win->_line[row].firstchar = _NOCHANGE; \
win->_line[row].lastchar = _NOCHANGE
static void
selectActiveHandle(void)
{
if (CON.lastOut != CON.hdl) {
CON.lastOut = CON.hdl;
SetConsoleActiveScreenBuffer(CON.lastOut);
}
}
static bool
restore_original_screen(void)
{
COORD bufferCoord;
bool result = FALSE;
SMALL_RECT save_region = CON.save_region;
T(("... restoring %s", CON.window_only ? "window" : "entire buffer"));
bufferCoord.X = (SHORT) (CON.window_only ? CON.SBI.srWindow.Left : 0);
bufferCoord.Y = (SHORT) (CON.window_only ? CON.SBI.srWindow.Top : 0);
if (write_screen(CON.hdl,
CON.save_screen,
CON.save_size,
bufferCoord,
&save_region)) {
result = TRUE;
mvcur(-1, -1, LINES - 2, 0);
T(("... restore original screen contents ok %dx%d (%d,%d - %d,%d)",
CON.save_size.Y,
CON.save_size.X,
save_region.Top,
save_region.Left,
save_region.Bottom,
save_region.Right));
} else {
T(("... restore original screen contents err"));
}
return result;
}
static const char *
wcon_name(TERMINAL_CONTROL_BLOCK * TCB)
{
(void) TCB;
return "win32console";
}
static int
wcon_doupdate(TERMINAL_CONTROL_BLOCK * TCB)
{
int result = ERR;
int y, nonempty, n, x0, x1, Width, Height;
SCREEN *sp;
T((T_CALLED("win32con::wcon_doupdate(%p)"), TCB));
if (okConsoleHandle(TCB)) {
SetSP();
Width = screen_columns(sp);
Height = screen_lines(sp);
nonempty = min(Height, NewScreen(sp)->_maxy + 1);
T(("... %dx%d clear cur:%d new:%d",
Height, Width,
CurScreen(sp)->_clear,
NewScreen(sp)->_clear));
if (SP_PARM->_endwin == ewSuspend) {
T(("coming back from shell mode"));
NCURSES_SP_NAME(reset_prog_mode) (NCURSES_SP_ARG);
NCURSES_SP_NAME(_nc_mvcur_resume) (NCURSES_SP_ARG);
NCURSES_SP_NAME(_nc_screen_resume) (NCURSES_SP_ARG);
SP_PARM->_mouse_resume(SP_PARM);
SP_PARM->_endwin = ewRunning;
}
if ((CurScreen(sp)->_clear || NewScreen(sp)->_clear)) {
int x;
#if USE_WIDEC_SUPPORT
- cchar_t empty[Width];
+ cchar_t *empty = TypeAlloca(cchar_t, Width);
wchar_t blank[2] =
{
L' ', L'\0'
};
for (x = 0; x < Width; x++)
setcchar(&empty[x], blank, 0, 0, 0);
#else
- chtype empty[Width];
+ chtype *empty = TypeAlloca(chtype, Width);
for (x = 0; x < Width; x++)
empty[x] = ' ';
#endif
for (y = 0; y < nonempty; y++) {
con_write(TCB, y, 0, empty, Width);
memcpy(empty,
CurScreen(sp)->_line[y].text,
(size_t) Width * sizeof(empty[0]));
}
CurScreen(sp)->_clear = FALSE;
NewScreen(sp)->_clear = FALSE;
touchwin(NewScreen(sp));
T(("... cleared %dx%d lines @%d of screen", nonempty, Width,
AdjustY()));
}
for (y = 0; y < nonempty; y++) {
x0 = NewScreen(sp)->_line[y].firstchar;
if (x0 != _NOCHANGE) {
#if EXP_OPTIMIZE
int x2;
int limit = NewScreen(sp)->_line[y].lastchar;
while ((x1 = EndChange(x0)) <= limit) {
while ((x2 = NextChange(x1)) <= limit && x2 <= (x1 + 2)) {
x1 = x2;
}
n = x1 - x0 + 1;
memcpy(&CurScreen(sp)->_line[y].text[x0],
&NewScreen(sp)->_line[y].text[x0],
n * sizeof(CurScreen(sp)->_line[y].text[x0]));
con_write(TCB,
y,
x0,
&CurScreen(sp)->_line[y].text[x0], n);
x0 = NextChange(x1);
}
/* mark line changed successfully */
if (y <= NewScreen(sp)->_maxy) {
MARK_NOCHANGE(NewScreen(sp), y);
}
if (y <= CurScreen(sp)->_maxy) {
MARK_NOCHANGE(CurScreen(sp), y);
}
#else
x1 = NewScreen(sp)->_line[y].lastchar;
n = x1 - x0 + 1;
if (n > 0) {
memcpy(&CurScreen(sp)->_line[y].text[x0],
&NewScreen(sp)->_line[y].text[x0],
(size_t) n * sizeof(CurScreen(sp)->_line[y].text[x0]));
con_write(TCB,
y,
x0,
&CurScreen(sp)->_line[y].text[x0], n);
/* mark line changed successfully */
if (y <= NewScreen(sp)->_maxy) {
MARK_NOCHANGE(NewScreen(sp), y);
}
if (y <= CurScreen(sp)->_maxy) {
MARK_NOCHANGE(CurScreen(sp), y);
}
}
#endif
}
}
/* put everything back in sync */
for (y = nonempty; y <= NewScreen(sp)->_maxy; y++) {
MARK_NOCHANGE(NewScreen(sp), y);
}
for (y = nonempty; y <= CurScreen(sp)->_maxy; y++) {
MARK_NOCHANGE(CurScreen(sp), y);
}
if (!NewScreen(sp)->_leaveok) {
CurScreen(sp)->_curx = NewScreen(sp)->_curx;
CurScreen(sp)->_cury = NewScreen(sp)->_cury;
TCB->drv->td_hwcur(TCB,
0, 0,
CurScreen(sp)->_cury, CurScreen(sp)->_curx);
}
selectActiveHandle();
result = OK;
}
returnCode(result);
}
static bool
wcon_CanHandle(TERMINAL_CONTROL_BLOCK * TCB,
const char *tname,
int *errret GCC_UNUSED)
{
bool code = FALSE;
T((T_CALLED("win32con::wcon_CanHandle(%p)"), TCB));
assert((TCB != 0) && (tname != 0));
TCB->magic = WINMAGIC;
if (tname == 0 || *tname == 0)
code = TRUE;
else if (tname != 0 && *tname == '#') {
/*
* Use "#" (a character which cannot begin a terminal's name) to
* select specific driver from the table.
*
* In principle, we could have more than one non-terminfo driver,
* e.g., "win32gui".
*/
size_t n = strlen(tname + 1);
if (n != 0
&& ((strncmp(tname + 1, "win32console", n) == 0)
|| (strncmp(tname + 1, "win32con", n) == 0))) {
code = TRUE;
}
} else if (tname != 0 && stricmp(tname, "unknown") == 0) {
code = TRUE;
}
/*
* This is intentional, to avoid unnecessary breakage of applications
* using <term.h> symbols.
*/
if (code && (TerminalType(&TCB->term).Booleans == 0)) {
_nc_init_termtype(&TerminalType(&TCB->term));
#if NCURSES_EXT_NUMBERS
_nc_export_termtype2(&TCB->term.type, &TerminalType(&TCB->term));
#endif
}
if (!code) {
if (_nc_mingw_isconsole(0))
CON.isTermInfoConsole = TRUE;
}
returnBool(code);
}
static int
wcon_dobeepflash(TERMINAL_CONTROL_BLOCK * TCB,
int beepFlag)
{
SCREEN *sp;
int res = ERR;
int high = (CON.SBI.srWindow.Bottom - CON.SBI.srWindow.Top + 1);
int wide = (CON.SBI.srWindow.Right - CON.SBI.srWindow.Left + 1);
int max_cells = (high * wide);
int i;
- CHAR_INFO this_screen[max_cells];
- CHAR_INFO that_screen[max_cells];
+ CHAR_INFO *this_screen = TypeAlloca(CHAR_INFO, max_cells);
+ CHAR_INFO *that_screen = TypeAlloca(CHAR_INFO, max_cells);
COORD this_size;
SMALL_RECT this_region;
COORD bufferCoord;
if (okConsoleHandle(TCB)) {
SetSP();
this_region.Top = CON.SBI.srWindow.Top;
this_region.Left = CON.SBI.srWindow.Left;
this_region.Bottom = CON.SBI.srWindow.Bottom;
this_region.Right = CON.SBI.srWindow.Right;
this_size.X = (SHORT) wide;
this_size.Y = (SHORT) high;
bufferCoord.X = this_region.Left;
bufferCoord.Y = this_region.Top;
if (!beepFlag &&
read_screen(CON.hdl,
this_screen,
this_size,
bufferCoord,
&this_region)) {
- memcpy(that_screen, this_screen, sizeof(that_screen));
+ memcpy(that_screen,
+ this_screen,
+ sizeof(CHAR_INFO) * (size_t) max_cells);
for (i = 0; i < max_cells; i++) {
that_screen[i].Attributes = RevAttr(that_screen[i].Attributes);
}
write_screen(CON.hdl, that_screen, this_size, bufferCoord, &this_region);
Sleep(200);
write_screen(CON.hdl, this_screen, this_size, bufferCoord, &this_region);
} else {
MessageBeep(MB_ICONWARNING); /* MB_OK might be better */
}
res = OK;
}
return res;
}
static int
wcon_print(TERMINAL_CONTROL_BLOCK * TCB,
char *data GCC_UNUSED,
int len GCC_UNUSED)
{
SCREEN *sp;
AssertTCB();
SetSP();
return ERR;
}
static int
wcon_defaultcolors(TERMINAL_CONTROL_BLOCK * TCB,
int fg GCC_UNUSED,
int bg GCC_UNUSED)
{
SCREEN *sp;
int code = ERR;
AssertTCB();
SetSP();
return (code);
}
static bool
get_SBI(void)
{
bool rc = FALSE;
if (GetConsoleScreenBufferInfo(CON.hdl, &(CON.SBI))) {
T(("GetConsoleScreenBufferInfo"));
T(("... buffer(X:%d Y:%d)",
CON.SBI.dwSize.X,
CON.SBI.dwSize.Y));
T(("... window(X:%d Y:%d)",
CON.SBI.dwMaximumWindowSize.X,
CON.SBI.dwMaximumWindowSize.Y));
T(("... cursor(X:%d Y:%d)",
CON.SBI.dwCursorPosition.X,
CON.SBI.dwCursorPosition.Y));
T(("... display(Top:%d Bottom:%d Left:%d Right:%d)",
CON.SBI.srWindow.Top,
CON.SBI.srWindow.Bottom,
CON.SBI.srWindow.Left,
CON.SBI.srWindow.Right));
if (CON.buffered) {
CON.origin.X = 0;
CON.origin.Y = 0;
} else {
CON.origin.X = CON.SBI.srWindow.Left;
CON.origin.Y = CON.SBI.srWindow.Top;
}
rc = TRUE;
} else {
T(("GetConsoleScreenBufferInfo ERR"));
}
return rc;
}
static void
wcon_setcolor(TERMINAL_CONTROL_BLOCK * TCB,
int fore,
int color,
int (*outc) (SCREEN *, int) GCC_UNUSED)
{
if (okConsoleHandle(TCB)) {
WORD a = MapColor(fore, color);
a |= (WORD) ((CON.SBI.wAttributes) & (fore ? 0xfff8 : 0xff8f));
SetConsoleTextAttribute(CON.hdl, a);
get_SBI();
}
}
static bool
wcon_rescol(TERMINAL_CONTROL_BLOCK * TCB)
{
bool res = FALSE;
if (okConsoleHandle(TCB)) {
WORD a = FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN;
SetConsoleTextAttribute(CON.hdl, a);
get_SBI();
res = TRUE;
}
return res;
}
static bool
wcon_rescolors(TERMINAL_CONTROL_BLOCK * TCB)
{
int result = FALSE;
SCREEN *sp;
AssertTCB();
SetSP();
return result;
}
static int
wcon_size(TERMINAL_CONTROL_BLOCK * TCB, int *Lines, int *Cols)
{
int result = ERR;
T((T_CALLED("win32con::wcon_size(%p)"), TCB));
if (okConsoleHandle(TCB) &&
Lines != NULL &&
Cols != NULL) {
if (CON.buffered) {
*Lines = (int) (CON.SBI.dwSize.Y);
*Cols = (int) (CON.SBI.dwSize.X);
} else {
*Lines = (int) (CON.SBI.srWindow.Bottom + 1 -
CON.SBI.srWindow.Top);
*Cols = (int) (CON.SBI.srWindow.Right + 1 -
CON.SBI.srWindow.Left);
}
result = OK;
}
returnCode(result);
}
static int
wcon_setsize(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED,
int l GCC_UNUSED,
int c GCC_UNUSED)
{
AssertTCB();
return ERR;
}
static int
wcon_sgmode(TERMINAL_CONTROL_BLOCK * TCB, int setFlag, TTY * buf)
{
DWORD dwFlag = 0;
tcflag_t iflag;
tcflag_t lflag;
int result = ERR;
if (buf != NULL && okConsoleHandle(TCB)) {
if (setFlag) {
iflag = buf->c_iflag;
lflag = buf->c_lflag;
GetConsoleMode(CON.inp, &dwFlag);
if (lflag & ICANON)
dwFlag |= ENABLE_LINE_INPUT;
else
dwFlag &= (DWORD) (~ENABLE_LINE_INPUT);
if (lflag & ECHO)
dwFlag |= ENABLE_ECHO_INPUT;
else
dwFlag &= (DWORD) (~ENABLE_ECHO_INPUT);
if (iflag & BRKINT)
dwFlag |= ENABLE_PROCESSED_INPUT;
else
dwFlag &= (DWORD) (~ENABLE_PROCESSED_INPUT);
dwFlag |= ENABLE_MOUSE_INPUT;
buf->c_iflag = iflag;
buf->c_lflag = lflag;
SetConsoleMode(CON.inp, dwFlag);
TCB->term.Nttyb = *buf;
} else {
iflag = TCB->term.Nttyb.c_iflag;
lflag = TCB->term.Nttyb.c_lflag;
GetConsoleMode(CON.inp, &dwFlag);
if (dwFlag & ENABLE_LINE_INPUT)
lflag |= ICANON;
else
lflag &= (tcflag_t) (~ICANON);
if (dwFlag & ENABLE_ECHO_INPUT)
lflag |= ECHO;
else
lflag &= (tcflag_t) (~ECHO);
if (dwFlag & ENABLE_PROCESSED_INPUT)
iflag |= BRKINT;
else
iflag &= (tcflag_t) (~BRKINT);
TCB->term.Nttyb.c_iflag = iflag;
TCB->term.Nttyb.c_lflag = lflag;
*buf = TCB->term.Nttyb;
}
result = OK;
}
return result;
}
#define MIN_WIDE 80
#define MIN_HIGH 24
/*
* In "normal" mode, reset the buffer- and window-sizes back to their original values.
*/
static void
set_scrollback(bool normal, CONSOLE_SCREEN_BUFFER_INFO * info)
{
SMALL_RECT rect;
COORD coord;
bool changed = FALSE;
T((T_CALLED("win32con::set_scrollback(%s)"),
(normal
? "normal"
: "application")));
T(("... SBI.srWindow %d,%d .. %d,%d",
info->srWindow.Top,
info->srWindow.Left,
info->srWindow.Bottom,
info->srWindow.Right));
T(("... SBI.dwSize %dx%d",
info->dwSize.Y,
info->dwSize.X));
if (normal) {
rect = info->srWindow;
coord = info->dwSize;
if (memcmp(info, &CON.SBI, sizeof(*info)) != 0) {
changed = TRUE;
CON.SBI = *info;
}
} else {
int high = info->srWindow.Bottom - info->srWindow.Top + 1;
int wide = info->srWindow.Right - info->srWindow.Left + 1;
if (high < MIN_HIGH) {
T(("... height %d < %d", high, MIN_HIGH));
high = MIN_HIGH;
changed = TRUE;
}
if (wide < MIN_WIDE) {
T(("... width %d < %d", wide, MIN_WIDE));
wide = MIN_WIDE;
changed = TRUE;
}
rect.Left =
rect.Top = 0;
rect.Right = (SHORT) (wide - 1);
rect.Bottom = (SHORT) (high - 1);
coord.X = (SHORT) wide;
coord.Y = (SHORT) high;
if (info->dwSize.Y != high ||
info->dwSize.X != wide ||
info->srWindow.Top != 0 ||
info->srWindow.Left != 0) {
changed = TRUE;
}
}
if (changed) {
T(("... coord %d,%d", coord.Y, coord.X));
T(("... rect %d,%d - %d,%d",
rect.Top, rect.Left,
rect.Bottom, rect.Right));
SetConsoleScreenBufferSize(CON.hdl, coord); /* dwSize */
SetConsoleWindowInfo(CON.hdl, TRUE, &rect); /* srWindow */
get_SBI();
}
returnVoid;
}
static int
wcon_mode(TERMINAL_CONTROL_BLOCK * TCB, int progFlag, int defFlag)
{
SCREEN *sp;
TERMINAL *_term = (TERMINAL *) TCB;
int code = ERR;
if (okConsoleHandle(TCB)) {
sp = TCB->csp;
T((T_CALLED("win32con::wcon_mode(%p, prog=%d, def=%d)"),
TCB, progFlag, defFlag));
CON.progMode = progFlag;
CON.lastOut = progFlag ? CON.hdl : CON.out;
SetConsoleActiveScreenBuffer(CON.lastOut);
if (progFlag) /* prog mode */ {
if (defFlag) {
if ((wcon_sgmode(TCB, FALSE, &(_term->Nttyb)) == OK)) {
_term->Nttyb.c_oflag &= (tcflag_t) (~OFLAGS_TABS);
code = OK;
}
} else {
/* reset_prog_mode */
if (wcon_sgmode(TCB, TRUE, &(_term->Nttyb)) == OK) {
if (sp) {
if (sp->_keypad_on)
_nc_keypad(sp, TRUE);
}
if (!CON.buffered) {
set_scrollback(FALSE, &CON.SBI);
}
code = OK;
}
}
T(("... buffered:%d, clear:%d", CON.buffered, CurScreen(sp)->_clear));
} else { /* shell mode */
if (defFlag) {
/* def_shell_mode */
if (wcon_sgmode(TCB, FALSE, &(_term->Ottyb)) == OK) {
code = OK;
}
} else {
/* reset_shell_mode */
if (sp) {
_nc_keypad(sp, FALSE);
NCURSES_SP_NAME(_nc_flush) (sp);
}
code = wcon_sgmode(TCB, TRUE, &(_term->Ottyb));
if (!CON.buffered) {
set_scrollback(TRUE, &CON.save_SBI);
if (!restore_original_screen())
code = ERR;
}
SetConsoleCursorInfo(CON.hdl, &CON.save_CI);
}
}
}
returnCode(code);
}
static void
wcon_screen_init(SCREEN *sp GCC_UNUSED)
{
}
static void
wcon_wrap(SCREEN *sp GCC_UNUSED)
{
}
static int
rkeycompare(const void *el1, const void *el2)
{
WORD key1 = (LOWORD((*((const LONG *) el1)))) & 0x7fff;
WORD key2 = (LOWORD((*((const LONG *) el2)))) & 0x7fff;
return ((key1 < key2) ? -1 : ((key1 == key2) ? 0 : 1));
}
static int
keycompare(const void *el1, const void *el2)
{
WORD key1 = HIWORD((*((const LONG *) el1)));
WORD key2 = HIWORD((*((const LONG *) el2)));
return ((key1 < key2) ? -1 : ((key1 == key2) ? 0 : 1));
}
static int
MapKey(WORD vKey)
{
WORD nKey = 0;
void *res;
LONG key = GenMap(vKey, 0);
int code = -1;
res = bsearch(&key,
CON.map,
(size_t) (N_INI + FKEYS),
sizeof(keylist[0]),
keycompare);
if (res) {
key = *((LONG *) res);
nKey = LOWORD(key);
code = (int) (nKey & 0x7fff);
if (nKey & 0x8000)
code = -code;
}
return code;
}
static int
AnsiKey(WORD vKey)
{
WORD nKey = 0;
void *res;
LONG key = GenMap(vKey, 0);
int code = -1;
res = bsearch(&key,
CON.ansi_map,
(size_t) (N_INI + FKEYS),
sizeof(keylist[0]),
keycompare);
if (res) {
key = *((LONG *) res);
nKey = LOWORD(key);
code = (int) (nKey & 0x7fff);
if (nKey & 0x8000)
code = -code;
}
return code;
}
static void
wcon_release(TERMINAL_CONTROL_BLOCK * TCB)
{
T((T_CALLED("win32con::wcon_release(%p)"), TCB));
AssertTCB();
if (TCB->prop)
free(TCB->prop);
returnVoid;
}
static bool
read_screen_data(void)
{
bool result = FALSE;
COORD bufferCoord;
size_t want;
CON.save_size.X = (SHORT) (CON.save_region.Right
- CON.save_region.Left + 1);
CON.save_size.Y = (SHORT) (CON.save_region.Bottom
- CON.save_region.Top + 1);
want = (size_t) (CON.save_size.X * CON.save_size.Y);
if ((CON.save_screen = malloc(want * sizeof(CHAR_INFO))) != 0) {
bufferCoord.X = (SHORT) (CON.window_only ? CON.SBI.srWindow.Left : 0);
bufferCoord.Y = (SHORT) (CON.window_only ? CON.SBI.srWindow.Top : 0);
T(("... reading console %s %dx%d into %d,%d - %d,%d at %d,%d",
CON.window_only ? "window" : "buffer",
CON.save_size.Y, CON.save_size.X,
CON.save_region.Top,
CON.save_region.Left,
CON.save_region.Bottom,
CON.save_region.Right,
bufferCoord.Y,
bufferCoord.X));
if (read_screen(CON.hdl,
CON.save_screen,
CON.save_size,
bufferCoord,
&CON.save_region)) {
result = TRUE;
} else {
T((" error %#lx", (unsigned long) GetLastError()));
FreeAndNull(CON.save_screen);
}
}
return result;
}
/*
* Attempt to save the screen contents. PDCurses does this if
* PDC_RESTORE_SCREEN is set, giving the same visual appearance on
* restoration as if the library had allocated a console buffer. MSDN
* says that the data which can be read is limited to 64Kb (and may be
* less).
*/
static bool
save_original_screen(void)
{
bool result = FALSE;
CON.save_region.Top = 0;
CON.save_region.Left = 0;
CON.save_region.Bottom = (SHORT) (CON.SBI.dwSize.Y - 1);
CON.save_region.Right = (SHORT) (CON.SBI.dwSize.X - 1);
if (read_screen_data()) {
result = TRUE;
} else {
CON.save_region.Top = CON.SBI.srWindow.Top;
CON.save_region.Left = CON.SBI.srWindow.Left;
CON.save_region.Bottom = CON.SBI.srWindow.Bottom;
CON.save_region.Right = CON.SBI.srWindow.Right;
CON.window_only = TRUE;
if (read_screen_data()) {
result = TRUE;
}
}
T(("... save original screen contents %s", result ? "ok" : "err"));
return result;
}
static void
wcon_init(TERMINAL_CONTROL_BLOCK * TCB)
{
T((T_CALLED("win32con::wcon_init(%p)"), TCB));
AssertTCB();
if (TCB) {
if (!InitConsole()) {
returnVoid;
}
TCB->info.initcolor = TRUE;
TCB->info.canchange = FALSE;
TCB->info.hascolor = TRUE;
TCB->info.caninit = TRUE;
TCB->info.maxpairs = NUMPAIRS;
TCB->info.maxcolors = 8;
TCB->info.numlabels = 0;
TCB->info.labelwidth = 0;
TCB->info.labelheight = 0;
TCB->info.nocolorvideo = 1;
TCB->info.tabsize = 8;
TCB->info.numbuttons = CON.numButtons;
TCB->info.defaultPalette = _nc_cga_palette;
}
returnVoid;
}
static void
wcon_initpair(TERMINAL_CONTROL_BLOCK * TCB,
int pair,
int f,
int b)
{
SCREEN *sp;
if (okConsoleHandle(TCB)) {
SetSP();
if ((pair > 0) && (pair < NUMPAIRS) && (f >= 0) && (f < 8)
&& (b >= 0) && (b < 8)) {
CON.pairs[pair] = MapColor(true, f) | MapColor(false, b);
}
}
}
static void
wcon_initcolor(TERMINAL_CONTROL_BLOCK * TCB,
int color GCC_UNUSED,
int r GCC_UNUSED,
int g GCC_UNUSED,
int b GCC_UNUSED)
{
SCREEN *sp;
AssertTCB();
SetSP();
}
static void
wcon_do_color(TERMINAL_CONTROL_BLOCK * TCB,
int old_pair GCC_UNUSED,
int pair GCC_UNUSED,
int reverse GCC_UNUSED,
int (*outc) (SCREEN *, int) GCC_UNUSED
)
{
SCREEN *sp;
AssertTCB();
SetSP();
}
static void
wcon_initmouse(TERMINAL_CONTROL_BLOCK * TCB)
{
SCREEN *sp;
if (okConsoleHandle(TCB)) {
SetSP();
sp->_mouse_type = M_TERM_DRIVER;
}
}
static int
wcon_testmouse(TERMINAL_CONTROL_BLOCK * TCB,
int delay
EVENTLIST_2nd(_nc_eventlist * evl))
{
int rc = 0;
SCREEN *sp;
if (okConsoleHandle(TCB)) {
SetSP();
if (sp->_drv_mouse_head < sp->_drv_mouse_tail) {
rc = TW_MOUSE;
} else {
rc = TCBOf(sp)->drv->td_twait(TCBOf(sp),
TWAIT_MASK,
delay,
(int *) 0
EVENTLIST_2nd(evl));
}
}
return rc;
}
static int
wcon_mvcur(TERMINAL_CONTROL_BLOCK * TCB,
int yold GCC_UNUSED, int xold GCC_UNUSED,
int y, int x)
{
int ret = ERR;
if (okConsoleHandle(TCB)) {
COORD loc;
loc.X = (short) x;
loc.Y = (short) (y + AdjustY());
SetConsoleCursorPosition(CON.hdl, loc);
ret = OK;
}
return ret;
}
static void
wcon_hwlabel(TERMINAL_CONTROL_BLOCK * TCB,
int labnum GCC_UNUSED,
char *text GCC_UNUSED)
{
SCREEN *sp;
AssertTCB();
SetSP();
}
static void
wcon_hwlabelOnOff(TERMINAL_CONTROL_BLOCK * TCB,
int OnFlag GCC_UNUSED)
{
SCREEN *sp;
AssertTCB();
SetSP();
}
static chtype
wcon_conattr(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED)
{
chtype res = A_NORMAL;
res |= (A_BOLD | A_DIM | A_REVERSE | A_STANDOUT | A_COLOR);
return res;
}
static void
wcon_setfilter(TERMINAL_CONTROL_BLOCK * TCB)
{
SCREEN *sp;
AssertTCB();
SetSP();
}
static void
wcon_initacs(TERMINAL_CONTROL_BLOCK * TCB,
chtype *real_map GCC_UNUSED,
chtype *fake_map GCC_UNUSED)
{
#define DATA(a,b) { a, b }
static struct {
int acs_code;
int use_code;
} table[] = {
DATA('a', 0xb1), /* ACS_CKBOARD */
DATA('f', 0xf8), /* ACS_DEGREE */
DATA('g', 0xf1), /* ACS_PLMINUS */
DATA('j', 0xd9), /* ACS_LRCORNER */
DATA('l', 0xda), /* ACS_ULCORNER */
DATA('k', 0xbf), /* ACS_URCORNER */
DATA('m', 0xc0), /* ACS_LLCORNER */
DATA('n', 0xc5), /* ACS_PLUS */
DATA('q', 0xc4), /* ACS_HLINE */
DATA('t', 0xc3), /* ACS_LTEE */
DATA('u', 0xb4), /* ACS_RTEE */
DATA('v', 0xc1), /* ACS_BTEE */
DATA('w', 0xc2), /* ACS_TTEE */
DATA('x', 0xb3), /* ACS_VLINE */
DATA('y', 0xf3), /* ACS_LEQUAL */
DATA('z', 0xf2), /* ACS_GEQUAL */
DATA('0', 0xdb), /* ACS_BLOCK */
DATA('{', 0xe3), /* ACS_PI */
DATA('}', 0x9c), /* ACS_STERLING */
DATA(',', 0xae), /* ACS_LARROW */
DATA('+', 0xaf), /* ACS_RARROW */
DATA('~', 0xf9), /* ACS_BULLET */
};
#undef DATA
unsigned n;
SCREEN *sp;
if (okConsoleHandle(TCB)) {
SetSP();
for (n = 0; n < SIZEOF(table); ++n) {
real_map[table[n].acs_code] = (chtype) table[n].use_code | A_ALTCHARSET;
if (sp != 0)
sp->_screen_acs_map[table[n].acs_code] = TRUE;
}
}
}
static ULONGLONG
tdiff(FILETIME fstart, FILETIME fend)
{
ULARGE_INTEGER ustart;
ULARGE_INTEGER uend;
ULONGLONG diff;
ustart.LowPart = fstart.dwLowDateTime;
ustart.HighPart = fstart.dwHighDateTime;
uend.LowPart = fend.dwLowDateTime;
uend.HighPart = fend.dwHighDateTime;
diff = (uend.QuadPart - ustart.QuadPart) / 10000;
return diff;
}
static int
Adjust(int milliseconds, int diff)
{
if (milliseconds != INFINITY) {
milliseconds -= diff;
if (milliseconds < 0)
milliseconds = 0;
}
return milliseconds;
}
#define BUTTON_MASK (FROM_LEFT_1ST_BUTTON_PRESSED | \
FROM_LEFT_2ND_BUTTON_PRESSED | \
FROM_LEFT_3RD_BUTTON_PRESSED | \
FROM_LEFT_4TH_BUTTON_PRESSED | \
RIGHTMOST_BUTTON_PRESSED)
static int
decode_mouse(SCREEN *sp, int mask)
{
int result = 0;
(void) sp;
assert(sp && console_initialized);
if (mask & FROM_LEFT_1ST_BUTTON_PRESSED)
result |= BUTTON1_PRESSED;
if (mask & FROM_LEFT_2ND_BUTTON_PRESSED)
result |= BUTTON2_PRESSED;
if (mask & FROM_LEFT_3RD_BUTTON_PRESSED)
result |= BUTTON3_PRESSED;
if (mask & FROM_LEFT_4TH_BUTTON_PRESSED)
result |= BUTTON4_PRESSED;
if (mask & RIGHTMOST_BUTTON_PRESSED) {
switch (CON.numButtons) {
case 1:
result |= BUTTON1_PRESSED;
break;
case 2:
result |= BUTTON2_PRESSED;
break;
case 3:
result |= BUTTON3_PRESSED;
break;
case 4:
result |= BUTTON4_PRESSED;
break;
}
}
return result;
}
static int
console_twait(
SCREEN *sp,
HANDLE fd,
int mode,
int milliseconds,
int *timeleft
EVENTLIST_2nd(_nc_eventlist * evl))
{
INPUT_RECORD inp_rec;
BOOL b;
DWORD nRead = 0, rc = (DWORD) (-1);
int code = 0;
FILETIME fstart;
FILETIME fend;
int diff;
bool isImmed = (milliseconds == 0);
#ifdef NCURSES_WGETCH_EVENTS
(void) evl; /* TODO: implement wgetch-events */
#endif
#define CONSUME() ReadConsoleInput(fd,&inp_rec,1,&nRead)
assert(sp);
TR(TRACE_IEVENT, ("start twait: %d milliseconds, mode: %d",
milliseconds, mode));
if (milliseconds < 0)
milliseconds = INFINITY;
memset(&inp_rec, 0, sizeof(inp_rec));
while (true) {
GetSystemTimeAsFileTime(&fstart);
rc = WaitForSingleObject(fd, (DWORD) milliseconds);
GetSystemTimeAsFileTime(&fend);
diff = (int) tdiff(fstart, fend);
milliseconds = Adjust(milliseconds, diff);
if (!isImmed && milliseconds <= 0)
break;
if (rc == WAIT_OBJECT_0) {
if (mode) {
b = GetNumberOfConsoleInputEvents(fd, &nRead);
if (b && nRead > 0) {
b = PeekConsoleInput(fd, &inp_rec, 1, &nRead);
if (b && nRead > 0) {
switch (inp_rec.EventType) {
case KEY_EVENT:
if (mode & TW_INPUT) {
WORD vk = inp_rec.Event.KeyEvent.wVirtualKeyCode;
char ch = inp_rec.Event.KeyEvent.uChar.AsciiChar;
if (inp_rec.Event.KeyEvent.bKeyDown) {
if (0 == ch) {
int nKey = MapKey(vk);
if (nKey < 0) {
CONSUME();
continue;
}
}
code = TW_INPUT;
goto end;
} else {
CONSUME();
}
}
continue;
case MOUSE_EVENT:
if (decode_mouse(sp,
(inp_rec.Event.MouseEvent.dwButtonState
& BUTTON_MASK)) == 0) {
CONSUME();
} else if (mode & TW_MOUSE) {
code = TW_MOUSE;
goto end;
}
continue;
/* e.g., FOCUS_EVENT */
default:
CONSUME();
selectActiveHandle();
continue;
}
}
}
}
continue;
} else {
if (rc != WAIT_TIMEOUT) {
code = -1;
break;
} else {
code = 0;
break;
}
}
}
end:
TR(TRACE_IEVENT, ("end twait: returned %d (%d), remaining time %d msec",
code, errno, milliseconds));
if (timeleft)
*timeleft = milliseconds;
return code;
}
static int
wcon_twait(TERMINAL_CONTROL_BLOCK * TCB,
int mode,
int milliseconds,
int *timeleft
EVENTLIST_2nd(_nc_eventlist * evl))
{
SCREEN *sp;
int code = 0;
if (okConsoleHandle(TCB)) {
SetSP();
code = console_twait(sp,
CON.inp,
mode,
milliseconds,
timeleft EVENTLIST_2nd(evl));
}
return code;
}
static bool
handle_mouse(SCREEN *sp, MOUSE_EVENT_RECORD mer)
{
MEVENT work;
bool result = FALSE;
assert(sp);
sp->_drv_mouse_old_buttons = sp->_drv_mouse_new_buttons;
sp->_drv_mouse_new_buttons = mer.dwButtonState & BUTTON_MASK;
/*
* We're only interested if the button is pressed or released.
* FIXME: implement continuous event-tracking.
*/
if (sp->_drv_mouse_new_buttons != sp->_drv_mouse_old_buttons) {
memset(&work, 0, sizeof(work));
if (sp->_drv_mouse_new_buttons) {
work.bstate |= (mmask_t) decode_mouse(sp, sp->_drv_mouse_new_buttons);
} else {
/* cf: BUTTON_PRESSED, BUTTON_RELEASED */
work.bstate |= (mmask_t) (decode_mouse(sp,
sp->_drv_mouse_old_buttons)
>> 1);
result = TRUE;
}
work.x = mer.dwMousePosition.X;
work.y = mer.dwMousePosition.Y - AdjustY();
sp->_drv_mouse_fifo[sp->_drv_mouse_tail] = work;
sp->_drv_mouse_tail += 1;
}
return result;
}
static int
wcon_read(TERMINAL_CONTROL_BLOCK * TCB, int *buf)
{
SCREEN *sp;
int n = -1;
T((T_CALLED("win32con::wcon_read(%p)"), TCB));
assert(buf);
if (okConsoleHandle(TCB)) {
SetSP();
n = _nc_mingw_console_read(sp, CON.inp, buf);
}
returnCode(n);
}
static int
wcon_nap(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED, int ms)
{
T((T_CALLED("win32con::wcon_nap(%p, %d)"), TCB, ms));
Sleep((DWORD) ms);
returnCode(OK);
}
static int
wcon_cursorSet(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED, int mode)
{
int res = -1;
T((T_CALLED("win32con:wcon_cursorSet(%d)"), mode));
if (okConsoleHandle(TCB)) {
CONSOLE_CURSOR_INFO this_CI = CON.save_CI;
switch (mode) {
case 0:
this_CI.bVisible = FALSE;
break;
case 1:
break;
case 2:
this_CI.dwSize = 100;
break;
}
SetConsoleCursorInfo(CON.hdl, &this_CI);
}
returnCode(res);
}
static bool
wcon_kyExist(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED, int keycode)
{
WORD nKey;
void *res;
bool found = FALSE;
LONG key = GenMap(0, (WORD) keycode);
T((T_CALLED("win32con::wcon_kyExist(%d)"), keycode));
res = bsearch(&key,
CON.rmap,
(size_t) (N_INI + FKEYS),
sizeof(keylist[0]),
rkeycompare);
if (res) {
key = *((LONG *) res);
nKey = LOWORD(key);
if (!(nKey & 0x8000))
found = TRUE;
}
returnCode(found);
}
static int
wcon_kpad(TERMINAL_CONTROL_BLOCK * TCB, int flag GCC_UNUSED)
{
SCREEN *sp;
int code = ERR;
T((T_CALLED("win32con::wcon_kpad(%p, %d)"), TCB, flag));
if (okConsoleHandle(TCB)) {
SetSP();
if (sp) {
code = OK;
}
}
returnCode(code);
}
static int
wcon_keyok(TERMINAL_CONTROL_BLOCK * TCB,
int keycode,
int flag)
{
int code = ERR;
SCREEN *sp;
WORD nKey;
WORD vKey;
void *res;
LONG key = GenMap(0, (WORD) keycode);
T((T_CALLED("win32con::wcon_keyok(%p, %d, %d)"), TCB, keycode, flag));
if (okConsoleHandle(TCB)) {
SetSP();
if (sp) {
res = bsearch(&key,
CON.rmap,
(size_t) (N_INI + FKEYS),
sizeof(keylist[0]),
rkeycompare);
if (res) {
key = *((LONG *) res);
vKey = HIWORD(key);
nKey = (LOWORD(key)) & 0x7fff;
if (!flag)
nKey |= 0x8000;
*(LONG *) res = GenMap(vKey, nKey);
}
}
}
returnCode(code);
}
NCURSES_EXPORT_VAR (TERM_DRIVER) _nc_WIN_DRIVER = {
FALSE,
wcon_name, /* Name */
wcon_CanHandle, /* CanHandle */
wcon_init, /* init */
wcon_release, /* release */
wcon_size, /* size */
wcon_sgmode, /* sgmode */
wcon_conattr, /* conattr */
wcon_mvcur, /* hwcur */
wcon_mode, /* mode */
wcon_rescol, /* rescol */
wcon_rescolors, /* rescolors */
wcon_setcolor, /* color */
wcon_dobeepflash, /* DoBeepFlash */
wcon_initpair, /* initpair */
wcon_initcolor, /* initcolor */
wcon_do_color, /* docolor */
wcon_initmouse, /* initmouse */
wcon_testmouse, /* testmouse */
wcon_setfilter, /* setfilter */
wcon_hwlabel, /* hwlabel */
wcon_hwlabelOnOff, /* hwlabelOnOff */
wcon_doupdate, /* update */
wcon_defaultcolors, /* defaultcolors */
wcon_print, /* print */
wcon_size, /* getsize */
wcon_setsize, /* setsize */
wcon_initacs, /* initacs */
wcon_screen_init, /* scinit */
wcon_wrap, /* scexit */
wcon_twait, /* twait */
wcon_read, /* read */
wcon_nap, /* nap */
wcon_kpad, /* kpad */
wcon_keyok, /* kyOk */
wcon_kyExist, /* kyExist */
wcon_cursorSet /* cursorSet */
};
/* --------------------------------------------------------- */
static HANDLE
get_handle(int fd)
{
intptr_t value = _get_osfhandle(fd);
return (HANDLE) value;
}
#if WINVER >= 0x0600
/* This function tests, whether or not the ncurses application
is running as a descendant of MSYS2/cygwin mintty terminal
application. mintty doesn't use Windows Console for it's screen
I/O, so the native Windows _isatty doesn't recognize it as
character device. But we can discover we are at the end of an
Pipe and can query to server side of the pipe, looking whether
or not this is mintty.
*/
static int
_ismintty(int fd, LPHANDLE pMinTTY)
{
HANDLE handle = get_handle(fd);
DWORD dw;
int code = 0;
T((T_CALLED("win32con::_ismintty(%d, %p)"), fd, pMinTTY));
if (handle != INVALID_HANDLE_VALUE) {
dw = GetFileType(handle);
if (dw == FILE_TYPE_PIPE) {
if (GetNamedPipeInfo(handle, 0, 0, 0, 0)) {
ULONG pPid;
/* Requires NT6 */
if (GetNamedPipeServerProcessId(handle, &pPid)) {
TCHAR buf[MAX_PATH];
DWORD len = 0;
/* These security attributes may allow us to
create a remote thread in mintty to manipulate
the terminal state remotely */
HANDLE pHandle = OpenProcess(
PROCESS_CREATE_THREAD
| PROCESS_QUERY_INFORMATION
| PROCESS_VM_OPERATION
| PROCESS_VM_WRITE
| PROCESS_VM_READ,
FALSE,
pPid);
if (pMinTTY)
*pMinTTY = INVALID_HANDLE_VALUE;
if (pHandle != INVALID_HANDLE_VALUE) {
if ((len = GetProcessImageFileName(
pHandle,
buf,
(DWORD)
array_length(buf)))) {
TCHAR *pos = _tcsrchr(buf, _T('\\'));
if (pos) {
pos++;
if (_tcsnicmp(pos, _TEXT("mintty.exe"), 10)
== 0) {
if (pMinTTY)
*pMinTTY = pHandle;
code = 1;
}
}
}
}
}
}
}
}
returnCode(code);
}
#endif
/* Borrowed from ansicon project.
Check whether or not an I/O handle is associated with
a Windows console.
*/
static BOOL
IsConsoleHandle(HANDLE hdl)
{
DWORD dwFlag = 0;
BOOL result;
if (!GetConsoleMode(hdl, &dwFlag)) {
result = (int) WriteConsoleA(hdl, NULL, 0, &dwFlag, NULL);
} else {
result = (int) (dwFlag & ENABLE_PROCESSED_OUTPUT);
}
return result;
}
/* Our replacement for the systems _isatty to include also
a test for mintty. This is called from the NC_ISATTY macro
defined in curses.priv.h
*/
int
_nc_mingw_isatty(int fd)
{
int result = 0;
#ifdef __MING32__
#define SysISATTY(fd) _isatty(fd)
#else
#define SysISATTY(fd) isatty(fd)
#endif
if (SysISATTY(fd)) {
result = 1;
} else {
#if WINVER >= 0x0600
result = _ismintty(fd, NULL);
#endif
}
return result;
}
/* This is used when running in terminfo mode to discover,
whether or not the "terminal" is actually a Windows
Console. It's the responsibility of the console to deal
with the terminal escape sequences that are sent by
terminfo.
*/
int
_nc_mingw_isconsole(int fd)
{
HANDLE hdl = get_handle(fd);
int code = 0;
T((T_CALLED("win32con::_nc_mingw_isconsole(%d)"), fd));
code = (int) IsConsoleHandle(hdl);
returnCode(code);
}
#define TC_PROLOGUE(fd) \
SCREEN *sp; \
TERMINAL *term = 0; \
int code = ERR; \
if (_nc_screen_chain == 0) \
return 0; \
for (each_screen(sp)) { \
if (sp->_term && (sp->_term->Filedes == fd)) { \
term = sp->_term; \
break; \
} \
} \
assert(term != 0)
int
_nc_mingw_tcsetattr(
int fd,
int optional_action GCC_UNUSED,
const struct termios *arg)
{
TC_PROLOGUE(fd);
if (_nc_mingw_isconsole(fd)) {
DWORD dwFlag = 0;
HANDLE ofd = get_handle(fd);
if (ofd != INVALID_HANDLE_VALUE) {
if (arg) {
if (arg->c_lflag & ICANON)
dwFlag |= ENABLE_LINE_INPUT;
else
dwFlag = dwFlag & (DWORD) (~ENABLE_LINE_INPUT);
if (arg->c_lflag & ECHO)
dwFlag = dwFlag | ENABLE_ECHO_INPUT;
else
dwFlag = dwFlag & (DWORD) (~ENABLE_ECHO_INPUT);
if (arg->c_iflag & BRKINT)
dwFlag |= ENABLE_PROCESSED_INPUT;
else
dwFlag = dwFlag & (DWORD) (~ENABLE_PROCESSED_INPUT);
}
dwFlag |= ENABLE_MOUSE_INPUT;
SetConsoleMode(ofd, dwFlag);
code = OK;
}
}
if (arg)
term->Nttyb = *arg;
return code;
}
int
_nc_mingw_tcgetattr(int fd, struct termios *arg)
{
TC_PROLOGUE(fd);
if (_nc_mingw_isconsole(fd)) {
if (arg)
*arg = term->Nttyb;
}
return code;
}
int
_nc_mingw_tcflush(int fd, int queue)
{
TC_PROLOGUE(fd);
(void) term;
if (_nc_mingw_isconsole(fd)) {
if (queue == TCIFLUSH) {
BOOL b = FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
if (!b)
return (int) GetLastError();
}
}
return code;
}
int
_nc_mingw_testmouse(
SCREEN *sp,
HANDLE fd,
int delay
EVENTLIST_2nd(_nc_eventlist * evl))
{
int rc = 0;
assert(sp);
if (sp->_drv_mouse_head < sp->_drv_mouse_tail) {
rc = TW_MOUSE;
} else {
rc = console_twait(sp,
fd,
TWAIT_MASK,
delay,
(int *) 0
EVENTLIST_2nd(evl));
}
return rc;
}
int
_nc_mingw_console_read(
SCREEN *sp,
HANDLE fd,
int *buf)
{
int rc = -1;
INPUT_RECORD inp_rec;
BOOL b;
DWORD nRead;
WORD vk;
assert(sp);
assert(buf);
memset(&inp_rec, 0, sizeof(inp_rec));
T((T_CALLED("_nc_mingw_console_read(%p)"), sp));
while ((b = ReadConsoleInput(fd, &inp_rec, 1, &nRead))) {
if (b && nRead > 0) {
if (rc < 0)
rc = 0;
rc = rc + (int) nRead;
if (inp_rec.EventType == KEY_EVENT) {
if (!inp_rec.Event.KeyEvent.bKeyDown)
continue;
*buf = (int) inp_rec.Event.KeyEvent.uChar.AsciiChar;
vk = inp_rec.Event.KeyEvent.wVirtualKeyCode;
/*
* There are 24 virtual function-keys, and typically
* 12 function-keys on a keyboard. Use the shift-modifier
* to provide the remaining 12 keys.
*/
if (vk >= VK_F1 && vk <= VK_F12) {
if (inp_rec.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED) {
vk = (WORD) (vk + 12);
}
}
if (*buf == 0) {
int key = MapKey(vk);
if (key < 0)
continue;
if (sp->_keypad_on) {
*buf = key;
} else {
ungetch('\0');
*buf = AnsiKey(vk);
}
}
break;
} else if (inp_rec.EventType == MOUSE_EVENT) {
if (handle_mouse(sp,
inp_rec.Event.MouseEvent)) {
*buf = KEY_MOUSE;
break;
}
}
continue;
}
}
returnCode(rc);
}
static bool
InitConsole(void)
{
/* initialize once, or not at all */
if (!console_initialized) {
int i;
DWORD num_buttons;
WORD a;
BOOL buffered = TRUE;
BOOL b;
START_TRACE();
if (_nc_mingw_isatty(0)) {
CON.isMinTTY = TRUE;
}
for (i = 0; i < (N_INI + FKEYS); i++) {
if (i < N_INI) {
CON.rmap[i] = CON.map[i] =
(DWORD) keylist[i];
CON.ansi_map[i] = (DWORD) ansi_keys[i];
} else {
CON.rmap[i] = CON.map[i] =
(DWORD) GenMap((VK_F1 + (i - N_INI)),
(KEY_F(1) + (i - N_INI)));
CON.ansi_map[i] =
(DWORD) GenMap((VK_F1 + (i - N_INI)),
(';' + (i - N_INI)));
}
}
qsort(CON.ansi_map,
(size_t) (MAPSIZE),
sizeof(keylist[0]),
keycompare);
qsort(CON.map,
(size_t) (MAPSIZE),
sizeof(keylist[0]),
keycompare);
qsort(CON.rmap,
(size_t) (MAPSIZE),
sizeof(keylist[0]),
rkeycompare);
if (GetNumberOfConsoleMouseButtons(&num_buttons)) {
CON.numButtons = (int) num_buttons;
} else {
CON.numButtons = 1;
}
a = MapColor(true, COLOR_WHITE) | MapColor(false, COLOR_BLACK);
for (i = 0; i < NUMPAIRS; i++)
CON.pairs[i] = a;
CON.inp = GetStdHandle(STD_INPUT_HANDLE);
CON.out = GetStdHandle(STD_OUTPUT_HANDLE);
b = AllocConsole();
if (!b)
b = AttachConsole(ATTACH_PARENT_PROCESS);
if (getenv("NCGDB") || getenv("NCURSES_CONSOLE2")) {
T(("... will not buffer console"));
buffered = FALSE;
CON.hdl = CON.out;
} else {
T(("... creating console buffer"));
CON.hdl = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CONSOLE_TEXTMODE_BUFFER,
NULL);
}
if (CON.hdl != INVALID_HANDLE_VALUE) {
CON.buffered = buffered;
get_SBI();
CON.save_SBI = CON.SBI;
if (!buffered) {
save_original_screen();
set_scrollback(FALSE, &CON.SBI);
}
GetConsoleCursorInfo(CON.hdl, &CON.save_CI);
T(("... initial cursor is %svisible, %d%%",
(CON.save_CI.bVisible ? "" : "not-"),
(int) CON.save_CI.dwSize));
}
console_initialized = TRUE;
}
return (CON.hdl != INVALID_HANDLE_VALUE);
}
static bool
okConsoleHandle(TERMINAL_CONTROL_BLOCK * TCB)
{
return ((TCB != 0) &&
(TCB->magic == WINMAGIC) &&
InitConsole());
}
/*
* While a constructor would ensure that this module is initialized, that will
* interfere with applications that may combine this with GUI interfaces.
*/
#if 0
static
__attribute__((constructor))
void _enter_console(void)
{
(void) InitConsole();
}
#endif
diff --git a/contrib/ncurses/panel/Makefile.in b/contrib/ncurses/panel/Makefile.in
index 5f7b5b9290e6..cbd978809dcb 100644
--- a/contrib/ncurses/panel/Makefile.in
+++ b/contrib/ncurses/panel/Makefile.in
@@ -1,177 +1,193 @@
-# $Id: Makefile.in,v 1.71 2020/02/02 23:34:34 tom Exp $
+# $Id: Makefile.in,v 1.75 2020/08/29 14:50:45 tom Exp $
##############################################################################
# Copyright 2020 Thomas E. Dickey #
# Copyright 1998-2015,2018 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey 1996-on
#
# Makefile for panels source code.
#
# This makes the following:
# libraries (normal/debug/profile/shared)
#
# The variable 'srcdir' refers to the source-distribution, and can be set with
# the configure script by "--srcdir=DIR".
#
# The rules are organized to produce the libraries for the configured models,
# turn off _all_ suffix rules; we'll generate our own
.SUFFIXES:
SHELL = @SHELL@
VPATH = @srcdir@
THIS = Makefile
x = @EXEEXT@
o = .@OBJEXT@
MODEL = @DFT_LWR_MODEL@
DESTDIR = @DESTDIR@
top_srcdir = @top_srcdir@
srcdir = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
includedir = @includedir@
datarootdir = @datarootdir@
datadir = @datadir@
includesubdir = @includesubdir@
INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir)
PACKAGE = @PACKAGE@
LIBTOOL = @LIBTOOL@
LIBTOOL_OPTS = @LIBTOOL_OPTS@ @EXPORT_SYMS@
LIBTOOL_CLEAN = @LIB_CLEAN@
LIBTOOL_COMPILE = @LIB_COMPILE@
LIBTOOL_LINK = @LIB_LINK@
LIBTOOL_INSTALL = @LIB_INSTALL@
LIBTOOL_UNINSTALL = @LIB_UNINSTALL@
LT_UNDEF = @LT_UNDEF@
INSTALL = @INSTALL@
INSTALL_LIB = @INSTALL@ @INSTALL_LIB@
INSTALL_PROG = @INSTALL_PROGRAM@ @INSTALL_OPT_S@
INSTALL_DATA = @INSTALL_DATA@
AR = @AR@
ARFLAGS = @ARFLAGS@
AWK = @AWK@
LD = @LD@
LN_S = @LN_S@
CTAGS = @CTAGS@
ETAGS = @ETAGS@
CC = @CC@
CPP = @CPP@
-CFLAGS = @CFLAGS@
+CFLAGS = @CFLAGS@ @EXTRA_CFLAGS@
-CPPFLAGS = -I${top_srcdir}/ncurses -DHAVE_CONFIG_H @CPPFLAGS@
+INCDIR = $(top_srcdir)/include
+BASE_DIR = $(top_srcdir)/ncurses
+CPPFLAGS = -I$(BASE_DIR) -DHAVE_CONFIG_H -DBUILDING_PANEL @CPPFLAGS@
CCFLAGS = $(CPPFLAGS) $(CFLAGS)
CFLAGS_LIBTOOL = $(CCFLAGS)
-CFLAGS_NORMAL = $(CCFLAGS)
-CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE
-CFLAGS_PROFILE = $(CCFLAGS) -pg
+CFLAGS_NORMAL = $(CCFLAGS) -DNCURSES_STATIC
+CFLAGS_DEBUG = $(CCFLAGS) -DNCURSES_STATIC @CC_G_OPT@ -DTRACE
+CFLAGS_PROFILE = $(CCFLAGS) -DNCURSES_STATIC -pg
CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@
CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@)
LINK = $(LIBTOOL_LINK)
LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@
SHLIB_DIRS = -L../lib
SHLIB_LIST = $(SHLIB_DIRS) -lncurses@USE_LIB_SUFFIX@ @SHLIB_LIST@
RPATH_LIST = @RPATH_LIST@
RESULTING_SYMS = @RESULTING_SYMS@
VERSIONED_SYMS = @VERSIONED_SYMS@
MK_SHARED_LIB = @MK_SHARED_LIB@
NCURSES_MAJOR = @NCURSES_MAJOR@
NCURSES_MINOR = @NCURSES_MINOR@
REL_VERSION = @cf_cv_rel_version@
ABI_VERSION = @cf_cv_abi_version@
RANLIB = @LIB_PREP@
LIBRARIES = @Libs_To_Make@
LINT = @LINT@
LINT_OPTS = @LINT_OPTS@
LINT_LIBS = -lpanel -lncurses @LIBS@
AUTO_SRC = \
../include/panel.h
################################################################################
all \
libs \
install :: $(AUTO_SRC) $(LIBRARIES)
sources: $(AUTO_SRC)
$(DESTDIR)$(bindir) \
$(DESTDIR)$(libdir) :
mkdir -p $@
# make a copy to simplify include-paths while still keeping panel's include
# file in this directory.
../include/panel.h : $(srcdir)/panel.h
-rm -f $@
cp $(srcdir)/panel.h $@
HEADER_DEPS = \
+ ../include/curses.h \
+ ../include/ncurses_cfg.h \
+ ../include/ncurses_def.h \
+ ../include/ncurses_dll.h \
+ ../include/term.h \
+ ../include/unctrl.h \
+ $(BASE_DIR)/curses.priv.h \
+ $(BASE_DIR)/new_pair.h \
+ $(INCDIR)/nc_alloc.h \
+ $(INCDIR)/nc_panel.h \
+ $(INCDIR)/nc_string.h \
+ $(INCDIR)/nc_termios.h \
+ $(INCDIR)/nc_tparm.h \
+ $(INCDIR)/term_entry.h \
$(srcdir)/panel.priv.h \
$(srcdir)/panel.h
tags:
$(CTAGS) *.[ch]
@MAKE_UPPER_TAGS@TAGS:
@MAKE_UPPER_TAGS@ $(ETAGS) *.[ch]
mostlyclean ::
-rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace
clean :: mostlyclean
-rm -f $(AUTO_SRC)
-rm -rf .libs *.dSYM
distclean :: clean
-rm -f Makefile
realclean :: distclean
###############################################################################
# The remainder of this file is automatically generated during configuration
###############################################################################
diff --git a/contrib/ncurses/panel/llib-lpanel b/contrib/ncurses/panel/llib-lpanel
index a3cf6f08e49a..6f797f5d970f 100644
--- a/contrib/ncurses/panel/llib-lpanel
+++ b/contrib/ncurses/panel/llib-lpanel
@@ -1,198 +1,199 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2015 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 1996-on *
****************************************************************************/
/* LINTLIBRARY */
/* ./panel.c */
#include <panel.priv.h>
#undef _nc_retrace_panel
PANEL *_nc_retrace_panel(
PANEL *pan)
{ return(*(PANEL **)0); }
#undef _nc_my_visbuf
const char *_nc_my_visbuf(
- const void *ptr)
+ const void *ptr,
+ int n)
{ return(*(const char **)0); }
#undef _nc_dPanel
void _nc_dPanel(
const char *text,
const PANEL *pan)
{ /* void */ }
#undef _nc_dStack
void _nc_dStack(
const char *fmt,
int num,
const PANEL *pan)
{ /* void */ }
#undef _nc_Wnoutrefresh
void _nc_Wnoutrefresh(
const PANEL *pan)
{ /* void */ }
#undef _nc_Touchpan
void _nc_Touchpan(
const PANEL *pan)
{ /* void */ }
#undef _nc_Touchline
void _nc_Touchline(
const PANEL *pan,
int start,
int count)
{ /* void */ }
/* ./p_above.c */
#undef ground_panel
PANEL *ground_panel(
SCREEN *sp)
{ return(*(PANEL **)0); }
#undef panel_above
PANEL *panel_above(
const PANEL *pan)
{ return(*(PANEL **)0); }
/* ./p_below.c */
#undef ceiling_panel
PANEL *ceiling_panel(
SCREEN *sp)
{ return(*(PANEL **)0); }
#undef panel_below
PANEL *panel_below(
const PANEL *pan)
{ return(*(PANEL **)0); }
/* ./p_bottom.c */
#undef bottom_panel
int bottom_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_delete.c */
#undef del_panel
int del_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_hide.c */
#undef hide_panel
int hide_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_hidden.c */
#undef panel_hidden
int panel_hidden(
const PANEL *pan)
{ return(*(int *)0); }
/* ./p_move.c */
#undef move_panel
int move_panel(
PANEL *pan,
int starty,
int startx)
{ return(*(int *)0); }
/* ./p_new.c */
#undef new_panel
PANEL *new_panel(
WINDOW *win)
{ return(*(PANEL **)0); }
/* ./p_replace.c */
#undef replace_panel
int replace_panel(
PANEL *pan,
WINDOW *win)
{ return(*(int *)0); }
/* ./p_show.c */
#undef show_panel
int show_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_top.c */
#undef top_panel
int top_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_update.c */
#undef update_panels_sp
void update_panels_sp(
SCREEN *sp)
{ /* void */ }
#undef update_panels
void update_panels(void)
{ /* void */ }
/* ./p_user.c */
#undef set_panel_userptr
int set_panel_userptr(
PANEL *pan,
const void *uptr)
{ return(*(int *)0); }
#undef panel_userptr
const void *panel_userptr(
const PANEL *pan)
{ return(*(const void **)0); }
/* ./p_win.c */
#undef panel_window
WINDOW *panel_window(
const PANEL *pan)
{ return(*(WINDOW **)0); }
diff --git a/contrib/ncurses/panel/llib-lpanelt b/contrib/ncurses/panel/llib-lpanelt
index 331e87a00c93..713a0753aa3c 100644
--- a/contrib/ncurses/panel/llib-lpanelt
+++ b/contrib/ncurses/panel/llib-lpanelt
@@ -1,198 +1,199 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 2010,2015 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 2010-on *
****************************************************************************/
/* LINTLIBRARY */
/* ./panel.c */
#include <panel.priv.h>
#undef _nc_retrace_panel
PANEL *_nc_retrace_panel(
PANEL *pan)
{ return(*(PANEL **)0); }
#undef _nc_my_visbuf
const char *_nc_my_visbuf(
- const void *ptr)
+ const void *ptr,
+ int n)
{ return(*(const char **)0); }
#undef _nc_dPanel
void _nc_dPanel(
const char *text,
const PANEL *pan)
{ /* void */ }
#undef _nc_dStack
void _nc_dStack(
const char *fmt,
int num,
const PANEL *pan)
{ /* void */ }
#undef _nc_Wnoutrefresh
void _nc_Wnoutrefresh(
const PANEL *pan)
{ /* void */ }
#undef _nc_Touchpan
void _nc_Touchpan(
const PANEL *pan)
{ /* void */ }
#undef _nc_Touchline
void _nc_Touchline(
const PANEL *pan,
int start,
int count)
{ /* void */ }
/* ./p_above.c */
#undef ground_panel
PANEL *ground_panel(
SCREEN *sp)
{ return(*(PANEL **)0); }
#undef panel_above
PANEL *panel_above(
const PANEL *pan)
{ return(*(PANEL **)0); }
/* ./p_below.c */
#undef ceiling_panel
PANEL *ceiling_panel(
SCREEN *sp)
{ return(*(PANEL **)0); }
#undef panel_below
PANEL *panel_below(
const PANEL *pan)
{ return(*(PANEL **)0); }
/* ./p_bottom.c */
#undef bottom_panel
int bottom_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_delete.c */
#undef del_panel
int del_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_hide.c */
#undef hide_panel
int hide_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_hidden.c */
#undef panel_hidden
int panel_hidden(
const PANEL *pan)
{ return(*(int *)0); }
/* ./p_move.c */
#undef move_panel
int move_panel(
PANEL *pan,
int starty,
int startx)
{ return(*(int *)0); }
/* ./p_new.c */
#undef new_panel
PANEL *new_panel(
WINDOW *win)
{ return(*(PANEL **)0); }
/* ./p_replace.c */
#undef replace_panel
int replace_panel(
PANEL *pan,
WINDOW *win)
{ return(*(int *)0); }
/* ./p_show.c */
#undef show_panel
int show_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_top.c */
#undef top_panel
int top_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_update.c */
#undef update_panels_sp
void update_panels_sp(
SCREEN *sp)
{ /* void */ }
#undef update_panels
void update_panels(void)
{ /* void */ }
/* ./p_user.c */
#undef set_panel_userptr
int set_panel_userptr(
PANEL *pan,
const void *uptr)
{ return(*(int *)0); }
#undef panel_userptr
const void *panel_userptr(
const PANEL *pan)
{ return(*(const void **)0); }
/* ./p_win.c */
#undef panel_window
WINDOW *panel_window(
const PANEL *pan)
{ return(*(WINDOW **)0); }
diff --git a/contrib/ncurses/panel/llib-lpaneltw b/contrib/ncurses/panel/llib-lpaneltw
index 331e87a00c93..713a0753aa3c 100644
--- a/contrib/ncurses/panel/llib-lpaneltw
+++ b/contrib/ncurses/panel/llib-lpaneltw
@@ -1,198 +1,199 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 2010,2015 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 2010-on *
****************************************************************************/
/* LINTLIBRARY */
/* ./panel.c */
#include <panel.priv.h>
#undef _nc_retrace_panel
PANEL *_nc_retrace_panel(
PANEL *pan)
{ return(*(PANEL **)0); }
#undef _nc_my_visbuf
const char *_nc_my_visbuf(
- const void *ptr)
+ const void *ptr,
+ int n)
{ return(*(const char **)0); }
#undef _nc_dPanel
void _nc_dPanel(
const char *text,
const PANEL *pan)
{ /* void */ }
#undef _nc_dStack
void _nc_dStack(
const char *fmt,
int num,
const PANEL *pan)
{ /* void */ }
#undef _nc_Wnoutrefresh
void _nc_Wnoutrefresh(
const PANEL *pan)
{ /* void */ }
#undef _nc_Touchpan
void _nc_Touchpan(
const PANEL *pan)
{ /* void */ }
#undef _nc_Touchline
void _nc_Touchline(
const PANEL *pan,
int start,
int count)
{ /* void */ }
/* ./p_above.c */
#undef ground_panel
PANEL *ground_panel(
SCREEN *sp)
{ return(*(PANEL **)0); }
#undef panel_above
PANEL *panel_above(
const PANEL *pan)
{ return(*(PANEL **)0); }
/* ./p_below.c */
#undef ceiling_panel
PANEL *ceiling_panel(
SCREEN *sp)
{ return(*(PANEL **)0); }
#undef panel_below
PANEL *panel_below(
const PANEL *pan)
{ return(*(PANEL **)0); }
/* ./p_bottom.c */
#undef bottom_panel
int bottom_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_delete.c */
#undef del_panel
int del_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_hide.c */
#undef hide_panel
int hide_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_hidden.c */
#undef panel_hidden
int panel_hidden(
const PANEL *pan)
{ return(*(int *)0); }
/* ./p_move.c */
#undef move_panel
int move_panel(
PANEL *pan,
int starty,
int startx)
{ return(*(int *)0); }
/* ./p_new.c */
#undef new_panel
PANEL *new_panel(
WINDOW *win)
{ return(*(PANEL **)0); }
/* ./p_replace.c */
#undef replace_panel
int replace_panel(
PANEL *pan,
WINDOW *win)
{ return(*(int *)0); }
/* ./p_show.c */
#undef show_panel
int show_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_top.c */
#undef top_panel
int top_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_update.c */
#undef update_panels_sp
void update_panels_sp(
SCREEN *sp)
{ /* void */ }
#undef update_panels
void update_panels(void)
{ /* void */ }
/* ./p_user.c */
#undef set_panel_userptr
int set_panel_userptr(
PANEL *pan,
const void *uptr)
{ return(*(int *)0); }
#undef panel_userptr
const void *panel_userptr(
const PANEL *pan)
{ return(*(const void **)0); }
/* ./p_win.c */
#undef panel_window
WINDOW *panel_window(
const PANEL *pan)
{ return(*(WINDOW **)0); }
diff --git a/contrib/ncurses/panel/llib-lpanelw b/contrib/ncurses/panel/llib-lpanelw
index 463a02ec0013..bd6e90d2a2c2 100644
--- a/contrib/ncurses/panel/llib-lpanelw
+++ b/contrib/ncurses/panel/llib-lpanelw
@@ -1,198 +1,199 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 2002-2010,2015 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 2002-on *
****************************************************************************/
/* LINTLIBRARY */
/* ./panel.c */
#include <panel.priv.h>
#undef _nc_retrace_panel
PANEL *_nc_retrace_panel(
PANEL *pan)
{ return(*(PANEL **)0); }
#undef _nc_my_visbuf
const char *_nc_my_visbuf(
- const void *ptr)
+ const void *ptr,
+ int n)
{ return(*(const char **)0); }
#undef _nc_dPanel
void _nc_dPanel(
const char *text,
const PANEL *pan)
{ /* void */ }
#undef _nc_dStack
void _nc_dStack(
const char *fmt,
int num,
const PANEL *pan)
{ /* void */ }
#undef _nc_Wnoutrefresh
void _nc_Wnoutrefresh(
const PANEL *pan)
{ /* void */ }
#undef _nc_Touchpan
void _nc_Touchpan(
const PANEL *pan)
{ /* void */ }
#undef _nc_Touchline
void _nc_Touchline(
const PANEL *pan,
int start,
int count)
{ /* void */ }
/* ./p_above.c */
#undef ground_panel
PANEL *ground_panel(
SCREEN *sp)
{ return(*(PANEL **)0); }
#undef panel_above
PANEL *panel_above(
const PANEL *pan)
{ return(*(PANEL **)0); }
/* ./p_below.c */
#undef ceiling_panel
PANEL *ceiling_panel(
SCREEN *sp)
{ return(*(PANEL **)0); }
#undef panel_below
PANEL *panel_below(
const PANEL *pan)
{ return(*(PANEL **)0); }
/* ./p_bottom.c */
#undef bottom_panel
int bottom_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_delete.c */
#undef del_panel
int del_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_hide.c */
#undef hide_panel
int hide_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_hidden.c */
#undef panel_hidden
int panel_hidden(
const PANEL *pan)
{ return(*(int *)0); }
/* ./p_move.c */
#undef move_panel
int move_panel(
PANEL *pan,
int starty,
int startx)
{ return(*(int *)0); }
/* ./p_new.c */
#undef new_panel
PANEL *new_panel(
WINDOW *win)
{ return(*(PANEL **)0); }
/* ./p_replace.c */
#undef replace_panel
int replace_panel(
PANEL *pan,
WINDOW *win)
{ return(*(int *)0); }
/* ./p_show.c */
#undef show_panel
int show_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_top.c */
#undef top_panel
int top_panel(
PANEL *pan)
{ return(*(int *)0); }
/* ./p_update.c */
#undef update_panels_sp
void update_panels_sp(
SCREEN *sp)
{ /* void */ }
#undef update_panels
void update_panels(void)
{ /* void */ }
/* ./p_user.c */
#undef set_panel_userptr
int set_panel_userptr(
PANEL *pan,
const void *uptr)
{ return(*(int *)0); }
#undef panel_userptr
const void *panel_userptr(
const PANEL *pan)
{ return(*(const void **)0); }
/* ./p_win.c */
#undef panel_window
WINDOW *panel_window(
const PANEL *pan)
{ return(*(WINDOW **)0); }
diff --git a/contrib/ncurses/panel/p_above.c b/contrib/ncurses/panel/p_above.c
index 12b5b87bd4e1..2a6fde55cdc8 100644
--- a/contrib/ncurses/panel/p_above.c
+++ b/contrib/ncurses/panel/p_above.c
@@ -1,85 +1,85 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Juergen Pfeifer 1997-1999,2008 *
****************************************************************************/
/* p_above.c
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_above.c,v 1.10 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_above.c,v 1.11 2020/05/24 01:40:20 anonymous.maarten Exp $")
#if NCURSES_SP_FUNCS
-NCURSES_EXPORT(PANEL *)
+PANEL_EXPORT(PANEL *)
ground_panel(SCREEN * sp)
{
T((T_CALLED("ground_panel(%p)"), (void *)sp));
if (sp)
{
struct panelhook *ph = NCURSES_SP_NAME(_nc_panelhook) (sp);
if (_nc_bottom_panel) /* this is the pseudo panel */
returnPanel(_nc_bottom_panel->above);
else
returnPanel(0);
}
else
{
if (0 == CURRENT_SCREEN)
returnPanel(0);
else
returnPanel(ground_panel(CURRENT_SCREEN));
}
}
#endif
-NCURSES_EXPORT(PANEL *)
+PANEL_EXPORT(PANEL *)
panel_above(const PANEL * pan)
{
PANEL *result;
T((T_CALLED("panel_above(%p)"), (const void *)pan));
if (pan)
result = pan->above;
else
{
#if NCURSES_SP_FUNCS
result = ground_panel(CURRENT_SCREEN);
#else
/* if top and bottom are equal, we have no or only the pseudo panel;
if not, we return the panel above the pseudo panel */
result = EMPTY_STACK()? (PANEL *) 0 : _nc_bottom_panel->above;
#endif
}
returnPanel(result);
}
diff --git a/contrib/ncurses/panel/p_below.c b/contrib/ncurses/panel/p_below.c
index a8b1ef478298..100393d53a72 100644
--- a/contrib/ncurses/panel/p_below.c
+++ b/contrib/ncurses/panel/p_below.c
@@ -1,86 +1,86 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Juergen Pfeifer 1997-1999,2008 *
****************************************************************************/
/* p_below.c
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_below.c,v 1.10 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_below.c,v 1.11 2020/05/24 01:40:20 anonymous.maarten Exp $")
#if NCURSES_SP_FUNCS
-NCURSES_EXPORT(PANEL *)
+PANEL_EXPORT(PANEL *)
ceiling_panel(SCREEN * sp)
{
T((T_CALLED("ceiling_panel(%p)"), (void *)sp));
if (sp)
{
struct panelhook *ph = NCURSES_SP_NAME(_nc_panelhook) (sp);
/* if top and bottom are equal, we have no or only the pseudo panel */
returnPanel(EMPTY_STACK()? (PANEL *) 0 : _nc_top_panel);
}
else
{
if (0 == CURRENT_SCREEN)
returnPanel(0);
else
returnPanel(ceiling_panel(CURRENT_SCREEN));
}
}
#endif
-NCURSES_EXPORT(PANEL *)
+PANEL_EXPORT(PANEL *)
panel_below(const PANEL * pan)
{
PANEL *result;
T((T_CALLED("panel_below(%p)"), (const void *)pan));
if (pan)
{
GetHook(pan);
/* we must not return the pseudo panel */
result = Is_Pseudo(pan->below) ? (PANEL *) 0 : pan->below;
}
else
{
#if NCURSES_SP_FUNCS
result = ceiling_panel(CURRENT_SCREEN);
#else
/* if top and bottom are equal, we have no or only the pseudo panel */
result = EMPTY_STACK()? (PANEL *) 0 : _nc_top_panel;
#endif
}
returnPanel(result);
}
diff --git a/contrib/ncurses/panel/p_bottom.c b/contrib/ncurses/panel/p_bottom.c
index a69ac9f4c82c..0e5b090aa694 100644
--- a/contrib/ncurses/panel/p_bottom.c
+++ b/contrib/ncurses/panel/p_bottom.c
@@ -1,75 +1,75 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2008,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Juergen Pfeifer 1997-1999,2008 *
****************************************************************************/
/* p_bottom.c
* Place a panel on bottom of the stack; may already be in the stack
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_bottom.c,v 1.14 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_bottom.c,v 1.16 2020/09/26 18:02:35 tom Exp $")
-NCURSES_EXPORT(int)
+PANEL_EXPORT(int)
bottom_panel(PANEL * pan)
{
int err = OK;
T((T_CALLED("bottom_panel(%p)"), (void *)pan));
if (pan)
{
GetHook(pan);
if (!Is_Bottom(pan))
{
- dBug(("--> bottom_panel %s", USER_PTR(pan->user)));
+ dBug(("--> bottom_panel %s", USER_PTR(pan->user, 1)));
HIDE_PANEL(pan, err, OK);
assert(_nc_bottom_panel == _nc_stdscr_pseudo_panel);
dStack("<lb%d>", 1, pan);
pan->below = _nc_bottom_panel;
pan->above = _nc_bottom_panel->above;
if (pan->above)
pan->above->below = pan;
_nc_bottom_panel->above = pan;
dStack("<lb%d>", 9, pan);
}
}
else
err = ERR;
returnCode(err);
}
diff --git a/contrib/ncurses/panel/p_delete.c b/contrib/ncurses/panel/p_delete.c
index 6b122a6c9b92..da3dcdf97a98 100644
--- a/contrib/ncurses/panel/p_delete.c
+++ b/contrib/ncurses/panel/p_delete.c
@@ -1,62 +1,61 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Juergen Pfeifer 1999,2008 *
****************************************************************************/
/* p_delete.c
* Remove a panel from stack, if in it, and free struct
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_delete.c,v 1.11 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_delete.c,v 1.17 2020/12/26 18:25:34 tom Exp $")
-NCURSES_EXPORT(int)
-del_panel(PANEL * pan)
+PANEL_EXPORT(int)
+del_panel(PANEL *pan)
{
int err = OK;
T((T_CALLED("del_panel(%p)"), (void *)pan));
if (pan)
{
- dBug(("--> del_panel %s", USER_PTR(pan->user)));
- {
- GetHook(pan);
- HIDE_PANEL(pan, err, OK);
- free((void *)pan);
- }
+ GetHook(pan);
+ HIDE_PANEL(pan, err, OK);
+ dBug(("...discard ptr=%s", USER_PTR(pan->user, 1)));
+ dBug(("...deleted pan=%p", (void *)pan));
+ free((void *)pan);
}
else
err = ERR;
returnCode(err);
}
diff --git a/contrib/ncurses/panel/p_hidden.c b/contrib/ncurses/panel/p_hidden.c
index ddb23b13412a..43057fa5999d 100644
--- a/contrib/ncurses/panel/p_hidden.c
+++ b/contrib/ncurses/panel/p_hidden.c
@@ -1,55 +1,55 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Juergen Pfeifer 1997-1999,2008 *
****************************************************************************/
/* p_hidden.c
* Test whether or not panel is hidden
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_hidden.c,v 1.10 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_hidden.c,v 1.11 2020/05/24 01:40:20 anonymous.maarten Exp $")
-NCURSES_EXPORT(int)
+PANEL_EXPORT(int)
panel_hidden(const PANEL * pan)
{
int rc = ERR;
T((T_CALLED("panel_hidden(%p)"), (const void *)pan));
if (pan)
{
GetHook(pan);
rc = (IS_LINKED(pan) ? FALSE : TRUE);
}
returnCode(rc);
}
diff --git a/contrib/ncurses/panel/p_hide.c b/contrib/ncurses/panel/p_hide.c
index fc26f752fe14..6a372ace4bcf 100644
--- a/contrib/ncurses/panel/p_hide.c
+++ b/contrib/ncurses/panel/p_hide.c
@@ -1,63 +1,63 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
/* p_hide.c
* Remove a panel from the stack
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_hide.c,v 1.12 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_hide.c,v 1.14 2020/09/26 18:02:35 tom Exp $")
-NCURSES_EXPORT(int)
+PANEL_EXPORT(int)
hide_panel(register PANEL * pan)
{
int err = ERR;
T((T_CALLED("hide_panel(%p)"), (void *)pan));
if (pan)
{
GetHook(pan);
- dBug(("--> hide_panel %s", USER_PTR(pan->user)));
+ dBug(("--> hide_panel %s", USER_PTR(pan->user, 1)));
dStack("<u%d>", 1, pan);
HIDE_PANEL(pan, err, ERR);
err = OK;
dStack("<u%d>", 9, pan);
}
returnCode(err);
}
diff --git a/contrib/ncurses/panel/p_move.c b/contrib/ncurses/panel/p_move.c
index 02830bf5a413..7ff6fa7e8179 100644
--- a/contrib/ncurses/panel/p_move.c
+++ b/contrib/ncurses/panel/p_move.c
@@ -1,61 +1,61 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2008,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Juergen Pfeifer 1997-1999,2009 *
****************************************************************************/
/* p_move.c
* Move a panel to a new location
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_move.c,v 1.12 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_move.c,v 1.13 2020/05/24 01:40:20 anonymous.maarten Exp $")
-NCURSES_EXPORT(int)
+PANEL_EXPORT(int)
move_panel(PANEL * pan, int starty, int startx)
{
int rc = ERR;
T((T_CALLED("move_panel(%p,%d,%d)"), (void *)pan, starty, startx));
if (pan)
{
GetHook(pan);
if (IS_LINKED(pan))
{
Touchpan(pan);
PANEL_UPDATE(pan, (PANEL *) 0);
}
rc = mvwin(pan->win, starty, startx);
}
returnCode(rc);
}
diff --git a/contrib/ncurses/panel/p_new.c b/contrib/ncurses/panel/p_new.c
index d2f8d03692b3..a7c5a4e2db21 100644
--- a/contrib/ncurses/panel/p_new.c
+++ b/contrib/ncurses/panel/p_new.c
@@ -1,123 +1,129 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Juergen Pfeifer 1997-1999 *
* and: Thomas E. Dickey 2000-on *
****************************************************************************/
/* p_new.c
* Creation of a new panel
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_new.c,v 1.17 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_new.c,v 1.22 2020/12/26 18:25:48 tom Exp $")
#ifdef TRACE
static char *stdscr_id;
static char *new_id;
+
+static PANEL *
+AllocPanel(const char *name)
+{
+ PANEL *result = typeMalloc(PANEL, 1);
+
+ _tracef("create :%s %p", name, (void *)result);
+ return result;
+}
+#define InitUser(name) \
+ if (!name ## _id) \
+ name ## _id = strdup(#name); \
+ pan->user = name ## _id; \
+ _tracef("create :user_ptr %p", pan->user)
+#else
+#define AllocPanel(name) typeMalloc(PANEL, 1)
+#define InitUser(name) \
+ pan->user = (void *)0
#endif
/*+-------------------------------------------------------------------------
Get root (i.e. stdscr's) panel.
Establish the pseudo panel for stdscr if necessary.
--------------------------------------------------------------------------*/
static PANEL *
root_panel(NCURSES_SP_DCL0)
{
#if NCURSES_SP_FUNCS
struct panelhook *ph = NCURSES_SP_NAME(_nc_panelhook) (sp);
#elif NO_LEAKS
struct panelhook *ph = _nc_panelhook();
#endif
- if (_nc_stdscr_pseudo_panel == (PANEL *) 0)
+ if (_nc_stdscr_pseudo_panel == (PANEL *)0)
{
assert(SP_PARM && SP_PARM->_stdscr && !_nc_bottom_panel && !_nc_top_panel);
#if NO_LEAKS
ph->destroy = del_panel;
#endif
- _nc_stdscr_pseudo_panel = typeMalloc(PANEL, 1);
+ _nc_stdscr_pseudo_panel = AllocPanel("root_panel");
if (_nc_stdscr_pseudo_panel != 0)
{
PANEL *pan = _nc_stdscr_pseudo_panel;
WINDOW *win = SP_PARM->_stdscr;
pan->win = win;
- pan->below = (PANEL *) 0;
- pan->above = (PANEL *) 0;
-#ifdef TRACE
- if (!stdscr_id)
- stdscr_id = strdup("stdscr");
- pan->user = stdscr_id;
-#else
- pan->user = (void *)0;
-#endif
+ pan->below = (PANEL *)0;
+ pan->above = (PANEL *)0;
+ InitUser(stdscr);
_nc_bottom_panel = _nc_top_panel = pan;
}
}
return _nc_stdscr_pseudo_panel;
}
-NCURSES_EXPORT(PANEL *)
+PANEL_EXPORT(PANEL *)
new_panel(WINDOW *win)
{
- PANEL *pan = (PANEL *) 0;
+ PANEL *pan = (PANEL *)0;
GetWindowHook(win);
T((T_CALLED("new_panel(%p)"), (void *)win));
if (!win)
returnPanel(pan);
if (!_nc_stdscr_pseudo_panel)
(void)root_panel(NCURSES_SP_ARG);
assert(_nc_stdscr_pseudo_panel);
- if (!(win->_flags & _ISPAD) && (pan = typeMalloc(PANEL, 1)))
+ if (!(win->_flags & _ISPAD) && (pan = AllocPanel("new_panel")))
{
pan->win = win;
- pan->above = (PANEL *) 0;
- pan->below = (PANEL *) 0;
-#ifdef TRACE
- if (!new_id)
- new_id = strdup("new");
- pan->user = new_id;
-#else
- pan->user = (char *)0;
-#endif
+ pan->above = (PANEL *)0;
+ pan->below = (PANEL *)0;
+ InitUser(new);
(void)show_panel(pan);
}
returnPanel(pan);
}
diff --git a/contrib/ncurses/panel/p_replace.c b/contrib/ncurses/panel/p_replace.c
index 5acbccf8406d..a2d56ae6316b 100644
--- a/contrib/ncurses/panel/p_replace.c
+++ b/contrib/ncurses/panel/p_replace.c
@@ -1,61 +1,61 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
/* p_replace.c
* Replace a panels window.
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_replace.c,v 1.12 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_replace.c,v 1.13 2020/05/24 01:40:20 anonymous.maarten Exp $")
-NCURSES_EXPORT(int)
+PANEL_EXPORT(int)
replace_panel(PANEL * pan, WINDOW *win)
{
int rc = ERR;
T((T_CALLED("replace_panel(%p,%p)"), (void *)pan, (void *)win));
if (pan)
{
GetHook(pan);
if (IS_LINKED(pan))
{
Touchpan(pan);
PANEL_UPDATE(pan, (PANEL *) 0);
}
pan->win = win;
rc = OK;
}
returnCode(rc);
}
diff --git a/contrib/ncurses/panel/p_show.c b/contrib/ncurses/panel/p_show.c
index 933bf5aa2db4..0c973dbeaf66 100644
--- a/contrib/ncurses/panel/p_show.c
+++ b/contrib/ncurses/panel/p_show.c
@@ -1,73 +1,73 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
/* p_show.c
* Place a panel on top of the stack; may already be in the stack
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_show.c,v 1.14 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_show.c,v 1.16 2020/09/26 18:02:35 tom Exp $")
-NCURSES_EXPORT(int)
+PANEL_EXPORT(int)
show_panel(PANEL * pan)
{
int err = ERR;
T((T_CALLED("show_panel(%p)"), (void *)pan));
if (pan)
{
GetHook(pan);
if (Is_Top(pan))
returnCode(OK);
- dBug(("--> show_panel %s", USER_PTR(pan->user)));
+ dBug(("--> show_panel %s", USER_PTR(pan->user, 1)));
HIDE_PANEL(pan, err, OK);
dStack("<lt%d>", 1, pan);
assert(_nc_bottom_panel == _nc_stdscr_pseudo_panel);
_nc_top_panel->above = pan;
pan->below = _nc_top_panel;
pan->above = (PANEL *) 0;
_nc_top_panel = pan;
err = OK;
dStack("<lt%d>", 9, pan);
}
returnCode(err);
}
diff --git a/contrib/ncurses/panel/p_top.c b/contrib/ncurses/panel/p_top.c
index 09e89fcc3b54..17abd7680136 100644
--- a/contrib/ncurses/panel/p_top.c
+++ b/contrib/ncurses/panel/p_top.c
@@ -1,47 +1,47 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2005,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
/* p_top.c
* Place a panel on top of the stack.
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_top.c,v 1.7 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_top.c,v 1.8 2020/05/24 01:40:20 anonymous.maarten Exp $")
-NCURSES_EXPORT(int)
+PANEL_EXPORT(int)
top_panel(PANEL * pan)
{
T((T_CALLED("top_panel(%p)"), (void *)pan));
returnCode(show_panel(pan));
}
diff --git a/contrib/ncurses/panel/p_update.c b/contrib/ncurses/panel/p_update.c
index 3fe4770b46c9..40212965d3bb 100644
--- a/contrib/ncurses/panel/p_update.c
+++ b/contrib/ncurses/panel/p_update.c
@@ -1,79 +1,79 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Juergen Pfeifer 1997-1999,2008 *
****************************************************************************/
/* p_update.c
* wnoutrefresh windows in an orderly fashion
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_update.c,v 1.12 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_update.c,v 1.13 2020/05/24 01:40:20 anonymous.maarten Exp $")
-NCURSES_EXPORT(void)
+PANEL_EXPORT(void)
NCURSES_SP_NAME(update_panels) (NCURSES_SP_DCL0)
{
PANEL *pan;
T((T_CALLED("update_panels(%p)"), (void *)SP_PARM));
dBug(("--> update_panels"));
if (SP_PARM)
{
GetScreenHook(SP_PARM);
pan = _nc_bottom_panel;
while (pan && pan->above)
{
PANEL_UPDATE(pan, pan->above);
pan = pan->above;
}
pan = _nc_bottom_panel;
while (pan)
{
Wnoutrefresh(pan);
pan = pan->above;
}
}
returnVoid;
}
#if NCURSES_SP_FUNCS
-NCURSES_EXPORT(void)
+PANEL_EXPORT(void)
update_panels(void)
{
NCURSES_SP_NAME(update_panels) (CURRENT_SCREEN);
}
#endif
diff --git a/contrib/ncurses/panel/p_user.c b/contrib/ncurses/panel/p_user.c
index 633431ea204e..9eec8ba11672 100644
--- a/contrib/ncurses/panel/p_user.c
+++ b/contrib/ncurses/panel/p_user.c
@@ -1,57 +1,57 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2005,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
/* p_user.c
* Set/Get panels user pointer
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_user.c,v 1.9 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_user.c,v 1.10 2020/05/24 01:40:20 anonymous.maarten Exp $")
-NCURSES_EXPORT(int)
+PANEL_EXPORT(int)
set_panel_userptr(PANEL * pan, NCURSES_CONST void *uptr)
{
T((T_CALLED("set_panel_userptr(%p,%p)"), (void *)pan, (NCURSES_CONST void *)uptr));
if (!pan)
returnCode(ERR);
pan->user = uptr;
returnCode(OK);
}
-NCURSES_EXPORT(NCURSES_CONST void *)
+PANEL_EXPORT(NCURSES_CONST void *)
panel_userptr(const PANEL * pan)
{
T((T_CALLED("panel_userptr(%p)"), (const void *)pan));
returnCVoidPtr(pan ? pan->user : (NCURSES_CONST void *)0);
}
diff --git a/contrib/ncurses/panel/p_win.c b/contrib/ncurses/panel/p_win.c
index 023a71c93499..d188988577eb 100644
--- a/contrib/ncurses/panel/p_win.c
+++ b/contrib/ncurses/panel/p_win.c
@@ -1,47 +1,47 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2005,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
/* p_win.c
* Return a panels window.
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_win.c,v 1.7 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: p_win.c,v 1.8 2020/05/24 01:40:20 anonymous.maarten Exp $")
-NCURSES_EXPORT(WINDOW *)
+PANEL_EXPORT(WINDOW *)
panel_window(const PANEL * pan)
{
T((T_CALLED("panel_window(%p)"), (const void *)pan));
returnWin(pan ? pan->win : (WINDOW *)0);
}
diff --git a/contrib/ncurses/panel/panel.c b/contrib/ncurses/panel/panel.c
index a0e632d27631..1b2d6e8349a0 100644
--- a/contrib/ncurses/panel/panel.c
+++ b/contrib/ncurses/panel/panel.c
@@ -1,162 +1,162 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Juergen Pfeifer 1996-1999,2008 *
* and: Thomas E. Dickey *
****************************************************************************/
/* panel.c -- implementation of panels library, some core routines */
#include "panel.priv.h"
-MODULE_ID("$Id: panel.c,v 1.27 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: panel.c,v 1.30 2020/09/26 18:05:17 tom Exp $")
/*+-------------------------------------------------------------------------
_nc_retrace_panel (pan)
--------------------------------------------------------------------------*/
#ifdef TRACE
-NCURSES_EXPORT(PANEL *)
+PANEL_EXPORT(PANEL *)
_nc_retrace_panel(PANEL * pan)
{
T((T_RETURN("%p"), (void *)pan));
return pan;
}
#endif
/*+-------------------------------------------------------------------------
_nc_my_visbuf(ptr)
--------------------------------------------------------------------------*/
#ifdef TRACE
#ifndef TRACE_TXT
-NCURSES_EXPORT(const char *)
-_nc_my_visbuf(const void *ptr)
+PANEL_EXPORT(const char *)
+_nc_my_visbuf(const void *ptr, int n)
{
char temp[32];
if (ptr != 0)
- _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "ptr:%p", ptr);
+ _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "%p", ptr);
else
_nc_STRCPY(temp, "<null>", sizeof(temp));
- return _nc_visbuf(temp);
+ return _nc_visbuf2(n, temp);
}
#endif
#endif
/*+-------------------------------------------------------------------------
dPanel(text,pan)
--------------------------------------------------------------------------*/
#ifdef TRACE
-NCURSES_EXPORT(void)
+PANEL_EXPORT(void)
_nc_dPanel(const char *text, const PANEL * pan)
{
_tracef("%s id=%s b=%s a=%s y=%d x=%d",
- text, USER_PTR(pan->user),
- (pan->below) ? USER_PTR(pan->below->user) : "--",
- (pan->above) ? USER_PTR(pan->above->user) : "--",
+ text, USER_PTR(pan->user, 1),
+ (pan->below) ? USER_PTR(pan->below->user, 2) : "--",
+ (pan->above) ? USER_PTR(pan->above->user, 3) : "--",
PSTARTY(pan), PSTARTX(pan));
}
#endif
/*+-------------------------------------------------------------------------
dStack(fmt,num,pan)
--------------------------------------------------------------------------*/
#ifdef TRACE
-NCURSES_EXPORT(void)
+PANEL_EXPORT(void)
_nc_dStack(const char *fmt, int num, const PANEL * pan)
{
char s80[80];
GetPanelHook(pan);
_nc_SPRINTF(s80, _nc_SLIMIT(sizeof(s80)) fmt, num, pan);
_tracef("%s b=%s t=%s", s80,
- (_nc_bottom_panel) ? USER_PTR(_nc_bottom_panel->user) : "--",
- (_nc_top_panel) ? USER_PTR(_nc_top_panel->user) : "--");
+ (_nc_bottom_panel) ? USER_PTR(_nc_bottom_panel->user, 1) : "--",
+ (_nc_top_panel) ? USER_PTR(_nc_top_panel->user, 2) : "--");
if (pan)
- _tracef("pan id=%s", USER_PTR(pan->user));
+ _tracef("pan id=%s", USER_PTR(pan->user, 1));
pan = _nc_bottom_panel;
while (pan)
{
dPanel("stk", pan);
pan = pan->above;
}
}
#endif
/*+-------------------------------------------------------------------------
Wnoutrefresh(pan) - debugging hook for wnoutrefresh
--------------------------------------------------------------------------*/
#ifdef TRACE
-NCURSES_EXPORT(void)
+PANEL_EXPORT(void)
_nc_Wnoutrefresh(const PANEL * pan)
{
dPanel("wnoutrefresh", pan);
wnoutrefresh(pan->win);
}
#endif
/*+-------------------------------------------------------------------------
Touchpan(pan)
--------------------------------------------------------------------------*/
#ifdef TRACE
-NCURSES_EXPORT(void)
+PANEL_EXPORT(void)
_nc_Touchpan(const PANEL * pan)
{
dPanel("Touchpan", pan);
touchwin(pan->win);
}
#endif
/*+-------------------------------------------------------------------------
Touchline(pan,start,count)
--------------------------------------------------------------------------*/
#ifdef TRACE
-NCURSES_EXPORT(void)
+PANEL_EXPORT(void)
_nc_Touchline(const PANEL * pan, int start, int count)
{
char s80[80];
_nc_SPRINTF(s80, _nc_SLIMIT(sizeof(s80)) "Touchline s=%d c=%d", start, count);
dPanel(s80, pan);
touchline(pan->win, start, count);
}
#endif
#ifndef TRACE
# ifndef __GNUC__
/* Some C compilers need something defined in a source file */
extern void _nc_dummy_panel(void);
void
_nc_dummy_panel(void)
{
}
# endif
#endif
diff --git a/contrib/ncurses/panel/panel.h b/contrib/ncurses/panel/panel.h
index 2eebe178575a..62acc8ff120b 100644
--- a/contrib/ncurses/panel/panel.h
+++ b/contrib/ncurses/panel/panel.h
@@ -1,89 +1,100 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2009,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Juergen Pfeifer 1996-1999,2008 *
****************************************************************************/
-/* $Id: panel.h,v 1.13 2020/02/02 23:34:34 tom Exp $ */
+/* $Id: panel.h,v 1.14 2020/07/04 20:38:43 tom Exp $ */
/* panel.h -- interface file for panels library */
#ifndef NCURSES_PANEL_H_incl
#define NCURSES_PANEL_H_incl 1
#include <curses.h>
typedef struct panel
#if !NCURSES_OPAQUE_PANEL
{
WINDOW *win;
struct panel *below;
struct panel *above;
NCURSES_CONST void *user;
}
#endif /* !NCURSES_OPAQUE_PANEL */
PANEL;
#if defined(__cplusplus)
extern "C" {
#endif
-extern NCURSES_EXPORT(WINDOW*) panel_window (const PANEL *);
-extern NCURSES_EXPORT(void) update_panels (void);
-extern NCURSES_EXPORT(int) hide_panel (PANEL *);
-extern NCURSES_EXPORT(int) show_panel (PANEL *);
-extern NCURSES_EXPORT(int) del_panel (PANEL *);
-extern NCURSES_EXPORT(int) top_panel (PANEL *);
-extern NCURSES_EXPORT(int) bottom_panel (PANEL *);
-extern NCURSES_EXPORT(PANEL*) new_panel (WINDOW *);
-extern NCURSES_EXPORT(PANEL*) panel_above (const PANEL *);
-extern NCURSES_EXPORT(PANEL*) panel_below (const PANEL *);
-extern NCURSES_EXPORT(int) set_panel_userptr (PANEL *, NCURSES_CONST void *);
-extern NCURSES_EXPORT(NCURSES_CONST void*) panel_userptr (const PANEL *);
-extern NCURSES_EXPORT(int) move_panel (PANEL *, int, int);
-extern NCURSES_EXPORT(int) replace_panel (PANEL *,WINDOW *);
-extern NCURSES_EXPORT(int) panel_hidden (const PANEL *);
+#if defined(BUILDING_PANEL)
+# define PANEL_IMPEXP NCURSES_EXPORT_GENERAL_EXPORT
+#else
+# define PANEL_IMPEXP NCURSES_EXPORT_GENERAL_IMPORT
+#endif
+
+#define PANEL_WRAPPED_VAR(type,name) extern PANEL_IMPEXP type NCURSES_PUBLIC_VAR(name)(void)
+
+#define PANEL_EXPORT(type) PANEL_IMPEXP type NCURSES_API
+#define PANEL_EXPORT_VAR(type) PANEL_IMPEXP type
+
+extern PANEL_EXPORT(WINDOW*) panel_window (const PANEL *);
+extern PANEL_EXPORT(void) update_panels (void);
+extern PANEL_EXPORT(int) hide_panel (PANEL *);
+extern PANEL_EXPORT(int) show_panel (PANEL *);
+extern PANEL_EXPORT(int) del_panel (PANEL *);
+extern PANEL_EXPORT(int) top_panel (PANEL *);
+extern PANEL_EXPORT(int) bottom_panel (PANEL *);
+extern PANEL_EXPORT(PANEL*) new_panel (WINDOW *);
+extern PANEL_EXPORT(PANEL*) panel_above (const PANEL *);
+extern PANEL_EXPORT(PANEL*) panel_below (const PANEL *);
+extern PANEL_EXPORT(int) set_panel_userptr (PANEL *, NCURSES_CONST void *);
+extern PANEL_EXPORT(NCURSES_CONST void*) panel_userptr (const PANEL *);
+extern PANEL_EXPORT(int) move_panel (PANEL *, int, int);
+extern PANEL_EXPORT(int) replace_panel (PANEL *,WINDOW *);
+extern PANEL_EXPORT(int) panel_hidden (const PANEL *);
#if NCURSES_SP_FUNCS
-extern NCURSES_EXPORT(PANEL *) ground_panel(SCREEN *);
-extern NCURSES_EXPORT(PANEL *) ceiling_panel(SCREEN *);
+extern PANEL_EXPORT(PANEL *) ground_panel(SCREEN *);
+extern PANEL_EXPORT(PANEL *) ceiling_panel(SCREEN *);
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(update_panels) (SCREEN*);
+extern PANEL_EXPORT(void) NCURSES_SP_NAME(update_panels) (SCREEN*);
#endif
#if defined(__cplusplus)
}
#endif
#endif /* NCURSES_PANEL_H_incl */
/* end of panel.h */
diff --git a/contrib/ncurses/panel/panel.priv.h b/contrib/ncurses/panel/panel.priv.h
index c8e3ea798f9d..029a4f33cd8d 100644
--- a/contrib/ncurses/panel/panel.priv.h
+++ b/contrib/ncurses/panel/panel.priv.h
@@ -1,212 +1,212 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2014,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
-/* $Id: panel.priv.h,v 1.28 2020/02/02 23:34:34 tom Exp $ */
+/* $Id: panel.priv.h,v 1.30 2020/09/26 18:05:32 tom Exp $ */
#ifndef NCURSES_PANEL_PRIV_H
#define NCURSES_PANEL_PRIV_H 1
/* *INDENT-OFF* */
#if HAVE_CONFIG_H
# include <ncurses_cfg.h>
#endif
#include <stdlib.h>
#include <string.h>
#include <assert.h>
struct screen; /* forward declaration */
#include "curses.priv.h" /* includes nc_panel.h */
#define NCURSES_OPAQUE_PANEL 0
#include "panel.h"
#ifdef TRACE
- extern NCURSES_EXPORT(const char *) _nc_my_visbuf (const void *);
+ extern PANEL_EXPORT(const char *) _nc_my_visbuf (const void *, int);
# ifdef TRACE_TXT
-# define USER_PTR(ptr) _nc_visbuf((const char *)ptr)
+# define USER_PTR(ptr,n) _nc_visbuf2(n, (const char *)ptr)
# else
-# define USER_PTR(ptr) _nc_my_visbuf((const char *)ptr)
+# define USER_PTR(ptr,n) _nc_my_visbuf((const char *)ptr, n)
# endif
# define returnPanel(code) TRACE_RETURN1(code,panel)
- extern NCURSES_EXPORT(PANEL *) _nc_retrace_panel (PANEL *);
- extern NCURSES_EXPORT(void) _nc_dPanel (const char*, const PANEL*);
- extern NCURSES_EXPORT(void) _nc_dStack (const char*, int, const PANEL*);
- extern NCURSES_EXPORT(void) _nc_Wnoutrefresh (const PANEL*);
- extern NCURSES_EXPORT(void) _nc_Touchpan (const PANEL*);
- extern NCURSES_EXPORT(void) _nc_Touchline (const PANEL*, int, int);
+ extern PANEL_EXPORT(PANEL *) _nc_retrace_panel (PANEL *);
+ extern PANEL_EXPORT(void) _nc_dPanel (const char*, const PANEL*);
+ extern PANEL_EXPORT(void) _nc_dStack (const char*, int, const PANEL*);
+ extern PANEL_EXPORT(void) _nc_Wnoutrefresh (const PANEL*);
+ extern PANEL_EXPORT(void) _nc_Touchpan (const PANEL*);
+ extern PANEL_EXPORT(void) _nc_Touchline (const PANEL*, int, int);
# define dBug(x) _tracef x
# define dPanel(text,pan) _nc_dPanel(text,pan)
# define dStack(fmt,num,pan) _nc_dStack(fmt,num,pan)
# define Wnoutrefresh(pan) _nc_Wnoutrefresh(pan)
# define Touchpan(pan) _nc_Touchpan(pan)
# define Touchline(pan,start,count) _nc_Touchline(pan,start,count)
#else /* !TRACE */
# define returnPanel(code) return code
# define dBug(x)
# define dPanel(text,pan)
# define dStack(fmt,num,pan)
# define Wnoutrefresh(pan) wnoutrefresh((pan)->win)
# define Touchpan(pan) touchwin((pan)->win)
# define Touchline(pan,start,count) touchline((pan)->win,start,count)
#endif
#if NCURSES_SP_FUNCS
#define GetScreenHook(sp) \
struct panelhook* ph = NCURSES_SP_NAME(_nc_panelhook)(sp)
#define GetPanelHook(pan) \
GetScreenHook(pan ? _nc_screen_of((pan)->win) : 0)
#define GetWindowHook(win) \
SCREEN* sp = _nc_screen_of(win); \
GetScreenHook(sp)
#define GetHook(pan) SCREEN* sp = _nc_screen_of(pan->win); \
GetScreenHook(sp)
#define _nc_stdscr_pseudo_panel ((ph)->stdscr_pseudo_panel)
#define _nc_top_panel ((ph)->top_panel)
#define _nc_bottom_panel ((ph)->bottom_panel)
#else /* !NCURSES_SP_FUNCS */
#define GetScreenHook(sp) /* nothing */
#define GetPanelHook(pan) /* nothing */
#define GetWindowHook(win) /* nothing */
#define GetHook(pan) /* nothing */
#define _nc_stdscr_pseudo_panel _nc_panelhook()->stdscr_pseudo_panel
#define _nc_top_panel _nc_panelhook()->top_panel
#define _nc_bottom_panel _nc_panelhook()->bottom_panel
#endif /* NCURSES_SP_FUNCS */
#define EMPTY_STACK() (_nc_top_panel == _nc_bottom_panel)
#define Is_Bottom(p) (((p) != (PANEL*)0) && !EMPTY_STACK() && (_nc_bottom_panel->above == (p)))
#define Is_Top(p) (((p) != (PANEL*)0) && !EMPTY_STACK() && (_nc_top_panel == (p)))
#define Is_Pseudo(p) (((p) != (PANEL*)0) && ((p) == _nc_bottom_panel))
/*+-------------------------------------------------------------------------
IS_LINKED(pan) - check to see if panel is in the stack
--------------------------------------------------------------------------*/
/* This works! The only case where it would fail is, when the list has
only one element. But this could only be the pseudo panel at the bottom */
#define IS_LINKED(p) (((p)->above || (p)->below ||((p)==_nc_bottom_panel)) ? TRUE : FALSE)
#define PSTARTX(pan) ((pan)->win->_begx)
#define PENDX(pan) ((pan)->win->_begx + getmaxx((pan)->win) - 1)
#define PSTARTY(pan) ((pan)->win->_begy)
#define PENDY(pan) ((pan)->win->_begy + getmaxy((pan)->win) - 1)
/*+-------------------------------------------------------------------------
PANELS_OVERLAPPED(pan1,pan2) - check panel overlapped
---------------------------------------------------------------------------*/
#define PANELS_OVERLAPPED(pan1,pan2) \
(( !(pan1) || !(pan2) || \
PSTARTY(pan1) > PENDY(pan2) || PENDY(pan1) < PSTARTY(pan2) ||\
PSTARTX(pan1) > PENDX(pan2) || PENDX(pan1) < PSTARTX(pan2) ) \
? FALSE : TRUE)
/*+-------------------------------------------------------------------------
Compute the intersection rectangle of two overlapping rectangles
---------------------------------------------------------------------------*/
#define COMPUTE_INTERSECTION(pan1,pan2,ix1,ix2,iy1,iy2)\
ix1 = (PSTARTX(pan1) < PSTARTX(pan2)) ? PSTARTX(pan2) : PSTARTX(pan1);\
ix2 = (PENDX(pan1) < PENDX(pan2)) ? PENDX(pan1) : PENDX(pan2);\
iy1 = (PSTARTY(pan1) < PSTARTY(pan2)) ? PSTARTY(pan2) : PSTARTY(pan1);\
iy2 = (PENDY(pan1) < PENDY(pan2)) ? PENDY(pan1) : PENDY(pan2);\
assert((ix1<=ix2) && (iy1<=iy2))
/*+-------------------------------------------------------------------------
Walk through the panel stack starting at the given location and
check for intersections; overlapping panels are "touched", so they
are incrementally overwriting cells that should be hidden.
If the "touch" flag is set, the panel gets touched before it is
updated.
---------------------------------------------------------------------------*/
#define PANEL_UPDATE(pan,panstart)\
{ PANEL* pan2 = ((panstart) ? (panstart) : _nc_bottom_panel);\
while(pan2 && pan2->win) {\
if ((pan2 != pan) && PANELS_OVERLAPPED(pan,pan2)) {\
int y, ix1, ix2, iy1, iy2;\
COMPUTE_INTERSECTION(pan, pan2, ix1, ix2, iy1, iy2);\
for(y = iy1; y <= iy2; y++) {\
if (is_linetouched(pan->win,y - PSTARTY(pan))) {\
struct ldat* line = &(pan2->win->_line[y - PSTARTY(pan2)]);\
CHANGED_RANGE(line, ix1 - PSTARTX(pan2), ix2 - PSTARTX(pan2));\
}\
}\
}\
pan2 = pan2->above;\
}\
}
/*+-------------------------------------------------------------------------
Remove panel from stack.
---------------------------------------------------------------------------*/
#define PANEL_UNLINK(pan,err) \
{ err = ERR;\
if (pan) {\
if (IS_LINKED(pan)) {\
if ((pan)->below)\
(pan)->below->above = (pan)->above;\
if ((pan)->above)\
(pan)->above->below = (pan)->below;\
if ((pan) == _nc_bottom_panel) \
_nc_bottom_panel = (pan)->above;\
if ((pan) == _nc_top_panel) \
_nc_top_panel = (pan)->below;\
err = OK;\
}\
(pan)->above = (pan)->below = (PANEL*)0;\
}\
}
#define HIDE_PANEL(pan,err,err_if_unlinked)\
if (IS_LINKED(pan)) {\
Touchpan(pan);\
PANEL_UPDATE(pan,(PANEL*)0);\
PANEL_UNLINK(pan,err);\
} \
else {\
err = err_if_unlinked;\
}
#if NCURSES_SP_FUNCS
/* These may become later renamed and part of panel.h and the public API */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_update_panels)(SCREEN*);
+extern PANEL_EXPORT(void) NCURSES_SP_NAME(_nc_update_panels)(SCREEN*);
#endif
/* *INDENT-ON* */
#endif /* NCURSES_PANEL_PRIV_H */
diff --git a/contrib/ncurses/progs/Makefile.in b/contrib/ncurses/progs/Makefile.in
index 79cbc99ecf28..1511ec271210 100644
--- a/contrib/ncurses/progs/Makefile.in
+++ b/contrib/ncurses/progs/Makefile.in
@@ -1,341 +1,341 @@
-# $Id: Makefile.in,v 1.103 2020/02/02 23:34:34 tom Exp $
+# $Id: Makefile.in,v 1.108 2021/01/23 20:42:08 tom Exp $
##############################################################################
-# Copyright 2020 Thomas E. Dickey #
+# Copyright 2020,2021 Thomas E. Dickey #
# Copyright 1998-2016,2018 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation #
# the rights to use, copy, modify, merge, publish, distribute, distribute #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the #
# following conditions: #
# #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
# DEALINGS IN THE SOFTWARE. #
# #
# Except as contained in this notice, the name(s) of the above copyright #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
#
# Author: Thomas E. Dickey 1996-on
#
# Makefile for ncurses source code.
#
# This makes the ncurses utility programs.
#
# The variable 'srcdir' refers to the source-distribution, and can be set with
# the configure script by "--srcdir=DIR".
#
# The rules are organized to produce the libraries for the configured models,
# and the programs with the configured default model.
# turn off _all_ suffix rules; we'll generate our own
.SUFFIXES:
SHELL = @SHELL@
VPATH = @srcdir@
THIS = Makefile
-CF_MFLAGS = @cf_cv_makeflags@
+TOP_MFLAGS = @cf_cv_makeflags@ DESTDIR="$(DESTDIR)" RPATH_LIST="$(RPATH_LIST)"
@SET_MAKE@
x = @EXEEXT@
o = .@OBJEXT@
MODEL = ../@DFT_OBJ_SUBDIR@
DESTDIR = @DESTDIR@
top_srcdir = @top_srcdir@
srcdir = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
includedir = @includedir@
datarootdir = @datarootdir@
datadir = @datadir@
includesubdir = @includesubdir@
INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir)
PACKAGE = @PACKAGE@
LIBTOOL = @LIBTOOL@
LIBTOOL_OPTS = @LIBTOOL_OPTS@
LIBTOOL_CLEAN = @LIB_CLEAN@
LIBTOOL_COMPILE = @LIB_COMPILE@
LIBTOOL_LINK = @LIB_LINK@
LIBTOOL_INSTALL = @LIB_INSTALL@
LIBTOOL_UNINSTALL = @LIB_UNINSTALL@
INSTALL = @INSTALL@
INSTALL_PROG = @INSTALL_PROGRAM@ @INSTALL_OPT_S@
transform = @program_transform_name@
AWK = @AWK@
LN_S = @LN_S@
CTAGS = @CTAGS@
ETAGS = @ETAGS@
CC = @CC@
CPP = @CPP@
-CFLAGS = @CFLAGS@
+CFLAGS = @CFLAGS@ @EXTRA_CFLAGS@
INCDIR = $(top_srcdir)/include
CPPFLAGS = -DHAVE_CONFIG_H -I../progs @CPPFLAGS@
CCFLAGS = $(CPPFLAGS) $(CFLAGS)
CFLAGS_LIBTOOL = $(CCFLAGS)
-CFLAGS_NORMAL = $(CCFLAGS)
-CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE
-CFLAGS_PROFILE = $(CCFLAGS) -pg
+CFLAGS_NORMAL = $(CCFLAGS) -DNCURSES_STATIC
+CFLAGS_DEBUG = $(CCFLAGS) -DNCURSES_STATIC @CC_G_OPT@ -DTRACE
+CFLAGS_PROFILE = $(CCFLAGS) -DNCURSES_STATIC -pg
CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@
CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@)
REL_VERSION = @cf_cv_rel_version@
ABI_VERSION = @cf_cv_abi_version@
LOCAL_LIBDIR = @top_builddir@/lib
LD = @LD@
LINK = @LINK_PROGS@ $(LIBTOOL_LINK)
LDFLAGS = @EXTRA_LDFLAGS@ @LDFLAGS@
RPATH_LIST = @RPATH_LIST@
LDFLAGS_LIBTOOL = $(LDFLAGS) $(CFLAGS_LIBTOOL)
LDFLAGS_NORMAL = $(LDFLAGS) $(CFLAGS_NORMAL)
LDFLAGS_DEBUG = $(LDFLAGS) $(CFLAGS_DEBUG)
LDFLAGS_PROFILE = $(LDFLAGS) $(CFLAGS_PROFILE)
LDFLAGS_SHARED = $(LDFLAGS) $(CFLAGS_SHARED) @LD_SHARED_OPTS@
LDFLAGS_DEFAULT = $(LDFLAGS_@DFT_UPR_MODEL@)
LIBS_TIC = @TINFO_LDFLAGS@ @LDFLAGS_STATIC@ @TICS_LIBS@ @TINFO_LIBS@ @LDFLAGS_SHARED@ @LD_MODEL@ @LIBS@
LDFLAGS_TIC = @TICS_LDFLAGS@ $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_TIC)
LIBS_TINFO = @LDFLAGS_STATIC@ @TINFO_LIBS@ @LDFLAGS_SHARED@ @LD_MODEL@ @LIBS@
LDFLAGS_TINFO = @TINFO_LDFLAGS@ $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_TINFO)
LINT = @LINT@
LINT_OPTS = @LINT_OPTS@
LINT_LIBS = -lncurses @LIBS@
AUTO_SRC = \
termsort.c \
transform.h
# tic relies on direct access to the terminfo database
GET_PROGS = infocmp$x clear$x tabs$x tput$x tset$x toe$x
PUT_PROGS = @MAKE_TERMINFO@ tic$x
PROGS = $(PUT_PROGS) $(GET_PROGS)
# Default library, for linking applications
DEPS_CURSES = ../lib/@LIB_PREFIX@ncurses@DFT_DEP_SUFFIX@
HEADER_DEPS = \
../include/curses.h \
$(INCDIR)/term_entry.h \
$(INCDIR)/tic.h \
$(INCDIR)/nc_alloc.h
################################################################################
all: $(AUTO_SRC) $(PROGS)
sources: $(AUTO_SRC)
install: $(AUTO_SRC) install.progs
uninstall: uninstall.progs
# this line simplifies the configure-script
libs \
install.libs \
uninstall.libs:
TRANSFORM = sed 's/$x$$//'|sed '$(transform)'|sed 's/$$/$x/'
# transformed names for installing files
actual_captoinfo = `echo captoinfo$x| $(TRANSFORM)`
actual_clear = `echo clear$x| $(TRANSFORM)`
actual_infocmp = `echo infocmp$x| $(TRANSFORM)`
actual_infotocap = `echo infotocap$x| $(TRANSFORM)`
actual_init = `echo init$x| $(TRANSFORM)`
actual_reset = `echo reset$x| $(TRANSFORM)`
actual_tabs = `echo tabs$x| $(TRANSFORM)`
actual_tic = `echo tic$x| $(TRANSFORM)`
actual_toe = `echo toe$x| $(TRANSFORM)`
actual_tput = `echo tput$x| $(TRANSFORM)`
actual_tset = `echo tset$x| $(TRANSFORM)`
# transformed names for comparing at runtime
define_captoinfo = `echo captoinfo| $(TRANSFORM)`
define_clear = `echo clear| $(TRANSFORM)`
define_infotocap = `echo infotocap| $(TRANSFORM)`
define_init = `echo init| $(TRANSFORM)`
define_reset = `echo reset| $(TRANSFORM)`
transform.h :
echo "#ifndef __TRANSFORM_H" >$@
echo "#define __TRANSFORM_H 1" >>$@
echo "#include <progs.priv.h>" >>$@
echo "extern bool same_program(const char *, const char *);" >>$@
-$(SHELL) -c 'if test -n "$x" ; then echo "#define SUFFIX_IGNORED \"$x\"">>$@; fi'
echo "#define PROG_CAPTOINFO \"$(define_captoinfo)\"" >>$@
echo "#define PROG_INFOTOCAP \"$(define_infotocap)\"" >>$@
echo "#define PROG_CLEAR \"$(define_clear)\"" >>$@
echo "#define PROG_RESET \"$(define_reset)\"" >>$@
echo "#define PROG_INIT \"$(define_init)\"" >>$@
echo "#endif /* __TRANSFORM_H */" >>$@
install.progs: $(AUTO_SRC) $(PROGS) $(DESTDIR)$(bindir)
@MAKE_TERMINFO@ $(LIBTOOL_INSTALL) $(INSTALL_PROG) tic$x $(DESTDIR)$(bindir)/$(actual_tic)
@MAKE_TERMINFO@ $(LIBTOOL_INSTALL) $(INSTALL_PROG) toe$x $(DESTDIR)$(bindir)/$(actual_toe)
@MAKE_TERMINFO@ @echo "linking $(actual_infotocap) to $(actual_tic)"
@MAKE_TERMINFO@ -@rm -f $(DESTDIR)$(bindir)/$(actual_infotocap)
-@MAKE_TERMINFO@ (cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tic) $(actual_infotocap))
+@MAKE_TERMINFO@ ( cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tic) $(actual_infotocap) )
@MAKE_TERMINFO@ @echo "linking $(actual_captoinfo) to $(actual_tic)"
@MAKE_TERMINFO@ -@rm -f $(DESTDIR)$(bindir)/$(actual_captoinfo)
-@MAKE_TERMINFO@ (cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tic) $(actual_captoinfo))
+@MAKE_TERMINFO@ ( cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tic) $(actual_captoinfo) )
$(LIBTOOL_INSTALL) $(INSTALL_PROG) infocmp$x $(DESTDIR)$(bindir)/$(actual_infocmp)
$(LIBTOOL_INSTALL) $(INSTALL_PROG) clear$x $(DESTDIR)$(bindir)/$(actual_clear)
$(LIBTOOL_INSTALL) $(INSTALL_PROG) tabs$x $(DESTDIR)$(bindir)/$(actual_tabs)
$(LIBTOOL_INSTALL) $(INSTALL_PROG) tput$x $(DESTDIR)$(bindir)/$(actual_tput)
$(LIBTOOL_INSTALL) $(INSTALL_PROG) tset$x $(DESTDIR)$(bindir)/$(actual_tset)
@echo "linking $(actual_reset) to $(actual_tset)"
-@rm -f $(DESTDIR)$(bindir)/$(actual_reset)
- (cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tset) $(actual_reset))
+ ( cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tset) $(actual_reset) )
uninstall.progs:
@MAKE_TERMINFO@ -@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_tic)
@MAKE_TERMINFO@ -@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_toe)
@MAKE_TERMINFO@ -@rm -f $(DESTDIR)$(bindir)/$(actual_captoinfo)
@MAKE_TERMINFO@ -@rm -f $(DESTDIR)$(bindir)/$(actual_infotocap)
-@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_infocmp)
-@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_clear)
-@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_tabs)
-@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_tput)
-@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_tset)
-@rm -f $(DESTDIR)$(bindir)/$(actual_reset)
$(DESTDIR)$(bindir) :
mkdir -p $@
#
# Utilities normally built by make all start here
#
DEPS_TIC = \
$(MODEL)/tic$o \
$(MODEL)/dump_entry$o \
$(MODEL)/tparm_type$o \
$(MODEL)/transform$o
tic$x: $(DEPS_TIC) $(DEPS_CURSES) transform.h
@ECHO_LD@ $(LINK) $(DEPS_TIC) $(LDFLAGS_TIC) -o $@
DEPS_TOE = \
$(MODEL)/toe$o
toe$x: $(DEPS_TOE) $(DEPS_CURSES)
@ECHO_LD@ $(LINK) $(DEPS_TOE) $(LDFLAGS_TIC) -o $@
DEPS_CLEAR = \
$(MODEL)/clear$o \
$(MODEL)/clear_cmd$o \
$(MODEL)/tty_settings$o
clear$x: $(DEPS_CLEAR) $(DEPS_CURSES)
@ECHO_LD@ $(LINK) $(DEPS_CLEAR) $(LDFLAGS_TINFO) -o $@
DEPS_TABS = \
$(MODEL)/tabs$o \
$(MODEL)/tty_settings$o
tabs$x: $(DEPS_TABS) $(DEPS_TABS)
@ECHO_LD@ $(LINK) $(DEPS_TABS) $(LDFLAGS_TINFO) -o $@
DEPS_TPUT = \
$(MODEL)/tput$o \
$(MODEL)/clear_cmd$o \
$(MODEL)/reset_cmd$o \
$(MODEL)/tparm_type$o \
$(MODEL)/transform$o \
$(MODEL)/tty_settings$o
tput$x: $(DEPS_TPUT) $(DEPS_CURSES) transform.h
@ECHO_LD@ $(LINK) $(DEPS_TPUT) $(LDFLAGS_TINFO) -o $@
DEPS_INFOCMP = \
$(MODEL)/infocmp$o \
$(MODEL)/dump_entry$o
infocmp$x: $(DEPS_INFOCMP) $(DEPS_CURSES)
@ECHO_LD@ $(LINK) $(DEPS_INFOCMP) $(LDFLAGS_TIC) -o $@
DEPS_TSET = \
$(MODEL)/tset$o \
$(MODEL)/reset_cmd$o \
$(MODEL)/transform$o \
$(MODEL)/tty_settings$o
tset$x: $(DEPS_TSET) $(DEPS_CURSES) transform.h
@ECHO_LD@ $(LINK) $(DEPS_TSET) $(LDFLAGS_TINFO) -o $@
termsort.c: $(srcdir)/MKtermsort.sh
$(SHELL) $(srcdir)/MKtermsort.sh $(AWK) $(srcdir)/../include/@TERMINFO_CAPS@ >$@
#
# Utility productions start here
#
tags:
$(CTAGS) *.[ch]
@MAKE_UPPER_TAGS@TAGS:
@MAKE_UPPER_TAGS@ $(ETAGS) *.[ch]
mostlyclean ::
-rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace
clean :: mostlyclean
-$(SHELL) -c "if test -n '$x' ; then $(MAKE) clean x=''; fi"
-rm -f $(AUTO_SRC)
-rm -f $(PROGS)
-rm -rf .libs *.dSYM
distclean :: clean
-rm -f Makefile
realclean :: distclean
# These rules are used to allow "make -n" to work on a clean directory-tree
../include/hashsize.h \
../include/parametrized.h \
../include/term.h :
- cd ../include; $(MAKE) $(CF_MFLAGS)
+ ( cd ../include && $(MAKE) $(TOP_MFLAGS) )
$(DEPS_CURSES) :
- cd ../ncurses; $(MAKE) $(CF_MFLAGS)
+ ( cd ../ncurses && $(MAKE) $(TOP_MFLAGS) )
lint:
@MAKE_TERMINFO@ $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/tic.c $(srcdir)/dump_entry.c $(LINT_LIBS)
@MAKE_TERMINFO@ $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/toe.c $(srcdir)/dump_entry.c $(LINT_LIBS)
$(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/clear.c $(LINT_LIBS)
$(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/infocmp.c $(srcdir)/dump_entry.c $(LINT_LIBS)
$(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/tabs.c $(LINT_LIBS)
$(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/tput.c $(LINT_LIBS)
$(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/tset.c $(srcdir)/dump_entry.c $(LINT_LIBS)
###############################################################################
# The remainder of this file is automatically generated during configuration
###############################################################################
diff --git a/contrib/ncurses/progs/dump_entry.c b/contrib/ncurses/progs/dump_entry.c
index 85d56eb92c2d..75bbe059cd0b 100644
--- a/contrib/ncurses/progs/dump_entry.c
+++ b/contrib/ncurses/progs/dump_entry.c
@@ -1,1799 +1,1803 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996 on *
****************************************************************************/
#define __INTERNAL_CAPS_VISIBLE
#include <progs.priv.h>
#include "dump_entry.h"
#include "termsort.c" /* this C file is generated */
#include <parametrized.h> /* so is this */
-MODULE_ID("$Id: dump_entry.c,v 1.176 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: dump_entry.c,v 1.181 2020/12/26 18:25:18 tom Exp $")
#define DISCARD(string) string = ABSENT_STRING
#define PRINTF (void) printf
#define WRAPPED 32
#define OkIndex(index,array) ((int)(index) >= 0 && (int)(index) < (int) SIZEOF(array))
#define TcOutput() (outform == F_TERMCAP || outform == F_TCONVERR)
typedef struct {
char *text;
size_t used;
size_t size;
} DYNBUF;
static int tversion; /* terminfo version */
static int outform; /* output format to use */
static int sortmode; /* sort mode to use */
static int width = 60; /* max line width for listings */
static int height = 65535; /* max number of lines for listings */
static int column; /* current column, limited by 'width' */
static int oldcol; /* last value of column before wrap */
static bool pretty; /* true if we format if-then-else strings */
static bool wrapped; /* true if we wrap too-long strings */
static bool did_wrap; /* true if last wrap_concat did wrapping */
static bool checking; /* true if we are checking for tic */
static int quickdump; /* true if we are dumping compiled data */
static char *save_sgr;
static DYNBUF outbuf;
static DYNBUF tmpbuf;
/* indirection pointers for implementing sort and display modes */
static const PredIdx *bool_indirect, *num_indirect, *str_indirect;
static NCURSES_CONST char *const *bool_names;
static NCURSES_CONST char *const *num_names;
static NCURSES_CONST char *const *str_names;
static const char *separator = "", *trailer = "";
static int indent = 8;
/* cover various ports and variants of terminfo */
#define V_ALLCAPS 0 /* all capabilities (SVr4, XSI, ncurses) */
#define V_SVR1 1 /* SVR1, Ultrix */
#define V_HPUX 2 /* HP/UX */
#define V_AIX 3 /* AIX */
#define V_BSD 4 /* BSD */
#if NCURSES_XNAMES
#define OBSOLETE(n) (!_nc_user_definable && (n[0] == 'O' && n[1] == 'T'))
#else
#define OBSOLETE(n) (n[0] == 'O' && n[1] == 'T')
#endif
#define isObsolete(f,n) ((f == F_TERMINFO || f == F_VARIABLE) && (sortmode != S_VARIABLE) && OBSOLETE(n))
#if NCURSES_XNAMES
#define BoolIndirect(j) ((j >= BOOLCOUNT) ? (j) : ((sortmode == S_NOSORT) ? j : bool_indirect[j]))
#define NumIndirect(j) ((j >= NUMCOUNT) ? (j) : ((sortmode == S_NOSORT) ? j : num_indirect[j]))
#define StrIndirect(j) ((j >= STRCOUNT) ? (j) : ((sortmode == S_NOSORT) ? j : str_indirect[j]))
#else
#define BoolIndirect(j) ((sortmode == S_NOSORT) ? (j) : bool_indirect[j])
#define NumIndirect(j) ((sortmode == S_NOSORT) ? (j) : num_indirect[j])
#define StrIndirect(j) ((sortmode == S_NOSORT) ? (j) : str_indirect[j])
#endif
static void failed(const char *) GCC_NORETURN;
static void
failed(const char *s)
{
perror(s);
ExitProgram(EXIT_FAILURE);
}
static void
strncpy_DYN(DYNBUF * dst, const char *src, size_t need)
{
size_t want = need + dst->used + 1;
if (want > dst->size) {
dst->size += (want + 1024); /* be generous */
dst->text = typeRealloc(char, dst->size, dst->text);
if (dst->text == 0)
failed("strncpy_DYN");
}
_nc_STRNCPY(dst->text + dst->used, src, need + 1);
dst->used += need;
dst->text[dst->used] = 0;
}
static void
strcpy_DYN(DYNBUF * dst, const char *src)
{
if (src == 0) {
dst->used = 0;
strcpy_DYN(dst, "");
} else {
strncpy_DYN(dst, src, strlen(src));
}
}
#if NO_LEAKS
static void
free_DYN(DYNBUF * p)
{
if (p->text != 0)
free(p->text);
p->text = 0;
p->size = 0;
p->used = 0;
}
void
_nc_leaks_dump_entry(void)
{
free_DYN(&outbuf);
free_DYN(&tmpbuf);
}
#endif
#define NameTrans(check,result) \
if ((np->nte_index <= OK_ ## check) \
&& check[np->nte_index]) \
return (result[np->nte_index])
NCURSES_CONST char *
nametrans(const char *name)
/* translate a capability name to termcap from terminfo */
{
const struct name_table_entry *np;
if ((np = _nc_find_entry(name, _nc_get_hash_table(0))) != 0) {
switch (np->nte_type) {
case BOOLEAN:
NameTrans(bool_from_termcap, boolcodes);
break;
case NUMBER:
NameTrans(num_from_termcap, numcodes);
break;
case STRING:
NameTrans(str_from_termcap, strcodes);
break;
}
}
return (0);
}
void
dump_init(const char *version,
int mode,
int sort,
bool wrap_strings,
int twidth,
int theight,
unsigned traceval,
bool formatted,
bool check,
int quick)
/* set up for entry display */
{
width = twidth;
height = theight;
pretty = formatted;
wrapped = wrap_strings;
checking = check;
quickdump = (quick & 3);
did_wrap = (width <= 0);
/* versions */
if (version == 0)
tversion = V_ALLCAPS;
else if (!strcmp(version, "SVr1") || !strcmp(version, "SVR1")
|| !strcmp(version, "Ultrix"))
tversion = V_SVR1;
else if (!strcmp(version, "HP"))
tversion = V_HPUX;
else if (!strcmp(version, "AIX"))
tversion = V_AIX;
else if (!strcmp(version, "BSD"))
tversion = V_BSD;
else
tversion = V_ALLCAPS;
/* implement display modes */
switch (outform = mode) {
case F_LITERAL:
case F_TERMINFO:
bool_names = boolnames;
num_names = numnames;
str_names = strnames;
separator = (twidth > 0 && theight > 1) ? ", " : ",";
trailer = "\n\t";
break;
case F_VARIABLE:
bool_names = boolfnames;
num_names = numfnames;
str_names = strfnames;
separator = (twidth > 0 && theight > 1) ? ", " : ",";
trailer = "\n\t";
break;
case F_TERMCAP:
case F_TCONVERR:
bool_names = boolcodes;
num_names = numcodes;
str_names = strcodes;
separator = ":";
trailer = "\\\n\t:";
break;
}
indent = 8;
/* implement sort modes */
switch (sortmode = sort) {
case S_NOSORT:
if (traceval)
(void) fprintf(stderr,
"%s: sorting by term structure order\n", _nc_progname);
break;
case S_TERMINFO:
if (traceval)
(void) fprintf(stderr,
"%s: sorting by terminfo name order\n", _nc_progname);
bool_indirect = bool_terminfo_sort;
num_indirect = num_terminfo_sort;
str_indirect = str_terminfo_sort;
break;
case S_VARIABLE:
if (traceval)
(void) fprintf(stderr,
"%s: sorting by C variable order\n", _nc_progname);
bool_indirect = bool_variable_sort;
num_indirect = num_variable_sort;
str_indirect = str_variable_sort;
break;
case S_TERMCAP:
if (traceval)
(void) fprintf(stderr,
"%s: sorting by termcap name order\n", _nc_progname);
bool_indirect = bool_termcap_sort;
num_indirect = num_termcap_sort;
str_indirect = str_termcap_sort;
break;
}
if (traceval)
(void) fprintf(stderr,
"%s: width = %d, tversion = %d, outform = %d\n",
_nc_progname, width, tversion, outform);
}
static TERMTYPE2 *cur_type;
static int
dump_predicate(PredType type, PredIdx idx)
/* predicate function to use for ordinary decompilation */
{
switch (type) {
case BOOLEAN:
return (cur_type->Booleans[idx] == FALSE)
? FAIL : cur_type->Booleans[idx];
case NUMBER:
return (cur_type->Numbers[idx] == ABSENT_NUMERIC)
? FAIL : cur_type->Numbers[idx];
case STRING:
return (cur_type->Strings[idx] != ABSENT_STRING)
? (int) TRUE : FAIL;
}
return (FALSE); /* pacify compiler */
}
static void set_obsolete_termcaps(TERMTYPE2 *tp);
/* is this the index of a function key string? */
#define FNKEY(i) \
(((i) >= STR_IDX(key_f0) && \
(i) <= STR_IDX(key_f9)) || \
((i) >= STR_IDX(key_f11) && \
(i) <= STR_IDX(key_f63)))
/*
* If we configure with a different Caps file, the offsets into the arrays
* will change. So we use an address expression.
*/
#define BOOL_IDX(name) (PredType) (&(name) - &(CUR Booleans[0]))
#define NUM_IDX(name) (PredType) (&(name) - &(CUR Numbers[0]))
#define STR_IDX(name) (PredType) (&(name) - &(CUR Strings[0]))
static bool
version_filter(PredType type, PredIdx idx)
/* filter out capabilities we may want to suppress */
{
switch (tversion) {
case V_ALLCAPS: /* SVr4, XSI Curses */
return (TRUE);
case V_SVR1: /* System V Release 1, Ultrix */
switch (type) {
case BOOLEAN:
return ((idx <= BOOL_IDX(xon_xoff)) ? TRUE : FALSE);
case NUMBER:
return ((idx <= NUM_IDX(width_status_line)) ? TRUE : FALSE);
case STRING:
return ((idx <= STR_IDX(prtr_non)) ? TRUE : FALSE);
}
break;
case V_HPUX: /* Hewlett-Packard */
switch (type) {
case BOOLEAN:
return ((idx <= BOOL_IDX(xon_xoff)) ? TRUE : FALSE);
case NUMBER:
return ((idx <= NUM_IDX(label_width)) ? TRUE : FALSE);
case STRING:
if (idx <= STR_IDX(prtr_non))
return (TRUE);
else if (FNKEY(idx)) /* function keys */
return (TRUE);
else if (idx == STR_IDX(plab_norm)
|| idx == STR_IDX(label_on)
|| idx == STR_IDX(label_off))
return (TRUE);
else
return (FALSE);
}
break;
case V_AIX: /* AIX */
switch (type) {
case BOOLEAN:
return ((idx <= BOOL_IDX(xon_xoff)) ? TRUE : FALSE);
case NUMBER:
return ((idx <= NUM_IDX(width_status_line)) ? TRUE : FALSE);
case STRING:
if (idx <= STR_IDX(prtr_non))
return (TRUE);
else if (FNKEY(idx)) /* function keys */
return (TRUE);
else
return (FALSE);
}
break;
#define is_termcap(type) (OkIndex(idx, type##_from_termcap) && \
type##_from_termcap[idx])
case V_BSD: /* BSD */
switch (type) {
case BOOLEAN:
return is_termcap(bool);
case NUMBER:
return is_termcap(num);
case STRING:
return is_termcap(str);
}
break;
}
return (FALSE); /* pacify the compiler */
}
static void
trim_trailing(void)
{
while (outbuf.used > 0 && outbuf.text[outbuf.used - 1] == ' ')
outbuf.text[--outbuf.used] = '\0';
}
static void
force_wrap(void)
{
oldcol = column;
trim_trailing();
strcpy_DYN(&outbuf, trailer);
column = indent;
}
static int
op_length(const char *src, int offset)
{
int result = 0;
int ch;
if (offset > 0 && src[offset - 1] == '\\') {
result = 0;
} else {
result++; /* for '%' mark */
ch = src[offset + result];
if (TcOutput()) {
if (ch == '>') {
result += 3;
} else if (ch == '+') {
result += 2;
} else {
result++;
}
} else if (ch == '\'') {
result += 3;
} else if (ch == L_CURL[0]) {
int n = result;
while ((ch = src[offset + n]) != '\0') {
if (ch == R_CURL[0]) {
result = ++n;
break;
}
n++;
}
} else if (strchr("pPg", ch) != 0) {
result += 2;
} else {
result++; /* ordinary operator */
}
}
return result;
}
/*
* When wrapping too-long strings, avoid splitting a backslash sequence, or
* a terminfo '%' operator. That will leave things a little ragged, but avoids
* a stray backslash at the end of the line, as well as making the result a
* little more readable.
*/
static int
find_split(const char *src, int step, int size)
{
int result = size;
int n;
if (size > 0) {
/* check if that would split a backslash-sequence */
int mark = size;
for (n = size - 1; n > 0; --n) {
int ch = UChar(src[step + n]);
if (ch == '\\') {
if (n > 0 && src[step + n - 1] == ch)
--n;
mark = n;
break;
} else if (!isalnum(ch)) {
break;
}
}
if (mark < size) {
result = mark;
} else {
/* check if that would split a backslash-sequence */
for (n = size - 1; n > 0; --n) {
int ch = UChar(src[step + n]);
if (ch == '%') {
int need = op_length(src, step + n);
if ((n + need) > size) {
mark = n;
}
break;
}
}
if (mark < size) {
result = mark;
}
}
}
return result;
}
/*
* If we are going to wrap lines, we cannot leave literal spaces because that
* would be ambiguous if we split on that space.
*/
static char *
fill_spaces(const char *src)
{
const char *fill = "\\s";
size_t need = strlen(src);
size_t size = strlen(fill);
char *result = 0;
int pass;
int s, d;
for (pass = 0; pass < 2; ++pass) {
for (s = d = 0; src[s] != '\0'; ++s) {
if (src[s] == ' ') {
if (pass) {
_nc_STRCPY(&result[d], fill, need + 1 - d);
d += (int) size;
} else {
need += size;
}
} else {
if (pass) {
result[d++] = src[s];
} else {
++d;
}
}
}
if (pass) {
result[d] = '\0';
} else {
result = malloc(need + 1);
if (result == 0)
failed("fill_spaces");
}
}
return result;
}
typedef enum {
wOFF = 0
,w1ST = 1
,w2ND = 2
,wEND = 4
,wERR = 8
} WRAPMODE;
#define wrap_1ST(mode) ((mode)&w1ST)
#define wrap_END(mode) ((mode)&wEND)
#define wrap_ERR(mode) ((mode)&wERR)
static void
wrap_concat(const char *src, int need, unsigned mode)
{
int gaps = (int) strlen(separator);
int want = gaps + need;
did_wrap = (width <= 0);
if (wrap_1ST(mode)
&& column > indent
&& column + want > width) {
force_wrap();
}
if ((wrap_END(mode) && !wrap_ERR(mode)) &&
wrapped &&
(width >= 0) &&
(column + want) > width) {
int step = 0;
int used = width > WRAPPED ? width : WRAPPED;
int size;
int base = 0;
char *p, align[9];
const char *my_t = trailer;
char *fill = fill_spaces(src);
int last = (int) strlen(fill);
need = last;
if (TcOutput())
trailer = "\\\n\t ";
if (!TcOutput() && (p = strchr(fill, '=')) != 0) {
base = (int) (p + 1 - fill);
if (base > 8)
base = 8;
_nc_SPRINTF(align, _nc_SLIMIT(align) "%*s", base, " ");
} else if (column > 8) {
base = column - 8;
if (base > 8)
base = 8;
_nc_SPRINTF(align, _nc_SLIMIT(align) "%*s", base, " ");
} else {
align[base] = '\0';
}
/* "pretty" overrides wrapping if it already split the line */
if (!pretty || strchr(fill, '\n') == 0) {
int tag = 0;
if (TcOutput() && outbuf.used && !wrap_1ST(mode)) {
tag = 3;
}
while ((column + (need + gaps)) > used) {
size = used - tag;
if (step) {
strcpy_DYN(&outbuf, align);
size -= base;
}
if (size > (last - step)) {
size = (last - step);
}
size = find_split(fill, step, size);
strncpy_DYN(&outbuf, fill + step, (size_t) size);
step += size;
need -= size;
if (need > 0) {
force_wrap();
did_wrap = TRUE;
tag = 0;
}
}
}
if (need > 0) {
if (step)
strcpy_DYN(&outbuf, align);
strcpy_DYN(&outbuf, fill + step);
}
if (wrap_END(mode))
strcpy_DYN(&outbuf, separator);
trailer = my_t;
force_wrap();
free(fill);
} else {
strcpy_DYN(&outbuf, src);
if (wrap_END(mode))
strcpy_DYN(&outbuf, separator);
column += (int) strlen(src);
}
}
static void
wrap_concat1(const char *src)
{
int need = (int) strlen(src);
wrap_concat(src, need, w1ST | wEND);
}
static void
wrap_concat3(const char *name, const char *eqls, const char *value)
{
int nlen = (int) strlen(name);
int elen = (int) strlen(eqls);
int vlen = (int) strlen(value);
wrap_concat(name, nlen + elen + vlen, w1ST);
wrap_concat(eqls, elen + vlen, w2ND);
wrap_concat(value, vlen, wEND);
}
#define IGNORE_SEP_TRAIL(first,last,sep_trail) \
if ((size_t)(last - first) > sizeof(sep_trail)-1 \
&& !strncmp(first, sep_trail, sizeof(sep_trail)-1)) \
first += sizeof(sep_trail)-2
/* Returns the nominal length of the buffer assuming it is termcap format,
* i.e., the continuation sequence is treated as a single character ":".
*
* There are several implementations of termcap which read the text into a
* fixed-size buffer. Generally they strip the newlines from the text, but may
* not do it until after the buffer is read. Also, "tc=" resolution may be
* expanded in the same buffer. This function is useful for measuring the size
* of the best fixed-buffer implementation; the worst case may be much worse.
*/
#ifdef TEST_TERMCAP_LENGTH
static int
termcap_length(const char *src)
{
static const char pattern[] = ":\\\n\t:";
int len = 0;
const char *const t = src + strlen(src);
while (*src != '\0') {
IGNORE_SEP_TRAIL(src, t, pattern);
src++;
len++;
}
return len;
}
#else
#define termcap_length(src) strlen(src)
#endif
static void
indent_DYN(DYNBUF * buffer, int level)
{
int n;
for (n = 0; n < level; n++)
strncpy_DYN(buffer, "\t", (size_t) 1);
}
/*
* Check if the current line which was begun consists only of a tab and the
* given leading text.
*/
static bool
leading_DYN(DYNBUF * buffer, const char *leading)
{
bool result = FALSE;
size_t need = strlen(leading);
if (buffer->used > need) {
need = buffer->used - need;
if (!strcmp(buffer->text + need, leading)) {
result = TRUE;
while (--need != 0) {
if (buffer->text[need] == '\n') {
break;
}
if (buffer->text[need] != '\t') {
result = FALSE;
break;
}
}
}
}
return result;
}
bool
-has_params(const char *src)
+has_params(const char *src, bool formatting)
{
bool result = FALSE;
int len = (int) strlen(src);
int n;
bool ifthen = FALSE;
bool params = FALSE;
for (n = 0; n < len - 1; ++n) {
if (!strncmp(src + n, "%p", (size_t) 2)) {
params = TRUE;
} else if (!strncmp(src + n, "%;", (size_t) 2)) {
ifthen = TRUE;
result = params;
break;
}
}
if (!ifthen) {
- result = ((len > 50) && params);
+ if (formatting) {
+ result = ((len > 50) && params);
+ } else {
+ result = params;
+ }
}
return result;
}
static char *
fmt_complex(TERMTYPE2 *tterm, const char *capability, char *src, int level)
{
bool percent = FALSE;
- bool params = has_params(src);
+ bool params = has_params(src, TRUE);
while (*src != '\0') {
switch (*src) {
case '^':
percent = FALSE;
strncpy_DYN(&tmpbuf, src++, (size_t) 1);
break;
case '\\':
percent = FALSE;
strncpy_DYN(&tmpbuf, src++, (size_t) 1);
break;
case '%':
percent = TRUE;
break;
case '?': /* "if" */
case 't': /* "then" */
case 'e': /* "else" */
if (percent) {
percent = FALSE;
tmpbuf.text[tmpbuf.used - 1] = '\n';
/* treat a "%e" as else-if, on the same level */
if (*src == 'e') {
indent_DYN(&tmpbuf, level);
strncpy_DYN(&tmpbuf, "%", (size_t) 1);
strncpy_DYN(&tmpbuf, src, (size_t) 1);
src++;
- params = has_params(src);
+ params = has_params(src, TRUE);
if (!params && *src != '\0' && *src != '%') {
strncpy_DYN(&tmpbuf, "\n", (size_t) 1);
indent_DYN(&tmpbuf, level + 1);
}
} else {
indent_DYN(&tmpbuf, level + 1);
strncpy_DYN(&tmpbuf, "%", (size_t) 1);
strncpy_DYN(&tmpbuf, src, (size_t) 1);
if (*src++ == '?') {
src = fmt_complex(tterm, capability, src, level + 1);
if (*src != '\0' && *src != '%') {
strncpy_DYN(&tmpbuf, "\n", (size_t) 1);
indent_DYN(&tmpbuf, level + 1);
}
} else if (level == 1) {
if (checking)
_nc_warning("%s: %%%c without %%? in %s",
_nc_first_name(tterm->term_names),
*src, capability);
}
}
continue;
}
break;
case ';': /* "endif" */
if (percent) {
percent = FALSE;
if (level > 1) {
tmpbuf.text[tmpbuf.used - 1] = '\n';
indent_DYN(&tmpbuf, level);
strncpy_DYN(&tmpbuf, "%", (size_t) 1);
strncpy_DYN(&tmpbuf, src++, (size_t) 1);
if (src[0] == '%'
&& src[1] != '\0'
&& (strchr("?e;", src[1])) == 0) {
tmpbuf.text[tmpbuf.used++] = '\n';
indent_DYN(&tmpbuf, level);
}
return src;
}
if (checking)
_nc_warning("%s: %%; without %%? in %s",
_nc_first_name(tterm->term_names),
capability);
}
break;
case 'p':
if (percent && params && !leading_DYN(&tmpbuf, "%")) {
tmpbuf.text[tmpbuf.used - 1] = '\n';
indent_DYN(&tmpbuf, level + 1);
strncpy_DYN(&tmpbuf, "%", (size_t) 1);
}
params = FALSE;
percent = FALSE;
break;
case ' ':
strncpy_DYN(&tmpbuf, "\\s", (size_t) 2);
++src;
continue;
default:
percent = FALSE;
break;
}
strncpy_DYN(&tmpbuf, src++, (size_t) 1);
}
return src;
}
/*
* Make "large" numbers a little easier to read by showing them in hexadecimal
* if they are "close" to a power of two.
*/
static const char *
number_format(int value)
{
const char *result = "%d";
if ((outform != F_TERMCAP) && (value > 255)) {
unsigned long lv = (unsigned long) value;
unsigned long mm;
int bits = sizeof(unsigned long) * 8;
int nn;
for (nn = 8; nn < bits; ++nn) {
mm = 1UL << nn;
if ((mm - 16) <= lv && (mm + 16) > lv) {
result = "%#x";
break;
}
}
}
return result;
}
#define SAME_CAP(n,cap) (&tterm->Strings[n] == &cap)
#define EXTRA_CAP 20
int
fmt_entry(TERMTYPE2 *tterm,
PredFunc pred,
int content_only,
int suppress_untranslatable,
int infodump,
int numbers)
{
PredIdx i, j;
char buffer[MAX_TERMINFO_LENGTH + EXTRA_CAP];
char *capability;
NCURSES_CONST char *name;
int predval, len;
PredIdx num_bools = 0;
PredIdx num_values = 0;
PredIdx num_strings = 0;
bool outcount = 0;
#define WRAP_CONCAT1(s) wrap_concat1(s); outcount = TRUE
#define WRAP_CONCAT WRAP_CONCAT1(buffer)
len = 12; /* terminfo file-header */
if (pred == 0) {
cur_type = tterm;
pred = dump_predicate;
}
strcpy_DYN(&outbuf, 0);
if (content_only) {
column = indent; /* FIXME: workaround to prevent empty lines */
} else {
strcpy_DYN(&outbuf, tterm->term_names);
/*
* Colon is legal in terminfo descriptions, but not in termcap.
*/
if (!infodump) {
char *p = outbuf.text;
while (*p) {
if (*p == ':') {
*p = '=';
}
++p;
}
}
strcpy_DYN(&outbuf, separator);
column = (int) outbuf.used;
if (height > 1)
force_wrap();
}
for_each_boolean(j, tterm) {
i = BoolIndirect(j);
name = ExtBoolname(tterm, (int) i, bool_names);
assert(strlen(name) < sizeof(buffer) - EXTRA_CAP);
if (!version_filter(BOOLEAN, i))
continue;
else if (isObsolete(outform, name))
continue;
predval = pred(BOOLEAN, i);
if (predval != FAIL) {
_nc_STRCPY(buffer, name, sizeof(buffer));
if (predval <= 0)
_nc_STRCAT(buffer, "@", sizeof(buffer));
else if (i + 1 > num_bools)
num_bools = i + 1;
WRAP_CONCAT;
}
}
if (column != indent && height > 1)
force_wrap();
for_each_number(j, tterm) {
i = NumIndirect(j);
name = ExtNumname(tterm, (int) i, num_names);
assert(strlen(name) < sizeof(buffer) - EXTRA_CAP);
if (!version_filter(NUMBER, i))
continue;
else if (isObsolete(outform, name))
continue;
predval = pred(NUMBER, i);
if (predval != FAIL) {
if (tterm->Numbers[i] < 0) {
_nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer))
"%s@", name);
} else {
size_t nn;
_nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer))
"%s#", name);
nn = strlen(buffer);
_nc_SPRINTF(buffer + nn, _nc_SLIMIT(sizeof(buffer) - nn)
number_format(tterm->Numbers[i]),
tterm->Numbers[i]);
if (i + 1 > num_values)
num_values = i + 1;
}
WRAP_CONCAT;
}
}
if (column != indent && height > 1)
force_wrap();
len += (int) (num_bools
+ num_values * 2
+ strlen(tterm->term_names) + 1);
if (len & 1)
len++;
#undef CUR
#define CUR tterm->
if (outform == F_TERMCAP) {
if (VALID_STRING(termcap_reset)) {
if (VALID_STRING(init_3string)
&& !strcmp(init_3string, termcap_reset))
DISCARD(init_3string);
if (VALID_STRING(reset_2string)
&& !strcmp(reset_2string, termcap_reset))
DISCARD(reset_2string);
}
}
for_each_string(j, tterm) {
i = StrIndirect(j);
name = ExtStrname(tterm, (int) i, str_names);
assert(strlen(name) < sizeof(buffer) - EXTRA_CAP);
capability = tterm->Strings[i];
if (!version_filter(STRING, i))
continue;
else if (isObsolete(outform, name))
continue;
#if NCURSES_XNAMES
/*
* Extended names can be longer than 2 characters, but termcap programs
* cannot read those (filter them out).
*/
if (outform == F_TERMCAP && (strlen(name) > 2))
continue;
#endif
if (outform == F_TERMCAP) {
/*
* Some older versions of vi want rmir/smir to be defined
* for ich/ich1 to work. If they're not defined, force
* them to be output as defined and empty.
*/
if (PRESENT(insert_character) || PRESENT(parm_ich)) {
if (SAME_CAP(i, enter_insert_mode)
&& enter_insert_mode == ABSENT_STRING) {
_nc_STRCPY(buffer, "im=", sizeof(buffer));
WRAP_CONCAT;
continue;
}
if (SAME_CAP(i, exit_insert_mode)
&& exit_insert_mode == ABSENT_STRING) {
_nc_STRCPY(buffer, "ei=", sizeof(buffer));
WRAP_CONCAT;
continue;
}
}
/*
* termcap applications such as screen will be confused if sgr0
* is translated to a string containing rmacs. Filter that out.
*/
if (PRESENT(exit_attribute_mode)) {
if (SAME_CAP(i, exit_attribute_mode)) {
char *trimmed_sgr0;
char *my_sgr = set_attributes;
set_attributes = save_sgr;
trimmed_sgr0 = _nc_trim_sgr0(tterm);
if (strcmp(capability, trimmed_sgr0)) {
capability = trimmed_sgr0;
} else {
if (trimmed_sgr0 != exit_attribute_mode)
free(trimmed_sgr0);
}
set_attributes = my_sgr;
}
}
}
predval = pred(STRING, i);
buffer[0] = '\0';
if (predval != FAIL) {
if (VALID_STRING(capability)
&& i + 1 > num_strings)
num_strings = i + 1;
if (!VALID_STRING(capability)) {
_nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer))
"%s@", name);
WRAP_CONCAT;
} else if (TcOutput()) {
char *srccap = _nc_tic_expand(capability, TRUE, numbers);
int params = ((i < (int) SIZEOF(parametrized))
? parametrized[i]
: ((*srccap == 'k')
? 0
- : has_params(srccap)));
+ : has_params(srccap, FALSE)));
char *cv = _nc_infotocap(name, srccap, params);
if (cv == 0) {
if (outform == F_TCONVERR) {
_nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer))
"%s=!!! %s WILL NOT CONVERT !!!",
name, srccap);
WRAP_CONCAT;
} else if (suppress_untranslatable) {
continue;
} else {
char *s = srccap, *d = buffer;
int need = 3 + (int) strlen(name);
while ((*d = *s++) != 0) {
- if ((d - buffer + 1) >= (int) sizeof(buffer)) {
+ if ((d - buffer + 2) >= (int) sizeof(buffer)) {
fprintf(stderr,
"%s: value for %s is too long\n",
_nc_progname,
name);
*d = '\0';
break;
}
if (*d == ':') {
*d++ = '\\';
*d = ':';
} else if (*d == '\\') {
if ((*++d = *s++) == '\0')
break;
}
d++;
*d = '\0';
}
need += (int) (d - buffer);
wrap_concat("..", need, w1ST | wERR);
need -= 2;
wrap_concat(name, need, wOFF | wERR);
need -= (int) strlen(name);
wrap_concat("=", need, w2ND | wERR);
need -= 1;
wrap_concat(buffer, need, wEND | wERR);
outcount = TRUE;
}
} else {
wrap_concat3(name, "=", cv);
}
len += (int) strlen(capability) + 1;
} else {
char *src = _nc_tic_expand(capability,
outform == F_TERMINFO, numbers);
strcpy_DYN(&tmpbuf, 0);
strcpy_DYN(&tmpbuf, name);
strcpy_DYN(&tmpbuf, "=");
if (pretty
&& (outform == F_TERMINFO
|| outform == F_VARIABLE)) {
fmt_complex(tterm, name, src, 1);
} else {
strcpy_DYN(&tmpbuf, src);
}
len += (int) strlen(capability) + 1;
WRAP_CONCAT1(tmpbuf.text);
}
}
/* e.g., trimmed_sgr0 */
if (VALID_STRING(capability) &&
capability != tterm->Strings[i])
free(capability);
}
len += (int) (num_strings * 2);
/*
* This piece of code should be an effective inverse of the functions
* postprocess_terminfo() and postprocess_terminfo() in parse_entry.c.
* Much more work should be done on this to support dumping termcaps.
*/
if (tversion == V_HPUX) {
if (VALID_STRING(memory_lock)) {
_nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer))
"meml=%s", memory_lock);
WRAP_CONCAT;
}
if (VALID_STRING(memory_unlock)) {
_nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer))
"memu=%s", memory_unlock);
WRAP_CONCAT;
}
} else if (tversion == V_AIX) {
if (VALID_STRING(acs_chars)) {
bool box_ok = TRUE;
const char *acstrans = "lqkxjmwuvtn";
const char *cp;
char *tp, *sp, boxchars[11];
tp = boxchars;
for (cp = acstrans; *cp; cp++) {
sp = (strchr) (acs_chars, *cp);
if (sp)
*tp++ = sp[1];
else {
box_ok = FALSE;
break;
}
}
tp[0] = '\0';
if (box_ok) {
char *tmp = _nc_tic_expand(boxchars,
(outform == F_TERMINFO),
numbers);
_nc_STRCPY(buffer, "box1=", sizeof(buffer));
while (*tmp != '\0') {
size_t have = strlen(buffer);
size_t next = strlen(tmp);
size_t want = have + next + 1;
size_t last = next;
char save = '\0';
/*
* If the expanded string is too long for the buffer,
* chop it off and save the location where we chopped it.
*/
if (want >= sizeof(buffer)) {
save = tmp[last];
tmp[last] = '\0';
}
_nc_STRCAT(buffer, tmp, sizeof(buffer));
/*
* If we chopped the buffer, replace the missing piece and
* shift everything to append the remainder.
*/
if (save != '\0') {
next = 0;
tmp[last] = save;
while ((tmp[next] = tmp[last + next]) != '\0') {
++next;
}
} else {
break;
}
}
WRAP_CONCAT;
}
}
}
/*
* kludge: trim off trailer to avoid an extra blank line
* in infocmp -u output when there are no string differences
*/
if (outcount) {
bool trimmed = FALSE;
j = (PredIdx) outbuf.used;
if (wrapped && did_wrap) {
/* EMPTY */ ;
} else if (j >= 2
&& outbuf.text[j - 1] == '\t'
&& outbuf.text[j - 2] == '\n') {
outbuf.used -= 2;
trimmed = TRUE;
} else if (j >= 4
&& outbuf.text[j - 1] == ':'
&& outbuf.text[j - 2] == '\t'
&& outbuf.text[j - 3] == '\n'
&& outbuf.text[j - 4] == '\\') {
outbuf.used -= 4;
trimmed = TRUE;
}
if (trimmed) {
outbuf.text[outbuf.used] = '\0';
column = oldcol;
strcpy_DYN(&outbuf, " ");
}
}
#if 0
fprintf(stderr, "num_bools = %d\n", num_bools);
fprintf(stderr, "num_values = %d\n", num_values);
fprintf(stderr, "num_strings = %d\n", num_strings);
fprintf(stderr, "term_names=%s, len=%d, strlen(outbuf)=%d, outbuf=%s\n",
tterm->term_names, len, outbuf.used, outbuf.text);
#endif
/*
* Here's where we use infodump to trigger a more stringent length check
* for termcap-translation purposes.
* Return the length of the raw entry, without tc= expansions,
* It gives an idea of which entries are deadly to even *scan past*,
* as opposed to *use*.
*/
return (infodump ? len : (int) termcap_length(outbuf.text));
}
static bool
kill_string(TERMTYPE2 *tterm, char *cap)
{
unsigned n;
for (n = 0; n < NUM_STRINGS(tterm); ++n) {
if (cap == tterm->Strings[n]) {
tterm->Strings[n] = ABSENT_STRING;
return TRUE;
}
}
return FALSE;
}
static char *
find_string(TERMTYPE2 *tterm, char *name)
{
PredIdx n;
for (n = 0; n < NUM_STRINGS(tterm); ++n) {
if (version_filter(STRING, n)
&& !strcmp(name, strnames[n])) {
char *cap = tterm->Strings[n];
if (VALID_STRING(cap)) {
return cap;
}
break;
}
}
return ABSENT_STRING;
}
/*
* This is used to remove function-key labels from a termcap entry to
* make it smaller.
*/
static int
kill_labels(TERMTYPE2 *tterm, int target)
{
int n;
int result = 0;
char *cap;
- char name[10];
+ char name[20];
for (n = 0; n <= 10; ++n) {
_nc_SPRINTF(name, _nc_SLIMIT(sizeof(name)) "lf%d", n);
cap = find_string(tterm, name);
if (VALID_STRING(cap)
&& kill_string(tterm, cap)) {
target -= (int) (strlen(cap) + 5);
++result;
if (target < 0)
break;
}
}
return result;
}
/*
* This is used to remove function-key definitions from a termcap entry to
* make it smaller.
*/
static int
kill_fkeys(TERMTYPE2 *tterm, int target)
{
int n;
int result = 0;
char *cap;
- char name[10];
+ char name[20];
for (n = 60; n >= 0; --n) {
_nc_SPRINTF(name, _nc_SLIMIT(sizeof(name)) "kf%d", n);
cap = find_string(tterm, name);
if (VALID_STRING(cap)
&& kill_string(tterm, cap)) {
target -= (int) (strlen(cap) + 5);
++result;
if (target < 0)
break;
}
}
return result;
}
/*
* Check if the given acsc string is a 1-1 mapping, i.e., just-like-vt100.
* Also, since this is for termcap, we only care about the line-drawing map.
*/
#define isLine(c) (strchr("lmkjtuvwqxn", c) != 0)
static bool
one_one_mapping(const char *mapping)
{
bool result = TRUE;
if (VALID_STRING(mapping)) {
int n = 0;
while (mapping[n] != '\0' && mapping[n + 1] != '\0') {
if (isLine(mapping[n]) &&
mapping[n] != mapping[n + 1]) {
result = FALSE;
break;
}
n += 2;
}
}
return result;
}
#define FMT_ENTRY() \
fmt_entry(tterm, pred, \
0, \
suppress_untranslatable, \
infodump, numbers)
#define SHOW_WHY PRINTF
static bool
purged_acs(TERMTYPE2 *tterm)
{
bool result = FALSE;
if (VALID_STRING(acs_chars)) {
if (!one_one_mapping(acs_chars)) {
enter_alt_charset_mode = ABSENT_STRING;
exit_alt_charset_mode = ABSENT_STRING;
SHOW_WHY("# (rmacs/smacs removed for consistency)\n");
}
result = TRUE;
}
return result;
}
static void
encode_b64(char *target, char *source, unsigned state, int *saved)
{
/* RFC-4648 */
static const char data[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789" "-_";
int ch = UChar(source[state]);
switch (state % 3) {
case 0:
*target++ = data[(ch >> 2) & 077];
*saved = (ch << 4);
break;
case 1:
*target++ = data[((ch >> 4) | *saved) & 077];
*saved = (ch << 2);
break;
case 2:
*target++ = data[((ch >> 6) | *saved) & 077];
*target++ = data[ch & 077];
*saved = 0;
break;
}
*target = '\0';
}
/*
* Dump a single entry.
*/
void
dump_entry(TERMTYPE2 *tterm,
int suppress_untranslatable,
int limited,
int numbers,
PredFunc pred)
{
TERMTYPE2 save_tterm;
int len, critlen;
const char *legend;
bool infodump;
if (quickdump) {
char bigbuf[65536];
unsigned n;
unsigned offset = 0;
separator = "";
trailer = "\n";
indent = 0;
if (_nc_write_object(tterm, bigbuf, &offset, sizeof(bigbuf)) == OK) {
char numbuf[80];
if (quickdump & 1) {
if (outbuf.used)
wrap_concat1("\n");
wrap_concat1("hex:");
for (n = 0; n < offset; ++n) {
_nc_SPRINTF(numbuf, _nc_SLIMIT(sizeof(numbuf))
"%02X", UChar(bigbuf[n]));
wrap_concat1(numbuf);
}
}
if (quickdump & 2) {
static char padding[] =
{0, 0};
int value = 0;
if (outbuf.used)
wrap_concat1("\n");
wrap_concat1("b64:");
for (n = 0; n < offset; ++n) {
encode_b64(numbuf, bigbuf, n, &value);
wrap_concat1(numbuf);
}
switch (n % 3) {
case 0:
break;
case 1:
encode_b64(numbuf, padding, 1, &value);
wrap_concat1(numbuf);
wrap_concat1("==");
break;
case 2:
encode_b64(numbuf, padding, 1, &value);
wrap_concat1(numbuf);
wrap_concat1("=");
break;
}
}
}
return;
}
if (TcOutput()) {
critlen = MAX_TERMCAP_LENGTH;
legend = "older termcap";
infodump = FALSE;
set_obsolete_termcaps(tterm);
} else {
critlen = MAX_TERMINFO_LENGTH;
legend = "terminfo";
infodump = TRUE;
}
save_sgr = set_attributes;
if ((FMT_ENTRY() > critlen)
&& limited) {
save_tterm = *tterm;
if (!suppress_untranslatable) {
SHOW_WHY("# (untranslatable capabilities removed to fit entry within %d bytes)\n",
critlen);
suppress_untranslatable = TRUE;
}
if (FMT_ENTRY() > critlen) {
/*
* We pick on sgr because it's a nice long string capability that
* is really just an optimization hack. Another good candidate is
* acsc since it is both long and unused by BSD termcap.
*/
bool changed = FALSE;
#if NCURSES_XNAMES
/*
* Extended names are most likely function-key definitions. Drop
* those first.
*/
unsigned n;
for (n = STRCOUNT; n < NUM_STRINGS(tterm); n++) {
const char *name = ExtStrname(tterm, (int) n, strnames);
if (VALID_STRING(tterm->Strings[n])) {
set_attributes = ABSENT_STRING;
/* we remove long names anyway - only report the short */
if (strlen(name) <= 2) {
SHOW_WHY("# (%s removed to fit entry within %d bytes)\n",
name,
critlen);
}
changed = TRUE;
if (FMT_ENTRY() <= critlen)
break;
}
}
#endif
if (VALID_STRING(set_attributes)) {
set_attributes = ABSENT_STRING;
SHOW_WHY("# (sgr removed to fit entry within %d bytes)\n",
critlen);
changed = TRUE;
}
if (!changed || (FMT_ENTRY() > critlen)) {
if (purged_acs(tterm)) {
acs_chars = ABSENT_STRING;
SHOW_WHY("# (acsc removed to fit entry within %d bytes)\n",
critlen);
changed = TRUE;
}
}
if (!changed || (FMT_ENTRY() > critlen)) {
int oldversion = tversion;
tversion = V_BSD;
SHOW_WHY("# (terminfo-only capabilities suppressed to fit entry within %d bytes)\n",
critlen);
len = FMT_ENTRY();
if (len > critlen
&& kill_labels(tterm, len - critlen)) {
SHOW_WHY("# (some labels capabilities suppressed to fit entry within %d bytes)\n",
critlen);
len = FMT_ENTRY();
}
if (len > critlen
&& kill_fkeys(tterm, len - critlen)) {
SHOW_WHY("# (some function-key capabilities suppressed to fit entry within %d bytes)\n",
critlen);
len = FMT_ENTRY();
}
if (len > critlen) {
(void) fprintf(stderr,
"%s: %s entry is %d bytes long\n",
_nc_progname,
_nc_first_name(tterm->term_names),
len);
SHOW_WHY("# WARNING: this entry, %d bytes long, may core-dump %s libraries!\n",
len, legend);
}
tversion = oldversion;
}
set_attributes = save_sgr;
*tterm = save_tterm;
}
} else if (!version_filter(STRING, STR_IDX(acs_chars))) {
save_tterm = *tterm;
if (purged_acs(tterm)) {
(void) FMT_ENTRY();
}
*tterm = save_tterm;
}
}
void
dump_uses(const char *name, bool infodump)
/* dump "use=" clauses in the appropriate format */
{
char buffer[MAX_TERMINFO_LENGTH];
if (TcOutput())
trim_trailing();
_nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer))
"%s%s", infodump ? "use=" : "tc=", name);
wrap_concat1(buffer);
}
int
show_entry(void)
{
/*
* Trim any remaining whitespace.
*/
if (outbuf.used != 0) {
bool infodump = !TcOutput();
char delim = (char) (infodump ? ',' : ':');
int j;
for (j = (int) outbuf.used - 1; j > 0; --j) {
char ch = outbuf.text[j];
if (ch == '\n') {
;
} else if (isspace(UChar(ch))) {
outbuf.used = (size_t) j;
} else if (!infodump && ch == '\\') {
outbuf.used = (size_t) j;
} else if (ch == delim && (j == 0 || outbuf.text[j - 1] != '\\')) {
outbuf.used = (size_t) (j + 1);
} else {
break;
}
}
outbuf.text[outbuf.used] = '\0';
}
if (outbuf.text != 0) {
(void) fputs(outbuf.text, stdout);
putchar('\n');
}
return (int) outbuf.used;
}
void
compare_entry(PredHook hook,
TERMTYPE2 *tp GCC_UNUSED,
bool quiet)
/* compare two entries */
{
PredIdx i, j;
NCURSES_CONST char *name;
if (!quiet)
fputs(" comparing booleans.\n", stdout);
for_each_boolean(j, tp) {
i = BoolIndirect(j);
name = ExtBoolname(tp, (int) i, bool_names);
if (isObsolete(outform, name))
continue;
(*hook) (CMP_BOOLEAN, i, name);
}
if (!quiet)
fputs(" comparing numbers.\n", stdout);
for_each_number(j, tp) {
i = NumIndirect(j);
name = ExtNumname(tp, (int) i, num_names);
if (isObsolete(outform, name))
continue;
(*hook) (CMP_NUMBER, i, name);
}
if (!quiet)
fputs(" comparing strings.\n", stdout);
for_each_string(j, tp) {
i = StrIndirect(j);
name = ExtStrname(tp, (int) i, str_names);
if (isObsolete(outform, name))
continue;
(*hook) (CMP_STRING, i, name);
}
/* (void) fputs(" comparing use entries.\n", stdout); */
(*hook) (CMP_USE, 0, "use");
}
#define NOTSET(s) ((s) == 0)
/*
* This bit of legerdemain turns all the terminfo variable names into
* references to locations in the arrays Booleans, Numbers, and Strings ---
* precisely what's needed.
*/
#undef CUR
#define CUR tp->
static void
set_obsolete_termcaps(TERMTYPE2 *tp)
{
#include "capdefaults.c"
}
/*
* Convert an alternate-character-set string to canonical form: sorted and
* unique.
*/
void
repair_acsc(TERMTYPE2 *tp)
{
if (VALID_STRING(acs_chars)) {
size_t n, m;
char mapped[256];
char extra = 0;
unsigned source;
unsigned target;
bool fix_needed = FALSE;
for (n = 0, source = 0; acs_chars[n] != 0; n++) {
target = UChar(acs_chars[n]);
if (source >= target) {
fix_needed = TRUE;
break;
}
source = target;
if (acs_chars[n + 1])
n++;
}
if (fix_needed) {
memset(mapped, 0, sizeof(mapped));
for (n = 0; acs_chars[n] != 0; n++) {
source = UChar(acs_chars[n]);
if ((target = (unsigned char) acs_chars[n + 1]) != 0) {
mapped[source] = (char) target;
n++;
} else {
extra = (char) source;
}
}
for (n = m = 0; n < sizeof(mapped); n++) {
if (mapped[n]) {
acs_chars[m++] = (char) n;
acs_chars[m++] = mapped[n];
}
}
if (extra)
acs_chars[m++] = extra; /* garbage in, garbage out */
acs_chars[m] = 0;
}
}
}
diff --git a/contrib/ncurses/progs/dump_entry.h b/contrib/ncurses/progs/dump_entry.h
index 984fee709551..98551914cd63 100644
--- a/contrib/ncurses/progs/dump_entry.h
+++ b/contrib/ncurses/progs/dump_entry.h
@@ -1,91 +1,91 @@
/****************************************************************************
* Copyright 2018,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
/*
- * $Id: dump_entry.h,v 1.42 2020/02/02 23:34:34 tom Exp $
+ * $Id: dump_entry.h,v 1.43 2020/11/14 18:16:57 tom Exp $
*
* Dump control definitions and variables
*/
#ifndef DUMP_ENTRY_H
#define DUMP_ENTRY_H 1
#define NCURSES_OPAQUE 0
#define NCURSES_INTERNALS 1
#include <curses.h>
#include <term.h>
/* capability output formats */
#define F_TERMINFO 0 /* use terminfo names */
#define F_VARIABLE 1 /* use C variable names */
#define F_TERMCAP 2 /* termcap names with capability conversion */
#define F_TCONVERR 3 /* as T_TERMCAP, no skip of untranslatables */
#define F_LITERAL 4 /* like F_TERMINFO, but no smart defaults */
/* capability sort modes */
#define S_DEFAULT 0 /* sort by terminfo name (implicit) */
#define S_NOSORT 1 /* don't sort */
#define S_TERMINFO 2 /* sort by terminfo names (explicit) */
#define S_VARIABLE 3 /* sort by C variable names */
#define S_TERMCAP 4 /* sort by termcap names */
/* capability types for the comparison hook */
#define CMP_BOOLEAN 0 /* comparison on booleans */
#define CMP_NUMBER 1 /* comparison on numerics */
#define CMP_STRING 2 /* comparison on strings */
#define CMP_USE 3 /* comparison on use capabilities */
typedef unsigned PredType;
typedef unsigned PredIdx;
typedef int (*PredFunc) (PredType, PredIdx);
typedef void (*PredHook) (PredType, PredIdx, const char *);
extern NCURSES_CONST char *nametrans(const char *);
-extern bool has_params(const char *src);
+extern bool has_params(const char *, bool);
extern int fmt_entry(TERMTYPE2 *, PredFunc, int, int, int, int);
extern int show_entry(void);
extern void compare_entry(PredHook, TERMTYPE2 *, bool);
extern void dump_entry(TERMTYPE2 *, int, int, int, PredFunc);
extern void dump_init(const char *, int, int, bool, int, int, unsigned, bool,
bool, int);
extern void dump_uses(const char *, bool);
extern void repair_acsc(TERMTYPE2 *tp);
#define L_CURL "{"
#define R_CURL "}"
#define FAIL -1
#endif /* DUMP_ENTRY_H */
diff --git a/contrib/ncurses/progs/infocmp.c b/contrib/ncurses/progs/infocmp.c
index f42ff3416ece..dbdbdc2dfe35 100644
--- a/contrib/ncurses/progs/infocmp.c
+++ b/contrib/ncurses/progs/infocmp.c
@@ -1,1955 +1,1956 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
/*
* infocmp.c -- decompile an entry, or compare two entries
* written by Eric S. Raymond
* and Thomas E Dickey
*/
#include <progs.priv.h>
#include <dump_entry.h>
-MODULE_ID("$Id: infocmp.c,v 1.144 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: infocmp.c,v 1.145 2020/07/07 20:28:47 tom Exp $")
#define MAX_STRING 1024 /* maximum formatted string */
const char *_nc_progname = "infocmp";
typedef char path[PATH_MAX];
/***************************************************************************
*
* The following control variables, together with the contents of the
* terminfo entries, completely determine the actions of the program.
*
***************************************************************************/
static ENTRY *entries; /* terminfo entries */
static int termcount; /* count of terminal entries */
static bool limited = TRUE; /* "-r" option is not set */
static bool quiet = FALSE;
static bool literal = FALSE;
static const char *bool_sep = ":";
static const char *s_absent = "NULL";
static const char *s_cancel = "NULL";
static const char *tversion; /* terminfo version selected */
static unsigned itrace; /* trace flag for debugging */
static int mwidth = 60;
static int mheight = 65535;
static int numbers = 0; /* format "%'char'" to/from "%{number}" */
static int outform = F_TERMINFO; /* output format */
static int sortmode; /* sort_mode */
/* main comparison mode */
static int compare;
#define C_DEFAULT 0 /* don't force comparison mode */
#define C_DIFFERENCE 1 /* list differences between two terminals */
#define C_COMMON 2 /* list common capabilities */
#define C_NAND 3 /* list capabilities in neither terminal */
#define C_USEALL 4 /* generate relative use-form entry */
static bool ignorepads; /* ignore pad prefixes when diffing */
#if NO_LEAKS
typedef struct {
ENTRY *head;
ENTRY *tail;
} ENTERED;
static ENTERED *entered;
#undef ExitProgram
static void ExitProgram(int code) GCC_NORETURN;
/* prototype is to get gcc to accept the noreturn attribute */
static void
ExitProgram(int code)
{
int n;
for (n = 0; n < termcount; ++n) {
ENTRY *new_head = _nc_head;
ENTRY *new_tail = _nc_tail;
_nc_head = entered[n].head;
_nc_tail = entered[n].tail;
_nc_free_entries(entered[n].head);
_nc_head = new_head;
_nc_tail = new_tail;
}
_nc_leaks_dump_entry();
free(entries);
free(entered);
_nc_free_tic(code);
}
#endif
static void
failed(const char *s)
{
perror(s);
ExitProgram(EXIT_FAILURE);
}
static char *
canonical_name(char *ptr, char *buf)
/* extract the terminal type's primary name */
{
char *bp;
_nc_STRCPY(buf, ptr, NAMESIZE);
if ((bp = strchr(buf, '|')) != 0)
*bp = '\0';
return (buf);
}
static bool
no_boolean(int value)
{
bool result = (value == ABSENT_BOOLEAN);
if (!strcmp(s_absent, s_cancel))
result = !VALID_BOOLEAN(value);
return result;
}
static bool
no_numeric(int value)
{
bool result = (value == ABSENT_NUMERIC);
if (!strcmp(s_absent, s_cancel))
result = !VALID_NUMERIC(value);
return result;
}
static bool
no_string(char *value)
{
bool result = (value == ABSENT_STRING);
if (!strcmp(s_absent, s_cancel))
result = !VALID_STRING(value);
return result;
}
/***************************************************************************
*
* Predicates for dump function
*
***************************************************************************/
static int
capcmp(PredIdx idx, const char *s, const char *t)
/* capability comparison function */
{
if (!VALID_STRING(s) && !VALID_STRING(t))
return (s != t);
else if (!VALID_STRING(s) || !VALID_STRING(t))
return (1);
if ((idx == acs_chars_index) || !ignorepads)
return (strcmp(s, t));
else
return (_nc_capcmp(s, t));
}
static int
use_predicate(unsigned type, PredIdx idx)
/* predicate function to use for use decompilation */
{
ENTRY *ep;
switch (type) {
case BOOLEAN:
{
int is_set = FALSE;
/*
* This assumes that multiple use entries are supposed
* to contribute the logical or of their boolean capabilities.
* This is true if we take the semantics of multiple uses to
* be 'each capability gets the first non-default value found
* in the sequence of use entries'.
*
* Note that cancelled or absent booleans are stored as FALSE,
* unlike numbers and strings, whose cancelled/absent state is
* recorded in the terminfo database.
*/
for (ep = &entries[1]; ep < entries + termcount; ep++)
if (ep->tterm.Booleans[idx] == TRUE) {
is_set = entries[0].tterm.Booleans[idx];
break;
}
if (is_set != entries[0].tterm.Booleans[idx])
return (!is_set);
else
return (FAIL);
}
case NUMBER:
{
int value = ABSENT_NUMERIC;
/*
* We take the semantics of multiple uses to be 'each
* capability gets the first non-default value found
* in the sequence of use entries'.
*/
for (ep = &entries[1]; ep < entries + termcount; ep++)
if (VALID_NUMERIC(ep->tterm.Numbers[idx])) {
value = ep->tterm.Numbers[idx];
break;
}
if (value != entries[0].tterm.Numbers[idx])
return (value != ABSENT_NUMERIC);
else
return (FAIL);
}
case STRING:
{
char *termstr, *usestr = ABSENT_STRING;
termstr = entries[0].tterm.Strings[idx];
/*
* We take the semantics of multiple uses to be 'each
* capability gets the first non-default value found
* in the sequence of use entries'.
*/
for (ep = &entries[1]; ep < entries + termcount; ep++)
if (ep->tterm.Strings[idx]) {
usestr = ep->tterm.Strings[idx];
break;
}
if (usestr == ABSENT_STRING && termstr == ABSENT_STRING)
return (FAIL);
else if (!usestr || !termstr || capcmp(idx, usestr, termstr))
return (TRUE);
else
return (FAIL);
}
}
return (FALSE); /* pacify compiler */
}
static bool
useeq(ENTRY * e1, ENTRY * e2)
/* are the use references in two entries equivalent? */
{
unsigned i, j;
if (e1->nuses != e2->nuses)
return (FALSE);
/* Ugh...this is quadratic again */
for (i = 0; i < e1->nuses; i++) {
bool foundmatch = FALSE;
/* search second entry for given use reference */
for (j = 0; j < e2->nuses; j++)
if (!strcmp(e1->uses[i].name, e2->uses[j].name)) {
foundmatch = TRUE;
break;
}
if (!foundmatch)
return (FALSE);
}
return (TRUE);
}
static bool
entryeq(TERMTYPE2 *t1, TERMTYPE2 *t2)
/* are two entries equivalent? */
{
unsigned i;
for (i = 0; i < NUM_BOOLEANS(t1); i++)
if (t1->Booleans[i] != t2->Booleans[i])
return (FALSE);
for (i = 0; i < NUM_NUMBERS(t1); i++)
if (t1->Numbers[i] != t2->Numbers[i])
return (FALSE);
for (i = 0; i < NUM_STRINGS(t1); i++)
if (capcmp((PredIdx) i, t1->Strings[i], t2->Strings[i]))
return (FALSE);
return (TRUE);
}
#define TIC_EXPAND(result) _nc_tic_expand(result, outform==F_TERMINFO, numbers)
static void
print_uses(ENTRY * ep, FILE *fp)
/* print an entry's use references */
{
unsigned i;
if (!ep->nuses)
fputs("NULL", fp);
else
for (i = 0; i < ep->nuses; i++) {
fputs(ep->uses[i].name, fp);
if (i < ep->nuses - 1)
fputs(" ", fp);
}
}
static const char *
dump_boolean(int val)
/* display the value of a boolean capability */
{
switch (val) {
case ABSENT_BOOLEAN:
return (s_absent);
case CANCELLED_BOOLEAN:
return (s_cancel);
case FALSE:
return ("F");
case TRUE:
return ("T");
default:
return ("?");
}
}
static void
dump_numeric(int val, char *buf)
/* display the value of a numeric capability */
{
switch (val) {
case ABSENT_NUMERIC:
_nc_STRCPY(buf, s_absent, MAX_STRING);
break;
case CANCELLED_NUMERIC:
_nc_STRCPY(buf, s_cancel, MAX_STRING);
break;
default:
_nc_SPRINTF(buf, _nc_SLIMIT(MAX_STRING) "%d", val);
break;
}
}
static void
dump_string(char *val, char *buf)
/* display the value of a string capability */
{
if (val == ABSENT_STRING)
_nc_STRCPY(buf, s_absent, MAX_STRING);
else if (val == CANCELLED_STRING)
_nc_STRCPY(buf, s_cancel, MAX_STRING);
else {
_nc_SPRINTF(buf, _nc_SLIMIT(MAX_STRING)
"'%.*s'", MAX_STRING - 3, TIC_EXPAND(val));
}
}
/*
* Show "comparing..." message for the given terminal names.
*/
static void
show_comparing(char **names)
{
if (itrace) {
switch (compare) {
case C_DIFFERENCE:
(void) fprintf(stderr, "%s: dumping differences\n", _nc_progname);
break;
case C_COMMON:
(void) fprintf(stderr, "%s: dumping common capabilities\n", _nc_progname);
break;
case C_NAND:
(void) fprintf(stderr, "%s: dumping differences\n", _nc_progname);
break;
}
}
if (*names) {
printf("comparing %s", *names++);
if (*names) {
printf(" to %s", *names++);
while (*names) {
printf(", %s", *names++);
}
}
printf(".\n");
}
}
/*
* ncurses stores two types of non-standard capabilities:
* a) capabilities listed past the "STOP-HERE" comment in the Caps file.
* These are used in the terminfo source file to provide data for termcaps,
* e.g., when there is no equivalent capability in terminfo, as well as for
* widely-used non-standard capabilities.
* b) user-definable capabilities, via "tic -x".
*
* However, if "-x" is omitted from the tic command, both types of
* non-standard capability are not loaded into the terminfo database. This
* macro is used for limit-checks against the symbols that tic uses to omit
* the two types of non-standard entry.
*/
#if NCURSES_XNAMES
#define check_user_definable(n,limit) if (!_nc_user_definable && (n) > (limit)) break
#else
#define check_user_definable(n,limit) if ((n) > (limit)) break
#endif
/*
* Use these macros to simplify loops on C_COMMON and C_NAND:
*/
#define for_each_entry() while (entries[extra].tterm.term_names)
#define next_entry (&(entries[extra++].tterm))
static void
compare_predicate(PredType type, PredIdx idx, const char *name)
/* predicate function to use for entry difference reports */
{
ENTRY *e1 = &entries[0];
ENTRY *e2 = &entries[1];
char buf1[MAX_STRING];
char buf2[MAX_STRING];
int b1, b2;
int n1, n2;
char *s1, *s2;
bool found;
int extra = 1;
switch (type) {
case CMP_BOOLEAN:
check_user_definable(idx, BOOLWRITE);
b1 = e1->tterm.Booleans[idx];
switch (compare) {
case C_DIFFERENCE:
b2 = next_entry->Booleans[idx];
if (!(no_boolean(b1) && no_boolean(b2)) && (b1 != b2))
(void) printf("\t%s: %s%s%s.\n",
name,
dump_boolean(b1),
bool_sep,
dump_boolean(b2));
break;
case C_COMMON:
if (b1 != ABSENT_BOOLEAN) {
found = TRUE;
for_each_entry() {
b2 = next_entry->Booleans[idx];
if (b1 != b2) {
found = FALSE;
break;
}
}
if (found) {
(void) printf("\t%s= %s.\n", name, dump_boolean(b1));
}
}
break;
case C_NAND:
if (b1 == ABSENT_BOOLEAN) {
found = TRUE;
for_each_entry() {
b2 = next_entry->Booleans[idx];
if (b1 != b2) {
found = FALSE;
break;
}
}
if (found) {
(void) printf("\t!%s.\n", name);
}
}
break;
}
break;
case CMP_NUMBER:
check_user_definable(idx, NUMWRITE);
n1 = e1->tterm.Numbers[idx];
switch (compare) {
case C_DIFFERENCE:
n2 = next_entry->Numbers[idx];
if (!(no_numeric(n1) && no_numeric(n2)) && n1 != n2) {
dump_numeric(n1, buf1);
dump_numeric(n2, buf2);
(void) printf("\t%s: %s, %s.\n", name, buf1, buf2);
}
break;
case C_COMMON:
if (n1 != ABSENT_NUMERIC) {
found = TRUE;
for_each_entry() {
n2 = next_entry->Numbers[idx];
if (n1 != n2) {
found = FALSE;
break;
}
}
if (found) {
dump_numeric(n1, buf1);
(void) printf("\t%s= %s.\n", name, buf1);
}
}
break;
case C_NAND:
if (n1 == ABSENT_NUMERIC) {
found = TRUE;
for_each_entry() {
n2 = next_entry->Numbers[idx];
if (n1 != n2) {
found = FALSE;
break;
}
}
if (found) {
(void) printf("\t!%s.\n", name);
}
}
break;
}
break;
case CMP_STRING:
check_user_definable(idx, STRWRITE);
s1 = e1->tterm.Strings[idx];
switch (compare) {
case C_DIFFERENCE:
s2 = next_entry->Strings[idx];
if (!(no_string(s1) && no_string(s2)) && capcmp(idx, s1, s2)) {
dump_string(s1, buf1);
dump_string(s2, buf2);
if (strcmp(buf1, buf2))
(void) printf("\t%s: %s, %s.\n", name, buf1, buf2);
}
break;
case C_COMMON:
if (s1 != ABSENT_STRING) {
found = TRUE;
for_each_entry() {
s2 = next_entry->Strings[idx];
if (capcmp(idx, s1, s2) != 0) {
found = FALSE;
break;
}
}
if (found) {
(void) printf("\t%s= '%s'.\n", name, TIC_EXPAND(s1));
}
}
break;
case C_NAND:
if (s1 == ABSENT_STRING) {
found = TRUE;
for_each_entry() {
s2 = next_entry->Strings[idx];
if (s2 != s1) {
found = FALSE;
break;
}
}
if (found) {
(void) printf("\t!%s.\n", name);
}
}
break;
}
break;
case CMP_USE:
/* unlike the other modes, this compares *all* use entries */
switch (compare) {
case C_DIFFERENCE:
if (!useeq(e1, e2)) {
(void) fputs("\tuse: ", stdout);
print_uses(e1, stdout);
fputs(", ", stdout);
print_uses(e2, stdout);
fputs(".\n", stdout);
}
break;
case C_COMMON:
if (e1->nuses) {
found = TRUE;
for_each_entry() {
e2 = &entries[extra++];
if (e2->nuses != e1->nuses || !useeq(e1, e2)) {
found = FALSE;
break;
}
}
if (found) {
(void) fputs("\tuse: ", stdout);
print_uses(e1, stdout);
fputs(".\n", stdout);
}
}
break;
case C_NAND:
if (!e1->nuses) {
found = TRUE;
for_each_entry() {
e2 = &entries[extra++];
if (e2->nuses != e1->nuses) {
found = FALSE;
break;
}
}
if (found) {
(void) printf("\t!use.\n");
}
}
break;
}
}
}
/***************************************************************************
*
* Init string analysis
*
***************************************************************************/
#define DATA(from, to) { { from }, { to } }
#define DATAX() DATA("", "")
typedef struct {
const char from[4];
const char to[12];
} assoc;
static const assoc std_caps[] =
{
/* these are specified by X.364 and iBCS2 */
DATA("\033c", "RIS"), /* full reset */
DATA("\0337", "SC"), /* save cursor */
DATA("\0338", "RC"), /* restore cursor */
DATA("\033[r", "RSR"), /* not an X.364 mnemonic */
DATA("\033[m", "SGR0"), /* not an X.364 mnemonic */
DATA("\033[2J", "ED2"), /* clear page */
/* this group is specified by ISO 2022 */
DATA("\033(0", "ISO DEC G0"), /* enable DEC graphics for G0 */
DATA("\033(A", "ISO UK G0"), /* enable UK chars for G0 */
DATA("\033(B", "ISO US G0"), /* enable US chars for G0 */
DATA("\033)0", "ISO DEC G1"), /* enable DEC graphics for G1 */
DATA("\033)A", "ISO UK G1"), /* enable UK chars for G1 */
DATA("\033)B", "ISO US G1"), /* enable US chars for G1 */
/* these are DEC private controls widely supported by emulators */
DATA("\033=", "DECPAM"), /* application keypad mode */
DATA("\033>", "DECPNM"), /* normal keypad mode */
DATA("\033<", "DECANSI"), /* enter ANSI mode */
DATA("\033[!p", "DECSTR"), /* soft reset */
DATA("\033 F", "S7C1T"), /* 7-bit controls */
DATAX()
};
static const assoc std_modes[] =
/* ECMA \E[ ... [hl] modes recognized by many emulators */
{
DATA("2", "AM"), /* keyboard action mode */
DATA("4", "IRM"), /* insert/replace mode */
DATA("12", "SRM"), /* send/receive mode */
DATA("20", "LNM"), /* linefeed mode */
DATAX()
};
static const assoc private_modes[] =
/* DEC \E[ ... [hl] modes recognized by many emulators */
{
DATA("1", "CKM"), /* application cursor keys */
DATA("2", "ANM"), /* set VT52 mode */
DATA("3", "COLM"), /* 132-column mode */
DATA("4", "SCLM"), /* smooth scroll */
DATA("5", "SCNM"), /* reverse video mode */
DATA("6", "OM"), /* origin mode */
DATA("7", "AWM"), /* wraparound mode */
DATA("8", "ARM"), /* auto-repeat mode */
DATAX()
};
static const assoc ecma_highlights[] =
/* recognize ECMA attribute sequences */
{
DATA("0", "NORMAL"), /* normal */
DATA("1", "+BOLD"), /* bold on */
DATA("2", "+DIM"), /* dim on */
DATA("3", "+ITALIC"), /* italic on */
DATA("4", "+UNDERLINE"), /* underline on */
DATA("5", "+BLINK"), /* blink on */
DATA("6", "+FASTBLINK"), /* fastblink on */
DATA("7", "+REVERSE"), /* reverse on */
DATA("8", "+INVISIBLE"), /* invisible on */
DATA("9", "+DELETED"), /* deleted on */
DATA("10", "MAIN-FONT"), /* select primary font */
DATA("11", "ALT-FONT-1"), /* select alternate font 1 */
DATA("12", "ALT-FONT-2"), /* select alternate font 2 */
DATA("13", "ALT-FONT-3"), /* select alternate font 3 */
DATA("14", "ALT-FONT-4"), /* select alternate font 4 */
DATA("15", "ALT-FONT-5"), /* select alternate font 5 */
DATA("16", "ALT-FONT-6"), /* select alternate font 6 */
DATA("17", "ALT-FONT-7"), /* select alternate font 7 */
DATA("18", "ALT-FONT-1"), /* select alternate font 1 */
DATA("19", "ALT-FONT-1"), /* select alternate font 1 */
DATA("20", "FRAKTUR"), /* Fraktur font */
DATA("21", "DOUBLEUNDER"), /* double underline */
DATA("22", "-DIM"), /* dim off */
DATA("23", "-ITALIC"), /* italic off */
DATA("24", "-UNDERLINE"), /* underline off */
DATA("25", "-BLINK"), /* blink off */
DATA("26", "-FASTBLINK"), /* fastblink off */
DATA("27", "-REVERSE"), /* reverse off */
DATA("28", "-INVISIBLE"), /* invisible off */
DATA("29", "-DELETED"), /* deleted off */
DATAX()
};
#undef DATA
static int
skip_csi(const char *cap)
{
int result = 0;
if (cap[0] == '\033' && cap[1] == '[')
result = 2;
else if (UChar(cap[0]) == 0233)
result = 1;
return result;
}
static bool
same_param(const char *table, const char *param, size_t length)
{
bool result = FALSE;
if (strncmp(table, param, length) == 0) {
result = !isdigit(UChar(param[length]));
}
return result;
}
static char *
lookup_params(const assoc * table, char *dst, char *src)
{
char *result = 0;
const char *ep = strtok(src, ";");
if (ep != 0) {
const assoc *ap;
do {
bool found = FALSE;
for (ap = table; ap->from[0]; ap++) {
size_t tlen = strlen(ap->from);
if (same_param(ap->from, ep, tlen)) {
_nc_STRCAT(dst, ap->to, MAX_TERMINFO_LENGTH);
found = TRUE;
break;
}
}
if (!found)
_nc_STRCAT(dst, ep, MAX_TERMINFO_LENGTH);
_nc_STRCAT(dst, ";", MAX_TERMINFO_LENGTH);
} while
((ep = strtok((char *) 0, ";")));
dst[strlen(dst) - 1] = '\0';
result = dst;
}
return result;
}
static void
analyze_string(const char *name, const char *cap, TERMTYPE2 *tp)
{
char buf2[MAX_TERMINFO_LENGTH];
const char *sp;
const assoc *ap;
int tp_lines = tp->Numbers[2];
if (!VALID_STRING(cap))
return;
(void) printf("%s: ", name);
for (sp = cap; *sp; sp++) {
int i;
int csi;
size_t len = 0;
size_t next;
const char *expansion = 0;
char buf3[MAX_TERMINFO_LENGTH];
/* first, check other capabilities in this entry */
for (i = 0; i < STRCOUNT; i++) {
char *cp = tp->Strings[i];
/* don't use function-key capabilities */
if (strnames[i][0] == 'k' && strnames[i][1] == 'f')
continue;
if (VALID_STRING(cp) &&
cp[0] != '\0' &&
cp != cap) {
len = strlen(cp);
_nc_STRNCPY(buf2, sp, len);
buf2[len] = '\0';
if (_nc_capcmp(cp, buf2))
continue;
#define ISRS(s) (!strncmp((s), "is", (size_t) 2) || !strncmp((s), "rs", (size_t) 2))
/*
* Theoretically we just passed the test for translation
* (equality once the padding is stripped). However, there
* are a few more hoops that need to be jumped so that
* identical pairs of initialization and reset strings
* don't just refer to each other.
*/
if (ISRS(name) || ISRS(strnames[i]))
if (cap < cp)
continue;
#undef ISRS
expansion = strnames[i];
break;
}
}
/* now check the standard capabilities */
if (!expansion) {
csi = skip_csi(sp);
for (ap = std_caps; ap->from[0]; ap++) {
size_t adj = (size_t) (csi ? 2 : 0);
len = strlen(ap->from);
if (csi && skip_csi(ap->from) != csi)
continue;
if (len > adj
&& strncmp(ap->from + adj, sp + csi, len - adj) == 0) {
expansion = ap->to;
len -= adj;
len += (size_t) csi;
break;
}
}
}
/* now check for standard-mode sequences */
if (!expansion
&& (csi = skip_csi(sp)) != 0
&& (len = (strspn) (sp + csi, "0123456789;"))
&& (len < sizeof(buf3))
&& (next = (size_t) csi + len)
&& ((sp[next] == 'h') || (sp[next] == 'l'))) {
_nc_STRCPY(buf2,
((sp[next] == 'h')
? "ECMA+"
: "ECMA-"),
sizeof(buf2));
_nc_STRNCPY(buf3, sp + csi, len);
buf3[len] = '\0';
len += (size_t) csi + 1;
expansion = lookup_params(std_modes, buf2, buf3);
}
/* now check for private-mode sequences */
if (!expansion
&& (csi = skip_csi(sp)) != 0
&& sp[csi] == '?'
&& (len = (strspn) (sp + csi + 1, "0123456789;"))
&& (len < sizeof(buf3))
&& (next = (size_t) csi + 1 + len)
&& ((sp[next] == 'h') || (sp[next] == 'l'))) {
_nc_STRCPY(buf2,
((sp[next] == 'h')
? "DEC+"
: "DEC-"),
sizeof(buf2));
_nc_STRNCPY(buf3, sp + csi + 1, len);
buf3[len] = '\0';
len += (size_t) csi + 2;
expansion = lookup_params(private_modes, buf2, buf3);
}
/* now check for ECMA highlight sequences */
if (!expansion
&& (csi = skip_csi(sp)) != 0
&& (len = (strspn) (sp + csi, "0123456789;")) != 0
&& (len < sizeof(buf3))
&& (next = (size_t) csi + len)
&& sp[next] == 'm') {
_nc_STRCPY(buf2, "SGR:", sizeof(buf2));
_nc_STRNCPY(buf3, sp + csi, len);
buf3[len] = '\0';
len += (size_t) csi + 1;
expansion = lookup_params(ecma_highlights, buf2, buf3);
}
if (!expansion
&& (csi = skip_csi(sp)) != 0
&& sp[csi] == 'm') {
len = (size_t) csi + 1;
_nc_STRCPY(buf2, "SGR:", sizeof(buf2));
_nc_STRCAT(buf2, ecma_highlights[0].to, sizeof(buf2));
expansion = buf2;
}
/* now check for scroll region reset */
if (!expansion
&& (csi = skip_csi(sp)) != 0) {
if (sp[csi] == 'r') {
expansion = "RSR";
len = 1;
} else {
_nc_SPRINTF(buf2, _nc_SLIMIT(sizeof(buf2)) "1;%dr", tp_lines);
len = strlen(buf2);
if (strncmp(buf2, sp + csi, len) == 0)
expansion = "RSR";
}
len += (size_t) csi;
}
/* now check for home-down */
if (!expansion
&& (csi = skip_csi(sp)) != 0) {
_nc_SPRINTF(buf2, _nc_SLIMIT(sizeof(buf2)) "%d;1H", tp_lines);
len = strlen(buf2);
if (strncmp(buf2, sp + csi, len) == 0) {
expansion = "LL";
} else {
_nc_SPRINTF(buf2, _nc_SLIMIT(sizeof(buf2)) "%dH", tp_lines);
len = strlen(buf2);
if (strncmp(buf2, sp + csi, len) == 0) {
expansion = "LL";
}
}
len += (size_t) csi;
}
/* now look at the expansion we got, if any */
if (expansion) {
printf("{%s}", expansion);
sp += len - 1;
} else {
/* couldn't match anything */
buf2[0] = *sp;
buf2[1] = '\0';
fputs(TIC_EXPAND(buf2), stdout);
}
}
putchar('\n');
}
/***************************************************************************
*
* File comparison
*
***************************************************************************/
static void
file_comparison(int argc, char *argv[])
{
#define MAXCOMPARE 2
/* someday we may allow comparisons on more files */
int filecount = 0;
ENTRY *heads[MAXCOMPARE];
ENTRY *qp, *rp;
int i, n;
memset(heads, 0, sizeof(heads));
dump_init((char *) 0, F_LITERAL, S_TERMINFO,
FALSE, 0, 65535, itrace, FALSE, FALSE, FALSE);
for (n = 0; n < argc && n < MAXCOMPARE; n++) {
if (freopen(argv[n], "r", stdin) == 0)
_nc_err_abort("Can't open %s", argv[n]);
#if NO_LEAKS
entered[n].head = _nc_head;
entered[n].tail = _nc_tail;
#endif
_nc_head = _nc_tail = 0;
/* parse entries out of the source file */
_nc_set_source(argv[n]);
_nc_read_entry_source(stdin, NULL, TRUE, literal, NULLHOOK);
if (itrace)
(void) fprintf(stderr, "Resolving file %d...\n", n - 0);
/* maybe do use resolution */
if (!_nc_resolve_uses2(!limited, literal)) {
(void) fprintf(stderr,
"There are unresolved use entries in %s:\n",
argv[n]);
for_entry_list(qp) {
if (qp->nuses) {
(void) fputs(qp->tterm.term_names, stderr);
(void) fputc('\n', stderr);
}
}
ExitProgram(EXIT_FAILURE);
}
heads[filecount] = _nc_head;
filecount++;
}
/* OK, all entries are in core. Ready to do the comparison */
if (itrace)
(void) fprintf(stderr, "Entries are now in core...\n");
/* The entry-matching loop. Sigh, this is intrinsically quadratic. */
for (qp = heads[0]; qp; qp = qp->next) {
for (rp = heads[1]; rp; rp = rp->next)
if (_nc_entry_match(qp->tterm.term_names, rp->tterm.term_names)) {
if (qp->ncrosslinks < MAX_CROSSLINKS)
qp->crosslinks[qp->ncrosslinks] = rp;
qp->ncrosslinks++;
if (rp->ncrosslinks < MAX_CROSSLINKS)
rp->crosslinks[rp->ncrosslinks] = qp;
rp->ncrosslinks++;
}
}
/* now we have two circular lists with crosslinks */
if (itrace)
(void) fprintf(stderr, "Name matches are done...\n");
for (qp = heads[0]; qp; qp = qp->next) {
if (qp->ncrosslinks > 1) {
(void) fprintf(stderr,
"%s in file 1 (%s) has %d matches in file 2 (%s):\n",
_nc_first_name(qp->tterm.term_names),
argv[0],
qp->ncrosslinks,
argv[1]);
for (i = 0; i < qp->ncrosslinks; i++)
(void) fprintf(stderr,
"\t%s\n",
_nc_first_name((qp->crosslinks[i])->tterm.term_names));
}
}
for (rp = heads[1]; rp; rp = rp->next) {
if (rp->ncrosslinks > 1) {
(void) fprintf(stderr,
"%s in file 2 (%s) has %d matches in file 1 (%s):\n",
_nc_first_name(rp->tterm.term_names),
argv[1],
rp->ncrosslinks,
argv[0]);
for (i = 0; i < rp->ncrosslinks; i++)
(void) fprintf(stderr,
"\t%s\n",
_nc_first_name((rp->crosslinks[i])->tterm.term_names));
}
}
(void) printf("In file 1 (%s) only:\n", argv[0]);
for (qp = heads[0]; qp; qp = qp->next)
if (qp->ncrosslinks == 0)
(void) printf("\t%s\n",
_nc_first_name(qp->tterm.term_names));
(void) printf("In file 2 (%s) only:\n", argv[1]);
for (rp = heads[1]; rp; rp = rp->next)
if (rp->ncrosslinks == 0)
(void) printf("\t%s\n",
_nc_first_name(rp->tterm.term_names));
(void) printf("The following entries are equivalent:\n");
for (qp = heads[0]; qp; qp = qp->next) {
if (qp->ncrosslinks == 1) {
rp = qp->crosslinks[0];
repair_acsc(&qp->tterm);
repair_acsc(&rp->tterm);
#if NCURSES_XNAMES
_nc_align_termtype(&qp->tterm, &rp->tterm);
#endif
if (entryeq(&qp->tterm, &rp->tterm) && useeq(qp, rp)) {
char name1[NAMESIZE], name2[NAMESIZE];
(void) canonical_name(qp->tterm.term_names, name1);
(void) canonical_name(rp->tterm.term_names, name2);
(void) printf("%s = %s\n", name1, name2);
}
}
}
(void) printf("Differing entries:\n");
termcount = 2;
for (qp = heads[0]; qp; qp = qp->next) {
if (qp->ncrosslinks == 1) {
rp = qp->crosslinks[0];
#if NCURSES_XNAMES
/* sorry - we have to do this on each pass */
_nc_align_termtype(&qp->tterm, &rp->tterm);
#endif
if (!(entryeq(&qp->tterm, &rp->tterm) && useeq(qp, rp))) {
char name1[NAMESIZE], name2[NAMESIZE];
char *names[3];
names[0] = name1;
names[1] = name2;
names[2] = 0;
entries[0] = *qp;
entries[1] = *rp;
(void) canonical_name(qp->tterm.term_names, name1);
(void) canonical_name(rp->tterm.term_names, name2);
switch (compare) {
case C_DIFFERENCE:
show_comparing(names);
compare_entry(compare_predicate, &entries->tterm, quiet);
break;
case C_COMMON:
show_comparing(names);
compare_entry(compare_predicate, &entries->tterm, quiet);
break;
case C_NAND:
show_comparing(names);
compare_entry(compare_predicate, &entries->tterm, quiet);
break;
}
}
}
}
}
static void
usage(void)
{
#define DATA(s) s "\n"
static const char head[] =
{
DATA("Usage: infocmp [options] [-A directory] [-B directory] [termname...]")
DATA("")
DATA("Options:")
};
#undef DATA
+ /* length is given here so the compiler can make everything readonly */
#define DATA(s) s
- static const char options[][45] =
+ static const char options[][46] =
{
" -0 print single-row"
," -1 print single-column"
," -C use termcap-names"
," -D print database locations"
," -E format output as C tables"
," -F compare terminfo-files"
," -G format %{number} to %'char'"
," -I use terminfo-names"
," -K use termcap-names and BSD syntax"
," -L use long names"
," -R subset (see manpage)"
," -T eliminate size limits (test)"
," -U do not post-process entries"
," -V print version"
," -W wrap long strings per -w[n]"
#if NCURSES_XNAMES
," -a with -F, list commented-out caps"
#endif
," -c list common capabilities"
," -d list different capabilities"
," -e format output for C initializer"
," -f with -1, format complex strings"
," -g format %'char' to %{number}"
," -i analyze initialization/reset"
," -l output terminfo names"
," -n list capabilities in neither"
," -p ignore padding specifiers"
," -Q number dump compiled description"
," -q brief listing, removes headers"
," -r with -C, output in termcap form"
," -r with -F, resolve use-references"
," -s [d|i|l|c] sort fields"
#if NCURSES_XNAMES
," -t suppress commented-out capabilities"
#endif
," -u produce source with 'use='"
," -v number (verbose)"
," -w number (width)"
#if NCURSES_XNAMES
," -x unknown capabilities are user-defined"
#endif
};
#undef DATA
const size_t last = SIZEOF(options);
const size_t left = (last + 1) / 2;
size_t n;
fputs(head, stderr);
for (n = 0; n < left; n++) {
size_t m = n + left;
if (m < last)
fprintf(stderr, "%-40.40s%s\n", options[n], options[m]);
else
fprintf(stderr, "%s\n", options[n]);
}
ExitProgram(EXIT_FAILURE);
}
static char *
any_initializer(const char *fmt, const char *type)
{
static char *initializer;
static size_t need;
char *s;
if (initializer == 0) {
need = (strlen(entries->tterm.term_names)
+ strlen(type)
+ strlen(fmt));
initializer = (char *) malloc(need + 1);
if (initializer == 0)
failed("any_initializer");
}
_nc_STRCPY(initializer, entries->tterm.term_names, need);
for (s = initializer; *s != 0 && *s != '|'; s++) {
if (!isalnum(UChar(*s)))
*s = '_';
}
*s = 0;
_nc_SPRINTF(s, _nc_SLIMIT(need) fmt, type);
return initializer;
}
static char *
name_initializer(const char *type)
{
return any_initializer("_%s_data", type);
}
static char *
string_variable(const char *type)
{
return any_initializer("_s_%s", type);
}
/* dump C initializers for the terminal type */
static void
dump_initializers(TERMTYPE2 *term)
{
unsigned n;
const char *str = 0;
printf("\nstatic char %s[] = \"%s\";\n\n",
name_initializer("alias"), entries->tterm.term_names);
for_each_string(n, term) {
char buf[MAX_STRING], *sp, *tp;
if (VALID_STRING(term->Strings[n])) {
tp = buf;
#define TP_LIMIT ((MAX_STRING - 5) - (size_t)(tp - buf))
*tp++ = '"';
for (sp = term->Strings[n];
*sp != 0 && TP_LIMIT > 2;
sp++) {
if (isascii(UChar(*sp))
&& isprint(UChar(*sp))
&& *sp != '\\'
&& *sp != '"')
*tp++ = *sp;
else {
_nc_SPRINTF(tp, _nc_SLIMIT(TP_LIMIT) "\\%03o", UChar(*sp));
tp += 4;
}
}
*tp++ = '"';
*tp = '\0';
(void) printf("static char %-20s[] = %s;\n",
string_variable(ExtStrname(term, (int) n, strnames)),
buf);
}
}
printf("\n");
(void) printf("static char %s[] = %s\n", name_initializer("bool"), L_CURL);
for_each_boolean(n, term) {
switch ((int) (term->Booleans[n])) {
case TRUE:
str = "TRUE";
break;
case FALSE:
str = "FALSE";
break;
case ABSENT_BOOLEAN:
str = "ABSENT_BOOLEAN";
break;
case CANCELLED_BOOLEAN:
str = "CANCELLED_BOOLEAN";
break;
}
(void) printf("\t/* %3u: %-8s */\t%s,\n",
n, ExtBoolname(term, (int) n, boolnames), str);
}
(void) printf("%s;\n", R_CURL);
(void) printf("static short %s[] = %s\n", name_initializer("number"), L_CURL);
for_each_number(n, term) {
char buf[BUFSIZ];
switch (term->Numbers[n]) {
case ABSENT_NUMERIC:
str = "ABSENT_NUMERIC";
break;
case CANCELLED_NUMERIC:
str = "CANCELLED_NUMERIC";
break;
default:
_nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) "%d", term->Numbers[n]);
str = buf;
break;
}
(void) printf("\t/* %3u: %-8s */\t%s,\n", n,
ExtNumname(term, (int) n, numnames), str);
}
(void) printf("%s;\n", R_CURL);
(void) printf("static char * %s[] = %s\n", name_initializer("string"), L_CURL);
for_each_string(n, term) {
if (term->Strings[n] == ABSENT_STRING)
str = "ABSENT_STRING";
else if (term->Strings[n] == CANCELLED_STRING)
str = "CANCELLED_STRING";
else {
str = string_variable(ExtStrname(term, (int) n, strnames));
}
(void) printf("\t/* %3u: %-8s */\t%s,\n", n,
ExtStrname(term, (int) n, strnames), str);
}
(void) printf("%s;\n", R_CURL);
#if NCURSES_XNAMES
if ((NUM_BOOLEANS(term) != BOOLCOUNT)
|| (NUM_NUMBERS(term) != NUMCOUNT)
|| (NUM_STRINGS(term) != STRCOUNT)) {
(void) printf("static char * %s[] = %s\n",
name_initializer("string_ext"), L_CURL);
for (n = BOOLCOUNT; n < NUM_BOOLEANS(term); ++n) {
(void) printf("\t/* %3u: bool */\t\"%s\",\n",
n, ExtBoolname(term, (int) n, boolnames));
}
for (n = NUMCOUNT; n < NUM_NUMBERS(term); ++n) {
(void) printf("\t/* %3u: num */\t\"%s\",\n",
n, ExtNumname(term, (int) n, numnames));
}
for (n = STRCOUNT; n < NUM_STRINGS(term); ++n) {
(void) printf("\t/* %3u: str */\t\"%s\",\n",
n, ExtStrname(term, (int) n, strnames));
}
(void) printf("%s;\n", R_CURL);
}
#endif
}
/* dump C initializers for the terminal type */
static void
dump_termtype(TERMTYPE2 *term)
{
(void) printf("\t%s\n\t\t%s,\n", L_CURL, name_initializer("alias"));
(void) printf("\t\t(char *)0,\t/* pointer to string table */\n");
(void) printf("\t\t%s,\n", name_initializer("bool"));
(void) printf("\t\t%s,\n", name_initializer("number"));
(void) printf("\t\t%s,\n", name_initializer("string"));
#if NCURSES_XNAMES
(void) printf("#if NCURSES_XNAMES\n");
(void) printf("\t\t(char *)0,\t/* pointer to extended string table */\n");
(void) printf("\t\t%s,\t/* ...corresponding names */\n",
((NUM_BOOLEANS(term) != BOOLCOUNT)
|| (NUM_NUMBERS(term) != NUMCOUNT)
|| (NUM_STRINGS(term) != STRCOUNT))
? name_initializer("string_ext")
: "(char **)0");
(void) printf("\t\t%d,\t\t/* count total Booleans */\n", NUM_BOOLEANS(term));
(void) printf("\t\t%d,\t\t/* count total Numbers */\n", NUM_NUMBERS(term));
(void) printf("\t\t%d,\t\t/* count total Strings */\n", NUM_STRINGS(term));
(void) printf("\t\t%d,\t\t/* count extensions to Booleans */\n",
NUM_BOOLEANS(term) - BOOLCOUNT);
(void) printf("\t\t%d,\t\t/* count extensions to Numbers */\n",
NUM_NUMBERS(term) - NUMCOUNT);
(void) printf("\t\t%d,\t\t/* count extensions to Strings */\n",
NUM_STRINGS(term) - STRCOUNT);
(void) printf("#endif /* NCURSES_XNAMES */\n");
#else
(void) term;
#endif /* NCURSES_XNAMES */
(void) printf("\t%s\n", R_CURL);
}
static int
optarg_to_number(void)
{
char *temp = 0;
long value = strtol(optarg, &temp, 0);
if (temp == 0 || temp == optarg || *temp != 0) {
fprintf(stderr, "Expected a number, not \"%s\"\n", optarg);
ExitProgram(EXIT_FAILURE);
}
return (int) value;
}
static char *
terminal_env(void)
{
char *terminal;
if ((terminal = getenv("TERM")) == 0) {
(void) fprintf(stderr,
"%s: environment variable TERM not set\n",
_nc_progname);
exit(EXIT_FAILURE);
}
return terminal;
}
/*
* Show the databases that infocmp knows about. The location to which it writes is
*/
static void
show_databases(void)
{
DBDIRS state;
int offset;
const char *path2;
_nc_first_db(&state, &offset);
while ((path2 = _nc_next_db(&state, &offset)) != 0) {
printf("%s\n", path2);
}
_nc_last_db();
}
/***************************************************************************
*
* Main sequence
*
***************************************************************************/
#if NO_LEAKS
#define MAIN_LEAKS() \
free(myargv); \
free(tfile); \
free(tname)
#else
#define MAIN_LEAKS() /* nothing */
#endif
int
main(int argc, char *argv[])
{
/* Avoid "local data >32k" error with mwcc */
/* Also avoid overflowing smaller stacks on systems like AmigaOS */
path *tfile = 0;
char **tname = 0;
size_t maxterms;
char **myargv;
char *firstdir, *restdir;
int c, i, len;
bool formatted = FALSE;
bool filecompare = FALSE;
int initdump = 0;
bool init_analyze = FALSE;
bool suppress_untranslatable = FALSE;
int quickdump = 0;
bool wrap_strings = FALSE;
/* where is the terminfo database location going to default to? */
restdir = firstdir = 0;
#if NCURSES_XNAMES
use_extended_names(FALSE);
#endif
_nc_strict_bsd = 0;
_nc_progname = _nc_rootname(argv[0]);
/* make sure we have enough space to add two terminal entries */
myargv = typeCalloc(char *, (size_t) (argc + 3));
if (myargv == 0)
failed("myargv");
memcpy(myargv, argv, (sizeof(char *) * (size_t) argc));
argv = myargv;
while ((c = getopt(argc,
argv,
"01A:aB:CcDdEeFfGgIiKLlnpQ:qR:rs:TtUuVv:Ww:x")) != -1) {
switch (c) {
case '0':
mwidth = 65535;
mheight = 1;
break;
case '1':
mwidth = 0;
break;
case 'A':
firstdir = optarg;
break;
#if NCURSES_XNAMES
case 'a':
_nc_disable_period = TRUE;
use_extended_names(TRUE);
break;
#endif
case 'B':
restdir = optarg;
break;
case 'K':
_nc_strict_bsd = 1;
/* FALLTHRU */
case 'C':
outform = F_TERMCAP;
tversion = "BSD";
if (sortmode == S_DEFAULT)
sortmode = S_TERMCAP;
break;
case 'D':
show_databases();
ExitProgram(EXIT_SUCCESS);
break;
case 'c':
compare = C_COMMON;
break;
case 'd':
compare = C_DIFFERENCE;
break;
case 'E':
initdump |= 2;
break;
case 'e':
initdump |= 1;
break;
case 'F':
filecompare = TRUE;
break;
case 'f':
formatted = TRUE;
break;
case 'G':
numbers = 1;
break;
case 'g':
numbers = -1;
break;
case 'I':
outform = F_TERMINFO;
if (sortmode == S_DEFAULT)
sortmode = S_VARIABLE;
tversion = 0;
break;
case 'i':
init_analyze = TRUE;
break;
case 'L':
outform = F_VARIABLE;
if (sortmode == S_DEFAULT)
sortmode = S_VARIABLE;
break;
case 'l':
outform = F_TERMINFO;
break;
case 'n':
compare = C_NAND;
break;
case 'p':
ignorepads = TRUE;
break;
case 'Q':
quickdump = optarg_to_number();
break;
case 'q':
quiet = TRUE;
s_absent = "-";
s_cancel = "@";
bool_sep = ", ";
break;
case 'R':
tversion = optarg;
break;
case 'r':
tversion = 0;
break;
case 's':
if (*optarg == 'd')
sortmode = S_NOSORT;
else if (*optarg == 'i')
sortmode = S_TERMINFO;
else if (*optarg == 'l')
sortmode = S_VARIABLE;
else if (*optarg == 'c')
sortmode = S_TERMCAP;
else {
(void) fprintf(stderr,
"%s: unknown sort mode\n",
_nc_progname);
ExitProgram(EXIT_FAILURE);
}
break;
case 'T':
limited = FALSE;
break;
#if NCURSES_XNAMES
case 't':
_nc_disable_period = FALSE;
suppress_untranslatable = TRUE;
break;
#endif
case 'U':
literal = TRUE;
break;
case 'u':
compare = C_USEALL;
break;
case 'V':
puts(curses_version());
ExitProgram(EXIT_SUCCESS);
case 'v':
itrace = (unsigned) optarg_to_number();
set_trace_level(itrace);
break;
case 'W':
wrap_strings = TRUE;
break;
case 'w':
mwidth = optarg_to_number();
break;
#if NCURSES_XNAMES
case 'x':
use_extended_names(TRUE);
break;
#endif
default:
usage();
}
}
maxterms = (size_t) (argc + 2 - optind);
if ((tfile = typeMalloc(path, maxterms)) == 0)
failed("tfile");
if ((tname = typeCalloc(char *, maxterms)) == 0)
failed("tname");
if ((entries = typeCalloc(ENTRY, maxterms)) == 0)
failed("entries");
#if NO_LEAKS
if ((entered = typeCalloc(ENTERED, maxterms)) == 0)
failed("entered");
#endif
if (tfile == 0
|| tname == 0
|| entries == 0) {
fprintf(stderr, "%s: not enough memory\n", _nc_progname);
ExitProgram(EXIT_FAILURE);
}
/* by default, sort by terminfo name */
if (sortmode == S_DEFAULT)
sortmode = S_TERMINFO;
/* make sure we have at least one terminal name to work with */
if (optind >= argc)
argv[argc++] = terminal_env();
/* if user is after a comparison, make sure we have two entries */
if (compare != C_DEFAULT && optind >= argc - 1)
argv[argc++] = terminal_env();
/* exactly one terminal name with no options means display it */
/* exactly two terminal names with no options means do -d */
if (compare == C_DEFAULT) {
switch (argc - optind) {
default:
fprintf(stderr, "%s: too many names to compare\n", _nc_progname);
ExitProgram(EXIT_FAILURE);
case 1:
break;
case 2:
compare = C_DIFFERENCE;
break;
}
}
/* set up for display */
dump_init(tversion, outform, sortmode,
wrap_strings, mwidth, mheight, itrace,
formatted, FALSE, quickdump);
if (!filecompare) {
/* grab the entries */
termcount = 0;
for (; optind < argc; optind++) {
const char *directory = termcount ? restdir : firstdir;
int status;
tname[termcount] = argv[optind];
if (directory) {
#if NCURSES_USE_DATABASE
#if MIXEDCASE_FILENAMES
#define LEAF_FMT "%c"
#else
#define LEAF_FMT "%02x"
#endif
_nc_SPRINTF(tfile[termcount],
_nc_SLIMIT(sizeof(path))
"%s/" LEAF_FMT "/%s",
directory,
UChar(*argv[optind]), argv[optind]);
if (itrace)
(void) fprintf(stderr,
"%s: reading entry %s from file %s\n",
_nc_progname,
argv[optind], tfile[termcount]);
status = _nc_read_file_entry(tfile[termcount],
&entries[termcount].tterm);
#else
(void) fprintf(stderr, "%s: terminfo files not supported\n",
_nc_progname);
MAIN_LEAKS();
ExitProgram(EXIT_FAILURE);
#endif
} else {
if (itrace)
(void) fprintf(stderr,
"%s: reading entry %s from database\n",
_nc_progname,
tname[termcount]);
status = _nc_read_entry2(tname[termcount],
- tfile[termcount],
- &entries[termcount].tterm);
+ tfile[termcount],
+ &entries[termcount].tterm);
}
if (status <= 0) {
(void) fprintf(stderr,
"%s: couldn't open terminfo file %s.\n",
_nc_progname,
tfile[termcount]);
MAIN_LEAKS();
ExitProgram(EXIT_FAILURE);
}
repair_acsc(&entries[termcount].tterm);
termcount++;
}
#if NCURSES_XNAMES
if (termcount > 1)
_nc_align_termtype(&entries[0].tterm, &entries[1].tterm);
#endif
/* dump as C initializer for the terminal type */
if (initdump) {
if (initdump & 1)
dump_termtype(&entries[0].tterm);
if (initdump & 2)
dump_initializers(&entries[0].tterm);
}
/* analyze the init strings */
else if (init_analyze) {
#undef CUR
#define CUR entries[0].tterm.
analyze_string("is1", init_1string, &entries[0].tterm);
analyze_string("is2", init_2string, &entries[0].tterm);
analyze_string("is3", init_3string, &entries[0].tterm);
analyze_string("rs1", reset_1string, &entries[0].tterm);
analyze_string("rs2", reset_2string, &entries[0].tterm);
analyze_string("rs3", reset_3string, &entries[0].tterm);
analyze_string("smcup", enter_ca_mode, &entries[0].tterm);
analyze_string("rmcup", exit_ca_mode, &entries[0].tterm);
analyze_string("smkx", keypad_xmit, &entries[0].tterm);
analyze_string("rmkx", keypad_local, &entries[0].tterm);
#undef CUR
} else {
/*
* Here's where the real work gets done
*/
switch (compare) {
case C_DEFAULT:
if (itrace)
(void) fprintf(stderr,
"%s: about to dump %s\n",
_nc_progname,
tname[0]);
if (!quiet)
(void)
printf("#\tReconstructed via infocmp from file: %s\n",
tfile[0]);
dump_entry(&entries[0].tterm,
suppress_untranslatable,
limited,
numbers,
NULL);
len = show_entry();
if (itrace)
(void) fprintf(stderr, "%s: length %d\n", _nc_progname, len);
break;
case C_DIFFERENCE:
show_comparing(tname);
compare_entry(compare_predicate, &entries->tterm, quiet);
break;
case C_COMMON:
show_comparing(tname);
compare_entry(compare_predicate, &entries->tterm, quiet);
break;
case C_NAND:
show_comparing(tname);
compare_entry(compare_predicate, &entries->tterm, quiet);
break;
case C_USEALL:
if (itrace)
(void) fprintf(stderr, "%s: dumping use entry\n", _nc_progname);
dump_entry(&entries[0].tterm,
suppress_untranslatable,
limited,
numbers,
use_predicate);
for (i = 1; i < termcount; i++)
dump_uses(tname[i], !(outform == F_TERMCAP
|| outform == F_TCONVERR));
len = show_entry();
if (itrace)
(void) fprintf(stderr, "%s: length %d\n", _nc_progname, len);
break;
}
}
} else if (compare == C_USEALL) {
(void) fprintf(stderr, "Sorry, -u doesn't work with -F\n");
} else if (compare == C_DEFAULT) {
(void) fprintf(stderr, "Use `tic -[CI] <file>' for this.\n");
} else if (argc - optind != 2) {
(void) fprintf(stderr,
"File comparison needs exactly two file arguments.\n");
} else {
file_comparison(argc - optind, argv + optind);
}
MAIN_LEAKS();
ExitProgram(EXIT_SUCCESS);
}
/* infocmp.c ends here */
diff --git a/contrib/ncurses/progs/progs.priv.h b/contrib/ncurses/progs/progs.priv.h
index da7a5154f734..3dc177d0a866 100644
--- a/contrib/ncurses/progs/progs.priv.h
+++ b/contrib/ncurses/progs/progs.priv.h
@@ -1,234 +1,244 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 1998-2015,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 1997-on *
****************************************************************************/
/*
- * $Id: progs.priv.h,v 1.48 2020/02/02 23:34:34 tom Exp $
+ * $Id: progs.priv.h,v 1.52 2020/09/05 19:35:06 tom Exp $
*
* progs.priv.h
*
* Header file for curses utility programs
*/
#ifndef PROGS_PRIV_H
#define PROGS_PRIV_H 1
#include <ncurses_cfg.h>
#if USE_RCS_IDS
#define MODULE_ID(id) static const char Ident[] = id;
#else
#define MODULE_ID(id) /*nothing */
#endif
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <sys/types.h>
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
-#if HAVE_SYS_BSDTYPES_H
-#include <sys/bsdtypes.h> /* needed for ISC */
-#endif
-
#if HAVE_LIMITS_H
# include <limits.h>
#elif HAVE_SYS_PARAM_H
# include <sys/param.h>
#endif
#if HAVE_DIRENT_H
# include <dirent.h>
# define NAMLEN(dirent) strlen((dirent)->d_name)
# if defined(_FILE_OFFSET_BITS) && defined(HAVE_STRUCT_DIRENT64)
# if !defined(_LP64) && (_FILE_OFFSET_BITS == 64)
# define DIRENT struct dirent64
# else
# define DIRENT struct dirent
# endif
# else
# define DIRENT struct dirent
# endif
#else
# define DIRENT struct direct
# define NAMLEN(dirent) (dirent)->d_namlen
# if HAVE_SYS_NDIR_H
# include <sys/ndir.h>
# endif
# if HAVE_SYS_DIR_H
# include <sys/dir.h>
# endif
# if HAVE_NDIR_H
# include <ndir.h>
# endif
#endif
#if HAVE_INTTYPES_H
# include <inttypes.h>
#else
# if HAVE_STDINT_H
# include <stdint.h>
# endif
#endif
#include <assert.h>
#include <errno.h>
#if DECL_ERRNO
extern int errno;
#endif
#if HAVE_GETOPT_H
#include <getopt.h>
#elif !defined(HAVE_GETOPT_HEADER)
/* 'getopt()' may be prototyped in <stdlib.h>, but declaring its
* variables doesn't hurt.
*/
extern char *optarg;
extern int optind;
#endif /* HAVE_GETOPT_H */
+#undef _NC_WINDOWS
+#if (defined(_WIN32) || defined(_WIN64))
+#define _NC_WINDOWS 1
+#endif
+
#define NCURSES_INTERNALS 1
#define NCURSES_OPAQUE 0
#include <curses.h>
+
+#if !(defined(NCURSES_WGETCH_EVENTS) && defined(NEED_KEY_EVENT))
+#undef KEY_EVENT /* reduce compiler-warnings with Visual C++ */
+#endif
+
#include <term_entry.h>
#include <nc_termios.h>
#include <tic.h>
#include <nc_tparm.h>
#include <nc_string.h>
#include <nc_alloc.h>
#if HAVE_NC_FREEALL
#undef ExitProgram
#ifdef USE_LIBTINFO
#define ExitProgram(code) exit_terminfo(code)
#else
#define ExitProgram(code) _nc_free_tic(code)
#endif
#endif
#define VtoTrace(opt) (unsigned) ((opt > 0) ? opt : (opt == 0))
/* error-returns for tput */
#define ErrUsage 2
#define ErrTermType 3
#define ErrCapName 4
#define ErrSystem(n) (4 + (n))
#if defined(__GNUC__) && defined(_FORTIFY_SOURCE)
#define IGNORE_RC(func) errno = (int) func
#else
#define IGNORE_RC(func) (void) func
#endif /* gcc workarounds */
/* usually in <unistd.h> */
+#ifndef STDIN_FILENO
+#define STDIN_FILENO 0
+#endif
+
#ifndef STDOUT_FILENO
#define STDOUT_FILENO 1
#endif
#ifndef STDERR_FILENO
#define STDERR_FILENO 2
#endif
#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
#endif
#ifndef EXIT_FAILURE
#define EXIT_FAILURE 1
#endif
#ifndef R_OK
#define R_OK 4 /* Test for readable. */
#endif
#ifndef W_OK
#define W_OK 2 /* Test for writable. */
#endif
#ifndef X_OK
#define X_OK 1 /* Test for executable. */
#endif
#ifndef F_OK
#define F_OK 0 /* Test for existence. */
#endif
/* usually in <unistd.h> */
#ifndef STDOUT_FILENO
#define STDOUT_FILENO 1
#endif
#ifndef STDERR_FILENO
#define STDERR_FILENO 2
#endif
/* may be in limits.h, included from various places */
#ifndef PATH_MAX
# if defined(_POSIX_PATH_MAX)
# define PATH_MAX _POSIX_PATH_MAX
# elif defined(MAXPATHLEN)
# define PATH_MAX MAXPATHLEN
# else
# define PATH_MAX 255 /* the Posix minimum pathsize */
# endif
#endif
/* We use isascii only to guard against use of 7-bit ctype tables in the
* isprint test in infocmp.
*/
#if !HAVE_ISASCII
# undef isascii
# if ('z'-'a' == 25) && ('z' < 127) && ('Z'-'A' == 25) && ('Z' < 127) && ('9' < 127)
# define isascii(c) (UChar(c) <= 127)
# else
# define isascii(c) 1 /* not really ascii anyway */
# endif
#endif
#define UChar(c) ((unsigned char)(c))
#define SIZEOF(v) (sizeof(v)/sizeof(v[0]))
#define NCURSES_EXT_NUMBERS (NCURSES_EXT_COLORS && HAVE_INIT_EXTENDED_COLOR)
#if NCURSES_EXT_NUMBERS
#else
#define _nc_free_termtype2(t) _nc_free_termtype(t)
#define _nc_read_entry2(n,f,t) _nc_read_entry(n,f,t)
#endif
#endif /* PROGS_PRIV_H */
diff --git a/contrib/ncurses/progs/reset_cmd.c b/contrib/ncurses/progs/reset_cmd.c
index 9d23cd05ec2e..5e517cc74e9e 100644
--- a/contrib/ncurses/progs/reset_cmd.c
+++ b/contrib/ncurses/progs/reset_cmd.c
@@ -1,635 +1,658 @@
/****************************************************************************
* Copyright 2019,2020 Thomas E. Dickey *
* Copyright 2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey *
****************************************************************************/
#include <reset_cmd.h>
#include <tty_settings.h>
#include <errno.h>
#include <stdio.h>
#include <fcntl.h>
#if HAVE_SIZECHANGE
# if !defined(sun) || !TERMIOS
# if HAVE_SYS_IOCTL_H
# include <sys/ioctl.h>
# endif
# endif
#endif
#if NEED_PTEM_H
/* they neglected to define struct winsize in termios.h -- it's only
in termio.h */
#include <sys/stream.h>
#include <sys/ptem.h>
#endif
-MODULE_ID("$Id: reset_cmd.c,v 1.19 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: reset_cmd.c,v 1.24 2020/11/21 22:11:10 tom Exp $")
/*
* SCO defines TIOCGSIZE and the corresponding struct. Other systems (SunOS,
* Solaris, IRIX) define TIOCGWINSZ and struct winsize.
*/
#ifdef TIOCGSIZE
# define IOCTL_GET_WINSIZE TIOCGSIZE
# define IOCTL_SET_WINSIZE TIOCSSIZE
# define STRUCT_WINSIZE struct ttysize
# define WINSIZE_ROWS(n) n.ts_lines
# define WINSIZE_COLS(n) n.ts_cols
#else
# ifdef TIOCGWINSZ
# define IOCTL_GET_WINSIZE TIOCGWINSZ
# define IOCTL_SET_WINSIZE TIOCSWINSZ
# define STRUCT_WINSIZE struct winsize
# define WINSIZE_ROWS(n) n.ws_row
# define WINSIZE_COLS(n) n.ws_col
# endif
#endif
static FILE *my_file;
static bool use_reset = FALSE; /* invoked as reset */
static bool use_init = FALSE; /* invoked as init */
static void
failed(const char *msg)
{
int code = errno;
(void) fprintf(stderr, "%s: %s: %s\n", _nc_progname, msg, strerror(code));
restore_tty_settings();
(void) fprintf(my_file, "\n");
fflush(my_file);
ExitProgram(ErrSystem(code));
/* NOTREACHED */
}
static bool
cat_file(char *file)
{
FILE *fp;
size_t nr;
char buf[BUFSIZ];
bool sent = FALSE;
if (file != 0) {
if ((fp = fopen(file, "r")) == 0)
failed(file);
while ((nr = fread(buf, sizeof(char), sizeof(buf), fp)) != 0) {
if (fwrite(buf, sizeof(char), nr, my_file) != nr) {
failed(file);
}
sent = TRUE;
}
fclose(fp);
}
return sent;
}
static int
out_char(int c)
{
return putc(c, my_file);
}
/**************************************************************************
* Mode-setting logic
**************************************************************************/
/* some BSD systems have these built in, some systems are missing
* one or more definitions. The safest solution is to override unless the
* commonly-altered ones are defined.
*/
#if !(defined(CERASE) && defined(CINTR) && defined(CKILL) && defined(CQUIT))
#undef CEOF
#undef CERASE
#undef CINTR
#undef CKILL
#undef CLNEXT
#undef CRPRNT
#undef CQUIT
#undef CSTART
#undef CSTOP
#undef CSUSP
#endif
/* control-character defaults */
#ifndef CEOF
#define CEOF CTRL('D')
#endif
#ifndef CERASE
#define CERASE CTRL('H')
#endif
#ifndef CINTR
#define CINTR 127 /* ^? */
#endif
#ifndef CKILL
#define CKILL CTRL('U')
#endif
#ifndef CLNEXT
#define CLNEXT CTRL('v')
#endif
#ifndef CRPRNT
#define CRPRNT CTRL('r')
#endif
#ifndef CQUIT
#define CQUIT CTRL('\\')
#endif
#ifndef CSTART
#define CSTART CTRL('Q')
#endif
#ifndef CSTOP
#define CSTOP CTRL('S')
#endif
#ifndef CSUSP
#define CSUSP CTRL('Z')
#endif
#if defined(_POSIX_VDISABLE)
#define DISABLED(val) (((_POSIX_VDISABLE != -1) \
&& ((val) == _POSIX_VDISABLE)) \
|| ((val) <= 0))
#else
#define DISABLED(val) ((int)(val) <= 0)
#endif
#define CHK(val, dft) (unsigned char) (DISABLED(val) ? dft : val)
#define reset_char(item, value) \
tty_settings->c_cc[item] = CHK(tty_settings->c_cc[item], value)
/*
* Reset the terminal mode bits to a sensible state. Very useful after
* a child program dies in raw mode.
*/
void
reset_tty_settings(int fd, TTY * tty_settings)
{
GET_TTY(fd, tty_settings);
#ifdef TERMIOS
#if defined(VDISCARD) && defined(CDISCARD)
reset_char(VDISCARD, CDISCARD);
#endif
reset_char(VEOF, CEOF);
reset_char(VERASE, CERASE);
#if defined(VFLUSH) && defined(CFLUSH)
reset_char(VFLUSH, CFLUSH);
#endif
reset_char(VINTR, CINTR);
reset_char(VKILL, CKILL);
#if defined(VLNEXT) && defined(CLNEXT)
reset_char(VLNEXT, CLNEXT);
#endif
reset_char(VQUIT, CQUIT);
#if defined(VREPRINT) && defined(CRPRNT)
reset_char(VREPRINT, CRPRNT);
#endif
#if defined(VSTART) && defined(CSTART)
reset_char(VSTART, CSTART);
#endif
#if defined(VSTOP) && defined(CSTOP)
reset_char(VSTOP, CSTOP);
#endif
#if defined(VSUSP) && defined(CSUSP)
reset_char(VSUSP, CSUSP);
#endif
#if defined(VWERASE) && defined(CWERASE)
reset_char(VWERASE, CWERASE);
#endif
tty_settings->c_iflag &= ~((unsigned) (IGNBRK
| PARMRK
| INPCK
| ISTRIP
| INLCR
| IGNCR
#ifdef IUCLC
| IUCLC
#endif
#ifdef IXANY
| IXANY
#endif
| IXOFF));
tty_settings->c_iflag |= (BRKINT
| IGNPAR
| ICRNL
| IXON
#ifdef IMAXBEL
| IMAXBEL
#endif
);
tty_settings->c_oflag &= ~((unsigned) (0
#ifdef OLCUC
| OLCUC
#endif
#ifdef OCRNL
| OCRNL
#endif
#ifdef ONOCR
| ONOCR
#endif
#ifdef ONLRET
| ONLRET
#endif
#ifdef OFILL
| OFILL
#endif
#ifdef OFDEL
| OFDEL
#endif
#ifdef NLDLY
| NLDLY
#endif
#ifdef CRDLY
| CRDLY
#endif
#ifdef TABDLY
| TABDLY
#endif
#ifdef BSDLY
| BSDLY
#endif
#ifdef VTDLY
| VTDLY
#endif
#ifdef FFDLY
| FFDLY
#endif
));
tty_settings->c_oflag |= (OPOST
#ifdef ONLCR
| ONLCR
#endif
);
tty_settings->c_cflag &= ~((unsigned) (CSIZE
| CSTOPB
| PARENB
| PARODD
| CLOCAL));
tty_settings->c_cflag |= (CS8 | CREAD);
tty_settings->c_lflag &= ~((unsigned) (ECHONL
| NOFLSH
#ifdef TOSTOP
| TOSTOP
#endif
#ifdef ECHOPTR
| ECHOPRT
#endif
#ifdef XCASE
| XCASE
#endif
));
tty_settings->c_lflag |= (ISIG
| ICANON
| ECHO
| ECHOE
| ECHOK
#ifdef ECHOCTL
| ECHOCTL
#endif
#ifdef ECHOKE
| ECHOKE
#endif
);
#endif
SET_TTY(fd, tty_settings);
}
/*
* Returns a "good" value for the erase character. This is loosely based on
* the BSD4.4 logic.
*/
static int
default_erase(void)
{
int result;
if (over_strike
&& VALID_STRING(key_backspace)
&& strlen(key_backspace) == 1) {
result = key_backspace[0];
} else {
result = CERASE;
}
return result;
}
/*
* Update the values of the erase, interrupt, and kill characters in the TTY
* parameter.
*
* SVr4 tset (e.g., Solaris 2.5) only modifies the intr, quit or erase
* characters if they're unset, or if we specify them as options. This differs
* from BSD 4.4 tset, which always sets erase.
*/
void
set_control_chars(TTY * tty_settings, int my_erase, int my_intr, int my_kill)
{
+#if defined(EXP_WIN32_DRIVER)
+ /* noop */
+ (void) tty_settings;
+ (void) my_erase;
+ (void) my_intr;
+ (void) my_kill;
+#else
if (DISABLED(tty_settings->c_cc[VERASE]) || my_erase >= 0) {
tty_settings->c_cc[VERASE] = UChar((my_erase >= 0)
? my_erase
: default_erase());
}
if (DISABLED(tty_settings->c_cc[VINTR]) || my_intr >= 0) {
tty_settings->c_cc[VINTR] = UChar((my_intr >= 0)
? my_intr
: CINTR);
}
if (DISABLED(tty_settings->c_cc[VKILL]) || my_kill >= 0) {
tty_settings->c_cc[VKILL] = UChar((my_kill >= 0)
? my_kill
: CKILL);
}
+#endif
}
/*
* Set up various conversions in the TTY parameter, including parity, tabs,
* returns, echo, and case, according to the termcap entry.
*/
void
set_conversions(TTY * tty_settings)
{
+#if defined(EXP_WIN32_DRIVER)
+ /* FIXME */
+#else
#ifdef ONLCR
tty_settings->c_oflag |= ONLCR;
#endif
tty_settings->c_iflag |= ICRNL;
tty_settings->c_lflag |= ECHO;
#ifdef OXTABS
tty_settings->c_oflag |= OXTABS;
#endif /* OXTABS */
/* test used to be tgetflag("NL") */
if (VALID_STRING(newline) && newline[0] == '\n' && !newline[1]) {
/* Newline, not linefeed. */
#ifdef ONLCR
tty_settings->c_oflag &= ~((unsigned) ONLCR);
#endif
tty_settings->c_iflag &= ~((unsigned) ICRNL);
}
#ifdef OXTABS
/* test used to be tgetflag("pt") */
if (VALID_STRING(set_tab) && VALID_STRING(clear_all_tabs))
tty_settings->c_oflag &= ~OXTABS;
#endif /* OXTABS */
tty_settings->c_lflag |= (ECHOE | ECHOK);
+#endif
}
static bool
sent_string(const char *s)
{
bool sent = FALSE;
if (VALID_STRING(s)) {
tputs(s, 0, out_char);
sent = TRUE;
}
return sent;
}
static bool
to_left_margin(void)
{
if (VALID_STRING(carriage_return)) {
sent_string(carriage_return);
} else {
out_char('\r');
}
return TRUE;
}
/*
* Set the hardware tabs on the terminal, using the 'ct' (clear all tabs),
* 'st' (set one tab) and 'ch' (horizontal cursor addressing) capabilities.
* This is done before 'if' and 'is', so they can recover in case of error.
*
* Return TRUE if we set any tab stops, FALSE if not.
*/
static bool
reset_tabstops(int wide)
{
if ((init_tabs != 8)
&& VALID_NUMERIC(init_tabs)
&& VALID_STRING(set_tab)
&& VALID_STRING(clear_all_tabs)) {
int c;
to_left_margin();
tputs(clear_all_tabs, 0, out_char);
if (init_tabs > 1) {
if (init_tabs > wide)
init_tabs = (short) wide;
for (c = init_tabs; c < wide; c += init_tabs) {
fprintf(my_file, "%*s", init_tabs, " ");
tputs(set_tab, 0, out_char);
}
to_left_margin();
}
return (TRUE);
}
return (FALSE);
}
/* Output startup string. */
bool
send_init_strings(int fd GCC_UNUSED, TTY * old_settings)
{
int i;
bool need_flush = FALSE;
(void) old_settings;
#ifdef TAB3
if (old_settings != 0 &&
old_settings->c_oflag & (TAB3 | ONLCR | OCRNL | ONLRET)) {
old_settings->c_oflag &= (TAB3 | ONLCR | OCRNL | ONLRET);
SET_TTY(fd, old_settings);
}
#endif
if (use_reset || use_init) {
if (VALID_STRING(init_prog)) {
IGNORE_RC(system(init_prog));
}
need_flush |= sent_string((use_reset && (reset_1string != 0))
? reset_1string
: init_1string);
need_flush |= sent_string((use_reset && (reset_2string != 0))
? reset_2string
: init_2string);
if (VALID_STRING(clear_margins)) {
need_flush |= sent_string(clear_margins);
} else
#if defined(set_lr_margin)
if (VALID_STRING(set_lr_margin)) {
- need_flush |= sent_string(TPARM_2(set_lr_margin, 0,
- columns - 1));
+ need_flush |= sent_string(TIPARM_2(set_lr_margin, 0, columns - 1));
} else
#endif
#if defined(set_left_margin_parm) && defined(set_right_margin_parm)
if (VALID_STRING(set_left_margin_parm)
&& VALID_STRING(set_right_margin_parm)) {
- need_flush |= sent_string(TPARM_1(set_left_margin_parm, 0));
- need_flush |= sent_string(TPARM_1(set_right_margin_parm,
- columns - 1));
+ need_flush |= sent_string(TIPARM_1(set_left_margin_parm, 0));
+ need_flush |= sent_string(TIPARM_1(set_right_margin_parm,
+ columns - 1));
} else
#endif
if (VALID_STRING(set_left_margin)
&& VALID_STRING(set_right_margin)) {
need_flush |= to_left_margin();
need_flush |= sent_string(set_left_margin);
if (VALID_STRING(parm_right_cursor)) {
- need_flush |= sent_string(TPARM_1(parm_right_cursor,
- columns - 1));
+ need_flush |= sent_string(TIPARM_1(parm_right_cursor,
+ columns - 1));
} else {
for (i = 0; i < columns - 1; i++) {
out_char(' ');
need_flush = TRUE;
}
}
need_flush |= sent_string(set_right_margin);
need_flush |= to_left_margin();
}
need_flush |= reset_tabstops(columns);
need_flush |= cat_file((use_reset && reset_file) ? reset_file : init_file);
need_flush |= sent_string((use_reset && (reset_3string != 0))
? reset_3string
: init_3string);
}
return need_flush;
}
/*
* Tell the user if a control key has been changed from the default value.
*/
static void
show_tty_change(TTY * old_settings,
TTY * new_settings,
const char *name,
int which,
unsigned def)
{
- unsigned older, newer;
+ unsigned older = 0, newer = 0;
char *p;
+#if defined(EXP_WIN32_DRIVER)
+ /* noop */
+ (void) old_settings;
+ (void) new_settings;
+ (void) name;
+ (void) which;
+ (void) def;
+#else
newer = new_settings->c_cc[which];
older = old_settings->c_cc[which];
if (older == newer && older == def)
return;
-
+#endif
(void) fprintf(stderr, "%s %s ", name, older == newer ? "is" : "set to");
if (DISABLED(newer)) {
(void) fprintf(stderr, "undef.\n");
/*
* Check 'delete' before 'backspace', since the key_backspace value
* is ambiguous.
*/
} else if (newer == 0177) {
(void) fprintf(stderr, "delete.\n");
} else if ((p = key_backspace) != 0
&& newer == (unsigned char) p[0]
&& p[1] == '\0') {
(void) fprintf(stderr, "backspace.\n");
} else if (newer < 040) {
newer ^= 0100;
(void) fprintf(stderr, "control-%c (^%c).\n", UChar(newer), UChar(newer));
} else
(void) fprintf(stderr, "%c.\n", UChar(newer));
}
/**************************************************************************
* Miscellaneous.
**************************************************************************/
void
reset_start(FILE *fp, bool is_reset, bool is_init)
{
my_file = fp;
use_reset = is_reset;
use_init = is_init;
}
void
reset_flush(void)
{
if (my_file != 0)
fflush(my_file);
}
void
print_tty_chars(TTY * old_settings, TTY * new_settings)
{
+#if defined(EXP_WIN32_DRIVER)
+ /* noop */
+#else
show_tty_change(old_settings, new_settings, "Erase", VERASE, CERASE);
show_tty_change(old_settings, new_settings, "Kill", VKILL, CKILL);
show_tty_change(old_settings, new_settings, "Interrupt", VINTR, CINTR);
+#endif
}
#if HAVE_SIZECHANGE
/*
* Set window size if not set already, but update our copy of the values if the
* size was set.
*/
void
set_window_size(int fd, short *high, short *wide)
{
STRUCT_WINSIZE win;
(void) ioctl(fd, IOCTL_GET_WINSIZE, &win);
if (WINSIZE_ROWS(win) == 0 &&
WINSIZE_COLS(win) == 0) {
if (*high > 0 && *wide > 0) {
WINSIZE_ROWS(win) = (unsigned short) *high;
WINSIZE_COLS(win) = (unsigned short) *wide;
(void) ioctl(fd, IOCTL_SET_WINSIZE, &win);
}
} else if (WINSIZE_ROWS(win) > 0 &&
WINSIZE_COLS(win) > 0) {
*high = (short) WINSIZE_ROWS(win);
*wide = (short) WINSIZE_COLS(win);
}
}
#endif
diff --git a/contrib/ncurses/progs/tabs.c b/contrib/ncurses/progs/tabs.c
index 8a3bc108fe8d..0539e85653ea 100644
--- a/contrib/ncurses/progs/tabs.c
+++ b/contrib/ncurses/progs/tabs.c
@@ -1,552 +1,552 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 2008-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey 2008 *
****************************************************************************/
/*
* tabs.c -- set terminal hard-tabstops
*/
#define USE_LIBTINFO
#include <progs.priv.h>
#include <tty_settings.h>
-MODULE_ID("$Id: tabs.c,v 1.42 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: tabs.c,v 1.45 2020/05/27 23:47:22 tom Exp $")
static void usage(void) GCC_NORETURN;
const char *_nc_progname;
static int max_cols;
static void
failed(const char *s)
{
perror(s);
ExitProgram(EXIT_FAILURE);
}
static int
putch(int c)
{
return putchar(c);
}
static void
do_tabs(int *tab_list)
{
int last = 1;
int stop;
putchar('\r');
while ((stop = *tab_list++) > 0) {
if (last < stop) {
while (last++ < stop) {
if (last > max_cols)
break;
putchar(' ');
}
}
if (stop <= max_cols) {
- tputs(tparm(set_tab, stop), 1, putch);
+ tputs(TIPARM_1(set_tab, stop), 1, putch);
last = stop;
} else {
break;
}
}
putchar('\r');
}
static int *
decode_tabs(const char *tab_list)
{
int *result = typeCalloc(int, strlen(tab_list) + (unsigned) max_cols);
int n = 0;
int value = 0;
int prior = 0;
int ch;
if (result == 0)
failed("decode_tabs");
while ((ch = *tab_list++) != '\0') {
if (isdigit(UChar(ch))) {
value *= 10;
value += (ch - '0');
} else if (ch == ',') {
result[n] = value + prior;
if (n > 0 && result[n] <= result[n - 1]) {
fprintf(stderr,
"%s: tab-stops are not in increasing order: %d %d\n",
_nc_progname, value, result[n - 1]);
free(result);
result = 0;
break;
}
++n;
value = 0;
prior = 0;
} else if (ch == '+') {
if (n)
prior = result[n - 1];
}
}
if (result != 0) {
/*
* If there is only one value, then it is an option such as "-8".
*/
if ((n == 0) && (value > 0)) {
int step = value;
value = 1;
while (n < max_cols - 1) {
result[n++] = value;
value += step;
}
}
/*
* Add the last value, if any.
*/
result[n++] = value + prior;
result[n] = 0;
}
return result;
}
static void
print_ruler(int *tab_list)
{
int last = 0;
int stop;
int n;
/* first print a readable ruler */
for (n = 0; n < max_cols; n += 10) {
int ch = 1 + (n / 10);
char buffer[20];
_nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer))
"----+----%c",
((ch < 10)
? (ch + '0')
: (ch + 'A' - 10)));
printf("%.*s", ((max_cols - n) > 10) ? 10 : (max_cols - n), buffer);
}
putchar('\n');
/* now, print '*' for each stop */
for (n = 0, last = 0; (tab_list[n] > 0) && (last < max_cols); ++n) {
stop = tab_list[n];
while (++last < stop) {
if (last <= max_cols) {
putchar('-');
} else {
break;
}
}
if (last <= max_cols) {
putchar('*');
last = stop;
} else {
break;
}
}
while (++last <= max_cols)
putchar('-');
putchar('\n');
}
/*
* Write an '*' on each tabstop, to demonstrate whether it lines up with the
* ruler.
*/
static void
write_tabs(int *tab_list)
{
int stop;
while ((stop = *tab_list++) > 0 && stop <= max_cols) {
fputs((stop == 1) ? "*" : "\t*", stdout);
};
/* also show a tab _past_ the stops */
if (stop < max_cols)
fputs("\t+", stdout);
putchar('\n');
}
/*
* Trim leading/trailing blanks, as well as blanks after a comma.
* Convert embedded blanks to commas.
*/
static char *
trimmed_tab_list(const char *source)
{
char *result = strdup(source);
int ch, j, k, last;
if (result != 0) {
for (j = k = last = 0; result[j] != 0; ++j) {
ch = UChar(result[j]);
if (isspace(ch)) {
if (last == '\0') {
continue;
} else if (isdigit(last) || last == ',') {
ch = ',';
}
} else if (ch == ',') {
;
} else {
if (last == ',')
result[k++] = (char) last;
result[k++] = (char) ch;
}
last = ch;
}
result[k] = '\0';
}
return result;
}
static bool
comma_is_needed(const char *source)
{
bool result = FALSE;
if (source != 0) {
size_t len = strlen(source);
if (len != 0)
result = (source[len - 1] != ',');
} else {
result = FALSE;
}
return result;
}
/*
* Add a command-line parameter to the tab-list. It can be blank- or comma-
* separated (or a mixture). For simplicity, empty tabs are ignored, e.g.,
* tabs 1,,6,11
* tabs 1,6,11
* are treated the same.
*/
static const char *
add_to_tab_list(char **append, const char *value)
{
char *result = *append;
char *copied = trimmed_tab_list(value);
if (copied != 0 && *copied != '\0') {
const char *comma = ",";
size_t need = 1 + strlen(copied);
if (*copied == ',')
comma = "";
else if (!comma_is_needed(*append))
comma = "";
need += strlen(comma);
if (*append != 0)
need += strlen(*append);
result = malloc(need);
if (result == 0)
failed("add_to_tab_list");
*result = '\0';
if (*append != 0) {
_nc_STRCPY(result, *append, need);
free(*append);
}
_nc_STRCAT(result, comma, need);
_nc_STRCAT(result, copied, need);
*append = result;
}
free(copied);
return result;
}
/*
* Check for illegal characters in the tab-list.
*/
static bool
legal_tab_list(const char *tab_list)
{
bool result = TRUE;
if (tab_list != 0 && *tab_list != '\0') {
if (comma_is_needed(tab_list)) {
int n, ch;
for (n = 0; tab_list[n] != '\0'; ++n) {
ch = UChar(tab_list[n]);
if (!(isdigit(ch) || ch == ',' || ch == '+')) {
fprintf(stderr,
"%s: unexpected character found '%c'\n",
_nc_progname, ch);
result = FALSE;
break;
}
}
} else {
fprintf(stderr, "%s: trailing comma found '%s'\n", _nc_progname, tab_list);
result = FALSE;
}
} else {
fprintf(stderr, "%s: no tab-list given\n", _nc_progname);
result = FALSE;
}
return result;
}
static char *
skip_list(char *value)
{
while (*value != '\0' &&
(isdigit(UChar(*value)) ||
isspace(UChar(*value)) ||
strchr("+,", UChar(*value)) != 0)) {
++value;
}
return value;
}
static void
usage(void)
{
#define DATA(s) s "\n"
static const char msg[] =
{
DATA("Usage: tabs [options] [tabstop-list]")
DATA("")
DATA("Options:")
DATA(" -0 reset tabs")
DATA(" -8 set tabs to standard interval")
DATA(" -a Assembler, IBM S/370, first format")
DATA(" -a2 Assembler, IBM S/370, second format")
DATA(" -c COBOL, normal format")
DATA(" -c2 COBOL compact format")
DATA(" -c3 COBOL compact format extended")
DATA(" -d debug (show ruler with expected/actual tab positions)")
DATA(" -f FORTRAN")
DATA(" -n no-op (do not modify terminal settings)")
DATA(" -p PL/I")
DATA(" -s SNOBOL")
DATA(" -u UNIVAC 1100 Assembler")
DATA(" -T name use terminal type 'name'")
DATA(" -V print version")
DATA("")
DATA("A tabstop-list is an ordered list of column numbers, e.g., 1,11,21")
DATA("or 1,+10,+10 which is the same.")
};
#undef DATA
fflush(stdout);
fputs(msg, stderr);
ExitProgram(EXIT_FAILURE);
}
int
main(int argc, char *argv[])
{
int rc = EXIT_FAILURE;
bool debug = FALSE;
bool no_op = FALSE;
int n, ch;
NCURSES_CONST char *term_name = 0;
char *append = 0;
const char *tab_list = 0;
TTY tty_settings;
int fd;
_nc_progname = _nc_rootname(argv[0]);
fd = save_tty_settings(&tty_settings, FALSE);
if ((term_name = getenv("TERM")) == 0)
term_name = "ansi+tabs";
/* cannot use getopt, since some options are two-character */
for (n = 1; n < argc; ++n) {
char *option = argv[n];
switch (option[0]) {
case '-':
while ((ch = *++option) != '\0') {
switch (ch) {
case 'a':
switch (*++option) {
default:
case '\0':
tab_list = "1,10,16,36,72";
option--;
/* Assembler, IBM S/370, first format */
break;
case '2':
tab_list = "1,10,16,40,72";
/* Assembler, IBM S/370, second format */
break;
}
break;
case 'c':
switch (*++option) {
default:
case '\0':
tab_list = "1,8,12,16,20,55";
option--;
/* COBOL, normal format */
break;
case '2':
tab_list = "1,6,10,14,49";
/* COBOL compact format */
break;
case '3':
tab_list = "1,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62,67";
/* COBOL compact format extended */
break;
}
break;
case 'd': /* ncurses extension */
debug = TRUE;
break;
case 'f':
tab_list = "1,7,11,15,19,23";
/* FORTRAN */
break;
case 'n': /* ncurses extension */
no_op = TRUE;
break;
case 'p':
tab_list = "1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61";
/* PL/I */
break;
case 's':
tab_list = "1,10,55";
/* SNOBOL */
break;
case 'u':
tab_list = "1,12,20,44";
/* UNIVAC 1100 Assembler */
break;
case 'T':
++n;
if (*++option != '\0') {
term_name = option;
} else {
term_name = argv[n];
option--;
}
option += ((int) strlen(option)) - 1;
continue;
case 'V':
puts(curses_version());
ExitProgram(EXIT_SUCCESS);
default:
if (isdigit(UChar(*option))) {
char *copy = strdup(option);
*skip_list(copy) = '\0';
tab_list = copy;
option = skip_list(option) - 1;
} else {
usage();
}
break;
}
}
break;
case '+':
while ((ch = *++option) != '\0') {
switch (ch) {
case 'm':
/*
* The "+mXXX" option is unimplemented because only the long-obsolete
* att510d implements smgl, which is needed to support
* this option.
*/
break;
default:
/* special case of relative stops separated by spaces? */
if (option == argv[n] + 1) {
tab_list = add_to_tab_list(&append, argv[n]);
}
break;
}
}
break;
default:
if (append != 0) {
if (tab_list != (const char *) append) {
/* one of the predefined options was used */
free(append);
append = 0;
}
}
tab_list = add_to_tab_list(&append, option);
break;
}
}
setupterm(term_name, fd, (int *) 0);
max_cols = (columns > 0) ? columns : 80;
if (!VALID_STRING(clear_all_tabs)) {
fprintf(stderr,
"%s: terminal type '%s' cannot reset tabs\n",
_nc_progname, term_name);
} else if (!VALID_STRING(set_tab)) {
fprintf(stderr,
"%s: terminal type '%s' cannot set tabs\n",
_nc_progname, term_name);
} else if (legal_tab_list(tab_list)) {
int *list = decode_tabs(tab_list);
if (!no_op)
tputs(clear_all_tabs, 1, putch);
if (list != 0) {
if (!no_op)
do_tabs(list);
if (debug) {
fflush(stderr);
printf("tabs %s\n", tab_list);
print_ruler(list);
write_tabs(list);
}
free(list);
} else if (debug) {
fflush(stderr);
printf("tabs %s\n", tab_list);
}
rc = EXIT_SUCCESS;
}
if (append != 0)
free(append);
ExitProgram(rc);
}
diff --git a/contrib/ncurses/progs/tic.c b/contrib/ncurses/progs/tic.c
index 328bcd6b2772..9b02a23216fa 100644
--- a/contrib/ncurses/progs/tic.c
+++ b/contrib/ncurses/progs/tic.c
@@ -1,3069 +1,3117 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2017,2018 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996 on *
****************************************************************************/
/*
* tic.c --- Main program for terminfo compiler
* by Eric S. Raymond
* and Thomas E Dickey
*
*/
#include <progs.priv.h>
#include <sys/stat.h>
#include <dump_entry.h>
#include <tparm_type.h>
#include <hashed_db.h>
#include <parametrized.h>
#include <transform.h>
-MODULE_ID("$Id: tic.c,v 1.282 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: tic.c,v 1.291 2021/02/20 23:57:24 tom Exp $")
#define STDIN_NAME "<stdin>"
const char *_nc_progname = "tic";
static FILE *log_fp;
static FILE *tmp_fp;
static bool capdump = FALSE; /* running as infotocap? */
static bool infodump = FALSE; /* running as captoinfo? */
static bool showsummary = FALSE;
static unsigned debug_level;
static char **namelst = 0;
static const char *to_remove;
#if NCURSES_XNAMES
static bool using_extensions = FALSE;
#endif
static void (*save_check_termtype) (TERMTYPE2 *, bool);
static void check_termtype(TERMTYPE2 *tt, bool);
static const char usage_string[] = "\
[-e names] \
[-o dir] \
[-R name] \
[-v[n]] \
[-V] \
[-w[n]] \
[-\
1\
a\
C\
D\
c\
f\
G\
g\
I\
K\
L\
N\
r\
s\
T\
t\
U\
x\
] \
source-file\n";
#if NO_LEAKS
static void
free_namelist(char **src)
{
if (src != 0) {
int n;
for (n = 0; src[n] != 0; ++n)
free(src[n]);
free(src);
}
}
#endif
static void
cleanup(void)
{
int rc;
#if NO_LEAKS
free_namelist(namelst);
_nc_leaks_dump_entry();
#endif
if (tmp_fp != 0)
fclose(tmp_fp);
if (to_remove != 0) {
#if HAVE_REMOVE
rc = remove(to_remove);
#else
rc = unlink(to_remove);
#endif
if (rc != 0)
perror(to_remove);
}
}
static void
failed(const char *msg)
{
perror(msg);
ExitProgram(EXIT_FAILURE);
}
static void
usage(void)
{
#define DATA(s) s "\n"
static const char options_string[] =
{
DATA("Options:")
DATA(" -0 format translation output all capabilities on one line")
DATA(" -1 format translation output one capability per line")
#if NCURSES_XNAMES
DATA(" -a retain commented-out capabilities (sets -x also)")
#endif
DATA(" -C translate entries to termcap source form")
DATA(" -D print list of tic's database locations (first must be writable)")
DATA(" -c check only, validate input without compiling or translating")
DATA(" -e<names> translate/compile only entries named by comma-separated list")
DATA(" -f format complex strings for readability")
DATA(" -G format %{number} to %'char'")
DATA(" -g format %'char' to %{number}")
DATA(" -I translate entries to terminfo source form")
DATA(" -K translate entries to termcap source form with BSD syntax")
DATA(" -L translate entries to full terminfo source form")
DATA(" -N disable smart defaults for source translation")
DATA(" -o<dir> set output directory for compiled entry writes")
DATA(" -Q[n] dump compiled description")
DATA(" -q brief listing, removes headers")
DATA(" -R<name> restrict translation to given terminfo/termcap version")
DATA(" -r force resolution of all use entries in source translation")
DATA(" -s print summary statistics")
DATA(" -T remove size-restrictions on compiled description")
#if NCURSES_XNAMES
DATA(" -t suppress commented-out capabilities")
#endif
DATA(" -U suppress post-processing of entries")
DATA(" -V print version")
DATA(" -W wrap long strings according to -w[n] option")
DATA(" -v[n] set verbosity level")
DATA(" -w[n] set format width for translation output")
#if NCURSES_XNAMES
DATA(" -x treat unknown capabilities as user-defined")
#endif
DATA("")
DATA("Parameters:")
DATA(" <file> file to translate or compile")
};
#undef DATA
fprintf(stderr, "Usage: %s %s\n", _nc_progname, usage_string);
fputs(options_string, stderr);
ExitProgram(EXIT_FAILURE);
}
#define L_BRACE '{'
#define R_BRACE '}'
#define S_QUOTE '\''
static void
write_it(ENTRY * ep)
{
unsigned n;
int ch;
char *s, *d, *t;
char result[MAX_ENTRY_SIZE];
/*
* Look for strings that contain %{number}, convert them to %'char',
* which is shorter and runs a little faster.
*/
for (n = 0; n < STRCOUNT; n++) {
s = ep->tterm.Strings[n];
if (VALID_STRING(s)
&& strchr(s, L_BRACE) != 0) {
d = result;
t = s;
while ((ch = *t++) != 0) {
*d++ = (char) ch;
if (ch == '\\') {
if ((*d++ = *t++) == '\0')
break;
} else if ((ch == '%')
&& (*t == L_BRACE)) {
char *v = 0;
long value = strtol(t + 1, &v, 0);
if (v != 0
&& *v == R_BRACE
&& value > 0
&& value != '\\' /* FIXME */
&& value < 127
&& isprint((int) value)) {
*d++ = S_QUOTE;
*d++ = (char) value;
*d++ = S_QUOTE;
t = (v + 1);
}
}
}
*d = 0;
if (strlen(result) < strlen(s))
_nc_STRCPY(s, result, strlen(s) + 1);
}
}
_nc_set_type(_nc_first_name(ep->tterm.term_names));
_nc_curr_line = (int) ep->startline;
_nc_write_entry(&ep->tterm);
}
static bool
immedhook(ENTRY * ep GCC_UNUSED)
/* write out entries with no use capabilities immediately to save storage */
{
#if !HAVE_BIG_CORE
/*
* This is strictly a core-economy kluge. The really clean way to handle
* compilation is to slurp the whole file into core and then do all the
* name-collision checks and entry writes in one swell foop. But the
* terminfo master file is large enough that some core-poor systems swap
* like crazy when you compile it this way...there have been reports of
* this process taking *three hours*, rather than the twenty seconds or
* less typical on my development box.
*
* So. This hook *immediately* writes out the referenced entry if it
* has no use capabilities. The compiler main loop refrains from
* adding the entry to the in-core list when this hook fires. If some
* other entry later needs to reference an entry that got written
* immediately, that's OK; the resolution code will fetch it off disk
* when it can't find it in core.
*
* Name collisions will still be detected, just not as cleanly. The
* write_entry() code complains before overwriting an entry that
* postdates the time of tic's first call to write_entry(). Thus
* it will complain about overwriting entries newly made during the
* tic run, but not about overwriting ones that predate it.
*
* The reason this is a hook, and not in line with the rest of the
* compiler code, is that the support for termcap fallback cannot assume
* it has anywhere to spool out these entries!
*
* The _nc_set_type() call here requires a compensating one in
* _nc_parse_entry().
*
* If you define HAVE_BIG_CORE, you'll disable this kluge. This will
* make tic a bit faster (because the resolution code won't have to do
* disk I/O nearly as often).
*/
if (ep->nuses == 0) {
int oldline = _nc_curr_line;
write_it(ep);
_nc_curr_line = oldline;
free(ep->tterm.str_table);
return (TRUE);
}
#endif /* HAVE_BIG_CORE */
return (FALSE);
}
static void
put_translate(int c)
/* emit a comment char, translating terminfo names to termcap names */
{
static bool in_name = FALSE;
static size_t have, used;
static char *namebuf, *suffix;
if (in_name) {
if (used + 1 >= have) {
have += 132;
if ((namebuf = typeRealloc(char, have, namebuf)) == 0)
failed("put_translate namebuf");
if ((suffix = typeRealloc(char, have, suffix)) == 0)
failed("put_translate suffix");
}
if (c == '\n' || c == '@') {
namebuf[used++] = '\0';
(void) putchar('<');
(void) fputs(namebuf, stdout);
putchar(c);
in_name = FALSE;
} else if (c != '>') {
namebuf[used++] = (char) c;
} else { /* ah! candidate name! */
char *up;
NCURSES_CONST char *tp;
namebuf[used++] = '\0';
in_name = FALSE;
suffix[0] = '\0';
if ((up = strchr(namebuf, '#')) != 0
|| (up = strchr(namebuf, '=')) != 0
|| ((up = strchr(namebuf, '@')) != 0 && up[1] == '>')) {
_nc_STRCPY(suffix, up, have);
*up = '\0';
}
if ((tp = nametrans(namebuf)) != 0) {
(void) putchar(':');
(void) fputs(tp, stdout);
(void) fputs(suffix, stdout);
(void) putchar(':');
} else {
/* couldn't find a translation, just dump the name */
(void) putchar('<');
(void) fputs(namebuf, stdout);
(void) fputs(suffix, stdout);
(void) putchar('>');
}
}
} else {
used = 0;
if (c == '<') {
in_name = TRUE;
} else {
putchar(c);
}
}
}
/* Returns a string, stripped of leading/trailing whitespace */
static char *
stripped(char *src)
{
char *dst = 0;
while (isspace(UChar(*src)))
src++;
if (*src != '\0') {
size_t len;
if ((dst = strdup(src)) == NULL) {
failed("strdup");
} else {
len = strlen(dst);
while (--len != 0 && isspace(UChar(dst[len])))
dst[len] = '\0';
}
}
return dst;
}
static FILE *
open_tempfile(char *filename)
{
FILE *result = 0;
_nc_STRCPY(filename, "/tmp/XXXXXX", PATH_MAX);
#if HAVE_MKSTEMP
{
int oldmask = (int) umask(077);
int fd = mkstemp(filename);
if (fd >= 0)
result = fdopen(fd, "w");
umask((mode_t) oldmask);
}
#else
if (tmpnam(filename) != 0)
result = fopen(filename, "w");
#endif
return result;
}
static FILE *
copy_input(FILE *source, const char *filename, char *alt_file)
{
char my_altfile[PATH_MAX];
FILE *result = 0;
FILE *target = 0;
int ch;
if (alt_file == 0)
alt_file = my_altfile;
if (source == 0) {
failed("copy_input (source)");
} else if ((target = open_tempfile(alt_file)) == 0) {
failed("copy_input (target)");
} else {
clearerr(source);
for (;;) {
ch = fgetc(source);
if (feof(source)) {
break;
} else if (ferror(source)) {
failed(filename);
} else if (ch == 0) {
/* don't loop in case someone wants to convert /dev/zero */
fprintf(stderr, "%s: %s is not a text-file\n", _nc_progname, filename);
ExitProgram(EXIT_FAILURE);
}
fputc(ch, target);
}
fclose(source);
/*
* rewind() does not force the target file's data to disk (not does
* fflush()...). So open a second stream on the data and then close
* the one that we were writing on before starting to read from the
* second stream.
*/
result = fopen(alt_file, "r+");
fclose(target);
to_remove = strdup(alt_file);
}
return result;
}
static FILE *
open_input(const char *filename, char *alt_file)
{
FILE *fp;
struct stat sb;
int mode;
if (!strcmp(filename, "-")) {
fp = copy_input(stdin, STDIN_NAME, alt_file);
} else if (stat(filename, &sb) < 0) {
fprintf(stderr, "%s: %s %s\n", _nc_progname, filename, strerror(errno));
ExitProgram(EXIT_FAILURE);
} else if ((mode = (sb.st_mode & S_IFMT)) == S_IFDIR
|| (mode != S_IFREG && mode != S_IFCHR && mode != S_IFIFO)) {
fprintf(stderr, "%s: %s is not a file\n", _nc_progname, filename);
ExitProgram(EXIT_FAILURE);
} else {
fp = fopen(filename, "r");
if (fp == 0) {
fprintf(stderr, "%s: Can't open %s\n", _nc_progname, filename);
ExitProgram(EXIT_FAILURE);
}
if (mode != S_IFREG) {
if (alt_file != 0) {
FILE *fp2 = copy_input(fp, filename, alt_file);
fp = fp2;
} else {
fprintf(stderr, "%s: %s is not a file\n", _nc_progname, filename);
ExitProgram(EXIT_FAILURE);
}
}
}
return fp;
}
/* Parse the "-e" option-value into a list of names */
static char **
make_namelist(char *src)
{
char **dst = 0;
char *s, *base;
unsigned pass, n, nn;
char buffer[BUFSIZ];
if (src == 0) {
/* EMPTY */ ;
} else if (strchr(src, '/') != 0) { /* a filename */
FILE *fp = open_input(src, (char *) 0);
for (pass = 1; pass <= 2; pass++) {
nn = 0;
while (fgets(buffer, sizeof(buffer), fp) != 0) {
if ((s = stripped(buffer)) != 0) {
if (dst != 0)
dst[nn] = s;
else
free(s);
nn++;
}
}
if (pass == 1) {
if ((dst = typeCalloc(char *, nn + 1)) == 0)
failed("make_namelist");
rewind(fp);
}
}
fclose(fp);
} else { /* literal list of names */
for (pass = 1; pass <= 2; pass++) {
for (n = nn = 0, base = src;; n++) {
int mark = src[n];
if (mark == ',' || mark == '\0') {
if (pass == 1) {
nn++;
} else {
src[n] = '\0';
if ((s = stripped(base)) != 0)
dst[nn++] = s;
base = &src[n + 1];
}
}
if (mark == '\0')
break;
}
if (pass == 1) {
if ((dst = typeCalloc(char *, nn + 1)) == 0)
failed("make_namelist");
}
}
}
if (showsummary && (dst != 0)) {
fprintf(log_fp, "Entries that will be compiled:\n");
for (n = 0; dst[n] != 0; n++)
fprintf(log_fp, "%u:%s\n", n + 1, dst[n]);
}
return dst;
}
static bool
matches(char **needle, const char *haystack)
/* does entry in needle list match |-separated field in haystack? */
{
bool code = FALSE;
size_t n;
if (needle != 0) {
for (n = 0; needle[n] != 0; n++) {
if (_nc_name_match(haystack, needle[n], "|")) {
code = TRUE;
break;
}
}
} else
code = TRUE;
return (code);
}
static char *
valid_db_path(const char *nominal)
{
struct stat sb;
#if USE_HASHED_DB
char suffix[] = DBM_SUFFIX;
size_t need = strlen(nominal) + sizeof(suffix);
char *result = malloc(need);
if (result == 0)
failed("valid_db_path");
_nc_STRCPY(result, nominal, need);
if (strcmp(result + need - sizeof(suffix), suffix)) {
_nc_STRCAT(result, suffix, need);
}
#else
char *result = strdup(nominal);
#endif
DEBUG(1, ("** stat(%s)", result));
if (stat(result, &sb) >= 0) {
#if USE_HASHED_DB
if (!S_ISREG(sb.st_mode)
|| access(result, R_OK | W_OK) != 0) {
DEBUG(1, ("...not a writable file"));
free(result);
result = 0;
}
#else
if (!S_ISDIR(sb.st_mode)
|| access(result, R_OK | W_OK | X_OK) != 0) {
DEBUG(1, ("...not a writable directory"));
free(result);
result = 0;
}
#endif
} else {
/* check if parent is directory and is writable */
unsigned leaf = _nc_pathlast(result);
DEBUG(1, ("...not found"));
if (leaf) {
char save = result[leaf];
result[leaf] = 0;
if (stat(result, &sb) >= 0
&& S_ISDIR(sb.st_mode)
&& access(result, R_OK | W_OK | X_OK) == 0) {
result[leaf] = save;
} else {
DEBUG(1, ("...parent directory %s is not writable", result));
free(result);
result = 0;
}
} else {
DEBUG(1, ("... no parent directory"));
free(result);
result = 0;
}
}
return result;
}
/*
* Show the databases to which tic could write. The location to which it
* writes is always the first one. If none are writable, print an error
* message.
*/
static void
show_databases(const char *outdir)
{
bool specific = (outdir != 0) || getenv("TERMINFO") != 0;
char *result;
const char *tried = 0;
if (outdir == 0) {
outdir = _nc_tic_dir(0);
}
if ((result = valid_db_path(outdir)) != 0) {
printf("%s\n", result);
free(result);
} else {
tried = outdir;
}
if ((outdir = _nc_home_terminfo())) {
if ((result = valid_db_path(outdir)) != 0) {
printf("%s\n", result);
free(result);
} else if (!specific) {
tried = outdir;
}
}
/*
* If we can write in neither location, give an error message.
*/
if (tried) {
fflush(stdout);
fprintf(stderr, "%s: %s (no permission)\n", _nc_progname, tried);
ExitProgram(EXIT_FAILURE);
}
}
static void
add_digit(int *target, int source)
{
*target = (*target * 10) + (source - '0');
}
int
main(int argc, char *argv[])
{
char my_tmpname[PATH_MAX];
char my_altfile[PATH_MAX];
int v_opt = -1;
int smart_defaults = TRUE;
char *termcap;
ENTRY *qp;
int this_opt, last_opt = '?';
int outform = F_TERMINFO; /* output format */
int sortmode = S_TERMINFO; /* sort_mode */
int width = 60;
int height = 65535;
bool formatted = FALSE; /* reformat complex strings? */
bool literal = FALSE; /* suppress post-processing? */
int numbers = 0; /* format "%'char'" to/from "%{number}" */
bool forceresolve = FALSE; /* force resolution */
bool limited = TRUE;
char *tversion = (char *) NULL;
const char *source_file = "terminfo";
char *outdir = (char *) NULL;
bool check_only = FALSE;
bool suppress_untranslatable = FALSE;
int quickdump = 0;
bool quiet = FALSE;
bool wrap_strings = FALSE;
log_fp = stderr;
_nc_progname = _nc_rootname(argv[0]);
atexit(cleanup);
if ((infodump = same_program(_nc_progname, PROG_CAPTOINFO)) != FALSE) {
outform = F_TERMINFO;
sortmode = S_TERMINFO;
}
if ((capdump = same_program(_nc_progname, PROG_INFOTOCAP)) != FALSE) {
outform = F_TERMCAP;
sortmode = S_TERMCAP;
}
#if NCURSES_XNAMES
use_extended_names(FALSE);
#endif
_nc_strict_bsd = 0;
/*
* Processing arguments is a little complicated, since someone made a
* design decision to allow the numeric values for -w, -v options to
* be optional.
*/
while ((this_opt = getopt(argc, argv,
"0123456789CDIKLNQR:TUVWace:fGgo:qrstvwx")) != -1) {
if (isdigit(this_opt)) {
switch (last_opt) {
case 'Q':
add_digit(&quickdump, this_opt);
break;
case 'v':
add_digit(&v_opt, this_opt);
break;
case 'w':
add_digit(&width, this_opt);
break;
default:
switch (this_opt) {
case '0':
last_opt = this_opt;
width = 65535;
height = 1;
break;
case '1':
last_opt = this_opt;
width = 0;
break;
default:
usage();
}
}
continue;
}
switch (this_opt) {
case 'K':
_nc_strict_bsd = 1;
/* the initial version of -K in 20110730 fell-thru here, but the
* same flag is useful when reading sources -TD
*/
break;
case 'C':
capdump = TRUE;
outform = F_TERMCAP;
sortmode = S_TERMCAP;
break;
case 'D':
debug_level = VtoTrace(v_opt);
set_trace_level(debug_level);
show_databases(outdir);
ExitProgram(EXIT_SUCCESS);
break;
case 'I':
infodump = TRUE;
outform = F_TERMINFO;
sortmode = S_TERMINFO;
break;
case 'L':
infodump = TRUE;
outform = F_VARIABLE;
sortmode = S_VARIABLE;
break;
case 'N':
smart_defaults = FALSE;
literal = TRUE;
break;
case 'Q':
quickdump = 0;
break;
case 'R':
tversion = optarg;
break;
case 'T':
limited = FALSE;
break;
case 'U':
literal = TRUE;
break;
case 'V':
puts(curses_version());
ExitProgram(EXIT_SUCCESS);
case 'W':
wrap_strings = TRUE;
break;
case 'c':
check_only = TRUE;
break;
case 'e':
namelst = make_namelist(optarg);
break;
case 'f':
formatted = TRUE;
break;
case 'G':
numbers = 1;
break;
case 'g':
numbers = -1;
break;
case 'o':
outdir = optarg;
break;
case 'q':
quiet = TRUE;
break;
case 'r':
forceresolve = TRUE;
break;
case 's':
showsummary = TRUE;
break;
case 'v':
v_opt = 0;
break;
case 'w':
width = 0;
break;
#if NCURSES_XNAMES
case 't':
_nc_disable_period = FALSE;
suppress_untranslatable = TRUE;
break;
case 'a':
_nc_disable_period = TRUE;
/* FALLTHRU */
case 'x':
use_extended_names(TRUE);
using_extensions = TRUE;
break;
#endif
default:
usage();
}
last_opt = this_opt;
}
debug_level = VtoTrace(v_opt);
set_trace_level(debug_level);
if (_nc_tracing) {
save_check_termtype = _nc_check_termtype2;
_nc_check_termtype2 = check_termtype;
}
#if !HAVE_BIG_CORE
/*
* Aaargh! immedhook seriously hoses us!
*
* One problem with immedhook is it means we can't do -e. Problem
* is that we can't guarantee that for each terminal listed, all the
* terminals it depends on will have been kept in core for reference
* resolution -- in fact it's certain the primitive types at the end
* of reference chains *won't* be in core unless they were explicitly
* in the select list themselves.
*/
if (namelst && (!infodump && !capdump)) {
(void) fprintf(stderr,
"%s: Sorry, -e can't be used without -I or -C\n",
_nc_progname);
ExitProgram(EXIT_FAILURE);
}
#endif /* HAVE_BIG_CORE */
if (optind < argc) {
source_file = argv[optind++];
if (optind < argc) {
fprintf(stderr,
"%s: Too many file names. Usage:\n\t%s %s",
_nc_progname,
_nc_progname,
usage_string);
ExitProgram(EXIT_FAILURE);
}
} else {
if (infodump == TRUE) {
/* captoinfo's no-argument case */
source_file = "/etc/termcap";
if ((termcap = getenv("TERMCAP")) != 0
&& (namelst = make_namelist(getenv("TERM"))) != 0) {
if (access(termcap, F_OK) == 0) {
/* file exists */
source_file = termcap;
} else {
if ((tmp_fp = open_tempfile(my_tmpname)) != 0) {
source_file = my_tmpname;
fprintf(tmp_fp, "%s\n", termcap);
fclose(tmp_fp);
tmp_fp = open_input(source_file, (char *) 0);
to_remove = source_file;
} else {
failed("tmpnam");
}
}
}
} else {
/* tic */
fprintf(stderr,
"%s: File name needed. Usage:\n\t%s %s",
_nc_progname,
_nc_progname,
usage_string);
ExitProgram(EXIT_FAILURE);
}
}
if (tmp_fp == 0) {
tmp_fp = open_input(source_file, my_altfile);
if (!strcmp(source_file, "-")) {
source_file = STDIN_NAME;
}
}
if (infodump || check_only) {
dump_init(tversion,
(smart_defaults
? outform
: F_LITERAL),
sortmode,
wrap_strings, width, height,
debug_level, formatted || check_only, check_only, quickdump);
} else if (capdump) {
dump_init(tversion,
outform,
sortmode,
wrap_strings, width, height,
debug_level, FALSE, FALSE, FALSE);
}
/* parse entries out of the source file */
_nc_set_source(source_file);
#if !HAVE_BIG_CORE
if (!(check_only || infodump || capdump))
_nc_set_writedir(outdir);
#endif /* HAVE_BIG_CORE */
_nc_read_entry_source(tmp_fp, (char *) NULL,
!smart_defaults || literal, FALSE,
((check_only || infodump || capdump)
? NULLHOOK
: immedhook));
/* do use resolution */
if (check_only || (!infodump && !capdump) || forceresolve) {
if (!_nc_resolve_uses2(TRUE, literal) && !check_only) {
ExitProgram(EXIT_FAILURE);
}
}
/* length check */
if (check_only && limited && (capdump || infodump)) {
for_entry_list(qp) {
if (matches(namelst, qp->tterm.term_names)) {
int len = fmt_entry(&qp->tterm, NULL, FALSE, TRUE, infodump, numbers);
if (len > (infodump ? MAX_TERMINFO_LENGTH : MAX_TERMCAP_LENGTH))
(void) fprintf(stderr,
"%s: resolved %s entry is %d bytes long\n",
_nc_progname,
_nc_first_name(qp->tterm.term_names),
len);
}
}
}
/* write or dump all entries */
if (check_only) {
/* this is in case infotocap() generates warnings */
_nc_curr_col = _nc_curr_line = -1;
for_entry_list(qp) {
if (matches(namelst, qp->tterm.term_names)) {
/* this is in case infotocap() generates warnings */
_nc_set_type(_nc_first_name(qp->tterm.term_names));
_nc_curr_line = (int) qp->startline;
repair_acsc(&qp->tterm);
dump_entry(&qp->tterm, suppress_untranslatable,
limited, numbers, NULL);
}
}
} else {
if (!infodump && !capdump) {
_nc_set_writedir(outdir);
for_entry_list(qp) {
if (matches(namelst, qp->tterm.term_names))
write_it(qp);
}
} else {
/* this is in case infotocap() generates warnings */
_nc_curr_col = _nc_curr_line = -1;
for_entry_list(qp) {
if (matches(namelst, qp->tterm.term_names)) {
long j = qp->cend - qp->cstart;
int len = 0;
/* this is in case infotocap() generates warnings */
_nc_set_type(_nc_first_name(qp->tterm.term_names));
if (!quiet) {
(void) fseek(tmp_fp, qp->cstart, SEEK_SET);
while (j-- > 0) {
int ch = fgetc(tmp_fp);
if (ch == EOF || ferror(tmp_fp)) {
break;
} else if (infodump) {
(void) putchar(ch);
} else {
put_translate(ch);
}
}
}
repair_acsc(&qp->tterm);
dump_entry(&qp->tterm, suppress_untranslatable,
limited, numbers, NULL);
for (j = 0; j < (long) qp->nuses; j++)
dump_uses(qp->uses[j].name, !capdump);
len = show_entry();
if (debug_level != 0 && !limited)
printf("# length=%d\n", len);
}
}
if (!namelst && _nc_tail && !quiet) {
int c, oldc = '\0';
bool in_comment = FALSE;
bool trailing_comment = FALSE;
(void) fseek(tmp_fp, _nc_tail->cend, SEEK_SET);
while ((c = fgetc(tmp_fp)) != EOF) {
if (oldc == '\n') {
if (c == '#') {
trailing_comment = TRUE;
in_comment = TRUE;
} else {
in_comment = FALSE;
}
}
if (trailing_comment
&& (in_comment || (oldc == '\n' && c == '\n')))
putchar(c);
oldc = c;
}
}
}
}
/* Show the directory into which entries were written, and the total
* number of entries
*/
if (showsummary
&& (!(check_only || infodump || capdump))) {
int total = _nc_tic_written();
if (total != 0)
fprintf(log_fp, "%d entries written to %s\n",
total,
_nc_tic_dir((char *) 0));
else
fprintf(log_fp, "No entries written\n");
}
ExitProgram(EXIT_SUCCESS);
}
/*
* This bit of legerdemain turns all the terminfo variable names into
* references to locations in the arrays Booleans, Numbers, and Strings ---
* precisely what's needed (see comp_parse.c).
*/
#undef CUR
#define CUR tp->
/*
* Check if the alternate character-set capabilities are consistent.
*/
static void
check_acs(TERMTYPE2 *tp)
{
int vt100_smacs = 0;
int vt100_rmacs = 0;
int vt100_enacs = 0;
/*
* ena_acs is not always necessary, but if it is present, the enter/exit
* capabilities should be.
*/
ANDMISSING(ena_acs, enter_alt_charset_mode);
ANDMISSING(ena_acs, exit_alt_charset_mode);
PAIRED(exit_alt_charset_mode, exit_alt_charset_mode);
/*
* vt100-like is frequently used, but perhaps ena_acs is missing, etc.
*/
if (VALID_STRING(enter_alt_charset_mode)) {
vt100_smacs = (!strcmp("\033(0", enter_alt_charset_mode)
? 2
: (!strcmp("\016", enter_alt_charset_mode)
? 1
: 0));
}
if (VALID_STRING(exit_alt_charset_mode)) {
vt100_rmacs = (!strcmp("\033(B", exit_alt_charset_mode)
? 2
: (!strcmp("\017", exit_alt_charset_mode)
? 1
: 0));
}
if (VALID_STRING(ena_acs)) {
vt100_enacs = (!strcmp("\033(B\033)0", ena_acs)
? 2
: 0);
}
if (vt100_rmacs && vt100_smacs && (vt100_rmacs != vt100_smacs)) {
_nc_warning("rmacs/smacs are inconsistent");
}
if ((vt100_rmacs == 2) && (vt100_smacs == 2) && vt100_enacs) {
_nc_warning("rmacs/smacs make enacs redundant");
}
if ((vt100_rmacs == 1) && (vt100_smacs == 1) && !vt100_enacs) {
_nc_warning("VT100-style rmacs/smacs require enacs");
}
if (VALID_STRING(acs_chars)) {
const char *boxes = "lmkjtuvwqxn";
char mapped[256];
char missing[256];
const char *p;
char *q;
memset(mapped, 0, sizeof(mapped));
for (p = acs_chars; *p != '\0'; p += 2) {
if (p[1] == '\0') {
_nc_warning("acsc has odd number of characters");
break;
}
mapped[UChar(p[0])] = p[1];
}
if (mapped[UChar('I')] && !mapped[UChar('i')]) {
_nc_warning("acsc refers to 'I', which is probably an error");
}
for (p = boxes, q = missing; *p != '\0'; ++p) {
if (!mapped[UChar(p[0])]) {
*q++ = p[0];
}
}
*q = '\0';
assert(strlen(missing) <= strlen(boxes));
if (*missing != '\0' && strcmp(missing, boxes)) {
_nc_warning("acsc is missing some line-drawing mapping: %s", missing);
}
}
}
+static char *
+safe_strdup(const char *value)
+{
+ if (value == NULL)
+ value = "";
+ return strdup(value);
+}
+
static bool
same_color(NCURSES_CONST char *oldcap, NCURSES_CONST char *newcap, int limit)
{
bool result = FALSE;
if (limit > 16)
limit = 16;
if (limit >= 8) {
int n;
int same;
for (n = same = 0; n < limit; ++n) {
- char *oldvalue = strdup(TPARM_1(oldcap, n));
- char *newvalue = strdup(TPARM_1(newcap, n));
+ char *oldvalue = safe_strdup(TIPARM_1(oldcap, n));
+ char *newvalue = safe_strdup(TIPARM_1(newcap, n));
same += !strcmp(oldvalue, newvalue);
free(oldvalue);
free(newvalue);
}
result = (same == limit);
}
return result;
}
/*
* Check if the color capabilities are consistent
*/
static void
check_colors(TERMTYPE2 *tp)
{
char *value;
if ((max_colors > 0) != (max_pairs > 0)
|| ((max_colors > max_pairs) && (initialize_pair == 0)))
_nc_warning("inconsistent values for max_colors (%d) and max_pairs (%d)",
max_colors, max_pairs);
PAIRED(set_foreground, set_background);
PAIRED(set_a_foreground, set_a_background);
PAIRED(set_color_pair, initialize_pair);
if (VALID_STRING(set_foreground)
&& VALID_STRING(set_a_foreground)) {
if (!_nc_capcmp(set_foreground, set_a_foreground)) {
_nc_warning("expected setf/setaf to be different");
} else if (same_color(set_foreground, set_a_foreground, max_colors)) {
_nc_warning("setf/setaf are equivalent");
}
}
if (VALID_STRING(set_background)
&& VALID_STRING(set_a_background)) {
if (!_nc_capcmp(set_background, set_a_background)) {
_nc_warning("expected setb/setab to be different");
} else if (same_color(set_background, set_a_background, max_colors)) {
_nc_warning("setb/setab are equivalent");
}
}
/* see: has_colors() */
if (VALID_NUMERIC(max_colors) && VALID_NUMERIC(max_pairs)
&& ((VALID_STRING(set_foreground)
&& VALID_STRING(set_background))
|| (VALID_STRING(set_a_foreground)
&& VALID_STRING(set_a_background))
|| set_color_pair)) {
if (!VALID_STRING(orig_pair) && !VALID_STRING(orig_colors))
_nc_warning("expected either op/oc string for resetting colors");
}
if (can_change) {
if (!VALID_STRING(initialize_pair) &&
!VALID_STRING(initialize_color)) {
_nc_warning("expected initc or initp because ccc is given");
}
} else {
if (VALID_STRING(initialize_pair) ||
VALID_STRING(initialize_color)) {
_nc_warning("expected ccc because initc is given");
}
}
value = tigetstr("RGB");
if (VALID_STRING(value)) {
int r, g, b;
char bad;
int code = sscanf(value, "%d/%d/%d%c", &r, &g, &b, &bad);
if (code != 3 || r <= 0 || g <= 0 || b <= 0) {
_nc_warning("unexpected value for RGB capability: %s", value);
}
}
}
static int
csi_length(const char *value)
{
int result = 0;
if (value[0] == '\033' && value[1] == '[') {
result = 2;
} else if (UChar(value[0]) == 0x9a) {
result = 1;
}
return result;
}
static char
keypad_final(const char *string)
{
char result = '\0';
if (VALID_STRING(string)
&& *string++ == '\033'
&& *string++ == 'O'
&& strlen(string) == 1) {
result = *string;
}
return result;
}
static long
keypad_index(const char *string)
{
char *test;
const char *list = "PQRSwxymtuvlqrsPpn"; /* app-keypad except "Enter" */
int ch;
long result = -1;
if ((ch = keypad_final(string)) != '\0') {
test = (strchr) (list, ch);
if (test != 0)
result = (long) (test - list);
}
return result;
}
/*
* list[] is down, up, left, right
* "left" may be ^H rather than \E[D
* "down" may be ^J rather than \E[B
* But up/right are generally consistently escape sequences for ANSI terminals.
*/
static void
check_ansi_cursor(char *list[4])
{
int j, k;
int want;
size_t suffix;
bool skip[4];
bool repeated = FALSE;
for (j = 0; j < 4; ++j) {
skip[j] = FALSE;
for (k = 0; k < j; ++k) {
if (j != k
&& !strcmp(list[j], list[k])) {
char *value = _nc_tic_expand(list[k], TRUE, 0);
_nc_warning("repeated cursor control %s\n", value);
repeated = TRUE;
}
}
}
if (!repeated) {
char *up = list[1];
size_t prefix = (size_t) csi_length(up);
if (prefix) {
suffix = prefix;
while (up[suffix] && isdigit(UChar(up[suffix])))
++suffix;
}
if (prefix && up[suffix] == 'A') {
skip[1] = TRUE;
if (!strcmp(list[0], "\n"))
skip[0] = TRUE;
if (!strcmp(list[2], "\b"))
skip[2] = TRUE;
for (j = 0; j < 4; ++j) {
if (skip[j] || strlen(list[j]) == 1)
continue;
if (memcmp(list[j], up, prefix)) {
char *value = _nc_tic_expand(list[j], TRUE, 0);
_nc_warning("inconsistent prefix for %s\n", value);
continue;
}
if (strlen(list[j]) < suffix) {
char *value = _nc_tic_expand(list[j], TRUE, 0);
_nc_warning("inconsistent length for %s, expected %d\n",
value, (int) suffix + 1);
continue;
}
want = "BADC"[j];
if (list[j][suffix] != want) {
char *value = _nc_tic_expand(list[j], TRUE, 0);
_nc_warning("inconsistent suffix for %s, expected %c, have %c\n",
value, want, list[j][suffix]);
}
}
}
}
}
#define EXPECTED(name) if (!PRESENT(name)) _nc_warning("expected " #name)
#define UNEXPECTED(name) if (PRESENT(name)) _nc_warning("unexpected " #name ", for %s", why)
static void
check_noaddress(TERMTYPE2 *tp, const char *why)
{
UNEXPECTED(column_address);
UNEXPECTED(cursor_address);
UNEXPECTED(cursor_home);
UNEXPECTED(cursor_mem_address);
UNEXPECTED(cursor_to_ll);
UNEXPECTED(row_address);
UNEXPECTED(row_address);
}
static void
check_cursor(TERMTYPE2 *tp)
{
int count;
char *list[4];
if (hard_copy) {
check_noaddress(tp, "hard_copy");
} else if (generic_type) {
check_noaddress(tp, "generic_type");
} else if (strchr(tp->term_names, '+') == 0) {
int y = 0;
int x = 0;
if (PRESENT(column_address))
++y;
if (PRESENT(cursor_address))
y = x = 10;
if (PRESENT(cursor_home))
++y, ++x;
if (PRESENT(cursor_mem_address))
y = x = 10;
if (PRESENT(cursor_to_ll))
++y, ++x;
if (PRESENT(row_address))
++x;
if (PRESENT(cursor_down))
++y;
if (PRESENT(cursor_up))
++y;
if (PRESENT(cursor_left))
++x;
if (PRESENT(cursor_right))
++x;
if (x < 2 && y < 2) {
_nc_warning("terminal lacks cursor addressing");
} else {
if (x < 2)
_nc_warning("terminal lacks cursor column-addressing");
if (y < 2)
_nc_warning("terminal lacks cursor row-addressing");
}
}
/* it is rare to have an insert-line feature without a matching delete */
ANDMISSING(parm_insert_line, insert_line);
ANDMISSING(parm_delete_line, delete_line);
ANDMISSING(parm_insert_line, parm_delete_line);
/* if we have a parameterized form, then the non-parameterized is easy */
ANDMISSING(parm_down_cursor, cursor_down);
ANDMISSING(parm_up_cursor, cursor_up);
ANDMISSING(parm_left_cursor, cursor_left);
ANDMISSING(parm_right_cursor, cursor_right);
/* Given any of a set of cursor movement, the whole set should be present.
* Technically this is not true (we could use cursor_address to fill in
* unsupported controls), but it is likely.
*/
count = 0;
if (PRESENT(parm_down_cursor)) {
list[count++] = parm_down_cursor;
}
if (PRESENT(parm_up_cursor)) {
list[count++] = parm_up_cursor;
}
if (PRESENT(parm_left_cursor)) {
list[count++] = parm_left_cursor;
}
if (PRESENT(parm_right_cursor)) {
list[count++] = parm_right_cursor;
}
if (count == 4) {
check_ansi_cursor(list);
} else if (count != 0) {
EXPECTED(parm_down_cursor);
EXPECTED(parm_up_cursor);
EXPECTED(parm_left_cursor);
EXPECTED(parm_right_cursor);
}
count = 0;
if (PRESENT(cursor_down)) {
list[count++] = cursor_down;
}
if (PRESENT(cursor_up)) {
list[count++] = cursor_up;
}
if (PRESENT(cursor_left)) {
list[count++] = cursor_left;
}
if (PRESENT(cursor_right)) {
list[count++] = cursor_right;
}
if (count == 4) {
check_ansi_cursor(list);
} else if (count != 0) {
count = 0;
if (PRESENT(cursor_down) && strcmp(cursor_down, "\n"))
++count;
if (PRESENT(cursor_left) && strcmp(cursor_left, "\b"))
++count;
if (PRESENT(cursor_up) && strlen(cursor_up) > 1)
++count;
if (PRESENT(cursor_right) && strlen(cursor_right) > 1)
++count;
if (count) {
EXPECTED(cursor_down);
EXPECTED(cursor_up);
EXPECTED(cursor_left);
EXPECTED(cursor_right);
}
}
}
#define MAX_KP 5
/*
* Do a quick sanity-check for vt100-style keypads to see if the 5-key keypad
* is mapped inconsistently.
*/
static void
check_keypad(TERMTYPE2 *tp)
{
char show[80];
if (VALID_STRING(key_a1) &&
VALID_STRING(key_a3) &&
VALID_STRING(key_b2) &&
VALID_STRING(key_c1) &&
VALID_STRING(key_c3)) {
char final[MAX_KP + 1];
long list[MAX_KP];
int increase = 0;
int j, k, kk;
long last;
long test;
final[0] = keypad_final(key_a1);
final[1] = keypad_final(key_a3);
final[2] = keypad_final(key_b2);
final[3] = keypad_final(key_c1);
final[4] = keypad_final(key_c3);
final[5] = '\0';
/* special case: legacy coding using 1,2,3,0,. on the bottom */
assert(strlen(final) <= MAX_KP);
if (!strcmp(final, "qsrpn"))
return;
list[0] = keypad_index(key_a1);
list[1] = keypad_index(key_a3);
list[2] = keypad_index(key_b2);
list[3] = keypad_index(key_c1);
list[4] = keypad_index(key_c3);
/* check that they're all vt100 keys */
for (j = 0; j < MAX_KP; ++j) {
if (list[j] < 0) {
return;
}
}
/* check if they're all in increasing order */
for (j = 1; j < MAX_KP; ++j) {
if (list[j] > list[j - 1]) {
++increase;
}
}
if (increase != (MAX_KP - 1)) {
show[0] = '\0';
for (j = 0, last = -1; j < MAX_KP; ++j) {
for (k = 0, kk = -1, test = 100; k < 5; ++k) {
if (list[k] > last &&
list[k] < test) {
test = list[k];
kk = k;
}
}
last = test;
assert(strlen(show) < (MAX_KP * 4));
switch (kk) {
case 0:
_nc_STRCAT(show, " ka1", sizeof(show));
break;
case 1:
_nc_STRCAT(show, " ka3", sizeof(show));
break;
case 2:
_nc_STRCAT(show, " kb2", sizeof(show));
break;
case 3:
_nc_STRCAT(show, " kc1", sizeof(show));
break;
case 4:
_nc_STRCAT(show, " kc3", sizeof(show));
break;
}
}
_nc_warning("vt100 keypad order inconsistent: %s", show);
}
} else if (VALID_STRING(key_a1) ||
VALID_STRING(key_a3) ||
VALID_STRING(key_b2) ||
VALID_STRING(key_c1) ||
VALID_STRING(key_c3)) {
show[0] = '\0';
if (keypad_index(key_a1) >= 0)
_nc_STRCAT(show, " ka1", sizeof(show));
if (keypad_index(key_a3) >= 0)
_nc_STRCAT(show, " ka3", sizeof(show));
if (keypad_index(key_b2) >= 0)
_nc_STRCAT(show, " kb2", sizeof(show));
if (keypad_index(key_c1) >= 0)
_nc_STRCAT(show, " kc1", sizeof(show));
if (keypad_index(key_c3) >= 0)
_nc_STRCAT(show, " kc3", sizeof(show));
if (*show != '\0')
_nc_warning("vt100 keypad map incomplete:%s", show);
}
/*
* These warnings are useful for consistency checks - it is possible that
* there are real terminals with mismatches in these
*/
ANDMISSING(key_ic, key_dc);
}
static void
check_printer(TERMTYPE2 *tp)
{
(void) tp;
#if defined(enter_doublewide_mode) && defined(exit_doublewide_mode)
PAIRED(enter_doublewide_mode, exit_doublewide_mode);
#endif
#if defined(enter_italics_mode) && defined(exit_italics_mode)
PAIRED(enter_italics_mode, exit_italics_mode);
#endif
#if defined(enter_leftward_mode) && defined(exit_leftward_mode)
PAIRED(enter_leftward_mode, exit_leftward_mode);
#endif
#if defined(enter_micro_mode) && defined(exit_micro_mode)
PAIRED(enter_micro_mode, exit_micro_mode);
#endif
#if defined(enter_shadow_mode) && defined(exit_shadow_mode)
PAIRED(enter_shadow_mode, exit_shadow_mode);
#endif
#if defined(enter_subscript_mode) && defined(exit_subscript_mode)
PAIRED(enter_subscript_mode, exit_subscript_mode);
#endif
#if defined(enter_superscript_mode) && defined(exit_superscript_mode)
PAIRED(enter_superscript_mode, exit_superscript_mode);
#endif
#if defined(enter_upward_mode) && defined(exit_upward_mode)
PAIRED(enter_upward_mode, exit_upward_mode);
#endif
#if defined(start_char_set_def) && defined(stop_char_set_def)
ANDMISSING(start_char_set_def, stop_char_set_def);
#endif
/* if we have a parameterized form, then the non-parameterized is easy */
#if defined(set_bottom_margin_parm) && defined(set_bottom_margin)
ANDMISSING(set_bottom_margin_parm, set_bottom_margin);
#endif
#if defined(set_left_margin_parm) && defined(set_left_margin)
ANDMISSING(set_left_margin_parm, set_left_margin);
#endif
#if defined(set_right_margin_parm) && defined(set_right_margin)
ANDMISSING(set_right_margin_parm, set_right_margin);
#endif
#if defined(set_top_margin_parm) && defined(set_top_margin)
ANDMISSING(set_top_margin_parm, set_top_margin);
#endif
#if defined(parm_down_micro) && defined(micro_down)
ANDMISSING(parm_down_micro, micro_down);
#endif
#if defined(parm_left_micro) && defined(micro_left)
ANDMISSING(parm_left_micro, micro_left);
#endif
#if defined(parm_right_micro) && defined(micro_right)
ANDMISSING(parm_right_micro, micro_right);
#endif
#if defined(parm_up_micro) && defined(micro_up)
ANDMISSING(parm_up_micro, micro_up);
#endif
}
#if NCURSES_XNAMES
static bool
uses_SGR_39_49(const char *value)
{
return (strstr(value, "39;49") != 0
|| strstr(value, "49;39") != 0);
}
/*
* Check consistency of termcap extensions related to "screen".
*/
static void
check_screen(TERMTYPE2 *tp)
{
if (_nc_user_definable) {
int have_XT = tigetflag("XT");
int have_XM = tigetflag("XM");
int have_bce = back_color_erase;
bool have_kmouse = FALSE;
bool use_sgr_39_49 = FALSE;
+ const char *name_39_49 = "orig_pair or orig_colors";
char *name = _nc_first_name(tp->term_names);
bool is_screen = !strncmp(name, "screen", 6);
bool screen_base = (is_screen
&& strchr(name, '.') == 0);
if (!VALID_BOOLEAN(have_bce)) {
have_bce = FALSE;
}
if (!VALID_BOOLEAN(have_XM)) {
have_XM = FALSE;
}
if (!VALID_BOOLEAN(have_XT)) {
have_XT = FALSE;
}
if (VALID_STRING(key_mouse)) {
have_kmouse = !strcmp("\033[M", key_mouse);
}
- if (VALID_STRING(orig_colors)) {
- use_sgr_39_49 = uses_SGR_39_49(orig_colors);
- } else if (VALID_STRING(orig_pair)) {
- use_sgr_39_49 = uses_SGR_39_49(orig_pair);
+ if (have_bce) {
+ if (VALID_STRING(orig_pair)) {
+ name_39_49 = "orig_pair";
+ use_sgr_39_49 = uses_SGR_39_49(orig_pair);
+ }
+ if (!use_sgr_39_49 && VALID_STRING(orig_colors)) {
+ name_39_49 = "orig_colors";
+ use_sgr_39_49 = uses_SGR_39_49(orig_colors);
+ }
}
if (have_XM && have_XT) {
_nc_warning("screen's XT capability conflicts with XM");
} else if (have_XT && screen_base) {
_nc_warning("screen's \"screen\" entries should not have XT set");
} else if (have_XT) {
if (!have_kmouse && is_screen) {
if (VALID_STRING(key_mouse)) {
_nc_warning("value of kmous inconsistent with screen's usage");
} else {
_nc_warning("expected kmous capability with XT");
}
}
- if (!have_bce && max_colors > 0)
- _nc_warning("expected bce capability with XT");
- if (!use_sgr_39_49 && have_bce && max_colors > 0)
- _nc_warning("expected orig_colors capability with XT to have 39/49 parameters");
+ if (max_colors > 0) {
+ if (!have_bce) {
+ _nc_warning("expected bce capability with XT");
+ } else if (!use_sgr_39_49) {
+ _nc_warning("expected %s capability with XT "
+ "to have 39/49 parameters", name_39_49);
+ }
+ }
if (VALID_STRING(to_status_line))
_nc_warning("\"tsl\" capability is redundant, given XT");
} else {
if (have_kmouse
&& !have_XM
&& !screen_base && strchr(name, '+') == 0) {
_nc_warning("expected XT to be set, given kmous");
}
}
}
}
#else
#define check_screen(tp) /* nothing */
#endif
/*
* Returns the expected number of parameters for the given capability.
*/
static int
expected_params(const char *name)
{
#define DATA(name,count) { { name }, count }
/* *INDENT-OFF* */
static const struct {
const char name[9];
int count;
} table[] = {
DATA( "S0", 1 ), /* 'screen' extension */
DATA( "birep", 2 ),
DATA( "chr", 1 ),
DATA( "colornm", 1 ),
DATA( "cpi", 1 ),
DATA( "csnm", 1 ),
DATA( "csr", 2 ),
DATA( "cub", 1 ),
DATA( "cud", 1 ),
DATA( "cuf", 1 ),
DATA( "cup", 2 ),
DATA( "cuu", 1 ),
DATA( "cvr", 1 ),
DATA( "cwin", 5 ),
DATA( "dch", 1 ),
DATA( "defc", 3 ),
DATA( "dial", 1 ),
DATA( "dispc", 1 ),
DATA( "dl", 1 ),
DATA( "ech", 1 ),
DATA( "getm", 1 ),
DATA( "hpa", 1 ),
DATA( "ich", 1 ),
DATA( "il", 1 ),
DATA( "indn", 1 ),
DATA( "initc", 4 ),
DATA( "initp", 7 ),
DATA( "lpi", 1 ),
DATA( "mc5p", 1 ),
DATA( "mrcup", 2 ),
DATA( "mvpa", 1 ),
DATA( "pfkey", 2 ),
DATA( "pfloc", 2 ),
DATA( "pfx", 2 ),
DATA( "pfxl", 3 ),
DATA( "pln", 2 ),
DATA( "qdial", 1 ),
DATA( "rcsd", 1 ),
DATA( "rep", 2 ),
DATA( "rin", 1 ),
DATA( "sclk", 3 ),
DATA( "scp", 1 ),
DATA( "scs", 1 ),
DATA( "scsd", 2 ),
DATA( "setab", 1 ),
DATA( "setaf", 1 ),
DATA( "setb", 1 ),
DATA( "setcolor", 1 ),
DATA( "setf", 1 ),
DATA( "sgr", 9 ),
DATA( "sgr1", 6 ),
DATA( "slength", 1 ),
DATA( "slines", 1 ),
DATA( "smgbp", 1 ), /* 2 if smgtp is not given */
DATA( "smglp", 1 ),
DATA( "smglr", 2 ),
DATA( "smgrp", 1 ),
DATA( "smgtb", 2 ),
DATA( "smgtp", 1 ),
DATA( "tsl", 1 ),
DATA( "u6", -1 ),
DATA( "vpa", 1 ),
DATA( "wind", 4 ),
DATA( "wingo", 1 ),
};
/* *INDENT-ON* */
-
#undef DATA
unsigned n;
int result = 0; /* function-keys, etc., use none */
for (n = 0; n < SIZEOF(table); n++) {
if (!strcmp(name, table[n].name)) {
result = table[n].count;
break;
}
}
return result;
}
/*
* Check for user-capabilities that happen to be used in ncurses' terminal
* database.
*/
#if NCURSES_XNAMES
static struct user_table_entry const *
lookup_user_capability(const char *name)
{
struct user_table_entry const *result = 0;
if (*name != 'k') {
result = _nc_find_user_entry(name);
}
return result;
}
#endif
/*
* If a given name is likely to be a user-capability, return the number of
* parameters it would be used with. If not, return -1.
*
* ncurses assumes that u6 could be used for getting the cursor-position, but
* that is not implemented. Make a special case for that, to quiet needless
* warnings.
*
* The other string-capability extensions (see terminfo.src) which could have
* parameters such as "Ss", "%u", are not used by ncurses. But we check those
* anyway, to validate the terminfo database.
*/
static int
is_user_capability(const char *name)
{
int result = -1;
if (name[0] == 'u' &&
(name[1] >= '0' && name[1] <= '9') &&
name[2] == '\0') {
result = (name[1] == '6') ? 2 : 0;
}
#if NCURSES_XNAMES
else if (using_extensions) {
struct user_table_entry const *p = lookup_user_capability(name);
if (p != 0) {
result = (int) p->ute_argc;
}
}
#endif
return result;
}
/*
* Make a quick sanity check for the parameters which are used in the given
* strings. If there are no "%p" tokens, then there should be no other "%"
* markers.
*/
static void
check_params(TERMTYPE2 *tp, const char *name, char *value, int extended)
{
int expected = expected_params(name);
int actual = 0;
int n;
- bool params[NUM_PARM];
+ bool params[1 + NUM_PARM];
char *s = value;
#ifdef set_top_margin_parm
if (!strcmp(name, "smgbp")
&& set_top_margin_parm == 0)
expected = 2;
#endif
- for (n = 0; n < NUM_PARM; n++)
+ for (n = 0; n <= NUM_PARM; n++)
params[n] = FALSE;
while (*s != 0) {
if (*s == '%') {
if (*++s == '\0') {
_nc_warning("expected character after %% in %s", name);
break;
} else if (*s == 'p') {
if (*++s == '\0' || !isdigit((int) *s)) {
_nc_warning("expected digit after %%p in %s", name);
return;
} else {
n = (*s - '0');
if (n > actual)
actual = n;
params[n] = TRUE;
}
}
}
s++;
}
#if NCURSES_XNAMES
if (extended) {
int check = is_user_capability(name);
if (check != actual && (check >= 0 && actual >= 0)) {
_nc_warning("extended %s capability has %d parameters, expected %d",
name, actual, check);
} else if (debug_level > 1) {
_nc_warning("extended %s capability has %d parameters, as expected",
name, actual);
}
expected = actual;
}
#else
(void) extended;
#endif
if (params[0]) {
_nc_warning("%s refers to parameter 0 (%%p0), which is not allowed", name);
}
if (value == set_attributes || expected < 0) {
;
} else if (expected != actual) {
_nc_warning("%s uses %d parameters, expected %d", name,
actual, expected);
for (n = 1; n < actual; n++) {
if (!params[n])
_nc_warning("%s omits parameter %d", name, n);
}
}
/*
* Counting "%p" markers does not account for termcap expressions which
* may not have been fully translated. Also, tparm does its own analysis.
* Report differences here.
*/
if (actual >= 0) {
char *p_is_s[NUM_PARM];
int popcount;
int analyzed = _nc_tparm_analyze(value, p_is_s, &popcount);
if (analyzed < popcount) {
analyzed = popcount;
}
if (actual != analyzed && expected != analyzed) {
#if NCURSES_XNAMES
int user_cap = is_user_capability(name);
if ((user_cap == analyzed) && using_extensions) {
; /* ignore */
} else if (user_cap >= 0) {
_nc_warning("tparm will use %d parameters for %s, expected %d",
analyzed, name, user_cap);
} else
#endif
{
_nc_warning("tparm analyzed %d parameters for %s, expected %d",
analyzed, name, actual);
}
}
}
}
static bool
line_capability(const char *name)
{
bool result = FALSE;
static const char *table[] =
{
"csr", /* change_scroll_region */
"clear", /* clear_screen */
"ed", /* clr_eos */
"cwin", /* create_window */
"cup", /* cursor_address */
"cud1", /* cursor_down */
"home", /* cursor_home */
"mrcup", /* cursor_mem_address */
"ll", /* cursor_to_ll */
"cuu1", /* cursor_up */
"dl1", /* delete_line */
"hd", /* down_half_line */
"flash", /* flash_screen */
"ff", /* form_feed */
"il1", /* insert_line */
"nel", /* newline */
"dl", /* parm_delete_line */
"cud", /* parm_down_cursor */
"indn", /* parm_index */
"il", /* parm_insert_line */
"rin", /* parm_rindex */
"cuu", /* parm_up_cursor */
"mc0", /* print_screen */
"vpa", /* row_address */
"ind", /* scroll_forward */
"ri", /* scroll_reverse */
"hu", /* up_half_line */
};
size_t n;
for (n = 0; n < SIZEOF(table); ++n) {
if (!strcmp(name, table[n])) {
result = TRUE;
break;
}
}
return result;
}
/*
* Check for DEC VT100 private mode for reverse video.
*/
static const char *
skip_DECSCNM(const char *value, int *flag)
{
*flag = -1;
if (value != 0) {
int skip = csi_length(value);
if (skip > 0 &&
value[skip++] == '?' &&
value[skip++] == '5') {
if (value[skip] == 'h') {
*flag = 1;
} else if (value[skip] == 'l') {
*flag = 0;
}
value += skip + 1;
}
}
return value;
}
static void
check_delays(TERMTYPE2 *tp, const char *name, const char *value)
{
const char *p, *q;
const char *first = 0;
const char *last = 0;
for (p = value; *p != '\0'; ++p) {
if (p[0] == '$' && p[1] == '<') {
const char *base = p + 2;
const char *mark = 0;
bool maybe = TRUE;
bool mixed = FALSE;
int proportional = 0;
int mandatory = 0;
first = p;
for (q = base; *q != '\0'; ++q) {
if (*q == '>') {
if (mark == 0)
mark = q;
break;
} else if (*q == '*' || *q == '/') {
if (*q == '*')
++proportional;
if (*q == '/')
++mandatory;
if (mark == 0)
mark = q;
} else if (!(isalnum(UChar(*q)) || strchr("+-.", *q) != 0)) {
maybe = FALSE;
break;
} else if (proportional || mandatory) {
mixed = TRUE;
}
}
last = *q ? (q + 1) : q;
if (*q == '\0') {
maybe = FALSE; /* just an isolated "$<" */
} else if (maybe) {
float check_f;
char check_c;
int rc = sscanf(base, "%f%c", &check_f, &check_c);
if ((rc != 2) || (check_c != *mark) || mixed) {
_nc_warning("syntax error in %s delay '%.*s'", name,
(int) (q - base), base);
} else if (*name == 'k') {
_nc_warning("function-key %s has delay", name);
} else if (proportional && !line_capability(name)) {
_nc_warning("non-line capability using proportional delay: %s", name);
} else if (!xon_xoff &&
!mandatory &&
strchr(_nc_first_name(tp->term_names), '+') == 0) {
_nc_warning("%s in %s is used since no xon/xoff",
(proportional
? "proportional delay"
: "delay"),
name);
}
} else {
p = q - 1; /* restart scan */
}
}
}
if (!strcmp(name, "flash") ||
!strcmp(name, "beep")) {
if (first != 0) {
if (first == value || *last == 0) {
/*
* Delay is on one end or the other.
*/
_nc_warning("expected delay embedded within %s", name);
}
} else {
int flag;
/*
* Check for missing delay when using VT100 reverse-video.
* A real VT100 might not need this, but terminal emulators do.
*/
if ((p = skip_DECSCNM(value, &flag)) != 0 &&
flag > 0 &&
(q = skip_DECSCNM(p, &flag)) != 0 &&
flag == 0) {
_nc_warning("expected a delay in %s", name);
}
}
}
}
static char *
check_1_infotocap(const char *name, NCURSES_CONST char *value, int count)
{
int k;
int ignored;
long numbers[1 + NUM_PARM];
char *strings[1 + NUM_PARM];
char *p_is_s[NUM_PARM];
char *result;
char blob[NUM_PARM * 10];
char *next = blob;
+ TParams expect;
+ TParams actual;
+ int nparam;
*next++ = '\0';
for (k = 1; k <= NUM_PARM; k++) {
numbers[k] = count;
_nc_SPRINTF(next,
_nc_SLIMIT(sizeof(blob) - (size_t) (next - blob))
"XYZ%d", count);
strings[k] = next;
next += strlen(next) + 1;
}
- switch (tparm_type(name)) {
+ expect = tparm_type(name);
+ nparam = _nc_tparm_analyze(value, p_is_s, &ignored);
+ actual = guess_tparm_type(nparam, p_is_s);
+
+ if (expect != actual) {
+ _nc_warning("%s has mismatched parameters", name);
+ actual = Other;
+ }
+
+ switch (actual) {
case Num_Str:
result = TPARM_2(value, numbers[1], strings[2]);
break;
case Num_Str_Str:
result = TPARM_3(value, numbers[1], strings[2], strings[3]);
break;
case Numbers:
+#define myParam(n) numbers[n]
+ result = TIPARM_9(value,
+ myParam(1),
+ myParam(2),
+ myParam(3),
+ myParam(4),
+ myParam(5),
+ myParam(6),
+ myParam(7),
+ myParam(8),
+ myParam(9));
+#undef myParam
+ break;
+ case Other:
default:
- (void) _nc_tparm_analyze(value, p_is_s, &ignored);
#define myParam(n) (p_is_s[n - 1] != 0 ? ((TPARM_ARG) strings[n]) : numbers[n])
result = TPARM_9(value,
myParam(1),
myParam(2),
myParam(3),
myParam(4),
myParam(5),
myParam(6),
myParam(7),
myParam(8),
myParam(9));
+#undef myParam
break;
}
return strdup(result);
}
#define IsDelay(ch) ((ch) == '.' || isdigit(UChar(ch)))
static const char *
parse_delay_value(const char *src, double *delays, int *always)
{
int star = 0;
*delays = 0.0;
if (always)
*always = 0;
while (isdigit(UChar(*src))) {
(*delays) = (*delays) * 10 + (*src++ - '0');
}
if (*src == '.') {
int gotdot = 1;
++src;
while (isdigit(UChar(*src))) {
gotdot *= 10;
(*delays) += (*src++ - '0') / gotdot;
}
}
while (*src == '*' || *src == '/') {
if (always == 0 && *src == '/')
break;
if (*src++ == '*') {
star = 1;
} else {
*always = 1;
}
}
if (star)
*delays = -(*delays);
return src;
}
static const char *
parse_ti_delay(const char *ti, double *delays)
{
*delays = 0.0;
while (*ti != '\0') {
if (*ti == '\\') {
++ti;
}
if (ti[0] == '$'
&& ti[1] == '<'
&& IsDelay(UChar(ti[2]))) {
int ignored;
const char *last = parse_delay_value(ti + 2, delays, &ignored);
if (*last == '>') {
ti = last;
}
} else {
++ti;
}
}
return ti;
}
static const char *
parse_tc_delay(const char *tc, double *delays)
{
return parse_delay_value(tc, delays, (int *) 0);
}
/*
* Compare terminfo- and termcap-strings, factoring out delays.
*/
static bool
same_ti_tc(const char *ti, const char *tc, bool * embedded)
{
bool same = TRUE;
double ti_delay = 0.0;
double tc_delay = 0.0;
const char *ti_last;
*embedded = FALSE;
ti_last = parse_ti_delay(ti, &ti_delay);
tc = parse_tc_delay(tc, &tc_delay);
while ((ti < ti_last) && *tc) {
if (*ti == '\\' && ispunct(UChar(ti[1]))) {
++ti;
if ((*ti == '^') && !strncmp(tc, "\\136", 4)) {
ti += 1;
tc += 4;
continue;
}
} else if (ti[0] == '$' && ti[1] == '<') {
double no_delay;
const char *ss = parse_ti_delay(ti, &no_delay);
if (ss != ti) {
*embedded = TRUE;
ti = ss;
continue;
}
}
if (*tc == '\\' && ispunct(UChar(tc[1]))) {
++tc;
}
if (*ti++ != *tc++) {
same = FALSE;
break;
}
}
if (*embedded) {
if (same) {
same = FALSE;
} else {
*embedded = FALSE; /* report only one problem */
}
}
return same;
}
/*
* Check terminfo to termcap translation.
*/
static void
check_infotocap(TERMTYPE2 *tp, int i, const char *value)
{
const char *name = ExtStrname(tp, i, strnames);
int params = ((i < (int) SIZEOF(parametrized))
? parametrized[i]
: ((*value == 'k')
? 0
- : has_params(value)));
- int to_char = 0;
+ : has_params(value, FALSE)));
char *ti_value;
char *tc_value;
bool embedded;
assert(SIZEOF(parametrized) == STRCOUNT);
- if ((ti_value = _nc_tic_expand(value, TRUE, to_char)) == ABSENT_STRING) {
+ if (!VALID_STRING(value) || (ti_value = strdup(value)) == NULL) {
_nc_warning("tic-expansion of %s failed", name);
} else if ((tc_value = _nc_infotocap(name, ti_value, params)) == ABSENT_STRING) {
_nc_warning("tic-conversion of %s failed", name);
} else if (params > 0) {
int limit = 5;
int count;
bool first = TRUE;
if (!strcmp(name, "setf")
|| !strcmp(name, "setb")
|| !strcmp(name, "setaf")
|| !strcmp(name, "setab")) {
if ((limit = max_colors) > 16)
limit = 16;
}
for (count = 0; count < limit; ++count) {
char *ti_check = check_1_infotocap(name, ti_value, count);
char *tc_check = check_1_infotocap(name, tc_value, count);
if (strcmp(ti_check, tc_check)) {
if (first) {
fprintf(stderr, "check_infotocap(%s)\n", name);
- fprintf(stderr, "...ti '%s'\n", ti_value);
- fprintf(stderr, "...tc '%s'\n", tc_value);
+ fprintf(stderr, "...ti '%s'\n", _nc_visbuf2(0, ti_value));
+ fprintf(stderr, "...tc '%s'\n", _nc_visbuf2(0, tc_value));
first = FALSE;
}
_nc_warning("tparm-conversion of %s(%d) differs between\n\tterminfo %s\n\ttermcap %s",
- name, count, ti_check, tc_check);
+ name, count,
+ _nc_visbuf2(0, ti_check),
+ _nc_visbuf2(1, tc_check));
}
free(ti_check);
free(tc_check);
}
} else if (params == 0 && !same_ti_tc(ti_value, tc_value, &embedded)) {
if (embedded) {
_nc_warning("termcap equivalent of %s cannot use embedded delay", name);
} else {
_nc_warning("tic-conversion of %s changed value\n\tfrom %s\n\tto %s",
name, ti_value, tc_value);
}
}
}
static char *
skip_delay(char *s)
{
while (*s == '/' || isdigit(UChar(*s)))
++s;
return s;
}
/*
* Skip a delay altogether, e.g., when comparing a simple string to sgr,
* the latter may have a worst-case delay on the end.
*/
static char *
ignore_delays(char *s)
{
int delaying = 0;
do {
switch (*s) {
case '$':
if (delaying == 0)
delaying = 1;
break;
case '<':
if (delaying == 1)
delaying = 2;
break;
case '\0':
delaying = 0;
break;
default:
if (delaying) {
s = skip_delay(s);
if (*s == '>')
++s;
delaying = 0;
}
break;
}
if (delaying)
++s;
} while (delaying);
return s;
}
#define DATA(name) { #name }
static const char sgr_names[][11] =
{
DATA(none),
DATA(standout),
DATA(underline),
DATA(reverse),
DATA(blink),
DATA(dim),
DATA(bold),
DATA(invis),
DATA(protect),
DATA(altcharset),
""
};
#undef DATA
/*
* An sgr string may contain several settings other than the one we're
* interested in, essentially sgr0 + rmacs + whatever. As long as the
* "whatever" is contained in the sgr string, that is close enough for our
* sanity check.
*/
static bool
similar_sgr(int num, char *a, char *b)
{
char *base_a = a;
char *base_b = b;
int delaying = 0;
while (*b != 0) {
while (*a != *b) {
if (*a == 0) {
if (num < 0) {
;
} else if (b[0] == '$'
&& b[1] == '<') {
_nc_warning("did not find delay %s", _nc_visbuf(b));
} else {
_nc_warning("checking sgr(%s) %s\n\tcompare to %s\n\tunmatched %s",
sgr_names[num], _nc_visbuf2(1, base_a),
_nc_visbuf2(2, base_b),
_nc_visbuf2(3, b));
}
return FALSE;
} else if (delaying) {
a = skip_delay(a);
b = skip_delay(b);
} else if ((*b == '0' || (*b == ';')) && *a == 'm') {
b++;
} else {
a++;
}
}
switch (*a) {
case '$':
if (delaying == 0)
delaying = 1;
break;
case '<':
if (delaying == 1)
delaying = 2;
break;
default:
delaying = 0;
break;
}
a++;
b++;
}
/* ignore delays on the end of the string */
a = ignore_delays(a);
return ((num != 0) || (*a == 0));
}
+static void
+check_tparm_err(int num)
+{
+ if (_nc_tparm_err)
+ _nc_warning("tparam error in sgr(%d): %s", num, sgr_names[num]);
+}
+
static char *
check_sgr(TERMTYPE2 *tp, char *zero, int num, char *cap, const char *name)
{
char *test;
_nc_tparm_err = 0;
- test = TPARM_9(set_attributes,
- num == 1,
- num == 2,
- num == 3,
- num == 4,
- num == 5,
- num == 6,
- num == 7,
- num == 8,
- num == 9);
+ test = TIPARM_9(set_attributes,
+ num == 1,
+ num == 2,
+ num == 3,
+ num == 4,
+ num == 5,
+ num == 6,
+ num == 7,
+ num == 8,
+ num == 9);
if (test != 0) {
if (PRESENT(cap)) {
if (!similar_sgr(num, test, cap)) {
_nc_warning("%s differs from sgr(%d)\n\t%s=%s\n\tsgr(%d)=%s",
name, num,
name, _nc_visbuf2(1, cap),
num, _nc_visbuf2(2, test));
}
} else if (_nc_capcmp(test, zero)) {
_nc_warning("sgr(%d) present, but not %s", num, name);
}
} else if (PRESENT(cap)) {
_nc_warning("sgr(%d) missing, but %s present", num, name);
}
- if (_nc_tparm_err)
- _nc_warning("stack error in sgr(%d) string", num);
+ check_tparm_err(num);
return test;
}
#define CHECK_SGR(num,name) check_sgr(tp, zero, num, name, #name)
#ifdef TRACE
/*
* If tic is compiled with TRACE, we'll be able to see the output from the
* DEBUG() macro. But since it doesn't use traceon(), it always goes to
* the standard error. Use this function to make it simpler to follow the
* resulting debug traces.
*/
static void
show_where(unsigned level)
{
if (_nc_tracing >= DEBUG_LEVEL(level)) {
char my_name[MAX_NAME_SIZE];
_nc_get_type(my_name);
_tracef("\"%s\", line %d, '%s'",
_nc_get_source(),
_nc_curr_line, my_name);
}
}
#else
#define show_where(level) /* nothing */
#endif
typedef struct {
int keycode;
const char *name;
const char *value;
} NAME_VALUE;
static NAME_VALUE *
get_fkey_list(TERMTYPE2 *tp)
{
NAME_VALUE *result = typeMalloc(NAME_VALUE, NUM_STRINGS(tp) + 1);
const struct tinfo_fkeys *all_fkeys = _nc_tinfo_fkeys;
int used = 0;
unsigned j;
if (result == 0)
failed("get_fkey_list");
for (j = 0; all_fkeys[j].code; j++) {
char *a = tp->Strings[all_fkeys[j].offset];
if (VALID_STRING(a)) {
result[used].keycode = (int) all_fkeys[j].code;
result[used].name = strnames[all_fkeys[j].offset];
result[used].value = a;
++used;
}
}
#if NCURSES_XNAMES
for (j = STRCOUNT; j < NUM_STRINGS(tp); ++j) {
const char *name = ExtStrname(tp, (int) j, strnames);
if (*name == 'k') {
result[used].keycode = -1;
result[used].name = name;
result[used].value = tp->Strings[j];
++used;
}
}
#endif
result[used].keycode = 0;
return result;
}
static void
show_fkey_name(NAME_VALUE * data)
{
if (data->keycode > 0) {
fprintf(stderr, " %s", keyname(data->keycode));
fprintf(stderr, " (capability \"%s\")", data->name);
} else {
fprintf(stderr, " capability \"%s\"", data->name);
}
}
/*
* A terminal entry may contain more than one keycode assigned to a given
* string (e.g., KEY_END and KEY_LL). But curses will only return one (the
* last one assigned).
*/
static void
check_conflict(TERMTYPE2 *tp)
{
bool conflict = FALSE;
unsigned j, k;
if (!(_nc_syntax == SYN_TERMCAP && capdump)) {
char *check = calloc((size_t) (NUM_STRINGS(tp) + 1), sizeof(char));
NAME_VALUE *given = get_fkey_list(tp);
if (check == 0)
failed("check_conflict");
for (j = 0; given[j].keycode; ++j) {
const char *a = given[j].value;
bool first = TRUE;
if (!VALID_STRING(a))
continue;
for (k = j + 1; given[k].keycode; k++) {
const char *b = given[k].value;
if (!VALID_STRING(b))
continue;
if (check[k])
continue;
if (!_nc_capcmp(a, b)) {
check[j] = 1;
check[k] = 1;
if (first) {
if (!conflict) {
_nc_warning("conflicting key definitions (using the last)");
conflict = TRUE;
}
fprintf(stderr, "...");
show_fkey_name(given + j);
fprintf(stderr, " is the same as");
show_fkey_name(given + k);
first = FALSE;
} else {
fprintf(stderr, ", ");
show_fkey_name(given + k);
}
}
}
if (!first)
fprintf(stderr, "\n");
}
#if NCURSES_XNAMES
if (using_extensions) {
/* *INDENT-OFF* */
static struct {
const char *xcurses;
const char *shifted;
} table[] = {
{ "kDC", NULL },
{ "kDN", "kind" },
{ "kEND", NULL },
{ "kHOM", NULL },
{ "kLFT", NULL },
{ "kNXT", NULL },
{ "kPRV", NULL },
{ "kRIT", NULL },
{ "kUP", "kri" },
{ NULL, NULL },
};
/* *INDENT-ON* */
-
/*
* SVr4 curses defines the "xcurses" names listed above except for
* the special cases in the "shifted" column. When using these
* names for xterm's extensions, that was confusing, and resulted
* in adding extended capabilities with "2" (shift) suffix. This
* check warns about unnecessary use of extensions for this quirk.
*/
for (j = 0; given[j].keycode; ++j) {
const char *find = given[j].name;
int value;
char ch;
if (!VALID_STRING(given[j].value))
continue;
for (k = 0; table[k].xcurses; ++k) {
const char *test = table[k].xcurses;
size_t size = strlen(test);
if (!strncmp(find, test, size) && strcmp(find, test)) {
switch (sscanf(find + size, "%d%c", &value, &ch)) {
case 1:
if (value == 2) {
_nc_warning("expected '%s' rather than '%s'",
(table[k].shifted
? table[k].shifted
: test), find);
} else if (value < 2 || value > 15) {
_nc_warning("expected numeric 2..15 '%s'", find);
}
break;
default:
_nc_warning("expected numeric suffix for '%s'", find);
break;
}
break;
}
}
}
}
#endif
free(given);
free(check);
}
}
/*
* Exiting a video mode should not duplicate sgr0
*/
static void
check_exit_attribute(const char *name, char *test, char *trimmed, char *untrimmed)
{
if (VALID_STRING(test) && (trimmed != 0)) {
if (similar_sgr(-1, trimmed, test) ||
similar_sgr(-1, untrimmed, test)) {
_nc_warning("%s matches exit_attribute_mode", name);
}
}
}
/*
* Returns true if the string looks like a standard SGR string.
*/
static bool
is_sgr_string(char *value)
{
bool result = FALSE;
if (VALID_STRING(value)) {
int skip = csi_length(value);
if (skip) {
int ch;
result = TRUE;
value += skip;
while ((ch = UChar(*value++)) != '\0') {
if (isdigit(ch) || ch == ';') {
;
} else if (ch == 'm' && *value == '\0') {
;
} else {
result = FALSE;
break;
}
}
}
}
return result;
}
/*
* Check if the given capability contains a given SGR attribute.
*/
static void
check_sgr_param(TERMTYPE2 *tp, int code, const char *name, char *value)
{
if (VALID_STRING(value)) {
int ncv = ((code != 0) ? (1 << (code - 1)) : 0);
char *test = tgoto(value, 0, 0);
if (is_sgr_string(test)) {
int param = 0;
int count = 0;
int skips = 0;
int color = (value == set_a_foreground ||
value == set_a_background ||
value == set_foreground ||
value == set_background);
while (*test != 0) {
if (isdigit(UChar(*test))) {
param = 10 * param + (*test - '0');
++count;
} else {
if (count) {
/*
* Avoid unnecessary warning for xterm 256color codes.
*/
if (color && (param == 38 || param == 48))
skips = 3;
if ((skips-- <= 0) && (param == code))
break;
}
count = 0;
param = 0;
}
++test;
}
if (count != 0 && param == code) {
if (code == 0 ||
no_color_video < 0 ||
!(no_color_video & ncv)) {
_nc_warning("\"%s\" SGR-attribute used in %s",
sgr_names[code],
name);
}
}
}
}
}
#if NCURSES_XNAMES
static int
standard_type(const char *name)
{
int result = -1;
const struct name_table_entry *np;
if ((np = _nc_find_entry(name, _nc_get_hash_table(0))) != 0) {
result = np->nte_type;
}
return result;
}
static const char *
name_of_type(int type)
{
const char *result = "unknown";
switch (type) {
case BOOLEAN:
result = "boolean";
break;
case NUMBER:
result = "number";
break;
case STRING:
result = "string";
break;
}
return result;
}
static void
check_user_capability_type(const char *name, int actual)
{
if (lookup_user_capability(name) == 0) {
int expected = standard_type(name);
if (expected >= 0) {
_nc_warning("expected %s to be %s, but actually %s",
name,
name_of_type(actual),
name_of_type(expected)
);
} else if (*name != 'k') {
_nc_warning("undocumented %s capability %s",
name_of_type(actual),
name);
}
}
}
#endif
/* other sanity-checks (things that we don't want in the normal
* logic that reads a terminfo entry)
*/
static void
check_termtype(TERMTYPE2 *tp, bool literal)
{
unsigned j;
check_conflict(tp);
for_each_string(j, tp) {
char *a = tp->Strings[j];
if (VALID_STRING(a)) {
const char *name = ExtStrname(tp, (int) j, strnames);
/*
* If we expect parameters, or if there might be parameters,
* check for consistent number of parameters.
*/
if (j >= SIZEOF(parametrized) ||
is_user_capability(name) >= 0 ||
parametrized[j] > 0) {
check_params(tp, name, a, (j >= STRCOUNT));
}
check_delays(tp, ExtStrname(tp, (int) j, strnames), a);
if (capdump) {
check_infotocap(tp, (int) j, a);
}
}
}
#if NCURSES_XNAMES
/* in extended mode, verify that each extension is expected type */
for_each_ext_boolean(j, tp) {
check_user_capability_type(ExtBoolname(tp, (int) j, strnames), BOOLEAN);
}
for_each_ext_number(j, tp) {
check_user_capability_type(ExtNumname(tp, (int) j, strnames), NUMBER);
}
for_each_ext_string(j, tp) {
check_user_capability_type(ExtStrname(tp, (int) j, strnames), STRING);
}
#endif /* NCURSES_XNAMES */
check_acs(tp);
check_colors(tp);
check_cursor(tp);
check_keypad(tp);
check_printer(tp);
check_screen(tp);
/*
* These are probably both or none.
*/
PAIRED(parm_index, parm_rindex);
PAIRED(parm_ich, parm_dch);
/*
* These may be mismatched because the terminal description relies on
* restoring the cursor visibility by resetting it.
*/
ANDMISSING(cursor_invisible, cursor_normal);
ANDMISSING(cursor_visible, cursor_normal);
if (PRESENT(cursor_visible) && PRESENT(cursor_normal)
&& !_nc_capcmp(cursor_visible, cursor_normal))
_nc_warning("cursor_visible is same as cursor_normal");
/*
* From XSI & O'Reilly, we gather that sc/rc are required if csr is
* given, because the cursor position after the scrolling operation is
* performed is undefined.
*/
ANDMISSING(change_scroll_region, save_cursor);
ANDMISSING(change_scroll_region, restore_cursor);
/*
* If we can clear tabs, we should be able to initialize them.
*/
ANDMISSING(clear_all_tabs, set_tab);
if (PRESENT(set_attributes)) {
char *zero = 0;
_nc_tparm_err = 0;
if (PRESENT(exit_attribute_mode)) {
zero = strdup(CHECK_SGR(0, exit_attribute_mode));
} else {
- zero = strdup(TPARM_9(set_attributes, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+ zero = strdup(TIPARM_9(set_attributes, 0, 0, 0, 0, 0, 0, 0, 0, 0));
}
- if (_nc_tparm_err)
- _nc_warning("stack error in sgr(0) string");
+ check_tparm_err(0);
if (zero != 0) {
CHECK_SGR(1, enter_standout_mode);
CHECK_SGR(2, enter_underline_mode);
CHECK_SGR(3, enter_reverse_mode);
CHECK_SGR(4, enter_blink_mode);
CHECK_SGR(5, enter_dim_mode);
CHECK_SGR(6, enter_bold_mode);
CHECK_SGR(7, enter_secure_mode);
CHECK_SGR(8, enter_protected_mode);
CHECK_SGR(9, enter_alt_charset_mode);
free(zero);
} else {
_nc_warning("sgr(0) did not return a value");
}
} else if (PRESENT(exit_attribute_mode) &&
set_attributes != CANCELLED_STRING) {
if (_nc_syntax == SYN_TERMINFO)
_nc_warning("missing sgr string");
}
#define CHECK_SGR0(name) check_exit_attribute(#name, name, check_sgr0, exit_attribute_mode)
if (PRESENT(exit_attribute_mode)) {
char *check_sgr0 = _nc_trim_sgr0(tp);
if (check_sgr0 == 0 || *check_sgr0 == '\0') {
_nc_warning("trimmed sgr0 is empty");
} else {
show_where(2);
if (check_sgr0 != exit_attribute_mode) {
DEBUG(2,
("will trim sgr0\n\toriginal sgr0=%s\n\ttrimmed sgr0=%s",
_nc_visbuf2(1, exit_attribute_mode),
_nc_visbuf2(2, check_sgr0)));
} else {
DEBUG(2,
("will not trim sgr0\n\toriginal sgr0=%s",
_nc_visbuf(exit_attribute_mode)));
}
}
#if defined(exit_italics_mode)
CHECK_SGR0(exit_italics_mode);
#endif
CHECK_SGR0(exit_standout_mode);
CHECK_SGR0(exit_underline_mode);
if (check_sgr0 != exit_attribute_mode) {
free(check_sgr0);
}
}
#define CHECK_SGR_PARAM(code, name) check_sgr_param(tp, (int)code, #name, name)
for (j = 0; *sgr_names[j] != '\0'; ++j) {
CHECK_SGR_PARAM(j, set_a_foreground);
CHECK_SGR_PARAM(j, set_a_background);
CHECK_SGR_PARAM(j, set_foreground);
CHECK_SGR_PARAM(j, set_background);
}
#ifdef TRACE
show_where(2);
if (!auto_right_margin) {
DEBUG(2,
("can write to lower-right directly"));
} else if (PRESENT(enter_am_mode) && PRESENT(exit_am_mode)) {
DEBUG(2,
("can write to lower-right by suppressing automargin"));
} else if ((PRESENT(enter_insert_mode) && PRESENT(exit_insert_mode))
|| PRESENT(insert_character) || PRESENT(parm_ich)) {
DEBUG(2,
("can write to lower-right by using inserts"));
} else {
DEBUG(2,
("cannot write to lower-right"));
}
#endif
/*
* Some standard applications (e.g., vi) and some non-curses
* applications (e.g., jove) get confused if we have both ich1 and
* smir/rmir. Let's be nice and warn about that, too, even though
* ncurses handles it.
*/
if ((PRESENT(enter_insert_mode) || PRESENT(exit_insert_mode))
&& PRESENT(insert_character)) {
_nc_warning("non-curses applications may be confused by ich1 with smir/rmir");
}
/*
* Finally, do the non-verbose checks
*/
if (save_check_termtype != 0)
save_check_termtype(tp, literal);
}
diff --git a/contrib/ncurses/progs/tparm_type.c b/contrib/ncurses/progs/tparm_type.c
index da681ce90fe2..3da4a0774af5 100644
--- a/contrib/ncurses/progs/tparm_type.c
+++ b/contrib/ncurses/progs/tparm_type.c
@@ -1,72 +1,100 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 2014,2015 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey *
****************************************************************************/
#include <tparm_type.h>
-MODULE_ID("$Id: tparm_type.c,v 1.3 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: tparm_type.c,v 1.4 2020/10/24 17:30:32 tom Exp $")
/*
* Lookup the type of call we should make to tparm(). This ignores the actual
* terminfo capability (bad, because it is not extensible), but makes this
* code portable to platforms where sizeof(int) != sizeof(char *).
*/
TParams
tparm_type(const char *name)
{
#define TD(code, longname, ti, tc) \
{code, {longname} }, \
{code, {ti} }, \
{code, {tc} }
TParams result = Numbers;
/* *INDENT-OFF* */
static const struct {
TParams code;
const char name[12];
} table[] = {
TD(Num_Str, "pkey_key", "pfkey", "pk"),
TD(Num_Str, "pkey_local", "pfloc", "pl"),
TD(Num_Str, "pkey_xmit", "pfx", "px"),
TD(Num_Str, "plab_norm", "pln", "pn"),
TD(Num_Str_Str, "pkey_plab", "pfxl", "xl"),
};
/* *INDENT-ON* */
unsigned n;
for (n = 0; n < SIZEOF(table); n++) {
if (!strcmp(name, table[n].name)) {
result = table[n].code;
break;
}
}
return result;
}
+
+TParams
+guess_tparm_type(int nparam, char **p_is_s)
+{
+ TParams result = Other;
+ switch (nparam) {
+ case 0:
+ case 1:
+ if (!p_is_s[0])
+ result = Numbers;
+ break;
+ case 2:
+ if (!p_is_s[0] && !p_is_s[1])
+ result = Numbers;
+ if (!p_is_s[0] && p_is_s[1])
+ result = Num_Str;
+ break;
+ case 3:
+ if (!p_is_s[0] && !p_is_s[1] && !p_is_s[2])
+ result = Numbers;
+ if (!p_is_s[0] && p_is_s[1] && p_is_s[2])
+ result = Num_Str_Str;
+ break;
+ default:
+ break;
+ }
+ return result;
+}
diff --git a/contrib/ncurses/progs/tparm_type.h b/contrib/ncurses/progs/tparm_type.h
index 77f4f21cfb56..7c102a309c1a 100644
--- a/contrib/ncurses/progs/tparm_type.h
+++ b/contrib/ncurses/progs/tparm_type.h
@@ -1,53 +1,55 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 2014 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Thomas E. Dickey *
****************************************************************************/
/*
- * $Id: tparm_type.h,v 1.2 2020/02/02 23:34:34 tom Exp $
+ * $Id: tparm_type.h,v 1.3 2020/10/24 17:11:33 tom Exp $
*
* determine expected/actual number of parameters to setup for tparm
*/
#ifndef TPARM_TYPE_H
#define TPARM_TYPE_H 1
#define USE_LIBTINFO
#include <progs.priv.h>
typedef enum {
- Numbers = 0
+ Other = -1
+ ,Numbers = 0
,Num_Str
,Num_Str_Str
} TParams;
extern TParams tparm_type(const char *name);
+extern TParams guess_tparm_type(int nparam, char **p_is_s);
#endif /* TPARM_TYPE_H */
diff --git a/contrib/ncurses/progs/tput.c b/contrib/ncurses/progs/tput.c
index 295b83fb8161..cac8d292a94b 100644
--- a/contrib/ncurses/progs/tput.c
+++ b/contrib/ncurses/progs/tput.c
@@ -1,379 +1,395 @@
/****************************************************************************
* Copyright 2018-2019,2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
/*
* tput.c -- shellscript access to terminal capabilities
*
* by Eric S. Raymond <esr@snark.thyrsus.com>, portions based on code from
* Ross Ridge's mytinfo package.
*/
#include <tparm_type.h>
#include <clear_cmd.h>
#include <reset_cmd.h>
#if !PURE_TERMINFO
#include <dump_entry.h>
#include <termsort.c>
#endif
#include <transform.h>
#include <tty_settings.h>
-MODULE_ID("$Id: tput.c,v 1.81 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: tput.c,v 1.84 2020/10/24 18:29:38 tom Exp $")
#define PUTS(s) fputs(s, stdout)
const char *_nc_progname = "tput";
static char *prg_name;
static bool is_init = FALSE;
static bool is_reset = FALSE;
static bool is_clear = FALSE;
static void
-quit(int status, const char *fmt,...)
+quit(int status, const char *fmt, ...)
{
va_list argp;
va_start(argp, fmt);
fprintf(stderr, "%s: ", prg_name);
vfprintf(stderr, fmt, argp);
fprintf(stderr, "\n");
va_end(argp);
ExitProgram(status);
}
static void
usage(void)
{
#define KEEP(s) s "\n"
static const char msg[] =
{
KEEP("")
KEEP("Options:")
KEEP(" -S << read commands from standard input")
KEEP(" -T TERM use this instead of $TERM")
KEEP(" -V print curses-version")
KEEP(" -x do not try to clear scrollback")
KEEP("")
KEEP("Commands:")
KEEP(" clear clear the screen")
KEEP(" init initialize the terminal")
KEEP(" reset reinitialize the terminal")
KEEP(" capname unlike clear/init/reset, print value for capability \"capname\"")
};
#undef KEEP
(void) fprintf(stderr, "Usage: %s [options] [command]\n", prg_name);
fputs(msg, stderr);
ExitProgram(ErrUsage);
}
static char *
check_aliases(char *name, bool program)
{
static char my_init[] = "init";
static char my_reset[] = "reset";
static char my_clear[] = "clear";
char *result = name;
if ((is_init = same_program(name, program ? PROG_INIT : my_init)))
result = my_init;
if ((is_reset = same_program(name, program ? PROG_RESET : my_reset)))
result = my_reset;
if ((is_clear = same_program(name, program ? PROG_CLEAR : my_clear)))
result = my_clear;
return result;
}
static int
exit_code(int token, int value)
{
int result = 99;
switch (token) {
case BOOLEAN:
result = !value; /* TRUE=0, FALSE=1 */
break;
case NUMBER:
result = 0; /* always zero */
break;
case STRING:
result = value; /* 0=normal, 1=missing */
break;
}
return result;
}
/*
* Returns nonzero on error.
*/
static int
tput_cmd(int fd, TTY * saved_settings, bool opt_x, int argc, char *argv[])
{
NCURSES_CONST char *name;
char *s;
int status;
#if !PURE_TERMINFO
bool termcap = FALSE;
#endif
name = check_aliases(argv[0], FALSE);
if (is_reset || is_init) {
TTY oldmode;
int terasechar = -1; /* new erase character */
int intrchar = -1; /* new interrupt character */
int tkillchar = -1; /* new kill character */
if (is_reset) {
reset_start(stdout, TRUE, FALSE);
reset_tty_settings(fd, saved_settings);
} else {
reset_start(stdout, FALSE, TRUE);
}
#if HAVE_SIZECHANGE
set_window_size(fd, &lines, &columns);
#else
(void) fd;
#endif
set_control_chars(saved_settings, terasechar, intrchar, tkillchar);
set_conversions(saved_settings);
if (send_init_strings(fd, &oldmode)) {
reset_flush();
}
update_tty_settings(&oldmode, saved_settings);
return 0;
}
if (strcmp(name, "longname") == 0) {
PUTS(longname());
return 0;
}
#if !PURE_TERMINFO
retry:
#endif
if (strcmp(name, "clear") == 0) {
return (clear_cmd(opt_x) == ERR) ? ErrUsage : 0;
} else if ((status = tigetflag(name)) != -1) {
return exit_code(BOOLEAN, status);
} else if ((status = tigetnum(name)) != CANCELLED_NUMERIC) {
(void) printf("%d\n", status);
return exit_code(NUMBER, 0);
} else if ((s = tigetstr(name)) == CANCELLED_STRING) {
#if !PURE_TERMINFO
if (!termcap) {
const struct name_table_entry *np;
termcap = TRUE;
if ((np = _nc_find_entry(name, _nc_get_hash_table(termcap))) != 0) {
switch (np->nte_type) {
case BOOLEAN:
name = boolnames[np->nte_index];
break;
case NUMBER:
name = numnames[np->nte_index];
break;
case STRING:
name = strnames[np->nte_index];
break;
}
goto retry;
}
}
#endif
quit(ErrCapName, "unknown terminfo capability '%s'", name);
} else if (VALID_STRING(s)) {
if (argc > 1) {
int k;
int ignored;
long numbers[1 + NUM_PARM];
char *strings[1 + NUM_PARM];
char *p_is_s[NUM_PARM];
/* Nasty hack time. The tparm function needs to see numeric
* parameters as numbers, not as pointers to their string
* representations
*/
for (k = 1; (k < argc) && (k < NUM_PARM); k++) {
char *tmp = 0;
strings[k] = argv[k];
numbers[k] = strtol(argv[k], &tmp, 0);
if (tmp == 0 || *tmp != 0)
numbers[k] = 0;
}
for (k = argc; k <= NUM_PARM; k++) {
numbers[k] = 0;
strings[k] = 0;
}
switch (tparm_type(name)) {
case Num_Str:
s = TPARM_2(s, numbers[1], strings[2]);
break;
case Num_Str_Str:
s = TPARM_3(s, numbers[1], strings[2], strings[3]);
break;
case Numbers:
+#define myParam(n) numbers[n]
+ s = TIPARM_9(s,
+ myParam(1),
+ myParam(2),
+ myParam(3),
+ myParam(4),
+ myParam(5),
+ myParam(6),
+ myParam(7),
+ myParam(8),
+ myParam(9));
+#undef myParam
+ break;
+ case Other:
+ /* FALLTHRU */
default:
(void) _nc_tparm_analyze(s, p_is_s, &ignored);
#define myParam(n) (p_is_s[n - 1] != 0 ? ((TPARM_ARG) strings[n]) : numbers[n])
s = TPARM_9(s,
myParam(1),
myParam(2),
myParam(3),
myParam(4),
myParam(5),
myParam(6),
myParam(7),
myParam(8),
myParam(9));
+#undef myParam
break;
}
}
/* use putp() in order to perform padding */
putp(s);
return exit_code(STRING, 0);
}
return exit_code(STRING, 1);
}
int
main(int argc, char **argv)
{
char *term;
int errret;
bool cmdline = TRUE;
int c;
char buf[BUFSIZ];
int result = 0;
int fd;
TTY tty_settings;
bool opt_x = FALSE; /* clear scrollback if possible */
bool is_alias;
bool need_tty;
prg_name = check_aliases(_nc_rootname(argv[0]), TRUE);
term = getenv("TERM");
while ((c = getopt(argc, argv, "ST:Vx")) != -1) {
switch (c) {
case 'S':
cmdline = FALSE;
break;
case 'T':
use_env(FALSE);
use_tioctl(TRUE);
term = optarg;
break;
case 'V':
puts(curses_version());
ExitProgram(EXIT_SUCCESS);
case 'x': /* do not try to clear scrollback */
opt_x = TRUE;
break;
default:
usage();
/* NOTREACHED */
}
}
is_alias = (is_clear || is_reset || is_init);
need_tty = ((is_reset || is_init) ||
(optind < argc &&
(!strcmp(argv[optind], "reset") ||
!strcmp(argv[optind], "init"))));
/*
* Modify the argument list to omit the options we processed.
*/
if (is_alias) {
if (optind-- < argc) {
argc -= optind;
argv += optind;
}
argv[0] = prg_name;
} else {
argc -= optind;
argv += optind;
}
if (term == 0 || *term == '\0')
quit(ErrUsage, "No value for $TERM and no -T specified");
fd = save_tty_settings(&tty_settings, need_tty);
if (setupterm(term, fd, &errret) != OK && errret <= 0)
quit(ErrTermType, "unknown terminal \"%s\"", term);
if (cmdline) {
if ((argc <= 0) && !is_alias)
usage();
ExitProgram(tput_cmd(fd, &tty_settings, opt_x, argc, argv));
}
while (fgets(buf, sizeof(buf), stdin) != 0) {
char *argvec[16]; /* command, 9 parms, null, & slop */
int argnum = 0;
char *cp;
/* crack the argument list into a dope vector */
for (cp = buf; *cp; cp++) {
if (isspace(UChar(*cp))) {
*cp = '\0';
} else if (cp == buf || cp[-1] == 0) {
argvec[argnum++] = cp;
if (argnum >= (int) SIZEOF(argvec) - 1)
break;
}
}
argvec[argnum] = 0;
if (argnum != 0
&& tput_cmd(fd, &tty_settings, opt_x, argnum, argvec) != 0) {
if (result == 0)
result = ErrSystem(0); /* will return value >4 */
++result;
}
}
ExitProgram(result);
}
diff --git a/contrib/ncurses/progs/tset.c b/contrib/ncurses/progs/tset.c
index ca0520e215a1..4d33ca8789c2 100644
--- a/contrib/ncurses/progs/tset.c
+++ b/contrib/ncurses/progs/tset.c
@@ -1,899 +1,908 @@
/****************************************************************************
* Copyright 2020 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* "Software"), to deal in the Software without restriction, including *
* without limitation the rights to use, copy, modify, merge, publish, *
* distribute, distribute with modifications, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included *
* in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
* IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
* *
* Except as contained in this notice, the name(s) of the above copyright *
* holders shall not be used in advertising or otherwise to promote the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************/
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
/*
* Notes:
* The initial adaptation from 4.4BSD Lite sources in September 1995 used 686
* lines from that version, and made changes/additions for 150 lines. There
* was no reformatting, so with/without ignoring whitespace, the amount of
* change is the same.
*
* Comparing with current (2009) source, excluding this comment:
* a) 209 lines match identically to the 4.4BSD Lite sources, with 771 lines
* changed/added.
* a) Ignoring whitespace, the current version still uses 516 lines from the
* 4.4BSD Lite sources, with 402 lines changed/added.
*
* Raymond's original comment on this follows...
*/
/*
* tset.c - terminal initialization utility
*
* This code was mostly swiped from 4.4BSD tset, with some obsolescent
* cruft removed and substantial portions rewritten. A Regents of the
* University of California copyright applies to some portions of the
* code, and is reproduced below:
*/
/*-
* Copyright (c) 1980, 1991, 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. 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 <reset_cmd.h>
#include <termcap.h>
#include <transform.h>
#include <tty_settings.h>
#if HAVE_GETTTYNAM && HAVE_TTYENT_H
#include <ttyent.h>
#endif
#ifdef NeXT
char *ttyname(int fd);
#endif
-MODULE_ID("$Id: tset.c,v 1.121 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: tset.c,v 1.125 2020/09/05 22:54:47 tom Exp $")
#ifndef environ
extern char **environ;
#endif
const char *_nc_progname = "tset";
#define LOWERCASE(c) ((isalpha(UChar(c)) && isupper(UChar(c))) ? tolower(UChar(c)) : (c))
static void exit_error(void) GCC_NORETURN;
static int
CaselessCmp(const char *a, const char *b)
{ /* strcasecmp isn't portable */
while (*a && *b) {
int cmp = LOWERCASE(*a) - LOWERCASE(*b);
if (cmp != 0)
break;
a++, b++;
}
return LOWERCASE(*a) - LOWERCASE(*b);
}
static void
exit_error(void)
{
restore_tty_settings();
(void) fprintf(stderr, "\n");
fflush(stderr);
ExitProgram(EXIT_FAILURE);
/* NOTREACHED */
}
static void
-err(const char *fmt,...)
+err(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
(void) fprintf(stderr, "%s: ", _nc_progname);
(void) vfprintf(stderr, fmt, ap);
va_end(ap);
exit_error();
/* NOTREACHED */
}
static void
failed(const char *msg)
{
char temp[BUFSIZ];
size_t len = strlen(_nc_progname) + 2;
if ((int) len < (int) sizeof(temp) - 12) {
_nc_STRCPY(temp, _nc_progname, sizeof(temp));
_nc_STRCAT(temp, ": ", sizeof(temp));
} else {
_nc_STRCPY(temp, "tset: ", sizeof(temp));
}
_nc_STRNCAT(temp, msg, sizeof(temp), sizeof(temp) - strlen(temp) - 2);
perror(temp);
exit_error();
/* NOTREACHED */
}
/* Prompt the user for a terminal type. */
static const char *
askuser(const char *dflt)
{
static char answer[256];
char *p;
/* We can get recalled; if so, don't continue uselessly. */
clearerr(stdin);
if (feof(stdin) || ferror(stdin)) {
(void) fprintf(stderr, "\n");
exit_error();
/* NOTREACHED */
}
for (;;) {
if (dflt)
(void) fprintf(stderr, "Terminal type? [%s] ", dflt);
else
(void) fprintf(stderr, "Terminal type? ");
(void) fflush(stderr);
if (fgets(answer, sizeof(answer), stdin) == 0) {
if (dflt == 0) {
exit_error();
/* NOTREACHED */
}
return (dflt);
}
if ((p = strchr(answer, '\n')) != 0)
*p = '\0';
if (answer[0])
return (answer);
if (dflt != 0)
return (dflt);
}
}
/**************************************************************************
*
* Mapping logic begins here
*
**************************************************************************/
/* Baud rate conditionals for mapping. */
#define GT 0x01
#define EQ 0x02
#define LT 0x04
#define NOT 0x08
#define GE (GT | EQ)
#define LE (LT | EQ)
typedef struct map {
struct map *next; /* Linked list of maps. */
const char *porttype; /* Port type, or "" for any. */
const char *type; /* Terminal type to select. */
int conditional; /* Baud rate conditionals bitmask. */
int speed; /* Baud rate to compare against. */
} MAP;
static MAP *cur, *maplist;
#define DATA(name,value) { { name }, value }
typedef struct speeds {
- const char string[7];
+ const char string[8];
int speed;
} SPEEDS;
+#if defined(EXP_WIN32_DRIVER)
+static const SPEEDS speeds[] =
+{
+ {"0", 0}
+};
+#else
static const SPEEDS speeds[] =
{
DATA("0", B0),
DATA("50", B50),
DATA("75", B75),
DATA("110", B110),
DATA("134", B134),
DATA("134.5", B134),
DATA("150", B150),
DATA("200", B200),
DATA("300", B300),
DATA("600", B600),
DATA("1200", B1200),
DATA("1800", B1800),
DATA("2400", B2400),
DATA("4800", B4800),
DATA("9600", B9600),
/* sgttyb may define up to this point */
#ifdef B19200
DATA("19200", B19200),
#endif
#ifdef B38400
DATA("38400", B38400),
#endif
#ifdef B19200
DATA("19200", B19200),
#endif
#ifdef B38400
DATA("38400", B38400),
#endif
#ifdef B19200
DATA("19200", B19200),
#else
#ifdef EXTA
DATA("19200", EXTA),
#endif
#endif
#ifdef B38400
DATA("38400", B38400),
#else
#ifdef EXTB
DATA("38400", EXTB),
#endif
#endif
#ifdef B57600
DATA("57600", B57600),
#endif
#ifdef B76800
DATA("76800", B57600),
#endif
#ifdef B115200
DATA("115200", B115200),
#endif
#ifdef B153600
DATA("153600", B153600),
#endif
#ifdef B230400
DATA("230400", B230400),
#endif
#ifdef B307200
DATA("307200", B307200),
#endif
#ifdef B460800
DATA("460800", B460800),
#endif
#ifdef B500000
DATA("500000", B500000),
#endif
#ifdef B576000
DATA("576000", B576000),
#endif
#ifdef B921600
DATA("921600", B921600),
#endif
#ifdef B1000000
DATA("1000000", B1000000),
#endif
#ifdef B1152000
DATA("1152000", B1152000),
#endif
#ifdef B1500000
DATA("1500000", B1500000),
#endif
#ifdef B2000000
DATA("2000000", B2000000),
#endif
#ifdef B2500000
DATA("2500000", B2500000),
#endif
#ifdef B3000000
DATA("3000000", B3000000),
#endif
#ifdef B3500000
DATA("3500000", B3500000),
#endif
#ifdef B4000000
DATA("4000000", B4000000),
#endif
};
#undef DATA
+#endif
static int
tbaudrate(char *rate)
{
const SPEEDS *sp = 0;
size_t n;
/* The baudrate number can be preceded by a 'B', which is ignored. */
if (*rate == 'B')
++rate;
for (n = 0; n < SIZEOF(speeds); ++n) {
if (n > 0 && (speeds[n].speed <= speeds[n - 1].speed)) {
/* if the speeds are not increasing, likely a numeric overflow */
break;
}
if (!CaselessCmp(rate, speeds[n].string)) {
sp = speeds + n;
break;
}
}
if (sp == 0)
err("unknown baud rate %s", rate);
return (sp->speed);
}
/*
* Syntax for -m:
* [port-type][test baudrate]:terminal-type
* The baud rate tests are: >, <, @, =, !
*/
static void
add_mapping(const char *port, char *arg)
{
MAP *mapp;
char *copy, *p;
const char *termp;
char *base = 0;
copy = strdup(arg);
mapp = typeMalloc(MAP, 1);
if (copy == 0 || mapp == 0)
failed("malloc");
assert(copy != 0);
assert(mapp != 0);
mapp->next = 0;
if (maplist == 0)
cur = maplist = mapp;
else {
cur->next = mapp;
cur = mapp;
}
mapp->porttype = arg;
mapp->conditional = 0;
arg = strpbrk(arg, "><@=!:");
if (arg == 0) { /* [?]term */
mapp->type = mapp->porttype;
mapp->porttype = 0;
goto done;
}
if (arg == mapp->porttype) /* [><@=! baud]:term */
termp = mapp->porttype = 0;
else
termp = base = arg;
for (;; ++arg) { /* Optional conditionals. */
switch (*arg) {
case '<':
if (mapp->conditional & GT)
goto badmopt;
mapp->conditional |= LT;
break;
case '>':
if (mapp->conditional & LT)
goto badmopt;
mapp->conditional |= GT;
break;
case '@':
case '=': /* Not documented. */
mapp->conditional |= EQ;
break;
case '!':
mapp->conditional |= NOT;
break;
default:
goto next;
}
}
next:
if (*arg == ':') {
if (mapp->conditional)
goto badmopt;
++arg;
} else { /* Optional baudrate. */
arg = strchr(p = arg, ':');
if (arg == 0)
goto badmopt;
*arg++ = '\0';
mapp->speed = tbaudrate(p);
}
mapp->type = arg;
/* Terminate porttype, if specified. */
if (termp != 0)
*base = '\0';
/* If a NOT conditional, reverse the test. */
if (mapp->conditional & NOT)
mapp->conditional = ~mapp->conditional & (EQ | GT | LT);
/* If user specified a port with an option flag, set it. */
done:
if (port) {
if (mapp->porttype) {
badmopt:
err("illegal -m option format: %s", copy);
}
mapp->porttype = port;
}
free(copy);
#ifdef MAPDEBUG
(void) printf("port: %s\n", mapp->porttype ? mapp->porttype : "ANY");
(void) printf("type: %s\n", mapp->type);
(void) printf("conditional: ");
p = "";
if (mapp->conditional & GT) {
(void) printf("GT");
p = "/";
}
if (mapp->conditional & EQ) {
(void) printf("%sEQ", p);
p = "/";
}
if (mapp->conditional & LT)
(void) printf("%sLT", p);
(void) printf("\nspeed: %d\n", mapp->speed);
#endif
}
/*
* Return the type of terminal to use for a port of type 'type', as specified
* by the first applicable mapping in 'map'. If no mappings apply, return
* 'type'.
*/
static const char *
mapped(const char *type)
{
MAP *mapp;
int match;
for (mapp = maplist; mapp; mapp = mapp->next)
if (mapp->porttype == 0 || !strcmp(mapp->porttype, type)) {
switch (mapp->conditional) {
case 0: /* No test specified. */
match = TRUE;
break;
case EQ:
match = ((int) ospeed == mapp->speed);
break;
case GE:
match = ((int) ospeed >= mapp->speed);
break;
case GT:
match = ((int) ospeed > mapp->speed);
break;
case LE:
match = ((int) ospeed <= mapp->speed);
break;
case LT:
match = ((int) ospeed < mapp->speed);
break;
default:
match = FALSE;
}
if (match)
return (mapp->type);
}
/* No match found; return given type. */
return (type);
}
/**************************************************************************
*
* Entry fetching
*
**************************************************************************/
/*
* Figure out what kind of terminal we're dealing with, and then read in
* its termcap entry.
*/
static const char *
get_termcap_entry(int fd, char *userarg)
{
int errret;
char *p;
const char *ttype;
#if HAVE_GETTTYNAM
struct ttyent *t;
#else
FILE *fp;
#endif
char *ttypath;
(void) fd;
if (userarg) {
ttype = userarg;
goto found;
}
/* Try the environment. */
if ((ttype = getenv("TERM")) != 0)
goto map;
if ((ttypath = ttyname(fd)) != 0) {
p = _nc_basename(ttypath);
#if HAVE_GETTTYNAM
/*
* We have the 4.3BSD library call getttynam(3); that means
* there's an /etc/ttys to look up device-to-type mappings in.
* Try ttyname(3); check for dialup or other mapping.
*/
if ((t = getttynam(p))) {
ttype = t->ty_type;
goto map;
}
#else
if ((fp = fopen("/etc/ttytype", "r")) != 0
|| (fp = fopen("/etc/ttys", "r")) != 0) {
char buffer[BUFSIZ];
char *s, *t, *d;
while (fgets(buffer, sizeof(buffer) - 1, fp) != 0) {
for (s = buffer, t = d = 0; *s; s++) {
if (isspace(UChar(*s)))
*s = '\0';
else if (t == 0)
t = s;
else if (d == 0 && s != buffer && s[-1] == '\0')
d = s;
}
if (t != 0 && d != 0 && !strcmp(d, p)) {
ttype = strdup(t);
fclose(fp);
goto map;
}
}
fclose(fp);
}
#endif /* HAVE_GETTTYNAM */
}
/* If still undefined, use "unknown". */
ttype = "unknown";
map:ttype = mapped(ttype);
/*
* If not a path, remove TERMCAP from the environment so we get a
* real entry from /etc/termcap. This prevents us from being fooled
* by out of date stuff in the environment.
*/
found:
if ((p = getenv("TERMCAP")) != 0 && !_nc_is_abs_path(p)) {
/* 'unsetenv("TERMCAP")' is not portable.
* The 'environ' array is better.
*/
int n;
for (n = 0; environ[n] != 0; n++) {
if (!strncmp("TERMCAP=", environ[n], (size_t) 8)) {
while ((environ[n] = environ[n + 1]) != 0) {
n++;
}
break;
}
}
}
/*
* ttype now contains a pointer to the type of the terminal.
* If the first character is '?', ask the user.
*/
if (ttype[0] == '?') {
if (ttype[1] != '\0')
ttype = askuser(ttype + 1);
else
ttype = askuser(0);
}
/* Find the terminfo entry. If it doesn't exist, ask the user. */
while (setupterm((NCURSES_CONST char *) ttype, fd, &errret)
!= OK) {
if (errret == 0) {
(void) fprintf(stderr, "%s: unknown terminal type %s\n",
_nc_progname, ttype);
ttype = 0;
} else {
(void) fprintf(stderr,
"%s: can't initialize terminal type %s (error %d)\n",
_nc_progname, ttype, errret);
ttype = 0;
}
ttype = askuser(ttype);
}
#if BROKEN_LINKER
tgetflag("am"); /* force lib_termcap.o to be linked for 'ospeed' */
#endif
return (ttype);
}
/**************************************************************************
*
* Main sequence
*
**************************************************************************/
/*
* Convert the obsolete argument forms into something that getopt can handle.
* This means that -e, -i and -k get default arguments supplied for them.
*/
static void
obsolete(char **argv)
{
for (; *argv; ++argv) {
char *parm = argv[0];
if (parm[0] == '-' && parm[1] == '\0') {
argv[0] = strdup("-q");
continue;
}
if ((parm[0] != '-')
|| (argv[1] && argv[1][0] != '-')
|| (parm[1] != 'e' && parm[1] != 'i' && parm[1] != 'k')
|| (parm[2] != '\0'))
continue;
switch (argv[0][1]) {
case 'e':
argv[0] = strdup("-e^H");
break;
case 'i':
argv[0] = strdup("-i^C");
break;
case 'k':
argv[0] = strdup("-k^U");
break;
}
}
}
static void
print_shell_commands(const char *ttype)
{
const char *p;
int len;
char *var;
char *leaf;
/*
* Figure out what shell we're using. A hack, we look for an
* environmental variable SHELL ending in "csh".
*/
if ((var = getenv("SHELL")) != 0
&& ((len = (int) strlen(leaf = _nc_basename(var))) >= 3)
&& !strcmp(leaf + len - 3, "csh"))
p = "set noglob;\nsetenv TERM %s;\nunset noglob;\n";
else
p = "TERM=%s;\n";
(void) printf(p, ttype);
}
static void
usage(void)
{
#define SKIP(s) /* nothing */
#define KEEP(s) s "\n"
static const char msg[] =
{
KEEP("")
KEEP("Options:")
SKIP(" -a arpanet (obsolete)")
KEEP(" -c set control characters")
SKIP(" -d dialup (obsolete)")
KEEP(" -e ch erase character")
KEEP(" -I no initialization strings")
KEEP(" -i ch interrupt character")
KEEP(" -k ch kill character")
KEEP(" -m mapping map identifier to type")
SKIP(" -p plugboard (obsolete)")
KEEP(" -Q do not output control key settings")
KEEP(" -q display term only, do no changes")
KEEP(" -r display term on stderr")
SKIP(" -S (obsolete)")
KEEP(" -s output TERM set command")
KEEP(" -V print curses-version")
KEEP(" -w set window-size")
KEEP("")
KEEP("If neither -c/-w are given, both are assumed.")
};
#undef KEEP
#undef SKIP
(void) fprintf(stderr, "Usage: %s [options] [terminal]\n", _nc_progname);
fputs(msg, stderr);
ExitProgram(EXIT_FAILURE);
/* NOTREACHED */
}
static char
arg_to_char(void)
{
return (char) ((optarg[0] == '^' && optarg[1] != '\0')
? ((optarg[1] == '?') ? '\177' : CTRL(optarg[1]))
: optarg[0]);
}
int
main(int argc, char **argv)
{
int ch, noinit, noset, quiet, Sflag, sflag, showterm;
const char *ttype;
int terasechar = -1; /* new erase character */
int intrchar = -1; /* new interrupt character */
int tkillchar = -1; /* new kill character */
int my_fd;
bool opt_c = FALSE; /* set control-chars */
bool opt_w = FALSE; /* set window-size */
TTY mode, oldmode;
my_fd = STDERR_FILENO;
obsolete(argv);
noinit = noset = quiet = Sflag = sflag = showterm = 0;
while ((ch = getopt(argc, argv, "a:cd:e:Ii:k:m:p:qQrSsVw")) != -1) {
switch (ch) {
case 'c': /* set control-chars */
opt_c = TRUE;
break;
case 'a': /* OBSOLETE: map identifier to type */
add_mapping("arpanet", optarg);
break;
case 'd': /* OBSOLETE: map identifier to type */
add_mapping("dialup", optarg);
break;
case 'e': /* erase character */
terasechar = arg_to_char();
break;
case 'I': /* no initialization strings */
noinit = 1;
break;
case 'i': /* interrupt character */
intrchar = arg_to_char();
break;
case 'k': /* kill character */
tkillchar = arg_to_char();
break;
case 'm': /* map identifier to type */
add_mapping(0, optarg);
break;
case 'p': /* OBSOLETE: map identifier to type */
add_mapping("plugboard", optarg);
break;
case 'Q': /* don't output control key settings */
quiet = 1;
break;
case 'q': /* display term only */
noset = 1;
break;
case 'r': /* display term on stderr */
showterm = 1;
break;
case 'S': /* OBSOLETE: output TERM & TERMCAP */
Sflag = 1;
break;
case 's': /* output TERM set command */
sflag = 1;
break;
case 'V': /* print curses-version */
puts(curses_version());
ExitProgram(EXIT_SUCCESS);
case 'w': /* set window-size */
opt_w = TRUE;
break;
case '?':
default:
usage();
}
}
_nc_progname = _nc_rootname(*argv);
argc -= optind;
argv += optind;
if (argc > 1)
usage();
if (!opt_c && !opt_w)
opt_c = opt_w = TRUE;
my_fd = save_tty_settings(&mode, TRUE);
oldmode = mode;
#ifdef TERMIOS
ospeed = (NCURSES_OSPEED) cfgetospeed(&mode);
+#elif defined(EXP_WIN32_DRIVER)
+ ospeed = 0;
#else
ospeed = (NCURSES_OSPEED) mode.sg_ospeed;
#endif
if (same_program(_nc_progname, PROG_RESET)) {
reset_start(stderr, TRUE, FALSE);
reset_tty_settings(my_fd, &mode);
} else {
reset_start(stderr, FALSE, TRUE);
}
ttype = get_termcap_entry(my_fd, *argv);
if (!noset) {
#if HAVE_SIZECHANGE
if (opt_w) {
set_window_size(my_fd, &lines, &columns);
}
#endif
if (opt_c) {
set_control_chars(&mode, terasechar, intrchar, tkillchar);
set_conversions(&mode);
if (!noinit) {
if (send_init_strings(my_fd, &oldmode)) {
(void) putc('\r', stderr);
(void) fflush(stderr);
(void) napms(1000); /* Settle the terminal. */
}
}
update_tty_settings(&oldmode, &mode);
}
}
if (noset) {
(void) printf("%s\n", ttype);
} else {
if (showterm)
(void) fprintf(stderr, "Terminal type is %s.\n", ttype);
/*
* If erase, kill and interrupt characters could have been
* modified and not -Q, display the changes.
*/
if (!quiet) {
print_tty_chars(&oldmode, &mode);
}
}
if (Sflag)
err("The -S option is not supported under terminfo.");
if (sflag) {
print_shell_commands(ttype);
}
ExitProgram(EXIT_SUCCESS);
}
diff --git a/contrib/ncurses/test/back_ground.c b/contrib/ncurses/test/back_ground.c
new file mode 100644
index 000000000000..100282464ac8
--- /dev/null
+++ b/contrib/ncurses/test/back_ground.c
@@ -0,0 +1,300 @@
+/****************************************************************************
+ * Copyright 2021 Thomas E. Dickey *
+ * *
+ * Permission is hereby granted, free of charge, to any person obtaining a *
+ * copy of this software and associated documentation files (the *
+ * "Software"), to deal in the Software without restriction, including *
+ * without limitation the rights to use, copy, modify, merge, publish, *
+ * distribute, distribute with modifications, sublicense, and/or sell *
+ * copies of the Software, and to permit persons to whom the Software is *
+ * furnished to do so, subject to the following conditions: *
+ * *
+ * The above copyright notice and this permission notice shall be included *
+ * in all copies or substantial portions of the Software. *
+ * *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
+ * *
+ * Except as contained in this notice, the name(s) of the above copyright *
+ * holders shall not be used in advertising or otherwise to promote the *
+ * sale, use or other dealings in this Software without prior written *
+ * authorization. *
+ ****************************************************************************/
+/*
+ * $Id: back_ground.c,v 1.5 2021/02/20 12:23:21 tom Exp $
+ */
+
+#include <test.priv.h>
+
+#if USE_WIDEC_SUPPORT
+
+#define NEED_COLOR_CODE 1
+#define NEED_COLOR_NAME 1
+#include <color_name.h>
+#include <dump_window.h>
+
+static int default_bg = COLOR_BLACK;
+static int default_fg = COLOR_WHITE;
+static wchar_t wide_fill = L' ';
+
+static wchar_t
+decode_wchar(const char *value)
+{
+ long result;
+ char *next = NULL;
+ int radix = 0;
+
+ if (!strncmp(value, "U+", 2)) {
+ value += 2;
+ radix = 16;
+ }
+ result = strtol(value, &next, radix);
+ if (next == value || (next == NULL || *next != '\0')) {
+ fprintf(stderr, "decoding wchar_t: %s\n", value);
+ exit(EXIT_FAILURE);
+ }
+ return (wchar_t) result;
+}
+
+static void
+test_background(void)
+{
+ NCURSES_COLOR_T f, b;
+ int row;
+ int chr;
+ wchar_t blank[2];
+ wchar_t graphics[2];
+ cchar_t data;
+
+ if (pair_content(0, &f, &b) == ERR) {
+ printw("pair 0 contains no data\n");
+ } else {
+ printw("pair 0 contains (%d,%d)\n", (int) f, (int) b);
+ }
+ dump_window(stdscr);
+
+ blank[0] = wide_fill;
+ blank[1] = L'\0';
+
+ printw("Initializing pair 1 to red/%s\n", color_name(default_bg));
+ init_pair(1, COLOR_RED, (NCURSES_COLOR_T) default_bg);
+ setcchar(&data, blank, A_NORMAL, 1, NULL);
+ bkgrndset(&data);
+ printw("RED/BLACK\n");
+ dump_window(stdscr);
+
+ printw("Initializing pair 2 to %s/blue\n", color_name(default_fg));
+ init_pair(2, (NCURSES_COLOR_T) default_fg, COLOR_BLUE);
+ setcchar(&data, blank, A_NORMAL, 2, NULL);
+ bkgrndset(&data);
+ printw("This line should be %s/blue\n", color_name(default_fg));
+ dump_window(stdscr);
+
+ printw("Initializing pair 3 to %s/cyan (ACS_HLINE)\n", color_name(default_fg));
+ init_pair(3, (NCURSES_COLOR_T) default_fg, COLOR_CYAN);
+ printw("...and drawing a box which should be followed by lines\n");
+ graphics[0] = ACS_HLINE & A_CHARTEXT;
+ graphics[1] = L'\0';
+ setcchar(&data, graphics, A_ALTCHARSET, 3, NULL);
+ bkgrndset(&data);
+ /*
+ * Characters from vt100 line-drawing should be mapped to line-drawing,
+ * since A_ALTCHARSET is set in the background, and the character part
+ * of the background is replaced by the nonblank characters written.
+ *
+ * Characters not in the line-drawing range are usually sent as-is.
+ *
+ * With SVr4 curses it is possible to rely on this to mix uppercase text
+ * with the (lowercase) line-drawing characters. ncurses uses some of
+ * the uppercase characters for encoding thick- and double-lines.
+ */
+ row = 7;
+ mvprintw(row++, 10, "l");
+ for (chr = 0; chr < 32; ++chr)
+ AddCh(' ');
+ printw("x\n");
+ chr = 32;
+ while (chr < 128) {
+ if ((chr % 32) == 0)
+ mvprintw(row++, 10, "x");
+ AddCh((chr == 127) ? ' ' : chr);
+ if ((++chr % 32) == 0)
+ printw("x\n");
+ }
+ mvprintw(row++, 10, "m");
+ for (chr = 0; chr < 32; ++chr)
+ AddCh(' ');
+ printw("j\n");
+ dump_window(stdscr);
+
+ setcchar(&data, blank, A_NORMAL, 0, NULL);
+ bkgrndset(&data);
+ printw("Default Colors\n");
+ dump_window(stdscr);
+
+ printw("Resetting colors to pair 1\n");
+ setcchar(&data, blank, A_NORMAL, 1, NULL);
+ bkgrndset(&data);
+ printw("This line should be red/%s\n", color_name(default_bg));
+ dump_window(stdscr);
+
+ printw("Setting screen to pair 0\n");
+ setcchar(&data, blank, A_NORMAL, 0, NULL);
+ bkgrndset(&data);
+ dump_window(stdscr);
+
+ printw("Setting screen to pair 1\n");
+ setcchar(&data, blank, A_NORMAL, 1, NULL);
+ bkgrndset(&data);
+ dump_window(stdscr);
+
+ printw("Setting screen to pair 2\n");
+ setcchar(&data, blank, A_NORMAL, 2, NULL);
+ bkgrndset(&data);
+ dump_window(stdscr);
+
+ printw("Setting screen to pair 3\n");
+ setcchar(&data, blank, A_NORMAL, 3, NULL);
+ bkgrndset(&data);
+ dump_window(stdscr);
+
+ printw("Setting screen to pair 0\n");
+ setcchar(&data, blank, A_NORMAL, 0, NULL);
+ bkgrndset(&data);
+ dump_window(stdscr);
+}
+
+static void
+usage(void)
+{
+ static const char *msg[] =
+ {
+ "Usage: background [options]"
+ ,""
+ ,"Options:"
+#if HAVE_ASSUME_DEFAULT_COLORS
+ ," -a invoke assume_default_colors, repeat to use in init_pair"
+#endif
+ ," -b XXX specify background color"
+#if HAVE_USE_DEFAULT_COLORS
+ ," -d invoke use_default_colors, repeat to use in init_pair"
+#endif
+ ," -f XXX specify foreground color"
+ ," -l FILE log window-dumps to this file"
+ ," -w fill background with stipple pattern"
+ ," -W CODE fill background with this Unicode value"
+ };
+ size_t n;
+
+ for (n = 0; n < SIZEOF(msg); n++)
+ fprintf(stderr, "%s\n", msg[n]);
+
+ ExitProgram(EXIT_FAILURE);
+}
+
+int
+main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
+{
+#if HAVE_ASSUME_DEFAULT_COLORS
+ int a_option = 0;
+#endif
+#if HAVE_USE_DEFAULT_COLORS
+ int d_option = 0;
+#endif
+ int n;
+
+ setlocale(LC_ALL, "");
+
+ while ((n = getopt(argc, argv, "ab:df:l:wW:")) != -1) {
+ switch (n) {
+#if HAVE_ASSUME_DEFAULT_COLORS
+ case 'a':
+ ++a_option;
+ break;
+#endif
+ case 'b':
+ default_bg = color_code(optarg);
+ break;
+#if HAVE_USE_DEFAULT_COLORS
+ case 'd':
+ ++d_option;
+ break;
+#endif
+ case 'f':
+ default_fg = color_code(optarg);
+ break;
+ case 'l':
+ if (!open_dump(optarg))
+ usage();
+ break;
+ case 'w':
+ wide_fill = L'\u2591';
+ break;
+ case 'W':
+ wide_fill = decode_wchar(optarg);
+ break;
+ default:
+ usage();
+ }
+ }
+#if HAVE_USE_DEFAULT_COLORS && HAVE_ASSUME_DEFAULT_COLORS
+ if (a_option && d_option) {
+ fprintf(stderr, "Use either -a or -d option, but not both\n");
+ ExitProgram(EXIT_FAILURE);
+ }
+#endif
+
+ initscr();
+ cbreak();
+ noecho();
+
+ if (has_colors()) {
+ start_color();
+
+#if HAVE_USE_DEFAULT_COLORS
+ if (d_option) {
+ printw("Using default colors...\n");
+ use_default_colors();
+ if (d_option > 1) {
+ default_fg = -1;
+ default_bg = -1;
+ }
+ }
+#endif
+#if HAVE_ASSUME_DEFAULT_COLORS
+ if (a_option) {
+ printw("Using assumed colors %s/%s...\n",
+ color_name(default_fg),
+ color_name(default_bg));
+ assume_default_colors(default_fg, default_bg);
+ if (a_option > 1) {
+ default_fg = -1;
+ default_bg = -1;
+ }
+ }
+#endif
+
+ test_background();
+
+ } else {
+ printw("This demo requires a color terminal");
+ getch();
+ }
+ endwin();
+ close_dump();
+ ExitProgram(EXIT_SUCCESS);
+}
+
+#else
+int
+main(void)
+{
+ printf("This program requires the wide-curses library\n");
+ ExitProgram(EXIT_FAILURE);
+}
+#endif /* USE_WIDEC_SUPPORT */
diff --git a/contrib/ncurses/test/dup_field.c b/contrib/ncurses/test/dup_field.c
new file mode 100644
index 000000000000..5ca67f0b0f5a
--- /dev/null
+++ b/contrib/ncurses/test/dup_field.c
@@ -0,0 +1,394 @@
+/****************************************************************************
+ * Copyright 2020 Thomas E. Dickey *
+ * *
+ * Permission is hereby granted, free of charge, to any person obtaining a *
+ * copy of this software and associated documentation files (the *
+ * "Software"), to deal in the Software without restriction, including *
+ * without limitation the rights to use, copy, modify, merge, publish, *
+ * distribute, distribute with modifications, sublicense, and/or sell *
+ * copies of the Software, and to permit persons to whom the Software is *
+ * furnished to do so, subject to the following conditions: *
+ * *
+ * The above copyright notice and this permission notice shall be included *
+ * in all copies or substantial portions of the Software. *
+ * *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
+ * *
+ * Except as contained in this notice, the name(s) of the above copyright *
+ * holders shall not be used in advertising or otherwise to promote the *
+ * sale, use or other dealings in this Software without prior written *
+ * authorization. *
+ ****************************************************************************/
+/*
+ * $Id: dup_field.c,v 1.1 2020/03/21 19:28:36 tom Exp $
+ *
+ * Demonstrate move_field().
+ */
+
+#include <test.priv.h>
+
+#if USE_LIBFORM
+
+#include <edit_field.h>
+#include <popup_msg.h>
+
+#define MY_DEMO EDIT_FIELD('f')
+
+static char empty[] = "";
+static FIELD *all_fields[100];
+
+/* *INDENT-OFF* */
+static struct {
+ int code;
+ int result;
+ const char *help;
+} commands[] = {
+ { CTRL('A'), REQ_BEG_FIELD, "go to beginning of field" },
+ { CTRL('D'), REQ_DOWN_FIELD, "move downward to field" },
+ { CTRL('E'), REQ_END_FIELD, "go to end of field" },
+ { CTRL('G'), MY_DEMO, "move current field with cursor keys" },
+ { CTRL('H'), REQ_DEL_PREV, "delete previous character" },
+ { CTRL('I'), REQ_NEXT_FIELD, "go to next field" },
+ { CTRL('K'), REQ_CLR_EOF, "clear to end of field" },
+ { CTRL('N'), REQ_NEXT_FIELD, "go to next field" },
+ { CTRL('P'), REQ_PREV_FIELD, "go to previous field" },
+ { CTRL('Q'), MY_QUIT, "exit form" },
+ { CTRL('U'), REQ_UP_FIELD, "move upward to field" },
+ { CTRL('W'), REQ_NEXT_WORD, "go to next word" },
+ { CTRL('X'), REQ_CLR_FIELD, "clear field" },
+ { CTRL('['), MY_QUIT, "exit form" },
+ { KEY_F(1), MY_HELP, "show this screen", },
+ { KEY_BACKSPACE, REQ_DEL_PREV, "delete previous character" },
+ { KEY_BTAB, REQ_PREV_FIELD, "go to previous field" },
+ { KEY_DOWN, REQ_DOWN_CHAR, "move down 1 character" },
+ { KEY_END, REQ_LAST_FIELD, "go to last field" },
+ { KEY_HOME, REQ_FIRST_FIELD, "go to first field" },
+ { KEY_LEFT, REQ_LEFT_CHAR, "move left 1 character" },
+ { KEY_NEXT, REQ_NEXT_FIELD, "go to next field" },
+ { KEY_PREVIOUS, REQ_PREV_FIELD, "go to previous field" },
+ { KEY_RIGHT, REQ_RIGHT_CHAR, "move right 1 character" },
+ { KEY_UP, REQ_UP_CHAR, "move up 1 character" }
+};
+/* *INDENT-ON* */
+
+static void
+my_help_edit_field(void)
+{
+ int used = 0;
+ unsigned n;
+ char **msgs = typeCalloc(char *, 3 + SIZEOF(commands));
+
+ msgs[used++] = strdup("Defined form edit/traversal keys:");
+ for (n = 0; n < SIZEOF(commands); ++n) {
+ char *msg;
+ const char *name;
+ const char *code = keyname(commands[n].code);
+ size_t need = 5;
+#ifdef NCURSES_VERSION
+ if ((name = form_request_name(commands[n].result)) == 0)
+#endif
+ name = commands[n].help;
+ need = 5 + strlen(code) + strlen(name);
+ msg = typeMalloc(char, need);
+ _nc_SPRINTF(msg, _nc_SLIMIT(need) "%s -- %s", code, name);
+ msgs[used++] = msg;
+ }
+ msgs[used++] =
+ strdup("Arrow keys move within a field as you would expect.");
+ msgs[used] = 0;
+ popup_msg2(stdscr, msgs);
+ for (n = 0; msgs[n] != 0; ++n) {
+ free(msgs[n]);
+ }
+ free(msgs);
+}
+
+static void
+do_demo(FORM *form)
+{
+}
+
+static FIELD *
+make_label(const char *label, int frow, int fcol)
+{
+ FIELD *f = new_field(1, (int) strlen(label), frow, fcol, 0, 0);
+
+ if (f) {
+ set_field_buffer(f, 0, label);
+ set_field_opts(f, (int) ((unsigned) field_opts(f) & ~O_ACTIVE));
+ }
+ return (f);
+}
+
+static FIELD *
+make_field(int frow, int fcol, int rows, int cols)
+{
+ FIELD *f = new_field(rows, cols, frow, fcol, 0, 1);
+
+ if (f) {
+ set_field_back(f, A_UNDERLINE);
+ init_edit_field(f, empty);
+ }
+ return (f);
+}
+
+static void
+erase_form(FORM *f)
+{
+ WINDOW *w = form_win(f);
+ WINDOW *s = form_sub(f);
+
+ unpost_form(f);
+ werase(w);
+ wrefresh(w);
+ delwin(s);
+ delwin(w);
+}
+
+static int
+my_form_driver(FORM *form, int c)
+{
+ switch (c) {
+ case MY_QUIT:
+ if (form_driver(form, REQ_VALIDATION) == E_OK)
+ return (TRUE);
+ break;
+ case MY_HELP:
+ my_help_edit_field();
+ break;
+ case MY_DEMO:
+ do_demo(form);
+ break;
+ default:
+ beep();
+ break;
+ }
+ return (FALSE);
+}
+
+static FieldAttrs *
+my_field_attrs(FIELD *f)
+{
+ return (FieldAttrs *) field_userptr(f);
+}
+
+static int
+buffer_length(FIELD *f)
+{
+ return my_field_attrs(f)->row_lengths[0];
+}
+
+static void
+set_buffer_length(FIELD *f, int length)
+{
+ my_field_attrs(f)->row_lengths[0] = length;
+}
+
+static int
+offset_in_field(FORM *form)
+{
+ FIELD *field = current_field(form);
+ int currow, curcol;
+
+ form_getyx(form, currow, curcol);
+ return curcol + currow * (int) field->dcols;
+}
+
+static void
+inactive_field(FIELD *f)
+{
+ set_field_back(f, my_field_attrs(f)->background);
+}
+
+static int
+my_edit_field(FORM *form, int *result)
+{
+ int ch = wgetch(form_win(form));
+ int status;
+ FIELD *before;
+ unsigned n;
+ int length;
+ int before_row;
+ int before_col;
+ int before_off = offset_in_field(form);
+
+ form_getyx(form, before_row, before_col);
+ before = current_field(form);
+ set_field_back(before, A_NORMAL);
+ if (ch <= KEY_MAX) {
+ set_field_back(before, A_REVERSE);
+ } else if (ch <= MAX_FORM_COMMAND) {
+ inactive_field(before);
+ }
+
+ *result = ch;
+ for (n = 0; n < SIZEOF(commands); ++n) {
+ if (commands[n].code == ch) {
+ *result = commands[n].result;
+ break;
+ }
+ }
+
+ status = form_driver(form, *result);
+
+ if (status == E_OK) {
+ bool modified = TRUE;
+
+ length = buffer_length(before);
+ if (length < before_off)
+ length = before_off;
+ switch (*result) {
+ case REQ_CLR_EOF:
+ length = before_off;
+ break;
+ case REQ_CLR_EOL:
+ if ((int) (before_row + 1) == (int) (before->rows))
+ length = before_off;
+ break;
+ case REQ_CLR_FIELD:
+ length = 0;
+ break;
+ case REQ_DEL_CHAR:
+ if (length > before_off)
+ --length;
+ break;
+ case REQ_DEL_PREV:
+ if (length > 0) {
+ if (before_col > 0) {
+ --length;
+ } else if (before_row > 0) {
+ length -= (int) before->cols + before_col;
+ }
+ }
+ break;
+ case REQ_NEW_LINE:
+ length += (int) before->cols;
+ break;
+
+ default:
+ modified = (ch < MIN_FORM_COMMAND
+ && isprint(ch));
+ break;
+ }
+
+ /*
+ * If we do not force a re-validation, then field_buffer 0 will
+ * be lagging by one character.
+ */
+ if (modified && form_driver(form, REQ_VALIDATION) == E_OK && *result
+ < MIN_FORM_COMMAND)
+ ++length;
+
+ set_buffer_length(before, length);
+ }
+
+ if (current_field(form) != before)
+ inactive_field(before);
+ return status;
+}
+
+static void
+demo_forms(void)
+{
+ FORM *form;
+ int c;
+ unsigned n = 0;
+ const char *fname;
+
+ /* describe the form */
+ all_fields[n++] = make_label("Sample Form", 0, 15);
+
+ fname = "Last Name";
+ all_fields[n++] = make_label(fname, 2, 0);
+ all_fields[n++] = make_field(3, 0, 1, 18);
+ set_field_type(all_fields[n - 1], TYPE_ALPHA, 1);
+
+ fname = "First Name";
+ all_fields[n++] = make_label(fname, 2, 20);
+ all_fields[n++] = make_field(3, 20, 1, 12);
+ set_field_type(all_fields[n - 1], TYPE_ALPHA, 1);
+
+ fname = "Middle Name";
+ all_fields[n++] = make_label(fname, 2, 34);
+ all_fields[n++] = make_field(3, 34, 1, 12);
+ set_field_type(all_fields[n - 1], TYPE_ALPHA, 1);
+
+ fname = "Comments";
+ all_fields[n++] = make_label(fname, 5, 0);
+ all_fields[n++] = make_field(6, 0, 4, 46);
+ init_edit_field(all_fields[n - 1], empty);
+
+ all_fields[n] = (FIELD *) 0;
+
+ if ((form = new_form(all_fields)) != 0) {
+ int finished = 0;
+
+ post_form(form);
+
+ while (!finished) {
+ switch (my_edit_field(form, &c)) {
+ case E_OK:
+ break;
+ case E_UNKNOWN_COMMAND:
+ finished = my_form_driver(form, c);
+ break;
+ default:
+ beep();
+ break;
+ }
+ }
+
+ erase_form(form);
+
+ free_form(form);
+ }
+ for (c = 0; all_fields[c] != 0; c++) {
+ free_edit_field(all_fields[c]);
+ free_field(all_fields[c]);
+ }
+ noraw();
+ nl();
+}
+
+int
+main(void)
+{
+ setlocale(LC_ALL, "");
+
+ initscr();
+ cbreak();
+ noecho();
+ raw();
+ nonl(); /* lets us read ^M's */
+ intrflush(stdscr, FALSE);
+ keypad(stdscr, TRUE);
+
+ if (has_colors()) {
+ start_color();
+ init_pair(1, COLOR_WHITE, COLOR_BLUE);
+ init_pair(2, COLOR_GREEN, COLOR_BLACK);
+ init_pair(3, COLOR_CYAN, COLOR_BLACK);
+ bkgd((chtype) COLOR_PAIR(1));
+ refresh();
+ }
+
+ demo_forms();
+
+ endwin();
+ ExitProgram(EXIT_SUCCESS);
+}
+
+#else
+int
+main(void)
+{
+ printf("This program requires the curses form library\n");
+ ExitProgram(EXIT_FAILURE);
+}
+#endif
diff --git a/contrib/ncurses/test/move_field.c b/contrib/ncurses/test/move_field.c
new file mode 100644
index 000000000000..8344c56f8c14
--- /dev/null
+++ b/contrib/ncurses/test/move_field.c
@@ -0,0 +1,524 @@
+/****************************************************************************
+ * Copyright 2020 Thomas E. Dickey *
+ * *
+ * Permission is hereby granted, free of charge, to any person obtaining a *
+ * copy of this software and associated documentation files (the *
+ * "Software"), to deal in the Software without restriction, including *
+ * without limitation the rights to use, copy, modify, merge, publish, *
+ * distribute, distribute with modifications, sublicense, and/or sell *
+ * copies of the Software, and to permit persons to whom the Software is *
+ * furnished to do so, subject to the following conditions: *
+ * *
+ * The above copyright notice and this permission notice shall be included *
+ * in all copies or substantial portions of the Software. *
+ * *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
+ * *
+ * Except as contained in this notice, the name(s) of the above copyright *
+ * holders shall not be used in advertising or otherwise to promote the *
+ * sale, use or other dealings in this Software without prior written *
+ * authorization. *
+ ****************************************************************************/
+/*
+ * $Id: move_field.c,v 1.7 2020/05/09 12:52:00 tom Exp $
+ *
+ * Demonstrate move_field().
+ */
+
+#include <test.priv.h>
+
+#if USE_LIBFORM
+
+#include <edit_field.h>
+#include <popup_msg.h>
+
+#ifdef HAVE_NETBSD_FORM_H
+#define form_field_row(field) (field)->form_row
+#define form_field_col(field) (field)->form_col
+#else /* e.g., SVr4, ncurses */
+#define form_field_row(field) (field)->frow
+#define form_field_col(field) (field)->fcol
+#endif
+
+#define DO_DEMO CTRL('F') /* actual key for toggling demo-mode */
+#define MY_DEMO EDIT_FIELD('f') /* internal request-code */
+
+static char empty[] = "";
+static FIELD *all_fields[100];
+
+/* *INDENT-OFF* */
+static struct {
+ int code;
+ int result;
+ const char *help;
+} commands[] = {
+ { CTRL('A'), REQ_BEG_FIELD, "go to beginning of field" },
+ { CTRL('D'), REQ_DOWN_FIELD, "move downward to field" },
+ { CTRL('E'), REQ_END_FIELD, "go to end of field" },
+ { CTRL('H'), REQ_DEL_PREV, "delete previous character" },
+ { CTRL('I'), REQ_NEXT_FIELD, "go to next field" },
+ { CTRL('K'), REQ_CLR_EOF, "clear to end of field" },
+ { CTRL('N'), REQ_NEXT_FIELD, "go to next field" },
+ { CTRL('P'), REQ_PREV_FIELD, "go to previous field" },
+ { CTRL('Q'), MY_QUIT, "exit form" },
+ { CTRL('U'), REQ_UP_FIELD, "move upward to field" },
+ { CTRL('W'), REQ_NEXT_WORD, "go to next word" },
+ { CTRL('X'), REQ_CLR_FIELD, "clear field" },
+ { CTRL('['), MY_QUIT, "exit form" },
+ { KEY_F(1), MY_HELP, "show this screen", },
+ { KEY_BACKSPACE, REQ_DEL_PREV, "delete previous character" },
+ { KEY_BTAB, REQ_PREV_FIELD, "go to previous field" },
+ { KEY_DOWN, REQ_DOWN_CHAR, "move down 1 character" },
+ { KEY_END, REQ_LAST_FIELD, "go to last field" },
+ { KEY_HOME, REQ_FIRST_FIELD, "go to first field" },
+ { KEY_LEFT, REQ_LEFT_CHAR, "move left 1 character" },
+ { KEY_NEXT, REQ_NEXT_FIELD, "go to next field" },
+ { KEY_PREVIOUS, REQ_PREV_FIELD, "go to previous field" },
+ { KEY_RIGHT, REQ_RIGHT_CHAR, "move right 1 character" },
+ { KEY_UP, REQ_UP_CHAR, "move up 1 character" },
+ { DO_DEMO, MY_DEMO, "move current field with cursor keys" }
+};
+/* *INDENT-ON* */
+
+static void
+my_help_edit_field(void)
+{
+ int used = 0;
+ unsigned n;
+ char **msgs = typeCalloc(char *, 3 + SIZEOF(commands));
+
+ msgs[used++] = strdup("Defined form edit/traversal keys:");
+ for (n = 0; n < SIZEOF(commands); ++n) {
+ char *msg;
+ const char *name;
+ const char *code = keyname(commands[n].code);
+ size_t need = 5;
+#ifdef NCURSES_VERSION
+ if ((name = form_request_name(commands[n].result)) == 0)
+#endif
+ name = commands[n].help;
+ need = 5 + strlen(code) + strlen(name);
+ msg = typeMalloc(char, need);
+ _nc_SPRINTF(msg, _nc_SLIMIT(need) "%s -- %s", code, name);
+ msgs[used++] = msg;
+ }
+ msgs[used++] =
+ strdup("Arrow keys move within a field as you would expect.");
+ msgs[used] = 0;
+ popup_msg2(stdscr, msgs);
+ for (n = 0; msgs[n] != 0; ++n) {
+ free(msgs[n]);
+ }
+ free(msgs);
+}
+
+static FIELD *
+make_label(const char *label, int frow, int fcol)
+{
+ FIELD *f = new_field(1, (int) strlen(label), frow, fcol, 0, 0);
+
+ if (f) {
+ set_field_buffer(f, 0, label);
+ set_field_opts(f, (int) ((unsigned) field_opts(f) & ~O_ACTIVE));
+ }
+ return (f);
+}
+
+static FIELD *
+make_field(int frow, int fcol, int rows, int cols)
+{
+ FIELD *f = new_field(rows, cols, frow, fcol, 0, 1);
+
+ if (f) {
+ set_field_back(f, A_UNDERLINE);
+ init_edit_field(f, empty);
+ }
+ return (f);
+}
+
+static void
+erase_form(FORM *f)
+{
+ WINDOW *w = form_win(f);
+ WINDOW *s = form_sub(f);
+
+ unpost_form(f);
+ werase(w);
+ wrefresh(w);
+ delwin(s);
+ delwin(w);
+}
+
+static FieldAttrs *
+my_field_attrs(FIELD *f)
+{
+ return (FieldAttrs *) field_userptr(f);
+}
+
+static int
+buffer_length(FIELD *f)
+{
+ return my_field_attrs(f)->row_lengths[0];
+}
+
+static void
+set_buffer_length(FIELD *f, int length)
+{
+ my_field_attrs(f)->row_lengths[0] = length;
+}
+
+static int
+offset_in_field(FORM *form)
+{
+ FIELD *field = current_field(form);
+ int currow, curcol;
+
+ form_getyx(form, currow, curcol);
+ return curcol + currow * (int) field->dcols;
+}
+
+static void
+inactive_field(FIELD *f)
+{
+ set_field_back(f, my_field_attrs(f)->background);
+}
+
+static int
+my_edit_field(FORM *form, int *result)
+{
+ int ch = wgetch(form_win(form));
+ int status;
+ FIELD *before;
+ unsigned n;
+ int length;
+ int before_row;
+ int before_col;
+ int before_off = offset_in_field(form);
+
+ form_getyx(form, before_row, before_col);
+ before = current_field(form);
+ set_field_back(before, A_NORMAL);
+ if (ch <= KEY_MAX) {
+ set_field_back(before, A_REVERSE);
+ } else if (ch <= MAX_FORM_COMMAND) {
+ inactive_field(before);
+ }
+
+ *result = ch;
+ for (n = 0; n < SIZEOF(commands); ++n) {
+ if (commands[n].code == ch) {
+ *result = commands[n].result;
+ break;
+ }
+ }
+
+ status = form_driver(form, *result);
+
+ if (status == E_OK) {
+ bool modified = TRUE;
+
+ length = buffer_length(before);
+ if (length < before_off)
+ length = before_off;
+ switch (*result) {
+ case REQ_CLR_EOF:
+ length = before_off;
+ break;
+ case REQ_CLR_EOL:
+ if ((int) (before_row + 1) == (int) (before->rows))
+ length = before_off;
+ break;
+ case REQ_CLR_FIELD:
+ length = 0;
+ break;
+ case REQ_DEL_CHAR:
+ if (length > before_off)
+ --length;
+ break;
+ case REQ_DEL_PREV:
+ if (length > 0) {
+ if (before_col > 0) {
+ --length;
+ } else if (before_row > 0) {
+ length -= (int) before->cols + before_col;
+ }
+ }
+ break;
+ case REQ_NEW_LINE:
+ length += (int) before->cols;
+ break;
+
+ default:
+ modified = (ch < MIN_FORM_COMMAND
+ && isprint(ch));
+ break;
+ }
+
+ /*
+ * If we do not force a re-validation, then field_buffer 0 will
+ * be lagging by one character.
+ */
+ if (modified && form_driver(form, REQ_VALIDATION) == E_OK && *result
+ < MIN_FORM_COMMAND)
+ ++length;
+
+ set_buffer_length(before, length);
+ }
+
+ if (current_field(form) != before)
+ inactive_field(before);
+ return status;
+}
+
+static FIELD **
+copy_fields(FIELD **source, size_t length)
+{
+ FIELD **target = calloc(length + 1, sizeof(FIELD *));
+ memcpy(target, source, length * sizeof(FIELD *));
+ return target;
+}
+
+/* display a status message to show what's happening */
+static void
+show_status(FORM *form, FIELD *field)
+{
+ WINDOW *sub = form_sub(form);
+ int currow, curcol;
+
+ getyx(stdscr, currow, curcol);
+ mvprintw(LINES - 1, 0,
+ "Field at [%d,%d]. Press %s to quit moving.",
+ getbegy(sub) + form_field_row(field),
+ getbegx(sub) + form_field_col(field),
+ keyname(DO_DEMO));
+ clrtobot();
+ move(currow, curcol);
+ refresh();
+}
+
+/*
+ * Move the current label+field in response to cursor-keys (or h,j,k,l) until
+ * a control/F is read.
+ */
+static void
+do_demo(FORM *form)
+{
+ int count = field_count(form);
+ FIELD *my_field = current_field(form);
+
+ if (count > 0 && my_field != NULL) {
+ size_t needed = (size_t) count;
+ FIELD **old_fields = copy_fields(form_fields(form), needed);
+ FIELD **new_fields = copy_fields(form_fields(form), needed);
+ int ch;
+
+ if (old_fields != NULL && new_fields != NULL) {
+ bool found = FALSE;
+
+ /* TODO: move the label too, in parallel with the editing field */
+
+ /* remove the current field from the newer list */
+ for (ch = 0; ch <= count; ++ch) {
+ if (found) {
+ new_fields[ch - 1] = new_fields[ch];
+ } else if (new_fields[ch] == my_field) {
+ found = TRUE;
+ }
+ }
+
+ if (found) {
+ int currow, curcol;
+
+ getyx(stdscr, currow, curcol);
+
+ show_status(form, my_field);
+ ch = '?';
+ while ((ch = wgetch(form_win(form))) != DO_DEMO) {
+ int field_y = form_field_row(my_field);
+ int field_x = form_field_col(my_field);
+
+ switch (ch) {
+ case 'h':
+ case KEY_LEFT:
+ if (field_x > 0)
+ field_x--;
+ break;
+ case 'j':
+ case KEY_DOWN:
+ field_y++;
+ break;
+ case 'k':
+ case KEY_UP:
+ if (field_y > 0)
+ field_y--;
+ break;
+ case 'l':
+ case KEY_RIGHT:
+ field_x++;
+ break;
+ case CTRL('Q'):
+ case CTRL('['):
+ ch = DO_DEMO;
+ /* FALLTHRU */
+ case DO_DEMO:
+ break;
+ default:
+ continue;
+ }
+
+ if (ch == DO_DEMO)
+ break;
+
+ /* alter connected fields temporarily to move the field */
+ unpost_form(form);
+ set_form_fields(form, new_fields);
+ post_form(form);
+
+ /* TODO: update screen position on success */
+ move_field(my_field, field_y, field_x);
+
+ /* restore the form's list of fields */
+ unpost_form(form);
+ set_form_fields(form, old_fields);
+ post_form(form);
+
+ show_status(form, my_field);
+ }
+
+ /* cleanup */
+ move(LINES - 1, 0);
+ clrtobot();
+ move(currow, curcol);
+ refresh();
+ }
+ }
+ free(new_fields);
+ }
+}
+
+static int
+my_form_driver(FORM *form, int c)
+{
+ switch (c) {
+ case MY_QUIT:
+ if (form_driver(form, REQ_VALIDATION) == E_OK)
+ return (TRUE);
+ break;
+ case MY_HELP:
+ my_help_edit_field();
+ break;
+ case MY_DEMO:
+ do_demo(form);
+ break;
+ default:
+ beep();
+ break;
+ }
+ return (FALSE);
+}
+
+static void
+demo_forms(void)
+{
+ FORM *form;
+ int c;
+ unsigned n = 0;
+ const char *fname;
+
+ /* describe the form */
+ all_fields[n++] = make_label("Sample Form", 0, 15);
+
+ fname = "Last Name";
+ all_fields[n++] = make_label(fname, 2, 0);
+ all_fields[n++] = make_field(3, 0, 1, 18);
+ set_field_type(all_fields[n - 1], TYPE_ALPHA, 1);
+
+ fname = "First Name";
+ all_fields[n++] = make_label(fname, 2, 20);
+ all_fields[n++] = make_field(3, 20, 1, 12);
+ set_field_type(all_fields[n - 1], TYPE_ALPHA, 1);
+
+ fname = "Middle Name";
+ all_fields[n++] = make_label(fname, 2, 34);
+ all_fields[n++] = make_field(3, 34, 1, 12);
+ set_field_type(all_fields[n - 1], TYPE_ALPHA, 1);
+
+ fname = "Comments";
+ all_fields[n++] = make_label(fname, 5, 0);
+ all_fields[n++] = make_field(6, 0, 4, 46);
+ init_edit_field(all_fields[n - 1], empty);
+
+ all_fields[n] = (FIELD *) 0;
+
+ if ((form = new_form(all_fields)) != 0) {
+ int finished = 0;
+
+ post_form(form);
+
+ while (!finished) {
+ switch (my_edit_field(form, &c)) {
+ case E_OK:
+ break;
+ case E_UNKNOWN_COMMAND:
+ finished = my_form_driver(form, c);
+ break;
+ default:
+ beep();
+ break;
+ }
+ }
+
+ erase_form(form);
+
+ free_form(form);
+ }
+ for (c = 0; all_fields[c] != 0; c++) {
+ free_edit_field(all_fields[c]);
+ free_field(all_fields[c]);
+ }
+ noraw();
+ nl();
+}
+
+int
+main(void)
+{
+ setlocale(LC_ALL, "");
+
+ initscr();
+ cbreak();
+ noecho();
+ raw();
+ nonl(); /* lets us read ^M's */
+ intrflush(stdscr, FALSE);
+ keypad(stdscr, TRUE);
+
+ if (has_colors()) {
+ start_color();
+ init_pair(1, COLOR_WHITE, COLOR_BLUE);
+ init_pair(2, COLOR_GREEN, COLOR_BLACK);
+ init_pair(3, COLOR_CYAN, COLOR_BLACK);
+ bkgd((chtype) COLOR_PAIR(1));
+ refresh();
+ }
+
+ demo_forms();
+
+ endwin();
+ ExitProgram(EXIT_SUCCESS);
+}
+
+#else
+int
+main(void)
+{
+ printf("This program requires the curses form library\n");
+ ExitProgram(EXIT_FAILURE);
+}
+#endif
diff --git a/contrib/ncurses/test/test_tparm.c b/contrib/ncurses/test/test_tparm.c
new file mode 100644
index 000000000000..40ffc4fb1d07
--- /dev/null
+++ b/contrib/ncurses/test/test_tparm.c
@@ -0,0 +1,388 @@
+/****************************************************************************
+ * Copyright 2020 Thomas E. Dickey *
+ * *
+ * Permission is hereby granted, free of charge, to any person obtaining a *
+ * copy of this software and associated documentation files (the *
+ * "Software"), to deal in the Software without restriction, including *
+ * without limitation the rights to use, copy, modify, merge, publish, *
+ * distribute, distribute with modifications, sublicense, and/or sell *
+ * copies of the Software, and to permit persons to whom the Software is *
+ * furnished to do so, subject to the following conditions: *
+ * *
+ * The above copyright notice and this permission notice shall be included *
+ * in all copies or substantial portions of the Software. *
+ * *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
+ * *
+ * Except as contained in this notice, the name(s) of the above copyright *
+ * holders shall not be used in advertising or otherwise to promote the *
+ * sale, use or other dealings in this Software without prior written *
+ * authorization. *
+ ****************************************************************************/
+
+/*
+ * Author: Thomas E. Dickey
+ *
+ * $Id: test_tparm.c,v 1.4 2020/05/31 00:51:32 tom Exp $
+ *
+ * Exercise tparm, either for all possible capabilities with fixed parameters,
+ * or one capability with all possible parameters.
+ *
+ * TODO: incorporate tic.h and _nc_tparm_analyze
+ * TODO: optionally test tiparm
+ * TODO: add checks/logic to handle "%s" in tparm
+ */
+#define USE_TINFO
+#include <test.priv.h>
+
+static void failed(const char *) GCC_NORETURN;
+
+static void
+failed(const char *msg)
+{
+ fprintf(stderr, "%s\n", msg);
+ ExitProgram(EXIT_FAILURE);
+}
+
+#if HAVE_TIGETSTR
+
+static int a_opt;
+static int v_opt;
+
+static int
+isNumeric(char *source)
+{
+ char *next = 0;
+ long value = strtol(source, &next, 0);
+ int result = (next == 0 || next == source || *next != '\0') ? 0 : 1;
+ (void) value;
+ return result;
+}
+
+static char *
+validate(const char *name)
+{
+ char *value = tigetstr(name);
+ if (!VALID_STRING(value)) {
+ if (v_opt > 1) {
+ printf("? %s %s\n",
+ (value == ABSENT_STRING)
+ ? "absent"
+ : "cancel",
+ name);
+ }
+ value = 0;
+ }
+ return value;
+}
+
+static int
+increment(int *all_parms, int *num_parms, int len_parms, int end_parms)
+{
+ int rc = 0;
+ int n;
+
+ if (len_parms > 9)
+ len_parms = 9;
+
+ if (end_parms < len_parms) {
+ if (all_parms[end_parms]++ >= num_parms[end_parms]) {
+ all_parms[end_parms] = 0;
+ increment(all_parms, num_parms, len_parms, end_parms + 1);
+ }
+ }
+ for (n = 0; n < len_parms; ++n) {
+ if (all_parms[n] != 0) {
+ rc = 1;
+ break;
+ }
+ }
+ /* return 1 until the vector resets to all 0's */
+ return rc;
+}
+
+static void
+test_tparm(const char *name, int *number)
+{
+ char *format = tigetstr(name);
+ if ((format = validate(name)) != 0) {
+ char *result = tparm(format,
+ number[0],
+ number[1],
+ number[2],
+ number[3],
+ number[4],
+ number[5],
+ number[6],
+ number[7],
+ number[8]);
+ if (v_opt > 1)
+ printf(".. %2d = %2d %2d %2d %2d %2d %2d %2d %2d %2d %s\n",
+ result != 0 ? (int) strlen(result) : -1,
+ number[0],
+ number[1],
+ number[2],
+ number[3],
+ number[4],
+ number[5],
+ number[6],
+ number[7],
+ number[8],
+ name);
+ }
+}
+
+static void
+usage(void)
+{
+ static const char *msg[] =
+ {
+ "Usage: test_tparm [options] [capability] [value1 [value2 [...]]]",
+ "",
+ "Print all distinct combinations of given capability.",
+ "",
+ "Options:",
+ " -T TERM override $TERM; this may be a comma-separated list or \"-\"",
+ " to read a list from standard-input",
+ " -a if capability is given, test all combinations of values",
+ " -r NUM repeat tests NUM times",
+ " -v show values and results",
+ };
+ unsigned n;
+ for (n = 0; n < SIZEOF(msg); ++n) {
+ fprintf(stderr, "%s\n", msg[n]);
+ }
+ ExitProgram(EXIT_FAILURE);
+}
+
+#define PLURAL(n) n, (n != 1) ? "s" : ""
+#define COLONS(n) (n >= 1) ? ":" : ""
+
+int
+main(int argc, char *argv[])
+{
+ int n;
+ int r_run, t_run, n_run;
+ char *old_term = getenv("TERM");
+ int r_opt = 1;
+ char *t_opt = 0;
+ int len_names = 0; /* cur # of items in all_names[] */
+ int use_names = 10; /* max # of items in all_names[] */
+ char **all_names = typeCalloc(char *, use_names);
+ int all_parms[10]; /* workspace for "-a" option */
+ int len_terms = 0; /* cur # of items in all_terms[] */
+ int use_terms = 10; /* max # of items in all_terms[] */
+ char **all_terms = typeCalloc(char *, use_terms);
+ int len_parms = 0; /* cur # of items in num_parms[], str_parms[] */
+ int use_parms = argc + 10; /* max # of items in num_parms[], str_parms[] */
+ int *num_parms = typeCalloc(int, use_parms);
+ char **str_parms = typeCalloc(char *, use_parms);
+
+ if (all_names == 0 || all_terms == 0 || num_parms == 0 || str_parms == 0)
+ failed("no memory");
+
+ while ((n = getopt(argc, argv, "T:ar:v")) != -1) {
+ switch (n) {
+ case 'T':
+ t_opt = optarg;
+ break;
+ case 'a':
+ ++a_opt;
+ break;
+ case 'r':
+ r_opt = atoi(optarg);
+ break;
+ case 'v':
+ ++v_opt;
+ break;
+ default:
+ usage();
+ break;
+ }
+ }
+
+ /*
+ * If there is a nonnumeric parameter after the options, use that as the
+ * capability name.
+ */
+ if (optind < argc) {
+ if (!isNumeric(argv[optind])) {
+ all_names[len_names++] = strdup(argv[optind++]);
+ }
+ }
+
+ /*
+ * Any remaining arguments must be possible parameter values. If numeric,
+ * and "-a" is not set, use those as the maximum values within which the
+ * test parameters should vary.
+ */
+ while (optind < argc) {
+ if (isNumeric(argv[optind])) {
+ char *dummy = 0;
+ long value = strtol(argv[optind], &dummy, 0);
+ num_parms[len_parms] = (int) value;
+ }
+ str_parms[len_parms] = argv[optind];
+ ++optind;
+ ++len_parms;
+ }
+ for (n = len_parms; n < use_parms; ++n) {
+ static char dummy[1];
+ str_parms[n] = dummy;
+ }
+ if (v_opt) {
+ printf("%d parameter%s%s\n", PLURAL(len_parms), COLONS(len_parms));
+ for (n = 0; n < len_parms; ++n) {
+ printf(" %d: %d (%s)\n", n + 1, num_parms[n], str_parms[n]);
+ }
+ }
+
+ /*
+ * Make a list of values for $TERM. Accept "-" for standard input to
+ * simplify scripting a check of the whole database.
+ */
+ old_term = strdup((old_term == 0) ? "unknown" : old_term);
+ if (t_opt != 0) {
+ if (!strcmp(t_opt, "-")) {
+ char buffer[BUFSIZ];
+ while (fgets(buffer, sizeof(buffer) - 1, stdin) != 0) {
+ char *s = buffer;
+ char *t;
+ while (isspace(UChar(s[0])))
+ ++s;
+ t = s + strlen(s);
+ while (t != s && isspace(UChar(t[-1])))
+ *--t = '\0';
+ s = strdup(s);
+ if (len_terms + 2 >= use_terms) {
+ use_terms *= 2;
+ all_terms = typeRealloc(char *, use_terms, all_terms);
+ if (all_terms == 0)
+ failed("no memory: all_terms");
+ }
+ all_terms[len_terms++] = s;
+ }
+ } else {
+ char *s = t_opt;
+ char *t;
+ while ((t = strtok(s, ",")) != 0) {
+ s = 0;
+ if (len_terms + 2 >= use_terms) {
+ use_terms *= 2;
+ all_terms = typeRealloc(char *, use_terms, all_terms);
+ if (all_terms == 0)
+ failed("no memory: all_terms");
+ }
+ all_terms[len_terms++] = strdup(t);
+ }
+ }
+ } else {
+ all_terms[len_terms++] = strdup(old_term);
+ }
+ all_terms[len_terms] = 0;
+ if (v_opt) {
+ printf("%d term%s:\n", PLURAL(len_terms));
+ for (n = 0; n < len_terms; ++n) {
+ printf(" %d: %s\n", n + 1, all_terms[n]);
+ }
+ }
+
+ /*
+ * If no capability name was selected, use the predefined list of string
+ * capabilities.
+ *
+ * TODO: To address the "other" systems which do not follow SVr4,
+ * just use the output from infocmp on $TERM.
+ */
+ if (len_names == 0) {
+#if defined(HAVE_CURSES_DATA_BOOLNAMES) || defined(DECL_CURSES_DATA_BOOLNAMES)
+ for (n = 0; strnames[n] != 0; ++n) {
+ if (len_names + 2 >= use_names) {
+ use_names *= 2;
+ all_names = typeRealloc(char *, use_names, all_names);
+ if (all_names == 0) {
+ failed("no memory: all_names");
+ }
+ }
+ all_names[len_names++] = strdup(strnames[n]);
+ }
+#else
+ all_names[len_names++] = strdup("cup");
+ all_names[len_names++] = strdup("sgr");
+#endif
+ }
+ all_names[len_names] = 0;
+ if (v_opt) {
+ printf("%d name%s%s\n", PLURAL(len_names), COLONS(len_names));
+ for (n = 0; n < len_names; ++n) {
+ printf(" %d: %s\n", n + 1, all_names[n]);
+ }
+ }
+
+ if (r_opt <= 0)
+ r_opt = 1;
+
+ for (r_run = 0; r_run < r_opt; ++r_run) {
+ for (t_run = 0; t_run < len_terms; ++t_run) {
+ int errs;
+
+ if (setupterm(all_terms[t_run], fileno(stdout), &errs) != OK) {
+ printf("** skipping %s (errs:%d)\n", all_terms[t_run], errs);
+ }
+
+ if (v_opt)
+ printf("** testing %s\n", all_terms[t_run]);
+ if (len_names == 1) {
+ if (a_opt) {
+ /* for each combination of values */
+ memset(all_parms, 0, sizeof(all_parms));
+ do {
+ test_tparm(all_names[0], all_parms);
+ }
+ while (increment(all_parms, num_parms, len_parms, 0));
+ } else {
+ /* for the given values */
+ test_tparm(all_names[0], num_parms);
+ }
+ } else {
+ for (n_run = 0; n_run < len_names; ++n_run) {
+ test_tparm(all_names[n_run], num_parms);
+ }
+ }
+ if (cur_term != 0) {
+ del_curterm(cur_term);
+ } else {
+ printf("? no cur_term\n");
+ }
+ }
+ }
+#if NO_LEAKS
+ for (n = 0; n < len_names; ++n) {
+ free(all_names[n]);
+ }
+ free(all_names);
+ free(old_term);
+ for (n = 0; n < len_terms; ++n) {
+ free(all_terms[n]);
+ }
+ free(all_terms);
+ free(num_parms);
+ free(str_parms);
+#endif
+
+ ExitProgram(EXIT_SUCCESS);
+}
+
+#else /* !HAVE_TIGETSTR */
+int
+main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
+{
+ failed("This program requires the terminfo functions such as tigetstr");
+}
+#endif /* HAVE_TIGETSTR */

File Metadata

Mime Type
application/octet-stream
Expires
Wed, Jun 5, 3:40 PM (1 d, 23 h)
Storage Engine
chunks
Storage Format
Chunks
Storage Handle
oGof82JXhL9q
Default Alt Text
(7 MB)

Event Timeline