diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2025-01-21 19:41:00 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2025-01-21 19:41:00 -0800 |
commit | 9ee82d9d744de52916817412318f43f26960d719 (patch) | |
tree | 5dec34c18ec021c580441953a73ac53979cf2a8c /stdlib | |
parent | 35d1c7f01f6bf2004c048ebecf12132e48454d87 (diff) | |
download | txr-9ee82d9d744de52916817412318f43f26960d719.tar.gz txr-9ee82d9d744de52916817412318f43f26960d719.tar.bz2 txr-9ee82d9d744de52916817412318f43f26960d719.zip |
get-csv: rewrite in C.
* autload.c (csv_set_entries, csv_instantiate): Functions
removed.
(autoload_init): Autoload registration for stdlib/csv
removed.
* stdlib/csv.tl: File removed.
* stream.c (get_csv): New function.
(stream_init): Register get-csv intrinsic.
* stream.h (get_csv): Declared.
Diffstat (limited to 'stdlib')
-rw-r--r-- | stdlib/csv.tl | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/stdlib/csv.tl b/stdlib/csv.tl deleted file mode 100644 index f3b4f190..00000000 --- a/stdlib/csv.tl +++ /dev/null @@ -1,74 +0,0 @@ -;; Copyright 2025 -;; Kaz Kylheku <kaz@kylheku.com> -;; Vancouver, Canada -;; All rights reserved. -;; -;; Redistribution and use in source and binary forms, with or without -;; modification, are permitted provided that the following conditions are met: -;; -;; 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -;; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -;; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -;; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -;; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -;; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -;; POSSIBILITY OF SUCH DAMAGE. - -(defun get-csv (: (stream *stdin*)) - (if (stringp stream) - (upd stream make-string-input-stream)) - (let ((record (vec)) - (field (str 0)) - (state :rfield) - (done nil)) - (while (not done) - (let ((ch (get-char stream))) - (when (eq ch #\return) - (let ((ch2 (get-char stream))) - (if (eq ch2 #\newline) - (set ch ch2) - (if ch2 - (unget-char ch2 stream))))) - (caseq state - (:rfield (caseql* ch - (#\newline (vec-push record field) - (set done t)) - (#\, (vec-push record field) - (set field (str 0))) - (#\" (cond - ((empty field) - (set state :qfield)) - (t - (string-extend field ch)))) - (nil (vec-push record field) - (set done t)) - (t (string-extend field ch)))) - (:qfield (caseql* ch - (#\" (set state :quot)) - (nil (vec-push record field) - (set done t)) - (t (string-extend field ch)))) - (:quot (caseql* ch - (#\, (vec-push record field) - (set field (str 0) - state :rfield)) - (#\" (string-extend field ch) - (set state :qfield)) - (#\newline (vec-push record field) - (set done t)) - (nil (vec-push record field) - (set done t)) - (t (string-extend field ch) - (set state :rfield))))))) - record)) |