Index: icu46/source/test/intltest/winutil.cpp |
=================================================================== |
--- icu46/source/test/intltest/winutil.cpp (revision 0) |
+++ icu46/source/test/intltest/winutil.cpp (revision 0) |
@@ -0,0 +1,91 @@ |
+/* |
+******************************************************************************** |
+* Copyright (C) 2005-2009, International Business Machines |
+* Corporation and others. All Rights Reserved. |
+******************************************************************************** |
+* |
+* File WINUTIL.CPP |
+* |
+******************************************************************************** |
+*/ |
+ |
+#include "unicode/utypes.h" |
+ |
+#ifdef U_WINDOWS |
+ |
+#if !UCONFIG_NO_FORMATTING |
+ |
+#include "winutil.h" |
+#include "locmap.h" |
+#include "unicode/uloc.h" |
+ |
+# define WIN32_LEAN_AND_MEAN |
+# define VC_EXTRALEAN |
+# define NOUSER |
+# define NOSERVICE |
+# define NOIME |
+# define NOMCX |
+# include <windows.h> |
+# include <stdio.h> |
+# include <string.h> |
+ |
+static Win32Utilities::LCIDRecord *lcidRecords = NULL; |
+static int32_t lcidCount = 0; |
+static int32_t lcidMax = 0; |
+ |
+BOOL CALLBACK EnumLocalesProc(LPSTR lpLocaleString) |
+{ |
+ const char* localeID = NULL; |
+ UErrorCode status = U_ZERO_ERROR; |
+ |
+ if (lcidCount >= lcidMax) { |
+ Win32Utilities::LCIDRecord *newRecords = new Win32Utilities::LCIDRecord[lcidMax + 32]; |
+ |
+ for (int i = 0; i < lcidMax; i += 1) { |
+ newRecords[i] = lcidRecords[i]; |
+ } |
+ |
+ delete[] lcidRecords; |
+ lcidRecords = newRecords; |
+ lcidMax += 32; |
+ } |
+ |
+ sscanf(lpLocaleString, "%8x", &lcidRecords[lcidCount].lcid); |
+ |
+ localeID = uprv_convertToPosix(lcidRecords[lcidCount].lcid, &status); |
+ |
+ lcidRecords[lcidCount].localeID = new char[strlen(localeID)]; |
+ |
+ strcpy(lcidRecords[lcidCount].localeID, localeID); |
+ |
+ lcidCount += 1; |
+ |
+ return TRUE; |
+} |
+ |
+Win32Utilities::LCIDRecord *Win32Utilities::getLocales(int32_t &localeCount) |
+{ |
+ LCIDRecord *result; |
+ |
+ EnumSystemLocalesA(EnumLocalesProc, LCID_INSTALLED); |
+ |
+ localeCount = lcidCount; |
+ result = lcidRecords; |
+ |
+ lcidCount = lcidMax = 0; |
+ lcidRecords = NULL; |
+ |
+ return result; |
+} |
+ |
+void Win32Utilities::freeLocales(LCIDRecord *records) |
+{ |
+ for (int i = 0; i < lcidCount; i++) { |
+ delete lcidRecords[i].localeID; |
+ } |
+ delete[] records; |
+} |
+ |
+#endif /* #if !UCONFIG_NO_FORMATTING */ |
+ |
+#endif /* #ifdef U_WINDOWS */ |
Property changes on: icu46/source/test/intltest/winutil.cpp |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |