7 #define printf(M, ...) _tty_printf(M, ##__VA_ARGS__)
9 unsigned int days_in_months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
26 unsigned int dayofweek(
unsigned int d,
unsigned int m,
unsigned int y) {
27 int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
31 return (y + y / 4 - y / 100 + y / 400 + t[m - 1] + d) % 7;
34 bool is_leap(uint32_t year) {
35 return (year & 3) == 0 && ((year % 25) != 0 || (year & 15) == 0);
38 unsigned int days_in_month(
unsigned int month,
unsigned int year) {
40 return is_leap(year) ? 29 : 28;
43 return days_in_months[month];
46 int month_by_name(
char* name,
int fallback) {
47 for(
int i = 0; i < 12; i++) {
48 if(
strcmp(months[i], name) == 0) {
56 void calendar(
int argc,
char** argv) {
65 month = month_by_name(argv[argc - 1], month);
68 char* days_of_week[7] = {
80 printf(
"%10s %d\n", months[month], year);
82 for(
int i = 0; i < 7; i++) {
84 printf(
"%c%c ", days_of_week[i][0], days_of_week[i][1]);
89 unsigned int first_day = dayofweek(1, month + 1, year);
91 printf(
"%*s", 3 * (first_day),
"");
93 for(
unsigned int i = 1; i <= days_in_month(month, year); i++) {
94 unsigned int dow = dayofweek(i, month + 1, year);
96 if(dow == 0 && i != 1) {
100 if((
int)i ==
tm.day &&
tm.month == month) {
sayori_time_t get_time()
Считывает время и передает в удобной структуре
Основные определения ядра
int strcmp(const char *s1, const char *s2)
Сравнение строк
void tty_setcolor(uint32_t color)
Изменение цвета текста