Hi Javier,

> Why not complete?

I can only guess: No one has written such
a wrapper, yet.

IMO though, besides the conversion itself,
sending out the stripped string to any output
device is not the job of such wrapper.
You can do the latter with existing functions.

Brgds,
Viktor

On 2008.06.03., at 4:14, Javier wrote:

Thanks Viktor,

Why not complete?
In order to send out to full printers and terminals may be useful.

HB_EXPORT char * hb_strRemEscSeq( char *str, ULONG *pLen )
{
 ULONG ul = *pLen, ulStripped = 0;
 char *ptr, *dst, ch;

 ptr = dst = str;
 while( ul )
 {
    if( *ptr == '\\' )
       break;
    ++ptr; ++dst;
    --ul;
 }

 while( ul-- )
 {
    ch = *ptr++;
    if( ch == '\\' )
    {
       ++ulStripped;
       if( ul )
       {
          ul--;
          ch = *ptr++;
          switch( ch )
          {
             case 'a': ch = '\a'; break;
             case 'b':
                ch = '\b';
                break;
             case 'f': ch = '\f'; break;
             case 'n':
                ch = '\n';
                break;
             case 'r':
                ch = '\r';
                break;
             case 't':
                ch = '\t';
                break;
             case 'v': ch = '\v'; break;
             case '0':
             case '1':
             case '2':
             case '3':
             case '4':
             case '5':
             case '6':
             case '7':
                ch -= '0';
                if( ul && *ptr >= '0' && *ptr <= '7' )
                {
                   ch = ( ch << 3 ) | ( *ptr++ - '0' );
                   ++ulStripped;
                   if( --ul && *ptr >= '0' && *ptr <= '7' )
                   {
                      ch = ( ch << 3 ) | ( *ptr++ - '0' );
                      ++ulStripped;
                      --ul;
                   }
                }
                break;
             case 'x':
                ch = 0;
                while( ul )
                {
                   if( *ptr >= '0' && *ptr <= '9' )
                      ch = ( ch << 4 ) | ( *ptr++ - '0' );
                   else if( *ptr >= 'A' && *ptr <= 'F' )
                      ch = ( ch << 4 ) | ( *ptr++ - 'A' + 10 );
                   else if( *ptr >= 'a' && *ptr <= 'f' )
                      ch = ( ch << 4 ) | ( *ptr++ - 'a' + 10 );
                   else
                      break;
                   ++ulStripped;
                   --ul;
                }
                break;
             default: /* case '\\': // Also any ch */
                break;
          }
       }
       else
          break;

    }
    *dst++ = ch;
 }

 if( ulStripped )
 {
    *dst = '\0';
    *pLen -= ulStripped;
 }

 return str;
}

best regards
Xavi

Szakáts Viktor escribió:
2008-06-02 20:16 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
  * source/common/hbstr.c
    ! HB_EXPORT added to hb_strRemEscSeq(). Thanks Javier.
--
Brgds,
Viktor

_______________________________________________
Harbour mailing list
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour



_______________________________________________
Harbour mailing list
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to