aboutsummaryrefslogtreecommitdiff
path: root/CST 126/Homework_2/program.cpp
blob: cd5f36b69be7afe2a794f0fa493fe541844f0121 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include "helpers.hpp"
#include "Base64Converter.hpp"

constexpr short ARG_COUNT = 4;

bool Worker();
bool Worker(char** argv);


int main(const int argc, char* argv[])
{
	if (argc == ARG_COUNT)
	{
		//RUN THE COMMAND LINE VERSION
		Worker(argv);
	}
	//RUN THE CONSOLE APP VERSION
	return Worker();
}

bool Worker()
{
	return false;
}

bool Worker(char** argv)
{
	const char* arg1 = argv[1]; //-e -d
	const char* arg2 = argv[2];
	const char* arg3 = argv[3];

	const char option = std::tolower(arg1[1]); //e or d
	char* buffer = nullptr;

	try {
		switch (option)
		{
		case 'e':
		{
			size_t size = 1;
			buffer = ReadFileAsBinary("FindingPi.exe", buffer, size);

			char* encodedBuffer = Base64Encode(buffer, size);

			bool success = WriteTextToFile(arg3, encodedBuffer);

			delete[] buffer;
			delete[] encodedBuffer;

			return success;
		}
		case 'd':
		{
			size_t size = 0;
			buffer = ReadTextFromFile(arg2, buffer);

			size_t decodedSize = 0;
			char* decodedBuffer = Base64Decode(buffer, decodedSize);
			bool success = WriteFileFromBinary(arg3, decodedBuffer, decodedSize);
			delete[] buffer;
			delete[] decodedBuffer;

			return success;
		}
		default:
			std::cerr << "Invalid command option\n" <<
				"Valid commands:\n" <<
				"\t-e source_file.exe destination_file.exe" <<
				"\t\tEncodes file in source into text in destination txt file." <<
				"\t-d source_file.txt destination_file.exe" <<
				"\t\tDecodes text in source file into the destination file.\n\n";

			return false;
		}

	} catch (const std::exception& ex) {
			std::cerr << "Exception: " << ex.what() << std::endl;
			delete[] buffer;
			return false;
	}
}