diff options
| -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 }, |
