[SLOF] [PATCH v5 2/2] resolve ihandle and xt handle in the input command (like for the output)

Thomas Huth thuth at redhat.com
Mon Mar 26 22:18:20 AEDT 2018


On 23.03.2018 12:42, Laurent Vivier wrote:
> Signed-off-by: Laurent Vivier <lvivier at redhat.com>
> ---
>  slof/fs/term-io.fs | 89 ++++++++++++++++++++++++++++--------------------------
>  1 file changed, 46 insertions(+), 43 deletions(-)
> 
> diff --git a/slof/fs/term-io.fs b/slof/fs/term-io.fs
> index 97d02a4..2db0968 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
>  ;
>  
> @@ -64,17 +77,12 @@ 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
> -         0 >
> -      UNTIL
> -      (term-io-char-buf) c@
> -      r> drop
> -   ELSE
> -      [ ' key behavior compile, ]
> -   THEN
> +   read-xt 0= IF 0 EXIT THEN

Please keep the "[ ' key behavior compile, ]" here instead of "0"

> +   BEGIN
> +     (term-io-char-buf) 1 read-xt stdin @ call-package
> +     0 >
> +   UNTIL
> +   (term-io-char-buf) c@
>  ;
>  
>  ' term-io-key to key
> @@ -85,35 +93,30 @@ 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
> -      >r \ store ihandle on return stack
> -      s" device_type" r@ ihandle>phandle ( propstr len phandle )
> -      get-property ( true | data dlen false )
> -      IF
> -         \ device_type not found, return false and exit
> -         false
> -      ELSE
> -         1 - \ remove 1 from length to ignore null-termination char
> -         \ device_type found, check wether it is serial or keyboard
> -         2dup s" serial" str= IF
> -	    2drop serial-key? r> drop EXIT
> -	 THEN \ call serial-key, cleanup return-stack, exit
> -         2dup s" keyboard" str= IF 
> -            2drop ( )
> -            \ keyboard found, check for key-available? method, execute it or return false 
> -            s" key-available?" r@ ihandle>phandle find-method IF 
> -               drop s" key-available?" r@ $call-method  
> -            ELSE 
> -               false 
> -            THEN
> -            r> drop EXIT \ cleanup return-stack, exit
> +   stdin @ ?dup 0= IF false EXIT THEN \ stdin not set, return false

stdin @ ?dup 0= IF [ ' key? behaviour compile, ] EXIT THEN

Or maybe even:

stdin @ ?dup 0= IF
  [ ' key? behaviour compile, ]
ELSE
  ...

to keep the original indentation of the following code, so that the
patch gets easier to review?

> +   >r \ store ihandle on return stack
> +   s" device_type" r@ ihandle>phandle ( propstr len phandle )
> +   get-property ( true | data dlen false )
> +   IF
> +      \ device_type not found, return false and exit
> +      false
> +   ELSE
> +      1 - \ remove 1 from length to ignore null-termination char
> +      \ device_type found, check wether it is serial or keyboard
> +      2dup s" serial" str= IF
> +         2drop serial-key? r> drop EXIT
> +      THEN \ call serial-key, cleanup return-stack, exit
> +      2dup s" keyboard" str= IF
> +         2drop ( )
> +         \ keyboard found, check for key-available? method, execute it or return false
> +         s" key-available?" r@ ihandle>phandle find-method IF
> +            drop s" key-available?" r@ $call-method
> +         ELSE
> +            false
>           THEN
> -         2drop r> drop false EXIT \ unknown device_type cleanup return-stack, return false
> +         r> drop EXIT \ cleanup return-stack, exit
>        THEN
> -   ELSE
> -      \ stdin not set, return false
> -      false
> +      2drop r> drop false EXIT \ unknown device_type cleanup return-stack, return false
>     THEN
>  ;

 Thomas


More information about the SLOF mailing list