1#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
2#![allow(improper_ctypes)]
3#![allow(improper_ctypes_definitions)]
4#![allow(
5 unused_variables,
6 dead_code,
7 mutable_transmutes,
8 non_camel_case_types,
9 non_snake_case,
10 non_upper_case_globals,
11 unused_assignments,
12 unused_mut
13)]
14
15pub mod gl;
16mod rand;
17mod x;
18mod x_cursor;
19mod xi_input;
20
21pub mod clipboard;
22
23pub use gl::*;
24pub use rand::*;
25
26use std::path::PathBuf;
27
28use crate::x::*;
29
30pub type sapp_event_type = libc::c_uint;
31pub const sapp_event_type__SAPP_EVENTTYPE_FORCE_U32: sapp_event_type = 2147483647;
32pub const sapp_event_type__SAPP_EVENTTYPE_NUM: sapp_event_type = 23;
33pub const sapp_event_type_SAPP_EVENTTYPE_FILES_DROPPED: sapp_event_type = 22;
34pub const sapp_event_type_SAPP_EVENTTYPE_RAW_DEVICE: sapp_event_type = 21;
35pub const sapp_event_type_SAPP_EVENTTYPE_QUIT_REQUESTED: sapp_event_type = 20;
36pub const sapp_event_type_SAPP_EVENTTYPE_UPDATE_CURSOR: sapp_event_type = 19;
37pub const sapp_event_type_SAPP_EVENTTYPE_RESUMED: sapp_event_type = 18;
38pub const sapp_event_type_SAPP_EVENTTYPE_SUSPENDED: sapp_event_type = 17;
39pub const sapp_event_type_SAPP_EVENTTYPE_RESTORED: sapp_event_type = 16;
40pub const sapp_event_type_SAPP_EVENTTYPE_ICONIFIED: sapp_event_type = 15;
41pub const sapp_event_type_SAPP_EVENTTYPE_RESIZED: sapp_event_type = 14;
42pub const sapp_event_type_SAPP_EVENTTYPE_TOUCHES_CANCELLED: sapp_event_type = 13;
43pub const sapp_event_type_SAPP_EVENTTYPE_TOUCHES_ENDED: sapp_event_type = 12;
44pub const sapp_event_type_SAPP_EVENTTYPE_TOUCHES_MOVED: sapp_event_type = 11;
45pub const sapp_event_type_SAPP_EVENTTYPE_TOUCHES_BEGAN: sapp_event_type = 10;
46pub const sapp_event_type_SAPP_EVENTTYPE_MOUSE_LEAVE: sapp_event_type = 9;
47pub const sapp_event_type_SAPP_EVENTTYPE_MOUSE_ENTER: sapp_event_type = 8;
48pub const sapp_event_type_SAPP_EVENTTYPE_MOUSE_MOVE: sapp_event_type = 7;
49pub const sapp_event_type_SAPP_EVENTTYPE_MOUSE_SCROLL: sapp_event_type = 6;
50pub const sapp_event_type_SAPP_EVENTTYPE_MOUSE_UP: sapp_event_type = 5;
51pub const sapp_event_type_SAPP_EVENTTYPE_MOUSE_DOWN: sapp_event_type = 4;
52pub const sapp_event_type_SAPP_EVENTTYPE_CHAR: sapp_event_type = 3;
53pub const sapp_event_type_SAPP_EVENTTYPE_KEY_UP: sapp_event_type = 2;
54pub const sapp_event_type_SAPP_EVENTTYPE_KEY_DOWN: sapp_event_type = 1;
55pub const sapp_event_type_SAPP_EVENTTYPE_INVALID: sapp_event_type = 0;
56
57pub type sapp_keycode = libc::c_uint;
58pub const sapp_keycode_SAPP_KEYCODE_MENU: sapp_keycode = 348;
59pub const sapp_keycode_SAPP_KEYCODE_RIGHT_SUPER: sapp_keycode = 347;
60pub const sapp_keycode_SAPP_KEYCODE_RIGHT_ALT: sapp_keycode = 346;
61pub const sapp_keycode_SAPP_KEYCODE_RIGHT_CONTROL: sapp_keycode = 345;
62pub const sapp_keycode_SAPP_KEYCODE_RIGHT_SHIFT: sapp_keycode = 344;
63pub const sapp_keycode_SAPP_KEYCODE_LEFT_SUPER: sapp_keycode = 343;
64pub const sapp_keycode_SAPP_KEYCODE_LEFT_ALT: sapp_keycode = 342;
65pub const sapp_keycode_SAPP_KEYCODE_LEFT_CONTROL: sapp_keycode = 341;
66pub const sapp_keycode_SAPP_KEYCODE_LEFT_SHIFT: sapp_keycode = 340;
67pub const sapp_keycode_SAPP_KEYCODE_KP_EQUAL: sapp_keycode = 336;
68pub const sapp_keycode_SAPP_KEYCODE_KP_ENTER: sapp_keycode = 335;
69pub const sapp_keycode_SAPP_KEYCODE_KP_ADD: sapp_keycode = 334;
70pub const sapp_keycode_SAPP_KEYCODE_KP_SUBTRACT: sapp_keycode = 333;
71pub const sapp_keycode_SAPP_KEYCODE_KP_MULTIPLY: sapp_keycode = 332;
72pub const sapp_keycode_SAPP_KEYCODE_KP_DIVIDE: sapp_keycode = 331;
73pub const sapp_keycode_SAPP_KEYCODE_KP_DECIMAL: sapp_keycode = 330;
74pub const sapp_keycode_SAPP_KEYCODE_KP_9: sapp_keycode = 329;
75pub const sapp_keycode_SAPP_KEYCODE_KP_8: sapp_keycode = 328;
76pub const sapp_keycode_SAPP_KEYCODE_KP_7: sapp_keycode = 327;
77pub const sapp_keycode_SAPP_KEYCODE_KP_6: sapp_keycode = 326;
78pub const sapp_keycode_SAPP_KEYCODE_KP_5: sapp_keycode = 325;
79pub const sapp_keycode_SAPP_KEYCODE_KP_4: sapp_keycode = 324;
80pub const sapp_keycode_SAPP_KEYCODE_KP_3: sapp_keycode = 323;
81pub const sapp_keycode_SAPP_KEYCODE_KP_2: sapp_keycode = 322;
82pub const sapp_keycode_SAPP_KEYCODE_KP_1: sapp_keycode = 321;
83pub const sapp_keycode_SAPP_KEYCODE_KP_0: sapp_keycode = 320;
84pub const sapp_keycode_SAPP_KEYCODE_F25: sapp_keycode = 314;
85pub const sapp_keycode_SAPP_KEYCODE_F24: sapp_keycode = 313;
86pub const sapp_keycode_SAPP_KEYCODE_F23: sapp_keycode = 312;
87pub const sapp_keycode_SAPP_KEYCODE_F22: sapp_keycode = 311;
88pub const sapp_keycode_SAPP_KEYCODE_F21: sapp_keycode = 310;
89pub const sapp_keycode_SAPP_KEYCODE_F20: sapp_keycode = 309;
90pub const sapp_keycode_SAPP_KEYCODE_F19: sapp_keycode = 308;
91pub const sapp_keycode_SAPP_KEYCODE_F18: sapp_keycode = 307;
92pub const sapp_keycode_SAPP_KEYCODE_F17: sapp_keycode = 306;
93pub const sapp_keycode_SAPP_KEYCODE_F16: sapp_keycode = 305;
94pub const sapp_keycode_SAPP_KEYCODE_F15: sapp_keycode = 304;
95pub const sapp_keycode_SAPP_KEYCODE_F14: sapp_keycode = 303;
96pub const sapp_keycode_SAPP_KEYCODE_F13: sapp_keycode = 302;
97pub const sapp_keycode_SAPP_KEYCODE_F12: sapp_keycode = 301;
98pub const sapp_keycode_SAPP_KEYCODE_F11: sapp_keycode = 300;
99pub const sapp_keycode_SAPP_KEYCODE_F10: sapp_keycode = 299;
100pub const sapp_keycode_SAPP_KEYCODE_F9: sapp_keycode = 298;
101pub const sapp_keycode_SAPP_KEYCODE_F8: sapp_keycode = 297;
102pub const sapp_keycode_SAPP_KEYCODE_F7: sapp_keycode = 296;
103pub const sapp_keycode_SAPP_KEYCODE_F6: sapp_keycode = 295;
104pub const sapp_keycode_SAPP_KEYCODE_F5: sapp_keycode = 294;
105pub const sapp_keycode_SAPP_KEYCODE_F4: sapp_keycode = 293;
106pub const sapp_keycode_SAPP_KEYCODE_F3: sapp_keycode = 292;
107pub const sapp_keycode_SAPP_KEYCODE_F2: sapp_keycode = 291;
108pub const sapp_keycode_SAPP_KEYCODE_F1: sapp_keycode = 290;
109pub const sapp_keycode_SAPP_KEYCODE_PAUSE: sapp_keycode = 284;
110pub const sapp_keycode_SAPP_KEYCODE_PRINT_SCREEN: sapp_keycode = 283;
111pub const sapp_keycode_SAPP_KEYCODE_NUM_LOCK: sapp_keycode = 282;
112pub const sapp_keycode_SAPP_KEYCODE_SCROLL_LOCK: sapp_keycode = 281;
113pub const sapp_keycode_SAPP_KEYCODE_CAPS_LOCK: sapp_keycode = 280;
114pub const sapp_keycode_SAPP_KEYCODE_END: sapp_keycode = 269;
115pub const sapp_keycode_SAPP_KEYCODE_HOME: sapp_keycode = 268;
116pub const sapp_keycode_SAPP_KEYCODE_PAGE_DOWN: sapp_keycode = 267;
117pub const sapp_keycode_SAPP_KEYCODE_PAGE_UP: sapp_keycode = 266;
118pub const sapp_keycode_SAPP_KEYCODE_UP: sapp_keycode = 265;
119pub const sapp_keycode_SAPP_KEYCODE_DOWN: sapp_keycode = 264;
120pub const sapp_keycode_SAPP_KEYCODE_LEFT: sapp_keycode = 263;
121pub const sapp_keycode_SAPP_KEYCODE_RIGHT: sapp_keycode = 262;
122pub const sapp_keycode_SAPP_KEYCODE_DELETE: sapp_keycode = 261;
123pub const sapp_keycode_SAPP_KEYCODE_INSERT: sapp_keycode = 260;
124pub const sapp_keycode_SAPP_KEYCODE_BACKSPACE: sapp_keycode = 259;
125pub const sapp_keycode_SAPP_KEYCODE_TAB: sapp_keycode = 258;
126pub const sapp_keycode_SAPP_KEYCODE_ENTER: sapp_keycode = 257;
127pub const sapp_keycode_SAPP_KEYCODE_ESCAPE: sapp_keycode = 256;
128pub const sapp_keycode_SAPP_KEYCODE_WORLD_2: sapp_keycode = 162;
129pub const sapp_keycode_SAPP_KEYCODE_WORLD_1: sapp_keycode = 161;
130pub const sapp_keycode_SAPP_KEYCODE_GRAVE_ACCENT: sapp_keycode = 96;
131pub const sapp_keycode_SAPP_KEYCODE_RIGHT_BRACKET: sapp_keycode = 93;
132pub const sapp_keycode_SAPP_KEYCODE_BACKSLASH: sapp_keycode = 92;
133pub const sapp_keycode_SAPP_KEYCODE_LEFT_BRACKET: sapp_keycode = 91;
134pub const sapp_keycode_SAPP_KEYCODE_Z: sapp_keycode = 90;
135pub const sapp_keycode_SAPP_KEYCODE_Y: sapp_keycode = 89;
136pub const sapp_keycode_SAPP_KEYCODE_X: sapp_keycode = 88;
137pub const sapp_keycode_SAPP_KEYCODE_W: sapp_keycode = 87;
138pub const sapp_keycode_SAPP_KEYCODE_V: sapp_keycode = 86;
139pub const sapp_keycode_SAPP_KEYCODE_U: sapp_keycode = 85;
140pub const sapp_keycode_SAPP_KEYCODE_T: sapp_keycode = 84;
141pub const sapp_keycode_SAPP_KEYCODE_S: sapp_keycode = 83;
142pub const sapp_keycode_SAPP_KEYCODE_R: sapp_keycode = 82;
143pub const sapp_keycode_SAPP_KEYCODE_Q: sapp_keycode = 81;
144pub const sapp_keycode_SAPP_KEYCODE_P: sapp_keycode = 80;
145pub const sapp_keycode_SAPP_KEYCODE_O: sapp_keycode = 79;
146pub const sapp_keycode_SAPP_KEYCODE_N: sapp_keycode = 78;
147pub const sapp_keycode_SAPP_KEYCODE_M: sapp_keycode = 77;
148pub const sapp_keycode_SAPP_KEYCODE_L: sapp_keycode = 76;
149pub const sapp_keycode_SAPP_KEYCODE_K: sapp_keycode = 75;
150pub const sapp_keycode_SAPP_KEYCODE_J: sapp_keycode = 74;
151pub const sapp_keycode_SAPP_KEYCODE_I: sapp_keycode = 73;
152pub const sapp_keycode_SAPP_KEYCODE_H: sapp_keycode = 72;
153pub const sapp_keycode_SAPP_KEYCODE_G: sapp_keycode = 71;
154pub const sapp_keycode_SAPP_KEYCODE_F: sapp_keycode = 70;
155pub const sapp_keycode_SAPP_KEYCODE_E: sapp_keycode = 69;
156pub const sapp_keycode_SAPP_KEYCODE_D: sapp_keycode = 68;
157pub const sapp_keycode_SAPP_KEYCODE_C: sapp_keycode = 67;
158pub const sapp_keycode_SAPP_KEYCODE_B: sapp_keycode = 66;
159pub const sapp_keycode_SAPP_KEYCODE_A: sapp_keycode = 65;
160pub const sapp_keycode_SAPP_KEYCODE_EQUAL: sapp_keycode = 61;
161pub const sapp_keycode_SAPP_KEYCODE_SEMICOLON: sapp_keycode = 59;
162pub const sapp_keycode_SAPP_KEYCODE_9: sapp_keycode = 57;
163pub const sapp_keycode_SAPP_KEYCODE_8: sapp_keycode = 56;
164pub const sapp_keycode_SAPP_KEYCODE_7: sapp_keycode = 55;
165pub const sapp_keycode_SAPP_KEYCODE_6: sapp_keycode = 54;
166pub const sapp_keycode_SAPP_KEYCODE_5: sapp_keycode = 53;
167pub const sapp_keycode_SAPP_KEYCODE_4: sapp_keycode = 52;
168pub const sapp_keycode_SAPP_KEYCODE_3: sapp_keycode = 51;
169pub const sapp_keycode_SAPP_KEYCODE_2: sapp_keycode = 50;
170pub const sapp_keycode_SAPP_KEYCODE_1: sapp_keycode = 49;
171pub const sapp_keycode_SAPP_KEYCODE_0: sapp_keycode = 48;
172pub const sapp_keycode_SAPP_KEYCODE_SLASH: sapp_keycode = 47;
173pub const sapp_keycode_SAPP_KEYCODE_PERIOD: sapp_keycode = 46;
174pub const sapp_keycode_SAPP_KEYCODE_MINUS: sapp_keycode = 45;
175pub const sapp_keycode_SAPP_KEYCODE_COMMA: sapp_keycode = 44;
176pub const sapp_keycode_SAPP_KEYCODE_APOSTROPHE: sapp_keycode = 39;
177pub const sapp_keycode_SAPP_KEYCODE_SPACE: sapp_keycode = 32;
178pub const sapp_keycode_SAPP_KEYCODE_INVALID: sapp_keycode = 0;
179
180#[derive(Copy, Clone)]
181#[repr(C)]
182pub struct sapp_touchpoint {
183 pub identifier: libc::c_ulong,
184 pub pos_x: libc::c_float,
185 pub pos_y: libc::c_float,
186 pub changed: bool,
187}
188
189pub type sapp_mousebutton = libc::c_int;
190pub const sapp_mousebutton_SAPP_MOUSEBUTTON_MIDDLE: sapp_mousebutton = 2;
191pub const sapp_mousebutton_SAPP_MOUSEBUTTON_RIGHT: sapp_mousebutton = 1;
192pub const sapp_mousebutton_SAPP_MOUSEBUTTON_LEFT: sapp_mousebutton = 0;
193pub const sapp_mousebutton_SAPP_MOUSEBUTTON_INVALID: sapp_mousebutton = -1;
194
195pub const SAPP_MODIFIER_SHIFT: libc::c_uint = 1 << 0;
196pub const SAPP_MODIFIER_CTRL: libc::c_uint = 1 << 1;
197pub const SAPP_MODIFIER_ALT: libc::c_uint = 1 << 2;
198pub const SAPP_MODIFIER_SUPER: libc::c_uint = 1 << 3;
199
200pub const SAPP_CURSOR_DEFAULT: u32 = 0;
201pub const SAPP_CURSOR_HELP: u32 = 1;
202pub const SAPP_CURSOR_POINTER: u32 = 2;
203pub const SAPP_CURSOR_WAIT: u32 = 3;
204pub const SAPP_CURSOR_CROSSHAIR: u32 = 4;
205pub const SAPP_CURSOR_TEXT: u32 = 5;
206pub const SAPP_CURSOR_MOVE: u32 = 6;
207pub const SAPP_CURSOR_NOTALLOWED: u32 = 7;
208pub const SAPP_CURSOR_EWRESIZE: u32 = 8;
209pub const SAPP_CURSOR_NSRESIZE: u32 = 9;
210pub const SAPP_CURSOR_NESWRESIZE: u32 = 10;
211pub const SAPP_CURSOR_NWSERESIZE: u32 = 11;
212pub const SAPP_CURSOR_NUM: usize = 12; #[derive(Copy, Clone)]
215#[repr(C)]
216pub struct sapp_xdnd_atoms {
217 aware: Atom,
218 enter: Atom,
219 position: Atom,
220 status: Atom,
221 action_copy: Atom,
222 drop: Atom,
223 finished: Atom,
224 selection: Atom,
225 type_list: Atom,
226 text_uri_list: Atom,
227}
228
229#[derive(Copy, Clone)]
230#[repr(C)]
231pub struct sapp_xdnd {
232 version: Atom,
233 format: Atom,
234 source: Window,
235 atoms: sapp_xdnd_atoms,
236}
237
238#[derive(Copy, Clone)]
239#[repr(C)]
240pub struct sapp_event {
241 pub frame_count: u64,
242 pub type_: sapp_event_type,
243 pub key_code: sapp_keycode,
244 pub char_code: u32,
245 pub key_repeat: bool,
246 pub modifiers: u32,
247 pub mouse_button: sapp_mousebutton,
248 pub mouse_x: libc::c_float,
249 pub mouse_y: libc::c_float,
250 pub mouse_dx: libc::c_float,
251 pub mouse_dy: libc::c_float,
252 pub scroll_x: libc::c_float,
253 pub scroll_y: libc::c_float,
254 pub num_touches: libc::c_int,
255 pub touches: [sapp_touchpoint; 8],
256 pub window_width: libc::c_int,
257 pub window_height: libc::c_int,
258 pub framebuffer_width: libc::c_int,
259 pub framebuffer_height: libc::c_int,
260}
261
262#[derive(Clone)]
263pub struct sapp_drop {
264 pub file_paths: Vec<PathBuf>,
265}
266
267#[derive(Copy, Clone)]
268#[repr(C)]
269pub struct sapp_desc {
270 pub init_cb: Option<unsafe extern "C" fn() -> ()>,
271 pub frame_cb: Option<unsafe extern "C" fn() -> ()>,
272 pub cleanup_cb: Option<unsafe extern "C" fn() -> ()>,
273 pub event_cb: Option<unsafe extern "C" fn(_: *const sapp_event) -> ()>,
274 pub fail_cb: Option<unsafe extern "C" fn(_: *const libc::c_char) -> ()>,
275 pub user_data: *mut libc::c_void,
276 pub init_userdata_cb: Option<unsafe extern "C" fn(_: *mut libc::c_void) -> ()>,
277 pub frame_userdata_cb: Option<unsafe extern "C" fn(_: *mut libc::c_void) -> ()>,
278 pub cleanup_userdata_cb: Option<unsafe extern "C" fn(_: *mut libc::c_void) -> ()>,
279 pub event_userdata_cb:
280 Option<unsafe extern "C" fn(_: *const sapp_event, _: *mut libc::c_void) -> ()>,
281 pub fail_userdata_cb:
282 Option<unsafe extern "C" fn(_: *const libc::c_char, _: *mut libc::c_void) -> ()>,
283 pub width: libc::c_int,
284 pub height: libc::c_int,
285 pub window_resizable: bool,
286 pub sample_count: libc::c_int,
287 pub swap_interval: libc::c_int,
288 pub high_dpi: bool,
289 pub fullscreen: bool,
290 pub alpha: bool,
291 pub window_title: *const libc::c_char,
292 pub user_cursor: bool,
293 pub html5_canvas_name: *const libc::c_char,
294 pub html5_canvas_resize: bool,
295 pub html5_preserve_drawing_buffer: bool,
296 pub html5_premultiplied_alpha: bool,
297 pub html5_ask_leave_site: bool,
298 pub ios_keyboard_resizes_canvas: bool,
299 pub gl_force_gles2: bool,
300}
301#[derive(Clone)]
302pub struct _sapp_state {
303 pub valid: bool,
304 pub window_width: libc::c_int,
305 pub window_height: libc::c_int,
306 pub framebuffer_width: libc::c_int,
307 pub framebuffer_height: libc::c_int,
308 pub sample_count: libc::c_int,
309 pub swap_interval: libc::c_int,
310 pub dpi_scale: libc::c_float,
311 pub gles2_fallback: bool,
312 pub first_frame: bool,
313 pub init_called: bool,
314 pub cleanup_called: bool,
315 pub quit_requested: bool,
316 pub quit_ordered: bool,
317 pub html5_canvas_name: *const libc::c_char,
318 pub html5_ask_leave_site: bool,
319 pub window_title: [libc::c_char; 128],
320 pub window_title_wide: [i32; 128],
321 pub frame_count: u64,
322 pub mouse_x: libc::c_float,
323 pub mouse_y: libc::c_float,
324 pub win32_mouse_tracked: bool,
325 pub onscreen_keyboard_shown: bool,
326 pub event: sapp_event,
327 pub desc: sapp_desc,
328 pub keycodes: [sapp_keycode; 512],
329 pub xdnd: sapp_xdnd,
330 pub drop: sapp_drop,
331}
332
333static mut _sapp_xi_extension_opcode: i32 = -1;
335
336static mut _sapp_empty_cursor: x_cursor::Cursor = 0;
337static mut _sapp_cursor_cache: [x_cursor::Cursor; SAPP_CURSOR_NUM] = [0; SAPP_CURSOR_NUM];
338static mut _sapp_cursor_icon: u32 = SAPP_CURSOR_DEFAULT;
339static mut _sapp_cursor_shown: bool = true;
340
341pub type GLXContext = *mut __GLXcontext;
342pub type PFNGLXDESTROYCONTEXTPROC =
343 Option<unsafe extern "C" fn(_: *mut Display, _: GLXContext) -> ()>;
344pub type GLXWindow = XID;
345pub type PFNGLXDESTROYWINDOWPROC =
346 Option<unsafe extern "C" fn(_: *mut Display, _: GLXWindow) -> ()>;
347pub type PFNGLXSWAPBUFFERSPROC =
348 Option<unsafe extern "C" fn(_: *mut Display, _: GLXDrawable) -> ()>;
349pub type GLXDrawable = XID;
350#[derive(Copy, Clone)]
351#[repr(C)]
352pub struct C2RustUnnamed_1 {
353 pub state: CARD32,
354 pub icon: Window,
355}
356#[derive(Copy, Clone)]
357#[repr(C)]
358pub struct _sapp_x11_codepair {
359 pub keysym: u16,
360 pub ucs: u16,
361}
362impl _sapp_x11_codepair {
363 const fn new(keysym: u16, ucs: u16) -> _sapp_x11_codepair {
364 _sapp_x11_codepair { keysym, ucs }
365 }
366}
367pub type PFNGLXMAKECURRENTPROC =
368 Option<unsafe extern "C" fn(_: *mut Display, _: GLXDrawable, _: GLXContext) -> libc::c_int>;
369pub type PFNGLXSWAPINTERVALMESAPROC = Option<unsafe extern "C" fn(_: libc::c_int) -> libc::c_int>;
370pub type PFNGLXSWAPINTERVALEXTPROC =
371 Option<unsafe extern "C" fn(_: *mut Display, _: GLXDrawable, _: libc::c_int) -> ()>;
372pub type GLXFBConfig = *mut __GLXFBConfig;
373#[derive(Copy, Clone)]
374#[repr(C)]
375pub struct _sapp_gl_fbconfig {
376 pub red_bits: libc::c_int,
377 pub green_bits: libc::c_int,
378 pub blue_bits: libc::c_int,
379 pub alpha_bits: libc::c_int,
380 pub depth_bits: libc::c_int,
381 pub stencil_bits: libc::c_int,
382 pub samples: libc::c_int,
383 pub doublebuffer: bool,
384 pub handle: libc::c_ulong,
385}
386pub type PFNGLXGETFBCONFIGATTRIBPROC = Option<
387 unsafe extern "C" fn(
388 _: *mut Display,
389 _: GLXFBConfig,
390 _: libc::c_int,
391 _: *mut libc::c_int,
392 ) -> libc::c_int,
393>;
394pub type PFNGLXGETFBCONFIGSPROC = Option<
395 unsafe extern "C" fn(_: *mut Display, _: libc::c_int, _: *mut libc::c_int) -> *mut GLXFBConfig,
396>;
397pub type PFNGLXGETCLIENTSTRINGPROC =
398 Option<unsafe extern "C" fn(_: *mut Display, _: libc::c_int) -> *const libc::c_char>;
399pub type PFNGLXCREATEWINDOWPROC = Option<
400 unsafe extern "C" fn(
401 _: *mut Display,
402 _: GLXFBConfig,
403 _: Window,
404 _: *const libc::c_int,
405 ) -> GLXWindow,
406>;
407pub type PFNGLXCREATECONTEXTATTRIBSARBPROC = Option<
408 unsafe extern "C" fn(
409 _: *mut Display,
410 _: GLXFBConfig,
411 _: GLXContext,
412 _: libc::c_int,
413 _: *const libc::c_int,
414 ) -> GLXContext,
415>;
416pub type PFNGLXGETVISUALFROMFBCONFIGPROC =
417 Option<unsafe extern "C" fn(_: *mut Display, _: GLXFBConfig) -> *mut XVisualInfo>;
418pub type PFNGLXQUERYEXTENSIONSSTRINGPROC =
419 Option<unsafe extern "C" fn(_: *mut Display, _: libc::c_int) -> *const libc::c_char>;
420pub type __GLXextproc = Option<unsafe extern "C" fn() -> ()>;
421pub type PFNGLXGETPROCADDRESSPROC = Option<unsafe extern "C" fn(_: *const GLubyte) -> __GLXextproc>;
422pub type PFNGLXQUERYVERSIONPROC = Option<
423 unsafe extern "C" fn(_: *mut Display, _: *mut libc::c_int, _: *mut libc::c_int) -> libc::c_int,
424>;
425pub type PFNGLXQUERYEXTENSIONPROC = Option<
426 unsafe extern "C" fn(_: *mut Display, _: *mut libc::c_int, _: *mut libc::c_int) -> libc::c_int,
427>;
428pub type PFNGLXCREATENEWCONTEXTPROC = Option<
429 unsafe extern "C" fn(
430 _: *mut Display,
431 _: GLXFBConfig,
432 _: libc::c_int,
433 _: GLXContext,
434 _: libc::c_int,
435 ) -> GLXContext,
436>;
437
438pub unsafe extern "C" fn _sapp_x11_create_window(mut visual: *mut Visual, mut depth: libc::c_int) {
439 _sapp_x11_colormap = XCreateColormap(_sapp_x11_display, _sapp_x11_root, visual, AllocNone);
440 let mut wa = XSetWindowAttributes {
441 background_pixmap: 0,
442 background_pixel: 0,
443 border_pixmap: 0,
444 border_pixel: 0,
445 bit_gravity: 0,
446 win_gravity: 0,
447 backing_store: 0,
448 backing_planes: 0,
449 backing_pixel: 0,
450 save_under: 0,
451 event_mask: 0,
452 do_not_propagate_mask: 0,
453 override_redirect: 0,
454 colormap: 0,
455 cursor: 0,
456 };
457 memset(
458 &mut wa as *mut XSetWindowAttributes as *mut libc::c_void,
459 0 as libc::c_int,
460 ::std::mem::size_of::<XSetWindowAttributes>() as libc::c_ulong,
461 );
462 let wamask = (CWBorderPixel | CWColormap | CWEventMask) as u32;
463 wa.colormap = _sapp_x11_colormap;
464 wa.border_pixel = 0 as libc::c_int as libc::c_ulong;
465 wa.event_mask = StructureNotifyMask
466 | KeyPressMask
467 | KeyReleaseMask
468 | PointerMotionMask
469 | ButtonPressMask
470 | ButtonReleaseMask
471 | ExposureMask
472 | FocusChangeMask
473 | VisibilityChangeMask
474 | EnterWindowMask
475 | LeaveWindowMask
476 | PropertyChangeMask;
477 _sapp_x11_grab_error_handler();
478
479 _sapp_x11_window = XCreateWindow(
480 _sapp_x11_display,
481 _sapp_x11_root,
482 0 as libc::c_int,
483 0 as libc::c_int,
484 _sapp.window_width as libc::c_uint,
485 _sapp.window_height as libc::c_uint,
486 0 as libc::c_int as libc::c_uint,
487 depth,
488 InputOutput as libc::c_uint,
489 visual,
490 wamask as libc::c_ulong,
491 &mut wa,
492 );
493 _sapp_x11_release_error_handler();
494 if _sapp_x11_window == 0 {
495 _sapp_fail("X11: Failed to create window");
496 }
497
498 _sapp_xi_extension_opcode = xi_input::query_xi_extension()
499 .unwrap_or_else(|| panic!("Failed to initialize XInputExtension"));
500
501 _sapp_empty_cursor = x_cursor::create_empty_cursor();
502
503 let mut protocols: [Atom; 1] = [_sapp_x11_WM_DELETE_WINDOW];
504 XSetWMProtocols(
505 _sapp_x11_display,
506 _sapp_x11_window,
507 protocols.as_mut_ptr(),
508 1 as libc::c_int,
509 );
510 let mut hints = XAllocSizeHints();
511 (*hints).flags |= PWinGravity;
512 if _sapp.desc.window_resizable == false {
513 (*hints).flags |= PMinSize | PMaxSize;
514 (*hints).min_width = _sapp.desc.width;
515 (*hints).min_height = _sapp.desc.height;
516 (*hints).max_width = _sapp.desc.width;
517 (*hints).max_height = _sapp.desc.height;
518 }
519 (*hints).win_gravity = StaticGravity;
520 XSetWMNormalHints(_sapp_x11_display, _sapp_x11_window, hints);
521 XFree(hints as *mut libc::c_void);
522 _sapp_x11_update_window_title();
523 _sapp_x11_query_window_size();
524
525 XChangeProperty(
526 _sapp_x11_display,
527 _sapp_x11_window,
528 _sapp.xdnd.atoms.aware,
529 _sapp_x11_XA_ATOM,
530 32,
531 PropModeReplace,
532 &_sapp_x11_XDND_VERSION as *const _ as *const libc::c_uchar,
533 1);
534}
535
536pub unsafe extern "C" fn _sapp_strcpy(
537 mut src: *const libc::c_char,
538 mut dst: *mut libc::c_char,
539 mut max_len: libc::c_int,
540) {
541 assert!(
542 !src.is_null() && !dst.is_null() && max_len > 0 as libc::c_int,
543 "src && dst && (max_len > 0)"
544 );
545 let end: *mut libc::c_char =
546 &mut *dst.offset((max_len - 1 as libc::c_int) as isize) as *mut libc::c_char;
547 let mut c = 0 as libc::c_int as libc::c_char;
548 let mut i = 0 as libc::c_int;
549 while i < max_len {
550 c = *src;
551 if c as libc::c_int != 0 as libc::c_int {
552 src = src.offset(1)
553 }
554 let fresh0 = dst;
555 dst = dst.offset(1);
556 *fresh0 = c;
557 i += 1
558 }
559 if c as libc::c_int != 0 as libc::c_int {
560 *end = 0 as libc::c_int as libc::c_char
561 };
562}
563pub unsafe extern "C" fn _sapp_init_state(mut desc: *const sapp_desc) {
564 memset(
565 &mut _sapp as *mut _sapp_state as *mut libc::c_void,
566 0 as libc::c_int,
567 ::std::mem::size_of::<_sapp_state>() as libc::c_ulong,
568 );
569 _sapp.desc = *desc;
570 _sapp.first_frame = true;
571 _sapp.window_width = if _sapp.desc.width == 0 as libc::c_int {
572 640 as libc::c_int
573 } else {
574 _sapp.desc.width
575 };
576 _sapp.window_height = if _sapp.desc.height == 0 as libc::c_int {
577 480 as libc::c_int
578 } else {
579 _sapp.desc.height
580 };
581 _sapp.framebuffer_width = _sapp.window_width;
582 _sapp.framebuffer_height = _sapp.window_height;
583 _sapp.sample_count = if _sapp.desc.sample_count == 0 as libc::c_int {
584 1 as libc::c_int
585 } else {
586 _sapp.desc.sample_count
587 };
588 _sapp.swap_interval = if _sapp.desc.swap_interval == 0 as libc::c_int {
589 1 as libc::c_int
590 } else {
591 _sapp.desc.swap_interval
592 };
593 _sapp.html5_canvas_name = if _sapp.desc.html5_canvas_name.is_null() {
594 b"canvas\x00" as *const u8 as *const libc::c_char
595 } else {
596 _sapp.desc.html5_canvas_name
597 };
598 _sapp.html5_ask_leave_site = _sapp.desc.html5_ask_leave_site;
599 if !_sapp.desc.window_title.is_null() {
600 _sapp_strcpy(
601 _sapp.desc.window_title,
602 _sapp.window_title.as_mut_ptr(),
603 ::std::mem::size_of::<[libc::c_char; 128]>() as libc::c_ulong as libc::c_int,
604 );
605 } else {
606 _sapp_strcpy(
607 b"sokol_app\x00" as *const u8 as *const libc::c_char,
608 _sapp.window_title.as_mut_ptr(),
609 ::std::mem::size_of::<[libc::c_char; 128]>() as libc::c_ulong as libc::c_int,
610 );
611 }
612 _sapp.dpi_scale = 1.0f32;
613}
614pub unsafe extern "C" fn _sapp_x11_query_system_dpi() {
615 let mut rms = XResourceManagerString(_sapp_x11_display);
616 if !rms.is_null() {
617 let mut db = XrmGetStringDatabase(rms);
618 if !db.is_null() {
619 let mut value = XrmValue {
620 size: 0,
621 addr: 0 as *mut libc::c_char,
622 };
623 let mut type_ = std::ptr::null_mut();
624 if XrmGetResource(
625 db,
626 b"Xft.dpi\x00" as *const u8 as *const libc::c_char,
627 b"Xft.Dpi\x00" as *const u8 as *const libc::c_char,
628 &mut type_,
629 &mut value,
630 ) != 0
631 {
632 if !type_.is_null()
633 && strcmp(type_, b"String\x00" as *const u8 as *const libc::c_char)
634 == 0 as libc::c_int
635 {
636 _sapp_x11_dpi = atof(value.addr as *const libc::c_char) as libc::c_float
637 }
638 }
639 XrmDestroyDatabase(db);
640 }
641 };
642}
643pub static mut _sapp_x11_dpi: libc::c_float = 0.;
644pub unsafe extern "C" fn _sapp_x11_init_extensions() {
645 _sapp_x11_UTF8_STRING = XInternAtom(
646 _sapp_x11_display,
647 b"UTF8_STRING\x00" as *const u8 as *const libc::c_char,
648 false as _,
649 );
650 _sapp_x11_WM_PROTOCOLS = XInternAtom(
651 _sapp_x11_display,
652 b"WM_PROTOCOLS\x00" as *const u8 as *const libc::c_char,
653 false as _,
654 );
655 _sapp_x11_WM_DELETE_WINDOW = XInternAtom(
656 _sapp_x11_display,
657 b"WM_DELETE_WINDOW\x00" as *const u8 as *const libc::c_char,
658 false as _,
659 );
660 _sapp_x11_WM_STATE = XInternAtom(
661 _sapp_x11_display,
662 b"WM_STATE\x00" as *const u8 as *const libc::c_char,
663 false as _,
664 );
665 _sapp_x11_NET_WM_NAME = XInternAtom(
666 _sapp_x11_display,
667 b"_NET_WM_NAME\x00" as *const u8 as *const libc::c_char,
668 false as _,
669 );
670 _sapp_x11_NET_WM_ICON_NAME = XInternAtom(
671 _sapp_x11_display,
672 b"_NET_WM_ICON_NAME\x00" as *const u8 as *const libc::c_char,
673 false as _,
674 );
675 _sapp.xdnd.atoms.aware = XInternAtom(
676 _sapp_x11_display,
677 b"XdndAware\x00" as *const u8 as *const libc::c_char,
678 false as _,
679 );
680 _sapp.xdnd.atoms.enter = XInternAtom(
681 _sapp_x11_display,
682 b"XdndEnter\x00" as *const u8 as *const libc::c_char,
683 false as _,
684 );
685 _sapp.xdnd.atoms.position = XInternAtom(
686 _sapp_x11_display,
687 b"XdndPosition\x00" as *const u8 as *const libc::c_char,
688 false as _,
689 );
690 _sapp.xdnd.atoms.status = XInternAtom(
691 _sapp_x11_display,
692 b"XdndStatus\x00" as *const u8 as *const libc::c_char,
693 false as _,
694 );
695 _sapp.xdnd.atoms.action_copy = XInternAtom(
696 _sapp_x11_display,
697 b"XdndActionCopy\x00" as *const u8 as *const libc::c_char,
698 false as _,
699 );
700 _sapp.xdnd.atoms.drop = XInternAtom(
701 _sapp_x11_display,
702 b"XdndDrop\x00" as *const u8 as *const libc::c_char,
703 false as _,
704 );
705 _sapp.xdnd.atoms.finished = XInternAtom(
706 _sapp_x11_display,
707 b"XdndFinished\x00" as *const u8 as *const libc::c_char,
708 false as _,
709 );
710 _sapp.xdnd.atoms.selection = XInternAtom(
711 _sapp_x11_display,
712 b"XdndSelection\x00" as *const u8 as *const libc::c_char,
713 false as _,
714 );
715 _sapp.xdnd.atoms.type_list = XInternAtom(
716 _sapp_x11_display,
717 b"XdndTypeList\x00" as *const u8 as *const libc::c_char,
718 false as _,
719 );
720 _sapp.xdnd.atoms.text_uri_list = XInternAtom(
721 _sapp_x11_display,
722 b"text/uri-list\x00" as *const u8 as *const libc::c_char,
723 false as _,
724 );
725}
726
727pub static mut _sapp_glx_CreateNewContext: PFNGLXCREATENEWCONTEXTPROC = None;
728pub static mut _sapp_glx_QueryExtension: PFNGLXQUERYEXTENSIONPROC = None;
729pub static mut _sapp_glx_errorbase: libc::c_int = 0;
730pub static mut _sapp_glx_eventbase: libc::c_int = 0;
731pub static mut _sapp_glx_QueryVersion: PFNGLXQUERYVERSIONPROC = None;
732pub static mut _sapp_glx_major: libc::c_int = 0;
733pub static mut _sapp_glx_minor: libc::c_int = 0;
734pub static mut _sapp_glx_ARB_framebuffer_sRGB: bool = false;
735pub static mut _sapp_glx_EXT_framebuffer_sRGB: bool = false;
736pub static mut _sapp_glx_GetProcAddress: PFNGLXGETPROCADDRESSPROC = None;
737pub static mut _sapp_glx_GetProcAddressARB: PFNGLXGETPROCADDRESSPROC = None;
738pub static mut _sapp_glx_libgl: *mut libc::c_void = 0 as *const libc::c_void as *mut libc::c_void;
739
740unsafe fn _sapp_glx_getprocaddr<T: Sized>(procname: &[u8]) -> T {
741 let procname = procname.as_ptr() as _;
742
743 if _sapp_glx_GetProcAddress.is_some() {
744 return ::std::mem::transmute_copy::<_, T>(&_sapp_glx_GetProcAddress
745 .expect("non-null function pointer")(
746 procname
747 ));
748 } else if _sapp_glx_GetProcAddressARB.is_some() {
749 return ::std::mem::transmute_copy::<_, T>(&_sapp_glx_GetProcAddressARB
750 .expect("non-null function pointer")(
751 procname
752 ));
753 } else {
754 return ::std::mem::transmute_copy::<_, T>(&dlsym(_sapp_glx_libgl, procname as _));
755 };
756}
757pub unsafe extern "C" fn _sapp_glx_has_ext(
758 mut ext: *const libc::c_char,
759 mut extensions: *const libc::c_char,
760) -> bool {
761 assert!(!ext.is_null());
762
763 let mut start = extensions;
764 loop {
765 let mut where_0: *const libc::c_char = strstr(start, ext);
766 if where_0.is_null() {
767 return false;
768 }
769 let mut terminator = where_0.offset(strlen(ext) as isize);
770 if where_0 == start
771 || *where_0.offset(-(1 as libc::c_int as isize)) as libc::c_int == ' ' as i32
772 {
773 if *terminator as libc::c_int == ' ' as i32
774 || *terminator as libc::c_int == '\u{0}' as i32
775 {
776 break;
777 }
778 }
779 start = terminator
780 }
781 return true;
782}
783pub unsafe fn _sapp_glx_extsupported(mut ext: &[u8], mut extensions: *const libc::c_char) -> bool {
784 if !extensions.is_null() {
785 return _sapp_glx_has_ext(ext.as_ptr() as _, extensions);
786 } else {
787 return false;
788 };
789}
790pub static mut _sapp_glx_QueryExtensionsString: PFNGLXQUERYEXTENSIONSSTRINGPROC = None;
791pub unsafe extern "C" fn _sapp_glx_init() {
792 let mut sonames: [*const libc::c_char; 3] = [
793 b"libGL.so.1\x00" as *const u8 as *const libc::c_char,
794 b"libGL.so\x00" as *const u8 as *const libc::c_char,
795 0 as *const libc::c_char,
796 ];
797 let mut i = 0 as libc::c_int;
798 while !sonames[i as usize].is_null() {
799 _sapp_glx_libgl = dlopen(sonames[i as usize], RTLD_LAZY | RTLD_GLOBAL);
800 if !_sapp_glx_libgl.is_null() {
801 break;
802 }
803 i += 1
804 }
805 if _sapp_glx_libgl.is_null() {
806 _sapp_fail("GLX: failed to load libGL");
807 }
808
809 unsafe fn load<T: Sized>(lib: *mut libc::c_void, symbol: &[u8]) -> T {
810 ::std::mem::transmute_copy::<*mut libc::c_void, T>(&dlsym(lib, symbol.as_ptr() as _))
811 }
812 _sapp_glx_GetFBConfigs = load(_sapp_glx_libgl, b"glXGetFBConfigs\x00");
813 _sapp_glx_GetFBConfigAttrib = load(_sapp_glx_libgl, b"glXGetFBConfigAttrib\x00");
814 _sapp_glx_GetClientString = load(_sapp_glx_libgl, b"glXGetClientString\x00");
815 _sapp_glx_QueryExtension = load(_sapp_glx_libgl, b"glXQueryExtension\x00");
816 _sapp_glx_QueryVersion = load(_sapp_glx_libgl, b"glXQueryVersion\x00");
817 _sapp_glx_DestroyContext = load(_sapp_glx_libgl, b"glXDestroyContext\x00");
818 _sapp_glx_MakeCurrent = load(_sapp_glx_libgl, b"glXMakeCurrent\x00");
819 _sapp_glx_SwapBuffers = load(_sapp_glx_libgl, b"glXSwapBuffers\x00");
820 _sapp_glx_QueryExtensionsString = load(_sapp_glx_libgl, b"glXQueryExtensionsString\x00");
821 _sapp_glx_CreateNewContext = load(_sapp_glx_libgl, b"glXCreateNewContext\x00");
822 _sapp_glx_CreateWindow = load(_sapp_glx_libgl, b"glXCreateWindow\x00");
823 _sapp_glx_DestroyWindow = load(_sapp_glx_libgl, b"glXDestroyWindow\x00");
824 _sapp_glx_GetProcAddress = load(_sapp_glx_libgl, b"glXGetProcAddress\x00");
825 _sapp_glx_GetProcAddressARB = load(_sapp_glx_libgl, b"glXGetProcAddressARB\x00");
826 _sapp_glx_GetVisualFromFBConfig = load(_sapp_glx_libgl, b"glXGetVisualFromFBConfig\x00");
827 if _sapp_glx_GetFBConfigs.is_none()
828 || _sapp_glx_GetFBConfigAttrib.is_none()
829 || _sapp_glx_GetClientString.is_none()
830 || _sapp_glx_QueryExtension.is_none()
831 || _sapp_glx_QueryVersion.is_none()
832 || _sapp_glx_DestroyContext.is_none()
833 || _sapp_glx_MakeCurrent.is_none()
834 || _sapp_glx_SwapBuffers.is_none()
835 || _sapp_glx_QueryExtensionsString.is_none()
836 || _sapp_glx_CreateNewContext.is_none()
837 || _sapp_glx_CreateWindow.is_none()
838 || _sapp_glx_DestroyWindow.is_none()
839 || _sapp_glx_GetProcAddress.is_none()
840 || _sapp_glx_GetProcAddressARB.is_none()
841 || _sapp_glx_GetVisualFromFBConfig.is_none()
842 {
843 _sapp_fail("GLX: failed to load required entry points");
844 }
845 if _sapp_glx_QueryExtension.expect("non-null function pointer")(
846 _sapp_x11_display,
847 &mut _sapp_glx_errorbase,
848 &mut _sapp_glx_eventbase,
849 ) == 0
850 {
851 _sapp_fail("GLX: GLX extension not found");
852 }
853 if _sapp_glx_QueryVersion.expect("non-null function pointer")(
854 _sapp_x11_display,
855 &mut _sapp_glx_major,
856 &mut _sapp_glx_minor,
857 ) == 0
858 {
859 _sapp_fail("GLX: Failed to query GLX version");
860 }
861 if _sapp_glx_major == 1 as libc::c_int && _sapp_glx_minor < 3 as libc::c_int {
862 _sapp_fail("GLX: GLX version 1.3 is required");
863 }
864 let mut exts = _sapp_glx_QueryExtensionsString.expect("non-null function pointer")(
865 _sapp_x11_display,
866 _sapp_x11_screen,
867 );
868 if _sapp_glx_extsupported(b"GLX_EXT_swap_control\x00", exts) {
869 _sapp_glx_SwapIntervalEXT =
870 _sapp_glx_getprocaddr::<PFNGLXSWAPINTERVALEXTPROC>(b"glXSwapIntervalEXT\x00");
871 _sapp_glx_EXT_swap_control = _sapp_glx_SwapIntervalEXT.is_some()
872 }
873 if _sapp_glx_extsupported(b"GLX_MESA_swap_control\x00", exts) {
874 _sapp_glx_SwapIntervalMESA = _sapp_glx_getprocaddr(b"glXSwapIntervalMESA\x00");
875 _sapp_glx_MESA_swap_control = _sapp_glx_SwapIntervalMESA.is_some()
876 }
877 _sapp_glx_ARB_multisample = _sapp_glx_extsupported(b"GLX_ARB_multisample\x00", exts);
878 _sapp_glx_ARB_framebuffer_sRGB = _sapp_glx_extsupported(b"GLX_ARB_framebuffer_sRGB\x00", exts);
879 _sapp_glx_EXT_framebuffer_sRGB = _sapp_glx_extsupported(b"GLX_EXT_framebuffer_sRGB\x00", exts);
880 if _sapp_glx_extsupported(b"GLX_ARB_create_context\x00", exts) {
881 _sapp_glx_CreateContextAttribsARB =
882 _sapp_glx_getprocaddr(b"glXCreateContextAttribsARB\x00");
883 _sapp_glx_ARB_create_context = _sapp_glx_CreateContextAttribsARB.is_some()
884 }
885 _sapp_glx_ARB_create_context_profile =
886 _sapp_glx_extsupported(b"GLX_ARB_create_context_profile\x00", exts);
887}
888pub static mut _sapp_glx_GetVisualFromFBConfig: PFNGLXGETVISUALFROMFBCONFIGPROC = None;
889pub unsafe extern "C" fn _sapp_glx_choose_visual(
890 mut visual: *mut *mut Visual,
891 mut depth: *mut libc::c_int,
892) {
893 let mut native = _sapp_glx_choosefbconfig();
894 if native.is_null() {
895 _sapp_fail("GLX: Failed to find a suitable GLXFBConfig");
896 }
897 let mut result = _sapp_glx_GetVisualFromFBConfig.expect("non-null function pointer")(
898 _sapp_x11_display,
899 native,
900 );
901 if result.is_null() {
902 _sapp_fail("GLX: Failed to retrieve Visual for GLXFBConfig");
903 }
904 *visual = (*result).visual;
905 *depth = (*result).depth;
906 XFree(result as *mut libc::c_void);
907}
908pub static mut _sapp_x11_root: Window = 0;
909pub static mut _sapp_x11_NET_WM_NAME: Atom = 0;
910pub static mut _sapp_x11_NET_WM_ICON_NAME: Atom = 0;
911pub static mut _sapp_x11_UTF8_STRING: Atom = 0;
912pub static mut _sapp_x11_XA_ATOM: Atom = 4;
913pub static mut _sapp_x11_XDND_VERSION: Atom = 5;
914
915pub unsafe extern "C" fn _sapp_x11_update_window_title() {
916 Xutf8SetWMProperties(
917 _sapp_x11_display,
918 _sapp_x11_window,
919 _sapp.window_title.as_mut_ptr(),
920 _sapp.window_title.as_mut_ptr(),
921 std::ptr::null_mut(),
922 0 as libc::c_int,
923 std::ptr::null_mut(),
924 std::ptr::null_mut(),
925 std::ptr::null_mut(),
926 );
927 XChangeProperty(
928 _sapp_x11_display,
929 _sapp_x11_window,
930 _sapp_x11_NET_WM_NAME,
931 _sapp_x11_UTF8_STRING,
932 8 as libc::c_int,
933 PropModeReplace,
934 _sapp.window_title.as_mut_ptr() as *mut libc::c_uchar,
935 strlen(_sapp.window_title.as_mut_ptr()) as libc::c_int,
936 );
937 XChangeProperty(
938 _sapp_x11_display,
939 _sapp_x11_window,
940 _sapp_x11_NET_WM_ICON_NAME,
941 _sapp_x11_UTF8_STRING,
942 8 as libc::c_int,
943 PropModeReplace,
944 _sapp.window_title.as_mut_ptr() as *mut libc::c_uchar,
945 strlen(_sapp.window_title.as_mut_ptr()) as libc::c_int,
946 );
947 XFlush(_sapp_x11_display);
948}
949pub unsafe extern "C" fn _sapp_x11_query_window_size() {
950 let mut attribs = XWindowAttributes {
951 x: 0,
952 y: 0,
953 width: 0,
954 height: 0,
955 border_width: 0,
956 depth: 0,
957 visual: 0 as *mut Visual,
958 root: 0,
959 class: 0,
960 bit_gravity: 0,
961 win_gravity: 0,
962 backing_store: 0,
963 backing_planes: 0,
964 backing_pixel: 0,
965 save_under: 0,
966 colormap: 0,
967 map_installed: 0,
968 map_state: 0,
969 all_event_masks: 0,
970 your_event_mask: 0,
971 do_not_propagate_mask: 0,
972 override_redirect: 0,
973 screen: 0 as *mut Screen,
974 };
975 XGetWindowAttributes(_sapp_x11_display, _sapp_x11_window, &mut attribs);
976 _sapp.window_width = attribs.width;
977 _sapp.window_height = attribs.height;
978 _sapp.framebuffer_width = _sapp.window_width;
979 _sapp.framebuffer_height = _sapp.framebuffer_height;
980}
981pub static mut _sapp_glx_ARB_create_context: bool = false;
982pub static mut _sapp_glx_ARB_create_context_profile: bool = false;
983pub static mut _sapp_x11_error_code: libc::c_uchar = 0;
984pub unsafe extern "C" fn _sapp_x11_error_handler(
985 mut display: *mut Display,
986 mut event: *mut XErrorEvent,
987) -> libc::c_int {
988 _sapp_x11_error_code = (*event).error_code;
989 return 0 as libc::c_int;
990}
991pub unsafe extern "C" fn _sapp_x11_grab_error_handler() {
992 _sapp_x11_error_code = Success as libc::c_uchar;
993 XSetErrorHandler(Some(
994 _sapp_x11_error_handler
995 as unsafe extern "C" fn(_: *mut Display, _: *mut XErrorEvent) -> libc::c_int,
996 ));
997}
998pub static mut _sapp_glx_CreateContextAttribsARB: PFNGLXCREATECONTEXTATTRIBSARBPROC = None;
999pub const GLX_CONTEXT_MAJOR_VERSION_ARB: libc::c_int = 0x2091 as libc::c_int;
1000pub const GLX_CONTEXT_MINOR_VERSION_ARB: libc::c_int = 0x2092 as libc::c_int;
1001pub const GLX_CONTEXT_PROFILE_MASK_ARB: libc::c_int = 0x9126 as libc::c_int;
1002pub const GLX_CONTEXT_CORE_PROFILE_BIT_ARB: libc::c_int = 0x1 as libc::c_int;
1003pub const GLX_CONTEXT_FLAGS_ARB: libc::c_int = 0x2094 as libc::c_int;
1004pub const GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB: libc::c_int = 0x2 as libc::c_int;
1005pub unsafe extern "C" fn _sapp_x11_release_error_handler() {
1006 XSync(_sapp_x11_display, false as _);
1007 XSetErrorHandler(None);
1008}
1009pub static mut _sapp_glx_CreateWindow: PFNGLXCREATEWINDOWPROC = None;
1010pub static mut _sapp_glx_GetClientString: PFNGLXGETCLIENTSTRINGPROC = None;
1011pub const GLX_VENDOR: libc::c_int = 1 as libc::c_int;
1012pub static mut _sapp_glx_GetFBConfigs: PFNGLXGETFBCONFIGSPROC = None;
1013pub static mut _sapp_x11_screen: libc::c_int = 0;
1014pub const GLX_RENDER_TYPE: libc::c_int = 0x8011 as libc::c_int;
1015pub const GLX_RGBA_BIT: libc::c_int = 0x1 as libc::c_int;
1016pub const GLX_DRAWABLE_TYPE: libc::c_int = 0x8010 as libc::c_int;
1017pub const GLX_WINDOW_BIT: libc::c_int = 0x1 as libc::c_int;
1018pub const GLX_RED_SIZE: libc::c_int = 8 as libc::c_int;
1019pub const GLX_GREEN_SIZE: libc::c_int = 9 as libc::c_int;
1020pub const GLX_BLUE_SIZE: libc::c_int = 10 as libc::c_int;
1021pub const GLX_ALPHA_SIZE: libc::c_int = 11 as libc::c_int;
1022pub const GLX_DEPTH_SIZE: libc::c_int = 12 as libc::c_int;
1023pub const GLX_STENCIL_SIZE: libc::c_int = 13 as libc::c_int;
1024pub const GLX_DOUBLEBUFFER: libc::c_int = 5 as libc::c_int;
1025pub static mut _sapp_glx_ARB_multisample: bool = false;
1026pub static mut _sapp_glx_GetFBConfigAttrib: PFNGLXGETFBCONFIGATTRIBPROC = None;
1027pub unsafe extern "C" fn _sapp_glx_attrib(
1028 mut fbconfig: GLXFBConfig,
1029 mut attrib: libc::c_int,
1030) -> libc::c_int {
1031 let mut value: libc::c_int = 0;
1032 _sapp_glx_GetFBConfigAttrib.expect("non-null function pointer")(
1033 _sapp_x11_display,
1034 fbconfig,
1035 attrib,
1036 &mut value,
1037 );
1038 return value;
1039}
1040pub const GLX_SAMPLES: libc::c_int = 0x186a1 as libc::c_int;
1041pub fn _sapp_gl_init_fbconfig() -> _sapp_gl_fbconfig {
1042 _sapp_gl_fbconfig {
1043 red_bits: -(1 as libc::c_int),
1044 green_bits: -(1 as libc::c_int),
1045 blue_bits: -(1 as libc::c_int),
1046 alpha_bits: -(1 as libc::c_int),
1047 depth_bits: -(1 as libc::c_int),
1048 stencil_bits: -(1 as libc::c_int),
1049 samples: -(1 as libc::c_int),
1050 doublebuffer: false,
1051 handle: 0,
1052 }
1053}
1054pub unsafe extern "C" fn _sapp_gl_choose_fbconfig(
1055 mut desired: *const _sapp_gl_fbconfig,
1056 mut alternatives: *const _sapp_gl_fbconfig,
1057 mut count: libc::c_uint,
1058) -> *const _sapp_gl_fbconfig {
1059 let mut i: i32 = 0;
1060 let mut missing: i32 = 0;
1061 let mut least_missing: i32 = 1000000;
1062 let mut color_diff: i32 = 0;
1063 let mut least_color_diff: i32 = 10000000;
1064 let mut extra_diff: i32 = 0;
1065 let mut least_extra_diff: i32 = 10000000;
1066 let mut current = 0 as *const _sapp_gl_fbconfig;
1067 let mut closest = std::ptr::null();
1068
1069 for i in 0..count as i32 {
1070 current = alternatives.offset(i as isize);
1071
1072 if (*desired).doublebuffer == (*current).doublebuffer {
1073 missing = 0;
1074 if (*desired).alpha_bits > 0 && (*current).alpha_bits == 0 {
1075 missing += 1;
1076 }
1077 if (*desired).depth_bits > 0 && (*current).depth_bits == 0 {
1078 missing += 1;
1079 }
1080 if (*desired).stencil_bits > 0 && (*current).stencil_bits == 0 {
1081 missing += 1;
1082 }
1083 if (*desired).samples > 0 && (*current).samples == 0 {
1084 missing += 1;
1089 }
1090
1091 color_diff = 0;
1096 if (*desired).red_bits != -1 {
1097 color_diff += ((*desired).red_bits - (*current).red_bits)
1098 * ((*desired).red_bits - (*current).red_bits);
1099 }
1100 if (*desired).green_bits != -1 {
1101 color_diff += ((*desired).green_bits - (*current).green_bits)
1102 * ((*desired).green_bits - (*current).green_bits)
1103 }
1104 if (*desired).blue_bits != -1 {
1105 color_diff += ((*desired).blue_bits - (*current).blue_bits)
1106 * ((*desired).blue_bits - (*current).blue_bits)
1107 }
1108
1109 extra_diff = 0;
1111 if (*desired).alpha_bits != -1 {
1112 extra_diff += ((*desired).alpha_bits - (*current).alpha_bits)
1113 * ((*desired).alpha_bits - (*current).alpha_bits)
1114 }
1115 if (*desired).depth_bits != -1 {
1116 extra_diff += ((*desired).depth_bits - (*current).depth_bits)
1117 * ((*desired).depth_bits - (*current).depth_bits);
1118 }
1119 if (*desired).stencil_bits != -1 {
1120 extra_diff = ((*desired).stencil_bits - (*current).stencil_bits)
1121 * ((*desired).stencil_bits - (*current).stencil_bits);
1122 }
1123 if (*desired).samples != -1 {
1124 extra_diff += ((*desired).samples - (*current).samples)
1125 * ((*desired).samples - (*current).samples);
1126 }
1127 if missing < least_missing {
1128 closest = current
1129 } else if missing == least_missing {
1130 if color_diff < least_color_diff
1131 || color_diff == least_color_diff && extra_diff < least_extra_diff
1132 {
1133 closest = current
1134 }
1135 }
1136
1137 if current == closest {
1142 least_missing = missing;
1143 least_color_diff = color_diff;
1144 least_extra_diff = extra_diff
1145 }
1146 }
1147 }
1148 return closest;
1149}
1150pub unsafe extern "C" fn _sapp_glx_choosefbconfig() -> GLXFBConfig {
1151 let mut native_configs = 0 as *mut GLXFBConfig;
1152 let mut closest = 0 as *const _sapp_gl_fbconfig;
1153 let mut i: libc::c_int = 0;
1154 let mut native_count: libc::c_int = 0;
1155 let mut usable_count: libc::c_int = 0;
1156 let mut vendor = 0 as *const libc::c_char;
1157 let mut trust_window_bit = true;
1158 vendor = _sapp_glx_GetClientString.expect("non-null function pointer")(
1159 _sapp_x11_display,
1160 GLX_VENDOR,
1161 );
1162 if !vendor.is_null()
1163 && strcmp(vendor, b"Chromium\x00" as *const u8 as *const libc::c_char) == 0 as libc::c_int
1164 {
1165 trust_window_bit = false
1166 }
1167 native_configs = _sapp_glx_GetFBConfigs.expect("non-null function pointer")(
1168 _sapp_x11_display,
1169 _sapp_x11_screen,
1170 &mut native_count,
1171 );
1172 if native_configs.is_null() || native_count == 0 {
1173 _sapp_fail("GLX: No GLXFBConfigs returned");
1174 }
1175 let mut usable_configs: Vec<_sapp_gl_fbconfig> = Vec::new();
1176 usable_count = 0 as libc::c_int;
1177 let mut current_block_25: u64;
1178 for i in 0..native_count {
1179 let n = *native_configs.offset(i as isize);
1180 let mut u = _sapp_gl_init_fbconfig();
1181 if 0 == _sapp_glx_attrib(n, GLX_RENDER_TYPE) & GLX_RGBA_BIT {
1182 continue;
1183 }
1184 if 0 == _sapp_glx_attrib(n, GLX_DRAWABLE_TYPE) & GLX_WINDOW_BIT {
1185 if trust_window_bit {
1186 continue;
1187 }
1188 }
1189
1190 u.red_bits = _sapp_glx_attrib(n, GLX_RED_SIZE);
1191 u.green_bits = _sapp_glx_attrib(n, GLX_GREEN_SIZE);
1192 u.blue_bits = _sapp_glx_attrib(n, GLX_BLUE_SIZE);
1193 u.alpha_bits = _sapp_glx_attrib(n, GLX_ALPHA_SIZE);
1194 u.depth_bits = _sapp_glx_attrib(n, GLX_DEPTH_SIZE);
1195 u.stencil_bits = _sapp_glx_attrib(n, GLX_STENCIL_SIZE);
1196 if _sapp_glx_attrib(n, GLX_DOUBLEBUFFER) != 0 {
1197 u.doublebuffer = true
1198 }
1199 if _sapp_glx_ARB_multisample {
1200 u.samples = _sapp_glx_attrib(n, GLX_SAMPLES)
1201 }
1202 u.handle = n as libc::c_ulong;
1203 usable_configs.push(u);
1204 usable_count += 1
1205 }
1206
1207 let mut desired = _sapp_gl_init_fbconfig();
1208 desired.red_bits = 8;
1209 desired.green_bits = 8;
1210 desired.blue_bits = 8;
1211 desired.alpha_bits = 8;
1212 desired.depth_bits = 24;
1213 desired.stencil_bits = 8;
1214 desired.doublebuffer = true;
1215 desired.samples = if _sapp.sample_count > 1 {
1216 _sapp.sample_count
1217 } else {
1218 0
1219 };
1220 closest = _sapp_gl_choose_fbconfig(
1221 &mut desired,
1222 usable_configs.as_mut_ptr(),
1223 usable_count as libc::c_uint,
1224 );
1225 let mut result = 0 as GLXFBConfig;
1226 if !closest.is_null() {
1227 result = (*closest).handle as GLXFBConfig
1228 }
1229 XFree(native_configs as *mut libc::c_void);
1230 return result;
1231}
1232
1233pub unsafe extern "C" fn _sapp_fail(msg: &str) {
1234 println!("{}", msg);
1235 std::process::exit(0);
1236}
1237
1238pub unsafe extern "C" fn _sapp_glx_create_context() {
1239 let mut native = _sapp_glx_choosefbconfig();
1240 if native.is_null() {
1241 _sapp_fail("GLX: Failed to find a suitable GLXFBConfig (2)");
1242 }
1243 if !(_sapp_glx_ARB_create_context && _sapp_glx_ARB_create_context_profile) {
1244 _sapp_fail("GLX: ARB_create_context and ARB_create_context_profile required");
1245 }
1246 _sapp_x11_grab_error_handler();
1247 let attribs: [libc::c_int; 10] = [
1248 GLX_CONTEXT_MAJOR_VERSION_ARB,
1249 3,
1250 GLX_CONTEXT_MINOR_VERSION_ARB,
1251 3,
1252 GLX_CONTEXT_PROFILE_MASK_ARB,
1253 GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
1254 GLX_CONTEXT_FLAGS_ARB,
1255 GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
1256 0,
1257 0,
1258 ];
1259 _sapp_glx_ctx = _sapp_glx_CreateContextAttribsARB.expect("non-null function pointer")(
1260 _sapp_x11_display,
1261 native,
1262 std::ptr::null_mut(),
1263 true as _,
1264 attribs.as_ptr(),
1265 );
1266 if _sapp_glx_ctx.is_null() {
1267 _sapp_fail("GLX: failed to create GL context");
1268 }
1269 _sapp_x11_release_error_handler();
1270 _sapp_glx_window = _sapp_glx_CreateWindow.expect("non-null function pointer")(
1271 _sapp_x11_display,
1272 native,
1273 _sapp_x11_window,
1274 std::ptr::null(),
1275 );
1276 if _sapp_glx_window == 0 {
1277 _sapp_fail("GLX: failed to create window");
1278 };
1279}
1280pub unsafe extern "C" fn _sapp_x11_window_visible() -> bool {
1281 let mut wa = XWindowAttributes {
1282 x: 0,
1283 y: 0,
1284 width: 0,
1285 height: 0,
1286 border_width: 0,
1287 depth: 0,
1288 visual: 0 as *mut Visual,
1289 root: 0,
1290 class: 0,
1291 bit_gravity: 0,
1292 win_gravity: 0,
1293 backing_store: 0,
1294 backing_planes: 0,
1295 backing_pixel: 0,
1296 save_under: 0,
1297 colormap: 0,
1298 map_installed: 0,
1299 map_state: 0,
1300 all_event_masks: 0,
1301 your_event_mask: 0,
1302 do_not_propagate_mask: 0,
1303 override_redirect: 0,
1304 screen: 0 as *mut Screen,
1305 };
1306 XGetWindowAttributes(_sapp_x11_display, _sapp_x11_window, &mut wa);
1307 return wa.map_state == IsViewable;
1308}
1309pub unsafe extern "C" fn _sapp_x11_show_window() {
1310 if !_sapp_x11_window_visible() {
1311 XMapWindow(_sapp_x11_display, _sapp_x11_window);
1312 XRaiseWindow(_sapp_x11_display, _sapp_x11_window);
1313 XFlush(_sapp_x11_display);
1314 };
1315}
1316
1317#[deprecated(note = "Should be removed")]
1318unsafe fn _sapp_x11_set_fullscreen() {
1319 let mut wm_state = XInternAtom(
1320 _sapp_x11_display,
1321 b"_NET_WM_STATE\x00" as *const u8 as *const libc::c_char,
1322 false as _,
1323 );
1324 let wm_fullscreen = XInternAtom(
1325 _sapp_x11_display,
1326 b"_NET_WM_STATE_FULLSCREEN\x00" as *const u8 as *const libc::c_char,
1327 false as _,
1328 );
1329
1330 {
1334 XLowerWindow(_sapp_x11_display, _sapp_x11_window);
1335 XUnmapWindow(_sapp_x11_display, _sapp_x11_window);
1336 XSync(_sapp_x11_display, false as _);
1337
1338 let mut atoms: [Atom; 2] = [wm_fullscreen, 0 as _];
1339 XChangeProperty(
1340 _sapp_x11_display,
1341 _sapp_x11_window,
1342 wm_state,
1343 4 as _,
1344 32,
1345 PropModeReplace,
1346 atoms.as_mut_ptr() as *mut _ as *mut _,
1347 1,
1348 );
1349 XMapWindow(_sapp_x11_display, _sapp_x11_window);
1350 XRaiseWindow(_sapp_x11_display, _sapp_x11_window);
1351 XFlush(_sapp_x11_display);
1352 }
1353
1354 {
1357 let mut data = [0isize; 5];
1358
1359 data[0] = 1;
1360 data[1] = wm_fullscreen as isize;
1361 data[2] = 0;
1362
1363 let mut ev = XClientMessageEvent {
1364 type_0: 33,
1365 serial: 0,
1366 send_event: true as _,
1367 message_type: wm_state,
1368 window: _sapp_x11_window,
1369 display: _sapp_x11_display,
1370 format: 32,
1371 data: ClientMessageData {
1372 l: std::mem::transmute(data),
1373 },
1374 };
1375 XSendEvent(
1376 _sapp_x11_display,
1377 _sapp_x11_root,
1378 false as _,
1379 (1048576 | 131072) as _,
1380 &mut ev as *mut XClientMessageEvent as *mut XEvent,
1381 );
1382 }
1383}
1384
1385unsafe fn _sapp_x11_send_event(t: Atom, a: isize, b: isize, c: isize, d: isize, e: isize) {
1386 let mut data = [0isize; 5];
1387
1388 data[0] = a;
1389 data[1] = b;
1390 data[2] = c;
1391 data[3] = d;
1392 data[4] = e;
1393
1394 let mut ev = XClientMessageEvent {
1395 type_0: 33,
1396 serial: 0,
1397 send_event: true as _,
1398 message_type: t,
1399 window: _sapp_x11_window,
1400 display: _sapp_x11_display,
1401 format: 32,
1402 data: ClientMessageData {
1403 l: std::mem::transmute(data),
1404 },
1405 };
1406
1407 XSendEvent(
1408 _sapp_x11_display,
1409 _sapp_x11_root,
1410 false as _,
1411 (1048576 | 131072) as _,
1412 &mut ev as *mut XClientMessageEvent as *mut XEvent,
1413 );
1414}
1415
1416pub static mut _sapp_glx_EXT_swap_control: bool = false;
1417pub static mut _sapp_glx_SwapIntervalEXT: PFNGLXSWAPINTERVALEXTPROC = None;
1418pub static mut _sapp_glx_MESA_swap_control: bool = false;
1419pub static mut _sapp_glx_SwapIntervalMESA: PFNGLXSWAPINTERVALMESAPROC = None;
1420pub unsafe extern "C" fn _sapp_glx_swapinterval(mut interval: libc::c_int) {
1421 _sapp_glx_make_current();
1422 if _sapp_glx_EXT_swap_control {
1423 _sapp_glx_SwapIntervalEXT.expect("non-null function pointer")(
1424 _sapp_x11_display,
1425 _sapp_glx_window,
1426 interval,
1427 );
1428 } else if _sapp_glx_MESA_swap_control {
1429 _sapp_glx_SwapIntervalMESA.expect("non-null function pointer")(interval);
1430 };
1431}
1432pub static mut _sapp_glx_MakeCurrent: PFNGLXMAKECURRENTPROC = None;
1433pub unsafe extern "C" fn _sapp_glx_make_current() {
1434 _sapp_glx_MakeCurrent.expect("non-null function pointer")(
1435 _sapp_x11_display,
1436 _sapp_glx_window,
1437 _sapp_glx_ctx,
1438 );
1439}
1440pub unsafe extern "C" fn _sapp_x11_char_event(mut chr: u32, mut repeat: bool, mut mods: u32) {
1441 if _sapp_events_enabled() {
1442 _sapp_init_event(sapp_event_type_SAPP_EVENTTYPE_CHAR);
1443 _sapp.event.char_code = chr;
1444 _sapp.event.key_repeat = repeat;
1445 _sapp.event.modifiers = mods;
1446 _sapp_call_event(&mut _sapp.event);
1447 };
1448}
1449
1450pub unsafe extern "C" fn _sapp_x11_raw_device_event(dx: f32, dy: f32) {
1451 if _sapp_events_enabled() {
1452 _sapp_init_event(sapp_event_type_SAPP_EVENTTYPE_RAW_DEVICE);
1453 _sapp.event.mouse_dx = dx;
1454 _sapp.event.mouse_dy = dy;
1455 _sapp_call_event(&mut _sapp.event);
1456 };
1457}
1458
1459pub static mut _sapp_x11_keysymtab: [_sapp_x11_codepair; 828] = [
1460 _sapp_x11_codepair::new(0x01a1, 0x0104),
1461 _sapp_x11_codepair::new(0x01a2, 0x02d8),
1462 _sapp_x11_codepair::new(0x01a3, 0x0141),
1463 _sapp_x11_codepair::new(0x01a5, 0x013d),
1464 _sapp_x11_codepair::new(0x01a6, 0x015a),
1465 _sapp_x11_codepair::new(0x01a9, 0x0160),
1466 _sapp_x11_codepair::new(0x01aa, 0x015e),
1467 _sapp_x11_codepair::new(0x01ab, 0x0164),
1468 _sapp_x11_codepair::new(0x01ac, 0x0179),
1469 _sapp_x11_codepair::new(0x01ae, 0x017d),
1470 _sapp_x11_codepair::new(0x01af, 0x017b),
1471 _sapp_x11_codepair::new(0x01b1, 0x0105),
1472 _sapp_x11_codepair::new(0x01b2, 0x02db),
1473 _sapp_x11_codepair::new(0x01b3, 0x0142),
1474 _sapp_x11_codepair::new(0x01b5, 0x013e),
1475 _sapp_x11_codepair::new(0x01b6, 0x015b),
1476 _sapp_x11_codepair::new(0x01b7, 0x02c7),
1477 _sapp_x11_codepair::new(0x01b9, 0x0161),
1478 _sapp_x11_codepair::new(0x01ba, 0x015f),
1479 _sapp_x11_codepair::new(0x01bb, 0x0165),
1480 _sapp_x11_codepair::new(0x01bc, 0x017a),
1481 _sapp_x11_codepair::new(0x01bd, 0x02dd),
1482 _sapp_x11_codepair::new(0x01be, 0x017e),
1483 _sapp_x11_codepair::new(0x01bf, 0x017c),
1484 _sapp_x11_codepair::new(0x01c0, 0x0154),
1485 _sapp_x11_codepair::new(0x01c3, 0x0102),
1486 _sapp_x11_codepair::new(0x01c5, 0x0139),
1487 _sapp_x11_codepair::new(0x01c6, 0x0106),
1488 _sapp_x11_codepair::new(0x01c8, 0x010c),
1489 _sapp_x11_codepair::new(0x01ca, 0x0118),
1490 _sapp_x11_codepair::new(0x01cc, 0x011a),
1491 _sapp_x11_codepair::new(0x01cf, 0x010e),
1492 _sapp_x11_codepair::new(0x01d0, 0x0110),
1493 _sapp_x11_codepair::new(0x01d1, 0x0143),
1494 _sapp_x11_codepair::new(0x01d2, 0x0147),
1495 _sapp_x11_codepair::new(0x01d5, 0x0150),
1496 _sapp_x11_codepair::new(0x01d8, 0x0158),
1497 _sapp_x11_codepair::new(0x01d9, 0x016e),
1498 _sapp_x11_codepair::new(0x01db, 0x0170),
1499 _sapp_x11_codepair::new(0x01de, 0x0162),
1500 _sapp_x11_codepair::new(0x01e0, 0x0155),
1501 _sapp_x11_codepair::new(0x01e3, 0x0103),
1502 _sapp_x11_codepair::new(0x01e5, 0x013a),
1503 _sapp_x11_codepair::new(0x01e6, 0x0107),
1504 _sapp_x11_codepair::new(0x01e8, 0x010d),
1505 _sapp_x11_codepair::new(0x01ea, 0x0119),
1506 _sapp_x11_codepair::new(0x01ec, 0x011b),
1507 _sapp_x11_codepair::new(0x01ef, 0x010f),
1508 _sapp_x11_codepair::new(0x01f0, 0x0111),
1509 _sapp_x11_codepair::new(0x01f1, 0x0144),
1510 _sapp_x11_codepair::new(0x01f2, 0x0148),
1511 _sapp_x11_codepair::new(0x01f5, 0x0151),
1512 _sapp_x11_codepair::new(0x01f8, 0x0159),
1513 _sapp_x11_codepair::new(0x01f9, 0x016f),
1514 _sapp_x11_codepair::new(0x01fb, 0x0171),
1515 _sapp_x11_codepair::new(0x01fe, 0x0163),
1516 _sapp_x11_codepair::new(0x01ff, 0x02d9),
1517 _sapp_x11_codepair::new(0x02a1, 0x0126),
1518 _sapp_x11_codepair::new(0x02a6, 0x0124),
1519 _sapp_x11_codepair::new(0x02a9, 0x0130),
1520 _sapp_x11_codepair::new(0x02ab, 0x011e),
1521 _sapp_x11_codepair::new(0x02ac, 0x0134),
1522 _sapp_x11_codepair::new(0x02b1, 0x0127),
1523 _sapp_x11_codepair::new(0x02b6, 0x0125),
1524 _sapp_x11_codepair::new(0x02b9, 0x0131),
1525 _sapp_x11_codepair::new(0x02bb, 0x011f),
1526 _sapp_x11_codepair::new(0x02bc, 0x0135),
1527 _sapp_x11_codepair::new(0x02c5, 0x010a),
1528 _sapp_x11_codepair::new(0x02c6, 0x0108),
1529 _sapp_x11_codepair::new(0x02d5, 0x0120),
1530 _sapp_x11_codepair::new(0x02d8, 0x011c),
1531 _sapp_x11_codepair::new(0x02dd, 0x016c),
1532 _sapp_x11_codepair::new(0x02de, 0x015c),
1533 _sapp_x11_codepair::new(0x02e5, 0x010b),
1534 _sapp_x11_codepair::new(0x02e6, 0x0109),
1535 _sapp_x11_codepair::new(0x02f5, 0x0121),
1536 _sapp_x11_codepair::new(0x02f8, 0x011d),
1537 _sapp_x11_codepair::new(0x02fd, 0x016d),
1538 _sapp_x11_codepair::new(0x02fe, 0x015d),
1539 _sapp_x11_codepair::new(0x03a2, 0x0138),
1540 _sapp_x11_codepair::new(0x03a3, 0x0156),
1541 _sapp_x11_codepair::new(0x03a5, 0x0128),
1542 _sapp_x11_codepair::new(0x03a6, 0x013b),
1543 _sapp_x11_codepair::new(0x03aa, 0x0112),
1544 _sapp_x11_codepair::new(0x03ab, 0x0122),
1545 _sapp_x11_codepair::new(0x03ac, 0x0166),
1546 _sapp_x11_codepair::new(0x03b3, 0x0157),
1547 _sapp_x11_codepair::new(0x03b5, 0x0129),
1548 _sapp_x11_codepair::new(0x03b6, 0x013c),
1549 _sapp_x11_codepair::new(0x03ba, 0x0113),
1550 _sapp_x11_codepair::new(0x03bb, 0x0123),
1551 _sapp_x11_codepair::new(0x03bc, 0x0167),
1552 _sapp_x11_codepair::new(0x03bd, 0x014a),
1553 _sapp_x11_codepair::new(0x03bf, 0x014b),
1554 _sapp_x11_codepair::new(0x03c0, 0x0100),
1555 _sapp_x11_codepair::new(0x03c7, 0x012e),
1556 _sapp_x11_codepair::new(0x03cc, 0x0116),
1557 _sapp_x11_codepair::new(0x03cf, 0x012a),
1558 _sapp_x11_codepair::new(0x03d1, 0x0145),
1559 _sapp_x11_codepair::new(0x03d2, 0x014c),
1560 _sapp_x11_codepair::new(0x03d3, 0x0136),
1561 _sapp_x11_codepair::new(0x03d9, 0x0172),
1562 _sapp_x11_codepair::new(0x03dd, 0x0168),
1563 _sapp_x11_codepair::new(0x03de, 0x016a),
1564 _sapp_x11_codepair::new(0x03e0, 0x0101),
1565 _sapp_x11_codepair::new(0x03e7, 0x012f),
1566 _sapp_x11_codepair::new(0x03ec, 0x0117),
1567 _sapp_x11_codepair::new(0x03ef, 0x012b),
1568 _sapp_x11_codepair::new(0x03f1, 0x0146),
1569 _sapp_x11_codepair::new(0x03f2, 0x014d),
1570 _sapp_x11_codepair::new(0x03f3, 0x0137),
1571 _sapp_x11_codepair::new(0x03f9, 0x0173),
1572 _sapp_x11_codepair::new(0x03fd, 0x0169),
1573 _sapp_x11_codepair::new(0x03fe, 0x016b),
1574 _sapp_x11_codepair::new(0x047e, 0x203e),
1575 _sapp_x11_codepair::new(0x04a1, 0x3002),
1576 _sapp_x11_codepair::new(0x04a2, 0x300c),
1577 _sapp_x11_codepair::new(0x04a3, 0x300d),
1578 _sapp_x11_codepair::new(0x04a4, 0x3001),
1579 _sapp_x11_codepair::new(0x04a5, 0x30fb),
1580 _sapp_x11_codepair::new(0x04a6, 0x30f2),
1581 _sapp_x11_codepair::new(0x04a7, 0x30a1),
1582 _sapp_x11_codepair::new(0x04a8, 0x30a3),
1583 _sapp_x11_codepair::new(0x04a9, 0x30a5),
1584 _sapp_x11_codepair::new(0x04aa, 0x30a7),
1585 _sapp_x11_codepair::new(0x04ab, 0x30a9),
1586 _sapp_x11_codepair::new(0x04ac, 0x30e3),
1587 _sapp_x11_codepair::new(0x04ad, 0x30e5),
1588 _sapp_x11_codepair::new(0x04ae, 0x30e7),
1589 _sapp_x11_codepair::new(0x04af, 0x30c3),
1590 _sapp_x11_codepair::new(0x04b0, 0x30fc),
1591 _sapp_x11_codepair::new(0x04b1, 0x30a2),
1592 _sapp_x11_codepair::new(0x04b2, 0x30a4),
1593 _sapp_x11_codepair::new(0x04b3, 0x30a6),
1594 _sapp_x11_codepair::new(0x04b4, 0x30a8),
1595 _sapp_x11_codepair::new(0x04b5, 0x30aa),
1596 _sapp_x11_codepair::new(0x04b6, 0x30ab),
1597 _sapp_x11_codepair::new(0x04b7, 0x30ad),
1598 _sapp_x11_codepair::new(0x04b8, 0x30af),
1599 _sapp_x11_codepair::new(0x04b9, 0x30b1),
1600 _sapp_x11_codepair::new(0x04ba, 0x30b3),
1601 _sapp_x11_codepair::new(0x04bb, 0x30b5),
1602 _sapp_x11_codepair::new(0x04bc, 0x30b7),
1603 _sapp_x11_codepair::new(0x04bd, 0x30b9),
1604 _sapp_x11_codepair::new(0x04be, 0x30bb),
1605 _sapp_x11_codepair::new(0x04bf, 0x30bd),
1606 _sapp_x11_codepair::new(0x04c0, 0x30bf),
1607 _sapp_x11_codepair::new(0x04c1, 0x30c1),
1608 _sapp_x11_codepair::new(0x04c2, 0x30c4),
1609 _sapp_x11_codepair::new(0x04c3, 0x30c6),
1610 _sapp_x11_codepair::new(0x04c4, 0x30c8),
1611 _sapp_x11_codepair::new(0x04c5, 0x30ca),
1612 _sapp_x11_codepair::new(0x04c6, 0x30cb),
1613 _sapp_x11_codepair::new(0x04c7, 0x30cc),
1614 _sapp_x11_codepair::new(0x04c8, 0x30cd),
1615 _sapp_x11_codepair::new(0x04c9, 0x30ce),
1616 _sapp_x11_codepair::new(0x04ca, 0x30cf),
1617 _sapp_x11_codepair::new(0x04cb, 0x30d2),
1618 _sapp_x11_codepair::new(0x04cc, 0x30d5),
1619 _sapp_x11_codepair::new(0x04cd, 0x30d8),
1620 _sapp_x11_codepair::new(0x04ce, 0x30db),
1621 _sapp_x11_codepair::new(0x04cf, 0x30de),
1622 _sapp_x11_codepair::new(0x04d0, 0x30df),
1623 _sapp_x11_codepair::new(0x04d1, 0x30e0),
1624 _sapp_x11_codepair::new(0x04d2, 0x30e1),
1625 _sapp_x11_codepair::new(0x04d3, 0x30e2),
1626 _sapp_x11_codepair::new(0x04d4, 0x30e4),
1627 _sapp_x11_codepair::new(0x04d5, 0x30e6),
1628 _sapp_x11_codepair::new(0x04d6, 0x30e8),
1629 _sapp_x11_codepair::new(0x04d7, 0x30e9),
1630 _sapp_x11_codepair::new(0x04d8, 0x30ea),
1631 _sapp_x11_codepair::new(0x04d9, 0x30eb),
1632 _sapp_x11_codepair::new(0x04da, 0x30ec),
1633 _sapp_x11_codepair::new(0x04db, 0x30ed),
1634 _sapp_x11_codepair::new(0x04dc, 0x30ef),
1635 _sapp_x11_codepair::new(0x04dd, 0x30f3),
1636 _sapp_x11_codepair::new(0x04de, 0x309b),
1637 _sapp_x11_codepair::new(0x04df, 0x309c),
1638 _sapp_x11_codepair::new(0x05ac, 0x060c),
1639 _sapp_x11_codepair::new(0x05bb, 0x061b),
1640 _sapp_x11_codepair::new(0x05bf, 0x061f),
1641 _sapp_x11_codepair::new(0x05c1, 0x0621),
1642 _sapp_x11_codepair::new(0x05c2, 0x0622),
1643 _sapp_x11_codepair::new(0x05c3, 0x0623),
1644 _sapp_x11_codepair::new(0x05c4, 0x0624),
1645 _sapp_x11_codepair::new(0x05c5, 0x0625),
1646 _sapp_x11_codepair::new(0x05c6, 0x0626),
1647 _sapp_x11_codepair::new(0x05c7, 0x0627),
1648 _sapp_x11_codepair::new(0x05c8, 0x0628),
1649 _sapp_x11_codepair::new(0x05c9, 0x0629),
1650 _sapp_x11_codepair::new(0x05ca, 0x062a),
1651 _sapp_x11_codepair::new(0x05cb, 0x062b),
1652 _sapp_x11_codepair::new(0x05cc, 0x062c),
1653 _sapp_x11_codepair::new(0x05cd, 0x062d),
1654 _sapp_x11_codepair::new(0x05ce, 0x062e),
1655 _sapp_x11_codepair::new(0x05cf, 0x062f),
1656 _sapp_x11_codepair::new(0x05d0, 0x0630),
1657 _sapp_x11_codepair::new(0x05d1, 0x0631),
1658 _sapp_x11_codepair::new(0x05d2, 0x0632),
1659 _sapp_x11_codepair::new(0x05d3, 0x0633),
1660 _sapp_x11_codepair::new(0x05d4, 0x0634),
1661 _sapp_x11_codepair::new(0x05d5, 0x0635),
1662 _sapp_x11_codepair::new(0x05d6, 0x0636),
1663 _sapp_x11_codepair::new(0x05d7, 0x0637),
1664 _sapp_x11_codepair::new(0x05d8, 0x0638),
1665 _sapp_x11_codepair::new(0x05d9, 0x0639),
1666 _sapp_x11_codepair::new(0x05da, 0x063a),
1667 _sapp_x11_codepair::new(0x05e0, 0x0640),
1668 _sapp_x11_codepair::new(0x05e1, 0x0641),
1669 _sapp_x11_codepair::new(0x05e2, 0x0642),
1670 _sapp_x11_codepair::new(0x05e3, 0x0643),
1671 _sapp_x11_codepair::new(0x05e4, 0x0644),
1672 _sapp_x11_codepair::new(0x05e5, 0x0645),
1673 _sapp_x11_codepair::new(0x05e6, 0x0646),
1674 _sapp_x11_codepair::new(0x05e7, 0x0647),
1675 _sapp_x11_codepair::new(0x05e8, 0x0648),
1676 _sapp_x11_codepair::new(0x05e9, 0x0649),
1677 _sapp_x11_codepair::new(0x05ea, 0x064a),
1678 _sapp_x11_codepair::new(0x05eb, 0x064b),
1679 _sapp_x11_codepair::new(0x05ec, 0x064c),
1680 _sapp_x11_codepair::new(0x05ed, 0x064d),
1681 _sapp_x11_codepair::new(0x05ee, 0x064e),
1682 _sapp_x11_codepair::new(0x05ef, 0x064f),
1683 _sapp_x11_codepair::new(0x05f0, 0x0650),
1684 _sapp_x11_codepair::new(0x05f1, 0x0651),
1685 _sapp_x11_codepair::new(0x05f2, 0x0652),
1686 _sapp_x11_codepair::new(0x06a1, 0x0452),
1687 _sapp_x11_codepair::new(0x06a2, 0x0453),
1688 _sapp_x11_codepair::new(0x06a3, 0x0451),
1689 _sapp_x11_codepair::new(0x06a4, 0x0454),
1690 _sapp_x11_codepair::new(0x06a5, 0x0455),
1691 _sapp_x11_codepair::new(0x06a6, 0x0456),
1692 _sapp_x11_codepair::new(0x06a7, 0x0457),
1693 _sapp_x11_codepair::new(0x06a8, 0x0458),
1694 _sapp_x11_codepair::new(0x06a9, 0x0459),
1695 _sapp_x11_codepair::new(0x06aa, 0x045a),
1696 _sapp_x11_codepair::new(0x06ab, 0x045b),
1697 _sapp_x11_codepair::new(0x06ac, 0x045c),
1698 _sapp_x11_codepair::new(0x06ae, 0x045e),
1699 _sapp_x11_codepair::new(0x06af, 0x045f),
1700 _sapp_x11_codepair::new(0x06b0, 0x2116),
1701 _sapp_x11_codepair::new(0x06b1, 0x0402),
1702 _sapp_x11_codepair::new(0x06b2, 0x0403),
1703 _sapp_x11_codepair::new(0x06b3, 0x0401),
1704 _sapp_x11_codepair::new(0x06b4, 0x0404),
1705 _sapp_x11_codepair::new(0x06b5, 0x0405),
1706 _sapp_x11_codepair::new(0x06b6, 0x0406),
1707 _sapp_x11_codepair::new(0x06b7, 0x0407),
1708 _sapp_x11_codepair::new(0x06b8, 0x0408),
1709 _sapp_x11_codepair::new(0x06b9, 0x0409),
1710 _sapp_x11_codepair::new(0x06ba, 0x040a),
1711 _sapp_x11_codepair::new(0x06bb, 0x040b),
1712 _sapp_x11_codepair::new(0x06bc, 0x040c),
1713 _sapp_x11_codepair::new(0x06be, 0x040e),
1714 _sapp_x11_codepair::new(0x06bf, 0x040f),
1715 _sapp_x11_codepair::new(0x06c0, 0x044e),
1716 _sapp_x11_codepair::new(0x06c1, 0x0430),
1717 _sapp_x11_codepair::new(0x06c2, 0x0431),
1718 _sapp_x11_codepair::new(0x06c3, 0x0446),
1719 _sapp_x11_codepair::new(0x06c4, 0x0434),
1720 _sapp_x11_codepair::new(0x06c5, 0x0435),
1721 _sapp_x11_codepair::new(0x06c6, 0x0444),
1722 _sapp_x11_codepair::new(0x06c7, 0x0433),
1723 _sapp_x11_codepair::new(0x06c8, 0x0445),
1724 _sapp_x11_codepair::new(0x06c9, 0x0438),
1725 _sapp_x11_codepair::new(0x06ca, 0x0439),
1726 _sapp_x11_codepair::new(0x06cb, 0x043a),
1727 _sapp_x11_codepair::new(0x06cc, 0x043b),
1728 _sapp_x11_codepair::new(0x06cd, 0x043c),
1729 _sapp_x11_codepair::new(0x06ce, 0x043d),
1730 _sapp_x11_codepair::new(0x06cf, 0x043e),
1731 _sapp_x11_codepair::new(0x06d0, 0x043f),
1732 _sapp_x11_codepair::new(0x06d1, 0x044f),
1733 _sapp_x11_codepair::new(0x06d2, 0x0440),
1734 _sapp_x11_codepair::new(0x06d3, 0x0441),
1735 _sapp_x11_codepair::new(0x06d4, 0x0442),
1736 _sapp_x11_codepair::new(0x06d5, 0x0443),
1737 _sapp_x11_codepair::new(0x06d6, 0x0436),
1738 _sapp_x11_codepair::new(0x06d7, 0x0432),
1739 _sapp_x11_codepair::new(0x06d8, 0x044c),
1740 _sapp_x11_codepair::new(0x06d9, 0x044b),
1741 _sapp_x11_codepair::new(0x06da, 0x0437),
1742 _sapp_x11_codepair::new(0x06db, 0x0448),
1743 _sapp_x11_codepair::new(0x06dc, 0x044d),
1744 _sapp_x11_codepair::new(0x06dd, 0x0449),
1745 _sapp_x11_codepair::new(0x06de, 0x0447),
1746 _sapp_x11_codepair::new(0x06df, 0x044a),
1747 _sapp_x11_codepair::new(0x06e0, 0x042e),
1748 _sapp_x11_codepair::new(0x06e1, 0x0410),
1749 _sapp_x11_codepair::new(0x06e2, 0x0411),
1750 _sapp_x11_codepair::new(0x06e3, 0x0426),
1751 _sapp_x11_codepair::new(0x06e4, 0x0414),
1752 _sapp_x11_codepair::new(0x06e5, 0x0415),
1753 _sapp_x11_codepair::new(0x06e6, 0x0424),
1754 _sapp_x11_codepair::new(0x06e7, 0x0413),
1755 _sapp_x11_codepair::new(0x06e8, 0x0425),
1756 _sapp_x11_codepair::new(0x06e9, 0x0418),
1757 _sapp_x11_codepair::new(0x06ea, 0x0419),
1758 _sapp_x11_codepair::new(0x06eb, 0x041a),
1759 _sapp_x11_codepair::new(0x06ec, 0x041b),
1760 _sapp_x11_codepair::new(0x06ed, 0x041c),
1761 _sapp_x11_codepair::new(0x06ee, 0x041d),
1762 _sapp_x11_codepair::new(0x06ef, 0x041e),
1763 _sapp_x11_codepair::new(0x06f0, 0x041f),
1764 _sapp_x11_codepair::new(0x06f1, 0x042f),
1765 _sapp_x11_codepair::new(0x06f2, 0x0420),
1766 _sapp_x11_codepair::new(0x06f3, 0x0421),
1767 _sapp_x11_codepair::new(0x06f4, 0x0422),
1768 _sapp_x11_codepair::new(0x06f5, 0x0423),
1769 _sapp_x11_codepair::new(0x06f6, 0x0416),
1770 _sapp_x11_codepair::new(0x06f7, 0x0412),
1771 _sapp_x11_codepair::new(0x06f8, 0x042c),
1772 _sapp_x11_codepair::new(0x06f9, 0x042b),
1773 _sapp_x11_codepair::new(0x06fa, 0x0417),
1774 _sapp_x11_codepair::new(0x06fb, 0x0428),
1775 _sapp_x11_codepair::new(0x06fc, 0x042d),
1776 _sapp_x11_codepair::new(0x06fd, 0x0429),
1777 _sapp_x11_codepair::new(0x06fe, 0x0427),
1778 _sapp_x11_codepair::new(0x06ff, 0x042a),
1779 _sapp_x11_codepair::new(0x07a1, 0x0386),
1780 _sapp_x11_codepair::new(0x07a2, 0x0388),
1781 _sapp_x11_codepair::new(0x07a3, 0x0389),
1782 _sapp_x11_codepair::new(0x07a4, 0x038a),
1783 _sapp_x11_codepair::new(0x07a5, 0x03aa),
1784 _sapp_x11_codepair::new(0x07a7, 0x038c),
1785 _sapp_x11_codepair::new(0x07a8, 0x038e),
1786 _sapp_x11_codepair::new(0x07a9, 0x03ab),
1787 _sapp_x11_codepair::new(0x07ab, 0x038f),
1788 _sapp_x11_codepair::new(0x07ae, 0x0385),
1789 _sapp_x11_codepair::new(0x07af, 0x2015),
1790 _sapp_x11_codepair::new(0x07b1, 0x03ac),
1791 _sapp_x11_codepair::new(0x07b2, 0x03ad),
1792 _sapp_x11_codepair::new(0x07b3, 0x03ae),
1793 _sapp_x11_codepair::new(0x07b4, 0x03af),
1794 _sapp_x11_codepair::new(0x07b5, 0x03ca),
1795 _sapp_x11_codepair::new(0x07b6, 0x0390),
1796 _sapp_x11_codepair::new(0x07b7, 0x03cc),
1797 _sapp_x11_codepair::new(0x07b8, 0x03cd),
1798 _sapp_x11_codepair::new(0x07b9, 0x03cb),
1799 _sapp_x11_codepair::new(0x07ba, 0x03b0),
1800 _sapp_x11_codepair::new(0x07bb, 0x03ce),
1801 _sapp_x11_codepair::new(0x07c1, 0x0391),
1802 _sapp_x11_codepair::new(0x07c2, 0x0392),
1803 _sapp_x11_codepair::new(0x07c3, 0x0393),
1804 _sapp_x11_codepair::new(0x07c4, 0x0394),
1805 _sapp_x11_codepair::new(0x07c5, 0x0395),
1806 _sapp_x11_codepair::new(0x07c6, 0x0396),
1807 _sapp_x11_codepair::new(0x07c7, 0x0397),
1808 _sapp_x11_codepair::new(0x07c8, 0x0398),
1809 _sapp_x11_codepair::new(0x07c9, 0x0399),
1810 _sapp_x11_codepair::new(0x07ca, 0x039a),
1811 _sapp_x11_codepair::new(0x07cb, 0x039b),
1812 _sapp_x11_codepair::new(0x07cc, 0x039c),
1813 _sapp_x11_codepair::new(0x07cd, 0x039d),
1814 _sapp_x11_codepair::new(0x07ce, 0x039e),
1815 _sapp_x11_codepair::new(0x07cf, 0x039f),
1816 _sapp_x11_codepair::new(0x07d0, 0x03a0),
1817 _sapp_x11_codepair::new(0x07d1, 0x03a1),
1818 _sapp_x11_codepair::new(0x07d2, 0x03a3),
1819 _sapp_x11_codepair::new(0x07d4, 0x03a4),
1820 _sapp_x11_codepair::new(0x07d5, 0x03a5),
1821 _sapp_x11_codepair::new(0x07d6, 0x03a6),
1822 _sapp_x11_codepair::new(0x07d7, 0x03a7),
1823 _sapp_x11_codepair::new(0x07d8, 0x03a8),
1824 _sapp_x11_codepair::new(0x07d9, 0x03a9),
1825 _sapp_x11_codepair::new(0x07e1, 0x03b1),
1826 _sapp_x11_codepair::new(0x07e2, 0x03b2),
1827 _sapp_x11_codepair::new(0x07e3, 0x03b3),
1828 _sapp_x11_codepair::new(0x07e4, 0x03b4),
1829 _sapp_x11_codepair::new(0x07e5, 0x03b5),
1830 _sapp_x11_codepair::new(0x07e6, 0x03b6),
1831 _sapp_x11_codepair::new(0x07e7, 0x03b7),
1832 _sapp_x11_codepair::new(0x07e8, 0x03b8),
1833 _sapp_x11_codepair::new(0x07e9, 0x03b9),
1834 _sapp_x11_codepair::new(0x07ea, 0x03ba),
1835 _sapp_x11_codepair::new(0x07eb, 0x03bb),
1836 _sapp_x11_codepair::new(0x07ec, 0x03bc),
1837 _sapp_x11_codepair::new(0x07ed, 0x03bd),
1838 _sapp_x11_codepair::new(0x07ee, 0x03be),
1839 _sapp_x11_codepair::new(0x07ef, 0x03bf),
1840 _sapp_x11_codepair::new(0x07f0, 0x03c0),
1841 _sapp_x11_codepair::new(0x07f1, 0x03c1),
1842 _sapp_x11_codepair::new(0x07f2, 0x03c3),
1843 _sapp_x11_codepair::new(0x07f3, 0x03c2),
1844 _sapp_x11_codepair::new(0x07f4, 0x03c4),
1845 _sapp_x11_codepair::new(0x07f5, 0x03c5),
1846 _sapp_x11_codepair::new(0x07f6, 0x03c6),
1847 _sapp_x11_codepair::new(0x07f7, 0x03c7),
1848 _sapp_x11_codepair::new(0x07f8, 0x03c8),
1849 _sapp_x11_codepair::new(0x07f9, 0x03c9),
1850 _sapp_x11_codepair::new(0x08a1, 0x23b7),
1851 _sapp_x11_codepair::new(0x08a2, 0x250c),
1852 _sapp_x11_codepair::new(0x08a3, 0x2500),
1853 _sapp_x11_codepair::new(0x08a4, 0x2320),
1854 _sapp_x11_codepair::new(0x08a5, 0x2321),
1855 _sapp_x11_codepair::new(0x08a6, 0x2502),
1856 _sapp_x11_codepair::new(0x08a7, 0x23a1),
1857 _sapp_x11_codepair::new(0x08a8, 0x23a3),
1858 _sapp_x11_codepair::new(0x08a9, 0x23a4),
1859 _sapp_x11_codepair::new(0x08aa, 0x23a6),
1860 _sapp_x11_codepair::new(0x08ab, 0x239b),
1861 _sapp_x11_codepair::new(0x08ac, 0x239d),
1862 _sapp_x11_codepair::new(0x08ad, 0x239e),
1863 _sapp_x11_codepair::new(0x08ae, 0x23a0),
1864 _sapp_x11_codepair::new(0x08af, 0x23a8),
1865 _sapp_x11_codepair::new(0x08b0, 0x23ac),
1866 _sapp_x11_codepair::new(0x08bc, 0x2264),
1867 _sapp_x11_codepair::new(0x08bd, 0x2260),
1868 _sapp_x11_codepair::new(0x08be, 0x2265),
1869 _sapp_x11_codepair::new(0x08bf, 0x222b),
1870 _sapp_x11_codepair::new(0x08c0, 0x2234),
1871 _sapp_x11_codepair::new(0x08c1, 0x221d),
1872 _sapp_x11_codepair::new(0x08c2, 0x221e),
1873 _sapp_x11_codepair::new(0x08c5, 0x2207),
1874 _sapp_x11_codepair::new(0x08c8, 0x223c),
1875 _sapp_x11_codepair::new(0x08c9, 0x2243),
1876 _sapp_x11_codepair::new(0x08cd, 0x21d4),
1877 _sapp_x11_codepair::new(0x08ce, 0x21d2),
1878 _sapp_x11_codepair::new(0x08cf, 0x2261),
1879 _sapp_x11_codepair::new(0x08d6, 0x221a),
1880 _sapp_x11_codepair::new(0x08da, 0x2282),
1881 _sapp_x11_codepair::new(0x08db, 0x2283),
1882 _sapp_x11_codepair::new(0x08dc, 0x2229),
1883 _sapp_x11_codepair::new(0x08dd, 0x222a),
1884 _sapp_x11_codepair::new(0x08de, 0x2227),
1885 _sapp_x11_codepair::new(0x08df, 0x2228),
1886 _sapp_x11_codepair::new(0x08ef, 0x2202),
1887 _sapp_x11_codepair::new(0x08f6, 0x0192),
1888 _sapp_x11_codepair::new(0x08fb, 0x2190),
1889 _sapp_x11_codepair::new(0x08fc, 0x2191),
1890 _sapp_x11_codepair::new(0x08fd, 0x2192),
1891 _sapp_x11_codepair::new(0x08fe, 0x2193),
1892 _sapp_x11_codepair::new(0x09e0, 0x25c6),
1893 _sapp_x11_codepair::new(0x09e1, 0x2592),
1894 _sapp_x11_codepair::new(0x09e2, 0x2409),
1895 _sapp_x11_codepair::new(0x09e3, 0x240c),
1896 _sapp_x11_codepair::new(0x09e4, 0x240d),
1897 _sapp_x11_codepair::new(0x09e5, 0x240a),
1898 _sapp_x11_codepair::new(0x09e8, 0x2424),
1899 _sapp_x11_codepair::new(0x09e9, 0x240b),
1900 _sapp_x11_codepair::new(0x09ea, 0x2518),
1901 _sapp_x11_codepair::new(0x09eb, 0x2510),
1902 _sapp_x11_codepair::new(0x09ec, 0x250c),
1903 _sapp_x11_codepair::new(0x09ed, 0x2514),
1904 _sapp_x11_codepair::new(0x09ee, 0x253c),
1905 _sapp_x11_codepair::new(0x09ef, 0x23ba),
1906 _sapp_x11_codepair::new(0x09f0, 0x23bb),
1907 _sapp_x11_codepair::new(0x09f1, 0x2500),
1908 _sapp_x11_codepair::new(0x09f2, 0x23bc),
1909 _sapp_x11_codepair::new(0x09f3, 0x23bd),
1910 _sapp_x11_codepair::new(0x09f4, 0x251c),
1911 _sapp_x11_codepair::new(0x09f5, 0x2524),
1912 _sapp_x11_codepair::new(0x09f6, 0x2534),
1913 _sapp_x11_codepair::new(0x09f7, 0x252c),
1914 _sapp_x11_codepair::new(0x09f8, 0x2502),
1915 _sapp_x11_codepair::new(0x0aa1, 0x2003),
1916 _sapp_x11_codepair::new(0x0aa2, 0x2002),
1917 _sapp_x11_codepair::new(0x0aa3, 0x2004),
1918 _sapp_x11_codepair::new(0x0aa4, 0x2005),
1919 _sapp_x11_codepair::new(0x0aa5, 0x2007),
1920 _sapp_x11_codepair::new(0x0aa6, 0x2008),
1921 _sapp_x11_codepair::new(0x0aa7, 0x2009),
1922 _sapp_x11_codepair::new(0x0aa8, 0x200a),
1923 _sapp_x11_codepair::new(0x0aa9, 0x2014),
1924 _sapp_x11_codepair::new(0x0aaa, 0x2013),
1925 _sapp_x11_codepair::new(0x0aae, 0x2026),
1926 _sapp_x11_codepair::new(0x0aaf, 0x2025),
1927 _sapp_x11_codepair::new(0x0ab0, 0x2153),
1928 _sapp_x11_codepair::new(0x0ab1, 0x2154),
1929 _sapp_x11_codepair::new(0x0ab2, 0x2155),
1930 _sapp_x11_codepair::new(0x0ab3, 0x2156),
1931 _sapp_x11_codepair::new(0x0ab4, 0x2157),
1932 _sapp_x11_codepair::new(0x0ab5, 0x2158),
1933 _sapp_x11_codepair::new(0x0ab6, 0x2159),
1934 _sapp_x11_codepair::new(0x0ab7, 0x215a),
1935 _sapp_x11_codepair::new(0x0ab8, 0x2105),
1936 _sapp_x11_codepair::new(0x0abb, 0x2012),
1937 _sapp_x11_codepair::new(0x0abc, 0x2329),
1938 _sapp_x11_codepair::new(0x0abe, 0x232a),
1939 _sapp_x11_codepair::new(0x0ac3, 0x215b),
1940 _sapp_x11_codepair::new(0x0ac4, 0x215c),
1941 _sapp_x11_codepair::new(0x0ac5, 0x215d),
1942 _sapp_x11_codepair::new(0x0ac6, 0x215e),
1943 _sapp_x11_codepair::new(0x0ac9, 0x2122),
1944 _sapp_x11_codepair::new(0x0aca, 0x2613),
1945 _sapp_x11_codepair::new(0x0acc, 0x25c1),
1946 _sapp_x11_codepair::new(0x0acd, 0x25b7),
1947 _sapp_x11_codepair::new(0x0ace, 0x25cb),
1948 _sapp_x11_codepair::new(0x0acf, 0x25af),
1949 _sapp_x11_codepair::new(0x0ad0, 0x2018),
1950 _sapp_x11_codepair::new(0x0ad1, 0x2019),
1951 _sapp_x11_codepair::new(0x0ad2, 0x201c),
1952 _sapp_x11_codepair::new(0x0ad3, 0x201d),
1953 _sapp_x11_codepair::new(0x0ad4, 0x211e),
1954 _sapp_x11_codepair::new(0x0ad6, 0x2032),
1955 _sapp_x11_codepair::new(0x0ad7, 0x2033),
1956 _sapp_x11_codepair::new(0x0ad9, 0x271d),
1957 _sapp_x11_codepair::new(0x0adb, 0x25ac),
1958 _sapp_x11_codepair::new(0x0adc, 0x25c0),
1959 _sapp_x11_codepair::new(0x0add, 0x25b6),
1960 _sapp_x11_codepair::new(0x0ade, 0x25cf),
1961 _sapp_x11_codepair::new(0x0adf, 0x25ae),
1962 _sapp_x11_codepair::new(0x0ae0, 0x25e6),
1963 _sapp_x11_codepair::new(0x0ae1, 0x25ab),
1964 _sapp_x11_codepair::new(0x0ae2, 0x25ad),
1965 _sapp_x11_codepair::new(0x0ae3, 0x25b3),
1966 _sapp_x11_codepair::new(0x0ae4, 0x25bd),
1967 _sapp_x11_codepair::new(0x0ae5, 0x2606),
1968 _sapp_x11_codepair::new(0x0ae6, 0x2022),
1969 _sapp_x11_codepair::new(0x0ae7, 0x25aa),
1970 _sapp_x11_codepair::new(0x0ae8, 0x25b2),
1971 _sapp_x11_codepair::new(0x0ae9, 0x25bc),
1972 _sapp_x11_codepair::new(0x0aea, 0x261c),
1973 _sapp_x11_codepair::new(0x0aeb, 0x261e),
1974 _sapp_x11_codepair::new(0x0aec, 0x2663),
1975 _sapp_x11_codepair::new(0x0aed, 0x2666),
1976 _sapp_x11_codepair::new(0x0aee, 0x2665),
1977 _sapp_x11_codepair::new(0x0af0, 0x2720),
1978 _sapp_x11_codepair::new(0x0af1, 0x2020),
1979 _sapp_x11_codepair::new(0x0af2, 0x2021),
1980 _sapp_x11_codepair::new(0x0af3, 0x2713),
1981 _sapp_x11_codepair::new(0x0af4, 0x2717),
1982 _sapp_x11_codepair::new(0x0af5, 0x266f),
1983 _sapp_x11_codepair::new(0x0af6, 0x266d),
1984 _sapp_x11_codepair::new(0x0af7, 0x2642),
1985 _sapp_x11_codepair::new(0x0af8, 0x2640),
1986 _sapp_x11_codepair::new(0x0af9, 0x260e),
1987 _sapp_x11_codepair::new(0x0afa, 0x2315),
1988 _sapp_x11_codepair::new(0x0afb, 0x2117),
1989 _sapp_x11_codepair::new(0x0afc, 0x2038),
1990 _sapp_x11_codepair::new(0x0afd, 0x201a),
1991 _sapp_x11_codepair::new(0x0afe, 0x201e),
1992 _sapp_x11_codepair::new(0x0ba3, 0x003c),
1993 _sapp_x11_codepair::new(0x0ba6, 0x003e),
1994 _sapp_x11_codepair::new(0x0ba8, 0x2228),
1995 _sapp_x11_codepair::new(0x0ba9, 0x2227),
1996 _sapp_x11_codepair::new(0x0bc0, 0x00af),
1997 _sapp_x11_codepair::new(0x0bc2, 0x22a5),
1998 _sapp_x11_codepair::new(0x0bc3, 0x2229),
1999 _sapp_x11_codepair::new(0x0bc4, 0x230a),
2000 _sapp_x11_codepair::new(0x0bc6, 0x005f),
2001 _sapp_x11_codepair::new(0x0bca, 0x2218),
2002 _sapp_x11_codepair::new(0x0bcc, 0x2395),
2003 _sapp_x11_codepair::new(0x0bce, 0x22a4),
2004 _sapp_x11_codepair::new(0x0bcf, 0x25cb),
2005 _sapp_x11_codepair::new(0x0bd3, 0x2308),
2006 _sapp_x11_codepair::new(0x0bd6, 0x222a),
2007 _sapp_x11_codepair::new(0x0bd8, 0x2283),
2008 _sapp_x11_codepair::new(0x0bda, 0x2282),
2009 _sapp_x11_codepair::new(0x0bdc, 0x22a2),
2010 _sapp_x11_codepair::new(0x0bfc, 0x22a3),
2011 _sapp_x11_codepair::new(0x0cdf, 0x2017),
2012 _sapp_x11_codepair::new(0x0ce0, 0x05d0),
2013 _sapp_x11_codepair::new(0x0ce1, 0x05d1),
2014 _sapp_x11_codepair::new(0x0ce2, 0x05d2),
2015 _sapp_x11_codepair::new(0x0ce3, 0x05d3),
2016 _sapp_x11_codepair::new(0x0ce4, 0x05d4),
2017 _sapp_x11_codepair::new(0x0ce5, 0x05d5),
2018 _sapp_x11_codepair::new(0x0ce6, 0x05d6),
2019 _sapp_x11_codepair::new(0x0ce7, 0x05d7),
2020 _sapp_x11_codepair::new(0x0ce8, 0x05d8),
2021 _sapp_x11_codepair::new(0x0ce9, 0x05d9),
2022 _sapp_x11_codepair::new(0x0cea, 0x05da),
2023 _sapp_x11_codepair::new(0x0ceb, 0x05db),
2024 _sapp_x11_codepair::new(0x0cec, 0x05dc),
2025 _sapp_x11_codepair::new(0x0ced, 0x05dd),
2026 _sapp_x11_codepair::new(0x0cee, 0x05de),
2027 _sapp_x11_codepair::new(0x0cef, 0x05df),
2028 _sapp_x11_codepair::new(0x0cf0, 0x05e0),
2029 _sapp_x11_codepair::new(0x0cf1, 0x05e1),
2030 _sapp_x11_codepair::new(0x0cf2, 0x05e2),
2031 _sapp_x11_codepair::new(0x0cf3, 0x05e3),
2032 _sapp_x11_codepair::new(0x0cf4, 0x05e4),
2033 _sapp_x11_codepair::new(0x0cf5, 0x05e5),
2034 _sapp_x11_codepair::new(0x0cf6, 0x05e6),
2035 _sapp_x11_codepair::new(0x0cf7, 0x05e7),
2036 _sapp_x11_codepair::new(0x0cf8, 0x05e8),
2037 _sapp_x11_codepair::new(0x0cf9, 0x05e9),
2038 _sapp_x11_codepair::new(0x0cfa, 0x05ea),
2039 _sapp_x11_codepair::new(0x0da1, 0x0e01),
2040 _sapp_x11_codepair::new(0x0da2, 0x0e02),
2041 _sapp_x11_codepair::new(0x0da3, 0x0e03),
2042 _sapp_x11_codepair::new(0x0da4, 0x0e04),
2043 _sapp_x11_codepair::new(0x0da5, 0x0e05),
2044 _sapp_x11_codepair::new(0x0da6, 0x0e06),
2045 _sapp_x11_codepair::new(0x0da7, 0x0e07),
2046 _sapp_x11_codepair::new(0x0da8, 0x0e08),
2047 _sapp_x11_codepair::new(0x0da9, 0x0e09),
2048 _sapp_x11_codepair::new(0x0daa, 0x0e0a),
2049 _sapp_x11_codepair::new(0x0dab, 0x0e0b),
2050 _sapp_x11_codepair::new(0x0dac, 0x0e0c),
2051 _sapp_x11_codepair::new(0x0dad, 0x0e0d),
2052 _sapp_x11_codepair::new(0x0dae, 0x0e0e),
2053 _sapp_x11_codepair::new(0x0daf, 0x0e0f),
2054 _sapp_x11_codepair::new(0x0db0, 0x0e10),
2055 _sapp_x11_codepair::new(0x0db1, 0x0e11),
2056 _sapp_x11_codepair::new(0x0db2, 0x0e12),
2057 _sapp_x11_codepair::new(0x0db3, 0x0e13),
2058 _sapp_x11_codepair::new(0x0db4, 0x0e14),
2059 _sapp_x11_codepair::new(0x0db5, 0x0e15),
2060 _sapp_x11_codepair::new(0x0db6, 0x0e16),
2061 _sapp_x11_codepair::new(0x0db7, 0x0e17),
2062 _sapp_x11_codepair::new(0x0db8, 0x0e18),
2063 _sapp_x11_codepair::new(0x0db9, 0x0e19),
2064 _sapp_x11_codepair::new(0x0dba, 0x0e1a),
2065 _sapp_x11_codepair::new(0x0dbb, 0x0e1b),
2066 _sapp_x11_codepair::new(0x0dbc, 0x0e1c),
2067 _sapp_x11_codepair::new(0x0dbd, 0x0e1d),
2068 _sapp_x11_codepair::new(0x0dbe, 0x0e1e),
2069 _sapp_x11_codepair::new(0x0dbf, 0x0e1f),
2070 _sapp_x11_codepair::new(0x0dc0, 0x0e20),
2071 _sapp_x11_codepair::new(0x0dc1, 0x0e21),
2072 _sapp_x11_codepair::new(0x0dc2, 0x0e22),
2073 _sapp_x11_codepair::new(0x0dc3, 0x0e23),
2074 _sapp_x11_codepair::new(0x0dc4, 0x0e24),
2075 _sapp_x11_codepair::new(0x0dc5, 0x0e25),
2076 _sapp_x11_codepair::new(0x0dc6, 0x0e26),
2077 _sapp_x11_codepair::new(0x0dc7, 0x0e27),
2078 _sapp_x11_codepair::new(0x0dc8, 0x0e28),
2079 _sapp_x11_codepair::new(0x0dc9, 0x0e29),
2080 _sapp_x11_codepair::new(0x0dca, 0x0e2a),
2081 _sapp_x11_codepair::new(0x0dcb, 0x0e2b),
2082 _sapp_x11_codepair::new(0x0dcc, 0x0e2c),
2083 _sapp_x11_codepair::new(0x0dcd, 0x0e2d),
2084 _sapp_x11_codepair::new(0x0dce, 0x0e2e),
2085 _sapp_x11_codepair::new(0x0dcf, 0x0e2f),
2086 _sapp_x11_codepair::new(0x0dd0, 0x0e30),
2087 _sapp_x11_codepair::new(0x0dd1, 0x0e31),
2088 _sapp_x11_codepair::new(0x0dd2, 0x0e32),
2089 _sapp_x11_codepair::new(0x0dd3, 0x0e33),
2090 _sapp_x11_codepair::new(0x0dd4, 0x0e34),
2091 _sapp_x11_codepair::new(0x0dd5, 0x0e35),
2092 _sapp_x11_codepair::new(0x0dd6, 0x0e36),
2093 _sapp_x11_codepair::new(0x0dd7, 0x0e37),
2094 _sapp_x11_codepair::new(0x0dd8, 0x0e38),
2095 _sapp_x11_codepair::new(0x0dd9, 0x0e39),
2096 _sapp_x11_codepair::new(0x0dda, 0x0e3a),
2097 _sapp_x11_codepair::new(0x0ddf, 0x0e3f),
2098 _sapp_x11_codepair::new(0x0de0, 0x0e40),
2099 _sapp_x11_codepair::new(0x0de1, 0x0e41),
2100 _sapp_x11_codepair::new(0x0de2, 0x0e42),
2101 _sapp_x11_codepair::new(0x0de3, 0x0e43),
2102 _sapp_x11_codepair::new(0x0de4, 0x0e44),
2103 _sapp_x11_codepair::new(0x0de5, 0x0e45),
2104 _sapp_x11_codepair::new(0x0de6, 0x0e46),
2105 _sapp_x11_codepair::new(0x0de7, 0x0e47),
2106 _sapp_x11_codepair::new(0x0de8, 0x0e48),
2107 _sapp_x11_codepair::new(0x0de9, 0x0e49),
2108 _sapp_x11_codepair::new(0x0dea, 0x0e4a),
2109 _sapp_x11_codepair::new(0x0deb, 0x0e4b),
2110 _sapp_x11_codepair::new(0x0dec, 0x0e4c),
2111 _sapp_x11_codepair::new(0x0ded, 0x0e4d),
2112 _sapp_x11_codepair::new(0x0df0, 0x0e50),
2113 _sapp_x11_codepair::new(0x0df1, 0x0e51),
2114 _sapp_x11_codepair::new(0x0df2, 0x0e52),
2115 _sapp_x11_codepair::new(0x0df3, 0x0e53),
2116 _sapp_x11_codepair::new(0x0df4, 0x0e54),
2117 _sapp_x11_codepair::new(0x0df5, 0x0e55),
2118 _sapp_x11_codepair::new(0x0df6, 0x0e56),
2119 _sapp_x11_codepair::new(0x0df7, 0x0e57),
2120 _sapp_x11_codepair::new(0x0df8, 0x0e58),
2121 _sapp_x11_codepair::new(0x0df9, 0x0e59),
2122 _sapp_x11_codepair::new(0x0ea1, 0x3131),
2123 _sapp_x11_codepair::new(0x0ea2, 0x3132),
2124 _sapp_x11_codepair::new(0x0ea3, 0x3133),
2125 _sapp_x11_codepair::new(0x0ea4, 0x3134),
2126 _sapp_x11_codepair::new(0x0ea5, 0x3135),
2127 _sapp_x11_codepair::new(0x0ea6, 0x3136),
2128 _sapp_x11_codepair::new(0x0ea7, 0x3137),
2129 _sapp_x11_codepair::new(0x0ea8, 0x3138),
2130 _sapp_x11_codepair::new(0x0ea9, 0x3139),
2131 _sapp_x11_codepair::new(0x0eaa, 0x313a),
2132 _sapp_x11_codepair::new(0x0eab, 0x313b),
2133 _sapp_x11_codepair::new(0x0eac, 0x313c),
2134 _sapp_x11_codepair::new(0x0ead, 0x313d),
2135 _sapp_x11_codepair::new(0x0eae, 0x313e),
2136 _sapp_x11_codepair::new(0x0eaf, 0x313f),
2137 _sapp_x11_codepair::new(0x0eb0, 0x3140),
2138 _sapp_x11_codepair::new(0x0eb1, 0x3141),
2139 _sapp_x11_codepair::new(0x0eb2, 0x3142),
2140 _sapp_x11_codepair::new(0x0eb3, 0x3143),
2141 _sapp_x11_codepair::new(0x0eb4, 0x3144),
2142 _sapp_x11_codepair::new(0x0eb5, 0x3145),
2143 _sapp_x11_codepair::new(0x0eb6, 0x3146),
2144 _sapp_x11_codepair::new(0x0eb7, 0x3147),
2145 _sapp_x11_codepair::new(0x0eb8, 0x3148),
2146 _sapp_x11_codepair::new(0x0eb9, 0x3149),
2147 _sapp_x11_codepair::new(0x0eba, 0x314a),
2148 _sapp_x11_codepair::new(0x0ebb, 0x314b),
2149 _sapp_x11_codepair::new(0x0ebc, 0x314c),
2150 _sapp_x11_codepair::new(0x0ebd, 0x314d),
2151 _sapp_x11_codepair::new(0x0ebe, 0x314e),
2152 _sapp_x11_codepair::new(0x0ebf, 0x314f),
2153 _sapp_x11_codepair::new(0x0ec0, 0x3150),
2154 _sapp_x11_codepair::new(0x0ec1, 0x3151),
2155 _sapp_x11_codepair::new(0x0ec2, 0x3152),
2156 _sapp_x11_codepair::new(0x0ec3, 0x3153),
2157 _sapp_x11_codepair::new(0x0ec4, 0x3154),
2158 _sapp_x11_codepair::new(0x0ec5, 0x3155),
2159 _sapp_x11_codepair::new(0x0ec6, 0x3156),
2160 _sapp_x11_codepair::new(0x0ec7, 0x3157),
2161 _sapp_x11_codepair::new(0x0ec8, 0x3158),
2162 _sapp_x11_codepair::new(0x0ec9, 0x3159),
2163 _sapp_x11_codepair::new(0x0eca, 0x315a),
2164 _sapp_x11_codepair::new(0x0ecb, 0x315b),
2165 _sapp_x11_codepair::new(0x0ecc, 0x315c),
2166 _sapp_x11_codepair::new(0x0ecd, 0x315d),
2167 _sapp_x11_codepair::new(0x0ece, 0x315e),
2168 _sapp_x11_codepair::new(0x0ecf, 0x315f),
2169 _sapp_x11_codepair::new(0x0ed0, 0x3160),
2170 _sapp_x11_codepair::new(0x0ed1, 0x3161),
2171 _sapp_x11_codepair::new(0x0ed2, 0x3162),
2172 _sapp_x11_codepair::new(0x0ed3, 0x3163),
2173 _sapp_x11_codepair::new(0x0ed4, 0x11a8),
2174 _sapp_x11_codepair::new(0x0ed5, 0x11a9),
2175 _sapp_x11_codepair::new(0x0ed6, 0x11aa),
2176 _sapp_x11_codepair::new(0x0ed7, 0x11ab),
2177 _sapp_x11_codepair::new(0x0ed8, 0x11ac),
2178 _sapp_x11_codepair::new(0x0ed9, 0x11ad),
2179 _sapp_x11_codepair::new(0x0eda, 0x11ae),
2180 _sapp_x11_codepair::new(0x0edb, 0x11af),
2181 _sapp_x11_codepair::new(0x0edc, 0x11b0),
2182 _sapp_x11_codepair::new(0x0edd, 0x11b1),
2183 _sapp_x11_codepair::new(0x0ede, 0x11b2),
2184 _sapp_x11_codepair::new(0x0edf, 0x11b3),
2185 _sapp_x11_codepair::new(0x0ee0, 0x11b4),
2186 _sapp_x11_codepair::new(0x0ee1, 0x11b5),
2187 _sapp_x11_codepair::new(0x0ee2, 0x11b6),
2188 _sapp_x11_codepair::new(0x0ee3, 0x11b7),
2189 _sapp_x11_codepair::new(0x0ee4, 0x11b8),
2190 _sapp_x11_codepair::new(0x0ee5, 0x11b9),
2191 _sapp_x11_codepair::new(0x0ee6, 0x11ba),
2192 _sapp_x11_codepair::new(0x0ee7, 0x11bb),
2193 _sapp_x11_codepair::new(0x0ee8, 0x11bc),
2194 _sapp_x11_codepair::new(0x0ee9, 0x11bd),
2195 _sapp_x11_codepair::new(0x0eea, 0x11be),
2196 _sapp_x11_codepair::new(0x0eeb, 0x11bf),
2197 _sapp_x11_codepair::new(0x0eec, 0x11c0),
2198 _sapp_x11_codepair::new(0x0eed, 0x11c1),
2199 _sapp_x11_codepair::new(0x0eee, 0x11c2),
2200 _sapp_x11_codepair::new(0x0eef, 0x316d),
2201 _sapp_x11_codepair::new(0x0ef0, 0x3171),
2202 _sapp_x11_codepair::new(0x0ef1, 0x3178),
2203 _sapp_x11_codepair::new(0x0ef2, 0x317f),
2204 _sapp_x11_codepair::new(0x0ef3, 0x3181),
2205 _sapp_x11_codepair::new(0x0ef4, 0x3184),
2206 _sapp_x11_codepair::new(0x0ef5, 0x3186),
2207 _sapp_x11_codepair::new(0x0ef6, 0x318d),
2208 _sapp_x11_codepair::new(0x0ef7, 0x318e),
2209 _sapp_x11_codepair::new(0x0ef8, 0x11eb),
2210 _sapp_x11_codepair::new(0x0ef9, 0x11f0),
2211 _sapp_x11_codepair::new(0x0efa, 0x11f9),
2212 _sapp_x11_codepair::new(0x0eff, 0x20a9),
2213 _sapp_x11_codepair::new(0x13a4, 0x20ac),
2214 _sapp_x11_codepair::new(0x13bc, 0x0152),
2215 _sapp_x11_codepair::new(0x13bd, 0x0153),
2216 _sapp_x11_codepair::new(0x13be, 0x0178),
2217 _sapp_x11_codepair::new(0x20ac, 0x20ac),
2218 _sapp_x11_codepair::new(0xfe50, '`' as u16),
2219 _sapp_x11_codepair::new(0xfe51, 0x00b4),
2220 _sapp_x11_codepair::new(0xfe52, '^' as u16),
2221 _sapp_x11_codepair::new(0xfe53, '~' as u16),
2222 _sapp_x11_codepair::new(0xfe54, 0x00af),
2223 _sapp_x11_codepair::new(0xfe55, 0x02d8),
2224 _sapp_x11_codepair::new(0xfe56, 0x02d9),
2225 _sapp_x11_codepair::new(0xfe57, 0x00a8),
2226 _sapp_x11_codepair::new(0xfe58, 0x02da),
2227 _sapp_x11_codepair::new(0xfe59, 0x02dd),
2228 _sapp_x11_codepair::new(0xfe5a, 0x02c7),
2229 _sapp_x11_codepair::new(0xfe5b, 0x00b8),
2230 _sapp_x11_codepair::new(0xfe5c, 0x02db),
2231 _sapp_x11_codepair::new(0xfe5d, 0x037a),
2232 _sapp_x11_codepair::new(0xfe5e, 0x309b),
2233 _sapp_x11_codepair::new(0xfe5f, 0x309c),
2234 _sapp_x11_codepair::new(0xfe63, '/' as u16),
2235 _sapp_x11_codepair::new(0xfe64, 0x02bc),
2236 _sapp_x11_codepair::new(0xfe65, 0x02bd),
2237 _sapp_x11_codepair::new(0xfe66, 0x02f5),
2238 _sapp_x11_codepair::new(0xfe67, 0x02f3),
2239 _sapp_x11_codepair::new(0xfe68, 0x02cd),
2240 _sapp_x11_codepair::new(0xfe69, 0xa788),
2241 _sapp_x11_codepair::new(0xfe6a, 0x02f7),
2242 _sapp_x11_codepair::new(0xfe6e, ',' as u16),
2243 _sapp_x11_codepair::new(0xfe6f, 0x00a4),
2244 _sapp_x11_codepair::new(0xfe80, 'a' as u16), _sapp_x11_codepair::new(0xfe81, 'A' as u16), _sapp_x11_codepair::new(0xfe82, 'e' as u16), _sapp_x11_codepair::new(0xfe83, 'E' as u16), _sapp_x11_codepair::new(0xfe84, 'i' as u16), _sapp_x11_codepair::new(0xfe85, 'I' as u16), _sapp_x11_codepair::new(0xfe86, 'o' as u16), _sapp_x11_codepair::new(0xfe87, 'O' as u16), _sapp_x11_codepair::new(0xfe88, 'u' as u16), _sapp_x11_codepair::new(0xfe89, 'U' as u16), _sapp_x11_codepair::new(0xfe8a, 0x0259),
2255 _sapp_x11_codepair::new(0xfe8b, 0x018f),
2256 _sapp_x11_codepair::new(0xfe8c, 0x00b5),
2257 _sapp_x11_codepair::new(0xfe90, '_' as u16),
2258 _sapp_x11_codepair::new(0xfe91, 0x02c8),
2259 _sapp_x11_codepair::new(0xfe92, 0x02cc),
2260 _sapp_x11_codepair::new(0xff80 , ' ' as u16),
2261 _sapp_x11_codepair::new(0xff95 , 0x0037),
2262 _sapp_x11_codepair::new(0xff96 , 0x0034),
2263 _sapp_x11_codepair::new(0xff97 , 0x0038),
2264 _sapp_x11_codepair::new(0xff98 , 0x0036),
2265 _sapp_x11_codepair::new(0xff99 , 0x0032),
2266 _sapp_x11_codepair::new(0xff9a , 0x0039),
2267 _sapp_x11_codepair::new(0xff9b , 0x0033),
2268 _sapp_x11_codepair::new(0xff9c , 0x0031),
2269 _sapp_x11_codepair::new(0xff9d , 0x0035),
2270 _sapp_x11_codepair::new(0xff9e , 0x0030),
2271 _sapp_x11_codepair::new(0xffaa , '*' as u16),
2272 _sapp_x11_codepair::new(0xffab , '+' as u16),
2273 _sapp_x11_codepair::new(0xffac , ',' as u16),
2274 _sapp_x11_codepair::new(0xffad , '-' as u16),
2275 _sapp_x11_codepair::new(0xffae , '.' as u16),
2276 _sapp_x11_codepair::new(0xffaf , '/' as u16),
2277 _sapp_x11_codepair::new(0xffb0 , 0x0030),
2278 _sapp_x11_codepair::new(0xffb1 , 0x0031),
2279 _sapp_x11_codepair::new(0xffb2 , 0x0032),
2280 _sapp_x11_codepair::new(0xffb3 , 0x0033),
2281 _sapp_x11_codepair::new(0xffb4 , 0x0034),
2282 _sapp_x11_codepair::new(0xffb5 , 0x0035),
2283 _sapp_x11_codepair::new(0xffb6 , 0x0036),
2284 _sapp_x11_codepair::new(0xffb7 , 0x0037),
2285 _sapp_x11_codepair::new(0xffb8 , 0x0038),
2286 _sapp_x11_codepair::new(0xffb9 , 0x0039),
2287 _sapp_x11_codepair::new(0xffbd , '=' as u16),
2288];
2289pub unsafe extern "C" fn _sapp_x11_keysym_to_unicode(mut keysym: KeySym) -> i32 {
2290 let mut min = 0 as libc::c_int;
2291 let mut max = (::std::mem::size_of::<[_sapp_x11_codepair; 828]>() as libc::c_ulong)
2292 .wrapping_div(::std::mem::size_of::<_sapp_x11_codepair>() as libc::c_ulong)
2293 .wrapping_sub(1 as libc::c_int as libc::c_ulong) as libc::c_int;
2294 let mut mid: libc::c_int = 0;
2295 if keysym >= 0x20 as libc::c_int as libc::c_ulong
2296 && keysym <= 0x7e as libc::c_int as libc::c_ulong
2297 || keysym >= 0xa0 as libc::c_int as libc::c_ulong
2298 && keysym <= 0xff as libc::c_int as libc::c_ulong
2299 {
2300 return keysym as i32;
2301 }
2302 if keysym & 0xff000000 as libc::c_uint as libc::c_ulong
2303 == 0x1000000 as libc::c_int as libc::c_ulong
2304 {
2305 return (keysym & 0xffffff as libc::c_int as libc::c_ulong) as i32;
2306 }
2307 while max >= min {
2308 mid = (min + max) / 2 as libc::c_int;
2309 if (_sapp_x11_keysymtab[mid as usize].keysym as libc::c_ulong) < keysym {
2310 min = mid + 1 as libc::c_int
2311 } else if _sapp_x11_keysymtab[mid as usize].keysym as libc::c_ulong > keysym {
2312 max = mid - 1 as libc::c_int
2313 } else {
2314 return _sapp_x11_keysymtab[mid as usize].ucs as i32;
2315 }
2316 }
2317 return -(1 as libc::c_int);
2318}
2319pub static mut _sapp_x11_keycodes: [bool; 256] = [false; 256];
2320pub unsafe extern "C" fn _sapp_x11_key_event(
2321 mut type_: sapp_event_type,
2322 mut key: sapp_keycode,
2323 mut repeat: bool,
2324 mut mods: u32,
2325) {
2326 if _sapp_events_enabled() {
2327 _sapp_init_event(type_);
2328 _sapp.event.key_code = key;
2329 _sapp.event.key_repeat = repeat;
2330 _sapp.event.modifiers = mods;
2331 _sapp_call_event(&mut _sapp.event);
2332 };
2333}
2334pub unsafe extern "C" fn _sapp_x11_translate_key(mut scancode: libc::c_int) -> sapp_keycode {
2335 let mut dummy: libc::c_int = 0;
2336 let mut keysyms = XGetKeyboardMapping(
2337 _sapp_x11_display,
2338 scancode as KeyCode,
2339 1 as libc::c_int,
2340 &mut dummy,
2341 );
2342 assert!(!keysyms.is_null());
2343
2344 let mut keysym = *keysyms.offset(0 as libc::c_int as isize);
2345 XFree(keysyms as *mut libc::c_void);
2346 match keysym {
2347 65307 => return sapp_keycode_SAPP_KEYCODE_ESCAPE,
2348 65289 => return sapp_keycode_SAPP_KEYCODE_TAB,
2349 65505 => return sapp_keycode_SAPP_KEYCODE_LEFT_SHIFT,
2350 65506 => return sapp_keycode_SAPP_KEYCODE_RIGHT_SHIFT,
2351 65507 => return sapp_keycode_SAPP_KEYCODE_LEFT_CONTROL,
2352 65508 => return sapp_keycode_SAPP_KEYCODE_RIGHT_CONTROL,
2353 65511 | 65513 => return sapp_keycode_SAPP_KEYCODE_LEFT_ALT,
2354 65406 | 65027 | 65512 | 65514 => return sapp_keycode_SAPP_KEYCODE_RIGHT_ALT,
2355 65515 => return sapp_keycode_SAPP_KEYCODE_LEFT_SUPER,
2356 65516 => return sapp_keycode_SAPP_KEYCODE_RIGHT_SUPER,
2357 65383 => return sapp_keycode_SAPP_KEYCODE_MENU,
2358 65407 => return sapp_keycode_SAPP_KEYCODE_NUM_LOCK,
2359 65509 => return sapp_keycode_SAPP_KEYCODE_CAPS_LOCK,
2360 65377 => return sapp_keycode_SAPP_KEYCODE_PRINT_SCREEN,
2361 65300 => return sapp_keycode_SAPP_KEYCODE_SCROLL_LOCK,
2362 65299 => return sapp_keycode_SAPP_KEYCODE_PAUSE,
2363 65535 => return sapp_keycode_SAPP_KEYCODE_DELETE,
2364 65288 => return sapp_keycode_SAPP_KEYCODE_BACKSPACE,
2365 65293 => return sapp_keycode_SAPP_KEYCODE_ENTER,
2366 65360 => return sapp_keycode_SAPP_KEYCODE_HOME,
2367 65367 => return sapp_keycode_SAPP_KEYCODE_END,
2368 65365 => return sapp_keycode_SAPP_KEYCODE_PAGE_UP,
2369 65366 => return sapp_keycode_SAPP_KEYCODE_PAGE_DOWN,
2370 65379 => return sapp_keycode_SAPP_KEYCODE_INSERT,
2371 65361 => return sapp_keycode_SAPP_KEYCODE_LEFT,
2372 65363 => return sapp_keycode_SAPP_KEYCODE_RIGHT,
2373 65364 => return sapp_keycode_SAPP_KEYCODE_DOWN,
2374 65362 => return sapp_keycode_SAPP_KEYCODE_UP,
2375 65470 => return sapp_keycode_SAPP_KEYCODE_F1,
2376 65471 => return sapp_keycode_SAPP_KEYCODE_F2,
2377 65472 => return sapp_keycode_SAPP_KEYCODE_F3,
2378 65473 => return sapp_keycode_SAPP_KEYCODE_F4,
2379 65474 => return sapp_keycode_SAPP_KEYCODE_F5,
2380 65475 => return sapp_keycode_SAPP_KEYCODE_F6,
2381 65476 => return sapp_keycode_SAPP_KEYCODE_F7,
2382 65477 => return sapp_keycode_SAPP_KEYCODE_F8,
2383 65478 => return sapp_keycode_SAPP_KEYCODE_F9,
2384 65479 => return sapp_keycode_SAPP_KEYCODE_F10,
2385 65480 => return sapp_keycode_SAPP_KEYCODE_F11,
2386 65481 => return sapp_keycode_SAPP_KEYCODE_F12,
2387 65482 => return sapp_keycode_SAPP_KEYCODE_F13,
2388 65483 => return sapp_keycode_SAPP_KEYCODE_F14,
2389 65484 => return sapp_keycode_SAPP_KEYCODE_F15,
2390 65485 => return sapp_keycode_SAPP_KEYCODE_F16,
2391 65486 => return sapp_keycode_SAPP_KEYCODE_F17,
2392 65487 => return sapp_keycode_SAPP_KEYCODE_F18,
2393 65488 => return sapp_keycode_SAPP_KEYCODE_F19,
2394 65489 => return sapp_keycode_SAPP_KEYCODE_F20,
2395 65490 => return sapp_keycode_SAPP_KEYCODE_F21,
2396 65491 => return sapp_keycode_SAPP_KEYCODE_F22,
2397 65492 => return sapp_keycode_SAPP_KEYCODE_F23,
2398 65493 => return sapp_keycode_SAPP_KEYCODE_F24,
2399 65494 => return sapp_keycode_SAPP_KEYCODE_F25,
2400 65455 => return sapp_keycode_SAPP_KEYCODE_KP_DIVIDE,
2401 65450 => return sapp_keycode_SAPP_KEYCODE_KP_MULTIPLY,
2402 65453 => return sapp_keycode_SAPP_KEYCODE_KP_SUBTRACT,
2403 65451 => return sapp_keycode_SAPP_KEYCODE_KP_ADD,
2404 65438 => return sapp_keycode_SAPP_KEYCODE_KP_0,
2405 65436 => return sapp_keycode_SAPP_KEYCODE_KP_1,
2406 65433 => return sapp_keycode_SAPP_KEYCODE_KP_2,
2407 65435 => return sapp_keycode_SAPP_KEYCODE_KP_3,
2408 65430 => return sapp_keycode_SAPP_KEYCODE_KP_4,
2409 65437 => return sapp_keycode_SAPP_KEYCODE_KP_5,
2410 65432 => return sapp_keycode_SAPP_KEYCODE_KP_6,
2411 65429 => return sapp_keycode_SAPP_KEYCODE_KP_7,
2412 65431 => return sapp_keycode_SAPP_KEYCODE_KP_8,
2413 65434 => return sapp_keycode_SAPP_KEYCODE_KP_9,
2414 65439 => return sapp_keycode_SAPP_KEYCODE_KP_DECIMAL,
2415 65469 => return sapp_keycode_SAPP_KEYCODE_KP_EQUAL,
2416 65421 => return sapp_keycode_SAPP_KEYCODE_KP_ENTER,
2417 97 => return sapp_keycode_SAPP_KEYCODE_A,
2418 98 => return sapp_keycode_SAPP_KEYCODE_B,
2419 99 => return sapp_keycode_SAPP_KEYCODE_C,
2420 100 => return sapp_keycode_SAPP_KEYCODE_D,
2421 101 => return sapp_keycode_SAPP_KEYCODE_E,
2422 102 => return sapp_keycode_SAPP_KEYCODE_F,
2423 103 => return sapp_keycode_SAPP_KEYCODE_G,
2424 104 => return sapp_keycode_SAPP_KEYCODE_H,
2425 105 => return sapp_keycode_SAPP_KEYCODE_I,
2426 106 => return sapp_keycode_SAPP_KEYCODE_J,
2427 107 => return sapp_keycode_SAPP_KEYCODE_K,
2428 108 => return sapp_keycode_SAPP_KEYCODE_L,
2429 109 => return sapp_keycode_SAPP_KEYCODE_M,
2430 110 => return sapp_keycode_SAPP_KEYCODE_N,
2431 111 => return sapp_keycode_SAPP_KEYCODE_O,
2432 112 => return sapp_keycode_SAPP_KEYCODE_P,
2433 113 => return sapp_keycode_SAPP_KEYCODE_Q,
2434 114 => return sapp_keycode_SAPP_KEYCODE_R,
2435 115 => return sapp_keycode_SAPP_KEYCODE_S,
2436 116 => return sapp_keycode_SAPP_KEYCODE_T,
2437 117 => return sapp_keycode_SAPP_KEYCODE_U,
2438 118 => return sapp_keycode_SAPP_KEYCODE_V,
2439 119 => return sapp_keycode_SAPP_KEYCODE_W,
2440 120 => return sapp_keycode_SAPP_KEYCODE_X,
2441 121 => return sapp_keycode_SAPP_KEYCODE_Y,
2442 122 => return sapp_keycode_SAPP_KEYCODE_Z,
2443 49 => return sapp_keycode_SAPP_KEYCODE_1,
2444 50 => return sapp_keycode_SAPP_KEYCODE_2,
2445 51 => return sapp_keycode_SAPP_KEYCODE_3,
2446 52 => return sapp_keycode_SAPP_KEYCODE_4,
2447 53 => return sapp_keycode_SAPP_KEYCODE_5,
2448 54 => return sapp_keycode_SAPP_KEYCODE_6,
2449 55 => return sapp_keycode_SAPP_KEYCODE_7,
2450 56 => return sapp_keycode_SAPP_KEYCODE_8,
2451 57 => return sapp_keycode_SAPP_KEYCODE_9,
2452 48 => return sapp_keycode_SAPP_KEYCODE_0,
2453 32 => return sapp_keycode_SAPP_KEYCODE_SPACE,
2454 45 => return sapp_keycode_SAPP_KEYCODE_MINUS,
2455 61 => return sapp_keycode_SAPP_KEYCODE_EQUAL,
2456 91 => return sapp_keycode_SAPP_KEYCODE_LEFT_BRACKET,
2457 93 => return sapp_keycode_SAPP_KEYCODE_RIGHT_BRACKET,
2458 92 => return sapp_keycode_SAPP_KEYCODE_BACKSLASH,
2459 59 => return sapp_keycode_SAPP_KEYCODE_SEMICOLON,
2460 39 => return sapp_keycode_SAPP_KEYCODE_APOSTROPHE,
2461 96 => return sapp_keycode_SAPP_KEYCODE_GRAVE_ACCENT,
2462 44 => return sapp_keycode_SAPP_KEYCODE_COMMA,
2463 46 => return sapp_keycode_SAPP_KEYCODE_PERIOD,
2464 47 => return sapp_keycode_SAPP_KEYCODE_SLASH,
2465 60 => return sapp_keycode_SAPP_KEYCODE_WORLD_1,
2466 _ => return sapp_keycode_SAPP_KEYCODE_INVALID,
2467 };
2468}
2469pub unsafe extern "C" fn _sapp_x11_scroll_event(
2470 mut x: libc::c_float,
2471 mut y: libc::c_float,
2472 mut mods: u32,
2473) {
2474 if _sapp_events_enabled() {
2475 _sapp_init_event(sapp_event_type_SAPP_EVENTTYPE_MOUSE_SCROLL);
2476 _sapp.event.modifiers = mods;
2477 _sapp.event.scroll_x = x;
2478 _sapp.event.scroll_y = y;
2479 _sapp_call_event(&mut _sapp.event);
2480 };
2481}
2482pub unsafe extern "C" fn _sapp_x11_translate_button(mut event: *const XEvent) -> sapp_mousebutton {
2483 match (*event).xbutton.button {
2484 1 => return sapp_mousebutton_SAPP_MOUSEBUTTON_LEFT,
2485 2 => return sapp_mousebutton_SAPP_MOUSEBUTTON_MIDDLE,
2486 3 => return sapp_mousebutton_SAPP_MOUSEBUTTON_RIGHT,
2487 _ => return sapp_mousebutton_SAPP_MOUSEBUTTON_INVALID,
2488 };
2489}
2490pub unsafe extern "C" fn _sapp_x11_mouse_event(
2491 mut type_: sapp_event_type,
2492 mut btn: sapp_mousebutton,
2493 mut mods: u32,
2494) {
2495 if _sapp_events_enabled() {
2496 _sapp_init_event(type_);
2497 _sapp.event.mouse_button = btn;
2498 _sapp.event.modifiers = mods;
2499 _sapp.event.mouse_x = _sapp.mouse_x;
2500 _sapp.event.mouse_y = _sapp.mouse_y;
2501 _sapp_call_event(&mut _sapp.event);
2502 };
2503}
2504pub unsafe extern "C" fn _sapp_x11_mod(mut x11_mods: libc::c_int) -> u32 {
2505 let mut mods = 0 as libc::c_int as u32;
2506 if x11_mods & ShiftMask != 0 {
2507 mods |= SAPP_MODIFIER_SHIFT as libc::c_int as libc::c_uint
2508 }
2509 if x11_mods & ControlMask != 0 {
2510 mods |= SAPP_MODIFIER_CTRL as libc::c_int as libc::c_uint
2511 }
2512 if x11_mods & Mod1Mask != 0 {
2513 mods |= SAPP_MODIFIER_ALT as libc::c_int as libc::c_uint
2514 }
2515 if x11_mods & Mod4Mask != 0 {
2516 mods |= SAPP_MODIFIER_SUPER as libc::c_int as libc::c_uint
2517 }
2518 return mods;
2519}
2520pub static mut _sapp_x11_window_state: libc::c_int = 0;
2521pub unsafe extern "C" fn _sapp_x11_get_window_property(
2522 window: Window,
2523 mut property: Atom,
2524 mut type_: Atom,
2525 mut value: *mut *mut libc::c_uchar,
2526) -> libc::c_ulong {
2527 let mut actualType: Atom = 0;
2528 let mut actualFormat: libc::c_int = 0;
2529 let mut itemCount: libc::c_ulong = 0;
2530 let mut bytesAfter: libc::c_ulong = 0;
2531 XGetWindowProperty(
2532 _sapp_x11_display,
2533 window,
2534 property,
2535 0,
2536 libc::c_long::max_value(),
2537 false as _,
2538 type_,
2539 &mut actualType,
2540 &mut actualFormat,
2541 &mut itemCount,
2542 &mut bytesAfter,
2543 value,
2544 );
2545 return itemCount;
2546}
2547pub static mut _sapp_x11_WM_STATE: Atom = 0;
2548pub unsafe extern "C" fn _sapp_x11_get_window_state() -> libc::c_int {
2549 let mut result = WithdrawnState;
2550 let mut state: *mut C2RustUnnamed_1 = std::ptr::null_mut();
2551 if _sapp_x11_get_window_property(
2552 _sapp_x11_window,
2553 _sapp_x11_WM_STATE,
2554 _sapp_x11_WM_STATE,
2555 &mut state as *mut *mut C2RustUnnamed_1 as *mut *mut libc::c_uchar,
2556 ) >= 2
2557 {
2558 result = (*state).state as libc::c_int
2559 }
2560 if !state.is_null() {
2561 XFree(state as *mut libc::c_void);
2562 }
2563 return result;
2564}
2565pub static mut _sapp_x11_WM_PROTOCOLS: Atom = 0;
2566pub static mut _sapp_x11_WM_DELETE_WINDOW: Atom = 0;
2567pub unsafe extern "C" fn _sapp_x11_process_event(mut event: *mut XEvent) {
2568 match (*event).type_0 {
2569 2 => {
2570 let mut keycode = (*event).xkey.keycode as libc::c_int;
2571 let key = _sapp_x11_translate_key(keycode);
2572 let mut repeat = _sapp_x11_keycodes[(keycode & 0xff as libc::c_int) as usize];
2573 _sapp_x11_keycodes[(keycode & 0xff as libc::c_int) as usize] = true;
2574 let mods = _sapp_x11_mod((*event).xkey.state as libc::c_int);
2575 if key as libc::c_uint
2576 != sapp_keycode_SAPP_KEYCODE_INVALID as libc::c_int as libc::c_uint
2577 {
2578 _sapp_x11_key_event(sapp_event_type_SAPP_EVENTTYPE_KEY_DOWN, key, repeat, mods);
2579 }
2580 let mut keysym: KeySym = 0;
2581 XLookupString(
2582 &mut (*event).xkey,
2583 std::ptr::null_mut(),
2584 0 as libc::c_int,
2585 &mut keysym,
2586 std::ptr::null_mut(),
2587 );
2588 let mut chr = _sapp_x11_keysym_to_unicode(keysym);
2589 if chr > 0 as libc::c_int {
2590 _sapp_x11_char_event(chr as u32, repeat, mods);
2591 }
2592 }
2593 3 => {
2594 let mut keycode_0 = (*event).xkey.keycode as libc::c_int;
2595 let key_0 = _sapp_x11_translate_key(keycode_0);
2596 _sapp_x11_keycodes[(keycode_0 & 0xff as libc::c_int) as usize] = false;
2597 if key_0 as libc::c_uint
2598 != sapp_keycode_SAPP_KEYCODE_INVALID as libc::c_int as libc::c_uint
2599 {
2600 let mods_0 = _sapp_x11_mod((*event).xkey.state as libc::c_int);
2601 _sapp_x11_key_event(sapp_event_type_SAPP_EVENTTYPE_KEY_UP, key_0, false, mods_0);
2602 }
2603 }
2604 4 => {
2605 let btn = _sapp_x11_translate_button(event);
2606 let mods_1 = _sapp_x11_mod((*event).xbutton.state as libc::c_int);
2607 if btn as libc::c_int != sapp_mousebutton_SAPP_MOUSEBUTTON_INVALID as libc::c_int {
2608 _sapp_x11_mouse_event(sapp_event_type_SAPP_EVENTTYPE_MOUSE_DOWN, btn, mods_1);
2609 } else {
2610 match (*event).xbutton.button {
2611 4 => {
2612 _sapp_x11_scroll_event(0.0f32, 1.0f32, mods_1);
2613 }
2614 5 => {
2615 _sapp_x11_scroll_event(0.0f32, -1.0f32, mods_1);
2616 }
2617 6 => {
2618 _sapp_x11_scroll_event(1.0f32, 0.0f32, mods_1);
2619 }
2620 7 => {
2621 _sapp_x11_scroll_event(-1.0f32, 0.0f32, mods_1);
2622 }
2623 _ => {}
2624 }
2625 }
2626 }
2627 5 => {
2628 let btn_0 = _sapp_x11_translate_button(event);
2629 if btn_0 as libc::c_int != sapp_mousebutton_SAPP_MOUSEBUTTON_INVALID as libc::c_int {
2630 _sapp_x11_mouse_event(
2631 sapp_event_type_SAPP_EVENTTYPE_MOUSE_UP,
2632 btn_0,
2633 _sapp_x11_mod((*event).xbutton.state as libc::c_int),
2634 );
2635 }
2636 }
2637 7 => {
2638 _sapp_x11_mouse_event(
2639 sapp_event_type_SAPP_EVENTTYPE_MOUSE_ENTER,
2640 sapp_mousebutton_SAPP_MOUSEBUTTON_INVALID,
2641 _sapp_x11_mod((*event).xcrossing.state as libc::c_int),
2642 );
2643 }
2644 8 => {
2645 _sapp_x11_mouse_event(
2646 sapp_event_type_SAPP_EVENTTYPE_MOUSE_LEAVE,
2647 sapp_mousebutton_SAPP_MOUSEBUTTON_INVALID,
2648 _sapp_x11_mod((*event).xcrossing.state as libc::c_int),
2649 );
2650 }
2651 6 => {
2652 _sapp.mouse_x = (*event).xmotion.x as libc::c_float;
2653 _sapp.mouse_y = (*event).xmotion.y as libc::c_float;
2654 _sapp_x11_mouse_event(
2655 sapp_event_type_SAPP_EVENTTYPE_MOUSE_MOVE,
2656 sapp_mousebutton_SAPP_MOUSEBUTTON_INVALID,
2657 _sapp_x11_mod((*event).xmotion.state as libc::c_int),
2658 );
2659 }
2660 22 => {
2661 if (*event).xconfigure.width != _sapp.window_width
2662 || (*event).xconfigure.height != _sapp.window_height
2663 {
2664 _sapp.window_width = (*event).xconfigure.width;
2665 _sapp.window_height = (*event).xconfigure.height;
2666 _sapp.framebuffer_width = _sapp.window_width;
2667 _sapp.framebuffer_height = _sapp.window_height;
2668 _sapp_x11_app_event(sapp_event_type_SAPP_EVENTTYPE_RESIZED);
2669 }
2670 }
2671 28 => {
2672 if (*event).xproperty.state == PropertyNewValue {
2673 if (*event).xproperty.atom == _sapp_x11_WM_STATE {
2674 let state = _sapp_x11_get_window_state();
2675 if state != _sapp_x11_window_state {
2676 _sapp_x11_window_state = state;
2677 if state == IconicState {
2678 _sapp_x11_app_event(sapp_event_type_SAPP_EVENTTYPE_ICONIFIED);
2679 } else if state == NormalState {
2680 _sapp_x11_app_event(sapp_event_type_SAPP_EVENTTYPE_RESTORED);
2681 }
2682 }
2683 }
2684 }
2685 }
2686 33 => {
2687 let message_type = (*event).xclient.message_type;
2688 if message_type == _sapp_x11_WM_PROTOCOLS {
2689 let protocol = (*event).xclient.data.l[0 as libc::c_int as usize] as Atom;
2690 if protocol == _sapp_x11_WM_DELETE_WINDOW {
2691 _sapp.quit_requested = true
2692 }
2693 } else if message_type == _sapp.xdnd.atoms.enter {
2694 let is_list = (*event).xclient.data.l[1] & 1 == 1;
2695 _sapp.xdnd.source = (*event).xclient.data.l[0] as Window;
2696 _sapp.xdnd.version = (*event).xclient.data.l[1] as Atom >> 24;
2697 _sapp.xdnd.format = 0;
2698
2699 if _sapp.xdnd.version > _sapp_x11_XDND_VERSION {
2700 return;
2701 }
2702
2703 let mut count = 0;
2704 let mut formats: *mut Atom = std::ptr::null_mut();
2705
2706 if is_list {
2707 count = _sapp_x11_get_window_property(
2708 _sapp.xdnd.source,
2709 _sapp.xdnd.atoms.type_list,
2710 _sapp_x11_XA_ATOM,
2711 &mut formats as *mut _ as _);
2712 } else {
2713 count = 3;
2714 formats = (*event).xclient.data.l.as_mut_ptr().offset(2) as *mut Atom;
2715 }
2716
2717 let formats = std::slice::from_raw_parts_mut(formats, count as _);
2718
2719 for i in 0..count as usize {
2720 if formats[i] == _sapp.xdnd.atoms.text_uri_list {
2721 _sapp.xdnd.format = _sapp.xdnd.atoms.text_uri_list;
2722 break;
2723 }
2724 }
2725
2726 if is_list && !formats.is_empty() {
2727 XFree(formats.as_mut_ptr() as *mut libc::c_void);
2728 }
2729 } else if message_type == _sapp.xdnd.atoms.position {
2730 if _sapp.xdnd.version > _sapp_x11_XDND_VERSION {
2731 return;
2732 }
2733
2734 let mut data = [0isize; 5];
2735 data[0] = _sapp_x11_window as _;
2736 if _sapp.xdnd.format > 0 {
2737 data[1] = 1;
2738 if _sapp.xdnd.version >= 2 {
2739 data[4] = _sapp.xdnd.atoms.action_copy as _;
2740 }
2741 }
2742
2743 let mut ev = XClientMessageEvent {
2744 type_0: 33,
2745 serial: 0,
2746 send_event: true as _,
2747 message_type: _sapp.xdnd.atoms.status,
2748 window: _sapp.xdnd.source,
2749 display: _sapp_x11_display,
2750 format: 32,
2751 data: ClientMessageData {
2752 l: std::mem::transmute(data),
2753 },
2754 };
2755 XSendEvent(
2756 _sapp_x11_display,
2757 (*event).xclient.data.l[0] as Window,
2758 false as _,
2759 0,
2760 &mut ev as *mut XClientMessageEvent as *mut XEvent,
2761 );
2762 XFlush(_sapp_x11_display);
2763 } else if message_type == _sapp.xdnd.atoms.drop {
2764 if _sapp.xdnd.version > _sapp_x11_XDND_VERSION {
2765 return;
2766 }
2767
2768 let mut time = 0;
2769 if _sapp.xdnd.format > 0 {
2770 if _sapp.xdnd.version >= 1 {
2771 time = (*event).xclient.data.l[2] as Time;
2772 }
2773
2774 XConvertSelection(
2775 _sapp_x11_display,
2776 _sapp.xdnd.atoms.selection,
2777 _sapp_x11_UTF8_STRING,
2778 _sapp.xdnd.atoms.selection,
2779 _sapp_x11_window,
2780 time
2781 );
2782 } else if _sapp.xdnd.version >= 2 {
2783 let mut data = [0isize; 5];
2784 data[0] = _sapp_x11_window as _;
2785 data[1] = 0;
2786 data[2] = 0;
2787
2788 let mut ev = XClientMessageEvent {
2789 type_0: 33,
2790 serial: 0,
2791 send_event: true as _,
2792 message_type: _sapp.xdnd.atoms.finished,
2793 window: _sapp.xdnd.source,
2794 display: _sapp_x11_display,
2795 format: 32,
2796 data: ClientMessageData {
2797 l: std::mem::transmute(data),
2798 },
2799 };
2800 XSendEvent(
2801 _sapp_x11_display,
2802 _sapp.xdnd.source,
2803 false as _,
2804 0,
2805 &mut ev as *mut XClientMessageEvent as *mut XEvent,
2806 );
2807 XFlush(_sapp_x11_display);
2808 }
2809 }
2810 }
2811 30 => {
2813 crate::clipboard::respond_to_clipboard_request(event);
2817 }
2818 31 => {
2820 let xsel = &mut *(event as *mut XSelectionEvent);
2821
2822 if xsel.property == _sapp.xdnd.atoms.selection as _ {
2823 let mut buf : *mut libc::c_uchar = std::ptr::null_mut();
2824 let len = _sapp_x11_get_window_property(
2825 xsel.requestor,
2826 xsel.property,
2827 xsel.target,
2828 &mut buf) as usize;
2829 let data = std::slice::from_raw_parts(buf as _, len);
2830 let decoded = sapp_x11_percent_decode(&data);
2831
2832 _sapp.drop.file_paths = decoded.split("\r\n")
2833 .filter(|path| !path.is_empty())
2834 .map(|path| path.trim_start_matches("file://").to_string())
2835 .map(PathBuf::from)
2836 .collect();
2837
2838 if !_sapp.drop.file_paths.is_empty() {
2839 _sapp_init_event(sapp_event_type_SAPP_EVENTTYPE_FILES_DROPPED);
2840 _sapp_call_event(&mut _sapp.event);
2841 }
2842 }
2843 }
2844 29 => {}
2846 17 => {}
2847
2848 35 if (*event).xcookie.extension == _sapp_xi_extension_opcode => {
2850 if (*event).xcookie.evtype == crate::xi_input::XI_RawMotion {
2851 let (dx, dy) = crate::xi_input::read_cookie(&mut (*event).xcookie);
2852 _sapp_x11_raw_device_event(dx as f32, dy as f32);
2853 }
2854 }
2855 _ => {}
2856 };
2857}
2858pub unsafe extern "C" fn _sapp_call_init() {
2859 if _sapp.desc.init_cb.is_some() {
2860 _sapp.desc.init_cb.expect("non-null function pointer")();
2861 } else if _sapp.desc.init_userdata_cb.is_some() {
2862 _sapp
2863 .desc
2864 .init_userdata_cb
2865 .expect("non-null function pointer")(_sapp.desc.user_data);
2866 }
2867 _sapp.init_called = true;
2868}
2869pub unsafe extern "C" fn _sapp_call_frame() {
2870 if _sapp.init_called as libc::c_int != 0 && !_sapp.cleanup_called {
2871 if _sapp.desc.frame_cb.is_some() {
2872 _sapp.desc.frame_cb.expect("non-null function pointer")();
2873 } else if _sapp.desc.frame_userdata_cb.is_some() {
2874 _sapp
2875 .desc
2876 .frame_userdata_cb
2877 .expect("non-null function pointer")(_sapp.desc.user_data);
2878 }
2879 };
2880}
2881pub unsafe extern "C" fn _sapp_frame() {
2882 if _sapp.first_frame {
2883 _sapp.first_frame = false;
2884 _sapp_call_init();
2885 }
2886 _sapp_call_frame();
2887 _sapp.frame_count = _sapp.frame_count.wrapping_add(1);
2888}
2889pub static mut _sapp_glx_SwapBuffers: PFNGLXSWAPBUFFERSPROC = None;
2890pub unsafe extern "C" fn _sapp_glx_swap_buffers() {
2891 _sapp_glx_SwapBuffers.expect("non-null function pointer")(_sapp_x11_display, _sapp_glx_window);
2892}
2893pub unsafe extern "C" fn _sapp_events_enabled() -> bool {
2894 return (_sapp.desc.event_cb.is_some() || _sapp.desc.event_userdata_cb.is_some())
2895 && _sapp.init_called as libc::c_int != 0;
2896}
2897pub unsafe extern "C" fn _sapp_init_event(mut type_: sapp_event_type) {
2898 memset(
2899 &mut _sapp.event as *mut sapp_event as *mut libc::c_void,
2900 0,
2901 ::std::mem::size_of::<sapp_event>() as libc::c_ulong,
2902 );
2903 _sapp.event.type_ = type_;
2904 _sapp.event.frame_count = _sapp.frame_count;
2905 _sapp.event.mouse_button = sapp_mousebutton_SAPP_MOUSEBUTTON_INVALID;
2906 _sapp.event.window_width = _sapp.window_width;
2907 _sapp.event.window_height = _sapp.window_height;
2908 _sapp.event.framebuffer_width = _sapp.framebuffer_width;
2909 _sapp.event.framebuffer_height = _sapp.framebuffer_height;
2910}
2911pub unsafe extern "C" fn _sapp_call_event(mut e: *const sapp_event) {
2912 if !_sapp.cleanup_called {
2913 if _sapp.desc.event_cb.is_some() {
2914 _sapp.desc.event_cb.expect("non-null function pointer")(e);
2915 } else if _sapp.desc.event_userdata_cb.is_some() {
2916 _sapp
2917 .desc
2918 .event_userdata_cb
2919 .expect("non-null function pointer")(e, _sapp.desc.user_data);
2920 }
2921 };
2922}
2923pub unsafe extern "C" fn _sapp_x11_app_event(mut type_: sapp_event_type) {
2924 if _sapp_events_enabled() {
2925 _sapp_init_event(type_);
2926 _sapp_call_event(&mut _sapp.event);
2927 };
2928}
2929pub unsafe extern "C" fn _sapp_call_cleanup() {
2930 if !_sapp.cleanup_called {
2931 if _sapp.desc.cleanup_cb.is_some() {
2932 _sapp.desc.cleanup_cb.expect("non-null function pointer")();
2933 } else if _sapp.desc.cleanup_userdata_cb.is_some() {
2934 _sapp
2935 .desc
2936 .cleanup_userdata_cb
2937 .expect("non-null function pointer")(_sapp.desc.user_data);
2938 }
2939 _sapp.cleanup_called = true
2940 };
2941}
2942pub static mut _sapp_glx_DestroyWindow: PFNGLXDESTROYWINDOWPROC = None;
2943pub static mut _sapp_glx_window: GLXWindow = 0;
2944pub static mut _sapp_glx_DestroyContext: PFNGLXDESTROYCONTEXTPROC = None;
2945pub static mut _sapp_glx_ctx: GLXContext = 0 as *const __GLXcontext as *mut __GLXcontext;
2946pub unsafe extern "C" fn _sapp_glx_destroy_context() {
2947 if _sapp_glx_window != 0 {
2948 _sapp_glx_DestroyWindow.expect("non-null function pointer")(
2949 _sapp_x11_display,
2950 _sapp_glx_window,
2951 );
2952 _sapp_glx_window = 0 as libc::c_int as GLXWindow
2953 }
2954 if !_sapp_glx_ctx.is_null() {
2955 _sapp_glx_DestroyContext.expect("non-null function pointer")(
2956 _sapp_x11_display,
2957 _sapp_glx_ctx,
2958 );
2959 _sapp_glx_ctx = 0 as GLXContext
2960 };
2961}
2962pub static mut _sapp_x11_window: Window = 0;
2963pub static mut _sapp_x11_colormap: Colormap = 0;
2964pub unsafe extern "C" fn _sapp_x11_destroy_window() {
2965 if _sapp_x11_window != 0 {
2966 XUnmapWindow(_sapp_x11_display, _sapp_x11_window);
2967 XDestroyWindow(_sapp_x11_display, _sapp_x11_window);
2968 _sapp_x11_window = 0 as libc::c_int as Window
2969 }
2970 if _sapp_x11_colormap != 0 {
2971 XFreeColormap(_sapp_x11_display, _sapp_x11_colormap);
2972 _sapp_x11_colormap = 0 as libc::c_int as Colormap
2973 }
2974 XFlush(_sapp_x11_display);
2975}
2976pub static mut _sapp_x11_display: *mut Display = 0 as *const Display as *mut Display;
2977
2978#[no_mangle]
2979pub unsafe extern "C" fn sapp_run(mut desc: *const sapp_desc) {
2980 _sapp_init_state(desc);
2981 _sapp_x11_window_state = NormalState;
2982 XInitThreads();
2983 XrmInitialize();
2984 _sapp_x11_display = XOpenDisplay(std::ptr::null());
2985 if _sapp_x11_display.is_null() {
2986 _sapp_fail("XOpenDisplay() failed!");
2987 }
2988 _sapp_x11_screen = (*(_sapp_x11_display as _XPrivDisplay)).default_screen;
2989 _sapp_x11_root = (*(*(_sapp_x11_display as _XPrivDisplay))
2990 .screens
2991 .offset((*(_sapp_x11_display as _XPrivDisplay)).default_screen as isize))
2992 .root;
2993 XkbSetDetectableAutoRepeat(_sapp_x11_display, true as _, std::ptr::null_mut());
2994
2995 _sapp_x11_dpi = 96.0f32;
2999
3000 _sapp_x11_query_system_dpi();
3001 _sapp.dpi_scale = if _sapp.desc.high_dpi {
3002 _sapp_x11_dpi / 96.0f32
3003 } else {
3004 1.0
3005 };
3006 _sapp_x11_init_extensions();
3007 _sapp_glx_init();
3008 let mut visual = 0 as *mut Visual;
3009 let mut depth = 0 as libc::c_int;
3010 _sapp_glx_choose_visual(&mut visual, &mut depth);
3011 _sapp_x11_create_window(visual, depth);
3012 _sapp_glx_create_context();
3013 _sapp.valid = true;
3014 _sapp_x11_show_window();
3015 if (*desc).fullscreen {
3016 sapp_set_fullscreen(true);
3017 }
3018 _sapp_glx_swapinterval(_sapp.swap_interval);
3019 XFlush(_sapp_x11_display);
3020
3021 while !_sapp.quit_ordered {
3022 _sapp_glx_make_current();
3023 let mut count = XPending(_sapp_x11_display);
3024 loop {
3025 let fresh1 = count;
3026 count = count - 1;
3027 if !(fresh1 != 0) {
3028 break;
3029 }
3030 let mut event = _XEvent { type_0: 0 };
3031 XNextEvent(_sapp_x11_display, &mut event);
3032 _sapp_x11_process_event(&mut event);
3033 }
3034 _sapp_frame();
3035 _sapp_glx_swap_buffers();
3036 XFlush(_sapp_x11_display);
3037 if _sapp.quit_requested as libc::c_int != 0 && !_sapp.quit_ordered {
3038 _sapp_x11_app_event(sapp_event_type_SAPP_EVENTTYPE_QUIT_REQUESTED);
3039 if _sapp.quit_requested {
3040 _sapp.quit_ordered = true
3041 }
3042 }
3043 }
3044 _sapp_call_cleanup();
3045 _sapp_glx_destroy_context();
3046 _sapp_x11_destroy_window();
3047 XCloseDisplay(_sapp_x11_display);
3048}
3049#[no_mangle]
3050pub unsafe extern "C" fn sapp_frame_count() -> u64 {
3051 return _sapp.frame_count;
3052}
3053#[no_mangle]
3054pub unsafe extern "C" fn sapp_quit() {
3055 _sapp.quit_ordered = true;
3056}
3057#[no_mangle]
3058pub unsafe extern "C" fn sapp_cancel_quit() {
3059 _sapp.quit_requested = false;
3060}
3061#[no_mangle]
3062pub unsafe extern "C" fn sapp_request_quit() {
3063 _sapp.quit_requested = true;
3064}
3065#[no_mangle]
3066pub unsafe extern "C" fn sapp_query_desc() -> sapp_desc {
3067 return _sapp.desc;
3068}
3069#[no_mangle]
3070pub unsafe extern "C" fn sapp_userdata() -> *mut libc::c_void {
3071 return _sapp.desc.user_data;
3072}
3073#[no_mangle]
3074pub unsafe extern "C" fn sapp_mouse_shown() -> bool {
3075 return false;
3076}
3077
3078pub unsafe extern "C" fn sapp_set_cursor_grab(mut grab: bool) {
3079 XUngrabPointer(_sapp_x11_display, 0);
3080
3081 if grab {
3082 XGrabPointer(
3083 _sapp_x11_display,
3084 _sapp_x11_window,
3085 true as _,
3086 (ButtonPressMask
3087 | ButtonReleaseMask
3088 | EnterWindowMask
3089 | LeaveWindowMask
3090 | PointerMotionMask
3091 | PointerMotionHintMask
3092 | Button1MotionMask
3093 | Button2MotionMask
3094 | Button3MotionMask
3095 | Button4MotionMask
3096 | Button5MotionMask
3097 | ButtonMotionMask
3098 | KeymapStateMask) as libc::c_uint,
3099 GrabModeAsync,
3100 GrabModeAsync,
3101 _sapp_x11_window,
3102 0,
3103 0, );
3105 }
3106
3107 XFlush(_sapp_x11_display);
3108}
3109
3110pub unsafe extern "C" fn sapp_set_mouse_cursor(cursor_icon: u32) {
3111 _sapp_cursor_icon = cursor_icon;
3112 update_cursor();
3113}
3114
3115unsafe fn update_cursor() {
3116 let mut cursor;
3117
3118 if !_sapp_cursor_shown {
3119 cursor = _sapp_empty_cursor
3120 } else {
3121 cursor = _sapp_cursor_cache[_sapp_cursor_icon as usize];
3122
3123 if cursor == 0 {
3124 cursor = x_cursor::load_cursor(match _sapp_cursor_icon {
3125 SAPP_CURSOR_DEFAULT => x_cursor::XC_left_ptr,
3126 SAPP_CURSOR_HELP => x_cursor::XC_question_arrow,
3127 SAPP_CURSOR_POINTER => x_cursor::XC_hand2,
3128 SAPP_CURSOR_WAIT => x_cursor::XC_watch,
3129 SAPP_CURSOR_CROSSHAIR => x_cursor::XC_crosshair,
3130 SAPP_CURSOR_TEXT => x_cursor::XC_xterm,
3131 SAPP_CURSOR_MOVE => x_cursor::XC_fleur,
3132 SAPP_CURSOR_NOTALLOWED => x_cursor::XC_pirate,
3133 SAPP_CURSOR_EWRESIZE => x_cursor::XC_sb_h_double_arrow,
3134 SAPP_CURSOR_NSRESIZE => x_cursor::XC_sb_v_double_arrow,
3135 SAPP_CURSOR_NESWRESIZE => x_cursor::XC_top_right_corner,
3136 SAPP_CURSOR_NWSERESIZE => x_cursor::XC_top_left_corner,
3137 _ => return,
3138 });
3139 _sapp_cursor_cache[_sapp_cursor_icon as usize] = cursor;
3140 }
3141 }
3142
3143 x_cursor::set_cursor(cursor);
3144}
3145
3146pub unsafe fn sapp_is_fullscreen() -> bool {
3147 _sapp.desc.fullscreen as _
3148}
3149
3150pub unsafe fn sapp_set_fullscreen(fullscreen: bool) {
3151 _sapp.desc.fullscreen = fullscreen as _;
3152
3153 let mut wm_state = XInternAtom(
3154 _sapp_x11_display,
3155 b"_NET_WM_STATE\x00" as *const u8 as *const libc::c_char,
3156 false as _,
3157 );
3158 let wm_fullscreen = XInternAtom(
3159 _sapp_x11_display,
3160 b"_NET_WM_STATE_FULLSCREEN\x00" as *const u8 as *const libc::c_char,
3161 false as _,
3162 );
3163
3164 if fullscreen {
3165 let _NET_WM_STATE_ADD = 1;
3166 _sapp_x11_send_event(wm_state, _NET_WM_STATE_ADD, wm_fullscreen as isize, 0, 1, 0);
3167 } else {
3168 let _NET_WM_STATE_REMOVE = 0;
3169 _sapp_x11_send_event(
3170 wm_state,
3171 _NET_WM_STATE_REMOVE,
3172 wm_fullscreen as isize,
3173 0,
3174 1,
3175 0,
3176 );
3177 }
3178}
3179
3180#[no_mangle]
3181pub unsafe extern "C" fn sapp_show_mouse(mut shown: bool) {
3182 _sapp_cursor_shown = shown;
3183 update_cursor();
3184}
3185#[no_mangle]
3186pub unsafe extern "C" fn sapp_keyboard_shown() -> bool {
3187 return _sapp.onscreen_keyboard_shown;
3188}
3189#[no_mangle]
3190pub unsafe extern "C" fn sapp_show_keyboard(mut shown: bool) {}
3191#[no_mangle]
3192pub unsafe extern "C" fn sapp_dpi_scale() -> libc::c_float {
3193 return _sapp.dpi_scale;
3194}
3195#[no_mangle]
3196pub unsafe extern "C" fn sapp_high_dpi() -> bool {
3197 return _sapp.desc.high_dpi && _sapp.dpi_scale > 1.5f32;
3198}
3199#[no_mangle]
3200pub unsafe extern "C" fn sapp_height() -> libc::c_int {
3201 return if _sapp.framebuffer_height > 0 {
3202 _sapp.framebuffer_height
3203 } else {
3204 1
3205 };
3206}
3207#[no_mangle]
3208pub unsafe extern "C" fn sapp_width() -> libc::c_int {
3209 return if _sapp.framebuffer_width > 0 {
3210 _sapp.framebuffer_width
3211 } else {
3212 1
3213 };
3214}
3215pub static mut _sapp: _sapp_state = _sapp_state {
3216 valid: false,
3217 window_width: 0,
3218 window_height: 0,
3219 framebuffer_width: 0,
3220 framebuffer_height: 0,
3221 sample_count: 0,
3222 swap_interval: 0,
3223 dpi_scale: 0.,
3224 gles2_fallback: false,
3225 first_frame: false,
3226 init_called: false,
3227 cleanup_called: false,
3228 quit_requested: false,
3229 quit_ordered: false,
3230 html5_canvas_name: 0 as *const libc::c_char,
3231 html5_ask_leave_site: false,
3232 window_title: [0; 128],
3233 window_title_wide: [0; 128],
3234 frame_count: 0,
3235 mouse_x: 0.,
3236 mouse_y: 0.,
3237 win32_mouse_tracked: false,
3238 onscreen_keyboard_shown: false,
3239 event: sapp_event {
3240 frame_count: 0,
3241 type_: sapp_event_type_SAPP_EVENTTYPE_INVALID,
3242 key_code: sapp_keycode_SAPP_KEYCODE_INVALID,
3243 char_code: 0,
3244 key_repeat: false,
3245 modifiers: 0,
3246 mouse_button: sapp_mousebutton_SAPP_MOUSEBUTTON_LEFT,
3247 mouse_x: 0.,
3248 mouse_y: 0.,
3249 mouse_dx: 0.,
3250 mouse_dy: 0.,
3251 scroll_x: 0.,
3252 scroll_y: 0.,
3253 num_touches: 0,
3254 touches: [sapp_touchpoint {
3255 identifier: 0,
3256 pos_x: 0.,
3257 pos_y: 0.,
3258 changed: false,
3259 }; 8],
3260 window_width: 0,
3261 window_height: 0,
3262 framebuffer_width: 0,
3263 framebuffer_height: 0,
3264 },
3265 desc: sapp_desc {
3266 init_cb: None,
3267 frame_cb: None,
3268 cleanup_cb: None,
3269 event_cb: None,
3270 fail_cb: None,
3271 user_data: 0 as *const libc::c_void as *mut libc::c_void,
3272 init_userdata_cb: None,
3273 frame_userdata_cb: None,
3274 cleanup_userdata_cb: None,
3275 event_userdata_cb: None,
3276 fail_userdata_cb: None,
3277 width: 0,
3278 height: 0,
3279 window_resizable: false,
3280 sample_count: 0,
3281 swap_interval: 0,
3282 high_dpi: false,
3283 fullscreen: false,
3284 alpha: false,
3285 window_title: 0 as *const libc::c_char,
3286 user_cursor: false,
3287 html5_canvas_name: 0 as *const libc::c_char,
3288 html5_canvas_resize: false,
3289 html5_preserve_drawing_buffer: false,
3290 html5_premultiplied_alpha: false,
3291 html5_ask_leave_site: false,
3292 ios_keyboard_resizes_canvas: false,
3293 gl_force_gles2: false,
3294 },
3295 keycodes: [sapp_keycode_SAPP_KEYCODE_INVALID; 512],
3296 xdnd: sapp_xdnd {
3297 version: 0,
3298 format: 0,
3299 source: 0,
3300 atoms: sapp_xdnd_atoms {
3301 aware: 0,
3302 enter: 0,
3303 position: 0,
3304 status: 0,
3305 action_copy: 0,
3306 drop: 0,
3307 finished: 0,
3308 selection: 0,
3309 type_list: 0,
3310 text_uri_list: 0
3311 }
3312 },
3313 drop: sapp_drop {
3314 file_paths: vec![]
3315 }
3316};
3317#[no_mangle]
3318pub unsafe extern "C" fn sapp_isvalid() -> bool {
3319 return _sapp.valid;
3320}
3321#[no_mangle]
3322pub unsafe fn sapp_is_elapsed_timer_supported() -> bool {
3323 return true;
3324}
3325
3326fn sapp_x11_percent_decode(bytes: &[u8]) -> String {
3327 let mut decoded = Vec::new();
3328
3329 let mut i = 0;
3330 while i < bytes.len() {
3331 let byte = bytes[i];
3332 i += 1;
3333
3334 decoded.push(if byte == b'%' && i < bytes.len() - 1 {
3335 let hi = char::from(bytes[i]).to_digit(16).unwrap();
3336 let lo = char::from(bytes[i + 1]).to_digit(16).unwrap();
3337 i += 2;
3338 ((hi as u8) << 4) | (lo as u8)
3339 } else {
3340 byte
3341 });
3342 }
3343
3344 String::from_utf8_lossy(&decoded).into_owned()
3345}
3346
3347pub fn dropped_file_count() -> usize {
3348 unsafe {
3349 _sapp.drop.file_paths.len()
3350 }
3351}
3352
3353pub fn dropped_file_bytes(index: usize) -> Option<Vec<u8>> {
3354 None
3355}
3356
3357pub fn dropped_file_path(index: usize) -> Option<PathBuf> {
3358 unsafe {
3359 _sapp.drop.file_paths.get(index).cloned()
3360 }
3361}