from .. import TypeEnum, Environment, Arg, Builtin, evaluate, InterpretPanic, MultiFunction from ..structs import * import subprocess import sys TERM = Environment() def interpretClear(symbol, args, env, ns): subprocess.run(["clear"]) return List([]) clear_func = Builtin("clear", interpretClear, [], return_type=Type(":list")) clear_multi = MultiFunction("clear") clear_multi.register(clear_func) TERM.register("clear", clear_multi) def interpretReadLine(symbol, args, env, ns): ret = input(args[0].value) return String(ret) readline_func = Builtin("read-line", interpretReadLine, [Arg("prompt", TypeEnum.STRING)], return_type=Type(":string")) readline_multi = MultiFunction("read-line") readline_multi.register(readline_func) TERM.register("read-line", readline_multi) 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")) readchar_func = Builtin("read-char", interpretReadChar, [], return_type=Type(":string")) readchar_multi = MultiFunction("read-char") readchar_multi.register(readchar_func) TERM.register("read-char", readchar_multi)