From 4202a717f9f4fbd3702167ffd1aae0a30279a794 Mon Sep 17 00:00:00 2001 From: Daniel Cerqueira Date: Wed, 30 Jul 2025 23:29:53 +0100 Subject: add readl primitive --- liblali.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/liblali.c b/liblali.c index 5683bb3..be8eed4 100644 --- a/liblali.c +++ b/liblali.c @@ -917,6 +917,23 @@ Object *primitiveRead(Object **args, GC_PARAM) { return readExpr(&stream, GC_ROOTS); } +Object *primitiveReadList(Object **args, GC_PARAM) { + Stream stream = { STREAM_TYPE_FILE, .fd = STDIN_FILENO }; + + fflush(stdout); + if (peekNext(&stream) == EOF) { + fputc('\n', stdout); + return n; + } + + stream.length += 2; + char *tempStr = malloc(sizeof(char) * stream.length); + strcpy(tempStr, stream.buffer); + sprintf(stream.buffer, "(%s)", tempStr); + + return readExpr(&stream, GC_ROOTS); +} + Object *primitiveTime(Object **args, GC_PARAM) { time_t secs; struct tm *today; @@ -1167,6 +1184,7 @@ Primitive primitives[] = { { "princ", 1, 1, primitivePrinc }, { "newline", 0, 0, primitiveNewline }, { "read", 0, 0, primitiveRead }, + { "readl", 0, 0, primitiveReadList }, { "time", 0, 0, primitiveTime }, { "random", 0, 1, primitiveRandom }, { "+", 0, -1, primitiveAdd }, -- cgit