home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
vol_300
/
319_02
/
str.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-06-18
|
3KB
|
204 lines
/*
CPP V5 -- string handling routines.
source: str.c
started: October 6, 1985
version: May 26, 1988; July 21, 1988
Written by Edward K. Ream.
This software is in the public domain.
See the read.me file for disclaimer and other information.
*/
#include "cpp.h"
/*
Allocate memory big enough to hold the string,
then copy the string to the allocated memory.
*/
char *
str_alloc(s)
register char *s;
{
register char * p;
register int n;
TRACEPB("str_alloc", printf("(%s)\n", pr_str(s)));
n = str_len(s) + 1;
p = m_alloc(n);
str_cpy(p, s);
RETURN_PTR("str_alloc", p);
}
/*
Concatenate s2 to the end of s1.
*/
void
str_cat(s1, s2)
register char *s1;
register char *s2;
{
#ifdef SHERLOCK
char *old_s1=s1;
char *old_s2=s2;
#endif
TRACEP("str_cat", printf("(%p, %s)", s1, s2));
while(*s1++) {
;
}
s1--;
while(*s2) {
*s1++ = *s2++;
}
*s1 = '\0';
TRACE("str_cpy", printf(" strlen(s1=old_s1+s2): %d=%d+%d\n",
str_len(old_s1), strlen(old_s1)-strlen(old_s2), strlen(old_s2)));
}
/*
Allocate global memory for two strings
This is NOT the same as strcat()!!
*/
char *
str_mcat(s1, s2)
register char *s1;
register char *s2;
{
register char * p;
register int n1, n2;
TRACEP("str_mcat", printf("(%s, %s)\n", s1, s2));
n1 = str_len(s1);
n2 = str_len(s2);
p = m_alloc(n1 + n2 + 1);
str_cpy(p, s1);
str_cpy(p + n1, s2);
TRACEPN("str_mcat", printf("returns <%s>\n", p));
return p;
}
/*
Compare s1 and s2.
Return <0 ==0 >0
*/
int
str_cmp(s1, s2)
register char *s1;
register char *s2;
{
TRACEP("str_cmp", printf("(%s, %s)\n", s1, s2));
while (*s1 == *s2) {
if (*s1 == '\0') {
return 0;
}
else {
s1++;
s2++;
}
}
return ((int)*s1) - ((int)*s2);
}
/*
Copy s2 to s1.
s1 must be large enough to hold s2.
*/
void
str_cpy(s1, s2)
register char *s1;
register char *s2;
{
#ifdef SHERLOCK
char * old_s1=s1;
#endif
TRACEP("str_cpy", printf("(%p, %s)", s1, s2));
while (*s2) {
*s1++ = *s2++;
}
*s1 = '\0';
TRACE("str_cpy", printf(" strlen(s1): %d\n", strlen(old_s1)));
}
/*
Return TRUE if s1 == s2
*/
bool
str_eq(s1, s2)
register char *s1;
register char *s2;
{
TRACEP("str_eq", printf("(%s, %s)\n", s1, s2));
while(*s1) {
if (*s1++ != *s2++) {
TRACEP("str_eq", printf("returns FALSE\n"));
return FALSE;
}
}
TRACEPN("str_eq",
printf("returns %s\n", (!*s2) ? "TRUE" : "FALSE"));
return !*s2;
}
/*
Return the length of a string.
*/
int
str_len(s)
register char *s;
{
register int len;
TRACEP("str_len", printf("(%s)\n", s));
len=0;
while (*s++) {
len++;
}
TRACEPN("str_len", printf("returns %d\n", len));
return len;
}
/*
Convert a string to lower case.
*/
void
str_lower(s)
register char *s;
{
while (*s) {
*s = tolower(*s);
s++;
}
}
/*
Convert a string to upper case.
*/
void
str_upper(s)
register char *s;
{
while (*s) {
*s = toupper(*s);
s++;
}
}