mirror of
https://github.com/Aigor44/ncursesw-morphos.git
synced 2024-12-21 07:39:06 +08:00
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.
This commit is contained in:
parent
e14300b95d
commit
aefc1659d7
8
NEWS
8
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
|
||||
|
4
dist.mk
4
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)
|
||||
|
@ -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
|
||||
|
@ -1,8 +1,8 @@
|
||||
ncurses6 (5.9+20150228) unstable; urgency=low
|
||||
ncurses6 (5.9+20150307) unstable; urgency=low
|
||||
|
||||
* latest weekly patch
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Sat, 28 Feb 2015 12:36:40 -0500
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Sat, 07 Mar 2015 11:12:58 -0500
|
||||
|
||||
ncurses6 (5.9-20131005) unstable; urgency=low
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
ncurses6 (5.9+20150228) unstable; urgency=low
|
||||
ncurses6 (5.9+20150307) unstable; urgency=low
|
||||
|
||||
* latest weekly patch
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Sat, 28 Feb 2015 12:36:40 -0500
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Sat, 07 Mar 2015 11:12:58 -0500
|
||||
|
||||
ncurses6 (5.9-20131005) unstable; urgency=low
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
ncurses6 (5.9+20150228) unstable; urgency=low
|
||||
ncurses6 (5.9+20150307) unstable; urgency=low
|
||||
|
||||
* latest weekly patch
|
||||
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Sat, 28 Feb 2015 12:36:40 -0500
|
||||
-- Thomas E. Dickey <dickey@invisible-island.net> Sat, 07 Mar 2015 11:12:58 -0500
|
||||
|
||||
ncurses6 (5.9-20120608) unstable; urgency=low
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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",
|
||||
" <space> 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",
|
||||
" <space> load the next screen",
|
||||
" <backspace> 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[])
|
||||
|
Loading…
Reference in New Issue
Block a user