summaryrefslogtreecommitdiff
path: root/glpk-5.0/examples/cal.mod
blob: 2555182e0dbb4cf8c5e5d79ad57d248165bee550 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* cal.mod - print an ASCII calendar of the given year */

/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */

param year, integer, >= 0001, <= 3999, default 2010;

param first_day{m in 1..12}, integer, >= 0, <= 6, :=
      time2str(str2time(year & "-" & m & "-01", "%Y-%m-%d"), "%w");

param days_in_month{m in 1..12}, integer, >= 28, <= 31, :=
      (str2time(year + (if m < 12 then 0 else 1) & "-" &
         (if m < 12 then m+1 else 1) & "-01", "%Y-%m-%d") -
      str2time(year & "-" & m & "-01", "%Y-%m-%d")) / 86400;

param foo{m in 1..12, k in 0..5, d in 0..6}, integer, :=
      7 * k + d + 1 - first_day[m];

param cal{m in 1..12, k in 0..5, d in 0..6}, integer, :=
      if 1 <= foo[m,k,d] and foo[m,k,d] <= days_in_month[m] then
         foo[m,k,d];

printf "\n";
printf "%33s%04d\n", "", year;
printf "\n";
for {t in 1..12 by 3}
{     for {m in t..t+2}
      {  printf "%7s%-14s", "", time2str(str2time(m, "%m"), "%B");
         printf{0..0: m < t+2} "   ";
      }
      printf "\n";
      for {m in t..t+2}
      {  printf "  S  M Tu  W Th  F  S";
         printf{0..0: m < t+2} "   ";
      }
      printf "\n";
      for {k in 0..5}
      {  for {m in t..t+2}
         {  for {d in 0..6}
            {  printf{0..0: cal[m,k,d]  = 0} "   ";
               printf{0..0: cal[m,k,d] != 0} " %2d", cal[m,k,d];
            }
            printf{0..0: m < t+2} "   ";
         }
         printf "\n";
      }
}
printf "\n";

end;