int _tmain(int argc, _TCHAR* argv[])
{
	_wsetlocale(LC_ALL, L"chs");

	wprintf(L"------------------ 利用属性控制生成的类型库元数据 ------------------\n");

	::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

	ITweakCOMPtr comObj(__uuidof(TweakCOMObj));

	if(comObj)
	{
		wprintf(L"调用ExposedMethod方法\n");
		comObj->ExposedMethod();

		wprintf(L"访问DemoProperty属性的值\n");
		int result = comObj->DemoProperty;

		// 对属性的赋值语句会导致编译器错误
		// 因为该属性的put方法,被设置为ComVisible(false)
		//comObj->DemoProperty = 0;

		comObj.Release();
	}

	::CoUninitialize();

	wprintf(L"\n按任意键退出...\n");
	_getch();

	return 0;
}
Exemplo n.º 2
0
/*
	输  入: lpszFileName(const wchar_t*) - [in]日志文件路径
	输  出: -
	功  能: 将错误调试信息写如日志文件
*/
void LogErrorToFile(const wchar_t* lpszFileName, wchar_t* lpszFormat,...)
{
	errno_t err;
	va_list args;
	va_start(args, lpszFormat);

	// 格式化命令为标准字符串
	const int BUFFER_SIZE = 512;
	wchar_t szBuffer[BUFFER_SIZE];

	// _ASSERT is VC only.If you use gcc,please use assert instead
	int nBuffRet = _vsnwprintf(szBuffer, BUFFER_SIZE, lpszFormat, args);
	_ASSERT(nBuffRet >= 0);	 

	// 使文件流支持Unicode下的中文.
	_wsetlocale(LC_ALL, L"CHS");

	int nWriteRet = WriteFile(lpszFileName, szBuffer);
	_ASSERT(nWriteRet);

	if (!nWriteRet)
	{
		_get_errno(&err);
		wprintf(L"LogFile writes failed.Error code is %d\n", err);
	}

	va_end(args);
}
Exemplo n.º 3
0
int _tmain(int argc, _TCHAR *argv[])
{
	_wsetlocale(LC_ALL, L"korean");

	//if (argc != 3)
	//{
	//	wprintf(L"usage : %s <pid> <dll_path>", argv[0]);
	//	return -1;
	//}

	argv[1] = L"11424";
	argv[2] = L"stealth.dll";

	char *szDllName;
	int strSize = WideCharToMultiByte(CP_ACP, 0, argv[2], -1, NULL, 0, NULL, NULL);
	szDllName = new char[strSize];
	WideCharToMultiByte(CP_ACP, 0, argv[2], -1, szDllName, strSize, 0, 0);

	DWORD pid;
	TCHAR *pEnd;
	pid = wcstol(argv[1], &pEnd, 10);

	if (injection(pid, szDllName) == FALSE)
	{
		errorLOG("injection()");
		return -1;
	}

	return 0;
}
Exemplo n.º 4
0
int _tmain(int argc, TCHAR* argv[])
{
	_wsetlocale(LC_ALL, L"Korean") ;
	
	if(argc <2) return -1;
	wchar_t directory[MAX_STR_LEN] = L"";
		const DWORD maxBuf = 1024;
		wchar_t buf[maxBuf] = L"";
		DWORD readedByte = 0;
		for(int i =0; i<wcslen( argv[1] ); i++)
			directory[i] = (wchar_t)argv[1][i];
		HANDLE hFile = CreateFile(directory,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
		if(hFile == INVALID_HANDLE_VALUE)
		{
			wprintf(L"Error Type-Open file : %s",directory); // 파일이 안열린것
		}
		else
		{
			do{
				if(ReadFile(hFile,buf,maxBuf,&readedByte,NULL) == false)
				{
					wprintf(L"Error Type-Read file : %s",directory); // 파일 못읽은것
					break;
				}
				printf("%s",buf); // 유니코드 안될때 있으니까..
			}while(readedByte==maxBuf);
		}
		CloseHandle(hFile);
	return 1;
}	 
Exemplo n.º 5
0
int	main()
{
	_wsetlocale(LC_CTYPE, L"");

	std::wstring source = L"abc,123,xyz\n\"\"\"10,0\"\"\",\"\"\"20\n0\",300\n";
	csv_traits< wchar_t > traits;
	csv_string_stream< wchar_t > stream(source);

	while (!stream.eof())
	{
		auto row = csv_parser< wchar_t >::get_row(stream, traits);

		auto pos = row.begin();
		auto end = row.end();

		for (; pos != end; ++pos)
		{
			wprintf(L"col: %s ", (*pos).c_str());
		}

		wprintf(L"\n");
	}

	return 0;
}
Exemplo n.º 6
0
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
	HANDLE hMutex;
	INITCOMMONCONTROLSEX icex;

	_wsetlocale(LC_ALL, L"JPN");

	hInst = hInstance;

	CreateConfigPath();

	hMutex = CreateMutexW(NULL, FALSE, cnfmutexname);
	if(hMutex == NULL || GetLastError() == ERROR_ALREADY_EXISTS)
	{
		return 0;
	}

	icex.dwSize = sizeof(icex);
	icex.dwICC = ICC_LISTVIEW_CLASSES | ICC_TAB_CLASSES | ICC_PROGRESS_CLASS;
	InitCommonControlsEx(&icex);

	CreateProperty();

	return 0;
}
Exemplo n.º 7
0
//---------------------------------------------------------------------------//
void CNativeXMLReader::SetLocale(const WCHAR_T* loc)
{
    dfCompDebugMsg("SetLocale");

#ifndef __linux__
    _wsetlocale(LC_ALL, loc);
#else
    int size = 0;
    char *mbstr = 0;
    wchar_t *tmpLoc = 0;
    convFromShortWchar(&tmpLoc, loc);
    size = wcstombs(0, tmpLoc, 0)+1;
    mbstr = new char[size];

    if (!mbstr)
    {
        delete[] tmpLoc;
        return;
    }

    memset(mbstr, 0, size);
    size = wcstombs(mbstr, tmpLoc, wcslen(tmpLoc));
    setlocale(LC_ALL, mbstr);
    delete[] tmpLoc;
    delete[] mbstr;
#endif
}
Exemplo n.º 8
0
void InitializeServer(void)
{
	WSADATA wsadata;
	_wsetlocale(LC_ALL, L"korean");

	// Initialize Winsock
	// WSAStartup() :  프로그램에서 사용할 췬속 버전을 요청함으로써 윈속 라이브러리(WS2_32.DLL)를 초기화 하는 역할
	// msdn - The WSAStartup function initiates use of Winsock DLL bt a process

	// MAKEWORD(2,2)	: 프로그램이 요구하는 최상위 윈속 버전, 하위 8비트에 주 버전, 상위 8비트에 부 버전을 넣어서 전달
	//					: 만일 윈속 3.2 버전을 사용을 요청한다면 0x0203 또는 MAKEWORD(3,2)를 사용
	// wsadata			: 윈도우 운영체제가 제공하는 윈속 구현에 관한 정보(프로그램이 실제로 사용하게 될 윈속 버전,
	//					: 시스템이 지원하는 윈속 최상위 버전 등)를 얻을 수 있음. 하지만 실제로 이런 정보 사용 X
	if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
	{
		DisplayDebugText("InitializeServer :: WSAStartup Fail !!");
		exit(1);
	}

	// Create IOCP kernel object
	// if last argument is 0, Use kernel object by core count
	// CreateIoCompletionPort() : 입출력 완료 포트를 새로 생성.
	//							: 입출력 롼료 포트란 비동기 입출력 결과와 이 결과를 처리할 스레드에 관한 정보를 담고 있는 구조
	// msdn - Creates an input/output (I/O) completion port and associates it with a specified file handle, 
	//		or reates an I/O completion port that is not yet associated with a file handle, allowing association at a later time.
	ghIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, NULL, 0);
	if (NULL == ghIOCP)
	{
		DisplayDebugText("InitializeServer :: CreateIoCompletionPort Fail !!");
		exit(1);
	}

	return;
}
Exemplo n.º 9
0
//------------------------------------------------------------------------------------------------
void RshError::PrintError(U32 error, RSH_LANGUAGE language, bool includeSystemErrorInfo)
{
		#if defined(RSH_MSWINDOWS)
		 _wsetlocale( LC_ALL, L"Russian" );
		#elif defined(RSH_LINUX)
          setlocale( LC_ALL, "ru_RU.utf8" );
		#endif

		if(error != RSH_API_SUCCESS)
		{
			if(language == RSH_LANGUAGE_RUSSIAN)
				std::wcout<< rshUTF16("--ОШИБКА[0x");
			else 
				std::wcout<<std::endl<< rshUTF16("--ERROR[0x");

			wchar_t bufferRshApi[4096];
            U32 res = RshError::GetErrorDescriptionUTF16(error & ~0xffff, bufferRshApi,4096,language);
			if(res == RSH_API_SUCCESS)
			{
				std::wcout << std::hex
					<< (error & 0xffff0000) << rshUTF16("]-- ")
					<< bufferRshApi<<std::endl ;
			}
			else
			{
				std::wcout <<rshUTF16("Couldn't format error message - GetErrorDescriptionUTF16 failed with code 0x")<<std::hex<<res;
			}
			
			if(includeSystemErrorInfo && (error & 0xffff) )
			{
				wchar_t buffer[4096];

                U32 res = RshError::GetSystemErrorDescriptionUTF16( error & 0xffff, buffer, 4096 );
				if(res == RSH_API_SUCCESS)
				{

					if(language == RSH_LANGUAGE_RUSSIAN)
						std::wcout<<std::endl<<rshUTF16("Системная ошибка [");
					else
						std::wcout<<std::endl<<rshUTF16("System error [");

					std::wcout<<std::dec<< (error & 0xffff)<<rshUTF16("]: ");                          
									std::wcout<< buffer<<std::endl;
				}
				else
				{
					std::wcout <<rshUTF16("Couldn't format error message - GetSystemErrorDescriptionUTF16 failed with code 0x")<<std::hex<<res;
				}
			}
			
		}
		else
		{
			if(language == RSH_LANGUAGE_RUSSIAN)
				std::wcout<<std::endl<< rshUTF16("--УСПЕХ--")<<std::endl;
			else 
				std::wcout<<std::endl<< rshUTF16("--SUCCESS--")<<std::endl;		
		}
}
Exemplo n.º 10
0
// LocaleBase
void ComponentBaseImpl::SetLocale(const WCHAR_T* loc) {
#ifndef __linux__
  _wsetlocale(LC_ALL, loc);
#else
  //We convert in char* char_locale
  //also we establish locale
  //setlocale(LC_ALL, char_locale);
#endif
}
Exemplo n.º 11
0
/*-------------------------------------------
	main関数
--------------------------------------------*/
int wmain(int argc, WCHAR* argv[])
{
	HRESULT hr;

	// ロケールを設定
	_wsetlocale(LC_ALL, L"Japanese");

	// **********************************************************
	// Direct3D11デバイスの作成
	hr = CreateDevice();

	// **********************************************************
	// コンピュート・シェーダの作成
	if (SUCCEEDED(hr))
		hr = CreateShader();

	// **********************************************************
	// 定数バッファの作成
	if (SUCCEEDED(hr))
		hr = CreateCBuffer();

	// **********************************************************
	// リソースの作成
	if (SUCCEEDED(hr))
		hr = CreateResource();

	// **********************************************************
	// シェーダ リソース ビューの作成
	if (SUCCEEDED(hr))
		hr = CreateSRV();

	// **********************************************************
	// アンオーダード・アクセス・ビューの作成
	if (SUCCEEDED(hr))
		hr = CreateUAV();

	// **********************************************************
	// コンピュート・シェーダを使った演算
	if (SUCCEEDED(hr))
		ComputeShader();

	// **********************************************************
	// 開放
	SAFE_RELEASE(g_pUAV[1]);
	SAFE_RELEASE(g_pUAV[0]);
	SAFE_RELEASE(g_pSRV[1]);
	SAFE_RELEASE(g_pSRV[0]);
	SAFE_RELEASE(g_pReadBackBuffer);
	SAFE_RELEASE(g_pBuffer[1]);
	SAFE_RELEASE(g_pBuffer[0]);
	SAFE_RELEASE(g_pCBuffer);
	SAFE_RELEASE(g_pComputeShader);
	SAFE_RELEASE(g_pImmediateContext);
	SAFE_RELEASE(g_pD3DDevice);

	return 0;
}
Exemplo n.º 12
0
//------------------------------------------------------------------------------------------------
void RshError::PrintErrorDebug(U32 error, wchar_t* message, bool includeSystemErrorInfo)
{
		
		#if defined(RSH_MSWINDOWS)
		_wsetlocale( LC_ALL, L"Russian" );	
		#elif defined(RSH_LINUX)
          setlocale( LC_ALL, "ru_RU.utf8" );
		#endif
		RSH_LANGUAGE language = RSH_LANGUAGE_ENGLISH;

		if(error != RSH_API_SUCCESS)
		{
			
			std::wcout<<std::endl<<rshUTF16("--ERROR[0x");

			wchar_t bufferRshApi[4096];
            U32 res = RshError::GetErrorDescriptionUTF16(error & ~0xffff, bufferRshApi,4096,language);
			if(res == RSH_API_SUCCESS)
			{
				std::wcout << std::hex
				<< (error & 0xffff0000) << rshUTF16("]-- ");
				if(message)
					std::wcout<<message;
				else
					std::wcout<<rshUTF16("~~!wchar_t* message points to NULL!~~");
				std::wcout<<rshUTF16(": ")<< bufferRshApi<<std::endl ;
			}
			else
			{
				std::wcout <<rshUTF16("Couldn't format error message - GetErrorDescriptionUTF16 failed with code 0x")<<std::hex<<res;
			}

			
			
			if(includeSystemErrorInfo && (error & 0xffff) )
			{
				wchar_t buffer[4096];

                U32 res = RshError::GetSystemErrorDescriptionUTF16( error & 0xffff, buffer, 4096 );
				if(res == RSH_API_SUCCESS)
				{
					std::wcout<<std::endl<<rshUTF16("System error [");
					std::wcout<<std::dec<< (error & 0xffff)<<rshUTF16("]: ");                          
                                std::wcout<< buffer<<std::endl;
				}
				else
				{
					std::wcout <<rshUTF16("Couldn't format error message - GetSystemErrorDescriptionUTF16 failed with code 0x")<<std::hex<<res;
				}
			}
			
		}
		else
		{
			std::wcout<<std::endl<< rshUTF16("--SUCCESS-- ")<<message<<std::endl;		
		}
}
Exemplo n.º 13
0
//---------------------------------------------------------------------------//
void CAddInNative::SetLocale(const WCHAR_T* loc)
{
#ifndef __linux__
    _wsetlocale(LC_ALL, loc);
#else
    //We convert in char* char_locale
    //also we establish locale
    //setlocale(LC_ALL, char_locale);
#endif
}
Exemplo n.º 14
0
int main() {
	_wsetlocale(LC_ALL, L"");
	wchar_t* a = L"hello";
	wchar_t* b = L"您好";
	printf("%ls size is %d\n", a, wcslen(a));
	printf("%ls size is %d\n", b, wcslen(b));
	printf("size is %d\n", sizeof(a[0]));
	getchar();
	return 0;
}
Exemplo n.º 15
0
int _tmain(int argc, _TCHAR* argv[])
{
	_wsetlocale(LC_ALL, L"Korean") ;
	wchar_t data[MAX_PATH] = L"hihihi";
	DWORD dwTreadID;
	HANDLE hTread = CreateThread(
					NULL, 0, func,(LPVOID)data,
					0, &dwTreadID);
	while(1);
	return 0;
}	 
Exemplo n.º 16
0
int main()
{
	_wsetlocale(LC_ALL, L"");
	int myIntValue = 20;
	wchar_t m_reportFileName[256];
	wchar_t a = L'中';
	swprintf_s(m_reportFileName, 256, L"%wc,%d", a, myIntValue);
	printf("%d\n", wcslen(m_reportFileName));
	wprintf(L"%s\n", m_reportFileName);
	getchar();
}
Exemplo n.º 17
0
wchar_t* _wsetlocale_map(int category, const wchar_t *locale)
{
	wchar_t *ret = _wsetlocale(category, locale);

	for (wchar_t c = 0; c < 256; ++c)
	{
		g_mapToLower[c] = towlower(c);
		g_mapToUpper[c] = towupper(c);
	}
	
	return ret;
}
Exemplo n.º 18
0
ForceInline Void main2(Int argc, WChar **argv)
{
    FILE *fp;
    LPVoid lpBuffer, lpEndOfBuffer;
    UInt32 BufferSize, FileSize;

    ConvertScriptToUnicode(argc, argv);
    return;

    BufferSize = 0x1000;
    lpBuffer = malloc(BufferSize);
    _wsetlocale(LC_CTYPE, L"");
    for (Int32 i = 1; i != argc; ++i)
    {
        fp = _wfopen(*++argv, L"rb+");
        if (!fp)
        {
            _wperror(*argv);
            continue;
        }

        FileSize = fsize(fp);
        if (FileSize > BufferSize)
        {
            BufferSize = FileSize;
            lpBuffer = realloc(lpBuffer, BufferSize);
        }

        fread(lpBuffer, FileSize, 1, fp);
        fclose(fp);
        if (*(PUInt16)lpBuffer != 0xFEFF)
        {
            wprintf(L"%s\nsupport unicode only\n\n", *argv);
            fclose(fp);
            continue;
        }

        lpEndOfBuffer = (PByte)lpBuffer + FileSize;
        ProcessFile((PByte)lpBuffer + 2, lpEndOfBuffer, *argv);
    }

    free(lpBuffer);
}
Exemplo n.º 19
0
ForceInline Void main2(Int argc, WChar **argv)
{
	_wsetlocale(LC_CTYPE, L"");

	{
		CFontSubSet fss(argc, argv);
		if (fss.ParseCmdLine() == FALSE)
		{
			_tprintf(_T("Parse command line failed.\n"));
		}
		else if (fss.ParseAss() == FALSE)
		{
			_tprintf(_T("Parse ass file failed.\n"));
		}
		else if (fss.SubSet() == FALSE)
		{
			_tprintf(_T("Subset failed.\n"));
		}
	}
}
Exemplo n.º 20
0
int
logger_init(struct logger * inst, struct skynet_context *ctx, const char * parm) {
	if (parm) {
		inst->handle = fopen(parm,"w");
		if (inst->handle == NULL) {
			return 1;
		}
		inst->close = 1;
	} else {
		inst->handle = stdout;
	}
#ifdef _MSC_VER
	_wsetlocale(0, L"chs");
#endif
	if (inst->handle) {
		skynet_callback(ctx, inst, _logger);
		skynet_command(ctx, "REG", ".logger");
		return 0;
	}
	return 1;
}
Exemplo n.º 21
0
int	main()
{
	_wsetlocale(LC_CTYPE, L"");

	std::wstring source = L"abc,12\"\"3,xyz\r\n\"\"\"10,0\"\"\",\"\"\"20\n0\",300\n\"\"123";

	/* output
	col: abc
	col: 12"3
	col: xyz(\r not include)

	col: "10,0"
	col: "20
	0

	col: 300

	col: "123
	*/
	csv_traits<wchar_t> traits;
	csv_string_stream<wchar_t> stream(source);

	wprintf(L"src: %s\n\n", source.c_str());
	while (!stream.is_eof())
	{
		auto row = csv_parser<wchar_t>::get_row(stream, traits);

		auto pos = row.begin();
		auto end = row.end();

		for (; pos != end; ++pos)
		{
			wprintf(L"col: %s\n", (*pos).data());
		}

		wprintf(L"\n");
	}

	return 0;
}
Exemplo n.º 22
0
int _tmain(int argc, _TCHAR* argv[])
{
	LThreadType = THREAD_MAIN;
	_wsetlocale( 0, L"Korean" );
	/// for dump on crash
	SetUnhandledExceptionFilter(ExceptionFilter);

	/// Global Managers
	GClientSessionManager = new ClientSessionManager;
	GIocpManager = new IocpManager;


	if (false == GIocpManager->Initialize())
		return -1;

	if (false == DbHelper::Initialize(SQL_SERVER_CONN_STR, GIocpManager->GetIoThreadCount()))
		return -1;

	if (false == GIocpManager->StartIoThreads())
		return -1;

	printf_s("Start Server\n");

 	
	GIocpManager->StartAccept(); ///< block here...

	GIocpManager->Finalize();

	printf_s("End Server\n");

	DbHelper::Finalize();

	delete GIocpManager;
	delete GClientSessionManager;

	return 0;
}
Exemplo n.º 23
0
void CMUCHighlight::init()
{
	DBVARIANT dbv = {0};

	if (m_fInitialized)
		cleanup();							// clean up first, if we were already initialized

	m_fInitialized = true;

	if (0 == db_get_ts(0, CHAT_MODULE, "HighlightWords", &dbv)) {
		m_TextPatternString = dbv.ptszVal;
		_wsetlocale(LC_ALL, L"");
		wcslwr(m_TextPatternString);
	}

	if (0 == db_get_ts(0, CHAT_MODULE, "HighlightNames", &dbv))
		m_NickPatternString = dbv.ptszVal;

	m_dwFlags = M.GetByte(CHAT_MODULE, "HighlightEnabled", MATCH_TEXT);
	m_fHighlightMe = (M.GetByte(CHAT_MODULE, "HighlightMe", 1) ? true : false);

	tokenize(m_TextPatternString, m_TextPatterns, m_iTextPatterns);
	tokenize(m_NickPatternString, m_NickPatterns, m_iNickPatterns);
}
Exemplo n.º 24
0
void CLanguage::ParseLanguageFile( const CUString& strFileName )
{
    BOOL bResult		= TRUE;
    DWORD dwRevision	= 0;
    FILE* pFile			= NULL;

    CUString strFullFileName = m_strLanguageDir + _W("\\lang\\") + strFileName + m_strLangFileExt;
    CUStringConvert strCnv;

    pFile = CDexOpenFile( strFullFileName, _W( "r" ) );

    if ( NULL != pFile )
    {
        CHAR lpszRead[ 1024 ];
        int nStart = 0;
        int nStop  = 0;

        CUString strRead;

        memset( lpszRead, 0, sizeof( lpszRead ) );

        while ( fgets( lpszRead, sizeof( lpszRead ), pFile  ) )
        {
            bool         bHasNumber = false;
            bool         bIsMenu    = false;
            bool         bIsDialog  = false;
            bool	     bHasString = false;
            DWORD        nIndex = 0;
            CLangElement newElement;

            strRead = _T( "" );

            for ( nIndex = 0; nIndex< strlen( lpszRead ); nIndex++ )
            {
                if (	( lpszRead[ nIndex ] != 0x0A ) &&
                        ( lpszRead[ nIndex ] != 0x0D ) )
                {
                    strRead +=  (TCHAR)lpszRead[ nIndex ];
                }
            }

            TranslateTab( strRead );

            nStart = strRead.Find( _T( '#' ) );

            if ( nStart >= 0 )
            {
                if ( ( nStart + 1 ) == strRead.Find( _T( 'M' ) ) )
                {
                    nStart++;
                    bIsMenu = TRUE;
                }
                else if ( ( nStart + 1 ) == strRead.Find( _T( 'D' ) ) )
                {
                    nStart++;
                    bIsDialog = TRUE;
                }


                nStop = strRead.Find( _T( '#' ), nStart + 1 );

                if ( nStop > 2 )
                {
                    CUString strID ( strRead.Mid( nStart + 1, nStop - nStart -1 ) );
                    swscanf( strID, _W( "%x" ), &newElement.nID );
                    bHasNumber = true;
                }

            }
            else
            {
                if ( strRead.Find( CODEPAGETAG ) == 0 )
                {
                    m_dwCodePageID = _wtoi( strRead.Mid( CODEPAGETAG.GetLength() ) );
                }
                else if ( strRead.Find( LANGTAG ) == 0 )
                {
                    m_dwLangID = _wtoi( strRead.Mid( LANGTAG.GetLength() ) );
                }
                else if ( strRead.Find( SUBLANGTAG ) == 0 )
                {
                    m_dwSubLangID = _wtoi( strRead.Mid( SUBLANGTAG.GetLength() ) );
                }
                else if ( strRead.Find( REVISIONTAG ) == 0 )
                {
                    int nPos;
                    nPos = strRead.Find( _W( ",v " ) );
                    if ( nPos >= 0 )
                    {
                        float fVersion = 1.0f;
                        swscanf( strRead.Mid( nPos+3,4 ), _W( "%f" ), &fVersion );
                        dwRevision =   (DWORD)( 100 * ( fVersion + 0.005 ) );
                    }

                }
            }

            nStart = strRead.Find( '"' );

            if ( nStart >= 0 )
            {
                nStop = strRead.Find( '"', nStart + 1 );

                if ( nStop > 2 )
                {
                    lpszRead[ 0 ] = '\0';

                    for ( nIndex = nStart + 1; nIndex < (DWORD)nStop; nIndex++)
                    {
                        lpszRead[ nIndex - nStart - 1] = (CHAR)strRead.GetAt( nIndex );
                        lpszRead[ nIndex - nStart ] = '\0';
                    }

                    newElement.strValue = CUString( lpszRead, m_dwCodePageID );
                    bHasString = true;
                }
            }

            if ( bHasString && bHasNumber )
            {
                if ( bIsMenu )
                {
                    m_vMenus.push_back( newElement );
                }
                else if ( bIsDialog )
                {
                    m_vDialogs.push_back( newElement );
                }
                else
                {
                    m_vStrings.push_back( newElement );
                }
            }
            memset( lpszRead, 0, sizeof( lpszRead ) );
        }

        fclose( pFile );
    }


#ifdef UNICODE
    TCHAR* pTest = _wsetlocale( LC_ALL, GetString( 99 ) );
#else
    TCHAR* pTest = setlocale( LC_ALL, strCnv.ToT( GetString( 99 ) ) );

#endif
    SetThreadLocale( MAKELCID( m_dwLangID, m_dwSubLangID ) );
    setlocale( LC_NUMERIC, "English" );
}
Exemplo n.º 25
0
int wmain(int argc, wchar_t* argv[])
{
	_wsetlocale(LC_ALL, L"");

	if (argc == 2)
	{
		OCScript::Core osc;

		vector<wstring> rawLines;

		FILE* stream;
		int openError = _wfopen_s(&stream, argv[1], L"r, ccs=UTF-8");
		if (openError == 0 && stream)
		{
			while (feof(stream) == 0)
			{
				wchar_t str[256];
				fgetws(str, sizeof(str), stream);
				if (ferror(stream) != 0)
				{
					fclose(stream);
					wcerr << L"読み込みに失敗しました" << endl;
					return -1;
				}
				rawLines.push_back(str);
			}
			fclose(stream);
		}
		else
		{
			wcerr << L"ファイルオープンに失敗しました" << endl;
			return -1;
		}

		try
		{
			// コマンド登録
			osc.AddCommand(&SampleCommand1::GetInstance());
			osc.AddCommand(&SampleCommand2::GetInstance());

			// スクリプトの読み込み
			osc.LoadScript(rawLines);

			while (!osc.IsEndOfScript())
			{
				// 現在の行を実行
				osc.ExecuteCurrentLine();

				// 更新(描画処理や計算処理などを含む)
				osc.TriggerPreUpdate();
				osc.TriggerUpdate();
			}
		}
		catch (exception ex)
		{
			cerr << ex.what() << endl;
			return -1;
		}
	}
	return 0;
}
Exemplo n.º 26
0
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
	MSG msg;
	WNDCLASSEXW wc;
	HWND hWnd;
	WSADATA wsaData;
	PSECURITY_DESCRIPTOR psd;
	SECURITY_ATTRIBUTES sa;

	_wsetlocale(LC_ALL, L"JPN");

	CreateConfigPath();

	if(ConvertStringSecurityDescriptorToSecurityDescriptorW(krnlobjsddl, SDDL_REVISION_1, &psd, NULL))
	{
		sa.nLength = sizeof(sa);
		sa.lpSecurityDescriptor = psd;
		sa.bInheritHandle = FALSE;

		hMutex = CreateMutexW(&sa, FALSE, mgrmutexname);
		if(hMutex == NULL || GetLastError() == ERROR_ALREADY_EXISTS)
		{
			LocalFree(psd);
			return 0;
		}

		LocalFree(psd);
	}
	else
	{
		return 0;
	}

	WSAStartup(WINSOCK_VERSION, &wsaData);

	ZeroMemory(&ftConfig, sizeof(ftConfig));
	if(IsFileUpdated(pathconfigxml, &ftConfig))
	{
		LoadConfig();
	}

	ZeroMemory(&ftSKKDic, sizeof(ftSKKDic));
	if(IsFileUpdated(pathskkdic, &ftSKKDic))
	{
		MakeSKKDicPos();
	}

	InitLua();

	hInst = hInstance;

	ZeroMemory(&wc, sizeof(wc));
	wc.cbSize = sizeof(wc);
	wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc = WndProc;
	wc.hInstance = hInst;
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wc.lpszClassName = DictionaryManagerClass;
	RegisterClassExW(&wc);

#ifdef _DEBUG
	hWnd = CreateWindowW(DictionaryManagerClass, TextServiceDesc,
		WS_OVERLAPPEDWINDOW, 0, 0, 600, 800, NULL, NULL, hInst, NULL);
#else
	hWnd = CreateWindowW(DictionaryManagerClass, TextServiceDesc,
		WS_POPUP, 0, 0, 0, 0, NULL, NULL, hInst, NULL);
#endif

	if(!hWnd)
	{
		UninitLua();
		WSACleanup();
		return 0;
	}

#ifdef _DEBUG
	ShowWindow(hWnd, SW_MINIMIZE);
#else
	ShowWindow(hWnd, SW_HIDE);
#endif
	UpdateWindow(hWnd);

	while(GetMessageW(&msg, NULL, 0, 0))
	{
		if(!TranslateAcceleratorW(msg.hwnd, NULL, &msg))
		{
			TranslateMessage(&msg);
			DispatchMessageW(&msg);
		}
	}

	UninitLua();
	WSACleanup();

	return (int) msg.wParam;
}
Exemplo n.º 27
0
//---------------------------------------------------------------------------//
void CAddInNCR5976::SetLocale(const WCHAR_T* loc)
{
    Debug::log("CAddInNCR5976::SetLocale");
    _wsetlocale(LC_ALL, loc);
Exemplo n.º 28
0
int wmain (int argc,wchar_t ** argv)
{
	CAppData::stdfunc();
	
	_wsetlocale(LC_CTYPE,L".OCP"); 

	SetRegKey(argc,argv);

	if (!SetLanguageSpecifigHandles(argv[0]))
		return 1;

	CArrayFP<CDatabase*> aDatabases;
	
	WORD wCurrentThread=0;

	aDatabases.Add(CDatabase::FromDefaults(TRUE));
	aDatabases[0]->SetNamePtr(alloccopy(L"DEFAULTX"));
	aDatabases[0]->SetThreadId(wCurrentThread);

    int i,helps=0;
#ifndef WIN32
    if (getenv("TZ")==NULL)
		fprintf(stderr,"Timezone is not set. Database may contain invalid file times.\nFor example type "SET TZ=GMT+1" for central european time.\n");
#endif
    for (i=1;i<argc;i++)
    {
        if (argv[i][0]=='-' || argv[i][0]=='/')
        {
            switch (argv[i][1])
			{
			case L'X':
				if (argv[i][2]==L'\0')
				{
					if (i<argc-1)
						i++; // RegKeyName already set
				}
				break;
			case 'l':
			case 'L':
				if (wcsncmp(aDatabases.GetLast()->GetName(),L"PARAMX",6)!=0 && 
					wcsncmp(aDatabases.GetLast()->GetName(),L"DEFAULTX",8)!=0)
					wprintf(ID2W(IDS_UPDATEDB32CANNOTCHANGELOADED),aDatabases.GetLast()->GetName());
				else if (argv[i][2]=='1')
				{
					aDatabases.GetLast()->AddLocalRoots();
					aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX"));
				}
				else 
				{
					CStringW* pStr;
					if (argv[i][2]==L'\0' && i+1<argc)
						pStr=new CStringW(argv[++i]);
					else
						pStr=new CStringW(argv[i]+2);
					
					if ((*pStr)[0]==L'\"')
						pStr->DelChar(0);
					if (pStr->LastChar()==L'\"')
						pStr->DelLastChar();
					while (pStr->LastChar()==L'\\')
						pStr->DelLastChar();
					
					if (pStr->GetLength()>1)
					{
						pStr->ReplaceChars('/','\\');
						if ((*pStr)[1]==':' && pStr->GetLength()==2)
							aDatabases.GetLast()->AddRoot(pStr->GiveBuffer());
						else if (FileSystem::IsDirectory(*pStr))
							aDatabases.GetLast()->AddRoot(pStr->GiveBuffer());
						else
							fwprintf(stderr,ID2W(IDS_UPDATEDB32DIRECTORYISNOTVALID),(LPCWSTR)*pStr);
					}
					else
						fwprintf(stderr,ID2W(IDS_UPDATEDB32DIRECTORYISNOTVALID),(LPCWSTR)*pStr);
					delete pStr;

					aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX"));
				}
				break;
			case 'e':
				if (wcsncmp(aDatabases.GetLast()->GetName(),L"PARAMX",6)!=0 && 
					wcsncmp(aDatabases.GetLast()->GetName(),L"DEFAULTX",8)!=0)
					wprintf(ID2W(IDS_UPDATEDB32CANNOTCHANGELOADED),aDatabases.GetLast()->GetName());
				else 
				{
					CStringW* pStr;
					if (argv[i][2]=='\0' && i+1<argc)
						pStr=new CStringW(argv[++i]);
					else
						pStr=new CStringW(argv[i]+2);
					
					if ((*pStr)[0]==L'\"')
						pStr->DelChar(0);
					if (pStr->LastChar()==L'\"')
						pStr->DelLastChar();
					while (pStr->LastChar()==L'\\')
						pStr->DelLastChar();
					
					if (pStr->GetLength()>0)
						aDatabases.GetLast()->SetExcludedFiles(*pStr);

					aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX"));
				}
				break;
			case 'E':
				if (wcsncmp(aDatabases.GetLast()->GetName(),L"PARAMX",6)!=0 && 
					wcsncmp(aDatabases.GetLast()->GetName(),L"DEFAULTX",8)!=0)
					wprintf(ID2W(IDS_UPDATEDB32CANNOTCHANGELOADED),aDatabases.GetLast()->GetName());
				else 
				{
					CStringW* pStr;
					if (argv[i][2]=='\0' && i+1<argc)
						pStr=new CStringW(argv[++i]);
					else
						pStr=new CStringW(argv[i]+2);
					
					if ((*pStr)[0]==L'\"')
						pStr->DelChar(0);
					if (pStr->LastChar()==L'\"')
						pStr->DelLastChar();
					while (pStr->LastChar()==L'\\')
						pStr->DelLastChar();
					
					if (pStr->GetLength()>1)
					{
						pStr->ReplaceChars('/','\\');
						if (!aDatabases.GetLast()->AddExcludedDirectory(*pStr))
							fwprintf(stderr,ID2W(IDS_UPDATEDB32DIRECTORYISNOTVALID),(LPCWSTR)*pStr);
					}
					else
						fwprintf(stderr,ID2W(IDS_UPDATEDB32DIRECTORYISNOTVALID),(LPCWSTR)*pStr);
					delete pStr;

					aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX"));
				}
				break;
			case 't':
			case 'T':
				if (wcsncmp(aDatabases.GetLast()->GetName(),L"PARAMX",6)!=0 &&
					wcsncmp(aDatabases.GetLast()->GetName(),L"DEFAULTX",8)!=0)
					wprintf(ID2W(IDS_UPDATEDB32CANNOTCHANGELOADED),aDatabases.GetLast()->GetName());
				else if (argv[i][2]==L'c' || argv[i][2]==L'C')
				{
                       if (argv[i][3]==L'\0')
                           aDatabases.GetLast()->SetCreatorPtr(alloccopy(argv[++i]));
                       else
                           aDatabases.GetLast()->SetCreatorPtr(alloccopy(argv[i]+2));

					   aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX"));
				}
				else if (argv[i][2]==L'd' || argv[i][2]==L'D')
				{
                       if (argv[i][3]==L'\0')
                           aDatabases.GetLast()->SetDescriptionPtr(alloccopy(argv[++i]));
                       else
                           aDatabases.GetLast()->SetDescriptionPtr(alloccopy(argv[i]+2));

					   aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX"));
				}
				break;
			case 'i':
			case 'I':
				if (wcsncmp(aDatabases.GetLast()->GetName(),L"PARAMX",6)!=0 &&
					wcsncmp(aDatabases.GetLast()->GetName(),L"DEFAULTX",8)!=0)
					wprintf(ID2W(IDS_UPDATEDB32CANNOTCHANGELOADED),aDatabases.GetLast()->GetName());
				else
				{
                    aDatabases.GetLast()->SetFlag(CDatabase::flagIncrementalUpdate,TRUE);
					aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX"));
				}
				break;
			case 'c':
			case 'C':
				if (wcsncmp(aDatabases.GetLast()->GetName(),L"PARAMX",6)!=0 &&
					wcsncmp(aDatabases.GetLast()->GetName(),L"DEFAULTX",8)!=0)
					wprintf(ID2W(IDS_UPDATEDB32CANNOTCHANGELOADED),aDatabases.GetLast()->GetName());
				else if (argv[i][2]==L'A' || argv[i][2]==L'a')
				{
					aDatabases.GetLast()->SetFlag(CDatabase::flagAnsiCharset,TRUE);
					aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX"));
				}
				else if (argv[i][2]==L'U' || argv[i][2]==L'u')
				{
					aDatabases.GetLast()->SetFlag(CDatabase::flagAnsiCharset,FALSE);
					aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX"));
				}
				
				break;
			case 'N':
			case 'n':
				wCurrentThread++;
				break;
			case 'q':
			case 'Q':
				nQuiet=TRUE;
				break;
			case 'v':
			case 'V':
				printf("%s\n",szVersionStr);
				return 0;
			case 'd':
				{
					// Using database file
					CStringW sFile;
					if (argv[i][2]=='\0')
						sFile=argv[++i];
					else
						sFile=(argv[i]+2);
					sFile.ReplaceChars('/','\\');
					if (aDatabases.GetSize()==1 && wcscmp(aDatabases[0]->GetName(),L"DEFAULTX")==0)
					{
						aDatabases[0]->SetNamePtr(alloccopy(L"PARAMX"));
						aDatabases[0]->SetArchiveNamePtr(sFile.GiveBuffer());
					}
					else 
					{
						CDatabase* pDatabase=CDatabase::FromFile(sFile,(int)sFile.GetLength());
						if (pDatabase!=NULL)
						{
                            aDatabases.Add(pDatabase);
							pDatabase->SetNamePtr(alloccopy(L"PARAMX"));
							pDatabase->SetThreadId(wCurrentThread);
						}
					}
					

			
				}
				break;
			case 'D':
				{
					// Loading database 'name' from registry, cannot be changed 
					CStringW sName;
					if (argv[i][2]=='\0')
						sName=argv[++i];
					else
						sName=(argv[i]+2);

					if (CDatabase::FindByName(aDatabases,sName,(int)sName.GetLength())==NULL)
					{
						CDatabase* pDatabase=CDatabase::FromName(HKCU,
							CString(g_szRegKey)+"\\Databases",sName);

						if (pDatabase!=NULL)
						{
							pDatabase->SetFlag(CDatabase::flagGlobalUpdate);
							// Is only default loaded
							if (aDatabases.GetSize()==1 && wcscmp(aDatabases[0]->GetName(),L"DEFAULTX")==0)
							{
								delete aDatabases[0];
								aDatabases[0]=pDatabase;
							}
							else
							{
								aDatabases.Add(pDatabase);
								pDatabase->SetThreadId(wCurrentThread);
							}
						}
					}
				}
				break;
			case 'h':
			case 'H':
			case '?':
				helps=1;
				break;
			default:
				helps=1;
				break;
			}
       }
    }
    if (helps==1)
    {
#ifdef WIN32
		fprintf(stdout,"%s\n",szVersionStr);
#else
        fprintf(stdout,"%s\nusage updatedb",szVersionStr);
#endif

		HRSRC hRc=FindResource(GetLanguageSpecificResourceHandle(),MAKEINTRESOURCE(IDR_UPDATEDBHELP),"HELPTEXT");
		HGLOBAL hGlobal=LoadResource(GetLanguageSpecificResourceHandle(),hRc);
		LPCSTR pStr=(LPCSTR)LockResource(hGlobal);

		// Counting length
		int len;
		for (len=0;pStr[len]!='\0';len++)
		{
			if (pStr[len]=='E' && pStr[len+1]=='O' && pStr[len+2]=='F')
				break;
		}


		fwrite(pStr,1,len,stdout);
		
		FreeLibrary(GetLanguageSpecificResourceHandle());
		return 1;
    }

	// Checking databases
	// First, check that there is database 
	if (aDatabases.GetSize()==0)
		CDatabase::LoadFromRegistry(HKCU,CString(g_szRegKey)+"\\Databases",aDatabases);   
	else if (aDatabases.GetSize()==1 && wcsncmp(aDatabases[0]->GetName(),L"DEFAULTX",8)==0)
	{
		aDatabases.RemoveAll();
		CDatabase::LoadFromRegistry(HKCU,CString(g_szRegKey)+"\\Databases",aDatabases);   

		// No registry values?
		if (aDatabases.GetSize()==0)
		{
			aDatabases.Add(CDatabase::FromDefaults(TRUE));
			aDatabases[0]->SetNamePtr(alloccopy(L"DEFAULTX"));
		}
	}
		
		
	CDatabase::CheckValidNames(aDatabases);
	CDatabase::CheckDoubleNames(aDatabases);
	
	
	for (int i=0;i<aDatabases.GetSize();)
	{
		if (!aDatabases[i]->IsGloballyUpdated())
			aDatabases.RemoveAt(i);
		else 
		{
			if ((wcsncmp(aDatabases[i]->GetName(),L"PARAMX",6)==0 ||
				wcsncmp(aDatabases[i]->GetName(),L"DEFAULTX",8)==0))
			{
				BOOL bNameChanged=FALSE;
				if (aDatabases[i]->GetRoots()==0)
				{
					BOOL bFree;
					LPWSTR pFile=aDatabases[i]->GetResolvedArchiveName(bFree);
					CDatabaseInfo* pDatabaseInfo=CDatabaseInfo::GetFromFile(pFile);
					if (bFree)
						delete[] pFile;
					if (pDatabaseInfo!=NULL)
					{
						CDatabase* pDatabase;
						if (!pDatabaseInfo->sExtra2.IsEmpty())
							pDatabase=CDatabase::FromExtraBlock(pDatabaseInfo->sExtra2);
						if (pDatabase==NULL && !pDatabaseInfo->sExtra1.IsEmpty())
							pDatabase=CDatabase::FromExtraBlock(pDatabaseInfo->sExtra1);
						
						wprintf(ID2W(IDS_UPDATEDB32USINGEXISTINGSETTINGS),
							aDatabases[i]->GetArchiveName(),pDatabase->GetName());
						
						pDatabase->SetArchiveType(aDatabases[i]->GetArchiveType());
						pDatabase->SetArchiveName(aDatabases[i]->GetArchiveName());
						
						delete aDatabases[i];
						aDatabases[i]=pDatabase;

						delete pDatabaseInfo;
						bNameChanged=TRUE;
					}
				}

				if (!bNameChanged)
				{
					ULONG_PTR nFirst=LastCharIndex(aDatabases[i]->GetArchiveName(),L'\\')+1;
					int nLength=LastCharIndex(aDatabases[i]->GetArchiveName()+nFirst,L'.');
					if (nLength==-1)
						nLength=istrlenw(aDatabases[i]->GetArchiveName()+nFirst);

					

					aDatabases[i]->SetNamePtr(alloccopy(aDatabases[i]->GetArchiveName()+nFirst,nLength));
				}
			}

			
			i++;
		}
	}

	// Starting to update
	WORD dwTheads=CDatabase::CheckIDs(aDatabases);
    if (dwTheads==0)
	{
		FreeLibrary(GetLanguageSpecificResourceHandle());
		return FALSE;
	}
	if (dwTheads==1)
	{
		CDatabaseUpdater Updater(aDatabases,aDatabases.GetSize(),UpdateProc);
		Updater.Update(FALSE);
	}
	else
	{
		WORD wThread;

		ppUpdaters=new CDatabaseUpdater*[dwTheads+1];

		for (wThread=0;wThread<dwTheads;wThread++)
		{
			ppUpdaters[wThread]=new CDatabaseUpdater(aDatabases,aDatabases.GetSize(),							
				UpdateProc,wThread,(DWORD)0);
		}
		ppUpdaters[dwTheads]=NULL;

		// Starting
		DWORD dwRunning=0;
		UpdateError ueCode;
		for (wThread=0;wThread<dwTheads;wThread++)
		{
			ueCode=ppUpdaters[wThread]->Update(TRUE);
			if (ueCode==ueSuccess)
				dwRunning++;
			else
			{
				delete ppUpdaters[wThread];
				ppUpdaters[wThread]=UPDATER_EXITED(ueCode);
			}
		}
		
		if (dwRunning==0)
			delete ppUpdaters;
		else
		{
			while (ppUpdaters!=NULL)
				Sleep(100);
		}
	}

	FinishRegKey();

	FreeLibrary(GetLanguageSpecificResourceHandle());

	return 1;
}
Exemplo n.º 29
0
bool create_bob_txt()
{
	// current directory 를 구한다.
	wchar_t *buf = NULL;
	uint32_t buflen = 0;

	buflen = GetCurrentDirectoryW(buflen, buf);
	if (0 == buflen) {
		print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		return false;
	}

	buf = (PWSTR)malloc(sizeof(WCHAR) * buflen);

	if (0 == GetCurrentDirectoryW(buflen, buf)) {
		print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError());
		free(buf);
		return false;
	}

	wchar_t file_name[260];           // bob1에서 생성한 파일을 읽을 준비.
	if (!SUCCEEDED(StringCbPrintfW(
		file_name,
		sizeof(file_name),
		L"%ws\\bob2.txt", buf)))   {
		print("err, can not create file name");
		free(buf);
		return false;
	}

	free(buf); buf = NULL;

	HANDLE file_handle = CreateFileW( // 메모리에 매핑할 파일의 핸들을 얻는다. 실패 시 INVALID_HANDLE_VALUE를 반환
		(LPCWSTR)file_name,
		GENERIC_READ,
		NULL,
		NULL,
		OPEN_EXISTING, //기존 파일
		FILE_ATTRIBUTE_NORMAL,
		NULL
		);

	if (INVALID_HANDLE_VALUE == file_handle) {
		print("err, CreateFile(%ws) failed, gle = %u", file_name, GetLastError());
		return false;
	}

	LARGE_INTEGER fileSize;
	if (TRUE != GetFileSizeEx(file_handle, &fileSize)) { // 매핑할 파일의 전체 크기를 구한다.
		print("err, GetFileSizeEx(%ws) failed, gle = %u", file_name, GetLastError());
		CloseHandle(file_handle);
		return false;
	}
	_ASSERTE(fileSize.HighPart == 0); // 식을 계산하고 결과가 false 일때, 진단 메시지를 출력하고 프로그램을 중단
	/*
	assert 매크로는 일반적으로 프로그램이 올바르게 작동하지 않을때 false 로 계산하기 위해 expression 인수를 구현함으로써
	프로그램을 개발하는 동안 논리적인 오류들을 식별하기 위해 사용된다.
	디버깅이 완전히 끝나면, NDEBUG 식별자를 정의하여 소스 파일을 수정하지 않고 어썰션 검사를 끌 수 있다.
	*/
	if (fileSize.HighPart > 0) {
		print("file size = %I64d (over 4GB) can not handle. use FileIoHelperClass",
			fileSize.QuadPart);
		CloseHandle(file_handle);
		return false;
	}

	DWORD file_size = (DWORD)fileSize.QuadPart;
	/*
	앞서 CreateFile()을 호출한 이유는 파일 매핑을 수행할 파일의 물리 저장소를 운영체제에게 알려주기 위해.
	매핑할 파일을 대상으로 파일 매핑 오브젝트를 생성한다.
	지정 파일을 파일 매핑 오브젝트와 연결하며, => reserve
	파일 매핑 오브젝트를 위한 충분한 물리 저장소가 존재한다는 것을 확인시키는 작업.
	실패시 NULL 반환
	*/
	HANDLE file_map = CreateFileMapping(
		file_handle,
		NULL,
		PAGE_READONLY,
		0,
		0,
		NULL
		);
	if (NULL == file_map) {
		print("err, CreateFileMapping(%ws) failed, gle = %u", file_name, GetLastError());
		CloseHandle(file_handle);
		return false;
	}

	// PCHAR : A pointer to a CHAR. This type is declared in WinNT.h as follows : typedef CHAR *PCHAR
	PCHAR file_view = (PCHAR)MapViewOfFile(
		file_map,
		FILE_MAP_READ,
		0,
		0,
		0
		);

	if (file_view == NULL) {
		print("err, MapViewOfFile(%ws) failed, gle = %u", file_name, GetLastError());

		CloseHandle(file_map);
		CloseHandle(file_handle);
		return false;
	}

	// UTF-8 -> UTF-16(UCS-2 지원)
	wchar_t *convchar5 = Utf8MbsToWcs(file_view);
	_wsetlocale(LC_ALL, L"korean");
	wprintf(L"%s\n", convchar5); // 뷰로부터 읽은 데이터를 콘솔에 출력.

	UnmapViewOfFile(file_view); // 프로세스의 주소 공간 내의 특정 영역에 매핑된 데이터 파일을 더 이상 유지하지 않음. 뷰를 해제.
	CloseHandle(file_map);
	CloseHandle(file_handle);

	return true;
}
Exemplo n.º 30
0
LONG CED6AsDecompiler::DumpToFile(ED6_ACTION_SCRIPT_INFO *pAsInfo, LPWSTR pszAsFile, LPWSTR pszOutput)
{
    LONG        Status;
    CHAR        Buffer[0x400];
    CFileDisk   file;

    Status = CreateDefinition(pszAsFile, Buffer);
    AS_IF_FAIL_RETURN(Status);

    Status = ASDECL_ERROR_UNKNOWN;
    LOOP_ONCE
    {
        if (!file.Create(pszOutput))
            AS_BREAK(Status, ASDECL_ERROR_CREATE_FILE);

        _wsetlocale(LC_CTYPE, L"");
        WriteScr(
            "@_FILE \"debug_%S\"\n"
            "@_INCLUDE \"%s\"\n"
            "\n",
            findnamew(pszAsFile), NAME_DEFINITION_FILE);

        WriteScr(
            "@%s %d\n"
            "\n",
            NAME_HEADER_UNKNOWN,
            pAsInfo->Unknown);

        WriteScr(
            "(%s:s)\n"
            "(%s:s)\n"
            "(%s:s)\n"
            "\n",
            LABEL_CRAFT_OFFSET_TABLE,
            LABEL_CRAFT_OFFSET_TABLE_END,
            NAME_HEADER_UNKNOWN);

        WriteScr("; Char chip pattern info  CH_Index, CH_DAT_Index, CP_Index, CP_DAT_Index\n");

        CHAR_CHIP_PATTERN_INFO *pChipPtn = pAsInfo->pChrChipPtnInfo;
        for (ULONG Index = 0, Count = pAsInfo->ChrChipPtnCount; Count; ++Index, --Count)
        {
            WriteScr(
                " (0x%04X:s, 0x%04X:s, 0x%04X:s, 0x%04X:s)",
                pChipPtn->CHIndex,
                pChipPtn->CHDatIndex,
                pChipPtn->CPIndex,
                pChipPtn->CPDatIndex);
            ++pChipPtn;

            if (Index & 1)
                WriteScr("\n");
        }
        WriteScr("\n[FF FF FF FF]\n\n");

        WriteScr("; 3d model file\n");

        for (LPSTR pszX3FileName = pAsInfo->pszXFileName; ; )
        {
            LPSTR pString;
            ULONG Length;

            Length  = StrLengthA(pszX3FileName) + 1;
            pString = *pszX3FileName == 0 ? NULL : AllocString(pszX3FileName, Length);
            WriteScr("\"%s\"\n", pString == NULL ? pszX3FileName : pString);
            FreeString(pString);

            if (*pszX3FileName == 0)
            {
                if (pszX3FileName != pAsInfo->pszXFileName)
                    WriteScr("[%02X %02X]\n", pszX3FileName[1], pszX3FileName[2]);
                break;
            }

            pszX3FileName += Length;
        }

        WriteScr("\n#%s\n", LABEL_CRAFT_OFFSET_TABLE);

        ED6_AS_CRAFT_INFO *pCraft;
        ED6_INSTRUCTION   *pInstruction;

        pCraft = pAsInfo->pCraftInfo;
        for (ULONG Index = 0, Count = pAsInfo->CraftCount; Count; ++pCraft, ++Index, --Count)
        {
            ULONG TrueIndex;

            if (pCraft->Offset == ED6_INVALID_OFFSET)
            {
                PBYTE p = (PBYTE)&pCraft->Offset;

                WriteScr("[%02X", *p++);
                for (ULONG Len = sizeof(ED6_INVALID_OFFSET) - 1; Len; --Len)
                    WriteScr(" %02X", *p++);
                WriteScr("]\n");

                continue;
            }

            pInstruction = UnlinkInstruction(pCraft->pInstruction);
            if (pInstruction == NULL)
                continue;

            TrueIndex = Index;
            for (ULONG i = 0; i != Index; ++i)
            {
                if (pInstruction->Offset == pAsInfo->pCraftInfo[i].Offset)
                {
                    TrueIndex = i;
                    break;
                }
            }

            GetCraftName(pAsInfo, TrueIndex, Buffer);
            WriteScr(" (%s:s)", Buffer);

            if (Index >=countof(g_szIntrinsicCraft) && (Index + 1 - countof(g_szIntrinsicCraft)) % 5 != 0)
                continue;

            WriteScr("\n");
        }
        WriteScr("\n#%s\n\n", LABEL_CRAFT_OFFSET_TABLE_END);

        PBYTE pbFlags = pAsInfo->pbAsBuffer + pAsInfo->CraftOffsetTableEndOffset;
        WriteScr(
            "[%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X]\n\n",
            pbFlags[0], pbFlags[1], pbFlags[2], pbFlags[3], pbFlags[4],
            pbFlags[5], pbFlags[6], pbFlags[7], pbFlags[8], pbFlags[9],
            pbFlags[10], pbFlags[11], pbFlags[12], pbFlags[13], pbFlags[14],
            pbFlags[15], pbFlags[16]);

        Status = DumpCrafts(pAsInfo, file, Buffer);
        AS_IF_FAIL_BREAK(Status);

        Status = DumpFunctions(pAsInfo, file, Buffer);
    }

    return Status;
}