tsv2agenda: more straightforward approach for generating output - ics2txt - convert icalendar .ics file to plain text
(HTM) git clone git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Tags
(DIR) README
---
(DIR) commit 46202b022c22d7e917ece6bcdb5f8235ac314e09
(DIR) parent cf5ca595cdbe8c8d7d3358e58a43452cc222d7c2
(HTM) Author: Josuah Demangeon <me@josuah.net>
Date: Sun, 20 Jun 2021 21:27:23 +0200
tsv2agenda: more straightforward approach for generating output
Diffstat:
M tsv2agenda.c | 36 +++++++++++++++++--------------
1 file changed, 20 insertions(+), 16 deletions(-)
---
(DIR) diff --git a/tsv2agenda.c b/tsv2agenda.c
@@ -59,7 +59,7 @@ print_time(struct tm *tm)
}
static void
-print_header1(struct tm *old, struct tm *new)
+print_header0(struct tm *old, struct tm *new)
{
int same;
@@ -70,7 +70,7 @@ print_header1(struct tm *old, struct tm *new)
}
static void
-print_header2(struct tm *beg, struct tm *end)
+print_header1(struct tm *beg, struct tm *end)
{
int same;
@@ -83,18 +83,26 @@ print_header2(struct tm *beg, struct tm *end)
}
static void
-print_header3(void)
+print_headerN(void)
{
print_date(NULL);
print_time(NULL);
}
static void
-print_row(AgendaCtx *ctx, char **fields, size_t i)
+print_header(AgendaCtx *ctx, struct tm *beg, struct tm *end, size_t *num)
{
- if (i > ctx->fieldnum || *fields[i] == '\0')
- return;
- fprintf(stdout, "%s\n", fields[i]);
+ switch ((*num)++) {
+ case 0:
+ print_header0(&ctx->beg, beg);
+ break;
+ case 1:
+ print_header1(beg, end);
+ break;
+ default:
+ print_headerN();
+ break;
+ }
}
static void
@@ -102,7 +110,6 @@ print(AgendaCtx *ctx, char **fields)
{
struct tm beg = {0}, end = {0};
time_t t;
- size_t i = FIELD_OTHER;
char const *e;
t = strtonum(fields[FIELD_BEG], INT64_MIN, INT64_MAX, &e);
@@ -120,14 +127,11 @@ print(AgendaCtx *ctx, char **fields)
localtime_r(&t, &end);
fputc('\n', stdout);
-
- print_header1(&ctx->beg, &beg);
- print_row(ctx, fields, i++);
- print_header2(&beg, &end);
- print_row(ctx, fields, i++);
- while (i < ctx->fieldnum) {
- print_header3();
- print_row(ctx, fields, i++);
+ for (size_t i = FIELD_OTHER, row = 0; i < ctx->fieldnum; i++) {
+ if (*fields[i] == '\0')
+ continue;
+ print_header(ctx, &beg, &end, &row);
+ fprintf(stdout, "%s\n", fields[i]);
}
ctx->beg = beg;