From 9e631a7513ed34c27a36cacd0b22cfb2fd695dad Mon Sep 17 00:00:00 2001 From: crunchy Date: Sat, 12 Oct 2002 20:06:21 +0000 Subject: add alias support for commands and extended argument completion --- mpiosh/Makefile.am | 4 +- mpiosh/callback.c | 11 +++++- mpiosh/command.c | 12 +++++- mpiosh/global.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++ mpiosh/global.h | 59 ++++++++++++++++++++++++++++ mpiosh/mpiosh.c | 95 +-------------------------------------------- mpiosh/mpiosh.h | 31 ++------------- mpiosh/readline.c | 34 ++++++++++++---- 8 files changed, 223 insertions(+), 134 deletions(-) create mode 100644 mpiosh/global.c create mode 100644 mpiosh/global.h (limited to 'mpiosh') diff --git a/mpiosh/Makefile.am b/mpiosh/Makefile.am index db79d0f..d6586a8 100644 --- a/mpiosh/Makefile.am +++ b/mpiosh/Makefile.am @@ -2,7 +2,7 @@ INCLUDES=-I.. bin_PROGRAMS=mpiosh -mpiosh_SOURCES=mpiosh.c callback.c readline.c command.c +mpiosh_SOURCES=mpiosh.c callback.c readline.c command.c global.c mpiosh_LDADD=../libmpio/libmpio.la -lreadline -lncurses -noinst_HEADERS=mpiosh.h callback.h readline.h command.h \ No newline at end of file +noinst_HEADERS=mpiosh.h callback.h readline.h command.h global.h \ No newline at end of file diff --git a/mpiosh/callback.c b/mpiosh/callback.c index 5d85781..65cfa49 100644 --- a/mpiosh/callback.c +++ b/mpiosh/callback.c @@ -2,7 +2,7 @@ * * Author: Andreas Büsching * - * $Id: callback.c,v 1.21 2002/10/12 18:31:45 crunchy Exp $ + * $Id: callback.c,v 1.22 2002/10/12 20:06:22 crunchy Exp $ * * Copyright (C) 2001 Andreas Büsching * @@ -100,8 +100,15 @@ mpiosh_cmd_help(char *args[]) printf(" %s\n", cmd->args); else printf("\n"); + if (cmd->aliases) { + char **go = cmd->aliases; + printf(" alias:\n "); + while(*go) printf(( *(go+1) ? "%s" : "%s, "), *go++); + printf("\n"); + } + if (cmd->info) - printf("%s\n", cmd->info); + printf(" description:\n%s\n", cmd->info); else printf("\n"); } diff --git a/mpiosh/command.c b/mpiosh/command.c index 7000e24..338ee8d 100644 --- a/mpiosh/command.c +++ b/mpiosh/command.c @@ -2,7 +2,7 @@ * * Author: Andreas Buesching * - * $Id: command.c,v 1.1 2002/10/12 18:31:45 crunchy Exp $ + * $Id: command.c,v 1.2 2002/10/12 20:06:22 crunchy Exp $ * * Copyright (C) 2001 Andreas Büsching * @@ -74,7 +74,17 @@ mpiosh_command_find(char *line) if (line[strlen(cmd->cmd)] == ' ' || line[strlen(cmd->cmd)] == '\0') return cmd; + } else if (cmd->aliases) { + char **go = cmd->aliases; + while (*go) { + if ((strstr(line, *go) == line) && + ((line[strlen(*go)] == ' ') || (line[strlen(*go)] == '\0'))) { + return cmd; + } + go++; + } } + cmd++; } diff --git a/mpiosh/global.c b/mpiosh/global.c new file mode 100644 index 0000000..832ac8b --- /dev/null +++ b/mpiosh/global.c @@ -0,0 +1,111 @@ +/* global.c - containing global symbols for mpiosh + * + * Author: Andreas Buesching + * + * $Id: global.c,v 1.1 2002/10/12 20:06:22 crunchy Exp $ + * + * Copyright (C) 2001 Andreas Büsching + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "callback.h" +#include "global.h" +#include "readline.h" + +/* structure containing current state */ +mpiosh_t mpiosh; + +/* flag indicating a user-interrupt of the current command */ +int mpiosh_cancel = 0; +int mpiosh_cancel_ack = 0; + +/* prompt strings */ +const char *PROMPT_INT = "\033[;1mmpio \033[m "; +const char *PROMPT_EXT = "\033[;1mmpio \033[m "; + +mpiosh_cmd_t commands[] = { + { "debug", NULL , "[level|file|on|off] ", + " modify debugging options", + mpiosh_cmd_debug, NULL }, + { "ver", NULL, NULL, + " version of mpio package", + mpiosh_cmd_version, NULL }, + { "help", NULL, "[]", + " show information about known commands or just about ", + mpiosh_cmd_help, mpiosh_readline_comp_cmd }, + { "dir", (char *[]){ "ls", "ll", NULL }, NULL, + " list content of current memory card", + mpiosh_cmd_dir, NULL }, + { "info", NULL, NULL, + " show information about MPIO player", + mpiosh_cmd_info, NULL }, + { "mem", NULL, "[i|e]", + " set current memory card. 'i' selects the internal and 'e'\n" + " selects the external memory card (smart media card)", + mpiosh_cmd_mem, NULL }, + { "open", NULL, NULL, + " open connect to MPIO player", + mpiosh_cmd_open, NULL }, + { "close", NULL, NULL, + " close connect to MPIO player", + mpiosh_cmd_close, NULL }, + { "quit", (char *[]){ "exit", NULL }, NULL, + " exit mpiosh and close the device", + mpiosh_cmd_quit, NULL }, + { "mget", (char *[]){ "get", NULL }, "list of filenames and ", + " read all files matching the regular expression\n" + " from the selected memory card", + mpiosh_cmd_mget, mpiosh_readline_comp_mpio_file }, + { "mput", (char *[]){ "put", NULL }, "list of filenames and ", + " write all local files matching the regular expression\n" + " to the selected memory card", + mpiosh_cmd_mput, mpiosh_readline_comp_mpio_file }, + { "mdel", (char *[]){ "rm", "del", NULL }, "", + " deletes all files matching the regular expression\n" + " from the selected memory card", + mpiosh_cmd_mdel, mpiosh_readline_comp_mpio_file }, + { "dump", NULL, NULL, + " get all files of current memory card", + mpiosh_cmd_dump, NULL }, + { "free", NULL, NULL, + " display amount of available bytes of current memory card", + mpiosh_cmd_free, NULL }, + { "format", NULL, NULL, + " format current memory card", + mpiosh_cmd_format, NULL }, +/* { "switch", " ", */ +/* "switches the order of two files", */ +/* mpiosh_cmd_switch }, */ + { "ldir", (char *[]){ "lls", NULL }, NULL, + " list local directory", + mpiosh_cmd_ldir, NULL }, + { "lpwd", NULL, NULL, + " print current working directory", + mpiosh_cmd_lpwd, NULL }, + { "lcd", NULL, NULL, + " change the current working directory", + mpiosh_cmd_lcd, NULL }, + { "lmkdir", NULL, NULL, + " create a local directory", + mpiosh_cmd_lmkdir, NULL }, + { "dump_memory", NULL, NULL, + " dump FAT, directory, spare area and the first 0x100 of the\n" + " selected memory card", + mpiosh_cmd_dump_mem, NULL }, + { NULL, NULL, NULL, NULL, NULL, NULL } +}; + +/* end of global.c */ diff --git a/mpiosh/global.h b/mpiosh/global.h new file mode 100644 index 0000000..4800d68 --- /dev/null +++ b/mpiosh/global.h @@ -0,0 +1,59 @@ +/* global.h + * + * Author: Andreas Buesching + * + * $Id: global.h,v 1.1 2002/10/12 20:06:22 crunchy Exp $ + * + * Copyright (C) 2001 Andreas Büsching + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef MPIOSH_GLOBAL_HH +#define MPIOSH_GLOBAL_HH + +#include "libmpio/mpio.h" + +/* type definitions */ +typedef void(*mpiosh_cmd_callback_t)(char *args[]); +typedef char *(*mpiosh_comp_callback_t)(const char *text, int state); + +typedef struct { + mpio_t * dev; + mpio_mem_t card; + const char * prompt; +} mpiosh_t; + +typedef struct { + char * cmd; + char ** aliases; + char * args; + char * info; + mpiosh_cmd_callback_t cmd_func; + mpiosh_comp_callback_t comp_func; +} mpiosh_cmd_t; + +/* global structures */ +extern mpiosh_t mpiosh; +extern mpiosh_cmd_t commands[]; +extern int mpiosh_cancel; +extern int mpiosh_cancel_ack; + +extern const char *PROMPT_INT; +extern const char *PROMPT_EXT; + +#endif + +/* end of global.h */ diff --git a/mpiosh/mpiosh.c b/mpiosh/mpiosh.c index ff6b9d8..f5896a5 100644 --- a/mpiosh/mpiosh.c +++ b/mpiosh/mpiosh.c @@ -2,7 +2,7 @@ /* * - * $Id: mpiosh.c,v 1.19 2002/10/12 18:31:45 crunchy Exp $ + * $Id: mpiosh.c,v 1.20 2002/10/12 20:06:22 crunchy Exp $ * * Author: Andreas Büsching * @@ -37,99 +37,6 @@ #include "readline.h" #include "mpiosh.h" -/* structure containing current state */ -mpiosh_t mpiosh; - -/* flag indicating a user-interrupt of the current command */ -int mpiosh_cancel = 0; -int mpiosh_cancel_ack = 0; - -/* prompt strings */ -const char *PROMPT_INT = "\033[;1mmpio \033[m "; -const char *PROMPT_EXT = "\033[;1mmpio \033[m "; - -mpiosh_cmd_t commands[] = { - { "debug", "[level|file|on|off] ", - " modify debugging options", - mpiosh_cmd_debug, NULL }, - { "ver", NULL, - " version of mpio package", - mpiosh_cmd_version, NULL }, - { "help", "[]", - " show information about known commands or just about ", - mpiosh_cmd_help, NULL }, - { "dir", NULL, - " list content of current memory card", - mpiosh_cmd_dir, NULL }, - { "info", NULL, - " show information about MPIO player", - mpiosh_cmd_info, NULL }, - { "mem", "[i|e]", - " set current memory card. 'i' selects the internal and 'e'\n" - " selects the external memory card (smart media card)", - mpiosh_cmd_mem, NULL }, - { "open", NULL, - " open connect to MPIO player", - mpiosh_cmd_open, NULL }, - { "close", NULL, - " close connect to MPIO player", - mpiosh_cmd_close, NULL }, - { "quit", " or exit", - "exit mpiosh and close the device", - mpiosh_cmd_quit, NULL }, - { "exit", NULL, NULL, mpiosh_cmd_quit }, - { "get", "", - "read from memory card", - mpiosh_cmd_get, mpiosh_readline_comp_mpio_file }, - { "mget", "", - " read all files matching the regular expression\n" - " from the selected memory card", - mpiosh_cmd_mget, mpiosh_readline_comp_mpio_file }, - { "put", "", - " write to memory card", - mpiosh_cmd_put, mpiosh_readline_comp_mpio_file }, - { "mput", "", - " write all local files matching the regular expression\n" - " to the selected memory card", - mpiosh_cmd_mput, mpiosh_readline_comp_mpio_file }, - { "del", "", - " deletes from memory card", - mpiosh_cmd_del, mpiosh_readline_comp_mpio_file }, - { "mdel", "", - " deletes all files matching the regular expression\n" - " from the selected memory card", - mpiosh_cmd_mdel, mpiosh_readline_comp_mpio_file }, - { "dump", NULL, - " get all files of current memory card", - mpiosh_cmd_dump, NULL }, - { "free", NULL, - " display amount of available bytes of current memory card", - mpiosh_cmd_free, NULL }, - { "format", NULL, - " format current memory card", - mpiosh_cmd_format, NULL }, -/* { "switch", " ", */ -/* "switches the order of two files", */ -/* mpiosh_cmd_switch }, */ - { "ldir", NULL, - " list local directory", - mpiosh_cmd_ldir, NULL }, - { "lpwd", NULL, - " print current working directory", - mpiosh_cmd_lpwd, NULL }, - { "lcd", NULL, - " change the current working directory", - mpiosh_cmd_lcd, NULL }, - { "lmkdir", NULL, - " create a local directory", - mpiosh_cmd_lmkdir, NULL }, - { "dump_memory", NULL, - " dump FAT, directory, spare area and the first 0x100 of the\n" - " selected memory card", - mpiosh_cmd_dump_mem, NULL }, - { NULL, NULL, NULL, NULL, NULL } -}; - /* mpiosh core functions */ void mpiosh_init(void) diff --git a/mpiosh/mpiosh.h b/mpiosh/mpiosh.h index 5bb76da..8291178 100644 --- a/mpiosh/mpiosh.h +++ b/mpiosh/mpiosh.h @@ -2,7 +2,7 @@ * * Author: Andreas Büsching * - * $Id: mpiosh.h,v 1.7 2002/10/12 18:31:45 crunchy Exp $ + * $Id: mpiosh.h,v 1.8 2002/10/12 20:06:22 crunchy Exp $ * * Copyright (C) 2002 Andreas Büsching * @@ -24,39 +24,14 @@ #ifndef _MPIOSH_H_ #define _MPIOSH_H_ -#include "libmpio/mpio.h" #include "libmpio/debug.h" -typedef void(*mpiosh_cmd_callback_t)(char *args[]); -typedef char *(*mpiosh_comp_callback_t)(const char *text, int state); - -typedef struct { - mpio_t * dev; - mpio_mem_t card; - const char * prompt; -} mpiosh_t; - -typedef struct { - char * cmd; - char * args; - char * info; - mpiosh_cmd_callback_t cmd_func; - mpiosh_comp_callback_t comp_func; -} mpiosh_cmd_t; - +#include "global.h" + /* mpiosh core functions */ void mpiosh_signal_handler(int signal); void mpiosh_init(void); -/* global structures */ -extern mpiosh_t mpiosh; -extern mpiosh_cmd_t commands[]; -extern int mpiosh_cancel; -extern int mpiosh_cancel_ack; - -extern const char *PROMPT_INT; -extern const char *PROMPT_EXT; - #endif // _MPIOSH_H_ /* end of mpiosh.h */ diff --git a/mpiosh/readline.c b/mpiosh/readline.c index 0b8731d..5427b9f 100644 --- a/mpiosh/readline.c +++ b/mpiosh/readline.c @@ -2,7 +2,7 @@ * * Author: Andreas Büsching * - * $Id: readline.c,v 1.1 2002/10/12 18:31:45 crunchy Exp $ + * $Id: readline.c,v 1.2 2002/10/12 20:06:22 crunchy Exp $ * * Copyright (C) 2001 Andreas Büsching * @@ -41,7 +41,9 @@ mpiosh_readline_init(void) char * mpiosh_readline_comp_cmd(const char *text, int state) { - static mpiosh_cmd_t *cmd = NULL; + static mpiosh_cmd_t * cmd = NULL; + static char ** alias = NULL; + char *cmd_text = NULL; if (state == 0) { @@ -49,12 +51,30 @@ mpiosh_readline_comp_cmd(const char *text, int state) } while (cmd->cmd) { - if ((*text == '\0') || (strstr(cmd->cmd, text) == cmd->cmd)) { - cmd_text = strdup(cmd->cmd); - cmd++; - break; + if (!alias) { + if ((*text == '\0') || (strstr(cmd->cmd, text) == cmd->cmd)) { + cmd_text = strdup(cmd->cmd); + if (cmd->aliases) alias = cmd->aliases; + else cmd++; + break; + } + if (cmd->aliases) alias = cmd->aliases; + else cmd++; + } else { + int break_it = 0; + + while (*alias) { + if (strstr(*alias, text) == *alias) { + cmd_text = strdup(*alias); + alias++; + break_it = 1; + break; + } + alias++; + } + if (break_it) break; + if (*alias == NULL) cmd++, alias = NULL; } - cmd++; } return cmd_text; -- cgit v1.2.3