| /* |
| ******************************************************************************* |
| * |
| * Copyright (C) 2000, International Business Machines |
| * Corporation and others. All Rights Reserved. |
| * |
| ******************************************************************************* |
| * file name: ucnvmbcs.h |
| * encoding: US-ASCII |
| * tab size: 8 (not used) |
| * indentation:4 |
| * |
| * created on: 2000jul07 |
| * created by: Markus W. Scherer |
| */ |
| |
| #ifndef __UCNVMBCS_H__ |
| #define __UCNVMBCS_H__ |
| |
| #include "unicode/utypes.h" |
| |
| /* MBCS converter data and state -------------------------------------------- */ |
| |
| enum { |
| MBCS_STATE_ILLEGAL, |
| MBCS_STATE_CHANGE_ONLY, |
| MBCS_STATE_UNASSIGNED, |
| |
| MBCS_STATE_FALLBACK_DIRECT_16, |
| MBCS_STATE_FALLBACK_DIRECT_20, |
| |
| MBCS_STATE_VALID_DIRECT_16, |
| MBCS_STATE_VALID_DIRECT_20, |
| |
| MBCS_STATE_VALID_16, |
| MBCS_STATE_VALID_16_PAIR |
| }; |
| |
| enum { |
| MBCS_OUTPUT_1, |
| MBCS_OUTPUT_2, |
| MBCS_OUTPUT_3, |
| MBCS_OUTPUT_4, |
| |
| MBCS_OUTPUT_3_EUC=8, |
| MBCS_OUTPUT_4_EUC |
| }; |
| |
| typedef struct { |
| uint32_t offset; |
| UChar32 codePoint; |
| } _MBCSToUFallback; |
| |
| typedef struct UConverterMBCSTable { |
| /* toUnicode */ |
| uint8_t countStates; |
| uint32_t countToUFallbacks; |
| |
| const int32_t (*stateTable)/*[countStates]*/[256]; |
| const uint16_t *unicodeCodeUnits/*[countUnicodeResults]*/; |
| const _MBCSToUFallback *toUFallbacks; |
| |
| /* fromUnicode */ |
| const uint16_t *fromUnicodeTable; |
| const uint8_t *fromUnicodeBytes; |
| uint8_t outputType; |
| } UConverterMBCSTable; |
| |
| /* |
| * MBCS data structure as part of a .cnv file: |
| * |
| * uint32_t [8]; -- 8 values: |
| * 0 MBCS version in UVersionInfo format (1.0.0.0) |
| * 1 countStates |
| * 2 countToUFallbacks |
| * 3 offsetToUCodeUnits (offsets are counted from the beginning of this header structure) |
| * 4 offsetFromUTable |
| * 5 offsetFromUBytes |
| * 6 flags, bits: |
| * 31.. 8 reserved |
| * 7.. 0 outputType |
| * 7 reserved |
| * |
| * stateTable[countStates][256]; |
| * |
| * struct { (fallbacks are sorted by offset) |
| * uint32_t offset; |
| * UChar32 codePoint; |
| * } toUFallbacks[countToUFallbacks]; |
| * |
| * uint16_t unicodeCodeUnits[?]; (even number of units or padded) |
| * |
| * uint16_t fromUTable[0x440+?]; (32-bit-aligned) |
| * |
| * uint8_t fromUBytes[?]; |
| */ |
| typedef struct { |
| UVersionInfo version; |
| uint32_t countStates, |
| countToUFallbacks, |
| offsetToUCodeUnits, |
| offsetFromUTable, |
| offsetFromUBytes, |
| flags, |
| reserved; |
| } _MBCSHeader; |
| |
| struct UConverterSharedData; |
| typedef struct UConverterSharedData UConverterSharedData; |
| |
| U_CFUNC UChar32 |
| _MBCSSimpleGetNextUChar(UConverterSharedData *sharedData, |
| const char **pSource, const char *sourceLimit, |
| UBool useFallback); |
| |
| U_CFUNC UBool |
| _MBCSIsLeadByte(UConverterSharedData *sharedData, char byte); |
| |
| U_CFUNC int32_t |
| _MBCSFromUChar32(UConverterSharedData *sharedData, |
| UChar32 c, uint32_t *pValue, |
| UBool useFallback); |
| |
| #endif |