ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/vendor/ircservices-5.1.24/commands.h
Revision: 3389
Committed: Fri Apr 25 14:12:15 2014 UTC (9 years, 11 months ago) by michael
Content type: text/x-chdr
File size: 3944 byte(s)
Log Message:
- Imported ircservices-5.1.24

File Contents

# Content
1 /* Declarations for command data.
2 *
3 * IRC Services is copyright (c) 1996-2009 Andrew Church.
4 * E-mail: <achurch@achurch.org>
5 * Parts written by Andrew Kempe and others.
6 * This program is free but copyrighted software; see the file GPL.txt for
7 * details.
8 */
9
10 #ifndef COMMANDS_H
11 #define COMMANDS_H
12
13 /* Note that modules.h MUST be included before this file (for the Module
14 * type). */
15
16 /*************************************************************************/
17
18 /* Structure for information about a *Serv command. */
19
20 typedef struct command_ Command;
21 struct command_ {
22 const char *name;
23 void (*routine)(User *u);
24 int (*has_priv)(const User *u); /* Returns 1 if user may use cmd, else 0 */
25 int helpmsg_all; /* Displayed to all users; -1 = no message */
26 int helpmsg_reg; /* Displayed to regular users only */
27 int helpmsg_oper; /* Displayed to IRC operators only */
28 const char *help_param1;
29 const char *help_param2;
30 const char *help_param3;
31 const char *help_param4;
32 Command *next; /* Next command with this name */
33 };
34
35 /*************************************************************************/
36
37 /* Commands must be registered with Services to be usable; an array of
38 * Command structures (terminated with name == NULL) can be registered and
39 * unregistered with the following routines. All routines return 1 on
40 * success, 0 on failure. ("Failure" occurs only when parameters are
41 * invalid.)
42 */
43
44 /* Set up a new command list using the given module pointer as an ID value.
45 * Fails if a command list associated with `id' already exists. */
46 extern int new_commandlist(Module *id);
47
48 /* Register a command array under the given ID. Fails if there is no
49 * command list associated with `id', `array' is NULL, `array' has already
50 * been added to the list, or there are multiple command entries in `array'
51 * with the same name (case-insensitive). If an entry in `array' has the
52 * same name as a previously-registered entry, the entry in `array' will
53 * take precendence, and a pointer to the previous entry will be stored in
54 * the `next' field of the entry. */
55 extern int register_commands(Module *id, Command *array);
56
57 /* Unregister a command array from the given ID. Fails if there is no
58 * command list associated with `id' or `array' was not in the list in the
59 * first place. */
60 extern int unregister_commands(Module *id, Command *array);
61
62 /* Delete the command list associated with the given ID. Fails if there is
63 * no command list associated with `id' or the command list is not empty. */
64 extern int del_commandlist(Module *id);
65
66 /*************************************************************************/
67
68 /* Routines for looking up and doing other things with commands. */
69
70 /* Returns the Command structure associated with the given command for the
71 * given command list (`id'), or NULL if no such command exists. */
72 extern Command *lookup_cmd(Module *id, const char *name);
73
74 /* Runs the routine associated with the given command, sending a help
75 * message if there is no such command or the user does not have privileges
76 * to use the command. Equivalent to
77 * lookup_cmd(id,name)->routine(u)
78 * with privilege and error checking. */
79 extern void run_cmd(const char *service, User *u, Module *id, const char *cmd);
80
81 /* Sends the help message associated with the given command, or a generic
82 * "command not found" message if there is no such command. Multiple
83 * spaces in `cmd' will be compressed to a single space (thus modifying the
84 * string). */
85 extern void help_cmd(const char *service, User *u, Module *id, char *cmd);
86
87 /*************************************************************************/
88
89 #endif /* COMMANDS_H */
90
91 /*
92 * Local variables:
93 * c-file-style: "stroustrup"
94 * c-file-offsets: ((case-label . *) (statement-case-intro . *))
95 * indent-tabs-mode: nil
96 * End:
97 *
98 * vim: expandtab shiftwidth=4:
99 */