File:  [ELWIX - Embedded LightWeight unIX -] / libaitcli / src / cli.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Fri Apr 16 13:20:29 2010 UTC (14 years, 3 months ago) by misho
Branches: start
CVS tags: misho, cli2_0, cli1_0_readlineNET, cli1_0, CLI1_0
libaitcli AIT CLI API

/*************************************************************************
* (C) 2010 AITNET ltd - Sofia/Bulgaria - <misho@aitbg.com>
*  by Michael Pounov <misho@openbsd-bg.org>
*
* $Author: misho $
* $Id: cli.c,v 1.1.1.1 2010/04/16 13:20:29 misho Exp $
*
*************************************************************************/
#include "global.h"


/*
 * cli_Cmd_Exit() Builtin helper function for Exit from Cli
 * @cmds = Commands list
 * @idx = Selected command ID
 * @out = Output handle
 * @args = Parsed arguments array
 * return: 1 exit from Cli!
*/
int cli_Cmd_Exit(void *cmds, int idx, FILE *out, char ** __restrict args)
{
	return 1;
}

/*
 * cli_Cmd_Help() Builtin helper function for Help screen
 * @cmds = Commands list
 * @idx = Selected command ID
 * @out = Output handle
 * @args = Parsed arguments array
 * return: -1 error, 0 = ok
*/
int cli_Cmd_Help(void *cmds, int idx, FILE *out, char ** __restrict args)
{
	register int i;
	cliCommands_t *commands = cmds;

	if (!cmds)
		return -1;

	if (!args) {
		cli_Printf(out, "\n");
		for (i = 0; commands[i].cmd_name; i++)
			cli_Printf(out, "%s\t\t%s\n", commands[i].cmd_name, commands[i].cmd_doc);
	} else {
		if (!args[1])
			cli_Printf(out, "Help screen::\n");
		else
			if (!strncmp(args[1], "---", 3))
				return 0;

		for (i = 0; commands[i].cmd_name; i++) {
			if (args[1] && strcmp(args[1], commands[i].cmd_name))
				continue;

			cli_Printf(out, "%s%s\t\t%s\n", args[1] ? "Syntax::\n\t" : "", commands[i].cmd_name, 
					args[1] ? commands[i].cmd_help : commands[i].cmd_doc);
		}
	}

	return 0;
}

/*
 * cli_Cmd_Unsupported() Builtin helper function for unsupported commands
 * @cmds = Commands list
 * @idx = Selected command ID
 * @out = Output handle
 * @args = Parsed arguments array
 * return: -1 error, 0 = ok, 1 exit from Cli!
*/
int cli_Cmd_Unsupported(void *cmds, int idx, FILE *out, char ** __restrict args)
{
	cli_Printf(out, "Command %s not supported in this version ...\n", args[0]);
	return 0;
}

// ------------------------------------------------------------

/*
 * cli_Comp_Filename() Builtin helper function for filename completion arguments
 * @text = Text line
 * @state = Position state
 * return: NULL not found filename, != NULL filename
*/
char *cli_Comp_Filename(const char *text, int state)
{
	return rl_filename_completion_function(text, state);
}


// ------------------------------------------------------------

/*
 * cli_PrintHelp() Helper print for missing command arguments
 * @out = Output stream
 * @cmds = Commands list
 * @idx = Selected command ID
 * return: -1 error, !=-1 ok
 * return: none
*/
inline int cli_PrintHelp(FILE *out, void *cmds, int idx)
{
	cliCommands_t *c = cmds;

	return cli_Printf(out, "%s\n", c[idx].cmd_help);
}


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