101 lines
2.7 KiB
Diff
101 lines
2.7 KiB
Diff
|
From 22d45fb249bd6e276c26c5ff64132005b385d374 Mon Sep 17 00:00:00 2001
|
||
|
From: Laurent Vivier <lvivier@redhat.com>
|
||
|
Date: Tue, 29 May 2018 11:09:32 +0200
|
||
|
Subject: [PATCH 1/2] Fix output word
|
||
|
|
||
|
RH-Author: Laurent Vivier <lvivier@redhat.com>
|
||
|
Message-id: <20180529110933.1441-2-lvivier@redhat.com>
|
||
|
Patchwork-id: 80504
|
||
|
O-Subject: [RHEL7.6 SLOF PATCH 1/2] Fix output word
|
||
|
Bugzilla: 1495467
|
||
|
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
||
|
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
|
||
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||
|
|
||
|
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 and ihandle in the output command.
|
||
|
|
||
|
Use them in the new term-io-emit function.
|
||
|
|
||
|
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
|
||
|
Reviewed-by: Thomas Huth <thuth@redhat.com>
|
||
|
[aik: fixed commit log]
|
||
|
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
|
||
|
(cherry picked from commit f05c38f7625eca1b9210ce68e80fa520274d7a8a)
|
||
|
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
|
||
|
|
||
|
Signed-off-by: Miroslav Rezanina <mrezanin@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..f13ae87 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
|
||
|
+ serial-emit
|
||
|
+ 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
|
||
|
--
|
||
|
1.8.3.1
|
||
|
|