3565
Cleaning up the console interfaces before we start changing the socket interfaces to look like them. Reading from sockets need to be non-blocking just like reading from the console.
This commit is contained in:
parent
300a1d6e80
commit
d803b68769
|
@ -32,7 +32,7 @@ def new-fake-console events:&:@:event -> result:&:console [
|
|||
*result <- put *result, events:offset, events
|
||||
]
|
||||
|
||||
def read-event console:&:console -> result:event, console:&:console, found?:bool, quit?:bool [
|
||||
def read-event console:&:console -> result:event, found?:bool, quit?:bool, console:&:console [
|
||||
local-scope
|
||||
load-ingredients
|
||||
{
|
||||
|
@ -44,37 +44,37 @@ def read-event console:&:console -> result:event, console:&:console, found?:bool
|
|||
done?:bool <- greater-or-equal current-event-index, max
|
||||
break-unless done?
|
||||
dummy:&:event <- new event:type
|
||||
return *dummy, console/same-as-ingredient:0, 1/found, 1/quit
|
||||
return *dummy, 1/found, 1/quit
|
||||
}
|
||||
result <- index *buf, current-event-index
|
||||
current-event-index <- add current-event-index, 1
|
||||
*console <- put *console, current-event-index:offset, current-event-index
|
||||
return result, console/same-as-ingredient:0, 1/found, 0/quit
|
||||
return result, 1/found, 0/quit
|
||||
}
|
||||
switch # real event source is infrequent; avoid polling it too much
|
||||
result:event, found?:bool <- check-for-interaction
|
||||
return result, console/same-as-ingredient:0, found?, 0/quit
|
||||
return result, found?, 0/quit
|
||||
]
|
||||
|
||||
# variant of read-event for just keyboard events. Discards everything that
|
||||
# isn't unicode, so no arrow keys, page-up/page-down, etc. But you still get
|
||||
# newlines, tabs, ctrl-d..
|
||||
def read-key console:&:console -> result:char, console:&:console, found?:bool, quit?:bool [
|
||||
def read-key console:&:console -> result:char, found?:bool, quit?:bool, console:&:console [
|
||||
local-scope
|
||||
load-ingredients
|
||||
x:event, console, found?:bool, quit?:bool <- read-event console
|
||||
return-if quit?, 0, console/same-as-ingredient:0, found?, quit?
|
||||
return-unless found?, 0, console/same-as-ingredient:0, found?, quit?
|
||||
x:event, found?:bool, quit?:bool, console <- read-event console
|
||||
return-if quit?, 0, found?, quit?
|
||||
return-unless found?, 0, found?, quit?
|
||||
c:char, converted?:bool <- maybe-convert x, text:variant
|
||||
return-unless converted?, 0, console/same-as-ingredient:0, 0/found, 0/quit
|
||||
return c, console/same-as-ingredient:0, 1/found, 0/quit
|
||||
return-unless converted?, 0, 0/found, 0/quit
|
||||
return c, 1/found, 0/quit
|
||||
]
|
||||
|
||||
def send-keys-to-channel console:&:console, chan:&:sink:char, screen:&:screen -> console:&:console, chan:&:sink:char, screen:&:screen [
|
||||
local-scope
|
||||
load-ingredients
|
||||
{
|
||||
c:char, console, found?:bool, quit?:bool <- read-key console
|
||||
c:char, found?:bool, quit?:bool, console <- read-key console
|
||||
loop-unless found?
|
||||
break-if quit?
|
||||
assert c, [invalid event, expected text]
|
||||
|
@ -89,7 +89,7 @@ def wait-for-event console:&:console -> console:&:console [
|
|||
local-scope
|
||||
load-ingredients
|
||||
{
|
||||
_, console, found?:bool <- read-event console
|
||||
_, found?:bool <- read-event console
|
||||
loop-unless found?
|
||||
}
|
||||
]
|
||||
|
|
|
@ -15,10 +15,10 @@ scenario keyboard-in-scenario [
|
|||
type [abc]
|
||||
]
|
||||
run [
|
||||
1:char, console, 2:bool <- read-key console
|
||||
3:char, console, 4:bool <- read-key console
|
||||
5:char, console, 6:bool <- read-key console
|
||||
7:char, console, 8:bool, 9:bool <- read-key console
|
||||
1:char, 2:bool <- read-key console
|
||||
3:char, 4:bool <- read-key console
|
||||
5:char, 6:bool <- read-key console
|
||||
7:char, 8:bool, 9:bool <- read-key console
|
||||
]
|
||||
memory-should-contain [
|
||||
1 <- 97 # 'a'
|
||||
|
|
|
@ -7,10 +7,10 @@ scenario read-key-in-mu [
|
|||
type [abc]
|
||||
]
|
||||
run [
|
||||
1:char, console, 2:bool <- read-key console
|
||||
3:char, console, 4:bool <- read-key console
|
||||
5:char, console, 6:bool <- read-key console
|
||||
7:char, console, 8:bool <- read-key console
|
||||
1:char, 2:bool <- read-key console
|
||||
3:char, 4:bool <- read-key console
|
||||
5:char, 6:bool <- read-key console
|
||||
7:char, 8:bool <- read-key console
|
||||
]
|
||||
memory-should-contain [
|
||||
1 <- 97 # 'a'
|
||||
|
|
|
@ -20,7 +20,7 @@ def editor-event-loop screen:&:screen, console:&:console, editor:&:editor -> scr
|
|||
cursor-row:num <- get *editor, cursor-row:offset
|
||||
cursor-column:num <- get *editor, cursor-column:offset
|
||||
screen <- move-cursor screen, cursor-row, cursor-column
|
||||
e:event, console, found?:bool, quit?:bool <- read-event console
|
||||
e:event, found?:bool, quit?:bool, console <- read-event console
|
||||
loop-unless found?
|
||||
break-if quit? # only in tests
|
||||
trace 10, [app], [next-event]
|
||||
|
|
|
@ -61,7 +61,7 @@ def event-loop screen:&:screen, console:&:console, env:&:environment -> screen:&
|
|||
{
|
||||
# looping over each (keyboard or touch) event as it occurs
|
||||
+next-event
|
||||
e:event, console, found?:bool, quit?:bool <- read-event console
|
||||
e:event, found?:bool, quit?:bool, console <- read-event console
|
||||
loop-unless found?
|
||||
break-if quit? # only in tests
|
||||
trace 10, [app], [next-event]
|
||||
|
|
|
@ -20,7 +20,7 @@ def editor-event-loop screen:&:screen, console:&:console, editor:&:editor -> scr
|
|||
cursor-row:num <- get *editor, cursor-row:offset
|
||||
cursor-column:num <- get *editor, cursor-column:offset
|
||||
screen <- move-cursor screen, cursor-row, cursor-column
|
||||
e:event, console, found?:bool, quit?:bool <- read-event console
|
||||
e:event, found?:bool, quit?:bool, console <- read-event console
|
||||
loop-unless found?
|
||||
break-if quit? # only in tests
|
||||
trace 10, [app], [next-event]
|
||||
|
|
|
@ -49,7 +49,7 @@ def event-loop screen:&:screen, console:&:console, env:&:environment -> screen:&
|
|||
{
|
||||
# looping over each (keyboard or touch) event as it occurs
|
||||
+next-event
|
||||
e:event, console, found?:bool, quit?:bool <- read-event console
|
||||
e:event, found?:bool, quit?:bool, console <- read-event console
|
||||
loop-unless found?
|
||||
break-if quit? # only in tests
|
||||
trace 10, [app], [next-event]
|
||||
|
|
Loading…
Reference in New Issue