diff options
| author | Daniel Cerqueira <dan.git@lispclub.com> | 2025-07-30 23:29:53 +0100 |
|---|---|---|
| committer | Daniel Cerqueira <dan.git@lispclub.com> | 2025-07-30 23:29:53 +0100 |
| commit | 4202a717f9f4fbd3702167ffd1aae0a30279a794 (patch) | |
| tree | d402542ef76e4760a59db3f9cb6fccdfda4709d5 /liblali.c | |
| parent | a8307f1e45ff9ad61ab1c26f8f7ed1039a6cba6e (diff) | |
add readl primitive
Diffstat (limited to 'liblali.c')
| -rw-r--r-- | liblali.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -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 }, |
