#!/usr/bin/gosh

;; Escapes to be replaced inside command, if present
;; ~f full name
;; ~b base name
;; ~e file extension
;; ~d directory name
;; When no escapes are present, ~f is appended at the end

(define (usage)
  (print "Usage: map FUNCTION FILE...")
  (print "specials: ~[bdef]")
  (exit))

(define (main args)
  (when (< (length args) 3)
    (usage))
  (let ((command (cadr args))
        (files (cddr args)))
    (format #t "(:command ~s :files ~s)\n" command files)
    (dolist (file files)
      (let ((cmd (string-copy command)))
        (rxmatch-if (#/~[bdef]/ cmd) (#f)
          (begin
            (print (sys-basename file))
            (set! cmd (regexp-replace-all #/~b/ cmd (sys-basename file)))
            (set! cmd (regexp-replace-all #/~d/ cmd (sys-dirname file)))
            (set! cmd (regexp-replace-all #/~e/ cmd "extension"))
            (set! cmd (regexp-replace-all #/~f/ cmd file)))
          (begin
            (print "no escapes, default append")))
        (format #t "(sys-system ~s)\n" cmd)))))
