56 lines
1.5 KiB
Scheme
56 lines
1.5 KiB
Scheme
(define-library (picrin main)
|
|
(import (scheme base)
|
|
(scheme read)
|
|
(scheme write)
|
|
(scheme process-context)
|
|
(scheme load)
|
|
(scheme eval)
|
|
(picrin repl))
|
|
|
|
(define (print-help)
|
|
(display "picrin scheme\n")
|
|
(display "\n")
|
|
(display "Usage: picrin [options] [file]\n")
|
|
(display "\n")
|
|
(display "Options:\n")
|
|
(display " -e [program] run one liner script\n")
|
|
(display " -l [file] load the file then enter repl\n")
|
|
(display " -h or --help show this help\n"))
|
|
|
|
(define (getopt)
|
|
(let ((args (cdr (command-line))))
|
|
(if (null? args)
|
|
(values 'repl #f)
|
|
(case (string->symbol (car args))
|
|
((-h --help)
|
|
(print-help)
|
|
(exit 1))
|
|
((-e)
|
|
(values 'line (cadr args)))
|
|
((-l)
|
|
(values 'load (cadr args)))
|
|
(else
|
|
(values 'file (car args)))))))
|
|
|
|
(define (exec-file filename)
|
|
(load filename))
|
|
|
|
(define (exec-line str)
|
|
(call-with-port (open-input-string str)
|
|
(lambda (in)
|
|
(let loop ((expr (read in)))
|
|
(unless (eof-object? expr)
|
|
(eval expr '(picrin user))
|
|
(loop (read in)))))))
|
|
|
|
(define (main)
|
|
(call-with-values getopt
|
|
(lambda (type dat)
|
|
(case type
|
|
((repl) (repl))
|
|
((load) (load dat) (repl))
|
|
((line) (exec-line dat))
|
|
((file) (exec-file dat))))))
|
|
|
|
(export main))
|