Home
       ttsv2tcal - ics2txt - convert icalendar .ics file to plain text
  HTML git clone git://bitreich.org/ics2txt git://hg6vgqziawt5s4dj.onion/ics2txt
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
       ---
       ttsv2tcal (1495B)
       ---
            1 #!/usr/bin/awk -f
            2 
            3 function isleap(year)
            4 {
            5         return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)
            6 }
            7 
            8 function mdays(mon, year)
            9 {
           10         return (mon == 2) ? (28 + isleap(year)) : (30 + (mon + (mon > 7)) % 2)
           11 }
           12 
           13 function gmtime(sec, tm)
           14 {
           15         tm["year"] = 1970
           16         while (sec >= (s = 86400 * (365 + isleap(tm["year"])))) {
           17                 tm["year"]++
           18                 sec -= s
           19         }
           20         tm["mon"] = 1
           21         while (sec >= (s = 86400 * mdays(tm["mon"], tm["year"]))) {
           22                 tm["mon"]++
           23                 sec -= s
           24         }
           25         tm["mday"] = 1
           26         while (sec >= (s = 86400)) {
           27                 tm["mday"]++
           28                 sec -= s
           29         }
           30         tm["hour"] = 0
           31         while (sec >= 3600) {
           32                 tm["hour"]++
           33                 sec -= 3600
           34         }
           35         tm["min"] = 0
           36         while (sec >= 60) {
           37                 tm["min"]++
           38                 sec -= 60
           39         }
           40         tm["sec"] = sec
           41 }
           42 
           43 function localtime(sec, tm,
           44         tz, h, m)
           45 {
           46         return gmtime(sec + TZOFFSET, tm)
           47 }
           48 
           49 BEGIN {
           50         "date +%z" | getline tz
           51         close("date +%z")
           52         TZOFFSET = substr(tz, 1, 1) substr(tz, 2, 2)*3600 + substr(tz, 4, 2)*60
           53 
           54         print("TZ" tz)
           55 
           56         FS = "\t"
           57 }
           58 
           59 NR == 1 {
           60         for (i = 1; i <= NF; i++)
           61                 name[i] = $i
           62         next
           63 }
           64 
           65 {
           66         for (i = 1; i <= NF; i++)
           67                 ev[name[i]] = $i
           68 
           69         print("")
           70 
           71         localtime(ev["beg"] + offset, tm)
           72         printf("%04d-%02d-%02d %02d:%02d\n",
           73           tm["year"], tm["mon"], tm["mday"], tm["hour"], tm["min"])
           74         delete ev["beg"]
           75 
           76         localtime(ev["end"] + offset, tm)
           77         printf("%04d-%02d-%02d %02d:%02d\n",
           78           tm["year"], tm["mon"], tm["mday"], tm["hour"], tm["min"])
           79         delete ev["end"]
           80 
           81         for (i = 1; i <= NF; i++) {
           82                 if (name[i] in ev && ev[name[i]])
           83                         printf(" %s: %s\n", name[i], ev[name[i]])
           84         }
           85 
           86         delete ev
           87 }
           88 
           89 END {
           90         print("")
           91 }