diff mbox series

[v7,2/2] resolve ihandle and xt handle in the input command (like for the output)

Message ID 20180517131604.30368-3-lvivier@redhat.com
State Accepted
Headers show
Series Fix output word | expand

Commit Message

Laurent Vivier May 17, 2018, 1:16 p.m. UTC
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
 slof/fs/term-io.fs | 40 ++++++++++++++++++++++++----------------
 1 file changed, 24 insertions(+), 16 deletions(-)

Comments

Thomas Huth May 17, 2018, 2:32 p.m. UTC | #1
On 17.05.2018 15:16, Laurent Vivier wrote:
> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> ---
>  slof/fs/term-io.fs | 40 ++++++++++++++++++++++++----------------
>  1 file changed, 24 insertions(+), 16 deletions(-)

Reviewed-by: Thomas Huth <thuth@redhat.com>
diff mbox series

Patch

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
 ;