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