/****************************************************************************
- * Copyright (c) 2005-2014,2015 Free Software Foundation, Inc. *
+ * Copyright (c) 2005-2016,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 *
/*
* Author: Thomas E. Dickey
*
- * $Id: demo_termcap.c,v 1.47 2015/07/10 23:36:16 tom Exp $
+ * $Id: demo_termcap.c,v 1.56 2017/12/26 22:41:47 tom Exp $
*
* A simple demo of the termcap interface.
*/
#endif
#endif
-#ifdef NCURSES_VERSION
+#if defined(NCURSES_VERSION) && HAVE_TERMCAP_H
#include <termcap.h>
#endif
+static void failed(const char *) GCC_NORETURN;
+
static void
failed(const char *msg)
{
static bool n_opt = FALSE;
static bool s_opt = FALSE;
static bool q_opt = FALSE;
+#ifdef NCURSES_VERSION
static bool x_opt = FALSE;
static bool y_opt = FALSE;
+#endif
static char *d_opt;
static char *e_opt;
static char *
make_dbitem(char *p, char *q)
{
- char *result = malloc(strlen(e_opt) + 2 + (size_t) (p - q));
- sprintf(result, "%s=%.*s", e_opt, (int) (p - q), q);
+ size_t need = strlen(e_opt) + 2 + (size_t) (p - q);
+ char *result = malloc(need);
+ _nc_SPRINTF(result, _nc_SLIMIT(need) "%s=%.*s", e_opt, (int) (p - q), q);
return result;
}
return result;
}
+#if NO_LEAKS
static void
free_dblist(void)
{
db_list = 0;
}
}
+#endif /* NO_LEAKS */
static void
show_string(const char *name, const char *value)
#ifdef NCURSES_VERSION
if (x_opt && (my_blob == 0) && y_opt) {
#if NCURSES_XNAMES
- TERMTYPE *term = &(cur_term->type);
+ TERMTYPE *term = (TERMTYPE *) cur_term;
if (term != 0
&& ((NUM_BOOLEANS(term) != BOOLCOUNT)
|| (NUM_NUMBERS(term) != NUMCOUNT)
length += chunk;
} else {
result[count] = unused;
- strcpy(unused, list[count]);
+ _nc_STRCPY(unused, list[count], length);
unused += chunk;
}
}
return result;
}
-#endif
+
+#if NO_LEAKS
+static void
+free_code_list(char **list)
+{
+ if (list) {
+ free(list[0]);
+ free(list);
+ }
+}
+#endif /* NO_LEAKS */
+#endif /* USE_CODE_LISTS */
static void
usage(void)
int n;
char *name;
bool a_opt = FALSE;
+#if defined(NCURSES_VERSION) || defined(HAVE_CURSES_DATA_OSPEED)
bool v_opt = FALSE;
+#endif
char *input_name = 0;
int repeat;
case 's':
s_opt = TRUE;
break;
+#if defined(NCURSES_VERSION) || defined(HAVE_CURSES_DATA_OSPEED)
case 'v':
v_opt = TRUE;
break;
+#endif
+#ifdef NCURSES_VERSION
#if NCURSES_XNAMES
case 'x':
x_opt = TRUE;
y_opt = TRUE;
x_opt = TRUE;
break;
+#endif
#endif
default:
usage();
printf("%ld values (%ld booleans, %ld numbers, %ld strings)\n",
total_values, total_b_values, total_n_values, total_s_values);
+#if defined(NCURSES_VERSION) || defined(HAVE_CURSES_DATA_OSPEED)
if (v_opt) {
show_number("PC", PC);
show_string("UP", UP);
show_string("BC", BC);
- show_number("ospeed", ospeed);
+ show_number("ospeed", (int) ospeed);
}
+#endif
+#if NO_LEAKS
free_dblist();
+#if USE_CODE_LISTS
+ free_code_list(my_boolcodes);
+ free_code_list(my_numcodes);
+ free_code_list(my_strcodes);
+#endif
+#endif /* NO_LEAKS */
ExitProgram(EXIT_SUCCESS);
}