about summary refs log tree commit diff stats
path: root/dbm.lsp
diff options
context:
space:
mode:
authorDarren Bane <dbane@tilde.institute>2021-01-31 16:21:42 +0000
committerDarren Bane <dbane@tilde.institute>2021-01-31 16:21:42 +0000
commit6498dfe047b90ac719b9a41d644d9e72ffaa11a4 (patch)
treee51eb8dc864c5f8c23c60326549ec30f50fbfd39 /dbm.lsp
parent9dbb4b1c10aa87c1b296752467ec6d6983247aa6 (diff)
downloadlsp-6498dfe047b90ac719b9a41d644d9e72ffaa11a4.tar.gz
Some new ISLisp
Diffstat (limited to 'dbm.lsp')
-rw-r--r--dbm.lsp27
1 files changed, 27 insertions, 0 deletions
diff --git a/dbm.lsp b/dbm.lsp
new file mode 100644
index 0000000..52a0a27
--- /dev/null
+++ b/dbm.lsp
@@ -0,0 +1,27 @@
+;; No package, this is for eisl
+
+(c-include "<ndbm.h>")
+
+(defclass <dbm> () (db :accessor db))
+
+(defgeneric clearerr (self))
+(defmethod clearerr ((self <dbm>))
+   (flet ((clearerr-h (db)
+             (c-lang "dbm_clearerr(DB);")))
+      (clearerr-h (db self))))
+
+(defgeneric close (self))
+
+(defgeneric delete (self key))
+
+(defgeneric open (self openflags))
+(defmethod open ((self <dbm>) file openflags)
+   (flet ((open-h (file openflags)
+             (c-lang "res = dbm_open(FILE, OPENFLAGS, MODE);")))
+      (setf (db self) (open-h file openflags))))
+
+(defgeneric create (self openflags modes))
+(defmethod create ((self <dbm>) file openflags modes)
+   (flet ((open-h (file openflags modes)
+             (c-lang "res = dbm_open(FILE, OPENFLAGS, MODE);")))
+      (setf (db self) (open-h file openflags modes))))