The EVI application programming library contains
the interfaces described below. With the exception of XeviQueryExtension,
if any of these routines are called with a display that does not support
the extension, the ExtensionErrorHandler (which can be set with XSetExtensionErrorHandler
and functions the same way as XSetErrorHandler) will be called and the
function will then return.

XeviQueryExtension returns True if the Extended
Visual Information extension is available on the given display. A client
must call XeviQueryExtension before calling any other EVI function in order
to negotiate a compatible protocol version; otherwise the client will get
undefined behavior (EVI may or may not work).

XeviQueryVersion returns True
if the request succeeded; the values of the major and minor protocol version
supported by the server are returned in major_version_return and minor_version_return.

XeviGetVisualInfo returns a list of ExtendedVisualInfo structures that
describe visual information beyond that supported by the core protocol.
This includes layer information relevant for systems supporting overlays
and/or underlay planes, and information that allows applications better
to determine the level of hardware support for multiple colormaps. XeviGetVisualInfo
returns Success if successful, or an X error otherwise. If the argument
visual is NULL, then information for all visuals of all screens is returned.
Otherwise, it's a pointer to a list of visuals for which extended visual
information is desired. n_visual is the number of elements in the array
visual. evi_return returns a pointer to a list of ExtendedVisualInfo. When
done, the client should free the list using XFree. n_info_return returns
the number of elements in the array evi_return.

The combination of core_visual_id and screen number uniquely specify the
visual being described.

level returns the level number for the visual, 0
for normal planes, > 0 for overlays, < 0 for underlays.

transparency_type
returns the type of transparency supported by the visual. XEVI_TRANSPARENCY_NONE
if there are no transparent pixels, XEVI_TRANSPARENCY_PIXEL if the visual
supports a transparent pixel, XEVI_TRANSPARENCY_MASK if the visual supports
transparent plane(s).

transparency_value returns the pixel/plane value to
set for transparency if transparency_type isn't XEVI_TRANSPARENCY_NONE.

min_hw_colormaps
and max_hw_colormaps return the minimum and maximum number of hardware
colormaps backing up the visual.

num_colormap_conflicts returns the number
of elements in colormap_conflicts. This array returns a list of visuals
that may cause conflicts in the use of the hardware colormap. For example,
if a 12-bit hardware colormap is overloaded to support 8-bit colormaps, the
corresponding 8-bit visuals would conflict with the 12-bit visuals.