anchor.diff:            NEWLINE parameter.
   NEWLINE:  (member :crlf :cr :lf) ; the default is *NEWLINE*.
   "
  -  (loop
  -    :with newline = (output-newline newline)
  -    :with bytes = (make-array
  -                   (+ (- end start)
  -                      (if (eq newline :crlf)
  -                          (count #\newline string :start start :end end)
  -                          0))
  -                   :element-type '(unsigned-byte 8))
  -    :with b = -1
  -    :for i :from start :below end
  -    :for ch = (aref string i)
  -    :do (if (char= ch #\newline)
  -            (ecase newline
  -              ((:crlf) (setf (aref bytes (incf b)) cr
  -                             (aref bytes (incf b)) lf))
  -              ((:cr)   (setf (aref bytes (incf b)) cr))
  -              ((:lf)   (setf (aref bytes (incf b)) lf)))
  -            (setf (aref bytes (incf b)) (ascii-code ch)))
  -    :finally (return bytes)))
  +  (replace-ascii-bytes (make-array
  +                        (+ (- end start)
  +                           (if (eq newline :crlf)
  +                               (count #\newline string :start start :end end)
  +                               0))
  +                        :element-type '(unsigned-byte 8))
  +                       string :newline newline :start2 start :end2 end))
   
   
   (defun ascii-dispatch-macro (stream sub-char argument)
  
positive.code: START:    index of the first byte to be converted.
  END:      index beyond the last byte to be converted.
  "
    (setf newline (input-newline newline))
    (loop
       :with len = (- end start)
       :with result = (make-array len :element-type 'character
                                  :adjustable t :fill-pointer 0)
       :with i = start
       :while (< i end)
       :do (let ((code (aref bytes i)))
             (if (<= sp code 126)
                 (vector-push (aref *ascii-characters* (- code sp)) result)
                 (case code
                   ((#.cr)
                    (ecase newline
                      ((:crlf) (if (and (< (1+ i) len) (= lf (aref bytes (1+ i))))
                                   (progn (incf i)
                                          (vector-push #\newline result))
                                   (ascii-error code)))
                      ((:any)  (if (and (< (1+ i) len) (= lf (aref bytes (1+ i))))
                                   (incf i)
                                   (vector-push #\newline result)))
                      ((:cr)   (vector-push #\newline result))
                      ((:lf)   (ascii-error code))))
                   ((#.lf)
                    (ecase newline
                      ((:any  :lf) (vector-push #\newline result))
                      ((:crlf :cr) (ascii-error code))))
                   (otherwise (ascii-error code))))
             (incf i))
       :finally (return result)))
  
  
  (defun ascii-bytes (string &key (newline *newline*) (start 0) (end (length string)))
  
negative.code: ;;;;AUTHORS
  ;;;;    <PJB> Pascal J. Bourguignon <pjb@informatimago.com>
  ;;;;MODIFICATIONS
  ;;;;    2021-05-14 <PJB> Added REPLACE-ASCII-BYTES and REPLACE-ASCII-CHARACTERS.
  ;;;;    2012-04-20 <PJB> Added conditions;
  ;;;;                     Added :start and :stop to ASCII-STRING and ASCII-BYTES.
  ;;;;                     Added ASCII-CONTROL-CODE-P and ASCII-PRINTABLE-CODE-P.
  