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