Use new runtime procedures SUBSTRING-MOVE! and
authorChris Hanson <org/chris-hanson/cph>
Fri, 14 Apr 2000 01:45:49 +0000 (01:45 +0000)
committerChris Hanson <org/chris-hanson/cph>
Fri, 14 Apr 2000 01:45:49 +0000 (01:45 +0000)
DECORATED-STRING-APPEND.

v7/src/imail/imail-core.scm
v7/src/imail/imail-rmail.scm
v7/src/imail/imail-top.scm
v7/src/imail/imail-util.scm
v7/src/imail/rexp.scm
v7/src/imail/rfc822.scm
v7/src/imail/url.scm
v7/src/runtime/rexp.scm
v7/src/runtime/url.scm

index b2d58af9a3b3216a7582d927c3a36c62284e7b03..a6791c1121823f234ef525f5eae7e325d0c4f6bb 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: imail-core.scm,v 1.27 2000/04/07 20:58:49 cph Exp $
+;;; $Id: imail-core.scm,v 1.28 2000/04/14 01:45:34 cph Exp $
 ;;;
 ;;; Copyright (c) 1999-2000 Massachusetts Institute of Technology
 ;;;
   '("answered" "deleted" "edited" "filed" "forwarded" "resent" "seen"))
 
 (define (message-flags->header-field flags)
-  (make-header-field message-flags:name (separated-append flags " ")))
+  (make-header-field message-flags:name
+                    (decorated-string-append "" " " "" flags)))
 
 (define (header-field->message-flags header)
   (and (string-ci=? message-flags:name (header-field-name header))
 (define (get-all-header-field-values headers name)
   (let ((headers (get-all-header-fields headers name)))
     (and (pair? headers)
-        (separated-append (map (lambda (header)
-                                 (string-trim (header-field-value header)))
-                               headers)
-                          ", "))))
+        (decorated-string-append
+         "" ", " ""
+         (map (lambda (header)
+                (string-trim (header-field-value header)))
+              headers)))))
 \f
 (define (header-field-name? object)
   (and (string? object)
index c12e6fb580f61166ce2774a53781f434fe1bd3ee..6c7352c3e871347011d5b4a68522170e3f6bfac9 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: imail-rmail.scm,v 1.17 2000/04/07 19:39:10 cph Exp $
+;;; $Id: imail-rmail.scm,v 1.18 2000/04/14 01:45:37 cph Exp $
 ;;;
 ;;; Copyright (c) 1999-2000 Massachusetts Institute of Technology
 ;;;
@@ -70,9 +70,9 @@
 (define (compute-rmail-folder-header-fields folder)
   (list (make-header-field "Version" " 5")
        (make-header-field "Labels"
-                          (separated-append
-                           (flags->rmail-labels (folder-flags folder))
-                           ","))
+                          (decorated-string-append
+                           "" "," ""
+                           (flags->rmail-labels (folder-flags folder))))
        (make-header-field "Note" "   This is the header of an rmail file.")
        (make-header-field "Note" "   If you are seeing it in rmail,")
        (make-header-field "Note"
index b18b63fd74dd04b03c8717000e0e1706d6f23cf6..a60db506d2737964e3f61b5a605f6fa642291737 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: imail-top.scm,v 1.19 2000/04/07 20:59:26 cph Exp $
+;;; $Id: imail-top.scm,v 1.20 2000/04/14 01:45:39 cph Exp $
 ;;;
 ;;; Copyright (c) 1999-2000 Massachusetts Institute of Technology
 ;;;
@@ -385,7 +385,8 @@ With prefix argument N moves forward N messages with these flags."
                     (string-append "message with flag"
                                    (if (fix:= 1 (length flags)) "" "s")
                                    " "
-                                   (separated-append flags ", "))))))
+                                   (decorated-string-append "" ", " ""
+                                                            flags))))))
 
 (define-command imail-previous-flagged-message
   "Show previous message with one of the flags FLAGS.
@@ -496,7 +497,8 @@ With prefix argument N moves backward N messages with these flags."
                       "/"
                       (number->string (folder-length folder)))))
                 (if (pair? flags)
-                    (string-append line "," (separated-append flags ","))
+                    (string-append line ","
+                                   (decorated-string-append "" "," "" flags))
                     line))
               " 0/0")))))
 
index b3287aec2bc761c4f90dea3d0b8e405f1c68face..33ccb39444cb9345fffe5f0dbdb2e4797455994f 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: imail-util.scm,v 1.9 2000/04/13 20:14:25 cph Exp $
+;;; $Id: imail-util.scm,v 1.10 2000/04/14 01:45:43 cph Exp $
 ;;;
 ;;; Copyright (c) 1999-2000 Massachusetts Institute of Technology
 ;;;
        lines)))
 
 (define (lines->string lines)
-  (suffixed-append lines "\n"))
+  (decorated-string-append "" "" "\n" lines))
 
 (define (short-name->pathname name)
   (merge-pathnames name (current-home-directory)))
   (write-char #\: port)
   (write-string value port)
   (newline port))
-\f
-(define (separated-append tokens separator)
-  (cond ((not (pair? tokens)) "")
-       ((not (pair? (cdr tokens))) (car tokens))
-       (else
-        (let ((string
-               (make-string
-                (let ((ns (string-length separator)))
-                  (do ((tokens (cdr tokens) (cdr tokens))
-                       (count (string-length (car tokens))
-                              (fix:+ count
-                                     (fix:+ (string-length (car tokens))
-                                            ns))))
-                      ((not (pair? tokens)) count))))))
-          (let loop
-              ((tokens (cdr tokens))
-               (index (string-move! (car tokens) string 0)))
-            (if (pair? tokens)
-                (loop (cdr tokens)
-                      (string-move! (car tokens)
-                                    string
-                                    (string-move! separator string index)))))
-          string))))
-
-(define (suffixed-append tokens suffix)
-  (if (pair? tokens)
-      (let ((string
-            (make-string
-             (let ((ns (string-length suffix)))
-               (do ((tokens tokens (cdr tokens))
-                    (count 0
-                           (fix:+ count
-                                  (fix:+ (string-length (car tokens)) ns))))
-                   ((not (pair? tokens)) count))))))
-       (let loop ((tokens tokens) (index 0))
-         (if (pair? tokens)
-             (loop (cdr tokens)
-                   (string-move! suffix
-                                 string
-                                 (string-move! (car tokens) string index)))))
-       string)
-      ""))
-
-(define (prefixed-append tokens prefix)
-  (if (pair? tokens)
-      (let ((string
-            (make-string
-             (let ((ns (string-length prefix)))
-               (do ((tokens tokens (cdr tokens))
-                    (count 0
-                           (fix:+ count
-                                  (fix:+ (string-length (car tokens)) ns))))
-                   ((not (pair? tokens)) count))))))
-       (let loop ((tokens tokens) (index 0))
-         (if (pair? tokens)
-             (loop (cdr tokens)
-                   (string-move! (car tokens)
-                                 string
-                                 (string-move! prefix string index)))))
-       string)
-      ""))
-\f
+
 (define (read-lines port)
   (source->list (lambda () (read-line port))))
 
index 6b695ba19eb52693f274ca8d2a40db2893b407cf..9d7ace8123e4273b28871f856e574b03f776d234 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: rexp.scm,v 1.12 2000/04/13 20:23:29 cph Exp $
+;;; $Id: rexp.scm,v 1.13 2000/04/14 01:45:45 cph Exp $
 ;;;
 ;;; Copyright (c) 2000 Massachusetts Institute of Technology
 ;;;
                            (cdr entry)
                            (lose))))))
               (case (car rexp)
-                ((ALTERNATIVES) (separated-append (rexp-args) "\\|"))
+                ((ALTERNATIVES)
+                 (decorated-string-append "" "\\|" "" (rexp-args)))
                 ((SEQUENCE) (apply string-append (rexp-args)))
                 ((GROUP) (string-append "\\(" (rexp-arg) "\\)"))
                 ((OPTIONAL) (string-append (rexp-arg) "?"))
                 ((NOT-SYNTAX-CHAR) (string-append "\\S" (syntax-type)))
                 (else (lose))))))
          (else (lose)))))
-\f
+
 (define (case-fold-string s)
   (let ((end (string-length s)))
     (let loop ((start 0) (parts '()))
                         (re-quote-string
                          (substring s start index))
                         parts))
-           (apply string-append (reverse! parts)))))))
-
-(define (separated-append tokens separator)
-  (cond ((not (pair? tokens)) "")
-       ((not (pair? (cdr tokens))) (car tokens))
-       (else
-        (let ((string
-               (make-string
-                (let ((ns (string-length separator)))
-                  (do ((tokens (cdr tokens) (cdr tokens))
-                       (count (string-length (car tokens))
-                              (fix:+ count
-                                     (fix:+ (string-length (car tokens))
-                                            ns))))
-                      ((not (pair? tokens)) count))))))
-          (let loop
-              ((tokens (cdr tokens))
-               (index (string-move! (car tokens) string 0)))
-            (if (pair? tokens)
-                (loop (cdr tokens)
-                      (string-move! (car tokens)
-                                    string
-                                    (string-move! separator string index)))))
-          string))))
\ No newline at end of file
+           (apply string-append (reverse! parts)))))))
\ No newline at end of file
index 533214ae2d70b6ae5e60da95f2e1161392f81720..c1aa6377acbadb68e23cb6b4e62a26a66a45d09d 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: rfc822.scm,v 1.3 2000/01/14 18:09:20 cph Exp $
+;;; $Id: rfc822.scm,v 1.4 2000/04/14 01:45:47 cph Exp $
 ;;;
 ;;; Copyright (c) 1999-2000 Massachusetts Institute of Technology
 ;;;
@@ -30,7 +30,7 @@
 (define (rfc822-addresses->string addresses)
   (if (null? addresses)
       ""
-      (separated-append addresses ", ")))
+      (decorated-string-append "" ", " "" addresses)))
 
 (define (string->rfc822-addresses string)
   (let ((address-list
           (eqv? #\@ (cadr local-part))
           (let ((domain (parse-domain (cddr local-part))))
             (and domain
-                 (cons (string-append (separated-append (car local-part) ".")
-                                      "@"
-                                      (separated-append (car domain) "."))
+                 (cons (string-append
+                        (decorated-string-append "" "." ""
+                                                 (car local-part))
+                        "@"
+                        (decorated-string-append "" "." ""
+                                                 (car domain)))
                        (cdr domain)))))))
 
   (define (parse-domain tokens)
index c09fbd1d2b438f0237e8f0599e7cec8cc326fb46..01a09aabd392fa3431179ccedb69f5742859fa37 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: url.scm,v 1.6 2000/04/13 16:58:40 cph Exp $
+;;; $Id: url.scm,v 1.7 2000/04/14 01:45:49 cph Exp $
 ;;;
 ;;; Copyright (c) 2000 Massachusetts Institute of Technology
 ;;;
                                                    url:char-set:escaped)))
              (if index
                  (begin
-                   (substring-move-left! string start index encoded i)
+                   (substring-move! string start index encoded i)
                    (let ((i (fix:+ i (fix:- index start)))
                          (code (vector-8b-ref string index)))
                      (string-set! encoded i #\%)
                                   (fix:+ i 2)
                                   (string-ref digits (fix:and code #x0F)))
                      (loop (fix:+ index 1) (fix:+ i 3))))
-                 (substring-move-left! string start end
-                                       encoded i))))
+                 (substring-move! string start end encoded i))))
          encoded))))
 
 (define (url:decode-substring string start end)
              (let ((regs (re-substring-search-forward patt string start end)))
                (if regs
                    (let ((index (re-match-start-index 0 regs)))
-                     (substring-move-left! string start index decoded i)
+                     (substring-move! string start index decoded i)
                      (let ((i (fix:+ i (fix:- index start))))
                        (vector-8b-set!
                         decoded i
                                             (fix:+ index 3)
                                             16))
                        (loop (fix:+ index 3) (fix:+ i 1))))
-                   (substring-move-left! string start end decoded i))))
+                   (substring-move! string start end decoded i))))
            decoded)))))
\ No newline at end of file
index 6b695ba19eb52693f274ca8d2a40db2893b407cf..9d7ace8123e4273b28871f856e574b03f776d234 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: rexp.scm,v 1.12 2000/04/13 20:23:29 cph Exp $
+;;; $Id: rexp.scm,v 1.13 2000/04/14 01:45:45 cph Exp $
 ;;;
 ;;; Copyright (c) 2000 Massachusetts Institute of Technology
 ;;;
                            (cdr entry)
                            (lose))))))
               (case (car rexp)
-                ((ALTERNATIVES) (separated-append (rexp-args) "\\|"))
+                ((ALTERNATIVES)
+                 (decorated-string-append "" "\\|" "" (rexp-args)))
                 ((SEQUENCE) (apply string-append (rexp-args)))
                 ((GROUP) (string-append "\\(" (rexp-arg) "\\)"))
                 ((OPTIONAL) (string-append (rexp-arg) "?"))
                 ((NOT-SYNTAX-CHAR) (string-append "\\S" (syntax-type)))
                 (else (lose))))))
          (else (lose)))))
-\f
+
 (define (case-fold-string s)
   (let ((end (string-length s)))
     (let loop ((start 0) (parts '()))
                         (re-quote-string
                          (substring s start index))
                         parts))
-           (apply string-append (reverse! parts)))))))
-
-(define (separated-append tokens separator)
-  (cond ((not (pair? tokens)) "")
-       ((not (pair? (cdr tokens))) (car tokens))
-       (else
-        (let ((string
-               (make-string
-                (let ((ns (string-length separator)))
-                  (do ((tokens (cdr tokens) (cdr tokens))
-                       (count (string-length (car tokens))
-                              (fix:+ count
-                                     (fix:+ (string-length (car tokens))
-                                            ns))))
-                      ((not (pair? tokens)) count))))))
-          (let loop
-              ((tokens (cdr tokens))
-               (index (string-move! (car tokens) string 0)))
-            (if (pair? tokens)
-                (loop (cdr tokens)
-                      (string-move! (car tokens)
-                                    string
-                                    (string-move! separator string index)))))
-          string))))
\ No newline at end of file
+           (apply string-append (reverse! parts)))))))
\ No newline at end of file
index c09fbd1d2b438f0237e8f0599e7cec8cc326fb46..01a09aabd392fa3431179ccedb69f5742859fa37 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: url.scm,v 1.6 2000/04/13 16:58:40 cph Exp $
+;;; $Id: url.scm,v 1.7 2000/04/14 01:45:49 cph Exp $
 ;;;
 ;;; Copyright (c) 2000 Massachusetts Institute of Technology
 ;;;
                                                    url:char-set:escaped)))
              (if index
                  (begin
-                   (substring-move-left! string start index encoded i)
+                   (substring-move! string start index encoded i)
                    (let ((i (fix:+ i (fix:- index start)))
                          (code (vector-8b-ref string index)))
                      (string-set! encoded i #\%)
                                   (fix:+ i 2)
                                   (string-ref digits (fix:and code #x0F)))
                      (loop (fix:+ index 1) (fix:+ i 3))))
-                 (substring-move-left! string start end
-                                       encoded i))))
+                 (substring-move! string start end encoded i))))
          encoded))))
 
 (define (url:decode-substring string start end)
              (let ((regs (re-substring-search-forward patt string start end)))
                (if regs
                    (let ((index (re-match-start-index 0 regs)))
-                     (substring-move-left! string start index decoded i)
+                     (substring-move! string start index decoded i)
                      (let ((i (fix:+ i (fix:- index start))))
                        (vector-8b-set!
                         decoded i
                                             (fix:+ index 3)
                                             16))
                        (loop (fix:+ index 3) (fix:+ i 1))))
-                   (substring-move-left! string start end decoded i))))
+                   (substring-move! string start end decoded i))))
            decoded)))))
\ No newline at end of file