X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Fncurses.c;h=7933e719232f5524955c7e1f4447ee3a4dcbc011;hp=91acade3c8daea53b3edaf1c2f0adfd82aa73f3c;hb=88d50b5d7057d4f59c586c93ff290d0a39528f70;hpb=8144a95f5729b46a1ad4f4c3c4ba29800304e4c0;ds=sidebyside diff --git a/test/ncurses.c b/test/ncurses.c index 91acade3..7933e719 100644 --- a/test/ncurses.c +++ b/test/ncurses.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. * + * Copyright (c) 1998-2007,2008 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 * @@ -40,7 +40,7 @@ AUTHOR Author: Eric S. Raymond 1993 Thomas E. Dickey (beginning revision 1.27 in 1996). -$Id: ncurses.c,v 1.296 2007/12/29 21:05:43 tom Exp $ +$Id: ncurses.c,v 1.309 2008/03/08 20:57:09 tom Exp $ ***************************************************************************/ @@ -76,7 +76,7 @@ $Id: ncurses.c,v 1.296 2007/12/29 21:05:43 tom Exp $ #define NCURSES_CONST_PARAM const void #ifdef TRACE -static unsigned save_trace = TRACE_ORDINARY | TRACE_CALLS; +static unsigned save_trace = TRACE_ORDINARY | TRACE_ICALLS | TRACE_CALLS; extern unsigned _nc_tracing; #endif @@ -118,6 +118,8 @@ extern unsigned _nc_tracing; #endif +#define ToggleAcs(temp,real) temp = ((temp == real) ? 0 : real) + #define P(string) printw("%s\n", string) #define BLANK ' ' /* this is the background character */ @@ -183,14 +185,14 @@ wGetchar(WINDOW *win) while ((c = wgetch(win)) == CTRL('T')) { if (_nc_tracing) { save_trace = _nc_tracing; - _tracef("TOGGLE-TRACING OFF"); + Trace(("TOGGLE-TRACING OFF")); _nc_tracing = 0; } else { _nc_tracing = save_trace; } trace(_nc_tracing); if (_nc_tracing) - _tracef("TOGGLE-TRACING ON"); + Trace(("TOGGLE-TRACING ON")); } #else c = wgetch(win); @@ -276,14 +278,14 @@ wGet_wchar(WINDOW *win, wint_t *result) while ((c = wget_wch(win, result)) == CTRL('T')) { if (_nc_tracing) { save_trace = _nc_tracing; - _tracef("TOGGLE-TRACING OFF"); + Trace(("TOGGLE-TRACING OFF")); _nc_tracing = 0; } else { _nc_tracing = save_trace; } trace(_nc_tracing); if (_nc_tracing) - _tracef("TOGGLE-TRACING ON"); + Trace(("TOGGLE-TRACING ON")); } #else c = wget_wch(win, result); @@ -608,7 +610,7 @@ remember_boxes(unsigned level, WINDOW *txt_win, WINDOW *box_win) winstack[level].frame = box_win; } -#if USE_SOFTKEYS && (NCURSES_VERSION_PATCH < 20071229) +#if USE_SOFTKEYS && (NCURSES_VERSION_PATCH < 20071229) && NCURSES_EXT_FUNCS static void slk_repaint(void) { @@ -850,7 +852,7 @@ getch_test(void) * For wget_wch_test(), we create pairs of windows - one for a box, one for text. * Resize both and paint the box in the parent. */ -#ifdef KEY_RESIZE +#if defined(KEY_RESIZE) && HAVE_WRESIZE static void resize_wide_boxes(unsigned level, WINDOW *win) { @@ -1024,7 +1026,7 @@ wget_wch_test(unsigned level, WINDOW *win, int delay) } else #endif /* NCURSES_MOUSE_VERSION */ if (code == KEY_CODE_YES) { -#ifdef KEY_RESIZE +#if defined(KEY_RESIZE) && HAVE_WRESIZE if (c == KEY_RESIZE) { resize_wide_boxes(level, win); } @@ -1310,7 +1312,7 @@ show_attr(int row, int skip, bool arrow, chtype attr, const char *name) } /* *INDENT-OFF* */ static const struct { - attr_t attr; + chtype attr; NCURSES_CONST char * name; } attrs_to_test[] = { { A_STANDOUT, "STANDOUT" }, @@ -2525,6 +2527,7 @@ slk_test(void) #endif #if defined(NCURSES_VERSION) && defined(KEY_RESIZE) && HAVE_WRESIZE case KEY_RESIZE: + wnoutrefresh(stdscr); break; #endif @@ -2655,6 +2658,7 @@ wide_slk_test(void) break; #if defined(NCURSES_VERSION) && defined(KEY_RESIZE) && HAVE_WRESIZE case KEY_RESIZE: + wnoutrefresh(stdscr); break; #endif default: @@ -2675,12 +2679,89 @@ wide_slk_test(void) * Alternate character-set stuff * ****************************************************************************/ +/* *INDENT-OFF* */ +static struct { + chtype attr; + const char *name; +} attrs_to_cycle[] = { + { A_NORMAL, "normal" }, + { A_BOLD, "bold" }, + { A_REVERSE, "reverse" }, + { A_UNDERLINE, "underline" }, +}; +/* *INDENT-ON* */ + +static bool +cycle_attr(int ch, unsigned *at_code, chtype *attr) +{ + bool result = TRUE; + + switch (ch) { + case 'v': + if ((*at_code += 1) >= SIZEOF(attrs_to_cycle)) + *at_code = 0; + break; + case 'V': + if (*at_code == 1) + *at_code = SIZEOF(attrs_to_cycle) - 1; + else + *at_code -= 1; + break; + default: + result = FALSE; + break; + } + if (result) + *attr = attrs_to_cycle[*at_code].attr; + return result; +} + +static bool +cycle_colors(int ch, int *fg, int *bg, short *pair) +{ + bool result = FALSE; + + if (use_colors) { + result = TRUE; + switch (ch) { + case 'F': + if ((*fg -= 1) < 0) + *fg = COLORS - 1; + break; + case 'f': + if ((*fg += 1) >= COLORS) + *fg = 0; + break; + case 'B': + if ((*bg -= 1) < 0) + *bg = COLORS - 1; + break; + case 'b': + if ((*bg += 1) >= COLORS) + *bg = 0; + break; + default: + result = FALSE; + break; + } + if (result) { + *pair = (*fg != COLOR_BLACK || *bg != COLOR_BLACK); + if (*pair != 0) { + *pair = 1; + if (init_pair(*pair, *fg, *bg) == ERR) { + result = FALSE; + } + } + } + } + return result; +} /* ISO 6429: codes 0x80 to 0x9f may be control characters that cause the * terminal to perform functions. The remaining codes can be graphic. */ static void -show_upper_chars(unsigned first) +show_upper_chars(unsigned first, int repeat, attr_t attr, short pair) { bool C1 = (first == 128); unsigned code; @@ -2695,27 +2776,33 @@ show_upper_chars(unsigned first) refresh(); for (code = first; code <= last; code++) { + int count = repeat; int row = 2 + ((code - first) % 16); int col = ((code - first) / 16) * COLS / 2; char tmp[80]; sprintf(tmp, "%3u (0x%x)", code, code); mvprintw(row, col, "%*s: ", COLS / 4, tmp); - if (C1) - nodelay(stdscr, TRUE); - echochar(code); - if (C1) { - /* (yes, this _is_ crude) */ - while ((reply = Getchar()) != ERR) { - addch(UChar(reply)); - napms(10); + + do { + if (C1) + nodelay(stdscr, TRUE); + echochar(code | attr | COLOR_PAIR(pair)); + if (C1) { + /* (yes, this _is_ crude) */ + while ((reply = Getchar()) != ERR) { + addch(UChar(reply)); + napms(10); + } + nodelay(stdscr, FALSE); } - nodelay(stdscr, FALSE); - } + } while (--count > 0); } } +#define PC_COLS 4 + static void -show_pc_chars(void) +show_pc_chars(int repeat, attr_t attr, short pair) { unsigned code; @@ -2726,35 +2813,41 @@ show_pc_chars(void) refresh(); for (code = 0; code < 16; ++code) { - mvprintw(2, (int) code * 3 + 8, "%X", code); + mvprintw(2, (int) code * PC_COLS + 8, "%X", code); } for (code = 0; code < 256; code++) { + int count = repeat; int row = 3 + (code / 16) + (code >= 128); - int col = 8 + (code % 16) * 3; + int col = 8 + (code % 16) * PC_COLS; if ((code % 16) == 0) mvprintw(row, 0, "0x%02x:", code); move(row, col); - switch (code) { - case '\n': - case '\r': - case '\b': - case '\f': - case '\033': - case 0x9b: - /* - * Skip the ones that do not work. - */ - break; - default: - addch(code | A_ALTCHARSET); - break; - } + do { + switch (code) { + case '\n': + case '\r': + case '\b': + case '\f': + case '\033': + case 0x9b: + /* + * Skip the ones that do not work. + */ + break; + default: + addch(code | A_ALTCHARSET | attr | COLOR_PAIR(pair)); + break; + } + } while (--count > 0); } } static void -show_box_chars(void) +show_box_chars(int repeat, attr_t attr, short pair) { + (void) repeat; + attr |= COLOR_PAIR(pair); + erase(); attron(A_BOLD); mvaddstr(0, 20, "Display of the ACS Line-Drawing Set"); @@ -2762,35 +2855,38 @@ show_box_chars(void) refresh(); box(stdscr, 0, 0); /* *INDENT-OFF* */ - mvhline(LINES / 2, 0, ACS_HLINE, COLS); - mvvline(0, COLS / 2, ACS_VLINE, LINES); - mvaddch(0, COLS / 2, ACS_TTEE); - mvaddch(LINES / 2, COLS / 2, ACS_PLUS); - mvaddch(LINES - 1, COLS / 2, ACS_BTEE); - mvaddch(LINES / 2, 0, ACS_LTEE); - mvaddch(LINES / 2, COLS - 1, ACS_RTEE); + mvhline(LINES / 2, 0, ACS_HLINE | attr, COLS); + mvvline(0, COLS / 2, ACS_VLINE | attr, LINES); + mvaddch(0, COLS / 2, ACS_TTEE | attr); + mvaddch(LINES / 2, COLS / 2, ACS_PLUS | attr); + mvaddch(LINES - 1, COLS / 2, ACS_BTEE | attr); + mvaddch(LINES / 2, 0, ACS_LTEE | attr); + mvaddch(LINES / 2, COLS - 1, ACS_RTEE | attr); /* *INDENT-ON* */ } static int -show_1_acs(int n, const char *name, chtype code) +show_1_acs(int n, int repeat, const char *name, chtype code) { const int height = 16; int row = 2 + (n % height); int col = (n / height) * COLS / 2; + mvprintw(row, col, "%*s : ", COLS / 4, name); - addch(code); + do { + addch(code); + } while (--repeat > 0); return n + 1; } static void -show_acs_chars(void) +show_acs_chars(int repeat, attr_t attr, short pair) /* display the ACS character set */ { int n; -#define BOTH(name) #name, name +#define BOTH(name) #name, (name | attr | COLOR_PAIR(pair)) erase(); attron(A_BOLD); @@ -2798,48 +2894,48 @@ show_acs_chars(void) attroff(A_BOLD); refresh(); - n = show_1_acs(0, BOTH(ACS_ULCORNER)); - n = show_1_acs(n, BOTH(ACS_URCORNER)); - n = show_1_acs(n, BOTH(ACS_LLCORNER)); - n = show_1_acs(n, BOTH(ACS_LRCORNER)); + n = show_1_acs(0, repeat, BOTH(ACS_ULCORNER)); + n = show_1_acs(n, repeat, BOTH(ACS_URCORNER)); + n = show_1_acs(n, repeat, BOTH(ACS_LLCORNER)); + n = show_1_acs(n, repeat, BOTH(ACS_LRCORNER)); - n = show_1_acs(n, BOTH(ACS_LTEE)); - n = show_1_acs(n, BOTH(ACS_RTEE)); - n = show_1_acs(n, BOTH(ACS_TTEE)); - n = show_1_acs(n, BOTH(ACS_BTEE)); + n = show_1_acs(n, repeat, BOTH(ACS_LTEE)); + n = show_1_acs(n, repeat, BOTH(ACS_RTEE)); + n = show_1_acs(n, repeat, BOTH(ACS_TTEE)); + n = show_1_acs(n, repeat, BOTH(ACS_BTEE)); - n = show_1_acs(n, BOTH(ACS_HLINE)); - n = show_1_acs(n, BOTH(ACS_VLINE)); + n = show_1_acs(n, repeat, BOTH(ACS_HLINE)); + n = show_1_acs(n, repeat, BOTH(ACS_VLINE)); /* * HPUX's ACS definitions are broken here. Just give up. */ #if !(defined(__hpux) && !defined(NCURSES_VERSION)) - n = show_1_acs(n, BOTH(ACS_LARROW)); - n = show_1_acs(n, BOTH(ACS_RARROW)); - n = show_1_acs(n, BOTH(ACS_UARROW)); - n = show_1_acs(n, BOTH(ACS_DARROW)); - - n = show_1_acs(n, BOTH(ACS_BLOCK)); - n = show_1_acs(n, BOTH(ACS_BOARD)); - n = show_1_acs(n, BOTH(ACS_LANTERN)); - n = show_1_acs(n, BOTH(ACS_BULLET)); - n = show_1_acs(n, BOTH(ACS_CKBOARD)); - n = show_1_acs(n, BOTH(ACS_DEGREE)); - n = show_1_acs(n, BOTH(ACS_DIAMOND)); - n = show_1_acs(n, BOTH(ACS_PLMINUS)); - n = show_1_acs(n, BOTH(ACS_PLUS)); - - n = show_1_acs(n, BOTH(ACS_GEQUAL)); - n = show_1_acs(n, BOTH(ACS_NEQUAL)); - n = show_1_acs(n, BOTH(ACS_LEQUAL)); - - n = show_1_acs(n, BOTH(ACS_STERLING)); - n = show_1_acs(n, BOTH(ACS_PI)); - n = show_1_acs(n, BOTH(ACS_S1)); - n = show_1_acs(n, BOTH(ACS_S3)); - n = show_1_acs(n, BOTH(ACS_S7)); - n = show_1_acs(n, BOTH(ACS_S9)); + n = show_1_acs(n, repeat, BOTH(ACS_LARROW)); + n = show_1_acs(n, repeat, BOTH(ACS_RARROW)); + n = show_1_acs(n, repeat, BOTH(ACS_UARROW)); + n = show_1_acs(n, repeat, BOTH(ACS_DARROW)); + + n = show_1_acs(n, repeat, BOTH(ACS_BLOCK)); + n = show_1_acs(n, repeat, BOTH(ACS_BOARD)); + n = show_1_acs(n, repeat, BOTH(ACS_LANTERN)); + n = show_1_acs(n, repeat, BOTH(ACS_BULLET)); + n = show_1_acs(n, repeat, BOTH(ACS_CKBOARD)); + n = show_1_acs(n, repeat, BOTH(ACS_DEGREE)); + n = show_1_acs(n, repeat, BOTH(ACS_DIAMOND)); + n = show_1_acs(n, repeat, BOTH(ACS_PLMINUS)); + n = show_1_acs(n, repeat, BOTH(ACS_PLUS)); + + n = show_1_acs(n, repeat, BOTH(ACS_GEQUAL)); + n = show_1_acs(n, repeat, BOTH(ACS_NEQUAL)); + n = show_1_acs(n, repeat, BOTH(ACS_LEQUAL)); + + n = show_1_acs(n, repeat, BOTH(ACS_STERLING)); + n = show_1_acs(n, repeat, BOTH(ACS_PI)); + n = show_1_acs(n, repeat, BOTH(ACS_S1)); + n = show_1_acs(n, repeat, BOTH(ACS_S3)); + n = show_1_acs(n, repeat, BOTH(ACS_S7)); + n = show_1_acs(n, repeat, BOTH(ACS_S9)); #endif } @@ -2851,6 +2947,14 @@ acs_display(void) const char *pch_kludge = ((term != 0 && strstr(term, "linux")) ? "p=PC, " : ""); + chtype attr = A_NORMAL; + int digit = 0; + int repeat = 1; + int fg = COLOR_BLACK; + int bg = COLOR_BLACK; + unsigned at_code = 0; + short pair = 0; + void (*last_show_acs) (int, attr_t, short) = 0; do { switch (c) { @@ -2858,29 +2962,77 @@ acs_display(void) Repaint(); break; case 'a': - show_acs_chars(); + ToggleAcs(last_show_acs, show_acs_chars); + break; + case 'p': + if (*pch_kludge) + ToggleAcs(last_show_acs, show_pc_chars); + else + beep(); break; case 'x': - show_box_chars(); + ToggleAcs(last_show_acs, show_box_chars); break; case '0': case '1': case '2': case '3': - show_upper_chars((unsigned) ((c - '0') * 32 + 128)); + digit = (c - '0'); + last_show_acs = 0; break; - case 'p': - show_pc_chars(); + case '-': + if (digit > 0) { + --digit; + last_show_acs = 0; + } else { + beep(); + } + break; + case '+': + if (digit < 3) { + ++digit; + last_show_acs = 0; + } else { + beep(); + } + break; + case '>': + if (repeat < (COLS / 4)) + ++repeat; + break; + case '<': + if (repeat > 1) + --repeat; break; default: - beep(); + if (cycle_attr(c, &at_code, &attr) + || cycle_colors(c, &fg, &bg, &pair)) { + break; + } else { + beep(); + } break; } + if (last_show_acs != 0) + last_show_acs(repeat, attr, pair); + else + show_upper_chars(digit * 32 + 128, repeat, attr, pair); + mvprintw(LINES - 3, 0, "Note: ANSI terminals may not display C1 characters."); mvprintw(LINES - 2, 0, - "Select: a=ACS, x=box, %s0=C1, 1,2,3=GR characters, ESC=quit", + "Select: a=ACS, x=box, %s0=C1, 1-3,+/- non-ASCII, repeat, ESC=quit", pch_kludge); + if (use_colors) { + mvprintw(LINES - 1, 0, + "v/V, f/F, b/B cycle through video attributes (%s) and color %d/%d.", + attrs_to_cycle[at_code].name, + fg, bg); + } else { + mvprintw(LINES - 1, 0, + "v/V cycles through video attributes (%s).", + attrs_to_cycle[at_code].name); + } refresh(); } while (!isQuit(c = Getchar())); @@ -2891,7 +3043,7 @@ acs_display(void) #if USE_WIDEC_SUPPORT static cchar_t * -merge_wide_attr(cchar_t *dst, cchar_t *src, attr_t attr, short pair) +merge_wide_attr(cchar_t *dst, const cchar_t *src, attr_t attr, short pair) { int count = getcchar(src, NULL, NULL, NULL, 0); wchar_t *wch = 0; @@ -2900,7 +3052,7 @@ merge_wide_attr(cchar_t *dst, cchar_t *src, attr_t attr, short pair) *dst = *src; if (count > 0) { - if ((wch = typeMalloc(wchar_t, count)) != 0) { + if ((wch = typeMalloc(wchar_t, count + 1)) != 0) { if (getcchar(src, wch, &ignore_attr, &ignore_pair, 0) != ERR) { attr |= (ignore_attr & A_ALTCHARSET); setcchar(dst, wch, attr, pair, 0); @@ -2963,20 +3115,23 @@ show_upper_widechars(int first, int repeat, int space, attr_t attr, short pair) } static int -show_1_wacs(int n, const char *name, const cchar_t *code) +show_1_wacs(int n, int repeat, const char *name, const cchar_t *code) { const int height = 16; int row = 2 + (n % height); int col = (n / height) * COLS / 2; + mvprintw(row, col, "%*s : ", COLS / 4, name); - add_wchnstr(code, 1); + while (repeat-- >= 0) { + add_wch(code); + } return n + 1; } #define MERGE_ATTR(wch) merge_wide_attr(&temp, wch, attr, pair) static void -show_wacs_chars(attr_t attr, short pair) +show_wacs_chars(int repeat, attr_t attr, short pair) /* display the wide-ACS character set */ { cchar_t temp; @@ -2992,45 +3147,45 @@ show_wacs_chars(attr_t attr, short pair) attroff(A_BOLD); refresh(); - n = show_1_wacs(0, BOTH2(WACS_ULCORNER)); - n = show_1_wacs(n, BOTH2(WACS_URCORNER)); - n = show_1_wacs(n, BOTH2(WACS_LLCORNER)); - n = show_1_wacs(n, BOTH2(WACS_LRCORNER)); - - n = show_1_wacs(n, BOTH2(WACS_LTEE)); - n = show_1_wacs(n, BOTH2(WACS_RTEE)); - n = show_1_wacs(n, BOTH2(WACS_TTEE)); - n = show_1_wacs(n, BOTH2(WACS_BTEE)); - - n = show_1_wacs(n, BOTH2(WACS_HLINE)); - n = show_1_wacs(n, BOTH2(WACS_VLINE)); - - n = show_1_wacs(n, BOTH2(WACS_LARROW)); - n = show_1_wacs(n, BOTH2(WACS_RARROW)); - n = show_1_wacs(n, BOTH2(WACS_UARROW)); - n = show_1_wacs(n, BOTH2(WACS_DARROW)); - - n = show_1_wacs(n, BOTH2(WACS_BLOCK)); - n = show_1_wacs(n, BOTH2(WACS_BOARD)); - n = show_1_wacs(n, BOTH2(WACS_LANTERN)); - n = show_1_wacs(n, BOTH2(WACS_BULLET)); - n = show_1_wacs(n, BOTH2(WACS_CKBOARD)); - n = show_1_wacs(n, BOTH2(WACS_DEGREE)); - n = show_1_wacs(n, BOTH2(WACS_DIAMOND)); - n = show_1_wacs(n, BOTH2(WACS_PLMINUS)); - n = show_1_wacs(n, BOTH2(WACS_PLUS)); + n = show_1_wacs(0, repeat, BOTH2(WACS_ULCORNER)); + n = show_1_wacs(n, repeat, BOTH2(WACS_URCORNER)); + n = show_1_wacs(n, repeat, BOTH2(WACS_LLCORNER)); + n = show_1_wacs(n, repeat, BOTH2(WACS_LRCORNER)); + + n = show_1_wacs(n, repeat, BOTH2(WACS_LTEE)); + n = show_1_wacs(n, repeat, BOTH2(WACS_RTEE)); + n = show_1_wacs(n, repeat, BOTH2(WACS_TTEE)); + n = show_1_wacs(n, repeat, BOTH2(WACS_BTEE)); + + n = show_1_wacs(n, repeat, BOTH2(WACS_HLINE)); + n = show_1_wacs(n, repeat, BOTH2(WACS_VLINE)); + + n = show_1_wacs(n, repeat, BOTH2(WACS_LARROW)); + n = show_1_wacs(n, repeat, BOTH2(WACS_RARROW)); + n = show_1_wacs(n, repeat, BOTH2(WACS_UARROW)); + n = show_1_wacs(n, repeat, BOTH2(WACS_DARROW)); + + n = show_1_wacs(n, repeat, BOTH2(WACS_BLOCK)); + n = show_1_wacs(n, repeat, BOTH2(WACS_BOARD)); + n = show_1_wacs(n, repeat, BOTH2(WACS_LANTERN)); + n = show_1_wacs(n, repeat, BOTH2(WACS_BULLET)); + n = show_1_wacs(n, repeat, BOTH2(WACS_CKBOARD)); + n = show_1_wacs(n, repeat, BOTH2(WACS_DEGREE)); + n = show_1_wacs(n, repeat, BOTH2(WACS_DIAMOND)); + n = show_1_wacs(n, repeat, BOTH2(WACS_PLMINUS)); + n = show_1_wacs(n, repeat, BOTH2(WACS_PLUS)); #ifdef CURSES_WACS_ARRAY - n = show_1_wacs(n, BOTH2(WACS_GEQUAL)); - n = show_1_wacs(n, BOTH2(WACS_NEQUAL)); - n = show_1_wacs(n, BOTH2(WACS_LEQUAL)); - - n = show_1_wacs(n, BOTH2(WACS_STERLING)); - n = show_1_wacs(n, BOTH2(WACS_PI)); - n = show_1_wacs(n, BOTH2(WACS_S1)); - n = show_1_wacs(n, BOTH2(WACS_S3)); - n = show_1_wacs(n, BOTH2(WACS_S7)); - n = show_1_wacs(n, BOTH2(WACS_S9)); + n = show_1_wacs(n, repeat, BOTH2(WACS_GEQUAL)); + n = show_1_wacs(n, repeat, BOTH2(WACS_NEQUAL)); + n = show_1_wacs(n, repeat, BOTH2(WACS_LEQUAL)); + + n = show_1_wacs(n, repeat, BOTH2(WACS_STERLING)); + n = show_1_wacs(n, repeat, BOTH2(WACS_PI)); + n = show_1_wacs(n, repeat, BOTH2(WACS_S1)); + n = show_1_wacs(n, repeat, BOTH2(WACS_S3)); + n = show_1_wacs(n, repeat, BOTH2(WACS_S7)); + n = show_1_wacs(n, repeat, BOTH2(WACS_S9)); #endif } @@ -3039,10 +3194,11 @@ show_wacs_chars(attr_t attr, short pair) #define MERGE_ATTR(wch) merge_wide_attr(&temp, wch, attr, pair) static void -show_wbox_chars(attr_t attr, short pair) +show_wbox_chars(int repeat, attr_t attr, short pair) { cchar_t temp; + (void) repeat; erase(); attron(A_BOLD); mvaddstr(0, 20, "Display of the Wide-ACS Line-Drawing Set"); @@ -3084,10 +3240,11 @@ show_2_wacs(int n, const char *name, const char *code, attr_t attr, short pair) #define SHOW_UTF8(n, name, code) show_2_wacs(n, name, code, attr, pair) static void -show_utf8_chars(attr_t attr, short pair) +show_utf8_chars(int repeat, attr_t attr, short pair) { int n; + (void) repeat; erase(); attron(A_BOLD); mvaddstr(0, 20, "Display of the Wide-ACS Character Set"); @@ -3134,83 +3291,6 @@ show_utf8_chars(attr_t attr, short pair) /* *INDENT-ON* */ } -/* *INDENT-OFF* */ -static struct { - attr_t attr; - const char *name; -} attrs_to_cycle[] = { - { A_NORMAL, "normal" }, - { A_BOLD, "bold" }, - { A_REVERSE, "reverse" }, - { A_UNDERLINE, "underline" }, -}; -/* *INDENT-ON* */ - -static bool -cycle_attr(int ch, unsigned *at_code, chtype *attr) -{ - bool result = TRUE; - - switch (ch) { - case 'v': - if ((*at_code += 1) >= SIZEOF(attrs_to_cycle)) - *at_code = 0; - break; - case 'V': - if (*at_code == 1) - *at_code = SIZEOF(attrs_to_cycle) - 1; - else - *at_code -= 1; - break; - default: - result = FALSE; - break; - } - if (result) - *attr = attrs_to_cycle[*at_code].attr; - return result; -} - -static bool -cycle_colors(int ch, int *fg, int *bg, short *pair) -{ - bool result = FALSE; - - if (use_colors) { - result = TRUE; - switch (ch) { - case 'F': - if ((*fg -= 1) < 0) - *fg = COLORS - 1; - break; - case 'f': - if ((*fg += 1) >= COLORS) - *fg = 0; - break; - case 'B': - if ((*bg -= 1) < 0) - *bg = COLORS - 1; - break; - case 'b': - if ((*bg += 1) < 0) - *bg = 0; - break; - default: - result = FALSE; - break; - } - if (result) { - *pair = (*fg != COLOR_BLACK || *bg != COLOR_BLACK); - if (*pair != 0) { - *pair = 1; - if (init_pair(*pair, *fg, *bg) == ERR) { - result = FALSE; - } - } - } - } - return result; -} /* display the wide-ACS character set */ static void @@ -3218,14 +3298,14 @@ wide_acs_display(void) { int c = 'a'; int digit = 0; - int repeat = 0; + int repeat = 1; int space = ' '; chtype attr = A_NORMAL; int fg = COLOR_BLACK; int bg = COLOR_BLACK; unsigned at_code = 0; short pair = 0; - void (*last_show_wacs) (attr_t, short) = 0; + void (*last_show_wacs) (int, attr_t, short) = 0; do { switch (c) { @@ -3233,27 +3313,31 @@ wide_acs_display(void) Repaint(); break; case 'a': - last_show_wacs = show_wacs_chars; + ToggleAcs(last_show_wacs, show_wacs_chars); break; case 'x': - last_show_wacs = show_wbox_chars; + ToggleAcs(last_show_wacs, show_wbox_chars); break; case 'u': - last_show_wacs = show_utf8_chars; + ToggleAcs(last_show_wacs, show_utf8_chars); break; default: if (c < 256 && isdigit(c)) { digit = (c - '0'); + last_show_wacs = 0; } else if (c == '+') { ++digit; + last_show_wacs = 0; } else if (c == '-' && digit > 0) { --digit; + last_show_wacs = 0; } else if (c == '>' && repeat < (COLS / 4)) { ++repeat; - } else if (c == '<' && repeat > 0) { + } else if (c == '<' && repeat > 1) { --repeat; } else if (c == '_') { space = (space == ' ') ? '_' : ' '; + last_show_wacs = 0; } else if (cycle_attr(c, &at_code, &attr) || cycle_colors(c, &fg, &bg, &pair)) { if (last_show_wacs != 0) @@ -3262,12 +3346,12 @@ wide_acs_display(void) beep(); break; } - last_show_wacs = 0; - show_upper_widechars(digit * 32 + 128, repeat, space, attr, pair); break; } if (last_show_wacs != 0) - last_show_wacs(attr, pair); + last_show_wacs(repeat, attr, pair); + else + show_upper_widechars(digit * 32 + 128, repeat, space, attr, pair); mvprintw(LINES - 3, 0, "Select: a WACS, x box, u UTF-8, 0-9,+/- non-ASCII, repeat, ESC=quit"); @@ -3393,9 +3477,12 @@ FRAME }; #if defined(NCURSES_VERSION) -#if NCURSES_VERSION_PATCH < 20070331 +#if (NCURSES_VERSION_PATCH < 20070331) && NCURSES_EXT_FUNCS #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 @@ -3682,7 +3769,7 @@ static void acs_and_scroll(void) /* Demonstrate windows */ { - int c, i; + int c; FRAME *current = (FRAME *) 0, *neww; WINDOW *usescr = stdscr; #if HAVE_PUTWIN && HAVE_GETWIN @@ -3795,7 +3882,7 @@ acs_and_scroll(void) case CTRL('X'): /* resize window */ if (current) { pair *tmp, ul, lr; - int mx, my; + int i, mx, my; move(0, 0); clrtoeol(); @@ -4844,7 +4931,7 @@ menu_virtualize(int c) } } -static const char *animals[] = +static CONST_MENUS char *animals[] = { "Lions", "Tigers", @@ -4868,7 +4955,7 @@ menu_test(void) MENU *m; ITEM *items[SIZEOF(animals)]; ITEM **ip = items; - const char **ap; + CONST_MENUS char **ap; int mrows, mcols, c; WINDOW *menuwin; @@ -5074,7 +5161,7 @@ trace_set(void) if (item_value(*ip)) newtrace |= t_tbl[item_index(*ip)].mask; trace(newtrace); - _tracef("trace level interactively set to %s", tracetrace(_nc_tracing)); + Trace(("trace level interactively set to %s", tracetrace(_nc_tracing))); (void) mvprintw(LINES - 2, 0, "Trace level is %s\n", tracetrace(_nc_tracing)); @@ -5925,7 +6012,7 @@ do_single_test(const char c) break; #endif -#if USE_WIDEC_SUPPORT +#if USE_WIDEC_SUPPORT && USE_LIBPANEL case 'O': demo_panels(init_wide_panel, fill_wide_panel); break;