-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmonth_calendar.sf
51 lines (40 loc) · 1.04 KB
/
month_calendar.sf
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
50
51
#!/usr/bin/ruby
var mons = Hash(
1 => 31,
2 => 28,
3 => 31,
4 => 30,
5 => 31,
6 => 30,
7 => 31,
8 => 31,
9 => 30,
10 => 31,
11 => 30,
12 => 31,
)
var t = Time.local
var day = (t.day);
var mon = (t.mon + 1);
var year = (t.year + 1900);
if (year % 400 == 0 || (year % 4 == 0 && (year % 100 != 0))) {
mons{2} = 29
}
year--
var st = (1 + year*365 + year//4 - year//100 + year//400);
for i (1 ..^ mon) { st += mons{i} }
#
## Displaying the calendar
#
var monName = t.strftime("%B");
"%*s\n%s\n".printf(
(monName.len + 5) / 2 + 11,
"%s %d".sprintf(monName, year + 1),
"Su Mo Tu We Th Fr Sa",
);
' ' * 3 * (st % 7) -> print;
for i (1..mons{mon}) {
printf(i == day ? "\e[7m%2d\e[0m " : "%2d ", i);
st+i %% 7 && ((i != mons{mon}) && ("\n".print));
}
"\n".print;