-;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; -*- Mode: ANSI-Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
;;;; *************************************************************************
;;;; FILE IDENTIFICATION
;;;;
;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Feb 2002
;;;;
-;;;; Copyright (c) 2002 Kevin M. Rosenberg
+;;;; $Id: objects.cl,v 1.6 2002/03/17 17:33:30 kevin Exp $
;;;;
-;;;; $Id: objects.cl,v 1.1 2002/03/09 19:55:33 kevin Exp $
+;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
-;;;; This file is part of the UFFI.
-;;;;
-;;;; UFFI is free software; you can redistribute it and/or modify
-;;;; it under the terms of the GNU General Public License (version 2) as
-;;;; published by the Free Software Foundation.
-;;;;
-;;;; UFFI 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 UFFI; if not, write to the Free Software
-;;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+;;;; UFFI users are granted the rights to distribute and use this software
+;;;; as governed by the terms of the Lisp Lesser GNU Public License
+;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
;;;; *************************************************************************
(declaim (optimize (debug 3) (speed 3) (safety 1) (compilation-speed 0)))
#+cmu `(alien:null-alien ,obj)
)
-(def-constant +null-c-string-pointer+
- #+cmu nil
- #+allegro 0
- #+lispworks (fli:make-pointer :address 0 :type '(:unsigned :char)))
(defmacro make-null-pointer (type)
#+(or allegro cmu) (declare (ignore type))
(defmacro deref-pointer (ptr type)
"Returns a object pointed"
- #+(or lispworks cmu) (declare (ignore type))
- #+cmu `(alien:deref ,ptr)
- #+lispworks `(fli:dereference ,ptr)
- #+allegro `(ff:fslot-value-typed ,type :c ,ptr)
- )
+ (let ((result (gensym)))
+ `(let ((,result
+ #+cmu (alien:deref ,ptr)
+ #+lispworks (fli:dereference ,ptr)
+ #+allegro (ff:fslot-value-typed ,type :c ,ptr)
+ ))
+ (if (and
+ (or (eq ,type :char)
+ (eq ,type :unsigned-char))
+ (numberp ,result))
+ (code-char ,result)
+ ,result))))
(defmacro pointer-address (obj)
#+cmu