>  * Ignore ANSI escape codes for moving cursor, which are generated by
> keyboard

I think WD should comment on this one.

> 
> Signed-off-by: Pali Rohár <pali.ro...@gmail.com>
> ---
> Changes since original version:
>    - Fixed commit message
> 
>  common/main.c |   51 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 51 insertions(+), 0 deletions(-)
> 
> diff --git a/common/main.c b/common/main.c
> index e96c95a..e7b5516 100644
> --- a/common/main.c
> +++ b/common/main.c
> @@ -958,6 +958,7 @@ int readline_into_buffer (const char *const prompt,
> char * buffer) int    n = 0;                          /* buffer index         
*/
>       int     plen = 0;                       /* prompt length        */
>       int     col;                            /* output column cnt    */
> +     int     esc = 0;                        /* ansi escape char     */
>       char    c;
> 
>       /* print prompt */
> @@ -1024,7 +1025,57 @@ int readline_into_buffer (const char *const prompt,
> char * buffer) p=delete_char(p_buf, p, &col, &n, plen);
>                       continue;
> 
> +             case '\e':                      /* ANSI escape char     */
> +                     esc = 1;
> +                     continue;
> +
>               default:
> +
> +                     /*
> +                      * Check for ANSI escape chars
> +                      */
> +                     if (esc == 0 && c == '\e') {
> +                             esc = 1;
> +                             continue;
> +                     } else if (esc == 1) {
> +                             if (c == '[') {
> +                                     esc = 2;
> +                                     continue;
> +                             }
> +                             if (n < CONFIG_SYS_CBSIZE-2) {
> +                                     ++n;
> +                                     *p++ = '\e';
> +                                     putc('\e');
> +                             }
> +                             esc = 0;
> +                     } else if (esc == 2 || esc == 3) {
> +                             if (esc == 2 && c == '1') {
> +                                     esc = 3;
> +                                     continue;
> +                             }
> +                             /* Ignore ANSI escape sequences */
> +                             /* generated by keyboard */
> +                             /* \e [ 1 A-D and \e [ A-D */
> +                             if (c >= 'A' && c <= 'D') {
> +                                     esc = 0;
> +                                     continue;
> +                             }
> +                             if (esc == 2 && n < CONFIG_SYS_CBSIZE-3) {
> +                                     n += 2;
> +                                     *p++ = '\e';
> +                                     *p++ = '[';
> +                                     puts("\e[");
> +                             } else if (esc == 3 &&
> +                                             n < CONFIG_SYS_CBSIZE-4) {
> +                                     n += 3;
> +                                     *p++ = '\e';
> +                                     *p++ = '[';
> +                                     *p++ = '1';
> +                                     puts("\e[1");
> +                             }
> +                             esc = 0;
> +                     }
> +
>                       /*
>                        * Must be a normal character then
>                        */
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to