This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Re: diag_printf refuses to print ANSI escape sequences?


On Sat, May 26, 2007 at 08:19:40PM +0000, Grant Edwards wrote:
> On 2007-05-26, Sergei Gavrikov <w3sg@SoftHome.net> wrote:
> > On Sat, May 26, 2007 at 03:19:42PM +0000, Grant Edwards wrote:
> >> In the "not a big deal" department...
> >> 
> >> I'm trying to send ANSI escape sequences using diag_printf, and
> >> diag_printf refuses.  If I put the escape character in the format
> >> string it says 
> >> 
> >>  <Bad format string: 8055F18 : 0 0 2 807F0D8 DDD9BFFD FB93FFDC 8055758
> >>  FB93FFDC>
> >> 
> >> If there's an escape character in a string that is to be printed using
> >> the "%s" format, it says: 
> >> 
> >>  <Not a string: 0x8055F20>
> >> 
> >> I understand that it's useful to attempt to avoid printing random
> >> binary garbage, but I would think that ASCII ESC might be allowed in
> >> strings.
> >>  
> >> I've found that insterting the escape characters using %c works, but
> >> that's a bit awkward.
> >  
> > There are nice diag_dump_buf* functions in the eCos infra layer
> > (cyg/infra/diag.h).  I do use that.
> 
> I'm aware of the daig_dump_buf fuctions, but I don't see how
> they solve my problem.  AFAIR, they dump out buffer contents in
> hex.  What I'm trying to do is:
> 
>  diag_printf("\033[34mBlue Text \033[31mRed Text \033[mNormal Text\n");
> 
> diag_printf refuses to do that, so I have to do something like
> this instead:
> 
>  diag_printf("%c[34mBlue Text %c[31mRed Text %c[mNormal Text\n",033,033,033);
> 
> and that seems awkward to me.
> 
> One could argue that embedding escape seqences in strings is a
> bit hackish...
> 

Ah, the diag_printf() for me always did mean the diagnostic (read debug)
output function, but it didn't mean for me any type of the printf+send.
IMHO, those diag_*() functions should be the light weight things. I
wouldn't see the complex parsing in the diag_printf(), diag_sprintf()
functions. What's about falk which use the eCos minimal template in
the first?

It seems, it's easy to use either macros, for example, COLOR_PRINTF,
COLOR_PUTS, etc. something like this

#define COLOR_PRINTF( fgcolor, bgcolor, fmt, ...) \
	...

and to use the diag_write_char() in the body of the macro to output those
special characters, or just own whiptail functions, i.e. something like
the cprintf(), cputchar(), cputs().

But the question is staying for me, Is the colorized output deal for
diag_printf?  I know that there are dumb terminals, GDB, etc. there.
Those things are deal for diag_printf(), aren't they?  IMHO, diag_led
can produce the colorized output, but diag_printf shouldn't do such
things :-)

-- Sergei


> -- 
> Grant Edwards                   grante             Yow! NEWARK has been
>                                   at               REZONED!!  DES MOINES has
>                                visi.com            been REZONED!!
> 
> 
> -- 
> Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
> and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]