#include #include #include char * read_stream(char *s, size_t size, void *d) { return fgets(s, (int)size, (FILE *)d); } int main(void) { icalparser *parser = icalparser_new(); assert(parser); FILE *stream = stdin; assert(stream); icalparser_set_gen_data(parser, stream); for (;;) { char *line = icalparser_get_line(parser, read_stream); if (!line) { break; } icalcomponent *comp = icalparser_add_line(parser, line); if (!comp) { continue; } for (icalcompiter i = icalcomponent_begin_component( comp, ICAL_VEVENT_COMPONENT); icalcompiter_deref(&i); icalcompiter_next(&i)) { icalcomponent *c = icalcompiter_deref(&i); struct icaltimetype dts = icalcomponent_get_dtstart(c); icaltimezone *utc = icaltimezone_get_utc_timezone(); dts = icaltime_convert_to_zone(dts, utc); printf("%02u-%02u-%02u ", dts.year, dts.month, dts.day); printf("%02u:%02u ", dts.hour, dts.minute); const char *sum = icalcomponent_get_summary(c); if (sum) printf("%s\n", sum); } icalcomponent_free(comp); } icalparser_free(parser); }