r5408: *** empty log message ***
[kmrcl.git] / io.lisp
diff --git a/io.lisp b/io.lisp
index 2dcf7959b8574add12e9f6c4f96c48bff63ed12d..9c591c7ca368558de15c90e67e47f52fc0fd59dd 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.6 2003/05/09 09:35:04 kevin Exp $
+;;;; $Id: io.lisp,v 1.13 2003/07/30 22:23:25 kevin Exp $
 ;;;;
 ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
 ;;;;
@@ -16,7 +16,7 @@
 ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
 ;;;; *************************************************************************
 
-(in-package :kmrcl)
+(in-package #:kmrcl)
 
 (defun print-file-contents (file &optional (strm *standard-output*))
   "Opens a reads a file. Returns the contents as a single string"
                         :if-exists :supersede)
       (stream-subst old new in out))))
 
-(defmacro print-n-chars (char n stream)
-  (let ((i (gensym)))
-    `(dotimes (,i ,n)
-      (declare (fixnum ,i))
-      (write-char ,char ,stream))))
-  
+(defun print-n-chars (char n stream)
+  (declare (fixnum n) (optimize (speed 3) (safety 0) (space 0)))
+  (dotimes (i n)
+    (declare (fixnum i))
+    (write-char char stream)))
+
+(defun print-n-strings (str n stream)
+  (declare (fixnum n) (optimize (speed 3) (safety 0) (space 0)))
+  (dotimes (i n)
+    (declare (fixnum i))
+    (write-string str stream)))
+
 (defun indent-spaces (n &optional (stream *standard-output*))
   "Indent n*2 spaces to output stream"
   (print-n-chars #\space (+ n n) stream))
 
+
+(defun indent-html-spaces (n &optional (stream *standard-output*))
+  "Indent n*2 html spaces to output stream"
+  (print-n-strings " " (+ n n) stream))
+     
+
 (defun print-list (l &optional (output *standard-output*))
   "Print a list to a stream"
   (format output "~{~A~%~}" l))
              (setf pos 0))))
     (buf-flush buf out)))
 
+(declaim (inline write-fixnum))
+(defun write-fixnum (n s)
+  #+allegro (excl::print-fixnum s 10 n)
+  #-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)))
+        (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))  
+  )