aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2019-02-02 23:13:47 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2019-02-02 23:13:47 +0100
commit6f6feddf9a07214e133438c4af4d32064d671a31 (patch)
tree3f8fa044d8a1e2fccf87a01d758c6207bb4ec8ac
parentStart work on a scheme interface. (diff)
downloadcalp-6f6feddf9a07214e133438c4af4d32064d671a31.tar.gz
calp-6f6feddf9a07214e133438c4af4d32064d671a31.tar.xz
Made code.scm do same stuff as main.
-rwxr-xr-x[-rw-r--r--]code.scm18
-rw-r--r--scheme.c7
-rw-r--r--scheme.h2
3 files changed, 23 insertions, 4 deletions
diff --git a/code.scm b/code.scm
index 43914e76..c00ae90a 100644..100755
--- a/code.scm
+++ b/code.scm
@@ -1,6 +1,16 @@
+#!/usr/bin/guile \
+-s
+!#
+
(begin
- (setenv "LD_LIBRARY_PATH" (getcwd))
- (load-extension "libguile-calendar" "init_calendar")
- (define v (make-calendar "cal")))
+ ;; Supurflous begin block here to make sourcing into geiser easier.
+ (setenv "LD_LIBRARY_PATH" (getcwd))
+ (load-extension "libguile-calendar" "init_calendar")
+ (define v (make-calendar "cal")))
+
+(do ((i 0 (1+ i)))
+ ((>= i (calendar-size v)))
+ (format #t "~3d | ~a~%"
+ i (get-attr v i "summary")))
+
-(get-attr v 0 "description")
diff --git a/scheme.c b/scheme.c
index 05bc4b0d..cacd502e 100644
--- a/scheme.c
+++ b/scheme.c
@@ -47,9 +47,16 @@ SCM calendar_get_attr(SCM calendar, SCM id, SCM attr) {
return scm_from_strbuf(&c->val);
}
+SCM number_events(SCM calendar) {
+ scm_assert_foreign_object_type (calendar_type, calendar);
+ vcalendar* cal = scm_foreign_object_ref (calendar, 0);
+ return scm_from_size_t (cal->n_events);
+}
+
void init_calendar () {
init_calendar_type();
scm_c_define_gsubr ("make-calendar", 1, 0, 0, make_calendar);
scm_c_define_gsubr ("get-attr", 3, 0, 0, calendar_get_attr);
+ scm_c_define_gsubr ("calendar-size", 1, 0, 0, number_events);
}
diff --git a/scheme.h b/scheme.h
index c06ee1a7..9417896e 100644
--- a/scheme.h
+++ b/scheme.h
@@ -7,6 +7,8 @@ SCM make_calendar(SCM path);
SCM calendar_get_attr(SCM calendar, SCM id, SCM attr);
+SCM number_events(SCM calendar);
+
void init_calendar ();
#endif /* SCHEME_H */