Annotation of libaitcli/inc/aitcli.h, revision 1.1.1.1
1.1 misho 1: /*************************************************************************
2: * (C) 2010 AITNET ltd - Sofia/Bulgaria - <misho@aitbg.com>
3: * by Michael Pounov <misho@openbsd-bg.org>
4: *
5: * $Author: misho $
6: * $Id: aitio.h,v 1.3.2.6 2010/04/06 14:26:55 misho Exp $
7: *
8: *************************************************************************/
9: #ifndef __AITCLI_H
10: #define __AITCLI_H
11:
12:
13: struct tagCLICmd {
14: const char *cmd_name;
15: int (*cmd_func)(void *, int, FILE *, char **);
16: const char *cmd_doc;
17: const char *cmd_help;
18: char *(*cmd_comp)(const char *, int);
19: };
20:
21: typedef struct tagCLICmd cliCommands_t;
22: typedef char *cli_CompEntry_t(const char *, int);
23: typedef char **cli_Completion_t(const char *, int, int);
24:
25:
26: // cli_GetErrno() Get error code of last operation
27: inline int cli_GetErrno();
28: // cli_GetError() Get error text of last operation
29: inline const char *cli_GetError();
30:
31: /*
32: * cli_Printf() Printf CLI features
33: * @out = Output stream
34: * @csFormat = Printf format string
35: * return: none
36: */
37: inline int cli_Printf(FILE *out, const char *csFormat, ...);
38:
39: /*
40: * cliComp() Initialize completion CLI features
41: * @cmdComplete = Completion function
42: * @cmdEntry = Compentry function
43: * return: none
44: */
45: inline void cliComp(cli_Completion_t *cmdComplete, cli_CompEntry_t *cmdEntry);
46: /*
47: * cliExec() Execute CLI main loop
48: * @cmdList = Commands list
49: * @out = Output handle
50: * @csPrompt = Prompt text
51: * return: -1 error, 0 = exit w/^+D, 1 done.
52: */
53: int cliExec(cliCommands_t *cmdList, FILE *out, const char *csPrompt);
54:
55:
56: /*
57: * cli_PrintHelp() Helper print for missing command arguments
58: * @out = Output stream
59: * @cmds = Commands list
60: * @idx = Selected command ID
61: * return: -1 error, !=-1 ok
62: * return: none
63: */
64: inline int cli_PrintHelp(FILE *out, void *cmds, int idx);
65:
66: /*
67: * cli_Cmd_Unsupported() Builtin helper function for unsupported commands
68: * @cmds = Commands list
69: * @idx = Selected command ID
70: * @out = Output handle
71: * @args = Parsed arguments array
72: * return: -1 error, 0 = ok, 1 exit from Cli!
73: */
74: int cli_Cmd_Unsupported(void *cmds, int idx, FILE *out, char ** __restrict args);
75: /*
76: * cli_Cmd_Help() Builtin helper function for Help screen
77: * @cmds = Commands list
78: * @idx = Selected command ID
79: * @out = Output handle
80: * @args = Parsed arguments array
81: * return: -1 error, 0 = ok
82: */
83: int cli_Cmd_Help(void *cmds, int idx, FILE *out, char ** __restrict args);
84: /*
85: * cli_Cmd_Exit() Builtin helper function for Exit from Cli
86: * @cmds = Commands list
87: * @idx = Selected command ID
88: * @out = Output handle
89: * @args = Parsed arguments array
90: * return: 1 exit from Cli!
91: */
92: int cli_Cmd_Exit(void *cmds, int idx, FILE *out, char ** __restrict args);
93:
94:
95: /*
96: * cli_Register_Commands - Declare helper function for register and export Commands variable
97: */
98: #define CLI_REGISTER_COMMANDS(CMDS) \
99: extern cliCommands_t CMDS[];
100: /*
101: * cli_Make_Comp_Commands - Declare helper function for Commands completion arguments
102: */
103: #define CLI_MAKE_COMP_COMMANDS(FUNC, CMDS) \
104: char *FUNC(const char *text, int state) \
105: { \
106: register int i; \
107: int len = strlen(text); \
108: for (i = state; CMDS[i].cmd_name; i++) { \
109: if (strncmp(CMDS[i].cmd_name, "---", 3) && \
110: !strncmp(CMDS[i].cmd_name, text, len)) \
111: return strdup(CMDS[i].cmd_name); \
112: } \
113: return NULL; \
114: }
115:
116: /*
117: * cli_Make_Comp_Args - Declare helper function for Arguments completion
118: */
119: #define CLI_MAKE_COMP_ARGS(FUNC, ARGS) \
120: char *FUNC(const char *text __attribute__((unused)), int state) \
121: { \
122: while (ARGS[state]) \
123: return strdup(ARGS[state]); \
124: return NULL; \
125: }
126:
127: /*
128: * cli_Comp_Filename() Builtin helper function for filename completion arguments
129: * @text = Text line
130: * @state = Position state
131: * return: NULL not found filename, != NULL filename
132: */
133: char *cli_Comp_Filename(const char *text, int state);
134:
135:
136: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>