* [U-Boot-Users] [PATCH v2] Add expr command
@ 2008-02-13 15:54 Kumar Gala
2008-02-13 16:35 ` Kim Phillips
0 siblings, 1 reply; 5+ messages in thread
From: Kumar Gala @ 2008-02-13 15:54 UTC (permalink / raw)
To: u-boot
Add a simple expr command that will set an env variable as the result
of the command. This allows us to do simple math in shell. The following
operations are supported: &, |, ^, +, -, *, /.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
---
Added xor (^) and check that the op arg is only one char as suggsted by
Andreas.
- k
common/Makefile | 1 +
common/cmd_expr.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 71 insertions(+), 0 deletions(-)
create mode 100644 common/cmd_expr.c
diff --git a/common/Makefile b/common/Makefile
index 1639109..4f3e711 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -54,6 +54,7 @@ COBJS-$(CONFIG_CMD_DOC) += cmd_doc.o
COBJS-$(CONFIG_CMD_DTT) += cmd_dtt.o
COBJS-y += cmd_eeprom.o
COBJS-$(CONFIG_CMD_ELF) += cmd_elf.o
+COBJS-$(CONFIG_CMD_EXPR) += cmd_expr.o
COBJS-$(CONFIG_CMD_EXT2) += cmd_ext2.o
COBJS-$(CONFIG_CMD_FAT) += cmd_fat.o
COBJS-y += cmd_fdc.o
diff --git a/common/cmd_expr.c b/common/cmd_expr.c
new file mode 100644
index 0000000..441865a
--- /dev/null
+++ b/common/cmd_expr.c
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * 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
+ */
+
+/*
+ * This file provides a shell like 'expr' function to return.
+ */
+
+#include <common.h>
+#include <config.h>
+#include <command.h>
+
+int do_expr (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+ ulong a, b;
+ char buf[16];
+
+ /* Validate arguments */
+ if ((argc != 5) || (strlen(argv[3]) != 1)) {
+ printf("Usage:\n%s\n", cmdtp->usage);
+ return 1;
+ }
+
+ a = simple_strtoul(argv[2], NULL, 16);
+ b = simple_strtoul(argv[4], NULL, 16);
+
+ switch (argv[3][0]) {
+ case '|': sprintf(buf, "%lx", (a | b)); break;
+ case '&': sprintf(buf, "%lx", (a & b)); break;
+ case '+': sprintf(buf, "%lx", (a + b)); break;
+ case '^': sprintf(buf, "%lx", (a ^ b)); break;
+ case '-': sprintf(buf, "%lx", (a - b)); break;
+ case '*': sprintf(buf, "%lx", (a * b)); break;
+ case '/': sprintf(buf, "%lx", (a / b)); break;
+ case '%': sprintf(buf, "%lx", (a % b)); break;
+ default:
+ printf("invalid op\n");
+ return 1;
+ }
+
+ setenv(argv[1], buf);
+
+ return 0;
+}
+
+U_BOOT_CMD(
+ expr, 5, 0, do_expr,
+ "expr - set environment variable as the result of eval expression\n",
+ "name value1 <op> value2\n"
+ " - set environment variable 'name' to the result of the evaluated\n"
+ " express specified by <op>. <op> can be &, |, ^, +, -, *, /, %\n"
+);
--
1.5.3.8
^ permalink raw reply related [flat|nested] 5+ messages in thread* [U-Boot-Users] [PATCH v2] Add expr command
2008-02-13 15:54 [U-Boot-Users] [PATCH v2] Add expr command Kumar Gala
@ 2008-02-13 16:35 ` Kim Phillips
2008-02-13 16:41 ` Kumar Gala
2008-02-13 16:42 ` Andreas Schweigstill
0 siblings, 2 replies; 5+ messages in thread
From: Kim Phillips @ 2008-02-13 16:35 UTC (permalink / raw)
To: u-boot
On Wed, 13 Feb 2008 09:54:31 -0600 (CST)
Kumar Gala <galak@kernel.crashing.org> wrote:
> +}
> +
> +U_BOOT_CMD(
> + expr, 5, 0, do_expr,
> + "expr - set environment variable as the result of eval expression\n",
> + "name value1 <op> value2\n"
> + " - set environment variable 'name' to the result of the evaluated\n"
> + " express specified by <op>. <op> can be &, |, ^, +, -, *, /, %\n"
can we at least change the name to "setexpr" or something, so as not
break forward compatibility with any future GNU syntax expr
implementation?
Kim
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot-Users] [PATCH v2] Add expr command
2008-02-13 16:35 ` Kim Phillips
@ 2008-02-13 16:41 ` Kumar Gala
2008-02-13 22:53 ` Wolfgang Denk
2008-02-13 16:42 ` Andreas Schweigstill
1 sibling, 1 reply; 5+ messages in thread
From: Kumar Gala @ 2008-02-13 16:41 UTC (permalink / raw)
To: u-boot
On Feb 13, 2008, at 10:35 AM, Kim Phillips wrote:
> On Wed, 13 Feb 2008 09:54:31 -0600 (CST)
> Kumar Gala <galak@kernel.crashing.org> wrote:
>
>> +}
>> +
>> +U_BOOT_CMD(
>> + expr, 5, 0, do_expr,
>> + "expr - set environment variable as the result of eval
>> expression\n",
>> + "name value1 <op> value2\n"
>> + " - set environment variable 'name' to the result of the
>> evaluated\n"
>> + " express specified by <op>. <op> can be &, |, ^, +, -,
>> *, /, %\n"
>
> can we at least change the name to "setexpr" or something, so as not
> break forward compatibility with any future GNU syntax expr
> implementation?
ok. Waiting to here on wd's feeling about having this as part of the
standard command set or not.
- k
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot-Users] [PATCH v2] Add expr command
2008-02-13 16:41 ` Kumar Gala
@ 2008-02-13 22:53 ` Wolfgang Denk
0 siblings, 0 replies; 5+ messages in thread
From: Wolfgang Denk @ 2008-02-13 22:53 UTC (permalink / raw)
To: u-boot
In message <2040FCC8-76A9-4B8E-9F3B-5422EF117F26@kernel.crashing.org> you wrote:
>
> > can we at least change the name to "setexpr" or something, so as not
> > break forward compatibility with any future GNU syntax expr
> > implementation?
>
> ok. Waiting to here on wd's feeling about having this as part of the
> standard command set or not.
Well, if you ask me, I'd just call it expr.... [I have to admit that
this is for very egoistic reasons, namely being used to type "sete"
fort setenv, which then would be require me to type one more
character. And with my age you don't change such habits easily ;-) ]
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Uncontrolled power will turn even saints into savages. And we can all
be counted on to live down to our lowest impulses.
-- Parmen, "Plato's Stepchildren", stardate 5784.3
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot-Users] [PATCH v2] Add expr command
2008-02-13 16:35 ` Kim Phillips
2008-02-13 16:41 ` Kumar Gala
@ 2008-02-13 16:42 ` Andreas Schweigstill
1 sibling, 0 replies; 5+ messages in thread
From: Andreas Schweigstill @ 2008-02-13 16:42 UTC (permalink / raw)
To: u-boot
Hello!
Kim Phillips schrieb:
> can we at least change the name to "setexpr" or something, so as not
> break forward compatibility with any future GNU syntax expr
> implementation?
+1
Regards
Andreas Schweigstill
--
Dipl.-Phys. Andreas Schweigstill
Schweigstill IT | Embedded Systems
Schauenburgerstra?e 116, D-24118 Kiel, Germany
Phone: (+49) 431 5606-435, Fax: (+49) 431 5606-436
Mobile: (+49) 171 6921973, Web: http://www.schweigstill.de/
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-02-13 22:53 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-13 15:54 [U-Boot-Users] [PATCH v2] Add expr command Kumar Gala
2008-02-13 16:35 ` Kim Phillips
2008-02-13 16:41 ` Kumar Gala
2008-02-13 22:53 ` Wolfgang Denk
2008-02-13 16:42 ` Andreas Schweigstill
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox