ncurses 5.7 - patch 20090801
authorThomas E. Dickey <dickey@invisible-island.net>
Sun, 2 Aug 2009 00:48:52 +0000 (00:48 +0000)
committerThomas E. Dickey <dickey@invisible-island.net>
Sun, 2 Aug 2009 00:48:52 +0000 (00:48 +0000)
+ 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.

INSTALL
NEWS
dist.mk
ncurses/tinfo/lib_raw.c
test/demo_termcap.c
test/ncurses.c

diff --git a/INSTALL b/INSTALL
index 7b777e91ab77d90d28d6bc751ee08868fb355c69..cdc3513ac312ea8721b787d69f9b854e68022957 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -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
diff --git a/NEWS b/NEWS
index 8de8c2c82bf55cfced508de6859833c4eade78b2..c3ec241b922e0de9ebdb47d8708ac245b44e056a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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,
diff --git a/dist.mk b/dist.mk
index 2c5636db449a1070502e4d2a01215a5ac71bc10d..83c1589d33d0aea3b5c8d9aa98720a50d9e0b3a8 100644 (file)
--- a/dist.mk
+++ b/dist.mk
@@ -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)
index 5d5a53327c3b82ddd74a92d08afd79f6a227c636..aea5df54813f272cbfab36c468ca19a4f351459e 100644 (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");
     }
index 3e856489407b08217b2d39bfec26212dec317fe6..b36ba96cc9872e36adebb8cf040e2884b23bf7bb 100644 (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.
  */
 
 #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 USE_CODE_LISTS
+    int repeat;
+    int r_opt = 1;
 
-    if (argc > 1) {
-       for (n = 1; n < argc; ++n) {
-           demo_termcap(argv[n]);
+    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);
 }
 
index ad5efb30e85b7ddd3be9309216c2fc7a22ee31ac..70b0d86af28395b382730b42b89d7cd9fb146571 100644 (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;