aboutsummaryrefslogtreecommitdiff
path: root/slof
diff options
context:
space:
mode:
authorLaurent Vivier <lvivier@redhat.com>2018-05-17 15:16:03 +0200
committerAlexey Kardashevskiy <aik@ozlabs.ru>2018-05-29 18:41:49 +1000
commitf05c38f7625eca1b9210ce68e80fa520274d7a8a (patch)
treeeabfb03c15ec88dc644bdbfbc40b15c55d8329c8 /slof
parent4c91c160f9e9695d3a5494f5cabd022cc6603ea3 (diff)
downloadSLOF-f05c38f7625eca1b9210ce68e80fa520274d7a8a.zip
SLOF-f05c38f7625eca1b9210ce68e80fa520274d7a8a.tar.gz
SLOF-f05c38f7625eca1b9210ce68e80fa520274d7a8a.tar.bz2
Fix output word
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>
Diffstat (limited to 'slof')
-rw-r--r--slof/fs/term-io.fs36
1 files 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