#include <stdio.h>
#include <ctype.h>
#include <strings.h>
#include "stringops.h"
#define tolow(A) (isupper(A)?(tolower(A)):(A))
int strcasecmp (char *a, char *b)
{
#ifdef FUNCTIONS
puts ("strcasecmp");
#endif
for (; (*a != '\0') && (*b != '\0') && (tolow (*a) == tolow (*b));
a++, b++);
return (tolow (*a) - tolow (*b));
}
int strncasecmp (char *a, char *b, int n)
{
#ifdef FUNCTIONS
puts ("strncasecmp");
#endif
for (; (*a != '\0') && (*b != '\0') &&
(tolow (*a) == tolow (*b)) && (n > 0); a++, b++, n--);
if (n == 0)
return 0;
return (tolow (*a) - tolow (*b));
}
int wordlen (char *string)
{
int counter = 0;
#ifdef FUNCTIONS
puts ("**wordlen");
#endif
while (isalnum(*string)) string++, counter++;
return counter;
}
void lowercase (char *string)
{
#ifdef FUNCTIONS
puts ("**lowercase");
#endif
while (*string != '\0')
{
if ((*string >= 'A') && (*string <= 'Z'))
*string += 32;
string++;
}
}
char *findstr(char *tststr, char *string)
{
int length;
#ifdef FUNCTIONS
puts ("**findstr");
#endif
length = strlen(string);
while ((*tststr != '\0') &&
((strncmp(tststr, string, length))))
tststr++;
if (*tststr != '\0') return tststr;
return NULL;
}
/* find - finds a string, making sure it is not a substring. */
char *find(char *string, char *searchstring)
{
#ifdef FUNCTIONS
puts ("**find");
#endif
while (!isalnum(*string) && (*string != '\0')) string++;
while (isalnum(*string))
{
if (!strncasecmp(string, searchstring, strlen(searchstring)) &&
!isalnum(*(string + strlen(searchstring))))
return string;
while (isalnum(*string)) string++;
while ((*string != '\0') && !isalnum(*string)) string++;
}
return NULL;
}
char *quotestrip(char *i)
{
char data[200], *returndata, *start, *end;
int dataloc;
#ifdef FUNCTIONS
puts ("**quotestrip");
#endif
start = i;
end = i;
while ((*start != '\"') && (*start != '\0')) start++;
if (*start == '\0') return NULL;
while (*end != '\0') end++;
while (*end != '\"') end--;
if (end == start) return NULL;
for (dataloc = 1; dataloc + start < end; dataloc++)
data[dataloc - 1] = start[dataloc];
data[dataloc - 1] = '\0';
returndata = (char *)calloc(strlen(data) + 1, sizeof(char));
strcpy (returndata, data);
return returndata;
}
char *tokenize(char *dest, char *source)
{
#ifdef FUNCTIONS
puts ("**tokenize");
#endif
if (source == NULL)
{
*dest = '\0';
return NULL;
}
while ((*source != '\0') && (!isspace(*source)))
*(dest++) = *(source++);
*dest = '\0';
return ((*source == '\0')?NULL:source + 1);
}
char *clip (char *start, char *end)
{
char *retstr;
int length;
#ifdef FUNCTIONS
puts ("**clip");
#endif
length = end - start + 1;
retstr = (char *)calloc(sizeof(char), length + 1);
strncpy(retstr, start, length);
retstr[length]='\0';
return retstr;
}