add main.scm
This commit is contained in:
parent
bc0b1aa6d6
commit
db38f13600
|
@ -0,0 +1,89 @@
|
|||
(define-library (picrin user)
|
||||
(import (scheme base)
|
||||
(scheme load)
|
||||
(scheme process-context)
|
||||
(scheme read)
|
||||
(scheme write)
|
||||
(scheme file)
|
||||
(scheme inexact)
|
||||
(scheme cxr)
|
||||
(scheme lazy)
|
||||
(scheme time)
|
||||
(picrin macro)))
|
||||
|
||||
(define-library (picrin repl)
|
||||
(import (scheme base)
|
||||
(scheme read)
|
||||
(scheme file)
|
||||
(scheme write)
|
||||
(scheme eval)
|
||||
(scheme process-context))
|
||||
|
||||
(define (file->string file)
|
||||
(with-input-from-file file
|
||||
(lambda ()
|
||||
(let loop ((line (read-line)))
|
||||
(if (eof-object? line)
|
||||
""
|
||||
(string-append line (loop (read-line))))))))
|
||||
|
||||
(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 " -h show this help\n"))
|
||||
|
||||
(define (getopt)
|
||||
(let ((args (cdr (command-line))))
|
||||
(if (null? args)
|
||||
#f
|
||||
(case (car args)
|
||||
(("-h")
|
||||
(print-help)
|
||||
(exit 0))
|
||||
(("-e")
|
||||
(cadr args))
|
||||
(else
|
||||
(file->string (car args)))))))
|
||||
|
||||
(define (print obj)
|
||||
(write obj)
|
||||
(newline))
|
||||
|
||||
(define (main-loop)
|
||||
(display "> ")
|
||||
(let ((expr (read)))
|
||||
(if (eof-object? expr)
|
||||
(begin
|
||||
(newline)
|
||||
(exit 0))
|
||||
(begin
|
||||
(call/cc
|
||||
(lambda (leave)
|
||||
(with-exception-handler
|
||||
(lambda (condition)
|
||||
(display (error-object-message condition))
|
||||
(newline)
|
||||
(leave))
|
||||
(lambda ()
|
||||
(print (eval expr '(picrin user)))))))
|
||||
(main-loop)))))
|
||||
|
||||
(define (repl)
|
||||
(let ((program (getopt)))
|
||||
(parameterize
|
||||
((current-input-port
|
||||
(if program
|
||||
(current-input-port)
|
||||
(open-input-string program))))
|
||||
(main-loop))))
|
||||
|
||||
(export repl))
|
||||
|
||||
(import (picrin repl))
|
||||
|
||||
(repl)
|
||||
|
Loading…
Reference in New Issue