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