staden-lg/src/Misc/strings.c

142 lines
2.4 KiB
C

#include "misc.h"
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int fstrlen(char *f, int max_f)
{
for (; max_f > 0 && (isspace(f[max_f-1]) || f[max_f-1]=='\0'); max_f--);
return max_f;
}
void f2cstr(char *f, int max_f, char *c, int max_c)
{
int i;
i = min(fstrlen(f,max_f),max_c);
strncpy(c,f,i);
c[i]='\0';
}
void c2fstr(char *c, int max_c, char *f, int max_f)
{
int i;
i = min(strlen(c),max_f);
strncpy(f,c,i);
for( ; i<max_f; i++) f[i]=' ';
}
char *mystrtok(char *s, char *ct)
/*
** When strtok isn't good enough
*/
{
char *this;
static char *look;
static int last;
if (s == NULL) {
if (last) return NULL;
} else {
look = s;
last = 0;
}
this = look;
for ( ; *look && strchr(ct,*look)==NULL; look++ ) ;
last = (! *look);
*look++ = '\0';
return this;
}
void str_tolower (char *s)
/*
** Convert string to lower case
*/
{
if (!s) return;
for ( ; *s ; s++ )
if (isupper(*s))
*s = tolower(*s);
}
void str_toupper (char *s)
/*
** Convert string to upper case
*/
{
if (!s) return;
for ( ; *s ; s++ )
if (islower(*s))
*s = toupper(*s);
}
#ifdef NOSTRSTR
/*
** My routines for nice sun ones.
*/
char *strstr(char *cs, char *ct)
/*
** ANSI C has the function strstr().
**
** strstr() returns a pointer to the first occurrence of the
** pattern string s2 in s1. For example, if s1 is "string
** thing" and s2 is "ing", strstr() returns "ing thing". If s2
** does not occur in s1, strstr() returns NULL.
**
** It's not always implemented. Here's my cludge:
*/
{
int i;
int len_ct;
int end;
len_ct = strlen(ct);
end = strlen(cs) - len_ct;
for (i=0;i<=end;i++)
if (strncmp(&cs[i],ct,len_ct)==0)
return &cs[i];
return NULL;
}
#endif
#ifdef NOSTRDUP
char *strdup(char *str)
/*
** SunOS has a nice strdup() function.
**
** strdup() returns a pointer to a new string which is a dupli-
** cate of the string pointed to by s1. The space for the new
** string is obtained using malloc(3V). If the new string can-
** not be created, a NULL pointer is returned.
**
** Other ANSI C libraries don't have this. Here is my kludge:
*/
{
char *newstr;
int i = strlen(str);
if ((newstr = (char *)malloc((unsigned int)(i+1))) == NULL)
return NULL;
for (; i>=0; i--)
newstr[i] = str[i];
return newstr;
}
#endif