X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Futils.scm;fp=src%2Futils.scm;h=5f56f0528703c5ad3d92da0e538d475019e48060;hb=f3d35ed115ff03f513c93a05325885e44da10891;hp=0000000000000000000000000000000000000000;hpb=253656b7188f5d1f3684a640530f248d29995eef;p=gacela.git diff --git a/src/utils.scm b/src/utils.scm new file mode 100644 index 0000000..5f56f05 --- /dev/null +++ b/src/utils.scm @@ -0,0 +1,33 @@ +;;; Gacela, a GNU Guile extension for fast games development +;;; Copyright (C) 2016 by Javier Sancho Fernandez +;;; +;;; This program is free software: you can redistribute it and/or modify +;;; it under the terms of the GNU General Public License as published by +;;; the Free Software Foundation, either version 3 of the License, or +;;; (at your option) any later version. +;;; +;;; This program is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with this program. If not, see . + + +(define-module (gacela utils) + #:export (make-producer)) + +(define (make-producer body) + (define resume #f) + (lambda (real-send) + (define send-to real-send) + (define (send value-to-send) + (set! send-to + (call/cc + (lambda (k) + (set! resume k) + (send-to value-to-send))))) + (if resume + (resume real-send) + (body send))))