File: opt.h

package info (click to toggle)
lcsync 0.3.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,152 kB
  • sloc: ansic: 9,376; sh: 3,117; makefile: 246
file content (49 lines) | stat: -rw-r--r-- 1,030 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only */
/* Copyright (c) 2020-2023 Brett Sheffield <bacs@librecast.net> */

#ifndef _OPT_H
#define _OPT_H

enum opt_type {
	OTYPE_BOOL,
	OTYPE_INT,
	OTYPE_STR
};

typedef struct opt_s opt_t;
struct opt_s {
	void	*var;
	char	oshort;
	char	olong[32];
	char	help[128];
	enum opt_type type;
	int (*f)(opt_t *opt, int *argc, char **argv[]);
};

typedef struct opt_parser_s {
	int	optc;
	opt_t	optv[];
} opt_parser_t;

/* initialise option parser with opts options */
opt_parser_t *opt_init(int opts);

/* free parser */
void opt_free(opt_parser_t *parser);

/* register new option with parser */
int opt_new(opt_parser_t *parser, opt_t *opt);

/* parse option arguments */
int opt_parse(opt_parser_t *parser, int *argc, char **argv[]);

/* set boolean (int) to true (1) */
int opt_set_true(opt_t *opt);

/* set integer value */
int opt_set_int(opt_t *opt, int *argc, char **argv[]);

/* set string value */
int opt_set_str(opt_t *opt, int *argc, char **argv[]);

#endif /* _OPT_H */