int strncmp(const char *_l, const char *_r, int n)
{
	const unsigned char *l=(void *)_l, *r=(void *)_r;
	if (!n--) return 0;
	for (; *l && *r && n && *l == *r ; l++, r++, n--);
	return *l - *r;
}

int strlen(const char *s)
{
	const char *a = s;

	for (; *s; s++);
	return s-a;
}

char *strcpy(char * d, const char * s)
{
	for (; (*d=*s); s++, d++);

	return d;
}

void *memset(void *dest, int c, int n)
{
	unsigned char *s = dest;
	for (; n; n--, s++) *s = c;
	return dest;
}

int isprint(int c)
{
	return c > 32 && c < 256;	
}