<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
                   "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<!-- lifted from troff+man by doclifter -->
<refentry id='xascmapman'>
<!-- '\" t -->
<!--  Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium -->

<!--  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, 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 X CONSORTIUM 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 of the X Consortium shall -->
<!--  not be used in advertising or otherwise to promote the sale, use or -->
<!--  other dealings in this Software without prior written authorization -->
<!--  from the X Consortium. -->

<!--  Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by -->
<!--  Digital Equipment Corporation -->

<!--  Portions Copyright \(co 1990, 1991 by -->
<!--  Tektronix, Inc. -->

<!--  Permission to use, copy, modify and distribute this documentation for -->
<!--  any purpose and without fee is hereby granted, provided that the above -->
<!--  copyright notice appears in all copies and that both that copyright notice -->
<!--  and this permission notice appear in all copies, and that the names of -->
<!--  Digital and Tektronix not be used in in advertising or publicity pertaining -->
<!--  to this documentation without specific, written prior permission. -->
<!--  Digital and Tektronix makes no representations about the suitability -->
<!--  of this documentation for any purpose. -->
<!--  It is provided ``as is'' without express or implied warranty. -->
<!--   -->
<!--  $XFree86: xc/doc/man/X11/XASCmap.man,v 1.6 2003/11/23 05:40:32 dawes Exp $ -->

<!-- .na -->
<!-- FD listing suppressed (not used) -->
<!-- FN listing suppressed (not used) -->
<!-- C{ listing suppressed (not used) -->
<!-- C} listing suppressed (not used) -->
<!-- Pn listing suppressed (not used) -->
<!-- hN listing suppressed (not used) -->
<!-- NT listing suppressed (not used) -->
<!-- .		\" Note End \-\- doug kraft 3/85 -->
<!-- NE listing suppressed (not used) -->
<!-- .ny0 -->
<!-- '\" t -->
<refmeta>
<refentrytitle>XAllocStandardColormap</refentrytitle>
<manvolnum>3X11</manvolnum>
<refmiscinfo class='date'>__xorgversion__</refmiscinfo>
<refmiscinfo class='source'>XLIB FUNCTIONS</refmiscinfo>
</refmeta>
<refnamediv id='name'>
<refname>XAllocStandardColormap</refname>
<refname>XSetRGBColormaps</refname>
<refname>XGetRGBColormaps</refname>
<refname>XStandardColormap</refname>
<refpurpose>allocate, set, or read a standard colormap structure</refpurpose>
</refnamediv>
<!-- body begins here -->

<refsect1 id='syntax'><title>SYNTAX</title>

<para>XStandardColormap *XAllocStandardColormap&hairsp;(void&hairsp;);</para>

<para>void XSetRGBColormaps&hairsp;(&hairsp;Display *<emphasis remap='I'>display</emphasis>, Window <emphasis remap='I'>w</emphasis>,
XStandardColormap *<emphasis remap='I'>std_colormap</emphasis>,
int <emphasis remap='I'>count</emphasis>, Atom <emphasis remap='I'>property</emphasis>&hairsp;);</para>

<para>Status XGetRGBColormaps&hairsp;(&hairsp;Display *<emphasis remap='I'>display</emphasis>, Window <emphasis remap='I'>w</emphasis>,
XStandardColormap **<emphasis remap='I'>std_colormap_return</emphasis>, int *<emphasis remap='I'>count_return</emphasis>,
Atom <emphasis remap='I'>property</emphasis>&hairsp;);</para>
</refsect1>

<refsect1 id='arguments'><title>ARGUMENTS</title>
<variablelist remap='IP'>
  <varlistentry>
  <term><emphasis remap='I'>display</emphasis></term>
  <listitem>
<para>Specifies the connection to the X server.</para>
  </listitem>
  </varlistentry>
  <varlistentry>
  <term><emphasis remap='I'>count</emphasis></term>
  <listitem>
<para>Specifies the number of colormaps.</para>
  </listitem>
  </varlistentry>
  <varlistentry>
  <term><emphasis remap='I'>count_return</emphasis></term>
  <listitem>
<para>Returns the number of colormaps.</para>
  </listitem>
  </varlistentry>
  <varlistentry>
  <term><emphasis remap='I'>property</emphasis></term>
  <listitem>
<para>Specifies the property name.</para>
  </listitem>
  </varlistentry>
  <varlistentry>
  <term><emphasis remap='I'>std_colormap</emphasis></term>
  <listitem>
<para>Specifies the
<emphasis remap='I'>&hairsp;XStandardColormap&hairsp;</emphasis>
structure to be used.</para>
  </listitem>
  </varlistentry>
  <varlistentry>
  <term><emphasis remap='I'>std_colormap_return</emphasis></term>
  <listitem>
<para>Returns the
<emphasis remap='I'>&hairsp;XStandardColormap&hairsp;</emphasis>
structure.</para>
  </listitem>
  </varlistentry>
</variablelist>
</refsect1>

<refsect1 id='description'><title>DESCRIPTION</title>
<para>The
<emphasis remap='I'>&hairsp;XAllocStandardColormap&hairsp;</emphasis>
function allocates and returns a pointer to a
<emphasis remap='I'>&hairsp;XStandardColormap&hairsp;</emphasis>
structure.
Note that all fields in the
<emphasis remap='I'>&hairsp;XStandardColormap&hairsp;</emphasis>
structure are initially set to zero.
If insufficient memory is available, 
<emphasis remap='I'>&hairsp;XAllocStandardColormap&hairsp;</emphasis>
returns NULL.
To free the memory allocated to this structure,
use
<emphasis remap='I'>&hairsp;XFree&hairsp;</emphasis>.</para>

<para>The 
<emphasis remap='I'>&hairsp;XSetRGBColormaps&hairsp;</emphasis>
function replaces the RGB colormap definition in the specified property 
on the named window.
If the property does not already exist,
<emphasis remap='I'>&hairsp;XSetRGBColormaps&hairsp;</emphasis>
sets the RGB colormap definition in the specified property
on the named window.
The property is stored with a type of RGB_COLOR_MAP and a format of 32.
Note that it is the caller's responsibility to honor the ICCCM
restriction that only RGB_DEFAULT_MAP contain more than one definition.</para>

<para>The
<emphasis remap='I'>&hairsp;XSetRGBColormaps&hairsp;</emphasis>
function usually is only used by window or session managers.
To create a standard colormap, 
follow this procedure:</para>
<variablelist remap='IP'>
  <varlistentry>
  <term>1.</term>
  <listitem>
<para>Open a new connection to the same server.</para>
  </listitem>
  </varlistentry>
  <varlistentry>
  <term>2.</term>
  <listitem>
<para>Grab the server.</para>
  </listitem>
  </varlistentry>
  <varlistentry>
  <term>3.</term>
  <listitem>
<para>See if the property is on the property list of the root window for the screen.</para>
  </listitem>
  </varlistentry>
  <varlistentry>
  <term>4.</term>
  <listitem>
<para>If the desired property is not present:</para>
  <!-- .RS -->
    <itemizedlist remap='IP+bullet'>
      <listitem override='bullet'>
<para>Create a colormap (unless you are using the default colormap of the screen).</para>
      </listitem>
    </itemizedlist>
  </listitem>
  </varlistentry>
</variablelist>
<itemizedlist remap='IP+bullet'>
  <listitem override='bullet'>
<para>Determine the color characteristics of the visual.</para>
  </listitem>
</itemizedlist>
<itemizedlist remap='IP+bullet'>
  <listitem override='bullet'>
<para>Allocate cells in the colormap (or create it with
<emphasis remap='I'>&hairsp;AllocAll&hairsp;</emphasis>).</para>
  </listitem>
</itemizedlist>
<itemizedlist remap='IP+bullet'>
  <listitem override='bullet'>
<para>Call 
<emphasis remap='I'>&hairsp;XStoreColors&hairsp;</emphasis>
to store appropriate color values in the colormap.</para>
  </listitem>
</itemizedlist>
<itemizedlist remap='IP+bullet'>
  <listitem override='bullet'>
<para>Fill in the descriptive members in the 
<emphasis remap='I'>&hairsp;XStandardColormap&hairsp;</emphasis>
structure.</para>
  </listitem>
</itemizedlist>
<itemizedlist remap='IP+bullet'>
  <listitem override='bullet'>
<para>Attach the property to the root window.</para>
  </listitem>
</itemizedlist>
<itemizedlist remap='IP+bullet'>
  <listitem override='bullet'>
<para>Use
<emphasis remap='I'>&hairsp;XSetCloseDownMode&hairsp;</emphasis>
to make the resource permanent.</para>
  </listitem>
</itemizedlist>
<!-- .RE -->
<variablelist remap='IP'>
  <varlistentry>
  <term>5.</term>
  <listitem>
<para>Ungrab the server.</para>
  </listitem>
  </varlistentry>
</variablelist>

<para><emphasis remap='I'>&hairsp;XSetRGBColormaps&hairsp;</emphasis>
can generate
<emphasis remap='I'>&hairsp;BadAlloc&hairsp;</emphasis>,
<emphasis remap='I'>&hairsp;BadAtom&hairsp;</emphasis>,
and
<emphasis remap='I'>&hairsp;BadWindow&hairsp;</emphasis>
errors.</para>

<para>The 
<emphasis remap='I'>&hairsp;XGetRGBColormaps&hairsp;</emphasis>
function returns the RGB colormap definitions stored 
in the specified property on the named window.
If the property exists, is of type RGB_COLOR_MAP, is of format 32, 
and is long enough to contain a colormap definition,
<emphasis remap='I'>&hairsp;XGetRGBColormaps&hairsp;</emphasis>
allocates and fills in space for the returned colormaps
and returns a nonzero status.
If the visualid is not present, 
<emphasis remap='I'>&hairsp;XGetRGBColormaps&hairsp;</emphasis>
assumes the default visual for the screen on which the window is located; 
if the killid is not present, 
<emphasis remap='I'>&hairsp;None&hairsp;</emphasis>
is assumed, which indicates that the resources cannot be released.
Otherwise, 
none of the fields are set, and 
<emphasis remap='I'>&hairsp;XGetRGBColormaps&hairsp;</emphasis>
returns a zero status.
Note that it is the caller's responsibility to honor the ICCCM
restriction that only RGB_DEFAULT_MAP contain more than one definition.</para>

<para><emphasis remap='I'>&hairsp;XGetRGBColormaps&hairsp;</emphasis>
can generate
<emphasis remap='I'>&hairsp;BadAtom&hairsp;</emphasis>
and
<emphasis remap='I'>&hairsp;BadWindow&hairsp;</emphasis>
errors.</para>
</refsect1>

<refsect1 id='structures'><title>STRUCTURES</title>
<para>The
<emphasis remap='I'>&hairsp;XStandardColormap&hairsp;</emphasis>
structure contains:</para>

<para>/&lowast; Hints */</para>


<informaltable pgwide='0' frame='none'>
  <tgroup cols='3' align='center'>
    <colspec colname='c1'/>
    <colspec colname='c2'/>
    <colspec colname='c3'/>
    <tbody>
      <row>
        <entry align='left'>T{
#define</entry>
        <entry align='left'>.ZN ReleaseByFreeingColormap</entry>
        <entry align='left'>( (XID) 1L);</entry>
      </row>
    </tbody>
  </tgroup>
</informaltable>


<para>/&lowast; Values */</para>
<literallayout remap='.nf'>
<!-- .0D  0 -->

<!-- .ps \n(PS -->
<!-- .if \n(VS&gt;=40 .vs \n(VSu -->
<!-- .if \n(VS&lt;=39 .vs \n(VSp -->
<!-- .TA .5i 2.5i -->
<!-- .ta .5i 2.5i -->
typedef struct {
	Colormap colormap;
	unsigned long red_max;
	unsigned long red_mult;
	unsigned long green_max;
	unsigned long green_mult;
	unsigned long blue_max;
	unsigned long blue_mult;
	unsigned long base_pixel;
	VisualID visualid;
	XID killid;
} XStandardColormap;
<!-- .ce 0  IGNORED -->
<!-- .in \n(OIu  IGNORED -->

</literallayout> <!-- .fi -->

<para>The colormap member is the colormap created by the
<emphasis remap='I'>&hairsp;XCreateColormap&hairsp;</emphasis>
function.
The red_max, green_max, and blue_max members give the maximum
red, green, and blue values, respectively.  
Each color coefficient ranges from zero to its max, inclusive.  
For example,
a common colormap allocation is 3/3/2 (3 planes for red, 3
planes for green, and 2 planes for blue).  
This colormap would have red_max = 7, green_max = 7, 
and blue_max = 3.  
An alternate allocation that uses only 216 colors is red_max = 5, 
green_max = 5, and blue_max = 5.</para>

<para>The red_mult, green_mult, and blue_mult members give the
scale factors used to compose a full pixel value. 
(See the discussion of the base_pixel members for further information.);
For a 3/3/2 allocation, red_mult might be 32,
green_mult might be 4, and blue_mult might be 1.  
For a 6-colors-each allocation, red_mult might be 36, 
green_mult might be 6, and blue_mult might be 1.</para>

<para>The base_pixel member gives the base pixel value used to
compose a full pixel value.  
Usually, the base_pixel is obtained from a call to the 
<emphasis remap='I'>&hairsp;XAllocColorPlanes&hairsp;</emphasis>
function.  
Given integer red, green, and blue coefficients in their appropriate 
ranges, one then can compute a corresponding pixel value by
using the following expression:</para>

<literallayout remap='.nf'>
<!-- .D   -->

<!-- .ps \n(PS -->
<!-- .if \n(VS&gt;=40 .vs \n(VSu -->
<!-- .if \n(VS&lt;=39 .vs \n(VSp -->
<!-- .TA .5i 1.5i -->
<!-- .ta .5i 1.5i -->
(r * red_mult + g * green_mult + b * blue_mult + base_pixel) &amp; 0xFFFFFFFF
<!-- .ce 0  IGNORED -->
<!-- .in \n(OIu  IGNORED -->

</literallayout> <!-- .fi -->

<para>For 
<emphasis remap='I'>&hairsp;GrayScale&hairsp;</emphasis>
colormaps, 
only the colormap, red_max, red_mult, 
and base_pixel members are defined. 
The other members are ignored.  
To compute a 
<emphasis remap='I'>&hairsp;GrayScale&hairsp;</emphasis>
pixel value, use the following expression:</para>

<literallayout remap='.nf'>
<!-- .D   -->

<!-- .ps \n(PS -->
<!-- .if \n(VS&gt;=40 .vs \n(VSu -->
<!-- .if \n(VS&lt;=39 .vs \n(VSp -->
<!-- .TA .5i 1.5i -->
<!-- .ta .5i 1.5i -->
(gray * red_mult + base_pixel) &amp; 0xFFFFFFFF
<!-- .ce 0  IGNORED -->
<!-- .in \n(OIu  IGNORED -->

</literallayout> <!-- .fi -->

<para>Negative multipliers can be represented by converting the 2's
complement representation of the multiplier into an unsigned long and
storing the result in the appropriate _mult field.
The step of masking by 0xFFFFFFFF effectively converts the resulting
positive multiplier into a negative one.
The masking step will take place automatically on many machine architectures,
depending on the size of the integer type used to do the computation,</para>

<para>The visualid member gives the ID number of the visual from which the
colormap was created.
The killid member gives a resource ID that indicates whether
the cells held by this standard colormap are to be released 
by freeing the colormap ID or by calling the
<emphasis remap='I'>&hairsp;XKillClient&hairsp;</emphasis>
function on the indicated resource.
(Note that this method is necessary for allocating out of an existing colormap.);</para>

<para>The properties containing the 
<emphasis remap='I'>&hairsp;XStandardColormap&hairsp;</emphasis>
information have 
the type RGB_COLOR_MAP.</para>
</refsect1>

<refsect1 id='diagnostics'><title>DIAGNOSTICS</title>
<variablelist remap='TP'>
  <varlistentry>
  <term><emphasis remap='I'>&hairsp;BadAlloc&hairsp;</emphasis></term>
  <listitem>
<para>The server failed to allocate the requested resource or server memory.</para>
  </listitem>
  </varlistentry>
  <varlistentry>
  <term><emphasis remap='I'>&hairsp;BadAtom&hairsp;</emphasis></term>
  <listitem>
<para>A value for an Atom argument does not name a defined Atom.</para>
  </listitem>
  </varlistentry>
  <varlistentry>
  <term><emphasis remap='I'>&hairsp;BadWindow&hairsp;</emphasis></term>
  <listitem>
<para>A value for a Window argument does not name a defined Window.</para>
  </listitem>
  </varlistentry>
</variablelist>
</refsect1>

<refsect1 id='see_also'><title>SEE ALSO</title>
<para>XAllocColor(3X11),
XCreateColormap(3X11),
XFree(3X11),
XSetCloseDownMode(3X11)
<!-- .br -->
<userinput>Xlib - C Language X Interface</userinput></para>
</refsect1>
</refentry>

