ncurses 5.7 - patch 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.
This commit is contained in:
Thomas E. Dickey 2009-08-02 00:48:52 +00:00
parent 85201fb672
commit 8485ec820b
6 changed files with 223 additions and 73 deletions

View File

@ -25,7 +25,7 @@
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
-------------------------------------------------------------------------------
-- $Id: INSTALL,v 1.139 2009/07/18 20:50:08 tom Exp $
-- $Id: INSTALL,v 1.140 2009/08/01 19:32:04 tom Exp $
---------------------------------------------------------------------
How to install Ncurses/Terminfo on your system
---------------------------------------------------------------------
@ -1610,7 +1610,8 @@ CONFIGURING FALLBACK ENTRIES:
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.
has ncurses' infocmp and terminfo database installed (as well as
ncurses' tic and infocmp programs).
These entries are checked by setupterm() only when the conventional
fetches from the terminfo tree and the termcap fallback (if configured)
@ -1761,6 +1762,10 @@ BUILDING NCURSES WITH A CROSS-COMPILER
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:
Send any feedback to the ncurses mailing list at
bug-ncurses@gnu.org. To subscribe send mail to

10
NEWS
View File

@ -25,7 +25,7 @@
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
-------------------------------------------------------------------------------
-- $Id: NEWS,v 1.1411 2009/07/28 22:22:43 tom Exp $
-- $Id: NEWS,v 1.1414 2009/08/01 20:44:21 tom Exp $
-------------------------------------------------------------------------------
This is a log of changes that ncurses has gone through since Zeyd started
@ -45,6 +45,14 @@ 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.
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,

View File

@ -25,7 +25,7 @@
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
# $Id: dist.mk,v 1.711 2009/07/28 21:17:07 tom Exp $
# $Id: dist.mk,v 1.712 2009/07/30 09:04:10 tom Exp $
# Makefile for creating ncurses distributions.
#
# This only needs to be used directly as a makefile by developers, but
@ -37,7 +37,7 @@ SHELL = /bin/sh
# These define the major/minor/patch versions of ncurses.
NCURSES_MAJOR = 5
NCURSES_MINOR = 7
NCURSES_PATCH = 20090728
NCURSES_PATCH = 20090801
# We don't append the patch to the version, since this only applies to releases
VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)

View File

@ -1,5 +1,5 @@
/****************************************************************************
* Copyright (c) 1998-2007,2009 Free Software Foundation, Inc. *
* Copyright (c) 1998-2008,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 *
@ -48,9 +48,8 @@
*/
#include <curses.priv.h>
#include <term.h> /* cur_term */
MODULE_ID("$Id: lib_raw.c,v 1.15 2009/02/15 00:49:02 tom Exp $")
MODULE_ID("$Id: lib_raw.c,v 1.17 2009/08/01 23:11:02 tom Exp $")
#if SVR4_TERMIO && !defined(_POSIX_SOURCE)
#define _POSIX_SOURCE
@ -81,16 +80,16 @@ NCURSES_EXPORT(int)
NCURSES_SP_NAME(raw) (NCURSES_SP_DCL0)
{
int result = ERR;
TERMINAL *termp;
T((T_CALLED("raw()")));
if (SP_PARM != 0 && cur_term != 0) {
T((T_CALLED("raw(%p)"), SP_PARM));
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
BEFORE("raw");
_nc_setmode(O_BINARY);
buf = cur_term->Nttyb;
buf = termp->Nttyb;
#ifdef TERMIOS
buf.c_lflag &= ~(ICANON | ISIG | IEXTEN);
buf.c_iflag &= ~(COOKED_INPUT);
@ -99,10 +98,11 @@ NCURSES_SP_NAME(raw) (NCURSES_SP_DCL0)
#else
buf.sg_flags |= RAW;
#endif
if ((result = _nc_set_tty_mode(&buf)) == OK) {
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
if (result == OK) {
SP_PARM->_raw = TRUE;
SP_PARM->_cbreak = 1;
cur_term->Nttyb = buf;
termp->Nttyb = buf;
}
AFTER("raw");
}
@ -121,16 +121,16 @@ NCURSES_EXPORT(int)
NCURSES_SP_NAME(cbreak) (NCURSES_SP_DCL0)
{
int result = ERR;
TERMINAL *termp;
T((T_CALLED("cbreak()")));
if (SP_PARM != 0 && cur_term != 0) {
T((T_CALLED("cbreak(%p)"), SP_PARM));
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
BEFORE("cbreak");
_nc_setmode(O_BINARY);
buf = cur_term->Nttyb;
buf = termp->Nttyb;
#ifdef TERMIOS
buf.c_lflag &= ~ICANON;
buf.c_iflag &= ~ICRNL;
@ -140,9 +140,10 @@ NCURSES_SP_NAME(cbreak) (NCURSES_SP_DCL0)
#else
buf.sg_flags |= CBREAK;
#endif
if ((result = _nc_set_tty_mode(&buf)) == OK) {
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
if (result == OK) {
SP_PARM->_cbreak = 1;
cur_term->Nttyb = buf;
termp->Nttyb = buf;
}
AFTER("cbreak");
}
@ -165,22 +166,22 @@ NCURSES_EXPORT(void)
NCURSES_SP_NAME(qiflush) (NCURSES_SP_DCL0)
{
int result = ERR;
TERMINAL *termp;
T((T_CALLED("qiflush()")));
if (cur_term != 0) {
T((T_CALLED("qiflush(%p)"), SP_PARM));
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
BEFORE("qiflush");
buf = cur_term->Nttyb;
buf = termp->Nttyb;
#ifdef TERMIOS
buf.c_lflag &= ~(NOFLSH);
result = _nc_set_tty_mode(&buf);
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
#else
/* FIXME */
#endif
if (result == OK)
cur_term->Nttyb = buf;
termp->Nttyb = buf;
AFTER("qiflush");
}
returnVoid;
@ -198,27 +199,28 @@ NCURSES_EXPORT(int)
NCURSES_SP_NAME(noraw) (NCURSES_SP_DCL0)
{
int result = ERR;
TERMINAL *termp;
T((T_CALLED("noraw()")));
if (SP_PARM != 0 && cur_term != 0) {
T((T_CALLED("noraw(%p)"), SP_PARM));
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
BEFORE("noraw");
_nc_setmode(O_TEXT);
buf = cur_term->Nttyb;
buf = termp->Nttyb;
#ifdef TERMIOS
buf.c_lflag |= ISIG | ICANON |
(cur_term->Ottyb.c_lflag & IEXTEN);
(termp->Ottyb.c_lflag & IEXTEN);
buf.c_iflag |= COOKED_INPUT;
#else
buf.sg_flags &= ~(RAW | CBREAK);
#endif
if ((result = _nc_set_tty_mode(&buf)) == OK) {
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
if (result == OK) {
SP_PARM->_raw = FALSE;
SP_PARM->_cbreak = 0;
cur_term->Nttyb = buf;
termp->Nttyb = buf;
}
AFTER("noraw");
}
@ -237,25 +239,26 @@ NCURSES_EXPORT(int)
NCURSES_SP_NAME(nocbreak) (NCURSES_SP_DCL0)
{
int result = ERR;
TERMINAL *termp;
T((T_CALLED("nocbreak()")));
if (SP_PARM != 0 && cur_term != 0) {
T((T_CALLED("nocbreak(%p)"), SP_PARM));
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
BEFORE("nocbreak");
_nc_setmode(O_TEXT);
buf = cur_term->Nttyb;
buf = termp->Nttyb;
#ifdef TERMIOS
buf.c_lflag |= ICANON;
buf.c_iflag |= ICRNL;
#else
buf.sg_flags &= ~CBREAK;
#endif
if ((result = _nc_set_tty_mode(&buf)) == OK) {
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
if (result == OK) {
SP_PARM->_cbreak = 0;
cur_term->Nttyb = buf;
termp->Nttyb = buf;
}
AFTER("nocbreak");
}
@ -270,31 +273,26 @@ nocbreak(void)
}
#endif
/*
* Note:
* this implementation may be wrong. See the comment under intrflush().
*/
NCURSES_EXPORT(void)
NCURSES_SP_NAME(noqiflush) (NCURSES_SP_DCL0)
{
int result = ERR;
TERMINAL *termp;
T((T_CALLED("noqiflush()")));
if (cur_term != 0) {
T((T_CALLED("noqiflush(%p)"), SP_PARM));
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
BEFORE("noqiflush");
buf = cur_term->Nttyb;
buf = termp->Nttyb;
#ifdef TERMIOS
buf.c_lflag |= NOFLSH;
result = _nc_set_tty_mode(&buf);
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
#else
/* FIXME */
#endif
if (result == OK) {
cur_term->Nttyb = buf;
}
if (result == OK)
termp->Nttyb = buf;
AFTER("noqiflush");
}
returnVoid;
@ -319,25 +317,28 @@ 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(%d)"), flag));
T((T_CALLED("intrflush(%p,%d)"), SP_PARM, flag));
if (SP_PARM == 0)
returnCode(ERR);
if (cur_term != 0) {
if ((termp = TerminalOf(SP_PARM)) != 0) {
TTY buf;
BEFORE("intrflush");
buf = cur_term->Nttyb;
buf = termp->Nttyb;
#ifdef TERMIOS
if (flag)
buf.c_lflag &= ~(NOFLSH);
else
buf.c_lflag |= (NOFLSH);
result = _nc_set_tty_mode(&buf);
result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
#else
/* FIXME */
#endif
if (result == OK) {
cur_term->Nttyb = buf;
termp->Nttyb = buf;
}
AFTER("intrflush");
}

View File

@ -1,5 +1,5 @@
/****************************************************************************
* Copyright (c) 2005-2007,2008 Free Software Foundation, Inc. *
* Copyright (c) 2005-2008,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 *
@ -29,7 +29,7 @@
/*
* Author: Thomas E. Dickey
*
* $Id: demo_termcap.c,v 1.7 2008/02/09 18:08:36 tom Exp $
* $Id: demo_termcap.c,v 1.11 2009/08/02 00:02:53 tom Exp $
*
* A simple demo of the termcap interface.
*/
@ -38,10 +38,25 @@
#if HAVE_TGETENT
#if defined(HAVE_CURSES_DATA_BOOLNAMES) || defined(DECL_CURSES_DATA_BOOLNAMES)
#define USE_CODE_LISTS 1
#else
#define USE_CODE_LISTS 0
#endif
#define FCOLS 8
#define FNAME(type) "%s %-*s = ", #type, FCOLS
#if USE_CODE_LISTS
static bool b_opt = FALSE;
static bool n_opt = FALSE;
static bool s_opt = FALSE;
#endif
#define isCapName(c) (isgraph(c) && strchr("^#=:\\", c) == 0)
static void
dumpit(char *cap)
dumpit(NCURSES_CONST char *cap)
{
/*
* One of the limitations of the termcap interface is that the library
@ -59,7 +74,7 @@ dumpit(char *cap)
* Note that the strings returned are mostly terminfo format, since
* ncurses does not convert except for a handful of special cases.
*/
printf("str %s = ", cap);
printf(FNAME(str), cap);
while (*str != 0) {
int ch = UChar(*str++);
switch (ch) {
@ -108,15 +123,17 @@ dumpit(char *cap)
}
printf("\n");
} else if ((num = tgetnum(cap)) >= 0) {
printf("num %s = %d\n", cap, num);
printf(FNAME(num), cap);
printf(" %d\n", num);
} else if ((num = tgetflag(cap)) > 0) {
printf("flg %s\n", cap);
printf(FNAME(flg), cap);
printf("%s\n", "true");
}
fflush(stdout);
}
static void
demo_termcap(char *name)
brute_force(const char *name)
{
char buffer[1024];
@ -140,23 +157,142 @@ demo_termcap(char *name)
}
}
#if USE_CODE_LISTS
static void
demo_terminfo(NCURSES_CONST char *name)
{
unsigned n;
NCURSES_CONST char *cap;
printf("Terminal type \"%s\"\n", name);
setupterm(name, 1, (int *) 0);
if (b_opt) {
for (n = 0;; ++n) {
cap = boolcodes[n];
if (cap == 0)
break;
dumpit(cap);
}
}
if (n_opt) {
for (n = 0;; ++n) {
cap = numcodes[n];
if (cap == 0)
break;
dumpit(cap);
}
}
if (s_opt) {
for (n = 0;; ++n) {
cap = strcodes[n];
if (cap == 0)
break;
dumpit(cap);
}
}
}
static void
usage(void)
{
static const char *msg[] =
{
"Usage: demo_terminfo [options] [terminal]",
"",
"If no options are given, print all (boolean, numeric, string)",
"capabilities for the given terminal, using short names.",
"",
"Options:",
" -a try all names, print capabilities found",
" -b print boolean-capabilities",
" -n print numeric-capabilities",
" -r COUNT repeat for given count",
" -s print string-capabilities",
};
unsigned n;
for (n = 0; n < SIZEOF(msg); ++n) {
fprintf(stderr, "%s\n", msg[n]);
}
ExitProgram(EXIT_FAILURE);
}
#endif
int
main(int argc, char *argv[])
{
int n;
char *name;
bool a_opt = FALSE;
if (argc > 1) {
for (n = 1; n < argc; ++n) {
demo_termcap(argv[n]);
#if USE_CODE_LISTS
int repeat;
int r_opt = 1;
while ((n = getopt(argc, argv, "abnr:s")) != -1) {
switch (n) {
case 'a':
a_opt = TRUE;
break;
case 'b':
b_opt = TRUE;
break;
case 'n':
n_opt = TRUE;
break;
case 'r':
if ((r_opt = atoi(optarg)) <= 0)
usage();
break;
case 's':
s_opt = TRUE;
break;
default:
usage();
break;
}
} else if ((name = getenv("TERM")) != 0) {
demo_termcap(name);
} else {
static char dumb[] = "dumb";
demo_termcap(dumb);
}
if (!(b_opt || n_opt || s_opt)) {
b_opt = TRUE;
n_opt = TRUE;
s_opt = TRUE;
}
#else
a_opt = TRUE;
#endif
if (a_opt) {
if (optind < argc) {
for (n = optind; n < argc; ++n) {
brute_force(argv[n]);
}
} else if ((name = getenv("TERM")) != 0) {
brute_force(name);
} else {
static char dumb[] = "dumb";
brute_force(dumb);
}
}
#if USE_CODE_LISTS
else {
for (repeat = 0; repeat < r_opt; ++repeat) {
if (optind < argc) {
for (n = optind; n < argc; ++n) {
demo_terminfo(argv[n]);
}
} else if ((name = getenv("TERM")) != 0) {
demo_terminfo(name);
} else {
static char dumb[] = "dumb";
demo_terminfo(dumb);
}
}
}
#endif
ExitProgram(EXIT_SUCCESS);
}

View File

@ -40,7 +40,7 @@ AUTHOR
Author: Eric S. Raymond <esr@snark.thyrsus.com> 1993
Thomas E. Dickey (beginning revision 1.27 in 1996).
$Id: ncurses.c,v 1.342 2009/07/18 11:48:42 tom Exp $
$Id: ncurses.c,v 1.343 2009/07/30 09:13:37 tom Exp $
***************************************************************************/
@ -2890,7 +2890,7 @@ cycle_attr(int ch, unsigned *at_code, chtype *attr)
*at_code = 0;
break;
case 'V':
if (*at_code == 1)
if (*at_code == 0)
*at_code = SIZEOF(attrs_to_cycle) - 1;
else
*at_code -= 1;