39 lines
1.4 KiB
C++
39 lines
1.4 KiB
C++
|
#ifndef PARSE_ARGS_HPP_
|
|||
|
#define PARSE_ARGS_HPP_
|
|||
|
|
|||
|
#include <iostream>
|
|||
|
#include <getopt.h>
|
|||
|
|
|||
|
namespace ra // read arguments
|
|||
|
{
|
|||
|
enum keys {ksize, kwidth, kmargin, kversion};
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
bool required = false; // Ключ является обязательным для установки
|
|||
|
bool isset = false; // Ключ был установлен при запуске программы
|
|||
|
int count = 0; // Количество аргументов переданных для текущего ключа
|
|||
|
char *arguments[1] = {nullptr}; // Переданные аргументы (до 10 аругментов на один ключ)
|
|||
|
} key;
|
|||
|
|
|||
|
const char* const short_options = "hs:w:m:v";
|
|||
|
|
|||
|
const struct option long_options[] =
|
|||
|
{
|
|||
|
{ "help", 0, nullptr, 'h'},
|
|||
|
{ "size", 1, nullptr, 's'},
|
|||
|
{ "width", 1, nullptr, 'w'},
|
|||
|
{ "margin", 1, nullptr, 'm'},
|
|||
|
{ "version", 0, nullptr, 'v'},
|
|||
|
{ nullptr, 0, nullptr, 0}
|
|||
|
};
|
|||
|
|
|||
|
[[ noreturn ]] void print_usage_and_exit(int); // Напечатать справку и выйти с кодом ошибки
|
|||
|
void parse_args(int, char **, key **); // Прочитать все ключи
|
|||
|
void get_argument(key *); // Получить аргумент ключа
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#endif
|