#ifndef TAPE_CONFIG_H #define TAPE_CONFIG_H #include "tapelib/filetape.h" #include #include // 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