source: trunk/src/kernel32/KERNEL32.CPP@ 4037

Last change on this file since 4037 was 3872, checked in by sandervl, 25 years ago

Always try to allocate an executable image at it's preferred address

File size: 41.0 KB
Line 
1/* $Id: KERNEL32.CPP,v 1.50 2000-07-20 18:06:58 sandervl Exp $ */
2
3/*
4 * Win32 compatibility file functions for OS/2
5 *
6 * Copyright 1998 Sander van Leeuwen
7 * Copyright 1998 Patrick Haller
8 * Copyright 1998 Peter Fitzsimmons
9 * Copyright 1998 Knut St. Osmundsen
10 *
11 * @(#) KERNEL32.CPP 1.0.1 1998/06/12 PH added HandleManager support
12 *
13 * Project Odin Software License can be found in LICENSE.TXT
14 *
15 */
16
17
18/*****************************************************************************
19 * Includes *
20 *****************************************************************************/
21
22#include <odin.h>
23#include <odinwrap.h>
24#include <os2sel.h>
25
26#include <os2win.h>
27#include <winnt.h>
28#include <winnls.h>
29#include <stdlib.h>
30#include <string.h>
31#include <ctype.h>
32
33#include "misc.h"
34#include <builtin.h>
35#include "heap.h"
36#include "handlemanager.h"
37#include "wprocess.h"
38#include <versionos2.h>
39
40#define DBG_LOCALLOG DBG_kernel32
41#include "dbglocal.h"
42
43/*****************************************************************************
44 * Defines *
45 *****************************************************************************/
46
47ODINDEBUGCHANNEL(KERNEL32-KERNEL32)
48
49 /* this define enables certain less important debug messages */
50//#define DEBUG_LOCAL 1
51
52
53
54/*****************************************************************************
55 * Name : BOOL WIN32API CloseHandle
56 * Purpose : forward call to Open32
57 * Parameters:
58 * Variables :
59 * Result :
60 * Remark :
61 * Status :
62 *
63 * Author : Patrick Haller [Fri, 1998/06/12 03:44]
64 *****************************************************************************/
65BOOL WIN32API CloseHandle(HANDLE hHandle)
66{
67 dprintf(("KERNEL32: CloseHandle(%08xh)\n",
68 hHandle));
69
70 return HMCloseHandle(hHandle);
71}
72
73
74//******************************************************************************
75HANDLE WIN32API GetStdHandle(DWORD fdwDevice)
76{
77 HANDLE handle;
78
79 /* @@@PH 1998/02/12 Handle Manager Support */
80 handle = HMGetStdHandle(fdwDevice);
81
82 //@@@PH translate handle
83
84 /* handle = GetStdHandle(fdwDevice); */
85 dprintf(("KERNEL32: GetStdHandle for device %X returned %X\n", fdwDevice, handle));
86 return(handle);
87}
88//******************************************************************************
89//******************************************************************************
90BOOL WIN32API SetStdHandle(DWORD IDStdHandle,
91 HANDLE hHandle)
92{
93 dprintf(("KERNEL32: SetStdHandle\n"));
94
95 ///@@@PH translate handle
96
97 return (HMSetStdHandle(IDStdHandle,
98 hHandle));
99}
100//******************************************************************************
101//******************************************************************************
102BOOL WIN32API IsBadWritePtr(LPVOID lpvPtr, UINT cbBytes)
103{
104#ifdef DEBUG
105 BOOL rc;
106
107 rc = O32_IsBadWritePtr(lpvPtr, cbBytes);
108 dprintf(("KERNEL32: IsBadWritePtr: 0x%X size %d rc = %d\n", (int)lpvPtr, cbBytes, rc));
109 return(rc);
110#else
111 return(O32_IsBadWritePtr(lpvPtr, cbBytes));
112#endif
113}
114//******************************************************************************
115//******************************************************************************
116BOOL WIN32API IsBadReadPtr(CONST VOID *lpvPtr, UINT cbBytes)
117{
118#ifdef DEBUG
119 BOOL rc;
120
121 rc = O32_IsBadReadPtr(lpvPtr, cbBytes);
122 dprintf(("KERNEL32: IsBadWritePtr: 0x%X size %d rc = %d\n", (int)lpvPtr, cbBytes, rc));
123 return(rc);
124#else
125 return(O32_IsBadReadPtr(lpvPtr, cbBytes));
126#endif
127}
128//******************************************************************************
129//******************************************************************************
130BOOL WIN32API IsBadCodePtr( FARPROC arg1)
131{
132 dprintf(("KERNEL32: IsBadCodePtr\n"));
133 return O32_IsBadCodePtr(arg1);
134}
135//******************************************************************************
136//******************************************************************************
137BOOL WIN32API IsBadStringPtrA( LPCSTR arg1, UINT arg2)
138{
139 dprintf(("KERNEL32: IsBadStringPtr"));
140 return O32_IsBadStringPtr(arg1, arg2);
141}
142//******************************************************************************
143//******************************************************************************
144BOOL WIN32API IsBadStringPtrW(LPCWSTR arg1, UINT arg2)
145{
146 dprintf(("KERNEL32: OS2IsBadStringPtrW"));
147 return O32_IsBadReadPtr((CONST VOID *)arg1, arg2*2+2);
148}
149//******************************************************************************
150//******************************************************************************
151DWORD WIN32API GetLastError()
152{
153 DWORD rc;
154
155 rc = O32_GetLastError();
156#ifdef DEBUG_LOCAL
157 dprintf(("KERNEL32: GetLastError returned %d\n", rc));
158#endif
159 return(rc);
160}
161//******************************************************************************
162//******************************************************************************
163VOID WIN32API SetLastError( DWORD dwError)
164{
165 if(dwError != 0) {
166 dprintf2(("KERNEL32: SetLastError to %d\n", dwError));
167 }
168 O32_SetLastError(dwError);
169}
170//******************************************************************************
171//******************************************************************************
172UINT WIN32API GetOEMCP(VOID)
173{
174 dprintf(("KERNEL32: GetOEMCP\n"));
175 return(O32_GetOEMCP());
176}
177//******************************************************************************
178//******************************************************************************
179UINT WIN32API GetACP(VOID)
180{
181 dprintf(("KERNEL32: GetACP\n"));
182 return(O32_GetACP());
183}
184//******************************************************************************
185//******************************************************************************
186
187static const unsigned char CT_CType2_LUT[] = {
188 C2_NOTAPPLICABLE, /* - 0 */
189 C2_NOTAPPLICABLE, /* - 1 */
190 C2_NOTAPPLICABLE, /* - 2 */
191 C2_NOTAPPLICABLE, /* - 3 */
192 C2_NOTAPPLICABLE, /* - 4 */
193 C2_NOTAPPLICABLE, /* - 5 */
194 C2_NOTAPPLICABLE, /* - 6 */
195 C2_NOTAPPLICABLE, /* - 7 */
196 C2_NOTAPPLICABLE, /* - 8 */
197 C2_SEGMENTSEPARATOR, /* - 9 */
198 C2_NOTAPPLICABLE, /* - 10 */
199 C2_NOTAPPLICABLE, /* - 11 */
200 C2_NOTAPPLICABLE, /* - 12 */
201 C2_NOTAPPLICABLE, /* - 13 */
202 C2_NOTAPPLICABLE, /* - 14 */
203 C2_NOTAPPLICABLE, /* - 15 */
204 C2_NOTAPPLICABLE, /* - 16 */
205 C2_NOTAPPLICABLE, /* - 17 */
206 C2_NOTAPPLICABLE, /* - 18 */
207 C2_NOTAPPLICABLE, /* - 19 */
208 C2_NOTAPPLICABLE, /* - 20 */
209 C2_NOTAPPLICABLE, /* - 21 */
210 C2_NOTAPPLICABLE, /* - 22 */
211 C2_NOTAPPLICABLE, /* - 23 */
212 C2_NOTAPPLICABLE, /* - 24 */
213 C2_NOTAPPLICABLE, /* - 25 */
214 C2_NOTAPPLICABLE, /* - 26 */
215 C2_NOTAPPLICABLE, /* - 27 */
216 C2_NOTAPPLICABLE, /* - 28 */
217 C2_NOTAPPLICABLE, /* - 29 */
218 C2_NOTAPPLICABLE, /* - 30 */
219 C2_NOTAPPLICABLE, /* - 31 */
220 C2_WHITESPACE, /* - 32 */
221 C2_OTHERNEUTRAL, /* ! - 33 */
222 C2_OTHERNEUTRAL, /* " - 34 */ /* " */
223 C2_EUROPETERMINATOR, /* # - 35 */
224 C2_EUROPETERMINATOR, /* $ - 36 */
225 C2_EUROPETERMINATOR, /* % - 37 */
226 C2_LEFTTORIGHT, /* & - 38 */
227 C2_OTHERNEUTRAL, /* ' - 39 */
228 C2_OTHERNEUTRAL, /* ( - 40 */
229 C2_OTHERNEUTRAL, /* ) - 41 */
230 C2_OTHERNEUTRAL, /* * - 42 */
231 C2_EUROPETERMINATOR, /* + - 43 */
232 C2_COMMONSEPARATOR, /* , - 44 */
233 C2_EUROPETERMINATOR, /* - - 45 */
234 C2_EUROPESEPARATOR, /* . - 46 */
235 C2_EUROPESEPARATOR, /* / - 47 */
236 C2_EUROPENUMBER, /* 0 - 48 */
237 C2_EUROPENUMBER, /* 1 - 49 */
238 C2_EUROPENUMBER, /* 2 - 50 */
239 C2_EUROPENUMBER, /* 3 - 51 */
240 C2_EUROPENUMBER, /* 4 - 52 */
241 C2_EUROPENUMBER, /* 5 - 53 */
242 C2_EUROPENUMBER, /* 6 - 54 */
243 C2_EUROPENUMBER, /* 7 - 55 */
244 C2_EUROPENUMBER, /* 8 - 56 */
245 C2_EUROPENUMBER, /* 9 - 57 */
246 C2_COMMONSEPARATOR, /* : - 58 */
247 C2_OTHERNEUTRAL, /* ; - 59 */
248 C2_OTHERNEUTRAL, /* < - 60 */
249 C2_OTHERNEUTRAL, /* = - 61 */
250 C2_OTHERNEUTRAL, /* > - 62 */
251 C2_OTHERNEUTRAL, /* ? - 63 */
252 C2_LEFTTORIGHT, /* @ - 64 */
253 C2_LEFTTORIGHT, /* A - 65 */
254 C2_LEFTTORIGHT, /* B - 66 */
255 C2_LEFTTORIGHT, /* C - 67 */
256 C2_LEFTTORIGHT, /* D - 68 */
257 C2_LEFTTORIGHT, /* E - 69 */
258 C2_LEFTTORIGHT, /* F - 70 */
259 C2_LEFTTORIGHT, /* G - 71 */
260 C2_LEFTTORIGHT, /* H - 72 */
261 C2_LEFTTORIGHT, /* I - 73 */
262 C2_LEFTTORIGHT, /* J - 74 */
263 C2_LEFTTORIGHT, /* K - 75 */
264 C2_LEFTTORIGHT, /* L - 76 */
265 C2_LEFTTORIGHT, /* M - 77 */
266 C2_LEFTTORIGHT, /* N - 78 */
267 C2_LEFTTORIGHT, /* O - 79 */
268 C2_LEFTTORIGHT, /* P - 80 */
269 C2_LEFTTORIGHT, /* Q - 81 */
270 C2_LEFTTORIGHT, /* R - 82 */
271 C2_LEFTTORIGHT, /* S - 83 */
272 C2_LEFTTORIGHT, /* T - 84 */
273 C2_LEFTTORIGHT, /* U - 85 */
274 C2_LEFTTORIGHT, /* V - 86 */
275 C2_LEFTTORIGHT, /* W - 87 */
276 C2_LEFTTORIGHT, /* X - 88 */
277 C2_LEFTTORIGHT, /* Y - 89 */
278 C2_LEFTTORIGHT, /* Z - 90 */
279 C2_OTHERNEUTRAL, /* [ - 91 */
280 C2_OTHERNEUTRAL, /* \ - 92 */
281 C2_OTHERNEUTRAL, /* ] - 93 */
282 C2_OTHERNEUTRAL, /* ^ - 94 */
283 C2_OTHERNEUTRAL, /* _ - 95 */
284 C2_OTHERNEUTRAL, /* ` - 96 */
285 C2_LEFTTORIGHT, /* a - 97 */
286 C2_LEFTTORIGHT, /* b - 98 */
287 C2_LEFTTORIGHT, /* c - 99 */
288 C2_LEFTTORIGHT, /* d - 100 */
289 C2_LEFTTORIGHT, /* e - 101 */
290 C2_LEFTTORIGHT, /* f - 102 */
291 C2_LEFTTORIGHT, /* g - 103 */
292 C2_LEFTTORIGHT, /* h - 104 */
293 C2_LEFTTORIGHT, /* i - 105 */
294 C2_LEFTTORIGHT, /* j - 106 */
295 C2_LEFTTORIGHT, /* k - 107 */
296 C2_LEFTTORIGHT, /* l - 108 */
297 C2_LEFTTORIGHT, /* m - 109 */
298 C2_LEFTTORIGHT, /* n - 110 */
299 C2_LEFTTORIGHT, /* o - 111 */
300 C2_LEFTTORIGHT, /* p - 112 */
301 C2_LEFTTORIGHT, /* q - 113 */
302 C2_LEFTTORIGHT, /* r - 114 */
303 C2_LEFTTORIGHT, /* s - 115 */
304 C2_LEFTTORIGHT, /* t - 116 */
305 C2_LEFTTORIGHT, /* u - 117 */
306 C2_LEFTTORIGHT, /* v - 118 */
307 C2_LEFTTORIGHT, /* w - 119 */
308 C2_LEFTTORIGHT, /* x - 120 */
309 C2_LEFTTORIGHT, /* y - 121 */
310 C2_LEFTTORIGHT, /* z - 122 */
311 C2_OTHERNEUTRAL, /* { - 123 */
312 C2_OTHERNEUTRAL, /* | - 124 */
313 C2_OTHERNEUTRAL, /* } - 125 */
314 C2_OTHERNEUTRAL, /* ~ - 126 */
315 C2_NOTAPPLICABLE, /*  - 127 */
316 C2_NOTAPPLICABLE, /* € - 128 */
317 C2_NOTAPPLICABLE, /*  - 129 */
318 C2_OTHERNEUTRAL, /* ‚ - 130 */
319 C2_LEFTTORIGHT, /* ƒ - 131 */
320 C2_OTHERNEUTRAL, /* „ - 132 */
321 C2_OTHERNEUTRAL, /* …
322 - 133 */
323 C2_OTHERNEUTRAL, /* † - 134 */
324 C2_OTHERNEUTRAL, /* ‡ - 135 */
325 C2_LEFTTORIGHT, /* ˆ - 136 */
326 C2_EUROPETERMINATOR, /* ‰ - 137 */
327 C2_LEFTTORIGHT, /* Š - 138 */
328 C2_OTHERNEUTRAL, /* ‹ - 139 */
329 C2_LEFTTORIGHT, /* Œ - 140 */
330 C2_NOTAPPLICABLE, /*  - 141 */
331 C2_NOTAPPLICABLE, /* Ž - 142 */
332 C2_NOTAPPLICABLE, /*  - 143 */
333 C2_NOTAPPLICABLE, /*  - 144 */
334 C2_OTHERNEUTRAL, /* ‘ - 145 */
335 C2_OTHERNEUTRAL, /* ’ - 146 */
336 C2_OTHERNEUTRAL, /* “ - 147 */
337 C2_OTHERNEUTRAL, /* ” - 148 */
338 C2_OTHERNEUTRAL, /* • - 149 */
339 C2_OTHERNEUTRAL, /* – - 150 */
340 C2_OTHERNEUTRAL, /* — - 151 */
341 C2_LEFTTORIGHT, /* ˜ - 152 */
342 C2_OTHERNEUTRAL, /* ™ - 153 */
343 C2_LEFTTORIGHT, /* š - 154 */
344 C2_OTHERNEUTRAL, /* › - 155 */
345 C2_LEFTTORIGHT, /* œ - 156 */
346 C2_NOTAPPLICABLE, /*  - 157 */
347 C2_NOTAPPLICABLE, /* ž - 158 */
348 C2_LEFTTORIGHT, /* Ÿ - 159 */
349 C2_WHITESPACE, /*   - 160 */
350 C2_OTHERNEUTRAL, /* ¡ - 161 */
351 C2_EUROPETERMINATOR, /* ¢ - 162 */
352 C2_EUROPETERMINATOR, /* £ - 163 */
353 C2_EUROPETERMINATOR, /* € - 164 */
354 C2_EUROPETERMINATOR, /* ¥ - 165 */
355 C2_OTHERNEUTRAL, /* Š - 166 */
356 C2_OTHERNEUTRAL, /* § - 167 */
357 C2_OTHERNEUTRAL, /* š - 168 */
358 C2_OTHERNEUTRAL, /* © - 169 */
359 C2_OTHERNEUTRAL, /* ª - 170 */
360 C2_OTHERNEUTRAL, /* « - 171 */
361 C2_OTHERNEUTRAL, /* ¬ - 172 */
362 C2_OTHERNEUTRAL, /* ­ - 173 */
363 C2_OTHERNEUTRAL, /* ® - 174 */
364 C2_OTHERNEUTRAL, /* ¯ - 175 */
365 C2_EUROPETERMINATOR, /* ° - 176 */
366 C2_EUROPETERMINATOR, /* ± - 177 */
367 C2_EUROPENUMBER, /* ² - 178 */
368 C2_EUROPENUMBER, /* ³ - 179 */
369 C2_OTHERNEUTRAL, /* Ž - 180 */
370 C2_OTHERNEUTRAL, /* µ - 181 */
371 C2_OTHERNEUTRAL, /* ¶ - 182 */
372 C2_OTHERNEUTRAL, /* · - 183 */
373 C2_OTHERNEUTRAL, /* ž - 184 */
374 C2_EUROPENUMBER, /* ¹ - 185 */
375 C2_OTHERNEUTRAL, /* º - 186 */
376 C2_OTHERNEUTRAL, /* » - 187 */
377 C2_OTHERNEUTRAL, /* Œ - 188 */
378 C2_OTHERNEUTRAL, /* œ - 189 */
379 C2_OTHERNEUTRAL, /* Ÿ - 190 */
380 C2_OTHERNEUTRAL, /* ¿ - 191 */
381 C2_LEFTTORIGHT, /* À - 192 */
382 C2_LEFTTORIGHT, /* Á - 193 */
383 C2_LEFTTORIGHT, /* Â - 194 */
384 C2_LEFTTORIGHT, /* Ã - 195 */
385 C2_LEFTTORIGHT, /* Ä - 196 */
386 C2_LEFTTORIGHT, /* Å - 197 */
387 C2_LEFTTORIGHT, /* Æ - 198 */
388 C2_LEFTTORIGHT, /* Ç - 199 */
389 C2_LEFTTORIGHT, /* È - 200 */
390 C2_LEFTTORIGHT, /* É - 201 */
391 C2_LEFTTORIGHT, /* Ê - 202 */
392 C2_LEFTTORIGHT, /* Ë - 203 */
393 C2_LEFTTORIGHT, /* Ì - 204 */
394 C2_LEFTTORIGHT, /* Í - 205 */
395 C2_LEFTTORIGHT, /* Î - 206 */
396 C2_LEFTTORIGHT, /* Ï - 207 */
397 C2_LEFTTORIGHT, /* Ð - 208 */
398 C2_LEFTTORIGHT, /* Ñ - 209 */
399 C2_LEFTTORIGHT, /* Ò - 210 */
400 C2_LEFTTORIGHT, /* Ó - 211 */
401 C2_LEFTTORIGHT, /* Ô - 212 */
402 C2_LEFTTORIGHT, /* Õ - 213 */
403 C2_LEFTTORIGHT, /* Ö - 214 */
404 C2_OTHERNEUTRAL, /* × - 215 */
405 C2_LEFTTORIGHT, /* Ø - 216 */
406 C2_LEFTTORIGHT, /* Ù - 217 */
407 C2_LEFTTORIGHT, /* Ú - 218 */
408 C2_LEFTTORIGHT, /* Û - 219 */
409 C2_LEFTTORIGHT, /* Ü - 220 */
410 C2_LEFTTORIGHT, /* Ý - 221 */
411 C2_LEFTTORIGHT, /* Þ - 222 */
412 C2_LEFTTORIGHT, /* ß - 223 */
413 C2_LEFTTORIGHT, /* à - 224 */
414 C2_LEFTTORIGHT, /* á - 225 */
415 C2_LEFTTORIGHT, /* â - 226 */
416 C2_LEFTTORIGHT, /* ã - 227 */
417 C2_LEFTTORIGHT, /* ä - 228 */
418 C2_LEFTTORIGHT, /* å - 229 */
419 C2_LEFTTORIGHT, /* æ - 230 */
420 C2_LEFTTORIGHT, /* ç - 231 */
421 C2_LEFTTORIGHT, /* è - 232 */
422 C2_LEFTTORIGHT, /* é - 233 */
423 C2_LEFTTORIGHT, /* ê - 234 */
424 C2_LEFTTORIGHT, /* ë - 235 */
425 C2_LEFTTORIGHT, /* ì - 236 */
426 C2_LEFTTORIGHT, /* í - 237 */
427 C2_LEFTTORIGHT, /* î - 238 */
428 C2_LEFTTORIGHT, /* ï - 239 */
429 C2_LEFTTORIGHT, /* ð - 240 */
430 C2_LEFTTORIGHT, /* ñ - 241 */
431 C2_LEFTTORIGHT, /* ò - 242 */
432 C2_LEFTTORIGHT, /* ó - 243 */
433 C2_LEFTTORIGHT, /* ô - 244 */
434 C2_LEFTTORIGHT, /* õ - 245 */
435 C2_LEFTTORIGHT, /* ö - 246 */
436 C2_OTHERNEUTRAL, /* ÷ - 247 */
437 C2_LEFTTORIGHT, /* ø - 248 */
438 C2_LEFTTORIGHT, /* ù - 249 */
439 C2_LEFTTORIGHT, /* ú - 250 */
440 C2_LEFTTORIGHT, /* û - 251 */
441 C2_LEFTTORIGHT, /* ü - 252 */
442 C2_LEFTTORIGHT, /* ý - 253 */
443 C2_LEFTTORIGHT, /* þ - 254 */
444 C2_LEFTTORIGHT /* ÿ - 255 */
445};
446
447const WORD OLE2NLS_CT_CType3_LUT[] = {
448 0x0000, /* - 0 */
449 0x0000, /* - 1 */
450 0x0000, /* - 2 */
451 0x0000, /* - 3 */
452 0x0000, /* - 4 */
453 0x0000, /* - 5 */
454 0x0000, /* - 6 */
455 0x0000, /* - 7 */
456 0x0000, /* - 8 */
457 0x0008, /* - 9 */
458 0x0008, /* - 10 */
459 0x0008, /* - 11 */
460 0x0008, /* - 12 */
461 0x0008, /* - 13 */
462 0x0000, /* - 14 */
463 0x0000, /* - 15 */
464 0x0000, /* - 16 */
465 0x0000, /* - 17 */
466 0x0000, /* - 18 */
467 0x0000, /* - 19 */
468 0x0000, /* - 20 */
469 0x0000, /* - 21 */
470 0x0000, /* - 22 */
471 0x0000, /* - 23 */
472 0x0000, /* - 24 */
473 0x0000, /* - 25 */
474 0x0000, /* - 26 */
475 0x0000, /* - 27 */
476 0x0000, /* - 28 */
477 0x0000, /* - 29 */
478 0x0000, /* - 30 */
479 0x0000, /* - 31 */
480 0x0048, /* - 32 */
481 0x0048, /* ! - 33 */
482 0x0448, /* " - 34 */ /* " */
483 0x0048, /* # - 35 */
484 0x0448, /* $ - 36 */
485 0x0048, /* % - 37 */
486 0x0048, /* & - 38 */
487 0x0440, /* ' - 39 */
488 0x0048, /* ( - 40 */
489 0x0048, /* ) - 41 */
490 0x0048, /* * - 42 */
491 0x0048, /* + - 43 */
492 0x0048, /* , - 44 */
493 0x0440, /* - - 45 */
494 0x0048, /* . - 46 */
495 0x0448, /* / - 47 */
496 0x0040, /* 0 - 48 */
497 0x0040, /* 1 - 49 */
498 0x0040, /* 2 - 50 */
499 0x0040, /* 3 - 51 */
500 0x0040, /* 4 - 52 */
501 0x0040, /* 5 - 53 */
502 0x0040, /* 6 - 54 */
503 0x0040, /* 7 - 55 */
504 0x0040, /* 8 - 56 */
505 0x0040, /* 9 - 57 */
506 0x0048, /* : - 58 */
507 0x0048, /* ; - 59 */
508 0x0048, /* < - 60 */
509 0x0448, /* = - 61 */
510 0x0048, /* > - 62 */
511 0x0048, /* ? - 63 */
512 0x0448, /* @ - 64 */
513 0x8040, /* A - 65 */
514 0x8040, /* B - 66 */
515 0x8040, /* C - 67 */
516 0x8040, /* D - 68 */
517 0x8040, /* E - 69 */
518 0x8040, /* F - 70 */
519 0x8040, /* G - 71 */
520 0x8040, /* H - 72 */
521 0x8040, /* I - 73 */
522 0x8040, /* J - 74 */
523 0x8040, /* K - 75 */
524 0x8040, /* L - 76 */
525 0x8040, /* M - 77 */
526 0x8040, /* N - 78 */
527 0x8040, /* O - 79 */
528 0x8040, /* P - 80 */
529 0x8040, /* Q - 81 */
530 0x8040, /* R - 82 */
531 0x8040, /* S - 83 */
532 0x8040, /* T - 84 */
533 0x8040, /* U - 85 */
534 0x8040, /* V - 86 */
535 0x8040, /* W - 87 */
536 0x8040, /* X - 88 */
537 0x8040, /* Y - 89 */
538 0x8040, /* Z - 90 */
539 0x0048, /* [ - 91 */
540 0x0448, /* \ - 92 */
541 0x0048, /* ] - 93 */
542 0x0448, /* ^ - 94 */
543 0x0448, /* _ - 95 */
544 0x0448, /* ` - 96 */
545 0x8040, /* a - 97 */
546 0x8040, /* b - 98 */
547 0x8040, /* c - 99 */
548 0x8040, /* d - 100 */
549 0x8040, /* e - 101 */
550 0x8040, /* f - 102 */
551 0x8040, /* g - 103 */
552 0x8040, /* h - 104 */
553 0x8040, /* i - 105 */
554 0x8040, /* j - 106 */
555 0x8040, /* k - 107 */
556 0x8040, /* l - 108 */
557 0x8040, /* m - 109 */
558 0x8040, /* n - 110 */
559 0x8040, /* o - 111 */
560 0x8040, /* p - 112 */
561 0x8040, /* q - 113 */
562 0x8040, /* r - 114 */
563 0x8040, /* s - 115 */
564 0x8040, /* t - 116 */
565 0x8040, /* u - 117 */
566 0x8040, /* v - 118 */
567 0x8040, /* w - 119 */
568 0x8040, /* x - 120 */
569 0x8040, /* y - 121 */
570 0x8040, /* z - 122 */
571 0x0048, /* { - 123 */
572 0x0048, /* | - 124 */
573 0x0048, /* } - 125 */
574 0x0448, /* ~ - 126 */
575 0x0000, /*  - 127 */
576 0x0000, /* € - 128 */
577 0x0000, /*  - 129 */
578 0x0008, /* ‚ - 130 */
579 0x8000, /* ƒ - 131 */
580 0x0008, /* „ - 132 */
581 0x0008, /* …
582 - 133 */
583 0x0008, /* † - 134 */
584 0x0008, /* ‡ - 135 */
585 0x0001, /* ˆ - 136 */
586 0x0008, /* ‰ - 137 */
587 0x8003, /* Š - 138 */
588 0x0008, /* ‹ - 139 */
589 0x8000, /* Œ - 140 */
590 0x0000, /*  - 141 */
591 0x0000, /* Ž - 142 */
592 0x0000, /*  - 143 */
593 0x0000, /*  - 144 */
594 0x0088, /* ‘ - 145 */
595 0x0088, /* ’ - 146 */
596 0x0088, /* “ - 147 */
597 0x0088, /* ” - 148 */
598 0x0008, /* • - 149 */
599 0x0400, /* – - 150 */
600 0x0400, /* — - 151 */
601 0x0408, /* ˜ - 152 */
602 0x0000, /* ™ - 153 */
603 0x8003, /* š - 154 */
604 0x0008, /* › - 155 */
605 0x8000, /* œ - 156 */
606 0x0000, /*  - 157 */
607 0x0000, /* ž - 158 */
608 0x8003, /* Ÿ - 159 */
609 0x0008, /*   - 160 */
610 0x0008, /* ¡ - 161 */
611 0x0048, /* ¢ - 162 */
612 0x0048, /* £ - 163 */
613 0x0008, /* € - 164 */
614 0x0048, /* ¥ - 165 */
615 0x0048, /* Š - 166 */
616 0x0008, /* § - 167 */
617 0x0408, /* š - 168 */
618 0x0008, /* © - 169 */
619 0x0400, /* ª - 170 */
620 0x0008, /* « - 171 */
621 0x0048, /* ¬ - 172 */
622 0x0408, /* ­ - 173 */
623 0x0008, /* ® - 174 */
624 0x0448, /* ¯ - 175 */
625 0x0008, /* ° - 176 */
626 0x0008, /* ± - 177 */
627 0x0000, /* ² - 178 */
628 0x0000, /* ³ - 179 */
629 0x0408, /* Ž - 180 */
630 0x0008, /* µ - 181 */
631 0x0008, /* ¶ - 182 */
632 0x0008, /* · - 183 */
633 0x0408, /* ž - 184 */
634 0x0000, /* ¹ - 185 */
635 0x0400, /* º - 186 */
636 0x0008, /* » - 187 */
637 0x0000, /* Œ - 188 */
638 0x0000, /* œ - 189 */
639 0x0000, /* Ÿ - 190 */
640 0x0008, /* ¿ - 191 */
641 0x8003, /* À - 192 */
642 0x8003, /* Á - 193 */
643 0x8003, /* Â - 194 */
644 0x8003, /* Ã - 195 */
645 0x8003, /* Ä - 196 */
646 0x8003, /* Å - 197 */
647 0x8000, /* Æ - 198 */
648 0x8003, /* Ç - 199 */
649 0x8003, /* È - 200 */
650 0x8003, /* É - 201 */
651 0x8003, /* Ê - 202 */
652 0x8003, /* Ë - 203 */
653 0x8003, /* Ì - 204 */
654 0x8003, /* Í - 205 */
655 0x8003, /* Î - 206 */
656 0x8003, /* Ï - 207 */
657 0x8000, /* Ð - 208 */
658 0x8003, /* Ñ - 209 */
659 0x8003, /* Ò - 210 */
660 0x8003, /* Ó - 211 */
661 0x8003, /* Ô - 212 */
662 0x8003, /* Õ - 213 */
663 0x8003, /* Ö - 214 */
664 0x0008, /* × - 215 */
665 0x8003, /* Ø - 216 */
666 0x8003, /* Ù - 217 */
667 0x8003, /* Ú - 218 */
668 0x8003, /* Û - 219 */
669 0x8003, /* Ü - 220 */
670 0x8003, /* Ý - 221 */
671 0x8000, /* Þ - 222 */
672 0x8000, /* ß - 223 */
673 0x8003, /* à - 224 */
674 0x8003, /* á - 225 */
675 0x8003, /* â - 226 */
676 0x8003, /* ã - 227 */
677 0x8003, /* ä - 228 */
678 0x8003, /* å - 229 */
679 0x8000, /* æ - 230 */
680 0x8003, /* ç - 231 */
681 0x8003, /* è - 232 */
682 0x8003, /* é - 233 */
683 0x8003, /* ê - 234 */
684 0x8003, /* ë - 235 */
685 0x8003, /* ì - 236 */
686 0x8003, /* í - 237 */
687 0x8003, /* î - 238 */
688 0x8003, /* ï - 239 */
689 0x8000, /* ð - 240 */
690 0x8003, /* ñ - 241 */
691 0x8003, /* ò - 242 */
692 0x8003, /* ó - 243 */
693 0x8003, /* ô - 244 */
694 0x8003, /* õ - 245 */
695 0x8003, /* ö - 246 */
696 0x0008, /* ÷ - 247 */
697 0x8003, /* ø - 248 */
698 0x8003, /* ù - 249 */
699 0x8003, /* ú - 250 */
700 0x8003, /* û - 251 */
701 0x8003, /* ü - 252 */
702 0x8003, /* ý - 253 */
703 0x8000, /* þ - 254 */
704 0x8003 /* ÿ - 255 */
705};
706
707
708
709
710ODINFUNCTION5(BOOL, GetStringTypeExW,
711 LCID, locale,
712 DWORD, dwInfoType,
713 LPCWSTR, lpSrcStr,
714 int, cchSrc,
715 LPWORD, lpCharType)
716{
717 int i;
718
719 dprintf(("KERNEL32: GetStringTypeW, not properly implemented\n"));
720 if((DWORD)lpSrcStr == (DWORD)lpCharType ||
721 !lpSrcStr ||
722 !lpCharType)
723 {
724 O32_SetLastError(ERROR_INVALID_PARAMETER);
725 return(FALSE);
726 }
727
728 if(cchSrc == -1)
729 cchSrc = UniStrlen((UniChar*)lpSrcStr);
730
731 switch(dwInfoType)
732 {
733 case CT_CTYPE1:
734 for(i=0;i<cchSrc;i++)
735 {
736 lpCharType[i] = 0;
737 if (isdigit(lpSrcStr[i])) lpCharType[i]|=C1_DIGIT;
738 if (isalpha(lpSrcStr[i])) lpCharType[i]|=C1_ALPHA;
739 if (islower(lpSrcStr[i])) lpCharType[i]|=C1_LOWER;
740 if (isupper(lpSrcStr[i])) lpCharType[i]|=C1_UPPER;
741 if (isspace(lpSrcStr[i])) lpCharType[i]|=C1_SPACE;
742 if (ispunct(lpSrcStr[i])) lpCharType[i]|=C1_PUNCT;
743 if (iscntrl(lpSrcStr[i])) lpCharType[i]|=C1_CNTRL;
744 if ( (lpSrcStr[i] == ' ') ||
745 (lpSrcStr[i] == '\t') )
746 lpCharType[i]|=C1_BLANK;
747 }
748 return TRUE;
749 break;
750
751 case CT_CTYPE2:
752 case CT_CTYPE3: //not supported right now
753 return FALSE;
754 break;
755 }
756
757 return FALSE;
758}
759
760ODINFUNCTION4(BOOL, GetStringTypeW,
761 DWORD, dwInfoType,
762 LPCWSTR, lpSrcStr,
763 int, cchSrc,
764 LPWORD, lpCharType)
765{
766 return ODIN_GetStringTypeExW(0,
767 dwInfoType,
768 lpSrcStr,
769 cchSrc,
770 lpCharType);
771}
772
773/******************************************************************************
774*GetStringTypeExA[KERNEL32.397]
775*
776* FIXME: Ignores the locale.
777*/
778ODINFUNCTION5(BOOL, GetStringTypeExA,
779 LCID, locale,
780 DWORD, dwInfoType,
781 LPCSTR, src,
782 INT, cchSrc,
783 LPWORD, chartype)
784{
785 int i;
786
787 if ((src==NULL) ||
788 (chartype==NULL) ||
789 (src==(LPSTR)chartype))
790 {
791 SetLastError(ERROR_INVALID_PARAMETER);
792 return FALSE;
793 }
794
795 if (cchSrc==-1)
796 cchSrc=lstrlenA(src)+1;
797
798 switch (dwInfoType)
799 {
800 case CT_CTYPE1:
801 for (i=0;i<cchSrc;i++)
802 {
803 chartype[i] = 0;
804 if (isdigit(src[i])) chartype[i]|=C1_DIGIT;
805 if (isalpha(src[i])) chartype[i]|=C1_ALPHA;
806 if (islower(src[i])) chartype[i]|=C1_LOWER;
807 if (isupper(src[i])) chartype[i]|=C1_UPPER;
808 if (isspace(src[i])) chartype[i]|=C1_SPACE;
809 if (ispunct(src[i])) chartype[i]|=C1_PUNCT;
810 if (iscntrl(src[i])) chartype[i]|=C1_CNTRL;
811 /* FIXME: isblank() is a GNU extension */
812 /*if (isblank(src[i])) chartype[i]|=C1_BLANK; */
813 if ((src[i] == ' ') || (src[i] == '\t')) chartype[i]|=C1_BLANK;
814 /* C1_XDIGIT */
815 }
816 return TRUE;
817
818 case CT_CTYPE2:
819 for (i=0;i<cchSrc;i++)
820 {
821 chartype[i]=(WORD)CT_CType2_LUT[i];
822 }
823 return TRUE;
824
825 case CT_CTYPE3:
826 for (i=0;i<cchSrc;i++)
827 {
828 chartype[i]=OLE2NLS_CT_CType3_LUT[i];
829 }
830 return TRUE;
831
832 default:
833 dprintf(("Unknown dwInfoType:%ld\n",
834 dwInfoType));
835 return FALSE;
836 }
837}
838
839//******************************************************************************
840//NOTE: This has one parameter more than the W version! (@#$@#$)
841//******************************************************************************
842ODINFUNCTION5(BOOL, GetStringTypeA,
843 LCID, locale,
844 DWORD, dwInfoType,
845 LPCSTR, lpSrcStr,
846 int, cchSrc,
847 LPWORD, lpCharType)
848{
849 return ODIN_GetStringTypeExA(locale,
850 dwInfoType,
851 lpSrcStr,
852 cchSrc,
853 lpCharType);
854}
855
856//******************************************************************************
857VOID WIN32API GlobalMemoryStatus( MEMORYSTATUS *arg1)
858{
859 dprintf(("KERNEL32: GlobalMemoryStatus\n"));
860 O32_GlobalMemoryStatus(arg1);
861 dprintf(("dwMemoryLoad %X\n", arg1->dwMemoryLoad));
862 dprintf(("dwTotalPhys %X\n", arg1->dwTotalPhys));
863 dprintf(("dwAvailPhys %X\n", arg1->dwAvailPhys));
864 dprintf(("dwTotalPageFile %X\n", arg1->dwTotalPageFile));
865 dprintf(("dwAvailPageFile %X\n", arg1->dwAvailPageFile));
866 dprintf(("dwTotalVirtual %X\n", arg1->dwTotalVirtual));
867 dprintf(("dwAvailVirtual %X\n", arg1->dwAvailVirtual));
868}
869VOID WIN32API Sleep(DWORD arg1)
870{
871 dprintf2(("KERNEL32: Sleep %d\n", arg1));
872 O32_Sleep(arg1);
873}
874//******************************************************************************
875//******************************************************************************
876DWORD WIN32API GetPriorityClass(HANDLE arg1)
877{
878 dprintf(("KERNEL32: GetPriorityClass\n"));
879 return O32_GetPriorityClass(arg1);
880}
881//******************************************************************************
882//******************************************************************************
883BOOL WIN32API SetPriorityClass(HANDLE arg1, DWORD arg2)
884{
885 dprintf(("KERNEL32: SetPriorityClass\n"));
886 return O32_SetPriorityClass(arg1, arg2);
887}
888//******************************************************************************
889//TODO!
890//******************************************************************************
891int WIN32API LCMapStringW(
892 DWORD /*LCID*/ Locale,
893 DWORD dwMapFlags,
894 LPCWSTR lpSrcStr,
895 int cchSrc,
896 LPWSTR lpDestStr,
897 int cchDest)
898{
899 // quick hack! this code is not done!
900 dprintf(("LCMapStringW: NOT IMPLEMENTED!"));
901 if(cchSrc == -1)
902 cchSrc = strlen((const char *)lpSrcStr);
903 if(!cchDest)
904 return cchSrc;
905 lstrcpynW(lpDestStr, lpSrcStr, max(cchSrc, cchDest));
906 return max(cchSrc, cchDest);
907}
908//******************************************************************************
909//TODO!
910//******************************************************************************
911int WIN32API LCMapStringA(
912 DWORD /*LCID*/ Locale,
913 DWORD dwMapFlags,
914 LPCSTR lpSrcStr,
915 int cchSrc,
916 LPSTR lpDestStr,
917 int cchDest)
918{
919 dprintf(("KERNEL32: LCMapStringA not implemented\n"));
920 if(cchSrc == -1)
921 cchSrc = strlen((const char *)lpSrcStr);
922 if(!cchDest)
923 return cchSrc;
924 strncpy((char *)lpDestStr, (const char *)lpSrcStr, max(cchSrc, cchDest));
925 return max(cchSrc, cchDest);
926}
927//******************************************************************************
928//SvL: 24-6-'97 - Added
929//******************************************************************************
930BOOL WIN32API Beep( DWORD arg1, DWORD arg2)
931{
932 dprintf(("KERNEL32: OS2Beep\n"));
933 return O32_Beep(arg1, arg2);
934}
935//******************************************************************************
936//******************************************************************************
937VOID WIN32API FatalAppExitA( UINT arg1, LPCSTR arg2)
938{
939 dprintf(("KERNEL32: OS2FatalAppExitA\n"));
940 O32_FatalAppExit(arg1, arg2);
941}
942//******************************************************************************
943//******************************************************************************
944VOID WIN32API FatalAppExitW(UINT arg1, LPCWSTR arg2)
945{
946 char *astring;
947
948 dprintf(("KERNEL32: OS2FatalAppExitW\n"));
949 astring = UnicodeToAsciiString((LPWSTR)arg2);
950 O32_FatalAppExit(arg1, astring);
951 //probably won't return, but who cares..
952 FreeAsciiString(astring);
953}
954//******************************************************************************
955//******************************************************************************
956VOID WIN32API FatalExit( UINT arg1)
957{
958 dprintf(("KERNEL32: OS2FatalExit\n"));
959 O32_FatalExit(arg1);
960}
961//******************************************************************************
962//******************************************************************************
963BOOL WIN32API IsBadHugeReadPtr( const void * arg1, UINT arg2)
964{
965 dprintf(("KERNEL32: OS2IsBadHugeReadPtr\n"));
966 return O32_IsBadHugeReadPtr(arg1, arg2);
967}
968//******************************************************************************
969//******************************************************************************
970BOOL WIN32API IsBadHugeWritePtr( PVOID arg1, UINT arg2)
971{
972 dprintf(("KERNEL32: OS2IsBadHugeWritePtr\n"));
973 return O32_IsBadHugeWritePtr(arg1, arg2);
974}
975//******************************************************************************
976//******************************************************************************
977BOOL WIN32API IsDBCSLeadByte(BYTE arg1)
978{
979 dprintf2(("KERNEL32: OS2IsDBCSLeadByte\n"));
980 return O32_IsDBCSLeadByte(arg1);
981}
982//******************************************************************************
983//******************************************************************************
984DWORD WIN32API LoadModule( LPCSTR arg1, PVOID arg2)
985{
986 dprintf(("KERNEL32: OS2LoadModule\n"));
987 return O32_LoadModule(arg1, arg2);
988}
989//******************************************************************************
990//******************************************************************************
991int WIN32API MulDiv(int arg1, int arg2, int arg3)
992{
993 dprintf2(("KERNEL32: MulDiv %d*%d/%d\n", arg1, arg2, arg3));
994 if(arg3 == 0)
995 return 0;
996
997 return O32_MulDiv(arg1, arg2, arg3);
998}
999//******************************************************************************
1000UINT WIN32API CompareStringA(LCID lcid, DWORD fdwStyle, LPCSTR lpString1,
1001 DWORD cch1, LPCSTR lpString2, DWORD cch2)
1002{
1003 int i;
1004 int fEqual = TRUE;
1005 char *string1 = (char *)lpString1, *string2 = (char *)lpString2;
1006
1007 SetLastError(0);
1008
1009#ifdef DEBUG
1010 if(fdwStyle & SORT_STRINGSORT)
1011 dprintf(("KERNEL32: SORT_STRINGSORT not supported!\n"));
1012 if(fdwStyle & NORM_IGNORENONSPACE)
1013 dprintf(("KERNEL32: NORM_IGNORENONSPACE not supported!\n"));
1014 if(fdwStyle & NORM_IGNORESYMBOLS)
1015 dprintf(("KERNEL32: NORM_IGNORESYMBOLS not supported!\n"));
1016#endif
1017
1018 if(lpString1 == NULL || lpString2 == NULL)
1019 {
1020 dprintf(("CompareStringA: (s1=%s,s2=%s): Invalid NULL string\n", lpString1, lpString2));
1021 SetLastError(ERROR_INVALID_PARAMETER);
1022 return 0;
1023 }
1024
1025 if(cch1 == -1) cch1 = strlen(string1);
1026 if(cch2 == -1) cch2 = strlen(string2);
1027
1028 if(fdwStyle) {
1029 //TODO!
1030 if(fdwStyle != 0 && fdwStyle != NORM_IGNORECASE)
1031 return(0); /*PLF Fri 98-03-13 04:09:32 was return 1 */
1032 }
1033 if(fdwStyle & NORM_IGNORECASE)
1034 fEqual = strnicmp(string1, string2, min(cch1, cch2));
1035 else
1036 fEqual = strncmp(string1, string2, min(cch1, cch2));
1037
1038 if (fEqual < 0 ) fEqual = 1;
1039 else if(fEqual == 0) fEqual = 2;
1040 else if(fEqual > 0) fEqual = 3;
1041
1042 //If equal, but different length, largest one is the greatest in lexical value
1043 if(fEqual == 2 && cch1 != cch2){
1044 if(cch1 < cch2)
1045 fEqual = 1;
1046 else
1047 fEqual = 3;
1048 }
1049 dprintf2(("KERNEL32: OS2CompareStringA '%s' - '%s' returned %d\n", lpString1, lpString2, fEqual));
1050 return(fEqual);
1051}
1052
1053//******************************************************************************
1054//TODO: Not complete (fdwStyle flags specify compare method)
1055//******************************************************************************
1056UINT WIN32API CompareStringW(LCID lcid, DWORD fdwStyle, LPCWSTR lpString1,
1057 DWORD cch1, LPCWSTR lpString2, DWORD cch2)
1058{
1059 int i;
1060 int fEqual = TRUE;
1061 char *string1;
1062 char *string2;
1063
1064 dprintf2(("KERNEL32: OS2CompareStringW '%s' - '%s'\n", string1, string2));
1065
1066 if(lpString1 == NULL || lpString2 == NULL)
1067 {
1068 dprintf(("CompareStringW: (s1=%s,s2=%s): Invalid NULL string\n", lpString1, lpString2));
1069 SetLastError(ERROR_INVALID_PARAMETER);
1070 return 0;
1071 }
1072
1073 if(cch1 == -1) cch1 = lstrlenW(lpString1);
1074 if(cch2 == -1) cch2 = lstrlenW(lpString2);
1075
1076 string1 = UnicodeToAsciiStringN((LPWSTR)lpString1, cch1);
1077 string2 = UnicodeToAsciiStringN((LPWSTR)lpString2, cch2);
1078
1079 fEqual = CompareStringA(lcid, fdwStyle, string1, cch1, string2, cch2);
1080 FreeAsciiString(string1);
1081 FreeAsciiString(string2);
1082
1083 return(fEqual);
1084}
1085//******************************************************************************
1086//Borrowed from Wine
1087//******************************************************************************
1088ODINPROCEDURE1(GetStartupInfoA,LPSTARTUPINFOA,lpStartupInfo)
1089{
1090 lpStartupInfo->cb = sizeof(STARTUPINFOA);
1091 lpStartupInfo->lpReserved = "<Reserved>";
1092 lpStartupInfo->lpDesktop = "Desktop";
1093 lpStartupInfo->lpTitle = "Title";
1094 lpStartupInfo->dwX = 0;
1095 lpStartupInfo->dwY = 0;
1096 lpStartupInfo->dwXSize = 640;
1097 lpStartupInfo->dwYSize = 480;
1098 lpStartupInfo->dwXCountChars = 80; // for console
1099 lpStartupInfo->dwYCountChars = 25;
1100 lpStartupInfo->dwFillAttribute = 0x0720;
1101 lpStartupInfo->dwFlags = STARTF_USESHOWWINDOW |
1102 STARTF_USEPOSITION |
1103 STARTF_USESIZE |
1104 STARTF_USECOUNTCHARS |
1105 STARTF_USEFILLATTRIBUTE|
1106 STARTF_USESTDHANDLES;
1107 lpStartupInfo->wShowWindow = SW_SHOWDEFAULT;
1108 lpStartupInfo->cbReserved2 = 0;
1109 lpStartupInfo->lpReserved2 = NULL; /* must be NULL for VC runtime */
1110 /* @@@PH 98/07/13 Handlemanager support */
1111 lpStartupInfo->hStdInput = GetStdHandle(STD_INPUT_HANDLE);
1112 lpStartupInfo->hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
1113 lpStartupInfo->hStdError = GetStdHandle(STD_ERROR_HANDLE);
1114 return;
1115}
1116//******************************************************************************
1117//Borrowed from Wine
1118//******************************************************************************
1119ODINPROCEDURE1(GetStartupInfoW,LPSTARTUPINFOW,lpStartupInfo)
1120{
1121 static WCHAR lpReserved[] = {'<', 'R','e','s','e','r','v','e','d','>', 0};
1122 static WCHAR lpDesktop[] = {'D', 'e','s','k','t','o','p', 0};
1123 static WCHAR lpTitle[] = {'T', 'i','t','l','e', 0};
1124
1125 // forward call to ascii variant
1126 GetStartupInfoA((LPSTARTUPINFOA)lpStartupInfo);
1127 lpStartupInfo->cb = sizeof(STARTUPINFOW);
1128 lpStartupInfo->lpReserved = lpReserved;
1129 lpStartupInfo->lpDesktop = lpDesktop;
1130 lpStartupInfo->lpTitle = lpTitle;
1131 return;
1132}
1133//******************************************************************************
1134//TODO: Not complete or correct, but sufficient for now
1135//******************************************************************************
1136BOOL WIN32API GetBinaryTypeA(LPCTSTR lpApplicationName, LPDWORD lpBinaryType)
1137{
1138 dprintf(("KERNEL32: OS2GetBinaryTypeA %s\n", lpApplicationName));
1139 if(strstr(lpApplicationName, ".EXE") || strstr(lpApplicationName, ".exe"))
1140 *lpBinaryType = SCS_32BIT_BINARY;
1141 else
1142 if(strstr(lpApplicationName, ".COM") || strstr(lpApplicationName, ".com"))
1143 *lpBinaryType = SCS_DOS_BINARY;
1144 else
1145 if(strstr(lpApplicationName, ".PIF") || strstr(lpApplicationName, ".pif"))
1146 *lpBinaryType = SCS_PIF_BINARY;
1147 else return(FALSE);
1148 return(TRUE);
1149}
1150//******************************************************************************
1151//******************************************************************************
1152BOOL WIN32API GetBinaryTypeW(LPCWSTR lpApplicationName, LPDWORD lpBinaryType)
1153{
1154 BOOL rc;
1155 char *astring;
1156
1157 dprintf(("KERNEL32: OS2GetBinaryTypeW\n"));
1158 astring = UnicodeToAsciiString((LPWSTR)lpApplicationName);
1159 rc = GetBinaryTypeA(astring, lpBinaryType);
1160 FreeAsciiString(astring);
1161 return(rc);
1162}
1163//******************************************************************************
1164//TODO: SetLastError
1165//******************************************************************************
1166BOOL WIN32API GetVersionExA(OSVERSIONINFOA *lpVersionInformation)
1167{
1168 dprintf(("KERNEL32: OS2GetVersionExA\n"));
1169
1170 if(lpVersionInformation == NULL || lpVersionInformation->dwOSVersionInfoSize != sizeof(OSVERSIONINFOA))
1171 return(FALSE);
1172
1173 lpVersionInformation->dwMajorVersion = ODINNT_MAJOR_VERSION; //pretend we're NT 4.0
1174 lpVersionInformation->dwMinorVersion = ODINNT_MINOR_VERSION;
1175 lpVersionInformation->dwBuildNumber = ODINNT_BUILD_NR;
1176 lpVersionInformation->dwPlatformId = VER_PLATFORM_WIN32_NT;
1177 strcpy(lpVersionInformation->szCSDVersion, ODINNT_CSDVERSION);
1178 return(TRUE);
1179}
1180//******************************************************************************
1181//******************************************************************************
1182BOOL WIN32API GetVersionExW(OSVERSIONINFOW *lpVersionInformation)
1183{
1184 dprintf(("KERNEL32: OS2GetVersionExW\n"));
1185
1186 if(lpVersionInformation == NULL || lpVersionInformation->dwOSVersionInfoSize != sizeof(OSVERSIONINFOW))
1187 return(FALSE);
1188
1189 lpVersionInformation->dwMajorVersion = ODINNT_MAJOR_VERSION; //pretend we're NT 4.0
1190 lpVersionInformation->dwMinorVersion = ODINNT_MINOR_VERSION;
1191 lpVersionInformation->dwBuildNumber = ODINNT_BUILD_NR;
1192 lpVersionInformation->dwPlatformId = VER_PLATFORM_WIN32_NT;
1193 lstrcpyW(lpVersionInformation->szCSDVersion, ODINNT_CSDVERSION_W);
1194 return(TRUE);
1195}
1196//******************************************************************************
1197//******************************************************************************
1198LONG WIN32API GetVersion()
1199{
1200 dprintf(("KERNEL32: GetVersion\n"));
1201 // highword 0 = NT, lowword high byte major ver, low byte minor ver
1202/* @@@PH 98/04/04 MFC30 makes assumptions about process control block */
1203/* structures that lead to crashes if we don't identify as NT */
1204
1205 return ODINNT_VERSION;
1206}
1207//******************************************************************************
1208//******************************************************************************
1209BOOL WIN32API FlushInstructionCache( /*PLF Mon 98-02-09 23:56:49 : STUB STUB STUB STUB STUB */
1210 HANDLE hProcess, /* process with cache to flush */
1211 LPCVOID lpvBase, /* address of region to flush */
1212 DWORD cbFlush) /* length of region to flush */
1213
1214{
1215 dprintf(("FlushInstructionCache() - NIY\n"));
1216 return TRUE;
1217}
1218
1219
1220//******************************************************************************
1221
1222/***********************************************************************
1223* RtlFillMemory (KERNEL32.441)
1224*/
1225VOID WIN32API RtlFillMemory(LPVOID ptr,
1226 UINT len,
1227 UINT fill )
1228{
1229#ifdef DEBUG_LOCAL
1230 dprintf(("KERNEL32: RtlFillMemory(%08x,%08x,%08x)\n",
1231 ptr,
1232 len,
1233 fill));
1234#endif
1235
1236 memset(ptr,
1237 fill,
1238 len );
1239}
1240
1241
1242/***********************************************************************
1243* RtlMoveMemory (KERNEL32.442)
1244*/
1245VOID WIN32API RtlMoveMemory(LPVOID dst,
1246 LPCVOID src,
1247 UINT len )
1248{
1249 dprintf2(("KERNEL32: RtlMoveMemory(%08x,%08x,%08x)\n",
1250 dst,
1251 src,
1252 len));
1253
1254 memmove(dst,
1255 src,
1256 len );
1257}
1258
1259
1260/***********************************************************************
1261* RtlZeroMemory (KERNEL32.444)
1262*/
1263VOID WIN32API RtlZeroMemory(LPVOID ptr,
1264 UINT len)
1265{
1266 dprintf2(("KERNEL32: RtlZeroMemory(%08x,%08x)\n",
1267 ptr,
1268 len));
1269
1270 memset(ptr,
1271 0,
1272 len);
1273}
1274
1275//******************************************************************************
1276/*KSO Thu 21.05.1998*/
1277BOOL WIN32API IsDBCSLeadByteEx(UINT CodePage, BYTE TestChar)
1278{
1279 dprintf(("KERNEL32: OS2IsDBCSLeadByteEx - not correctly implemented\n"));
1280 return O32_IsDBCSLeadByte(TestChar);
1281}
1282//******************************************************************************
1283
1284
1285
1286
1287
1288
1289
1290
1291/*****************************************************************************
1292 * Name : BOOL GetSystemPowerStatus
1293 * Purpose : The GetSystemPowerStatus function retrieves the power status of
1294 * the system. The status indicates whether the system is running
1295 * on AC or DC power, whether the battery is currently charging,
1296 * and how much battery life currently remains.
1297 * Parameters: LPSYSTEM_POWER_STATUS lpSystemPowerStatus
1298 * Variables :
1299 * Result : TRUE / FALSE
1300 * Remark :
1301 * Status : UNTESTED STUB
1302 *
1303 * Author : Patrick Haller [Mon, 1998/06/15 08:00]
1304 *****************************************************************************/
1305
1306BOOL WIN32API GetSystemPowerStatus(LPSYSTEM_POWER_STATUS lpSystemPowerStatus)
1307{
1308 dprintf(("Kernel32: GetSystemPowerStatus(%08xh) not properly implemented.\n",
1309 lpSystemPowerStatus));
1310
1311 if(lpSystemPowerStatus == NULL) {
1312 SetLastError(ERROR_INVALID_PARAMETER);
1313 return FALSE;
1314 }
1315 lpSystemPowerStatus->ACLineStatus = 1; //online
1316 lpSystemPowerStatus->BatteryFlag = 128; //no system battery
1317 lpSystemPowerStatus->BatteryLifePercent = 255; //unknown
1318 lpSystemPowerStatus->reserved = 0;
1319 lpSystemPowerStatus->BatteryLifeTime = -1; //unknown
1320 lpSystemPowerStatus->BatteryFullLifeTime= -1; //unknown
1321
1322 return TRUE;
1323}
Note: See TracBrowser for help on using the repository browser.