diff --git a/examples/callbacks/Makefile b/examples/callbacks/Makefile new file mode 100644 index 00000000..3321e61c --- /dev/null +++ b/examples/callbacks/Makefile @@ -0,0 +1,17 @@ +all: calls + +sys.o: sys.c + cc -c sys.c + +calls.c: calls.scm + cyclone -d calls.scm + +calls: sys.o calls.c + cc calls.c -O2 -Wall -I/usr/local/include -c -o calls.o + cc calls.o /usr/local/share/cyclone/scheme/cyclone/common.o /usr/local/share/cyclone/scheme/base.o /usr/local/share/cyclone/srfi/18.o /usr/local/share/cyclone/scheme/write.o -pthread -lcyclone -lck -lm -lcyclonebn -ldl -O2 -fPIC -Wall -Wno-shift-negative-value -Wno-unused-command-line-argument -I/usr/local/include -L/usr/local/lib -Wl,--export-dynamic -o calls + + + +.PHONY: clean +clean: + rm -f *.o calls.c calls diff --git a/examples/callbacks/calls.scm b/examples/callbacks/calls.scm new file mode 100644 index 00000000..e3cce89c --- /dev/null +++ b/examples/callbacks/calls.scm @@ -0,0 +1,22 @@ +(import (scheme base) + (scheme write) + (srfi 18)) + +;;(include-c-header "sys.c") + +(define *done* #f) +(define *dummy signal-done) ;; Hack to prevent optimizing-out signal-done + +(define (signal-done obj) + (write `(Called from C set *done* to ,obj)) + (newline) + (set! *done* obj) + #t) + +(define (wait) + (thread-sleep! 1) + (if *done* + #t + (wait))) + +(wait) diff --git a/examples/callbacks/sys.c b/examples/callbacks/sys.c new file mode 100644 index 00000000..0d22ed92 --- /dev/null +++ b/examples/callbacks/sys.c @@ -0,0 +1,6 @@ +#include "cyclone/types.h" + +extern object __glo_signal_91done; +void call_scm(object obj) +{ +}