I'm trying to use the posix process call to run the graphviz dot program, hand it some input data and collect the output. I'm not able to figure out how to correctly use process to do this. My code is below. Any hints would be much appreciated.
(define (tests:run-dot indat outtype) ;; outtype is plain, fig, dot, etc.
http://www.graphviz.org/content/output-formats (print "indat: ")
(map print indat)
(let-values (((inp oup pid)(process "dot" (list "-T" outtype))))
(let ((th1 (make-thread (lambda ()
(with-output-to-port oup
(lambda ()
(map print indat))))
"dot writer")))
(thread-start! th1)
(let ((res (with-input-from-port inp
(lambda ()
(read-lines)))))
(thread-join! th1)
(close-output-port oup)
(close-input-port inp)
;; (process-wait pid)
res)))
For reference this is the equivalent of the following from the commandline:
address@hidden:~/data/megatest/ext-tests$ dot -Tplain << EOF
> digraph tests {
> a -> b
> }
> EOF
graph 1 0.75 1.5
node a 0.375 1.25 0.75 0.5 a solid ellipse black lightgrey
node b 0.375 0.25 0.75 0.5 b solid ellipse black lightgrey
edge a b 4 0.375 0.99579 0.375 0.88865 0.375 0.7599 0.375 0.64045 solid black
stop