about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--081print.mu20
-rw-r--r--edit/002-typing.mu7
-rw-r--r--edit/004-programming-environment.mu14
-rw-r--r--edit/005-sandbox.mu23
4 files changed, 58 insertions, 6 deletions
diff --git a/081print.mu b/081print.mu
index d795e617..1d3bf8dc 100644
--- a/081print.mu
+++ b/081print.mu
@@ -101,15 +101,27 @@ def print screen:&:screen, c:char -> screen:&:screen [
   row:num <- get *screen, cursor-row:offset
   row <- round row
   legal?:bool <- greater-or-equal row, 0
-  return-unless legal?
+  {
+    break-if legal?
+    row <- copy 0
+  }
   legal? <- lesser-than row, height
-  return-unless legal?
+  {
+    break-if legal?
+    row <- subtract height, 1
+  }
   column:num <- get *screen, cursor-column:offset
   column <- round column
   legal? <- greater-or-equal column, 0
-  return-unless legal?
+  {
+    break-if legal?
+    column <- copy 0
+  }
   legal? <- lesser-than column, width
-  return-unless legal?
+  {
+    break-if legal?
+    column <- subtract width, 1
+  }
 #?     $print [print-character (], row, [, ], column, [): ], c, 10/newline
   # special-case: newline
   {
diff --git a/edit/002-typing.mu b/edit/002-typing.mu
index 4f704f0d..d5120f2f 100644
--- a/edit/002-typing.mu
+++ b/edit/002-typing.mu
@@ -266,10 +266,17 @@ def editor-render screen:&:screen, editor:&:editor -> screen:&:screen, editor:&:
   left:num <- get *editor, left:offset
   right:num <- get *editor, right:offset
   row:num, column:num <- render screen, editor
+  screen-height:num <- screen-height screen
+  space-left?:bool <- lesser-than row, screen-height
+  return-unless space-left?
   clear-line-until screen, right
   row <- add row, 1
+  space-left?:bool <- lesser-than row, screen-height
+  return-unless space-left?
   draw-horizontal screen, row, left, right, 9480/horizontal-dotted
   row <- add row, 1
+  space-left?:bool <- lesser-than row, screen-height
+  return-unless space-left?
   clear-screen-from screen, row, left, left, right
 ]
 
diff --git a/edit/004-programming-environment.mu b/edit/004-programming-environment.mu
index 435495f4..5a1e84c7 100644
--- a/edit/004-programming-environment.mu
+++ b/edit/004-programming-environment.mu
@@ -418,12 +418,19 @@ def render-recipes screen:&:screen, env:&:environment, {render-editor: (recipe (
   left:num <- get *recipes, left:offset
   right:num <- get *recipes, right:offset
   row:num, column:num, screen <- call render-editor, screen, recipes
+  screen-height:num <- screen-height screen
+  space-left?:bool <- lesser-than row, screen-height
+  return-unless space-left?
   clear-line-until screen, right
   row <- add row, 1
+  space-left? <- lesser-than row, screen-height
+  return-unless space-left?
   <render-recipe-components-end>
   # draw dotted line after recipes
   draw-horizontal screen, row, left, right, 9480/horizontal-dotted
   row <- add row, 1
+  space-left? <- lesser-than row, screen-height
+  return-unless space-left?
   clear-screen-from screen, row, left, left, right
 ]
 
@@ -435,11 +442,18 @@ def render-sandbox-side screen:&:screen, env:&:environment, {render-editor: (rec
   left:num <- get *current-sandbox, left:offset
   right:num <- get *current-sandbox, right:offset
   row:num, column:num, screen, current-sandbox <- call render-editor, screen, current-sandbox
+  screen-height:num <- screen-height screen
+  space-left?:bool <- lesser-than row, screen-height
+  return-unless space-left?
   clear-line-until screen, right
   row <- add row, 1
+  space-left? <- lesser-than row, screen-height
+  return-unless space-left?
   # draw solid line after code (you'll see why in later layers)
   draw-horizontal screen, row, left, right
   row <- add row, 1
+  space-left? <- lesser-than row, screen-height
+  return-unless space-left?
   clear-screen-from screen, row, left, left, right
 ]
 
diff --git a/edit/005-sandbox.mu b/edit/005-sandbox.mu
index 2e16e05b..fed2c806 100644
--- a/edit/005-sandbox.mu
+++ b/edit/005-sandbox.mu
@@ -245,19 +245,26 @@ def! render-sandbox-side screen:&:screen, env:&:environment, {render-editor: (re
   row:num, column:num <- copy 1, 0
   left:num <- get *current-sandbox, left:offset
   right:num <- get *current-sandbox, right:offset
+  screen-height:num <- screen-height screen
   # render sandbox editor
   render-from:num <- get *env, render-from:offset
   {
     render-current-sandbox?:bool <- equal render-from, -1
     break-unless render-current-sandbox?
     row, column, screen, current-sandbox <- call render-editor, screen, current-sandbox
+    space-left?:bool <- lesser-than row, screen-height
+    return-unless space-left?
     clear-screen-from screen, row, column, left, right
     row <- add row, 1
+    space-left? <- lesser-than row, screen-height
+    return-unless space-left?
   }
   # render sandboxes
   draw-horizontal screen, row, left, right
   sandbox:&:sandbox <- get *env, sandbox:offset
   row, screen <- render-sandboxes screen, sandbox, left, right, row, render-from
+  space-left? <- lesser-than row, screen-height
+  return-unless space-left?
   clear-rest-of-screen screen, row, left, right
 ]
 
@@ -273,16 +280,22 @@ def render-sandboxes screen:&:screen, sandbox:&:sandbox, left:num, right:num, ro
     break-if hidden?
     # render sandbox menu
     row <- add row, 1
+    space-left?:bool <- lesser-than row, screen-height
+    return-unless space-left?
     screen <- move-cursor screen, row, left
     screen <- render-sandbox-menu screen, idx, left, right
     # save menu row so we can detect clicks to it later
     *sandbox <- put *sandbox, starting-row-on-screen:offset, row
     # render sandbox contents
     row <- add row, 1
+    space-left? <- lesser-than row, screen-height
+    return-unless space-left?
     screen <- move-cursor screen, row, left
     sandbox-data:text <- get *sandbox, data:offset
     row, screen <- render-code screen, sandbox-data, left, right, row
     *sandbox <- put *sandbox, code-ending-row-on-screen:offset, row
+    space-left? <- lesser-than row, screen-height
+    return-unless space-left?
     # render sandbox warnings, screen or response, in that order
     sandbox-response:text <- get *sandbox, response:offset
     <render-sandbox-results>
@@ -298,8 +311,8 @@ def render-sandboxes screen:&:screen, sandbox:&:sandbox, left:num, right:num, ro
       row, screen <- render-text screen, sandbox-response, left, right, 245/grey, row
     }
     +render-sandbox-end
-    at-bottom?:bool <- greater-or-equal row, screen-height
-    return-if at-bottom?
+    space-left? <- lesser-than row, screen-height
+    return-unless space-left?
     # draw solid line after sandbox
     draw-horizontal screen, row, left, right
   }
@@ -311,6 +324,8 @@ def render-sandboxes screen:&:screen, sandbox:&:sandbox, left:num, right:num, ro
     <end-render-sandbox-reset-hidden>
   }
   # draw next sandbox
+  space-left? <- lesser-than row, screen-height
+  return-unless space-left?
   next-sandbox:&:sandbox <- get *sandbox, next-sandbox:offset
   next-idx:num <- add idx, 1
   row, screen <- render-sandboxes screen, next-sandbox, left, right, row, render-from, next-idx
@@ -411,6 +426,8 @@ def render-text screen:&:screen, s:text, left:num, right:num, color:num, row:num
     column <- add column, 1
     loop
   }
+  space-left?:bool <- lesser-than row, screen-height
+  return-unless space-left?
   was-at-left?:bool <- equal column, left
   clear-line-until screen, right
   {
@@ -491,6 +508,8 @@ def render-code screen:&:screen, s:text, left:num, right:num, row:num -> row:num
     column <- add column, 1
     loop
   }
+  space-left?:bool <- lesser-than row, screen-height
+  return-unless space-left?
   was-at-left?:bool <- equal column, left
   clear-line-until screen, right
   {