Code Search for Developers
 
 
  

thOpenSource.cpp from MaNGOS at Krugle


Show thOpenSource.cpp syntax highlighted

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "thOpenSource.h"
#include "dbcedit.h"
#include "stdio.h"
#include <dir.h>
#include <inifiles.hpp>
#include <process.h>
#pragma package(smart_init)
//---------------------------------------------------------------------------

//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall thOpenFile::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------

__fastcall thOpenFile::thOpenFile(bool CreateSuspended)
        : TThread(CreateSuspended)
{
     
}
//---------------------------------------------------------------------------
void __fastcall thOpenFile::Execute()
{
        //---- Place thread code here ----
        //if(!Terminated){
        //  FrmMain->LoadAndModify(FrmMain->OpenDialog1->FileName.c_str());
        //  FrmMain->OpenOk=true;
        //}
        thEnd=false;
        RunOpen();
        FrmMain->OpenOk=true;
        thEnd=true;

}
//---------------------------------------------------------------------------
void __fastcall thOpenFile::RunOpen()
{
        LoadAndModify(FrmMain->OpenDialog1->FileName.c_str());
        //OpenOk=true;
}

void thOpenFile::ReadAndModifyFromBuff(char *pBuff, DWORD dwSize, const char* pszFileName)
{
	char szErrorMsg[MAX_PATH];
	char szNewFileName[MAX_PATH];
	DWORD w;
        TIniFile *ini;
        

	TypePtr p(pBuff);
	if('WDBC' != TAG(*p.dw))
	{
		_snprintf(szErrorMsg, 512, "[%s]Not Wow's dbc file!", pszFileName);
		ShowMessage(szErrorMsg);
		return;
	}
	p.dw++;

	DWORD dwRows, dwCols, dwRowLen, dwTextLen;
	dwRows = *p.dw++;
	dwCols = *p.dw++;
	dwRowLen = *p.dw++;
	dwTextLen = *p.dw++;

        FrmMain->sgEdit->RowCount = dwRows+1;
        FrmMain->sgEdit->ColCount = dwCols+1;

        for(int i=0; i<FrmMain->sgEdit->RowCount; i++){
            FrmMain->sgEdit->Cells[0][i]=IntToStr(i);
            if(Terminated) return;
        }
        //É趨ÁбêÌâ
        AnsiString  iniSetFile=ExtractFilePath(Application->ExeName)+"BcdEditer.ini";
        AnsiString SectionName=ExtractFileName(FrmMain->CurrentOpenFile);

        ini = new TIniFile( iniSetFile );
        for(int j=0; j<FrmMain->sgEdit->ColCount; j++){
            FrmMain->sgEdit->Cells[j][0]= ini->ReadString(SectionName,"ColTitle"+IntToStr(j),IntToStr(j));
            //sgEdit->Cells[j][0]=IntToStr(j);
            ColType[j]=ini->ReadInteger(SectionName,"ColType"+IntToStr(j),0);
            if(Terminated) return;
        }
        delete ini;

        //int   *ColType = new int[dwCols];
        
	DWORD dwTextStartPos = dwRows*dwRowLen+20;
	char* pTextPtr = pBuff + dwTextStartPos;
	char pszTemp[MAX_PATH];
	float fTemp;
	long lTemp;
	DWORD i, j;
	BOOL* pbString = new BOOL[dwRows*dwCols];
        float newTmp;
        //int   ColType;

        ini = new TIniFile( iniSetFile );

	for(i=0; i<dwRows; i++)
	{
		for(j=0; j<dwCols; j++)
		{
                    //SleepEx(0,0);
                    if(Terminated) return;
                    lTemp = *p.l;
                    newTmp = *p.f;
                    memcpy(&fTemp, &newTmp, 4);

                    if(j==0)    //ID
                        FrmMain->sgEdit->Cells[j+1][i+1]=IntToStr(lTemp);
                    else{

                        //ColType= ini->ReadInteger(SectionName,"ColType"+IntToStr(j),0);

                        switch (ColType[j+1])
                        {
                          case 0: //ÕûÐÍ
                             FrmMain->sgEdit->Cells[j+1][i+1]=IntToStr(lTemp);
                          break;
                          case 1: //¸¡µã
                             FrmMain->sgEdit->Cells[j+1][i+1]=FloatToStr(fTemp);
                          break;
                          case 2: //Îı¾  Îı¾ÀàÐÍÖ»ÄÜ¿´£¬²»Äܱ༭
                             if(dwTextStartPos + lTemp < dwSize){
                                 pTextPtr = pBuff + dwTextStartPos + lTemp;
                                 FrmMain->sgEdit->Cells[j+1][i+1]=pTextPtr;
                             }else{
                                 FrmMain->sgEdit->Cells[j+1][i+1]="¸ÃÁв»ÊÇÎı¾";
                             }
                          break;
                          default: //ÕûÐÍ
                             FrmMain->sgEdit->Cells[j+1][i+1]=IntToStr(lTemp);
                        }
                    }
                    p.c += 4;
                }
        }

	delete [] pbString;
        //delete []  ColType;
        delete ini;

}

void thOpenFile::LoadAndModify(const char * pszFileName)
{
	HANDLE hFile = NULL;
	hFile = CreateFile(pszFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
	if(hFile == INVALID_HANDLE_VALUE)return;

	DWORD r = 0, nFileSize = 0;
	nFileSize = GetFileSize(hFile, NULL);
	char* pTmpBuf = new char[nFileSize];
	if(pTmpBuf==NULL)
	{
		CloseHandle(hFile);
		return;
	}
	ReadFile(hFile, pTmpBuf, nFileSize, &r, NULL);

	FrmMain->CurrentOpenFile=pszFileName;
        FrmMain->btSave->Enabled=true;

	ReadAndModifyFromBuff(pTmpBuf, nFileSize, pszFileName);

	//SAFE_DELETE_ARRAY(pTmpBuf);
        delete [] pTmpBuf;
        CloseHandle(hFile);

}




See more files for this project here

MaNGOS

MaNGOS is an object-oriented Massively Multiplayer Online Role-Playing Game Server (MMORPGS). It\'s an educational project, to help developers get familar with large scale C++ and C# development projects.

Project homepage: http://sourceforge.net/projects/mangos
Programming language(s): C,C++,SQL
License: gpl2

  bin/
    BcdEditer.ini
    bcbsmp60.bpl
    borlndmm.dll
    cc3260mt.dll
    dclusr60.bpl
    indy60.bpl
    pjDbcEditer.exe
    rtl60.bpl
    update.txt
    vcl60.bpl
    vclx60.bpl
  BcdEditer.ini
  SearchFrm.cpp
  SearchFrm.ddp
  SearchFrm.dfm
  SearchFrm.h
  TitleFrm.cpp
  TitleFrm.ddp
  TitleFrm.dfm
  TitleFrm.h
  dbcedit.cpp
  dbcedit.ddp
  dbcedit.dfm
  dbcedit.h
  pjDbcEditer.bpr
  pjDbcEditer.cpp
  pjDbcEditer.exe
  pjDbcEditer.res
  pjDbcEditer.tds
  thOpenSource.cpp
  thOpenSource.h