Writer takes a generator, coroutines!

This commit is contained in:
2024-10-29 12:01:56 -05:00
parent 641048b56d
commit bcdb95211b
2 changed files with 20 additions and 19 deletions

View File

@@ -241,21 +241,24 @@
;; Output ;;
;;;;;;;;;;;;
(define (output-to-file surfaces filename)
(define (output-to-file filename surface-gen)
(define pngdir (mkdtemp "/tmp/graphgif_XXXXXX"))
(vector-for-each
(lambda (i surface)
(cairo-surface-write-to-png
surface
(string-append pngdir "/img-" (number->string i) ".png")))
surfaces)
(let loop ([surface (surface-gen)]
[i 1])
(when surface
(cairo-surface-write-to-png
surface
(string-append pngdir "/img-" (number->string i) ".png"))
(loop (surface-gen) (1+ i))))
(system* "ffmpeg" "-y"
"-i" (string-append pngdir "/img-%d.png")
"-loop" "0" filename))
(define-public (write-graphs-to-file graphs filename)
(output-to-file (vector-map (lambda (_ graph) (draw-abstract-graph graph)) graphs)
filename))
(define-public (write-graphs-to-file filename graph-gen)
(define (surface-gen)
(let ([graph (graph-gen)])
(and graph (draw-abstract-graph graph))))
(output-to-file filename surface-gen))
;; Local Variables:
;; geiser-scheme-implementation: guile