X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src-main%2Ffunctions.cl;fp=src-main%2Ffunctions.cl;h=0000000000000000000000000000000000000000;hb=130fbcd798fcc0e9513d01519e0837fe7300938b;hp=a535876fb574f992b31305656b4f8e89206189fd;hpb=7910f79a2608499f93dc4f3d50e04c355d511890;p=uffi.git diff --git a/src-main/functions.cl b/src-main/functions.cl deleted file mode 100644 index a535876..0000000 --- a/src-main/functions.cl +++ /dev/null @@ -1,83 +0,0 @@ -;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10; Package: UFFI -*- -;;;; ************************************************************************* -;;;; FILE IDENTIFICATION -;;;; -;;;; Name: function.cl -;;;; Purpose: UFFI source to C function defintions -;;;; Programmer: Kevin M. Rosenberg -;;;; Date Started: Feb 2002 -;;;; -;;;; $Id: functions.cl,v 1.1 2002/09/16 17:54:30 kevin Exp $ -;;;; -;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg -;;;; -;;;; 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))) -(in-package :uffi) - -(defun process-function-args (args) - (if (null args) - #+lispworks nil - #+allegro '(:void) - #+cmu nil - (let (processed) - (dolist (arg args) - (push (process-one-function-arg arg) processed)) - (nreverse processed)))) - -(defun process-one-function-arg (arg) - (let ((name (car arg)) - (type (convert-from-uffi-type (cadr arg) :routine))) - #+cmu - (list name type :in) - #+(or allegro lispworks) - (if (and (listp type) (listp (car type))) - (append (list name) type) - (list name type)) - )) - -(defun allegro-convert-return-type (type) - (if (and (listp type) (not (listp (car type)))) - (list type) - type)) - -;; name is either a string representing foreign name, or a list -;; of foreign-name as a string and lisp name as a symbol -(defmacro def-function (names args &key module returning) - #+(or cmu allegro) (declare (ignore module)) - - (let* ((result-type (convert-from-uffi-type returning :return)) - (function-args (process-function-args args)) - (foreign-name (if (atom names) names (car names))) - (lisp-name (if (atom names) (make-lisp-name names) (cadr names)))) - - #+allegro - `(ff:def-foreign-call (,lisp-name ,foreign-name) - ,function-args - :returning ,(allegro-convert-return-type result-type) - :call-direct t - :strings-convert nil) - #+cmu - `(alien:def-alien-routine (,foreign-name ,lisp-name) - ,result-type - ,@function-args) - #+lispworks - `(fli:define-foreign-function (,lisp-name ,foreign-name :source) - ,function-args - ,@(if module (list :module module) (values)) - :result-type ,result-type - :calling-convention :cdecl) - )) - - -(defun make-lisp-name (name) - (let ((converted (substitute #\- #\_ name))) - (intern - #+case-sensitive converted - #-case-sensitive (string-upcase converted)))) - -