diff options
-rw-r--r-- | edit.mu | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/edit.mu b/edit.mu index e4a7f340..fedd9f9f 100644 --- a/edit.mu +++ b/edit.mu @@ -2774,7 +2774,6 @@ recipe run-sandboxes [ local-scope env:address:programming-environment-data <- next-ingredient recipes:address:editor-data <- get *env, recipes:offset - current-sandbox:address:editor-data <- get *env, current-sandbox:offset # copy code from recipe editor, persist, load into mu, save any warnings in:address:array:character <- editor-contents recipes save [recipes.mu], in @@ -2783,6 +2782,7 @@ recipe run-sandboxes [ # if recipe editor has errors, stop reply-if *recipe-warnings # check contents of right editor (sandbox) + current-sandbox:address:editor-data <- get *env, current-sandbox:offset { sandbox-contents:address:array:character <- editor-contents current-sandbox break-unless sandbox-contents @@ -2801,6 +2801,26 @@ recipe run-sandboxes [ *init <- push-duplex 167/§, 0/tail } # save all sandboxes before running, just in case we die when running + save-sandboxes env + # run all sandboxes + curr:address:sandbox-data <- get *env, sandbox:offset + { + break-unless curr + data <- get-address *curr, data:offset + response:address:address:array:character <- get-address *curr, response:offset + warnings:address:address:array:character <- get-address *curr, warnings:offset + fake-screen:address:address:screen <- get-address *curr, screen:offset + *response, *warnings, *fake-screen <- run-interactive *data +#? $print *warnings, [ ], **warnings, 10/newline + curr <- get *curr, next-sandbox:offset + loop + } +] + +recipe save-sandboxes [ + local-scope + env:address:programming-environment-data <- next-ingredient + current-sandbox:address:editor-data <- get *env, current-sandbox:offset # first clear previous versions, in case we deleted some sandbox $system [rm lesson/[0-9]* >/dev/null 2>/dev/null] # some shells can't handle '>&' curr:address:sandbox-data <- get *env, sandbox:offset @@ -2808,9 +2828,9 @@ recipe run-sandboxes [ idx:number <- copy 0 { break-unless curr - data <- get-address *curr, data:offset + data:address:array:character <- get *curr, data:offset filename:address:array:character <- integer-to-decimal-string idx - save filename, *data + save filename, data { expected-response:address:array:character <- get *curr, expected-response:offset break-unless expected-response @@ -2821,19 +2841,6 @@ recipe run-sandboxes [ curr <- get *curr, next-sandbox:offset loop } - # run all sandboxes - curr <- get *env, sandbox:offset - { - break-unless curr - data <- get-address *curr, data:offset - response:address:address:array:character <- get-address *curr, response:offset - warnings:address:address:array:character <- get-address *curr, warnings:offset - fake-screen:address:address:screen <- get-address *curr, screen:offset - *response, *warnings, *fake-screen <- run-interactive *data -#? $print *warnings, [ ], **warnings, 10/newline - curr <- get *curr, next-sandbox:offset - loop - } ] recipe render-sandbox-side [ @@ -3529,8 +3536,9 @@ after +global-touch [ # identify the sandbox whose output is being clicked on sandbox:address:sandbox-data <- find-click-in-sandbox-output env, click-row break-unless sandbox - # toggle its expected-response + # toggle its expected-response, and save session sandbox <- toggle-expected-response sandbox + save-sandboxes env screen <- render-sandbox-side screen, env, 1/clear # no change in cursor show-screen screen |