diff --git a/sk1/main.c b/sk1/main.c index aaa4d77..7888c5d 100644 --- a/sk1/main.c +++ b/sk1/main.c @@ -1,68 +1,83 @@ -#include "compressor.h" +// main.c #include #include +#include +#include "compressor.h" // Підключаємо тільки заголовок -int main(int argc, char** argv) { - // Перевірка правильності кількості аргументів - if (argc != 4 || (argv[1][1] != 'c' && argv[1][1] != 'd' && argv[1][1] != '2' && argv[1][2] != '2')) { - printf("Usage: \n"); - printf(" Compress: ./compressor -c infile.txt outfile.compress\n"); - printf(" Decompress: ./compressor -d infile.compress outfile.txt\n"); - printf(" Compress using RLE: ./compressor -c2 infile.txt outfile.rle\n"); - printf(" Decompress using RLE: ./compressor -d2 infile.rle outfile.txt\n"); - return 1; +void display_help(); + +int main(int argc, char *argv[]) { + if (argc < 3) { + display_help(); + return -1; } - char* action = argv[1]; // -c, -d, -c2, -d2 - char* infile = argv[2]; // Вхідний файл - char* outfile = argv[3]; // Вихідний файл + char *input_filename = argv[2]; + char *output_filename = argv[3]; - // Відкриваємо вхідний і вихідний файли - FILE* inf = fopen(infile, "rb"); // Відкриваємо вхідний файл для читання - FILE* outf = fopen(outfile, "wb"); // Відкриваємо вихідний файл для запису - - if (!inf || !outf) { - printf("Error opening files.\n"); - return 1; - } - - // Виконання операцій в залежності від дії - if (action[1] == 'c') { - // Компресія за допомогою алгоритму 1 (Huffman) - if (compress_1(infile, outfile) > 0) { - printf("File successfully compressed using algorithm 1 (Huffman).\n"); + if (argc == 4 && strcmp(argv[1], "-c") == 0) { + if (strstr(output_filename, ".rle") != NULL) { + printf("Compressing using RLE...\n"); + int result = rle_compress(input_filename, output_filename); + if (result >= 0) { + printf("Compression successful. Compressed size: %d bytes\n", result); + } else { + printf("Compression failed with error code %d\n", result); + } + } else if (strstr(output_filename, ".lz77") != NULL) { + printf("Compressing using LZ77...\n"); + int result = lz77_compress(input_filename, output_filename); + if (result >= 0) { + printf("Compression successful. Compressed size: %d bytes\n", result); + } else { + printf("Compression failed with error code %d\n", result); + } } else { - printf("Error compressing file with algorithm 1 (Huffman).\n"); + printf("Unsupported compression format.\n"); + return -1; } } - else if (action[1] == 'd') { - // Декомпресія за допомогою алгоритму 1 (Huffman) - if (decompress_1(infile, outfile) > 0) { - printf("File successfully decompressed using algorithm 1 (Huffman).\n"); + else if (argc == 4 && strcmp(argv[1], "-d") == 0) { + if (strstr(input_filename, ".rle") != NULL) { + printf("Decompressing RLE...\n"); + int result = rle_decompress(input_filename, output_filename); + if (result >= 0) { + printf("Decompression successful. Decompressed size: %d bytes\n", result); + } else { + printf("Decompression failed with error code %d\n", result); + } + } else if (strstr(input_filename, ".lz77") != NULL) { + printf("Decompressing using LZ77...\n"); + int result = lz77_decompress(input_filename, output_filename); + if (result >= 0) { + printf("Decompression successful. Decompressed size: %d bytes\n", result); + } else { + printf("Decompression failed with error code %d\n", result); + } } else { - printf("Error decompressing file with algorithm 1 (Huffman).\n"); + printf("Unsupported decompression format.\n"); + return -1; } } - else if (action[1] == '2' && action[2] == '2') { - // Компресія за допомогою алгоритму 2 (RLE) - if (compress_2(infile, outfile) > 0) { - printf("File successfully compressed using algorithm 2 (RLE).\n"); - } else { - printf("Error compressing file with algorithm 2 (RLE).\n"); - } + else if (argc == 3 && strcmp(argv[1], "-h") == 0) { + display_help(); + } else { + printf("Invalid arguments\n"); + display_help(); + return -1; } - else if (action[1] == 'd' && action[2] == '2') { - // Декомпресія за допомогою алгоритму 2 (RLE) - if (decompress_2(infile, outfile) > 0) { - printf("File successfully decompressed using algorithm 2 (RLE).\n"); - } else { - printf("Error decompressing file with algorithm 2 (RLE).\n"); - } - } - - // Закриваємо файли після операцій - fclose(inf); - fclose(outf); return 0; } + +void display_help() { + printf("Usage:\n"); + printf(" -c infile outfile : Compress infile to outfile (.rle or .lz77).\n"); + printf(" -d infile outfile : Decompress infile to outfile (.rle or .lz77).\n"); + printf(" -h : Display this help message.\n"); + printf("Example:\n"); + printf(" compression_tool -c input.txt output.rle\n"); + printf(" compression_tool -d output.rle decompressed.txt\n"); + printf(" compression_tool -c input.txt output.lz77\n"); + printf(" compression_tool -d output.lz77 decompressed.txt\n"); +}