no title added by anonymous on Fri Oct 20 11:13:01 2017

(use srfi-1 miscmacros)

(define (progressbar val max width)
  (let* ((filled "▮")
          (blank "▯")
          (scale (/ val max))
          (filled-bars (inexact->exact (round (* scale width)))))
    (repeat filled-bars (display filled))
    (repeat (- width filled-bars) (display blank))
    (printf " ~a%~%" (inexact->exact (round (* 100 scale))))))

(let* ((nargs (length (argv)))
         (prog (car (argv)))
         (args (cdr (argv)))
         (conv (map string->number args)))
  (when (or (any not conv) (< (length (argv)) 3))
        (printf "~a - print a progressbar~%~a\tVALUE MAXVAL [WIDTH]~%" (car (argv)) (car (argv)))
        (exit 1))
  (progressbar (car conv) (cadr conv) (if (= nargs 4) (caddr conv) 50)))


;; → ./pb 300 365 20
;; ▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮▯▯▯▯ 82%