about summary refs log tree commit diff stats
path: root/apps/tile/value.mu
diff options
context:
space:
mode:
Diffstat (limited to 'apps/tile/value.mu')
-rw-r--r--apps/tile/value.mu24
1 files changed, 24 insertions, 0 deletions
diff --git a/apps/tile/value.mu b/apps/tile/value.mu
index 3dfa2855..e5c39cff 100644
--- a/apps/tile/value.mu
+++ b/apps/tile/value.mu
@@ -316,3 +316,27 @@ fn array-width _a: (addr array value) -> _/eax: int {
   # spaces like other value types
   return result
 }
+
+fn value-height _v: (addr value) -> _/eax: int {
+  var v/esi: (addr value) <- copy _v
+  var type/eax: (addr int) <- get v, type
+  {
+    compare *type, 3  # file handle
+    break-if-!=
+    # TODO: visualizing file handles
+    return 1
+  }
+  {
+    compare *type, 4  # screen
+    break-if-!=
+    var screen-ah/eax: (addr handle screen) <- get v, screen-data
+    var screen/eax: (addr screen) <- lookup *screen-ah
+    compare screen, 0
+    break-if-=
+    var nrows/ecx: (addr int) <- get screen, num-rows
+    var result/eax: int <- copy *nrows
+    result <- add 2  # top and bottom border
+    return result
+  }
+  return 1
+}