#! /bin/sh
# -*- Scheme -*-

## Emilio C. Lopes <eclig@gmx.net>, 2005-10-10

exec scsh -e main -s "$0" "$@"

!#

(define (grep-port regexp port printer)
  (do ((line (read-line port) (read-line port))
       (line-number 1 (+ line-number 1)))
      ((eof-object? line) 'done)
    (if (regexp-search? regexp line)
        (printer line-number line))))

(define (grep regexp file)
  (call-with-input-file file
    (lambda (port)
      (grep-port regexp port (lambda (lineno line) (format #t "~a:~a:~a~%" file lineno line))))))

(define (main prog+args)
  (let ((nargs (length (cdr prog+args))))
    (cond  
     ((= nargs 0)
      (error (format #f "scsh-grep: expecting one or more arguments, got ~a" nargs)))
     ((= nargs 1)
      (grep-port (posix-string->regexp (cadr prog+args))
                 (current-input-port)
                 (lambda (lineno line) (format #t "~a:~a~%" lineno line))))
     (else
      (for-each (lambda (file) (grep (posix-string->regexp (cadr prog+args)) file))
                (cddr prog+args))))))
