SMOLNET PORTAL home about changes
isplit the role of parsing and formatting through a simple TSV intermediate format - 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 37b4e99568c76d39376244f8f85fcf0dcfc95bd9	/scm/ics2txt/commit/37b4e99568c76d39376244f8f85fcf0dcfc95bd9.gph	bitreich.org	70
1parent 7ef52e239bfc8757d45f3d868920dba32dcb5b61	/scm/ics2txt/commit/7ef52e239bfc8757d45f3d868920dba32dcb5b61.gph	bitreich.org	70
hAuthor: Josuah Demangeon <me@josuah.net>	URL:mailto:me@josuah.net	bitreich.org	70
iDate:   Mon,  2 Mar 2020 01:15:03 +0100	Err	bitreich.org	70
i	Err	bitreich.org	70
isplit the role of parsing and formatting through a simple TSV intermediate format	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M Makefile                            |       2 +-	Err	bitreich.org	70
i  M README                              |      84 ++-----------------------------	Err	bitreich.org	70
i  D ics2txt                             |     168 -------------------------------	Err	bitreich.org	70
i  A ics2txt-back                        |      81 ++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  A ics2txt-ics                         |      91 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  A ics2txt-tsv                         |      64 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  A ics2txt-txt                         |      97 ++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  M ics2txt.1                           |      49 +++++++++++++++++++++++--------	Err	bitreich.org	70
i	Err	bitreich.org	70
i8 files changed, 374 insertions(+), 262 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@@ -1,4 +1,4 @@	Err	bitreich.org	70
i-BIN        = ics2txt	Err	bitreich.org	70
i+BIN        = ics2txt-*	Err	bitreich.org	70
i MAN1        = ics2txt.1	Err	bitreich.org	70
i 	Err	bitreich.org	70
i all:	Err	bitreich.org	70
1diff --git a/README b/README	/scm/ics2txt/file/README.gph	bitreich.org	70
i@@ -1,83 +1,7 @@	Err	bitreich.org	70
i-ics2txt	Err	bitreich.org	70
i-=======	Err	bitreich.org	70
i+sical	Err	bitreich.org	70
i+=====	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-*ics2txt* is an awk scripts to deal with iCal [1] format to publish,	Err	bitreich.org	70
i-display and convert *.ics files.	Err	bitreich.org	70
i+*sical* is set of awk scripts to deal with iCal [1] format to publish,	Err	bitreich.org	70
i+display and convert *.ics files, though a simple central TSV format.	Err	bitreich.org	70
i 	Err	bitreich.org	70
i [1]: https://tools.ietf.org/rfc/rfc5545.txt	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-Sample output:	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-2019-02-02	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-07:30        Welcome to FOSDEM 2019	Err	bitreich.org	70
i-07:55        Janson	Err	bitreich.org	70
i-        FOSDEM welcome and opening talk.	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-08:30        The State of Go	Err	bitreich.org	70
i-09:00        UD2.120 (Chavanne)	Err	bitreich.org	70
i-        Go 1.12 is planned to be released in February 2019 and this talk	Err	bitreich.org	70
i-        covers what's coming up with it.We'll talk about Go Modules, the	Err	bitreich.org	70
i-        proposals for Go 2, and all of the new things you might have missed.	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-09:30        HTTP/3	Err	bitreich.org	70
i-10:30        UD2.208 (Decroly)	Err	bitreich.org	70
i-        HTTP/3 is the next coming HTTP version. This time TCP is replaced by	Err	bitreich.org	70
i-        the new transport protocol QUIC and things are different yet again!	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-10:05        Minimalism matters	Err	bitreich.org	70
i-10:25        K.4.201	Err	bitreich.org	70
i-        Minimalism matters in computing. To trust systems we need to be able	Err	bitreich.org	70
i-        to understand them completely. Openssl heartbleed disaster was caused	Err	bitreich.org	70
i-        by code no longer being minimalistic, even if it is free and open	Err	bitreich.org	70
i-        source software. Hardware manfucturers and proprietary closed source	Err	bitreich.org	70
i-        solutions make things even worse with expectations of intrusion to	Err	bitreich.org	70
i-        privacy and backdoors if we don't aim for free hardware, software and	Err	bitreich.org	70
i-        minimalism. In this talk I will discuss minimalism in a broad context	Err	bitreich.org	70
i-        and narrow down on what the free software community can aim for.	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-2019-02-03	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-07:55        Microkernel virtualization under one roof	Err	bitreich.org	70
i-08:30        AW1.121	Err	bitreich.org	70
i-        Today's off-the-shell virtualization solution is ridden with	Err	bitreich.org	70
i-        complexity. Application of virtualization call for trustworthy	Err	bitreich.org	70
i-        solutions. Complexity defeats trust.Microkernels with virtualization	Err	bitreich.org	70
i-        extensions and user-level VMMs on top are a approach to mitigate	Err	bitreich.org	70
i-        complexity. Modern microkernels like seL4, the NOVA microhypervisor,	Err	bitreich.org	70
i-        Genode's -hw- kernel or Fiasco.OC are such promising candidates.	Err	bitreich.org	70
i-        Fortunately and unfortunately, the diversity come with fragmentation	Err	bitreich.org	70
i-        of the small microkernel community. There are several VMMs for each	Err	bitreich.org	70
i-        platform tight to a specific microkernel, rendering it unusable	Err	bitreich.org	70
i-        across various kernels.Genode supports several kernels already, so	Err	bitreich.org	70
i-        that unification of virtualization interfaces for VMMs across kernels	Err	bitreich.org	70
i-        seem to come into reach. Does it ? The talk will cover the venture	Err	bitreich.org	70
i-        and current state of harmonization hardware-assisted virtualization	Err	bitreich.org	70
i-        interfaces to fit into the Genode OS framework.	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-14:40        FOSDEM infrastructure review	Err	bitreich.org	70
i-14:55        H.2215 (Ferrer)	Err	bitreich.org	70
i-        Informational and fun.	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-15:00        2019 - Fifty years of Unix and Linux advances	Err	bitreich.org	70
i-15:50        Janson	Err	bitreich.org	70
i-        2019 marks the fiftieth anniversary of Unix, but it is also the	Err	bitreich.org	70
i-        fiftieth anniversary of the ArpaNet/Internet, and people walking on	Err	bitreich.org	70
i-        the moon.  It marks the 50th anniversary of Woodstock, the beginning	Err	bitreich.org	70
i-        of America's LGBTQ movement at the Stonewall Inn in New York City,	Err	bitreich.org	70
i-        and maddog wrote his first program fifty years ago.  It was also in	Err	bitreich.org	70
i-        1969 that he shaved for the last time.2019 marks the 30th year of the	Err	bitreich.org	70
i-        World Wide Web, the 25th anniversary of V1.0 of the Linux kernel, and	Err	bitreich.org	70
i-        of many GNU/Linux distributions starting.  2019 also marks the	Err	bitreich.org	70
i-        twentieth anniversary of the Linux Professional Institute.All of	Err	bitreich.org	70
i-        these years, and anniversaries.....but why has Unix (and its younger	Err	bitreich.org	70
i-        offspring Linux) lasted so long?   What was different about Unix that	Err	bitreich.org	70
i-        caused it to survive and flourish?   Why is it important today, and	Err	bitreich.org	70
i-        how can we take it further?  How should we celebrate 2019?  While	Err	bitreich.org	70
i-        maddog does not have all the answers, he tries to make the answers he	Err	bitreich.org	70
i-        does have interesting and fun to know.	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-15:55        Closing FOSDEM 2019	Err	bitreich.org	70
i-16:00        Janson	Err	bitreich.org	70
i-        Some closing words.  Don't miss it!	Err	bitreich.org	70
i-	Err	bitreich.org	70
1diff --git a/ics2txt b/ics2txt	/scm/ics2txt/file/ics2txt.gph	bitreich.org	70
i@@ -1,168 +0,0 @@	Err	bitreich.org	70
i-#!/usr/bin/awk -f	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# display iCal entries in plain text	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-function leap(yrs)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        return (yrs % 4 == 0) && (yrs % 100 != 0) || (yrs % 400 == 0)	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-function days_per_month(mth, yrs)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        if (mth == 2)	Err	bitreich.org	70
i-                return 28 + leap(yrs)	Err	bitreich.org	70
i-        else	Err	bitreich.org	70
i-                return 30 + (mth - (mth > 7)) % 2	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-function to_sec(yrs, mth, day, hrs, min, sec)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        while (--mth >= 1)	Err	bitreich.org	70
i-                day += days_per_month(mth, yrs)	Err	bitreich.org	70
i-        while (--yrs >= 1970)	Err	bitreich.org	70
i-                day += 365 + leap(yrs)	Err	bitreich.org	70
i-        return (((((day - 1) * 24) + hrs) * 60) + min) * 60 + sec	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-function to_date(fmt, sec)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        for (yrs = 1970; sec >= (s = 3600 * 24 * (365 + leap(yrs))); yrs++)	Err	bitreich.org	70
i-                sec -= s	Err	bitreich.org	70
i-        for (mth = 1; sec >= (s = 3600 * 24 * days_per_month(mth, yrs)); mth++)	Err	bitreich.org	70
i-                sec -= s	Err	bitreich.org	70
i-        for (day = 1; sec >= (s = 3600 * 24); day++)	Err	bitreich.org	70
i-                sec -= s	Err	bitreich.org	70
i-        for (hrs = 0; sec >= 3600; hrs++)	Err	bitreich.org	70
i-                sec -= 3600	Err	bitreich.org	70
i-        for (min = 0; sec >= 60; min++)	Err	bitreich.org	70
i-                sec -= 60	Err	bitreich.org	70
i-        return sprintf(fmt, yrs, mth, day, hrs, min, sec)	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-function date_ical(str, offset) {	Err	bitreich.org	70
i-        yrs = substr(str,  1, 4)	Err	bitreich.org	70
i-        mth = substr(str,  5, 2)	Err	bitreich.org	70
i-        day = substr(str,  7, 2)	Err	bitreich.org	70
i-        hrs = substr(str, 10, 2)	Err	bitreich.org	70
i-        min = substr(str, 12, 2)	Err	bitreich.org	70
i-        if (substr(str, 16, 1) == "Z")	Err	bitreich.org	70
i-                return to_sec(yrs, mth, day, hrs, min, 0)	Err	bitreich.org	70
i-        else	Err	bitreich.org	70
i-                return to_sec(yrs, mth, day, hrs, min, 0) - offset	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-function date_iso8601(date, offset)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        yrs = substr(date,  1, 4)	Err	bitreich.org	70
i-        mth = substr(date,  6, 2)	Err	bitreich.org	70
i-        day = substr(date,  9, 2)	Err	bitreich.org	70
i-        hrs = substr(date, 12, 2)	Err	bitreich.org	70
i-        min = substr(date, 15, 2)	Err	bitreich.org	70
i-        return to_sec(yrs, mth, day, hrs, min, 0) - offset	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-function swap(array, a, b)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        tmp = array[a]	Err	bitreich.org	70
i-        array[a] = array[b]	Err	bitreich.org	70
i-        array[b] = tmp	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-function sort(array, beg, end)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        if (beg >= end)                                        # end recursion	Err	bitreich.org	70
i-                return	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        a = beg + 1;                                        # #1 is the pivot	Err	bitreich.org	70
i-        b = end	Err	bitreich.org	70
i-        while (a < b) {	Err	bitreich.org	70
i-                while (a < b && array[a] <= array[beg])        # beg: skip lesser	Err	bitreich.org	70
i-                        a++	Err	bitreich.org	70
i-                while (a < b && array[b] > array[beg])        # end: skip greater	Err	bitreich.org	70
i-                        b--	Err	bitreich.org	70
i-                swap(array, a, b);                        # found 2 misplaced	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (array[beg] > array[a])                        # put the pivot back	Err	bitreich.org	70
i-                swap(array, beg, a)	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        sort(array, beg, a - 1);                        # sort lower half	Err	bitreich.org	70
i-        sort(array, a, end);                                # sort higher half	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-function parse_ical(list, offset)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        FS = "[:;]"	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        while (getline) {	Err	bitreich.org	70
i-                gsub("\r", " "); gsub("\\\\[ntr]", "  "); gsub("\\\\", "")	Err	bitreich.org	70
i-                gsub("^ *", ""); gsub(" *$", "")	Err	bitreich.org	70
i-                gsub(" *<[a-zA-Z0-9/]*>* *", "")	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                if (match($0, "^ ")) {	Err	bitreich.org	70
i-                        event[type] = event[type] substr($0, 2, length($0) - 1)	Err	bitreich.org	70
i-                } else {	Err	bitreich.org	70
i-                        type = $1	Err	bitreich.org	70
i-                        i = index($0, ":")	Err	bitreich.org	70
i-                        event[type] = substr($0, i + 1, length($0) - i)	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                if ($0 ~ /END:VEVENT/)	Err	bitreich.org	70
i-                        list[++n] = sprintf("%d\t%d\t%s\t%s\t%s\t%s",	Err	bitreich.org	70
i-                            date_ical(event["DTSTART"], offset),	Err	bitreich.org	70
i-                            date_ical(event["DTEND"], offset),	Err	bitreich.org	70
i-                            event["SUMMARY"],	Err	bitreich.org	70
i-                            event["LOCATION"],	Err	bitreich.org	70
i-                            event["DESCRIPTION"])	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-        sort(list, 1, n)	Err	bitreich.org	70
i-        return n	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-function print_fold(prefix, s, n)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        while (s != "") {	Err	bitreich.org	70
i-                line = substr(s, 1, n)	Err	bitreich.org	70
i-                if (length(s) > n) sub(" +[^ \t\r\n]*$", "", line)	Err	bitreich.org	70
i-                print prefix line	Err	bitreich.org	70
i-                s = substr(s, length(line) + 2)	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-function print_entry(beg, end, summary, location, description, offset)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        b = to_date("%04d-%02d-%02d %02d:%02d", beg + offset)	Err	bitreich.org	70
i-        e = to_date("%04d-%02d-%02d %02d:%02d", end + offset)	Err	bitreich.org	70
i-        date = substr(b, 1, 10)	Err	bitreich.org	70
i-        hour_beg = substr(b, 12)	Err	bitreich.org	70
i-        hour_end = substr(e, 12)	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (date != last_date) print "\n" date	Err	bitreich.org	70
i-        print "\n" hour_beg "\t" summary	Err	bitreich.org	70
i-        done = 0	Err	bitreich.org	70
i-        if (category) printf("%s\t%s\n", !done++ ? hour_end : "", category)	Err	bitreich.org	70
i-        if (location) printf("%s\t%s\n", !done++ ? hour_end : "", location)	Err	bitreich.org	70
i-        if (description) {	Err	bitreich.org	70
i-                printf("%s", !done++ ? hour_end : "")	Err	bitreich.org	70
i-                print_fold("\t", description, 70)	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        last_date = date	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-BEGIN {	Err	bitreich.org	70
i-        "date +%z" | getline offset_str	Err	bitreich.org	70
i-        close("date +%z")	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        offset = substr(offset_str, 2, 2) * 3600	Err	bitreich.org	70
i-        offset += substr(offset_str, 4, 2) * 60	Err	bitreich.org	70
i-        if (substr(offset_str, 1, 1) == "-")	Err	bitreich.org	70
i-                offset *= -1	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        n = parse_ical(list, offset)	Err	bitreich.org	70
i-        for (i = 1; i <= n; i++) {	Err	bitreich.org	70
i-                split(list[i], arr, "\t")	Err	bitreich.org	70
i-                print_entry(arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], offset)	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-        print ""	Err	bitreich.org	70
i-}	Err	bitreich.org	70
1diff --git a/ics2txt-back b/ics2txt-back	/scm/ics2txt/file/ics2txt-back.gph	bitreich.org	70
i@@ -0,0 +1,81 @@	Err	bitreich.org	70
i+#!/usr/bin/awk -f	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function isleap(year)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function mdays(mon, year)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        return (mon == 2) ? (28 + isleap(year)) : (30 + (mon + (mon > 7)) % 2)	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function timegm(year, mon, mday, hour, min, sec)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        while (--mon >= 1)	Err	bitreich.org	70
i+                mday += mdays(mon, year)	Err	bitreich.org	70
i+        while (--year >= 1970)	Err	bitreich.org	70
i+                mday += 365 + isleap(year)	Err	bitreich.org	70
i+        return (((((mday - 1) * 24) + hour) * 60) + min) * 60 + sec	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function date_text(str, offset,	Err	bitreich.org	70
i+        year, mon, mday, hour, min)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        year = substr(str,  1, 4)	Err	bitreich.org	70
i+        mon  = substr(str,  6, 2)	Err	bitreich.org	70
i+        mday = substr(str,  9, 2)	Err	bitreich.org	70
i+        hour = substr(str, 12, 2)	Err	bitreich.org	70
i+        min  = substr(str, 15, 2)	Err	bitreich.org	70
i+        return timegm(year, mon, mday, hour, min, 0) - offset	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        gsub(/\t/, " ")	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/^TZ[+-]/ {	Err	bitreich.org	70
i+        hour = substr($0, 4, 2)	Err	bitreich.org	70
i+        min = substr($0, 6, 2)	Err	bitreich.org	70
i+        tzoffset = substr(zone, 3, 1) hour * 3600 + min * 60	Err	bitreich.org	70
i+        next	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/^[0-9]+-[0-9]+-[0-9]+ / {	Err	bitreich.org	70
i+        time = date_text($1 " " $2, tzoffset)	Err	bitreich.org	70
i+        row++	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/^ / {	Err	bitreich.org	70
i+        d = $0	Err	bitreich.org	70
i+        sub(/^ */, "", d)	Err	bitreich.org	70
i+        des = des " " d	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/^$/ {	Err	bitreich.org	70
i+        if (beg)	Err	bitreich.org	70
i+                printf "%d\t%d\t%s\t%s\t%s\t%s\n", beg, end, cat, loc, sum, des	Err	bitreich.org	70
i+        beg = end = cat = loc = sum = des = "" 	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+row == 1 {	Err	bitreich.org	70
i+        beg = time	Err	bitreich.org	70
i+        sum = $0	Err	bitreich.org	70
i+        sub(/^[^ ]+ +[^ ]+ +/, "", sum)	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+row == 2 {	Err	bitreich.org	70
i+        end = time	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        line = $0	Err	bitreich.org	70
i+        sub(/^[^ ]+ +[^ ]+ +/, "", line)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        cat = line	Err	bitreich.org	70
i+        sub(/\].*/, "", cat)	Err	bitreich.org	70
i+        sub(/^\[/, "", cat)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        loc = line	Err	bitreich.org	70
i+        sub(/[^]]*\] */, "", loc)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        row = 0	Err	bitreich.org	70
i+}	Err	bitreich.org	70
1diff --git a/ics2txt-ics b/ics2txt-ics	/scm/ics2txt/file/ics2txt-ics.gph	bitreich.org	70
i@@ -0,0 +1,91 @@	Err	bitreich.org	70
i+#!/usr/bin/awk -f	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function isleap(year)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function mdays(mon, year)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        return (mon == 2) ? (28 + isleap(year)) : (30 + (mon + (mon > 7)) % 2)	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# Split the time in seconds since epoch into a table, with fields	Err	bitreich.org	70
i+# named as with gmtime(3): tm["year"], tm["mon"], tm["mday"],	Err	bitreich.org	70
i+# tm["hour"], tm["min"], tm["sec"]	Err	bitreich.org	70
i+function gmtime(sec, tm,	Err	bitreich.org	70
i+        s)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        tm["year"] = 1970	Err	bitreich.org	70
i+        while (sec >= (s = 86400 * (365 + isleap(tm["year"])))) {	Err	bitreich.org	70
i+                tm["year"]++	Err	bitreich.org	70
i+                sec -= s	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        tm["mon"] = 1	Err	bitreich.org	70
i+        while (sec >= (s = 86400 * mdays(tm["mon"], tm["year"]))) {	Err	bitreich.org	70
i+                tm["mon"]++	Err	bitreich.org	70
i+                sec -= s	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        tm["mday"] = 1	Err	bitreich.org	70
i+        while (sec >= (s = 86400)) {	Err	bitreich.org	70
i+                tm["mday"]++	Err	bitreich.org	70
i+                sec -= s	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        tm["hour"] = 0	Err	bitreich.org	70
i+        while (sec >= 3600) {	Err	bitreich.org	70
i+                tm["hour"]++	Err	bitreich.org	70
i+                sec -= 3600	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        tm["min"] = 0	Err	bitreich.org	70
i+        while (sec >= 60) {	Err	bitreich.org	70
i+                tm["min"]++	Err	bitreich.org	70
i+                sec -= 60	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        tm["sec"] = sec	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function print_fold(prefix, s, n)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        while (s != "") {	Err	bitreich.org	70
i+                line = substr(s, 1, n)	Err	bitreich.org	70
i+                if (length(s) > n) sub(" +[^ \t\r\n]*$", "", line)	Err	bitreich.org	70
i+                print prefix line	Err	bitreich.org	70
i+                s = substr(s, length(line) + 2)	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+BEGIN {	Err	bitreich.org	70
i+        print "BEGIN:VCALENDAR"	Err	bitreich.org	70
i+        print "VERSION:2.0"	Err	bitreich.org	70
i+        print "CALSCALE:GREGORIAN"	Err	bitreich.org	70
i+        print "METHOD:PUBLISH"	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        split($0, a, "\t")	Err	bitreich.org	70
i+        gmtime(a[1] + offset, beg)	Err	bitreich.org	70
i+        gmtime(a[2] + offset, end)	Err	bitreich.org	70
i+        cat = a[3]; loc = a[4]; sum = a[5]; des = a[6]	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        print ""	Err	bitreich.org	70
i+        print "BEGIN:VEVENT"	Err	bitreich.org	70
i+        printf "DTSTART:%04d%02d%02dT%02d%02d00Z\n",	Err	bitreich.org	70
i+          beg["year"], beg["mon"], beg["mday"], beg["hour"], beg["min"]	Err	bitreich.org	70
i+        printf "DTEND:%04d%02d%02dT%02d%02d00Z\n",	Err	bitreich.org	70
i+          end["year"], end["mon"], end["mday"], end["hour"], end["min"]	Err	bitreich.org	70
i+        print "SUMMARY:"        sum	Err	bitreich.org	70
i+        print "DESCRIPTION:"        des	Err	bitreich.org	70
i+        print "CATEGORIES:"        cat	Err	bitreich.org	70
i+        print "LOCATION:"        loc	Err	bitreich.org	70
i+        print "END:VEVENT"	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+END {	Err	bitreich.org	70
i+        print ""	Err	bitreich.org	70
i+        print "END:VCALENDAR"	Err	bitreich.org	70
i+}	Err	bitreich.org	70
1diff --git a/ics2txt-tsv b/ics2txt-tsv	/scm/ics2txt/file/ics2txt-tsv.gph	bitreich.org	70
i@@ -0,0 +1,64 @@	Err	bitreich.org	70
i+#!/usr/bin/awk -f	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function isleap(year)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function mdays(mon, year)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        return (mon == 2) ? (28 + isleap(year)) : (30 + (mon + (mon > 7)) % 2)	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function timegm(year, mon, mday, hour, min, sec)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        while (--mon >= 1)	Err	bitreich.org	70
i+                mday += mdays(mon, year)	Err	bitreich.org	70
i+        while (--year >= 1970)	Err	bitreich.org	70
i+                mday += 365 + isleap(year)	Err	bitreich.org	70
i+        return (((((mday - 1) * 24) + hour) * 60) + min) * 60 + sec	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function date_ical(str, offset,	Err	bitreich.org	70
i+        year, mon, mday, hour, min)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        year = substr(str,  1, 4)	Err	bitreich.org	70
i+        mon  = substr(str,  5, 2)	Err	bitreich.org	70
i+        mday = substr(str,  7, 2)	Err	bitreich.org	70
i+        hour = substr(str, 10, 2)	Err	bitreich.org	70
i+        min  = substr(str, 12, 2)	Err	bitreich.org	70
i+        offset = (substr(str, 16, 1) == "Z" ? 0 : offset)	Err	bitreich.org	70
i+        return timegm(year, mon, mday, hour, min, 0) - offset	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+BEGIN {	Err	bitreich.org	70
i+        "date +%z" | getline offset_str	Err	bitreich.org	70
i+        close("date +%z")	Err	bitreich.org	70
i+        hour = substr($0, 4, 2)	Err	bitreich.org	70
i+        min = substr($0, 6, 2)	Err	bitreich.org	70
i+        tzoffset = substr(zone, 3, 1) hour * 3600 + min * 60	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        FS = "[:;]"	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        gsub("\r", ""); gsub("\t", "\\\\t")	Err	bitreich.org	70
i+        gsub("^ *", ""); gsub(" *$", "")	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (match($0, "^ ")) {	Err	bitreich.org	70
i+                event[type] = event[type] substr($0, 2, length($0) - 1)	Err	bitreich.org	70
i+        } else {	Err	bitreich.org	70
i+                type = $1	Err	bitreich.org	70
i+                i = index($0, ":")	Err	bitreich.org	70
i+                event[type] = substr($0, i + 1, length($0) - i)	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if ($0 ~ /^END:VEVENT/)	Err	bitreich.org	70
i+                printf("%d\t%d\t%s\t%s\t%s\t%s\n",	Err	bitreich.org	70
i+                  date_ical(event["DTSTART"], offset),	Err	bitreich.org	70
i+                  date_ical(event["DTEND"], offset),	Err	bitreich.org	70
i+                  event["CATEGORIES"],	Err	bitreich.org	70
i+                  event["LOCATION"],	Err	bitreich.org	70
i+                  event["SUMMARY"],	Err	bitreich.org	70
i+                  event["DESCRIPTION"])	Err	bitreich.org	70
i+}	Err	bitreich.org	70
1diff --git a/ics2txt-txt b/ics2txt-txt	/scm/ics2txt/file/ics2txt-txt.gph	bitreich.org	70
i@@ -0,0 +1,97 @@	Err	bitreich.org	70
i+#!/usr/bin/awk -f	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function isleap(year)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function mdays(mon, year)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        return (mon == 2) ? (28 + isleap(year)) : (30 + (mon + (mon > 7)) % 2)	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# Split the time in seconds since epoch into a table, with fields	Err	bitreich.org	70
i+# named as with gmtime(3): tm["year"], tm["mon"], tm["mday"],	Err	bitreich.org	70
i+# tm["hour"], tm["min"], tm["sec"]	Err	bitreich.org	70
i+function gmtime(sec, tm,	Err	bitreich.org	70
i+        s)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        tm["year"] = 1970	Err	bitreich.org	70
i+        while (sec >= (s = 86400 * (365 + isleap(tm["year"])))) {	Err	bitreich.org	70
i+                tm["year"]++	Err	bitreich.org	70
i+                sec -= s	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        tm["mon"] = 1	Err	bitreich.org	70
i+        while (sec >= (s = 86400 * mdays(tm["mon"], tm["year"]))) {	Err	bitreich.org	70
i+                tm["mon"]++	Err	bitreich.org	70
i+                sec -= s	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        tm["mday"] = 1	Err	bitreich.org	70
i+        while (sec >= (s = 86400)) {	Err	bitreich.org	70
i+                tm["mday"]++	Err	bitreich.org	70
i+                sec -= s	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        tm["hour"] = 0	Err	bitreich.org	70
i+        while (sec >= 3600) {	Err	bitreich.org	70
i+                tm["hour"]++	Err	bitreich.org	70
i+                sec -= 3600	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        tm["min"] = 0	Err	bitreich.org	70
i+        while (sec >= 60) {	Err	bitreich.org	70
i+                tm["min"]++	Err	bitreich.org	70
i+                sec -= 60	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        tm["sec"] = sec	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function print_fold(prefix, s, n)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        while (s != "") {	Err	bitreich.org	70
i+                line = substr(s, 1, n)	Err	bitreich.org	70
i+                if (length(s) > n) sub(" +[^ \t\r\n]*$", "", line)	Err	bitreich.org	70
i+                print prefix line	Err	bitreich.org	70
i+                s = substr(s, length(line) + 2)	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+BEGIN {	Err	bitreich.org	70
i+        cmd = "date +%z"	Err	bitreich.org	70
i+        cmd | getline zone	Err	bitreich.org	70
i+        close(cmd)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        hour = substr(zone, 2, 2)	Err	bitreich.org	70
i+        min = substr(zone, 4, 2)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        offset = (substr(zone, 1, 1) "1") * (hour * 3600 + min * 60)	Err	bitreich.org	70
i+        print "TZ" zone	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        split($0, a, "\t")	Err	bitreich.org	70
i+        gmtime(a[1] + offset, beg)	Err	bitreich.org	70
i+        gmtime(a[2] + offset, end)	Err	bitreich.org	70
i+        cat = a[3]; loc = a[4]; sum = a[5]; des = a[6]	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        print ""	Err	bitreich.org	70
i+        printf "%04d-%02d-%02d %02d:%02d  ",	Err	bitreich.org	70
i+          beg["year"], beg["mon"], beg["mday"], beg["hour"], beg["min"]	Err	bitreich.org	70
i+        print sum	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        printf "%04d-%02d-%02d %02d:%02d  ",	Err	bitreich.org	70
i+          end["year"], end["mon"], end["mday"], end["hour"], end["min"]	Err	bitreich.org	70
i+        print "[" cat "] " loc	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        sub("^ *", "", des)	Err	bitreich.org	70
i+        sub(" *$", "", des)	Err	bitreich.org	70
i+        if (des)	Err	bitreich.org	70
i+                print_fold("   ", des, 80)	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+END {	Err	bitreich.org	70
i+        print ""	Err	bitreich.org	70
i+}	Err	bitreich.org	70
1diff --git a/ics2txt.1 b/ics2txt.1	/scm/ics2txt/file/ics2txt.1.gph	bitreich.org	70
i@@ -1,4 +1,4 @@	Err	bitreich.org	70
i-.Dd $Mdocdate: May 21 2018$	Err	bitreich.org	70
i+.Dd $Mdocdate: Mar 1 2020$	Err	bitreich.org	70
i .Dt ICS2TXT 1	Err	bitreich.org	70
i .Os	Err	bitreich.org	70
i .	Err	bitreich.org	70
i@@ -6,32 +6,54 @@	Err	bitreich.org	70
i .Sh NAME	Err	bitreich.org	70
i .	Err	bitreich.org	70
i .Nm ics2txt	Err	bitreich.org	70
i-.Nd convert ics file to a simple plain text format	Err	bitreich.org	70
i+.Nd convert ics file to simpler tsv or txt formats	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 Ar ics-file...	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i+.Nm ics2txt-tsv Ar <file.ics >file.tsv	Err	bitreich.org	70
i+.Nm ics2txt-txt Ar <file.tsv >file.txt	Err	bitreich.org	70
i+.Nm ics2txt-ics Ar <file.tsv >file.ics	Err	bitreich.org	70
i+.Nm ics2txt-back Ar <file.txt >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-displays iCalendar 	Err	bitreich.org	70
i-.Pq ical, Pa .ics	Err	bitreich.org	70
i-.Ar file	Err	bitreich.org	70
i-or stdin if not specified in the format described by the command:	Err	bitreich.org	70
i+convert iCalendar 	Err	bitreich.org	70
i+.Pq ical	Err	bitreich.org	70
i+.Ar file.ics	Err	bitreich.org	70
i+or stdin if not specified to a tab separated value format, with one	Err	bitreich.org	70
i+line per entry, and one column per field:	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Bl -offset 1n -width 1n -enum -compact	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.It	Err	bitreich.org	70
i+Begining (epoch)	Err	bitreich.org	70
i .	Err	bitreich.org	70
i+.It	Err	bitreich.org	70
i+End (epoch)	Err	bitreich.org	70
i .	Err	bitreich.org	70
i-.Sh ENVIRONMENT	Err	bitreich.org	70
i+.It	Err	bitreich.org	70
i+Category	Err	bitreich.org	70
i .	Err	bitreich.org	70
i-.Bl -tag -width 6n	Err	bitreich.org	70
i+.It	Err	bitreich.org	70
i+Location	Err	bitreich.org	70
i .	Err	bitreich.org	70
i-.It Ev TZ	Err	bitreich.org	70
i-Timezone to use for printing the dates.	Err	bitreich.org	70
i+.It	Err	bitreich.org	70
i+Summary	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.It description	Err	bitreich.org	70
i+description	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+The	Err	bitreich.org	70
i+.Sq \en	Err	bitreich.org	70
i+and	Err	bitreich.org	70
i+.Sq \et	Err	bitreich.org	70
i+charaters may represent newlines and tabs.	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@@ -39,6 +61,7 @@ Timezone to use for printing the dates.	Err	bitreich.org	70
i .Xr calendar 1 ,	Err	bitreich.org	70
i .Xr date 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@@ -51,4 +74,4 @@ Timezone to use for printing the dates.	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 mail@josuah.net	Err	bitreich.org	70
i+.An Josuah Demangeon Aq Mt me@josuah.net	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/ics2txt/commit/37b4e99568c76d...
Content-Typetext/plain; charset=utf-8