! Copyright (C) 2010 Anton Gorenko.
! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.destructors alien.libraries alien.syntax
-combinators kernel gobject-introspection
-gobject-introspection.standard-types system ;
+USING: accessors alien alien.destructors alien.libraries
+alien.strings alien.syntax combinators gobject-introspection
+gobject-introspection.standard-types io.encodings.utf8 kernel
+system ;
IN: glib.ffi
LIBRARY: glib
<<
"glib" {
- { [ os winnt? ] [ "libglib-2.0-0.dll" cdecl add-library ] }
+ { [ os windows? ] [ "libglib-2.0-0.dll" cdecl add-library ] }
{ [ os macosx? ] [ "/opt/local/lib/libglib-2.0.0.dylib" cdecl add-library ] }
{ [ os unix? ] [ drop ] }
} cond
>>
-IMPLEMENT-STRUCTS: GPollFD GSource GSourceFuncs ;
-
-CONSTANT: G_MININT8 HEX: -80
-CONSTANT: G_MAXINT8 HEX: 7f
-CONSTANT: G_MAXUINT8 HEX: ff
-CONSTANT: G_MININT16 HEX: -8000
-CONSTANT: G_MAXINT16 HEX: 7fff
-CONSTANT: G_MAXUINT16 HEX: ffff
-CONSTANT: G_MININT32 HEX: -80000000
-CONSTANT: G_MAXINT32 HEX: 7fffffff
-CONSTANT: G_MAXUINT32 HEX: ffffffff
-CONSTANT: G_MININT64 HEX: -8000000000000000
-CONSTANT: G_MAXINT64 HEX: 7fffffffffffffff
-CONSTANT: G_MAXUINT64 HEX: ffffffffffffffff
+IMPLEMENT-STRUCTS: GError GPollFD GSource GSourceFuncs ;
+
+CONSTANT: G_MININT8 -0x80
+CONSTANT: G_MAXINT8 0x7f
+CONSTANT: G_MAXUINT8 0xff
+CONSTANT: G_MININT16 -0x8000
+CONSTANT: G_MAXINT16 0x7fff
+CONSTANT: G_MAXUINT16 0xffff
+CONSTANT: G_MININT32 -0x80000000
+CONSTANT: G_MAXINT32 0x7fffffff
+CONSTANT: G_MAXUINT32 0xffffffff
+CONSTANT: G_MININT64 -0x8000000000000000
+CONSTANT: G_MAXINT64 0x7fffffffffffffff
+CONSTANT: G_MAXUINT64 0xffffffffffffffff
GIR: vocab:glib/GLib-2.0.gir
CALLBACK: gboolean GSourceFuncsPrepareFunc ( GSource* source, gint* timeout_ ) ;
CALLBACK: gboolean GSourceFuncsCheckFunc ( GSource* source ) ;
CALLBACK: gboolean GSourceFuncsDispatchFunc ( GSource* source, GSourceFunc callback, gpointer user_data ) ;
+
+ERROR: g-error domain code message ;
+
+: GError>g-error ( GError -- g-error )
+ [ domain>> g_quark_to_string utf8 alien>string ]
+ [ code>> ]
+ [ message>> utf8 alien>string ] tri
+ \ g-error boa ;
+
+: handle-GError ( GError/f -- )
+ [
+ [ GError>g-error ]
+ [ g_error_free ] bi
+ throw
+ ] when* ;