erius
ad976a5a9e
Added explicit include directories to each file, even if an already included header defined them Removed using directives from header files
78 lines
2.6 KiB
C++
78 lines
2.6 KiB
C++
#ifndef TAPE_CONFIG_H
|
|
#define TAPE_CONFIG_H
|
|
|
|
#include "tapelib/filetape.h"
|
|
#include <cstddef>
|
|
#include <string>
|
|
|
|
// stringizing opearator to convert macro into string literal
|
|
#define xstr(s) str(s)
|
|
#define str(s) #s
|
|
|
|
const static std::string HELP_MSG =
|
|
"Usage: ftsort [OPTIONS...] INPUT_FILE OUTPUT_FILE\n"
|
|
"Sorts a Tape provided by the INPUT_FILE into the OUTPUT_FILE\n\n"
|
|
"Options:\n"
|
|
"-w, --write-delay VALUE\t\t\t"
|
|
"Sets the delay of write operations to VALUE milliseconds\n"
|
|
"-r, --read-delay VALUE\t\t\t"
|
|
"Sets the delay of read operations to VALUE milliseconds\n"
|
|
"-f, --seek-forward-delay VALUE\t\t"
|
|
"Sets the delay of seeking forward operations to VALUE milliseconds\n"
|
|
"-b, --seek-backwards-delay VALUE\t"
|
|
"Sets the delay of seeking backwards operations to VALUE milliseconds\n"
|
|
"-m, --memory-limit VALUE\t\t"
|
|
"Sets the amount of cells that the program can store in its memory during "
|
|
"sorting to VALUE\n"
|
|
"-c, --config-file FILE\t\t\t"
|
|
"Applies options from the FILE, config shoud be a simple KEY=VALUE list\n"
|
|
"-v, --version\t\t\t\t"
|
|
"Print out version of the program\n"
|
|
"-h, --help\t\t\t\t"
|
|
"Print help message\n\n"
|
|
"Exmaple of valid input Tape file with values 1, 1234 and 2222222222:\n\n"
|
|
"0000000001\n"
|
|
"0000001234\n"
|
|
"2222222222\n\n"
|
|
"Example of a valid config file:\n\n"
|
|
"write-delay=100\n"
|
|
"read-delay=100\n"
|
|
"seek-forward-delay=100\n"
|
|
"seek-backwards-delay=100\n"
|
|
"memory-limit=1024\n";
|
|
|
|
const static std::string VERSION_MSG = "ftsort ver. " xstr(VERSION);
|
|
|
|
struct AppSettings {
|
|
std::string config_file_path;
|
|
std::string input_file_name;
|
|
std::string output_file_name;
|
|
size_t memory_limit;
|
|
bool version;
|
|
bool help;
|
|
tape::FileTapeSettings ft_settings;
|
|
};
|
|
|
|
/**
|
|
* Parses command line arguments (from main) and creates an instance of
|
|
* AppSettings from them
|
|
*
|
|
* @param argc Args count from main
|
|
* @param argv Args array from main
|
|
* @return Instance of AppSettings filled with values from command line
|
|
*/
|
|
AppSettings parse_command_line(int argc, char **argv);
|
|
|
|
/**
|
|
* Accepts AppSettings prefilled with settings from command line, tries to open
|
|
* the file specified in the config_file_path field and reads values from the
|
|
* supplied config files into provided AppSettings, overwriting the settings.
|
|
*
|
|
* @param settings AppSettings, values of which will be overwritten by configs
|
|
* values
|
|
* @return true, if config file was opened and read successfully, otherwise
|
|
* false
|
|
*/
|
|
bool read_settings_from_file(AppSettings &settings);
|
|
|
|
#endif // !TAPE_CONFIG_H
|