Welcome to the CHICKEN Scheme pasting service

stared with ffi added by shorbaji on Fri Nov 21 17:18:47 2014

; C code
;   #include <stdio.h>
;   #include <uv.h>
;    
;   int64_t counter = 0;
;    
;   void wait_for_a_while(uv_idle_t* handle, int status) {
;       counter++;
;    
;       if (counter >= 10e6)
;           uv_idle_stop(handle);
;   }
;    
;   int main() {
;       uv_idle_t idler;
;    
;       uv_idle_init(uv_default_loop(), &idler);
;       uv_idle_start(&idler, wait_for_a_while);
;    
;       printf("Idling...\n");
;       uv_run(uv_default_loop(), UV_RUN_DEFAULT);
;    
;       return 0;
;   }

(import foreign)

(foreign-declare "#import <uv.h>")

(define-foreign-type uv-idle-t "uv_idle_t")
(define-foreign-type uv-idle-t* (c-pointer uv-idle-t))
(define-foreign-type uv-loop-t "uv_loop_t")

(define uv-run
  (foreign-lambda int "uv_run" (c-pointer uv-loop-t) int))

(define uv-default-loop
  (foreign-lambda (c-pointer uv-loop-t) "uv_default_loop"))

(define uv-idle-init
  (foreign-lambda int "uv_idle_init" (c-pointer uv-loop-t) (c-pointer uv-idle-t)))

(define uv-idle-start
  (foreign-lambda int "uv_idle_start" (c-pointer uv-idle-t) c-pointer))

(define uv-idle-stop
  (foreign-lambda int "uv_idle_stop" (c-pointer uv-idle-t)))

(define (wait-for-a-while handle status)
  (let lp ((counter 0))
    (if (>= counter 10000000)
      (uv-idle-stop handle)
      (lp (+ counter 1)))))

(define-external idler uv-idle-t)
(define idler-ref (foreign-value "&idler" c-pointer))

(uv-idle-init (uv-default-loop) idler-ref)
(uv-idle-start idler-ref wait-for-a-while)

(uv-run (uv-default-loop) 0)

Your annotation:

Enter a new annotation:

Your nick:
The title of your paste:
Your paste (mandatory) :
Proper ... recursion is required by the Scheme specification.
Visually impaired? Let me spell it for you (wav file) download WAV