5 ** Created by: William M. Perry
6 ** Copyright (c) 2000 Aventail Corporation
13 /* Encapsulate a foreign function call */
18 typedef void (*ffi_actual_function) (void);
19 typedef void (*ffi_marshalling_function) (ffi_actual_function, GtkArg *);
21 #define MAX_GTK_ARGS 100
24 struct lcrecord_header header;
26 GtkType args[MAX_GTK_ARGS];
28 Lisp_Object function_name;
29 dll_func function_ptr;
30 ffi_marshalling_function marshal;
33 DECLARE_LRECORD (emacs_ffi, emacs_ffi_data);
35 #define XFFI(x) XRECORD (x, emacs_ffi, emacs_ffi_data)
36 #define XSETFFI(x,p) XSETRECORD (x, p, emacs_ffi)
37 #define FFIP(x) RECORDP (x, emacs_ffi)
38 #define CHECK_FFI(x) CHECK_RECORD (x, emacs_ffi)
40 /* Encapsulate a GtkObject in Lisp */
42 struct lcrecord_header header;
46 } emacs_gtk_object_data;
48 DECLARE_LRECORD (emacs_gtk_object, emacs_gtk_object_data);
50 #define XGTK_OBJECT(x) XRECORD (x, emacs_gtk_object, emacs_gtk_object_data)
51 #define XSETGTK_OBJECT(x,p) XSETRECORD (x, p, emacs_gtk_object)
52 #define GTK_OBJECTP(x) RECORDP (x, emacs_gtk_object)
53 #define CHECK_GTK_OBJECT(x) CHECK_RECORD (x, emacs_gtk_object)
55 extern Lisp_Object build_gtk_object (GtkObject *obj);
57 /* Encapsulate a GTK_TYPE_BOXED in lisp */
59 struct lcrecord_header header;
62 } emacs_gtk_boxed_data;
64 DECLARE_LRECORD (emacs_gtk_boxed, emacs_gtk_boxed_data);
66 #define XGTK_BOXED(x) XRECORD (x, emacs_gtk_boxed, emacs_gtk_boxed_data)
67 #define XSETGTK_BOXED(x,p) XSETRECORD (x, p, emacs_gtk_boxed)
68 #define GTK_BOXEDP(x) RECORDP (x, emacs_gtk_boxed)
69 #define CHECK_GTK_BOXED(x) CHECK_RECORD (x, emacs_gtk_boxed)
71 #endif /* __UI_GTK_H__ */