diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-09-16 18:54:12 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-09-16 18:54:12 -0700 |
commit | e403d15732e62fc9f1940ef14dc3b46bb11f5201 (patch) | |
tree | 81e8d387fe26be18f986fece6766c69c8ad57a2e /prototypes | |
parent | 797c93e054d210a6d595f0b57fd3d9adb9669d8c (diff) | |
download | mu-e403d15732e62fc9f1940ef14dc3b46bb11f5201.tar.gz |
6794 - cleaner interface for keyboard
So far I've been assuming that read-key only works for ascii, and that I'd need to get more sophisticated both for multi-byte utf-8 and multi-byte terminal escape codes like arrow keys. Rather to my surprise, both work fine. We just need to adjust the types to reflect this fact.
Diffstat (limited to 'prototypes')
35 files changed, 50 insertions, 49 deletions
diff --git a/prototypes/browse/10.mu b/prototypes/browse/10.mu index e4f094fb..99e712c2 100644 --- a/prototypes/browse/10.mu +++ b/prototypes/browse/10.mu @@ -13,7 +13,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { enable-keyboard-immediate-mode { render file, nrows, ncols - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/11.mu b/prototypes/browse/11.mu index e3083c09..b7d20597 100644 --- a/prototypes/browse/11.mu +++ b/prototypes/browse/11.mu @@ -11,7 +11,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { enable-keyboard-immediate-mode { render file, nrows, ncols - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/12.mu b/prototypes/browse/12.mu index 1f72c36d..185849ad 100644 --- a/prototypes/browse/12.mu +++ b/prototypes/browse/12.mu @@ -10,7 +10,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { enable-keyboard-immediate-mode { render file, nrows, ncols - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/13.mu b/prototypes/browse/13.mu index f9e76585..72cf523d 100644 --- a/prototypes/browse/13.mu +++ b/prototypes/browse/13.mu @@ -10,7 +10,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { enable-keyboard-immediate-mode { render file, nrows, ncols - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/14.mu b/prototypes/browse/14.mu index dc7ac4f7..53f452a2 100644 --- a/prototypes/browse/14.mu +++ b/prototypes/browse/14.mu @@ -8,7 +8,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { enable-keyboard-immediate-mode { render file, nrows, ncols - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/15-headers-broken.mu b/prototypes/browse/15-headers-broken.mu index d9209e4e..950fa6ed 100644 --- a/prototypes/browse/15-headers-broken.mu +++ b/prototypes/browse/15-headers-broken.mu @@ -13,7 +13,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { enable-keyboard-immediate-mode { render file, nrows, ncols - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/16-screen-state-broken.mu b/prototypes/browse/16-screen-state-broken.mu index 544bb1ca..3e18f7f4 100644 --- a/prototypes/browse/16-screen-state-broken.mu +++ b/prototypes/browse/16-screen-state-broken.mu @@ -32,7 +32,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { init-screen-position-state screen-position-state, nrows, ncols { render file, screen-position-state - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/17-file-state-broken/main.mu b/prototypes/browse/17-file-state-broken/main.mu index a7d41529..7ccd4b4b 100644 --- a/prototypes/browse/17-file-state-broken/main.mu +++ b/prototypes/browse/17-file-state-broken/main.mu @@ -19,7 +19,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { compare done?, 0 break-if-= render fs, screen-position-state - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/19/main.mu b/prototypes/browse/19/main.mu index 5470a7e2..62a603bc 100644 --- a/prototypes/browse/19/main.mu +++ b/prototypes/browse/19/main.mu @@ -13,7 +13,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { init-screen-position-state screen-position-state { render fs, screen-position-state - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard } enable-keyboard-type-mode enable-screen-type-mode diff --git a/prototypes/browse/20/main.mu b/prototypes/browse/20/main.mu index 5470a7e2..62a603bc 100644 --- a/prototypes/browse/20/main.mu +++ b/prototypes/browse/20/main.mu @@ -13,7 +13,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { init-screen-position-state screen-position-state { render fs, screen-position-state - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard } enable-keyboard-type-mode enable-screen-type-mode diff --git a/prototypes/browse/21/main.mu b/prototypes/browse/21/main.mu index 5470a7e2..62a603bc 100644 --- a/prototypes/browse/21/main.mu +++ b/prototypes/browse/21/main.mu @@ -13,7 +13,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { init-screen-position-state screen-position-state { render fs, screen-position-state - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard } enable-keyboard-type-mode enable-screen-type-mode diff --git a/prototypes/browse/22/main.mu b/prototypes/browse/22/main.mu index 5470a7e2..62a603bc 100644 --- a/prototypes/browse/22/main.mu +++ b/prototypes/browse/22/main.mu @@ -13,7 +13,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { init-screen-position-state screen-position-state { render fs, screen-position-state - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard } enable-keyboard-type-mode enable-screen-type-mode diff --git a/prototypes/browse/23-multiple-pages/main.mu b/prototypes/browse/23-multiple-pages/main.mu index c485a5c0..361e3654 100644 --- a/prototypes/browse/23-multiple-pages/main.mu +++ b/prototypes/browse/23-multiple-pages/main.mu @@ -13,7 +13,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { init-screen-position-state screen-position-state { render fs, screen-position-state - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/24-bold/main.mu b/prototypes/browse/24-bold/main.mu index aa2c07a1..162080f9 100644 --- a/prototypes/browse/24-bold/main.mu +++ b/prototypes/browse/24-bold/main.mu @@ -14,7 +14,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { normal-text { render fs, screen-position-state - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/25-soft-newlines/main.mu b/prototypes/browse/25-soft-newlines/main.mu index e19c2a64..279ef3fa 100644 --- a/prototypes/browse/25-soft-newlines/main.mu +++ b/prototypes/browse/25-soft-newlines/main.mu @@ -14,7 +14,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { normal-text { render fs, screen-position-state - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/26-headers/main.mu b/prototypes/browse/26-headers/main.mu index 0ecd3469..51af6013 100644 --- a/prototypes/browse/26-headers/main.mu +++ b/prototypes/browse/26-headers/main.mu @@ -14,7 +14,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { normal-text { render fs, screen-position-state - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/27/main.mu b/prototypes/browse/27/main.mu index c0d1dfd2..176c133e 100644 --- a/prototypes/browse/27/main.mu +++ b/prototypes/browse/27/main.mu @@ -14,7 +14,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { normal-text { render fs, screen-position-state - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/28/main.mu b/prototypes/browse/28/main.mu index 96944d40..c9e78b2c 100644 --- a/prototypes/browse/28/main.mu +++ b/prototypes/browse/28/main.mu @@ -14,7 +14,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { normal-text { render fs, screen-position-state - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/29/main.mu b/prototypes/browse/29/main.mu index ca7bcab1..08e4f3c6 100644 --- a/prototypes/browse/29/main.mu +++ b/prototypes/browse/29/main.mu @@ -14,7 +14,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { normal-text { render fs, screen-position-state - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/4-render-page.mu b/prototypes/browse/4-render-page.mu index 6e78534f..0af47b40 100644 --- a/prototypes/browse/4-render-page.mu +++ b/prototypes/browse/4-render-page.mu @@ -4,8 +4,8 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { enable-screen-grid-mode enable-keyboard-immediate-mode { - render file, 5, 5, 30, 30 - var key/eax: byte <- read-key + render file, 5, 5, 0x30, 0x30 + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/5.mu b/prototypes/browse/5.mu index 0384b96a..5952e8c9 100644 --- a/prototypes/browse/5.mu +++ b/prototypes/browse/5.mu @@ -4,8 +4,8 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { enable-screen-grid-mode enable-keyboard-immediate-mode { - render file, 5, 5, 30, 30 - var key/eax: byte <- read-key + render file, 5, 5, 0x30, 0x30 + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/6.mu b/prototypes/browse/6.mu index 17fda312..489c6938 100644 --- a/prototypes/browse/6.mu +++ b/prototypes/browse/6.mu @@ -5,7 +5,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { enable-keyboard-immediate-mode { render file, 0x20, 0x30 # nrows, ncols - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/7.mu b/prototypes/browse/7.mu index d6f31218..f306e9b5 100644 --- a/prototypes/browse/7.mu +++ b/prototypes/browse/7.mu @@ -8,7 +8,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { enable-keyboard-immediate-mode { render file, nrows, ncols - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/8-multiple-pages.mu b/prototypes/browse/8-multiple-pages.mu index 2ae2fc66..b4156cd9 100644 --- a/prototypes/browse/8-multiple-pages.mu +++ b/prototypes/browse/8-multiple-pages.mu @@ -8,7 +8,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { enable-keyboard-immediate-mode { render file, nrows, ncols - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/browse/9-bold.mu b/prototypes/browse/9-bold.mu index 121cd0bf..f0b5fded 100644 --- a/prototypes/browse/9-bold.mu +++ b/prototypes/browse/9-bold.mu @@ -8,7 +8,7 @@ fn main args: (addr array addr array byte) -> exit-status/ebx: int { enable-keyboard-immediate-mode { render file, nrows, ncols - var key/eax: byte <- read-key + var key/eax: grapheme <- read-key-from-real-keyboard compare key, 0x71 # 'q' loop-if-!= } diff --git a/prototypes/tile/1.mu b/prototypes/tile/1.mu index 4c0f8a6d..4d0a7969 100644 --- a/prototypes/tile/1.mu +++ b/prototypes/tile/1.mu @@ -14,7 +14,7 @@ fn main -> exit-status/ebx: int { move-cursor 0, 5, 5 print-string 0, "_________" enable-keyboard-immediate-mode - var dummy/eax: byte <- read-key + var dummy/eax: grapheme <- read-key-from-real-keyboard var row/eax: int <- copy 5 { compare row, 0xe # 15 @@ -24,7 +24,7 @@ fn main -> exit-status/ebx: int { sleep 0 0x5f5e100 # 100ms loop } - var dummy/eax: byte <- read-key + var dummy/eax: grapheme <- read-key-from-real-keyboard enable-keyboard-type-mode clear-screen 0 exit-status <- copy 0 diff --git a/prototypes/tile/10.mu b/prototypes/tile/10.mu index 73ce73ff..6f971b1c 100644 --- a/prototypes/tile/10.mu +++ b/prototypes/tile/10.mu @@ -63,14 +63,14 @@ fn interactive -> exit-status/ebx: int { $main:loop: { # process key { - var c/eax: byte <- read-key + var c/eax: grapheme <- read-key-from-real-keyboard compare c, 4 # ctrl-d break-if-= $main:loop process c, root, cursor } # render tree var _root-addr/eax: (addr cell) <- lookup root-handle - var root-addr/ecx: (addr cell) <- copy _root-addr + root-addr <- copy _root-addr var cursor-addr/eax: (addr cell) <- lookup *cursor render root-addr, cursor-addr loop @@ -84,7 +84,7 @@ $main:loop: { # Tree mutations ####################################################### -fn process c: byte, root: (addr handle cell), cursor: (addr handle cell) { +fn process c: grapheme, root: (addr handle cell), cursor: (addr handle cell) { $process:body: { # if c == 'h' move cursor to its parent if possible { diff --git a/prototypes/tile/11.mu b/prototypes/tile/11.mu index 8d3593e3..82de9fda 100644 --- a/prototypes/tile/11.mu +++ b/prototypes/tile/11.mu @@ -63,7 +63,7 @@ fn interactive -> exit-status/ebx: int { $main:loop: { # process key { - var c/eax: byte <- read-key + var c/eax: grapheme <- read-key-from-real-keyboard compare c, 4 # ctrl-d break-if-= $main:loop process c, root, cursor @@ -84,7 +84,7 @@ $main:loop: { # Tree mutations ####################################################### -fn process c: byte, root: (addr handle cell), cursor: (addr handle cell) { +fn process c: grapheme, root: (addr handle cell), cursor: (addr handle cell) { $process:body: { # if c == 'h' move cursor to its parent if possible { diff --git a/prototypes/tile/2.mu b/prototypes/tile/2.mu index 79b9ed99..6339d61e 100644 --- a/prototypes/tile/2.mu +++ b/prototypes/tile/2.mu @@ -32,7 +32,7 @@ fn main -> exit-status/ebx: int { # wait for a key { enable-keyboard-immediate-mode - var dummy/eax: byte <- read-key + var dummy/eax: grapheme <- read-key-from-real-keyboard enable-keyboard-type-mode } # clean up diff --git a/prototypes/tile/4.mu b/prototypes/tile/4.mu index bd2bd77c..6e2a57b7 100644 --- a/prototypes/tile/4.mu +++ b/prototypes/tile/4.mu @@ -9,7 +9,7 @@ fn main -> exit-status/ebx: int { clear-screen 0 enable-keyboard-immediate-mode - var dummy/eax: byte <- read-key + var dummy/eax: grapheme <- read-key-from-real-keyboard draw-box 5, 5, 0x23, 0x23 # 35, 35 sleep 0 0x5f5e100 # 100ms sleep 0 0x5f5e100 # 100ms @@ -17,7 +17,7 @@ fn main -> exit-status/ebx: int { sleep 0 0x5f5e100 # 100ms sleep 0 0x5f5e100 # 100ms draw-box 5, 5, 0x23, 0xaf # 35, 175 - var dummy/eax: byte <- read-key + var dummy/eax: grapheme <- read-key-from-real-keyboard enable-keyboard-type-mode clear-screen 0 exit-status <- copy 0 diff --git a/prototypes/tile/5.mu b/prototypes/tile/5.mu index a49c4922..58d94636 100644 --- a/prototypes/tile/5.mu +++ b/prototypes/tile/5.mu @@ -31,7 +31,7 @@ fn main -> exit-status/ebx: int { $main:loop: { # process key { - var c/eax: byte <- read-key + var c/eax: grapheme <- read-key-from-real-keyboard compare c, 4 # ctrl-d break-if-= $main:loop process c, root, cursor @@ -50,7 +50,7 @@ $main:loop: { # Tree mutations ####################################################### -fn process c: byte, root: (addr handle cell), cursor: (addr handle cell) { +fn process c: grapheme, root: (addr handle cell), cursor: (addr handle cell) { var c1/eax: (addr handle cell) <- copy cursor var c2/eax: (addr cell) <- lookup *c1 create-child c2 diff --git a/prototypes/tile/6.mu b/prototypes/tile/6.mu index ee7ef8c0..be95dead 100644 --- a/prototypes/tile/6.mu +++ b/prototypes/tile/6.mu @@ -58,7 +58,7 @@ fn interactive -> exit-status/ebx: int { $main:loop: { # process key { - var c/eax: byte <- read-key + var c/eax: grapheme <- read-key-from-real-keyboard compare c, 4 # ctrl-d break-if-= $main:loop process c, root, cursor @@ -77,7 +77,7 @@ $main:loop: { # Tree mutations ####################################################### -fn process c: byte, root: (addr handle cell), cursor: (addr handle cell) { +fn process c: grapheme, root: (addr handle cell), cursor: (addr handle cell) { # increase depth by 1 var c1/ecx: (addr handle cell) <- copy cursor var c2/eax: (addr cell) <- lookup *c1 diff --git a/prototypes/tile/7.mu b/prototypes/tile/7.mu index 92b92b34..e2e7aff0 100644 --- a/prototypes/tile/7.mu +++ b/prototypes/tile/7.mu @@ -62,7 +62,7 @@ fn interactive -> exit-status/ebx: int { $main:loop: { # process key { - var c/eax: byte <- read-key + var c/eax: grapheme <- read-key-from-real-keyboard compare c, 4 # ctrl-d break-if-= $main:loop process c, root, cursor @@ -81,7 +81,7 @@ $main:loop: { # Tree mutations ####################################################### -fn process c: byte, root: (addr handle cell), cursor: (addr handle cell) { +fn process c: grapheme, root: (addr handle cell), cursor: (addr handle cell) { var c1/ecx: (addr handle cell) <- copy cursor var c2/eax: (addr cell) <- lookup *c1 create-child c2 diff --git a/prototypes/tile/8.mu b/prototypes/tile/8.mu index c64a1577..526df803 100644 --- a/prototypes/tile/8.mu +++ b/prototypes/tile/8.mu @@ -62,7 +62,7 @@ fn interactive -> exit-status/ebx: int { $main:loop: { # process key { - var c/eax: byte <- read-key + var c/eax: grapheme <- read-key-from-real-keyboard compare c, 4 # ctrl-d break-if-= $main:loop process c, root, cursor @@ -81,7 +81,7 @@ $main:loop: { # Tree mutations ####################################################### -fn process c: byte, root: (addr handle cell), cursor: (addr handle cell) { +fn process c: grapheme, root: (addr handle cell), cursor: (addr handle cell) { var c1/ecx: (addr handle cell) <- copy cursor var c2/eax: (addr cell) <- lookup *c1 create-child c2 diff --git a/prototypes/tile/9.mu b/prototypes/tile/9.mu index 69360b2e..ab143e25 100644 --- a/prototypes/tile/9.mu +++ b/prototypes/tile/9.mu @@ -60,14 +60,15 @@ fn interactive -> exit-status/ebx: int { $main:loop: { # process key { - var c/eax: byte <- read-key + var c/eax: grapheme <- read-key-from-real-keyboard compare c, 4 # ctrl-d break-if-= $main:loop process c, root, cursor } # render tree - root-addr <- lookup root-handle - cursor-addr <- lookup *cursor + var _root-addr/eax: (addr cell) <- lookup root-handle + root-addr <- copy _root-addr + var cursor-addr/eax: (addr cell) <- lookup *cursor render root-addr, cursor-addr loop } @@ -80,7 +81,7 @@ $main:loop: { # Tree mutations ####################################################### -fn process c: byte, root: (addr handle cell), cursor: (addr handle cell) { +fn process c: grapheme, root: (addr handle cell), cursor: (addr handle cell) { $process:body: { # if c == 'h' move cursor to its parent if possible { |