about summary refs log tree commit diff stats
path: root/edit/006-sandbox-edit.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2016-04-22 18:35:10 -0700
committerKartik K. Agaram <vc@akkartik.com>2016-04-22 21:49:29 -0700
commitea5e7fd4cb5757589cf3cb52439a3d432517bc7a (patch)
tree13aa8596e6caedc3e22543be659ff968eeee2890 /edit/006-sandbox-edit.mu
parent537e7812c998b468142b16bde8901d8405dbc690 (diff)
downloadmu-ea5e7fd4cb5757589cf3cb52439a3d432517bc7a.tar.gz
2853 - purge get-address from edit/ app
Phew!
Diffstat (limited to 'edit/006-sandbox-edit.mu')
-rw-r--r--edit/006-sandbox-edit.mu55
1 files changed, 34 insertions, 21 deletions
diff --git a/edit/006-sandbox-edit.mu b/edit/006-sandbox-edit.mu
index 7354d60b..c5537851 100644
--- a/edit/006-sandbox-edit.mu
+++ b/edit/006-sandbox-edit.mu
@@ -25,7 +25,7 @@ recipe foo [
     .                    ┊━━━━━━━━━━━━━━━━━━━.
     .                    ┊                   .
   ]
-  # click somewhere on the sandbox
+  # click somewhere in the first row of the sandbox
   assume-console [
     left-click 3, 30
   ]
@@ -82,11 +82,10 @@ after <global-touch> [
     break-unless sandbox
     text:address:shared: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
   }
@@ -103,29 +102,43 @@ def empty-editor? editor:address:shared:editor-data -> result:boolean [
 def extract-sandbox env:address:shared:programming-environment-data, click-row:number -> result:address:shared:sandbox-data, env:address:shared: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:shared: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:shared: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:shared:sandbox-data <- copy curr-sandbox
+    curr-sandbox <- get *curr-sandbox, next-sandbox:offset
+    {
+      next-sandbox:address:shared: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 [