home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / rettig.zip / TRSOURCE.EXE / TABSTRIP.C < prev    next >
C/C++ Source or Header  |  1990-10-22  |  2KB  |  66 lines

  1. /*********
  2. *
  3. * TABSTRIP.C
  4. *
  5. * by Tom Rettig
  6. *
  7. * Placed in the public domain by Tom Rettig Associates, 10/22/1990.
  8. *
  9. *  Syntax: TABSTRIP( <expC> [,<expN>] )
  10. *  Return: <expC> with tab-characters replaced with
  11. *             <expN> blank spaces (default 1 if omitted).
  12. *          Unchanged <expC> if out of memory.
  13. *  Note  : Maximum <expN> is 16, minimum is zero; no error returned.
  14. *********/
  15.  
  16. #include "trlib.h"
  17.  
  18. TRTYPE tabstrip()
  19. {
  20.    static char funcname[] = { "tabstrip" };
  21.    char *instr, *ret;
  22.    int i, j, k, tabs, spaces;
  23.  
  24.    if ( (PCOUNT==2 && ISCHAR(1) && ISNUM(2)) ||
  25.         (PCOUNT==1 && ISCHAR(1))              )
  26.    {
  27.       instr = _parc(1);
  28.       if ( PCOUNT==1 )
  29.       {
  30.          spaces = 1;
  31.          tabs = 0;
  32.       }
  33.       else
  34.       {
  35.          spaces = _parni(2) % MAXEXPAND;
  36.          if ( spaces < 0 )
  37.             spaces = 0;
  38.          for ( i=tabs=0; instr[i]; i++ )    /* count tabs */
  39.             tabs += instr[i]=='\t';
  40.       }
  41.       ret = _tr_allocmem( (unsigned)(_tr_strlen(instr)+1+(tabs*(spaces-1))));
  42.  
  43.       if ( ret )
  44.       {
  45.          for ( i=0, j=0; instr[j]; j++)
  46.          {
  47.             if ( instr[j] == '\t' )
  48.             {
  49.                for ( k=1; k<=spaces; k++ )
  50.                   ret[i++] = SPACEC;
  51.             }
  52.             else
  53.                ret[i++] = instr[j];
  54.          }
  55.          ret[i] = NULLC;
  56.  
  57.          _retc( ret );
  58.          _tr_freemem( ret,(unsigned)(_tr_strlen(instr)+1+(tabs*(spaces-1))) );
  59.       }
  60.       else
  61.          _retc( _tr_errmsgs(funcname,E_ALLOC) );
  62.    }
  63.    else
  64.       _retc( _tr_errmsgs(funcname,E_SYNTAX) );
  65. }
  66.