SMOLNET PORTAL home about changes
isimplify the tcal format a lot, and add a manpage for it - 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 fef052ed4c0f485f6c87b75555dc2df664bb602e	/scm/ics2txt/commit/fef052ed4c0f485f6c87b75555dc2df664bb602e.gph	bitreich.org	70
1parent 708175eee823de7ce8690d23f9a5adf1b0839a71	/scm/ics2txt/commit/708175eee823de7ce8690d23f9a5adf1b0839a71.gph	bitreich.org	70
hAuthor: Josuah Demangeon <me@josuah.net>	URL:mailto:me@josuah.net	bitreich.org	70
iDate:   Wed, 24 Jun 2020 22:59:31 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
isimplify the tcal format a lot, and add a manpage for it	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M Makefile                            |      28 ++++++++++++++++++++--------	Err	bitreich.org	70
i  M ics2tsv                             |      84 +++++++++++++++++++++----------	Err	bitreich.org	70
i  M tcal.5                              |      67 +++++++++++++++++--------------	Err	bitreich.org	70
i  M tcal2tsv                            |     102 ++++++++++++++++---------------	Err	bitreich.org	70
i  M tsv2tcal                            |      74 ++++++++++++++-----------------	Err	bitreich.org	70
i	Err	bitreich.org	70
i5 files changed, 201 insertions(+), 154 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,11 +1,23 @@	Err	bitreich.org	70
i-PREFIX        = /usr/local	Err	bitreich.org	70
i-BIN        = ics2tsv tsv2tcal tcal2tsv tsv2ics ics2txt	Err	bitreich.org	70
i-MAN1        = ics2txt.1	Err	bitreich.org	70
i+NAME = ics2txt	Err	bitreich.org	70
i+VERSION = 0.1	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-all:	Err	bitreich.org	70
i+BIN = ics2tsv tsv2tcal tcal2tsv tsv2ics ics2txt	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+PREFIX = /usr/local	Err	bitreich.org	70
i+MANPREFIX = ${PREFIX}/man	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+all: ${BIN}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+clean:	Err	bitreich.org	70
i+        rm -rf ${NAME}-${VERSION} *.gz	Err	bitreich.org	70
i 	Err	bitreich.org	70
i install:	Err	bitreich.org	70
i-        mkdir -p $(PREFIX)/bin	Err	bitreich.org	70
i-        cp $(BIN) $(PREFIX)/bin	Err	bitreich.org	70
i-        mkdir -p $(PREFIX)/share/man/man1	Err	bitreich.org	70
i-        cp $(MAN1) $(PREFIX)/share/man/man1	Err	bitreich.org	70
i+        mkdir -p ${DESTDIR}$(PREFIX)/bin	Err	bitreich.org	70
i+        cp $(BIN) ${DESTDIR}$(PREFIX)/bin	Err	bitreich.org	70
i+        mkdir -p ${DESTDIR}$(MANPREFIX)/man1	Err	bitreich.org	70
i+        cp *.1 ${DESTDIR}$(MANPREFIX)/man1	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 doc src ${BIN:=.c} ${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 b/ics2tsv	/scm/ics2txt/file/ics2tsv.gph	bitreich.org	70
i@@ -10,28 +10,53 @@ function mdays(mon, year)	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+function maketime(tm,	Err	bitreich.org	70
i+        sec, mon, day)	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+        sec = tm["sec"] + tm["min"] * 60 + tm["hour"] * 3600	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        day = tm["mday"] - 1	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (mon = tm["mon"] - 1; mon > 0; mon--)	Err	bitreich.org	70
i+                day = day + mdays(mon, tm["year"])	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        # constants: x * 365 + x / 400 - x / 100 + x / 4	Err	bitreich.org	70
i+        day = day + int(tm["year"] / 400) * 146097	Err	bitreich.org	70
i+        day = day + int(tm["year"] % 400 / 100) * 36524	Err	bitreich.org	70
i+        day = day + int(tm["year"] % 100 / 4) * 1461	Err	bitreich.org	70
i+        day = day + int(tm["year"] % 4 / 1) * 365	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        return sec + (day - 719527) * 86400	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+function ical_to_epoch(str, offset,	Err	bitreich.org	70
i+        tm)	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+        tm["year"] = substr(str,  1, 4)	Err	bitreich.org	70
i+        tm["mon"]  = substr(str,  5, 2)	Err	bitreich.org	70
i+        tm["mday"] = substr(str,  7, 2)	Err	bitreich.org	70
i+        tm["hour"] = substr(str, 10, 2)	Err	bitreich.org	70
i+        tm["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+        return maketime(tm) - offset	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function print_event(ev, fields,	Err	bitreich.org	70
i+        i)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        for (i = 1; i <= fields["len"]; i++)	Err	bitreich.org	70
i+                printf("%s%s", (i > 1 ? "\t" : ""), ev[fields[i]])	Err	bitreich.org	70
i+        printf("\n")	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i BEGIN {	Err	bitreich.org	70
i+        FIELDS = "DTSTART DTEND CATEGORIES LOCATION SUMMARY DESCRIPTION"	Err	bitreich.org	70
i+        fields["len"] = split(FIELDS, fields, " ")	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        # by default: "CATEGORIES" -> "cat", "LOCATION" -> "loc"...	Err	bitreich.org	70
i+        translate["DTSTART"] = "beg"	Err	bitreich.org	70
i+        translate["DTEND"] = "end"	Err	bitreich.org	70
i+	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@@ -39,26 +64,33 @@ BEGIN {	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+        for (i = 1; i <= fields["len"]; i++) {	Err	bitreich.org	70
i+                if (!(s = translate[fields[i]]))	Err	bitreich.org	70
i+                        s = tolower(substr(fields[i], 1, 3))	Err	bitreich.org	70
i+                printf("%s%s", (i > 1 ? "\t" : ""), s)	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        printf("\n")	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+        gsub("\r", "")	Err	bitreich.org	70
i+        gsub("\t", "\\\\t")	Err	bitreich.org	70
i+        gsub("^ *", "")	Err	bitreich.org	70
i+        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+                ev[type] = ev[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+                ev[type] = substr($0, i + 1, length($0) - i)	Err	bitreich.org	70
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+/^END:VEVENT/ {	Err	bitreich.org	70
i+        ev["DTSTART"] = ical_to_epoch(ev["DTSTART"], offset)	Err	bitreich.org	70
i+        ev["DTEND"] = ical_to_epoch(ev["DTEND"], offset)	Err	bitreich.org	70
i+        print_event(ev, fields)	Err	bitreich.org	70
i }	Err	bitreich.org	70
1diff --git a/tcal.5 b/tcal.5	/scm/ics2txt/file/tcal.5.gph	bitreich.org	70
i@@ -6,52 +6,57 @@	Err	bitreich.org	70
i .Sh NAME	Err	bitreich.org	70
i .	Err	bitreich.org	70
i .Nm tcal	Err	bitreich.org	70
i-.Nd plaintext calendar event notation format	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-TZ+0300	Err	bitreich.org	70
i+.Nd plaintext calendar for editing by hand on the go	Err	bitreich.org	70
i .	Err	bitreich.org	70
i .	Err	bitreich.org	70
i .Sh DESCRIPTION	Err	bitreich.org	70
i .	Err	bitreich.org	70
i-The	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-utility	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i+The first line contain	Err	bitreich.org	70
i+.Dq TZ+HHMM	Err	bitreich.org	70
i+with	Err	bitreich.org	70
i+.Dq +HHMM	Err	bitreich.org	70
i+as returned by	Err	bitreich.org	70
i+.D1 $ date +%z .	Err	bitreich.org	70
i .	Err	bitreich.org	70
i-.Sh FILES	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+Then empty line delimited event entries follow, with for each:	Err	bitreich.org	70
i+One line with the start date, one line with the end date,	Err	bitreich.org	70
i+formatted like:	Err	bitreich.org	70
i+.Dq %Y-%m-%d %H:%M	Err	bitreich.org	70
i .	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+Then one line per attribute, each formatted with:	Err	bitreich.org	70
i+optional space, attribute name, colon,	Err	bitreich.org	70
i+optional space, and attribute content,	Err	bitreich.org	70
i+end of line.	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+.Bd -literal	Err	bitreich.org	70
i+TZ+0200	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+2020-06-28 00:00	Err	bitreich.org	70
i+2020-06-05 00:00	Err	bitreich.org	70
i+ loc: 950-0994, Chuo Ward, Niigata, Japan	Err	bitreich.org	70
i+ sum: summer holidays	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+2020-06-29 13:30	Err	bitreich.org	70
i+2020-06-29 15:00	Err	bitreich.org	70
i+ loc: online, irc.freenode.net, #bitreich-en	Err	bitreich.org	70
i+ sum: bitreich irc invitation	Err	bitreich.org	70
i+ des: at this moment like all other moment, everyone invited on IRC	Err	bitreich.org	70
i+	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 foobar 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-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Sh HISTORY	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i+.Xr cal 1 ,	Err	bitreich.org	70
i+.Xr calendar 1	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 <author-name>	Err	bitreich.org	70
i-.Aq Mt <author-email>	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Sh CAVEATS	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Sh BUGS	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i+.An Josuah Demangeon	Err	bitreich.org	70
i+.Aq Mt me@josuah.net	Err	bitreich.org	70
1diff --git a/tcal2tsv b/tcal2tsv	/scm/ics2txt/file/tcal2tsv.gph	bitreich.org	70
i@@ -10,24 +10,45 @@ function mdays(mon, year)	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+function maketime(tm,	Err	bitreich.org	70
i+        sec, mon, day)	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+        sec = tm["sec"] + tm["min"] * 60 + tm["hour"] * 3600	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        day = tm["mday"] - 1	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (mon = tm["mon"] - 1; mon > 0; mon--)	Err	bitreich.org	70
i+                day = day + mdays(mon, tm["year"])	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        # constants: x * 365 + x / 400 - x / 100 + x / 4	Err	bitreich.org	70
i+        day = day + int(tm["year"] / 400) * 146097	Err	bitreich.org	70
i+        day = day + int(tm["year"] % 400 / 100) * 36524	Err	bitreich.org	70
i+        day = day + int(tm["year"] % 100 / 4) * 1461	Err	bitreich.org	70
i+        day = day + int(tm["year"] % 4 / 1) * 365	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        return sec + (day - 719527) * 86400	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+function text_to_epoch(str, tz,	Err	bitreich.org	70
i+        tm)	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+        tm["year"] = substr(str, 1, 4)	Err	bitreich.org	70
i+        tm["mon"] = substr(str, 6, 2)	Err	bitreich.org	70
i+        tm["mday"] = substr(str, 9, 2)	Err	bitreich.org	70
i+        tm["hour"] = substr(str, 12, 2)	Err	bitreich.org	70
i+        tm["min"] = substr(str, 15, 2)	Err	bitreich.org	70
i+        return maketime(tm) - tz	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+BEGIN {	Err	bitreich.org	70
i+        FIELDS = "beg end cat loc sum des"	Err	bitreich.org	70
i+        fields["len"] = split(FIELDS, fields, " ")	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (i = 1; i <= fields["len"]; i++) {	Err	bitreich.org	70
i+                pos[fields[i]] = i	Err	bitreich.org	70
i+                printf("%s%s", (i > 1 ? "\t" : ""), fields[i])	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+        printf("\n")	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i {	Err	bitreich.org	70
i@@ -35,47 +56,30 @@ function date_text(str, offset,	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+        TZOFFSET = substr($1, 3, 1) substr($0, 4, 2)*3600 + substr($0, 6, 2)*60	Err	bitreich.org	70
i+        while (getline && $0 ~ /^$/)	Err	bitreich.org	70
i+                continue	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+/^[0-9]+-[0-9]+-[0-9]+/ {	Err	bitreich.org	70
i+        if ("beg" in ev)	Err	bitreich.org	70
i+                ev["end"] = text_to_epoch($0, TZOFFSET)	Err	bitreich.org	70
i+        else	Err	bitreich.org	70
i+                ev["beg"] = text_to_epoch($0, TZOFFSET)	Err	bitreich.org	70
i+        next	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+        tag = $1	Err	bitreich.org	70
i+        sub("^ *[^ :]+: *", "")	Err	bitreich.org	70
i+        sub(":$", "", tag)	Err	bitreich.org	70
i+        ev[tag] = $0	Err	bitreich.org	70
i+        next	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+        for (i = 1; i <= fields["len"]; i++)	Err	bitreich.org	70
i+                printf("%s%s", (i > 1 ? "\t" : ""), ev[fields[i]])	Err	bitreich.org	70
i+        printf("\n")	Err	bitreich.org	70
i+        delete ev	Err	bitreich.org	70
i }	Err	bitreich.org	70
1diff --git a/tsv2tcal b/tsv2tcal	/scm/ics2txt/file/tsv2tcal.gph	bitreich.org	70
i@@ -10,88 +10,82 @@ function mdays(mon, year)	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+function gmtime(sec, tm)	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+function localtime(sec, tm,	Err	bitreich.org	70
i+        tz, h, m)	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+        return gmtime(sec + TZOFFSET, tm)	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+        "date +%z" | getline tz	Err	bitreich.org	70
i+        close("date +%z")	Err	bitreich.org	70
i+        TZOFFSET = substr(tz, 1, 1) substr(tz, 2, 2)*3600 + substr(tz, 4, 2)*60	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+        print("TZ" tz)	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+        FS = "\t"	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+NR == 1 {	Err	bitreich.org	70
i+        for (i = 1; i <= NF; i++)	Err	bitreich.org	70
i+                name[i] = $i	Err	bitreich.org	70
i+        next	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+        for (i = 1; i <= NF; i++)	Err	bitreich.org	70
i+                ev[name[i]] = $i	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        print("")	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+        localtime(ev["beg"] + offset, tm)	Err	bitreich.org	70
i+        printf("%04d-%02d-%02d %02d:%02d\n",	Err	bitreich.org	70
i+          tm["year"], tm["mon"], tm["mday"], tm["hour"], tm["min"])	Err	bitreich.org	70
i+        delete ev["beg"]	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+        localtime(ev["end"] + offset, tm)	Err	bitreich.org	70
i+        printf("%04d-%02d-%02d %02d:%02d\n",	Err	bitreich.org	70
i+          tm["year"], tm["mon"], tm["mday"], tm["hour"], tm["min"])	Err	bitreich.org	70
i+        delete ev["end"]	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (i = 1; i <= NF; i++) {	Err	bitreich.org	70
i+                if (name[i] in ev && ev[name[i]])	Err	bitreich.org	70
i+                        printf(" %s: %s\n", name[i], ev[name[i]])	Err	bitreich.org	70
i+        }	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+        delete ev	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("")	Err	bitreich.org	70
i }	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/ics2txt/commit/fef052ed4c0f48...
Content-Typetext/plain; charset=utf-8