ParaDocs/src/main.cpp
PoliEcho e6961d6d6d
All checks were successful
build_test / build (push) Successful in 2m30s
remembered that versioning exist
2025-06-03 13:52:32 +02:00

77 lines
2.0 KiB
C++

#include "color.h"
#include "const.h"
#include "menu.h"
#include "signal.h"
#include "strings.h"
#include <csignal>
#include <cstdlib>
#include <iostream>
#include <locale>
#include <regex>
#include <unistd.h>
void PrintHelp() {
std::cout << RED R"( ____ ____
/\ _`\ /\ _`\
\ \ \L\ \ __ _ __ __ \ \ \/\ \ ___ ___ ____
\ \ ,__/'__`\ /\`'__\/'__`\ \ \ \ \ \ / __`\ /'___\ /',__\
\ \ \/\ \L\.\_\ \ \//\ \L\.\_\ \ \_\ \/\ \L\ \/\ \__//\__, `\
\ \_\ \__/.\_\\ \_\\ \__/.\_\\ \____/\ \____/\ \____\/\____/
\/_/\/__/\/_/ \/_/ \/__/\/_/ \/___/ \/___/ \/____/\/___/)"
<< RESET "\n"
<< loc_strings->usage << ":\n"
<< NAME << " [" << loc_strings->options << "]\n"
<< "-h\t\t" << loc_strings->print_this_help << "\n"
<< "-V\t\t" << loc_strings->print_version << "\n";
exit(0);
}
void PrintVersion() {
std::cout << NAME << " " << loc_strings->version << ": " << VERSION << "\n";
exit(0);
}
int main(int argc, char *argv[]) {
// signal handlers
std::signal(SIGTERM, safe_exit);
std::signal(SIGINT, safe_exit);
std::signal(SIGQUIT, safe_exit);
std::signal(SIGHUP, safe_exit);
// error signal handlers
signal(SIGSEGV, safe_exit);
// set locale
{
std::locale loc("");
std::regex czech_regex("czech|cz", std::regex_constants::icase |
std::regex_constants::ECMAScript);
if (std::regex_search(loc.name(), czech_regex)) {
loc_strings = &czech_strings;
} else {
loc_strings = &english_strings;
}
}
int opt;
while ((opt = getopt(argc, argv, "hV")) != -1) {
switch (opt) {
case 'h':
PrintHelp();
break;
case 'V':
PrintVersion();
break;
default:
std::cerr << RED "[ERROR]" << RESET " " << loc_strings->invalid_option
<< ": " << (char)optopt << "\n"
<< loc_strings->try_str << ": -h\n";
return EINVAL;
}
}
menu();
return 0;
}