X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Fmovewindow.c;h=9effda41a4da145f421aa376aa04f7f48d12cad1;hp=7905a9356b7b493019874066edf1bf118e8363aa;hb=aabb3a65ee5d88949abe529b5131adedb9cfab84;hpb=daf57f17ced271693696cc30860aae20c97fb8d0 diff --git a/test/movewindow.c b/test/movewindow.c index 7905a935..9effda41 100644 --- a/test/movewindow.c +++ b/test/movewindow.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 2006-2010,2012 Free Software Foundation, Inc. * + * Copyright (c) 2006-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 * @@ -26,7 +26,7 @@ * authorization. * ****************************************************************************/ /* - * $Id: movewindow.c,v 1.34 2012/02/05 01:16:47 tom Exp $ + * $Id: movewindow.c,v 1.39 2013/05/04 19:41:02 tom Exp $ * * Demonstrate move functions for windows and derived windows from the curses * library. @@ -79,6 +79,14 @@ static void tail_line(CONST_FMT char *fmt,...) GCC_PRINTFLIKE(1, 2); static unsigned num_windows; static FRAME *all_windows; +static void +failed(const char *s) +{ + perror(s); + endwin(); + ExitProgram(EXIT_FAILURE); +} + static void message(int lineno, CONST_FMT char *fmt, va_list argp) { @@ -198,7 +206,6 @@ selectcell(WINDOW *parent, i = event.y - uli; j = event.x - ulj; } - moved = TRUE; } else { beep(); break; @@ -211,8 +218,16 @@ selectcell(WINDOW *parent, res.x = ulj + j; return (&res); } - i %= si; - j %= sj; + + if (si <= 0) + i = 0; + else + i %= si; + + if (sj <= 0) + j = 0; + else + j %= sj; /* * If the caller can handle continuous movement, return the result. @@ -306,6 +321,8 @@ add_window(WINDOW *parent, WINDOW *child) keypad(child, TRUE); if (need > have) { all_windows = typeRealloc(FRAME, need, all_windows); + if (!all_windows) + failed("add_window"); } all_windows[num_windows].parent = parent; all_windows[num_windows].child = child; @@ -477,34 +494,32 @@ move_derwin(WINDOW *win) if (parent != 0) { bool top = (parent == stdscr); - if (!top) { - int min_col = top ? COL_MIN : 0; - int max_col = top ? COL_MAX : getmaxx(parent); - int min_line = top ? LINE_MIN : 0; - int max_line = top ? LINE_MAX : getmaxy(parent); - PAIR *tmp; - bool more; - - show_derwin(win); - while ((tmp = selectcell(parent, - win, - min_line, min_col, - max_line, max_col, - TRUE, - &more)) != 0) { - if (mvderwin(win, tmp->y, tmp->x) != ERR) { - refresh_all(win); - doupdate(); - repaint_one(win); - doupdate(); - result = TRUE; - show_derwin(win); - } else { - flash(); - } - if (!more) - break; + int min_col = top ? COL_MIN : 0; + int max_col = top ? COL_MAX : getmaxx(parent); + int min_line = top ? LINE_MIN : 0; + int max_line = top ? LINE_MAX : getmaxy(parent); + PAIR *tmp; + bool more; + + show_derwin(win); + while ((tmp = selectcell(parent, + win, + min_line, min_col, + max_line, max_col, + TRUE, + &more)) != 0) { + if (mvderwin(win, tmp->y, tmp->x) != ERR) { + refresh_all(win); + doupdate(); + repaint_one(win); + doupdate(); + result = TRUE; + show_derwin(win); + } else { + flash(); } + if (!more) + break; } } head_line("done"); @@ -542,7 +557,7 @@ fill_with_pattern(WINDOW *win) getmaxyx(win, y1, x1); for (y = 0; y < y1; ++y) { for (x = 0; x < x1; ++x) { - MvWAddCh(win, y, x, ch); + MvWAddCh(win, y, x, (chtype) ch); if (++ch > 'z') ch = 'a'; }