chiark / gitweb /
Changed to MIT license
[clg] / glib / genums.lisp
index 1ed19c2be424c6ea961204f77d12160a89296208..c49baf8018616322ea2bc9e521515d5453d8767d 100644 (file)
@@ -1,21 +1,26 @@
-;; Common Lisp bindings for GTK+ v2.0
-;; Copyright (C) 2000-2001 Espen S. Johnsen <esj@stud.cs.uit.no>
+;; Common Lisp bindings for GTK+ v2.x
+;; Copyright 2000-2005 Espen S. Johnsen <espen@users.sf.net>
 ;;
-;; This library 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 2 of the License, or (at your option) any later version.
+;; Permission is hereby granted, free of charge, to any person obtaining
+;; a copy of this software and associated documentation files (the
+;; "Software"), to deal in the Software without restriction, including
+;; without limitation the rights to use, copy, modify, merge, publish,
+;; distribute, sublicense, and/or sell copies of the Software, and to
+;; permit persons to whom the Software is furnished to do so, subject to
+;; the following conditions:
 ;;
-;; This library 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.
+;; The above copyright notice and this permission notice shall be
+;; included in all copies or substantial portions of the Software.
 ;;
-;; You should have received a copy of the GNU Lesser General Public
-;; License along with this library; if not, write to the Free Software
-;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+;; IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+;; CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-;; $Id: genums.lisp,v 1.9 2005-02-11 19:09:38 espen Exp $
+;; $Id: genums.lisp,v 1.13 2005-04-23 16:48:50 espen Exp $
 
 (in-package "GLIB")
   
@@ -23,14 +28,15 @@ (in-package "GLIB")
 
 (defun %map-enum (mappings op)
   (loop
-   as value = 1 then (1+ value)
+   as value = 0 then (1+ value)
    for mapping in mappings
    collect (let ((symbol (if (atom mapping) mapping (first mapping))))
             (unless (atom mapping)
               (setq value (second mapping)))
             (ecase op
-              (:symbol-int (list symbol value))
-              (:int-symbol (list value symbol))
+              (:symbol-int `(,symbol ,value))
+              (:int-symbol `(,value ,symbol))
+              (:int-quoted-symbol `(,value ',symbol))
               (:symbols symbol)))))
 
 (deftype enum (&rest args)
@@ -53,8 +59,8 @@ (defmethod to-alien-form (form (type (eql 'enum)) &rest args)
 
 (defmethod from-alien-form (form (type (eql 'enum)) &rest args)
   (declare (ignore type))
-  `(ecase ,form
-    ,@(%map-enum args :int-symbol)))
+  `(case ,form
+    ,@(%map-enum args :int-quoted-symbol)))
 
 (defmethod to-alien-function ((type (eql 'enum)) &rest args)
   (declare (ignore type))
@@ -106,8 +112,8 @@        (defun ,enum-int (enum)
           ,@(%map-enum args :symbol-int)
           (t (error 'type-error :datum enum :expected-type ',name))))
        (defun ,int-enum (value)
-        (ecase value
-          ,@(%map-enum args :int-symbol)))
+        (case value
+          ,@(%map-enum args :int-quoted-symbol)))
        (defmethod to-alien-form (form (type (eql ',name)) &rest args)
         (declare (ignore type args))
         (list ',enum-int form))
@@ -142,8 +148,8 @@ (defun %map-flags (mappings op)
             (unless (atom mapping)
               (setq value (second mapping)))
             (ecase op
-              (:symbol-int (list symbol value))
-              (:int-symbol (list value symbol))
+              (:symbol-int `(,symbol ,value))
+              (:int-symbol `(,value ,symbol))
               (:symbols symbol)))))
 
 (deftype flags (&rest args)
@@ -330,7 +336,7 @@ (defun expand-enum-type (type-number forward-p options)
           (remove-if
            #'(lambda (mapping) (eq (second mapping) nil)) mappings))))
     `(progn
-       (register-type ',type ,(find-type-name type-number))
+       (register-type ',type ',(find-type-init-function type-number))
        ,(ecase super
          (enum `(define-enum-type ,type ,@expanded-mappings))
          (flags `(define-flags-type ,type ,@expanded-mappings))))))