diff --git a/Test/Applications/StandardTester/main.cpp b/Test/Applications/StandardTester/main.cpp index 16181aaec6..94fdcd1a14 100644 --- a/Test/Applications/StandardTester/main.cpp +++ b/Test/Applications/StandardTester/main.cpp @@ -25,664 +25,669 @@ class CConverter; class CInternalWorker { public: - std::map m_formats; - std::vector m_files; + std::map m_formats; + std::vector m_files; - int m_nCount; - int m_nCurrent; - int m_nCurrentComplete; + int m_nCount; + int m_nCurrent; + int m_nCurrentComplete; - std::wstring m_sInputFolder; - std::wstring m_sOutputFolder; + std::wstring m_sInputFolder; + std::wstring m_sOutputFolder; - bool m_bIsStandard; - bool m_bIsDiffAllInOne; + std::wstring m_sConvertParams; - NSCriticalSection::CRITICAL_SECTION m_oCS; - NSCriticalSection::CRITICAL_SECTION m_oCS_OfficeUtils; + bool m_bIsStandard; + bool m_bIsDiffAllInOne; + + NSCriticalSection::CRITICAL_SECTION m_oCS; + NSCriticalSection::CRITICAL_SECTION m_oCS_OfficeUtils; public: - CInternalWorker() - { - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCXF, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_OFORM, true)); + CInternalWorker() + { + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCXF, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_DOCUMENT_OFORM, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS, true)); - m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS, true)); + m_formats.insert(std::make_pair(AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV, true)); - m_nCount = 0; - m_nCurrent = 0; - m_nCurrentComplete = 0; + m_nCount = 0; + m_nCurrent = 0; + m_nCurrentComplete = 0; - m_bIsDiffAllInOne = true; + m_bIsDiffAllInOne = true; - m_oCS.InitializeCriticalSection(); - m_oCS_OfficeUtils.InitializeCriticalSection(); - } - ~CInternalWorker() - { - m_oCS.DeleteCriticalSection(); - m_oCS_OfficeUtils.DeleteCriticalSection(); - } + m_oCS.InitializeCriticalSection(); + m_oCS_OfficeUtils.InitializeCriticalSection(); + } + ~CInternalWorker() + { + m_oCS.DeleteCriticalSection(); + m_oCS_OfficeUtils.DeleteCriticalSection(); + } - CConverter* GetNextConverter(); - void OnConvertFile(CConverter* pConverter, int nCode); - void Start(int nCores); - void Cancel(); + CConverter* GetNextConverter(); + void OnConvertFile(CConverter* pConverter, int nCode); + void Start(int nCores); + void Cancel(); - void OpenDir(std::wstring sDir) - { - m_sInputFolder = sDir; - std::vector arFiles = NSDirectory::GetFiles(sDir, true); - for (std::vector::iterator iter = arFiles.begin(); iter != arFiles.end(); iter++) - { - std::wstring sExt = NSFile::GetFileExtention(*iter); + void OpenDir(std::wstring sDir) + { + m_sInputFolder = sDir; + std::vector arFiles = NSDirectory::GetFiles(sDir, true); + for (std::vector::iterator iter = arFiles.begin(); iter != arFiles.end(); iter++) + { + std::wstring sExt = NSFile::GetFileExtention(*iter); - if (sExt == L"docx" || sExt == L"doc" || sExt == L"odt" || sExt == L"rtf" || sExt == L"docxf" || sExt == L"oform" || - sExt == L"pptx" || sExt == L"ppt" || sExt == L"odp" || - sExt == L"xlsx" || sExt == L"xls" || sExt == L"ods") - { - m_files.push_back(*iter); - } - } - m_nCount = (int)m_files.size(); - } + if (sExt == L"docx" || sExt == L"doc" || sExt == L"odt" || sExt == L"rtf" || sExt == L"docxf" || sExt == L"oform" || + sExt == L"pptx" || sExt == L"ppt" || sExt == L"odp" || + sExt == L"xlsx" || sExt == L"xls" || sExt == L"ods") + { + m_files.push_back(*iter); + } + } + m_nCount = (int)m_files.size(); + } - bool IsWork() - { - CTemporaryCS oCS(&m_oCS); - return (m_nCurrentComplete < m_nCount); - } + bool IsWork() + { + CTemporaryCS oCS(&m_oCS); + return (m_nCurrentComplete < m_nCount); + } }; namespace NSX2T { - int Convert(const std::wstring& sConverterPath, const std::wstring sXmlPath) - { - int nReturnCode = 0; - std::wstring sConverterExe = sConverterPath; + int Convert(const std::wstring& sConverterPath, const std::wstring sXmlPath) + { + int nReturnCode = 0; + std::wstring sConverterExe = sConverterPath; #ifdef WIN32 - NSStringUtils::string_replace(sConverterExe, L"/", L"\\"); + NSStringUtils::string_replace(sConverterExe, L"/", L"\\"); - sConverterExe += L".exe"; - std::wstring sApp = L"x2t "; + sConverterExe += L".exe"; + std::wstring sApp = L"x2t "; - STARTUPINFO sturtupinfo; - ZeroMemory(&sturtupinfo,sizeof(STARTUPINFO)); - sturtupinfo.cb = sizeof(STARTUPINFO); + STARTUPINFO sturtupinfo; + ZeroMemory(&sturtupinfo,sizeof(STARTUPINFO)); + sturtupinfo.cb = sizeof(STARTUPINFO); - sApp += (L"\"" + sXmlPath + L"\""); - wchar_t* pCommandLine = NULL; - if (true) - { - pCommandLine = new wchar_t[sApp.length() + 1]; - memcpy(pCommandLine, sApp.c_str(), sApp.length() * sizeof(wchar_t)); - pCommandLine[sApp.length()] = (wchar_t)'\0'; - } + sApp += (L"\"" + sXmlPath + L"\""); + wchar_t* pCommandLine = NULL; + if (true) + { + pCommandLine = new wchar_t[sApp.length() + 1]; + memcpy(pCommandLine, sApp.c_str(), sApp.length() * sizeof(wchar_t)); + pCommandLine[sApp.length()] = (wchar_t)'\0'; + } - HANDLE ghJob = CreateJobObject(NULL, NULL); + HANDLE ghJob = CreateJobObject(NULL, NULL); - if (ghJob) - { - JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 }; + if (ghJob) + { + JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 }; - // Configure all child processes associated with the job to terminate when the - jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; - if ( 0 == SetInformationJobObject( ghJob, JobObjectExtendedLimitInformation, &jeli, sizeof(jeli))) - { - CloseHandle(ghJob); - ghJob = NULL; - } - } + // Configure all child processes associated with the job to terminate when the + jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; + if ( 0 == SetInformationJobObject( ghJob, JobObjectExtendedLimitInformation, &jeli, sizeof(jeli))) + { + CloseHandle(ghJob); + ghJob = NULL; + } + } - PROCESS_INFORMATION processinfo; - ZeroMemory(&processinfo,sizeof(PROCESS_INFORMATION)); - BOOL bResult = CreateProcessW(sConverterExe.c_str(), pCommandLine, - NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &sturtupinfo, &processinfo); + PROCESS_INFORMATION processinfo; + ZeroMemory(&processinfo,sizeof(PROCESS_INFORMATION)); + BOOL bResult = CreateProcessW(sConverterExe.c_str(), pCommandLine, + NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &sturtupinfo, &processinfo); - if (bResult && ghJob) - { - AssignProcessToJobObject(ghJob, processinfo.hProcess); - } + if (bResult && ghJob) + { + AssignProcessToJobObject(ghJob, processinfo.hProcess); + } - ::WaitForSingleObject(processinfo.hProcess, INFINITE); + ::WaitForSingleObject(processinfo.hProcess, INFINITE); - RELEASEARRAYOBJECTS(pCommandLine); + RELEASEARRAYOBJECTS(pCommandLine); - //get exit code - DWORD dwExitCode = 0; - if (GetExitCodeProcess(processinfo.hProcess, &dwExitCode)) - { - nReturnCode = (int)dwExitCode; - } + //get exit code + DWORD dwExitCode = 0; + if (GetExitCodeProcess(processinfo.hProcess, &dwExitCode)) + { + nReturnCode = (int)dwExitCode; + } - CloseHandle(processinfo.hProcess); - CloseHandle(processinfo.hThread); + CloseHandle(processinfo.hProcess); + CloseHandle(processinfo.hThread); - if (ghJob) - { - CloseHandle(ghJob); - ghJob = NULL; - } + if (ghJob) + { + CloseHandle(ghJob); + ghJob = NULL; + } #endif #ifdef LINUX - pid_t pid = fork(); // create child process - int status; + pid_t pid = fork(); // create child process + int status; - std::string sProgramm = U_TO_UTF8(sConverterExe); - std::string sXmlA = U_TO_UTF8(sXmlPath); + std::string sProgramm = U_TO_UTF8(sConverterExe); + std::string sXmlA = U_TO_UTF8(sXmlPath); - switch (pid) - { - case -1: // error - break; + switch (pid) + { + case -1: // error + break; - case 0: // child process - { - std::string sLibraryDir = sProgramm; - std::string sPATH = sProgramm; - if (std::string::npos != sProgramm.find_last_of('/')) - { - sLibraryDir = "LD_LIBRARY_PATH=" + sProgramm.substr(0, sProgramm.find_last_of('/')); - sPATH = "PATH=" + sProgramm.substr(0, sProgramm.find_last_of('/')); - } + case 0: // child process + { + std::string sLibraryDir = sProgramm; + std::string sPATH = sProgramm; + if (std::string::npos != sProgramm.find_last_of('/')) + { + sLibraryDir = "LD_LIBRARY_PATH=" + sProgramm.substr(0, sProgramm.find_last_of('/')); + sPATH = "PATH=" + sProgramm.substr(0, sProgramm.find_last_of('/')); + } #ifdef _MAC - sLibraryDir = "DY" + sLibraryDir; + sLibraryDir = "DY" + sLibraryDir; #endif - const char* nargs[3]; - nargs[0] = sProgramm.c_str(); - nargs[1] = sXmlA.c_str(); - nargs[2] = NULL; + const char* nargs[3]; + nargs[0] = sProgramm.c_str(); + nargs[1] = sXmlA.c_str(); + nargs[2] = NULL; #ifndef _MAC - const char* nenv[2]; - nenv[0] = sLibraryDir.c_str(); - nenv[1] = NULL; + const char* nenv[2]; + nenv[0] = sLibraryDir.c_str(); + nenv[1] = NULL; #else - const char* nenv[3]; - nenv[0] = sLibraryDir.c_str(); - nenv[1] = sPATH.c_str(); - nenv[2] = NULL; + const char* nenv[3]; + nenv[0] = sLibraryDir.c_str(); + nenv[1] = sPATH.c_str(); + nenv[2] = NULL; #endif - execve(sProgramm.c_str(), - (char * const *)nargs, - (char * const *)nenv); - exit(EXIT_SUCCESS); - break; - } - default: // parent process, pid now contains the child pid - while (-1 == waitpid(pid, &status, 0)); // wait for child to complete - if (WIFEXITED(status)) - { - nReturnCode = WEXITSTATUS(status); - } - break; - } + execve(sProgramm.c_str(), + (char * const *)nargs, + (char * const *)nenv); + exit(EXIT_SUCCESS); + break; + } + default: // parent process, pid now contains the child pid + while (-1 == waitpid(pid, &status, 0)); // wait for child to complete + if (WIFEXITED(status)) + { + nReturnCode = WEXITSTATUS(status); + } + break; + } #endif - return nReturnCode; - } + return nReturnCode; + } } class CConverter : public NSThreads::CBaseThread { public: - CInternalWorker* m_pInternal; - std::wstring m_file; - std::wstring m_folder_dst; - int m_format; + CInternalWorker* m_pInternal; + std::wstring m_file; + std::wstring m_folder_dst; + int m_format; public: - CConverter(CInternalWorker* pWorker) : NSThreads::CBaseThread() - { - m_pInternal = pWorker; - m_format = -1; - } - virtual ~CConverter() - { - Stop(); - } + CConverter(CInternalWorker* pWorker) : NSThreads::CBaseThread() + { + m_pInternal = pWorker; + m_format = -1; + } + virtual ~CConverter() + { + Stop(); + } - virtual DWORD ThreadProc() - { - bool bIsOfficeFile = true; - if (true) - { - CTemporaryCS oCS(&m_pInternal->m_oCS_OfficeUtils); + virtual DWORD ThreadProc() + { + bool bIsOfficeFile = true; + if (true) + { + CTemporaryCS oCS(&m_pInternal->m_oCS_OfficeUtils); - COfficeFileFormatChecker oChecker; - bIsOfficeFile = oChecker.isOfficeFile(m_file); - if (bIsOfficeFile) - m_format = oChecker.nFileType; - } + COfficeFileFormatChecker oChecker; + bIsOfficeFile = oChecker.isOfficeFile(m_file); + if (bIsOfficeFile) + m_format = oChecker.nFileType; + } - if (!bIsOfficeFile) - { - m_bRunThread = FALSE; - m_pInternal->OnConvertFile(this, -1); - return 0; - } + if (!bIsOfficeFile) + { + m_bRunThread = FALSE; + m_pInternal->OnConvertFile(this, -1); + return 0; + } #if 0 - std::map::iterator find = m_pInternal->m_formats.find(m_format); - if ((find == m_pInternal->m_formats.end()) || (find->second == false)) - { - m_bRunThread = FALSE; - m_pInternal->OnConvertFile(this, -1); - return 0; - } + std::map::iterator find = m_pInternal->m_formats.find(m_format); + if ((find == m_pInternal->m_formats.end()) || (find->second == false)) + { + m_bRunThread = FALSE; + m_pInternal->OnConvertFile(this, -1); + return 0; + } #endif - std::wstring sProcess = NSFile::GetProcessDirectory(); + std::wstring sProcess = NSFile::GetProcessDirectory(); - NSStringUtils::string_replace(sProcess, L"\\", L"/"); - NSStringUtils::string_replace(m_file, L"\\", L"/"); + NSStringUtils::string_replace(sProcess, L"\\", L"/"); + NSStringUtils::string_replace(m_file, L"\\", L"/"); - std::wstring sDirectoryDst = m_folder_dst; - NSStringUtils::string_replace(sDirectoryDst, L"\\", L"/"); + std::wstring sDirectoryDst = m_folder_dst; + NSStringUtils::string_replace(sDirectoryDst, L"\\", L"/"); #ifdef WIN32 - NSStringUtils::string_replace(m_file, L"//", L"\\\\"); + NSStringUtils::string_replace(m_file, L"//", L"\\\\"); #endif - NSDirectory::CreateDirectory(sDirectoryDst); + NSDirectory::CreateDirectory(sDirectoryDst); - NSStringUtils::CStringBuilder oBuilder; - oBuilder.WriteString(L""); + NSStringUtils::CStringBuilder oBuilder; + oBuilder.WriteString(L""); - std::wstring sFileDst = sDirectoryDst + L"/page.zip"; + std::wstring sFileDst = sDirectoryDst + L"/page.zip"; - oBuilder.WriteEncodeXmlString(m_file); - oBuilder.WriteString(L""); + oBuilder.WriteEncodeXmlString(m_file); + oBuilder.WriteString(L""); - oBuilder.WriteEncodeXmlString(sFileDst); - oBuilder.WriteString(L""); - oBuilder.WriteString(std::to_wstring(AVS_OFFICESTUDIO_FILE_IMAGE)); - oBuilder.WriteString(L"./true"); - oBuilder.WriteString(sProcess + L"/fonts"); - oBuilder.WriteString(L"/AllFonts.js464"); + oBuilder.WriteEncodeXmlString(sFileDst); + oBuilder.WriteString(L""); + oBuilder.WriteString(std::to_wstring(AVS_OFFICESTUDIO_FILE_IMAGE)); + oBuilder.WriteString(L"./true"); + oBuilder.WriteString(sProcess + L"/fonts"); + oBuilder.WriteString(L"/AllFonts.js464"); - oBuilder.WriteString(L""); - oBuilder.WriteEncodeXmlString(sProcess + L"/fonts"); - oBuilder.WriteString(L""); + oBuilder.WriteString(L""); + oBuilder.WriteEncodeXmlString(sProcess + L"/fonts"); + oBuilder.WriteString(L""); - oBuilder.WriteString(L"42false10001000"); - oBuilder.WriteString(L"{"spreadsheetLayout":{"gridLines":true,"headings":true,"fitToHeight":1,"fitToWidth":1,"orientation":"landscape"}}"); + oBuilder.WriteString(L"42false10001000"); + oBuilder.WriteString(L"{"spreadsheetLayout":{"gridLines":true,"headings":true,"fitToHeight":1,"fitToWidth":1,"orientation":"landscape"}}"); - oBuilder.WriteString(L""); + if (!m_pInternal->m_sConvertParams.empty()) + oBuilder.WriteString(m_pInternal->m_sConvertParams); - std::wstring sXmlConvert = oBuilder.GetData(); + oBuilder.WriteString(L""); - std::wstring sTempFileForParams = sDirectoryDst + L"/params.xml"; - NSFile::CFileBinary::SaveToFile(sTempFileForParams, sXmlConvert, true); + std::wstring sXmlConvert = oBuilder.GetData(); - if (NSDirectory::Exists(sProcess + L"/converter")) - sProcess += L"/converter"; + std::wstring sTempFileForParams = sDirectoryDst + L"/params.xml"; + NSFile::CFileBinary::SaveToFile(sTempFileForParams, sXmlConvert, true); - std::wstring sExe = sProcess + L"/x2t"; - int nReturnCode = NSX2T::Convert(sExe, sTempFileForParams); + if (NSDirectory::Exists(sProcess + L"/converter")) + sProcess += L"/converter"; - NSFile::CFileBinary::Remove(sTempFileForParams); + std::wstring sExe = sProcess + L"/x2t"; + int nReturnCode = NSX2T::Convert(sExe, sTempFileForParams); - if (0 == nReturnCode) - { - CTemporaryCS oCS(&m_pInternal->m_oCS_OfficeUtils); + NSFile::CFileBinary::Remove(sTempFileForParams); - COfficeUtils oUtils; - if (S_OK == oUtils.ExtractToDirectory(sFileDst, sDirectoryDst, NULL, 0)) - NSFile::CFileBinary::Remove(sFileDst); - } + if (0 == nReturnCode) + { + CTemporaryCS oCS(&m_pInternal->m_oCS_OfficeUtils); - if (!m_pInternal->m_bIsStandard) - { - // смотрим разницу - std::wstring strDirIn = NSFile::GetDirectoryName(m_file); - std::wstring strDirOut = sDirectoryDst; + COfficeUtils oUtils; + if (S_OK == oUtils.ExtractToDirectory(sFileDst, sDirectoryDst, NULL, 0)) + NSFile::CFileBinary::Remove(sFileDst); + } - std::wstring strDiffsMain = NSFile::GetDirectoryName(strDirOut) + L"/DIFF"; - std::wstring strDiffs = strDiffsMain + L"/" + NSFile::GetFileName(m_file); + if (!m_pInternal->m_bIsStandard) + { + // смотрим разницу + std::wstring strDirIn = NSFile::GetDirectoryName(m_file); + std::wstring strDirOut = sDirectoryDst; - int nCountInPages = GetPagesCount(strDirIn); - int nCountOutPages = GetPagesCount(strDirOut); + std::wstring strDiffsMain = NSFile::GetDirectoryName(strDirOut) + L"/DIFF"; + std::wstring strDiffs = strDiffsMain + L"/" + NSFile::GetFileName(m_file); - if (nCountInPages != nCountOutPages) - { - if (!NSDirectory::Exists(strDiffsMain)) - NSDirectory::CreateDirectory(strDiffsMain); - if (!NSDirectory::Exists(strDiffs)) - NSDirectory::CreateDirectory(strDiffs); + int nCountInPages = GetPagesCount(strDirIn); + int nCountOutPages = GetPagesCount(strDirOut); - if (nCountInPages > nCountOutPages) - nCountInPages = nCountOutPages; + if (nCountInPages != nCountOutPages) + { + if (!NSDirectory::Exists(strDiffsMain)) + NSDirectory::CreateDirectory(strDiffsMain); + if (!NSDirectory::Exists(strDiffs)) + NSDirectory::CreateDirectory(strDiffs); - std::wstring sFilePagesDiff = strDiffs + L"/pages_count"; - NSFile::CFileBinary oFile; - oFile.CreateFileW(sFilePagesDiff); - oFile.CloseFile(); + if (nCountInPages > nCountOutPages) + nCountInPages = nCountOutPages; - std::cout << "file (page count) : " << U_TO_UTF8(strDiffs) << std::endl; - } + std::wstring sFilePagesDiff = strDiffs + L"/pages_count"; + NSFile::CFileBinary oFile; + oFile.CreateFileW(sFilePagesDiff); + oFile.CloseFile(); - for (int nPage = 0; nPage < nCountInPages; ++nPage) - { - std::wstring sPageI = strDirIn + L"/image" + std::to_wstring(nPage + 1) + L".png"; - std::wstring sPageO = strDirOut + L"/image" + std::to_wstring(nPage + 1) + L".png"; - std::wstring sPageDiff = strDiffs + L"/image" + std::to_wstring(nPage + 1) + L".png"; + std::cout << "file (page count) : " << U_TO_UTF8(strDiffs) << std::endl; + } - CBgraFrame frameI; - frameI.OpenFile(sPageI); + for (int nPage = 0; nPage < nCountInPages; ++nPage) + { + std::wstring sPageI = strDirIn + L"/image" + std::to_wstring(nPage + 1) + L".png"; + std::wstring sPageO = strDirOut + L"/image" + std::to_wstring(nPage + 1) + L".png"; + std::wstring sPageDiff = strDiffs + L"/image" + std::to_wstring(nPage + 1) + L".png"; - CBgraFrame frameO; - frameO.OpenFile(sPageO); + CBgraFrame frameI; + frameI.OpenFile(sPageI); - int nW_I = frameI.get_Width(); - int nH_I = frameI.get_Height(); + CBgraFrame frameO; + frameO.OpenFile(sPageO); - int nW_O = frameO.get_Width(); - int nH_O = frameO.get_Height(); + int nW_I = frameI.get_Width(); + int nH_I = frameI.get_Height(); - if (nW_I != nW_O || nH_I != nH_O) - { - if (!NSDirectory::Exists(strDiffsMain)) - NSDirectory::CreateDirectory(strDiffsMain); - if (!NSDirectory::Exists(strDiffs)) - NSDirectory::CreateDirectory(strDiffs); + int nW_O = frameO.get_Width(); + int nH_O = frameO.get_Height(); - std::wstring sFilePagesDiff = sPageDiff; - NSFile::CFileBinary oFile; - oFile.CreateFileW(sPageDiff); - oFile.WriteStringUTF8(L"sizes!"); - oFile.CloseFile(); + if (nW_I != nW_O || nH_I != nH_O) + { + if (!NSDirectory::Exists(strDiffsMain)) + NSDirectory::CreateDirectory(strDiffsMain); + if (!NSDirectory::Exists(strDiffs)) + NSDirectory::CreateDirectory(strDiffs); - std::cout << "file (sizes) : " << U_TO_UTF8(sPageDiff) << ", (" << nW_I << ", " << nH_I << "), (" << nW_O << ", " << nH_O << ")" << std::endl; - continue; - } + std::wstring sFilePagesDiff = sPageDiff; + NSFile::CFileBinary oFile; + oFile.CreateFileW(sPageDiff); + oFile.WriteStringUTF8(L"sizes!"); + oFile.CloseFile(); - BYTE* pDataI = frameI.get_Data(); - BYTE* pDataO = frameO.get_Data(); - size_t sizeMemory = 4 * nW_I * nH_I; + std::cout << "file (sizes) : " << U_TO_UTF8(sPageDiff) << ", (" << nW_I << ", " << nH_I << "), (" << nW_O << ", " << nH_O << ")" << std::endl; + continue; + } - if (0 == memcmp(pDataI, pDataO, sizeMemory)) - continue; + BYTE* pDataI = frameI.get_Data(); + BYTE* pDataO = frameO.get_Data(); + size_t sizeMemory = 4 * nW_I * nH_I; - sizeMemory = nW_I * nH_I; + if (0 == memcmp(pDataI, pDataO, sizeMemory)) + continue; - int nEpsilonEps = 3; - int nEpsilonNatural = 5; + sizeMemory = nW_I * nH_I; - int nDivExist = 0; - for (int indexPixH = 0; indexPixH < nH_I; indexPixH++) - { - for (int indexPixW = 0; indexPixW < nW_I; indexPixW++) - { - if (pDataI[0] != pDataO[0] || pDataI[1] != pDataO[1] || pDataI[2] != pDataO[2]) - { - // test epsilon natural - if ((abs(pDataI[0] - pDataO[0]) < nEpsilonNatural) && - (abs(pDataI[1] - pDataO[1]) < nEpsilonNatural) && - (abs(pDataI[2] - pDataO[2]) < nEpsilonNatural)) - { - pDataI += 4; - pDataO += 4; - continue; - } + int nEpsilonEps = 3; + int nEpsilonNatural = 5; - // test epsilon left, right, top, bottom - int nEpsUp = nEpsilonEps; - if (indexPixH > 0) - { - BYTE* pByteI = frameI.get_Data() + 4 * (indexPixH - 1) * nW_I + 4 * indexPixW; + int nDivExist = 0; + for (int indexPixH = 0; indexPixH < nH_I; indexPixH++) + { + for (int indexPixW = 0; indexPixW < nW_I; indexPixW++) + { + if (pDataI[0] != pDataO[0] || pDataI[1] != pDataO[1] || pDataI[2] != pDataO[2]) + { + // test epsilon natural + if ((abs(pDataI[0] - pDataO[0]) < nEpsilonNatural) && + (abs(pDataI[1] - pDataO[1]) < nEpsilonNatural) && + (abs(pDataI[2] - pDataO[2]) < nEpsilonNatural)) + { + pDataI += 4; + pDataO += 4; + continue; + } - if ((abs(pByteI[0] - pDataO[0]) < nEpsilonEps) && - (abs(pByteI[1] - pDataO[1]) < nEpsilonEps) && - (abs(pByteI[2] - pDataO[2]) < nEpsilonEps)) - { - nEpsUp = nEpsilonEps - 1; - } - } + // test epsilon left, right, top, bottom + int nEpsUp = nEpsilonEps; + if (indexPixH > 0) + { + BYTE* pByteI = frameI.get_Data() + 4 * (indexPixH - 1) * nW_I + 4 * indexPixW; - int nEpsDown = nEpsilonEps; - if (indexPixH < (nH_I - 1)) - { - BYTE* pByteI = frameI.get_Data() + 4 * (indexPixH + 1) * nW_I + 4 * indexPixW; + if ((abs(pByteI[0] - pDataO[0]) < nEpsilonEps) && + (abs(pByteI[1] - pDataO[1]) < nEpsilonEps) && + (abs(pByteI[2] - pDataO[2]) < nEpsilonEps)) + { + nEpsUp = nEpsilonEps - 1; + } + } - if ((abs(pByteI[0] - pDataO[0]) < nEpsilonEps) && - (abs(pByteI[1] - pDataO[1]) < nEpsilonEps) && - (abs(pByteI[2] - pDataO[2]) < nEpsilonEps)) - { - nEpsDown = nEpsilonEps - 1; - } - } + int nEpsDown = nEpsilonEps; + if (indexPixH < (nH_I - 1)) + { + BYTE* pByteI = frameI.get_Data() + 4 * (indexPixH + 1) * nW_I + 4 * indexPixW; - int nEpsLeft = nEpsilonEps; - if (indexPixW > 0) - { - BYTE* pByteI = pDataI - 4; + if ((abs(pByteI[0] - pDataO[0]) < nEpsilonEps) && + (abs(pByteI[1] - pDataO[1]) < nEpsilonEps) && + (abs(pByteI[2] - pDataO[2]) < nEpsilonEps)) + { + nEpsDown = nEpsilonEps - 1; + } + } - if ((abs(pByteI[0] - pDataO[0]) < nEpsilonEps) && - (abs(pByteI[1] - pDataO[1]) < nEpsilonEps) && - (abs(pByteI[2] - pDataO[2]) < nEpsilonEps)) - { - nEpsLeft = nEpsilonEps - 1; - } - } + int nEpsLeft = nEpsilonEps; + if (indexPixW > 0) + { + BYTE* pByteI = pDataI - 4; - int nEpsRight = nEpsilonEps; - if (indexPixW < (nW_I - 1)) - { - BYTE* pByteI = pDataI + 4; + if ((abs(pByteI[0] - pDataO[0]) < nEpsilonEps) && + (abs(pByteI[1] - pDataO[1]) < nEpsilonEps) && + (abs(pByteI[2] - pDataO[2]) < nEpsilonEps)) + { + nEpsLeft = nEpsilonEps - 1; + } + } - if ((abs(pByteI[0] - pDataO[0]) < nEpsilonEps) && - (abs(pByteI[1] - pDataO[1]) < nEpsilonEps) && - (abs(pByteI[2] - pDataO[2]) < nEpsilonEps)) - { - nEpsRight = nEpsilonEps - 1; - } - } + int nEpsRight = nEpsilonEps; + if (indexPixW < (nW_I - 1)) + { + BYTE* pByteI = pDataI + 4; - if ((nEpsLeft < nEpsilonEps) || - (nEpsRight < nEpsilonEps) || - (nEpsUp < nEpsilonEps) || - (nEpsDown < nEpsilonEps)) - { - pDataI += 4; - pDataO += 4; - continue; - } + if ((abs(pByteI[0] - pDataO[0]) < nEpsilonEps) && + (abs(pByteI[1] - pDataO[1]) < nEpsilonEps) && + (abs(pByteI[2] - pDataO[2]) < nEpsilonEps)) + { + nEpsRight = nEpsilonEps - 1; + } + } - ++nDivExist; + if ((nEpsLeft < nEpsilonEps) || + (nEpsRight < nEpsilonEps) || + (nEpsUp < nEpsilonEps) || + (nEpsDown < nEpsilonEps)) + { + pDataI += 4; + pDataO += 4; + continue; + } - if (pDataO[0] == 0x00 && pDataO[1] == 0x00 && pDataO[2] == 0xFF) - { - pDataO[0] = 0xFF; - pDataO[1] = 0x00; - pDataO[2] = 0x00; - } - else - { - pDataO[0] = 0x00; - pDataO[1] = 0x00; - pDataO[2] = 0xFF; - } - } - pDataI += 4; - pDataO += 4; - } - } + ++nDivExist; - if (nDivExist > 7) - { - if (!NSDirectory::Exists(strDiffsMain)) - NSDirectory::CreateDirectory(strDiffsMain); - if (!NSDirectory::Exists(strDiffs)) - NSDirectory::CreateDirectory(strDiffs); + if (pDataO[0] == 0x00 && pDataO[1] == 0x00 && pDataO[2] == 0xFF) + { + pDataO[0] = 0xFF; + pDataO[1] = 0x00; + pDataO[2] = 0x00; + } + else + { + pDataO[0] = 0x00; + pDataO[1] = 0x00; + pDataO[2] = 0xFF; + } + } + pDataI += 4; + pDataO += 4; + } + } - if (!m_pInternal->m_bIsDiffAllInOne) - { - frameO.SaveFile(sPageDiff, 4); - } - else - { - CBgraFrame frameOSrc; - frameOSrc.OpenFile(sPageO); + if (nDivExist > 7) + { + if (!NSDirectory::Exists(strDiffsMain)) + NSDirectory::CreateDirectory(strDiffsMain); + if (!NSDirectory::Exists(strDiffs)) + NSDirectory::CreateDirectory(strDiffs); - BYTE* pData1 = frameI.get_Data(); - BYTE* pData2 = frameOSrc.get_Data(); - BYTE* pData3 = frameO.get_Data(); + if (!m_pInternal->m_bIsDiffAllInOne) + { + frameO.SaveFile(sPageDiff, 4); + } + else + { + CBgraFrame frameOSrc; + frameOSrc.OpenFile(sPageO); - int nRowW = 4 * nW_I; - BYTE* pDataAll = new BYTE[3 * nRowW * nH_I]; - BYTE* pDataAllSrc = pDataAll; - for (int j = 0; j < nH_I; j++) - { - memcpy(pDataAll, pData1, nRowW); - pDataAll += nRowW; - pData1 += nRowW; + BYTE* pData1 = frameI.get_Data(); + BYTE* pData2 = frameOSrc.get_Data(); + BYTE* pData3 = frameO.get_Data(); - memcpy(pDataAll, pData2, nRowW); - pDataAll += nRowW; - pData2 += nRowW; + int nRowW = 4 * nW_I; + BYTE* pDataAll = new BYTE[3 * nRowW * nH_I]; + BYTE* pDataAllSrc = pDataAll; + for (int j = 0; j < nH_I; j++) + { + memcpy(pDataAll, pData1, nRowW); + pDataAll += nRowW; + pData1 += nRowW; - memcpy(pDataAll, pData3, nRowW); - pDataAll += nRowW; - pData3 += nRowW; - } + memcpy(pDataAll, pData2, nRowW); + pDataAll += nRowW; + pData2 += nRowW; - CBgraFrame oFrameAll; - oFrameAll.put_Data(pDataAllSrc); - oFrameAll.put_Width(3 * nW_I); - oFrameAll.put_Height(nH_I); - oFrameAll.put_Stride(-3 * nRowW); - oFrameAll.SaveFile(sPageDiff, 4); - } + memcpy(pDataAll, pData3, nRowW); + pDataAll += nRowW; + pData3 += nRowW; + } - std::cout << "file (diffs) : " << U_TO_UTF8(sPageDiff) << std::endl; - } - } - } + CBgraFrame oFrameAll; + oFrameAll.put_Data(pDataAllSrc); + oFrameAll.put_Width(3 * nW_I); + oFrameAll.put_Height(nH_I); + oFrameAll.put_Stride(-3 * nRowW); + oFrameAll.SaveFile(sPageDiff, 4); + } - m_bRunThread = FALSE; + std::cout << "file (diffs) : " << U_TO_UTF8(sPageDiff) << std::endl; + } + } + } - m_pInternal->OnConvertFile(this, nReturnCode); - return 0; - } + m_bRunThread = FALSE; - int GetPagesCount(const std::wstring& dir) - { - int nCount = 0; - std::vector files = NSDirectory::GetFiles(dir, false); - for (std::vector::iterator i = files.begin(); i != files.end(); i++) - { - std::wstring sExt = NSFile::GetFileExtention(*i); - if (sExt == L"png") - ++nCount; - } - return nCount; - } + m_pInternal->OnConvertFile(this, nReturnCode); + return 0; + } + + int GetPagesCount(const std::wstring& dir) + { + int nCount = 0; + std::vector files = NSDirectory::GetFiles(dir, false); + for (std::vector::iterator i = files.begin(); i != files.end(); i++) + { + std::wstring sExt = NSFile::GetFileExtention(*i); + if (sExt == L"png") + ++nCount; + } + return nCount; + } }; CConverter* CInternalWorker::GetNextConverter() { - if (m_nCurrent >= m_nCount) - return NULL; + if (m_nCurrent >= m_nCount) + return NULL; - CConverter* pConverter = new CConverter(this); - pConverter->DestroyOnFinish(); - pConverter->m_file = m_files[m_nCurrent]; - ++m_nCurrent; - std::wstring sName = NSFile::GetFileName(pConverter->m_file); + CConverter* pConverter = new CConverter(this); + pConverter->DestroyOnFinish(); + pConverter->m_file = m_files[m_nCurrent]; + ++m_nCurrent; + std::wstring sName = NSFile::GetFileName(pConverter->m_file); - pConverter->m_folder_dst = m_sOutputFolder + L"/" + sName; - NSDirectory::CreateDirectory(pConverter->m_folder_dst); + pConverter->m_folder_dst = m_sOutputFolder + L"/" + sName; + NSDirectory::CreateDirectory(pConverter->m_folder_dst); - if (m_bIsStandard) - NSFile::CFileBinary::Copy(pConverter->m_file, pConverter->m_folder_dst + L"/" + sName); + if (m_bIsStandard) + NSFile::CFileBinary::Copy(pConverter->m_file, pConverter->m_folder_dst + L"/" + sName); - pConverter->Start(0); - return pConverter; + pConverter->Start(0); + return pConverter; } void CInternalWorker::OnConvertFile(CConverter* pConverter, int nCode) { - CTemporaryCS oCS(&m_oCS); + CTemporaryCS oCS(&m_oCS); - std::cout << "file (complete) : " << U_TO_UTF8(pConverter->m_file) << ", code : " << nCode << std::endl; + std::cout << "file (complete) : " << U_TO_UTF8(pConverter->m_file) << ", code : " << nCode << std::endl; - ++m_nCurrentComplete; - GetNextConverter(); + ++m_nCurrentComplete; + GetNextConverter(); } void CInternalWorker::Start(int nCores) { - CTemporaryCS oCS(&m_oCS); + CTemporaryCS oCS(&m_oCS); - int nSizeInit = nCores; - if (nSizeInit > m_nCount) - nSizeInit = m_nCount; + int nSizeInit = nCores; + if (nSizeInit > m_nCount) + nSizeInit = m_nCount; - for (int i = 0; i < nSizeInit; ++i) - GetNextConverter(); + for (int i = 0; i < nSizeInit; ++i) + GetNextConverter(); } void CInternalWorker::Cancel() { - CTemporaryCS oCS(&m_oCS); - m_nCount = m_nCurrent; + CTemporaryCS oCS(&m_oCS); + m_nCount = m_nCurrent; } void CheckFonts(const bool& bIsUseSystemFonts, std::vector& arDirs) { - CApplicationFontsWorker oWorker; - oWorker.m_sDirectory = NSFile::GetProcessDirectory() + L"/fonts"; - if (!NSDirectory::Exists(oWorker.m_sDirectory)) - NSDirectory::CreateDirectory(oWorker.m_sDirectory); + CApplicationFontsWorker oWorker; + oWorker.m_sDirectory = NSFile::GetProcessDirectory() + L"/fonts"; + if (!NSDirectory::Exists(oWorker.m_sDirectory)) + NSDirectory::CreateDirectory(oWorker.m_sDirectory); - oWorker.m_bIsUseSystemFonts = bIsUseSystemFonts; + oWorker.m_bIsUseSystemFonts = bIsUseSystemFonts; - for (std::vector::iterator i = arDirs.begin(); i != arDirs.end(); i++) - oWorker.m_arAdditionalFolders.push_back(*i); + for (std::vector::iterator i = arDirs.begin(); i != arDirs.end(); i++) + oWorker.m_arAdditionalFolders.push_back(*i); - oWorker.m_bIsNeedThumbnails = false; - NSFonts::IApplicationFonts* pFonts = oWorker.Check(); - if (pFonts) - pFonts->Release(); + oWorker.m_bIsNeedThumbnails = false; + NSFonts::IApplicationFonts* pFonts = oWorker.Check(); + if (pFonts) + pFonts->Release(); } std::wstring CorrectDir(const std::wstring& sDir) { - if (sDir.empty()) - return L""; + if (sDir.empty()) + return L""; - const wchar_t* data = sDir.c_str(); + const wchar_t* data = sDir.c_str(); - std::wstring::size_type pos1 = (data[0] == '\"') ? 1 : 0; - std::wstring::size_type pos2 = sDir.length(); + std::wstring::size_type pos1 = (data[0] == '\"') ? 1 : 0; + std::wstring::size_type pos2 = sDir.length(); - if (data[pos2 - 1] == '\"') - --pos2; + if (data[pos2 - 1] == '\"') + --pos2; - if (pos2 > 0 && ((data[pos2 - 1] == '\\') || (data[pos2 - 1] == '/'))) - --pos2; + if (pos2 > 0 && ((data[pos2 - 1] == '\\') || (data[pos2 - 1] == '/'))) + --pos2; - return sDir.substr(pos1, pos2 - pos1); + return sDir.substr(pos1, pos2 - pos1); } /* @@ -702,125 +707,131 @@ int wmain(int argc, wchar_t** argv) int main(int argc, char** argv) #endif { - std::vector arFontsDirs; - bool bIsStandard = false; - std::wstring strInputFolder = L""; - std::wstring strOutputFolder = L""; - bool bIsUseSystemFonts = true; - int nCores = 1; + std::vector arFontsDirs; + bool bIsStandard = false; + std::wstring strInputFolder = L""; + std::wstring strOutputFolder = L""; + bool bIsUseSystemFonts = true; + int nCores = 1; + std::wstring strAdditionalParams; - for (int i = 0; i < argc; ++i) - { + for (int i = 0; i < argc; ++i) + { #ifdef WIN32 - std::wstring sParam(argv[i]); + std::wstring sParam(argv[i]); #else - std::string sParamA(argv[i]); - std::wstring sParam = UTF8_TO_U(sParamA); + std::string sParamA(argv[i]); + std::wstring sParam = UTF8_TO_U(sParamA); #endif - if (sParam.find(L"--") == 0) - { - std::wstring sKey = L""; - std::wstring sValue = L""; + if (sParam.find(L"--") == 0) + { + std::wstring sKey = L""; + std::wstring sValue = L""; - std::wstring::size_type _pos = sParam.find('='); - if (std::wstring::npos == _pos) - { - sKey = sParam; - } - else - { - sKey = sParam.substr(0, _pos); - sValue = sParam.substr(_pos + 1); - } + std::wstring::size_type _pos = sParam.find('='); + if (std::wstring::npos == _pos) + { + sKey = sParam; + } + else + { + sKey = sParam.substr(0, _pos); + sValue = sParam.substr(_pos + 1); + } - if (sKey == L"--input") - { - strInputFolder = CorrectDir(sValue); - } - else if (sKey == L"--output") - { - strOutputFolder = CorrectDir(sValue); - } - else if (sKey == L"--standard") - { - bIsStandard = true; - } - else if (sKey == L"--use-system-fonts") - { - if (sValue == L"0" || sValue == L"false") - bIsUseSystemFonts = false; - } - else if (sKey == L"--font-dirs") - { - const wchar_t* src = sValue.c_str(); - const wchar_t* limit = src + sValue.length(); + if (sKey == L"--input") + { + strInputFolder = CorrectDir(sValue); + } + else if (sKey == L"--output") + { + strOutputFolder = CorrectDir(sValue); + } + else if (sKey == L"--standard") + { + bIsStandard = true; + } + else if (sKey == L"--use-system-fonts") + { + if (sValue == L"0" || sValue == L"false") + bIsUseSystemFonts = false; + } + else if (sKey == L"--font-dirs") + { + const wchar_t* src = sValue.c_str(); + const wchar_t* limit = src + sValue.length(); - const wchar_t* srcPrev = src; - while (src < limit) - { - if (*src == ';') - { - if (srcPrev != src) - { - arFontsDirs.push_back(std::wstring(srcPrev, src - srcPrev)); - } - src++; - srcPrev = src; - } - else - src++; - } + const wchar_t* srcPrev = src; + while (src < limit) + { + if (*src == ';') + { + if (srcPrev != src) + { + arFontsDirs.push_back(std::wstring(srcPrev, src - srcPrev)); + } + src++; + srcPrev = src; + } + else + src++; + } - if (src > srcPrev) - { - arFontsDirs.push_back(std::wstring(srcPrev, src - srcPrev)); - } - } - else if (sKey == L"--cores") - { - nCores = std::stoi(sValue); - if (nCores < 1) - nCores = 1; - } - } - } + if (src > srcPrev) + { + arFontsDirs.push_back(std::wstring(srcPrev, src - srcPrev)); + } + } + else if (sKey == L"--cores") + { + nCores = std::stoi(sValue); + if (nCores < 1) + nCores = 1; + } + else if (sKey == L"--additional-params") + { + strAdditionalParams = sValue; + } + } + } - DWORD dwTime1 = NSTimers::GetTickCount(); + DWORD dwTime1 = NSTimers::GetTickCount(); - CheckFonts(bIsUseSystemFonts, arFontsDirs); + CheckFonts(bIsUseSystemFonts, arFontsDirs); #if 0 - if (true) - { - strInputFolder = L"D:\\standard"; - strOutputFolder = L"D:\\standard\\out"; - bIsStandard = true; - } - else - { - strInputFolder = L"D:\\standard\\out"; - strOutputFolder = L"D:\\standard\\check"; - bIsStandard = false; - } + if (true) + { + strInputFolder = L"D:\\standard"; + strOutputFolder = L"D:\\standard\\out"; + bIsStandard = true; + } + else + { + strInputFolder = L"D:\\standard\\out"; + strOutputFolder = L"D:\\standard\\check"; + bIsStandard = false; + } #endif - CInternalWorker oWorker; - oWorker.OpenDir(strInputFolder); - oWorker.m_sOutputFolder = strOutputFolder; - oWorker.m_bIsStandard = bIsStandard; + CInternalWorker oWorker; + oWorker.OpenDir(strInputFolder); + oWorker.m_sOutputFolder = strOutputFolder; + oWorker.m_bIsStandard = bIsStandard; + oWorker.m_sConvertParams = strAdditionalParams; - if (!NSDirectory::Exists(strOutputFolder)) - NSDirectory::CreateDirectories(strOutputFolder); + if (!NSDirectory::Exists(strOutputFolder)) + NSDirectory::CreateDirectories(strOutputFolder); - oWorker.Start(nCores); - while (oWorker.IsWork()) - NSThreads::Sleep(500); + oWorker.Start(nCores); + while (oWorker.IsWork()) + NSThreads::Sleep(500); - DWORD dwTime2 = NSTimers::GetTickCount(); + DWORD dwTime2 = NSTimers::GetTickCount(); - DWORD dwTimeDelta = (dwTime2 - dwTime1) / 1000; - std::cout << "time: " << dwTimeDelta << std::endl; + DWORD dwTimeDelta = (dwTime2 - dwTime1) / 1000; + std::cout << "time: " << dwTimeDelta << std::endl; - return 0; + return 0; }