forked from Imagelibrary/rtems
* configure.ac: fixed bug that always enabled strict order mutexes. * score/inline/rtems/score/coremutex.inl: Fixed coding standard. * score/src/coremutex.c: Add the holder's thread to the lock_mutex list if the mutex is initialised locked. * libnetworking/rtems/rtems_glue.c: Changed semaphore error message to show the error is an rtems-net error. * libmisc/monitor/mon-network.c: Removed warnings. * telnetd/icmds.c: Changed shell_* to rtems_shell_*. * score/Makefile.am: Fixed typo that stopped 'make tags' working. * libmisc/shell/err.c, libmisc/shell/err.h, libmisc/shell/errx.c, libmisc/shell/extern-cp.h, libmisc/shell/fts.c, libmisc/shell/fts.h, libmisc/shell/main_cp.c, libmisc/shell/utils-cp.c, libmisc/shell/verr.c, libmisc/shell/verrx.c, libmisc/shell/vwarn.c, libmisc/shell/vwarnx.c, libmisc/shell/warn.c, libmisc/shell/warnx.c: New. Ported from BSD. * libmisc/shell/shellconfig.h: Add the cp command. * libmisc/Makefile.am: Add the new files to the shell. * libmisc/shell/shell.c, libmisc/shell/shell.h: Add scripting support. * libblock/src/flashdisk.c: Fixed disk drive count size setting bug.
187 lines
5.0 KiB
C
187 lines
5.0 KiB
C
/**
|
|
* @file rtems/shell.h
|
|
*
|
|
* Instantatiate a new terminal shell.
|
|
*/
|
|
|
|
/*
|
|
* Author:
|
|
*
|
|
* WORK: fernando.ruiz@ctv.es
|
|
* HOME: correo@fernando-ruiz.com
|
|
*
|
|
* Thanks at:
|
|
* Chris Johns
|
|
*
|
|
* $Id$
|
|
*/
|
|
|
|
#ifndef __RTEMS_SHELL_H__
|
|
#define __RTEMS_SHELL_H__
|
|
|
|
#include <rtems.h>
|
|
#include <stdio.h>
|
|
#include <termios.h>
|
|
#include <rtems/fs.h>
|
|
#include <rtems/libio.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef int (*rtems_shell_command_t)(int argc,char * argv[]);
|
|
|
|
struct rtems_shell_cmd_tt;
|
|
typedef struct rtems_shell_cmd_tt rtems_shell_cmd_t;
|
|
|
|
struct rtems_shell_cmd_tt {
|
|
char *name;
|
|
char *usage;
|
|
char *topic;
|
|
rtems_shell_command_t command;
|
|
rtems_shell_cmd_t *alias;
|
|
rtems_shell_cmd_t *next;
|
|
};
|
|
|
|
typedef struct {
|
|
char *name;
|
|
char *alias;
|
|
} rtems_shell_alias_t;
|
|
|
|
rtems_shell_cmd_t * rtems_shell_lookup_cmd(char * cmd);
|
|
|
|
rtems_shell_cmd_t *rtems_shell_add_cmd_struct(
|
|
rtems_shell_cmd_t *shell_cmd
|
|
);
|
|
|
|
rtems_shell_cmd_t * rtems_shell_add_cmd(
|
|
char *cmd,
|
|
char *topic,
|
|
char *usage,
|
|
rtems_shell_command_t command
|
|
);
|
|
|
|
rtems_shell_cmd_t * rtems_shell_alias_cmd(
|
|
char *cmd,
|
|
char *alias
|
|
);
|
|
|
|
int rtems_shell_make_args(
|
|
char *commandLine,
|
|
int *argc_p,
|
|
char **argv_p,
|
|
int max_args
|
|
);
|
|
|
|
int rtems_shell_scanline(char * line,int size,FILE * in,FILE * out) ;
|
|
void rtems_shell_cat_file(FILE * out,char *name);
|
|
void rtems_shell_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 rtems_shell_init(
|
|
char *task_name,
|
|
uint32_t task_stacksize, /*0 default*/
|
|
rtems_task_priority task_priority,
|
|
char *devname,
|
|
tcflag_t tcflag,
|
|
int forever
|
|
);
|
|
|
|
/**
|
|
* Run a shell script creating a shell tasks to execute the command under.
|
|
*
|
|
* @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 input The file of commands. Can be 'stdin' to use stdin.
|
|
* @param output The output file to write commands to. Can be 'stdout',
|
|
* 'stderr' or '/dev/null'.
|
|
* @param output_append Append the output to the file or truncate the file.
|
|
* Create if it does not exist.
|
|
* @param wait Wait for the script to finish.
|
|
*/
|
|
rtems_status_code rtems_shell_script(
|
|
char *task_name,
|
|
uint32_t task_stacksize, /*0 default*/
|
|
rtems_task_priority task_priority,
|
|
const char *input,
|
|
const char *output,
|
|
int output_append,
|
|
int wait
|
|
);
|
|
|
|
/*
|
|
* Things that are useful to external entities developing commands and plugging
|
|
* them in.
|
|
*/
|
|
int rtems_shell_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;
|
|
const char* input;
|
|
const char* output;
|
|
int output_append;
|
|
rtems_id wake_on_end;
|
|
} rtems_shell_env_t;
|
|
|
|
rtems_boolean rtems_shell_main_loop(
|
|
rtems_shell_env_t *rtems_shell_env
|
|
);
|
|
|
|
extern rtems_shell_env_t rtems_global_shell_env;
|
|
extern rtems_shell_env_t *rtems_current_shell_env;
|
|
|
|
/*
|
|
* The types of file systems we can mount. We have them broken out
|
|
* out like this so they can be configured by shellconfig.h. The
|
|
* mount command needs special treatment due to some file systems
|
|
* being dependent on the network stack and some not. If we had
|
|
* all possible file systems being included it would force the
|
|
* networking stack into the applcation and this may not be
|
|
* required.
|
|
*/
|
|
struct rtems_shell_filesystems_tt;
|
|
typedef struct rtems_shell_filesystems_tt rtems_shell_filesystems_t;
|
|
|
|
typedef int (*rtems_shell_filesystems_mounter_t)(
|
|
const char* driver,
|
|
const char* path,
|
|
rtems_shell_filesystems_t* fs,
|
|
rtems_filesystem_options_t options
|
|
);
|
|
|
|
struct rtems_shell_filesystems_tt {
|
|
const char* name;
|
|
int driver_needed;
|
|
rtems_filesystem_operations_table* fs_ops;
|
|
rtems_shell_filesystems_mounter_t mounter;
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|