Загрузить файлы в «/»
This commit is contained in:
90
module_03.c
Normal file
90
module_03.c
Normal 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
90
module_05.c
Normal 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
90
module_07.c
Normal 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
95
pseudographic_font_3.h
Normal 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
119
pseudographic_font_5.h
Normal 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
|
Reference in New Issue
Block a user