ppm.lisp Unix DownloadWindows Download
;; -*- mode: common-lisp; package: user -*-

(in-package :user)

;; This is Unix/Linux ppm format, which supports color pixmap images in ASCII.  The
;; ppmtogif program will convert a ppm stream to a gif file, which is understood by most
;; browsers.

(defmacro with-ppm-writing ((stream writer padder
			     &key width height)
			    &body body)
  (let ((gstream (gensym)))
    `(let ((,gstream ,stream))
       (multiple-value-bind (,writer ,padder)
	   (write-ppm-header ,gstream ,width ,height)
	 ,@body))))

(defun write-ppm-header (stream width height)
  (format stream "P3 ~d ~d 255~%" width height)
  (values
   (lambda (stream rgbi)
     (format stream "~d ~d ~d~%"
	     (rgbi-red rgbi) (rgbi-green rgbi) (rgbi-blue rgbi)))
   (lambda (stream)
     (declare (ignore stream))
     nil)))