aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSyndamia <kamen@syndamia.com>2022-12-06 17:43:16 +0200
committerSyndamia <kamen@syndamia.com>2022-12-06 17:43:16 +0200
commit88147fee7e0717f424e821a4c51d4945d1c80a95 (patch)
tree69cd12af11767f52e7115fec0e1073700262e67c
parent154bc6d18a69c4d998723c70eb688b0b7c76293b (diff)
downloadsenzill-88147fee7e0717f424e821a4c51d4945d1c80a95.tar
senzill-88147fee7e0717f424e821a4c51d4945d1c80a95.tar.gz
senzill-88147fee7e0717f424e821a4c51d4945d1c80a95.zip
[io] New package io, implemented doread-lines and ask-for-stream
-rw-r--r--senzill.asd3
-rw-r--r--src/io.lisp19
-rw-r--r--src/packages.lisp6
3 files changed, 27 insertions, 1 deletions
diff --git a/senzill.asd b/senzill.asd
index d521aff..c08b693 100644
--- a/senzill.asd
+++ b/senzill.asd
@@ -10,4 +10,5 @@
:components
((:file "packages")
(:file "math" :depends-on ("packages"))
- (:file "collections" :depends-on ("packages"))))))
+ (:file "collections" :depends-on ("packages"))
+ (:file "io" :depends-on ("packages"))))))
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"))