/** * @file rtems/shell.h * * Instantatiate a new terminal shell. */ /* * Author: * * WORK: fernando.ruiz@ctv.es * HOME: correo@fernando-ruiz.com * * Thanks at: * Chris John * * $Id$ */ #ifndef __SHELL_H__ #define __SHELL_H__ #include #include #include #ifdef __cplusplus extern "C" { #endif typedef int (*shell_command_t)(int argc,char * argv[]); struct shell_cmd_tt; typedef struct shell_cmd_tt shell_cmd_t; struct shell_cmd_tt { char *name; char *usage; char *topic; shell_command_t command; shell_cmd_t *alias; shell_cmd_t *next; }; typedef struct { char *name; char *alias; } shell_alias_t; shell_cmd_t * shell_lookup_cmd(char * cmd); shell_cmd_t *shell_add_cmd_struct( shell_cmd_t *shell_cmd ); shell_cmd_t * shell_add_cmd( char *cmd, char *topic, char *usage, shell_command_t command ); shell_cmd_t * shell_alias_cmd( char *cmd, char *alias ); int shell_make_args( char *commandLine, int *argc_p, char **argv_p, int max_args ); int shell_scanline(char * line,int size,FILE * in,FILE * out) ; void cat_file(FILE * out,char *name); void write_file(char *name,char * content); /** * Initialise the shell creating tasks to login and run the shell * sessions. * * @param task_name Name of the shell task. * @param task_stacksize The size of the stack. If 0 the default size is used. * @param task_priority The priority the shell runs at. * @param tcflag The termios c_cflag value. If 0 the default is used, if * not 0 the value is ORed with CLOCAL and CREAD. * @param forever Repeat logins. * * @todo CCJ I am not sure this termios flag setting is a good idea. The shell * needs to adjust the termios for its use but it should assume the * settings are set by the user for things like baudrate etc. */ rtems_status_code shell_init( char *task_name, uint32_t task_stacksize, /*0 default*/ rtems_task_priority task_priority, char *devname, tcflag_t tcflag, int forever ); /* * Things that are useful to external entities developing commands and plugging * them in. */ int str2int(char * s); typedef struct { rtems_name magic; /* 'S','E','N','V': Shell Environment */ char *devname; char *taskname; tcflag_t tcflag; /* user extensions */ int exit_shell; /* logout */ int forever ; /* repeat login */ int errorlevel; uintptr_t mdump_addr; } shell_env_t; rtems_boolean shell_shell_loop( shell_env_t *shell_env ); extern shell_env_t global_shell_env; extern shell_env_t *current_shell_env; #ifdef __cplusplus } #endif #endif