xlib.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. /* Copyright 2001-2003 by Norbert Freudemann, David Frese */
  2. #ifndef _SCX_XLIB_H
  3. #define _SCX_XLIB_H
  4. #ifdef HAVE_CONFIG_H
  5. #include <sysdep.h>
  6. #endif
  7. #include <X11/X.h>
  8. #include <X11/Xlib.h>
  9. #include <X11/Xutil.h>
  10. #include <X11/Intrinsic.h>
  11. #include <pthread.h>
  12. #include <errno.h>
  13. #ifndef NeedFunctionPrototypes /* Kludge */
  14. #error "X11 Release 3 (or earlier) no longer supported"
  15. #endif
  16. #if XlibSpecificationRelease >= 5
  17. # define XLIB_RELEASE_5_OR_LATER
  18. #endif
  19. #if XlibSpecificationRelease >= 6
  20. # define XLIB_RELEASE_6_OR_LATER
  21. #endif
  22. #define NO_OLD_FFI 1
  23. #include <scheme48.h>
  24. extern char* mc_extract_string(s48_call_t call, s48_ref_t s);
  25. #define s48_enter_string s48_enter_string_latin_1_2
  26. #define s48_extract_string(c, s) mc_extract_string(c, s)
  27. extern s48_ref_t s48_checked_record_ref_2(s48_call_t call, s48_ref_t value,
  28. int i, s48_ref_t rectype);
  29. #define S48_EXTRACT_ENUM(c, x, type) \
  30. s48_extract_long_2(c, s48_checked_record_ref_2(c, x, 1, type))
  31. #define S48_ENTER_ENUM(c, index, vvector) \
  32. s48_vector_ref_2(c, s48_shared_binding_ref_2(c, vvector), index)
  33. #define S48_EXTRACT_ENUM_SET(c, x, type) s48_extract_enum_set(c, x, type)
  34. extern unsigned long s48_extract_enum_set(s48_call_t call, s48_ref_t v, s48_ref_t type);
  35. extern s48_ref_t s48_enter_enum_set(s48_call_t call, unsigned long v, s48_ref_t type);
  36. /*** Extraction-Macros for the XIDs ********************************/
  37. #define scx_extract_window(c, x) (Window)s48_extract_long_2(c, x)
  38. #define scx_enter_window(c, x) s48_enter_long_2(c, (long)x)
  39. #define scx_extract_drawable(c, x) (Drawable)s48_extract_long_2(c, x)
  40. #define scx_enter_drawable(c, x) s48_enter_long_2(c, (long)x)
  41. #define scx_extract_font(c, x) (Font)s48_extract_long_2(c, x)
  42. #define scx_enter_font(c, x) s48_enter_long_2(c, (long)x)
  43. #define scx_extract_pixmap(c, x) (Pixmap)s48_extract_long_2(c, x)
  44. #define scx_enter_pixmap(c, x) s48_enter_long_2(c, (long)x)
  45. #define scx_extract_cursor(c, x) (Cursor)s48_extract_long_2(c, x)
  46. #define scx_enter_cursor(c, x) s48_enter_long_2(c, (long)x)
  47. #define scx_extract_colormap(c, x) (Colormap)s48_extract_long_2(c, x)
  48. #define scx_enter_colormap(c, x) s48_enter_long_2(c, (long)x)
  49. #define scx_extract_gcontext(c, x) (GContext)s48_extract_long_2(c, x)
  50. #define scx_enter_gcontext(c, x) s48_enter_long_2(c, (long)x)
  51. #define scx_extract_keysym(c, x) (GContext)s48_extract_long_2(c, x)
  52. #define scx_enter_keysym(c, x) s48_enter_long_2(c, (long)x)
  53. /* other CARD32 */
  54. #define scx_enter_atom(c, x) s48_enter_long_2(c, (long)x)
  55. #define scx_extract_atom(c, x) (Atom)s48_extract_long_2(c, x)
  56. #define scx_enter_visualid(c, x) s48_enter_long_2(c, (long)x)
  57. #define scx_extract_visualid(c, x) (VisualID)s48_extract_long_2(c, x)
  58. #define scx_enter_time(c, x) s48_enter_long_2(c, x)
  59. #define scx_extract_time(c, x) (Time)s48_extract_long_2(c, x)
  60. /* other ints */
  61. #define scx_enter_keycode(c, x) s48_enter_long_as_fixnum_2(c, x)
  62. #define scx_extract_keycode(c, x) (KeyCode)s48_extract_long_2(c, x)
  63. #define scx_extract_pixel(c, x) (Pixel)s48_extract_long_2(c, x)
  64. #define scx_enter_pixel(c, x) s48_enter_long_2(c, (long)x)
  65. /* records */
  66. #define scx_extract_region(c, x) (Region)s48_extract_pointer_2(c, x)
  67. #define scx_enter_region(c, r) s48_enter_pointer_2(c, r)
  68. typedef struct node_ scx_node;
  69. struct node_
  70. {
  71. void *content;
  72. struct node_ *next;
  73. };
  74. typedef struct {
  75. pthread_t *event_thread;
  76. Display *display;
  77. pthread_mutex_t event_list_access_lock;
  78. pthread_mutex_t close_display_lock;
  79. scx_node *temp_events;
  80. long event_uid;
  81. } scx_event_bundle;
  82. extern s48_ref_t scx_display;
  83. extern Display* scx_extract_display(s48_call_t call, s48_ref_t dpy);
  84. extern s48_ref_t scx_enter_display(s48_call_t call,
  85. scx_event_bundle *display_bundle);
  86. //extern s48_ref_t scx_enter_display(s48_call_t call, Display* dpy);
  87. extern scx_event_bundle * scx_get_display_bundle(s48_call_t call, Display *dpy);
  88. extern scx_event_bundle* scx_extract_display_bundle(s48_call_t call, s48_ref_t dpy);
  89. #define SCX_DISPLAY_AFTER_FUNCTION(c, d) \
  90. s48_checked_record_ref_2(c, d, 14, scx_display)
  91. extern s48_ref_t scx_color;
  92. extern void scx_extract_color(s48_call_t call, s48_ref_t v, XColor* c);
  93. extern void scx_copy_color(s48_call_t call, const XColor* c, s48_ref_t v);
  94. extern s48_ref_t scx_enter_color(s48_call_t call, const XColor* c);
  95. extern s48_ref_t scx_gc;
  96. #define scx_extract_gc(c, x) \
  97. (GC)s48_extract_pointer_2(c, s48_checked_record_ref_2(c, x, 0, scx_gc))
  98. extern s48_ref_t scx_enter_gc(s48_call_t call, GC gc);
  99. extern s48_ref_t scx_fontstruct;
  100. #define scx_extract_fontstruct(c, x)\
  101. (XFontStruct*)s48_extract_pointer_2(c, s48_checked_record_ref_2(c, x, 0,\
  102. scx_fontstruct))
  103. extern s48_ref_t scx_enter_charstruct(s48_call_t call, XCharStruct* cs);
  104. extern s48_ref_t scx_enter_fontstruct(s48_call_t call, XFontStruct* fs);
  105. extern s48_ref_t scx_screenformat;
  106. #define scx_extract_screenformat(c, x)\
  107. (ScreenFormat*)s48_extract_long_2(c, s48_checked_record_ref_2(c, x, 0,\
  108. scx_screenformat))
  109. extern s48_ref_t scx_enter_screenformat(s48_call_t call, ScreenFormat* sf);
  110. extern s48_ref_t scx_visual;
  111. #define scx_extract_visual(c, x)\
  112. (Visual*)s48_extract_pointer_2(c, s48_checked_record_ref_2(c, x, 0,\
  113. scx_visual))
  114. extern s48_ref_t scx_enter_visual(s48_call_t call, Visual* vis);
  115. extern s48_ref_t scx_screen;
  116. #define scx_extract_screen(c, x)\
  117. (Screen*)s48_extract_pointer_2(c, s48_checked_record_ref_2(c, x, 0,\
  118. scx_screen))
  119. extern s48_ref_t scx_enter_screen(s48_call_t call, Screen* scr);
  120. extern void scx_extract_property(s48_call_t call, s48_ref_t p, Atom* type, int* format,
  121. char** data, int* nelements);
  122. extern s48_ref_t scx_enter_property(s48_call_t call, Atom type, int format, char* data,
  123. int nelements);
  124. extern s48_ref_t scx_enter_window_changes(s48_call_t call,
  125. XWindowChanges* WC, unsigned long mask);
  126. extern unsigned long scx_extract_window_changes(s48_call_t call,
  127. s48_ref_t changes, XWindowChanges* WC);
  128. extern s48_ref_t scx_enter_x_error(s48_call_t call, XErrorEvent* xe);
  129. extern void scx_extract_x_error(s48_call_t call, s48_ref_t e, XErrorEvent* xe);
  130. /* more types */
  131. extern s48_ref_t scx_event_mask_binding;
  132. #define scx_extract_event_mask(c, x) \
  133. S48_EXTRACT_ENUM_SET(c, x, scx_event_mask_binding)
  134. #define scx_enter_event_mask(c, x) s48_enter_enum_set(c, x, scx_event_mask_binding)
  135. extern s48_ref_t scx_gc_value_binding;
  136. extern s48_ref_t scx_gc_values_binding;
  137. #define scx_extract_gc_value(c, x) S48_EXTRACT_ENUM(c, x, scx_gc_value_binding)
  138. #define scx_enter_gc_value(c, x) S48_ENTER_ENUM(c, x, scx_gc_values_binding)
  139. extern s48_ref_t scx_byte_order_binding;
  140. extern s48_ref_t scx_byte_orders_binding;
  141. #define scx_extract_byte_order(c, x) S48_EXTRACT_ENUM(c, x, scx_byte_order_binding)
  142. #define scx_enter_byte_order(c, x) S48_ENTER_ENUM(c, x, scx_byte_orders_binding)
  143. extern s48_ref_t scx_bit_order_binding;
  144. extern s48_ref_t scx_bit_orders_binding;
  145. #define scx_extract_bit_order(c, x) S48_EXTRACT_ENUM(c, x, scx_bit_order_binding)
  146. #define scx_enter_bit_order(c, x) S48_ENTER_ENUM(c, x, scx_bit_orders_binding)
  147. extern s48_ref_t scx_bit_gravity_binding;
  148. extern s48_ref_t scx_bit_gravities_binding;
  149. #define scx_extract_bit_gravity(c, x) S48_EXTRACT_ENUM(c, x, scx_bit_gravity_binding)
  150. #define scx_enter_bit_gravity(c, x) S48_ENTER_ENUM(c, x, scx_bit_gravities_binding)
  151. extern s48_ref_t scx_win_gravity_binding;
  152. extern s48_ref_t scx_win_gravities_binding;
  153. #define scx_extract_win_gravity(c, x) S48_EXTRACT_ENUM(c, x, scx_win_gravity_binding)
  154. #define scx_enter_win_gravity(c, x) S48_ENTER_ENUM(c, x, scx_win_gravities_binding)
  155. extern s48_ref_t scx_event_type_binding;
  156. extern s48_ref_t scx_event_types_binding;
  157. #define scx_extract_event_type(c, x) S48_EXTRACT_ENUM(c, x, scx_event_type_binding)
  158. #define scx_enter_event_type(c, x) S48_ENTER_ENUM(c, x, scx_event_types_binding)
  159. extern s48_ref_t scx_font_direction_binding;
  160. extern s48_ref_t scx_font_directions_binding;
  161. #define scx_extract_font_direction(c, x) \
  162. S48_EXTRACT_ENUM(c, x, scx_font_direction_binding)
  163. #define scx_enter_font_direction(c, x) \
  164. S48_ENTER_ENUM(c, x, scx_font_directions_binding)
  165. extern s48_ref_t scx_state_binding;
  166. extern s48_ref_t scx_states_binding;
  167. #define scx_extract_state(c, x) S48_EXTRACT_ENUM(c, x, scx_state_binding)
  168. #define scx_enter_state(c, x) S48_ENTER_ENUM(c, x, scx_states_binding)
  169. extern s48_ref_t scx_state_set_binding;
  170. #define scx_extract_state_set(c, x) S48_EXTRACT_ENUM_SET(c, x, scx_state_set_binding)
  171. #define scx_enter_state_set(c, x) s48_enter_enum_set(c, x, scx_state_set_binding)
  172. extern s48_ref_t scx_button_binding;
  173. extern s48_ref_t scx_buttons_binding;
  174. #define scx_extract_button(c, x) S48_EXTRACT_ENUM(c, x, scx_button_binding)
  175. #define scx_enter_button(c, x) S48_ENTER_ENUM(c, x, scx_buttons_binding)
  176. extern s48_ref_t scx_notify_mode_binding;
  177. extern s48_ref_t scx_notify_modes_binding;
  178. #define scx_extract_notify_mode(c, x) S48_EXTRACT_ENUM(c, x, scx_notify_mode_binding)
  179. #define scx_enter_notify_mode(c, x) S48_ENTER_ENUM(c, x, scx_notify_modes_binding)
  180. extern s48_ref_t scx_notify_detail_binding;
  181. extern s48_ref_t scx_notify_details_binding;
  182. #define scx_extract_notify_detail(c, x) \
  183. S48_EXTRACT_ENUM(c, x, scx_notify_detail_binding)
  184. #define scx_enter_notify_detail(c, x) \
  185. S48_ENTER_ENUM(c, x, scx_notify_details_binding)
  186. extern s48_ref_t scx_visibility_state_binding;
  187. extern s48_ref_t scx_visibility_states_binding;
  188. #define scx_extract_visibility_state(c, x) \
  189. S48_EXTRACT_ENUM(c, x, scx_visibility_state_binding)
  190. #define scx_enter_visibility_state(c, x) \
  191. S48_ENTER_ENUM(c, x, scx_visibility_states_binding)
  192. extern s48_ref_t scx_place_binding;
  193. extern s48_ref_t scx_places_binding;
  194. #define scx_extract_place(c, x) S48_EXTRACT_ENUM(c, x, scx_place_binding)
  195. #define scx_enter_place(c, x) S48_ENTER_ENUM(c, x, scx_places_binding)
  196. extern s48_ref_t scx_property_state_binding;
  197. extern s48_ref_t scx_property_states_binding;
  198. #define scx_extract_property_state(c, x) \
  199. S48_EXTRACT_ENUM(c, x, scx_property_state_binding)
  200. #define scx_enter_property_state(c, x) \
  201. S48_ENTER_ENUM(c, x, scx_property_states_binding)
  202. extern s48_ref_t scx_colormap_state_binding;
  203. extern s48_ref_t scx_colormap_states_binding;
  204. #define scx_extract_colormap_state(c, x) \
  205. S48_EXTRACT_ENUM(c, x, scx_colormap_state_binding)
  206. #define scx_enter_colormap_state(c, x) \
  207. S48_ENTER_ENUM(c, x, scx_colormap_states_binding)
  208. extern s48_ref_t scx_mapping_request_binding;
  209. extern s48_ref_t scx_mapping_requests_binding;
  210. #define scx_extract_mapping_request(c, x) \
  211. S48_EXTRACT_ENUM(c, x, scx_mapping_request_binding)
  212. #define scx_enter_mapping_request(c, x) \
  213. S48_ENTER_ENUM(c, x, scx_mapping_requests_binding)
  214. extern s48_ref_t scx_backing_store_binding;
  215. extern s48_ref_t scx_backing_stores_binding;
  216. #define scx_extract_backing_store(c, x) \
  217. S48_EXTRACT_ENUM(c, x, scx_backing_store_binding)
  218. #define scx_enter_backing_store(c, x) \
  219. S48_ENTER_ENUM(c, x, scx_backing_stores_binding)
  220. extern s48_ref_t scx_map_state_binding;
  221. extern s48_ref_t scx_map_states_binding;
  222. #define scx_extract_map_state(c, x) S48_EXTRACT_ENUM(c, x, scx_map_state_binding)
  223. #define scx_enter_map_state(c, x) S48_ENTER_ENUM(c, x, scx_map_states_binding)
  224. extern s48_ref_t scx_window_class_binding;
  225. extern s48_ref_t scx_window_classes_binding;
  226. #define scx_extract_window_class(c, x) \
  227. S48_EXTRACT_ENUM(c, x, scx_window_class_binding)
  228. #define scx_enter_window_class(c, x) \
  229. S48_ENTER_ENUM(c, x, scx_window_classes_binding)
  230. extern s48_ref_t scx_stack_mode_binding;
  231. extern s48_ref_t scx_stack_modes_binding;
  232. #define scx_extract_stack_mode(c, x) S48_EXTRACT_ENUM(c, x, scx_stack_mode_binding)
  233. #define scx_enter_stack_mode(c, x) S48_ENTER_ENUM(c, x, scx_stack_modes_binding)
  234. extern s48_ref_t scx_window_change_binding;
  235. extern s48_ref_t scx_window_changes_binding;
  236. #define scx_extract_window_change(c, x) \
  237. S48_EXTRACT_ENUM(c, x, scx_window_change_binding)
  238. #define scx_enter_window_change(c, x) \
  239. S48_ENTER_ENUM(c, x, scx_window_changes_binding)
  240. extern s48_ref_t scx_struct_cache_ref(s48_call_t call,
  241. void* cpointer, s48_ref_t list);
  242. extern s48_ref_t scx_enter_event(s48_call_t call, XEvent* e,
  243. scx_event_bundle* bundle);
  244. extern s48_call_t s48_get_current_call (void);
  245. extern void scx_struct_cache_set(s48_call_t call, void* cpointer, s48_ref_t* l, s48_ref_t v);
  246. extern void scx_extract_event(s48_call_t call, s48_ref_t se, XEvent* e);
  247. extern void scx_extract_key_event(s48_call_t call, s48_ref_t e, XKeyEvent* xe);
  248. extern void scx_extract_mapping_event(s48_call_t call, s48_ref_t e, XMappingEvent* xe);
  249. #endif