Listing 3. Unix->DOS text file converter

#!/usr/bin/scm -f

;;; load in the line-oriented I/O package
(require `line-i/o)
(require `common-list-functions)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(define (main . argv)
  ;; read & write lines until EOF is reached
  (do ((line (read-line) (read-line)))
      ((eof-object? line) #t)
    (display (chomp line))
    (display #\return)
    (display #\newline)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; return #t if the character is either a carriage
;; return or a newline
;;
(define (lineterm? char)
  (case char
    ((#\newline #\return) #t)
    (else                 #f)))

[start block emphasis]

;; remove all carriage returns and newlines from
;; the end of a string and return the new string
;;
(define (chomp string)
  (list->string (remove-if lineterm? (string->list string))))

[end block emphasis]

(main)
(exit)