about summary refs log tree commit diff stats
path: root/apps/tile/main.mu
diff options
context:
space:
mode:
Diffstat (limited to 'apps/tile/main.mu')
-rw-r--r--apps/tile/main.mu44
1 files changed, 44 insertions, 0 deletions
diff --git a/apps/tile/main.mu b/apps/tile/main.mu
index 9a83ed5a..7c7065fc 100644
--- a/apps/tile/main.mu
+++ b/apps/tile/main.mu
@@ -31,4 +31,48 @@ fn main args-on-stack: (addr array addr array byte) -> exit-status/ebx: int {
 }
 
 fn interactive args: (addr array addr array byte) -> exit-status/ebx: int {
+  enable-screen-grid-mode
+  enable-keyboard-immediate-mode
+  var buf-storage: gap-buffer
+  var buf/esi: (addr gap-buffer) <- address buf-storage
+  initialize-gap-buffer buf
+  #
+  {
+    render 0, buf
+    var key/eax: byte <- read-key-from-real-keyboard
+    compare key, 0x71  # 'q'
+    break-if-=
+    var g/ecx: grapheme <- copy key
+    add-grapheme buf, g
+    loop
+  }
+  enable-keyboard-type-mode
+  enable-screen-type-mode
+  exit-status <- copy 0
+}
+
+fn render screen: (addr screen), buf: (addr gap-buffer) {
+  clear-screen screen
+  var nrows/eax: int <- copy 0
+  var ncols/ecx: int <- copy 0
+  nrows, ncols <- screen-size screen
+  var midcol/edx: int <- copy ncols
+  midcol <- shift-right 1
+  draw-vertical-line screen, 1, nrows, midcol
+  var midrow/ebx: int <- copy 0
+  {
+    var tmp/eax: int <- try-divide nrows, 3
+    midrow <- copy tmp
+  }
+  var left-col/edx: int <- copy midcol
+  left-col <- increment
+  draw-horizontal-line screen, midrow, left-col, ncols
+  # initialize cursor
+  var start-row/ebx: int <- copy midrow
+  start-row <- subtract 3
+  var start-col/edx: int <- copy left-col
+  start-col <- increment
+  move-cursor screen, start-row, start-col
+  #
+  render-gap-buffer screen, buf
 }