ReactOS  0.4.14-dev-98-gb0d4763
nls.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS NLS to TXT Converter
3  * LICENSE: GNU General Public License Version 2.0 or any later version
4  * FILE: devutils/nlsedit/nls.c
5  * COPYRIGHT: Copyright 2016 Dmitry Chapyshev <dmitry@reactos.org>
6  */
7 
8 #include "precomp.h"
9 
10 static VOID
12 {
13  PNLS_FILE_HEADER NlsFileHeader;
14 
15  NlsFileHeader = (PNLS_FILE_HEADER)TableBase;
16 
17  /* Copy header fields first */
18  CodePageTable->CodePage = NlsFileHeader->CodePage;
20  CodePageTable->DefaultChar = NlsFileHeader->DefaultChar;
24 
26 
27  /* Offset to wide char table is after the header */
28  CodePageTable->WideCharTable = TableBase + NlsFileHeader->HeaderSize + 1 +
29  TableBase[NlsFileHeader->HeaderSize];
30 
31  /* Then multibyte table (256 wchars) follows */
32  CodePageTable->MultiByteTable = TableBase + NlsFileHeader->HeaderSize + 1;
33 
34  /* Check the presence of glyph table (256 wchars) */
35  if (!CodePageTable->MultiByteTable[256])
36  {
38  }
39  else
40  {
42  }
43 
44  /* Is this double-byte code page? */
46  {
49  }
50  else
51  {
54  }
55 }
56 
57 PUSHORT
59 {
60  HANDLE hFile;
61 
64  {
65  PUSHORT pData;
66  DWORD dwRead;
68 
71  if (pData != NULL)
72  {
73  if (ReadFile(hFile, pData, dwFileSize, &dwRead, NULL) != FALSE)
74  {
77 
78  return pData;
79  }
80 
81  free(pData);
82  }
83 
85  }
86 
87  return NULL;
88 }
89 
90 BOOL
92 {
94 }
95 
96 BOOL
98 {
99  return (CodePageTable->MultiByteTable[256]) ? TRUE : FALSE;
100 }
101 
102 BOOL
104 {
106  return FALSE;
107 
108  return TRUE;
109 }
110 
111 BOOL
113 {
114  USHORT CodePageChar;
115 
117  {
118  PUSHORT MultiByteTable = (PUSHORT)CodePageTable->WideCharTable;
119  CodePageChar = MultiByteTable[Char];
120  }
121  else
122  {
123  PUCHAR SingleByteTable = (PUCHAR)CodePageTable->WideCharTable;
124  CodePageChar = SingleByteTable[Char];
125  }
126 
127  if (CodePageChar != CodePageTable->DefaultChar)
128  return FALSE;
129 
130  return TRUE;
131 }
132 
133 USHORT
135 {
136  USHORT CodePageChar;
137  USHORT Count = 0;
138 
139  for (CodePageChar = 0; CodePageChar <= 0xFF; CodePageChar++)
140  {
141  if (!NLS_IsDefaultCharForMB(CodePageTable, CodePageChar))
142  Count++;
143  }
144 
145  return Count;
146 }
147 
148 USHORT
150 {
151  ULONG UnicodeChar;
152  USHORT Count = 0;
153 
154  for (UnicodeChar = 0; UnicodeChar <= 0xFFFF; UnicodeChar++)
155  {
156  if (!NLS_IsDefaultCharForUnicode(CodePageTable, UnicodeChar))
157  Count++;
158  }
159 
160  return Count;
161 }
162 
163 USHORT
165 {
166  USHORT Count = 0;
167 
169  {
170  PUSHORT GlyphTable = CodePageTable->MultiByteTable + 256 + 1;
171  USHORT CodePageChar;
172 
173  for (CodePageChar = 0; CodePageChar <= 0xFF; CodePageChar++)
174  {
175  USHORT Char = GlyphTable[CodePageChar];
176 
177  if (Char != CodePageTable->UniDefaultChar)
178  Count++;
179  }
180  }
181 
182  return Count;
183 }
184 
185 USHORT
187 {
188  PUSHORT LeadByteInfo = CodePageTable->DBCSOffsets;
189  USHORT CodePageChar;
190  USHORT Count = 0;
191 
192  for (CodePageChar = 0; CodePageChar <= 0xFF; CodePageChar++)
193  {
194  USHORT Info = LeadByteInfo[LeadByte];
195 
196  if (Info && LeadByteInfo[Info + CodePageChar] != CodePageTable->UniDefaultChar)
197  {
198  Count++;
199  }
200  }
201 
202  return Count;
203 }
USHORT NLS_RecordsCountForUnicodeTable(PCPTABLEINFO CodePageTable)
Definition: nls.c:149
USHORT NLS_RecordsCountForMBTable(PCPTABLEINFO CodePageTable)
Definition: nls.c:134
#define TRUE
Definition: types.h:120
#define CloseHandle
Definition: compat.h:398
USHORT UniDefaultChar
Definition: precomp.h:35
USHORT CodePage
Definition: precomp.h:21
PUSHORT DBCSOffsets
Definition: precomp.h:43
USHORT UniDefaultChar
Definition: precomp.h:24
PUSHORT MultiByteTable
Definition: precomp.h:40
PUSHORT DBCSRanges
Definition: precomp.h:42
USHORT HeaderSize
Definition: precomp.h:20
unsigned char * PUCHAR
Definition: retypes.h:3
#define free
Definition: debug_ros.c:5
DWORD dwFileSize
Definition: more.c:36
struct _NLS_FILE_HEADER * PNLS_FILE_HEADER
BOOL NLS_IsDefaultCharForMB(PCPTABLEINFO CodePageTable, UCHAR Char)
Definition: nls.c:103
#define INVALID_HANDLE_VALUE
Definition: compat.h:391
_Inout_ __drv_aliasesMem PSLIST_ENTRY _Inout_ PSLIST_ENTRY _In_ ULONG Count
Definition: exfuncs.h:1015
struct TraceInfo Info
#define FILE_SHARE_READ
Definition: compat.h:125
unsigned int BOOL
Definition: ntddk_ex.h:94
PVOID WideCharTable
Definition: precomp.h:41
USHORT NLS_RecordsCountForDBCSTable(PCPTABLEINFO CodePageTable, UCHAR LeadByte)
Definition: nls.c:186
smooth NULL
Definition: ftsmooth.c:416
USHORT TransDefaultChar
Definition: precomp.h:36
USHORT TransDefaultChar
Definition: precomp.h:25
#define OPEN_EXISTING
Definition: compat.h:426
BOOL NLS_IsGlyphTablePresent(PCPTABLEINFO CodePageTable)
Definition: nls.c:97
UCHAR LeadByte[MAXIMUM_LEADBYTES]
Definition: precomp.h:39
USHORT DBCSCodePage
Definition: precomp.h:38
__wchar_t WCHAR
Definition: xmlstorage.h:180
USHORT TransUniDefaultChar
Definition: precomp.h:37
BOOL NLS_IsDefaultCharForUnicode(PCPTABLEINFO CodePageTable, USHORT Char)
Definition: nls.c:112
USHORT DefaultChar
Definition: precomp.h:23
USHORT MaximumCharacterSize
Definition: precomp.h:33
UCHAR LeadByte[MAXIMUM_LEADBYTES]
Definition: precomp.h:27
#define CopyMemory
Definition: winbase.h:1640
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:481
USHORT CodePage
Definition: precomp.h:32
unsigned char UCHAR
Definition: xmlstorage.h:181
#define MAXIMUM_LEADBYTES
Definition: precomp.h:16
USHORT DefaultChar
Definition: precomp.h:34
#define GENERIC_READ
Definition: compat.h:124
USHORT NLS_RecordsCountForGlyphTable(PCPTABLEINFO CodePageTable)
Definition: nls.c:164
_In_ HANDLE hFile
Definition: mswsock.h:90
IN OUT PVCB OUT PDIRENT OUT PBCB IN BOOLEAN CreateFile
Definition: fatprocs.h:904
unsigned short USHORT
Definition: pedump.c:61
PUSHORT NLS_ReadFile(const WCHAR *pszFile, PCPTABLEINFO CodePageTable)
Definition: nls.c:58
BOOL NLS_IsDBCSCodePage(PCPTABLEINFO CodePageTable)
Definition: nls.c:91
unsigned int ULONG
Definition: retypes.h:1
_Out_ PCPTABLEINFO CodePageTable
Definition: rtlfuncs.h:4113
#define malloc
Definition: debug_ros.c:4
USHORT MaximumCharacterSize
Definition: precomp.h:22
USHORT TransUniDefaultChar
Definition: precomp.h:26
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1827
BOOL WINAPI ReadFile(IN HANDLE hFile, IN LPVOID lpBuffer, IN DWORD nNumberOfBytesToRead, OUT LPDWORD lpNumberOfBytesRead OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:123
unsigned short * PUSHORT
Definition: retypes.h:2
static VOID NLS_InitCodePageTable(PUSHORT TableBase, PCPTABLEINFO CodePageTable)
Definition: nls.c:11