summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--configure.ac125
-rw-r--r--x11vnc/8to24.c28
-rw-r--r--x11vnc/ChangeLog3
-rw-r--r--x11vnc/Makefile.am8
-rw-r--r--x11vnc/README1470
-rw-r--r--x11vnc/cleanup.c4
-rw-r--r--x11vnc/connections.c21
-rw-r--r--x11vnc/cursor.c10
-rw-r--r--x11vnc/gui.c12
-rw-r--r--x11vnc/keyboard.c39
-rw-r--r--x11vnc/linuxfb.c2
-rw-r--r--x11vnc/nox11.h6665
-rw-r--r--x11vnc/nox11_funcs.h2820
-rw-r--r--x11vnc/pointer.c21
-rw-r--r--x11vnc/remote.c8
-rw-r--r--x11vnc/screen.c22
-rw-r--r--x11vnc/selection.c12
-rw-r--r--x11vnc/solid.c20
-rw-r--r--x11vnc/sslhelper.c14
-rw-r--r--x11vnc/uinput.c5
-rw-r--r--x11vnc/userinput.c6
-rw-r--r--x11vnc/util.c2
-rw-r--r--x11vnc/v4l.c1
-rw-r--r--x11vnc/win_utils.c31
-rw-r--r--x11vnc/x11vnc.12
-rw-r--r--x11vnc/x11vnc.c4
-rw-r--r--x11vnc/x11vnc.h25
-rw-r--r--x11vnc/x11vnc_defs.c2
-rw-r--r--x11vnc/xevents.c36
-rw-r--r--x11vnc/xwrappers.c88
31 files changed, 10701 insertions, 809 deletions
diff --git a/ChangeLog b/ChangeLog
index 9ae48ec..1efd5a4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2006-07-17 Karl Runge <runge@karlrunge.com>
+ * configure.ac: move non-X11 tests out of HAVE_X: set
+ SSL_LIBS and CRYPT_LIBS and some header checks.
+
2006-07-12 Karl Runge <runge@karlrunge.com>
* libvncserver: release for CVE-2006-2450 fix.
diff --git a/configure.ac b/configure.ac
index 6c73947..4fe2b37 100644
--- a/configure.ac
+++ b/configure.ac
@@ -47,6 +47,7 @@ AC_CHECK_HEADER(thenonexistentheader.h, HAVE_THENONEXISTENTHEADER_H="true")
# Checks for X libraries
HAVE_X="false"
AC_PATH_XTRA
+AH_TEMPLATE(HAVE_X11, [X11 build environment present])
AH_TEMPLATE(HAVE_XSHM, [MIT-SHM extension build environment present])
AH_TEMPLATE(HAVE_XTEST, [XTEST extension build environment present])
AH_TEMPLATE(HAVE_XTESTGRABCONTROL, [XTEST extension has XTestGrabControl])
@@ -88,8 +89,10 @@ AC_ARG_WITH(fbdev,
AC_ARG_WITH(uinput,
[ --without-uinput disable linux uinput device support],,)
-if test "$X_CFLAGS" != "-DX_DISPLAY_MISSING"; then
- AC_CHECK_LIB(X11, XGetImage, HAVE_X="true",
+if test "x$with_x" = "xno"; then
+ HAVE_X="false"
+elif test "$X_CFLAGS" != "-DX_DISPLAY_MISSING"; then
+ AC_CHECK_LIB(X11, XGetImage, [AC_DEFINE(HAVE_X11) HAVE_X="true"],
HAVE_X="false",
$X_LIBS $X_PRELIBS -lX11 $X_EXTRA_LIBS)
@@ -193,70 +196,14 @@ if test "$X_CFLAGS" != "-DX_DISPLAY_MISSING"; then
esac
fi
- # currently only x11vnc uses crypt() or libssl:
- AH_TEMPLATE(HAVE_LIBCRYPT, [libcrypt library present])
- AC_ARG_WITH(crypt,
- [ --without-crypt disable support for libcrypt],,)
- if test "x$with_crypt" != "xno"; then
- AC_CHECK_FUNCS([crypt], HAVE_LIBC_CRYPT="true")
- if test -z "$HAVE_LIBC_CRYPT"; then
- AC_CHECK_LIB(crypt, crypt,
- X_PRELIBS="$X_PRELIBS -lcrypt"
- [AC_DEFINE(HAVE_LIBCRYPT)], ,)
- fi
- fi
-
- # some OS's need both -lssl and -lcrypto on link line:
- AH_TEMPLATE(HAVE_LIBCRYPTO, [openssl libcrypto library present])
- AC_ARG_WITH(crypto,
- [ --without-crypto disable support for openssl libcrypto],,)
-
- AH_TEMPLATE(HAVE_LIBSSL, [openssl libssl library present])
- AC_ARG_WITH(ssl,
- [ --without-ssl disable support for openssl libssl],,)
-
- if test "x$with_crypto" != "xno" -a "x$with_ssl" != "xno"; then
- AC_CHECK_LIB(crypto, RAND_file_name,
- [AC_DEFINE(HAVE_LIBCRYPTO) HAVE_LIBCRYPTO="true"], ,)
- fi
-
- if test "x$with_ssl" != "xno"; then
- if test "x$HAVE_LIBCRYPTO" = "xtrue"; then
- AC_CHECK_LIB(ssl, SSL_library_init,
- X_PRELIBS="$X_PRELIBS -lssl -lcrypto"
- [AC_DEFINE(HAVE_LIBSSL) HAVE_LIBSSL="true"], ,
- -lcrypto)
- else
- AC_CHECK_LIB(ssl, SSL_library_init,
- X_PRELIBS="$X_PRELIBS -lssl"
- [AC_DEFINE(HAVE_LIBSSL) HAVE_LIBSSL="true"], ,)
- fi
- fi
-
- if test "x$with_v4l" != "xno"; then
- AC_CHECK_HEADER(linux/videodev.h,
- [AC_DEFINE(HAVE_LINUX_VIDEODEV_H)],,)
- fi
- if test "x$with_fbdev" != "xno"; then
- AC_CHECK_HEADER(linux/fb.h,
- [AC_DEFINE(HAVE_LINUX_FB_H)],,)
- fi
- if test "x$with_uinput" != "xno"; then
- AC_CHECK_HEADER(linux/input.h,
- [AC_DEFINE(HAVE_LINUX_INPUT_H) HAVE_LINUX_INPUT_H="true"],,)
- if test "x$HAVE_LINUX_INPUT_H" = "xtrue"; then
- AC_CHECK_HEADER(linux/uinput.h,
- [AC_DEFINE(HAVE_LINUX_UINPUT_H)],, [#include <linux/input.h>])
- fi
- fi
-
X_LIBS="$X_LIBS $X_PRELIBS -lX11 $X_EXTRA_LIBS"
fi
fi
+
AC_SUBST(X_LIBS)
AM_CONDITIONAL(HAVE_X, test $HAVE_X != "false")
-if test "$PACKAGE_NAME" = "x11vnc" -a "x$HAVE_X" = "xfalse"; then
+if test "$PACKAGE_NAME" = "x11vnc" -a "x$HAVE_X" = "xfalse" -a "x$with_x" != "xno"; then
AC_MSG_ERROR([
==========================================================================
A working X window system build environment is required to build x11vnc.
@@ -270,6 +217,64 @@ to lib64 or lib32 directories to pick up the correct word size.
])
fi
+AH_TEMPLATE(HAVE_LIBCRYPT, [libcrypt library present])
+AC_ARG_WITH(crypt,
+[ --without-crypt disable support for libcrypt],,)
+if test "x$with_crypt" != "xno"; then
+ AC_CHECK_FUNCS([crypt], HAVE_LIBC_CRYPT="true")
+ if test -z "$HAVE_LIBC_CRYPT"; then
+ AC_CHECK_LIB(crypt, crypt,
+ CRYPT_LIBS="-lcrypt"
+ [AC_DEFINE(HAVE_LIBCRYPT)], ,)
+ fi
+fi
+AC_SUBST(CRYPT_LIBS)
+
+# some OS's need both -lssl and -lcrypto on link line:
+AH_TEMPLATE(HAVE_LIBCRYPTO, [openssl libcrypto library present])
+AC_ARG_WITH(crypto,
+[ --without-crypto disable support for openssl libcrypto],,)
+
+AH_TEMPLATE(HAVE_LIBSSL, [openssl libssl library present])
+AC_ARG_WITH(ssl,
+[ --without-ssl disable support for openssl libssl],,)
+
+if test "x$with_crypto" != "xno" -a "x$with_ssl" != "xno"; then
+ AC_CHECK_LIB(crypto, RAND_file_name,
+ [AC_DEFINE(HAVE_LIBCRYPTO) HAVE_LIBCRYPTO="true"], ,)
+fi
+
+if test "x$with_ssl" != "xno"; then
+ if test "x$HAVE_LIBCRYPTO" = "xtrue"; then
+ AC_CHECK_LIB(ssl, SSL_library_init,
+ SSL_LIBS="-lssl -lcrypto"
+ [AC_DEFINE(HAVE_LIBSSL) HAVE_LIBSSL="true"], ,
+ -lcrypto)
+ else
+ AC_CHECK_LIB(ssl, SSL_library_init,
+ SSL_LIBS="-lssl"
+ [AC_DEFINE(HAVE_LIBSSL) HAVE_LIBSSL="true"], ,)
+ fi
+fi
+AC_SUBST(SSL_LIBS)
+
+if test "x$with_v4l" != "xno"; then
+ AC_CHECK_HEADER(linux/videodev.h,
+ [AC_DEFINE(HAVE_LINUX_VIDEODEV_H)],,)
+fi
+if test "x$with_fbdev" != "xno"; then
+ AC_CHECK_HEADER(linux/fb.h,
+ [AC_DEFINE(HAVE_LINUX_FB_H)],,)
+fi
+if test "x$with_uinput" != "xno"; then
+ AC_CHECK_HEADER(linux/input.h,
+ [AC_DEFINE(HAVE_LINUX_INPUT_H) HAVE_LINUX_INPUT_H="true"],,)
+ if test "x$HAVE_LINUX_INPUT_H" = "xtrue"; then
+ AC_CHECK_HEADER(linux/uinput.h,
+ [AC_DEFINE(HAVE_LINUX_UINPUT_H)],, [#include <linux/input.h>])
+ fi
+fi
+
# Checks for libraries.
AC_ARG_WITH(jpeg,
diff --git a/x11vnc/8to24.c b/x11vnc/8to24.c
index b7efdab..90dcc20 100644
--- a/x11vnc/8to24.c
+++ b/x11vnc/8to24.c
@@ -71,6 +71,9 @@ static void set_root_cmap(void) {
int redo = 0;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
if (now > last_set + 10) {
redo = 1;
@@ -116,6 +119,7 @@ static void set_root_cmap(void) {
}
X_UNLOCK;
}
+#endif /* NO_X11 */
}
/* fixed size array. Will primarily hold visible 8bpp windows */
@@ -256,6 +260,9 @@ void check_for_multivis(void) {
double delay;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
if (now > last_parse + 1.0) {
last_parse = now;
@@ -529,6 +536,7 @@ if (0) fprintf(stderr, "MV_count: %d hit: %d %.4f %10.2f\n", MV_count, MV_hit,
}
}
if (0) fprintf(stderr, "done: %.4f\n", dnow() - last_query);
+#endif /* NO_X11 */
}
#define VW_CACHE_MAX 1024
@@ -750,6 +758,9 @@ if (db24 > 1) fprintf(stderr, " ------------ 0x%lx i=%d\n", windows_8bp
static XImage *p_xi(XImage *xi, Visual *visual, int win_depth, int *w) {
RAWFB_RET(NULL)
+#if NO_X11
+ return NULL;
+#else
if (xi == NULL || *w < dpy_x) {
char *d;
if (xi) {
@@ -765,6 +776,7 @@ static XImage *p_xi(XImage *xi, Visual *visual, int win_depth, int *w) {
dpy_x, 1, 8, 0);
}
return xi;
+#endif /* NO_X11 */
}
static int poll_line(int x1, int x2, int y1, int n, sraRegionPtr mod) {
@@ -791,6 +803,9 @@ static int poll_line(int x1, int x2, int y1, int n, sraRegionPtr mod) {
RAWFB_RET(1)
+#if NO_X11
+ return 1;
+#else
if (win == None) {
return 1;
}
@@ -912,6 +927,7 @@ if (db24 > 2) fprintf(stderr, "avoid bad match...\n");
sraRgnDestroy(rect);
}
return 1;
+#endif /* NO_X11 */
}
static void poll_line_complement(int x1, int x2, int y1, sraRegionPtr mod) {
@@ -1279,6 +1295,9 @@ static int get_cmap(int j, Colormap cmap) {
XErrorHandler old_handler = NULL;
RAWFB_RET(0)
+#if NO_X11
+ return 0;
+#else
if (0) {
/* not working properly for depth 24... */
@@ -1345,6 +1364,7 @@ if (db24 > 2) fprintf(stderr, " cmap[%02d][%03d]: %03d %03d %03d 0x%08x \n", j,
rgb[j][i] = red | green | blue;
}
return 1;
+#endif /* NO_X11 */
}
static void do_8bpp_region(int n, sraRegionPtr mark) {
@@ -1409,6 +1429,9 @@ static XImage *cmap_xi(XImage *xi, Window win, int win_depth) {
XWindowAttributes attr;
char *d;
+#if NO_X11
+ return NULL;
+#else
if (xi) {
XDestroyImage(xi);
}
@@ -1426,6 +1449,7 @@ static XImage *cmap_xi(XImage *xi, Window win, int win_depth) {
}
return XCreateImage(dpy, attr.visual, win_depth, ZPixmap, 0, d, dpy_x,
dpy_y, 8, 0);
+#endif /* NO_X11 */
}
@@ -1446,6 +1470,9 @@ static void transform_rect(sraRect rect, Window win, int win_depth, int cm) {
if (db24 > 1) fprintf(stderr, "transform %4d %4d %4d %4d cm: %d\n", rect.x1, rect.y1, rect.x2, rect.y2, cm);
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
/* now transform the pixels in this rectangle: */
n_off = main_bytes_per_line * rect.y1 + pixelsize * rect.x1;
@@ -1649,6 +1676,7 @@ if (db24) fprintf(stderr, "xi: wrong depth: %d\n", xi->depth);
src += main_bytes_per_line * fac;
}
}
+#endif /* NO_X11 */
}
void bpp8to24(int x1, int y1, int x2, int y2) {
diff --git a/x11vnc/ChangeLog b/x11vnc/ChangeLog
index b17ba94..5aaff8f 100644
--- a/x11vnc/ChangeLog
+++ b/x11vnc/ChangeLog
@@ -1,3 +1,6 @@
+2006-07-17 Karl Runge <runge@karlrunge.com>
+ * x11vnc: enable --without-x builds for -rawfb only (NO_X11)
+
2006-07-11 Karl Runge <runge@karlrunge.com>
* x11vnc: more tweaks to UINPUT, mostly mouse motion.
diff --git a/x11vnc/Makefile.am b/x11vnc/Makefile.am
index ab4898d..517e251 100644
--- a/x11vnc/Makefile.am
+++ b/x11vnc/Makefile.am
@@ -11,10 +11,12 @@ if CYGIPC
LD_CYGIPC=-lcygipc
endif
-if HAVE_X
bin_PROGRAMS=x11vnc
-x11vnc_SOURCES = 8to24.c cleanup.c connections.c cursor.c gui.c help.c inet.c keyboard.c linuxfb.c options.c pm.c pointer.c rates.c remote.c scan.c screen.c selection.c solid.c sslcmds.c sslhelper.c uinput.c unixpw.c user.c userinput.c util.c v4l.c win_utils.c x11vnc.c x11vnc_defs.c xdamage.c xevents.c xinerama.c xkb_bell.c xrandr.c xrecord.c xwrappers.c 8to24.h allowed_input_t.h blackout_t.h cleanup.h connections.h cursor.h enums.h gui.h help.h inet.h keyboard.h linuxfb.h options.h params.h pm.h pointer.h rates.h remote.h scan.h screen.h scrollevent_t.h selection.h solid.h sslcmds.h sslhelper.h ssltools.h tkx11vnc.h uinput.h unixpw.h user.h userinput.h util.h v4l.h win_utils.h winattr_t.h x11vnc.h xdamage.h xevents.h xinerama.h xkb_bell.h xrandr.h xrecord.h xwrappers.h
+x11vnc_SOURCES = 8to24.c cleanup.c connections.c cursor.c gui.c help.c inet.c keyboard.c linuxfb.c options.c pm.c pointer.c rates.c remote.c scan.c screen.c selection.c solid.c sslcmds.c sslhelper.c uinput.c unixpw.c user.c userinput.c util.c v4l.c win_utils.c x11vnc.c x11vnc_defs.c xdamage.c xevents.c xinerama.c xkb_bell.c xrandr.c xrecord.c xwrappers.c 8to24.h allowed_input_t.h blackout_t.h cleanup.h connections.h cursor.h enums.h gui.h help.h inet.h keyboard.h linuxfb.h nox11.h nox11_funcs.h options.h params.h pm.h pointer.h rates.h remote.h scan.h screen.h scrollevent_t.h selection.h solid.h sslcmds.h sslhelper.h ssltools.h tkx11vnc.h uinput.h unixpw.h user.h userinput.h util.h v4l.h win_utils.h winattr_t.h x11vnc.h xdamage.h xevents.h xinerama.h xkb_bell.h xrandr.h xrecord.h xwrappers.h
+if HAVE_X
INCLUDES=@X_CFLAGS@
-x11vnc_LDADD=$(LDADD) @X_LIBS@ $(LD_CYGIPC)
+x11vnc_LDADD=$(LDADD) @SSL_LIBS@ @CRYPT_LIBS@ @X_LIBS@ $(LD_CYGIPC)
+else
+x11vnc_LDADD=$(LDADD) @SSL_LIBS@ @CRYPT_LIBS@ $(LD_CYGIPC)
endif
diff --git a/x11vnc/README b/x11vnc/README
index 67c1f54..bb2f99c 100644
--- a/x11vnc/README
+++ b/x11vnc/README
@@ -1,5 +1,5 @@
-x11vnc README file Date: Sat Jul 15 12:13:51 EDT 2006
+x11vnc README file Date: Mon Jul 17 09:29:19 EDT 2006
The following information is taken from these URLs:
@@ -1185,23 +1185,27 @@ make
running on my handheld or PC using the Linux console framebuffer (i.e.
not X11)?
- [210]Q-94: Can I use x11vnc to record a Shock Wave Flash (or other
+ [210]Q-94: Now that non-X11 devices can be exported via VNC using
+ x11vnc, can I build it with no dependencies on X11 header files and
+ libraries?
+
+ [211]Q-95: Can I use x11vnc to record a Shock Wave Flash (or other
format) video of my desktop, e.g. to record a tutorial or demo?
[Misc: Clipboard, File Transfer, Sound, Beeps, Thanks, etc.]
- [211]Q-95: Does the Clipboard/Selection get transferred between the
+ [212]Q-96: Does the Clipboard/Selection get transferred between the
vncviewer and the X display?
- [212]Q-96: Can I transfer files back and forth with x11vnc?
+ [213]Q-97: Can I transfer files back and forth with x11vnc?
- [213]Q-97: How can I hear the sound (audio) from the remote
+ [214]Q-98: How can I hear the sound (audio) from the remote
applications on the desktop I am viewing via x11vnc?
- [214]Q-98: Why don't I hear the "Beeps" in my X session (e.g. when
+ [215]Q-99: Why don't I hear the "Beeps" in my X session (e.g. when
typing tput bel in an xterm)?
- [215]Q-99: Thanks for your program and for your help! Can I make a
+ [216]Q-100: Thanks for your program and for your help! Can I make a
donation?
_________________________________________________________________
@@ -1214,7 +1218,7 @@ make
For the former error, you need to specify the X display to connect to
(it also needs to be on the same machine the x11vnc process is to run
- on). Set your DISPLAY environment variable or use the [216]-display
+ on). Set your DISPLAY environment variable or use the [217]-display
option to specify it. Nearly always the correct value will be ":0" (in
fact, x11vnc will now assume :0 if given no other information).
@@ -1232,7 +1236,7 @@ make
How to Solve: See the xauth(1), Xsecurity(7), and xhost(1) man pages
for much info on X11 permissions. For example, you may need to set
- your XAUTHORITY environment variable or use the [217]-auth option to
+ your XAUTHORITY environment variable or use the [218]-auth option to
point to the correct MIT-MAGIC-COOKIE file (e.g. /home/joe/.Xauthority
or /var/gdm/:0.Xauth or /var/lib/kdm/A:0-crWk72K or /tmp/.gdmzndVlR,
etc.), or simply be sure you run x11vnc as the correct user (i.e. the
@@ -1254,7 +1258,7 @@ make
x11vnc -display :0 -auth /var/gdm/:0.Xauth
(this is for the display manager gdm and requires root permission to
- read the gdm cookie file, see [218]this faq for other display manager
+ read the gdm cookie file, see [219]this faq for other display manager
cookie file names). While running x11vnc as root, remember it comes
with no warranty ;-).
@@ -1264,7 +1268,7 @@ make
(from the same machine). The person could then type "xhost -localhost"
after x11vnc has connected to go back to the default permissions.
Also, for some situations the "-users lurk=" option may be of use
- (please read the documentation on the [219]-users option).
+ (please read the documentation on the [220]-users option).
To test out your X11 permissions from a remote shell, set DISPLAY and
possibly XAUTHORITY (see your shell's man page, bash(1), tcsh(1), on
@@ -1376,7 +1380,7 @@ h
earlier and perhaps non-Solaris):
First use the environment settings (CPPFLAGS, LDFLAGS, etc.) in the
- above [220]Solaris build script to run the configure command. That
+ above [221]Solaris build script to run the configure command. That
should succeed without failure. Then you have to hand edit the
autogenerated rfb/rfbconfig.h file in the source tree, and just before
the last #endif at the bottom of that file insert these workaround
@@ -1402,7 +1406,7 @@ typedef unsigned int in_addr_t;
on other older OS (Solaris, Linux, ...) releases.
Here are some notes for similar steps that need to be done to build on
- [221]SunOS 4.x
+ [222]SunOS 4.x
Please let us know if you had to use the above workaround (and whether
it worked or not). If there is enough demand we will try to push clean
@@ -1412,28 +1416,28 @@ typedef unsigned int in_addr_t;
Q-5: Where can I get a precompiled x11vnc binary for my Operating
System?
- Hopefully the [222]build steps above and [223]FAQ provide enough info
+ Hopefully the [223]build steps above and [224]FAQ provide enough info
for a painless compile for most environments. Please report problems
with the x11vnc configure, make, etc. on your system (if your system
is known to compile other GNU packages successfully).
There are precompiled x11vnc binaries built by other groups that are
available at the following locations:
- Debian: (.deb) [224]http://packages.debian.org/x11vnc
-
- Slackware: (.tgz) [225]http://www.linuxpackages.net/ Redhat/Fedora:
- (.rpm) [226]http://dag.wieers.com/packages/x11vnc/
- [227]http://dries.ulyssis.org/rpm/packages/x11vnc SuSE: (.rpm)
- [228]http://linux01.gwdg.de/~pbleser/ Solaris: (pkg)
- [229]http://www.sunfreeware.com/ FreeBSD: (.tbz)
- [230]http://www.freebsd.org/ [231]http://www.freshports.org/net/x11vnc
- OpenBSD: (.tgz) [232]http://www.openbsd.org/ NetBSD: (src)
- [233]http://pkgsrc.se/x11/x11vnc Nokia 770 (.deb)
- [234]http://mike.saunby.net/770/x11vnc/ Sharp Zaurus
- [235]http://www.pdaxrom.org/ and [236]http://www.focv.com/
+ Debian: (.deb) [225]http://packages.debian.org/x11vnc
+
+ Slackware: (.tgz) [226]http://www.linuxpackages.net/ Redhat/Fedora:
+ (.rpm) [227]http://dag.wieers.com/packages/x11vnc/
+ [228]http://dries.ulyssis.org/rpm/packages/x11vnc SuSE: (.rpm)
+ [229]http://linux01.gwdg.de/~pbleser/ Solaris: (pkg)
+ [230]http://www.sunfreeware.com/ FreeBSD: (.tbz)
+ [231]http://www.freebsd.org/ [232]http://www.freshports.org/net/x11vnc
+ OpenBSD: (.tgz) [233]http://www.openbsd.org/ NetBSD: (src)
+ [234]http://pkgsrc.se/x11/x11vnc Nokia 770 (.deb)
+ [235]http://mike.saunby.net/770/x11vnc/ Sharp Zaurus
+ [236]http://www.pdaxrom.org/ and [237]http://www.focv.com/
If the above binaries don't work and building x11vnc on your OS fails
- (and all else fails!) you can try one of [237]my collection of
+ (and all else fails!) you can try one of [238]my collection of
binaries for various OS's and x11vnc releases.
As a general note, the x11vnc program is simple enough you don't
@@ -1454,10 +1458,10 @@ typedef unsigned int in_addr_t;
To obtain VNC viewers for the viewing side (Windows, Mac OS, or Unix)
try here:
- * [238]http://www.tightvnc.com/download.html
- * [239]http://www.realvnc.com/download-free.html
- * [240]http://sourceforge.net/projects/cotvnc/
- * [241]http://www.ultravnc.com/
+ * [239]http://www.tightvnc.com/download.html
+ * [240]http://www.realvnc.com/download-free.html
+ * [241]http://sourceforge.net/projects/cotvnc/
+ * [242]http://www.ultravnc.com/
Q-7: How can I see all of x11vnc's command line options and
@@ -1465,7 +1469,7 @@ typedef unsigned int in_addr_t;
Run: x11vnc -opts to list just the option names or run: x11vnc
-help for long descriptions about each option. The output is listed
- [242]here as well. Yes, x11vnc does have a lot of options, doesn't
+ [243]here as well. Yes, x11vnc does have a lot of options, doesn't
it...
@@ -1497,10 +1501,10 @@ display :0
program is needed for operation. The gui is not particularly
user-friendly, it just provides a point and click mode to set all the
many x11vnc parameters and obtain help on them. It is also very useful
- for testing. See the [243]-gui option for more info. Examples: "x11vnc
+ for testing. See the [244]-gui option for more info. Examples: "x11vnc
... -gui" and "x11vnc ... -gui other:0" in the latter case the gui is
displayed on other:0, not the X display x11vnc is polling. There is
- also a "[244]-gui tray" system tray mode.
+ also a "[245]-gui tray" system tray mode.
Q-9: How can I get the GUI to run in the System Tray, or at least be a
@@ -1527,11 +1531,11 @@ display :0
Q-10: Can I make x11vnc more quiet and also go into the background
after starting up?
- Use the [245]-q and [246]-bg options, respectively. (also: -quiet is
+ Use the [246]-q and [247]-bg options, respectively. (also: -quiet is
an alias for -q)
Note that under -bg the stderr messages will be lost unless you use
- the "[247]-o logfile" option.
+ the "[248]-o logfile" option.
Q-11: Sometimes when a VNC viewer dies abruptly, x11vnc also dies with
@@ -1552,7 +1556,7 @@ display :0
There are some options. They are enabled by adding something like
-Dxxxx=1 to the CPPFLAGS environment variable before running configure
- (see the [248]build notes for general background).
+ (see the [249]build notes for general background).
/*
* Mar/2006
* Build-time customization via CPPFLAGS.
@@ -1623,21 +1627,21 @@ display :0
dual-screen mode to pass the keystrokes and mouse motions to the X11
display?
- Yes, for best response start up x11vnc with the "[249]-nofb" option
+ Yes, for best response start up x11vnc with the "[250]-nofb" option
(disables framebuffer polling, and does other optimizations) on the
secondary display (X11) machine. Then start up Win2VNC on the primary
display (Windows) referring it to the secondary display.
- This will also work X11 to X11 using [250]x2vnc, however you would
+ This will also work X11 to X11 using [251]x2vnc, however you would
probably just want to avoid VNC and use x2x for that.
For reference, here are some links to Win2VNC-like programs for
multiple monitor setups:
- * [251]Original Win2VNC
- * [252]Enhanced Win2VNC and [253]sourceforge link
- * [254]x2vnc
- * [255]x2x also [256]here
- * [257]zvnc (MorphOS)
+ * [252]Original Win2VNC
+ * [253]Enhanced Win2VNC and [254]sourceforge link
+ * [255]x2vnc
+ * [256]x2x also [257]here
+ * [258]zvnc (MorphOS)
All of them will work with x11vnc (except x2x where it is not needed).
@@ -1657,7 +1661,7 @@ display :0
on your display to be depth 24 TrueColor? Sun machines often have 8+24
overlay/multi-depth visuals, and you can make the default visual depth
24 TrueColor (see fbconfig(1) and Xsun(1)). 2) As of Feb/2004 x11vnc
- has the [258]-visual option to allow you to force the framebuffer
+ has the [259]-visual option to allow you to force the framebuffer
visual to whatever you want (this usually messes up the colors unless
you are very clever). In this case, the option provides a convenient
workaround for the Win2VNC bug:
@@ -1672,7 +1676,7 @@ display :0
PseudoColor (i.e. only 256 distinct colors). The x11vnc colors may
start out OK, but after a while they are incorrect in certain windows.
- Use the [259]-flashcmap option to have x11vnc watch for changes in the
+ Use the [260]-flashcmap option to have x11vnc watch for changes in the
colormap, and propagate those changes back to connected clients. This
can be slow (since the whole screen must be updated over the network
whenever the colormap changes). This flashing colormap behavior often
@@ -1681,13 +1685,13 @@ display :0
example of this. Consider reconfiguring the system to 16 bpp or depth
24 TrueColor if at all possible.
- Also note the option [260]-8to24 (Jan/2006) can often remove the need
+ Also note the option [261]-8to24 (Jan/2006) can often remove the need
for flashing the colormap. Everything is dynamically transformed to
depth 24 at 32 bpp using the colormaps. There may be painting errors
however (see the following FAQ for tips on reducing and correcting
them).
- In some rare cases the [261]-notruecolor option has corrected colors
+ In some rare cases the [262]-notruecolor option has corrected colors
on 8bpp displays. The red, green, and blue masks were non-zero in 8bpp
PseudoColor on an obscure setup, and this option corrected the
problems.
@@ -1698,13 +1702,13 @@ display :0
different color depths: e.g. there are both depth 8 and 24 visuals
available at the same time.
- You may want to review the [262]previous question regarding 8 bpp
+ You may want to review the [263]previous question regarding 8 bpp
PseudoColor.
- On some hardware (Sun/SPARC and SGI), the [263]-overlay option
+ On some hardware (Sun/SPARC and SGI), the [264]-overlay option
discussed a couple paragraphs down may solve this for you (you may
want to skip to it directly). On other hardware the less robust
- [264]-8to24 option may help (also discussed below).
+ [265]-8to24 option may help (also discussed below).
Run xdpyinfo(1) to see what the default visual is and what the depths
of the other visuals are. Does the default visual have a depth of 8
@@ -1740,7 +1744,7 @@ TrueColor defdepth 24
The -overlay mode: Another option is if the system with overlay
visuals is a Sun system running Solaris or SGI running IRIX you can
- use the [265]-overlay x11vnc option (Aug/2004) to have x11vnc use the
+ use the [266]-overlay x11vnc option (Aug/2004) to have x11vnc use the
Solaris XReadScreen(3X11) function to poll the "true view" of the
whole screen at depth 24 TrueColor. XReadDisplay(3X11) is used on
IRIX. This is useful for Legacy applications (older versions of
@@ -1765,7 +1769,7 @@ TrueColor defdepth 24
Xsun, e.g. in your /etc/dt/config/Xservers file).
- The -8to24 mode: The [266]-8to24 x11vnc option (Jan/2006) is a kludge
+ The -8to24 mode: The [267]-8to24 x11vnc option (Jan/2006) is a kludge
to try to dynamically rewrite the pixel values so that the 8bpp part
of the screen is mapped onto depth 24 TrueColor. This is less robust
than the -overlay mode because it is done by x11vnc outside of the X
@@ -1779,11 +1783,11 @@ TrueColor defdepth 24
32bpp view is exported via VNC.
Even on pure 8bpp displays it can be used as an alternative to
- [267]-flashcmap to avoid color flashing completely.
+ [268]-flashcmap to avoid color flashing completely.
This scheme is approximate and can often lead to painting errors. You
can manually correct most painting errors by pressing 3 Alt_L's in a
- row, or by using something like: [268]-fixscreen V=3.0 to
+ row, or by using something like: [269]-fixscreen V=3.0 to
automatically refresh the screen every 3 seconds. Also -fixscreen
8=3.0 has been added to just refresh the non-default visual parts of
the screen.
@@ -1796,23 +1800,23 @@ TrueColor defdepth 24
nogetimage can give a nice speedup if the default depth 24 X server
supports hiding the 8bpp bits in bits 25-32 of the framebuffer data.
On very slow machines -8to24 poll=0.2,cachewin=5.0 gives an useful
- speedup. See the [269]-8to24 help description for information on
+ speedup. See the [270]-8to24 help description for information on
tunable parameters, etc.
Colors still not working correctly? Run xwininfo on the application
with the incorrect colors to verify that the depth of its visual is
different from the default visual depth (gotten from xdpyinfo). One
- possible workaround in this case is to use the [270]-id option to
+ possible workaround in this case is to use the [271]-id option to
point x11vnc at the application window itself. If the application is
complicated (lots of toplevel windows and popup menus) this may not be
acceptable, and may even crash x11vnc (but not the application).
It is theoretically possible to solve this problem in general (see
xwd(1) for example), but it does not seem trivial or sufficiently fast
- for x11vnc to be able to do so in real time. The [271]-8to24 method
+ for x11vnc to be able to do so in real time. The [272]-8to24 method
does this approximately and is somewhat usable. Fortunately the
- [272]-overlay option works for Solaris machines with overlay visuals
+ [273]-overlay option works for Solaris machines with overlay visuals
where most of this problem occurs.
@@ -1823,9 +1827,9 @@ TrueColor defdepth 24
the desired application window. After clicking, it will print out much
information, including the window id (e.g. 0x6000010). Also, the
visual and depth of the window printed out is often useful in
- debugging x11vnc [273]color problems.
+ debugging x11vnc [274]color problems.
- Also, as of Dec/2004 you can use "[274]-id pick" to have x11vnc run
+ Also, as of Dec/2004 you can use "[275]-id pick" to have x11vnc run
xwininfo(1) for you and after you click the window it extracts the
windowid. Besides "pick" there is also "id:root" to allow you to go
back to root window when doing remote-control.
@@ -1843,7 +1847,7 @@ TrueColor defdepth 24
you should be able to see these transient windows.
If things are not working and you still want to do the single window
- polling, try the [275]-sid windowid option ("shifted" windowid).
+ polling, try the [276]-sid windowid option ("shifted" windowid).
Q-19: My X display is depth 24 at 24bpp (instead of the normal depth
@@ -1878,7 +1882,7 @@ TrueColor defdepth 24
handle 24bpp from the server, so you may want to use those. They
evidently request 32 bpp and libvncserver obliges.
- Update: as of Apr/2006 you can use the [276]-24to32 option to have
+ Update: as of Apr/2006 you can use the [277]-24to32 option to have
x11vnc dynamically transform the 24bpp pixel data to 32bpp. This extra
transformation could slow things down further however.
@@ -1897,15 +1901,15 @@ TrueColor defdepth 24
since you will be polling the X display over the network as opposed to
over the local hardware. To do this, run x11vnc on a UNIX machine as
close as possible network-wise (e.g. same switch) to the Xterminal
- machine. Use the [277]-display option to point the display to that of
+ machine. Use the [278]-display option to point the display to that of
the Xterminal (you'll of course need basic X11 permission to do that)
- and finally supply the [278]-noshm option (this enables the polling
+ and finally supply the [279]-noshm option (this enables the polling
over the network).
The response will likely be sluggish (maybe only one "frame" per
second). This mode is not recommended except for "quick checks" of
hard to get to X servers. Use something like "-wait 150" to cut down
- on the polling rate. You may also need [279]-flipbyteorder if the
+ on the polling rate. You may also need [280]-flipbyteorder if the
colors get messed up due to endian byte order differences.
Q-21: How do I get my X permissions (MIT-MAGIC-COOKIE file) correct
@@ -1929,7 +1933,7 @@ TrueColor defdepth 24
copied to the Xterminal. If $HOME/.Xauthority is exported via NFS
(this is insecure of course, but has been going on for decades), then
x11vnc can simply pick it up via NFS (you may need to use the
- [280]-auth option to point to the correct file). Other options include
+ [281]-auth option to point to the correct file). Other options include
copying the auth file using scp, or something like:
central-server> xauth nextract - xterm123:0 | ssh xterm123 xauth nmerge -
@@ -1941,7 +1945,7 @@ TrueColor defdepth 24
details.
If the display name in the cookie file needs to be changed between the
- two hosts, see [281]this note on the "xauth add ..." command.
+ two hosts, see [282]this note on the "xauth add ..." command.
A less secure option is to run something like "xhost +127.0.0.1" while
sitting at the Xterminal box to allow cookie-free local access for
@@ -1955,7 +1959,7 @@ TrueColor defdepth 24
occasional app more efficiently locally on the Xterminal box (e.g.
realplayer).
- Not recommended, but as a last resort, you could have x11vnc [282]poll
+ Not recommended, but as a last resort, you could have x11vnc [283]poll
the Xterminal Display over the network. For this you would run a
"x11vnc -noshm ..." process on the central-server (and hope the
network admin doesn't get angry...)
@@ -1984,13 +1988,13 @@ TrueColor defdepth 24
Q-22: I'm having trouble using x11vnc with my Sun Ray session.
- The [283]Sun Ray technology is a bit like "VNC done in hardware" (the
+ The [284]Sun Ray technology is a bit like "VNC done in hardware" (the
Sun Ray terminal device, DTU, playing the role of the vncviewer).
Completely independent of that, the SunRay user's session is still an
X server that speaks the X11 protocol and so x11vnc simply talks to
the X server part to export the SunRay desktop to any place in the
world (i.e. not only to a Sun Ray terminal device), creating a sort of
- "Soft Ray". Please see [284]this discussion of Sun Ray issues for
+ "Soft Ray". Please see [285]this discussion of Sun Ray issues for
solutions to problems.
[Remote Control]
@@ -1998,18 +2002,18 @@ TrueColor defdepth 24
Q-23: How do I stop x11vnc once it is running in the background?
As of Dec/2004 there is a remote control feature. It can change a huge
- amount of things on the fly: see the [285]-remote and [286]-query
+ amount of things on the fly: see the [286]-remote and [287]-query
options. To shut down the running x11vnc server just type "x11vnc -R
stop". To disconnect all clients do "x11vnc -R disconnect:all", etc.
- If the [287]-forever option has not been supplied, x11vnc will
+ If the [288]-forever option has not been supplied, x11vnc will
automatically exit after the first client disconnects. In general if
you cannot use the remote control, then you will have to kill the
x11vnc process This can be done via: "kill NNNNN" (where NNNNN is the
x11vnc process id number found from ps(1)), or "pkill x11vnc", or
"killall x11vnc" (Linux only).
- If you have not put x11vnc in the background via the [288]-bg option
+ If you have not put x11vnc in the background via the [289]-bg option
or shell & operator, then simply press Ctrl-C in the shell where
x11vnc is running to stop it.
@@ -2019,15 +2023,15 @@ TrueColor defdepth 24
down state in the Xserver. Tapping the stuck key (either via a new
x11vnc or at the physical console) will release it from the stuck
state. If the keyboard seems to be acting strangely it is often fixed
- by tapping Ctrl, Shift, and Alt. Alternatively, the [289]-clear_mods
- option and [290]-clear_keys option can be used to release pressed keys
+ by tapping Ctrl, Shift, and Alt. Alternatively, the [290]-clear_mods
+ option and [291]-clear_keys option can be used to release pressed keys
at startup and exit.
Q-24: Can I change settings in x11vnc without having to restart it?
Can I remote control it?
- Look at the [291]-remote (same as -R) and [292]-query (same as -Q)
+ Look at the [292]-remote (same as -R) and [293]-query (same as -Q)
options added in Dec/2004. They allow nearly everything to be changed
dynamically and settings to be queried. Examples: "x11vnc -R shared",
"x11vnc -R forever", "x11vnc -R scale:3/4", "x11vnc -Q modtweak",
@@ -2038,7 +2042,7 @@ TrueColor defdepth 24
correctly for communication to be possible.
There is also a simple Tcl/Tk gui based on this remote control
- mechanism. See the [293]-gui option for more info. You will need to
+ mechanism. See the [294]-gui option for more info. You will need to
have Tcl/Tk (i.e. /usr/bin/wish) installed for it to work. It can also
run in the system tray: "-gui tray" or as a standalone icon window:
"-gui icon".
@@ -2053,12 +2057,12 @@ TrueColor defdepth 24
vncpasswd(1) program from those packages.
As of Jun/2004 x11vnc supports the -storepasswd "pass" "file"
- [294]option, which is the same functionality of storepasswd. Be sure
+ [295]option, which is the same functionality of storepasswd. Be sure
to quote the "pass" if it contains shell meta characters, spaces, etc.
Example:
x11vnc -storepasswd 'sword*fish' $HOME/myvncpasswd
- You then use the password via the x11vnc option: "[295]-rfbauth
+ You then use the password via the x11vnc option: "[296]-rfbauth
$HOME/myvncpasswd"
As of Jan/2006 if you do not supply any arguments:
@@ -2070,11 +2074,11 @@ TrueColor defdepth 24
~/.mypass", the password you are prompted for will be stored in that
file.
- x11vnc also has the [296]-passwdfile and -passwd/-viewpasswd plain
+ x11vnc also has the [297]-passwdfile and -passwd/-viewpasswd plain
text (i.e. not obscured like the -rfbauth VNC passwords) password
options.
- You can use the [297]-usepw option to automatically use any password
+ You can use the [298]-usepw option to automatically use any password
file you have in ~/.vnc/passwd or ~/.vnc/passwdfile (the latter is
used with the -passwdfile option).
@@ -2106,14 +2110,14 @@ TrueColor defdepth 24
Q-27: Can I have two passwords for VNC viewers, one for full access
and the other for view-only access to the display?
- Yes, as of May/2004 there is the [298]-viewpasswd option to supply the
- view-only password. Note the full-access password option [299]-passwd
+ Yes, as of May/2004 there is the [299]-viewpasswd option to supply the
+ view-only password. Note the full-access password option [300]-passwd
must be supplied at the same time. E.g.: -passwd sword -viewpasswd
fish.
To avoid specifying the passwords on the command line (where they
could be observed via the ps(1) command by any user) you can use the
- [300]-passwdfile option to specify a file containing plain text
+ [301]-passwdfile option to specify a file containing plain text
passwords. Presumably this file is readable only by you, and ideally
it is located on the machine x11vnc is run on (to avoid being snooped
on over the network). The first line of this file is the full-access
@@ -2121,7 +2125,7 @@ TrueColor defdepth 24
it is taken as the view-only password. (use "__EMPTY__" to supply an
empty one).
- View-only passwords currently do not work for the [301]-rfbauth
+ View-only passwords currently do not work for the [302]-rfbauth
password option (standard VNC password storing mechanism). FWIW, note
that although the output (usually placed in $HOME/.vnc/passwd) by the
vncpasswd or storepasswd programs (or from x11vnc -storepasswd) looks
@@ -2134,7 +2138,7 @@ TrueColor defdepth 24
Q-28: Can I have as many full-access and view-only passwords as I
like?
- Yes, as of Jan/2006 in the libvncserver CVS the [302]-passwdfile
+ Yes, as of Jan/2006 in the libvncserver CVS the [303]-passwdfile
option has been extended to handle as many passwords as you like. You
put the view-only passwords after a line __BEGIN_VIEWONLY__.
@@ -2144,7 +2148,7 @@ TrueColor defdepth 24
Q-29: Does x11vnc support Unix usernames and passwords? Can I further
limit the set of Unix usernames who can connect to the VNC desktop?
- Update: as of Feb/2006 x11vnc has the [303]-unixpw option that does
+ Update: as of Feb/2006 x11vnc has the [304]-unixpw option that does
this outside of the VNC protocol and libvncserver. The standard su(1)
program is used to validate the user's password. A familiar "login:"
and "Password:" dialog is presented to the user on a black screen
@@ -2154,7 +2158,7 @@ TrueColor defdepth 24
A list of allowed Unix usernames may also be supplied along with
per-user settings.
- There is also the [304]-unixpw_nis option for non-shadow-password
+ There is also the [305]-unixpw_nis option for non-shadow-password
(typically NIS environments, hence the name) systems where the
traditional getpwnam() and crypt() functions are used instead of
su(1). The encrypted user passwords must be accessible to the user
@@ -2163,11 +2167,11 @@ TrueColor defdepth 24
shadow(5).
Two settings are enforced in the -unixpw and -unixpw_nis modes to
- provide extra security: the 1) [305]-localhost and 2) [306]-stunnel or
- [307]-ssl options. Without these one might send the Unix username and
+ provide extra security: the 1) [306]-localhost and 2) [307]-stunnel or
+ [308]-ssl options. Without these one might send the Unix username and
password data in clear text over the network which is a very bad idea.
They can be relaxed if you want to provide encryption other than
- stunnel or [308]-ssl (the constraint is automatically relaxed if
+ stunnel or [309]-ssl (the constraint is automatically relaxed if
SSH_CONNECTION is set and indicates you have ssh-ed in, however the
-localhost requirement is still enforced).
@@ -2186,13 +2190,13 @@ TrueColor defdepth 24
approximate at best.
One approximate method involves starting x11vnc with the
- [309]-localhost option. This basically requires the viewer user to log
+ [310]-localhost option. This basically requires the viewer user to log
into the workstation where x11vnc is running via their Unix username
and password, and then somehow set up a port redirection of his
vncviewer connection to make it appear to emanate from the local
machine. As discussed above, ssh is useful for this: "ssh -L
5900:localhost:5900 user@hostname ..." See the ssh wrapper scripts
- mentioned [310]elsewhere on this page. [311]stunnel does this as well.
+ mentioned [311]elsewhere on this page. [312]stunnel does this as well.
Of course a malicious user could allow other users to get in through
his channel, but that is a problem with every method. Another thing to
@@ -2203,7 +2207,7 @@ TrueColor defdepth 24
traditional way would be to further require a VNC password to supplied
(-rfbauth, -passwd, etc) and only tell the people allowed in what the
VNC password is. A scheme that avoids a second password involves using
- the [312]-accept option that runs a program to examine the connection
+ the [313]-accept option that runs a program to examine the connection
information to determine which user is connecting from the local
machine. That may be difficult to do, but, for example, the program
could use the ident service on the local machine (normally ident
@@ -2242,15 +2246,15 @@ exit 1 # reject it
These defaults are simple safety measures to avoid someone unknowingly
leaving his X11 desktop exposed (to the internet, say) for long
- periods of time. Use the [313]-forever option (aka -many) to have
+ periods of time. Use the [314]-forever option (aka -many) to have
x11vnc wait for more connections after the first client disconnects.
- Use the [314]-shared option to have x11vnc allow multiple clients to
+ Use the [315]-shared option to have x11vnc allow multiple clients to
connect simultaneously.
- Recommended additional safety measures include using ssh ([315]see
- above), stunnel, [316]-ssl, or a VPN to authenticate and encrypt the
+ Recommended additional safety measures include using ssh ([316]see
+ above), stunnel, [317]-ssl, or a VPN to authenticate and encrypt the
viewer connections or to at least use the -rfbauth passwd-file
- [317]option to use VNC password protection (or [318]-passwdfile) It is
+ [318]option to use VNC password protection (or [319]-passwdfile) It is
up to YOU to apply these security measures, they will not be done for
you automatically.
@@ -2258,7 +2262,7 @@ exit 1 # reject it
Q-31: Can I limit which machines incoming VNC clients can connect
from?
- Yes, look at the [319]-allow and [320]-localhost options to limit
+ Yes, look at the [320]-allow and [321]-localhost options to limit
connections by hostname or IP address. E.g.
x11vnc -allow 192.168.0.1,192.168.0.2
@@ -2270,7 +2274,7 @@ exit 1 # reject it
Note that -localhost achieves the same thing as "-allow 127.0.0.1"
For more control, build libvncserver with libwrap support
- [321](tcp_wrappers) and then use /etc/hosts.allow See hosts_access(5)
+ [322](tcp_wrappers) and then use /etc/hosts.allow See hosts_access(5)
for complete details.
@@ -2290,7 +2294,7 @@ exit 1 # reject it
is "vnc", e.g.:
vnc: 192.168.100.3 .example.com
- Note that if you run x11vnc out of [322]inetd you do not need to build
+ Note that if you run x11vnc out of [323]inetd you do not need to build
x11vnc with libwrap support because the /usr/sbin/tcpd reference in
/etc/inetd.conf handles the tcp_wrappers stuff.
@@ -2299,15 +2303,15 @@ exit 1 # reject it
internal LAN) rather than having it listen on all network interfaces
and relying on -allow to filter unwanted connections out?
- As of Mar/2005 there is the "[323]-listen ipaddr" option that enables
+ As of Mar/2005 there is the "[324]-listen ipaddr" option that enables
this. For ipaddr either supply the desired network interface's IP
address (or use a hostname that resolves to it) or use the string
"localhost". For additional filtering simultaneously use the
- "[324]-allow host1,..." option to allow only specific hosts in.
+ "[325]-allow host1,..." option to allow only specific hosts in.
This option is useful if you want to insure that no one can even begin
a dialog with x11vnc from untrusted network interfaces (e.g. ppp0).
- The option [325]-localhost now implies "-listen localhost" since that
+ The option [326]-localhost now implies "-listen localhost" since that
is what most people expect it to do.
@@ -2315,7 +2319,7 @@ exit 1 # reject it
interface, how I can occasionally allow in a non-localhost via the -R
allowonce remote control command?
- To do this specify "[326]-allow localhost". Unlike [327]-localhost
+ To do this specify "[327]-allow localhost". Unlike [328]-localhost
this will leave x11vnc listening on all interfaces (but of course only
allowing in local connections, e.g. ssh redirs). Then you can later
run "x11vnc -R allowonce:somehost" or use to gui to permit a one-shot
@@ -2326,7 +2330,7 @@ exit 1 # reject it
some users just be able to move the mouse, but not click or type
anything?
- As of Feb/2005, the [328]-input option allows you to do this. "K",
+ As of Feb/2005, the [329]-input option allows you to do this. "K",
"M", "B", and "C" stand for Keystroke, Mouse-motion, Button-clicks,
and Clipboard, respectively. The setting: "-input M" makes attached
viewers only able to move the mouse. "-input KMBC,M" lets normal
@@ -2341,7 +2345,7 @@ exit 1 # reject it
some clients view-only? How about running an arbitrary program to make
the decisions?
- Yes, look at the "[329]-accept command" option, it allows you to
+ Yes, look at the "[330]-accept command" option, it allows you to
specify an external command that is run for each new client. (use
quotes around the command if it contains spaces, etc.). If the
external command returns 0 the client is accepted, otherwise the
@@ -2360,7 +2364,7 @@ exit 1 # reject it
own simple popup window. To accept the client press "y" or click mouse
on the "Yes" button. To reject the client press "n" or click mouse on
the "No" button. To accept the client View-only, press "v" or click
- mouse on the "View" button. If the [330]-viewonly option has been
+ mouse on the "View" button. If the [331]-viewonly option has been
supplied, the "View" action will not be present: the whole display is
view only in that case.
@@ -2376,7 +2380,7 @@ exit 1 # reject it
program to prompt the user whether the client should be accepted or
not. This requires that you have xmessage installed and available via
PATH. In case it is not already on your system, the xmessage program
- is available at [331]ftp://ftp.x.org/
+ is available at [332]ftp://ftp.x.org/
To include view-only decisions for the external commands, prefix the
command something like this: "yes:0,no:*,view:3 mycommand ..." This
@@ -2415,7 +2419,7 @@ elif [ $rc = 4 ]; then
fi
exit 1
- Stefan Radman has written a nice dtksh script [332]dtVncPopup for use
+ Stefan Radman has written a nice dtksh script [333]dtVncPopup for use
in CDE environments to do the same sort of thing. Information on how
to use it is found at the top of the file. He encourages you to
provide feedback to him to help improve the script.
@@ -2424,13 +2428,13 @@ exit 1
popup is being run, so attached clients will not receive screen
updates, etc during this period.
- To run a command when a client disconnects, use the "[333]-gone
+ To run a command when a client disconnects, use the "[334]-gone
command" option. This is for the user's convenience only: the return
code of the command is not interpreted by x11vnc. The same environment
variables are set as in "-accept command" (except that RFB_MODE will
be "gone").
- As of Jan/2006 the "[334]-afteraccept command" option will run the
+ As of Jan/2006 the "[335]-afteraccept command" option will run the
command only after the VNC client has been accepted and authenticated.
Like -gone the return code is not interprted. RFB_MODE will be
"afteraccept").
@@ -2440,7 +2444,7 @@ exit 1
display manager like gdm(1). Can I have x11vnc later switch to a
different user?
- As of Feb/2005 x11vnc has the [335]-users option that allows things
+ As of Feb/2005 x11vnc has the [336]-users option that allows things
like this. Please read the documentation on it (also in the x11vnc
-help output) carefully for features and caveats. It's use can often
decrease security unless care is taken.
@@ -2465,7 +2469,7 @@ exit 1
In any event, as of Jun/2004 there is an experimental utility to make
it more difficult for nosey people to see your x11vnc activities. The
- source for it is [336]blockdpy.c The idea behind it is simple (but
+ source for it is [337]blockdpy.c The idea behind it is simple (but
obviously not bulletproof): when a VNC client attaches to x11vnc put
the display monitor in the DPMS "off" state, if the DPMS state ever
changes immediately start up the screen-lock program. The x11vnc user
@@ -2481,8 +2485,8 @@ exit 1
bulletproof. A really robust solution would likely require X server
and perhaps even video hardware support.
- The blockdpy utility is launched by the [337]-accept option and told
- to exit via the [338]-gone option (the vnc client user should
+ The blockdpy utility is launched by the [338]-accept option and told
+ to exit via the [339]-gone option (the vnc client user should
obviously re-lock the screen before disconnecting!). Instructions can
be found in the source code for the utility at the above link.
@@ -2490,7 +2494,7 @@ exit 1
Q-39: Can I have x11vnc automatically lock the screen when I
disconnect the VNC viewer?
- Yes, a user mentions he uses the [339]-gone option under CDE to run a
+ Yes, a user mentions he uses the [340]-gone option under CDE to run a
screen lock program:
x11vnc -display :0 -forever -gone 'dtaction LockDisplay'
@@ -2499,7 +2503,7 @@ exit 1
x11vnc -display :0 -forever -gone 'kdesktop_lock'
x11vnc -display :0 -forever -gone 'xlock &'
- Here is a scheme using the [340]-afteraccept option (in version 0.7.3)
+ Here is a scheme using the [341]-afteraccept option (in version 0.7.3)
to unlock the screen after the first valid VNC login and to lock the
screen after the last valid VNC login disconnects:
x11vnc -display :0 -forever -shared -afteraccept ./myxlocker -gone ./myxlocke
@@ -2530,7 +2534,7 @@ fi
Q-40: How can I tunnel my connection to x11vnc via an encrypted SSH
channel between two Unix machines?
- See the description earlier on this page on [341]how to tunnel VNC via
+ See the description earlier on this page on [342]how to tunnel VNC via
SSH from Unix to Unix. A number of ways are described along with some
issues you may encounter.
@@ -2541,7 +2545,7 @@ fi
Q-41: How can I tunnel my connection to x11vnc via an encrypted SSH
channel from Windows using an SSH client like Putty?
- [342]Above we described how to tunnel VNC via SSH from Unix to Unix,
+ [343]Above we described how to tunnel VNC via SSH from Unix to Unix,
you may want to review it. To do this from Windows using Putty it
would go something like this:
* In the Putty dialog window under 'Session' enter the hostname or
@@ -2564,8 +2568,8 @@ fi
process in a BAT file including launching the VNC viewer by using the
plink Putty utility. Send us the script if you get that working.
- For extra protection feel free to run x11vnc with the [343]-localhost
- and [344]-rfbauth/[345]-passwdfile options.
+ For extra protection feel free to run x11vnc with the [344]-localhost
+ and [345]-rfbauth/[346]-passwdfile options.
If the machine you SSH into via Putty is not the same machine with the
X display you wish to view (e.g. your company provides incoming SSH
@@ -2573,11 +2577,11 @@ fi
dialog setting to: 'Destination: otherhost:5900', Once logged in,
you'll need to do a second login (ssh or rsh) to the workstation
machine 'otherhost' and then start up x11vnc on it. This can also be
- automated by [346]chaining ssh's.
+ automated by [347]chaining ssh's.
- As discussed [347]above another option is to first start the VNC
+ As discussed [348]above another option is to first start the VNC
viewer in "listen" mode, and then launch x11vnc with the
- "[348]-connect localhost" option to establish the reverse connection.
+ "[349]-connect localhost" option to establish the reverse connection.
In this case a Remote port redirection (not Local) is needed for port
5500 instead of 5900 (i.e. 'Source port: 5500' and
'Destination: localhost:5500' for a Remote connection).
@@ -2587,7 +2591,7 @@ fi
channel using an external tool like stunnel?
It is possible to use a "lighter weight" encryption setup than SSH or
- IPSEC. SSL tunnels such as [349]stunnel provide an encrypted channel
+ IPSEC. SSL tunnels such as [350]stunnel provide an encrypted channel
without the need for Unix users, passwords, and key passphrases
required for ssh (and at the other extreme SSL can also provide a
complete signed certificate chain of trust). OTOH, since SSH is
@@ -2595,12 +2599,12 @@ fi
ssh is frequently the path of least resistance (it also nicely manages
public keys for you).
- Update: As of Feb/2006 x11vnc has the options [350]-ssl,
- [351]-stunnel, and [352]-sslverify to provide integrated SSL schemes.
- They are discussed [353]in the Next FAQ (you may want to skip to it
+ Update: As of Feb/2006 x11vnc has the options [351]-ssl,
+ [352]-stunnel, and [353]-sslverify to provide integrated SSL schemes.
+ They are discussed [354]in the Next FAQ (you may want to skip to it
now).
- Here are some basic examples using [354]stunnel but the general idea
+ Here are some basic examples using [355]stunnel but the general idea
for any SSL tunnel utility is the same:
* Start up x11vnc and constrain it to listen on localhost.
* Then start up the SSL tunnel running on the same machine to
@@ -2624,7 +2628,7 @@ fi
The above two commands are run on host "far-away.east". The
stunnel.pem is the self-signed PEM file certificate created when
- stunnel is built. One can also create certificates [355]signed by
+ stunnel is built. One can also create certificates [356]signed by
Certificate Authorities or self-signed if desired using the x11vnc
utilities described there.
@@ -2638,7 +2642,7 @@ fi
Then point the viewer to the local tunnel on port 5902:
vncviewer -encodings "copyrect tight zrle hextile" localhost:2
- That's it. (note that the [356]ssl_vncviewer script can automate
+ That's it. (note that the [357]ssl_vncviewer script can automate
this.)
Be sure to use a VNC password because unlike ssh by default the
@@ -2646,13 +2650,13 @@ fi
some extra configuration one could also set up certificates to provide
authentication of either or both sides as well (and hence avoid
man-in-the-middle attacks). See the stunnel and openssl documentation
- and also [357]the key management section for details.
+ and also [358]the key management section for details.
stunnel has also been ported to Windows, and there are likely others
to choose from for that OS. Much info for using it on Windows can be
- found at the stunnel site and in this [358]article The article also
+ found at the stunnel site and in this [359]article The article also
shows the detailed steps to set up all the authentication
- certificates. (for both server and clients, see also the [359]x11vnc
+ certificates. (for both server and clients, see also the [360]x11vnc
utilities that do this). The default Windows client setup (no certs)
is simpler and only 4 files are needed in a folder: stunnel.exe,
stunnel.conf, libssl32.dll, libeay32.dll. We used an stunnel.conf
@@ -2673,7 +2677,7 @@ connect = far-away.east:5901
As an aside, if you don't like the little "gap" of unencrypted TCP
traffic (and a localhost listening socket) on the local machine
between stunnel and x11vnc it can actually be closed by having stunnel
- start up x11vnc in [360]-inetd mode:
+ start up x11vnc in [361]-inetd mode:
stunnel -p /path/to/stunnel.pem -P none -d 5900 -l ./x11vnc_sh
Where the script x11vnc_sh starts up x11vnc:
@@ -2716,16 +2720,16 @@ connect = 5900
they probably wouldn't work since the SSL negotiation is likely
embedded in the VNC protocol unlike our case where it is external.
- Note: as of Mar/2006 libvncserver/x11vnc provides a [361]SSL-enabled
- Java applet that can be served up via the [362]-httpdir or [363]-http
- options when [364]-ssl is enabled. It will also be served via HTTPS
+ Note: as of Mar/2006 libvncserver/x11vnc provides a [362]SSL-enabled
+ Java applet that can be served up via the [363]-httpdir or [364]-http
+ options when [365]-ssl is enabled. It will also be served via HTTPS
via either the VNC port (e.g. https://host:5900/) or a 2nd port via
- the [365]-https option.
+ the [366]-https option.
In general current SSL VNC solutions are not particularly "seemless".
But it can be done, and with a wrapper script on the viewer side and
- the [366]-stunnel or [367]-ssl option on the server side it works well
- and is convenient. Here is a simple script [368]ssl_vncviewer that
+ the [367]-stunnel or [368]-ssl option on the server side it works well
+ and is convenient. Here is a simple script [369]ssl_vncviewer that
automates running stunnel on the VNC viewer side on Unix a little more
carefully than the commands printed above. (One could probably do a
similar thing with a .BAT file on Windows in the stunnel folder.)
@@ -2733,7 +2737,7 @@ connect = 5900
Q-43: Does x11vnc have built-in SSL tunneling?
- You can read about non-built-in methods [369]in the Previous FAQ
+ You can read about non-built-in methods [370]in the Previous FAQ
SSL tunnels provide an encrypted channel without the need for Unix
users, passwords, and key passphrases required for ssh (and at the
@@ -2744,14 +2748,14 @@ connect = 5900
Built-in SSL x11vnc options:
- As of Feb/2006 the x11vnc [370]-ssl and [371]-stunnel options automate
- the SSL tunnel creation on the x11vnc server side. An [372]SSL-enabled
+ As of Feb/2006 the x11vnc [371]-ssl and [372]-stunnel options automate
+ the SSL tunnel creation on the x11vnc server side. An [373]SSL-enabled
Java Viewer applet is also provided that can be served via HTTP or
HTTPS to automate SSL on the client side.
- The [373]-ssl mode uses the [374]www.openssl.org library if available
- at build time. The [375]-stunnel mode requires the
- [376]www.stunnel.org command stunnel(8) to be installed on the system.
+ The [374]-ssl mode uses the [375]www.openssl.org library if available
+ at build time. The [376]-stunnel mode requires the
+ [377]www.stunnel.org command stunnel(8) to be installed on the system.
Both modes require an SSL certificate and key (i.e. .pem file). These
are usually created via the openssl(1) (in fact in for options "-ssl"
@@ -2803,12 +2807,12 @@ connect = 5900
is to encrypt the key with a passphrase (note however this requires
supplying the passphrase each time x11vnc is started up).
- See the discussion on [377]x11vnc Key Management for some utilities
+ See the discussion on [378]x11vnc Key Management for some utilities
provided for creating and managing certificates and keys and even for
creating your own Certificate Authority (CA) for signing VNC server
and client certificates. This may be done by importing the certificate
into Web Browser or Java plugin keystores, or pointing stunnel to it.
- The wrapper script [378]ssl_vncviewer provides an example on unix
+ The wrapper script [379]ssl_vncviewer provides an example on unix
(-verify option).
Here are some notes on the simpler default (non-CA) operation. To have
@@ -2824,7 +2828,7 @@ connect = 5900
to machines where the VNC Viewer will be run to enable authenticating
the x11vnc SSL VNC server to the clients. When authentication takes
place this way (or via the more sophisticated CA signing described
- [379]here), then Man-In-The-Middle-Attacks are prevented. Otherwise,
+ [380]here), then Man-In-The-Middle-Attacks are prevented. Otherwise,
the SSL encryption only provides protection against passive network
traffic "sniffing". Nowadays, most people seem mostly concerned about
only the latter (and the default x11vnc SSL modes protect against it.)
@@ -2849,7 +2853,7 @@ connect = 5900
including using https to download it into the browser and connect to
x11vnc.
- See the [380]next FAQ for SSL enabled VNC Viewers.
+ See the [381]next FAQ for SSL enabled VNC Viewers.
Q-44: How do I use VNC Viewers with built-in SSL tunneling?
@@ -2860,9 +2864,9 @@ connect = 5900
The SSL enabled Java VNC Viewer (VncViewer.jar) in the x11vnc package
supports only SSL based connections by default (set the applet
parameter disableSSL=yes in index.vnc to override). As mentioned above
- the [381]-httpdir can be used to specify the path to .../classes/ssl.
+ the [382]-httpdir can be used to specify the path to .../classes/ssl.
A typical location might be /usr/local/share/x11vnc/classes/ssl. Or
- [382]-http can be used to try to have it find the directory
+ [383]-http can be used to try to have it find the directory
automatically.
The Java viewer uses SSL to communicate securely with x11vnc. Note
@@ -2887,7 +2891,7 @@ connect = 5900
example) can occasionally be slow or unreliable (it has to read some
input and try to guess if the connection is VNC or HTTP). If it is
unreliable and you still want to serve the Java applet via https, use
- the [383]-https option to get an additional port dedicated to https
+ the [384]-https option to get an additional port dedicated to https
(its URL will also be printed in the output).
Another possibility is to add the GET applet parameter:
@@ -2900,7 +2904,7 @@ connect = 5900
You may also use "?GET=somestring" to have /somestring prepended to
/request.https.vnc.connection". Perhaps you are using a web server
- [384]proxy scheme to enter a firewall or otherwise have rules applied
+ [385]proxy scheme to enter a firewall or otherwise have rules applied
to the URL. If you need to have any slashes "/" in "somestring" use
"_2F_" (a deficiency in libvncserver prevents using the more natural
"%2F".)
@@ -2924,7 +2928,7 @@ connect = 5900
connection is VNC instead of the HTTPS it actually is (but since you
have paused too long at the dialog the GET request comes too late).
Often hitting Reload and going through the dialogs more quickly will
- let you connect. Use the [385]-https option if you want a dedicated
+ let you connect. Use the [386]-https option if you want a dedicated
port for HTTPS connections instead of sharing the VNC port.
@@ -2933,10 +2937,10 @@ connect = 5900
If you want to use a native VNC Viewer with the SSL enabled x11vnc you
will need to run an external SSL tunnel on the Viewer side. There do
not seem to be any native SSL VNC Viewers outside of the x11vnc
- package. The basic ideas of doing this were discussed [386]for
+ package. The basic ideas of doing this were discussed [387]for
external tunnel utilities here.
- The [387]ssl_vncviewer script provided with x11vnc can set up the
+ The [388]ssl_vncviewer script provided with x11vnc can set up the
stunnel tunnel automatically on unix as long as the stunnel command is
installed on the Viewer machine and available in PATH (and vncviewer
too of course). Note that on Debian based system you will need to
@@ -2968,10 +2972,10 @@ connect = 5900
The fifth one shows that Web proxies can be used if that is the only
way to get out of the firewall. If the "double proxy" situation arises
- separate the two by commas. See [388]this page for more information on
+ separate the two by commas. See [389]this page for more information on
how Web proxies come into play.
- If one uses a Certificate Authority (CA) scheme described [389]here,
+ If one uses a Certificate Authority (CA) scheme described [390]here,
the wrapper script would use the CA cert instead of the server cert:
3') ssl_vncviewer -verify ./cacert.crt far-away.east:0
@@ -3007,7 +3011,7 @@ connect = 5900
(instead of the unsigned one in https://yourmachine.com:5900/ that
gives the default index.vnc)
- Note that the [390]ssl_vncviewer stunnel wrapper script can use Web
+ Note that the [391]ssl_vncviewer stunnel wrapper script can use Web
proxies as well.
Proxies that limit CONNECT to ports 443 and 563:
@@ -3036,7 +3040,7 @@ connect = 5900
https://yourmachine.com/proxy.vnc?PORT=443
this is cleaner because it avoids editing the file, but requires more
- parameters in the URL. To use the GET [391]trick discussed above, do:
+ parameters in the URL. To use the GET [392]trick discussed above, do:
https://yourmachine.com/proxy.vnc?PORT=443&GET=1
@@ -3044,7 +3048,7 @@ connect = 5900
SSL from the Internet with a Web browser to x11vnc running on their
workstations behind a firewall?
Yes. You will need to configure apache to forward these connections.
- It is discussed [392]here. This provides a clean alternative to the
+ It is discussed [393]here. This provides a clean alternative to the
traditional method where the user uses SSH to log in through the
gateway to create the encrypted port redirection to x11vnc running on
her desktop.
@@ -3052,7 +3056,7 @@ connect = 5900
Q-47: Can I create and use my own SSL Certificate Authority (CA) with
x11vnc?
- Yes, see [393]this page for how to do this and the utility commands
+ Yes, see [394]this page for how to do this and the utility commands
x11vnc provides to create and manage many types of certificates and
private keys.
@@ -3071,13 +3075,13 @@ connect = 5900
need to have sufficient permissions to connect to the X display.
Here are some ideas:
- * Use the description under "Continuously" in the [394]FAQ on x11vnc
+ * Use the description under "Continuously" in the [395]FAQ on x11vnc
and Display Managers
- * Use the description in the [395]FAQ on x11vnc and inetd(8)
- * Use the description in the [396]FAQ on Unix user logins and
+ * Use the description in the [396]FAQ on x11vnc and inetd(8)
+ * Use the description in the [397]FAQ on Unix user logins and
inetd(8)
* Start x11vnc from your $HOME/.xsession (or $HOME/.xinitrc)
- * Although less reliable, see the [397]x11vnc_loop rc.local hack
+ * Although less reliable, see the [398]x11vnc_loop rc.local hack
below.
The display manager scheme will not be specific to which user has the
@@ -3108,7 +3112,7 @@ x11vnc -logfile $HOME/.x11vnc.log -rfbauth $HOME/.vnc/passwd -forever -bg
while running x11vnc as root, e.g. for the gnome display manager, gdm:
x11vnc -auth /var/gdm/:0.Xauth -display :0
- (the [398]-auth option sets the XAUTHORITY variable for you).
+ (the [399]-auth option sets the XAUTHORITY variable for you).
There will be a similar thing for xdm using however a different auth
directory path (perhaps something like
@@ -3133,7 +3137,7 @@ x11vnc -logfile $HOME/.x11vnc.log -rfbauth $HOME/.vnc/passwd -forever -bg
auth file should be in /var/dt), you'll also need to add something
like Dtlogin*grabServer:False to the Xconfig file
(/etc/dt/config/Xconfig or /usr/dt/config/Xconfig on Solaris, see
- [399]the example at the end of this FAQ). Then restart dtlogin, e.g.:
+ [400]the example at the end of this FAQ). Then restart dtlogin, e.g.:
/etc/init.d/dtlogin stop; /etc/init.d/dtlogin start or reboot.
Continuously. Have x11vnc reattach each time the X server is
@@ -3196,7 +3200,7 @@ x11vnc -logfile $HOME/.x11vnc.log -rfbauth $HOME/.vnc/passwd -forever -bg
Then restart: /usr/sbin/gdm-restart (or reboot). The
KillInitClients=false setting is important: without it x11vnc will be
- killed immediately after the user logs in. Here are [400]full details
+ killed immediately after the user logs in. Here are [401]full details
on how to configure gdm
_________________________________________________________________
@@ -3238,14 +3242,14 @@ x11vnc -logfile $HOME/.x11vnc.log -rfbauth $HOME/.vnc/passwd -forever -bg
If you do not want to deal with any display manager startup scripts,
here is a kludgey script that can be run manually or out of a boot
- file like rc.local: [401]x11vnc_loop It will need some local
+ file like rc.local: [402]x11vnc_loop It will need some local
customization before running. Because the XAUTHORITY auth file must be
guessed by this script, use of the display manager script method
- described above is greatly preferred. There is also the [402]-loop
+ described above is greatly preferred. There is also the [403]-loop
option that does something similar.
If the machine is a traditional Xterminal you may want to read
- [403]this FAQ.
+ [404]this FAQ.
Q-50: Can I run x11vnc out of inetd(8)? How about xinetd(8)?
@@ -3255,7 +3259,7 @@ x11vnc -logfile $HOME/.x11vnc.log -rfbauth $HOME/.vnc/passwd -forever -bg
5900 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/x11vnc_sh
- where the shell script /usr/local/bin/x11vnc_sh uses the [404]-inetd
+ where the shell script /usr/local/bin/x11vnc_sh uses the [405]-inetd
option and looks something like (you'll need to customize to your
settings).
#!/bin/sh
@@ -3268,7 +3272,7 @@ x11vnc -logfile $HOME/.x11vnc.log -rfbauth $HOME/.vnc/passwd -forever -bg
and that confuses it greatly, causing it to abort). If you do not use
a wrapper script as above but rather call x11vnc directly in
/etc/inetd.conf and do not redirect stderr to a file, then you must
- specify the -q (aka [405]-quiet) option: "/usr/local/bin/x11vnc -q
+ specify the -q (aka [406]-quiet) option: "/usr/local/bin/x11vnc -q
-inetd ...". When you supply both -q and -inet and no "-o logfile"
then stderr will automatically be closed (to prevent, e.g. library
stderr messages leaking out to the viewer). The recommended practice
@@ -3276,12 +3280,12 @@ x11vnc -logfile $HOME/.x11vnc.log -rfbauth $HOME/.vnc/passwd -forever -bg
script with "2>logfile" redirection because the errors and warnings
printed out are very useful in troubleshooting problems.
- Note also the need to set XAUTHORITY via [406]-auth to point to the
+ Note also the need to set XAUTHORITY via [407]-auth to point to the
MIT-COOKIE auth file to get permission to connect to the X display
(setting and exporting the XAUTHORITY variable accomplishes the same
thing). See the x11vnc_loop file in the previous question for more
ideas on what that auth file may be, etc. The scheme described in the
- [407]FAQ on Unix user logins and inetd(8) works around the XAUTHORITY
+ [408]FAQ on Unix user logins and inetd(8) works around the XAUTHORITY
issue nicely.
Note: On Solaris you cannot have the bare number 5900 in
@@ -3346,13 +3350,13 @@ service x11vncservice
Q-51: Can I have x11vnc allow a user to log in with her UNIX password
and then have it find her X display on that machine and connect to it?
- The easiest way to do this is via [408]inetd(8) using the [409]-unixpw
- and [410]-display WAIT options. The reason inetd(8) makes this easier
+ The easiest way to do this is via [409]inetd(8) using the [410]-unixpw
+ and [411]-display WAIT options. The reason inetd(8) makes this easier
is that it starts a new x11vnc process for each new user connection.
Otherwise a wrapper would have to listen for connections and spawn new
- x11vnc's (see [411]this example).
+ x11vnc's (see [412]this example).
- The [412]-display WAIT option makes x11vnc wait until a VNC viewer is
+ The [413]-display WAIT option makes x11vnc wait until a VNC viewer is
connected before attaching to the X display. Additionally it can be
used to run an external command that returns the DISPLAY and
XAUTHORITY data. So one could supply "-display
@@ -3395,7 +3399,7 @@ exit 0
as the first line and any remaining lines are either XAUTHORITY=file
or raw xauth data (the above example does the latter).
- The [413]-unixpw option allows [414]UNIX password logins. Here are a
+ The [414]-unixpw option allows [415]UNIX password logins. Here are a
couple /etc/inetd.conf examples for this:
5900 stream tcp nowait nobody /usr/sbin/tcpd /usr/local/bin/x11vnc -inetd
-unixpw \
@@ -3415,9 +3419,9 @@ xpw=
directory will need to be set up to allow "nobody" to use them.
In the second one x11vnc is run as root and switches to the user that
- logs in due to the "[415]-users unixpw=" option.
+ logs in due to the "[416]-users unixpw=" option.
- Note that [416]SSL is required for this mode because otherwise the
+ Note that [417]SSL is required for this mode because otherwise the
unix password would be passed in clear text over the network. In
general -unixpw is not required for this sort of scheme, but it is
convenient because it determines exactly who the user is whose display
@@ -3428,7 +3432,7 @@ xpw=
Q-52: Can I have x11vnc restart itself after it terminates?
One could do this in a shell script, but now there is an option
- [417]-loop that makes it easier. Of course when x11vnc restarts it
+ [418]-loop that makes it easier. Of course when x11vnc restarts it
needs to have permissions to connect to the (potentially new) X
display. This mode could be useful if the X server restarts often. Use
e.g. "-loop5000" to sleep 5000 ms between restarts. Also "-loop2000,5"
@@ -3439,7 +3443,7 @@ xpw=
web browser?
To have x11vnc serve up a Java VNC viewer applet to any web browsers
- that connect to it, run x11vnc with this [418]option:
+ that connect to it, run x11vnc with this [419]option:
-httpdir /path/to/the/java/classes/dir
(this directory will contain the files index.vnc and, for example,
@@ -3458,7 +3462,7 @@ xpw=
then you can connect to that URL with any Java enabled browser. Feel
free to customize the default index.vnc file in the classes directory.
- As of May/2005 the [419]-http option will try to guess where the Java
+ As of May/2005 the [420]-http option will try to guess where the Java
classes jar file is by looking in expected locations and ones relative
to the x11vnc binary.
@@ -3474,7 +3478,7 @@ xpw=
As of Mar/2004 x11vnc supports reverse connections. On Unix one starts
the VNC viewer in listen mode: vncviewer -listen (see your
documentation for Windows, etc), and then starts up x11vnc with the
- [420]-connect option. To connect immediately at x11vnc startup time
+ [421]-connect option. To connect immediately at x11vnc startup time
use the "-connect host:port" option (use commas for a list of hosts to
connect to). The ":port" is optional (default is 5500).
@@ -3482,7 +3486,7 @@ xpw=
file is checked periodically (about once a second) for new hosts to
connect to.
- The [421]-remote control option (aka -R) can also be used to do this
+ The [422]-remote control option (aka -R) can also be used to do this
during an active x11vnc session, e.g.:
x11vnc -display :0 -R connect:hostname.domain
@@ -3494,7 +3498,7 @@ x11vnc -display :0 -R connect:hostname.domain
starting x11vnc.
To use the vncconnect(1) program (from the core VNC package at
- www.realvnc.com) specify the [422]-vncconnect option to x11vnc (Note:
+ www.realvnc.com) specify the [423]-vncconnect option to x11vnc (Note:
as of Dec/2004 -vncconnect is now the default). vncconnect(1) must be
pointed to the same X11 DISPLAY as x11vnc (since it uses X properties
to communicate with x11vnc). If you do not have or do not want to get
@@ -3539,7 +3543,7 @@ xprop -root -f VNC_CONNECT 8s -set VNC_CONNECT "$1"
There are some annoyances WRT Xvfb though. The default keyboard
mapping seems to be very poor. One should run x11vnc with
- [423]-add_keysyms option to have keysyms added automatically. Also, to
+ [424]-add_keysyms option to have keysyms added automatically. Also, to
add the Shift_R and Control_R modifiers something like this is needed:
#!/bin/sh
xmodmap -e "keycode any = Shift_R"
@@ -3561,11 +3565,11 @@ xmodmap -e "add Control = Control_L Control_R"
The main drawback to this method (besides requiring extra
configuration and possibly root permission) is that it also does the
- Linux Virtual Console/Terminal (VC/VT) [424]switching even though it
+ Linux Virtual Console/Terminal (VC/VT) [425]switching even though it
does not need to (since it doesn't use a real framebuffer). There are
some "dual headed" (actually multi-headed/multi-user) patches to the X
server that turn off the VT usage in the X server. Update: As of
- Jul/2005 we have an LD_PRELOAD script [425]Xdummy that allows you to
+ Jul/2005 we have an LD_PRELOAD script [426]Xdummy that allows you to
use a stock (i.e. unpatched) Xorg or XFree86 server with the "dummy"
driver and not have any VT switching problems! Currently Xdummy needs
to be run as root, but with some luck that may be relaxed in the
@@ -3597,7 +3601,7 @@ startx -- /path/to/Xdummy :1
An X server can be started on the headless machine (sometimes this
requires configuring the X server to not fail if it cannot detect a
keyboard or mouse, see the next paragraph). Then you can export that X
- display via x11vnc (e.g. see [426]this FAQ) and access it from
+ display via x11vnc (e.g. see [427]this FAQ) and access it from
anywhere on the network via a VNC viewer.
Some tips on getting X servers to start on machines without keyboard
@@ -3640,7 +3644,7 @@ startx -- /path/to/Xdummy :1
19/03/2004 10:10:58 error creating tile-row shm for len=4
19/03/2004 10:10:58 reverting to single_copytile mode
- Here is a shell script [427]shm_clear to list and prompt for removal
+ Here is a shell script [428]shm_clear to list and prompt for removal
of your unattached shm segments (attached ones are skipped). I use it
while debugging x11vnc (I use "shm_clear -y" to assume "yes" for each
prompt). If x11vnc is regularly not cleaning up its shm segments,
@@ -3674,40 +3678,40 @@ ied)
in /etc/system. See the next paragraph for more workarounds.
To minimize the number of shm segments used by x11vnc try using the
- [428]-onetile option (corresponds to only 3 shm segments used, and
+ [429]-onetile option (corresponds to only 3 shm segments used, and
adding -fs 1.0 knocks it down to 2). If you are having much trouble
with shm segments, consider disabling shm completely via the
- [429]-noshm option. Performance will be somewhat degraded but when
+ [430]-noshm option. Performance will be somewhat degraded but when
done over local machine sockets it should be acceptable (see an
- [430]earlier question discussing -noshm).
+ [431]earlier question discussing -noshm).
Q-58: How can I make x11vnc use less system resources?
- The [431]-nap (now on by default) and "[432]-wait n" (where n is the
+ The [432]-nap (now on by default) and "[433]-wait n" (where n is the
sleep between polls in milliseconds, the default is 30 or so) option
- are good places to start. Something like "[433]-sb 15" will cause
+ are good places to start. Something like "[434]-sb 15" will cause
x11vnc to go into a deep-sleep mode after 15 seconds of no activity
(instead of the default 60).
Reducing the X server bits per pixel depth (e.g. to 16bpp or even
8bpp) will further decrease memory I/O and network I/O. The ShadowFB
- will make x11vnc's screen polling less severe. Using the [434]-onetile
+ will make x11vnc's screen polling less severe. Using the [435]-onetile
option will use less memory and use fewer shared memory slots (add
- [435]-fs 1.0 for one less slot).
+ [436]-fs 1.0 for one less slot).
Q-59: How can I make x11vnc use MORE system resources?
- You can try [436]-threads and dial down the wait time (e.g. -wait 1)
- and possibly dial down [437]-defer as well. Note that if you try to
+ You can try [437]-threads and dial down the wait time (e.g. -wait 1)
+ and possibly dial down [438]-defer as well. Note that if you try to
increase the "frame rate" too much you can bog down the server end
with the extra work it needs to do compressing the framebuffer data,
etc.
That said, it is possible to "stream" video via x11vnc if the video
window is small enough. E.g. a 256x192 xawtv TV capture window (using
- the x11vnc [438]-id option) can be streamed over a LAN or wireless at
+ the x11vnc [439]-id option) can be streamed over a LAN or wireless at
a reasonable frame rate.
@@ -3723,7 +3727,7 @@ ied)
* Use a smaller desktop size (e.g. 1024x768 instead of 1280x1024)
* Make sure the desktop background is a solid color (the background
is resent every time it is re-exposed). Consider using the
- [439]-solid [color] option to try to do this automatically.
+ [440]-solid [color] option to try to do this automatically.
* Configure your window manager or desktop "theme" to not use fancy
images, shading, and gradients for the window decorations, etc.
Disable window animations, etc. Maybe your desktop has a "low
@@ -3732,9 +3736,9 @@ ied)
-> Use Smooth Scrolling (deselect it).
* Avoid small scrolls of large windows using the Arrow keys or
scrollbar. Try to use PageUp/PageDown instead. (not so much of a
- problem in x11vnc 0.7.2 if [440]-scrollcopyrect is active and
+ problem in x11vnc 0.7.2 if [441]-scrollcopyrect is active and
detecting scrolls for the application).
- * If the [441]-wireframe option is not available (earlier than
+ * If the [442]-wireframe option is not available (earlier than
x11vnc 0.7.2 or you have disabled it via -nowireframe) then
Disable Opaque Moves and Resizes in the window manager/desktop.
* However if -wireframe is active (on by default in x11vnc 0.7.2)
@@ -3754,7 +3758,7 @@ ied)
noticed.
VNC viewer parameters:
- * Use a [442]TightVNC enabled viewer! (Actually, RealVNC 4.x viewer
+ * Use a [443]TightVNC enabled viewer! (Actually, RealVNC 4.x viewer
with ZRLE encoding is not too bad either; some claim it is
faster).
* Make sure the tight (or zrle) encoding is being used (look at
@@ -3776,37 +3780,37 @@ ied)
file.
x11vnc parameters:
- * Make sure the [443]-wireframe option is active (it should be on by
+ * Make sure the [444]-wireframe option is active (it should be on by
default) and you have Opaque Moves/Resizes Enabled in the window
manager.
- * Make sure the [444]-scrollcopyrect option is active (it should be
+ * Make sure the [445]-scrollcopyrect option is active (it should be
on by default). This detects scrolls in many (but not all)
applications an applies the CopyRect encoding for a big speedup.
* Enforce a solid background when VNC viewers are connected via
- [445]-solid
- * Specify [446]-speeds modem to force the wireframe and
+ [446]-solid
+ * Specify [447]-speeds modem to force the wireframe and
scrollcopyrect heuristic parameters (and any future ones) to those
of a dialup modem connection (or supply the rd,bw,lat numerical
values that characterize your link).
* If wireframe and scrollcopyrect aren't working, try using the more
- drastic [447]-nodragging (no screen updates when dragging mouse,
+ drastic [448]-nodragging (no screen updates when dragging mouse,
but sometimes you miss visual feedback)
- * Set [448]-fs 1.0 (disables fullscreen updates)
- * Try increasing [449]-wait or [450]-defer (reduces the maximum
+ * Set [449]-fs 1.0 (disables fullscreen updates)
+ * Try increasing [450]-wait or [451]-defer (reduces the maximum
"frame rate", but won't help much for large screen changes)
- * Try the [451]-progressive pixelheight mode with the block
+ * Try the [452]-progressive pixelheight mode with the block
pixelheight 100 or so (delays sending vertical blocks since they
may change while viewer is receiving earlier ones)
- * If you just want to watch one (simple) window use [452]-id (cuts
+ * If you just want to watch one (simple) window use [453]-id (cuts
down extraneous polling and updates, but can be buggy or
insufficient)
- * Set [453]-nosel (disables all clipboard selection exchange)
- * Use [454]-nocursor and [455]-nocursorpos (repainting the remote
+ * Set [454]-nosel (disables all clipboard selection exchange)
+ * Use [455]-nocursor and [456]-nocursorpos (repainting the remote
cursor position and shape takes resources and round trips)
* On very slow links (e.g. <= 28.8) you may need to increase the
- [456]-readtimeout n setting if it sometimes takes more than 20sec
+ [457]-readtimeout n setting if it sometimes takes more than 20sec
to paint the full screen, etc.
- * Do not use [457]-fixscreen to automatically refresh the whole
+ * Do not use [458]-fixscreen to automatically refresh the whole
screen, tap three Alt_L's then the screen has painting errors
(rare problem).
@@ -3829,7 +3833,7 @@ ied)
Note that the DAMAGE extension does not speed up the actual reading of
pixels from the video card framebuffer memory, by, say, mirroring them
- in main memory. So reading the fb is still painfully [458]slow (e.g.
+ in main memory. So reading the fb is still painfully [459]slow (e.g.
5MB/sec), and so even using X DAMAGE when large changes occur on the
screen the bulk of the time is still spent retrieving them. Not ideal,
but use of the ShadowFB XFree86/Xorg option speeds up the reading
@@ -3847,27 +3851,27 @@ ied)
DAMAGE rectangles to contain real damage. The larger rectangles are
only used as hints to focus the traditional scanline polling (i.e. if
a scanline doesn't intersect a recent DAMAGE rectangle, the scan is
- skipped). You can use the "[459]-xd_area A" option to adjust the size
+ skipped). You can use the "[460]-xd_area A" option to adjust the size
of the trusted DAMAGE rectangles. The default is 20000 pixels (e.g. a
140x140 square, etc). Use "-xd_area 0" to disable the cutoff and trust
all DAMAGE rectangles.
- The option "[460]-xd_mem f" may also be of use in tuning the
- algorithm. To disable using DAMAGE entirely use "[461]-noxdamage".
+ The option "[461]-xd_mem f" may also be of use in tuning the
+ algorithm. To disable using DAMAGE entirely use "[462]-noxdamage".
Q-62: When I drag windows around with the mouse or scroll up and down
things really bog down (unless I do the drag in a single, quick
motion). Is there anything to do to improve things?
- This problem is primarily due to [462]slow hardware read rates from
+ This problem is primarily due to [463]slow hardware read rates from
video cards: as you scroll or move a large window around the screen
changes are much too rapid for x11vnc to keep up them (it can usually
only read the video card at about 5-10 MB/sec, so it can take a good
fraction of a second to read the changes induce from moving a large
window, if this to be done a number of times in succession the window
or scroll appears to "lurch" forward). See the description in the
- [463]-pointer_mode option for more info. The next bottleneck is
+ [464]-pointer_mode option for more info. The next bottleneck is
compressing all of these changes and sending them out to connected
viewers, however the VNC protocol is pretty much self-adapting with
respect to that (updates are only packaged and sent when viewers ask
@@ -3877,26 +3881,26 @@ ied)
default should now be much better than before and dragging small
windows around should no longer be a huge pain. If for some reason
these changes make matters worse, you can go back to the old way via
- the "[464]-pointer_mode 1" option.
+ the "[465]-pointer_mode 1" option.
- Also added was the [465]-nodragging option that disables all screen
+ Also added was the [466]-nodragging option that disables all screen
updates while dragging with the mouse (i.e. mouse motion with a button
held down). This gives the snappiest response, but might be undesired
in some circumstances when you want to see the visual feedback while
dragging (e.g. menu traversal or text selection).
- As of Dec/2004 the [466]-pointer_mode n option was introduced. n=1 is
+ As of Dec/2004 the [467]-pointer_mode n option was introduced. n=1 is
the original mode, n=2 an improvement, etc.. See the -pointer_mode n
help for more info.
- Also, in some circumstances the [467]-threads option can improve
+ Also, in some circumstances the [468]-threads option can improve
response considerably. Be forewarned that if more than one vncviewer
is connected at the same time then libvncserver may not be thread safe
(try to get the viewers to use different VNC encodings, e.g. tight and
ZRLE).
- As of Apr/2005 two new options (see the [468]wireframe FAQ and
- [469]scrollcopyrect FAQ below) provide schemes to sweep this problem
+ As of Apr/2005 two new options (see the [469]wireframe FAQ and
+ [470]scrollcopyrect FAQ below) provide schemes to sweep this problem
under the rug for window moves or resizes and for some (but not all)
window scrolls. These are the preferred way of avoiding the "lurching"
problem, contact me if they are not working. (Note on SuSE the RECORD
@@ -3915,8 +3919,8 @@ ied)
the window move/resize stops, it returns to normal processing: you
should only see the window appear in the new position. This spares you
from interacting with a "lurching" window between all of the
- intermediate steps. BTW the lurching is due to [470]slow video card
- read rates (see [471]here too). A displacement, even a small one, of a
+ intermediate steps. BTW the lurching is due to [471]slow video card
+ read rates (see [472]here too). A displacement, even a small one, of a
large window requires a non-negligible amount of time, a good fraction
of a second, to read in from the hardware framebuffer.
@@ -3924,7 +3928,7 @@ ied)
for -wireframe to do any good.
The mode is currently on by default because most people are afflicted
- with the problem. It can be disabled with the [472]-nowireframe option
+ with the problem. It can be disabled with the [473]-nowireframe option
(aka -nowf). Why might one want to turn off the wireframing? Since
x11vnc is merely guessing when windows are being moved/resized, it may
guess poorly for your window-manager or desktop, or even for the way
@@ -3969,13 +3973,13 @@ ied)
* Maximum time to show a wireframe animation.
* Minimum time between sending wireframe outlines.
- See the [473]"-wireframe tweaks" option for more details. On a slow
+ See the [474]"-wireframe tweaks" option for more details. On a slow
link, e.g. dialup modem, the parameters may be automatically adjusted
for better response.
CopyRect encoding: In addition to the above there is the
- [474]"-wirecopyrect mode" option. It is also on by default. This
+ [475]"-wirecopyrect mode" option. It is also on by default. This
instructs x11vnc to not only show the wireframe animation, but to also
instruct all connected VNC viewers to locally translate the window
image data from the original position to the new position on the
@@ -4023,7 +4027,7 @@ ied)
requiring the image data to be transmitted over the network. For fast
links the speedup is primarily due to x11vnc not having to read the
scrolled framebuffer data from the X server (recall that reading from
- the hardware framebuffer is [475]slow).
+ the hardware framebuffer is [476]slow).
To do this x11vnc uses the RECORD X extension to snoop the X11
protocol between the X client with the focus window and the X server.
@@ -4045,10 +4049,10 @@ ied)
the X server display: if one falls too far behind it could become a
mess...
- The initial implementation of [476]-scrollcopyrect option is useful in
+ The initial implementation of [477]-scrollcopyrect option is useful in
that it detects many scrolls and thus gives a much nicer working
- environment (especially when combined with the [477]-wireframe
- [478]-wirecopyrect [479]options, which are also on by default; and if
+ environment (especially when combined with the [478]-wireframe
+ [479]-wirecopyrect [480]options, which are also on by default; and if
you are willing to enable the ShadowFB things are very fast). The fact
that there aren't long delays or lurches during scrolling is the
primary improvement.
@@ -4081,10 +4085,10 @@ ied)
One can tap the Alt_L key (Left "Alt" key) 3 times in a row to
signal x11vnc to refresh the screen to all viewers. Your
VNC-viewer may have its own screen refresh hot-key or button. See
- also: [480]-fixscreen
+ also: [481]-fixscreen
* Some applications, notably OpenOffice, do XCopyArea scrolls in
weird ways that assume ancestor window clipping is taking place.
- See the [481]-scr_skip option for ways to tweak this on a
+ See the [482]-scr_skip option for ways to tweak this on a
per-application basis.
* Selecting text while dragging the mouse may be slower, especially
if the Button-down event happens near the window's edge. This is
@@ -4101,7 +4105,7 @@ ied)
because it fails to detect scrolls in it. Sometimes clicking
inside the application window or selecting some text in it to
force the focus helps.
- * When using the [482]-scale option there will be a quick CopyRect
+ * When using the [483]-scale option there will be a quick CopyRect
scroll, but it needs to be followed by a slower "cleanup" update.
This is because for a fixed finite screen resolution (e.g. 75 dpi)
scaling and copyrect-ing are not exactly independent. Scaling
@@ -4114,7 +4118,7 @@ ied)
If you find the -scrollcopyrect behavior too approximate or
distracting you can go back to the standard polling-only update method
- with the [483]-noscrollcopyrect (or -noscr for short). If you find
+ with the [484]-noscrollcopyrect (or -noscr for short). If you find
some extremely bad and repeatable behavior for -scrollcopyrect please
report a bug.
@@ -4153,23 +4157,23 @@ ied)
this is because the cursor shape is often downloaded to the graphics
hardware (video card), but I could be mistaken.
- A simple kludge is provided by the "[484]-cursor X" option that
+ A simple kludge is provided by the "[485]-cursor X" option that
changes the cursor when the mouse is on the root background (or any
window has the same cursor as the root background). Note that desktops
like GNOME or KDE often cover up the root background, so this won't
- work for those cases. Also see the "[485]-cursor some" option for
+ work for those cases. Also see the "[486]-cursor some" option for
additional kludges.
Note that as of Aug/2004 on Solaris using the SUN_OVL overlay
extension and IRIX, x11vnc can show the correct mouse cursor when the
- [486]-overlay option is supplied. See [487]this FAQ for more info.
+ [487]-overlay option is supplied. See [488]this FAQ for more info.
Also as of Dec/2004 XFIXES X extension support has been added to allow
exact extraction of the mouse cursor shape. XFIXES fixes the problem
of the cursor-shape being write-only: x11vnc can now query the X
server for the current shape and send it back to the connected
viewers. XFIXES is available on recent Linux Xorg based distros and
- [488]Solaris 10.
+ [489]Solaris 10.
The only XFIXES issue is the handling of alpha channel transparency in
cursors. If a cursor has any translucency then in general it must be
@@ -4177,7 +4181,7 @@ ied)
situations where the cursor transparency can also handled exactly:
when the VNC Viewer requires the cursor shape be drawn into the VNC
framebuffer or if you apply a patch to your VNC Viewer to extract
- hidden alpha channel data under 32bpp. [489]Details can be found here.
+ hidden alpha channel data under 32bpp. [490]Details can be found here.
Q-66: When using XFIXES cursorshape mode, some of the cursors look
@@ -4210,17 +4214,17 @@ ied)
for most cursor themes and you don't have to worry about it.
In case it still looks bad for your cursor theme, there are (of
- course!) some tunable parameters. The "[490]-alphacut n" option lets
+ course!) some tunable parameters. The "[491]-alphacut n" option lets
you set the threshold "n" (between 0 and 255): cursor pixels with
alpha values below n will be considered completely transparent while
values equal to or above n will be completely opaque. The default is
- 240. The "[491]-alphafrac f" option tries to correct individual
+ 240. The "[492]-alphafrac f" option tries to correct individual
cursors that did not fare well with the default -alphacut value: if a
cursor has less than fraction f (between 0.0 and 1.0) of its pixels
selected by the default -alphacut, the threshold is lowered until f of
its pixels are selected. The default fraction is 0.33.
- Finally, there is an option [492]-alpharemove that is useful for
+ Finally, there is an option [493]-alpharemove that is useful for
themes where many cursors are light colored (e.g. "whiteglass").
XFIXES returns the cursor data with the RGB values pre-multiplied by
the alpha value. If the white cursors look too grey, specify
@@ -4246,10 +4250,10 @@ ied)
alpha channel data to libvncserver. However, this data will only be
used for VNC clients that do not support the CursorShapeUpdates VNC
extension (or have disabled it). It can be disabled for all clients
- with the [493]-nocursorshape x11vnc option. In this case the cursor is
+ with the [494]-nocursorshape x11vnc option. In this case the cursor is
drawn, correctly blended with the background, into the VNC framebuffer
before being sent out to the client. So the alpha blending is done on
- the x11vnc side. Use the [494]-noalphablend option to disable this
+ the x11vnc side. Use the [495]-noalphablend option to disable this
behavior (always approximate transparent cursors with opaque RGB
values).
@@ -4278,9 +4282,9 @@ ied)
Q-68: Why does the mouse arrow just stay in one corner in my
vncviewer, whereas my cursor (that does move) is just a dot?
- This default takes advantage of a [495]tightvnc extension
+ This default takes advantage of a [496]tightvnc extension
(CursorShapeUpdates) that allows specifying a cursor image shape for
- the local VNC viewer. You may disable it with the [496]-nocursor
+ the local VNC viewer. You may disable it with the [497]-nocursor
option to x11vnc if your viewer does not have this extension.
Note: as of Aug/2004 this should be fixed: the default for
@@ -4294,17 +4298,17 @@ ied)
clients (i.e. passive viewers can see the mouse cursor being moved
around by another viewer)?
- Use the [497]-cursorpos option when starting x11vnc. A VNC viewer must
+ Use the [498]-cursorpos option when starting x11vnc. A VNC viewer must
support the Cursor Positions Updates for the user to see the mouse
motions (the TightVNC viewers support this). As of Aug/2004 -cursorpos
- is the default. See also [498]-nocursorpos and [499]-nocursorshape.
+ is the default. See also [499]-nocursorpos and [500]-nocursorshape.
Q-70: Is it possible to swap the mouse buttons (e.g. left-handed
operation), or arbitrarily remap them? How about mapping button clicks
to keystrokes, e.g. to partially emulate Mouse wheel scrolling?
- You can remap the mouse buttons via something like: [500]-buttonmap
+ You can remap the mouse buttons via something like: [501]-buttonmap
13-31 (or perhaps 12-21). Also, note that xmodmap(1) lets you directly
adjust the X server's button mappings, but in some circumstances it
might be more desirable to have x11vnc do it.
@@ -4312,7 +4316,7 @@ ied)
One user had an X server with only one mouse button(!) and was able to
map all of the VNC client mouse buttons to it via: -buttonmap 123-111.
- Note that the [501]-debug_pointer option prints out much info for
+ Note that the [502]-debug_pointer option prints out much info for
every mouse/pointer event and is handy in solving problems.
To map mouse button clicks to keystrokes you can use the alternate
@@ -4334,7 +4338,7 @@ ied)
Exactly what keystroke "scrolling" events they should be bound to
depends on one's taste. If this method is too approximate, one could
- consider not using [502]-buttonmap but rather configuring the X server
+ consider not using [503]-buttonmap but rather configuring the X server
to think it has a mouse with 5 buttons even though the physical mouse
does not. (e.g. 'Option "ZAxisMapping" "4 5"').
@@ -4364,7 +4368,7 @@ ied)
Q-71: How can I get my AltGr and Shift modifiers to work between
keyboards for different languages?
- The option [503]-modtweak should help here. It is a mode that monitors
+ The option [504]-modtweak should help here. It is a mode that monitors
the state of the Shift and AltGr Modifiers and tries to deduce the
correct keycode to send, possibly by sending fake modifier key presses
and releases in addition to the actual keystroke.
@@ -4373,16 +4377,16 @@ ied)
to get the old behavior). This was done because it was noticed on
newer XFree86 setups even on bland "us" keyboards like "pc104 us"
XFree86 included a "ghost" key with both "<" and ">" it. This key does
- not exist on the keyboard (see [504]this FAQ for more info). Without
+ not exist on the keyboard (see [505]this FAQ for more info). Without
-modtweak there was then an ambiguity in the reverse map keysym =>
keycode, making it so the "<" symbol could not be typed.
- Also see the [505]FAQ about the -xkb option for a more powerful method
+ Also see the [506]FAQ about the -xkb option for a more powerful method
of modifier tweaking for use on X servers with the XKEYBOARD
extension.
When trying to resolve keyboard mapping problems, note that the
- [506]-debug_keyboard option prints out much info for every keystroke
+ [507]-debug_keyboard option prints out much info for every keystroke
and so can be useful debugging things.
@@ -4394,9 +4398,9 @@ ied)
(e.g. pc105 in the XF86Config file when it should be something else,
say pc104).
- Short Cut: Try the [507]-xkb or [508]-sloppy_keys options and see if
+ Short Cut: Try the [508]-xkb or [509]-sloppy_keys options and see if
that helps the situation. The discussion below is a bit outdated (e.g.
- [509]-modtweak is now the default) but it is useful reference for
+ [510]-modtweak is now the default) but it is useful reference for
various tricks and so is kept.
@@ -4439,17 +4443,17 @@ ied)
-remap less-comma
These are convenient in that they do not modify the actual X server
- settings. The former ([510]-modtweak) is a mode that monitors the
+ settings. The former ([511]-modtweak) is a mode that monitors the
state of the Shift and AltGr modifiers and tries to deduce the correct
keycode sequence to send. Since Jul/2004 -modtweak is now the default.
- The latter ([511]-remap less-comma) is an immediate remapping of the
+ The latter ([512]-remap less-comma) is an immediate remapping of the
keysym less to the keysym comma when it comes in from a client (so
when Shift is down the comma press will yield "<").
- See also the [512]FAQ about the -xkb option as a possible workaround
+ See also the [513]FAQ about the -xkb option as a possible workaround
using the XKEYBOARD extension.
- Note that the [513]-debug_keyboard option prints out much info for
+ Note that the [514]-debug_keyboard option prints out much info for
every keystroke to aid debugging keyboard problems.
@@ -4457,13 +4461,13 @@ ied)
(i.e. an extra comma).
This is likely because you press "Shift" then "<" but then released
- the Shift key before releasing the "<". Because of a [514]keymapping
+ the Shift key before releasing the "<". Because of a [515]keymapping
ambiguity the last event "< up" is interpreted as "," because that key
unshifted is the comma.
- This should not happen in [515]-xkb mode, because it works hard to
+ This should not happen in [516]-xkb mode, because it works hard to
resolve the ambiguities. If you do not want to use -xkb, try the
- option [516]-sloppy_keys to attempt a similar type of algorithm.
+ option [517]-sloppy_keys to attempt a similar type of algorithm.
Q-74: I'm using an "international" keyboard (e.g. German "de", or
@@ -4487,7 +4491,7 @@ ied)
In both cases no AltGr is sent to the VNC server, but we know AltGr is
needed on the physical international keyboard to type a "@".
- This all worked fine with x11vnc running with the [517]-modtweak
+ This all worked fine with x11vnc running with the [518]-modtweak
option (it figures out how to adjust the Modifier keys (Shift or
AltGr) to get the "@"). However it fails under recent versions of
XFree86 (and the X.org fork). These run the XKEYBOARD extension by
@@ -4504,7 +4508,7 @@ ied)
* there is a new option -xkb to use the XKEYBOARD extension API to
do the Modifier key tweaking.
- The [518]-xkb option seems to fix all of the missing keys: "@", "<",
+ The [519]-xkb option seems to fix all of the missing keys: "@", "<",
">", etc.: it is recommended that you try it if you have this sort of
problem. Let us know if there are any remaining problems (see the next
paragraph for some known problems). If you specify the -debug_keyboard
@@ -4512,7 +4516,7 @@ ied)
debugging output (send it along with any problems you report).
Update: as of Jun/2005 x11vnc will try to automatically enable
- [519]-xkb if it appears that would be beneficial (e.g. if it sees any
+ [520]-xkb if it appears that would be beneficial (e.g. if it sees any
of "@", "<", ">", "[" and similar keys are mapped in a way that needs
the -xkb to access them). To disable this automatic check use -noxkb.
@@ -4527,7 +4531,7 @@ ied)
was attached to keycode 93 (no physical key generates this
keycode) while ISO_Level3_Shift was attached to keycode 113. The
keycode skipping option was used to disable the ghost key:
- [520]-skip_keycodes 93
+ [521]-skip_keycodes 93
* In implementing -xkb we noticed that some characters were still
not getting through, e.g. "~" and "^". This is not really an
XKEYBOARD problem. What was happening was the VNC viewer was
@@ -4545,16 +4549,16 @@ ied)
What to do? In general the VNC protocol has not really solved this
problem: what should be done if the VNC viewer sends a keysym not
recognized by the VNC server side? Workarounds can possibly be
- created using the [521]-remap x11vnc option:
+ created using the [522]-remap x11vnc option:
-remap asciitilde-dead_tilde,asciicircum-dead_circumflex
etc. Use -remap filename if the list is long. Please send us your
workarounds for this problem on your keyboard. Perhaps we can have
x11vnc adjust automatically at some point. Also see the
- [522]-add_keysyms option in the next paragraph.
- Update: for convenience "[523]-remap DEAD" does many of these
+ [523]-add_keysyms option in the next paragraph.
+ Update: for convenience "[524]-remap DEAD" does many of these
mappings at once.
- * To complement the above workaround using the [524]-remap, an
- option [525]-add_keysyms was added. This option instructs x11vnc
+ * To complement the above workaround using the [525]-remap, an
+ option [526]-add_keysyms was added. This option instructs x11vnc
to bind any unknown Keysyms coming in from VNC viewers to unused
Keycodes in the X server. This modifies the global state of the X
server. When x11vnc exits it removes the extra keymappings it
@@ -4573,7 +4577,7 @@ ied)
Short answer: disable key autorepeating by running the command "xset r
off" on the Xserver where x11vnc is run (restore via "xset r on") or
- use the new (Jul/2004) [526]-norepeat x11vnc option. You will still
+ use the new (Jul/2004) [527]-norepeat x11vnc option. You will still
have autorepeating because that is taken care of on your VNC viewer
side.
@@ -4597,7 +4601,7 @@ ied)
off", does the problem go away?
The workaround is to manually apply "xset r off" and "xset r on" as
- needed, or to use the [527]-norepeat (which has since Dec/2004 been
+ needed, or to use the [528]-norepeat (which has since Dec/2004 been
made the default). Note that with X server autorepeat turned off the
VNC viewer side of the connection will (nearly always) do its own
autorepeating so there is no big loss here, unless someone is also
@@ -4608,7 +4612,7 @@ ied)
keystrokes!!
Are you using x11vnc to log in to an X session via display manager?
- (as described in [528]this FAQ) If so, x11vnc is starting before your
+ (as described in [529]this FAQ) If so, x11vnc is starting before your
session and it disables autorepeat when you connect, but then after
you log in your session startup (GNOME, KDE, ...) could be resetting
the autorepeat to be on. Or it could be something inside your desktop
@@ -4632,7 +4636,7 @@ ied)
machine where I run the VNC viewer does not. Is there a way I can map
a local unused key to send an AltGr? How about a Compose key as well?
- Something like "[529]-remap Super_R-Mode_switch" x11vnc option may
+ Something like "[530]-remap Super_R-Mode_switch" x11vnc option may
work. Note that Super_R is the "Right Windoze(tm) Flaggie" key; you
may want to choose another. The -debug_keyboard option comes in handy
in finding keysym names (so does xev(1)).
@@ -4655,7 +4659,7 @@ ied)
Since xmodmap(1) modifies the X server mappings you may not want to do
this (because it affects local work on that machine). Something like
- the [530]-remap Alt_L-Meta_L to x11vnc may be sufficient for ones
+ the [531]-remap Alt_L-Meta_L to x11vnc may be sufficient for ones
needs, and does not modify the X server environment. Note that you
cannot send Alt_L in this case, maybe -remap Super_L-Meta_L would be a
better choice if the Super_L key is typically unused in Unix.
@@ -4666,7 +4670,7 @@ ied)
This can be done directly in some X servers using AccessX and
Pointer_EnableKeys, but is a bit awkward. It may be more convenient to
- have x11vnc do the remapping. This can be done via the [531]-remap
+ have x11vnc do the remapping. This can be done via the [532]-remap
option using the fake "keysyms" Button1, Button2, etc. as the "to"
keys (i.e. the ones after the "-")
@@ -4675,7 +4679,7 @@ ied)
button "paste" because (using XFree86/Xorg Emulate3Buttons) you have
to click both buttons on the touch pad at the same time. This
remapping:
- [532]-remap Super_R-Button2
+ [533]-remap Super_R-Button2
maps the Super_R "flag" key press to the Button2 click, thereby making
X pasting a bit easier.
@@ -4694,10 +4698,10 @@ ied)
Caps_Lock in the viewer your local machine goes into the Caps_Lock on
state and sends keysym "A" say when you press "a". x11vnc will then
fake things up so that Shift is held down to generate "A". The
- [533]-skip_lockkeys option should help to accomplish this. For finer
- grain control use something like: "[534]-remap Caps_Lock-None".
+ [534]-skip_lockkeys option should help to accomplish this. For finer
+ grain control use something like: "[535]-remap Caps_Lock-None".
- Also try the [535]-nomodtweak and [536]-capslock options.
+ Also try the [536]-nomodtweak and [537]-capslock options.
[Screen Related Issues and Features]
@@ -4720,7 +4724,7 @@ ied)
There may also be scaling viewers out there (e.g. TightVNC or UltraVNC
on Windows) that automatically shrink or expand the remote framebuffer
to fit the local display. Especially for hand-held devices. See also
- [537]this FAQ on x11vnc scaling.
+ [538]this FAQ on x11vnc scaling.
Q-82: Does x11vnc support server-side framebuffer scaling? (E.g. to
@@ -4728,7 +4732,7 @@ ied)
As of Jun/2004 x11vnc provides basic server-side scaling. It is a
global scaling of the desktop, not a per-client setting. To enable it
- use the "[538]-scale fraction" option. "fraction" can either be a
+ use the "[539]-scale fraction" option. "fraction" can either be a
floating point number (e.g. -scale 0.5) or the alternative m/n
fraction notation (e.g. -scale 3/4). Note that if fraction is greater
than one the display is magnified.
@@ -4749,7 +4753,7 @@ ied)
One can also use the ":nb" with an integer scale factor (say "-scale
2:nb") to use x11vnc as a screen magnifier for vision impaired
- [539]applications. Since with integer scale factors the framebuffers
+ [540]applications. Since with integer scale factors the framebuffers
become huge and scaling operations time consuming, be sure to use
":nb" for the fastest response.
@@ -4775,7 +4779,7 @@ ied)
If one desires per-client scaling for something like 1:1 from a
workstation and 1:2 from a smaller device (e.g. handheld), currently
the only option is to run two (or more) x11vnc processes with
- different scalings listening on separate ports ([540]-rfbport option,
+ different scalings listening on separate ports ([541]-rfbport option,
etc.).
Update: As of May/2006 x11vnc also supports the UltraVNC server-side
@@ -4785,8 +4789,8 @@ ied)
"-rfbversion 3.6" for this to be recognized by UltraVNC viewers.
BTW, whenever you run two or more x11vnc's on the same X display and
- use the [541]GUI, then to avoid all of the x11vnc's simultaneously
- answering the gui you will need to use something like [542]"-connect
+ use the [542]GUI, then to avoid all of the x11vnc's simultaneously
+ answering the gui you will need to use something like [543]"-connect
file1 -gui ..." with different connect files for each x11vnc you want
to control via the gui (or remote-control). The "-connect file1" usage
gives separate communication channels between a x11vnc proces and the
@@ -4795,7 +4799,7 @@ ied)
Update: As of Mar/2005 x11vnc now scales the mouse cursor with the
same scale factor as the screen. If you don't want that, use the
- [543]"-scale_cursor frac" option to set the cursor scaling to a
+ [544]"-scale_cursor frac" option to set the cursor scaling to a
different factor (e.g. use "-scale_cursor 1" to keep the cursor at its
natural unscaled size).
@@ -4817,17 +4821,17 @@ ied)
screen is not rectangular (e.g. 1280x1024 and 1024x768 monitors joined
together), then there will be "non-existent" areas on the screen. The
X server will return "garbage" image data for these areas and so they
- may be distracting to the viewer. The [544]-blackout x11vnc option
+ may be distracting to the viewer. The [545]-blackout x11vnc option
allows you to blacken-out rectangles by manually specifying their
WxH+X+Y geometries. If your system has the libXinerama library, the
- [545]-xinerama x11vnc option can be used to have it automatically
+ [546]-xinerama x11vnc option can be used to have it automatically
determine the rectangles to be blackened out. (Note on 8bpp
PseudoColor displays the fill color may not be black). Update:
- [546]-xinerama is now on by default.
+ [547]-xinerama is now on by default.
Some users have reported that the mouse does not behave properly for
their Xinerama display: i.e. the mouse cannot be moved to all regions
- of the large display. If this happens try using the [547]-xwarppointer
+ of the large display. If this happens try using the [548]-xwarppointer
option. This instructs x11vnc to fake mouse pointer motions using the
XWarpPointer function instead of the XTestFakeMotionEvent XTEST
function. (This may be due to a bug in the X server for XTEST when
@@ -4852,23 +4856,23 @@ ied)
Note: if you are running on Solaris 8 or earlier you can easily hit up
against the maximum of 6 shm segments per process (for Xsun in this
case) from running multiple x11vnc processes. You should modify
- /etc/system as mentioned in another [548]FAQ to increase the limit. It
- is probably also a good idea to run with the [549]-onetile option in
+ /etc/system as mentioned in another [549]FAQ to increase the limit. It
+ is probably also a good idea to run with the [550]-onetile option in
this case (to limit each x11vnc to 3 shm segments), or even
- [550]-noshm to use no shm segments.
+ [551]-noshm to use no shm segments.
Q-85: Can x11vnc show only a portion of the display? (E.g. for a
special purpose rfb application).
- As of Mar/2005 x11vnc has the "[551]-clip WxH+X+Y" option to select a
+ As of Mar/2005 x11vnc has the "[552]-clip WxH+X+Y" option to select a
rectangle of width W, height H and offset (X, Y). Thus the VNC screen
will be the clipped sub-region of the display and be only WxH in size.
- One user used -clip to split up a large [552]Xinerama screen into two
+ One user used -clip to split up a large [553]Xinerama screen into two
more managable smaller screens.
This also works to view a sub-region of a single application window if
- the [553]-id or [554]-sid options are used. The offset is measured
+ the [554]-id or [555]-sid options are used. The offset is measured
from the upper left corner of the selected window.
@@ -4877,7 +4881,7 @@ ied)
crash.
As of Dec/2004 x11vnc supports XRANDR. You enable it with the
- [555]-xrandr option to make x11vnc monitor XRANDR events and also trap
+ [556]-xrandr option to make x11vnc monitor XRANDR events and also trap
X server errors if the screen change occurred in the middle of an X
call like XGetImage. Once it traps the screen change it will create a
new framebuffer using the new screen.
@@ -4887,7 +4891,7 @@ ied)
then the viewer will automatically resize. Otherwise, the new
framebuffer is fit as best as possible into the original viewer size
(portions of the screen may be clipped, unused, etc). For these
- viewers you can try the [556]-padgeom option to make the region big
+ viewers you can try the [557]-padgeom option to make the region big
enough to hold all resizes and rotations.
If you specify "-xrandr newfbsize" then vnc viewers that do not
@@ -4955,9 +4959,9 @@ ied)
* Fullscreen mode
The way VMWare does Fullscreen mode on Linux is to display the Guest
- desktop in a separate Virtual Console (e.g. VC 8) (see [557]this FAQ
+ desktop in a separate Virtual Console (e.g. VC 8) (see [558]this FAQ
on VC's for background). Unfortunately, this Fullscreen VC is not an X
- server. So x11vnc cannot access it (however, [558]see this discussion
+ server. So x11vnc cannot access it (however, [559]see this discussion
of -rawfb for a possible workaround). x11vnc works fine with "Normal X
application window" and "Quick-Switch mode" because these use X.
@@ -4978,13 +4982,13 @@ ied)
improve response. One can also cut the display depth (e.g. to 16bpp)
in this 2nd X session to improve video performance. This 2nd X session
emulates Fullscreen mode to some degree and can be viewed via x11vnc
- as long as the VMWare X session [559]is in the active VC.
+ as long as the VMWare X session [560]is in the active VC.
Also note that with a little bit of playing with "xwininfo -all
-children" output one can extract the (non-toplevel) windowid of the
of the Guest desktop only when VMWare is running as a normal X
application. Then one can export just the guest desktop (i.e. without
- the VMWare menu buttons) by use of the [560]-id windowid option. The
+ the VMWare menu buttons) by use of the [561]-id windowid option. The
caveats are the X session VMWare is in must be in the active VC and
the window must be fully visible, so this mode is not terribly
convenient, but could be useful in some circumstances (e.g. running
@@ -4997,10 +5001,10 @@ ied)
controlled) via VNC with x11vnc?
As of Apr/2005 there is support for this. Two options were added:
- "[561]-rawfb string" (to indicate the raw framembuffer device, file,
- etc. and its parameters) and "[562]-pipeinput command" (to provide an
+ "[562]-rawfb string" (to indicate the raw framembuffer device, file,
+ etc. and its parameters) and "[563]-pipeinput command" (to provide an
external program that will inject or otherwise process mouse and
- keystroke input). Some useful [563]-pipeinput schemes, VID, CONSOLE,
+ keystroke input). Some useful [564]-pipeinput schemes, VID, CONSOLE,
and UINPUT, have since been built into x11vnc for convenience.
This non-X mode for x11vnc is somewhat experimental because it is so
@@ -5038,9 +5042,9 @@ ied)
access method). Only use file if map isn't working. BTW, "mmap" is an
alias for "map" and if you do not supply a type and the file exists,
map is assumed (see the -help output and below for some exceptions to
- this). The "snap:" setting applies the [564]-snapfb option with
+ this). The "snap:" setting applies the [565]-snapfb option with
"file:" type reading (this is useful for exporting webcams or TV tuner
- video; see [565]the next FAQ for more info).
+ video; see [566]the next FAQ for more info).
Also, if the string is of the form "setup:cmd" then cmd is run and the
first line of its output retrieved and used as the rawfb string. This
@@ -5081,7 +5085,7 @@ ied)
screen to either shm or a mapped file. The format of these is XWD and
so the initial header should be skipped. BTW, since XWD is not
strictly RGB the view will only be approximate, but usable. Of course
- for the case of Xvfb x11vnc can poll it much better via the [566]X
+ for the case of Xvfb x11vnc can poll it much better via the [567]X
API, but you get the idea.
By default in -rawfb mode x11vnc will actually close any X display it
@@ -5110,13 +5114,13 @@ ied)
tty1-tty6), or X graphical display (usually starting at tty7). In
addition to text console may be other graphical ones may be viewed and
interacted with, e.g. SVGAlib apps, VMWare non-X fullscreen, or
- [567]Qt-embedded apps (PDAs/Handhelds). By default the pipeinput
+ [568]Qt-embedded apps (PDAs/Handhelds). By default the pipeinput
mechanisms UINPUT and CONSOLE (keystrokes only) are automatically
attempted in this mode under "-rawfb console".
The Video4Linux Capture device, /dev/video0, etc is either a Webcam or
a TV capture device and needs to have its driver enable in the kernel.
- See [568]this FAQ for details. If specified via "-rawfb Video" then
+ See [569]this FAQ for details. If specified via "-rawfb Video" then
the pipeinput method "VID" is applied (it lets you change video
parameters dynamically via keystrokes).
@@ -5124,10 +5128,10 @@ ied)
also useful in testing.
- All of the above [569]-rawfb options are just for viewing the raw
+ All of the above [570]-rawfb options are just for viewing the raw
framebuffer (although some of the aliases do imply keystroke and mouse
pipeinput methods). That may be enough for certain applications of
- this feature (e.g. suppose a [570]video camera mapped its framebuffer
+ this feature (e.g. suppose a [571]video camera mapped its framebuffer
into memory and you just wanted to look at it via VNC).
To handle the pointer and keyboard input from the viewer users the
"-pipeinput cmd" option was added to indicate a helper program to
@@ -5165,7 +5169,7 @@ ied)
keystrokes into the Linux console (e.g. the virtual consoles:
/dev/tty1, /dev/tty2, etc) in x11vnc/misc/vcinject.pl. It is based on
the vncterm/LinuxVNC.c program also in the libvncserver CVS. So to
- view and interact with VC #2 (assuming it is the [571]active VC) one
+ view and interact with VC #2 (assuming it is the [572]active VC) one
can run something like:
x11vnc -rawfb map:/dev/fb0@1024x768x16 -pipeinput './vcinject.pl 2'
@@ -5220,7 +5224,7 @@ ied)
better to use the more accurate and faster LinuxVNC program. The
advantage x11vnc -rawfb might have is that it can allow interaction
with a non-text application, e.g. one based on SVGAlib or
- [572]Qt-embedded Also, for example the [573]VMWare Fullscreen mode is
+ [573]Qt-embedded Also, for example the [574]VMWare Fullscreen mode is
actually viewable under -rawfb and can be interacted with if uinput is
enabled.
@@ -5240,9 +5244,9 @@ ied)
Q-92: Can I export via VNC a Webcam or TV tuner framebuffer using
x11vnc?
- Yes, this is possible to some degree with the [574]-rawfb option.
+ Yes, this is possible to some degree with the [575]-rawfb option.
There is no X11 involved: snapshots from the video capture device are
- used for the screen image data. See the [575]previous FAQ on -rawfb
+ used for the screen image data. See the [576]previous FAQ on -rawfb
for background. For best results, use x11vnc version 0.8.1 or later.
Roughly, one would do something like this:
@@ -5254,7 +5258,7 @@ ied)
snapshot to a file that you point -rawfb to; ask me if it is not clear
what to do).
- The "snap:" enforces [576]-snapfb mode which appears to be necessary.
+ The "snap:" enforces [577]-snapfb mode which appears to be necessary.
The read pointer for video capture devices cannot be repositioned
(which would be needed for scanline polling), but you can read a full
frame of data from the device.
@@ -5276,7 +5280,7 @@ ied)
Many video4linux drivers tend to set the framebuffer to be 24bpp (as
opposed to 32bpp). Since this can cause problems with VNC viewers,
- etc, the [577]-24to32 option will be automatically imposed when in
+ etc, the [578]-24to32 option will be automatically imposed when in
24bpp.
Note that by its very nature, video capture involves rapid change in
@@ -5284,7 +5288,7 @@ ied)
wavering in brightness is always happening. This can lead to much
network bandwidth consumption for the VNC traffic and also local CPU
and I/O resource usage. You may want to experiment with "dialing down"
- the framerate via the [578]-wait, [579]-slow_fb, or [580]-defer
+ the framerate via the [579]-wait, [580]-slow_fb, or [581]-defer
options. Decreasing the window size and bpp also helps.
@@ -5373,7 +5377,7 @@ ied)
format to HI240, RGB565, RGB24, RGB32, RGB555, and
GREY respectively. See -rawfb video for details.
- See also the [581]-freqtab option to supply your own xawtv channel to
+ See also the [582]-freqtab option to supply your own xawtv channel to
frequency mappings for your country (only ntsc-cable-us is built into
x11vnc).
@@ -5382,7 +5386,7 @@ ied)
running on my handheld or PC using the Linux console framebuffer (i.e.
not X11)?
- Yes, the basic method for this is the [582]-rawfb scheme where the
+ Yes, the basic method for this is the [583]-rawfb scheme where the
Linux console framebuffer (usually /dev/fb0) is polled and the uinput
driver is used to inject keystrokes and mouse input. Often you will
just have to type:
@@ -5395,7 +5399,7 @@ ied)
x11vnc -rawfb /dev/fb0@640x480x16
Also, to force usage of the uinput injection method use "-pipeinput
- UINPUT". See the [583]-pipeinput description for tunable parameters,
+ UINPUT". See the [584]-pipeinput description for tunable parameters,
etc.
One problem with the x11vnc uinput scheme is that it cannot guess the
@@ -5411,7 +5415,7 @@ ied)
Even with the correct acceleration setting there is stil some drift
(probably because of the mouse threshold where the acceleration kicks
in) and so x11vnc needs to reposition the cursor from 0,0 about 5
- times a second. See the [584]-pipeinput UINPUT option for tuning
+ times a second. See the [585]-pipeinput UINPUT option for tuning
parameters that can be set (there are some experimental thresh=N
tuning parameters as well)
@@ -5438,12 +5442,24 @@ ied)
which is often what is desired from VNC.
- Q-94: Can I use x11vnc to record a Shock Wave Flash (or other format)
+ Q-94: Now that non-X11 devices can be exported via VNC using x11vnc,
+ can I build it with no dependencies on X11 header files and libraries?
+
+ Yes, as of Jul/2006 x11vnc supports building for [586]-rawfb only
+ support. Just do something like when building:
+ ./configure --without-x (plus any other flags)
+ make
+
+ You can then test via "ldd x11vnc" that the binary does not depend on
+ libX11.so, etc.
+
+
+ Q-95: Can I use x11vnc to record a Shock Wave Flash (or other format)
video of my desktop, e.g. to record a tutorial or demo?
Yes, it is possible with a number of tools that record VNC and
transform it to swf format or others. One such popular tool is
- [585]pyvnc2swf. There are a number of [586]tutorials on how to do
+ [587]pyvnc2swf. There are a number of [588]tutorials on how to do
this. Another option is to use the vnc2mpg that comes in the
LibVNCServer package.
An important thing to remember when doing this is that tuning
@@ -5453,24 +5469,24 @@ ied)
[Misc: Clipboard, File Transfer, Sound, Beeps, Thanks, etc.]
- Q-95: Does the Clipboard/Selection get transferred between the
+ Q-96: Does the Clipboard/Selection get transferred between the
vncviewer and the X display?
As of Jan/2004 x11vnc supports the "CutText" part of the rfb protocol.
Furthermore, x11vnc is able to hold the PRIMARY and CLIPBOARD
selection (Xvnc does not seem to do this). If you don't want the
- Clipboard/Selection exchanged use the [587]-nosel option. If you don't
+ Clipboard/Selection exchanged use the [589]-nosel option. If you don't
want the PRIMARY selection to be polled for changes use the
- [588]-noprimary option. (with a similar thing for CLIPBOARD). You can
- also fine-tune it a bit with the [589]-seldir dir option and also
- [590]-input.
+ [590]-noprimary option. (with a similar thing for CLIPBOARD). You can
+ also fine-tune it a bit with the [591]-seldir dir option and also
+ [592]-input.
You may need to watch out for desktop utilities such as KDE's
"Klipper" that do odd things with the selection, clipboard, and
cutbuffers.
- Q-96: Can I transfer files back and forth with x11vnc?
+ Q-97: Can I transfer files back and forth with x11vnc?
As of Oct/2005 and May/2006 x11vnc enables, respectively, the TightVNC
and UltraVNC file transfer implementations that were added to
@@ -5478,7 +5494,7 @@ ied)
(and Windows viewers only support filetransfer it appears).
TightVNC file transfer is on by default, if you want to disable it use
- the [591]-nofilexfer option. UltraVNC file transfer is currently off
+ the [593]-nofilexfer option. UltraVNC file transfer is currently off
by default, to enable it use something like "-rfbversion 3.6
-permitfiletransfer"
options (UltraVNC incorrectly uses the RFB protocol version to
@@ -5486,7 +5502,7 @@ ied)
be version 3.6).
- Q-97: How can I hear the sound (audio) from the remote applications on
+ Q-98: How can I hear the sound (audio) from the remote applications on
the desktop I am viewing via x11vnc?
You will have to use an external network audio mechanism for this.
@@ -5582,7 +5598,7 @@ or:
the applications will fail to run because LD_PRELOAD will point to
libraries of the wrong wordsize.
- Q-98: Why don't I hear the "Beeps" in my X session (e.g. when typing
+ Q-99: Why don't I hear the "Beeps" in my X session (e.g. when typing
tput bel in an xterm)?
As of Dec/2003 "Beep" XBell events are tracked by default. The X
@@ -5590,16 +5606,16 @@ or:
in Solaris, see Xserver(1) for how to turn it on via +kb), and so you
won't hear them if the extension is not present.
- If you don't want to hear the beeps use the [592]-nobell option. If
+ If you don't want to hear the beeps use the [594]-nobell option. If
you want to hear the audio from the remote applications, consider
- trying a [593]redirector such as esd.
+ trying a [595]redirector such as esd.
Contributions:
- Q-99: Thanks for your program and for your help! Can I make a
+ Q-100: Thanks for your program and for your help! Can I make a
donation?
Please do (any amount is appreciated) and thank you for your support!
@@ -5818,390 +5834,392 @@ References
207. http://www.karlrunge.com/x11vnc/index.html#faq-rawfb
208. http://www.karlrunge.com/x11vnc/index.html#faq-video
209. http://www.karlrunge.com/x11vnc/index.html#faq-qt-embedded
- 210. http://www.karlrunge.com/x11vnc/index.html#faq-record-swf
- 211. http://www.karlrunge.com/x11vnc/index.html#faq-clipboard
- 212. http://www.karlrunge.com/x11vnc/index.html#faq-filexfer
- 213. http://www.karlrunge.com/x11vnc/index.html#faq-sound
- 214. http://www.karlrunge.com/x11vnc/index.html#faq-beeps
- 215. http://www.karlrunge.com/x11vnc/index.html#faq-thanks
- 216. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-display
- 217. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-auth
- 218. http://www.karlrunge.com/x11vnc/index.html#faq-display-manager
- 219. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-users
- 220. http://www.karlrunge.com/x11vnc/index.html#solarisbuilding
- 221. http://www.karlrunge.com/x11vnc/x11vnc_sunos4.html
- 222. http://www.karlrunge.com/x11vnc/index.html#building
- 223. http://www.karlrunge.com/x11vnc/index.html#faq-build
- 224. http://packages.debian.org/x11vnc
- 225. http://www.linuxpackages.net/search_view.php?by=name&name=x11vnc
- 226. http://dag.wieers.com/packages/x11vnc/
- 227. http://dries.ulyssis.org/rpm/packages/x11vnc/info.html
- 228. http://linux01.gwdg.de/~pbleser/rpm-navigation.php?cat=Network/x11vnc/
- 229. http://www.sunfreeware.com/
- 230. http://www.freebsd.org/cgi/ports.cgi?query=x11vnc&stype=all
- 231. http://www.freshports.org/net/x11vnc
- 232. http://www.openbsd.org/3.9_packages/i386/x11vnc-0.6.2.tgz-long.html
- 233. http://pkgsrc.se/x11/x11vnc
- 234. http://mike.saunby.net/770/x11vnc/
- 235. http://www.pdaxrom.org/ipk_feed.php?menuid=11&showfeed=unstable#x11vnc
- 236. http://www.focv.com/ipkg/
- 237. http://www.karlrunge.com/x11vnc/bins
- 238. http://www.tightvnc.com/download.html
- 239. http://www.realvnc.com/download-free.html
- 240. http://sourceforge.net/projects/cotvnc/
- 241. http://www.ultravnc.com/
- 242. http://www.karlrunge.com/x11vnc/x11vnc_opts.html
- 243. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-gui
- 244. http://www.karlrunge.com/x11vnc/index.html#faq-gui-tray
- 245. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-q
- 246. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-bg
- 247. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-o
- 248. http://www.karlrunge.com/x11vnc/index.html#solarisbuilding
- 249. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nofb
- 250. http://fredrik.hubbe.net/x2vnc.html
- 251. http://www.hubbe.net/~hubbe/win2vnc.html
- 252. http://www.deboer.gmxhome.de/
- 253. http://sourceforge.net/projects/win2vnc/
- 254. http://fredrik.hubbe.net/x2vnc.html
- 255. http://freshmeat.net/projects/x2x/
- 256. http://ftp.digital.com/pub/Digital/SRC/x2x/
- 257. http://zapek.com/software/zvnc/
- 258. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-visual
- 259. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-flashcmap
- 260. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-8to24
- 261. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-notruecolor
- 262. http://www.karlrunge.com/x11vnc/index.html#faq-8bpp
- 263. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-overlay
- 264. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-8to24
- 265. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-overlay
- 266. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-8to24
- 267. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-flashcmap
- 268. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-fixscreen
- 269. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-8to24
- 270. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
- 271. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-8to24
- 272. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-overlay
- 273. http://www.karlrunge.com/x11vnc/index.html#faq-overlays
- 274. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
- 275. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sid
- 276. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-24to32
- 277. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-display
- 278. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noshm
- 279. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-flipbyteorder
- 280. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-auth
- 281. http://www.karlrunge.com/x11vnc/index.html#xauth_pain
- 282. http://www.karlrunge.com/x11vnc/index.html#faq-noshm
- 283. http://wwws.sun.com/sunray/index.html
- 284. http://www.karlrunge.com/x11vnc/sunray.html
- 285. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remote
- 286. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-query
- 287. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-forever
- 288. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-bg
- 289. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-clear_mods
- 290. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-clear_keys
- 291. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remote
- 292. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-query
- 293. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-gui
- 294. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-storepasswd
- 295. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rfbauth
- 296. http://www.karlrunge.com/x11vnc/index.html#faq-passwdfile
- 297. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-usepw
- 298. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-viewpasswd
- 299. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-passwd
- 300. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-passwdfile
- 301. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rfbauth
- 302. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-passwdfile
- 303. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
- 304. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw_nis
- 305. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
- 306. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
- 307. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 210. http://www.karlrunge.com/x11vnc/index.html#faq-no-x11
+ 211. http://www.karlrunge.com/x11vnc/index.html#faq-record-swf
+ 212. http://www.karlrunge.com/x11vnc/index.html#faq-clipboard
+ 213. http://www.karlrunge.com/x11vnc/index.html#faq-filexfer
+ 214. http://www.karlrunge.com/x11vnc/index.html#faq-sound
+ 215. http://www.karlrunge.com/x11vnc/index.html#faq-beeps
+ 216. http://www.karlrunge.com/x11vnc/index.html#faq-thanks
+ 217. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-display
+ 218. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-auth
+ 219. http://www.karlrunge.com/x11vnc/index.html#faq-display-manager
+ 220. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-users
+ 221. http://www.karlrunge.com/x11vnc/index.html#solarisbuilding
+ 222. http://www.karlrunge.com/x11vnc/x11vnc_sunos4.html
+ 223. http://www.karlrunge.com/x11vnc/index.html#building
+ 224. http://www.karlrunge.com/x11vnc/index.html#faq-build
+ 225. http://packages.debian.org/x11vnc
+ 226. http://www.linuxpackages.net/search_view.php?by=name&name=x11vnc
+ 227. http://dag.wieers.com/packages/x11vnc/
+ 228. http://dries.ulyssis.org/rpm/packages/x11vnc/info.html
+ 229. http://linux01.gwdg.de/~pbleser/rpm-navigation.php?cat=Network/x11vnc/
+ 230. http://www.sunfreeware.com/
+ 231. http://www.freebsd.org/cgi/ports.cgi?query=x11vnc&stype=all
+ 232. http://www.freshports.org/net/x11vnc
+ 233. http://www.openbsd.org/3.9_packages/i386/x11vnc-0.6.2.tgz-long.html
+ 234. http://pkgsrc.se/x11/x11vnc
+ 235. http://mike.saunby.net/770/x11vnc/
+ 236. http://www.pdaxrom.org/ipk_feed.php?menuid=11&showfeed=unstable#x11vnc
+ 237. http://www.focv.com/ipkg/
+ 238. http://www.karlrunge.com/x11vnc/bins
+ 239. http://www.tightvnc.com/download.html
+ 240. http://www.realvnc.com/download-free.html
+ 241. http://sourceforge.net/projects/cotvnc/
+ 242. http://www.ultravnc.com/
+ 243. http://www.karlrunge.com/x11vnc/x11vnc_opts.html
+ 244. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-gui
+ 245. http://www.karlrunge.com/x11vnc/index.html#faq-gui-tray
+ 246. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-q
+ 247. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-bg
+ 248. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-o
+ 249. http://www.karlrunge.com/x11vnc/index.html#solarisbuilding
+ 250. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nofb
+ 251. http://fredrik.hubbe.net/x2vnc.html
+ 252. http://www.hubbe.net/~hubbe/win2vnc.html
+ 253. http://www.deboer.gmxhome.de/
+ 254. http://sourceforge.net/projects/win2vnc/
+ 255. http://fredrik.hubbe.net/x2vnc.html
+ 256. http://freshmeat.net/projects/x2x/
+ 257. http://ftp.digital.com/pub/Digital/SRC/x2x/
+ 258. http://zapek.com/software/zvnc/
+ 259. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-visual
+ 260. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-flashcmap
+ 261. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-8to24
+ 262. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-notruecolor
+ 263. http://www.karlrunge.com/x11vnc/index.html#faq-8bpp
+ 264. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-overlay
+ 265. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-8to24
+ 266. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-overlay
+ 267. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-8to24
+ 268. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-flashcmap
+ 269. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-fixscreen
+ 270. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-8to24
+ 271. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
+ 272. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-8to24
+ 273. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-overlay
+ 274. http://www.karlrunge.com/x11vnc/index.html#faq-overlays
+ 275. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
+ 276. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sid
+ 277. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-24to32
+ 278. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-display
+ 279. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noshm
+ 280. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-flipbyteorder
+ 281. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-auth
+ 282. http://www.karlrunge.com/x11vnc/index.html#xauth_pain
+ 283. http://www.karlrunge.com/x11vnc/index.html#faq-noshm
+ 284. http://wwws.sun.com/sunray/index.html
+ 285. http://www.karlrunge.com/x11vnc/sunray.html
+ 286. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remote
+ 287. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-query
+ 288. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-forever
+ 289. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-bg
+ 290. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-clear_mods
+ 291. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-clear_keys
+ 292. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remote
+ 293. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-query
+ 294. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-gui
+ 295. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-storepasswd
+ 296. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rfbauth
+ 297. http://www.karlrunge.com/x11vnc/index.html#faq-passwdfile
+ 298. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-usepw
+ 299. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-viewpasswd
+ 300. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-passwd
+ 301. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-passwdfile
+ 302. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rfbauth
+ 303. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-passwdfile
+ 304. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
+ 305. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw_nis
+ 306. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
+ 307. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
308. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 309. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
- 310. http://www.karlrunge.com/x11vnc/index.html#tunnelling
- 311. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel
- 312. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-accept
- 313. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-forever
- 314. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-shared
- 315. http://www.karlrunge.com/x11vnc/index.html#tunnelling
- 316. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 317. http://www.karlrunge.com/x11vnc/index.html#faq-passwd
- 318. http://www.karlrunge.com/x11vnc/index.html#faq-passwdfile
- 319. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-allow
- 320. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
- 321. http://www.karlrunge.com/x11vnc/index.html#faq-tcp_wrappers
- 322. http://www.karlrunge.com/x11vnc/index.html#faq-inetd
- 323. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-listen
- 324. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-allow
- 325. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
- 326. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-allow
- 327. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
- 328. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-input
- 329. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-accept
- 330. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-viewonly
- 331. ftp://ftp.x.org/
- 332. http://www.karlrunge.com/x11vnc/dtVncPopup
- 333. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-gone
- 334. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-afteraccept
- 335. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-users
- 336. http://www.karlrunge.com/x11vnc/blockdpy.c
- 337. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-accept
- 338. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-gone
+ 309. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 310. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
+ 311. http://www.karlrunge.com/x11vnc/index.html#tunnelling
+ 312. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel
+ 313. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-accept
+ 314. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-forever
+ 315. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-shared
+ 316. http://www.karlrunge.com/x11vnc/index.html#tunnelling
+ 317. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 318. http://www.karlrunge.com/x11vnc/index.html#faq-passwd
+ 319. http://www.karlrunge.com/x11vnc/index.html#faq-passwdfile
+ 320. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-allow
+ 321. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
+ 322. http://www.karlrunge.com/x11vnc/index.html#faq-tcp_wrappers
+ 323. http://www.karlrunge.com/x11vnc/index.html#faq-inetd
+ 324. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-listen
+ 325. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-allow
+ 326. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
+ 327. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-allow
+ 328. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
+ 329. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-input
+ 330. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-accept
+ 331. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-viewonly
+ 332. ftp://ftp.x.org/
+ 333. http://www.karlrunge.com/x11vnc/dtVncPopup
+ 334. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-gone
+ 335. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-afteraccept
+ 336. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-users
+ 337. http://www.karlrunge.com/x11vnc/blockdpy.c
+ 338. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-accept
339. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-gone
- 340. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-afteraccept
- 341. http://www.karlrunge.com/x11vnc/index.html#tunnelling
+ 340. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-gone
+ 341. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-afteraccept
342. http://www.karlrunge.com/x11vnc/index.html#tunnelling
- 343. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
- 344. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rfbauth
- 345. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-passwdfile
- 346. http://www.karlrunge.com/x11vnc/index.html#gateway_double_ssh
- 347. http://www.karlrunge.com/x11vnc/index.html#tunnelling
- 348. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-connect
- 349. http://www.stunnel.org/
- 350. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 351. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
- 352. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslverify
- 353. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-int
- 354. http://www.stunnel.org/
- 355. http://www.karlrunge.com/x11vnc/ssl.html
- 356. http://www.karlrunge.com/x11vnc/index.html#ssl_vncviewer
- 357. http://www.karlrunge.com/x11vnc/ssl.html
- 358. http://www.securityfocus.com/infocus/1677
- 359. http://www.karlrunge.com/x11vnc/ssl.html
- 360. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-inetd
- 361. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-viewers
- 362. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-httpdir
- 363. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-http
- 364. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 365. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-https
- 366. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
- 367. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 368. http://www.karlrunge.com/x11vnc/index.html#ssl_vncviewer
- 369. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-ext
- 370. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 371. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
- 372. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-viewers
- 373. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 374. http://www.openssl.org/
- 375. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
- 376. http://www.stunnel.org/
- 377. http://www.karlrunge.com/x11vnc/ssl.html
- 378. http://www.karlrunge.com/x11vnc/index.html#ssl_vncviewer
- 379. http://www.karlrunge.com/x11vnc/ssl.html
- 380. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-viewers
- 381. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-httpdir
- 382. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-http
- 383. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-https
- 384. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-portal
- 385. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-https
- 386. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-ext
- 387. http://www.karlrunge.com/x11vnc/ssl_vncviewer
- 388. http://www.karlrunge.com/x11vnc/ssl-portal.html
- 389. http://www.karlrunge.com/x11vnc/ssl.html
- 390. http://www.karlrunge.com/x11vnc/index.html#ssl_vncviewer
- 391. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-viewers
- 392. http://www.karlrunge.com/x11vnc/ssl-portal.html
- 393. http://www.karlrunge.com/x11vnc/ssl.html
- 394. http://www.karlrunge.com/x11vnc/index.html#display-manager-continuously
- 395. http://www.karlrunge.com/x11vnc/index.html#faq-inetd
- 396. http://www.karlrunge.com/x11vnc/index.html#faq-userlogin
- 397. http://www.karlrunge.com/x11vnc/index.html#x11vnc_loop
- 398. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-auth
- 399. http://www.karlrunge.com/x11vnc/index.html#dtlogin_solaris
- 400. http://www.jirka.org/gdm-documentation/x241.html
- 401. http://www.karlrunge.com/x11vnc/x11vnc_loop
- 402. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-loop
- 403. http://www.karlrunge.com/x11vnc/index.html#faq-xterminal-xauth
- 404. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-inetd
- 405. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-q
- 406. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-auth
- 407. http://www.karlrunge.com/x11vnc/index.html#faq-userlogin
- 408. http://www.karlrunge.com/x11vnc/index.html#faq-inetd
- 409. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
- 410. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-display_WAIT
- 411. http://www.karlrunge.com/x11vnc/index.html#stunnel-inetd
- 412. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-display_WAIT
- 413. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
- 414. http://www.karlrunge.com/x11vnc/index.html#faq-unix-passwords
- 415. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-users
- 416. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-int
- 417. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-loop
- 418. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-httpdir
- 419. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-http
- 420. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-connect
- 421. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remote
- 422. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-vncconnect
- 423. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-add_keysyms
- 424. http://www.karlrunge.com/x11vnc/index.html#faq-linuxvc
- 425. http://www.karlrunge.com/x11vnc/Xdummy
- 426. http://www.karlrunge.com/x11vnc/index.html#display-manager-continuously
- 427. http://www.karlrunge.com/x11vnc/shm_clear
- 428. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-onetile
- 429. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noshm
- 430. http://www.karlrunge.com/x11vnc/index.html#faq-noshm
- 431. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nap
- 432. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wait
- 433. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sb
- 434. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-onetile
- 435. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-fs
- 436. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-threads
- 437. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-defer
- 438. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
- 439. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-solid
- 440. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scrollcopyrect
- 441. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wireframe
- 442. http://www.tightvnc.com/
- 443. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wireframe
- 444. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scrollcopyrect
- 445. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-solid
- 446. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-speeds
- 447. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nodragging
- 448. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-fs
- 449. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wait
- 450. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-defer
- 451. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-progressive
- 452. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
- 453. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nosel
- 454. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nocursor
- 455. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nocursorpos
- 456. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-readtimeout
- 457. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-fixscreen
- 458. http://www.karlrunge.com/x11vnc/index.html#fb_read_slow
- 459. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xd_area
- 460. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xd_mem
- 461. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noxdamage
- 462. http://www.karlrunge.com/x11vnc/index.html#fb_read_slow
- 463. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-pointer_mode
+ 343. http://www.karlrunge.com/x11vnc/index.html#tunnelling
+ 344. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
+ 345. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rfbauth
+ 346. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-passwdfile
+ 347. http://www.karlrunge.com/x11vnc/index.html#gateway_double_ssh
+ 348. http://www.karlrunge.com/x11vnc/index.html#tunnelling
+ 349. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-connect
+ 350. http://www.stunnel.org/
+ 351. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 352. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
+ 353. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslverify
+ 354. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-int
+ 355. http://www.stunnel.org/
+ 356. http://www.karlrunge.com/x11vnc/ssl.html
+ 357. http://www.karlrunge.com/x11vnc/index.html#ssl_vncviewer
+ 358. http://www.karlrunge.com/x11vnc/ssl.html
+ 359. http://www.securityfocus.com/infocus/1677
+ 360. http://www.karlrunge.com/x11vnc/ssl.html
+ 361. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-inetd
+ 362. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-viewers
+ 363. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-httpdir
+ 364. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-http
+ 365. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 366. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-https
+ 367. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
+ 368. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 369. http://www.karlrunge.com/x11vnc/index.html#ssl_vncviewer
+ 370. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-ext
+ 371. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 372. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
+ 373. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-viewers
+ 374. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 375. http://www.openssl.org/
+ 376. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
+ 377. http://www.stunnel.org/
+ 378. http://www.karlrunge.com/x11vnc/ssl.html
+ 379. http://www.karlrunge.com/x11vnc/index.html#ssl_vncviewer
+ 380. http://www.karlrunge.com/x11vnc/ssl.html
+ 381. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-viewers
+ 382. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-httpdir
+ 383. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-http
+ 384. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-https
+ 385. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-portal
+ 386. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-https
+ 387. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-ext
+ 388. http://www.karlrunge.com/x11vnc/ssl_vncviewer
+ 389. http://www.karlrunge.com/x11vnc/ssl-portal.html
+ 390. http://www.karlrunge.com/x11vnc/ssl.html
+ 391. http://www.karlrunge.com/x11vnc/index.html#ssl_vncviewer
+ 392. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-viewers
+ 393. http://www.karlrunge.com/x11vnc/ssl-portal.html
+ 394. http://www.karlrunge.com/x11vnc/ssl.html
+ 395. http://www.karlrunge.com/x11vnc/index.html#display-manager-continuously
+ 396. http://www.karlrunge.com/x11vnc/index.html#faq-inetd
+ 397. http://www.karlrunge.com/x11vnc/index.html#faq-userlogin
+ 398. http://www.karlrunge.com/x11vnc/index.html#x11vnc_loop
+ 399. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-auth
+ 400. http://www.karlrunge.com/x11vnc/index.html#dtlogin_solaris
+ 401. http://www.jirka.org/gdm-documentation/x241.html
+ 402. http://www.karlrunge.com/x11vnc/x11vnc_loop
+ 403. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-loop
+ 404. http://www.karlrunge.com/x11vnc/index.html#faq-xterminal-xauth
+ 405. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-inetd
+ 406. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-q
+ 407. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-auth
+ 408. http://www.karlrunge.com/x11vnc/index.html#faq-userlogin
+ 409. http://www.karlrunge.com/x11vnc/index.html#faq-inetd
+ 410. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
+ 411. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-display_WAIT
+ 412. http://www.karlrunge.com/x11vnc/index.html#stunnel-inetd
+ 413. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-display_WAIT
+ 414. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
+ 415. http://www.karlrunge.com/x11vnc/index.html#faq-unix-passwords
+ 416. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-users
+ 417. http://www.karlrunge.com/x11vnc/index.html#faq-ssl-tunnel-int
+ 418. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-loop
+ 419. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-httpdir
+ 420. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-http
+ 421. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-connect
+ 422. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remote
+ 423. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-vncconnect
+ 424. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-add_keysyms
+ 425. http://www.karlrunge.com/x11vnc/index.html#faq-linuxvc
+ 426. http://www.karlrunge.com/x11vnc/Xdummy
+ 427. http://www.karlrunge.com/x11vnc/index.html#display-manager-continuously
+ 428. http://www.karlrunge.com/x11vnc/shm_clear
+ 429. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-onetile
+ 430. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noshm
+ 431. http://www.karlrunge.com/x11vnc/index.html#faq-noshm
+ 432. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nap
+ 433. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wait
+ 434. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sb
+ 435. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-onetile
+ 436. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-fs
+ 437. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-threads
+ 438. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-defer
+ 439. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
+ 440. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-solid
+ 441. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scrollcopyrect
+ 442. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wireframe
+ 443. http://www.tightvnc.com/
+ 444. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wireframe
+ 445. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scrollcopyrect
+ 446. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-solid
+ 447. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-speeds
+ 448. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nodragging
+ 449. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-fs
+ 450. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wait
+ 451. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-defer
+ 452. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-progressive
+ 453. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
+ 454. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nosel
+ 455. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nocursor
+ 456. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nocursorpos
+ 457. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-readtimeout
+ 458. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-fixscreen
+ 459. http://www.karlrunge.com/x11vnc/index.html#fb_read_slow
+ 460. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xd_area
+ 461. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xd_mem
+ 462. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noxdamage
+ 463. http://www.karlrunge.com/x11vnc/index.html#fb_read_slow
464. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-pointer_mode
- 465. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nodragging
- 466. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-pointer_mode
- 467. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-threads
- 468. http://www.karlrunge.com/x11vnc/index.html#faq-wireframe
- 469. http://www.karlrunge.com/x11vnc/index.html#faq-scrollcopyrect
- 470. http://www.karlrunge.com/x11vnc/index.html#faq-pointer-mode
- 471. http://www.karlrunge.com/x11vnc/index.html#fb_read_slow
- 472. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wireframe
+ 465. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-pointer_mode
+ 466. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nodragging
+ 467. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-pointer_mode
+ 468. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-threads
+ 469. http://www.karlrunge.com/x11vnc/index.html#faq-wireframe
+ 470. http://www.karlrunge.com/x11vnc/index.html#faq-scrollcopyrect
+ 471. http://www.karlrunge.com/x11vnc/index.html#faq-pointer-mode
+ 472. http://www.karlrunge.com/x11vnc/index.html#fb_read_slow
473. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wireframe
474. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wireframe
- 475. http://www.karlrunge.com/x11vnc/index.html#fb_read_slow
- 476. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scrollcopyrect
- 477. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wireframe
- 478. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wirecopyrect
- 479. http://www.karlrunge.com/x11vnc/index.html#faq-wireframe
- 480. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-fixscreen
- 481. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scr_skip
- 482. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scale
- 483. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scrollcopyrect
- 484. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-cursor
+ 475. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wireframe
+ 476. http://www.karlrunge.com/x11vnc/index.html#fb_read_slow
+ 477. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scrollcopyrect
+ 478. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wireframe
+ 479. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wirecopyrect
+ 480. http://www.karlrunge.com/x11vnc/index.html#faq-wireframe
+ 481. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-fixscreen
+ 482. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scr_skip
+ 483. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scale
+ 484. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scrollcopyrect
485. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-cursor
- 486. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-overlay
- 487. http://www.karlrunge.com/x11vnc/index.html#the-overlay-mode
- 488. http://www.karlrunge.com/x11vnc/index.html#solaris10-build
- 489. http://www.karlrunge.com/x11vnc/index.html#faq-xfixes-alpha-hacks
- 490. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-alphacut
- 491. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-alphafrac
- 492. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-alpharemove
- 493. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nocursorshape
- 494. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noalphablend
- 495. http://www.tightvnc.com/
- 496. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nocursor
- 497. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-cursorpos
- 498. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nocursorpos
- 499. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nocursorshape
- 500. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-buttonmap
- 501. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-debug_pointer
- 502. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-buttonmap
- 503. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-modtweak
- 504. http://www.karlrunge.com/x11vnc/index.html#faq-greaterless
- 505. http://www.karlrunge.com/x11vnc/index.html#faq-xkbmodtweak
- 506. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-debug_keyboard
- 507. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xkb
- 508. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sloppy_keys
- 509. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-modtweak
+ 486. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-cursor
+ 487. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-overlay
+ 488. http://www.karlrunge.com/x11vnc/index.html#the-overlay-mode
+ 489. http://www.karlrunge.com/x11vnc/index.html#solaris10-build
+ 490. http://www.karlrunge.com/x11vnc/index.html#faq-xfixes-alpha-hacks
+ 491. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-alphacut
+ 492. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-alphafrac
+ 493. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-alpharemove
+ 494. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nocursorshape
+ 495. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noalphablend
+ 496. http://www.tightvnc.com/
+ 497. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nocursor
+ 498. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-cursorpos
+ 499. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nocursorpos
+ 500. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nocursorshape
+ 501. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-buttonmap
+ 502. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-debug_pointer
+ 503. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-buttonmap
+ 504. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-modtweak
+ 505. http://www.karlrunge.com/x11vnc/index.html#faq-greaterless
+ 506. http://www.karlrunge.com/x11vnc/index.html#faq-xkbmodtweak
+ 507. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-debug_keyboard
+ 508. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xkb
+ 509. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sloppy_keys
510. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-modtweak
- 511. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
- 512. http://www.karlrunge.com/x11vnc/index.html#faq-xkbmodtweak
- 513. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-debug_keyboard
- 514. http://www.karlrunge.com/x11vnc/index.html#faq-greaterless
- 515. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xkb
- 516. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sloppy_keys
- 517. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-modtweak
- 518. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xkb
+ 511. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-modtweak
+ 512. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
+ 513. http://www.karlrunge.com/x11vnc/index.html#faq-xkbmodtweak
+ 514. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-debug_keyboard
+ 515. http://www.karlrunge.com/x11vnc/index.html#faq-greaterless
+ 516. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xkb
+ 517. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sloppy_keys
+ 518. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-modtweak
519. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xkb
- 520. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-skip_keycodes
- 521. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
- 522. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-add_keysyms
- 523. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
+ 520. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xkb
+ 521. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-skip_keycodes
+ 522. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
+ 523. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-add_keysyms
524. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
- 525. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-add_keysyms
- 526. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-norepeat
+ 525. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
+ 526. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-add_keysyms
527. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-norepeat
- 528. http://www.karlrunge.com/x11vnc/index.html#faq-display-manager
- 529. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
+ 528. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-norepeat
+ 529. http://www.karlrunge.com/x11vnc/index.html#faq-display-manager
530. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
531. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
532. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
- 533. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-skip_lockkeys
- 534. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
- 535. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nomodtweak
- 536. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-capslock
- 537. http://www.karlrunge.com/x11vnc/index.html#faq-scaling
- 538. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scale
- 539. http://www.cus.cam.ac.uk/~ssb22/source/vnc-magnification.html
- 540. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rfbport
- 541. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-gui
- 542. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-connect
- 543. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scale_cursor
- 544. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-blackout
- 545. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xinerama
+ 533. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
+ 534. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-skip_lockkeys
+ 535. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remap
+ 536. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nomodtweak
+ 537. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-capslock
+ 538. http://www.karlrunge.com/x11vnc/index.html#faq-scaling
+ 539. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scale
+ 540. http://www.cus.cam.ac.uk/~ssb22/source/vnc-magnification.html
+ 541. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rfbport
+ 542. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-gui
+ 543. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-connect
+ 544. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scale_cursor
+ 545. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-blackout
546. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xinerama
- 547. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xwarppointer
- 548. http://www.karlrunge.com/x11vnc/index.html#faq-solshm
- 549. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-onetile
- 550. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noshm
- 551. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-clip
- 552. http://www.karlrunge.com/x11vnc/index.html#faq-xinerama
- 553. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
+ 547. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xinerama
+ 548. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xwarppointer
+ 549. http://www.karlrunge.com/x11vnc/index.html#faq-solshm
+ 550. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-onetile
+ 551. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noshm
+ 552. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-clip
+ 553. http://www.karlrunge.com/x11vnc/index.html#faq-xinerama
554. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
- 555. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xrandr
- 556. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-padgeom
- 557. http://www.karlrunge.com/x11vnc/index.html#faq-linuxvc
- 558. http://www.karlrunge.com/x11vnc/index.html#faq-rawfb
- 559. http://www.karlrunge.com/x11vnc/index.html#faq-linuxvc
- 560. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
- 561. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
- 562. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-pipeinput
+ 555. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
+ 556. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xrandr
+ 557. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-padgeom
+ 558. http://www.karlrunge.com/x11vnc/index.html#faq-linuxvc
+ 559. http://www.karlrunge.com/x11vnc/index.html#faq-rawfb
+ 560. http://www.karlrunge.com/x11vnc/index.html#faq-linuxvc
+ 561. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
+ 562. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
563. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-pipeinput
- 564. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-snapfb
- 565. http://www.karlrunge.com/x11vnc/index.html#faq-video
- 566. http://www.karlrunge.com/x11vnc/index.html#faq-xvfb
- 567. http://www.karlrunge.com/x11vnc/index.html#faq-qt-embedded
- 568. http://www.karlrunge.com/x11vnc/index.html#faq-video
- 569. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
- 570. http://www.karlrunge.com/x11vnc/index.html#faq-video
- 571. http://www.karlrunge.com/x11vnc/index.html#faq-linuxvc
- 572. http://www.karlrunge.com/x11vnc/index.html#faq-qt-embedded
- 573. http://www.karlrunge.com/x11vnc/index.html#faq-vmware
- 574. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
- 575. http://www.karlrunge.com/x11vnc/index.html#faq-rawfb
- 576. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-snapfb
- 577. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-24to32
- 578. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wait
- 579. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-slow_fb
- 580. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-defer
- 581. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-freqtab
- 582. http://www.karlrunge.com/x11vnc/index.html#faq-rawfb
- 583. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-pipeinput
+ 564. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-pipeinput
+ 565. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-snapfb
+ 566. http://www.karlrunge.com/x11vnc/index.html#faq-video
+ 567. http://www.karlrunge.com/x11vnc/index.html#faq-xvfb
+ 568. http://www.karlrunge.com/x11vnc/index.html#faq-qt-embedded
+ 569. http://www.karlrunge.com/x11vnc/index.html#faq-video
+ 570. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
+ 571. http://www.karlrunge.com/x11vnc/index.html#faq-video
+ 572. http://www.karlrunge.com/x11vnc/index.html#faq-linuxvc
+ 573. http://www.karlrunge.com/x11vnc/index.html#faq-qt-embedded
+ 574. http://www.karlrunge.com/x11vnc/index.html#faq-vmware
+ 575. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
+ 576. http://www.karlrunge.com/x11vnc/index.html#faq-rawfb
+ 577. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-snapfb
+ 578. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-24to32
+ 579. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wait
+ 580. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-slow_fb
+ 581. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-defer
+ 582. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-freqtab
+ 583. http://www.karlrunge.com/x11vnc/index.html#faq-rawfb
584. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-pipeinput
- 585. http://www.unixuser.org/~euske/vnc2swf/
- 586. http://wolphination.com/linux/2006/06/30/how-to-record-videos-of-your-desktop/
- 587. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nosel
- 588. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noprimary
- 589. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-seldir
- 590. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-input
- 591. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nofilexfer
- 592. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nobell
- 593. http://www.karlrunge.com/x11vnc/index.html#faq-sound
+ 585. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-pipeinput
+ 586. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
+ 587. http://www.unixuser.org/~euske/vnc2swf/
+ 588. http://wolphination.com/linux/2006/06/30/how-to-record-videos-of-your-desktop/
+ 589. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nosel
+ 590. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noprimary
+ 591. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-seldir
+ 592. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-input
+ 593. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nofilexfer
+ 594. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nobell
+ 595. http://www.karlrunge.com/x11vnc/index.html#faq-sound
=======================================================================
http://www.karlrunge.com/x11vnc/chainingssh.html:
@@ -7377,7 +7395,7 @@ x11vnc: a VNC server for real X displays
Here are all of x11vnc command line options:
% x11vnc -opts (see below for -help long descriptions)
-x11vnc: allow VNC connections to real X11 displays. 0.8.3 lastmod: 2006-07-15
+x11vnc: allow VNC connections to real X11 displays. 0.8.3 lastmod: 2006-07-17
x11vnc options:
-display disp -auth file -id windowid
@@ -7475,7 +7493,7 @@ libvncserver-tight-extension options:
% x11vnc -help
-x11vnc: allow VNC connections to real X11 displays. 0.8.3 lastmod: 2006-07-15
+x11vnc: allow VNC connections to real X11 displays. 0.8.3 lastmod: 2006-07-17
(type "x11vnc -opts" to just list the options.)
diff --git a/x11vnc/cleanup.c b/x11vnc/cleanup.c
index 6e6e2cd..c6992fb 100644
--- a/x11vnc/cleanup.c
+++ b/x11vnc/cleanup.c
@@ -427,10 +427,14 @@ void initialize_signals(void) {
signal(SIGPIPE, interrupted);
}
+#if NO_X11
+ return;
+#else
X_LOCK;
Xerror_def = XSetErrorHandler(Xerror);
XIOerr_def = XSetIOErrorHandler(XIOerr);
X_UNLOCK;
+#endif /* NO_X11 */
}
void unset_signals(void) {
diff --git a/x11vnc/connections.c b/x11vnc/connections.c
index ac9d40c..159c884 100644
--- a/x11vnc/connections.c
+++ b/x11vnc/connections.c
@@ -911,6 +911,10 @@ static unsigned char t2x2_bits[] = {
KeyCode key_o;
RAWFB_RET(0)
+#if NO_X11
+ nox11_exit(1);
+ return 0;
+#else
if (! accept) {
sprintf(str_y, "OK");
@@ -1168,6 +1172,7 @@ static unsigned char t2x2_bits[] = {
X_UNLOCK;
return ret;
+#endif /* NO_X11 */
}
/*
@@ -1659,14 +1664,18 @@ void reverse_connect(char *str) {
*/
void set_vnc_connect_prop(char *str) {
RAWFB_RET_VOID
+#if !NO_X11
XChangeProperty(dpy, rootwin, vnc_connect_prop, XA_STRING, 8,
PropModeReplace, (unsigned char *)str, strlen(str));
+#endif /* NO_X11 */
}
void set_x11vnc_remote_prop(char *str) {
RAWFB_RET_VOID
+#if !NO_X11
XChangeProperty(dpy, rootwin, x11vnc_remote_prop, XA_STRING, 8,
PropModeReplace, (unsigned char *)str, strlen(str));
+#endif /* NO_X11 */
}
void read_vnc_connect_prop(int nomsg) {
@@ -1684,6 +1693,9 @@ void read_vnc_connect_prop(int nomsg) {
return;
}
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
/* read the property value into vnc_connect_str: */
do {
@@ -1713,6 +1725,7 @@ void read_vnc_connect_prop(int nomsg) {
} else {
rfbLog("read VNC_CONNECT: %s\n", vnc_connect_str);
}
+#endif /* NO_X11 */
}
void read_x11vnc_remote_prop(int nomsg) {
@@ -1730,6 +1743,9 @@ void read_x11vnc_remote_prop(int nomsg) {
return;
}
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
/* read the property value into x11vnc_remote_str: */
do {
@@ -1777,6 +1793,7 @@ void read_x11vnc_remote_prop(int nomsg) {
} else {
rfbLog("read X11VNC_REMOTE: %s\n", x11vnc_remote_str);
}
+#endif /* NO_X11 */
}
/*
@@ -2176,6 +2193,9 @@ void send_client_info(char *str) {
void adjust_grabs(int grab, int quiet) {
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
/* n.b. caller decides to X_LOCK or not. */
if (grab) {
if (grab_kbd) {
@@ -2206,6 +2226,7 @@ void adjust_grabs(int grab, int quiet) {
XUngrabPointer(dpy, CurrentTime);
}
}
+#endif /* NO_X11 */
}
void check_new_clients(void) {
diff --git a/x11vnc/cursor.c b/x11vnc/cursor.c
index 90b5fe9..c0fe222 100644
--- a/x11vnc/cursor.c
+++ b/x11vnc/cursor.c
@@ -828,6 +828,9 @@ static void tree_descend_cursor(int *depth, Window *w, win_str_info_t *winfo) {
XErrorHandler old_handler;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
X_LOCK;
@@ -914,6 +917,7 @@ static void tree_descend_cursor(int *depth, Window *w, win_str_info_t *winfo) {
*depth = descend;
*w = wins[descend];
+#endif /* NO_X11 */
}
void initialize_xfixes(void) {
@@ -1456,6 +1460,7 @@ int get_which_cursor(void) {
unsigned int w, h, bw, d;
Window r;
+#if !NO_X11
trapped_xerror = 0;
X_LOCK;
old_handler = XSetErrorHandler(trap_xerror);
@@ -1470,6 +1475,7 @@ int get_which_cursor(void) {
XSetErrorHandler(old_handler);
X_UNLOCK;
trapped_xerror = 0;
+#endif /* NO_X11 */
}
if (which == which0) {
/* the string "term" mean I-beam. */
@@ -1781,6 +1787,9 @@ int check_x11_pointer(void) {
unsigned int mask;
RAWFB_RET(0)
+#if NO_X11
+ return 0;
+#else
if (unixpw_in_progress) return 0;
@@ -1811,5 +1820,6 @@ int check_x11_pointer(void) {
/* change the cursor shape if necessary */
return set_cursor(x, y, get_which_cursor());
+#endif /* NO_X11 */
}
diff --git a/x11vnc/gui.c b/x11vnc/gui.c
index 69ce0ed..a02bd52 100644
--- a/x11vnc/gui.c
+++ b/x11vnc/gui.c
@@ -46,6 +46,9 @@ static Window tweak_tk_window_id(Window win) {
char *name = NULL;
Window parent, new;
+#if NO_X11
+ return None;
+#else
/* hack for tk, does not report outermost window */
new = win;
parent = parent_window(win, &name);
@@ -60,6 +63,7 @@ static Window tweak_tk_window_id(Window win) {
XFree(name);
}
return new;
+#endif /* NO_X11 */
}
int tray_embed(Window iconwin, int remove) {
@@ -73,6 +77,9 @@ int tray_embed(Window iconwin, int remove) {
long data = 0;
RAWFB_RET(0)
+#if NO_X11
+ return 0;
+#else
if (remove) {
if (!valid_window(iconwin, &attr, 1)) {
@@ -153,6 +160,7 @@ int tray_embed(Window iconwin, int remove) {
XSetErrorHandler(old_handler);
trapped_xerror = 0;
return 1;
+#endif /* NO_X11 */
}
static int tray_manager_running(Display *d, Window *manager) {
@@ -161,6 +169,9 @@ static int tray_manager_running(Display *d, Window *manager) {
Window tray_win;
RAWFB_RET(0)
+#if NO_X11
+ return 0;
+#else
if (manager) {
*manager = None;
@@ -182,6 +193,7 @@ static int tray_manager_running(Display *d, Window *manager) {
} else {
return 1;
}
+#endif /* NO_X11 */
}
static char *gui_geometry = NULL;
diff --git a/x11vnc/keyboard.c b/x11vnc/keyboard.c
index e10ca41..0f05106 100644
--- a/x11vnc/keyboard.c
+++ b/x11vnc/keyboard.c
@@ -13,6 +13,7 @@
#include "unixpw.h"
#include "v4l.h"
#include "linuxfb.h"
+#include "uinput.h"
void get_keystate(int *keystate);
void clear_modifiers(int init);
@@ -58,6 +59,9 @@ void get_keystate(int *keystate) {
char keys[32];
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
/* n.b. caller decides to X_LOCK or not. */
XQueryKeymap(dpy, keys);
@@ -73,6 +77,7 @@ void get_keystate(int *keystate) {
c = c >> 1;
}
}
+#endif /* NO_X11 */
}
/*
@@ -90,6 +95,9 @@ void clear_modifiers(int init) {
KeyCode keycode;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
/* n.b. caller decides to X_LOCK or not. */
if (first) {
@@ -144,6 +152,7 @@ void clear_modifiers(int init) {
XTestFakeKeyEvent_wr(dpy, keycode, False, CurrentTime);
}
XFlush_wr(dpy);
+#endif /* NO_X11 */
}
static KeySym simple_mods[] = {
@@ -251,11 +260,15 @@ int get_autorepeat_state(void) {
XKeyboardState kstate;
RAWFB_RET(0)
+#if NO_X11
+ return 0;
+#else
X_LOCK;
XGetKeyboardControl(dpy, &kstate);
X_UNLOCK;
return kstate.global_auto_repeat;
+#endif /* NO_X11 */
}
int get_initial_autorepeat_state(void) {
@@ -270,6 +283,9 @@ void autorepeat(int restore, int bequiet) {
XKeyboardControl kctrl;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
if (restore) {
if (save_auto_repeat < 0) {
@@ -316,6 +332,7 @@ void autorepeat(int restore, int bequiet) {
}
}
}
+#endif /* NO_X11 */
}
/*
@@ -367,6 +384,9 @@ int add_keysym(KeySym keysym) {
}
RAWFB_RET(0)
+#if NO_X11
+ return 0;
+#else
if (keysym == NoSymbol) {
return 0;
@@ -440,6 +460,7 @@ int add_keysym(KeySym keysym) {
}
XFree(keymap);
return ret;
+#endif /* NO_X11 */
}
static void delete_keycode(KeyCode kc, int bequiet) {
@@ -449,6 +470,9 @@ static void delete_keycode(KeyCode kc, int bequiet) {
char *str;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
XDisplayKeycodes(dpy, &minkey, &maxkey);
keymap = XGetKeyboardMapping(dpy, minkey, (maxkey - minkey + 1),
@@ -469,6 +493,7 @@ static void delete_keycode(KeyCode kc, int bequiet) {
XFree(keymap);
XFlush_wr(dpy);
+#endif /* NO_X11 */
}
static int count_added_keycodes(void) {
@@ -771,6 +796,9 @@ int sloppy_key_check(int key, rfbBool down, rfbKeySym keysym, int *new) {
}
RAWFB_RET(0)
+#if NO_X11
+ return 0;
+#else
if (!down && !keycode_state[key] && !IsModifierKey(keysym)) {
int i, cnt = 0, downkey = -1;
@@ -817,6 +845,7 @@ int sloppy_key_check(int key, rfbBool down, rfbKeySym keysym, int *new) {
}
}
return 0;
+#endif /* NO_X11 */
}
#if !LIBVNCSERVER_HAVE_XKEYBOARD || SKIP_XKB
@@ -2190,6 +2219,9 @@ void initialize_modtweak(void) {
}
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
X_LOCK;
XDisplayKeycodes(dpy, &minkey, &maxkey);
@@ -2267,6 +2299,7 @@ void initialize_modtweak(void) {
XFree ((void *) keymap);
X_UNLOCK;
+#endif /* NO_X11 */
}
/*
@@ -2331,6 +2364,9 @@ static void modifier_tweak_keyboard(rfbBool down, rfbKeySym keysym,
int tweak = 0;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
if (use_xkb_modtweak) {
xkb_tweak_keyboard(down, keysym, client);
@@ -2406,6 +2442,7 @@ static void modifier_tweak_keyboard(rfbBool down, rfbKeySym keysym,
if ( tweak ) {
tweak_mod(modifiers[keysym], False);
}
+#endif /* NO_X11 */
}
void initialize_keyboard_and_pointer(void) {
@@ -2781,6 +2818,8 @@ void keyboard(rfbBool down, rfbKeySym keysym, rfbClientPtr client) {
if (max_keyrepeat_always > 0.0) {
max_keyrepeat_time = max_keyrepeat_always;
}
+#else
+ if (0) {max_keyrepeat_always=0;}
#endif
if (!down && skipped_last_down) {
int db = debug_scroll;
diff --git a/x11vnc/linuxfb.c b/x11vnc/linuxfb.c
index 4fd3f22..3649cd4 100644
--- a/x11vnc/linuxfb.c
+++ b/x11vnc/linuxfb.c
@@ -7,6 +7,8 @@
#include "screen.h"
#include "pointer.h"
#include "allowed_input_t.h"
+#include "uinput.h"
+#include "keyboard.h"
#if LIBVNCSERVER_HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
diff --git a/x11vnc/nox11.h b/x11vnc/nox11.h
new file mode 100644
index 0000000..ae0313f
--- /dev/null
+++ b/x11vnc/nox11.h
@@ -0,0 +1,6665 @@
+#undef LIBVNCSERVER_HAVE_XSHM
+#define LIBVNCSERVER_HAVE_XSHM 0
+#undef LIBVNCSERVER_HAVE_XTEST
+#define LIBVNCSERVER_HAVE_XTEST 0
+#undef LIBVNCSERVER_HAVE_XTESTGRABCONTROL
+#define LIBVNCSERVER_HAVE_XTESTGRABCONTROL 0
+#undef LIBVNCSERVER_HAVE_XKEYBOARD
+#define LIBVNCSERVER_HAVE_XKEYBOARD 0
+#undef LIBVNCSERVER_HAVE_LIBXINERAMA
+#define LIBVNCSERVER_HAVE_LIBXINERAMA 0
+#undef LIBVNCSERVER_HAVE_LIBXRANDR
+#define LIBVNCSERVER_HAVE_LIBXRANDR 0
+#undef LIBVNCSERVER_HAVE_LIBXFIXES
+#define LIBVNCSERVER_HAVE_LIBXFIXES 0
+#undef LIBVNCSERVER_HAVE_LIBXDAMAGE
+#define LIBVNCSERVER_HAVE_LIBXDAMAGE 0
+#undef LIBVNCSERVER_HAVE_RECORD
+#define LIBVNCSERVER_HAVE_RECORD 0
+#undef LIBVNCSERVER_HAVE_LIBXTRAP
+#define LIBVNCSERVER_HAVE_LIBXTRAP 0
+#undef LIBVNCSERVER_HAVE_SOLARIS_XREADSCREEN
+#define LIBVNCSERVER_HAVE_SOLARIS_XREADSCREEN 0
+#undef LIBVNCSERVER_HAVE_IRIX_XREADDISPLAY
+#define LIBVNCSERVER_HAVE_IRIX_XREADDISPLAY 0
+#undef LIBVNCSERVER_HAVE_FBPM
+#define LIBVNCSERVER_HAVE_FBPM 0
+
+/* default keysyms */
+#if 0
+/* XXX go with the subset in rfb/keysym.h for now */
+#define XK_MISCELLANY
+#define XK_XKB_KEYS
+#define XK_LATIN1
+#define XK_LATIN2
+#define XK_LATIN3
+#define XK_LATIN4
+#define XK_LATIN8
+#define XK_LATIN9
+#define XK_CAUCASUS
+#define XK_GREEK
+#define XK_KATAKANA
+#define XK_ARABIC
+#define XK_CYRILLIC
+#define XK_HEBREW
+#define XK_THAI
+#define XK_KOREAN
+#define XK_ARMENIAN
+#define XK_GEORGIAN
+#define XK_VIETNAMESE
+#define XK_CURRENCY
+#endif
+
+/*
+ * $Xorg: X.h,v 1.4 2001/02/09 02:03:22 xorgcvs Exp $
+ */
+
+/* Definitions for the X window system likely to be used by applications */
+
+#ifndef X_H
+#define X_H
+
+/***********************************************************
+
+Copyright 1987, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+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
+OPEN GROUP 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 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+
+ All Rights Reserved
+
+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 Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+/* $XFree86: xc/include/X.h,v 1.5 2001/12/14 19:53:25 dawes Exp $ */
+
+#define X_PROTOCOL 11 /* current protocol version */
+#define X_PROTOCOL_REVISION 0 /* current minor version */
+
+/* Resources */
+
+/*
+ * _XSERVER64 must ONLY be defined when compiling X server sources on
+ * systems where unsigned long is not 32 bits, must NOT be used in
+ * client or library code.
+ */
+#ifndef _XSERVER64
+# ifndef _XTYPEDEF_XID
+# define _XTYPEDEF_XID
+typedef unsigned long XID;
+# endif
+# ifndef _XTYPEDEF_MASK
+# define _XTYPEDEF_MASK
+typedef unsigned long Mask;
+# endif
+# ifndef _XTYPEDEF_ATOM
+# define _XTYPEDEF_ATOM
+typedef unsigned long Atom; /* Also in Xdefs.h */
+# endif
+typedef unsigned long VisualID;
+typedef unsigned long Time;
+#else
+# include <X11/Xmd.h>
+# ifndef _XTYPEDEF_XID
+# define _XTYPEDEF_XID
+typedef CARD32 XID;
+# endif
+# ifndef _XTYPEDEF_MASK
+# define _XTYPEDEF_MASK
+typedef CARD32 Mask;
+# endif
+# ifndef _XTYPEDEF_ATOM
+# define _XTYPEDEF_ATOM
+typedef CARD32 Atom;
+# endif
+typedef CARD32 VisualID;
+typedef CARD32 Time;
+#endif
+
+typedef XID Window;
+typedef XID Drawable;
+#ifndef _XTYPEDEF_FONT
+# define _XTYPEDEF_FONT
+typedef XID Font;
+#endif
+typedef XID Pixmap;
+typedef XID Cursor;
+typedef XID Colormap;
+typedef XID GContext;
+typedef XID KeySym;
+
+typedef unsigned char KeyCode;
+
+/*****************************************************************
+ * RESERVED RESOURCE AND CONSTANT DEFINITIONS
+ *****************************************************************/
+
+#ifndef None
+#define None 0L /* universal null resource or null atom */
+#endif
+
+#define ParentRelative 1L /* background pixmap in CreateWindow
+ and ChangeWindowAttributes */
+
+#define CopyFromParent 0L /* border pixmap in CreateWindow
+ and ChangeWindowAttributes
+ special VisualID and special window
+ class passed to CreateWindow */
+
+#define PointerWindow 0L /* destination window in SendEvent */
+#define InputFocus 1L /* destination window in SendEvent */
+
+#define PointerRoot 1L /* focus window in SetInputFocus */
+
+#define AnyPropertyType 0L /* special Atom, passed to GetProperty */
+
+#define AnyKey 0L /* special Key Code, passed to GrabKey */
+
+#define AnyButton 0L /* special Button Code, passed to GrabButton */
+
+#define AllTemporary 0L /* special Resource ID passed to KillClient */
+
+#define CurrentTime 0L /* special Time */
+
+#define NoSymbol 0L /* special KeySym */
+
+/*****************************************************************
+ * EVENT DEFINITIONS
+ *****************************************************************/
+
+/* Input Event Masks. Used as event-mask window attribute and as arguments
+ to Grab requests. Not to be confused with event names. */
+
+#define NoEventMask 0L
+#define KeyPressMask (1L<<0)
+#define KeyReleaseMask (1L<<1)
+#define ButtonPressMask (1L<<2)
+#define ButtonReleaseMask (1L<<3)
+#define EnterWindowMask (1L<<4)
+#define LeaveWindowMask (1L<<5)
+#define PointerMotionMask (1L<<6)
+#define PointerMotionHintMask (1L<<7)
+#define Button1MotionMask (1L<<8)
+#define Button2MotionMask (1L<<9)
+#define Button3MotionMask (1L<<10)
+#define Button4MotionMask (1L<<11)
+#define Button5MotionMask (1L<<12)
+#define ButtonMotionMask (1L<<13)
+#define KeymapStateMask (1L<<14)
+#define ExposureMask (1L<<15)
+#define VisibilityChangeMask (1L<<16)
+#define StructureNotifyMask (1L<<17)
+#define ResizeRedirectMask (1L<<18)
+#define SubstructureNotifyMask (1L<<19)
+#define SubstructureRedirectMask (1L<<20)
+#define FocusChangeMask (1L<<21)
+#define PropertyChangeMask (1L<<22)
+#define ColormapChangeMask (1L<<23)
+#define OwnerGrabButtonMask (1L<<24)
+
+/* Event names. Used in "type" field in XEvent structures. Not to be
+confused with event masks above. They start from 2 because 0 and 1
+are reserved in the protocol for errors and replies. */
+
+#define KeyPress 2
+#define KeyRelease 3
+#define ButtonPress 4
+#define ButtonRelease 5
+#define MotionNotify 6
+#define EnterNotify 7
+#define LeaveNotify 8
+#define FocusIn 9
+#define FocusOut 10
+#define KeymapNotify 11
+#define Expose 12
+#define GraphicsExpose 13
+#define NoExpose 14
+#define VisibilityNotify 15
+#define CreateNotify 16
+#define DestroyNotify 17
+#define UnmapNotify 18
+#define MapNotify 19
+#define MapRequest 20
+#define ReparentNotify 21
+#define ConfigureNotify 22
+#define ConfigureRequest 23
+#define GravityNotify 24
+#define ResizeRequest 25
+#define CirculateNotify 26
+#define CirculateRequest 27
+#define PropertyNotify 28
+#define SelectionClear 29
+#define SelectionRequest 30
+#define SelectionNotify 31
+#define ColormapNotify 32
+#define ClientMessage 33
+#define MappingNotify 34
+#define LASTEvent 35 /* must be bigger than any event # */
+
+
+/* Key masks. Used as modifiers to GrabButton and GrabKey, results of QueryPointer,
+ state in various key-, mouse-, and button-related events. */
+
+#define ShiftMask (1<<0)
+#define LockMask (1<<1)
+#define ControlMask (1<<2)
+#define Mod1Mask (1<<3)
+#define Mod2Mask (1<<4)
+#define Mod3Mask (1<<5)
+#define Mod4Mask (1<<6)
+#define Mod5Mask (1<<7)
+
+/* modifier names. Used to build a SetModifierMapping request or
+ to read a GetModifierMapping request. These correspond to the
+ masks defined above. */
+#define ShiftMapIndex 0
+#define LockMapIndex 1
+#define ControlMapIndex 2
+#define Mod1MapIndex 3
+#define Mod2MapIndex 4
+#define Mod3MapIndex 5
+#define Mod4MapIndex 6
+#define Mod5MapIndex 7
+
+
+/* button masks. Used in same manner as Key masks above. Not to be confused
+ with button names below. */
+
+#define Button1Mask (1<<8)
+#define Button2Mask (1<<9)
+#define Button3Mask (1<<10)
+#define Button4Mask (1<<11)
+#define Button5Mask (1<<12)
+
+#define AnyModifier (1<<15) /* used in GrabButton, GrabKey */
+
+
+/* button names. Used as arguments to GrabButton and as detail in ButtonPress
+ and ButtonRelease events. Not to be confused with button masks above.
+ Note that 0 is already defined above as "AnyButton". */
+
+#define Button1 1
+#define Button2 2
+#define Button3 3
+#define Button4 4
+#define Button5 5
+
+/* Notify modes */
+
+#define NotifyNormal 0
+#define NotifyGrab 1
+#define NotifyUngrab 2
+#define NotifyWhileGrabbed 3
+
+#define NotifyHint 1 /* for MotionNotify events */
+
+/* Notify detail */
+
+#define NotifyAncestor 0
+#define NotifyVirtual 1
+#define NotifyInferior 2
+#define NotifyNonlinear 3
+#define NotifyNonlinearVirtual 4
+#define NotifyPointer 5
+#define NotifyPointerRoot 6
+#define NotifyDetailNone 7
+
+/* Visibility notify */
+
+#define VisibilityUnobscured 0
+#define VisibilityPartiallyObscured 1
+#define VisibilityFullyObscured 2
+
+/* Circulation request */
+
+#define PlaceOnTop 0
+#define PlaceOnBottom 1
+
+/* protocol families */
+
+#define FamilyInternet 0
+#define FamilyDECnet 1
+#define FamilyChaos 2
+
+/* Property notification */
+
+#define PropertyNewValue 0
+#define PropertyDelete 1
+
+/* Color Map notification */
+
+#define ColormapUninstalled 0
+#define ColormapInstalled 1
+
+/* GrabPointer, GrabButton, GrabKeyboard, GrabKey Modes */
+
+#define GrabModeSync 0
+#define GrabModeAsync 1
+
+/* GrabPointer, GrabKeyboard reply status */
+
+#define GrabSuccess 0
+#define AlreadyGrabbed 1
+#define GrabInvalidTime 2
+#define GrabNotViewable 3
+#define GrabFrozen 4
+
+/* AllowEvents modes */
+
+#define AsyncPointer 0
+#define SyncPointer 1
+#define ReplayPointer 2
+#define AsyncKeyboard 3
+#define SyncKeyboard 4
+#define ReplayKeyboard 5
+#define AsyncBoth 6
+#define SyncBoth 7
+
+/* Used in SetInputFocus, GetInputFocus */
+
+#define RevertToNone (int)None
+#define RevertToPointerRoot (int)PointerRoot
+#define RevertToParent 2
+
+/*****************************************************************
+ * ERROR CODES
+ *****************************************************************/
+
+#define Success 0 /* everything's okay */
+#define BadRequest 1 /* bad request code */
+#define BadValue 2 /* int parameter out of range */
+#define BadWindow 3 /* parameter not a Window */
+#define BadPixmap 4 /* parameter not a Pixmap */
+#define BadAtom 5 /* parameter not an Atom */
+#define BadCursor 6 /* parameter not a Cursor */
+#define BadFont 7 /* parameter not a Font */
+#define BadMatch 8 /* parameter mismatch */
+#define BadDrawable 9 /* parameter not a Pixmap or Window */
+#define BadAccess 10 /* depending on context:
+ - key/button already grabbed
+ - attempt to free an illegal
+ cmap entry
+ - attempt to store into a read-only
+ color map entry.
+ - attempt to modify the access control
+ list from other than the local host.
+ */
+#define BadAlloc 11 /* insufficient resources */
+#define BadColor 12 /* no such colormap */
+#define BadGC 13 /* parameter not a GC */
+#define BadIDChoice 14 /* choice not in range or already used */
+#define BadName 15 /* font or color name doesn't exist */
+#define BadLength 16 /* Request length incorrect */
+#define BadImplementation 17 /* server is defective */
+
+#define FirstExtensionError 128
+#define LastExtensionError 255
+
+/*****************************************************************
+ * WINDOW DEFINITIONS
+ *****************************************************************/
+
+/* Window classes used by CreateWindow */
+/* Note that CopyFromParent is already defined as 0 above */
+
+#define InputOutput 1
+#define InputOnly 2
+
+/* Window attributes for CreateWindow and ChangeWindowAttributes */
+
+#define CWBackPixmap (1L<<0)
+#define CWBackPixel (1L<<1)
+#define CWBorderPixmap (1L<<2)
+#define CWBorderPixel (1L<<3)
+#define CWBitGravity (1L<<4)
+#define CWWinGravity (1L<<5)
+#define CWBackingStore (1L<<6)
+#define CWBackingPlanes (1L<<7)
+#define CWBackingPixel (1L<<8)
+#define CWOverrideRedirect (1L<<9)
+#define CWSaveUnder (1L<<10)
+#define CWEventMask (1L<<11)
+#define CWDontPropagate (1L<<12)
+#define CWColormap (1L<<13)
+#define CWCursor (1L<<14)
+
+/* ConfigureWindow structure */
+
+#define CWX (1<<0)
+#define CWY (1<<1)
+#define CWWidth (1<<2)
+#define CWHeight (1<<3)
+#define CWBorderWidth (1<<4)
+#define CWSibling (1<<5)
+#define CWStackMode (1<<6)
+
+
+/* Bit Gravity */
+
+#define ForgetGravity 0
+#define NorthWestGravity 1
+#define NorthGravity 2
+#define NorthEastGravity 3
+#define WestGravity 4
+#define CenterGravity 5
+#define EastGravity 6
+#define SouthWestGravity 7
+#define SouthGravity 8
+#define SouthEastGravity 9
+#define StaticGravity 10
+
+/* Window gravity + bit gravity above */
+
+#define UnmapGravity 0
+
+/* Used in CreateWindow for backing-store hint */
+
+#define NotUseful 0
+#define WhenMapped 1
+#define Always 2
+
+/* Used in GetWindowAttributes reply */
+
+#define IsUnmapped 0
+#define IsUnviewable 1
+#define IsViewable 2
+
+/* Used in ChangeSaveSet */
+
+#define SetModeInsert 0
+#define SetModeDelete 1
+
+/* Used in ChangeCloseDownMode */
+
+#define DestroyAll 0
+#define RetainPermanent 1
+#define RetainTemporary 2
+
+/* Window stacking method (in configureWindow) */
+
+#define Above 0
+#define Below 1
+#define TopIf 2
+#define BottomIf 3
+#define Opposite 4
+
+/* Circulation direction */
+
+#define RaiseLowest 0
+#define LowerHighest 1
+
+/* Property modes */
+
+#define PropModeReplace 0
+#define PropModePrepend 1
+#define PropModeAppend 2
+
+/*****************************************************************
+ * GRAPHICS DEFINITIONS
+ *****************************************************************/
+
+/* graphics functions, as in GC.alu */
+
+#define GXclear 0x0 /* 0 */
+#define GXand 0x1 /* src AND dst */
+#define GXandReverse 0x2 /* src AND NOT dst */
+#define GXcopy 0x3 /* src */
+#define GXandInverted 0x4 /* NOT src AND dst */
+#define GXnoop 0x5 /* dst */
+#define GXxor 0x6 /* src XOR dst */
+#define GXor 0x7 /* src OR dst */
+#define GXnor 0x8 /* NOT src AND NOT dst */
+#define GXequiv 0x9 /* NOT src XOR dst */
+#define GXinvert 0xa /* NOT dst */
+#define GXorReverse 0xb /* src OR NOT dst */
+#define GXcopyInverted 0xc /* NOT src */
+#define GXorInverted 0xd /* NOT src OR dst */
+#define GXnand 0xe /* NOT src OR NOT dst */
+#define GXset 0xf /* 1 */
+
+/* LineStyle */
+
+#define LineSolid 0
+#define LineOnOffDash 1
+#define LineDoubleDash 2
+
+/* capStyle */
+
+#define CapNotLast 0
+#define CapButt 1
+#define CapRound 2
+#define CapProjecting 3
+
+/* joinStyle */
+
+#define JoinMiter 0
+#define JoinRound 1
+#define JoinBevel 2
+
+/* fillStyle */
+
+#define FillSolid 0
+#define FillTiled 1
+#define FillStippled 2
+#define FillOpaqueStippled 3
+
+/* fillRule */
+
+#define EvenOddRule 0
+#define WindingRule 1
+
+/* subwindow mode */
+
+#define ClipByChildren 0
+#define IncludeInferiors 1
+
+/* SetClipRectangles ordering */
+
+#define Unsorted 0
+#define YSorted 1
+#define YXSorted 2
+#define YXBanded 3
+
+/* CoordinateMode for drawing routines */
+
+#define CoordModeOrigin 0 /* relative to the origin */
+#define CoordModePrevious 1 /* relative to previous point */
+
+/* Polygon shapes */
+
+#define Complex 0 /* paths may intersect */
+#define Nonconvex 1 /* no paths intersect, but not convex */
+#define Convex 2 /* wholly convex */
+
+/* Arc modes for PolyFillArc */
+
+#define ArcChord 0 /* join endpoints of arc */
+#define ArcPieSlice 1 /* join endpoints to center of arc */
+
+/* GC components: masks used in CreateGC, CopyGC, ChangeGC, OR'ed into
+ GC.stateChanges */
+
+#define GCFunction (1L<<0)
+#define GCPlaneMask (1L<<1)
+#define GCForeground (1L<<2)
+#define GCBackground (1L<<3)
+#define GCLineWidth (1L<<4)
+#define GCLineStyle (1L<<5)
+#define GCCapStyle (1L<<6)
+#define GCJoinStyle (1L<<7)
+#define GCFillStyle (1L<<8)
+#define GCFillRule (1L<<9)
+#define GCTile (1L<<10)
+#define GCStipple (1L<<11)
+#define GCTileStipXOrigin (1L<<12)
+#define GCTileStipYOrigin (1L<<13)
+#define GCFont (1L<<14)
+#define GCSubwindowMode (1L<<15)
+#define GCGraphicsExposures (1L<<16)
+#define GCClipXOrigin (1L<<17)
+#define GCClipYOrigin (1L<<18)
+#define GCClipMask (1L<<19)
+#define GCDashOffset (1L<<20)
+#define GCDashList (1L<<21)
+#define GCArcMode (1L<<22)
+
+#define GCLastBit 22
+/*****************************************************************
+ * FONTS
+ *****************************************************************/
+
+/* used in QueryFont -- draw direction */
+
+#define FontLeftToRight 0
+#define FontRightToLeft 1
+
+#define FontChange 255
+
+/*****************************************************************
+ * IMAGING
+ *****************************************************************/
+
+/* ImageFormat -- PutImage, GetImage */
+
+#define XYBitmap 0 /* depth 1, XYFormat */
+#define XYPixmap 1 /* depth == drawable depth */
+#define ZPixmap 2 /* depth == drawable depth */
+
+/*****************************************************************
+ * COLOR MAP STUFF
+ *****************************************************************/
+
+/* For CreateColormap */
+
+#define AllocNone 0 /* create map with no entries */
+#define AllocAll 1 /* allocate entire map writeable */
+
+
+/* Flags used in StoreNamedColor, StoreColors */
+
+#define DoRed (1<<0)
+#define DoGreen (1<<1)
+#define DoBlue (1<<2)
+
+/*****************************************************************
+ * CURSOR STUFF
+ *****************************************************************/
+
+/* QueryBestSize Class */
+
+#define CursorShape 0 /* largest size that can be displayed */
+#define TileShape 1 /* size tiled fastest */
+#define StippleShape 2 /* size stippled fastest */
+
+/*****************************************************************
+ * KEYBOARD/POINTER STUFF
+ *****************************************************************/
+
+#define AutoRepeatModeOff 0
+#define AutoRepeatModeOn 1
+#define AutoRepeatModeDefault 2
+
+#define LedModeOff 0
+#define LedModeOn 1
+
+/* masks for ChangeKeyboardControl */
+
+#define KBKeyClickPercent (1L<<0)
+#define KBBellPercent (1L<<1)
+#define KBBellPitch (1L<<2)
+#define KBBellDuration (1L<<3)
+#define KBLed (1L<<4)
+#define KBLedMode (1L<<5)
+#define KBKey (1L<<6)
+#define KBAutoRepeatMode (1L<<7)
+
+#define MappingSuccess 0
+#define MappingBusy 1
+#define MappingFailed 2
+
+#define MappingModifier 0
+#define MappingKeyboard 1
+#define MappingPointer 2
+
+/*****************************************************************
+ * SCREEN SAVER STUFF
+ *****************************************************************/
+
+#define DontPreferBlanking 0
+#define PreferBlanking 1
+#define DefaultBlanking 2
+
+#define DisableScreenSaver 0
+#define DisableScreenInterval 0
+
+#define DontAllowExposures 0
+#define AllowExposures 1
+#define DefaultExposures 2
+
+/* for ForceScreenSaver */
+
+#define ScreenSaverReset 0
+#define ScreenSaverActive 1
+
+/*****************************************************************
+ * HOSTS AND CONNECTIONS
+ *****************************************************************/
+
+/* for ChangeHosts */
+
+#define HostInsert 0
+#define HostDelete 1
+
+/* for ChangeAccessControl */
+
+#define EnableAccess 1
+#define DisableAccess 0
+
+/* Display classes used in opening the connection
+ * Note that the statically allocated ones are even numbered and the
+ * dynamically changeable ones are odd numbered */
+
+#define StaticGray 0
+#define GrayScale 1
+#define StaticColor 2
+#define PseudoColor 3
+#define TrueColor 4
+#define DirectColor 5
+
+
+/* Byte order used in imageByteOrder and bitmapBitOrder */
+
+#define LSBFirst 0
+#define MSBFirst 1
+
+#endif /* X_H */
+
+
+/* $Xorg: Xlib.h,v 1.6 2001/02/09 02:03:38 xorgcvs Exp $ */
+/*
+
+Copyright 1985, 1986, 1987, 1991, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+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
+OPEN GROUP 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.
+
+*/
+/* $XFree86: xc/lib/X11/Xlib.h,v 3.23 2002/05/31 18:45:42 dawes Exp $ */
+
+
+/*
+ * 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 6
+
+#ifdef USG
+#ifndef __TYPES__
+#include <sys/types.h> /* forgot to protect it... */
+#define __TYPES__
+#endif /* __TYPES__ */
+#else
+#if defined(_POSIX_SOURCE) && defined(MOTOROLA)
+#undef _POSIX_SOURCE
+#include <sys/types.h>
+#define _POSIX_SOURCE
+#else
+#include <sys/types.h>
+#endif
+#endif /* USG */
+
+#if 0
+#include <X11/X.h>
+
+/* applications should not depend on these two headers being included! */
+#include <X11/Xfuncproto.h>
+#include <X11/Xosdefs.h>
+
+#endif /* if 0 */
+
+#ifndef X_WCHAR
+#ifdef X_NOT_STDC_ENV
+#ifndef SCO324
+#ifndef ISC
+#define X_WCHAR
+#endif
+#endif
+#endif
+#endif
+
+#ifndef X_WCHAR
+#include <stddef.h>
+#else
+#ifdef __UNIXOS2__
+#include <stdlib.h>
+#else
+/* replace this with #include or typedef appropriate for your system */
+typedef unsigned long wchar_t;
+#endif
+#endif
+
+#if defined(ISC) && defined(USE_XMBTOWC)
+#define wctomb(a,b) _Xwctomb(a,b)
+#define mblen(a,b) _Xmblen(a,b)
+#ifndef USE_XWCHAR_STRING
+#define mbtowc(a,b,c) _Xmbtowc(a,b,c)
+#endif
+#endif
+
+/* API mentioning "UTF8" or "utf8" is an XFree86 extension, introduced in
+ November 2000. Its presence is indicated through the following macro. */
+#define X_HAVE_UTF8_STRING 1
+
+typedef char *XPointer;
+
+#define Bool int
+#define Status int
+#define True 1
+#define False 0
+
+#define QueuedAlready 0
+#define QueuedAfterReading 1
+#define QueuedAfterFlush 2
+
+#define ConnectionNumber(dpy) (((_XPrivDisplay)dpy)->fd)
+#define RootWindow(dpy, scr) (ScreenOfDisplay(dpy,scr)->root)
+#define DefaultScreen(dpy) (((_XPrivDisplay)dpy)->default_screen)
+#define DefaultRootWindow(dpy) (ScreenOfDisplay(dpy,DefaultScreen(dpy))->root)
+#define DefaultVisual(dpy, scr) (ScreenOfDisplay(dpy,scr)->root_visual)
+#define DefaultGC(dpy, scr) (ScreenOfDisplay(dpy,scr)->default_gc)
+#define BlackPixel(dpy, scr) (ScreenOfDisplay(dpy,scr)->black_pixel)
+#define WhitePixel(dpy, scr) (ScreenOfDisplay(dpy,scr)->white_pixel)
+#define AllPlanes ((unsigned long)~0L)
+#define QLength(dpy) (((_XPrivDisplay)dpy)->qlen)
+#define DisplayWidth(dpy, scr) (ScreenOfDisplay(dpy,scr)->width)
+#define DisplayHeight(dpy, scr) (ScreenOfDisplay(dpy,scr)->height)
+#define DisplayWidthMM(dpy, scr)(ScreenOfDisplay(dpy,scr)->mwidth)
+#define DisplayHeightMM(dpy, scr)(ScreenOfDisplay(dpy,scr)->mheight)
+#define DisplayPlanes(dpy, scr) (ScreenOfDisplay(dpy,scr)->root_depth)
+#define DisplayCells(dpy, scr) (DefaultVisual(dpy,scr)->map_entries)
+#define ScreenCount(dpy) (((_XPrivDisplay)dpy)->nscreens)
+#define ServerVendor(dpy) (((_XPrivDisplay)dpy)->vendor)
+#define ProtocolVersion(dpy) (((_XPrivDisplay)dpy)->proto_major_version)
+#define ProtocolRevision(dpy) (((_XPrivDisplay)dpy)->proto_minor_version)
+#define VendorRelease(dpy) (((_XPrivDisplay)dpy)->release)
+#define DisplayString(dpy) (((_XPrivDisplay)dpy)->display_name)
+#define DefaultDepth(dpy, scr) (ScreenOfDisplay(dpy,scr)->root_depth)
+#define DefaultColormap(dpy, scr)(ScreenOfDisplay(dpy,scr)->cmap)
+#define BitmapUnit(dpy) (((_XPrivDisplay)dpy)->bitmap_unit)
+#define BitmapBitOrder(dpy) (((_XPrivDisplay)dpy)->bitmap_bit_order)
+#define BitmapPad(dpy) (((_XPrivDisplay)dpy)->bitmap_pad)
+#define ImageByteOrder(dpy) (((_XPrivDisplay)dpy)->byte_order)
+#ifdef CRAY /* unable to get WORD64 without pulling in other symbols */
+#define NextRequest(dpy) XNextRequest(dpy)
+#else
+#define NextRequest(dpy) (((_XPrivDisplay)dpy)->request + 1)
+#endif
+#define LastKnownRequestProcessed(dpy) (((_XPrivDisplay)dpy)->last_request_read)
+
+/* macros for screen oriented applications (toolkit) */
+#define ScreenOfDisplay(dpy, scr)(&((_XPrivDisplay)dpy)->screens[scr])
+#define DefaultScreenOfDisplay(dpy) ScreenOfDisplay(dpy,DefaultScreen(dpy))
+#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 */
+#if NeedFunctionPrototypes
+ struct _XExtData *extension
+#endif
+ );
+ 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 struct _XGC
+#ifdef XLIB_ILLEGAL_ACCESS
+{
+ XExtData *ext_data; /* hook for extension to hang data */
+ GContext gid; /* protocol ID for graphics context */
+ /* there is more to this structure, but it is private to Xlib */
+}
+#endif
+*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.
+ */
+
+struct _XDisplay; /* Forward declare before use for C++ */
+
+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 */
+#if NeedFunctionPrototypes
+ struct _XImage *(*create_image)(
+ struct _XDisplay* /* display */,
+ Visual* /* visual */,
+ unsigned int /* depth */,
+ int /* format */,
+ int /* offset */,
+ char* /* data */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ int /* bitmap_pad */,
+ int /* bytes_per_line */);
+ 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
+ struct _XImage *(*create_image)();
+ 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.
+ */
+#ifndef XLIB_ILLEGAL_ACCESS
+typedef struct _XDisplay Display;
+#endif
+
+struct _XPrivate; /* Forward declare before use for C++ */
+struct _XrmHashBucketRec;
+
+typedef struct
+#ifdef XLIB_ILLEGAL_ACCESS
+_XDisplay
+#endif
+{
+ XExtData *ext_data; /* hook for extension to hang data */
+ struct _XPrivate *private1;
+ int fd; /* Network socket. */
+ int private2;
+ int proto_major_version;/* major version of server's X protocol */
+ int proto_minor_version;/* minor version of servers X protocol */
+ char *vendor; /* vendor of the server hardware */
+ XID private3;
+ XID private4;
+ XID private5;
+ int private6;
+ XID (*resource_alloc)( /* allocator function */
+#if NeedFunctionPrototypes
+ struct _XDisplay*
+#endif
+ );
+ 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 private8;
+ int release; /* release of the server */
+ struct _XPrivate *private9, *private10;
+ int qlen; /* Length of input event queue */
+ unsigned long last_request_read; /* seq number of last event read */
+ unsigned long request; /* sequence number of last request. */
+ XPointer private11;
+ XPointer private12;
+ XPointer private13;
+ XPointer private14;
+ unsigned max_request_size; /* maximum number 32 bit words in request*/
+ struct _XrmHashBucketRec *db;
+ int (*private15)(
+#if NeedFunctionPrototypes
+ struct _XDisplay*
+#endif
+ );
+ 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 private16;
+ int min_keycode; /* minimum defined keycode */
+ int max_keycode; /* maximum defined keycode */
+ XPointer private17;
+ XPointer private18;
+ int private19;
+ char *xdefaults; /* contents of defaults from server */
+ /* there is more to this structure, but it is private to Xlib */
+}
+#ifdef XLIB_ILLEGAL_ACCESS
+Display,
+#endif
+*_XPrivDisplay;
+
+#if NeedFunctionPrototypes /* prototypes require event type definitions */
+#undef _XEVENT_
+#endif
+#ifndef _XEVENT_
+/*
+ * 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 occurred 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 */
+} 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 occurred 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 occurred 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 occurred 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) ((*((_XPrivDisplay)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;
+
+/* unused:
+typedef void (*XOMProc)();
+ */
+
+typedef struct _XOM *XOM;
+typedef struct _XOC *XOC, *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;
+
+#define XNRequiredCharSet "requiredCharSet"
+#define XNQueryOrientation "queryOrientation"
+#define XNBaseFontName "baseFontName"
+#define XNOMAutomatic "omAutomatic"
+#define XNMissingCharSet "missingCharSet"
+#define XNDefaultString "defaultString"
+#define XNOrientation "orientation"
+#define XNDirectionalDependentDrawing "directionalDependentDrawing"
+#define XNContextualDrawing "contextualDrawing"
+#define XNFontInfo "fontInfo"
+
+typedef struct {
+ int charset_count;
+ char **charset_list;
+} XOMCharSetList;
+
+typedef enum {
+ XOMOrientation_LTR_TTB,
+ XOMOrientation_RTL_TTB,
+ XOMOrientation_TTB_LTR,
+ XOMOrientation_TTB_RTL,
+ XOMOrientation_Context
+} XOrientation;
+
+typedef struct {
+ int num_orientation;
+ XOrientation *orientation; /* Input Text description */
+} XOMOrientation;
+
+typedef struct {
+ int num_font;
+ XFontStruct **font_struct_list;
+ char **font_name_list;
+} XOMFontInfo;
+
+typedef struct _XIM *XIM;
+typedef struct _XIC *XIC;
+
+typedef void (*XIMProc)(
+#if NeedFunctionPrototypes
+ XIM,
+ XPointer,
+ XPointer
+#endif
+);
+
+typedef Bool (*XICProc)(
+#if NeedFunctionPrototypes
+ XIC,
+ XPointer,
+ XPointer
+#endif
+);
+
+typedef void (*XIDProc)(
+#if NeedFunctionPrototypes
+ Display*,
+ XPointer,
+ XPointer
+#endif
+);
+
+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 XNQueryInputStyle "queryInputStyle"
+#define XNClientWindow "clientWindow"
+#define XNInputStyle "inputStyle"
+#define XNFocusWindow "focusWindow"
+#define XNResourceName "resourceName"
+#define XNResourceClass "resourceClass"
+#define XNGeometryCallback "geometryCallback"
+#define XNDestroyCallback "destroyCallback"
+#define XNFilterEvents "filterEvents"
+#define XNPreeditStartCallback "preeditStartCallback"
+#define XNPreeditDoneCallback "preeditDoneCallback"
+#define XNPreeditDrawCallback "preeditDrawCallback"
+#define XNPreeditCaretCallback "preeditCaretCallback"
+#define XNPreeditStateNotifyCallback "preeditStateNotifyCallback"
+#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 XNQueryIMValuesList "queryIMValuesList"
+#define XNQueryICValuesList "queryICValuesList"
+#define XNVisiblePosition "visiblePosition"
+#define XNR6PreeditCallback "r6PreeditCallback"
+#define XNStringConversionCallback "stringConversionCallback"
+#define XNStringConversion "stringConversion"
+#define XNResetState "resetState"
+#define XNHotKey "hotKey"
+#define XNHotKeyState "hotKeyState"
+#define XNPreeditState "preeditState"
+#define XNSeparatorofNestedList "separatorofNestedList"
+
+#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 struct {
+ XPointer client_data;
+ XICProc callback;
+} XICCallback;
+
+typedef unsigned long XIMFeedback;
+
+#define XIMReverse 1L
+#define XIMUnderline (1L<<1)
+#define XIMHighlight (1L<<2)
+#define XIMPrimary (1L<<5)
+#define XIMSecondary (1L<<6)
+#define XIMTertiary (1L<<7)
+#define XIMVisibleToForward (1L<<8)
+#define XIMVisibleToBackword (1L<<9)
+#define XIMVisibleToCenter (1L<<10)
+
+typedef struct _XIMText {
+ unsigned short length;
+ XIMFeedback *feedback;
+ Bool encoding_is_wchar;
+ union {
+ char *multi_byte;
+ wchar_t *wide_char;
+ } string;
+} XIMText;
+
+typedef unsigned long XIMPreeditState;
+
+#define XIMPreeditUnKnown 0L
+#define XIMPreeditEnable 1L
+#define XIMPreeditDisable (1L<<1)
+
+typedef struct _XIMPreeditStateNotifyCallbackStruct {
+ XIMPreeditState state;
+} XIMPreeditStateNotifyCallbackStruct;
+
+typedef unsigned long XIMResetState;
+
+#define XIMInitialState 1L
+#define XIMPreserveState (1L<<1)
+
+typedef unsigned long XIMStringConversionFeedback;
+
+#define XIMStringConversionLeftEdge (0x00000001)
+#define XIMStringConversionRightEdge (0x00000002)
+#define XIMStringConversionTopEdge (0x00000004)
+#define XIMStringConversionBottomEdge (0x00000008)
+#define XIMStringConversionConcealed (0x00000010)
+#define XIMStringConversionWrapped (0x00000020)
+
+typedef struct _XIMStringConversionText {
+ unsigned short length;
+ XIMStringConversionFeedback *feedback;
+ Bool encoding_is_wchar;
+ union {
+ char *mbs;
+ wchar_t *wcs;
+ } string;
+} XIMStringConversionText;
+
+typedef unsigned short XIMStringConversionPosition;
+
+typedef unsigned short XIMStringConversionType;
+
+#define XIMStringConversionBuffer (0x0001)
+#define XIMStringConversionLine (0x0002)
+#define XIMStringConversionWord (0x0003)
+#define XIMStringConversionChar (0x0004)
+
+typedef unsigned short XIMStringConversionOperation;
+
+#define XIMStringConversionSubstitution (0x0001)
+#define XIMStringConversionRetrieval (0x0002)
+
+typedef enum {
+ XIMForwardChar, XIMBackwardChar,
+ XIMForwardWord, XIMBackwardWord,
+ XIMCaretUp, XIMCaretDown,
+ XIMNextLine, XIMPreviousLine,
+ XIMLineStart, XIMLineEnd,
+ XIMAbsolutePosition,
+ XIMDontChange
+} XIMCaretDirection;
+
+typedef struct _XIMStringConversionCallbackStruct {
+ XIMStringConversionPosition position;
+ XIMCaretDirection direction;
+ XIMStringConversionOperation operation;
+ unsigned short factor;
+ XIMStringConversionText *text;
+} XIMStringConversionCallbackStruct;
+
+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 {
+ 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 struct _XIMHotKeyTrigger {
+ KeySym keysym;
+ int modifier;
+ int modifier_mask;
+} XIMHotKeyTrigger;
+
+typedef struct _XIMHotKeyTriggers {
+ int num_hot_key;
+ XIMHotKeyTrigger *key;
+} XIMHotKeyTriggers;
+
+typedef unsigned long XIMHotKeyState;
+
+#define XIMHotKeyStateON (0x0001L)
+#define XIMHotKeyStateOFF (0x0002L)
+
+typedef struct {
+ unsigned short count_values;
+ char **supported_values;
+} XIMValuesList;
+
+#if 0
+_XFUNCPROTOBEGIN
+
+#if defined(WIN32) && !defined(_XLIBINT_)
+#define _Xdebug (*_Xdebug_p)
+#endif
+
+extern int _Xdebug;
+
+extern XFontStruct *XLoadQueryFont(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* name */
+#endif
+);
+
+extern XFontStruct *XQueryFont(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* font_ID */
+#endif
+);
+
+
+extern XTimeCoord *XGetMotionEvents(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Time /* start */,
+ Time /* stop */,
+ int* /* nevents_return */
+#endif
+);
+
+extern XModifierKeymap *XDeleteModifiermapEntry(
+#if NeedFunctionPrototypes
+ XModifierKeymap* /* modmap */,
+#if NeedWidePrototypes
+ unsigned int /* keycode_entry */,
+#else
+ KeyCode /* keycode_entry */,
+#endif
+ int /* modifier */
+#endif
+);
+
+extern XModifierKeymap *XGetModifierMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern XModifierKeymap *XInsertModifiermapEntry(
+#if NeedFunctionPrototypes
+ XModifierKeymap* /* modmap */,
+#if NeedWidePrototypes
+ unsigned int /* keycode_entry */,
+#else
+ KeyCode /* keycode_entry */,
+#endif
+ int /* modifier */
+#endif
+);
+
+extern XModifierKeymap *XNewModifiermap(
+#if NeedFunctionPrototypes
+ int /* max_keys_per_mod */
+#endif
+);
+
+extern XImage *XCreateImage(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Visual* /* visual */,
+ unsigned int /* depth */,
+ int /* format */,
+ int /* offset */,
+ char* /* data */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ int /* bitmap_pad */,
+ int /* bytes_per_line */
+#endif
+);
+extern Status XInitImage(
+#if NeedFunctionPrototypes
+ XImage* /* image */
+#endif
+);
+extern XImage *XGetImage(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned long /* plane_mask */,
+ int /* format */
+#endif
+);
+extern XImage *XGetSubImage(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned long /* plane_mask */,
+ int /* format */,
+ XImage* /* dest_image */,
+ int /* dest_x */,
+ int /* dest_y */
+#endif
+);
+
+/*
+ * X function declarations.
+ */
+extern Display *XOpenDisplay(
+#if NeedFunctionPrototypes
+ _Xconst char* /* display_name */
+#endif
+);
+
+extern void XrmInitialize(
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern char *XFetchBytes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* nbytes_return */
+#endif
+);
+extern char *XFetchBuffer(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* nbytes_return */,
+ int /* buffer */
+#endif
+);
+extern char *XGetAtomName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Atom /* atom */
+#endif
+);
+extern Status XGetAtomNames(
+#if NeedFunctionPrototypes
+ Display* /* dpy */,
+ Atom* /* atoms */,
+ int /* count */,
+ char** /* names_return */
+#endif
+);
+extern char *XGetDefault(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* program */,
+ _Xconst char* /* option */
+#endif
+);
+extern char *XDisplayName(
+#if NeedFunctionPrototypes
+ _Xconst char* /* string */
+#endif
+);
+extern char *XKeysymToString(
+#if NeedFunctionPrototypes
+ KeySym /* keysym */
+#endif
+);
+
+extern int (*XSynchronize(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Bool /* onoff */
+#endif
+))(
+#if NeedNestedPrototypes
+ Display* /* display */
+#endif
+);
+extern int (*XSetAfterFunction(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int (*) (
+#if NeedNestedPrototypes
+ Display* /* display */
+#endif
+ ) /* procedure */
+#endif
+))(
+#if NeedNestedPrototypes
+ Display* /* display */
+#endif
+);
+extern Atom XInternAtom(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* atom_name */,
+ Bool /* only_if_exists */
+#endif
+);
+extern Status XInternAtoms(
+#if NeedFunctionPrototypes
+ Display* /* dpy */,
+ char** /* names */,
+ int /* count */,
+ Bool /* onlyIfExists */,
+ Atom* /* atoms_return */
+#endif
+);
+extern Colormap XCopyColormapAndFree(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */
+#endif
+);
+extern Colormap XCreateColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Visual* /* visual */,
+ int /* alloc */
+#endif
+);
+extern Cursor XCreatePixmapCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Pixmap /* source */,
+ Pixmap /* mask */,
+ XColor* /* foreground_color */,
+ XColor* /* background_color */,
+ unsigned int /* x */,
+ unsigned int /* y */
+#endif
+);
+extern Cursor XCreateGlyphCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Font /* source_font */,
+ Font /* mask_font */,
+ unsigned int /* source_char */,
+ unsigned int /* mask_char */,
+ XColor _Xconst * /* foreground_color */,
+ XColor _Xconst * /* background_color */
+#endif
+);
+extern Cursor XCreateFontCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ unsigned int /* shape */
+#endif
+);
+extern Font XLoadFont(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* name */
+#endif
+);
+extern GC XCreateGC(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ unsigned long /* valuemask */,
+ XGCValues* /* values */
+#endif
+);
+extern GContext XGContextFromGC(
+#if NeedFunctionPrototypes
+ GC /* gc */
+#endif
+);
+extern void XFlushGC(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */
+#endif
+);
+extern Pixmap XCreatePixmap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned int /* depth */
+#endif
+);
+extern Pixmap XCreateBitmapFromData(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ _Xconst char* /* data */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+extern Pixmap XCreatePixmapFromBitmapData(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ char* /* data */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned long /* fg */,
+ unsigned long /* bg */,
+ unsigned int /* depth */
+#endif
+);
+extern Window XCreateSimpleWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* parent */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned int /* border_width */,
+ unsigned long /* border */,
+ unsigned long /* background */
+#endif
+);
+extern Window XGetSelectionOwner(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Atom /* selection */
+#endif
+);
+extern Window XCreateWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* parent */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned int /* border_width */,
+ int /* depth */,
+ unsigned int /* class */,
+ Visual* /* visual */,
+ unsigned long /* valuemask */,
+ XSetWindowAttributes* /* attributes */
+#endif
+);
+extern Colormap *XListInstalledColormaps(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int* /* num_return */
+#endif
+);
+extern char **XListFonts(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* pattern */,
+ int /* maxnames */,
+ int* /* actual_count_return */
+#endif
+);
+extern char **XListFontsWithInfo(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* pattern */,
+ int /* maxnames */,
+ int* /* count_return */,
+ XFontStruct** /* info_return */
+#endif
+);
+extern char **XGetFontPath(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* npaths_return */
+#endif
+);
+extern char **XListExtensions(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* nextensions_return */
+#endif
+);
+extern Atom *XListProperties(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int* /* num_prop_return */
+#endif
+);
+extern XHostAddress *XListHosts(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* nhosts_return */,
+ Bool* /* state_return */
+#endif
+);
+extern KeySym XKeycodeToKeysym(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+#if NeedWidePrototypes
+ unsigned int /* keycode */,
+#else
+ KeyCode /* keycode */,
+#endif
+ int /* index */
+#endif
+);
+extern KeySym XLookupKeysym(
+#if NeedFunctionPrototypes
+ XKeyEvent* /* key_event */,
+ int /* index */
+#endif
+);
+extern KeySym *XGetKeyboardMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+#if NeedWidePrototypes
+ unsigned int /* first_keycode */,
+#else
+ KeyCode /* first_keycode */,
+#endif
+ int /* keycode_count */,
+ int* /* keysyms_per_keycode_return */
+#endif
+);
+extern KeySym XStringToKeysym(
+#if NeedFunctionPrototypes
+ _Xconst char* /* string */
+#endif
+);
+extern long XMaxRequestSize(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+extern long XExtendedMaxRequestSize(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+extern char *XResourceManagerString(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+extern char *XScreenResourceString(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+extern unsigned long XDisplayMotionBufferSize(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+extern VisualID XVisualIDFromVisual(
+#if NeedFunctionPrototypes
+ Visual* /* visual */
+#endif
+);
+
+/* multithread routines */
+
+extern Status XInitThreads(
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern void XLockDisplay(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern void XUnlockDisplay(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+/* routines for dealing with extensions */
+
+extern XExtCodes *XInitExtension(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* name */
+#endif
+);
+
+extern XExtCodes *XAddExtension(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+extern XExtData *XFindOnExtensionList(
+#if NeedFunctionPrototypes
+ XExtData** /* structure */,
+ int /* number */
+#endif
+);
+extern XExtData **XEHeadOfExtensionList(
+#if NeedFunctionPrototypes
+ XEDataObject /* object */
+#endif
+);
+
+/* these are routines for which there are also macros */
+extern Window XRootWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+extern Window XDefaultRootWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+extern Window XRootWindowOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+extern Visual *XDefaultVisual(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+extern Visual *XDefaultVisualOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+extern GC XDefaultGC(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+extern GC XDefaultGCOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+extern unsigned long XBlackPixel(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+extern unsigned long XWhitePixel(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+extern unsigned long XAllPlanes(
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+extern unsigned long XBlackPixelOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+extern unsigned long XWhitePixelOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+extern unsigned long XNextRequest(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+extern unsigned long XLastKnownRequestProcessed(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+extern char *XServerVendor(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+extern char *XDisplayString(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+extern Colormap XDefaultColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+extern Colormap XDefaultColormapOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+extern Display *XDisplayOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+extern Screen *XScreenOfDisplay(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+extern Screen *XDefaultScreenOfDisplay(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+extern long XEventMaskOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+
+extern int XScreenNumberOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+
+typedef int (*XErrorHandler) ( /* WARNING, this type not in Xlib spec */
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XErrorEvent* /* error_event */
+#endif
+);
+
+extern XErrorHandler XSetErrorHandler (
+#if NeedFunctionPrototypes
+ XErrorHandler /* handler */
+#endif
+);
+
+
+typedef int (*XIOErrorHandler) ( /* WARNING, this type not in Xlib spec */
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern XIOErrorHandler XSetIOErrorHandler (
+#if NeedFunctionPrototypes
+ XIOErrorHandler /* handler */
+#endif
+);
+
+extern XPixmapFormatValues *XListPixmapFormats(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* count_return */
+#endif
+);
+extern int *XListDepths(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */,
+ int* /* count_return */
+#endif
+);
+
+/* ICCCM routines for things that don't require special include files; */
+/* other declarations are given in Xutil.h */
+extern Status XReconfigureWMWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* screen_number */,
+ unsigned int /* mask */,
+ XWindowChanges* /* changes */
+#endif
+);
+
+extern Status XGetWMProtocols(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Atom** /* protocols_return */,
+ int* /* count_return */
+#endif
+);
+extern Status XSetWMProtocols(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Atom* /* protocols */,
+ int /* count */
+#endif
+);
+extern Status XIconifyWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* screen_number */
+#endif
+);
+extern Status XWithdrawWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* screen_number */
+#endif
+);
+extern Status XGetCommand(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ char*** /* argv_return */,
+ int* /* argc_return */
+#endif
+);
+extern Status XGetWMColormapWindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window** /* windows_return */,
+ int* /* count_return */
+#endif
+);
+extern Status XSetWMColormapWindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window* /* colormap_windows */,
+ int /* count */
+#endif
+);
+extern void XFreeStringList(
+#if NeedFunctionPrototypes
+ char** /* list */
+#endif
+);
+extern int XSetTransientForHint(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window /* prop_window */
+#endif
+);
+
+/* The following are given in alphabetical order */
+
+extern int XActivateScreenSaver(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XAddHost(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XHostAddress* /* host */
+#endif
+);
+
+extern int XAddHosts(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XHostAddress* /* hosts */,
+ int /* num_hosts */
+#endif
+);
+
+extern int XAddToExtensionList(
+#if NeedFunctionPrototypes
+ struct _XExtData** /* structure */,
+ XExtData* /* ext_data */
+#endif
+);
+
+extern int XAddToSaveSet(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern Status XAllocColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ XColor* /* screen_in_out */
+#endif
+);
+
+extern Status XAllocColorCells(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ Bool /* contig */,
+ unsigned long* /* plane_masks_return */,
+ unsigned int /* nplanes */,
+ unsigned long* /* pixels_return */,
+ unsigned int /* npixels */
+#endif
+);
+
+extern Status XAllocColorPlanes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ Bool /* contig */,
+ unsigned long* /* pixels_return */,
+ int /* ncolors */,
+ int /* nreds */,
+ int /* ngreens */,
+ int /* nblues */,
+ unsigned long* /* rmask_return */,
+ unsigned long* /* gmask_return */,
+ unsigned long* /* bmask_return */
+#endif
+);
+
+extern Status XAllocNamedColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ _Xconst char* /* color_name */,
+ XColor* /* screen_def_return */,
+ XColor* /* exact_def_return */
+#endif
+);
+
+extern int XAllowEvents(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* event_mode */,
+ Time /* time */
+#endif
+);
+
+extern int XAutoRepeatOff(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XAutoRepeatOn(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XBell(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* percent */
+#endif
+);
+
+extern int XBitmapBitOrder(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XBitmapPad(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XBitmapUnit(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XCellsOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+
+extern int XChangeActivePointerGrab(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ unsigned int /* event_mask */,
+ Cursor /* cursor */,
+ Time /* time */
+#endif
+);
+
+extern int XChangeGC(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned long /* valuemask */,
+ XGCValues* /* values */
+#endif
+);
+
+extern int XChangeKeyboardControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ unsigned long /* value_mask */,
+ XKeyboardControl* /* values */
+#endif
+);
+
+extern int XChangeKeyboardMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* first_keycode */,
+ int /* keysyms_per_keycode */,
+ KeySym* /* keysyms */,
+ int /* num_codes */
+#endif
+);
+
+extern int XChangePointerControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Bool /* do_accel */,
+ Bool /* do_threshold */,
+ int /* accel_numerator */,
+ int /* accel_denominator */,
+ int /* threshold */
+#endif
+);
+
+extern int XChangeProperty(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Atom /* property */,
+ Atom /* type */,
+ int /* format */,
+ int /* mode */,
+ _Xconst unsigned char* /* data */,
+ int /* nelements */
+#endif
+);
+
+extern int XChangeSaveSet(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* change_mode */
+#endif
+);
+
+extern int XChangeWindowAttributes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ unsigned long /* valuemask */,
+ XSetWindowAttributes* /* attributes */
+#endif
+);
+
+extern Bool XCheckIfEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XEvent* /* event_return */,
+ Bool (*) (
+#if NeedNestedPrototypes
+ Display* /* display */,
+ XEvent* /* event */,
+ XPointer /* arg */
+#endif
+ ) /* predicate */,
+ XPointer /* arg */
+#endif
+);
+
+extern Bool XCheckMaskEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ long /* event_mask */,
+ XEvent* /* event_return */
+#endif
+);
+
+extern Bool XCheckTypedEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* event_type */,
+ XEvent* /* event_return */
+#endif
+);
+
+extern Bool XCheckTypedWindowEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* event_type */,
+ XEvent* /* event_return */
+#endif
+);
+
+extern Bool XCheckWindowEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ long /* event_mask */,
+ XEvent* /* event_return */
+#endif
+);
+
+extern int XCirculateSubwindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* direction */
+#endif
+);
+
+extern int XCirculateSubwindowsDown(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XCirculateSubwindowsUp(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XClearArea(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ Bool /* exposures */
+#endif
+);
+
+extern int XClearWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XCloseDisplay(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XConfigureWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ unsigned int /* value_mask */,
+ XWindowChanges* /* values */
+#endif
+);
+
+extern int XConnectionNumber(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XConvertSelection(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Atom /* selection */,
+ Atom /* target */,
+ Atom /* property */,
+ Window /* requestor */,
+ Time /* time */
+#endif
+);
+
+extern int XCopyArea(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* src */,
+ Drawable /* dest */,
+ GC /* gc */,
+ int /* src_x */,
+ int /* src_y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ int /* dest_x */,
+ int /* dest_y */
+#endif
+);
+
+extern int XCopyGC(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* src */,
+ unsigned long /* valuemask */,
+ GC /* dest */
+#endif
+);
+
+extern int XCopyPlane(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* src */,
+ Drawable /* dest */,
+ GC /* gc */,
+ int /* src_x */,
+ int /* src_y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ int /* dest_x */,
+ int /* dest_y */,
+ unsigned long /* plane */
+#endif
+);
+
+extern int XDefaultDepth(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+
+extern int XDefaultDepthOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+
+extern int XDefaultScreen(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XDefineCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Cursor /* cursor */
+#endif
+);
+
+extern int XDeleteProperty(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Atom /* property */
+#endif
+);
+
+extern int XDestroyWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XDestroySubwindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XDoesBackingStore(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+
+extern Bool XDoesSaveUnders(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+
+extern int XDisableAccessControl(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+
+extern int XDisplayCells(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+
+extern int XDisplayHeight(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+
+extern int XDisplayHeightMM(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+
+extern int XDisplayKeycodes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* min_keycodes_return */,
+ int* /* max_keycodes_return */
+#endif
+);
+
+extern int XDisplayPlanes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+
+extern int XDisplayWidth(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+
+extern int XDisplayWidthMM(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+
+extern int XDrawArc(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ int /* angle1 */,
+ int /* angle2 */
+#endif
+);
+
+extern int XDrawArcs(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XArc* /* arcs */,
+ int /* narcs */
+#endif
+);
+
+extern int XDrawImageString(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ _Xconst char* /* string */,
+ int /* length */
+#endif
+);
+
+extern int XDrawImageString16(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ _Xconst XChar2b* /* string */,
+ int /* length */
+#endif
+);
+
+extern int XDrawLine(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x1 */,
+ int /* y1 */,
+ int /* x2 */,
+ int /* y2 */
+#endif
+);
+
+extern int XDrawLines(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XPoint* /* points */,
+ int /* npoints */,
+ int /* mode */
+#endif
+);
+
+extern int XDrawPoint(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */
+#endif
+);
+
+extern int XDrawPoints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XPoint* /* points */,
+ int /* npoints */,
+ int /* mode */
+#endif
+);
+
+extern int XDrawRectangle(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+
+extern int XDrawRectangles(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XRectangle* /* rectangles */,
+ int /* nrectangles */
+#endif
+);
+
+extern int XDrawSegments(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XSegment* /* segments */,
+ int /* nsegments */
+#endif
+);
+
+extern int XDrawString(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ _Xconst char* /* string */,
+ int /* length */
+#endif
+);
+
+extern int XDrawString16(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ _Xconst XChar2b* /* string */,
+ int /* length */
+#endif
+);
+
+extern int XDrawText(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ XTextItem* /* items */,
+ int /* nitems */
+#endif
+);
+
+extern int XDrawText16(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ XTextItem16* /* items */,
+ int /* nitems */
+#endif
+);
+
+extern int XEnableAccessControl(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XEventsQueued(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* mode */
+#endif
+);
+
+extern Status XFetchName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ char** /* window_name_return */
+#endif
+);
+
+extern int XFillArc(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ int /* angle1 */,
+ int /* angle2 */
+#endif
+);
+
+extern int XFillArcs(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XArc* /* arcs */,
+ int /* narcs */
+#endif
+);
+
+extern int XFillPolygon(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XPoint* /* points */,
+ int /* npoints */,
+ int /* shape */,
+ int /* mode */
+#endif
+);
+
+extern int XFillRectangle(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+
+extern int XFillRectangles(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XRectangle* /* rectangles */,
+ int /* nrectangles */
+#endif
+);
+
+extern int XFlush(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XForceScreenSaver(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* mode */
+#endif
+);
+
+extern int XFree(
+#if NeedFunctionPrototypes
+ void* /* data */
+#endif
+);
+
+extern int XFreeColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */
+#endif
+);
+
+extern int XFreeColors(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ unsigned long* /* pixels */,
+ int /* npixels */,
+ unsigned long /* planes */
+#endif
+);
+
+extern int XFreeCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Cursor /* cursor */
+#endif
+);
+
+extern int XFreeExtensionList(
+#if NeedFunctionPrototypes
+ char** /* list */
+#endif
+);
+
+extern int XFreeFont(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XFontStruct* /* font_struct */
+#endif
+);
+
+extern int XFreeFontInfo(
+#if NeedFunctionPrototypes
+ char** /* names */,
+ XFontStruct* /* free_info */,
+ int /* actual_count */
+#endif
+);
+
+extern int XFreeFontNames(
+#if NeedFunctionPrototypes
+ char** /* list */
+#endif
+);
+
+extern int XFreeFontPath(
+#if NeedFunctionPrototypes
+ char** /* list */
+#endif
+);
+
+extern int XFreeGC(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */
+#endif
+);
+
+extern int XFreeModifiermap(
+#if NeedFunctionPrototypes
+ XModifierKeymap* /* modmap */
+#endif
+);
+
+extern int XFreePixmap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Pixmap /* pixmap */
+#endif
+);
+
+extern int XGeometry(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen */,
+ _Xconst char* /* position */,
+ _Xconst char* /* default_position */,
+ unsigned int /* bwidth */,
+ unsigned int /* fwidth */,
+ unsigned int /* fheight */,
+ int /* xadder */,
+ int /* yadder */,
+ int* /* x_return */,
+ int* /* y_return */,
+ int* /* width_return */,
+ int* /* height_return */
+#endif
+);
+
+extern int XGetErrorDatabaseText(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* name */,
+ _Xconst char* /* message */,
+ _Xconst char* /* default_string */,
+ char* /* buffer_return */,
+ int /* length */
+#endif
+);
+
+extern int XGetErrorText(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* code */,
+ char* /* buffer_return */,
+ int /* length */
+#endif
+);
+
+extern Bool XGetFontProperty(
+#if NeedFunctionPrototypes
+ XFontStruct* /* font_struct */,
+ Atom /* atom */,
+ unsigned long* /* value_return */
+#endif
+);
+
+extern Status XGetGCValues(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned long /* valuemask */,
+ XGCValues* /* values_return */
+#endif
+);
+
+extern Status XGetGeometry(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ Window* /* root_return */,
+ int* /* x_return */,
+ int* /* y_return */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */,
+ unsigned int* /* border_width_return */,
+ unsigned int* /* depth_return */
+#endif
+);
+
+extern Status XGetIconName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ char** /* icon_name_return */
+#endif
+);
+
+extern int XGetInputFocus(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window* /* focus_return */,
+ int* /* revert_to_return */
+#endif
+);
+
+extern int XGetKeyboardControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XKeyboardState* /* values_return */
+#endif
+);
+
+extern int XGetPointerControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* accel_numerator_return */,
+ int* /* accel_denominator_return */,
+ int* /* threshold_return */
+#endif
+);
+
+extern int XGetPointerMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ unsigned char* /* map_return */,
+ int /* nmap */
+#endif
+);
+
+extern int XGetScreenSaver(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* timeout_return */,
+ int* /* interval_return */,
+ int* /* prefer_blanking_return */,
+ int* /* allow_exposures_return */
+#endif
+);
+
+extern Status XGetTransientForHint(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window* /* prop_window_return */
+#endif
+);
+
+extern int XGetWindowProperty(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Atom /* property */,
+ long /* long_offset */,
+ long /* long_length */,
+ Bool /* delete */,
+ Atom /* req_type */,
+ Atom* /* actual_type_return */,
+ int* /* actual_format_return */,
+ unsigned long* /* nitems_return */,
+ unsigned long* /* bytes_after_return */,
+ unsigned char** /* prop_return */
+#endif
+);
+
+extern Status XGetWindowAttributes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XWindowAttributes* /* window_attributes_return */
+#endif
+);
+
+extern int XGrabButton(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ unsigned int /* button */,
+ unsigned int /* modifiers */,
+ Window /* grab_window */,
+ Bool /* owner_events */,
+ unsigned int /* event_mask */,
+ int /* pointer_mode */,
+ int /* keyboard_mode */,
+ Window /* confine_to */,
+ Cursor /* cursor */
+#endif
+);
+
+extern int XGrabKey(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* keycode */,
+ unsigned int /* modifiers */,
+ Window /* grab_window */,
+ Bool /* owner_events */,
+ int /* pointer_mode */,
+ int /* keyboard_mode */
+#endif
+);
+
+extern int XGrabKeyboard(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* grab_window */,
+ Bool /* owner_events */,
+ int /* pointer_mode */,
+ int /* keyboard_mode */,
+ Time /* time */
+#endif
+);
+
+extern int XGrabPointer(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* grab_window */,
+ Bool /* owner_events */,
+ unsigned int /* event_mask */,
+ int /* pointer_mode */,
+ int /* keyboard_mode */,
+ Window /* confine_to */,
+ Cursor /* cursor */,
+ Time /* time */
+#endif
+);
+
+extern int XGrabServer(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XHeightMMOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+
+extern int XHeightOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+
+extern int XIfEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XEvent* /* event_return */,
+ Bool (*) (
+#if NeedNestedPrototypes
+ Display* /* display */,
+ XEvent* /* event */,
+ XPointer /* arg */
+#endif
+ ) /* predicate */,
+ XPointer /* arg */
+#endif
+);
+
+extern int XImageByteOrder(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XInstallColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */
+#endif
+);
+
+extern KeyCode XKeysymToKeycode(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ KeySym /* keysym */
+#endif
+);
+
+extern int XKillClient(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* resource */
+#endif
+);
+
+extern Status XLookupColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ _Xconst char* /* color_name */,
+ XColor* /* exact_def_return */,
+ XColor* /* screen_def_return */
+#endif
+);
+
+extern int XLowerWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XMapRaised(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XMapSubwindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XMapWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XMaskEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ long /* event_mask */,
+ XEvent* /* event_return */
+#endif
+);
+
+extern int XMaxCmapsOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+
+extern int XMinCmapsOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+
+extern int XMoveResizeWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+
+extern int XMoveWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* x */,
+ int /* y */
+#endif
+);
+
+extern int XNextEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XEvent* /* event_return */
+#endif
+);
+
+extern int XNoOp(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern Status XParseColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ _Xconst char* /* spec */,
+ XColor* /* exact_def_return */
+#endif
+);
+
+extern int XParseGeometry(
+#if NeedFunctionPrototypes
+ _Xconst char* /* parsestring */,
+ int* /* x_return */,
+ int* /* y_return */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */
+#endif
+);
+
+extern int XPeekEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XEvent* /* event_return */
+#endif
+);
+
+extern int XPeekIfEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XEvent* /* event_return */,
+ Bool (*) (
+#if NeedNestedPrototypes
+ Display* /* display */,
+ XEvent* /* event */,
+ XPointer /* arg */
+#endif
+ ) /* predicate */,
+ XPointer /* arg */
+#endif
+);
+
+extern int XPending(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XPlanesOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+
+#endif
+);
+
+extern int XProtocolRevision(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XProtocolVersion(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+
+extern int XPutBackEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XEvent* /* event */
+#endif
+);
+
+extern int XPutImage(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XImage* /* image */,
+ int /* src_x */,
+ int /* src_y */,
+ int /* dest_x */,
+ int /* dest_y */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+
+extern int XQLength(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern Status XQueryBestCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */
+#endif
+);
+
+extern Status XQueryBestSize(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* class */,
+ Drawable /* which_screen */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */
+#endif
+);
+
+extern Status XQueryBestStipple(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* which_screen */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */
+#endif
+);
+
+extern Status XQueryBestTile(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* which_screen */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */
+#endif
+);
+
+extern int XQueryColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ XColor* /* def_in_out */
+#endif
+);
+
+extern int XQueryColors(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ XColor* /* defs_in_out */,
+ int /* ncolors */
+#endif
+);
+
+extern Bool XQueryExtension(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* name */,
+ int* /* major_opcode_return */,
+ int* /* first_event_return */,
+ int* /* first_error_return */
+#endif
+);
+
+extern int XQueryKeymap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ char [32] /* keys_return */
+#endif
+);
+
+extern Bool XQueryPointer(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window* /* root_return */,
+ Window* /* child_return */,
+ int* /* root_x_return */,
+ int* /* root_y_return */,
+ int* /* win_x_return */,
+ int* /* win_y_return */,
+ unsigned int* /* mask_return */
+#endif
+);
+
+extern int XQueryTextExtents(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* font_ID */,
+ _Xconst char* /* string */,
+ int /* nchars */,
+ int* /* direction_return */,
+ int* /* font_ascent_return */,
+ int* /* font_descent_return */,
+ XCharStruct* /* overall_return */
+#endif
+);
+
+extern int XQueryTextExtents16(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* font_ID */,
+ _Xconst XChar2b* /* string */,
+ int /* nchars */,
+ int* /* direction_return */,
+ int* /* font_ascent_return */,
+ int* /* font_descent_return */,
+ XCharStruct* /* overall_return */
+#endif
+);
+
+extern Status XQueryTree(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window* /* root_return */,
+ Window* /* parent_return */,
+ Window** /* children_return */,
+ unsigned int* /* nchildren_return */
+#endif
+);
+
+extern int XRaiseWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XReadBitmapFile(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ _Xconst char* /* filename */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */,
+ Pixmap* /* bitmap_return */,
+ int* /* x_hot_return */,
+ int* /* y_hot_return */
+#endif
+);
+
+extern int XReadBitmapFileData(
+#if NeedFunctionPrototypes
+ _Xconst char* /* filename */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */,
+ unsigned char** /* data_return */,
+ int* /* x_hot_return */,
+ int* /* y_hot_return */
+#endif
+);
+
+extern int XRebindKeysym(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ KeySym /* keysym */,
+ KeySym* /* list */,
+ int /* mod_count */,
+ _Xconst unsigned char* /* string */,
+ int /* bytes_string */
+#endif
+);
+
+extern int XRecolorCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Cursor /* cursor */,
+ XColor* /* foreground_color */,
+ XColor* /* background_color */
+#endif
+);
+
+extern int XRefreshKeyboardMapping(
+#if NeedFunctionPrototypes
+ XMappingEvent* /* event_map */
+#endif
+);
+
+extern int XRemoveFromSaveSet(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XRemoveHost(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XHostAddress* /* host */
+#endif
+);
+
+extern int XRemoveHosts(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XHostAddress* /* hosts */,
+ int /* num_hosts */
+#endif
+);
+
+extern int XReparentWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window /* parent */,
+ int /* x */,
+ int /* y */
+#endif
+);
+
+extern int XResetScreenSaver(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XResizeWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+
+extern int XRestackWindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window* /* windows */,
+ int /* nwindows */
+#endif
+);
+
+extern int XRotateBuffers(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* rotate */
+#endif
+);
+
+extern int XRotateWindowProperties(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Atom* /* properties */,
+ int /* num_prop */,
+ int /* npositions */
+#endif
+);
+
+extern int XScreenCount(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XSelectInput(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ long /* event_mask */
+#endif
+);
+
+extern Status XSendEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Bool /* propagate */,
+ long /* event_mask */,
+ XEvent* /* event_send */
+#endif
+);
+
+extern int XSetAccessControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* mode */
+#endif
+);
+
+extern int XSetArcMode(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* arc_mode */
+#endif
+);
+
+extern int XSetBackground(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned long /* background */
+#endif
+);
+
+extern int XSetClipMask(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ Pixmap /* pixmap */
+#endif
+);
+
+extern int XSetClipOrigin(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* clip_x_origin */,
+ int /* clip_y_origin */
+#endif
+);
+
+extern int XSetClipRectangles(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* clip_x_origin */,
+ int /* clip_y_origin */,
+ XRectangle* /* rectangles */,
+ int /* n */,
+ int /* ordering */
+#endif
+);
+
+extern int XSetCloseDownMode(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* close_mode */
+#endif
+);
+
+extern int XSetCommand(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ char** /* argv */,
+ int /* argc */
+#endif
+);
+
+extern int XSetDashes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* dash_offset */,
+ _Xconst char* /* dash_list */,
+ int /* n */
+#endif
+);
+
+extern int XSetFillRule(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* fill_rule */
+#endif
+);
+
+extern int XSetFillStyle(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* fill_style */
+#endif
+);
+
+extern int XSetFont(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ Font /* font */
+#endif
+);
+
+extern int XSetFontPath(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ char** /* directories */,
+ int /* ndirs */
+#endif
+);
+
+extern int XSetForeground(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned long /* foreground */
+#endif
+);
+
+extern int XSetFunction(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* function */
+#endif
+);
+
+extern int XSetGraphicsExposures(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ Bool /* graphics_exposures */
+#endif
+);
+
+extern int XSetIconName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ _Xconst char* /* icon_name */
+#endif
+);
+
+extern int XSetInputFocus(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* focus */,
+ int /* revert_to */,
+ Time /* time */
+#endif
+);
+
+extern int XSetLineAttributes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned int /* line_width */,
+ int /* line_style */,
+ int /* cap_style */,
+ int /* join_style */
+#endif
+);
+
+extern int XSetModifierMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XModifierKeymap* /* modmap */
+#endif
+);
+
+extern int XSetPlaneMask(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned long /* plane_mask */
+#endif
+);
+
+extern int XSetPointerMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst unsigned char* /* map */,
+ int /* nmap */
+#endif
+);
+
+extern int XSetScreenSaver(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* timeout */,
+ int /* interval */,
+ int /* prefer_blanking */,
+ int /* allow_exposures */
+#endif
+);
+
+extern int XSetSelectionOwner(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Atom /* selection */,
+ Window /* owner */,
+ Time /* time */
+#endif
+);
+
+extern int XSetState(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned long /* foreground */,
+ unsigned long /* background */,
+ int /* function */,
+ unsigned long /* plane_mask */
+#endif
+);
+
+extern int XSetStipple(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ Pixmap /* stipple */
+#endif
+);
+
+extern int XSetSubwindowMode(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* subwindow_mode */
+#endif
+);
+
+extern int XSetTSOrigin(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* ts_x_origin */,
+ int /* ts_y_origin */
+#endif
+);
+
+extern int XSetTile(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ Pixmap /* tile */
+#endif
+);
+
+extern int XSetWindowBackground(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ unsigned long /* background_pixel */
+#endif
+);
+
+extern int XSetWindowBackgroundPixmap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Pixmap /* background_pixmap */
+#endif
+);
+
+extern int XSetWindowBorder(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ unsigned long /* border_pixel */
+#endif
+);
+
+extern int XSetWindowBorderPixmap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Pixmap /* border_pixmap */
+#endif
+);
+
+extern int XSetWindowBorderWidth(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ unsigned int /* width */
+#endif
+);
+
+extern int XSetWindowColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Colormap /* colormap */
+#endif
+);
+
+extern int XStoreBuffer(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* bytes */,
+ int /* nbytes */,
+ int /* buffer */
+#endif
+);
+
+extern int XStoreBytes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* bytes */,
+ int /* nbytes */
+#endif
+);
+
+extern int XStoreColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ XColor* /* color */
+#endif
+);
+
+extern int XStoreColors(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ XColor* /* color */,
+ int /* ncolors */
+#endif
+);
+
+extern int XStoreName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ _Xconst char* /* window_name */
+#endif
+);
+
+extern int XStoreNamedColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ _Xconst char* /* color */,
+ unsigned long /* pixel */,
+ int /* flags */
+#endif
+);
+
+extern int XSync(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Bool /* discard */
+#endif
+);
+
+extern int XTextExtents(
+#if NeedFunctionPrototypes
+ XFontStruct* /* font_struct */,
+ _Xconst char* /* string */,
+ int /* nchars */,
+ int* /* direction_return */,
+ int* /* font_ascent_return */,
+ int* /* font_descent_return */,
+ XCharStruct* /* overall_return */
+#endif
+);
+
+extern int XTextExtents16(
+#if NeedFunctionPrototypes
+ XFontStruct* /* font_struct */,
+ _Xconst XChar2b* /* string */,
+ int /* nchars */,
+ int* /* direction_return */,
+ int* /* font_ascent_return */,
+ int* /* font_descent_return */,
+ XCharStruct* /* overall_return */
+#endif
+);
+
+extern int XTextWidth(
+#if NeedFunctionPrototypes
+ XFontStruct* /* font_struct */,
+ _Xconst char* /* string */,
+ int /* count */
+#endif
+);
+
+extern int XTextWidth16(
+#if NeedFunctionPrototypes
+ XFontStruct* /* font_struct */,
+ _Xconst XChar2b* /* string */,
+ int /* count */
+#endif
+);
+
+extern Bool XTranslateCoordinates(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* src_w */,
+ Window /* dest_w */,
+ int /* src_x */,
+ int /* src_y */,
+ int* /* dest_x_return */,
+ int* /* dest_y_return */,
+ Window* /* child_return */
+#endif
+);
+
+extern int XUndefineCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XUngrabButton(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ unsigned int /* button */,
+ unsigned int /* modifiers */,
+ Window /* grab_window */
+#endif
+);
+
+extern int XUngrabKey(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* keycode */,
+ unsigned int /* modifiers */,
+ Window /* grab_window */
+#endif
+);
+
+extern int XUngrabKeyboard(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Time /* time */
+#endif
+);
+
+extern int XUngrabPointer(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Time /* time */
+#endif
+);
+
+extern int XUngrabServer(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XUninstallColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */
+#endif
+);
+
+extern int XUnloadFont(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Font /* font */
+#endif
+);
+
+extern int XUnmapSubwindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XUnmapWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XVendorRelease(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+
+extern int XWarpPointer(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* src_w */,
+ Window /* dest_w */,
+ int /* src_x */,
+ int /* src_y */,
+ unsigned int /* src_width */,
+ unsigned int /* src_height */,
+ int /* dest_x */,
+ int /* dest_y */
+#endif
+);
+
+extern int XWidthMMOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+
+extern int XWidthOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+
+extern int XWindowEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ long /* event_mask */,
+ XEvent* /* event_return */
+#endif
+);
+
+extern int XWriteBitmapFile(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* filename */,
+ Pixmap /* bitmap */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ int /* x_hot */,
+ int /* y_hot */
+#endif
+);
+
+extern Bool XSupportsLocale (void);
+
+extern char *XSetLocaleModifiers(
+ const char* /* modifier_list */
+);
+
+extern XOM XOpenOM(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ struct _XrmHashBucketRec* /* rdb */,
+ _Xconst char* /* res_name */,
+ _Xconst char* /* res_class */
+#endif
+);
+
+extern Status XCloseOM(
+#if NeedFunctionPrototypes
+ XOM /* om */
+#endif
+);
+
+extern char *XSetOMValues(
+#if NeedVarargsPrototypes
+ XOM /* om */,
+ ...
+#endif
+);
+
+extern char *XGetOMValues(
+#if NeedVarargsPrototypes
+ XOM /* om */,
+ ...
+#endif
+);
+
+extern Display *XDisplayOfOM(
+#if NeedFunctionPrototypes
+ XOM /* om */
+#endif
+);
+
+extern char *XLocaleOfOM(
+#if NeedFunctionPrototypes
+ XOM /* om */
+#endif
+);
+
+extern XOC XCreateOC(
+#if NeedVarargsPrototypes
+ XOM /* om */,
+ ...
+#endif
+);
+
+extern void XDestroyOC(
+#if NeedFunctionPrototypes
+ XOC /* oc */
+#endif
+);
+
+extern XOM XOMOfOC(
+#if NeedFunctionPrototypes
+ XOC /* oc */
+#endif
+);
+
+extern char *XSetOCValues(
+#if NeedVarargsPrototypes
+ XOC /* oc */,
+ ...
+#endif
+);
+
+extern char *XGetOCValues(
+#if NeedVarargsPrototypes
+ XOC /* oc */,
+ ...
+#endif
+);
+
+extern XFontSet XCreateFontSet(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* base_font_name_list */,
+ char*** /* missing_charset_list */,
+ int* /* missing_charset_count */,
+ char** /* def_string */
+#endif
+);
+
+extern void XFreeFontSet(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XFontSet /* font_set */
+#endif
+);
+
+extern int XFontsOfFontSet(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */,
+ XFontStruct*** /* font_struct_list */,
+ char*** /* font_name_list */
+#endif
+);
+
+extern char *XBaseFontNameListOfFontSet(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */
+#endif
+);
+
+extern char *XLocaleOfFontSet(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */
+#endif
+);
+
+extern Bool XContextDependentDrawing(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */
+#endif
+);
+
+extern Bool XDirectionalDependentDrawing(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */
+#endif
+);
+
+extern Bool XContextualDrawing(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */
+#endif
+);
+
+extern XFontSetExtents *XExtentsOfFontSet(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */
+#endif
+);
+
+extern int XmbTextEscapement(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */,
+ _Xconst char* /* text */,
+ int /* bytes_text */
+#endif
+);
+
+extern int XwcTextEscapement(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */,
+ _Xconst wchar_t* /* text */,
+ int /* num_wchars */
+#endif
+);
+
+extern int Xutf8TextEscapement(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */,
+ _Xconst char* /* text */,
+ int /* bytes_text */
+#endif
+);
+
+extern int XmbTextExtents(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */,
+ _Xconst char* /* text */,
+ int /* bytes_text */,
+ XRectangle* /* overall_ink_return */,
+ XRectangle* /* overall_logical_return */
+#endif
+);
+
+extern int XwcTextExtents(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */,
+ _Xconst wchar_t* /* text */,
+ int /* num_wchars */,
+ XRectangle* /* overall_ink_return */,
+ XRectangle* /* overall_logical_return */
+#endif
+);
+
+extern int Xutf8TextExtents(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */,
+ _Xconst char* /* text */,
+ int /* bytes_text */,
+ XRectangle* /* overall_ink_return */,
+ XRectangle* /* overall_logical_return */
+#endif
+);
+
+extern Status XmbTextPerCharExtents(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */,
+ _Xconst char* /* text */,
+ int /* bytes_text */,
+ XRectangle* /* ink_extents_buffer */,
+ XRectangle* /* logical_extents_buffer */,
+ int /* buffer_size */,
+ int* /* num_chars */,
+ XRectangle* /* overall_ink_return */,
+ XRectangle* /* overall_logical_return */
+#endif
+);
+
+extern Status XwcTextPerCharExtents(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */,
+ _Xconst wchar_t* /* text */,
+ int /* num_wchars */,
+ XRectangle* /* ink_extents_buffer */,
+ XRectangle* /* logical_extents_buffer */,
+ int /* buffer_size */,
+ int* /* num_chars */,
+ XRectangle* /* overall_ink_return */,
+ XRectangle* /* overall_logical_return */
+#endif
+);
+
+extern Status Xutf8TextPerCharExtents(
+#if NeedFunctionPrototypes
+ XFontSet /* font_set */,
+ _Xconst char* /* text */,
+ int /* bytes_text */,
+ XRectangle* /* ink_extents_buffer */,
+ XRectangle* /* logical_extents_buffer */,
+ int /* buffer_size */,
+ int* /* num_chars */,
+ XRectangle* /* overall_ink_return */,
+ XRectangle* /* overall_logical_return */
+#endif
+);
+
+extern void XmbDrawText(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ XmbTextItem* /* text_items */,
+ int /* nitems */
+#endif
+);
+
+extern void XwcDrawText(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ XwcTextItem* /* text_items */,
+ int /* nitems */
+#endif
+);
+
+extern void Xutf8DrawText(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ XmbTextItem* /* text_items */,
+ int /* nitems */
+#endif
+);
+
+extern void XmbDrawString(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ XFontSet /* font_set */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ _Xconst char* /* text */,
+ int /* bytes_text */
+#endif
+);
+
+extern void XwcDrawString(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ XFontSet /* font_set */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ _Xconst wchar_t* /* text */,
+ int /* num_wchars */
+#endif
+);
+
+extern void Xutf8DrawString(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ XFontSet /* font_set */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ _Xconst char* /* text */,
+ int /* bytes_text */
+#endif
+);
+
+extern void XmbDrawImageString(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ XFontSet /* font_set */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ _Xconst char* /* text */,
+ int /* bytes_text */
+#endif
+);
+
+extern void XwcDrawImageString(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ XFontSet /* font_set */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ _Xconst wchar_t* /* text */,
+ int /* num_wchars */
+#endif
+);
+
+extern void Xutf8DrawImageString(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ XFontSet /* font_set */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ _Xconst char* /* text */,
+ int /* bytes_text */
+#endif
+);
+
+extern XIM XOpenIM(
+#if NeedFunctionPrototypes
+ Display* /* dpy */,
+ struct _XrmHashBucketRec* /* rdb */,
+ char* /* res_name */,
+ char* /* res_class */
+#endif
+);
+
+extern Status XCloseIM(
+#if NeedFunctionPrototypes
+ XIM /* im */
+#endif
+);
+
+extern char *XGetIMValues(
+#if NeedVarargsPrototypes
+ XIM /* im */, ...
+#endif
+);
+
+extern char *XSetIMValues(
+#if NeedVarargsPrototypes
+ XIM /* im */, ...
+#endif
+);
+
+extern Display *XDisplayOfIM(
+#if NeedFunctionPrototypes
+ XIM /* im */
+#endif
+);
+
+extern char *XLocaleOfIM(
+#if NeedFunctionPrototypes
+ XIM /* im*/
+#endif
+);
+
+extern XIC XCreateIC(
+#if NeedVarargsPrototypes
+ XIM /* im */, ...
+#endif
+);
+
+extern void XDestroyIC(
+#if NeedFunctionPrototypes
+ XIC /* ic */
+#endif
+);
+
+extern void XSetICFocus(
+#if NeedFunctionPrototypes
+ XIC /* ic */
+#endif
+);
+
+extern void XUnsetICFocus(
+#if NeedFunctionPrototypes
+ XIC /* ic */
+#endif
+);
+
+extern wchar_t *XwcResetIC(
+#if NeedFunctionPrototypes
+ XIC /* ic */
+#endif
+);
+
+extern char *XmbResetIC(
+#if NeedFunctionPrototypes
+ XIC /* ic */
+#endif
+);
+
+extern char *Xutf8ResetIC(
+#if NeedFunctionPrototypes
+ XIC /* ic */
+#endif
+);
+
+extern char *XSetICValues(
+#if NeedVarargsPrototypes
+ XIC /* ic */, ...
+#endif
+);
+
+extern char *XGetICValues(
+#if NeedVarargsPrototypes
+ XIC /* ic */, ...
+#endif
+);
+
+extern XIM XIMOfIC(
+#if NeedFunctionPrototypes
+ XIC /* ic */
+#endif
+);
+
+extern Bool XFilterEvent(
+#if NeedFunctionPrototypes
+ XEvent* /* event */,
+ Window /* window */
+#endif
+);
+
+extern int XmbLookupString(
+#if NeedFunctionPrototypes
+ XIC /* ic */,
+ XKeyPressedEvent* /* event */,
+ char* /* buffer_return */,
+ int /* bytes_buffer */,
+ KeySym* /* keysym_return */,
+ Status* /* status_return */
+#endif
+);
+
+extern int XwcLookupString(
+#if NeedFunctionPrototypes
+ XIC /* ic */,
+ XKeyPressedEvent* /* event */,
+ wchar_t* /* buffer_return */,
+ int /* wchars_buffer */,
+ KeySym* /* keysym_return */,
+ Status* /* status_return */
+#endif
+);
+
+extern int Xutf8LookupString(
+#if NeedFunctionPrototypes
+ XIC /* ic */,
+ XKeyPressedEvent* /* event */,
+ char* /* buffer_return */,
+ int /* bytes_buffer */,
+ KeySym* /* keysym_return */,
+ Status* /* status_return */
+#endif
+);
+
+extern XVaNestedList XVaCreateNestedList(
+#if NeedVarargsPrototypes
+ int /*unused*/, ...
+#endif
+);
+
+/* internal connections for IMs */
+
+extern Bool XRegisterIMInstantiateCallback(
+#if NeedFunctionPrototypes
+ Display* /* dpy */,
+ struct _XrmHashBucketRec* /* rdb */,
+ char* /* res_name */,
+ char* /* res_class */,
+ XIDProc /* callback */,
+ XPointer /* client_data */
+#endif
+);
+
+extern Bool XUnregisterIMInstantiateCallback(
+#if NeedFunctionPrototypes
+ Display* /* dpy */,
+ struct _XrmHashBucketRec* /* rdb */,
+ char* /* res_name */,
+ char* /* res_class */,
+ XIDProc /* callback */,
+ XPointer /* client_data */
+#endif
+);
+
+typedef void (*XConnectionWatchProc)(
+#if NeedFunctionPrototypes
+ Display* /* dpy */,
+ XPointer /* client_data */,
+ int /* fd */,
+ Bool /* opening */, /* open or close flag */
+ XPointer* /* watch_data */ /* open sets, close uses */
+#endif
+);
+
+
+extern Status XInternalConnectionNumbers(
+#if NeedFunctionPrototypes
+ Display* /* dpy */,
+ int** /* fd_return */,
+ int* /* count_return */
+#endif
+);
+
+extern void XProcessInternalConnection(
+#if NeedFunctionPrototypes
+ Display* /* dpy */,
+ int /* fd */
+#endif
+);
+
+extern Status XAddConnectionWatch(
+#if NeedFunctionPrototypes
+ Display* /* dpy */,
+ XConnectionWatchProc /* callback */,
+ XPointer /* client_data */
+#endif
+);
+
+extern void XRemoveConnectionWatch(
+#if NeedFunctionPrototypes
+ Display* /* dpy */,
+ XConnectionWatchProc /* callback */,
+ XPointer /* client_data */
+#endif
+);
+
+extern void XSetAuthorization(
+#if NeedFunctionPrototypes
+ char * /* name */,
+ int /* namelen */,
+ char * /* data */,
+ int /* datalen */
+#endif
+);
+
+extern int _Xmbtowc(
+#if NeedFunctionPrototypes
+ wchar_t * /* wstr */,
+#ifdef ISC
+ char const * /* str */,
+ size_t /* len */
+#else
+ char * /* str */,
+ int /* len */
+#endif
+#endif
+);
+
+extern int _Xwctomb(
+#if NeedFunctionPrototypes
+ char * /* str */,
+ wchar_t /* wc */
+#endif
+);
+
+_XFUNCPROTOEND
+#endif /* if 0 */
+
+#endif /* _XLIB_H_ */
+
+
+/* $Xorg: Xutil.h,v 1.8 2001/02/09 02:03:39 xorgcvs Exp $ */
+
+/***********************************************************
+
+Copyright 1987, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+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
+OPEN GROUP 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 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+
+ All Rights Reserved
+
+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 Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+/* $XFree86: xc/lib/X11/Xutil.h,v 3.5 2003/01/26 02:40:10 dawes Exp $ */
+
+#ifndef _XUTIL_H_
+#define _XUTIL_H_
+
+/* You must include <X11/Xlib.h> before including this file */
+#if 0
+#include <X11/Xlib.h>
+#endif
+
+/*
+ * Bitmask returned by XParseGeometry(). Each bit tells if the corresponding
+ * value (x, y, width, height) was found in the parsed string.
+ */
+#define NoValue 0x0000
+#define XValue 0x0001
+#define YValue 0x0002
+#define WidthValue 0x0004
+#define HeightValue 0x0008
+#define AllValues 0x000F
+#define XNegative 0x0010
+#define YNegative 0x0020
+
+/*
+ * new version containing base_width, base_height, and win_gravity fields;
+ * used with WM_NORMAL_HINTS.
+ */
+typedef struct {
+ long flags; /* marks which fields in this structure are defined */
+ int x, y; /* obsolete for new window mgrs, but clients */
+ int width, height; /* should set so old wm's don't mess up */
+ int min_width, min_height;
+ int max_width, max_height;
+ int width_inc, height_inc;
+ struct {
+ int x; /* numerator */
+ int y; /* denominator */
+ } min_aspect, max_aspect;
+ int base_width, base_height; /* added by ICCCM version 1 */
+ int win_gravity; /* added by ICCCM version 1 */
+} XSizeHints;
+
+/*
+ * The next block of definitions are for window manager properties that
+ * clients and applications use for communication.
+ */
+
+/* flags argument in size hints */
+#define USPosition (1L << 0) /* user specified x, y */
+#define USSize (1L << 1) /* user specified width, height */
+
+#define PPosition (1L << 2) /* program specified position */
+#define PSize (1L << 3) /* program specified size */
+#define PMinSize (1L << 4) /* program specified minimum size */
+#define PMaxSize (1L << 5) /* program specified maximum size */
+#define PResizeInc (1L << 6) /* program specified resize increments */
+#define PAspect (1L << 7) /* program specified min and max aspect ratios */
+#define PBaseSize (1L << 8) /* program specified base for incrementing */
+#define PWinGravity (1L << 9) /* program specified window gravity */
+
+/* obsolete */
+#define PAllHints (PPosition|PSize|PMinSize|PMaxSize|PResizeInc|PAspect)
+
+
+
+typedef struct {
+ long flags; /* marks which fields in this structure are defined */
+ Bool input; /* does this application rely on the window manager to
+ get keyboard input? */
+ int initial_state; /* see below */
+ Pixmap icon_pixmap; /* pixmap to be used as icon */
+ Window icon_window; /* window to be used as icon */
+ int icon_x, icon_y; /* initial position of icon */
+ Pixmap icon_mask; /* icon mask bitmap */
+ XID window_group; /* id of related window group */
+ /* this structure may be extended in the future */
+} XWMHints;
+
+/* definition for flags of XWMHints */
+
+#define InputHint (1L << 0)
+#define StateHint (1L << 1)
+#define IconPixmapHint (1L << 2)
+#define IconWindowHint (1L << 3)
+#define IconPositionHint (1L << 4)
+#define IconMaskHint (1L << 5)
+#define WindowGroupHint (1L << 6)
+#define AllHints (InputHint|StateHint|IconPixmapHint|IconWindowHint| \
+IconPositionHint|IconMaskHint|WindowGroupHint)
+#define XUrgencyHint (1L << 8)
+
+/* definitions for initial window state */
+#define WithdrawnState 0 /* for windows that are not mapped */
+#define NormalState 1 /* most applications want to start this way */
+#define IconicState 3 /* application wants to start as an icon */
+
+/*
+ * Obsolete states no longer defined by ICCCM
+ */
+#define DontCareState 0 /* don't know or care */
+#define ZoomState 2 /* application wants to start zoomed */
+#define InactiveState 4 /* application believes it is seldom used; */
+ /* some wm's may put it on inactive menu */
+
+
+/*
+ * new structure for manipulating TEXT properties; used with WM_NAME,
+ * WM_ICON_NAME, WM_CLIENT_MACHINE, and WM_COMMAND.
+ */
+typedef struct {
+ unsigned char *value; /* same as Property routines */
+ Atom encoding; /* prop type */
+ int format; /* prop data format: 8, 16, or 32 */
+ unsigned long nitems; /* number of data items in value */
+} XTextProperty;
+
+#define XNoMemory -1
+#define XLocaleNotSupported -2
+#define XConverterNotFound -3
+
+typedef enum {
+ XStringStyle, /* STRING */
+ XCompoundTextStyle, /* COMPOUND_TEXT */
+ XTextStyle, /* text in owner's encoding (current locale)*/
+ XStdICCTextStyle, /* STRING, else COMPOUND_TEXT */
+ /* The following is an XFree86 extension, introduced in November 2000 */
+ XUTF8StringStyle /* UTF8_STRING */
+} XICCEncodingStyle;
+
+typedef struct {
+ int min_width, min_height;
+ int max_width, max_height;
+ int width_inc, height_inc;
+} XIconSize;
+
+typedef struct {
+ char *res_name;
+ char *res_class;
+} XClassHint;
+
+/*
+ * These macros are used to give some sugar to the image routines so that
+ * naive people are more comfortable with them.
+ */
+#define XDestroyImage(ximage) \
+ ((*((ximage)->f.destroy_image))((ximage)))
+#define XGetPixel(ximage, x, y) \
+ ((*((ximage)->f.get_pixel))((ximage), (x), (y)))
+#define XPutPixel(ximage, x, y, pixel) \
+ ((*((ximage)->f.put_pixel))((ximage), (x), (y), (pixel)))
+#define XSubImage(ximage, x, y, width, height) \
+ ((*((ximage)->f.sub_image))((ximage), (x), (y), (width), (height)))
+#define XAddPixel(ximage, value) \
+ ((*((ximage)->f.add_pixel))((ximage), (value)))
+
+/*
+ * Compose sequence status structure, used in calling XLookupString.
+ */
+typedef struct _XComposeStatus {
+ XPointer compose_ptr; /* state table pointer */
+ int chars_matched; /* match state */
+} XComposeStatus;
+
+/*
+ * Keysym macros, used on Keysyms to test for classes of symbols
+ */
+#define IsKeypadKey(keysym) \
+ (((KeySym)(keysym) >= XK_KP_Space) && ((KeySym)(keysym) <= XK_KP_Equal))
+
+#define IsPrivateKeypadKey(keysym) \
+ (((KeySym)(keysym) >= 0x11000000) && ((KeySym)(keysym) <= 0x1100FFFF))
+
+#define IsCursorKey(keysym) \
+ (((KeySym)(keysym) >= XK_Home) && ((KeySym)(keysym) < XK_Select))
+
+#define IsPFKey(keysym) \
+ (((KeySym)(keysym) >= XK_KP_F1) && ((KeySym)(keysym) <= XK_KP_F4))
+
+#define IsFunctionKey(keysym) \
+ (((KeySym)(keysym) >= XK_F1) && ((KeySym)(keysym) <= XK_F35))
+
+#define IsMiscFunctionKey(keysym) \
+ (((KeySym)(keysym) >= XK_Select) && ((KeySym)(keysym) <= XK_Break))
+
+#define IsModifierKey(keysym) \
+ ((((KeySym)(keysym) >= XK_Shift_L) && ((KeySym)(keysym) <= XK_Hyper_R)) \
+ || (((KeySym)(keysym) >= XK_ISO_Lock) && \
+ ((KeySym)(keysym) <= XK_ISO_Last_Group_Lock)) \
+ || ((KeySym)(keysym) == XK_Mode_switch) \
+ || ((KeySym)(keysym) == XK_Num_Lock))
+/*
+ * opaque reference to Region data type
+ */
+typedef struct _XRegion *Region;
+
+/* Return values from XRectInRegion() */
+
+#define RectangleOut 0
+#define RectangleIn 1
+#define RectanglePart 2
+
+
+/*
+ * Information used by the visual utility routines to find desired visual
+ * type from the many visuals a display may support.
+ */
+
+typedef struct {
+ Visual *visual;
+ VisualID visualid;
+ int screen;
+ int depth;
+#if defined(__cplusplus) || defined(c_plusplus)
+ int c_class; /* C++ */
+#else
+ int class;
+#endif
+ unsigned long red_mask;
+ unsigned long green_mask;
+ unsigned long blue_mask;
+ int colormap_size;
+ int bits_per_rgb;
+} XVisualInfo;
+
+#define VisualNoMask 0x0
+#define VisualIDMask 0x1
+#define VisualScreenMask 0x2
+#define VisualDepthMask 0x4
+#define VisualClassMask 0x8
+#define VisualRedMaskMask 0x10
+#define VisualGreenMaskMask 0x20
+#define VisualBlueMaskMask 0x40
+#define VisualColormapSizeMask 0x80
+#define VisualBitsPerRGBMask 0x100
+#define VisualAllMask 0x1FF
+
+/*
+ * This defines a window manager property that clients may use to
+ * share standard color maps of type RGB_COLOR_MAP:
+ */
+typedef struct {
+ Colormap colormap;
+ unsigned long red_max;
+ unsigned long red_mult;
+ unsigned long green_max;
+ unsigned long green_mult;
+ unsigned long blue_max;
+ unsigned long blue_mult;
+ unsigned long base_pixel;
+ VisualID visualid; /* added by ICCCM version 1 */
+ XID killid; /* added by ICCCM version 1 */
+} XStandardColormap;
+
+#define ReleaseByFreeingColormap ((XID) 1L) /* for killid field above */
+
+
+/*
+ * return codes for XReadBitmapFile and XWriteBitmapFile
+ */
+#define BitmapSuccess 0
+#define BitmapOpenFailed 1
+#define BitmapFileInvalid 2
+#define BitmapNoMemory 3
+
+/****************************************************************
+ *
+ * Context Management
+ *
+ ****************************************************************/
+
+
+/* Associative lookup table return codes */
+
+#define XCSUCCESS 0 /* No error. */
+#define XCNOMEM 1 /* Out of memory */
+#define XCNOENT 2 /* No entry in table */
+
+typedef int XContext;
+
+#define XUniqueContext() ((XContext) XrmUniqueQuark())
+#define XStringToContext(string) ((XContext) XrmStringToQuark(string))
+
+#if 0
+_XFUNCPROTOBEGIN
+
+/* The following declarations are alphabetized. */
+
+extern XClassHint *XAllocClassHint (
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern XIconSize *XAllocIconSize (
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern XSizeHints *XAllocSizeHints (
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern XStandardColormap *XAllocStandardColormap (
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern XWMHints *XAllocWMHints (
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern int XClipBox(
+#if NeedFunctionPrototypes
+ Region /* r */,
+ XRectangle* /* rect_return */
+#endif
+);
+
+extern Region XCreateRegion(
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern const char *XDefaultString (void);
+
+extern int XDeleteContext(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* rid */,
+ XContext /* context */
+#endif
+);
+
+extern int XDestroyRegion(
+#if NeedFunctionPrototypes
+ Region /* r */
+#endif
+);
+
+extern int XEmptyRegion(
+#if NeedFunctionPrototypes
+ Region /* r */
+#endif
+);
+
+extern int XEqualRegion(
+#if NeedFunctionPrototypes
+ Region /* r1 */,
+ Region /* r2 */
+#endif
+);
+
+extern int XFindContext(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* rid */,
+ XContext /* context */,
+ XPointer* /* data_return */
+#endif
+);
+
+extern Status XGetClassHint(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XClassHint* /* class_hints_return */
+#endif
+);
+
+extern Status XGetIconSizes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XIconSize** /* size_list_return */,
+ int* /* count_return */
+#endif
+);
+
+extern Status XGetNormalHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints_return */
+#endif
+);
+
+extern Status XGetRGBColormaps(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XStandardColormap** /* stdcmap_return */,
+ int* /* count_return */,
+ Atom /* property */
+#endif
+);
+
+extern Status XGetSizeHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints_return */,
+ Atom /* property */
+#endif
+);
+
+extern Status XGetStandardColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XStandardColormap* /* colormap_return */,
+ Atom /* property */
+#endif
+);
+
+extern Status XGetTextProperty(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* window */,
+ XTextProperty* /* text_prop_return */,
+ Atom /* property */
+#endif
+);
+
+extern XVisualInfo *XGetVisualInfo(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ long /* vinfo_mask */,
+ XVisualInfo* /* vinfo_template */,
+ int* /* nitems_return */
+#endif
+);
+
+extern Status XGetWMClientMachine(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* text_prop_return */
+#endif
+);
+
+extern XWMHints *XGetWMHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern Status XGetWMIconName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* text_prop_return */
+#endif
+);
+
+extern Status XGetWMName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* text_prop_return */
+#endif
+);
+
+extern Status XGetWMNormalHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints_return */,
+ long* /* supplied_return */
+#endif
+);
+
+extern Status XGetWMSizeHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints_return */,
+ long* /* supplied_return */,
+ Atom /* property */
+#endif
+);
+
+extern Status XGetZoomHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* zhints_return */
+#endif
+);
+
+extern int XIntersectRegion(
+#if NeedFunctionPrototypes
+ Region /* sra */,
+ Region /* srb */,
+ Region /* dr_return */
+#endif
+);
+
+extern void XConvertCase(
+#if NeedFunctionPrototypes
+ KeySym /* sym */,
+ KeySym* /* lower */,
+ KeySym* /* upper */
+#endif
+);
+
+extern int XLookupString(
+#if NeedFunctionPrototypes
+ XKeyEvent* /* event_struct */,
+ char* /* buffer_return */,
+ int /* bytes_buffer */,
+ KeySym* /* keysym_return */,
+ XComposeStatus* /* status_in_out */
+#endif
+);
+
+extern Status XMatchVisualInfo(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen */,
+ int /* depth */,
+ int /* class */,
+ XVisualInfo* /* vinfo_return */
+#endif
+);
+
+extern int XOffsetRegion(
+#if NeedFunctionPrototypes
+ Region /* r */,
+ int /* dx */,
+ int /* dy */
+#endif
+);
+
+extern Bool XPointInRegion(
+#if NeedFunctionPrototypes
+ Region /* r */,
+ int /* x */,
+ int /* y */
+#endif
+);
+
+extern Region XPolygonRegion(
+#if NeedFunctionPrototypes
+ XPoint* /* points */,
+ int /* n */,
+ int /* fill_rule */
+#endif
+);
+
+extern int XRectInRegion(
+#if NeedFunctionPrototypes
+ Region /* r */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+
+extern int XSaveContext(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* rid */,
+ XContext /* context */,
+ _Xconst char* /* data */
+#endif
+);
+
+extern int XSetClassHint(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XClassHint* /* class_hints */
+#endif
+);
+
+extern int XSetIconSizes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XIconSize* /* size_list */,
+ int /* count */
+#endif
+);
+
+extern int XSetNormalHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints */
+#endif
+);
+
+extern void XSetRGBColormaps(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XStandardColormap* /* stdcmaps */,
+ int /* count */,
+ Atom /* property */
+#endif
+);
+
+extern int XSetSizeHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints */,
+ Atom /* property */
+#endif
+);
+
+extern int XSetStandardProperties(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ _Xconst char* /* window_name */,
+ _Xconst char* /* icon_name */,
+ Pixmap /* icon_pixmap */,
+ char** /* argv */,
+ int /* argc */,
+ XSizeHints* /* hints */
+#endif
+);
+
+extern void XSetTextProperty(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* text_prop */,
+ Atom /* property */
+#endif
+);
+
+extern void XSetWMClientMachine(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* text_prop */
+#endif
+);
+
+extern int XSetWMHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XWMHints* /* wm_hints */
+#endif
+);
+
+extern void XSetWMIconName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* text_prop */
+#endif
+);
+
+extern void XSetWMName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* text_prop */
+#endif
+);
+
+extern void XSetWMNormalHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints */
+#endif
+);
+
+extern void XSetWMProperties(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* window_name */,
+ XTextProperty* /* icon_name */,
+ char** /* argv */,
+ int /* argc */,
+ XSizeHints* /* normal_hints */,
+ XWMHints* /* wm_hints */,
+ XClassHint* /* class_hints */
+#endif
+);
+
+extern void XmbSetWMProperties(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ _Xconst char* /* window_name */,
+ _Xconst char* /* icon_name */,
+ char** /* argv */,
+ int /* argc */,
+ XSizeHints* /* normal_hints */,
+ XWMHints* /* wm_hints */,
+ XClassHint* /* class_hints */
+#endif
+);
+
+extern void Xutf8SetWMProperties(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ _Xconst char* /* window_name */,
+ _Xconst char* /* icon_name */,
+ char** /* argv */,
+ int /* argc */,
+ XSizeHints* /* normal_hints */,
+ XWMHints* /* wm_hints */,
+ XClassHint* /* class_hints */
+#endif
+);
+
+extern void XSetWMSizeHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints */,
+ Atom /* property */
+#endif
+);
+
+extern int XSetRegion(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ Region /* r */
+#endif
+);
+
+extern void XSetStandardColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XStandardColormap* /* colormap */,
+ Atom /* property */
+#endif
+);
+
+extern int XSetZoomHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* zhints */
+#endif
+);
+
+extern int XShrinkRegion(
+#if NeedFunctionPrototypes
+ Region /* r */,
+ int /* dx */,
+ int /* dy */
+#endif
+);
+
+extern Status XStringListToTextProperty(
+#if NeedFunctionPrototypes
+ char** /* list */,
+ int /* count */,
+ XTextProperty* /* text_prop_return */
+#endif
+);
+
+extern int XSubtractRegion(
+#if NeedFunctionPrototypes
+ Region /* sra */,
+ Region /* srb */,
+ Region /* dr_return */
+#endif
+);
+
+extern int XmbTextListToTextProperty(
+ Display* display,
+ char** list,
+ int count,
+ XICCEncodingStyle style,
+ XTextProperty* text_prop_return
+);
+
+extern int XwcTextListToTextProperty(
+ Display* display,
+ wchar_t** list,
+ int count,
+ XICCEncodingStyle style,
+ XTextProperty* text_prop_return
+);
+
+extern int Xutf8TextListToTextProperty(
+ Display* display,
+ char** list,
+ int count,
+ XICCEncodingStyle style,
+ XTextProperty* text_prop_return
+);
+
+extern void XwcFreeStringList(
+ wchar_t** list
+);
+
+extern Status XTextPropertyToStringList(
+#if NeedFunctionPrototypes
+ XTextProperty* /* text_prop */,
+ char*** /* list_return */,
+ int* /* count_return */
+#endif
+);
+
+extern int XmbTextPropertyToTextList(
+ Display* display,
+ const XTextProperty* text_prop,
+ char*** list_return,
+ int* count_return
+);
+
+extern int XwcTextPropertyToTextList(
+ Display* display,
+ const XTextProperty* text_prop,
+ wchar_t*** list_return,
+ int* count_return
+);
+
+extern int Xutf8TextPropertyToTextList(
+ Display* display,
+ const XTextProperty* text_prop,
+ char*** list_return,
+ int* count_return
+);
+
+extern int XUnionRectWithRegion(
+#if NeedFunctionPrototypes
+ XRectangle* /* rectangle */,
+ Region /* src_region */,
+ Region /* dest_region_return */
+#endif
+);
+
+extern int XUnionRegion(
+#if NeedFunctionPrototypes
+ Region /* sra */,
+ Region /* srb */,
+ Region /* dr_return */
+#endif
+);
+
+extern int XWMGeometry(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */,
+ _Xconst char* /* user_geometry */,
+ _Xconst char* /* default_geometry */,
+ unsigned int /* border_width */,
+ XSizeHints* /* hints */,
+ int* /* x_return */,
+ int* /* y_return */,
+ int* /* width_return */,
+ int* /* height_return */,
+ int* /* gravity_return */
+#endif
+);
+
+extern int XXorRegion(
+#if NeedFunctionPrototypes
+ Region /* sra */,
+ Region /* srb */,
+ Region /* dr_return */
+#endif
+);
+
+_XFUNCPROTOEND
+#endif /* if 0 */
+
+#ifndef XATOM_H
+#define XATOM_H 1
+
+/* THIS IS A GENERATED FILE
+ *
+ * Do not change! Changing this file implies a protocol change!
+ */
+
+#define XA_PRIMARY ((Atom) 1)
+#define XA_SECONDARY ((Atom) 2)
+#define XA_ARC ((Atom) 3)
+#define XA_ATOM ((Atom) 4)
+#define XA_BITMAP ((Atom) 5)
+#define XA_CARDINAL ((Atom) 6)
+#define XA_COLORMAP ((Atom) 7)
+#define XA_CURSOR ((Atom) 8)
+#define XA_CUT_BUFFER0 ((Atom) 9)
+#define XA_CUT_BUFFER1 ((Atom) 10)
+#define XA_CUT_BUFFER2 ((Atom) 11)
+#define XA_CUT_BUFFER3 ((Atom) 12)
+#define XA_CUT_BUFFER4 ((Atom) 13)
+#define XA_CUT_BUFFER5 ((Atom) 14)
+#define XA_CUT_BUFFER6 ((Atom) 15)
+#define XA_CUT_BUFFER7 ((Atom) 16)
+#define XA_DRAWABLE ((Atom) 17)
+#define XA_FONT ((Atom) 18)
+#define XA_INTEGER ((Atom) 19)
+#define XA_PIXMAP ((Atom) 20)
+#define XA_POINT ((Atom) 21)
+#define XA_RECTANGLE ((Atom) 22)
+#define XA_RESOURCE_MANAGER ((Atom) 23)
+#define XA_RGB_COLOR_MAP ((Atom) 24)
+#define XA_RGB_BEST_MAP ((Atom) 25)
+#define XA_RGB_BLUE_MAP ((Atom) 26)
+#define XA_RGB_DEFAULT_MAP ((Atom) 27)
+#define XA_RGB_GRAY_MAP ((Atom) 28)
+#define XA_RGB_GREEN_MAP ((Atom) 29)
+#define XA_RGB_RED_MAP ((Atom) 30)
+#define XA_STRING ((Atom) 31)
+#define XA_VISUALID ((Atom) 32)
+#define XA_WINDOW ((Atom) 33)
+#define XA_WM_COMMAND ((Atom) 34)
+#define XA_WM_HINTS ((Atom) 35)
+#define XA_WM_CLIENT_MACHINE ((Atom) 36)
+#define XA_WM_ICON_NAME ((Atom) 37)
+#define XA_WM_ICON_SIZE ((Atom) 38)
+#define XA_WM_NAME ((Atom) 39)
+#define XA_WM_NORMAL_HINTS ((Atom) 40)
+#define XA_WM_SIZE_HINTS ((Atom) 41)
+#define XA_WM_ZOOM_HINTS ((Atom) 42)
+#define XA_MIN_SPACE ((Atom) 43)
+#define XA_NORM_SPACE ((Atom) 44)
+#define XA_MAX_SPACE ((Atom) 45)
+#define XA_END_SPACE ((Atom) 46)
+#define XA_SUPERSCRIPT_X ((Atom) 47)
+#define XA_SUPERSCRIPT_Y ((Atom) 48)
+#define XA_SUBSCRIPT_X ((Atom) 49)
+#define XA_SUBSCRIPT_Y ((Atom) 50)
+#define XA_UNDERLINE_POSITION ((Atom) 51)
+#define XA_UNDERLINE_THICKNESS ((Atom) 52)
+#define XA_STRIKEOUT_ASCENT ((Atom) 53)
+#define XA_STRIKEOUT_DESCENT ((Atom) 54)
+#define XA_ITALIC_ANGLE ((Atom) 55)
+#define XA_X_HEIGHT ((Atom) 56)
+#define XA_QUAD_WIDTH ((Atom) 57)
+#define XA_WEIGHT ((Atom) 58)
+#define XA_POINT_SIZE ((Atom) 59)
+#define XA_RESOLUTION ((Atom) 60)
+#define XA_COPYRIGHT ((Atom) 61)
+#define XA_NOTICE ((Atom) 62)
+#define XA_FONT_NAME ((Atom) 63)
+#define XA_FAMILY_NAME ((Atom) 64)
+#define XA_FULL_NAME ((Atom) 65)
+#define XA_CAP_HEIGHT ((Atom) 66)
+#define XA_WM_CLASS ((Atom) 67)
+#define XA_WM_TRANSIENT_FOR ((Atom) 68)
+
+#define XA_LAST_PREDEFINED ((Atom) 68)
+#endif /* XATOM_H */
+
+#endif /* _XUTIL_H_ */
+
+extern KeyCode XKeysymToKeycode(
+ Display* /* display */,
+ KeySym /* keysym */
+);
+extern KeySym XKeycodeToKeysym(
+ Display* /* display */,
+ KeyCode /* keycode */,
+ int /* index */
+);
+extern char *XKeysymToString(
+ KeySym /* keysym */
+);
+extern KeySym XStringToKeysym(
+ char* /* string */
+);
+
+typedef int (*XErrorHandler) ( /* WARNING, this type not in Xlib spec */
+ Display* /* display */,
+ XErrorEvent* /* error_event */
+);
+
+extern XErrorHandler XSetErrorHandler (
+ XErrorHandler /* handler */
+);
+
+typedef int (*XIOErrorHandler) ( /* WARNING, this type not in Xlib spec */
+ Display* /* display */
+);
+
+extern XIOErrorHandler XSetIOErrorHandler (
+ XIOErrorHandler /* handler */
+);
+
diff --git a/x11vnc/nox11_funcs.h b/x11vnc/nox11_funcs.h
new file mode 100644
index 0000000..e127309
--- /dev/null
+++ b/x11vnc/nox11_funcs.h
@@ -0,0 +1,2820 @@
+#if 0
+generated by util script makekeysyms.pl:
+
+-----
+#!/usr/bin/perl
+
+print "#if 0\n";
+print "generated by util script makekeysyms.pl:\n\n";
+print "-----\n";
+system("cat $0");
+print "-----\n";
+print "#endif\n\n";
+
+# probably should use rfb/keysym.h:
+$file = shift;
+$file = "/usr/X11R6/include/X11/keysymdef.h" unless $file;
+
+open(KS, "<$file") || die "$file: $!";
+
+while (<KS>) {
+ chomp;
+ next if /^#define (XK_MISCELLANY|XK_XKB_KEYS|XK_LATIN1|XK_LATIN2|XK_LATIN3|XK_LATIN4|XK_GREEK)/;
+ next if /^#define (XK_LATIN8|XK_LATIN9|XK_CAUCASUS|XK_KATAKANA|XK_ARABIC|XK_CYRILLIC|XK_HEBREW|XK_THAI|XK_KOREAN|XK_ARMENIAN|XK_GEORGIAN|XK_VIETNAMESE|XK_CURRENCY)/;
+ if (/^#define\s+(XK_\w+)/) {
+ push @xk, $1;
+ } elsif (/^#(ifdef|ifndef|endif)/) {
+ $_ =~ s/ifndef XK_0/ifndef XK_0_nosuch/;
+ push @xk, $_;
+ }
+}
+close(KS);
+
+print <<"END";
+
+KeySym XStringToKeysym(char *s) {
+END
+foreach $ks (@xk) {
+ $s = $ks;
+ if ($ks =~ /#/) {
+ print "$ks\n";
+ next;
+ }
+ $s =~ s/^XK_//;
+ print " if (!strcmp(s, \"$s\")) return $ks;\n";
+}
+print <<"END";
+ return NoSymbol;
+}
+
+END
+
+print <<"END";
+
+char *XKeysymToString(KeySym k) {
+END
+foreach $ks (@xk) {
+ $s = $ks;
+ if ($ks =~ /#/) {
+ print "$ks\n";
+ next;
+ }
+ $s =~ s/^XK_//;
+ print " if (k == $ks) return \"$s\";\n";
+}
+print <<"END";
+ return NULL;
+}
+
+KeySym XKeycodeToKeysym(Display *display, KeyCode keycode, int index) {
+ return NoSymbol;
+}
+
+KeyCode XKeysymToKeycode(Display *display, KeySym keysym) {
+ return NoSymbol;
+}
+
+XErrorHandler XSetErrorHandler (XErrorHandler h) {
+ return h;
+}
+
+END
+
+exit 0;
+-----
+#endif
+
+
+KeySym XStringToKeysym(char *s) {
+#ifndef XK_0_nosuch
+ if (!strcmp(s, "VoidSymbol")) return XK_VoidSymbol;
+#ifdef XK_MISCELLANY
+ if (!strcmp(s, "BackSpace")) return XK_BackSpace;
+ if (!strcmp(s, "Tab")) return XK_Tab;
+ if (!strcmp(s, "Linefeed")) return XK_Linefeed;
+ if (!strcmp(s, "Clear")) return XK_Clear;
+ if (!strcmp(s, "Return")) return XK_Return;
+ if (!strcmp(s, "Pause")) return XK_Pause;
+ if (!strcmp(s, "Scroll_Lock")) return XK_Scroll_Lock;
+ if (!strcmp(s, "Sys_Req")) return XK_Sys_Req;
+ if (!strcmp(s, "Escape")) return XK_Escape;
+ if (!strcmp(s, "Delete")) return XK_Delete;
+ if (!strcmp(s, "Multi_key")) return XK_Multi_key;
+ if (!strcmp(s, "SingleCandidate")) return XK_SingleCandidate;
+ if (!strcmp(s, "MultipleCandidate")) return XK_MultipleCandidate;
+ if (!strcmp(s, "PreviousCandidate")) return XK_PreviousCandidate;
+ if (!strcmp(s, "Kanji")) return XK_Kanji;
+ if (!strcmp(s, "Muhenkan")) return XK_Muhenkan;
+ if (!strcmp(s, "Henkan_Mode")) return XK_Henkan_Mode;
+ if (!strcmp(s, "Henkan")) return XK_Henkan;
+ if (!strcmp(s, "Romaji")) return XK_Romaji;
+ if (!strcmp(s, "Hiragana")) return XK_Hiragana;
+ if (!strcmp(s, "Katakana")) return XK_Katakana;
+ if (!strcmp(s, "Hiragana_Katakana")) return XK_Hiragana_Katakana;
+ if (!strcmp(s, "Zenkaku")) return XK_Zenkaku;
+ if (!strcmp(s, "Hankaku")) return XK_Hankaku;
+ if (!strcmp(s, "Zenkaku_Hankaku")) return XK_Zenkaku_Hankaku;
+ if (!strcmp(s, "Touroku")) return XK_Touroku;
+ if (!strcmp(s, "Massyo")) return XK_Massyo;
+ if (!strcmp(s, "Kana_Lock")) return XK_Kana_Lock;
+ if (!strcmp(s, "Kana_Shift")) return XK_Kana_Shift;
+ if (!strcmp(s, "Eisu_Shift")) return XK_Eisu_Shift;
+ if (!strcmp(s, "Eisu_toggle")) return XK_Eisu_toggle;
+ if (!strcmp(s, "Zen_Koho")) return XK_Zen_Koho;
+ if (!strcmp(s, "Mae_Koho")) return XK_Mae_Koho;
+ if (!strcmp(s, "Home")) return XK_Home;
+ if (!strcmp(s, "Left")) return XK_Left;
+ if (!strcmp(s, "Up")) return XK_Up;
+ if (!strcmp(s, "Right")) return XK_Right;
+ if (!strcmp(s, "Down")) return XK_Down;
+ if (!strcmp(s, "Prior")) return XK_Prior;
+ if (!strcmp(s, "Page_Up")) return XK_Page_Up;
+ if (!strcmp(s, "Next")) return XK_Next;
+ if (!strcmp(s, "Page_Down")) return XK_Page_Down;
+ if (!strcmp(s, "End")) return XK_End;
+ if (!strcmp(s, "Begin")) return XK_Begin;
+ if (!strcmp(s, "Select")) return XK_Select;
+ if (!strcmp(s, "Print")) return XK_Print;
+ if (!strcmp(s, "Execute")) return XK_Execute;
+ if (!strcmp(s, "Insert")) return XK_Insert;
+ if (!strcmp(s, "Undo")) return XK_Undo;
+ if (!strcmp(s, "Redo")) return XK_Redo;
+ if (!strcmp(s, "Menu")) return XK_Menu;
+ if (!strcmp(s, "Find")) return XK_Find;
+ if (!strcmp(s, "Cancel")) return XK_Cancel;
+ if (!strcmp(s, "Help")) return XK_Help;
+ if (!strcmp(s, "Break")) return XK_Break;
+ if (!strcmp(s, "Mode_switch")) return XK_Mode_switch;
+ if (!strcmp(s, "script_switch")) return XK_script_switch;
+ if (!strcmp(s, "Num_Lock")) return XK_Num_Lock;
+ if (!strcmp(s, "KP_Space")) return XK_KP_Space;
+ if (!strcmp(s, "KP_Tab")) return XK_KP_Tab;
+ if (!strcmp(s, "KP_Enter")) return XK_KP_Enter;
+ if (!strcmp(s, "KP_F1")) return XK_KP_F1;
+ if (!strcmp(s, "KP_F2")) return XK_KP_F2;
+ if (!strcmp(s, "KP_F3")) return XK_KP_F3;
+ if (!strcmp(s, "KP_F4")) return XK_KP_F4;
+ if (!strcmp(s, "KP_Home")) return XK_KP_Home;
+ if (!strcmp(s, "KP_Left")) return XK_KP_Left;
+ if (!strcmp(s, "KP_Up")) return XK_KP_Up;
+ if (!strcmp(s, "KP_Right")) return XK_KP_Right;
+ if (!strcmp(s, "KP_Down")) return XK_KP_Down;
+ if (!strcmp(s, "KP_Prior")) return XK_KP_Prior;
+ if (!strcmp(s, "KP_Page_Up")) return XK_KP_Page_Up;
+ if (!strcmp(s, "KP_Next")) return XK_KP_Next;
+ if (!strcmp(s, "KP_Page_Down")) return XK_KP_Page_Down;
+ if (!strcmp(s, "KP_End")) return XK_KP_End;
+ if (!strcmp(s, "KP_Begin")) return XK_KP_Begin;
+ if (!strcmp(s, "KP_Insert")) return XK_KP_Insert;
+ if (!strcmp(s, "KP_Delete")) return XK_KP_Delete;
+ if (!strcmp(s, "KP_Equal")) return XK_KP_Equal;
+ if (!strcmp(s, "KP_Multiply")) return XK_KP_Multiply;
+ if (!strcmp(s, "KP_Add")) return XK_KP_Add;
+ if (!strcmp(s, "KP_Separator")) return XK_KP_Separator;
+ if (!strcmp(s, "KP_Subtract")) return XK_KP_Subtract;
+ if (!strcmp(s, "KP_Decimal")) return XK_KP_Decimal;
+ if (!strcmp(s, "KP_Divide")) return XK_KP_Divide;
+ if (!strcmp(s, "KP_0")) return XK_KP_0;
+ if (!strcmp(s, "KP_1")) return XK_KP_1;
+ if (!strcmp(s, "KP_2")) return XK_KP_2;
+ if (!strcmp(s, "KP_3")) return XK_KP_3;
+ if (!strcmp(s, "KP_4")) return XK_KP_4;
+ if (!strcmp(s, "KP_5")) return XK_KP_5;
+ if (!strcmp(s, "KP_6")) return XK_KP_6;
+ if (!strcmp(s, "KP_7")) return XK_KP_7;
+ if (!strcmp(s, "KP_8")) return XK_KP_8;
+ if (!strcmp(s, "KP_9")) return XK_KP_9;
+ if (!strcmp(s, "F1")) return XK_F1;
+ if (!strcmp(s, "F2")) return XK_F2;
+ if (!strcmp(s, "F3")) return XK_F3;
+ if (!strcmp(s, "F4")) return XK_F4;
+ if (!strcmp(s, "F5")) return XK_F5;
+ if (!strcmp(s, "F6")) return XK_F6;
+ if (!strcmp(s, "F7")) return XK_F7;
+ if (!strcmp(s, "F8")) return XK_F8;
+ if (!strcmp(s, "F9")) return XK_F9;
+ if (!strcmp(s, "F10")) return XK_F10;
+ if (!strcmp(s, "F11")) return XK_F11;
+ if (!strcmp(s, "L1")) return XK_L1;
+ if (!strcmp(s, "F12")) return XK_F12;
+ if (!strcmp(s, "L2")) return XK_L2;
+ if (!strcmp(s, "F13")) return XK_F13;
+ if (!strcmp(s, "L3")) return XK_L3;
+ if (!strcmp(s, "F14")) return XK_F14;
+ if (!strcmp(s, "L4")) return XK_L4;
+ if (!strcmp(s, "F15")) return XK_F15;
+ if (!strcmp(s, "L5")) return XK_L5;
+ if (!strcmp(s, "F16")) return XK_F16;
+ if (!strcmp(s, "L6")) return XK_L6;
+ if (!strcmp(s, "F17")) return XK_F17;
+ if (!strcmp(s, "L7")) return XK_L7;
+ if (!strcmp(s, "F18")) return XK_F18;
+ if (!strcmp(s, "L8")) return XK_L8;
+ if (!strcmp(s, "F19")) return XK_F19;
+ if (!strcmp(s, "L9")) return XK_L9;
+ if (!strcmp(s, "F20")) return XK_F20;
+ if (!strcmp(s, "L10")) return XK_L10;
+ if (!strcmp(s, "F21")) return XK_F21;
+ if (!strcmp(s, "R1")) return XK_R1;
+ if (!strcmp(s, "F22")) return XK_F22;
+ if (!strcmp(s, "R2")) return XK_R2;
+ if (!strcmp(s, "F23")) return XK_F23;
+ if (!strcmp(s, "R3")) return XK_R3;
+ if (!strcmp(s, "F24")) return XK_F24;
+ if (!strcmp(s, "R4")) return XK_R4;
+ if (!strcmp(s, "F25")) return XK_F25;
+ if (!strcmp(s, "R5")) return XK_R5;
+ if (!strcmp(s, "F26")) return XK_F26;
+ if (!strcmp(s, "R6")) return XK_R6;
+ if (!strcmp(s, "F27")) return XK_F27;
+ if (!strcmp(s, "R7")) return XK_R7;
+ if (!strcmp(s, "F28")) return XK_F28;
+ if (!strcmp(s, "R8")) return XK_R8;
+ if (!strcmp(s, "F29")) return XK_F29;
+ if (!strcmp(s, "R9")) return XK_R9;
+ if (!strcmp(s, "F30")) return XK_F30;
+ if (!strcmp(s, "R10")) return XK_R10;
+ if (!strcmp(s, "F31")) return XK_F31;
+ if (!strcmp(s, "R11")) return XK_R11;
+ if (!strcmp(s, "F32")) return XK_F32;
+ if (!strcmp(s, "R12")) return XK_R12;
+ if (!strcmp(s, "F33")) return XK_F33;
+ if (!strcmp(s, "R13")) return XK_R13;
+ if (!strcmp(s, "F34")) return XK_F34;
+ if (!strcmp(s, "R14")) return XK_R14;
+ if (!strcmp(s, "F35")) return XK_F35;
+ if (!strcmp(s, "R15")) return XK_R15;
+ if (!strcmp(s, "Shift_L")) return XK_Shift_L;
+ if (!strcmp(s, "Shift_R")) return XK_Shift_R;
+ if (!strcmp(s, "Control_L")) return XK_Control_L;
+ if (!strcmp(s, "Control_R")) return XK_Control_R;
+ if (!strcmp(s, "Caps_Lock")) return XK_Caps_Lock;
+ if (!strcmp(s, "Shift_Lock")) return XK_Shift_Lock;
+ if (!strcmp(s, "Meta_L")) return XK_Meta_L;
+ if (!strcmp(s, "Meta_R")) return XK_Meta_R;
+ if (!strcmp(s, "Alt_L")) return XK_Alt_L;
+ if (!strcmp(s, "Alt_R")) return XK_Alt_R;
+ if (!strcmp(s, "Super_L")) return XK_Super_L;
+ if (!strcmp(s, "Super_R")) return XK_Super_R;
+ if (!strcmp(s, "Hyper_L")) return XK_Hyper_L;
+ if (!strcmp(s, "Hyper_R")) return XK_Hyper_R;
+#endif /* XK_MISCELLANY */
+#ifdef XK_XKB_KEYS
+ if (!strcmp(s, "ISO_Lock")) return XK_ISO_Lock;
+ if (!strcmp(s, "ISO_Level2_Latch")) return XK_ISO_Level2_Latch;
+ if (!strcmp(s, "ISO_Level3_Shift")) return XK_ISO_Level3_Shift;
+ if (!strcmp(s, "ISO_Level3_Latch")) return XK_ISO_Level3_Latch;
+ if (!strcmp(s, "ISO_Level3_Lock")) return XK_ISO_Level3_Lock;
+ if (!strcmp(s, "ISO_Group_Shift")) return XK_ISO_Group_Shift;
+ if (!strcmp(s, "ISO_Group_Latch")) return XK_ISO_Group_Latch;
+ if (!strcmp(s, "ISO_Group_Lock")) return XK_ISO_Group_Lock;
+ if (!strcmp(s, "ISO_Next_Group")) return XK_ISO_Next_Group;
+ if (!strcmp(s, "ISO_Next_Group_Lock")) return XK_ISO_Next_Group_Lock;
+ if (!strcmp(s, "ISO_Prev_Group")) return XK_ISO_Prev_Group;
+ if (!strcmp(s, "ISO_Prev_Group_Lock")) return XK_ISO_Prev_Group_Lock;
+ if (!strcmp(s, "ISO_First_Group")) return XK_ISO_First_Group;
+ if (!strcmp(s, "ISO_First_Group_Lock")) return XK_ISO_First_Group_Lock;
+ if (!strcmp(s, "ISO_Last_Group")) return XK_ISO_Last_Group;
+ if (!strcmp(s, "ISO_Last_Group_Lock")) return XK_ISO_Last_Group_Lock;
+ if (!strcmp(s, "ISO_Left_Tab")) return XK_ISO_Left_Tab;
+ if (!strcmp(s, "ISO_Move_Line_Up")) return XK_ISO_Move_Line_Up;
+ if (!strcmp(s, "ISO_Move_Line_Down")) return XK_ISO_Move_Line_Down;
+ if (!strcmp(s, "ISO_Partial_Line_Up")) return XK_ISO_Partial_Line_Up;
+ if (!strcmp(s, "ISO_Partial_Line_Down")) return XK_ISO_Partial_Line_Down;
+ if (!strcmp(s, "ISO_Partial_Space_Left")) return XK_ISO_Partial_Space_Left;
+ if (!strcmp(s, "ISO_Partial_Space_Right")) return XK_ISO_Partial_Space_Right;
+ if (!strcmp(s, "ISO_Set_Margin_Left")) return XK_ISO_Set_Margin_Left;
+ if (!strcmp(s, "ISO_Set_Margin_Right")) return XK_ISO_Set_Margin_Right;
+ if (!strcmp(s, "ISO_Release_Margin_Left")) return XK_ISO_Release_Margin_Left;
+ if (!strcmp(s, "ISO_Release_Margin_Right")) return XK_ISO_Release_Margin_Right;
+ if (!strcmp(s, "ISO_Release_Both_Margins")) return XK_ISO_Release_Both_Margins;
+ if (!strcmp(s, "ISO_Fast_Cursor_Left")) return XK_ISO_Fast_Cursor_Left;
+ if (!strcmp(s, "ISO_Fast_Cursor_Right")) return XK_ISO_Fast_Cursor_Right;
+ if (!strcmp(s, "ISO_Fast_Cursor_Up")) return XK_ISO_Fast_Cursor_Up;
+ if (!strcmp(s, "ISO_Fast_Cursor_Down")) return XK_ISO_Fast_Cursor_Down;
+ if (!strcmp(s, "ISO_Continuous_Underline")) return XK_ISO_Continuous_Underline;
+ if (!strcmp(s, "ISO_Discontinuous_Underline")) return XK_ISO_Discontinuous_Underline;
+ if (!strcmp(s, "ISO_Emphasize")) return XK_ISO_Emphasize;
+ if (!strcmp(s, "ISO_Center_Object")) return XK_ISO_Center_Object;
+ if (!strcmp(s, "ISO_Enter")) return XK_ISO_Enter;
+ if (!strcmp(s, "dead_grave")) return XK_dead_grave;
+ if (!strcmp(s, "dead_acute")) return XK_dead_acute;
+ if (!strcmp(s, "dead_circumflex")) return XK_dead_circumflex;
+ if (!strcmp(s, "dead_tilde")) return XK_dead_tilde;
+ if (!strcmp(s, "dead_macron")) return XK_dead_macron;
+ if (!strcmp(s, "dead_breve")) return XK_dead_breve;
+ if (!strcmp(s, "dead_abovedot")) return XK_dead_abovedot;
+ if (!strcmp(s, "dead_diaeresis")) return XK_dead_diaeresis;
+ if (!strcmp(s, "dead_abovering")) return XK_dead_abovering;
+ if (!strcmp(s, "dead_doubleacute")) return XK_dead_doubleacute;
+ if (!strcmp(s, "dead_caron")) return XK_dead_caron;
+ if (!strcmp(s, "dead_cedilla")) return XK_dead_cedilla;
+ if (!strcmp(s, "dead_ogonek")) return XK_dead_ogonek;
+ if (!strcmp(s, "dead_iota")) return XK_dead_iota;
+ if (!strcmp(s, "dead_voiced_sound")) return XK_dead_voiced_sound;
+ if (!strcmp(s, "dead_semivoiced_sound")) return XK_dead_semivoiced_sound;
+ if (!strcmp(s, "dead_belowdot")) return XK_dead_belowdot;
+ if (!strcmp(s, "First_Virtual_Screen")) return XK_First_Virtual_Screen;
+ if (!strcmp(s, "Prev_Virtual_Screen")) return XK_Prev_Virtual_Screen;
+ if (!strcmp(s, "Next_Virtual_Screen")) return XK_Next_Virtual_Screen;
+ if (!strcmp(s, "Last_Virtual_Screen")) return XK_Last_Virtual_Screen;
+ if (!strcmp(s, "Terminate_Server")) return XK_Terminate_Server;
+ if (!strcmp(s, "AccessX_Enable")) return XK_AccessX_Enable;
+ if (!strcmp(s, "AccessX_Feedback_Enable")) return XK_AccessX_Feedback_Enable;
+ if (!strcmp(s, "RepeatKeys_Enable")) return XK_RepeatKeys_Enable;
+ if (!strcmp(s, "SlowKeys_Enable")) return XK_SlowKeys_Enable;
+ if (!strcmp(s, "BounceKeys_Enable")) return XK_BounceKeys_Enable;
+ if (!strcmp(s, "StickyKeys_Enable")) return XK_StickyKeys_Enable;
+ if (!strcmp(s, "MouseKeys_Enable")) return XK_MouseKeys_Enable;
+ if (!strcmp(s, "MouseKeys_Accel_Enable")) return XK_MouseKeys_Accel_Enable;
+ if (!strcmp(s, "Overlay1_Enable")) return XK_Overlay1_Enable;
+ if (!strcmp(s, "Overlay2_Enable")) return XK_Overlay2_Enable;
+ if (!strcmp(s, "AudibleBell_Enable")) return XK_AudibleBell_Enable;
+ if (!strcmp(s, "Pointer_Left")) return XK_Pointer_Left;
+ if (!strcmp(s, "Pointer_Right")) return XK_Pointer_Right;
+ if (!strcmp(s, "Pointer_Up")) return XK_Pointer_Up;
+ if (!strcmp(s, "Pointer_Down")) return XK_Pointer_Down;
+ if (!strcmp(s, "Pointer_UpLeft")) return XK_Pointer_UpLeft;
+ if (!strcmp(s, "Pointer_UpRight")) return XK_Pointer_UpRight;
+ if (!strcmp(s, "Pointer_DownLeft")) return XK_Pointer_DownLeft;
+ if (!strcmp(s, "Pointer_DownRight")) return XK_Pointer_DownRight;
+ if (!strcmp(s, "Pointer_Button_Dflt")) return XK_Pointer_Button_Dflt;
+ if (!strcmp(s, "Pointer_Button1")) return XK_Pointer_Button1;
+ if (!strcmp(s, "Pointer_Button2")) return XK_Pointer_Button2;
+ if (!strcmp(s, "Pointer_Button3")) return XK_Pointer_Button3;
+ if (!strcmp(s, "Pointer_Button4")) return XK_Pointer_Button4;
+ if (!strcmp(s, "Pointer_Button5")) return XK_Pointer_Button5;
+ if (!strcmp(s, "Pointer_DblClick_Dflt")) return XK_Pointer_DblClick_Dflt;
+ if (!strcmp(s, "Pointer_DblClick1")) return XK_Pointer_DblClick1;
+ if (!strcmp(s, "Pointer_DblClick2")) return XK_Pointer_DblClick2;
+ if (!strcmp(s, "Pointer_DblClick3")) return XK_Pointer_DblClick3;
+ if (!strcmp(s, "Pointer_DblClick4")) return XK_Pointer_DblClick4;
+ if (!strcmp(s, "Pointer_DblClick5")) return XK_Pointer_DblClick5;
+ if (!strcmp(s, "Pointer_Drag_Dflt")) return XK_Pointer_Drag_Dflt;
+ if (!strcmp(s, "Pointer_Drag1")) return XK_Pointer_Drag1;
+ if (!strcmp(s, "Pointer_Drag2")) return XK_Pointer_Drag2;
+ if (!strcmp(s, "Pointer_Drag3")) return XK_Pointer_Drag3;
+ if (!strcmp(s, "Pointer_Drag4")) return XK_Pointer_Drag4;
+ if (!strcmp(s, "Pointer_Drag5")) return XK_Pointer_Drag5;
+ if (!strcmp(s, "Pointer_EnableKeys")) return XK_Pointer_EnableKeys;
+ if (!strcmp(s, "Pointer_Accelerate")) return XK_Pointer_Accelerate;
+ if (!strcmp(s, "Pointer_DfltBtnNext")) return XK_Pointer_DfltBtnNext;
+ if (!strcmp(s, "Pointer_DfltBtnPrev")) return XK_Pointer_DfltBtnPrev;
+#endif
+#ifdef XK_3270
+ if (!strcmp(s, "3270_Duplicate")) return XK_3270_Duplicate;
+ if (!strcmp(s, "3270_FieldMark")) return XK_3270_FieldMark;
+ if (!strcmp(s, "3270_Right2")) return XK_3270_Right2;
+ if (!strcmp(s, "3270_Left2")) return XK_3270_Left2;
+ if (!strcmp(s, "3270_BackTab")) return XK_3270_BackTab;
+ if (!strcmp(s, "3270_EraseEOF")) return XK_3270_EraseEOF;
+ if (!strcmp(s, "3270_EraseInput")) return XK_3270_EraseInput;
+ if (!strcmp(s, "3270_Reset")) return XK_3270_Reset;
+ if (!strcmp(s, "3270_Quit")) return XK_3270_Quit;
+ if (!strcmp(s, "3270_PA1")) return XK_3270_PA1;
+ if (!strcmp(s, "3270_PA2")) return XK_3270_PA2;
+ if (!strcmp(s, "3270_PA3")) return XK_3270_PA3;
+ if (!strcmp(s, "3270_Test")) return XK_3270_Test;
+ if (!strcmp(s, "3270_Attn")) return XK_3270_Attn;
+ if (!strcmp(s, "3270_CursorBlink")) return XK_3270_CursorBlink;
+ if (!strcmp(s, "3270_AltCursor")) return XK_3270_AltCursor;
+ if (!strcmp(s, "3270_KeyClick")) return XK_3270_KeyClick;
+ if (!strcmp(s, "3270_Jump")) return XK_3270_Jump;
+ if (!strcmp(s, "3270_Ident")) return XK_3270_Ident;
+ if (!strcmp(s, "3270_Rule")) return XK_3270_Rule;
+ if (!strcmp(s, "3270_Copy")) return XK_3270_Copy;
+ if (!strcmp(s, "3270_Play")) return XK_3270_Play;
+ if (!strcmp(s, "3270_Setup")) return XK_3270_Setup;
+ if (!strcmp(s, "3270_Record")) return XK_3270_Record;
+ if (!strcmp(s, "3270_ChangeScreen")) return XK_3270_ChangeScreen;
+ if (!strcmp(s, "3270_DeleteWord")) return XK_3270_DeleteWord;
+ if (!strcmp(s, "3270_ExSelect")) return XK_3270_ExSelect;
+ if (!strcmp(s, "3270_CursorSelect")) return XK_3270_CursorSelect;
+ if (!strcmp(s, "3270_PrintScreen")) return XK_3270_PrintScreen;
+ if (!strcmp(s, "3270_Enter")) return XK_3270_Enter;
+#endif
+#ifdef XK_LATIN1
+ if (!strcmp(s, "space")) return XK_space;
+ if (!strcmp(s, "exclam")) return XK_exclam;
+ if (!strcmp(s, "quotedbl")) return XK_quotedbl;
+ if (!strcmp(s, "numbersign")) return XK_numbersign;
+ if (!strcmp(s, "dollar")) return XK_dollar;
+ if (!strcmp(s, "percent")) return XK_percent;
+ if (!strcmp(s, "ampersand")) return XK_ampersand;
+ if (!strcmp(s, "apostrophe")) return XK_apostrophe;
+ if (!strcmp(s, "quoteright")) return XK_quoteright;
+ if (!strcmp(s, "parenleft")) return XK_parenleft;
+ if (!strcmp(s, "parenright")) return XK_parenright;
+ if (!strcmp(s, "asterisk")) return XK_asterisk;
+ if (!strcmp(s, "plus")) return XK_plus;
+ if (!strcmp(s, "comma")) return XK_comma;
+ if (!strcmp(s, "minus")) return XK_minus;
+ if (!strcmp(s, "period")) return XK_period;
+ if (!strcmp(s, "slash")) return XK_slash;
+ if (!strcmp(s, "0")) return XK_0;
+ if (!strcmp(s, "1")) return XK_1;
+ if (!strcmp(s, "2")) return XK_2;
+ if (!strcmp(s, "3")) return XK_3;
+ if (!strcmp(s, "4")) return XK_4;
+ if (!strcmp(s, "5")) return XK_5;
+ if (!strcmp(s, "6")) return XK_6;
+ if (!strcmp(s, "7")) return XK_7;
+ if (!strcmp(s, "8")) return XK_8;
+ if (!strcmp(s, "9")) return XK_9;
+ if (!strcmp(s, "colon")) return XK_colon;
+ if (!strcmp(s, "semicolon")) return XK_semicolon;
+ if (!strcmp(s, "less")) return XK_less;
+ if (!strcmp(s, "equal")) return XK_equal;
+ if (!strcmp(s, "greater")) return XK_greater;
+ if (!strcmp(s, "question")) return XK_question;
+ if (!strcmp(s, "at")) return XK_at;
+ if (!strcmp(s, "A")) return XK_A;
+ if (!strcmp(s, "B")) return XK_B;
+ if (!strcmp(s, "C")) return XK_C;
+ if (!strcmp(s, "D")) return XK_D;
+ if (!strcmp(s, "E")) return XK_E;
+ if (!strcmp(s, "F")) return XK_F;
+ if (!strcmp(s, "G")) return XK_G;
+ if (!strcmp(s, "H")) return XK_H;
+ if (!strcmp(s, "I")) return XK_I;
+ if (!strcmp(s, "J")) return XK_J;
+ if (!strcmp(s, "K")) return XK_K;
+ if (!strcmp(s, "L")) return XK_L;
+ if (!strcmp(s, "M")) return XK_M;
+ if (!strcmp(s, "N")) return XK_N;
+ if (!strcmp(s, "O")) return XK_O;
+ if (!strcmp(s, "P")) return XK_P;
+ if (!strcmp(s, "Q")) return XK_Q;
+ if (!strcmp(s, "R")) return XK_R;
+ if (!strcmp(s, "S")) return XK_S;
+ if (!strcmp(s, "T")) return XK_T;
+ if (!strcmp(s, "U")) return XK_U;
+ if (!strcmp(s, "V")) return XK_V;
+ if (!strcmp(s, "W")) return XK_W;
+ if (!strcmp(s, "X")) return XK_X;
+ if (!strcmp(s, "Y")) return XK_Y;
+ if (!strcmp(s, "Z")) return XK_Z;
+ if (!strcmp(s, "bracketleft")) return XK_bracketleft;
+ if (!strcmp(s, "backslash")) return XK_backslash;
+ if (!strcmp(s, "bracketright")) return XK_bracketright;
+ if (!strcmp(s, "asciicircum")) return XK_asciicircum;
+ if (!strcmp(s, "underscore")) return XK_underscore;
+ if (!strcmp(s, "grave")) return XK_grave;
+ if (!strcmp(s, "quoteleft")) return XK_quoteleft;
+ if (!strcmp(s, "a")) return XK_a;
+ if (!strcmp(s, "b")) return XK_b;
+ if (!strcmp(s, "c")) return XK_c;
+ if (!strcmp(s, "d")) return XK_d;
+ if (!strcmp(s, "e")) return XK_e;
+ if (!strcmp(s, "f")) return XK_f;
+ if (!strcmp(s, "g")) return XK_g;
+ if (!strcmp(s, "h")) return XK_h;
+ if (!strcmp(s, "i")) return XK_i;
+ if (!strcmp(s, "j")) return XK_j;
+ if (!strcmp(s, "k")) return XK_k;
+ if (!strcmp(s, "l")) return XK_l;
+ if (!strcmp(s, "m")) return XK_m;
+ if (!strcmp(s, "n")) return XK_n;
+ if (!strcmp(s, "o")) return XK_o;
+ if (!strcmp(s, "p")) return XK_p;
+ if (!strcmp(s, "q")) return XK_q;
+ if (!strcmp(s, "r")) return XK_r;
+ if (!strcmp(s, "s")) return XK_s;
+ if (!strcmp(s, "t")) return XK_t;
+ if (!strcmp(s, "u")) return XK_u;
+ if (!strcmp(s, "v")) return XK_v;
+ if (!strcmp(s, "w")) return XK_w;
+ if (!strcmp(s, "x")) return XK_x;
+ if (!strcmp(s, "y")) return XK_y;
+ if (!strcmp(s, "z")) return XK_z;
+ if (!strcmp(s, "braceleft")) return XK_braceleft;
+ if (!strcmp(s, "bar")) return XK_bar;
+ if (!strcmp(s, "braceright")) return XK_braceright;
+ if (!strcmp(s, "asciitilde")) return XK_asciitilde;
+ if (!strcmp(s, "nobreakspace")) return XK_nobreakspace;
+ if (!strcmp(s, "exclamdown")) return XK_exclamdown;
+ if (!strcmp(s, "cent")) return XK_cent;
+ if (!strcmp(s, "sterling")) return XK_sterling;
+ if (!strcmp(s, "currency")) return XK_currency;
+ if (!strcmp(s, "yen")) return XK_yen;
+ if (!strcmp(s, "brokenbar")) return XK_brokenbar;
+ if (!strcmp(s, "section")) return XK_section;
+ if (!strcmp(s, "diaeresis")) return XK_diaeresis;
+ if (!strcmp(s, "copyright")) return XK_copyright;
+ if (!strcmp(s, "ordfeminine")) return XK_ordfeminine;
+ if (!strcmp(s, "guillemotleft")) return XK_guillemotleft;
+ if (!strcmp(s, "notsign")) return XK_notsign;
+ if (!strcmp(s, "hyphen")) return XK_hyphen;
+ if (!strcmp(s, "registered")) return XK_registered;
+ if (!strcmp(s, "macron")) return XK_macron;
+ if (!strcmp(s, "degree")) return XK_degree;
+ if (!strcmp(s, "plusminus")) return XK_plusminus;
+ if (!strcmp(s, "twosuperior")) return XK_twosuperior;
+ if (!strcmp(s, "threesuperior")) return XK_threesuperior;
+ if (!strcmp(s, "acute")) return XK_acute;
+ if (!strcmp(s, "mu")) return XK_mu;
+ if (!strcmp(s, "paragraph")) return XK_paragraph;
+ if (!strcmp(s, "periodcentered")) return XK_periodcentered;
+ if (!strcmp(s, "cedilla")) return XK_cedilla;
+ if (!strcmp(s, "onesuperior")) return XK_onesuperior;
+ if (!strcmp(s, "masculine")) return XK_masculine;
+ if (!strcmp(s, "guillemotright")) return XK_guillemotright;
+ if (!strcmp(s, "onequarter")) return XK_onequarter;
+ if (!strcmp(s, "onehalf")) return XK_onehalf;
+ if (!strcmp(s, "threequarters")) return XK_threequarters;
+ if (!strcmp(s, "questiondown")) return XK_questiondown;
+ if (!strcmp(s, "Agrave")) return XK_Agrave;
+ if (!strcmp(s, "Aacute")) return XK_Aacute;
+ if (!strcmp(s, "Acircumflex")) return XK_Acircumflex;
+ if (!strcmp(s, "Atilde")) return XK_Atilde;
+ if (!strcmp(s, "Adiaeresis")) return XK_Adiaeresis;
+ if (!strcmp(s, "Aring")) return XK_Aring;
+ if (!strcmp(s, "AE")) return XK_AE;
+ if (!strcmp(s, "Ccedilla")) return XK_Ccedilla;
+ if (!strcmp(s, "Egrave")) return XK_Egrave;
+ if (!strcmp(s, "Eacute")) return XK_Eacute;
+ if (!strcmp(s, "Ecircumflex")) return XK_Ecircumflex;
+ if (!strcmp(s, "Ediaeresis")) return XK_Ediaeresis;
+ if (!strcmp(s, "Igrave")) return XK_Igrave;
+ if (!strcmp(s, "Iacute")) return XK_Iacute;
+ if (!strcmp(s, "Icircumflex")) return XK_Icircumflex;
+ if (!strcmp(s, "Idiaeresis")) return XK_Idiaeresis;
+ if (!strcmp(s, "ETH")) return XK_ETH;
+ if (!strcmp(s, "Eth")) return XK_Eth;
+ if (!strcmp(s, "Ntilde")) return XK_Ntilde;
+ if (!strcmp(s, "Ograve")) return XK_Ograve;
+ if (!strcmp(s, "Oacute")) return XK_Oacute;
+ if (!strcmp(s, "Ocircumflex")) return XK_Ocircumflex;
+ if (!strcmp(s, "Otilde")) return XK_Otilde;
+ if (!strcmp(s, "Odiaeresis")) return XK_Odiaeresis;
+ if (!strcmp(s, "multiply")) return XK_multiply;
+ if (!strcmp(s, "Ooblique")) return XK_Ooblique;
+ if (!strcmp(s, "Ugrave")) return XK_Ugrave;
+ if (!strcmp(s, "Uacute")) return XK_Uacute;
+ if (!strcmp(s, "Ucircumflex")) return XK_Ucircumflex;
+ if (!strcmp(s, "Udiaeresis")) return XK_Udiaeresis;
+ if (!strcmp(s, "Yacute")) return XK_Yacute;
+ if (!strcmp(s, "THORN")) return XK_THORN;
+ if (!strcmp(s, "Thorn")) return XK_Thorn;
+ if (!strcmp(s, "ssharp")) return XK_ssharp;
+ if (!strcmp(s, "agrave")) return XK_agrave;
+ if (!strcmp(s, "aacute")) return XK_aacute;
+ if (!strcmp(s, "acircumflex")) return XK_acircumflex;
+ if (!strcmp(s, "atilde")) return XK_atilde;
+ if (!strcmp(s, "adiaeresis")) return XK_adiaeresis;
+ if (!strcmp(s, "aring")) return XK_aring;
+ if (!strcmp(s, "ae")) return XK_ae;
+ if (!strcmp(s, "ccedilla")) return XK_ccedilla;
+ if (!strcmp(s, "egrave")) return XK_egrave;
+ if (!strcmp(s, "eacute")) return XK_eacute;
+ if (!strcmp(s, "ecircumflex")) return XK_ecircumflex;
+ if (!strcmp(s, "ediaeresis")) return XK_ediaeresis;
+ if (!strcmp(s, "igrave")) return XK_igrave;
+ if (!strcmp(s, "iacute")) return XK_iacute;
+ if (!strcmp(s, "icircumflex")) return XK_icircumflex;
+ if (!strcmp(s, "idiaeresis")) return XK_idiaeresis;
+ if (!strcmp(s, "eth")) return XK_eth;
+ if (!strcmp(s, "ntilde")) return XK_ntilde;
+ if (!strcmp(s, "ograve")) return XK_ograve;
+ if (!strcmp(s, "oacute")) return XK_oacute;
+ if (!strcmp(s, "ocircumflex")) return XK_ocircumflex;
+ if (!strcmp(s, "otilde")) return XK_otilde;
+ if (!strcmp(s, "odiaeresis")) return XK_odiaeresis;
+ if (!strcmp(s, "division")) return XK_division;
+ if (!strcmp(s, "oslash")) return XK_oslash;
+ if (!strcmp(s, "ugrave")) return XK_ugrave;
+ if (!strcmp(s, "uacute")) return XK_uacute;
+ if (!strcmp(s, "ucircumflex")) return XK_ucircumflex;
+ if (!strcmp(s, "udiaeresis")) return XK_udiaeresis;
+ if (!strcmp(s, "yacute")) return XK_yacute;
+ if (!strcmp(s, "thorn")) return XK_thorn;
+ if (!strcmp(s, "ydiaeresis")) return XK_ydiaeresis;
+#endif /* XK_LATIN1 */
+#ifdef XK_LATIN2
+ if (!strcmp(s, "Aogonek")) return XK_Aogonek;
+ if (!strcmp(s, "breve")) return XK_breve;
+ if (!strcmp(s, "Lstroke")) return XK_Lstroke;
+ if (!strcmp(s, "Lcaron")) return XK_Lcaron;
+ if (!strcmp(s, "Sacute")) return XK_Sacute;
+ if (!strcmp(s, "Scaron")) return XK_Scaron;
+ if (!strcmp(s, "Scedilla")) return XK_Scedilla;
+ if (!strcmp(s, "Tcaron")) return XK_Tcaron;
+ if (!strcmp(s, "Zacute")) return XK_Zacute;
+ if (!strcmp(s, "Zcaron")) return XK_Zcaron;
+ if (!strcmp(s, "Zabovedot")) return XK_Zabovedot;
+ if (!strcmp(s, "aogonek")) return XK_aogonek;
+ if (!strcmp(s, "ogonek")) return XK_ogonek;
+ if (!strcmp(s, "lstroke")) return XK_lstroke;
+ if (!strcmp(s, "lcaron")) return XK_lcaron;
+ if (!strcmp(s, "sacute")) return XK_sacute;
+ if (!strcmp(s, "caron")) return XK_caron;
+ if (!strcmp(s, "scaron")) return XK_scaron;
+ if (!strcmp(s, "scedilla")) return XK_scedilla;
+ if (!strcmp(s, "tcaron")) return XK_tcaron;
+ if (!strcmp(s, "zacute")) return XK_zacute;
+ if (!strcmp(s, "doubleacute")) return XK_doubleacute;
+ if (!strcmp(s, "zcaron")) return XK_zcaron;
+ if (!strcmp(s, "zabovedot")) return XK_zabovedot;
+ if (!strcmp(s, "Racute")) return XK_Racute;
+ if (!strcmp(s, "Abreve")) return XK_Abreve;
+ if (!strcmp(s, "Lacute")) return XK_Lacute;
+ if (!strcmp(s, "Cacute")) return XK_Cacute;
+ if (!strcmp(s, "Ccaron")) return XK_Ccaron;
+ if (!strcmp(s, "Eogonek")) return XK_Eogonek;
+ if (!strcmp(s, "Ecaron")) return XK_Ecaron;
+ if (!strcmp(s, "Dcaron")) return XK_Dcaron;
+ if (!strcmp(s, "Dstroke")) return XK_Dstroke;
+ if (!strcmp(s, "Nacute")) return XK_Nacute;
+ if (!strcmp(s, "Ncaron")) return XK_Ncaron;
+ if (!strcmp(s, "Odoubleacute")) return XK_Odoubleacute;
+ if (!strcmp(s, "Rcaron")) return XK_Rcaron;
+ if (!strcmp(s, "Uring")) return XK_Uring;
+ if (!strcmp(s, "Udoubleacute")) return XK_Udoubleacute;
+ if (!strcmp(s, "Tcedilla")) return XK_Tcedilla;
+ if (!strcmp(s, "racute")) return XK_racute;
+ if (!strcmp(s, "abreve")) return XK_abreve;
+ if (!strcmp(s, "lacute")) return XK_lacute;
+ if (!strcmp(s, "cacute")) return XK_cacute;
+ if (!strcmp(s, "ccaron")) return XK_ccaron;
+ if (!strcmp(s, "eogonek")) return XK_eogonek;
+ if (!strcmp(s, "ecaron")) return XK_ecaron;
+ if (!strcmp(s, "dcaron")) return XK_dcaron;
+ if (!strcmp(s, "dstroke")) return XK_dstroke;
+ if (!strcmp(s, "nacute")) return XK_nacute;
+ if (!strcmp(s, "ncaron")) return XK_ncaron;
+ if (!strcmp(s, "odoubleacute")) return XK_odoubleacute;
+ if (!strcmp(s, "udoubleacute")) return XK_udoubleacute;
+ if (!strcmp(s, "rcaron")) return XK_rcaron;
+ if (!strcmp(s, "uring")) return XK_uring;
+ if (!strcmp(s, "tcedilla")) return XK_tcedilla;
+ if (!strcmp(s, "abovedot")) return XK_abovedot;
+#endif /* XK_LATIN2 */
+#ifdef XK_LATIN3
+ if (!strcmp(s, "Hstroke")) return XK_Hstroke;
+ if (!strcmp(s, "Hcircumflex")) return XK_Hcircumflex;
+ if (!strcmp(s, "Iabovedot")) return XK_Iabovedot;
+ if (!strcmp(s, "Gbreve")) return XK_Gbreve;
+ if (!strcmp(s, "Jcircumflex")) return XK_Jcircumflex;
+ if (!strcmp(s, "hstroke")) return XK_hstroke;
+ if (!strcmp(s, "hcircumflex")) return XK_hcircumflex;
+ if (!strcmp(s, "idotless")) return XK_idotless;
+ if (!strcmp(s, "gbreve")) return XK_gbreve;
+ if (!strcmp(s, "jcircumflex")) return XK_jcircumflex;
+ if (!strcmp(s, "Cabovedot")) return XK_Cabovedot;
+ if (!strcmp(s, "Ccircumflex")) return XK_Ccircumflex;
+ if (!strcmp(s, "Gabovedot")) return XK_Gabovedot;
+ if (!strcmp(s, "Gcircumflex")) return XK_Gcircumflex;
+ if (!strcmp(s, "Ubreve")) return XK_Ubreve;
+ if (!strcmp(s, "Scircumflex")) return XK_Scircumflex;
+ if (!strcmp(s, "cabovedot")) return XK_cabovedot;
+ if (!strcmp(s, "ccircumflex")) return XK_ccircumflex;
+ if (!strcmp(s, "gabovedot")) return XK_gabovedot;
+ if (!strcmp(s, "gcircumflex")) return XK_gcircumflex;
+ if (!strcmp(s, "ubreve")) return XK_ubreve;
+ if (!strcmp(s, "scircumflex")) return XK_scircumflex;
+#endif /* XK_LATIN3 */
+#ifdef XK_LATIN4
+ if (!strcmp(s, "kra")) return XK_kra;
+ if (!strcmp(s, "kappa")) return XK_kappa;
+ if (!strcmp(s, "Rcedilla")) return XK_Rcedilla;
+ if (!strcmp(s, "Itilde")) return XK_Itilde;
+ if (!strcmp(s, "Lcedilla")) return XK_Lcedilla;
+ if (!strcmp(s, "Emacron")) return XK_Emacron;
+ if (!strcmp(s, "Gcedilla")) return XK_Gcedilla;
+ if (!strcmp(s, "Tslash")) return XK_Tslash;
+ if (!strcmp(s, "rcedilla")) return XK_rcedilla;
+ if (!strcmp(s, "itilde")) return XK_itilde;
+ if (!strcmp(s, "lcedilla")) return XK_lcedilla;
+ if (!strcmp(s, "emacron")) return XK_emacron;
+ if (!strcmp(s, "gcedilla")) return XK_gcedilla;
+ if (!strcmp(s, "tslash")) return XK_tslash;
+ if (!strcmp(s, "ENG")) return XK_ENG;
+ if (!strcmp(s, "eng")) return XK_eng;
+ if (!strcmp(s, "Amacron")) return XK_Amacron;
+ if (!strcmp(s, "Iogonek")) return XK_Iogonek;
+ if (!strcmp(s, "Eabovedot")) return XK_Eabovedot;
+ if (!strcmp(s, "Imacron")) return XK_Imacron;
+ if (!strcmp(s, "Ncedilla")) return XK_Ncedilla;
+ if (!strcmp(s, "Omacron")) return XK_Omacron;
+ if (!strcmp(s, "Kcedilla")) return XK_Kcedilla;
+ if (!strcmp(s, "Uogonek")) return XK_Uogonek;
+ if (!strcmp(s, "Utilde")) return XK_Utilde;
+ if (!strcmp(s, "Umacron")) return XK_Umacron;
+ if (!strcmp(s, "amacron")) return XK_amacron;
+ if (!strcmp(s, "iogonek")) return XK_iogonek;
+ if (!strcmp(s, "eabovedot")) return XK_eabovedot;
+ if (!strcmp(s, "imacron")) return XK_imacron;
+ if (!strcmp(s, "ncedilla")) return XK_ncedilla;
+ if (!strcmp(s, "omacron")) return XK_omacron;
+ if (!strcmp(s, "kcedilla")) return XK_kcedilla;
+ if (!strcmp(s, "uogonek")) return XK_uogonek;
+ if (!strcmp(s, "utilde")) return XK_utilde;
+ if (!strcmp(s, "umacron")) return XK_umacron;
+#endif /* XK_LATIN4 */
+#ifdef XK_KATAKANA
+ if (!strcmp(s, "overline")) return XK_overline;
+ if (!strcmp(s, "kana_fullstop")) return XK_kana_fullstop;
+ if (!strcmp(s, "kana_openingbracket")) return XK_kana_openingbracket;
+ if (!strcmp(s, "kana_closingbracket")) return XK_kana_closingbracket;
+ if (!strcmp(s, "kana_comma")) return XK_kana_comma;
+ if (!strcmp(s, "kana_conjunctive")) return XK_kana_conjunctive;
+ if (!strcmp(s, "kana_middledot")) return XK_kana_middledot;
+ if (!strcmp(s, "kana_WO")) return XK_kana_WO;
+ if (!strcmp(s, "kana_a")) return XK_kana_a;
+ if (!strcmp(s, "kana_i")) return XK_kana_i;
+ if (!strcmp(s, "kana_u")) return XK_kana_u;
+ if (!strcmp(s, "kana_e")) return XK_kana_e;
+ if (!strcmp(s, "kana_o")) return XK_kana_o;
+ if (!strcmp(s, "kana_ya")) return XK_kana_ya;
+ if (!strcmp(s, "kana_yu")) return XK_kana_yu;
+ if (!strcmp(s, "kana_yo")) return XK_kana_yo;
+ if (!strcmp(s, "kana_tsu")) return XK_kana_tsu;
+ if (!strcmp(s, "kana_tu")) return XK_kana_tu;
+ if (!strcmp(s, "prolongedsound")) return XK_prolongedsound;
+ if (!strcmp(s, "kana_A")) return XK_kana_A;
+ if (!strcmp(s, "kana_I")) return XK_kana_I;
+ if (!strcmp(s, "kana_U")) return XK_kana_U;
+ if (!strcmp(s, "kana_E")) return XK_kana_E;
+ if (!strcmp(s, "kana_O")) return XK_kana_O;
+ if (!strcmp(s, "kana_KA")) return XK_kana_KA;
+ if (!strcmp(s, "kana_KI")) return XK_kana_KI;
+ if (!strcmp(s, "kana_KU")) return XK_kana_KU;
+ if (!strcmp(s, "kana_KE")) return XK_kana_KE;
+ if (!strcmp(s, "kana_KO")) return XK_kana_KO;
+ if (!strcmp(s, "kana_SA")) return XK_kana_SA;
+ if (!strcmp(s, "kana_SHI")) return XK_kana_SHI;
+ if (!strcmp(s, "kana_SU")) return XK_kana_SU;
+ if (!strcmp(s, "kana_SE")) return XK_kana_SE;
+ if (!strcmp(s, "kana_SO")) return XK_kana_SO;
+ if (!strcmp(s, "kana_TA")) return XK_kana_TA;
+ if (!strcmp(s, "kana_CHI")) return XK_kana_CHI;
+ if (!strcmp(s, "kana_TI")) return XK_kana_TI;
+ if (!strcmp(s, "kana_TSU")) return XK_kana_TSU;
+ if (!strcmp(s, "kana_TU")) return XK_kana_TU;
+ if (!strcmp(s, "kana_TE")) return XK_kana_TE;
+ if (!strcmp(s, "kana_TO")) return XK_kana_TO;
+ if (!strcmp(s, "kana_NA")) return XK_kana_NA;
+ if (!strcmp(s, "kana_NI")) return XK_kana_NI;
+ if (!strcmp(s, "kana_NU")) return XK_kana_NU;
+ if (!strcmp(s, "kana_NE")) return XK_kana_NE;
+ if (!strcmp(s, "kana_NO")) return XK_kana_NO;
+ if (!strcmp(s, "kana_HA")) return XK_kana_HA;
+ if (!strcmp(s, "kana_HI")) return XK_kana_HI;
+ if (!strcmp(s, "kana_FU")) return XK_kana_FU;
+ if (!strcmp(s, "kana_HU")) return XK_kana_HU;
+ if (!strcmp(s, "kana_HE")) return XK_kana_HE;
+ if (!strcmp(s, "kana_HO")) return XK_kana_HO;
+ if (!strcmp(s, "kana_MA")) return XK_kana_MA;
+ if (!strcmp(s, "kana_MI")) return XK_kana_MI;
+ if (!strcmp(s, "kana_MU")) return XK_kana_MU;
+ if (!strcmp(s, "kana_ME")) return XK_kana_ME;
+ if (!strcmp(s, "kana_MO")) return XK_kana_MO;
+ if (!strcmp(s, "kana_YA")) return XK_kana_YA;
+ if (!strcmp(s, "kana_YU")) return XK_kana_YU;
+ if (!strcmp(s, "kana_YO")) return XK_kana_YO;
+ if (!strcmp(s, "kana_RA")) return XK_kana_RA;
+ if (!strcmp(s, "kana_RI")) return XK_kana_RI;
+ if (!strcmp(s, "kana_RU")) return XK_kana_RU;
+ if (!strcmp(s, "kana_RE")) return XK_kana_RE;
+ if (!strcmp(s, "kana_RO")) return XK_kana_RO;
+ if (!strcmp(s, "kana_WA")) return XK_kana_WA;
+ if (!strcmp(s, "kana_N")) return XK_kana_N;
+ if (!strcmp(s, "voicedsound")) return XK_voicedsound;
+ if (!strcmp(s, "semivoicedsound")) return XK_semivoicedsound;
+ if (!strcmp(s, "kana_switch")) return XK_kana_switch;
+#endif /* XK_KATAKANA */
+#ifdef XK_ARABIC
+ if (!strcmp(s, "Arabic_comma")) return XK_Arabic_comma;
+ if (!strcmp(s, "Arabic_semicolon")) return XK_Arabic_semicolon;
+ if (!strcmp(s, "Arabic_question_mark")) return XK_Arabic_question_mark;
+ if (!strcmp(s, "Arabic_hamza")) return XK_Arabic_hamza;
+ if (!strcmp(s, "Arabic_maddaonalef")) return XK_Arabic_maddaonalef;
+ if (!strcmp(s, "Arabic_hamzaonalef")) return XK_Arabic_hamzaonalef;
+ if (!strcmp(s, "Arabic_hamzaonwaw")) return XK_Arabic_hamzaonwaw;
+ if (!strcmp(s, "Arabic_hamzaunderalef")) return XK_Arabic_hamzaunderalef;
+ if (!strcmp(s, "Arabic_hamzaonyeh")) return XK_Arabic_hamzaonyeh;
+ if (!strcmp(s, "Arabic_alef")) return XK_Arabic_alef;
+ if (!strcmp(s, "Arabic_beh")) return XK_Arabic_beh;
+ if (!strcmp(s, "Arabic_tehmarbuta")) return XK_Arabic_tehmarbuta;
+ if (!strcmp(s, "Arabic_teh")) return XK_Arabic_teh;
+ if (!strcmp(s, "Arabic_theh")) return XK_Arabic_theh;
+ if (!strcmp(s, "Arabic_jeem")) return XK_Arabic_jeem;
+ if (!strcmp(s, "Arabic_hah")) return XK_Arabic_hah;
+ if (!strcmp(s, "Arabic_khah")) return XK_Arabic_khah;
+ if (!strcmp(s, "Arabic_dal")) return XK_Arabic_dal;
+ if (!strcmp(s, "Arabic_thal")) return XK_Arabic_thal;
+ if (!strcmp(s, "Arabic_ra")) return XK_Arabic_ra;
+ if (!strcmp(s, "Arabic_zain")) return XK_Arabic_zain;
+ if (!strcmp(s, "Arabic_seen")) return XK_Arabic_seen;
+ if (!strcmp(s, "Arabic_sheen")) return XK_Arabic_sheen;
+ if (!strcmp(s, "Arabic_sad")) return XK_Arabic_sad;
+ if (!strcmp(s, "Arabic_dad")) return XK_Arabic_dad;
+ if (!strcmp(s, "Arabic_tah")) return XK_Arabic_tah;
+ if (!strcmp(s, "Arabic_zah")) return XK_Arabic_zah;
+ if (!strcmp(s, "Arabic_ain")) return XK_Arabic_ain;
+ if (!strcmp(s, "Arabic_ghain")) return XK_Arabic_ghain;
+ if (!strcmp(s, "Arabic_tatweel")) return XK_Arabic_tatweel;
+ if (!strcmp(s, "Arabic_feh")) return XK_Arabic_feh;
+ if (!strcmp(s, "Arabic_qaf")) return XK_Arabic_qaf;
+ if (!strcmp(s, "Arabic_kaf")) return XK_Arabic_kaf;
+ if (!strcmp(s, "Arabic_lam")) return XK_Arabic_lam;
+ if (!strcmp(s, "Arabic_meem")) return XK_Arabic_meem;
+ if (!strcmp(s, "Arabic_noon")) return XK_Arabic_noon;
+ if (!strcmp(s, "Arabic_ha")) return XK_Arabic_ha;
+ if (!strcmp(s, "Arabic_heh")) return XK_Arabic_heh;
+ if (!strcmp(s, "Arabic_waw")) return XK_Arabic_waw;
+ if (!strcmp(s, "Arabic_alefmaksura")) return XK_Arabic_alefmaksura;
+ if (!strcmp(s, "Arabic_yeh")) return XK_Arabic_yeh;
+ if (!strcmp(s, "Arabic_fathatan")) return XK_Arabic_fathatan;
+ if (!strcmp(s, "Arabic_dammatan")) return XK_Arabic_dammatan;
+ if (!strcmp(s, "Arabic_kasratan")) return XK_Arabic_kasratan;
+ if (!strcmp(s, "Arabic_fatha")) return XK_Arabic_fatha;
+ if (!strcmp(s, "Arabic_damma")) return XK_Arabic_damma;
+ if (!strcmp(s, "Arabic_kasra")) return XK_Arabic_kasra;
+ if (!strcmp(s, "Arabic_shadda")) return XK_Arabic_shadda;
+ if (!strcmp(s, "Arabic_sukun")) return XK_Arabic_sukun;
+ if (!strcmp(s, "Arabic_switch")) return XK_Arabic_switch;
+#endif /* XK_ARABIC */
+#ifdef XK_CYRILLIC
+ if (!strcmp(s, "Serbian_dje")) return XK_Serbian_dje;
+ if (!strcmp(s, "Macedonia_gje")) return XK_Macedonia_gje;
+ if (!strcmp(s, "Cyrillic_io")) return XK_Cyrillic_io;
+ if (!strcmp(s, "Ukrainian_ie")) return XK_Ukrainian_ie;
+ if (!strcmp(s, "Ukranian_je")) return XK_Ukranian_je;
+ if (!strcmp(s, "Macedonia_dse")) return XK_Macedonia_dse;
+ if (!strcmp(s, "Ukrainian_i")) return XK_Ukrainian_i;
+ if (!strcmp(s, "Ukranian_i")) return XK_Ukranian_i;
+ if (!strcmp(s, "Ukrainian_yi")) return XK_Ukrainian_yi;
+ if (!strcmp(s, "Ukranian_yi")) return XK_Ukranian_yi;
+ if (!strcmp(s, "Cyrillic_je")) return XK_Cyrillic_je;
+ if (!strcmp(s, "Serbian_je")) return XK_Serbian_je;
+ if (!strcmp(s, "Cyrillic_lje")) return XK_Cyrillic_lje;
+ if (!strcmp(s, "Serbian_lje")) return XK_Serbian_lje;
+ if (!strcmp(s, "Cyrillic_nje")) return XK_Cyrillic_nje;
+ if (!strcmp(s, "Serbian_nje")) return XK_Serbian_nje;
+ if (!strcmp(s, "Serbian_tshe")) return XK_Serbian_tshe;
+ if (!strcmp(s, "Macedonia_kje")) return XK_Macedonia_kje;
+ if (!strcmp(s, "Byelorussian_shortu")) return XK_Byelorussian_shortu;
+ if (!strcmp(s, "Cyrillic_dzhe")) return XK_Cyrillic_dzhe;
+ if (!strcmp(s, "Serbian_dze")) return XK_Serbian_dze;
+ if (!strcmp(s, "numerosign")) return XK_numerosign;
+ if (!strcmp(s, "Serbian_DJE")) return XK_Serbian_DJE;
+ if (!strcmp(s, "Macedonia_GJE")) return XK_Macedonia_GJE;
+ if (!strcmp(s, "Cyrillic_IO")) return XK_Cyrillic_IO;
+ if (!strcmp(s, "Ukrainian_IE")) return XK_Ukrainian_IE;
+ if (!strcmp(s, "Ukranian_JE")) return XK_Ukranian_JE;
+ if (!strcmp(s, "Macedonia_DSE")) return XK_Macedonia_DSE;
+ if (!strcmp(s, "Ukrainian_I")) return XK_Ukrainian_I;
+ if (!strcmp(s, "Ukranian_I")) return XK_Ukranian_I;
+ if (!strcmp(s, "Ukrainian_YI")) return XK_Ukrainian_YI;
+ if (!strcmp(s, "Ukranian_YI")) return XK_Ukranian_YI;
+ if (!strcmp(s, "Cyrillic_JE")) return XK_Cyrillic_JE;
+ if (!strcmp(s, "Serbian_JE")) return XK_Serbian_JE;
+ if (!strcmp(s, "Cyrillic_LJE")) return XK_Cyrillic_LJE;
+ if (!strcmp(s, "Serbian_LJE")) return XK_Serbian_LJE;
+ if (!strcmp(s, "Cyrillic_NJE")) return XK_Cyrillic_NJE;
+ if (!strcmp(s, "Serbian_NJE")) return XK_Serbian_NJE;
+ if (!strcmp(s, "Serbian_TSHE")) return XK_Serbian_TSHE;
+ if (!strcmp(s, "Macedonia_KJE")) return XK_Macedonia_KJE;
+ if (!strcmp(s, "Byelorussian_SHORTU")) return XK_Byelorussian_SHORTU;
+ if (!strcmp(s, "Cyrillic_DZHE")) return XK_Cyrillic_DZHE;
+ if (!strcmp(s, "Serbian_DZE")) return XK_Serbian_DZE;
+ if (!strcmp(s, "Cyrillic_yu")) return XK_Cyrillic_yu;
+ if (!strcmp(s, "Cyrillic_a")) return XK_Cyrillic_a;
+ if (!strcmp(s, "Cyrillic_be")) return XK_Cyrillic_be;
+ if (!strcmp(s, "Cyrillic_tse")) return XK_Cyrillic_tse;
+ if (!strcmp(s, "Cyrillic_de")) return XK_Cyrillic_de;
+ if (!strcmp(s, "Cyrillic_ie")) return XK_Cyrillic_ie;
+ if (!strcmp(s, "Cyrillic_ef")) return XK_Cyrillic_ef;
+ if (!strcmp(s, "Cyrillic_ghe")) return XK_Cyrillic_ghe;
+ if (!strcmp(s, "Cyrillic_ha")) return XK_Cyrillic_ha;
+ if (!strcmp(s, "Cyrillic_i")) return XK_Cyrillic_i;
+ if (!strcmp(s, "Cyrillic_shorti")) return XK_Cyrillic_shorti;
+ if (!strcmp(s, "Cyrillic_ka")) return XK_Cyrillic_ka;
+ if (!strcmp(s, "Cyrillic_el")) return XK_Cyrillic_el;
+ if (!strcmp(s, "Cyrillic_em")) return XK_Cyrillic_em;
+ if (!strcmp(s, "Cyrillic_en")) return XK_Cyrillic_en;
+ if (!strcmp(s, "Cyrillic_o")) return XK_Cyrillic_o;
+ if (!strcmp(s, "Cyrillic_pe")) return XK_Cyrillic_pe;
+ if (!strcmp(s, "Cyrillic_ya")) return XK_Cyrillic_ya;
+ if (!strcmp(s, "Cyrillic_er")) return XK_Cyrillic_er;
+ if (!strcmp(s, "Cyrillic_es")) return XK_Cyrillic_es;
+ if (!strcmp(s, "Cyrillic_te")) return XK_Cyrillic_te;
+ if (!strcmp(s, "Cyrillic_u")) return XK_Cyrillic_u;
+ if (!strcmp(s, "Cyrillic_zhe")) return XK_Cyrillic_zhe;
+ if (!strcmp(s, "Cyrillic_ve")) return XK_Cyrillic_ve;
+ if (!strcmp(s, "Cyrillic_softsign")) return XK_Cyrillic_softsign;
+ if (!strcmp(s, "Cyrillic_yeru")) return XK_Cyrillic_yeru;
+ if (!strcmp(s, "Cyrillic_ze")) return XK_Cyrillic_ze;
+ if (!strcmp(s, "Cyrillic_sha")) return XK_Cyrillic_sha;
+ if (!strcmp(s, "Cyrillic_e")) return XK_Cyrillic_e;
+ if (!strcmp(s, "Cyrillic_shcha")) return XK_Cyrillic_shcha;
+ if (!strcmp(s, "Cyrillic_che")) return XK_Cyrillic_che;
+ if (!strcmp(s, "Cyrillic_hardsign")) return XK_Cyrillic_hardsign;
+ if (!strcmp(s, "Cyrillic_YU")) return XK_Cyrillic_YU;
+ if (!strcmp(s, "Cyrillic_A")) return XK_Cyrillic_A;
+ if (!strcmp(s, "Cyrillic_BE")) return XK_Cyrillic_BE;
+ if (!strcmp(s, "Cyrillic_TSE")) return XK_Cyrillic_TSE;
+ if (!strcmp(s, "Cyrillic_DE")) return XK_Cyrillic_DE;
+ if (!strcmp(s, "Cyrillic_IE")) return XK_Cyrillic_IE;
+ if (!strcmp(s, "Cyrillic_EF")) return XK_Cyrillic_EF;
+ if (!strcmp(s, "Cyrillic_GHE")) return XK_Cyrillic_GHE;
+ if (!strcmp(s, "Cyrillic_HA")) return XK_Cyrillic_HA;
+ if (!strcmp(s, "Cyrillic_I")) return XK_Cyrillic_I;
+ if (!strcmp(s, "Cyrillic_SHORTI")) return XK_Cyrillic_SHORTI;
+ if (!strcmp(s, "Cyrillic_KA")) return XK_Cyrillic_KA;
+ if (!strcmp(s, "Cyrillic_EL")) return XK_Cyrillic_EL;
+ if (!strcmp(s, "Cyrillic_EM")) return XK_Cyrillic_EM;
+ if (!strcmp(s, "Cyrillic_EN")) return XK_Cyrillic_EN;
+ if (!strcmp(s, "Cyrillic_O")) return XK_Cyrillic_O;
+ if (!strcmp(s, "Cyrillic_PE")) return XK_Cyrillic_PE;
+ if (!strcmp(s, "Cyrillic_YA")) return XK_Cyrillic_YA;
+ if (!strcmp(s, "Cyrillic_ER")) return XK_Cyrillic_ER;
+ if (!strcmp(s, "Cyrillic_ES")) return XK_Cyrillic_ES;
+ if (!strcmp(s, "Cyrillic_TE")) return XK_Cyrillic_TE;
+ if (!strcmp(s, "Cyrillic_U")) return XK_Cyrillic_U;
+ if (!strcmp(s, "Cyrillic_ZHE")) return XK_Cyrillic_ZHE;
+ if (!strcmp(s, "Cyrillic_VE")) return XK_Cyrillic_VE;
+ if (!strcmp(s, "Cyrillic_SOFTSIGN")) return XK_Cyrillic_SOFTSIGN;
+ if (!strcmp(s, "Cyrillic_YERU")) return XK_Cyrillic_YERU;
+ if (!strcmp(s, "Cyrillic_ZE")) return XK_Cyrillic_ZE;
+ if (!strcmp(s, "Cyrillic_SHA")) return XK_Cyrillic_SHA;
+ if (!strcmp(s, "Cyrillic_E")) return XK_Cyrillic_E;
+ if (!strcmp(s, "Cyrillic_SHCHA")) return XK_Cyrillic_SHCHA;
+ if (!strcmp(s, "Cyrillic_CHE")) return XK_Cyrillic_CHE;
+ if (!strcmp(s, "Cyrillic_HARDSIGN")) return XK_Cyrillic_HARDSIGN;
+#endif /* XK_CYRILLIC */
+#ifdef XK_GREEK
+ if (!strcmp(s, "Greek_ALPHAaccent")) return XK_Greek_ALPHAaccent;
+ if (!strcmp(s, "Greek_EPSILONaccent")) return XK_Greek_EPSILONaccent;
+ if (!strcmp(s, "Greek_ETAaccent")) return XK_Greek_ETAaccent;
+ if (!strcmp(s, "Greek_IOTAaccent")) return XK_Greek_IOTAaccent;
+ if (!strcmp(s, "Greek_IOTAdieresis")) return XK_Greek_IOTAdieresis;
+ if (!strcmp(s, "Greek_OMICRONaccent")) return XK_Greek_OMICRONaccent;
+ if (!strcmp(s, "Greek_UPSILONaccent")) return XK_Greek_UPSILONaccent;
+ if (!strcmp(s, "Greek_UPSILONdieresis")) return XK_Greek_UPSILONdieresis;
+ if (!strcmp(s, "Greek_OMEGAaccent")) return XK_Greek_OMEGAaccent;
+ if (!strcmp(s, "Greek_accentdieresis")) return XK_Greek_accentdieresis;
+ if (!strcmp(s, "Greek_horizbar")) return XK_Greek_horizbar;
+ if (!strcmp(s, "Greek_alphaaccent")) return XK_Greek_alphaaccent;
+ if (!strcmp(s, "Greek_epsilonaccent")) return XK_Greek_epsilonaccent;
+ if (!strcmp(s, "Greek_etaaccent")) return XK_Greek_etaaccent;
+ if (!strcmp(s, "Greek_iotaaccent")) return XK_Greek_iotaaccent;
+ if (!strcmp(s, "Greek_iotadieresis")) return XK_Greek_iotadieresis;
+ if (!strcmp(s, "Greek_iotaaccentdieresis")) return XK_Greek_iotaaccentdieresis;
+ if (!strcmp(s, "Greek_omicronaccent")) return XK_Greek_omicronaccent;
+ if (!strcmp(s, "Greek_upsilonaccent")) return XK_Greek_upsilonaccent;
+ if (!strcmp(s, "Greek_upsilondieresis")) return XK_Greek_upsilondieresis;
+ if (!strcmp(s, "Greek_upsilonaccentdieresis")) return XK_Greek_upsilonaccentdieresis;
+ if (!strcmp(s, "Greek_omegaaccent")) return XK_Greek_omegaaccent;
+ if (!strcmp(s, "Greek_ALPHA")) return XK_Greek_ALPHA;
+ if (!strcmp(s, "Greek_BETA")) return XK_Greek_BETA;
+ if (!strcmp(s, "Greek_GAMMA")) return XK_Greek_GAMMA;
+ if (!strcmp(s, "Greek_DELTA")) return XK_Greek_DELTA;
+ if (!strcmp(s, "Greek_EPSILON")) return XK_Greek_EPSILON;
+ if (!strcmp(s, "Greek_ZETA")) return XK_Greek_ZETA;
+ if (!strcmp(s, "Greek_ETA")) return XK_Greek_ETA;
+ if (!strcmp(s, "Greek_THETA")) return XK_Greek_THETA;
+ if (!strcmp(s, "Greek_IOTA")) return XK_Greek_IOTA;
+ if (!strcmp(s, "Greek_KAPPA")) return XK_Greek_KAPPA;
+ if (!strcmp(s, "Greek_LAMDA")) return XK_Greek_LAMDA;
+ if (!strcmp(s, "Greek_LAMBDA")) return XK_Greek_LAMBDA;
+ if (!strcmp(s, "Greek_MU")) return XK_Greek_MU;
+ if (!strcmp(s, "Greek_NU")) return XK_Greek_NU;
+ if (!strcmp(s, "Greek_XI")) return XK_Greek_XI;
+ if (!strcmp(s, "Greek_OMICRON")) return XK_Greek_OMICRON;
+ if (!strcmp(s, "Greek_PI")) return XK_Greek_PI;
+ if (!strcmp(s, "Greek_RHO")) return XK_Greek_RHO;
+ if (!strcmp(s, "Greek_SIGMA")) return XK_Greek_SIGMA;
+ if (!strcmp(s, "Greek_TAU")) return XK_Greek_TAU;
+ if (!strcmp(s, "Greek_UPSILON")) return XK_Greek_UPSILON;
+ if (!strcmp(s, "Greek_PHI")) return XK_Greek_PHI;
+ if (!strcmp(s, "Greek_CHI")) return XK_Greek_CHI;
+ if (!strcmp(s, "Greek_PSI")) return XK_Greek_PSI;
+ if (!strcmp(s, "Greek_OMEGA")) return XK_Greek_OMEGA;
+ if (!strcmp(s, "Greek_alpha")) return XK_Greek_alpha;
+ if (!strcmp(s, "Greek_beta")) return XK_Greek_beta;
+ if (!strcmp(s, "Greek_gamma")) return XK_Greek_gamma;
+ if (!strcmp(s, "Greek_delta")) return XK_Greek_delta;
+ if (!strcmp(s, "Greek_epsilon")) return XK_Greek_epsilon;
+ if (!strcmp(s, "Greek_zeta")) return XK_Greek_zeta;
+ if (!strcmp(s, "Greek_eta")) return XK_Greek_eta;
+ if (!strcmp(s, "Greek_theta")) return XK_Greek_theta;
+ if (!strcmp(s, "Greek_iota")) return XK_Greek_iota;
+ if (!strcmp(s, "Greek_kappa")) return XK_Greek_kappa;
+ if (!strcmp(s, "Greek_lamda")) return XK_Greek_lamda;
+ if (!strcmp(s, "Greek_lambda")) return XK_Greek_lambda;
+ if (!strcmp(s, "Greek_mu")) return XK_Greek_mu;
+ if (!strcmp(s, "Greek_nu")) return XK_Greek_nu;
+ if (!strcmp(s, "Greek_xi")) return XK_Greek_xi;
+ if (!strcmp(s, "Greek_omicron")) return XK_Greek_omicron;
+ if (!strcmp(s, "Greek_pi")) return XK_Greek_pi;
+ if (!strcmp(s, "Greek_rho")) return XK_Greek_rho;
+ if (!strcmp(s, "Greek_sigma")) return XK_Greek_sigma;
+ if (!strcmp(s, "Greek_finalsmallsigma")) return XK_Greek_finalsmallsigma;
+ if (!strcmp(s, "Greek_tau")) return XK_Greek_tau;
+ if (!strcmp(s, "Greek_upsilon")) return XK_Greek_upsilon;
+ if (!strcmp(s, "Greek_phi")) return XK_Greek_phi;
+ if (!strcmp(s, "Greek_chi")) return XK_Greek_chi;
+ if (!strcmp(s, "Greek_psi")) return XK_Greek_psi;
+ if (!strcmp(s, "Greek_omega")) return XK_Greek_omega;
+ if (!strcmp(s, "Greek_switch")) return XK_Greek_switch;
+#endif /* XK_GREEK */
+#ifdef XK_TECHNICAL
+ if (!strcmp(s, "leftradical")) return XK_leftradical;
+ if (!strcmp(s, "topleftradical")) return XK_topleftradical;
+ if (!strcmp(s, "horizconnector")) return XK_horizconnector;
+ if (!strcmp(s, "topintegral")) return XK_topintegral;
+ if (!strcmp(s, "botintegral")) return XK_botintegral;
+ if (!strcmp(s, "vertconnector")) return XK_vertconnector;
+ if (!strcmp(s, "topleftsqbracket")) return XK_topleftsqbracket;
+ if (!strcmp(s, "botleftsqbracket")) return XK_botleftsqbracket;
+ if (!strcmp(s, "toprightsqbracket")) return XK_toprightsqbracket;
+ if (!strcmp(s, "botrightsqbracket")) return XK_botrightsqbracket;
+ if (!strcmp(s, "topleftparens")) return XK_topleftparens;
+ if (!strcmp(s, "botleftparens")) return XK_botleftparens;
+ if (!strcmp(s, "toprightparens")) return XK_toprightparens;
+ if (!strcmp(s, "botrightparens")) return XK_botrightparens;
+ if (!strcmp(s, "leftmiddlecurlybrace")) return XK_leftmiddlecurlybrace;
+ if (!strcmp(s, "rightmiddlecurlybrace")) return XK_rightmiddlecurlybrace;
+ if (!strcmp(s, "topleftsummation")) return XK_topleftsummation;
+ if (!strcmp(s, "botleftsummation")) return XK_botleftsummation;
+ if (!strcmp(s, "topvertsummationconnector")) return XK_topvertsummationconnector;
+ if (!strcmp(s, "botvertsummationconnector")) return XK_botvertsummationconnector;
+ if (!strcmp(s, "toprightsummation")) return XK_toprightsummation;
+ if (!strcmp(s, "botrightsummation")) return XK_botrightsummation;
+ if (!strcmp(s, "rightmiddlesummation")) return XK_rightmiddlesummation;
+ if (!strcmp(s, "lessthanequal")) return XK_lessthanequal;
+ if (!strcmp(s, "notequal")) return XK_notequal;
+ if (!strcmp(s, "greaterthanequal")) return XK_greaterthanequal;
+ if (!strcmp(s, "integral")) return XK_integral;
+ if (!strcmp(s, "therefore")) return XK_therefore;
+ if (!strcmp(s, "variation")) return XK_variation;
+ if (!strcmp(s, "infinity")) return XK_infinity;
+ if (!strcmp(s, "nabla")) return XK_nabla;
+ if (!strcmp(s, "approximate")) return XK_approximate;
+ if (!strcmp(s, "similarequal")) return XK_similarequal;
+ if (!strcmp(s, "ifonlyif")) return XK_ifonlyif;
+ if (!strcmp(s, "implies")) return XK_implies;
+ if (!strcmp(s, "identical")) return XK_identical;
+ if (!strcmp(s, "radical")) return XK_radical;
+ if (!strcmp(s, "includedin")) return XK_includedin;
+ if (!strcmp(s, "includes")) return XK_includes;
+ if (!strcmp(s, "intersection")) return XK_intersection;
+ if (!strcmp(s, "union")) return XK_union;
+ if (!strcmp(s, "logicaland")) return XK_logicaland;
+ if (!strcmp(s, "logicalor")) return XK_logicalor;
+ if (!strcmp(s, "partialderivative")) return XK_partialderivative;
+ if (!strcmp(s, "function")) return XK_function;
+ if (!strcmp(s, "leftarrow")) return XK_leftarrow;
+ if (!strcmp(s, "uparrow")) return XK_uparrow;
+ if (!strcmp(s, "rightarrow")) return XK_rightarrow;
+ if (!strcmp(s, "downarrow")) return XK_downarrow;
+#endif /* XK_TECHNICAL */
+#ifdef XK_SPECIAL
+ if (!strcmp(s, "blank")) return XK_blank;
+ if (!strcmp(s, "soliddiamond")) return XK_soliddiamond;
+ if (!strcmp(s, "checkerboard")) return XK_checkerboard;
+ if (!strcmp(s, "ht")) return XK_ht;
+ if (!strcmp(s, "ff")) return XK_ff;
+ if (!strcmp(s, "cr")) return XK_cr;
+ if (!strcmp(s, "lf")) return XK_lf;
+ if (!strcmp(s, "nl")) return XK_nl;
+ if (!strcmp(s, "vt")) return XK_vt;
+ if (!strcmp(s, "lowrightcorner")) return XK_lowrightcorner;
+ if (!strcmp(s, "uprightcorner")) return XK_uprightcorner;
+ if (!strcmp(s, "upleftcorner")) return XK_upleftcorner;
+ if (!strcmp(s, "lowleftcorner")) return XK_lowleftcorner;
+ if (!strcmp(s, "crossinglines")) return XK_crossinglines;
+ if (!strcmp(s, "horizlinescan1")) return XK_horizlinescan1;
+ if (!strcmp(s, "horizlinescan3")) return XK_horizlinescan3;
+ if (!strcmp(s, "horizlinescan5")) return XK_horizlinescan5;
+ if (!strcmp(s, "horizlinescan7")) return XK_horizlinescan7;
+ if (!strcmp(s, "horizlinescan9")) return XK_horizlinescan9;
+ if (!strcmp(s, "leftt")) return XK_leftt;
+ if (!strcmp(s, "rightt")) return XK_rightt;
+ if (!strcmp(s, "bott")) return XK_bott;
+ if (!strcmp(s, "topt")) return XK_topt;
+ if (!strcmp(s, "vertbar")) return XK_vertbar;
+#endif /* XK_SPECIAL */
+#ifdef XK_PUBLISHING
+ if (!strcmp(s, "emspace")) return XK_emspace;
+ if (!strcmp(s, "enspace")) return XK_enspace;
+ if (!strcmp(s, "em3space")) return XK_em3space;
+ if (!strcmp(s, "em4space")) return XK_em4space;
+ if (!strcmp(s, "digitspace")) return XK_digitspace;
+ if (!strcmp(s, "punctspace")) return XK_punctspace;
+ if (!strcmp(s, "thinspace")) return XK_thinspace;
+ if (!strcmp(s, "hairspace")) return XK_hairspace;
+ if (!strcmp(s, "emdash")) return XK_emdash;
+ if (!strcmp(s, "endash")) return XK_endash;
+ if (!strcmp(s, "signifblank")) return XK_signifblank;
+ if (!strcmp(s, "ellipsis")) return XK_ellipsis;
+ if (!strcmp(s, "doubbaselinedot")) return XK_doubbaselinedot;
+ if (!strcmp(s, "onethird")) return XK_onethird;
+ if (!strcmp(s, "twothirds")) return XK_twothirds;
+ if (!strcmp(s, "onefifth")) return XK_onefifth;
+ if (!strcmp(s, "twofifths")) return XK_twofifths;
+ if (!strcmp(s, "threefifths")) return XK_threefifths;
+ if (!strcmp(s, "fourfifths")) return XK_fourfifths;
+ if (!strcmp(s, "onesixth")) return XK_onesixth;
+ if (!strcmp(s, "fivesixths")) return XK_fivesixths;
+ if (!strcmp(s, "careof")) return XK_careof;
+ if (!strcmp(s, "figdash")) return XK_figdash;
+ if (!strcmp(s, "leftanglebracket")) return XK_leftanglebracket;
+ if (!strcmp(s, "decimalpoint")) return XK_decimalpoint;
+ if (!strcmp(s, "rightanglebracket")) return XK_rightanglebracket;
+ if (!strcmp(s, "marker")) return XK_marker;
+ if (!strcmp(s, "oneeighth")) return XK_oneeighth;
+ if (!strcmp(s, "threeeighths")) return XK_threeeighths;
+ if (!strcmp(s, "fiveeighths")) return XK_fiveeighths;
+ if (!strcmp(s, "seveneighths")) return XK_seveneighths;
+ if (!strcmp(s, "trademark")) return XK_trademark;
+ if (!strcmp(s, "signaturemark")) return XK_signaturemark;
+ if (!strcmp(s, "trademarkincircle")) return XK_trademarkincircle;
+ if (!strcmp(s, "leftopentriangle")) return XK_leftopentriangle;
+ if (!strcmp(s, "rightopentriangle")) return XK_rightopentriangle;
+ if (!strcmp(s, "emopencircle")) return XK_emopencircle;
+ if (!strcmp(s, "emopenrectangle")) return XK_emopenrectangle;
+ if (!strcmp(s, "leftsinglequotemark")) return XK_leftsinglequotemark;
+ if (!strcmp(s, "rightsinglequotemark")) return XK_rightsinglequotemark;
+ if (!strcmp(s, "leftdoublequotemark")) return XK_leftdoublequotemark;
+ if (!strcmp(s, "rightdoublequotemark")) return XK_rightdoublequotemark;
+ if (!strcmp(s, "prescription")) return XK_prescription;
+ if (!strcmp(s, "minutes")) return XK_minutes;
+ if (!strcmp(s, "seconds")) return XK_seconds;
+ if (!strcmp(s, "latincross")) return XK_latincross;
+ if (!strcmp(s, "hexagram")) return XK_hexagram;
+ if (!strcmp(s, "filledrectbullet")) return XK_filledrectbullet;
+ if (!strcmp(s, "filledlefttribullet")) return XK_filledlefttribullet;
+ if (!strcmp(s, "filledrighttribullet")) return XK_filledrighttribullet;
+ if (!strcmp(s, "emfilledcircle")) return XK_emfilledcircle;
+ if (!strcmp(s, "emfilledrect")) return XK_emfilledrect;
+ if (!strcmp(s, "enopencircbullet")) return XK_enopencircbullet;
+ if (!strcmp(s, "enopensquarebullet")) return XK_enopensquarebullet;
+ if (!strcmp(s, "openrectbullet")) return XK_openrectbullet;
+ if (!strcmp(s, "opentribulletup")) return XK_opentribulletup;
+ if (!strcmp(s, "opentribulletdown")) return XK_opentribulletdown;
+ if (!strcmp(s, "openstar")) return XK_openstar;
+ if (!strcmp(s, "enfilledcircbullet")) return XK_enfilledcircbullet;
+ if (!strcmp(s, "enfilledsqbullet")) return XK_enfilledsqbullet;
+ if (!strcmp(s, "filledtribulletup")) return XK_filledtribulletup;
+ if (!strcmp(s, "filledtribulletdown")) return XK_filledtribulletdown;
+ if (!strcmp(s, "leftpointer")) return XK_leftpointer;
+ if (!strcmp(s, "rightpointer")) return XK_rightpointer;
+ if (!strcmp(s, "club")) return XK_club;
+ if (!strcmp(s, "diamond")) return XK_diamond;
+ if (!strcmp(s, "heart")) return XK_heart;
+ if (!strcmp(s, "maltesecross")) return XK_maltesecross;
+ if (!strcmp(s, "dagger")) return XK_dagger;
+ if (!strcmp(s, "doubledagger")) return XK_doubledagger;
+ if (!strcmp(s, "checkmark")) return XK_checkmark;
+ if (!strcmp(s, "ballotcross")) return XK_ballotcross;
+ if (!strcmp(s, "musicalsharp")) return XK_musicalsharp;
+ if (!strcmp(s, "musicalflat")) return XK_musicalflat;
+ if (!strcmp(s, "malesymbol")) return XK_malesymbol;
+ if (!strcmp(s, "femalesymbol")) return XK_femalesymbol;
+ if (!strcmp(s, "telephone")) return XK_telephone;
+ if (!strcmp(s, "telephonerecorder")) return XK_telephonerecorder;
+ if (!strcmp(s, "phonographcopyright")) return XK_phonographcopyright;
+ if (!strcmp(s, "caret")) return XK_caret;
+ if (!strcmp(s, "singlelowquotemark")) return XK_singlelowquotemark;
+ if (!strcmp(s, "doublelowquotemark")) return XK_doublelowquotemark;
+ if (!strcmp(s, "cursor")) return XK_cursor;
+#endif /* XK_PUBLISHING */
+#ifdef XK_APL
+ if (!strcmp(s, "leftcaret")) return XK_leftcaret;
+ if (!strcmp(s, "rightcaret")) return XK_rightcaret;
+ if (!strcmp(s, "downcaret")) return XK_downcaret;
+ if (!strcmp(s, "upcaret")) return XK_upcaret;
+ if (!strcmp(s, "overbar")) return XK_overbar;
+ if (!strcmp(s, "downtack")) return XK_downtack;
+ if (!strcmp(s, "upshoe")) return XK_upshoe;
+ if (!strcmp(s, "downstile")) return XK_downstile;
+ if (!strcmp(s, "underbar")) return XK_underbar;
+ if (!strcmp(s, "jot")) return XK_jot;
+ if (!strcmp(s, "quad")) return XK_quad;
+ if (!strcmp(s, "uptack")) return XK_uptack;
+ if (!strcmp(s, "circle")) return XK_circle;
+ if (!strcmp(s, "upstile")) return XK_upstile;
+ if (!strcmp(s, "downshoe")) return XK_downshoe;
+ if (!strcmp(s, "rightshoe")) return XK_rightshoe;
+ if (!strcmp(s, "leftshoe")) return XK_leftshoe;
+ if (!strcmp(s, "lefttack")) return XK_lefttack;
+ if (!strcmp(s, "righttack")) return XK_righttack;
+#endif /* XK_APL */
+#ifdef XK_HEBREW
+ if (!strcmp(s, "hebrew_doublelowline")) return XK_hebrew_doublelowline;
+ if (!strcmp(s, "hebrew_aleph")) return XK_hebrew_aleph;
+ if (!strcmp(s, "hebrew_bet")) return XK_hebrew_bet;
+ if (!strcmp(s, "hebrew_beth")) return XK_hebrew_beth;
+ if (!strcmp(s, "hebrew_gimel")) return XK_hebrew_gimel;
+ if (!strcmp(s, "hebrew_gimmel")) return XK_hebrew_gimmel;
+ if (!strcmp(s, "hebrew_dalet")) return XK_hebrew_dalet;
+ if (!strcmp(s, "hebrew_daleth")) return XK_hebrew_daleth;
+ if (!strcmp(s, "hebrew_he")) return XK_hebrew_he;
+ if (!strcmp(s, "hebrew_waw")) return XK_hebrew_waw;
+ if (!strcmp(s, "hebrew_zain")) return XK_hebrew_zain;
+ if (!strcmp(s, "hebrew_zayin")) return XK_hebrew_zayin;
+ if (!strcmp(s, "hebrew_chet")) return XK_hebrew_chet;
+ if (!strcmp(s, "hebrew_het")) return XK_hebrew_het;
+ if (!strcmp(s, "hebrew_tet")) return XK_hebrew_tet;
+ if (!strcmp(s, "hebrew_teth")) return XK_hebrew_teth;
+ if (!strcmp(s, "hebrew_yod")) return XK_hebrew_yod;
+ if (!strcmp(s, "hebrew_finalkaph")) return XK_hebrew_finalkaph;
+ if (!strcmp(s, "hebrew_kaph")) return XK_hebrew_kaph;
+ if (!strcmp(s, "hebrew_lamed")) return XK_hebrew_lamed;
+ if (!strcmp(s, "hebrew_finalmem")) return XK_hebrew_finalmem;
+ if (!strcmp(s, "hebrew_mem")) return XK_hebrew_mem;
+ if (!strcmp(s, "hebrew_finalnun")) return XK_hebrew_finalnun;
+ if (!strcmp(s, "hebrew_nun")) return XK_hebrew_nun;
+ if (!strcmp(s, "hebrew_samech")) return XK_hebrew_samech;
+ if (!strcmp(s, "hebrew_samekh")) return XK_hebrew_samekh;
+ if (!strcmp(s, "hebrew_ayin")) return XK_hebrew_ayin;
+ if (!strcmp(s, "hebrew_finalpe")) return XK_hebrew_finalpe;
+ if (!strcmp(s, "hebrew_pe")) return XK_hebrew_pe;
+ if (!strcmp(s, "hebrew_finalzade")) return XK_hebrew_finalzade;
+ if (!strcmp(s, "hebrew_finalzadi")) return XK_hebrew_finalzadi;
+ if (!strcmp(s, "hebrew_zade")) return XK_hebrew_zade;
+ if (!strcmp(s, "hebrew_zadi")) return XK_hebrew_zadi;
+ if (!strcmp(s, "hebrew_qoph")) return XK_hebrew_qoph;
+ if (!strcmp(s, "hebrew_kuf")) return XK_hebrew_kuf;
+ if (!strcmp(s, "hebrew_resh")) return XK_hebrew_resh;
+ if (!strcmp(s, "hebrew_shin")) return XK_hebrew_shin;
+ if (!strcmp(s, "hebrew_taw")) return XK_hebrew_taw;
+ if (!strcmp(s, "hebrew_taf")) return XK_hebrew_taf;
+ if (!strcmp(s, "Hebrew_switch")) return XK_Hebrew_switch;
+#endif /* XK_HEBREW */
+#ifdef XK_THAI
+ if (!strcmp(s, "Thai_kokai")) return XK_Thai_kokai;
+ if (!strcmp(s, "Thai_khokhai")) return XK_Thai_khokhai;
+ if (!strcmp(s, "Thai_khokhuat")) return XK_Thai_khokhuat;
+ if (!strcmp(s, "Thai_khokhwai")) return XK_Thai_khokhwai;
+ if (!strcmp(s, "Thai_khokhon")) return XK_Thai_khokhon;
+ if (!strcmp(s, "Thai_khorakhang")) return XK_Thai_khorakhang;
+ if (!strcmp(s, "Thai_ngongu")) return XK_Thai_ngongu;
+ if (!strcmp(s, "Thai_chochan")) return XK_Thai_chochan;
+ if (!strcmp(s, "Thai_choching")) return XK_Thai_choching;
+ if (!strcmp(s, "Thai_chochang")) return XK_Thai_chochang;
+ if (!strcmp(s, "Thai_soso")) return XK_Thai_soso;
+ if (!strcmp(s, "Thai_chochoe")) return XK_Thai_chochoe;
+ if (!strcmp(s, "Thai_yoying")) return XK_Thai_yoying;
+ if (!strcmp(s, "Thai_dochada")) return XK_Thai_dochada;
+ if (!strcmp(s, "Thai_topatak")) return XK_Thai_topatak;
+ if (!strcmp(s, "Thai_thothan")) return XK_Thai_thothan;
+ if (!strcmp(s, "Thai_thonangmontho")) return XK_Thai_thonangmontho;
+ if (!strcmp(s, "Thai_thophuthao")) return XK_Thai_thophuthao;
+ if (!strcmp(s, "Thai_nonen")) return XK_Thai_nonen;
+ if (!strcmp(s, "Thai_dodek")) return XK_Thai_dodek;
+ if (!strcmp(s, "Thai_totao")) return XK_Thai_totao;
+ if (!strcmp(s, "Thai_thothung")) return XK_Thai_thothung;
+ if (!strcmp(s, "Thai_thothahan")) return XK_Thai_thothahan;
+ if (!strcmp(s, "Thai_thothong")) return XK_Thai_thothong;
+ if (!strcmp(s, "Thai_nonu")) return XK_Thai_nonu;
+ if (!strcmp(s, "Thai_bobaimai")) return XK_Thai_bobaimai;
+ if (!strcmp(s, "Thai_popla")) return XK_Thai_popla;
+ if (!strcmp(s, "Thai_phophung")) return XK_Thai_phophung;
+ if (!strcmp(s, "Thai_fofa")) return XK_Thai_fofa;
+ if (!strcmp(s, "Thai_phophan")) return XK_Thai_phophan;
+ if (!strcmp(s, "Thai_fofan")) return XK_Thai_fofan;
+ if (!strcmp(s, "Thai_phosamphao")) return XK_Thai_phosamphao;
+ if (!strcmp(s, "Thai_moma")) return XK_Thai_moma;
+ if (!strcmp(s, "Thai_yoyak")) return XK_Thai_yoyak;
+ if (!strcmp(s, "Thai_rorua")) return XK_Thai_rorua;
+ if (!strcmp(s, "Thai_ru")) return XK_Thai_ru;
+ if (!strcmp(s, "Thai_loling")) return XK_Thai_loling;
+ if (!strcmp(s, "Thai_lu")) return XK_Thai_lu;
+ if (!strcmp(s, "Thai_wowaen")) return XK_Thai_wowaen;
+ if (!strcmp(s, "Thai_sosala")) return XK_Thai_sosala;
+ if (!strcmp(s, "Thai_sorusi")) return XK_Thai_sorusi;
+ if (!strcmp(s, "Thai_sosua")) return XK_Thai_sosua;
+ if (!strcmp(s, "Thai_hohip")) return XK_Thai_hohip;
+ if (!strcmp(s, "Thai_lochula")) return XK_Thai_lochula;
+ if (!strcmp(s, "Thai_oang")) return XK_Thai_oang;
+ if (!strcmp(s, "Thai_honokhuk")) return XK_Thai_honokhuk;
+ if (!strcmp(s, "Thai_paiyannoi")) return XK_Thai_paiyannoi;
+ if (!strcmp(s, "Thai_saraa")) return XK_Thai_saraa;
+ if (!strcmp(s, "Thai_maihanakat")) return XK_Thai_maihanakat;
+ if (!strcmp(s, "Thai_saraaa")) return XK_Thai_saraaa;
+ if (!strcmp(s, "Thai_saraam")) return XK_Thai_saraam;
+ if (!strcmp(s, "Thai_sarai")) return XK_Thai_sarai;
+ if (!strcmp(s, "Thai_saraii")) return XK_Thai_saraii;
+ if (!strcmp(s, "Thai_saraue")) return XK_Thai_saraue;
+ if (!strcmp(s, "Thai_sarauee")) return XK_Thai_sarauee;
+ if (!strcmp(s, "Thai_sarau")) return XK_Thai_sarau;
+ if (!strcmp(s, "Thai_sarauu")) return XK_Thai_sarauu;
+ if (!strcmp(s, "Thai_phinthu")) return XK_Thai_phinthu;
+ if (!strcmp(s, "Thai_maihanakat_maitho")) return XK_Thai_maihanakat_maitho;
+ if (!strcmp(s, "Thai_baht")) return XK_Thai_baht;
+ if (!strcmp(s, "Thai_sarae")) return XK_Thai_sarae;
+ if (!strcmp(s, "Thai_saraae")) return XK_Thai_saraae;
+ if (!strcmp(s, "Thai_sarao")) return XK_Thai_sarao;
+ if (!strcmp(s, "Thai_saraaimaimuan")) return XK_Thai_saraaimaimuan;
+ if (!strcmp(s, "Thai_saraaimaimalai")) return XK_Thai_saraaimaimalai;
+ if (!strcmp(s, "Thai_lakkhangyao")) return XK_Thai_lakkhangyao;
+ if (!strcmp(s, "Thai_maiyamok")) return XK_Thai_maiyamok;
+ if (!strcmp(s, "Thai_maitaikhu")) return XK_Thai_maitaikhu;
+ if (!strcmp(s, "Thai_maiek")) return XK_Thai_maiek;
+ if (!strcmp(s, "Thai_maitho")) return XK_Thai_maitho;
+ if (!strcmp(s, "Thai_maitri")) return XK_Thai_maitri;
+ if (!strcmp(s, "Thai_maichattawa")) return XK_Thai_maichattawa;
+ if (!strcmp(s, "Thai_thanthakhat")) return XK_Thai_thanthakhat;
+ if (!strcmp(s, "Thai_nikhahit")) return XK_Thai_nikhahit;
+ if (!strcmp(s, "Thai_leksun")) return XK_Thai_leksun;
+ if (!strcmp(s, "Thai_leknung")) return XK_Thai_leknung;
+ if (!strcmp(s, "Thai_leksong")) return XK_Thai_leksong;
+ if (!strcmp(s, "Thai_leksam")) return XK_Thai_leksam;
+ if (!strcmp(s, "Thai_leksi")) return XK_Thai_leksi;
+ if (!strcmp(s, "Thai_lekha")) return XK_Thai_lekha;
+ if (!strcmp(s, "Thai_lekhok")) return XK_Thai_lekhok;
+ if (!strcmp(s, "Thai_lekchet")) return XK_Thai_lekchet;
+ if (!strcmp(s, "Thai_lekpaet")) return XK_Thai_lekpaet;
+ if (!strcmp(s, "Thai_lekkao")) return XK_Thai_lekkao;
+#endif /* XK_THAI */
+#ifdef XK_KOREAN
+ if (!strcmp(s, "Hangul")) return XK_Hangul;
+ if (!strcmp(s, "Hangul_Start")) return XK_Hangul_Start;
+ if (!strcmp(s, "Hangul_End")) return XK_Hangul_End;
+ if (!strcmp(s, "Hangul_Hanja")) return XK_Hangul_Hanja;
+ if (!strcmp(s, "Hangul_Jamo")) return XK_Hangul_Jamo;
+ if (!strcmp(s, "Hangul_Romaja")) return XK_Hangul_Romaja;
+ if (!strcmp(s, "Hangul_Codeinput")) return XK_Hangul_Codeinput;
+ if (!strcmp(s, "Hangul_Jeonja")) return XK_Hangul_Jeonja;
+ if (!strcmp(s, "Hangul_Banja")) return XK_Hangul_Banja;
+ if (!strcmp(s, "Hangul_PreHanja")) return XK_Hangul_PreHanja;
+ if (!strcmp(s, "Hangul_PostHanja")) return XK_Hangul_PostHanja;
+ if (!strcmp(s, "Hangul_SingleCandidate")) return XK_Hangul_SingleCandidate;
+ if (!strcmp(s, "Hangul_MultipleCandidate")) return XK_Hangul_MultipleCandidate;
+ if (!strcmp(s, "Hangul_PreviousCandidate")) return XK_Hangul_PreviousCandidate;
+ if (!strcmp(s, "Hangul_Special")) return XK_Hangul_Special;
+ if (!strcmp(s, "Hangul_switch")) return XK_Hangul_switch;
+ if (!strcmp(s, "Hangul_Kiyeog")) return XK_Hangul_Kiyeog;
+ if (!strcmp(s, "Hangul_SsangKiyeog")) return XK_Hangul_SsangKiyeog;
+ if (!strcmp(s, "Hangul_KiyeogSios")) return XK_Hangul_KiyeogSios;
+ if (!strcmp(s, "Hangul_Nieun")) return XK_Hangul_Nieun;
+ if (!strcmp(s, "Hangul_NieunJieuj")) return XK_Hangul_NieunJieuj;
+ if (!strcmp(s, "Hangul_NieunHieuh")) return XK_Hangul_NieunHieuh;
+ if (!strcmp(s, "Hangul_Dikeud")) return XK_Hangul_Dikeud;
+ if (!strcmp(s, "Hangul_SsangDikeud")) return XK_Hangul_SsangDikeud;
+ if (!strcmp(s, "Hangul_Rieul")) return XK_Hangul_Rieul;
+ if (!strcmp(s, "Hangul_RieulKiyeog")) return XK_Hangul_RieulKiyeog;
+ if (!strcmp(s, "Hangul_RieulMieum")) return XK_Hangul_RieulMieum;
+ if (!strcmp(s, "Hangul_RieulPieub")) return XK_Hangul_RieulPieub;
+ if (!strcmp(s, "Hangul_RieulSios")) return XK_Hangul_RieulSios;
+ if (!strcmp(s, "Hangul_RieulTieut")) return XK_Hangul_RieulTieut;
+ if (!strcmp(s, "Hangul_RieulPhieuf")) return XK_Hangul_RieulPhieuf;
+ if (!strcmp(s, "Hangul_RieulHieuh")) return XK_Hangul_RieulHieuh;
+ if (!strcmp(s, "Hangul_Mieum")) return XK_Hangul_Mieum;
+ if (!strcmp(s, "Hangul_Pieub")) return XK_Hangul_Pieub;
+ if (!strcmp(s, "Hangul_SsangPieub")) return XK_Hangul_SsangPieub;
+ if (!strcmp(s, "Hangul_PieubSios")) return XK_Hangul_PieubSios;
+ if (!strcmp(s, "Hangul_Sios")) return XK_Hangul_Sios;
+ if (!strcmp(s, "Hangul_SsangSios")) return XK_Hangul_SsangSios;
+ if (!strcmp(s, "Hangul_Ieung")) return XK_Hangul_Ieung;
+ if (!strcmp(s, "Hangul_Jieuj")) return XK_Hangul_Jieuj;
+ if (!strcmp(s, "Hangul_SsangJieuj")) return XK_Hangul_SsangJieuj;
+ if (!strcmp(s, "Hangul_Cieuc")) return XK_Hangul_Cieuc;
+ if (!strcmp(s, "Hangul_Khieuq")) return XK_Hangul_Khieuq;
+ if (!strcmp(s, "Hangul_Tieut")) return XK_Hangul_Tieut;
+ if (!strcmp(s, "Hangul_Phieuf")) return XK_Hangul_Phieuf;
+ if (!strcmp(s, "Hangul_Hieuh")) return XK_Hangul_Hieuh;
+ if (!strcmp(s, "Hangul_A")) return XK_Hangul_A;
+ if (!strcmp(s, "Hangul_AE")) return XK_Hangul_AE;
+ if (!strcmp(s, "Hangul_YA")) return XK_Hangul_YA;
+ if (!strcmp(s, "Hangul_YAE")) return XK_Hangul_YAE;
+ if (!strcmp(s, "Hangul_EO")) return XK_Hangul_EO;
+ if (!strcmp(s, "Hangul_E")) return XK_Hangul_E;
+ if (!strcmp(s, "Hangul_YEO")) return XK_Hangul_YEO;
+ if (!strcmp(s, "Hangul_YE")) return XK_Hangul_YE;
+ if (!strcmp(s, "Hangul_O")) return XK_Hangul_O;
+ if (!strcmp(s, "Hangul_WA")) return XK_Hangul_WA;
+ if (!strcmp(s, "Hangul_WAE")) return XK_Hangul_WAE;
+ if (!strcmp(s, "Hangul_OE")) return XK_Hangul_OE;
+ if (!strcmp(s, "Hangul_YO")) return XK_Hangul_YO;
+ if (!strcmp(s, "Hangul_U")) return XK_Hangul_U;
+ if (!strcmp(s, "Hangul_WEO")) return XK_Hangul_WEO;
+ if (!strcmp(s, "Hangul_WE")) return XK_Hangul_WE;
+ if (!strcmp(s, "Hangul_WI")) return XK_Hangul_WI;
+ if (!strcmp(s, "Hangul_YU")) return XK_Hangul_YU;
+ if (!strcmp(s, "Hangul_EU")) return XK_Hangul_EU;
+ if (!strcmp(s, "Hangul_YI")) return XK_Hangul_YI;
+ if (!strcmp(s, "Hangul_I")) return XK_Hangul_I;
+ if (!strcmp(s, "Hangul_J_Kiyeog")) return XK_Hangul_J_Kiyeog;
+ if (!strcmp(s, "Hangul_J_SsangKiyeog")) return XK_Hangul_J_SsangKiyeog;
+ if (!strcmp(s, "Hangul_J_KiyeogSios")) return XK_Hangul_J_KiyeogSios;
+ if (!strcmp(s, "Hangul_J_Nieun")) return XK_Hangul_J_Nieun;
+ if (!strcmp(s, "Hangul_J_NieunJieuj")) return XK_Hangul_J_NieunJieuj;
+ if (!strcmp(s, "Hangul_J_NieunHieuh")) return XK_Hangul_J_NieunHieuh;
+ if (!strcmp(s, "Hangul_J_Dikeud")) return XK_Hangul_J_Dikeud;
+ if (!strcmp(s, "Hangul_J_Rieul")) return XK_Hangul_J_Rieul;
+ if (!strcmp(s, "Hangul_J_RieulKiyeog")) return XK_Hangul_J_RieulKiyeog;
+ if (!strcmp(s, "Hangul_J_RieulMieum")) return XK_Hangul_J_RieulMieum;
+ if (!strcmp(s, "Hangul_J_RieulPieub")) return XK_Hangul_J_RieulPieub;
+ if (!strcmp(s, "Hangul_J_RieulSios")) return XK_Hangul_J_RieulSios;
+ if (!strcmp(s, "Hangul_J_RieulTieut")) return XK_Hangul_J_RieulTieut;
+ if (!strcmp(s, "Hangul_J_RieulPhieuf")) return XK_Hangul_J_RieulPhieuf;
+ if (!strcmp(s, "Hangul_J_RieulHieuh")) return XK_Hangul_J_RieulHieuh;
+ if (!strcmp(s, "Hangul_J_Mieum")) return XK_Hangul_J_Mieum;
+ if (!strcmp(s, "Hangul_J_Pieub")) return XK_Hangul_J_Pieub;
+ if (!strcmp(s, "Hangul_J_PieubSios")) return XK_Hangul_J_PieubSios;
+ if (!strcmp(s, "Hangul_J_Sios")) return XK_Hangul_J_Sios;
+ if (!strcmp(s, "Hangul_J_SsangSios")) return XK_Hangul_J_SsangSios;
+ if (!strcmp(s, "Hangul_J_Ieung")) return XK_Hangul_J_Ieung;
+ if (!strcmp(s, "Hangul_J_Jieuj")) return XK_Hangul_J_Jieuj;
+ if (!strcmp(s, "Hangul_J_Cieuc")) return XK_Hangul_J_Cieuc;
+ if (!strcmp(s, "Hangul_J_Khieuq")) return XK_Hangul_J_Khieuq;
+ if (!strcmp(s, "Hangul_J_Tieut")) return XK_Hangul_J_Tieut;
+ if (!strcmp(s, "Hangul_J_Phieuf")) return XK_Hangul_J_Phieuf;
+ if (!strcmp(s, "Hangul_J_Hieuh")) return XK_Hangul_J_Hieuh;
+ if (!strcmp(s, "Hangul_RieulYeorinHieuh")) return XK_Hangul_RieulYeorinHieuh;
+ if (!strcmp(s, "Hangul_SunkyeongeumMieum")) return XK_Hangul_SunkyeongeumMieum;
+ if (!strcmp(s, "Hangul_SunkyeongeumPieub")) return XK_Hangul_SunkyeongeumPieub;
+ if (!strcmp(s, "Hangul_PanSios")) return XK_Hangul_PanSios;
+ if (!strcmp(s, "Hangul_KkogjiDalrinIeung")) return XK_Hangul_KkogjiDalrinIeung;
+ if (!strcmp(s, "Hangul_SunkyeongeumPhieuf")) return XK_Hangul_SunkyeongeumPhieuf;
+ if (!strcmp(s, "Hangul_YeorinHieuh")) return XK_Hangul_YeorinHieuh;
+ if (!strcmp(s, "Hangul_AraeA")) return XK_Hangul_AraeA;
+ if (!strcmp(s, "Hangul_AraeAE")) return XK_Hangul_AraeAE;
+ if (!strcmp(s, "Hangul_J_PanSios")) return XK_Hangul_J_PanSios;
+ if (!strcmp(s, "Hangul_J_KkogjiDalrinIeung")) return XK_Hangul_J_KkogjiDalrinIeung;
+ if (!strcmp(s, "Hangul_J_YeorinHieuh")) return XK_Hangul_J_YeorinHieuh;
+ if (!strcmp(s, "Korean_Won")) return XK_Korean_Won;
+#endif /* XK_KOREAN */
+ if (!strcmp(s, "EuroSign")) return XK_EuroSign;
+#endif
+ return NoSymbol;
+}
+
+
+char *XKeysymToString(KeySym k) {
+#ifndef XK_0_nosuch
+ if (k == XK_VoidSymbol) return "VoidSymbol";
+#ifdef XK_MISCELLANY
+ if (k == XK_BackSpace) return "BackSpace";
+ if (k == XK_Tab) return "Tab";
+ if (k == XK_Linefeed) return "Linefeed";
+ if (k == XK_Clear) return "Clear";
+ if (k == XK_Return) return "Return";
+ if (k == XK_Pause) return "Pause";
+ if (k == XK_Scroll_Lock) return "Scroll_Lock";
+ if (k == XK_Sys_Req) return "Sys_Req";
+ if (k == XK_Escape) return "Escape";
+ if (k == XK_Delete) return "Delete";
+ if (k == XK_Multi_key) return "Multi_key";
+ if (k == XK_SingleCandidate) return "SingleCandidate";
+ if (k == XK_MultipleCandidate) return "MultipleCandidate";
+ if (k == XK_PreviousCandidate) return "PreviousCandidate";
+ if (k == XK_Kanji) return "Kanji";
+ if (k == XK_Muhenkan) return "Muhenkan";
+ if (k == XK_Henkan_Mode) return "Henkan_Mode";
+ if (k == XK_Henkan) return "Henkan";
+ if (k == XK_Romaji) return "Romaji";
+ if (k == XK_Hiragana) return "Hiragana";
+ if (k == XK_Katakana) return "Katakana";
+ if (k == XK_Hiragana_Katakana) return "Hiragana_Katakana";
+ if (k == XK_Zenkaku) return "Zenkaku";
+ if (k == XK_Hankaku) return "Hankaku";
+ if (k == XK_Zenkaku_Hankaku) return "Zenkaku_Hankaku";
+ if (k == XK_Touroku) return "Touroku";
+ if (k == XK_Massyo) return "Massyo";
+ if (k == XK_Kana_Lock) return "Kana_Lock";
+ if (k == XK_Kana_Shift) return "Kana_Shift";
+ if (k == XK_Eisu_Shift) return "Eisu_Shift";
+ if (k == XK_Eisu_toggle) return "Eisu_toggle";
+ if (k == XK_Zen_Koho) return "Zen_Koho";
+ if (k == XK_Mae_Koho) return "Mae_Koho";
+ if (k == XK_Home) return "Home";
+ if (k == XK_Left) return "Left";
+ if (k == XK_Up) return "Up";
+ if (k == XK_Right) return "Right";
+ if (k == XK_Down) return "Down";
+ if (k == XK_Prior) return "Prior";
+ if (k == XK_Page_Up) return "Page_Up";
+ if (k == XK_Next) return "Next";
+ if (k == XK_Page_Down) return "Page_Down";
+ if (k == XK_End) return "End";
+ if (k == XK_Begin) return "Begin";
+ if (k == XK_Select) return "Select";
+ if (k == XK_Print) return "Print";
+ if (k == XK_Execute) return "Execute";
+ if (k == XK_Insert) return "Insert";
+ if (k == XK_Undo) return "Undo";
+ if (k == XK_Redo) return "Redo";
+ if (k == XK_Menu) return "Menu";
+ if (k == XK_Find) return "Find";
+ if (k == XK_Cancel) return "Cancel";
+ if (k == XK_Help) return "Help";
+ if (k == XK_Break) return "Break";
+ if (k == XK_Mode_switch) return "Mode_switch";
+ if (k == XK_script_switch) return "script_switch";
+ if (k == XK_Num_Lock) return "Num_Lock";
+ if (k == XK_KP_Space) return "KP_Space";
+ if (k == XK_KP_Tab) return "KP_Tab";
+ if (k == XK_KP_Enter) return "KP_Enter";
+ if (k == XK_KP_F1) return "KP_F1";
+ if (k == XK_KP_F2) return "KP_F2";
+ if (k == XK_KP_F3) return "KP_F3";
+ if (k == XK_KP_F4) return "KP_F4";
+ if (k == XK_KP_Home) return "KP_Home";
+ if (k == XK_KP_Left) return "KP_Left";
+ if (k == XK_KP_Up) return "KP_Up";
+ if (k == XK_KP_Right) return "KP_Right";
+ if (k == XK_KP_Down) return "KP_Down";
+ if (k == XK_KP_Prior) return "KP_Prior";
+ if (k == XK_KP_Page_Up) return "KP_Page_Up";
+ if (k == XK_KP_Next) return "KP_Next";
+ if (k == XK_KP_Page_Down) return "KP_Page_Down";
+ if (k == XK_KP_End) return "KP_End";
+ if (k == XK_KP_Begin) return "KP_Begin";
+ if (k == XK_KP_Insert) return "KP_Insert";
+ if (k == XK_KP_Delete) return "KP_Delete";
+ if (k == XK_KP_Equal) return "KP_Equal";
+ if (k == XK_KP_Multiply) return "KP_Multiply";
+ if (k == XK_KP_Add) return "KP_Add";
+ if (k == XK_KP_Separator) return "KP_Separator";
+ if (k == XK_KP_Subtract) return "KP_Subtract";
+ if (k == XK_KP_Decimal) return "KP_Decimal";
+ if (k == XK_KP_Divide) return "KP_Divide";
+ if (k == XK_KP_0) return "KP_0";
+ if (k == XK_KP_1) return "KP_1";
+ if (k == XK_KP_2) return "KP_2";
+ if (k == XK_KP_3) return "KP_3";
+ if (k == XK_KP_4) return "KP_4";
+ if (k == XK_KP_5) return "KP_5";
+ if (k == XK_KP_6) return "KP_6";
+ if (k == XK_KP_7) return "KP_7";
+ if (k == XK_KP_8) return "KP_8";
+ if (k == XK_KP_9) return "KP_9";
+ if (k == XK_F1) return "F1";
+ if (k == XK_F2) return "F2";
+ if (k == XK_F3) return "F3";
+ if (k == XK_F4) return "F4";
+ if (k == XK_F5) return "F5";
+ if (k == XK_F6) return "F6";
+ if (k == XK_F7) return "F7";
+ if (k == XK_F8) return "F8";
+ if (k == XK_F9) return "F9";
+ if (k == XK_F10) return "F10";
+ if (k == XK_F11) return "F11";
+ if (k == XK_L1) return "L1";
+ if (k == XK_F12) return "F12";
+ if (k == XK_L2) return "L2";
+ if (k == XK_F13) return "F13";
+ if (k == XK_L3) return "L3";
+ if (k == XK_F14) return "F14";
+ if (k == XK_L4) return "L4";
+ if (k == XK_F15) return "F15";
+ if (k == XK_L5) return "L5";
+ if (k == XK_F16) return "F16";
+ if (k == XK_L6) return "L6";
+ if (k == XK_F17) return "F17";
+ if (k == XK_L7) return "L7";
+ if (k == XK_F18) return "F18";
+ if (k == XK_L8) return "L8";
+ if (k == XK_F19) return "F19";
+ if (k == XK_L9) return "L9";
+ if (k == XK_F20) return "F20";
+ if (k == XK_L10) return "L10";
+ if (k == XK_F21) return "F21";
+ if (k == XK_R1) return "R1";
+ if (k == XK_F22) return "F22";
+ if (k == XK_R2) return "R2";
+ if (k == XK_F23) return "F23";
+ if (k == XK_R3) return "R3";
+ if (k == XK_F24) return "F24";
+ if (k == XK_R4) return "R4";
+ if (k == XK_F25) return "F25";
+ if (k == XK_R5) return "R5";
+ if (k == XK_F26) return "F26";
+ if (k == XK_R6) return "R6";
+ if (k == XK_F27) return "F27";
+ if (k == XK_R7) return "R7";
+ if (k == XK_F28) return "F28";
+ if (k == XK_R8) return "R8";
+ if (k == XK_F29) return "F29";
+ if (k == XK_R9) return "R9";
+ if (k == XK_F30) return "F30";
+ if (k == XK_R10) return "R10";
+ if (k == XK_F31) return "F31";
+ if (k == XK_R11) return "R11";
+ if (k == XK_F32) return "F32";
+ if (k == XK_R12) return "R12";
+ if (k == XK_F33) return "F33";
+ if (k == XK_R13) return "R13";
+ if (k == XK_F34) return "F34";
+ if (k == XK_R14) return "R14";
+ if (k == XK_F35) return "F35";
+ if (k == XK_R15) return "R15";
+ if (k == XK_Shift_L) return "Shift_L";
+ if (k == XK_Shift_R) return "Shift_R";
+ if (k == XK_Control_L) return "Control_L";
+ if (k == XK_Control_R) return "Control_R";
+ if (k == XK_Caps_Lock) return "Caps_Lock";
+ if (k == XK_Shift_Lock) return "Shift_Lock";
+ if (k == XK_Meta_L) return "Meta_L";
+ if (k == XK_Meta_R) return "Meta_R";
+ if (k == XK_Alt_L) return "Alt_L";
+ if (k == XK_Alt_R) return "Alt_R";
+ if (k == XK_Super_L) return "Super_L";
+ if (k == XK_Super_R) return "Super_R";
+ if (k == XK_Hyper_L) return "Hyper_L";
+ if (k == XK_Hyper_R) return "Hyper_R";
+#endif /* XK_MISCELLANY */
+#ifdef XK_XKB_KEYS
+ if (k == XK_ISO_Lock) return "ISO_Lock";
+ if (k == XK_ISO_Level2_Latch) return "ISO_Level2_Latch";
+ if (k == XK_ISO_Level3_Shift) return "ISO_Level3_Shift";
+ if (k == XK_ISO_Level3_Latch) return "ISO_Level3_Latch";
+ if (k == XK_ISO_Level3_Lock) return "ISO_Level3_Lock";
+ if (k == XK_ISO_Group_Shift) return "ISO_Group_Shift";
+ if (k == XK_ISO_Group_Latch) return "ISO_Group_Latch";
+ if (k == XK_ISO_Group_Lock) return "ISO_Group_Lock";
+ if (k == XK_ISO_Next_Group) return "ISO_Next_Group";
+ if (k == XK_ISO_Next_Group_Lock) return "ISO_Next_Group_Lock";
+ if (k == XK_ISO_Prev_Group) return "ISO_Prev_Group";
+ if (k == XK_ISO_Prev_Group_Lock) return "ISO_Prev_Group_Lock";
+ if (k == XK_ISO_First_Group) return "ISO_First_Group";
+ if (k == XK_ISO_First_Group_Lock) return "ISO_First_Group_Lock";
+ if (k == XK_ISO_Last_Group) return "ISO_Last_Group";
+ if (k == XK_ISO_Last_Group_Lock) return "ISO_Last_Group_Lock";
+ if (k == XK_ISO_Left_Tab) return "ISO_Left_Tab";
+ if (k == XK_ISO_Move_Line_Up) return "ISO_Move_Line_Up";
+ if (k == XK_ISO_Move_Line_Down) return "ISO_Move_Line_Down";
+ if (k == XK_ISO_Partial_Line_Up) return "ISO_Partial_Line_Up";
+ if (k == XK_ISO_Partial_Line_Down) return "ISO_Partial_Line_Down";
+ if (k == XK_ISO_Partial_Space_Left) return "ISO_Partial_Space_Left";
+ if (k == XK_ISO_Partial_Space_Right) return "ISO_Partial_Space_Right";
+ if (k == XK_ISO_Set_Margin_Left) return "ISO_Set_Margin_Left";
+ if (k == XK_ISO_Set_Margin_Right) return "ISO_Set_Margin_Right";
+ if (k == XK_ISO_Release_Margin_Left) return "ISO_Release_Margin_Left";
+ if (k == XK_ISO_Release_Margin_Right) return "ISO_Release_Margin_Right";
+ if (k == XK_ISO_Release_Both_Margins) return "ISO_Release_Both_Margins";
+ if (k == XK_ISO_Fast_Cursor_Left) return "ISO_Fast_Cursor_Left";
+ if (k == XK_ISO_Fast_Cursor_Right) return "ISO_Fast_Cursor_Right";
+ if (k == XK_ISO_Fast_Cursor_Up) return "ISO_Fast_Cursor_Up";
+ if (k == XK_ISO_Fast_Cursor_Down) return "ISO_Fast_Cursor_Down";
+ if (k == XK_ISO_Continuous_Underline) return "ISO_Continuous_Underline";
+ if (k == XK_ISO_Discontinuous_Underline) return "ISO_Discontinuous_Underline";
+ if (k == XK_ISO_Emphasize) return "ISO_Emphasize";
+ if (k == XK_ISO_Center_Object) return "ISO_Center_Object";
+ if (k == XK_ISO_Enter) return "ISO_Enter";
+ if (k == XK_dead_grave) return "dead_grave";
+ if (k == XK_dead_acute) return "dead_acute";
+ if (k == XK_dead_circumflex) return "dead_circumflex";
+ if (k == XK_dead_tilde) return "dead_tilde";
+ if (k == XK_dead_macron) return "dead_macron";
+ if (k == XK_dead_breve) return "dead_breve";
+ if (k == XK_dead_abovedot) return "dead_abovedot";
+ if (k == XK_dead_diaeresis) return "dead_diaeresis";
+ if (k == XK_dead_abovering) return "dead_abovering";
+ if (k == XK_dead_doubleacute) return "dead_doubleacute";
+ if (k == XK_dead_caron) return "dead_caron";
+ if (k == XK_dead_cedilla) return "dead_cedilla";
+ if (k == XK_dead_ogonek) return "dead_ogonek";
+ if (k == XK_dead_iota) return "dead_iota";
+ if (k == XK_dead_voiced_sound) return "dead_voiced_sound";
+ if (k == XK_dead_semivoiced_sound) return "dead_semivoiced_sound";
+ if (k == XK_dead_belowdot) return "dead_belowdot";
+ if (k == XK_First_Virtual_Screen) return "First_Virtual_Screen";
+ if (k == XK_Prev_Virtual_Screen) return "Prev_Virtual_Screen";
+ if (k == XK_Next_Virtual_Screen) return "Next_Virtual_Screen";
+ if (k == XK_Last_Virtual_Screen) return "Last_Virtual_Screen";
+ if (k == XK_Terminate_Server) return "Terminate_Server";
+ if (k == XK_AccessX_Enable) return "AccessX_Enable";
+ if (k == XK_AccessX_Feedback_Enable) return "AccessX_Feedback_Enable";
+ if (k == XK_RepeatKeys_Enable) return "RepeatKeys_Enable";
+ if (k == XK_SlowKeys_Enable) return "SlowKeys_Enable";
+ if (k == XK_BounceKeys_Enable) return "BounceKeys_Enable";
+ if (k == XK_StickyKeys_Enable) return "StickyKeys_Enable";
+ if (k == XK_MouseKeys_Enable) return "MouseKeys_Enable";
+ if (k == XK_MouseKeys_Accel_Enable) return "MouseKeys_Accel_Enable";
+ if (k == XK_Overlay1_Enable) return "Overlay1_Enable";
+ if (k == XK_Overlay2_Enable) return "Overlay2_Enable";
+ if (k == XK_AudibleBell_Enable) return "AudibleBell_Enable";
+ if (k == XK_Pointer_Left) return "Pointer_Left";
+ if (k == XK_Pointer_Right) return "Pointer_Right";
+ if (k == XK_Pointer_Up) return "Pointer_Up";
+ if (k == XK_Pointer_Down) return "Pointer_Down";
+ if (k == XK_Pointer_UpLeft) return "Pointer_UpLeft";
+ if (k == XK_Pointer_UpRight) return "Pointer_UpRight";
+ if (k == XK_Pointer_DownLeft) return "Pointer_DownLeft";
+ if (k == XK_Pointer_DownRight) return "Pointer_DownRight";
+ if (k == XK_Pointer_Button_Dflt) return "Pointer_Button_Dflt";
+ if (k == XK_Pointer_Button1) return "Pointer_Button1";
+ if (k == XK_Pointer_Button2) return "Pointer_Button2";
+ if (k == XK_Pointer_Button3) return "Pointer_Button3";
+ if (k == XK_Pointer_Button4) return "Pointer_Button4";
+ if (k == XK_Pointer_Button5) return "Pointer_Button5";
+ if (k == XK_Pointer_DblClick_Dflt) return "Pointer_DblClick_Dflt";
+ if (k == XK_Pointer_DblClick1) return "Pointer_DblClick1";
+ if (k == XK_Pointer_DblClick2) return "Pointer_DblClick2";
+ if (k == XK_Pointer_DblClick3) return "Pointer_DblClick3";
+ if (k == XK_Pointer_DblClick4) return "Pointer_DblClick4";
+ if (k == XK_Pointer_DblClick5) return "Pointer_DblClick5";
+ if (k == XK_Pointer_Drag_Dflt) return "Pointer_Drag_Dflt";
+ if (k == XK_Pointer_Drag1) return "Pointer_Drag1";
+ if (k == XK_Pointer_Drag2) return "Pointer_Drag2";
+ if (k == XK_Pointer_Drag3) return "Pointer_Drag3";
+ if (k == XK_Pointer_Drag4) return "Pointer_Drag4";
+ if (k == XK_Pointer_Drag5) return "Pointer_Drag5";
+ if (k == XK_Pointer_EnableKeys) return "Pointer_EnableKeys";
+ if (k == XK_Pointer_Accelerate) return "Pointer_Accelerate";
+ if (k == XK_Pointer_DfltBtnNext) return "Pointer_DfltBtnNext";
+ if (k == XK_Pointer_DfltBtnPrev) return "Pointer_DfltBtnPrev";
+#endif
+#ifdef XK_3270
+ if (k == XK_3270_Duplicate) return "3270_Duplicate";
+ if (k == XK_3270_FieldMark) return "3270_FieldMark";
+ if (k == XK_3270_Right2) return "3270_Right2";
+ if (k == XK_3270_Left2) return "3270_Left2";
+ if (k == XK_3270_BackTab) return "3270_BackTab";
+ if (k == XK_3270_EraseEOF) return "3270_EraseEOF";
+ if (k == XK_3270_EraseInput) return "3270_EraseInput";
+ if (k == XK_3270_Reset) return "3270_Reset";
+ if (k == XK_3270_Quit) return "3270_Quit";
+ if (k == XK_3270_PA1) return "3270_PA1";
+ if (k == XK_3270_PA2) return "3270_PA2";
+ if (k == XK_3270_PA3) return "3270_PA3";
+ if (k == XK_3270_Test) return "3270_Test";
+ if (k == XK_3270_Attn) return "3270_Attn";
+ if (k == XK_3270_CursorBlink) return "3270_CursorBlink";
+ if (k == XK_3270_AltCursor) return "3270_AltCursor";
+ if (k == XK_3270_KeyClick) return "3270_KeyClick";
+ if (k == XK_3270_Jump) return "3270_Jump";
+ if (k == XK_3270_Ident) return "3270_Ident";
+ if (k == XK_3270_Rule) return "3270_Rule";
+ if (k == XK_3270_Copy) return "3270_Copy";
+ if (k == XK_3270_Play) return "3270_Play";
+ if (k == XK_3270_Setup) return "3270_Setup";
+ if (k == XK_3270_Record) return "3270_Record";
+ if (k == XK_3270_ChangeScreen) return "3270_ChangeScreen";
+ if (k == XK_3270_DeleteWord) return "3270_DeleteWord";
+ if (k == XK_3270_ExSelect) return "3270_ExSelect";
+ if (k == XK_3270_CursorSelect) return "3270_CursorSelect";
+ if (k == XK_3270_PrintScreen) return "3270_PrintScreen";
+ if (k == XK_3270_Enter) return "3270_Enter";
+#endif
+#ifdef XK_LATIN1
+ if (k == XK_space) return "space";
+ if (k == XK_exclam) return "exclam";
+ if (k == XK_quotedbl) return "quotedbl";
+ if (k == XK_numbersign) return "numbersign";
+ if (k == XK_dollar) return "dollar";
+ if (k == XK_percent) return "percent";
+ if (k == XK_ampersand) return "ampersand";
+ if (k == XK_apostrophe) return "apostrophe";
+ if (k == XK_quoteright) return "quoteright";
+ if (k == XK_parenleft) return "parenleft";
+ if (k == XK_parenright) return "parenright";
+ if (k == XK_asterisk) return "asterisk";
+ if (k == XK_plus) return "plus";
+ if (k == XK_comma) return "comma";
+ if (k == XK_minus) return "minus";
+ if (k == XK_period) return "period";
+ if (k == XK_slash) return "slash";
+ if (k == XK_0) return "0";
+ if (k == XK_1) return "1";
+ if (k == XK_2) return "2";
+ if (k == XK_3) return "3";
+ if (k == XK_4) return "4";
+ if (k == XK_5) return "5";
+ if (k == XK_6) return "6";
+ if (k == XK_7) return "7";
+ if (k == XK_8) return "8";
+ if (k == XK_9) return "9";
+ if (k == XK_colon) return "colon";
+ if (k == XK_semicolon) return "semicolon";
+ if (k == XK_less) return "less";
+ if (k == XK_equal) return "equal";
+ if (k == XK_greater) return "greater";
+ if (k == XK_question) return "question";
+ if (k == XK_at) return "at";
+ if (k == XK_A) return "A";
+ if (k == XK_B) return "B";
+ if (k == XK_C) return "C";
+ if (k == XK_D) return "D";
+ if (k == XK_E) return "E";
+ if (k == XK_F) return "F";
+ if (k == XK_G) return "G";
+ if (k == XK_H) return "H";
+ if (k == XK_I) return "I";
+ if (k == XK_J) return "J";
+ if (k == XK_K) return "K";
+ if (k == XK_L) return "L";
+ if (k == XK_M) return "M";
+ if (k == XK_N) return "N";
+ if (k == XK_O) return "O";
+ if (k == XK_P) return "P";
+ if (k == XK_Q) return "Q";
+ if (k == XK_R) return "R";
+ if (k == XK_S) return "S";
+ if (k == XK_T) return "T";
+ if (k == XK_U) return "U";
+ if (k == XK_V) return "V";
+ if (k == XK_W) return "W";
+ if (k == XK_X) return "X";
+ if (k == XK_Y) return "Y";
+ if (k == XK_Z) return "Z";
+ if (k == XK_bracketleft) return "bracketleft";
+ if (k == XK_backslash) return "backslash";
+ if (k == XK_bracketright) return "bracketright";
+ if (k == XK_asciicircum) return "asciicircum";
+ if (k == XK_underscore) return "underscore";
+ if (k == XK_grave) return "grave";
+ if (k == XK_quoteleft) return "quoteleft";
+ if (k == XK_a) return "a";
+ if (k == XK_b) return "b";
+ if (k == XK_c) return "c";
+ if (k == XK_d) return "d";
+ if (k == XK_e) return "e";
+ if (k == XK_f) return "f";
+ if (k == XK_g) return "g";
+ if (k == XK_h) return "h";
+ if (k == XK_i) return "i";
+ if (k == XK_j) return "j";
+ if (k == XK_k) return "k";
+ if (k == XK_l) return "l";
+ if (k == XK_m) return "m";
+ if (k == XK_n) return "n";
+ if (k == XK_o) return "o";
+ if (k == XK_p) return "p";
+ if (k == XK_q) return "q";
+ if (k == XK_r) return "r";
+ if (k == XK_s) return "s";
+ if (k == XK_t) return "t";
+ if (k == XK_u) return "u";
+ if (k == XK_v) return "v";
+ if (k == XK_w) return "w";
+ if (k == XK_x) return "x";
+ if (k == XK_y) return "y";
+ if (k == XK_z) return "z";
+ if (k == XK_braceleft) return "braceleft";
+ if (k == XK_bar) return "bar";
+ if (k == XK_braceright) return "braceright";
+ if (k == XK_asciitilde) return "asciitilde";
+ if (k == XK_nobreakspace) return "nobreakspace";
+ if (k == XK_exclamdown) return "exclamdown";
+ if (k == XK_cent) return "cent";
+ if (k == XK_sterling) return "sterling";
+ if (k == XK_currency) return "currency";
+ if (k == XK_yen) return "yen";
+ if (k == XK_brokenbar) return "brokenbar";
+ if (k == XK_section) return "section";
+ if (k == XK_diaeresis) return "diaeresis";
+ if (k == XK_copyright) return "copyright";
+ if (k == XK_ordfeminine) return "ordfeminine";
+ if (k == XK_guillemotleft) return "guillemotleft";
+ if (k == XK_notsign) return "notsign";
+ if (k == XK_hyphen) return "hyphen";
+ if (k == XK_registered) return "registered";
+ if (k == XK_macron) return "macron";
+ if (k == XK_degree) return "degree";
+ if (k == XK_plusminus) return "plusminus";
+ if (k == XK_twosuperior) return "twosuperior";
+ if (k == XK_threesuperior) return "threesuperior";
+ if (k == XK_acute) return "acute";
+ if (k == XK_mu) return "mu";
+ if (k == XK_paragraph) return "paragraph";
+ if (k == XK_periodcentered) return "periodcentered";
+ if (k == XK_cedilla) return "cedilla";
+ if (k == XK_onesuperior) return "onesuperior";
+ if (k == XK_masculine) return "masculine";
+ if (k == XK_guillemotright) return "guillemotright";
+ if (k == XK_onequarter) return "onequarter";
+ if (k == XK_onehalf) return "onehalf";
+ if (k == XK_threequarters) return "threequarters";
+ if (k == XK_questiondown) return "questiondown";
+ if (k == XK_Agrave) return "Agrave";
+ if (k == XK_Aacute) return "Aacute";
+ if (k == XK_Acircumflex) return "Acircumflex";
+ if (k == XK_Atilde) return "Atilde";
+ if (k == XK_Adiaeresis) return "Adiaeresis";
+ if (k == XK_Aring) return "Aring";
+ if (k == XK_AE) return "AE";
+ if (k == XK_Ccedilla) return "Ccedilla";
+ if (k == XK_Egrave) return "Egrave";
+ if (k == XK_Eacute) return "Eacute";
+ if (k == XK_Ecircumflex) return "Ecircumflex";
+ if (k == XK_Ediaeresis) return "Ediaeresis";
+ if (k == XK_Igrave) return "Igrave";
+ if (k == XK_Iacute) return "Iacute";
+ if (k == XK_Icircumflex) return "Icircumflex";
+ if (k == XK_Idiaeresis) return "Idiaeresis";
+ if (k == XK_ETH) return "ETH";
+ if (k == XK_Eth) return "Eth";
+ if (k == XK_Ntilde) return "Ntilde";
+ if (k == XK_Ograve) return "Ograve";
+ if (k == XK_Oacute) return "Oacute";
+ if (k == XK_Ocircumflex) return "Ocircumflex";
+ if (k == XK_Otilde) return "Otilde";
+ if (k == XK_Odiaeresis) return "Odiaeresis";
+ if (k == XK_multiply) return "multiply";
+ if (k == XK_Ooblique) return "Ooblique";
+ if (k == XK_Ugrave) return "Ugrave";
+ if (k == XK_Uacute) return "Uacute";
+ if (k == XK_Ucircumflex) return "Ucircumflex";
+ if (k == XK_Udiaeresis) return "Udiaeresis";
+ if (k == XK_Yacute) return "Yacute";
+ if (k == XK_THORN) return "THORN";
+ if (k == XK_Thorn) return "Thorn";
+ if (k == XK_ssharp) return "ssharp";
+ if (k == XK_agrave) return "agrave";
+ if (k == XK_aacute) return "aacute";
+ if (k == XK_acircumflex) return "acircumflex";
+ if (k == XK_atilde) return "atilde";
+ if (k == XK_adiaeresis) return "adiaeresis";
+ if (k == XK_aring) return "aring";
+ if (k == XK_ae) return "ae";
+ if (k == XK_ccedilla) return "ccedilla";
+ if (k == XK_egrave) return "egrave";
+ if (k == XK_eacute) return "eacute";
+ if (k == XK_ecircumflex) return "ecircumflex";
+ if (k == XK_ediaeresis) return "ediaeresis";
+ if (k == XK_igrave) return "igrave";
+ if (k == XK_iacute) return "iacute";
+ if (k == XK_icircumflex) return "icircumflex";
+ if (k == XK_idiaeresis) return "idiaeresis";
+ if (k == XK_eth) return "eth";
+ if (k == XK_ntilde) return "ntilde";
+ if (k == XK_ograve) return "ograve";
+ if (k == XK_oacute) return "oacute";
+ if (k == XK_ocircumflex) return "ocircumflex";
+ if (k == XK_otilde) return "otilde";
+ if (k == XK_odiaeresis) return "odiaeresis";
+ if (k == XK_division) return "division";
+ if (k == XK_oslash) return "oslash";
+ if (k == XK_ugrave) return "ugrave";
+ if (k == XK_uacute) return "uacute";
+ if (k == XK_ucircumflex) return "ucircumflex";
+ if (k == XK_udiaeresis) return "udiaeresis";
+ if (k == XK_yacute) return "yacute";
+ if (k == XK_thorn) return "thorn";
+ if (k == XK_ydiaeresis) return "ydiaeresis";
+#endif /* XK_LATIN1 */
+#ifdef XK_LATIN2
+ if (k == XK_Aogonek) return "Aogonek";
+ if (k == XK_breve) return "breve";
+ if (k == XK_Lstroke) return "Lstroke";
+ if (k == XK_Lcaron) return "Lcaron";
+ if (k == XK_Sacute) return "Sacute";
+ if (k == XK_Scaron) return "Scaron";
+ if (k == XK_Scedilla) return "Scedilla";
+ if (k == XK_Tcaron) return "Tcaron";
+ if (k == XK_Zacute) return "Zacute";
+ if (k == XK_Zcaron) return "Zcaron";
+ if (k == XK_Zabovedot) return "Zabovedot";
+ if (k == XK_aogonek) return "aogonek";
+ if (k == XK_ogonek) return "ogonek";
+ if (k == XK_lstroke) return "lstroke";
+ if (k == XK_lcaron) return "lcaron";
+ if (k == XK_sacute) return "sacute";
+ if (k == XK_caron) return "caron";
+ if (k == XK_scaron) return "scaron";
+ if (k == XK_scedilla) return "scedilla";
+ if (k == XK_tcaron) return "tcaron";
+ if (k == XK_zacute) return "zacute";
+ if (k == XK_doubleacute) return "doubleacute";
+ if (k == XK_zcaron) return "zcaron";
+ if (k == XK_zabovedot) return "zabovedot";
+ if (k == XK_Racute) return "Racute";
+ if (k == XK_Abreve) return "Abreve";
+ if (k == XK_Lacute) return "Lacute";
+ if (k == XK_Cacute) return "Cacute";
+ if (k == XK_Ccaron) return "Ccaron";
+ if (k == XK_Eogonek) return "Eogonek";
+ if (k == XK_Ecaron) return "Ecaron";
+ if (k == XK_Dcaron) return "Dcaron";
+ if (k == XK_Dstroke) return "Dstroke";
+ if (k == XK_Nacute) return "Nacute";
+ if (k == XK_Ncaron) return "Ncaron";
+ if (k == XK_Odoubleacute) return "Odoubleacute";
+ if (k == XK_Rcaron) return "Rcaron";
+ if (k == XK_Uring) return "Uring";
+ if (k == XK_Udoubleacute) return "Udoubleacute";
+ if (k == XK_Tcedilla) return "Tcedilla";
+ if (k == XK_racute) return "racute";
+ if (k == XK_abreve) return "abreve";
+ if (k == XK_lacute) return "lacute";
+ if (k == XK_cacute) return "cacute";
+ if (k == XK_ccaron) return "ccaron";
+ if (k == XK_eogonek) return "eogonek";
+ if (k == XK_ecaron) return "ecaron";
+ if (k == XK_dcaron) return "dcaron";
+ if (k == XK_dstroke) return "dstroke";
+ if (k == XK_nacute) return "nacute";
+ if (k == XK_ncaron) return "ncaron";
+ if (k == XK_odoubleacute) return "odoubleacute";
+ if (k == XK_udoubleacute) return "udoubleacute";
+ if (k == XK_rcaron) return "rcaron";
+ if (k == XK_uring) return "uring";
+ if (k == XK_tcedilla) return "tcedilla";
+ if (k == XK_abovedot) return "abovedot";
+#endif /* XK_LATIN2 */
+#ifdef XK_LATIN3
+ if (k == XK_Hstroke) return "Hstroke";
+ if (k == XK_Hcircumflex) return "Hcircumflex";
+ if (k == XK_Iabovedot) return "Iabovedot";
+ if (k == XK_Gbreve) return "Gbreve";
+ if (k == XK_Jcircumflex) return "Jcircumflex";
+ if (k == XK_hstroke) return "hstroke";
+ if (k == XK_hcircumflex) return "hcircumflex";
+ if (k == XK_idotless) return "idotless";
+ if (k == XK_gbreve) return "gbreve";
+ if (k == XK_jcircumflex) return "jcircumflex";
+ if (k == XK_Cabovedot) return "Cabovedot";
+ if (k == XK_Ccircumflex) return "Ccircumflex";
+ if (k == XK_Gabovedot) return "Gabovedot";
+ if (k == XK_Gcircumflex) return "Gcircumflex";
+ if (k == XK_Ubreve) return "Ubreve";
+ if (k == XK_Scircumflex) return "Scircumflex";
+ if (k == XK_cabovedot) return "cabovedot";
+ if (k == XK_ccircumflex) return "ccircumflex";
+ if (k == XK_gabovedot) return "gabovedot";
+ if (k == XK_gcircumflex) return "gcircumflex";
+ if (k == XK_ubreve) return "ubreve";
+ if (k == XK_scircumflex) return "scircumflex";
+#endif /* XK_LATIN3 */
+#ifdef XK_LATIN4
+ if (k == XK_kra) return "kra";
+ if (k == XK_kappa) return "kappa";
+ if (k == XK_Rcedilla) return "Rcedilla";
+ if (k == XK_Itilde) return "Itilde";
+ if (k == XK_Lcedilla) return "Lcedilla";
+ if (k == XK_Emacron) return "Emacron";
+ if (k == XK_Gcedilla) return "Gcedilla";
+ if (k == XK_Tslash) return "Tslash";
+ if (k == XK_rcedilla) return "rcedilla";
+ if (k == XK_itilde) return "itilde";
+ if (k == XK_lcedilla) return "lcedilla";
+ if (k == XK_emacron) return "emacron";
+ if (k == XK_gcedilla) return "gcedilla";
+ if (k == XK_tslash) return "tslash";
+ if (k == XK_ENG) return "ENG";
+ if (k == XK_eng) return "eng";
+ if (k == XK_Amacron) return "Amacron";
+ if (k == XK_Iogonek) return "Iogonek";
+ if (k == XK_Eabovedot) return "Eabovedot";
+ if (k == XK_Imacron) return "Imacron";
+ if (k == XK_Ncedilla) return "Ncedilla";
+ if (k == XK_Omacron) return "Omacron";
+ if (k == XK_Kcedilla) return "Kcedilla";
+ if (k == XK_Uogonek) return "Uogonek";
+ if (k == XK_Utilde) return "Utilde";
+ if (k == XK_Umacron) return "Umacron";
+ if (k == XK_amacron) return "amacron";
+ if (k == XK_iogonek) return "iogonek";
+ if (k == XK_eabovedot) return "eabovedot";
+ if (k == XK_imacron) return "imacron";
+ if (k == XK_ncedilla) return "ncedilla";
+ if (k == XK_omacron) return "omacron";
+ if (k == XK_kcedilla) return "kcedilla";
+ if (k == XK_uogonek) return "uogonek";
+ if (k == XK_utilde) return "utilde";
+ if (k == XK_umacron) return "umacron";
+#endif /* XK_LATIN4 */
+#ifdef XK_KATAKANA
+ if (k == XK_overline) return "overline";
+ if (k == XK_kana_fullstop) return "kana_fullstop";
+ if (k == XK_kana_openingbracket) return "kana_openingbracket";
+ if (k == XK_kana_closingbracket) return "kana_closingbracket";
+ if (k == XK_kana_comma) return "kana_comma";
+ if (k == XK_kana_conjunctive) return "kana_conjunctive";
+ if (k == XK_kana_middledot) return "kana_middledot";
+ if (k == XK_kana_WO) return "kana_WO";
+ if (k == XK_kana_a) return "kana_a";
+ if (k == XK_kana_i) return "kana_i";
+ if (k == XK_kana_u) return "kana_u";
+ if (k == XK_kana_e) return "kana_e";
+ if (k == XK_kana_o) return "kana_o";
+ if (k == XK_kana_ya) return "kana_ya";
+ if (k == XK_kana_yu) return "kana_yu";
+ if (k == XK_kana_yo) return "kana_yo";
+ if (k == XK_kana_tsu) return "kana_tsu";
+ if (k == XK_kana_tu) return "kana_tu";
+ if (k == XK_prolongedsound) return "prolongedsound";
+ if (k == XK_kana_A) return "kana_A";
+ if (k == XK_kana_I) return "kana_I";
+ if (k == XK_kana_U) return "kana_U";
+ if (k == XK_kana_E) return "kana_E";
+ if (k == XK_kana_O) return "kana_O";
+ if (k == XK_kana_KA) return "kana_KA";
+ if (k == XK_kana_KI) return "kana_KI";
+ if (k == XK_kana_KU) return "kana_KU";
+ if (k == XK_kana_KE) return "kana_KE";
+ if (k == XK_kana_KO) return "kana_KO";
+ if (k == XK_kana_SA) return "kana_SA";
+ if (k == XK_kana_SHI) return "kana_SHI";
+ if (k == XK_kana_SU) return "kana_SU";
+ if (k == XK_kana_SE) return "kana_SE";
+ if (k == XK_kana_SO) return "kana_SO";
+ if (k == XK_kana_TA) return "kana_TA";
+ if (k == XK_kana_CHI) return "kana_CHI";
+ if (k == XK_kana_TI) return "kana_TI";
+ if (k == XK_kana_TSU) return "kana_TSU";
+ if (k == XK_kana_TU) return "kana_TU";
+ if (k == XK_kana_TE) return "kana_TE";
+ if (k == XK_kana_TO) return "kana_TO";
+ if (k == XK_kana_NA) return "kana_NA";
+ if (k == XK_kana_NI) return "kana_NI";
+ if (k == XK_kana_NU) return "kana_NU";
+ if (k == XK_kana_NE) return "kana_NE";
+ if (k == XK_kana_NO) return "kana_NO";
+ if (k == XK_kana_HA) return "kana_HA";
+ if (k == XK_kana_HI) return "kana_HI";
+ if (k == XK_kana_FU) return "kana_FU";
+ if (k == XK_kana_HU) return "kana_HU";
+ if (k == XK_kana_HE) return "kana_HE";
+ if (k == XK_kana_HO) return "kana_HO";
+ if (k == XK_kana_MA) return "kana_MA";
+ if (k == XK_kana_MI) return "kana_MI";
+ if (k == XK_kana_MU) return "kana_MU";
+ if (k == XK_kana_ME) return "kana_ME";
+ if (k == XK_kana_MO) return "kana_MO";
+ if (k == XK_kana_YA) return "kana_YA";
+ if (k == XK_kana_YU) return "kana_YU";
+ if (k == XK_kana_YO) return "kana_YO";
+ if (k == XK_kana_RA) return "kana_RA";
+ if (k == XK_kana_RI) return "kana_RI";
+ if (k == XK_kana_RU) return "kana_RU";
+ if (k == XK_kana_RE) return "kana_RE";
+ if (k == XK_kana_RO) return "kana_RO";
+ if (k == XK_kana_WA) return "kana_WA";
+ if (k == XK_kana_N) return "kana_N";
+ if (k == XK_voicedsound) return "voicedsound";
+ if (k == XK_semivoicedsound) return "semivoicedsound";
+ if (k == XK_kana_switch) return "kana_switch";
+#endif /* XK_KATAKANA */
+#ifdef XK_ARABIC
+ if (k == XK_Arabic_comma) return "Arabic_comma";
+ if (k == XK_Arabic_semicolon) return "Arabic_semicolon";
+ if (k == XK_Arabic_question_mark) return "Arabic_question_mark";
+ if (k == XK_Arabic_hamza) return "Arabic_hamza";
+ if (k == XK_Arabic_maddaonalef) return "Arabic_maddaonalef";
+ if (k == XK_Arabic_hamzaonalef) return "Arabic_hamzaonalef";
+ if (k == XK_Arabic_hamzaonwaw) return "Arabic_hamzaonwaw";
+ if (k == XK_Arabic_hamzaunderalef) return "Arabic_hamzaunderalef";
+ if (k == XK_Arabic_hamzaonyeh) return "Arabic_hamzaonyeh";
+ if (k == XK_Arabic_alef) return "Arabic_alef";
+ if (k == XK_Arabic_beh) return "Arabic_beh";
+ if (k == XK_Arabic_tehmarbuta) return "Arabic_tehmarbuta";
+ if (k == XK_Arabic_teh) return "Arabic_teh";
+ if (k == XK_Arabic_theh) return "Arabic_theh";
+ if (k == XK_Arabic_jeem) return "Arabic_jeem";
+ if (k == XK_Arabic_hah) return "Arabic_hah";
+ if (k == XK_Arabic_khah) return "Arabic_khah";
+ if (k == XK_Arabic_dal) return "Arabic_dal";
+ if (k == XK_Arabic_thal) return "Arabic_thal";
+ if (k == XK_Arabic_ra) return "Arabic_ra";
+ if (k == XK_Arabic_zain) return "Arabic_zain";
+ if (k == XK_Arabic_seen) return "Arabic_seen";
+ if (k == XK_Arabic_sheen) return "Arabic_sheen";
+ if (k == XK_Arabic_sad) return "Arabic_sad";
+ if (k == XK_Arabic_dad) return "Arabic_dad";
+ if (k == XK_Arabic_tah) return "Arabic_tah";
+ if (k == XK_Arabic_zah) return "Arabic_zah";
+ if (k == XK_Arabic_ain) return "Arabic_ain";
+ if (k == XK_Arabic_ghain) return "Arabic_ghain";
+ if (k == XK_Arabic_tatweel) return "Arabic_tatweel";
+ if (k == XK_Arabic_feh) return "Arabic_feh";
+ if (k == XK_Arabic_qaf) return "Arabic_qaf";
+ if (k == XK_Arabic_kaf) return "Arabic_kaf";
+ if (k == XK_Arabic_lam) return "Arabic_lam";
+ if (k == XK_Arabic_meem) return "Arabic_meem";
+ if (k == XK_Arabic_noon) return "Arabic_noon";
+ if (k == XK_Arabic_ha) return "Arabic_ha";
+ if (k == XK_Arabic_heh) return "Arabic_heh";
+ if (k == XK_Arabic_waw) return "Arabic_waw";
+ if (k == XK_Arabic_alefmaksura) return "Arabic_alefmaksura";
+ if (k == XK_Arabic_yeh) return "Arabic_yeh";
+ if (k == XK_Arabic_fathatan) return "Arabic_fathatan";
+ if (k == XK_Arabic_dammatan) return "Arabic_dammatan";
+ if (k == XK_Arabic_kasratan) return "Arabic_kasratan";
+ if (k == XK_Arabic_fatha) return "Arabic_fatha";
+ if (k == XK_Arabic_damma) return "Arabic_damma";
+ if (k == XK_Arabic_kasra) return "Arabic_kasra";
+ if (k == XK_Arabic_shadda) return "Arabic_shadda";
+ if (k == XK_Arabic_sukun) return "Arabic_sukun";
+ if (k == XK_Arabic_switch) return "Arabic_switch";
+#endif /* XK_ARABIC */
+#ifdef XK_CYRILLIC
+ if (k == XK_Serbian_dje) return "Serbian_dje";
+ if (k == XK_Macedonia_gje) return "Macedonia_gje";
+ if (k == XK_Cyrillic_io) return "Cyrillic_io";
+ if (k == XK_Ukrainian_ie) return "Ukrainian_ie";
+ if (k == XK_Ukranian_je) return "Ukranian_je";
+ if (k == XK_Macedonia_dse) return "Macedonia_dse";
+ if (k == XK_Ukrainian_i) return "Ukrainian_i";
+ if (k == XK_Ukranian_i) return "Ukranian_i";
+ if (k == XK_Ukrainian_yi) return "Ukrainian_yi";
+ if (k == XK_Ukranian_yi) return "Ukranian_yi";
+ if (k == XK_Cyrillic_je) return "Cyrillic_je";
+ if (k == XK_Serbian_je) return "Serbian_je";
+ if (k == XK_Cyrillic_lje) return "Cyrillic_lje";
+ if (k == XK_Serbian_lje) return "Serbian_lje";
+ if (k == XK_Cyrillic_nje) return "Cyrillic_nje";
+ if (k == XK_Serbian_nje) return "Serbian_nje";
+ if (k == XK_Serbian_tshe) return "Serbian_tshe";
+ if (k == XK_Macedonia_kje) return "Macedonia_kje";
+ if (k == XK_Byelorussian_shortu) return "Byelorussian_shortu";
+ if (k == XK_Cyrillic_dzhe) return "Cyrillic_dzhe";
+ if (k == XK_Serbian_dze) return "Serbian_dze";
+ if (k == XK_numerosign) return "numerosign";
+ if (k == XK_Serbian_DJE) return "Serbian_DJE";
+ if (k == XK_Macedonia_GJE) return "Macedonia_GJE";
+ if (k == XK_Cyrillic_IO) return "Cyrillic_IO";
+ if (k == XK_Ukrainian_IE) return "Ukrainian_IE";
+ if (k == XK_Ukranian_JE) return "Ukranian_JE";
+ if (k == XK_Macedonia_DSE) return "Macedonia_DSE";
+ if (k == XK_Ukrainian_I) return "Ukrainian_I";
+ if (k == XK_Ukranian_I) return "Ukranian_I";
+ if (k == XK_Ukrainian_YI) return "Ukrainian_YI";
+ if (k == XK_Ukranian_YI) return "Ukranian_YI";
+ if (k == XK_Cyrillic_JE) return "Cyrillic_JE";
+ if (k == XK_Serbian_JE) return "Serbian_JE";
+ if (k == XK_Cyrillic_LJE) return "Cyrillic_LJE";
+ if (k == XK_Serbian_LJE) return "Serbian_LJE";
+ if (k == XK_Cyrillic_NJE) return "Cyrillic_NJE";
+ if (k == XK_Serbian_NJE) return "Serbian_NJE";
+ if (k == XK_Serbian_TSHE) return "Serbian_TSHE";
+ if (k == XK_Macedonia_KJE) return "Macedonia_KJE";
+ if (k == XK_Byelorussian_SHORTU) return "Byelorussian_SHORTU";
+ if (k == XK_Cyrillic_DZHE) return "Cyrillic_DZHE";
+ if (k == XK_Serbian_DZE) return "Serbian_DZE";
+ if (k == XK_Cyrillic_yu) return "Cyrillic_yu";
+ if (k == XK_Cyrillic_a) return "Cyrillic_a";
+ if (k == XK_Cyrillic_be) return "Cyrillic_be";
+ if (k == XK_Cyrillic_tse) return "Cyrillic_tse";
+ if (k == XK_Cyrillic_de) return "Cyrillic_de";
+ if (k == XK_Cyrillic_ie) return "Cyrillic_ie";
+ if (k == XK_Cyrillic_ef) return "Cyrillic_ef";
+ if (k == XK_Cyrillic_ghe) return "Cyrillic_ghe";
+ if (k == XK_Cyrillic_ha) return "Cyrillic_ha";
+ if (k == XK_Cyrillic_i) return "Cyrillic_i";
+ if (k == XK_Cyrillic_shorti) return "Cyrillic_shorti";
+ if (k == XK_Cyrillic_ka) return "Cyrillic_ka";
+ if (k == XK_Cyrillic_el) return "Cyrillic_el";
+ if (k == XK_Cyrillic_em) return "Cyrillic_em";
+ if (k == XK_Cyrillic_en) return "Cyrillic_en";
+ if (k == XK_Cyrillic_o) return "Cyrillic_o";
+ if (k == XK_Cyrillic_pe) return "Cyrillic_pe";
+ if (k == XK_Cyrillic_ya) return "Cyrillic_ya";
+ if (k == XK_Cyrillic_er) return "Cyrillic_er";
+ if (k == XK_Cyrillic_es) return "Cyrillic_es";
+ if (k == XK_Cyrillic_te) return "Cyrillic_te";
+ if (k == XK_Cyrillic_u) return "Cyrillic_u";
+ if (k == XK_Cyrillic_zhe) return "Cyrillic_zhe";
+ if (k == XK_Cyrillic_ve) return "Cyrillic_ve";
+ if (k == XK_Cyrillic_softsign) return "Cyrillic_softsign";
+ if (k == XK_Cyrillic_yeru) return "Cyrillic_yeru";
+ if (k == XK_Cyrillic_ze) return "Cyrillic_ze";
+ if (k == XK_Cyrillic_sha) return "Cyrillic_sha";
+ if (k == XK_Cyrillic_e) return "Cyrillic_e";
+ if (k == XK_Cyrillic_shcha) return "Cyrillic_shcha";
+ if (k == XK_Cyrillic_che) return "Cyrillic_che";
+ if (k == XK_Cyrillic_hardsign) return "Cyrillic_hardsign";
+ if (k == XK_Cyrillic_YU) return "Cyrillic_YU";
+ if (k == XK_Cyrillic_A) return "Cyrillic_A";
+ if (k == XK_Cyrillic_BE) return "Cyrillic_BE";
+ if (k == XK_Cyrillic_TSE) return "Cyrillic_TSE";
+ if (k == XK_Cyrillic_DE) return "Cyrillic_DE";
+ if (k == XK_Cyrillic_IE) return "Cyrillic_IE";
+ if (k == XK_Cyrillic_EF) return "Cyrillic_EF";
+ if (k == XK_Cyrillic_GHE) return "Cyrillic_GHE";
+ if (k == XK_Cyrillic_HA) return "Cyrillic_HA";
+ if (k == XK_Cyrillic_I) return "Cyrillic_I";
+ if (k == XK_Cyrillic_SHORTI) return "Cyrillic_SHORTI";
+ if (k == XK_Cyrillic_KA) return "Cyrillic_KA";
+ if (k == XK_Cyrillic_EL) return "Cyrillic_EL";
+ if (k == XK_Cyrillic_EM) return "Cyrillic_EM";
+ if (k == XK_Cyrillic_EN) return "Cyrillic_EN";
+ if (k == XK_Cyrillic_O) return "Cyrillic_O";
+ if (k == XK_Cyrillic_PE) return "Cyrillic_PE";
+ if (k == XK_Cyrillic_YA) return "Cyrillic_YA";
+ if (k == XK_Cyrillic_ER) return "Cyrillic_ER";
+ if (k == XK_Cyrillic_ES) return "Cyrillic_ES";
+ if (k == XK_Cyrillic_TE) return "Cyrillic_TE";
+ if (k == XK_Cyrillic_U) return "Cyrillic_U";
+ if (k == XK_Cyrillic_ZHE) return "Cyrillic_ZHE";
+ if (k == XK_Cyrillic_VE) return "Cyrillic_VE";
+ if (k == XK_Cyrillic_SOFTSIGN) return "Cyrillic_SOFTSIGN";
+ if (k == XK_Cyrillic_YERU) return "Cyrillic_YERU";
+ if (k == XK_Cyrillic_ZE) return "Cyrillic_ZE";
+ if (k == XK_Cyrillic_SHA) return "Cyrillic_SHA";
+ if (k == XK_Cyrillic_E) return "Cyrillic_E";
+ if (k == XK_Cyrillic_SHCHA) return "Cyrillic_SHCHA";
+ if (k == XK_Cyrillic_CHE) return "Cyrillic_CHE";
+ if (k == XK_Cyrillic_HARDSIGN) return "Cyrillic_HARDSIGN";
+#endif /* XK_CYRILLIC */
+#ifdef XK_GREEK
+ if (k == XK_Greek_ALPHAaccent) return "Greek_ALPHAaccent";
+ if (k == XK_Greek_EPSILONaccent) return "Greek_EPSILONaccent";
+ if (k == XK_Greek_ETAaccent) return "Greek_ETAaccent";
+ if (k == XK_Greek_IOTAaccent) return "Greek_IOTAaccent";
+ if (k == XK_Greek_IOTAdieresis) return "Greek_IOTAdieresis";
+ if (k == XK_Greek_OMICRONaccent) return "Greek_OMICRONaccent";
+ if (k == XK_Greek_UPSILONaccent) return "Greek_UPSILONaccent";
+ if (k == XK_Greek_UPSILONdieresis) return "Greek_UPSILONdieresis";
+ if (k == XK_Greek_OMEGAaccent) return "Greek_OMEGAaccent";
+ if (k == XK_Greek_accentdieresis) return "Greek_accentdieresis";
+ if (k == XK_Greek_horizbar) return "Greek_horizbar";
+ if (k == XK_Greek_alphaaccent) return "Greek_alphaaccent";
+ if (k == XK_Greek_epsilonaccent) return "Greek_epsilonaccent";
+ if (k == XK_Greek_etaaccent) return "Greek_etaaccent";
+ if (k == XK_Greek_iotaaccent) return "Greek_iotaaccent";
+ if (k == XK_Greek_iotadieresis) return "Greek_iotadieresis";
+ if (k == XK_Greek_iotaaccentdieresis) return "Greek_iotaaccentdieresis";
+ if (k == XK_Greek_omicronaccent) return "Greek_omicronaccent";
+ if (k == XK_Greek_upsilonaccent) return "Greek_upsilonaccent";
+ if (k == XK_Greek_upsilondieresis) return "Greek_upsilondieresis";
+ if (k == XK_Greek_upsilonaccentdieresis) return "Greek_upsilonaccentdieresis";
+ if (k == XK_Greek_omegaaccent) return "Greek_omegaaccent";
+ if (k == XK_Greek_ALPHA) return "Greek_ALPHA";
+ if (k == XK_Greek_BETA) return "Greek_BETA";
+ if (k == XK_Greek_GAMMA) return "Greek_GAMMA";
+ if (k == XK_Greek_DELTA) return "Greek_DELTA";
+ if (k == XK_Greek_EPSILON) return "Greek_EPSILON";
+ if (k == XK_Greek_ZETA) return "Greek_ZETA";
+ if (k == XK_Greek_ETA) return "Greek_ETA";
+ if (k == XK_Greek_THETA) return "Greek_THETA";
+ if (k == XK_Greek_IOTA) return "Greek_IOTA";
+ if (k == XK_Greek_KAPPA) return "Greek_KAPPA";
+ if (k == XK_Greek_LAMDA) return "Greek_LAMDA";
+ if (k == XK_Greek_LAMBDA) return "Greek_LAMBDA";
+ if (k == XK_Greek_MU) return "Greek_MU";
+ if (k == XK_Greek_NU) return "Greek_NU";
+ if (k == XK_Greek_XI) return "Greek_XI";
+ if (k == XK_Greek_OMICRON) return "Greek_OMICRON";
+ if (k == XK_Greek_PI) return "Greek_PI";
+ if (k == XK_Greek_RHO) return "Greek_RHO";
+ if (k == XK_Greek_SIGMA) return "Greek_SIGMA";
+ if (k == XK_Greek_TAU) return "Greek_TAU";
+ if (k == XK_Greek_UPSILON) return "Greek_UPSILON";
+ if (k == XK_Greek_PHI) return "Greek_PHI";
+ if (k == XK_Greek_CHI) return "Greek_CHI";
+ if (k == XK_Greek_PSI) return "Greek_PSI";
+ if (k == XK_Greek_OMEGA) return "Greek_OMEGA";
+ if (k == XK_Greek_alpha) return "Greek_alpha";
+ if (k == XK_Greek_beta) return "Greek_beta";
+ if (k == XK_Greek_gamma) return "Greek_gamma";
+ if (k == XK_Greek_delta) return "Greek_delta";
+ if (k == XK_Greek_epsilon) return "Greek_epsilon";
+ if (k == XK_Greek_zeta) return "Greek_zeta";
+ if (k == XK_Greek_eta) return "Greek_eta";
+ if (k == XK_Greek_theta) return "Greek_theta";
+ if (k == XK_Greek_iota) return "Greek_iota";
+ if (k == XK_Greek_kappa) return "Greek_kappa";
+ if (k == XK_Greek_lamda) return "Greek_lamda";
+ if (k == XK_Greek_lambda) return "Greek_lambda";
+ if (k == XK_Greek_mu) return "Greek_mu";
+ if (k == XK_Greek_nu) return "Greek_nu";
+ if (k == XK_Greek_xi) return "Greek_xi";
+ if (k == XK_Greek_omicron) return "Greek_omicron";
+ if (k == XK_Greek_pi) return "Greek_pi";
+ if (k == XK_Greek_rho) return "Greek_rho";
+ if (k == XK_Greek_sigma) return "Greek_sigma";
+ if (k == XK_Greek_finalsmallsigma) return "Greek_finalsmallsigma";
+ if (k == XK_Greek_tau) return "Greek_tau";
+ if (k == XK_Greek_upsilon) return "Greek_upsilon";
+ if (k == XK_Greek_phi) return "Greek_phi";
+ if (k == XK_Greek_chi) return "Greek_chi";
+ if (k == XK_Greek_psi) return "Greek_psi";
+ if (k == XK_Greek_omega) return "Greek_omega";
+ if (k == XK_Greek_switch) return "Greek_switch";
+#endif /* XK_GREEK */
+#ifdef XK_TECHNICAL
+ if (k == XK_leftradical) return "leftradical";
+ if (k == XK_topleftradical) return "topleftradical";
+ if (k == XK_horizconnector) return "horizconnector";
+ if (k == XK_topintegral) return "topintegral";
+ if (k == XK_botintegral) return "botintegral";
+ if (k == XK_vertconnector) return "vertconnector";
+ if (k == XK_topleftsqbracket) return "topleftsqbracket";
+ if (k == XK_botleftsqbracket) return "botleftsqbracket";
+ if (k == XK_toprightsqbracket) return "toprightsqbracket";
+ if (k == XK_botrightsqbracket) return "botrightsqbracket";
+ if (k == XK_topleftparens) return "topleftparens";
+ if (k == XK_botleftparens) return "botleftparens";
+ if (k == XK_toprightparens) return "toprightparens";
+ if (k == XK_botrightparens) return "botrightparens";
+ if (k == XK_leftmiddlecurlybrace) return "leftmiddlecurlybrace";
+ if (k == XK_rightmiddlecurlybrace) return "rightmiddlecurlybrace";
+ if (k == XK_topleftsummation) return "topleftsummation";
+ if (k == XK_botleftsummation) return "botleftsummation";
+ if (k == XK_topvertsummationconnector) return "topvertsummationconnector";
+ if (k == XK_botvertsummationconnector) return "botvertsummationconnector";
+ if (k == XK_toprightsummation) return "toprightsummation";
+ if (k == XK_botrightsummation) return "botrightsummation";
+ if (k == XK_rightmiddlesummation) return "rightmiddlesummation";
+ if (k == XK_lessthanequal) return "lessthanequal";
+ if (k == XK_notequal) return "notequal";
+ if (k == XK_greaterthanequal) return "greaterthanequal";
+ if (k == XK_integral) return "integral";
+ if (k == XK_therefore) return "therefore";
+ if (k == XK_variation) return "variation";
+ if (k == XK_infinity) return "infinity";
+ if (k == XK_nabla) return "nabla";
+ if (k == XK_approximate) return "approximate";
+ if (k == XK_similarequal) return "similarequal";
+ if (k == XK_ifonlyif) return "ifonlyif";
+ if (k == XK_implies) return "implies";
+ if (k == XK_identical) return "identical";
+ if (k == XK_radical) return "radical";
+ if (k == XK_includedin) return "includedin";
+ if (k == XK_includes) return "includes";
+ if (k == XK_intersection) return "intersection";
+ if (k == XK_union) return "union";
+ if (k == XK_logicaland) return "logicaland";
+ if (k == XK_logicalor) return "logicalor";
+ if (k == XK_partialderivative) return "partialderivative";
+ if (k == XK_function) return "function";
+ if (k == XK_leftarrow) return "leftarrow";
+ if (k == XK_uparrow) return "uparrow";
+ if (k == XK_rightarrow) return "rightarrow";
+ if (k == XK_downarrow) return "downarrow";
+#endif /* XK_TECHNICAL */
+#ifdef XK_SPECIAL
+ if (k == XK_blank) return "blank";
+ if (k == XK_soliddiamond) return "soliddiamond";
+ if (k == XK_checkerboard) return "checkerboard";
+ if (k == XK_ht) return "ht";
+ if (k == XK_ff) return "ff";
+ if (k == XK_cr) return "cr";
+ if (k == XK_lf) return "lf";
+ if (k == XK_nl) return "nl";
+ if (k == XK_vt) return "vt";
+ if (k == XK_lowrightcorner) return "lowrightcorner";
+ if (k == XK_uprightcorner) return "uprightcorner";
+ if (k == XK_upleftcorner) return "upleftcorner";
+ if (k == XK_lowleftcorner) return "lowleftcorner";
+ if (k == XK_crossinglines) return "crossinglines";
+ if (k == XK_horizlinescan1) return "horizlinescan1";
+ if (k == XK_horizlinescan3) return "horizlinescan3";
+ if (k == XK_horizlinescan5) return "horizlinescan5";
+ if (k == XK_horizlinescan7) return "horizlinescan7";
+ if (k == XK_horizlinescan9) return "horizlinescan9";
+ if (k == XK_leftt) return "leftt";
+ if (k == XK_rightt) return "rightt";
+ if (k == XK_bott) return "bott";
+ if (k == XK_topt) return "topt";
+ if (k == XK_vertbar) return "vertbar";
+#endif /* XK_SPECIAL */
+#ifdef XK_PUBLISHING
+ if (k == XK_emspace) return "emspace";
+ if (k == XK_enspace) return "enspace";
+ if (k == XK_em3space) return "em3space";
+ if (k == XK_em4space) return "em4space";
+ if (k == XK_digitspace) return "digitspace";
+ if (k == XK_punctspace) return "punctspace";
+ if (k == XK_thinspace) return "thinspace";
+ if (k == XK_hairspace) return "hairspace";
+ if (k == XK_emdash) return "emdash";
+ if (k == XK_endash) return "endash";
+ if (k == XK_signifblank) return "signifblank";
+ if (k == XK_ellipsis) return "ellipsis";
+ if (k == XK_doubbaselinedot) return "doubbaselinedot";
+ if (k == XK_onethird) return "onethird";
+ if (k == XK_twothirds) return "twothirds";
+ if (k == XK_onefifth) return "onefifth";
+ if (k == XK_twofifths) return "twofifths";
+ if (k == XK_threefifths) return "threefifths";
+ if (k == XK_fourfifths) return "fourfifths";
+ if (k == XK_onesixth) return "onesixth";
+ if (k == XK_fivesixths) return "fivesixths";
+ if (k == XK_careof) return "careof";
+ if (k == XK_figdash) return "figdash";
+ if (k == XK_leftanglebracket) return "leftanglebracket";
+ if (k == XK_decimalpoint) return "decimalpoint";
+ if (k == XK_rightanglebracket) return "rightanglebracket";
+ if (k == XK_marker) return "marker";
+ if (k == XK_oneeighth) return "oneeighth";
+ if (k == XK_threeeighths) return "threeeighths";
+ if (k == XK_fiveeighths) return "fiveeighths";
+ if (k == XK_seveneighths) return "seveneighths";
+ if (k == XK_trademark) return "trademark";
+ if (k == XK_signaturemark) return "signaturemark";
+ if (k == XK_trademarkincircle) return "trademarkincircle";
+ if (k == XK_leftopentriangle) return "leftopentriangle";
+ if (k == XK_rightopentriangle) return "rightopentriangle";
+ if (k == XK_emopencircle) return "emopencircle";
+ if (k == XK_emopenrectangle) return "emopenrectangle";
+ if (k == XK_leftsinglequotemark) return "leftsinglequotemark";
+ if (k == XK_rightsinglequotemark) return "rightsinglequotemark";
+ if (k == XK_leftdoublequotemark) return "leftdoublequotemark";
+ if (k == XK_rightdoublequotemark) return "rightdoublequotemark";
+ if (k == XK_prescription) return "prescription";
+ if (k == XK_minutes) return "minutes";
+ if (k == XK_seconds) return "seconds";
+ if (k == XK_latincross) return "latincross";
+ if (k == XK_hexagram) return "hexagram";
+ if (k == XK_filledrectbullet) return "filledrectbullet";
+ if (k == XK_filledlefttribullet) return "filledlefttribullet";
+ if (k == XK_filledrighttribullet) return "filledrighttribullet";
+ if (k == XK_emfilledcircle) return "emfilledcircle";
+ if (k == XK_emfilledrect) return "emfilledrect";
+ if (k == XK_enopencircbullet) return "enopencircbullet";
+ if (k == XK_enopensquarebullet) return "enopensquarebullet";
+ if (k == XK_openrectbullet) return "openrectbullet";
+ if (k == XK_opentribulletup) return "opentribulletup";
+ if (k == XK_opentribulletdown) return "opentribulletdown";
+ if (k == XK_openstar) return "openstar";
+ if (k == XK_enfilledcircbullet) return "enfilledcircbullet";
+ if (k == XK_enfilledsqbullet) return "enfilledsqbullet";
+ if (k == XK_filledtribulletup) return "filledtribulletup";
+ if (k == XK_filledtribulletdown) return "filledtribulletdown";
+ if (k == XK_leftpointer) return "leftpointer";
+ if (k == XK_rightpointer) return "rightpointer";
+ if (k == XK_club) return "club";
+ if (k == XK_diamond) return "diamond";
+ if (k == XK_heart) return "heart";
+ if (k == XK_maltesecross) return "maltesecross";
+ if (k == XK_dagger) return "dagger";
+ if (k == XK_doubledagger) return "doubledagger";
+ if (k == XK_checkmark) return "checkmark";
+ if (k == XK_ballotcross) return "ballotcross";
+ if (k == XK_musicalsharp) return "musicalsharp";
+ if (k == XK_musicalflat) return "musicalflat";
+ if (k == XK_malesymbol) return "malesymbol";
+ if (k == XK_femalesymbol) return "femalesymbol";
+ if (k == XK_telephone) return "telephone";
+ if (k == XK_telephonerecorder) return "telephonerecorder";
+ if (k == XK_phonographcopyright) return "phonographcopyright";
+ if (k == XK_caret) return "caret";
+ if (k == XK_singlelowquotemark) return "singlelowquotemark";
+ if (k == XK_doublelowquotemark) return "doublelowquotemark";
+ if (k == XK_cursor) return "cursor";
+#endif /* XK_PUBLISHING */
+#ifdef XK_APL
+ if (k == XK_leftcaret) return "leftcaret";
+ if (k == XK_rightcaret) return "rightcaret";
+ if (k == XK_downcaret) return "downcaret";
+ if (k == XK_upcaret) return "upcaret";
+ if (k == XK_overbar) return "overbar";
+ if (k == XK_downtack) return "downtack";
+ if (k == XK_upshoe) return "upshoe";
+ if (k == XK_downstile) return "downstile";
+ if (k == XK_underbar) return "underbar";
+ if (k == XK_jot) return "jot";
+ if (k == XK_quad) return "quad";
+ if (k == XK_uptack) return "uptack";
+ if (k == XK_circle) return "circle";
+ if (k == XK_upstile) return "upstile";
+ if (k == XK_downshoe) return "downshoe";
+ if (k == XK_rightshoe) return "rightshoe";
+ if (k == XK_leftshoe) return "leftshoe";
+ if (k == XK_lefttack) return "lefttack";
+ if (k == XK_righttack) return "righttack";
+#endif /* XK_APL */
+#ifdef XK_HEBREW
+ if (k == XK_hebrew_doublelowline) return "hebrew_doublelowline";
+ if (k == XK_hebrew_aleph) return "hebrew_aleph";
+ if (k == XK_hebrew_bet) return "hebrew_bet";
+ if (k == XK_hebrew_beth) return "hebrew_beth";
+ if (k == XK_hebrew_gimel) return "hebrew_gimel";
+ if (k == XK_hebrew_gimmel) return "hebrew_gimmel";
+ if (k == XK_hebrew_dalet) return "hebrew_dalet";
+ if (k == XK_hebrew_daleth) return "hebrew_daleth";
+ if (k == XK_hebrew_he) return "hebrew_he";
+ if (k == XK_hebrew_waw) return "hebrew_waw";
+ if (k == XK_hebrew_zain) return "hebrew_zain";
+ if (k == XK_hebrew_zayin) return "hebrew_zayin";
+ if (k == XK_hebrew_chet) return "hebrew_chet";
+ if (k == XK_hebrew_het) return "hebrew_het";
+ if (k == XK_hebrew_tet) return "hebrew_tet";
+ if (k == XK_hebrew_teth) return "hebrew_teth";
+ if (k == XK_hebrew_yod) return "hebrew_yod";
+ if (k == XK_hebrew_finalkaph) return "hebrew_finalkaph";
+ if (k == XK_hebrew_kaph) return "hebrew_kaph";
+ if (k == XK_hebrew_lamed) return "hebrew_lamed";
+ if (k == XK_hebrew_finalmem) return "hebrew_finalmem";
+ if (k == XK_hebrew_mem) return "hebrew_mem";
+ if (k == XK_hebrew_finalnun) return "hebrew_finalnun";
+ if (k == XK_hebrew_nun) return "hebrew_nun";
+ if (k == XK_hebrew_samech) return "hebrew_samech";
+ if (k == XK_hebrew_samekh) return "hebrew_samekh";
+ if (k == XK_hebrew_ayin) return "hebrew_ayin";
+ if (k == XK_hebrew_finalpe) return "hebrew_finalpe";
+ if (k == XK_hebrew_pe) return "hebrew_pe";
+ if (k == XK_hebrew_finalzade) return "hebrew_finalzade";
+ if (k == XK_hebrew_finalzadi) return "hebrew_finalzadi";
+ if (k == XK_hebrew_zade) return "hebrew_zade";
+ if (k == XK_hebrew_zadi) return "hebrew_zadi";
+ if (k == XK_hebrew_qoph) return "hebrew_qoph";
+ if (k == XK_hebrew_kuf) return "hebrew_kuf";
+ if (k == XK_hebrew_resh) return "hebrew_resh";
+ if (k == XK_hebrew_shin) return "hebrew_shin";
+ if (k == XK_hebrew_taw) return "hebrew_taw";
+ if (k == XK_hebrew_taf) return "hebrew_taf";
+ if (k == XK_Hebrew_switch) return "Hebrew_switch";
+#endif /* XK_HEBREW */
+#ifdef XK_THAI
+ if (k == XK_Thai_kokai) return "Thai_kokai";
+ if (k == XK_Thai_khokhai) return "Thai_khokhai";
+ if (k == XK_Thai_khokhuat) return "Thai_khokhuat";
+ if (k == XK_Thai_khokhwai) return "Thai_khokhwai";
+ if (k == XK_Thai_khokhon) return "Thai_khokhon";
+ if (k == XK_Thai_khorakhang) return "Thai_khorakhang";
+ if (k == XK_Thai_ngongu) return "Thai_ngongu";
+ if (k == XK_Thai_chochan) return "Thai_chochan";
+ if (k == XK_Thai_choching) return "Thai_choching";
+ if (k == XK_Thai_chochang) return "Thai_chochang";
+ if (k == XK_Thai_soso) return "Thai_soso";
+ if (k == XK_Thai_chochoe) return "Thai_chochoe";
+ if (k == XK_Thai_yoying) return "Thai_yoying";
+ if (k == XK_Thai_dochada) return "Thai_dochada";
+ if (k == XK_Thai_topatak) return "Thai_topatak";
+ if (k == XK_Thai_thothan) return "Thai_thothan";
+ if (k == XK_Thai_thonangmontho) return "Thai_thonangmontho";
+ if (k == XK_Thai_thophuthao) return "Thai_thophuthao";
+ if (k == XK_Thai_nonen) return "Thai_nonen";
+ if (k == XK_Thai_dodek) return "Thai_dodek";
+ if (k == XK_Thai_totao) return "Thai_totao";
+ if (k == XK_Thai_thothung) return "Thai_thothung";
+ if (k == XK_Thai_thothahan) return "Thai_thothahan";
+ if (k == XK_Thai_thothong) return "Thai_thothong";
+ if (k == XK_Thai_nonu) return "Thai_nonu";
+ if (k == XK_Thai_bobaimai) return "Thai_bobaimai";
+ if (k == XK_Thai_popla) return "Thai_popla";
+ if (k == XK_Thai_phophung) return "Thai_phophung";
+ if (k == XK_Thai_fofa) return "Thai_fofa";
+ if (k == XK_Thai_phophan) return "Thai_phophan";
+ if (k == XK_Thai_fofan) return "Thai_fofan";
+ if (k == XK_Thai_phosamphao) return "Thai_phosamphao";
+ if (k == XK_Thai_moma) return "Thai_moma";
+ if (k == XK_Thai_yoyak) return "Thai_yoyak";
+ if (k == XK_Thai_rorua) return "Thai_rorua";
+ if (k == XK_Thai_ru) return "Thai_ru";
+ if (k == XK_Thai_loling) return "Thai_loling";
+ if (k == XK_Thai_lu) return "Thai_lu";
+ if (k == XK_Thai_wowaen) return "Thai_wowaen";
+ if (k == XK_Thai_sosala) return "Thai_sosala";
+ if (k == XK_Thai_sorusi) return "Thai_sorusi";
+ if (k == XK_Thai_sosua) return "Thai_sosua";
+ if (k == XK_Thai_hohip) return "Thai_hohip";
+ if (k == XK_Thai_lochula) return "Thai_lochula";
+ if (k == XK_Thai_oang) return "Thai_oang";
+ if (k == XK_Thai_honokhuk) return "Thai_honokhuk";
+ if (k == XK_Thai_paiyannoi) return "Thai_paiyannoi";
+ if (k == XK_Thai_saraa) return "Thai_saraa";
+ if (k == XK_Thai_maihanakat) return "Thai_maihanakat";
+ if (k == XK_Thai_saraaa) return "Thai_saraaa";
+ if (k == XK_Thai_saraam) return "Thai_saraam";
+ if (k == XK_Thai_sarai) return "Thai_sarai";
+ if (k == XK_Thai_saraii) return "Thai_saraii";
+ if (k == XK_Thai_saraue) return "Thai_saraue";
+ if (k == XK_Thai_sarauee) return "Thai_sarauee";
+ if (k == XK_Thai_sarau) return "Thai_sarau";
+ if (k == XK_Thai_sarauu) return "Thai_sarauu";
+ if (k == XK_Thai_phinthu) return "Thai_phinthu";
+ if (k == XK_Thai_maihanakat_maitho) return "Thai_maihanakat_maitho";
+ if (k == XK_Thai_baht) return "Thai_baht";
+ if (k == XK_Thai_sarae) return "Thai_sarae";
+ if (k == XK_Thai_saraae) return "Thai_saraae";
+ if (k == XK_Thai_sarao) return "Thai_sarao";
+ if (k == XK_Thai_saraaimaimuan) return "Thai_saraaimaimuan";
+ if (k == XK_Thai_saraaimaimalai) return "Thai_saraaimaimalai";
+ if (k == XK_Thai_lakkhangyao) return "Thai_lakkhangyao";
+ if (k == XK_Thai_maiyamok) return "Thai_maiyamok";
+ if (k == XK_Thai_maitaikhu) return "Thai_maitaikhu";
+ if (k == XK_Thai_maiek) return "Thai_maiek";
+ if (k == XK_Thai_maitho) return "Thai_maitho";
+ if (k == XK_Thai_maitri) return "Thai_maitri";
+ if (k == XK_Thai_maichattawa) return "Thai_maichattawa";
+ if (k == XK_Thai_thanthakhat) return "Thai_thanthakhat";
+ if (k == XK_Thai_nikhahit) return "Thai_nikhahit";
+ if (k == XK_Thai_leksun) return "Thai_leksun";
+ if (k == XK_Thai_leknung) return "Thai_leknung";
+ if (k == XK_Thai_leksong) return "Thai_leksong";
+ if (k == XK_Thai_leksam) return "Thai_leksam";
+ if (k == XK_Thai_leksi) return "Thai_leksi";
+ if (k == XK_Thai_lekha) return "Thai_lekha";
+ if (k == XK_Thai_lekhok) return "Thai_lekhok";
+ if (k == XK_Thai_lekchet) return "Thai_lekchet";
+ if (k == XK_Thai_lekpaet) return "Thai_lekpaet";
+ if (k == XK_Thai_lekkao) return "Thai_lekkao";
+#endif /* XK_THAI */
+#ifdef XK_KOREAN
+ if (k == XK_Hangul) return "Hangul";
+ if (k == XK_Hangul_Start) return "Hangul_Start";
+ if (k == XK_Hangul_End) return "Hangul_End";
+ if (k == XK_Hangul_Hanja) return "Hangul_Hanja";
+ if (k == XK_Hangul_Jamo) return "Hangul_Jamo";
+ if (k == XK_Hangul_Romaja) return "Hangul_Romaja";
+ if (k == XK_Hangul_Codeinput) return "Hangul_Codeinput";
+ if (k == XK_Hangul_Jeonja) return "Hangul_Jeonja";
+ if (k == XK_Hangul_Banja) return "Hangul_Banja";
+ if (k == XK_Hangul_PreHanja) return "Hangul_PreHanja";
+ if (k == XK_Hangul_PostHanja) return "Hangul_PostHanja";
+ if (k == XK_Hangul_SingleCandidate) return "Hangul_SingleCandidate";
+ if (k == XK_Hangul_MultipleCandidate) return "Hangul_MultipleCandidate";
+ if (k == XK_Hangul_PreviousCandidate) return "Hangul_PreviousCandidate";
+ if (k == XK_Hangul_Special) return "Hangul_Special";
+ if (k == XK_Hangul_switch) return "Hangul_switch";
+ if (k == XK_Hangul_Kiyeog) return "Hangul_Kiyeog";
+ if (k == XK_Hangul_SsangKiyeog) return "Hangul_SsangKiyeog";
+ if (k == XK_Hangul_KiyeogSios) return "Hangul_KiyeogSios";
+ if (k == XK_Hangul_Nieun) return "Hangul_Nieun";
+ if (k == XK_Hangul_NieunJieuj) return "Hangul_NieunJieuj";
+ if (k == XK_Hangul_NieunHieuh) return "Hangul_NieunHieuh";
+ if (k == XK_Hangul_Dikeud) return "Hangul_Dikeud";
+ if (k == XK_Hangul_SsangDikeud) return "Hangul_SsangDikeud";
+ if (k == XK_Hangul_Rieul) return "Hangul_Rieul";
+ if (k == XK_Hangul_RieulKiyeog) return "Hangul_RieulKiyeog";
+ if (k == XK_Hangul_RieulMieum) return "Hangul_RieulMieum";
+ if (k == XK_Hangul_RieulPieub) return "Hangul_RieulPieub";
+ if (k == XK_Hangul_RieulSios) return "Hangul_RieulSios";
+ if (k == XK_Hangul_RieulTieut) return "Hangul_RieulTieut";
+ if (k == XK_Hangul_RieulPhieuf) return "Hangul_RieulPhieuf";
+ if (k == XK_Hangul_RieulHieuh) return "Hangul_RieulHieuh";
+ if (k == XK_Hangul_Mieum) return "Hangul_Mieum";
+ if (k == XK_Hangul_Pieub) return "Hangul_Pieub";
+ if (k == XK_Hangul_SsangPieub) return "Hangul_SsangPieub";
+ if (k == XK_Hangul_PieubSios) return "Hangul_PieubSios";
+ if (k == XK_Hangul_Sios) return "Hangul_Sios";
+ if (k == XK_Hangul_SsangSios) return "Hangul_SsangSios";
+ if (k == XK_Hangul_Ieung) return "Hangul_Ieung";
+ if (k == XK_Hangul_Jieuj) return "Hangul_Jieuj";
+ if (k == XK_Hangul_SsangJieuj) return "Hangul_SsangJieuj";
+ if (k == XK_Hangul_Cieuc) return "Hangul_Cieuc";
+ if (k == XK_Hangul_Khieuq) return "Hangul_Khieuq";
+ if (k == XK_Hangul_Tieut) return "Hangul_Tieut";
+ if (k == XK_Hangul_Phieuf) return "Hangul_Phieuf";
+ if (k == XK_Hangul_Hieuh) return "Hangul_Hieuh";
+ if (k == XK_Hangul_A) return "Hangul_A";
+ if (k == XK_Hangul_AE) return "Hangul_AE";
+ if (k == XK_Hangul_YA) return "Hangul_YA";
+ if (k == XK_Hangul_YAE) return "Hangul_YAE";
+ if (k == XK_Hangul_EO) return "Hangul_EO";
+ if (k == XK_Hangul_E) return "Hangul_E";
+ if (k == XK_Hangul_YEO) return "Hangul_YEO";
+ if (k == XK_Hangul_YE) return "Hangul_YE";
+ if (k == XK_Hangul_O) return "Hangul_O";
+ if (k == XK_Hangul_WA) return "Hangul_WA";
+ if (k == XK_Hangul_WAE) return "Hangul_WAE";
+ if (k == XK_Hangul_OE) return "Hangul_OE";
+ if (k == XK_Hangul_YO) return "Hangul_YO";
+ if (k == XK_Hangul_U) return "Hangul_U";
+ if (k == XK_Hangul_WEO) return "Hangul_WEO";
+ if (k == XK_Hangul_WE) return "Hangul_WE";
+ if (k == XK_Hangul_WI) return "Hangul_WI";
+ if (k == XK_Hangul_YU) return "Hangul_YU";
+ if (k == XK_Hangul_EU) return "Hangul_EU";
+ if (k == XK_Hangul_YI) return "Hangul_YI";
+ if (k == XK_Hangul_I) return "Hangul_I";
+ if (k == XK_Hangul_J_Kiyeog) return "Hangul_J_Kiyeog";
+ if (k == XK_Hangul_J_SsangKiyeog) return "Hangul_J_SsangKiyeog";
+ if (k == XK_Hangul_J_KiyeogSios) return "Hangul_J_KiyeogSios";
+ if (k == XK_Hangul_J_Nieun) return "Hangul_J_Nieun";
+ if (k == XK_Hangul_J_NieunJieuj) return "Hangul_J_NieunJieuj";
+ if (k == XK_Hangul_J_NieunHieuh) return "Hangul_J_NieunHieuh";
+ if (k == XK_Hangul_J_Dikeud) return "Hangul_J_Dikeud";
+ if (k == XK_Hangul_J_Rieul) return "Hangul_J_Rieul";
+ if (k == XK_Hangul_J_RieulKiyeog) return "Hangul_J_RieulKiyeog";
+ if (k == XK_Hangul_J_RieulMieum) return "Hangul_J_RieulMieum";
+ if (k == XK_Hangul_J_RieulPieub) return "Hangul_J_RieulPieub";
+ if (k == XK_Hangul_J_RieulSios) return "Hangul_J_RieulSios";
+ if (k == XK_Hangul_J_RieulTieut) return "Hangul_J_RieulTieut";
+ if (k == XK_Hangul_J_RieulPhieuf) return "Hangul_J_RieulPhieuf";
+ if (k == XK_Hangul_J_RieulHieuh) return "Hangul_J_RieulHieuh";
+ if (k == XK_Hangul_J_Mieum) return "Hangul_J_Mieum";
+ if (k == XK_Hangul_J_Pieub) return "Hangul_J_Pieub";
+ if (k == XK_Hangul_J_PieubSios) return "Hangul_J_PieubSios";
+ if (k == XK_Hangul_J_Sios) return "Hangul_J_Sios";
+ if (k == XK_Hangul_J_SsangSios) return "Hangul_J_SsangSios";
+ if (k == XK_Hangul_J_Ieung) return "Hangul_J_Ieung";
+ if (k == XK_Hangul_J_Jieuj) return "Hangul_J_Jieuj";
+ if (k == XK_Hangul_J_Cieuc) return "Hangul_J_Cieuc";
+ if (k == XK_Hangul_J_Khieuq) return "Hangul_J_Khieuq";
+ if (k == XK_Hangul_J_Tieut) return "Hangul_J_Tieut";
+ if (k == XK_Hangul_J_Phieuf) return "Hangul_J_Phieuf";
+ if (k == XK_Hangul_J_Hieuh) return "Hangul_J_Hieuh";
+ if (k == XK_Hangul_RieulYeorinHieuh) return "Hangul_RieulYeorinHieuh";
+ if (k == XK_Hangul_SunkyeongeumMieum) return "Hangul_SunkyeongeumMieum";
+ if (k == XK_Hangul_SunkyeongeumPieub) return "Hangul_SunkyeongeumPieub";
+ if (k == XK_Hangul_PanSios) return "Hangul_PanSios";
+ if (k == XK_Hangul_KkogjiDalrinIeung) return "Hangul_KkogjiDalrinIeung";
+ if (k == XK_Hangul_SunkyeongeumPhieuf) return "Hangul_SunkyeongeumPhieuf";
+ if (k == XK_Hangul_YeorinHieuh) return "Hangul_YeorinHieuh";
+ if (k == XK_Hangul_AraeA) return "Hangul_AraeA";
+ if (k == XK_Hangul_AraeAE) return "Hangul_AraeAE";
+ if (k == XK_Hangul_J_PanSios) return "Hangul_J_PanSios";
+ if (k == XK_Hangul_J_KkogjiDalrinIeung) return "Hangul_J_KkogjiDalrinIeung";
+ if (k == XK_Hangul_J_YeorinHieuh) return "Hangul_J_YeorinHieuh";
+ if (k == XK_Korean_Won) return "Korean_Won";
+#endif /* XK_KOREAN */
+ if (k == XK_EuroSign) return "EuroSign";
+#endif
+ return NULL;
+}
+
+KeySym XKeycodeToKeysym(Display *display, KeyCode keycode, int index) {
+ return NoSymbol;
+}
+
+KeyCode XKeysymToKeycode(Display *display, KeySym keysym) {
+ return NoSymbol;
+}
+
+XErrorHandler XSetErrorHandler (XErrorHandler h) {
+ return h;
+}
+
diff --git a/x11vnc/pointer.c b/x11vnc/pointer.c
index 7e5b881..81581d1 100644
--- a/x11vnc/pointer.c
+++ b/x11vnc/pointer.c
@@ -13,6 +13,7 @@
#include "unixpw.h"
#include "v4l.h"
#include "linuxfb.h"
+#include "uinput.h"
int pointer_queued_sent = 0;
@@ -54,6 +55,9 @@ static void buttonparse(int from, char **s) {
int to, i;
int modisdown[256];
+#if NO_X11
+ return;
+#else
q = *s;
for (i=0; i<256; i++) {
@@ -201,6 +205,7 @@ static void buttonparse(int from, char **s) {
/* advance the source pointer position */
(*s)++;
}
+#endif /* NO_X11 */
}
/*
@@ -216,6 +221,9 @@ void initialize_pointer_map(char *pointer_remap) {
* from -buttonmap option.
*/
+#if NO_X11
+ return;
+#else
if (!raw_fb_str) {
X_LOCK;
num_buttons = XGetPointerMapping(dpy, map, MAX_BUTTONS);
@@ -282,6 +290,7 @@ void initialize_pointer_map(char *pointer_remap) {
}
free(remap);
}
+#endif /* NO_X11 */
}
/*
@@ -291,6 +300,9 @@ static void update_x11_pointer_position(int x, int y) {
int rc;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
X_LOCK;
if (use_xwarppointer) {
@@ -321,11 +333,15 @@ static void update_x11_pointer_position(int x, int y) {
cursor_changes += rc;
last_event = last_input = last_pointer_input = time(NULL);
+#endif /* NO_X11 */
}
void do_button_mask_change(int mask, int button) {
int mb, k, i = button-1;
+#if NO_X11
+ return;
+#else
/*
* this expands to any pointer_map button -> keystrokes
* remappings. Usually just k=0 and we send one button event.
@@ -383,6 +399,7 @@ void do_button_mask_change(int mask, int button) {
}
}
}
+#endif /* NO_X11 */
}
/*
@@ -394,6 +411,9 @@ static void update_x11_pointer_mask(int mask) {
last_event = last_input = last_pointer_input = time(NULL);
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
if (mask != button_mask) {
last_pointer_click_time = dnow();
@@ -508,6 +528,7 @@ if (debug_scroll > 1) fprintf(stderr, "internal scrollbar: %dx%d\n", w, h);
*/
button_mask_prev = button_mask;
button_mask = mask;
+#endif /* NO_X11 */
}
/* for -pipeinput */
diff --git a/x11vnc/remote.c b/x11vnc/remote.c
index a090d49..d1ef26a 100644
--- a/x11vnc/remote.c
+++ b/x11vnc/remote.c
@@ -492,6 +492,9 @@ static void reset_rfbport(int old, int new) {
int remote_control_access_ok(void) {
struct stat sbuf;
+#if NO_X11
+ return 0;
+#else
if (client_connect_file) {
if (stat(client_connect_file, &sbuf) == 0) {
if (sbuf.st_mode & S_IWOTH) {
@@ -614,6 +617,7 @@ int remote_control_access_ok(void) {
}
return 1;
+#endif /* NO_X11 */
}
static int hack_val = 0;
@@ -3082,9 +3086,11 @@ char *process_remote_cmd(char *cmd, int stringonly) {
}
grab_kbd = 0;
if (orig && dpy) {
+#if !NO_X11
X_LOCK;
XUngrabKeyboard(dpy, CurrentTime);
X_UNLOCK;
+#endif
}
rfbLog("disabled grab_kbd\n");
} else if (!strcmp(p, "grabptr")) {
@@ -3102,9 +3108,11 @@ char *process_remote_cmd(char *cmd, int stringonly) {
}
grab_ptr = 0;
if (orig && dpy) {
+#if !NO_X11
X_LOCK;
XUngrabPointer(dpy, CurrentTime);
X_UNLOCK;
+#endif
}
rfbLog("disabled grab_ptr\n");
diff --git a/x11vnc/screen.c b/x11vnc/screen.c
index 6cc0f0a..1c21ed3 100644
--- a/x11vnc/screen.c
+++ b/x11vnc/screen.c
@@ -168,6 +168,9 @@ if (0) fprintf(stderr, "unset_colormap: %d\n", reset);
}
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
X_LOCK;
@@ -274,6 +277,7 @@ if (0) fprintf(stderr, "unset_colormap: %d\n", reset);
}
init = 0;
+#endif /* NO_X11 */
}
static void debug_colormap(XImage *fb) {
@@ -336,6 +340,9 @@ static void set_visual(char *str) {
char *p, *vstring = strdup(str);
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
defdepth = DefaultDepth(dpy, scr);
visual_id = (VisualID) 0;
@@ -406,6 +413,7 @@ static void set_visual(char *str) {
/* set numerical visual id. */
visual_id = vinfo.visualid;
+#endif /* NO_X11 */
}
void set_nofb_params(int restore) {
@@ -1356,6 +1364,9 @@ static int wait_until_mapped(Window win) {
time_t start = time(NULL);
XWindowAttributes attr;
+#if NO_X11
+ return 0;
+#else
while (1) {
if (! valid_window(win, NULL, 0)) {
if (time(NULL) > start + waittime) {
@@ -1373,6 +1384,7 @@ static int wait_until_mapped(Window win) {
usleep(ms * 1000);
}
return 0;
+#endif /* NO_X11 */
}
/*
@@ -1388,6 +1400,9 @@ XImage *initialize_xdisplay_fb(void) {
if (raw_fb_str) {
return initialize_raw_fb(0);
}
+#if NO_X11
+ return NULL;
+#else
X_LOCK;
if (subwin) {
@@ -1638,6 +1653,7 @@ if (0) fprintf(stderr, "DefaultDepth: %d visial_id: %d\n", depth, (int) visual_
rfbLog("warning: 24 bpp may have poor performance.\n");
}
return fb;
+#endif /* NO_X11 */
}
void parse_scale_string(char *str, double *factor, int *scaling, int *blend,
@@ -1983,7 +1999,11 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
have_masks = 2;
/* need to fetch TrueColor visual */
X_LOCK;
- if (dpy && XMatchVisualInfo(dpy, scr, 24, TrueColor, &vinfo)) {
+ if (dpy
+#if !NO_X11
+ && XMatchVisualInfo(dpy, scr, 24, TrueColor, &vinfo)
+#endif
+ ) {
main_red_mask = vinfo.red_mask;
main_green_mask = vinfo.green_mask;
main_blue_mask = vinfo.blue_mask;
diff --git a/x11vnc/selection.c b/x11vnc/selection.c
index cb2cce7..d4146e9 100644
--- a/x11vnc/selection.c
+++ b/x11vnc/selection.c
@@ -61,6 +61,9 @@ void selection_request(XEvent *ev, char *type) {
unsigned long XA_LENGTH;
#endif
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
#ifndef XA_LENGTH
XA_LENGTH = XInternAtom(dpy, "LENGTH", True);
#endif
@@ -134,6 +137,7 @@ void selection_request(XEvent *ev, char *type) {
trapped_xerror = 0;
XFlush_wr(dpy);
+#endif /* NO_X11 */
}
int check_sel_direction(char *dir, char *label, char *sel, int len) {
@@ -185,6 +189,9 @@ void cutbuffer_send(void) {
slen = 0;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
/* read the property value into cutbuffer_str: */
do {
@@ -230,6 +237,7 @@ void cutbuffer_send(void) {
if (check_sel_direction("send", "cutbuffer_send", cutbuffer_str, len)) {
rfbSendServerCutText(screen, cutbuffer_str, len);
}
+#endif /* NO_X11 */
}
/*
@@ -255,6 +263,9 @@ void selection_send(XEvent *ev) {
char *selection_str;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
/*
* remember info about our last value of PRIMARY (or CUT_BUFFER0)
* so we can check for any changes below.
@@ -368,6 +379,7 @@ if (debug_sel) fprintf(stderr, "selection_send: data: '%s' dlen: %d nitems: %lu
if (check_sel_direction("send", "selection_send", selection_str, len)) {
rfbSendServerCutText(screen, selection_str, len);
}
+#endif /* NO_X11 */
}
diff --git a/x11vnc/solid.c b/x11vnc/solid.c
index 50fe26c..947c8ce 100644
--- a/x11vnc/solid.c
+++ b/x11vnc/solid.c
@@ -123,6 +123,9 @@ static void solid_root(char *color) {
Colormap cmap;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
if (subwin || window != rootwin) {
rfbLog("cannot set subwin to solid color, must be rootwin\n");
@@ -216,6 +219,7 @@ static void solid_root(char *color) {
XMapWindow(dpy, expose);
XSync(dpy, False);
XDestroyWindow(dpy, expose);
+#endif /* NO_X11 */
}
static void solid_cde(char *color) {
@@ -236,6 +240,9 @@ static void solid_cde(char *color) {
int n;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
if (subwin || window != rootwin) {
rfbLog("cannot set subwin to solid color, must be rootwin\n");
@@ -476,6 +483,7 @@ static void solid_cde(char *color) {
XMapWindow(dpy, expose);
XSync(dpy, False);
XDestroyWindow(dpy, expose);
+#endif /* NO_X11 */
}
static void solid_gnome(char *color) {
@@ -492,6 +500,9 @@ static void solid_gnome(char *color) {
char *cmd;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
if (! color) {
if (! orig_color) {
@@ -562,6 +573,7 @@ static void solid_gnome(char *color) {
sprintf(cmd, set_option, "none");
dt_cmd(cmd);
free(cmd);
+#endif /* NO_X11 */
}
static void solid_kde(char *color) {
@@ -575,6 +587,9 @@ static void solid_kde(char *color) {
int len;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
user = get_user_name();
if (strstr(user, "'") != NULL) {
@@ -611,12 +626,16 @@ static void solid_kde(char *color) {
dt_cmd(cmd);
free(cmd);
free(user);
+#endif /* NO_X11 */
}
char *guess_desktop(void) {
Atom prop;
RAWFB_RET("root")
+#if NO_X11
+ return "root";
+#else
if (wmdt_str && *wmdt_str != '\0') {
char *s = wmdt_str;
@@ -662,6 +681,7 @@ char *guess_desktop(void) {
if (prop != None) return "cde";
}
return "root";
+#endif /* NO_X11 */
}
void solid_bg(int restore) {
diff --git a/x11vnc/sslhelper.c b/x11vnc/sslhelper.c
index da1496e..5e62df8 100644
--- a/x11vnc/sslhelper.c
+++ b/x11vnc/sslhelper.c
@@ -1543,27 +1543,27 @@ void accept_openssl(int mode) {
* instead of a direct SSL connection.
*/
rfbLog("Handling VNC request via https GET. [%d]\n", getpid());
-/* AUDIT */
if (strstr(buf, "/reverse.proxy")) {
- char *buf;
+ char *buf2;
int n, ptr;
SSL_write(ssl, reply, strlen(reply));
- buf = (char *) calloc((8192+1), 1);
+ buf2 = (char *) calloc((8192+1), 1);
n = 0;
ptr = 0;
while (ptr < 8192) {
- n = SSL_read(ssl, buf + ptr, 1);
+ n = SSL_read(ssl, buf2 + ptr, 1);
if (n > 0) {
ptr += n;
}
- if (db) fprintf(stderr, "buf2: '%s'\n", buf);
+ if (db) fprintf(stderr, "buf2: '%s'\n", buf2);
- if (strstr(buf, "\r\n\r\n")) {
+ if (strstr(buf2, "\r\n\r\n")) {
break;
}
}
+ free(buf2);
}
goto write_cookie;
@@ -1672,6 +1672,7 @@ if (db) fprintf(stderr, "iface: %s\n", iface);
exit(0);
}
+ /* parent here */
if (mode != OPENSSL_INETD) {
close(sock);
@@ -2106,6 +2107,7 @@ static void ssl_xfer(int csock, int s_in, int s_out, int is_https) {
/* used to see if SSL_pending() should be checked: */
check_pending = 0;
+/* AUDIT */
if (c_wr && FD_ISSET(csock, &wr)) {
diff --git a/x11vnc/uinput.c b/x11vnc/uinput.c
index bdd41c2..656d7c5 100644
--- a/x11vnc/uinput.c
+++ b/x11vnc/uinput.c
@@ -6,6 +6,7 @@
#include "xinerama.h"
#include "screen.h"
#include "pointer.h"
+#include "keyboard.h"
#include "allowed_input_t.h"
#if LIBVNCSERVER_HAVE_SYS_IOCTL_H
@@ -120,6 +121,7 @@ static void init_key_tracker(void) {
static int mod_is_down(void) {
int i;
+ if (0) {key_is_down();}
for (i = 0; i < 256; i++) {
if (key_pressed[i] && key_ismod[i]) {
return 1;
@@ -281,7 +283,7 @@ void set_uinput_reset(int ms) {
rfbLog("set_uinput_reset: %d\n", ms);
}
-int set_uinput_always(int a) {
+void set_uinput_always(int a) {
uinput_always = a;
}
@@ -315,7 +317,6 @@ void parse_uinput_str(char *in) {
}
uinput_dev = strdup(p);
} else if (strstr(p, "accel=") == p) {
- double fx, fy;
q = p + strlen("accel=");
if (! set_uinput_accel(q)) {
clean_up_exit(1);
diff --git a/x11vnc/userinput.c b/x11vnc/userinput.c
index d3dec60..5405432 100644
--- a/x11vnc/userinput.c
+++ b/x11vnc/userinput.c
@@ -97,6 +97,9 @@ int get_wm_frame_pos(int *px, int *py, int *x, int *y, int *w, int *h,
unsigned int mask;
RAWFB_RET(0)
+#if NO_X11
+ return 0;
+#else
ret = XQueryPointer(dpy, rootwin, &r, &c, &rootx, &rooty, &wx, &wy,
&mask);
@@ -127,6 +130,7 @@ int get_wm_frame_pos(int *px, int *py, int *x, int *y, int *w, int *h,
}
return 1;
+#endif /* NO_X11 */
}
static int scrollcopyrect_top, scrollcopyrect_bot;
@@ -299,6 +303,7 @@ static void parse_wireframe_str(char *wf) {
XColor cdef;
Colormap cmap;
if (dpy && (bpp == 32 || bpp == 16)) {
+#if !NO_X11
cmap = DefaultColormap (dpy, scr);
if (XParseColor(dpy, cmap, str, &cdef) &&
XAllocColor(dpy, cmap, &cdef)) {
@@ -315,6 +320,7 @@ static void parse_wireframe_str(char *wf) {
wireframe_shade = n;
ok = 1;
}
+#endif
}
if (ok) {
;
diff --git a/x11vnc/util.c b/x11vnc/util.c
index 2f9aa0f..15453b5 100644
--- a/x11vnc/util.c
+++ b/x11vnc/util.c
@@ -536,6 +536,7 @@ char *choose_title(char *display) {
strncat(title, display, MAXN - strlen(title));
if (subwin && dpy && valid_window(subwin, NULL, 0)) {
char *name = NULL;
+#if !NO_X11
if (XFetchName(dpy, subwin, &name)) {
if (name) {
strncat(title, " ", MAXN - strlen(title));
@@ -543,6 +544,7 @@ char *choose_title(char *display) {
free(name);
}
}
+#endif /* NO_X11 */
}
return title;
}
diff --git a/x11vnc/v4l.c b/x11vnc/v4l.c
index 6a945ff..d762bc7 100644
--- a/x11vnc/v4l.c
+++ b/x11vnc/v4l.c
@@ -6,6 +6,7 @@
#include "xinerama.h"
#include "screen.h"
#include "connections.h"
+#include "keyboard.h"
#include "allowed_input_t.h"
#if LIBVNCSERVER_HAVE_LINUX_VIDEODEV_H
diff --git a/x11vnc/win_utils.c b/x11vnc/win_utils.c
index 55f341b..eb147a8 100644
--- a/x11vnc/win_utils.c
+++ b/x11vnc/win_utils.c
@@ -36,6 +36,10 @@ Window parent_window(Window win, char **name) {
*name = NULL;
}
RAWFB_RET(None)
+#if NO_X11
+ nox11_exit(1);
+ return None;
+#else
old_handler = XSetErrorHandler(trap_xerror);
trapped_xerror = 0;
@@ -55,6 +59,7 @@ Window parent_window(Window win, char **name) {
XFetchName(dpy, parent, name);
}
return parent;
+#endif /* NO_X11 */
}
/* trapping utility to check for a valid window: */
@@ -73,6 +78,10 @@ int valid_window(Window win, XWindowAttributes *attr_ret, int bequiet) {
return 0;
}
RAWFB_RET(0)
+#if NO_X11
+ nox11_exit(1);
+ return 0;
+#else
old_handler = XSetErrorHandler(trap_xerror);
trapped_xerror = 0;
@@ -90,6 +99,7 @@ int valid_window(Window win, XWindowAttributes *attr_ret, int bequiet) {
trapped_xerror = 0;
return ok;
+#endif /* NO_X11 */
}
Bool xtranslate(Window src, Window dst, int src_x, int src_y, int *dst_x,
@@ -98,6 +108,10 @@ Bool xtranslate(Window src, Window dst, int src_x, int src_y, int *dst_x,
Bool ok = False;
RAWFB_RET(False)
+#if NO_X11
+ nox11_exit(1);
+ return False;
+#else
trapped_xerror = 0;
old_handler = XSetErrorHandler(trap_xerror);
@@ -116,6 +130,7 @@ Bool xtranslate(Window src, Window dst, int src_x, int src_y, int *dst_x,
trapped_xerror = 0;
return ok;
+#endif /* NO_X11 */
}
int get_window_size(Window win, int *x, int *y) {
@@ -165,6 +180,9 @@ void snapshot_stack_list(int free_only, double allowed_age) {
last_free = now;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
X_LOCK;
/* no need to trap error since rootwin */
@@ -221,6 +239,7 @@ if (0) fprintf(stderr, "blackr: %d %dx%d+%d+%d\n", i,
XFree(list);
X_UNLOCK;
+#endif /* NO_X11 */
}
void update_stack_list(void) {
@@ -271,6 +290,9 @@ Window query_pointer(Window start) {
int rx, ry, wx, wy;
unsigned int mask;
RAWFB_RET(None)
+#if NO_X11
+ return None;
+#else
if (start == None) {
start = rootwin;
}
@@ -279,6 +301,7 @@ Window query_pointer(Window start) {
} else {
return None;
}
+#endif /* NO_X11 */
}
unsigned int mask_state(void) {
@@ -287,12 +310,16 @@ unsigned int mask_state(void) {
unsigned int mask;
RAWFB_RET(0)
+#if NO_X11
+ return 0;
+#else
if (XQueryPointer(dpy, rootwin, &r, &c, &rx, &ry, &wx, &wy, &mask)) {
return mask;
} else {
return 0;
}
+#endif /* NO_X11 */
}
int pick_windowid(unsigned long *num) {
@@ -381,6 +408,9 @@ Window descend_pointer(int depth, Window start, char *name_info, int len) {
static Window prev_start = None;
RAWFB_RET(None)
+#if NO_X11
+ return None;
+#else
if (! classhint) {
classhint = XAllocClassHint();
@@ -481,6 +511,7 @@ Window descend_pointer(int depth, Window start, char *name_info, int len) {
}
return clast;
+#endif /* NO_X11 */
}
diff --git a/x11vnc/x11vnc.1 b/x11vnc/x11vnc.1
index bdc798e..e5497be 100644
--- a/x11vnc/x11vnc.1
+++ b/x11vnc/x11vnc.1
@@ -2,7 +2,7 @@
.TH X11VNC "1" "July 2006" "x11vnc " "User Commands"
.SH NAME
x11vnc - allow VNC connections to real X11 displays
- version: 0.8.3, lastmod: 2006-07-15
+ version: 0.8.3, lastmod: 2006-07-17
.SH SYNOPSIS
.B x11vnc
[OPTION]...
diff --git a/x11vnc/x11vnc.c b/x11vnc/x11vnc.c
index 8376377..0fd81e9 100644
--- a/x11vnc/x11vnc.c
+++ b/x11vnc/x11vnc.c
@@ -2965,7 +2965,7 @@ int main(int argc, char* argv[]) {
}
overlay_present = 0;
-#ifdef SOLARIS_OVERLAY
+#if defined(SOLARIS_OVERLAY) && !NO_X11
if (! XQueryExtension(dpy, "SUN_OVL", &maj, &ev, &er)) {
if (! quiet && overlay) {
rfbLog("Disabling -overlay: SUN_OVL "
@@ -2975,7 +2975,7 @@ int main(int argc, char* argv[]) {
overlay_present = 1;
}
#endif
-#ifdef IRIX_OVERLAY
+#if defined(IRIX_OVERLAY) && !NO_X11
if (! XReadDisplayQueryExtension(dpy, &ev, &er)) {
if (! quiet && overlay) {
rfbLog("Disabling -overlay: IRIX ReadDisplay "
diff --git a/x11vnc/x11vnc.h b/x11vnc/x11vnc.h
index 0c48245..09c14a8 100644
--- a/x11vnc/x11vnc.h
+++ b/x11vnc/x11vnc.h
@@ -26,18 +26,31 @@
#include <time.h>
#include <errno.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <ctype.h>
+
+#include <rfb/rfb.h>
+#include <rfb/rfbregion.h>
+
+
+/* we can now build under --without-x: */
+#if LIBVNCSERVER_HAVE_X11
+
+#define NO_X11 0
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/Xatom.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <ctype.h>
+#else
-#include <rfb/rfb.h>
-#include <rfb/rfbregion.h>
+#define NO_X11 1
+#include "nox11.h"
+#include <rfb/keysym.h>
+
+#endif
/****************************************************************************/
@@ -497,6 +510,8 @@ typedef struct _ClientData {
} ClientData;
+extern void nox11_exit(int rc);
+
#include "params.h"
#include "enums.h"
#include "options.h"
diff --git a/x11vnc/x11vnc_defs.c b/x11vnc/x11vnc_defs.c
index 6678864..44c9682 100644
--- a/x11vnc/x11vnc_defs.c
+++ b/x11vnc/x11vnc_defs.c
@@ -15,7 +15,7 @@ int xtrap_base_event_type = 0;
int xdamage_base_event_type = 0;
/* date +'lastmod: %Y-%m-%d' */
-char lastmod[] = "0.8.3 lastmod: 2006-07-15";
+char lastmod[] = "0.8.3 lastmod: 2006-07-17";
/* X display info */
diff --git a/x11vnc/xevents.c b/x11vnc/xevents.c
index 69b02e9..e3fc192 100644
--- a/x11vnc/xevents.c
+++ b/x11vnc/xevents.c
@@ -42,17 +42,24 @@ static void grab_buster_watch(int parent, char *dstr);
void initialize_vnc_connect_prop(void) {
vnc_connect_str[0] = '\0';
RAWFB_RET_VOID
+#if !NO_X11
vnc_connect_prop = XInternAtom(dpy, "VNC_CONNECT", False);
+#endif
}
void initialize_x11vnc_remote_prop(void) {
x11vnc_remote_str[0] = '\0';
RAWFB_RET_VOID
+#if !NO_X11
x11vnc_remote_prop = XInternAtom(dpy, "X11VNC_REMOTE", False);
+#endif
}
void initialize_clipboard_atom(void) {
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
clipboard_atom = XInternAtom(dpy, "CLIPBOARD", False);
if (clipboard_atom == None) {
if (! quiet) rfbLog("could not find atom CLIPBOARD\n");
@@ -63,6 +70,7 @@ void initialize_clipboard_atom(void) {
set_clipboard = 0;
}
}
+#endif /* NO_X11 */
}
static void initialize_xevents(int reset) {
@@ -76,6 +84,9 @@ static void initialize_xevents(int reset) {
static int did_xrandr = 0;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
if (reset) {
did_xselect_input = 0;
@@ -136,6 +147,7 @@ static void initialize_xevents(int reset) {
initialize_xdamage();
did_xdamage = 1;
}
+#endif /* NO_X11 */
}
static void print_xevent_bases(void) {
@@ -163,6 +175,9 @@ static void get_prop(char *str, int len, Atom prop) {
return;
}
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
slen = 0;
@@ -184,6 +199,7 @@ static void get_prop(char *str, int len, Atom prop) {
XFree(data);
}
} while (bytes_after > 0);
+#endif /* NO_X11 */
}
static void bust_grab(int reset) {
@@ -200,6 +216,9 @@ static void bust_grab(int reset) {
bust_count = 0;
return;
}
+#if NO_X11
+ return;
+#else
x = 0;
y = 0;
@@ -275,6 +294,7 @@ static void bust_grab(int reset) {
}
XFlush_wr(dpy);
last_bust = time(NULL);
+#endif /* NO_X11 */
}
typedef struct _grabwatch {
@@ -450,6 +470,9 @@ static void grab_buster_watch(int parent, char *dstr) {
int db = 0;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
if (grab_buster > 1) {
db = 1;
@@ -510,6 +533,7 @@ static void grab_buster_watch(int parent, char *dstr) {
break;
}
}
+#endif /* NO_X11 */
}
void spawn_grab_buster(void) {
@@ -559,6 +583,9 @@ void sync_tod_with_servertime(void) {
int i, db = 0;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
if (! ticker_atom) {
ticker_atom = XInternAtom(dpy, "X11VNC_TICKER", False);
@@ -601,6 +628,7 @@ void sync_tod_with_servertime(void) {
}
usleep(1000);
}
+#endif /* NO_X11 */
}
void check_keycode_state(void) {
@@ -717,6 +745,9 @@ void check_xevents(int reset) {
XErrorHandler old_handler;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
if (unixpw_in_progress) return;
@@ -1079,6 +1110,7 @@ void check_xevents(int reset) {
X_UNLOCK;
last_call = now;
+#endif /* NO_X11 */
}
/*
@@ -1088,6 +1120,9 @@ void xcut_receive(char *text, int len, rfbClientPtr cl) {
allowed_input_t input;
RAWFB_RET_VOID
+#if NO_X11
+ return;
+#else
if (unixpw_in_progress) {
rfbLog("xcut_receive: unixpw_in_progress, skipping.\n");
@@ -1169,6 +1204,7 @@ void xcut_receive(char *text, int len, rfbClientPtr cl) {
X_UNLOCK;
set_cutbuffer = 1;
+#endif /* NO_X11 */
}
diff --git a/x11vnc/xwrappers.c b/x11vnc/xwrappers.c
index 63e231f..2511009 100644
--- a/x11vnc/xwrappers.c
+++ b/x11vnc/xwrappers.c
@@ -5,6 +5,7 @@
#include "keyboard.h"
#include "xevents.h"
#include "connections.h"
+#include "cleanup.h"
int xshm_present = 0;
int xtest_present = 0;
@@ -103,11 +104,15 @@ int guess_bits_per_color(int bits_per_pixel) {
}
int XFlush_wr(Display *disp) {
+#if NO_X11
+ return 1;
+#else
if (disp) {
return XFlush(disp);
} else {
return 1;
}
+#endif /* NO_X11 */
}
/*
@@ -184,6 +189,10 @@ Bool XShmQueryExtension_wr(Display *disp) {
XImage *xreadscreen(Display *disp, Drawable d, int x, int y,
unsigned int width, unsigned int height, Bool show_cursor) {
+#if NO_X11
+ return NULL;
+#else
+
#ifdef SOLARIS_OVERLAY
return XReadScreen(disp, d, x, y, width, height,
show_cursor);
@@ -201,12 +210,17 @@ XImage *xreadscreen(Display *disp, Drawable d, int x, int y,
return NULL;
# endif
#endif
+
+#endif /* NO_X11 */
}
XImage *XGetSubImage_wr(Display *disp, Drawable d, int x, int y,
unsigned int width, unsigned int height, unsigned long plane_mask,
int format, XImage *dest_image, int dest_x, int dest_y) {
-
+#if NO_X11
+ nox11_exit(1);
+ return NULL;
+#else
ADJUST_ROOTSHIFT
if (overlay && dest_x == 0 && dest_y == 0) {
@@ -231,11 +245,16 @@ XImage *XGetSubImage_wr(Display *disp, Drawable d, int x, int y,
}
return XGetSubImage(disp, d, x, y, width, height, plane_mask,
format, dest_image, dest_x, dest_y);
+#endif /* NO_X11 */
}
XImage *XGetImage_wr(Display *disp, Drawable d, int x, int y,
unsigned int width, unsigned int height, unsigned long plane_mask,
int format) {
+#if NO_X11
+ nox11_exit(1);
+ return NULL;
+#else
ADJUST_ROOTSHIFT
@@ -244,6 +263,7 @@ XImage *XGetImage_wr(Display *disp, Drawable d, int x, int y,
(Bool) overlay_cursor);
}
return XGetImage(disp, d, x, y, width, height, plane_mask, format);
+#endif /* NO_X11 */
}
XImage *XCreateImage_wr(Display *disp, Visual *visual, unsigned int depth,
@@ -275,6 +295,10 @@ XImage *XCreateImage_wr(Display *disp, Visual *visual, unsigned int depth,
return xi;
}
+#if NO_X11
+ nox11_exit(1);
+ return NULL;
+#else
if (overlay) {
XImage *xi;
xi = xreadscreen(disp, window, 0, 0, width, height, False);
@@ -290,6 +314,7 @@ XImage *XCreateImage_wr(Display *disp, Visual *visual, unsigned int depth,
return XCreateImage(disp, visual, depth, format, offset, data,
width, height, bitmap_pad, bytes_per_line);
+#endif /* NO_X11 */
}
static void copy_raw_fb_24_to_32(XImage *dest, int x, int y, unsigned int w,
@@ -545,12 +570,15 @@ void init_track_keycode_state(void) {
static void upup_downdown_warning(KeyCode key, Bool down) {
RAWFB_RET_VOID
-
+#if NO_X11
+ return;
+#else
if ((down ? 1:0) == keycode_state[(int) key]) {
char *str = XKeysymToString(XKeycodeToKeysym(dpy, key, 0));
rfbLog("XTestFakeKeyEvent: keycode=0x%x \"%s\" is *already* "
"%s\n", key, str ? str : "null", down ? "down":"up");
}
+#endif /* NO_X11 */
}
/*
@@ -562,6 +590,10 @@ void XTRAP_FakeKeyEvent_wr(Display* dpy, KeyCode key, Bool down,
unsigned long delay) {
RAWFB_RET_VOID
+#if NO_X11
+ nox11_exit(1);
+ return;
+#else
if (! xtrap_present) {
DEBUG_SKIPPED_INPUT(debug_keyboard, "keyboard: no-XTRAP");
@@ -580,6 +612,8 @@ void XTRAP_FakeKeyEvent_wr(Display* dpy, KeyCode key, Bool down,
#else
DEBUG_SKIPPED_INPUT(debug_keyboard, "keyboard: no-XTRAP-build");
#endif
+
+#endif /* NO_X11 */
}
void XTestFakeKeyEvent_wr(Display* dpy, KeyCode key, Bool down,
@@ -588,6 +622,10 @@ void XTestFakeKeyEvent_wr(Display* dpy, KeyCode key, Bool down,
RAWFB_RET_VOID
+#if NO_X11
+ nox11_exit(1);
+ return;
+#else
if (debug_keyboard) {
char *str = XKeysymToString(XKeycodeToKeysym(dpy, key, 0));
rfbLog("XTestFakeKeyEvent(dpy, keycode=0x%x \"%s\", %s)\n",
@@ -633,12 +671,18 @@ void XTestFakeKeyEvent_wr(Display* dpy, KeyCode key, Bool down,
}
keycode_state[(int) key] = down ? 1 : 0;
#endif
+
+#endif /* NO_X11 */
}
void XTRAP_FakeButtonEvent_wr(Display* dpy, unsigned int button, Bool is_press,
unsigned long delay) {
RAWFB_RET_VOID
+#if NO_X11
+ nox11_exit(1);
+ return;
+#else
if (! xtrap_present) {
DEBUG_SKIPPED_INPUT(debug_keyboard, "button: no-XTRAP");
@@ -653,12 +697,18 @@ void XTRAP_FakeButtonEvent_wr(Display* dpy, unsigned int button, Bool is_press,
#else
DEBUG_SKIPPED_INPUT(debug_keyboard, "button: no-XTRAP-build");
#endif
+
+#endif /* NO_X11 */
}
void XTestFakeButtonEvent_wr(Display* dpy, unsigned int button, Bool is_press,
unsigned long delay) {
RAWFB_RET_VOID
+#if NO_X11
+ nox11_exit(1);
+ return;
+#else
if (grab_ptr) {
XUngrabPointer(dpy, CurrentTime);
@@ -686,6 +736,7 @@ void XTestFakeButtonEvent_wr(Display* dpy, unsigned int button, Bool is_press,
if (grab_ptr) {
adjust_grabs(1, 1);
}
+#endif /* NO_X11 */
}
void XTRAP_FakeMotionEvent_wr(Display* dpy, int screen, int x, int y,
@@ -693,6 +744,10 @@ void XTRAP_FakeMotionEvent_wr(Display* dpy, int screen, int x, int y,
RAWFB_RET_VOID
+#if NO_X11
+ nox11_exit(1);
+ return;
+#else
if (! xtrap_present) {
DEBUG_SKIPPED_INPUT(debug_keyboard, "motion: no-XTRAP");
return;
@@ -705,12 +760,18 @@ void XTRAP_FakeMotionEvent_wr(Display* dpy, int screen, int x, int y,
#else
DEBUG_SKIPPED_INPUT(debug_keyboard, "motion: no-XTRAP-build");
#endif
+
+#endif /* NO_X11 */
}
void XTestFakeMotionEvent_wr(Display* dpy, int screen, int x, int y,
unsigned long delay) {
RAWFB_RET_VOID
+#if NO_X11
+ nox11_exit(1);
+ return;
+#else
if (grab_ptr) {
XUngrabPointer(dpy, CurrentTime);
@@ -734,6 +795,7 @@ void XTestFakeMotionEvent_wr(Display* dpy, int screen, int x, int y,
if (grab_ptr) {
adjust_grabs(1, 1);
}
+#endif /* NO_X11 */
}
Bool XTestCompareCurrentCursorWithWindow_wr(Display* dpy, Window w) {
@@ -971,6 +1033,10 @@ Display *XOpenDisplay_wr(char *display_name) {
if (! xauth_raw(1)) {
return NULL;
}
+#if NO_X11
+ rfbLog("This x11vnc was built without X11 support (-rawfb only).\n");
+ return NULL;
+#else
d = XOpenDisplay(display_name);
if (db) fprintf(stderr, "XOpenDisplay_wr: %s %p\n", display_name, (void *)d);
@@ -978,11 +1044,29 @@ Display *XOpenDisplay_wr(char *display_name) {
xauth_raw(0);
return d;
+#endif /* NO_X11 */
}
int XCloseDisplay_wr(Display *display) {
int db = 0;
if (db) fprintf(stderr, "XCloseDisplay_wr: %p\n", (void *)display);
+#if NO_X11
+ return 0;
+#else
return XCloseDisplay(display);
+#endif /* NO_X11 */
+}
+
+void nox11_exit(int rc) {
+#if NO_X11
+ rfbLog("This x11vnc was not built with X11 support.\n");
+ clean_up_exit(rc);
+#else
+ if (0) {rc = 0;}
+#endif
}
+#if NO_X11
+#include "nox11_funcs.h"
+#endif
+
OpenPOWER on IntegriCloud