r7814: add implementation-dependent file, new impl-dependent commands
[kmrcl.git] / io.lisp
diff --git a/io.lisp b/io.lisp
index 9c591c7ca368558de15c90e67e47f52fc0fd59dd..4dea295f5e789d6dacb1c2eb86fe99c155d71487 100644 (file)
--- a/io.lisp
+++ b/io.lisp
@@ -7,7 +7,7 @@
 ;;;; 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
 ;;;;
   #-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)
   (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)))))
+
+