]>
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
25 /* Generic CommandHandler type
26 * void * = pointer to some relevant object to identify where the message came from
27 * int = number of parameters
28 * char ** = parameter vector
31 typedef int (*CommandHandler
)(void *, int, char**);
33 typedef struct Command
{
34 sstring
*command
; /* Name of the command/token/thing */
35 int level
; /* "level" required to use the command/token/thing */
36 int maxparams
; /* Maximum number of parameters for the command/token/thing */
37 CommandHandler handler
; /* Function to deal with the message */
38 void *ext
; /* Pointer to some arbitrary other data */
39 struct Command
*next
; /* Next handler chained onto this command */
42 typedef struct CommandTree
{
45 struct CommandTree
*next
[26];
48 CommandTree
*newcommandtree();
49 void destroycommandtree(CommandTree
*ct
);
50 Command
*addcommandtotree(CommandTree
*ct
, const char *cmdname
, int level
, int maxparams
, CommandHandler handler
);
51 int deletecommandfromtree(CommandTree
*ct
, const char *cmdname
, CommandHandler handler
);
52 Command
*findcommandintree(CommandTree
*ct
, const char *cmdname
, int strictcheck
);
53 int getcommandlist(CommandTree
*ct
, Command
**commandlist
, int maxcommands
);