Fix small logic errors (bug #242)
[asterisk/asterisk.git] / include / asterisk / cli.h
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Standard Command Line Interface
5  * 
6  * Copyright (C) 1999, Mark Spencer
7  *
8  * Mark Spencer <markster@linux-support.net>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13
14 #ifndef _ASTERISK_CLI_H
15 #define _ASTERISK_CLI_H
16
17 #if defined(__cplusplus) || defined(c_plusplus)
18 extern "C" {
19 #endif
20
21 #include <stdarg.h>
22
23 extern void ast_cli(int fd, char *fmt, ...)
24         __attribute__ ((format (printf, 2, 3)));
25
26 #define RESULT_SUCCESS          0
27 #define RESULT_SHOWUSAGE        1
28 #define RESULT_FAILURE          2
29
30 #define AST_MAX_CMD_LEN         16
31
32 #define AST_MAX_ARGS 64
33
34 //! A command line entry */
35 struct ast_cli_entry {
36         /*! Null terminated list of the words of the command */
37         char *cmda[AST_MAX_CMD_LEN];
38         /*! Handler for the command (fd for output, # of arguments, argument list).  Returns RESULT_SHOWUSAGE for improper arguments */
39         int (*handler)(int fd, int argc, char *argv[]);
40         /*! Summary of the command (< 60 characters) */
41         char *summary;
42         /*! Detailed usage information */
43         char *usage;
44         /*! Generate a list of possible completions for a given word */
45         char *(*generator)(char *line, char *word, int pos, int state);
46         /*! For linking */
47         struct ast_cli_entry *next;
48         /*! For keeping track of usage */
49         int inuse;
50 };
51
52 //! Interprets a command
53 /*! Interpret a command s, sending output to fd
54  * Returns 0 on succes, -1 on failure 
55  */
56 extern int ast_cli_command(int fd, char *s);
57
58 //! Registers a command
59 /*! 
60  * \param fd File descriptor that I/O is done to
61  * \param s string given at prompt
62  * Register your own command
63  * Returns 0 on success, -1 on failure
64  */
65 extern int ast_cli_register(struct ast_cli_entry *e);
66
67 //! Unregisters a command
68 /*!
69  * \param e which cli entry to unregister
70  * Unregister your own command.  You must pass a completed ast_cli_entry structur
71  * Returns 0 on success, -1 on failure
72  */
73 extern int ast_cli_unregister(struct ast_cli_entry *e);
74
75 //! Readline madness
76 /* Useful for readline, that's about it
77  * Returns 0 on success, -1 on failure
78  */
79 extern char *ast_cli_generator(char *, char *, int);
80
81 extern int ast_cli_generatornummatches(char *, char *);
82 extern char **ast_cli_completion_matches(char *, char *);
83
84 #if defined(__cplusplus) || defined(c_plusplus)
85 }
86 #endif
87
88 #endif