diff options
Diffstat (limited to 'contrib/ncurses/test')
-rw-r--r-- | contrib/ncurses/test/Makefile.in | 14 | ||||
-rw-r--r-- | contrib/ncurses/test/cardfile.c | 196 | ||||
-rwxr-xr-x | contrib/ncurses/test/configure | 60 | ||||
-rw-r--r-- | contrib/ncurses/test/configure.in | 22 | ||||
-rw-r--r-- | contrib/ncurses/test/dots.c | 6 | ||||
-rw-r--r-- | contrib/ncurses/test/filter.c | 4 | ||||
-rw-r--r-- | contrib/ncurses/test/firework.c | 4 | ||||
-rw-r--r-- | contrib/ncurses/test/gdc.c | 435 | ||||
-rw-r--r-- | contrib/ncurses/test/hanoi.c | 6 | ||||
-rw-r--r-- | contrib/ncurses/test/knight.c | 4 | ||||
-rw-r--r-- | contrib/ncurses/test/modules | 5 | ||||
-rw-r--r-- | contrib/ncurses/test/ncurses.c | 2584 | ||||
-rw-r--r-- | contrib/ncurses/test/railroad.c | 201 | ||||
-rw-r--r-- | contrib/ncurses/test/rain.c | 4 | ||||
-rw-r--r-- | contrib/ncurses/test/tclock.c | 2 | ||||
-rw-r--r-- | contrib/ncurses/test/test.priv.h | 5 | ||||
-rw-r--r-- | contrib/ncurses/test/testcurs.c | 683 | ||||
-rw-r--r-- | contrib/ncurses/test/view.c | 271 | ||||
-rw-r--r-- | contrib/ncurses/test/worm.c | 24 | ||||
-rw-r--r-- | contrib/ncurses/test/xmas.c | 4 |
20 files changed, 2620 insertions, 1914 deletions
diff --git a/contrib/ncurses/test/Makefile.in b/contrib/ncurses/test/Makefile.in index b0b9de038ce0..9f573ba0d0b6 100644 --- a/contrib/ncurses/test/Makefile.in +++ b/contrib/ncurses/test/Makefile.in @@ -1,6 +1,6 @@ -# $Id: Makefile.in,v 1.54 1999/10/23 20:01:19 tom Exp $ +# $Id: Makefile.in,v 1.58 2000/05/28 01:28:39 tom Exp $ ############################################################################## -# Copyright (c) 1998,1999 Free Software Foundation, Inc. # +# Copyright (c) 1998,1999,2000 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 "Software"), # @@ -46,6 +46,7 @@ libdir = @libdir@ includedir = @includedir@ CC = @CC@ +CPP = @CPP@ CFLAGS = @CFLAGS@ CPPFLAGS = -I../test -I$(srcdir) @CPPFLAGS@ -DHAVE_CONFIG_H @@ -98,6 +99,7 @@ TESTS = \ ncurses$x \ newdemo$x \ rain$x \ + railroad$x \ tclock$x \ testaddch$x \ testcurs$x \ @@ -161,6 +163,9 @@ newdemo$x: $(MODEL)/newdemo.o $(LOCAL_LIBS) rain$x: $(MODEL)/rain.o $(LOCAL_LIBS) @ECHO_LINK@ $(LINK) -o $@ $(MODEL)/rain.o $(LDFLAGS_DEFAULT) +railroad$x: $(MODEL)/railroad.o $(LOCAL_LIBS) + @ECHO_LINK@ $(LINK) -o $@ $(MODEL)/railroad.o $(LDFLAGS_DEFAULT) + tclock$x: $(MODEL)/tclock.o $(LOCAL_LIBS) @ECHO_LINK@ $(LINK) -o $@ $(MODEL)/tclock.o $(LDFLAGS_DEFAULT) $(MATH_LIB) @@ -182,8 +187,9 @@ worm$x: $(MODEL)/worm.o $(LOCAL_LIBS) xmas$x: $(MODEL)/xmas.o $(LOCAL_LIBS) @ECHO_LINK@ $(LINK) -o $@ $(MODEL)/xmas.o $(LDFLAGS_DEFAULT) -install: -install.libs: +libs \ +install \ +install.libs \ install.test: uninstall: diff --git a/contrib/ncurses/test/cardfile.c b/contrib/ncurses/test/cardfile.c index bc2e1adb14cc..980ffbeba94c 100644 --- a/contrib/ncurses/test/cardfile.c +++ b/contrib/ncurses/test/cardfile.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1999 Free Software Foundation, Inc. * + * Copyright (c) 1999,2000 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 * @@ -29,7 +29,7 @@ /* * Author: Thomas E. Dickey <dickey@clark.net> 1999 * - * $Id: cardfile.c,v 1.2 1999/06/16 00:41:57 tom Exp $ + * $Id: cardfile.c,v 1.4 2000/03/19 01:34:00 tom Exp $ * * File format: text beginning in column 1 is a title; other text forms the content. */ @@ -50,11 +50,11 @@ #endif typedef struct _card { - struct _card *link; - PANEL *panel; - FORM *form; - char *title; - char *content; + struct _card *link; + PANEL *panel; + FORM *form; + char *title; + char *content; } CARD; static CARD *all_cards; @@ -62,37 +62,40 @@ static char default_name[] = "cardfile.dat"; #if !HAVE_STRDUP #define strdup my_strdup -static char *strdup (char *s) +static char * +strdup(char *s) { - char *p = (char *)malloc(strlen(s)+1); + char *p = (char *) malloc(strlen(s) + 1); if (p) strcpy(p, s); - return(p); + return (p); } #endif /* not HAVE_STRDUP */ -static char *skip(char *buffer) +static char * +skip(char *buffer) { while (isspace(*buffer)) buffer++; return buffer; } -static void trim(char *buffer) +static void +trim(char *buffer) { unsigned n = strlen(buffer); while (n-- && isspace(buffer[n])) - buffer[n] = 0; + buffer[n] = 0; } /*******************************************************************************/ -static CARD *add_title(const char *title) +static CARD * +add_title(const char *title) { CARD *card, *p, *q; - for (p = all_cards, q = 0; p != 0; q = p, p = p->link) - { + for (p = all_cards, q = 0; p != 0; q = p, p = p->link) { int cmp = strcmp(p->title, title); if (cmp == 0) return p; @@ -100,46 +103,49 @@ static CARD *add_title(const char *title) break; } - card = (CARD *)calloc(1, sizeof(CARD)); + card = (CARD *) calloc(1, sizeof(CARD)); card->title = strdup(title); card->content = strdup(""); - if (q == 0) - { + if (q == 0) { card->link = all_cards; all_cards = card; - } - else - { - card->link = q->link; + } else { + card->link = q->link; q->link = card; } return card; } -static void add_content(CARD *card, char *content) +static void +add_content(CARD * card, char *content) { unsigned total, offset; content = skip(content); - if ((total = strlen(content)) != 0) - { - if ((offset = strlen(card->content)) != 0) - { + if ((total = strlen(content)) != 0) { + if ((offset = strlen(card->content)) != 0) { total += 1 + offset; - card->content = (char *)realloc(card->content, total + 1); + card->content = (char *) realloc(card->content, total + 1); strcpy(card->content + offset++, " "); - } - else - { - card->content = (char *)malloc(total + 1); + } else { + card->content = (char *) malloc(total + 1); } strcpy(card->content + offset, content); } } -static CARD *find_card(char *title) +static CARD * +new_card(void) +{ + CARD *card = add_title(""); + add_content(card, ""); + return card; +} + +static CARD * +find_card(char *title) { CARD *card; @@ -150,25 +156,21 @@ static CARD *find_card(char *title) return card; } -static void read_data(char *fname) +static void +read_data(char *fname) { FILE *fp; CARD *card = 0; char buffer[BUFSIZ]; - if ((fp = fopen(fname, "r")) != 0) - { - while (fgets(buffer, sizeof(buffer), fp)) - { + if ((fp = fopen(fname, "r")) != 0) { + while (fgets(buffer, sizeof(buffer), fp)) { trim(buffer); - if (isspace(*buffer)) - { + if (isspace(*buffer)) { if (card == 0) card = add_title(""); add_content(card, buffer); - } - else if ((card = find_card(buffer)) == 0) - { + } else if ((card = find_card(buffer)) == 0) { card = add_title(buffer); } } @@ -178,7 +180,8 @@ static void read_data(char *fname) /*******************************************************************************/ -static void write_data(const char *fname) +static void +write_data(const char *fname) { FILE *fp; CARD *p = 0; @@ -187,17 +190,13 @@ static void write_data(const char *fname) if (!strcmp(fname, default_name)) fname = "cardfile.out"; - if ((fp = fopen(fname, "w")) != 0) - { - for (p = all_cards; p != 0; p = p->link) - { + if ((fp = fopen(fname, "w")) != 0) { + for (p = all_cards; p != 0; p = p->link) { FIELD **f = form_fields(p->form); - for (n = 0; f[n] != 0; n++) - { + for (n = 0; f[n] != 0; n++) { char *s = field_buffer(f[n], 0); if (s != 0 - && (s = strdup(s)) != 0) - { + && (s = strdup(s)) != 0) { trim(s); fprintf(fp, "%s%s\n", n ? "\t" : "", s); free(s); @@ -213,7 +212,8 @@ static void write_data(const char *fname) /* * Count the cards */ -static int count_cards(void) +static int +count_cards(void) { CARD *p; int count = 0; @@ -227,12 +227,12 @@ static int count_cards(void) /* * Shuffle the panels to keep them in a natural hierarchy. */ -static void order_cards(CARD *first, int depth) +static void +order_cards(CARD * first, int depth) { - if (first) - { + if (first) { if (depth && first->link) - order_cards(first->link, depth-1); + order_cards(first->link, depth - 1); top_panel(first->panel); } } @@ -240,17 +240,19 @@ static void order_cards(CARD *first, int depth) /* * Return the next card in the list */ -static CARD *next_card(CARD *now) +static CARD * +next_card(CARD * now) { if (now->link) - now = now->link; + now = now->link; return now; } /* * Return the previous card in the list */ -static CARD *prev_card(CARD *now) +static CARD * +prev_card(CARD * now) { CARD *p; for (p = all_cards; p != 0; p = p->link) @@ -259,49 +261,49 @@ static CARD *prev_card(CARD *now) return now; } - /*******************************************************************************/ -static int form_virtualize(WINDOW *w) +static int +form_virtualize(WINDOW *w) { - int c = wgetch(w); + int c = wgetch(w); - switch(c) - { + switch (c) { case CTRL('W'): - return(MAX_FORM_COMMAND + 4); + return (MAX_FORM_COMMAND + 4); case CTRL('N'): - return(MAX_FORM_COMMAND + 3); + return (MAX_FORM_COMMAND + 3); case CTRL('P'): - return(MAX_FORM_COMMAND + 2); + return (MAX_FORM_COMMAND + 2); case CTRL('Q'): case 033: - return(MAX_FORM_COMMAND + 1); + return (MAX_FORM_COMMAND + 1); case KEY_BACKSPACE: - return(REQ_DEL_PREV); + return (REQ_DEL_PREV); case KEY_DC: - return(REQ_DEL_CHAR); + return (REQ_DEL_CHAR); case KEY_LEFT: - return(REQ_LEFT_CHAR); + return (REQ_LEFT_CHAR); case KEY_RIGHT: - return(REQ_RIGHT_CHAR); + return (REQ_RIGHT_CHAR); case KEY_DOWN: case KEY_NEXT: - return(REQ_NEXT_FIELD); + return (REQ_NEXT_FIELD); case KEY_UP: case KEY_PREVIOUS: - return(REQ_PREV_FIELD); + return (REQ_PREV_FIELD); default: - return(c); + return (c); } } /*******************************************************************************/ -static void cardfile(char *fname) +static void +cardfile(char *fname) { WINDOW *win; CARD *p; @@ -322,9 +324,8 @@ static void cardfile(char *fname) addstr("Arrow keys move left/right within a field, up/down between fields"); /* make a panel for each CARD */ - for (p = all_cards; p != 0; p = p->link) - { - FIELD **f = (FIELD **)calloc(3, sizeof(FIELD *)); + for (p = all_cards; p != 0; p = p->link) { + FIELD **f = (FIELD **) calloc(3, sizeof(FIELD *)); win = newwin(panel_high, panel_wide, x, y); keypad(win, TRUE); @@ -336,7 +337,7 @@ static void cardfile(char *fname) set_field_back(f[0], A_REVERSE); set_field_buffer(f[0], 0, p->title); - f[1] = new_field(form_high-1, form_wide, 1, 0, 0, 0); + f[1] = new_field(form_high - 1, form_wide, 1, 0, 0, 0); set_field_buffer(f[1], 0, p->content); set_field_just(f[1], JUSTIFY_LEFT); @@ -353,31 +354,28 @@ static void cardfile(char *fname) order_cards(top_card = all_cards, visible_cards); - update_panels(); - - while (!finished) - { + while (!finished) { update_panels(); doupdate(); - switch(form_driver(top_card->form, ch = form_virtualize(panel_window(top_card->panel)))) - { + switch (form_driver(top_card->form, ch = + form_virtualize(panel_window(top_card->panel)))) { case E_OK: break; case E_UNKNOWN_COMMAND: switch (ch) { - case MAX_FORM_COMMAND+1: + case MAX_FORM_COMMAND + 1: finished = TRUE; break; - case MAX_FORM_COMMAND+2: + case MAX_FORM_COMMAND + 2: top_card = prev_card(top_card); order_cards(top_card, visible_cards); break; - case MAX_FORM_COMMAND+3: + case MAX_FORM_COMMAND + 3: top_card = next_card(top_card); order_cards(top_card, visible_cards); break; - case MAX_FORM_COMMAND+4: + case MAX_FORM_COMMAND + 4: write_data(fname); break; default: @@ -394,7 +392,8 @@ static void cardfile(char *fname) /*******************************************************************************/ -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { int n; @@ -402,15 +401,16 @@ int main(int argc, char *argv[]) cbreak(); noecho(); - if (argc > 1) - { + if (argc > 1) { for (n = 1; n < argc; n++) read_data(argv[n]); + if (count_cards() == 0) + new_card(); cardfile(argv[1]); - } - else - { + } else { read_data(default_name); + if (count_cards() == 0) + new_card(); cardfile(default_name); } diff --git a/contrib/ncurses/test/configure b/contrib/ncurses/test/configure index 649dffe92c2b..2266114152d6 100755 --- a/contrib/ncurses/test/configure +++ b/contrib/ncurses/test/configure @@ -1458,21 +1458,22 @@ done for ac_func in \ -curses_version \ gettimeofday \ napms \ resizeterm \ strdup \ +use_default_colors \ vsscanf \ +wresize \ do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1471: checking for $ac_func" >&5 +echo "configure:1472: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1476 "configure" +#line 1477 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -1495,7 +1496,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:1499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1520,14 +1521,59 @@ fi done +echo $ac_n "checking for function curses_version""... $ac_c" 1>&6 +echo "configure:1526: checking for function curses_version" >&5 +if eval "test \"`echo '$''{'cf_cv_func_curses_version'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +if test "$cross_compiling" = yes; then + cf_cv_func_curses_version=unknown +else + cat > conftest.$ac_ext <<EOF +#line 1535 "configure" +#include "confdefs.h" + +#include <curses.h> +int main() +{ + char temp[1024]; + sprintf(temp, "%s\n", curses_version()); + exit(0); +} + +EOF +if { (eval echo configure:1547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + cf_cv_func_curses_version=yes + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + cf_cv_func_curses_version=no + +fi +rm -fr conftest* +fi + +rm -f core +fi + +echo "$ac_t""$cf_cv_func_curses_version" 1>&6 +test "$cf_cv_func_curses_version" = yes && cat >> confdefs.h <<\EOF +#define HAVE_CURSES_VERSION 1 +EOF + + echo $ac_n "checking if sys/time.h conflicts with sys/select.h""... $ac_c" 1>&6 -echo "configure:1525: checking if sys/time.h conflicts with sys/select.h" >&5 +echo "configure:1571: checking if sys/time.h conflicts with sys/select.h" >&5 if eval "test \"`echo '$''{'cf_cv_sys_time_select'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1531 "configure" +#line 1577 "configure" #include "confdefs.h" #if HAVE_SYS_TIME_H @@ -1541,7 +1587,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:1545: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1591: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* cf_cv_sys_time_select=yes else diff --git a/contrib/ncurses/test/configure.in b/contrib/ncurses/test/configure.in index d963022c0bfd..35e2b47cb9ae 100644 --- a/contrib/ncurses/test/configure.in +++ b/contrib/ncurses/test/configure.in @@ -28,7 +28,7 @@ dnl*************************************************************************** dnl dnl Author: Thomas E. Dickey <dickey@clark.net> 1996,1997,1998 dnl -dnl $Id: configure.in,v 1.27 1999/10/23 20:01:42 tom Exp $ +dnl $Id: configure.in,v 1.29 1999/12/19 03:12:13 tom Exp $ dnl This is a simple configuration-script for the ncurses test programs that dnl allows the test-directory to be separately configured against a reference dnl system (i.e., sysvr4 curses) @@ -129,14 +129,32 @@ unistd.h \ ) AC_CHECK_FUNCS( \ -curses_version \ gettimeofday \ napms \ resizeterm \ strdup \ +use_default_colors \ vsscanf \ +wresize \ ) +dnl Solaris has a data item 'curses_version', which confuses AC_CHECK_FUNCS. +dnl It's a character string "SVR4", not documented. +AC_CACHE_CHECK(for function curses_version, cf_cv_func_curses_version,[ +AC_TRY_RUN([ +#include <curses.h> +int main() +{ + char temp[1024]; + sprintf(temp, "%s\n", curses_version()); + exit(0); +}] +,[cf_cv_func_curses_version=yes] +,[cf_cv_func_curses_version=no] +,[cf_cv_func_curses_version=unknown]) +rm -f core]) +test "$cf_cv_func_curses_version" = yes && AC_DEFINE(HAVE_CURSES_VERSION) + dnl --------------------------------------------------------------------------- dnl [CF_SYS_TIME_SELECT] AC_MSG_CHECKING(if sys/time.h conflicts with sys/select.h) diff --git a/contrib/ncurses/test/dots.c b/contrib/ncurses/test/dots.c index 13ec66a57092..a5ddcaad5888 100644 --- a/contrib/ncurses/test/dots.c +++ b/contrib/ncurses/test/dots.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1999 Free Software Foundation, Inc. * + * Copyright (c) 1999,2000 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 * @@ -29,7 +29,7 @@ /* * Author: Thomas E. Dickey <dickey@clark.net> 1999 * - * $Id: dots.c,v 1.2 1999/10/23 13:24:32 tom Exp $ + * $Id: dots.c,v 1.4 2000/02/13 01:05:13 tom Exp $ * * A simple demo of the terminfo interface. */ @@ -125,7 +125,7 @@ main( tputs(tparm(cursor_address, y, x), 1, outc); if (max_colors > 0) { - z = ranf() * max_colors; + z = (int)(ranf() * max_colors); if (ranf() > 0.01) { tputs(tparm(set_a_foreground, z), 1, outc); } else { diff --git a/contrib/ncurses/test/filter.c b/contrib/ncurses/test/filter.c index 6057396a89c6..5d161cb64d6e 100644 --- a/contrib/ncurses/test/filter.c +++ b/contrib/ncurses/test/filter.c @@ -29,7 +29,7 @@ /* * Author: Thomas E. Dickey <dickey@clark.net> 1998 * - * $Id: filter.c,v 1.2 1998/05/10 00:39:27 tom Exp $ + * $Id: filter.c,v 1.3 1999/11/13 23:39:19 tom Exp $ */ #include <test.priv.h> @@ -81,7 +81,7 @@ int main( if (has_colors()) { int background = COLOR_BLACK; start_color(); -#ifdef NCURSES_VERSION +#ifdef HAVE_USE_DEFAULT_COLORS if (use_default_colors () != ERR) background = -1; #endif diff --git a/contrib/ncurses/test/firework.c b/contrib/ncurses/test/firework.c index 557a7bf231ec..ba5cbda2f7d4 100644 --- a/contrib/ncurses/test/firework.c +++ b/contrib/ncurses/test/firework.c @@ -1,5 +1,5 @@ /* - * $Id: firework.c,v 1.15 1999/10/16 21:33:39 tom Exp $ + * $Id: firework.c,v 1.16 1999/11/13 23:39:16 tom Exp $ */ #include <test.priv.h> @@ -133,7 +133,7 @@ main( if (has_colors()) { start_color(); -#ifdef NCURSES_VERSION +#ifdef HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) my_bg = -1; #endif diff --git a/contrib/ncurses/test/gdc.c b/contrib/ncurses/test/gdc.c index ecef2bb1e1d1..ea88d6c54754 100644 --- a/contrib/ncurses/test/gdc.c +++ b/contrib/ncurses/test/gdc.c @@ -6,7 +6,7 @@ * modified 10-18-89 for curses (jrl) * 10-18-89 added signal handling * - * $Id: gdc.c,v 1.10 1997/10/18 20:06:06 tom Exp $ + * $Id: gdc.c,v 1.14 2000/04/23 00:03:11 tom Exp $ */ #include <test.priv.h> @@ -20,216 +20,297 @@ #define XLENGTH 54 #define YDEPTH 5 -/* it won't be */ -static time_t now; /* yeah! */ -static struct tm *tm; - -static short disp[11] = { - 075557, 011111, 071747, 071717, 055711, - 074717, 074757, 071111, 075757, 075717, 002020 +static short disp[11] = +{ + 075557, 011111, 071747, 071717, 055711, + 074717, 074757, 071111, 075757, 075717, 002020 }; static long older[6], next[6], newer[6], mask; -static char scrol; static int sigtermed = 0; +static bool redirected = FALSE; +static bool hascolor = FALSE; -static int hascolor = 0; - -static void set(int, int); -static void standt(int); -static void movto(int, int); - -static -RETSIGTYPE sighndl(int signo) +static RETSIGTYPE +sighndl(int signo) { - signal(signo, sighndl); - sigtermed=signo; + signal(signo, sighndl); + sigtermed = signo; + if (redirected) { + endwin(); + exit(EXIT_FAILURE); + } } static void drawbox(void) { - chtype bottom[XLENGTH+1]; - int n; + chtype bottom[XLENGTH + 1]; + int n; - if(hascolor) - attrset(COLOR_PAIR(3)); + if (hascolor) + attrset(COLOR_PAIR(3)); - mvaddch(YBASE - 1, XBASE - 1, ACS_ULCORNER); - hline(ACS_HLINE, XLENGTH); - mvaddch(YBASE - 1, XBASE + XLENGTH, ACS_URCORNER); + mvaddch(YBASE - 1, XBASE - 1, ACS_ULCORNER); + hline(ACS_HLINE, XLENGTH); + mvaddch(YBASE - 1, XBASE + XLENGTH, ACS_URCORNER); - mvaddch(YBASE + YDEPTH, XBASE - 1, ACS_LLCORNER); - mvinchnstr(YBASE + YDEPTH, XBASE, bottom, XLENGTH); - for (n = 0; n < XLENGTH; n++) - bottom[n] = ACS_HLINE | (bottom[n] & (A_ATTRIBUTES | A_COLOR)); - mvaddchnstr(YBASE + YDEPTH, XBASE, bottom, XLENGTH); - mvaddch(YBASE + YDEPTH, XBASE + XLENGTH, ACS_LRCORNER); + mvaddch(YBASE + YDEPTH, XBASE - 1, ACS_LLCORNER); + mvinchnstr(YBASE + YDEPTH, XBASE, bottom, XLENGTH); + for (n = 0; n < XLENGTH; n++) + bottom[n] = ACS_HLINE | (bottom[n] & (A_ATTRIBUTES | A_COLOR)); + mvaddchnstr(YBASE + YDEPTH, XBASE, bottom, XLENGTH); + mvaddch(YBASE + YDEPTH, XBASE + XLENGTH, ACS_LRCORNER); - move(YBASE, XBASE - 1); - vline(ACS_VLINE, YDEPTH); + move(YBASE, XBASE - 1); + vline(ACS_VLINE, YDEPTH); - move(YBASE, XBASE + XLENGTH); - vline(ACS_VLINE, YDEPTH); + move(YBASE, XBASE + XLENGTH); + vline(ACS_VLINE, YDEPTH); - if(hascolor) - attrset(COLOR_PAIR(2)); + if (hascolor) + attrset(COLOR_PAIR(2)); } -int -main(int argc, char *argv[]) +static void +standt(int on) { -long t, a; -int i, j, s, k; -int n = 0; - - signal(SIGINT,sighndl); - signal(SIGTERM,sighndl); - signal(SIGKILL,sighndl); - - initscr(); - cbreak(); - noecho(); - nodelay(stdscr, 1); - curs_set(0); - - hascolor = has_colors(); - - if(hascolor) { - int bg = COLOR_BLACK; - start_color(); -#ifdef NCURSES_VERSION - if (use_default_colors() == OK) - bg = -1; -#endif - init_pair(1, COLOR_BLACK, COLOR_RED); - init_pair(2, COLOR_RED, bg); - init_pair(3, COLOR_WHITE, bg); - attrset(COLOR_PAIR(2)); + if (on) { + if (hascolor) { + attron(COLOR_PAIR(1)); + } else { + attron(A_STANDOUT); } - - clear(); - refresh(); - while(--argc > 0) { - if(**++argv == '-') - scrol = 1; - else - n = atoi(*argv); + } else { + if (hascolor) { + attron(COLOR_PAIR(2)); + } else { + attroff(A_STANDOUT); } - - drawbox(); - do { - char buf[30]; - - mask = 0; - time(&now); - tm = localtime(&now); - set(tm->tm_sec%10, 0); - set(tm->tm_sec/10, 4); - set(tm->tm_min%10, 10); - set(tm->tm_min/10, 14); - set(tm->tm_hour%10, 20); - set(tm->tm_hour/10, 24); - set(10, 7); - set(10, 17); - for(k=0; k<6; k++) { - if(scrol) { - for(i=0; i<5; i++) - newer[i] = (newer[i]&~mask) | (newer[i+1]&mask); - newer[5] = (newer[5]&~mask) | (next[k]&mask); - } else - newer[k] = (newer[k]&~mask) | (next[k]&mask); - next[k] = 0; - for(s=1; s>=0; s--) { - standt(s); - for(i=0; i<6; i++) { - if((a = (newer[i]^older[i])&(s ? newer : older)[i]) != 0) { - for(j=0,t=1<<26; t; t>>=1,j++) { - if(a&t) { - if(!(a&(t<<1))) { - movto(YBASE + i, XBASE + 2*j); - } - addstr(" "); - } - } - } - if(!s) { - older[i] = newer[i]; - } - } - if(!s) { - if (scrol) - drawbox(); - refresh(); - if (scrol) - napms(150); - } - } - } - - /* this depends on the detailed format of ctime(3) */ - (void) strcpy(buf, ctime(&now)); - (void) strcpy(buf + 10, buf + 19); - mvaddstr(16, 30, buf); - - movto(6, 0); - drawbox(); - refresh(); - sleep(1); - while(wgetch(stdscr) != ERR) - continue; - if (sigtermed) { - standend(); - clear(); - refresh(); - curs_set(1); - endwin(); - fprintf(stderr, "gdc terminated by signal %d\n", sigtermed); - return EXIT_FAILURE; - } - } while(--n); - standend(); - clear(); - refresh(); - curs_set(1); - endwin(); - return EXIT_SUCCESS; + } } static void set(int t, int n) { -int i, m; + int i, m; - m = 7<<n; - for(i=0; i<5; i++) { - next[i] |= ((disp[t]>>(4-i)*3)&07)<<n; - mask |= (next[i]^older[i])&m; - } - if(mask&m) - mask |= m; + m = 7 << n; + for (i = 0; i < 5; i++) { + next[i] |= ((disp[t] >> (4 - i) * 3) & 07) << n; + mask |= (next[i] ^ older[i]) & m; + } + if (mask & m) + mask |= m; } static void -standt(int on) +usage(void) { - if (on) { - if(hascolor) { - attron(COLOR_PAIR(1)); - } else { - attron(A_STANDOUT); + static const char *msg[] = + { + "Usage: gdc [options] [count]" + ,"" + ,"Options:" + ," -n redirect input to /dev/null" + ," -s scroll each number into place, rather than flipping" + ,"" + ,"If you specify a count, gdc runs for that number of seconds" + }; + unsigned j; + for (j = 0; j < SIZEOF(msg); j++) + fprintf(stderr, "%s\n", msg[j]); + exit(EXIT_FAILURE); +} + +int +main(int argc, char *argv[]) +{ + time_t now; + struct tm *tm; + long t, a; + int i, j, s, k; + int count = 0; + FILE *ofp = stdout; + FILE *ifp = stdin; + bool scrol = FALSE; + + signal(SIGINT, sighndl); + signal(SIGTERM, sighndl); + signal(SIGKILL, sighndl); + + while ((k = getopt(argc, argv, "sn")) != EOF) { + switch (k) { + case 's': + scrol = TRUE; + break; + case 'n': + ifp = fopen("/dev/null", "r"); + redirected = TRUE; + break; + default: + usage(); + } + } + if (optind < argc) { + count = atoi(argv[optind++]); + } + if (optind < argc) + usage(); + + if (redirected) { + char *name = getenv("TERM"); + if (name == 0 + || newterm(name, ofp, ifp) == 0) { + fprintf(stderr, "cannot open terminal\n"); + exit(EXIT_FAILURE); + } + + } else { + initscr(); + } + cbreak(); + noecho(); + nodelay(stdscr, 1); + curs_set(0); + + hascolor = has_colors(); + + if (hascolor) { + int bg = COLOR_BLACK; + start_color(); +#ifdef HAVE_USE_DEFAULT_COLORS + if (use_default_colors() == OK) + bg = -1; +#endif + init_pair(1, COLOR_BLACK, COLOR_RED); + init_pair(2, COLOR_RED, bg); + init_pair(3, COLOR_WHITE, bg); + attrset(COLOR_PAIR(2)); + } + + restart: + for (j = 0; j < 5; j++) + older[j] = newer[j] = next[j] = 0; + + clear(); + drawbox(); + + do { + char buf[30]; + + time(&now); + tm = localtime(&now); + + mask = 0; + set(tm->tm_sec % 10, 0); + set(tm->tm_sec / 10, 4); + set(tm->tm_min % 10, 10); + set(tm->tm_min / 10, 14); + set(tm->tm_hour % 10, 20); + set(tm->tm_hour / 10, 24); + set(10, 7); + set(10, 17); + + for (k = 0; k < 6; k++) { + if (scrol) { + for (i = 0; i < 5; i++) + newer[i] = (newer[i] & ~mask) | (newer[i + 1] & mask); + newer[5] = (newer[5] & ~mask) | (next[k] & mask); + } else + newer[k] = (newer[k] & ~mask) | (next[k] & mask); + next[k] = 0; + for (s = 1; s >= 0; s--) { + standt(s); + for (i = 0; i < 6; i++) { + if ((a = (newer[i] ^ older[i]) & (s ? newer : older)[i]) + != 0) { + for (j = 0, t = 1 << 26; t; t >>= 1, j++) { + if (a & t) { + if (!(a & (t << 1))) { + move(YBASE + i, XBASE + 2 * j); + } + addstr(" "); + } + } + } + if (!s) { + older[i] = newer[i]; + } } - } else { - if(hascolor) { - attron(COLOR_PAIR(2)); - } else { - attroff(A_STANDOUT); + if (!s) { + if (scrol) + drawbox(); + refresh(); + /* + * If we're scrolling, space out the refreshes to fake + * movement. That's 7 frames, or 6 intervals, which would + * be 166 msec if we spread it out over a second. It looks + * better (but will well on a slow terminal, e.g., less + * than 9600bd) to squeeze that into a half-second, and use + * half of 170 msec to ensure that the program doesn't eat + * a lot of time when asking what time it is, at the top of + * this loop -TD + */ + if (scrol) + napms(85); } + } } -} -static void -movto(int line, int col) -{ - move(line, col); + /* this depends on the detailed format of ctime(3) */ + (void) strcpy(buf, ctime(&now)); + (void) strcpy(buf + 10, buf + 19); + mvaddstr(16, 30, buf); + + move(6, 0); + drawbox(); + refresh(); + + /* + * If we're not scrolling, wait 1000 msec (1 sec). Use napms() rather + * than sleep() because the latter does odd things on some systems, + * e.g., suspending output as well. + */ + if (scrol) + napms(500); + else + napms(1000); + + /* + * This is a safe way to check if we're interrupted - making the signal + * handler set a flag that we can check. Since we're running + * nodelay(), the wgetch() call returns immediately, and in particular + * will return an error if interrupted. This works only if we can + * read from the input, of course. + */ + switch (wgetch(stdscr)) { + case 'q': + count = 1; + break; + case 's': + nodelay(stdscr, FALSE); + break; + case ' ': + nodelay(stdscr, TRUE); + break; +#ifdef KEY_RESIZE + case KEY_RESIZE: +#endif + case '?': + goto restart; + case ERR: + if (sigtermed) { + standend(); + endwin(); + fprintf(stderr, "gdc terminated by signal %d\n", sigtermed); + return EXIT_FAILURE; + } + default: + continue; + } + } while (--count); + standend(); + endwin(); + return EXIT_SUCCESS; } diff --git a/contrib/ncurses/test/hanoi.c b/contrib/ncurses/test/hanoi.c index 3ee64b0a0d14..23a864624b01 100644 --- a/contrib/ncurses/test/hanoi.c +++ b/contrib/ncurses/test/hanoi.c @@ -14,7 +14,7 @@ * * Date: 05.Nov.90 * - * $Id: hanoi.c,v 1.16 1999/10/23 15:01:01 tom Exp $ + * $Id: hanoi.c,v 1.18 2000/04/01 20:01:08 tom Exp $ */ #include <test.priv.h> @@ -97,7 +97,7 @@ unsigned char AutoFlag = 0; Usage(); return EXIT_FAILURE; } -#ifdef NCURSES_VERSION +#ifdef TRACE trace(TRACE_MAXIMUM); #endif initscr(); @@ -105,7 +105,7 @@ unsigned char AutoFlag = 0; int i; int bg = COLOR_BLACK; start_color(); -#ifdef NCURSES_VERSION +#ifdef HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) bg = -1; #endif diff --git a/contrib/ncurses/test/knight.c b/contrib/ncurses/test/knight.c index fe3101198776..ad923b42b1de 100644 --- a/contrib/ncurses/test/knight.c +++ b/contrib/ncurses/test/knight.c @@ -6,7 +6,7 @@ * Eric S. Raymond <esr@snark.thyrsus.com> July 22 1995. Mouse support * added September 20th 1995. * - * $Id: knight.c,v 1.14 1997/08/20 16:22:38 hjl Exp $ + * $Id: knight.c,v 1.15 1999/11/13 23:39:10 tom Exp $ */ #include <test.priv.h> @@ -98,7 +98,7 @@ static void init (void) int bg = COLOR_BLACK; start_color(); -#ifdef NCURSES_VERSION +#ifdef HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) bg = -1; #endif diff --git a/contrib/ncurses/test/modules b/contrib/ncurses/test/modules index 3c69bbd45752..583f8c76cc8b 100644 --- a/contrib/ncurses/test/modules +++ b/contrib/ncurses/test/modules @@ -1,7 +1,7 @@ # Test-Program modules -# $Id: modules,v 1.11 1999/10/23 00:41:02 tom Exp $ +# $Id: modules,v 1.13 2000/02/13 01:05:13 tom Exp $ ############################################################################## -# Copyright (c) 1999 Free Software Foundation, Inc. # +# Copyright (c) 1998,1999,2000 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 "Software"), # @@ -49,6 +49,7 @@ lrtest progs $(srcdir) ncurses progs $(srcdir) ../include/panel.h ../include/menu.h ../include/form.h newdemo progs $(srcdir) rain progs $(srcdir) ../include/term.h +railroad progs $(srcdir) ../include/termcap.h tclock progs $(srcdir) testaddch progs $(srcdir) testcurs progs $(srcdir) diff --git a/contrib/ncurses/test/ncurses.c b/contrib/ncurses/test/ncurses.c index aa24a4261809..074ca7065597 100644 --- a/contrib/ncurses/test/ncurses.c +++ b/contrib/ncurses/test/ncurses.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998,1999 Free Software Foundation, Inc. * + * Copyright (c) 1998,1999,2000 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 * @@ -39,7 +39,7 @@ DESCRIPTION AUTHOR Author: Eric S. Raymond <esr@snark.thyrsus.com> 1993 -$Id: ncurses.c,v 1.120 1999/10/23 20:01:30 tom Exp $ +$Id: ncurses.c,v 1.129 2000/06/17 20:02:22 tom Exp $ ***************************************************************************/ @@ -88,7 +88,7 @@ $Id: ncurses.c,v 1.120 1999/10/23 20:01:30 tom Exp $ #ifdef NCURSES_VERSION #ifdef TRACE -static int save_trace = TRACE_ORDINARY|TRACE_CALLS; +static int save_trace = TRACE_ORDINARY | TRACE_CALLS; extern int _nc_tracing; #endif @@ -100,13 +100,13 @@ extern int _nc_tracing; #define mmask_t chtype /* not specified in XSI */ #define attr_t chtype /* not specified in XSI */ -#define ACS_S3 (acs_map['p']) /* scan line 3 */ -#define ACS_S7 (acs_map['r']) /* scan line 7 */ -#define ACS_LEQUAL (acs_map['y']) /* less/equal */ -#define ACS_GEQUAL (acs_map['z']) /* greater/equal */ -#define ACS_PI (acs_map['{']) /* Pi */ -#define ACS_NEQUAL (acs_map['|']) /* not equal */ -#define ACS_STERLING (acs_map['}']) /* UK pound sign */ +#define ACS_S3 (acs_map['p']) /* scan line 3 */ +#define ACS_S7 (acs_map['r']) /* scan line 7 */ +#define ACS_LEQUAL (acs_map['y']) /* less/equal */ +#define ACS_GEQUAL (acs_map['z']) /* greater/equal */ +#define ACS_PI (acs_map['{']) /* Pi */ +#define ACS_NEQUAL (acs_map['|']) /* not equal */ +#define ACS_STERLING (acs_map['}']) /* UK pound sign */ #endif @@ -117,118 +117,125 @@ extern int _nc_tracing; #define QUIT CTRL('Q') #define ESCAPE CTRL('[') -#define BLANK ' ' /* this is the background character */ +#define BLANK ' ' /* this is the background character */ /* The behavior of mvhline, mvvline for negative/zero length is unspecified, * though we can rely on negative x/y values to stop the macro. */ -static void do_h_line(int y, int x, chtype c, int to) +static void +do_h_line(int y, int x, chtype c, int to) { - if ((to) > (x)) - mvhline(y, x, c, (to) - (x)); + if ((to) > (x)) + mvhline(y, x, c, (to) - (x)); } -static void do_v_line(int y, int x, chtype c, int to) +static void +do_v_line(int y, int x, chtype c, int to) { - if ((to) > (y)) - mvvline(y, x, c, (to) - (y)); + if ((to) > (y)) + mvvline(y, x, c, (to) - (y)); } /* Common function to allow ^T to toggle trace-mode in the middle of a test * so that trace-files can be made smaller. */ -static int wGetchar(WINDOW *win) +static int +wGetchar(WINDOW *win) { - int c; + int c; #ifdef TRACE - while ((c = wgetch(win)) == CTRL('T')) { - if (_nc_tracing) { - save_trace = _nc_tracing; - _tracef("TOGGLE-TRACING OFF"); - _nc_tracing = 0; - } else { - _nc_tracing = save_trace; - } - trace(_nc_tracing); - if (_nc_tracing) - _tracef("TOGGLE-TRACING ON"); + while ((c = wgetch(win)) == CTRL('T')) { + if (_nc_tracing) { + save_trace = _nc_tracing; + _tracef("TOGGLE-TRACING OFF"); + _nc_tracing = 0; + } else { + _nc_tracing = save_trace; } + trace(_nc_tracing); + if (_nc_tracing) + _tracef("TOGGLE-TRACING ON"); + } #else - c = wgetch(win); + c = wgetch(win); #endif - return c; + return c; } #define Getchar() wGetchar(stdscr) -static void Pause(void) +static void +Pause(void) { - move(LINES - 1, 0); - addstr("Press any key to continue... "); - (void) Getchar(); + move(LINES - 1, 0); + addstr("Press any key to continue... "); + (void) Getchar(); } -static void Cannot(const char *what) +static void +Cannot(const char *what) { - printw("\nThis %s terminal %s\n\n", getenv("TERM"), what); - Pause(); + printw("\nThis %s terminal %s\n\n", getenv("TERM"), what); + Pause(); } -static void ShellOut(bool message) +static void +ShellOut(bool message) { - if (message) - addstr("Shelling out..."); - def_prog_mode(); - endwin(); - system("sh"); - if (message) - addstr("returned from shellout.\n"); - refresh(); + if (message) + addstr("Shelling out..."); + def_prog_mode(); + endwin(); + system("sh"); + if (message) + addstr("returned from shellout.\n"); + refresh(); } #ifdef NCURSES_MOUSE_VERSION -static const char *mouse_decode(MEVENT const *ep) +static const char * +mouse_decode(MEVENT const *ep) { - static char buf[80]; + static char buf[80]; - (void) sprintf(buf, "id %2d at (%2d, %2d, %2d) state %4lx = {", - ep->id, ep->x, ep->y, ep->z, ep->bstate); + (void) sprintf(buf, "id %2d at (%2d, %2d, %2d) state %4lx = {", + ep->id, ep->x, ep->y, ep->z, ep->bstate); #define SHOW(m, s) if ((ep->bstate & m)==m) {strcat(buf,s); strcat(buf, ", ");} - SHOW(BUTTON1_RELEASED, "release-1") - SHOW(BUTTON1_PRESSED, "press-1") - SHOW(BUTTON1_CLICKED, "click-1") - SHOW(BUTTON1_DOUBLE_CLICKED, "doubleclick-1") - SHOW(BUTTON1_TRIPLE_CLICKED, "tripleclick-1") - SHOW(BUTTON1_RESERVED_EVENT, "reserved-1") - SHOW(BUTTON2_RELEASED, "release-2") - SHOW(BUTTON2_PRESSED, "press-2") - SHOW(BUTTON2_CLICKED, "click-2") - SHOW(BUTTON2_DOUBLE_CLICKED, "doubleclick-2") - SHOW(BUTTON2_TRIPLE_CLICKED, "tripleclick-2") - SHOW(BUTTON2_RESERVED_EVENT, "reserved-2") - SHOW(BUTTON3_RELEASED, "release-3") - SHOW(BUTTON3_PRESSED, "press-3") - SHOW(BUTTON3_CLICKED, "click-3") - SHOW(BUTTON3_DOUBLE_CLICKED, "doubleclick-3") - SHOW(BUTTON3_TRIPLE_CLICKED, "tripleclick-3") - SHOW(BUTTON3_RESERVED_EVENT, "reserved-3") - SHOW(BUTTON4_RELEASED, "release-4") - SHOW(BUTTON4_PRESSED, "press-4") - SHOW(BUTTON4_CLICKED, "click-4") - SHOW(BUTTON4_DOUBLE_CLICKED, "doubleclick-4") - SHOW(BUTTON4_TRIPLE_CLICKED, "tripleclick-4") - SHOW(BUTTON4_RESERVED_EVENT, "reserved-4") - SHOW(BUTTON_CTRL, "ctrl") - SHOW(BUTTON_SHIFT, "shift") - SHOW(BUTTON_ALT, "alt") - SHOW(ALL_MOUSE_EVENTS, "all-events") - SHOW(REPORT_MOUSE_POSITION, "position") + SHOW(BUTTON1_RELEASED, "release-1"); + SHOW(BUTTON1_PRESSED, "press-1"); + SHOW(BUTTON1_CLICKED, "click-1"); + SHOW(BUTTON1_DOUBLE_CLICKED, "doubleclick-1"); + SHOW(BUTTON1_TRIPLE_CLICKED, "tripleclick-1"); + SHOW(BUTTON1_RESERVED_EVENT, "reserved-1"); + SHOW(BUTTON2_RELEASED, "release-2"); + SHOW(BUTTON2_PRESSED, "press-2"); + SHOW(BUTTON2_CLICKED, "click-2"); + SHOW(BUTTON2_DOUBLE_CLICKED, "doubleclick-2"); + SHOW(BUTTON2_TRIPLE_CLICKED, "tripleclick-2"); + SHOW(BUTTON2_RESERVED_EVENT, "reserved-2"); + SHOW(BUTTON3_RELEASED, "release-3"); + SHOW(BUTTON3_PRESSED, "press-3"); + SHOW(BUTTON3_CLICKED, "click-3"); + SHOW(BUTTON3_DOUBLE_CLICKED, "doubleclick-3"); + SHOW(BUTTON3_TRIPLE_CLICKED, "tripleclick-3"); + SHOW(BUTTON3_RESERVED_EVENT, "reserved-3"); + SHOW(BUTTON4_RELEASED, "release-4"); + SHOW(BUTTON4_PRESSED, "press-4"); + SHOW(BUTTON4_CLICKED, "click-4"); + SHOW(BUTTON4_DOUBLE_CLICKED, "doubleclick-4"); + SHOW(BUTTON4_TRIPLE_CLICKED, "tripleclick-4"); + SHOW(BUTTON4_RESERVED_EVENT, "reserved-4"); + SHOW(BUTTON_CTRL, "ctrl"); + SHOW(BUTTON_SHIFT, "shift"); + SHOW(BUTTON_ALT, "alt"); + SHOW(ALL_MOUSE_EVENTS, "all-events"); + SHOW(REPORT_MOUSE_POSITION, "position"); #undef SHOW - if (buf[strlen(buf)-1] == ' ') - buf[strlen(buf)-2] = '\0'; - (void) strcat(buf, "}"); - return(buf); + if (buf[strlen(buf) - 1] == ' ') + buf[strlen(buf) - 2] = '\0'; + (void) strcat(buf, "}"); + return (buf); } #endif /* NCURSES_MOUSE_VERSION */ @@ -238,19 +245,20 @@ static const char *mouse_decode(MEVENT const *ep) * ****************************************************************************/ -static void getch_test(void) +static void +getch_test(void) /* test the keypad feature */ { -char buf[BUFSIZ]; -int c; -int incount = 0, firsttime = 0; -bool blocking = TRUE; -int y, x; + char buf[BUFSIZ]; + int c; + int incount = 0, firsttime = 0; + bool blocking = TRUE; + int y, x; refresh(); #ifdef NCURSES_MOUSE_VERSION - mousemask(ALL_MOUSE_EVENTS, (mmask_t *)0); + mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0); #endif (void) printw("Delay in 10ths of a second (<CR> for blocking input)? "); @@ -259,70 +267,59 @@ int y, x; noecho(); nonl(); - if (isdigit(buf[0])) - { + if (isdigit(buf[0])) { timeout(atoi(buf) * 100); blocking = FALSE; } c = '?'; raw(); - for (;;) - { - if (firsttime++) - { + for (;;) { + if (firsttime++) { printw("Key pressed: %04o ", c); #ifdef NCURSES_MOUSE_VERSION - if (c == KEY_MOUSE) - { - MEVENT event; + if (c == KEY_MOUSE) { + MEVENT event; getmouse(&event); printw("KEY_MOUSE, %s\n", mouse_decode(&event)); - } - else -#endif /* NCURSES_MOUSE_VERSION */ - if (c >= KEY_MIN) - { + } else +#endif /* NCURSES_MOUSE_VERSION */ + if (c >= KEY_MIN) { (void) addstr(keyname(c)); addch('\n'); - } - else if (c > 0x80) - { + } else if (c > 0x80) { int c2 = (c & 0x7f); if (isprint(c2)) (void) printw("M-%c", c2); else (void) printw("M-%s", unctrl(c2)); addstr(" (high-half character)\n"); - } - else - { + } else { if (isprint(c)) (void) printw("%c (ASCII printable character)\n", c); else (void) printw("%s (ASCII control character)\n", unctrl(c)); } getyx(stdscr, y, x); - if (y >= LINES-1) - move(0,0); + if (y >= LINES - 1) + move(0, 0); clrtoeol(); } - if (c == 'g') - { + if (c == 'g') { addstr("getstr test: "); - echo(); getstr(buf); noecho(); + echo(); + getstr(buf); + noecho(); printw("I saw `%s'.\n", buf); } - if (c == 's') - { + if (c == 's') { ShellOut(TRUE); } if (c == 'x' || c == 'q' || (c == ERR && blocking)) break; - if (c == '?') - { + if (c == '?') { addstr("Type any key to see its keypad value. Also:\n"); addstr("g -- triggers a getstr test\n"); addstr("s -- shell out\n"); @@ -335,12 +332,12 @@ int y, x; (void) printw("%05d: input timed out\n", incount++); else { (void) printw("%05d: input error\n", incount++); - break; + break; } } #ifdef NCURSES_MOUSE_VERSION - mousemask(0, (mmask_t *)0); + mousemask(0, (mmask_t *) 0); #endif timeout(-1); erase(); @@ -349,27 +346,31 @@ int y, x; endwin(); } -static int show_attr(int row, int skip, chtype attr, const char *name, bool once) +static int +show_attr(int row, int skip, chtype attr, const char *name, bool once) { int ncv = tigetnum("ncv"); mvprintw(row, 8, "%s mode:", name); mvprintw(row, 24, "|"); - if (skip) printw("%*s", skip, " "); + if (skip) + printw("%*s", skip, " "); if (once) attron(attr); else - attrset(attr); + attrset(attr); addstr("abcde fghij klmno pqrst uvwxy z"); if (once) attroff(attr); - if (skip) printw("%*s", skip, " "); + if (skip) + printw("%*s", skip, " "); printw("|"); if (attr != A_NORMAL) { if (!(termattrs() & attr)) { printw(" (N/A)"); } else if (ncv > 0 && (getbkgd(stdscr) & A_COLOR)) { - static const attr_t table[] = { + static const attr_t table[] = + { A_STANDOUT, A_UNDERLINE, A_REVERSE, @@ -382,9 +383,9 @@ static int show_attr(int row, int skip, chtype attr, const char *name, bool once }; unsigned n; bool found = FALSE; - for (n = 0; n < sizeof(table)/sizeof(table[0]); n++) { + for (n = 0; n < sizeof(table) / sizeof(table[0]); n++) { if ((table[n] & attr) != 0 - && ((1 << n) & ncv) != 0) { + && ((1 << n) & ncv) != 0) { found = TRUE; break; } @@ -396,7 +397,8 @@ static int show_attr(int row, int skip, chtype attr, const char *name, bool once return row + 2; } -static bool attr_getc(int *skip, int *fg, int *bg) +static bool +attr_getc(int *skip, int *fg, int *bg) { int ch = Getchar(); @@ -409,36 +411,49 @@ static bool attr_getc(int *skip, int *fg, int *bg) return TRUE; } else if (has_colors()) { switch (ch) { - case 'f': *fg = (*fg + 1); break; - case 'F': *fg = (*fg - 1); break; - case 'b': *bg = (*bg + 1); break; - case 'B': *bg = (*bg - 1); break; + case 'f': + *fg = (*fg + 1); + break; + case 'F': + *fg = (*fg - 1); + break; + case 'b': + *bg = (*bg + 1); + break; + case 'B': + *bg = (*bg - 1); + break; default: return FALSE; } - if (*fg >= COLORS) *fg = 0; - if (*fg < 0) *fg = COLORS - 1; - if (*bg >= COLORS) *bg = 0; - if (*bg < 0) *bg = COLORS - 1; + if (*fg >= COLORS) + *fg = 0; + if (*fg < 0) + *fg = COLORS - 1; + if (*bg >= COLORS) + *bg = 0; + if (*bg < 0) + *bg = COLORS - 1; return TRUE; } return FALSE; } -static void attr_test(void) +static void +attr_test(void) /* test text attributes */ { int n; int skip = tigetnum("xmc"); int fg = COLOR_BLACK; /* color pair 0 is special */ int bg = COLOR_BLACK; - bool *pairs = (bool *)calloc(COLOR_PAIRS, sizeof(bool)); + bool *pairs = (bool *) calloc(COLOR_PAIRS, sizeof(bool)); pairs[0] = TRUE; if (skip < 0) - skip = 0; + skip = 0; - n = skip; /* make it easy */ + n = skip; /* make it easy */ do { int row = 2; @@ -447,7 +462,7 @@ static void attr_test(void) if (has_colors()) { int pair = (fg * COLORS) + bg; if (!pairs[pair]) { - init_pair(pair, fg, bg); + init_pair(pair, fg, bg); pairs[pair] = TRUE; } normal |= COLOR_PAIR(pair); @@ -457,30 +472,30 @@ static void attr_test(void) mvaddstr(0, 20, "Character attribute test display"); - row = show_attr(row, n, A_STANDOUT, "STANDOUT", TRUE); - row = show_attr(row, n, A_REVERSE, "REVERSE", TRUE); - row = show_attr(row, n, A_BOLD, "BOLD", TRUE); + row = show_attr(row, n, A_STANDOUT, "STANDOUT", TRUE); + row = show_attr(row, n, A_REVERSE, "REVERSE", TRUE); + row = show_attr(row, n, A_BOLD, "BOLD", TRUE); row = show_attr(row, n, A_UNDERLINE, "UNDERLINE", TRUE); - row = show_attr(row, n, A_DIM, "DIM", TRUE); - row = show_attr(row, n, A_BLINK, "BLINK", TRUE); - row = show_attr(row, n, A_PROTECT, "PROTECT", TRUE); - row = show_attr(row, n, A_INVIS, "INVISIBLE", TRUE); - row = show_attr(row, n, A_NORMAL, "NORMAL", FALSE); + row = show_attr(row, n, A_DIM, "DIM", TRUE); + row = show_attr(row, n, A_BLINK, "BLINK", TRUE); + row = show_attr(row, n, A_PROTECT, "PROTECT", TRUE); + row = show_attr(row, n, A_INVIS, "INVISIBLE", TRUE); + row = show_attr(row, n, A_NORMAL, "NORMAL", FALSE); mvprintw(row, 8, - "This terminal does %shave the magic-cookie glitch", - tigetnum("xmc") > -1 ? "" : "not "); - mvprintw(row+1, 8, - "Enter a digit to set gaps on each side of displayed attributes"); - mvprintw(row+2, 8, - "^L = repaint"); + "This terminal does %shave the magic-cookie glitch", + tigetnum("xmc") > -1 ? "" : "not "); + mvprintw(row + 1, 8, + "Enter a digit to set gaps on each side of displayed attributes"); + mvprintw(row + 2, 8, + "^L = repaint"); if (has_colors()) printw(". f/F/b/F toggle colors (now %d/%d)", fg, bg); - refresh(); + refresh(); } while (attr_getc(&n, &fg, &bg)); - free((char *)pairs); + free((char *) pairs); bkgdset(A_NORMAL | BLANK); erase(); endwin(); @@ -501,10 +516,19 @@ static NCURSES_CONST char *color_names[] = "blue", "magenta", "cyan", - "white" + "white", + "BLACK", + "RED", + "GREEN", + "YELLOW", + "BLUE", + "MAGENTA", + "CYAN", + "WHITE" }; -static void show_color_name(int y, int x, int color) +static void +show_color_name(int y, int x, int color) { if (COLORS > 8) mvprintw(y, x, "%02d ", color); @@ -512,7 +536,8 @@ static void show_color_name(int y, int x, int color) mvaddstr(y, x, color_names[color]); } -static void color_test(void) +static void +color_test(void) /* generate a color test pattern */ { int i; @@ -525,24 +550,22 @@ static void color_test(void) width = (COLORS > 8) ? 4 : 8; hello = (COLORS > 8) ? "Test" : "Hello"; - for (base = 0; base < 2; base++) - { - top = (COLORS > 8) ? 0 : base * (COLORS+3); + for (base = 0; base < 2; base++) { + top = (COLORS > 8) ? 0 : base * (COLORS + 3); clrtobot(); (void) mvprintw(top + 1, 0, - "%dx%d matrix of foreground/background colors, bright *%s*\n", - COLORS, COLORS, - base ? "on" : "off"); + "%dx%d matrix of foreground/background colors, bright *%s*\n", + COLORS, COLORS, + base ? "on" : "off"); for (i = 0; i < COLORS; i++) - show_color_name(top + 2, (i+1) * width, i); + show_color_name(top + 2, (i + 1) * width, i); for (i = 0; i < COLORS; i++) show_color_name(top + 3 + i, 0, i); - for (i = 1; i < COLOR_PAIRS; i++) - { + for (i = 1; i < COLOR_PAIRS; i++) { init_pair(i, i % COLORS, i / COLORS); - attron((attr_t)COLOR_PAIR(i)); + attron((attr_t) COLOR_PAIR(i)); if (base) - attron((attr_t)A_BOLD); + attron((attr_t) A_BOLD); mvaddstr(top + 3 + (i / COLORS), (i % COLORS + 1) * width, hello); attrset(A_NORMAL); } @@ -554,57 +577,59 @@ static void color_test(void) endwin(); } -static void change_color(int current, int field, int value, int usebase) +static void +change_color(int current, int field, int value, int usebase) { - short red, green, blue; + short red, green, blue; - if (usebase) - color_content(current, &red, &green, &blue); - else - red = green = blue = 0; + if (usebase) + color_content(current, &red, &green, &blue); + else + red = green = blue = 0; - switch (field) { - case 0: - red += value; - break; - case 1: - green += value; - break; - case 2: - blue += value; - break; - } + switch (field) { + case 0: + red += value; + break; + case 1: + green += value; + break; + case 2: + blue += value; + break; + } - if (init_color(current, red, green, blue) == ERR) - beep(); + if (init_color(current, red, green, blue) == ERR) + beep(); } -static void color_edit(void) +static void +color_edit(void) /* display the color test pattern, without trying to edit colors */ { - int i, this_c = 0, value = 0, current = 0, field = 0; + int i, this_c = 0, value = 0, current = 0, field = 0; int last_c; + int max_colors = COLORS > 16 ? 16 : COLORS; refresh(); - for (i = 0; i < COLORS; i++) + for (i = 0; i < max_colors; i++) init_pair(i, COLOR_WHITE, i); - mvprintw(LINES-2, 0, "Number: %d", value); + mvprintw(LINES - 2, 0, "Number: %d", value); do { - short red, green, blue; + short red, green, blue; attron(A_BOLD); mvaddstr(0, 20, "Color RGB Value Editing"); attroff(A_BOLD); - for (i = 0; i < COLORS; i++) - { + for (i = 0; i < max_colors; i++) { mvprintw(2 + i, 0, "%c %-8s:", - (i == current ? '>' : ' '), - (i < (int) SIZEOF(color_names) - ? color_names[i] : "")); + (i == current ? '>' : ' '), + (i < (int) SIZEOF(color_names) + ? color_names[i] : "")); attrset(COLOR_PAIR(i)); addstr(" "); attrset(A_NORMAL); @@ -619,24 +644,30 @@ static void color_edit(void) color_content(i, &red, &green, &blue); addstr(" R = "); - if (current == i && field == 0) attron(A_STANDOUT); + if (current == i && field == 0) + attron(A_STANDOUT); printw("%04d", red); - if (current == i && field == 0) attrset(A_NORMAL); + if (current == i && field == 0) + attrset(A_NORMAL); addstr(", G = "); - if (current == i && field == 1) attron(A_STANDOUT); + if (current == i && field == 1) + attron(A_STANDOUT); printw("%04d", green); - if (current == i && field == 1) attrset(A_NORMAL); + if (current == i && field == 1) + attrset(A_NORMAL); addstr(", B = "); - if (current == i && field == 2) attron(A_STANDOUT); + if (current == i && field == 2) + attron(A_STANDOUT); printw("%04d", blue); - if (current == i && field == 2) attrset(A_NORMAL); + if (current == i && field == 2) + attrset(A_NORMAL); attrset(A_NORMAL); addstr(")"); } - mvaddstr(COLORS + 3, 0, + mvaddstr(max_colors + 3, 0, "Use up/down to select a color, left/right to change fields."); - mvaddstr(COLORS + 4, 0, + mvaddstr(max_colors + 4, 0, "Modify field by typing nnn=, nnn-, or nnn+. ? for help."); move(2 + current, 0); @@ -644,16 +675,15 @@ static void color_edit(void) last_c = this_c; this_c = Getchar(); if (isdigit(this_c) && !isdigit(last_c)) - value = 0; + value = 0; - switch (this_c) - { + switch (this_c) { case KEY_UP: - current = (current == 0 ? (COLORS - 1) : current - 1); + current = (current == 0 ? (max_colors - 1) : current - 1); break; case KEY_DOWN: - current = (current == (COLORS - 1) ? 0 : current + 1); + current = (current == (max_colors - 1) ? 0 : current + 1); break; case KEY_RIGHT: @@ -664,8 +694,16 @@ static void color_edit(void) field = (field == 0 ? 2 : field - 1); break; - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': value = value * 10 + (this_c - '0'); break; @@ -683,18 +721,18 @@ static void color_edit(void) case '?': erase(); - P(" RGB Value Editing Help"); - P(""); - P("You are in the RGB value editor. Use the arrow keys to select one of"); - P("the fields in one of the RGB triples of the current colors; the one"); - P("currently selected will be reverse-video highlighted."); - P(""); - P("To change a field, enter the digits of the new value; they are echoed"); - P("as entered. Finish by typing `='. The change will take effect instantly."); - P("To increment or decrement a value, use the same procedure, but finish"); - P("with a `+' or `-'."); - P(""); - P("To quit, do `x' or 'q'"); + P(" RGB Value Editing Help"); + P(""); + P("You are in the RGB value editor. Use the arrow keys to select one of"); + P("the fields in one of the RGB triples of the current colors; the one"); + P("currently selected will be reverse-video highlighted."); + P(""); + P("To change a field, enter the digits of the new value; they are echoed"); + P("as entered. Finish by typing `='. The change will take effect instantly."); + P("To increment or decrement a value, use the same procedure, but finish"); + P("with a `+' or `-'."); + P(""); + P("To quit, do `x' or 'q'"); Pause(); erase(); @@ -708,7 +746,7 @@ static void color_edit(void) beep(); break; } - mvprintw(LINES-2, 0, "Number: %d", value); + mvprintw(LINES - 2, 0, "Number: %d", value); clrtoeol(); } while (this_c != 'x' && this_c != 'q'); @@ -723,17 +761,17 @@ static void color_edit(void) * ****************************************************************************/ -static void slk_test(void) +static void +slk_test(void) /* exercise the soft keys */ { - int c, fmt = 1; + int c, fmt = 1; char buf[9]; c = CTRL('l'); do { move(0, 0); - switch(c) - { + switch (c) { case CTRL('l'): erase(); attron(A_BOLD); @@ -772,7 +810,7 @@ static void slk_test(void) case 's': mvprintw(20, 0, "Press Q to stop the scrolling-test: "); while ((c = Getchar()) != 'Q' && (c != ERR)) - addch((chtype)c); + addch((chtype) c); break; case 'd': @@ -791,15 +829,22 @@ static void slk_test(void) fmt = 2; break; - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': (void) mvaddstr(20, 0, "Please enter the label value: "); echo(); wgetnstr(stdscr, buf, 8); noecho(); slk_set((c - '0'), buf, fmt); slk_refresh(); - move(20, 0); clrtoeol(); + move(20, 0); + clrtoeol(); break; case 'x': @@ -812,7 +857,7 @@ static void slk_test(void) } while ((c = Getchar()) != EOF); - done: + done: erase(); endwin(); } @@ -826,121 +871,127 @@ static void slk_test(void) /* 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(int first) +static void +show_upper_chars(int first) { - bool C1 = (first == 128); - int code; - int last = first + 31; - int reply; + bool C1 = (first == 128); + int code; + int last = first + 31; + int reply; - erase(); - attron(A_BOLD); - mvprintw(0, 20, "Display of %s Character Codes %d to %d", - C1 ? "C1" : "GR", first, last); - attroff(A_BOLD); - refresh(); + erase(); + attron(A_BOLD); + mvprintw(0, 20, "Display of %s Character Codes %d to %d", + C1 ? "C1" : "GR", first, last); + attroff(A_BOLD); + refresh(); - for (code = first; code <= last; code++) { - int row = 4 + ((code - first) % 16); - int col = ((code - first) / 16) * COLS / 2; - char tmp[80]; - sprintf(tmp, "%3d (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(reply); - napms(10); - } - nodelay(stdscr, FALSE); - } + for (code = first; code <= last; code++) { + int row = 4 + ((code - first) % 16); + int col = ((code - first) / 16) * COLS / 2; + char tmp[80]; + sprintf(tmp, "%3d (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(reply); + napms(10); + } + nodelay(stdscr, FALSE); } + } } -static int show_1_acs(int n, const char *name, chtype code) +static int +show_1_acs(int n, const char *name, chtype code) { - const int height = 16; - int row = 4 + (n % height); - int col = (n / height) * COLS / 2; - mvprintw(row, col, "%*s : ", COLS/4, name); - addch(code); - return n + 1; + const int height = 16; + int row = 4 + (n % height); + int col = (n / height) * COLS / 2; + mvprintw(row, col, "%*s : ", COLS / 4, name); + addch(code); + return n + 1; } -static void show_acs_chars(void) +static void +show_acs_chars(void) /* display the ACS character set */ { - int n; + int n; #define BOTH(name) #name, name - erase(); - attron(A_BOLD); - mvaddstr(0, 20, "Display of the ACS Character Set"); - attroff(A_BOLD); - refresh(); + erase(); + attron(A_BOLD); + mvaddstr(0, 20, "Display of the ACS Character Set"); + attroff(A_BOLD); + refresh(); - n = show_1_acs(0, BOTH(ACS_ULCORNER)); - n = show_1_acs(n, BOTH(ACS_LLCORNER)); - n = show_1_acs(n, BOTH(ACS_URCORNER)); - n = show_1_acs(n, BOTH(ACS_LRCORNER)); - n = show_1_acs(n, BOTH(ACS_RTEE)); - n = show_1_acs(n, BOTH(ACS_LTEE)); - n = show_1_acs(n, BOTH(ACS_BTEE)); - n = show_1_acs(n, BOTH(ACS_TTEE)); - n = show_1_acs(n, BOTH(ACS_HLINE)); - n = show_1_acs(n, BOTH(ACS_VLINE)); - n = show_1_acs(n, BOTH(ACS_PLUS)); - n = show_1_acs(n, BOTH(ACS_S1)); - n = show_1_acs(n, BOTH(ACS_S9)); - n = show_1_acs(n, BOTH(ACS_DIAMOND)); - n = show_1_acs(n, BOTH(ACS_CKBOARD)); - n = show_1_acs(n, BOTH(ACS_DEGREE)); - n = show_1_acs(n, BOTH(ACS_PLMINUS)); - n = show_1_acs(n, BOTH(ACS_BULLET)); - n = show_1_acs(n, BOTH(ACS_LARROW)); - n = show_1_acs(n, BOTH(ACS_RARROW)); - n = show_1_acs(n, BOTH(ACS_DARROW)); - n = show_1_acs(n, BOTH(ACS_UARROW)); - n = show_1_acs(n, BOTH(ACS_BOARD)); - n = show_1_acs(n, BOTH(ACS_LANTERN)); - n = show_1_acs(n, BOTH(ACS_BLOCK)); - n = show_1_acs(n, BOTH(ACS_S3)); - n = show_1_acs(n, BOTH(ACS_S7)); - n = show_1_acs(n, BOTH(ACS_LEQUAL)); - n = show_1_acs(n, BOTH(ACS_GEQUAL)); - n = show_1_acs(n, BOTH(ACS_PI)); - n = show_1_acs(n, BOTH(ACS_NEQUAL)); - n = show_1_acs(n, BOTH(ACS_STERLING)); -} - -static void acs_display(void) -{ - int c = 'a'; - - do { - switch (c) { - case 'a': - show_acs_chars(); - break; - case '0': - case '1': - case '2': - case '3': - show_upper_chars((c - '0') * 32 + 128); - break; - } - mvprintw(LINES-3,0, "Note: ANSI terminals may not display C1 characters."); - mvprintw(LINES-2,0, "Select: a=ACS, 0=C1, 1,2,3=GR characters, q=quit"); - refresh(); - } while ((c = Getchar()) != 'x' && c != 'q'); + n = show_1_acs(0, BOTH(ACS_ULCORNER)); + n = show_1_acs(n, BOTH(ACS_LLCORNER)); + n = show_1_acs(n, BOTH(ACS_URCORNER)); + n = show_1_acs(n, BOTH(ACS_LRCORNER)); + n = show_1_acs(n, BOTH(ACS_RTEE)); + n = show_1_acs(n, BOTH(ACS_LTEE)); + n = show_1_acs(n, BOTH(ACS_BTEE)); + n = show_1_acs(n, BOTH(ACS_TTEE)); + n = show_1_acs(n, BOTH(ACS_HLINE)); + n = show_1_acs(n, BOTH(ACS_VLINE)); + n = show_1_acs(n, BOTH(ACS_PLUS)); + n = show_1_acs(n, BOTH(ACS_S1)); + n = show_1_acs(n, BOTH(ACS_S9)); + n = show_1_acs(n, BOTH(ACS_DIAMOND)); + n = show_1_acs(n, BOTH(ACS_CKBOARD)); + n = show_1_acs(n, BOTH(ACS_DEGREE)); + n = show_1_acs(n, BOTH(ACS_PLMINUS)); + n = show_1_acs(n, BOTH(ACS_BULLET)); + n = show_1_acs(n, BOTH(ACS_LARROW)); + n = show_1_acs(n, BOTH(ACS_RARROW)); + n = show_1_acs(n, BOTH(ACS_DARROW)); + n = show_1_acs(n, BOTH(ACS_UARROW)); + n = show_1_acs(n, BOTH(ACS_BOARD)); + n = show_1_acs(n, BOTH(ACS_LANTERN)); + n = show_1_acs(n, BOTH(ACS_BLOCK)); + n = show_1_acs(n, BOTH(ACS_S3)); + n = show_1_acs(n, BOTH(ACS_S7)); + n = show_1_acs(n, BOTH(ACS_LEQUAL)); + n = show_1_acs(n, BOTH(ACS_GEQUAL)); + n = show_1_acs(n, BOTH(ACS_PI)); + n = show_1_acs(n, BOTH(ACS_NEQUAL)); + n = show_1_acs(n, BOTH(ACS_STERLING)); +} - Pause(); - erase(); - endwin(); +static void +acs_display(void) +{ + int c = 'a'; + + do { + switch (c) { + case 'a': + show_acs_chars(); + break; + case '0': + case '1': + case '2': + case '3': + show_upper_chars((c - '0') * 32 + 128); + break; + } + mvprintw(LINES - 3, 0, + "Note: ANSI terminals may not display C1 characters."); + mvprintw(LINES - 2, 0, + "Select: a=ACS, 0=C1, 1,2,3=GR characters, q=quit"); + refresh(); + } while ((c = Getchar()) != 'x' && c != 'q'); + + Pause(); + erase(); + endwin(); } /* @@ -961,58 +1012,59 @@ test_sgr_attributes(void) } bkgdset(normal); erase(); - mvprintw( 1,20, "Graphic rendition test pattern:"); + mvprintw(1, 20, "Graphic rendition test pattern:"); - mvprintw( 4, 1, "vanilla"); + mvprintw(4, 1, "vanilla"); #define set_sgr(mask) bkgdset((normal^(mask))); set_sgr(A_BOLD); - mvprintw( 4,40, "bold"); + mvprintw(4, 40, "bold"); set_sgr(A_UNDERLINE); - mvprintw( 6, 6, "underline"); + mvprintw(6, 6, "underline"); - set_sgr(A_BOLD|A_UNDERLINE); - mvprintw( 6,45, "bold underline"); + set_sgr(A_BOLD | A_UNDERLINE); + mvprintw(6, 45, "bold underline"); set_sgr(A_BLINK); - mvprintw( 8, 1, "blink"); + mvprintw(8, 1, "blink"); - set_sgr(A_BLINK|A_BOLD); - mvprintw( 8,40, "bold blink"); + set_sgr(A_BLINK | A_BOLD); + mvprintw(8, 40, "bold blink"); - set_sgr(A_UNDERLINE|A_BLINK); + set_sgr(A_UNDERLINE | A_BLINK); mvprintw(10, 6, "underline blink"); - set_sgr(A_BOLD|A_UNDERLINE|A_BLINK); - mvprintw(10,45, "bold underline blink"); + set_sgr(A_BOLD | A_UNDERLINE | A_BLINK); + mvprintw(10, 45, "bold underline blink"); set_sgr(A_REVERSE); mvprintw(12, 1, "negative"); - set_sgr(A_BOLD|A_REVERSE); - mvprintw(12,40, "bold negative"); + set_sgr(A_BOLD | A_REVERSE); + mvprintw(12, 40, "bold negative"); - set_sgr(A_UNDERLINE|A_REVERSE); + set_sgr(A_UNDERLINE | A_REVERSE); mvprintw(14, 6, "underline negative"); - set_sgr(A_BOLD|A_UNDERLINE|A_REVERSE); - mvprintw(14,45, "bold underline negative"); + set_sgr(A_BOLD | A_UNDERLINE | A_REVERSE); + mvprintw(14, 45, "bold underline negative"); - set_sgr(A_BLINK|A_REVERSE); + set_sgr(A_BLINK | A_REVERSE); mvprintw(16, 1, "blink negative"); - set_sgr(A_BOLD|A_BLINK|A_REVERSE); - mvprintw(16,40, "bold blink negative"); + set_sgr(A_BOLD | A_BLINK | A_REVERSE); + mvprintw(16, 40, "bold blink negative"); - set_sgr(A_UNDERLINE|A_BLINK|A_REVERSE); + set_sgr(A_UNDERLINE | A_BLINK | A_REVERSE); mvprintw(18, 6, "underline blink negative"); - set_sgr(A_BOLD|A_UNDERLINE|A_BLINK|A_REVERSE); - mvprintw(18,45, "bold underline blink negative"); + set_sgr(A_BOLD | A_UNDERLINE | A_BLINK | A_REVERSE); + mvprintw(18, 45, "bold underline blink negative"); bkgdset(normal); - mvprintw(LINES-2,1, "%s background. ", pass == 0 ? "Dark" : "Light"); + mvprintw(LINES - 2, 1, "%s background. ", pass == 0 ? "Dark" : + "Light"); clrtoeol(); Pause(); } @@ -1030,196 +1082,240 @@ test_sgr_attributes(void) #define BOTLINES 4 /* number of line stolen from screen bottom */ -typedef struct -{ +typedef struct { int y, x; -} -pair; +} pair; #define FRAME struct frame FRAME { - FRAME *next, *last; - bool do_scroll; - bool do_keypad; - WINDOW *wind; + FRAME *next, *last; + bool do_scroll; + bool do_keypad; + WINDOW *wind; }; /* We need to know if these flags are actually set, so don't look in FRAME. * These names are known to work with SVr4 curses as well as ncurses. */ -static bool HaveKeypad(FRAME *curp) +static bool +HaveKeypad(FRAME * curp) { - WINDOW *win = (curp ? curp->wind : stdscr); - return win->_use_keypad; + WINDOW *win = (curp ? curp->wind : stdscr); + return win->_use_keypad; } -static bool HaveScroll(FRAME *curp) +static bool +HaveScroll(FRAME * curp) { - WINDOW *win = (curp ? curp->wind : stdscr); - return win->_scroll; + WINDOW *win = (curp ? curp->wind : stdscr); + return win->_scroll; } -static void newwin_legend(FRAME *curp) +static void +newwin_legend(FRAME * curp) { - 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 }, -#ifdef NCURSES_VERSION - { "^X = resize", 0 }, + 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 + }, +#ifdef HAVE_WRESIZE + { + "^X = resize", 0 + }, #endif - { "^Q%s = exit", 3 } - }; - size_t n; - int y, x; - bool do_keypad = HaveKeypad(curp); - bool do_scroll = HaveScroll(curp); - char buf[BUFSIZ]; - - move(LINES-4, 0); - for (n = 0; n < SIZEOF(legend); n++) { - switch (legend[n].code) { - default: - strcpy(buf, legend[n].msg); - break; - case 1: - sprintf(buf, legend[n].msg, do_keypad ? "yes" : "no"); - break; - case 2: - sprintf(buf, legend[n].msg, do_scroll ? "yes" : "no"); - break; - case 3: - sprintf(buf, legend[n].msg, do_keypad ? "/ESC" : ""); - break; - } - getyx(stdscr, y, x); - addstr((COLS < (x + 3 + (int)strlen(buf))) ? "\n" : (n ? ", " : "")); - addstr(buf); + { + "^Q%s = exit", 3 } - clrtoeol(); + }; + size_t n; + int y, x; + bool do_keypad = HaveKeypad(curp); + bool do_scroll = HaveScroll(curp); + char buf[BUFSIZ]; + + move(LINES - 4, 0); + for (n = 0; n < SIZEOF(legend); n++) { + switch (legend[n].code) { + default: + strcpy(buf, legend[n].msg); + break; + case 1: + sprintf(buf, legend[n].msg, do_keypad ? "yes" : "no"); + break; + case 2: + sprintf(buf, legend[n].msg, do_scroll ? "yes" : "no"); + break; + case 3: + sprintf(buf, legend[n].msg, do_keypad ? "/ESC" : ""); + break; + } + getyx(stdscr, y, x); + addstr((COLS < (x + 3 + (int) strlen(buf))) ? "\n" : (n ? ", " : "")); + addstr(buf); + } + clrtoeol(); } -static void transient(FRAME *curp, NCURSES_CONST char *msg) +static void +transient(FRAME * curp, NCURSES_CONST char *msg) { newwin_legend(curp); - if (msg) - { + if (msg) { mvaddstr(LINES - 1, 0, msg); refresh(); napms(1000); } - move(LINES-1, 0); + move(LINES - 1, 0); printw("%s characters are echoed, window should %sscroll.", HaveKeypad(curp) ? "Non-arrow" : "All other", - HaveScroll(curp) ? "" : "not " ); + HaveScroll(curp) ? "" : "not "); clrtoeol(); } -static void newwin_report(FRAME *curp) +static void +newwin_report(FRAME * curp) /* report on the cursor's current position, then restore it */ { - WINDOW *win = (curp != 0) ? curp->wind : stdscr; - int y, x; + WINDOW *win = (curp != 0) ? curp->wind : stdscr; + int y, x; - if (win != stdscr) - transient(curp, (char *)0); - getyx(win, y, x); - move(LINES - 1, COLS - 17); - printw("Y = %2d X = %2d", y, x); - if (win != stdscr) - refresh(); - else - wmove(win, y, x); + if (win != stdscr) + transient(curp, (char *) 0); + getyx(win, y, x); + move(LINES - 1, COLS - 17); + printw("Y = %2d X = %2d", y, x); + if (win != stdscr) + refresh(); + else + wmove(win, y, x); } -static pair *selectcell(int uli, int ulj, int lri, int lrj) +static pair * +selectcell(int uli, int ulj, int lri, int lrj) /* arrows keys move cursor, return location at current on non-arrow key */ { - static pair res; /* result cell */ - int si = lri - uli + 1; /* depth of the select area */ - int sj = lrj - ulj + 1; /* width of the select area */ - int i = 0, j = 0; /* offsets into the select area */ + static pair res; /* result cell */ + int si = lri - uli + 1; /* depth of the select area */ + int sj = lrj - ulj + 1; /* width of the select area */ + int i = 0, j = 0; /* offsets into the select area */ res.y = uli; res.x = ulj; - for (;;) - { + for (;;) { move(uli + i, ulj + j); - newwin_report((FRAME *)0); + newwin_report((FRAME *) 0); - switch(Getchar()) - { - case KEY_UP: i += si - 1; break; - case KEY_DOWN: i++; break; - case KEY_LEFT: j += sj - 1; break; - case KEY_RIGHT: j++; break; + switch (Getchar()) { + case KEY_UP: + i += si - 1; + break; + case KEY_DOWN: + i++; + break; + case KEY_LEFT: + j += sj - 1; + break; + case KEY_RIGHT: + j++; + break; case QUIT: - case ESCAPE: return((pair *)0); + case ESCAPE: + return ((pair *) 0); #ifdef NCURSES_MOUSE_VERSION case KEY_MOUSE: { - MEVENT event; + MEVENT event; getmouse(&event); if (event.y > uli && event.x > ulj) { - i = event.y - uli; - j = event.x - ulj; + i = event.y - uli; + j = event.x - ulj; } else { - beep(); - break; + beep(); + break; } } /* FALLTHRU */ #endif - default: res.y = uli + i; res.x = ulj + j; return(&res); + default: + res.y = uli + i; + res.x = ulj + j; + return (&res); } i %= si; j %= sj; } } -static void outerbox(pair ul, pair lr, bool onoff) +static void +outerbox(pair ul, pair lr, bool onoff) /* draw or erase a box *outside* the given pair of corners */ { - mvaddch(ul.y-1, lr.x-1, onoff ? ACS_ULCORNER : ' '); - mvaddch(ul.y-1, lr.x+1, onoff ? ACS_URCORNER : ' '); - mvaddch(lr.y+1, lr.x+1, onoff ? ACS_LRCORNER : ' '); - mvaddch(lr.y+1, ul.x-1, onoff ? ACS_LLCORNER : ' '); - move(ul.y-1, ul.x); hline(onoff ? ACS_HLINE : ' ', lr.x - ul.x + 1); - move(ul.y, ul.x-1); vline(onoff ? ACS_VLINE : ' ', lr.y - ul.y + 1); - move(lr.y+1, ul.x); hline(onoff ? ACS_HLINE : ' ', lr.x - ul.x + 1); - move(ul.y, lr.x+1); vline(onoff ? ACS_VLINE : ' ', lr.y - ul.y + 1); -} - -static WINDOW *getwindow(void) + mvaddch(ul.y - 1, lr.x - 1, onoff ? ACS_ULCORNER : ' '); + mvaddch(ul.y - 1, lr.x + 1, onoff ? ACS_URCORNER : ' '); + mvaddch(lr.y + 1, lr.x + 1, onoff ? ACS_LRCORNER : ' '); + mvaddch(lr.y + 1, ul.x - 1, onoff ? ACS_LLCORNER : ' '); + move(ul.y - 1, ul.x); + hline(onoff ? ACS_HLINE : ' ', lr.x - ul.x + 1); + move(ul.y, ul.x - 1); + vline(onoff ? ACS_VLINE : ' ', lr.y - ul.y + 1); + move(lr.y + 1, ul.x); + hline(onoff ? ACS_HLINE : ' ', lr.x - ul.x + 1); + move(ul.y, lr.x + 1); + vline(onoff ? ACS_VLINE : ' ', lr.y - ul.y + 1); +} + +static WINDOW * +getwindow(void) /* Ask user for a window definition */ { - WINDOW *rwindow; - pair ul, lr, *tmp; + WINDOW *rwindow; + pair ul, lr, *tmp; - move(0, 0); clrtoeol(); + move(0, 0); + clrtoeol(); addstr("Use arrows to move cursor, anything else to mark corner 1"); refresh(); - if ((tmp = selectcell(2, 1, LINES-BOTLINES-2, COLS-2)) == (pair *)0) - return((WINDOW *)0); + if ((tmp = selectcell(2, 1, LINES - BOTLINES - 2, COLS - 2)) == (pair *) 0) + return ((WINDOW *) 0); memcpy(&ul, tmp, sizeof(pair)); - mvaddch(ul.y-1, ul.x-1, ACS_ULCORNER); - move(0, 0); clrtoeol(); + mvaddch(ul.y - 1, ul.x - 1, ACS_ULCORNER); + move(0, 0); + clrtoeol(); addstr("Use arrows to move cursor, anything else to mark corner 2"); refresh(); - if ((tmp = selectcell(ul.y, ul.x, LINES-BOTLINES-2, COLS-2)) == (pair *)0) - return((WINDOW *)0); + if ((tmp = selectcell(ul.y, ul.x, LINES - BOTLINES - 2, COLS - 2)) == + (pair *) 0) + return ((WINDOW *) 0); memcpy(&lr, tmp, sizeof(pair)); rwindow = subwin(stdscr, lr.y - ul.y + 1, lr.x - ul.x + 1, ul.y, ul.x); @@ -1229,78 +1325,78 @@ static WINDOW *getwindow(void) wrefresh(rwindow); - move(0, 0); clrtoeol(); - return(rwindow); + move(0, 0); + clrtoeol(); + return (rwindow); } -static void newwin_move(FRAME *curp, int dy, int dx) +static void +newwin_move(FRAME * curp, int dy, int dx) { - WINDOW *win = (curp != 0) ? curp->wind : stdscr; - int cur_y, cur_x; - int max_y, max_x; + WINDOW *win = (curp != 0) ? curp->wind : stdscr; + int cur_y, cur_x; + int max_y, max_x; - getyx(win, cur_y, cur_x); - getmaxyx(win, max_y, max_x); - if ((cur_x += dx) < 0) - cur_x = 0; - else if (cur_x >= max_x) - cur_x = max_x - 1; - if ((cur_y += dy) < 0) - cur_y = 0; - else if (cur_y >= max_y) - cur_y = max_y - 1; - wmove(win, cur_y, cur_x); + getyx(win, cur_y, cur_x); + getmaxyx(win, max_y, max_x); + if ((cur_x += dx) < 0) + cur_x = 0; + else if (cur_x >= max_x) + cur_x = max_x - 1; + if ((cur_y += dy) < 0) + cur_y = 0; + else if (cur_y >= max_y) + cur_y = max_y - 1; + wmove(win, cur_y, cur_x); } -static FRAME *delete_framed(FRAME *fp, bool showit) +static FRAME * +delete_framed(FRAME * fp, bool showit) { - FRAME *np; + FRAME *np; - fp->last->next = fp->next; - fp->next->last = fp->last; + fp->last->next = fp->next; + fp->next->last = fp->last; - if (showit) { - werase(fp->wind); - wrefresh(fp->wind); - } - delwin(fp->wind); + if (showit) { + werase(fp->wind); + wrefresh(fp->wind); + } + delwin(fp->wind); - np = (fp == fp->next) ? 0 : fp->next; - free(fp); - return np; + np = (fp == fp->next) ? 0 : fp->next; + free(fp); + return np; } -static void acs_and_scroll(void) +static void +acs_and_scroll(void) /* Demonstrate windows */ { - int c, i; + int c, i; FILE *fp; - FRAME *current = (FRAME *)0, *neww; + FRAME *current = (FRAME *) 0, *neww; WINDOW *usescr = stdscr; #define DUMPFILE "screendump" #ifdef NCURSES_MOUSE_VERSION - mousemask(BUTTON1_CLICKED, (mmask_t *)0); + mousemask(BUTTON1_CLICKED, (mmask_t *) 0); #endif c = CTRL('C'); raw(); do { - transient((FRAME *)0, (char *)0); - switch(c) - { + transient((FRAME *) 0, (char *) 0); + switch (c) { case CTRL('C'): neww = (FRAME *) calloc(1, sizeof(FRAME)); - if ((neww->wind = getwindow()) == (WINDOW *)0) + if ((neww->wind = getwindow()) == (WINDOW *) 0) goto breakout; - if (current == 0) /* First element, */ - { - neww->next = neww; /* so point it at itself */ + if (current == 0) { /* First element, */ + neww->next = neww; /* so point it at itself */ neww->last = neww; - } - else - { + } else { neww->next = current->next; neww->last = current; neww->last->next = neww; @@ -1316,27 +1412,27 @@ static void acs_and_scroll(void) current->do_scroll = HaveScroll(current); break; - case CTRL('N'): /* go to next window */ + case CTRL('N'): /* go to next window */ if (current) current = current->next; break; - case CTRL('P'): /* go to previous window */ + case CTRL('P'): /* go to previous window */ if (current) current = current->last; break; - case CTRL('F'): /* scroll current window forward */ + case CTRL('F'): /* scroll current window forward */ if (current) wscrl(current->wind, 1); break; - case CTRL('B'): /* scroll current window backwards */ + case CTRL('B'): /* scroll current window backwards */ if (current) wscrl(current->wind, -1); break; - case CTRL('K'): /* toggle keypad mode for current */ + case CTRL('K'): /* toggle keypad mode for current */ if (current) { current->do_keypad = !current->do_keypad; keypad(current->wind, current->do_keypad); @@ -1350,13 +1446,12 @@ static void acs_and_scroll(void) } break; - case CTRL('W'): /* save and delete window */ + case CTRL('W'): /* save and delete window */ if (current == current->next) break; - if ((fp = fopen(DUMPFILE, "w")) == (FILE *)0) + if ((fp = fopen(DUMPFILE, "w")) == (FILE *) 0) transient(current, "Can't open screen dump file"); - else - { + else { (void) putwin(current->wind, fp); (void) fclose(fp); @@ -1364,11 +1459,10 @@ static void acs_and_scroll(void) } break; - case CTRL('R'): /* restore window */ - if ((fp = fopen(DUMPFILE, "r")) == (FILE *)0) + case CTRL('R'): /* restore window */ + if ((fp = fopen(DUMPFILE, "r")) == (FILE *) 0) transient(current, "Can't open screen dump file"); - else - { + else { neww = (FRAME *) calloc(1, sizeof(FRAME)); neww->next = current->next; @@ -1383,22 +1477,21 @@ static void acs_and_scroll(void) } break; -#ifdef NCURSES_VERSION - case CTRL('X'): /* resize window */ - if (current) - { +#ifdef HAVE_WRESIZE + case CTRL('X'): /* resize window */ + if (current) { pair *tmp, ul, lr; int mx, my; - move(0, 0); clrtoeol(); + move(0, 0); + clrtoeol(); addstr("Use arrows to move cursor, anything else to mark new corner"); refresh(); getbegyx(current->wind, ul.y, ul.x); - tmp = selectcell(ul.y, ul.x, LINES-BOTLINES-2, COLS-2); - if (tmp == (pair *)0) - { + tmp = selectcell(ul.y, ul.x, LINES - BOTLINES - 2, COLS - 2); + if (tmp == (pair *) 0) { beep(); break; } @@ -1411,23 +1504,21 @@ static void acs_and_scroll(void) /* strictly cosmetic hack for the test */ getmaxyx(current->wind, my, mx); - if (my > tmp->y - ul.y) - { - getyx(current->wind, lr.y, lr.x); - wmove(current->wind, tmp->y - ul.y + 1, 0); - wclrtobot(current->wind); - wmove(current->wind, lr.y, lr.x); + if (my > tmp->y - ul.y) { + getyx(current->wind, lr.y, lr.x); + wmove(current->wind, tmp->y - ul.y + 1, 0); + wclrtobot(current->wind); + wmove(current->wind, lr.y, lr.x); } if (mx > tmp->x - ul.x) - for (i = 0; i < my; i++) - { - wmove(current->wind, i, tmp->x - ul.x + 1); - wclrtoeol(current->wind); - } + for (i = 0; i < my; i++) { + wmove(current->wind, i, tmp->x - ul.x + 1); + wclrtoeol(current->wind); + } wnoutrefresh(current->wind); memcpy(&lr, tmp, sizeof(pair)); - (void) wresize(current->wind, lr.y-ul.y+0, lr.x-ul.x+0); + (void) wresize(current->wind, lr.y - ul.y + 0, lr.x - ul.x + 0); getbegyx(current->wind, ul.y, ul.x); getmaxyx(current->wind, lr.y, lr.x); @@ -1437,11 +1528,12 @@ static void acs_and_scroll(void) wnoutrefresh(stdscr); wnoutrefresh(current->wind); - move(0, 0); clrtoeol(); + move(0, 0); + clrtoeol(); doupdate(); } break; -#endif /* NCURSES_VERSION */ +#endif /* HAVE_WRESIZE */ case KEY_F(10): /* undocumented --- use this to test area clears */ selectcell(0, 0, LINES - 1, COLS - 1); @@ -1450,16 +1542,16 @@ static void acs_and_scroll(void) break; case KEY_UP: - newwin_move(current, -1, 0); + newwin_move(current, -1, 0); break; case KEY_DOWN: - newwin_move(current, 1, 0); + newwin_move(current, 1, 0); break; case KEY_LEFT: - newwin_move(current, 0, -1); + newwin_move(current, 0, -1); break; case KEY_RIGHT: - newwin_move(current, 0, 1); + newwin_move(current, 0, 1); break; case KEY_BACKSPACE: @@ -1469,9 +1561,9 @@ static void acs_and_scroll(void) int y, x; getyx(current->wind, y, x); if (--x < 0) { - if (--y < 0) - break; - x = getmaxx(current->wind) - 1; + if (--y < 0) + break; + x = getmaxx(current->wind) - 1; } mvwdelch(current->wind, y, x); } @@ -1483,7 +1575,7 @@ static void acs_and_scroll(void) default: if (current) - waddch(current->wind, (chtype)c); + waddch(current->wind, (chtype) c); else beep(); break; @@ -1493,16 +1585,16 @@ static void acs_and_scroll(void) wrefresh(usescr); } while ((c = wGetchar(usescr)) != QUIT - && !((c == ESCAPE) && (usescr->_use_keypad)) - && (c != ERR)); + && !((c == ESCAPE) && (usescr->_use_keypad)) + && (c != ERR)); - breakout: + breakout: while (current != 0) - current = delete_framed(current, FALSE); + current = delete_framed(current, FALSE); scrollok(stdscr, TRUE); /* reset to driver's default */ #ifdef NCURSES_MOUSE_VERSION - mousemask(0, (mmask_t *)0); + mousemask(0, (mmask_t *) 0); #endif noraw(); erase(); @@ -1520,12 +1612,12 @@ static unsigned long nap_msec = 1; static NCURSES_CONST char *mod[] = { - "test ", - "TEST ", - "(**) ", - "*()* ", - "<--> ", - "LAST " + "test ", + "TEST ", + "(**) ", + "*()* ", + "<--> ", + "LAST " }; /*+------------------------------------------------------------------------- @@ -1535,19 +1627,19 @@ static void wait_a_while(unsigned long msec GCC_UNUSED) { #if HAVE_NAPMS - if(nap_msec == 1) - wGetchar(stdscr); - else - napms(nap_msec); + if (nap_msec == 1) + wGetchar(stdscr); + else + napms(nap_msec); #else - if(nap_msec == 1) - wGetchar(stdscr); - else if(msec > 1000L) - sleep((int)msec/1000L); - else - sleep(1); + if (nap_msec == 1) + wGetchar(stdscr); + else if (msec > 1000L) + sleep((int) msec / 1000L); + else + sleep(1); #endif -} /* end of wait_a_while */ +} /* end of wait_a_while */ /*+------------------------------------------------------------------------- saywhat(text) @@ -1555,10 +1647,10 @@ wait_a_while(unsigned long msec GCC_UNUSED) static void saywhat(NCURSES_CONST char *text) { - wmove(stdscr,LINES - 1,0); - wclrtoeol(stdscr); - waddstr(stdscr, text); -} /* end of saywhat */ + wmove(stdscr, LINES - 1, 0); + wclrtoeol(stdscr); + waddstr(stdscr, text); +} /* end of saywhat */ /*+------------------------------------------------------------------------- mkpanel(rows,cols,tly,tlx) - alloc a win and panel and associate them @@ -1566,34 +1658,34 @@ saywhat(NCURSES_CONST char *text) static PANEL * mkpanel(int color, int rows, int cols, int tly, int tlx) { -WINDOW *win; -PANEL *pan = 0; - - if ((win = newwin(rows, cols, tly, tlx)) != 0) { - if ((pan = new_panel(win)) == 0) { - delwin(win); - } else if (has_colors()) { - int fg = (color == COLOR_BLUE) ? COLOR_WHITE : COLOR_BLACK; - int bg = color; - init_pair(color, fg, bg); - wbkgdset(win, COLOR_PAIR(color) | ' '); - } else { - wbkgdset(win, A_BOLD | ' '); - } + WINDOW *win; + PANEL *pan = 0; + + if ((win = newwin(rows, cols, tly, tlx)) != 0) { + if ((pan = new_panel(win)) == 0) { + delwin(win); + } else if (has_colors()) { + int fg = (color == COLOR_BLUE) ? COLOR_WHITE : COLOR_BLACK; + int bg = color; + init_pair(color, fg, bg); + wbkgdset(win, COLOR_PAIR(color) | ' '); + } else { + wbkgdset(win, A_BOLD | ' '); } - return pan; -} /* end of mkpanel */ + } + return pan; +} /* end of mkpanel */ /*+------------------------------------------------------------------------- rmpanel(pan) --------------------------------------------------------------------------*/ static void -rmpanel(PANEL *pan) +rmpanel(PANEL * pan) { -WINDOW *win = panel_window(pan); - del_panel(pan); - delwin(win); -} /* end of rmpanel */ + WINDOW *win = panel_window(pan); + del_panel(pan); + delwin(win); +} /* end of rmpanel */ /*+------------------------------------------------------------------------- pflush() @@ -1601,227 +1693,243 @@ WINDOW *win = panel_window(pan); static void pflush(void) { - update_panels(); - doupdate(); -} /* end of pflush */ + update_panels(); + doupdate(); +} /* end of pflush */ /*+------------------------------------------------------------------------- fill_panel(win) --------------------------------------------------------------------------*/ static void -fill_panel(PANEL *pan) +fill_panel(PANEL * pan) { -WINDOW *win = panel_window(pan); -int num = ((const char *)panel_userptr(pan))[1]; -int y,x; + WINDOW *win = panel_window(pan); + int num = ((const char *) panel_userptr(pan))[1]; + int y, x; - wmove(win,1,1); - wprintw(win,"-pan%c-", num); - wclrtoeol(win); - box(win, 0, 0); - for(y = 2; y < getmaxy(win) - 1; y++) - { - for(x = 1; x < getmaxx(win) - 1; x++) - { - wmove(win,y,x); - waddch(win,num); - } + wmove(win, 1, 1); + wprintw(win, "-pan%c-", num); + wclrtoeol(win); + box(win, 0, 0); + for (y = 2; y < getmaxy(win) - 1; y++) { + for (x = 1; x < getmaxx(win) - 1; x++) { + wmove(win, y, x); + waddch(win, num); } -} /* end of fill_panel */ + } +} /* end of fill_panel */ -static void demo_panels(void) +static void +demo_panels(void) { -int itmp; -register int y,x; + int itmp; + register int y, x; - refresh(); + refresh(); - for(y = 0; y < LINES - 1; y++) - { - for(x = 0; x < COLS; x++) - wprintw(stdscr,"%d",(y + x) % 10); + for (y = 0; y < LINES - 1; y++) { + for (x = 0; x < COLS; x++) + wprintw(stdscr, "%d", (y + x) % 10); + } + for (y = 0; y < 5; y++) { + PANEL *p1; + PANEL *p2; + PANEL *p3; + PANEL *p4; + PANEL *p5; + + p1 = mkpanel(COLOR_RED, + LINES / 2 - 2, + COLS / 8 + 1, + 0, + 0); + set_panel_userptr(p1, "p1"); + + p2 = mkpanel(COLOR_GREEN, + LINES / 2 + 1, + COLS / 7, + LINES / 4, + COLS / 10); + set_panel_userptr(p2, "p2"); + + p3 = mkpanel(COLOR_YELLOW, + LINES / 4, + COLS / 10, + LINES / 2, + COLS / 9); + set_panel_userptr(p3, "p3"); + + p4 = mkpanel(COLOR_BLUE, + LINES / 2 - 2, + COLS / 8, + LINES / 2 - 2, + COLS / 3); + set_panel_userptr(p4, "p4"); + + p5 = mkpanel(COLOR_MAGENTA, + LINES / 2 - 2, + COLS / 8, + LINES / 2, + COLS / 2 - 2); + set_panel_userptr(p5, "p5"); + + fill_panel(p1); + fill_panel(p2); + fill_panel(p3); + fill_panel(p4); + fill_panel(p5); + hide_panel(p4); + hide_panel(p5); + pflush(); + saywhat("press any key to continue"); + wait_a_while(nap_msec); + + saywhat("h3 s1 s2 s4 s5; press any key to continue"); + move_panel(p1, 0, 0); + hide_panel(p3); + show_panel(p1); + show_panel(p2); + show_panel(p4); + show_panel(p5); + pflush(); + wait_a_while(nap_msec); + + saywhat("s1; press any key to continue"); + show_panel(p1); + pflush(); + wait_a_while(nap_msec); + + saywhat("s2; press any key to continue"); + show_panel(p2); + pflush(); + wait_a_while(nap_msec); + + saywhat("m2; press any key to continue"); + move_panel(p2, LINES / 3 + 1, COLS / 8); + pflush(); + wait_a_while(nap_msec); + + saywhat("s3;"); + show_panel(p3); + pflush(); + wait_a_while(nap_msec); + + saywhat("m3; press any key to continue"); + move_panel(p3, LINES / 4 + 1, COLS / 15); + pflush(); + wait_a_while(nap_msec); + + saywhat("b3; press any key to continue"); + bottom_panel(p3); + pflush(); + wait_a_while(nap_msec); + + saywhat("s4; press any key to continue"); + show_panel(p4); + pflush(); + wait_a_while(nap_msec); + + saywhat("s5; press any key to continue"); + show_panel(p5); + pflush(); + wait_a_while(nap_msec); + + saywhat("t3; press any key to continue"); + top_panel(p3); + pflush(); + wait_a_while(nap_msec); + + saywhat("t1; press any key to continue"); + top_panel(p1); + pflush(); + wait_a_while(nap_msec); + + saywhat("t2; press any key to continue"); + top_panel(p2); + pflush(); + wait_a_while(nap_msec); + + saywhat("t3; press any key to continue"); + top_panel(p3); + pflush(); + wait_a_while(nap_msec); + + saywhat("t4; press any key to continue"); + top_panel(p4); + pflush(); + wait_a_while(nap_msec); + + for (itmp = 0; itmp < 6; itmp++) { + WINDOW *w4 = panel_window(p4); + WINDOW *w5 = panel_window(p5); + + saywhat("m4; press any key to continue"); + wmove(w4, LINES / 8, 1); + waddstr(w4, mod[itmp]); + move_panel(p4, LINES / 6, itmp * (COLS / 8)); + wmove(w5, LINES / 6, 1); + waddstr(w5, mod[itmp]); + pflush(); + wait_a_while(nap_msec); + + saywhat("m5; press any key to continue"); + wmove(w4, LINES / 6, 1); + waddstr(w4, mod[itmp]); + move_panel(p5, LINES / 3 - 1, (itmp * 10) + 6); + wmove(w5, LINES / 8, 1); + waddstr(w5, mod[itmp]); + pflush(); + wait_a_while(nap_msec); } - for(y = 0; y < 5; y++) - { - PANEL *p1; - PANEL *p2; - PANEL *p3; - PANEL *p4; - PANEL *p5; - - p1 = mkpanel(COLOR_RED, LINES/2 - 2, COLS/8 + 1, 0, 0); - set_panel_userptr(p1,"p1"); - - p2 = mkpanel(COLOR_GREEN, LINES/2 + 1, COLS/7, LINES/4, COLS/10); - set_panel_userptr(p2,"p2"); - - p3 = mkpanel(COLOR_YELLOW, LINES/4, COLS/10, LINES/2, COLS/9); - set_panel_userptr(p3,"p3"); - - p4 = mkpanel(COLOR_BLUE, LINES/2 - 2, COLS/8, LINES/2 - 2, COLS/3); - set_panel_userptr(p4,"p4"); - - p5 = mkpanel(COLOR_MAGENTA, LINES/2 - 2, COLS/8, LINES/2, COLS/2 - 2); - set_panel_userptr(p5,"p5"); - - fill_panel(p1); - fill_panel(p2); - fill_panel(p3); - fill_panel(p4); - fill_panel(p5); - hide_panel(p4); - hide_panel(p5); - pflush(); - saywhat("press any key to continue"); - wait_a_while(nap_msec); - - saywhat("h3 s1 s2 s4 s5; press any key to continue"); - move_panel(p1,0,0); - hide_panel(p3); - show_panel(p1); - show_panel(p2); - show_panel(p4); - show_panel(p5); - pflush(); - wait_a_while(nap_msec); - - saywhat("s1; press any key to continue"); - show_panel(p1); - pflush(); - wait_a_while(nap_msec); - - saywhat("s2; press any key to continue"); - show_panel(p2); - pflush(); - wait_a_while(nap_msec); - - saywhat("m2; press any key to continue"); - move_panel(p2, LINES/3 + 1, COLS / 8); - pflush(); - wait_a_while(nap_msec); - - saywhat("s3;"); - show_panel(p3); - pflush(); - wait_a_while(nap_msec); - - saywhat("m3; press any key to continue"); - move_panel(p3, LINES/4 + 1, COLS / 15); - pflush(); - wait_a_while(nap_msec); - - saywhat("b3; press any key to continue"); - bottom_panel(p3); - pflush(); - wait_a_while(nap_msec); - - saywhat("s4; press any key to continue"); - show_panel(p4); - pflush(); - wait_a_while(nap_msec); - - saywhat("s5; press any key to continue"); - show_panel(p5); - pflush(); - wait_a_while(nap_msec); - - saywhat("t3; press any key to continue"); - top_panel(p3); - pflush(); - wait_a_while(nap_msec); - - saywhat("t1; press any key to continue"); - top_panel(p1); - pflush(); - wait_a_while(nap_msec); - - saywhat("t2; press any key to continue"); - top_panel(p2); - pflush(); - wait_a_while(nap_msec); - - saywhat("t3; press any key to continue"); - top_panel(p3); - pflush(); - wait_a_while(nap_msec); - - saywhat("t4; press any key to continue"); - top_panel(p4); - pflush(); - wait_a_while(nap_msec); - - for(itmp = 0; itmp < 6; itmp++) - { - WINDOW *w4 = panel_window(p4); - WINDOW *w5 = panel_window(p5); - - saywhat("m4; press any key to continue"); - wmove(w4, LINES/8, 1); - waddstr(w4,mod[itmp]); - move_panel(p4, LINES/6, itmp*(COLS/8)); - wmove(w5, LINES/6, 1); - waddstr(w5,mod[itmp]); - pflush(); - wait_a_while(nap_msec); - - saywhat("m5; press any key to continue"); - wmove(w4, LINES/6, 1); - waddstr(w4,mod[itmp]); - move_panel(p5, LINES/3 - 1,(itmp*10) + 6); - wmove(w5, LINES/8, 1); - waddstr(w5,mod[itmp]); - pflush(); - wait_a_while(nap_msec); - } - saywhat("m4; press any key to continue"); - move_panel(p4, LINES/6, itmp*(COLS/8)); - pflush(); - wait_a_while(nap_msec); - - saywhat("t5; press any key to continue"); - top_panel(p5); - pflush(); - wait_a_while(nap_msec); - - saywhat("t2; press any key to continue"); - top_panel(p2); - pflush(); - wait_a_while(nap_msec); - - saywhat("t1; press any key to continue"); - top_panel(p1); - pflush(); - wait_a_while(nap_msec); - - saywhat("d2; press any key to continue"); - rmpanel(p2); - pflush(); - wait_a_while(nap_msec); - - saywhat("h3; press any key to continue"); - hide_panel(p3); - pflush(); - wait_a_while(nap_msec); - - saywhat("d1; press any key to continue"); - rmpanel(p1); - pflush(); - wait_a_while(nap_msec); - - saywhat("d4; press any key to continue"); - rmpanel(p4); - pflush(); - wait_a_while(nap_msec); - - saywhat("d5; press any key to continue"); - rmpanel(p5); - pflush(); - wait_a_while(nap_msec); - if(nap_msec == 1) - break; - nap_msec = 100L; - } + saywhat("m4; press any key to continue"); + move_panel(p4, LINES / 6, itmp * (COLS / 8)); + pflush(); + wait_a_while(nap_msec); + + saywhat("t5; press any key to continue"); + top_panel(p5); + pflush(); + wait_a_while(nap_msec); + + saywhat("t2; press any key to continue"); + top_panel(p2); + pflush(); + wait_a_while(nap_msec); + + saywhat("t1; press any key to continue"); + top_panel(p1); + pflush(); + wait_a_while(nap_msec); + + saywhat("d2; press any key to continue"); + rmpanel(p2); + pflush(); + wait_a_while(nap_msec); + + saywhat("h3; press any key to continue"); + hide_panel(p3); + pflush(); + wait_a_while(nap_msec); + + saywhat("d1; press any key to continue"); + rmpanel(p1); + pflush(); + wait_a_while(nap_msec); + + saywhat("d4; press any key to continue"); + rmpanel(p4); + pflush(); + wait_a_while(nap_msec); + + saywhat("d5; press any key to continue"); + rmpanel(p5); + pflush(); + wait_a_while(nap_msec); + if (nap_msec == 1) + break; + nap_msec = 100L; + } erase(); endwin(); @@ -1837,40 +1945,45 @@ register int y,x; static bool show_panner_legend = TRUE; -static int panner_legend(int line) -{ - static const char *const legend[] = { - "Use arrow keys (or U,D,L,R) to pan, q to quit (?,t,s flags)", - "Use ! to shell-out. Toggle legend:?, timer:t, scroll mark:s.", - "Use +,- (or j,k) to grow/shrink the panner vertically.", - "Use <,> (or h,l) to grow/shrink the panner horizontally." - }; - int n = (SIZEOF(legend) - (LINES - line)); - if (line < LINES && (n >= 0)) { - move(line, 0); - if (show_panner_legend) - printw("%s", legend[n]); - clrtoeol(); - return show_panner_legend; - } - return FALSE; +static int +panner_legend(int line) +{ + static const char *const legend[] = + { + "Use arrow keys (or U,D,L,R) to pan, q to quit (?,t,s flags)", + "Use ! to shell-out. Toggle legend:?, timer:t, scroll mark:s.", + "Use +,- (or j,k) to grow/shrink the panner vertically.", + "Use <,> (or h,l) to grow/shrink the panner horizontally." + }; + int n = (SIZEOF(legend) - (LINES - line)); + if (line < LINES && (n >= 0)) { + move(line, 0); + if (show_panner_legend) + printw("%s", legend[n]); + clrtoeol(); + return show_panner_legend; + } + return FALSE; } -static void panner_h_cleanup(int from_y, int from_x, int to_x) +static void +panner_h_cleanup(int from_y, int from_x, int to_x) { - if (!panner_legend(from_y)) - do_h_line(from_y, from_x, ' ', to_x); + if (!panner_legend(from_y)) + do_h_line(from_y, from_x, ' ', to_x); } -static void panner_v_cleanup(int from_y, int from_x, int to_y) +static void +panner_v_cleanup(int from_y, int from_x, int to_y) { - if (!panner_legend(from_y)) - do_v_line(from_y, from_x, ' ', to_y); + if (!panner_legend(from_y)) + do_v_line(from_y, from_x, ' ', to_y); } -static void panner(WINDOW *pad, - int top_x, int top_y, int porty, int portx, - int (*pgetc)(WINDOW *)) +static void +panner(WINDOW *pad, + int top_x, int top_y, int porty, int portx, + int (*pgetc) (WINDOW *)) { #if HAVE_GETTIMEOFDAY struct timeval before, after; @@ -1892,13 +2005,16 @@ static void panner(WINDOW *pad, * the port size of the pad to accommodate this. Ncurses automatically * resizes all of the normal windows to fit on the new screen. */ - if (top_x > COLS) top_x = COLS; - if (portx > COLS) portx = COLS; - if (top_y > LINES) top_y = LINES; - if (porty > LINES) porty = LINES; + if (top_x > COLS) + top_x = COLS; + if (portx > COLS) + portx = COLS; + if (top_y > LINES) + top_y = LINES; + if (porty > LINES) + porty = LINES; #endif - switch(c) - { + switch (c) { case KEY_REFRESH: erase(); @@ -1915,7 +2031,7 @@ static void panner(WINDOW *pad, case 't': timing = !timing; if (!timing) - panner_legend(LINES-1); + panner_legend(LINES - 1); break; #endif case 's': @@ -1925,41 +2041,37 @@ static void panner(WINDOW *pad, /* Move the top-left corner of the pad, keeping the bottom-right * corner fixed. */ - case 'h': /* increase-columns: move left edge to left */ + case 'h': /* increase-columns: move left edge to left */ if (top_x <= 0) beep(); - else - { + else { panner_v_cleanup(top_y, top_x, porty); top_x--; } break; - case 'j': /* decrease-lines: move top-edge down */ + case 'j': /* decrease-lines: move top-edge down */ if (top_y >= porty) beep(); - else - { + else { panner_h_cleanup(top_y - 1, top_x - (top_x > 0), portx); top_y++; } break; - case 'k': /* increase-lines: move top-edge up */ + case 'k': /* increase-lines: move top-edge up */ if (top_y <= 0) beep(); - else - { + else { top_y--; panner_h_cleanup(top_y, top_x, portx); } break; - case 'l': /* decrease-columns: move left-edge to right */ + case 'l': /* decrease-columns: move left-edge to right */ if (top_x >= portx) beep(); - else - { + else { panner_v_cleanup(top_y - (top_y > 0), top_x - 1, porty); top_x++; } @@ -1968,47 +2080,43 @@ static void panner(WINDOW *pad, /* Move the bottom-right corner of the pad, keeping the top-left * corner fixed. */ - case KEY_IC: /* increase-columns: move right-edge to right */ + case KEY_IC: /* increase-columns: move right-edge to right */ if (portx >= pxmax || portx >= COLS) beep(); - else - { + else { panner_v_cleanup(top_y - (top_y > 0), portx - 1, porty); ++portx; } break; - case KEY_IL: /* increase-lines: move bottom-edge down */ + case KEY_IL: /* increase-lines: move bottom-edge down */ if (porty >= pymax || porty >= LINES) beep(); - else - { + else { panner_h_cleanup(porty - 1, top_x - (top_x > 0), portx); ++porty; } break; - case KEY_DC: /* decrease-columns: move bottom edge up */ + case KEY_DC: /* decrease-columns: move bottom edge up */ if (portx <= top_x) beep(); - else - { + else { portx--; panner_v_cleanup(top_y - (top_y > 0), portx, porty); } break; - case KEY_DL: /* decrease-lines */ + case KEY_DL: /* decrease-lines */ if (porty <= top_y) beep(); - else - { + else { porty--; panner_h_cleanup(porty, top_x - (top_x > 0), portx); } break; - case KEY_LEFT: /* pan leftwards */ + case KEY_LEFT: /* pan leftwards */ if (basex > 0) basex--; else @@ -2022,20 +2130,34 @@ static void panner(WINDOW *pad, beep(); break; - case KEY_UP: /* pan upwards */ + case KEY_UP: /* pan upwards */ if (basey > 0) basey--; else beep(); break; - case KEY_DOWN: /* pan downwards */ + case KEY_DOWN: /* pan downwards */ if (basey + porty - (pxmax > portx) < pymax) basey++; else beep(); break; + case 'H': + case KEY_HOME: + case KEY_FIND: + basey = 0; + break; + + case 'E': + case KEY_END: + case KEY_SELECT: + basey = pymax - porty; + if (basey < 0) + basey = 0; + break; + default: beep(); break; @@ -2046,11 +2168,11 @@ static void panner(WINDOW *pad, do_h_line(top_y - 1, top_x, ACS_HLINE, portx); if (scrollers && (pxmax > portx - 1)) { - int length = (portx - top_x - 1); + int length = (portx - top_x - 1); float ratio = ((float) length) / ((float) pxmax); - lowend = (int)(top_x + (basex * ratio)); - highend = (int)(top_x + ((basex + length) * ratio)); + lowend = (int) (top_x + (basex * ratio)); + highend = (int) (top_x + ((basex + length) * ratio)); do_h_line(porty - 1, top_x, ACS_HLINE, lowend); if (highend < portx) { @@ -2059,24 +2181,24 @@ static void panner(WINDOW *pad, attroff(A_REVERSE); do_h_line(porty - 1, highend + 1, ACS_HLINE, portx); } - } else + } else do_h_line(porty - 1, top_x, ACS_HLINE, portx); if (scrollers && (pymax > porty - 1)) { - int length = (porty - top_y - 1); + int length = (porty - top_y - 1); float ratio = ((float) length) / ((float) pymax); - lowend = (int)(top_y + (basey * ratio)); - highend = (int)(top_y + ((basey + length) * ratio)); + lowend = (int) (top_y + (basey * ratio)); + highend = (int) (top_y + ((basey + length) * ratio)); do_v_line(top_y, portx - 1, ACS_VLINE, lowend); - if (highend < porty) { + if (highend < porty) { attron(A_REVERSE); do_v_line(lowend, portx - 1, ' ', highend + 1); attroff(A_REVERSE); do_v_line(highend + 1, portx - 1, ACS_VLINE, porty); } - } else + } else do_v_line(top_y, portx - 1, ACS_VLINE, porty); mvaddch(top_y - 1, portx - 1, ACS_URCORNER); @@ -2089,21 +2211,21 @@ static void panner(WINDOW *pad, wnoutrefresh(stdscr); pnoutrefresh(pad, - basey, basex, - top_y, top_x, - porty - (pxmax > portx) - 1, - portx - (pymax > porty) - 1); + basey, basex, + top_y, top_x, + porty - (pxmax > portx) - 1, + portx - (pymax > porty) - 1); doupdate(); #if HAVE_GETTIMEOFDAY if (timing) { - double elapsed; - gettimeofday(&after, 0); - elapsed = (after.tv_sec + after.tv_usec / 1.0e6) - - (before.tv_sec + before.tv_usec / 1.0e6); - move(LINES-1, COLS-20); - printw("Secs: %2.03f", elapsed); - refresh(); + double elapsed; + gettimeofday(&after, 0); + elapsed = (after.tv_sec + after.tv_usec / 1.0e6) + - (before.tv_sec + before.tv_usec / 1.0e6); + move(LINES - 1, COLS - 20); + printw("Secs: %2.03f", elapsed); + refresh(); } #endif @@ -2114,47 +2236,69 @@ static void panner(WINDOW *pad, } static -int padgetch(WINDOW *win) +int +padgetch(WINDOW *win) { - int c; + int c; - switch(c = wGetchar(win)) - { - case '!': ShellOut(FALSE); return KEY_REFRESH; - case CTRL('r'): endwin(); refresh(); return KEY_REFRESH; - case CTRL('l'): return KEY_REFRESH; - case 'U': return(KEY_UP); - case 'D': return(KEY_DOWN); - case 'R': return(KEY_RIGHT); - case 'L': return(KEY_LEFT); - case '+': return(KEY_IL); - case '-': return(KEY_DL); - case '>': return(KEY_IC); - case '<': return(KEY_DC); - case ERR: /* FALLTHRU */ - case 'q': return(KEY_EXIT); - default: return(c); + switch (c = wGetchar(win)) { + case '!': + ShellOut(FALSE); + return KEY_REFRESH; + case CTRL('r'): + endwin(); + refresh(); + return KEY_REFRESH; + case CTRL('l'): + return KEY_REFRESH; + case 'U': + return (KEY_UP); + case 'D': + return (KEY_DOWN); + case 'R': + return (KEY_RIGHT); + case 'L': + return (KEY_LEFT); + case '+': + return (KEY_IL); + case '-': + return (KEY_DL); + case '>': + return (KEY_IC); + case '<': + return (KEY_DC); + case ERR: /* FALLTHRU */ + case 'q': + return (KEY_EXIT); + default: + return (c); } } -static void demo_pad(void) +#define PAD_HIGH 200 +#define PAD_WIDE 200 + +static void +demo_pad(void) /* Demonstrate pads. */ { int i, j; unsigned gridcount = 0; - WINDOW *panpad = newpad(200, 200); + WINDOW *panpad = newpad(PAD_HIGH, PAD_WIDE); - for (i = 0; i < 200; i++) - { - for (j = 0; j < 200; j++) - if (i % GRIDSIZE == 0 && j % GRIDSIZE == 0) - { + if (panpad == 0) { + Cannot("cannot create requested pad"); + return; + } + + for (i = 0; i < PAD_HIGH; i++) { + for (j = 0; j < PAD_WIDE; j++) + if (i % GRIDSIZE == 0 && j % GRIDSIZE == 0) { if (i == 0 || j == 0) waddch(panpad, '+'); else - waddch(panpad, (chtype)('A' + (gridcount++ % 26))); - } - else if (i % GRIDSIZE == 0) + waddch(panpad, (chtype) ('A' + (gridcount++ % 26))); + } else if (i % GRIDSIZE == 0) waddch(panpad, '-'); else if (j % GRIDSIZE == 0) waddch(panpad, '|'); @@ -2172,7 +2316,7 @@ static void demo_pad(void) * We'll still be able to widen it during a test, since that's required * for testing boundaries. */ - panner(panpad, 2, 2, LINES - 5, COLS-15, padgetch); + panner(panpad, 2, 2, LINES - 5, COLS - 15, padgetch); delwin(panpad); endwin(); @@ -2186,7 +2330,8 @@ static void demo_pad(void) * ****************************************************************************/ -static void Continue (WINDOW *win) +static void +Continue(WINDOW *win) { noecho(); wmove(win, 10, 1); @@ -2195,32 +2340,29 @@ static void Continue (WINDOW *win) wGetchar(win); } -static void flushinp_test(WINDOW *win) +static void +flushinp_test(WINDOW *win) /* Input test, adapted from John Burnell's PDCurses tester */ { int w, h, bx, by, sw, sh, i; WINDOW *subWin; - wclear (win); + wclear(win); - getmaxyx(win, h, w); + getmaxyx(win, h, w); getbegyx(win, by, bx); sw = w / 3; sh = h / 3; - if((subWin = subwin(win, sh, sw, by + h - sh - 2, bx + w - sw - 2)) == 0) - return; + if ((subWin = subwin(win, sh, sw, by + h - sh - 2, bx + w - sw - 2)) == 0) + return; #ifdef A_COLOR - if (has_colors()) - { - init_pair(2,COLOR_CYAN,COLOR_BLUE); - wattrset(subWin, COLOR_PAIR(2) | A_BOLD); + if (has_colors()) { + init_pair(2, COLOR_CYAN, COLOR_BLUE); + wbkgd(subWin, COLOR_PAIR(2) | ' '); } - else - wattrset(subWin, A_BOLD); -#else - wattrset(subWin, A_BOLD); #endif + wattrset(subWin, A_BOLD); box(subWin, ACS_VLINE, ACS_HLINE); mvwaddstr(subWin, 2, 1, "This is a subwindow"); wrefresh(win); @@ -2237,29 +2379,28 @@ static void flushinp_test(WINDOW *win) mvwaddstr(win, 2, 1, "Type random keys for 5 seconds."); mvwaddstr(win, 3, 1, - "These should be discarded (not echoed) after the subwindow goes away."); + "These should be discarded (not echoed) after the subwindow goes away."); wrefresh(win); - for (i = 0; i < 5; i++) - { - mvwprintw (subWin, 1, 1, "Time = %d", i); + for (i = 0; i < 5; i++) { + mvwprintw(subWin, 1, 1, "Time = %d", i); wrefresh(subWin); napms(1000); flushinp(); } - delwin (subWin); + delwin(subWin); werase(win); flash(); wrefresh(win); napms(1000); mvwaddstr(win, 2, 1, - "If you were still typing when the window timer expired,"); + "If you were still typing when the window timer expired,"); mvwaddstr(win, 3, 1, - "or else you typed nothing at all while it was running,"); + "or else you typed nothing at all while it was running,"); mvwaddstr(win, 4, 1, - "test was invalid. You'll see garbage or nothing at all. "); + "test was invalid. You'll see garbage or nothing at all. "); mvwaddstr(win, 6, 1, "Press a key"); wmove(win, 9, 10); wrefresh(win); @@ -2267,7 +2408,7 @@ static void flushinp_test(WINDOW *win) wGetchar(win); flushinp(); mvwaddstr(win, 12, 0, - "If you see any key other than what you typed, flushinp() is broken."); + "If you see any key other than what you typed, flushinp() is broken."); Continue(win); wmove(win, 9, 10); @@ -2276,7 +2417,7 @@ static void flushinp_test(WINDOW *win) wmove(win, 12, 0); clrtoeol(); waddstr(win, - "What you typed should now have been deleted; if not, wdelch() failed."); + "What you typed should now have been deleted; if not, wdelch() failed."); Continue(win); cbreak(); @@ -2293,66 +2434,69 @@ static void flushinp_test(WINDOW *win) #define MENU_Y 8 #define MENU_X 8 -static int menu_virtualize(int c) +static int +menu_virtualize(int c) { if (c == '\n' || c == KEY_EXIT) - return(MAX_COMMAND + 1); + return (MAX_COMMAND + 1); else if (c == 'u') - return(REQ_SCR_ULINE); + return (REQ_SCR_ULINE); else if (c == 'd') - return(REQ_SCR_DLINE); + return (REQ_SCR_DLINE); else if (c == 'b' || c == KEY_NPAGE) - return(REQ_SCR_UPAGE); + return (REQ_SCR_UPAGE); else if (c == 'f' || c == KEY_PPAGE) - return(REQ_SCR_DPAGE); + return (REQ_SCR_DPAGE); else if (c == 'n' || c == KEY_DOWN) - return(REQ_NEXT_ITEM); + return (REQ_NEXT_ITEM); else if (c == 'p' || c == KEY_UP) - return(REQ_PREV_ITEM); + return (REQ_PREV_ITEM); else if (c == ' ') - return(REQ_TOGGLE_ITEM); + return (REQ_TOGGLE_ITEM); else { if (c != KEY_MOUSE) beep(); - return(c); + return (c); } } static const char *animals[] = { "Lions", "Tigers", "Bears", "(Oh my!)", "Newts", "Platypi", "Lemurs", - (char *)0 + (char *) 0 }; -static void menu_test(void) +static void +menu_test(void) { - MENU *m; - ITEM *items[SIZEOF(animals)]; - ITEM **ip = items; - const char **ap; - int mrows, mcols, c; - WINDOW *menuwin; + MENU *m; + ITEM *items[SIZEOF(animals)]; + ITEM **ip = items; + const char **ap; + int mrows, mcols, c; + WINDOW *menuwin; #ifdef NCURSES_MOUSE_VERSION - mousemask(ALL_MOUSE_EVENTS, (mmask_t *)0); + mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0); #endif mvaddstr(0, 0, "This is the menu test:"); mvaddstr(2, 0, " Use up and down arrow to move the select bar."); mvaddstr(3, 0, " 'n' and 'p' act like arrows."); - mvaddstr(4, 0, " 'b' and 'f' scroll up/down (page), 'u' and 'd' (line)."); + mvaddstr(4, 0, + " 'b' and 'f' scroll up/down (page), 'u' and 'd' (line)."); mvaddstr(5, 0, " Press return to exit."); refresh(); for (ap = animals; *ap; ap++) *ip++ = new_item(*ap, ""); - *ip = (ITEM *)0; + *ip = (ITEM *) 0; m = new_menu(items); - set_menu_format(m, (SIZEOF(animals)+1)/2, 1); + set_menu_format(m, (SIZEOF(animals) + 1) / 2, 1); scale_menu(m, &mrows, &mcols); - menuwin = newwin(mrows + 2, mcols + 2, MENU_Y, MENU_X); + menuwin = newwin(mrows + 2, mcols + 2, MENU_Y, MENU_X); set_menu_win(m, menuwin); keypad(menuwin, TRUE); box(menuwin, 0, 0); @@ -2368,7 +2512,7 @@ static void menu_test(void) } (void) mvprintw(LINES - 2, 0, - "You chose: %s\n", item_name(current_item(m))); + "You chose: %s\n", item_name(current_item(m))); (void) addstr("Press any key to continue..."); wGetchar(stdscr); @@ -2379,17 +2523,18 @@ static void menu_test(void) for (ip = items; *ip; ip++) free_item(*ip); #ifdef NCURSES_MOUSE_VERSION - mousemask(0, (mmask_t *)0); + mousemask(0, (mmask_t *) 0); #endif } #ifdef TRACE #define T_TBL(name) { #name, name } static struct { - const char *name; - int mask; + const char *name; + int mask; } t_tbl[] = { - T_TBL(TRACE_DISABLE), + + T_TBL(TRACE_DISABLE), T_TBL(TRACE_TIMES), T_TBL(TRACE_TPUTS), T_TBL(TRACE_UPDATE), @@ -2402,41 +2547,45 @@ static struct { T_TBL(TRACE_BITS), T_TBL(TRACE_ICALLS), T_TBL(TRACE_CCALLS), + T_TBL(TRACE_DATABASE), T_TBL(TRACE_MAXIMUM), - { (char *)0, 0 } + { + (char *) 0, 0 + } }; -static char *tracetrace(int tlevel) +static char * +tracetrace(int tlevel) { - static char *buf; - int n; + static char *buf; + int n; if (buf == 0) { size_t need = 12; for (n = 0; t_tbl[n].name != 0; n++) need += strlen(t_tbl[n].name) + 2; - buf = (char *)malloc(need); + buf = (char *) malloc(need); } sprintf(buf, "0x%02x = {", tlevel); if (tlevel == 0) { sprintf(buf + strlen(buf), "%s, ", t_tbl[0].name); } else { for (n = 1; t_tbl[n].name != 0; n++) - if ((tlevel & t_tbl[n].mask) == t_tbl[n].mask) - { + if ((tlevel & t_tbl[n].mask) == t_tbl[n].mask) { strcat(buf, t_tbl[n].name); strcat(buf, ", "); } } if (buf[strlen(buf) - 2] == ',') buf[strlen(buf) - 2] = '\0'; - return(strcat(buf,"}")); + return (strcat(buf, "}")); } /* fake a dynamically reconfigurable menu using the 0th entry to deselect * the others */ -static int run_trace_menu(MENU *m) +static int +run_trace_menu(MENU * m) { ITEM **items; ITEM *i, **p; @@ -2451,14 +2600,14 @@ static int run_trace_menu(MENU *m) i = current_item(m); if (i == items[0]) { if (item_value(i)) { - for (p = items+1; *p != 0; p++) + for (p = items + 1; *p != 0; p++) if (item_value(*p)) { set_item_value(*p, FALSE); changed = TRUE; } } } else { - for (p = items+1; *p != 0; p++) + for (p = items + 1; *p != 0; p++) if (item_value(*p)) { set_item_value(items[0], FALSE); changed = TRUE; @@ -2471,15 +2620,16 @@ static int run_trace_menu(MENU *m) } } -static void trace_set(void) +static void +trace_set(void) /* interactively set the trace level */ { - MENU *m; - ITEM *items[SIZEOF(t_tbl)]; - ITEM **ip = items; - int mrows, mcols, newtrace; - int n; - WINDOW *menuwin; + MENU *m; + ITEM *items[SIZEOF(t_tbl)]; + ITEM **ip = items; + int mrows, mcols, newtrace; + int n; + WINDOW *menuwin; mvaddstr(0, 0, "Interactively set trace level:"); mvaddstr(2, 0, " Press space bar to toggle a selection."); @@ -2491,7 +2641,7 @@ static void trace_set(void) for (n = 0; t_tbl[n].name != 0; n++) *ip++ = new_item(t_tbl[n].name, ""); - *ip = (ITEM *)0; + *ip = (ITEM *) 0; m = new_menu(items); @@ -2499,7 +2649,7 @@ static void trace_set(void) scale_menu(m, &mrows, &mcols); menu_opts_off(m, O_ONEVALUE); - menuwin = newwin(mrows + 2, mcols + 2, MENU_Y, MENU_X); + menuwin = newwin(mrows + 2, mcols + 2, MENU_Y, MENU_X); set_menu_win(m, menuwin); keypad(menuwin, TRUE); box(menuwin, 0, 0); @@ -2527,7 +2677,7 @@ static void trace_set(void) _tracef("trace level interactively set to %s", tracetrace(_nc_tracing)); (void) mvprintw(LINES - 2, 0, - "Trace level is %s\n", tracetrace(_nc_tracing)); + "Trace level is %s\n", tracetrace(_nc_tracing)); (void) addstr("Press any key to continue..."); wGetchar(stdscr); @@ -2547,38 +2697,39 @@ static void trace_set(void) * ****************************************************************************/ #if USE_LIBFORM -static FIELD *make_label(int frow, int fcol, NCURSES_CONST char *label) +static FIELD * +make_label(int frow, int fcol, NCURSES_CONST char *label) { - FIELD *f = new_field(1, strlen(label), frow, fcol, 0, 0); + FIELD *f = new_field(1, strlen(label), frow, fcol, 0, 0); - if (f) - { + if (f) { set_field_buffer(f, 0, label); set_field_opts(f, field_opts(f) & ~O_ACTIVE); } - return(f); + return (f); } -static FIELD *make_field(int frow, int fcol, int rows, int cols, bool secure) +static FIELD * +make_field(int frow, int fcol, int rows, int cols, bool secure) { - FIELD *f = new_field(rows, cols, frow, fcol, 0, secure ? 1 : 0); + FIELD *f = new_field(rows, cols, frow, fcol, 0, secure ? 1 : 0); if (f) { set_field_back(f, A_UNDERLINE); - set_field_userptr(f, (void *)0); + set_field_userptr(f, (void *) 0); } - return(f); + return (f); } -static void display_form(FORM *f) +static void +display_form(FORM * f) { - WINDOW *w; + WINDOW *w; int rows, cols; scale_form(f, &rows, &cols); - if ((w =newwin(rows+2, cols+4, 0, 0)) != (WINDOW *)0) - { + if ((w = newwin(rows + 2, cols + 4, 0, 0)) != (WINDOW *) 0) { set_form_win(f, w); set_form_sub(f, derwin(w, rows, cols, 1, 2)); box(w, 0, 0); @@ -2589,10 +2740,11 @@ static void display_form(FORM *f) wrefresh(w); } -static void erase_form(FORM *f) +static void +erase_form(FORM * f) { - WINDOW *w = form_win(f); - WINDOW *s = form_sub(f); + WINDOW *w = form_win(f); + WINDOW *s = form_sub(f); unpost_form(f); werase(w); @@ -2601,17 +2753,18 @@ static void erase_form(FORM *f) delwin(w); } -static int edit_secure(FIELD *me, int c) +static int +edit_secure(FIELD * me, int c) { - int rows, cols, frow, fcol, nbuf; + int rows, cols, frow, fcol, nrow, nbuf; - if (field_info(me, &rows, &cols, &frow, &fcol, (int *)0, &nbuf) == E_OK - && nbuf > 0) { + if (field_info(me, &rows, &cols, &frow, &fcol, &nrow, &nbuf) == E_OK + && nbuf > 0) { char temp[80]; long len; strcpy(temp, field_buffer(me, 1)); - len = (long)(char *) field_userptr(me); + len = (long) (char *) field_userptr(me); if (c <= KEY_MAX) { if (isgraph(c)) { temp[len++] = c; @@ -2652,62 +2805,137 @@ static int edit_secure(FIELD *me, int c) temp[--len] = 0; set_field_buffer(me, 1, temp); } - break; + break; } } - set_field_userptr(me, (void *)len); - } - return c; + set_field_userptr(me, (void *) len); + } + return c; } -static int form_virtualize(FORM *f, WINDOW *w) +static int +form_virtualize(FORM * f, WINDOW *w) { static const struct { int code; int result; } lookup[] = { - { CTRL('A'), REQ_NEXT_CHOICE }, - { CTRL('B'), REQ_PREV_WORD }, - { CTRL('C'), REQ_CLR_EOL }, - { CTRL('D'), REQ_DOWN_FIELD }, - { CTRL('E'), REQ_END_FIELD }, - { CTRL('F'), REQ_NEXT_PAGE }, - { CTRL('G'), REQ_DEL_WORD }, - { CTRL('H'), REQ_DEL_PREV }, - { CTRL('I'), REQ_INS_CHAR }, - { CTRL('K'), REQ_CLR_EOF }, - { CTRL('L'), REQ_LEFT_FIELD }, - { CTRL('M'), REQ_NEW_LINE }, - { CTRL('N'), REQ_NEXT_FIELD }, - { CTRL('O'), REQ_INS_LINE }, - { CTRL('P'), REQ_PREV_FIELD }, - { CTRL('R'), REQ_RIGHT_FIELD }, - { CTRL('S'), REQ_BEG_FIELD }, - { CTRL('U'), REQ_UP_FIELD }, - { CTRL('V'), REQ_DEL_CHAR }, - { CTRL('W'), REQ_NEXT_WORD }, - { CTRL('X'), REQ_CLR_FIELD }, - { CTRL('Y'), REQ_DEL_LINE }, - { CTRL('Z'), REQ_PREV_CHOICE }, - { ESCAPE, MAX_FORM_COMMAND + 1 }, - { KEY_BACKSPACE, REQ_DEL_PREV }, - { KEY_DOWN, REQ_DOWN_CHAR }, - { KEY_END, REQ_LAST_FIELD }, - { KEY_HOME, REQ_FIRST_FIELD }, - { KEY_LEFT, REQ_LEFT_CHAR }, - { KEY_LL, REQ_LAST_FIELD }, - { KEY_NEXT, REQ_NEXT_FIELD }, - { KEY_NPAGE, REQ_NEXT_PAGE }, - { KEY_PPAGE, REQ_PREV_PAGE }, - { KEY_PREVIOUS, REQ_PREV_FIELD }, - { KEY_RIGHT, REQ_RIGHT_CHAR }, - { KEY_UP, REQ_UP_CHAR }, - { QUIT, MAX_FORM_COMMAND + 1 } + { + CTRL('A'), REQ_NEXT_CHOICE + }, + { + CTRL('B'), REQ_PREV_WORD + }, + { + CTRL('C'), REQ_CLR_EOL + }, + { + CTRL('D'), REQ_DOWN_FIELD + }, + { + CTRL('E'), REQ_END_FIELD + }, + { + CTRL('F'), REQ_NEXT_PAGE + }, + { + CTRL('G'), REQ_DEL_WORD + }, + { + CTRL('H'), REQ_DEL_PREV + }, + { + CTRL('I'), REQ_INS_CHAR + }, + { + CTRL('K'), REQ_CLR_EOF + }, + { + CTRL('L'), REQ_LEFT_FIELD + }, + { + CTRL('M'), REQ_NEW_LINE + }, + { + CTRL('N'), REQ_NEXT_FIELD + }, + { + CTRL('O'), REQ_INS_LINE + }, + { + CTRL('P'), REQ_PREV_FIELD + }, + { + CTRL('R'), REQ_RIGHT_FIELD + }, + { + CTRL('S'), REQ_BEG_FIELD + }, + { + CTRL('U'), REQ_UP_FIELD + }, + { + CTRL('V'), REQ_DEL_CHAR + }, + { + CTRL('W'), REQ_NEXT_WORD + }, + { + CTRL('X'), REQ_CLR_FIELD + }, + { + CTRL('Y'), REQ_DEL_LINE + }, + { + CTRL('Z'), REQ_PREV_CHOICE + }, + { + ESCAPE, MAX_FORM_COMMAND + 1 + }, + { + KEY_BACKSPACE, REQ_DEL_PREV + }, + { + KEY_DOWN, REQ_DOWN_CHAR + }, + { + KEY_END, REQ_LAST_FIELD + }, + { + KEY_HOME, REQ_FIRST_FIELD + }, + { + KEY_LEFT, REQ_LEFT_CHAR + }, + { + KEY_LL, REQ_LAST_FIELD + }, + { + KEY_NEXT, REQ_NEXT_FIELD + }, + { + KEY_NPAGE, REQ_NEXT_PAGE + }, + { + KEY_PPAGE, REQ_PREV_PAGE + }, + { + KEY_PREVIOUS, REQ_PREV_FIELD + }, + { + KEY_RIGHT, REQ_RIGHT_CHAR + }, + { + KEY_UP, REQ_UP_CHAR + }, + { + QUIT, MAX_FORM_COMMAND + 1 + } }; - static int mode = REQ_INS_MODE; - int c = wGetchar(w); - unsigned n; + static int mode = REQ_INS_MODE; + int c = wGetchar(w); + unsigned n; FIELD *me = current_field(f); if (c == CTRL(']')) { @@ -2717,7 +2945,7 @@ static int form_virtualize(FORM *f, WINDOW *w) mode = REQ_INS_MODE; c = mode; } else { - for (n = 0; n < sizeof(lookup)/sizeof(lookup[0]); n++) { + for (n = 0; n < sizeof(lookup) / sizeof(lookup[0]); n++) { if (lookup[n].code == c) { c = lookup[n].result; break; @@ -2739,25 +2967,26 @@ static int form_virtualize(FORM *f, WINDOW *w) return c; } -static int my_form_driver(FORM *form, int c) +static int +my_form_driver(FORM * form, int c) { if (c == (MAX_FORM_COMMAND + 1) - && form_driver(form, REQ_VALIDATION) == E_OK) - return(TRUE); - else - { + && form_driver(form, REQ_VALIDATION) == E_OK) + return (TRUE); + else { beep(); - return(FALSE); + return (FALSE); } } -static void demo_forms(void) +static void +demo_forms(void) { - WINDOW *w; - FORM *form; - FIELD *f[12], *secure; - int finished = 0, c; - unsigned n = 0; + WINDOW *w; + FORM *form; + FIELD *f[12], *secure; + int finished = 0, c; + unsigned n = 0; move(18, 0); addstr("Defined form-traversal keys: ^Q/ESC- exit form\n"); @@ -2788,8 +3017,8 @@ static void demo_forms(void) f[n++] = make_field(6, 0, 4, 46, FALSE); f[n++] = make_label(5, 20, "Password:"); secure = - f[n++] = make_field(5, 30, 1, 9, TRUE); - f[n++] = (FIELD *)0; + f[n++] = make_field(5, 30, 1, 9, TRUE); + f[n++] = (FIELD *) 0; form = new_form(f); @@ -2797,10 +3026,9 @@ static void demo_forms(void) w = form_win(form); raw(); - while (!finished) - { - switch(form_driver(form, c = form_virtualize(form, w))) - { + nonl(); /* lets us read ^M's */ + while (!finished) { + switch (form_driver(form, c = form_virtualize(form, w))) { case E_OK: mvaddstr(5, 57, field_buffer(secure, 1)); clrtoeol(); @@ -2819,10 +3047,11 @@ static void demo_forms(void) free_form(form); for (c = 0; f[c] != 0; c++) - free_field(f[c]); + free_field(f[c]); noraw(); + nl(); } -#endif /* USE_LIBFORM */ +#endif /* USE_LIBFORM */ /**************************************************************************** * @@ -2830,42 +3059,42 @@ static void demo_forms(void) * ****************************************************************************/ -static void fillwin(WINDOW *win, char ch) +static void +fillwin(WINDOW *win, char ch) { int y, x; int y1, x1; getmaxyx(win, y1, x1); - for (y = 0; y < y1; y++) - { + for (y = 0; y < y1; y++) { wmove(win, y, 0); for (x = 0; x < x1; x++) waddch(win, ch); } } -static void crosswin(WINDOW *win, char ch) +static void +crosswin(WINDOW *win, char ch) { int y, x; int y1, x1; getmaxyx(win, y1, x1); - for (y = 0; y < y1; y++) - { + for (y = 0; y < y1; y++) { for (x = 0; x < x1; x++) if (((x > (x1 - 1) / 3) && (x <= (2 * (x1 - 1)) / 3)) - || (((y > (y1 - 1) / 3) && (y <= (2 * (y1 - 1)) / 3)))) - { + || (((y > (y1 - 1) / 3) && (y <= (2 * (y1 - 1)) / 3)))) { wmove(win, y, x); waddch(win, ch); } } } -static void overlap_test(void) +static void +overlap_test(void) /* test effects of overlapping windows */ { - int ch; + int ch; WINDOW *win1 = newwin(9, 20, 3, 3); WINDOW *win2 = newwin(9, 20, 9, 16); @@ -2877,7 +3106,6 @@ static void overlap_test(void) printw("the shared region of two overlapping windows A and B. The cross\n"); printw("pattern in each window does not overlap the other.\n"); - move(18, 0); printw("a = refresh A, then B, then doupdate. b = refresh B, then A, then doupdaute\n"); printw("c = fill window A with letter A. d = fill window B with letter B.\n"); @@ -2887,8 +3115,7 @@ static void overlap_test(void) printw("^Q/ESC = terminate test."); while ((ch = Getchar()) != QUIT && ch != ESCAPE) - switch (ch) - { + switch (ch) { case 'a': /* refresh window A first, then B */ wnoutrefresh(win1); wnoutrefresh(win2); @@ -2952,8 +3179,7 @@ static bool do_single_test(const char c) /* perform a single specified test */ { - switch (c) - { + switch (c) { case 'a': getch_test(); break; @@ -3023,12 +3249,12 @@ do_single_test(const char c) #endif case 's': - overlap_test(); + overlap_test(); break; #if USE_LIBMENU && defined(TRACE) case 't': - trace_set(); + trace_set(); break; #endif @@ -3045,10 +3271,14 @@ do_single_test(const char c) static void usage(void) { - static const char *const tbl[] = { - "Usage: ncurses [options]" + static const char *const tbl[] = + { + "Usage: ncurses [options]" ,"" ,"Options:" +#ifdef NCURSES_VERSION + ," -d use default-colors if terminal supports them" +#endif ," -e fmt specify format for soft-keys test (e)" ," -f rip-off footer line (can repeat)" ," -h rip-off header line (can repeat)" @@ -3058,7 +3288,7 @@ usage(void) #endif }; size_t n; - for (n = 0; n < sizeof(tbl)/sizeof(tbl[0]); n++) + for (n = 0; n < sizeof(tbl) / sizeof(tbl[0]); n++) fprintf(stderr, "%s\n", tbl[n]); exit(EXIT_FAILURE); } @@ -3075,30 +3305,33 @@ set_terminal_modes(void) } #ifdef SIGUSR1 -static RETSIGTYPE announce_sig(int sig) +static RETSIGTYPE +announce_sig(int sig) { (void) fprintf(stderr, "Handled signal %d\r\n", sig); } #endif -static int rip_footer(WINDOW *win, int columns) +static int +rip_footer(WINDOW *win, int columns) { - wbkgd(win, A_REVERSE); - werase(win); - wmove(win, 0, 0); - wprintw(win, "footer: %d columns", columns); - wnoutrefresh(win); - return OK; + wbkgd(win, A_REVERSE); + werase(win); + wmove(win, 0, 0); + wprintw(win, "footer: %d columns", columns); + wnoutrefresh(win); + return OK; } -static int rip_header(WINDOW *win, int columns) +static int +rip_header(WINDOW *win, int columns) { - wbkgd(win, A_REVERSE); - werase(win); - wmove(win, 0, 0); - wprintw(win, "header: %d columns", columns); - wnoutrefresh(win); - return OK; + wbkgd(win, A_REVERSE); + werase(win); + wmove(win, 0, 0); + wprintw(win, "header: %d columns", columns); + wnoutrefresh(win); + return OK; } /*+------------------------------------------------------------------------- @@ -3108,23 +3341,31 @@ static int rip_header(WINDOW *win, int columns) int main(int argc, char *argv[]) { - int command, c; - int my_e_param = 1; + int command, c; + int my_e_param = 1; +#ifdef NCURSES_VERSION + bool default_colors = FALSE; +#endif #if HAVE_LOCALE_H setlocale(LC_CTYPE, ""); #endif - while ((c = getopt(argc, argv, "e:fhs:t:")) != EOF) { + while ((c = getopt(argc, argv, "de:fhs:t:")) != EOF) { switch (c) { +#ifdef NCURSES_VERSION + case 'd': + default_colors = TRUE; + break; +#endif case 'e': my_e_param = atoi(optarg); #ifdef NCURSES_VERSION if (my_e_param > 3) /* allow extended layouts */ - usage(); + usage(); #else if (my_e_param > 1) - usage(); + usage(); #endif break; case 'f': @@ -3159,7 +3400,7 @@ main(int argc, char *argv[]) trace(save_trace); #else if (!isatty(fileno(stdin))) - trace(save_trace); + trace(save_trace); #endif /* USE_LIBMENU */ #endif /* TRACE */ @@ -3176,7 +3417,13 @@ main(int argc, char *argv[]) bkgdset(BLANK); /* tests, in general, will want these modes */ - start_color(); + if (has_colors()) { + start_color(); +#ifdef NCURSES_VERSION + if (default_colors) + use_default_colors(); +#endif + } set_terminal_modes(); def_prog_mode(); @@ -3190,9 +3437,9 @@ main(int argc, char *argv[]) (void) printf("Welcome to %s. Press ? for help.\n", curses_version()); #elif defined(NCURSES_VERSION_MAJOR) && defined(NCURSES_VERSION_MINOR) && defined(NCURSES_VERSION_PATCH) (void) printf("Welcome to ncurses %d.%d.%d. Press ? for help.\n", - NCURSES_VERSION_MAJOR, - NCURSES_VERSION_MINOR, - NCURSES_VERSION_PATCH); + NCURSES_VERSION_MAJOR, + NCURSES_VERSION_MINOR, + NCURSES_VERSION_PATCH); #else (void) puts("Welcome to ncurses. Press ? for help."); #endif @@ -3226,7 +3473,7 @@ main(int argc, char *argv[]) (void) puts("? = repeat this command summary"); (void) fputs("> ", stdout); - (void) fflush(stdout); /* necessary under SVr4 curses */ + (void) fflush(stdout); /* necessary under SVr4 curses */ /* * This used to be an 'fgets()' call. However (on Linux, at least) @@ -3234,41 +3481,44 @@ main(int argc, char *argv[]) * input stream to be flushed when switching between the two. */ command = 0; - for(;;) { - char ch; - if (read(fileno(stdin), &ch, 1) <= 0) { - if (command == 0) - command = 'q'; - break; - } else if (command == 0 && !isspace(ch)) { - command = ch; - } else if (ch == '\n' || ch == '\r') { - if (command != 0) - break; - (void) fputs("> ", stdout); - (void) fflush(stdout); - } + for (;;) { + char ch; + if (read(fileno(stdin), &ch, 1) <= 0) { + if (command == 0) + command = 'q'; + break; + } else if (command == 0 && !isspace(ch)) { + command = ch; + } else if (ch == '\n' || ch == '\r') { + if (command != 0) + break; + (void) fputs("> ", stdout); + (void) fflush(stdout); + } } if (do_single_test(command)) { - /* - * This may be overkill; it's intended to reset everything back - * to the initial terminal modes so that tests don't get in - * each other's way. - */ - flushinp(); - set_terminal_modes(); - reset_prog_mode(); - clear(); - refresh(); - endwin(); - if (command == '?') { - (void) puts("This is the ncurses capability tester."); - (void) puts("You may select a test from the main menu by typing the"); - (void) puts("key letter of the choice (the letter to left of the =)"); - (void) puts("at the > prompt. The commands `x' or `q' will exit."); - } - continue; + /* + * This may be overkill; it's intended to reset everything back + * to the initial terminal modes so that tests don't get in + * each other's way. + */ + flushinp(); + set_terminal_modes(); + reset_prog_mode(); + clear(); + refresh(); + endwin(); + if (command == '?') { + (void) puts("This is the ncurses capability tester."); + (void) + puts("You may select a test from the main menu by typing the"); + (void) + puts("key letter of the choice (the letter to left of the =)"); + (void) + puts("at the > prompt. The commands `x' or `q' will exit."); + } + continue; } } while (command != 'q'); diff --git a/contrib/ncurses/test/railroad.c b/contrib/ncurses/test/railroad.c new file mode 100644 index 000000000000..d3dc2eae8024 --- /dev/null +++ b/contrib/ncurses/test/railroad.c @@ -0,0 +1,201 @@ +/**************************************************************************** + * Copyright (c) 2000 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 * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/* + * Author: Thomas E. Dickey <dickey@clark.net> 2000 + * + * $Id: railroad.c,v 1.1 2000/01/15 02:41:27 tom Exp $ + * + * A simple demo of the termcap interface. + */ +#include <test.priv.h> + +#include <termcap.h> +#include <ctype.h> +#include <signal.h> + +static char *finisC; +static char *finisS; +static char *finisU; + +static char *startC; +static char *startS; +static char *startU; + +static char *backup; + +static bool interrupted = FALSE; + +static int +outc(int c) +{ + if (interrupted) { + char tmp = c; + write(STDOUT_FILENO, &tmp, 1); + } else { + putc(c, stdout); + } + return 0; +} + +static void +PutChar(int ch) +{ + putchar(ch); + fflush(stdout); + napms(50); /* not really termcap... */ +} + +static void +Backup(void) +{ + tputs(backup != 0 ? backup : "\b", 1, outc); +} + +static void +ShowCursor(int flag) +{ + if (startC != 0 && finisC != 0) { + tputs(flag ? startC : finisC, 1, outc); + } +} + +static void +StandOut(int flag) +{ + if (startS != 0 && finisS != 0) { + tputs(flag ? startS : finisS, 1, outc); + } +} + +static void +Underline(int flag) +{ + if (startU != 0 && finisU != 0) { + tputs(flag ? startU : finisU, 1, outc); + } +} + +static void +ShowSign(char *string) +{ + int ch, first, last; + + while (*string != 0) { + ch = *string; + last = ch; + if (isalpha(ch)) { + first = isupper(ch) ? 'A' : 'a'; + } else if (isdigit(ch)) { + first = '0'; + } else { + first = ch; + } + if (first < last) { + Underline(1); + while (first < last) { + PutChar(first); + Backup(); + first++; + } + Underline(0); + } + StandOut(1); + PutChar(ch); + StandOut(0); + fflush(stdout); + string++; + } + putchar('\n'); +} + +static void +cleanup(void) +{ + Underline(0); + StandOut(0); + ShowCursor(1); +} + +static void +onsig(int n GCC_UNUSED) +{ + interrupted = TRUE; + cleanup(); + exit(EXIT_FAILURE); +} + +static void +railroad(char **args) +{ + char *name = getenv("TERM"); + char buffer[1024]; + char area[1024], *ap = area; + int j; + + if (name == 0) + name = "dumb"; + if (tgetent(buffer, name)) { + startS = tgetstr("so", &ap); + finisS = tgetstr("se", &ap); + + startU = tgetstr("us", &ap); + finisU = tgetstr("ue", &ap); + + backup = tgetstr("le", &ap); + + startC = tgetstr("ve", &ap); + finisC = tgetstr("vi", &ap); + + ShowCursor(0); + + for (j = SIGHUP; j <= SIGTERM; j++) + if (signal(j, SIG_IGN) != SIG_IGN) + signal(j, onsig); + + while (*args) { + ShowSign(*args++); + } + ShowCursor(1); + } +} + +int +main( + int argc, + char *argv[]) +{ + if (argc > 1) { + railroad(argv + 1); + } else { + static char *hello[] = + {"Hello World", 0}; + railroad(hello); + } + return EXIT_SUCCESS; +} diff --git a/contrib/ncurses/test/rain.c b/contrib/ncurses/test/rain.c index 646ab96ee639..262f87d279b9 100644 --- a/contrib/ncurses/test/rain.c +++ b/contrib/ncurses/test/rain.c @@ -1,5 +1,5 @@ /* - * $Id: rain.c,v 1.13 1999/10/23 01:31:26 tom Exp $ + * $Id: rain.c,v 1.14 1999/11/13 23:39:07 tom Exp $ */ #include <test.priv.h> @@ -42,7 +42,7 @@ float c; if (has_colors()) { int bg = COLOR_BLACK; start_color(); -#ifdef NCURSES_VERSION +#ifdef HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) bg = -1; #endif diff --git a/contrib/ncurses/test/tclock.c b/contrib/ncurses/test/tclock.c index 0c79568411be..838f45e70920 100644 --- a/contrib/ncurses/test/tclock.c +++ b/contrib/ncurses/test/tclock.c @@ -128,7 +128,7 @@ main( if (has_colors()) { start_color(); -#ifdef NCURSES_VERSION +#ifdef HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) my_bg = -1; #endif diff --git a/contrib/ncurses/test/test.priv.h b/contrib/ncurses/test/test.priv.h index 0ae433195e42..affed8d7e76a 100644 --- a/contrib/ncurses/test/test.priv.h +++ b/contrib/ncurses/test/test.priv.h @@ -29,7 +29,7 @@ /**************************************************************************** * Author: Thomas E. Dickey <dickey@clark.net> 1996 * ****************************************************************************/ -/* $Id: test.priv.h,v 1.15 1998/02/11 12:14:04 tom Exp $ */ +/* $Id: test.priv.h,v 1.16 2000/04/15 17:52:08 tom Exp $ */ #if HAVE_CONFIG_H #include <ncurses_cfg.h> #endif @@ -68,6 +68,9 @@ extern int optind; #if defined(NCURSES_VERSION) && HAVE_NC_ALLOC_H #include <nc_alloc.h> +#else +#define typeMalloc(type,n) (type *) malloc(n * sizeof(type)) +#define typeRealloc(type,n,p) (type *) realloc(p, n * sizeof(type)) #endif #ifndef ExitProgram diff --git a/contrib/ncurses/test/testcurs.c b/contrib/ncurses/test/testcurs.c index ff776570e2e8..5fa054a943a5 100644 --- a/contrib/ncurses/test/testcurs.c +++ b/contrib/ncurses/test/testcurs.c @@ -7,7 +7,7 @@ * wrs(5/28/93) -- modified to be consistent (perform identically) with either * PDCurses or under Unix System V, R4 * - * $Id: testcurs.c,v 1.19 1999/02/14 00:42:28 tom Exp $ + * $Id: testcurs.c,v 1.22 2000/06/17 23:23:34 tom Exp $ */ #include <test.priv.h> @@ -17,103 +17,102 @@ char *XCursesProgramName = "testcurs"; #endif -static int initTest (WINDOW **); -static void display_menu (int,int); -static void inputTest (WINDOW *); -static void introTest (WINDOW *); -static void outputTest (WINDOW *); -static void padTest (WINDOW *); -static void scrollTest (WINDOW *); -# if defined(PDCURSES) && !defined(XCURSES) -static void resizeTest (WINDOW *); +static int initTest(WINDOW **); +static void display_menu(int, int); +static void inputTest(WINDOW *); +static void introTest(WINDOW *); +static void outputTest(WINDOW *); +static void padTest(WINDOW *); +static void scrollTest(WINDOW *); +#if defined(PDCURSES) && !defined(XCURSES) +static void resizeTest(WINDOW *); #endif -struct commands -{ - NCURSES_CONST char *text; - void (*function)(WINDOW *); +struct commands { + NCURSES_CONST char *text; + void (*function) (WINDOW *); }; typedef struct commands COMMAND; const COMMAND command[] = { - {"Intro Test", introTest}, - {"Pad Test", padTest}, -# if defined(PDCURSES) && !defined(XCURSES) - {"Resize Test", resizeTest}, + {"Intro Test", introTest}, + {"Pad Test", padTest}, +#if defined(PDCURSES) && !defined(XCURSES) + {"Resize Test", resizeTest}, #endif - {"Scroll Test", scrollTest}, - {"Input Test", inputTest}, - {"Output Test", outputTest} + {"Scroll Test", scrollTest}, + {"Input Test", inputTest}, + {"Output Test", outputTest} }; #define MAX_OPTIONS ((sizeof(command)/sizeof(command[0]))) -int width, height; +int width, height; int main( - int argc GCC_UNUSED, - char *argv[] GCC_UNUSED) + int argc GCC_UNUSED, + char *argv[]GCC_UNUSED) { -WINDOW *win; -int key,old_option=(-1),new_option=0; -bool quit=FALSE; + WINDOW *win; + int key, old_option = (-1), new_option = 0; + bool quit = FALSE; #ifdef PDCDEBUG - PDC_debug("testcurs started\n"); + PDC_debug("testcurs started\n"); #endif - if (!initTest (&win)) return EXIT_FAILURE; + if (!initTest(&win)) + return EXIT_FAILURE; + erase(); + display_menu(old_option, new_option); + while (1) { #ifdef A_COLOR - if (has_colors()) - { - init_pair(1,COLOR_WHITE,COLOR_BLUE); - wbkgd(win, COLOR_PAIR(1)); - } - else - wbkgd(win, A_REVERSE); + if (has_colors()) { + init_pair(1, COLOR_WHITE, COLOR_BLUE); + wbkgd(win, COLOR_PAIR(1)); + } else + wbkgd(win, A_REVERSE); #else - wbkgd(win, A_REVERSE); + wbkgd(win, A_REVERSE); #endif + werase(win); + + noecho(); + keypad(stdscr, TRUE); + raw(); + key = getch(); + switch (key) { + case 10: + case 13: + case KEY_ENTER: + erase(); + refresh(); + (*command[new_option].function) (win); + erase(); + display_menu(old_option, new_option); + break; + case KEY_UP: + new_option = (new_option == 0) ? new_option : new_option - 1; + display_menu(old_option, new_option); + break; + case KEY_DOWN: + new_option = (new_option == MAX_OPTIONS - 1) ? new_option : + new_option + 1; + display_menu(old_option, new_option); + break; + case 'Q': + case 'q': + quit = TRUE; + break; + default: + break; + } + if (quit == TRUE) + break; + } - erase(); - display_menu(old_option,new_option); - while(1) - { - noecho(); - keypad(stdscr,TRUE); - raw(); - key = getch(); - switch(key) - { - case 10: - case 13: - case KEY_ENTER: - erase(); - refresh(); - (*command[new_option].function)(win); - erase(); - display_menu(old_option,new_option); - break; - case KEY_UP: - new_option = (new_option == 0) ? new_option : new_option-1; - display_menu(old_option,new_option); - break; - case KEY_DOWN: - new_option = (new_option == MAX_OPTIONS-1) ? new_option : new_option+1; - display_menu(old_option,new_option); - break; - case 'Q': - case 'q': - quit = TRUE; - break; - default: break; - } - if (quit == TRUE) - break; - } - - delwin (win); + delwin(win); endwin(); #ifdef XCURSES @@ -122,24 +121,35 @@ bool quit=FALSE; return EXIT_SUCCESS; } -static -void Continue (WINDOW *win) +static void +Continue(WINDOW *win) { - wmove(win, 10, 1); + int y1 = getmaxy(win); + int x1 = getmaxx(win); + int y0 = y1 < 10 ? y1 : 10; + int x0 = 1; + long save; + + save = mvwinch(win, y0, x1 - 1); + + mvwaddstr(win, y0, x0, " Press any key to continue"); wclrtoeol(win); - mvwaddstr(win, 10, 1, " Press any key to continue"); - wrefresh(win); + getyx(win, y0, x0); + + mvwaddch(win, y0, x1 - 1, save); + + wmove(win, y0, x0); raw(); wgetch(win); } static int -initTest (WINDOW **win) +initTest(WINDOW **win) { #ifdef PDCDEBUG PDC_debug("initTest called\n"); #endif -#ifdef NCURSES_VERSION +#ifdef TRACE trace(TRACE_MAXIMUM); #endif initscr(); @@ -148,106 +158,115 @@ initTest (WINDOW **win) #endif #ifdef A_COLOR if (has_colors()) - start_color(); + start_color(); #endif - width = 60; - height = 13; /* Create a drawing window */ - *win = newwin(height, width, (LINES-height)/2, (COLS-width)/2); - if(*win == NULL) - { - endwin(); - return 0; + width = 60; + height = 13; /* Create a drawing window */ + *win = newwin(height, width, (LINES - height) / 2, (COLS - width) / 2); + if (*win == NULL) { + endwin(); + return 0; } return 1; } static void -introTest (WINDOW *win) +introTest(WINDOW *win) { - wmove( win, height/2-5, width/2 ); - wvline( win, ACS_VLINE, 10 ); - wmove( win, height/2, width/2-10 ); - whline( win, ACS_HLINE, 20 ); + wmove(win, height / 2 - 5, width / 2); + wvline(win, ACS_VLINE, 10); + wmove(win, height / 2, width / 2 - 10); + whline(win, ACS_HLINE, 20); Continue(win); - beep (); + beep(); werase(win); box(win, ACS_VLINE, ACS_HLINE); wrefresh(win); - cbreak (); - mvwaddstr(win, 1, 1, "You should have rectangle in the middle of the screen"); + cbreak(); + mvwaddstr(win, 1, 1, + "You should have rectangle in the middle of the screen"); mvwaddstr(win, 2, 1, "You should have heard a beep"); Continue(win); return; } static void -scrollTest (WINDOW *win) +scrollTest(WINDOW *win) { int i; + int half; int OldX, OldY; NCURSES_CONST char *Message = "The window will now scroll slowly"; wclear(win); - mvwprintw (win, height - 2, 1, Message); - wrefresh (win); + getmaxyx(win, OldY, OldX); + half = OldY / 2; + mvwprintw(win, OldY - 2, 1, Message); + wrefresh(win); scrollok(win, TRUE); - for (i = 1; i <= height; i++) { - napms(250); - scroll(win); - wrefresh (win); + for (i = 1; i <= OldY; i++) { + napms(600); + scroll(win); + wrefresh(win); } - getmaxyx (win, OldY, OldX); - mvwprintw (win, 6, 1, "The top of the window will scroll"); - wmove (win, 1, 1); - wsetscrreg (win, 0, 4); + werase(win); + for (i = 1; i < OldY; i++) { + mvwprintw(win, i, 1, "Line %d", i); + } + mvwprintw(win, OldY - 2, 1, "The top of the window will scroll"); + wmove(win, 1, 1); + wsetscrreg(win, 0, half - 1); box(win, ACS_VLINE, ACS_HLINE); - wrefresh (win); - for (i = 1; i <= 5; i++) { - napms(500); - scroll(win); - wrefresh (win); + wrefresh(win); + for (i = 1; i <= half; i++) { + napms(600); + scroll(win); + box(win, ACS_VLINE, ACS_HLINE); + wrefresh(win); } - mvwprintw (win, 3, 1, "The bottom of the window will scroll"); - wmove (win, 8, 1); - wsetscrreg (win, 5, --OldY); + werase(win); + for (i = 1; i < OldY; i++) { + mvwprintw(win, i, 1, "Line %d", i); + } + mvwprintw(win, 1, 1, "The bottom of the window will scroll"); + wmove(win, OldY - 2, 1); + wsetscrreg(win, half, --OldY); box(win, ACS_VLINE, ACS_HLINE); - wrefresh (win); - for (i = 5; i <= OldY; i++) { - napms (300); - wscrl(win,-1); - wrefresh (win); + wrefresh(win); + for (i = half; i <= OldY; i++) { + napms(600); + wscrl(win, -1); + box(win, ACS_VLINE, ACS_HLINE); + wrefresh(win); } - wsetscrreg (win, 0, OldY); - + wsetscrreg(win, 0, OldY); } static void -inputTest (WINDOW *win) +inputTest(WINDOW *win) { - int w, h, bx, by, sw, sh, i, c,num; - char buffer [80]; + int w, h, bx, by, sw, sh, i, c, num; + char buffer[80]; WINDOW *subWin; - wclear (win); + wclear(win); - getmaxyx(win, h, w); + getmaxyx(win, h, w); getbegyx(win, by, bx); sw = w / 3; sh = h / 3; - if((subWin = subwin(win, sh, sw, by + h - sh - 2, bx + w - sw - 2)) == NULL) - return; + if ((subWin = subwin(win, sh, sw, by + h - sh - 2, bx + w - sw - 2)) == NULL) + return; #ifdef A_COLOR - if (has_colors()) - { - init_pair(2,COLOR_WHITE,COLOR_RED); - wbkgd(subWin, COLOR_PAIR(2) | A_BOLD); - } - else - wbkgd(subWin, A_BOLD); + if (has_colors()) { + init_pair(2, COLOR_WHITE, COLOR_RED); + wbkgd(subWin, COLOR_PAIR(2) | A_BOLD); + } else + wbkgd(subWin, A_BOLD); #else wbkgd(subWin, A_BOLD); #endif @@ -259,16 +278,16 @@ inputTest (WINDOW *win) mvwaddstr(win, 1, 1, "Pressing ^C should do nothing"); wrefresh(win); - werase (subWin); + werase(subWin); box(subWin, ACS_VLINE, ACS_HLINE); for (i = 0; i < 5; i++) { - mvwprintw (subWin, 1, 1, "Time = %d", i); - wrefresh(subWin); - napms(1000); - flushinp(); + mvwprintw(subWin, 1, 1, "Time = %d", i); + wrefresh(subWin); + napms(1000); + flushinp(); } - delwin (subWin); + delwin(subWin); werase(win); flash(); wrefresh(win); @@ -287,7 +306,7 @@ inputTest (WINDOW *win) mvwaddstr(win, 4, 1, "The character should now have been deleted"); Continue(win); - wclear (win); + wclear(win); mvwaddstr(win, 1, 1, "Press keys (or mouse buttons) to show their names"); mvwaddstr(win, 2, 1, "Press spacebar to finish"); wrefresh(win); @@ -298,49 +317,44 @@ inputTest (WINDOW *win) #if defined(PDCURSES) mouse_set(ALL_MOUSE_EVENTS); #endif - while(1) { - wmove(win,3,5); - c = wgetch(win); - wclrtobot(win); - if (c >= KEY_MIN) - wprintw(win,"Key Pressed: %s", keyname(c)); - else - if (isprint(c)) - wprintw(win,"Key Pressed: %c", c); - else - wprintw(win,"Key Pressed: %s", unctrl(c)); + while (1) { + wmove(win, 3, 5); + c = wgetch(win); + wclrtobot(win); + if (c >= KEY_MIN) + wprintw(win, "Key Pressed: %s", keyname(c)); + else if (isprint(c)) + wprintw(win, "Key Pressed: %c", c); + else + wprintw(win, "Key Pressed: %s", unctrl(c)); #if defined(PDCURSES) - if (c == KEY_MOUSE) { - int button=0; - request_mouse_pos(); - if (BUTTON_CHANGED(1)) - button = 1; - else - if (BUTTON_CHANGED(2)) - button = 2; - else - if (BUTTON_CHANGED(3)) - button = 3; - else - button = 0; - wmove(win,4,18); - wprintw(win,"Button %d: ",button); - if (MOUSE_MOVED) - wprintw(win,"moved: "); - else - if ((BUTTON_STATUS(button) & BUTTON_ACTION_MASK) == BUTTON_PRESSED) - wprintw(win,"pressed: "); - else - if ((BUTTON_STATUS(button) & BUTTON_ACTION_MASK) == BUTTON_DOUBLE_CLICKED) - wprintw(win,"double: "); - else - wprintw(win,"released: "); - wprintw(win," Position: Y: %d X: %d",MOUSE_Y_POS,MOUSE_X_POS); - } + if (c == KEY_MOUSE) { + int button = 0; + request_mouse_pos(); + if (BUTTON_CHANGED(1)) + button = 1; + else if (BUTTON_CHANGED(2)) + button = 2; + else if (BUTTON_CHANGED(3)) + button = 3; + else + button = 0; + wmove(win, 4, 18); + wprintw(win, "Button %d: ", button); + if (MOUSE_MOVED) + wprintw(win, "moved: "); + else if ((BUTTON_STATUS(button) & BUTTON_ACTION_MASK) == BUTTON_PRESSED) + wprintw(win, "pressed: "); + else if ((BUTTON_STATUS(button) & BUTTON_ACTION_MASK) == BUTTON_DOUBLE_CLICKED) + wprintw(win, "double: "); + else + wprintw(win, "released: "); + wprintw(win, " Position: Y: %d X: %d", MOUSE_Y_POS, MOUSE_X_POS); + } #endif - wrefresh(win); - if (c == ' ') - break; + wrefresh(win); + if (c == ' ') + break; } #if 0 nodelay(win, TRUE); @@ -351,9 +365,10 @@ inputTest (WINDOW *win) mouse_set(0L); #endif refresh(); - wclear (win); + wclear(win); mvwaddstr(win, 3, 2, "The window should have moved"); - mvwaddstr(win, 4, 2, "This text should have appeared without you pressing a key"); + mvwaddstr(win, 4, 2, + "This text should have appeared without you pressing a key"); mvwaddstr(win, 6, 2, "Enter a number then a string separated by space"); mvwin(win, 2, 1); wrefresh(win); @@ -361,25 +376,26 @@ inputTest (WINDOW *win) noraw(); num = 0; *buffer = 0; - mvwscanw(win, 7, 6, "%d %s", &num,buffer); - mvwprintw(win, 8, 6, "String: %s Number: %d", buffer,num); + mvwscanw(win, 7, 6, "%d %s", &num, buffer); + mvwprintw(win, 8, 6, "String: %s Number: %d", buffer, num); Continue(win); } static void -outputTest (WINDOW *win) +outputTest(WINDOW *win) { WINDOW *win1; - char Buffer [80]; + char Buffer[80]; chtype ch; int by, bx; - nl (); - wclear (win); - mvwaddstr(win, 1, 1, "You should now have a screen in the upper left corner, and this text should have wrapped"); + nl(); + wclear(win); + mvwaddstr(win, 1, 1, + "You should now have a screen in the upper left corner, and this text should have wrapped"); mvwin(win, 2, 1); - waddstr(win,"\nThis text should be down\n"); - waddstr(win, "and broken into two here ^"); + waddstr(win, "\nThis text should be down\n"); + waddstr(win, "and broken into two here ^"); Continue(win); wclear(win); @@ -392,51 +408,51 @@ outputTest (WINDOW *win) getbegyx(win, by, bx); if (LINES < 24 || COLS < 75) { - mvwaddstr(win, 5, 1, "Some tests have been skipped as they require a"); - mvwaddstr(win, 6, 1, "display of at least 24 LINES by 75 COLUMNS"); - Continue(win); + mvwaddstr(win, 5, 1, + "Some tests have been skipped as they require a"); + mvwaddstr(win, 6, 1, "display of at least 24 LINES by 75 COLUMNS"); + Continue(win); } else { - win1 = newwin(10, 50, 14, 25); - if(win1 == NULL) - { - endwin(); - return; - } + win1 = newwin(10, 50, 14, 25); + if (win1 == NULL) { + endwin(); + return; + } #ifdef A_COLOR - if (has_colors()) - { - init_pair(3,COLOR_BLUE,COLOR_WHITE); - wbkgd(win1, COLOR_PAIR(3)); - } - else - wbkgd(win1, A_NORMAL); + if (has_colors()) { + init_pair(3, COLOR_BLUE, COLOR_WHITE); + wbkgd(win1, COLOR_PAIR(3)); + } else + wbkgd(win1, A_NORMAL); #else - wbkgd(win1, A_NORMAL); + wbkgd(win1, A_NORMAL); #endif - wclear (win1); - mvwaddstr(win1, 5, 1, "This text should appear; using overlay option"); - copywin(win, win1,0,0,0,0,9,49,TRUE); + wclear(win1); + mvwaddstr(win1, 5, 1, + "This text should appear; using overlay option"); + copywin(win, win1, 0, 0, 0, 0, 9, 49, TRUE); #if defined(PDCURSES) && !defined(XCURSES) - box(win1,0xb3,0xc4); + box(win1, 0xb3, 0xc4); #else - box(win1,ACS_VLINE,ACS_HLINE); + box(win1, ACS_VLINE, ACS_HLINE); #endif - wmove(win1, 8, 26); - wrefresh(win1); - wgetch(win1); - - wclear(win1); - wattron(win1, A_BLINK); - mvwaddstr(win1, 4, 1, "This blinking text should appear in only the second window"); - wattroff(win1, A_BLINK); - mvwin(win1, by, bx); - overlay(win, win1); - mvwin(win1,14,25); - wmove(win1, 8, 26); - wrefresh(win1); - wgetch(win1); - delwin(win1); + wmove(win1, 8, 26); + wrefresh(win1); + wgetch(win1); + + wclear(win1); + wattron(win1, A_BLINK); + mvwaddstr(win1, 4, 1, + "This blinking text should appear in only the second window"); + wattroff(win1, A_BLINK); + mvwin(win1, by, bx); + overlay(win, win1); + mvwin(win1, 14, 25); + wmove(win1, 8, 26); + wrefresh(win1); + wgetch(win1); + delwin(win1); } clear(); @@ -446,74 +462,75 @@ outputTest (WINDOW *win) mvwaddstr(win, 4, 2, "Only half of the next line is visible"); mvwaddstr(win, 5, 2, "Only half of the next line is visible"); wmove(win, 6, 1); - wclrtobot (win); + wclrtobot(win); wmove(win, 5, 20); - wclrtoeol (win); + wclrtoeol(win); mvwaddstr(win, 8, 2, "This line also shouldn't appear"); wmove(win, 8, 1); wdeleteln(win); Continue(win); - wmove (win, 5, 9); - ch = winch (win); + wmove(win, 5, 9); + ch = winch(win); wclear(win); - wmove (win, 6, 2); - waddstr (win, "The next char should be l: "); - winsch (win, ch); + wmove(win, 6, 2); + waddstr(win, "The next char should be l: "); + winsch(win, ch); Continue(win); - mvwinsstr( win, 6, 2, "A1B2C3D4E5" ); + mvwinsstr(win, 6, 2, "A1B2C3D4E5"); Continue(win); wmove(win, 5, 1); - winsertln (win); + winsertln(win); mvwaddstr(win, 5, 2, "The lines below should have moved down"); Continue(win); wclear(win); wmove(win, 2, 2); - wprintw(win, "This is a formatted string in a window: %d %s\n", 42, "is it"); + wprintw(win, "This is a formatted string in a window: %d %s\n", 42, + "is it"); mvwaddstr(win, 10, 1, "Enter a string: "); wrefresh(win); noraw(); echo(); *Buffer = 0; - wscanw (win, "%s", Buffer); + wscanw(win, "%s", Buffer); printw("This is a formatted string in stdscr: %d %s\n", 42, "is it"); mvaddstr(10, 1, "Enter a string: "); *Buffer = 0; - scanw ("%s", Buffer); + scanw("%s", Buffer); if (tigetstr("cvvis") != 0) { - wclear(win); - curs_set(2); - mvwaddstr(win, 1, 1, "The cursor should appear as a block (visible)"); - Continue(win); + wclear(win); + curs_set(2); + mvwaddstr(win, 1, 1, "The cursor should appear as a block (visible)"); + Continue(win); } if (tigetstr("civis") != 0) { - wclear(win); - curs_set(0); - mvwaddstr(win, 1, 1, "The cursor should have disappeared (invisible)"); - Continue(win); + wclear(win); + curs_set(0); + mvwaddstr(win, 1, 1, + "The cursor should have disappeared (invisible)"); + Continue(win); } if (tigetstr("cnorm") != 0) { - wclear(win); - curs_set(1); - mvwaddstr(win, 1, 1, "The cursor should be an underline (normal)"); - Continue(win); + wclear(win); + curs_set(1); + mvwaddstr(win, 1, 1, "The cursor should be an underline (normal)"); + Continue(win); } - #ifdef A_COLOR - if ( has_colors() ) { - wclear(win); - mvwaddstr(win, 1, 1, "Colors should change after you press a key"); - Continue(win); - init_pair(1, COLOR_RED, COLOR_WHITE); - wrefresh(win); + if (has_colors()) { + wclear(win); + mvwaddstr(win, 1, 1, "Colors should change after you press a key"); + Continue(win); + init_pair(1, COLOR_RED, COLOR_WHITE); + wrefresh(win); } #endif @@ -521,16 +538,16 @@ outputTest (WINDOW *win) mvwaddstr(win, 1, 1, "Information About Your Terminal"); mvwaddstr(win, 3, 1, termname()); mvwaddstr(win, 4, 1, longname()); - if ( termattrs() & A_BLINK ) - mvwaddstr(win,5, 1, "This terminal supports blinking."); + if (termattrs() & A_BLINK) + mvwaddstr(win, 5, 1, "This terminal supports blinking."); else - mvwaddstr(win,5, 1, "This terminal does NOT support blinking."); + mvwaddstr(win, 5, 1, "This terminal does NOT support blinking."); - mvwaddnstr( win, 7,5, "Have a nice day!ok", 16 ); + mvwaddnstr(win, 7, 5, "Have a nice day!ok", 16); wrefresh(win); - mvwinnstr( win, 7,5, Buffer, 18 ); - mvaddstr( LINES-2, 10, Buffer ); + mvwinnstr(win, 7, 5, Buffer, 18); + mvaddstr(LINES - 2, 10, Buffer); refresh(); Continue(win); } @@ -541,35 +558,34 @@ resizeTest(WINDOW *dummy GCC_UNUSED) { WINDOW *win1; - savetty (); + savetty(); clear(); refresh(); # if defined(OS2) - resize_term(50,120); + resize_term(50, 120); # else - resize_term(50,80); + resize_term(50, 80); # endif win1 = newwin(10, 50, 14, 25); - if(win1 == NULL) - { endwin(); - return; + if (win1 == NULL) { + endwin(); + return; } #ifdef A_COLOR - if (has_colors()) - { - init_pair(3,COLOR_BLUE,COLOR_WHITE); - wattrset(win1, COLOR_PAIR(3)); - } + if (has_colors()) { + init_pair(3, COLOR_BLUE, COLOR_WHITE); + wattrset(win1, COLOR_PAIR(3)); + } #endif - wclear (win1); + wclear(win1); mvwaddstr(win1, 1, 1, "The screen may now have 50 lines"); Continue(win1); - wclear (win1); - resetty (); + wclear(win1); + resetty(); mvwaddstr(win1, 1, 1, "The screen should now be reset"); Continue(win1); @@ -585,56 +601,57 @@ resizeTest(WINDOW *dummy GCC_UNUSED) static void padTest(WINDOW *dummy GCC_UNUSED) { -WINDOW *pad, *spad; - - pad = newpad(50,100); - wattron(pad, A_REVERSE); - mvwaddstr(pad, 5, 2, "This is a new pad"); - wattrset(pad,A_NORMAL); - mvwaddstr(pad, 8, 0, "The end of this line should be truncated here:except now"); - mvwaddstr(pad,11, 1, "This line should not appear.It will now"); - wmove(pad, 10, 1); - wclrtoeol(pad); - mvwaddstr(pad, 10, 1, " Press any key to continue"); - prefresh(pad,0,0,0,0,10,45); - keypad(pad, TRUE); - raw(); - wgetch(pad); - - spad = subpad(pad,12,25,6,52); - mvwaddstr(spad, 2, 2, "This is a new subpad"); - box(spad,0,0); - prefresh(pad,0,0,0,0,15,75); - keypad(pad, TRUE); - raw(); - wgetch(pad); - - mvwaddstr(pad, 35, 2, "This is displayed at line 35 in the pad"); - mvwaddstr(pad, 40, 1, " Press any key to continue"); - prefresh(pad,30,0,0,0,10,45); - keypad(pad, TRUE); - raw(); - wgetch(pad); - - delwin(pad); + WINDOW *pad, *spad; + + pad = newpad(50, 100); + wattron(pad, A_REVERSE); + mvwaddstr(pad, 5, 2, "This is a new pad"); + wattrset(pad, A_NORMAL); + mvwaddstr(pad, 8, 0, + "The end of this line should be truncated here:except now"); + mvwaddstr(pad, 11, 1, "This line should not appear.It will now"); + wmove(pad, 10, 1); + wclrtoeol(pad); + mvwaddstr(pad, 10, 1, " Press any key to continue"); + prefresh(pad, 0, 0, 0, 0, 10, 45); + keypad(pad, TRUE); + raw(); + wgetch(pad); + + spad = subpad(pad, 12, 25, 6, 52); + mvwaddstr(spad, 2, 2, "This is a new subpad"); + box(spad, 0, 0); + prefresh(pad, 0, 0, 0, 0, 15, 75); + keypad(pad, TRUE); + raw(); + wgetch(pad); + + mvwaddstr(pad, 35, 2, "This is displayed at line 35 in the pad"); + mvwaddstr(pad, 40, 1, " Press any key to continue"); + prefresh(pad, 30, 0, 0, 0, 10, 45); + keypad(pad, TRUE); + raw(); + wgetch(pad); + + delwin(pad); } static void -display_menu(int old_option,int new_option) +display_menu(int old_option, int new_option) { - register size_t i; - - attrset(A_NORMAL); - mvaddstr(3,20,"PDCurses Test Program"); - - for (i=0;i<MAX_OPTIONS;i++) - mvaddstr(5+i,25,command[i].text); - if (old_option != (-1)) - mvaddstr(5+old_option,25,command[old_option].text); - attrset(A_REVERSE); - mvaddstr(5+new_option,25,command[new_option].text); - attrset(A_NORMAL); - mvaddstr(13,3,"Use Up and Down Arrows to select - Enter to run - Q to quit"); - refresh(); + register size_t i; + + attrset(A_NORMAL); + mvaddstr(3, 20, "PDCurses Test Program"); + + for (i = 0; i < MAX_OPTIONS; i++) + mvaddstr(5 + i, 25, command[i].text); + if (old_option != (-1)) + mvaddstr(5 + old_option, 25, command[old_option].text); + attrset(A_REVERSE); + mvaddstr(5 + new_option, 25, command[new_option].text); + attrset(A_NORMAL); + mvaddstr(13, 3, + "Use Up and Down Arrows to select - Enter to run - Q to quit"); + refresh(); } - diff --git a/contrib/ncurses/test/view.c b/contrib/ncurses/test/view.c index 8381dc8898c4..f4c2f067234d 100644 --- a/contrib/ncurses/test/view.c +++ b/contrib/ncurses/test/view.c @@ -5,7 +5,8 @@ * to test the scrolling code in ncurses. * * modified by Thomas Dickey <dickey@clark.net> July 1995 to demonstrate - * the use of 'resizeterm()'. + * the use of 'resizeterm()', and May 2000 to illustrate wide-character + * handling. * * Takes a filename argument. It's a simple file-viewer with various * scroll-up and scroll-down commands. @@ -22,7 +23,7 @@ * scroll operation worked, and the refresh() code only had to do a * partial repaint. * - * $Id: view.c,v 1.27 1998/08/22 18:33:41 tom Exp $ + * $Id: view.c,v 1.29 2000/05/21 01:43:03 tom Exp $ */ #include <test.priv.h> @@ -52,7 +53,7 @@ static RETSIGTYPE finish(int sig) GCC_NORETURN; static void show_all(void); -#if defined(SIGWINCH) && defined(TIOCGWINSZ) && defined(NCURSES_VERSION) +#if defined(SIGWINCH) && defined(TIOCGWINSZ) && defined(HAVE_RESIZETERM) #define CAN_RESIZE 1 #else #define CAN_RESIZE 0 @@ -60,33 +61,23 @@ static void show_all(void); #if CAN_RESIZE static RETSIGTYPE adjust(int sig); -static int interrupted; +static int interrupted; #endif -static int waiting; -static int shift; +static int waiting; +static int shift; +static int utf8_mode = FALSE; -static char *fname; -static char **lines; -static char **lptr; +static char *fname; +static chtype **lines; +static chtype **lptr; -#if !HAVE_STRDUP -#define strdup my_strdup -static char *strdup (char *s) +static void +usage(void) { - char *p; - - p = malloc(strlen(s)+1); - if (p) - strcpy(p,s); - return(p); -} -#endif /* not HAVE_STRDUP */ - -static void usage(void) -{ - static const char *msg[] = { - "Usage: view [options] file" + static const char *msg[] = + { + "Usage: view [options] file" ,"" ,"Options:" ," -n NUM specify maximum number of lines (default 1000)" @@ -97,27 +88,117 @@ static void usage(void) ," -t trace screen updates" ," -T NUM specify trace mask" #endif + ," -u translate UTF-8 data" }; size_t n; for (n = 0; n < SIZEOF(msg); n++) fprintf(stderr, "%s\n", msg[n]); - exit (EXIT_FAILURE); + exit(EXIT_FAILURE); +} + +static int +ch_len(chtype * src) +{ + int result = 0; + while (*src++) + result++; + return result; +} + +/* + * Allocate a string into an array of chtype's. If UTF-8 mode is + * active, translate the string accordingly. + */ +static chtype * +ch_dup(char *src) +{ + unsigned len = strlen(src); + chtype *dst = typeMalloc(chtype, len + 1); + unsigned j, k; + unsigned utf_count = 0; + unsigned utf_char = 0; + +#define UCS_REPL 0xfffd + + for (j = k = 0; j < len; j++) { + if (utf8_mode) { + unsigned c = src[j] & 0xff; + /* Combine UTF-8 into Unicode */ + if (c < 0x80) { + /* We received an ASCII character */ + if (utf_count > 0) + dst[k++] = UCS_REPL; /* prev. sequence incomplete */ + dst[k++] = c; + utf_count = 0; + } else if (c < 0xc0) { + /* We received a continuation byte */ + if (utf_count < 1) { + dst[k++] = UCS_REPL; /* ... unexpectedly */ + } else { + if (!utf_char && !((c & 0x7f) >> (7 - utf_count))) { + utf_char = UCS_REPL; + } + /* characters outside UCS-2 become UCS_REPL */ + if (utf_char > 0x03ff) { + /* value would be >0xffff */ + utf_char = UCS_REPL; + } else { + utf_char <<= 6; + utf_char |= (c & 0x3f); + } + utf_count--; + if (utf_count == 0) + dst[k++] = utf_char; + } + } else { + /* We received a sequence start byte */ + if (utf_count > 0) + dst[k++] = UCS_REPL; /* prev. sequence incomplete */ + if (c < 0xe0) { + utf_count = 1; + utf_char = (c & 0x1f); + if (!(c & 0x1e)) + utf_char = UCS_REPL; /* overlong sequence */ + } else if (c < 0xf0) { + utf_count = 2; + utf_char = (c & 0x0f); + } else if (c < 0xf8) { + utf_count = 3; + utf_char = (c & 0x07); + } else if (c < 0xfc) { + utf_count = 4; + utf_char = (c & 0x03); + } else if (c < 0xfe) { + utf_count = 5; + utf_char = (c & 0x01); + } else { + dst[k++] = UCS_REPL; + utf_count = 0; + } + } + } else { + dst[k++] = src[j]; + } + } + dst[k] = 0; + return dst; } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { -int MAXLINES = 1000; -FILE *fp; -char buf[BUFSIZ]; -int i; -char **olptr; -int done = FALSE; -int length = 0; + int MAXLINES = 1000; + FILE *fp; + char buf[BUFSIZ]; + int i; + chtype **olptr; + int done = FALSE; + int length = 0; #if CAN_RESIZE -bool use_resize = TRUE; + bool use_resize = TRUE; #endif - while ((i = getopt(argc, argv, "n:rtT:")) != EOF) { + while ((i = getopt(argc, argv, "n:rtT:u")) != EOF) { switch (i) { case 'n': if ((MAXLINES = atoi(optarg)) < 1) @@ -136,6 +217,9 @@ bool use_resize = TRUE; trace(TRACE_CALLS); break; #endif + case 'u': + utf8_mode = TRUE; + break; default: usage(); } @@ -143,7 +227,7 @@ bool use_resize = TRUE; if (optind + 1 != argc) usage(); - if ((lines = (char **)calloc(MAXLINES+2, sizeof(*lines))) == 0) + if ((lines = typeMalloc(chtype *, MAXLINES + 2)) == 0) usage(); fname = argv[optind]; @@ -152,16 +236,16 @@ bool use_resize = TRUE; return EXIT_FAILURE; } - (void) signal(SIGINT, finish); /* arrange interrupts to terminate */ + (void) signal(SIGINT, finish); /* arrange interrupts to terminate */ #if CAN_RESIZE if (use_resize) - (void) signal(SIGWINCH, adjust); /* arrange interrupts to resize */ + (void) signal(SIGWINCH, adjust); /* arrange interrupts to resize */ #endif /* slurp the file */ for (lptr = &lines[0]; (lptr - lines) < MAXLINES; lptr++) { char temp[BUFSIZ], *s, *d; - int col; + int col; if (fgets(buf, sizeof(buf), fp) == 0) break; @@ -173,9 +257,9 @@ bool use_resize = TRUE; break; } else if (*d == '\t') { col = (col | 7) + 1; - while ((d-temp) != col) + while ((d - temp) != col) *d++ = ' '; - } else if (isprint(*d)) { + } else if (isprint(*d) || utf8_mode) { col++; d++; } else { @@ -184,17 +268,17 @@ bool use_resize = TRUE; col = (d - temp); } } - *lptr = strdup(temp); + *lptr = ch_dup(temp); } (void) fclose(fp); length = lptr - lines; - (void) initscr(); /* initialize the curses library */ - keypad(stdscr, TRUE); /* enable keyboard mapping */ - (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 */ - idlok(stdscr, TRUE); /* allow use of insert/delete line */ + (void) initscr(); /* initialize the curses library */ + keypad(stdscr, TRUE); /* enable keyboard mapping */ + (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 */ + idlok(stdscr, TRUE); /* allow use of insert/delete line */ lptr = lines; while (!done) { @@ -205,7 +289,7 @@ bool use_resize = TRUE; got_number = FALSE; n = 0; - for (;;) { + for (;;) { #if CAN_RESIZE if (interrupted) adjust(0); @@ -215,20 +299,19 @@ bool use_resize = TRUE; waiting = FALSE; if ((c < 127) && isdigit(c)) { if (!got_number) { - mvprintw(0,0, "Count: "); + mvprintw(0, 0, "Count: "); clrtoeol(); } addch(c); n = 10 * n + (c - '0'); got_number = TRUE; - } - else + } else break; } if (!got_number && n == 0) n = 1; - switch(c) { + switch (c) { case KEY_DOWN: case 'n': olptr = lptr; @@ -282,7 +365,7 @@ bool use_resize = TRUE; break; #ifdef KEY_RESIZE - case KEY_RESIZE: /* ignore this; ncurses will repaint */ + case KEY_RESIZE: /* ignore this; ncurses will repaint */ break; #endif #if CAN_RESIZE @@ -297,7 +380,8 @@ bool use_resize = TRUE; finish(0); /* we're done */ } -static RETSIGTYPE finish(int sig) +static RETSIGTYPE +finish(int sig) { endwin(); exit(sig != 0 ? EXIT_FAILURE : EXIT_SUCCESS); @@ -309,54 +393,55 @@ static RETSIGTYPE finish(int sig) * Linux. 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 adjust(int sig) +static RETSIGTYPE +adjust(int sig) { - if (waiting || sig == 0) { + if (waiting || sig == 0) { struct winsize size; - if (ioctl(fileno(stdout), TIOCGWINSZ, &size) == 0) { - resizeterm(size.ws_row, size.ws_col); - wrefresh(curscr); /* Linux needs this */ - show_all(); - } - interrupted = FALSE; - } else { - interrupted = TRUE; + if (ioctl(fileno(stdout), TIOCGWINSZ, &size) == 0) { + resizeterm(size.ws_row, size.ws_col); + wrefresh(curscr); /* Linux needs this */ + show_all(); } - (void) signal(SIGWINCH, adjust); /* some systems need this */ + interrupted = FALSE; + } else { + interrupted = TRUE; + } + (void) signal(SIGWINCH, adjust); /* some systems need this */ } -#endif /* CAN_RESIZE */ +#endif /* CAN_RESIZE */ -static void show_all(void) +static void +show_all(void) { - int i; - char temp[BUFSIZ]; - char *s; + int i; + char temp[BUFSIZ]; + chtype *s; #if CAN_RESIZE - sprintf(temp, "(%3dx%3d) col %d ", LINES, COLS, shift); - i = strlen(temp); - sprintf(temp+i, "view %.*s", (int)(sizeof(temp)-7-i), fname); + sprintf(temp, "(%3dx%3d) col %d ", LINES, COLS, shift); + i = strlen(temp); + sprintf(temp + i, "view %.*s", (int) (sizeof(temp) - 7 - i), fname); #else - sprintf(temp, "view %.*s", (int)sizeof(temp)-7, fname); + sprintf(temp, "view %.*s", (int) sizeof(temp) - 7, fname); #endif - move(0,0); - printw("%.*s", COLS, temp); + move(0, 0); + printw("%.*s", COLS, temp); + clrtoeol(); + + scrollok(stdscr, FALSE); /* prevent screen from moving */ + for (i = 1; i < LINES; i++) { + move(i, 0); + printw("%3d:", (lptr + i - lines)); clrtoeol(); - - scrollok(stdscr, FALSE); /* prevent screen from moving */ - for (i = 1; i < LINES; i++) { - move(i, 0); - if ((s = lptr[i-1]) != 0 && (int)strlen(s) > shift) - printw("%3ld:%.*s", (long) (lptr+i-lines), COLS-4, s + shift); - else - printw("%3ld:", (long) (lptr+i-lines)); - clrtoeol(); + if ((s = lptr[i - 1]) != 0) { + int len = ch_len(s); + if (len > shift) + addchstr(s + shift); } - setscrreg(1, LINES-1); - scrollok(stdscr, TRUE); - refresh(); + } + setscrreg(1, LINES - 1); + scrollok(stdscr, TRUE); + refresh(); } - -/* view.c ends here */ - diff --git a/contrib/ncurses/test/worm.c b/contrib/ncurses/test/worm.c index 5f0ab5dc4a5a..43a898f84d13 100644 --- a/contrib/ncurses/test/worm.c +++ b/contrib/ncurses/test/worm.c @@ -34,16 +34,13 @@ Options: 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.26 1999/10/23 01:31:40 tom Exp $ + $Id: worm.c,v 1.30 2000/04/15 17:51:56 tom Exp $ */ #include <test.priv.h> #include <signal.h> -#define typeAlloc(type,n) (type *) malloc(n * sizeof(type)) -#define typeRealloc(type,n,p) (type *) realloc(p, n * sizeof(type)) - static chtype flavor[] = { 'O', '*', '#', '$', '%', '0', '@', @@ -185,7 +182,6 @@ main(int argc, char *argv[]) short **ref; int x, y; int n; - int ch; struct worm *w; const struct options *op; int h; @@ -255,7 +251,7 @@ main(int argc, char *argv[]) if (has_colors()) { int bg = COLOR_BLACK; start_color(); -#ifdef NCURSES_VERSION +#ifdef HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) bg = -1; #endif @@ -274,9 +270,9 @@ main(int argc, char *argv[]) } #endif /* A_COLOR */ - ref = typeAlloc(short *, LINES); + ref = typeMalloc(short *, LINES); for (y = 0; y < LINES; y++) { - ref[y] = typeAlloc(short, COLS); + ref[y] = typeMalloc(short, COLS); for (x = 0; x < COLS; x++) { ref[y][x] = 0; } @@ -289,14 +285,14 @@ main(int argc, char *argv[]) for (n = number, w = &worm[0]; --n >= 0; w++) { w->orientation = w->head = 0; - if (!(ip = typeAlloc(short, (length + 1)))) { + if (!(ip = typeMalloc(short, (length + 1)))) { fprintf(stderr, "%s: out of memory\n", *argv); return EXIT_FAILURE; } w->xpos = ip; for (x = length; --x >= 0;) *ip++ = -1; - if (!(ip = typeAlloc(short, (length + 1)))) { + if (!(ip = typeMalloc(short, (length + 1)))) { fprintf(stderr, "%s: out of memory\n", *argv); return EXIT_FAILURE; } @@ -338,6 +334,8 @@ main(int argc, char *argv[]) generation++; } #else + int ch; + if ((ch = getch()) > 0) { #ifdef KEY_RESIZE if (ch == KEY_RESIZE) { @@ -350,11 +348,11 @@ main(int argc, char *argv[]) last = COLS - 1; } if (bottom != LINES - 1) { - ref = typeRealloc(short *, LINES, ref); - for (y = COLS; y <= bottom; y++) + for (y = LINES; y <= bottom; y++) free(ref[y]); + ref = typeRealloc(short *, LINES, ref); for (y = bottom + 1; y < LINES; y++) { - ref[y] = typeAlloc(short, COLS); + ref[y] = typeMalloc(short, COLS); for (x = 0; x < COLS; x++) ref[y][x] = 0; } diff --git a/contrib/ncurses/test/xmas.c b/contrib/ncurses/test/xmas.c index 3923c771d97a..57d42923000c 100644 --- a/contrib/ncurses/test/xmas.c +++ b/contrib/ncurses/test/xmas.c @@ -92,7 +92,7 @@ /******************************************************************************/ /* - * $Id: xmas.c,v 1.12 1998/01/18 01:13:47 tom Exp $ + * $Id: xmas.c,v 1.13 1999/11/13 23:39:01 tom Exp $ */ #include <test.priv.h> @@ -183,7 +183,7 @@ int loopy; #endif if (has_colors()) { start_color(); -#ifdef NCURSES_VERSION +#ifdef HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) my_bg = -1; #endif |