; entab and detab
(define (detab n file-name)
(with-input-from-file file-name
(lambda ()
(let loop ((c (read-char)) (col 1))
(when (not (eof-object? c))
(cond ((char=? c #\tab)
(display #\space)
(if (zero? (modulo col n))
(loop (read-char) (+ col 1))
(loop c (+ col 1))))
((char=? c #\newline)
(display c)
(loop (read-char) 1))
(else (display c)
(loop (read-char) (+ col 1)))))))))
(define (entab n file-name)
(with-input-from-file file-name
(lambda ()
(let loop ((c (read-char)) (col 1) (newcol 1))
(cond ((eof-object? c)
(when (< col newcol)
(display #\space)
(loop c (+ col 1) newcol)))
((char=? c #\space)
(if (zero? (modulo newcol n))
(begin (display #\tab)
(loop (read-char) (+ newcol 1) (+ newcol 1)))
(loop (read-char) col (+ newcol 1))))
((< col newcol)
(display #\space)
(loop c (+ col 1) newcol))
((char=? c #\newline)
(display c)
(loop (read-char) 1 1))
(else (display c)
(loop (read-char) (+ col 1) (+ newcol 1))))))))