-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsimpleDB.ros
executable file
·85 lines (70 loc) · 2.22 KB
/
simpleDB.ros
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/bin/sh
#|-*- mode:lisp -*-|#
#|
exec ros -Q -- $0 "$@"
|#
(progn ;;init forms
(ros:ensure-asdf))
;;#+quicklisp (ql:quickload '() :silent t)
;; (defpackage :ros.script.simpleDB.3732005451
;; (:use :cl))
;; (in-package :ros.script.simpleDB.3732005451)
(defvar *db* nil)
(defun make-cd (title artist rating ripped)
(list :title title :artist artist :rating rating :ripped ripped))
(defun add-record (cd)
(push cd *db*))
(defun dump-db()
(dolist (cd *db*) (format t "~{~a:~10t~a~%~}" cd)))
(defun prompt-read (prompt)
(format *query-io* "~a:" prompt)
(force-output *query-io*)
(read-line *query-io*))
(defun prompt-for-cd ()
(make-cd
(prompt-read "Title")
(prompt-read "Artist")
(or (parse-integer (prompt-read "Rating") :junk-allowed t) 0)
(y-or-n-p "Ripped [y/n]")))
(defun add-cds ()
(loop (add-record (prompt-for-cd))
(if (not (y-or-n-p "Another? [y/n]")) (return))))
(defun save-db(filename)
(with-open-file (out filename
:direction :output
:if-exists :supersede)
(with-standard-io-syntax
(print *db* out))))
(defun load-db(filename)
(with-open-file (in filename)
(with-standard-io-syntax
(setf *db* (read in)))))
(defun select (selectorFn)
(remove-if-not
selectorFn
*db*))
;; (defun where (&key artist title rating (ripped nil ripped-p))
;; #'(lambda (cd)
;; (and
;; (if title (equal (getf cd :title) title) t)
;; (if artist (equal (getf cd :artist) artist) t)
;; (if rating (equal (getf cd :rating) rating) t)
;; (if ripped-p (equal (getf cd :ripped) ripped) t))))
;; (defun update (&key selector-fn artist title rating (ripped nil ripped-p))
;; (setf *db*
;; (mapcar
;; #'(lambda (row)
;; (when (funccall selector-fn row)
;; (if artist (setf (getf row :artist) artist))
;; (if artist (setf (getf row :title) title))
;; (if artist (setf (getf row :rating) rating))
;; (if artist (setf (getf row :ripped) ripped))
;; row)
;; *db*)) )
;; (load-db "sss")
;; (select (:artist (where :name "somenames"))
(defun main ()
(load-db"./dbtestboy")
(add-cds)
(save-db "./dbtestboy"))
;;; vim: set ft=lisp lisp: