diff options
| author | Peter Tyser <ptyser@xes-inc.com> | 2009-10-16 17:36:25 -0500 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2009-11-23 00:06:11 +0100 | 
| commit | 6b8f5ad10f567362a3682840f59ba0fc470af319 (patch) | |
| tree | 1611fa66c7f3947b4f20cf4287dc9b36a368e001 | |
| parent | db6ab438d6e112b65b210f3ab00848e664c8f762 (diff) | |
| download | olio-uboot-2014.01-6b8f5ad10f567362a3682840f59ba0fc470af319.tar.xz olio-uboot-2014.01-6b8f5ad10f567362a3682840f59ba0fc470af319.zip | |
command.c: Break commands out to appropriate cmd_*.c files
command.c should contain common code related to commands, not
miscellaneous command implementations.
Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
| -rw-r--r-- | common/Makefile | 5 | ||||
| -rw-r--r-- | common/cmd_echo.c | 58 | ||||
| -rw-r--r-- | common/cmd_exit.c | 42 | ||||
| -rw-r--r-- | common/cmd_help.c | 57 | ||||
| -rw-r--r-- | common/cmd_test.c | 151 | ||||
| -rw-r--r-- | common/cmd_version.c | 40 | ||||
| -rw-r--r-- | common/command.c | 233 | 
7 files changed, 353 insertions, 233 deletions
| diff --git a/common/Makefile b/common/Makefile index b8c596c7c..ec025eddd 100644 --- a/common/Makefile +++ b/common/Makefile @@ -45,7 +45,9 @@ COBJS-y += xyzModem.o  # core command  COBJS-y += cmd_boot.o  COBJS-y += cmd_bootm.o +COBJS-y += cmd_help.o  COBJS-y += cmd_nvedit.o +COBJS-y += cmd_version.o  # environment  COBJS-y += env_common.o @@ -84,9 +86,11 @@ COBJS-$(CONFIG_CMD_DIAG) += cmd_diag.o  endif  COBJS-$(CONFIG_CMD_DISPLAY) += cmd_display.o  COBJS-$(CONFIG_CMD_DTT) += cmd_dtt.o +COBJS-$(CONFIG_CMD_ECHO) += cmd_echo.o  COBJS-$(CONFIG_ENV_IS_IN_EEPROM) += cmd_eeprom.o  COBJS-$(CONFIG_CMD_EEPROM) += cmd_eeprom.o  COBJS-$(CONFIG_CMD_ELF) += cmd_elf.o +COBJS-$(CONFIG_SYS_HUSH_PARSER) += cmd_exit.o  COBJS-$(CONFIG_CMD_EXT2) += cmd_ext2.o  COBJS-$(CONFIG_CMD_FAT) += cmd_fat.o  COBJS-$(CONFIG_CMD_FDC)$(CONFIG_CMD_FDOS) += cmd_fdc.o @@ -135,6 +139,7 @@ COBJS-$(CONFIG_CMD_SPI) += cmd_spi.o  COBJS-$(CONFIG_CMD_SPIBOOTLDR) += cmd_spibootldr.o  COBJS-$(CONFIG_CMD_STRINGS) += cmd_strings.o  COBJS-$(CONFIG_CMD_TERMINAL) += cmd_terminal.o +COBJS-$(CONFIG_SYS_HUSH_PARSER) += cmd_test.o  COBJS-$(CONFIG_CMD_TSI148) += cmd_tsi148.o  COBJS-$(CONFIG_CMD_UBI) += cmd_ubi.o  COBJS-$(CONFIG_CMD_UBIFS) += cmd_ubifs.o diff --git a/common/cmd_echo.c b/common/cmd_echo.c new file mode 100644 index 000000000..3ec4d4856 --- /dev/null +++ b/common/cmd_echo.c @@ -0,0 +1,58 @@ +/* + * Copyright 2000-2009 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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 of + * the License, 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 <common.h> +#include <command.h> + +int do_echo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ +	int i; +	int putnl = 1; + +	for (i = 1; i < argc; i++) { +		char *p = argv[i], c; + +		if (i > 1) +			putc(' '); +		while ((c = *p++) != '\0') { +			if (c == '\\' && *p == 'c') { +				putnl = 0; +				p++; +			} else { +				putc(c); +			} +		} +	} + +	if (putnl) +		putc('\n'); + +	return 0; +} + +U_BOOT_CMD( +	echo,	CONFIG_SYS_MAXARGS,	1,	do_echo, +	"echo args to console", +	"[args..]\n" +	"    - echo args to console; \\c suppresses newline" +); diff --git a/common/cmd_exit.c b/common/cmd_exit.c new file mode 100644 index 000000000..ed876d8c9 --- /dev/null +++ b/common/cmd_exit.c @@ -0,0 +1,42 @@ +/* + * Copyright 2000-2009 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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 of + * the License, 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 <common.h> +#include <command.h> + +int do_exit(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ +	int r; + +	r = 0; +	if (argc > 1) +		r = simple_strtoul(argv[1], NULL, 10); + +	return -r - 2; +} + +U_BOOT_CMD( +	exit,	2,	1,	do_exit, +	"exit script", +	"" +); diff --git a/common/cmd_help.c b/common/cmd_help.c new file mode 100644 index 000000000..f01d14e47 --- /dev/null +++ b/common/cmd_help.c @@ -0,0 +1,57 @@ +/* + * Copyright 2000-2009 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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 of + * the License, 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 <common.h> +#include <command.h> + +int do_help(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) +{ +	return _do_help(&__u_boot_cmd_start, +			&__u_boot_cmd_end - &__u_boot_cmd_start, +			cmdtp, flag, argc, argv); +} + +U_BOOT_CMD( +	help,	CONFIG_SYS_MAXARGS,	1,	do_help, +	"print online help", +	"[command ...]\n" +	"    - show help information (for 'command')\n" +	"'help' prints online help for the monitor commands.\n\n" +	"Without arguments, it prints a short usage message for all commands.\n\n" +	"To get detailed help information for specific commands you can type\n" +	"'help' with one or more command names as arguments." +); + +/* This does not use the U_BOOT_CMD macro as ? can't be used in symbol names */ +#ifdef  CONFIG_SYS_LONGHELP +cmd_tbl_t __u_boot_cmd_question_mark Struct_Section = { +	"?",	CONFIG_SYS_MAXARGS,	1,	do_help, +	"alias for 'help'", +	"" +}; +#else +cmd_tbl_t __u_boot_cmd_question_mark Struct_Section = { +	"?",	CONFIG_SYS_MAXARGS,	1,	do_help, +	"alias for 'help'" +}; +#endif /* CONFIG_SYS_LONGHELP */ diff --git a/common/cmd_test.c b/common/cmd_test.c new file mode 100644 index 000000000..3cdd07bf3 --- /dev/null +++ b/common/cmd_test.c @@ -0,0 +1,151 @@ +/* + * Copyright 2000-2009 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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 of + * the License, 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 <common.h> +#include <command.h> + +int do_test(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ +	char **ap; +	int left, adv, expr, last_expr, neg, last_cmp; + +	/* args? */ +	if (argc < 3) +		return 1; + +#if 0 +	{ +		printf("test:"); +		left = 1; +		while (argv[left]) +			printf(" %s", argv[left++]); +	} +#endif + +	last_expr = 0; +	left = argc - 1; ap = argv + 1; +	if (left > 0 && strcmp(ap[0], "!") == 0) { +		neg = 1; +		ap++; +		left--; +	} else +		neg = 0; + +	expr = -1; +	last_cmp = -1; +	last_expr = -1; +	while (left > 0) { + +		if (strcmp(ap[0], "-o") == 0 || strcmp(ap[0], "-a") == 0) +			adv = 1; +		else if (strcmp(ap[0], "-z") == 0 || strcmp(ap[0], "-n") == 0) +			adv = 2; +		else +			adv = 3; + +		if (left < adv) { +			expr = 1; +			break; +		} + +		if (adv == 1) { +			if (strcmp(ap[0], "-o") == 0) { +				last_expr = expr; +				last_cmp = 0; +			} else if (strcmp(ap[0], "-a") == 0) { +				last_expr = expr; +				last_cmp = 1; +			} else { +				expr = 1; +				break; +			} +		} + +		if (adv == 2) { +			if (strcmp(ap[0], "-z") == 0) +				expr = strlen(ap[1]) == 0 ? 1 : 0; +			else if (strcmp(ap[0], "-n") == 0) +				expr = strlen(ap[1]) == 0 ? 0 : 1; +			else { +				expr = 1; +				break; +			} + +			if (last_cmp == 0) +				expr = last_expr || expr; +			else if (last_cmp == 1) +				expr = last_expr && expr; +			last_cmp = -1; +		} + +		if (adv == 3) { +			if (strcmp(ap[1], "=") == 0) +				expr = strcmp(ap[0], ap[2]) == 0; +			else if (strcmp(ap[1], "!=") == 0) +				expr = strcmp(ap[0], ap[2]) != 0; +			else if (strcmp(ap[1], ">") == 0) +				expr = strcmp(ap[0], ap[2]) > 0; +			else if (strcmp(ap[1], "<") == 0) +				expr = strcmp(ap[0], ap[2]) < 0; +			else if (strcmp(ap[1], "-eq") == 0) +				expr = simple_strtol(ap[0], NULL, 10) == simple_strtol(ap[2], NULL, 10); +			else if (strcmp(ap[1], "-ne") == 0) +				expr = simple_strtol(ap[0], NULL, 10) != simple_strtol(ap[2], NULL, 10); +			else if (strcmp(ap[1], "-lt") == 0) +				expr = simple_strtol(ap[0], NULL, 10) < simple_strtol(ap[2], NULL, 10); +			else if (strcmp(ap[1], "-le") == 0) +				expr = simple_strtol(ap[0], NULL, 10) <= simple_strtol(ap[2], NULL, 10); +			else if (strcmp(ap[1], "-gt") == 0) +				expr = simple_strtol(ap[0], NULL, 10) > simple_strtol(ap[2], NULL, 10); +			else if (strcmp(ap[1], "-ge") == 0) +				expr = simple_strtol(ap[0], NULL, 10) >= simple_strtol(ap[2], NULL, 10); +			else { +				expr = 1; +				break; +			} + +			if (last_cmp == 0) +				expr = last_expr || expr; +			else if (last_cmp == 1) +				expr = last_expr && expr; +			last_cmp = -1; +		} + +		ap += adv; left -= adv; +	} + +	if (neg) +		expr = !expr; + +	expr = !expr; + +	debug (": returns %d\n", expr); + +	return expr; +} + +U_BOOT_CMD( +	test,	CONFIG_SYS_MAXARGS,	1,	do_test, +	"minimal test like /bin/sh", +	"[args..]" +); diff --git a/common/cmd_version.c b/common/cmd_version.c new file mode 100644 index 000000000..7f165c7b7 --- /dev/null +++ b/common/cmd_version.c @@ -0,0 +1,40 @@ +/* + * Copyright 2000-2009 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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 of + * the License, 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 <common.h> +#include <command.h> + +extern char version_string[]; + +int do_version(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ +	printf("\n%s\n", version_string); + +	return 0; +} + +U_BOOT_CMD( +	version,	1,		1,	do_version, +	"print monitor version", +	"" +); diff --git a/common/command.c b/common/command.c index b57f8dfc8..0c66b7a1d 100644 --- a/common/command.c +++ b/common/command.c @@ -28,206 +28,6 @@  #include <common.h>  #include <command.h> -int -do_version (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) -{ -	extern char version_string[]; -	printf ("\n%s\n", version_string); -	return 0; -} - -U_BOOT_CMD( -	version,	1,		1,	do_version, -	"print monitor version", -	"" -); - -#if defined(CONFIG_CMD_ECHO) - -int -do_echo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) -{ -	int i, putnl = 1; - -	for (i = 1; i < argc; i++) { -		char *p = argv[i], c; - -		if (i > 1) -			putc(' '); -		while ((c = *p++) != '\0') { -			if (c == '\\' && *p == 'c') { -				putnl = 0; -				p++; -			} else { -				putc(c); -			} -		} -	} - -	if (putnl) -		putc('\n'); -	return 0; -} - -U_BOOT_CMD( -	echo,	CONFIG_SYS_MAXARGS,	1,	do_echo, -	"echo args to console", -	"[args..]\n" -	"    - echo args to console; \\c suppresses newline" -); - -#endif - -#ifdef CONFIG_SYS_HUSH_PARSER - -int -do_test (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) -{ -	char **ap; -	int left, adv, expr, last_expr, neg, last_cmp; - -	/* args? */ -	if (argc < 3) -		return 1; - -#if 0 -	{ -		printf("test:"); -		left = 1; -		while (argv[left]) -			printf(" %s", argv[left++]); -	} -#endif - -	last_expr = 0; -	left = argc - 1; ap = argv + 1; -	if (left > 0 && strcmp(ap[0], "!") == 0) { -		neg = 1; -		ap++; -		left--; -	} else -		neg = 0; - -	expr = -1; -	last_cmp = -1; -	last_expr = -1; -	while (left > 0) { - -		if (strcmp(ap[0], "-o") == 0 || strcmp(ap[0], "-a") == 0) -			adv = 1; -		else if (strcmp(ap[0], "-z") == 0 || strcmp(ap[0], "-n") == 0) -			adv = 2; -		else -			adv = 3; - -		if (left < adv) { -			expr = 1; -			break; -		} - -		if (adv == 1) { -			if (strcmp(ap[0], "-o") == 0) { -				last_expr = expr; -				last_cmp = 0; -			} else if (strcmp(ap[0], "-a") == 0) { -				last_expr = expr; -				last_cmp = 1; -			} else { -				expr = 1; -				break; -			} -		} - -		if (adv == 2) { -			if (strcmp(ap[0], "-z") == 0) -				expr = strlen(ap[1]) == 0 ? 1 : 0; -			else if (strcmp(ap[0], "-n") == 0) -				expr = strlen(ap[1]) == 0 ? 0 : 1; -			else { -				expr = 1; -				break; -			} - -			if (last_cmp == 0) -				expr = last_expr || expr; -			else if (last_cmp == 1) -				expr = last_expr && expr; -			last_cmp = -1; -		} - -		if (adv == 3) { -			if (strcmp(ap[1], "=") == 0) -				expr = strcmp(ap[0], ap[2]) == 0; -			else if (strcmp(ap[1], "!=") == 0) -				expr = strcmp(ap[0], ap[2]) != 0; -			else if (strcmp(ap[1], ">") == 0) -				expr = strcmp(ap[0], ap[2]) > 0; -			else if (strcmp(ap[1], "<") == 0) -				expr = strcmp(ap[0], ap[2]) < 0; -			else if (strcmp(ap[1], "-eq") == 0) -				expr = simple_strtol(ap[0], NULL, 10) == simple_strtol(ap[2], NULL, 10); -			else if (strcmp(ap[1], "-ne") == 0) -				expr = simple_strtol(ap[0], NULL, 10) != simple_strtol(ap[2], NULL, 10); -			else if (strcmp(ap[1], "-lt") == 0) -				expr = simple_strtol(ap[0], NULL, 10) < simple_strtol(ap[2], NULL, 10); -			else if (strcmp(ap[1], "-le") == 0) -				expr = simple_strtol(ap[0], NULL, 10) <= simple_strtol(ap[2], NULL, 10); -			else if (strcmp(ap[1], "-gt") == 0) -				expr = simple_strtol(ap[0], NULL, 10) > simple_strtol(ap[2], NULL, 10); -			else if (strcmp(ap[1], "-ge") == 0) -				expr = simple_strtol(ap[0], NULL, 10) >= simple_strtol(ap[2], NULL, 10); -			else { -				expr = 1; -				break; -			} - -			if (last_cmp == 0) -				expr = last_expr || expr; -			else if (last_cmp == 1) -				expr = last_expr && expr; -			last_cmp = -1; -		} - -		ap += adv; left -= adv; -	} - -	if (neg) -		expr = !expr; - -	expr = !expr; - -	debug (": returns %d\n", expr); - -	return expr; -} - -U_BOOT_CMD( -	test,	CONFIG_SYS_MAXARGS,	1,	do_test, -	"minimal test like /bin/sh", -	"[args..]" -); - -int -do_exit (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) -{ -	int r; - -	r = 0; -	if (argc > 1) -		r = simple_strtoul(argv[1], NULL, 10); - -	return -r - 2; -} - -U_BOOT_CMD( -	exit,	2,	1,	do_exit, -	"exit script", -	"" -); - - -#endif -  /*   * Use puts() instead of printf() to avoid printf buffer overflow   * for long help messages @@ -297,39 +97,6 @@ int _do_help (cmd_tbl_t *cmd_start, int cmd_items, cmd_tbl_t * cmdtp, int  	return rcode;  } -int do_help (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) -{ -	return _do_help(&__u_boot_cmd_start, -			&__u_boot_cmd_end - &__u_boot_cmd_start, -			cmdtp, flag, argc, argv); -} - - -U_BOOT_CMD( -	help,	CONFIG_SYS_MAXARGS,	1,	do_help, -	"print online help", -	"[command ...]\n" -	"    - show help information (for 'command')\n" -	"'help' prints online help for the monitor commands.\n\n" -	"Without arguments, it prints a short usage message for all commands.\n\n" -	"To get detailed help information for specific commands you can type\n" -	"'help' with one or more command names as arguments." -); - -/* This does not use the U_BOOT_CMD macro as ? can't be used in symbol names */ -#ifdef  CONFIG_SYS_LONGHELP -cmd_tbl_t __u_boot_cmd_question_mark Struct_Section = { -	"?",	CONFIG_SYS_MAXARGS,	1,	do_help, -	"alias for 'help'", -	"" -}; -#else -cmd_tbl_t __u_boot_cmd_question_mark Struct_Section = { -	"?",	CONFIG_SYS_MAXARGS,	1,	do_help, -	"alias for 'help'" -}; -#endif /* CONFIG_SYS_LONGHELP */ -  /***************************************************************************   * find command table entry for a command   */ |