diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2021-02-20 22:37:44 -0800 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2021-02-20 22:37:44 -0800 |
commit | 684c09620304457825981eaaaf7af8af2dc64d15 (patch) | |
tree | a89c5527329184811b429313fd7641b2e1a9f8b9 /baremetal/shell/sandbox.mu | |
parent | c7c8eb0cb46bf7ec7f825bfd040fc94e8ddd4e83 (diff) | |
download | mu-684c09620304457825981eaaaf7af8af2dc64d15.tar.gz |
7761 - baremetal/shell: read input from keyboard
Diffstat (limited to 'baremetal/shell/sandbox.mu')
-rw-r--r-- | baremetal/shell/sandbox.mu | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/baremetal/shell/sandbox.mu b/baremetal/shell/sandbox.mu new file mode 100644 index 00000000..e360b9e6 --- /dev/null +++ b/baremetal/shell/sandbox.mu @@ -0,0 +1,47 @@ +type sandbox { + data: (handle gap-buffer) +} + +fn initialize-sandbox _self: (addr sandbox) { + var self/esi: (addr sandbox) <- copy _self + var data-ah/eax: (addr handle gap-buffer) <- get self, data + allocate data-ah + var data/eax: (addr gap-buffer) <- lookup *data-ah + initialize-gap-buffer data, 0x1000/4KB +} + +## some helpers for tests + +fn initialize-sandbox-with _self: (addr sandbox), s: (addr array byte) { + var self/esi: (addr sandbox) <- copy _self + var data-ah/eax: (addr handle gap-buffer) <- get self, data + allocate data-ah + var data/eax: (addr gap-buffer) <- lookup *data-ah + initialize-gap-buffer-with data, s +} + +fn allocate-sandbox-with _out: (addr handle sandbox), s: (addr array byte) { + var out/eax: (addr handle sandbox) <- copy _out + allocate out + var out-addr/eax: (addr sandbox) <- lookup *out + initialize-sandbox-with out-addr, s +} + +fn add-grapheme-to-sandbox _self: (addr sandbox), c: grapheme { + var self/esi: (addr sandbox) <- copy _self + var data-ah/eax: (addr handle gap-buffer) <- get self, data + var data/eax: (addr gap-buffer) <- lookup *data-ah + add-grapheme-at-gap data, c +} + +fn render-sandbox screen: (addr screen), _self: (addr sandbox), x: int, y: int { + var self/esi: (addr sandbox) <- copy _self + var data-ah/eax: (addr handle gap-buffer) <- get self, data + var data/eax: (addr gap-buffer) <- lookup *data-ah + var dummy/eax: int <- render-gap-buffer screen, data, x, y, 1/true +} + +fn edit-sandbox self: (addr sandbox), key: byte { + var g/edx: grapheme <- copy key + add-grapheme-to-sandbox self, g +} |