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

📄 ut.c

📁 USBhost source
💻 C
字号:
/**
*	ut.c
*	僒僽儖乕僠儞廤
*	Copyright (c)2002 Junichi Tomaru
*/
#include	<stdlib.h>
#include	<ctype.h>
#include	<string.h>
#include	"ut.h"

const	char	hexnum[] = "0123456789ABCDEF";

/**
*	悢抣傪侾俇恑暥帤楍偵(unsigned char)
*/
char	*uctoahz( byte num, char *buf )
{
	*( buf + 0 ) = hexnum[(num>>4)&0xf];
	*( buf + 1 ) = hexnum[num&0xf];
	*( buf + 2 ) = '\0';
	return	buf;
}


/**
*	悢抣傪侾侽恑暥帤楍偵(unsigned char)
*/
char	*uctoaz( byte num, char *buf )
{
	byte	n;
	char	i, p, f;

	for( n = 100, p = f = 0; n > 1; n /= 10 ){
		i = num / n;
		num %= n;
		if(( f == 0 ) && ( i != 0 )){
			f = 1;
		}
		if( f == 1 ){
			*( buf + p ) = ( char )( i + 0x30 );
			p++;
		}
	}
	*( buf + p ) = num + 0x30;
	*( buf + p + 1 ) = '\0';

	return	buf;
}


/**
*	悢抣傪侾侽恑暥帤楍偵(unsigned char,僛儘僒僾儗僗偟側偄)
*/
char	*uctoa( byte num, char *buf )
{
	byte	n;
	char	i, p;

	for( n = 100, p = 0; n > 1; n /= 10 ){
		i = num / n;
		num %= n;
		*( buf + p ) = ( char )( i + 0x30 );
		p++;
	}
	*( buf + p ) = num + 0x30;
	*( buf + p + 1 ) = '\0';

	return	buf;
}


/**
*	悢抣傪侾俇恑暥帤楍偵(unsigned short)
*/
char	*utoahz( word num, char *buf )
{
	int	i;

	for( i = 0; i < 4; i++ ){
		*( buf + i ) = hexnum[(num>>(4*(3-i)))&0xf];
	}
	*( buf + 4 ) = '\0';
	return	buf;
}


/**
*	悢抣傪侾俇恑暥帤楍偵(unsigned long)
*/
char	*ultoahz( dword num, char *buf )
{
	int	i;

	for( i = 0; i < 8; i++ ){
		*( buf + i ) = hexnum[(num>>(4*(7-i)))&0xf];
	}
	*( buf + 8 ) = '\0';
	return	buf;
}


/**
*	悢帤傪傾僗僉乕暥帤楍偵(unsigned short)
*/
char	*utoaz( word num, char *buf )
{
	word	n;
	int	i, p;

	for( n = 10000U, p = 0; n > 1; n /= 10, p ++ ){
		i = num / n;
		num %= n;
		*( buf + p ) = ( char )( i + 0x30 );
	}
	*( buf + p ) = num + 0x30;
	*( buf + p + 1 ) = '\0';
	return	buf;
}


/**
*	悢帤傪傾僗僉乕暥帤楍偵(unsigned short,僛儘僒僾儗僗)
*/
char	*utoa( word num, char *buf )
{
	word	n;
	int	i, p, f;

	for( n = 10000U, p = f = 0; n > 1; n /= 10 ){
		i = num / n;
		num %= n;
		if(( f == 0 ) && ( i != 0 )){
			f = 1;
		}
		if( f == 1 ){
			*( buf + p ) = ( char )( i + 0x30 );
			p++;
		}
	}
	*( buf + p ) = num + 0x30;
	*( buf + p + 1 ) = '\0';
	return	buf;
}


/**
*	悢帤傪傾僗僉乕暥帤楍偵(signed short)
*/
char	*itoaz( int num, char *buf )
{
	int	p;

	p = 0;
	if( num < 0 ){
		num = _abs( num );
		*buf = '-';
		p ++;
	}
	utoaz(( word )num, buf + p );
	return	buf;
}


/**
*	悢帤傪傾僗僉乕暥帤楍偵(unsigned long)
*/
char	*ultoaz( dword num, char *buf )
{
	dword	n;
	int	i, p;

	for( n = 1000000000LU, p = 0; n > 1; n /= 10, p ++ ){
		i = num / n;
		num %= n;
		*( buf + p ) = ( char )( i + 0x30 );
	}
	*( buf + p ) = num + 0x30;
	*( buf + p + 1 ) = '\0';
	return	buf;
}


/**
*	悢帤傪傾僗僉乕暥帤楍偵(signed long)
*/
char	*ltoaz( long num, char *buf )
{
	int	p;

	p = 0;
	if( num < 0L ){
		num = _abs( num );
		*buf = '-';
		p ++;
	}
	ultoaz(( dword )num, buf + p );
	return	buf;
}


/**
*	僷僢僋僪俛俠俢傪傾儞僷僢僋僪俛俠俢偵
*	l:僷僢僋僪俛俠俢攝楍偺寘悢
*/
char	*pbcd2bcd( char *pbcd, char *bcd, int l )
{
	int	i;

	for( i = 0; i < l; i ++ ){
		*( bcd + i * 2 ) = ( *( pbcd + i ) >> 4 ) & 0xf;
		*( bcd + i * 2 + 1 ) = *( pbcd + i ) & 0xf;
	}
	return	bcd;
}


/**
*	傾儞僷僢僋僪俛俠俢傪僷僢僋僪俛俠俢偵
*	l:傾儞僷僢僋僪俛俠俢攝楍偺寘悢
*/
char	*bcd2pbcd( char *bcd, char *pbcd, int l )
{
	int	i, j;

	for( i = 0; i < l; i ++ ){
		j = i / 2;
		if(( i % 2 ) == 0 ){
			*( pbcd + j ) = ( *( bcd + i ) << 4 ) & 0xf0;
		}
		else{
			*( pbcd + j ) |= *( bcd + i ) & 0xf;
		}
	}
	return	pbcd;
}


/**
*	傾儞僷僢僋僪俛俠俢傪暥帤楍偵
*/
char	*bcd2str( char *bcd, char *str, int l )
{
	int	i;

	for( i = 0; i < l; i ++ ){
		*( str + i ) = *( bcd + i ) + 0x30;
	}
	*( str + l ) = '\0';
	return	str;
}


/**
*	ip傾僪儗僗暥帤楍傪long宆偵曄姺偡傞
*	input parameter
*	  adrstr	"192.168.1.100"
*	  暥帤楍偵悢帤偲僪僢僩埲奜娷傓偙偲偼偱偒側偄
*	output parameter
*	  曄姺屻偺傾僪儗僗
*	  "192.168.1.100" --> 0xc0a80164
*	  僄儔乕偺応崌0x00000000傪曉偡
*/
dword	ipstr2bin( char *adrstr )
{
	char	c, *p, ct, tmp[4];
	int	i;
	dword	ret, pa;

	ret = 0;
	p = adrstr;
	ct = 0;
	for( i = 0; i < 16; i++ ){
		c = *( p + i );
		tmp[ct] = c;
		if( c == '.' ){
			tmp[ct] = '\0';
			pa = atol( tmp );
			ret |= ( dword )( pa & 0xff );
			ret <<= 8;
			ct = 0;
		}
		else if( c == '\0' ){
			tmp[ct] = '\0';
			pa = atol( tmp );
			ret |= ( dword )( pa & 0xff );
			break;
		}
		else if( isdigit( c ) == 0 ){
			ret = 0;
			break;
		}
		else{
			ct++;
		}
	}
	return	ret;
}


/**
*	俬俹傾僪儗僗傪暥帤楍偵偡傞
*/
char	*long2ipstr( dword ipadr, char *buf )
{
	ul_t	tmp;
	char	*p;

	tmp.data = ipadr;
	uctoaz( tmp.bytes.hh, buf );
	strcat( buf, "." );
	p = strrchr( buf, '.' );
	uctoaz( tmp.bytes.hl, p + 1 );
	strcat( buf, "." );
	p = strrchr( buf, '.' );
	uctoaz( tmp.bytes.lh, p + 1 );
	strcat( buf, "." );
	p = strrchr( buf, '.' );
	uctoaz( tmp.bytes.ll, p + 1 );

	return	buf;
}


/**
*	巜掕僶僀僩暘偺斾妑
*/
bool	bytecomp( const byte *src, const byte *dest, unsigned int size )
{
	int	i;

	for( i = 0; i < size; i++ ){
		if( src[i] != dest[i] ){
			return	TRUE;
		}

	}
	return	FALSE;
}


/**
*	巜掕悢暘僨乕僞傪僐僺乕偡傞
*/
void	packet_copy( char *dst, const char *src, unsigned int size )
{
	unsigned int	i;

	for( i = 0; i < size; i++ ){
		dst[i] = src[i];
	}
}


/**
*	巜掕応強偵巜掕暘偩偗僨乕僞傪奿擺偡傞
*/
void	packet_set( char *dst, byte val, unsigned int count )
{
	unsigned int	i;

	for( i = 0; i < count; i++ ){
		*( dst + i ) = val;
	}
}


/**
*	僶僢僼傽偐傜係僶僀僩庢傝弌偡
*/
dword	getlongvalue( byte *buf, int offset )
{
	ul_t	ret;

	ret.bytes.hh = *( buf + offset );
	offset++;
	ret.bytes.hl = *( buf + offset );
	offset++;
	ret.bytes.lh = *( buf + offset );
	offset++;
	ret.bytes.ll = *( buf + offset );

	return ret.data;
}


/**
*	僶僢僼傽偐傜俁僶僀僩庢傝弌偡
*/
dword	getthreevalue( byte *buf, int offset )
{
	ul_t	ret;

	ret.bytes.hh = 0;
	ret.bytes.hl = *( buf + offset );
	offset++;
	ret.bytes.lh = *( buf + offset );
	offset++;
	ret.bytes.ll = *( buf + offset );

	return ret.data;
}


/**
*	僶僢僼傽偐傜俀僶僀僩庢傝弌偡
*/
word	getwordvalue( byte *buf, unsigned int offset )
{
	ui_t	ret;

	ret.bytes.hi = *( buf + offset );
	offset++;
	ret.bytes.lo = *( buf + offset );

	return	ret.data;
}


/**
*	僶僢僼傽偵係僶僀僩偺僨乕僞傪彂偔
*/
void	setlongvalue( byte *buf, int offset, dword val )
{
	ul_t	tmp;
	byte	*p;

	tmp.data = val;
	p = buf + offset;
	*p = tmp.bytes.hh;
	p++;
	*p = tmp.bytes.hl;
	p++;
	*p = tmp.bytes.lh;
	p++;
	*p = tmp.bytes.ll;
}


/**
*	僶僢僼傽偵俁僶僀僩偺僨乕僞傪彂偔
*/
void	setthreevalue( byte *buf, int offset, dword val )
{
	ul_t	tmp;
	byte	*p;

	tmp.data = val;
	p = buf + offset;
	*p = tmp.bytes.hl;
	p++;
	*p = tmp.bytes.lh;
	p++;
	*p = tmp.bytes.ll;
}


/**
*	僶僢僼傽偵俀僶僀僩偺僨乕僞傪彂偔
*/
void	setwordvalue( byte *buf, int offset, word val )
{
	ui_t	tmp;
	byte	*p;

	tmp.data = val;
	p = buf + offset;
	*p = tmp.bytes.hi;
	p++;
	*p = tmp.bytes.lo;
}


/**
*	僨乕僞傪俀僶僀僩偢偮壛嶼偡傞丅
*	僠僃僢僋僒儉偺寁嶼帪側偳偵梡偄傞丅
*/
dword	data_add( byte *addr, unsigned int size, dword init )
{
	word	i;
	dword	ret;

	for( i = 0, ret = init; size > 1; addr += 2, size -= 2 ){	/* 俀僶僀僩偢偮壛嶼 */
		ret += (( dword )( *addr ) << 8 ) + *( addr + 1 );
		if( ret >= 0x10000 ){					/* 僆乕僶乕偟偨傜 */
			ret &= 0xffff;
			ret++;						/* 僉儍儕暘傪懌偡 */
		}
	}
	if( size == 1 ){						/* 婏悢僶僀僩偺偲偒 */
		ret += (( dword )( *addr ) << 8 );			/* 侾僶僀僩暘偩偗懌偡 */
		if( ret >= 0x10000 ){					/* 僆乕僶乕偟偨傜 */
			ret &= 0xffff;
			ret++;						/* 僉儍儕暘傪懌偡 */
		}
	}
	return	ret;
}


/**
*	侾偺曗悢偵傛傞僠僃僢僋僒儉寁嶼儖乕僠儞(=俀偺曗悢偺壛嶼亄僉儍儕)
*	  addr: 奐巒傾僪儗僗
*	  size: 挿偝(僶僀僩扨埵)
*	  init: 壛嶼弶婜抣(媅帡僿僢僟晹暘偩偗寁嶼偟偨傕偺傪擖傟傞丅懠偺偲偒偼侽傪擖傟傞丅)
*	   flg: 僼儔僌(CHECK:僠僃僢僋僒儉専徹帪 MAKE:僠僃僢僋僒儉嶌惉帪)
*	return: 寁嶼寢壥
*/
unsigned int	checksum( byte *addr, unsigned int size, dword init, char flg )
{
	word	sum;
	dword	tmp;

	tmp = data_add( addr, size, init );			/* 僨乕僞偺壛嶼 */
	sum = ( ~tmp ) & 0xffff;				/* 斀揮 */
	if(( flg == SUM_MAKE ) && ( sum == 0 )){		/* 寁嶼寢壥偑侽偺偲偒偼俥俥俥俥偵偡傞 */
		sum = 0xffff;
	}

	return	sum;
}


/**
*	俫俿俿俹暥帤楍撪偺俠俧俬晹暘偵摿掕偺暥帤楍偑娷傑傟偰偄傞偐挷傋傞丅
*	偙偺専嶕偺桳岠斖埻偼"HTTP/"傑偱偱偁傞丅
*	input
*	  buffer : 暥帤楍乮俫俿俵俴暥帤楍乯
*	  cmp : 暥帤楍乮専嶕偡傞暥帤楍乯
*	output
*	  1 : 娷傑傟偰偄傞
*	  0 : 娷傑傟偰偄側偄
*/
char	searchvalue( char *buffer, char *cmp )
{
	char	c1, c2, *p;
	int	i, j, k;

	p = strstr( buffer, "HTTP/" );
	*p = '\0';
	j = strlen( buffer );
	k = strlen( cmp );
	if( k > j ){
		return	0;
	}
	for( i = k = 0; i < j; i++ ){
		c1 = *( buffer + i );
		c2 = *( cmp + k );
		if( c1 == c2 ){
			if( *( cmp + k + 1 ) == '\0' ){
				return	1;
			}
			else{
				k++;
			}
		}
		else{
			k = 0;
		}
	}
	return	0;
}


/* end of ut.c */

⌨️ 快捷键说明

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