#include "COSOperator.h"\r
\r
#ifdef _IRR_WINDOWS_API_\r
-#ifndef _IRR_XBOX_PLATFORM_\r
#include <windows.h>\r
-#endif\r
#else\r
#include <string.h>\r
#include <unistd.h>\r
\r
\r
//! copies text to the clipboard\r
-void COSOperator::copyToClipboard(const c8* text) const\r
+//! \param text: text in utf-8\r
+void COSOperator::copyToClipboard(const c8 *text) const\r
{\r
if (strlen(text)==0)\r
return;\r
\r
// Windows version\r
-#if defined(_IRR_XBOX_PLATFORM_)\r
-#elif defined(_IRR_WINDOWS_API_)\r
+#if defined(_IRR_WINDOWS_API_)\r
if (!OpenClipboard(NULL) || text == 0)\r
return;\r
\r
EmptyClipboard();\r
\r
+ core::stringw tempbuffer;\r
+ core::multibyteToWString(tempbuffer, text);\r
+ const u32 size = (tempbuffer.size() + 1) * sizeof(wchar_t);\r
+\r
HGLOBAL clipbuffer;\r
- char * buffer;\r
+ void * buffer;\r
\r
- clipbuffer = GlobalAlloc(GMEM_DDESHARE, strlen(text)+1);\r
- buffer = (char*)GlobalLock(clipbuffer);\r
+ clipbuffer = GlobalAlloc(GMEM_MOVEABLE, size);\r
+ buffer = GlobalLock(clipbuffer);\r
\r
- strcpy(buffer, text);\r
+ memcpy(buffer, tempbuffer.c_str(), size);\r
\r
GlobalUnlock(clipbuffer);\r
- SetClipboardData(CF_TEXT, clipbuffer);\r
+ SetClipboardData(CF_UNICODETEXT, clipbuffer);\r
CloseClipboard();\r
\r
#elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)\r
\r
if ((text != NULL) && (strlen(text) > 0))\r
{\r
- str = [NSString stringWithCString:text encoding:NSWindowsCP1252StringEncoding];\r
+ str = [NSString stringWithCString:text encoding:NSUTF8StringEncoding];\r
board = [NSPasteboard generalPasteboard];\r
[board declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:NSApp];\r
[board setString:str forType:NSStringPboardType];\r
#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
if ( IrrDeviceLinux )\r
IrrDeviceLinux->copyToClipboard(text);\r
-#else\r
-\r
#endif\r
}\r
\r
\r
//! gets text from the clipboard\r
-//! \return Returns 0 if no string is in there.\r
+//! \return Returns 0 if no string is in there, otherwise an utf-8 string.\r
const c8* COSOperator::getTextFromClipboard() const\r
{\r
-#if defined(_IRR_XBOX_PLATFORM_)\r
- return 0;\r
-#elif defined(_IRR_WINDOWS_API_)\r
+#if defined(_IRR_WINDOWS_API_)\r
if (!OpenClipboard(NULL))\r
return 0;\r
\r
- char * buffer = 0;\r
+ wchar_t * buffer = 0;\r
+\r
+ HANDLE hData = GetClipboardData( CF_UNICODETEXT );\r
+ buffer = (wchar_t*) GlobalLock( hData );\r
+\r
+ core::wStringToMultibyte(ClipboardBuf, buffer);\r
\r
- HANDLE hData = GetClipboardData( CF_TEXT );\r
- buffer = (char*)GlobalLock( hData );\r
GlobalUnlock( hData );\r
CloseClipboard();\r
- return buffer;\r
+\r
+ return ClipboardBuf.c_str();\r
\r
#elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)\r
NSString* str = nil;\r
str = [board stringForType:NSStringPboardType];\r
\r
if (str != nil)\r
- result = (char*)[str cStringUsingEncoding:NSWindowsCP1252StringEncoding];\r
+ result = (char*)[str cStringUsingEncoding:NSUTF8StringEncoding];\r
\r
return (result);\r
\r
}\r
\r
\r
-bool COSOperator::getProcessorSpeedMHz(u32* MHz) const\r
-{\r
- if (MHz)\r
- *MHz=0;\r
-#if defined(_IRR_WINDOWS_API_) && !defined(_WIN32_WCE ) && !defined (_IRR_XBOX_PLATFORM_)\r
- LONG Error;\r
-\r
- HKEY Key;\r
- Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,\r
- __TEXT("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"),\r
- 0, KEY_READ, &Key);\r
-\r
- if(Error != ERROR_SUCCESS)\r
- return false;\r
-\r
- DWORD Speed = 0;\r
- DWORD Size = sizeof(Speed);\r
- Error = RegQueryValueEx(Key, __TEXT("~MHz"), NULL, NULL, (LPBYTE)&Speed, &Size);\r
-\r
- RegCloseKey(Key);\r
-\r
- if (Error != ERROR_SUCCESS)\r
- return false;\r
- else if (MHz)\r
- *MHz = Speed;\r
- return true;\r
-\r
-#elif defined(_IRR_OSX_PLATFORM_)\r
- struct clockinfo CpuClock;\r
- size_t Size = sizeof(clockinfo);\r
-\r
- if (!sysctlbyname("kern.clockrate", &CpuClock, &Size, NULL, 0))\r
- return false;\r
- else if (MHz)\r
- *MHz = CpuClock.hz;\r
- return true;\r
-#else\r
- // read from "/proc/cpuinfo"\r
- FILE* file = fopen("/proc/cpuinfo", "r");\r
- if (file)\r
- {\r
- char buffer[1024];\r
- fread(buffer, 1, 1024, file);\r
- buffer[1023]=0;\r
- core::stringc str(buffer);\r
- s32 pos = str.find("cpu MHz");\r
- if (pos != -1)\r
- {\r
- pos = str.findNext(':', pos);\r
- if (pos != -1)\r
- {\r
- while ( str[++pos] == ' ' );\r
- *MHz = core::fast_atof(str.c_str()+pos);\r
- }\r
- }\r
- fclose(file);\r
- }\r
- return (MHz && *MHz != 0);\r
-#endif\r
-}\r
-\r
bool COSOperator::getSystemMemory(u32* Total, u32* Avail) const\r
{\r
-#if defined(_IRR_WINDOWS_API_) && !defined (_IRR_XBOX_PLATFORM_)\r
+#if defined(_IRR_WINDOWS_API_)\r
\r
- #if (_WIN32_WINNT >= 0x0500)\r
MEMORYSTATUSEX MemoryStatusEx;\r
MemoryStatusEx.dwLength = sizeof(MEMORYSTATUSEX);\r
\r
if (Avail)\r
*Avail = (u32)(MemoryStatusEx.ullAvailPhys>>10);\r
return true;\r
- #else\r
- MEMORYSTATUS MemoryStatus;\r
- MemoryStatus.dwLength = sizeof(MEMORYSTATUS);\r
-\r
- // cannot fail\r
- GlobalMemoryStatus(&MemoryStatus);\r
-\r
- if (Total)\r
- *Total = (u32)(MemoryStatus.dwTotalPhys>>10);\r
- if (Avail)\r
- *Avail = (u32)(MemoryStatus.dwAvailPhys>>10);\r
- return true;\r
- #endif\r
\r
#elif defined(_IRR_POSIX_API_) && !defined(__FreeBSD__)\r
#if defined(_SC_PHYS_PAGES) && defined(_SC_AVPHYS_PAGES)\r