X-Git-Url: http://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=doc%2Fhtml%2Fman%2Fcurs_getstr.3x.html;h=d157fecf8bacb644515a15578f9a9ffa1f032dd9;hb=HEAD;hp=0aaefaf143c9b31834d030f65bdf354acb53d405;hpb=30393be892025f03322b7907a04cc05cc08e8760;p=ncurses.git diff --git a/doc/html/man/curs_getstr.3x.html b/doc/html/man/curs_getstr.3x.html index 0aaefaf1..226514a4 100644 --- a/doc/html/man/curs_getstr.3x.html +++ b/doc/html/man/curs_getstr.3x.html @@ -1,6 +1,7 @@ -
--curs_getstr(3x) curs_getstr(3x) +curs_getstr(3x) Library calls curs_getstr(3x)
- getstr, getnstr, wgetstr, wgetnstr, mvgetstr, mvgetnstr, mvwgetstr, - mvwgetnstr - accept character strings from curses terminal keyboard + getstr, getnstr, wgetstr, wgetnstr, mvgetstr, mvgetnstr, mvwgetstr, + mvwgetnstr - accept character strings from curses terminal keyboard
#include <curses.h> - int getstr(char *str); - int getnstr(char *str, int n); - int wgetstr(WINDOW *win, char *str); - int wgetnstr(WINDOW *win, char *str, int n); - int mvgetstr(int y, int x, char *str); - int mvwgetstr(WINDOW *win, int y, int x, char *str); - int mvgetnstr(int y, int x, char *str, int n); - int mvwgetnstr(WINDOW *, int y, int x, char *str, int n); + 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);
- The function getstr is equivalent to a series of calls to getch, until - a newline or carriage return is received (the terminating character is - not included in the returned string). The resulting value is placed in - the area pointed to by the character pointer str, followed by a NUL. + wgetstr populates a user-supplied string buffer str by repeatedly + calling wgetch(3x) with the win argument until a line feed or carriage + return character is input. The function + + o does not copy the terminating character to str; + + o always terminates str with a null character; + + o interprets the screen's erase and kill characters (see + erasechar(3x) and killchar(3x)); + + o recognizes function keys only if the screen's keypad option is + enabled (see keypad(3x)); + + o treats the function keys KEY_LEFT and KEY_BACKSPACE the same as the + erase character; and - wgetnstr reads at most n characters, thus preventing a possible over- - flow of the input buffer. Any attempt to enter more characters (other - than the terminating newline or carriage return) causes a beep. Func- - tion keys also cause a beep and are ignored. The getnstr function - reads from the stdscr default window. + o discards function key inputs other than those treated as the erase + character, calling beep(3x). - The user's erase and kill characters are interpreted. If keypad mode - is on for the window, KEY_LEFT and KEY_BACKSPACE are both considered - equivalent to the user's kill character. + 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. - Characters input are echoed only if echo is currently on. In that - case, backspace is echoed as deletion of the previous character (typi- - cally a left motion). + If the screen's echo option is enabled (see echo(3x)), wgetstr updates + win with wechochar(3x). Further, + + o the erase character and its function key synonyms move the cursor + to the left, and + + o 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. + + ncurses(3x) describes the variants of these functions.
- All routines return the integer ERR upon failure and an OK (SVr4 speci- - fies only "an integer value other than ERR") upon successful comple- - tion. + These functions return OK on success and ERR on failure. - X/Open defines no error conditions. + In ncurses, they return ERR if - In this implementation, these functions return an error if the window - pointer is null, or if its timeout expires without having any data. + o win is NULL, or - This implementation provides an extension as well. If a SIGWINCH in- - terrupts the function, it will return KEY_RESIZE rather than OK or ERR. + o if an internal wgetch call fails. - Functions with a "mv" prefix first perform a cursor movement using - wmove, and return an error if the position is outside the window, or if - the window pointer is null. + 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.
- Note that getstr, mvgetstr, and mvwgetstr may be macros. + All of these functions except wgetnstr may be implemented as macros. + + Use of getstr, mvgetstr, mvwgetstr, or wgetstr to read input that + overruns the buffer pointed to by str causes undefined results. Use + their n-infixed counterpart functions instead. + + While wgetnstr is conceptually a series of calls to wgetch, it also + temporarily changes properties of the curses screen to permit simple + editing of the input buffer. It saves the screen's state and then + calls nl(3x) and, if the screen was in normal ("cooked") mode, + cbreak(3x). 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. + + +
+ The return value KEY_RESIZE is an ncurses extension.
- These functions are described in the XSI Curses standard, Issue 4. - They read single-byte characters only. The standard does not define - any error conditions. This implementation returns ERR if the window - pointer is null, or if the lower-level wgetch(3x) call returns an ERR. + 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 curses 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. In fact, 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, but disappeared from Issue 7.) - SVr3 and early SVr4 curses implementations did not reject function - keys; the SVr4.0 documentation claimed that "special keys" (such as - function keys, "home" key, "clear" key, etc.) are "interpreted", with- - out giving details. It lied. In fact, 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's KEY_ value). + X/Open Curses Issue 5 (2007) 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 (2009) 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. - The functions getnstr, mvgetnstr, and mvwgetnstr were present but not - documented in SVr4. + o ncurses 6.1 and PDCurses do not count the null character toward the + limit, while Solaris and NetBSD curses do. - X/Open Curses issue 5 (2007) stated that these functions "read at most - n bytes" but did not state whether the terminating NUL is counted in - that limit. X/Open Curses issue 7 (2009) changed that to say they - "read at most n-1 bytes" to allow for the terminating NUL. As of 2018, - some implementations do, some do not count it: + o 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. - o ncurses 6.1 and PDCurses do not count the NUL in the given limit, - while + 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. - o Solaris SVr4 and NetBSD curses count the NUL as part of the limit. + o BSD curses lacked wgetnstr, and its wgetstr wrote to str + unboundedly, as did that in SVr2. - o Solaris xcurses provides both: its wide-character wget_nstr re- - serves a NUL, but its wgetnstr does not count the NUL consistently. + o PDCurses, and SVr3.1, SVr4, and Solaris curses limit both functions + to writing 256 bytes. Other System V-based platforms likely use + the same limit. - In SVr4 curses, a negative value of n tells wgetnstr to assume that the - caller's buffer is large enough to hold the result, i.e., to act like - wgetstr. X/Open Curses does not mention this (or anything related to - negative or zero values of n), however most implementations use the - feature, with different limits: + o Solaris xcurses limits the write to LINE_MAX bytes. - o Solaris SVr4 curses and PDCurses limit the result to 255 bytes. - Other Unix systems than Solaris are likely to use the same limit. + o 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. - o Solaris xcurses limits the result to LINE_MAX bytes. + o ncurses prior to 6.2 (2020) imposes no limit on the length of the + write, and treats wgetnstr's n parameter as SVr4 curses does. - o NetBSD 7 assumes no particular limit for the result from wgetstr. - However, it limits the wgetnstr parameter n to ensure that it is - greater than zero. + o 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. - A comment in NetBSD's source code states that this is specified in - SUSv2. + Implementations vary in their handling of input control characters. - o ncurses (before 6.2) assumes no particular limit for the result - from wgetstr, and treats the n parameter of wgetnstr like SVr4 - curses. + o 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. - o ncurses 6.2 uses LINE_MAX, or a larger (system-dependent) value - which the sysconf function may provide. If neither LINE_MAX or - sysconf is available, ncurses uses the POSIX value for LINE_MAX (a - 2048 byte limit). In either case, it reserves a byte for the ter- - minating NUL. + o 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. + + o 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. + + +
+ 4BSD (1980) curses introduced wgetstr along with its variants. + + SVr3.1 (1987) added wgetnstr, but none of its variants. + + X/Open Curses Issue 4 (1995) specified getnstr, mvwgetnstr, and + mvgetnstr.
- curses(3x), curs_getch(3x), curs_variables(3x). + curs_get_wstr(3x) describes comparable functions of the ncurses library + in its wide-character configuration (ncursesw). + + curses(3x), curs_addch(3x), curs_getch(3x), curs_inopts(3x), + curs_termattrs(3x), - curs_getstr(3x) +ncurses 6.5 2024-06-22 curs_getstr(3x)