From: Thomas E. Dickey Date: Sun, 8 Mar 2015 00:58:13 +0000 (+0000) Subject: ncurses 5.9 - patch 20150307 X-Git-Tag: v6.0~20 X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=commitdiff_plain;h=aefc1659d732acf7e62c0c78a443d6d8352a3c6e ncurses 5.9 - patch 20150307 + document limitations of getwin in manual page (prompted by discussion with John S Urban). + extend test/savescreen.c to demonstrate that color pair values and graphic characters can be restored using getwin. --- diff --git a/NEWS b/NEWS index 3da15ad5..7ede0a20 100644 --- a/NEWS +++ b/NEWS @@ -25,7 +25,7 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- --- $Id: NEWS,v 1.2355 2015/02/28 21:51:14 tom Exp $ +-- $Id: NEWS,v 1.2357 2015/03/07 23:38:25 tom Exp $ ------------------------------------------------------------------------------- This is a log of changes that ncurses has gone through since Zeyd started @@ -45,6 +45,12 @@ See the AUTHORS file for the corresponding full names. Changes through 1.9.9e did not credit all contributions; it is not possible to add this information. +20150307 + + document limitations of getwin in manual page (prompted by discussion + with John S Urban). + + extend test/savescreen.c to demonstrate that color pair values + and graphic characters can be restored using getwin. + 20150228 + modify win_driver.c to eliminate the constructor, to make it more usable in an application which may/may not need the console window diff --git a/VERSION b/VERSION index 3dc2f7ba..d602f6c3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5:0:9 5.9 20150228 +5:0:9 5.9 20150307 diff --git a/dist.mk b/dist.mk index d5c6057c..04650d0e 100644 --- a/dist.mk +++ b/dist.mk @@ -25,7 +25,7 @@ # use or other dealings in this Software without prior written # # authorization. # ############################################################################## -# $Id: dist.mk,v 1.1036 2015/02/28 17:36:40 tom Exp $ +# $Id: dist.mk,v 1.1037 2015/03/07 16:12:58 tom Exp $ # Makefile for creating ncurses distributions. # # This only needs to be used directly as a makefile by developers, but @@ -37,7 +37,7 @@ SHELL = /bin/sh # These define the major/minor/patch versions of ncurses. NCURSES_MAJOR = 5 NCURSES_MINOR = 9 -NCURSES_PATCH = 20150228 +NCURSES_PATCH = 20150307 # We don't append the patch to the version, since this only applies to releases VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR) diff --git a/man/curs_util.3x b/man/curs_util.3x index 444f40e2..a0c05fe4 100644 --- a/man/curs_util.3x +++ b/man/curs_util.3x @@ -1,6 +1,6 @@ '\" t .\"*************************************************************************** -.\" Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * +.\" Copyright (c) 1998-2013,2015 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 * @@ -27,7 +27,7 @@ .\" authorization. * .\"*************************************************************************** .\" -.\" $Id: curs_util.3x,v 1.37 2013/07/20 19:43:45 tom Exp $ +.\" $Id: curs_util.3x,v 1.38 2015/03/07 23:33:38 tom Exp $ .TH curs_util 3X "" .ie \n(.g .ds `` \(lq .el .ds `` `` @@ -121,7 +121,8 @@ The two functions do not return the same set of strings; the latter returns null where the former would display a meta character. .PP The \fBfilter\fR routine, if used, must be called before \fBinitscr\fR or -\fBnewterm\fR are called. The effect is that, during those calls, \fBLINES\fR +\fBnewterm\fR are called. +The effect is that, during those calls, \fBLINES\fR is set to 1; the capabilities \fBclear\fR, \fBcup\fR, \fBcud\fR, \fBcud1\fR, \fBcuu1\fR, \fBcuu\fR, \fBvpa\fR are disabled; and the \fBhome\fR string is set to the value of \fBcr\fR. @@ -198,16 +199,36 @@ ncurses relies on the terminal database to determine size. T} .TE .PP -The \fBputwin\fR routine writes all data associated with window \fIwin\fR into -the file to which \fIfilep\fR points. This information can be later retrieved +The \fBputwin\fR routine writes all data associated +with window (or pad) \fIwin\fR into +the file to which \fIfilep\fR points. +This information can be later retrieved using the \fBgetwin\fR function. .PP The \fBgetwin\fR routine reads window related data stored in the file by -\fBputwin\fR. The routine then creates and initializes a new window using that -data. It returns a pointer to the new window. +\fBputwin\fR. +The routine then creates and initializes a new window using that +data. +It returns a pointer to the new window. +There are a few caveats: +.bP +the data written is a copy of the \fBWINDOW\fP structure, +and its associated character cells. +The format differs between the wide-character (ncursesw) and +non-wide (ncurses) libraries. +.bP +the retrieved window is always created as a top-level window (or pad), +rather than a subwindow. +.bP +the window's character cells contain the color pair \fIvalue\fP, +but not the actual color \fInumbers\fP. +If cells in the retrieved window use color pairs which have not been +created in the application using \fBinit_pair\fP, +they will not be colored when the window is refreshed. .PP The \fBdelay_output\fR routine inserts an \fIms\fR millisecond pause -in output. This routine should not be used extensively because +in output. +This routine should not be used extensively because padding characters are used rather than a CPU pause. If no padding character is specified, this uses \fBnapms\fR to perform the delay. @@ -261,7 +282,8 @@ parameter values outside the 0 to 255 range. .RE .PP The SVr4 documentation describes the action of \fBfilter\fR only in the vaguest -terms. The description here is adapted from the XSI Curses standard (which +terms. +The description here is adapted from the XSI Curses standard (which erroneously fails to describe the disabling of \fBcuu\fR). .PP The strings returned by \fBunctrl\fR in this implementation are determined @@ -282,7 +304,7 @@ output of \fBkeyname\fP, i.e., it determines whether to use the `M\-' prefix for \*(``meta\*('' keys (codes in the range 128 to 255). Both \fBuse_legacy_coding\fP and \fBmeta\fP succeed only after -curses is initialized. +curses is initialized. X/Open Curses does not document the treatment of codes 128 to 159. When treating them as \*(``meta\*('' keys (or if \fBkeyname\fP is called before initializing curses), @@ -291,9 +313,9 @@ this implementation returns strings \*(``M\-^@\*('', \*(``M\-^A\*('', etc. The \fBkeyname\fP function may return the names of user-defined string capabilities which are defined in the terminfo entry via the \fB\-x\fP option of \fB@TIC@\fP. -This implementation automatically assigns at run-time keycodes to +This implementation automatically assigns at run-time keycodes to user-defined strings which begin with "k". -The keycodes start at KEY_MAX, but are not guaranteed to be +The keycodes start at KEY_MAX, but are not guaranteed to be the same value for different runs because user-defined codes are merged from all terminal descriptions which have been loaded. The \fBuse_extended_names\fP function controls whether this data is diff --git a/package/debian-mingw/changelog b/package/debian-mingw/changelog index 6ad23536..1856c656 100644 --- a/package/debian-mingw/changelog +++ b/package/debian-mingw/changelog @@ -1,8 +1,8 @@ -ncurses6 (5.9+20150228) unstable; urgency=low +ncurses6 (5.9+20150307) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Sat, 28 Feb 2015 12:36:40 -0500 + -- Thomas E. Dickey Sat, 07 Mar 2015 11:12:58 -0500 ncurses6 (5.9-20131005) unstable; urgency=low diff --git a/package/debian-mingw64/changelog b/package/debian-mingw64/changelog index 6ad23536..1856c656 100644 --- a/package/debian-mingw64/changelog +++ b/package/debian-mingw64/changelog @@ -1,8 +1,8 @@ -ncurses6 (5.9+20150228) unstable; urgency=low +ncurses6 (5.9+20150307) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Sat, 28 Feb 2015 12:36:40 -0500 + -- Thomas E. Dickey Sat, 07 Mar 2015 11:12:58 -0500 ncurses6 (5.9-20131005) unstable; urgency=low diff --git a/package/debian/changelog b/package/debian/changelog index 66fbe85b..96cfae73 100644 --- a/package/debian/changelog +++ b/package/debian/changelog @@ -1,8 +1,8 @@ -ncurses6 (5.9+20150228) unstable; urgency=low +ncurses6 (5.9+20150307) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Sat, 28 Feb 2015 12:36:40 -0500 + -- Thomas E. Dickey Sat, 07 Mar 2015 11:12:58 -0500 ncurses6 (5.9-20120608) unstable; urgency=low diff --git a/package/mingw-ncurses.nsi b/package/mingw-ncurses.nsi index e50f92dd..52259929 100644 --- a/package/mingw-ncurses.nsi +++ b/package/mingw-ncurses.nsi @@ -1,4 +1,4 @@ -; $Id: mingw-ncurses.nsi,v 1.89 2015/02/28 17:36:40 tom Exp $ +; $Id: mingw-ncurses.nsi,v 1.90 2015/03/07 16:12:58 tom Exp $ ; TODO add examples ; TODO bump ABI to 6 @@ -10,7 +10,7 @@ !define VERSION_MAJOR "5" !define VERSION_MINOR "9" !define VERSION_YYYY "2015" -!define VERSION_MMDD "0228" +!define VERSION_MMDD "0307" !define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD} !define MY_ABI "5" diff --git a/package/mingw-ncurses.spec b/package/mingw-ncurses.spec index 758b41ea..a02b15ea 100644 --- a/package/mingw-ncurses.spec +++ b/package/mingw-ncurses.spec @@ -3,7 +3,7 @@ Summary: shared libraries for terminal handling Name: mingw32-ncurses6 Version: 5.9 -Release: 20150228 +Release: 20150307 License: X11 Group: Development/Libraries Source: ncurses-%{version}-%{release}.tgz diff --git a/package/ncurses.spec b/package/ncurses.spec index 91b6bd24..00e1edd9 100644 --- a/package/ncurses.spec +++ b/package/ncurses.spec @@ -1,7 +1,7 @@ Summary: shared libraries for terminal handling Name: ncurses6 Version: 5.9 -Release: 20150228 +Release: 20150307 License: X11 Group: Development/Libraries Source: ncurses-%{version}-%{release}.tgz diff --git a/test/savescreen.c b/test/savescreen.c index 111882d0..44d7d1ca 100644 --- a/test/savescreen.c +++ b/test/savescreen.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 2007-2010,2011 Free Software Foundation, Inc. * + * Copyright (c) 2007-2011,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -26,7 +26,7 @@ * authorization. * ****************************************************************************/ /* - * $Id: savescreen.c,v 1.15 2011/01/15 18:15:11 tom Exp $ + * $Id: savescreen.c,v 1.21 2015/03/07 21:55:35 tom Exp $ * * Demonstrate save/restore functions from the curses library. * Thomas Dickey - 2007/7/14 @@ -105,13 +105,25 @@ after_load(void) static void show_what(int which, int last) { - int y, x; - time_t now = time((time_t *) 0); + int y, x, n; + time_t now; + char *mytime; getyx(stdscr, y, x); move(0, 0); - printw("Saved %d of %d - %s", which, last + 1, ctime(&now)); + printw("Saved %d of %d (? for help)", which, last + 1); + + now = time((time_t *) 0); + mytime = ctime(&now); + for (n = (int) strlen(mytime) - 1; n >= 0; --n) { + if (isspace(UChar(mytime[n]))) { + mytime[n] = '\0'; + } else { + break; + } + } + mvprintw(0, (COLS - n - 2), " %s", mytime); move(y, x); @@ -123,7 +135,7 @@ get_command(int which, int last) { int ch; - timeout(100); + timeout(50); do { show_what(which, last); @@ -133,6 +145,61 @@ get_command(int which, int last) return ch; } +static void +show_help(const char **help) +{ + WINDOW *mywin = newwin(LINES, COLS, 0, 0); + int n; + + box(mywin, 0, 0); + wmove(mywin, 1, 1); + for (n = 0; help[n] != 0; ++n) { + wmove(mywin, 1 + n, 2); + wprintw(mywin, "%.*s", COLS - 4, help[n]); + } + wgetch(mywin); + delwin(mywin); + touchwin(stdscr); + refresh(); +} + +static void +editor_help(void) +{ + static const char *msgs[] = + { + "You are now in the screen-editor, which allows you to make some", + "lines on the screen, as well as save copies of the screen to a", + "temporary file", + "", + "Keys:", + " q quit", + " n run the screen-loader to show the saved screens", + " dump a screen", + "", + " a toggle between '#' and graphic symbol for drawing", + " c change color drawn by line to next in palette", + " h,j,k,l or arrows to move around the screen, drawing", + }; + show_help(msgs); +} + +static void +replay_help(void) +{ + static const char *msgs[] = + { + "You are now in the screen-loader, which allows you to view", + "the dumped/restored screens.", + "", + "Keys:", + " q quit", + " load the next screen", + " load the previous screen", + }; + show_help(msgs); +} + static void usage(void) { @@ -189,10 +256,19 @@ main(int argc, char *argv[]) keypad(stdscr, TRUE); curs_set(0); if (has_colors()) { + short pair; + short color; + start_color(); - for (ch = 0; ch < COLOR_PAIRS; ++ch) { - short pair = (short) (ch % COLOR_PAIRS); - init_pair(pair, COLOR_WHITE, (short) (ch % COLORS)); + /* + * Assume pairs is the square of colors, and assign pairs going down + * so that there is minimal conflict with the background color (which + * counts up). The intent is just to show how color pair values are + * saved and restored. + */ + for (pair = 0; pair < COLOR_PAIRS; ++pair) { + color = (short) (pair % (COLORS - 1)); + init_pair(pair, COLOR_WHITE - color, color); } } @@ -227,7 +303,6 @@ main(int argc, char *argv[]) done = TRUE; break; case 'q': - endwin(); cleanup(files); done = TRUE; break; @@ -240,6 +315,9 @@ main(int argc, char *argv[]) if (++which > last) which = 0; break; + case '?': + replay_help(); + break; default: beep(); continue; @@ -256,17 +334,12 @@ main(int argc, char *argv[]) wrefresh(curscr); } } + endwin(); } else { - int y; - int x; - - move(2, 0); - printw("Use h,j,k,l or arrows to move around the screen\n"); - printw("Press 'q' to quit, ' ' to dump a screen\n"); - printw("When the last screen has been dumped, press 'n' to run the\n"); - printw("screen-loader. That allows only 'q', backspace and ' ' for\n"); - printw("stepping through the dumped/restored screens.\n"); - getyx(stdscr, y, x); + int y = 0; + int x = 0; + int color = 0; + int altchars = 0; while (!done) { switch (get_command(which, last)) { @@ -275,7 +348,6 @@ main(int argc, char *argv[]) done = TRUE; break; case 'q': - endwin(); cleanup(files); done = TRUE; break; @@ -291,8 +363,22 @@ main(int argc, char *argv[]) } ++which; if (has_colors()) { + int cx, cy; short pair = (short) (which % COLOR_PAIRS); + /* + * Change the background color, to make it more + * obvious. But that changes the existing text-color. + * Copy the old values from the currently displayed + * screen. + */ bkgd((chtype) COLOR_PAIR(pair)); + for (cy = 1; cy < LINES; ++cy) { + for (cx = 0; cx < COLS; ++cx) { + wmove(curscr, cy, cx); + wmove(stdscr, cy, cx); + waddch(stdscr, winch(curscr)); + } + } } } else { beep(); @@ -318,20 +404,32 @@ main(int argc, char *argv[]) if (++x >= COLS) x = 0; break; + case 'a': + altchars = !altchars; + break; + case 'c': + color = (color + 1) % COLORS; + break; + case '?': + editor_help(); + break; + default: + beep(); + continue; } if (!done) { - time_t now = time((time_t *) 0); - - move(0, 0); - addstr(ctime(&now)); + attr_t attr = (A_REVERSE | COLOR_PAIR(color * COLORS)); + chtype ch2 = (altchars ? ACS_DIAMOND : '#'); move(y, x); - addch('#' | A_REVERSE); + addch(ch2 | attr); move(y, x); } } + endwin(); } ExitProgram(EXIT_SUCCESS); } + #else int main(int argc, char *argv[])