ttxt2ics - ics2txt - convert icalendar .ics file to plain text
(HTM) git clone git://bitreich.org/ics2txt git://hg6vgqziawt5s4dj.onion/ics2txt
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Tags
(DIR) README
---
ttxt2ics (2111B)
---
1 #!/usr/bin/awk -f
2
3 function prompt(msg)
4 {
5 if (TTY)
6 printf("%s", msg) >"/dev/stderr";
7 if (!getline str)
8 exit(1);
9 return str;
10 }
11
12 function parse_date(str, tm)
13 {
14 if (length(str) == 5) {
15 "date +%Y/%m/%d" | getline date
16 str = date " " str ;
17 close("date +%Y/%m/%d");
18 }
19
20 if (length(str) != 16) {
21 print("invalid date length") >"/dev/stderr";
22 return -1;
23 }
24
25 tm["yrs"] = substr(str, 1, 4);
26 if (! match(tm["yrs"], "^[0-9]+$")) {
27 print("invalid year: " tm["yrs"]) >"/dev/stderr";
28 return -1;
29 }
30
31 tm["mth"] = substr(str, 6, 2);
32 if (! match(tm["mth"], "^[0-1][0-9]$")) {
33 print("invalid month: " tm["mth"]) >"/dev/stderr";
34 return -1;
35 }
36
37 tm["day"] = substr(str, 9, 2);
38 if (! match(tm["day"], "^[0-3][0-9]$")) {
39 print("invalid day: " tm["day"]) >"/dev/stderr";
40 return -1;
41 }
42
43 tm["hrs"] = substr(str, 12, 2);
44 if (! match(tm["hrs"], "^[0-2][0-9]$")) {
45 print("invalid hours: " tm["hrs"]) >"/dev/stderr";
46 return -1;
47 }
48
49 tm["min"] = substr(str, 15, 2);
50 if (! match(tm["min"], "^[0-6][0-9]$")) {
51 print("invalid minutes: " tm["min"]) >"/dev/stderr";
52 return -1;
53 }
54
55 return 0;
56 }
57
58 BEGIN {
59 TTY = !system("tty >/dev/null");
60
61 if (TTY) {
62 "date +%Y" | getline yrs
63 close("date +%Y");
64 system("cal " yrs ">/dev/stderr");
65 system("date >/dev/stderr");
66 system("date +'%Y/%m/%d %H:%M' >/dev/stderr");
67 print("") >"/dev/stderr";
68 }
69
70 do beg = prompt("Start [YYYY/MM/DD HH:MM] or [HH:MM] for today: ");
71 while (parse_date(beg, tm_beg) == -1);
72
73 do end = prompt("End [YYYY/MM/DD HH:MM] or [HH:MM] for same day: ");
74 while (parse_date(end, tm_end) == -1);
75
76 sum = prompt("Summary: ");
77 cat = prompt("Category: ");
78 loc = prompt("Location: ");
79 des = prompt("Description: ");
80
81 print("BEGIN:VEVENT");
82 print("DTSTART:" \
83 tm_beg["yrs"] tm_beg["mth"] tm_beg["day"] "T" \
84 tm_beg["hrs"] tm_beg["min"] "00");
85 print("DTEND:" \
86 tm_end["yrs"] tm_end["mth"] tm_end["day"] "T" \
87 tm_end["hrs"] tm_end["min"] "00");
88 if (cat) print("CATEGORIES:" cat);
89 if (sum) print("SUMMARY:" sum);
90 if (des) print("DESCRIPTION:" des);
91 if (loc) print("LOCATION:" loc);
92 print("END:VEVENT");
93 }