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; }