SMOLNET PORTAL home about changes
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
Original URLgopher://bitreich.org/0/scm/ics2txt/commit/54ba66bb7b1b7e...
Content-Typetext/plain; charset=utf-8