diff options
author | Laurent Vivier <lvivier@redhat.com> | 2018-05-17 15:16:04 +0200 |
---|---|---|
committer | Alexey Kardashevskiy <aik@ozlabs.ru> | 2018-05-29 18:41:53 +1000 |
commit | 85d5b4d62d0563163bd12d06a783fbc04a4d9069 (patch) | |
tree | d6aa43777be6e3968f3ed90bde4d678bee018c9a | |
parent | f05c38f7625eca1b9210ce68e80fa520274d7a8a (diff) | |
download | SLOF-85d5b4d62d0563163bd12d06a783fbc04a4d9069.zip SLOF-85d5b4d62d0563163bd12d06a783fbc04a4d9069.tar.gz SLOF-85d5b4d62d0563163bd12d06a783fbc04a4d9069.tar.bz2 |
resolve ihandle and xt handle in the input command (like for the output)
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
-rw-r--r-- | slof/fs/term-io.fs | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/slof/fs/term-io.fs b/slof/fs/term-io.fs index f13ae87..5b94b26 100644 --- a/slof/fs/term-io.fs +++ b/slof/fs/term-io.fs @@ -10,10 +10,20 @@ \ * IBM Corporation - initial implementation \ ****************************************************************************/ +0 VALUE read-xt 0 VALUE write-xt +VARIABLE stdin VARIABLE stdout +: set-stdin ( ihandle -- ) + \ Close old stdin: + stdin @ ?dup IF close-dev THEN + \ Now set the new stdin: + dup stdin ! + encode-int s" stdin" set-chosen +; + : set-stdout ( ihandle -- ) \ Close old stdout: stdout @ ?dup IF close-dev THEN @@ -24,12 +34,15 @@ VARIABLE stdout : input ( dev-str dev-len -- ) open-dev ?dup IF - \ Close old stdin: - s" stdin" get-chosen IF - decode-int nip nip ?dup IF close-dev THEN + \ find new ihandle and xt handle + dup s" read" rot ihandle>phandle find-method + 0= IF + drop + cr ." Cannot find the read method for the given input console " cr + EXIT THEN - \ Now set the new stdin: - encode-int s" stdin" set-chosen + to read-xt + set-stdin THEN ; @@ -51,7 +64,6 @@ VARIABLE stdout 2dup input output ; - 1 BUFFER: (term-io-char-buf) : term-io-emit ( char -- ) @@ -67,16 +79,14 @@ VARIABLE stdout ' term-io-emit to emit : term-io-key ( -- char ) - s" stdin" get-chosen IF - decode-int nip nip dup 0= IF 0 EXIT THEN - >r BEGIN - (term-io-char-buf) 1 s" read" r@ $call-method + read-xt IF + BEGIN + (term-io-char-buf) 1 read-xt stdin @ call-package 0 > UNTIL (term-io-char-buf) c@ - r> drop ELSE - [ ' key behavior compile, ] + serial-key THEN ; @@ -88,8 +98,7 @@ VARIABLE stdout \ - if it's an hv console, use hvterm-key? \ otherwise it will always return false : term-io-key? ( -- true|false ) - s" stdin" get-chosen IF - decode-int nip nip dup 0= IF drop 0 EXIT THEN \ return false and exit if no stdin set + stdin @ ?dup IF >r \ store ihandle on return stack s" device_type" r@ ihandle>phandle ( propstr len phandle ) get-property ( true | data dlen false ) @@ -115,8 +124,7 @@ VARIABLE stdout 2drop r> drop false EXIT \ unknown device_type cleanup return-stack, return false THEN ELSE - \ stdin not set, return false - false + serial-key? THEN ; |