]> ncurses.scripts.mit.edu Git - ncurses.git/commitdiff
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.                                                            --
 -------------------------------------------------------------------------------
 -- 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
 ---------------------------------------------------------------------
 ---------------------------------------------------------------------
              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
        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)
 
        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.
 
        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
 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.                                                            --
 -------------------------------------------------------------------------------
 -- 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
 -------------------------------------------------------------------------------
 
 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.
 
 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,
 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.                                                             #
 ##############################################################################
 # 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
 # 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
 # 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)
 
 # 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            *
  *                                                                          *
  * 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 <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
 
 #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;
 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);
 
        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);
 #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
 #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;
            SP_PARM->_raw = TRUE;
            SP_PARM->_cbreak = 1;
-           cur_term->Nttyb = buf;
+           termp->Nttyb = buf;
        }
        AFTER("raw");
     }
        }
        AFTER("raw");
     }
@@ -121,16 +121,16 @@ NCURSES_EXPORT(int)
 NCURSES_SP_NAME(cbreak) (NCURSES_SP_DCL0)
 {
     int result = ERR;
 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);
 
        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;
 #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
 #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;
            SP_PARM->_cbreak = 1;
-           cur_term->Nttyb = buf;
+           termp->Nttyb = buf;
        }
        AFTER("cbreak");
     }
        }
        AFTER("cbreak");
     }
@@ -165,22 +166,22 @@ NCURSES_EXPORT(void)
 NCURSES_SP_NAME(qiflush) (NCURSES_SP_DCL0)
 {
     int result = ERR;
 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");
        TTY buf;
 
        BEFORE("qiflush");
-       buf = cur_term->Nttyb;
+       buf = termp->Nttyb;
 #ifdef TERMIOS
        buf.c_lflag &= ~(NOFLSH);
 #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)
 #else
        /* FIXME */
 #endif
        if (result == OK)
-           cur_term->Nttyb = buf;
+           termp->Nttyb = buf;
        AFTER("qiflush");
     }
     returnVoid;
        AFTER("qiflush");
     }
     returnVoid;
@@ -198,27 +199,28 @@ NCURSES_EXPORT(int)
 NCURSES_SP_NAME(noraw) (NCURSES_SP_DCL0)
 {
     int result = ERR;
 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);
 
        TTY buf;
 
        BEFORE("noraw");
        _nc_setmode(O_TEXT);
 
-       buf = cur_term->Nttyb;
+       buf = termp->Nttyb;
 #ifdef TERMIOS
        buf.c_lflag |= ISIG | ICANON |
 #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
        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;
            SP_PARM->_raw = FALSE;
            SP_PARM->_cbreak = 0;
-           cur_term->Nttyb = buf;
+           termp->Nttyb = buf;
        }
        AFTER("noraw");
     }
        }
        AFTER("noraw");
     }
@@ -237,25 +239,26 @@ NCURSES_EXPORT(int)
 NCURSES_SP_NAME(nocbreak) (NCURSES_SP_DCL0)
 {
     int result = ERR;
 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);
 
        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
 #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;
            SP_PARM->_cbreak = 0;
-           cur_term->Nttyb = buf;
+           termp->Nttyb = buf;
        }
        AFTER("nocbreak");
     }
        }
        AFTER("nocbreak");
     }
@@ -270,31 +273,26 @@ nocbreak(void)
 }
 #endif
 
 }
 #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;
 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");
        TTY buf;
 
        BEFORE("noqiflush");
-       buf = cur_term->Nttyb;
+       buf = termp->Nttyb;
 #ifdef TERMIOS
        buf.c_lflag |= NOFLSH;
 #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
 #else
        /* FIXME */
 #endif
-       if (result == OK) {
-           cur_term->Nttyb = buf;
-       }
+       if (result == OK)
+           termp->Nttyb = buf;
        AFTER("noqiflush");
     }
     returnVoid;
        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;
 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");
        TTY buf;
 
        BEFORE("intrflush");
-       buf = cur_term->Nttyb;
+       buf = termp->Nttyb;
 #ifdef TERMIOS
        if (flag)
            buf.c_lflag &= ~(NOFLSH);
        else
            buf.c_lflag |= (NOFLSH);
 #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) {
 #else
        /* FIXME */
 #endif
        if (result == OK) {
-           cur_term->Nttyb = buf;
+           termp->Nttyb = buf;
        }
        AFTER("intrflush");
     }
        }
        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            *
  *                                                                          *
  * 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
  *
 /*
  * 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.
  */
  *
  * A simple demo of the termcap interface.
  */
 
 #if HAVE_TGETENT
 
 
 #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
 #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
 {
     /*
      * 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.
         */
         * 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) {
        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("\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) {
     } else if ((num = tgetflag(cap)) > 0) {
-       printf("flg %s\n", cap);
+       printf(FNAME(flg), cap);
+       printf("%s\n", "true");
     }
     fflush(stdout);
 }
 
 static void
     }
     fflush(stdout);
 }
 
 static void
-demo_termcap(char *name)
+brute_force(const char *name)
 {
     char buffer[1024];
 
 {
     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;
 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);
 }
 
     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).
 
    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':
            *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;
            *at_code = SIZEOF(attrs_to_cycle) - 1;
        else
            *at_code -= 1;