]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/COSOperator.cpp
7824e677f1395489204fc89b278222b4f7692682
[irrlicht.git] / source / Irrlicht / COSOperator.cpp
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
4 \r
5 #include "COSOperator.h"\r
6 \r
7 #ifdef _IRR_WINDOWS_API_\r
8 #ifndef _IRR_XBOX_PLATFORM_\r
9 #include <windows.h>\r
10 #endif\r
11 #else\r
12 #include <string.h>\r
13 #include <unistd.h>\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
18 #endif\r
19 #endif\r
20 #endif\r
21 \r
22 #if defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
23 #include "CIrrDeviceLinux.h"\r
24 #endif\r
25 #if defined(_IRR_COMPILE_WITH_OSX_DEVICE_)\r
26 #import <Cocoa/Cocoa.h>\r
27 #endif\r
28 \r
29 #include "fast_atof.h"\r
30 \r
31 namespace irr\r
32 {\r
33 \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
38 {\r
39 }\r
40 #endif\r
41 \r
42 // constructor\r
43 COSOperator::COSOperator(const core::stringc& osVersion) : OperatingSystem(osVersion)\r
44 {\r
45         #ifdef _DEBUG\r
46         setDebugName("COSOperator");\r
47         #endif\r
48 }\r
49 \r
50 \r
51 //! returns the current operating system version as string.\r
52 const core::stringc& COSOperator::getOperatingSystemVersion() const\r
53 {\r
54         return OperatingSystem;\r
55 }\r
56 \r
57 \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
61 {\r
62         if (strlen(text)==0)\r
63                 return;\r
64 \r
65 // Windows version\r
66 #if defined(_IRR_XBOX_PLATFORM_)\r
67 #elif defined(_IRR_WINDOWS_API_)\r
68         if (!OpenClipboard(NULL) || text == 0)\r
69                 return;\r
70 \r
71         EmptyClipboard();\r
72 \r
73         core::stringw tempbuffer;\r
74         core::multibyteToWString(tempbuffer, text);\r
75         const u32 size = (tempbuffer.size() + 1) * sizeof(wchar_t);\r
76 \r
77         HGLOBAL clipbuffer;\r
78         void * buffer;\r
79 \r
80         clipbuffer = GlobalAlloc(GMEM_MOVEABLE, size);\r
81         buffer = GlobalLock(clipbuffer);\r
82 \r
83         memcpy(buffer, tempbuffer.c_str(), size);\r
84 \r
85         GlobalUnlock(clipbuffer);\r
86         SetClipboardData(CF_UNICODETEXT, clipbuffer);\r
87         CloseClipboard();\r
88 \r
89 #elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)\r
90     NSString *str = nil;\r
91     NSPasteboard *board = nil;\r
92 \r
93     if ((text != NULL) && (strlen(text) > 0))\r
94     {\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
99     }\r
100 \r
101 #elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
102     if ( IrrDeviceLinux )\r
103         IrrDeviceLinux->copyToClipboard(text);\r
104 #else\r
105 \r
106 #endif\r
107 }\r
108 \r
109 \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
113 {\r
114 #if defined(_IRR_XBOX_PLATFORM_)\r
115                 return 0;\r
116 #elif defined(_IRR_WINDOWS_API_)\r
117         if (!OpenClipboard(NULL))\r
118                 return 0;\r
119 \r
120         wchar_t * buffer = 0;\r
121 \r
122         HANDLE hData = GetClipboardData( CF_UNICODETEXT );\r
123         buffer = (wchar_t*) GlobalLock( hData );\r
124 \r
125         core::wStringToMultibyte(ClipboardBuf, buffer);\r
126 \r
127         GlobalUnlock( hData );\r
128         CloseClipboard();\r
129 \r
130         return ClipboardBuf.c_str();\r
131 \r
132 #elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)\r
133     NSString* str = nil;\r
134     NSPasteboard* board = nil;\r
135     char* result = 0;\r
136 \r
137     board = [NSPasteboard generalPasteboard];\r
138     str = [board stringForType:NSStringPboardType];\r
139 \r
140     if (str != nil)\r
141         result = (char*)[str cStringUsingEncoding:NSUTF8StringEncoding];\r
142 \r
143     return (result);\r
144 \r
145 #elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
146     if ( IrrDeviceLinux )\r
147         return IrrDeviceLinux->getTextFromClipboard();\r
148     return 0;\r
149 \r
150 #else\r
151 \r
152         return 0;\r
153 #endif\r
154 }\r
155 \r
156 \r
157 bool COSOperator::getSystemMemory(u32* Total, u32* Avail) const\r
158 {\r
159 #if defined(_IRR_WINDOWS_API_) && !defined (_IRR_XBOX_PLATFORM_)\r
160 \r
161         MEMORYSTATUSEX MemoryStatusEx;\r
162         MemoryStatusEx.dwLength = sizeof(MEMORYSTATUSEX);\r
163 \r
164         // cannot fail\r
165         GlobalMemoryStatusEx(&MemoryStatusEx);\r
166 \r
167         if (Total)\r
168                 *Total = (u32)(MemoryStatusEx.ullTotalPhys>>10);\r
169         if (Avail)\r
170                 *Avail = (u32)(MemoryStatusEx.ullAvailPhys>>10);\r
171         return true;\r
172 \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
178 \r
179         if ((ps==-1)||(pp==-1)||(ap==-1))\r
180                 return false;\r
181 \r
182         if (Total)\r
183                 *Total = (u32)((ps*(long long)pp)>>10);\r
184         if (Avail)\r
185                 *Avail = (u32)((ps*(long long)ap)>>10);\r
186         return true;\r
187 #else\r
188         // TODO: implement for non-availability of symbols/features\r
189         return false;\r
190 #endif\r
191 #elif defined(_IRR_OSX_PLATFORM_)\r
192         int mib[2];\r
193         int64_t physical_memory;\r
194         size_t length;\r
195 \r
196         // Get the Physical memory size\r
197         mib[0] = CTL_HW;\r
198         mib[1] = HW_MEMSIZE;\r
199         length = sizeof(int64_t);\r
200         sysctl(mib, 2, &physical_memory, &length, NULL, 0);\r
201         return true;\r
202 #else\r
203         // TODO: implement for others\r
204         return false;\r
205 #endif\r
206 }\r
207 \r
208 \r
209 } // end namespace\r
210 \r