/** * @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; }; uint32_t new_rtems_name(char * rtems_name); shell_cmd_t * shell_lookup_cmd(char * 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 * cmd, int * pargc, char * argv[]); 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; int mdump_adr; } shell_env_t; 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 ); rtems_boolean shell_shell_loop( shell_env_t *shell_env ); extern shell_env_t global_shell_env; extern shell_env_t *current_shell_env; /*--------*/ /* cmds.c */ /*--------*/ int str2int(char * s); void register_cmds(void); #ifdef __cplusplus } #endif #endif