diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2007-12-14 21:50:01 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2007-12-14 21:50:01 +0000 |
commit | 8fdadc839b00ab5ad939e280cc491507e01cba06 (patch) | |
tree | 4b1dc4d3e17fd9d9152c82b38c360334a74a4d02 /cpukit/libmisc/shell/main_help.c | |
parent | 2007-12-14 Till Straumann <strauman@slac.stanford.edu> (diff) | |
download | rtems-8fdadc839b00ab5ad939e280cc491507e01cba06.tar.bz2 |
2007-12-14 Joel Sherrill <joel.sherrill@oarcorp.com>
* libmisc/Makefile.am, libmisc/shell/cat_file.c,
libmisc/shell/shell_makeargs.c, libmisc/shell/shellconfig.h: Rename
cmd_XXX.c to main_XXX.c. Add cpuuse and stackuse commands.
* libmisc/shell/main_alias.c, libmisc/shell/main_cat.c,
libmisc/shell/main_cd.c, libmisc/shell/main_chdir.c,
libmisc/shell/main_chmod.c, libmisc/shell/main_chroot.c,
libmisc/shell/main_cpuuse.c, libmisc/shell/main_date.c,
libmisc/shell/main_dir.c, libmisc/shell/main_exit.c,
libmisc/shell/main_help.c, libmisc/shell/main_id.c,
libmisc/shell/main_logoff.c, libmisc/shell/main_ls.c,
libmisc/shell/main_mallocdump.c, libmisc/shell/main_mdump.c,
libmisc/shell/main_medit.c, libmisc/shell/main_mfill.c,
libmisc/shell/main_mkdir.c, libmisc/shell/main_mmove.c,
libmisc/shell/main_mwdump.c, libmisc/shell/main_pwd.c,
libmisc/shell/main_rm.c, libmisc/shell/main_rmdir.c,
libmisc/shell/main_stackuse.c, libmisc/shell/main_tty.c,
libmisc/shell/main_umask.c, libmisc/shell/main_whoami.c: New files.
* libmisc/shell/cmd_alias.c, libmisc/shell/cmd_cat.c,
libmisc/shell/cmd_cd.c, libmisc/shell/cmd_chdir.c,
libmisc/shell/cmd_chmod.c, libmisc/shell/cmd_chroot.c,
libmisc/shell/cmd_date.c, libmisc/shell/cmd_dir.c,
libmisc/shell/cmd_exit.c, libmisc/shell/cmd_help.c,
libmisc/shell/cmd_id.c, libmisc/shell/cmd_logoff.c,
libmisc/shell/cmd_ls.c, libmisc/shell/cmd_mallocdump.c,
libmisc/shell/cmd_mdump.c, libmisc/shell/cmd_medit.c,
libmisc/shell/cmd_mfill.c, libmisc/shell/cmd_mkdir.c,
libmisc/shell/cmd_mmove.c, libmisc/shell/cmd_mwdump.c,
libmisc/shell/cmd_pwd.c, libmisc/shell/cmd_rm.c,
libmisc/shell/cmd_rmdir.c, libmisc/shell/cmd_tty.c,
libmisc/shell/cmd_umask.c, libmisc/shell/cmd_whoami.c: Removed.
Diffstat (limited to 'cpukit/libmisc/shell/main_help.c')
-rw-r--r-- | cpukit/libmisc/shell/main_help.c | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/cpukit/libmisc/shell/main_help.c b/cpukit/libmisc/shell/main_help.c new file mode 100644 index 0000000000..964b511b2b --- /dev/null +++ b/cpukit/libmisc/shell/main_help.c @@ -0,0 +1,149 @@ +/* + * + * Shell Help Command + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdio.h> +#include <time.h> + +#include <rtems.h> +#include <rtems/error.h> +#include <rtems/system.h> +#include <rtems/shell.h> + +#include "internal.h" +#include <string.h> + +/* + * show the help for one command. + */ +int shell_help_cmd(shell_cmd_t * shell_cmd) { + char * pc; + int col,line; + + printf("%-10.10s - ",shell_cmd->name); + col = 12; + line = 1; + if (shell_cmd->alias) { + printf("is an <alias> for command '%s'",shell_cmd->alias->name); + } else if (shell_cmd->usage) { + pc = shell_cmd->usage; + while (*pc) { + switch(*pc) { + case '\r': + break; + case '\n': + putchar('\n'); + col = 0; + break; + default: + putchar(*pc); + col++; + break; + } + pc++; + if (col>78) { /* What daring... 78?*/ + if (*pc) { + putchar('\n'); + col = 0; + } + } + if (!col && *pc) { + printf(" "); + col = 12;line++; + } + } + } + puts(""); + return line; +} + +/* + * show the help. The first command implemented. + * Can you see the header of routine? Known? + * The same with all the commands.... + */ +int shell_help( + int argc, + char * argv[] +) +{ + int col,line,arg; + shell_topic_t *topic; + shell_cmd_t * shell_cmd = shell_first_cmd; + + if (argc<2) { + printf("help: ('r' repeat last cmd - 'e' edit last cmd)\n" + " TOPIC? The topics are\n"); + topic = shell_first_topic; + col = 0; + while (topic) { + if (!col){ + col = printf(" %s",topic->topic); + } else { + if ((col+strlen(topic->topic)+2)>78){ + printf("\n"); + col = printf(" %s",topic->topic); + } else { + col+= printf(", %s",topic->topic); + } + } + topic = topic->next; + } + printf("\n"); + return 1; + } + line = 0; + for (arg = 1;arg<argc;arg++) { + if (line>16) { + printf("Press any key to continue...");getchar(); + printf("\n"); + line = 0; + } + topic = shell_lookup_topic(argv[arg]); + if (!topic){ + if ((shell_cmd = shell_lookup_cmd(argv[arg])) == NULL) { + printf("help: topic or cmd '%s' not found. Try <help> alone for a list\n", + argv[arg]); + line++; + } else { + line+= shell_help_cmd(shell_cmd); + } + continue; + } + printf("help: list for the topic '%s'\n",argv[arg]); + line++; + while (shell_cmd) { + if (!strcmp(topic->topic,shell_cmd->topic)) + line+= shell_help_cmd(shell_cmd); + if (line>16) { + printf("Press any key to continue..."); + getchar(); + printf("\n"); + line = 0; + } + shell_cmd = shell_cmd->next; + } + } + puts(""); + return 0; +} + +shell_cmd_t Shell_HELP_Command = { + "help", /* name */ + "help [topic] # list of usage of commands", /* usage */ + "help", /* topic */ + shell_help, /* command */ + NULL, /* alias */ + NULL /* next */ +}; |