~ubuntu-branches/ubuntu/precise/ghc/precise

« back to all changes in this revision

Viewing changes to libraries/Win32/System/Win32/NLS.hsc

  • Committer: Bazaar Package Importer
  • Author(s): Joachim Breitner
  • Date: 2011-01-17 12:49:24 UTC
  • Revision ID: james.westby@ubuntu.com-20110117124924-do1pym1jlf5o636m
Tags: upstream-7.0.1
ImportĀ upstreamĀ versionĀ 7.0.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
-----------------------------------------------------------------------------
 
2
-- |
 
3
-- Module      :  System.Win32.NLS
 
4
-- Copyright   :  (c) Alastair Reid, 1997-2003
 
5
-- License     :  BSD-style (see the file libraries/base/LICENSE)
 
6
--
 
7
-- Maintainer  :  Esa Ilari Vuokko <ei@vuokko.info>
 
8
-- Stability   :  provisional
 
9
-- Portability :  portable
 
10
--
 
11
-- A collection of FFI declarations for interfacing with Win32.
 
12
--
 
13
-----------------------------------------------------------------------------
 
14
 
 
15
module System.Win32.NLS  (
 
16
        module System.Win32.NLS,
 
17
 
 
18
        -- defined in System.Win32.Types
 
19
        LCID, LANGID, SortID, SubLANGID, PrimaryLANGID,
 
20
        mAKELCID, lANGIDFROMLCID, sORTIDFROMLCID,
 
21
        mAKELANGID, pRIMARYLANGID, sUBLANGID
 
22
        ) where
 
23
 
 
24
import System.Win32.Types
 
25
 
 
26
import Foreign
 
27
import Foreign.C
 
28
 
 
29
#include <windows.h>
 
30
#include "errors.h"
 
31
#include "win32debug.h"
 
32
 
 
33
#{enum LCID,
 
34
 , lOCALE_SYSTEM_DEFAULT = LOCALE_SYSTEM_DEFAULT
 
35
 , lOCALE_USER_DEFAULT   = LOCALE_USER_DEFAULT
 
36
 , lOCALE_NEUTRAL        = LOCALE_NEUTRAL
 
37
 }
 
38
 
 
39
foreign import stdcall unsafe "windows.h ConvertDefaultLocale"
 
40
  convertDefaultLocale :: LCID -> IO LCID
 
41
 
 
42
-- ToDo: various enum functions.
 
43
 
 
44
type CodePage = UINT
 
45
 
 
46
#{enum CodePage,
 
47
 , cP_ACP       = CP_ACP
 
48
 , cP_MACCP     = CP_MACCP
 
49
 , cP_OEMCP     = CP_OEMCP
 
50
 }
 
51
 
 
52
foreign import stdcall unsafe "windows.h GetACP"
 
53
  getACP :: IO CodePage
 
54
 
 
55
foreign import stdcall unsafe "windows.h SetThreadLocale"
 
56
  setThreadLocale :: LCID -> IO ()
 
57
 
 
58
type LCTYPE = UINT
 
59
 
 
60
#{enum LCTYPE,
 
61
 , lOCALE_ICALENDARTYPE = LOCALE_ICALENDARTYPE
 
62
 , lOCALE_SDATE         = LOCALE_SDATE
 
63
 , lOCALE_ICURRDIGITS   = LOCALE_ICURRDIGITS
 
64
 , lOCALE_SDECIMAL      = LOCALE_SDECIMAL
 
65
 , lOCALE_ICURRENCY     = LOCALE_ICURRENCY
 
66
 , lOCALE_SGROUPING     = LOCALE_SGROUPING
 
67
 , lOCALE_IDIGITS       = LOCALE_IDIGITS
 
68
 , lOCALE_SLIST         = LOCALE_SLIST
 
69
 , lOCALE_IFIRSTDAYOFWEEK = LOCALE_IFIRSTDAYOFWEEK
 
70
 , lOCALE_SLONGDATE     = LOCALE_SLONGDATE
 
71
 , lOCALE_IFIRSTWEEKOFYEAR = LOCALE_IFIRSTWEEKOFYEAR
 
72
 , lOCALE_SMONDECIMALSEP = LOCALE_SMONDECIMALSEP
 
73
 , lOCALE_ILZERO        = LOCALE_ILZERO
 
74
 , lOCALE_SMONGROUPING  = LOCALE_SMONGROUPING
 
75
 , lOCALE_IMEASURE      = LOCALE_IMEASURE
 
76
 , lOCALE_SMONTHOUSANDSEP = LOCALE_SMONTHOUSANDSEP
 
77
 , lOCALE_INEGCURR      = LOCALE_INEGCURR
 
78
 , lOCALE_SNEGATIVESIGN = LOCALE_SNEGATIVESIGN
 
79
 , lOCALE_INEGNUMBER    = LOCALE_INEGNUMBER
 
80
 , lOCALE_SPOSITIVESIGN = LOCALE_SPOSITIVESIGN
 
81
 , lOCALE_SSHORTDATE    = LOCALE_SSHORTDATE
 
82
 , lOCALE_ITIME         = LOCALE_ITIME
 
83
 , lOCALE_STHOUSAND     = LOCALE_STHOUSAND
 
84
 , lOCALE_S1159         = LOCALE_S1159
 
85
 , lOCALE_STIME         = LOCALE_STIME
 
86
 , lOCALE_S2359         = LOCALE_S2359
 
87
 , lOCALE_STIMEFORMAT   = LOCALE_STIMEFORMAT
 
88
 , lOCALE_SCURRENCY     = LOCALE_SCURRENCY
 
89
 }
 
90
 
 
91
setLocaleInfo :: LCID -> LCTYPE -> String -> IO ()
 
92
setLocaleInfo locale ty info =
 
93
  withTString info $ \ c_info ->
 
94
  failIfFalse_ "SetLocaleInfo" $ c_SetLocaleInfo locale ty c_info
 
95
foreign import stdcall unsafe "windows.h SetLocaleInfoW"
 
96
  c_SetLocaleInfo :: LCID -> LCTYPE -> LPCTSTR -> IO Bool
 
97
 
 
98
type LCMapFlags = DWORD
 
99
 
 
100
#{enum LCMapFlags,
 
101
 , lCMAP_BYTEREV        = LCMAP_BYTEREV
 
102
 , lCMAP_FULLWIDTH      = LCMAP_FULLWIDTH
 
103
 , lCMAP_HALFWIDTH      = LCMAP_HALFWIDTH
 
104
 , lCMAP_HIRAGANA       = LCMAP_HIRAGANA
 
105
 , lCMAP_KATAKANA       = LCMAP_KATAKANA
 
106
 , lCMAP_LOWERCASE      = LCMAP_LOWERCASE
 
107
 , lCMAP_SORTKEY        = LCMAP_SORTKEY
 
108
 , lCMAP_UPPERCASE      = LCMAP_UPPERCASE
 
109
 , nORM_IGNORECASE      = NORM_IGNORECASE
 
110
 , nORM_IGNORENONSPACE  = NORM_IGNORENONSPACE
 
111
 , nORM_IGNOREKANATYPE  = NORM_IGNOREKANATYPE
 
112
 , nORM_IGNORESYMBOLS   = NORM_IGNORESYMBOLS
 
113
 , nORM_IGNOREWIDTH     = NORM_IGNOREWIDTH
 
114
 , sORT_STRINGSORT      = SORT_STRINGSORT
 
115
 , lCMAP_LINGUISTIC_CASING      = LCMAP_LINGUISTIC_CASING
 
116
 , lCMAP_SIMPLIFIED_CHINESE     = LCMAP_SIMPLIFIED_CHINESE
 
117
 , lCMAP_TRADITIONAL_CHINESE    = LCMAP_TRADITIONAL_CHINESE
 
118
 }
 
119
 
 
120
lCMapString :: LCID -> LCMapFlags -> String -> Int -> IO String
 
121
lCMapString locale flags src dest_size =
 
122
  withTStringLen src $ \ (c_src, src_len) ->
 
123
  allocaArray dest_size $ \ c_dest -> do
 
124
  _ <- failIfZero "LCMapString" $
 
125
    c_LCMapString locale flags c_src src_len c_dest dest_size
 
126
  peekTString c_dest
 
127
foreign import stdcall unsafe "windows.h LCMapStringW"
 
128
  c_LCMapString :: LCID -> LCMapFlags -> LPCTSTR -> Int -> LPCTSTR -> Int -> IO Int
 
129
 
 
130
type LocaleTestFlags = DWORD
 
131
 
 
132
#{enum LocaleTestFlags,
 
133
 , lCID_INSTALLED       = LCID_INSTALLED
 
134
 , lCID_SUPPORTED       = LCID_SUPPORTED
 
135
 }
 
136
 
 
137
foreign import stdcall unsafe "windows.h IsValidLocale"
 
138
  isValidLocale :: LCID -> LocaleTestFlags -> IO Bool
 
139
 
 
140
foreign import stdcall unsafe "windows.h IsValidCodePage"
 
141
  isValidCodePage :: CodePage -> IO Bool
 
142
 
 
143
foreign import stdcall unsafe "windows.h GetUserDefaultLCID"
 
144
  getUserDefaultLCID :: LCID
 
145
 
 
146
foreign import stdcall unsafe "windows.h GetUserDefaultLangID"
 
147
  getUserDefaultLangID :: LANGID
 
148
 
 
149
foreign import stdcall unsafe "windows.h GetThreadLocale"
 
150
  getThreadLocale :: IO LCID
 
151
 
 
152
foreign import stdcall unsafe "windows.h GetSystemDefaultLCID"
 
153
  getSystemDefaultLCID :: LCID
 
154
 
 
155
foreign import stdcall unsafe "windows.h GetSystemDefaultLangID"
 
156
  getSystemDefaultLangID :: LANGID
 
157
 
 
158
foreign import stdcall unsafe "windows.h GetOEMCP"
 
159
  getOEMCP :: CodePage
 
160
 
 
161
#{enum PrimaryLANGID,
 
162
 , lANG_NEUTRAL         = LANG_NEUTRAL
 
163
 , lANG_BULGARIAN       = LANG_BULGARIAN
 
164
 , lANG_CHINESE         = LANG_CHINESE
 
165
 , lANG_CZECH           = LANG_CZECH
 
166
 , lANG_DANISH          = LANG_DANISH
 
167
 , lANG_GERMAN          = LANG_GERMAN
 
168
 , lANG_GREEK           = LANG_GREEK
 
169
 , lANG_ENGLISH         = LANG_ENGLISH
 
170
 , lANG_SPANISH         = LANG_SPANISH
 
171
 , lANG_FINNISH         = LANG_FINNISH
 
172
 , lANG_FRENCH          = LANG_FRENCH
 
173
 , lANG_HUNGARIAN       = LANG_HUNGARIAN
 
174
 , lANG_ICELANDIC       = LANG_ICELANDIC
 
175
 , lANG_ITALIAN         = LANG_ITALIAN
 
176
 , lANG_JAPANESE        = LANG_JAPANESE
 
177
 , lANG_KOREAN          = LANG_KOREAN
 
178
 , lANG_DUTCH           = LANG_DUTCH
 
179
 , lANG_NORWEGIAN       = LANG_NORWEGIAN
 
180
 , lANG_POLISH          = LANG_POLISH
 
181
 , lANG_PORTUGUESE      = LANG_PORTUGUESE
 
182
 , lANG_ROMANIAN        = LANG_ROMANIAN
 
183
 , lANG_RUSSIAN         = LANG_RUSSIAN
 
184
 , lANG_CROATIAN        = LANG_CROATIAN
 
185
 , lANG_SLOVAK          = LANG_SLOVAK
 
186
 , lANG_SWEDISH         = LANG_SWEDISH
 
187
 , lANG_TURKISH         = LANG_TURKISH
 
188
 , lANG_SLOVENIAN       = LANG_SLOVENIAN
 
189
 , lANG_ARABIC          = LANG_ARABIC
 
190
 , lANG_CATALAN         = LANG_CATALAN
 
191
 , lANG_HEBREW          = LANG_HEBREW
 
192
 , lANG_SERBIAN         = LANG_SERBIAN
 
193
 , lANG_ALBANIAN        = LANG_ALBANIAN
 
194
 , lANG_THAI            = LANG_THAI
 
195
 , lANG_URDU            = LANG_URDU
 
196
 , lANG_INDONESIAN      = LANG_INDONESIAN
 
197
 , lANG_BELARUSIAN      = LANG_BELARUSIAN
 
198
 , lANG_ESTONIAN        = LANG_ESTONIAN
 
199
 , lANG_LATVIAN         = LANG_LATVIAN
 
200
 , lANG_LITHUANIAN      = LANG_LITHUANIAN
 
201
 , lANG_FARSI           = LANG_FARSI
 
202
 , lANG_VIETNAMESE      = LANG_VIETNAMESE
 
203
 , lANG_ARMENIAN        = LANG_ARMENIAN
 
204
 , lANG_AZERI           = LANG_AZERI
 
205
 , lANG_BASQUE          = LANG_BASQUE
 
206
 , lANG_MACEDONIAN      = LANG_MACEDONIAN
 
207
 , lANG_AFRIKAANS       = LANG_AFRIKAANS
 
208
 , lANG_GEORGIAN        = LANG_GEORGIAN
 
209
 , lANG_FAEROESE        = LANG_FAEROESE
 
210
 , lANG_HINDI           = LANG_HINDI
 
211
 , lANG_MALAY           = LANG_MALAY
 
212
 , lANG_KAZAK           = LANG_KAZAK
 
213
 , lANG_SWAHILI         = LANG_SWAHILI
 
214
 , lANG_UZBEK           = LANG_UZBEK
 
215
 , lANG_TATAR           = LANG_TATAR
 
216
 , lANG_BENGALI         = LANG_BENGALI
 
217
 , lANG_PUNJABI         = LANG_PUNJABI
 
218
 , lANG_GUJARATI        = LANG_GUJARATI
 
219
 , lANG_ORIYA           = LANG_ORIYA
 
220
 , lANG_TAMIL           = LANG_TAMIL
 
221
 , lANG_TELUGU          = LANG_TELUGU
 
222
 , lANG_KANNADA         = LANG_KANNADA
 
223
 , lANG_MALAYALAM       = LANG_MALAYALAM
 
224
 , lANG_ASSAMESE        = LANG_ASSAMESE
 
225
 , lANG_MARATHI         = LANG_MARATHI
 
226
 , lANG_SANSKRIT        = LANG_SANSKRIT
 
227
 , lANG_KONKANI         = LANG_KONKANI
 
228
 , lANG_MANIPURI        = LANG_MANIPURI
 
229
 , lANG_SINDHI          = LANG_SINDHI
 
230
 , lANG_KASHMIRI        = LANG_KASHMIRI
 
231
 , lANG_NEPALI          = LANG_NEPALI
 
232
 }
 
233
 
 
234
#{enum SortID,
 
235
 , sORT_DEFAULT         = SORT_DEFAULT
 
236
 , sORT_JAPANESE_XJIS   = SORT_JAPANESE_XJIS
 
237
 , sORT_JAPANESE_UNICODE = SORT_JAPANESE_UNICODE
 
238
 , sORT_CHINESE_BIG5    = SORT_CHINESE_BIG5
 
239
 , sORT_CHINESE_UNICODE = SORT_CHINESE_UNICODE
 
240
 , sORT_KOREAN_KSC      = SORT_KOREAN_KSC
 
241
 , sORT_KOREAN_UNICODE  = SORT_KOREAN_UNICODE
 
242
 }
 
243
 
 
244
#{enum SubLANGID,
 
245
 , sUBLANG_NEUTRAL                      = SUBLANG_NEUTRAL
 
246
 , sUBLANG_DEFAULT                      = SUBLANG_DEFAULT
 
247
 , sUBLANG_SYS_DEFAULT                  = SUBLANG_SYS_DEFAULT
 
248
 , sUBLANG_CHINESE_TRADITIONAL          = SUBLANG_CHINESE_TRADITIONAL
 
249
 , sUBLANG_CHINESE_SIMPLIFIED           = SUBLANG_CHINESE_SIMPLIFIED
 
250
 , sUBLANG_CHINESE_HONGKONG             = SUBLANG_CHINESE_HONGKONG
 
251
 , sUBLANG_CHINESE_SINGAPORE            = SUBLANG_CHINESE_SINGAPORE
 
252
 , sUBLANG_DUTCH                        = SUBLANG_DUTCH
 
253
 , sUBLANG_DUTCH_BELGIAN                = SUBLANG_DUTCH_BELGIAN
 
254
 , sUBLANG_ENGLISH_US                   = SUBLANG_ENGLISH_US
 
255
 , sUBLANG_ENGLISH_UK                   = SUBLANG_ENGLISH_UK
 
256
 , sUBLANG_ENGLISH_AUS                  = SUBLANG_ENGLISH_AUS
 
257
 , sUBLANG_ENGLISH_CAN                  = SUBLANG_ENGLISH_CAN
 
258
 , sUBLANG_ENGLISH_NZ                   = SUBLANG_ENGLISH_NZ
 
259
 , sUBLANG_ENGLISH_EIRE                 = SUBLANG_ENGLISH_EIRE
 
260
 , sUBLANG_FRENCH                       = SUBLANG_FRENCH
 
261
 , sUBLANG_FRENCH_BELGIAN               = SUBLANG_FRENCH_BELGIAN
 
262
 , sUBLANG_FRENCH_CANADIAN              = SUBLANG_FRENCH_CANADIAN
 
263
 , sUBLANG_FRENCH_SWISS                 = SUBLANG_FRENCH_SWISS
 
264
 , sUBLANG_GERMAN                       = SUBLANG_GERMAN
 
265
 , sUBLANG_GERMAN_SWISS                 = SUBLANG_GERMAN_SWISS
 
266
 , sUBLANG_GERMAN_AUSTRIAN              = SUBLANG_GERMAN_AUSTRIAN
 
267
 , sUBLANG_ITALIAN                      = SUBLANG_ITALIAN
 
268
 , sUBLANG_ITALIAN_SWISS                = SUBLANG_ITALIAN_SWISS
 
269
 , sUBLANG_NORWEGIAN_BOKMAL             = SUBLANG_NORWEGIAN_BOKMAL
 
270
 , sUBLANG_NORWEGIAN_NYNORSK            = SUBLANG_NORWEGIAN_NYNORSK
 
271
 , sUBLANG_PORTUGUESE                   = SUBLANG_PORTUGUESE
 
272
 , sUBLANG_PORTUGUESE_BRAZILIAN         = SUBLANG_PORTUGUESE_BRAZILIAN
 
273
 , sUBLANG_SPANISH                      = SUBLANG_SPANISH
 
274
 , sUBLANG_SPANISH_MEXICAN              = SUBLANG_SPANISH_MEXICAN
 
275
 , sUBLANG_SPANISH_MODERN               = SUBLANG_SPANISH_MODERN
 
276
 , sUBLANG_ARABIC_SAUDI_ARABIA          = SUBLANG_ARABIC_SAUDI_ARABIA
 
277
 , sUBLANG_ARABIC_IRAQ                  = SUBLANG_ARABIC_IRAQ
 
278
 , sUBLANG_ARABIC_EGYPT                 = SUBLANG_ARABIC_EGYPT
 
279
 , sUBLANG_ARABIC_LIBYA                 = SUBLANG_ARABIC_LIBYA
 
280
 , sUBLANG_ARABIC_ALGERIA               = SUBLANG_ARABIC_ALGERIA
 
281
 , sUBLANG_ARABIC_MOROCCO               = SUBLANG_ARABIC_MOROCCO
 
282
 , sUBLANG_ARABIC_TUNISIA               = SUBLANG_ARABIC_TUNISIA
 
283
 , sUBLANG_ARABIC_OMAN                  = SUBLANG_ARABIC_OMAN
 
284
 , sUBLANG_ARABIC_YEMEN                 = SUBLANG_ARABIC_YEMEN
 
285
 , sUBLANG_ARABIC_SYRIA                 = SUBLANG_ARABIC_SYRIA
 
286
 , sUBLANG_ARABIC_JORDAN                = SUBLANG_ARABIC_JORDAN
 
287
 , sUBLANG_ARABIC_LEBANON               = SUBLANG_ARABIC_LEBANON
 
288
 , sUBLANG_ARABIC_KUWAIT                = SUBLANG_ARABIC_KUWAIT
 
289
 , sUBLANG_ARABIC_UAE                   = SUBLANG_ARABIC_UAE
 
290
 , sUBLANG_ARABIC_BAHRAIN               = SUBLANG_ARABIC_BAHRAIN
 
291
 , sUBLANG_ARABIC_QATAR                 = SUBLANG_ARABIC_QATAR
 
292
 , sUBLANG_AZERI_CYRILLIC               = SUBLANG_AZERI_CYRILLIC
 
293
 , sUBLANG_AZERI_LATIN                  = SUBLANG_AZERI_LATIN
 
294
 , sUBLANG_CHINESE_MACAU                = SUBLANG_CHINESE_MACAU
 
295
 , sUBLANG_ENGLISH_SOUTH_AFRICA         = SUBLANG_ENGLISH_SOUTH_AFRICA
 
296
 , sUBLANG_ENGLISH_JAMAICA              = SUBLANG_ENGLISH_JAMAICA
 
297
 , sUBLANG_ENGLISH_CARIBBEAN            = SUBLANG_ENGLISH_CARIBBEAN
 
298
 , sUBLANG_ENGLISH_BELIZE               = SUBLANG_ENGLISH_BELIZE
 
299
 , sUBLANG_ENGLISH_TRINIDAD             = SUBLANG_ENGLISH_TRINIDAD
 
300
 , sUBLANG_ENGLISH_PHILIPPINES          = SUBLANG_ENGLISH_PHILIPPINES
 
301
 , sUBLANG_ENGLISH_ZIMBABWE             = SUBLANG_ENGLISH_ZIMBABWE
 
302
 , sUBLANG_FRENCH_LUXEMBOURG            = SUBLANG_FRENCH_LUXEMBOURG
 
303
 , sUBLANG_FRENCH_MONACO                = SUBLANG_FRENCH_MONACO
 
304
 , sUBLANG_GERMAN_LUXEMBOURG            = SUBLANG_GERMAN_LUXEMBOURG
 
305
 , sUBLANG_GERMAN_LIECHTENSTEIN         = SUBLANG_GERMAN_LIECHTENSTEIN
 
306
 , sUBLANG_KASHMIRI_INDIA               = SUBLANG_KASHMIRI_INDIA
 
307
 , sUBLANG_KOREAN                       = SUBLANG_KOREAN
 
308
 , sUBLANG_LITHUANIAN                   = SUBLANG_LITHUANIAN
 
309
 , sUBLANG_MALAY_MALAYSIA               = SUBLANG_MALAY_MALAYSIA
 
310
 , sUBLANG_MALAY_BRUNEI_DARUSSALAM      = SUBLANG_MALAY_BRUNEI_DARUSSALAM
 
311
 , sUBLANG_NEPALI_INDIA                 = SUBLANG_NEPALI_INDIA
 
312
 , sUBLANG_SERBIAN_LATIN                = SUBLANG_SERBIAN_LATIN
 
313
 , sUBLANG_SERBIAN_CYRILLIC             = SUBLANG_SERBIAN_CYRILLIC
 
314
 , sUBLANG_SPANISH_GUATEMALA            = SUBLANG_SPANISH_GUATEMALA
 
315
 , sUBLANG_SPANISH_COSTA_RICA           = SUBLANG_SPANISH_COSTA_RICA
 
316
 , sUBLANG_SPANISH_PANAMA               = SUBLANG_SPANISH_PANAMA
 
317
 , sUBLANG_SPANISH_DOMINICAN_REPUBLIC   = SUBLANG_SPANISH_DOMINICAN_REPUBLIC
 
318
 , sUBLANG_SPANISH_VENEZUELA            = SUBLANG_SPANISH_VENEZUELA
 
319
 , sUBLANG_SPANISH_COLOMBIA             = SUBLANG_SPANISH_COLOMBIA
 
320
 , sUBLANG_SPANISH_PERU                 = SUBLANG_SPANISH_PERU
 
321
 , sUBLANG_SPANISH_ARGENTINA            = SUBLANG_SPANISH_ARGENTINA
 
322
 , sUBLANG_SPANISH_ECUADOR              = SUBLANG_SPANISH_ECUADOR
 
323
 , sUBLANG_SPANISH_CHILE                = SUBLANG_SPANISH_CHILE
 
324
 , sUBLANG_SPANISH_URUGUAY              = SUBLANG_SPANISH_URUGUAY
 
325
 , sUBLANG_SPANISH_PARAGUAY             = SUBLANG_SPANISH_PARAGUAY
 
326
 , sUBLANG_SPANISH_BOLIVIA              = SUBLANG_SPANISH_BOLIVIA
 
327
 , sUBLANG_SPANISH_EL_SALVADOR          = SUBLANG_SPANISH_EL_SALVADOR
 
328
 , sUBLANG_SPANISH_HONDURAS             = SUBLANG_SPANISH_HONDURAS
 
329
 , sUBLANG_SPANISH_NICARAGUA            = SUBLANG_SPANISH_NICARAGUA
 
330
 , sUBLANG_SPANISH_PUERTO_RICO          = SUBLANG_SPANISH_PUERTO_RICO
 
331
 , sUBLANG_SWEDISH                      = SUBLANG_SWEDISH
 
332
 , sUBLANG_SWEDISH_FINLAND              = SUBLANG_SWEDISH_FINLAND
 
333
 , sUBLANG_URDU_PAKISTAN                = SUBLANG_URDU_PAKISTAN
 
334
 , sUBLANG_URDU_INDIA                   = SUBLANG_URDU_INDIA
 
335
 , sUBLANG_UZBEK_LATIN                  = SUBLANG_UZBEK_LATIN
 
336
 , sUBLANG_UZBEK_CYRILLIC               = SUBLANG_UZBEK_CYRILLIC
 
337
 }
 
338
 
 
339
-- , SUBLANG_LITHUANIAN_CLASSIC (not in mingw-20001111)
 
340
 
 
341
-- ----------------------------------------------------------------------------
 
342
 
 
343
-- | The `System.IO` input functions (e.g. `getLine`) don't
 
344
-- automatically convert to Unicode, so this function is provided to
 
345
-- make the conversion from a multibyte string in the given code page 
 
346
-- to a proper Unicode string.  To get the code page for the console,
 
347
-- use `getConsoleCP`.
 
348
 
 
349
stringToUnicode :: CodePage -> String -> IO String
 
350
stringToUnicode _cp "" = return ""
 
351
     -- MultiByteToWideChar doesn't handle empty strings (#1929)
 
352
stringToUnicode cp mbstr =
 
353
  withCStringLen mbstr $ \(cstr,len) -> do
 
354
    wchars <- failIfZero "MultiByteToWideChar" $ multiByteToWideChar 
 
355
                cp
 
356
                0
 
357
                cstr
 
358
                (fromIntegral len)
 
359
                nullPtr 0
 
360
    -- wchars is the length of buffer required
 
361
    allocaArray (fromIntegral wchars) $ \cwstr -> do
 
362
      wchars <- failIfZero "MultiByteToWideChar" $ multiByteToWideChar 
 
363
                cp
 
364
                0
 
365
                cstr
 
366
                (fromIntegral len)
 
367
                cwstr wchars
 
368
      peekCWStringLen (cwstr,fromIntegral wchars)  -- converts UTF-16 to [Char]
 
369
 
 
370
foreign import stdcall unsafe "MultiByteToWideChar"
 
371
  multiByteToWideChar
 
372
        :: CodePage
 
373
        -> DWORD   -- dwFlags,
 
374
        -> LPCSTR  -- lpMultiByteStr
 
375
        -> CInt    -- cbMultiByte
 
376
        -> LPWSTR  -- lpWideCharStr
 
377
        -> CInt    -- cchWideChar
 
378
        -> IO CInt