mirror of
https://github.com/Aigor44/ncursesw-morphos.git
synced 2024-12-27 07:49:06 +08:00
ncurses 5.7 - patch 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
This commit is contained in:
parent
5b7f4de105
commit
ccb812c9ce
1
MANIFEST
1
MANIFEST
@ -988,6 +988,7 @@
|
||||
./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
|
||||
|
7
NEWS
7
NEWS
@ -25,7 +25,7 @@
|
||||
-- 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
|
||||
@ -45,6 +45,11 @@ 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.
|
||||
|
||||
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
|
||||
|
4
dist.mk
4
dist.mk
@ -25,7 +25,7 @@
|
||||
# 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
|
||||
@ -37,7 +37,7 @@ SHELL = /bin/sh
|
||||
# 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)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
* 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 *
|
||||
@ -32,7 +32,7 @@
|
||||
* 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
|
||||
@ -87,6 +87,12 @@ ENTRY;
|
||||
#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)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
* 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 *
|
||||
@ -33,7 +33,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
/*
|
||||
* $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.
|
||||
*/
|
||||
@ -246,7 +246,7 @@ extern NCURSES_EXPORT(char *) _nc_rootname (char *);
|
||||
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);
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $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"), #
|
||||
@ -162,7 +162,9 @@ access lib $(tinfo)
|
||||
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
|
||||
@ -212,9 +214,7 @@ visbuf lib $(trace) $(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
|
||||
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
* 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 *
|
||||
@ -50,7 +50,7 @@
|
||||
#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 *);
|
||||
|
||||
@ -131,6 +131,19 @@ hash_function(const char *string)
|
||||
*/
|
||||
|
||||
#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)
|
||||
@ -142,9 +155,11 @@ _nc_find_entry(const char *string,
|
||||
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]);
|
||||
@ -168,16 +183,21 @@ _nc_find_entry(const char *string,
|
||||
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
|
||||
|
||||
|
@ -38,7 +38,7 @@
|
||||
#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 $")
|
||||
|
||||
/****************************************************************************
|
||||
*
|
||||
@ -121,8 +121,9 @@ _nc_leaks_tinfo(void)
|
||||
_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);
|
||||
@ -136,6 +137,12 @@ _nc_leaks_tinfo(void)
|
||||
|
||||
if ((s = _nc_home_terminfo()) != 0)
|
||||
free(s);
|
||||
|
||||
#ifdef TRACE
|
||||
trace(0);
|
||||
_nc_trace_buf(-1, 0);
|
||||
#endif
|
||||
|
||||
#endif /* NO_LEAKS */
|
||||
returnVoid;
|
||||
}
|
||||
|
@ -50,7 +50,7 @@
|
||||
#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;
|
||||
@ -202,6 +202,17 @@ tgetent(char *bufp, const char *name)
|
||||
}
|
||||
#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)
|
||||
@ -214,20 +225,36 @@ tgetent(char *bufp, const char *name)
|
||||
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
|
||||
@ -250,21 +277,36 @@ tgetflag(NCURSES_CONST char *id)
|
||||
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
|
||||
@ -287,32 +329,46 @@ tgetnum(NCURSES_CONST char *id)
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -29,6 +29,7 @@
|
||||
/****************************************************************************
|
||||
* 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>
|
||||
@ -36,27 +37,54 @@
|
||||
#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
|
||||
@ -70,23 +98,38 @@ tigetflag(NCURSES_CONST char *str)
|
||||
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
|
||||
@ -100,22 +143,38 @@ tigetnum(NCURSES_CONST char *str)
|
||||
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
|
||||
|
@ -48,7 +48,7 @@
|
||||
#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[] =
|
||||
@ -383,16 +383,14 @@ _nc_parse_entry(struct entry *entryp, int literal, bool silent)
|
||||
&& !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
|
||||
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
* 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 *
|
||||
@ -42,7 +42,9 @@
|
||||
#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)
|
||||
@ -108,9 +110,16 @@ _nc_visbuf2n(int bufnum, const char *buf, int len)
|
||||
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) {
|
||||
@ -177,7 +186,7 @@ _nc_viswbuf2n(int bufnum, const wchar_t *buf, int len)
|
||||
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];
|
||||
}
|
||||
@ -293,7 +302,8 @@ _nc_viscbuf2(int bufnum, const NCURSES_CH_T * buf, int len)
|
||||
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++) {
|
||||
|
29
test/README
29
test/README
@ -25,7 +25,7 @@
|
||||
-- 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 :-)
|
||||
@ -218,7 +218,7 @@ ESCDELAY test: test_opaque
|
||||
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
|
||||
@ -247,8 +247,8 @@ bkgdset test: background ncurses testaddch
|
||||
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
|
||||
@ -263,7 +263,7 @@ clrtoeol test: blue bs demo_altkeys demo_menus foldkeys hanoi hashtest movewin
|
||||
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
|
||||
@ -289,6 +289,7 @@ erasewchar -
|
||||
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 -
|
||||
@ -470,8 +471,8 @@ noqiflush -
|
||||
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
|
||||
@ -509,7 +510,7 @@ set_tabsize test: test_opaque
|
||||
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 -
|
||||
@ -532,8 +533,8 @@ standout test: blue ncurses
|
||||
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
|
||||
@ -545,9 +546,9 @@ tgetflag test: demo_termcap
|
||||
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
|
||||
@ -563,7 +564,7 @@ ungetmouse -
|
||||
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
|
||||
|
293
test/demo_terminfo.c
Normal file
293
test/demo_terminfo.c
Normal file
@ -0,0 +1,293 @@
|
||||
/****************************************************************************
|
||||
* 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);
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
# $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"), #
|
||||
@ -46,6 +46,7 @@ demo_keyok progs $(srcdir) $(HEADER_DEPS)
|
||||
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)
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $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"), #
|
||||
@ -44,6 +44,7 @@ demo_keyok $(LDFLAGS_CURSES) $(LOCAL_LIBS) demo_keyok
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user