]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - test/ncurses.c
ncurses 6.0 - patch 20160806
[ncurses.git] / test / ncurses.c
index d04effb40b63a44ec63fee897345dcf251ed737d..5764dd75c2451d15da18f53507d7077e393995f8 100644 (file)
@@ -40,7 +40,7 @@ AUTHOR
    Author: Eric S. Raymond <esr@snark.thyrsus.com> 1993
            Thomas E. Dickey (beginning revision 1.27 in 1996).
 
-$Id: ncurses.c,v 1.433 2016/04/24 01:00:06 tom Exp $
+$Id: ncurses.c,v 1.438 2016/06/11 21:05:48 tom Exp $
 
 ***************************************************************************/
 
@@ -200,9 +200,9 @@ Repaint(void)
 }
 
 static bool
-isQuit(int c)
+isQuit(int c, bool escape)
 {
-    return ((c) == QUIT || (c) == ESCAPE);
+    return ((c) == QUIT || (escape && ((c) == ESCAPE)));
 }
 #define case_QUIT      QUIT: case ESCAPE
 
@@ -652,6 +652,8 @@ blocking_getch(GetchFlags flags, int delay)
     return ((delay < 0) && flags['t']);
 }
 
+#define ExitOnEscape() (flags[UChar('k')] && flags[UChar('t')])
+
 static void
 wgetch_help(WINDOW *win, GetchFlags flags)
 {
@@ -678,13 +680,16 @@ wgetch_help(WINDOW *win, GetchFlags flags)
     printw("Type any key to see its %s value.  Also:\n",
           flags['k'] ? "keypad" : "literal");
     for (n = 0; n < SIZEOF(help); ++n) {
+       const char *msg = help[n];
        int row = 1 + (int) (n % chk);
        int col = (n >= chk) ? COLS / 2 : 0;
-       int flg = ((strstr(help[n], "toggle") != 0)
-                  && (flags[UChar(*help[n])] != FALSE));
+       int flg = ((strstr(msg, "toggle") != 0)
+                  && (flags[UChar(*msg)] != FALSE));
+       if (*msg == '^' && ExitOnEscape())
+           msg = "^[,^q -- quit";
        if (flg)
            (void) standout();
-       MvPrintw(row, col, "%s", help[n]);
+       MvPrintw(row, col, "%s", msg);
        if (col == 0)
            clrtoeol();
        if (flg)
@@ -842,7 +847,7 @@ wgetch_test(unsigned level, WINDOW *win, int delay)
        if (c == ERR && blocking_getch(flags, delay)) {
            wprintw(win, "ERR");
            wgetch_wrap(win, first_y);
-       } else if (isQuit(c)) {
+       } else if (isQuit(c, ExitOnEscape())) {
            break;
        } else if (c == 'e') {
            flags[UChar('e')] = !flags[UChar('e')];
@@ -1098,7 +1103,7 @@ wget_wch_test(unsigned level, WINDOW *win, int delay)
        if (code == ERR && blocking_getch(flags, delay)) {
            wprintw(win, "ERR");
            wgetch_wrap(win, first_y);
-       } else if (isQuit((int) c)) {
+       } else if (isQuit((int) c, ExitOnEscape())) {
            break;
        } else if (c == 'e') {
            flags[UChar('e')] = !flags[UChar('e')];
@@ -2665,7 +2670,7 @@ reset_all_colors(void)
 
 #define okCOLOR(n) ((n) >= 0 && (n) < max_colors)
 #define okRGB(n)   ((n) >= 0 && (n) <= 1000)
-#define DecodeRGB(n) ((n * 1000) / 0xffff)
+#define DecodeRGB(n) (NCURSES_COLOR_T) ((n * 1000) / 0xffff)
 
 static void
 init_all_colors(bool xterm_colors, char *palette_file)
@@ -2693,7 +2698,7 @@ init_all_colors(bool xterm_colors, char *palette_file)
        noecho();
        for (n = 0; n < max_colors; ++n) {
            fprintf(stderr, "\033]4;%d;?\007", n);
-           got = read(0, result, sizeof(result) - 1);
+           got = (int) read(0, result, sizeof(result) - 1);
            if (got < 0)
                break;
            result[got] = '\0';
@@ -2962,7 +2967,7 @@ color_edit(void)
        MvPrintw(LINES - 1, 0, "Number: %d", value);
        clrtoeol();
     } while
-       (!isQuit(this_c));
+       (!isQuit(this_c, TRUE));
 
     erase();
 
@@ -3222,7 +3227,7 @@ slk_test(void)
            beep();
            break;
        }
-    } while (!isQuit(c = Getchar()));
+    } while (!isQuit(c = Getchar(), TRUE));
 
   done:
     slk_clear();
@@ -3376,7 +3381,7 @@ wide_slk_test(void)
            beep();
            break;
        }
-    } while (!isQuit(c = Getchar()));
+    } while (!isQuit(c = Getchar(), TRUE));
 
   done:
     slk_clear();
@@ -3716,7 +3721,7 @@ acs_display(void)
                     my_list[at_code].name);
        }
        refresh();
-    } while (!isQuit(c = Getchar()));
+    } while (!isQuit(c = Getchar(), TRUE));
 
     Pause();
     erase();
@@ -4251,7 +4256,7 @@ wide_acs_display(void)
                     my_list[at_code].name);
        }
        refresh();
-    } while (!isQuit(c = Getchar()));
+    } while (!isQuit(c = Getchar(), TRUE));
 
     Pause();
     erase();
@@ -4361,13 +4366,10 @@ FRAME
     WINDOW *wind;
 };
 
-#if defined(NCURSES_VERSION)
-#if (NCURSES_VERSION_PATCH < 20070331) && NCURSES_EXT_FUNCS
+#if defined(NCURSES_VERSION) && NCURSES_EXT_FUNCS
+#if (NCURSES_VERSION_PATCH < 20070331)
 #define is_keypad(win)   (win)->_use_keypad
 #define is_scrollok(win) (win)->_scroll
-#elif !defined(is_keypad)
-#define is_keypad(win)   FALSE
-#define is_scrollok(win) FALSE
 #endif
 #else
 #define is_keypad(win)   FALSE
@@ -4403,46 +4405,26 @@ HaveScroll(FRAME * curp)
 static void
 newwin_legend(FRAME * curp)
 {
+#define DATA(num, name) { name, num }
     static const struct {
        const char *msg;
        int code;
     } legend[] = {
-       {
-           "^C = create window", 0
-       },
-       {
-           "^N = next window", 0
-       },
-       {
-           "^P = previous window", 0
-       },
-       {
-           "^F = scroll forward", 0
-       },
-       {
-           "^B = scroll backward", 0
-       },
-       {
-           "^K = keypad(%s)", 1
-       },
-       {
-           "^S = scrollok(%s)", 2
-       },
-       {
-           "^W = save window to file", 0
-       },
-       {
-           "^R = restore window", 0
-       },
+       DATA(0, "^C = create window"),
+           DATA(0, "^N = next window"),
+           DATA(0, "^P = previous window"),
+           DATA(0, "^F = scroll forward"),
+           DATA(0, "^B = scroll backward"),
+           DATA(1, "^K = keypad(%s)"),
+           DATA(2, "^S = scrollok(%s)"),
+           DATA(0, "^W = save window"),
+           DATA(0, "^R = restore window"),
 #if HAVE_WRESIZE
-       {
-           "^X = resize", 0
-       },
+           DATA(0, "^X = resize"),
 #endif
-       {
-           "^Q%s = exit", 3
-       }
+           DATA(3, "^Q%s = exit")
     };
+#undef DATA
     size_t n;
     int x;
     bool do_keypad = HaveKeypad(curp);
@@ -4752,10 +4734,14 @@ acs_and_scroll(void)
            } else if ((fp = fopen(DUMPFILE, "w")) == (FILE *) 0) {
                transient(current, "Can't open screen dump file");
            } else {
-               (void) putwin(frame_win(current), fp);
+               int rc = putwin(frame_win(current), fp);
                (void) fclose(fp);
 
-               current = delete_framed(current, TRUE);
+               if (rc == OK) {
+                   current = delete_framed(current, TRUE);
+               } else {
+                   transient(current, "Can't write screen dump file");
+               }
            }
            break;
 
@@ -4841,12 +4827,6 @@ acs_and_scroll(void)
            break;
 #endif /* HAVE_WRESIZE */
 
-       case KEY_F(10): /* undocumented --- use this to test area clears */
-           selectcell(0, 0, LINES - 1, COLS - 1);
-           clrtobot();
-           refresh();
-           break;
-
        case KEY_UP:
            newwin_move(current, -1, 0);
            break;
@@ -4890,7 +4870,7 @@ acs_and_scroll(void)
        usescr = frame_win(current);
        wrefresh(usescr);
     } while
-       (!isQuit(c = wGetchar(usescr))
+       (!isQuit(c = wGetchar(usescr), TRUE)
         && (c != ERR));
 
   breakout:
@@ -6782,7 +6762,7 @@ overlap_test(void)
     memset(flavor, 0, sizeof(flavor));
     state = overlap_help(0, flavor);
 
-    while (!isQuit(ch = Getchar()))
+    while (!isQuit(ch = Getchar(), TRUE))
        switch (ch) {
        case 'a':               /* refresh window A first, then B */
            overlap_test_0(win1, win2);