+ 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
./test/demo_menus.c
./test/demo_panels.c
./test/demo_termcap.c
+./test/demo_terminfo.c
./test/ditto.c
./test/dots.c
./test/dots_mvcur.c
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
-------------------------------------------------------------------------------
--- $Id: NEWS,v 1.1400 2009/07/04 22:12:46 tom Exp $
+-- $Id: NEWS,v 1.1403 2009/07/11 18:26:12 tom Exp $
-------------------------------------------------------------------------------
This is a log of changes that ncurses has gone through since Zeyd started
Changes through 1.9.9e did not credit all contributions;
it is not possible to add this information.
+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
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
-# $Id: dist.mk,v 1.707 2009/07/04 17:04:26 tom Exp $
+# $Id: dist.mk,v 1.708 2009/07/11 12:41:36 tom Exp $
# Makefile for creating ncurses distributions.
#
# This only needs to be used directly as a makefile by developers, but
# These define the major/minor/patch versions of ncurses.
NCURSES_MAJOR = 5
NCURSES_MINOR = 7
-NCURSES_PATCH = 20090704
+NCURSES_PATCH = 20090711
# We don't append the patch to the version, since this only applies to releases
VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
/****************************************************************************
- * Copyright (c) 1998-2005,2008 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 *
* and: Thomas E. Dickey 1998-on *
****************************************************************************/
-/* $Id: term_entry.h,v 1.36 2008/11/16 00:19:59 juergen Exp $ */
+/* $Id: term_entry.h,v 1.37 2009/07/11 16:52:29 tom Exp $ */
/*
* term_entry.h -- interface to entry-manipulation code
#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; n < NUM_BOOLEANS(tp); n++)
+#define for_each_ext_number(n,tp) for(n = NUMCOUNT; n < NUM_NUMBERS(tp); n++)
+#define for_each_ext_string(n,tp) for(n = STRCOUNT; n < 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)
/****************************************************************************
- * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2007,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 *
****************************************************************************/
/*
- * $Id: tic.h,v 1.62 2007/08/11 16:12:43 tom Exp $
+ * $Id: tic.h,v 1.63 2009/07/11 18:11:15 tom Exp $
* tic.h - Global variables and structures for the terminfo
* compiler.
*/
extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_entry
(const char *, const short *);
extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_type_entry
- (const char *, int, const struct name_table_entry *);
+ (const char *, int, bool);
/* comp_scan.c: lexical analysis */
extern NCURSES_EXPORT(int) _nc_get_token (bool);
-# $Id: modules,v 1.112 2007/09/08 22:03:34 tom Exp $
+# $Id: modules,v 1.113 2009/07/11 17:45:32 tom Exp $
##############################################################################
-# Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. #
+# Copyright (c) 1998-2007,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"), #
add_tries lib $(tinfo)
alloc_ttype lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h
codes lib .
+comp_captab lib . $(INCDIR)/tic.h ../include/term.h ../include/hashsize.h
comp_error lib $(tinfo) $(INCDIR)/tic.h
+comp_hash lib $(tinfo) ../include/term.h $(INCDIR)/tic.h ../include/hashsize.h
db_iterator lib $(tinfo) $(INCDIR)/tic.h
doalloc lib $(tinfo)
entries lib $(tinfo) ../include/term.h $(INCDIR)/tic.h
@ ticlib
alloc_entry lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h
captoinfo lib $(tinfo) $(INCDIR)/tic.h
-comp_captab lib . $(INCDIR)/tic.h ../include/term.h ../include/hashsize.h
comp_expand lib $(tinfo) $(INCDIR)/tic.h
-comp_hash lib $(tinfo) ../include/term.h $(INCDIR)/tic.h ../include/hashsize.h
comp_parse lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h
comp_scan lib $(tinfo) $(INCDIR)/tic.h
parse_entry lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h ../include/parametrized.h $(INCDIR)/capdefaults.c
/****************************************************************************
- * Copyright (c) 1998-2007,2008 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 *
#define DEBUG(level, params) /*nothing */
#endif
-MODULE_ID("$Id: comp_hash.c,v 1.36 2008/08/16 17:06:53 tom Exp $")
+MODULE_ID("$Id: comp_hash.c,v 1.39 2009/07/11 18:27:26 tom Exp $")
static int hash_function(const char *);
*/
#ifndef MAIN_PROGRAM
+
+#define SameName(a,b,termcap) (termcap ? !strncmp(a,b,2) : !strcmp(a,b))
+#if 0
+static bool
+same_name(const char *a, const char *b, bool termcap)
+{
+ fprintf(stderr, "compare(%s,%s)\n", a, b);
+ return SameName(a, b, termcap);
+}
+#else
+#define same_name(a,b,termcap) SameName(a,b,termcap)
+#endif
+
NCURSES_EXPORT(struct name_table_entry const *)
_nc_find_entry(const char *string,
const short *hash_table)
hashvalue = hash_function(string);
if (hash_table[hashvalue] >= 0) {
- real_table = _nc_get_table(hash_table != _nc_get_hash_table(FALSE));
+ bool termcap = (hash_table != _nc_get_hash_table(FALSE));
+
+ real_table = _nc_get_table(termcap);
ptr = real_table + hash_table[hashvalue];
- while (strcmp(ptr->nte_name, string) != 0) {
+ while (!same_name(ptr->nte_name, string, termcap)) {
if (ptr->nte_link < 0)
return 0;
ptr = real_table + (ptr->nte_link + hash_table[HASHTABSIZE]);
NCURSES_EXPORT(struct name_table_entry const *)
_nc_find_type_entry(const char *string,
int type,
- const struct name_table_entry *table)
+ bool termcap)
{
+ struct name_table_entry const *result = NULL;
+ const struct name_table_entry *const table = _nc_get_table(termcap);
struct name_table_entry const *ptr;
for (ptr = table; ptr < table + CAPTABSIZE; ptr++) {
- if (ptr->nte_type == type && strcmp(string, ptr->nte_name) == 0)
- return (ptr);
+ if (ptr->nte_type == type) {
+ if (same_name(ptr->nte_name, string, termcap)) {
+ result = ptr;
+ }
+ }
}
- return ((struct name_table_entry *) NULL);
+ return result;
}
#endif
#include <tic.h>
#include <term_entry.h>
-MODULE_ID("$Id: entries.c,v 1.12 2009/06/06 18:54:42 tom Exp $")
+MODULE_ID("$Id: entries.c,v 1.15 2009/07/11 14:42:42 tom Exp $")
/****************************************************************************
*
_nc_free_tparm();
_nc_tgetent_leaks();
- if (HasTerminal(CURRENT_SCREEN))
+ if (TerminalOf(CURRENT_SCREEN) != 0) {
del_curterm(TerminalOf(CURRENT_SCREEN));
+ }
_nc_free_entries(_nc_head);
_nc_get_type(0);
if ((s = _nc_home_terminfo()) != 0)
free(s);
+
+#ifdef TRACE
+ trace(0);
+ _nc_trace_buf(-1, 0);
+#endif
+
#endif /* NO_LEAKS */
returnVoid;
}
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_termcap.c,v 1.67 2009/05/30 20:05:20 tom Exp $")
+MODULE_ID("$Id: lib_termcap.c,v 1.69 2009/07/11 18:14:21 tom Exp $")
NCURSES_EXPORT_VAR(char *) UP = 0;
NCURSES_EXPORT_VAR(char *) BC = 0;
}
#endif
+#if 0
+static bool
+same_tcname(const char *a, const char *b)
+{
+ fprintf(stderr, "compare(%s,%s)\n", a, b);
+ return !strncmp(a, b, 2);
+}
+#else
+#define same_tcname(a,b) !strncmp(a,b,2)
+#endif
+
/***************************************************************************
*
* tgetflag(str)
NCURSES_EXPORT(int)
NCURSES_SP_NAME(tgetflag) (NCURSES_SP_DCLx NCURSES_CONST char *id)
{
- unsigned i;
+ int result = 0; /* Solaris returns zero for missing flag */
+ int i, j;
T((T_CALLED("tgetflag(%p, %s)"), SP_PARM, id));
if (HasTInfoTerminal(SP_PARM)) {
TERMTYPE *tp = &(TerminalOf(SP_PARM)->type);
- for_each_boolean(i, tp) {
- const char *capname = ExtBoolname(tp, i, boolcodes);
- if (!strncmp(id, capname, 2)) {
- /* setupterm forces invalid booleans to false */
- returnCode(tp->Booleans[i]);
+ struct name_table_entry const *entry_ptr;
+
+ entry_ptr = _nc_find_type_entry(id, BOOLEAN, TRUE);
+ if (entry_ptr != 0) {
+ j = entry_ptr->nte_index;
+ }
+#if NCURSES_XNAMES
+ else {
+ j = -1;
+ for_each_ext_boolean(i, tp) {
+ const char *capname = ExtBoolname(tp, i, boolcodes);
+ if (same_tcname(id, capname)) {
+ j = i;
+ break;
+ }
}
}
+#endif
+ if (j >= 0) {
+ /* note: setupterm forces invalid booleans to false */
+ result = tp->Booleans[j];
+ }
}
- returnCode(0); /* Solaris does this */
+ returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
NCURSES_SP_NAME(tgetnum) (NCURSES_SP_DCLx NCURSES_CONST char *id)
{
- unsigned i;
+ int result = ABSENT_NUMERIC;
+ int i, j;
T((T_CALLED("tgetnum(%p, %s)"), SP_PARM, id));
if (HasTInfoTerminal(SP_PARM)) {
TERMTYPE *tp = &(TerminalOf(SP_PARM)->type);
- for_each_number(i, tp) {
- const char *capname = ExtNumname(tp, i, numcodes);
- if (!strncmp(id, capname, 2)) {
- if (!VALID_NUMERIC(tp->Numbers[i]))
- returnCode(ABSENT_NUMERIC);
- returnCode(tp->Numbers[i]);
+ struct name_table_entry const *entry_ptr;
+
+ entry_ptr = _nc_find_type_entry(id, NUMBER, TRUE);
+ if (entry_ptr != 0) {
+ j = entry_ptr->nte_index;
+ }
+#if NCURSES_XNAMES
+ else {
+ j = -1;
+ for_each_ext_number(i, tp) {
+ const char *capname = ExtNumname(tp, i, numcodes);
+ if (same_tcname(id, capname)) {
+ j = i;
+ break;
+ }
}
}
+#endif
+ if (j >= 0) {
+ if (VALID_NUMERIC(tp->Numbers[j]))
+ result = tp->Numbers[j];
+ }
}
- returnCode(ABSENT_NUMERIC);
+ returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(char *)
NCURSES_SP_NAME(tgetstr) (NCURSES_SP_DCLx NCURSES_CONST char *id, char **area)
{
- unsigned i;
char *result = NULL;
+ int i, j;
T((T_CALLED("tgetstr(%s,%p)"), id, area));
if (HasTInfoTerminal(SP_PARM)) {
TERMTYPE *tp = &(TerminalOf(SP_PARM)->type);
- for_each_string(i, tp) {
- const char *capname = ExtStrname(tp, i, strcodes);
- if (!strncmp(id, capname, 2)) {
- result = tp->Strings[i];
- TR(TRACE_DATABASE, ("found match : %s", _nc_visbuf(result)));
- /* setupterm forces canceled strings to null */
- if (VALID_STRING(result)) {
- if (result == exit_attribute_mode
- && FIX_SGR0 != 0) {
- result = FIX_SGR0;
- TR(TRACE_DATABASE, ("altered to : %s", _nc_visbuf(result)));
- }
- if (area != 0
- && *area != 0) {
- (void) strcpy(*area, result);
- result = *area;
- *area += strlen(*area) + 1;
- }
+ struct name_table_entry const *entry_ptr;
+
+ entry_ptr = _nc_find_type_entry(id, STRING, TRUE);
+ if (entry_ptr != 0) {
+ j = entry_ptr->nte_index;
+ }
+#if NCURSES_XNAMES
+ else {
+ j = -1;
+ for_each_ext_string(i, tp) {
+ const char *capname = ExtStrname(tp, i, strcodes);
+ if (same_tcname(id, capname)) {
+ j = i;
+ break;
+ }
+ }
+ }
+#endif
+ if (j >= 0) {
+ result = tp->Strings[j];
+ TR(TRACE_DATABASE, ("found match : %s", _nc_visbuf(result)));
+ /* setupterm forces canceled strings to null */
+ if (VALID_STRING(result)) {
+ if (result == exit_attribute_mode
+ && FIX_SGR0 != 0) {
+ result = FIX_SGR0;
+ TR(TRACE_DATABASE, ("altered to : %s", _nc_visbuf(result)));
+ }
+ if (area != 0
+ && *area != 0) {
+ (void) strcpy(*area, result);
+ result = *area;
+ *area += strlen(*area) + 1;
}
- break;
}
}
}
/****************************************************************************
* 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>
#include <term_entry.h>
#include <tic.h>
-MODULE_ID("$Id: lib_ti.c,v 1.24 2009/04/18 17:37:50 tom Exp $")
+MODULE_ID("$Id: lib_ti.c,v 1.26 2009/07/11 18:14:21 tom Exp $")
+
+#if 0
+static bool
+same_name(const char *a, const char *b)
+{
+ fprintf(stderr, "compare(%s,%s)\n", a, b);
+ return !strcmp(a, b);
+}
+#else
+#define same_name(a,b) !strcmp(a,b)
+#endif
NCURSES_EXPORT(int)
NCURSES_SP_NAME(tigetflag) (NCURSES_SP_DCLx NCURSES_CONST char *str)
{
- unsigned i;
+ int result = ABSENT_BOOLEAN;
+ int i, j;
T((T_CALLED("tigetflag(%p, %s)"), SP_PARM, str));
if (HasTInfoTerminal(SP_PARM)) {
TERMTYPE *tp = &(TerminalOf(SP_PARM)->type);
- for_each_boolean(i, tp) {
- const char *capname = ExtBoolname(tp, i, boolnames);
- if (!strcmp(str, capname)) {
- /* setupterm forces invalid booleans to false */
- returnCode(tp->Booleans[i]);
+ struct name_table_entry const *entry_ptr;
+
+ entry_ptr = _nc_find_type_entry(str, BOOLEAN, FALSE);
+ if (entry_ptr != 0) {
+ j = entry_ptr->nte_index;
+ }
+#if NCURSES_XNAMES
+ else {
+ j = -1;
+ for_each_ext_boolean(i, tp) {
+ const char *capname = ExtBoolname(tp, i, boolnames);
+ if (same_name(str, capname)) {
+ j = i;
+ break;
+ }
}
}
+#endif
+ if (j >= 0) {
+ /* note: setupterm forces invalid booleans to false */
+ result = tp->Booleans[j];
+ }
}
- returnCode(ABSENT_BOOLEAN);
+ returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(int)
NCURSES_SP_NAME(tigetnum) (NCURSES_SP_DCLx NCURSES_CONST char *str)
{
- unsigned i;
+ int i, j;
+ int result = CANCELLED_NUMERIC; /* Solaris returns a -1 on error */
T((T_CALLED("tigetnum(%p, %s)"), SP_PARM, str));
if (HasTInfoTerminal(SP_PARM)) {
TERMTYPE *tp = &(TerminalOf(SP_PARM)->type);
- for_each_number(i, tp) {
- const char *capname = ExtNumname(tp, i, numnames);
- if (!strcmp(str, capname)) {
- if (!VALID_NUMERIC(tp->Numbers[i]))
- returnCode(ABSENT_NUMERIC);
- returnCode(tp->Numbers[i]);
+ struct name_table_entry const *entry_ptr;
+
+ entry_ptr = _nc_find_type_entry(str, NUMBER, FALSE);
+ if (entry_ptr != 0) {
+ j = entry_ptr->nte_index;
+ }
+#if NCURSES_XNAMES
+ else {
+ j = -1;
+ for_each_ext_number(i, tp) {
+ const char *capname = ExtNumname(tp, i, numnames);
+ if (same_name(str, capname)) {
+ j = i;
+ break;
+ }
}
}
+#endif
+ if (j >= 0 && VALID_NUMERIC(tp->Numbers[j]))
+ result = tp->Numbers[j];
+ else
+ result = ABSENT_NUMERIC;
}
- returnCode(CANCELLED_NUMERIC); /* Solaris returns a -1 instead */
+ returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(char *)
NCURSES_SP_NAME(tigetstr) (NCURSES_SP_DCLx NCURSES_CONST char *str)
{
- unsigned i;
+ char *result = CANCELLED_STRING;
+ int i, j;
T((T_CALLED("tigetstr(%p, %s)"), SP_PARM, str));
if (HasTInfoTerminal(SP_PARM)) {
TERMTYPE *tp = &(TerminalOf(SP_PARM)->type);
- for_each_string(i, tp) {
- const char *capname = ExtStrname(tp, i, strnames);
- if (!strcmp(str, capname)) {
- /* setupterm forces cancelled strings to null */
- returnPtr(tp->Strings[i]);
+ struct name_table_entry const *entry_ptr;
+
+ entry_ptr = _nc_find_type_entry(str, STRING, FALSE);
+ if (entry_ptr != 0) {
+ j = entry_ptr->nte_index;
+ }
+#if NCURSES_XNAMES
+ else {
+ j = -1;
+ for_each_ext_string(i, tp) {
+ const char *capname = ExtStrname(tp, i, strnames);
+ if (same_name(str, capname)) {
+ j = i;
+ break;
+ }
}
}
+#endif
+ if (j >= 0) {
+ /* note: setupterm forces cancelled strings to null */
+ result = tp->Strings[j];
+ }
}
- returnPtr(CANCELLED_STRING);
+ returnPtr(result);
}
#if NCURSES_SP_FUNCS
#include <tic.h>
#include <term_entry.h>
-MODULE_ID("$Id: parse_entry.c,v 1.70 2009/04/18 21:01:38 tom Exp $")
+MODULE_ID("$Id: parse_entry.c,v 1.71 2009/07/11 18:14:21 tom Exp $")
#ifdef LINT
static short const parametrized[] =
&& !strcmp("ma", _nc_curr_token.tk_name)) {
/* tell max_attributes from arrow_key_map */
entry_ptr = _nc_find_type_entry("ma", NUMBER,
- _nc_get_table(_nc_syntax
- != 0));
+ _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_get_table(_nc_syntax
- != 0));
+ _nc_syntax != 0);
assert(entry_ptr != 0);
} else if (token_type == BOOLEAN
/****************************************************************************
- * Copyright (c) 2001-2007,2008 Free Software Foundation, Inc. *
+ * Copyright (c) 2001-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 *
#include <tic.h>
#include <ctype.h>
-MODULE_ID("$Id: visbuf.c,v 1.32 2008/08/04 23:07:39 tom Exp $")
+MODULE_ID("$Id: visbuf.c,v 1.33 2009/07/11 14:44:20 tom Exp $")
+
+#define NUM_VISBUFS 4
#define NormalLen(len) (size_t) (((size_t)(len) + 1) * 4)
#define WideLen(len) (size_t) (((size_t)(len) + 1) * 4 * MB_CUR_MAX)
vbuf = tp = _nc_trace_buf(bufnum, NormalLen(len));
#else
{
- static char *mybuf[4];
- mybuf[bufnum] = typeRealloc(char, NormalLen(len), mybuf[bufnum]);
- vbuf = tp = mybuf[bufnum];
+ static char *mybuf[NUM_VISBUFS];
+ if (bufnum < 0) {
+ for (c = 0; c < NUM_VISBUFS; ++c) {
+ FreeAndNull(mybuf[c]);
+ }
+ tp = 0;
+ } else {
+ mybuf[bufnum] = typeRealloc(char, NormalLen(len), mybuf[bufnum]);
+ vbuf = tp = mybuf[bufnum];
+ }
}
#endif
if (tp != 0) {
vbuf = tp = _nc_trace_buf(bufnum, WideLen(len));
#else
{
- static char *mybuf[2];
+ static char *mybuf[NUM_VISBUFS];
mybuf[bufnum] = typeRealloc(char, WideLen(len), mybuf[bufnum]);
vbuf = tp = mybuf[bufnum];
}
PUTC_ch = buf[j].chars[PUTC_i];
if (PUTC_ch == L'\0')
break;
- PUTC_n = (int) wcrtomb(PUTC_buf, buf[j].chars[PUTC_i], &PUT_st);
+ PUTC_n = (int) wcrtomb(PUTC_buf,
+ buf[j].chars[PUTC_i], &PUT_st);
if (PUTC_n <= 0)
break;
for (k = 0; k < PUTC_n; k++) {
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
-------------------------------------------------------------------------------
--- $Id: README,v 1.39 2008/12/20 23:38:13 tom Exp $
+-- $Id: README,v 1.40 2009/07/11 19:09:01 tom Exp $
-------------------------------------------------------------------------------
The programs in this directory are designed to test your newest toy :-)
LINES test: cardfile demo_defkey demo_keyok demo_menus demo_panels ditto echochar edit_field firework hanoi hashtest inch_wide inchs ins_wide inserts lrtest movewindow ncurses newdemo rain savescreen tclock test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs view worm xmas
PAIR_NUMBER test: ncurses
PC lib: ncurses
-SP lib: ncurses
+SP lib: menu
TABSIZE test: test_opaque
UP -
acs_map test: gdc ins_wide inserts knight movewindow ncurses newdemo testcurs
bkgrnd test: ncurses
bkgrndset test: ncurses
boolcodes test: test_arrays progs: dump_entry
-boolfnames test: test_arrays progs: dump_entry
-boolnames test: test_arrays progs: dump_entry infocmp
+boolfnames test: demo_terminfo test_arrays progs: dump_entry
+boolnames test: demo_terminfo test_arrays progs: dump_entry infocmp
border -
border_set -
box test: cardfile chgat clip_printw demo_forms demo_menus demo_panels ditto edit_field inch_wide inchs ins_wide insdelln inserts lrtest ncurses newdemo redraw test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs
color_content test: ncurses
color_set test: color_set ncurses
copywin test: ncurses testcurs
-cur_term test: dots dots_mvcur lrtest progs: clear tabs tput tset
+cur_term test: demo_terminfo dots dots_mvcur lrtest progs: clear tabs tput tset
curs_set test: echochar firework gdc hanoi lrtest ncurses newdemo rain savescreen tclock testcurs worm xmas
curscr test: demo_panels edit_field knight lrtest ncurses savescreen tclock view
curses_version test: ncurses progs: infocmp tic toe tput tset
filter test: filter
flash test: cardfile lrtest ncurses tclock testcurs
flushinp test: ncurses newdemo testcurs
+get_escdelay -
get_wch -
get_wstr test: test_get_wstr
getattrs -
noraw test: demo_forms demo_menus ncurses testcurs
notimeout test: test_opaque
numcodes test: test_arrays progs: dump_entry
-numfnames test: test_arrays progs: dump_entry
-numnames test: test_arrays progs: dump_entry infocmp
+numfnames test: demo_terminfo test_arrays progs: dump_entry
+numnames test: demo_terminfo test_arrays progs: dump_entry infocmp
ospeed progs: tset
overlay test: ncurses testcurs xmas
overwrite test: ncurses savescreen
set_term lib: ncurses
setcchar test: demo_panels ins_wide ncurses view
setscrreg test: view
-setupterm test: dots progs: clear tabs tput tset
+setupterm test: demo_terminfo dots progs: clear tabs tput tset
slk_attr -
slk_attr_off -
slk_attr_on -
start_color test: background blue bs cardfile chgat clip_printw color_set demo_forms demo_menus demo_panels echochar filter firework gdc hanoi ins_wide insdelln inserts knight ncurses newdemo rain savescreen tclock testaddch testcurs view worm xmas
stdscr test: bs chgat clip_printw demo_altkeys demo_forms demo_menus demo_panels ditto filter firework foldkeys gdc hanoi hashtest inch_wide inchs ins_wide insdelln inserts key_names keynames knight lrtest movewindow ncurses rain redraw savescreen tclock test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs testscanw view worm xmas
strcodes test: test_arrays progs: dump_entry
-strfnames test: test_arrays progs: dump_entry
-strnames test: foldkeys test_arrays progs: dump_entry infocmp tic
+strfnames test: demo_terminfo test_arrays progs: dump_entry
+strnames test: demo_terminfo foldkeys test_arrays progs: dump_entry infocmp tic
subpad test: testcurs
subwin test: movewindow ncurses newdemo testcurs
syncok test: test_opaque
tgetnum test: demo_termcap railroad
tgetstr test: demo_termcap railroad
tgoto test: railroad
-tigetflag progs: tput
-tigetnum test: ncurses progs: tput
-tigetstr test: blue demo_defkey foldkeys testcurs progs: tput
+tigetflag test: demo_terminfo progs: tput
+tigetnum test: demo_terminfo ncurses progs: tput
+tigetstr test: blue demo_defkey demo_terminfo foldkeys testcurs progs: tput
timeout test: rain savescreen
touchline test: chgat clip_printw insdelln
touchwin test: chgat clip_printw demo_menus edit_field filter firstlast inch_wide inchs ins_wide insdelln inserts movewindow ncurses redraw test_get_wstr test_getstr test_instr test_inwstr test_opaque xmas
untouchwin lib: form
use_default_colors test: filter firework gdc hanoi knight ncurses rain tclock worm xmas
use_env progs: tput
-use_extended_names progs: infocmp tic
+use_extended_names test: demo_terminfo progs: infocmp tic
use_legacy_coding -
use_screen test: ditto
use_window test: rain worm
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 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: Thomas E. Dickey
+ *
+ * $Id: demo_terminfo.c,v 1.5 2009/07/11 17:39:41 tom Exp $
+ *
+ * A simple demo of the terminfo interface.
+ */
+#define USE_TINFO
+#include <test.priv.h>
+
+#ifdef NCURSES_VERSION
+#if NCURSES_XNAMES
+#include <term_entry.h>
+#endif
+#endif
+
+static bool b_opt = FALSE;
+static bool f_opt = FALSE;
+static bool n_opt = FALSE;
+static bool s_opt = FALSE;
+static bool x_opt = FALSE;
+
+#define FCOLS 8
+#define FNAME(type) "%s %-*s = ", #type, FCOLS
+
+static void
+dumpit(NCURSES_CONST char *cap)
+{
+ /*
+ * One of the limitations of the termcap interface is that the library
+ * cannot determine the size of the buffer passed via tgetstr(), nor the
+ * amount of space remaining. This demo simply reuses the whole buffer
+ * for each call; a normal termcap application would try to use the buffer
+ * to hold all of the strings extracted from the terminal entry.
+ */
+ const char *str;
+ int num;
+
+ if ((str = tigetstr(cap)) != 0 && (str != (char *) -1)) {
+ /*
+ * Note that the strings returned are mostly terminfo format, since
+ * ncurses does not convert except for a handful of special cases.
+ */
+ printf(FNAME(str), cap);
+ while (*str != 0) {
+ int ch = UChar(*str++);
+ switch (ch) {
+ case '\177':
+ fputs("^?", stdout);
+ break;
+ case '\033':
+ fputs("\\E", stdout);
+ break;
+ case '\b':
+ fputs("\\b", stdout);
+ break;
+ case '\f':
+ fputs("\\f", stdout);
+ break;
+ case '\n':
+ fputs("\\n", stdout);
+ break;
+ case '\r':
+ fputs("\\r", stdout);
+ break;
+ case ' ':
+ fputs("\\s", stdout);
+ break;
+ case '\t':
+ fputs("\\t", stdout);
+ break;
+ case '^':
+ fputs("\\^", stdout);
+ break;
+ case ':':
+ fputs("\\072", stdout);
+ break;
+ case '\\':
+ fputs("\\\\", stdout);
+ break;
+ default:
+ if (isgraph(ch))
+ fputc(ch, stdout);
+ else if (ch < 32)
+ printf("^%c", ch + '@');
+ else
+ printf("\\%03o", ch);
+ break;
+ }
+ }
+ printf("\n");
+ } else if ((num = tigetnum(cap)) >= 0) {
+ printf(FNAME(num), cap);
+ printf(" %d\n", num);
+ } else if ((num = tigetflag(cap)) >= 0) {
+ printf(FNAME(flg), cap);
+ printf("%s\n", num ? "true" : "false");
+ }
+ fflush(stdout);
+}
+
+static void
+demo_terminfo(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 = f_opt ? boolfnames[n] : boolnames[n];
+ if (cap == 0)
+ break;
+ dumpit(cap);
+ }
+ }
+
+ if (n_opt) {
+ for (n = 0;; ++n) {
+ cap = f_opt ? numfnames[n] : numnames[n];
+ if (cap == 0)
+ break;
+ dumpit(cap);
+ }
+ }
+
+ if (s_opt) {
+ for (n = 0;; ++n) {
+ cap = f_opt ? strfnames[n] : strnames[n];
+ if (cap == 0)
+ break;
+ dumpit(cap);
+ }
+ }
+#ifdef NCURSES_VERSION
+ if (x_opt) {
+ int mod;
+ if (f_opt) {
+#if NCURSES_XNAMES
+ TERMTYPE *term = &(cur_term->type);
+ if (term != 0
+ && ((NUM_BOOLEANS(term) != BOOLCOUNT)
+ || (NUM_NUMBERS(term) != NUMCOUNT)
+ || (NUM_STRINGS(term) != STRCOUNT))) {
+ for (n = BOOLCOUNT; n < NUM_BOOLEANS(term); ++n) {
+ dumpit(ExtBoolname(term, n, boolnames));
+ }
+ for (n = NUMCOUNT; n < NUM_NUMBERS(term); ++n) {
+ dumpit(ExtNumname(term, n, numnames));
+ }
+ for (n = STRCOUNT; n < NUM_STRINGS(term); ++n) {
+ dumpit(ExtStrname(term, n, strnames));
+ }
+ }
+#endif
+ } else {
+ char temp[10];
+ static const char *xterm_keys[] =
+ {
+ "kDC", "kDN", "kEND", "kHOM", "kIC",
+ "kLFT", "kNXT", "kPRV", "kRIT", "kUP",
+ };
+ for (n = 0; n < SIZEOF(xterm_keys); ++n) {
+ for (mod = 0; mod < 8; ++mod) {
+ if (mod == 0)
+ strcpy(temp, xterm_keys[n]);
+ else
+ sprintf(temp, "%s%d", xterm_keys[n], mod);
+ dumpit(temp);
+ }
+ }
+ }
+ }
+#endif
+
+}
+
+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:",
+ " -b print boolean-capabilities",
+ " -f print full names",
+ " -n print numeric-capabilities",
+ " -r COUNT repeat for given count",
+ " -s print string-capabilities",
+#ifdef NCURSES_VERSION
+ " -x print extended capabilities",
+#endif
+ };
+ unsigned n;
+ for (n = 0; n < SIZEOF(msg); ++n) {
+ fprintf(stderr, "%s\n", msg[n]);
+ }
+ ExitProgram(EXIT_FAILURE);
+}
+
+int
+main(int argc, char *argv[])
+{
+ int n;
+ int repeat;
+ char *name;
+ int r_opt = 1;
+
+ while ((n = getopt(argc, argv, "bfnr:sx")) != -1) {
+ switch (n) {
+ case 'b':
+ b_opt = TRUE;
+ break;
+ case 'f':
+ f_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;
+#ifdef NCURSES_VERSION
+ case 'x':
+ x_opt = TRUE;
+ use_extended_names(TRUE);
+ break;
+#endif
+ default:
+ usage();
+ break;
+ }
+ }
+
+ if (!(b_opt || n_opt || s_opt || x_opt)) {
+ b_opt = TRUE;
+ n_opt = TRUE;
+ s_opt = TRUE;
+ }
+
+ 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);
+ }
+ }
+
+ ExitProgram(EXIT_SUCCESS);
+}
-# $Id: modules,v 1.37 2008/12/20 21:38:44 tom Exp $
+# $Id: modules,v 1.38 2009/07/11 12:43:09 tom Exp $
##############################################################################
-# Copyright (c) 1998-2006,2007 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 "Software"), #
demo_menus progs $(srcdir) $(HEADER_DEPS) ../include/menu.h
demo_panels progs $(srcdir) $(HEADER_DEPS) ../include/panel.h
demo_termcap progs $(srcdir) $(HEADER_DEPS)
+demo_terminfo progs $(srcdir) $(HEADER_DEPS)
ditto progs $(srcdir) $(HEADER_DEPS)
dots progs $(srcdir) $(HEADER_DEPS)
dots_mvcur progs $(srcdir) $(HEADER_DEPS)
-# $Id: programs,v 1.15 2008/12/20 21:38:44 tom Exp $
+# $Id: programs,v 1.16 2009/07/11 12:47:15 tom Exp $
##############################################################################
-# Copyright (c) 2006-2007,2008 Free Software Foundation, Inc. #
+# Copyright (c) 2006-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 "Software"), #
demo_menus $(LDFLAGS_DEFAULT) $(LOCAL_LIBS) demo_menus
demo_panels $(LDFLAGS_DEFAULT) $(LOCAL_LIBS) demo_panels
demo_termcap $(LDFLAGS_TINFO) $(LOCAL_LIBS) demo_termcap
+demo_terminfo $(LDFLAGS_TINFO) $(LOCAL_LIBS) demo_terminfo
ditto $(LDFLAGS_THREADS) $(LOCAL_LIBS) ditto
dots $(LDFLAGS_TINFO) $(LOCAL_LIBS) dots
dots_mvcur $(LDFLAGS_CURSES) $(LOCAL_LIBS) dots_mvcur