54 lines
1.7 KiB
C++
54 lines
1.7 KiB
C++
|
#include "parse_args.hpp"
|
|||
|
|
|||
|
[[ noreturn ]] void ra::print_usage_and_exit(int code)
|
|||
|
{
|
|||
|
puts("Использование: tictactoe [option] [arguments] ...\n");
|
|||
|
puts(" -h, --help Получить информацию об использовании");
|
|||
|
puts(" -s, --size <count columns> Размер сетки N*N");
|
|||
|
puts(" -w, --width <size> Ширина/высота игрового окна");
|
|||
|
puts(" -m, --margin <size> Размер внутреннего отступа от границы окна до игрового поля");
|
|||
|
puts(" -v, --version Версия TicTacToe\n");
|
|||
|
exit(code);
|
|||
|
}
|
|||
|
|
|||
|
void ra::parse_args(int argc, char *argv[], key **keys)
|
|||
|
{
|
|||
|
int next_option = 0;
|
|||
|
|
|||
|
do{
|
|||
|
next_option = getopt_long(argc, argv, short_options, long_options, nullptr);
|
|||
|
|
|||
|
switch(next_option)
|
|||
|
{
|
|||
|
case 's':
|
|||
|
ra::get_argument(keys[ksize]);
|
|||
|
break;
|
|||
|
case 'w':
|
|||
|
ra::get_argument(keys[kwidth]);
|
|||
|
break;
|
|||
|
case 'm':
|
|||
|
ra::get_argument(keys[kmargin]);
|
|||
|
break;
|
|||
|
case 'v':
|
|||
|
ra::get_argument(keys[kversion]);
|
|||
|
break;
|
|||
|
case 'h':
|
|||
|
ra::print_usage_and_exit(0);
|
|||
|
break;
|
|||
|
case '?':
|
|||
|
ra::print_usage_and_exit(1);
|
|||
|
break;
|
|||
|
}
|
|||
|
} while (next_option != -1);
|
|||
|
}
|
|||
|
|
|||
|
void ra::get_argument(key *curKey)
|
|||
|
{
|
|||
|
if (curKey->isset)
|
|||
|
ra::print_usage_and_exit(3);
|
|||
|
|
|||
|
curKey->arguments[0] = optarg;
|
|||
|
curKey->isset = true;
|
|||
|
curKey->count = 1;
|
|||
|
}
|