2024-12-24 18:44:48 +00:00
|
|
|
|
#include "compressor.h"
|
2024-12-24 15:01:40 +00:00
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
2024-12-24 18:44:48 +00:00
|
|
|
|
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;
|
|
|
|
|
}
|
2024-12-24 15:01:40 +00:00
|
|
|
|
|
2024-12-24 18:44:48 +00:00
|
|
|
|
char* action = argv[1]; // -c, -d, -c2, -d2
|
|
|
|
|
char* infile = argv[2]; // Вхідний файл
|
|
|
|
|
char* outfile = argv[3]; // Вихідний файл
|
2024-12-24 15:01:40 +00:00
|
|
|
|
|
2024-12-24 18:44:48 +00:00
|
|
|
|
// Відкриваємо вхідний і вихідний файли
|
|
|
|
|
FILE* inf = fopen(infile, "rb"); // Відкриваємо вхідний файл для читання
|
|
|
|
|
FILE* outf = fopen(outfile, "wb"); // Відкриваємо вихідний файл для запису
|
2024-12-24 17:17:13 +00:00
|
|
|
|
|
2024-12-24 18:44:48 +00:00
|
|
|
|
if (!inf || !outf) {
|
|
|
|
|
printf("Error opening files.\n");
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
2024-12-24 17:17:13 +00:00
|
|
|
|
|
2024-12-24 18:44:48 +00:00
|
|
|
|
// Виконання операцій в залежності від дії
|
|
|
|
|
if (action[1] == 'c') {
|
|
|
|
|
// Компресія за допомогою алгоритму 1 (Huffman)
|
|
|
|
|
if (compress_1(infile, outfile) > 0) {
|
|
|
|
|
printf("File successfully compressed using algorithm 1 (Huffman).\n");
|
|
|
|
|
} else {
|
|
|
|
|
printf("Error compressing file with algorithm 1 (Huffman).\n");
|
2024-12-24 17:21:43 +00:00
|
|
|
|
}
|
2024-12-24 18:44:48 +00:00
|
|
|
|
}
|
|
|
|
|
else if (action[1] == 'd') {
|
|
|
|
|
// Декомпресія за допомогою алгоритму 1 (Huffman)
|
|
|
|
|
if (decompress_1(infile, outfile) > 0) {
|
|
|
|
|
printf("File successfully decompressed using algorithm 1 (Huffman).\n");
|
|
|
|
|
} else {
|
|
|
|
|
printf("Error decompressing file with algorithm 1 (Huffman).\n");
|
2024-12-24 17:21:43 +00:00
|
|
|
|
}
|
2024-12-24 18:44:48 +00:00
|
|
|
|
}
|
|
|
|
|
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");
|
2024-12-24 17:21:43 +00:00
|
|
|
|
}
|
2024-12-24 18:44:48 +00:00
|
|
|
|
}
|
|
|
|
|
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");
|
2024-12-24 17:17:13 +00:00
|
|
|
|
}
|
2024-12-24 15:01:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-12-24 18:44:48 +00:00
|
|
|
|
// Закриваємо файли після операцій
|
|
|
|
|
fclose(inf);
|
|
|
|
|
fclose(outf);
|
|
|
|
|
|
2024-12-24 15:01:40 +00:00
|
|
|
|
return 0;
|
|
|
|
|
}
|