iconvert some fields to time_t - ics2txt - convert icalendar .ics file to plain text Err bitreich.org 70
hgit clone git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt URL:git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt bitreich.org 70
1Log /scm/ics2txt/log.gph bitreich.org 70
1Files /scm/ics2txt/files.gph bitreich.org 70
1Refs /scm/ics2txt/refs.gph bitreich.org 70
1Tags /scm/ics2txt/tag bitreich.org 70
1README /scm/ics2txt/file/README.md.gph bitreich.org 70
i--- Err bitreich.org 70
1commit 54ba66bb7b1b7eed7e3aaf60ef00c9ccc9cc65d6 /scm/ics2txt/commit/54ba66bb7b1b7eed7e3aaf60ef00c9ccc9cc65d6.gph bitreich.org 70
1parent 58d91e5e80aea1ab98f675ccc4530f26a9659162 /scm/ics2txt/commit/58d91e5e80aea1ab98f675ccc4530f26a9659162.gph bitreich.org 70
hAuthor: Josuah Demangeon <me@josuah.net> URL:mailto:me@josuah.net bitreich.org 70
iDate: Thu, 17 Jun 2021 01:35:05 +0200 Err bitreich.org 70
i Err bitreich.org 70
iconvert some fields to time_t Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M ical.c | 24 ++++++++++++------------ Err bitreich.org 70
i M ical.h | 6 +++--- Err bitreich.org 70
i M ics2tree.c | 8 ++++---- Err bitreich.org 70
i M ics2tsv.c | 69 ++++++++++++++++--------------- Err bitreich.org 70
i Err bitreich.org 70
i4 files changed, 55 insertions(+), 52 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/ical.c b/ical.c /scm/ics2txt/file/ical.c.gph bitreich.org 70
i@@ -93,7 +93,7 @@ ical_get_time(IcalParser *p, char *s, time_t *t) Err bitreich.org 70
i * permit to only have parsing code left to parsing functions */ Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-hook_entry_name(IcalParser *p, char *name) Err bitreich.org 70
i+hook_field_name(IcalParser *p, char *name) Err bitreich.org 70
i { Err bitreich.org 70
i (void)p; (void)name; Err bitreich.org 70
i return 0; Err bitreich.org 70
i@@ -119,7 +119,7 @@ hook_param_value(IcalParser *p, char *name, char *value) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-hook_entry_value(IcalParser *p, char *name, char *value) Err bitreich.org 70
i+hook_field_value(IcalParser *p, char *name, char *value) Err bitreich.org 70
i { Err bitreich.org 70
i if (strcasecmp(name, "TZID") == 0) Err bitreich.org 70
i if (strlcpy(p->current->tzid, value, sizeof p->current->tzid) >= Err bitreich.org 70
i@@ -144,9 +144,9 @@ hook_block_begin(IcalParser *p, char *name) Err bitreich.org 70
i Err bitreich.org 70
i for (int i = 0; ical_block_name[i] != NULL; i++) { Err bitreich.org 70
i if (strcasecmp(ical_block_name[i], name) == 0) { Err bitreich.org 70
i- if (p->block != ICAL_BLOCK_OTHER) Err bitreich.org 70
i+ if (p->blocktype != ICAL_BLOCK_OTHER) Err bitreich.org 70
i return ical_err(p, "BEGIN:V* in BEGIN:V*"); Err bitreich.org 70
i- p->block = i; Err bitreich.org 70
i+ p->blocktype = i; Err bitreich.org 70
i } Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -164,9 +164,9 @@ hook_block_end(IcalParser *p, char *name) Err bitreich.org 70
i if (p->current < p->stack) Err bitreich.org 70
i return ical_err(p, "more END: than BEGIN:"); Err bitreich.org 70
i Err bitreich.org 70
i- if (ical_block_name[p->block] != NULL && Err bitreich.org 70
i- strcasecmp(ical_block_name[p->block], name) == 0) Err bitreich.org 70
i- p->block = ICAL_BLOCK_OTHER; Err bitreich.org 70
i+ if (ical_block_name[p->blocktype] != NULL && Err bitreich.org 70
i+ strcasecmp(ical_block_name[p->blocktype], name) == 0) Err bitreich.org 70
i+ p->blocktype = ICAL_BLOCK_OTHER; Err bitreich.org 70
i return 0; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -241,8 +241,8 @@ ical_parse_contentline(IcalParser *p, char *s) Err bitreich.org 70
i return ical_err(p, "invalid property name"); Err bitreich.org 70
i c = *s, *s = '\0'; Err bitreich.org 70
i if (strcasecmp(name, "BEGIN") != 0 && strcasecmp(name, "END") != 0) Err bitreich.org 70
i- if ((err = hook_entry_name(p, name)) != 0 || Err bitreich.org 70
i- (err = CALL(p, fn_entry_name, name)) != 0) Err bitreich.org 70
i+ if ((err = hook_field_name(p, name)) != 0 || Err bitreich.org 70
i+ (err = CALL(p, fn_field_name, name)) != 0) Err bitreich.org 70
i return err; Err bitreich.org 70
i *s = c; Err bitreich.org 70
i sep = s; Err bitreich.org 70
i@@ -268,8 +268,8 @@ ical_parse_contentline(IcalParser *p, char *s) Err bitreich.org 70
i (err = CALL(p, fn_block_end, s)) != 0) Err bitreich.org 70
i return err; Err bitreich.org 70
i } else { Err bitreich.org 70
i- if ((err = hook_entry_value(p, name, s)) != 0 || Err bitreich.org 70
i- (err = CALL(p, fn_entry_value, name, s)) != 0) Err bitreich.org 70
i+ if ((err = hook_field_value(p, name, s)) != 0 || Err bitreich.org 70
i+ (err = CALL(p, fn_field_value, name, s)) != 0) Err bitreich.org 70
i return err; Err bitreich.org 70
i } Err bitreich.org 70
i return 0; Err bitreich.org 70
i@@ -312,7 +312,7 @@ ical_parse(IcalParser *p, FILE *fp) Err bitreich.org 70
i Err bitreich.org 70
i p->current = p->stack; Err bitreich.org 70
i p->linenum = 0; Err bitreich.org 70
i- p->block = ICAL_BLOCK_OTHER; Err bitreich.org 70
i+ p->blocktype = ICAL_BLOCK_OTHER; Err bitreich.org 70
i Err bitreich.org 70
i do { Err bitreich.org 70
i if ((l = ical_getline(&contentline, &line, &sz, fp)) < 0) { Err bitreich.org 70
1diff --git a/ical.h b/ical.h /scm/ics2txt/file/ical.h.gph bitreich.org 70
i@@ -25,10 +25,10 @@ struct IcalStack { Err bitreich.org 70
i Err bitreich.org 70
i struct IcalParser { Err bitreich.org 70
i /* function called while parsing in this order */ Err bitreich.org 70
i- int (*fn_entry_name)(IcalParser *, char *); Err bitreich.org 70
i+ int (*fn_field_name)(IcalParser *, char *); Err bitreich.org 70
i int (*fn_param_name)(IcalParser *, char *); Err bitreich.org 70
i int (*fn_param_value)(IcalParser *, char *, char *); Err bitreich.org 70
i- int (*fn_entry_value)(IcalParser *, char *, char *); Err bitreich.org 70
i+ int (*fn_field_value)(IcalParser *, char *, char *); Err bitreich.org 70
i int (*fn_block_begin)(IcalParser *, char *); Err bitreich.org 70
i int (*fn_block_end)(IcalParser *, char *); Err bitreich.org 70
i /* if returning non-zero then halt the parser */ Err bitreich.org 70
i@@ -37,7 +37,7 @@ struct IcalParser { Err bitreich.org 70
i char *errmsg; Err bitreich.org 70
i size_t linenum; Err bitreich.org 70
i char *tzid; Err bitreich.org 70
i- IcalBlock block; Err bitreich.org 70
i+ IcalBlock blocktype; Err bitreich.org 70
i IcalStack stack[ICAL_STACK_SIZE], *current; Err bitreich.org 70
i }; Err bitreich.org 70
i Err bitreich.org 70
1diff --git a/ics2tree.c b/ics2tree.c /scm/ics2txt/file/ics2tree.c.gph bitreich.org 70
i@@ -14,7 +14,7 @@ print_ruler(int level) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-fn_entry_name(IcalParser *p, char *name) Err bitreich.org 70
i+fn_field_name(IcalParser *p, char *name) Err bitreich.org 70
i { Err bitreich.org 70
i print_ruler(ical_get_level(p)); Err bitreich.org 70
i printf("name %s\n", name); Err bitreich.org 70
i@@ -41,7 +41,7 @@ fn_param_value(IcalParser *p, char *name, char *value) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-fn_entry_value(IcalParser *p, char *name, char *value) Err bitreich.org 70
i+fn_field_value(IcalParser *p, char *name, char *value) Err bitreich.org 70
i { Err bitreich.org 70
i size_t len; Err bitreich.org 70
i (void)name; Err bitreich.org 70
i@@ -69,10 +69,10 @@ main(int argc, char **argv) Err bitreich.org 70
i IcalParser p = {0}; Err bitreich.org 70
i arg0 = *argv++; Err bitreich.org 70
i Err bitreich.org 70
i- p.fn_entry_name = fn_entry_name; Err bitreich.org 70
i+ p.fn_field_name = fn_field_name; Err bitreich.org 70
i p.fn_block_begin = fn_block_begin; Err bitreich.org 70
i p.fn_param_value = fn_param_value; Err bitreich.org 70
i- p.fn_entry_value = fn_entry_value; Err bitreich.org 70
i+ p.fn_field_value = fn_field_value; Err bitreich.org 70
i Err bitreich.org 70
i if (*argv == NULL) { Err bitreich.org 70
i if (ical_parse(&p, stdin) < 0) Err bitreich.org 70
1diff --git a/ics2tsv.c b/ics2tsv.c /scm/ics2txt/file/ics2tsv.c.gph bitreich.org 70
i@@ -1,3 +1,4 @@ Err bitreich.org 70
i+#include <errno.h> Err bitreich.org 70
i #include <stdio.h> Err bitreich.org 70
i #include <stdlib.h> Err bitreich.org 70
i #include <string.h> Err bitreich.org 70
i@@ -8,25 +9,18 @@ Err bitreich.org 70
i Err bitreich.org 70
i #define FIELDS_MAX 64 Err bitreich.org 70
i Err bitreich.org 70
i-typedef struct Event Event; Err bitreich.org 70
i+typedef struct Field Field; Err bitreich.org 70
i+typedef struct Block Block; Err bitreich.org 70
i Err bitreich.org 70
i-struct Event { Err bitreich.org 70
i+struct Block { Err bitreich.org 70
i time_t beg, end; Err bitreich.org 70
i char *fields[FIELDS_MAX]; Err bitreich.org 70
i }; Err bitreich.org 70
i Err bitreich.org 70
i-static char *fields_time[] = { Err bitreich.org 70
i- "DTSTART", "DTEND", "DTSTAMP", "DUE", "EXDATE", "RDATE" Err bitreich.org 70
i-}; Err bitreich.org 70
i- Err bitreich.org 70
i-static char *fields_default[] = { Err bitreich.org 70
i- "ATTENDEE", "CATEGORY", "DESCRIPTION", "LOCATION", "SUMMARY", "URL" Err bitreich.org 70
i-}; Err bitreich.org 70
i- Err bitreich.org 70
i-static char **fields = fields_default; Err bitreich.org 70
i+Block block; Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-fn_entry_name(IcalParser *p, char *name) Err bitreich.org 70
i+fn_field_name(IcalParser *p, char *name) Err bitreich.org 70
i { Err bitreich.org 70
i printf("name %s\n", name); Err bitreich.org 70
i return 0; Err bitreich.org 70
i@@ -35,7 +29,14 @@ fn_entry_name(IcalParser *p, char *name) Err bitreich.org 70
i static int Err bitreich.org 70
i fn_block_begin(IcalParser *p, char *name) Err bitreich.org 70
i { Err bitreich.org 70
i- printf("begin %s\n", name); Err bitreich.org 70
i+ debug("begin %s\n", name); Err bitreich.org 70
i+ return 0; Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static int Err bitreich.org 70
i+fn_block_end(IcalParser *p, char *name) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ debug("end %s\n", name); Err bitreich.org 70
i return 0; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -47,25 +48,26 @@ fn_param_value(IcalParser *p, char *name, char *value) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-fn_entry_value(IcalParser *p, char *name, char *value) Err bitreich.org 70
i+fn_field_value(IcalParser *p, char *name, char *value) Err bitreich.org 70
i { Err bitreich.org 70
i- size_t len; Err bitreich.org 70
i- (void)name; Err bitreich.org 70
i- Err bitreich.org 70
i- if (ical_get_value(p, value, &len) < 0) Err bitreich.org 70
i- return -1; Err bitreich.org 70
i- Err bitreich.org 70
i- if (strcasecmp(name, "DTSTART") == 0 || Err bitreich.org 70
i- strcasecmp(name, "DTSTAMP") == 0 || Err bitreich.org 70
i- strcasecmp(name, "DTEND") == 0) { Err bitreich.org 70
i- time_t t = 0; Err bitreich.org 70
i- if (ical_get_time(p, value, &t) != 0) Err bitreich.org 70
i- warn("%s: %s", p->errmsg, value); Err bitreich.org 70
i- printf("epoch %lld\n", t); Err bitreich.org 70
i- } else { Err bitreich.org 70
i- printf("value %s\n", value); Err bitreich.org 70
i- } Err bitreich.org 70
i- Err bitreich.org 70
i+ static char *fieldmap[][2] = { Err bitreich.org 70
i+ [ICAL_BLOCK_VEVENT] = { "DTSTART", "DTEND" }, Err bitreich.org 70
i+ [ICAL_BLOCK_VTODO] = { NULL, "DUE" }, Err bitreich.org 70
i+ [ICAL_BLOCK_VJOURNAL] = { "DTSTAMP", NULL }, Err bitreich.org 70
i+ [ICAL_BLOCK_VFREEBUSY] = { "DTSTART", "DTEND" }, Err bitreich.org 70
i+ [ICAL_BLOCK_VALARM] = { "DTSTART", NULL }, Err bitreich.org 70
i+ [ICAL_BLOCK_OTHER] = { NULL, NULL }, Err bitreich.org 70
i+ }; Err bitreich.org 70
i+ char *beg, *end; Err bitreich.org 70
i+ Err bitreich.org 70
i+ beg = fieldmap[p->blocktype][0]; Err bitreich.org 70
i+ if (beg != NULL && strcasecmp(name, beg) == 0) Err bitreich.org 70
i+ if (ical_get_time(p, value, &block.beg) != 0) Err bitreich.org 70
i+ return -1; Err bitreich.org 70
i+ end = fieldmap[p->blocktype][1]; Err bitreich.org 70
i+ if (end != NULL && strcasecmp(name, end) == 0) Err bitreich.org 70
i+ if (ical_get_time(p, value, &block.end) != 0) Err bitreich.org 70
i+ return -1; Err bitreich.org 70
i return 0; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -75,10 +77,11 @@ main(int argc, char **argv) Err bitreich.org 70
i IcalParser p = {0}; Err bitreich.org 70
i arg0 = *argv++; Err bitreich.org 70
i Err bitreich.org 70
i- p.fn_entry_name = fn_entry_name; Err bitreich.org 70
i+ p.fn_field_name = fn_field_name; Err bitreich.org 70
i p.fn_block_begin = fn_block_begin; Err bitreich.org 70
i+ p.fn_block_end = fn_block_end; Err bitreich.org 70
i p.fn_param_value = fn_param_value; Err bitreich.org 70
i- p.fn_entry_value = fn_entry_value; Err bitreich.org 70
i+ p.fn_field_value = fn_field_value; Err bitreich.org 70
i Err bitreich.org 70
i if (*argv == NULL) { Err bitreich.org 70
i if (ical_parse(&p, stdin) < 0) Err bitreich.org 70
.
Response:
text/plain