204 lines
4.0 KiB
C
204 lines
4.0 KiB
C
#include <stddef.h>
|
|
#include "compiler.h"
|
|
#include "time_header.h"
|
|
|
|
int isdigit(char c)
|
|
{
|
|
switch (c) {
|
|
default:
|
|
return 0;
|
|
case '1': case '2': case '3': case '4': case '5':
|
|
case '6': case '7': case '8': case '9': case '0':
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
int isspace(char c)
|
|
{
|
|
switch (c) {
|
|
default:
|
|
return 0;
|
|
case '\t': case '\r': case '\n': case '\v': case '\f': case ' ':
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
int isalpha(char c)
|
|
{
|
|
switch (c) {
|
|
default:
|
|
return 0;
|
|
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
|
|
case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N':
|
|
case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U':
|
|
case 'V': case 'W': case 'X': case 'Y': case 'Z':
|
|
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g':
|
|
case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
|
|
case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u':
|
|
case 'v': case 'w': case 'x': case 'y': case 'z':
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
int toupper(char c)
|
|
{
|
|
return ('a' <= c && c <= 'z') ? (c - ('a' - 'A')) : c;
|
|
}
|
|
|
|
size_t strlen(const char *string)
|
|
{
|
|
const char *s = string;
|
|
const char *start = s;
|
|
size_t result = 0;
|
|
|
|
while((*s) != '\0')
|
|
s++;
|
|
|
|
result = (size_t)(s - start);
|
|
|
|
return result;
|
|
}
|
|
|
|
void *memmove(void *, const void *, size_t);
|
|
|
|
void bcopy(const void *src,void *dest,size_t len)
|
|
{
|
|
memmove(dest, src, len);
|
|
}
|
|
|
|
char *strcat(char *dest, const char *src)
|
|
{
|
|
char * result = dest;
|
|
|
|
while((*dest) != '\0')
|
|
dest++;
|
|
|
|
while(((*dest++) = (*src++)) != '\0');
|
|
|
|
return(result);
|
|
}
|
|
|
|
char *strchr(const char *s, int c)
|
|
{
|
|
const unsigned char * us = (const unsigned char *)s;
|
|
char * result = NULL;
|
|
unsigned char us_c;
|
|
unsigned char find_this = (c & 0xff);
|
|
|
|
while(1)
|
|
{
|
|
us_c = (*us);
|
|
if(us_c == find_this)
|
|
{
|
|
result = (char *)us;
|
|
break;
|
|
}
|
|
|
|
if(us_c == '\0')
|
|
break;
|
|
|
|
us++;
|
|
}
|
|
|
|
return(result);
|
|
}
|
|
|
|
int strcmp(const char *s1, const char * s2)
|
|
{
|
|
int result = 0;
|
|
|
|
if(s1 != s2)
|
|
{
|
|
int c1,c2;
|
|
|
|
while((*s1) == (*s2))
|
|
{
|
|
if((*s1) == '\0')
|
|
break;
|
|
|
|
s1++;
|
|
s2++;
|
|
}
|
|
|
|
c1 = *(unsigned char *)s1;
|
|
c2 = *(unsigned char *)s2;
|
|
|
|
result = c1 - c2;
|
|
}
|
|
|
|
return(result);
|
|
}
|
|
|
|
char *strcpy(char *dest, const char *src)
|
|
{
|
|
char * result = dest;
|
|
|
|
if(dest != src)
|
|
{
|
|
while(((*dest++) = (*src++)) != '\0');
|
|
}
|
|
|
|
return(result);
|
|
}
|
|
|
|
int strncmp(const char *s1, const char *s2, size_t n)
|
|
{
|
|
int result = 0;
|
|
|
|
if(s1 != s2 && (int)n > 0)
|
|
{
|
|
while(n-- > 0)
|
|
{
|
|
if((*s1) == (*s2))
|
|
{
|
|
if((*s1) == '\0')
|
|
break;
|
|
|
|
s1++;
|
|
s2++;
|
|
}
|
|
else
|
|
{
|
|
int c1,c2;
|
|
c1 = *(unsigned char *)s1;
|
|
c2 = *(unsigned char *)s2;
|
|
|
|
result = c1 - c2;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return(result);
|
|
}
|
|
|
|
int strncasecmp(const char * _s1, const char * _s2, size_t n)
|
|
{
|
|
const unsigned char *s1 = (const unsigned char *)_s1;
|
|
const unsigned char *s2 = (const unsigned char *)_s2;
|
|
unsigned char c1,c2;
|
|
int result = 0;
|
|
|
|
if(s1 != s2)
|
|
{
|
|
while(n-- > 0)
|
|
{
|
|
c1 = toupper(*s1++);
|
|
c2 = toupper(*s2++);
|
|
|
|
if(c1 == c2)
|
|
{
|
|
if(c1 == '\0')
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
result = (int)c1 - (int)c2;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return(result);
|
|
}
|