root/usr/src/uts/common/smbsrv/ntlocale.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _SMBSRV_NTLOCALE_H
#define _SMBSRV_NTLOCALE_H

/*
 * NT language and locale identifiers.
 */

#ifdef __cplusplus
extern "C" {
#endif


/*
 * Language IDs.
 *
 * A language ID is a 16 bit value which is the combination of a
 * primary language ID and a secondary language ID. The bits are
 * allocated as follows:
 *
 *      +-----------------------+-------------------------+
 *      |     Sublanguage ID    |   Primary Language ID   |
 *      +-----------------------+-------------------------+
 *       15                   10 9                       0   bit
 *
 * The following two combinations of primary language ID and sub-
 * language ID have special semantics:
 *
 * Primary Language ID   Sublanguage ID      Result
 * -------------------   ---------------     ------------------------
 * LANG_NEUTRAL          SUBLANG_NEUTRAL     Language neutral
 * LANG_NEUTRAL          SUBLANG_DEFAULT     User default language
 * LANG_NEUTRAL          SUBLANG_SYS_DEFAULT System default language
 *
 * Language ID creation/extraction macros:
 * MAKELANGID    - construct language id from a primary language
 *                 id and a sublanguage id.
 * PRIMARYLANGID - extract primary language id from a language id.
 * SUBLANGID     - extract sublanguage id from a language id.
 */
#define MAKELANGID(p, s)        ((((WORD)(s)) << 10) | (WORD)(p))
#define PRIMARYLANGID(lgid)     ((WORD)(lgid) & 0x3ff)
#define SUBLANGID(lgid)         ((WORD)(lgid) >> 10)


/*
 * Primary language IDs.
 */
#define LANG_NEUTRAL                    0x00

#define LANG_AFRIKAANS                  0x36
#define LANG_ALBANIAN                   0x1c
#define LANG_ARABIC                     0x01
#define LANG_ARMENIAN                   0x2b
#define LANG_ASSAMESE                   0x4d
#define LANG_AZERI                      0x2c
#define LANG_BASQUE                     0x2d
#define LANG_BELARUSIAN                 0x23
#define LANG_BENGALI                    0x45
#define LANG_BULGARIAN                  0x02
#define LANG_CATALAN                    0x03
#define LANG_CHINESE                    0x04
#define LANG_CROATIAN                   0x1a
#define LANG_CZECH                      0x05
#define LANG_DANISH                     0x06
#define LANG_DUTCH                      0x13
#define LANG_ENGLISH                    0x09
#define LANG_ESTONIAN                   0x25
#define LANG_FAEROESE                   0x38
#define LANG_FARSI                      0x29
#define LANG_FINNISH                    0x0b
#define LANG_FRENCH                     0x0c
#define LANG_GEORGIAN                   0x37
#define LANG_GERMAN                     0x07
#define LANG_GREEK                      0x08
#define LANG_GUJARATI                   0x47
#define LANG_HEBREW                     0x0d
#define LANG_HINDI                      0x39
#define LANG_HUNGARIAN                  0x0e
#define LANG_ICELANDIC                  0x0f
#define LANG_INDONESIAN                 0x21
#define LANG_ITALIAN                    0x10
#define LANG_JAPANESE                   0x11
#define LANG_KANNADA                    0x4b
#define LANG_KASHMIRI                   0x60
#define LANG_KAZAK                      0x3f
#define LANG_KONKANI                    0x57
#define LANG_KOREAN                     0x12
#define LANG_LATVIAN                    0x26
#define LANG_LITHUANIAN                 0x27
#define LANG_MACEDONIAN                 0x2f
#define LANG_MALAY                      0x3e
#define LANG_MALAYALAM                  0x4c
#define LANG_MANIPURI                   0x58
#define LANG_MARATHI                    0x4e
#define LANG_NEPALI                     0x61
#define LANG_NORWEGIAN                  0x14
#define LANG_ORIYA                      0x48
#define LANG_POLISH                     0x15
#define LANG_PORTUGUESE                 0x16
#define LANG_PUNJABI                    0x46
#define LANG_ROMANIAN                   0x18
#define LANG_RUSSIAN                    0x19
#define LANG_SANSKRIT                   0x4f
#define LANG_SERBIAN                    0x1a
#define LANG_SINDHI                     0x59
#define LANG_SLOVAK                     0x1b
#define LANG_SLOVENIAN                  0x24
#define LANG_SPANISH                    0x0a
#define LANG_SWAHILI                    0x41
#define LANG_SWEDISH                    0x1d
#define LANG_TAMIL                      0x49
#define LANG_TATAR                      0x44
#define LANG_TELUGU                     0x4a
#define LANG_THAI                       0x1e
#define LANG_TURKISH                    0x1f
#define LANG_UKRAINIAN                  0x22
#define LANG_URDU                       0x20
#define LANG_UZBEK                      0x43
#define LANG_VIETNAMESE                 0x2a


/*
 * Sublanguage IDs.
 *
 * The name immediately following SUBLANG_ dictates which primary
 * language ID can be combined with the sub-language ID to form a
 * valid language ID.
 */
#define SUBLANG_NEUTRAL                 0x00    /* language neutral */
#define SUBLANG_DEFAULT                 0x01    /* user default */
#define SUBLANG_SYS_DEFAULT             0x02    /* system default */

#define SUBLANG_ARABIC_SAUDI_ARABIA     0x01    /* Arabic (Saudi Arabia) */
#define SUBLANG_ARABIC_IRAQ             0x02    /* Arabic (Iraq) */
#define SUBLANG_ARABIC_EGYPT            0x03    /* Arabic (Egypt) */
#define SUBLANG_ARABIC_LIBYA            0x04    /* Arabic (Libya) */
#define SUBLANG_ARABIC_ALGERIA          0x05    /* Arabic (Algeria) */
#define SUBLANG_ARABIC_MOROCCO          0x06    /* Arabic (Morocco) */
#define SUBLANG_ARABIC_TUNISIA          0x07    /* Arabic (Tunisia) */
#define SUBLANG_ARABIC_OMAN             0x08    /* Arabic (Oman) */
#define SUBLANG_ARABIC_YEMEN            0x09    /* Arabic (Yemen) */
#define SUBLANG_ARABIC_SYRIA            0x0a    /* Arabic (Syria) */
#define SUBLANG_ARABIC_JORDAN           0x0b    /* Arabic (Jordan) */
#define SUBLANG_ARABIC_LEBANON          0x0c    /* Arabic (Lebanon) */
#define SUBLANG_ARABIC_KUWAIT           0x0d    /* Arabic (Kuwait) */
#define SUBLANG_ARABIC_UAE              0x0e    /* Arabic (U.A.E) */
#define SUBLANG_ARABIC_BAHRAIN          0x0f    /* Arabic (Bahrain) */
#define SUBLANG_ARABIC_QATAR            0x10    /* Arabic (Qatar) */
#define SUBLANG_AZERI_LATIN             0x01    /* Azeri (Latin) */
#define SUBLANG_AZERI_CYRILLIC          0x02    /* Azeri (Cyrillic) */
#define SUBLANG_CHINESE_TRADITIONAL     0x01    /* Chinese (Taiwan Region) */
#define SUBLANG_CHINESE_SIMPLIFIED      0x02    /* Chinese (PR China) */
#define SUBLANG_CHINESE_HONGKONG        0x03    /* Chinese (Hong Kong) */
#define SUBLANG_CHINESE_SINGAPORE       0x04    /* Chinese (Singapore) */
#define SUBLANG_CHINESE_MACAU           0x05    /* Chinese (Macau) */
#define SUBLANG_DUTCH                   0x01    /* Dutch */
#define SUBLANG_DUTCH_BELGIAN           0x02    /* Dutch (Belgian) */
#define SUBLANG_ENGLISH_US              0x01    /* English (USA) */
#define SUBLANG_ENGLISH_UK              0x02    /* English (UK) */
#define SUBLANG_ENGLISH_AUS             0x03    /* English (Australian) */
#define SUBLANG_ENGLISH_CAN             0x04    /* English (Canadian) */
#define SUBLANG_ENGLISH_NZ              0x05    /* English (New Zealand) */
#define SUBLANG_ENGLISH_EIRE            0x06    /* English (Irish) */
#define SUBLANG_ENGLISH_SOUTH_AFRICA    0x07    /* English (South Africa) */
#define SUBLANG_ENGLISH_JAMAICA         0x08    /* English (Jamaica) */
#define SUBLANG_ENGLISH_CARIBBEAN       0x09    /* English (Caribbean) */
#define SUBLANG_ENGLISH_BELIZE          0x0a    /* English (Belize) */
#define SUBLANG_ENGLISH_TRINIDAD        0x0b    /* English (Trinidad) */
#define SUBLANG_ENGLISH_ZIMBABWE        0x0c    /* English (Zimbabwe) */
#define SUBLANG_ENGLISH_PHILIPPINES     0x0d    /* English (Philippines) */
#define SUBLANG_FRENCH                  0x01    /* French */
#define SUBLANG_FRENCH_BELGIAN          0x02    /* French (Belgian) */
#define SUBLANG_FRENCH_CANADIAN         0x03    /* French (Canadian) */
#define SUBLANG_FRENCH_SWISS            0x04    /* French (Swiss) */
#define SUBLANG_FRENCH_LUXEMBOURG       0x05    /* French (Luxembourg) */
#define SUBLANG_FRENCH_MONACO           0x06    /* French (Monaco) */
#define SUBLANG_GERMAN                  0x01    /* German */
#define SUBLANG_GERMAN_SWISS            0x02    /* German (Swiss) */
#define SUBLANG_GERMAN_AUSTRIAN         0x03    /* German (Austrian) */
#define SUBLANG_GERMAN_LUXEMBOURG       0x04    /* German (Luxembourg) */
#define SUBLANG_GERMAN_LIECHTENSTEIN    0x05    /* German (Liechtenstein) */
#define SUBLANG_ITALIAN                 0x01    /* Italian */
#define SUBLANG_ITALIAN_SWISS           0x02    /* Italian (Swiss) */
#define SUBLANG_KASHMIRI_INDIA          0x02    /* Kashmiri (India) */
#define SUBLANG_KOREAN                  0x01    /* Korean (Extended Wansung) */
#define SUBLANG_LITHUANIAN              0x01    /* Lithuanian */
#define SUBLANG_LITHUANIAN_CLASSIC      0x02    /* Lithuanian (Classic) */
#define SUBLANG_MALAY_MALAYSIA          0x01    /* Malay (Malaysia) */
#define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02    /* Malay (Brunei Darussalam) */
#define SUBLANG_NEPALI_INDIA            0x02    /* Nepali (India) */
#define SUBLANG_NORWEGIAN_BOKMAL        0x01    /* Norwegian (Bokmal) */
#define SUBLANG_NORWEGIAN_NYNORSK       0x02    /* Norwegian (Nynorsk) */
#define SUBLANG_PORTUGUESE              0x02    /* Portuguese */
#define SUBLANG_PORTUGUESE_BRAZILIAN    0x01    /* Portuguese (Brazilian) */
#define SUBLANG_SERBIAN_LATIN           0x02    /* Serbian (Latin) */
#define SUBLANG_SERBIAN_CYRILLIC        0x03    /* Serbian (Cyrillic) */
#define SUBLANG_SPANISH                 0x01    /* Spanish (Castilian) */
#define SUBLANG_SPANISH_MEXICAN         0x02    /* Spanish (Mexican) */
#define SUBLANG_SPANISH_MODERN          0x03    /* Spanish (Modern) */
#define SUBLANG_SPANISH_GUATEMALA       0x04    /* Spanish (Guatemala) */
#define SUBLANG_SPANISH_COSTA_RICA      0x05    /* Spanish (Costa Rica) */
#define SUBLANG_SPANISH_PANAMA          0x06    /* Spanish (Panama) */
#define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 /* Spanish (Dom. Republic) */
#define SUBLANG_SPANISH_VENEZUELA       0x08    /* Spanish (Venezuela) */
#define SUBLANG_SPANISH_COLOMBIA        0x09    /* Spanish (Colombia) */
#define SUBLANG_SPANISH_PERU            0x0a    /* Spanish (Peru) */
#define SUBLANG_SPANISH_ARGENTINA       0x0b    /* Spanish (Argentina) */
#define SUBLANG_SPANISH_ECUADOR         0x0c    /* Spanish (Ecuador) */
#define SUBLANG_SPANISH_CHILE           0x0d    /* Spanish (Chile) */
#define SUBLANG_SPANISH_URUGUAY         0x0e    /* Spanish (Uruguay) */
#define SUBLANG_SPANISH_PARAGUAY        0x0f    /* Spanish (Paraguay) */
#define SUBLANG_SPANISH_BOLIVIA         0x10    /* Spanish (Bolivia) */
#define SUBLANG_SPANISH_EL_SALVADOR     0x11    /* Spanish (El Salvador) */
#define SUBLANG_SPANISH_HONDURAS        0x12    /* Spanish (Honduras) */
#define SUBLANG_SPANISH_NICARAGUA       0x13    /* Spanish (Nicaragua) */
#define SUBLANG_SPANISH_PUERTO_RICO     0x14    /* Spanish (Puerto Rico) */
#define SUBLANG_SWEDISH                 0x01    /* Swedish */
#define SUBLANG_SWEDISH_FINLAND         0x02    /* Swedish (Finland) */
#define SUBLANG_URDU_PAKISTAN           0x01    /* Urdu (Pakistan) */
#define SUBLANG_URDU_INDIA              0x02    /* Urdu (India) */
#define SUBLANG_UZBEK_LATIN             0x01    /* Uzbek (Latin) */
#define SUBLANG_UZBEK_CYRILLIC          0x02    /* Uzbek (Cyrillic) */

/*
 * Sorting IDs.
 */
#define SORT_DEFAULT                    0x0     /* sorting default */

#define SORT_JAPANESE_XJIS              0x0     /* Japanese XJIS order */
#define SORT_JAPANESE_UNICODE           0x1     /* Japanese Unicode order */

#define SORT_CHINESE_BIG5               0x0     /* Chinese BIG5 order */
#define SORT_CHINESE_PRCP               0x0     /* PRC Chinese Phonetic order */
#define SORT_CHINESE_UNICODE            0x1     /* Chinese Unicode order */
#define SORT_CHINESE_PRC                0x2     /* PRC Chinese Stroke Count */
                                                /* order */
#define SORT_CHINESE_BOPOMOFO           0x3     /* Traditional Chinese */
                                                /* Bopomofo order */

#define SORT_KOREAN_KSC                 0x0     /* Korean KSC order */
#define SORT_KOREAN_UNICODE             0x1     /* Korean Unicode order */

#define SORT_GERMAN_PHONE_BOOK          0x1     /* German Phone Book order */

#define SORT_HUNGARIAN_DEFAULT          0x0     /* Hungarian Default order */
#define SORT_HUNGARIAN_TECHNICAL        0x1     /* Hungarian Technical order */

#define SORT_GEORGIAN_TRADITIONAL       0x0     /* Georgian Traditional order */
#define SORT_GEORGIAN_MODERN            0x1     /* Georgian Modern order */


/*
 *  A locale ID is a 32 bit value which is the combination of a
 *  language ID, a sort ID, and a reserved area.  The bits are
 *  allocated as follows:
 *
 *       +-------------+---------+-------------------------+
 *       |   Reserved  | Sort ID |      Language ID        |
 *       +-------------+---------+-------------------------+
 *        31         20 19     16 15                      0   bit
 *
 *  Locale ID creation/extraction macros:
 *
 * MAKELCID            - construct the locale id from a language id
 *                       and a sort id.
 * MAKESORTLCID        - construct the locale id from a language id,
 *                       sort id, and sort version.
 * LANGIDFROMLCID      - extract the language id from a locale id.
 * SORTIDFROMLCID      - extract the sort id from a locale id.
 * SORTVERSIONFROMLCID - extract the sort version from a locale id.
 */

#define NLS_VALID_LOCALE_MASK   0x000fffff

#define MAKELCID(lgid, srtid)   \
        ((DWORD)((((DWORD)((WORD)(srtid))) << 16) | ((DWORD)((WORD)(lgid)))))

#define MAKESORTLCID(lgid, srtid, ver)  \
        ((DWORD)((MAKELCID(lgid, srtid)) | (((DWORD)((WORD)(ver))) << 20)))

#define LANGIDFROMLCID(lcid)            ((WORD)(lcid))
#define SORTIDFROMLCID(lcid)            ((WORD)((((DWORD)(lcid)) >> 16) & 0xf))
#define SORTVERSIONFROMLCID(lcid)       ((WORD)((((DWORD)(lcid)) >> 20) & 0xf))


/*
 * Default System and User IDs for language and locale.
 */
#define LANG_SYSTEM_DEFAULT     MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT))
#define LANG_USER_DEFAULT       (MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT))

#define LOCALE_SYSTEM_DEFAULT   (MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT))
#define LOCALE_USER_DEFAULT     (MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT))

#define LOCALE_NEUTRAL         \
        (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), SORT_DEFAULT))


#ifdef __cplusplus
}
#endif

#endif /* _SMBSRV_NTLOCALE_H */