diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2014-07-19 09:09:13 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2014-07-19 09:09:13 -0700 |
commit | 74880de58e4f3ae6e0a84187f92e6853c37aa64e (patch) | |
tree | 64904f35f9d7279cb437866bdfe9deb501ef798f /stream.c | |
parent | 614ec6640e3232edfea2614ef290ffcb7ffbae7f (diff) | |
download | txr-74880de58e4f3ae6e0a84187f92e6853c37aa64e.tar.gz txr-74880de58e4f3ae6e0a84187f92e6853c37aa64e.tar.bz2 txr-74880de58e4f3ae6e0a84187f92e6853c37aa64e.zip |
* eval.c (eval_init): Register get-lines as a synonym for lazy-stream-cons.
* stream.c (get_string): New function.
* stream.h (get_string): Declared.
(stream_init): get_string registered as get-string intrinsic.
* txr.1: Documented get-string, and get-lines as a synonym for
lazy-stream-cons. Documented the behavioral difference of
lazy-stream-cons lazy lists for real-time and non-real-time streams.
Diffstat (limited to 'stream.c')
-rw-r--r-- | stream.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -2004,6 +2004,24 @@ val seek_stream(val stream, val offset, val whence) } } +val get_string(val stream, val nchars) +{ + val strstream = make_string_output_stream(); + nchars = default_bool_arg(nchars); + val ch; + + if (nchars) { + for (; gt(nchars, zero) && (ch = get_char(stream)); + nchars = minus(nchars, one)) + put_char(ch, strstream); + } else { + while ((ch = get_char(stream))) + put_char(ch, strstream); + } + + return get_string_from_stream(strstream); +} + #if HAVE_SYS_STAT static int w_stat(const wchar_t *wpath, struct stat *buf) { @@ -2835,6 +2853,7 @@ void stream_init(void) reg_fun(intern(lit("get-line"), user_package), func_n1o(get_line, 0)); reg_fun(intern(lit("get-char"), user_package), func_n1o(get_char, 0)); reg_fun(intern(lit("get-byte"), user_package), func_n1o(get_byte, 0)); + reg_fun(intern(lit("get-string"), user_package), func_n2o(get_string, 0)); reg_fun(intern(lit("put-string"), user_package), func_n2o(put_string, 1)); reg_fun(intern(lit("put-line"), user_package), func_n2o(put_line, 0)); reg_fun(intern(lit("put-char"), user_package), func_n2o(put_char, 1)); |