mirror of
https://github.com/kanaka/mal.git
synced 2024-09-21 10:37:58 +03:00
44 lines
741 B
OpenEdge ABL
44 lines
741 B
OpenEdge ABL
set_path, get_env("YORICK_MAL_PATH") + ":" + get_path()
|
|
require, "reader.i"
|
|
require, "printer.i"
|
|
|
|
func READ(str)
|
|
{
|
|
return read_str(str)
|
|
}
|
|
|
|
func EVAL(exp, env)
|
|
{
|
|
if (structof(exp) == MalError) return exp
|
|
return exp
|
|
}
|
|
|
|
func PRINT(exp)
|
|
{
|
|
if (structof(exp) == MalError) return exp
|
|
return pr_str(exp, 1)
|
|
}
|
|
|
|
func REP(str)
|
|
{
|
|
return PRINT(EVAL(READ(str), ""))
|
|
}
|
|
|
|
func main(void)
|
|
{
|
|
stdin_file = open("/dev/stdin", "r")
|
|
while (1) {
|
|
write, format="%s", "user> "
|
|
line = rdline(stdin_file, prompt="")
|
|
if (!line) break
|
|
if (strlen(line) > 0) {
|
|
result = REP(line)
|
|
if (structof(result) == MalError) write, format="Error: %s\n", result.message
|
|
else write, format="%s\n", result
|
|
}
|
|
}
|
|
write, ""
|
|
}
|
|
|
|
main;
|