From 7dd22dfad91491b21da600e47a495c047d61e834 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Mon, 18 Feb 2019 18:56:18 +0100 Subject: Start rework of guile interface. --- scheme.scm.c | 141 ----------------------------------------------------------- 1 file changed, 141 deletions(-) delete mode 100644 scheme.scm.c (limited to 'scheme.scm.c') diff --git a/scheme.scm.c b/scheme.scm.c deleted file mode 100644 index 7d96f2d6..00000000 --- a/scheme.scm.c +++ /dev/null @@ -1,141 +0,0 @@ -#include "scheme.h" - -#include "macro.h" -#include "calendar.h" -#include "strbuf.h" - -static SCM calendar_type; - -void init_calendar_type (void) { - SCM name = scm_from_utf8_symbol("calendar"); - SCM slots = scm_list_1(scm_from_utf8_symbol("data")); - - calendar_type = scm_make_foreign_object_type(name, slots, NULL); -} - -SCM_DEFINE (make_calendar, "make-calendar", 1, 0, 0, - (SCM path), - "Loads a vdir iCalendar from the given path.") -{ - vcomponent* cal = - (vcomponent*) scm_gc_malloc ( - sizeof(*cal), "calendar"); - INIT(vcomponent, cal, "ROOT"); - - char* p = scm_to_utf8_stringn(path, NULL); - read_vcalendar(cal, p); - free(p); - - return scm_make_foreign_object_1 - (calendar_type, cal); - -} - -SCM scm_from_strbuf(strbuf* s) { - return scm_from_utf8_stringn (s->mem, s->len - 2); -} - -SCM scm_from_llist(LLIST(strbuf)* lst) { - - SCM llist = SCM_EOL; - - for ( LINK(strbuf)* n = FIRST(lst); - n->after != NULL; - n = n->after) { - llist = scm_cons(scm_from_strbuf(n->value), llist); - } - return llist; -} - -SCM_DEFINE (calendar_get_attr, "calendar-get-attr", 3, 0, 0, - (SCM calendar, SCM id, SCM attr), - "Retuns the given attribute from the vevent object at index in calendar.") -{ - scm_assert_foreign_object_type (calendar_type, calendar); - vcomponent* cal = scm_foreign_object_ref (calendar, 0); - - vcomponent* v = cal->components.items[scm_to_int(id)]; - char* key = scm_to_utf8_stringn(scm_string_upcase(attr), NULL); - content_line* c = get_property (v, key); - free(key); - - if (c == NULL) return SCM_BOOL_F; - - return scm_from_llist(&c->val); -} - -SCM scm_from_trie_node(TRIE_NODE(content_line)* node) { - - TRIE_NODE(content_line)* n = node->child; - SCM childs = SCM_EOL; - while (n != NULL) { - childs = scm_cons(scm_from_trie_node(n), childs); - n = n->next; - } - SCM lst; - if (node->value != NULL) { - lst = scm_cons(scm_from_char(node->c), - scm_from_llist(&node->value->val)); - } else { - lst = scm_list_1(scm_from_char(node->c)); - } - return scm_cons (lst, childs); -} - -SCM scm_from_trie(TRIE(content_line)* trie) { - return scm_from_trie_node (trie->root); -} - -SCM scm_from_vector(VECT(vcomponent)* vect) { - SCM l = SCM_EOL; - for (size_t i = 0; i < vect->length; i++) { - l = scm_cons( - scm_make_foreign_object_1 (calendar_type, GET(VECT(vcomponent))(vect, i)), - l); - } - return scm_reverse(l); -} - -SCM_DEFINE (calendar_size, "calendar-size", 1, 0, 0, - (SCM calendar), - "Returns number of events in a vcalendar.") -{ - scm_assert_foreign_object_type (calendar_type, calendar); - vcomponent* cal = scm_foreign_object_ref (calendar, 0); - return scm_from_size_t (cal->components.length); -} - -SCM_DEFINE (calendar_properties, "primitive-get-properties", 1, 0, 0, - (SCM calendar), - "Returns the TRIE from a calendar object") -{ - scm_assert_foreign_object_type (calendar_type, calendar); - vcomponent* cal = scm_foreign_object_ref (calendar, 0); - return scm_from_trie(&cal->clines); -} - -SCM_DEFINE(calendar_components, "get-components", 1, 0, 0, - (SCM component), - "") -{ - scm_assert_foreign_object_type (calendar_type, component); - vcomponent* cal = scm_foreign_object_ref (component, 0); - return scm_from_vector(&cal->components); -} - -SCM_DEFINE(component_type, "component-type", 1, 0, 0, - (SCM component), - "Returns type of vcomponent#") -{ - scm_assert_foreign_object_type (calendar_type, component); - vcomponent* comp = scm_foreign_object_ref (component, 0); - return scm_from_utf8_symbol(comp->type); -} - -void init_calendar () { - init_calendar_type(); - -#ifndef SCM_MAGIC_SNARFER -#include "scheme.x" -#endif -} -- cgit v1.2.3