00b13c257c8f1e7eaac4fc2f9feb35c66bd6955b
[ncurses.git] / doc / html / man / curs_util.3x.html
1 <!-- 
2   * t
3   ****************************************************************************
4   * Copyright (c) 1998-2013,2015 Free Software Foundation, Inc.              *
5   *                                                                          *
6   * Permission is hereby granted, free of charge, to any person obtaining a  *
7   * copy of this software and associated documentation files (the            *
8   * "Software"), to deal in the Software without restriction, including      *
9   * without limitation the rights to use, copy, modify, merge, publish,      *
10   * distribute, distribute with modifications, sublicense, and/or sell       *
11   * copies of the Software, and to permit persons to whom the Software is    *
12   * furnished to do so, subject to the following conditions:                 *
13   *                                                                          *
14   * The above copyright notice and this permission notice shall be included  *
15   * in all copies or substantial portions of the Software.                   *
16   *                                                                          *
17   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
18   * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
19   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
20   * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
21   * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
22   * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
23   * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
24   *                                                                          *
25   * Except as contained in this notice, the name(s) of the above copyright   *
26   * holders shall not be used in advertising or otherwise to promote the     *
27   * sale, use or other dealings in this Software without prior written       *
28   * authorization.                                                           *
29   ****************************************************************************
30   * @Id: curs_util.3x,v 1.43 2015/06/06 23:36:27 tom Exp @
31 -->
32 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
33 <HTML>
34 <HEAD>
35 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
36 <meta name="generator" content="Manpage converted by man2html - see http://invisible-island.net/scripts/readme.html#others_scripts">
37 <TITLE>curs_util 3x</TITLE>
38 <link rev=made href="mailto:bug-ncurses@gnu.org">
39 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
40 </HEAD>
41 <BODY>
42 <H1 class="no-header">curs_util 3x</H1>
43 <PRE>
44 <STRONG><A HREF="curs_util.3x.html">curs_util(3x)</A></STRONG>                                             <STRONG><A HREF="curs_util.3x.html">curs_util(3x)</A></STRONG>
45
46
47
48
49 </PRE>
50 <H2><a name="h2-NAME">NAME</a></H2><PRE>
51        <STRONG>delay_output</STRONG>, <STRONG>filter</STRONG>, <STRONG>flushinp</STRONG>, <STRONG>getwin</STRONG>, <STRONG>key_name</STRONG>, <STRONG>keyname</STRONG>,
52        <STRONG>nofilter</STRONG>, <STRONG>putwin</STRONG>, <STRONG>unctrl</STRONG>, <STRONG>use_env</STRONG>, <STRONG>use_tioctl</STRONG>, <STRONG>wunctrl</STRONG> -
53        miscellaneous <STRONG>curses</STRONG> utility routines
54
55
56 </PRE>
57 <H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
58        <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>
59
60        <STRONG>char</STRONG> <STRONG>*unctrl(chtype</STRONG> <STRONG>c);</STRONG>
61        <STRONG>wchar_t</STRONG> <STRONG>*wunctrl(cchar_t</STRONG> <STRONG>*c);</STRONG>
62        <STRONG>char</STRONG> <STRONG>*keyname(int</STRONG> <STRONG>c);</STRONG>
63        <STRONG>char</STRONG> <STRONG>*key_name(wchar_t</STRONG> <STRONG>w);</STRONG>
64        <STRONG>void</STRONG> <STRONG>filter(void);</STRONG>
65        <STRONG>void</STRONG> <STRONG>nofilter(void);</STRONG>
66        <STRONG>void</STRONG> <STRONG>use_env(bool</STRONG> <STRONG>f);</STRONG>
67        <STRONG>void</STRONG> <STRONG>use_tioctl(bool</STRONG> <STRONG>f);</STRONG>
68        <STRONG>int</STRONG> <STRONG>putwin(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>FILE</STRONG> <STRONG>*filep);</STRONG>
69        <STRONG>WINDOW</STRONG> <STRONG>*getwin(FILE</STRONG> <STRONG>*filep);</STRONG>
70        <STRONG>int</STRONG> <STRONG>delay_output(int</STRONG> <STRONG>ms);</STRONG>
71        <STRONG>int</STRONG> <STRONG>flushinp(void);</STRONG>
72
73
74 </PRE>
75 <H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
76
77 </PRE>
78 <H3><a name="h3-unctrl">unctrl</a></H3><PRE>
79        The  <STRONG>unctrl</STRONG>  routine returns a character string which is a
80        printable representation of the character <EM>c</EM>, ignoring  at-
81        tributes.   Control characters are displayed in the <STRONG>^</STRONG><EM>X</EM> no-
82        tation.  Printing characters are  displayed  as  is.   The
83        corresponding  <STRONG>wunctrl</STRONG>  returns a printable representation
84        of a wide character.
85
86
87 </PRE>
88 <H3><a name="h3-keyname_key_name">keyname/key_name</a></H3><PRE>
89        The <STRONG>keyname</STRONG> routine returns a character string correspond-
90        ing to the key <EM>c</EM>:
91
92        <STRONG>o</STRONG>   Printable  characters  are  displayed  as  themselves,
93            e.g., a one-character string containing the key.
94
95        <STRONG>o</STRONG>   Control characters are displayed in the <STRONG>^</STRONG><EM>X</EM> notation.
96
97        <STRONG>o</STRONG>   DEL (character 127) is displayed as <STRONG>^?</STRONG>.
98
99        <STRONG>o</STRONG>   Values above 128 are either meta  characters  (if  the
100            screen  has  not been initialized, or if <STRONG>meta</STRONG> has been
101            called with a <STRONG>TRUE</STRONG> parameter), shown in the <STRONG>M-</STRONG><EM>X</EM>  nota-
102            tion,  or  are displayed as themselves.  In the latter
103            case, the values may not be  printable;  this  follows
104            the X/Open specification.
105
106        <STRONG>o</STRONG>   Values  above  256  may  be  the names of the names of
107            function keys.
108
109        <STRONG>o</STRONG>   Otherwise (if there  is  no  corresponding  name)  the
110            function returns null, to denote an error.  X/Open al-
111            so lists an "UNKNOWN KEY" return value, which some im-
112            plementations return rather than null.
113
114        The corresponding <STRONG>key_name</STRONG> returns a character string cor-
115        responding to the wide-character value <EM>w</EM>.  The  two  func-
116        tions  do  not  return the same set of strings; the latter
117        returns null where the former would display a meta charac-
118        ter.
119
120
121 </PRE>
122 <H3><a name="h3-filter_nofilter">filter/nofilter</a></H3><PRE>
123        The <STRONG>filter</STRONG> routine, if used, must be called before <STRONG>initscr</STRONG>
124        or <STRONG>newterm</STRONG> are called.  The effect is that,  during  those
125        calls,  <STRONG>LINES</STRONG>  is  set  to 1; the capabilities <STRONG>clear</STRONG>, <STRONG>cup</STRONG>,
126        <STRONG>cud</STRONG>, <STRONG>cud1</STRONG>, <STRONG>cuu1</STRONG>, <STRONG>cuu</STRONG>,  <STRONG>vpa</STRONG>  are  disabled;  and  the  <STRONG>home</STRONG>
127        string is set to the value of <STRONG>cr</STRONG>.
128
129        The  <STRONG>nofilter</STRONG>  routine  cancels  the effect of a preceding
130        <STRONG>filter</STRONG> call.  That  allows  the  caller  to  initialize  a
131        screen  on  a different device, using a different value of
132        <STRONG>$TERM</STRONG>.  The limitation arises because the  <STRONG>filter</STRONG>  routine
133        modifies the in-memory copy of the terminal information.
134
135
136 </PRE>
137 <H3><a name="h3-use_env">use_env</a></H3><PRE>
138        The  <STRONG>use_env</STRONG>  routine,  if  used,  should be called before
139        <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG> are called (because those  compute  the
140        screen size).  It modifies the way <STRONG>ncurses</STRONG> treats environ-
141        ment variables when determining the screen size.
142
143        <STRONG>o</STRONG>   Normally ncurses looks first at the terminal  database
144            for the screen size.
145
146            If  <STRONG>use_env</STRONG>  was  called  with <STRONG>FALSE</STRONG> for parameter, it
147            stops here unless If <STRONG>use_tioctl</STRONG> was also  called  with
148            <STRONG>TRUE</STRONG> for parameter.
149
150        <STRONG>o</STRONG>   Then  it asks for the screen size via operating system
151            calls.  If successful, it overrides  the  values  from
152            the terminal database.
153
154        <STRONG>o</STRONG>   Finally  (unless <STRONG>use_env</STRONG> was called with <STRONG>FALSE</STRONG> parame-
155            ter), ncurses examines the <STRONG>LINES</STRONG> or  <STRONG>COLUMNS</STRONG>  environ-
156            ment variables, using a value in those to override the
157            results from the operating system  or  terminal  data-
158            base.
159
160            Ncurses  also  updates  the screen size in response to
161            SIGWINCH, unless overridden by the  <STRONG>LINES</STRONG>  or  <STRONG>COLUMNS</STRONG>
162            environment variables,
163
164
165 </PRE>
166 <H3><a name="h3-use_tioctl">use_tioctl</a></H3><PRE>
167        The  <STRONG>use_tioctl</STRONG>  routine, if used, should be called before
168        <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG> are called (because those  compute  the
169        screen  size).  After <STRONG>use_tioctl</STRONG> is called with <STRONG>TRUE</STRONG> as an
170        argument, ncurses modifies the last step in  its  computa-
171        tion of screen size as follows:
172
173        <STRONG>o</STRONG>   checks  if the <STRONG>LINES</STRONG> and <STRONG>COLUMNS</STRONG> environment variables
174            are set to a number greater than zero.
175
176        <STRONG>o</STRONG>   for each, ncurses updates the  corresponding  environ-
177            ment  variable with the value that it has obtained via
178            operating system call or from the terminal database.
179
180        <STRONG>o</STRONG>   ncurses re-fetches the value of the environment  vari-
181            ables  so  that  it is still the environment variables
182            which set the screen size.
183
184        The <STRONG>use_env</STRONG> and <STRONG>use_tioctl</STRONG> routines combine as  summarized
185        here:
186
187      <EM>use</EM><STRONG>_</STRONG><EM>env</EM>   <EM>use</EM><STRONG>_</STRONG><EM>tioctl</EM>   <EM>Summary</EM>
188      ----------------------------------------------------------------
189
190
191
192      TRUE      FALSE        This  is  the default behavior.  ncurses
193                             uses operating system calls unless over-
194                             ridden by $LINES or $COLUMNS environment
195                             variables.
196      TRUE      TRUE         ncurses  updates  $LINES  and   $COLUMNS
197                             based on operating system calls.
198      FALSE     TRUE         ncurses ignores $LINES and $COLUMNS, us-
199                             es  operating  system  calls  to  obtain
200                             size.
201      FALSE     FALSE        ncurses  relies on the terminal database
202                             to determine size.
203
204
205 </PRE>
206 <H3><a name="h3-putwin_getwin">putwin/getwin</a></H3><PRE>
207        The <STRONG>putwin</STRONG> routine writes all data associated with  window
208        (or  pad)  <EM>win</EM>  into the file to which <EM>filep</EM> points.  This
209        information can be later retrieved using the <STRONG>getwin</STRONG>  func-
210        tion.
211
212        The <STRONG>getwin</STRONG> routine reads window related data stored in the
213        file by <STRONG>putwin</STRONG>.  The routine then creates and  initializes
214        a new window using that data.  It returns a pointer to the
215        new window.  There are a few caveats:
216
217        <STRONG>o</STRONG>   the data written is a copy of  the  <STRONG>WINDOW</STRONG>  structure,
218            and  its  associated character cells.  The format dif-
219            fers between the wide-character  (ncursesw)  and  non-
220            wide  (ncurses)  libraries.  You can transfer data be-
221            tween the two, however.
222
223        <STRONG>o</STRONG>   the retrieved window is always created as a  top-level
224            window (or pad), rather than a subwindow.
225
226        <STRONG>o</STRONG>   the  window's  character  cells contain the color pair
227            <EM>value</EM>, but not the actual color <EM>numbers</EM>.  If cells  in
228            the  retrieved  window  use color pairs which have not
229            been created in the application using <STRONG>init_pair</STRONG>,  they
230            will not be colored when the window is refreshed.
231
232
233 </PRE>
234 <H3><a name="h3-delay_output">delay_output</a></H3><PRE>
235        The  <STRONG>delay_output</STRONG>  routine inserts an <EM>ms</EM> millisecond pause
236        in output.  This routine should not  be  used  extensively
237        because  padding  characters  are  used  rather than a CPU
238        pause.  If no padding character is  specified,  this  uses
239        <STRONG>napms</STRONG> to perform the delay.
240
241
242 </PRE>
243 <H3><a name="h3-flushinp">flushinp</a></H3><PRE>
244        The  <STRONG>flushinp</STRONG>  routine  throws away any typeahead that has
245        been typed by the user and has not yet been  read  by  the
246        program.
247
248
249 </PRE>
250 <H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
251        Except  for  <STRONG>flushinp</STRONG>, routines that return an integer re-
252        turn <STRONG>ERR</STRONG> upon failure and <STRONG>OK</STRONG> (SVr4 specifies only "an  in-
253        teger value other than <STRONG>ERR</STRONG>") upon successful completion.
254
255        Routines that return pointers return <STRONG>NULL</STRONG> on error.
256
257        X/Open  does not define any error conditions.  In this im-
258        plementation
259
260           <STRONG>flushinp</STRONG>
261                returns an error if the terminal was not  initial-
262                ized.
263
264           <STRONG>meta</STRONG> returns  an error if the terminal was not initial-
265                ized.
266
267           <STRONG>putwin</STRONG>
268                returns an error if the  associated  <STRONG>fwrite</STRONG>  calls
269                return an error.
270
271
272 </PRE>
273 <H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
274
275 </PRE>
276 <H3><a name="h3-filter">filter</a></H3><PRE>
277        The SVr4 documentation describes the action of <STRONG>filter</STRONG> only
278        in the vaguest terms.  The  description  here  is  adapted
279        from  the  XSI Curses standard (which erroneously fails to
280        describe the disabling of <STRONG>cuu</STRONG>).
281
282
283 </PRE>
284 <H3><a name="h3-keyname">keyname</a></H3><PRE>
285        The <STRONG>keyname</STRONG> function may return the names of  user-defined
286        string  capabilities which are defined in the terminfo en-
287        try via the <STRONG>-x</STRONG> option of <STRONG>tic</STRONG>.  This  implementation  auto-
288        matically  assigns  at  run-time  keycodes to user-defined
289        strings which begin  with  "k".   The  keycodes  start  at
290        KEY_MAX,  but  are not guaranteed to be the same value for
291        different runs because user-defined codes are merged  from
292        all  terminal  descriptions  which  have been loaded.  The
293        <STRONG>use_extended_names</STRONG> function controls whether this data  is
294        loaded  when  the  terminal description is read by the li-
295        brary.
296
297
298 </PRE>
299 <H3><a name="h3-nofilter_use_tioctl">nofilter/use_tioctl</a></H3><PRE>
300        The <STRONG>nofilter</STRONG>  and  <STRONG>use_tioctl</STRONG>  routines  are  specific  to
301        ncurses.   They  were  not  supported on Version 7, BSD or
302        System V implementations.  It is recommended that any code
303        depending  on  ncurses  extensions  be  conditioned  using
304        NCURSES_VERSION.
305
306
307 </PRE>
308 <H3><a name="h3-putwin_getwin">putwin/getwin</a></H3><PRE>
309        The <STRONG>putwin</STRONG> and <STRONG>getwin</STRONG> functions have several  issues  with
310        portability:
311
312        <STRONG>o</STRONG>   The  files  written and read by these functions use an
313            implementation-specific format.  Although  the  format
314            is  an obvious target for standardization, it has been
315            overlooked.
316
317            Interestingly enough, according to the copyright dates
318            in Solaris source, the functions (along with <STRONG>scr_init</STRONG>,
319            etc.) originated with the  University  of  California,
320            Berkeley  (in  1982) and were later (in 1988) incorpo-
321            rated into SVr4.  Oddly, there are no  such  functions
322            in the 4.3BSD curses sources.
323
324        <STRONG>o</STRONG>   Most  implementations  simply  dump  the binary <STRONG>WINDOW</STRONG>
325            structure to the file.   These  include  SVr4  curses,
326            NetBSD  and  PDCurses,  as  well as older ncurses ver-
327            sions.  This implementation (as  well  as  the  X/Open
328            variant  of  Solaris  curses, dated 1995) uses textual
329            dumps.
330
331            The implementations which use binary dumps use  block-
332            I/O  (the <STRONG>fwrite</STRONG> and <STRONG>fread</STRONG> functions).  Those that use
333            textual dumps use buffered-I/O.   A  few  applications
334            may happen to write extra data in the file using these
335            functions.  Doing that can run  into  problems  mixing
336            block-  and buffered-I/O.  This implementation reduces
337            the problem on writes by flushing the output.   Howev-
338            er,  reading  from  a file written using mixed schemes
339            may not be successful.
340
341
342 </PRE>
343 <H3><a name="h3-unctrl_wunctrl">unctrl/wunctrl</a></H3><PRE>
344        The XSI Curses standard, Issue  4  describes  these  func-
345        tions.   It  states  that <STRONG>unctrl</STRONG> and <STRONG>wunctrl</STRONG> will return a
346        null pointer if unsuccessful, but does not define any  er-
347        ror conditions.  This implementation checks for three cas-
348        es:
349
350        <STRONG>o</STRONG>   the parameter is a 7-bit US-ASCII code.  This  is  the
351            case that X/Open Curses documented.
352
353        <STRONG>o</STRONG>   the parameter is in the range 128-159, i.e., a C1 con-
354            trol code.  If <STRONG>use_legacy_coding</STRONG> has been called  with
355            a  <STRONG>2</STRONG>  parameter, <STRONG>unctrl</STRONG> returns the parameter, i.e., a
356            one-character string with the parameter as  the  first
357            character.   Otherwise,  it  returns "~@", "~A", etc.,
358            analogous to "^@", "^A", C0 controls.
359
360            X/Open Curses does not document whether <STRONG>unctrl</STRONG> can  be
361            called  before  initializing curses.  This implementa-
362            tion permits that, and returns the "~@", etc.,  values
363            in that case.
364
365        <STRONG>o</STRONG>   parameter  values  outside the 0 to 255 range.  <STRONG>unctrl</STRONG>
366            returns a null pointer.
367
368        The strings returned by <STRONG>unctrl</STRONG> in this implementation  are
369        determined  at  compile time, showing C1 controls from the
370        upper-128 codes with a `~' prefix rather than `^'.   Other
371        implementations  have different conventions.  For example,
372        they may show both sets of control  characters  with  `^',
373        and  strip the parameter to 7 bits.  Or they may ignore C1
374        controls and treat all of the upper-128  codes  as  print-
375        able.  This implementation uses 8 bits but does not modify
376        the string to reflect locale.  The <STRONG>use_legacy_coding</STRONG> func-
377        tion allows the caller to change the output of <STRONG>unctrl</STRONG>.
378
379        Likewise,  the  <STRONG>meta</STRONG>  function allows the caller to change
380        the output of <STRONG>keyname</STRONG>, i.e., it determines whether to  use
381        the `M-' prefix for "meta" keys (codes in the range 128 to
382        255).  Both <STRONG>use_legacy_coding</STRONG> and <STRONG>meta</STRONG> succeed only  after
383        curses  is  initialized.   X/Open Curses does not document
384        the treatment of codes 128 to 159.  When treating them  as
385        "meta"  keys  (or if <STRONG>keyname</STRONG> is called before initializing
386        curses),  this  implementation  returns  strings   "M-^@",
387        "M-^A", etc.
388
389
390 </PRE>
391 <H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
392        <STRONG><A HREF="legacy_coding.3x.html">legacy_coding(3x)</A></STRONG>, <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3x)</A></STRONG>, <STRONG>curs_ker-</STRONG>
393        <STRONG><A HREF="curs_kernel.3x.html">nel(3x)</A></STRONG>,  <STRONG><A HREF="curs_scr_dump.3x.html">curs_scr_dump(3x)</A></STRONG>,   <STRONG><A HREF="curs_variables.3x.html">curs_variables(3x)</A></STRONG>,   <STRONG>lega-</STRONG>
394        <STRONG><A HREF="legacy_coding.3x.html">cy_coding(3x)</A></STRONG>.
395
396
397
398                                                           <STRONG><A HREF="curs_util.3x.html">curs_util(3x)</A></STRONG>
399 </PRE>
400 <div class="nav">
401 <ul>
402 <li><a href="#h2-NAME">NAME</a></li>
403 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
404 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
405 <ul>
406 <li><a href="#h3-unctrl">unctrl</a></li>
407 <li><a href="#h3-keyname_key_name">keyname/key_name</a></li>
408 <li><a href="#h3-filter_nofilter">filter/nofilter</a></li>
409 <li><a href="#h3-use_env">use_env</a></li>
410 <li><a href="#h3-use_tioctl">use_tioctl</a></li>
411 <li><a href="#h3-putwin_getwin">putwin/getwin</a></li>
412 <li><a href="#h3-delay_output">delay_output</a></li>
413 <li><a href="#h3-flushinp">flushinp</a></li>
414 </ul>
415 </li>
416 <li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
417 <li><a href="#h2-PORTABILITY">PORTABILITY</a>
418 <ul>
419 <li><a href="#h3-filter">filter</a></li>
420 <li><a href="#h3-keyname">keyname</a></li>
421 <li><a href="#h3-nofilter_use_tioctl">nofilter/use_tioctl</a></li>
422 <li><a href="#h3-putwin_getwin">putwin/getwin</a></li>
423 <li><a href="#h3-unctrl_wunctrl">unctrl/wunctrl</a></li>
424 </ul>
425 </li>
426 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
427 </ul>
428 </div>
429 </BODY>
430 </HTML>