Re: [U-Boot] [PATCH 15/16] New command bootmenu: ANSI terminal Boot Menu support

2012-01-05 Thread Mike Frysinger
On Sunday 18 December 2011 15:16:21 Pali Rohár wrote:
> On Sunday 18 December 2011 15:07:25 Mike Frysinger wrote:
> > On Sunday 18 December 2011 14:12:38 Pali Rohár wrote:
> > > On Sunday 18 December 2011 14:07:37 Mike Frysinger wrote:
> > > > this needs checkpatch for sure
> > > > 
> > > > seems like this doesn't use the existing common/menu.c code ...
> > > > shouldn't it ?
> > > 
> > > No my ANSI terminal bootmenu does not use common/menu.c (4 months ago,
> > > there was no menu.c file)
> > 
> > so you'll be updating the patchseries to utilize common code that now
> > exists ?
> 
> What is implemented in that file common/menu.c? It here any info/doc?

doc/README.menu

if there are features you have/want that this code base doesn't support, the 
answer would be to enhance/extend rather than drop in an entirely new/parallel 
codebase.  i know this is more work for you, but long term, the latter would 
be much more work for everyone.
-mike


signature.asc
Description: This is a digitally signed message part.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 15/16] New command bootmenu: ANSI terminal Boot Menu support

2011-12-18 Thread Pali Rohár
On Sunday 18 December 2011 15:07:25 Mike Frysinger wrote:
> On Sunday 18 December 2011 14:12:38 Pali Rohár wrote:
> > On Sunday 18 December 2011 14:07:37 Mike Frysinger wrote:
> > > this needs checkpatch for sure
> > >
> > > seems like this doesn't use the existing common/menu.c code ...
> > > shouldn't it ?
> >
> > No my ANSI terminal bootmenu does not use common/menu.c (4 months ago,
> > there was no menu.c file)
>
> so you'll be updating the patchseries to utilize common code that now exists
> ? -mike

What is implemented in that file common/menu.c? It here any info/doc?

--
Pali Rohár
pali.ro...@gmail.com

signature.asc
Description: This is a digitally signed message part.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 15/16] New command bootmenu: ANSI terminal Boot Menu support

2011-12-18 Thread Mike Frysinger
On Sunday 18 December 2011 14:12:38 Pali Rohár wrote:
> On Sunday 18 December 2011 14:07:37 Mike Frysinger wrote:
> > this needs checkpatch for sure
> > 
> > seems like this doesn't use the existing common/menu.c code ... shouldn't
> > it ?
> 
> No my ANSI terminal bootmenu does not use common/menu.c (4 months ago,
> there was no menu.c file)

so you'll be updating the patchseries to utilize common code that now exists ?
-mike


signature.asc
Description: This is a digitally signed message part.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 15/16] New command bootmenu: ANSI terminal Boot Menu support

2011-12-18 Thread Pali Rohár
On Sunday 18 December 2011 14:07:37 Mike Frysinger wrote:
> this needs checkpatch for sure
>
> seems like this doesn't use the existing common/menu.c code ... shouldn't it
> ? -mike

No my ANSI terminal bootmenu does not use common/menu.c (4 months ago, there
was no menu.c file)

--
Pali Rohár
pali.ro...@gmail.com

signature.asc
Description: This is a digitally signed message part.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 15/16] New command bootmenu: ANSI terminal Boot Menu support

2011-12-18 Thread Mike Frysinger
this needs checkpatch for sure

seems like this doesn't use the existing common/menu.c code ... shouldn't it ?
-mike


signature.asc
Description: This is a digitally signed message part.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 15/16] New command bootmenu: ANSI terminal Boot Menu support

2011-12-17 Thread Pali Rohár
 * Configuration is done via env variables bootmenu_delay and bootmenu_:

bootmenu_delay=
bootmenu_="=" (title and commands are separated by 
first char '=')

 is delay in seconds of autobooting first entry
 is boot menu entry, starting from zero
 is text shown in boot screen
 are commands which will be executed when menu entry will be 
selected

 * First argument of bootmenu command override bootmenu_delay env
 * If env bootmenu_delay or bootmenu argument is not specified, 10 seconds for 
delay will be used
 * If delay is 0, no entry will be show on screen, screen will not be cleared 
and first entry will be called
 * If delay is less then 0, no autoboot delay will be used
 * Boot Menu will stop finding next menu entry if last was not defined
 * Boot Menu always add menu entry "U-Boot console" at end of all entries

 * Example using:

setenv bootmenu_0 Boot first kernel=bootm 0x8200  # Set first menu entry
setenv bootmenu_1 Boot second kernel=bootm 0x8300 # Set second menu 
entry
setenv bootmenu_2 Reset board=reset   # Set third menu entry
setenv bootmenu_3 U-Boot boot order=boot  # Set four menu entry 
(default u-boot boot script)
setenv bootmenu_4 # Empty string is end 
of all bootmenu entries
bootmenu 20   # Run bootmenu with 
autoboot delay 20s

Signed-off-by: Pali Rohár 
---
 common/Makefile  |1 +
 common/cmd_bootmenu.c|  355 ++
 include/config_cmd_all.h |1 +
 3 files changed, 357 insertions(+), 0 deletions(-)
 create mode 100644 common/cmd_bootmenu.c

diff --git a/common/Makefile b/common/Makefile
index 0552f19..4e08431 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -67,6 +67,7 @@ COBJS-$(CONFIG_CMD_SOURCE) += cmd_source.o
 COBJS-$(CONFIG_CMD_BDI) += cmd_bdinfo.o
 COBJS-$(CONFIG_CMD_BEDBUG) += bedbug.o cmd_bedbug.o
 COBJS-$(CONFIG_CMD_BMP) += cmd_bmp.o
+COBJS-$(CONFIG_CMD_BOOTMENU) += cmd_bootmenu.o
 COBJS-$(CONFIG_CMD_BOOTLDR) += cmd_bootldr.o
 COBJS-$(CONFIG_CMD_CACHE) += cmd_cache.o
 COBJS-$(CONFIG_CMD_CLR) += cmd_clr.o
diff --git a/common/cmd_bootmenu.c b/common/cmd_bootmenu.c
new file mode 100644
index 000..28f5da7
--- /dev/null
+++ b/common/cmd_bootmenu.c
@@ -0,0 +1,355 @@
+/*
+ * (C) Copyright 2011 Pali Rohár 
+ *
+ * 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 
+#include 
+#include 
+#include 
+
+#ifdef CONFIG_SYS_HUSH_PARSER
+#include 
+#endif
+
+static char * get_option(int n) {
+
+   char name[] = "bootmenu_\0\0";
+
+   if ( n < 0 || n > 99 )
+   return NULL;
+
+   sprintf(name+9, "%d", n);
+
+   return getenv(name);
+
+}
+
+static char * get_end_of_title(char * str) {
+
+   if ( ! str )
+   return NULL;
+
+   return strchr(str, '=');
+
+}
+
+static int print_title(char * begin, char * end) {
+
+   if ( ! begin || ! end || end < begin )
+   return 1;
+
+   while ( begin != end )
+   putc(*(begin++));
+
+   return 0;
+
+}
+
+static int print_entry(int n, int reverse) {
+
+   char * str = get_option(n);
+   char * end = get_end_of_title(str);
+
+   if ( ! end )
+   return 1;
+
+   printf(ANSI_CURSOR_POSITION, n+4, 1);
+
+   if ( reverse )
+   printf(ANSI_COLOR_REVERSE);
+
+   printf(" ");
+   print_title(str, end);
+   printf(ANSI_CLEAR_LINE_TO_END);
+
+   if ( reverse )
+   printf(ANSI_COLOR_RESET);
+
+   return 0;
+
+}
+
+static int print_menu(int active) {
+
+   int n = 0;
+
+   printf(ANSI_CURSOR_POSITION, 1, 1);
+   printf(ANSI_CLEAR_LINE);
+   printf(ANSI_CURSOR_POSITION, 2, 1);
+   printf("  *** U-Boot BOOT MENU ***");
+   printf(ANSI_CLEAR_LINE_TO_END);
+   printf(ANSI_CURSOR_POSITION, 3, 1);
+   printf(ANSI_CLEAR_LINE);
+
+   while ( 1 ) {
+
+   int ret = print_entry(n, n == active ? 1 : 0);
+
+   if ( ret == 1 )
+   break;
+
+   ++n;
+
+   }
+
+   printf(ANSI_CURSOR_POSITION, n+4, 1);
+
+   if ( n == active )
+