clock_up.c 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <unistd.h> // для sleep() и usleep()
  4. #include <signal.h> // для обработки сигналов
  5. // Функция определения времени года на английском
  6. const char* get_season(int month) {
  7. if (month == 12 || month == 1 || month == 2)
  8. return "Winter";
  9. else if (month >= 3 && month <= 5)
  10. return "Spring";
  11. else if (month >= 6 && month <= 8)
  12. return "Summer";
  13. else
  14. return "Autumn";
  15. }
  16. // Функция названия месяца на английском
  17. const char* get_month_name(int month) {
  18. const char* months[] = {"January", "February", "March", "April", "May", "June",
  19. "July", "August", "September", "October", "November", "December"};
  20. if (month >= 1 && month <= 12)
  21. return months[month - 1];
  22. else
  23. return "Unknown";
  24. }
  25. // Функция названия дня недели на английском
  26. const char* get_weekday_name(int weekday) {
  27. const char* days[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
  28. if (weekday >= 0 && weekday <= 6)
  29. return days[weekday];
  30. else
  31. return "Unknown";
  32. }
  33. // Обработчик сигнала SIGINT (Ctrl+C)
  34. void handle_sigint(int sig) {
  35. // Показываем курсор обратно и делаем перенос строки
  36. printf("\033[?25h\n");
  37. fflush(stdout);
  38. // Выход из программы
  39. _exit(0);
  40. }
  41. int main(int argc, char *argv[]) {
  42. // Устанавливаем обработчик сигнала SIGINT
  43. signal(SIGINT, handle_sigint);
  44. // Скрываем курсор
  45. printf("\033[?25l");
  46. fflush(stdout);
  47. while (1) {
  48. time_t rawtime;
  49. struct tm * timeinfo;
  50. // Получаем текущее время
  51. time(&rawtime);
  52. timeinfo = localtime(&rawtime);
  53. const char* season = get_season(timeinfo->tm_mon + 1);
  54. const char* month_name = get_month_name(timeinfo->tm_mon + 1);
  55. const char* weekday_name = get_weekday_name(timeinfo->tm_wday);
  56. // Возвращаем курсор в начало строки
  57. printf("\r %d\033[90m/\033[0m%s\033[90m/\033[0m%s \033[90;1m|\033[0m %d\033[90m/\033[0m%s \033[90;1m|\033[0m %02d\033[90m:\033[0m%02d\033[90m:\033[0m%02d",
  58. timeinfo->tm_year + 1900,
  59. season,
  60. month_name,
  61. timeinfo->tm_mday,
  62. weekday_name,
  63. timeinfo->tm_hour,
  64. timeinfo->tm_min,
  65. timeinfo->tm_sec);
  66. fflush(stdout);
  67. sleep(1); // Спим одну секунду
  68. }
  69. return 0;
  70. }
  71. // gcc clock_up.c -o clock_up