From 32b8fac2799ac7cec613e84a3eb9c009141b6a3a Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Mon, 25 Apr 2016 22:27:19 -0700 Subject: 2866 --- html/edit/006-sandbox-edit.mu.html | 121 ++++++++++++++++++++----------------- 1 file changed, 67 insertions(+), 54 deletions(-) (limited to 'html/edit/006-sandbox-edit.mu.html') diff --git a/html/edit/006-sandbox-edit.mu.html b/html/edit/006-sandbox-edit.mu.html index faf615af..85684b0e 100644 --- a/html/edit/006-sandbox-edit.mu.html +++ b/html/edit/006-sandbox-edit.mu.html @@ -38,17 +38,17 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color trace-until 100/app # trace too long assume-screen 40/width, 10/height # basic recipe - 1:address:shared:array:character <- new [ + 1:address:array:character <- new [ recipe foo [ reply 4 ]] # run it - 2:address:shared:array:character <- new [foo] + 2:address:array:character <- new [foo] assume-console [ press F4 ] - 3:address:shared:programming-environment-data <- new-programming-environment screen:address:shared:screen, 1:address:shared:array:character, 2:address:shared:array:character - event-loop screen:address:shared:screen, console:address:shared:console, 3:address:shared:programming-environment-data + 3:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character, 2:address:array:character + event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data screen-should-contain [ . run (F4) . . ┊ . @@ -59,12 +59,12 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color . ┊━━━━━━━━━━━━━━━━━━━. . ┊ . ] - # click somewhere on the sandbox + # click somewhere in the first row of the sandbox assume-console [ left-click 3, 30 ] run [ - event-loop screen:address:shared:screen, console:address:shared:console, 3:address:shared:programming-environment-data + event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data ] # it pops back into editor screen-should-contain [ @@ -82,7 +82,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color type [0] ] run [ - event-loop screen:address:shared:screen, console:address:shared:console, 3:address:shared:programming-environment-data + event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data ] screen-should-contain [ . run (F4) . @@ -100,81 +100,94 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color # below sandbox editor? pop appropriate sandbox contents back into sandbox editor { sandbox-left-margin:number <- get *current-sandbox, left:offset - click-column:number <- get *t, column:offset + click-column:number <- get t, column:offset on-sandbox-side?:boolean <- greater-or-equal click-column, sandbox-left-margin break-unless on-sandbox-side? - first-sandbox:address:shared:sandbox-data <- get *env, sandbox:offset + first-sandbox:address:sandbox-data <- get *env, sandbox:offset break-unless first-sandbox first-sandbox-begins:number <- get *first-sandbox, starting-row-on-screen:offset - click-row:number <- get *t, row:offset + click-row:number <- get t, row:offset below-sandbox-editor?:boolean <- greater-or-equal click-row, first-sandbox-begins break-unless below-sandbox-editor? empty-sandbox-editor?:boolean <- empty-editor? current-sandbox break-unless empty-sandbox-editor? # don't clobber existing contents # identify the sandbox to edit and remove it from the sandbox list - sandbox:address:shared:sandbox-data <- extract-sandbox env, click-row + sandbox:address:sandbox-data <- extract-sandbox env, click-row break-unless sandbox - text:address:shared:array:character <- get *sandbox, data:offset + text:address:array:character <- get *sandbox, data:offset current-sandbox <- insert-text current-sandbox, text - render-from:address:number <- get-address *env, render-from:offset - *render-from <- copy -1 + *env <- put *env, render-from:offset, -1 hide-screen screen screen <- render-sandbox-side screen, env - screen <- update-cursor screen, recipes, current-sandbox, *sandbox-in-focus?, env + screen <- update-cursor screen, recipes, current-sandbox, sandbox-in-focus?, env show-screen screen loop +next-event:label } ] -def empty-editor? editor:address:shared:editor-data -> result:boolean [ +def empty-editor? editor:address:editor-data -> result:boolean [ local-scope load-ingredients - head:address:shared:duplex-list:character <- get *editor, data:offset - first:address:shared:duplex-list:character <- next head + head:address:duplex-list:character <- get *editor, data:offset + first:address:duplex-list:character <- next head result <- not first ] -def extract-sandbox env:address:shared:programming-environment-data, click-row:number -> result:address:shared:sandbox-data, env:address:shared:programming-environment-data [ +def extract-sandbox env:address:programming-environment-data, click-row:number -> result:address:sandbox-data, env:address:programming-environment-data [ local-scope load-ingredients - sandbox:address:address:shared:sandbox-data <- get-address *env, sandbox:offset - start:number <- get **sandbox, starting-row-on-screen:offset + curr-sandbox:address:sandbox-data <- get *env, sandbox:offset + start:number <- get *curr-sandbox, starting-row-on-screen:offset in-editor?:boolean <- lesser-than click-row, start return-if in-editor?, 0 + first-sandbox?:boolean <- equal click-row, start { - next-sandbox:address:shared:sandbox-data <- get **sandbox, next-sandbox:offset - break-unless next-sandbox - # if click-row < sandbox.next-sandbox.starting-row-on-screen, break - next-start:number <- get *next-sandbox, starting-row-on-screen:offset - found?:boolean <- lesser-than click-row, next-start - break-if found? - sandbox <- get-address **sandbox, next-sandbox:offset - loop + # first sandbox? pop + break-unless first-sandbox? + next-sandbox:address:sandbox-data <- get *curr-sandbox, next-sandbox:offset + *env <- put *env, sandbox:offset, next-sandbox } - # snip sandbox out of its list - result <- copy *sandbox - *sandbox <- copy next-sandbox + { + # not first sandbox? + break-if first-sandbox? + prev-sandbox:address:sandbox-data <- copy curr-sandbox + curr-sandbox <- get *curr-sandbox, next-sandbox:offset + { + next-sandbox:address:sandbox-data <- get *curr-sandbox, next-sandbox:offset + break-unless next-sandbox + # if click-row < sandbox.next-sandbox.starting-row-on-screen, break + next-start:number <- get *next-sandbox, starting-row-on-screen:offset + found?:boolean <- lesser-than click-row, next-start + break-if found? + prev-sandbox <- copy curr-sandbox + curr-sandbox <- copy next-sandbox + loop + } + # snip sandbox out of its list + *prev-sandbox <- put *prev-sandbox, next-sandbox:offset, next-sandbox + } + result <- copy curr-sandbox # update sandbox count - sandbox-count:address:number <- get-address *env, number-of-sandboxes:offset - *sandbox-count <- subtract *sandbox-count, 1 + sandbox-count:number <- get *env, number-of-sandboxes:offset + sandbox-count <- subtract sandbox-count, 1 + *env <- put *env, number-of-sandboxes:offset, sandbox-count # position cursor in sandbox editor - sandbox-in-focus?:address:boolean <- get-address *env, sandbox-in-focus?:offset - *sandbox-in-focus? <- copy 1/true + *env <- put *env, sandbox-in-focus?:offset, 1/true ] scenario sandbox-with-print-can-be-edited [ trace-until 100/app # trace too long assume-screen 100/width, 20/height # left editor is empty - 1:address:shared:array:character <- new [] + 1:address:array:character <- new [] # right editor contains an instruction - 2:address:shared:array:character <- new [print-integer screen, 4] - 3:address:shared:programming-environment-data <- new-programming-environment screen:address:shared:screen, 1:address:shared:array:character, 2:address:shared:array:character + 2:address:array:character <- new [print-integer screen, 4] + 3:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character, 2:address:array:character # run the sandbox assume-console [ press F4 ] - event-loop screen:address:shared:screen, console:address:shared:console, 3:address:shared:programming-environment-data + event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data screen-should-contain [ . run (F4) . . ┊ . @@ -195,7 +208,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color left-click 3, 70 ] run [ - event-loop screen:address:shared:screen, console:address:shared:console, 3:address:shared:programming-environment-data + event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data ] screen-should-contain [ . run (F4) . @@ -210,10 +223,10 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color trace-until 100/app # trace too long assume-screen 30/width, 10/height # initialize environment - 1:address:shared:array:character <- new [] - 2:address:shared:array:character <- new [] - 3:address:shared:programming-environment-data <- new-programming-environment screen:address:shared:screen, 1:address:shared:array:character, 2:address:shared:array:character - render-all screen, 3:address:shared:programming-environment-data + 1:address:array:character <- new [] + 2:address:array:character <- new [] + 3:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character, 2:address:array:character + render-all screen, 3:address:programming-environment-data # create 2 sandboxes and scroll to second assume-console [ press ctrl-n @@ -224,7 +237,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color press down-arrow press down-arrow ] - event-loop screen:address:shared:screen, console:address:shared:console, 3:address:shared:programming-environment-data + event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data screen-should-contain [ . . . ┊━━━━━━━━━━━━━━. @@ -239,7 +252,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color left-click 2, 20 ] run [ - event-loop screen:address:shared:screen, console:address:shared:console, 3:address:shared:programming-environment-data + event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data ] # second sandbox shows in editor; scroll resets to display first sandbox screen-should-contain [ @@ -258,10 +271,10 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color trace-until 100/app # trace too long assume-screen 30/width, 10/height # initialize environment - 1:address:shared:array:character <- new [] - 2:address:shared:array:character <- new [] - 3:address:shared:programming-environment-data <- new-programming-environment screen:address:shared:screen, 1:address:shared:array:character, 2:address:shared:array:character - render-all screen, 3:address:shared:programming-environment-data + 1:address:array:character <- new [] + 2:address:array:character <- new [] + 3:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character, 2:address:array:character + render-all screen, 3:address:programming-environment-data # create 2 sandboxes assume-console [ press ctrl-n @@ -270,7 +283,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color type [add 1, 1] press F4 ] - event-loop screen:address:shared:screen, console:address:shared:console, 3:address:shared:programming-environment-data + event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data screen-should-contain [ . . . ┊ . @@ -287,7 +300,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color press F4 ] run [ - event-loop screen:address:shared:screen, console:address:shared:console, 3:address:shared:programming-environment-data + event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data ] # no change in contents screen-should-contain [ @@ -307,7 +320,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color press down-arrow ] run [ - event-loop screen:address:shared:screen, console:address:shared:console, 3:address:shared:programming-environment-data + event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data ] # screen should show just final sandbox screen-should-contain [ -- cgit 1.4.1-2-gfad0