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:

matt@xena:~/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
_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to