[SLOF] [PATCH v6 1/2] Fix output word

Thomas Huth thuth at redhat.com
Fri Apr 6 19:03:49 AEST 2018


On 06.04.2018 10:47, Laurent Vivier wrote:
> We can select the console output, but it does not really work
> 
> Implement term-io-emit, as we have term-io-key to really
> send characters to the output selected by stdout.
> 
> Resolve xt-handle and ihandle in the output command.
> 
> Use them in the new term-io-emit function.
> 
> Signed-off-by: Laurent Vivier <lvivier at redhat.com>
> ---
>  slof/fs/term-io.fs | 36 +++++++++++++++++++++++++++++++-----
>  1 file changed, 31 insertions(+), 5 deletions(-)
> 
> diff --git a/slof/fs/term-io.fs b/slof/fs/term-io.fs
> index 52ce12a..d247b09 100644
> --- a/slof/fs/term-io.fs
> +++ b/slof/fs/term-io.fs
> @@ -10,6 +10,17 @@
>  \ *     IBM Corporation - initial implementation
>  \ ****************************************************************************/
>  
> +0 VALUE write-xt
> +
> +VARIABLE stdout
> +
> +: set-stdout ( ihandle -- )
> +   \ Close old stdout:
> +   stdout @ ?dup IF close-dev THEN
> +   \ Now set the new stdout:
> +   dup stdout !
> +   encode-int s" stdout" set-chosen
> +;
>  
>  : input  ( dev-str dev-len -- )
>     open-dev ?dup IF
> @@ -24,12 +35,15 @@
>  
>  : output  ( dev-str dev-len -- )
>     open-dev ?dup IF
> -      \ Close old stdout:
> -      s" stdout" get-chosen IF
> -         decode-int nip nip ?dup IF close-dev THEN
> +      \ find new ihandle and xt handle
> +      dup s" write" rot ihandle>phandle find-method
> +      0= IF
> +         drop
> +         cr ." Cannot find the write method for the given output console " cr
> +         EXIT
>        THEN
> -      \ Now set the new stdout:
> -      encode-int s" stdout" set-chosen
> +      to write-xt
> +      set-stdout
>     THEN
>  ;
>  
> @@ -40,6 +54,18 @@
>  
>  1 BUFFER: (term-io-char-buf)
>  
> +: term-io-emit ( char -- )
> +    write-xt IF
> +       (term-io-char-buf) c!
> +       (term-io-char-buf) 1 write-xt stdout @ call-package
> +       drop
> +    ELSE
> +       [ ' emit behavior compile, ]
> +    THEN
> +;
> +
> +' term-io-emit to emit
> +
>  : term-io-key  ( -- char )
>     s" stdin" get-chosen IF
>        decode-int nip nip dup 0= IF 0 EXIT THEN
> 

Reviewed-by: Thomas Huth <thuth at redhat.com>


More information about the SLOF mailing list