2024-12-24 16:42:40 +00:00
|
|
|
|
#include <assert.h>
|
2024-12-24 15:01:40 +00:00
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <string.h>
|
|
|
|
|
#include "compressor.h"
|
|
|
|
|
|
2024-12-24 16:42:40 +00:00
|
|
|
|
#define BUFSIZE 1024
|
|
|
|
|
|
2024-12-24 15:01:40 +00:00
|
|
|
|
void print_help() {
|
2024-12-24 17:17:13 +00:00
|
|
|
|
printf("Available Options:\n");
|
|
|
|
|
printf("1 - Compress using algorithm 1 (Huffman)\n");
|
|
|
|
|
printf("2 - Decompress using algorithm 1 (Huffman)\n");
|
|
|
|
|
printf("3 - Compress using algorithm 2 (RLE)\n");
|
|
|
|
|
printf("4 - Decompress using algorithm 2 (RLE)\n");
|
|
|
|
|
printf("0 - Exit\n");
|
2024-12-24 15:01:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-12-24 17:17:13 +00:00
|
|
|
|
int main() {
|
|
|
|
|
int choice;
|
|
|
|
|
char infile[256], outfile[256];
|
2024-12-24 15:01:40 +00:00
|
|
|
|
|
2024-12-24 17:17:13 +00:00
|
|
|
|
// Покажемо користувачу доступні варіанти
|
|
|
|
|
print_help();
|
2024-12-24 15:01:40 +00:00
|
|
|
|
|
2024-12-24 17:17:13 +00:00
|
|
|
|
while (1) {
|
|
|
|
|
// Запитуємо користувача про вибір
|
|
|
|
|
printf("Enter your choice (0 to exit): ");
|
|
|
|
|
if (scanf("%d", &choice) != 1) {
|
2024-12-24 17:21:43 +00:00
|
|
|
|
// Якщо введення не є числом, виводимо повідомлення про помилку
|
|
|
|
|
fprintf(stderr, "Invalid input. Please enter a valid number (0-4).\n");
|
|
|
|
|
// Очищаємо буфер введення від непотрібних символів
|
|
|
|
|
while(getchar() != '\n');
|
|
|
|
|
continue;
|
2024-12-24 17:17:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (choice == 0) {
|
|
|
|
|
printf("Exiting program.\n");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-24 17:21:43 +00:00
|
|
|
|
if (choice < 0 || choice > 4) {
|
|
|
|
|
// Перевіряємо, чи вибір знаходиться в допустимому діапазоні
|
|
|
|
|
printf("Invalid choice. Please select a valid option (1-4).\n");
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-24 17:17:13 +00:00
|
|
|
|
// Вводимо імена файлів
|
|
|
|
|
printf("Enter input file name: ");
|
|
|
|
|
scanf("%s", infile);
|
|
|
|
|
printf("Enter output file name: ");
|
|
|
|
|
scanf("%s", outfile);
|
2024-12-24 15:01:40 +00:00
|
|
|
|
|
2024-12-24 17:21:43 +00:00
|
|
|
|
// Перевіряємо, чи існує вхідний файл, і чи доступний вихідний файл для запису
|
|
|
|
|
FILE *infile_ptr = fopen(infile, "rb");
|
|
|
|
|
if (!infile_ptr) {
|
|
|
|
|
printf("Error: Input file does not exist or cannot be opened.\n");
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
fclose(infile_ptr);
|
|
|
|
|
|
|
|
|
|
FILE *outfile_ptr = fopen(outfile, "wb");
|
|
|
|
|
if (!outfile_ptr) {
|
|
|
|
|
printf("Error: Output file cannot be created or opened.\n");
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
fclose(outfile_ptr);
|
|
|
|
|
|
|
|
|
|
// Виконання обраного алгоритму
|
2024-12-24 17:17:13 +00:00
|
|
|
|
switch (choice) {
|
|
|
|
|
case 1:
|
|
|
|
|
compress_1(infile, outfile);
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
decompress_1(infile, outfile);
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
compress_2(infile, outfile);
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
decompress_2(infile, outfile);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
printf("Invalid choice. Please select again.\n");
|
|
|
|
|
break;
|
|
|
|
|
}
|
2024-12-24 15:01:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|