Files
ipoim/utils.c
2026-03-24 20:44:22 +03:00

76 lines
1.8 KiB
C

#include "utils.h"
#include <stdio.h>
#include <stddef.h>
#include <string.h>
/*
* Macros
*/
#define MAX_CLI_ARGS (20)
/*
* Type definitions
*/
typedef struct {
const char *key;
char *value;
} cli_arg_t;
/*
* Data
*/
static cli_arg_t _cli_args[MAX_CLI_ARGS];
/*
* Public API
*/
void print_usage_text() {
printf("ipoim -M <mode> -A <address> -P <port> -C <carrier> ...\n");
printf(" --- MANDATORY ARGUMENTS ---\n");
printf(" -M <mode> - operation mode ('provider' or 'last-mile')\n");
printf(" -A <address> - IPv4 to listen on/connect to\n");
printf(" -P <port> - port to listen on/connect to\n");
printf(" -E <carrier> - extension to use, one of:\n");
printf(" * pipe - use STDIN and STDOUT\n");
printf(" --- OPTIONAL ARGUMENTS ---\n");
printf(" +V - be verbose\n");
}
bool cli_arg_set(const char *key, char *value) {
int index_to_use = -1;
for (int i = 0; i < MAX_CLI_ARGS; ++i) {
// empty entry
if (_cli_args[i].key == NULL) {
// update index only if no place is found yet
if (index_to_use == -1)
index_to_use = i;
}
// entry with the same name
else if (!strcmp(_cli_args[i].key, key)) {
index_to_use = i;
break;
}
}
// no space for the argument
if (index_to_use == -1) {
return false;
}
_cli_args[index_to_use].key = key;
_cli_args[index_to_use].value = value;
return true;
}
const char *cli_arg_get(const char *key) {
for (int i = 0; i < MAX_CLI_ARGS; ++i) {
if (_cli_args[i].key == NULL) {
continue;
}
if (strcmp(_cli_args[i].key, key)) {
continue;
}
return _cli_args[i].value;
}
return NULL;
}