forked from Imagelibrary/rtems
* monitor/mon-prmisc.c: Correct print line. * shell/Makefile.am: Added new file telnetd.c. * shell/telnetd.c, shell/telnetd.h, shell/pty.c: New files. * shell/shell.c, shell/cmds.c, shell/shell.h: Numerous improvments: - The shell_init has a new parameter 'forever' because in /dev/console you need that this process runs forever but in tcp/ip not. (respawn?) - A new task for every session opened trought tcp/ip telnet client. (the chargen,daytime and more are possible of implementation but I ask me if they are necesary) - Exit from the session delete the task and when the client fails too. - More cmds have been implemented. (very reduced version of these) umask, chmod, id, whoami, rm, cat, ... - A reduced line edit has been implemented. Ctrl-C abort the input, Ctrl-d in the first position gives EOF (logout). '\b' and DEL makes the rubout operation. I think that readline() for every session spents a lot of resources.
113 lines
2.7 KiB
C
113 lines
2.7 KiB
C
/*
|
|
* $Id$
|
|
*/
|
|
|
|
#ifndef __SHELL_H__
|
|
#define __SHELL_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <rtems.h>
|
|
#include <stdio.h>
|
|
#include <termios.h>
|
|
|
|
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;
|
|
};
|
|
|
|
rtems_unsigned32 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);
|
|
|
|
rtems_status_code shell_init(char * task_name ,
|
|
rtems_unsigned32 task_stacksize,/*0 default*/
|
|
rtems_task_priority task_priority ,
|
|
char * devname ,
|
|
tcflag_t tcflag ,
|
|
int forever );
|
|
|
|
extern shell_env_t global_shell_env,
|
|
* current_shell_env;
|
|
/*--------*/
|
|
/* pty.c */
|
|
/*--------*/
|
|
|
|
char * get_pty(int socket);
|
|
|
|
|
|
rtems_device_driver pty_initialize(
|
|
rtems_device_major_number major,
|
|
rtems_device_minor_number minor,
|
|
void *arg);
|
|
rtems_device_driver pty_open(
|
|
rtems_device_major_number major,
|
|
rtems_device_minor_number minor,
|
|
void * arg);
|
|
rtems_device_driver pty_close(
|
|
rtems_device_major_number major,
|
|
rtems_device_minor_number minor,
|
|
void * arg);
|
|
rtems_device_driver pty_read(
|
|
rtems_device_major_number major,
|
|
rtems_device_minor_number minor,
|
|
void * arg);
|
|
rtems_device_driver pty_write(
|
|
rtems_device_major_number major,
|
|
rtems_device_minor_number minor,
|
|
void * arg);
|
|
rtems_device_driver pty_control(
|
|
rtems_device_major_number major,
|
|
rtems_device_minor_number minor,
|
|
void * arg);
|
|
|
|
|
|
#define PTY_DRIVER_TABLE_ENTRY \
|
|
{ pty_initialize , pty_open , pty_close , \
|
|
pty_read , pty_write , pty_control }
|
|
/*--------*/
|
|
/* cmds.c */
|
|
/*--------*/
|
|
int str2int(char * s);
|
|
void register_cmds(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|