X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Faggregates.cl;h=76542cdc7ed887a950a40d0b3989f9a4eaa01a6d;hb=f83d9af1a5b3ec07bce41a7552b36134f5342b87;hp=1475bd9df7845d2fdc4dad568841a2b3d3b1f477;hpb=4dad9a2d968de896ec97c7470620ab921fcf275f;p=uffi.git diff --git a/src/aggregates.cl b/src/aggregates.cl index 1475bd9..76542cd 100644 --- a/src/aggregates.cl +++ b/src/aggregates.cl @@ -1,4 +1,4 @@ -;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*- +;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*- ;;;; ************************************************************************* ;;;; FILE IDENTIFICATION ;;;; @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Feb 2002 ;;;; -;;;; $Id: aggregates.cl,v 1.5 2002/03/14 21:32:23 kevin Exp $ +;;;; $Id: aggregates.cl,v 1.9 2002/04/06 19:45:14 kevin Exp $ ;;;; ;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -49,23 +49,23 @@ of the enum-name name, separator-string, and field-name" cmds)) -(defmacro def-array (name-array type) +(defmacro def-array-pointer (name-array type) #+allegro `(ff:def-foreign-type ,name-array - (:array ,(convert-from-uffi-type type :array))) + (:array ,(convert-from-uffi-type type :array))) #+lispworks `(fli:define-c-typedef ,name-array - (:pointer (:pointer ,(convert-from-uffi-type type :array)))) + (:c-array ,(convert-from-uffi-type type :array))) #+cmu `(alien:def-alien-type ,name-array - (* ,(convert-from-uffi-type type :array))) + (* ,(convert-from-uffi-type type :array))) ) -(defun process-struct-args (name args) +(defun process-struct-fields (name fields) (let (processed) - (dolist (arg args) - (let ((field-name (car arg)) - (type (cadr arg))) + (dolist (field fields) + (let ((field-name (car field)) + (type (cadr field))) (push (append (list field-name) (if (eq type :pointer-self) #+cmu `((* (alien:struct ,name))) @@ -75,13 +75,13 @@ of the enum-name name, separator-string, and field-name" (nreverse processed))) -(defmacro def-struct (name &rest args) +(defmacro def-struct (name &rest fields) #+cmu - `(alien:def-alien-type ,name (alien:struct ,name ,@(process-struct-args name args))) + `(alien:def-alien-type ,name (alien:struct ,name ,@(process-struct-fields name fields))) #+allegro - `(ff:def-foreign-type ,name (:struct ,@(process-struct-args name args))) + `(ff:def-foreign-type ,name (:struct ,@(process-struct-fields name fields))) #+lispworks - `(fli:define-c-struct ,name ,@(process-struct-args name args)) + `(fli:define-c-struct ,name ,@(process-struct-fields name fields)) ) @@ -113,7 +113,13 @@ of the enum-name name, separator-string, and field-name" #+allegro `(ff:fslot-value-typed ,type :c ,obj ,i) ) - - +(defmacro def-union (name &rest fields) + #+allegro + `(ff:def-foreign-type ,name (:union ,@(process-struct-fields name fields))) + #+lispworks + `(fli:define-c-union ,name ,@(process-struct-fields name fields)) + #+cmu + `(alien:def-alien-type ,name (alien:union ,name ,@(process-struct-fields name fields))) +)