(defpackage :jpeg (:export :jpeg-read :jpeg-new :jpeg-free :jpeg-write :data :bad :width :height)) (in-package :jpeg) (use-package "ALIEN") (alien:load-foreign "/usr/lib/libjpeg.so") (alien:load-foreign "/usr/lib/libstdc++-libc6.2-2.so.3" ) (alien:load-foreign "/home/mmn/lisp/jpeg/image.o") (alien:def-alien-type jpeg (struct jpeg (width integer) (height integer) (bad integer) (data (* (unsigned 8))))) ;(declaim (inline jpeg-read)) (alien:def-alien-routine "jpeg_read" jpeg (string c-call:c-string :in)) ;(declaim (inline jpeg-new)) (alien:def-alien-routine "jpeg_new" jpeg (width c-call:int :in) (height c-call:int :in)) ;(declaim (inline jpeg-free)) (alien:def-alien-routine "jpeg_free" jpeg (image jpeg :in)) ;(declaim (inline jpeg-write)) (alien:def-alien-routine "jpeg_write" c-call:void (image jpeg :in) (string c-call:c-string :in)) (defmethod width (jpeg) (slot jpeg 'width)) (defmethod height (jpeg) (slot jpeg 'height))