about summary refs log tree commit diff stats
path: root/shell
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-05-31 13:00:41 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-05-31 15:18:25 -0700
commit7640a77c5f60cb76af33b69be995e1f4e10675a9 (patch)
tree43bd1a0f681d97154b4a85e4083b55a80fd371a1 /shell
parent0c0541d709a25c748902a1f8f95e52bb5aa9aced (diff)
downloadmu-7640a77c5f60cb76af33b69be995e1f4e10675a9.tar.gz
interrupt repl on keypress
Diffstat (limited to 'shell')
-rw-r--r--shell/evaluate.mu8
1 files changed, 7 insertions, 1 deletions
diff --git a/shell/evaluate.mu b/shell/evaluate.mu
index 6e2f5ad7..68ec10fe 100644
--- a/shell/evaluate.mu
+++ b/shell/evaluate.mu
@@ -2,7 +2,9 @@
 # we never modify `_in-ah` or `env`
 # ignore args past 'trace' on a first reading; they're for the environment not the language
 # 'call-number' is just for showing intermediate progress; this is a _slow_ interpreter
-# side-effect: prints to real screen if not in a test (screen-cell != 0)
+# side-effects if not in a test (screen-cell != 0):
+#   prints intermediate states of the screen to real screen
+#   stops if a keypress is encountered
 fn evaluate _in-ah: (addr handle cell), _out-ah: (addr handle cell), env-h: (handle cell), globals: (addr global-table), trace: (addr trace), screen-cell: (addr handle cell), keyboard-cell: (addr handle cell), call-number: int {
   # stack overflow?   # disable when enabling Really-debug-print
   check-stack
@@ -34,6 +36,10 @@ fn evaluate _in-ah: (addr handle cell), _out-ah: (addr handle cell), env-h: (han
     compare screen-obj, 0
     break-if-=
     var y/ecx: int <- render-screen 0/screen, screen-obj, 0x70/xmin, 1/ymin
+    var key/eax: byte <- read-key 0/keyboard
+    compare key, 0
+    break-if-=
+    error trace, "key pressed; interrupting..."
   }
   # errors? skip
   {