Home
tsv2agenda: show everything by default - ics2txt - convert icalendar .ics file to plain text HTML git clone git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt DIR Log DIR Files DIR Refs DIR Tags DIR README --- DIR commit 44e416da284ed08d3ed7b47f2d70a333433930f4 DIR parent d1604d44d1926ce38a94073ad8d55b2c8a99d172 HTML Author: Josuah Demangeon <me@josuah.net> Date: Fri, 25 Jun 2021 22:46:59 +0200 tsv2agenda: show everything by default Diffstat: M tsv2agenda.1 | 2 +- M tsv2agenda.c | 46 ++++++++++++++++---------------- 2 files changed, 24 insertions(+), 24 deletions(-) --- DIR diff --git a/tsv2agenda.1 b/tsv2agenda.1 @@ -31,7 +31,7 @@ the output (if not empty). .It Fl f Ar fromdate Show only events starting from .Ar fromdate . -By default the current time: showing all future events. +By default show everything from the beggining. . .It Fl t Ar todate Show only events up to DIR diff --git a/tsv2agenda.c b/tsv2agenda.c @@ -185,26 +185,26 @@ print(AgendaCtx *ctx, char **fields) } static void -tsv_to_agenda(AgendaCtx *ctx, FILE *fp) +tsv2agenda(FILE *fp) { - char *ln1 = NULL, *ln2 = NULL; + AgendaCtx ctx = {0}; + char *line = NULL; size_t sz1 = 0, sz2 = 0; - if (ctx->linenum == 0) { + if (ctx.linenum == 0) { char *fields[FIELD_MAX]; - ctx->linenum++; - getline(&ln1, &sz1, fp); + ctx.linenum++; + getline(&line, &sz1, fp); if (ferror(fp)) err(1, "reading stdin: %s", strerror(errno)); if (feof(fp)) err(1, "empty input"); - - strchomp(ln1); - ctx->fieldnum = strsplit(ln1, fields, FIELD_MAX, "\t"); - if (ctx->fieldnum == FIELD_MAX) + strchomp(line); + ctx.fieldnum = strsplit(line, fields, FIELD_MAX, "\t"); + if (ctx.fieldnum == FIELD_MAX) err(1, "line 1: too many fields"); - if (ctx->fieldnum < FIELD_OTHER) + if (ctx.fieldnum < FIELD_OTHER) err(1, "line 1: not enough input columns"); if (strcasecmp(fields[0], "TYPE") != 0) err(1, "line 1: 1st column is not \"TYPE\""); @@ -214,29 +214,33 @@ tsv_to_agenda(AgendaCtx *ctx, FILE *fp) err(1, "line 1: 3rd column is not \"END\""); if (strcasecmp(fields[3], "RECUR") != 0) err(1, "line 1: 4th column is not \"RECUR\""); + + free(line); + line = NULL; } for (;;) { char *fields[FIELD_MAX]; - ctx->linenum++; - getline(&ln2, &sz2, fp); + ctx.linenum++; + getline(&line, &sz2, fp); if (ferror(fp)) err(1, "reading stdin: %s", strerror(errno)); if (feof(fp)) break; - strchomp(ln2); - if (strsplit(ln2, fields, FIELD_MAX, "\t") != ctx->fieldnum) + strchomp(line); + + if (strsplit(line, fields, FIELD_MAX, "\t") != ctx.fieldnum) err(1, "line %zd: bad number of columns", - ctx->linenum, strerror(errno)); + ctx.linenum, strerror(errno)); - print(ctx, fields); + print(&ctx, fields); } fputc('\n', stdout); - free(ln1); - free(ln2); + free(line); + line = NULL; } static void @@ -249,12 +253,8 @@ usage(void) int main(int argc, char **argv) { - AgendaCtx ctx = {0}; char c; - if ((flag_from = time(NULL)) == (time_t)-1) - err(1, "time: %s", strerror(errno)); - if (pledge("stdio", "") < 0) err(1, "pledge: %s", strerror(errno)); @@ -280,6 +280,6 @@ main(int argc, char **argv) argc -= optind; argv += optind; - tsv_to_agenda(&ctx, stdin); + tsv2agenda(stdin); return 0; }