iup_sys/
lib.rs

1//! Rust low level bindings for [IUP][1] -- A Portable User Interface Toolkit
2//!
3//! [1]: http://www.tecgraf.puc-rio.br/iup/
4//!
5//! These bindings follow what is found in iup.h as closely as possibly with
6//! the following exceptions:
7//!
8//! 1. C function-like macros have been converted into functions.
9//! 2. Items that were marked as old or deprecated have been removed.
10
11// This file is based on iup.h. If you update this file, please follow the same
12// formatting and ordering as found in iup.h to make comparison easy.
13
14// The IUP library this header file is derived from is a Tecgraf product under a MIT style license.
15// See LICENSE-TECGRAF for the full license.
16
17// #include "iupkey.h"
18// #include "iupdef.h"
19
20extern crate libc;
21
22use libc::{ c_char, c_uchar, c_int, c_float, c_double, c_void };
23
24pub const IUP_NAME: &'static str         = "IUP - Portable User Interface";
25pub const IUP_COPYRIGHT: &'static str    = "Copyright (C) 1994-2014 Tecgraf, PUC-Rio.";
26pub const IUP_DESCRIPTION: &'static str  = "Multi-platform toolkit for building graphical user interfaces.";
27pub const IUP_VERSION: &'static str      = "3.12"; /* bug fixes are reported only by IupVersion functions */
28pub const IUP_VERSION_NUMBER: c_int      = 312000;
29pub const IUP_VERSION_DATE: &'static str = "2014/11/19"; /* does not include bug fix releases */
30
31pub enum Ihandle {}
32pub type Icallback = extern fn(ih: *mut Ihandle) -> c_int;
33pub type Iparamcb = extern fn (dialog: *mut Ihandle, param_index: c_int, user_data: *mut c_void) -> c_int;
34
35extern {
36    /************************************************************************/
37    /*                        Main API                                      */
38    /************************************************************************/
39    pub fn IupOpen(argc: *const c_int, argv: *const *const *const c_char) -> c_int;
40    pub fn IupClose();
41    pub fn IupImageLibOpen();
42
43    pub fn IupMainLoop() -> c_int;
44    pub fn IupLoopStep() -> c_int;
45    pub fn IupLoopStepWait() -> c_int;
46    pub fn IupMainLoopLevel() -> c_int;
47    pub fn IupFlush();
48    pub fn IupExitLoop();
49
50    pub fn IupRecordInput(filename: *const c_char, mode: c_int) -> c_int;
51    pub fn IupPlayInput(filename: *const c_char) -> c_int;
52
53    pub fn IupUpdate(ih: *mut Ihandle);
54    pub fn IupUpdateChildren(ih: *mut Ihandle);
55    pub fn IupRedraw(ih: *mut Ihandle, children: c_int);
56    pub fn IupRefresh(ih: *mut Ihandle);
57    pub fn IupRefreshChildren(ih: *mut Ihandle);
58
59    pub fn IupHelp(url: *const c_char) -> c_int;
60    pub fn IupLoad(filename: *const c_char) -> *mut c_char;
61    pub fn IupLoadBuffer(buffer: *const c_char) -> *mut c_char;
62
63    pub fn IupVersion() -> *mut c_char;
64    pub fn IupVersionDate() -> *mut c_char;
65    pub fn IupVersionNumber() -> c_int;
66
67    pub fn IupSetLanguage(lng: *const c_char);
68    pub fn IupGetLanguage() -> *mut c_char;
69    pub fn IupSetLanguageString(name: *const c_char, str: *const c_char);
70    pub fn IupStoreLanguageString(name: *const c_char, str: *const c_char);
71    pub fn IupGetLanguageString(name: *const c_char) -> *mut c_char;
72    pub fn IupSetLanguagePack(ih: *mut Ihandle);
73
74    pub fn IupDestroy(ih: *mut Ihandle);
75    pub fn IupDetach(child: *mut Ihandle);
76    pub fn IupAppend(ih: *mut Ihandle, child: *mut Ihandle) -> *mut Ihandle;
77    pub fn IupInsert(ih: *mut Ihandle, ref_child: *mut Ihandle, child: *mut Ihandle) -> *mut Ihandle;
78    pub fn IupGetChild(ih: *mut Ihandle, pos: c_int) -> *mut Ihandle;
79    pub fn IupGetChildPos(ih: *mut Ihandle, child: *mut Ihandle) -> c_int;
80    pub fn IupGetChildCount(ih: *mut Ihandle) -> c_int;
81    pub fn IupGetNextChild(ih: *mut Ihandle, child: *mut Ihandle) -> *mut Ihandle;
82    pub fn IupGetBrother(ih: *mut Ihandle) -> *mut Ihandle;
83    pub fn IupGetParent(ih: *mut Ihandle) -> *mut Ihandle;
84    pub fn IupGetDialog(ih: *mut Ihandle) -> *mut Ihandle;
85    pub fn IupGetDialogChild(ih: *mut Ihandle, name: *const c_char) -> *mut Ihandle;
86    pub fn IupReparent(ih: *mut Ihandle, new_parent: *mut Ihandle, ref_child: *mut Ihandle) -> c_int;
87
88    pub fn IupPopup(ih: *mut Ihandle, x: c_int, y: c_int) -> c_int;
89    pub fn IupShow(ih: *mut Ihandle) -> c_int;
90    pub fn IupShowXY(ih: *mut Ihandle, x: c_int, y: c_int) -> c_int;
91    pub fn IupHide(ih: *mut Ihandle) -> c_int;
92    pub fn IupMap(ih: *mut Ihandle) -> c_int;
93    pub fn IupUnmap(ih: *mut Ihandle);
94
95    pub fn IupResetAttribute(ih: *mut Ihandle, name: *const c_char);
96    pub fn IupGetAllAttributes(ih: *mut Ihandle, names: *mut *mut c_char, n: c_int) -> c_int;
97    pub fn IupSetAtt(handle_name: *const c_char, ih: *mut Ihandle, name: *const c_char, ...) -> *mut Ihandle;
98    pub fn IupSetAttributes(ih: *mut Ihandle, str: *const c_char) -> *mut Ihandle;
99    pub fn IupGetAttributes(ih: *mut Ihandle) -> *mut c_char;
100
101    pub fn IupSetAttribute(ih: *mut Ihandle, name: *const c_char, value: *const c_char);
102    pub fn IupSetStrAttribute(ih: *mut Ihandle, name: *const c_char, value: *const c_char);
103    pub fn IupSetStrf(ih: *mut Ihandle, name: *const c_char, format: *const c_char, ...);
104    pub fn IupSetInt(ih: *mut Ihandle, name: *const c_char, value: c_int);
105    pub fn IupSetFloat(ih: *mut Ihandle, name: *const c_char, value: c_float);
106    pub fn IupSetDouble(ih: *mut Ihandle, name: *const c_char, value: c_double);
107    pub fn IupSetRGB(ih: *mut Ihandle, name: *const c_char, r: c_uchar, g: c_uchar, b: c_uchar);
108
109    pub fn IupGetAttribute(ih: *mut Ihandle, name: *const c_char) -> *mut c_char;
110    pub fn IupGetInt(ih: *mut Ihandle, name: *const c_char) -> c_int;
111    pub fn IupGetInt2(ih: *mut Ihandle, name: *const c_char) -> c_int;
112    pub fn IupGetIntInt(ih: *mut Ihandle, name: *const c_char, i1: *mut c_int, i2: *mut c_int) -> c_int;
113    pub fn IupGetFloat(ih: *mut Ihandle, name: *const c_char) -> c_float;
114    pub fn IupGetDouble(ih: *mut Ihandle, name: *const c_char) -> c_double;
115    pub fn IupGetRGB(ih: *mut Ihandle, name: *const c_char, r: *mut c_uchar, g: *mut c_uchar, b: *mut c_uchar);
116    pub fn IupSetAttributeId(ih: *mut Ihandle, name: *const c_char, id: c_int, value: *const c_char);
117    pub fn IupSetStrAttributeId(ih: *mut Ihandle, name: *const c_char, id: c_int, value: *const c_char);
118    pub fn IupSetStrfId(ih: *mut Ihandle, name: *const c_char, id: c_int, format: *const c_char, ...);
119    pub fn IupSetIntId(ih: *mut Ihandle, name: *const c_char, id: c_int, value: c_int);
120    pub fn IupSetFloatId(ih: *mut Ihandle, name: *const c_char, id: c_int, value: c_float);
121    pub fn IupSetDoubleId(ih: *mut Ihandle, name: *const c_char, id: c_int, value: c_double);
122    pub fn IupSetRGBId(ih: *mut Ihandle, name: *const c_char, id: c_int, r: c_uchar, g: c_uchar, b: c_uchar);
123
124    pub fn IupGetAttributeId(ih: *mut Ihandle, name: *const c_char, id: c_int) -> *mut c_char;
125    pub fn IupGetIntId(ih: *mut Ihandle, name: *const c_char, id: c_int) -> c_int;
126    pub fn IupGetFloatId(ih: *mut Ihandle, name: *const c_char, id: c_int) -> c_float;
127    pub fn IupGetDoubleId(ih: *mut Ihandle, name: *const c_char, id: c_int) -> c_double;
128    pub fn IupGetRGBId(ih: *mut Ihandle, name: *const c_char, id: c_int, r: *mut c_uchar, g: *mut c_uchar, b: *mut c_uchar);
129
130    pub fn IupSetAttributeId2(ih: *mut Ihandle, name: *const c_char, lin: c_int, col: c_int, value: *const c_char);
131    pub fn IupSetStrAttributeId2(ih: *mut Ihandle, name: *const c_char, lin: c_int, col: c_int, value: *const c_char);
132    pub fn IupSetStrfId2(ih: *mut Ihandle, name: *const c_char, lin: c_int, col: c_int, format: *const c_char, ...);
133    pub fn IupSetIntId2(ih: *mut Ihandle, name: *const c_char, lin: c_int, col: c_int, value: c_int);
134    pub fn IupSetFloatId2(ih: *mut Ihandle, name: *const c_char, lin: c_int, col: c_int, value: c_float);
135    pub fn IupSetDoubleId2(ih: *mut Ihandle, name: *const c_char, lin: c_int, col: c_int, value: c_double);
136    pub fn IupSetRGBId2(ih: *mut Ihandle, name: *const c_char, lin: c_int, col: c_int, r: c_uchar, g: c_uchar, b: c_uchar);
137
138    pub fn IupGetAttributeId2(ih: *mut Ihandle, name: *const c_char, lin: c_int, col: c_int) -> *mut c_char;
139    pub fn IupGetIntId2(ih: *mut Ihandle, name: *const c_char, lin: c_int, col: c_int) -> c_int;
140    pub fn IupGetFloatId2(ih: *mut Ihandle, name: *const c_char, lin: c_int, col: c_int) -> c_float;
141    pub fn IupGetDoubleId2(ih: *mut Ihandle, name: *const c_char, lin: c_int, col: c_int) -> c_double;
142    pub fn IupGetRGBId2(ih: *mut Ihandle, name: *const c_char, lin: c_int, col: c_int, r: *mut c_uchar, g: *mut c_uchar, b: *mut c_uchar);
143
144    pub fn IupSetGlobal(name: *const c_char, value: *const c_char);
145    pub fn IupSetStrGlobal(name: *const c_char, value: *const c_char);
146    pub fn IupGetGlobal(name: *const c_char) -> *mut c_char;
147
148    pub fn IupSetFocus(ih: *mut Ihandle) -> *mut Ihandle;
149    pub fn IupGetFocus() -> *mut Ihandle;
150    pub fn IupPreviousField(ih: *mut Ihandle) -> *mut Ihandle;
151    pub fn IupNextField(ih: *mut Ihandle) -> *mut Ihandle;
152
153    pub fn IupGetCallback(ih: *mut Ihandle, name: *const c_char) -> Icallback;
154    pub fn IupSetCallback(ih: *mut Ihandle, name: *const c_char, func: Icallback) -> Icallback;
155    pub fn IupSetCallbacks(ih: *mut Ihandle, name: *const c_char, func: Icallback, ...) -> *mut Ihandle;
156
157    pub fn IupGetFunction(name: *const c_char) -> Icallback;
158    pub fn IupSetFunction(name: *const c_char, func: Icallback) -> Icallback;
159
160    pub fn IupGetHandle(name: *const c_char) -> *mut Ihandle;
161    pub fn IupSetHandle(name: *const c_char, ih: *mut Ihandle) -> *mut Ihandle;
162    pub fn IupGetAllNames(names: *mut *mut c_char, n: c_int) -> c_int;
163    pub fn IupGetAllDialogs(names: *mut *mut c_char, n: c_int) -> c_int;
164    pub fn IupGetName(ih: *mut Ihandle) -> *mut c_char;
165
166    pub fn IupSetAttributeHandle(ih: *mut Ihandle, name: *const c_char, ih_named: *mut Ihandle);
167    pub fn IupGetAttributeHandle(ih: *mut Ihandle, name: *const c_char) -> *mut Ihandle;
168
169    pub fn IupGetClassName(ih: *mut Ihandle) -> *mut c_char;
170    pub fn IupGetClassType(ih: *mut Ihandle) -> *mut c_char;
171    pub fn IupGetAllClasses(names: *mut *mut c_char, n: c_int) -> c_int;
172    pub fn IupGetClassAttributes(classname: *const c_char, names: *mut *mut c_char, n: c_int) -> c_int;
173    pub fn IupGetClassCallbacks(classname: *const c_char, names: *mut *mut c_char, n: c_int) -> c_int;
174    pub fn IupSaveClassAttributes(ih: *mut Ihandle);
175    pub fn IupCopyClassAttributes(src_ih: *mut Ihandle, dst_ih: *mut Ihandle);
176    pub fn IupSetClassDefaultAttribute(classname: *const c_char, name: *const c_char, value: *const c_char);
177    pub fn IupClassMatch(ih: *mut Ihandle, classname: *const c_char) -> c_int;
178
179    pub fn IupCreate(classname: *const c_char) -> *mut Ihandle;
180    pub fn IupCreatev(classname: *const c_char, params: *mut *mut c_void) -> *mut Ihandle;
181    pub fn IupCreatep(classname: *const c_char, first: *mut c_void, ...) -> *mut Ihandle;
182
183    /************************************************************************/
184    /*                        Elements                                      */
185    /************************************************************************/
186    pub fn IupFill() -> *mut Ihandle;
187    pub fn IupRadio(child: *mut Ihandle) -> *mut Ihandle;
188    pub fn IupVbox(child: *mut Ihandle, ...) -> *mut Ihandle;
189    pub fn IupVboxv(children: *mut *mut Ihandle) -> *mut Ihandle;
190    pub fn IupZbox(child: *mut Ihandle, ...) -> *mut Ihandle;
191    pub fn IupZboxv(children: *mut *mut Ihandle) -> *mut Ihandle;
192    pub fn IupHbox(child: *mut Ihandle, ...) -> *mut Ihandle;
193    pub fn IupHboxv(children: *mut *mut Ihandle) -> *mut Ihandle;
194
195    pub fn IupNormalizer(ih_first: *mut Ihandle, ...) -> *mut Ihandle;
196    pub fn IupNormalizerv(ih_list: *mut *mut Ihandle) -> *mut Ihandle;
197
198    pub fn IupCbox(child: *mut Ihandle, ...) -> *mut Ihandle;
199    pub fn IupCboxv(children: *mut *mut Ihandle) -> *mut Ihandle;
200    pub fn IupSbox(child: *mut Ihandle) -> *mut Ihandle;
201    pub fn IupSplit(child1: *mut Ihandle, child2: *mut Ihandle) -> *mut Ihandle;
202    pub fn IupScrollBox(child: *mut Ihandle) -> *mut Ihandle;
203    pub fn IupGridBox(child: *mut Ihandle, ...) -> *mut Ihandle;
204    pub fn IupGridBoxv(children: *mut *mut Ihandle) -> *mut Ihandle;
205    pub fn IupExpander(child: *mut Ihandle) -> *mut Ihandle;
206    pub fn IupDetachBox(child: *mut Ihandle) -> *mut Ihandle;
207    pub fn IupBackgroundBox(child: *mut Ihandle) -> *mut Ihandle;
208
209    pub fn IupFrame(child: *mut Ihandle) -> *mut Ihandle;
210
211    pub fn IupImage(width: c_int, height: c_int, pixmap: *const c_uchar) -> *mut Ihandle;
212    pub fn IupImageRGB(width: c_int, height: c_int, pixmap: *const c_uchar) -> *mut Ihandle;
213    pub fn IupImageRGBA(width: c_int, height: c_int, pixmap: *const c_uchar) -> *mut Ihandle;
214
215    pub fn IupItem(title: *const c_char, action: *const c_char) -> *mut Ihandle;
216    pub fn IupSubmenu(title: *const c_char, child: *mut Ihandle) -> *mut Ihandle;
217    pub fn IupSeparator() -> *mut Ihandle;
218    pub fn IupMenu(child: *mut Ihandle, ...) -> *mut Ihandle;
219    pub fn IupMenuv(children: *mut *mut Ihandle) -> *mut Ihandle;
220
221    pub fn IupButton(title: *const c_char, action: *const c_char) -> *mut Ihandle;
222    pub fn IupCanvas(action: *const c_char) -> *mut Ihandle;
223    pub fn IupDialog(child: *mut Ihandle) -> *mut Ihandle;
224    pub fn IupUser() -> *mut Ihandle;
225    pub fn IupLabel(title: *const c_char) -> *mut Ihandle;
226    pub fn IupList(action: *const c_char) -> *mut Ihandle;
227    pub fn IupText(action: *const c_char) -> *mut Ihandle;
228    pub fn IupMultiLine(action: *const c_char) -> *mut Ihandle;
229    pub fn IupToggle(title: *const c_char, action: *const c_char) -> *mut Ihandle;
230    pub fn IupTimer() -> *mut Ihandle;
231    pub fn IupClipboard() -> *mut Ihandle;
232    pub fn IupProgressBar() -> *mut Ihandle;
233    pub fn IupVal(_type: *const c_char) -> *mut Ihandle;
234    pub fn IupTabs(child: *mut Ihandle, ...) -> *mut Ihandle;
235    pub fn IupTabsv(children: *mut *mut Ihandle) -> *mut Ihandle;
236    pub fn IupTree() -> *mut Ihandle;
237    pub fn IupLink(url: *const c_char, title: *const c_char) -> *mut Ihandle;
238
239    /************************************************************************/
240    /*                      Utilities                                       */
241    /************************************************************************/
242
243    /* IupImage utility */
244    pub fn IupSaveImageAsText(ih: *mut Ihandle, file_name: *const c_char, format: *const c_char, name: *const c_char) -> c_int;
245
246    /* IupText and IupScintilla utilities */
247    pub fn IupTextConvertLinColToPos(ih: *mut Ihandle, lin: c_int, col: c_int, pos: *mut c_int);
248    pub fn IupTextConvertPosToLinCol(ih: *mut Ihandle, pos: c_int, lin: *mut c_int, col: *mut c_int);
249
250    /* IupText, IupList, IupTree, IupMatrix and IupScintilla utility */
251    pub fn IupConvertXYToPos(ih: *mut Ihandle, x: c_int, y: c_int) -> c_int;
252
253    /* IupTree utilities */
254    pub fn IupTreeSetUserId(ih: *mut Ihandle, id: c_int, userid: *mut c_void) -> c_int;
255    pub fn IupTreeGetUserId(ih: *mut Ihandle, id: c_int) -> *mut c_void;
256    pub fn IupTreeGetId(ih: *mut Ihandle, userid: *mut c_void) -> c_int;
257    pub fn IupTreeSetAttributeHandle(ih: *mut Ihandle, name: *const c_char, id: c_int, ih_named: *mut Ihandle);
258
259    /************************************************************************/
260    /*                      Pre-definided dialogs                           */
261    /************************************************************************/
262    pub fn IupFileDlg() -> *mut Ihandle;
263    pub fn IupMessageDlg() -> *mut Ihandle;
264    pub fn IupColorDlg() -> *mut Ihandle;
265    pub fn IupFontDlg() -> *mut Ihandle;
266    pub fn IupProgressDlg() -> *mut Ihandle;
267
268    pub fn IupGetFile(arq: *mut c_char) -> c_int;
269    pub fn IupMessage(title: *const c_char, msg: *const c_char);
270    pub fn IupMessagef(title: *const c_char, format: *const c_char, ...);
271    pub fn IupAlarm(title: *const c_char, msg: *const c_char, b1: *const c_char, b2: *const c_char, b3: *const c_char) -> c_int;
272    pub fn IupScanf(format: *const c_char, ...) -> c_int;
273    pub fn IupListDialog(_type: c_int, title: *const c_char, size: c_int, list: *mut *const c_char, op: c_int, max_col: c_int, max_lin: c_int, marks: *mut c_int) -> c_int;
274    pub fn IupGetText(title: *const c_char, text: *mut c_char) -> c_int;
275    pub fn IupGetColor(x: c_int, y: c_int, r: *mut c_uchar, g: *mut c_uchar, b: *mut c_uchar) -> c_int;
276
277    pub fn IupGetParam(title: *const c_char, action: Iparamcb, user_data: *mut c_void, format: *const c_char, ...) -> c_int;
278    pub fn IupGetParamv(title: *const c_char, action: Iparamcb, user_data: *mut c_void, format: *const c_char, param_count: c_int, param_extra: c_int, param_data: *mut *mut c_void) -> c_int;
279
280    pub fn IupLayoutDialog(dialog: *mut Ihandle) -> *mut Ihandle;
281    pub fn IupElementPropertiesDialog(elem: *mut Ihandle) -> *mut Ihandle;
282}
283
284/************************************************************************/
285/*                   Common Flags and Return Values                     */
286/************************************************************************/
287pub const IUP_ERROR: c_int      = 1;
288pub const IUP_NOERROR: c_int    = 0;
289pub const IUP_OPENED: c_int     = -1;
290pub const IUP_INVALID: c_int    = -1;
291pub const IUP_INVALID_ID: c_int = -10;
292
293/************************************************************************/
294/*                   Callback Return Values                             */
295/************************************************************************/
296pub const IUP_IGNORE: c_int     = -1;
297pub const IUP_DEFAULT: c_int    = -2;
298pub const IUP_CLOSE: c_int      = -3;
299pub const IUP_CONTINUE: c_int   = -4;
300
301/************************************************************************/
302/*           IupPopup and IupShowXY Parameter Values                    */
303/************************************************************************/
304pub const IUP_CENTER: c_int       = 0xFFFF;  /* 65535 */
305pub const IUP_LEFT: c_int         = 0xFFFE;  /* 65534 */
306pub const IUP_RIGHT: c_int        = 0xFFFD;  /* 65533 */
307pub const IUP_MOUSEPOS: c_int     = 0xFFFC;  /* 65532 */
308pub const IUP_CURRENT: c_int      = 0xFFFB;  /* 65531 */
309pub const IUP_CENTERPARENT: c_int = 0xFFFA;  /* 65530 */
310pub const IUP_TOP: c_int          = IUP_LEFT;
311pub const IUP_BOTTOM: c_int       = IUP_RIGHT;
312
313/************************************************************************/
314/*               SHOW_CB Callback Values                                */
315/************************************************************************/
316pub const IUP_SHOW: c_int     = 0;
317pub const IUP_RESTORE: c_int  = 1;
318pub const IUP_MINIMIZE: c_int = 2;
319pub const IUP_MAXIMIZE: c_int = 3;
320pub const IUP_HIDE: c_int     = 4;
321
322/************************************************************************/
323/*               SCROLL_CB Callback Values                              */
324/************************************************************************/
325pub const IUP_SBUP: c_int      =  0;
326pub const IUP_SBDN: c_int      =  1;
327pub const IUP_SBPGUP: c_int    =  2;
328pub const IUP_SBPGDN: c_int    =  3;
329pub const IUP_SBPOSV: c_int    =  4;
330pub const IUP_SBDRAGV: c_int   =  5;
331pub const IUP_SBLEFT: c_int    =  6;
332pub const IUP_SBRIGHT: c_int   =  7;
333pub const IUP_SBPGLEFT: c_int  =  8;
334pub const IUP_SBPGRIGHT: c_int =  9;
335pub const IUP_SBPOSH: c_int    = 10;
336pub const IUP_SBDRAGH: c_int   = 11;
337
338/************************************************************************/
339/*               Mouse Button Values and Functions                      */
340/************************************************************************/
341pub const IUP_BUTTON1: c_int = '1' as c_int;
342pub const IUP_BUTTON2: c_int = '2' as c_int;
343pub const IUP_BUTTON3: c_int = '3' as c_int;
344pub const IUP_BUTTON4: c_int = '4' as c_int;
345pub const IUP_BUTTON5: c_int = '5' as c_int;
346
347#[inline(always)]
348pub unsafe fn iup_isshift(s: *const c_char) -> bool   { *s.offset(0) == 'S' as c_char }
349#[inline(always)]
350pub unsafe fn iup_iscontrol(s: *const c_char) -> bool { *s.offset(1) == 'C' as c_char }
351#[inline(always)]
352pub unsafe fn iup_isbutton1(s: *const c_char) -> bool { *s.offset(2) == '1' as c_char }
353#[inline(always)]
354pub unsafe fn iup_isbutton2(s: *const c_char) -> bool { *s.offset(3) == '2' as c_char }
355#[inline(always)]
356pub unsafe fn iup_isbutton3(s: *const c_char) -> bool { *s.offset(4) == '3' as c_char }
357#[inline(always)]
358pub unsafe fn iup_isdouble(s: *const c_char) -> bool  { *s.offset(5) == 'D' as c_char }
359#[inline(always)]
360pub unsafe fn iup_isalt(s: *const c_char) -> bool     { *s.offset(6) == 'A' as c_char }
361#[inline(always)]
362pub unsafe fn iup_issys(s: *const c_char) -> bool     { *s.offset(7) == 'Y' as c_char }
363#[inline(always)]
364pub unsafe fn iup_isbutton4(s: *const c_char) -> bool { *s.offset(8) == '4' as c_char }
365#[inline(always)]
366pub unsafe fn iup_isbutton5(s: *const c_char) -> bool { *s.offset(9) == '5' as c_char }
367
368/************************************************************************/
369/*                      Pre-Defined Masks                               */
370/************************************************************************/
371pub const IUP_MASK_FLOAT: &'static str  = "[+/-]?(/d+/.?/d*|/./d+)";
372pub const IUP_MASK_UFLOAT: &'static str = "(/d+/.?/d*|/./d+)";
373pub const IUP_MASK_EFLOAT: &'static str = "[+/-]?(/d+/.?/d*|/./d+)([eE][+/-]?/d+)?";
374pub const IUP_MASK_INT: &'static str    = "[+/-]?/d+";
375pub const IUP_MASK_UINT: &'static str   = "/d+";
376
377/************************************************************************/
378/*                   IupGetParam Callback situations                    */
379/************************************************************************/
380pub const IUP_GETPARAM_OK: c_int     = -1;
381pub const IUP_GETPARAM_INIT: c_int   = -2;
382pub const IUP_GETPARAM_CANCEL: c_int = -3;
383pub const IUP_GETPARAM_HELP: c_int   = -4;
384
385/************************************************************************/
386/*                   Record Input Modes                                 */
387/************************************************************************/
388pub const IUP_RECBINARY: c_int = 0;
389pub const IUP_RECTEXT: c_int = 1;