Update sk1/main.c

This commit is contained in:
Yurii Chechur 2024-12-26 15:59:23 +00:00
parent 70c293a075
commit 90d840e5f8

View File

@ -1,68 +1,83 @@
#include "compressor.h" // main.c
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include "compressor.h" // Підключаємо тільки заголовок
int main(int argc, char** argv) { void display_help();
// Перевірка правильності кількості аргументів
if (argc != 4 || (argv[1][1] != 'c' && argv[1][1] != 'd' && argv[1][1] != '2' && argv[1][2] != '2')) { int main(int argc, char *argv[]) {
printf("Usage: \n"); if (argc < 3) {
printf(" Compress: ./compressor -c infile.txt outfile.compress\n"); display_help();
printf(" Decompress: ./compressor -d infile.compress outfile.txt\n"); return -1;
printf(" Compress using RLE: ./compressor -c2 infile.txt outfile.rle\n");
printf(" Decompress using RLE: ./compressor -d2 infile.rle outfile.txt\n");
return 1;
} }
char* action = argv[1]; // -c, -d, -c2, -d2 char *input_filename = argv[2];
char* infile = argv[2]; // Вхідний файл char *output_filename = argv[3];
char* outfile = argv[3]; // Вихідний файл
// Відкриваємо вхідний і вихідний файли if (argc == 4 && strcmp(argv[1], "-c") == 0) {
FILE* inf = fopen(infile, "rb"); // Відкриваємо вхідний файл для читання if (strstr(output_filename, ".rle") != NULL) {
FILE* outf = fopen(outfile, "wb"); // Відкриваємо вихідний файл для запису printf("Compressing using RLE...\n");
int result = rle_compress(input_filename, output_filename);
if (!inf || !outf) { if (result >= 0) {
printf("Error opening files.\n"); printf("Compression successful. Compressed size: %d bytes\n", result);
return 1; } else {
} printf("Compression failed with error code %d\n", result);
}
// Виконання операцій в залежності від дії } else if (strstr(output_filename, ".lz77") != NULL) {
if (action[1] == 'c') { printf("Compressing using LZ77...\n");
// Компресія за допомогою алгоритму 1 (Huffman) int result = lz77_compress(input_filename, output_filename);
if (compress_1(infile, outfile) > 0) { if (result >= 0) {
printf("File successfully compressed using algorithm 1 (Huffman).\n"); printf("Compression successful. Compressed size: %d bytes\n", result);
} else {
printf("Compression failed with error code %d\n", result);
}
} else { } else {
printf("Error compressing file with algorithm 1 (Huffman).\n"); printf("Unsupported compression format.\n");
return -1;
} }
} }
else if (action[1] == 'd') { else if (argc == 4 && strcmp(argv[1], "-d") == 0) {
// Декомпресія за допомогою алгоритму 1 (Huffman) if (strstr(input_filename, ".rle") != NULL) {
if (decompress_1(infile, outfile) > 0) { printf("Decompressing RLE...\n");
printf("File successfully decompressed using algorithm 1 (Huffman).\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 { } 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') { else if (argc == 3 && strcmp(argv[1], "-h") == 0) {
// Компресія за допомогою алгоритму 2 (RLE) display_help();
if (compress_2(infile, outfile) > 0) { } else {
printf("File successfully compressed using algorithm 2 (RLE).\n"); printf("Invalid arguments\n");
} else { display_help();
printf("Error compressing file with algorithm 2 (RLE).\n"); 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; 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");
}