From c3a3eb374b781380a1f617bb8fde5c4b6cec8c04 Mon Sep 17 00:00:00 2001 From: Yurii Chechur Date: Thu, 26 Dec 2024 17:06:08 +0000 Subject: [PATCH] Update sk1/main.c --- sk1/main.c | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/sk1/main.c b/sk1/main.c index 7888c5d..4cb274f 100644 --- a/sk1/main.c +++ b/sk1/main.c @@ -7,16 +7,20 @@ void display_help(); int main(int argc, char *argv[]) { - if (argc < 3) { + // Перевірка кількості аргументів + if (argc < 4) { display_help(); return -1; } + // Імена вхідного та вихідного файлів char *input_filename = argv[2]; char *output_filename = argv[3]; + char *algorithm = argc >= 5 ? argv[4] : "rle"; // Алгоритм, за замовчуванням rle - if (argc == 4 && strcmp(argv[1], "-c") == 0) { - if (strstr(output_filename, ".rle") != NULL) { + // Обробка компресії + if (argc >= 4 && strcmp(argv[1], "-c") == 0) { + if (strcmp(algorithm, "rle") == 0) { printf("Compressing using RLE...\n"); int result = rle_compress(input_filename, output_filename); if (result >= 0) { @@ -24,7 +28,7 @@ int main(int argc, char *argv[]) { } else { printf("Compression failed with error code %d\n", result); } - } else if (strstr(output_filename, ".lz77") != NULL) { + } else if (strcmp(algorithm, "lz77") == 0) { printf("Compressing using LZ77...\n"); int result = lz77_compress(input_filename, output_filename); if (result >= 0) { @@ -33,11 +37,13 @@ int main(int argc, char *argv[]) { printf("Compression failed with error code %d\n", result); } } else { - printf("Unsupported compression format.\n"); + printf("Unsupported compression algorithm. Use 'rle' or 'lz77'.\n"); return -1; } } - else if (argc == 4 && strcmp(argv[1], "-d") == 0) { + + // Обробка декомпресії + 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); @@ -47,7 +53,7 @@ int main(int argc, char *argv[]) { printf("Decompression failed with error code %d\n", result); } } else if (strstr(input_filename, ".lz77") != NULL) { - printf("Decompressing using LZ77...\n"); + printf("Decompressing LZ77...\n"); int result = lz77_decompress(input_filename, output_filename); if (result >= 0) { printf("Decompression successful. Decompressed size: %d bytes\n", result); @@ -59,6 +65,8 @@ int main(int argc, char *argv[]) { return -1; } } + + // Виведення довідки else if (argc == 3 && strcmp(argv[1], "-h") == 0) { display_help(); } else { @@ -70,14 +78,14 @@ int main(int argc, char *argv[]) { 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(" -c infile outfile [algorithm] : Compress infile to outfile. Algorithm can be 'rle' or 'lz77'. Default is 'rle'.\n"); + printf(" -d compressed outfile : Decompress compressed to outfile.\n"); + printf(" -h : Display this help message.\n"); + printf("Examples:\n"); + printf(" compression_tool -c input.txt output.rle rle\n"); + printf(" compression_tool -c input.txt output.lz77 lz77\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"); }