;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Apr 2000
;;;;
-;;;; $Id: strings.lisp,v 1.4 2002/12/26 11:57:07 kevin Exp $
+;;;; $Id: strings.lisp,v 1.7 2003/02/07 14:21:55 kevin Exp $
;;;;
;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
#-excl
(defun list-to-delimited-string (list &optional (separator #\space))
- (let ((output (when list (format nil "~A" (car list)))))
- (dolist (obj (rest list))
- (setq output (concatenate 'string output
- (format nil "~A" separator)
- (format nil "~A" obj))))
- output))
+ (if (consp list)
+ (let ((fmt (format nil "~~A~~{~A~~A~~}" separator)))
+ (format nil fmt (first list) (rest list)))
+ ""))
(defun string-invert (str)
"Invert case of a string"
(declare (fixnum oldpos))
(if (char= repl-char (schar string oldpos))
(dotimes (repl-pos repl-length)
- (declare (fixnumm repl-pos))
+ (declare (fixnum repl-pos))
(setf (schar new-string newpos) (schar repl-str repl-pos))
(incf newpos))
(progn
new-string)))))
+
+(defun make-usb8-array (len)
+ (make-array len :adjustable nil
+ :fill-pointer nil
+ :element-type '(unsigned-byte 8)))
+
+(defun usb8-array-to-string (vec)
+ (let* ((len (length vec))
+ (str (make-string len)))
+ (declare (fixnum len)
+ (simple-string str)
+ (optimize (speed 3)))
+ (dotimes (i len)
+ (declare (fixnum i))
+ (setf (schar str i) (code-char (aref vec i))))
+ str))
+
+(defun string-to-usb8-array (str)
+ (let* ((len (length str))
+ (vec (make-usb8-array len)))
+ (declare (fixnum len)
+ (type (array fixnum (*)) vec)
+ (optimize (speed 3)))
+ (dotimes (i len)
+ (declare (fixnum i))
+ (setf (aref vec i) (char-code (schar str i))))
+ vec))
+