Initial commit
[vulkan-misc.git] / 2d / kickstart / xcb_syms.c
blob9ecddc87af44253397a7a7871f08a3e2cad92930
1 #ifndef XCB_SYMS_C
2 #define XCB_SYMS_C
3 /*
4 * this is public domain without any warranties of any kind
5 * Sylvain BERTRAND
6 */
7 /* XXX: KEEP AN EYE ON ABBREVIATIONS */
8 #include <dlfcn.h>
9 #include <stdlib.h>
11 #include <xcb.h>
13 #include "app_core_types.h"
14 #include "log.h"
16 static void *xcb_client_lib;
18 static xcb_connection_t *(*dl_xcb_connect)(u8 *displayname, int *scr);
19 static u32 (*dl_xcb_generate_id)(xcb_connection_t *c);
20 static int (*dl_xcb_connection_has_error)(xcb_connection_t *c);
21 static xcb_setup_t *(*dl_xcb_get_setup)(xcb_connection_t *c);
22 static int (*dl_xcb_setup_roots_length)(xcb_setup_t *s);
23 static xcb_screen_iterator_t (*dl_xcb_setup_roots_iterator)(xcb_setup_t *s);
24 static void (*dl_xcb_screen_next)(xcb_screen_iterator_t *iter);
25 static void (*dl_xcb_create_window)(xcb_connection_t *c, u8 depth,
26 xcb_window_t wid, xcb_window_t parent, s16 x, s16 y, u16 width,
27 u16 heigth, u16 border_width, u16 class, xcb_visualid_t visual,
28 u32 value_mask, u32 *value_list);
29 static xcb_void_cookie_t (*dl_xcb_map_window)(xcb_connection_t *c,
30 xcb_window_t win);
31 static xcb_void_cookie_t (*dl_xcb_map_window_checked)(xcb_connection_t *c,
32 xcb_window_t win);
33 static xcb_generic_error_t *(*dl_xcb_request_check)(xcb_connection_t *c,
34 xcb_void_cookie_t cookie);
35 static int (*dl_xcb_flush)(xcb_connection_t *c);
36 static xcb_generic_event_t *(*dl_xcb_wait_for_event)(xcb_connection_t *c);
37 static xcb_generic_event_t *(*dl_xcb_poll_for_event)(xcb_connection_t *c);
38 static void (*dl_xcb_disconnect)(xcb_connection_t *c);
39 static xcb_void_cookie_t (*dl_xcb_change_property)(xcb_connection_t *c, u8 mode,
40 xcb_window_t window, xcb_atom_t property, xcb_atom_t type, u8 format,
41 u32 data_len, void *data);
43 static void app_xcb_client_lib_load(void)
45 xcb_client_lib = dlopen("libxcb.so.1", RTLD_LAZY);
46 if (xcb_client_lib == 0) {
47 LOG("0:MAIN:FATAL:%s:unable to load the xcb dynamic shared library\n", dlerror());
48 exit(1);
52 static void app_xcb_client_lib_close(void)
54 int r;
56 r = dlclose(xcb_client_lib);
57 if (r != 0) {
58 LOG("0:MAIN:FATAL:%d:%s:unable to close the xcb dynamic shared library\n", r, dlerror());
59 exit(1);
61 xcb_client_lib = 0;
63 /*----------------------------------------------------------------------------*/
64 #define XCB_DLSYM(x) \
65 dl_##x = dlsym(xcb_client_lib, #x); \
66 if (dl_##x == 0) { \
67 LOG("0:MAIN:FATAL:%s:unable to find " #x "\n", dlerror()); \
68 exit(1); \
70 static void app_xcb_syms(void)
72 XCB_DLSYM(xcb_connect);
73 XCB_DLSYM(xcb_generate_id);
74 XCB_DLSYM(xcb_connection_has_error);
75 XCB_DLSYM(xcb_get_setup);
76 XCB_DLSYM(xcb_setup_roots_length);
77 XCB_DLSYM(xcb_setup_roots_iterator);
78 XCB_DLSYM(xcb_screen_next);
79 XCB_DLSYM(xcb_create_window);
80 XCB_DLSYM(xcb_map_window);
81 XCB_DLSYM(xcb_map_window_checked);
82 XCB_DLSYM(xcb_request_check);
83 XCB_DLSYM(xcb_flush);
84 XCB_DLSYM(xcb_wait_for_event);
85 XCB_DLSYM(xcb_poll_for_event);
86 XCB_DLSYM(xcb_change_property);
87 XCB_DLSYM(xcb_disconnect);
89 #undef XCB_DLSYM
90 #endif /* X_SYMS_C */