Introduction
Introduction Statistics Contact Development Disclaimer Help
ics2tree.c - ics2txt - convert icalendar .ics file to plain text
git clone git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws…
Log
Files
Refs
Tags
README
---
ics2tree.c (1959B)
---
1 #include <unistd.h>
2 #include <errno.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <strings.h>
7 #include "ical.h"
8 #include "util.h"
9
10 #ifndef __OpenBSD__
11 #define pledge(...) 0
12 #endif
13
14 static void
15 print_ruler(int level)
16 {
17 while (level-- > 0)
18 fprintf(stdout, ": ");
19 }
20
21 static int
22 fn_field_name(IcalParser *p, char *name)
23 {
24 print_ruler(ical_get_level(p));
25 printf("name %s\n", name);
26 fflush(stdout);
27 return 0;
28 }
29
30 static int
31 fn_block_begin(IcalParser *p, char *name)
32 {
33 print_ruler(ical_get_level(p) - 1);
34 printf("begin %s\n", name);
35 fflush(stdout);
36 return 0;
37 }
38
39 static int
40 fn_param_value(IcalParser *p, char *name, char *value)
41 {
42 print_ruler(ical_get_level(p) + 1);
43 printf("param %s=%s\n", name, value);
44 fflush(stdout);
45 return 0;
46 }
47
48 static int
49 fn_field_value(IcalParser *p, char *name, char *value)
50 {
51 size_t len;
52 (void)name;
53
54 if (ical_get_value(p, value, &len) < 0)
55 return -1;
56 print_ruler(ical_get_level(p) + 1);
57 if (strcasecmp(name, "DTSTART") == 0 ||
58 strcasecmp(name, "DTSTAMP") == 0 ||
59 strcasecmp(name, "DTEND") == 0) {
60 time_t t;
61 if (ical_get_time(p, value, &t) != 0)
62 warn("%s: %s", p->errmsg, value);
63 printf("epoch %lld\n", t);
64 } else {
65 printf("value %s\n", value);
66 }
67 fflush(stdout);
68 return 0;
69 }
70
71 int
72 main(int argc, char **argv)
73 {
74 IcalParser p = {0};
75 arg0 = *argv++;
76
77 if (pledge("stdio", "") < 0)
78 err(1, "pledge: %s", strerror(errno));
79
80 p.fn_field_name = fn_field_name;
81 p.fn_block_begin = fn_block_begin;
82 p.fn_param_value = fn_param_value;
83 p.fn_field_value = fn_field_value;
84
85 if (*argv == NULL) {
86 if (ical_parse(&p, stdin) < 0)
87 err(1, "parsing stdin:%d: %s", p.linenum, p.errm…
88 }
89
90 for (; *argv != NULL; argv++, argc--) {
91 FILE *fp;
92
93 debug("converting \"%s\"", *argv);
94 if ((fp = fopen(*argv, "r")) == NULL)
95 err(1, "opening %s", *argv);
96 if (ical_parse(&p, fp) < 0)
97 err(1, "parsing %s:%d: %s", *argv, p.linenum, p.…
98 fclose(fp);
99 }
100 return 0;
101 }
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.