; compile likes this: csc -X lazy-ffi.scm gtktest.scm (use lazy-ffi) (import foreign) #~"libgtk-x11-2.0.so" #~"libglib-2.0.so" #~"libgobject-2.0.so" (define GTK_WINDOW_TOPLEVEL 0) (define-external (hello (c-pointer widget) (c-pointer data)) void (print "Hello, world") ) (define-external (delete_event (c-pointer widget) (c-pointer event) (c-pointer data) ) bool (print "delete event occurred") #t) (define-external (destroy (c-pointer widget) (c-pointer data)) void (#~gtk_main_quit) ) (define (g_signal_connect a b c d) (#~g_signal_connect_data a b c pointer: d pointer: #f 0) ) (#~gtk_init (foreign-value "&C_main_argc" c-pointer) (foreign-value "&C_main_argv" c-pointer)) (define window (#~gtk_window_new GTK_WINDOW_TOPLEVEL return: pointer:)) (g_signal_connect window "delete_event" #$delete_event #f) (g_signal_connect window "destroy" #$destroy #f) (#~gtk_container_set_border_width window 10) (define button (#~gtk_button_new_with_label "Hello World" return: pointer:)) (g_signal_connect button "clicked" #$hello #f) (define-external (close_all (c-pointer widget)) void (#~gtk_widget_destroy window) ) (g_signal_connect button "clicked" #$close_all #f) (#~gtk_container_add window button) (#~gtk_widget_show button) (#~gtk_widget_show window) (#~gtk_main safe: #t)