SMOLNET PORTAL home about changes
iadd a man page and a -1 flag - 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 4bcfcc3e64d33c6e67b3f6f6359e859d2ee0ff6b	/scm/ics2txt/commit/4bcfcc3e64d33c6e67b3f6f6359e859d2ee0ff6b.gph	bitreich.org	70
1parent 8894359aa6ad4ccc485901a8af9db03d1a2b4d5f	/scm/ics2txt/commit/8894359aa6ad4ccc485901a8af9db03d1a2b4d5f.gph	bitreich.org	70
hAuthor: Josuah Demangeon <me@josuah.net>	URL:mailto:me@josuah.net	bitreich.org	70
iDate:   Sat, 19 Jun 2021 12:15:14 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iadd a man page and a -1 flag	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M Makefile                            |       4 ++--	Err	bitreich.org	70
i  A ics2tsv.1                           |     150 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  M ics2tsv.c                           |      22 ++++++++++++++++++++--	Err	bitreich.org	70
i	Err	bitreich.org	70
i3 files changed, 172 insertions(+), 4 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/Makefile b/Makefile	/scm/ics2txt/file/Makefile.gph	bitreich.org	70
i@@ -11,7 +11,7 @@ SRC = ical.c base64.c util.c	Err	bitreich.org	70
i HDR = ical.h base64.h util.h	Err	bitreich.org	70
i OBJ = ${SRC:.c=.o}	Err	bitreich.org	70
i BIN = ics2tree ics2tsv	Err	bitreich.org	70
i-MAN1 = ics2txt.1	Err	bitreich.org	70
i+MAN1 = ics2txt.1 ics2tsv.1	Err	bitreich.org	70
i MAN5 = tcal.5	Err	bitreich.org	70
i 	Err	bitreich.org	70
i all: ${BIN}	Err	bitreich.org	70
i@@ -36,5 +36,5 @@ install:	Err	bitreich.org	70
i 	Err	bitreich.org	70
i dist: clean	Err	bitreich.org	70
i         mkdir -p ${NAME}-${VERSION}	Err	bitreich.org	70
i-        cp -r README Makefile bin ${SRC} ${NAME}-${VERSION}	Err	bitreich.org	70
i+        cp -r README Makefile bin ${MAN1} ${MAN5} ${SRC} ${NAME}-${VERSION}	Err	bitreich.org	70
i         tar -cf - ${NAME}-${VERSION} | gzip -c >${NAME}-${VERSION}.tar.gz	Err	bitreich.org	70
1diff --git a/ics2tsv.1 b/ics2tsv.1	/scm/ics2txt/file/ics2tsv.1.gph	bitreich.org	70
i@@ -0,0 +1,150 @@	Err	bitreich.org	70
i+.Dd $Mdocdate: Mar 1 2020$	Err	bitreich.org	70
i+.Dt ICS2TSV 1	Err	bitreich.org	70
i+.Os	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh NAME	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Nm ics2tsv	Err	bitreich.org	70
i+.Nd convert an icalendar.ics file to tsv	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh SYNOPSIS	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Nm ics2tsv	Err	bitreich.org	70
i+.Op Fl 1	Err	bitreich.org	70
i+.Op Fl f Ar fields	Err	bitreich.org	70
i+.Op Fl s Ar subsep	Err	bitreich.org	70
i+.Op Fl t Ar timefmt	Err	bitreich.org	70
i+.Ar [file.ics...] >file.tsv	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh DESCRIPTION	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+is a converter that parse icalendar format and produces lines of output.	Err	bitreich.org	70
i+Every line represents an element delimited by	Err	bitreich.org	70
i+.Dq BEGIN:	Err	bitreich.org	70
i+and	Err	bitreich.org	70
i+.Dq  END:	Err	bitreich.org	70
i+among	Err	bitreich.org	70
i+.Dq VEVENT ,	Err	bitreich.org	70
i+.Dq VTODO ,	Err	bitreich.org	70
i+.Dq VJOURNAL ,	Err	bitreich.org	70
i+.Dq VFREEBUSY ,	Err	bitreich.org	70
i+and	Err	bitreich.org	70
i+.Dq VALARM .	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+The lines are filled with tab-delimited fields, with the first ones:	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Bl -enum	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.It	Err	bitreich.org	70
i+Element type, as encountered after	Err	bitreich.org	70
i+.Dq BEGIN	Err	bitreich.org	70
i+and	Err	bitreich.org	70
i+.Dq END ;	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.It	Err	bitreich.org	70
i+Start date, present for	Err	bitreich.org	70
i+.Dq VEVENT ,	Err	bitreich.org	70
i+.Dq VJOURNAL ,	Err	bitreich.org	70
i+.Dq VFREEBUSY ,	Err	bitreich.org	70
i+and	Err	bitreich.org	70
i+.Dq VALARM	Err	bitreich.org	70
i+types.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.It	Err	bitreich.org	70
i+End date, present for	Err	bitreich.org	70
i+.Dq VEVENT ,	Err	bitreich.org	70
i+.Dq VTODO ,	Err	bitreich.org	70
i+.Dq VFREEBUSY ,	Err	bitreich.org	70
i+and	Err	bitreich.org	70
i+.Dq VALARM	Err	bitreich.org	70
i+types.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.It	Err	bitreich.org	70
i+Reserved for future use.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.El	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+And the other fields starting from	Err	bitreich.org	70
i+.Pq 5.	Err	bitreich.org	70
i+chosen by the	Err	bitreich.org	70
i+.Fl f	Err	bitreich.org	70
i+flag.	Err	bitreich.org	70
i+By default:	Err	bitreich.org	70
i+.Dq "CATEGORIES,LOCATION,SUMMARY,DESCRIPTION" .	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Bl -tag	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.It Fl 1	Err	bitreich.org	70
i+Show the name of the columns on the first line before the content.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.It Fl f Ar field1,field2,field3...	Err	bitreich.org	70
i+Chooses the fields from the icalendar to display, in this order,	Err	bitreich.org	70
i+separated by a comma	Err	bitreich.org	70
i+.Pq Sq \&,	Err	bitreich.org	70
i+and case-insensitive	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.It Fl s Ar subsep	Err	bitreich.org	70
i+When there are multiple fields with the same value, they are	Err	bitreich.org	70
i+concatenated with	Err	bitreich.org	70
i+.Ar subsep	Err	bitreich.org	70
i+separator, by default a comma	Err	bitreich.org	70
i+.Pq Sq \&, .	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.It Fl t Ar timefmt	Err	bitreich.org	70
i+Dates from 2nd and 3rd fields are formatted with a	Err	bitreich.org	70
i+.Xr strftime 3	Err	bitreich.org	70
i+string	Err	bitreich.org	70
i+.Ar timeftm ,	Err	bitreich.org	70
i+by default in seconds since 1970/01/01.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.El	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh EXAMPLES	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+Convert a calendar from HTTP	Err	bitreich.org	70
i+.Pa .ics	Err	bitreich.org	70
i+to custom	Err	bitreich.org	70
i+.Pa .txt	Err	bitreich.org	70
i+sorted by start date:	Err	bitreich.org	70
i+.Dl curl "$url.ics" | ics2tsv | sort -n -k 1,1 | tsv2tsv	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+Split an	Err	bitreich.org	70
i+.ics	Err	bitreich.org	70
i+file according to the category, saved as	Err	bitreich.org	70
i+.Pa .tsv :	Err	bitreich.org	70
i+.Bd -literal	Err	bitreich.org	70
i+ics2tsv -f CATEGORIES icalendar.ics | awk -F '\et' '{ print >>($6".tsv") }\'	Err	bitreich.org	70
i+.Ed	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh SEE ALSO	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Xr awk 1 ,	Err	bitreich.org	70
i+.Xr cal 1 ,	Err	bitreich.org	70
i+.Xr calendar 1 ,	Err	bitreich.org	70
i+.Xr date 1 ,	Err	bitreich.org	70
i+.Xr sort 1	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh STANDARDS	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Rs	Err	bitreich.org	70
i+.%A Desruisseaux	Err	bitreich.org	70
i+.%D September 2009	Err	bitreich.org	70
i+.%T Internet Calendaring and Scheduling Core Object Specification (iCalendar)	Err	bitreich.org	70
i+.%R RFC 5545	Err	bitreich.org	70
i+.Re	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh AUTHORS	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.An Josuah Demangeon Aq Mt me@josuah.net	Err	bitreich.org	70
1diff --git a/ics2tsv.c b/ics2tsv.c	/scm/ics2txt/file/ics2tsv.c.gph	bitreich.org	70
i@@ -24,6 +24,7 @@ struct Block {	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 int flag_1 = 0;	Err	bitreich.org	70
i static char default_fields[] = "CATEGORIES,LOCATION,SUMMARY,DESCRIPTION";	Err	bitreich.org	70
i static char *flag_s = ",";	Err	bitreich.org	70
i static char *flag_t = NULL;	Err	bitreich.org	70
i@@ -46,6 +47,9 @@ fn_block_begin(IcalParser *p, char *name)	Err	bitreich.org	70
i         (void)p;	Err	bitreich.org	70
i         (void)name;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        if (p->blocktype == ICAL_BLOCK_OTHER)	Err	bitreich.org	70
i+                return 0;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         memset(&block, 0, sizeof block);	Err	bitreich.org	70
i         return 0;	Err	bitreich.org	70
i }	Err	bitreich.org	70
i@@ -72,6 +76,9 @@ fn_block_end(IcalParser *p, char *name)	Err	bitreich.org	70
i                 printf("\t%s", buf);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        /* reserved for recurring events */	Err	bitreich.org	70
i+        printf("\t%s", "(null)");	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         for (int i = 0; fields[i] != NULL; i++) {	Err	bitreich.org	70
i                 fputc('\t', stdout);	Err	bitreich.org	70
i                 if (block.fields[i] != NULL)	Err	bitreich.org	70
i@@ -134,7 +141,8 @@ fn_field_value(IcalParser *p, char *name, char *value)	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i usage(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        fprintf(stderr, "usage: %s [-f fields] [-s subsep] [-t timefmt] [file...]", arg0);	Err	bitreich.org	70
i+        fprintf(stderr,"usage: %s [-1] [-f fields] [-s subsep] [-t timefmt]"	Err	bitreich.org	70
i+            " [file...]\n", arg0);	Err	bitreich.org	70
i         exit(1);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -153,8 +161,11 @@ main(int argc, char **argv)	Err	bitreich.org	70
i         p.fn_param_value = fn_param_value;	Err	bitreich.org	70
i         p.fn_field_value = fn_field_value;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        while ((c = getopt(argc, argv, "f:s:t:")) != -1) {	Err	bitreich.org	70
i+        while ((c = getopt(argc, argv, "1f:s:t:")) != -1) {	Err	bitreich.org	70
i                 switch (c) {	Err	bitreich.org	70
i+                case '1':	Err	bitreich.org	70
i+                        flag_1 = 1;	Err	bitreich.org	70
i+                        break;	Err	bitreich.org	70
i                 case 'f':	Err	bitreich.org	70
i                         flag_f = optarg;	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i@@ -179,6 +190,13 @@ main(int argc, char **argv)	Err	bitreich.org	70
i         } while ((fields[i++] = strsep(&flag_f, ",")) != NULL);	Err	bitreich.org	70
i         fields[i] = NULL;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        if (flag_1) {	Err	bitreich.org	70
i+                printf("%s\t%s\t%s", "TYPE", "BEG", "END");	Err	bitreich.org	70
i+                for (i = 0; fields[i] != NULL; i++)	Err	bitreich.org	70
i+                        printf("\t%s", fields[i]);	Err	bitreich.org	70
i+                fputc('\n', stdout);	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         if (*argv == NULL || strcmp(*argv, "-") == 0) {	Err	bitreich.org	70
i                 debug("converting *stdin*");	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/4bcfcc3e64d33c...
Content-Typetext/plain; charset=utf-8