1(define prompt "")2(define silent? #f)34(define (err msg)5 (let ((port (current-error-port)))6 (display "edward: " port)7 (display msg port)8 (newline port)))910(define prompt-opt11 (option12 '(#\p "prompt") #t #f13 (lambda (o n x vals)14 (set! prompt x)15 vals)))1617(define silent-opt18 (option19 '(#\s "silent") #f #f20 (lambda (o n x vals)21 (set! silent? #t)22 vals)))2324(define (parse-args args flags)25 (reverse26 (args-fold27 args28 flags29 (lambda (o n x vals)30 (error "unrecognized option" n))31 cons32 '())))3334(define (run-editor filename)35 (let ((editor (make-text-editor exec-edit filename prompt silent?)))36 (editor-start editor (parse-cmd))))3738;;> Entry point of the edward text editor. This function parses the39;;> provided command line arguments `args` and starts the40;;> read-eval-print loop. This command should therefore only be called41;;> after registering all editor commands.4243(define (edward-main . args)44 (let* ((flags (list prompt-opt silent-opt))45 (argv (if (null? args) (command-line) args))46 (files (cdr (parse-args argv flags))))47 (if prompt48 (case (length files)49 ((1) (run-editor (car files)))50 ((0) (run-editor ""))51 (else (err "specify one file or no files")))52 (err "missing prompt option argument"))))