/****************************************************************************
- * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2012,2013 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 *
* scroll operation worked, and the refresh() code only had to do a
* partial repaint.
*
- * $Id: view.c,v 1.88 2012/12/01 23:19:49 tom Exp $
+ * $Id: view.c,v 1.94 2013/09/28 21:58:42 tom Exp $
*/
#include <test.priv.h>
#include <sys/ptem.h>
#endif
-static RETSIGTYPE finish(int sig) GCC_NORETURN;
+#undef CTRL
+#define CTRL(x) ((x) & 0x1f)
+
+static void finish(int sig) GCC_NORETURN;
static void show_all(const char *tag);
#if defined(SIGWINCH) && defined(TIOCGWINSZ) && HAVE_RESIZE_TERM
#endif
#if CAN_RESIZE
-static RETSIGTYPE adjust(int sig);
+static void adjust(int sig);
static int interrupted;
static bool waiting = FALSE;
#endif
#if defined(KEY_RESIZE)
," -r use old-style sigwinch handler rather than KEY_RESIZE"
#endif
+ ," -s start in single-step mode, waiting for input"
#ifdef TRACE
," -t trace screen updates"
," -T NUM specify trace mask"
int value = 0;
bool done = FALSE;
bool got_number = FALSE;
+ bool single_step = FALSE;
#if CAN_RESIZE
bool nonposix_resize = FALSE;
#endif
(void) signal(SIGINT, finish); /* arrange interrupts to terminate */
#endif
- while ((i = getopt(argc, argv, "cin:rtT:")) != -1) {
+ while ((i = getopt(argc, argv, "cin:rstT:")) != -1) {
switch (i) {
case 'c':
try_color = TRUE;
nonposix_resize = TRUE;
break;
#endif
+ case 's':
+ single_step = TRUE;
+ break;
#ifdef TRACE
case 'T':
{
char *next = 0;
- int tvalue = strtol(optarg, &next, 0);
+ int tvalue = (int) strtol(optarg, &next, 0);
if (tvalue < 0 || (next != 0 && *next != 0))
usage();
trace((unsigned) tvalue);
(void) nonl(); /* tell curses not to do NL->CR/NL on output */
(void) cbreak(); /* take input chars one at a time, no wait for \n */
(void) noecho(); /* don't echo input */
- nodelay(stdscr, TRUE);
+ if (!single_step)
+ nodelay(stdscr, TRUE);
idlok(stdscr, TRUE); /* allow use of insert/delete line */
if (try_color) {
nodelay(stdscr, TRUE);
my_delay = 0;
break;
+ case CTRL('L'):
+ redrawwin(stdscr);
+ break;
case ERR:
if (!my_delay)
napms(50);
finish(0); /* we're done */
}
-static RETSIGTYPE
+static void
finish(int sig)
{
endwin();
* The 'wrefresh(curscr)' is needed to force the refresh to start from the top
* of the screen -- some xterms mangle the bitmap while resizing.
*/
-static RETSIGTYPE
+static void
adjust(int sig)
{
if (waiting || sig == 0) {
printw("%.*s", COLS, temp);
clrtoeol();
this_time = time((time_t *) 0);
- strcpy(temp, ctime(&this_time));
+ strncpy(temp, ctime(&this_time), (size_t) 30);
if ((i = (int) strlen(temp)) != 0) {
temp[--i] = 0;
if (move(0, COLS - i - 2) != ERR)