parent
d280bd8dac
commit
db0363462f
|
@ -0,0 +1,20 @@
|
||||||
|
# read line from keyboard into stream while also echoing to screen
|
||||||
|
# abort on stream overflow
|
||||||
|
fn read-line-from-keyboard keyboard: (addr keyboard), out: (addr stream byte), screen: (addr screen), fg: int, bg: int {
|
||||||
|
clear-stream out
|
||||||
|
{
|
||||||
|
draw-cursor screen, 0x20/space
|
||||||
|
var key/eax: byte <- read-key keyboard
|
||||||
|
compare key, 0xa/newline
|
||||||
|
break-if-=
|
||||||
|
compare key, 0
|
||||||
|
loop-if-=
|
||||||
|
var key2/eax: int <- copy key
|
||||||
|
append-byte out, key2
|
||||||
|
var c/eax: code-point <- copy key2
|
||||||
|
draw-code-point-at-cursor-over-full-screen screen, c, fg bg
|
||||||
|
loop
|
||||||
|
}
|
||||||
|
# clear cursor
|
||||||
|
draw-code-point-at-cursor-over-full-screen screen, 0x20/space, fg bg
|
||||||
|
}
|
20
apps/rpn.mu
20
apps/rpn.mu
|
@ -19,28 +19,10 @@ fn main screen: (addr screen), keyboard: (addr keyboard), data-disk: (addr disk)
|
||||||
var in-storage: (stream byte 0x80)
|
var in-storage: (stream byte 0x80)
|
||||||
var in/esi: (addr stream byte) <- address in-storage
|
var in/esi: (addr stream byte) <- address in-storage
|
||||||
var y/ecx: int <- copy 0
|
var y/ecx: int <- copy 0
|
||||||
var space/edx: code-point <- copy 0x20
|
|
||||||
# read-eval-print loop
|
# read-eval-print loop
|
||||||
{
|
{
|
||||||
# print prompt
|
|
||||||
var x/eax: int <- draw-text-rightward screen, "> ", 0/x, 0x80/xmax, y, 3/fg/cyan, 0/bg
|
var x/eax: int <- draw-text-rightward screen, "> ", 0/x, 0x80/xmax, y, 3/fg/cyan, 0/bg
|
||||||
# read line from keyboard
|
read-line-from-keyboard keyboard, in, screen, 0xf/fg 0/bg
|
||||||
clear-stream in
|
|
||||||
{
|
|
||||||
draw-cursor screen, space
|
|
||||||
var key/eax: byte <- read-key keyboard
|
|
||||||
compare key, 0xa/newline
|
|
||||||
break-if-=
|
|
||||||
compare key, 0
|
|
||||||
loop-if-=
|
|
||||||
var key2/eax: int <- copy key
|
|
||||||
append-byte in, key2
|
|
||||||
var c/eax: code-point <- copy key2
|
|
||||||
draw-code-point-at-cursor-over-full-screen screen, c, 0xf/fg, 0/bg
|
|
||||||
loop
|
|
||||||
}
|
|
||||||
# clear cursor
|
|
||||||
draw-code-point-at-cursor-over-full-screen screen, space, 3/fg/never-used, 0/bg
|
|
||||||
# parse and eval
|
# parse and eval
|
||||||
var out/eax: int <- simplify in
|
var out/eax: int <- simplify in
|
||||||
# print
|
# print
|
||||||
|
|
Loading…
Reference in New Issue