summaryrefslogtreecommitdiff
path: root/liblali.c
diff options
context:
space:
mode:
Diffstat (limited to 'liblali.c')
-rw-r--r--liblali.c18
1 files changed, 18 insertions, 0 deletions
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 },