diff options
author | Josh Triplett <josh@freedesktop.org> | 2006-02-18 16:49:41 -0800 |
---|---|---|
committer | Josh Triplett <josh@josh-mobile.localdomain> | 2006-02-18 16:49:41 -0800 |
commit | 7944b54ff8d97e29dad9947aac05780e5c389737 (patch) | |
tree | c893364b631a5c2eb47cf34f8e05993a97c5d8e3 |
Remove xcl and CVSROOT.
-rw-r--r-- | .cvsignore | 14 | ||||
-rw-r--r-- | Doxyfile | 139 | ||||
-rw-r--r-- | atom/.cvsignore | 11 | ||||
-rw-r--r-- | atom/Makefile.am | 27 | ||||
-rw-r--r-- | atom/atomlist.m4 | 71 | ||||
-rw-r--r-- | atom/atoms.gperf.m4 | 108 | ||||
-rw-r--r-- | atom/xcb-atom.pc.in | 11 | ||||
-rw-r--r-- | atom/xcb_atom.h.m4 | 26 | ||||
-rwxr-xr-x | autogen.sh | 3 | ||||
-rw-r--r-- | configure.ac | 33 | ||||
-rw-r--r-- | event/.cvsignore | 8 | ||||
-rw-r--r-- | event/Makefile.am | 16 | ||||
-rw-r--r-- | event/events.c | 88 | ||||
-rw-r--r-- | event/xcb-event.pc.in | 11 | ||||
-rw-r--r-- | event/xcb_event.h | 59 | ||||
-rw-r--r-- | xcb_util_intro.in | 21 |
16 files changed, 646 insertions, 0 deletions
diff --git a/.cvsignore b/.cvsignore new file mode 100644 index 0000000..ed2f649 --- /dev/null +++ b/.cvsignore @@ -0,0 +1,14 @@ +Makefile +Makefile.in +aclocal.m4 +autom4te.cache +config.guess +config.log +config.status +config.sub +configure +depcomp +install-sh +libtool +ltmain.sh +missing diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 0000000..b915677 --- /dev/null +++ b/Doxyfile @@ -0,0 +1,139 @@ +PROJECT_NAME = XCB Utility +PROJECT_NUMBER = +OUTPUT_DIRECTORY = doc/ +INPUT = xcb_util_intro image/ +IMAGE_PATH = doc/img +OUTPUT_LANGUAGE = English +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +ENUM_VALUES_PER_LINE = 1 +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = YES +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +INTERNAL_DOCS = NO +STRIP_CODE_COMMENTS = YES +CASE_SENSE_NAMES = YES +SHORT_NAMES = NO +HIDE_SCOPE_NAMES = NO +VERBATIM_HEADERS = NO +SHOW_INCLUDE_FILES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 2 +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ALIASES = +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +SHOW_USED_FILES = NO +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +FILE_PATTERNS = +RECURSIVE = NO +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +INPUT_FILTER = +FILTER_SOURCE_FILES = NO +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 2 +IGNORE_PREFIX = +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = YES +GENERATE_XML = YES +XML_SCHEMA = +XML_DTD = +GENERATE_AUTOGEN_DEF = NO +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = NO +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +CLASS_DIAGRAMS = NO +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = NO +COLLABORATION_GRAPH = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = NO +INCLUDED_BY_GRAPH = NO +GRAPHICAL_HIERARCHY = NO +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 512 +MAX_DOT_GRAPH_HEIGHT = 512 +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +SEARCHENGINE = NO diff --git a/atom/.cvsignore b/atom/.cvsignore new file mode 100644 index 0000000..829115e --- /dev/null +++ b/atom/.cvsignore @@ -0,0 +1,11 @@ +.deps +.libs +Makefile +Makefile.in +*.lo +*.loT +*.la +*.pc +atoms.c +atoms.gperf +xcb_atom.h diff --git a/atom/Makefile.am b/atom/Makefile.am new file mode 100644 index 0000000..247dc6f --- /dev/null +++ b/atom/Makefile.am @@ -0,0 +1,27 @@ + +MAINTAINERCLEANFILES = Makefile.in + +lib_LTLIBRARIES = libXCBAtom.la + +xcbinclude_HEADERS = xcb_atom.h + +AM_CFLAGS = -Wall +INCLUDES = $(XCB_CFLAGS) +LDADD = $(XCB_LIBS) + +libXCBAtom_la_SOURCES = atoms.c + +pkgconfig_DATA = xcb-atom.pc + +EXTRA_DIST = xcb-atom.pc.in + +BUILT_SOURCES = atoms.c atoms.gperf xcb_atom.h + +%.c: %.gperf + $(GPERF) --output-file $@ $*.gperf + +atoms.gperf: atomlist.m4 +xcb_atom.h: atomlist.m4 + +%: %.m4 + $(M4) $< > $@ diff --git a/atom/atomlist.m4 b/atom/atomlist.m4 new file mode 100644 index 0000000..1c84740 --- /dev/null +++ b/atom/atomlist.m4 @@ -0,0 +1,71 @@ +define(`FOREACH', `ifelse(`$1', , , `DO($1) +FOREACH(shift($@))')')FOREACH( +PRIMARY, +SECONDARY, +ARC, +ATOM, +BITMAP, +CARDINAL, +COLORMAP, +CURSOR, +CUT_BUFFER0, +CUT_BUFFER1, +CUT_BUFFER2, +CUT_BUFFER3, +CUT_BUFFER4, +CUT_BUFFER5, +CUT_BUFFER6, +CUT_BUFFER7, +DRAWABLE, +FONT, +INTEGER, +PIXMAP, +POINT, +RECTANGLE, +RESOURCE_MANAGER, +RGB_COLOR_MAP, +RGB_BEST_MAP, +RGB_BLUE_MAP, +RGB_DEFAULT_MAP, +RGB_GRAY_MAP, +RGB_GREEN_MAP, +RGB_RED_MAP, +STRING, +VISUALID, +WINDOW, +WM_COMMAND, +WM_HINTS, +WM_CLIENT_MACHINE, +WM_ICON_NAME, +WM_ICON_SIZE, +WM_NAME, +WM_NORMAL_HINTS, +WM_SIZE_HINTS, +WM_ZOOM_HINTS, +MIN_SPACE, +NORM_SPACE, +MAX_SPACE, +END_SPACE, +SUPERSCRIPT_X, +SUPERSCRIPT_Y, +SUBSCRIPT_X, +SUBSCRIPT_Y, +UNDERLINE_POSITION, +UNDERLINE_THICKNESS, +STRIKEOUT_ASCENT, +STRIKEOUT_DESCENT, +ITALIC_ANGLE, +X_HEIGHT, +QUAD_WIDTH, +WEIGHT, +POINT_SIZE, +RESOLUTION, +COPYRIGHT, +NOTICE, +FONT_NAME, +FAMILY_NAME, +FULL_NAME, +CAP_HEIGHT, +WM_CLASS, +WM_TRANSIENT_FOR, +)dnl diff --git a/atom/atoms.gperf.m4 b/atom/atoms.gperf.m4 new file mode 100644 index 0000000..63c98db --- /dev/null +++ b/atom/atoms.gperf.m4 @@ -0,0 +1,108 @@ +%{ +#include <X11/XCB/xcb.h> +#include <stdlib.h> +#include "xcb_atom.h" + +define(`COUNT', 0)dnl +define(`DO', `const XCBATOM $1 = { define(`COUNT', incr(COUNT))COUNT };')dnl +include(atomlist.m4)`'dnl +%} + +%readonly-tables +%pic +%null-strings +%enum +%includes +%compare-strncmp + +%struct-type +struct atom_map { int name; XCBATOM value; }; +%% +define(`DO', `$1,{ define(`COUNT', incr(COUNT))COUNT }')dnl +include(atomlist.m4)`'dnl +%% +static const char *const atom_names[] = { +define(`DO', ` "$1",')dnl +include(atomlist.m4)`'dnl +}; + +XCBATOM InternAtomPredefined(CARD16 name_len, const char *name) +{ + const struct atom_map *value = in_word_set(name, name_len); + XCBATOM ret = { None }; + if(value) + ret = value->value; + return ret; +} + +InternAtomFastCookie InternAtomFast(XCBConnection *c, BOOL only_if_exists, CARD16 name_len, const char *name) +{ + InternAtomFastCookie cookie; + + if((cookie.u.atom = InternAtomPredefined(name_len, name)).xid != None) + { + cookie.tag = TAG_VALUE; + return cookie; + } + + cookie.tag = TAG_COOKIE; + cookie.u.cookie = XCBInternAtom(c, only_if_exists, name_len, name); + return cookie; +} + +XCBATOM InternAtomFastReply(XCBConnection *c, InternAtomFastCookie cookie, XCBGenericError **e) +{ + switch(cookie.tag) + { + XCBInternAtomRep *reply; + case TAG_VALUE: + if(e) + *e = 0; + break; + case TAG_COOKIE: + reply = XCBInternAtomReply(c, cookie.u.cookie, e); + if(reply) + { + cookie.u.atom = reply->atom; + free(reply); + } + else + cookie.u.atom.xid = 0; + break; + } + return cookie.u.atom; +} + +const char *GetAtomNamePredefined(XCBATOM atom) +{ + if(atom.xid <= 0 || atom.xid > (sizeof(atom_names) / sizeof(*atom_names))) + return 0; + return atom_names[atom.xid - 1]; +} + +int GetAtomName(XCBConnection *c, XCBATOM atom, const char **namep, int *lengthp) +{ + static char buf[100]; + const char *name = GetAtomNamePredefined(atom); + int len; + XCBGetAtomNameCookie atomc; + XCBGetAtomNameRep *atomr; + if(name) + { + *namep = name; + *lengthp = strlen(name); + return 1; + } + atomc = XCBGetAtomName(c, atom); + atomr = XCBGetAtomNameReply(c, atomc, 0); + if(!atomr) + return 0; + len = XCBGetAtomNameNameLength(atomr); + if(len > sizeof(buf)) + len = sizeof(buf); + *lengthp = len; + memcpy(buf, XCBGetAtomNameName(atomr), len); + *namep = buf; + free(atomr); + return 1; +} diff --git a/atom/xcb-atom.pc.in b/atom/xcb-atom.pc.in new file mode 100644 index 0000000..cda6d42 --- /dev/null +++ b/atom/xcb-atom.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: XCBAtom +Description: XCB atom cache +Version: @PACKAGE_VERSION@ +Requires: xcb +Libs: -L${libdir} -lXCBAtom @LIBS@ +Cflags: -I${includedir} diff --git a/atom/xcb_atom.h.m4 b/atom/xcb_atom.h.m4 new file mode 100644 index 0000000..7a88cfc --- /dev/null +++ b/atom/xcb_atom.h.m4 @@ -0,0 +1,26 @@ +#ifndef ATOMS_H +#define ATOMS_H + +enum tag_t { + TAG_COOKIE, + TAG_VALUE +}; +typedef struct { + enum tag_t tag; + union { + XCBInternAtomCookie cookie; + XCBATOM atom; + } u; +} InternAtomFastCookie; + +XCBATOM InternAtomPredefined(CARD16 name_len, const char *name); +InternAtomFastCookie InternAtomFast(XCBConnection *c, BOOL only_if_exists, CARD16 name_len, const char *name); +XCBATOM InternAtomFastReply(XCBConnection *c, InternAtomFastCookie cookie, XCBGenericError **e); + +const char *GetAtomNamePredefined(XCBATOM atom); +int GetAtomName(XCBConnection *c, XCBATOM atom, const char **namep, int *lengthp); + +define(`DO', `extern const XCBATOM $1;')dnl +include(atomlist.m4)`'dnl + +#endif /* ATOMS_H */ diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..d68a142 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,3 @@ +#! /bin/sh +autoreconf -v --install || exit 1 +./configure "$@" diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..4f5bbd7 --- /dev/null +++ b/configure.ac @@ -0,0 +1,33 @@ +AC_PREREQ(2.57) +AC_INIT([xcb-util],0.1,[jamey@minilop.net]) +AC_CONFIG_SRCDIR([Makefile.am]) +AM_INIT_AUTOMAKE([foreign dist-bzip2]) + +AC_CHECK_PROGS(M4, m4) +AC_CHECK_PROGS(GPERF, gperf, [no]) +if test $GPERF = "no"; then + AC_MSG_ERROR([Can't find gperf, please install it and try again]) +fi +AC_PROG_CC +AC_PROG_LIBTOOL + +xcbincludedir='${includedir}/X11/XCB' +AC_SUBST(xcbincludedir) + +pkgconfigdir='${libdir}/pkgconfig' +AC_SUBST(pkgconfigdir) + +PKG_CHECK_MODULES(XCB, xcb) + +AC_OUTPUT([Makefile + convenient/Makefile convenient/xcb-aux.pc + reply/Makefile reply/xcb-reply.pc + image/Makefile image/xcb-image.pc + atom/Makefile atom/xcb-atom.pc + event/Makefile event/xcb-event.pc + keysyms/Makefile keysyms/xcb-keysyms.pc + property/Makefile property/xcb-property.pc + icccm/Makefile icccm/xcb-icccm.pc + wm/Makefile wm/xcb-wm.pc + xcb_util_intro + ]) diff --git a/event/.cvsignore b/event/.cvsignore new file mode 100644 index 0000000..65e939d --- /dev/null +++ b/event/.cvsignore @@ -0,0 +1,8 @@ +.deps +.libs +Makefile +Makefile.in +*.lo +*.loT +*.la +*.pc diff --git a/event/Makefile.am b/event/Makefile.am new file mode 100644 index 0000000..2b83c56 --- /dev/null +++ b/event/Makefile.am @@ -0,0 +1,16 @@ + +MAINTAINERCLEANFILES = Makefile.in + +lib_LTLIBRARIES = libXCBEvent.la + +xcbinclude_HEADERS = xcb_event.h + +AM_CFLAGS = -Wall +INCLUDES = $(XCB_CFLAGS) +LDADD = $(XCB_LIBS) + +libXCBEvent_la_SOURCES = events.c + +pkgconfig_DATA = xcb-event.pc + +EXTRA_DIST = xcb-event.pc.in diff --git a/event/events.c b/event/events.c new file mode 100644 index 0000000..6649eee --- /dev/null +++ b/event/events.c @@ -0,0 +1,88 @@ +#include <assert.h> +#include <stdlib.h> + +#include "xcb_event.h" + +typedef struct { + GenericEventHandler handler; + void *data; +} EventHandler; + +struct EventHandlers { + EventHandler event[126]; + EventHandler error[256]; + XCBConnection *c; +}; + +EventHandlers *allocEventHandlers(XCBConnection *c) +{ + EventHandlers *ret = calloc(1, sizeof(EventHandlers)); + if(ret) + ret->c = c; + return ret; +} + +void freeEventHandlers(EventHandlers *evenths) +{ + free(evenths); +} + +XCBConnection *getXCBConnection(EventHandlers *evenths) +{ + return evenths->c; +} + +static EventHandler *getEventHandler(EventHandlers *evenths, int event) +{ + assert(event < 256); + event &= 0x7f; + assert(event >= 2); + return &evenths->event[event - 2]; +} + +static EventHandler *getErrorHandler(EventHandlers *evenths, int error) +{ + assert(error >= 0 && error < 256); + return &evenths->error[error]; +} + +static int handleEvent(EventHandlers *evenths, XCBGenericEvent *event) +{ + EventHandler *eventh = 0; + assert(event->response_type != 1); + + if(event->response_type == 0) + eventh = getErrorHandler(evenths, ((XCBGenericError *) event)->error_code); + else + eventh = getEventHandler(evenths, event->response_type); + + if(eventh->handler) + return eventh->handler(eventh->data, evenths->c, event); + return 0; +} + +void eventLoop(EventHandlers *evenths) +{ + XCBGenericEvent *event; + while((event = XCBWaitForEvent(evenths->c))) + { + handleEvent(evenths, event); + free(event); + } +} + +static void setHandler(GenericEventHandler handler, void *data, EventHandler *place) +{ + EventHandler eventh = { handler, data }; + *place = eventh; +} + +void setEventHandler(EventHandlers *evenths, int event, GenericEventHandler handler, void *data) +{ + setHandler(handler, data, getEventHandler(evenths, event)); +} + +void setErrorHandler(EventHandlers *evenths, int error, GenericErrorHandler handler, void *data) +{ + setHandler((GenericEventHandler) handler, data, getErrorHandler(evenths, error)); +} diff --git a/event/xcb-event.pc.in b/event/xcb-event.pc.in new file mode 100644 index 0000000..863fc6e --- /dev/null +++ b/event/xcb-event.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: XCBEvent +Description: XCB event callback interface +Version: @PACKAGE_VERSION@ +Requires: xcb +Libs: -L${libdir} -lXCBEvent @LIBS@ +Cflags: -I${includedir} diff --git a/event/xcb_event.h b/event/xcb_event.h new file mode 100644 index 0000000..5d94e4b --- /dev/null +++ b/event/xcb_event.h @@ -0,0 +1,59 @@ +#ifndef EVENTS_H +#define EVENTS_H + +#include <X11/XCB/xcb.h> + +typedef struct EventHandlers EventHandlers; +EventHandlers *allocEventHandlers(XCBConnection *c); +void freeEventHandlers(EventHandlers *evenths); +XCBConnection *getXCBConnection(EventHandlers *evenths); + +void eventLoop(EventHandlers *evenths); + +typedef int (*GenericEventHandler)(void *data, XCBConnection *c, XCBGenericEvent *event); +typedef int (*GenericErrorHandler)(void *data, XCBConnection *c, XCBGenericError *error); + +void setEventHandler(EventHandlers *evenths, int event, GenericEventHandler handler, void *data); +void setErrorHandler(EventHandlers *evenths, int error, GenericErrorHandler handler, void *data); + +#define MAKE_HANDLER(cls,kind) \ +static inline void set##kind##cls##Handler(EventHandlers *evenths, int (*handler)(void *, XCBConnection *, XCB##kind##cls *), void *data) \ +{ \ + set##cls##Handler(evenths, XCB##kind, (GenericEventHandler) handler, data); \ +} + +MAKE_HANDLER(Event, KeyPress) +MAKE_HANDLER(Event, KeyRelease) +MAKE_HANDLER(Event, ButtonPress) +MAKE_HANDLER(Event, ButtonRelease) +MAKE_HANDLER(Event, MotionNotify) +MAKE_HANDLER(Event, EnterNotify) +MAKE_HANDLER(Event, LeaveNotify) +MAKE_HANDLER(Event, FocusIn) +MAKE_HANDLER(Event, FocusOut) +MAKE_HANDLER(Event, KeymapNotify) +MAKE_HANDLER(Event, Expose) +MAKE_HANDLER(Event, GraphicsExposure) +MAKE_HANDLER(Event, NoExposure) +MAKE_HANDLER(Event, VisibilityNotify) +MAKE_HANDLER(Event, CreateNotify) +MAKE_HANDLER(Event, DestroyNotify) +MAKE_HANDLER(Event, UnmapNotify) +MAKE_HANDLER(Event, MapNotify) +MAKE_HANDLER(Event, MapRequest) +MAKE_HANDLER(Event, ReparentNotify) +MAKE_HANDLER(Event, ConfigureNotify) +MAKE_HANDLER(Event, ConfigureRequest) +MAKE_HANDLER(Event, GravityNotify) +MAKE_HANDLER(Event, ResizeRequest) +MAKE_HANDLER(Event, CirculateNotify) +MAKE_HANDLER(Event, CirculateRequest) +MAKE_HANDLER(Event, PropertyNotify) +MAKE_HANDLER(Event, SelectionClear) +MAKE_HANDLER(Event, SelectionRequest) +MAKE_HANDLER(Event, SelectionNotify) +MAKE_HANDLER(Event, ColormapNotify) +MAKE_HANDLER(Event, ClientMessage) +MAKE_HANDLER(Event, MappingNotify) + +#endif /* EVENTS_H */ diff --git a/xcb_util_intro.in b/xcb_util_intro.in new file mode 100644 index 0000000..482d658 --- /dev/null +++ b/xcb_util_intro.in @@ -0,0 +1,21 @@ +/** +@file +@brief XCB Utility functions + +These routines are used to facilitate the use of XCB in programs +*/ + +/** + +@mainpage XCB Utility Documentation +@version @PACKAGE_VERSION@ +@author Jamey Sharp <jamey@minilop.net> +@author Vincent Torri <torri@iecn.u-nancy.fr> +@date 2005 + + +@section intro What is available ? + +@todo Add more functions in XCBAux + +*/ |