Загрузить файлы в «/»

This commit is contained in:
2025-05-07 19:33:35 +00:00
parent 7fd6c03c03
commit 964fee8368
5 changed files with 484 additions and 0 deletions

90
module_03.c Normal file
View File

@ -0,0 +1,90 @@
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include "pseudographic_font_3.h"
// Флаг для корректного завершения
static volatile sig_atomic_t keep_running = 1;
// Переменная для отслеживания обработчика SIGINT
static volatile int handler_set = 0;
// Обработчик сигнала SIGINT (Ctrl+C)
static void handle_sigint(int sig) {
(void)sig;
keep_running = 0;
printf("\033[2J\033[H\033[?25h");
fflush(stdout);
_exit(0);
}
// Функция для вывода псевдографического времени
static void print_pseudographic_time(int hours, int mins, int secs) {
if (hours < 0 || hours > 23 || mins < 0 || mins > 59 || secs < 0 || secs > 59) {
printf("\033[H\033[1mInvalid time: %02d:%02d:%02d\033[0m\n", hours, mins, secs);
fflush(stdout);
return;
}
char time_str[9];
snprintf(time_str, 9, "%02d:%02d:%02d", hours, mins, secs);
const char** chars[8];
for (int i = 0; i < 8; i++) {
chars[i] = get_pseudographic_char_3(time_str[i]);
}
printf("\033[H");
for (int row = 0; row < 3; row++) {
for (int i = 0; i < 8; i++) {
if (i == 2 || i == 5) {
printf("\033[1m\033[90m%s\033[0m", chars[i][row]);
} else {
printf("\033[1m\033[37m%s\033[0m", chars[i][row]);
}
}
printf("\n");
}
fflush(stdout);
}
int module_03_run(const char *arg) {
if (arg == NULL || strcmp(arg, "m3") != 0) {
return 0;
}
if (!handler_set) {
signal(SIGINT, handle_sigint);
handler_set = 1;
}
printf("\033[?25l\n\n\n");
fflush(stdout);
while (keep_running) {
time_t rawtime;
struct tm *timeinfo;
if (time(&rawtime) == (time_t)-1) {
printf("\033[H\033[1mFailed to get time\033[0m\n");
fflush(stdout);
sleep(1);
continue;
}
timeinfo = localtime(&rawtime);
if (timeinfo == NULL) {
printf("\033[H\033[1mFailed to parse time\033[0m\n");
fflush(stdout);
sleep(1);
continue;
}
print_pseudographic_time(timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
sleep(1);
}
return 0;
}

90
module_05.c Normal file
View File

@ -0,0 +1,90 @@
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include "pseudographic_font_5.h"
// Флаг для корректного завершения
static volatile sig_atomic_t keep_running = 1;
// Переменная для отслеживания обработчика SIGINT
static volatile int handler_set = 0;
// Обработчик сигнала SIGINT (Ctrl+C)
static void handle_sigint(int sig) {
(void)sig;
keep_running = 0;
printf("\033[2J\033[H\033[?25h");
fflush(stdout);
_exit(0);
}
// Функция для вывода псевдографического времени
static void print_pseudographic_time(int hours, int mins, int secs) {
if (hours < 0 || hours > 23 || mins < 0 || mins > 59 || secs < 0 || secs > 59) {
printf("\033[H\033[1mInvalid time: %02d:%02d:%02d\033[0m\n", hours, mins, secs);
fflush(stdout);
return;
}
char time_str[9];
snprintf(time_str, 9, "%02d:%02d:%02d", hours, mins, secs);
const char** chars[8];
for (int i = 0; i < 8; i++) {
chars[i] = get_pseudographic_char_5(time_str[i]);
}
printf("\033[H");
for (int row = 0; row < 5; row++) {
for (int i = 0; i < 8; i++) {
if (i == 2 || i == 5) {
printf("\033[1m\033[90m%s\033[0m", chars[i][row]);
} else {
printf("\033[1m\033[37m%s\033[0m", chars[i][row]);
}
}
printf("\n");
}
fflush(stdout);
}
int module_05_run(const char *arg) {
if (arg == NULL || strcmp(arg, "m5") != 0) {
return 0;
}
if (!handler_set) {
signal(SIGINT, handle_sigint);
handler_set = 1;
}
printf("\033[?25l\n\n\n\n\n");
fflush(stdout);
while (keep_running) {
time_t rawtime;
struct tm *timeinfo;
if (time(&rawtime) == (time_t)-1) {
printf("\033[H\033[1mFailed to get time\033[0m\n");
fflush(stdout);
sleep(1);
continue;
}
timeinfo = localtime(&rawtime);
if (timeinfo == NULL) {
printf("\033[H\033[1mFailed to parse time\033[0m\n");
fflush(stdout);
sleep(1);
continue;
}
print_pseudographic_time(timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
sleep(1);
}
return 0;
}

90
module_07.c Normal file
View File

@ -0,0 +1,90 @@
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include "pseudographic_font_7.h"
// Флаг для корректного завершения
static volatile sig_atomic_t keep_running = 1;
// Переменная для отслеживания обработчика SIGINT
static volatile int handler_set = 0;
// Обработчик сигнала SIGINT (Ctrl+C)
static void handle_sigint(int sig) {
(void)sig;
keep_running = 0;
printf("\033[2J\033[H\033[?25h");
fflush(stdout);
_exit(0);
}
// Функция для вывода псевдографического времени
static void print_pseudographic_time(int hours, int mins, int secs) {
if (hours < 0 || hours > 23 || mins < 0 || mins > 59 || secs < 0 || secs > 59) {
printf("\033[H\033[1mInvalid time: %02d:%02d:%02d\033[0m\n", hours, mins, secs);
fflush(stdout);
return;
}
char time_str[9];
snprintf(time_str, 9, "%02d:%02d:%02d", hours, mins, secs);
const char** chars[8];
for (int i = 0; i < 8; i++) {
chars[i] = get_pseudographic_char_7(time_str[i]);
}
printf("\033[H");
for (int row = 0; row < 8; row++) {
for (int i = 0; i < 8; i++) {
if (i == 2 || i == 5) {
printf("\033[1m\033[90m%s\033[0m", chars[i][row]);
} else {
printf("\033[1m\033[37m%s\033[0m", chars[i][row]);
}
}
printf("\n");
}
fflush(stdout);
}
int module_07_run(const char *arg) {
if (arg == NULL || strcmp(arg, "m7") != 0) {
return 0;
}
if (!handler_set) {
signal(SIGINT, handle_sigint);
handler_set = 1;
}
printf("\033[?25l\n\n\n\n\n\n\n\n");
fflush(stdout);
while (keep_running) {
time_t rawtime;
struct tm *timeinfo;
if (time(&rawtime) == (time_t)-1) {
printf("\033[H\033[1mFailed to get time\033[0m\n");
fflush(stdout);
sleep(1);
continue;
}
timeinfo = localtime(&rawtime);
if (timeinfo == NULL) {
printf("\033[H\033[1mFailed to parse time\033[0m\n");
fflush(stdout);
sleep(1);
continue;
}
print_pseudographic_time(timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
sleep(1);
}
return 0;
}

95
pseudographic_font_3.h Normal file
View File

@ -0,0 +1,95 @@
#ifndef PSEUDOGRAPHIC_FONT_3_H
#define PSEUDOGRAPHIC_FONT_3_H
// Псевдографический шрифт для цифр 0-9 и разделителя (:).
// Каждый символ представлен 3 строками по 3 символа (UTF-8).
// Используемые символы: ┌ ─ ┐ └ ┘ ┤ и пробел.
// Определение псевдографического шрифта (3x3 символа)
static const char* font_3[11][3] = {
// 0
{
"┌─┐",
"│ │",
"└─┘"
},
// 1
{
" ┌┐",
"",
""
},
// 2
{
"┌─┐",
"┌─┘",
"└─┘"
},
// 3
{
"┌─┐",
" ─┤",
"└─┘"
},
// 4
{
"┌ ┐",
"└─┤",
""
},
// 5
{
"┌─┐",
"└─┐",
"└─┘"
},
// 6
{
"┌─┐",
"├─┐",
"└─┘"
},
// 7
{
"┌─┐",
"",
""
},
// 8
{
"┌─┐",
"├─┤",
"└─┘"
},
// 9
{
"┌─┐",
"└─┤",
"└─┘"
},
// : (разделитель)
{
" ┌┐ ",
" ├┤ ",
" └┘ "
}
};
// Пустой символ для некорректных входных данных
static const char* empty_char[3] = {
" ",
" ",
" "
};
// Функция для получения псевдографического символа по значению
const char** get_pseudographic_char_3(char c) {
if (c >= '0' && c <= '9') {
return font_3[c - '0'];
} else if (c == ':') {
return font_3[10];
}
return empty_char;
}
#endif

119
pseudographic_font_5.h Normal file
View File

@ -0,0 +1,119 @@
#ifndef PSEUDOGRAPHIC_FONT_5_H
#define PSEUDOGRAPHIC_FONT_5_H
// Псевдографический шрифт для цифр 0-9 и разделителя (:).
// Каждый символ представлен 5 строками по 5 символов (UTF-8).
// Используемые символы: ╔ ═ ╗ ╚ ╝ ╣ и пробел.
// Определение псевдографического шрифта (5x5 символа)
static const char* font_5[11][5] = {
// 0
{
"╔═══╗",
"║ ║",
"║ ║",
"║ ║",
"╚═══╝"
},
// 1
{
" ╔═╗",
" ║ ║",
"",
"",
" ═╝"
},
// 2
{
"╔═══╗",
"",
"╔═══╝",
"",
"╚═══╝"
},
// 3
{
"╔═══╗",
"",
" ══╣",
"",
"╚═══╝"
},
// 4
{
"╔ ╗",
"║ ║",
"╚═══╣",
"",
""
},
// 5
{
"╔═══╗",
"",
"╚═══╗",
"",
"╚═══╝"
},
// 6
{
"╔═══╗",
"",
"╠═══╗",
"║ ║",
"╚═══╝"
},
// 7
{
"╔═══╗",
"",
" ══╣",
"",
""
},
// 8
{
"╔═══╗",
"║ ║",
"╠═══╣",
"║ ║",
"╚═══╝"
},
// 9
{
"╔═══╗",
"║ ║",
"╚═══╣",
"",
"╚═══╝"
},
// : (разделитель)
{
" ╔═╗ ",
" ╚═╝ ",
" ╔═╗ ",
" ╚═╝ ",
" "
}
};
// Пустой символ для некорректных входных данных
static const char* empty_char[5] = {
" ",
" ",
" ",
" ",
" "
};
// Функция для получения псевдографического символа по значению
const char** get_pseudographic_char_5(char c) {
if (c >= '0' && c <= '9') {
return font_5[c - '0'];
} else if (c == ':') {
return font_5[10];
}
return empty_char;
}
#endif