(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))