diff options
author | David Thompson <dthompson2@worcester.edu> | 2014-01-09 20:22:51 -0500 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2014-01-09 20:22:51 -0500 |
commit | 39b49c97421578332832832f3ca4a18c9816cefb (patch) | |
tree | 86eefa091bfb86bfb2f7996cd12ec6a9c6596c63 /2d/repl | |
parent | 38c45af24c23d039af07a113725210072293754d (diff) |
Run REPL even when game is paused.
* 2d/repl/repl.scm (add-to-repl-mvar): New procedure.
(poll-interval): New variable.
(flush-repl): Schedule in paused-agenda.
Diffstat (limited to '2d/repl')
-rw-r--r-- | 2d/repl/repl.scm | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/2d/repl/repl.scm b/2d/repl/repl.scm index 6b0a69b..dbdabd3 100644 --- a/2d/repl/repl.scm +++ b/2d/repl/repl.scm @@ -152,13 +152,26 @@ INPUT, OUTPUT, and ERROR ports." (with-fluids ((*repl-stack* stack)) (thunk)))))))))) +(define (add-to-repl-mvar thunk-ports-and-stack) + ;; Insert thunk into repl-mvar. The game loop will schedule it and + ;; run it on the next tick. We also pass along the + ;; input/output/error ports and the REPL stack. + (put-mvar repl-input-mvar thunk-ports-and-stack) + ;; Read the results back from game-mvar. Will block until results + ;; are available. + (take-mvar repl-output-mvar)) + (define (flush-repl) "Execute a thunk from the REPL is there is one." (unless (mvar-empty? repl-input-mvar) (and-let* ((vals (try-take-mvar repl-input-mvar))) (apply run-repl-thunk vals)))) -(schedule-interval flush-repl 5) +(define poll-interval 5) + +(schedule-interval flush-repl poll-interval) +(with-agenda paused-agenda + (schedule-interval flush-repl poll-interval)) ;;; ;;; The repl @@ -224,27 +237,17 @@ INPUT, OUTPUT, and ERROR ports." (abort-on-error "parsing expression" (repl-parse repl exp)))))) (run-hook before-eval-hook exp) - ;; Insert thunk into repl-mvar. The - ;; game loop will schedule it and run - ;; it on the next tick. We also pass - ;; along the input/output/error ports - ;; and the REPL stack. - (put-mvar - repl-input-mvar + (add-to-repl-mvar (list (lambda () - (call-with-error-handling - (lambda () - (with-stack-and-prompt thunk)) - #:on-error (repl-option-ref repl 'on-error))) + (call-with-error-handling + (lambda () + (with-stack-and-prompt thunk)) + #:on-error (repl-option-ref repl 'on-error))) (current-input-port) (current-output-port) (current-error-port) - (fluid-ref *repl-stack*))) - ;; Read the results back from - ;; game-mvar. Will block until results - ;; are available. - (take-mvar repl-output-mvar)) + (fluid-ref *repl-stack*)))) (lambda (k) (values)))) (lambda l (for-each (lambda (v) |