/****************************************************************************
- * Copyright (c) 2006 Free Software Foundation, Inc. *
+ * Copyright (c) 2006-2012,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 *
* authorization. *
****************************************************************************/
/*
- * $Id: redraw.c,v 1.3 2006/11/04 23:20:27 tom Exp $
+ * $Id: redraw.c,v 1.10 2017/06/24 14:04:57 tom Exp $
*
* Demonstrate the redrawwin() and wredrawln() functions.
* Thomas Dickey - 2006/11/4
*/
#include <test.priv.h>
+#include <popup_msg.h>
static void
trash(int beg_x, int max_x, int cur_x)
for (x = max_x; x > cur_x; --x) {
putchar('\b');
}
+ fflush(stdout);
}
static void
test_redraw(WINDOW *win)
{
+ static const char *help[] =
+ {
+ "Commands:",
+ " ^Q/ESC/q - quit",
+ " w - recur in a new window",
+ " ! - overwrite current line using stdio outside curses.",
+#ifdef NCURSES_VERSION
+ " @ - run \"date\" command, to put its output on screen.",
+#endif
+ " ^L - call redrawwin() for current window.",
+ " ^W - call wredrawln() for current line/current window.",
+ " arrow-keys - move cursor on the screen",
+ "",
+ "Other control characters are added to the screen in printable form.",
+ "Other printable characters are added to the screen as is.",
+ 0
+ };
+
WINDOW *win1;
WINDOW *win2;
bool done = FALSE;
int max_y, max_x;
int beg_y, beg_x;
+ assert(win != 0);
+
scrollok(win, TRUE);
keypad(win, TRUE);
getmaxyx(win, max_y, max_x);
switch (ch) {
case 'q':
/* FALLTHRU */
+ case QUIT:
case ESCAPE:
done = TRUE;
break;
* using mvcur(). It is ifdef'd for NCURSES, since X/Open does
* not define the case where the old location is unknown.
*/
- system("date");
+ IGNORE_RC(system("date"));
mvcur(-1, -1, y, x);
break;
#endif
wmove(win, y, x + 1);
break;
+ case HELP_KEY_1:
+ popup_msg(win, help);
+ break;
+
default:
if (ch > KEY_MIN) {
waddstr(win, keyname(ch));
+ waddch(win, '\n');
} else {
- waddstr(win, unctrl(ch));
+ waddstr(win, unctrl(UChar(ch)));
}
break;
}
}
}
+static void
+usage(void)
+{
+ static const char *tbl[] =
+ {
+ "Usage: redraw [options]"
+ ,""
+ ,"Options:"
+ ," -e use stderr (default stdout)"
+ ," -n do not initialize terminal"
+ };
+ unsigned n;
+ for (n = 0; n < SIZEOF(tbl); ++n)
+ fprintf(stderr, "%s\n", tbl[n]);
+ ExitProgram(EXIT_FAILURE);
+}
+
int
main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
{
- initscr();
+ int ch;
+ bool no_init = FALSE;
+ FILE *my_fp = stdout;
+
+ while ((ch = getopt(argc, argv, "en")) != -1) {
+ switch (ch) {
+ case 'e':
+ my_fp = stderr;
+ break;
+ case 'n':
+ no_init = TRUE;
+ break;
+ default:
+ usage();
+ break;
+ }
+ }
+ if (optind < argc)
+ usage();
+
+ if (no_init) {
+ START_TRACE();
+ } else {
+ newterm((char *) 0, my_fp, stdin);
+ }
+
raw();
noecho();
test_redraw(stdscr);