about summary refs log tree commit diff stats
path: root/sandbox/005-sandbox.mu
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/005-sandbox.mu')
-rw-r--r--sandbox/005-sandbox.mu92
1 files changed, 36 insertions, 56 deletions
diff --git a/sandbox/005-sandbox.mu b/sandbox/005-sandbox.mu
index 91bbc1f0..bbd3f8f8 100644
--- a/sandbox/005-sandbox.mu
+++ b/sandbox/005-sandbox.mu
@@ -114,12 +114,11 @@ after <global-keypress> [
   }
 ]
 
-recipe run-sandboxes [
+recipe run-sandboxes env:address:programming-environment-data, screen:address:screen -> errors-found?:boolean, env:address:programming-environment-data, screen:address:screen [
   local-scope
-  env:address:programming-environment-data <- next-ingredient
-  screen:address:screen <- next-ingredient
-  stop?:boolean, env, screen <- update-recipes env, screen
-  reply-if stop?, 1/errors-found, env/same-as-ingredient:0, screen/same-as-ingredient:1
+  load-ingredients
+  errors-found?:boolean, env, screen <- update-recipes env, screen
+  reply-if errors-found?
   # check contents of editor
   current-sandbox:address:editor-data <- get *env, current-sandbox:offset
   {
@@ -136,9 +135,9 @@ recipe run-sandboxes [
     *next <- copy *dest
     *dest <- copy new-sandbox
     # clear sandbox editor
-    init:address:address:duplex-list <- get-address *current-sandbox, data:offset
+    init:address:address:duplex-list:character <- get-address *current-sandbox, data:offset
     *init <- push-duplex 167/§, 0/tail
-    top-of-screen:address:address:duplex-list <- get-address *current-sandbox, top-of-screen:offset
+    top-of-screen:address:address:duplex-list:character <- get-address *current-sandbox, top-of-screen:offset
     *top-of-screen <- copy *init
   }
   # save all sandboxes before running, just in case we die when running
@@ -147,7 +146,7 @@ recipe run-sandboxes [
   curr:address:sandbox-data <- get *env, sandbox:offset
   {
     break-unless curr
-    update-sandbox curr, env
+    curr <- update-sandbox curr, env
     curr <- get *curr, next-sandbox:offset
     loop
   }
@@ -155,39 +154,35 @@ recipe run-sandboxes [
 ]
 
 # load code from recipes.mu
-# replaced in a later layer
-recipe update-recipes [
+# replaced in a later layer (whereupon errors-found? will actually be set)
+recipe update-recipes env:address:programming-environment-data, screen:address:screen -> errors-found?:boolean, env:address:programming-environment-data, screen:address:screen [
   local-scope
-  env:address:programming-environment-data <- next-ingredient
-  screen:address:screen <- next-ingredient
+  load-ingredients
   in:address:array:character <- restore [recipes.mu]  # newlayer: persistence
   reload in
-  reply 0/no-errors-found, env/same-as-ingredient:0, screen/same-as-ingredient:1
+  errors-found? <- copy 0/false
 ]
 
 # replaced in a later layer
-recipe update-sandbox [
+recipe update-sandbox sandbox:address:sandbox-data -> sandbox:address:sandbox-data [
   local-scope
-  sandbox:address:sandbox-data <- next-ingredient
+  load-ingredients
   data:address:array:character <- get *sandbox, data:offset
   response:address:address:array:character <- get-address *sandbox, response:offset
   fake-screen:address:address:screen <- get-address *sandbox, screen:offset
   *response, _, *fake-screen <- run-interactive data
 ]
 
-recipe update-status [
+recipe update-status screen:address:screen, msg:address:array:character, color:number -> screen:address:screen [
   local-scope
-  screen:address:screen <- next-ingredient
-  msg:address:array:character <- next-ingredient
-  color:number <- next-ingredient
+  load-ingredients
   screen <- move-cursor screen, 0, 2
   screen <- print-string screen, msg, color, 238/grey/background
-  reply screen/same-as-ingredient:0
 ]
 
-recipe save-sandboxes [
+recipe save-sandboxes env:address:programming-environment-data [
   local-scope
-  env:address:programming-environment-data <- next-ingredient
+  load-ingredients
   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 '>&'
@@ -211,10 +206,9 @@ recipe save-sandboxes [
   }
 ]
 
-recipe! render-sandbox-side [
+recipe! render-sandbox-side screen:address:screen, env:address:programming-environment-data -> screen:address:screen [
   local-scope
-  screen:address:screen <- next-ingredient
-  env:address:programming-environment-data <- next-ingredient
+  load-ingredients
   trace 11, [app], [render sandbox side]
   current-sandbox:address:editor-data <- get *env, current-sandbox:offset
   left:number <- get *current-sandbox, left:offset
@@ -226,21 +220,16 @@ recipe! render-sandbox-side [
   sandbox:address:sandbox-data <- get *env, sandbox:offset
   row, screen <- render-sandboxes screen, sandbox, left, right, row, env
   clear-rest-of-screen screen, row, left, left, right
-  reply screen/same-as-ingredient:0
 ]
 
-recipe render-sandboxes [
+recipe render-sandboxes screen:address:screen, sandbox:address:sandbox-data, left:number, right:number, row:number -> row:number, screen:address:screen [
   local-scope
-  screen:address:screen <- next-ingredient
-  sandbox:address:sandbox-data <- next-ingredient
-  left:number <- next-ingredient
-  right:number <- next-ingredient
-  row:number <- next-ingredient
+  load-ingredients
   env:address:programming-environment-data, _/optional <- next-ingredient
-  reply-unless sandbox, row/same-as-ingredient:4, screen/same-as-ingredient:0
+  reply-unless sandbox
   screen-height:number <- screen-height screen
   at-bottom?:boolean <- greater-or-equal row, screen-height
-  reply-if at-bottom?:boolean, row/same-as-ingredient:4, screen/same-as-ingredient:0
+  reply-if at-bottom?:boolean
   # render sandbox menu
   row <- add row, 1
   screen <- move-cursor screen, row, left
@@ -280,13 +269,12 @@ recipe render-sandboxes [
   # draw next sandbox
   next-sandbox:address:sandbox-data <- get *sandbox, next-sandbox:offset
   row, screen <- render-sandboxes screen, next-sandbox, left, right, row
-  reply row/same-as-ingredient:4, screen/same-as-ingredient:0
 ]
 
 # assumes programming environment has no sandboxes; restores them from previous session
-recipe restore-sandboxes [
+recipe restore-sandboxes env:address:programming-environment-data -> env:address:programming-environment-data [
   local-scope
-  env:address:programming-environment-data <- next-ingredient
+  load-ingredients
   # read all scenarios, pushing them to end of a list of scenarios
   suffix:address:array:character <- new [.out]
   idx:number <- copy 0
@@ -312,29 +300,23 @@ recipe restore-sandboxes [
     curr <- get-address **curr, next-sandbox:offset
     loop
   }
-  reply env/same-as-ingredient:0
 ]
 
-# row, screen <- render-screen screen:address:screen, sandbox-screen:address:screen, left:number, right:number, row:number
 # print the fake sandbox screen to 'screen' with appropriate delimiters
 # leave cursor at start of next line
-recipe render-screen [
+recipe render-screen screen:address:screen, sandbox-screen:address:screen, left:number, right:number, row:number -> row:number, screen:address:screen [
   local-scope
-  screen:address:screen <- next-ingredient
-  s:address:screen <- next-ingredient
-  left:number <- next-ingredient
-  right:number <- next-ingredient
-  row:number <- next-ingredient
-  reply-unless s, row/same-as-ingredient:4, screen/same-as-ingredient:0
+  load-ingredients
+  reply-unless sandbox-screen
   # print 'screen:'
   header:address:array:character <- new [screen:]
   row <- render-string screen, header, left, right, 245/grey, row
   screen <- move-cursor screen, row, left
-  # start printing s
+  # start printing sandbox-screen
   column:number <- copy left
-  s-width:number <- screen-width s
-  s-height:number <- screen-height s
-  buf:address:array:screen-cell <- get *s, data:offset
+  s-width:number <- screen-width sandbox-screen
+  s-height:number <- screen-height sandbox-screen
+  buf:address:array:screen-cell <- get *sandbox-screen, data:offset
   stop-printing:number <- add left, s-width, 3
   max-column:number <- min stop-printing, right
   i:number <- copy 0
@@ -384,7 +366,6 @@ recipe render-screen [
     row <- add row, 1
     loop
   }
-  reply row/same-as-ingredient:4, screen/same-as-ingredient:0
 ]
 
 scenario run-instruction-manages-screen-per-sandbox [
@@ -418,11 +399,11 @@ scenario run-instruction-manages-screen-per-sandbox [
   ]
 ]
 
-recipe editor-contents [
+recipe editor-contents editor:address:editor-data -> result:address:array:character [
   local-scope
-  editor:address:editor-data <- next-ingredient
+  load-ingredients
   buf:address:buffer <- new-buffer 80
-  curr:address:duplex-list <- get *editor, data:offset
+  curr:address:duplex-list:character <- get *editor, data:offset
   # skip § sentinel
   assert curr, [editor without data is illegal; must have at least a sentinel]
   curr <- next-duplex curr
@@ -434,8 +415,7 @@ recipe editor-contents [
     curr <- next-duplex curr
     loop
   }
-  result:address:array:character <- buffer-to-array buf
-  reply result
+  result <- buffer-to-array buf
 ]
 
 scenario editor-provides-edited-contents [
rtik.com> 2020-03-11 17:21:59 -0700 6123 - runtime helper for initializing arrays' href='/akkartik/mu/commit/039debug.cc?h=hlt&id=28746b36660093dcbf53667f4f67320d278359ea'>28746b36 ^
8ba17d83 ^



a2593892 ^

8ba17d83 ^
a2593892 ^
8ba17d83 ^





02684e8d ^







































1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175