⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 support.c

📁 ADAM2 sources (modified by Oleg)
💻 C
📖 第 1 页 / 共 2 页
字号:
  {    
  if (((c>='0')&&(c<='9'))||
      ((c>='a')&&(c<='f'))||
      ((c>='A')&&(c<='F'))  )  
    return(TRUE);
   else
    return(FALSE);   
  }    
                        
int isdigit(int c)
  {
  return((c>='0')&&(c<='9'));
  }    

int strcmp(const char *s1,const char *s2)
{
	int len1, len2;
	
	len1 = strlen(s1);
	len2 = strlen(s2);
	if (len1 != len2)
		return (len1 - len2);

	while (*s1 || *s2)
	    if (*s1++ != *s2++)
    		return (*--s1 - *--s2);
    return 0;
}

char *strchr(const char *s, int c)
  {

  while(*s)
    {
    if (*s==(char)c)
      {
      return((char *)s);
      }
    s++;
    }
  return(0);
  }

char *strrchr(char *s, int	c)
{
	char	*fs;

	for (fs = 0;; ++s) 
	{
	    if (*s == c) 
			fs = s;
	    if (!*s) 
			return fs;
	}
}

char *strtok(char *s, int c)
{
	char *fs = "";
	
  	while(*s)
    {
    	if (*s==(char)c)
      	{
			fs = (char *)(s + 1);
			*s = 0;
      		return(fs);
      	}
    	s++;
    }
  	return(fs);
}

int strncmp(const char * cs,const char * ct,size_t count)
  {
  register signed char result = 0;

  while (count) 
    {
    if (( result = (*cs - *ct++)) != 0 || !*cs++)
      break;
    count--;
    }

  return(result);
  }

unsigned int atoui(char *cp)
  {
  unsigned int itmp,base;
  char c;

  /* Eliminate leading and trailing white space */

  while((*cp==' ')||(*cp=='\t')) cp++;
  while((strlen(cp))&&((cp[strlen(cp)-1]==' ')||(cp[strlen(cp)-1]=='\t')))
    cp[strlen(cp)-1]=0;
  if ((cp[0]=='0')&&((cp[1]&0x5f)=='X'))
    {
    base=16; 
    cp+=2;
    }
   else
    base=(cp[0]=='0')?8:10;
  itmp=0;
  while(*cp)
    {
    c=*cp++;
    if ((c>='a')&&(c<='f')&&(base==16)) 
      c&=0x5f;
    if ((c>='0')&&(c<='9'))
      {
      if ((base==8)&&(c>'7')) 
        return(0);
      itmp=itmp*(unsigned int)base;
      itmp+=(unsigned int)(c-'0');
      }
     else
      {
      if ((base!=16)||(!((c>='A')&&(c<='F'))) )
        return(0);
       else
        {
        itmp<<=4;
        itmp+=(c>='A')?((unsigned int)(c-0x37)):((unsigned int)(c-'0'));
        }
      }
    }
  return(itmp);
  }


#define isspace(c)	((c == ' ') ? 1 : 0)

unsigned long
strtoul(
	const 	char 	*str,
		char 	**endptr,
		int 	base)
{
	const char *s;
	unsigned long acc, cutoff;
	int c;
	int neg, any, cutlim;

    /*
	 * See strtol for comments as to the logic used.
	 */
	s = str;
	do {
		c = (unsigned char) *s++;
	} while (isspace(c));
	if (c == '-') {
		neg = 1;
		c = *s++;
	} else {
		neg = 0;
		if (c == '+')
			c = *s++;
	}
	if ((base == 0 || base == 16) &&
	    c == '0' && (*s == 'x' || *s == 'X')) {
		c = s[1];
		s += 2;
		base = 16;
	}
	if (base == 0)
		base = c == '0' ? 8 : 10;

	cutoff = MAXUINT(sizeof(UINT32)) / (unsigned long)base;
	cutlim = MAXUINT(sizeof(UINT32)) % (unsigned long)base;
	for (acc = 0, any = 0;; c = (unsigned char) *s++) {
		if (isdigit(c))
			c -= '0';
		else if (isalpha(c))
			c -= isupper(c) ? 'A' - 10 : 'a' - 10;
		else
			break;
		if (c >= base)
			break;
		if (any < 0)
			continue;
		if ((acc > cutoff) || ((acc == cutoff) && (c > cutlim))) {
			any = -1;
			acc = MAXUINT(sizeof(UINT32));			
		} else {
			any = 1;
			acc *= (unsigned long)base;
			acc += c;
		}
	}
	if (neg && any > 0)
		acc = -acc;
	if (endptr != 0)
		*endptr = (char *) (any ? s - 1 : (char *) str);
	return (acc);
}

unsigned long atoul(const char *str)
  {
  return(strtoul (str, (char **) 0, 0));
  } 

#define	 max_allowable(A) 	 (MAXINT(sizeof(INT32))/A - 1)

long strtol(const char *str, char **endptr, int base)
{
	long  	i = 0;
	int   	s = 1;
	int 	c;
	
	while(isspace(*str)) { // skip white space
		str++;
	}
	
	if (*str == '+') // sign flag check
		str++;
	else if (*str == '-') 
	{
		s = -1;
		str++;
	}

	if (*str == '0') 
	{
		if (toupper(*++str) == 'X')	
			base = 16,str++;
		else if (base == 0)	
			base = 8;
	}
	if (base == 0) 
		base = 10;
	
	if (base <= 10)

		for (; isdigit(*str); str++) // digit str to number
		{
			if (i < max_allowable(base))
				i = i * base + (*str - '0');
			else 
				i = MAXINT(sizeof(INT32));
		}
	else if (base > 10) 
	{
		for (; (c = *str); str++) 
		{
			if (isdigit(c))
			 	c = c - '0';
			else 
			{
				c = toupper(c);
				if (c >= 'A' && c < ('A' - 10 + base))
				 	c = c - 'A' + 10;
				else
				 	break;
			}
			if (i < max_allowable(base))
			 	i = i * base + c;
			else 
			 	i = MAXINT(sizeof(INT32));
		}
	}	
 	else
	 	return 0; // negative base is not allowed
	
	if (endptr) *endptr = (char *) str;

	if (s == -1)
		i = -i;

	return i;
}

unsigned long atol(const char *s)
{
  return (long) strtol (s, (char **) 0, 10);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -