diff options
| author | Kamen Mladenov <kamen@syndamia.com> | 2022-12-06 15:45:49 +0000 |
|---|---|---|
| committer | Kamen Mladenov <kamen@syndamia.com> | 2022-12-06 15:45:49 +0000 |
| commit | 40f0eda598b7eddf6789aed2819f0aca9a848dfe (patch) | |
| tree | be62d0d9288dc5ea61694d6cf0ee7641237dd104 /src/io.lisp | |
| parent | 59eec134ac0fc3cb3ab7ecfd32b0be006d346591 (diff) | |
| parent | c305c5979e77184276dbcd691e1b8bc5772130d2 (diff) | |
| download | senzill-40f0eda598b7eddf6789aed2819f0aca9a848dfe.tar senzill-40f0eda598b7eddf6789aed2819f0aca9a848dfe.tar.gz senzill-40f0eda598b7eddf6789aed2819f0aca9a848dfe.zip | |
Update to 0.2
See merge request Syndamia/senzill!1
Diffstat (limited to 'src/io.lisp')
| -rw-r--r-- | src/io.lisp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/io.lisp b/src/io.lisp new file mode 100644 index 0000000..85e9b31 --- /dev/null +++ b/src/io.lisp @@ -0,0 +1,19 @@ +(in-package :senzill.io) + +(defmacro doread-lines ((var &key (ends '("end")) read-line-options) &rest body) + "Reads lines until NIL or input is inside ends. Each line is stored in var." + `(let ((,var (read-line ,@read-line-options))) + (loop until (or (member ,var ',ends :test 'string=) (not ,var)) do + ,@body + (setf ,var (read-line ,@read-line-options))))) + +(defmacro ask-for-stream ((var) &rest body) + "var is either *standard-input* or file stream, where the file stream is handled by with-open-stream" + `(let ((filename)) + (format t "File name (nothing for *standard-input*): ") + (force-output) + (setf filename (read-line)) + (if (string= filename "") + (let ((,var *standard-input*)) + ,@body) + (with-open-stream (,var (open filename)) ,@body)))) |
