From a5d2fdc17bd27e9e85aa277427719560f83a7eb7 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Mon, 22 Jul 2024 08:44:46 -0700 Subject: [PATCH] Add CTRL-C keyboard interrupt --- images/apple/DRAWL.po | Bin 143360 -> 143360 bytes src/lisp/drawl.pla | 23 ++++++++++++++++++++--- src/lisp/s-expr.pla | 6 +++++- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/images/apple/DRAWL.po b/images/apple/DRAWL.po index 3ef18f9aacd8ca881d1faae8e116860f8d06bd84..5e3ec729b0fd9f503f5dc9ea7c14e9cdabd6f95a 100644 GIT binary patch delta 7208 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 delta 7383 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 = @natv_printer new_sym("QUIT")=>natv = @natv_bye parse_cmdline +except(@break_repl) while not quit - putln; print_expr(eval_quote(readfn())) + putln; print_expr(eval_quote(readfn(), @hookfn)) loop putln done diff --git a/src/lisp/s-expr.pla b/src/lisp/s-expr.pla index 2811331..5ef1099 100644 --- a/src/lisp/s-expr.pla +++ b/src/lisp/s-expr.pla @@ -50,6 +50,8 @@ struc t_array word arraymem end +var hook_eval = NULL // Installable hook for eval_expr() + byte trace = FALSE const fmt_fp = FPSTR_FIXED|FPSTR_STRIP|FPSTR_FLEX @@ -862,6 +864,7 @@ end export def eval_expr(expr)#1 var alist_enter, curl, expr_car + if hook_eval; hook_eval(); fin if gc_pull > GC_TRIGGER; gc; fin alist_enter = assoc_list curl = NULL // Current lambda @@ -952,7 +955,8 @@ export def eval_expr(expr)#1 return expr end -export def eval_quote(expr)#1 +export def eval_quote(expr, hook)#1 + hook_eval = hook push_sweep_stack(assoc_list) assoc_list = NULL push_sweep_stack(expr) // Keep expr from being GC'ed