month_calendar.sf 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/usr/bin/ruby
  2. var mons = Hash(
  3. 1 => 31,
  4. 2 => 28,
  5. 3 => 31,
  6. 4 => 30,
  7. 5 => 31,
  8. 6 => 30,
  9. 7 => 31,
  10. 8 => 31,
  11. 9 => 30,
  12. 10 => 31,
  13. 11 => 30,
  14. 12 => 31,
  15. )
  16. var t = Time.local
  17. var day = (t.day);
  18. var mon = (t.mon + 1);
  19. var year = (t.year + 1900);
  20. if (year % 400 == 0 || (year % 4 == 0 && (year % 100 != 0))) {
  21. mons{2} = 29
  22. }
  23. year--
  24. var st = (1 + year*365 + year//4 - year//100 + year//400);
  25. for i (1 ..^ mon) { st += mons{i} }
  26. #
  27. ## Displaying the calendar
  28. #
  29. var monName = t.strftime("%B");
  30. "%*s\n%s\n".printf(
  31. (monName.len + 5) / 2 + 11,
  32. "%s %d".sprintf(monName, year + 1),
  33. "Su Mo Tu We Th Fr Sa",
  34. );
  35. ' ' * 3 * (st % 7) -> print;
  36. for i (1..mons{mon}) {
  37. printf(i == day ? "\e[7m%2d\e[0m " : "%2d ", i);
  38. st+i %% 7 && ((i != mons{mon}) && ("\n".print));
  39. }
  40. "\n".print;