From 6636b62a6efc7f14e6e788788631ae7a7fca4537 Mon Sep 17 00:00:00 2001 From: James Yang Date: Wed, 9 Jan 2008 11:17:49 -0600 Subject: Expose parse_line() globally. Add new function readline_into_buffer() that allows the output of readline to be put into a pointer to char buffer. This refactoring allows other functions besides the main command loop to also use the same input mechanism. Signed-off-by: James Yang Acked-by: Jon Loeliger diff --git a/common/main.c b/common/main.c index 4253eac..ad2a386 100644 --- a/common/main.c +++ b/common/main.c @@ -59,7 +59,6 @@ extern int do_bootd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); #define MAX_DELAY_STOP_STR 32 -static int parse_line (char *, char *[]); #if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0) static int abortboot(int); #endif @@ -918,8 +917,15 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len) */ int readline (const char *const prompt) { + return readline_into_buffer(prompt, console_buffer); +} + + +int readline_into_buffer (const char *const prompt, char * buffer) +{ + char *p = buffer; + char * p_buf = p; #ifdef CONFIG_CMDLINE_EDITING - char *p = console_buffer; unsigned int len=MAX_CMDBUF_SIZE; int rc; static int initted = 0; @@ -934,7 +940,6 @@ int readline (const char *const prompt) rc = cread_line(prompt, p, &len); return rc < 0 ? rc : len; #else - char *p = console_buffer; int n = 0; /* buffer index */ int plen = 0; /* prompt length */ int col; /* output column cnt */ @@ -972,13 +977,13 @@ int readline (const char *const prompt) case '\n': *p = '\0'; puts ("\r\n"); - return (p - console_buffer); + return (p - p_buf); case '\0': /* nul */ continue; case 0x03: /* ^C - break */ - console_buffer[0] = '\0'; /* discard input */ + p_buf[0] = '\0'; /* discard input */ return (-1); case 0x15: /* ^U - erase line */ @@ -986,20 +991,20 @@ int readline (const char *const prompt) puts (erase_seq); --col; } - p = console_buffer; + p = p_buf; n = 0; continue; case 0x17: /* ^W - erase word */ - p=delete_char(console_buffer, p, &col, &n, plen); + p=delete_char(p_buf, p, &col, &n, plen); while ((n > 0) && (*p != ' ')) { - p=delete_char(console_buffer, p, &col, &n, plen); + p=delete_char(p_buf, p, &col, &n, plen); } continue; case 0x08: /* ^H - backspace */ case 0x7F: /* DEL - backspace */ - p=delete_char(console_buffer, p, &col, &n, plen); + p=delete_char(p_buf, p, &col, &n, plen); continue; default: @@ -1012,7 +1017,7 @@ int readline (const char *const prompt) /* if auto completion triggered just continue */ *p = '\0'; if (cmd_auto_complete(prompt, console_buffer, &n, &col)) { - p = console_buffer + n; /* reset */ + p = p_buf + n; /* reset */ continue; } #endif diff --git a/include/common.h b/include/common.h index 493417f..3b5bd8c 100644 --- a/include/common.h +++ b/include/common.h @@ -197,6 +197,8 @@ int print_buffer (ulong addr, void* data, uint width, uint count, uint linelen); void main_loop (void); int run_command (const char *cmd, int flag); int readline (const char *const prompt); +int readline_into_buffer (const char *const prompt, char * buffer); +int parse_line (char *, char *[]); void init_cmd_timeout(void); void reset_cmd_timeout(void); -- cgit v0.10.2