Provided by: ncurses-doc_6.4-2_all bug

NAME

       delay_output, filter, flushinp, getwin, key_name, keyname, nofilter, putwin, unctrl,
       use_env, use_tioctl, wunctrl - miscellaneous curses utility routines

SYNOPSIS

       #include <curses.h>

       const char *unctrl(chtype c);
       wchar_t *wunctrl(cchar_t *c);

       const char *keyname(int c);
       const char *key_name(wchar_t w);

       void filter(void);
       void nofilter(void);

       void use_env(bool f);
       void use_tioctl(bool f);

       int putwin(WINDOW *win, FILE *filep);
       WINDOW *getwin(FILE *filep);

       int delay_output(int ms);
       int flushinp(void);

DESCRIPTION

   unctrl
       The unctrl routine returns a character string which is a printable representation  of  the
       character  c,  ignoring  attributes.  Control characters are displayed in the ^X notation.
       Printing characters are displayed as is.  The corresponding wunctrl  returns  a  printable
       representation of a wide character.

   keyname/key_name
       The keyname routine returns a character string corresponding to the key c:

       •   Printable  characters  are  displayed  as  themselves,  e.g.,  a  one-character string
           containing the key.

       •   Control characters are displayed in the ^X notation.

       •   DEL (character 127) is displayed as ^?.

       •   Values above 128 are either meta characters (if the screen has not  been  initialized,
           or  if  meta(3X) has been called with a TRUE parameter), shown in the M-X notation, or
           are displayed as themselves.  In the latter case, the values  may  not  be  printable;
           this follows the X/Open specification.

       •   Values above 256 may be the names of the names of function keys.

       •   Otherwise  (if there is no corresponding name) the function returns null, to denote an
           error.  X/Open also lists an “UNKNOWN KEY” return value,  which  some  implementations
           return rather than null.

       The  corresponding key_name returns a character string corresponding to the wide-character
       value w.  The two functions do not return the same set of strings; the latter returns null
       where the former would display a meta character.

   filter/nofilter
       The filter routine, if used, must be called before initscr or newterm are called.  Calling
       filter causes these changes in initialization:

       •   LINES is set to 1;

       •   the capabilities clear, cud1, cud, cup, cuu1, cuu, vpa are disabled;

       •   the capability ed is disabled if bce is set;

       •   and the home string is set to the value of cr.

       The nofilter routine cancels the effect of a  preceding  filter  call.   That  allows  the
       caller  to  initialize  a  screen on a different device, using a different value of $TERM.
       The limitation arises because the filter  routine  modifies  the  in-memory  copy  of  the
       terminal information.

   use_env
       The  use_env  routine,  if  used,  should  be  called before initscr or newterm are called
       (because those compute the screen size).  It modifies the way ncurses  treats  environment
       variables when determining the screen size.

       •   Normally ncurses looks first at the terminal database for the screen size.

           If  use_env  was  called with FALSE for parameter, it stops here unless use_tioctl was
           also called with TRUE for parameter.

       •   Then it asks for the screen size  via  operating  system  calls.   If  successful,  it
           overrides the values from the terminal database.

       •   Finally  (unless  use_env was called with FALSE parameter), ncurses examines the LINES
           or COLUMNS environment variables, using a value in those to override the results  from
           the operating system or terminal database.

           Ncurses also updates the screen size in response to SIGWINCH, unless overridden by the
           LINES or COLUMNS environment variables,

   use_tioctl
       The use_tioctl routine, if used, should be called before initscr  or  newterm  are  called
       (because  those  compute  the  screen  size).   After use_tioctl is called with TRUE as an
       argument, ncurses modifies the last step in its computation of screen size as follows:

       •   checks if the LINES and COLUMNS environment variables are set to a number greater than
           zero.

       •   for  each,  ncurses updates the corresponding environment variable with the value that
           it has obtained via operating system call or from the terminal database.

       •   ncurses re-fetches the value of the environment variables so  that  it  is  still  the
           environment variables which set the screen size.

       The use_env and use_tioctl routines combine as summarized here:

                    use_env   use_tioctl   Summary
                    ────────────────────────────────────────────────────────────────
                    TRUE      FALSE        This  is  the default behavior.  ncurses
                                           uses  operating  system   calls   unless
                                           overridden   by   $LINES   or   $COLUMNS
                                           environment variables.
                    TRUE      TRUE         ncurses  updates  $LINES  and   $COLUMNS
                                           based on operating system calls.
                    FALSE     TRUE         ncurses  ignores  $LINES  and  $COLUMNS,
                                           uses operating system  calls  to  obtain
                                           size.
                    FALSE     FALSE        ncurses  relies on the terminal database
                                           to determine size.

   putwin/getwin
       The putwin routine writes all data associated with window (or pad) win into  the  file  to
       which filep points.  This information can be later retrieved using the getwin function.

       The  getwin  routine  reads window related data stored in the file by putwin.  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:

       •   the  data  written  is  a  copy  of the WINDOW structure, and its associated character
           cells.   The  format  differs  between  the  wide-character  (ncursesw)  and  non-wide
           (ncurses) libraries.  You can transfer data between the two, however.

       •   the  retrieved  window is always created as a top-level window (or pad), rather than a
           subwindow.

       •   the window's character cells contain the color pair value, but not  the  actual  color
           numbers.  If cells in the retrieved window use color pairs which have not been created
           in the application using init_pair, they will  not  be  colored  when  the  window  is
           refreshed.

   delay_output
       The  delay_output  routine inserts an ms 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 napms to perform the delay.

   flushinp
       The flushinp routine throws away any typeahead that has been typed by the user and has not
       yet been read by the program.

RETURN VALUE

       Except for flushinp, routines that return an integer return ERR upon failure and OK  (SVr4
       specifies only "an integer value other than ERR") upon successful completion.

       Routines that return pointers return NULL on error.

       X/Open does not define any error conditions.  In this implementation

          flushinp
               returns an error if the terminal was not initialized.

          putwin
               returns an error if the associated fwrite calls return an error.

PORTABILITY

   filter
       The  SVr4  documentation  describes  the  action of filter only in the vaguest terms.  The
       description here is adapted from the XSI  Curses  standard  (which  erroneously  fails  to
       describe the disabling of cuu).

   keyname
       The  keyname  function  may return the names of user-defined string capabilities which are
       defined in the terminfo entry via the -x option of tic.  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
       use_extended_names(3X) function controls whether this data is  loaded  when  the  terminal
       description is read by the library.

   nofilter/use_tioctl
       The  nofilter and use_tioctl routines are specific to ncurses.  They were not supported on
       Version 7, BSD or System V implementations.  It is recommended that any code depending  on
       ncurses extensions be conditioned using NCURSES_VERSION.

   putwin/getwin file-format
       The putwin and getwin functions have several issues with portability:

       •   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.

           Interestingly enough,  according  to  the  copyright  dates  in  Solaris  source,  the
           functions  (along  with  scr_init, 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.

       •   Most  implementations  simply  dump  the  binary  WINDOW structure to the file.  These
           include SVr4 curses, NetBSD and PDCurses, as well as  older  ncurses  versions.   This
           implementation  (as  well  as  the  X/Open variant of Solaris curses, dated 1995) uses
           textual dumps.

           The implementations which use  binary  dumps  use  block-I/O  (the  fwrite  and  fread
           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.

   unctrl/wunctrl
       The  XSI  Curses  standard,  Issue 4 describes these functions.  It states that unctrl and
       wunctrl will return a null  pointer  if  unsuccessful,  but  does  not  define  any  error
       conditions.  This implementation checks for three cases:

       •   the  parameter  is  a  7-bit  US-ASCII  code.   This  is  the  case that X/Open Curses
           documented.

       •   the  parameter  is  in  the  range   128-159,   i.e.,   a   C1   control   code.    If
           use_legacy_coding(3X)  has  been  called  with  a  2  parameter,  unctrl  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.

           X/Open  Curses  does  not  document  whether  unctrl can be called before initializing
           curses.  This implementation permits that, and returns the “~@”, etc., values in  that
           case.

       •   parameter values outside the 0 to 255 range.  unctrl returns a null pointer.

       The  strings  returned  by  unctrl  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 use_legacy_coding(3X) function
       allows the caller to change the output of unctrl.

       Likewise,  the  meta(3X) function allows the caller to change the output of keyname, i.e.,
       it determines whether to use the “M-” prefix for “meta” keys (codes in the  range  128  to
       255).   Both  use_legacy_coding(3X) and meta(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  keyname  is called before initializing curses), this implementation
       returns strings “M-^@”, “M-^A”, etc.

       X/Open Curses documents unctrl as declared in <unctrl.h>, which  ncurses  does.   However,
       ncurses'  <curses.h>  includes  <unctrl.h>,  matching  the behavior of SVr4 curses.  Other
       implementations may not do that.

   use_env/use_tioctl
       If ncurses is configured to provide the sp-functions extension, the state of  use_env  and
       use_tioctl   may   be   updated   before  creating  each  screen  rather  than  once  only
       (sp_funcs(3NCURSES)).  This feature of use_env is not provided by other implementation  of
       curses.

SEE ALSO

       ncurses(3NCURSES),       initscr(3NCURSES),       inopts(3NCURSES),      kernel(3NCURSES),
       scr_dump(3NCURSES),            sp_funcs(3NCURSES),             curses_variables(3NCURSES),
       legacy_coding(3NCURSES).

                                                                                   util(3NCURSES)