X-Git-Url: https://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=man%2Fcurs_util.3x;h=d38078dc0e991f4327efe6e009fa7258ee592619;hb=d90067f9008bb8338a77c1ed519bc108c275ed04;hp=7b2617e6c21e6884d1eb54f26196d2039a6372a4;hpb=55ccd2b959766810cf7db8d1c4462f338ce0afc8;p=ncurses.git diff --git a/man/curs_util.3x b/man/curs_util.3x index 7b2617e6..d38078dc 100644 --- a/man/curs_util.3x +++ b/man/curs_util.3x @@ -1,5 +1,7 @@ +'\" t .\"*************************************************************************** -.\" Copyright (c) 1998-2004,2005 Free Software Foundation, Inc. * +.\" Copyright 2018-2022,2023 Thomas E. Dickey * +.\" Copyright 1998-2015,2017 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,140 +28,407 @@ .\" authorization. * .\"*************************************************************************** .\" -.\" $Id: curs_util.3x,v 1.17 2005/06/25 21:51:37 tom Exp $ -.TH curs_util 3X "" -.na -.hy 0 +.\" $Id: curs_util.3x,v 1.91 2023/12/16 20:32:22 tom Exp $ +.TH curs_util 3X 2023-12-16 "ncurses 6.4" "Library calls" +.ie \n(.g \{\ +.ds `` \(lq +.ds '' \(rq +.\} +.el \{\ +.ie t .ds `` `` +.el .ds `` "" +.ie t .ds '' '' +.el .ds '' "" +.\} +. +.de bP +.ie n .IP \(bu 4 +.el .IP \(bu 2 +.. .SH NAME -\fBdelay_output\fR, -\fBfilter\fR, -\fBflushinp\fR, -\fBgetwin\fR, -\fBkey_name\fR, -\fBkeyname\fR, -\fBputwin\fR, -\fBunctrl\fR, -\fBuse_env\fR, -\fBwunctrl\fR - miscellaneous \fBcurses\fR utility routines -.ad -.hy +\fB\%delay_output\fP, +\fB\%filter\fP, +\fB\%flushinp\fP, +\fB\%getwin\fP, +\fB\%key_name\fP, +\fB\%keyname\fP, +\fB\%nofilter\fP, +\fB\%putwin\fP, +\fB\%unctrl\fP, +\fB\%use_env\fP, +\fB\%use_tioctl\fP, +\fB\%wunctrl\fP \- +miscellaneous \fIcurses\fR utility routines .SH SYNOPSIS -\fB#include \fR -.sp -\fBchar *unctrl(chtype c);\fR -.br -\fBchar *wunctrl(cchar_t *c);\fR -.br -\fBchar *keyname(int c);\fR -.br -\fBchar *key_name(wchar_t w);\fR -.br -\fBvoid filter(void);\fR -.br -\fBvoid use_env(bool f);\fR -.br -\fBint putwin(WINDOW *win, FILE *filep);\fR -.br -\fBWINDOW *getwin(FILE *filep);\fR -.br -\fBint delay_output(int ms);\fR -.br -\fBint flushinp(void);\fR -.br +.nf +\fB#include +.PP +\fBconst char *unctrl(chtype \fIc\fP); +\fBwchar_t *wunctrl(cchar_t *\fIc\fP); +.PP +\fBconst char *keyname(int \fIc\fP); +\fBconst char *key_name(wchar_t \fIw\fP); +.PP +\fBvoid filter(void); +.PP +\fBvoid use_env(bool \fIf\fP); +.PP +\fBint putwin(WINDOW *\fIwin\fP, FILE *\fIfilep\fP); +\fBWINDOW *getwin(FILE *\fIfilep\fP); +.PP +\fBint delay_output(int \fIms\fP); +\fBint flushinp(void); +.PP +\fI/* extensions */ +\fBvoid nofilter(void); +\fBvoid use_tioctl(bool \fIf\fP); +.fi .SH DESCRIPTION -The \fBunctrl\fR routine returns a character string which is a printable -representation of the character \fIc\fR, ignoring attributes. -Control characters are displayed in the \fB^\fR\fIX\fR notation. +.SS unctrl +The \fBunctrl\fP routine returns a character string which is a printable +representation of the character \fIc\fP: +.bP +Printable characters are displayed as themselves, +e.g., a one-character string containing the key. +.bP +Control characters are displayed in the \fB^\fIX\fR notation. +.bP Printing characters are displayed as is. -The corresponding \fBwunctrl\fR returns a printable representation of -a wide-character. -.PP -The \fBkeyname\fR routine returns a character string corresponding to the key \fIc\fR. -Control characters are displayed in the \fB^\fR\fIX\fR notation. -Values above 128 are either meta characters, shown in the \fBM-\fR\fIX\fR notation, -or the names of function keys, or null. -The corresponding \fBkey_name\fR returns a character string corresponding -to the wide-character value \fIw\fR. -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 -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. -.PP -The \fBuse_env\fR routine, if used, is called before \fBinitscr\fR or -\fBnewterm\fR are called. When called with \fBFALSE\fR as an -argument, the values of \fBlines\fR and \fBcolumns\fR specified in the -\fIterminfo\fR database will be used, even if environment variables -\fBLINES\fR and \fBCOLUMNS\fR (used by default) are set, or if -\fBcurses\fR is running in a window (in which case default behavior -would be to use the window size if \fBLINES\fR and \fBCOLUMNS\fR are -not set). -Note that setting \fBLINES\fR or \fBCOLUMNS\fR overrides the -corresponding size which may be obtained from the operating system. -.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 -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. -.PP -The \fBdelay_output\fR routine inserts an \fIms\fR millisecond pause -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. -.PP -The \fBflushinp\fR routine throws away any typeahead that has been typed by the +.bP +DEL (character 127) is displayed as \fB^?\fP. +.bP +Values above 128 are either meta characters +(if the screen has not been initialized, +or if \fBmeta\fP(3X) has been called with a \fBTRUE\fP parameter), +shown in the \fBM\-\fIX\fR notation, +or are displayed as themselves. +In the latter case, the values may not be printable; +this follows the X/Open specification. +.PP +The corresponding \fBwunctrl\fP returns a printable representation of +a complex character \fIc\fP. +.PP +In both \fBunctrl\fP and \fBwunctrl\fP the attributes and color associated +with the character parameter are ignored. +.SS keyname/key_name +The \fBkeyname\fP routine returns a character string +corresponding to the key \fIc\fP. +Key codes are different from character codes. +.bP +Key codes below 256 are characters. +They are displayed using \fBunctrl\fP. +.bP +Values above 256 may be the codes for function keys. +The function key name is displayed. +.bP +Otherwise (if there is no corresponding name and the key is not a character) +the function returns null, to denote an error. +X/Open also lists an \*(``UNKNOWN KEY\*('' return value, +which some implementations return rather than null. +.LP +The corresponding \fBkey_name\fP returns +a multibyte character string corresponding +to the wide-character value \fIw\fP. +The two functions (\fBkeyname\fP and \fBkey_name\fP) +do not return the same set of strings: +.bP +\fBkeyname\fP returns null where \fBkey_name\fP would display a meta character. +.bP +\fBkey_name\fP does not return the name of a function key. +.SS filter/nofilter +The \fBfilter\fP routine, if used, must be called before \fBinitscr\fP or +\fBnewterm\fP are called. +Calling \fBfilter\fP causes these changes in initialization: +.bP +\fBLINES\fP is set to 1; +.bP +the capabilities +\fBclear\fP, +\fBcud1\fP, +\fBcud\fP, +\fBcup\fP, +\fBcuu1\fP, +\fBcuu\fP, +\fBvpa\fP +are disabled; +.bP +the capability \fBed\fP is disabled if \fBbce\fP is set; +.bP +and the \fBhome\fP string is set to the value of \fBcr\fP. +.PP +The \fBnofilter\fP routine cancels the effect of a preceding \fBfilter\fP +call. +That allows the caller to initialize a screen on a different device, +using a different value of \fB$TERM\fP. +The limitation arises because the \fBfilter\fP routine modifies the +in-memory copy of the terminal information. +.SS use_env +The \fBuse_env\fP routine, if used, +should be called before \fBinitscr\fP or +\fBnewterm\fP are called +(because those compute the screen size). +It modifies the way \fI\%ncurses\fP treats environment variables +when determining the screen size. +.bP +Normally \fI\%ncurses\fP looks first at the terminal database for the +screen size. +.IP +If \fBuse_env\fP was called with \fBFALSE\fP for parameter, +it stops here unless +\fBuse_tioctl\fP was also called with \fBTRUE\fP for parameter. +.bP +Then it asks for the screen size via operating system calls. +If successful, +it overrides the values from the terminal database. +.bP +Finally (unless \fBuse_env\fP was called with \fBFALSE\fP parameter), +\fI\%ncurses\fP examines the \fILINES\fP or \fI\%COLUMNS\fP environment +variables, +using a value in those to override the results +from the operating system or terminal database. +.IP +\fI\%curses\fP also updates the screen size in response to +\fBSIGWINCH\fP, +unless overridden by the \fILINES\fP or \fI\%COLUMNS\fP environment +variables, +.SS use_tioctl +The \fBuse_tioctl\fP routine, if used, +should be called before \fBinitscr\fP or \fBnewterm\fP are called +(because those compute the screen size). +After \fBuse_tioctl\fP is called with \fBTRUE\fP as an argument, +\fI\%ncurses\fP modifies the last step in its computation +of screen size as follows: +.bP +checks if the \fILINES\fP and \fI\%COLUMNS\fP environment variables +are set to a number greater than zero. +.bP +for each, \fI\%ncurses\fP updates the corresponding environment variable +with the value that it has obtained via operating system call +or from the terminal database. +.bP +\fI\%ncurses\fP re-fetches the value of the environment variables so +that it is still the environment variables which set the screen size. +.PP +The \fB\%use_env\fP and \fB\%use_tioctl\fP routines combine as follows. +.IP +.TS +lB lB lB +lB lB lx. +use_env use_tioctl Summary +_ +TRUE FALSE T{ +This is the default behavior. +\fI\%ncurses\fP uses operating system calls +unless overridden by \fILINES\fP or \fI\%COLUMNS\fP environment +variables; +default. +T} +TRUE TRUE T{ +\fI\%ncurses\fP updates \fILINES\fP and \fI\%COLUMNS\fP based on +operating system calls. +T} +FALSE TRUE T{ +\fI\%ncurses\fP ignores \fILINES\fP and \fI\%COLUMNS\fP, +using operating system calls to obtain size. +T} +.TE +.SS putwin/getwin +The \fBputwin\fP routine writes all data associated +with window (or pad) \fIwin\fP into +the file to which \fIfilep\fP points. +This information can be later retrieved +using the \fBgetwin\fP function. +.PP +The \fBgetwin\fP routine reads window related data stored in the file by +\fBputwin\fP. +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 (\fI\%ncursesw\fP) and +non-wide (\fI\%ncurses\fP) libraries. +You can transfer data between the two, however. +.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. +.SS delay_output +The \fBdelay_output\fP routine inserts an \fIms\fP millisecond pause +in output. +Employ this function judiciously when terminal output uses padding, +because \fI\%ncurses\fP transmits null characters +(consuming CPU and I/O resources) +instead of sleeping and requesting resumption from the operating system. +Padding is used unless: +.bP +the terminal description has \fBnpc\fP (\fBno_pad_char\fP) capability, or +.bP +the environment variable \fB\%NCURSES_NO_PADDING\fP is set. +.PP +If padding is not in use, +\fI\%ncurses\fP uses \fBnapms\fP to perform the delay. +If the value of \fIms\fP exceeds 30,000 +(thirty seconds), +it is capped at that value. +.SS flushinp +The \fBflushinp\fP routine throws away any typeahead that has been typed by the user and has not yet been read by the program. .SH RETURN VALUE -Except for \fBflushinp\fR, routines that return an integer return \fBERR\fR -upon failure and \fBOK\fR (SVr4 specifies only "an integer value other than -\fBERR\fR") upon successful completion. +Except for \fBflushinp\fP, routines that return an integer return \fBERR\fP +upon failure and \fBOK\fP (SVr4 specifies only "an integer value other than +\fBERR\fP") upon successful completion. .PP -Routines that return pointers return \fBNULL\fR on error. +Routines that return pointers return \fBNULL\fP on error. .PP X/Open does not define any error conditions. In this implementation -.RS +.RS 3 .TP 5 -\fBflushinp\fR +\fBflushinp\fP returns an error if the terminal was not initialized. .TP 5 \fBputwin\fP returns an error if the associated \fBfwrite\fP calls return an error. .RE .SH PORTABILITY +.SS filter +The SVr4 documentation describes the action of \fBfilter\fP only in the vaguest +terms. +The description here is adapted from the XSI Curses standard (which +erroneously fails to describe the disabling of \fBcuu\fP). +.SS delay_output padding +The limitation to 30 seconds +and the use of \fBnapms\fP +differ from other implementations. +.bP +SVr4 curses does not delay if no padding character is available. +.bP +NetBSD curses uses \fBnapms\fP when no padding character is available, +but does not take timing into account when using the padding character. +.PP +Neither limits the delay. +.SS keyname +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 +user-defined strings which begin with \*(``k\*(''. +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(3X) function controls whether this data is +loaded when the terminal description is read by the library. +.SS nofilter/use_tioctl +The \fBnofilter\fP and \fBuse_tioctl\fP routines are specific to +\fI\%ncurses\fP. +They were not supported on Version 7, BSD or System V implementations. +It is recommended that any code depending on \fI\%ncurses\fP extensions +be conditioned using \fBNCURSES_VERSION\fP. +.SS putwin/getwin file-format +The \fBputwin\fP and \fBgetwin\fP functions have several issues with +portability: +.bP +The files written and read by these functions +use an implementation-specific format. +Although the format is an obvious target for standardization, +it has been overlooked. +.IP +Interestingly enough, according to the copyright dates in Solaris source, +the functions (along with \fBscr_init\fP, etc.) originated with +the University of California, Berkeley (in 1982) +and were later (in 1988) incorporated into SVr4. +Oddly, there are no such functions in the 4.3BSD curses sources. +.bP +Most implementations simply dump the binary \fBWINDOW\fP structure to the file. +These include SVr4 curses, NetBSD and PDCurses, +as well as older \fI\%ncurses\fP versions. +This implementation +(as well as the X/Open variant of Solaris curses, dated 1995) +uses textual dumps. +.IP +The implementations which use binary dumps use block-I/O +(the \fBfwrite\fP and \fBfread\fP functions). +Those that use textual dumps use buffered-I/O. +A few applications may happen to write extra data in the file using +these functions. +Doing that can run into problems mixing block- and buffered-I/O. +This implementation reduces the problem on writes by flushing the output. +However, reading from a file written using mixed schemes may not be successful. +.SS unctrl/wunctrl The XSI Curses standard, Issue 4 describes these functions. -It states that \fBunctrl\fR and \fBwunctrl\fR will return a null pointer if +It states that \fBunctrl\fP and \fBwunctrl\fP will return a null pointer if unsuccessful, but does not define any error conditions. +This implementation checks for three cases: +.bP +the parameter is a 7-bit US\-ASCII code. +This is the case that X/Open Curses documented. +.bP +the parameter is in the range 128\-159, i.e., a C1 control code. +If \fBuse_legacy_coding\fP(3X) has been called with a \fB2\fP parameter, +\fBunctrl\fP returns the parameter, i.e., a one-character string with +the parameter as the first character. +Otherwise, it returns \*(``~@\*('', \*(``~A\*('', etc., +analogous to \*(``^@\*('', \*(``^A\*('', C0 controls. +.IP +X/Open Curses does not document whether \fBunctrl\fP can be called before +initializing curses. +This implementation permits that, +and returns the \*(``~@\*('', etc., values in that case. +.bP +parameter values outside the 0 to 255 range. +\fBunctrl\fP returns a null pointer. .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 -erroneously fails to describe the disabling of \fBcuu\fR). -.PP -The strings returned by \fBunctrl\fR in this implementation are determined -at compile time, showing C1 controls from the upper-128 codes with a `~' -prefix rather than `^'. -Other implementations typically show both sets of control characters with `^', -and may strip the parameter to 7 bits. +The strings returned by \fBunctrl\fP in this implementation are determined +at compile time, +showing C1 controls from the upper-128 codes +with a \*(``~\*('' prefix rather than \*(``^\*(''. +Other implementations have different conventions. +For example, they may show both sets of control characters with \*(``^\*('', +and strip the parameter to 7 bits. +Or they may ignore C1 controls and treat all of the upper-128 codes as +printable. This implementation uses 8 bits but does not modify the string to reflect locale. +The \fBuse_legacy_coding\fP(3X) function allows the caller to +change the output of \fBunctrl\fP. .PP -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 \fBtic\fP. +Likewise, the \fBmeta\fP(3X) function allows the caller to change the +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(3X) and \fBmeta\fP(3X) succeed only after +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), +this implementation returns strings \*(``M\-^@\*('', \*(``M\-^A\*('', etc. +.PP +X/Open Curses documents \fBunctrl\fP as declared in \fB\fP, +which \fI\%ncurses\fP does. +However, \fI\%ncurses\fP' \fB\fP includes \fB\fP, +matching the behavior of SVr4 curses. +Other implementations may not do that. +.SS use_env/use_tioctl +If \fI\%ncurses\fP is configured to provide the sp-functions extension, +the state of \fBuse_env\fP and \fBuse_tioctl\fP may be updated before +creating each \fIscreen\fP rather than once only +(\fBcurs_sp_funcs\fP(3X)). +This feature of \fBuse_env\fP +is not provided by other implementations of curses. .SH SEE ALSO -\fBcurses\fR(3X), -\fBcurs_initscr\fR(3X), -\fBcurs_kernel\fR(3X), -\fBcurs_scr_dump\fR(3X). -.\"# -.\"# The following sets edit modes for GNU EMACS -.\"# Local Variables: -.\"# mode:nroff -.\"# fill-column:79 -.\"# End: +\fB\%curses\fP(3X), +\fB\%curs_initscr\fP(3X), +\fB\%curs_inopts\fP(3X), +\fB\%curs_kernel\fP(3X), +\fB\%curs_scr_dump\fP(3X), +\fB\%curs_sp_funcs\fP(3X), +\fB\%curs_variables\fP(3X), +\fB\%legacy_coding\fP(3X)