94 lines
2.4 KiB
C
94 lines
2.4 KiB
C
|
#include "types.h"
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
#ifndef TEST_BUILD
|
||
|
|
||
|
int main(int argc, char *argv[]) {
|
||
|
// konfigurace programu
|
||
|
Config config = {
|
||
|
.xFlag = false, .yFlag = false, .sValue = NULL, .nValue = 10};
|
||
|
|
||
|
// TODO: 2. odpovídajícím způsobem zavolejte funkci parse_args
|
||
|
bool parse = parse_args(argv, argc, &config);
|
||
|
// TODO: 3. v případě chyby zpracování vypište obsah
|
||
|
// globální proměnné usage na chybový výstup
|
||
|
// a ukončente program s chybovým kódem 1
|
||
|
if (!parse) {
|
||
|
printf("%s", usage);
|
||
|
return 1;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
/**
|
||
|
* Zpracuje argumenty příkazové řádky programu.
|
||
|
* Výsledky ukládá do struktury Config z parametrů metody.
|
||
|
*
|
||
|
* Duplicity žádných přepínačů nejsou dovoleny.
|
||
|
*
|
||
|
* Hlavičky žádných funkcí NEMĚŇTE!
|
||
|
*
|
||
|
* @param arguments pole argumentů z CLI
|
||
|
* @param argumentCount velikost pole argumentů
|
||
|
* @param config ukazatel na výstupní konfiguraci
|
||
|
*
|
||
|
* @returns hodnotu true při úspěšném zpracování, false jinak
|
||
|
*/
|
||
|
bool parse_args(char **arguments, int argumentCount, Config *config) {
|
||
|
// TODO: 1. implementujte funkci dle specifikace zadání
|
||
|
// a chování jednotlivých přepínačů
|
||
|
config->nValue = 10;
|
||
|
config->sValue = NULL;
|
||
|
bool valid = true;
|
||
|
bool hasN = false;
|
||
|
|
||
|
for (int i = 0; i < argumentCount; i++) {
|
||
|
if (strcmp(arguments[i], "-x") == 0) {
|
||
|
if (config->yFlag || config->xFlag) {
|
||
|
valid = false;
|
||
|
break;
|
||
|
}
|
||
|
config->xFlag = true;
|
||
|
} else if (strcmp(arguments[i], "-y") == 0) {
|
||
|
if (config->yFlag || config->xFlag) {
|
||
|
valid = false;
|
||
|
break;
|
||
|
}
|
||
|
config->yFlag = true;
|
||
|
} else if (strcmp(arguments[i], "-n") == 0) {
|
||
|
if (i + 1 >= argumentCount || hasN) {
|
||
|
valid = false;
|
||
|
break;
|
||
|
}
|
||
|
for (unsigned int argIndex = 0; argIndex < strlen(arguments[i + 1]);
|
||
|
argIndex++) {
|
||
|
if (!(arguments[i + 1][argIndex] >= '0' &&
|
||
|
arguments[i + 1][argIndex] <= '9')) {
|
||
|
valid = false;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (!valid) {
|
||
|
break;
|
||
|
}
|
||
|
config->nValue = atoi(arguments[i + 1]);
|
||
|
hasN = true;
|
||
|
} else if (strcmp(arguments[i], "-s") == 0) {
|
||
|
if (config->sValue != NULL) {
|
||
|
valid = false;
|
||
|
break;
|
||
|
}
|
||
|
config->sValue = arguments[i + 1];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (config->sValue == NULL || !valid) {
|
||
|
return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|