2 * COPYRIGHT: See COPYING in the top level directory
3 Addition copyrights might be specified in LGPL.c
4 * PROJECT: ReactOS system libraries
5 * FILE: lib/kernel32/nls/wctomb.c
6 * PURPOSE: National language support functions
7 * PROGRAMMER: Boudewijn ( ariadne@xs4all.nl)
8 * UPDATE HISTORY: Modified from Onno Hovers wfc. ( 08/02/99 )
14 * Copyright (c) 1996, Onno Hovers, All rights reserved
19 #include <kernel32/nls.h>
20 #include <kernel32/thread.h>
24 #include <kernel32/kernel32.h>
26 extern PLOCALE __TebLocale;
28 #define GetTebLocale() __TebLocale
32 WideCharToMultiByte(UINT cpid, DWORD flags, LPCWSTR src, int srclen,
33 LPSTR dest, int destlen, LPCSTR pdefchar,
36 PCODEPAGE pcodepage = __CPFirst;
45 DPRINT("WideCharToMultiByte()\n");
50 case CP_ACP: pcodepage=GetTebLocale()->OemCodePage; break;
51 case CP_OEMCP: pcodepage=GetTebLocale()->AnsiCodePage; break;
52 case CP_MACCP: pcodepage=&__CP10000; break;
55 while((pcodepage)&&(pcodepage->Id!=cpid))
56 pcodepage=pcodepage->Next;
59 { SetLastError(ERROR_INVALID_PARAMETER); return 0; }
61 /* get conversion table */
62 utoa=pcodepage->FromUnicode;
64 /* get default char */
68 defchar=pcodepage->Info->DefaultChar[0];
73 /* how long are we ?? */
77 copylen=min(srclen,destlen);
80 /* XXX: maybe some inline assembly to speed things up, here ??? */
85 d=utoa[c>>10][(c>>5)&0x1F][(c)&0x1F];
99 /* XXXX: composites etc. */
100 retlen = wcslen(src);