aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKamen Mladenov <kamen@syndamia.com>2022-12-06 15:45:49 +0000
committerKamen Mladenov <kamen@syndamia.com>2022-12-06 15:45:49 +0000
commit40f0eda598b7eddf6789aed2819f0aca9a848dfe (patch)
treebe62d0d9288dc5ea61694d6cf0ee7641237dd104 /src
parent59eec134ac0fc3cb3ab7ecfd32b0be006d346591 (diff)
parentc305c5979e77184276dbcd691e1b8bc5772130d2 (diff)
downloadsenzill-main.tar
senzill-main.tar.gz
senzill-main.zip
Merge branch 'dev' into 'main'HEADv0.2main
Update to 0.2 See merge request Syndamia/senzill!1
Diffstat (limited to 'src')
-rw-r--r--src/io.lisp19
-rw-r--r--src/packages.lisp6
2 files changed, 25 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))))
diff --git a/src/packages.lisp b/src/packages.lisp
index 441101d..802ec3a 100644
--- a/src/packages.lisp
+++ b/src/packages.lisp
@@ -19,3 +19,9 @@
:pop-back
:slice)
(:documentation "List functions"))
+
+(defpackage senzill.io
+ (:use :cl)
+ (:export :doread-lines
+ :ask-for-stream)
+ (:documentation "I/O functions"))