]>
Commit | Line | Data |
---|---|---|
c86edd1d Q |
1 | /* |
2 | * parser.h | |
3 | * Definitions etc. for the common parser engine. | |
4 | * | |
5 | * The aim is to use this code for incoming server messages, | |
6 | * and also for any service modules which accept user commands | |
7 | * | |
8 | * This is heavily inspired by the ircu code. | |
9 | */ | |
10 | ||
11 | #ifndef __PARSER_H | |
12 | #define __PARSER_H | |
13 | ||
14 | #include "../lib/sstring.h" | |
15 | ||
16 | /* Maximum allowed command length */ | |
17 | /* Not actually used for any static buffers hence fairly large */ | |
18 | ||
19 | #define MAX_COMMAND_LEN 100 | |
20 | ||
21 | #define CMD_OK 0 | |
22 | #define CMD_ERROR 1 | |
23 | #define CMD_LAST 2 | |
38cee035 | 24 | #define CMD_USAGE 3 |
c86edd1d Q |
25 | |
26 | /* Generic CommandHandler type | |
27 | * void * = pointer to some relevant object to identify where the message came from | |
28 | * int = number of parameters | |
29 | * char ** = parameter vector | |
30 | */ | |
31 | ||
32 | typedef int (*CommandHandler)(void *, int, char**); | |
33 | ||
34 | typedef struct Command { | |
35 | sstring *command; /* Name of the command/token/thing */ | |
38cee035 | 36 | char *help; /* Help information, sorry splidge! */ |
c86edd1d Q |
37 | int level; /* "level" required to use the command/token/thing */ |
38 | int maxparams; /* Maximum number of parameters for the command/token/thing */ | |
39 | CommandHandler handler; /* Function to deal with the message */ | |
40 | void *ext; /* Pointer to some arbitrary other data */ | |
41 | struct Command *next; /* Next handler chained onto this command */ | |
42 | } Command; | |
43 | ||
44 | typedef struct CommandTree { | |
45 | Command *cmd; | |
46 | char *final; | |
47 | struct CommandTree *next[26]; | |
48 | } CommandTree; | |
49 | ||
50 | CommandTree *newcommandtree(); | |
51 | void destroycommandtree(CommandTree *ct); | |
38cee035 | 52 | Command *addcommandhelptotree(CommandTree *ct, const char *cmdname, int level, int maxparams, CommandHandler handler, const char *help); |
c86edd1d Q |
53 | int deletecommandfromtree(CommandTree *ct, const char *cmdname, CommandHandler handler); |
54 | Command *findcommandintree(CommandTree *ct, const char *cmdname, int strictcheck); | |
55 | int getcommandlist(CommandTree *ct, Command **commandlist, int maxcommands); | |
56 | ||
38cee035 CP |
57 | #define addcommandtotree(a, b, c, d, e) addcommandhelptotree(a, b, c, d, e, NULL) |
58 | ||
c86edd1d | 59 | #endif |