Update of /project/cello/cvsroot/hello-c
In directory common-lisp.net:/tmp/cvs-serv3125
Modified Files:
definers.lisp hello-c.lpr primitives.lisp strings.lisp
Log Message:
No comment
Date: Sun Jul 10 23:35:01 2005
Author: ktilton
Index: hello-c/definers.lisp
diff -u hello-c/definers.lisp:1.1 hello-c/definers.lisp:1.2
--- hello-c/definers.lisp:1.1 Tue May 24 01:51:57 2005
+++ hello-c/definers.lisp Sun Jul 10 23:35:01 2005
@@ -20,7 +20,7 @@
;;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
;;; IN THE SOFTWARE.
-;; $Header: /project/cello/cvsroot/hello-c/definers.lisp,v 1.1 2005/05/23 23:51:57 ktilton Exp $
+;; $Header: /project/cello/cvsroot/hello-c/definers.lisp,v 1.2 2005/07/10 21:35:01 ktilton Exp $
(in-package :hello-c)
@@ -39,11 +39,17 @@
#-lispworks ff-ptr
#+lispworks (fli:pointer-address ff-ptr))
+;;;(defun make-ff-pointer (n)
+;;; #-lispworks
+;;; n
+;;; #+lispworks
+;;; (fli:make-pointer :address n :pointer-type '(:pointer :void)))
+
(defun make-ff-pointer (n)
- #-lispworks
- n
- #+lispworks
- (fli:make-pointer :address n :pointer-type '(:pointer :void)))
+ #+allegro (ff:make-foreign-pointer :address n :type '(* void))
+ #+lispworks (fli:make-pointer :address n :pointer-type '(:pointer :void))
+ #-(or lispworks allegro) n
+ )
(defmacro defun-ffx (rtn module$ name$ (&rest type-args) &body post-processing)
(let* ((lisp-fn (lisp-fn name$))
Index: hello-c/hello-c.lpr
diff -u hello-c/hello-c.lpr:1.1 hello-c/hello-c.lpr:1.2
--- hello-c/hello-c.lpr:1.1 Tue May 24 01:51:57 2005
+++ hello-c/hello-c.lpr Sun Jul 10 23:35:01 2005
@@ -1,4 +1,4 @@
-;; -*- lisp-version: "7.0 [Windows] (May 6, 2005 8:25)"; cg: "1.54.2.17"; -*-
+;; -*- lisp-version: "7.0 [Windows] (Jun 10, 2005 13:34)"; cg: "1.54.2.17"; -*-
(in-package :cg-user)
Index: hello-c/primitives.lisp
diff -u hello-c/primitives.lisp:1.1 hello-c/primitives.lisp:1.2
--- hello-c/primitives.lisp:1.1 Tue May 24 01:51:57 2005
+++ hello-c/primitives.lisp Sun Jul 10 23:35:01 2005
@@ -7,7 +7,7 @@
;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Feb 2002
;;;;
-;;;; $Id: primitives.lisp,v 1.1 2005/05/23 23:51:57 ktilton Exp $
+;;;; $Id: primitives.lisp,v 1.2 2005/07/10 21:35:01 ktilton Exp $
;;;;
;;;; This file, part of hello-c, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
@@ -242,37 +242,37 @@
(cond
#+(or allegro cormanlisp)
((and (or (eq context :routine) (eq context :return))
- (eq type :cstring))
- (setq type '((* :char) integer)))
+ (eq type :cstring))
+ (setq type '((* :char) integer)))
#+(or cmu sbcl scl)
((eq context :type)
- (let ((cmu-type (gethash type *cmu-def-type-hash*)))
- (if cmu-type
- cmu-type
- (basic-convert-from-uffi-type type))))
+ (let ((cmu-type (gethash type *cmu-def-type-hash*)))
+ (if cmu-type
+ cmu-type
+ (basic-convert-from-uffi-type type))))
#+lispworks
((and (eq context :return)
- (eq type :cstring))
- (basic-convert-from-uffi-type :cstring-returning))
+ (eq type :cstring))
+ (basic-convert-from-uffi-type :cstring-returning))
#+(and mcl (not openmcl))
((and (eq type :void) (eq context :return)) nil)
(t
- (basic-convert-from-uffi-type type)))
+ (basic-convert-from-uffi-type type)))
(let ((sub-type (car type)))
(case sub-type
- (cl:quote
- (convert-from-uffi-type (cadr type) context))
- (:struct-pointer
- #+mcl `(:* (:struct ,(%convert-from-uffi-type (cadr type) :struct)))
- #-mcl (%convert-from-uffi-type (list '* (cadr type)) :struct)
- )
- (:struct
- #+mcl `(:struct ,(%convert-from-uffi-type (cadr type) :struct))
- #-mcl (%convert-from-uffi-type (cadr type) :struct)
- )
- (t
- (cons (%convert-from-uffi-type (first type) context)
- (%convert-from-uffi-type (rest type) context)))))))
+ (cl:quote
+ (convert-from-uffi-type (cadr type) context))
+ (:struct-pointer
+ #+mcl `(:* (:struct ,(%convert-from-uffi-type (cadr type) :struct)))
+ #-mcl (%convert-from-uffi-type (list '* (cadr type)) :struct)
+ )
+ (:struct
+ #+mcl `(:struct ,(%convert-from-uffi-type (cadr type) :struct))
+ #-mcl (%convert-from-uffi-type (cadr type) :struct)
+ )
+ (t
+ (cons (%convert-from-uffi-type (first type) context)
+ (%convert-from-uffi-type (rest type) context)))))))
#+test
Index: hello-c/strings.lisp
diff -u hello-c/strings.lisp:1.1 hello-c/strings.lisp:1.2
--- hello-c/strings.lisp:1.1 Tue May 24 01:51:57 2005
+++ hello-c/strings.lisp Sun Jul 10 23:35:01 2005
@@ -7,7 +7,7 @@
;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Feb 2002
;;;;
-;;;; $Id: strings.lisp,v 1.1 2005/05/23 23:51:57 ktilton Exp $
+;;;; $Id: strings.lisp,v 1.2 2005/07/10 21:35:01 ktilton Exp $
;;;;
;;;; This file, part of hic, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
@@ -68,28 +68,31 @@
(dispose-ptr ,obj))
)
-(defmacro with-cstring ((cstring lisp-string) &body body)
+(defmacro with-cstring ((cstring lisp$-form) &body body)
#+(or cmu sbcl scl lispworks)
- `(let ((,cstring ,lisp-string)) ,@body)
+ `(let ((,cstring ,lisp$-form)) ,@body)
#+allegro
(let ((acl-native (gensym)))
- `(excl:with-native-string (,acl-native ,lisp-string)
- (let ((,cstring (if ,lisp-string ,acl-native 0)))
- ,@body)))
+ `(excl:with-native-string (,acl-native ,lisp$-form)
+ (let ((,cstring ,(if lisp$-form acl-native 0)))
+ ,@body)))
#+mcl
- `(if (stringp ,lisp-string)
- (ccl:with-cstrs ((,cstring ,lisp-string))
- ,@body)
- (let ((,cstring +null-cstring-pointer+))
- ,@body))
- )
+ (let ((lisp$ (gensym)))
+ `(let ((,lisp$ (let ((,lisp$ ,lisp$-form))
+ (typecase ,lisp$
+ (null +null-cstring-pointer+)
+ (string ,lisp$)
+ (t (error "with-cstring asked to handle non-string ~a" ,lisp$))))))
+ (ccl:with-cstrs ((,cstring ,lisp$))
+ ,@body))))
+
(defmacro with-cstrings (bindings &rest body)
(if bindings
`(with-cstring ,(car bindings)
- (with-cstrings ,(cdr bindings)
- ,@body))
- `(progn ,@body)))
+ (with-cstrings ,(cdr bindings)
+ ,@body))
+ `(progn ,@body)))
;;; Foreign string functions