X-Git-Url: http://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=test%2Fworm.c;h=c7b04aa814451d0253b79fcb6a61a4dd0b638414;hb=896224bea6196d73d03e39b1a266887d6f2cb6ff;hp=70c92a2167b390be707585142587320a8fbd8514;hpb=5d8dbcdd9423bf9821db414fd9ec792ccf1f1027;p=ncurses.git diff --git a/test/worm.c b/test/worm.c index 70c92a21..c7b04aa8 100644 --- a/test/worm.c +++ b/test/worm.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2016,2017 Free Software Foundation, Inc. * + * Copyright (c) 1998-2018,2019 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 * @@ -52,7 +52,7 @@ traces will be dumped. The program stops and waits for one character of input at the beginning and end of the interval. - $Id: worm.c,v 1.75 2017/09/08 20:00:50 tom Exp $ + $Id: worm.c,v 1.81 2019/12/14 23:25:29 tom Exp $ */ #include @@ -97,6 +97,7 @@ static unsigned long sequence = 0; static bool quitting = FALSE; static WORM worm[MAX_WORMS]; +static int max_refs; static int **refs; static int last_x, last_y; @@ -196,12 +197,25 @@ static const struct options { }; /* *INDENT-ON* */ +#if HAVE_USE_WINDOW +static int +safe_wgetch(WINDOW *w, void *data GCC_UNUSED) +{ + return wgetch(w); +} +static int +safe_wrefresh(WINDOW *w, void *data GCC_UNUSED) +{ + return wrefresh(w); +} +#endif + #ifdef KEY_RESIZE static void failed(const char *s) { perror(s); - exit_curses(); + stop_curses(); ExitProgram(EXIT_FAILURE); } #endif @@ -209,8 +223,8 @@ failed(const char *s) static void cleanup(void) { - USING_WINDOW(stdscr, wrefresh); - exit_curses(); + USING_WINDOW1(stdscr, wrefresh, safe_wrefresh); + stop_curses(); } static void @@ -290,6 +304,7 @@ draw_worm(WINDOW *win, void *data) switch (op->nopts) { case 0: done = TRUE; + Trace(("done - draw_worm")); break; case 1: w->orientation = op->opts[0]; @@ -380,17 +395,18 @@ static int get_input(void) { int ch; - ch = USING_WINDOW(stdscr, wgetch); + ch = USING_WINDOW1(stdscr, wgetch, safe_wgetch); return ch; } #ifdef KEY_RESIZE static int -update_refs(WINDOW *win) +update_refs(WINDOW *win, void *data) { int x, y; (void) win; + (void) data; if (last_x != COLS - 1) { for (y = 0; y <= last_y; y++) { refs[y] = typeRealloc(int, (size_t) COLS, refs[y]); @@ -404,6 +420,7 @@ update_refs(WINDOW *win) if (last_y != LINES - 1) { for (y = LINES; y <= last_y; y++) free(refs[y]); + max_refs = LINES; refs = typeRealloc(int *, (size_t) LINES, refs); for (y = last_y + 1; y < LINES; y++) { refs[y] = typeMalloc(int, (size_t) COLS); @@ -455,7 +472,6 @@ main(int argc, char *argv[]) struct worm *w; int *ip; bool done = FALSE; - int max_refs; #if HAVE_USE_DEFAULT_COLORS bool opt_d = FALSE; #endif @@ -583,7 +599,7 @@ main(int argc, char *argv[]) } } } - USING_WINDOW(stdscr, wrefresh); + USING_WINDOW1(stdscr, wrefresh, safe_wrefresh); nodelay(stdscr, TRUE); while (!done) { @@ -592,10 +608,10 @@ main(int argc, char *argv[]) #ifdef TRACE if (trace_start || trace_end) { if (generation == trace_start) { - trace(TRACE_CALLS); + curses_trace(TRACE_CALLS); get_input(); } else if (generation == trace_end) { - trace(0); + curses_trace(0); get_input(); } @@ -616,6 +632,7 @@ main(int argc, char *argv[]) if (ch == 'q') { quitting = TRUE; done = TRUE; + Trace(("done - quitting")); continue; } else if (ch == 's') { nodelay(stdscr, FALSE); @@ -626,7 +643,7 @@ main(int argc, char *argv[]) done = draw_all_worms(); napms(10); - USING_WINDOW(stdscr, wrefresh); + USING_WINDOW1(stdscr, wrefresh, safe_wrefresh); } Trace(("Cleanup"));