www.pudn.com > 221315556.rar > ini.cpp


//#include "Support.h" 
#include "ini.h" 
#include  
#include  
 
//#include "overload.h" 
 
void makepurestring( char * strin, char * strout ) 
{ 
	int idx = 0; 
	int i; 
	int bClean = 1; 
	bool eqflag=false; 
	bool mkflag=false; 
	bool isstr=false; 
 
	for( i = 0;strin[i]!='\0';i++ ) 
	{ 
		if( strin[i] == ';' ) 
		{ 
			strout[idx] = '\0'; 
			goto end; 
		} 
		if( strin[i] == '\"' ) 
		{ 
			bClean = 1-bClean; 
		 
		} 
 
		if(strin[i]=='=') 
		{ 
			eqflag=true; 
		} 
 
		if(strin[i]=='[') 
		{ 
			mkflag=true; 
		} 
 
		if(eqflag) 
		{ 
			if( strin[i]!='=' && strin[i] != ' ' && strin[i] != '	' && strin[i] != (char)0x0d && strin[i] != (char) 0x0a ) 
			{ 
				isstr=true; 
			} 
		} 
 
		if(mkflag) 
		{ 
			if( strin[i]!='[' && strin[i] != ' ' && strin[i] != '	' && strin[i] != (char)0x0d && strin[i] != (char) 0x0a ) 
			{ 
				isstr=true; 
			} 
		} 
 
		if( bClean ) 
		{ 
			if( strin[i] != ' ' && strin[i] != '	' && strin[i] != (char)0x0d && strin[i] != (char) 0x0a ) 
			{ 
				strout[idx] = strin[i]; 
				idx ++; 
			} 
 
			if(isstr && strin[i] == ' ') 
			{ 
				strout[idx] = strin[i]; 
				idx ++; 
			} 
		} 
		else 
		{ 
			strout[idx] = strin[i]; 
			idx ++; 
		} 
	} 
 
	strout[idx] = '\0'; 
 
end: 
	for( i = idx-1;i>0;i-- ) 
	{ 
		if( strout[i] != ' ') 
		{ 
			break; 
		} 
		else 
		{ 
			strout[i] = '\0'; 
		} 
	} 
} 
 
 
int iniclose( INIHANDLE hIni) 
{ 
	if( hIni == NULL ) return 0; 
	free( (void*)hIni); 
	return 1; 
} 
int inigetint( INIHANDLE hIni, char * segname, char * valname,int defvalue ) 
{ 
	char retval[32]; 
	int ret = inigetstring(hIni,segname,valname,retval); 
	if (ret==0) 
	{ 
		return defvalue; 
	} 
	else 
	{ 
		return atoi(retval); 
	} 
} 
 
bool inigetbool( INIHANDLE hIni, char * segname, char * valname ,bool defvalue) 
{ 
	char retval[10]; 
	int ret = inigetstring(hIni,segname,valname,retval); 
	if (ret==0) 
	{ 
		return defvalue; 
	} 
	else 
	{ 
		 
		if (strcmp("TRUE",strupr(retval))==0) 
			return true; 
		if (strcmp("FALSE",strupr(retval))==0) 
			return false; 
		return defvalue; 
    } 
 
} 
 
float inigetfloat( INIHANDLE hIni, char * segname, char * valname, float defvalue) 
{ 
	char retval[32]; 
	int ret = inigetstring(hIni,segname,valname,retval); 
	if (ret==0) 
	{ 
		return defvalue; 
	} 
	else 
	{ 
		return atof(retval); 
	} 
} 
 
unsigned int inigetdword( INIHANDLE hIni, char * segname, char * valname, DWORD defvalue) 
{ 
	char szHex[32]; 
	DWORD n=0,r=0; 
	 
	int ret = inigetstring(hIni,segname,valname,szHex); 
	if (ret==0) 
	{ 
		return defvalue; 
	} 
	else 
	{ 
		 
		size_t l = strlen(szHex); 
		for (size_t i=0; i='0' && szHex[i]<='9') 
				n=szHex[i]-'0'; 
			else if(szHex[i]>='a' && szHex[i]<='f') 
				n=szHex[i]-'a'+10; 
			else 
				n=0; 
			r=r*16+n; 
		} 
 
	} 
	return r; 
} 
 
int inigetstring( INIHANDLE hIni, char * segname, char * valname, char * retstring) 
{ 
	int i = 0; 
	int iequ = 0; 
	char tempstr[256]; 
	int ilen = (int)strlen( valname ); 
	if( hIni == NULL )return 0; 
	strcpy( tempstr, "[" ); 
	strcat( tempstr, segname ); 
	strcat( tempstr, "]" ); 
	 
	for( i = 0; i < hIni->cnt_lines ; i ++ ) 
	{ 
		if( stricmp( hIni->lines[i].line , tempstr )==0) 
		{ 
			break; 
		} 
	} 
 
	i ++; 
	while( hIni->lines[i].line[0] != '[' && i < hIni->cnt_lines ) 
	{ 
		memcpy( (void*)tempstr, (void*)hIni->lines[i].line ,ilen ); 
		tempstr[ilen] = '\0'; 
 
		if( stricmp( tempstr , valname )==0 && hIni->lines[i].line[ilen] == '=' ) 
		{ 
			strcpy( retstring,(char*)(hIni->lines[i].line + ilen + 1) ); 
			return 1; 
		} 
		i++; 
	} 
	return 0; 
} 
 
INIHANDLE iniopen( const char * sFile ) 
{ 
	FILE *file; 
	char *sBuf; 
	char tempstr[INI_LINE_MAX_CHAR]; 
	char tempstr2[INI_LINE_MAX_CHAR]; 
	int size; 
 
//	char s[256]; 
//	GetCurrentDirectory(MAX_PATH , s); 
 
	file=fopen(sFile,"rb"); 
	if(file==NULL)return NULL; 
 
	fseek(file,0,2); 
	size=ftell(file); 
	fseek(file,0,0); 
 
	sBuf = new char[size + 4]; 
	if( !sBuf )	return NULL; 
 
	fread(sBuf,sizeof(char),size,file); 
	fclose(file); 
 
	sBuf[ size ] = 0; 
	strcat( sBuf,"\r\n" ); 
	 
	char *sFind; 
	char *sData; 
	int iSize; 
 
	INIHANDLE hIni = (INIHANDLE)malloc( sizeof(st_handle_ini)); 
	memset( (void*)hIni, 0, sizeof(st_handle_ini) ); 
	 
	sData = sBuf; 
	while( sFind=strstr(sData,"\r\n") ) 
	{	 
		iSize = (int)(sFind - sData); 
		if( iSize >= INI_LINE_MAX_CHAR ) 
		{ 
			sData = sFind; 
			sData += 2; 
			continue; 
		} 
		memcpy( tempstr,sData,iSize ); 
		tempstr[ iSize ] = 0; 
 
 
		makepurestring( tempstr,tempstr2 ); 
		if( strlen( tempstr2 ) > 0 ) 
		{ 
			strcpy(hIni->lines[hIni->cnt_lines ].line  ,tempstr2 ); 
			hIni->cnt_lines ++; 
		} 
		sData = sFind; 
		sData += 2; 
	} 
 
	delete[] sBuf; 
	return hIni; 
}