-! Copyright (C) 2009 Anton Gorenko.
+! Copyright (C) 2010 Anton Gorenko.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien alien.c-types alien.libraries alien.syntax
-combinators compiler.units gir kernel system vocabs.parser words ;
+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? ] [ "libglib-2.0.so" cdecl add-library ] }
+ { [ os unix? ] [ drop ] }
} cond
>>
-<< double "long double" current-vocab create typedef >>
-
-TYPEDEF: char gchar
-TYPEDEF: uchar guchar
-TYPEDEF: short gshort
-TYPEDEF: ushort gushort
-TYPEDEF: long glong
-TYPEDEF: ulong gulong
-TYPEDEF: int gint
-TYPEDEF: uint guint
-
-<<
-int c-type clone
- [ >c-bool ] >>unboxer-quot
- [ c-bool> ] >>boxer-quot
- object >>boxed-class
-"gboolean" current-vocab create typedef
->>
+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
-TYPEDEF: char gint8
-TYPEDEF: uchar guint8
-TYPEDEF: short gint16
-TYPEDEF: ushort guint16
-TYPEDEF: int gint32
-TYPEDEF: uint guint32
-TYPEDEF: longlong gint64
-TYPEDEF: ulonglong guint64
-
-TYPEDEF: float gfloat
-TYPEDEF: double gdouble
-
-TYPEDEF: long ssize_t
-TYPEDEF: long time_t
-TYPEDEF: size_t gsize
-TYPEDEF: ssize_t gssize
-TYPEDEF: size_t GType
+GIR: vocab:glib/GLib-2.0.gir
-TYPEDEF: void* gpointer
-TYPEDEF: void* gconstpointer
+DESTRUCTOR: g_source_unref
+DESTRUCTOR: g_free
-TYPEDEF: guint8 GDateDay
-TYPEDEF: guint16 GDateYear
-TYPEDEF: gint GPid
-TYPEDEF: guint32 GQuark
-TYPEDEF: gint32 GTime
-TYPEDEF: glong gintptr
-TYPEDEF: gint64 goffset
-TYPEDEF: gulong guintptr
-TYPEDEF: guint32 gunichar
-TYPEDEF: guint16 gunichar2
+CALLBACK: gboolean GSourceFuncsPrepareFunc ( GSource* source, gint* timeout_ ) ;
+CALLBACK: gboolean GSourceFuncsCheckFunc ( GSource* source ) ;
+CALLBACK: gboolean GSourceFuncsDispatchFunc ( GSource* source, GSourceFunc callback, gpointer user_data ) ;
-TYPEDEF: gpointer pointer
-TYPEDEF: gpointer any
+ERROR: g-error domain code message ;
-GIR: vocab:glib/GLib-2.0.gir
+: 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* ;