X-Git-Url: http://git.kpe.io/?p=kmrcl.git;a=blobdiff_plain;f=io.lisp;h=4dea295f5e789d6dacb1c2eb86fe99c155d71487;hp=b6778246c3f67f2717dd0e79e0667ecce09cf31e;hb=6f333885c716800cf85c2986a3b835efe0e54e70;hpb=7c7e6a18fd67e5370fd78690da2642cbe79e4113 diff --git a/io.lisp b/io.lisp index b677824..4dea295 100644 --- a/io.lisp +++ b/io.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: io.lisp,v 1.9 2003/06/20 08:35:21 kevin Exp $ +;;;; $Id$ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -163,8 +163,52 @@ (setf pos 0)))) (buf-flush buf out))) +(declaim (inline write-fixnum)) (defun write-fixnum (n s) #+allegro (excl::print-fixnum s 10 n) - (write-string (write-to-string n) s)) - - + #-allegro (write-string (write-to-string n) s)) + + + +#+openmcl +(defun open-device-stream (path direction) + (let* ((mode (ecase direction + (:input #.(read-from-string "#$O_RDONLY")) + (:output #.(read-from-string "#$O_WRONLY")) + (:io #.(read-from-string "#$O_RDWR")))) + (fd (ccl::fd-open (ccl::native-translated-namestring path) mode))) + (if (< fd 0) + (ccl::signal-file-error fd path) + (ccl::make-fd-stream fd :direction direction)))) + + +(defun null-output-stream () + #-openmcl + (when (probe-file #p"/dev/null") + (open #p"/dev/null" :direction :output :if-exists :overwrite)) + #+openmcl + (when (probe-file #p"/dev/null") + (open-device-stream #p"/dev/null" :output)) + ) + + +(defun directory-tree (filename) + "Returns a tree of pathnames for sub-directories of a directory" + (let* ((root (canonicalize-directory-name filename)) + (subdirs (loop for path in (directory + (make-pathname :name :wild + :type :wild + :defaults root)) + when (probe-directory path) + collect (canonicalize-directory-name path)))) + (when (find nil subdirs) + (error "~A" subdirs)) + (when (null root) + (error "~A" root)) + (if subdirs + (cons root (mapcar #'directory-tree subdirs)) + (if (probe-directory root) + (list root) + (error "root not directory ~A" root))))) + +