;;; guile-2d ;;; Copyright (C) 2013 David Thompson ;;; ;;; Guile-2d is free software: you can redistribute it and/or modify it ;;; under the terms of the GNU Lesser General Public License as ;;; published by the Free Software Foundation, either version 3 of the ;;; License, or (at your option) any later version. ;;; ;;; Guile-2d 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 ;;; Lesser General Public License for more details. ;;; ;;; You should have received a copy of the GNU Lesser General Public ;;; License along with this program. If not, see ;;; . ;;; Commentary: ;; ;; Wrapper helper procedures. ;; ;;; Code: (define-module (2d wrappers util) #:export (define-enumeration)) ;; Borrowed from guile-figl (define-syntax-rule (define-enumeration enumerator (name value) ...) (define-syntax enumerator (lambda (x) (syntax-case x () ((_) #''(name ...)) ((_ enum) (number? (syntax->datum #'enum)) #'enum) ((_ enum) (or (assq-ref '((name . value) ...) (syntax->datum #'enum)) (syntax-violation 'enumerator "invalid enumerated value" #'enum)))))))