;;; upcase ;;; ;;; Usage: guile -s upcase INFILE OUTSTEM ;;; ;;; Description: Upcase INFILE to both OUTSTEM-unsafe, OUTSTEM-safe{1,2}. (use-modules (ttn-do mogrify)) (define (upcase-file i o) ;; unsafe: Output fails silently if ‘display’ does short ‘write’. ;; This occurs for some Guile versions, sometimes. (let ((o (string-append o "-unsafe"))) (call-with-output-file o (lambda (o) (display (string-upcase (editing-buffer (find-file-read-only i) (buffer-string))) o)))) ;; safe1: As long as you have the memory. :-D (let ((o (string-append o "-safe1"))) (editing-buffer (find-file i) (let ((new (string-upcase (buffer-string)))) (delete-region (point-min) (point-max)) (insert new)) (write-to-port (open-output-file o)))) ;; safe2: Like safe1, but w/ a more functional style. (let ((o (string-append o "-safe2"))) (editing-buffer (string-upcase (editing-buffer (find-file-read-only i) (buffer-string))) (write-to-port (open-output-file o)))) ;; Add more shouted mumblings here. ) (apply upcase-file (cdr (command-line))) ;;; upcase ends here