source: trunk/src/shlwapi/ordinal_odin.cpp

Last change on this file was 21916, checked in by dmik, 14 years ago

Merge branch gcc-kmk to trunk.

File size: 12.6 KB
Line 
1/* $Id: ordinal_odin.cpp,v 1.6 2002-06-07 08:02:17 sandervl Exp $ */
2
3/*
4 * Win32 Lightweight SHELL32 for OS/2
5 *
6 * Copyright 2000 Patrick Haller (phaller@gmx.net)
7 * Project Odin Software License can be found in LICENSE.TXT
8 *
9 * Ordinally Exported Functions
10 *
11 */
12
13/*****************************************************************************
14 * Remark *
15 *****************************************************************************
16
17 */
18
19
20/*****************************************************************************
21 * Includes *
22 *****************************************************************************/
23
24#include <odin.h>
25#include <odinwrap.h>
26#include <os2sel.h>
27
28#include <string.h>
29#include <ctype.h>
30#include <wctype.h>
31#ifndef __GNUC__
32#include <wcstr.h>
33#endif
34#define HAVE_WCTYPE_H
35
36#include "debugtools.h"
37
38#include <winreg.h>
39
40#include <heapstring.h>
41#include <misc.h>
42#include <win/shell.h>
43#include <win/winerror.h>
44#include <winversion.h>
45#include <winuser.h>
46
47#define CINTERFACE
48
49#include "winerror.h"
50#include "winnls.h"
51#include "winversion.h"
52#include "heap.h"
53
54#include "win/wine/obj_base.h"
55#include "shellapi.h"
56#include "shlobj.h"
57
58#include "shlwapi.h"
59#include "shlwapi_odin.h"
60
61
62/*****************************************************************************
63 * Local Variables *
64 *****************************************************************************/
65
66
67
68
69
70
71/*****************************************************************************
72 * Name : ???
73 * Purpose : Looks like a strdup()
74 * Parameters: Unknown (wrong)
75 * Variables :
76 * Result : Unknown
77 * Remark :
78 * Status : UNTESTED STUB
79 *
80 * Author : Patrick Haller [Sun, 2000/06/09 04:47]
81 *****************************************************************************/
82
83DWORD WIN32API SHLWAPI_12(DWORD arg0, DWORD arg1)
84{
85 dprintf(("not implemented, explorer.exe will trap now"));
86
87 return 0;
88}
89
90
91
92
93/*****************************************************************************
94 * Name : ???
95 * Purpose : Unknown (used by explorer.exe)
96 * Parameters: Unknown (wrong)
97 * Variables :
98 * Result : Unknown
99 * Remark :
100 * Status : UNTESTED STUB
101 *
102 * Author : Patrick Haller [Sun, 2000/06/09 04:47]
103 *****************************************************************************/
104
105DWORD WIN32API SHLWAPI_17(DWORD arg0, DWORD arg1)
106{
107 dprintf(("not implemented, explorer.exe will trap now"));
108
109 return 0;
110}
111
112
113
114
115/*****************************************************************************
116 * Name : ???
117 * Purpose : Unknown (used by explorer.exe)
118 * Parameters: Unknown (wrong)
119 * Variables :
120 * Result : Unknown
121 * Remark :
122 * Status : UNTESTED STUB
123 *
124 * Author : Patrick Haller [Sun, 2000/06/09 04:47]
125 *****************************************************************************/
126
127DWORD WIN32API SHLWAPI_20(DWORD arg0, DWORD arg1)
128{
129 dprintf(("not implemented, explorer.exe will trap now"));
130
131 return 0;
132}
133
134
135
136
137
138
139
140
141/*****************************************************************************
142 * Name : DWORD SHLWAPI_160
143 * Purpose :
144 * Parameters:
145 * Variables :
146 * Result :
147 * Remark : SHLWAPI.160
148 * Status : UNTESTED STUB
149 *
150 * Author : Patrick Haller [Sun, 2000/06/10 04:02]
151 *****************************************************************************/
152
153DWORD WIN32API SHLWAPI_160(DWORD arg0, DWORD arg1)
154{
155 dprintf(("not implemented.\n"));
156 return 0;
157}
158
159
160
161
162
163/*****************************************************************************
164 * Name : SHLWAPI_185
165 * Purpose : some M$ nag screen ?
166 * Parameters:
167 * Variables :
168 * Result :
169 * Remark : SHLWAPI.185
170 * Status : COMPLETELY IMPLEMENTED UNTESTED
171 *
172 * Author : Patrick Haller [Sun, 2000/06/10 04:02]
173 *****************************************************************************/
174
175DWORD WIN32API SHLWAPI_185(DWORD arg0, LPSTR lpStr1, LPSTR lpStr2,
176 DWORD arg3, DWORD dwDefault, LPSTR lpstrValueName)
177{
178 BOOL fDontShow;
179 WCHAR szValueNameW[256];
180
181 fDontShow = SHRegGetBoolUSValueA("Software\\Microsoft\\Windows\\CurrentVersion\\"
182 "Explorer\\DontShowMeThisDialogAgain",
183 lpstrValueName,
184 0,
185 1);
186 if (fDontShow == FALSE)
187 return dwDefault;
188
189 int iLength1 = lstrlenA(lpStr1)+1;
190 HLOCAL hLocal1 = LocalAlloc(LMEM_ZEROINIT,
191 iLength1 << 1);
192 if (hLocal1 == NULL)
193 return dwDefault;
194
195 int iLength2 = lstrlenA(lpStr2)+1;
196 HLOCAL hLocal2 = LocalAlloc(LMEM_ZEROINIT,
197 iLength2 << 1);
198 if (hLocal2 == NULL)
199 {
200 LocalFree(hLocal1);
201 return dwDefault;
202 }
203
204#if 0
205 // convert all ascii values to Unicode
206 SHLWAPI_215(lpStr1, (LPWSTR)hLocal1, iLength1);
207 SHLWAPI_215(lpStr2, (LPWSTR)hLocal2, iLength2);
208 SHLWAPI_215(lpstrValueName, szValueNameW, 256);
209
210 // do something
211 dwDefault = SHLWAPI_191(arg0,
212 (LPWSTR)hLocal1,
213 arg3,
214 dwDefault,
215 szValueNameW);
216#endif
217
218 if (hLocal1)
219 LocalFree(hLocal1);
220
221 if (hLocal2)
222 LocalFree(hLocal2);
223
224 return dwDefault;
225}
226
227
228/*****************************************************************************
229 * Name : SHLWAPI_191
230 * Purpose : display some M$ nag screen if enabled
231 * Parameters:
232 * Variables :
233 * Result :
234 * Remark : SHLWAPI.191
235 * Status : COMPLETELY IMPLEMENTED ? UNTESTED
236 *
237 * Author : Patrick Haller [Sun, 2000/06/10 04:02]
238 *****************************************************************************/
239
240DWORD WIN32API SHLWAPI_191(HWND hwndParent, DWORD arg1, DWORD arg2,
241 DWORD arg3, DWORD dwDefault, LPWSTR lpstrDialog)
242{
243 BOOL rc = SHRegGetBoolUSValueW((LPCWSTR)L"Software\\Microsoft\\Windows\\CurrentVersion"
244 L"\\Explorer\\DontShowMeThisDialogAgain",
245 lpstrDialog,
246 0,
247 1);
248 if (rc == FALSE)
249 return dwDefault;
250
251 static HINSTANCE hShellInstance; // @@@PH where to put / initialize?
252
253#if 0
254 struct
255 {
256 DWORD s1;
257 DWORD s2;
258 DWORD s3;
259 DWORD s4;
260 } sInit;
261
262 sInit.s1 = "software...";
263 sInit.s2 = arg1;
264 sInit.s3 = arg2;
265 sInit.s4 = arg3;
266
267 return DialogBoxParamW(hShellInstance,
268 0x1200, // some template
269 hwndParent,
270 i_DialogProc,
271 &sInit);
272#endif
273
274 return dwDefault;
275}
276
277
278
279
280/*****************************************************************************
281 * Name : BOOL SHLWAPI_197
282 * Purpose : Set text background?
283 * Parameters:
284 * Variables :
285 * Result :
286 * Remark : SHLWAPI.197
287 * Status : COMPLETELY IMPLEMENTED ? UNTESTED
288 *
289 * Author : Patrick Haller [Sun, 2000/06/10 04:02]
290 *****************************************************************************/
291
292BOOL WIN32API SHLWAPI_197(HDC hdc, CONST RECT*lprc, COLORREF crColor)
293{
294 COLORREF crOld;
295 BOOL res;
296
297 crOld = SetBkColor(hdc, crColor);
298 res = ExtTextOutA(hdc,
299 0,
300 0,
301 ETO_OPAQUE,
302 lprc,
303 0,
304 0,
305 0);
306 SetBkColor(hdc, crOld);
307
308 return res;
309}
310
311
312
313/*****************************************************************************
314 * Name : SHLWAPI_243
315 * Purpose : does something critical, even with performance counters
316 * Parameters:
317 * Variables :
318 * Result :
319 * Remark : SHLWAPI.243
320 * Status : STUB UNTESTED
321 *
322 * Author : Patrick Haller [Sun, 2000/06/10 04:02]
323 *****************************************************************************/
324
325DWORD WIN32API SHLWAPI_243(DWORD arg0, DWORD arg1, DWORD arg2, DWORD arg3,
326 DWORD arg4)
327{
328 dprintf(("not implementes.\n"));
329 return 0;
330}
331
332/*****************************************************************************
333 * Name : DWORD SHLWAPI_437
334 * Purpose : Determine product version and options
335 * Parameters:
336 * Variables :
337 * Result :
338 * Remark : SHLWAPI.437
339 * Status : UNTESTED
340 *
341 * Author : Patrick Haller [Sun, 2000/06/10 04:02]
342 *****************************************************************************/
343
344#define REG_PRODUCTOPTIONS "System\\CurrentControlSet\\Control\\ProductOptions"
345#define REG_OPTIONS_PRODUCTTYPE "ProductType"
346#define REG_OPTIONS_ENTERPRISE "Enterprise"
347#define REG_OPTIONS_DATACENTER "DataCenter"
348
349DWORD WIN32API SHLWAPI_437(DWORD nFunction)
350{
351 static BOOL flagProductOptionsInitialized = FALSE;
352 static BOOL flagIsProductEnterprise = FALSE;
353 static BOOL flagIsProductDatacenter = FALSE;
354 static OSVERSIONINFOA osVersionInfo;
355
356 HKEY hKeyOptions;
357 DWORD dwKeyType;
358 char szBuffer[260]; // MAX_PATH_LEN
359 DWORD dwDataLength;
360
361 dprintf(("not (properly) implemented.\n"));
362
363 if (flagProductOptionsInitialized == FALSE)
364 {
365 // set to TRUE regardless of subsequent errors
366 flagProductOptionsInitialized = TRUE;
367
368 // initialize required structures
369 osVersionInfo.dwOSVersionInfoSize = 0x9c;
370 if (GetVersionExA(&osVersionInfo) == FALSE)
371 {
372 osVersionInfo.dwOSVersionInfoSize = 0x94;
373 GetVersionExA(&osVersionInfo);
374 }
375
376 LONG rc = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
377 REG_PRODUCTOPTIONS,
378 0,
379 KEY_READ,
380 &hKeyOptions);
381 if (rc == ERROR_SUCCESS)
382 {
383 dwDataLength = sizeof(szBuffer);
384 rc = RegQueryValueExA(hKeyOptions,
385 REG_OPTIONS_PRODUCTTYPE,
386 0,
387 &dwKeyType,
388 (LPBYTE)szBuffer,
389 &dwDataLength);
390 if (StrStrIA(szBuffer, REG_OPTIONS_ENTERPRISE) != 0)
391 flagIsProductEnterprise = TRUE;
392 else
393 if (StrStrIA(szBuffer, REG_OPTIONS_DATACENTER) != 0)
394 flagIsProductDatacenter = TRUE;
395
396 RegCloseKey(hKeyOptions);
397 }
398 }
399
400 // OK, now to the usual work ...
401 switch (nFunction)
402 {
403 // is platform WINDOWS
404 case 0:
405 if (osVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
406 return 1;
407 else
408 return 0;
409
410 // is platform NT
411 case 1:
412 if (osVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
413 return 1;
414 else
415 return 0;
416
417 // is platform Windows 95/98/xx ?
418 case 2:
419 if (osVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS)
420 return 0;
421 if (osVersionInfo.dwMajorVersion >= 4)
422 return 1;
423 else
424 return 0;
425
426 // is platform NT4 or better?
427 case 3:
428 if (osVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT)
429 return 0;
430 if (osVersionInfo.dwMajorVersion >= 4)
431 return 1;
432 else
433 return 0;
434
435 // is platform Win2000 or better?
436 case 4:
437 if (osVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT)
438 return 0;
439 if (osVersionInfo.dwMajorVersion >= 5)
440 return 1;
441 else
442 return 0;
443
444 // at least Windows 4.10 ?
445 case 5:
446 if (osVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS)
447 return 0;
448 if (osVersionInfo.dwMajorVersion > 4)
449 return 1;
450 else
451 if (osVersionInfo.dwMajorVersion == 4)
452 if (osVersionInfo.dwMinorVersion >= 10)
453 return 1;
454
455 return 0;
456
457 // is platform Windows98 GA ?
458 case 6:
459 if ( (osVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
460 (osVersionInfo.dwMajorVersion == 4) &&
461 (osVersionInfo.dwMinorVersion == 10) &&
462 (osVersionInfo.dwBuildNumber == 1998) ) // 0x7ce
463 return 1;
464 else
465 return 0;
466
467 // is platform some specific CSD ?
468 case 7:
469 case 8:
470 //@@@PH incorrect
471 if (osVersionInfo.dwMajorVersion >= 5)
472 return 1;
473 else
474 return 0;
475
476 case 9:
477 //@@@PH incorrect
478 if (osVersionInfo.dwMajorVersion >= 5 ||
479 flagIsProductEnterprise ||
480 flagIsProductDatacenter)
481 return 1;
482 else
483 return 0;
484
485 case 10:
486 //@@@PH incorrect
487 if (osVersionInfo.dwMajorVersion >= 5)
488 return flagIsProductEnterprise;
489 else
490 return 0;
491
492 case 11:
493 //@@@PH incorrect
494 if (osVersionInfo.dwMajorVersion >= 5)
495 return flagIsProductDatacenter;
496 else
497 return 0;
498
499 // @@@PH: Oops, wazzup there ?
500 case 12:
501 return GetSystemMetrics(4096);
502 }
503
504 return 0;
505}
506
507
Note: See TracBrowser for help on using the repository browser.