]> gitweb.factorcode.org Git - factor.git/blob - basis/glib/ffi/ffi.factor
Merge remote-tracking branch 'Blei/gtk-image-loader'
[factor.git] / basis / glib / ffi / ffi.factor
1 ! Copyright (C) 2010 Anton Gorenko.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors alien alien.c-types alien.destructors
4 alien.libraries alien.strings alien.syntax combinators
5 gobject-introspection gobject-introspection.standard-types
6 io.encodings.utf8 kernel system vocabs.parser words ;
7 IN: glib.ffi
8
9 LIBRARY: glib
10
11 <<
12 "glib" {
13     { [ os winnt? ] [ "libglib-2.0-0.dll" cdecl add-library ] }
14     { [ os macosx? ] [ "/opt/local/lib/libglib-2.0.0.dylib" cdecl add-library ] }
15     { [ os unix? ] [ drop ] }
16 } cond
17 >>
18
19
20 TYPEDEF: char gchar
21 TYPEDEF: uchar guchar
22 TYPEDEF: short gshort
23 TYPEDEF: ushort gushort
24 TYPEDEF: long glong
25 TYPEDEF: ulong gulong
26 TYPEDEF: int gint
27 TYPEDEF: uint guint
28
29 <<
30 int c-type clone
31     [ >c-bool ] >>unboxer-quot
32     [ c-bool> ] >>boxer-quot
33     object >>boxed-class
34 "gboolean" current-vocab create typedef
35 >>
36
37 TYPEDEF: char gint8
38 TYPEDEF: uchar guint8
39 TYPEDEF: short gint16
40 TYPEDEF: ushort guint16
41 TYPEDEF: int gint32
42 TYPEDEF: uint guint32
43 TYPEDEF: longlong gint64
44 TYPEDEF: ulonglong guint64
45
46 TYPEDEF: float gfloat
47 TYPEDEF: double gdouble
48
49 TYPEDEF: long ssize_t
50 TYPEDEF: long time_t
51 TYPEDEF: size_t gsize
52 TYPEDEF: ssize_t gssize
53 TYPEDEF: size_t GType
54
55 TYPEDEF: void* gpointer
56 TYPEDEF: void* gconstpointer
57
58 TYPEDEF: guint8 GDateDay
59 TYPEDEF: guint16 GDateYear
60 TYPEDEF: gint GPid
61 TYPEDEF: guint32 GQuark
62 TYPEDEF: gint32 GTime
63 TYPEDEF: glong gintptr
64 TYPEDEF: gint64 goffset
65 TYPEDEF: gulong guintptr
66 TYPEDEF: guint32 gunichar
67 TYPEDEF: guint16 gunichar2
68
69 TYPEDEF: gpointer pointer
70
71 REPLACE-C-TYPE: long\sdouble double
72 REPLACE-C-TYPE: any gpointer
73
74 IMPLEMENT-STRUCTS: GError GPollFD GSource GSourceFuncs ;
75
76 CONSTANT: G_MININT8   HEX: -80
77 CONSTANT: G_MAXINT8   HEX:  7f
78 CONSTANT: G_MAXUINT8  HEX:  ff
79 CONSTANT: G_MININT16  HEX: -8000
80 CONSTANT: G_MAXINT16  HEX:  7fff
81 CONSTANT: G_MAXUINT16 HEX:  ffff
82 CONSTANT: G_MININT32  HEX: -80000000
83 CONSTANT: G_MAXINT32  HEX:  7fffffff
84 CONSTANT: G_MAXUINT32 HEX:  ffffffff
85 CONSTANT: G_MININT64  HEX: -8000000000000000
86 CONSTANT: G_MAXINT64  HEX:  7fffffffffffffff
87 CONSTANT: G_MAXUINT64 HEX:  ffffffffffffffff
88
89 GIR: vocab:glib/GLib-2.0.gir
90
91 DESTRUCTOR: g_source_unref
92 DESTRUCTOR: g_free
93
94 CALLBACK: gboolean GSourceFuncsPrepareFunc ( GSource* source, gint* timeout_ ) ;
95 CALLBACK: gboolean GSourceFuncsCheckFunc ( GSource* source ) ;
96 CALLBACK: gboolean GSourceFuncsDispatchFunc ( GSource* source, GSourceFunc callback, gpointer user_data ) ;
97
98 ERROR: g-error domain code message ;
99
100 : GError>g-error ( GError -- g-error )
101     [ domain>> g_quark_to_string utf8 alien>string ]
102     [ code>> ]
103     [ message>> utf8 alien>string ] tri
104     \ g-error boa ;
105
106 : handle-GError ( GError/f -- )
107     [
108         [ GError>g-error ]
109         [ g_error_free ] bi
110         throw
111     ] when* ;