Here's the gtk example that comes with ypsilon scheme modified
somewhat to run on ikarus.
(import (rnrs)
(ypsilon-compat)
(ikarus foreign))
; minimal bindings for GTK hello world
(define libgtk-name (cond (on-linux "libgtk-x11-2.0.so.0")
(on-darwin "Gtk.framework/Gtk")
(else
(assertion-violation #f "can not locate GTK
library, unknown operating system"))))
(define libgtk (load-shared-object libgtk-name))
(define-syntax define-function
(syntax-rules ()
((_ ret name args)
(define name (c-function libgtk libgtk-name ret __stdcall name
args)))))
(define-function void gtk_init ([int] [char*]))
(define-function void* gtk_window_new (int))
(define-function void gtk_window_set_title (void* char*))
(define-function void gtk_window_resize (void* int int))
(define-function void* gtk_button_new_with_label (char*))
(define-function void gtk_widget_show (void*))
(define-function void gtk_widget_destroy (void*))
(define-function void gtk_main ())
(define-function void gtk_main_quit ())
(define-function void gtk_container_add (void* void*))
(define-function void gtk_container_set_border_width (void* int))
(define-function int g_signal_connect_data (void* char* [c-callback
void (void* void* void*)] void* void* int))
(define-function int g_signal_connect_object (void* char* [c-
callback void (void*)] void* int))
(define GTK_WINDOW_TOPLEVEL 0)
(define G_CONNECT_SWAPPED 2)
(define g_signal_connect
(lambda (instance detailed_signal c_handler data)
(g_signal_connect_data instance detailed_signal c_handler data
(integer->pointer 0) 0)))
(define g_signal_connect_swapped
(lambda (instance detailed_signal c_handler object)
(g_signal_connect_object instance detailed_signal c_handler object
G_CONNECT_SWAPPED)))
; GTK hello world
;(gtk_init (vector (length (command-line))) (apply vector (command-
line)))
(gtk_init (vector 0) (apply vector (list "")))
(let ((window (gtk_window_new GTK_WINDOW_TOPLEVEL))
(button (gtk_button_new_with_label "Hello World"))
(destroy
(lambda x
(format #t "[destory ~s]~%" x)
(gtk_main_quit)))
(clicked
(lambda x
(format #t "[clicked ~s]~%" x))))
(gtk_container_set_border_width window 10)
(gtk_window_set_title window "Hello World")
(gtk_window_resize window 256 128)
(g_signal_connect window "destroy" destroy (integer->pointer 0))
(g_signal_connect button "clicked" clicked (integer->pointer 0))
(g_signal_connect_swapped button "clicked" gtk_widget_destroy
window)
(gtk_container_add window button)
(gtk_widget_show button)
(gtk_widget_show window)
(gtk_main)
(exit))