#include <string.h>
char *domalloc(unsigned long bytes);
void parsefields(char *str, char **fields, int *numfields, char delim, int max);

unsigned long   _allocated = 0;

/* parsefields() changes delim and end of line into '\0' ,
  putting the args into array of char pointers */

void
parsefields (char *str, char **fields, int *numfields, char delim, int max)
{
 char *cp;

 cp = index (str, '\r');
 if (!cp) cp = index (str, '\n');
 if (cp) *cp = 0;

 if (strlen(str) < 1) {
   *numfields = 0;
   return;
 }

 fields[0] = str;
 for (*numfields = 1; *numfields < max ; ) {
     fields[*numfields] = index (fields[(*numfields)-1], delim);
     if (fields[*numfields]) {
       *(fields[*numfields]) = 0;      /* wipe out delim */
       fields[*numfields] += 1;        /* move one char past delim */
       (*numfields)++;
     }
     else
       break;
   }
}


char *
domalloc(unsigned long  bytes)
{
 char *cp;

 if (bytes == 0)
   bytes = 1;

 cp = (char *) malloc(bytes);

 _allocated += bytes;
 if (!cp)
   printf("Malloc failed to get %lu bytes.\n", bytes);
 return cp;
}


/**************************************************************************/
/* Count # of occurences of char c in string str */
int
strcnt(char *str, char c)
{
 register int  cnt = 0;

 while (*str)
   if (*str++ == c)
     cnt++;
 return cnt;
}

/**************************************************************************/
/* tolower a string, returning the length of the string */
int strlower(char *str)
{
 int   cnt = 0;

 while (*str) {
   if (isupper(*str))
     *str = tolower(*str);
   str++, cnt++;
 }
 return cnt;
}


substi_char (char *istr, char *ostr, char ch_frm, char ch_to)
/* Convert ch_frm into ch_to where ever it occurs in istr, write
  results in ostr */
{
 char *cp;

 strcpy (ostr, istr);  /* copy istr to ostr */
 for (cp = ostr; *cp; cp++) {
   if (*cp == ch_frm)
     *cp = ch_to;
 }
}