X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=io.lisp;h=292af3c68382cc23da07f6603a1d89ee13a84c72;hb=3c0c56d3c9f641e1c07534d55db2577287ef885f;hp=9c591c7ca368558de15c90e67e47f52fc0fd59dd;hpb=e83a72f1e88062d7e17ac77c17cc9c32d51f3c13;p=kmrcl.git diff --git a/io.lisp b/io.lisp index 9c591c7..292af3c 100644 --- a/io.lisp +++ b/io.lisp @@ -7,9 +7,9 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: io.lisp,v 1.13 2003/07/30 22:23:25 kevin Exp $ +;;;; $Id$ ;;;; -;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg +;;;; This file, part of KMRCL, is Copyright (c) 2002-2003 by Kevin M. Rosenberg ;;;; ;;;; KMRCL users are granted the rights to distribute and use this software ;;;; as governed by the terms of the Lisp Lesser GNU Public License @@ -169,12 +169,13 @@ #-allegro (write-string (write-to-string n) s)) + #+openmcl (defun open-device-stream (path direction) (let* ((mode (ecase direction - (:input #$O_RDONLY) - (:output #$O_WRONLY) - (:io #$O_RDWR))) + (: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) @@ -189,3 +190,25 @@ (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))))) + +