1 ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
5 ;;;; Name: c-test-fns.cl
6 ;;;; Purpose: UFFI Example file for zlib compression
7 ;;;; Programmer: Kevin M. Rosenberg
8 ;;;; Date Started: Mar 2002
10 ;;;; $Id: c-test-fns.cl,v 1.2 2002/03/21 09:54:34 kevin Exp $
12 ;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg
14 ;;;; UFFI users are granted the rights to distribute and use this software
15 ;;;; as governed by the terms of the Lisp Lesser GNU Public License
16 ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
17 ;;;; *************************************************************************
21 (unless (uffi:load-foreign-library
22 (make-pathname :name "c-test-fns"
23 :type #+(or linux unix)"so" #+(or win32 mswindows) "dll"
24 :defaults *load-truename*)
25 :supporting-libraries '("c")
27 (warn "Unable to load c-test-fns library"))
29 (uffi:def-function ("cs_to_upper" cs-to-upper)
30 ((input (* :unsigned-char)))
34 (defun string-to-upper (str)
35 (uffi:with-foreign-string (str-foreign str)
36 (cs-to-upper str-foreign)
37 (uffi:convert-from-foreign-string str-foreign)))
39 (uffi:def-function ("cs_count_upper" cs-count-upper)
44 (defun string-count-upper (str)
45 (uffi:with-cstring (str-cstring str)
46 (cs-count-upper str-cstring)))
48 (uffi:def-function ("half_double_vector" half-double-vector)
53 (uffi:def-constant +double-vec-length+ 10)
54 (defun test-half-double-vector ()
55 (let ((vec (uffi:allocate-foreign-object :double +double-vec-length+))
57 (dotimes (i +double-vec-length+)
58 (setf (uffi:deref-array vec '(:array :double) i)
59 (coerce i 'double-float)))
60 (half-double-vector +double-vec-length+ vec)
61 (dotimes (i +double-vec-length+)
62 (push (uffi:deref-array vec '(:array :double) i) results))
63 (uffi:free-foreign-object vec)
67 (let ((vec (make-array +double-vec-length+ :element-type 'double-float)))
68 (dotimes (i +double-vec-length+)
69 (setf (aref vec i) (coerce i 'double-float)))
70 (half-double-vector +double-vec-length+ vec)
75 (let ((vec (make-array +double-vec-length+ :element-type 'double-float)))
76 (dotimes (i +double-vec-length+)
77 (setf (aref vec i) (coerce i 'double-float)))
79 (half-double-vector +double-vec-length+ (system:vector-sap vec)))
83 (format t "~&(string-to-upper \"this is a test\") => ~A"
84 (string-to-upper "this is a test"))
87 (format t "~&(string-to-upper nil) => ~A"
88 (string-to-upper nil))
91 (format t "~&(string-count-upper \"This is a Test\") => ~A"
92 (string-count-upper "This is a Test"))
95 (format t "~&(string-count-upper nil) => ~A"
96 (string-count-upper nil))
99 (format t "~&Half vector: ~S" (test-half-double-vector))