diff options
Diffstat (limited to 'apps/tile/main.mu')
-rw-r--r-- | apps/tile/main.mu | 44 |
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 } |