1 // Copyright (C) 2002-2012 Nikolaus Gebhardt
\r
2 // This file is part of the "Irrlicht Engine".
\r
3 // For conditions of distribution and use, see copyright notice in irrlicht.h
\r
5 #include "COSOperator.h"
\r
7 #ifdef _IRR_WINDOWS_API_
\r
8 #ifndef _IRR_XBOX_PLATFORM_
\r
14 #ifndef _IRR_ANDROID_PLATFORM_
\r
15 #include <sys/types.h>
\r
16 #ifdef _IRR_OSX_PLATFORM_
\r
17 #include <sys/sysctl.h>
\r
22 #if defined(_IRR_COMPILE_WITH_X11_DEVICE_)
\r
23 #include "CIrrDeviceLinux.h"
\r
25 #if defined(_IRR_COMPILE_WITH_OSX_DEVICE_)
\r
26 #import <Cocoa/Cocoa.h>
\r
29 #include "fast_atof.h"
\r
34 #if defined(_IRR_COMPILE_WITH_X11_DEVICE_)
\r
35 // constructor linux
\r
36 COSOperator::COSOperator(const core::stringc& osVersion, CIrrDeviceLinux* device)
\r
37 : OperatingSystem(osVersion), IrrDeviceLinux(device)
\r
43 COSOperator::COSOperator(const core::stringc& osVersion) : OperatingSystem(osVersion)
\r
46 setDebugName("COSOperator");
\r
51 //! returns the current operating system version as string.
\r
52 const core::stringc& COSOperator::getOperatingSystemVersion() const
\r
54 return OperatingSystem;
\r
58 //! copies text to the clipboard
\r
59 //! \param text: text in utf-8
\r
60 void COSOperator::copyToClipboard(const c8 *text) const
\r
62 if (strlen(text)==0)
\r
66 #if defined(_IRR_XBOX_PLATFORM_)
\r
67 #elif defined(_IRR_WINDOWS_API_)
\r
68 if (!OpenClipboard(NULL) || text == 0)
\r
73 core::stringw tempbuffer;
\r
74 core::multibyteToWString(tempbuffer, text);
\r
75 const u32 size = (tempbuffer.size() + 1) * sizeof(wchar_t);
\r
80 clipbuffer = GlobalAlloc(GMEM_MOVEABLE, size);
\r
81 buffer = GlobalLock(clipbuffer);
\r
83 memcpy(buffer, tempbuffer.c_str(), size);
\r
85 GlobalUnlock(clipbuffer);
\r
86 SetClipboardData(CF_UNICODETEXT, clipbuffer);
\r
89 #elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)
\r
90 NSString *str = nil;
\r
91 NSPasteboard *board = nil;
\r
93 if ((text != NULL) && (strlen(text) > 0))
\r
95 str = [NSString stringWithCString:text encoding:NSUTF8StringEncoding];
\r
96 board = [NSPasteboard generalPasteboard];
\r
97 [board declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:NSApp];
\r
98 [board setString:str forType:NSStringPboardType];
\r
101 #elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)
\r
102 if ( IrrDeviceLinux )
\r
103 IrrDeviceLinux->copyToClipboard(text);
\r
110 //! gets text from the clipboard
\r
111 //! \return Returns 0 if no string is in there, otherwise an utf-8 string.
\r
112 const c8* COSOperator::getTextFromClipboard() const
\r
114 #if defined(_IRR_XBOX_PLATFORM_)
\r
116 #elif defined(_IRR_WINDOWS_API_)
\r
117 if (!OpenClipboard(NULL))
\r
120 wchar_t * buffer = 0;
\r
122 HANDLE hData = GetClipboardData( CF_UNICODETEXT );
\r
123 buffer = (wchar_t*) GlobalLock( hData );
\r
125 core::wStringToMultibyte(ClipboardBuf, buffer);
\r
127 GlobalUnlock( hData );
\r
130 return ClipboardBuf.c_str();
\r
132 #elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)
\r
133 NSString* str = nil;
\r
134 NSPasteboard* board = nil;
\r
137 board = [NSPasteboard generalPasteboard];
\r
138 str = [board stringForType:NSStringPboardType];
\r
141 result = (char*)[str cStringUsingEncoding:NSUTF8StringEncoding];
\r
145 #elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)
\r
146 if ( IrrDeviceLinux )
\r
147 return IrrDeviceLinux->getTextFromClipboard();
\r
157 bool COSOperator::getSystemMemory(u32* Total, u32* Avail) const
\r
159 #if defined(_IRR_WINDOWS_API_) && !defined (_IRR_XBOX_PLATFORM_)
\r
161 MEMORYSTATUSEX MemoryStatusEx;
\r
162 MemoryStatusEx.dwLength = sizeof(MEMORYSTATUSEX);
\r
165 GlobalMemoryStatusEx(&MemoryStatusEx);
\r
168 *Total = (u32)(MemoryStatusEx.ullTotalPhys>>10);
\r
170 *Avail = (u32)(MemoryStatusEx.ullAvailPhys>>10);
\r
173 #elif defined(_IRR_POSIX_API_) && !defined(__FreeBSD__)
\r
174 #if defined(_SC_PHYS_PAGES) && defined(_SC_AVPHYS_PAGES)
\r
175 long ps = sysconf(_SC_PAGESIZE);
\r
176 long pp = sysconf(_SC_PHYS_PAGES);
\r
177 long ap = sysconf(_SC_AVPHYS_PAGES);
\r
179 if ((ps==-1)||(pp==-1)||(ap==-1))
\r
183 *Total = (u32)((ps*(long long)pp)>>10);
\r
185 *Avail = (u32)((ps*(long long)ap)>>10);
\r
188 // TODO: implement for non-availability of symbols/features
\r
191 #elif defined(_IRR_OSX_PLATFORM_)
\r
193 int64_t physical_memory;
\r
196 // Get the Physical memory size
\r
198 mib[1] = HW_MEMSIZE;
\r
199 length = sizeof(int64_t);
\r
200 sysctl(mib, 2, &physical_memory, &length, NULL, 0);
\r
203 // TODO: implement for others
\r