The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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

  • 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, but Curses 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 the Curses 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[*]
        ---------     --------          ------------------------
        addch           Yes             waddch mvaddch mvwaddch
        addchnstr       Yes             waddchnstr mvaddchnstr mvwaddchnstr
        addchstr        Yes             waddchstr mvaddchstr mvwaddchstr
        addnstr         Yes             waddnstr mvaddnstr mvwaddnstr
        addstr          Yes             waddstr mvaddstr mvwaddstr
        attroff         Yes             wattroff
        attron          Yes             wattron
        attrset         Yes             wattrset
        baudrate        No
        beep            No
        bkgd            Yes             wbkgd
        bkgdset         Yes             wbkgdset
        border          Yes             wborder
        box             Yes
        can_change_color No
        cbreak          No
        clear           Yes             wclear
        clearok         Yes
        clrtobot        Yes             wclrtobot
        clrtoeol        Yes             wclrtoeol
        color_content   No
        COLOR_PAIR      No
        copywin         No
        delch           Yes             wdelch mvdelch mvwdelch
        deleteln        Yes             wdeleteln
        delwin          Yes
        derwin          Yes
        doupdate        No
        echo            No
        echochar        Yes             wechochar
        endwin          No
        erase           Yes             werase
        erasechar       No
        flash           No
        flushinp        No
        flusok          Yes
        getattrs        Yes
        getbegyx        Yes
        getbkgd         Yes
        getcap          No
        getch           Yes             wgetch mvgetch mvwgetch
        getmaxyx        Yes
        getnstr         Yes             wgetnstr mvgetnstr mvwgetnstr
        getparyx        Yes
        getstr          Yes             wgetstr mvgetstr mvwgetstr
        gettmode        No
        getyx           Yes
        halfdelay       No
        has_colors      No
        has_ic          No
        has_il          No
        hline           Yes             whline
        idcok           Yes
        idlok           Yes
        immedok         Yes
        inch            Yes             winch mvinch mvwinch
        inchnstr        Yes             winchnstr mvinchnstr mvwinchnstr
        inchstr         Yes             winchstr mvinchstr mvwinchstr
        init_color      No
        init_pair       No
        initscr         No
        innstr          Yes             winnstr mvinnstr mvwinnstr
        insch           Yes             winsch mvinsch mvwinsch
        insdelln        Yes             winsdelln
        insertln        Yes             winsertln
        insnstr         Yes             winsnstr mvinsnstr mvwinsnstr
        insstr          Yes             winsstr mvinsstr mvwinsstr
        instr           Yes             winstr mvinstr mvwinstr
        intrflush       Yes
        is_linetouched  Yes
        is_wintouched   Yes
        isendwin        No
        keyname         No
        keypad          Yes
        killchar        No
        leaveok         Yes
        longname        No
        meta            Yes
        move            Yes             wmove
        mvcur           No
        mvwin           Yes
        newpad          No
        newwin          No
        nl              No
        nocbreak        No
        nodelay         Yes
        noecho          No
        nonl            No
        noqiflush       No
        noraw           No
        notimeout       Yes
        noutrefresh     Yes             wnoutrefresh
        overlay         No
        overwrite       No
        pair_content    No
        PAIR_NUMBER     No
        pechochar       No
        pnoutrefresh    No
        prefresh        No
        qiflush         No
        raw             No
        refresh         Yes             wrefresh
        resetty         No
        savetty         No
        scrl            Yes             wscrl
        scroll          Yes
        scrollok        Yes
        setscrreg       Yes             wsetscrreg
        setterm         No
        slk_clear       No
        slk_init        No
        slk_label       No
        slk_noutrefresh No
        slk_refresh     No
        slk_restore     No
        slk_set         No
        slk_touch       No
        standend        Yes             wstandend
        standout        Yes             wstandout
        start_color     No
        subpad          No
        subwin          Yes
        syncok          Yes
        timeout         Yes             wtimeout
        touchline       Yes
        touchln         Yes             wtouchln
        touchoverlap    No
        touchwin        Yes
        typeahead       No
        unctrl          No
        ungetch         No
        vline           Yes             wvline
        

[*] 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

        LINES           COLS            stdscr[*]       curscr[*]
        

Supported Constants

        OK              ERR
        
        ACS_BLOCK       ACS_BOARD       ACS_BTEE        ACS_BULLET
        ACS_CKBOARD     ACS_DARROW      ACS_DEGREE      ACS_DIAMOND
        ACS_HLINE       ACS_LANTERN     ACS_LARROW      ACS_LLCORNER
        ACS_LRCORNER    ACS_LTEE        ACS_PLMINUS     ACS_PLUS
        ACS_RARROW      ACS_RTEE        ACS_S1          ACS_S9
        ACS_TTEE        ACS_UARROW      ACS_ULCORNER    ACS_URCORNER
        ACS_VLINE
        
        A_ALTCHARSET    A_ATTRIBUTES    A_BLINK         A_BOLD
        A_CHARTEXT      A_COLOR         A_DIM           A_INVIS
        A_NORMAL        A_PROTECT       A_REVERSE       A_STANDOUT
        A_UNDERLINE
        
        COLOR_BLACK     COLOR_BLUE      COLOR_CYAN      COLOR_GREEN
        COLOR_MAGENTA   COLOR_RED       COLOR_WHITE     COLOR_YELLOW
        
        KEY_A1          KEY_A3          KEY_B2          KEY_BACKSPACE
        KEY_BEG         KEY_BREAK       KEY_BTAB        KEY_C1
        KEY_C3          KEY_CANCEL      KEY_CATAB       KEY_CLEAR
        KEY_CLOSE       KEY_COMMAND     KEY_COPY        KEY_CREATE
        KEY_CTAB        KEY_DC          KEY_DL          KEY_DOWN
        KEY_EIC         KEY_END         KEY_ENTER       KEY_EOL
        KEY_EOS         KEY_EXIT        KEY_F0          KEY_FIND
        KEY_HELP        KEY_HOME        KEY_IC          KEY_IL
        KEY_LEFT        KEY_LL          KEY_MARK        KEY_MAX
        KEY_MESSAGE     KEY_MIN         KEY_MOVE        KEY_NEXT
        KEY_NPAGE       KEY_OPEN        KEY_OPTIONS     KEY_PPAGE
        KEY_PREVIOUS    KEY_PRINT       KEY_REDO        KEY_REFERENCE
        KEY_REFRESH     KEY_REPLACE     KEY_RESET       KEY_RESTART
        KEY_RESUME      KEY_RIGHT       KEY_SAVE        KEY_SBEG
        KEY_SCANCEL     KEY_SCOMMAND    KEY_SCOPY       KEY_SCREATE
        KEY_SDC         KEY_SDL         KEY_SELECT      KEY_SEND
        KEY_SEOL        KEY_SEXIT       KEY_SF          KEY_SFIND
        KEY_SHELP       KEY_SHOME       KEY_SIC         KEY_SLEFT
        KEY_SMESSAGE    KEY_SMOVE       KEY_SNEXT       KEY_SOPTIONS
        KEY_SPREVIOUS   KEY_SPRINT      KEY_SR          KEY_SREDO
        KEY_SREPLACE    KEY_SRESET      KEY_SRIGHT      KEY_SRSUME
        KEY_SSAVE       KEY_SSUSPEND    KEY_STAB        KEY_SUNDO
        KEY_SUSPEND     KEY_UNDO        KEY_UP
        

curses(3) items not supported by Curses

        Functions
        ---------
        tstp printw wprintw mvprintw mvwprintw scanw wscanw mvscanw mvwscanw
        _putchar fullname
        
        Variables
        ---------
        ttytype Def_term My_term
 

[*] stdscr and curscr are also available via the Perl functions stdscr and curscr. See "Perl 4.X cursperl Compatibility" for more information.