7762 - baremetal/shell: backspace
The text buffer can now shrink, which means we need to be careful to erase the old location of the cursor. Just clear screen before render each time. Which means we need to be more efficient with our rendering.
This commit is contained in:
parent
684c096203
commit
cf5c8bc6b0
|
@ -7,11 +7,13 @@ fn main {
|
|||
initialize-sandbox sandbox
|
||||
{
|
||||
render-sandbox 0/screen, sandbox, 2/x, 2/y
|
||||
var key/eax: byte <- read-key 0/keyboard
|
||||
compare key, 0
|
||||
loop-if-=
|
||||
# no way to quit right now; just reboot
|
||||
edit-sandbox sandbox, key
|
||||
{
|
||||
var key/eax: byte <- read-key 0/keyboard
|
||||
compare key, 0
|
||||
loop-if-=
|
||||
# no way to quit right now; just reboot
|
||||
edit-sandbox sandbox, key
|
||||
}
|
||||
loop
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,15 @@ fn add-grapheme-to-sandbox _self: (addr sandbox), c: grapheme {
|
|||
add-grapheme-at-gap data, c
|
||||
}
|
||||
|
||||
fn delete-grapheme-before-cursor _self: (addr sandbox) {
|
||||
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
|
||||
delete-before-gap data
|
||||
}
|
||||
|
||||
fn render-sandbox screen: (addr screen), _self: (addr sandbox), x: int, y: int {
|
||||
clear-screen screen
|
||||
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
|
||||
|
@ -43,5 +51,11 @@ fn render-sandbox screen: (addr screen), _self: (addr sandbox), x: int, y: int {
|
|||
|
||||
fn edit-sandbox self: (addr sandbox), key: byte {
|
||||
var g/edx: grapheme <- copy key
|
||||
{
|
||||
compare g, 8/backspace
|
||||
break-if-!=
|
||||
delete-grapheme-before-cursor self
|
||||
return
|
||||
}
|
||||
add-grapheme-to-sandbox self, g
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue