summaryrefslogtreecommitdiff
path: root/inc/args.h
blob: 2d29eaeddd28acc27476dae7a0c0ac03bf80b637 (plain)
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
#ifndef ARGS_H
#define ARGS_H

#define ARGTYPELEN 3
typedef enum
{
    ARGUMENT = 0,
    COMMAND = 1,
    OPTION = 2
} argtype;

typedef struct arg
{
    argtype type;
    char *flag;
    int numopt;
    char **opts;
    void (*runarg)(struct arg *);
} arg;

extern int argerr; // TODO should this be external?

extern int ARGC;
extern arg *ARGS;

void setinfo(char *info);
void setusage(char *usage);

int addarg(char *value, char *desc, void (*runarg)(struct arg *));
int addopt(char *flag, char *full, int numopt, char *value, char *desc, void (*runarg)(struct arg *));

int parseargs(int argc, char *args[]);
void runargs();

arg *getarg(int pos);
arg *getopt(char *flag, int pos);

void printhelp();

void paerror(char *str);

#endif // ARGS_H