├── bin └── .placeholder ├── lib └── .gitignore ├── README ├── Rakefile └── src └── erlenmeyer.scm /bin/.placeholder: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lib/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | Erlenmeyer is a binding between MzScheme and Erlang, allowing 2 | Erlang to open MzScheme processes as ports. 3 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require 'rubygems' 2 | require 'rake' 3 | 4 | task :default do 5 | sh "mzc -z -d lib/ src/*.scm" 6 | end 7 | -------------------------------------------------------------------------------- /src/erlenmeyer.scm: -------------------------------------------------------------------------------- 1 | (module erlenmeyer mzscheme 2 | (require (lib "foreign.ss")) (unsafe!) 3 | (provide fd->input-port 4 | fd->output-port) 5 | ; The all-important fd->input port code thanks to Matthew Flatt 6 | (define (fd->input-port fd name) 7 | (scheme_make_fd_input_port fd name 0 0)) 8 | 9 | (define (fd->output-port fd name) 10 | (scheme_make_fd_output_port fd name 0 0 0)) 11 | 12 | (define scheme_make_fd_input_port 13 | (get-ffi-obj "scheme_make_fd_input_port" #f 14 | (_fun _int _scheme _int _int -> _scheme))) 15 | 16 | (define scheme_make_fd_output_port 17 | (get-ffi-obj "scheme_make_fd_output_port" 18 | #f 19 | (_fun _int _scheme _int _int _int -> _scheme)))) --------------------------------------------------------------------------------