aboutsummaryrefslogtreecommitdiff
path: root/libX11/specs/libX11/CH02
diff options
context:
space:
mode:
Diffstat (limited to 'libX11/specs/libX11/CH02')
-rw-r--r--libX11/specs/libX11/CH022052
1 files changed, 2052 insertions, 0 deletions
diff --git a/libX11/specs/libX11/CH02 b/libX11/specs/libX11/CH02
new file mode 100644
index 000000000..61554b898
--- /dev/null
+++ b/libX11/specs/libX11/CH02
@@ -0,0 +1,2052 @@
+.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996, 2000 The Open Group
+.\"
+.\" 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 Open Group 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 Open Group.
+.\"
+.\" 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$
+\&
+.sp 1
+.ce 3
+\s+1\fBChapter 2\fP\s-1
+
+\s+1\fBDisplay Functions\fP\s-1
+.sp 2
+.nr H1 2
+.nr H2 0
+.nr H3 0
+.nr H4 0
+.nr H5 0
+.na
+.LP
+.XS
+Chapter 2: Display Functions
+.XE
+Before your program can use a display, you must establish a connection
+to the X server.
+Once you have established a connection,
+you then can use the Xlib macros and functions discussed in this chapter
+to return information about the display.
+This chapter discusses how to:
+.IP \(bu 5
+Open (connect to) the display
+.IP \(bu 5
+Obtain information about the display, image formats, or screens
+.IP \(bu 5
+Generate a
+.PN NoOperation
+protocol request
+.IP \(bu 5
+Free client-created data
+.IP \(bu 5
+Close (disconnect from) a display
+.IP \(bu 5
+Use X Server connection close operations
+.IP \(bu 5
+Use Xlib with threads
+.IP \(bu 5
+Use internal connections
+.NH 2
+Opening the Display
+.XS
+\*(SN Opening the Display
+.XE
+.LP
+To open a connection to the X server that controls a display, use
+.PN XOpenDisplay .
+.IN "XOpenDisplay" "" "@DEF@"
+.LP
+.sM
+.FD 0
+Display *XOpenDisplay\^(\^\fIdisplay_name\fP\^)
+.br
+ char *\fIdisplay_name\fP\^;
+.FN
+.IP \fIdisplay_name\fP 1i
+Specifies the hardware display name, which determines the display
+and communications domain to be used.
+On a POSIX-conformant system, if the display_name is NULL,
+it defaults to the value of the DISPLAY environment variable.
+.IN "Environment" "DISPLAY"
+.LP
+.eM
+The encoding and interpretation of the display name are
+implementation-dependent.
+Strings in the Host Portable Character Encoding are supported;
+support for other characters is implementation-dependent.
+On POSIX-conformant systems,
+the display name or DISPLAY environment variable can be a string in the format:
+.LP
+.sM
+.Ds 0
+.TA 1i
+.ta 1i
+ \fIprotocol\fP\^/\^\fIhostname\fP\^:\^\fInumber\fP\^.\^\fIscreen_number\fP
+.De
+.IP \fIprotocol\fP 1i
+Specifies a protocol family or an alias for a protocol family. Supported
+protocol families are implementation dependent. The protocol entry is
+optional. If protocol is not specified, the / separating protocol and
+hostname must also not be specified.
+.IP \fIhostname\fP 1i
+Specifies the name of the host machine on which the display is physically
+attached.
+You follow the hostname with either a single colon (:) or a double colon (::).
+.IP \fInumber\fP 1i
+Specifies the number of the display server on that host machine.
+You may optionally follow this display number with a period (.).
+A single CPU can have more than one display.
+Multiple displays are usually numbered starting with zero.
+.IN "Screen"
+.IP \fIscreen_number\fP 1i
+Specifies the screen to be used on that server.
+Multiple screens can be controlled by a single X server.
+The screen_number sets an internal variable that can be accessed by
+using the
+.PN DefaultScreen
+macro or the
+.PN XDefaultScreen
+function if you are using languages other than C (see section 2.2.1).
+.LP
+.eM
+For example, the following would specify screen 1 of display 0 on the
+machine named ``dual-headed'':
+.LP
+.Ds
+dual-headed:0.1
+.De
+.LP
+The
+.PN XOpenDisplay
+function returns a
+.PN Display
+structure that serves as the
+connection to the X server and that contains all the information
+about that X server.
+.PN XOpenDisplay
+connects your application to the X server through TCP
+or DECnet communications protocols,
+or through some local inter-process communication protocol.
+.IN "Protocol" "TCP"
+.IN "Protocol" "DECnet"
+If the protocol is specified as "tcp", "inet", or "inet6", or
+if no protocol is specified and the hostname is a host machine name and a single colon (:)
+separates the hostname and display number,
+.PN XOpenDisplay
+connects using TCP streams. (If the protocol is specified as "inet", TCP over
+IPv4 is used. If the protocol is specified as "inet6", TCP over IPv6 is used.
+Otherwise, the implementation determines which IP version is used.)
+If the hostname and protocol are both not specified,
+Xlib uses whatever it believes is the fastest transport.
+If the hostname is a host machine name and a double colon (::)
+separates the hostname and display number,
+.PN XOpenDisplay
+connects using DECnet.
+A single X server can support any or all of these transport mechanisms
+simultaneously.
+A particular Xlib implementation can support many more of these transport
+mechanisms.
+.LP
+.IN "Display"
+If successful,
+.PN XOpenDisplay
+returns a pointer to a
+.PN Display
+structure,
+which is defined in
+.hN X11/Xlib.h .
+If
+.PN XOpenDisplay
+does not succeed, it returns NULL.
+After a successful call to
+.PN XOpenDisplay ,
+all of the screens in the display can be used by the client.
+The screen number specified in the display_name argument is returned
+by the
+.PN DefaultScreen
+macro (or the
+.PN XDefaultScreen
+function).
+You can access elements of the
+.PN Display
+and
+.PN Screen
+structures only by using the information macros or functions.
+For information about using macros and functions to obtain information from
+the
+.PN Display
+structure,
+see section 2.2.1.
+.LP
+X servers may implement various types of access control mechanisms
+(see section 9.8).
+.NH 2
+Obtaining Information about the Display, Image Formats, or Screens
+.XS
+\*(SN Obtaining Information about the Display, Image Formats, or Screens
+.XE
+.LP
+The Xlib library provides a number of useful macros
+and corresponding functions that return data from the
+.PN Display
+structure.
+The macros are used for C programming,
+and their corresponding function equivalents are for other language bindings.
+This section discusses the:
+.IP \(bu 5
+Display macros
+.IP \(bu 5
+Image format functions and macros
+.IP \(bu 5
+Screen information macros
+.LP
+.IN "Display" "data structure"
+All other members of the
+.PN Display
+structure (that is, those for which no macros are defined) are private to Xlib
+and must not be used.
+Applications must never directly modify or inspect these private members of the
+.PN Display
+structure.
+.NT Note
+The
+.PN XDisplayWidth ,
+.PN XDisplayHeight ,
+.PN XDisplayCells ,
+.PN XDisplayPlanes ,
+.PN XDisplayWidthMM ,
+and
+.PN XDisplayHeightMM
+functions in the next sections are misnamed.
+These functions really should be named Screen\fIwhatever\fP
+and XScreen\fIwhatever\fP, not Display\fIwhatever\fP or XDisplay\fIwhatever\fP.
+Our apologies for the resulting confusion.
+.NE
+.NH 3
+Display Macros
+.XS
+\*(SN Display Macros
+.XE
+.LP
+Applications should not directly modify any part of the
+.PN Display
+and
+.PN Screen
+structures.
+The members should be considered read-only,
+although they may change as the result of other operations on the display.
+.LP
+The following lists the C language macros,
+their corresponding function equivalents that are for other language bindings,
+and what data both can return.
+.LP
+.sp
+.sM
+.FD 0
+AllPlanes
+.sp
+unsigned long XAllPlanes(\^)
+.FN
+.LP
+.eM
+.IN "AllPlanes" "" "@DEF@"
+.IN "XAllPlanes" "" "@DEF@"
+Both return a value with all bits set to 1 suitable for use in a plane argument to
+a procedure.
+.LP
+.sp
+Both
+.PN BlackPixel
+and
+.PN WhitePixel
+can be used in implementing a monochrome application.
+These pixel values are for permanently allocated entries in the default
+colormap.
+The actual RGB (red, green, and blue) values are settable on some screens
+and, in any case, may not actually be black or white.
+The names are intended to convey the expected relative intensity of the colors.
+.sM
+.FD 0
+BlackPixel\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.sp
+unsigned long XBlackPixel\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "BlackPixel" "" "@DEF@"
+.IN "XBlackPixel" "" "@DEF@"
+Both return the black pixel value for the specified screen.
+.LP
+.sp
+.sM
+.FD 0
+WhitePixel\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.sp
+unsigned long XWhitePixel\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "WhitePixel" "" "@DEF@"
+.IN "XWhitePixel" "" "@DEF@"
+Both return the white pixel value for the specified screen.
+.LP
+.sp
+.sM
+.FD 0
+ConnectionNumber\^(\^\fIdisplay\fP\^)
+.sp
+int XConnectionNumber\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "ConnectionNumber" "" "@DEF@"
+.IN "XConnectionNumber" "" "@DEF@"
+Both return a connection number for the specified display.
+On a POSIX-conformant system,
+this is the file descriptor of the connection.
+.LP
+.sp
+.sM
+.FD 0
+DefaultColormap\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.sp
+Colormap XDefaultColormap\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "DefaultColormap" "" "@DEF@"
+.IN "XDefaultColormap" "" "@DEF@"
+Both return the default colormap ID for allocation on the specified screen.
+Most routine allocations of color should be made out of this colormap.
+.LP
+.sp
+.sM
+.FD 0
+DefaultDepth\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.sp
+int XDefaultDepth\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "DefaultDepth" "" "@DEF@"
+.IN "XDefaultDepth" "" "@DEF@"
+Both return the depth (number of planes) of the default root window for the
+specified screen.
+Other depths may also be supported on this screen (see
+.PN XMatchVisualInfo ).
+.LP
+.sp
+.IN "XListDepths" "" "@DEF@"
+To determine the number of depths that are available on a given screen, use
+.PN XListDepths .
+.sM
+.FD 0
+int *XListDepths\^(\^\fIdisplay\fP, \fIscreen_number\fP, \fIcount_return\fP\^)
+.br
+ Display *\fIdisplay\fP;
+.br
+ int \fIscreen_number\fP;
+.br
+ int *\fIcount_return\fP;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.ds Cn depths
+.IP \fIcount_return\fP 1i
+Returns the number of \*(Cn.
+.LP
+.eM
+The
+.PN XListDepths
+function returns the array of depths
+that are available on the specified screen.
+If the specified screen_number is valid and sufficient memory for the array
+can be allocated,
+.PN XListDepths
+sets count_return to the number of available depths.
+Otherwise, it does not set count_return and returns NULL.
+To release the memory allocated for the array of depths, use
+.PN XFree .
+.LP
+.sp
+.sM
+.FD 0
+DefaultGC\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.sp
+GC XDefaultGC\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "DefaultGC" "" "@DEF@"
+.IN "XDefaultGC" "" "@DEF@"
+Both return the default graphics context for the root window of the
+specified screen.
+This GC is created for the convenience of simple applications
+and contains the default GC components with the foreground and
+background pixel values initialized to the black and white
+pixels for the screen, respectively.
+You can modify its contents freely because it is not used in any Xlib
+function.
+This GC should never be freed.
+.LP
+.sp
+.sM
+.FD 0
+DefaultRootWindow\^(\^\fIdisplay\fP\^)
+.sp
+Window XDefaultRootWindow\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "DefaultRootWindow" "" "@DEF@"
+.IN "XDefaultRootWindow" "" "@DEF@"
+Both return the root window for the default screen.
+.LP
+.sp
+.sM
+.FD 0
+DefaultScreenOfDisplay\^(\^\fIdisplay\fP\^)
+.sp
+Screen *XDefaultScreenOfDisplay\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "DefaultScreenOfDisplay" "" "@DEF@"
+.IN "XDefaultScreenOfDisplay" "" "@DEF@"
+Both return a pointer to the default screen.
+.LP
+.sp
+.sM
+.FD 0
+ScreenOfDisplay\^(\^\fIdisplay\fP, \fIscreen_number\fP\^)
+.sp
+Screen *XScreenOfDisplay\^(\^\fIdisplay\fP, \fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "ScreenOfDisplay" "" "@DEF@"
+.IN "XScreenOfDisplay" "" "@DEF@"
+Both return a pointer to the indicated screen.
+.LP
+.sp
+.sM
+.FD 0
+DefaultScreen\^(\^\fIdisplay\fP\^)
+.sp
+int XDefaultScreen\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "DefaultScreen" "" "@DEF@"
+.IN "XDefaultScreen" "" "@DEF@"
+Both return the default screen number referenced by the
+.PN XOpenDisplay
+function.
+This macro or function should be used to retrieve the screen number
+in applications that will use only a single screen.
+.LP
+.sp
+.sM
+.FD 0
+DefaultVisual\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.sp
+Visual *XDefaultVisual\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "DefaultVisual" "" "@DEF@"
+.IN "XDefaultVisual" "" "@DEF@"
+Both return the default visual type for the specified screen.
+For further information about visual types,
+see section 3.1.
+.LP
+.sp
+.sM
+.FD 0
+DisplayCells\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.sp
+int XDisplayCells\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "DisplayCells" "" "@DEF@"
+.IN "XDisplayCells" "" "@DEF@"
+Both return the number of entries in the default colormap.
+.LP
+.sp
+.sM
+.FD 0
+DisplayPlanes\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.sp
+int XDisplayPlanes\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "DisplayPlanes" "" "@DEF@"
+.IN "XDisplayPlanes" "" "@DEF@"
+Both return the depth of the root window of the specified screen.
+For an explanation of depth,
+see the glossary.
+.LP
+.sp
+.sM
+.FD 0
+DisplayString\^(\^\fIdisplay\fP\^)
+.sp
+char *XDisplayString\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "DisplayString" "" "@DEF@"
+.IN "XDisplayString" "" "@DEF@"
+Both return the string that was passed to
+.PN XOpenDisplay
+when the current display was opened.
+On POSIX-conformant systems,
+if the passed string was NULL, these return the value of
+the DISPLAY environment variable when the current display was opened.
+.IN "POSIX System Call" "fork"
+These are useful to applications that invoke the
+.PN fork
+system call and want to open a new connection to the same display from the
+child process as well as for printing error messages.
+.LP
+.sp
+.sM
+.FD 0
+long XExtendedMaxRequestSize(\^\fIdisplay\fP\^)
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "XExtendedMaxRequestSize" "" "@DEF@"
+The
+.PN XExtendedMaxRequestSize
+function returns zero if the specified display does not support an
+extended-length protocol encoding; otherwise,
+it returns the maximum request size (in 4-byte units) supported
+by the server using the extended-length encoding.
+The Xlib functions
+.PN XDrawLines ,
+.PN XDrawArcs ,
+.PN XFillPolygon ,
+.PN XChangeProperty ,
+.PN XSetClipRectangles ,
+and
+.PN XSetRegion
+will use the extended-length encoding as necessary, if supported
+by the server. Use of the extended-length encoding in other Xlib
+functions (for example,
+.PN XDrawPoints ,
+.PN XDrawRectangles ,
+.PN XDrawSegments ,
+.PN XFillArcs ,
+.PN XFillRectangles ,
+.PN XPutImage )
+is permitted but not required; an Xlib implementation may choose to
+split the data across multiple smaller requests instead.
+.LP
+.sp
+.sM
+.FD 0
+long XMaxRequestSize(\^\fIdisplay\fP\^)
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "XMaxRequestSize" "" "@DEF@"
+The
+.PN XMaxRequestSize
+function returns the maximum request size (in 4-byte units) supported
+by the server without using an extended-length protocol encoding.
+Single protocol requests to the server can be no larger than this size
+unless an extended-length protocol encoding is supported by the server.
+The protocol guarantees the size to be no smaller than 4096 units
+(16384 bytes).
+Xlib automatically breaks data up into multiple protocol requests
+as necessary for the following functions:
+.PN XDrawPoints ,
+.PN XDrawRectangles ,
+.PN XDrawSegments ,
+.PN XFillArcs ,
+.PN XFillRectangles ,
+and
+.PN XPutImage .
+.LP
+.sp
+.sM
+.FD 0
+LastKnownRequestProcessed\^(\^\fIdisplay\fP\^)
+.sp
+unsigned long XLastKnownRequestProcessed\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "LastKnownRequestProcessed" "" "@DEF@"
+.IN "XLastKnownRequestProcessed" "" "@DEF@"
+Both extract the full serial number of the last request known by Xlib
+to have been processed by the X server.
+Xlib automatically sets this number when replies, events, and errors
+are received.
+.LP
+.sp
+.sM
+.FD 0
+NextRequest\^(\^\fIdisplay\fP\^)
+.sp
+unsigned long XNextRequest\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "NextRequest" "" "@DEF@"
+.IN "XNextRequest" "" "@DEF@"
+Both extract the full serial number that is to be used for the next
+request.
+Serial numbers are maintained separately for each display connection.
+.LP
+.sp
+.sM
+.FD 0
+ProtocolVersion\^(\^\fIdisplay\fP\^)
+.sp
+int XProtocolVersion\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "ProtocolVersion" "" "@DEF@"
+.IN "XProtocolVersion" "" "@DEF@"
+Both return the major version number (11) of the X protocol associated with
+the connected display.
+.LP
+.sp
+.sM
+.FD 0
+ProtocolRevision\^(\^\fIdisplay\fP\^)
+.sp
+int XProtocolRevision\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "ProtocolRevision" "" "@DEF@"
+.IN "XProtocolRevision" "" "@DEF@"
+Both return the minor protocol revision number of the X server.
+.LP
+.sp
+.sM
+.FD 0
+QLength\^(\^\fIdisplay\fP\^)
+.sp
+int XQLength\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "QLength" "" "@DEF@"
+.IN "XQLength" "" "@DEF@"
+Both return the length of the event queue for the connected display.
+Note that there may be more events that have not been read into
+the queue yet (see
+.PN XEventsQueued ).
+.LP
+.sp
+.sM
+.FD 0
+RootWindow\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.sp
+Window XRootWindow\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "Window" "RootWindow"
+.IN "RootWindow" "" "@DEF@"
+.IN "Window" "XRootWindow"
+.IN "XRootWindow" "" "@DEF@"
+Both return the root window.
+These are useful with functions that need a drawable of a particular screen
+and for creating top-level windows.
+.LP
+.sp
+.sM
+.FD 0
+ScreenCount\^(\^\fIdisplay\fP\^)
+.sp
+int XScreenCount\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "ScreenCount" "" "@DEF@"
+.IN "XScreenCount" "" "@DEF@"
+Both return the number of available screens.
+.LP
+.sp
+.sM
+.FD 0
+ServerVendor\^(\^\fIdisplay\fP\^)
+.sp
+char *XServerVendor\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "ServerVendor" "" "@DEF@"
+.IN "XServerVendor" "" "@DEF@"
+Both return a pointer to a null-terminated string that provides
+some identification of the owner of the X server implementation.
+If the data returned by the server is in the Latin Portable Character Encoding,
+then the string is in the Host Portable Character Encoding.
+Otherwise, the contents of the string are implementation-dependent.
+.LP
+.sp
+.sM
+.FD 0
+VendorRelease\^(\^\fIdisplay\fP\^)
+.sp
+int XVendorRelease\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "VendorRelease" "" "@DEF@"
+.IN "XVendorRelease" "" "@DEF@"
+Both return a number related to a vendor's release of the X server.
+.NH 3
+Image Format Functions and Macros
+.XS
+\*(SN Image Format Functions and Macros
+.XE
+.LP
+Applications are required to present data to the X server
+in a format that the server demands.
+To help simplify applications,
+most of the work required to convert the data is provided by Xlib
+(see sections 8.7 and 16.8).
+.LP
+The
+.PN XPixmapFormatValues
+structure provides an interface to the pixmap format information
+that is returned at the time of a connection setup.
+It contains:
+.LP
+.sM
+.Ds 0
+.TA .5i 3i
+.ta .5i 3i
+typedef struct {
+ int depth;
+ int bits_per_pixel;
+ int scanline_pad;
+} XPixmapFormatValues;
+.De
+.LP
+.eM
+.sp
+To obtain the pixmap format information for a given display, use
+.PN XListPixmapFormats .
+.IN "XListPixmapFormats" "" "@DEF@"
+.sM
+.FD 0
+XPixmapFormatValues *XListPixmapFormats\^(\^\fIdisplay\fP, \fIcount_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int *\fIcount_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.ds Cn pixmap formats that are supported by the display
+.IP \fIcount_return\fP 1i
+Returns the number of \*(Cn.
+.LP
+.eM
+The
+.PN XListPixmapFormats
+function returns an array of
+.PN XPixmapFormatValues
+structures that describe the types of Z format images supported
+by the specified display.
+If insufficient memory is available,
+.PN XListPixmapFormats
+returns NULL.
+To free the allocated storage for the
+.PN XPixmapFormatValues
+structures, use
+.PN XFree .
+.LP
+The following lists the C language macros,
+their corresponding function equivalents that are for other language bindings,
+and what data they both return for the specified server and screen.
+These are often used by toolkits as well as by simple applications.
+.LP
+.sp
+.sM
+.FD 0
+ImageByteOrder\^(\^\fIdisplay\fP\^)
+.sp
+int XImageByteOrder\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "ImageByteOrder" "" "@DEF@"
+.IN "XImageByteOrder" "" "@DEF@"
+Both specify the required byte order for images for each scanline unit in
+XY format (bitmap) or for each pixel value in
+Z format.
+The macro or function can return either
+.PN LSBFirst
+or
+.PN MSBFirst .
+.LP
+.sp
+.sM
+.FD 0
+BitmapUnit\^(\^\fIdisplay\fP\^)
+.sp
+int XBitmapUnit\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "BitmapUnit" "" "@DEF@"
+.IN "XBitmapUnit" "" "@DEF@"
+Both return the size of a bitmap's scanline unit in bits.
+The scanline is calculated in multiples of this value.
+.LP
+.sp
+.sM
+.FD 0
+BitmapBitOrder\^(\^\fIdisplay\fP\^)
+.sp
+int XBitmapBitOrder\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "BitmapBitOrder" "" "@DEF@"
+.IN "XBitmapBitOrder" "" "@DEF@"
+Within each bitmap unit, the left-most bit in the bitmap as displayed
+on the screen is either the least significant or most significant bit in the
+unit.
+This macro or function can return
+.PN LSBFirst
+or
+.PN MSBFirst .
+.LP
+.sp
+.sM
+.FD 0
+BitmapPad\^(\^\fIdisplay\fP\^)
+.sp
+int XBitmapPad\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+.IN "BitmapPad" "" "@DEF@"
+.IN "XBitmapPad" "" "@DEF@"
+Each scanline must be padded to a multiple of bits returned
+by this macro or function.
+.LP
+.sp
+.sM
+.FD 0
+DisplayHeight\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.sp
+int XDisplayHeight\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "DisplayHeight" "" "@DEF@"
+.IN "XDisplayHeight" "" "@DEF@"
+Both return an integer that describes the height of the screen
+in pixels.
+.LP
+.sp
+.sM
+.FD 0
+DisplayHeightMM\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.sp
+int XDisplayHeightMM\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "DisplayHeightMM" "" "@DEF@"
+.IN "XDisplayHeightMM" "" "@DEF@"
+Both return the height of the specified screen in millimeters.
+.LP
+.sp
+.sM
+.FD 0
+DisplayWidth\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.sp
+int XDisplayWidth\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "DisplayWidth" "" "@DEF@"
+.IN "XDisplayWidth" "" "@DEF@"
+Both return the width of the screen in pixels.
+.LP
+.sp
+.sM
+.FD 0
+DisplayWidthMM\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.sp
+int XDisplayWidthMM\^(\^\fIdisplay\fP\^, \^\fIscreen_number\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIscreen_number\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIscreen_number\fP 1i
+Specifies the appropriate screen number on the host server.
+.LP
+.eM
+.IN "DisplayWidthMM" "" "@DEF@"
+.IN "XDisplayWidthMM" "" "@DEF@"
+Both return the width of the specified screen in millimeters.
+.NH 3
+Screen Information Macros
+.XS
+\*(SN Screen Information Macros
+.XE
+.LP
+The following lists the C language macros,
+their corresponding function equivalents that are for other language bindings,
+and what data they both can return.
+These macros or functions all take a pointer to the appropriate screen
+structure.
+.LP
+.sp
+.sM
+.FD 0
+BlackPixelOfScreen\^(\^\fIscreen\fP\^)
+.sp
+unsigned long XBlackPixelOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "BlackPixelOfScreen" "" "@DEF@"
+.IN "XBlackPixelOfScreen" "" "@DEF@"
+Both return the black pixel value of the specified screen.
+.LP
+.sp
+.sM
+.FD 0
+WhitePixelOfScreen\^(\^\fIscreen\fP\^)
+.sp
+unsigned long XWhitePixelOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "WhitePixelOfScreen" "" "@DEF@"
+.IN "XWhitePixelOfScreen" "" "@DEF@"
+Both return the white pixel value of the specified screen.
+.LP
+.sp
+.sM
+.FD 0
+CellsOfScreen\^(\^\fIscreen\fP\^)
+.sp
+int XCellsOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "CellsOfScreen" "" "@DEF@"
+.IN "XCellsOfScreen" "" "@DEF@"
+Both return the number of colormap cells in the default colormap
+of the specified screen.
+.LP
+.sp
+.sM
+.FD 0
+DefaultColormapOfScreen\^(\^\fIscreen\fP\^)
+.sp
+Colormap XDefaultColormapOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "DefaultColormapOfScreen" "" "@DEF@"
+.IN "XDefaultColormapOfScreen" "" "@DEF@"
+Both return the default colormap of the specified screen.
+.LP
+.sp
+.sM
+.FD 0
+DefaultDepthOfScreen\^(\^\fIscreen\fP\^)
+.sp
+int XDefaultDepthOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "DefaultDepthOfScreen" "" "@DEF@"
+.IN "XDefaultDepthOfScreen" "" "@DEF@"
+Both return the depth of the root window.
+.LP
+.sp
+.sM
+.FD 0
+DefaultGCOfScreen\^(\^\fIscreen\fP\^)
+.sp
+GC XDefaultGCOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "DefaultGCOfScreen" "" "@DEF@"
+.IN "XDefaultGCOfScreen" "" "@DEF@"
+Both return a default graphics context (GC) of the specified screen,
+which has the same depth as the root window of the screen.
+The GC must never be freed.
+.LP
+.sp
+.sM
+.FD 0
+DefaultVisualOfScreen\^(\^\fIscreen\fP\^)
+.sp
+Visual *XDefaultVisualOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "DefaultVisualOfScreen" "" "@DEF@"
+.IN "XDefaultVisualOfScreen" "" "@DEF@"
+Both return the default visual of the specified screen.
+For information on visual types,
+see section 3.1.
+.LP
+.sp
+.sM
+.FD 0
+DoesBackingStore\^(\^\fIscreen\fP\^)
+.sp
+int XDoesBackingStore\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "DoesBackingStore" "" "@DEF@"
+.IN "XDoesBackingStore" "" "@DEF@"
+Both return a value indicating whether the screen supports backing
+stores.
+The value returned can be one of
+.PN WhenMapped ,
+.PN NotUseful ,
+or
+.PN Always
+(see section 3.2.4).
+.LP
+.sp
+.sM
+.FD 0
+DoesSaveUnders\^(\^\fIscreen\fP\^)
+.sp
+Bool XDoesSaveUnders\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "DoesSaveUnders" "" "@DEF@"
+.IN "XDoesSaveUnders" "" "@DEF@"
+Both return a Boolean value indicating whether the
+screen supports save unders.
+If
+.PN True ,
+the screen supports save unders.
+If
+.PN False ,
+the screen does not support save unders (see section 3.2.5).
+.LP
+.sp
+.sM
+.FD 0
+DisplayOfScreen\^(\^\fIscreen\fP\^)
+.sp
+Display *XDisplayOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "DisplayOfScreen" "" "@DEF@"
+.IN "XDisplayOfScreen" "" "@DEF@"
+Both return the display of the specified screen.
+.LP
+.sp
+.sM
+.IN "XScreenNumberOfScreen" "" "@DEF@"
+.FD 0
+int XScreenNumberOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+The
+.PN XScreenNumberOfScreen
+function returns the screen index number of the specified screen.
+.LP
+.sp
+.sM
+.FD 0
+EventMaskOfScreen\^(\^\fIscreen\fP\^)
+.sp
+long XEventMaskOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "EventMaskOfScreen" "" "@DEF@"
+.IN "XEventMaskOfScreen" "" "@DEF@"
+Both return the event mask of the root window for the specified screen
+at connection setup time.
+.LP
+.sp
+.sM
+.FD 0
+WidthOfScreen\^(\^\fIscreen\fP\^)
+.sp
+int XWidthOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "WidthOfScreen" "" "@DEF@"
+.IN "XWidthOfScreen" "" "@DEF@"
+Both return the width of the specified screen in pixels.
+.LP
+.sp
+.sM
+.FD 0
+HeightOfScreen\^(\^\fIscreen\fP\^)
+.sp
+int XHeightOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "HeightOfScreen" "" "@DEF@"
+.IN "XHeightOfScreen" "" "@DEF@"
+Both return the height of the specified screen in pixels.
+.LP
+.sp
+.sM
+.FD 0
+WidthMMOfScreen\^(\^\fIscreen\fP\^)
+.sp
+int XWidthMMOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "WidthMMOfScreen" "" "@DEF@"
+.IN "XWidthMMOfScreen" "" "@DEF@"
+Both return the width of the specified screen in millimeters.
+.LP
+.sp
+.sM
+.FD 0
+HeightMMOfScreen\^(\^\fIscreen\fP\^)
+.sp
+int XHeightMMOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "HeightMMOfScreen" "" "@DEF@"
+.IN "XHeightMMOfScreen" "" "@DEF@"
+Both return the height of the specified screen in millimeters.
+.LP
+.sp
+.sM
+.FD 0
+MaxCmapsOfScreen\^(\^\fIscreen\fP\^)
+.sp
+int XMaxCmapsOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "MaxCmapsOfScreen" "" "@DEF@"
+.IN "XMaxCmapsOfScreen" "" "@DEF@"
+Both return the maximum number of installed colormaps supported
+by the specified screen (see section 9.3).
+.LP
+.sp
+.sM
+.FD 0
+MinCmapsOfScreen\^(\^\fIscreen\fP\^)
+.sp
+int XMinCmapsOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "MinCmapsOfScreen" "" "@DEF@"
+.IN "XMinCmapsOfScreen" "" "@DEF@"
+Both return the minimum number of installed colormaps supported
+by the specified screen (see section 9.3).
+.LP
+.sp
+.sM
+.FD 0
+PlanesOfScreen\^(\^\fIscreen\fP\^)
+.sp
+int XPlanesOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "PlanesOfScreen" "" "@DEF@"
+.IN "XPlanesOfScreen" "" "@DEF@"
+Both return the depth of the root window.
+.LP
+.sp
+.sM
+.FD 0
+RootWindowOfScreen\^(\^\fIscreen\fP\^)
+.sp
+Window XRootWindowOfScreen\^(\^\fIscreen\fP\^)
+.br
+ Screen *\fIscreen\fP\^;
+.FN
+.IP \fIscreen\fP 1i
+Specifies the appropriate
+.PN Screen
+structure.
+.LP
+.eM
+.IN "RootWindowOfScreen" "" "@DEF@"
+.IN "XRootWindowOfScreen" "" "@DEF@"
+Both return the root window of the specified screen.
+.NH 2
+Generating a NoOperation Protocol Request
+.XS
+\*(SN Generating a NoOperation Protocol Request
+.XE
+.LP
+To execute a
+.PN NoOperation
+protocol request, use
+.PN XNoOp .
+.IN "XNoOp" "" "@DEF@"
+.sM
+.FD 0
+XNoOp\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+The
+.PN XNoOp
+function sends a
+.PN NoOperation
+protocol request to the X server,
+thereby exercising the connection.
+.NH 2
+Freeing Client-Created Data
+.XS
+\*(SN Freeing Client-Created Data
+.XE
+.LP
+To free in-memory data that was created by an Xlib function, use
+.PN XFree .
+.IN "XFree" "" "@DEF@"
+.sM
+.FD 0
+XFree\^(\^\fIdata\fP\^)
+.br
+ void *\fIdata\fP\^;
+.FN
+.IP \fIdata\fP 1i
+Specifies the data that is to be freed.
+.LP
+.eM
+The
+.PN XFree
+function is a general-purpose Xlib routine that frees the specified data.
+You must use it to free any objects that were allocated by Xlib,
+unless an alternate function is explicitly specified for the object.
+A NULL pointer cannot be passed to this function.
+.NH 2
+Closing the Display
+.XS
+\*(SN Closing the Display
+.XE
+.LP
+To close a display or disconnect from the X server, use
+.PN XCloseDisplay .
+.IN "XCloseDisplay" "" "@DEF@"
+.LP
+.sM
+.FD 0
+XCloseDisplay\^(\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+The
+.PN XCloseDisplay
+function closes the connection to the X server for the display specified in the
+.PN Display
+structure and destroys all windows, resource IDs
+.Pn ( Window ,
+.PN Font ,
+.PN Pixmap ,
+.PN Colormap ,
+.PN Cursor ,
+and
+.PN GContext ),
+or other resources that the client has created
+on this display, unless the close-down mode of the resource has been changed
+(see
+.PN XSetCloseDownMode ).
+Therefore, these windows, resource IDs, and other resources should never be
+referenced again or an error will be generated.
+Before exiting, you should call
+.PN XCloseDisplay
+explicitly so that any pending errors are reported as
+.PN XCloseDisplay
+performs a final
+.PN XSync
+operation.
+.IN "Resource IDs"
+.IN "XCloseDisplay"
+.LP
+.PN XCloseDisplay
+can generate a
+.PN BadGC
+error.
+.sp
+.LP
+Xlib provides a function to permit the resources owned by a client
+to survive after the client's connection is closed.
+To change a client's close-down mode, use
+.PN XSetCloseDownMode .
+.IN "XSetCloseDownMode" "" "@DEF@"
+.sM
+.FD 0
+XSetCloseDownMode\^(\^\fIdisplay\fP, \fIclose_mode\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIclose_mode\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIclose_mode\fP 1i
+Specifies the client close-down mode.
+You can pass
+.PN DestroyAll ,
+.PN RetainPermanent ,
+or
+.PN RetainTemporary .
+.LP
+.eM
+The
+.PN XSetCloseDownMode
+defines what will happen to the client's resources at connection close.
+A connection starts in
+.PN DestroyAll
+mode.
+For information on what happens to the client's resources when the
+close_mode argument is
+.PN RetainPermanent
+or
+.PN RetainTemporary ,
+see section 2.6.
+.LP
+.PN XSetCloseDownMode
+can generate a
+.PN BadValue
+error.
+.NH 2
+Using X Server Connection Close Operations
+.XS
+\*(SN Using X Server Connection Close Operations
+.XE
+.LP
+When the X server's connection to a client is closed
+either by an explicit call to
+.PN XCloseDisplay
+or by a process that exits, the X server performs the following
+automatic operations:
+.IP \(bu 5
+It disowns all selections owned by the client
+(see
+.PN XSetSelectionOwner ).
+.IP \(bu 5
+It performs an
+.PN XUngrabPointer
+and
+.PN XUngrabKeyboard
+if the client has actively grabbed the pointer
+or the keyboard.
+.IP \(bu 5
+It performs an
+.PN XUngrabServer
+if the client has grabbed the server.
+.IP \(bu 5
+It releases all passive grabs made by the client.
+.IP \(bu 5
+It marks all resources (including colormap entries) allocated
+by the client either as permanent or temporary,
+depending on whether the close-down mode is
+.PN RetainPermanent
+or
+.PN RetainTemporary .
+However, this does not prevent other client applications from explicitly
+destroying the resources (see
+.PN XSetCloseDownMode ).
+.LP
+When the close-down mode is
+.PN DestroyAll ,
+the X server destroys all of a client's resources as follows:
+.IP \(bu 5
+It examines each window in the client's save-set to determine if it is an inferior
+(subwindow) of a window created by the client.
+(The save-set is a list of other clients' windows
+that are referred to as save-set windows.)
+If so, the X server reparents the save-set window to the closest ancestor so
+that the save-set window is not an inferior of a window created by the client.
+The reparenting leaves unchanged the absolute coordinates (with respect to
+the root window) of the upper-left outer corner of the save-set
+window.
+.IP \(bu 5
+It performs a
+.PN MapWindow
+request on the save-set window if the save-set window is unmapped.
+The X server does this even if the save-set window was not an inferior of
+a window created by the client.
+.IP \(bu 5
+It destroys all windows created by the client.
+.IP \(bu 5
+It performs the appropriate free request on each nonwindow resource created by
+the client in the server (for example,
+.PN Font ,
+.PN Pixmap ,
+.PN Cursor ,
+.PN Colormap ,
+and
+.PN GContext ).
+.IP \(bu 5
+It frees all colors and colormap entries allocated by a client application.
+.LP
+Additional processing occurs when the last connection to the X server closes.
+An X server goes through a cycle of having no connections and having some
+connections.
+When the last connection to the X server closes as a result of a connection
+closing with the close_mode of
+.PN DestroyAll ,
+the X server does the following:
+.IP \(bu 5
+It resets its state as if it had just been
+started.
+The X server begins by destroying all lingering resources from
+clients that have terminated in
+.PN RetainPermanent
+or
+.PN RetainTemporary
+mode.
+.IP \(bu 5
+It deletes all but the predefined atom identifiers.
+.IP \(bu 5
+It deletes all properties on all root windows (see section 4.3).
+.IP \(bu 5
+It resets all device maps and attributes
+(for example, key click, bell volume, and acceleration)
+as well as the access control list.
+.IP \(bu 5
+It restores the standard root tiles and cursors.
+.IP \(bu 5
+It restores the default font path.
+.IP \(bu 5
+It restores the input focus to state
+.PN PointerRoot .
+.LP
+However, the X server does not reset if you close a connection with a close-down
+mode set to
+.PN RetainPermanent
+or
+.PN RetainTemporary .
+.NH 2
+Using Xlib with Threads
+.XS
+\*(SN Using Xlib with Threads
+.XE
+.LP
+On systems that have threads, support may be provided to permit
+multiple threads to use Xlib concurrently.
+.LP
+.sp
+To initialize support for concurrent threads, use
+.PN XInitThreads .
+.IN "XInitThreads" "" "@DEF@"
+.sM
+.FD 0
+Status XInitThreads\^(\|);
+.FN
+.LP
+.eM
+The
+.PN XInitThreads
+function initializes Xlib support for concurrent threads.
+This function must be the first Xlib function a
+multi-threaded program calls, and it must complete
+before any other Xlib call is made.
+This function returns a nonzero status if initialization was
+successful; otherwise, it returns zero.
+On systems that do not support threads, this function always returns zero.
+.LP
+It is only necessary to call this function if multiple threads
+might use Xlib concurrently. If all calls to Xlib functions
+are protected by some other access mechanism (for example,
+a mutual exclusion lock in a toolkit or through explicit client
+programming), Xlib thread initialization is not required.
+It is recommended that single-threaded programs not call this function.
+
+.LP
+.sp
+To lock a display across several Xlib calls, use
+.PN XLockDisplay .
+.IN "XLockDisplay" "" "@DEF@"
+.sM
+.FD 0
+void XLockDisplay\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+The
+.PN XLockDisplay
+function locks out all other threads from using the specified display.
+Other threads attempting to use the display will block until
+the display is unlocked by this thread.
+Nested calls to
+.PN XLockDisplay
+work correctly; the display will not actually be unlocked until
+.PN XUnlockDisplay
+has been called the same number of times as
+.PN XLockDisplay .
+This function has no effect unless Xlib was successfully initialized
+for threads using
+.PN XInitThreads .
+.LP
+.sp
+To unlock a display, use
+.PN XUnlockDisplay .
+.IN "XUnlockDisplay" "" "@DEF@"
+.sM
+.FD 0
+void XUnlockDisplay\^(\^\fIdisplay\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.LP
+.eM
+The
+.PN XUnlockDisplay
+function allows other threads to use the specified display again.
+Any threads that have blocked on the display are allowed to continue.
+Nested locking works correctly; if
+.PN XLockDisplay
+has been called multiple times by a thread, then
+.PN XUnlockDisplay
+must be called an equal number of times before the display is
+actually unlocked.
+This function has no effect unless Xlib was successfully initialized
+for threads using
+.PN XInitThreads .
+.NH 2
+Using Internal Connections
+.XS
+\*(SN Using Internal Connections
+.XE
+.LP
+In addition to the connection to the X server, an Xlib implementation
+may require connections to other kinds of servers (for example, to
+input method servers as described in chapter 13). Toolkits and clients
+that use multiple displays, or that use displays in combination with
+other inputs, need to obtain these additional connections to correctly
+block until input is available and need to process that input
+when it is available. Simple clients that use a single display and
+block for input in an Xlib event function do not need to use these
+facilities.
+.LP
+To track internal connections for a display, use
+.PN XAddConnectionWatch .
+.LP
+.IN "XWatchProc" "" "@DEF@"
+.IN "XAddConnectionWatch" "" "@DEF@"
+.sM
+.FD 0
+typedef void (*XConnectionWatchProc)\^(\^\fIdisplay\fP, \fIclient_data\fP, \fIfd\fP, \fIopening\fP, \fIwatch_data\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XPointer \fIclient_data\fP\^;
+.br
+ int \fIfd\fP\^;
+.br
+ Bool \fIopening\fP\^;
+.br
+ XPointer *\fIwatch_data\fP\^;
+.sp
+Status XAddConnectionWatch\^(\^\fIdisplay\fP, \fIprocedure\fP\^, \fIclient_data\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XWatchProc \fIprocedure\fP\^;
+.br
+ XPointer \fIclient_data\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIprocedure\fP 1i
+Specifies the procedure to be called.
+.IP \fIclient_data\fP 1i
+Specifies the additional client data.
+.LP
+.eM
+The
+.PN XAddConnectionWatch
+function registers a procedure to be called each time Xlib opens or closes an
+internal connection for the specified display. The procedure is passed the
+display, the specified client_data, the file descriptor for the connection,
+a Boolean indicating whether the connection is being opened or closed, and a
+pointer to a location for private watch data. If opening is
+.PN True ,
+the procedure can store a pointer to private data in the location pointed
+to by watch_data;
+when the procedure is later called for this same connection and opening is
+.PN False ,
+the location pointed to by watch_data will hold this same private data pointer.
+.LP
+This function can be called at any time after a display is opened.
+If internal connections already exist, the registered procedure will
+immediately be called for each of them, before
+.PN XAddConnectionWatch
+returns.
+.PN XAddConnectionWatch
+returns a nonzero status if the procedure is successfully registered;
+otherwise, it returns zero.
+.LP
+The registered procedure should not call any Xlib functions.
+If the procedure directly or indirectly causes the state of internal
+connections or watch procedures to change, the result is not defined.
+If Xlib has been initialized for threads, the procedure is called with
+the display locked and the result of a call by the procedure to any
+Xlib function that locks the display is not defined unless the executing
+thread has externally locked the display using
+.PN XLockDisplay .
+.LP
+.sp
+To stop tracking internal connections for a display, use
+.PN XRemoveConnectionWatch .
+.IN "XRemoveConnectionWatch" "" "@DEF@"
+.sM
+.FD 0
+Status XRemoveConnectionWatch\^(\^\fIdisplay\fP, \fIprocedure\fP\^, \fIclient_data\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XWatchProc \fIprocedure\fP\^;
+.br
+ XPointer \fIclient_data\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIprocedure\fP 1i
+Specifies the procedure to be called.
+.IP \fIclient_data\fP 1i
+Specifies the additional client data.
+.LP
+.eM
+The
+.PN XRemoveConnectionWatch
+function removes a previously registered connection watch procedure.
+The client_data must match the client_data used when the procedure
+was initially registered.
+
+.LP
+.sp
+To process input on an internal connection, use
+.PN XProcessInternalConnection .
+.IN "XProcessInternalConnection" "" "@DEF@"
+.sM
+.FD 0
+void XProcessInternalConnection\^(\^\fIdisplay\fP, \fIfd\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int \fIfd\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIfd\fP 1i
+Specifies the file descriptor.
+.LP
+.eM
+The
+.PN XProcessInternalConnection
+function processes input available on an internal connection.
+This function should be called for an internal connection only
+after an operating system facility (for example,
+.PN select
+or
+.PN poll )
+has indicated that input is available; otherwise,
+the effect is not defined.
+.LP
+.sp
+To obtain all of the current internal connections for a display, use
+.PN XInternalConnectionNumbers .
+.IN "XInternalConnectionNumbers" "" "@DEF@"
+.sM
+.FD 0
+Status XInternalConnectionNumbers\^(\^\fIdisplay\fP, \fIfd_return\fP\^, \fIcount_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int **\fIfd_return\fP\^;
+.br
+ int *\fIcount_return\fP\^;
+.FN
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIfd_return\fP 1i
+Returns the file descriptors.
+.ds Cn file descriptors
+.IP \fIcount_return\fP 1i
+Returns the number of \*(Cn.
+.LP
+.eM
+The
+.PN XInternalConnectionNumbers
+function returns a list of the file descriptors for all internal
+connections currently open for the specified display.
+When the allocated list is no longer needed,
+free it by using
+.PN XFree .
+This functions returns a nonzero status if the list is successfully allocated;
+otherwise, it returns zero.
+.LP
+.bp