From 776fe3193b515c028b5ac69326baed51d760d32f Mon Sep 17 00:00:00 2001 From: mryouse Date: Tue, 21 Jun 2022 01:49:29 +0000 Subject: refactor: break stdlib into several files --- neb/std/term.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 neb/std/term.py (limited to 'neb/std/term.py') diff --git a/neb/std/term.py b/neb/std/term.py new file mode 100644 index 0000000..e706005 --- /dev/null +++ b/neb/std/term.py @@ -0,0 +1,33 @@ +from .. import TypeEnum, Environment, Arg, Builtin, evaluate +from ..structs import * +import subprocess +import sys + +TERM = Environment() + +def interpretClear(symbol, args, env, ns): + subprocess.run(["clear"]) + return List([]) + +TERM.register("clear", Builtin(interpretClear, [])) + +def interpretReadLine(symbol, args, env, ns): + ret = input(args[0].value) + return String(ret) + +TERM.register("read-line", Builtin(interpretReadLine, [Arg("prompt", TypeEnum.STRING)])) + +def interpretReadChar(symbol, args, env, ns): + import termios, tty + fd = sys.stdin.fileno() + old = termios.tcgetattr(fd) + try: + tty.setraw(fd) + ch = sys.stdin.buffer.read1(4) # some keys are >1 bytes + except Exception: + raise + finally: + termios.tcsetattr(fd, termios.TCSADRAIN, old) + return String(ch.decode("utf-8")) + +TERM.register("read-char", Builtin(interpretReadChar, [])) -- cgit v1.2.3