File:  [ELWIX - Embedded LightWeight unIX -] / libaitcli / inc / aitcli.h
Revision 1.1.1.1.2.7: download - view: text, annotated - select for diffs - revision graph
Sat Apr 24 10:02:33 2010 UTC (14 years, 3 months ago) by misho
Branches: cli1_0
Diff to: branchpoint 1.1.1.1: preferred, unified
added new dependant libaittelnet and makes network socket cli feature

    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: aitcli.h,v 1.1.1.1.2.7 2010/04/24 10:02:33 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: -1 error, != -1 printed chars
   36: */
   37: inline int cli_Printf(FILE *out, const char *csFormat, ...);
   38: 
   39: /*
   40:  * cliInit() Initialize Readline
   41:  * @csProg = program name
   42:  * return: none
   43: */
   44: inline void cliInit(const char *csProg);
   45: /*
   46:  * cliNetInit() Initialize Readline if CLI bind to socket
   47:  * @csProg = program name
   48:  * @pty = Master pty
   49:  * @term = stdin termios
   50:  * return: none
   51: */
   52: void cliNetInit(const char *csProg, int pty, struct termios *term);
   53: /*
   54:  * cliTTY() Initialize I/O TTY CLI features
   55:  * @term = terminal name
   56:  * @inp = input handle
   57:  * @out = output handle
   58:  * @win = window size
   59:  * return: -1 error, != -1 ok
   60: */
   61: inline int cliTTY(const char *term, FILE *inp, FILE *out, struct winsize *win);
   62: /*
   63:  * cliComp() Initialize completion CLI features
   64:  * @cmdComplete = Completion function
   65:  * @cmdEntry = Compentry function
   66:  * return: none
   67: */
   68: inline void cliComp(cli_Completion_t *cmdComplete, cli_CompEntry_t *cmdEntry);
   69: /*
   70:  * cliExec() Execute CLI main loop
   71:  * @cmdList = Commands list
   72:  * @csPrompt = Prompt text
   73:  * return: -1 error, 0 = exit w/^+D, 1 done.
   74: */
   75: int cliExec(cliCommands_t *cmdList, const char *csPrompt);
   76: /*
   77:  * cliNetExec() Execute net CLI main loop
   78:  * @cmdList = Commands list
   79:  * @csPrompt = Prompt text
   80:  * @sock = client socket
   81:  * @term = stdin termios
   82:  * @win = window size of tty
   83:  * return: -1 error, 0 = exit w/^+D, 1 done.
   84: */
   85: int cliNetExec(cliCommands_t *cmdList, const char *csPrompt, int sock, struct termios *term, struct winsize *win);
   86: 
   87: /*
   88:  * cli_ReadHistory() Read CLI History from file
   89:  * @csFile = history file name, if NULL default history name is ".aitcli.history"
   90:  * return: -1 error; != -1 readed ok
   91: */
   92: inline int cli_ReadHistory(const char *csFile);
   93: /*
   94:  * cli_WriteHistory() Write CLI History to file
   95:  * @csFile = history file name, if NULL default history name is ".aitcli.history"
   96:  * @lineNum = save number of history entry lines, if -1 all lines saved without limit
   97:  * return: -1 error; != -1 readed ok
   98: */
   99: inline int cli_WriteHistory(const char *csFile, int lineNum);
  100: 
  101: 
  102: /*
  103:  * cli_PrintHelp() Helper print for missing command arguments
  104:  * @out = Output stream
  105:  * @cmds = Commands list
  106:  * @idx = Selected command ID
  107:  * return: -1 error, !=-1 ok
  108:  * return: none
  109: */
  110: inline int cli_PrintHelp(FILE *out, void *cmds, int idx);
  111: 
  112: /*
  113:  * cli_Cmd_Unsupported() Builtin helper function for unsupported commands
  114:  * @cmds = Commands list
  115:  * @idx = Selected command ID
  116:  * @out = Output handle
  117:  * @args = Parsed arguments array
  118:  * return: -1 error, 0 = ok, 1 exit from Cli!
  119: */
  120: int cli_Cmd_Unsupported(void *cmds, int idx, FILE *out, char ** __restrict args);
  121: /*
  122:  * cli_Cmd_Help() Builtin helper function for Help screen
  123:  * @cmds = Commands list
  124:  * @idx = Selected command ID
  125:  * @out = Output handle
  126:  * @args = Parsed arguments array
  127:  * return: -1 error, 0 = ok
  128: */
  129: int cli_Cmd_Help(void *cmds, int idx, FILE *out, char ** __restrict args);
  130: /*
  131:  * cli_Cmd_Exit() Builtin helper function for Exit from Cli
  132:  * @cmds = Commands list
  133:  * @idx = Selected command ID
  134:  * @out = Output handle
  135:  * @args = Parsed arguments array
  136:  * return: 1 exit from Cli!
  137: */
  138: int cli_Cmd_Exit(void *cmds, int idx, FILE *out, char ** __restrict args);
  139: 
  140: 
  141: /*
  142:  * cli_Register_Commands - Declare helper function for register and export Commands variable
  143: */
  144: #define CLI_REGISTER_COMMANDS(CMDS)	\
  145: 	extern cliCommands_t CMDS[];
  146: /*
  147:  * cli_Make_Comp_Commands - Declare helper function for Commands completion arguments
  148: */
  149: #define CLI_MAKE_COMP_COMMANDS(FUNC, CMDS)	\
  150: 	char *FUNC(const char *text, int state) \
  151: 	{ \
  152: 		register int i; \
  153: 		int len = strlen(text); \
  154: 		for (i = state; CMDS[i].cmd_name; i++) { \
  155: 			if (strncmp(CMDS[i].cmd_name, "---", 3) && \
  156: 					!strncmp(CMDS[i].cmd_name, text, len)) \
  157: 				return strdup(CMDS[i].cmd_name); \
  158: 		} \
  159: 		return NULL; \
  160: 	}
  161: 
  162: /*
  163:  * cli_Make_Comp_Args - Declare helper function for Arguments completion
  164: */
  165: #define CLI_MAKE_COMP_ARGS(FUNC, ARGS)	\
  166: 	char *FUNC(const char *text __attribute__((unused)), int state) \
  167: 	{ \
  168: 		while (ARGS[state]) \
  169: 			return strdup(ARGS[state]); \
  170: 		return NULL; \
  171: 	}
  172: 
  173: /*
  174:  * cli_Comp_Filename() Builtin helper function for filename completion arguments
  175:  * @text = Text line
  176:  * @state = Position state
  177:  * return: NULL not found filename, != NULL filename
  178: */
  179: char *cli_Comp_Filename(const char *text, int state);
  180: 
  181: 
  182: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>