(with-open-file (in file :direction :input)
(read-stream-to-string in))))
+(defun read-file-to-usb8-array (file)
+ "Opens a reads a file. Returns the contents as single unsigned-byte array"
+ (with-open-file (in file :direction :input)
+ (let* ((file-len (file-length in))
+ (usb8 (make-array file-len :element-type '(unsigned-byte 8)))
+ (pos (read-sequence usb8 in)))
+ (unless (= file-len pos)
+ (error "Length read (~D) doesn't match file length (~D)~%" pos file-len))
+ usb8)))
+
+
(defun read-stream-to-strings (in)
(let ((lines '())
(eof (gensym)))
(write-char #\: stream)
(write-string (aref +datetime-number-strings+ minute) stream)))
-(defun copy-binary-stream (in out)
- (do* ((buf (make-array 4096 :element-type '(unsigned-byte 8)))
+(defun copy-binary-stream (in out &key (chunk-size 4096))
+ (do* ((buf (make-array chunk-size :element-type '(unsigned-byte 8)))
(pos (read-sequence buf in) (read-sequence buf in)))
((zerop pos))
(write-sequence buf out :end pos)))
(defun make-usb8-array (len)
(make-array len :element-type '(unsigned-byte 8)))
-(defun usb8-array-to-string (vec)
- (declare (type (simple-array (unsigned-byte 8) (*)) vec))
- (let* ((len (length vec))
+(defun usb8-array-to-string (vec &key (start 0) end)
+ (declare (type (simple-array (unsigned-byte 8) (*)) vec)
+ (fixnum start))
+ (unless end
+ (setq end (length vec)))
+ (let* ((len (- end start))
(str (make-string len)))
(declare (fixnum len)
(simple-string str)
- (optimize (speed 3)))
+ (optimize (speed 3) (safety 0)))
(do ((i 0 (1+ i)))
((= i len) str)
(declare (fixnum i))
- (setf (schar str i) (code-char (aref vec i))))))
+ (setf (schar str i) (code-char (aref vec (the fixnum (+ i start))))))))
(defun string-to-usb8-array (str)
(declare (simple-string str))