X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=forth.jl.git;a=blobdiff_plain;f=src%2Fforth.jl;h=04771ea9c7c36960136e80a24adc30797297841a;hp=6436f79173a7e936b46d42176e679f9e8e14247e;hb=f3f77474664434c1330f74494463ea34ce148ff4;hpb=ef461e2e2bd3226ba279ff37e17ffecfd1c916d1 diff --git a/src/forth.jl b/src/forth.jl index 6436f79..04771ea 100644 --- a/src/forth.jl +++ b/src/forth.jl @@ -620,6 +620,19 @@ EMIT = defPrimWord("EMIT", () -> begin return NEXT end) +function raw_mode!(mode::Bool) + if ccall(:jl_tty_set_mode, Int32, (Ptr{Void}, Int32), STDIN.handle, mode) != 0 + throw("FATAL: Terminal unable to enter raw mode.") + end +end + +KEY = defPrimWord("KEY", () -> begin + raw_mode!(true) + pushPS(Int(readbytes(STDIN, 1)[1])) + raw_mode!(false) + return NEXT +end) + SPAN, SPAN_CFA = defNewVar("SPAN", 0) EXPECT = defPrimWord("EXPECT", () -> begin maxLen = popPS()