
Hi Simon,
On Sun, Feb 24, 2013 at 11:26 AM, Simon Glass sjg@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@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@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@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Reviewed-by: Joe Hershberger joe.hershberger@ni.com