mirror of
				https://git.kernel.org/pub/scm/network/wireless/iwd.git
				synced 2025-11-04 00:37:22 +01:00 
			
		
		
		
	client: define basic command ops
This commit is contained in:
		
							parent
							
								
									af8afc6814
								
							
						
					
					
						commit
						17569c8d8b
					
				@ -27,9 +27,80 @@
 | 
			
		||||
#include <ell/ell.h>
 | 
			
		||||
 | 
			
		||||
#include "command.h"
 | 
			
		||||
#include "display.h"
 | 
			
		||||
 | 
			
		||||
static struct l_queue *command_families;
 | 
			
		||||
 | 
			
		||||
static void cmd_version(const char *entity, char *arg)
 | 
			
		||||
{
 | 
			
		||||
	display("IWD version %s\n", VERSION);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void cmd_quit(const char *entity, char *arg)
 | 
			
		||||
{
 | 
			
		||||
	display_quit();
 | 
			
		||||
 | 
			
		||||
	l_main_quit();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct command command_list[] = {
 | 
			
		||||
	{ NULL, "version", NULL, cmd_version, "Display version" },
 | 
			
		||||
	{ NULL, "quit",    NULL, cmd_quit,    "Quit program" },
 | 
			
		||||
	{ NULL, "exit",    NULL, cmd_quit },
 | 
			
		||||
	{ NULL, "help" },
 | 
			
		||||
	{ }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static bool match_cmd(const char *family, const char *entity, const char *cmd,
 | 
			
		||||
				char *args, const struct command *command_list)
 | 
			
		||||
{
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool match_cmd_family(const char *cmd_family, char *arg)
 | 
			
		||||
{
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void list_commands(const char *command_family,
 | 
			
		||||
						const struct command *cmd_list)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void list_cmd_families(void)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void command_process_prompt(char *prompt)
 | 
			
		||||
{
 | 
			
		||||
	const char *cmd;
 | 
			
		||||
	char *arg = NULL;
 | 
			
		||||
 | 
			
		||||
	cmd = strtok_r(prompt, " ", &arg);
 | 
			
		||||
	if (!cmd)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (match_cmd_family(cmd, arg))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (match_cmd(NULL, NULL, cmd, arg, command_list))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (strcmp(cmd, "help")) {
 | 
			
		||||
		display("Invalid command\n");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	display_table_header("Available commands", MARGIN "%-*s%-*s",
 | 
			
		||||
					50, "Commands", 28, "Description");
 | 
			
		||||
 | 
			
		||||
	list_cmd_families();
 | 
			
		||||
 | 
			
		||||
	display("\n");
 | 
			
		||||
 | 
			
		||||
	list_commands(NULL, command_list);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void command_family_register(const struct command_family *family)
 | 
			
		||||
{
 | 
			
		||||
	l_queue_push_tail(command_families, (void *) family);
 | 
			
		||||
 | 
			
		||||
@ -20,10 +20,23 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
typedef char *(*command_completion_func_t) (const char *text, int state);
 | 
			
		||||
 | 
			
		||||
struct command {
 | 
			
		||||
	const char *entity;
 | 
			
		||||
	const char *cmd;
 | 
			
		||||
	const char *arg;
 | 
			
		||||
	void (*function)(const char *entity, char *arg);
 | 
			
		||||
	const char *desc;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct command_family {
 | 
			
		||||
	const char *name;
 | 
			
		||||
	const struct command *command_list;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void command_process_prompt(char *prompt);
 | 
			
		||||
 | 
			
		||||
void command_family_register(const struct command_family *family);
 | 
			
		||||
void command_family_unregister(const struct command_family *family);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user