summaryrefslogtreecommitdiff
path: root/doc/html/man/new_pair.3x.html
blob: 12214bec7c0a5aa7c600823cf07b7ead4b63b32d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
<!--
  ****************************************************************************
  * Copyright 2018-2020,2021 Thomas E. Dickey                                *
  * Copyright 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            *
  * "Software"), to deal in the Software without restriction, including      *
  * without limitation the rights to use, copy, modify, merge, publish,      *
  * distribute, distribute with modifications, sublicense, and/or sell       *
  * copies of the Software, and to permit persons to whom the Software is    *
  * furnished to do so, subject to the following conditions:                 *
  *                                                                          *
  * The above copyright notice and this permission notice shall be included  *
  * in all copies or substantial portions of the Software.                   *
  *                                                                          *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  *                                                                          *
  * Except as contained in this notice, the name(s) of the above copyright   *
  * holders shall not be used in advertising or otherwise to promote the     *
  * sale, use or other dealings in this Software without prior written       *
  * authorization.                                                           *
  ****************************************************************************
  * Author: Thomas E. Dickey
  * @Id: new_pair.3x,v 1.16 2021/06/17 21:26:02 tom Exp @
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="generator" content="Manpage converted by man2html - see https://invisible-island.net/scripts/readme.html#others_scripts">
<TITLE>new_pair 3x</TITLE>
<link rel="author" href="mailto:bug-ncurses@gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY>
<H1 class="no-header">new_pair 3x</H1>
<PRE>
<STRONG><A HREF="new_pair.3x.html">new_pair(3x)</A></STRONG>                                                      <STRONG><A HREF="new_pair.3x.html">new_pair(3x)</A></STRONG>




</PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
       <STRONG>alloc_pair</STRONG>, <STRONG>find_pair</STRONG>, <STRONG>free_pair</STRONG> - new curses color-pair functions


</PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
       <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>

       <STRONG>int</STRONG> <STRONG>alloc_pair(int</STRONG> <EM>fg</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>bg</EM><STRONG>);</STRONG>
       <STRONG>int</STRONG> <STRONG>find_pair(int</STRONG> <EM>fg</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>bg</EM><STRONG>);</STRONG>
       <STRONG>int</STRONG> <STRONG>free_pair(int</STRONG> <EM>pair</EM><STRONG>);</STRONG>


</PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
       These functions are an extension to the curses library.  They permit an
       application  to  dynamically  allocate   a   color   pair   using   the
       foreground/background  colors  rather  than  assign  a fixed color pair
       number, and return an unused pair to the pool.

       The number of colors may be related to the  number  of  possible  color
       pairs for a given terminal, or it may not:

       <STRONG>o</STRONG>   While  almost  all  terminals  allow  setting  the color <EM>attributes</EM>
           independently, it is unlikely that  your  terminal  allows  you  to
           modify  the  attributes of a given character cell without rewriting
           it.  That is, the foreground and background colors are applied as a
           pair.

       <STRONG>o</STRONG>   Color  pairs  are  the  curses  library's  way  of managing a color
           palette on a terminal.  If the library does not keep track  of  the
           <EM>combinations</EM> of colors which are displayed, it will be inefficient.

       <STRONG>o</STRONG>   For   simple  terminal  emulators  with  only  a  few  dozen  color
           combinations, it  is  convenient  to  use  the  maximum  number  of
           combinations as the limit on color pairs:

               <STRONG>COLORS</STRONG> <EM>*</EM> <STRONG>COLORS</STRONG>

       <STRONG>o</STRONG>   Terminals  which support <EM>default</EM> <EM>colors</EM> distinct from "ANSI colors"
           add to the possible combinations, producing this total:

               <EM>(</EM> <STRONG>COLORS</STRONG> <EM>+</EM> <EM>1</EM> <EM>)</EM> <EM>*</EM> <EM>(</EM> <STRONG>COLORS</STRONG> <EM>+</EM> <EM>1</EM> <EM>)</EM>

       <STRONG>o</STRONG>   An application might use up to a few dozen color pairs to implement
           a predefined color scheme.

           Beyond  that lies in the realm of programs using the foreground and
           background colors  for  "ASCII  art"  (or  some  other  non-textual
           application).

           Also beyond those few dozen pairs, the required size for a table to
           represent the combinations grows rapidly with an increasing  number
           of colors.

           These  functions allow a developer to let the screen library manage
           color pairs.


</PRE><H3><a name="h3-alloc_pair">alloc_pair</a></H3><PRE>
       The  <STRONG>alloc_pair</STRONG>  function  accepts  parameters   for   foreground   and
       background  color,  and  checks  if  that  color combination is already
       associated with a color pair.

       <STRONG>o</STRONG>   If the combination already exists, <STRONG>alloc_pair</STRONG> returns the  existing
           pair.

       <STRONG>o</STRONG>   If the combination does not exist, <STRONG>alloc_pair</STRONG> allocates a new color
           pair and returns that.

       <STRONG>o</STRONG>   If the table  fills  up,  <STRONG>alloc_pair</STRONG>  discards  the  least-recently
           allocated entry using <STRONG>free_pair</STRONG> and allocates a new color pair.

       All  of  the  color  pairs are allocated from a table of possible color
       pairs.  The size of the table  is  determined  by  the  terminfo  <EM>pairs</EM>
       capability.   The  table  is  shared with <STRONG>init_pair</STRONG>; in fact <STRONG>alloc_pair</STRONG>
       calls <STRONG>init_pair</STRONG> after updating the ncurses library's fast index to  the
       colors versus color pairs.


</PRE><H3><a name="h3-find_pair">find_pair</a></H3><PRE>
       The <STRONG>find_pair</STRONG> function accepts parameters for foreground and background
       color, and checks if that color combination is already associated  with
       a  color  pair,  returning  the  pair  number if it has been allocated.
       Otherwise it returns -1.


</PRE><H3><a name="h3-free_pair">free_pair</a></H3><PRE>
       Marks the given color pair as unused, i.e., like color pair 0.


</PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
       The <STRONG>alloc_pair</STRONG> function returns a color pair  number  in  the  range  1
       through  <STRONG>COLOR_PAIRS</STRONG>-1, unless it encounters an error updating its fast
       index to the color pair values, preventing it from allocating  a  color
       pair.  In that case, it returns -1.

       The  <STRONG>find_pair</STRONG>  function returns a color pair number if the given color
       combination has been associated with a color pair, or -1 if not.

       Likewise, <STRONG>free_pair</STRONG> returns <STRONG>OK</STRONG> unless it encounters an  error  updating
       the fast index or if no such color pair is in use.


</PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
       These  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 them be conditioned using NCURSES_VERSION.


</PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
       <STRONG><A HREF="curs_color.3x.html">curs_color(3x)</A></STRONG>.


</PRE><H2><a name="h2-AUTHOR">AUTHOR</a></H2><PRE>
       Thomas Dickey.



                                                                  <STRONG><A HREF="new_pair.3x.html">new_pair(3x)</A></STRONG>
</PRE>
<div class="nav">
<ul>
<li><a href="#h2-NAME">NAME</a></li>
<li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
<ul>
<li><a href="#h3-alloc_pair">alloc_pair</a></li>
<li><a href="#h3-find_pair">find_pair</a></li>
<li><a href="#h3-free_pair">free_pair</a></li>
</ul>
</li>
<li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
<li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
<li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
<li><a href="#h2-AUTHOR">AUTHOR</a></li>
</ul>
</div>
</BODY>
</HTML>