summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-10-08 20:04:19 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-10-08 20:04:19 -0700
commit47d79a4dc7d1a9ae8161dfd02a75a869169da73f (patch)
tree0938e191d8863a2ee187fbea982b5b9f8064fe3c /share
parentc7cb16a9b6ba4b6d9b7d4d68245d078e982accb8 (diff)
downloadtxr-47d79a4dc7d1a9ae8161dfd02a75a869169da73f.tar.gz
txr-47d79a4dc7d1a9ae8161dfd02a75a869169da73f.tar.bz2
txr-47d79a4dc7d1a9ae8161dfd02a75a869169da73f.zip
Various stream-related with- macros introduced.
* lisplib.c (with_stream_set_entries, with_stream_instantiate): New static functions. (lisplib_init): Register new functions in dl_table. * share/txr/stdlib/with-stream.tl: New file. * txr.1: Documented new macros.
Diffstat (limited to 'share')
-rw-r--r--share/txr/stdlib/with-stream.tl48
1 files changed, 48 insertions, 0 deletions
diff --git a/share/txr/stdlib/with-stream.tl b/share/txr/stdlib/with-stream.tl
new file mode 100644
index 00000000..ac7e826a
--- /dev/null
+++ b/share/txr/stdlib/with-stream.tl
@@ -0,0 +1,48 @@
+;; Copyright 2015
+;; Kaz Kylheku <kaz@kylheku.com>
+;; Vancouver, Canada
+;; All rights reserved.
+;;
+;; Redistribution of this software in source and binary forms, with or without
+;; modification, is permitted provided that the following two conditions are met.
+;;
+;; Use of this software in any manner constitutes agreement with the disclaimer
+;; which follows the two conditions.
+;;
+;; 1. Redistributions of source code must retain the above copyright
+;; notice, this list of conditions and the following disclaimer.
+;; 2. Redistributions in binary form must reproduce the above copyright
+;; notice, this list of conditions and the following disclaimer in
+;; the documentation and/or other materials provided with the
+;; distribution.
+;;
+;; THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+;; WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+;; MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE
+;; COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DAMAGES, HOWEVER CAUSED,
+;; AND UNDER ANY THEORY OF LIABILITY, ARISING IN ANY WAY OUT OF THE USE OF THIS
+;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(defmacro with-out-string-stream ((stream) . body)
+ ^(let ((,stream (make-string-output-stream)))
+ ,*body
+ (get-string-from-stream ,stream)))
+
+(defmacro with-out-strlist-stream ((stream) . body)
+ ^(let ((,stream (make-strlist-output-stream)))
+ ,*body
+ (get-list-from-stream ,stream)))
+
+(defmacro with-in-string-stream ((stream string) . body)
+ ^(let ((,stream (make-string-input-stream ,string)))
+ ,*body))
+
+(defmacro with-in-string-byte-stream ((stream string) . body)
+ ^(let ((,stream (make-string-byte-input-stream ,string)))
+ ,*body))
+
+(defmacro with-stream ((var stream) . body)
+ ^(let ((,var ,stream))
+ (unwind-protect
+ (progn ,*body)
+ (close-stream ,var))))