examples/cal.mod
changeset 2 4c8956a7bdf4
equal deleted inserted replaced
-1:000000000000 0:2465b65a744b
       
     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;