Reintroducing cursor demo and updating layout demo
[clg] / glib / ffi.lisp
index e7bbd95..825facb 100644 (file)
@@ -15,7 +15,7 @@
 ;; License along with this library; if not, write to the Free Software
 ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-;; $Id: ffi.lisp,v 1.6 2004-11-19 13:02:51 espen Exp $
+;; $Id: ffi.lisp,v 1.9 2004-12-19 15:31:26 espen Exp $
 
 (in-package "GLIB")
 
 
 
 (defun default-alien-fname (lisp-name)
-  (let* ((lisp-name-string
-         (if (char= (char (the simple-string (string lisp-name)) 0) #\%)
-             (subseq (the simple-string (string lisp-name)) 1)
-           (string lisp-name)))
-        (prefix (package-prefix *package*))
-        (name (substitute #\_ #\- (string-downcase lisp-name-string))))
+  (let* ((name (substitute #\_ #\- (string-downcase lisp-name)))
+        (stripped-name
+         (cond
+          ((and 
+            (char= (char name 0) #\%)
+            (string= "_p" name :start2 (- (length name) 2)))
+           (subseq name 1 (- (length name) 2)))
+          ((char= (char name 0) #\%)
+           (subseq name 1))
+          ((string= "_p" name :start2 (- (length name) 2))
+           (subseq name 0 (- (length name) 2)))
+          (name)))
+        (prefix (package-prefix *package*)))
     (if (or (not prefix) (string= prefix ""))
-       name
-      (format nil "~A_~A" prefix name))))
+       stripped-name
+      (format nil "~A_~A" prefix stripped-name))))
 
 (defun default-alien-type-name (type-name)
   (let ((prefix (package-prefix *package*)))
 
 (defmethod destroy-function ((type t) &rest args)
   (declare (ignore type args))
-  #'(lambda (location offset)
+  #'(lambda (location &optional offset)
       (declare (ignore location offset))))
 
 (defmethod copy-to-alien-form  (form (type t) &rest args)
 
 (defmethod size-of ((type (eql 'double-float)) &rest args)
   (declare (ignore type args))
-  +size-of-float+)
+  +size-of-double+)
 
 (defmethod writer-function ((type (eql 'double-float)) &rest args)
   (declare (ignore type args))
   (declare (ignore type))
   (copy-from-alien-function (first args)))
 
+(defmethod reader-function ((type (eql 'copy-of)) &rest args)
+  (declare (ignore type))
+  (reader-function (first args)))
+
+(defmethod writer-function ((type (eql 'copy-of)) &rest args)
+  (declare (ignore type))
+  (writer-function (first args)))
+
 (export 'copy-of)