[9] | 1 | /* cal.mod - print an ASCII calendar of the given year */ |
---|
| 2 | |
---|
| 3 | /* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */ |
---|
| 4 | |
---|
| 5 | param year, integer, >= 0001, <= 3999, default 2010; |
---|
| 6 | |
---|
| 7 | param first_day{m in 1..12}, integer, >= 0, <= 6, := |
---|
| 8 | time2str(str2time(year & "-" & m & "-01", "%Y-%m-%d"), "%w"); |
---|
| 9 | |
---|
| 10 | param days_in_month{m in 1..12}, integer, >= 28, <= 31, := |
---|
| 11 | (str2time(year + (if m < 12 then 0 else 1) & "-" & |
---|
| 12 | (if m < 12 then m+1 else 1) & "-01", "%Y-%m-%d") - |
---|
| 13 | str2time(year & "-" & m & "-01", "%Y-%m-%d")) / 86400; |
---|
| 14 | |
---|
| 15 | param foo{m in 1..12, k in 0..5, d in 0..6}, integer, := |
---|
| 16 | 7 * k + d + 1 - first_day[m]; |
---|
| 17 | |
---|
| 18 | param cal{m in 1..12, k in 0..5, d in 0..6}, integer, := |
---|
| 19 | if 1 <= foo[m,k,d] and foo[m,k,d] <= days_in_month[m] then |
---|
| 20 | foo[m,k,d]; |
---|
| 21 | |
---|
| 22 | printf "\n"; |
---|
| 23 | printf "%33s%04d\n", "", year; |
---|
| 24 | printf "\n"; |
---|
| 25 | for {t in 1..12 by 3} |
---|
| 26 | { for {m in t..t+2} |
---|
| 27 | { printf "%7s%-14s", "", time2str(str2time(m, "%m"), "%B"); |
---|
| 28 | printf{0..0: m < t+2} " "; |
---|
| 29 | } |
---|
| 30 | printf "\n"; |
---|
| 31 | for {m in t..t+2} |
---|
| 32 | { printf " S M Tu W Th F S"; |
---|
| 33 | printf{0..0: m < t+2} " "; |
---|
| 34 | } |
---|
| 35 | printf "\n"; |
---|
| 36 | for {k in 0..5} |
---|
| 37 | { for {m in t..t+2} |
---|
| 38 | { for {d in 0..6} |
---|
| 39 | { printf{0..0: cal[m,k,d] = 0} " "; |
---|
| 40 | printf{0..0: cal[m,k,d] != 0} " %2d", cal[m,k,d]; |
---|
| 41 | } |
---|
| 42 | printf{0..0: m < t+2} " "; |
---|
| 43 | } |
---|
| 44 | printf "\n"; |
---|
| 45 | } |
---|
| 46 | } |
---|
| 47 | printf "\n"; |
---|
| 48 | |
---|
| 49 | end; |
---|