summaryrefslogtreecommitdiffstats
path: root/stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'stream.c')
-rw-r--r--stream.c51
1 files changed, 33 insertions, 18 deletions
diff --git a/stream.c b/stream.c
index 64380b87..dffc8e25 100644
--- a/stream.c
+++ b/stream.c
@@ -488,7 +488,7 @@ static val strlist_out_put_string(val stream, val str)
if (zerop(length))
break;
- put_string(strstream, sub_str(str, nil, span_to_newline));
+ put_string(sub_str(str, nil, span_to_newline), strstream);
if (equal(span_to_newline, length))
break;
@@ -513,7 +513,7 @@ static val strlist_out_put_char(val stream, val ch)
push(get_string_from_stream(strstream), &lines);
strstream = make_string_output_stream();
} else {
- put_char(strstream, ch);
+ put_char(ch, strstream);
}
*car_l(cell) = lines;
@@ -705,6 +705,9 @@ val close_stream(val stream, val throw_on_error)
val get_line(val stream)
{
+ if (!stream)
+ stream = std_input;
+
type_check (stream, COBJ);
type_assert (stream->co.cls == stream_s, (lit("~a is not a stream"),
stream, nao));
@@ -717,6 +720,9 @@ val get_line(val stream)
val get_char(val stream)
{
+ if (!stream)
+ stream = std_input;
+
type_check (stream, COBJ);
type_assert (stream->co.cls == stream_s, (lit("~a is not a stream"),
stream, nao));
@@ -729,6 +735,9 @@ val get_char(val stream)
val get_byte(val stream)
{
+ if (!stream)
+ stream = std_input;
+
type_check (stream, COBJ);
type_assert (stream->co.cls == stream_s, (lit("~a is not a stream"),
stream, nao));
@@ -790,33 +799,33 @@ static val vformat_num(val stream, const char *str,
if (!left)
for (i = 0; i < slack; i++)
- if (!put_char(stream, chr(' ')))
+ if (!put_char(chr(' '), stream))
return nil;
if (!zeropad)
for (i = 0; i < padlen; i++)
- if (!put_char(stream, chr(' ')))
+ if (!put_char(chr(' '), stream))
return nil;
if (sign_char) {
- put_char(stream, chr(sign_char));
+ put_char(chr(sign_char), stream);
str++;
} else if (sign) {
- put_char(stream, chr(sign));
+ put_char(chr(sign), stream);
}
if (zeropad)
for (i = 0; i < padlen; i++)
- if (!put_char(stream, chr('0')))
+ if (!put_char(chr('0'), stream))
return nil;
while (*str)
- if (!put_char(stream, chr(*str++)))
+ if (!put_char(chr(*str++), stream))
return nil;
if (left)
for (i = 0; i < slack; i++)
- if (!put_char(stream, chr(' ')))
+ if (!put_char(chr(' '), stream))
return nil;
return t;
@@ -833,16 +842,16 @@ static val vformat_str(val stream, val str, int width, int left,
if (!left)
for (i = 0; i < slack; i++)
- if (!put_char(stream, chr(' ')))
+ if (!put_char(chr(' '), stream))
return nil;
for (i = 0; i < truelen; i++)
- if (!put_char(stream, chr(cstr[i])))
+ if (!put_char(chr(cstr[i]), stream))
return nil;
if (left)
for (i = 0; i < slack; i++)
- if (!put_char(stream, chr(' ')))
+ if (!put_char(chr(' '), stream))
return nil;
return t;
@@ -883,14 +892,14 @@ val vformat(val stream, val fmtstr, va_list vl)
digits = 0;
continue;
default:
- put_char(stream, chr(ch));
+ put_char(chr(ch), stream);
continue;
}
break;
case vf_width:
switch (ch) {
case '~':
- put_char(stream, chr('~'));
+ put_char(chr('~'), stream);
state = vf_init;
continue;
case '<':
@@ -1146,8 +1155,11 @@ val formatv(val stream, val string, val args)
abort();
}
-val put_string(val stream, val string)
+val put_string(val string, val stream)
{
+ if (!stream)
+ stream = std_output;
+
type_check (stream, COBJ);
type_assert (stream->co.cls == stream_s, (lit("~a is not a stream"),
stream, nao));
@@ -1158,8 +1170,11 @@ val put_string(val stream, val string)
}
}
-val put_char(val stream, val ch)
+val put_char(val ch, val stream)
{
+ if (!stream)
+ stream = std_output;
+
type_check (stream, COBJ);
type_assert (stream->co.cls == stream_s, (lit("~a is not a stream"),
stream, nao));
@@ -1170,9 +1185,9 @@ val put_char(val stream, val ch)
}
}
-val put_line(val stream, val string)
+val put_line(val string, val stream)
{
- return (put_string(stream, string), put_char(stream, chr('\n')));
+ return (put_string(string, stream), put_char(chr('\n'), stream));
}
val flush_stream(val stream)