plucky (3) getnstr.3ncurses.gz

Provided by: ncurses-doc_6.5+20250216-1_all bug

NAME

       getstr,  getnstr, wgetstr, wgetnstr, mvgetstr, mvgetnstr, mvwgetstr, mvwgetnstr - read a character string
       from curses terminal keyboard

SYNOPSIS

       #include <curses.h>

       int getstr(char * str);
       int wgetstr(WINDOW * win, char * str);
       int mvgetstr(int y, int x, char * str);
       int mvwgetstr(WINDOW * win, int y, int x, char * str);

       int getnstr(char * str, int n);
       int wgetnstr(WINDOW * win, char * str, int n);
       int mvgetnstr(int y, int x, char * str, int n);
       int mvwgetnstr(WINDOW * win, int y, int x, char * str,
             int n);

DESCRIPTION

       wgetstr populates a user-supplied string buffer str by repeatedly calling wgetch(3NCURSES) with  the  win
       argument until a line feed or carriage return character is input.  The function

       •   does not copy the terminating character to str;

       •   always terminates str with a null character;

       •   interprets the screen's erase and kill characters (see erasechar(3NCURSES) and killchar(3NCURSES));

       •   recognizes function keys only if the screen's keypad option is enabled (see keypad(3NCURSES));

       •   treats the function keys KEY_LEFT and KEY_BACKSPACE the same as the erase character; and

       •   discards function key inputs other than those treated as the erase character, calling beep(3NCURSES).

       The erase character replaces the character at the end of the buffer with a null character, while the kill
       character does the same for the entire buffer.

       If the screen's echo option is enabled (see echo(3NCURSES)), wgetstr updates win  with  waddch(3NCURSES).
       Further,

       •   the erase character and its function key synonyms move the cursor to the left, and

       •   the kill character returns the cursor to where it was located when wgetstr was called.

       wgetnstr  is  similar,  but  reads  at most n characters, aiding the application to avoid overrunning the
       buffer to which str points.  An attempt to input more than n characters (other than the terminating  line
       feed  or  carriage  return)  is  ignored  with a beep.  If n is negative, wgetn_wstr reads up to LINE_MAX
       characters (see sysconf(3)).

       ncurses(3NCURSES) describes the variants of these functions.

RETURN VALUE

       These functions return OK on success and ERR on failure.

       In ncurses, they return ERR if

       •   win is NULL, or

       •   if an internal wgetch(3NCURSES) call fails.

       Further, in ncurses, these functions return KEY_RESIZE if a SIGWINCH event interrupts the function.

       Functions prefixed with “mv” first perform cursor movement and fail if the position (y, x) is outside the
       window boundaries.

NOTES

       All of these functions except wgetnstr may be implemented as macros.

       Reading  input  that  overruns  the buffer pointed to by str causes undefined results.  Use the n-infixed
       functions, and allocate sufficient storage for str — at least n+1 times sizeof(char).

       While these functions conceptually implement a series of calls to wgetch, they  also  temporarily  change
       properties  of  the  curses screen to permit simple editing of the input buffer.  Each function saves the
       screen's  state,  calls  nl(3NCURSES),  and,  if  the  screen   was   in   canonical   (“cooked”)   mode,
       cbreak(3NCURSES).  Before returning, it restores the saved screen state.  Other implementations differ in
       detail, affecting which control characters they can accept  in  the  buffer;  see  section  “PORTABILITY”
       below.

EXTENSIONS

       getnstr, wgetnstr, mvgetnstr, and mvwgetnstr's handing of negative n values is an ncurses extension.

       The return value KEY_RESIZE is an ncurses extension.

PORTABILITY

       Applications  employing  ncurses  extensions  should  condition  their  use  on  the  visibility  of  the
       NCURSES_VERSION preprocessor macro.

       X/Open Curses Issue 4 describes these  functions.   It  specifies  no  error  conditions  for  them,  but
       indicates  that  wgetnstr  and  its  variants  read  “the  entire  multi-byte  sequence associated with a
       character” and “fail” if n and str together do not  describe  a  buffer  “large  enough  to  contain  any
       complete  characters”.   In  ncurses, however, wgetch reads only single-byte characters, so this scenario
       does not arise.

       SVr4 describes a successful return value only as “an integer value other than ERR”.

       SVr3 and early SVr4 curses implementations did not reject function keys; the SVr4 documentation  asserted
       that, like the screen's erase and kill characters, they were

              interpreted, as well as any special keys (such as function keys, “home” key, “clear” key, etc.)

       without  further detail.  It lied.  The “character” value appended to the string by those implementations
       was predictable but not useful — being, in fact, the low-order eight bits of the key code's KEY_ constant
       value.   (The same language, unchanged except for styling, survived into X/Open Curses Issue 4, Version 2
       but disappeared from Issue 7.)

       A draft of X/Open Curses Issue 5 (which never saw final release) stated that  these  functions  “read  at
       most n bytes” but did not state whether the terminating null character counted toward that limit.  X/Open
       Curses Issue 7 changed that to say they “read at most n-1  bytes”  to  allow  for  the  terminating  null
       character.  As of 2018, some implementations count it, some do not.

       •   ncurses  6.1  and PDCurses do not count the null character toward the limit, while Solaris and NetBSD
           curses do.

       •   Solaris xcurses offers both behaviors: its wide-character wgetn_wstr reserves room for  a  wide  null
           character, but its non-wide wgetnstr does not consistently count a null character toward the limit.

       X/Open Curses does not specify what happens if the length n is negative.

       •   ncurses  6.2  uses  LINE_MAX or a larger (system-dependent) value provided by sysconf(3).  If neither
           LINE_MAX nor sysconf is available, ncurses uses the POSIX minimum  value  for  LINE_MAX  (2048).   In
           either case, it reserves a byte for the terminating null character.

       •   In  SVr4  curses,  a  negative n tells wgetnstr to assume that the caller's buffer is large enough to
           hold the result; that is, the function then acts like wgetstr.  X/Open Curses does not  mention  this
           behavior  (or  anything related to nonpositive n values), however most curses libraries implement it.
           Most implementations nevertheless enforce an upper limit on the count of  bytes  they  write  to  the
           destination buffer str.

       •   BSD curses lacked wgetnstr, and its wgetstr wrote to str unboundedly, as did that in SVr2.

       •   PDCurses,  and  SVr3  and later, and Solaris curses limit both functions to writing 256 bytes.  Other
           System V-based platforms likely use the same limit.

       •   Solaris xcurses limits the write to LINE_MAX bytes (see sysconf(3)).

       •   NetBSD 7 curses imposes no particular limit on the length of the write, but does validate n to ensure
           that it is greater than zero.  A comment in NetBSD's source code asserts that SUSv2 specifies this.

       Implementations vary in their handling of input control characters.

       •   While  they  may  enable  the screen's echo option, some do not take it out of raw mode, and may take
           cbreak mode into account when deciding whether to handle echoing within wgetnstr or to rely on it  as
           a side effect of calling wgetch.

       •   Originally,  ncurses,  like  its  progenitor  pcurses,  had its wgetnstr call noraw and cbreak before
           accepting input.  That may have been done to make function keys work; it is not necessary with modern
           ncurses.

           Since  1995,  ncurses  has  provided  handlers  for  SIGINTR  and SIGQUIT events, which are typically
           generated at the keyboard with ^C and ^\ respectively.  In cbreak mode, those handlers catch a signal
           and stop the program, whereas other implementations write those characters into the buffer.

       •   Starting  with  ncurses  6.3  (2021),  wgetnstr  preserves raw mode if the screen was already in that
           state, allowing one to enter the characters the terminal interprets as interrupt and quit events into
           the buffer, for better compatibility with SVr4 curses.

HISTORY

       4BSD (1980) introduced wgetstr along with its variants.

       SVr3.1 (1987) added wgetnstr, but none of its variants.

       X/Open Curses Issue 4 (1995) specified getnstr, mvgetnstr, and mvwgetnstr.

SEE ALSO

       get_wstr(3NCURSES)   describes  comparable  functions  of  the  ncurses  library  in  its  wide-character
       configuration (ncursesw).

       ncurses(3NCURSES), addch(3NCURSES), getch(3NCURSES), inopts(3NCURSES), termattrs(3NCURSES),