Category : C Source Code
Archive   : SHERLOCK.ZIP
Filename : STR.C

 
Output of file : STR.C contained in archive : SHERLOCK.ZIP
/*
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++;
}
}


  3 Responses to “Category : C Source Code
Archive   : SHERLOCK.ZIP
Filename : STR.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/