;; loader for running brood under snot. ;; at this point, the current environment already contains all snot functionality (cd "~/brood") ;; let's say this is required (require (file "brood/pic18.ss")) (require (file "brood/catlib.ss")) (require (file "brood/vm.ss")) ;; symbol-table-words (define *state* '()) (define *stack* '()) (define (update! code) (let ((state/stack (run-source code (cons *state* *stack*)))) (set! *state* (car state/stack)) (set! *stack* (cdr state/stack)))) (define (init! statefile) (set! *stack* '()) (set! *state* (car (run-source '(badnop-init) `(,statefile))))) (define (make-brood-completer find) (lambda (str) (snot-filter-complete str (map symbol->string (symbol-table-words find))))) ;; target language evaluators (define cat-complete (make-brood-completer 'cat-find)) (define (cat-eval-string str) str) ;; FIXME (define (cat-eval-print-string str) (update! `(,str lex-line try-badnop))) (define (live-complete str) '()) (define (live-eval-string str) str) ;; FIXME (define (live-eval-print-string str) (update! `(,str forth->list swap '(interpret-target) try-badnop))) (define compile-complete (make-brood-completer 'macro-find)) (define (compile-eval-string str) str) ;; FIXME (define (compile-eval-print-string str) (update! `(,str swap '(string>asm) try-badnop))) (snot-register-language 'cat "cat> " cat-eval-string cat-eval-print-string cat-complete) (snot-register-language 'live "> " live-eval-string live-eval-print-string live-complete) (snot-register-language 'compile ">> " compile-eval-string compile-eval-print-string compile-complete) ;; DEBUG (define (purrr18) (init! "prj/purrr18/monitor.state")) (define (catkit) (init! "prj/CATkit/monitor.state"))