about summary refs log tree commit diff stats
path: root/shell/global.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-04-10 20:09:18 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-04-10 20:09:18 -0700
commit6fa86619b286cae8a1a990ce5ac845d2b80428ca (patch)
tree1dd3d23b69154715341d9ff3d367f9b1cb4d24a1 /shell/global.mu
parent17f77da27d807ca4489a92a23506c88fb60bd89e (diff)
downloadmu-6fa86619b286cae8a1a990ce5ac845d2b80428ca.tar.gz
shell: tweaks for fake screens
- make them more discoverable
- clear them between commands
Diffstat (limited to 'shell/global.mu')
-rw-r--r--shell/global.mu28
1 files changed, 28 insertions, 0 deletions
diff --git a/shell/global.mu b/shell/global.mu
index 0e7038e9..a3ec33a0 100644
--- a/shell/global.mu
+++ b/shell/global.mu
@@ -668,3 +668,31 @@ fn apply-print _args-ah: (addr handle cell), out: (addr handle cell), env-h: (ha
   # return what was printed
   copy-object second-ah, out
 }
+
+fn clear-screen-var _globals: (addr global-table) {
+  var globals/esi: (addr global-table) <- copy _globals
+  var screen-literal-storage: (stream byte 8)
+  var screen-literal/eax: (addr stream byte) <- address screen-literal-storage
+  write screen-literal, "screen"
+  var screen-index/ecx: int <- find-symbol-in-globals globals, screen-literal
+  compare screen-index, -1/not-found
+  {
+    break-if-!=
+    return
+  }
+  var global-data-ah/eax: (addr handle array global) <- get globals, data
+  var global-data/eax: (addr array global) <- lookup *global-data-ah
+  var screen-offset/ecx: (offset global) <- compute-offset global-data, screen-index
+  var screen-global/eax: (addr global) <- index global-data, screen-offset
+  var screen-cell-ah/eax: (addr handle cell) <- get screen-global, value
+  var screen-cell/eax: (addr cell) <- lookup *screen-cell-ah
+  var screen-cell-type/ecx: (addr int) <- get screen-cell, type
+  compare *screen-cell-type, 5/screen
+  {
+    break-if-=
+    return
+  }
+  var screen-ah/eax: (addr handle screen) <- get screen-cell, screen-data
+  var screen/eax: (addr screen) <- lookup *screen-ah
+  clear-screen screen
+}