Update sk1/main.c

This commit is contained in:
Yurii Chechur 2024-12-24 15:21:04 +00:00
parent 3c86264f4a
commit 3b98bf8de4

View File

@ -3,6 +3,7 @@
#include <string.h> #include <string.h>
#include "compressor.h" #include "compressor.h"
// Функція для виведення допомоги
void print_help() { void print_help() {
printf("Usage:\n"); printf("Usage:\n");
printf(" ./compressor -c1 infile outfile Compress using algorithm 1 (Huffman)\n"); printf(" ./compressor -c1 infile outfile Compress using algorithm 1 (Huffman)\n");
@ -12,41 +13,64 @@ void print_help() {
printf(" ./compressor -h Show this help message\n"); printf(" ./compressor -h Show this help message\n");
} }
int main(int argc, char* argv[]) { // Функція для перевірки валідності аргументів
int check_arguments(int argc, char* argv[]) {
// Перевіряємо наявність достатньої кількості аргументів
if (argc < 2) { if (argc < 2) {
fprintf(stderr, "Error: Missing required arguments.\n");
print_help(); print_help();
return 1; return 0;
} }
// Якщо користувач запитав допомогу, виводимо її
if (strcmp(argv[1], "-h") == 0) { if (strcmp(argv[1], "-h") == 0) {
print_help(); print_help();
return 0; return 0;
} }
// Перевіряємо, чи правильно передано 3 аргументи (режим, вхідний файл, вихідний файл)
if (argc != 4) { if (argc != 4) {
fprintf(stderr, "Error: Invalid number of arguments.\n"); fprintf(stderr, "Error: Invalid number of arguments.\n");
print_help(); print_help();
return 0;
}
// Перевірка на правильний режим стиснення чи розпакування
const char* mode = argv[1];
if (strcmp(mode, "-c1") != 0 && strcmp(mode, "-d1") != 0 && strcmp(mode, "-c2") != 0 && strcmp(mode, "-d2") != 0) {
fprintf(stderr, "Error: Unknown mode '%s'.\n", mode);
print_help();
return 0;
}
return 1; // Аргументи правильні
}
int main(int argc, char* argv[]) {
// Перевіряємо, чи коректні аргументи
if (!check_arguments(argc, argv)) {
return 1; return 1;
} }
// Окремо отримуємо значення аргументів
const char* mode = argv[1]; const char* mode = argv[1];
const char* infile = argv[2]; const char* infile = argv[2];
const char* outfile = argv[3]; const char* outfile = argv[3];
// Вибір алгоритму стиснення або розпакування
if (strcmp(mode, "-c1") == 0) { if (strcmp(mode, "-c1") == 0) {
printf("Compressing using algorithm 1 (Huffman)...\n");
compress_1(infile, outfile); compress_1(infile, outfile);
} else if (strcmp(mode, "-d1") == 0) { } else if (strcmp(mode, "-d1") == 0) {
printf("Decompressing using algorithm 1 (Huffman)...\n");
decompress_1(infile, outfile); decompress_1(infile, outfile);
} else if (strcmp(mode, "-c2") == 0) { } else if (strcmp(mode, "-c2") == 0) {
printf("Compressing using algorithm 2 (RLE)...\n");
compress_2(infile, outfile); compress_2(infile, outfile);
} else if (strcmp(mode, "-d2") == 0) { } else if (strcmp(mode, "-d2") == 0) {
printf("Decompressing using algorithm 2 (RLE)...\n");
decompress_2(infile, outfile); decompress_2(infile, outfile);
} else {
fprintf(stderr, "Error: Unknown mode '%s'.\n", mode);
print_help();
return 1;
} }
return 0; return 0;
} }