Basic argument parsing
This commit is contained in:
parent
47a960678a
commit
fe3798e48a
2 changed files with 98 additions and 6 deletions
100
kiwmi/main.c
100
kiwmi/main.c
|
@ -5,17 +5,111 @@
|
||||||
* You can obtain one at https://mozilla.org/MPL/2.0/.
|
* You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
#include <wayland-server.h>
|
#include <wayland-server.h>
|
||||||
#include <wlr/util/log.h>
|
#include <wlr/util/log.h>
|
||||||
|
|
||||||
#include "kiwmi/server.h"
|
#include "kiwmi/server.h"
|
||||||
|
|
||||||
int
|
struct kiwmi_config {
|
||||||
main(void)
|
int verbosity;
|
||||||
|
const char *frontend_path;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct option {
|
||||||
|
const char *name;
|
||||||
|
int val;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
parse_arguments(int argc, char **argv, struct kiwmi_config *config)
|
||||||
{
|
{
|
||||||
|
static struct option options[] = {
|
||||||
|
{"help", 'h'},
|
||||||
|
{"version", 'v'},
|
||||||
|
{"verbose", 'V'},
|
||||||
|
|
||||||
|
{0, 0},
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *usage =
|
||||||
|
"Usage: kiwmi [options] FRONTEND\n"
|
||||||
|
"\n"
|
||||||
|
" -h, --help Show help message and quit\n"
|
||||||
|
" -v, --version Show version number and quit\n"
|
||||||
|
" -V, --verbose Increase verbosity Level\n";
|
||||||
|
|
||||||
|
config->verbosity = 0;
|
||||||
|
config->frontend_path = NULL;
|
||||||
|
|
||||||
|
for (int i = 1; i < argc; ++i) {
|
||||||
|
const char *opt = argv[i];
|
||||||
|
char val = '?';
|
||||||
|
|
||||||
|
if (opt[0] == '-') {
|
||||||
|
if (opt[1] == '-') {
|
||||||
|
for (const struct option *current = options; current->name;
|
||||||
|
++current) {
|
||||||
|
if (strcmp(&opt[2], current->name)) {
|
||||||
|
val = current->val;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val = opt[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (val) {
|
||||||
|
case 'h':
|
||||||
|
printf("%s", usage);
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
printf("kiwmi version " KIWMI_VERSION "\n");
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
++config->verbosity;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "%s", usage);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
config->frontend_path = opt;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config->frontend_path) {
|
||||||
|
fprintf(stderr, "%s", usage);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct kiwmi_config config;
|
||||||
|
parse_arguments(argc, argv, &config);
|
||||||
|
|
||||||
|
switch (config.verbosity) {
|
||||||
|
case 0:
|
||||||
|
wlr_log_init(WLR_ERROR, NULL);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
wlr_log_init(WLR_INFO, NULL);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
wlr_log_init(WLR_DEBUG, NULL);
|
wlr_log_init(WLR_DEBUG, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "Using kiwmi v" KIWMI_VERSION "\n");
|
||||||
|
|
||||||
struct kiwmi_server server;
|
struct kiwmi_server server;
|
||||||
|
|
||||||
|
@ -24,8 +118,6 @@ main(void)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
wlr_log(WLR_INFO, "Starting kiwmi v" KIWMI_VERSION);
|
|
||||||
|
|
||||||
if (!server_run(&server)) {
|
if (!server_run(&server)) {
|
||||||
wlr_log(WLR_ERROR, "Failed to run server");
|
wlr_log(WLR_ERROR, "Failed to run server");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
|
|
|
@ -11,7 +11,7 @@ project(
|
||||||
add_project_arguments(
|
add_project_arguments(
|
||||||
[
|
[
|
||||||
'-DWLR_USE_UNSTABLE',
|
'-DWLR_USE_UNSTABLE',
|
||||||
'-D_POSIX_C_SOURCE=200112L',
|
'-D_POSIX_C_SOURCE=200809L',
|
||||||
],
|
],
|
||||||
language: 'c',
|
language: 'c',
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue