text: /* $XConsortium: Xlib.h,v 11.221 93/07/02 14:13:28 gildea Exp $ */
  /*
   * Copyright 1985, 1986, 1987, 1991 by the Massachusetts Institute of Technology
   *
   * Permission to use, copy, modify, and distribute this software and its
   * documentation for any purpose and without fee is hereby granted, provided
   * that the above copyright notice appear in all copies and that both that
   * copyright notice and this permission notice appear in supporting
   * documentation, and that the name of M.I.T. not be used in advertising
   * or publicity pertaining to distribution of the software without specific,
   * written prior permission. M.I.T. makes no representations about the
   * suitability of this software for any purpose.  It is provided "as is"
   * without express or implied warranty.
   *
   * X Window System is a Trademark of MIT.
   *
   */
  
  
  /*
   *	Xlib.h - Header definition and support file for the C subroutine
   *	interface library (Xlib) to the X Window System Protocol (V11).
   *	Structures and symbols starting with "_" are private to the library.
   */
  #ifndef _XLIB_H_
  #define _XLIB_H_
  
  #define XlibSpecificationRelease 5
  
  #if !defined(MAC_OSX_TK)
  #   include <X11/X.h>
  #endif
  #ifdef MAC_OSX_TK
  #   include <X11/X.h>
  #   define Cursor XCursor
  #   define Region XRegion
  #endif
  
  /* applications should not depend on these two headers being included! */
  #include <X11/Xfuncproto.h>
  
  #ifndef X_WCHAR
  #ifdef X_NOT_STDC_ENV
  #define X_WCHAR
  #endif
  #endif
  
  #ifndef X_WCHAR
  #include <stddef.h>
  #else
  /* replace this with #include or typedef appropriate for your system */
  typedef unsigned long wchar_t;
  #endif
  
  typedef char *XPointer;
  
  #define Bool int
  #if defined(MAC_OSX_TK)
  /* Use define rather than typedef, since may need to undefine this later */
  #define Status int
  #else
  typedef int Status;
  #endif
  #define True 1
  #define False 0
  
  #define QueuedAlready 0
  #define QueuedAfterReading 1
  #define QueuedAfterFlush 2
  
  #define ConnectionNumber(dpy) 	((dpy)->fd)
  #define RootWindow(dpy, scr) 	(((dpy)->screens[(scr)]).root)
  #define DefaultScreen(dpy) 	((dpy)->default_screen)
  #define DefaultRootWindow(dpy) 	(((dpy)->screens[(dpy)->default_screen]).root)
  #define DefaultVisual(dpy, scr) (((dpy)->screens[(scr)]).root_visual)
  #define DefaultGC(dpy, scr) 	(((dpy)->screens[(scr)]).default_gc)
  #define BlackPixel(dpy, scr) 	(((dpy)->screens[(scr)]).black_pixel)
  #define WhitePixel(dpy, scr) 	(((dpy)->screens[(scr)]).white_pixel)
  #define AllPlanes 		((unsigned long)~0L)
  #define QLength(dpy) 		((dpy)->qlen)
  #define DisplayWidth(dpy, scr) 	(((dpy)->screens[(scr)]).width)
  #define DisplayHeight(dpy, scr) (((dpy)->screens[(scr)]).height)
  #define DisplayWidthMM(dpy, scr)(((dpy)->screens[(scr)]).mwidth)
  #define DisplayHeightMM(dpy, scr)(((dpy)->screens[(scr)]).mheight)
  #define DisplayPlanes(dpy, scr) (((dpy)->screens[(scr)]).root_depth)
  #define DisplayCells(dpy, scr) 	(DefaultVisual((dpy), (scr))->map_entries)
  #define ScreenCount(dpy) 	((dpy)->nscreens)
  #define ServerVendor(dpy) 	((dpy)->vendor)
  #define ProtocolVersion(dpy) 	((dpy)->proto_major_version)
  #define ProtocolRevision(dpy) 	((dpy)->proto_minor_version)
  #define VendorRelease(dpy) 	((dpy)->release)
  #define DisplayString(dpy) 	((dpy)->display_name)
  #define DefaultDepth(dpy, scr) 	(((dpy)->screens[(scr)]).root_depth)
  #define DefaultColormap(dpy, scr)(((dpy)->screens[(scr)]).cmap)
  #define BitmapUnit(dpy) 	((dpy)->bitmap_unit)
  #define BitmapBitOrder(dpy) 	((dpy)->bitmap_bit_order)
  #define BitmapPad(dpy) 		((dpy)->bitmap_pad)
  #define ImageByteOrder(dpy) 	((dpy)->byte_order)
  #define NextRequest(dpy)	((dpy)->request + 1)
  #define LastKnownRequestProcessed(dpy)	((dpy)->request)
  
  /* macros for screen oriented applications (toolkit) */
  #define ScreenOfDisplay(dpy, scr)(&((dpy)->screens[(scr)]))
  #define DefaultScreenOfDisplay(dpy) (&((dpy)->screens[(dpy)->default_screen]))
  #define DisplayOfScreen(s)	((s)->display)
  #define RootWindowOfScreen(s)	((s)->root)
  #define BlackPixelOfScreen(s)	((s)->black_pixel)
  #define WhitePixelOfScreen(s)	((s)->white_pixel)
  #define DefaultColormapOfScreen(s)((s)->cmap)
  #define DefaultDepthOfScreen(s)	((s)->root_depth)
  #define DefaultGCOfScreen(s)	((s)->default_gc)
  #define DefaultVisualOfScreen(s)((s)->root_visual)
  #define WidthOfScreen(s)	((s)->width)
  #define HeightOfScreen(s)	((s)->height)
  #define WidthMMOfScreen(s)	((s)->mwidth)
  #define HeightMMOfScreen(s)	((s)->mheight)
  #define PlanesOfScreen(s)	((s)->root_depth)
  #define CellsOfScreen(s)	(DefaultVisualOfScreen((s))->map_entries)
  #define MinCmapsOfScreen(s)	((s)->min_maps)
  #define MaxCmapsOfScreen(s)	((s)->max_maps)
  #define DoesSaveUnders(s)	((s)->save_unders)
  #define DoesBackingStore(s)	((s)->backing_store)
  #define EventMaskOfScreen(s)	((s)->root_input_mask)
  
  /*
   * Extensions need a way to hang private data on some structures.
   */
  typedef struct _XExtData {
  	int number;		/* number returned by XRegisterExtension */
  	struct _XExtData *next;	/* next item on list of data for structure */
  	int (*free_private)();	/* called to free private storage */
  	XPointer private_data;	/* data private to this extension. */
  } XExtData;
  
  /*
   * This file contains structures used by the extension mechanism.
   */
  typedef struct {		/* public to extension, cannot be changed */
  	int extension;		/* extension number */
  	int major_opcode;	/* major op-code assigned by server */
  	int first_event;	/* first event number for the extension */
  	int first_error;	/* first error number for the extension */
  } XExtCodes;
  
  /*
   * Data structure for retrieving info about pixmap formats.
   */
  
  typedef struct {
      int depth;
      int bits_per_pixel;
      int scanline_pad;
  } XPixmapFormatValues;
  
  
  /*
   * Data structure for setting graphics context.
   */
  typedef struct {
  	int function;		/* logical operation */
  	unsigned long plane_mask;/* plane mask */
  	unsigned long foreground;/* foreground pixel */
  	unsigned long background;/* background pixel */
  	int line_width;		/* line width */
  	int line_style;	 	/* LineSolid, LineOnOffDash, LineDoubleDash */
  	int cap_style;	  	/* CapNotLast, CapButt,
  				   CapRound, CapProjecting */
  	int join_style;	 	/* JoinMiter, JoinRound, JoinBevel */
  	int fill_style;	 	/* FillSolid, FillTiled,
  				   FillStippled, FillOpaeueStippled */
  	int fill_rule;	  	/* EvenOddRule, WindingRule */
  	int arc_mode;		/* ArcChord, ArcPieSlice */
  	Pixmap tile;		/* tile pixmap for tiling operations */
  	Pixmap stipple;		/* stipple 1 plane pixmap for stipping */
  	int ts_x_origin;	/* offset for tile or stipple operations */
  	int ts_y_origin;
          Font font;	        /* default text font for text operations */
  	int subwindow_mode;     /* ClipByChildren, IncludeInferiors */
  	Bool graphics_exposures;/* boolean, should exposures be generated */
  	int clip_x_origin;	/* origin for clipping */
  	int clip_y_origin;
  	Pixmap clip_mask;	/* bitmap clipping; other calls for rects */
  	int dash_offset;	/* patterned/dashed line information */
  	char dashes;
  } XGCValues;
  
  /*
   * Graphics context.  The contents of this structure are implementation
   * dependent.  A GC should be treated as opaque by application code.
   */
  
  typedef XGCValues *GC;
  
  /*
   * Visual structure; contains information about colormapping possible.
   */
  typedef struct {
  	XExtData *ext_data;	/* hook for extension to hang data */
  	VisualID visualid;	/* visual id of this visual */
  #if defined(__cplusplus) || defined(c_plusplus)
  	int c_class;		/* C++ class of screen (monochrome, etc.) */
  #else
  	int class;		/* class of screen (monochrome, etc.) */
  #endif
  	unsigned long red_mask, green_mask, blue_mask;	/* mask values */
  	int bits_per_rgb;	/* log base 2 of distinct color values */
  	int map_entries;	/* color map entries */
  } Visual;
  
  /*
   * Depth structure; contains information for each possible depth.
   */
  typedef struct {
  	int depth;		/* this depth (Z) of the depth */
  	int nvisuals;		/* number of Visual types at this depth */
  	Visual *visuals;	/* list of visuals possible at this depth */
  } Depth;
  
  /*
   * Information about the screen.  The contents of this structure are
   * implementation dependent.  A Screen should be treated as opaque
   * by application code.
   */
  typedef struct {
  	XExtData *ext_data;	/* hook for extension to hang data */
  	struct _XDisplay *display;/* back pointer to display structure */
  	Window root;		/* Root window id. */
  	int width, height;	/* width and height of screen */
  	int mwidth, mheight;	/* width and height of  in millimeters */
  	int ndepths;		/* number of depths possible */
  	Depth *depths;		/* list of allowable depths on the screen */
  	int root_depth;		/* bits per pixel */
  	Visual *root_visual;	/* root visual */
  	GC default_gc;		/* GC for the root root visual */
  	Colormap cmap;		/* default color map */
  	unsigned long white_pixel;
  	unsigned long black_pixel;	/* White and Black pixel values */
  	int max_maps, min_maps;	/* max and min color maps */
  	int backing_store;	/* Never, WhenMapped, Always */
  	Bool save_unders;
  	long root_input_mask;	/* initial root input mask */
  } Screen;
  
  /*
   * Format structure; describes ZFormat data the screen will understand.
   */
  typedef struct {
  	XExtData *ext_data;	/* hook for extension to hang data */
  	int depth;		/* depth of this image format */
  	int bits_per_pixel;	/* bits/pixel at this depth */
  	int scanline_pad;	/* scanline must padded to this multiple */
  } ScreenFormat;
  
  /*
   * Data structure for setting window attributes.
   */
  typedef struct {
      Pixmap background_pixmap;	/* background or None or ParentRelative */
      unsigned long background_pixel;	/* background pixel */
      Pixmap border_pixmap;	/* border of the window */
      unsigned long border_pixel;	/* border pixel value */
      int bit_gravity;		/* one of bit gravity values */
      int win_gravity;		/* one of the window gravity values */
      int backing_store;		/* NotUseful, WhenMapped, Always */
      unsigned long backing_planes;/* planes to be preseved if possible */
      unsigned long backing_pixel;/* value to use in restoring planes */
      Bool save_under;		/* should bits under be saved? (popups) */
      long event_mask;		/* set of events that should be saved */
      long do_not_propagate_mask;	/* set of events that should not propagate */
      Bool override_redirect;	/* boolean value for override-redirect */
      Colormap colormap;		/* color map to be associated with window */
      Cursor cursor;		/* cursor to be displayed (or None) */
  } XSetWindowAttributes;
  
  typedef struct {
      int x, y;			/* location of window */
      int width, height;		/* width and height of window */
      int border_width;		/* border width of window */
      int depth;          	/* depth of window */
      Visual *visual;		/* the associated visual structure */
      Window root;        	/* root of screen containing window */
  #if defined(__cplusplus) || defined(c_plusplus)
      int c_class;		/* C++ InputOutput, InputOnly*/
  #else
      int class;			/* InputOutput, InputOnly*/
  #endif
      int bit_gravity;		/* one of bit gravity values */
      int win_gravity;		/* one of the window gravity values */
      int backing_store;		/* NotUseful, WhenMapped, Always */
      unsigned long backing_planes;/* planes to be preserved if possible */
      unsigned long backing_pixel;/* value to be used when restoring planes */
      Bool save_under;		/* boolean, should bits under be saved? */
      Colormap colormap;		/* color map to be associated with window */
      Bool map_installed;		/* boolean, is color map currently installed*/
      int map_state;		/* IsUnmapped, IsUnviewable, IsViewable */
      long all_event_masks;	/* set of events all people have interest in*/
      long your_event_mask;	/* my event mask */
      long do_not_propagate_mask; /* set of events that should not propagate */
      Bool override_redirect;	/* boolean value for override-redirect */
      Screen *screen;		/* back pointer to correct screen */
  } XWindowAttributes;
  
  /*
   * Data structure for host setting; getting routines.
   *
   */
  
  typedef struct {
  	int family;		/* for example FamilyInternet */
  	int length;		/* length of address, in bytes */
  	char *address;		/* pointer to where to find the bytes */
  } XHostAddress;
  
  /*
   * Data structure for "image" data, used by image manipulation routines.
   */
  typedef struct _XImage {
      int width, height;		/* size of image */
      int xoffset;		/* number of pixels offset in X direction */
      int format;			/* XYBitmap, XYPixmap, ZPixmap */
      char *data;			/* pointer to image data */
      int byte_order;		/* data byte order, LSBFirst, MSBFirst */
      int bitmap_unit;		/* quant. of scanline 8, 16, 32 */
      int bitmap_bit_order;	/* LSBFirst, MSBFirst */
      int bitmap_pad;		/* 8, 16, 32 either XY or ZPixmap */
      int depth;			/* depth of image */
      int bytes_per_line;		/* accelarator to next line */
      int bits_per_pixel;		/* bits per pixel (ZPixmap) */
      unsigned long red_mask;	/* bits in z arrangment */
      unsigned long green_mask;
      unsigned long blue_mask;
      XPointer obdata;		/* hook for the object routines to hang on */
      struct funcs {		/* image manipulation routines */
  	struct _XImage *(*create_image)();
  #if NeedFunctionPrototypes
  	int (*destroy_image)        (struct _XImage *);
  	unsigned long (*get_pixel)  (struct _XImage *, int, int);
  	int (*put_pixel)            (struct _XImage *, int, int, unsigned long);
  	struct _XImage *(*sub_image)(struct _XImage *, int, int, unsigned int, unsigned int);
  	int (*add_pixel)            (struct _XImage *, long);
  #else
  	int (*destroy_image)();
  	unsigned long (*get_pixel)();
  	int (*put_pixel)();
  	struct _XImage *(*sub_image)();
  	int (*add_pixel)();
  #endif
  	} f;
  } XImage;
  
  /*
   * Data structure for XReconfigureWindow
   */
  typedef struct {
      int x, y;
      int width, height;
      int border_width;
      Window sibling;
      int stack_mode;
  } XWindowChanges;
  
  /*
   * Data structure used by color operations
   */
  typedef struct {
  	unsigned long pixel;
  	unsigned short red, green, blue;
  	char flags;  /* do_red, do_green, do_blue */
  	char pad;
  } XColor;
  
  /*
   * Data structures for graphics operations.  On most machines, these are
   * congruent with the wire protocol structures, so reformatting the data
   * can be avoided on these architectures.
   */
  typedef struct {
      short x1, y1, x2, y2;
  } XSegment;
  
  typedef struct {
      short x, y;
  } XPoint;
  
  typedef struct {
      short x, y;
      unsigned short width, height;
  } XRectangle;
  
  typedef struct {
      short x, y;
      unsigned short width, height;
      short angle1, angle2;
  } XArc;
  
  
  /* Data structure for XChangeKeyboardControl */
  
  typedef struct {
          int key_click_percent;
          int bell_percent;
          int bell_pitch;
          int bell_duration;
          int led;
          int led_mode;
          int key;
          int auto_repeat_mode;   /* On, Off, Default */
  } XKeyboardControl;
  
  /* Data structure for XGetKeyboardControl */
  
  typedef struct {
          int key_click_percent;
  	int bell_percent;
  	unsigned int bell_pitch, bell_duration;
  	unsigned long led_mask;
  	int global_auto_repeat;
  	char auto_repeats[32];
  } XKeyboardState;
  
  /* Data structure for XGetMotionEvents.  */
  
  typedef struct {
          Time time;
  	short x, y;
  } XTimeCoord;
  
  /* Data structure for X{Set,Get}ModifierMapping */
  
  typedef struct {
   	int max_keypermod;	/* The server's max # of keys per modifier */
   	KeyCode *modifiermap;	/* An 8 by max_keypermod array of modifiers */
  } XModifierKeymap;
  
  
  /*
   * Display datatype maintaining display specific data.
   * The contents of this structure are implementation dependent.
   * A Display should be treated as opaque by application code.
   */
  typedef struct _XDisplay {
  	XExtData *ext_data;	/* hook for extension to hang data */
  	struct _XFreeFuncs *free_funcs; /* internal free functions */
  	int fd;			/* Network socket. */
  	int conn_checker;         /* ugly thing used by _XEventsQueued */
  	int proto_major_version;/* maj. version of server's X protocol */
  	int proto_minor_version;/* minor version of servers X protocol */
  	char *vendor;		/* vendor of the server hardware */
          XID resource_base;	/* resource ID base */
  	XID resource_mask;	/* resource ID mask bits */
  	XID resource_id;	/* allocator current ID */
  	int resource_shift;	/* allocator shift to correct bits */
  	XID (*resource_alloc)(); /* allocator function */
  	int byte_order;		/* screen byte order, LSBFirst, MSBFirst */
  	int bitmap_unit;	/* padding and data requirements */
  	int bitmap_pad;		/* padding requirements on bitmaps */
  	int bitmap_bit_order;	/* LeastSignificant or MostSignificant */
  	int nformats;		/* number of pixmap formats in list */
  	ScreenFormat *pixmap_format;	/* pixmap format list */
  	int vnumber;		/* Xlib's X protocol version number. */
  	int release;		/* release of the server */
  	struct _XSQEvent *head, *tail;	/* Input event queue. */
  	int qlen;		/* Length of input event queue */
  	unsigned long request;	/* sequence number of last request. */
  	char *last_req;		/* beginning of last request, or dummy */
  	char *buffer;		/* Output buffer starting address. */
  	char *bufptr;		/* Output buffer index pointer. */
  	char *bufmax;		/* Output buffer maximum+1 address. */
  	unsigned max_request_size; /* maximum number 32 bit words in request*/
  	struct _XrmHashBucketRec *db;
  	int (*synchandler)();	/* Synchronization handler */
  	char *display_name;	/* "host:display" string used on this connect*/
  	int default_screen;	/* default screen for operations */
  	int nscreens;		/* number of screens on this server*/
  	Screen *screens;	/* pointer to list of screens */
  	unsigned long motion_buffer;	/* size of motion buffer */
  	unsigned long flags;	/* internal connection flags */
  	int min_keycode;	/* minimum defined keycode */
  	int max_keycode;	/* maximum defined keycode */
  	KeySym *keysyms;	/* This server's keysyms */
  	XModifierKeymap *modifiermap;	/* This server's modifier keymap */
  	int keysyms_per_keycode;/* number of rows */
  	char *xdefaults;	/* contents of defaults from server */
  	char *scratch_buffer;	/* place to hang scratch buffer */
  	unsigned long scratch_length;	/* length of scratch buffer */
  	int ext_number;		/* extension number on this display */
  	struct _XExten *ext_procs; /* extensions initialized on this display */
  	/*
  	 * the following can be fixed size, as the protocol defines how
  	 * much address space is available.
  	 * While this could be done using the extension vector, there
  	 * may be MANY events processed, so a search through the extension
  	 * list to find the right procedure for each event might be
  	 * expensive if many extensions are being used.
  	 */
  	Bool (*event_vec[128])();  /* vector for wire to event */
  	Status (*wire_vec[128])(); /* vector for event to wire */
  	KeySym lock_meaning;	   /* for XLookupString */
  	struct _XLockInfo *lock;   /* multi-thread state, display lock */
  	struct _XInternalAsync *async_handlers; /* for internal async */
  	unsigned long bigreq_size; /* max size of big requests */
  	struct _XLockPtrs *lock_fns; /* pointers to threads functions */
  	/* things above this line should not move, for binary compatibility */
  	struct _XKeytrans *key_bindings; /* for XLookupString */
  	Font cursor_font;	   /* for XCreateFontCursor */
  	struct _XDisplayAtoms *atoms; /* for XInternAtom */
  	unsigned int mode_switch;  /* keyboard group modifiers */
  	struct _XContextDB *context_db; /* context database */
  	Bool (**error_vec)();      /* vector for wire to error */
  	/*
  	 * Xcms information
  	 */
  	struct {
  	   XPointer defaultCCCs;  /* pointer to an array of default XcmsCCC */
  	   XPointer clientCmaps;  /* pointer to linked list of XcmsCmapRec */
  	   XPointer perVisualIntensityMaps;
  				  /* linked list of XcmsIntensityMap */
  	} cms;
  	struct _XIMFilter *im_filters;
  	struct _XSQEvent *qfree; /* unallocated event queue elements */
  	unsigned long next_event_serial_num; /* inserted into next queue elt */
  	int (*savedsynchandler)(); /* user synchandler when Xlib usurps */
  } Display;
  
  #if NeedFunctionPrototypes	/* prototypes require event type definitions */
  #undef _XEVENT_
  #endif
  #ifndef _XEVENT_
  
  #define XMaxTransChars 4
  
  /*
   * Definitions of specific events.
   */
  typedef struct {
  	int type;		/* of event */
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;	        /* "event" window it is reported relative to */
  	Window root;	        /* root window that the event occured on */
  	Window subwindow;	/* child window */
  	Time time;		/* milliseconds */
  	int x, y;		/* pointer x, y coordinates in event window */
  	int x_root, y_root;	/* coordinates relative to root */
  	unsigned int state;	/* key or button mask */
  	unsigned int keycode;	/* detail */
  	Bool same_screen;	/* same screen flag */
          char trans_chars[XMaxTransChars];
  				/* translated characters */
  	int nbytes;
  } XKeyEvent;
  typedef XKeyEvent XKeyPressedEvent;
  typedef XKeyEvent XKeyReleasedEvent;
  
  typedef struct {
  	int type;		/* of event */
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;	        /* "event" window it is reported relative to */
  	Window root;	        /* root window that the event occured on */
  	Window subwindow;	/* child window */
  	Time time;		/* milliseconds */
  	int x, y;		/* pointer x, y coordinates in event window */
  	int x_root, y_root;	/* coordinates relative to root */
  	unsigned int state;	/* key or button mask */
  	unsigned int button;	/* detail */
  	Bool same_screen;	/* same screen flag */
  } XButtonEvent;
  typedef XButtonEvent XButtonPressedEvent;
  typedef XButtonEvent XButtonReleasedEvent;
  
  typedef struct {
  	int type;		/* of event */
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;	        /* "event" window reported relative to */
  	Window root;	        /* root window that the event occured on */
  	Window subwindow;	/* child window */
  	Time time;		/* milliseconds */
  	int x, y;		/* pointer x, y coordinates in event window */
  	int x_root, y_root;	/* coordinates relative to root */
  	unsigned int state;	/* key or button mask */
  	char is_hint;		/* detail */
  	Bool same_screen;	/* same screen flag */
  } XMotionEvent;
  typedef XMotionEvent XPointerMovedEvent;
  
  typedef struct {
  	int type;		/* of event */
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;	        /* "event" window reported relative to */
  	Window root;	        /* root window that the event occured on */
  	Window subwindow;	/* child window */
  	Time time;		/* milliseconds */
  	int x, y;		/* pointer x, y coordinates in event window */
  	int x_root, y_root;	/* coordinates relative to root */
  	int mode;		/* NotifyNormal, NotifyGrab, NotifyUngrab */
  	int detail;
  	/*
  	 * NotifyAncestor, NotifyVirtual, NotifyInferior,
  	 * NotifyNonlinear,NotifyNonlinearVirtual
  	 */
  	Bool same_screen;	/* same screen flag */
  	Bool focus;		/* boolean focus */
  	unsigned int state;	/* key or button mask */
  } XCrossingEvent;
  typedef XCrossingEvent XEnterWindowEvent;
  typedef XCrossingEvent XLeaveWindowEvent;
  
  typedef struct {
  	int type;		/* FocusIn or FocusOut */
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;		/* window of event */
  	int mode;		/* NotifyNormal, NotifyGrab, NotifyUngrab */
  	int detail;
  	/*
  	 * NotifyAncestor, NotifyVirtual, NotifyInferior,
  	 * NotifyNonlinear,NotifyNonlinearVirtual, NotifyPointer,
  	 * NotifyPointerRoot, NotifyDetailNone
  	 */
  } XFocusChangeEvent;
  typedef XFocusChangeEvent XFocusInEvent;
  typedef XFocusChangeEvent XFocusOutEvent;
  
  /* generated on EnterWindow and FocusIn  when KeyMapState selected */
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;
  	char key_vector[32];
  } XKeymapEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;
  	int x, y;
  	int width, height;
  	int count;		/* if non-zero, at least this many more */
  } XExposeEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Drawable drawable;
  	int x, y;
  	int width, height;
  	int count;		/* if non-zero, at least this many more */
  	int major_code;		/* core is CopyArea or CopyPlane */
  	int minor_code;		/* not defined in the core */
  } XGraphicsExposeEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Drawable drawable;
  	int major_code;		/* core is CopyArea or CopyPlane */
  	int minor_code;		/* not defined in the core */
  } XNoExposeEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;
  	int state;		/* Visibility state */
  } XVisibilityEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window parent;		/* parent of the window */
  	Window window;		/* window id of window created */
  	int x, y;		/* window location */
  	int width, height;	/* size of window */
  	int border_width;	/* border width */
  	Bool override_redirect;	/* creation should be overridden */
  } XCreateWindowEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window event;
  	Window window;
  } XDestroyWindowEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window event;
  	Window window;
  	Bool from_configure;
  } XUnmapEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window event;
  	Window window;
  	Bool override_redirect;	/* boolean, is override set... */
  } XMapEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window parent;
  	Window window;
  } XMapRequestEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window event;
  	Window window;
  	Window parent;
  	int x, y;
  	Bool override_redirect;
  } XReparentEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window event;
  	Window window;
  	int x, y;
  	int width, height;
  	int border_width;
  	Window above;
  	Bool override_redirect;
  } XConfigureEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window event;
  	Window window;
  	int x, y;
  } XGravityEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;
  	int width, height;
  } XResizeRequestEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window parent;
  	Window window;
  	int x, y;
  	int width, height;
  	int border_width;
  	Window above;
  	int detail;		/* Above, Below, TopIf, BottomIf, Opposite */
  	unsigned long value_mask;
  } XConfigureRequestEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window event;
  	Window window;
  	int place;		/* PlaceOnTop, PlaceOnBottom */
  } XCirculateEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window parent;
  	Window window;
  	int place;		/* PlaceOnTop, PlaceOnBottom */
  } XCirculateRequestEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;
  	Atom atom;
  	Time time;
  	int state;		/* NewValue, Deleted */
  } XPropertyEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;
  	Atom selection;
  	Time time;
  } XSelectionClearEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window owner;
  	Window requestor;
  	Atom selection;
  	Atom target;
  	Atom property;
  	Time time;
  } XSelectionRequestEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window requestor;
  	Atom selection;
  	Atom target;
  	Atom property;		/* ATOM or None */
  	Time time;
  } XSelectionEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;
  	Colormap colormap;	/* COLORMAP or None */
  #if defined(__cplusplus) || defined(c_plusplus)
  	Bool c_new;		/* C++ */
  #else
  	Bool new;
  #endif
  	int state;		/* ColormapInstalled, ColormapUninstalled */
  } XColormapEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;
  	Atom message_type;
  	int format;
  	union {
  		char b[20];
  		short s[10];
  		long l[5];
  		} data;
  } XClientMessageEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;	/* Display the event was read from */
  	Window window;		/* unused */
  	int request;		/* one of MappingModifier, MappingKeyboard,
  				   MappingPointer */
  	int first_keycode;	/* first keycode */
  	int count;		/* defines range of change w. first_keycode*/
  } XMappingEvent;
  
  typedef struct {
  	int type;
  	Display *display;	/* Display the event was read from */
  	XID resourceid;		/* resource id */
  	unsigned long serial;	/* serial number of failed request */
  	unsigned char error_code;	/* error code of failed request */
  	unsigned char request_code;	/* Major op-code of failed request */
  	unsigned char minor_code;	/* Minor op-code of failed request */
  } XErrorEvent;
  
  typedef struct {
  	int type;
  	unsigned long serial;	/* # of last request processed by server */
  	Bool send_event;	/* true if this came from a SendEvent request */
  	Display *display;/* Display the event was read from */
  	Window window;	/* window on which event was requested in event mask */
  } XAnyEvent;
  
  /*
   * this union is defined so Xlib can always use the same sized
   * event structure internally, to avoid memory fragmentation.
   */
  typedef union _XEvent {
          int type;		/* must not be changed; first element */
  	XAnyEvent xany;
  	XKeyEvent xkey;
  	XButtonEvent xbutton;
  	XMotionEvent xmotion;
  	XCrossingEvent xcrossing;
  	XFocusChangeEvent xfocus;
  	XExposeEvent xexpose;
  	XGraphicsExposeEvent xgraphicsexpose;
  	XNoExposeEvent xnoexpose;
  	XVisibilityEvent xvisibility;
  	XCreateWindowEvent xcreatewindow;
  	XDestroyWindowEvent xdestroywindow;
  	XUnmapEvent xunmap;
  	XMapEvent xmap;
  	XMapRequestEvent xmaprequest;
  	XReparentEvent xreparent;
  	XConfigureEvent xconfigure;
  	XGravityEvent xgravity;
  	XResizeRequestEvent xresizerequest;
  	XConfigureRequestEvent xconfigurerequest;
  	XCirculateEvent xcirculate;
  	XCirculateRequestEvent xcirculaterequest;
  	XPropertyEvent xproperty;
  	XSelectionClearEvent xselectionclear;
  	XSelectionRequestEvent xselectionrequest;
  	XSelectionEvent xselection;
  	XColormapEvent xcolormap;
  	XClientMessageEvent xclient;
  	XMappingEvent xmapping;
  	XErrorEvent xerror;
  	XKeymapEvent xkeymap;
  	long pad[24];
  } XEvent;
  #endif
  
  #define XAllocID(dpy) ((*(dpy)->resource_alloc)((dpy)))
  
  /*
   * per character font metric information.
   */
  typedef struct {
      short	lbearing;	/* origin to left edge of raster */
      short	rbearing;	/* origin to right edge of raster */
      short	width;		/* advance to next char's origin */
      short	ascent;		/* baseline to top edge of raster */
      short	descent;	/* baseline to bottom edge of raster */
      unsigned short attributes;	/* per char flags (not predefined) */
  } XCharStruct;
  
  /*
   * To allow arbitrary information with fonts, there are additional properties
   * returned.
   */
  typedef struct {
      Atom name;
      unsigned long card32;
  } XFontProp;
  
  typedef struct {
      XExtData	*ext_data;	/* hook for extension to hang data */
      Font        fid;            /* Font id for this font */
      unsigned	direction;	/* hint about direction the font is painted */
      unsigned	min_char_or_byte2;/* first character */
      unsigned	max_char_or_byte2;/* last character */
      unsigned	min_byte1;	/* first row that exists */
      unsigned	max_byte1;	/* last row that exists */
      Bool	all_chars_exist;/* flag if all characters have non-zero size*/
      unsigned	default_char;	/* char to print for undefined character */
      int         n_properties;   /* how many properties there are */
      XFontProp	*properties;	/* pointer to array of additional properties*/
      XCharStruct	min_bounds;	/* minimum bounds over all existing char*/
      XCharStruct	max_bounds;	/* maximum bounds over all existing char*/
      XCharStruct	*per_char;	/* first_char to last_char information */
      int		ascent;		/* log. extent above baseline for spacing */
      int		descent;	/* log. descent below baseline for spacing */
  } XFontStruct;
  
  /*
   * PolyText routines take these as arguments.
   */
  typedef struct {
      char *chars;		/* pointer to string */
      int nchars;			/* number of characters */
      int delta;			/* delta between strings */
      Font font;			/* font to print it in, None don't change */
  } XTextItem;
  
  typedef struct {		/* normal 16 bit characters are two bytes */
      unsigned char byte1;
      unsigned char byte2;
  } XChar2b;
  
  typedef struct {
      XChar2b *chars;		/* two byte characters */
      int nchars;			/* number of characters */
      int delta;			/* delta between strings */
      Font font;			/* font to print it in, None don't change */
  } XTextItem16;
  
  
  typedef union { Display *display;
  		GC gc;
  		Visual *visual;
  		Screen *screen;
  		ScreenFormat *pixmap_format;
  		XFontStruct *font; } XEDataObject;
  
  typedef struct {
      XRectangle      max_ink_extent;
      XRectangle      max_logical_extent;
  } XFontSetExtents;
  
  typedef struct _XFontSet *XFontSet;
  
  typedef struct {
      char           *chars;
      int             nchars;
      int             delta;
      XFontSet        font_set;
  } XmbTextItem;
  
  typedef struct {
      wchar_t        *chars;
      int             nchars;
      int             delta;
      XFontSet        font_set;
  } XwcTextItem;
  
  typedef void (*XIMProc)();
  
  typedef struct _XIM *XIM;
  typedef struct _XIC *XIC;
  
  typedef unsigned long XIMStyle;
  
  typedef struct {
      unsigned short count_styles;
      XIMStyle *supported_styles;
  } XIMStyles;
  
  #define XIMPreeditArea		0x0001L
  #define XIMPreeditCallbacks	0x0002L
  #define XIMPreeditPosition	0x0004L
  #define XIMPreeditNothing	0x0008L
  #define XIMPreeditNone		0x0010L
  #define XIMStatusArea		0x0100L
  #define XIMStatusCallbacks	0x0200L
  #define XIMStatusNothing	0x0400L
  #define XIMStatusNone		0x0800L
  
  #define XNVaNestedList "XNVaNestedList"
  #define XNClientWindow "clientWindow"
  #define XNInputStyle "inputStyle"
  #define XNFocusWindow "focusWindow"
  #define XNResourceName "resourceName"
  #define XNResourceClass "resourceClass"
  #define XNGeometryCallback "geometryCallback"
  #define XNFilterEvents "filterEvents"
  #define XNPreeditStartCallback "preeditStartCallback"
  #define XNPreeditDoneCallback "preeditDoneCallback"
  #define XNPreeditDrawCallback "preeditDrawCallback"
  #define XNPreeditCaretCallback "preeditCaretCallback"
  #define XNPreeditAttributes "preeditAttributes"
  #define XNStatusStartCallback "statusStartCallback"
  #define XNStatusDoneCallback "statusDoneCallback"
  #define XNStatusDrawCallback "statusDrawCallback"
  #define XNStatusAttributes "statusAttributes"
  #define XNArea "area"
  #define XNAreaNeeded "areaNeeded"
  #define XNSpotLocation "spotLocation"
  #define XNColormap "colorMap"
  #define XNStdColormap "stdColorMap"
  #define XNForeground "foreground"
  #define XNBackground "background"
  #define XNBackgroundPixmap "backgroundPixmap"
  #define XNFontSet "fontSet"
  #define XNLineSpace "lineSpace"
  #define XNCursor "cursor"
  
  #define XBufferOverflow		-1
  #define XLookupNone		1
  #define XLookupChars		2
  #define XLookupKeySym		3
  #define XLookupBoth		4
  
  #if NeedFunctionPrototypes
  typedef void *XVaNestedList;
  #else
  typedef XPointer XVaNestedList;
  #endif
  
  typedef struct {
      XPointer client_data;
      XIMProc callback;
  } XIMCallback;
  
  typedef unsigned long XIMFeedback;
  
  #define XIMReverse	1
  #define XIMUnderline	(1<<1)
  #define XIMHighlight	(1<<2)
  #define XIMPrimary 	(1<<5)
  #define XIMSecondary	(1<<6)
  #define XIMTertiary 	(1<<7)
  
  typedef struct _XIMText {
      unsigned short length;
      XIMFeedback *feedback;
      Bool encoding_is_wchar;
      union {
  	char *multi_byte;
  	wchar_t *wide_char;
      } string;
  } XIMText;
  
  typedef struct _XIMPreeditDrawCallbackStruct {
      int caret;		/* Cursor offset within pre-edit string */
      int chg_first;	/* Starting change position */
      int chg_length;	/* Length of the change in character count */
      XIMText *text;
  } XIMPreeditDrawCallbackStruct;
  
  typedef enum {
      XIMForwardChar, XIMBackwardChar,
      XIMForwardWord, XIMBackwardWord,
      XIMCaretUp, XIMCaretDown,
      XIMNextLine, XIMPreviousLine,
      XIMLineStart, XIMLineEnd,
      XIMAbsolutePosition,
      XIMDontChange
  } XIMCaretDirection;
  
  typedef enum {
      XIMIsInvisible,	/* Disable caret feedback */
      XIMIsPrimary,	/* UI defined caret feedback */
      XIMIsSecondary	/* UI defined caret feedback */
  } XIMCaretStyle;
  
  typedef struct _XIMPreeditCaretCallbackStruct {
      int position;		 /* Caret offset within pre-edit string */
      XIMCaretDirection direction; /* Caret moves direction */
      XIMCaretStyle style;	 /* Feedback of the caret */
  } XIMPreeditCaretCallbackStruct;
  
  typedef enum {
      XIMTextType,
      XIMBitmapType
  } XIMStatusDataType;
  
  typedef struct _XIMStatusDrawCallbackStruct {
      XIMStatusDataType type;
      union {
  	XIMText *text;
  	Pixmap  bitmap;
      } data;
  } XIMStatusDrawCallbackStruct;
  
  typedef int (*XErrorHandler) (	    /* WARNING, this type not in Xlib spec */
  #if NeedFunctionPrototypes
      Display*		/* display */,
      XErrorEvent*	/* error_event */
  #endif
  );
  
  _XFUNCPROTOBEGIN
  
  
  
  #include "tkIntXlibDecls.h"
  
  _XFUNCPROTOEND
  
  #if defined(MAC_OSX_TK)
  #   undef Cursor
  #   undef Region
  #endif
  
  #endif /* _XLIB_H_ */
  