]>
jfr.im git - irc/quakenet/newserv.git/blob - parser/parser.h
3 * Definitions etc. for the common parser engine.
5 * The aim is to use this code for incoming server messages,
6 * and also for any service modules which accept user commands
8 * This is heavily inspired by the ircu code.
14 #include "../lib/sstring.h"
16 /* Maximum allowed command length */
17 /* Not actually used for any static buffers hence fairly large */
19 #define MAX_COMMAND_LEN 100
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
32 typedef int (*CommandHandler
)(void *, int, char**);
33 typedef void (*DestroyExt
)(void *);
35 typedef struct Command
{
36 sstring
*command
; /* Name of the command/token/thing */
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 DestroyExt destroyext
; /* Function to destroy ->ext on destroycommandtree (if necessary) */
42 struct Command
*next
; /* Next handler chained onto this command */
45 typedef struct CommandTree
{
48 struct CommandTree
*next
[26];
51 CommandTree
*newcommandtree();
52 void destroycommandtree(CommandTree
*ct
);
53 Command
*addcommandexttotree(CommandTree
*ct
, const char *cmdname
, int level
, int maxparams
, CommandHandler handler
, void *ext
);
54 int deletecommandfromtree(CommandTree
*ct
, const char *cmdname
, CommandHandler handler
);
55 Command
*findcommandintree(CommandTree
*ct
, const char *cmdname
, int strictcheck
);
56 int getcommandlist(CommandTree
*ct
, Command
**commandlist
, int maxcommands
);
57 sstring
*getcommandname(CommandTree
*ct
, CommandHandler handler
);
59 #define addcommandtotree(a, b, c, d, e) addcommandexttotree(a, b, c, d, e, NULL)