[U-Boot] [RFC PATCH v2 11/15] main: Use autoconf in command line reading
Joe Hershberger
joe.hershberger at gmail.com
Sun Feb 24 21:56:41 CET 2013
Hi Simon,
On Sun, Feb 24, 2013 at 11:26 AM, Simon Glass <sjg at chromium.org> wrote:
> Remove #ifdefs in favour of autoconf for this code. This involves removing
> a few unnecessary #ifdefs in headers also.
>
> We have two versions of the code - one that handles command line editing and
> one that is just a simple implementation. Create a new function called
> readline_into_buffer() which calls either cread_line() or the new
> simple_readline(), created to hold the 'simple' code.
>
> The cread_print_hist_list() function is not actually used anywhere, so punt
> it.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
> Changes in v2: None
>
> common/main.c | 186 ++++++++++++++++++++++++------------------------------
> include/command.h | 2 -
> include/common.h | 2 -
> 3 files changed, 84 insertions(+), 106 deletions(-)
>
> diff --git a/common/main.c b/common/main.c
> index e1483db..3966321 100644
> --- a/common/main.c
> +++ b/common/main.c
> @@ -514,8 +514,6 @@ void reset_cmd_timeout(void)
> }
> #endif
>
> -#ifdef CONFIG_CMDLINE_EDITING
> -
> /*
> * cmdline-editing related codes from vivi.
> * Author: Janghoon Lyu <nandy at mizi.com>
> @@ -618,27 +616,6 @@ static char* hist_next(void)
> return (ret);
> }
>
> -#ifndef CONFIG_CMDLINE_EDITING
> -static void cread_print_hist_list(void)
> -{
> - int i;
> - unsigned long n;
> -
> - n = hist_num - hist_max;
> -
> - i = hist_add_idx + 1;
> - while (1) {
> - if (i > hist_max)
> - i = 0;
> - if (i == hist_add_idx)
> - break;
> - printf("%s\n", hist_list[i]);
> - n++;
> - i++;
> - }
> -}
> -#endif /* CONFIG_CMDLINE_EDITING */
> -
> #define BEGINNING_OF_LINE() { \
> while (num) { \
> getcmd_putch(CTL_BACKSPACE); \
> @@ -900,27 +877,27 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len,
> REFRESH_TO_EOL();
> continue;
> }
> -#ifdef CONFIG_AUTO_COMPLETE
> - case '\t': {
> - int num2, col;
> + case '\t':
> + if (autoconf_auto_complete()) {
> + int num2, col;
>
> - /* do not autocomplete when in the middle */
> - if (num < eol_num) {
> - getcmd_cbeep();
> - break;
> - }
> + /* do not autocomplete when in the middle */
> + if (num < eol_num) {
> + getcmd_cbeep();
> + break;
> + }
>
> - buf[num] = '\0';
> - col = strlen(prompt) + eol_num;
> - num2 = num;
> - if (cmd_auto_complete(prompt, buf, &num2, &col)) {
> - col = num2 - num;
> - num += col;
> - eol_num += col;
> + buf[num] = '\0';
> + col = strlen(prompt) + eol_num;
> + num2 = num;
> + if (cmd_auto_complete(prompt, buf, &num2,
> + &col)) {
> + col = num2 - num;
> + num += col;
> + eol_num += col;
> + }
> + break;
> }
> - break;
> - }
> -#endif
> default:
> cread_add_char(ichar, insert, &num, &eol_num, buf, *len);
> break;
> @@ -936,8 +913,6 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len,
> return 0;
> }
>
> -#endif /* CONFIG_CMDLINE_EDITING */
> -
> /****************************************************************************/
>
> /*
> @@ -959,46 +934,14 @@ int readline (const char *const prompt)
> return readline_into_buffer(prompt, console_buffer, 0);
> }
>
> -
> -int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
> +static int simple_readline(const char *const prompt, int plen, char *p,
> + int timeout)
> {
> - char *p = buffer;
> -#ifdef CONFIG_CMDLINE_EDITING
> - unsigned int len = CONFIG_SYS_CBSIZE;
> - int rc;
> - static int initted = 0;
> -
> - /*
> - * History uses a global array which is not
> - * writable until after relocation to RAM.
> - * Revert to non-history version if still
> - * running from flash.
> - */
> - if (gd->flags & GD_FLG_RELOC) {
> - if (!initted) {
> - hist_init();
> - initted = 1;
> - }
> -
> - if (prompt)
> - puts (prompt);
> -
> - rc = cread_line(prompt, p, &len, timeout);
> - return rc < 0 ? rc : len;
> -
> - } else {
> -#endif /* CONFIG_CMDLINE_EDITING */
> char * p_buf = p;
> int n = 0; /* buffer index */
> - int plen = 0; /* prompt length */
> int col; /* output column cnt */
> char c;
>
> - /* print prompt */
> - if (prompt) {
> - plen = strlen (prompt);
> - puts (prompt);
> - }
> col = plen;
>
> for (;;) {
> @@ -1011,32 +954,32 @@ int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
> }
> WATCHDOG_RESET(); /* Trigger watchdog, if needed */
>
> -#ifdef CONFIG_SHOW_ACTIVITY
> - while (!tstc()) {
> - show_activity(0);
> - WATCHDOG_RESET();
> + if (autoconf_show_activity()) {
> + while (!tstc()) {
> + show_activity(0);
> + WATCHDOG_RESET();
> + }
> }
> -#endif
> c = getc();
>
It would be great if you separated the following unrelated formatting
changes into a separate patch.
> /*
> * Special character handling
> */
> switch (c) {
> - case '\r': /* Enter */
> + case '\r': /* Enter */
> case '\n':
> *p = '\0';
> puts ("\r\n");
> - return (p - p_buf);
> + return p - p_buf;
>
> - case '\0': /* nul */
> + case '\0': /* nul */
> continue;
>
> - case 0x03: /* ^C - break */
> + case 0x03: /* ^C - break */
> p_buf[0] = '\0'; /* discard input */
> - return (-1);
> + return -1;
>
> - case 0x15: /* ^U - erase line */
> + case 0x15: /* ^U - erase line */
> while (col > plen) {
> puts (erase_seq);
> --col;
> @@ -1045,15 +988,15 @@ int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
> n = 0;
> continue;
>
> - case 0x17: /* ^W - erase word */
> + case 0x17: /* ^W - erase word */
> p=delete_char(p_buf, p, &col, &n, plen);
> while ((n > 0) && (*p != ' ')) {
> p=delete_char(p_buf, p, &col, &n, plen);
> }
> continue;
>
> - case 0x08: /* ^H - backspace */
> - case 0x7F: /* DEL - backspace */
> + case 0x08: /* ^H - backspace */
> + case 0x7F: /* DEL - backspace */
> p=delete_char(p_buf, p, &col, &n, plen);
> continue;
>
> @@ -1062,22 +1005,28 @@ int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
> * Must be a normal character then
> */
> if (n < CONFIG_SYS_CBSIZE-2) {
> - if (c == '\t') { /* expand TABs */
> -#ifdef CONFIG_AUTO_COMPLETE
> - /* if auto completion triggered just continue */
> - *p = '\0';
> - if (cmd_auto_complete(prompt, console_buffer, &n, &col)) {
> - p = p_buf + n; /* reset */
> - continue;
> + if (c == '\t') { /* expand TABs */
> + if (autoconf_auto_complete()) {
> + /*
> + * if auto completion triggered
> + * just continue
> + */
> + *p = '\0';
> + if (cmd_auto_complete(prompt,
> + console_buffer,
> + &n, &col)) {
> + /* reset */
> + p = p_buf + n;
> + continue;
> + }
> }
> -#endif
> puts (tab_seq+(col&07));
> col += 8 - (col&07);
> } else {
> char buf[2];
>
> /*
> - * Echo input using puts() to force am
> + * Echo input using puts() to force an
> * LCD flush if we are using an LCD
> */
> ++col;
> @@ -1092,9 +1041,42 @@ int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
> }
> }
> }
> -#ifdef CONFIG_CMDLINE_EDITING
> +}
> +
> +int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
> +{
> + unsigned int len = CONFIG_SYS_CBSIZE;
> + int rc;
> + static int initted;
> +
> + /*
> + * History uses a global array which is not
> + * writable until after relocation to RAM.
> + * Revert to non-history version if still
> + * running from flash.
> + */
> + if (autoconf_cmdline_editing() && (gd->flags & GD_FLG_RELOC)) {
> + if (!initted) {
> + hist_init();
> + initted = 1;
> + }
> +
> + if (prompt)
> + puts(prompt);
> +
> + rc = cread_line(prompt, buffer, &len, timeout);
> + return rc < 0 ? rc : len;
> +
> + } else {
> + int plen = 0; /* prompt length */
> +
> + /* print prompt */
> + if (prompt) {
> + plen = strlen(prompt);
> + puts(prompt);
> + }
> + return simple_readline(prompt, plen, buffer, timeout);
> }
> -#endif
> }
>
> /****************************************************************************/
> diff --git a/include/command.h b/include/command.h
> index 3785eb9..80da938 100644
> --- a/include/command.h
> +++ b/include/command.h
> @@ -75,10 +75,8 @@ cmd_tbl_t *find_cmd_tbl (const char *cmd, cmd_tbl_t *table, int table_len);
>
> extern int cmd_usage(const cmd_tbl_t *cmdtp);
>
> -#ifdef CONFIG_AUTO_COMPLETE
> extern int var_complete(int argc, char * const argv[], char last_char, int maxv, char *cmdv[]);
> extern int cmd_auto_complete(const char *const prompt, char *buf, int *np, int *colp);
> -#endif
>
> /*
> * Monitor Command
> diff --git a/include/common.h b/include/common.h
> index fb219fd..1457349 100644
> --- a/include/common.h
> +++ b/include/common.h
> @@ -857,9 +857,7 @@ int pcmcia_init (void);
>
> #include <bootstage.h>
>
> -#ifdef CONFIG_SHOW_ACTIVITY
> void show_activity(int arg);
> -#endif
>
> /* Multicore arch functions */
> #ifdef CONFIG_MP
> --
> 1.8.1.3
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
Reviewed-by: Joe Hershberger <joe.hershberger at ni.com>
More information about the U-Boot
mailing list