about summary refs log tree commit diff stats
path: root/500fake-screen.mu
diff options
context:
space:
mode:
Diffstat (limited to '500fake-screen.mu')
-rw-r--r--500fake-screen.mu19
1 files changed, 19 insertions, 0 deletions
diff --git a/500fake-screen.mu b/500fake-screen.mu
index a2e9ae40..1d13f2cf 100644
--- a/500fake-screen.mu
+++ b/500fake-screen.mu
@@ -28,6 +28,7 @@ type screen-cell {
   data: grapheme
   color: int
   background-color: int
+  unused?: boolean
 }
 
 fn initialize-screen _screen: (addr screen), width: int, height: int, pixel-graphics?: boolean {
@@ -424,6 +425,24 @@ fn clear-rect-on-real-screen xmin: int, ymin: int, xmax: int, ymax: int, backgro
   }
 }
 
+fn screen-cell-unused-at? _screen: (addr screen), x: int, y: int -> _/eax: boolean {
+  var screen/esi: (addr screen) <- copy _screen
+  var index/ecx: int <- screen-cell-index screen, x, y
+  var result/eax: boolean <- screen-cell-unused-at-index? screen, index
+  return result
+}
+
+fn screen-cell-unused-at-index? _screen: (addr screen), _index: int -> _/eax: boolean {
+  var screen/esi: (addr screen) <- copy _screen
+  var data-ah/eax: (addr handle array screen-cell) <- get screen, data
+  var data/eax: (addr array screen-cell) <- lookup *data-ah
+  var index/ecx: int <- copy _index
+  var offset/ecx: (offset screen-cell) <- compute-offset data, index
+  var cell/eax: (addr screen-cell) <- index data, offset
+  var src/eax: (addr boolean) <- get cell, unused?
+  return *src
+}
+
 fn screen-grapheme-at _screen: (addr screen), x: int, y: int -> _/eax: grapheme {
   var screen/esi: (addr screen) <- copy _screen
   var index/ecx: int <- screen-cell-index screen, x, y