| 36 |
|
|
| 37 |
#define ACTIVE_BOARD_HEIGHT 8 |
#define ACTIVE_BOARD_HEIGHT 8 |
| 38 |
|
|
| 39 |
#define STR_TOP_LEFT_MAX_LEN 40 |
#define STR_TOP_LEFT_MAX_LEN 80 |
| 40 |
#define STR_TOP_MIDDLE_MAX_LEN 20 |
#define STR_TOP_MIDDLE_MAX_LEN 40 |
| 41 |
#define STR_TOP_RIGHT_MAX_LEN 20 |
#define STR_TOP_RIGHT_MAX_LEN 40 |
| 42 |
|
|
| 43 |
|
static const char *get_time_str(char *s, size_t len) |
| 44 |
|
{ |
| 45 |
|
static const char *weekday[] = { |
| 46 |
|
"天", "一", "二", "三", "四", "五", "六"}; |
| 47 |
|
time_t curtime; |
| 48 |
|
struct tm local_tm; |
| 49 |
|
|
| 50 |
|
time(&curtime); |
| 51 |
|
localtime_r(&curtime, &local_tm); |
| 52 |
|
size_t j = strftime(s, len, "%b %d %H:%M 星期", &local_tm); |
| 53 |
|
|
| 54 |
|
if (j == 0 || j + strlen(weekday[local_tm.tm_wday]) + 1 > len) |
| 55 |
|
{ |
| 56 |
|
return NULL; |
| 57 |
|
} |
| 58 |
|
|
| 59 |
|
strncat(s, weekday[local_tm.tm_wday], len - 1 - j); |
| 60 |
|
|
| 61 |
|
return s; |
| 62 |
|
} |
| 63 |
|
|
| 64 |
void moveto(int row, int col) |
void moveto(int row, int col) |
| 65 |
{ |
{ |
| 206 |
ch = igetch(100); // 0.1 second |
ch = igetch(100); // 0.1 second |
| 207 |
if (ch == KEY_NULL || ch == KEY_TIMEOUT) // Ignore received bytes if no futher input |
if (ch == KEY_NULL || ch == KEY_TIMEOUT) // Ignore received bytes if no futher input |
| 208 |
{ |
{ |
| 209 |
|
#ifdef _DEBUG |
| 210 |
log_error("Ignore %d bytes of incomplete UTF8 character\n", str_len); |
log_error("Ignore %d bytes of incomplete UTF8 character\n", str_len); |
| 211 |
|
#endif |
| 212 |
str_len = 0; |
str_len = 0; |
| 213 |
break; |
break; |
| 214 |
} |
} |
| 595 |
|
|
| 596 |
strncpy(str_left_f, str_left, sizeof(str_left_f) - 1); |
strncpy(str_left_f, str_left, sizeof(str_left_f) - 1); |
| 597 |
str_left_f[sizeof(str_left_f) - 1] = '\0'; |
str_left_f[sizeof(str_left_f) - 1] = '\0'; |
| 598 |
len = split_line(str_left_f, STR_TOP_LEFT_MAX_LEN, &eol, &str_left_len, 1); |
len = split_line(str_left_f, STR_TOP_LEFT_MAX_LEN / 2, &eol, &str_left_len, 1); |
| 599 |
str_left_f[len] = '\0'; |
str_left_f[len] = '\0'; |
| 600 |
|
|
| 601 |
strncpy(str_middle_f, str_middle, sizeof(str_middle_f) - 1); |
strncpy(str_middle_f, str_middle, sizeof(str_middle_f) - 1); |
| 602 |
str_middle_f[sizeof(str_middle_f) - 1] = '\0'; |
str_middle_f[sizeof(str_middle_f) - 1] = '\0'; |
| 603 |
len = split_line(str_middle, STR_TOP_MIDDLE_MAX_LEN, &eol, &str_middle_len, 1); |
len = split_line(str_middle, STR_TOP_MIDDLE_MAX_LEN / 2, &eol, &str_middle_len, 1); |
| 604 |
str_middle_f[len] = '\0'; |
str_middle_f[len] = '\0'; |
| 605 |
|
|
| 606 |
strncpy(str_right_f, str_right, sizeof(str_right_f) - 1); |
strncpy(str_right_f, str_right, sizeof(str_right_f) - 1); |
| 607 |
str_right_f[sizeof(str_right_f) - 1] = '\0'; |
str_right_f[sizeof(str_right_f) - 1] = '\0'; |
| 608 |
len = split_line(str_right, STR_TOP_RIGHT_MAX_LEN, &eol, &str_right_len, 1); |
len = split_line(str_right, STR_TOP_RIGHT_MAX_LEN / 2, &eol, &str_right_len, 1); |
| 609 |
str_right_f[len] = '\0'; |
str_right_f[len] = '\0'; |
| 610 |
|
|
| 611 |
moveto(1, 0); |
moveto(1, 0); |
| 612 |
clrtoeol(); |
clrtoeol(); |
| 613 |
prints("\033[1;44;33m%s\033[37m%*s\033[33m%*s\033[m", |
prints("\033[1;44;33m%s\033[37m%*s%s\033[33m%*s%s\033[m", |
| 614 |
str_left_f, 44 - str_left_len, str_middle_f, 36, str_right_f); |
str_left_f, 44 - str_left_len - str_middle_len, "", |
| 615 |
|
str_middle_f, 36 - str_right_len, "", str_right_f); |
| 616 |
|
|
| 617 |
return 0; |
return 0; |
| 618 |
} |
} |