227 lines
6.4 KiB
C
227 lines
6.4 KiB
C
/****************************************************************************
|
|
* Copyright 2020 Thomas E. Dickey *
|
|
* Copyright 2007-2010,2017 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. *
|
|
****************************************************************************/
|
|
/*
|
|
* $Id: test_arrays.c,v 1.9 2020/02/02 23:34:34 tom Exp $
|
|
*
|
|
* Author: Thomas E Dickey
|
|
*
|
|
* Demonstrate the public arrays from the terminfo library.
|
|
|
|
extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolnames[];
|
|
extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolcodes[];
|
|
extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolfnames[];
|
|
extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numnames[];
|
|
extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numcodes[];
|
|
extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numfnames[];
|
|
extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strnames[];
|
|
extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strcodes[];
|
|
extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strfnames[];
|
|
|
|
*/
|
|
|
|
#define USE_TINFO
|
|
#include <test.priv.h>
|
|
|
|
#if HAVE_TIGETSTR
|
|
#if defined(HAVE_CURSES_DATA_BOOLNAMES) || defined(DECL_CURSES_DATA_BOOLNAMES)
|
|
|
|
static bool opt_C;
|
|
static bool opt_T;
|
|
static bool opt_c;
|
|
static bool opt_f;
|
|
static bool opt_n;
|
|
static bool opt_t;
|
|
|
|
#define PLAIN(opts, name) if (opts) dump_array(#name, name)
|
|
|
|
static void
|
|
dump_array(const char *name, NCURSES_CONST char *const *list)
|
|
{
|
|
int n;
|
|
|
|
printf("%s:\n", name);
|
|
for (n = 0; list[n] != 0; ++n) {
|
|
printf("%5d:%s\n", n, list[n]);
|
|
}
|
|
}
|
|
|
|
static void
|
|
dump_plain(void)
|
|
{
|
|
PLAIN(opt_T && opt_n, boolnames);
|
|
PLAIN(opt_C && opt_c, boolcodes);
|
|
PLAIN(opt_T && opt_f, boolfnames);
|
|
|
|
PLAIN(opt_T && opt_n, numnames);
|
|
PLAIN(opt_C && opt_c, numcodes);
|
|
PLAIN(opt_T && opt_f, numfnames);
|
|
|
|
PLAIN(opt_T && opt_n, strnames);
|
|
PLAIN(opt_C && opt_c, strcodes);
|
|
PLAIN(opt_T && opt_f, strfnames);
|
|
}
|
|
|
|
#define STRING(opts, name) if (opts) { printf("%s\"%s\"", c++ ? "," : "", name); }
|
|
#define NUMBER(opts, value) if (opts) { printf("%s%d", c++ ? "," : "", value); }
|
|
|
|
static void
|
|
dump_table(void)
|
|
{
|
|
int c = 0;
|
|
int r;
|
|
|
|
STRING(opt_t, "Index");
|
|
STRING(opt_t, "Type");
|
|
STRING(opt_n, "Name");
|
|
STRING(opt_c, "Code");
|
|
STRING(opt_f, "FName");
|
|
printf("\n");
|
|
|
|
for (r = 0; boolnames[r]; ++r) {
|
|
c = 0;
|
|
NUMBER(opt_t, r);
|
|
STRING(opt_t, "bool");
|
|
STRING(opt_T && opt_n, boolnames[r]);
|
|
STRING(opt_C && opt_c, boolcodes[r]);
|
|
STRING(opt_T && opt_f, boolfnames[r]);
|
|
printf("\n");
|
|
}
|
|
|
|
for (r = 0; numnames[r]; ++r) {
|
|
c = 0;
|
|
NUMBER(opt_t, r);
|
|
STRING(opt_t, "num");
|
|
STRING(opt_T && opt_n, numnames[r]);
|
|
STRING(opt_C && opt_c, numcodes[r]);
|
|
STRING(opt_T && opt_f, numfnames[r]);
|
|
printf("\n");
|
|
}
|
|
|
|
for (r = 0; strnames[r]; ++r) {
|
|
c = 0;
|
|
NUMBER(opt_t, r);
|
|
STRING(opt_t, "str");
|
|
STRING(opt_T && opt_n, strnames[r]);
|
|
STRING(opt_C && opt_c, strcodes[r]);
|
|
STRING(opt_T && opt_f, strfnames[r]);
|
|
printf("\n");
|
|
}
|
|
}
|
|
|
|
static void
|
|
usage(void)
|
|
{
|
|
static const char *msg[] =
|
|
{
|
|
"Usage: test_arrays [options]",
|
|
"",
|
|
"If no options are given, print all (boolean, numeric, string)",
|
|
"capability names showing their index within the tables.",
|
|
"",
|
|
"Options:",
|
|
" -C print termcap names",
|
|
" -T print terminfo names",
|
|
" -c print termcap names",
|
|
" -f print full terminfo names",
|
|
" -n print short terminfo names",
|
|
" -t print the result as CSV table",
|
|
};
|
|
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;
|
|
|
|
while ((n = getopt(argc, argv, "CTcfnt")) != -1) {
|
|
switch (n) {
|
|
case 'C':
|
|
opt_C = TRUE;
|
|
break;
|
|
case 'T':
|
|
opt_T = TRUE;
|
|
break;
|
|
case 'c':
|
|
opt_c = TRUE;
|
|
break;
|
|
case 'f':
|
|
opt_f = TRUE;
|
|
break;
|
|
case 'n':
|
|
opt_n = TRUE;
|
|
break;
|
|
case 't':
|
|
opt_t = TRUE;
|
|
break;
|
|
default:
|
|
usage();
|
|
/* NOTREACHED */
|
|
}
|
|
}
|
|
if (optind < argc)
|
|
usage();
|
|
|
|
if (!(opt_T || opt_C)) {
|
|
opt_T = opt_C = TRUE;
|
|
}
|
|
if (!(opt_c || opt_f || opt_n)) {
|
|
opt_c = opt_f = opt_n = TRUE;
|
|
}
|
|
|
|
if (opt_t) {
|
|
dump_table();
|
|
} else {
|
|
dump_plain();
|
|
}
|
|
|
|
ExitProgram(EXIT_SUCCESS);
|
|
}
|
|
|
|
#else
|
|
int
|
|
main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
|
|
{
|
|
printf("This program requires the terminfo arrays\n");
|
|
ExitProgram(EXIT_FAILURE);
|
|
}
|
|
#endif
|
|
#else /* !HAVE_TIGETSTR */
|
|
int
|
|
main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
|
|
{
|
|
printf("This program requires the terminfo functions such as tigetstr\n");
|
|
ExitProgram(EXIT_FAILURE);
|
|
}
|
|
#endif /* HAVE_TIGETSTR */
|