NAME
Curses - terminal screen handling and optimization
SYNOPSIS
use Curses;
initscr;
...
endwin;
DESCRIPTION
Curses
is the interface between Perl and your system's curses(3) library. For descriptions on the usage of a given function, variable, or constant, consult your system's documentation, as such information invariably varies (:-) between different curses(3) libraries and operating systems. This document describes the interface itself, and assumes that you already know how your system's curses(3) library works.
Unified Functions
Many curses(3) functions have variants starting with the prefixes w-, mv-, and/or wmv-. These variants differ only in the explicit addition of a window, or by the addition of two coordinates that are used to move the cursor first. For example, addch()
has three other variants: waddch()
, mvaddch()
, and mvwaddch()
. The variants aren't very interesting; in fact, we could roll all of the variants into original function by allowing a variable number of arguments and analyzing the argument list for which variant the user wanted to call.
Unfortunately, curses(3) predates varargs(3), so in C we were stuck with all the variants. However, Curses
is a Perl interface, so we are free to "unify" these variants into one function. The section "Supported Functions" below lists all curses(3) function supported by Curses
, along with a column listing if it is unified. If so, it takes a varying number of arguments as follows:
function( [win], [y, x], args );
win is an optional window argument, defaulting to stdscr
if not specified.
y, x is an optional coordinate pair used to move the cursor, defaulting to no move if not specified.
args are the required arguments of the function. These are the arguments you would specify if you were just calling the base function and not any of the variants.
This makes the variants obsolete, since their functionality has been merged into a single function, so Curses
does not define them by default. You can still get them if you want, by setting the variable $Curses::OldCurses
to a non-zero value before using the Curses
package. See "Perl 4.X cursperl
Compatibility" for an example of this.
Objects
Objects are supported. Example:
$win = new Curses;
$win->addstr(10, 10, 'foo');
$win->refresh;
...
Any function that has been marked as unified (see "Supported Functions" below and "Unified Functions" above) can be called as a method for a Curses object.
Do not use initscr()
if using objects, as the first call to get a new Curses
will do it for you.
COMPATIBILITY
Perl 4.X cursperl
Compatibility
Curses
has been written to take advantage of the new features of Perl. I felt it better to provide an improved curses programming environment rather than to be 100% compatible. However, many old curseperl
applications will probably still work by starting the script with:
BEGIN { $Curses::OldCurses = 1; }
use Curses;
Any old application that still does not work should print an understandable error message explaining the problem.
Some functions and variables are not supported by Curses
, even with the BEGIN
line. They are listed under "curses(3) items not supported by Curses".
The variables $stdscr
and $curscr
are also available as functions stdscr
and curscr
. This is because of a Perl bug. See the BUGS section for details.
Incompatibilities with previous versions of Curses
In previous versions of this software, some Perl functions took a different set of parameters than their C counterparts. This is no longer true. You should now use getstr($str)
and getyx($y, $x)
instead of $str = getstr()
and ($y, $x) = getyx()
.
Incompatibilities with other Perl programs
menu.pl, v3.0 and v3.1
There were various interaction problems between these two
releases and Curses. Please upgrade to the latest version
(v3.3 as of 3/16/96).
DIAGNOSTICS
'%s' support not enabled for Curses function '%s'
A necessary optional library (such as panels) was not enabled at compile time.
Curses function '%s' called with too %s arguments at ...
You have called a
Curses
function with a wrong number of arguments.argument %d to Curses function '%s' is not a Curses window at ... =item * argument is not a Curses window at ...
The window argument you gave to the function wasn't really a window.
This probably means that you didn't give the right arguments to a unified function. See the DESCRIPTION section on "Unified Functions" for more information.
Curses function '%s' is not defined by your vendor at ...
You have a
Curses
function in your code that your system's curses(3) library doesn't define.Curses constant '%s' is not defined by your vendor at ...
You have a
Curses
constant in your code that your system's curses(3) library doesn't define.Curses does not support the curses function '%s', used at ...
You have a curses(3) function in your code that the
Curses
module doesn't support.Curses does not support the curses variable '%s', used at ...
You have a curses(3) variable in your code that the
Curses
module doesn't support.Curses does not support the curses constant '%s', used at ...
You have a bareword in your code that is trying to be interpreted as a
Curses
constant, butCurses
doesn't know anything about it.Curses::Vars::FETCH called with bad index at ... =item * Curses::Vars::STORE called with bad index at ...
You've been playing with the
tie
interface to theCurses
variables. Don't do that. :-)Anything else
Check out the perldiag man page to see if the error is in there.
BUGS
If you use the variables $stdscr
and $curscr
instead of their functional counterparts (stdscr
and curscr
), you might run into a bug in Perl where the "magic" isn't called early enough. This is manifested by the Curses
package telling you $stdscr
isn't a window. One workaround is to put a line like $stdscr = $stdscr
near the front of your program.
Probably many more.
AUTHOR
William Setzer <William_Setzer@ncsu.edu>
SYNOPSIS OF PERL CURSES SUPPORT
Supported Functions
Supported Unified? Supported via $OldCurses[*]
--------- -------- ------------------------
PAUSE
[*] To use any functions in this column, the variable $Curses::OldCurses
must be set to a non-zero value before using the Curses
package. See "Perl 4.X cursperl Compatibility" for an example of this.
Supported Variables
PAUSE
Supported Constants
PAUSE
curses(3) items not supported by Curses
Functions
---------
tstp scanw wscanw mvscanw mvwscanw _putchar fullname
[*] stdscr and curscr are also available via the Perl functions stdscr
and curscr
. See "Perl 4.X cursperl Compatibility" for more information.